195b7a5c8Smrg#! /usr/bin/env sh
27cea3689Smrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
395b7a5c8Smrg##               by inline-source v2019-02-19.15
4e19dfac4Smrg
5ae545d91Smrg# libtool (GNU libtool) 2.5.4
67cea3689Smrg# Provide generalized library-building support services.
7e19dfac4Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
8e19dfac4Smrg
9ae545d91Smrg# Copyright (C) 1996-2019, 2021-2024 Free Software Foundation, Inc.
10e19dfac4Smrg# This is free software; see the source for copying conditions.  There is NO
11e19dfac4Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12e19dfac4Smrg
13e19dfac4Smrg# GNU Libtool is free software; you can redistribute it and/or modify
1427702724Smrg# it under the terms of the GNU General Public License as published by
1527702724Smrg# the Free Software Foundation; either version 2 of the License, or
1627702724Smrg# (at your option) any later version.
1727702724Smrg#
18e19dfac4Smrg# As a special exception to the GNU General Public License,
19e19dfac4Smrg# if you distribute this file as part of a program or library that
20e19dfac4Smrg# is built using GNU Libtool, you may include this file under the
21e19dfac4Smrg# same distribution terms that you use for the rest of that program.
22e19dfac4Smrg#
23e19dfac4Smrg# GNU Libtool is distributed in the hope that it will be useful, but
2427702724Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
2527702724Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
2627702724Smrg# General Public License for more details.
2727702724Smrg#
2827702724Smrg# You should have received a copy of the GNU General Public License
297cea3689Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
30e19dfac4Smrg
31e19dfac4Smrg
32313a12fdSmrgPROGRAM=libtool
33e19dfac4SmrgPACKAGE=libtool
34ae545d91SmrgVERSION=2.5.4
35ae545d91Smrgpackage_revision=2.5.4
36e19dfac4Smrg
377cea3689Smrg
387cea3689Smrg## ------ ##
397cea3689Smrg## Usage. ##
407cea3689Smrg## ------ ##
417cea3689Smrg
427cea3689Smrg# Run './libtool --help' for help with using this script from the
437cea3689Smrg# command line.
447cea3689Smrg
457cea3689Smrg
467cea3689Smrg## ------------------------------- ##
477cea3689Smrg## User overridable command paths. ##
487cea3689Smrg## ------------------------------- ##
497cea3689Smrg
507cea3689Smrg# After configure completes, it has a better idea of some of the
517cea3689Smrg# shell tools we need than the defaults used by the functions shared
527cea3689Smrg# with bootstrap, so set those here where they can still be over-
537cea3689Smrg# ridden by the user, but otherwise take precedence.
547cea3689Smrg
557cea3689Smrg: ${AUTOCONF="autoconf"}
567cea3689Smrg: ${AUTOMAKE="automake"}
577cea3689Smrg
587cea3689Smrg
597cea3689Smrg## -------------------------- ##
607cea3689Smrg## Source external libraries. ##
617cea3689Smrg## -------------------------- ##
627cea3689Smrg
637cea3689Smrg# Much of our low-level functionality needs to be sourced from external
647cea3689Smrg# libraries, which are installed to $pkgauxdir.
657cea3689Smrg
667cea3689Smrg# Set a version string for this script.
6795b7a5c8Smrgscriptversion=2019-02-19.15; # UTC
687cea3689Smrg
697cea3689Smrg# General shell script boiler plate, and helper functions.
707cea3689Smrg# Written by Gary V. Vaughan, 2004
717cea3689Smrg
7295b7a5c8Smrg# This is free software.  There is NO warranty; not even for
7395b7a5c8Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7495b7a5c8Smrg#
75ae545d91Smrg# Copyright (C) 2004-2019, 2021, 2023-2024 Bootstrap Authors
7695b7a5c8Smrg#
7795b7a5c8Smrg# This file is dual licensed under the terms of the MIT license
78ae545d91Smrg# <https://opensource.org/licenses/MIT>, and GPL version 2 or later
79ae545d91Smrg# <https://www.gnu.org/licenses/gpl-2.0.html>.  You must apply one of
8095b7a5c8Smrg# these licenses when using or redistributing this software or any of
8195b7a5c8Smrg# the files within it.  See the URLs above, or the file `LICENSE`
8295b7a5c8Smrg# included in the Bootstrap distribution for the full license texts.
837cea3689Smrg
8495b7a5c8Smrg# Please report bugs or propose patches to:
8595b7a5c8Smrg# <https://github.com/gnulib-modules/bootstrap/issues>
867cea3689Smrg
877cea3689Smrg
887cea3689Smrg## ------ ##
897cea3689Smrg## Usage. ##
907cea3689Smrg## ------ ##
917cea3689Smrg
927cea3689Smrg# Evaluate this file near the top of your script to gain access to
937cea3689Smrg# the functions and variables defined here:
947cea3689Smrg#
957cea3689Smrg#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
967cea3689Smrg#
977cea3689Smrg# If you need to override any of the default environment variable
987cea3689Smrg# settings, do that before evaluating this file.
997cea3689Smrg
1007cea3689Smrg
1017cea3689Smrg## -------------------- ##
1027cea3689Smrg## Shell normalisation. ##
1037cea3689Smrg## -------------------- ##
1047cea3689Smrg
1057cea3689Smrg# Some shells need a little help to be as Bourne compatible as possible.
1067cea3689Smrg# Before doing anything else, make sure all that help has been provided!
1077cea3689Smrg
1087cea3689SmrgDUALCASE=1; export DUALCASE # for MKS sh
1097cea3689Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
110e19dfac4Smrg  emulate sh
111e19dfac4Smrg  NULLCMD=:
1127cea3689Smrg  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
113e19dfac4Smrg  # is contrary to our usage.  Disable this feature.
114e19dfac4Smrg  alias -g '${1+"$@"}'='"$@"'
115e19dfac4Smrg  setopt NO_GLOB_SUBST
116e19dfac4Smrgelse
1177cea3689Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
118e19dfac4Smrgfi
119313a12fdSmrg
1207cea3689Smrg# NLS nuisances: We save the old values in case they are required later.
1217cea3689Smrg_G_user_locale=
1227cea3689Smrg_G_safe_locale=
1237cea3689Smrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
124e19dfac4Smrgdo
1257cea3689Smrg  eval "if test set = \"\${$_G_var+set}\"; then
1267cea3689Smrg          save_$_G_var=\$$_G_var
1277cea3689Smrg          $_G_var=C
1287cea3689Smrg	  export $_G_var
1297cea3689Smrg	  _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
1307cea3689Smrg	  _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
131e19dfac4Smrg	fi"
132e19dfac4Smrgdone
13395b7a5c8Smrg# These NLS vars are set unconditionally (bootstrap issue #24).  Unset those
13495b7a5c8Smrg# in case the environment reset is needed later and the $save_* variant is not
13595b7a5c8Smrg# defined (see the code above).
13695b7a5c8SmrgLC_ALL=C
13795b7a5c8SmrgLANGUAGE=C
13895b7a5c8Smrgexport LANGUAGE LC_ALL
139e19dfac4Smrg
1407cea3689Smrg# Make sure IFS has a sensible default
1417cea3689Smrgsp=' '
1427cea3689Smrgnl='
1437cea3689Smrg'
1447cea3689SmrgIFS="$sp	$nl"
1457cea3689Smrg
146ae545d91Smrg# There are apparently some systems that use ';' as a PATH separator!
1477cea3689Smrgif test "${PATH_SEPARATOR+set}" != set; then
1487cea3689Smrg  PATH_SEPARATOR=:
1497cea3689Smrg  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
1507cea3689Smrg    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
1517cea3689Smrg      PATH_SEPARATOR=';'
1527cea3689Smrg  }
1537cea3689Smrgfi
154e19dfac4Smrg
155e19dfac4Smrg
15695b7a5c8Smrg# func_unset VAR
15795b7a5c8Smrg# --------------
15895b7a5c8Smrg# Portably unset VAR.
15995b7a5c8Smrg# In some shells, an 'unset VAR' statement leaves a non-zero return
16095b7a5c8Smrg# status if VAR is already unset, which might be problematic if the
16195b7a5c8Smrg# statement is used at the end of a function (thus poisoning its return
16295b7a5c8Smrg# value) or when 'set -e' is active (causing even a spurious abort of
16395b7a5c8Smrg# the script in this case).
16495b7a5c8Smrgfunc_unset ()
16595b7a5c8Smrg{
16695b7a5c8Smrg    { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; }
16795b7a5c8Smrg}
16895b7a5c8Smrg
16995b7a5c8Smrg
17095b7a5c8Smrg# Make sure CDPATH doesn't cause `cd` commands to output the target dir.
17195b7a5c8Smrgfunc_unset CDPATH
17295b7a5c8Smrg
17395b7a5c8Smrg# Make sure ${,E,F}GREP behave sanely.
17495b7a5c8Smrgfunc_unset GREP_OPTIONS
17595b7a5c8Smrg
176e19dfac4Smrg
1777cea3689Smrg## ------------------------- ##
1787cea3689Smrg## Locate command utilities. ##
1797cea3689Smrg## ------------------------- ##
1807cea3689Smrg
1817cea3689Smrg
1827cea3689Smrg# func_executable_p FILE
1837cea3689Smrg# ----------------------
1847cea3689Smrg# Check that FILE is an executable regular file.
1857cea3689Smrgfunc_executable_p ()
1867cea3689Smrg{
1877cea3689Smrg    test -f "$1" && test -x "$1"
1887cea3689Smrg}
1897cea3689Smrg
1907cea3689Smrg
1917cea3689Smrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
1927cea3689Smrg# --------------------------------------------
1937cea3689Smrg# Search for either a program that responds to --version with output
1947cea3689Smrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by
1957cea3689Smrg# trying all the directories in PATH with each of the elements of
1967cea3689Smrg# PROGS_LIST.
1977cea3689Smrg#
1987cea3689Smrg# CHECK_FUNC should accept the path to a candidate program, and
1997cea3689Smrg# set $func_check_prog_result if it truncates its output less than
2007cea3689Smrg# $_G_path_prog_max characters.
2017cea3689Smrgfunc_path_progs ()
2027cea3689Smrg{
2037cea3689Smrg    _G_progs_list=$1
2047cea3689Smrg    _G_check_func=$2
2057cea3689Smrg    _G_PATH=${3-"$PATH"}
2067cea3689Smrg
2077cea3689Smrg    _G_path_prog_max=0
2087cea3689Smrg    _G_path_prog_found=false
2097cea3689Smrg    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
2107cea3689Smrg    for _G_dir in $_G_PATH; do
2117cea3689Smrg      IFS=$_G_save_IFS
2127cea3689Smrg      test -z "$_G_dir" && _G_dir=.
2137cea3689Smrg      for _G_prog_name in $_G_progs_list; do
2147cea3689Smrg        for _exeext in '' .EXE; do
2157cea3689Smrg          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
2167cea3689Smrg          func_executable_p "$_G_path_prog" || continue
2177cea3689Smrg          case `"$_G_path_prog" --version 2>&1` in
2187cea3689Smrg            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
2197cea3689Smrg            *)     $_G_check_func $_G_path_prog
2207cea3689Smrg		   func_path_progs_result=$func_check_prog_result
2217cea3689Smrg		   ;;
2227cea3689Smrg          esac
2237cea3689Smrg          $_G_path_prog_found && break 3
2247cea3689Smrg        done
2257cea3689Smrg      done
2267cea3689Smrg    done
2277cea3689Smrg    IFS=$_G_save_IFS
2287cea3689Smrg    test -z "$func_path_progs_result" && {
2297cea3689Smrg      echo "no acceptable sed could be found in \$PATH" >&2
2307cea3689Smrg      exit 1
2317cea3689Smrg    }
2327cea3689Smrg}
2337cea3689Smrg
2347cea3689Smrg
2357cea3689Smrg# We want to be able to use the functions in this file before configure
2367cea3689Smrg# has figured out where the best binaries are kept, which means we have
2377cea3689Smrg# to search for them ourselves - except when the results are already set
2387cea3689Smrg# where we skip the searches.
2397cea3689Smrg
2407cea3689Smrg# Unless the user overrides by setting SED, search the path for either GNU
2417cea3689Smrg# sed, or the sed that truncates its output the least.
2427cea3689Smrgtest -z "$SED" && {
2437cea3689Smrg  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
2447cea3689Smrg  for _G_i in 1 2 3 4 5 6 7; do
2457cea3689Smrg    _G_sed_script=$_G_sed_script$nl$_G_sed_script
2467cea3689Smrg  done
2477cea3689Smrg  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
2487cea3689Smrg  _G_sed_script=
2497cea3689Smrg
2507cea3689Smrg  func_check_prog_sed ()
2517cea3689Smrg  {
2527cea3689Smrg    _G_path_prog=$1
2537cea3689Smrg
2547cea3689Smrg    _G_count=0
2557cea3689Smrg    printf 0123456789 >conftest.in
2567cea3689Smrg    while :
2577cea3689Smrg    do
2587cea3689Smrg      cat conftest.in conftest.in >conftest.tmp
2597cea3689Smrg      mv conftest.tmp conftest.in
2607cea3689Smrg      cp conftest.in conftest.nl
2617cea3689Smrg      echo '' >> conftest.nl
2627cea3689Smrg      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
2637cea3689Smrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
2647cea3689Smrg      _G_count=`expr $_G_count + 1`
2657cea3689Smrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
2667cea3689Smrg        # Best one so far, save it but keep looking for a better one
2677cea3689Smrg        func_check_prog_result=$_G_path_prog
2687cea3689Smrg        _G_path_prog_max=$_G_count
2697cea3689Smrg      fi
2707cea3689Smrg      # 10*(2^10) chars as input seems more than enough
2717cea3689Smrg      test 10 -lt "$_G_count" && break
2727cea3689Smrg    done
2737cea3689Smrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
2747cea3689Smrg  }
2757cea3689Smrg
27695b7a5c8Smrg  func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin"
2777cea3689Smrg  rm -f conftest.sed
2787cea3689Smrg  SED=$func_path_progs_result
2797cea3689Smrg}
2807cea3689Smrg
2817cea3689Smrg
2827cea3689Smrg# Unless the user overrides by setting GREP, search the path for either GNU
2837cea3689Smrg# grep, or the grep that truncates its output the least.
2847cea3689Smrgtest -z "$GREP" && {
2857cea3689Smrg  func_check_prog_grep ()
2867cea3689Smrg  {
2877cea3689Smrg    _G_path_prog=$1
2887cea3689Smrg
2897cea3689Smrg    _G_count=0
2907cea3689Smrg    _G_path_prog_max=0
2917cea3689Smrg    printf 0123456789 >conftest.in
2927cea3689Smrg    while :
2937cea3689Smrg    do
2947cea3689Smrg      cat conftest.in conftest.in >conftest.tmp
2957cea3689Smrg      mv conftest.tmp conftest.in
2967cea3689Smrg      cp conftest.in conftest.nl
2977cea3689Smrg      echo 'GREP' >> conftest.nl
2987cea3689Smrg      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
2997cea3689Smrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
3007cea3689Smrg      _G_count=`expr $_G_count + 1`
3017cea3689Smrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
3027cea3689Smrg        # Best one so far, save it but keep looking for a better one
3037cea3689Smrg        func_check_prog_result=$_G_path_prog
3047cea3689Smrg        _G_path_prog_max=$_G_count
3057cea3689Smrg      fi
3067cea3689Smrg      # 10*(2^10) chars as input seems more than enough
3077cea3689Smrg      test 10 -lt "$_G_count" && break
3087cea3689Smrg    done
3097cea3689Smrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
3107cea3689Smrg  }
3117cea3689Smrg
31295b7a5c8Smrg  func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin"
3137cea3689Smrg  GREP=$func_path_progs_result
3147cea3689Smrg}
3157cea3689Smrg
3167cea3689Smrg
3177cea3689Smrg## ------------------------------- ##
3187cea3689Smrg## User overridable command paths. ##
3197cea3689Smrg## ------------------------------- ##
3207cea3689Smrg
3217cea3689Smrg# All uppercase variable names are used for environment variables.  These
3227cea3689Smrg# variables can be overridden by the user before calling a script that
3237cea3689Smrg# uses them if a suitable command of that name is not already available
3247cea3689Smrg# in the command search PATH.
325e19dfac4Smrg
326e19dfac4Smrg: ${CP="cp -f"}
3277cea3689Smrg: ${ECHO="printf %s\n"}
3287cea3689Smrg: ${EGREP="$GREP -E"}
3297cea3689Smrg: ${FGREP="$GREP -F"}
3307cea3689Smrg: ${LN_S="ln -s"}
331e19dfac4Smrg: ${MAKE="make"}
332e19dfac4Smrg: ${MKDIR="mkdir"}
333e19dfac4Smrg: ${MV="mv -f"}
334e19dfac4Smrg: ${RM="rm -f"}
335e19dfac4Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
336e19dfac4Smrg
337e19dfac4Smrg
3387cea3689Smrg## -------------------- ##
3397cea3689Smrg## Useful sed snippets. ##
3407cea3689Smrg## -------------------- ##
341313a12fdSmrg
3427cea3689Smrgsed_dirname='s|/[^/]*$||'
3437cea3689Smrgsed_basename='s|^.*/||'
344313a12fdSmrg
3457cea3689Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
3467cea3689Smrg# metacharacters that are still active within double-quoted strings.
3477cea3689Smrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g'
348313a12fdSmrg
3497cea3689Smrg# Same as above, but do not quote variable references.
3507cea3689Smrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
351313a12fdSmrg
3527cea3689Smrg# Sed substitution that turns a string into a regex matching for the
3537cea3689Smrg# string literally.
3547cea3689Smrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
355313a12fdSmrg
3567cea3689Smrg# Sed substitution that converts a w32 file name or path
3577cea3689Smrg# that contains forward slashes, into one that contains
3587cea3689Smrg# (escaped) backslashes.  A very naive implementation.
3597cea3689Smrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
3607cea3689Smrg
3617cea3689Smrg# Re-'\' parameter expansions in output of sed_double_quote_subst that
3627cea3689Smrg# were '\'-ed in input to the same.  If an odd number of '\' preceded a
3637cea3689Smrg# '$' in input to sed_double_quote_subst, that '$' was protected from
3647cea3689Smrg# expansion.  Since each input '\' is now two '\'s, look for any number
3657cea3689Smrg# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
3667cea3689Smrg_G_bs='\\'
3677cea3689Smrg_G_bs2='\\\\'
3687cea3689Smrg_G_bs4='\\\\\\\\'
3697cea3689Smrg_G_dollar='\$'
3707cea3689Smrgsed_double_backslash="\
3717cea3689Smrg  s/$_G_bs4/&\\
3727cea3689Smrg/g
3737cea3689Smrg  s/^$_G_bs2$_G_dollar/$_G_bs&/
3747cea3689Smrg  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
3757cea3689Smrg  s/\n//g"
376313a12fdSmrg
37795b7a5c8Smrg# require_check_ifs_backslash
37895b7a5c8Smrg# ---------------------------
37995b7a5c8Smrg# Check if we can use backslash as IFS='\' separator, and set
38095b7a5c8Smrg# $check_ifs_backshlash_broken to ':' or 'false'.
38195b7a5c8Smrgrequire_check_ifs_backslash=func_require_check_ifs_backslash
38295b7a5c8Smrgfunc_require_check_ifs_backslash ()
38395b7a5c8Smrg{
38495b7a5c8Smrg  _G_save_IFS=$IFS
38595b7a5c8Smrg  IFS='\'
38695b7a5c8Smrg  _G_check_ifs_backshlash='a\\b'
38795b7a5c8Smrg  for _G_i in $_G_check_ifs_backshlash
38895b7a5c8Smrg  do
38995b7a5c8Smrg  case $_G_i in
39095b7a5c8Smrg  a)
39195b7a5c8Smrg    check_ifs_backshlash_broken=false
39295b7a5c8Smrg    ;;
39395b7a5c8Smrg  '')
39495b7a5c8Smrg    break
39595b7a5c8Smrg    ;;
39695b7a5c8Smrg  *)
39795b7a5c8Smrg    check_ifs_backshlash_broken=:
39895b7a5c8Smrg    break
39995b7a5c8Smrg    ;;
40095b7a5c8Smrg  esac
40195b7a5c8Smrg  done
40295b7a5c8Smrg  IFS=$_G_save_IFS
40395b7a5c8Smrg  require_check_ifs_backslash=:
40495b7a5c8Smrg}
40595b7a5c8Smrg
406313a12fdSmrg
4077cea3689Smrg## ----------------- ##
4087cea3689Smrg## Global variables. ##
4097cea3689Smrg## ----------------- ##
410313a12fdSmrg
4117cea3689Smrg# Except for the global variables explicitly listed below, the following
4127cea3689Smrg# functions in the '^func_' namespace, and the '^require_' namespace
4137cea3689Smrg# variables initialised in the 'Resource management' section, sourcing
4147cea3689Smrg# this file will not pollute your global namespace with anything
4157cea3689Smrg# else. There's no portable way to scope variables in Bourne shell
4167cea3689Smrg# though, so actually running these functions will sometimes place
4177cea3689Smrg# results into a variable named after the function, and often use
4187cea3689Smrg# temporary variables in the '^_G_' namespace. If you are careful to
4197cea3689Smrg# avoid using those namespaces casually in your sourcing script, things
4207cea3689Smrg# should continue to work as you expect. And, of course, you can freely
4217cea3689Smrg# overwrite any of the functions or variables defined here before
4227cea3689Smrg# calling anything to customize them.
423313a12fdSmrg
4247cea3689SmrgEXIT_SUCCESS=0
4257cea3689SmrgEXIT_FAILURE=1
4267cea3689SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
4277cea3689SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
428e19dfac4Smrg
4297cea3689Smrg# Allow overriding, eg assuming that you follow the convention of
4307cea3689Smrg# putting '$debug_cmd' at the start of all your functions, you can get
4317cea3689Smrg# bash to show function call trace with:
4327cea3689Smrg#
4337cea3689Smrg#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
4347cea3689Smrgdebug_cmd=${debug_cmd-":"}
4357cea3689Smrgexit_cmd=:
43627702724Smrg
4377cea3689Smrg# By convention, finish your script with:
4387cea3689Smrg#
4397cea3689Smrg#    exit $exit_status
4407cea3689Smrg#
4417cea3689Smrg# so that you can set exit_status to non-zero if you want to indicate
4427cea3689Smrg# something went wrong during execution without actually bailing out at
4437cea3689Smrg# the point of failure.
4447cea3689Smrgexit_status=$EXIT_SUCCESS
445313a12fdSmrg
4467cea3689Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
4477cea3689Smrg# is ksh but when the shell is invoked as "sh" and the current value of
4487cea3689Smrg# the _XPG environment variable is not equal to 1 (one), the special
4497cea3689Smrg# positional parameter $0, within a function call, is the name of the
4507cea3689Smrg# function.
4517cea3689Smrgprogpath=$0
45227702724Smrg
4537cea3689Smrg# The name of this program.
4547cea3689Smrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"`
45527702724Smrg
4567cea3689Smrg# Make sure we have an absolute progpath for reexecution:
457e19dfac4Smrgcase $progpath in
458e19dfac4Smrg  [\\/]*|[A-Za-z]:\\*) ;;
459e19dfac4Smrg  *[\\/]*)
4607cea3689Smrg     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
461e19dfac4Smrg     progdir=`cd "$progdir" && pwd`
4627cea3689Smrg     progpath=$progdir/$progname
463e19dfac4Smrg     ;;
464e19dfac4Smrg  *)
4657cea3689Smrg     _G_IFS=$IFS
466313a12fdSmrg     IFS=${PATH_SEPARATOR-:}
467e19dfac4Smrg     for progdir in $PATH; do
4687cea3689Smrg       IFS=$_G_IFS
469e19dfac4Smrg       test -x "$progdir/$progname" && break
470e19dfac4Smrg     done
4717cea3689Smrg     IFS=$_G_IFS
472e19dfac4Smrg     test -n "$progdir" || progdir=`pwd`
4737cea3689Smrg     progpath=$progdir/$progname
474e19dfac4Smrg     ;;
475e19dfac4Smrgesac
47627702724Smrg
477e19dfac4Smrg
4787cea3689Smrg## ----------------- ##
4797cea3689Smrg## Standard options. ##
4807cea3689Smrg## ----------------- ##
481313a12fdSmrg
4827cea3689Smrg# The following options affect the operation of the functions defined
4837cea3689Smrg# below, and should be set appropriately depending on run-time para-
4847cea3689Smrg# meters passed on the command line.
485e19dfac4Smrg
486e19dfac4Smrgopt_dry_run=false
487e19dfac4Smrgopt_quiet=false
488e19dfac4Smrgopt_verbose=false
489e19dfac4Smrg
4907cea3689Smrg# Categories 'all' and 'none' are always available.  Append any others
4917cea3689Smrg# you will pass as the first argument to func_warning from your own
4927cea3689Smrg# code.
4937cea3689Smrgwarning_categories=
49427702724Smrg
4957cea3689Smrg# By default, display warnings according to 'opt_warning_types'.  Set
4967cea3689Smrg# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
4977cea3689Smrg# treat the next displayed warning as a fatal error.
4987cea3689Smrgwarning_func=func_warn_and_continue
49927702724Smrg
5007cea3689Smrg# Set to 'all' to display all warnings, 'none' to suppress all
5017cea3689Smrg# warnings, or a space delimited list of some subset of
5027cea3689Smrg# 'warning_categories' to display only the listed warnings.
5037cea3689Smrgopt_warning_types=all
50427702724Smrg
505313a12fdSmrg
5067cea3689Smrg## -------------------- ##
5077cea3689Smrg## Resource management. ##
5087cea3689Smrg## -------------------- ##
50927702724Smrg
5107cea3689Smrg# This section contains definitions for functions that each ensure a
5117cea3689Smrg# particular resource (a file, or a non-empty configuration variable for
5127cea3689Smrg# example) is available, and if appropriate to extract default values
5137cea3689Smrg# from pertinent package files. Call them using their associated
5147cea3689Smrg# 'require_*' variable to ensure that they are executed, at most, once.
5157cea3689Smrg#
5167cea3689Smrg# It's entirely deliberate that calling these functions can set
5177cea3689Smrg# variables that don't obey the namespace limitations obeyed by the rest
5187cea3689Smrg# of this file, in order that that they be as useful as possible to
5197cea3689Smrg# callers.
52027702724Smrg
52127702724Smrg
5227cea3689Smrg# require_term_colors
5237cea3689Smrg# -------------------
5247cea3689Smrg# Allow display of bold text on terminals that support it.
5257cea3689Smrgrequire_term_colors=func_require_term_colors
5267cea3689Smrgfunc_require_term_colors ()
527e19dfac4Smrg{
5287cea3689Smrg    $debug_cmd
5297cea3689Smrg
5307cea3689Smrg    test -t 1 && {
5317cea3689Smrg      # COLORTERM and USE_ANSI_COLORS environment variables take
5327cea3689Smrg      # precedence, because most terminfo databases neglect to describe
5337cea3689Smrg      # whether color sequences are supported.
5347cea3689Smrg      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
5357cea3689Smrg
5367cea3689Smrg      if test 1 = "$USE_ANSI_COLORS"; then
5377cea3689Smrg        # Standard ANSI escape sequences
5387cea3689Smrg        tc_reset='[0m'
5397cea3689Smrg        tc_bold='[1m';   tc_standout='[7m'
5407cea3689Smrg        tc_red='[31m';   tc_green='[32m'
5417cea3689Smrg        tc_blue='[34m';  tc_cyan='[36m'
5427cea3689Smrg      else
5437cea3689Smrg        # Otherwise trust the terminfo database after all.
5447cea3689Smrg        test -n "`tput sgr0 2>/dev/null`" && {
5457cea3689Smrg          tc_reset=`tput sgr0`
5467cea3689Smrg          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
5477cea3689Smrg          tc_standout=$tc_bold
5487cea3689Smrg          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
5497cea3689Smrg          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
5507cea3689Smrg          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
5517cea3689Smrg          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
5527cea3689Smrg          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
5537cea3689Smrg        }
5547cea3689Smrg      fi
5557cea3689Smrg    }
55627702724Smrg
5577cea3689Smrg    require_term_colors=:
558e19dfac4Smrg}
55927702724Smrg
56027702724Smrg
5617cea3689Smrg## ----------------- ##
5627cea3689Smrg## Function library. ##
5637cea3689Smrg## ----------------- ##
5647cea3689Smrg
5657cea3689Smrg# This section contains a variety of useful functions to call in your
5667cea3689Smrg# scripts. Take note of the portable wrappers for features provided by
5677cea3689Smrg# some modern shells, which will fall back to slower equivalents on
5687cea3689Smrg# less featureful shells.
5697cea3689Smrg
5707cea3689Smrg
5717cea3689Smrg# func_append VAR VALUE
5727cea3689Smrg# ---------------------
5737cea3689Smrg# Append VALUE onto the existing contents of VAR.
5747cea3689Smrg
5757cea3689Smrg  # We should try to minimise forks, especially on Windows where they are
5767cea3689Smrg  # unreasonably slow, so skip the feature probes when bash or zsh are
5777cea3689Smrg  # being used:
5787cea3689Smrg  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
5797cea3689Smrg    : ${_G_HAVE_ARITH_OP="yes"}
5807cea3689Smrg    : ${_G_HAVE_XSI_OPS="yes"}
5817cea3689Smrg    # The += operator was introduced in bash 3.1
5827cea3689Smrg    case $BASH_VERSION in
5837cea3689Smrg      [12].* | 3.0 | 3.0*) ;;
5847cea3689Smrg      *)
5857cea3689Smrg        : ${_G_HAVE_PLUSEQ_OP="yes"}
5867cea3689Smrg        ;;
5877cea3689Smrg    esac
5887cea3689Smrg  fi
5897cea3689Smrg
5907cea3689Smrg  # _G_HAVE_PLUSEQ_OP
5917cea3689Smrg  # Can be empty, in which case the shell is probed, "yes" if += is
592ae545d91Smrg  # usable or anything else if it does not work.
5937cea3689Smrg  test -z "$_G_HAVE_PLUSEQ_OP" \
5947cea3689Smrg    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
5957cea3689Smrg    && _G_HAVE_PLUSEQ_OP=yes
5967cea3689Smrg
5977cea3689Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"
5987cea3689Smrgthen
5997cea3689Smrg  # This is an XSI compatible shell, allowing a faster implementation...
6007cea3689Smrg  eval 'func_append ()
6017cea3689Smrg  {
6027cea3689Smrg    $debug_cmd
6037cea3689Smrg
6047cea3689Smrg    eval "$1+=\$2"
6057cea3689Smrg  }'
6067cea3689Smrgelse
6077cea3689Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
6087cea3689Smrg  func_append ()
6097cea3689Smrg  {
6107cea3689Smrg    $debug_cmd
6117cea3689Smrg
6127cea3689Smrg    eval "$1=\$$1\$2"
6137cea3689Smrg  }
6147cea3689Smrgfi
6157cea3689Smrg
6167cea3689Smrg
6177cea3689Smrg# func_append_quoted VAR VALUE
6187cea3689Smrg# ----------------------------
6197cea3689Smrg# Quote VALUE and append to the end of shell variable VAR, separated
6207cea3689Smrg# by a space.
6217cea3689Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then
6227cea3689Smrg  eval 'func_append_quoted ()
6237cea3689Smrg  {
6247cea3689Smrg    $debug_cmd
6257cea3689Smrg
62695b7a5c8Smrg    func_quote_arg pretty "$2"
62795b7a5c8Smrg    eval "$1+=\\ \$func_quote_arg_result"
6287cea3689Smrg  }'
6297cea3689Smrgelse
6307cea3689Smrg  func_append_quoted ()
6317cea3689Smrg  {
6327cea3689Smrg    $debug_cmd
6337cea3689Smrg
63495b7a5c8Smrg    func_quote_arg pretty "$2"
63595b7a5c8Smrg    eval "$1=\$$1\\ \$func_quote_arg_result"
6367cea3689Smrg  }
6377cea3689Smrgfi
6387cea3689Smrg
6397cea3689Smrg
6407cea3689Smrg# func_append_uniq VAR VALUE
6417cea3689Smrg# --------------------------
6427cea3689Smrg# Append unique VALUE onto the existing contents of VAR, assuming
6437cea3689Smrg# entries are delimited by the first character of VALUE.  For example:
6447cea3689Smrg#
6457cea3689Smrg#   func_append_uniq options " --another-option option-argument"
6467cea3689Smrg#
6477cea3689Smrg# will only append to $options if " --another-option option-argument "
6487cea3689Smrg# is not already present somewhere in $options already (note spaces at
6497cea3689Smrg# each end implied by leading space in second argument).
6507cea3689Smrgfunc_append_uniq ()
6517cea3689Smrg{
6527cea3689Smrg    $debug_cmd
6537cea3689Smrg
6547cea3689Smrg    eval _G_current_value='`$ECHO $'$1'`'
6557cea3689Smrg    _G_delim=`expr "$2" : '\(.\)'`
6567cea3689Smrg
6577cea3689Smrg    case $_G_delim$_G_current_value$_G_delim in
6587cea3689Smrg      *"$2$_G_delim"*) ;;
6597cea3689Smrg      *) func_append "$@" ;;
6607cea3689Smrg    esac
6617cea3689Smrg}
6627cea3689Smrg
6637cea3689Smrg
6647cea3689Smrg# func_arith TERM...
6657cea3689Smrg# ------------------
6667cea3689Smrg# Set func_arith_result to the result of evaluating TERMs.
6677cea3689Smrg  test -z "$_G_HAVE_ARITH_OP" \
6687cea3689Smrg    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
6697cea3689Smrg    && _G_HAVE_ARITH_OP=yes
6707cea3689Smrg
6717cea3689Smrgif test yes = "$_G_HAVE_ARITH_OP"; then
6727cea3689Smrg  eval 'func_arith ()
6737cea3689Smrg  {
6747cea3689Smrg    $debug_cmd
6757cea3689Smrg
6767cea3689Smrg    func_arith_result=$(( $* ))
6777cea3689Smrg  }'
6787cea3689Smrgelse
6797cea3689Smrg  func_arith ()
6807cea3689Smrg  {
6817cea3689Smrg    $debug_cmd
6827cea3689Smrg
6837cea3689Smrg    func_arith_result=`expr "$@"`
6847cea3689Smrg  }
6857cea3689Smrgfi
6867cea3689Smrg
6877cea3689Smrg
6887cea3689Smrg# func_basename FILE
6897cea3689Smrg# ------------------
6907cea3689Smrg# Set func_basename_result to FILE with everything up to and including
6917cea3689Smrg# the last / stripped.
6927cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
6937cea3689Smrg  # If this shell supports suffix pattern removal, then use it to avoid
6947cea3689Smrg  # forking. Hide the definitions single quotes in case the shell chokes
6957cea3689Smrg  # on unsupported syntax...
6967cea3689Smrg  _b='func_basename_result=${1##*/}'
6977cea3689Smrg  _d='case $1 in
6987cea3689Smrg        */*) func_dirname_result=${1%/*}$2 ;;
6997cea3689Smrg        *  ) func_dirname_result=$3        ;;
7007cea3689Smrg      esac'
7017cea3689Smrg
7027cea3689Smrgelse
7037cea3689Smrg  # ...otherwise fall back to using sed.
7047cea3689Smrg  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
7057cea3689Smrg  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
7067cea3689Smrg      if test "X$func_dirname_result" = "X$1"; then
7077cea3689Smrg        func_dirname_result=$3
7087cea3689Smrg      else
7097cea3689Smrg        func_append func_dirname_result "$2"
7107cea3689Smrg      fi'
7117cea3689Smrgfi
7127cea3689Smrg
7137cea3689Smrgeval 'func_basename ()
7147cea3689Smrg{
7157cea3689Smrg    $debug_cmd
7167cea3689Smrg
7177cea3689Smrg    '"$_b"'
7187cea3689Smrg}'
7197cea3689Smrg
7207cea3689Smrg
7217cea3689Smrg# func_dirname FILE APPEND NONDIR_REPLACEMENT
7227cea3689Smrg# -------------------------------------------
7237cea3689Smrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
7247cea3689Smrg# otherwise set result to NONDIR_REPLACEMENT.
7257cea3689Smrgeval 'func_dirname ()
7267cea3689Smrg{
7277cea3689Smrg    $debug_cmd
7287cea3689Smrg
7297cea3689Smrg    '"$_d"'
7307cea3689Smrg}'
7317cea3689Smrg
7327cea3689Smrg
7337cea3689Smrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
7347cea3689Smrg# --------------------------------------------------------
7357cea3689Smrg# Perform func_basename and func_dirname in a single function
7367cea3689Smrg# call:
7377cea3689Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
7387cea3689Smrg#             add APPEND to the result, otherwise set result
7397cea3689Smrg#             to NONDIR_REPLACEMENT.
7407cea3689Smrg#             value returned in "$func_dirname_result"
7417cea3689Smrg#   basename: Compute filename of FILE.
742ae545d91Smrg#             value returned in "$func_basename_result"
7437cea3689Smrg# For efficiency, we do not delegate to the functions above but instead
7447cea3689Smrg# duplicate the functionality here.
7457cea3689Smrgeval 'func_dirname_and_basename ()
7467cea3689Smrg{
7477cea3689Smrg    $debug_cmd
7487cea3689Smrg
7497cea3689Smrg    '"$_b"'
7507cea3689Smrg    '"$_d"'
7517cea3689Smrg}'
7527cea3689Smrg
7537cea3689Smrg
7547cea3689Smrg# func_echo ARG...
7557cea3689Smrg# ----------------
7567cea3689Smrg# Echo program name prefixed message.
7577cea3689Smrgfunc_echo ()
7587cea3689Smrg{
7597cea3689Smrg    $debug_cmd
7607cea3689Smrg
7617cea3689Smrg    _G_message=$*
7627cea3689Smrg
7637cea3689Smrg    func_echo_IFS=$IFS
7647cea3689Smrg    IFS=$nl
7657cea3689Smrg    for _G_line in $_G_message; do
7667cea3689Smrg      IFS=$func_echo_IFS
7677cea3689Smrg      $ECHO "$progname: $_G_line"
7687cea3689Smrg    done
7697cea3689Smrg    IFS=$func_echo_IFS
7707cea3689Smrg}
7717cea3689Smrg
7727cea3689Smrg
7737cea3689Smrg# func_echo_all ARG...
7747cea3689Smrg# --------------------
7757cea3689Smrg# Invoke $ECHO with all args, space-separated.
7767cea3689Smrgfunc_echo_all ()
7777cea3689Smrg{
7787cea3689Smrg    $ECHO "$*"
7797cea3689Smrg}
7807cea3689Smrg
7817cea3689Smrg
7827cea3689Smrg# func_echo_infix_1 INFIX ARG...
7837cea3689Smrg# ------------------------------
7847cea3689Smrg# Echo program name, followed by INFIX on the first line, with any
7857cea3689Smrg# additional lines not showing INFIX.
7867cea3689Smrgfunc_echo_infix_1 ()
7877cea3689Smrg{
7887cea3689Smrg    $debug_cmd
7897cea3689Smrg
7907cea3689Smrg    $require_term_colors
7917cea3689Smrg
7927cea3689Smrg    _G_infix=$1; shift
7937cea3689Smrg    _G_indent=$_G_infix
7947cea3689Smrg    _G_prefix="$progname: $_G_infix: "
7957cea3689Smrg    _G_message=$*
7967cea3689Smrg
7977cea3689Smrg    # Strip color escape sequences before counting printable length
7987cea3689Smrg    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
7997cea3689Smrg    do
8007cea3689Smrg      test -n "$_G_tc" && {
8017cea3689Smrg        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
8027cea3689Smrg        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
8037cea3689Smrg      }
8047cea3689Smrg    done
8057cea3689Smrg    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
8067cea3689Smrg
8077cea3689Smrg    func_echo_infix_1_IFS=$IFS
8087cea3689Smrg    IFS=$nl
8097cea3689Smrg    for _G_line in $_G_message; do
8107cea3689Smrg      IFS=$func_echo_infix_1_IFS
8117cea3689Smrg      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
8127cea3689Smrg      _G_prefix=$_G_indent
8137cea3689Smrg    done
8147cea3689Smrg    IFS=$func_echo_infix_1_IFS
8157cea3689Smrg}
8167cea3689Smrg
8177cea3689Smrg
8187cea3689Smrg# func_error ARG...
8197cea3689Smrg# -----------------
8207cea3689Smrg# Echo program name prefixed message to standard error.
8217cea3689Smrgfunc_error ()
8227cea3689Smrg{
8237cea3689Smrg    $debug_cmd
8247cea3689Smrg
8257cea3689Smrg    $require_term_colors
8267cea3689Smrg
8277cea3689Smrg    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
8287cea3689Smrg}
8297cea3689Smrg
8307cea3689Smrg
8317cea3689Smrg# func_fatal_error ARG...
8327cea3689Smrg# -----------------------
8337cea3689Smrg# Echo program name prefixed message to standard error, and exit.
8347cea3689Smrgfunc_fatal_error ()
8357cea3689Smrg{
8367cea3689Smrg    $debug_cmd
8377cea3689Smrg
8387cea3689Smrg    func_error "$*"
8397cea3689Smrg    exit $EXIT_FAILURE
8407cea3689Smrg}
8417cea3689Smrg
8427cea3689Smrg
8437cea3689Smrg# func_grep EXPRESSION FILENAME
8447cea3689Smrg# -----------------------------
845e19dfac4Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
846e19dfac4Smrgfunc_grep ()
847e19dfac4Smrg{
8487cea3689Smrg    $debug_cmd
8497cea3689Smrg
850e19dfac4Smrg    $GREP "$1" "$2" >/dev/null 2>&1
851e19dfac4Smrg}
852e19dfac4Smrg
853e19dfac4Smrg
8547cea3689Smrg# func_len STRING
8557cea3689Smrg# ---------------
8567cea3689Smrg# Set func_len_result to the length of STRING. STRING may not
8577cea3689Smrg# start with a hyphen.
8587cea3689Smrg  test -z "$_G_HAVE_XSI_OPS" \
8597cea3689Smrg    && (eval 'x=a/b/c;
8607cea3689Smrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
8617cea3689Smrg    && _G_HAVE_XSI_OPS=yes
8627cea3689Smrg
8637cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
8647cea3689Smrg  eval 'func_len ()
8657cea3689Smrg  {
8667cea3689Smrg    $debug_cmd
8677cea3689Smrg
8687cea3689Smrg    func_len_result=${#1}
8697cea3689Smrg  }'
8707cea3689Smrgelse
8717cea3689Smrg  func_len ()
8727cea3689Smrg  {
8737cea3689Smrg    $debug_cmd
8747cea3689Smrg
8757cea3689Smrg    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
8767cea3689Smrg  }
8777cea3689Smrgfi
8787cea3689Smrg
8797cea3689Smrg
8807cea3689Smrg# func_mkdir_p DIRECTORY-PATH
8817cea3689Smrg# ---------------------------
882e19dfac4Smrg# Make sure the entire path to DIRECTORY-PATH is available.
883e19dfac4Smrgfunc_mkdir_p ()
884e19dfac4Smrg{
8857cea3689Smrg    $debug_cmd
886e19dfac4Smrg
8877cea3689Smrg    _G_directory_path=$1
8887cea3689Smrg    _G_dir_list=
889e19dfac4Smrg
8907cea3689Smrg    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
8917cea3689Smrg
8927cea3689Smrg      # Protect directory names starting with '-'
8937cea3689Smrg      case $_G_directory_path in
8947cea3689Smrg        -*) _G_directory_path=./$_G_directory_path ;;
895e19dfac4Smrg      esac
896e19dfac4Smrg
897e19dfac4Smrg      # While some portion of DIR does not yet exist...
8987cea3689Smrg      while test ! -d "$_G_directory_path"; do
899e19dfac4Smrg        # ...make a list in topmost first order.  Use a colon delimited
900ae545d91Smrg	# list in case some portion of path contains whitespace.
9017cea3689Smrg        _G_dir_list=$_G_directory_path:$_G_dir_list
902e19dfac4Smrg
903e19dfac4Smrg        # If the last portion added has no slash in it, the list is done
9047cea3689Smrg        case $_G_directory_path in */*) ;; *) break ;; esac
905e19dfac4Smrg
906e19dfac4Smrg        # ...otherwise throw away the child directory and loop
9077cea3689Smrg        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
908e19dfac4Smrg      done
9097cea3689Smrg      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
910e19dfac4Smrg
9117cea3689Smrg      func_mkdir_p_IFS=$IFS; IFS=:
9127cea3689Smrg      for _G_dir in $_G_dir_list; do
9137cea3689Smrg	IFS=$func_mkdir_p_IFS
9147cea3689Smrg        # mkdir can fail with a 'File exist' error if two processes
915e19dfac4Smrg        # try to create one of the directories concurrently.  Don't
916e19dfac4Smrg        # stop in that case!
9177cea3689Smrg        $MKDIR "$_G_dir" 2>/dev/null || :
918e19dfac4Smrg      done
9197cea3689Smrg      IFS=$func_mkdir_p_IFS
920e19dfac4Smrg
921e19dfac4Smrg      # Bail out if we (or some other process) failed to create a directory.
9227cea3689Smrg      test -d "$_G_directory_path" || \
9237cea3689Smrg        func_fatal_error "Failed to create '$1'"
924e19dfac4Smrg    fi
925e19dfac4Smrg}
92627702724Smrg
92727702724Smrg
9287cea3689Smrg# func_mktempdir [BASENAME]
9297cea3689Smrg# -------------------------
93027702724Smrg# Make a temporary directory that won't clash with other running
93127702724Smrg# libtool processes, and avoids race conditions if possible.  If
9327cea3689Smrg# given, BASENAME is the basename for that directory.
93327702724Smrgfunc_mktempdir ()
93427702724Smrg{
9357cea3689Smrg    $debug_cmd
9367cea3689Smrg
9377cea3689Smrg    _G_template=${TMPDIR-/tmp}/${1-$progname}
93827702724Smrg
9397cea3689Smrg    if test : = "$opt_dry_run"; then
94027702724Smrg      # Return a directory name, but don't create it in dry-run mode
9417cea3689Smrg      _G_tmpdir=$_G_template-$$
94227702724Smrg    else
94327702724Smrg
94427702724Smrg      # If mktemp works, use that first and foremost
9457cea3689Smrg      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
94627702724Smrg
9477cea3689Smrg      if test ! -d "$_G_tmpdir"; then
948e19dfac4Smrg        # Failing that, at least try and use $RANDOM to avoid a race
9497cea3689Smrg        _G_tmpdir=$_G_template-${RANDOM-0}$$
95027702724Smrg
9517cea3689Smrg        func_mktempdir_umask=`umask`
952e19dfac4Smrg        umask 0077
9537cea3689Smrg        $MKDIR "$_G_tmpdir"
9547cea3689Smrg        umask $func_mktempdir_umask
95527702724Smrg      fi
95627702724Smrg
95727702724Smrg      # If we're not in dry-run mode, bomb out on failure
9587cea3689Smrg      test -d "$_G_tmpdir" || \
9597cea3689Smrg        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
9607cea3689Smrg    fi
9617cea3689Smrg
9627cea3689Smrg    $ECHO "$_G_tmpdir"
9637cea3689Smrg}
9647cea3689Smrg
9657cea3689Smrg
9667cea3689Smrg# func_normal_abspath PATH
9677cea3689Smrg# ------------------------
9687cea3689Smrg# Remove doubled-up and trailing slashes, "." path components,
9697cea3689Smrg# and cancel out any ".." path components in PATH after making
9707cea3689Smrg# it an absolute path.
9717cea3689Smrgfunc_normal_abspath ()
9727cea3689Smrg{
9737cea3689Smrg    $debug_cmd
9747cea3689Smrg
9757cea3689Smrg    # These SED scripts presuppose an absolute path with a trailing slash.
9767cea3689Smrg    _G_pathcar='s|^/\([^/]*\).*$|\1|'
9777cea3689Smrg    _G_pathcdr='s|^/[^/]*||'
9787cea3689Smrg    _G_removedotparts=':dotsl
9797cea3689Smrg		s|/\./|/|g
9807cea3689Smrg		t dotsl
9817cea3689Smrg		s|/\.$|/|'
9827cea3689Smrg    _G_collapseslashes='s|/\{1,\}|/|g'
9837cea3689Smrg    _G_finalslash='s|/*$|/|'
9847cea3689Smrg
9857cea3689Smrg    # Start from root dir and reassemble the path.
9867cea3689Smrg    func_normal_abspath_result=
9877cea3689Smrg    func_normal_abspath_tpath=$1
9887cea3689Smrg    func_normal_abspath_altnamespace=
9897cea3689Smrg    case $func_normal_abspath_tpath in
9907cea3689Smrg      "")
9917cea3689Smrg        # Empty path, that just means $cwd.
9927cea3689Smrg        func_stripname '' '/' "`pwd`"
9937cea3689Smrg        func_normal_abspath_result=$func_stripname_result
9947cea3689Smrg        return
9957cea3689Smrg        ;;
9967cea3689Smrg      # The next three entries are used to spot a run of precisely
9977cea3689Smrg      # two leading slashes without using negated character classes;
9987cea3689Smrg      # we take advantage of case's first-match behaviour.
9997cea3689Smrg      ///*)
10007cea3689Smrg        # Unusual form of absolute path, do nothing.
10017cea3689Smrg        ;;
10027cea3689Smrg      //*)
10037cea3689Smrg        # Not necessarily an ordinary path; POSIX reserves leading '//'
10047cea3689Smrg        # and for example Cygwin uses it to access remote file shares
10057cea3689Smrg        # over CIFS/SMB, so we conserve a leading double slash if found.
10067cea3689Smrg        func_normal_abspath_altnamespace=/
10077cea3689Smrg        ;;
10087cea3689Smrg      /*)
10097cea3689Smrg        # Absolute path, do nothing.
10107cea3689Smrg        ;;
10117cea3689Smrg      *)
10127cea3689Smrg        # Relative path, prepend $cwd.
10137cea3689Smrg        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
10147cea3689Smrg        ;;
10157cea3689Smrg    esac
10167cea3689Smrg
10177cea3689Smrg    # Cancel out all the simple stuff to save iterations.  We also want
10187cea3689Smrg    # the path to end with a slash for ease of parsing, so make sure
10197cea3689Smrg    # there is one (and only one) here.
10207cea3689Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
10217cea3689Smrg          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
10227cea3689Smrg    while :; do
10237cea3689Smrg      # Processed it all yet?
10247cea3689Smrg      if test / = "$func_normal_abspath_tpath"; then
10257cea3689Smrg        # If we ascended to the root using ".." the result may be empty now.
10267cea3689Smrg        if test -z "$func_normal_abspath_result"; then
10277cea3689Smrg          func_normal_abspath_result=/
10287cea3689Smrg        fi
10297cea3689Smrg        break
10307cea3689Smrg      fi
10317cea3689Smrg      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
10327cea3689Smrg          -e "$_G_pathcar"`
10337cea3689Smrg      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
10347cea3689Smrg          -e "$_G_pathcdr"`
10357cea3689Smrg      # Figure out what to do with it
10367cea3689Smrg      case $func_normal_abspath_tcomponent in
10377cea3689Smrg        "")
10387cea3689Smrg          # Trailing empty path component, ignore it.
10397cea3689Smrg          ;;
10407cea3689Smrg        ..)
10417cea3689Smrg          # Parent dir; strip last assembled component from result.
10427cea3689Smrg          func_dirname "$func_normal_abspath_result"
10437cea3689Smrg          func_normal_abspath_result=$func_dirname_result
10447cea3689Smrg          ;;
10457cea3689Smrg        *)
10467cea3689Smrg          # Actual path component, append it.
10477cea3689Smrg          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
10487cea3689Smrg          ;;
10497cea3689Smrg      esac
10507cea3689Smrg    done
10517cea3689Smrg    # Restore leading double-slash if one was found on entry.
10527cea3689Smrg    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
10537cea3689Smrg}
10547cea3689Smrg
10557cea3689Smrg
10567cea3689Smrg# func_notquiet ARG...
10577cea3689Smrg# --------------------
10587cea3689Smrg# Echo program name prefixed message only when not in quiet mode.
10597cea3689Smrgfunc_notquiet ()
10607cea3689Smrg{
10617cea3689Smrg    $debug_cmd
10627cea3689Smrg
10637cea3689Smrg    $opt_quiet || func_echo ${1+"$@"}
10647cea3689Smrg
10657cea3689Smrg    # A bug in bash halts the script if the last line of a function
10667cea3689Smrg    # fails when set -e is in force, so we need another command to
10677cea3689Smrg    # work around that:
10687cea3689Smrg    :
10697cea3689Smrg}
10707cea3689Smrg
10717cea3689Smrg
10727cea3689Smrg# func_relative_path SRCDIR DSTDIR
10737cea3689Smrg# --------------------------------
10747cea3689Smrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
10757cea3689Smrgfunc_relative_path ()
10767cea3689Smrg{
10777cea3689Smrg    $debug_cmd
10787cea3689Smrg
10797cea3689Smrg    func_relative_path_result=
10807cea3689Smrg    func_normal_abspath "$1"
10817cea3689Smrg    func_relative_path_tlibdir=$func_normal_abspath_result
10827cea3689Smrg    func_normal_abspath "$2"
10837cea3689Smrg    func_relative_path_tbindir=$func_normal_abspath_result
10847cea3689Smrg
10857cea3689Smrg    # Ascend the tree starting from libdir
10867cea3689Smrg    while :; do
10877cea3689Smrg      # check if we have found a prefix of bindir
10887cea3689Smrg      case $func_relative_path_tbindir in
10897cea3689Smrg        $func_relative_path_tlibdir)
10907cea3689Smrg          # found an exact match
10917cea3689Smrg          func_relative_path_tcancelled=
10927cea3689Smrg          break
10937cea3689Smrg          ;;
10947cea3689Smrg        $func_relative_path_tlibdir*)
10957cea3689Smrg          # found a matching prefix
10967cea3689Smrg          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
10977cea3689Smrg          func_relative_path_tcancelled=$func_stripname_result
10987cea3689Smrg          if test -z "$func_relative_path_result"; then
10997cea3689Smrg            func_relative_path_result=.
11007cea3689Smrg          fi
11017cea3689Smrg          break
11027cea3689Smrg          ;;
11037cea3689Smrg        *)
11047cea3689Smrg          func_dirname $func_relative_path_tlibdir
11057cea3689Smrg          func_relative_path_tlibdir=$func_dirname_result
11067cea3689Smrg          if test -z "$func_relative_path_tlibdir"; then
11077cea3689Smrg            # Have to descend all the way to the root!
11087cea3689Smrg            func_relative_path_result=../$func_relative_path_result
11097cea3689Smrg            func_relative_path_tcancelled=$func_relative_path_tbindir
11107cea3689Smrg            break
11117cea3689Smrg          fi
11127cea3689Smrg          func_relative_path_result=../$func_relative_path_result
11137cea3689Smrg          ;;
11147cea3689Smrg      esac
11157cea3689Smrg    done
11167cea3689Smrg
11177cea3689Smrg    # Now calculate path; take care to avoid doubling-up slashes.
11187cea3689Smrg    func_stripname '' '/' "$func_relative_path_result"
11197cea3689Smrg    func_relative_path_result=$func_stripname_result
11207cea3689Smrg    func_stripname '/' '/' "$func_relative_path_tcancelled"
11217cea3689Smrg    if test -n "$func_stripname_result"; then
11227cea3689Smrg      func_append func_relative_path_result "/$func_stripname_result"
11237cea3689Smrg    fi
11247cea3689Smrg
11257cea3689Smrg    # Normalisation. If bindir is libdir, return '.' else relative path.
11267cea3689Smrg    if test -n "$func_relative_path_result"; then
11277cea3689Smrg      func_stripname './' '' "$func_relative_path_result"
11287cea3689Smrg      func_relative_path_result=$func_stripname_result
112927702724Smrg    fi
113027702724Smrg
11317cea3689Smrg    test -n "$func_relative_path_result" || func_relative_path_result=.
11327cea3689Smrg
11337cea3689Smrg    :
11347cea3689Smrg}
11357cea3689Smrg
11367cea3689Smrg
113795b7a5c8Smrg# func_quote_portable EVAL ARG
113895b7a5c8Smrg# ----------------------------
113995b7a5c8Smrg# Internal function to portably implement func_quote_arg.  Note that we still
114095b7a5c8Smrg# keep attention to performance here so we as much as possible try to avoid
114195b7a5c8Smrg# calling sed binary (so far O(N) complexity as long as func_append is O(1)).
114295b7a5c8Smrgfunc_quote_portable ()
11437cea3689Smrg{
11447cea3689Smrg    $debug_cmd
11457cea3689Smrg
114695b7a5c8Smrg    $require_check_ifs_backslash
114795b7a5c8Smrg
114895b7a5c8Smrg    func_quote_portable_result=$2
114995b7a5c8Smrg
115095b7a5c8Smrg    # one-time-loop (easy break)
115195b7a5c8Smrg    while true
115295b7a5c8Smrg    do
115395b7a5c8Smrg      if $1; then
115495b7a5c8Smrg        func_quote_portable_result=`$ECHO "$2" | $SED \
115595b7a5c8Smrg          -e "$sed_double_quote_subst" -e "$sed_double_backslash"`
115695b7a5c8Smrg        break
11577cea3689Smrg      fi
11587cea3689Smrg
115995b7a5c8Smrg      # Quote for eval.
116095b7a5c8Smrg      case $func_quote_portable_result in
116195b7a5c8Smrg        *[\\\`\"\$]*)
116295b7a5c8Smrg          # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string
116395b7a5c8Smrg          # contains the shell wildcard characters.
116495b7a5c8Smrg          case $check_ifs_backshlash_broken$func_quote_portable_result in
116595b7a5c8Smrg            :*|*[\[\*\?]*)
116695b7a5c8Smrg              func_quote_portable_result=`$ECHO "$func_quote_portable_result" \
116795b7a5c8Smrg                  | $SED "$sed_quote_subst"`
116895b7a5c8Smrg              break
116995b7a5c8Smrg              ;;
117095b7a5c8Smrg          esac
117195b7a5c8Smrg
117295b7a5c8Smrg          func_quote_portable_old_IFS=$IFS
117395b7a5c8Smrg          for _G_char in '\' '`' '"' '$'
117495b7a5c8Smrg          do
117595b7a5c8Smrg            # STATE($1) PREV($2) SEPARATOR($3)
117695b7a5c8Smrg            set start "" ""
117795b7a5c8Smrg            func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy
117895b7a5c8Smrg            IFS=$_G_char
117995b7a5c8Smrg            for _G_part in $func_quote_portable_result
118095b7a5c8Smrg            do
118195b7a5c8Smrg              case $1 in
118295b7a5c8Smrg              quote)
118395b7a5c8Smrg                func_append func_quote_portable_result "$3$2"
118495b7a5c8Smrg                set quote "$_G_part" "\\$_G_char"
118595b7a5c8Smrg                ;;
118695b7a5c8Smrg              start)
118795b7a5c8Smrg                set first "" ""
118895b7a5c8Smrg                func_quote_portable_result=
118995b7a5c8Smrg                ;;
119095b7a5c8Smrg              first)
119195b7a5c8Smrg                set quote "$_G_part" ""
119295b7a5c8Smrg                ;;
119395b7a5c8Smrg              esac
119495b7a5c8Smrg            done
119595b7a5c8Smrg          done
119695b7a5c8Smrg          IFS=$func_quote_portable_old_IFS
11977cea3689Smrg          ;;
119895b7a5c8Smrg        *) ;;
11997cea3689Smrg      esac
120095b7a5c8Smrg      break
12017cea3689Smrg    done
120295b7a5c8Smrg
120395b7a5c8Smrg    func_quote_portable_unquoted_result=$func_quote_portable_result
120495b7a5c8Smrg    case $func_quote_portable_result in
120595b7a5c8Smrg      # double-quote args containing shell metacharacters to delay
120695b7a5c8Smrg      # word splitting, command substitution and variable expansion
120795b7a5c8Smrg      # for a subsequent eval.
120895b7a5c8Smrg      # many bourne shells cannot handle close brackets correctly
120995b7a5c8Smrg      # in scan sets, so we specify it separately.
121095b7a5c8Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
121195b7a5c8Smrg        func_quote_portable_result=\"$func_quote_portable_result\"
121295b7a5c8Smrg        ;;
121395b7a5c8Smrg    esac
12147cea3689Smrg}
12157cea3689Smrg
12167cea3689Smrg
121795b7a5c8Smrg# func_quotefast_eval ARG
121895b7a5c8Smrg# -----------------------
121995b7a5c8Smrg# Quote one ARG (internal).  This is equivalent to 'func_quote_arg eval ARG',
122095b7a5c8Smrg# but optimized for speed.  Result is stored in $func_quotefast_eval.
122195b7a5c8Smrgif test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then
122295b7a5c8Smrg  printf -v _GL_test_printf_tilde %q '~'
122395b7a5c8Smrg  if test '\~' = "$_GL_test_printf_tilde"; then
122495b7a5c8Smrg    func_quotefast_eval ()
122595b7a5c8Smrg    {
122695b7a5c8Smrg      printf -v func_quotefast_eval_result %q "$1"
122795b7a5c8Smrg    }
122895b7a5c8Smrg  else
122995b7a5c8Smrg    # Broken older Bash implementations.  Make those faster too if possible.
123095b7a5c8Smrg    func_quotefast_eval ()
123195b7a5c8Smrg    {
123295b7a5c8Smrg      case $1 in
123395b7a5c8Smrg        '~'*)
123495b7a5c8Smrg          func_quote_portable false "$1"
123595b7a5c8Smrg          func_quotefast_eval_result=$func_quote_portable_result
123695b7a5c8Smrg          ;;
123795b7a5c8Smrg        *)
123895b7a5c8Smrg          printf -v func_quotefast_eval_result %q "$1"
123995b7a5c8Smrg          ;;
124095b7a5c8Smrg      esac
124195b7a5c8Smrg    }
124295b7a5c8Smrg  fi
124395b7a5c8Smrgelse
124495b7a5c8Smrg  func_quotefast_eval ()
124595b7a5c8Smrg  {
124695b7a5c8Smrg    func_quote_portable false "$1"
124795b7a5c8Smrg    func_quotefast_eval_result=$func_quote_portable_result
124895b7a5c8Smrg  }
124995b7a5c8Smrgfi
12507cea3689Smrg
125195b7a5c8Smrg
125295b7a5c8Smrg# func_quote_arg MODEs ARG
125395b7a5c8Smrg# ------------------------
125495b7a5c8Smrg# Quote one ARG to be evaled later.  MODEs argument may contain zero or more
125595b7a5c8Smrg# specifiers listed below separated by ',' character.  This function returns two
125695b7a5c8Smrg# values:
125795b7a5c8Smrg#   i) func_quote_arg_result
125895b7a5c8Smrg#      double-quoted (when needed), suitable for a subsequent eval
125995b7a5c8Smrg#  ii) func_quote_arg_unquoted_result
126095b7a5c8Smrg#      has all characters that are still active within double
126195b7a5c8Smrg#      quotes backslashified.  Available only if 'unquoted' is specified.
126295b7a5c8Smrg#
126395b7a5c8Smrg# Available modes:
126495b7a5c8Smrg# ----------------
126595b7a5c8Smrg# 'eval' (default)
126695b7a5c8Smrg#       - escape shell special characters
126795b7a5c8Smrg# 'expand'
126895b7a5c8Smrg#       - the same as 'eval';  but do not quote variable references
126995b7a5c8Smrg# 'pretty'
127095b7a5c8Smrg#       - request aesthetic output, i.e. '"a b"' instead of 'a\ b'.  This might
127195b7a5c8Smrg#         be used later in func_quote to get output like: 'echo "a b"' instead
127295b7a5c8Smrg#         of 'echo a\ b'.  This is slower than default on some shells.
127395b7a5c8Smrg# 'unquoted'
127495b7a5c8Smrg#       - produce also $func_quote_arg_unquoted_result which does not contain
127595b7a5c8Smrg#         wrapping double-quotes.
127695b7a5c8Smrg#
127795b7a5c8Smrg# Examples for 'func_quote_arg pretty,unquoted string':
127895b7a5c8Smrg#
127995b7a5c8Smrg#   string      | *_result              | *_unquoted_result
128095b7a5c8Smrg#   ------------+-----------------------+-------------------
128195b7a5c8Smrg#   "           | \"                    | \"
128295b7a5c8Smrg#   a b         | "a b"                 | a b
128395b7a5c8Smrg#   "a b"       | "\"a b\""             | \"a b\"
128495b7a5c8Smrg#   *           | "*"                   | *
128595b7a5c8Smrg#   z="${x-$y}" | "z=\"\${x-\$y}\""     | z=\"\${x-\$y}\"
128695b7a5c8Smrg#
128795b7a5c8Smrg# Examples for 'func_quote_arg pretty,unquoted,expand string':
128895b7a5c8Smrg#
128995b7a5c8Smrg#   string        |   *_result          |  *_unquoted_result
129095b7a5c8Smrg#   --------------+---------------------+--------------------
129195b7a5c8Smrg#   z="${x-$y}"   | "z=\"${x-$y}\""     | z=\"${x-$y}\"
129295b7a5c8Smrgfunc_quote_arg ()
129395b7a5c8Smrg{
129495b7a5c8Smrg    _G_quote_expand=false
129595b7a5c8Smrg    case ,$1, in
129695b7a5c8Smrg      *,expand,*)
129795b7a5c8Smrg        _G_quote_expand=:
129895b7a5c8Smrg        ;;
12997cea3689Smrg    esac
13007cea3689Smrg
130195b7a5c8Smrg    case ,$1, in
130295b7a5c8Smrg      *,pretty,*|*,expand,*|*,unquoted,*)
130395b7a5c8Smrg        func_quote_portable $_G_quote_expand "$2"
130495b7a5c8Smrg        func_quote_arg_result=$func_quote_portable_result
130595b7a5c8Smrg        func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result
130695b7a5c8Smrg        ;;
130795b7a5c8Smrg      *)
130895b7a5c8Smrg        # Faster quote-for-eval for some shells.
130995b7a5c8Smrg        func_quotefast_eval "$2"
131095b7a5c8Smrg        func_quote_arg_result=$func_quotefast_eval_result
13117cea3689Smrg        ;;
13127cea3689Smrg    esac
131395b7a5c8Smrg}
131495b7a5c8Smrg
13157cea3689Smrg
131695b7a5c8Smrg# func_quote MODEs ARGs...
131795b7a5c8Smrg# ------------------------
131895b7a5c8Smrg# Quote all ARGs to be evaled later and join them into single command.  See
131995b7a5c8Smrg# func_quote_arg's description for more info.
132095b7a5c8Smrgfunc_quote ()
132195b7a5c8Smrg{
132295b7a5c8Smrg    $debug_cmd
132395b7a5c8Smrg    _G_func_quote_mode=$1 ; shift
132495b7a5c8Smrg    func_quote_result=
132595b7a5c8Smrg    while test 0 -lt $#; do
132695b7a5c8Smrg      func_quote_arg "$_G_func_quote_mode" "$1"
132795b7a5c8Smrg      if test -n "$func_quote_result"; then
132895b7a5c8Smrg        func_append func_quote_result " $func_quote_arg_result"
132995b7a5c8Smrg      else
133095b7a5c8Smrg        func_append func_quote_result "$func_quote_arg_result"
133195b7a5c8Smrg      fi
133295b7a5c8Smrg      shift
133395b7a5c8Smrg    done
13347cea3689Smrg}
13357cea3689Smrg
13367cea3689Smrg
13377cea3689Smrg# func_stripname PREFIX SUFFIX NAME
13387cea3689Smrg# ---------------------------------
13397cea3689Smrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
13407cea3689Smrg# PREFIX and SUFFIX must not contain globbing or regex special
13417cea3689Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading
13427cea3689Smrg# dot (in which case that matches only a dot).
13437cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
13447cea3689Smrg  eval 'func_stripname ()
13457cea3689Smrg  {
13467cea3689Smrg    $debug_cmd
13477cea3689Smrg
13487cea3689Smrg    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
13497cea3689Smrg    # positional parameters, so assign one to ordinary variable first.
13507cea3689Smrg    func_stripname_result=$3
13517cea3689Smrg    func_stripname_result=${func_stripname_result#"$1"}
13527cea3689Smrg    func_stripname_result=${func_stripname_result%"$2"}
13537cea3689Smrg  }'
13547cea3689Smrgelse
13557cea3689Smrg  func_stripname ()
13567cea3689Smrg  {
13577cea3689Smrg    $debug_cmd
13587cea3689Smrg
13597cea3689Smrg    case $2 in
13607cea3689Smrg      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
13617cea3689Smrg      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
13627cea3689Smrg    esac
13637cea3689Smrg  }
13647cea3689Smrgfi
13657cea3689Smrg
13667cea3689Smrg
13677cea3689Smrg# func_show_eval CMD [FAIL_EXP]
13687cea3689Smrg# -----------------------------
13697cea3689Smrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
13707cea3689Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
13717cea3689Smrg# is given, then evaluate it.
13727cea3689Smrgfunc_show_eval ()
13737cea3689Smrg{
13747cea3689Smrg    $debug_cmd
13757cea3689Smrg
13767cea3689Smrg    _G_cmd=$1
13777cea3689Smrg    _G_fail_exp=${2-':'}
13787cea3689Smrg
137995b7a5c8Smrg    func_quote_arg pretty,expand "$_G_cmd"
138095b7a5c8Smrg    eval "func_notquiet $func_quote_arg_result"
13817cea3689Smrg
13827cea3689Smrg    $opt_dry_run || {
13837cea3689Smrg      eval "$_G_cmd"
13847cea3689Smrg      _G_status=$?
13857cea3689Smrg      if test 0 -ne "$_G_status"; then
13867cea3689Smrg	eval "(exit $_G_status); $_G_fail_exp"
13877cea3689Smrg      fi
13887cea3689Smrg    }
13897cea3689Smrg}
13907cea3689Smrg
13917cea3689Smrg
13927cea3689Smrg# func_show_eval_locale CMD [FAIL_EXP]
13937cea3689Smrg# ------------------------------------
13947cea3689Smrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
13957cea3689Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
13967cea3689Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
13977cea3689Smrgfunc_show_eval_locale ()
13987cea3689Smrg{
13997cea3689Smrg    $debug_cmd
14007cea3689Smrg
14017cea3689Smrg    _G_cmd=$1
14027cea3689Smrg    _G_fail_exp=${2-':'}
14037cea3689Smrg
14047cea3689Smrg    $opt_quiet || {
140595b7a5c8Smrg      func_quote_arg expand,pretty "$_G_cmd"
140695b7a5c8Smrg      eval "func_echo $func_quote_arg_result"
14077cea3689Smrg    }
14087cea3689Smrg
14097cea3689Smrg    $opt_dry_run || {
14107cea3689Smrg      eval "$_G_user_locale
14117cea3689Smrg	    $_G_cmd"
14127cea3689Smrg      _G_status=$?
14137cea3689Smrg      eval "$_G_safe_locale"
14147cea3689Smrg      if test 0 -ne "$_G_status"; then
14157cea3689Smrg	eval "(exit $_G_status); $_G_fail_exp"
14167cea3689Smrg      fi
14177cea3689Smrg    }
14187cea3689Smrg}
14197cea3689Smrg
14207cea3689Smrg
14217cea3689Smrg# func_tr_sh
14227cea3689Smrg# ----------
14237cea3689Smrg# Turn $1 into a string suitable for a shell variable name.
14247cea3689Smrg# Result is stored in $func_tr_sh_result.  All characters
14257cea3689Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
14267cea3689Smrg# if $1 begins with a digit, a '_' is prepended as well.
14277cea3689Smrgfunc_tr_sh ()
14287cea3689Smrg{
14297cea3689Smrg    $debug_cmd
14307cea3689Smrg
14317cea3689Smrg    case $1 in
14327cea3689Smrg    [0-9]* | *[!a-zA-Z0-9_]*)
14337cea3689Smrg      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
14347cea3689Smrg      ;;
14357cea3689Smrg    * )
14367cea3689Smrg      func_tr_sh_result=$1
14377cea3689Smrg      ;;
14387cea3689Smrg    esac
14397cea3689Smrg}
14407cea3689Smrg
14417cea3689Smrg
14427cea3689Smrg# func_verbose ARG...
14437cea3689Smrg# -------------------
14447cea3689Smrg# Echo program name prefixed message in verbose mode only.
14457cea3689Smrgfunc_verbose ()
14467cea3689Smrg{
14477cea3689Smrg    $debug_cmd
14487cea3689Smrg
14497cea3689Smrg    $opt_verbose && func_echo "$*"
14507cea3689Smrg
14517cea3689Smrg    :
14527cea3689Smrg}
14537cea3689Smrg
14547cea3689Smrg
14557cea3689Smrg# func_warn_and_continue ARG...
14567cea3689Smrg# -----------------------------
14577cea3689Smrg# Echo program name prefixed warning message to standard error.
14587cea3689Smrgfunc_warn_and_continue ()
14597cea3689Smrg{
14607cea3689Smrg    $debug_cmd
14617cea3689Smrg
14627cea3689Smrg    $require_term_colors
14637cea3689Smrg
14647cea3689Smrg    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
14657cea3689Smrg}
14667cea3689Smrg
14677cea3689Smrg
14687cea3689Smrg# func_warning CATEGORY ARG...
14697cea3689Smrg# ----------------------------
14707cea3689Smrg# Echo program name prefixed warning message to standard error. Warning
14717cea3689Smrg# messages can be filtered according to CATEGORY, where this function
14727cea3689Smrg# elides messages where CATEGORY is not listed in the global variable
14737cea3689Smrg# 'opt_warning_types'.
14747cea3689Smrgfunc_warning ()
14757cea3689Smrg{
14767cea3689Smrg    $debug_cmd
14777cea3689Smrg
14787cea3689Smrg    # CATEGORY must be in the warning_categories list!
14797cea3689Smrg    case " $warning_categories " in
14807cea3689Smrg      *" $1 "*) ;;
14817cea3689Smrg      *) func_internal_error "invalid warning category '$1'" ;;
14827cea3689Smrg    esac
14837cea3689Smrg
14847cea3689Smrg    _G_category=$1
14857cea3689Smrg    shift
14867cea3689Smrg
14877cea3689Smrg    case " $opt_warning_types " in
14887cea3689Smrg      *" $_G_category "*) $warning_func ${1+"$@"} ;;
14897cea3689Smrg    esac
14907cea3689Smrg}
14917cea3689Smrg
14927cea3689Smrg
14937cea3689Smrg# func_sort_ver VER1 VER2
14947cea3689Smrg# -----------------------
14957cea3689Smrg# 'sort -V' is not generally available.
14967cea3689Smrg# Note this deviates from the version comparison in automake
14977cea3689Smrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
14987cea3689Smrg# but this should suffice as we won't be specifying old
14997cea3689Smrg# version formats or redundant trailing .0 in bootstrap.conf.
15007cea3689Smrg# If we did want full compatibility then we should probably
15017cea3689Smrg# use m4_version_compare from autoconf.
15027cea3689Smrgfunc_sort_ver ()
15037cea3689Smrg{
15047cea3689Smrg    $debug_cmd
15057cea3689Smrg
15067cea3689Smrg    printf '%s\n%s\n' "$1" "$2" \
15077cea3689Smrg      | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n
15087cea3689Smrg}
15097cea3689Smrg
15107cea3689Smrg# func_lt_ver PREV CURR
15117cea3689Smrg# ---------------------
15127cea3689Smrg# Return true if PREV and CURR are in the correct order according to
15137cea3689Smrg# func_sort_ver, otherwise false.  Use it like this:
15147cea3689Smrg#
15157cea3689Smrg#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
15167cea3689Smrgfunc_lt_ver ()
15177cea3689Smrg{
15187cea3689Smrg    $debug_cmd
15197cea3689Smrg
15207cea3689Smrg    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
15217cea3689Smrg}
15227cea3689Smrg
15237cea3689Smrg
15247cea3689Smrg# Local variables:
15257cea3689Smrg# mode: shell-script
15267cea3689Smrg# sh-indentation: 2
15277cea3689Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
15287cea3689Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
15297cea3689Smrg# time-stamp-time-zone: "UTC"
15307cea3689Smrg# End:
15317cea3689Smrg#! /bin/sh
15327cea3689Smrg
15337cea3689Smrg# A portable, pluggable option parser for Bourne shell.
15347cea3689Smrg# Written by Gary V. Vaughan, 2010
15357cea3689Smrg
153695b7a5c8Smrg# This is free software.  There is NO warranty; not even for
153795b7a5c8Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
153895b7a5c8Smrg#
1539ae545d91Smrg# Copyright (C) 2010-2019, 2021, 2023-2024 Bootstrap Authors
154095b7a5c8Smrg#
154195b7a5c8Smrg# This file is dual licensed under the terms of the MIT license
1542ae545d91Smrg# <https://opensource.org/licenses/MIT>, and GPL version 2 or later
1543ae545d91Smrg# <https://www.gnu.org/licenses/gpl-2.0.html>.  You must apply one of
154495b7a5c8Smrg# these licenses when using or redistributing this software or any of
154595b7a5c8Smrg# the files within it.  See the URLs above, or the file `LICENSE`
154695b7a5c8Smrg# included in the Bootstrap distribution for the full license texts.
15477cea3689Smrg
154895b7a5c8Smrg# Please report bugs or propose patches to:
154995b7a5c8Smrg# <https://github.com/gnulib-modules/bootstrap/issues>
15507cea3689Smrg
155195b7a5c8Smrg# Set a version string for this script.
155295b7a5c8Smrgscriptversion=2019-02-19.15; # UTC
15537cea3689Smrg
15547cea3689Smrg
15557cea3689Smrg## ------ ##
15567cea3689Smrg## Usage. ##
15577cea3689Smrg## ------ ##
15587cea3689Smrg
15597cea3689Smrg# This file is a library for parsing options in your shell scripts along
15607cea3689Smrg# with assorted other useful supporting features that you can make use
15617cea3689Smrg# of too.
15627cea3689Smrg#
15637cea3689Smrg# For the simplest scripts you might need only:
15647cea3689Smrg#
15657cea3689Smrg#   #!/bin/sh
15667cea3689Smrg#   . relative/path/to/funclib.sh
15677cea3689Smrg#   . relative/path/to/options-parser
15687cea3689Smrg#   scriptversion=1.0
15697cea3689Smrg#   func_options ${1+"$@"}
15707cea3689Smrg#   eval set dummy "$func_options_result"; shift
15717cea3689Smrg#   ...rest of your script...
15727cea3689Smrg#
15737cea3689Smrg# In order for the '--version' option to work, you will need to have a
15747cea3689Smrg# suitably formatted comment like the one at the top of this file
157595b7a5c8Smrg# starting with '# Written by ' and ending with '# Copyright'.
15767cea3689Smrg#
15777cea3689Smrg# For '-h' and '--help' to work, you will also need a one line
15787cea3689Smrg# description of your script's purpose in a comment directly above the
15797cea3689Smrg# '# Written by ' line, like the one at the top of this file.
15807cea3689Smrg#
15817cea3689Smrg# The default options also support '--debug', which will turn on shell
15827cea3689Smrg# execution tracing (see the comment above debug_cmd below for another
15837cea3689Smrg# use), and '--verbose' and the func_verbose function to allow your script
15847cea3689Smrg# to display verbose messages only when your user has specified
15857cea3689Smrg# '--verbose'.
15867cea3689Smrg#
158795b7a5c8Smrg# After sourcing this file, you can plug in processing for additional
15887cea3689Smrg# options by amending the variables from the 'Configuration' section
15897cea3689Smrg# below, and following the instructions in the 'Option parsing'
15907cea3689Smrg# section further down.
15917cea3689Smrg
15927cea3689Smrg## -------------- ##
15937cea3689Smrg## Configuration. ##
15947cea3689Smrg## -------------- ##
15957cea3689Smrg
15967cea3689Smrg# You should override these variables in your script after sourcing this
15977cea3689Smrg# file so that they reflect the customisations you have added to the
15987cea3689Smrg# option parser.
15997cea3689Smrg
16007cea3689Smrg# The usage line for option parsing errors and the start of '-h' and
16017cea3689Smrg# '--help' output messages. You can embed shell variables for delayed
16027cea3689Smrg# expansion at the time the message is displayed, but you will need to
16037cea3689Smrg# quote other shell meta-characters carefully to prevent them being
16047cea3689Smrg# expanded when the contents are evaled.
16057cea3689Smrgusage='$progpath [OPTION]...'
16067cea3689Smrg
16077cea3689Smrg# Short help message in response to '-h' and '--help'.  Add to this or
16087cea3689Smrg# override it after sourcing this library to reflect the full set of
16097cea3689Smrg# options your script accepts.
16107cea3689Smrgusage_message="\
16117cea3689Smrg       --debug        enable verbose shell tracing
16127cea3689Smrg   -W, --warnings=CATEGORY
16137cea3689Smrg                      report the warnings falling in CATEGORY [all]
16147cea3689Smrg   -v, --verbose      verbosely report processing
16157cea3689Smrg       --version      print version information and exit
16167cea3689Smrg   -h, --help         print short or long help message and exit
16177cea3689Smrg"
16187cea3689Smrg
16197cea3689Smrg# Additional text appended to 'usage_message' in response to '--help'.
16207cea3689Smrglong_help_message="
16217cea3689SmrgWarning categories include:
16227cea3689Smrg       'all'          show all warnings
16237cea3689Smrg       'none'         turn off all the warnings
16247cea3689Smrg       'error'        warnings are treated as fatal errors"
16257cea3689Smrg
16267cea3689Smrg# Help message printed before fatal option parsing errors.
16277cea3689Smrgfatal_help="Try '\$progname --help' for more information."
16287cea3689Smrg
16297cea3689Smrg
16307cea3689Smrg
16317cea3689Smrg## ------------------------- ##
16327cea3689Smrg## Hook function management. ##
16337cea3689Smrg## ------------------------- ##
16347cea3689Smrg
16357cea3689Smrg# This section contains functions for adding, removing, and running hooks
163695b7a5c8Smrg# in the main code.  A hook is just a list of function names that can be
163795b7a5c8Smrg# run in order later on.
16387cea3689Smrg
16397cea3689Smrg# func_hookable FUNC_NAME
16407cea3689Smrg# -----------------------
16417cea3689Smrg# Declare that FUNC_NAME will run hooks added with
16427cea3689Smrg# 'func_add_hook FUNC_NAME ...'.
16437cea3689Smrgfunc_hookable ()
16447cea3689Smrg{
16457cea3689Smrg    $debug_cmd
16467cea3689Smrg
16477cea3689Smrg    func_append hookable_fns " $1"
16487cea3689Smrg}
16497cea3689Smrg
16507cea3689Smrg
16517cea3689Smrg# func_add_hook FUNC_NAME HOOK_FUNC
16527cea3689Smrg# ---------------------------------
16537cea3689Smrg# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
16547cea3689Smrg# first have been declared "hookable" by a call to 'func_hookable'.
16557cea3689Smrgfunc_add_hook ()
16567cea3689Smrg{
16577cea3689Smrg    $debug_cmd
16587cea3689Smrg
16597cea3689Smrg    case " $hookable_fns " in
16607cea3689Smrg      *" $1 "*) ;;
16617cea3689Smrg      *) func_fatal_error "'$1' does not accept hook functions." ;;
16627cea3689Smrg    esac
16637cea3689Smrg
16647cea3689Smrg    eval func_append ${1}_hooks '" $2"'
16657cea3689Smrg}
16667cea3689Smrg
16677cea3689Smrg
16687cea3689Smrg# func_remove_hook FUNC_NAME HOOK_FUNC
16697cea3689Smrg# ------------------------------------
167095b7a5c8Smrg# Remove HOOK_FUNC from the list of hook functions to be called by
167195b7a5c8Smrg# FUNC_NAME.
16727cea3689Smrgfunc_remove_hook ()
16737cea3689Smrg{
16747cea3689Smrg    $debug_cmd
16757cea3689Smrg
16767cea3689Smrg    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
16777cea3689Smrg}
16787cea3689Smrg
16797cea3689Smrg
168095b7a5c8Smrg# func_propagate_result FUNC_NAME_A FUNC_NAME_B
168195b7a5c8Smrg# ---------------------------------------------
168295b7a5c8Smrg# If the *_result variable of FUNC_NAME_A _is set_, assign its value to
168395b7a5c8Smrg# *_result variable of FUNC_NAME_B.
168495b7a5c8Smrgfunc_propagate_result ()
168595b7a5c8Smrg{
168695b7a5c8Smrg    $debug_cmd
168795b7a5c8Smrg
168895b7a5c8Smrg    func_propagate_result_result=:
168995b7a5c8Smrg    if eval "test \"\${${1}_result+set}\" = set"
169095b7a5c8Smrg    then
169195b7a5c8Smrg      eval "${2}_result=\$${1}_result"
169295b7a5c8Smrg    else
169395b7a5c8Smrg      func_propagate_result_result=false
169495b7a5c8Smrg    fi
169595b7a5c8Smrg}
169695b7a5c8Smrg
169795b7a5c8Smrg
16987cea3689Smrg# func_run_hooks FUNC_NAME [ARG]...
16997cea3689Smrg# ---------------------------------
17007cea3689Smrg# Run all hook functions registered to FUNC_NAME.
170195b7a5c8Smrg# It's assumed that the list of hook functions contains nothing more
17027cea3689Smrg# than a whitespace-delimited list of legal shell function names, and
17037cea3689Smrg# no effort is wasted trying to catch shell meta-characters or preserve
17047cea3689Smrg# whitespace.
17057cea3689Smrgfunc_run_hooks ()
17067cea3689Smrg{
17077cea3689Smrg    $debug_cmd
17087cea3689Smrg
17097cea3689Smrg    case " $hookable_fns " in
17107cea3689Smrg      *" $1 "*) ;;
171195b7a5c8Smrg      *) func_fatal_error "'$1' does not support hook functions." ;;
17127cea3689Smrg    esac
17137cea3689Smrg
17147cea3689Smrg    eval _G_hook_fns=\$$1_hooks; shift
17157cea3689Smrg
17167cea3689Smrg    for _G_hook in $_G_hook_fns; do
171795b7a5c8Smrg      func_unset "${_G_hook}_result"
171895b7a5c8Smrg      eval $_G_hook '${1+"$@"}'
171995b7a5c8Smrg      func_propagate_result $_G_hook func_run_hooks
172095b7a5c8Smrg      if $func_propagate_result_result; then
172195b7a5c8Smrg        eval set dummy "$func_run_hooks_result"; shift
172295b7a5c8Smrg      fi
17237cea3689Smrg    done
17247cea3689Smrg}
17257cea3689Smrg
17267cea3689Smrg
17277cea3689Smrg
17287cea3689Smrg## --------------- ##
17297cea3689Smrg## Option parsing. ##
17307cea3689Smrg## --------------- ##
17317cea3689Smrg
17327cea3689Smrg# In order to add your own option parsing hooks, you must accept the
173395b7a5c8Smrg# full positional parameter list from your hook function.  You may remove
173495b7a5c8Smrg# or edit any options that you action, and then pass back the remaining
173595b7a5c8Smrg# unprocessed options in '<hooked_function_name>_result', escaped
173695b7a5c8Smrg# suitably for 'eval'.
173795b7a5c8Smrg#
173895b7a5c8Smrg# The '<hooked_function_name>_result' variable is automatically unset
173995b7a5c8Smrg# before your hook gets called; for best performance, only set the
174095b7a5c8Smrg# *_result variable when necessary (i.e. don't call the 'func_quote'
174195b7a5c8Smrg# function unnecessarily because it can be an expensive operation on some
174295b7a5c8Smrg# machines).
174395b7a5c8Smrg#
174495b7a5c8Smrg# Like this:
17457cea3689Smrg#
17467cea3689Smrg#    my_options_prep ()
17477cea3689Smrg#    {
17487cea3689Smrg#        $debug_cmd
17497cea3689Smrg#
17507cea3689Smrg#        # Extend the existing usage message.
17517cea3689Smrg#        usage_message=$usage_message'
17527cea3689Smrg#      -s, --silent       don'\''t print informational messages
17537cea3689Smrg#    '
175495b7a5c8Smrg#        # No change in '$@' (ignored completely by this hook).  Leave
175595b7a5c8Smrg#        # my_options_prep_result variable intact.
17567cea3689Smrg#    }
17577cea3689Smrg#    func_add_hook func_options_prep my_options_prep
17587cea3689Smrg#
17597cea3689Smrg#
17607cea3689Smrg#    my_silent_option ()
17617cea3689Smrg#    {
17627cea3689Smrg#        $debug_cmd
17637cea3689Smrg#
176495b7a5c8Smrg#        args_changed=false
176595b7a5c8Smrg#
176695b7a5c8Smrg#        # Note that, for efficiency, we parse as many options as we can
17677cea3689Smrg#        # recognise in a loop before passing the remainder back to the
17687cea3689Smrg#        # caller on the first unrecognised argument we encounter.
17697cea3689Smrg#        while test $# -gt 0; do
17707cea3689Smrg#          opt=$1; shift
17717cea3689Smrg#          case $opt in
177295b7a5c8Smrg#            --silent|-s) opt_silent=:
177395b7a5c8Smrg#                         args_changed=:
177495b7a5c8Smrg#                         ;;
17757cea3689Smrg#            # Separate non-argument short options:
17767cea3689Smrg#            -s*)         func_split_short_opt "$_G_opt"
17777cea3689Smrg#                         set dummy "$func_split_short_opt_name" \
17787cea3689Smrg#                             "-$func_split_short_opt_arg" ${1+"$@"}
17797cea3689Smrg#                         shift
178095b7a5c8Smrg#                         args_changed=:
17817cea3689Smrg#                         ;;
178295b7a5c8Smrg#            *)           # Make sure the first unrecognised option "$_G_opt"
178395b7a5c8Smrg#                         # is added back to "$@" in case we need it later,
178495b7a5c8Smrg#                         # if $args_changed was set to 'true'.
178595b7a5c8Smrg#                         set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
17867cea3689Smrg#          esac
17877cea3689Smrg#        done
17887cea3689Smrg#
178995b7a5c8Smrg#        # Only call 'func_quote' here if we processed at least one argument.
179095b7a5c8Smrg#        if $args_changed; then
179195b7a5c8Smrg#          func_quote eval ${1+"$@"}
179295b7a5c8Smrg#          my_silent_option_result=$func_quote_result
179395b7a5c8Smrg#        fi
17947cea3689Smrg#    }
17957cea3689Smrg#    func_add_hook func_parse_options my_silent_option
17967cea3689Smrg#
17977cea3689Smrg#
17987cea3689Smrg#    my_option_validation ()
17997cea3689Smrg#    {
18007cea3689Smrg#        $debug_cmd
18017cea3689Smrg#
18027cea3689Smrg#        $opt_silent && $opt_verbose && func_fatal_help "\
18037cea3689Smrg#    '--silent' and '--verbose' options are mutually exclusive."
18047cea3689Smrg#    }
18057cea3689Smrg#    func_add_hook func_validate_options my_option_validation
18067cea3689Smrg#
180795b7a5c8Smrg# You'll also need to manually amend $usage_message to reflect the extra
18087cea3689Smrg# options you parse.  It's preferable to append if you can, so that
18097cea3689Smrg# multiple option parsing hooks can be added safely.
18107cea3689Smrg
18117cea3689Smrg
181295b7a5c8Smrg# func_options_finish [ARG]...
181395b7a5c8Smrg# ----------------------------
181495b7a5c8Smrg# Finishing the option parse loop (call 'func_options' hooks ATM).
181595b7a5c8Smrgfunc_options_finish ()
181695b7a5c8Smrg{
181795b7a5c8Smrg    $debug_cmd
181895b7a5c8Smrg
181995b7a5c8Smrg    func_run_hooks func_options ${1+"$@"}
182095b7a5c8Smrg    func_propagate_result func_run_hooks func_options_finish
182195b7a5c8Smrg}
182295b7a5c8Smrg
182395b7a5c8Smrg
18247cea3689Smrg# func_options [ARG]...
18257cea3689Smrg# ---------------------
18267cea3689Smrg# All the functions called inside func_options are hookable. See the
18277cea3689Smrg# individual implementations for details.
18287cea3689Smrgfunc_hookable func_options
18297cea3689Smrgfunc_options ()
18307cea3689Smrg{
18317cea3689Smrg    $debug_cmd
18327cea3689Smrg
183395b7a5c8Smrg    _G_options_quoted=false
18347cea3689Smrg
183595b7a5c8Smrg    for my_func in options_prep parse_options validate_options options_finish
183695b7a5c8Smrg    do
183795b7a5c8Smrg      func_unset func_${my_func}_result
183895b7a5c8Smrg      func_unset func_run_hooks_result
183995b7a5c8Smrg      eval func_$my_func '${1+"$@"}'
184095b7a5c8Smrg      func_propagate_result func_$my_func func_options
184195b7a5c8Smrg      if $func_propagate_result_result; then
184295b7a5c8Smrg        eval set dummy "$func_options_result"; shift
184395b7a5c8Smrg        _G_options_quoted=:
184495b7a5c8Smrg      fi
184595b7a5c8Smrg    done
18467cea3689Smrg
184795b7a5c8Smrg    $_G_options_quoted || {
184895b7a5c8Smrg      # As we (func_options) are top-level options-parser function and
184995b7a5c8Smrg      # nobody quoted "$@" for us yet, we need to do it explicitly for
185095b7a5c8Smrg      # caller.
185195b7a5c8Smrg      func_quote eval ${1+"$@"}
185295b7a5c8Smrg      func_options_result=$func_quote_result
185395b7a5c8Smrg    }
185427702724Smrg}
185527702724Smrg
185627702724Smrg
18577cea3689Smrg# func_options_prep [ARG]...
18587cea3689Smrg# --------------------------
18597cea3689Smrg# All initialisations required before starting the option parse loop.
18607cea3689Smrg# Note that when calling hook functions, we pass through the list of
18617cea3689Smrg# positional parameters.  If a hook function modifies that list, and
186295b7a5c8Smrg# needs to propagate that back to rest of this script, then the complete
186395b7a5c8Smrg# modified list must be put in 'func_run_hooks_result' before returning.
18647cea3689Smrgfunc_hookable func_options_prep
18657cea3689Smrgfunc_options_prep ()
186627702724Smrg{
18677cea3689Smrg    $debug_cmd
1868e19dfac4Smrg
18697cea3689Smrg    # Option defaults:
18707cea3689Smrg    opt_verbose=false
18717cea3689Smrg    opt_warning_types=
18727cea3689Smrg
18737cea3689Smrg    func_run_hooks func_options_prep ${1+"$@"}
187495b7a5c8Smrg    func_propagate_result func_run_hooks func_options_prep
187527702724Smrg}
187627702724Smrg
187727702724Smrg
18787cea3689Smrg# func_parse_options [ARG]...
18797cea3689Smrg# ---------------------------
18807cea3689Smrg# The main option parsing loop.
18817cea3689Smrgfunc_hookable func_parse_options
18827cea3689Smrgfunc_parse_options ()
188327702724Smrg{
18847cea3689Smrg    $debug_cmd
1885e19dfac4Smrg
188695b7a5c8Smrg    _G_parse_options_requote=false
18877cea3689Smrg    # this just eases exit handling
18887cea3689Smrg    while test $# -gt 0; do
18897cea3689Smrg      # Defer to hook functions for initial option parsing, so they
18907cea3689Smrg      # get priority in the event of reusing an option name.
18917cea3689Smrg      func_run_hooks func_parse_options ${1+"$@"}
189295b7a5c8Smrg      func_propagate_result func_run_hooks func_parse_options
189395b7a5c8Smrg      if $func_propagate_result_result; then
189495b7a5c8Smrg        eval set dummy "$func_parse_options_result"; shift
189595b7a5c8Smrg        # Even though we may have changed "$@", we passed the "$@" array
189695b7a5c8Smrg        # down into the hook and it quoted it for us (because we are in
189795b7a5c8Smrg        # this if-branch).  No need to quote it again.
189895b7a5c8Smrg        _G_parse_options_requote=false
189995b7a5c8Smrg      fi
190027702724Smrg
19017cea3689Smrg      # Break out of the loop if we already parsed every option.
19027cea3689Smrg      test $# -gt 0 || break
190327702724Smrg
190495b7a5c8Smrg      # We expect that one of the options parsed in this function matches
190595b7a5c8Smrg      # and thus we remove _G_opt from "$@" and need to re-quote.
190695b7a5c8Smrg      _G_match_parse_options=:
19077cea3689Smrg      _G_opt=$1
19087cea3689Smrg      shift
19097cea3689Smrg      case $_G_opt in
19107cea3689Smrg        --debug|-x)   debug_cmd='set -x'
191195b7a5c8Smrg                      func_echo "enabling shell trace mode" >&2
19127cea3689Smrg                      $debug_cmd
19137cea3689Smrg                      ;;
19147cea3689Smrg
19157cea3689Smrg        --no-warnings|--no-warning|--no-warn)
19167cea3689Smrg                      set dummy --warnings none ${1+"$@"}
19177cea3689Smrg                      shift
19187cea3689Smrg		      ;;
1919e19dfac4Smrg
19207cea3689Smrg        --warnings|--warning|-W)
192195b7a5c8Smrg                      if test $# = 0 && func_missing_arg $_G_opt; then
192295b7a5c8Smrg                        _G_parse_options_requote=:
192395b7a5c8Smrg                        break
192495b7a5c8Smrg                      fi
19257cea3689Smrg                      case " $warning_categories $1" in
19267cea3689Smrg                        *" $1 "*)
19277cea3689Smrg                          # trailing space prevents matching last $1 above
19287cea3689Smrg                          func_append_uniq opt_warning_types " $1"
19297cea3689Smrg                          ;;
19307cea3689Smrg                        *all)
19317cea3689Smrg                          opt_warning_types=$warning_categories
19327cea3689Smrg                          ;;
19337cea3689Smrg                        *none)
19347cea3689Smrg                          opt_warning_types=none
19357cea3689Smrg                          warning_func=:
19367cea3689Smrg                          ;;
19377cea3689Smrg                        *error)
19387cea3689Smrg                          opt_warning_types=$warning_categories
19397cea3689Smrg                          warning_func=func_fatal_error
19407cea3689Smrg                          ;;
19417cea3689Smrg                        *)
19427cea3689Smrg                          func_fatal_error \
19437cea3689Smrg                             "unsupported warning category: '$1'"
19447cea3689Smrg                          ;;
19457cea3689Smrg                      esac
19467cea3689Smrg                      shift
19477cea3689Smrg                      ;;
19487cea3689Smrg
19497cea3689Smrg        --verbose|-v) opt_verbose=: ;;
19507cea3689Smrg        --version)    func_version ;;
19517cea3689Smrg        -\?|-h)       func_usage ;;
19527cea3689Smrg        --help)       func_help ;;
19537cea3689Smrg
19547cea3689Smrg	# Separate optargs to long options (plugins may need this):
19557cea3689Smrg	--*=*)        func_split_equals "$_G_opt"
19567cea3689Smrg	              set dummy "$func_split_equals_lhs" \
19577cea3689Smrg                          "$func_split_equals_rhs" ${1+"$@"}
19587cea3689Smrg                      shift
19597cea3689Smrg                      ;;
19607cea3689Smrg
19617cea3689Smrg       # Separate optargs to short options:
19627cea3689Smrg        -W*)
19637cea3689Smrg                      func_split_short_opt "$_G_opt"
19647cea3689Smrg                      set dummy "$func_split_short_opt_name" \
19657cea3689Smrg                          "$func_split_short_opt_arg" ${1+"$@"}
19667cea3689Smrg                      shift
19677cea3689Smrg                      ;;
19687cea3689Smrg
19697cea3689Smrg        # Separate non-argument short options:
19707cea3689Smrg        -\?*|-h*|-v*|-x*)
19717cea3689Smrg                      func_split_short_opt "$_G_opt"
19727cea3689Smrg                      set dummy "$func_split_short_opt_name" \
19737cea3689Smrg                          "-$func_split_short_opt_arg" ${1+"$@"}
19747cea3689Smrg                      shift
19757cea3689Smrg                      ;;
19767cea3689Smrg
197795b7a5c8Smrg        --)           _G_parse_options_requote=: ; break ;;
19787cea3689Smrg        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
197995b7a5c8Smrg        *)            set dummy "$_G_opt" ${1+"$@"}; shift
198095b7a5c8Smrg                      _G_match_parse_options=false
198195b7a5c8Smrg                      break
198295b7a5c8Smrg                      ;;
19837cea3689Smrg      esac
198495b7a5c8Smrg
198595b7a5c8Smrg      if $_G_match_parse_options; then
198695b7a5c8Smrg        _G_parse_options_requote=:
198795b7a5c8Smrg      fi
19887cea3689Smrg    done
19897cea3689Smrg
199095b7a5c8Smrg    if $_G_parse_options_requote; then
199195b7a5c8Smrg      # save modified positional parameters for caller
199295b7a5c8Smrg      func_quote eval ${1+"$@"}
199395b7a5c8Smrg      func_parse_options_result=$func_quote_result
199495b7a5c8Smrg    fi
199527702724Smrg}
199627702724Smrg
1997e19dfac4Smrg
19987cea3689Smrg# func_validate_options [ARG]...
19997cea3689Smrg# ------------------------------
20007cea3689Smrg# Perform any sanity checks on option settings and/or unconsumed
20017cea3689Smrg# arguments.
20027cea3689Smrgfunc_hookable func_validate_options
20037cea3689Smrgfunc_validate_options ()
200427702724Smrg{
20057cea3689Smrg    $debug_cmd
200627702724Smrg
20077cea3689Smrg    # Display all warnings if -W was not given.
20087cea3689Smrg    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
2009e19dfac4Smrg
20107cea3689Smrg    func_run_hooks func_validate_options ${1+"$@"}
201195b7a5c8Smrg    func_propagate_result func_run_hooks func_validate_options
201227702724Smrg
20137cea3689Smrg    # Bail if the options were screwed!
20147cea3689Smrg    $exit_cmd $EXIT_FAILURE
2015313a12fdSmrg}
2016e19dfac4Smrg
2017e19dfac4Smrg
2018313a12fdSmrg
20197cea3689Smrg## ----------------- ##
20207cea3689Smrg## Helper functions. ##
20217cea3689Smrg## ----------------- ##
2022e19dfac4Smrg
20237cea3689Smrg# This section contains the helper functions used by the rest of the
20247cea3689Smrg# hookable option parser framework in ascii-betical order.
20257cea3689Smrg
20267cea3689Smrg
20277cea3689Smrg# func_fatal_help ARG...
20287cea3689Smrg# ----------------------
20297cea3689Smrg# Echo program name prefixed message to standard error, followed by
20307cea3689Smrg# a help hint, and exit.
20317cea3689Smrgfunc_fatal_help ()
2032e19dfac4Smrg{
20337cea3689Smrg    $debug_cmd
2034313a12fdSmrg
20357cea3689Smrg    eval \$ECHO \""Usage: $usage"\"
20367cea3689Smrg    eval \$ECHO \""$fatal_help"\"
20377cea3689Smrg    func_error ${1+"$@"}
20387cea3689Smrg    exit $EXIT_FAILURE
2039e19dfac4Smrg}
2040e19dfac4Smrg
20417cea3689Smrg
20427cea3689Smrg# func_help
20437cea3689Smrg# ---------
20447cea3689Smrg# Echo long help message to standard output and exit.
2045e19dfac4Smrgfunc_help ()
2046e19dfac4Smrg{
20477cea3689Smrg    $debug_cmd
20487cea3689Smrg
20497cea3689Smrg    func_usage_message
20507cea3689Smrg    $ECHO "$long_help_message"
20517cea3689Smrg    exit 0
2052e19dfac4Smrg}
2053e19dfac4Smrg
20547cea3689Smrg
20557cea3689Smrg# func_missing_arg ARGNAME
20567cea3689Smrg# ------------------------
2057e19dfac4Smrg# Echo program name prefixed message to standard error and set global
2058e19dfac4Smrg# exit_cmd.
2059e19dfac4Smrgfunc_missing_arg ()
2060e19dfac4Smrg{
20617cea3689Smrg    $debug_cmd
2062313a12fdSmrg
20637cea3689Smrg    func_error "Missing argument for '$1'."
2064e19dfac4Smrg    exit_cmd=exit
2065e19dfac4Smrg}
2066e19dfac4Smrg
2067e19dfac4Smrg
20687cea3689Smrg# func_split_equals STRING
20697cea3689Smrg# ------------------------
207095b7a5c8Smrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables
207195b7a5c8Smrg# after splitting STRING at the '=' sign.
20727cea3689Smrgtest -z "$_G_HAVE_XSI_OPS" \
20737cea3689Smrg    && (eval 'x=a/b/c;
20747cea3689Smrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
20757cea3689Smrg    && _G_HAVE_XSI_OPS=yes
20767cea3689Smrg
20777cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"
20787cea3689Smrgthen
20797cea3689Smrg  # This is an XSI compatible shell, allowing a faster implementation...
20807cea3689Smrg  eval 'func_split_equals ()
20817cea3689Smrg  {
20827cea3689Smrg      $debug_cmd
20837cea3689Smrg
20847cea3689Smrg      func_split_equals_lhs=${1%%=*}
20857cea3689Smrg      func_split_equals_rhs=${1#*=}
208695b7a5c8Smrg      if test "x$func_split_equals_lhs" = "x$1"; then
208795b7a5c8Smrg        func_split_equals_rhs=
208895b7a5c8Smrg      fi
20897cea3689Smrg  }'
20907cea3689Smrgelse
20917cea3689Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
20927cea3689Smrg  func_split_equals ()
20937cea3689Smrg  {
20947cea3689Smrg      $debug_cmd
20957cea3689Smrg
20967cea3689Smrg      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
20977cea3689Smrg      func_split_equals_rhs=
209895b7a5c8Smrg      test "x$func_split_equals_lhs=" = "x$1" \
20997cea3689Smrg        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
21007cea3689Smrg  }
21017cea3689Smrgfi #func_split_equals
21027cea3689Smrg
21037cea3689Smrg
21047cea3689Smrg# func_split_short_opt SHORTOPT
21057cea3689Smrg# -----------------------------
2106313a12fdSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
2107313a12fdSmrg# variables after splitting SHORTOPT after the 2nd character.
21087cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"
21097cea3689Smrgthen
21107cea3689Smrg  # This is an XSI compatible shell, allowing a faster implementation...
21117cea3689Smrg  eval 'func_split_short_opt ()
21127cea3689Smrg  {
21137cea3689Smrg      $debug_cmd
21147cea3689Smrg
21157cea3689Smrg      func_split_short_opt_arg=${1#??}
21167cea3689Smrg      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
21177cea3689Smrg  }'
21187cea3689Smrgelse
21197cea3689Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
21207cea3689Smrg  func_split_short_opt ()
21217cea3689Smrg  {
21227cea3689Smrg      $debug_cmd
21237cea3689Smrg
212495b7a5c8Smrg      func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'`
21257cea3689Smrg      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
21267cea3689Smrg  }
21277cea3689Smrgfi #func_split_short_opt
21287cea3689Smrg
21297cea3689Smrg
21307cea3689Smrg# func_usage
21317cea3689Smrg# ----------
21327cea3689Smrg# Echo short help message to standard output and exit.
21337cea3689Smrgfunc_usage ()
2134313a12fdSmrg{
21357cea3689Smrg    $debug_cmd
2136313a12fdSmrg
21377cea3689Smrg    func_usage_message
21387cea3689Smrg    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
21397cea3689Smrg    exit 0
21407cea3689Smrg}
2141e19dfac4Smrg
2142e19dfac4Smrg
21437cea3689Smrg# func_usage_message
21447cea3689Smrg# ------------------
21457cea3689Smrg# Echo short help message to standard output.
21467cea3689Smrgfunc_usage_message ()
2147313a12fdSmrg{
21487cea3689Smrg    $debug_cmd
2149313a12fdSmrg
21507cea3689Smrg    eval \$ECHO \""Usage: $usage"\"
21517cea3689Smrg    echo
21527cea3689Smrg    $SED -n 's|^# ||
21537cea3689Smrg        /^Written by/{
21547cea3689Smrg          x;p;x
21557cea3689Smrg        }
21567cea3689Smrg	h
21577cea3689Smrg	/^Written by/q' < "$progpath"
21587cea3689Smrg    echo
21597cea3689Smrg    eval \$ECHO \""$usage_message"\"
21607cea3689Smrg}
2161313a12fdSmrg
2162313a12fdSmrg
21637cea3689Smrg# func_version
21647cea3689Smrg# ------------
21657cea3689Smrg# Echo version message to standard output and exit.
216695b7a5c8Smrg# The version message is extracted from the calling file's header
216795b7a5c8Smrg# comments, with leading '# ' stripped:
216895b7a5c8Smrg#   1. First display the progname and version
216995b7a5c8Smrg#   2. Followed by the header comment line matching  /^# Written by /
217095b7a5c8Smrg#   3. Then a blank line followed by the first following line matching
217195b7a5c8Smrg#      /^# Copyright /
217295b7a5c8Smrg#   4. Immediately followed by any lines between the previous matches,
217395b7a5c8Smrg#      except lines preceding the intervening completely blank line.
217495b7a5c8Smrg# For example, see the header comments of this file.
21757cea3689Smrgfunc_version ()
21767cea3689Smrg{
21777cea3689Smrg    $debug_cmd
2178e19dfac4Smrg
21797cea3689Smrg    printf '%s\n' "$progname $scriptversion"
21807cea3689Smrg    $SED -n '
218195b7a5c8Smrg        /^# Written by /!b
218295b7a5c8Smrg        s|^# ||; p; n
218395b7a5c8Smrg
218495b7a5c8Smrg        :fwd2blnk
218595b7a5c8Smrg        /./ {
218695b7a5c8Smrg          n
218795b7a5c8Smrg          b fwd2blnk
21887cea3689Smrg        }
218995b7a5c8Smrg        p; n
219095b7a5c8Smrg
219195b7a5c8Smrg        :holdwrnt
219295b7a5c8Smrg        s|^# ||
219395b7a5c8Smrg        s|^# *$||
219495b7a5c8Smrg        /^Copyright /!{
219595b7a5c8Smrg          /./H
219695b7a5c8Smrg          n
219795b7a5c8Smrg          b holdwrnt
21987cea3689Smrg        }
219995b7a5c8Smrg
220095b7a5c8Smrg        s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
220195b7a5c8Smrg        G
220295b7a5c8Smrg        s|\(\n\)\n*|\1|g
220395b7a5c8Smrg        p; q' < "$progpath"
2204e19dfac4Smrg
22057cea3689Smrg    exit $?
22067cea3689Smrg}
220727702724Smrg
220827702724Smrg
22097cea3689Smrg# Local variables:
22107cea3689Smrg# mode: shell-script
22117cea3689Smrg# sh-indentation: 2
22127cea3689Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
221395b7a5c8Smrg# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC"
22147cea3689Smrg# time-stamp-time-zone: "UTC"
22157cea3689Smrg# End:
221627702724Smrg
22177cea3689Smrg# Set a version string.
2218ae545d91Smrgscriptversion='(GNU libtool) 2.5.4'
2219ae545d91Smrg
2220ae545d91Smrg# func_version
2221ae545d91Smrg# ------------
2222ae545d91Smrg# Echo version message to standard output and exit.
2223ae545d91Smrgfunc_version ()
2224ae545d91Smrg{
2225ae545d91Smrg    $debug_cmd
2226ae545d91Smrg
2227ae545d91Smrg	year=`date +%Y`
2228ae545d91Smrg
2229ae545d91Smrg	cat <<EOF
2230ae545d91Smrg$progname $scriptversion
2231ae545d91SmrgCopyright (C) $year Free Software Foundation, Inc.
2232ae545d91SmrgLicense GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl.html>
2233ae545d91SmrgThis is free software: you are free to change and redistribute it.
2234ae545d91SmrgThere is NO WARRANTY, to the extent permitted by law.
2235ae545d91Smrg
2236ae545d91SmrgOriginally written by Gordon Matzigkeit, 1996
2237ae545d91Smrg(See AUTHORS for complete contributor listing)
2238ae545d91SmrgEOF
2239ae545d91Smrg
2240ae545d91Smrg    exit $?
2241ae545d91Smrg}
224227702724Smrg
224327702724Smrg
22447cea3689Smrg# func_echo ARG...
22457cea3689Smrg# ----------------
22467cea3689Smrg# Libtool also displays the current mode in messages, so override
22477cea3689Smrg# funclib.sh func_echo with this custom definition.
22487cea3689Smrgfunc_echo ()
2249313a12fdSmrg{
22507cea3689Smrg    $debug_cmd
2251313a12fdSmrg
22527cea3689Smrg    _G_message=$*
2253313a12fdSmrg
22547cea3689Smrg    func_echo_IFS=$IFS
22557cea3689Smrg    IFS=$nl
22567cea3689Smrg    for _G_line in $_G_message; do
22577cea3689Smrg      IFS=$func_echo_IFS
22587cea3689Smrg      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
22597cea3689Smrg    done
22607cea3689Smrg    IFS=$func_echo_IFS
22617cea3689Smrg}
2262313a12fdSmrg
22637cea3689Smrg
22647cea3689Smrg## ---------------- ##
22657cea3689Smrg## Options parsing. ##
22667cea3689Smrg## ---------------- ##
22677cea3689Smrg
22687cea3689Smrg# Hook in the functions to make sure our own options are parsed during
22697cea3689Smrg# the option parsing loop.
22707cea3689Smrg
22717cea3689Smrgusage='$progpath [OPTION]... [MODE-ARG]...'
22727cea3689Smrg
22737cea3689Smrg# Short help message in response to '-h'.
22747cea3689Smrgusage_message="Options:
2275ae545d91Smrg       --config                 show all configuration variables
2276ae545d91Smrg       --debug                  enable verbose shell tracing
2277ae545d91Smrg   -n, --dry-run                display commands without modifying any files
2278ae545d91Smrg       --features               display basic configuration information
2279ae545d91Smrg       --finish                 use operation '--mode=finish'
2280ae545d91Smrg       --mode=MODE              use operation mode MODE
2281ae545d91Smrg       --no-finish              don't update shared library cache
2282ae545d91Smrg       --no-quiet, --no-silent  print default informational messages
2283ae545d91Smrg       --no-warnings            equivalent to '-Wnone'
2284ae545d91Smrg       --preserve-dup-deps      don't remove duplicate dependency libraries
2285ae545d91Smrg       --quiet, --silent        don't print informational messages
2286ae545d91Smrg       --reorder-cache=DIRS     reorder shared library cache for preferred DIRS
2287ae545d91Smrg       --tag=TAG                use configuration variables from tag TAG
2288ae545d91Smrg   -v, --verbose                print more informational messages than default
2289ae545d91Smrg       --version                print version information
2290ae545d91Smrg   -W, --warnings=CATEGORY      report the warnings falling in CATEGORY [all]
2291ae545d91Smrg   -h, --help, --help-all       print short, long, or detailed help message
22927cea3689Smrg"
2293313a12fdSmrg
22947cea3689Smrg# Additional text appended to 'usage_message' in response to '--help'.
22957cea3689Smrgfunc_help ()
2296313a12fdSmrg{
22977cea3689Smrg    $debug_cmd
22987cea3689Smrg
22997cea3689Smrg    func_usage_message
23007cea3689Smrg    $ECHO "$long_help_message
23017cea3689Smrg
23027cea3689SmrgMODE must be one of the following:
23037cea3689Smrg
23047cea3689Smrg       clean           remove files from the build directory
23057cea3689Smrg       compile         compile a source file into a libtool object
23067cea3689Smrg       execute         automatically set library path, then run a program
23077cea3689Smrg       finish          complete the installation of libtool libraries
23087cea3689Smrg       install         install libraries or executables
23097cea3689Smrg       link            create a library or an executable
23107cea3689Smrg       uninstall       remove libraries from an installed directory
23117cea3689Smrg
23127cea3689SmrgMODE-ARGS vary depending on the MODE.  When passed as first option,
23137cea3689Smrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
23147cea3689SmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE.
23157cea3689Smrg
23167cea3689SmrgWhen reporting a bug, please describe a test case to reproduce it and
23177cea3689Smrginclude the following information:
23187cea3689Smrg
23197cea3689Smrg       host-triplet:   $host
23207cea3689Smrg       shell:          $SHELL
23217cea3689Smrg       compiler:       $LTCC
23227cea3689Smrg       compiler flags: $LTCFLAGS
23237cea3689Smrg       linker:         $LD (gnu? $with_gnu_ld)
2324ae545d91Smrg       version:        $progname $scriptversion
23257cea3689Smrg       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
23267cea3689Smrg       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
23277cea3689Smrg
23287cea3689SmrgReport bugs to <bug-libtool@gnu.org>.
2329ae545d91SmrgGNU libtool home page: <https://www.gnu.org/software/libtool/>.
2330ae545d91SmrgGeneral help using GNU software: <https://www.gnu.org/gethelp/>."
23317cea3689Smrg    exit 0
23327cea3689Smrg}
2333313a12fdSmrg
2334313a12fdSmrg
23357cea3689Smrg# func_lo2o OBJECT-NAME
23367cea3689Smrg# ---------------------
23377cea3689Smrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
23387cea3689Smrg# object suffix.
23397cea3689Smrg
23407cea3689Smrglo2o=s/\\.lo\$/.$objext/
23417cea3689Smrgo2lo=s/\\.$objext\$/.lo/
23427cea3689Smrg
23437cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
23447cea3689Smrg  eval 'func_lo2o ()
23457cea3689Smrg  {
23467cea3689Smrg    case $1 in
23477cea3689Smrg      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
23487cea3689Smrg      *   ) func_lo2o_result=$1               ;;
23497cea3689Smrg    esac
23507cea3689Smrg  }'
23517cea3689Smrg
23527cea3689Smrg  # func_xform LIBOBJ-OR-SOURCE
23537cea3689Smrg  # ---------------------------
23547cea3689Smrg  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
23557cea3689Smrg  # suffix to a '.lo' libtool-object suffix.
23567cea3689Smrg  eval 'func_xform ()
23577cea3689Smrg  {
23587cea3689Smrg    func_xform_result=${1%.*}.lo
23597cea3689Smrg  }'
23607cea3689Smrgelse
23617cea3689Smrg  # ...otherwise fall back to using sed.
23627cea3689Smrg  func_lo2o ()
23637cea3689Smrg  {
23647cea3689Smrg    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
23657cea3689Smrg  }
23667cea3689Smrg
23677cea3689Smrg  func_xform ()
23687cea3689Smrg  {
23697cea3689Smrg    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
23707cea3689Smrg  }
23717cea3689Smrgfi
2372313a12fdSmrg
2373313a12fdSmrg
23747cea3689Smrg# func_fatal_configuration ARG...
23757cea3689Smrg# -------------------------------
2376e19dfac4Smrg# Echo program name prefixed message to standard error, followed by
2377e19dfac4Smrg# a configuration failure hint, and exit.
2378e19dfac4Smrgfunc_fatal_configuration ()
2379e19dfac4Smrg{
238095b7a5c8Smrg    func_fatal_error ${1+"$@"} \
23817cea3689Smrg      "See the $PACKAGE documentation for more information." \
23827cea3689Smrg      "Fatal configuration error."
2383e19dfac4Smrg}
2384e19dfac4Smrg
2385e19dfac4Smrg
2386e19dfac4Smrg# func_config
23877cea3689Smrg# -----------
2388e19dfac4Smrg# Display the configuration for all the tags in this script.
2389e19dfac4Smrgfunc_config ()
2390e19dfac4Smrg{
2391e19dfac4Smrg    re_begincf='^# ### BEGIN LIBTOOL'
2392e19dfac4Smrg    re_endcf='^# ### END LIBTOOL'
2393e19dfac4Smrg
2394e19dfac4Smrg    # Default configuration.
2395e19dfac4Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
239627702724Smrg
239727702724Smrg    # Now print the configurations for the tags.
239827702724Smrg    for tagname in $taglist; do
2399e19dfac4Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
240027702724Smrg    done
240127702724Smrg
2402e19dfac4Smrg    exit $?
2403e19dfac4Smrg}
240427702724Smrg
24057cea3689Smrg
2406e19dfac4Smrg# func_features
24077cea3689Smrg# -------------
2408e19dfac4Smrg# Display the features supported by this script.
2409e19dfac4Smrgfunc_features ()
2410e19dfac4Smrg{
2411313a12fdSmrg    echo "host: $host"
24127cea3689Smrg    if test yes = "$build_libtool_libs"; then
2413313a12fdSmrg      echo "enable shared libraries"
241427702724Smrg    else
2415313a12fdSmrg      echo "disable shared libraries"
241627702724Smrg    fi
24177cea3689Smrg    if test yes = "$build_old_libs"; then
2418313a12fdSmrg      echo "enable static libraries"
241927702724Smrg    else
2420313a12fdSmrg      echo "disable static libraries"
242127702724Smrg    fi
2422e19dfac4Smrg
242327702724Smrg    exit $?
2424e19dfac4Smrg}
2425e19dfac4Smrg
24267cea3689Smrg
24277cea3689Smrg# func_enable_tag TAGNAME
24287cea3689Smrg# -----------------------
2429e19dfac4Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
2430e19dfac4Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
2431e19dfac4Smrg# variable here.
2432e19dfac4Smrgfunc_enable_tag ()
2433e19dfac4Smrg{
24347cea3689Smrg    # Global variable:
24357cea3689Smrg    tagname=$1
243627702724Smrg
24377cea3689Smrg    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
24387cea3689Smrg    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
24397cea3689Smrg    sed_extractcf=/$re_begincf/,/$re_endcf/p
244027702724Smrg
24417cea3689Smrg    # Validate tagname.
24427cea3689Smrg    case $tagname in
24437cea3689Smrg      *[!-_A-Za-z0-9,/]*)
24447cea3689Smrg        func_fatal_error "invalid tag name: $tagname"
24457cea3689Smrg        ;;
24467cea3689Smrg    esac
244727702724Smrg
24487cea3689Smrg    # Don't test for the "default" C tag, as we know it's
24497cea3689Smrg    # there but not specially marked.
24507cea3689Smrg    case $tagname in
24517cea3689Smrg        CC) ;;
2452e19dfac4Smrg    *)
24537cea3689Smrg        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
24547cea3689Smrg	  taglist="$taglist $tagname"
24557cea3689Smrg
24567cea3689Smrg	  # Evaluate the configuration.  Be careful to quote the path
24577cea3689Smrg	  # and the sed script, to avoid splitting on whitespace, but
24587cea3689Smrg	  # also don't use non-portable quotes within backquotes within
24597cea3689Smrg	  # quotes we have to do it in 2 steps:
24607cea3689Smrg	  extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
24617cea3689Smrg	  eval "$extractedcf"
24627cea3689Smrg        else
24637cea3689Smrg	  func_error "ignoring unknown tag $tagname"
24647cea3689Smrg        fi
24657cea3689Smrg        ;;
24667cea3689Smrg    esac
2467e19dfac4Smrg}
246827702724Smrg
24697cea3689Smrg
2470313a12fdSmrg# func_check_version_match
24717cea3689Smrg# ------------------------
2472313a12fdSmrg# Ensure that we are using m4 macros, and libtool script from the same
2473313a12fdSmrg# release of libtool.
2474313a12fdSmrgfunc_check_version_match ()
2475e19dfac4Smrg{
24767cea3689Smrg    if test "$package_revision" != "$macro_revision"; then
24777cea3689Smrg      if test "$VERSION" != "$macro_version"; then
24787cea3689Smrg        if test -z "$macro_version"; then
24797cea3689Smrg          cat >&2 <<_LT_EOF
2480313a12fdSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2481313a12fdSmrg$progname: definition of this LT_INIT comes from an older release.
2482313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2483313a12fdSmrg$progname: and run autoconf again.
2484313a12fdSmrg_LT_EOF
24857cea3689Smrg        else
24867cea3689Smrg          cat >&2 <<_LT_EOF
2487313a12fdSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2488313a12fdSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
2489313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2490313a12fdSmrg$progname: and run autoconf again.
2491313a12fdSmrg_LT_EOF
24927cea3689Smrg        fi
24937cea3689Smrg      else
24947cea3689Smrg        cat >&2 <<_LT_EOF
2495313a12fdSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
2496313a12fdSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
2497313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
2498313a12fdSmrg$progname: of $PACKAGE $VERSION and run autoconf again.
2499313a12fdSmrg_LT_EOF
25007cea3689Smrg      fi
2501313a12fdSmrg
25027cea3689Smrg      exit $EXIT_MISMATCH
25037cea3689Smrg    fi
2504313a12fdSmrg}
2505313a12fdSmrg
2506313a12fdSmrg
25077cea3689Smrg# libtool_options_prep [ARG]...
25087cea3689Smrg# -----------------------------
25097cea3689Smrg# Preparation for options parsed by libtool.
25107cea3689Smrglibtool_options_prep ()
25117cea3689Smrg{
25127cea3689Smrg    $debug_mode
251327702724Smrg
25147cea3689Smrg    # Option defaults:
25157cea3689Smrg    opt_config=false
25167cea3689Smrg    opt_dlopen=
25177cea3689Smrg    opt_dry_run=false
25187cea3689Smrg    opt_help=false
25197cea3689Smrg    opt_mode=
2520ae545d91Smrg    opt_reorder_cache=false
25217cea3689Smrg    opt_preserve_dup_deps=false
25227cea3689Smrg    opt_quiet=false
2523ae545d91Smrg    opt_finishing=true
2524ae545d91Smrg    opt_warning=
252527702724Smrg
25267cea3689Smrg    nonopt=
25277cea3689Smrg    preserve_args=
2528313a12fdSmrg
252995b7a5c8Smrg    _G_rc_lt_options_prep=:
253095b7a5c8Smrg
25317cea3689Smrg    # Shorthand for --mode=foo, only valid as the first argument
25327cea3689Smrg    case $1 in
25337cea3689Smrg    clean|clea|cle|cl)
25347cea3689Smrg      shift; set dummy --mode clean ${1+"$@"}; shift
25357cea3689Smrg      ;;
25367cea3689Smrg    compile|compil|compi|comp|com|co|c)
25377cea3689Smrg      shift; set dummy --mode compile ${1+"$@"}; shift
25387cea3689Smrg      ;;
25397cea3689Smrg    execute|execut|execu|exec|exe|ex|e)
25407cea3689Smrg      shift; set dummy --mode execute ${1+"$@"}; shift
25417cea3689Smrg      ;;
25427cea3689Smrg    finish|finis|fini|fin|fi|f)
25437cea3689Smrg      shift; set dummy --mode finish ${1+"$@"}; shift
25447cea3689Smrg      ;;
25457cea3689Smrg    install|instal|insta|inst|ins|in|i)
25467cea3689Smrg      shift; set dummy --mode install ${1+"$@"}; shift
25477cea3689Smrg      ;;
25487cea3689Smrg    link|lin|li|l)
25497cea3689Smrg      shift; set dummy --mode link ${1+"$@"}; shift
25507cea3689Smrg      ;;
25517cea3689Smrg    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
25527cea3689Smrg      shift; set dummy --mode uninstall ${1+"$@"}; shift
25537cea3689Smrg      ;;
255495b7a5c8Smrg    *)
255595b7a5c8Smrg      _G_rc_lt_options_prep=false
255695b7a5c8Smrg      ;;
25577cea3689Smrg    esac
25587cea3689Smrg
255995b7a5c8Smrg    if $_G_rc_lt_options_prep; then
256095b7a5c8Smrg      # Pass back the list of options.
256195b7a5c8Smrg      func_quote eval ${1+"$@"}
256295b7a5c8Smrg      libtool_options_prep_result=$func_quote_result
256395b7a5c8Smrg    fi
25647cea3689Smrg}
25657cea3689Smrgfunc_add_hook func_options_prep libtool_options_prep
2566313a12fdSmrg
2567313a12fdSmrg
25687cea3689Smrg# libtool_parse_options [ARG]...
25697cea3689Smrg# ---------------------------------
25707cea3689Smrg# Provide handling for libtool specific options.
25717cea3689Smrglibtool_parse_options ()
2572313a12fdSmrg{
25737cea3689Smrg    $debug_cmd
2574e19dfac4Smrg
257595b7a5c8Smrg    _G_rc_lt_parse_options=false
257695b7a5c8Smrg
25777cea3689Smrg    # Perform our own loop to consume as many options as possible in
25787cea3689Smrg    # each iteration.
25797cea3689Smrg    while test $# -gt 0; do
258095b7a5c8Smrg      _G_match_lt_parse_options=:
25817cea3689Smrg      _G_opt=$1
25827cea3689Smrg      shift
25837cea3689Smrg      case $_G_opt in
25847cea3689Smrg        --dry-run|--dryrun|-n)
25857cea3689Smrg                        opt_dry_run=:
25867cea3689Smrg                        ;;
25877cea3689Smrg
25887cea3689Smrg        --config)       func_config ;;
25897cea3689Smrg
25907cea3689Smrg        --dlopen|-dlopen)
25917cea3689Smrg                        opt_dlopen="${opt_dlopen+$opt_dlopen
25927cea3689Smrg}$1"
25937cea3689Smrg                        shift
25947cea3689Smrg                        ;;
25957cea3689Smrg
25967cea3689Smrg        --preserve-dup-deps)
25977cea3689Smrg                        opt_preserve_dup_deps=: ;;
25987cea3689Smrg
25997cea3689Smrg        --features)     func_features ;;
26007cea3689Smrg
26017cea3689Smrg        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
26027cea3689Smrg
26037cea3689Smrg        --help)         opt_help=: ;;
26047cea3689Smrg
26057cea3689Smrg        --help-all)     opt_help=': help-all' ;;
26067cea3689Smrg
26077cea3689Smrg        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
26087cea3689Smrg                        opt_mode=$1
26097cea3689Smrg                        case $1 in
26107cea3689Smrg                          # Valid mode arguments:
26117cea3689Smrg                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
26127cea3689Smrg
26137cea3689Smrg                          # Catch anything else as an error
2614ae545d91Smrg                          *) func_error "invalid argument '$1' for $_G_opt"
26157cea3689Smrg                             exit_cmd=exit
26167cea3689Smrg                             ;;
26177cea3689Smrg                        esac
26187cea3689Smrg                        shift
26197cea3689Smrg                        ;;
26207cea3689Smrg
2621ae545d91Smrg        --no-finish)
2622ae545d91Smrg                        opt_finishing=false
2623ae545d91Smrg                        func_append preserve_args " $_G_opt"
2624ae545d91Smrg                        ;;
2625ae545d91Smrg
26267cea3689Smrg        --no-silent|--no-quiet)
26277cea3689Smrg                        opt_quiet=false
26287cea3689Smrg                        func_append preserve_args " $_G_opt"
26297cea3689Smrg                        ;;
26307cea3689Smrg
26317cea3689Smrg        --no-warnings|--no-warning|--no-warn)
26327cea3689Smrg                        opt_warning=false
26337cea3689Smrg                        func_append preserve_args " $_G_opt"
26347cea3689Smrg                        ;;
26357cea3689Smrg
26367cea3689Smrg        --no-verbose)
26377cea3689Smrg                        opt_verbose=false
26387cea3689Smrg                        func_append preserve_args " $_G_opt"
26397cea3689Smrg                        ;;
26407cea3689Smrg
2641ae545d91Smrg        --reorder-cache)
2642ae545d91Smrg                        opt_reorder_cache=true
2643ae545d91Smrg                        shared_lib_dirs=$1
2644ae545d91Smrg                        if test -n "$shared_lib_dirs"; then
2645ae545d91Smrg                          case $1 in
2646ae545d91Smrg                            # Must begin with /:
2647ae545d91Smrg                            /*) ;;
2648ae545d91Smrg
2649ae545d91Smrg                            # Catch anything else as an error (relative paths)
2650ae545d91Smrg                            *) func_error "invalid argument '$1' for $_G_opt"
2651ae545d91Smrg                               func_error "absolute paths are required for $_G_opt"
2652ae545d91Smrg                               exit_cmd=exit
2653ae545d91Smrg                               ;;
2654ae545d91Smrg                          esac
2655ae545d91Smrg                        fi
2656ae545d91Smrg                        shift
2657ae545d91Smrg                        ;;
2658ae545d91Smrg
26597cea3689Smrg        --silent|--quiet)
26607cea3689Smrg                        opt_quiet=:
26617cea3689Smrg                        opt_verbose=false
26627cea3689Smrg                        func_append preserve_args " $_G_opt"
26637cea3689Smrg                        ;;
26647cea3689Smrg
26657cea3689Smrg        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
26667cea3689Smrg                        opt_tag=$1
26677cea3689Smrg                        func_append preserve_args " $_G_opt $1"
26687cea3689Smrg                        func_enable_tag "$1"
26697cea3689Smrg                        shift
26707cea3689Smrg                        ;;
26717cea3689Smrg
26727cea3689Smrg        --verbose|-v)   opt_quiet=false
26737cea3689Smrg                        opt_verbose=:
26747cea3689Smrg                        func_append preserve_args " $_G_opt"
26757cea3689Smrg                        ;;
26767cea3689Smrg
267795b7a5c8Smrg        # An option not handled by this hook function:
267895b7a5c8Smrg        *)              set dummy "$_G_opt" ${1+"$@"} ; shift
267995b7a5c8Smrg                        _G_match_lt_parse_options=false
268095b7a5c8Smrg                        break
268195b7a5c8Smrg                        ;;
26827cea3689Smrg      esac
268395b7a5c8Smrg      $_G_match_lt_parse_options && _G_rc_lt_parse_options=:
26847cea3689Smrg    done
2685313a12fdSmrg
268695b7a5c8Smrg    if $_G_rc_lt_parse_options; then
268795b7a5c8Smrg      # save modified positional parameters for caller
268895b7a5c8Smrg      func_quote eval ${1+"$@"}
268995b7a5c8Smrg      libtool_parse_options_result=$func_quote_result
269095b7a5c8Smrg    fi
26917cea3689Smrg}
26927cea3689Smrgfunc_add_hook func_parse_options libtool_parse_options
2693e19dfac4Smrg
269427702724Smrg
2695ae545d91Smrg# func_warning ARG...
2696ae545d91Smrg# -------------------
2697ae545d91Smrg# Libtool warnings are not categorized, so override funclib.sh
2698ae545d91Smrg# func_warning with this simpler definition.
2699ae545d91Smrgfunc_warning ()
2700ae545d91Smrg{
2701ae545d91Smrg    if $opt_warning; then
2702ae545d91Smrg        $debug_cmd
2703ae545d91Smrg        $warning_func ${1+"$@"}
2704ae545d91Smrg    fi
2705ae545d91Smrg}
2706ae545d91Smrg
2707e19dfac4Smrg
27087cea3689Smrg# libtool_validate_options [ARG]...
27097cea3689Smrg# ---------------------------------
27107cea3689Smrg# Perform any sanity checks on option settings and/or unconsumed
27117cea3689Smrg# arguments.
27127cea3689Smrglibtool_validate_options ()
27137cea3689Smrg{
27147cea3689Smrg    # save first non-option argument
27157cea3689Smrg    if test 0 -lt $#; then
27167cea3689Smrg      nonopt=$1
27177cea3689Smrg      shift
2718e19dfac4Smrg    fi
2719e19dfac4Smrg
27207cea3689Smrg    # preserve --debug
27217cea3689Smrg    test : = "$debug_cmd" || func_append preserve_args " --debug"
2722e19dfac4Smrg
2723ae545d91Smrg    case $host_os in
27247cea3689Smrg      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
27257cea3689Smrg      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
2726ae545d91Smrg      cygwin* | mingw* | windows* | pw32* | cegcc* | solaris2* | os2*)
27277cea3689Smrg        # don't eliminate duplications in $postdeps and $predeps
27287cea3689Smrg        opt_duplicate_compiler_generated_deps=:
27297cea3689Smrg        ;;
27307cea3689Smrg      *)
27317cea3689Smrg        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
27327cea3689Smrg        ;;
27337cea3689Smrg    esac
273427702724Smrg
27357cea3689Smrg    $opt_help || {
27367cea3689Smrg      # Sanity checks first:
27377cea3689Smrg      func_check_version_match
27387cea3689Smrg
27397cea3689Smrg      test yes != "$build_libtool_libs" \
27407cea3689Smrg        && test yes != "$build_old_libs" \
27417cea3689Smrg        && func_fatal_configuration "not configured to build any kind of library"
27427cea3689Smrg
27437cea3689Smrg      # Darwin sucks
27447cea3689Smrg      eval std_shrext=\"$shrext_cmds\"
27457cea3689Smrg
27467cea3689Smrg      # Only execute mode is allowed to have -dlopen flags.
27477cea3689Smrg      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
27487cea3689Smrg        func_error "unrecognized option '-dlopen'"
27497cea3689Smrg        $ECHO "$help" 1>&2
27507cea3689Smrg        exit $EXIT_FAILURE
27517cea3689Smrg      fi
2752e19dfac4Smrg
27537cea3689Smrg      # Change the help message to a mode-specific one.
27547cea3689Smrg      generic_help=$help
27557cea3689Smrg      help="Try '$progname --help --mode=$opt_mode' for more information."
27567cea3689Smrg    }
2757e19dfac4Smrg
27587cea3689Smrg    # Pass back the unparsed argument list
275995b7a5c8Smrg    func_quote eval ${1+"$@"}
276095b7a5c8Smrg    libtool_validate_options_result=$func_quote_result
2761313a12fdSmrg}
27627cea3689Smrgfunc_add_hook func_validate_options libtool_validate_options
2763e19dfac4Smrg
2764e19dfac4Smrg
27657cea3689Smrg# Process options as early as possible so that --help and --version
27667cea3689Smrg# can return quickly.
27677cea3689Smrgfunc_options ${1+"$@"}
27687cea3689Smrgeval set dummy "$func_options_result"; shift
27697cea3689Smrg
277027702724Smrg
277127702724Smrg
2772313a12fdSmrg## ----------- ##
2773313a12fdSmrg##    Main.    ##
2774313a12fdSmrg## ----------- ##
277527702724Smrg
27767cea3689Smrgmagic='%%%MAGIC variable%%%'
27777cea3689Smrgmagic_exe='%%%MAGIC EXE variable%%%'
27787cea3689Smrg
27797cea3689Smrg# Global variables.
27807cea3689Smrgextracted_archives=
27817cea3689Smrgextracted_serial=0
27827cea3689Smrg
27837cea3689Smrg# If this variable is set in any of the actions, the command in it
27847cea3689Smrg# will be execed at the end.  This prevents here-documents from being
27857cea3689Smrg# left over by shells.
27867cea3689Smrgexec_cmd=
27877cea3689Smrg
27887cea3689Smrg
27897cea3689Smrg# A function that is used when there is no print builtin or printf.
27907cea3689Smrgfunc_fallback_echo ()
27917cea3689Smrg{
27927cea3689Smrg  eval 'cat <<_LTECHO_EOF
27937cea3689Smrg$1
27947cea3689Smrg_LTECHO_EOF'
27957cea3689Smrg}
27967cea3689Smrg
27977cea3689Smrg# func_generated_by_libtool
27987cea3689Smrg# True iff stdin has been generated by Libtool. This function is only
27997cea3689Smrg# a basic sanity check; it will hardly flush out determined imposters.
28007cea3689Smrgfunc_generated_by_libtool_p ()
28017cea3689Smrg{
28027cea3689Smrg  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
28037cea3689Smrg}
28047cea3689Smrg
2805e19dfac4Smrg# func_lalib_p file
28067cea3689Smrg# True iff FILE is a libtool '.la' library or '.lo' object file.
2807e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out
2808e19dfac4Smrg# determined imposters.
2809e19dfac4Smrgfunc_lalib_p ()
2810e19dfac4Smrg{
2811e19dfac4Smrg    test -f "$1" &&
28127cea3689Smrg      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
2813e19dfac4Smrg}
281427702724Smrg
2815e19dfac4Smrg# func_lalib_unsafe_p file
28167cea3689Smrg# True iff FILE is a libtool '.la' library or '.lo' object file.
2817e19dfac4Smrg# This function implements the same check as func_lalib_p without
2818e19dfac4Smrg# resorting to external programs.  To this end, it redirects stdin and
2819e19dfac4Smrg# closes it afterwards, without saving the original file descriptor.
2820e19dfac4Smrg# As a safety measure, use it only where a negative result would be
28217cea3689Smrg# fatal anyway.  Works if 'file' does not exist.
2822e19dfac4Smrgfunc_lalib_unsafe_p ()
2823e19dfac4Smrg{
2824e19dfac4Smrg    lalib_p=no
2825e19dfac4Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
2826e19dfac4Smrg	for lalib_p_l in 1 2 3 4
2827e19dfac4Smrg	do
2828e19dfac4Smrg	    read lalib_p_line
28297cea3689Smrg	    case $lalib_p_line in
2830e19dfac4Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
2831e19dfac4Smrg	    esac
2832e19dfac4Smrg	done
2833e19dfac4Smrg	exec 0<&5 5<&-
2834e19dfac4Smrg    fi
28357cea3689Smrg    test yes = "$lalib_p"
2836e19dfac4Smrg}
283727702724Smrg
2838e19dfac4Smrg# func_ltwrapper_script_p file
2839e19dfac4Smrg# True iff FILE is a libtool wrapper script
2840e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out
2841e19dfac4Smrg# determined imposters.
2842e19dfac4Smrgfunc_ltwrapper_script_p ()
2843e19dfac4Smrg{
28447cea3689Smrg    test -f "$1" &&
28457cea3689Smrg      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
2846e19dfac4Smrg}
284727702724Smrg
2848e19dfac4Smrg# func_ltwrapper_executable_p file
2849e19dfac4Smrg# True iff FILE is a libtool wrapper executable
2850e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out
2851e19dfac4Smrg# determined imposters.
2852e19dfac4Smrgfunc_ltwrapper_executable_p ()
2853e19dfac4Smrg{
2854e19dfac4Smrg    func_ltwrapper_exec_suffix=
2855e19dfac4Smrg    case $1 in
2856e19dfac4Smrg    *.exe) ;;
2857e19dfac4Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
2858e19dfac4Smrg    esac
2859e19dfac4Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
2860e19dfac4Smrg}
286127702724Smrg
2862e19dfac4Smrg# func_ltwrapper_scriptname file
2863e19dfac4Smrg# Assumes file is an ltwrapper_executable
2864e19dfac4Smrg# uses $file to determine the appropriate filename for a
2865e19dfac4Smrg# temporary ltwrapper_script.
2866e19dfac4Smrgfunc_ltwrapper_scriptname ()
2867e19dfac4Smrg{
2868313a12fdSmrg    func_dirname_and_basename "$1" "" "."
2869313a12fdSmrg    func_stripname '' '.exe' "$func_basename_result"
28707cea3689Smrg    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
2871e19dfac4Smrg}
287227702724Smrg
2873e19dfac4Smrg# func_ltwrapper_p file
2874e19dfac4Smrg# True iff FILE is a libtool wrapper script or wrapper executable
2875e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out
2876e19dfac4Smrg# determined imposters.
2877e19dfac4Smrgfunc_ltwrapper_p ()
2878e19dfac4Smrg{
2879e19dfac4Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
2880e19dfac4Smrg}
288127702724Smrg
288227702724Smrg
2883e19dfac4Smrg# func_execute_cmds commands fail_cmd
2884e19dfac4Smrg# Execute tilde-delimited COMMANDS.
2885e19dfac4Smrg# If FAIL_CMD is given, eval that upon failure.
2886e19dfac4Smrg# FAIL_CMD may read-access the current command in variable CMD!
2887e19dfac4Smrgfunc_execute_cmds ()
2888e19dfac4Smrg{
28897cea3689Smrg    $debug_cmd
28907cea3689Smrg
2891e19dfac4Smrg    save_ifs=$IFS; IFS='~'
2892e19dfac4Smrg    for cmd in $1; do
28937cea3689Smrg      IFS=$sp$nl
2894e19dfac4Smrg      eval cmd=\"$cmd\"
28957cea3689Smrg      IFS=$save_ifs
2896e19dfac4Smrg      func_show_eval "$cmd" "${2-:}"
2897e19dfac4Smrg    done
2898e19dfac4Smrg    IFS=$save_ifs
2899e19dfac4Smrg}
2900e19dfac4Smrg
2901e19dfac4Smrg
2902e19dfac4Smrg# func_source file
2903e19dfac4Smrg# Source FILE, adding directory component if necessary.
2904e19dfac4Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
2905e19dfac4Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
2906e19dfac4Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
29077cea3689Smrg# 'FILE.' does not work on cygwin managed mounts.
2908e19dfac4Smrgfunc_source ()
2909e19dfac4Smrg{
29107cea3689Smrg    $debug_cmd
29117cea3689Smrg
2912e19dfac4Smrg    case $1 in
2913e19dfac4Smrg    */* | *\\*)	. "$1" ;;
2914e19dfac4Smrg    *)		. "./$1" ;;
2915e19dfac4Smrg    esac
2916e19dfac4Smrg}
2917e19dfac4Smrg
2918e19dfac4Smrg
2919313a12fdSmrg# func_resolve_sysroot PATH
2920313a12fdSmrg# Replace a leading = in PATH with a sysroot.  Store the result into
2921313a12fdSmrg# func_resolve_sysroot_result
2922313a12fdSmrgfunc_resolve_sysroot ()
2923313a12fdSmrg{
2924313a12fdSmrg  func_resolve_sysroot_result=$1
2925313a12fdSmrg  case $func_resolve_sysroot_result in
2926313a12fdSmrg  =*)
2927313a12fdSmrg    func_stripname '=' '' "$func_resolve_sysroot_result"
2928313a12fdSmrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
2929313a12fdSmrg    ;;
2930313a12fdSmrg  esac
2931313a12fdSmrg}
2932313a12fdSmrg
2933313a12fdSmrg# func_replace_sysroot PATH
2934313a12fdSmrg# If PATH begins with the sysroot, replace it with = and
2935313a12fdSmrg# store the result into func_replace_sysroot_result.
2936313a12fdSmrgfunc_replace_sysroot ()
2937313a12fdSmrg{
29387cea3689Smrg  case $lt_sysroot:$1 in
2939313a12fdSmrg  ?*:"$lt_sysroot"*)
2940313a12fdSmrg    func_stripname "$lt_sysroot" '' "$1"
29417cea3689Smrg    func_replace_sysroot_result='='$func_stripname_result
2942313a12fdSmrg    ;;
2943313a12fdSmrg  *)
2944313a12fdSmrg    # Including no sysroot.
2945313a12fdSmrg    func_replace_sysroot_result=$1
2946313a12fdSmrg    ;;
2947313a12fdSmrg  esac
2948313a12fdSmrg}
2949313a12fdSmrg
2950e19dfac4Smrg# func_infer_tag arg
2951e19dfac4Smrg# Infer tagged configuration to use if any are available and
2952e19dfac4Smrg# if one wasn't chosen via the "--tag" command line option.
2953e19dfac4Smrg# Only attempt this if the compiler in the base compile
2954e19dfac4Smrg# command doesn't match the default compiler.
2955e19dfac4Smrg# arg is usually of the form 'gcc ...'
2956e19dfac4Smrgfunc_infer_tag ()
2957e19dfac4Smrg{
29587cea3689Smrg    $debug_cmd
29597cea3689Smrg
2960e19dfac4Smrg    if test -n "$available_tags" && test -z "$tagname"; then
2961e19dfac4Smrg      CC_quoted=
2962e19dfac4Smrg      for arg in $CC; do
2963313a12fdSmrg	func_append_quoted CC_quoted "$arg"
2964e19dfac4Smrg      done
2965313a12fdSmrg      CC_expanded=`func_echo_all $CC`
2966313a12fdSmrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
2967e19dfac4Smrg      case $@ in
2968e19dfac4Smrg      # Blanks in the command may have been stripped by the calling shell,
2969e19dfac4Smrg      # but not from the CC environment variable when configure was run.
2970313a12fdSmrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2971313a12fdSmrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
2972e19dfac4Smrg      # Blanks at the start of $base_compile will cause this to fail
2973e19dfac4Smrg      # if we don't check for them as well.
2974e19dfac4Smrg      *)
2975e19dfac4Smrg	for z in $available_tags; do
2976e19dfac4Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
2977e19dfac4Smrg	    # Evaluate the configuration.
29787cea3689Smrg	    eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
2979e19dfac4Smrg	    CC_quoted=
2980e19dfac4Smrg	    for arg in $CC; do
2981e19dfac4Smrg	      # Double-quote args containing other shell metacharacters.
2982313a12fdSmrg	      func_append_quoted CC_quoted "$arg"
2983e19dfac4Smrg	    done
2984313a12fdSmrg	    CC_expanded=`func_echo_all $CC`
2985313a12fdSmrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
2986e19dfac4Smrg	    case "$@ " in
2987313a12fdSmrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2988313a12fdSmrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
2989e19dfac4Smrg	      # The compiler in the base compile command matches
2990e19dfac4Smrg	      # the one in the tagged configuration.
2991e19dfac4Smrg	      # Assume this is the tagged configuration we want.
2992e19dfac4Smrg	      tagname=$z
2993e19dfac4Smrg	      break
2994e19dfac4Smrg	      ;;
299527702724Smrg	    esac
2996e19dfac4Smrg	  fi
2997e19dfac4Smrg	done
2998e19dfac4Smrg	# If $tagname still isn't set, then no tagged configuration
2999e19dfac4Smrg	# was found and let the user know that the "--tag" command
3000e19dfac4Smrg	# line option must be used.
3001e19dfac4Smrg	if test -z "$tagname"; then
3002e19dfac4Smrg	  func_echo "unable to infer tagged configuration"
30037cea3689Smrg	  func_fatal_error "specify a tag with '--tag'"
3004e19dfac4Smrg#	else
3005e19dfac4Smrg#	  func_verbose "using $tagname tagged configuration"
3006e19dfac4Smrg	fi
3007e19dfac4Smrg	;;
3008e19dfac4Smrg      esac
3009e19dfac4Smrg    fi
3010e19dfac4Smrg}
3011e19dfac4Smrg
3012e19dfac4Smrg
3013e19dfac4Smrg
3014e19dfac4Smrg# func_write_libtool_object output_name pic_name nonpic_name
3015e19dfac4Smrg# Create a libtool object file (analogous to a ".la" file),
3016e19dfac4Smrg# but don't create it if we're doing a dry run.
3017e19dfac4Smrgfunc_write_libtool_object ()
3018e19dfac4Smrg{
30197cea3689Smrg    write_libobj=$1
30207cea3689Smrg    if test yes = "$build_libtool_libs"; then
30217cea3689Smrg      write_lobj=\'$2\'
3022e19dfac4Smrg    else
3023e19dfac4Smrg      write_lobj=none
3024e19dfac4Smrg    fi
3025e19dfac4Smrg
30267cea3689Smrg    if test yes = "$build_old_libs"; then
30277cea3689Smrg      write_oldobj=\'$3\'
3028e19dfac4Smrg    else
3029e19dfac4Smrg      write_oldobj=none
3030e19dfac4Smrg    fi
3031e19dfac4Smrg
3032e19dfac4Smrg    $opt_dry_run || {
3033e19dfac4Smrg      cat >${write_libobj}T <<EOF
3034e19dfac4Smrg# $write_libobj - a libtool object file
30357cea3689Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
3036e19dfac4Smrg#
3037e19dfac4Smrg# Please DO NOT delete this file!
3038e19dfac4Smrg# It is necessary for linking the library.
3039e19dfac4Smrg
3040e19dfac4Smrg# Name of the PIC object.
3041e19dfac4Smrgpic_object=$write_lobj
3042e19dfac4Smrg
3043e19dfac4Smrg# Name of the non-PIC object
3044e19dfac4Smrgnon_pic_object=$write_oldobj
3045e19dfac4Smrg
3046e19dfac4SmrgEOF
30477cea3689Smrg      $MV "${write_libobj}T" "$write_libobj"
3048e19dfac4Smrg    }
3049e19dfac4Smrg}
3050e19dfac4Smrg
3051313a12fdSmrg
3052313a12fdSmrg##################################################
3053313a12fdSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
3054313a12fdSmrg##################################################
3055313a12fdSmrg
3056313a12fdSmrg# func_convert_core_file_wine_to_w32 ARG
3057313a12fdSmrg# Helper function used by file name conversion functions when $build is *nix,
3058ae545d91Smrg# and $host is mingw, windows, cygwin, or some other w32 environment. Relies on a
3059313a12fdSmrg# correctly configured wine environment available, with the winepath program
3060313a12fdSmrg# in $build's $PATH.
3061313a12fdSmrg#
3062313a12fdSmrg# ARG is the $build file name to be converted to w32 format.
3063313a12fdSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
3064313a12fdSmrg# be empty on error (or when ARG is empty)
3065313a12fdSmrgfunc_convert_core_file_wine_to_w32 ()
3066313a12fdSmrg{
30677cea3689Smrg  $debug_cmd
30687cea3689Smrg
30697cea3689Smrg  func_convert_core_file_wine_to_w32_result=$1
3070313a12fdSmrg  if test -n "$1"; then
3071313a12fdSmrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
3072313a12fdSmrg    # are forced to check the contents of stdout. On the other hand, if the
3073313a12fdSmrg    # command is not found, the shell will set an exit code of 127 and print
3074313a12fdSmrg    # *an error message* to stdout. So we must check for both error code of
3075313a12fdSmrg    # zero AND non-empty stdout, which explains the odd construction:
3076313a12fdSmrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
30777cea3689Smrg    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
3078313a12fdSmrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
30797cea3689Smrg        $SED -e "$sed_naive_backslashify"`
3080313a12fdSmrg    else
3081313a12fdSmrg      func_convert_core_file_wine_to_w32_result=
3082313a12fdSmrg    fi
3083313a12fdSmrg  fi
3084313a12fdSmrg}
3085313a12fdSmrg# end: func_convert_core_file_wine_to_w32
3086313a12fdSmrg
3087313a12fdSmrg
3088313a12fdSmrg# func_convert_core_path_wine_to_w32 ARG
3089313a12fdSmrg# Helper function used by path conversion functions when $build is *nix, and
3090ae545d91Smrg# $host is mingw, windows, cygwin, or some other w32 environment. Relies on a
3091ae545d91Smrg# correctly configured wine environment available, with the winepath program
3092ae545d91Smrg# in $build's $PATH. Assumes ARG has no leading or trailing path separator
3093ae545d91Smrg# characters.
3094313a12fdSmrg#
3095313a12fdSmrg# ARG is path to be converted from $build format to win32.
3096313a12fdSmrg# Result is available in $func_convert_core_path_wine_to_w32_result.
3097313a12fdSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
3098313a12fdSmrg# are convertible, then the result may be empty.
3099313a12fdSmrgfunc_convert_core_path_wine_to_w32 ()
3100313a12fdSmrg{
31017cea3689Smrg  $debug_cmd
31027cea3689Smrg
3103313a12fdSmrg  # unfortunately, winepath doesn't convert paths, only file names
31047cea3689Smrg  func_convert_core_path_wine_to_w32_result=
3105313a12fdSmrg  if test -n "$1"; then
3106313a12fdSmrg    oldIFS=$IFS
3107313a12fdSmrg    IFS=:
3108313a12fdSmrg    for func_convert_core_path_wine_to_w32_f in $1; do
3109313a12fdSmrg      IFS=$oldIFS
3110313a12fdSmrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
31117cea3689Smrg      if test -n "$func_convert_core_file_wine_to_w32_result"; then
3112313a12fdSmrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
31137cea3689Smrg          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
3114313a12fdSmrg        else
3115313a12fdSmrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
3116313a12fdSmrg        fi
3117313a12fdSmrg      fi
3118313a12fdSmrg    done
3119313a12fdSmrg    IFS=$oldIFS
3120313a12fdSmrg  fi
3121313a12fdSmrg}
3122313a12fdSmrg# end: func_convert_core_path_wine_to_w32
3123313a12fdSmrg
3124313a12fdSmrg
3125313a12fdSmrg# func_cygpath ARGS...
3126313a12fdSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
3127313a12fdSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
3128313a12fdSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
3129313a12fdSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
3130313a12fdSmrg# file name or path is assumed to be in w32 format, as previously converted
3131313a12fdSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
3132313a12fdSmrg# or path in func_cygpath_result (input file name or path is assumed to be in
3133313a12fdSmrg# Cygwin format). Returns an empty string on error.
3134313a12fdSmrg#
3135313a12fdSmrg# ARGS are passed to cygpath, with the last one being the file name or path to
3136313a12fdSmrg# be converted.
3137313a12fdSmrg#
3138313a12fdSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
3139313a12fdSmrg# environment variable; do not put it in $PATH.
3140313a12fdSmrgfunc_cygpath ()
3141313a12fdSmrg{
31427cea3689Smrg  $debug_cmd
31437cea3689Smrg
3144313a12fdSmrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
3145313a12fdSmrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
3146313a12fdSmrg    if test "$?" -ne 0; then
3147313a12fdSmrg      # on failure, ensure result is empty
3148313a12fdSmrg      func_cygpath_result=
3149313a12fdSmrg    fi
3150313a12fdSmrg  else
3151313a12fdSmrg    func_cygpath_result=
31527cea3689Smrg    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
3153313a12fdSmrg  fi
3154313a12fdSmrg}
3155313a12fdSmrg#end: func_cygpath
3156313a12fdSmrg
3157313a12fdSmrg
3158313a12fdSmrg# func_convert_core_msys_to_w32 ARG
3159313a12fdSmrg# Convert file name or path ARG from MSYS format to w32 format.  Return
3160313a12fdSmrg# result in func_convert_core_msys_to_w32_result.
3161313a12fdSmrgfunc_convert_core_msys_to_w32 ()
3162313a12fdSmrg{
31637cea3689Smrg  $debug_cmd
31647cea3689Smrg
3165313a12fdSmrg  # awkward: cmd appends spaces to result
3166313a12fdSmrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
31677cea3689Smrg    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
3168313a12fdSmrg}
3169313a12fdSmrg#end: func_convert_core_msys_to_w32
3170313a12fdSmrg
3171313a12fdSmrg
3172313a12fdSmrg# func_convert_file_check ARG1 ARG2
3173313a12fdSmrg# Verify that ARG1 (a file name in $build format) was converted to $host
3174313a12fdSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
3175313a12fdSmrg# func_to_host_file_result to ARG1).
3176313a12fdSmrgfunc_convert_file_check ()
3177313a12fdSmrg{
31787cea3689Smrg  $debug_cmd
31797cea3689Smrg
31807cea3689Smrg  if test -z "$2" && test -n "$1"; then
3181313a12fdSmrg    func_error "Could not determine host file name corresponding to"
31827cea3689Smrg    func_error "  '$1'"
3183313a12fdSmrg    func_error "Continuing, but uninstalled executables may not work."
3184313a12fdSmrg    # Fallback:
31857cea3689Smrg    func_to_host_file_result=$1
3186313a12fdSmrg  fi
3187313a12fdSmrg}
3188313a12fdSmrg# end func_convert_file_check
3189313a12fdSmrg
3190313a12fdSmrg
3191313a12fdSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
3192313a12fdSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host
3193313a12fdSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
3194313a12fdSmrg# func_to_host_file_result to a simplistic fallback value (see below).
3195313a12fdSmrgfunc_convert_path_check ()
3196313a12fdSmrg{
31977cea3689Smrg  $debug_cmd
31987cea3689Smrg
3199313a12fdSmrg  if test -z "$4" && test -n "$3"; then
3200313a12fdSmrg    func_error "Could not determine the host path corresponding to"
32017cea3689Smrg    func_error "  '$3'"
3202313a12fdSmrg    func_error "Continuing, but uninstalled executables may not work."
3203313a12fdSmrg    # Fallback.  This is a deliberately simplistic "conversion" and
3204313a12fdSmrg    # should not be "improved".  See libtool.info.
3205313a12fdSmrg    if test "x$1" != "x$2"; then
3206313a12fdSmrg      lt_replace_pathsep_chars="s|$1|$2|g"
3207313a12fdSmrg      func_to_host_path_result=`echo "$3" |
3208313a12fdSmrg        $SED -e "$lt_replace_pathsep_chars"`
3209313a12fdSmrg    else
32107cea3689Smrg      func_to_host_path_result=$3
3211313a12fdSmrg    fi
3212313a12fdSmrg  fi
3213313a12fdSmrg}
3214313a12fdSmrg# end func_convert_path_check
3215313a12fdSmrg
3216313a12fdSmrg
3217313a12fdSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
3218313a12fdSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
3219313a12fdSmrg# and appending REPL if ORIG matches BACKPAT.
3220313a12fdSmrgfunc_convert_path_front_back_pathsep ()
3221313a12fdSmrg{
32227cea3689Smrg  $debug_cmd
32237cea3689Smrg
3224313a12fdSmrg  case $4 in
32257cea3689Smrg  $1 ) func_to_host_path_result=$3$func_to_host_path_result
3226313a12fdSmrg    ;;
3227313a12fdSmrg  esac
3228313a12fdSmrg  case $4 in
3229313a12fdSmrg  $2 ) func_append func_to_host_path_result "$3"
3230313a12fdSmrg    ;;
3231313a12fdSmrg  esac
3232313a12fdSmrg}
3233313a12fdSmrg# end func_convert_path_front_back_pathsep
3234313a12fdSmrg
3235313a12fdSmrg
3236ae545d91Smrg# func_convert_delimited_path PATH ORIG_DELIMITER NEW_DELIMITER
3237ae545d91Smrg# Replaces a delimiter for a given path.
3238ae545d91Smrgfunc_convert_delimited_path ()
3239ae545d91Smrg{
3240ae545d91Smrg	converted_path=`$ECHO "$1" | $SED "s#$2#$3#g"`
3241ae545d91Smrg}
3242ae545d91Smrg# end func_convert_delimited_path
3243ae545d91Smrg
3244ae545d91Smrg
3245313a12fdSmrg##################################################
3246313a12fdSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
3247313a12fdSmrg##################################################
32487cea3689Smrg# invoked via '$to_host_file_cmd ARG'
3249313a12fdSmrg#
3250313a12fdSmrg# In each case, ARG is the path to be converted from $build to $host format.
3251313a12fdSmrg# Result will be available in $func_to_host_file_result.
3252313a12fdSmrg
3253313a12fdSmrg
3254313a12fdSmrg# func_to_host_file ARG
3255313a12fdSmrg# Converts the file name ARG from $build format to $host format. Return result
3256313a12fdSmrg# in func_to_host_file_result.
3257313a12fdSmrgfunc_to_host_file ()
3258313a12fdSmrg{
32597cea3689Smrg  $debug_cmd
32607cea3689Smrg
3261313a12fdSmrg  $to_host_file_cmd "$1"
3262313a12fdSmrg}
3263313a12fdSmrg# end func_to_host_file
3264313a12fdSmrg
3265313a12fdSmrg
3266313a12fdSmrg# func_to_tool_file ARG LAZY
3267313a12fdSmrg# converts the file name ARG from $build format to toolchain format. Return
3268313a12fdSmrg# result in func_to_tool_file_result.  If the conversion in use is listed
3269313a12fdSmrg# in (the comma separated) LAZY, no conversion takes place.
3270313a12fdSmrgfunc_to_tool_file ()
3271313a12fdSmrg{
32727cea3689Smrg  $debug_cmd
32737cea3689Smrg
3274313a12fdSmrg  case ,$2, in
3275313a12fdSmrg    *,"$to_tool_file_cmd",*)
3276313a12fdSmrg      func_to_tool_file_result=$1
3277313a12fdSmrg      ;;
3278313a12fdSmrg    *)
3279313a12fdSmrg      $to_tool_file_cmd "$1"
3280313a12fdSmrg      func_to_tool_file_result=$func_to_host_file_result
3281313a12fdSmrg      ;;
3282313a12fdSmrg  esac
3283313a12fdSmrg}
3284313a12fdSmrg# end func_to_tool_file
3285313a12fdSmrg
3286313a12fdSmrg
3287313a12fdSmrg# func_convert_file_noop ARG
3288313a12fdSmrg# Copy ARG to func_to_host_file_result.
3289313a12fdSmrgfunc_convert_file_noop ()
3290313a12fdSmrg{
32917cea3689Smrg  func_to_host_file_result=$1
3292313a12fdSmrg}
3293313a12fdSmrg# end func_convert_file_noop
3294313a12fdSmrg
3295313a12fdSmrg
3296313a12fdSmrg# func_convert_file_msys_to_w32 ARG
3297313a12fdSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
3298313a12fdSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
3299313a12fdSmrg# func_to_host_file_result.
3300313a12fdSmrgfunc_convert_file_msys_to_w32 ()
3301313a12fdSmrg{
33027cea3689Smrg  $debug_cmd
33037cea3689Smrg
33047cea3689Smrg  func_to_host_file_result=$1
3305313a12fdSmrg  if test -n "$1"; then
3306313a12fdSmrg    func_convert_core_msys_to_w32 "$1"
33077cea3689Smrg    func_to_host_file_result=$func_convert_core_msys_to_w32_result
3308313a12fdSmrg  fi
3309313a12fdSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
3310313a12fdSmrg}
3311313a12fdSmrg# end func_convert_file_msys_to_w32
3312313a12fdSmrg
3313313a12fdSmrg
3314313a12fdSmrg# func_convert_file_cygwin_to_w32 ARG
3315313a12fdSmrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
3316313a12fdSmrg# func_to_host_file_result.
3317313a12fdSmrgfunc_convert_file_cygwin_to_w32 ()
3318313a12fdSmrg{
33197cea3689Smrg  $debug_cmd
33207cea3689Smrg
33217cea3689Smrg  func_to_host_file_result=$1
3322313a12fdSmrg  if test -n "$1"; then
3323313a12fdSmrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
3324313a12fdSmrg    # LT_CYGPATH in this case.
3325313a12fdSmrg    func_to_host_file_result=`cygpath -m "$1"`
3326313a12fdSmrg  fi
3327313a12fdSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
3328313a12fdSmrg}
3329313a12fdSmrg# end func_convert_file_cygwin_to_w32
3330313a12fdSmrg
3331313a12fdSmrg
3332313a12fdSmrg# func_convert_file_nix_to_w32 ARG
3333313a12fdSmrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
3334313a12fdSmrg# and a working winepath. Returns result in func_to_host_file_result.
3335313a12fdSmrgfunc_convert_file_nix_to_w32 ()
3336313a12fdSmrg{
33377cea3689Smrg  $debug_cmd
33387cea3689Smrg
33397cea3689Smrg  func_to_host_file_result=$1
3340313a12fdSmrg  if test -n "$1"; then
3341313a12fdSmrg    func_convert_core_file_wine_to_w32 "$1"
33427cea3689Smrg    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
3343313a12fdSmrg  fi
3344313a12fdSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
3345313a12fdSmrg}
3346313a12fdSmrg# end func_convert_file_nix_to_w32
3347313a12fdSmrg
3348313a12fdSmrg
3349313a12fdSmrg# func_convert_file_msys_to_cygwin ARG
3350313a12fdSmrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3351313a12fdSmrg# Returns result in func_to_host_file_result.
3352313a12fdSmrgfunc_convert_file_msys_to_cygwin ()
3353313a12fdSmrg{
33547cea3689Smrg  $debug_cmd
33557cea3689Smrg
33567cea3689Smrg  func_to_host_file_result=$1
3357313a12fdSmrg  if test -n "$1"; then
3358313a12fdSmrg    func_convert_core_msys_to_w32 "$1"
3359313a12fdSmrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
33607cea3689Smrg    func_to_host_file_result=$func_cygpath_result
3361313a12fdSmrg  fi
3362313a12fdSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
3363313a12fdSmrg}
3364313a12fdSmrg# end func_convert_file_msys_to_cygwin
3365313a12fdSmrg
3366313a12fdSmrg
3367313a12fdSmrg# func_convert_file_nix_to_cygwin ARG
3368313a12fdSmrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
3369313a12fdSmrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
3370313a12fdSmrg# in func_to_host_file_result.
3371313a12fdSmrgfunc_convert_file_nix_to_cygwin ()
3372313a12fdSmrg{
33737cea3689Smrg  $debug_cmd
33747cea3689Smrg
33757cea3689Smrg  func_to_host_file_result=$1
3376313a12fdSmrg  if test -n "$1"; then
3377313a12fdSmrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
3378313a12fdSmrg    func_convert_core_file_wine_to_w32 "$1"
3379313a12fdSmrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
33807cea3689Smrg    func_to_host_file_result=$func_cygpath_result
3381313a12fdSmrg  fi
3382313a12fdSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
3383313a12fdSmrg}
3384313a12fdSmrg# end func_convert_file_nix_to_cygwin
3385313a12fdSmrg
3386313a12fdSmrg
3387313a12fdSmrg#############################################
3388313a12fdSmrg# $build to $host PATH CONVERSION FUNCTIONS #
3389313a12fdSmrg#############################################
33907cea3689Smrg# invoked via '$to_host_path_cmd ARG'
3391313a12fdSmrg#
3392313a12fdSmrg# In each case, ARG is the path to be converted from $build to $host format.
3393313a12fdSmrg# The result will be available in $func_to_host_path_result.
3394313a12fdSmrg#
3395313a12fdSmrg# Path separators are also converted from $build format to $host format.  If
3396313a12fdSmrg# ARG begins or ends with a path separator character, it is preserved (but
3397313a12fdSmrg# converted to $host format) on output.
3398313a12fdSmrg#
3399313a12fdSmrg# All path conversion functions are named using the following convention:
3400313a12fdSmrg#   file name conversion function    : func_convert_file_X_to_Y ()
3401313a12fdSmrg#   path conversion function         : func_convert_path_X_to_Y ()
3402313a12fdSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the
3403313a12fdSmrg# same.  If conversion functions are added for new $build/$host combinations,
3404313a12fdSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
3405313a12fdSmrg# will break.
3406313a12fdSmrg
3407313a12fdSmrg
3408313a12fdSmrg# func_init_to_host_path_cmd
3409313a12fdSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
3410313a12fdSmrg# appropriate value, based on the value of $to_host_file_cmd.
3411313a12fdSmrgto_host_path_cmd=
3412313a12fdSmrgfunc_init_to_host_path_cmd ()
3413313a12fdSmrg{
34147cea3689Smrg  $debug_cmd
34157cea3689Smrg
3416313a12fdSmrg  if test -z "$to_host_path_cmd"; then
3417313a12fdSmrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
34187cea3689Smrg    to_host_path_cmd=func_convert_path_$func_stripname_result
3419313a12fdSmrg  fi
3420313a12fdSmrg}
3421313a12fdSmrg
3422313a12fdSmrg
3423313a12fdSmrg# func_to_host_path ARG
3424313a12fdSmrg# Converts the path ARG from $build format to $host format. Return result
3425313a12fdSmrg# in func_to_host_path_result.
3426313a12fdSmrgfunc_to_host_path ()
3427313a12fdSmrg{
34287cea3689Smrg  $debug_cmd
34297cea3689Smrg
3430313a12fdSmrg  func_init_to_host_path_cmd
3431313a12fdSmrg  $to_host_path_cmd "$1"
3432313a12fdSmrg}
3433313a12fdSmrg# end func_to_host_path
3434313a12fdSmrg
3435313a12fdSmrg
3436313a12fdSmrg# func_convert_path_noop ARG
3437313a12fdSmrg# Copy ARG to func_to_host_path_result.
3438313a12fdSmrgfunc_convert_path_noop ()
3439313a12fdSmrg{
34407cea3689Smrg  func_to_host_path_result=$1
3441313a12fdSmrg}
3442313a12fdSmrg# end func_convert_path_noop
3443313a12fdSmrg
3444313a12fdSmrg
3445313a12fdSmrg# func_convert_path_msys_to_w32 ARG
3446313a12fdSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
3447313a12fdSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
3448313a12fdSmrg# func_to_host_path_result.
3449313a12fdSmrgfunc_convert_path_msys_to_w32 ()
3450313a12fdSmrg{
34517cea3689Smrg  $debug_cmd
34527cea3689Smrg
34537cea3689Smrg  func_to_host_path_result=$1
3454313a12fdSmrg  if test -n "$1"; then
3455313a12fdSmrg    # Remove leading and trailing path separator characters from ARG.  MSYS
3456313a12fdSmrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
3457313a12fdSmrg    # and winepath ignores them completely.
3458313a12fdSmrg    func_stripname : : "$1"
3459313a12fdSmrg    func_to_host_path_tmp1=$func_stripname_result
3460313a12fdSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
34617cea3689Smrg    func_to_host_path_result=$func_convert_core_msys_to_w32_result
3462313a12fdSmrg    func_convert_path_check : ";" \
3463313a12fdSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3464313a12fdSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3465313a12fdSmrg  fi
3466313a12fdSmrg}
3467313a12fdSmrg# end func_convert_path_msys_to_w32
3468313a12fdSmrg
3469313a12fdSmrg
3470313a12fdSmrg# func_convert_path_cygwin_to_w32 ARG
3471313a12fdSmrg# Convert path ARG from Cygwin to w32 format.  Returns result in
3472313a12fdSmrg# func_to_host_file_result.
3473313a12fdSmrgfunc_convert_path_cygwin_to_w32 ()
3474313a12fdSmrg{
34757cea3689Smrg  $debug_cmd
34767cea3689Smrg
34777cea3689Smrg  func_to_host_path_result=$1
3478313a12fdSmrg  if test -n "$1"; then
3479313a12fdSmrg    # See func_convert_path_msys_to_w32:
3480313a12fdSmrg    func_stripname : : "$1"
3481313a12fdSmrg    func_to_host_path_tmp1=$func_stripname_result
3482313a12fdSmrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
3483313a12fdSmrg    func_convert_path_check : ";" \
3484313a12fdSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3485313a12fdSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3486313a12fdSmrg  fi
3487313a12fdSmrg}
3488313a12fdSmrg# end func_convert_path_cygwin_to_w32
3489313a12fdSmrg
3490313a12fdSmrg
3491313a12fdSmrg# func_convert_path_nix_to_w32 ARG
3492313a12fdSmrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
3493313a12fdSmrg# a working winepath.  Returns result in func_to_host_file_result.
3494313a12fdSmrgfunc_convert_path_nix_to_w32 ()
3495313a12fdSmrg{
34967cea3689Smrg  $debug_cmd
34977cea3689Smrg
34987cea3689Smrg  func_to_host_path_result=$1
3499313a12fdSmrg  if test -n "$1"; then
3500313a12fdSmrg    # See func_convert_path_msys_to_w32:
3501313a12fdSmrg    func_stripname : : "$1"
3502313a12fdSmrg    func_to_host_path_tmp1=$func_stripname_result
3503313a12fdSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
35047cea3689Smrg    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
3505313a12fdSmrg    func_convert_path_check : ";" \
3506313a12fdSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3507313a12fdSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3508313a12fdSmrg  fi
3509313a12fdSmrg}
3510313a12fdSmrg# end func_convert_path_nix_to_w32
3511313a12fdSmrg
3512313a12fdSmrg
3513313a12fdSmrg# func_convert_path_msys_to_cygwin ARG
3514313a12fdSmrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3515313a12fdSmrg# Returns result in func_to_host_file_result.
3516313a12fdSmrgfunc_convert_path_msys_to_cygwin ()
3517313a12fdSmrg{
35187cea3689Smrg  $debug_cmd
35197cea3689Smrg
35207cea3689Smrg  func_to_host_path_result=$1
3521313a12fdSmrg  if test -n "$1"; then
3522313a12fdSmrg    # See func_convert_path_msys_to_w32:
3523313a12fdSmrg    func_stripname : : "$1"
3524313a12fdSmrg    func_to_host_path_tmp1=$func_stripname_result
3525313a12fdSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3526313a12fdSmrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
35277cea3689Smrg    func_to_host_path_result=$func_cygpath_result
3528313a12fdSmrg    func_convert_path_check : : \
3529313a12fdSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3530313a12fdSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3531313a12fdSmrg  fi
3532313a12fdSmrg}
3533313a12fdSmrg# end func_convert_path_msys_to_cygwin
3534313a12fdSmrg
3535313a12fdSmrg
3536313a12fdSmrg# func_convert_path_nix_to_cygwin ARG
3537313a12fdSmrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
3538313a12fdSmrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
3539313a12fdSmrg# func_to_host_file_result.
3540313a12fdSmrgfunc_convert_path_nix_to_cygwin ()
3541313a12fdSmrg{
35427cea3689Smrg  $debug_cmd
35437cea3689Smrg
35447cea3689Smrg  func_to_host_path_result=$1
3545313a12fdSmrg  if test -n "$1"; then
3546313a12fdSmrg    # Remove leading and trailing path separator characters from
3547313a12fdSmrg    # ARG. msys behavior is inconsistent here, cygpath turns them
3548313a12fdSmrg    # into '.;' and ';.', and winepath ignores them completely.
3549313a12fdSmrg    func_stripname : : "$1"
3550313a12fdSmrg    func_to_host_path_tmp1=$func_stripname_result
3551313a12fdSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3552313a12fdSmrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
35537cea3689Smrg    func_to_host_path_result=$func_cygpath_result
3554313a12fdSmrg    func_convert_path_check : : \
3555313a12fdSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3556313a12fdSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3557313a12fdSmrg  fi
3558313a12fdSmrg}
3559313a12fdSmrg# end func_convert_path_nix_to_cygwin
3560313a12fdSmrg
3561313a12fdSmrg
35627cea3689Smrg# func_dll_def_p FILE
35637cea3689Smrg# True iff FILE is a Windows DLL '.def' file.
35647cea3689Smrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4
35657cea3689Smrgfunc_dll_def_p ()
35667cea3689Smrg{
35677cea3689Smrg  $debug_cmd
35687cea3689Smrg
35697cea3689Smrg  func_dll_def_p_tmp=`$SED -n \
35707cea3689Smrg    -e 's/^[	 ]*//' \
35717cea3689Smrg    -e '/^\(;.*\)*$/d' \
35727cea3689Smrg    -e 's/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p' \
35737cea3689Smrg    -e q \
35747cea3689Smrg    "$1"`
35757cea3689Smrg  test DEF = "$func_dll_def_p_tmp"
35767cea3689Smrg}
35777cea3689Smrg
35787cea3689Smrg
3579ae545d91Smrg# func_reorder_shared_lib_cache DIRS
3580ae545d91Smrg# Reorder the shared library cache by unconfiguring previous shared library cache
3581ae545d91Smrg# and configuring preferred search directories before previous search directories.
3582ae545d91Smrg# Previous shared library cache: /usr/lib /usr/local/lib
3583ae545d91Smrg# Preferred search directories: /tmp/testing
3584ae545d91Smrg# Reordered shared library cache: /tmp/testing /usr/lib /usr/local/lib
3585ae545d91Smrgfunc_reorder_shared_lib_cache ()
3586ae545d91Smrg{
3587ae545d91Smrg	$debug_cmd
3588ae545d91Smrg
3589ae545d91Smrg	case $host_os in
3590ae545d91Smrg	  openbsd*)
3591ae545d91Smrg	    get_search_directories=`PATH="$PATH:/sbin" ldconfig -r | $GREP "search directories" | $SED "s#.*search directories:\ ##g"`
3592ae545d91Smrg	    func_convert_delimited_path "$get_search_directories" ':' '\ '
3593ae545d91Smrg	    save_search_directories=$converted_path
3594ae545d91Smrg	    func_convert_delimited_path "$1" ':' '\ '
3595ae545d91Smrg
3596ae545d91Smrg	    # Ensure directories exist
3597ae545d91Smrg	    for dir in $converted_path; do
3598ae545d91Smrg	      # Ensure each directory is an absolute path
3599ae545d91Smrg	      case $dir in
3600ae545d91Smrg	        /*) ;;
3601ae545d91Smrg	        *) func_error "Directory '$dir' is not an absolute path"
3602ae545d91Smrg	           exit $EXIT_FAILURE ;;
3603ae545d91Smrg	      esac
3604ae545d91Smrg	      # Ensure no trailing slashes
3605ae545d91Smrg	      func_stripname '' '/' "$dir"
3606ae545d91Smrg	      dir=$func_stripname_result
3607ae545d91Smrg	      if test -d "$dir"; then
3608ae545d91Smrg	        if test -n "$preferred_search_directories"; then
3609ae545d91Smrg	          preferred_search_directories="$preferred_search_directories $dir"
3610ae545d91Smrg	        else
3611ae545d91Smrg	          preferred_search_directories=$dir
3612ae545d91Smrg	        fi
3613ae545d91Smrg	      else
3614ae545d91Smrg	        func_error "Directory '$dir' does not exist"
3615ae545d91Smrg	        exit $EXIT_FAILURE
3616ae545d91Smrg	      fi
3617ae545d91Smrg	    done
3618ae545d91Smrg
3619ae545d91Smrg	    PATH="$PATH:/sbin" ldconfig -U $save_search_directories
3620ae545d91Smrg	    PATH="$PATH:/sbin" ldconfig -m $preferred_search_directories $save_search_directories
3621ae545d91Smrg	    get_search_directories=`PATH="$PATH:/sbin" ldconfig -r | $GREP "search directories" | $SED "s#.*search directories:\ ##g"`
3622ae545d91Smrg	    func_convert_delimited_path "$get_search_directories" ':' '\ '
3623ae545d91Smrg	    reordered_search_directories=$converted_path
3624ae545d91Smrg
3625ae545d91Smrg	    $ECHO "Original: $save_search_directories"
3626ae545d91Smrg	    $ECHO "Reordered: $reordered_search_directories"
3627ae545d91Smrg	    exit $EXIT_SUCCESS
3628ae545d91Smrg	  ;;
3629ae545d91Smrg	  *)
3630ae545d91Smrg	    func_error "--reorder-cache is not supported for host_os=$host_os."
3631ae545d91Smrg	    exit $EXIT_FAILURE
3632ae545d91Smrg	  ;;
3633ae545d91Smrg	esac
3634ae545d91Smrg}
3635ae545d91Smrg# end func_reorder_shared_lib_cache
3636ae545d91Smrg
3637ae545d91Smrg
3638e19dfac4Smrg# func_mode_compile arg...
3639e19dfac4Smrgfunc_mode_compile ()
3640e19dfac4Smrg{
36417cea3689Smrg    $debug_cmd
36427cea3689Smrg
3643e19dfac4Smrg    # Get the compilation command and the source file.
3644e19dfac4Smrg    base_compile=
36457cea3689Smrg    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
3646e19dfac4Smrg    suppress_opt=yes
3647e19dfac4Smrg    suppress_output=
3648e19dfac4Smrg    arg_mode=normal
3649e19dfac4Smrg    libobj=
3650e19dfac4Smrg    later=
3651e19dfac4Smrg    pie_flag=
3652e19dfac4Smrg
3653e19dfac4Smrg    for arg
3654e19dfac4Smrg    do
3655e19dfac4Smrg      case $arg_mode in
3656e19dfac4Smrg      arg  )
3657e19dfac4Smrg	# do not "continue".  Instead, add this to base_compile
36587cea3689Smrg	lastarg=$arg
3659e19dfac4Smrg	arg_mode=normal
3660e19dfac4Smrg	;;
3661e19dfac4Smrg
3662e19dfac4Smrg      target )
36637cea3689Smrg	libobj=$arg
3664e19dfac4Smrg	arg_mode=normal
3665e19dfac4Smrg	continue
3666e19dfac4Smrg	;;
3667e19dfac4Smrg
3668e19dfac4Smrg      normal )
3669e19dfac4Smrg	# Accept any command-line options.
3670e19dfac4Smrg	case $arg in
3671e19dfac4Smrg	-o)
3672e19dfac4Smrg	  test -n "$libobj" && \
36737cea3689Smrg	    func_fatal_error "you cannot specify '-o' more than once"
3674e19dfac4Smrg	  arg_mode=target
3675e19dfac4Smrg	  continue
3676e19dfac4Smrg	  ;;
3677e19dfac4Smrg
3678e19dfac4Smrg	-pie | -fpie | -fPIE)
3679313a12fdSmrg          func_append pie_flag " $arg"
3680e19dfac4Smrg	  continue
3681e19dfac4Smrg	  ;;
3682e19dfac4Smrg
3683e19dfac4Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
3684313a12fdSmrg	  func_append later " $arg"
3685e19dfac4Smrg	  continue
3686e19dfac4Smrg	  ;;
3687e19dfac4Smrg
3688e19dfac4Smrg	-no-suppress)
3689e19dfac4Smrg	  suppress_opt=no
3690e19dfac4Smrg	  continue
3691e19dfac4Smrg	  ;;
3692e19dfac4Smrg
3693e19dfac4Smrg	-Xcompiler)
3694e19dfac4Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
3695e19dfac4Smrg	  continue      #  The current "srcfile" will either be retained or
3696e19dfac4Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
3697e19dfac4Smrg
3698e19dfac4Smrg	-Wc,*)
3699e19dfac4Smrg	  func_stripname '-Wc,' '' "$arg"
3700e19dfac4Smrg	  args=$func_stripname_result
3701e19dfac4Smrg	  lastarg=
37027cea3689Smrg	  save_ifs=$IFS; IFS=,
3703e19dfac4Smrg	  for arg in $args; do
37047cea3689Smrg	    IFS=$save_ifs
3705313a12fdSmrg	    func_append_quoted lastarg "$arg"
370627702724Smrg	  done
37077cea3689Smrg	  IFS=$save_ifs
3708e19dfac4Smrg	  func_stripname ' ' '' "$lastarg"
3709e19dfac4Smrg	  lastarg=$func_stripname_result
371027702724Smrg
371127702724Smrg	  # Add the arguments to base_compile.
3712313a12fdSmrg	  func_append base_compile " $lastarg"
371327702724Smrg	  continue
371427702724Smrg	  ;;
371527702724Smrg
3716e19dfac4Smrg	*)
371727702724Smrg	  # Accept the current argument as the source file.
371827702724Smrg	  # The previous "srcfile" becomes the current argument.
371927702724Smrg	  #
37207cea3689Smrg	  lastarg=$srcfile
37217cea3689Smrg	  srcfile=$arg
372227702724Smrg	  ;;
372327702724Smrg	esac  #  case $arg
372427702724Smrg	;;
372527702724Smrg      esac    #  case $arg_mode
372627702724Smrg
372727702724Smrg      # Aesthetically quote the previous argument.
3728313a12fdSmrg      func_append_quoted base_compile "$lastarg"
372927702724Smrg    done # for arg
373027702724Smrg
373127702724Smrg    case $arg_mode in
373227702724Smrg    arg)
3733e19dfac4Smrg      func_fatal_error "you must specify an argument for -Xcompile"
373427702724Smrg      ;;
373527702724Smrg    target)
37367cea3689Smrg      func_fatal_error "you must specify a target with '-o'"
373727702724Smrg      ;;
373827702724Smrg    *)
373927702724Smrg      # Get the name of the library object.
3740e19dfac4Smrg      test -z "$libobj" && {
3741e19dfac4Smrg	func_basename "$srcfile"
37427cea3689Smrg	libobj=$func_basename_result
3743e19dfac4Smrg      }
374427702724Smrg      ;;
374527702724Smrg    esac
374627702724Smrg
374727702724Smrg    # Recognize several different file suffixes.
374827702724Smrg    # If the user specifies -o file.o, it is replaced with file.lo
374927702724Smrg    case $libobj in
3750e19dfac4Smrg    *.[cCFSifmso] | \
3751e19dfac4Smrg    *.ada | *.adb | *.ads | *.asm | \
3752e19dfac4Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
3753313a12fdSmrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
3754e19dfac4Smrg      func_xform "$libobj"
3755e19dfac4Smrg      libobj=$func_xform_result
3756e19dfac4Smrg      ;;
375727702724Smrg    esac
375827702724Smrg
375927702724Smrg    case $libobj in
3760e19dfac4Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
376127702724Smrg    *)
37627cea3689Smrg      func_fatal_error "cannot determine name of library object from '$libobj'"
376327702724Smrg      ;;
376427702724Smrg    esac
376527702724Smrg
376627702724Smrg    func_infer_tag $base_compile
376727702724Smrg
376827702724Smrg    for arg in $later; do
376927702724Smrg      case $arg in
3770e19dfac4Smrg      -shared)
37717cea3689Smrg	test yes = "$build_libtool_libs" \
37727cea3689Smrg	  || func_fatal_configuration "cannot build a shared library"
3773e19dfac4Smrg	build_old_libs=no
3774e19dfac4Smrg	continue
3775e19dfac4Smrg	;;
3776e19dfac4Smrg
377727702724Smrg      -static)
3778e19dfac4Smrg	build_libtool_libs=no
377927702724Smrg	build_old_libs=yes
378027702724Smrg	continue
378127702724Smrg	;;
378227702724Smrg
378327702724Smrg      -prefer-pic)
378427702724Smrg	pic_mode=yes
378527702724Smrg	continue
378627702724Smrg	;;
378727702724Smrg
378827702724Smrg      -prefer-non-pic)
378927702724Smrg	pic_mode=no
379027702724Smrg	continue
379127702724Smrg	;;
379227702724Smrg      esac
379327702724Smrg    done
379427702724Smrg
379595b7a5c8Smrg    func_quote_arg pretty "$libobj"
379695b7a5c8Smrg    test "X$libobj" != "X$func_quote_arg_result" \
3797e19dfac4Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
37987cea3689Smrg      && func_warning "libobj name '$libobj' may not contain shell special characters."
3799e19dfac4Smrg    func_dirname_and_basename "$obj" "/" ""
38007cea3689Smrg    objname=$func_basename_result
38017cea3689Smrg    xdir=$func_dirname_result
38027cea3689Smrg    lobj=$xdir$objdir/$objname
380327702724Smrg
3804e19dfac4Smrg    test -z "$base_compile" && \
3805e19dfac4Smrg      func_fatal_help "you must specify a compilation command"
380627702724Smrg
380727702724Smrg    # Delete any leftover library objects.
38087cea3689Smrg    if test yes = "$build_old_libs"; then
380927702724Smrg      removelist="$obj $lobj $libobj ${libobj}T"
381027702724Smrg    else
381127702724Smrg      removelist="$lobj $libobj ${libobj}T"
381227702724Smrg    fi
381327702724Smrg
381427702724Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
381527702724Smrg    case $host_os in
3816ae545d91Smrg    cygwin* | mingw* | windows* | pw32* | os2* | cegcc*)
381727702724Smrg      pic_mode=default
381827702724Smrg      ;;
381927702724Smrg    esac
38207cea3689Smrg    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
382127702724Smrg      # non-PIC code in shared libraries is not supported
382227702724Smrg      pic_mode=default
382327702724Smrg    fi
382427702724Smrg
382527702724Smrg    # Calculate the filename of the output object if compiler does
382627702724Smrg    # not support -o with -c
38277cea3689Smrg    if test no = "$compiler_c_o"; then
38287cea3689Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
38297cea3689Smrg      lockfile=$output_obj.lock
383027702724Smrg    else
383127702724Smrg      output_obj=
383227702724Smrg      need_locks=no
383327702724Smrg      lockfile=
383427702724Smrg    fi
383527702724Smrg
383627702724Smrg    # Lock this critical section if it is needed
383727702724Smrg    # We use this script file to make the link, it avoids creating a new file
38387cea3689Smrg    if test yes = "$need_locks"; then
3839e19dfac4Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3840e19dfac4Smrg	func_echo "Waiting for $lockfile to be removed"
384127702724Smrg	sleep 2
384227702724Smrg      done
38437cea3689Smrg    elif test warn = "$need_locks"; then
384427702724Smrg      if test -f "$lockfile"; then
3845e19dfac4Smrg	$ECHO "\
384627702724Smrg*** ERROR, $lockfile exists and contains:
384727702724Smrg`cat $lockfile 2>/dev/null`
384827702724Smrg
384927702724SmrgThis indicates that another process is trying to use the same
385027702724Smrgtemporary object file, and libtool could not work around it because
38517cea3689Smrgyour compiler does not support '-c' and '-o' together.  If you
385227702724Smrgrepeat this compilation, it may succeed, by chance, but you had better
385327702724Smrgavoid parallel builds (make -j) in this platform, or get a better
385427702724Smrgcompiler."
385527702724Smrg
3856e19dfac4Smrg	$opt_dry_run || $RM $removelist
385727702724Smrg	exit $EXIT_FAILURE
385827702724Smrg      fi
3859313a12fdSmrg      func_append removelist " $output_obj"
3860e19dfac4Smrg      $ECHO "$srcfile" > "$lockfile"
386127702724Smrg    fi
386227702724Smrg
3863e19dfac4Smrg    $opt_dry_run || $RM $removelist
3864313a12fdSmrg    func_append removelist " $lockfile"
3865e19dfac4Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
3866e19dfac4Smrg
3867313a12fdSmrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
3868313a12fdSmrg    srcfile=$func_to_tool_file_result
386995b7a5c8Smrg    func_quote_arg pretty "$srcfile"
387095b7a5c8Smrg    qsrcfile=$func_quote_arg_result
387127702724Smrg
387227702724Smrg    # Only build a PIC object if we are building libtool libraries.
38737cea3689Smrg    if test yes = "$build_libtool_libs"; then
387427702724Smrg      # Without this assignment, base_compile gets emptied.
387527702724Smrg      fbsd_hideous_sh_bug=$base_compile
387627702724Smrg
38777cea3689Smrg      if test no != "$pic_mode"; then
387827702724Smrg	command="$base_compile $qsrcfile $pic_flag"
387927702724Smrg      else
388027702724Smrg	# Don't build PIC code
388127702724Smrg	command="$base_compile $qsrcfile"
388227702724Smrg      fi
388327702724Smrg
3884e19dfac4Smrg      func_mkdir_p "$xdir$objdir"
388527702724Smrg
388627702724Smrg      if test -z "$output_obj"; then
388727702724Smrg	# Place PIC objects in $objdir
3888313a12fdSmrg	func_append command " -o $lobj"
388927702724Smrg      fi
389027702724Smrg
3891e19dfac4Smrg      func_show_eval_locale "$command"	\
3892e19dfac4Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
389327702724Smrg
38947cea3689Smrg      if test warn = "$need_locks" &&
389527702724Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3896e19dfac4Smrg	$ECHO "\
389727702724Smrg*** ERROR, $lockfile contains:
389827702724Smrg`cat $lockfile 2>/dev/null`
389927702724Smrg
390027702724Smrgbut it should contain:
390127702724Smrg$srcfile
390227702724Smrg
390327702724SmrgThis indicates that another process is trying to use the same
390427702724Smrgtemporary object file, and libtool could not work around it because
39057cea3689Smrgyour compiler does not support '-c' and '-o' together.  If you
390627702724Smrgrepeat this compilation, it may succeed, by chance, but you had better
390727702724Smrgavoid parallel builds (make -j) in this platform, or get a better
390827702724Smrgcompiler."
390927702724Smrg
3910e19dfac4Smrg	$opt_dry_run || $RM $removelist
391127702724Smrg	exit $EXIT_FAILURE
391227702724Smrg      fi
391327702724Smrg
391427702724Smrg      # Just move the object if needed, then go on to compile the next one
391527702724Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
3916e19dfac4Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
3917e19dfac4Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
391827702724Smrg      fi
391927702724Smrg
392027702724Smrg      # Allow error messages only from the first compilation.
39217cea3689Smrg      if test yes = "$suppress_opt"; then
3922e19dfac4Smrg	suppress_output=' >/dev/null 2>&1'
392327702724Smrg      fi
392427702724Smrg    fi
392527702724Smrg
392627702724Smrg    # Only build a position-dependent object if we build old libraries.
39277cea3689Smrg    if test yes = "$build_old_libs"; then
39287cea3689Smrg      if test yes != "$pic_mode"; then
392927702724Smrg	# Don't build PIC code
3930e19dfac4Smrg	command="$base_compile $qsrcfile$pie_flag"
393127702724Smrg      else
393227702724Smrg	command="$base_compile $qsrcfile $pic_flag"
393327702724Smrg      fi
39347cea3689Smrg      if test yes = "$compiler_c_o"; then
3935313a12fdSmrg	func_append command " -o $obj"
393627702724Smrg      fi
393727702724Smrg
393827702724Smrg      # Suppress compiler output if we already did a PIC compilation.
3939313a12fdSmrg      func_append command "$suppress_output"
3940e19dfac4Smrg      func_show_eval_locale "$command" \
3941e19dfac4Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
394227702724Smrg
39437cea3689Smrg      if test warn = "$need_locks" &&
394427702724Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3945e19dfac4Smrg	$ECHO "\
394627702724Smrg*** ERROR, $lockfile contains:
394727702724Smrg`cat $lockfile 2>/dev/null`
394827702724Smrg
394927702724Smrgbut it should contain:
395027702724Smrg$srcfile
395127702724Smrg
395227702724SmrgThis indicates that another process is trying to use the same
395327702724Smrgtemporary object file, and libtool could not work around it because
39547cea3689Smrgyour compiler does not support '-c' and '-o' together.  If you
395527702724Smrgrepeat this compilation, it may succeed, by chance, but you had better
395627702724Smrgavoid parallel builds (make -j) in this platform, or get a better
395727702724Smrgcompiler."
395827702724Smrg
3959e19dfac4Smrg	$opt_dry_run || $RM $removelist
396027702724Smrg	exit $EXIT_FAILURE
396127702724Smrg      fi
396227702724Smrg
396327702724Smrg      # Just move the object if needed
396427702724Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
3965e19dfac4Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
3966e19dfac4Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
396727702724Smrg      fi
396827702724Smrg    fi
396927702724Smrg
3970e19dfac4Smrg    $opt_dry_run || {
3971e19dfac4Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
397227702724Smrg
3973e19dfac4Smrg      # Unlock the critical section if it was locked
39747cea3689Smrg      if test no != "$need_locks"; then
3975e19dfac4Smrg	removelist=$lockfile
3976e19dfac4Smrg        $RM "$lockfile"
3977e19dfac4Smrg      fi
3978e19dfac4Smrg    }
397927702724Smrg
398027702724Smrg    exit $EXIT_SUCCESS
3981e19dfac4Smrg}
398227702724Smrg
3983e19dfac4Smrg$opt_help || {
39847cea3689Smrg  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
3985e19dfac4Smrg}
398627702724Smrg
3987e19dfac4Smrgfunc_mode_help ()
3988e19dfac4Smrg{
3989e19dfac4Smrg    # We need to display help for each of the modes.
3990313a12fdSmrg    case $opt_mode in
3991e19dfac4Smrg      "")
3992e19dfac4Smrg        # Generic help is extracted from the usage comments
3993e19dfac4Smrg        # at the start of this file.
3994e19dfac4Smrg        func_help
3995e19dfac4Smrg        ;;
399627702724Smrg
3997e19dfac4Smrg      clean)
3998e19dfac4Smrg        $ECHO \
3999e19dfac4Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
400027702724Smrg
4001e19dfac4SmrgRemove files from the build directory.
400227702724Smrg
4003e19dfac4SmrgRM is the name of the program to use to delete files associated with each FILE
40047cea3689Smrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
4005e19dfac4Smrgto RM.
400627702724Smrg
4007e19dfac4SmrgIf FILE is a libtool library, object or program, all the files associated
4008e19dfac4Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
4009e19dfac4Smrg        ;;
401027702724Smrg
4011e19dfac4Smrg      compile)
4012e19dfac4Smrg      $ECHO \
4013e19dfac4Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
401427702724Smrg
4015e19dfac4SmrgCompile a source file into a libtool library object.
401627702724Smrg
4017e19dfac4SmrgThis mode accepts the following additional options:
401827702724Smrg
4019e19dfac4Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
4020e19dfac4Smrg  -no-suppress      do not suppress compiler output for multiple passes
4021313a12fdSmrg  -prefer-pic       try to build PIC objects only
4022313a12fdSmrg  -prefer-non-pic   try to build non-PIC objects only
40237cea3689Smrg  -shared           do not build a '.o' file suitable for static linking
40247cea3689Smrg  -static           only build a '.o' file suitable for static linking
402595b7a5c8Smrg  -Wc,FLAG
402695b7a5c8Smrg  -Xcompiler FLAG   pass FLAG directly to the compiler
402727702724Smrg
40287cea3689SmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file
4029e19dfac4Smrgfrom the given SOURCEFILE.
403027702724Smrg
4031e19dfac4SmrgThe output file name is determined by removing the directory component from
40327cea3689SmrgSOURCEFILE, then substituting the C source code suffix '.c' with the
40337cea3689Smrglibrary object suffix, '.lo'."
4034e19dfac4Smrg        ;;
403527702724Smrg
4036e19dfac4Smrg      execute)
4037e19dfac4Smrg        $ECHO \
4038e19dfac4Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
403927702724Smrg
4040e19dfac4SmrgAutomatically set library path, then run a program.
404127702724Smrg
4042e19dfac4SmrgThis mode accepts the following additional options:
404327702724Smrg
4044e19dfac4Smrg  -dlopen FILE      add the directory containing FILE to the library path
404527702724Smrg
40467cea3689SmrgThis mode sets the library path environment variable according to '-dlopen'
4047e19dfac4Smrgflags.
404827702724Smrg
4049e19dfac4SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
4050e19dfac4Smrginto their corresponding uninstalled binary, and any of their required library
4051e19dfac4Smrgdirectories are added to the library path.
405227702724Smrg
4053e19dfac4SmrgThen, COMMAND is executed, with ARGS as arguments."
4054e19dfac4Smrg        ;;
405527702724Smrg
4056e19dfac4Smrg      finish)
4057e19dfac4Smrg        $ECHO \
4058e19dfac4Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
405927702724Smrg
4060e19dfac4SmrgComplete the installation of libtool libraries.
406127702724Smrg
4062e19dfac4SmrgEach LIBDIR is a directory that contains libtool libraries.
406327702724Smrg
4064e19dfac4SmrgThe commands that this mode executes may require superuser privileges.  Use
40657cea3689Smrgthe '--dry-run' option if you just want to see what would be executed."
4066e19dfac4Smrg        ;;
406727702724Smrg
4068e19dfac4Smrg      install)
4069e19dfac4Smrg        $ECHO \
4070e19dfac4Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
407127702724Smrg
4072e19dfac4SmrgInstall executables or libraries.
407327702724Smrg
4074e19dfac4SmrgINSTALL-COMMAND is the installation command.  The first component should be
40757cea3689Smrgeither the 'install' or 'cp' program.
407627702724Smrg
4077e19dfac4SmrgThe following components of INSTALL-COMMAND are treated specially:
407827702724Smrg
4079313a12fdSmrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
408027702724Smrg
4081e19dfac4SmrgThe rest of the components are interpreted as arguments to that command (only
4082e19dfac4SmrgBSD-compatible install options are recognized)."
4083e19dfac4Smrg        ;;
408427702724Smrg
4085e19dfac4Smrg      link)
4086e19dfac4Smrg        $ECHO \
4087e19dfac4Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
408827702724Smrg
4089e19dfac4SmrgLink object files or libraries together to form another library, or to
4090e19dfac4Smrgcreate an executable program.
409127702724Smrg
4092e19dfac4SmrgLINK-COMMAND is a command using the C compiler that you would use to create
4093e19dfac4Smrga program from several object files.
409427702724Smrg
4095e19dfac4SmrgThe following components of LINK-COMMAND are treated specially:
409627702724Smrg
4097e19dfac4Smrg  -all-static       do not do any dynamic linking at all
4098e19dfac4Smrg  -avoid-version    do not add a version suffix if possible
4099313a12fdSmrg  -bindir BINDIR    specify path to binaries directory (for systems where
4100313a12fdSmrg                    libraries must be found in the PATH setting at runtime)
41017cea3689Smrg  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
4102e19dfac4Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
4103e19dfac4Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
4104e19dfac4Smrg  -export-symbols SYMFILE
4105e19dfac4Smrg                    try to export only the symbols listed in SYMFILE
4106e19dfac4Smrg  -export-symbols-regex REGEX
4107e19dfac4Smrg                    try to export only the symbols matching REGEX
4108e19dfac4Smrg  -LLIBDIR          search LIBDIR for required installed libraries
4109e19dfac4Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
4110e19dfac4Smrg  -module           build a library that can dlopened
4111e19dfac4Smrg  -no-fast-install  disable the fast-install mode
4112e19dfac4Smrg  -no-install       link a not-installable executable
4113e19dfac4Smrg  -no-undefined     declare that a library does not refer to external symbols
4114e19dfac4Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
41157cea3689Smrg  -objectlist FILE  use a list of object files found in FILE to specify objects
41167cea3689Smrg  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
4117e19dfac4Smrg  -precious-files-regex REGEX
4118e19dfac4Smrg                    don't remove output files matching REGEX
4119e19dfac4Smrg  -release RELEASE  specify package release information
4120e19dfac4Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
4121e19dfac4Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
4122e19dfac4Smrg  -shared           only do dynamic linking of libtool libraries
4123e19dfac4Smrg  -shrext SUFFIX    override the standard shared library file extension
4124e19dfac4Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
4125e19dfac4Smrg  -static-libtool-libs
4126e19dfac4Smrg                    do not do any dynamic linking of libtool libraries
4127e19dfac4Smrg  -version-info CURRENT[:REVISION[:AGE]]
4128e19dfac4Smrg                    specify library version info [each variable defaults to 0]
4129e19dfac4Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
4130313a12fdSmrg  -Wc,FLAG
4131313a12fdSmrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
413295b7a5c8Smrg  -Wa,FLAG
413395b7a5c8Smrg  -Xassembler FLAG  pass linker-specific FLAG directly to the assembler
4134313a12fdSmrg  -Wl,FLAG
4135313a12fdSmrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
4136313a12fdSmrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
413727702724Smrg
41387cea3689SmrgAll other options (arguments beginning with '-') are ignored.
413927702724Smrg
41407cea3689SmrgEvery other argument is treated as a filename.  Files ending in '.la' are
4141e19dfac4Smrgtreated as uninstalled libtool libraries, other files are standard or library
4142e19dfac4Smrgobject files.
414327702724Smrg
41447cea3689SmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created,
41457cea3689Smrgonly library objects ('.lo' files) may be specified, and '-rpath' is
4146e19dfac4Smrgrequired, except when creating a convenience library.
414727702724Smrg
41487cea3689SmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
41497cea3689Smrgusing 'ar' and 'ranlib', or on Windows using 'lib'.
415027702724Smrg
41517cea3689SmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
4152e19dfac4Smrgis created, otherwise an executable program is created."
415327702724Smrg        ;;
415427702724Smrg
4155e19dfac4Smrg      uninstall)
4156e19dfac4Smrg        $ECHO \
4157e19dfac4Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
415827702724Smrg
4159e19dfac4SmrgRemove libraries from an installation directory.
416027702724Smrg
4161e19dfac4SmrgRM is the name of the program to use to delete files associated with each FILE
41627cea3689Smrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
4163e19dfac4Smrgto RM.
416427702724Smrg
4165e19dfac4SmrgIf FILE is a libtool library, all the files associated with it are deleted.
4166e19dfac4SmrgOtherwise, only FILE itself is deleted using RM."
4167e19dfac4Smrg        ;;
416827702724Smrg
4169e19dfac4Smrg      *)
41707cea3689Smrg        func_fatal_help "invalid operation mode '$opt_mode'"
4171e19dfac4Smrg        ;;
4172e19dfac4Smrg    esac
417327702724Smrg
4174313a12fdSmrg    echo
41757cea3689Smrg    $ECHO "Try '$progname --help' for more information about other modes."
4176e19dfac4Smrg}
417727702724Smrg
4178313a12fdSmrg# Now that we've collected a possible --mode arg, show help if necessary
4179313a12fdSmrgif $opt_help; then
41807cea3689Smrg  if test : = "$opt_help"; then
4181313a12fdSmrg    func_mode_help
4182313a12fdSmrg  else
4183313a12fdSmrg    {
4184313a12fdSmrg      func_help noexit
4185313a12fdSmrg      for opt_mode in compile link execute install finish uninstall clean; do
4186313a12fdSmrg	func_mode_help
4187313a12fdSmrg      done
41887cea3689Smrg    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
4189313a12fdSmrg    {
4190313a12fdSmrg      func_help noexit
4191313a12fdSmrg      for opt_mode in compile link execute install finish uninstall clean; do
4192313a12fdSmrg	echo
4193313a12fdSmrg	func_mode_help
4194313a12fdSmrg      done
4195313a12fdSmrg    } |
41967cea3689Smrg    $SED '1d
4197313a12fdSmrg      /^When reporting/,/^Report/{
4198313a12fdSmrg	H
4199313a12fdSmrg	d
4200313a12fdSmrg      }
4201313a12fdSmrg      $x
4202313a12fdSmrg      /information about other modes/d
4203313a12fdSmrg      /more detailed .*MODE/d
4204313a12fdSmrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
4205313a12fdSmrg  fi
4206313a12fdSmrg  exit $?
4207313a12fdSmrgfi
420827702724Smrg
420927702724Smrg
4210ae545d91Smrg# If option '--reorder-cache', reorder the shared library cache and exit.
4211ae545d91Smrgif $opt_reorder_cache; then
4212ae545d91Smrg    func_reorder_shared_lib_cache $shared_lib_dirs
4213ae545d91Smrgfi
4214ae545d91Smrg
4215ae545d91Smrg
4216e19dfac4Smrg# func_mode_execute arg...
4217e19dfac4Smrgfunc_mode_execute ()
4218e19dfac4Smrg{
42197cea3689Smrg    $debug_cmd
42207cea3689Smrg
4221e19dfac4Smrg    # The first argument is the command name.
42227cea3689Smrg    cmd=$nonopt
4223e19dfac4Smrg    test -z "$cmd" && \
4224e19dfac4Smrg      func_fatal_help "you must specify a COMMAND"
422527702724Smrg
4226e19dfac4Smrg    # Handle -dlopen flags immediately.
4227313a12fdSmrg    for file in $opt_dlopen; do
4228e19dfac4Smrg      test -f "$file" \
42297cea3689Smrg	|| func_fatal_help "'$file' is not a file"
423027702724Smrg
4231e19dfac4Smrg      dir=
4232e19dfac4Smrg      case $file in
4233e19dfac4Smrg      *.la)
4234313a12fdSmrg	func_resolve_sysroot "$file"
4235313a12fdSmrg	file=$func_resolve_sysroot_result
4236313a12fdSmrg
4237e19dfac4Smrg	# Check to see that this really is a libtool archive.
4238e19dfac4Smrg	func_lalib_unsafe_p "$file" \
42397cea3689Smrg	  || func_fatal_help "'$lib' is not a valid libtool archive"
424027702724Smrg
4241e19dfac4Smrg	# Read the libtool library.
4242e19dfac4Smrg	dlname=
4243e19dfac4Smrg	library_names=
4244e19dfac4Smrg	func_source "$file"
424527702724Smrg
4246e19dfac4Smrg	# Skip this library if it cannot be dlopened.
4247e19dfac4Smrg	if test -z "$dlname"; then
4248e19dfac4Smrg	  # Warn if it was a shared library.
4249e19dfac4Smrg	  test -n "$library_names" && \
42507cea3689Smrg	    func_warning "'$file' was not linked with '-export-dynamic'"
4251e19dfac4Smrg	  continue
4252e19dfac4Smrg	fi
425327702724Smrg
4254e19dfac4Smrg	func_dirname "$file" "" "."
42557cea3689Smrg	dir=$func_dirname_result
425627702724Smrg
4257e19dfac4Smrg	if test -f "$dir/$objdir/$dlname"; then
4258313a12fdSmrg	  func_append dir "/$objdir"
4259e19dfac4Smrg	else
4260e19dfac4Smrg	  if test ! -f "$dir/$dlname"; then
42617cea3689Smrg	    func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
4262e19dfac4Smrg	  fi
4263e19dfac4Smrg	fi
426427702724Smrg	;;
426527702724Smrg
4266e19dfac4Smrg      *.lo)
4267e19dfac4Smrg	# Just add the directory containing the .lo file.
4268e19dfac4Smrg	func_dirname "$file" "" "."
42697cea3689Smrg	dir=$func_dirname_result
427027702724Smrg	;;
427127702724Smrg
4272e19dfac4Smrg      *)
42737cea3689Smrg	func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
427427702724Smrg	continue
427527702724Smrg	;;
4276e19dfac4Smrg      esac
427727702724Smrg
4278e19dfac4Smrg      # Get the absolute pathname.
4279e19dfac4Smrg      absdir=`cd "$dir" && pwd`
42807cea3689Smrg      test -n "$absdir" && dir=$absdir
428127702724Smrg
4282e19dfac4Smrg      # Now add the directory to shlibpath_var.
4283e19dfac4Smrg      if eval "test -z \"\$$shlibpath_var\""; then
4284e19dfac4Smrg	eval "$shlibpath_var=\"\$dir\""
4285e19dfac4Smrg      else
4286e19dfac4Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
4287e19dfac4Smrg      fi
4288e19dfac4Smrg    done
428927702724Smrg
4290e19dfac4Smrg    # This variable tells wrapper scripts just to set shlibpath_var
4291e19dfac4Smrg    # rather than running their programs.
42927cea3689Smrg    libtool_execute_magic=$magic
429327702724Smrg
4294e19dfac4Smrg    # Check if any of the arguments is a wrapper script.
4295e19dfac4Smrg    args=
4296e19dfac4Smrg    for file
4297e19dfac4Smrg    do
4298e19dfac4Smrg      case $file in
4299313a12fdSmrg      -* | *.la | *.lo ) ;;
4300e19dfac4Smrg      *)
4301e19dfac4Smrg	# Do a test to see if this is really a libtool program.
4302e19dfac4Smrg	if func_ltwrapper_script_p "$file"; then
4303e19dfac4Smrg	  func_source "$file"
4304e19dfac4Smrg	  # Transform arg to wrapped name.
43057cea3689Smrg	  file=$progdir/$program
4306e19dfac4Smrg	elif func_ltwrapper_executable_p "$file"; then
4307e19dfac4Smrg	  func_ltwrapper_scriptname "$file"
4308e19dfac4Smrg	  func_source "$func_ltwrapper_scriptname_result"
4309e19dfac4Smrg	  # Transform arg to wrapped name.
43107cea3689Smrg	  file=$progdir/$program
4311e19dfac4Smrg	fi
4312e19dfac4Smrg	;;
4313e19dfac4Smrg      esac
4314e19dfac4Smrg      # Quote arguments (to preserve shell metacharacters).
4315313a12fdSmrg      func_append_quoted args "$file"
4316e19dfac4Smrg    done
431727702724Smrg
43187cea3689Smrg    if $opt_dry_run; then
43197cea3689Smrg      # Display what would be done.
43207cea3689Smrg      if test -n "$shlibpath_var"; then
43217cea3689Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
43227cea3689Smrg	echo "export $shlibpath_var"
43237cea3689Smrg      fi
43247cea3689Smrg      $ECHO "$cmd$args"
43257cea3689Smrg      exit $EXIT_SUCCESS
43267cea3689Smrg    else
4327e19dfac4Smrg      if test -n "$shlibpath_var"; then
4328e19dfac4Smrg	# Export the shlibpath_var.
4329e19dfac4Smrg	eval "export $shlibpath_var"
4330e19dfac4Smrg      fi
433127702724Smrg
4332e19dfac4Smrg      # Restore saved environment variables
4333e19dfac4Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
4334e19dfac4Smrg      do
4335e19dfac4Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
4336e19dfac4Smrg                $lt_var=\$save_$lt_var; export $lt_var
4337e19dfac4Smrg	      else
4338e19dfac4Smrg		$lt_unset $lt_var
4339e19dfac4Smrg	      fi"
4340e19dfac4Smrg      done
434127702724Smrg
4342e19dfac4Smrg      # Now prepare to actually exec the command.
43437cea3689Smrg      exec_cmd=\$cmd$args
4344e19dfac4Smrg    fi
4345e19dfac4Smrg}
434627702724Smrg
43477cea3689Smrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"}
434827702724Smrg
434927702724Smrg
4350e19dfac4Smrg# func_mode_finish arg...
4351e19dfac4Smrgfunc_mode_finish ()
4352e19dfac4Smrg{
43537cea3689Smrg    $debug_cmd
43547cea3689Smrg
4355313a12fdSmrg    libs=
4356313a12fdSmrg    libdirs=
4357e19dfac4Smrg    admincmds=
435827702724Smrg
4359313a12fdSmrg    for opt in "$nonopt" ${1+"$@"}
4360313a12fdSmrg    do
4361313a12fdSmrg      if test -d "$opt"; then
4362313a12fdSmrg	func_append libdirs " $opt"
4363313a12fdSmrg
4364313a12fdSmrg      elif test -f "$opt"; then
4365313a12fdSmrg	if func_lalib_unsafe_p "$opt"; then
4366313a12fdSmrg	  func_append libs " $opt"
4367313a12fdSmrg	else
43687cea3689Smrg	  func_warning "'$opt' is not a valid libtool archive"
4369313a12fdSmrg	fi
4370313a12fdSmrg
4371313a12fdSmrg      else
43727cea3689Smrg	func_fatal_error "invalid argument '$opt'"
4373313a12fdSmrg      fi
4374313a12fdSmrg    done
4375313a12fdSmrg
4376313a12fdSmrg    if test -n "$libs"; then
4377313a12fdSmrg      if test -n "$lt_sysroot"; then
4378313a12fdSmrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
4379313a12fdSmrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
4380313a12fdSmrg      else
4381313a12fdSmrg        sysroot_cmd=
4382313a12fdSmrg      fi
4383313a12fdSmrg
4384313a12fdSmrg      # Remove sysroot references
4385313a12fdSmrg      if $opt_dry_run; then
4386313a12fdSmrg        for lib in $libs; do
43877cea3689Smrg          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
4388313a12fdSmrg        done
4389313a12fdSmrg      else
4390313a12fdSmrg        tmpdir=`func_mktempdir`
4391313a12fdSmrg        for lib in $libs; do
43927cea3689Smrg	  $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
4393313a12fdSmrg	    > $tmpdir/tmp-la
4394313a12fdSmrg	  mv -f $tmpdir/tmp-la $lib
4395313a12fdSmrg	done
4396313a12fdSmrg        ${RM}r "$tmpdir"
4397313a12fdSmrg      fi
4398313a12fdSmrg    fi
439927702724Smrg
4400ae545d91Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs" && $opt_finishing; then
4401e19dfac4Smrg      for libdir in $libdirs; do
4402e19dfac4Smrg	if test -n "$finish_cmds"; then
4403e19dfac4Smrg	  # Do each command in the finish commands.
4404e19dfac4Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
4405e19dfac4Smrg'"$cmd"'"'
4406e19dfac4Smrg	fi
4407e19dfac4Smrg	if test -n "$finish_eval"; then
4408e19dfac4Smrg	  # Do the single finish_eval.
4409e19dfac4Smrg	  eval cmds=\"$finish_eval\"
4410313a12fdSmrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
4411e19dfac4Smrg       $cmds"
4412e19dfac4Smrg	fi
4413e19dfac4Smrg      done
4414e19dfac4Smrg    fi
441527702724Smrg
4416e19dfac4Smrg    # Exit here if they wanted silent mode.
44177cea3689Smrg    $opt_quiet && exit $EXIT_SUCCESS
441827702724Smrg
4419313a12fdSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4420313a12fdSmrg      echo "----------------------------------------------------------------------"
4421313a12fdSmrg      echo "Libraries have been installed in:"
4422313a12fdSmrg      for libdir in $libdirs; do
4423313a12fdSmrg	$ECHO "   $libdir"
4424313a12fdSmrg      done
4425ae545d91Smrg      if test "false" = "$opt_finishing"; then
4426ae545d91Smrg        echo
4427ae545d91Smrg        echo "NOTE: finish_cmds were not executed during testing, so you must"
4428ae545d91Smrg        echo "manually run ldconfig to add a given test directory, LIBDIR, to"
4429ae545d91Smrg        echo "the search path for generated executables."
4430ae545d91Smrg      fi
4431313a12fdSmrg      echo
4432313a12fdSmrg      echo "If you ever happen to want to link against installed libraries"
4433313a12fdSmrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
44347cea3689Smrg      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
4435313a12fdSmrg      echo "flag during linking and do at least one of the following:"
4436313a12fdSmrg      if test -n "$shlibpath_var"; then
44377cea3689Smrg	echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
4438313a12fdSmrg	echo "     during execution"
4439313a12fdSmrg      fi
4440313a12fdSmrg      if test -n "$runpath_var"; then
44417cea3689Smrg	echo "   - add LIBDIR to the '$runpath_var' environment variable"
4442313a12fdSmrg	echo "     during linking"
4443313a12fdSmrg      fi
4444313a12fdSmrg      if test -n "$hardcode_libdir_flag_spec"; then
4445313a12fdSmrg	libdir=LIBDIR
4446313a12fdSmrg	eval flag=\"$hardcode_libdir_flag_spec\"
4447313a12fdSmrg
44487cea3689Smrg	$ECHO "   - use the '$flag' linker flag"
4449313a12fdSmrg      fi
4450313a12fdSmrg      if test -n "$admincmds"; then
4451313a12fdSmrg	$ECHO "   - have your system administrator run these commands:$admincmds"
4452313a12fdSmrg      fi
4453313a12fdSmrg      if test -f /etc/ld.so.conf; then
44547cea3689Smrg	echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
4455313a12fdSmrg      fi
4456313a12fdSmrg      echo
445727702724Smrg
4458313a12fdSmrg      echo "See any operating system documentation about shared libraries for"
4459313a12fdSmrg      case $host in
4460313a12fdSmrg	solaris2.[6789]|solaris2.1[0-9])
4461313a12fdSmrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
4462313a12fdSmrg	  echo "pages."
4463313a12fdSmrg	  ;;
4464313a12fdSmrg	*)
4465313a12fdSmrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
4466313a12fdSmrg	  ;;
4467313a12fdSmrg      esac
4468313a12fdSmrg      echo "----------------------------------------------------------------------"
4469e19dfac4Smrg    fi
4470e19dfac4Smrg    exit $EXIT_SUCCESS
4471e19dfac4Smrg}
447227702724Smrg
44737cea3689Smrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"}
447427702724Smrg
447527702724Smrg
4476e19dfac4Smrg# func_mode_install arg...
4477e19dfac4Smrgfunc_mode_install ()
4478e19dfac4Smrg{
44797cea3689Smrg    $debug_cmd
44807cea3689Smrg
4481e19dfac4Smrg    # There may be an optional sh(1) argument at the beginning of
4482e19dfac4Smrg    # install_prog (especially on Windows NT).
44837cea3689Smrg    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
4484e19dfac4Smrg       # Allow the use of GNU shtool's install command.
44857cea3689Smrg       case $nonopt in *shtool*) :;; *) false;; esac
44867cea3689Smrg    then
4487e19dfac4Smrg      # Aesthetically quote it.
448895b7a5c8Smrg      func_quote_arg pretty "$nonopt"
448995b7a5c8Smrg      install_prog="$func_quote_arg_result "
4490e19dfac4Smrg      arg=$1
4491e19dfac4Smrg      shift
4492e19dfac4Smrg    else
4493e19dfac4Smrg      install_prog=
4494e19dfac4Smrg      arg=$nonopt
4495e19dfac4Smrg    fi
449627702724Smrg
4497e19dfac4Smrg    # The real first argument should be the name of the installation program.
4498e19dfac4Smrg    # Aesthetically quote it.
449995b7a5c8Smrg    func_quote_arg pretty "$arg"
450095b7a5c8Smrg    func_append install_prog "$func_quote_arg_result"
4501313a12fdSmrg    install_shared_prog=$install_prog
4502313a12fdSmrg    case " $install_prog " in
4503313a12fdSmrg      *[\\\ /]cp\ *) install_cp=: ;;
4504313a12fdSmrg      *) install_cp=false ;;
4505313a12fdSmrg    esac
4506e19dfac4Smrg
4507e19dfac4Smrg    # We need to accept at least all the BSD install flags.
4508e19dfac4Smrg    dest=
4509e19dfac4Smrg    files=
4510e19dfac4Smrg    opts=
4511e19dfac4Smrg    prev=
4512e19dfac4Smrg    install_type=
45137cea3689Smrg    isdir=false
4514e19dfac4Smrg    stripme=
4515313a12fdSmrg    no_mode=:
4516e19dfac4Smrg    for arg
4517e19dfac4Smrg    do
4518313a12fdSmrg      arg2=
4519e19dfac4Smrg      if test -n "$dest"; then
4520313a12fdSmrg	func_append files " $dest"
4521e19dfac4Smrg	dest=$arg
4522e19dfac4Smrg	continue
452327702724Smrg      fi
452427702724Smrg
4525e19dfac4Smrg      case $arg in
45267cea3689Smrg      -d) isdir=: ;;
4527e19dfac4Smrg      -f)
4528313a12fdSmrg	if $install_cp; then :; else
4529313a12fdSmrg	  prev=$arg
4530313a12fdSmrg	fi
4531e19dfac4Smrg	;;
4532e19dfac4Smrg      -g | -m | -o)
4533e19dfac4Smrg	prev=$arg
4534e19dfac4Smrg	;;
4535e19dfac4Smrg      -s)
4536e19dfac4Smrg	stripme=" -s"
4537e19dfac4Smrg	continue
4538e19dfac4Smrg	;;
4539e19dfac4Smrg      -*)
4540e19dfac4Smrg	;;
4541e19dfac4Smrg      *)
4542e19dfac4Smrg	# If the previous option needed an argument, then skip it.
4543e19dfac4Smrg	if test -n "$prev"; then
45447cea3689Smrg	  if test X-m = "X$prev" && test -n "$install_override_mode"; then
4545313a12fdSmrg	    arg2=$install_override_mode
4546313a12fdSmrg	    no_mode=false
4547313a12fdSmrg	  fi
4548e19dfac4Smrg	  prev=
4549e19dfac4Smrg	else
4550e19dfac4Smrg	  dest=$arg
4551e19dfac4Smrg	  continue
4552e19dfac4Smrg	fi
4553e19dfac4Smrg	;;
4554e19dfac4Smrg      esac
455527702724Smrg
4556e19dfac4Smrg      # Aesthetically quote the argument.
455795b7a5c8Smrg      func_quote_arg pretty "$arg"
455895b7a5c8Smrg      func_append install_prog " $func_quote_arg_result"
4559313a12fdSmrg      if test -n "$arg2"; then
456095b7a5c8Smrg	func_quote_arg pretty "$arg2"
4561313a12fdSmrg      fi
456295b7a5c8Smrg      func_append install_shared_prog " $func_quote_arg_result"
4563e19dfac4Smrg    done
456427702724Smrg
4565e19dfac4Smrg    test -z "$install_prog" && \
4566e19dfac4Smrg      func_fatal_help "you must specify an install program"
456727702724Smrg
4568e19dfac4Smrg    test -n "$prev" && \
45697cea3689Smrg      func_fatal_help "the '$prev' option requires an argument"
457027702724Smrg
4571313a12fdSmrg    if test -n "$install_override_mode" && $no_mode; then
4572313a12fdSmrg      if $install_cp; then :; else
457395b7a5c8Smrg	func_quote_arg pretty "$install_override_mode"
457495b7a5c8Smrg	func_append install_shared_prog " -m $func_quote_arg_result"
4575313a12fdSmrg      fi
4576313a12fdSmrg    fi
4577313a12fdSmrg
4578e19dfac4Smrg    if test -z "$files"; then
4579e19dfac4Smrg      if test -z "$dest"; then
4580e19dfac4Smrg	func_fatal_help "no file or destination specified"
4581e19dfac4Smrg      else
4582e19dfac4Smrg	func_fatal_help "you must specify a destination"
458327702724Smrg      fi
458427702724Smrg    fi
458527702724Smrg
4586e19dfac4Smrg    # Strip any trailing slash from the destination.
4587e19dfac4Smrg    func_stripname '' '/' "$dest"
4588e19dfac4Smrg    dest=$func_stripname_result
458927702724Smrg
4590e19dfac4Smrg    # Check to see that the destination is a directory.
45917cea3689Smrg    test -d "$dest" && isdir=:
45927cea3689Smrg    if $isdir; then
45937cea3689Smrg      destdir=$dest
4594e19dfac4Smrg      destname=
4595e19dfac4Smrg    else
4596e19dfac4Smrg      func_dirname_and_basename "$dest" "" "."
45977cea3689Smrg      destdir=$func_dirname_result
45987cea3689Smrg      destname=$func_basename_result
4599e19dfac4Smrg
4600e19dfac4Smrg      # Not a directory, so check to see that there is only one file specified.
4601e19dfac4Smrg      set dummy $files; shift
4602e19dfac4Smrg      test "$#" -gt 1 && \
46037cea3689Smrg	func_fatal_help "'$dest' is not a directory"
4604e19dfac4Smrg    fi
4605e19dfac4Smrg    case $destdir in
4606e19dfac4Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
460727702724Smrg    *)
4608e19dfac4Smrg      for file in $files; do
4609e19dfac4Smrg	case $file in
4610e19dfac4Smrg	*.lo) ;;
4611e19dfac4Smrg	*)
46127cea3689Smrg	  func_fatal_help "'$destdir' must be an absolute directory name"
4613e19dfac4Smrg	  ;;
4614e19dfac4Smrg	esac
4615e19dfac4Smrg      done
461627702724Smrg      ;;
461727702724Smrg    esac
461827702724Smrg
4619e19dfac4Smrg    # This variable tells wrapper scripts just to set variables rather
4620e19dfac4Smrg    # than running their programs.
46217cea3689Smrg    libtool_install_magic=$magic
462227702724Smrg
4623e19dfac4Smrg    staticlibs=
4624e19dfac4Smrg    future_libdirs=
4625e19dfac4Smrg    current_libdirs=
4626e19dfac4Smrg    for file in $files; do
462727702724Smrg
4628e19dfac4Smrg      # Do each installation.
4629e19dfac4Smrg      case $file in
4630e19dfac4Smrg      *.$libext)
4631e19dfac4Smrg	# Do the static libraries later.
4632313a12fdSmrg	func_append staticlibs " $file"
4633e19dfac4Smrg	;;
4634e19dfac4Smrg
4635e19dfac4Smrg      *.la)
4636313a12fdSmrg	func_resolve_sysroot "$file"
4637313a12fdSmrg	file=$func_resolve_sysroot_result
4638313a12fdSmrg
4639e19dfac4Smrg	# Check to see that this really is a libtool archive.
4640e19dfac4Smrg	func_lalib_unsafe_p "$file" \
46417cea3689Smrg	  || func_fatal_help "'$file' is not a valid libtool archive"
4642e19dfac4Smrg
4643e19dfac4Smrg	library_names=
4644e19dfac4Smrg	old_library=
4645e19dfac4Smrg	relink_command=
4646e19dfac4Smrg	func_source "$file"
4647e19dfac4Smrg
4648e19dfac4Smrg	# Add the libdir to current_libdirs if it is the destination.
4649e19dfac4Smrg	if test "X$destdir" = "X$libdir"; then
4650e19dfac4Smrg	  case "$current_libdirs " in
4651e19dfac4Smrg	  *" $libdir "*) ;;
4652313a12fdSmrg	  *) func_append current_libdirs " $libdir" ;;
465327702724Smrg	  esac
4654e19dfac4Smrg	else
4655e19dfac4Smrg	  # Note the libdir as a future libdir.
4656e19dfac4Smrg	  case "$future_libdirs " in
4657e19dfac4Smrg	  *" $libdir "*) ;;
4658313a12fdSmrg	  *) func_append future_libdirs " $libdir" ;;
4659e19dfac4Smrg	  esac
4660e19dfac4Smrg	fi
466127702724Smrg
4662e19dfac4Smrg	func_dirname "$file" "/" ""
46637cea3689Smrg	dir=$func_dirname_result
4664313a12fdSmrg	func_append dir "$objdir"
4665e19dfac4Smrg
4666e19dfac4Smrg	if test -n "$relink_command"; then
4667ae545d91Smrg	  # Strip any trailing slash from the destination.
4668ae545d91Smrg	  func_stripname '' '/' "$libdir"
4669ae545d91Smrg	  destlibdir=$func_stripname_result
4670ae545d91Smrg
4671ae545d91Smrg	  func_stripname '' '/' "$destdir"
4672ae545d91Smrg	  s_destdir=$func_stripname_result
4673ae545d91Smrg
4674e19dfac4Smrg	  # Determine the prefix the user has applied to our future dir.
4675ae545d91Smrg	  inst_prefix_dir=`$ECHO "X$s_destdir" | $Xsed -e "s%$destlibdir\$%%"`
4676e19dfac4Smrg
4677e19dfac4Smrg	  # Don't allow the user to place us outside of our expected
4678e19dfac4Smrg	  # location b/c this prevents finding dependent libraries that
4679e19dfac4Smrg	  # are installed to the same prefix.
4680e19dfac4Smrg	  # At present, this check doesn't affect windows .dll's that
4681e19dfac4Smrg	  # are installed into $libdir/../bin (currently, that works fine)
4682e19dfac4Smrg	  # but it's something to keep an eye on.
4683e19dfac4Smrg	  test "$inst_prefix_dir" = "$destdir" && \
46847cea3689Smrg	    func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
4685e19dfac4Smrg
4686e19dfac4Smrg	  if test -n "$inst_prefix_dir"; then
4687e19dfac4Smrg	    # Stick the inst_prefix_dir data into the link command.
4688313a12fdSmrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
4689e19dfac4Smrg	  else
4690313a12fdSmrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
4691e19dfac4Smrg	  fi
4692e19dfac4Smrg
46937cea3689Smrg	  func_warning "relinking '$file'"
4694e19dfac4Smrg	  func_show_eval "$relink_command" \
46957cea3689Smrg	    'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
4696e19dfac4Smrg	fi
4697e19dfac4Smrg
4698e19dfac4Smrg	# See the names of the shared library.
4699e19dfac4Smrg	set dummy $library_names; shift
4700e19dfac4Smrg	if test -n "$1"; then
47017cea3689Smrg	  realname=$1
4702e19dfac4Smrg	  shift
4703e19dfac4Smrg
47047cea3689Smrg	  srcname=$realname
47057cea3689Smrg	  test -n "$relink_command" && srcname=${realname}T
4706e19dfac4Smrg
4707e19dfac4Smrg	  # Install the shared library and build the symlinks.
4708313a12fdSmrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
4709e19dfac4Smrg	      'exit $?'
47107cea3689Smrg	  tstripme=$stripme
4711e19dfac4Smrg	  case $host_os in
4712ae545d91Smrg	  cygwin* | mingw* | windows* | pw32* | cegcc*)
4713e19dfac4Smrg	    case $realname in
4714e19dfac4Smrg	    *.dll.a)
47157cea3689Smrg	      tstripme=
47167cea3689Smrg	      ;;
47177cea3689Smrg	    esac
47187cea3689Smrg	    ;;
47197cea3689Smrg	  os2*)
47207cea3689Smrg	    case $realname in
47217cea3689Smrg	    *_dll.a)
47227cea3689Smrg	      tstripme=
4723e19dfac4Smrg	      ;;
4724e19dfac4Smrg	    esac
472527702724Smrg	    ;;
472627702724Smrg	  esac
4727e19dfac4Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
4728e19dfac4Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
472927702724Smrg	  fi
4730e19dfac4Smrg
4731e19dfac4Smrg	  if test "$#" -gt 0; then
4732e19dfac4Smrg	    # Delete the old symlinks, and create new ones.
47337cea3689Smrg	    # Try 'ln -sf' first, because the 'ln' binary might depend on
4734e19dfac4Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
4735e19dfac4Smrg	    # so we also need to try rm && ln -s.
4736e19dfac4Smrg	    for linkname
4737e19dfac4Smrg	    do
4738e19dfac4Smrg	      test "$linkname" != "$realname" \
4739e19dfac4Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
474027702724Smrg	    done
474127702724Smrg	  fi
474227702724Smrg
4743e19dfac4Smrg	  # Do each command in the postinstall commands.
47447cea3689Smrg	  lib=$destdir/$realname
4745e19dfac4Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
474627702724Smrg	fi
474727702724Smrg
4748e19dfac4Smrg	# Install the pseudo-library for information purposes.
4749e19dfac4Smrg	func_basename "$file"
47507cea3689Smrg	name=$func_basename_result
47517cea3689Smrg	instname=$dir/${name}i
4752e19dfac4Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
475327702724Smrg
4754e19dfac4Smrg	# Maybe install the static library, too.
4755313a12fdSmrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
4756e19dfac4Smrg	;;
475727702724Smrg
4758e19dfac4Smrg      *.lo)
4759e19dfac4Smrg	# Install (i.e. copy) a libtool object.
476027702724Smrg
4761e19dfac4Smrg	# Figure out destination file name, if it wasn't already specified.
4762e19dfac4Smrg	if test -n "$destname"; then
47637cea3689Smrg	  destfile=$destdir/$destname
4764e19dfac4Smrg	else
4765e19dfac4Smrg	  func_basename "$file"
47667cea3689Smrg	  destfile=$func_basename_result
47677cea3689Smrg	  destfile=$destdir/$destfile
4768e19dfac4Smrg	fi
4769e19dfac4Smrg
4770e19dfac4Smrg	# Deduce the name of the destination old-style object file.
4771e19dfac4Smrg	case $destfile in
4772e19dfac4Smrg	*.lo)
4773e19dfac4Smrg	  func_lo2o "$destfile"
4774e19dfac4Smrg	  staticdest=$func_lo2o_result
4775e19dfac4Smrg	  ;;
4776e19dfac4Smrg	*.$objext)
47777cea3689Smrg	  staticdest=$destfile
4778e19dfac4Smrg	  destfile=
4779e19dfac4Smrg	  ;;
4780e19dfac4Smrg	*)
47817cea3689Smrg	  func_fatal_help "cannot copy a libtool object to '$destfile'"
4782e19dfac4Smrg	  ;;
478327702724Smrg	esac
478427702724Smrg
4785e19dfac4Smrg	# Install the libtool object if requested.
4786e19dfac4Smrg	test -n "$destfile" && \
4787e19dfac4Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
4788e19dfac4Smrg
4789e19dfac4Smrg	# Install the old object if enabled.
47907cea3689Smrg	if test yes = "$build_old_libs"; then
4791e19dfac4Smrg	  # Deduce the name of the old-style object file.
4792e19dfac4Smrg	  func_lo2o "$file"
4793e19dfac4Smrg	  staticobj=$func_lo2o_result
4794e19dfac4Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
479527702724Smrg	fi
4796e19dfac4Smrg	exit $EXIT_SUCCESS
4797e19dfac4Smrg	;;
479827702724Smrg
4799e19dfac4Smrg      *)
4800e19dfac4Smrg	# Figure out destination file name, if it wasn't already specified.
4801e19dfac4Smrg	if test -n "$destname"; then
48027cea3689Smrg	  destfile=$destdir/$destname
4803e19dfac4Smrg	else
4804e19dfac4Smrg	  func_basename "$file"
48057cea3689Smrg	  destfile=$func_basename_result
48067cea3689Smrg	  destfile=$destdir/$destfile
4807e19dfac4Smrg	fi
4808e19dfac4Smrg
4809e19dfac4Smrg	# If the file is missing, and there is a .exe on the end, strip it
4810e19dfac4Smrg	# because it is most likely a libtool script we actually want to
4811e19dfac4Smrg	# install
48127cea3689Smrg	stripped_ext=
4813e19dfac4Smrg	case $file in
4814e19dfac4Smrg	  *.exe)
4815e19dfac4Smrg	    if test ! -f "$file"; then
4816e19dfac4Smrg	      func_stripname '' '.exe' "$file"
4817e19dfac4Smrg	      file=$func_stripname_result
48187cea3689Smrg	      stripped_ext=.exe
481927702724Smrg	    fi
4820e19dfac4Smrg	    ;;
4821e19dfac4Smrg	esac
482227702724Smrg
4823e19dfac4Smrg	# Do a test to see if this is really a libtool program.
4824e19dfac4Smrg	case $host in
4825ae545d91Smrg	*cygwin* | *mingw* | *windows*)
4826e19dfac4Smrg	    if func_ltwrapper_executable_p "$file"; then
4827e19dfac4Smrg	      func_ltwrapper_scriptname "$file"
4828e19dfac4Smrg	      wrapper=$func_ltwrapper_scriptname_result
4829e19dfac4Smrg	    else
4830e19dfac4Smrg	      func_stripname '' '.exe' "$file"
4831e19dfac4Smrg	      wrapper=$func_stripname_result
4832e19dfac4Smrg	    fi
4833e19dfac4Smrg	    ;;
4834e19dfac4Smrg	*)
4835e19dfac4Smrg	    wrapper=$file
4836e19dfac4Smrg	    ;;
4837e19dfac4Smrg	esac
4838e19dfac4Smrg	if func_ltwrapper_script_p "$wrapper"; then
4839e19dfac4Smrg	  notinst_deplibs=
4840e19dfac4Smrg	  relink_command=
484127702724Smrg
4842e19dfac4Smrg	  func_source "$wrapper"
484327702724Smrg
4844e19dfac4Smrg	  # Check the variables that should have been set.
4845e19dfac4Smrg	  test -z "$generated_by_libtool_version" && \
48467cea3689Smrg	    func_fatal_error "invalid libtool wrapper script '$wrapper'"
4847e19dfac4Smrg
48487cea3689Smrg	  finalize=:
4849e19dfac4Smrg	  for lib in $notinst_deplibs; do
4850e19dfac4Smrg	    # Check to see that each library is installed.
4851e19dfac4Smrg	    libdir=
4852e19dfac4Smrg	    if test -f "$lib"; then
4853e19dfac4Smrg	      func_source "$lib"
4854e19dfac4Smrg	    fi
48557cea3689Smrg	    libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
4856e19dfac4Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
48577cea3689Smrg	      func_warning "'$lib' has not been installed in '$libdir'"
48587cea3689Smrg	      finalize=false
4859e19dfac4Smrg	    fi
4860e19dfac4Smrg	  done
4861e19dfac4Smrg
4862e19dfac4Smrg	  relink_command=
4863e19dfac4Smrg	  func_source "$wrapper"
4864e19dfac4Smrg
4865e19dfac4Smrg	  outputname=
48667cea3689Smrg	  if test no = "$fast_install" && test -n "$relink_command"; then
4867e19dfac4Smrg	    $opt_dry_run || {
48687cea3689Smrg	      if $finalize; then
4869e19dfac4Smrg	        tmpdir=`func_mktempdir`
4870e19dfac4Smrg		func_basename "$file$stripped_ext"
48717cea3689Smrg		file=$func_basename_result
48727cea3689Smrg	        outputname=$tmpdir/$file
4873e19dfac4Smrg	        # Replace the output file specification.
4874313a12fdSmrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
4875e19dfac4Smrg
48767cea3689Smrg	        $opt_quiet || {
487795b7a5c8Smrg	          func_quote_arg expand,pretty "$relink_command"
487895b7a5c8Smrg		  eval "func_echo $func_quote_arg_result"
4879e19dfac4Smrg	        }
4880e19dfac4Smrg	        if eval "$relink_command"; then :
4881e19dfac4Smrg	          else
48827cea3689Smrg		  func_error "error: relink '$file' with the above command before installing it"
4883e19dfac4Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
4884e19dfac4Smrg		  continue
4885e19dfac4Smrg	        fi
48867cea3689Smrg	        file=$outputname
4887e19dfac4Smrg	      else
48887cea3689Smrg	        func_warning "cannot relink '$file'"
4889e19dfac4Smrg	      fi
4890e19dfac4Smrg	    }
489127702724Smrg	  else
4892e19dfac4Smrg	    # Install the binary that we compiled earlier.
4893313a12fdSmrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
489427702724Smrg	  fi
4895e19dfac4Smrg	fi
489627702724Smrg
4897e19dfac4Smrg	# remove .exe since cygwin /usr/bin/install will append another
4898e19dfac4Smrg	# one anyway
4899e19dfac4Smrg	case $install_prog,$host in
4900e19dfac4Smrg	*/usr/bin/install*,*cygwin*)
4901e19dfac4Smrg	  case $file:$destfile in
4902e19dfac4Smrg	  *.exe:*.exe)
4903e19dfac4Smrg	    # this is ok
4904e19dfac4Smrg	    ;;
4905e19dfac4Smrg	  *.exe:*)
4906e19dfac4Smrg	    destfile=$destfile.exe
4907e19dfac4Smrg	    ;;
4908e19dfac4Smrg	  *:*.exe)
4909e19dfac4Smrg	    func_stripname '' '.exe' "$destfile"
4910e19dfac4Smrg	    destfile=$func_stripname_result
4911e19dfac4Smrg	    ;;
4912e19dfac4Smrg	  esac
491327702724Smrg	  ;;
491427702724Smrg	esac
4915e19dfac4Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
4916e19dfac4Smrg	$opt_dry_run || if test -n "$outputname"; then
4917e19dfac4Smrg	  ${RM}r "$tmpdir"
4918e19dfac4Smrg	fi
4919e19dfac4Smrg	;;
4920e19dfac4Smrg      esac
4921e19dfac4Smrg    done
492227702724Smrg
4923e19dfac4Smrg    for file in $staticlibs; do
4924e19dfac4Smrg      func_basename "$file"
49257cea3689Smrg      name=$func_basename_result
492627702724Smrg
4927e19dfac4Smrg      # Set up the ranlib parameters.
49287cea3689Smrg      oldlib=$destdir/$name
4929313a12fdSmrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
4930313a12fdSmrg      tool_oldlib=$func_to_tool_file_result
493127702724Smrg
4932e19dfac4Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
493327702724Smrg
4934e19dfac4Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
4935313a12fdSmrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
4936e19dfac4Smrg      fi
493727702724Smrg
4938e19dfac4Smrg      # Do each command in the postinstall commands.
4939e19dfac4Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
4940e19dfac4Smrg    done
494127702724Smrg
4942e19dfac4Smrg    test -n "$future_libdirs" && \
49437cea3689Smrg      func_warning "remember to run '$progname --finish$future_libdirs'"
494427702724Smrg
4945e19dfac4Smrg    if test -n "$current_libdirs"; then
4946e19dfac4Smrg      # Maybe just do a dry run.
4947e19dfac4Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
49487cea3689Smrg      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
4949e19dfac4Smrg    else
4950e19dfac4Smrg      exit $EXIT_SUCCESS
4951e19dfac4Smrg    fi
4952e19dfac4Smrg}
495327702724Smrg
49547cea3689Smrgtest install = "$opt_mode" && func_mode_install ${1+"$@"}
495527702724Smrg
495627702724Smrg
4957e19dfac4Smrg# func_generate_dlsyms outputname originator pic_p
4958e19dfac4Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
4959e19dfac4Smrg# a dlpreopen symbol table.
4960e19dfac4Smrgfunc_generate_dlsyms ()
4961e19dfac4Smrg{
49627cea3689Smrg    $debug_cmd
49637cea3689Smrg
49647cea3689Smrg    my_outputname=$1
49657cea3689Smrg    my_originator=$2
49667cea3689Smrg    my_pic_p=${3-false}
49677cea3689Smrg    my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
4968e19dfac4Smrg    my_dlsyms=
4969e19dfac4Smrg
49707cea3689Smrg    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
4971e19dfac4Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
49727cea3689Smrg	my_dlsyms=${my_outputname}S.c
4973e19dfac4Smrg      else
4974e19dfac4Smrg	func_error "not configured to extract global symbols from dlpreopened files"
4975e19dfac4Smrg      fi
4976e19dfac4Smrg    fi
497727702724Smrg
4978e19dfac4Smrg    if test -n "$my_dlsyms"; then
4979e19dfac4Smrg      case $my_dlsyms in
4980e19dfac4Smrg      "") ;;
4981e19dfac4Smrg      *.c)
4982e19dfac4Smrg	# Discover the nlist of each of the dlfiles.
49837cea3689Smrg	nlist=$output_objdir/$my_outputname.nm
4984e19dfac4Smrg
4985e19dfac4Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
4986e19dfac4Smrg
4987e19dfac4Smrg	# Parse the name list into a source file.
4988e19dfac4Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
4989e19dfac4Smrg
4990e19dfac4Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
49917cea3689Smrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
49927cea3689Smrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
4993e19dfac4Smrg
4994e19dfac4Smrg#ifdef __cplusplus
4995e19dfac4Smrgextern \"C\" {
4996e19dfac4Smrg#endif
4997e19dfac4Smrg
49987cea3689Smrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
4999313a12fdSmrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
5000313a12fdSmrg#endif
5001313a12fdSmrg
5002313a12fdSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
50037cea3689Smrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
50047cea3689Smrg/* DATA imports from DLLs on WIN32 can't be const, because runtime
5005313a12fdSmrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
5006313a12fdSmrg# define LT_DLSYM_CONST
50077cea3689Smrg#elif defined __osf__
5008313a12fdSmrg/* This system does not cope well with relocations in const data.  */
5009313a12fdSmrg# define LT_DLSYM_CONST
5010313a12fdSmrg#else
5011313a12fdSmrg# define LT_DLSYM_CONST const
5012313a12fdSmrg#endif
5013313a12fdSmrg
50147cea3689Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
50157cea3689Smrg
5016e19dfac4Smrg/* External symbol declarations for the compiler. */\
5017e19dfac4Smrg"
5018e19dfac4Smrg
50197cea3689Smrg	if test yes = "$dlself"; then
50207cea3689Smrg	  func_verbose "generating symbol list for '$output'"
5021e19dfac4Smrg
5022e19dfac4Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
5023e19dfac4Smrg
5024e19dfac4Smrg	  # Add our own program objects to the symbol list.
5025313a12fdSmrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
5026e19dfac4Smrg	  for progfile in $progfiles; do
5027313a12fdSmrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
50287cea3689Smrg	    func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
5029313a12fdSmrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
5030e19dfac4Smrg	  done
5031e19dfac4Smrg
5032e19dfac4Smrg	  if test -n "$exclude_expsyms"; then
5033e19dfac4Smrg	    $opt_dry_run || {
5034e19dfac4Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
5035e19dfac4Smrg	      eval '$MV "$nlist"T "$nlist"'
5036e19dfac4Smrg	    }
503727702724Smrg	  fi
503827702724Smrg
5039e19dfac4Smrg	  if test -n "$export_symbols_regex"; then
5040e19dfac4Smrg	    $opt_dry_run || {
5041e19dfac4Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
5042e19dfac4Smrg	      eval '$MV "$nlist"T "$nlist"'
5043e19dfac4Smrg	    }
504427702724Smrg	  fi
5045e19dfac4Smrg
5046e19dfac4Smrg	  # Prepare the list of exported symbols
5047e19dfac4Smrg	  if test -z "$export_symbols"; then
50487cea3689Smrg	    export_symbols=$output_objdir/$outputname.exp
5049e19dfac4Smrg	    $opt_dry_run || {
5050e19dfac4Smrg	      $RM $export_symbols
50517cea3689Smrg	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
5052e19dfac4Smrg	      case $host in
5053ae545d91Smrg	      *cygwin* | *mingw* | *windows* | *cegcc* )
5054e19dfac4Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
5055e19dfac4Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
5056e19dfac4Smrg	        ;;
505727702724Smrg	      esac
5058e19dfac4Smrg	    }
5059e19dfac4Smrg	  else
5060e19dfac4Smrg	    $opt_dry_run || {
50617cea3689Smrg	      eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
5062e19dfac4Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
5063e19dfac4Smrg	      eval '$MV "$nlist"T "$nlist"'
5064e19dfac4Smrg	      case $host in
5065ae545d91Smrg	        *cygwin* | *mingw* | *windows* | *cegcc* )
5066e19dfac4Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
5067e19dfac4Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
5068e19dfac4Smrg	          ;;
506927702724Smrg	      esac
5070e19dfac4Smrg	    }
507127702724Smrg	  fi
5072e19dfac4Smrg	fi
507327702724Smrg
5074e19dfac4Smrg	for dlprefile in $dlprefiles; do
50757cea3689Smrg	  func_verbose "extracting global C symbols from '$dlprefile'"
5076e19dfac4Smrg	  func_basename "$dlprefile"
50777cea3689Smrg	  name=$func_basename_result
5078313a12fdSmrg          case $host in
5079ae545d91Smrg	    *cygwin* | *mingw* | *windows* | *cegcc* )
5080313a12fdSmrg	      # if an import library, we need to obtain dlname
5081313a12fdSmrg	      if func_win32_import_lib_p "$dlprefile"; then
5082313a12fdSmrg	        func_tr_sh "$dlprefile"
5083313a12fdSmrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
50847cea3689Smrg	        dlprefile_dlbasename=
5085313a12fdSmrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
5086313a12fdSmrg	          # Use subshell, to avoid clobbering current variable values
5087313a12fdSmrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
50887cea3689Smrg	          if test -n "$dlprefile_dlname"; then
5089313a12fdSmrg	            func_basename "$dlprefile_dlname"
50907cea3689Smrg	            dlprefile_dlbasename=$func_basename_result
5091313a12fdSmrg	          else
5092313a12fdSmrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
5093313a12fdSmrg	            $sharedlib_from_linklib_cmd "$dlprefile"
5094313a12fdSmrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
5095313a12fdSmrg	          fi
5096313a12fdSmrg	        fi
5097313a12fdSmrg	        $opt_dry_run || {
50987cea3689Smrg	          if test -n "$dlprefile_dlbasename"; then
5099313a12fdSmrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
5100313a12fdSmrg	          else
5101313a12fdSmrg	            func_warning "Could not compute DLL name from $name"
5102313a12fdSmrg	            eval '$ECHO ": $name " >> "$nlist"'
5103313a12fdSmrg	          fi
5104313a12fdSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
5105ae545d91Smrg	          case $host in
5106ae545d91Smrg	            i[3456]86-*-mingw32*)
5107ae545d91Smrg	              eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
5108ae545d91Smrg	                $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
5109ae545d91Smrg	            ;;
5110ae545d91Smrg	            *)
5111ae545d91Smrg	              eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
5112ae545d91Smrg	                $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/__nm_//' >> '$nlist'"
5113ae545d91Smrg	            ;;
5114ae545d91Smrg	          esac
5115313a12fdSmrg	        }
5116313a12fdSmrg	      else # not an import lib
5117313a12fdSmrg	        $opt_dry_run || {
5118313a12fdSmrg	          eval '$ECHO ": $name " >> "$nlist"'
5119313a12fdSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
5120313a12fdSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
5121313a12fdSmrg	        }
5122313a12fdSmrg	      fi
5123313a12fdSmrg	    ;;
5124313a12fdSmrg	    *)
5125313a12fdSmrg	      $opt_dry_run || {
5126313a12fdSmrg	        eval '$ECHO ": $name " >> "$nlist"'
5127313a12fdSmrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
5128313a12fdSmrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
5129313a12fdSmrg	      }
5130313a12fdSmrg	    ;;
5131313a12fdSmrg          esac
5132e19dfac4Smrg	done
513327702724Smrg
5134e19dfac4Smrg	$opt_dry_run || {
5135e19dfac4Smrg	  # Make sure we have at least an empty file.
5136e19dfac4Smrg	  test -f "$nlist" || : > "$nlist"
513727702724Smrg
5138e19dfac4Smrg	  if test -n "$exclude_expsyms"; then
5139e19dfac4Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
5140e19dfac4Smrg	    $MV "$nlist"T "$nlist"
514127702724Smrg	  fi
514227702724Smrg
5143e19dfac4Smrg	  # Try sorting and uniquifying the output.
5144e19dfac4Smrg	  if $GREP -v "^: " < "$nlist" |
5145e19dfac4Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
5146e19dfac4Smrg		sort -k 3
514727702724Smrg	      else
5148e19dfac4Smrg		sort +2
5149e19dfac4Smrg	      fi |
5150e19dfac4Smrg	      uniq > "$nlist"S; then
5151e19dfac4Smrg	    :
515227702724Smrg	  else
5153e19dfac4Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
515427702724Smrg	  fi
515527702724Smrg
5156e19dfac4Smrg	  if test -f "$nlist"S; then
5157e19dfac4Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
515827702724Smrg	  else
5159313a12fdSmrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
516027702724Smrg	  fi
516127702724Smrg
51627cea3689Smrg	  func_show_eval '$RM "${nlist}I"'
51637cea3689Smrg	  if test -n "$global_symbol_to_import"; then
51647cea3689Smrg	    eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
51657cea3689Smrg	  fi
51667cea3689Smrg
5167313a12fdSmrg	  echo >> "$output_objdir/$my_dlsyms" "\
516827702724Smrg
5169e19dfac4Smrg/* The mapping between symbol names and symbols.  */
5170e19dfac4Smrgtypedef struct {
5171e19dfac4Smrg  const char *name;
5172e19dfac4Smrg  void *address;
5173e19dfac4Smrg} lt_dlsymlist;
5174313a12fdSmrgextern LT_DLSYM_CONST lt_dlsymlist
51757cea3689Smrglt_${my_prefix}_LTX_preloaded_symbols[];\
51767cea3689Smrg"
51777cea3689Smrg
51787cea3689Smrg	  if test -s "$nlist"I; then
51797cea3689Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
51807cea3689Smrgstatic void lt_syminit(void)
51817cea3689Smrg{
51827cea3689Smrg  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
51837cea3689Smrg  for (; symbol->name; ++symbol)
51847cea3689Smrg    {"
51857cea3689Smrg	    $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
51867cea3689Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
51877cea3689Smrg    }
51887cea3689Smrg}"
51897cea3689Smrg	  fi
51907cea3689Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
5191313a12fdSmrgLT_DLSYM_CONST lt_dlsymlist
5192e19dfac4Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
51937cea3689Smrg{ {\"$my_originator\", (void *) 0},"
51947cea3689Smrg
51957cea3689Smrg	  if test -s "$nlist"I; then
51967cea3689Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
51977cea3689Smrg  {\"@INIT@\", (void *) &lt_syminit},"
51987cea3689Smrg	  fi
5199e19dfac4Smrg
5200e19dfac4Smrg	  case $need_lib_prefix in
5201e19dfac4Smrg	  no)
5202e19dfac4Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
5203e19dfac4Smrg	    ;;
5204e19dfac4Smrg	  *)
5205e19dfac4Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
5206e19dfac4Smrg	    ;;
5207e19dfac4Smrg	  esac
5208313a12fdSmrg	  echo >> "$output_objdir/$my_dlsyms" "\
5209e19dfac4Smrg  {0, (void *) 0}
5210e19dfac4Smrg};
5211e19dfac4Smrg
5212e19dfac4Smrg/* This works around a problem in FreeBSD linker */
5213e19dfac4Smrg#ifdef FREEBSD_WORKAROUND
5214e19dfac4Smrgstatic const void *lt_preloaded_setup() {
5215e19dfac4Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
5216e19dfac4Smrg}
5217e19dfac4Smrg#endif
5218e19dfac4Smrg
5219e19dfac4Smrg#ifdef __cplusplus
5220e19dfac4Smrg}
5221e19dfac4Smrg#endif\
5222e19dfac4Smrg"
5223e19dfac4Smrg	} # !$opt_dry_run
5224e19dfac4Smrg
5225e19dfac4Smrg	pic_flag_for_symtable=
5226e19dfac4Smrg	case "$compile_command " in
5227e19dfac4Smrg	*" -static "*) ;;
5228e19dfac4Smrg	*)
5229e19dfac4Smrg	  case $host in
5230e19dfac4Smrg	  # compiling the symbol table file with pic_flag works around
5231e19dfac4Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
5232e19dfac4Smrg	  # linked before any other PIC object.  But we must not use
5233e19dfac4Smrg	  # pic_flag when linking with -static.  The problem exists in
5234e19dfac4Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
5235313a12fdSmrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
5236e19dfac4Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
5237e19dfac4Smrg	  *-*-hpux*)
5238e19dfac4Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
5239e19dfac4Smrg	  *)
52407cea3689Smrg	    $my_pic_p && pic_flag_for_symtable=" $pic_flag"
5241e19dfac4Smrg	    ;;
5242e19dfac4Smrg	  esac
5243e19dfac4Smrg	  ;;
5244e19dfac4Smrg	esac
5245e19dfac4Smrg	symtab_cflags=
5246e19dfac4Smrg	for arg in $LTCFLAGS; do
5247e19dfac4Smrg	  case $arg in
5248e19dfac4Smrg	  -pie | -fpie | -fPIE) ;;
5249313a12fdSmrg	  *) func_append symtab_cflags " $arg" ;;
5250e19dfac4Smrg	  esac
5251e19dfac4Smrg	done
525227702724Smrg
5253e19dfac4Smrg	# Now compile the dynamic symbol file.
5254e19dfac4Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
525527702724Smrg
5256e19dfac4Smrg	# Clean up the generated files.
52577cea3689Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
5258e19dfac4Smrg
5259e19dfac4Smrg	# Transform the symbol file into the correct name.
52607cea3689Smrg	symfileobj=$output_objdir/${my_outputname}S.$objext
5261e19dfac4Smrg	case $host in
5262ae545d91Smrg	*cygwin* | *mingw* | *windows* | *cegcc* )
5263e19dfac4Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
5264313a12fdSmrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
5265313a12fdSmrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
5266e19dfac4Smrg	  else
5267313a12fdSmrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5268313a12fdSmrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5269e19dfac4Smrg	  fi
5270e19dfac4Smrg	  ;;
5271e19dfac4Smrg	*)
5272313a12fdSmrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5273313a12fdSmrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
527427702724Smrg	  ;;
527527702724Smrg	esac
5276e19dfac4Smrg	;;
5277e19dfac4Smrg      *)
52787cea3689Smrg	func_fatal_error "unknown suffix for '$my_dlsyms'"
5279e19dfac4Smrg	;;
5280e19dfac4Smrg      esac
5281e19dfac4Smrg    else
5282e19dfac4Smrg      # We keep going just in case the user didn't refer to
5283e19dfac4Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
5284e19dfac4Smrg      # really was required.
5285e19dfac4Smrg
5286e19dfac4Smrg      # Nullify the symbol file.
5287313a12fdSmrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
5288313a12fdSmrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
528927702724Smrg    fi
5290e19dfac4Smrg}
529127702724Smrg
52927cea3689Smrg# func_cygming_gnu_implib_p ARG
52937cea3689Smrg# This predicate returns with zero status (TRUE) if
52947cea3689Smrg# ARG is a GNU/binutils-style import library. Returns
52957cea3689Smrg# with nonzero status (FALSE) otherwise.
52967cea3689Smrgfunc_cygming_gnu_implib_p ()
52977cea3689Smrg{
52987cea3689Smrg  $debug_cmd
52997cea3689Smrg
53007cea3689Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
53017cea3689Smrg  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)$'`
53027cea3689Smrg  test -n "$func_cygming_gnu_implib_tmp"
53037cea3689Smrg}
53047cea3689Smrg
53057cea3689Smrg# func_cygming_ms_implib_p ARG
53067cea3689Smrg# This predicate returns with zero status (TRUE) if
53077cea3689Smrg# ARG is an MS-style import library. Returns
53087cea3689Smrg# with nonzero status (FALSE) otherwise.
53097cea3689Smrgfunc_cygming_ms_implib_p ()
53107cea3689Smrg{
53117cea3689Smrg  $debug_cmd
53127cea3689Smrg
53137cea3689Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
53147cea3689Smrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
53157cea3689Smrg  test -n "$func_cygming_ms_implib_tmp"
53167cea3689Smrg}
53177cea3689Smrg
5318e19dfac4Smrg# func_win32_libid arg
5319e19dfac4Smrg# return the library type of file 'arg'
5320e19dfac4Smrg#
5321e19dfac4Smrg# Need a lot of goo to handle *both* DLLs and import libs
5322e19dfac4Smrg# Has to be a shell function in order to 'eat' the argument
5323e19dfac4Smrg# that is supplied when $file_magic_command is called.
5324313a12fdSmrg# Despite the name, also deal with 64 bit binaries.
5325e19dfac4Smrgfunc_win32_libid ()
5326e19dfac4Smrg{
53277cea3689Smrg  $debug_cmd
53287cea3689Smrg
53297cea3689Smrg  win32_libid_type=unknown
5330e19dfac4Smrg  win32_fileres=`file -L $1 2>/dev/null`
5331e19dfac4Smrg  case $win32_fileres in
5332e19dfac4Smrg  *ar\ archive\ import\ library*) # definitely import
5333e19dfac4Smrg    win32_libid_type="x86 archive import"
5334e19dfac4Smrg    ;;
5335e19dfac4Smrg  *ar\ archive*) # could be an import, or static
5336313a12fdSmrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
5337e19dfac4Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
5338ae545d91Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64|pe-aarch64)' >/dev/null; then
53397cea3689Smrg      case $nm_interface in
53407cea3689Smrg      "MS dumpbin")
53417cea3689Smrg	if func_cygming_ms_implib_p "$1" ||
53427cea3689Smrg	   func_cygming_gnu_implib_p "$1"
53437cea3689Smrg	then
53447cea3689Smrg	  win32_nmres=import
53457cea3689Smrg	else
53467cea3689Smrg	  win32_nmres=
53477cea3689Smrg	fi
53487cea3689Smrg	;;
53497cea3689Smrg      *)
53507cea3689Smrg	func_to_tool_file "$1" func_convert_file_msys_to_w32
53517cea3689Smrg	win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
53527cea3689Smrg	  $SED -n -e '
5353e19dfac4Smrg	    1,100{
5354e19dfac4Smrg		/ I /{
53557cea3689Smrg		    s|.*|import|
5356e19dfac4Smrg		    p
5357e19dfac4Smrg		    q
5358e19dfac4Smrg		}
5359e19dfac4Smrg	    }'`
53607cea3689Smrg	;;
53617cea3689Smrg      esac
5362e19dfac4Smrg      case $win32_nmres in
5363e19dfac4Smrg      import*)  win32_libid_type="x86 archive import";;
5364e19dfac4Smrg      *)        win32_libid_type="x86 archive static";;
5365e19dfac4Smrg      esac
5366e19dfac4Smrg    fi
5367e19dfac4Smrg    ;;
5368e19dfac4Smrg  *DLL*)
5369e19dfac4Smrg    win32_libid_type="x86 DLL"
5370e19dfac4Smrg    ;;
5371e19dfac4Smrg  *executable*) # but shell scripts are "executable" too...
5372e19dfac4Smrg    case $win32_fileres in
5373e19dfac4Smrg    *MS\ Windows\ PE\ Intel*)
5374e19dfac4Smrg      win32_libid_type="x86 DLL"
5375e19dfac4Smrg      ;;
5376e19dfac4Smrg    esac
5377e19dfac4Smrg    ;;
5378e19dfac4Smrg  esac
5379e19dfac4Smrg  $ECHO "$win32_libid_type"
5380e19dfac4Smrg}
538127702724Smrg
5382313a12fdSmrg# func_cygming_dll_for_implib ARG
5383313a12fdSmrg#
5384313a12fdSmrg# Platform-specific function to extract the
5385313a12fdSmrg# name of the DLL associated with the specified
5386313a12fdSmrg# import library ARG.
5387313a12fdSmrg# Invoked by eval'ing the libtool variable
5388313a12fdSmrg#    $sharedlib_from_linklib_cmd
5389313a12fdSmrg# Result is available in the variable
5390313a12fdSmrg#    $sharedlib_from_linklib_result
5391313a12fdSmrgfunc_cygming_dll_for_implib ()
5392313a12fdSmrg{
53937cea3689Smrg  $debug_cmd
53947cea3689Smrg
5395313a12fdSmrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
5396313a12fdSmrg}
5397313a12fdSmrg
5398313a12fdSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
5399313a12fdSmrg#
5400313a12fdSmrg# The is the core of a fallback implementation of a
5401313a12fdSmrg# platform-specific function to extract the name of the
5402313a12fdSmrg# DLL associated with the specified import library LIBNAME.
5403313a12fdSmrg#
5404313a12fdSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending
5405313a12fdSmrg# on the platform and compiler that created the implib.
5406313a12fdSmrg#
5407313a12fdSmrg# Echos the name of the DLL associated with the
5408313a12fdSmrg# specified import library.
5409313a12fdSmrgfunc_cygming_dll_for_implib_fallback_core ()
5410313a12fdSmrg{
54117cea3689Smrg  $debug_cmd
54127cea3689Smrg
5413313a12fdSmrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
5414313a12fdSmrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
5415313a12fdSmrg    $SED '/^Contents of section '"$match_literal"':/{
5416313a12fdSmrg      # Place marker at beginning of archive member dllname section
5417313a12fdSmrg      s/.*/====MARK====/
5418313a12fdSmrg      p
5419313a12fdSmrg      d
5420313a12fdSmrg    }
5421313a12fdSmrg    # These lines can sometimes be longer than 43 characters, but
5422313a12fdSmrg    # are always uninteresting
5423313a12fdSmrg    /:[	 ]*file format pe[i]\{,1\}-/d
5424313a12fdSmrg    /^In archive [^:]*:/d
5425313a12fdSmrg    # Ensure marker is printed
5426313a12fdSmrg    /^====MARK====/p
5427313a12fdSmrg    # Remove all lines with less than 43 characters
5428313a12fdSmrg    /^.\{43\}/!d
5429313a12fdSmrg    # From remaining lines, remove first 43 characters
5430313a12fdSmrg    s/^.\{43\}//' |
5431313a12fdSmrg    $SED -n '
5432313a12fdSmrg      # Join marker and all lines until next marker into a single line
5433313a12fdSmrg      /^====MARK====/ b para
5434313a12fdSmrg      H
5435313a12fdSmrg      $ b para
5436313a12fdSmrg      b
5437313a12fdSmrg      :para
5438313a12fdSmrg      x
5439313a12fdSmrg      s/\n//g
5440313a12fdSmrg      # Remove the marker
5441313a12fdSmrg      s/^====MARK====//
5442313a12fdSmrg      # Remove trailing dots and whitespace
5443313a12fdSmrg      s/[\. \t]*$//
5444313a12fdSmrg      # Print
5445313a12fdSmrg      /./p' |
5446313a12fdSmrg    # we now have a list, one entry per line, of the stringified
5447313a12fdSmrg    # contents of the appropriate section of all members of the
54487cea3689Smrg    # archive that possess that section. Heuristic: eliminate
54497cea3689Smrg    # all those that have a first or second character that is
5450313a12fdSmrg    # a '.' (that is, objdump's representation of an unprintable
5451313a12fdSmrg    # character.) This should work for all archives with less than
5452313a12fdSmrg    # 0x302f exports -- but will fail for DLLs whose name actually
5453313a12fdSmrg    # begins with a literal '.' or a single character followed by
5454313a12fdSmrg    # a '.'.
5455313a12fdSmrg    #
5456313a12fdSmrg    # Of those that remain, print the first one.
5457313a12fdSmrg    $SED -e '/^\./d;/^.\./d;q'
5458313a12fdSmrg}
5459313a12fdSmrg
5460313a12fdSmrg# func_cygming_dll_for_implib_fallback ARG
5461313a12fdSmrg# Platform-specific function to extract the
5462313a12fdSmrg# name of the DLL associated with the specified
5463313a12fdSmrg# import library ARG.
5464313a12fdSmrg#
5465313a12fdSmrg# This fallback implementation is for use when $DLLTOOL
5466313a12fdSmrg# does not support the --identify-strict option.
5467313a12fdSmrg# Invoked by eval'ing the libtool variable
5468313a12fdSmrg#    $sharedlib_from_linklib_cmd
5469313a12fdSmrg# Result is available in the variable
5470313a12fdSmrg#    $sharedlib_from_linklib_result
5471313a12fdSmrgfunc_cygming_dll_for_implib_fallback ()
5472313a12fdSmrg{
54737cea3689Smrg  $debug_cmd
54747cea3689Smrg
54757cea3689Smrg  if func_cygming_gnu_implib_p "$1"; then
5476313a12fdSmrg    # binutils import library
5477313a12fdSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
54787cea3689Smrg  elif func_cygming_ms_implib_p "$1"; then
5479313a12fdSmrg    # ms-generated import library
5480313a12fdSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
5481313a12fdSmrg  else
5482313a12fdSmrg    # unknown
54837cea3689Smrg    sharedlib_from_linklib_result=
5484313a12fdSmrg  fi
5485313a12fdSmrg}
548627702724Smrg
548727702724Smrg
5488e19dfac4Smrg# func_extract_an_archive dir oldlib
5489e19dfac4Smrgfunc_extract_an_archive ()
5490e19dfac4Smrg{
54917cea3689Smrg    $debug_cmd
54927cea3689Smrg
54937cea3689Smrg    f_ex_an_ar_dir=$1; shift
54947cea3689Smrg    f_ex_an_ar_oldlib=$1
54957cea3689Smrg    if test yes = "$lock_old_archive_extraction"; then
5496313a12fdSmrg      lockfile=$f_ex_an_ar_oldlib.lock
5497313a12fdSmrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
5498313a12fdSmrg	func_echo "Waiting for $lockfile to be removed"
5499313a12fdSmrg	sleep 2
5500313a12fdSmrg      done
5501313a12fdSmrg    fi
5502313a12fdSmrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
5503313a12fdSmrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
55047cea3689Smrg    if test yes = "$lock_old_archive_extraction"; then
5505313a12fdSmrg      $opt_dry_run || rm -f "$lockfile"
5506313a12fdSmrg    fi
5507e19dfac4Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
5508e19dfac4Smrg     :
5509e19dfac4Smrg    else
5510e19dfac4Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
5511e19dfac4Smrg    fi
5512e19dfac4Smrg}
551327702724Smrg
551427702724Smrg
5515e19dfac4Smrg# func_extract_archives gentop oldlib ...
5516e19dfac4Smrgfunc_extract_archives ()
5517e19dfac4Smrg{
55187cea3689Smrg    $debug_cmd
55197cea3689Smrg
55207cea3689Smrg    my_gentop=$1; shift
5521e19dfac4Smrg    my_oldlibs=${1+"$@"}
55227cea3689Smrg    my_oldobjs=
55237cea3689Smrg    my_xlib=
55247cea3689Smrg    my_xabs=
55257cea3689Smrg    my_xdir=
552627702724Smrg
5527e19dfac4Smrg    for my_xlib in $my_oldlibs; do
5528e19dfac4Smrg      # Extract the objects.
5529e19dfac4Smrg      case $my_xlib in
55307cea3689Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
5531e19dfac4Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
5532e19dfac4Smrg      esac
5533e19dfac4Smrg      func_basename "$my_xlib"
55347cea3689Smrg      my_xlib=$func_basename_result
5535e19dfac4Smrg      my_xlib_u=$my_xlib
5536e19dfac4Smrg      while :; do
5537e19dfac4Smrg        case " $extracted_archives " in
5538e19dfac4Smrg	*" $my_xlib_u "*)
5539e19dfac4Smrg	  func_arith $extracted_serial + 1
5540e19dfac4Smrg	  extracted_serial=$func_arith_result
5541e19dfac4Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
5542e19dfac4Smrg	*) break ;;
5543e19dfac4Smrg	esac
5544e19dfac4Smrg      done
5545e19dfac4Smrg      extracted_archives="$extracted_archives $my_xlib_u"
55467cea3689Smrg      my_xdir=$my_gentop/$my_xlib_u
554727702724Smrg
5548e19dfac4Smrg      func_mkdir_p "$my_xdir"
554927702724Smrg
5550e19dfac4Smrg      case $host in
5551e19dfac4Smrg      *-darwin*)
5552e19dfac4Smrg	func_verbose "Extracting $my_xabs"
5553e19dfac4Smrg	# Do not bother doing anything if just a dry run
5554e19dfac4Smrg	$opt_dry_run || {
5555e19dfac4Smrg	  darwin_orig_dir=`pwd`
5556e19dfac4Smrg	  cd $my_xdir || exit $?
5557e19dfac4Smrg	  darwin_archive=$my_xabs
5558e19dfac4Smrg	  darwin_curdir=`pwd`
55597cea3689Smrg	  func_basename "$darwin_archive"
55607cea3689Smrg	  darwin_base_archive=$func_basename_result
5561e19dfac4Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
5562e19dfac4Smrg	  if test -n "$darwin_arches"; then
5563e19dfac4Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
5564e19dfac4Smrg	    darwin_arch=
5565e19dfac4Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
55667cea3689Smrg	    for darwin_arch in  $darwin_arches; do
55677cea3689Smrg	      func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
55687cea3689Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
55697cea3689Smrg	      cd "unfat-$$/$darwin_base_archive-$darwin_arch"
55707cea3689Smrg	      func_extract_an_archive "`pwd`" "$darwin_base_archive"
5571e19dfac4Smrg	      cd "$darwin_curdir"
55727cea3689Smrg	      $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
5573e19dfac4Smrg	    done # $darwin_arches
5574e19dfac4Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
55757cea3689Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
5576e19dfac4Smrg	    darwin_file=
5577e19dfac4Smrg	    darwin_files=
5578e19dfac4Smrg	    for darwin_file in $darwin_filelist; do
5579313a12fdSmrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
5580e19dfac4Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
5581e19dfac4Smrg	    done # $darwin_filelist
5582e19dfac4Smrg	    $RM -rf unfat-$$
5583e19dfac4Smrg	    cd "$darwin_orig_dir"
5584e19dfac4Smrg	  else
5585e19dfac4Smrg	    cd $darwin_orig_dir
5586e19dfac4Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
5587e19dfac4Smrg	  fi # $darwin_arches
5588e19dfac4Smrg	} # !$opt_dry_run
5589e19dfac4Smrg	;;
5590e19dfac4Smrg      *)
5591e19dfac4Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
5592e19dfac4Smrg	;;
559327702724Smrg      esac
5594313a12fdSmrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
5595e19dfac4Smrg    done
559627702724Smrg
55977cea3689Smrg    func_extract_archives_result=$my_oldobjs
5598e19dfac4Smrg}
559927702724Smrg
560027702724Smrg
5601313a12fdSmrg# func_emit_wrapper [arg=no]
5602313a12fdSmrg#
5603313a12fdSmrg# Emit a libtool wrapper script on stdout.
5604313a12fdSmrg# Don't directly open a file because we may want to
5605ae545d91Smrg# incorporate the script contents within a cygwin/mingw/windows
5606313a12fdSmrg# wrapper executable.  Must ONLY be called from within
5607313a12fdSmrg# func_mode_link because it depends on a number of variables
5608313a12fdSmrg# set therein.
5609e19dfac4Smrg#
5610313a12fdSmrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
5611313a12fdSmrg# variable will take.  If 'yes', then the emitted script
56127cea3689Smrg# will assume that the directory where it is stored is
5613ae545d91Smrg# the $objdir directory.  This is a cygwin/mingw/windows-specific
5614313a12fdSmrg# behavior.
5615313a12fdSmrgfunc_emit_wrapper ()
5616e19dfac4Smrg{
5617313a12fdSmrg	func_emit_wrapper_arg1=${1-no}
561827702724Smrg
5619e19dfac4Smrg	$ECHO "\
5620e19dfac4Smrg#! $SHELL
562127702724Smrg
5622e19dfac4Smrg# $output - temporary wrapper script for $objdir/$outputname
56237cea3689Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5624e19dfac4Smrg#
5625e19dfac4Smrg# The $output program cannot be directly executed until all the libtool
5626e19dfac4Smrg# libraries that it depends on are installed.
5627e19dfac4Smrg#
5628e19dfac4Smrg# This wrapper script should never be moved out of the build directory.
5629e19dfac4Smrg# If it is, it will not operate correctly.
563027702724Smrg
5631e19dfac4Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
5632e19dfac4Smrg# metacharacters that are still active within double-quoted strings.
5633e19dfac4Smrgsed_quote_subst='$sed_quote_subst'
563427702724Smrg
5635e19dfac4Smrg# Be Bourne compatible
5636e19dfac4Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
5637e19dfac4Smrg  emulate sh
5638e19dfac4Smrg  NULLCMD=:
5639e19dfac4Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
5640e19dfac4Smrg  # is contrary to our usage.  Disable this feature.
5641e19dfac4Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
5642e19dfac4Smrg  setopt NO_GLOB_SUBST
5643e19dfac4Smrgelse
5644e19dfac4Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
5645e19dfac4Smrgfi
5646e19dfac4SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
5647e19dfac4SmrgDUALCASE=1; export DUALCASE # for MKS sh
564827702724Smrg
5649e19dfac4Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
5650e19dfac4Smrg# if CDPATH is set.
5651e19dfac4Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
565227702724Smrg
5653e19dfac4Smrgrelink_command=\"$relink_command\"
565427702724Smrg
5655e19dfac4Smrg# This environment variable determines our operation mode.
5656e19dfac4Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
5657e19dfac4Smrg  # install mode needs the following variables:
5658e19dfac4Smrg  generated_by_libtool_version='$macro_version'
5659e19dfac4Smrg  notinst_deplibs='$notinst_deplibs'
5660e19dfac4Smrgelse
5661e19dfac4Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
5662e19dfac4Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
5663313a12fdSmrg    file=\"\$0\""
5664313a12fdSmrg
566595b7a5c8Smrg    func_quote_arg pretty "$ECHO"
566695b7a5c8Smrg    qECHO=$func_quote_arg_result
5667313a12fdSmrg    $ECHO "\
5668313a12fdSmrg
5669313a12fdSmrg# A function that is used when there is no print builtin or printf.
5670313a12fdSmrgfunc_fallback_echo ()
5671313a12fdSmrg{
5672313a12fdSmrg  eval 'cat <<_LTECHO_EOF
5673313a12fdSmrg\$1
5674313a12fdSmrg_LTECHO_EOF'
5675313a12fdSmrg}
567695b7a5c8Smrg    ECHO=$qECHO
5677313a12fdSmrg  fi
5678313a12fdSmrg
5679313a12fdSmrg# Very basic option parsing. These options are (a) specific to
5680313a12fdSmrg# the libtool wrapper, (b) are identical between the wrapper
56817cea3689Smrg# /script/ and the wrapper /executable/ that is used only on
5682313a12fdSmrg# windows platforms, and (c) all begin with the string "--lt-"
56837cea3689Smrg# (application programs are unlikely to have options that match
5684313a12fdSmrg# this pattern).
5685313a12fdSmrg#
5686313a12fdSmrg# There are only two supported options: --lt-debug and
5687313a12fdSmrg# --lt-dump-script. There is, deliberately, no --lt-help.
5688313a12fdSmrg#
5689313a12fdSmrg# The first argument to this parsing function should be the
5690313a12fdSmrg# script's $0 value, followed by "$@".
5691313a12fdSmrglt_option_debug=
5692313a12fdSmrgfunc_parse_lt_options ()
5693313a12fdSmrg{
5694313a12fdSmrg  lt_script_arg0=\$0
5695313a12fdSmrg  shift
5696313a12fdSmrg  for lt_opt
5697313a12fdSmrg  do
5698313a12fdSmrg    case \"\$lt_opt\" in
5699313a12fdSmrg    --lt-debug) lt_option_debug=1 ;;
5700313a12fdSmrg    --lt-dump-script)
5701313a12fdSmrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
5702313a12fdSmrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
5703313a12fdSmrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
5704313a12fdSmrg        cat \"\$lt_dump_D/\$lt_dump_F\"
5705313a12fdSmrg        exit 0
5706313a12fdSmrg      ;;
5707313a12fdSmrg    --lt-*)
5708313a12fdSmrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
5709313a12fdSmrg        exit 1
5710313a12fdSmrg      ;;
5711313a12fdSmrg    esac
5712313a12fdSmrg  done
5713313a12fdSmrg
5714313a12fdSmrg  # Print the debug banner immediately:
5715313a12fdSmrg  if test -n \"\$lt_option_debug\"; then
57167cea3689Smrg    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
5717313a12fdSmrg  fi
5718313a12fdSmrg}
5719313a12fdSmrg
5720313a12fdSmrg# Used when --lt-debug. Prints its arguments to stdout
5721313a12fdSmrg# (redirection is the responsibility of the caller)
5722313a12fdSmrgfunc_lt_dump_args ()
5723313a12fdSmrg{
5724313a12fdSmrg  lt_dump_args_N=1;
5725313a12fdSmrg  for lt_arg
5726313a12fdSmrg  do
57277cea3689Smrg    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
5728313a12fdSmrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
5729313a12fdSmrg  done
5730313a12fdSmrg}
5731313a12fdSmrg
5732313a12fdSmrg# Core function for launching the target application
5733313a12fdSmrgfunc_exec_program_core ()
5734313a12fdSmrg{
5735e19dfac4Smrg"
5736313a12fdSmrg  case $host in
5737313a12fdSmrg  # Backslashes separate directories on plain windows
5738ae545d91Smrg  *-*-mingw* | *-*-windows* | *-*-os2* | *-cegcc*)
5739313a12fdSmrg    $ECHO "\
5740313a12fdSmrg      if test -n \"\$lt_option_debug\"; then
57417cea3689Smrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
5742313a12fdSmrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
5743313a12fdSmrg      fi
5744313a12fdSmrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
5745313a12fdSmrg"
5746313a12fdSmrg    ;;
5747313a12fdSmrg
5748313a12fdSmrg  *)
5749313a12fdSmrg    $ECHO "\
5750313a12fdSmrg      if test -n \"\$lt_option_debug\"; then
57517cea3689Smrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
5752313a12fdSmrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
5753313a12fdSmrg      fi
5754313a12fdSmrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
5755313a12fdSmrg"
5756313a12fdSmrg    ;;
5757313a12fdSmrg  esac
5758313a12fdSmrg  $ECHO "\
5759313a12fdSmrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
5760313a12fdSmrg      exit 1
5761313a12fdSmrg}
5762313a12fdSmrg
5763313a12fdSmrg# A function to encapsulate launching the target application
5764313a12fdSmrg# Strips options in the --lt-* namespace from \$@ and
5765313a12fdSmrg# launches target application with the remaining arguments.
5766313a12fdSmrgfunc_exec_program ()
5767313a12fdSmrg{
5768313a12fdSmrg  case \" \$* \" in
5769313a12fdSmrg  *\\ --lt-*)
5770313a12fdSmrg    for lt_wr_arg
5771313a12fdSmrg    do
5772313a12fdSmrg      case \$lt_wr_arg in
5773313a12fdSmrg      --lt-*) ;;
5774313a12fdSmrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
5775313a12fdSmrg      esac
5776313a12fdSmrg      shift
5777313a12fdSmrg    done ;;
5778313a12fdSmrg  esac
5779313a12fdSmrg  func_exec_program_core \${1+\"\$@\"}
5780313a12fdSmrg}
5781313a12fdSmrg
5782313a12fdSmrg  # Parse options
5783313a12fdSmrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
578427702724Smrg
5785e19dfac4Smrg  # Find the directory that this script lives in.
5786313a12fdSmrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
5787e19dfac4Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
578827702724Smrg
5789e19dfac4Smrg  # Follow symbolic links until we get to the real thisdir.
5790313a12fdSmrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
5791e19dfac4Smrg  while test -n \"\$file\"; do
5792313a12fdSmrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
579327702724Smrg
5794e19dfac4Smrg    # If there was a directory component, then change thisdir.
5795e19dfac4Smrg    if test \"x\$destdir\" != \"x\$file\"; then
5796e19dfac4Smrg      case \"\$destdir\" in
5797e19dfac4Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
5798e19dfac4Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
5799e19dfac4Smrg      esac
5800e19dfac4Smrg    fi
580127702724Smrg
5802313a12fdSmrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
5803313a12fdSmrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
5804e19dfac4Smrg  done
580527702724Smrg
5806ae545d91Smrg  # Usually 'no', except on cygwin/mingw/windows when embedded into
5807e19dfac4Smrg  # the cwrapper.
5808313a12fdSmrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
5809e19dfac4Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
5810e19dfac4Smrg    # special case for '.'
5811e19dfac4Smrg    if test \"\$thisdir\" = \".\"; then
5812e19dfac4Smrg      thisdir=\`pwd\`
5813e19dfac4Smrg    fi
5814e19dfac4Smrg    # remove .libs from thisdir
5815e19dfac4Smrg    case \"\$thisdir\" in
5816313a12fdSmrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
5817e19dfac4Smrg    $objdir )   thisdir=. ;;
5818e19dfac4Smrg    esac
5819e19dfac4Smrg  fi
582027702724Smrg
5821e19dfac4Smrg  # Try to get the absolute directory name.
5822e19dfac4Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
5823e19dfac4Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
5824e19dfac4Smrg"
582527702724Smrg
58267cea3689Smrg	if test yes = "$fast_install"; then
5827e19dfac4Smrg	  $ECHO "\
5828e19dfac4Smrg  program=lt-'$outputname'$exeext
5829e19dfac4Smrg  progdir=\"\$thisdir/$objdir\"
583027702724Smrg
5831e19dfac4Smrg  if test ! -f \"\$progdir/\$program\" ||
58327cea3689Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
5833e19dfac4Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
583427702724Smrg
5835e19dfac4Smrg    file=\"\$\$-\$program\"
583627702724Smrg
5837e19dfac4Smrg    if test ! -d \"\$progdir\"; then
5838e19dfac4Smrg      $MKDIR \"\$progdir\"
5839e19dfac4Smrg    else
5840e19dfac4Smrg      $RM \"\$progdir/\$file\"
5841e19dfac4Smrg    fi"
584227702724Smrg
5843e19dfac4Smrg	  $ECHO "\
584427702724Smrg
5845e19dfac4Smrg    # relink executable if necessary
5846e19dfac4Smrg    if test -n \"\$relink_command\"; then
5847e19dfac4Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
5848e19dfac4Smrg      else
58497cea3689Smrg	\$ECHO \"\$relink_command_output\" >&2
5850e19dfac4Smrg	$RM \"\$progdir/\$file\"
5851e19dfac4Smrg	exit 1
5852e19dfac4Smrg      fi
5853e19dfac4Smrg    fi
585427702724Smrg
5855e19dfac4Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
5856e19dfac4Smrg    { $RM \"\$progdir/\$program\";
5857e19dfac4Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
5858e19dfac4Smrg    $RM \"\$progdir/\$file\"
5859e19dfac4Smrg  fi"
5860e19dfac4Smrg	else
5861e19dfac4Smrg	  $ECHO "\
5862e19dfac4Smrg  program='$outputname'
5863e19dfac4Smrg  progdir=\"\$thisdir/$objdir\"
5864e19dfac4Smrg"
5865e19dfac4Smrg	fi
586627702724Smrg
5867e19dfac4Smrg	$ECHO "\
586827702724Smrg
5869e19dfac4Smrg  if test -f \"\$progdir/\$program\"; then"
587027702724Smrg
5871313a12fdSmrg	# fixup the dll searchpath if we need to.
5872313a12fdSmrg	#
5873313a12fdSmrg	# Fix the DLL searchpath if we need to.  Do this before prepending
5874313a12fdSmrg	# to shlibpath, because on Windows, both are PATH and uninstalled
5875313a12fdSmrg	# libraries must come first.
5876313a12fdSmrg	if test -n "$dllsearchpath"; then
5877313a12fdSmrg	  $ECHO "\
5878313a12fdSmrg    # Add the dll search path components to the executable PATH
5879313a12fdSmrg    PATH=$dllsearchpath:\$PATH
5880313a12fdSmrg"
5881313a12fdSmrg	fi
5882313a12fdSmrg
5883e19dfac4Smrg	# Export our shlibpath_var if we have one.
58847cea3689Smrg	if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5885e19dfac4Smrg	  $ECHO "\
5886e19dfac4Smrg    # Add our own library path to $shlibpath_var
5887e19dfac4Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
588827702724Smrg
5889e19dfac4Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
5890e19dfac4Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
5891313a12fdSmrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
589227702724Smrg
5893e19dfac4Smrg    export $shlibpath_var
5894e19dfac4Smrg"
589527702724Smrg	fi
589627702724Smrg
5897e19dfac4Smrg	$ECHO "\
5898e19dfac4Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
5899e19dfac4Smrg      # Run the actual program with our arguments.
5900313a12fdSmrg      func_exec_program \${1+\"\$@\"}
5901e19dfac4Smrg    fi
5902e19dfac4Smrg  else
5903e19dfac4Smrg    # The program doesn't exist.
59047cea3689Smrg    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
5905e19dfac4Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
5906313a12fdSmrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
5907e19dfac4Smrg    exit 1
5908e19dfac4Smrg  fi
5909e19dfac4Smrgfi\
5910e19dfac4Smrg"
5911e19dfac4Smrg}
591227702724Smrg
591327702724Smrg
5914e19dfac4Smrg# func_emit_cwrapperexe_src
5915e19dfac4Smrg# emit the source code for a wrapper executable on stdout
5916e19dfac4Smrg# Must ONLY be called from within func_mode_link because
5917e19dfac4Smrg# it depends on a number of variable set therein.
5918e19dfac4Smrgfunc_emit_cwrapperexe_src ()
5919e19dfac4Smrg{
5920e19dfac4Smrg	cat <<EOF
592127702724Smrg
5922e19dfac4Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
59237cea3689Smrg   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
592427702724Smrg
5925e19dfac4Smrg   The $output program cannot be directly executed until all the libtool
5926e19dfac4Smrg   libraries that it depends on are installed.
592727702724Smrg
5928e19dfac4Smrg   This wrapper executable should never be moved out of the build directory.
5929e19dfac4Smrg   If it is, it will not operate correctly.
5930e19dfac4Smrg*/
5931e19dfac4SmrgEOF
5932e19dfac4Smrg	    cat <<"EOF"
5933313a12fdSmrg#ifdef _MSC_VER
5934313a12fdSmrg# define _CRT_SECURE_NO_DEPRECATE 1
5935313a12fdSmrg#endif
5936e19dfac4Smrg#include <stdio.h>
5937e19dfac4Smrg#include <stdlib.h>
5938ae545d91Smrg#if defined _WIN32 && !defined __GNUC__
5939e19dfac4Smrg# include <direct.h>
5940e19dfac4Smrg# include <process.h>
5941e19dfac4Smrg# include <io.h>
5942e19dfac4Smrg#else
5943e19dfac4Smrg# include <unistd.h>
5944e19dfac4Smrg# include <stdint.h>
5945e19dfac4Smrg# ifdef __CYGWIN__
5946e19dfac4Smrg#  include <io.h>
5947e19dfac4Smrg# endif
5948e19dfac4Smrg#endif
5949e19dfac4Smrg#include <malloc.h>
5950e19dfac4Smrg#include <stdarg.h>
5951e19dfac4Smrg#include <assert.h>
5952e19dfac4Smrg#include <string.h>
5953e19dfac4Smrg#include <ctype.h>
5954e19dfac4Smrg#include <errno.h>
5955e19dfac4Smrg#include <fcntl.h>
5956e19dfac4Smrg#include <sys/stat.h>
5957e19dfac4Smrg
59587cea3689Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
59597cea3689Smrg
5960313a12fdSmrg/* declarations of non-ANSI functions */
59617cea3689Smrg#if defined __MINGW32__
5962313a12fdSmrg# ifdef __STRICT_ANSI__
5963ae545d91Smrg_CRTIMP int __cdecl _putenv (const char *);
5964313a12fdSmrg# endif
59657cea3689Smrg#elif defined __CYGWIN__
5966313a12fdSmrg# ifdef __STRICT_ANSI__
5967313a12fdSmrgchar *realpath (const char *, char *);
5968313a12fdSmrgint putenv (char *);
5969313a12fdSmrgint setenv (const char *, const char *, int);
5970313a12fdSmrg# endif
59717cea3689Smrg/* #elif defined other_platform || defined ... */
5972313a12fdSmrg#endif
5973313a12fdSmrg
5974313a12fdSmrg/* portability defines, excluding path handling macros */
59757cea3689Smrg#if defined _MSC_VER
5976313a12fdSmrg# define setmode _setmode
5977313a12fdSmrg# define stat    _stat
5978313a12fdSmrg# define chmod   _chmod
5979313a12fdSmrg# define getcwd  _getcwd
5980313a12fdSmrg# define putenv  _putenv
5981313a12fdSmrg# define S_IXUSR _S_IEXEC
59827cea3689Smrg#elif defined __MINGW32__
5983313a12fdSmrg# define setmode _setmode
5984313a12fdSmrg# define stat    _stat
5985313a12fdSmrg# define chmod   _chmod
5986313a12fdSmrg# define getcwd  _getcwd
5987313a12fdSmrg# define putenv  _putenv
59887cea3689Smrg#elif defined __CYGWIN__
5989313a12fdSmrg# define HAVE_SETENV
5990313a12fdSmrg# define FOPEN_WB "wb"
59917cea3689Smrg/* #elif defined other platforms ... */
5992313a12fdSmrg#endif
5993313a12fdSmrg
59947cea3689Smrg#if defined PATH_MAX
5995e19dfac4Smrg# define LT_PATHMAX PATH_MAX
59967cea3689Smrg#elif defined MAXPATHLEN
5997e19dfac4Smrg# define LT_PATHMAX MAXPATHLEN
5998e19dfac4Smrg#else
5999e19dfac4Smrg# define LT_PATHMAX 1024
6000e19dfac4Smrg#endif
6001e19dfac4Smrg
6002e19dfac4Smrg#ifndef S_IXOTH
6003e19dfac4Smrg# define S_IXOTH 0
6004e19dfac4Smrg#endif
6005e19dfac4Smrg#ifndef S_IXGRP
6006e19dfac4Smrg# define S_IXGRP 0
6007e19dfac4Smrg#endif
6008e19dfac4Smrg
6009313a12fdSmrg/* path handling portability macros */
6010e19dfac4Smrg#ifndef DIR_SEPARATOR
6011e19dfac4Smrg# define DIR_SEPARATOR '/'
6012e19dfac4Smrg# define PATH_SEPARATOR ':'
6013e19dfac4Smrg#endif
6014e19dfac4Smrg
60157cea3689Smrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
60167cea3689Smrg  defined __OS2__
6017e19dfac4Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
6018e19dfac4Smrg# define FOPEN_WB "wb"
6019e19dfac4Smrg# ifndef DIR_SEPARATOR_2
6020e19dfac4Smrg#  define DIR_SEPARATOR_2 '\\'
6021e19dfac4Smrg# endif
6022e19dfac4Smrg# ifndef PATH_SEPARATOR_2
6023e19dfac4Smrg#  define PATH_SEPARATOR_2 ';'
6024e19dfac4Smrg# endif
6025e19dfac4Smrg#endif
6026e19dfac4Smrg
6027e19dfac4Smrg#ifndef DIR_SEPARATOR_2
6028e19dfac4Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
6029e19dfac4Smrg#else /* DIR_SEPARATOR_2 */
6030e19dfac4Smrg# define IS_DIR_SEPARATOR(ch) \
6031e19dfac4Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
6032e19dfac4Smrg#endif /* DIR_SEPARATOR_2 */
6033e19dfac4Smrg
6034e19dfac4Smrg#ifndef PATH_SEPARATOR_2
6035e19dfac4Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
6036e19dfac4Smrg#else /* PATH_SEPARATOR_2 */
6037e19dfac4Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
6038e19dfac4Smrg#endif /* PATH_SEPARATOR_2 */
6039e19dfac4Smrg
6040e19dfac4Smrg#ifndef FOPEN_WB
6041e19dfac4Smrg# define FOPEN_WB "w"
6042e19dfac4Smrg#endif
6043e19dfac4Smrg#ifndef _O_BINARY
6044e19dfac4Smrg# define _O_BINARY 0
6045e19dfac4Smrg#endif
6046e19dfac4Smrg
6047e19dfac4Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
6048e19dfac4Smrg#define XFREE(stale) do { \
60497cea3689Smrg  if (stale) { free (stale); stale = 0; } \
6050e19dfac4Smrg} while (0)
6051e19dfac4Smrg
60527cea3689Smrg#if defined LT_DEBUGWRAPPER
6053313a12fdSmrgstatic int lt_debug = 1;
6054e19dfac4Smrg#else
6055313a12fdSmrgstatic int lt_debug = 0;
6056e19dfac4Smrg#endif
6057e19dfac4Smrg
6058313a12fdSmrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
6059e19dfac4Smrg
6060e19dfac4Smrgvoid *xmalloc (size_t num);
6061e19dfac4Smrgchar *xstrdup (const char *string);
6062e19dfac4Smrgconst char *base_name (const char *name);
6063e19dfac4Smrgchar *find_executable (const char *wrapper);
6064e19dfac4Smrgchar *chase_symlinks (const char *pathspec);
6065e19dfac4Smrgint make_executable (const char *path);
6066e19dfac4Smrgint check_executable (const char *path);
6067e19dfac4Smrgchar *strendzap (char *str, const char *pat);
6068313a12fdSmrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
6069313a12fdSmrgvoid lt_fatal (const char *file, int line, const char *message, ...);
6070313a12fdSmrgstatic const char *nonnull (const char *s);
6071313a12fdSmrgstatic const char *nonempty (const char *s);
6072e19dfac4Smrgvoid lt_setenv (const char *name, const char *value);
6073e19dfac4Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
6074e19dfac4Smrgvoid lt_update_exe_path (const char *name, const char *value);
6075e19dfac4Smrgvoid lt_update_lib_path (const char *name, const char *value);
6076313a12fdSmrgchar **prepare_spawn (char **argv);
6077313a12fdSmrgvoid lt_dump_script (FILE *f);
6078e19dfac4SmrgEOF
6079e19dfac4Smrg
6080e19dfac4Smrg	    cat <<EOF
60817cea3689Smrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
60827cea3689Smrg# define externally_visible volatile
60837cea3689Smrg#else
60847cea3689Smrg# define externally_visible __attribute__((externally_visible)) volatile
60857cea3689Smrg#endif
60867cea3689Smrgexternally_visible const char * MAGIC_EXE = "$magic_exe";
6087e19dfac4Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
6088e19dfac4SmrgEOF
6089e19dfac4Smrg
60907cea3689Smrg	    if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
6091313a12fdSmrg              func_to_host_path "$temp_rpath"
6092e19dfac4Smrg	      cat <<EOF
6093313a12fdSmrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
609427702724SmrgEOF
609527702724Smrg	    else
6096e19dfac4Smrg	      cat <<"EOF"
6097e19dfac4Smrgconst char * LIB_PATH_VALUE   = "";
6098e19dfac4SmrgEOF
609927702724Smrg	    fi
6100e19dfac4Smrg
6101e19dfac4Smrg	    if test -n "$dllsearchpath"; then
6102313a12fdSmrg              func_to_host_path "$dllsearchpath:"
6103e19dfac4Smrg	      cat <<EOF
6104e19dfac4Smrgconst char * EXE_PATH_VARNAME = "PATH";
6105313a12fdSmrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
6106e19dfac4SmrgEOF
610727702724Smrg	    else
6108e19dfac4Smrg	      cat <<"EOF"
6109e19dfac4Smrgconst char * EXE_PATH_VARNAME = "";
6110e19dfac4Smrgconst char * EXE_PATH_VALUE   = "";
6111e19dfac4SmrgEOF
611227702724Smrg	    fi
6113e19dfac4Smrg
61147cea3689Smrg	    if test yes = "$fast_install"; then
6115e19dfac4Smrg	      cat <<EOF
6116e19dfac4Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
6117e19dfac4SmrgEOF
611827702724Smrg	    else
6119e19dfac4Smrg	      cat <<EOF
6120e19dfac4Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
6121e19dfac4SmrgEOF
612227702724Smrg	    fi
612327702724Smrg
612427702724Smrg
6125e19dfac4Smrg	    cat <<"EOF"
612627702724Smrg
6127e19dfac4Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
612827702724Smrg
6129e19dfac4Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
6130e19dfac4Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
6131313a12fdSmrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
613227702724Smrg
6133e19dfac4Smrgint
6134e19dfac4Smrgmain (int argc, char *argv[])
6135e19dfac4Smrg{
6136e19dfac4Smrg  char **newargz;
6137e19dfac4Smrg  int  newargc;
6138e19dfac4Smrg  char *tmp_pathspec;
6139e19dfac4Smrg  char *actual_cwrapper_path;
6140e19dfac4Smrg  char *actual_cwrapper_name;
6141e19dfac4Smrg  char *target_name;
6142e19dfac4Smrg  char *lt_argv_zero;
61437cea3689Smrg  int rval = 127;
614427702724Smrg
6145e19dfac4Smrg  int i;
614627702724Smrg
6147e19dfac4Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
61487cea3689Smrg  newargz = XMALLOC (char *, (size_t) argc + 1);
614927702724Smrg
6150313a12fdSmrg  /* very simple arg parsing; don't want to rely on getopt
6151313a12fdSmrg   * also, copy all non cwrapper options to newargz, except
6152313a12fdSmrg   * argz[0], which is handled differently
6153313a12fdSmrg   */
6154313a12fdSmrg  newargc=0;
6155e19dfac4Smrg  for (i = 1; i < argc; i++)
6156e19dfac4Smrg    {
61577cea3689Smrg      if (STREQ (argv[i], dumpscript_opt))
6158e19dfac4Smrg	{
6159e19dfac4SmrgEOF
61607cea3689Smrg	    case $host in
6161ae545d91Smrg	      *mingw* | *windows* | *cygwin* )
6162e19dfac4Smrg		# make stdout use "unix" line endings
6163e19dfac4Smrg		echo "          setmode(1,_O_BINARY);"
6164e19dfac4Smrg		;;
6165e19dfac4Smrg	      esac
616627702724Smrg
6167e19dfac4Smrg	    cat <<"EOF"
6168313a12fdSmrg	  lt_dump_script (stdout);
6169e19dfac4Smrg	  return 0;
6170e19dfac4Smrg	}
61717cea3689Smrg      if (STREQ (argv[i], debug_opt))
6172313a12fdSmrg	{
6173313a12fdSmrg          lt_debug = 1;
6174313a12fdSmrg          continue;
6175313a12fdSmrg	}
61767cea3689Smrg      if (STREQ (argv[i], ltwrapper_option_prefix))
6177313a12fdSmrg        {
6178313a12fdSmrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
6179313a12fdSmrg             namespace, but it is not one of the ones we know about and
6180ae545d91Smrg             have already dealt with, above (including dump-script), then
6181313a12fdSmrg             report an error. Otherwise, targets might begin to believe
6182313a12fdSmrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
6183313a12fdSmrg             namespace. The first time any user complains about this, we'll
6184313a12fdSmrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
6185313a12fdSmrg             or a configure.ac-settable value.
6186313a12fdSmrg           */
6187313a12fdSmrg          lt_fatal (__FILE__, __LINE__,
6188313a12fdSmrg		    "unrecognized %s option: '%s'",
6189313a12fdSmrg                    ltwrapper_option_prefix, argv[i]);
6190313a12fdSmrg        }
6191313a12fdSmrg      /* otherwise ... */
6192313a12fdSmrg      newargz[++newargc] = xstrdup (argv[i]);
6193e19dfac4Smrg    }
6194313a12fdSmrg  newargz[++newargc] = NULL;
6195313a12fdSmrg
6196313a12fdSmrgEOF
6197313a12fdSmrg	    cat <<EOF
6198313a12fdSmrg  /* The GNU banner must be the first non-error debug message */
61997cea3689Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
6200313a12fdSmrgEOF
6201313a12fdSmrg	    cat <<"EOF"
6202313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
6203313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
620427702724Smrg
6205e19dfac4Smrg  tmp_pathspec = find_executable (argv[0]);
6206e19dfac4Smrg  if (tmp_pathspec == NULL)
6207313a12fdSmrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
6208313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
6209313a12fdSmrg                  "(main) found exe (before symlink chase) at: %s\n",
6210313a12fdSmrg		  tmp_pathspec);
6211e19dfac4Smrg
6212e19dfac4Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
6213313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
6214313a12fdSmrg                  "(main) found exe (after symlink chase) at: %s\n",
6215313a12fdSmrg		  actual_cwrapper_path);
6216e19dfac4Smrg  XFREE (tmp_pathspec);
6217e19dfac4Smrg
6218313a12fdSmrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
6219e19dfac4Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
6220e19dfac4Smrg
6221e19dfac4Smrg  /* wrapper name transforms */
6222e19dfac4Smrg  strendzap (actual_cwrapper_name, ".exe");
6223e19dfac4Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
6224e19dfac4Smrg  XFREE (actual_cwrapper_name);
6225e19dfac4Smrg  actual_cwrapper_name = tmp_pathspec;
6226e19dfac4Smrg  tmp_pathspec = 0;
6227e19dfac4Smrg
6228e19dfac4Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
6229e19dfac4Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
6230e19dfac4Smrg  strendzap (target_name, ".exe");
6231e19dfac4Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
6232e19dfac4Smrg  XFREE (target_name);
6233e19dfac4Smrg  target_name = tmp_pathspec;
6234e19dfac4Smrg  tmp_pathspec = 0;
6235e19dfac4Smrg
6236313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
6237313a12fdSmrg		  "(main) libtool target name: %s\n",
6238313a12fdSmrg		  target_name);
6239e19dfac4SmrgEOF
624027702724Smrg
6241e19dfac4Smrg	    cat <<EOF
6242e19dfac4Smrg  newargz[0] =
6243e19dfac4Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
6244e19dfac4Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
6245e19dfac4Smrg  strcpy (newargz[0], actual_cwrapper_path);
6246e19dfac4Smrg  strcat (newargz[0], "$objdir");
6247e19dfac4Smrg  strcat (newargz[0], "/");
6248e19dfac4SmrgEOF
624927702724Smrg
6250e19dfac4Smrg	    cat <<"EOF"
6251e19dfac4Smrg  /* stop here, and copy so we don't have to do this twice */
6252e19dfac4Smrg  tmp_pathspec = xstrdup (newargz[0]);
625327702724Smrg
6254e19dfac4Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
6255e19dfac4Smrg  strcat (newargz[0], actual_cwrapper_name);
625627702724Smrg
6257e19dfac4Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
6258e19dfac4Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
6259e19dfac4Smrg  XFREE (tmp_pathspec);
6260e19dfac4Smrg  tmp_pathspec = NULL;
6261e19dfac4SmrgEOF
626227702724Smrg
6263e19dfac4Smrg	    case $host_os in
6264ae545d91Smrg	      mingw* | windows*)
6265e19dfac4Smrg	    cat <<"EOF"
6266e19dfac4Smrg  {
6267e19dfac4Smrg    char* p;
6268e19dfac4Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
6269e19dfac4Smrg      {
6270e19dfac4Smrg	*p = '/';
6271e19dfac4Smrg      }
6272e19dfac4Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
6273e19dfac4Smrg      {
6274e19dfac4Smrg	*p = '/';
6275e19dfac4Smrg      }
6276e19dfac4Smrg  }
6277e19dfac4SmrgEOF
6278e19dfac4Smrg	    ;;
6279e19dfac4Smrg	    esac
628027702724Smrg
6281e19dfac4Smrg	    cat <<"EOF"
6282e19dfac4Smrg  XFREE (target_name);
6283e19dfac4Smrg  XFREE (actual_cwrapper_path);
6284e19dfac4Smrg  XFREE (actual_cwrapper_name);
628527702724Smrg
6286e19dfac4Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
6287e19dfac4Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
6288313a12fdSmrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
6289313a12fdSmrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
6290313a12fdSmrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
6291313a12fdSmrg     libraries must come first. */
6292e19dfac4Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
6293313a12fdSmrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
629427702724Smrg
6295313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
6296313a12fdSmrg		  nonnull (lt_argv_zero));
6297e19dfac4Smrg  for (i = 0; i < newargc; i++)
6298e19dfac4Smrg    {
6299313a12fdSmrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
6300313a12fdSmrg		      i, nonnull (newargz[i]));
6301e19dfac4Smrg    }
630227702724Smrg
6303e19dfac4SmrgEOF
630427702724Smrg
6305e19dfac4Smrg	    case $host_os in
6306ae545d91Smrg	      mingw* | windows*)
6307e19dfac4Smrg		cat <<"EOF"
6308e19dfac4Smrg  /* execv doesn't actually work on mingw as expected on unix */
6309313a12fdSmrg  newargz = prepare_spawn (newargz);
63107cea3689Smrg  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
6311e19dfac4Smrg  if (rval == -1)
6312e19dfac4Smrg    {
6313e19dfac4Smrg      /* failed to start process */
6314313a12fdSmrg      lt_debugprintf (__FILE__, __LINE__,
6315313a12fdSmrg		      "(main) failed to launch target \"%s\": %s\n",
6316313a12fdSmrg		      lt_argv_zero, nonnull (strerror (errno)));
6317e19dfac4Smrg      return 127;
6318e19dfac4Smrg    }
6319e19dfac4Smrg  return rval;
6320e19dfac4SmrgEOF
6321e19dfac4Smrg		;;
6322e19dfac4Smrg	      *)
6323e19dfac4Smrg		cat <<"EOF"
6324e19dfac4Smrg  execv (lt_argv_zero, newargz);
6325e19dfac4Smrg  return rval; /* =127, but avoids unused variable warning */
6326e19dfac4SmrgEOF
6327e19dfac4Smrg		;;
6328e19dfac4Smrg	    esac
632927702724Smrg
6330e19dfac4Smrg	    cat <<"EOF"
6331e19dfac4Smrg}
633227702724Smrg
6333e19dfac4Smrgvoid *
6334e19dfac4Smrgxmalloc (size_t num)
6335e19dfac4Smrg{
6336e19dfac4Smrg  void *p = (void *) malloc (num);
6337e19dfac4Smrg  if (!p)
6338313a12fdSmrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
633927702724Smrg
6340e19dfac4Smrg  return p;
6341e19dfac4Smrg}
634227702724Smrg
6343e19dfac4Smrgchar *
6344e19dfac4Smrgxstrdup (const char *string)
6345e19dfac4Smrg{
6346e19dfac4Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
6347e19dfac4Smrg			  string) : NULL;
6348e19dfac4Smrg}
634927702724Smrg
6350e19dfac4Smrgconst char *
6351e19dfac4Smrgbase_name (const char *name)
6352e19dfac4Smrg{
6353e19dfac4Smrg  const char *base;
635427702724Smrg
63557cea3689Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6356e19dfac4Smrg  /* Skip over the disk name in MSDOS pathnames. */
6357e19dfac4Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
6358e19dfac4Smrg    name += 2;
6359e19dfac4Smrg#endif
636027702724Smrg
6361e19dfac4Smrg  for (base = name; *name; name++)
6362e19dfac4Smrg    if (IS_DIR_SEPARATOR (*name))
6363e19dfac4Smrg      base = name + 1;
6364e19dfac4Smrg  return base;
6365e19dfac4Smrg}
636627702724Smrg
6367e19dfac4Smrgint
6368e19dfac4Smrgcheck_executable (const char *path)
6369e19dfac4Smrg{
6370e19dfac4Smrg  struct stat st;
637127702724Smrg
6372313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
6373313a12fdSmrg                  nonempty (path));
6374e19dfac4Smrg  if ((!path) || (!*path))
6375e19dfac4Smrg    return 0;
637627702724Smrg
6377e19dfac4Smrg  if ((stat (path, &st) >= 0)
6378e19dfac4Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
6379e19dfac4Smrg    return 1;
6380e19dfac4Smrg  else
6381e19dfac4Smrg    return 0;
6382e19dfac4Smrg}
638327702724Smrg
6384e19dfac4Smrgint
6385e19dfac4Smrgmake_executable (const char *path)
6386e19dfac4Smrg{
6387e19dfac4Smrg  int rval = 0;
6388e19dfac4Smrg  struct stat st;
638927702724Smrg
6390313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
6391313a12fdSmrg                  nonempty (path));
6392e19dfac4Smrg  if ((!path) || (!*path))
6393e19dfac4Smrg    return 0;
639427702724Smrg
6395e19dfac4Smrg  if (stat (path, &st) >= 0)
6396e19dfac4Smrg    {
6397e19dfac4Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
6398e19dfac4Smrg    }
6399e19dfac4Smrg  return rval;
6400e19dfac4Smrg}
640127702724Smrg
6402e19dfac4Smrg/* Searches for the full path of the wrapper.  Returns
6403e19dfac4Smrg   newly allocated full path name if found, NULL otherwise
6404e19dfac4Smrg   Does not chase symlinks, even on platforms that support them.
6405e19dfac4Smrg*/
6406e19dfac4Smrgchar *
6407e19dfac4Smrgfind_executable (const char *wrapper)
6408e19dfac4Smrg{
6409e19dfac4Smrg  int has_slash = 0;
6410e19dfac4Smrg  const char *p;
6411e19dfac4Smrg  const char *p_next;
6412e19dfac4Smrg  /* static buffer for getcwd */
6413e19dfac4Smrg  char tmp[LT_PATHMAX + 1];
64147cea3689Smrg  size_t tmp_len;
6415e19dfac4Smrg  char *concat_name;
641627702724Smrg
6417313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
6418313a12fdSmrg                  nonempty (wrapper));
641927702724Smrg
6420e19dfac4Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
6421e19dfac4Smrg    return NULL;
642227702724Smrg
6423e19dfac4Smrg  /* Absolute path? */
64247cea3689Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6425e19dfac4Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
6426e19dfac4Smrg    {
6427e19dfac4Smrg      concat_name = xstrdup (wrapper);
6428e19dfac4Smrg      if (check_executable (concat_name))
6429e19dfac4Smrg	return concat_name;
6430e19dfac4Smrg      XFREE (concat_name);
6431e19dfac4Smrg    }
6432e19dfac4Smrg  else
6433e19dfac4Smrg    {
6434e19dfac4Smrg#endif
6435e19dfac4Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
6436e19dfac4Smrg	{
6437e19dfac4Smrg	  concat_name = xstrdup (wrapper);
6438e19dfac4Smrg	  if (check_executable (concat_name))
6439e19dfac4Smrg	    return concat_name;
6440e19dfac4Smrg	  XFREE (concat_name);
6441e19dfac4Smrg	}
64427cea3689Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6443e19dfac4Smrg    }
6444e19dfac4Smrg#endif
644527702724Smrg
6446e19dfac4Smrg  for (p = wrapper; *p; p++)
6447e19dfac4Smrg    if (*p == '/')
6448e19dfac4Smrg      {
6449e19dfac4Smrg	has_slash = 1;
6450e19dfac4Smrg	break;
6451e19dfac4Smrg      }
6452e19dfac4Smrg  if (!has_slash)
6453e19dfac4Smrg    {
6454e19dfac4Smrg      /* no slashes; search PATH */
6455e19dfac4Smrg      const char *path = getenv ("PATH");
6456e19dfac4Smrg      if (path != NULL)
6457e19dfac4Smrg	{
6458e19dfac4Smrg	  for (p = path; *p; p = p_next)
6459e19dfac4Smrg	    {
6460e19dfac4Smrg	      const char *q;
6461e19dfac4Smrg	      size_t p_len;
6462e19dfac4Smrg	      for (q = p; *q; q++)
6463e19dfac4Smrg		if (IS_PATH_SEPARATOR (*q))
6464e19dfac4Smrg		  break;
64657cea3689Smrg	      p_len = (size_t) (q - p);
6466e19dfac4Smrg	      p_next = (*q == '\0' ? q : q + 1);
6467e19dfac4Smrg	      if (p_len == 0)
6468e19dfac4Smrg		{
6469e19dfac4Smrg		  /* empty path: current directory */
6470e19dfac4Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
6471313a12fdSmrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6472313a12fdSmrg                              nonnull (strerror (errno)));
6473e19dfac4Smrg		  tmp_len = strlen (tmp);
6474e19dfac4Smrg		  concat_name =
6475e19dfac4Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6476e19dfac4Smrg		  memcpy (concat_name, tmp, tmp_len);
6477e19dfac4Smrg		  concat_name[tmp_len] = '/';
6478e19dfac4Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
6479e19dfac4Smrg		}
6480e19dfac4Smrg	      else
6481e19dfac4Smrg		{
6482e19dfac4Smrg		  concat_name =
6483e19dfac4Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
6484e19dfac4Smrg		  memcpy (concat_name, p, p_len);
6485e19dfac4Smrg		  concat_name[p_len] = '/';
6486e19dfac4Smrg		  strcpy (concat_name + p_len + 1, wrapper);
6487e19dfac4Smrg		}
6488e19dfac4Smrg	      if (check_executable (concat_name))
6489e19dfac4Smrg		return concat_name;
6490e19dfac4Smrg	      XFREE (concat_name);
6491e19dfac4Smrg	    }
6492e19dfac4Smrg	}
6493e19dfac4Smrg      /* not found in PATH; assume curdir */
6494e19dfac4Smrg    }
6495e19dfac4Smrg  /* Relative path | not found in path: prepend cwd */
6496e19dfac4Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
6497313a12fdSmrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6498313a12fdSmrg              nonnull (strerror (errno)));
6499e19dfac4Smrg  tmp_len = strlen (tmp);
6500e19dfac4Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6501e19dfac4Smrg  memcpy (concat_name, tmp, tmp_len);
6502e19dfac4Smrg  concat_name[tmp_len] = '/';
6503e19dfac4Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
650427702724Smrg
6505e19dfac4Smrg  if (check_executable (concat_name))
6506e19dfac4Smrg    return concat_name;
6507e19dfac4Smrg  XFREE (concat_name);
6508e19dfac4Smrg  return NULL;
6509e19dfac4Smrg}
651027702724Smrg
6511e19dfac4Smrgchar *
6512e19dfac4Smrgchase_symlinks (const char *pathspec)
6513e19dfac4Smrg{
6514e19dfac4Smrg#ifndef S_ISLNK
6515e19dfac4Smrg  return xstrdup (pathspec);
6516e19dfac4Smrg#else
6517e19dfac4Smrg  char buf[LT_PATHMAX];
6518e19dfac4Smrg  struct stat s;
6519e19dfac4Smrg  char *tmp_pathspec = xstrdup (pathspec);
6520e19dfac4Smrg  char *p;
6521e19dfac4Smrg  int has_symlinks = 0;
6522e19dfac4Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
6523e19dfac4Smrg    {
6524313a12fdSmrg      lt_debugprintf (__FILE__, __LINE__,
6525313a12fdSmrg		      "checking path component for symlinks: %s\n",
6526313a12fdSmrg		      tmp_pathspec);
6527e19dfac4Smrg      if (lstat (tmp_pathspec, &s) == 0)
6528e19dfac4Smrg	{
6529e19dfac4Smrg	  if (S_ISLNK (s.st_mode) != 0)
6530e19dfac4Smrg	    {
6531e19dfac4Smrg	      has_symlinks = 1;
6532e19dfac4Smrg	      break;
6533e19dfac4Smrg	    }
653427702724Smrg
6535e19dfac4Smrg	  /* search backwards for last DIR_SEPARATOR */
6536e19dfac4Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
6537e19dfac4Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6538e19dfac4Smrg	    p--;
6539e19dfac4Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6540e19dfac4Smrg	    {
6541e19dfac4Smrg	      /* no more DIR_SEPARATORS left */
6542e19dfac4Smrg	      break;
6543e19dfac4Smrg	    }
6544e19dfac4Smrg	  *p = '\0';
6545e19dfac4Smrg	}
6546e19dfac4Smrg      else
6547e19dfac4Smrg	{
6548313a12fdSmrg	  lt_fatal (__FILE__, __LINE__,
6549313a12fdSmrg		    "error accessing file \"%s\": %s",
6550313a12fdSmrg		    tmp_pathspec, nonnull (strerror (errno)));
6551e19dfac4Smrg	}
6552e19dfac4Smrg    }
6553e19dfac4Smrg  XFREE (tmp_pathspec);
655427702724Smrg
6555e19dfac4Smrg  if (!has_symlinks)
6556e19dfac4Smrg    {
6557e19dfac4Smrg      return xstrdup (pathspec);
6558e19dfac4Smrg    }
655927702724Smrg
6560e19dfac4Smrg  tmp_pathspec = realpath (pathspec, buf);
6561e19dfac4Smrg  if (tmp_pathspec == 0)
6562e19dfac4Smrg    {
6563313a12fdSmrg      lt_fatal (__FILE__, __LINE__,
6564313a12fdSmrg		"could not follow symlinks for %s", pathspec);
6565e19dfac4Smrg    }
6566e19dfac4Smrg  return xstrdup (tmp_pathspec);
6567e19dfac4Smrg#endif
6568e19dfac4Smrg}
656927702724Smrg
6570e19dfac4Smrgchar *
6571e19dfac4Smrgstrendzap (char *str, const char *pat)
6572e19dfac4Smrg{
6573e19dfac4Smrg  size_t len, patlen;
657427702724Smrg
6575e19dfac4Smrg  assert (str != NULL);
6576e19dfac4Smrg  assert (pat != NULL);
657727702724Smrg
6578e19dfac4Smrg  len = strlen (str);
6579e19dfac4Smrg  patlen = strlen (pat);
658027702724Smrg
6581e19dfac4Smrg  if (patlen <= len)
6582e19dfac4Smrg    {
6583e19dfac4Smrg      str += len - patlen;
65847cea3689Smrg      if (STREQ (str, pat))
6585e19dfac4Smrg	*str = '\0';
6586e19dfac4Smrg    }
6587e19dfac4Smrg  return str;
6588e19dfac4Smrg}
658927702724Smrg
6590313a12fdSmrgvoid
6591313a12fdSmrglt_debugprintf (const char *file, int line, const char *fmt, ...)
6592313a12fdSmrg{
6593313a12fdSmrg  va_list args;
6594313a12fdSmrg  if (lt_debug)
6595313a12fdSmrg    {
6596313a12fdSmrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
6597313a12fdSmrg      va_start (args, fmt);
6598313a12fdSmrg      (void) vfprintf (stderr, fmt, args);
6599313a12fdSmrg      va_end (args);
6600313a12fdSmrg    }
6601313a12fdSmrg}
6602313a12fdSmrg
6603e19dfac4Smrgstatic void
6604313a12fdSmrglt_error_core (int exit_status, const char *file,
6605313a12fdSmrg	       int line, const char *mode,
6606e19dfac4Smrg	       const char *message, va_list ap)
6607e19dfac4Smrg{
6608313a12fdSmrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
6609e19dfac4Smrg  vfprintf (stderr, message, ap);
6610e19dfac4Smrg  fprintf (stderr, ".\n");
661127702724Smrg
6612e19dfac4Smrg  if (exit_status >= 0)
6613e19dfac4Smrg    exit (exit_status);
6614e19dfac4Smrg}
661527702724Smrg
6616e19dfac4Smrgvoid
6617313a12fdSmrglt_fatal (const char *file, int line, const char *message, ...)
6618e19dfac4Smrg{
6619e19dfac4Smrg  va_list ap;
6620e19dfac4Smrg  va_start (ap, message);
6621313a12fdSmrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
6622e19dfac4Smrg  va_end (ap);
6623e19dfac4Smrg}
662427702724Smrg
6625313a12fdSmrgstatic const char *
6626313a12fdSmrgnonnull (const char *s)
6627313a12fdSmrg{
6628313a12fdSmrg  return s ? s : "(null)";
6629313a12fdSmrg}
6630313a12fdSmrg
6631313a12fdSmrgstatic const char *
6632313a12fdSmrgnonempty (const char *s)
6633313a12fdSmrg{
6634313a12fdSmrg  return (s && !*s) ? "(empty)" : nonnull (s);
6635313a12fdSmrg}
6636313a12fdSmrg
6637e19dfac4Smrgvoid
6638e19dfac4Smrglt_setenv (const char *name, const char *value)
6639e19dfac4Smrg{
6640313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
6641313a12fdSmrg		  "(lt_setenv) setting '%s' to '%s'\n",
6642313a12fdSmrg                  nonnull (name), nonnull (value));
6643e19dfac4Smrg  {
6644e19dfac4Smrg#ifdef HAVE_SETENV
6645e19dfac4Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
6646e19dfac4Smrg    char *str = xstrdup (value);
6647e19dfac4Smrg    setenv (name, str, 1);
6648e19dfac4Smrg#else
66497cea3689Smrg    size_t len = strlen (name) + 1 + strlen (value) + 1;
6650e19dfac4Smrg    char *str = XMALLOC (char, len);
6651e19dfac4Smrg    sprintf (str, "%s=%s", name, value);
6652e19dfac4Smrg    if (putenv (str) != EXIT_SUCCESS)
6653e19dfac4Smrg      {
6654e19dfac4Smrg        XFREE (str);
6655e19dfac4Smrg      }
6656e19dfac4Smrg#endif
6657e19dfac4Smrg  }
6658e19dfac4Smrg}
665927702724Smrg
6660e19dfac4Smrgchar *
6661e19dfac4Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
6662e19dfac4Smrg{
6663e19dfac4Smrg  char *new_value;
6664e19dfac4Smrg  if (orig_value && *orig_value)
6665e19dfac4Smrg    {
66667cea3689Smrg      size_t orig_value_len = strlen (orig_value);
66677cea3689Smrg      size_t add_len = strlen (add);
6668e19dfac4Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
6669e19dfac4Smrg      if (to_end)
6670e19dfac4Smrg        {
6671e19dfac4Smrg          strcpy (new_value, orig_value);
6672e19dfac4Smrg          strcpy (new_value + orig_value_len, add);
6673e19dfac4Smrg        }
6674e19dfac4Smrg      else
6675e19dfac4Smrg        {
6676e19dfac4Smrg          strcpy (new_value, add);
6677e19dfac4Smrg          strcpy (new_value + add_len, orig_value);
6678e19dfac4Smrg        }
6679e19dfac4Smrg    }
6680e19dfac4Smrg  else
6681e19dfac4Smrg    {
6682e19dfac4Smrg      new_value = xstrdup (add);
6683e19dfac4Smrg    }
6684e19dfac4Smrg  return new_value;
6685e19dfac4Smrg}
668627702724Smrg
6687e19dfac4Smrgvoid
6688e19dfac4Smrglt_update_exe_path (const char *name, const char *value)
6689e19dfac4Smrg{
6690313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
6691313a12fdSmrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
6692313a12fdSmrg                  nonnull (name), nonnull (value));
669327702724Smrg
6694e19dfac4Smrg  if (name && *name && value && *value)
6695e19dfac4Smrg    {
6696e19dfac4Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
6697e19dfac4Smrg      /* some systems can't cope with a ':'-terminated path #' */
66987cea3689Smrg      size_t len = strlen (new_value);
66997cea3689Smrg      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
6700e19dfac4Smrg        {
67017cea3689Smrg          new_value[--len] = '\0';
6702e19dfac4Smrg        }
6703e19dfac4Smrg      lt_setenv (name, new_value);
6704e19dfac4Smrg      XFREE (new_value);
6705e19dfac4Smrg    }
6706e19dfac4Smrg}
670727702724Smrg
6708e19dfac4Smrgvoid
6709e19dfac4Smrglt_update_lib_path (const char *name, const char *value)
6710e19dfac4Smrg{
6711313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
6712313a12fdSmrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
6713313a12fdSmrg                  nonnull (name), nonnull (value));
671427702724Smrg
6715e19dfac4Smrg  if (name && *name && value && *value)
6716e19dfac4Smrg    {
6717e19dfac4Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
6718e19dfac4Smrg      lt_setenv (name, new_value);
6719e19dfac4Smrg      XFREE (new_value);
6720e19dfac4Smrg    }
6721e19dfac4Smrg}
672227702724Smrg
6723313a12fdSmrgEOF
6724313a12fdSmrg	    case $host_os in
6725ae545d91Smrg	      mingw* | windows*)
6726313a12fdSmrg		cat <<"EOF"
6727313a12fdSmrg
6728313a12fdSmrg/* Prepares an argument vector before calling spawn().
6729313a12fdSmrg   Note that spawn() does not by itself call the command interpreter
6730313a12fdSmrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
6731313a12fdSmrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
6732313a12fdSmrg         GetVersionEx(&v);
6733313a12fdSmrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
6734313a12fdSmrg      }) ? "cmd.exe" : "command.com").
6735313a12fdSmrg   Instead it simply concatenates the arguments, separated by ' ', and calls
6736313a12fdSmrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
6737313a12fdSmrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
6738313a12fdSmrg   special way:
6739313a12fdSmrg   - Space and tab are interpreted as delimiters. They are not treated as
6740313a12fdSmrg     delimiters if they are surrounded by double quotes: "...".
6741313a12fdSmrg   - Unescaped double quotes are removed from the input. Their only effect is
6742313a12fdSmrg     that within double quotes, space and tab are treated like normal
6743313a12fdSmrg     characters.
6744313a12fdSmrg   - Backslashes not followed by double quotes are not special.
6745313a12fdSmrg   - But 2*n+1 backslashes followed by a double quote become
6746313a12fdSmrg     n backslashes followed by a double quote (n >= 0):
6747313a12fdSmrg       \" -> "
6748313a12fdSmrg       \\\" -> \"
6749313a12fdSmrg       \\\\\" -> \\"
6750313a12fdSmrg */
6751313a12fdSmrg#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"
6752313a12fdSmrg#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"
6753313a12fdSmrgchar **
6754313a12fdSmrgprepare_spawn (char **argv)
6755313a12fdSmrg{
6756313a12fdSmrg  size_t argc;
6757313a12fdSmrg  char **new_argv;
6758313a12fdSmrg  size_t i;
6759313a12fdSmrg
6760313a12fdSmrg  /* Count number of arguments.  */
6761313a12fdSmrg  for (argc = 0; argv[argc] != NULL; argc++)
6762313a12fdSmrg    ;
6763313a12fdSmrg
6764313a12fdSmrg  /* Allocate new argument vector.  */
6765313a12fdSmrg  new_argv = XMALLOC (char *, argc + 1);
6766313a12fdSmrg
6767313a12fdSmrg  /* Put quoted arguments into the new argument vector.  */
6768313a12fdSmrg  for (i = 0; i < argc; i++)
6769313a12fdSmrg    {
6770313a12fdSmrg      const char *string = argv[i];
6771313a12fdSmrg
6772313a12fdSmrg      if (string[0] == '\0')
6773313a12fdSmrg	new_argv[i] = xstrdup ("\"\"");
6774313a12fdSmrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
6775313a12fdSmrg	{
6776313a12fdSmrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
6777313a12fdSmrg	  size_t length;
6778313a12fdSmrg	  unsigned int backslashes;
6779313a12fdSmrg	  const char *s;
6780313a12fdSmrg	  char *quoted_string;
6781313a12fdSmrg	  char *p;
6782313a12fdSmrg
6783313a12fdSmrg	  length = 0;
6784313a12fdSmrg	  backslashes = 0;
6785313a12fdSmrg	  if (quote_around)
6786313a12fdSmrg	    length++;
6787313a12fdSmrg	  for (s = string; *s != '\0'; s++)
6788313a12fdSmrg	    {
6789313a12fdSmrg	      char c = *s;
6790313a12fdSmrg	      if (c == '"')
6791313a12fdSmrg		length += backslashes + 1;
6792313a12fdSmrg	      length++;
6793313a12fdSmrg	      if (c == '\\')
6794313a12fdSmrg		backslashes++;
6795313a12fdSmrg	      else
6796313a12fdSmrg		backslashes = 0;
6797313a12fdSmrg	    }
6798313a12fdSmrg	  if (quote_around)
6799313a12fdSmrg	    length += backslashes + 1;
6800313a12fdSmrg
6801313a12fdSmrg	  quoted_string = XMALLOC (char, length + 1);
6802313a12fdSmrg
6803313a12fdSmrg	  p = quoted_string;
6804313a12fdSmrg	  backslashes = 0;
6805313a12fdSmrg	  if (quote_around)
6806313a12fdSmrg	    *p++ = '"';
6807313a12fdSmrg	  for (s = string; *s != '\0'; s++)
6808313a12fdSmrg	    {
6809313a12fdSmrg	      char c = *s;
6810313a12fdSmrg	      if (c == '"')
6811313a12fdSmrg		{
6812313a12fdSmrg		  unsigned int j;
6813313a12fdSmrg		  for (j = backslashes + 1; j > 0; j--)
6814313a12fdSmrg		    *p++ = '\\';
6815313a12fdSmrg		}
6816313a12fdSmrg	      *p++ = c;
6817313a12fdSmrg	      if (c == '\\')
6818313a12fdSmrg		backslashes++;
6819313a12fdSmrg	      else
6820313a12fdSmrg		backslashes = 0;
6821313a12fdSmrg	    }
6822313a12fdSmrg	  if (quote_around)
6823313a12fdSmrg	    {
6824313a12fdSmrg	      unsigned int j;
6825313a12fdSmrg	      for (j = backslashes; j > 0; j--)
6826313a12fdSmrg		*p++ = '\\';
6827313a12fdSmrg	      *p++ = '"';
6828313a12fdSmrg	    }
6829313a12fdSmrg	  *p = '\0';
6830313a12fdSmrg
6831313a12fdSmrg	  new_argv[i] = quoted_string;
6832313a12fdSmrg	}
6833313a12fdSmrg      else
6834313a12fdSmrg	new_argv[i] = (char *) string;
6835313a12fdSmrg    }
6836313a12fdSmrg  new_argv[argc] = NULL;
6837313a12fdSmrg
6838313a12fdSmrg  return new_argv;
6839313a12fdSmrg}
6840313a12fdSmrgEOF
6841313a12fdSmrg		;;
6842313a12fdSmrg	    esac
684327702724Smrg
6844313a12fdSmrg            cat <<"EOF"
6845313a12fdSmrgvoid lt_dump_script (FILE* f)
6846313a12fdSmrg{
6847313a12fdSmrgEOF
6848313a12fdSmrg	    func_emit_wrapper yes |
6849313a12fdSmrg	      $SED -n -e '
6850313a12fdSmrgs/^\(.\{79\}\)\(..*\)/\1\
6851313a12fdSmrg\2/
6852313a12fdSmrgh
6853313a12fdSmrgs/\([\\"]\)/\\\1/g
6854313a12fdSmrgs/$/\\n/
6855313a12fdSmrgs/\([^\n]*\).*/  fputs ("\1", f);/p
6856313a12fdSmrgg
6857313a12fdSmrgD'
6858313a12fdSmrg            cat <<"EOF"
6859313a12fdSmrg}
6860e19dfac4SmrgEOF
6861e19dfac4Smrg}
6862e19dfac4Smrg# end: func_emit_cwrapperexe_src
686327702724Smrg
6864313a12fdSmrg# func_win32_import_lib_p ARG
6865313a12fdSmrg# True if ARG is an import lib, as indicated by $file_magic_cmd
6866313a12fdSmrgfunc_win32_import_lib_p ()
6867313a12fdSmrg{
68687cea3689Smrg    $debug_cmd
68697cea3689Smrg
6870313a12fdSmrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
6871313a12fdSmrg    *import*) : ;;
6872313a12fdSmrg    *) false ;;
6873313a12fdSmrg    esac
6874313a12fdSmrg}
6875313a12fdSmrg
68767cea3689Smrg# func_suncc_cstd_abi
68777cea3689Smrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
68787cea3689Smrg# Several compiler flags select an ABI that is incompatible with the
68797cea3689Smrg# Cstd library. Avoid specifying it if any are in CXXFLAGS.
68807cea3689Smrgfunc_suncc_cstd_abi ()
68817cea3689Smrg{
68827cea3689Smrg    $debug_cmd
68837cea3689Smrg
68847cea3689Smrg    case " $compile_command " in
68857cea3689Smrg    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
68867cea3689Smrg      suncc_use_cstd_abi=no
68877cea3689Smrg      ;;
68887cea3689Smrg    *)
68897cea3689Smrg      suncc_use_cstd_abi=yes
68907cea3689Smrg      ;;
68917cea3689Smrg    esac
68927cea3689Smrg}
68937cea3689Smrg
6894e19dfac4Smrg# func_mode_link arg...
6895e19dfac4Smrgfunc_mode_link ()
6896e19dfac4Smrg{
68977cea3689Smrg    $debug_cmd
68987cea3689Smrg
6899e19dfac4Smrg    case $host in
6900ae545d91Smrg    *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*)
6901e19dfac4Smrg      # It is impossible to link a dll without this setting, and
6902e19dfac4Smrg      # we shouldn't force the makefile maintainer to figure out
69037cea3689Smrg      # what system we are compiling for in order to pass an extra
6904e19dfac4Smrg      # flag for every libtool invocation.
6905e19dfac4Smrg      # allow_undefined=no
690627702724Smrg
6907e19dfac4Smrg      # FIXME: Unfortunately, there are problems with the above when trying
69087cea3689Smrg      # to make a dll that has undefined symbols, in which case not
6909e19dfac4Smrg      # even a static library is built.  For now, we need to specify
6910e19dfac4Smrg      # -no-undefined on the libtool link line when we can be certain
6911e19dfac4Smrg      # that all symbols are satisfied, otherwise we get a static library.
6912e19dfac4Smrg      allow_undefined=yes
6913e19dfac4Smrg      ;;
6914e19dfac4Smrg    *)
6915e19dfac4Smrg      allow_undefined=yes
6916e19dfac4Smrg      ;;
6917e19dfac4Smrg    esac
6918e19dfac4Smrg    libtool_args=$nonopt
6919e19dfac4Smrg    base_compile="$nonopt $@"
6920e19dfac4Smrg    compile_command=$nonopt
6921e19dfac4Smrg    finalize_command=$nonopt
692227702724Smrg
6923e19dfac4Smrg    compile_rpath=
6924ae545d91Smrg    compile_rpath_tail=
6925e19dfac4Smrg    finalize_rpath=
6926e19dfac4Smrg    compile_shlibpath=
6927e19dfac4Smrg    finalize_shlibpath=
6928e19dfac4Smrg    convenience=
6929e19dfac4Smrg    old_convenience=
6930e19dfac4Smrg    deplibs=
6931e19dfac4Smrg    old_deplibs=
6932e19dfac4Smrg    compiler_flags=
6933e19dfac4Smrg    linker_flags=
6934e19dfac4Smrg    dllsearchpath=
6935e19dfac4Smrg    lib_search_path=`pwd`
6936e19dfac4Smrg    inst_prefix_dir=
6937e19dfac4Smrg    new_inherited_linker_flags=
693827702724Smrg
6939e19dfac4Smrg    avoid_version=no
6940313a12fdSmrg    bindir=
6941e19dfac4Smrg    dlfiles=
6942e19dfac4Smrg    dlprefiles=
6943e19dfac4Smrg    dlself=no
6944e19dfac4Smrg    export_dynamic=no
6945e19dfac4Smrg    export_symbols=
6946e19dfac4Smrg    export_symbols_regex=
6947e19dfac4Smrg    generated=
6948e19dfac4Smrg    libobjs=
6949e19dfac4Smrg    ltlibs=
6950e19dfac4Smrg    module=no
6951e19dfac4Smrg    no_install=no
6952e19dfac4Smrg    objs=
69537cea3689Smrg    os2dllname=
6954e19dfac4Smrg    non_pic_objects=
6955e19dfac4Smrg    precious_files_regex=
6956e19dfac4Smrg    prefer_static_libs=no
69577cea3689Smrg    preload=false
6958e19dfac4Smrg    prev=
6959e19dfac4Smrg    prevarg=
6960e19dfac4Smrg    release=
6961e19dfac4Smrg    rpath=
6962e19dfac4Smrg    xrpath=
6963e19dfac4Smrg    perm_rpath=
6964e19dfac4Smrg    temp_rpath=
6965ae545d91Smrg    temp_rpath_tail=
6966e19dfac4Smrg    thread_safe=no
6967e19dfac4Smrg    vinfo=
6968e19dfac4Smrg    vinfo_number=no
6969e19dfac4Smrg    weak_libs=
6970ae545d91Smrg    rpath_arg=
69717cea3689Smrg    single_module=$wl-single_module
6972e19dfac4Smrg    func_infer_tag $base_compile
697327702724Smrg
6974e19dfac4Smrg    # We need to know -static, to get the right output filenames.
6975e19dfac4Smrg    for arg
6976e19dfac4Smrg    do
6977e19dfac4Smrg      case $arg in
6978e19dfac4Smrg      -shared)
69797cea3689Smrg	test yes != "$build_libtool_libs" \
69807cea3689Smrg	  && func_fatal_configuration "cannot build a shared library"
6981e19dfac4Smrg	build_old_libs=no
6982e19dfac4Smrg	break
6983e19dfac4Smrg	;;
6984e19dfac4Smrg      -all-static | -static | -static-libtool-libs)
6985e19dfac4Smrg	case $arg in
6986e19dfac4Smrg	-all-static)
69877cea3689Smrg	  if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
6988e19dfac4Smrg	    func_warning "complete static linking is impossible in this configuration"
698927702724Smrg	  fi
6990e19dfac4Smrg	  if test -n "$link_static_flag"; then
6991e19dfac4Smrg	    dlopen_self=$dlopen_self_static
699227702724Smrg	  fi
6993e19dfac4Smrg	  prefer_static_libs=yes
699427702724Smrg	  ;;
6995e19dfac4Smrg	-static)
6996e19dfac4Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
6997e19dfac4Smrg	    dlopen_self=$dlopen_self_static
6998e19dfac4Smrg	  fi
6999e19dfac4Smrg	  prefer_static_libs=built
7000e19dfac4Smrg	  ;;
7001e19dfac4Smrg	-static-libtool-libs)
7002e19dfac4Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
7003e19dfac4Smrg	    dlopen_self=$dlopen_self_static
7004e19dfac4Smrg	  fi
7005e19dfac4Smrg	  prefer_static_libs=yes
700627702724Smrg	  ;;
700727702724Smrg	esac
7008e19dfac4Smrg	build_libtool_libs=no
7009e19dfac4Smrg	build_old_libs=yes
7010e19dfac4Smrg	break
7011e19dfac4Smrg	;;
7012e19dfac4Smrg      esac
7013e19dfac4Smrg    done
701427702724Smrg
7015e19dfac4Smrg    # See if our shared archives depend on static archives.
7016e19dfac4Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
701727702724Smrg
7018e19dfac4Smrg    # Go through the arguments, transforming them on the way.
7019e19dfac4Smrg    while test "$#" -gt 0; do
70207cea3689Smrg      arg=$1
7021e19dfac4Smrg      shift
702295b7a5c8Smrg      func_quote_arg pretty,unquoted "$arg"
702395b7a5c8Smrg      qarg=$func_quote_arg_unquoted_result
702495b7a5c8Smrg      func_append libtool_args " $func_quote_arg_result"
702527702724Smrg
7026e19dfac4Smrg      # If the previous option needs an argument, assign it.
7027e19dfac4Smrg      if test -n "$prev"; then
7028e19dfac4Smrg	case $prev in
7029e19dfac4Smrg	output)
7030e19dfac4Smrg	  func_append compile_command " @OUTPUT@"
7031e19dfac4Smrg	  func_append finalize_command " @OUTPUT@"
7032e19dfac4Smrg	  ;;
7033e19dfac4Smrg	esac
703427702724Smrg
7035e19dfac4Smrg	case $prev in
7036313a12fdSmrg	bindir)
70377cea3689Smrg	  bindir=$arg
7038313a12fdSmrg	  prev=
7039313a12fdSmrg	  continue
7040313a12fdSmrg	  ;;
7041e19dfac4Smrg	dlfiles|dlprefiles)
70427cea3689Smrg	  $preload || {
7043e19dfac4Smrg	    # Add the symbol object into the linking commands.
7044e19dfac4Smrg	    func_append compile_command " @SYMFILE@"
7045e19dfac4Smrg	    func_append finalize_command " @SYMFILE@"
70467cea3689Smrg	    preload=:
70477cea3689Smrg	  }
7048e19dfac4Smrg	  case $arg in
7049e19dfac4Smrg	  *.la | *.lo) ;;  # We handle these cases below.
7050e19dfac4Smrg	  force)
70517cea3689Smrg	    if test no = "$dlself"; then
7052e19dfac4Smrg	      dlself=needless
7053e19dfac4Smrg	      export_dynamic=yes
7054e19dfac4Smrg	    fi
7055e19dfac4Smrg	    prev=
7056e19dfac4Smrg	    continue
7057e19dfac4Smrg	    ;;
7058e19dfac4Smrg	  self)
70597cea3689Smrg	    if test dlprefiles = "$prev"; then
7060e19dfac4Smrg	      dlself=yes
70617cea3689Smrg	    elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
7062e19dfac4Smrg	      dlself=yes
7063e19dfac4Smrg	    else
7064e19dfac4Smrg	      dlself=needless
7065e19dfac4Smrg	      export_dynamic=yes
7066e19dfac4Smrg	    fi
7067e19dfac4Smrg	    prev=
7068e19dfac4Smrg	    continue
706927702724Smrg	    ;;
707027702724Smrg	  *)
70717cea3689Smrg	    if test dlfiles = "$prev"; then
7072313a12fdSmrg	      func_append dlfiles " $arg"
7073e19dfac4Smrg	    else
7074313a12fdSmrg	      func_append dlprefiles " $arg"
7075e19dfac4Smrg	    fi
7076e19dfac4Smrg	    prev=
7077e19dfac4Smrg	    continue
707827702724Smrg	    ;;
707927702724Smrg	  esac
7080e19dfac4Smrg	  ;;
7081e19dfac4Smrg	expsyms)
70827cea3689Smrg	  export_symbols=$arg
7083e19dfac4Smrg	  test -f "$arg" \
70847cea3689Smrg	    || func_fatal_error "symbol file '$arg' does not exist"
7085e19dfac4Smrg	  prev=
7086e19dfac4Smrg	  continue
7087e19dfac4Smrg	  ;;
7088e19dfac4Smrg	expsyms_regex)
70897cea3689Smrg	  export_symbols_regex=$arg
7090e19dfac4Smrg	  prev=
7091e19dfac4Smrg	  continue
7092e19dfac4Smrg	  ;;
7093e19dfac4Smrg	framework)
7094e19dfac4Smrg	  case $host in
7095e19dfac4Smrg	    *-*-darwin*)
7096e19dfac4Smrg	      case "$deplibs " in
7097e19dfac4Smrg		*" $qarg.ltframework "*) ;;
7098313a12fdSmrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
7099e19dfac4Smrg		   ;;
7100e19dfac4Smrg	      esac
7101e19dfac4Smrg	      ;;
7102e19dfac4Smrg	  esac
7103e19dfac4Smrg	  prev=
7104e19dfac4Smrg	  continue
7105e19dfac4Smrg	  ;;
7106e19dfac4Smrg	inst_prefix)
71077cea3689Smrg	  inst_prefix_dir=$arg
71087cea3689Smrg	  prev=
71097cea3689Smrg	  continue
71107cea3689Smrg	  ;;
71117cea3689Smrg	mllvm)
71127cea3689Smrg	  # Clang does not use LLVM to link, so we can simply discard any
71137cea3689Smrg	  # '-mllvm $arg' options when doing the link step.
7114e19dfac4Smrg	  prev=
7115e19dfac4Smrg	  continue
7116e19dfac4Smrg	  ;;
7117e19dfac4Smrg	objectlist)
7118e19dfac4Smrg	  if test -f "$arg"; then
7119e19dfac4Smrg	    save_arg=$arg
7120e19dfac4Smrg	    moreargs=
7121e19dfac4Smrg	    for fil in `cat "$save_arg"`
7122e19dfac4Smrg	    do
7123313a12fdSmrg#	      func_append moreargs " $fil"
7124e19dfac4Smrg	      arg=$fil
7125e19dfac4Smrg	      # A libtool-controlled object.
712627702724Smrg
7127e19dfac4Smrg	      # Check to see that this really is a libtool object.
7128e19dfac4Smrg	      if func_lalib_unsafe_p "$arg"; then
7129e19dfac4Smrg		pic_object=
7130e19dfac4Smrg		non_pic_object=
713127702724Smrg
7132e19dfac4Smrg		# Read the .lo file
7133e19dfac4Smrg		func_source "$arg"
713427702724Smrg
7135e19dfac4Smrg		if test -z "$pic_object" ||
7136e19dfac4Smrg		   test -z "$non_pic_object" ||
71377cea3689Smrg		   test none = "$pic_object" &&
71387cea3689Smrg		   test none = "$non_pic_object"; then
71397cea3689Smrg		  func_fatal_error "cannot find name of object for '$arg'"
7140e19dfac4Smrg		fi
714127702724Smrg
7142e19dfac4Smrg		# Extract subdirectory from the argument.
7143e19dfac4Smrg		func_dirname "$arg" "/" ""
71447cea3689Smrg		xdir=$func_dirname_result
714527702724Smrg
71467cea3689Smrg		if test none != "$pic_object"; then
7147e19dfac4Smrg		  # Prepend the subdirectory the object is found in.
71487cea3689Smrg		  pic_object=$xdir$pic_object
714927702724Smrg
71507cea3689Smrg		  if test dlfiles = "$prev"; then
71517cea3689Smrg		    if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
7152313a12fdSmrg		      func_append dlfiles " $pic_object"
7153e19dfac4Smrg		      prev=
7154e19dfac4Smrg		      continue
7155e19dfac4Smrg		    else
7156e19dfac4Smrg		      # If libtool objects are unsupported, then we need to preload.
7157e19dfac4Smrg		      prev=dlprefiles
7158e19dfac4Smrg		    fi
7159e19dfac4Smrg		  fi
716027702724Smrg
7161e19dfac4Smrg		  # CHECK ME:  I think I busted this.  -Ossama
71627cea3689Smrg		  if test dlprefiles = "$prev"; then
7163e19dfac4Smrg		    # Preload the old-style object.
7164313a12fdSmrg		    func_append dlprefiles " $pic_object"
7165e19dfac4Smrg		    prev=
7166e19dfac4Smrg		  fi
716727702724Smrg
7168e19dfac4Smrg		  # A PIC object.
7169e19dfac4Smrg		  func_append libobjs " $pic_object"
71707cea3689Smrg		  arg=$pic_object
7171e19dfac4Smrg		fi
717227702724Smrg
7173e19dfac4Smrg		# Non-PIC object.
71747cea3689Smrg		if test none != "$non_pic_object"; then
7175e19dfac4Smrg		  # Prepend the subdirectory the object is found in.
71767cea3689Smrg		  non_pic_object=$xdir$non_pic_object
717727702724Smrg
7178e19dfac4Smrg		  # A standard non-PIC object
7179e19dfac4Smrg		  func_append non_pic_objects " $non_pic_object"
71807cea3689Smrg		  if test -z "$pic_object" || test none = "$pic_object"; then
71817cea3689Smrg		    arg=$non_pic_object
7182e19dfac4Smrg		  fi
7183e19dfac4Smrg		else
7184e19dfac4Smrg		  # If the PIC object exists, use it instead.
7185e19dfac4Smrg		  # $xdir was prepended to $pic_object above.
71867cea3689Smrg		  non_pic_object=$pic_object
7187e19dfac4Smrg		  func_append non_pic_objects " $non_pic_object"
7188e19dfac4Smrg		fi
7189e19dfac4Smrg	      else
7190e19dfac4Smrg		# Only an error if not doing a dry-run.
7191e19dfac4Smrg		if $opt_dry_run; then
7192e19dfac4Smrg		  # Extract subdirectory from the argument.
7193e19dfac4Smrg		  func_dirname "$arg" "/" ""
71947cea3689Smrg		  xdir=$func_dirname_result
7195e19dfac4Smrg
7196e19dfac4Smrg		  func_lo2o "$arg"
7197e19dfac4Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
7198e19dfac4Smrg		  non_pic_object=$xdir$func_lo2o_result
7199e19dfac4Smrg		  func_append libobjs " $pic_object"
7200e19dfac4Smrg		  func_append non_pic_objects " $non_pic_object"
7201e19dfac4Smrg	        else
72027cea3689Smrg		  func_fatal_error "'$arg' is not a valid libtool object"
7203e19dfac4Smrg		fi
7204e19dfac4Smrg	      fi
7205e19dfac4Smrg	    done
7206e19dfac4Smrg	  else
72077cea3689Smrg	    func_fatal_error "link input file '$arg' does not exist"
7208e19dfac4Smrg	  fi
7209e19dfac4Smrg	  arg=$save_arg
7210e19dfac4Smrg	  prev=
7211e19dfac4Smrg	  continue
7212e19dfac4Smrg	  ;;
72137cea3689Smrg	os2dllname)
72147cea3689Smrg	  os2dllname=$arg
72157cea3689Smrg	  prev=
72167cea3689Smrg	  continue
72177cea3689Smrg	  ;;
7218e19dfac4Smrg	precious_regex)
72197cea3689Smrg	  precious_files_regex=$arg
7220e19dfac4Smrg	  prev=
7221e19dfac4Smrg	  continue
7222e19dfac4Smrg	  ;;
7223e19dfac4Smrg	release)
72247cea3689Smrg	  release=-$arg
7225e19dfac4Smrg	  prev=
7226e19dfac4Smrg	  continue
7227e19dfac4Smrg	  ;;
7228e19dfac4Smrg	rpath | xrpath)
7229e19dfac4Smrg	  # We need an absolute path.
7230e19dfac4Smrg	  case $arg in
7231e19dfac4Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
7232e19dfac4Smrg	  *)
7233ae545d91Smrg	    func_fatal_error "argument to -rpath is not absolute: $arg"
7234e19dfac4Smrg	    ;;
7235e19dfac4Smrg	  esac
72367cea3689Smrg	  if test rpath = "$prev"; then
7237e19dfac4Smrg	    case "$rpath " in
7238e19dfac4Smrg	    *" $arg "*) ;;
7239313a12fdSmrg	    *) func_append rpath " $arg" ;;
7240e19dfac4Smrg	    esac
7241e19dfac4Smrg	  else
7242e19dfac4Smrg	    case "$xrpath " in
7243e19dfac4Smrg	    *" $arg "*) ;;
7244313a12fdSmrg	    *) func_append xrpath " $arg" ;;
7245e19dfac4Smrg	    esac
7246e19dfac4Smrg	  fi
7247e19dfac4Smrg	  prev=
7248e19dfac4Smrg	  continue
7249e19dfac4Smrg	  ;;
7250e19dfac4Smrg	shrext)
72517cea3689Smrg	  shrext_cmds=$arg
7252e19dfac4Smrg	  prev=
7253e19dfac4Smrg	  continue
7254e19dfac4Smrg	  ;;
7255e19dfac4Smrg	weak)
7256313a12fdSmrg	  func_append weak_libs " $arg"
7257e19dfac4Smrg	  prev=
7258e19dfac4Smrg	  continue
7259e19dfac4Smrg	  ;;
726095b7a5c8Smrg	xassembler)
726195b7a5c8Smrg	  func_append compiler_flags " -Xassembler $qarg"
726295b7a5c8Smrg	  prev=
726395b7a5c8Smrg	  func_append compile_command " -Xassembler $qarg"
726495b7a5c8Smrg	  func_append finalize_command " -Xassembler $qarg"
726595b7a5c8Smrg	  continue
726695b7a5c8Smrg	  ;;
7267e19dfac4Smrg	xcclinker)
7268313a12fdSmrg	  func_append linker_flags " $qarg"
7269313a12fdSmrg	  func_append compiler_flags " $qarg"
7270e19dfac4Smrg	  prev=
7271e19dfac4Smrg	  func_append compile_command " $qarg"
7272e19dfac4Smrg	  func_append finalize_command " $qarg"
7273e19dfac4Smrg	  continue
7274e19dfac4Smrg	  ;;
7275e19dfac4Smrg	xcompiler)
7276313a12fdSmrg	  func_append compiler_flags " $qarg"
7277e19dfac4Smrg	  prev=
7278e19dfac4Smrg	  func_append compile_command " $qarg"
7279e19dfac4Smrg	  func_append finalize_command " $qarg"
7280e19dfac4Smrg	  continue
7281e19dfac4Smrg	  ;;
7282e19dfac4Smrg	xlinker)
7283313a12fdSmrg	  func_append linker_flags " $qarg"
7284313a12fdSmrg	  func_append compiler_flags " $wl$qarg"
7285e19dfac4Smrg	  prev=
7286e19dfac4Smrg	  func_append compile_command " $wl$qarg"
7287e19dfac4Smrg	  func_append finalize_command " $wl$qarg"
7288e19dfac4Smrg	  continue
7289e19dfac4Smrg	  ;;
7290e19dfac4Smrg	*)
7291e19dfac4Smrg	  eval "$prev=\"\$arg\""
7292e19dfac4Smrg	  prev=
7293e19dfac4Smrg	  continue
7294e19dfac4Smrg	  ;;
729527702724Smrg	esac
7296e19dfac4Smrg      fi # test -n "$prev"
729727702724Smrg
72987cea3689Smrg      prevarg=$arg
729927702724Smrg
7300e19dfac4Smrg      case $arg in
7301e19dfac4Smrg      -all-static)
7302e19dfac4Smrg	if test -n "$link_static_flag"; then
7303e19dfac4Smrg	  # See comment for -static flag below, for more details.
7304e19dfac4Smrg	  func_append compile_command " $link_static_flag"
7305e19dfac4Smrg	  func_append finalize_command " $link_static_flag"
7306e19dfac4Smrg	fi
7307e19dfac4Smrg	continue
7308e19dfac4Smrg	;;
730927702724Smrg
7310e19dfac4Smrg      -allow-undefined)
7311e19dfac4Smrg	# FIXME: remove this flag sometime in the future.
73127cea3689Smrg	func_fatal_error "'-allow-undefined' must not be used because it is the default"
7313e19dfac4Smrg	;;
731427702724Smrg
7315e19dfac4Smrg      -avoid-version)
7316e19dfac4Smrg	avoid_version=yes
7317e19dfac4Smrg	continue
7318e19dfac4Smrg	;;
731927702724Smrg
7320313a12fdSmrg      -bindir)
7321313a12fdSmrg	prev=bindir
7322313a12fdSmrg	continue
7323313a12fdSmrg	;;
7324313a12fdSmrg
7325e19dfac4Smrg      -dlopen)
7326e19dfac4Smrg	prev=dlfiles
7327e19dfac4Smrg	continue
7328e19dfac4Smrg	;;
732927702724Smrg
7330e19dfac4Smrg      -dlpreopen)
7331e19dfac4Smrg	prev=dlprefiles
7332e19dfac4Smrg	continue
7333e19dfac4Smrg	;;
733427702724Smrg
7335e19dfac4Smrg      -export-dynamic)
7336e19dfac4Smrg	export_dynamic=yes
7337e19dfac4Smrg	continue
7338e19dfac4Smrg	;;
733927702724Smrg
7340e19dfac4Smrg      -export-symbols | -export-symbols-regex)
7341e19dfac4Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
7342e19dfac4Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
7343e19dfac4Smrg	fi
73447cea3689Smrg	if test X-export-symbols = "X$arg"; then
7345e19dfac4Smrg	  prev=expsyms
7346e19dfac4Smrg	else
7347e19dfac4Smrg	  prev=expsyms_regex
7348e19dfac4Smrg	fi
7349e19dfac4Smrg	continue
7350e19dfac4Smrg	;;
735127702724Smrg
7352e19dfac4Smrg      -framework)
7353e19dfac4Smrg	prev=framework
7354e19dfac4Smrg	continue
7355e19dfac4Smrg	;;
735627702724Smrg
7357e19dfac4Smrg      -inst-prefix-dir)
7358e19dfac4Smrg	prev=inst_prefix
7359e19dfac4Smrg	continue
7360e19dfac4Smrg	;;
736127702724Smrg
7362e19dfac4Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
7363e19dfac4Smrg      # so, if we see these flags be careful not to treat them like -L
7364e19dfac4Smrg      -L[A-Z][A-Z]*:*)
7365e19dfac4Smrg	case $with_gcc/$host in
7366e19dfac4Smrg	no/*-*-irix* | /*-*-irix*)
7367e19dfac4Smrg	  func_append compile_command " $arg"
7368e19dfac4Smrg	  func_append finalize_command " $arg"
7369e19dfac4Smrg	  ;;
7370e19dfac4Smrg	esac
7371e19dfac4Smrg	continue
7372e19dfac4Smrg	;;
737327702724Smrg
7374e19dfac4Smrg      -L*)
7375313a12fdSmrg	func_stripname "-L" '' "$arg"
7376313a12fdSmrg	if test -z "$func_stripname_result"; then
7377e19dfac4Smrg	  if test "$#" -gt 0; then
73787cea3689Smrg	    func_fatal_error "require no space between '-L' and '$1'"
7379e19dfac4Smrg	  else
73807cea3689Smrg	    func_fatal_error "need path for '-L' option"
7381e19dfac4Smrg	  fi
7382e19dfac4Smrg	fi
7383313a12fdSmrg	func_resolve_sysroot "$func_stripname_result"
7384313a12fdSmrg	dir=$func_resolve_sysroot_result
7385e19dfac4Smrg	# We need an absolute path.
7386e19dfac4Smrg	case $dir in
7387e19dfac4Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
7388e19dfac4Smrg	*)
7389e19dfac4Smrg	  absdir=`cd "$dir" && pwd`
7390e19dfac4Smrg	  test -z "$absdir" && \
73917cea3689Smrg	    func_fatal_error "cannot determine absolute directory name of '$dir'"
73927cea3689Smrg	  dir=$absdir
7393e19dfac4Smrg	  ;;
7394e19dfac4Smrg	esac
7395e19dfac4Smrg	case "$deplibs " in
7396313a12fdSmrg	*" -L$dir "* | *" $arg "*)
7397313a12fdSmrg	  # Will only happen for absolute or sysroot arguments
7398313a12fdSmrg	  ;;
7399e19dfac4Smrg	*)
7400313a12fdSmrg	  # Preserve sysroot, but never include relative directories
7401313a12fdSmrg	  case $dir in
7402313a12fdSmrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
7403313a12fdSmrg	    *) func_append deplibs " -L$dir" ;;
7404313a12fdSmrg	  esac
7405313a12fdSmrg	  func_append lib_search_path " $dir"
7406e19dfac4Smrg	  ;;
7407e19dfac4Smrg	esac
7408e19dfac4Smrg	case $host in
7409ae545d91Smrg	*-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*)
7410313a12fdSmrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
7411e19dfac4Smrg	  case :$dllsearchpath: in
7412e19dfac4Smrg	  *":$dir:"*) ;;
7413e19dfac4Smrg	  ::) dllsearchpath=$dir;;
7414313a12fdSmrg	  *) func_append dllsearchpath ":$dir";;
7415e19dfac4Smrg	  esac
7416e19dfac4Smrg	  case :$dllsearchpath: in
7417e19dfac4Smrg	  *":$testbindir:"*) ;;
7418e19dfac4Smrg	  ::) dllsearchpath=$testbindir;;
7419313a12fdSmrg	  *) func_append dllsearchpath ":$testbindir";;
7420e19dfac4Smrg	  esac
7421e19dfac4Smrg	  ;;
7422e19dfac4Smrg	esac
7423e19dfac4Smrg	continue
7424e19dfac4Smrg	;;
742527702724Smrg
7426e19dfac4Smrg      -l*)
74277cea3689Smrg	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
7428e19dfac4Smrg	  case $host in
7429ae545d91Smrg	  *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
7430e19dfac4Smrg	    # These systems don't actually have a C or math library (as such)
7431e19dfac4Smrg	    continue
7432e19dfac4Smrg	    ;;
7433e19dfac4Smrg	  *-*-os2*)
7434e19dfac4Smrg	    # These systems don't actually have a C library (as such)
74357cea3689Smrg	    test X-lc = "X$arg" && continue
7436e19dfac4Smrg	    ;;
7437ae545d91Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
7438e19dfac4Smrg	    # Do not include libc due to us having libc/libc_r.
74397cea3689Smrg	    test X-lc = "X$arg" && continue
7440e19dfac4Smrg	    ;;
7441e19dfac4Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
7442e19dfac4Smrg	    # Rhapsody C and math libraries are in the System framework
7443313a12fdSmrg	    func_append deplibs " System.ltframework"
7444e19dfac4Smrg	    continue
7445e19dfac4Smrg	    ;;
7446e19dfac4Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7447e19dfac4Smrg	    # Causes problems with __ctype
74487cea3689Smrg	    test X-lc = "X$arg" && continue
7449e19dfac4Smrg	    ;;
7450e19dfac4Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7451e19dfac4Smrg	    # Compiler inserts libc in the correct place for threads to work
74527cea3689Smrg	    test X-lc = "X$arg" && continue
7453e19dfac4Smrg	    ;;
7454e19dfac4Smrg	  esac
74557cea3689Smrg	elif test X-lc_r = "X$arg"; then
7456e19dfac4Smrg	 case $host in
7457ae545d91Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
7458e19dfac4Smrg	   # Do not include libc_r directly, use -pthread flag.
7459e19dfac4Smrg	   continue
7460e19dfac4Smrg	   ;;
7461e19dfac4Smrg	 esac
7462e19dfac4Smrg	fi
7463313a12fdSmrg	func_append deplibs " $arg"
7464e19dfac4Smrg	continue
7465e19dfac4Smrg	;;
746627702724Smrg
74677cea3689Smrg      -mllvm)
74687cea3689Smrg	prev=mllvm
74697cea3689Smrg	continue
74707cea3689Smrg	;;
74717cea3689Smrg
7472e19dfac4Smrg      -module)
7473e19dfac4Smrg	module=yes
7474e19dfac4Smrg	continue
7475e19dfac4Smrg	;;
747627702724Smrg
7477e19dfac4Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
7478e19dfac4Smrg      # classes, name mangling, and exception handling.
7479e19dfac4Smrg      # Darwin uses the -arch flag to determine output architecture.
7480ae545d91Smrg      # -q <option> for IBM XL C/C++ compiler.
7481ae545d91Smrg      -model|-arch|-isysroot|--sysroot|-q)
7482313a12fdSmrg	func_append compiler_flags " $arg"
7483e19dfac4Smrg	func_append compile_command " $arg"
7484e19dfac4Smrg	func_append finalize_command " $arg"
7485e19dfac4Smrg	prev=xcompiler
7486e19dfac4Smrg	continue
7487e19dfac4Smrg	;;
748895b7a5c8Smrg     # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199.
748995b7a5c8Smrg     -pthread)
749095b7a5c8Smrg	case $host in
749195b7a5c8Smrg	  *solaris2*) ;;
749295b7a5c8Smrg	  *)
749395b7a5c8Smrg	    case "$new_inherited_linker_flags " in
749495b7a5c8Smrg	        *" $arg "*) ;;
749595b7a5c8Smrg	        * ) func_append new_inherited_linker_flags " $arg" ;;
749695b7a5c8Smrg	    esac
749795b7a5c8Smrg	  ;;
749895b7a5c8Smrg	esac
749995b7a5c8Smrg	continue
750095b7a5c8Smrg	;;
750195b7a5c8Smrg      -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \
7502ae545d91Smrg      |-threads|-fopenmp|-fopenmp=*|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7503313a12fdSmrg	func_append compiler_flags " $arg"
7504e19dfac4Smrg	func_append compile_command " $arg"
7505e19dfac4Smrg	func_append finalize_command " $arg"
7506e19dfac4Smrg	case "$new_inherited_linker_flags " in
7507e19dfac4Smrg	    *" $arg "*) ;;
7508313a12fdSmrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
7509e19dfac4Smrg	esac
7510e19dfac4Smrg	continue
7511e19dfac4Smrg	;;
751227702724Smrg
7513e19dfac4Smrg      -multi_module)
75147cea3689Smrg	single_module=$wl-multi_module
7515e19dfac4Smrg	continue
7516e19dfac4Smrg	;;
751727702724Smrg
7518e19dfac4Smrg      -no-fast-install)
7519e19dfac4Smrg	fast_install=no
7520e19dfac4Smrg	continue
7521e19dfac4Smrg	;;
752227702724Smrg
7523e19dfac4Smrg      -no-install)
7524e19dfac4Smrg	case $host in
7525ae545d91Smrg	*-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
7526e19dfac4Smrg	  # The PATH hackery in wrapper scripts is required on Windows
7527e19dfac4Smrg	  # and Darwin in order for the loader to find any dlls it needs.
75287cea3689Smrg	  func_warning "'-no-install' is ignored for $host"
75297cea3689Smrg	  func_warning "assuming '-no-fast-install' instead"
7530e19dfac4Smrg	  fast_install=no
7531e19dfac4Smrg	  ;;
7532e19dfac4Smrg	*) no_install=yes ;;
7533e19dfac4Smrg	esac
7534e19dfac4Smrg	continue
7535e19dfac4Smrg	;;
753627702724Smrg
7537e19dfac4Smrg      -no-undefined)
7538e19dfac4Smrg	allow_undefined=no
7539e19dfac4Smrg	continue
7540e19dfac4Smrg	;;
754127702724Smrg
7542e19dfac4Smrg      -objectlist)
7543e19dfac4Smrg	prev=objectlist
7544e19dfac4Smrg	continue
7545e19dfac4Smrg	;;
754627702724Smrg
75477cea3689Smrg      -os2dllname)
75487cea3689Smrg	prev=os2dllname
75497cea3689Smrg	continue
75507cea3689Smrg	;;
75517cea3689Smrg
7552e19dfac4Smrg      -o) prev=output ;;
755327702724Smrg
7554e19dfac4Smrg      -precious-files-regex)
7555e19dfac4Smrg	prev=precious_regex
7556e19dfac4Smrg	continue
7557e19dfac4Smrg	;;
755827702724Smrg
7559e19dfac4Smrg      -release)
7560e19dfac4Smrg	prev=release
7561e19dfac4Smrg	continue
7562e19dfac4Smrg	;;
756327702724Smrg
7564e19dfac4Smrg      -rpath)
7565e19dfac4Smrg	prev=rpath
7566e19dfac4Smrg	continue
7567e19dfac4Smrg	;;
756827702724Smrg
7569e19dfac4Smrg      -R)
7570e19dfac4Smrg	prev=xrpath
7571e19dfac4Smrg	continue
7572e19dfac4Smrg	;;
757327702724Smrg
7574e19dfac4Smrg      -R*)
7575e19dfac4Smrg	func_stripname '-R' '' "$arg"
7576e19dfac4Smrg	dir=$func_stripname_result
7577e19dfac4Smrg	# We need an absolute path.
7578e19dfac4Smrg	case $dir in
7579e19dfac4Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
7580313a12fdSmrg	=*)
7581313a12fdSmrg	  func_stripname '=' '' "$dir"
7582313a12fdSmrg	  dir=$lt_sysroot$func_stripname_result
7583313a12fdSmrg	  ;;
7584e19dfac4Smrg	*)
7585ae545d91Smrg	  func_fatal_error "argument ($arg) to '-R' is not an absolute path: $dir"
7586e19dfac4Smrg	  ;;
7587e19dfac4Smrg	esac
7588e19dfac4Smrg	case "$xrpath " in
7589e19dfac4Smrg	*" $dir "*) ;;
7590313a12fdSmrg	*) func_append xrpath " $dir" ;;
7591e19dfac4Smrg	esac
7592e19dfac4Smrg	continue
7593e19dfac4Smrg	;;
759427702724Smrg
7595e19dfac4Smrg      -shared)
7596e19dfac4Smrg	# The effects of -shared are defined in a previous loop.
7597e19dfac4Smrg	continue
7598e19dfac4Smrg	;;
759927702724Smrg
7600e19dfac4Smrg      -shrext)
7601e19dfac4Smrg	prev=shrext
7602e19dfac4Smrg	continue
7603e19dfac4Smrg	;;
760427702724Smrg
7605e19dfac4Smrg      -static | -static-libtool-libs)
7606e19dfac4Smrg	# The effects of -static are defined in a previous loop.
7607e19dfac4Smrg	# We used to do the same as -all-static on platforms that
7608e19dfac4Smrg	# didn't have a PIC flag, but the assumption that the effects
7609e19dfac4Smrg	# would be equivalent was wrong.  It would break on at least
7610e19dfac4Smrg	# Digital Unix and AIX.
7611e19dfac4Smrg	continue
7612e19dfac4Smrg	;;
761327702724Smrg
7614e19dfac4Smrg      -thread-safe)
7615e19dfac4Smrg	thread_safe=yes
7616e19dfac4Smrg	continue
7617e19dfac4Smrg	;;
761827702724Smrg
7619e19dfac4Smrg      -version-info)
7620e19dfac4Smrg	prev=vinfo
7621e19dfac4Smrg	continue
7622e19dfac4Smrg	;;
762327702724Smrg
7624e19dfac4Smrg      -version-number)
7625e19dfac4Smrg	prev=vinfo
7626e19dfac4Smrg	vinfo_number=yes
7627e19dfac4Smrg	continue
7628e19dfac4Smrg	;;
762927702724Smrg
7630e19dfac4Smrg      -weak)
7631e19dfac4Smrg        prev=weak
7632e19dfac4Smrg	continue
7633e19dfac4Smrg	;;
763427702724Smrg
7635e19dfac4Smrg      -Wc,*)
7636e19dfac4Smrg	func_stripname '-Wc,' '' "$arg"
7637e19dfac4Smrg	args=$func_stripname_result
7638e19dfac4Smrg	arg=
76397cea3689Smrg	save_ifs=$IFS; IFS=,
7640e19dfac4Smrg	for flag in $args; do
76417cea3689Smrg	  IFS=$save_ifs
764295b7a5c8Smrg          func_quote_arg pretty "$flag"
764395b7a5c8Smrg	  func_append arg " $func_quote_arg_result"
764495b7a5c8Smrg	  func_append compiler_flags " $func_quote_arg_result"
7645e19dfac4Smrg	done
76467cea3689Smrg	IFS=$save_ifs
7647e19dfac4Smrg	func_stripname ' ' '' "$arg"
7648e19dfac4Smrg	arg=$func_stripname_result
7649e19dfac4Smrg	;;
765027702724Smrg
7651e19dfac4Smrg      -Wl,*)
7652e19dfac4Smrg	func_stripname '-Wl,' '' "$arg"
7653e19dfac4Smrg	args=$func_stripname_result
7654e19dfac4Smrg	arg=
76557cea3689Smrg	save_ifs=$IFS; IFS=,
7656e19dfac4Smrg	for flag in $args; do
76577cea3689Smrg	  IFS=$save_ifs
765895b7a5c8Smrg          func_quote_arg pretty "$flag"
765995b7a5c8Smrg	  func_append arg " $wl$func_quote_arg_result"
766095b7a5c8Smrg	  func_append compiler_flags " $wl$func_quote_arg_result"
766195b7a5c8Smrg	  func_append linker_flags " $func_quote_arg_result"
7662e19dfac4Smrg	done
76637cea3689Smrg	IFS=$save_ifs
7664e19dfac4Smrg	func_stripname ' ' '' "$arg"
7665e19dfac4Smrg	arg=$func_stripname_result
7666e19dfac4Smrg	;;
766727702724Smrg
766895b7a5c8Smrg      -Xassembler)
766995b7a5c8Smrg        prev=xassembler
767095b7a5c8Smrg        continue
767195b7a5c8Smrg        ;;
767295b7a5c8Smrg
7673e19dfac4Smrg      -Xcompiler)
7674e19dfac4Smrg	prev=xcompiler
7675e19dfac4Smrg	continue
7676e19dfac4Smrg	;;
767727702724Smrg
7678e19dfac4Smrg      -Xlinker)
7679e19dfac4Smrg	prev=xlinker
7680e19dfac4Smrg	continue
7681e19dfac4Smrg	;;
768227702724Smrg
7683e19dfac4Smrg      -XCClinker)
7684e19dfac4Smrg	prev=xcclinker
7685e19dfac4Smrg	continue
7686e19dfac4Smrg	;;
768727702724Smrg
7688e19dfac4Smrg      # -msg_* for osf cc
7689e19dfac4Smrg      -msg_*)
769095b7a5c8Smrg	func_quote_arg pretty "$arg"
769195b7a5c8Smrg	arg=$func_quote_arg_result
7692e19dfac4Smrg	;;
769327702724Smrg
7694313a12fdSmrg      # Flags to be passed through unchanged, with rationale:
7695313a12fdSmrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
7696313a12fdSmrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
7697313a12fdSmrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
7698313a12fdSmrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
7699313a12fdSmrg      # -q*                  compiler args for the IBM compiler
7700313a12fdSmrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
7701313a12fdSmrg      # -F/path              path to uninstalled frameworks, gcc on darwin
7702313a12fdSmrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
77037cea3689Smrg      # -fstack-protector*   stack protector flags for GCC
7704313a12fdSmrg      # @file                GCC response files
7705313a12fdSmrg      # -tp=*                Portland pgcc target processor selection
7706313a12fdSmrg      # --sysroot=*          for sysroot support
77077cea3689Smrg      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
770895b7a5c8Smrg      # -specs=*             GCC specs files
77097cea3689Smrg      # -stdlib=*            select c++ std lib with clang
7710ae545d91Smrg      # -fdiagnostics-color* simply affects output
7711ae545d91Smrg      # -frecord-gcc-switches used to verify flags were respected
771295b7a5c8Smrg      # -fsanitize=*         Clang/GCC memory and address sanitizer
7713ae545d91Smrg      # -fno-sanitize*       Clang/GCC memory and address sanitizer
7714ae545d91Smrg      # -shared-libsan       Link with shared sanitizer runtimes (Clang)
7715ae545d91Smrg      # -static-libsan       Link with static sanitizer runtimes (Clang)
7716ae545d91Smrg      # -no-canonical-prefixes Do not expand any symbolic links
771795b7a5c8Smrg      # -fuse-ld=*           Linker select flags for GCC
7718ae545d91Smrg      # -static-*            direct GCC to link specific libraries statically
7719ae545d91Smrg      # -fcilkplus           Cilk Plus language extension features for C/C++
7720ae545d91Smrg      # -rtlib=*             select c runtime lib with clang
7721ae545d91Smrg      # --unwindlib=*        select unwinder library with clang
7722ae545d91Smrg      # -f{file|debug|macro|profile}-prefix-map=* needed for lto linking
772395b7a5c8Smrg      # -Wa,*                Pass flags directly to the assembler
7724ae545d91Smrg      # -Werror, -Werror=*   Report (specified) warnings as errors
7725e19dfac4Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
7726313a12fdSmrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
7727ae545d91Smrg      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-no-canonical-prefixes| \
7728ae545d91Smrg      -stdlib=*|-rtlib=*|--unwindlib=*| \
7729ae545d91Smrg      -specs=*|-fsanitize=*|-fno-sanitize*|-shared-libsan|-static-libsan| \
7730ae545d91Smrg      -ffile-prefix-map=*|-fdebug-prefix-map=*|-fmacro-prefix-map=*|-fprofile-prefix-map=*| \
7731ae545d91Smrg      -fdiagnostics-color*|-frecord-gcc-switches| \
7732ae545d91Smrg      -fuse-ld=*|-static-*|-fcilkplus|-Wa,*|-Werror|-Werror=*)
773395b7a5c8Smrg        func_quote_arg pretty "$arg"
773495b7a5c8Smrg	arg=$func_quote_arg_result
7735e19dfac4Smrg        func_append compile_command " $arg"
7736e19dfac4Smrg        func_append finalize_command " $arg"
7737313a12fdSmrg        func_append compiler_flags " $arg"
7738e19dfac4Smrg        continue
7739e19dfac4Smrg        ;;
774027702724Smrg
77417cea3689Smrg      -Z*)
77427cea3689Smrg        if test os2 = "`expr $host : '.*\(os2\)'`"; then
77437cea3689Smrg          # OS/2 uses -Zxxx to specify OS/2-specific options
77447cea3689Smrg	  compiler_flags="$compiler_flags $arg"
77457cea3689Smrg	  func_append compile_command " $arg"
77467cea3689Smrg	  func_append finalize_command " $arg"
77477cea3689Smrg	  case $arg in
77487cea3689Smrg	  -Zlinker | -Zstack)
77497cea3689Smrg	    prev=xcompiler
77507cea3689Smrg	    ;;
77517cea3689Smrg	  esac
77527cea3689Smrg	  continue
77537cea3689Smrg        else
77547cea3689Smrg	  # Otherwise treat like 'Some other compiler flag' below
775595b7a5c8Smrg	  func_quote_arg pretty "$arg"
775695b7a5c8Smrg	  arg=$func_quote_arg_result
77577cea3689Smrg        fi
77587cea3689Smrg	;;
77597cea3689Smrg
7760e19dfac4Smrg      # Some other compiler flag.
7761e19dfac4Smrg      -* | +*)
776295b7a5c8Smrg        func_quote_arg pretty "$arg"
776395b7a5c8Smrg	arg=$func_quote_arg_result
7764e19dfac4Smrg	;;
776527702724Smrg
7766e19dfac4Smrg      *.$objext)
7767e19dfac4Smrg	# A standard object.
7768313a12fdSmrg	func_append objs " $arg"
7769e19dfac4Smrg	;;
777027702724Smrg
7771e19dfac4Smrg      *.lo)
7772e19dfac4Smrg	# A libtool-controlled object.
777327702724Smrg
7774e19dfac4Smrg	# Check to see that this really is a libtool object.
7775e19dfac4Smrg	if func_lalib_unsafe_p "$arg"; then
7776e19dfac4Smrg	  pic_object=
7777e19dfac4Smrg	  non_pic_object=
7778e19dfac4Smrg
7779e19dfac4Smrg	  # Read the .lo file
7780e19dfac4Smrg	  func_source "$arg"
7781e19dfac4Smrg
7782e19dfac4Smrg	  if test -z "$pic_object" ||
7783e19dfac4Smrg	     test -z "$non_pic_object" ||
77847cea3689Smrg	     test none = "$pic_object" &&
77857cea3689Smrg	     test none = "$non_pic_object"; then
77867cea3689Smrg	    func_fatal_error "cannot find name of object for '$arg'"
7787e19dfac4Smrg	  fi
7788e19dfac4Smrg
7789e19dfac4Smrg	  # Extract subdirectory from the argument.
7790e19dfac4Smrg	  func_dirname "$arg" "/" ""
77917cea3689Smrg	  xdir=$func_dirname_result
7792e19dfac4Smrg
77937cea3689Smrg	  test none = "$pic_object" || {
7794e19dfac4Smrg	    # Prepend the subdirectory the object is found in.
77957cea3689Smrg	    pic_object=$xdir$pic_object
7796e19dfac4Smrg
77977cea3689Smrg	    if test dlfiles = "$prev"; then
77987cea3689Smrg	      if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
7799313a12fdSmrg		func_append dlfiles " $pic_object"
7800e19dfac4Smrg		prev=
7801e19dfac4Smrg		continue
7802e19dfac4Smrg	      else
7803e19dfac4Smrg		# If libtool objects are unsupported, then we need to preload.
7804e19dfac4Smrg		prev=dlprefiles
7805e19dfac4Smrg	      fi
7806e19dfac4Smrg	    fi
7807e19dfac4Smrg
7808e19dfac4Smrg	    # CHECK ME:  I think I busted this.  -Ossama
78097cea3689Smrg	    if test dlprefiles = "$prev"; then
7810e19dfac4Smrg	      # Preload the old-style object.
7811313a12fdSmrg	      func_append dlprefiles " $pic_object"
7812e19dfac4Smrg	      prev=
7813e19dfac4Smrg	    fi
7814e19dfac4Smrg
7815e19dfac4Smrg	    # A PIC object.
7816e19dfac4Smrg	    func_append libobjs " $pic_object"
78177cea3689Smrg	    arg=$pic_object
78187cea3689Smrg	  }
7819e19dfac4Smrg
7820e19dfac4Smrg	  # Non-PIC object.
78217cea3689Smrg	  if test none != "$non_pic_object"; then
7822e19dfac4Smrg	    # Prepend the subdirectory the object is found in.
78237cea3689Smrg	    non_pic_object=$xdir$non_pic_object
7824e19dfac4Smrg
7825e19dfac4Smrg	    # A standard non-PIC object
7826e19dfac4Smrg	    func_append non_pic_objects " $non_pic_object"
78277cea3689Smrg	    if test -z "$pic_object" || test none = "$pic_object"; then
78287cea3689Smrg	      arg=$non_pic_object
7829e19dfac4Smrg	    fi
7830e19dfac4Smrg	  else
7831e19dfac4Smrg	    # If the PIC object exists, use it instead.
7832e19dfac4Smrg	    # $xdir was prepended to $pic_object above.
78337cea3689Smrg	    non_pic_object=$pic_object
7834e19dfac4Smrg	    func_append non_pic_objects " $non_pic_object"
7835e19dfac4Smrg	  fi
7836e19dfac4Smrg	else
7837e19dfac4Smrg	  # Only an error if not doing a dry-run.
7838e19dfac4Smrg	  if $opt_dry_run; then
7839e19dfac4Smrg	    # Extract subdirectory from the argument.
7840e19dfac4Smrg	    func_dirname "$arg" "/" ""
78417cea3689Smrg	    xdir=$func_dirname_result
7842e19dfac4Smrg
7843e19dfac4Smrg	    func_lo2o "$arg"
7844e19dfac4Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
7845e19dfac4Smrg	    non_pic_object=$xdir$func_lo2o_result
7846e19dfac4Smrg	    func_append libobjs " $pic_object"
7847e19dfac4Smrg	    func_append non_pic_objects " $non_pic_object"
7848e19dfac4Smrg	  else
78497cea3689Smrg	    func_fatal_error "'$arg' is not a valid libtool object"
7850e19dfac4Smrg	  fi
7851e19dfac4Smrg	fi
7852e19dfac4Smrg	;;
7853e19dfac4Smrg
7854e19dfac4Smrg      *.$libext)
7855e19dfac4Smrg	# An archive.
7856313a12fdSmrg	func_append deplibs " $arg"
7857313a12fdSmrg	func_append old_deplibs " $arg"
7858e19dfac4Smrg	continue
7859e19dfac4Smrg	;;
7860e19dfac4Smrg
7861e19dfac4Smrg      *.la)
7862e19dfac4Smrg	# A libtool-controlled library.
7863e19dfac4Smrg
7864313a12fdSmrg	func_resolve_sysroot "$arg"
78657cea3689Smrg	if test dlfiles = "$prev"; then
7866e19dfac4Smrg	  # This library was specified with -dlopen.
7867313a12fdSmrg	  func_append dlfiles " $func_resolve_sysroot_result"
7868e19dfac4Smrg	  prev=
78697cea3689Smrg	elif test dlprefiles = "$prev"; then
7870e19dfac4Smrg	  # The library was specified with -dlpreopen.
7871313a12fdSmrg	  func_append dlprefiles " $func_resolve_sysroot_result"
7872e19dfac4Smrg	  prev=
7873e19dfac4Smrg	else
7874313a12fdSmrg	  func_append deplibs " $func_resolve_sysroot_result"
7875e19dfac4Smrg	fi
7876e19dfac4Smrg	continue
7877e19dfac4Smrg	;;
7878e19dfac4Smrg
7879e19dfac4Smrg      # Some other compiler argument.
7880e19dfac4Smrg      *)
7881e19dfac4Smrg	# Unknown arguments in both finalize_command and compile_command need
7882e19dfac4Smrg	# to be aesthetically quoted because they are evaled later.
788395b7a5c8Smrg	func_quote_arg pretty "$arg"
788495b7a5c8Smrg	arg=$func_quote_arg_result
7885e19dfac4Smrg	;;
7886e19dfac4Smrg      esac # arg
7887e19dfac4Smrg
7888e19dfac4Smrg      # Now actually substitute the argument into the commands.
7889e19dfac4Smrg      if test -n "$arg"; then
7890ae545d91Smrg	if test -n "$rpath_arg"; then
7891ae545d91Smrg          func_append finalize_rpath " ${arg##*,}"
7892ae545d91Smrg	  unset rpath_arg
7893ae545d91Smrg	else
7894ae545d91Smrg	  case $arg in
7895ae545d91Smrg          -Wl,-rpath,*)
7896ae545d91Smrg	    func_append finalize_rpath " ${arg##*,}";;
7897ae545d91Smrg          -Wl,-rpath)
7898ae545d91Smrg	    rpath_arg=1;;
7899ae545d91Smrg          *)
7900ae545d91Smrg            func_append compile_command " $arg"
7901ae545d91Smrg	    func_append finalize_command " $arg"
7902ae545d91Smrg	  esac
7903ae545d91Smrg        fi
7904e19dfac4Smrg      fi
7905e19dfac4Smrg    done # argument parsing loop
7906e19dfac4Smrg
7907e19dfac4Smrg    test -n "$prev" && \
79087cea3689Smrg      func_fatal_help "the '$prevarg' option requires an argument"
7909e19dfac4Smrg
79107cea3689Smrg    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
7911e19dfac4Smrg      eval arg=\"$export_dynamic_flag_spec\"
7912e19dfac4Smrg      func_append compile_command " $arg"
7913e19dfac4Smrg      func_append finalize_command " $arg"
7914e19dfac4Smrg    fi
7915e19dfac4Smrg
7916e19dfac4Smrg    oldlibs=
7917e19dfac4Smrg    # calculate the name of the file, without its directory
7918e19dfac4Smrg    func_basename "$output"
79197cea3689Smrg    outputname=$func_basename_result
79207cea3689Smrg    libobjs_save=$libobjs
7921e19dfac4Smrg
7922e19dfac4Smrg    if test -n "$shlibpath_var"; then
7923e19dfac4Smrg      # get the directories listed in $shlibpath_var
79247cea3689Smrg      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
792527702724Smrg    else
7926e19dfac4Smrg      shlib_search_path=
792727702724Smrg    fi
7928e19dfac4Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
7929e19dfac4Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
793027702724Smrg
79317cea3689Smrg    # Definition is injected by LT_CONFIG during libtool generation.
79327cea3689Smrg    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
79337cea3689Smrg
7934e19dfac4Smrg    func_dirname "$output" "/" ""
79357cea3689Smrg    output_objdir=$func_dirname_result$objdir
7936313a12fdSmrg    func_to_tool_file "$output_objdir/"
7937313a12fdSmrg    tool_output_objdir=$func_to_tool_file_result
7938e19dfac4Smrg    # Create the object directory.
7939e19dfac4Smrg    func_mkdir_p "$output_objdir"
794027702724Smrg
7941e19dfac4Smrg    # Determine the type of output
7942e19dfac4Smrg    case $output in
7943e19dfac4Smrg    "")
7944e19dfac4Smrg      func_fatal_help "you must specify an output file"
7945e19dfac4Smrg      ;;
7946e19dfac4Smrg    *.$libext) linkmode=oldlib ;;
7947e19dfac4Smrg    *.lo | *.$objext) linkmode=obj ;;
7948e19dfac4Smrg    *.la) linkmode=lib ;;
7949e19dfac4Smrg    *) linkmode=prog ;; # Anything else should be a program.
7950e19dfac4Smrg    esac
7951e19dfac4Smrg
7952e19dfac4Smrg    specialdeplibs=
7953e19dfac4Smrg
7954e19dfac4Smrg    libs=
7955e19dfac4Smrg    # Find all interdependent deplibs by searching for libraries
7956e19dfac4Smrg    # that are linked more than once (e.g. -la -lb -la)
7957e19dfac4Smrg    for deplib in $deplibs; do
79587cea3689Smrg      if $opt_preserve_dup_deps; then
7959e19dfac4Smrg	case "$libs " in
7960313a12fdSmrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
7961e19dfac4Smrg	esac
7962e19dfac4Smrg      fi
7963313a12fdSmrg      func_append libs " $deplib"
7964e19dfac4Smrg    done
7965e19dfac4Smrg
79667cea3689Smrg    if test lib = "$linkmode"; then
7967e19dfac4Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
7968e19dfac4Smrg
7969e19dfac4Smrg      # Compute libraries that are listed more than once in $predeps
7970e19dfac4Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
7971e19dfac4Smrg      # not to be eliminated).
7972e19dfac4Smrg      pre_post_deps=
7973e19dfac4Smrg      if $opt_duplicate_compiler_generated_deps; then
7974e19dfac4Smrg	for pre_post_dep in $predeps $postdeps; do
7975e19dfac4Smrg	  case "$pre_post_deps " in
7976313a12fdSmrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
7977e19dfac4Smrg	  esac
7978313a12fdSmrg	  func_append pre_post_deps " $pre_post_dep"
7979e19dfac4Smrg	done
7980e19dfac4Smrg      fi
7981e19dfac4Smrg      pre_post_deps=
7982e19dfac4Smrg    fi
7983e19dfac4Smrg
7984e19dfac4Smrg    deplibs=
7985e19dfac4Smrg    newdependency_libs=
7986e19dfac4Smrg    newlib_search_path=
7987e19dfac4Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
7988e19dfac4Smrg    notinst_deplibs= # not-installed libtool libraries
7989e19dfac4Smrg    notinst_path= # paths that contain not-installed libtool libraries
7990e19dfac4Smrg
7991e19dfac4Smrg    case $linkmode in
7992e19dfac4Smrg    lib)
7993e19dfac4Smrg	passes="conv dlpreopen link"
7994e19dfac4Smrg	for file in $dlfiles $dlprefiles; do
7995e19dfac4Smrg	  case $file in
7996e19dfac4Smrg	  *.la) ;;
7997e19dfac4Smrg	  *)
79987cea3689Smrg	    func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
7999e19dfac4Smrg	    ;;
8000e19dfac4Smrg	  esac
8001e19dfac4Smrg	done
8002e19dfac4Smrg	;;
8003e19dfac4Smrg    prog)
8004e19dfac4Smrg	compile_deplibs=
8005e19dfac4Smrg	finalize_deplibs=
80067cea3689Smrg	alldeplibs=false
8007e19dfac4Smrg	newdlfiles=
8008e19dfac4Smrg	newdlprefiles=
8009e19dfac4Smrg	passes="conv scan dlopen dlpreopen link"
8010e19dfac4Smrg	;;
8011e19dfac4Smrg    *)  passes="conv"
8012e19dfac4Smrg	;;
8013e19dfac4Smrg    esac
8014e19dfac4Smrg
8015e19dfac4Smrg    for pass in $passes; do
8016e19dfac4Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
8017e19dfac4Smrg      # so that -L comes before libs that need it for instance...
80187cea3689Smrg      if test lib,link = "$linkmode,$pass"; then
8019e19dfac4Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
8020e19dfac4Smrg	##        order, and fix it there properly
8021e19dfac4Smrg        tmp_deplibs=
8022e19dfac4Smrg	for deplib in $deplibs; do
8023e19dfac4Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
8024e19dfac4Smrg	done
80257cea3689Smrg	deplibs=$tmp_deplibs
8026e19dfac4Smrg      fi
8027e19dfac4Smrg
80287cea3689Smrg      if test lib,link = "$linkmode,$pass" ||
80297cea3689Smrg	 test prog,scan = "$linkmode,$pass"; then
80307cea3689Smrg	libs=$deplibs
8031e19dfac4Smrg	deplibs=
8032e19dfac4Smrg      fi
80337cea3689Smrg      if test prog = "$linkmode"; then
8034e19dfac4Smrg	case $pass in
80357cea3689Smrg	dlopen) libs=$dlfiles ;;
80367cea3689Smrg	dlpreopen) libs=$dlprefiles ;;
8037313a12fdSmrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
8038e19dfac4Smrg	esac
8039e19dfac4Smrg      fi
80407cea3689Smrg      if test lib,dlpreopen = "$linkmode,$pass"; then
8041e19dfac4Smrg	# Collect and forward deplibs of preopened libtool libs
8042e19dfac4Smrg	for lib in $dlprefiles; do
8043e19dfac4Smrg	  # Ignore non-libtool-libs
8044e19dfac4Smrg	  dependency_libs=
8045313a12fdSmrg	  func_resolve_sysroot "$lib"
8046e19dfac4Smrg	  case $lib in
8047313a12fdSmrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
8048e19dfac4Smrg	  esac
8049e19dfac4Smrg
8050e19dfac4Smrg	  # Collect preopened libtool deplibs, except any this library
8051e19dfac4Smrg	  # has declared as weak libs
8052e19dfac4Smrg	  for deplib in $dependency_libs; do
8053313a12fdSmrg	    func_basename "$deplib"
8054313a12fdSmrg            deplib_base=$func_basename_result
8055e19dfac4Smrg	    case " $weak_libs " in
8056e19dfac4Smrg	    *" $deplib_base "*) ;;
8057313a12fdSmrg	    *) func_append deplibs " $deplib" ;;
8058e19dfac4Smrg	    esac
8059e19dfac4Smrg	  done
8060e19dfac4Smrg	done
80617cea3689Smrg	libs=$dlprefiles
8062e19dfac4Smrg      fi
80637cea3689Smrg      if test dlopen = "$pass"; then
8064e19dfac4Smrg	# Collect dlpreopened libraries
80657cea3689Smrg	save_deplibs=$deplibs
8066e19dfac4Smrg	deplibs=
8067e19dfac4Smrg      fi
8068e19dfac4Smrg
8069e19dfac4Smrg      for deplib in $libs; do
8070e19dfac4Smrg	lib=
80717cea3689Smrg	found=false
8072e19dfac4Smrg	case $deplib in
8073313a12fdSmrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
8074ae545d91Smrg        |-threads|-fopenmp|-fopenmp=*|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
80757cea3689Smrg	  if test prog,link = "$linkmode,$pass"; then
8076e19dfac4Smrg	    compile_deplibs="$deplib $compile_deplibs"
8077e19dfac4Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
8078e19dfac4Smrg	  else
8079313a12fdSmrg	    func_append compiler_flags " $deplib"
80807cea3689Smrg	    if test lib = "$linkmode"; then
8081e19dfac4Smrg		case "$new_inherited_linker_flags " in
8082e19dfac4Smrg		    *" $deplib "*) ;;
8083313a12fdSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
8084e19dfac4Smrg		esac
8085e19dfac4Smrg	    fi
8086e19dfac4Smrg	  fi
8087e19dfac4Smrg	  continue
8088e19dfac4Smrg	  ;;
8089e19dfac4Smrg	-l*)
80907cea3689Smrg	  if test lib != "$linkmode" && test prog != "$linkmode"; then
80917cea3689Smrg	    func_warning "'-l' is ignored for archives/objects"
8092e19dfac4Smrg	    continue
8093e19dfac4Smrg	  fi
8094e19dfac4Smrg	  func_stripname '-l' '' "$deplib"
8095e19dfac4Smrg	  name=$func_stripname_result
80967cea3689Smrg	  if test lib = "$linkmode"; then
8097e19dfac4Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
8098e19dfac4Smrg	  else
8099e19dfac4Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
8100e19dfac4Smrg	  fi
8101e19dfac4Smrg	  for searchdir in $searchdirs; do
8102e19dfac4Smrg	    for search_ext in .la $std_shrext .so .a; do
8103e19dfac4Smrg	      # Search the libtool library
81047cea3689Smrg	      lib=$searchdir/lib$name$search_ext
8105e19dfac4Smrg	      if test -f "$lib"; then
81067cea3689Smrg		if test .la = "$search_ext"; then
81077cea3689Smrg		  found=:
8108e19dfac4Smrg		else
81097cea3689Smrg		  found=false
8110e19dfac4Smrg		fi
8111e19dfac4Smrg		break 2
8112e19dfac4Smrg	      fi
8113e19dfac4Smrg	    done
8114e19dfac4Smrg	  done
81157cea3689Smrg	  if $found; then
81167cea3689Smrg	    # deplib is a libtool library
8117e19dfac4Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
8118e19dfac4Smrg	    # We need to do some special things here, and not later.
81197cea3689Smrg	    if test yes = "$allow_libtool_libs_with_static_runtimes"; then
8120e19dfac4Smrg	      case " $predeps $postdeps " in
8121e19dfac4Smrg	      *" $deplib "*)
8122e19dfac4Smrg		if func_lalib_p "$lib"; then
8123e19dfac4Smrg		  library_names=
8124e19dfac4Smrg		  old_library=
8125e19dfac4Smrg		  func_source "$lib"
8126e19dfac4Smrg		  for l in $old_library $library_names; do
81277cea3689Smrg		    ll=$l
8128e19dfac4Smrg		  done
81297cea3689Smrg		  if test "X$ll" = "X$old_library"; then # only static version available
81307cea3689Smrg		    found=false
8131e19dfac4Smrg		    func_dirname "$lib" "" "."
81327cea3689Smrg		    ladir=$func_dirname_result
8133e19dfac4Smrg		    lib=$ladir/$old_library
81347cea3689Smrg		    if test prog,link = "$linkmode,$pass"; then
8135e19dfac4Smrg		      compile_deplibs="$deplib $compile_deplibs"
8136e19dfac4Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
8137e19dfac4Smrg		    else
8138e19dfac4Smrg		      deplibs="$deplib $deplibs"
81397cea3689Smrg		      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
8140e19dfac4Smrg		    fi
8141e19dfac4Smrg		    continue
8142e19dfac4Smrg		  fi
8143e19dfac4Smrg		fi
8144e19dfac4Smrg		;;
8145e19dfac4Smrg	      *) ;;
8146e19dfac4Smrg	      esac
8147e19dfac4Smrg	    fi
81487cea3689Smrg	  else
81497cea3689Smrg	    # deplib doesn't seem to be a libtool library
81507cea3689Smrg	    if test prog,link = "$linkmode,$pass"; then
81517cea3689Smrg	      compile_deplibs="$deplib $compile_deplibs"
81527cea3689Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
81537cea3689Smrg	    else
81547cea3689Smrg	      deplibs="$deplib $deplibs"
81557cea3689Smrg	      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
81567cea3689Smrg	    fi
81577cea3689Smrg	    continue
8158e19dfac4Smrg	  fi
8159e19dfac4Smrg	  ;; # -l
8160e19dfac4Smrg	*.ltframework)
81617cea3689Smrg	  if test prog,link = "$linkmode,$pass"; then
8162e19dfac4Smrg	    compile_deplibs="$deplib $compile_deplibs"
8163e19dfac4Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
8164e19dfac4Smrg	  else
8165e19dfac4Smrg	    deplibs="$deplib $deplibs"
81667cea3689Smrg	    if test lib = "$linkmode"; then
8167e19dfac4Smrg		case "$new_inherited_linker_flags " in
8168e19dfac4Smrg		    *" $deplib "*) ;;
8169313a12fdSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
8170e19dfac4Smrg		esac
8171e19dfac4Smrg	    fi
8172e19dfac4Smrg	  fi
8173e19dfac4Smrg	  continue
8174e19dfac4Smrg	  ;;
8175e19dfac4Smrg	-L*)
8176e19dfac4Smrg	  case $linkmode in
8177e19dfac4Smrg	  lib)
8178e19dfac4Smrg	    deplibs="$deplib $deplibs"
81797cea3689Smrg	    test conv = "$pass" && continue
8180e19dfac4Smrg	    newdependency_libs="$deplib $newdependency_libs"
8181e19dfac4Smrg	    func_stripname '-L' '' "$deplib"
8182313a12fdSmrg	    func_resolve_sysroot "$func_stripname_result"
8183313a12fdSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
8184e19dfac4Smrg	    ;;
8185e19dfac4Smrg	  prog)
81867cea3689Smrg	    if test conv = "$pass"; then
8187e19dfac4Smrg	      deplibs="$deplib $deplibs"
8188e19dfac4Smrg	      continue
8189e19dfac4Smrg	    fi
81907cea3689Smrg	    if test scan = "$pass"; then
8191e19dfac4Smrg	      deplibs="$deplib $deplibs"
8192e19dfac4Smrg	    else
8193e19dfac4Smrg	      compile_deplibs="$deplib $compile_deplibs"
8194e19dfac4Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
8195e19dfac4Smrg	    fi
8196e19dfac4Smrg	    func_stripname '-L' '' "$deplib"
8197313a12fdSmrg	    func_resolve_sysroot "$func_stripname_result"
8198313a12fdSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
8199e19dfac4Smrg	    ;;
8200e19dfac4Smrg	  *)
82017cea3689Smrg	    func_warning "'-L' is ignored for archives/objects"
8202e19dfac4Smrg	    ;;
8203e19dfac4Smrg	  esac # linkmode
8204e19dfac4Smrg	  continue
8205e19dfac4Smrg	  ;; # -L
8206e19dfac4Smrg	-R*)
82077cea3689Smrg	  if test link = "$pass"; then
8208e19dfac4Smrg	    func_stripname '-R' '' "$deplib"
8209313a12fdSmrg	    func_resolve_sysroot "$func_stripname_result"
8210313a12fdSmrg	    dir=$func_resolve_sysroot_result
8211e19dfac4Smrg	    # Make sure the xrpath contains only unique directories.
8212e19dfac4Smrg	    case "$xrpath " in
8213e19dfac4Smrg	    *" $dir "*) ;;
8214313a12fdSmrg	    *) func_append xrpath " $dir" ;;
8215e19dfac4Smrg	    esac
8216e19dfac4Smrg	  fi
8217e19dfac4Smrg	  deplibs="$deplib $deplibs"
8218e19dfac4Smrg	  continue
8219e19dfac4Smrg	  ;;
8220313a12fdSmrg	*.la)
8221313a12fdSmrg	  func_resolve_sysroot "$deplib"
8222313a12fdSmrg	  lib=$func_resolve_sysroot_result
8223313a12fdSmrg	  ;;
8224e19dfac4Smrg	*.$libext)
82257cea3689Smrg	  if test conv = "$pass"; then
8226e19dfac4Smrg	    deplibs="$deplib $deplibs"
8227e19dfac4Smrg	    continue
8228e19dfac4Smrg	  fi
8229e19dfac4Smrg	  case $linkmode in
8230e19dfac4Smrg	  lib)
8231e19dfac4Smrg	    # Linking convenience modules into shared libraries is allowed,
8232e19dfac4Smrg	    # but linking other static libraries is non-portable.
8233e19dfac4Smrg	    case " $dlpreconveniencelibs " in
8234e19dfac4Smrg	    *" $deplib "*) ;;
8235e19dfac4Smrg	    *)
82367cea3689Smrg	      valid_a_lib=false
8237e19dfac4Smrg	      case $deplibs_check_method in
8238e19dfac4Smrg		match_pattern*)
8239e19dfac4Smrg		  set dummy $deplibs_check_method; shift
8240e19dfac4Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
8241313a12fdSmrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
8242e19dfac4Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
82437cea3689Smrg		    valid_a_lib=:
8244e19dfac4Smrg		  fi
8245e19dfac4Smrg		;;
8246e19dfac4Smrg		pass_all)
82477cea3689Smrg		  valid_a_lib=:
8248e19dfac4Smrg		;;
8249e19dfac4Smrg	      esac
82507cea3689Smrg	      if $valid_a_lib; then
8251ae545d91Smrg		func_warning "Linking the shared library $output against the static library $deplib is not portable!"
82527cea3689Smrg		deplibs="$deplib $deplibs"
82537cea3689Smrg	      else
8254ae545d91Smrg		func_warning "Trying to link with static lib archive $deplib."
8255ae545d91Smrg		func_warning "I have the capability to make that library automatically link in when"
8256ae545d91Smrg		func_warning "you link to this library.  But I can only do this if you have a"
8257ae545d91Smrg		func_warning "shared version of the library, which you do not appear to have"
8258ae545d91Smrg		func_warning "because the file extensions .$libext of this argument makes me believe"
8259ae545d91Smrg		func_warning "that it is just a static archive that I should not use here."
8260e19dfac4Smrg	      fi
8261e19dfac4Smrg	      ;;
8262e19dfac4Smrg	    esac
8263e19dfac4Smrg	    continue
8264e19dfac4Smrg	    ;;
8265e19dfac4Smrg	  prog)
82667cea3689Smrg	    if test link != "$pass"; then
8267e19dfac4Smrg	      deplibs="$deplib $deplibs"
8268e19dfac4Smrg	    else
8269e19dfac4Smrg	      compile_deplibs="$deplib $compile_deplibs"
8270e19dfac4Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
8271e19dfac4Smrg	    fi
8272e19dfac4Smrg	    continue
8273e19dfac4Smrg	    ;;
8274e19dfac4Smrg	  esac # linkmode
8275e19dfac4Smrg	  ;; # *.$libext
8276e19dfac4Smrg	*.lo | *.$objext)
82777cea3689Smrg	  if test conv = "$pass"; then
8278e19dfac4Smrg	    deplibs="$deplib $deplibs"
82797cea3689Smrg	  elif test prog = "$linkmode"; then
82807cea3689Smrg	    if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
8281e19dfac4Smrg	      # If there is no dlopen support or we're linking statically,
8282e19dfac4Smrg	      # we need to preload.
8283313a12fdSmrg	      func_append newdlprefiles " $deplib"
8284e19dfac4Smrg	      compile_deplibs="$deplib $compile_deplibs"
8285e19dfac4Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
8286e19dfac4Smrg	    else
8287313a12fdSmrg	      func_append newdlfiles " $deplib"
8288e19dfac4Smrg	    fi
8289e19dfac4Smrg	  fi
8290e19dfac4Smrg	  continue
8291e19dfac4Smrg	  ;;
8292e19dfac4Smrg	%DEPLIBS%)
82937cea3689Smrg	  alldeplibs=:
8294e19dfac4Smrg	  continue
8295e19dfac4Smrg	  ;;
8296e19dfac4Smrg	esac # case $deplib
8297e19dfac4Smrg
82987cea3689Smrg	$found || test -f "$lib" \
82997cea3689Smrg	  || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
8300e19dfac4Smrg
8301e19dfac4Smrg	# Check to see that this really is a libtool archive.
8302e19dfac4Smrg	func_lalib_unsafe_p "$lib" \
83037cea3689Smrg	  || func_fatal_error "'$lib' is not a valid libtool archive"
8304e19dfac4Smrg
8305e19dfac4Smrg	func_dirname "$lib" "" "."
83067cea3689Smrg	ladir=$func_dirname_result
8307e19dfac4Smrg
8308e19dfac4Smrg	dlname=
8309e19dfac4Smrg	dlopen=
8310e19dfac4Smrg	dlpreopen=
8311e19dfac4Smrg	libdir=
8312e19dfac4Smrg	library_names=
8313e19dfac4Smrg	old_library=
8314e19dfac4Smrg	inherited_linker_flags=
8315e19dfac4Smrg	# If the library was installed with an old release of libtool,
8316e19dfac4Smrg	# it will not redefine variables installed, or shouldnotlink
8317e19dfac4Smrg	installed=yes
8318e19dfac4Smrg	shouldnotlink=no
8319e19dfac4Smrg	avoidtemprpath=
8320e19dfac4Smrg
8321e19dfac4Smrg
8322e19dfac4Smrg	# Read the .la file
8323e19dfac4Smrg	func_source "$lib"
8324e19dfac4Smrg
8325e19dfac4Smrg	# Convert "-framework foo" to "foo.ltframework"
8326e19dfac4Smrg	if test -n "$inherited_linker_flags"; then
8327313a12fdSmrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
8328e19dfac4Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
8329e19dfac4Smrg	    case " $new_inherited_linker_flags " in
8330e19dfac4Smrg	      *" $tmp_inherited_linker_flag "*) ;;
8331313a12fdSmrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
8332e19dfac4Smrg	    esac
8333e19dfac4Smrg	  done
8334e19dfac4Smrg	fi
8335313a12fdSmrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
83367cea3689Smrg	if test lib,link = "$linkmode,$pass" ||
83377cea3689Smrg	   test prog,scan = "$linkmode,$pass" ||
83387cea3689Smrg	   { test prog != "$linkmode" && test lib != "$linkmode"; }; then
8339313a12fdSmrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
8340313a12fdSmrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
8341e19dfac4Smrg	fi
8342e19dfac4Smrg
83437cea3689Smrg	if test conv = "$pass"; then
8344e19dfac4Smrg	  # Only check for convenience libraries
8345e19dfac4Smrg	  deplibs="$lib $deplibs"
8346e19dfac4Smrg	  if test -z "$libdir"; then
8347e19dfac4Smrg	    if test -z "$old_library"; then
83487cea3689Smrg	      func_fatal_error "cannot find name of link library for '$lib'"
8349e19dfac4Smrg	    fi
8350e19dfac4Smrg	    # It is a libtool convenience library, so add in its objects.
8351313a12fdSmrg	    func_append convenience " $ladir/$objdir/$old_library"
8352313a12fdSmrg	    func_append old_convenience " $ladir/$objdir/$old_library"
83537cea3689Smrg	  elif test prog != "$linkmode" && test lib != "$linkmode"; then
83547cea3689Smrg	    func_fatal_error "'$lib' is not a convenience library"
8355e19dfac4Smrg	  fi
8356313a12fdSmrg	  tmp_libs=
8357313a12fdSmrg	  for deplib in $dependency_libs; do
8358313a12fdSmrg	    deplibs="$deplib $deplibs"
83597cea3689Smrg	    if $opt_preserve_dup_deps; then
8360313a12fdSmrg	      case "$tmp_libs " in
8361313a12fdSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8362313a12fdSmrg	      esac
8363313a12fdSmrg	    fi
8364313a12fdSmrg	    func_append tmp_libs " $deplib"
8365313a12fdSmrg	  done
8366e19dfac4Smrg	  continue
8367e19dfac4Smrg	fi # $pass = conv
8368e19dfac4Smrg
8369e19dfac4Smrg
8370e19dfac4Smrg	# Get the name of the library we link against.
8371e19dfac4Smrg	linklib=
8372313a12fdSmrg	if test -n "$old_library" &&
83737cea3689Smrg	   { test yes = "$prefer_static_libs" ||
83747cea3689Smrg	     test built,no = "$prefer_static_libs,$installed"; }; then
8375313a12fdSmrg	  linklib=$old_library
8376313a12fdSmrg	else
8377313a12fdSmrg	  for l in $old_library $library_names; do
83787cea3689Smrg	    linklib=$l
8379313a12fdSmrg	  done
8380313a12fdSmrg	fi
8381e19dfac4Smrg	if test -z "$linklib"; then
83827cea3689Smrg	  func_fatal_error "cannot find name of link library for '$lib'"
8383e19dfac4Smrg	fi
8384e19dfac4Smrg
8385e19dfac4Smrg	# This library was specified with -dlopen.
83867cea3689Smrg	if test dlopen = "$pass"; then
83877cea3689Smrg	  test -z "$libdir" \
83887cea3689Smrg	    && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
8389e19dfac4Smrg	  if test -z "$dlname" ||
83907cea3689Smrg	     test yes != "$dlopen_support" ||
83917cea3689Smrg	     test no = "$build_libtool_libs"
83927cea3689Smrg	  then
8393e19dfac4Smrg	    # If there is no dlname, no dlopen support or we're linking
8394e19dfac4Smrg	    # statically, we need to preload.  We also need to preload any
8395e19dfac4Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
8396e19dfac4Smrg	    # bomb out in the load deplibs phase.
8397313a12fdSmrg	    func_append dlprefiles " $lib $dependency_libs"
8398e19dfac4Smrg	  else
8399313a12fdSmrg	    func_append newdlfiles " $lib"
8400e19dfac4Smrg	  fi
8401e19dfac4Smrg	  continue
8402e19dfac4Smrg	fi # $pass = dlopen
8403e19dfac4Smrg
8404e19dfac4Smrg	# We need an absolute path.
8405e19dfac4Smrg	case $ladir in
84067cea3689Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
8407e19dfac4Smrg	*)
8408e19dfac4Smrg	  abs_ladir=`cd "$ladir" && pwd`
8409e19dfac4Smrg	  if test -z "$abs_ladir"; then
84107cea3689Smrg	    func_warning "cannot determine absolute directory name of '$ladir'"
8411e19dfac4Smrg	    func_warning "passing it literally to the linker, although it might fail"
84127cea3689Smrg	    abs_ladir=$ladir
8413e19dfac4Smrg	  fi
8414e19dfac4Smrg	  ;;
8415e19dfac4Smrg	esac
8416e19dfac4Smrg	func_basename "$lib"
84177cea3689Smrg	laname=$func_basename_result
8418e19dfac4Smrg
8419e19dfac4Smrg	# Find the relevant object directory and library name.
84207cea3689Smrg	if test yes = "$installed"; then
8421313a12fdSmrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
84227cea3689Smrg	    func_warning "library '$lib' was moved."
84237cea3689Smrg	    dir=$ladir
84247cea3689Smrg	    absdir=$abs_ladir
84257cea3689Smrg	    libdir=$abs_ladir
8426e19dfac4Smrg	  else
84277cea3689Smrg	    dir=$lt_sysroot$libdir
84287cea3689Smrg	    absdir=$lt_sysroot$libdir
8429e19dfac4Smrg	  fi
84307cea3689Smrg	  test yes = "$hardcode_automatic" && avoidtemprpath=yes
8431e19dfac4Smrg	else
8432e19dfac4Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
84337cea3689Smrg	    dir=$ladir
84347cea3689Smrg	    absdir=$abs_ladir
8435e19dfac4Smrg	    # Remove this search path later
8436313a12fdSmrg	    func_append notinst_path " $abs_ladir"
8437e19dfac4Smrg	  else
84387cea3689Smrg	    dir=$ladir/$objdir
84397cea3689Smrg	    absdir=$abs_ladir/$objdir
8440e19dfac4Smrg	    # Remove this search path later
8441313a12fdSmrg	    func_append notinst_path " $abs_ladir"
8442e19dfac4Smrg	  fi
8443e19dfac4Smrg	fi # $installed = yes
8444e19dfac4Smrg	func_stripname 'lib' '.la' "$laname"
8445e19dfac4Smrg	name=$func_stripname_result
8446e19dfac4Smrg
8447e19dfac4Smrg	# This library was specified with -dlpreopen.
84487cea3689Smrg	if test dlpreopen = "$pass"; then
84497cea3689Smrg	  if test -z "$libdir" && test prog = "$linkmode"; then
84507cea3689Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
8451e19dfac4Smrg	  fi
84527cea3689Smrg	  case $host in
8453313a12fdSmrg	    # special handling for platforms with PE-DLLs.
8454ae545d91Smrg	    *cygwin* | *mingw* | *windows* | *cegcc* )
8455313a12fdSmrg	      # Linker will automatically link against shared library if both
8456313a12fdSmrg	      # static and shared are present.  Therefore, ensure we extract
8457313a12fdSmrg	      # symbols from the import library if a shared library is present
8458313a12fdSmrg	      # (otherwise, the dlopen module name will be incorrect).  We do
8459313a12fdSmrg	      # this by putting the import library name into $newdlprefiles.
8460313a12fdSmrg	      # We recover the dlopen module name by 'saving' the la file
8461313a12fdSmrg	      # name in a special purpose variable, and (later) extracting the
8462313a12fdSmrg	      # dlname from the la file.
8463313a12fdSmrg	      if test -n "$dlname"; then
8464313a12fdSmrg	        func_tr_sh "$dir/$linklib"
8465313a12fdSmrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
8466313a12fdSmrg	        func_append newdlprefiles " $dir/$linklib"
8467313a12fdSmrg	      else
8468313a12fdSmrg	        func_append newdlprefiles " $dir/$old_library"
8469313a12fdSmrg	        # Keep a list of preopened convenience libraries to check
8470313a12fdSmrg	        # that they are being used correctly in the link pass.
8471313a12fdSmrg	        test -z "$libdir" && \
8472313a12fdSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
8473313a12fdSmrg	      fi
8474313a12fdSmrg	    ;;
8475313a12fdSmrg	    * )
8476313a12fdSmrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
8477313a12fdSmrg	      # are required to link).
8478313a12fdSmrg	      if test -n "$old_library"; then
8479313a12fdSmrg	        func_append newdlprefiles " $dir/$old_library"
8480313a12fdSmrg	        # Keep a list of preopened convenience libraries to check
8481313a12fdSmrg	        # that they are being used correctly in the link pass.
8482313a12fdSmrg	        test -z "$libdir" && \
8483313a12fdSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
8484313a12fdSmrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
8485313a12fdSmrg	      elif test -n "$dlname"; then
8486313a12fdSmrg	        func_append newdlprefiles " $dir/$dlname"
8487313a12fdSmrg	      else
8488313a12fdSmrg	        func_append newdlprefiles " $dir/$linklib"
8489313a12fdSmrg	      fi
8490313a12fdSmrg	    ;;
8491313a12fdSmrg	  esac
8492e19dfac4Smrg	fi # $pass = dlpreopen
8493e19dfac4Smrg
8494e19dfac4Smrg	if test -z "$libdir"; then
8495e19dfac4Smrg	  # Link the convenience library
84967cea3689Smrg	  if test lib = "$linkmode"; then
8497e19dfac4Smrg	    deplibs="$dir/$old_library $deplibs"
84987cea3689Smrg	  elif test prog,link = "$linkmode,$pass"; then
8499e19dfac4Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
8500e19dfac4Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
8501e19dfac4Smrg	  else
8502e19dfac4Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
8503e19dfac4Smrg	  fi
8504e19dfac4Smrg	  continue
8505e19dfac4Smrg	fi
8506e19dfac4Smrg
8507e19dfac4Smrg
85087cea3689Smrg	if test prog = "$linkmode" && test link != "$pass"; then
8509313a12fdSmrg	  func_append newlib_search_path " $ladir"
8510e19dfac4Smrg	  deplibs="$lib $deplibs"
8511e19dfac4Smrg
85127cea3689Smrg	  linkalldeplibs=false
85137cea3689Smrg	  if test no != "$link_all_deplibs" || test -z "$library_names" ||
85147cea3689Smrg	     test no = "$build_libtool_libs"; then
85157cea3689Smrg	    linkalldeplibs=:
8516e19dfac4Smrg	  fi
8517e19dfac4Smrg
8518e19dfac4Smrg	  tmp_libs=
8519e19dfac4Smrg	  for deplib in $dependency_libs; do
8520e19dfac4Smrg	    case $deplib in
8521e19dfac4Smrg	    -L*) func_stripname '-L' '' "$deplib"
8522313a12fdSmrg	         func_resolve_sysroot "$func_stripname_result"
8523313a12fdSmrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
8524e19dfac4Smrg		 ;;
8525e19dfac4Smrg	    esac
8526e19dfac4Smrg	    # Need to link against all dependency_libs?
85277cea3689Smrg	    if $linkalldeplibs; then
8528e19dfac4Smrg	      deplibs="$deplib $deplibs"
8529e19dfac4Smrg	    else
8530e19dfac4Smrg	      # Need to hardcode shared library paths
8531e19dfac4Smrg	      # or/and link against static libraries
8532e19dfac4Smrg	      newdependency_libs="$deplib $newdependency_libs"
8533e19dfac4Smrg	    fi
85347cea3689Smrg	    if $opt_preserve_dup_deps; then
8535e19dfac4Smrg	      case "$tmp_libs " in
8536313a12fdSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8537e19dfac4Smrg	      esac
8538e19dfac4Smrg	    fi
8539313a12fdSmrg	    func_append tmp_libs " $deplib"
8540e19dfac4Smrg	  done # for deplib
8541e19dfac4Smrg	  continue
8542e19dfac4Smrg	fi # $linkmode = prog...
8543e19dfac4Smrg
85447cea3689Smrg	if test prog,link = "$linkmode,$pass"; then
8545e19dfac4Smrg	  if test -n "$library_names" &&
85467cea3689Smrg	     { { test no = "$prefer_static_libs" ||
85477cea3689Smrg	         test built,yes = "$prefer_static_libs,$installed"; } ||
8548e19dfac4Smrg	       test -z "$old_library"; }; then
8549e19dfac4Smrg	    # We need to hardcode the library path
85507cea3689Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
8551e19dfac4Smrg	      # Make sure the rpath contains only unique directories.
85527cea3689Smrg	      case $temp_rpath: in
8553e19dfac4Smrg	      *"$absdir:"*) ;;
8554ae545d91Smrg              *) case $absdir in
8555ae545d91Smrg                 "$progdir/"*) func_append temp_rpath "$absdir:" ;;
8556ae545d91Smrg                 *)            func_append temp_rpath_tail "$absdir:" ;;
8557ae545d91Smrg                 esac
8558e19dfac4Smrg	      esac
8559e19dfac4Smrg	    fi
8560e19dfac4Smrg
8561e19dfac4Smrg	    # Hardcode the library path.
8562e19dfac4Smrg	    # Skip directories that are in the system default run-time
8563e19dfac4Smrg	    # search path.
8564e19dfac4Smrg	    case " $sys_lib_dlsearch_path " in
8565e19dfac4Smrg	    *" $absdir "*) ;;
8566e19dfac4Smrg	    *)
8567ae545d91Smrg	      case "$compile_rpath$compile_rpath_tail " in
8568e19dfac4Smrg	      *" $absdir "*) ;;
8569ae545d91Smrg	      *) case $absdir in
8570ae545d91Smrg                 "$progdir/"*) func_append compile_rpath " $absdir" ;;
8571ae545d91Smrg                 *) func_append compile_rpath_tail " $absdir" ;;
8572ae545d91Smrg		 esac
8573e19dfac4Smrg	      esac
8574e19dfac4Smrg	      ;;
8575e19dfac4Smrg	    esac
8576e19dfac4Smrg	    case " $sys_lib_dlsearch_path " in
8577e19dfac4Smrg	    *" $libdir "*) ;;
8578e19dfac4Smrg	    *)
8579e19dfac4Smrg	      case "$finalize_rpath " in
8580e19dfac4Smrg	      *" $libdir "*) ;;
8581313a12fdSmrg	      *) func_append finalize_rpath " $libdir" ;;
8582e19dfac4Smrg	      esac
8583e19dfac4Smrg	      ;;
8584e19dfac4Smrg	    esac
8585e19dfac4Smrg	  fi # $linkmode,$pass = prog,link...
8586e19dfac4Smrg
85877cea3689Smrg	  if $alldeplibs &&
85887cea3689Smrg	     { test pass_all = "$deplibs_check_method" ||
85897cea3689Smrg	       { test yes = "$build_libtool_libs" &&
8590e19dfac4Smrg		 test -n "$library_names"; }; }; then
8591e19dfac4Smrg	    # We only need to search for static libraries
8592e19dfac4Smrg	    continue
8593e19dfac4Smrg	  fi
8594e19dfac4Smrg	fi
8595e19dfac4Smrg
8596e19dfac4Smrg	link_static=no # Whether the deplib will be linked statically
8597e19dfac4Smrg	use_static_libs=$prefer_static_libs
85987cea3689Smrg	if test built = "$use_static_libs" && test yes = "$installed"; then
8599e19dfac4Smrg	  use_static_libs=no
8600e19dfac4Smrg	fi
8601e19dfac4Smrg	if test -n "$library_names" &&
86027cea3689Smrg	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
8603ae545d91Smrg	  case $host_os in
8604ae545d91Smrg	  cygwin* | mingw* | windows* | cegcc* | os2*)
8605e19dfac4Smrg	      # No point in relinking DLLs because paths are not encoded
8606313a12fdSmrg	      func_append notinst_deplibs " $lib"
8607e19dfac4Smrg	      need_relink=no
8608e19dfac4Smrg	    ;;
8609e19dfac4Smrg	  *)
86107cea3689Smrg	    if test no = "$installed"; then
8611313a12fdSmrg	      func_append notinst_deplibs " $lib"
8612e19dfac4Smrg	      need_relink=yes
8613e19dfac4Smrg	    fi
8614e19dfac4Smrg	    ;;
8615e19dfac4Smrg	  esac
8616e19dfac4Smrg	  # This is a shared library
8617e19dfac4Smrg
8618e19dfac4Smrg	  # Warn about portability, can't link against -module's on some
8619e19dfac4Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
86207cea3689Smrg	  dlopenmodule=
8621e19dfac4Smrg	  for dlpremoduletest in $dlprefiles; do
8622e19dfac4Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
86237cea3689Smrg	      dlopenmodule=$dlpremoduletest
8624e19dfac4Smrg	      break
8625e19dfac4Smrg	    fi
8626e19dfac4Smrg	  done
86277cea3689Smrg	  if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
8628313a12fdSmrg	    echo
86297cea3689Smrg	    if test prog = "$linkmode"; then
8630ae545d91Smrg	      func_warning "Linking the executable $output against the loadable module"
8631e19dfac4Smrg	    else
8632ae545d91Smrg	      func_warning "Linking the shared library $output against the loadable module"
8633e19dfac4Smrg	    fi
8634ae545d91Smrg	    func_warning "$linklib is not portable!"
8635e19dfac4Smrg	  fi
86367cea3689Smrg	  if test lib = "$linkmode" &&
86377cea3689Smrg	     test yes = "$hardcode_into_libs"; then
8638e19dfac4Smrg	    # Hardcode the library path.
8639e19dfac4Smrg	    # Skip directories that are in the system default run-time
8640e19dfac4Smrg	    # search path.
8641e19dfac4Smrg	    case " $sys_lib_dlsearch_path " in
8642e19dfac4Smrg	    *" $absdir "*) ;;
8643e19dfac4Smrg	    *)
8644ae545d91Smrg	      case "$compile_rpath$compile_rpath_tail " in
8645e19dfac4Smrg	      *" $absdir "*) ;;
8646ae545d91Smrg	      *) case $absdir in
8647ae545d91Smrg                 "$progdir/"*) func_append compile_rpath " $absdir" ;;
8648ae545d91Smrg                 *) func_append compile_rpath_tail " $absdir" ;;
8649ae545d91Smrg		 esac
8650e19dfac4Smrg	      esac
8651e19dfac4Smrg	      ;;
8652e19dfac4Smrg	    esac
8653e19dfac4Smrg	    case " $sys_lib_dlsearch_path " in
8654e19dfac4Smrg	    *" $libdir "*) ;;
8655e19dfac4Smrg	    *)
8656e19dfac4Smrg	      case "$finalize_rpath " in
8657e19dfac4Smrg	      *" $libdir "*) ;;
8658313a12fdSmrg	      *) func_append finalize_rpath " $libdir" ;;
8659e19dfac4Smrg	      esac
8660e19dfac4Smrg	      ;;
8661e19dfac4Smrg	    esac
8662e19dfac4Smrg	  fi
8663e19dfac4Smrg
8664e19dfac4Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
8665e19dfac4Smrg	    # figure out the soname
8666e19dfac4Smrg	    set dummy $library_names
8667e19dfac4Smrg	    shift
86687cea3689Smrg	    realname=$1
8669e19dfac4Smrg	    shift
8670e19dfac4Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
8671e19dfac4Smrg	    # use dlname if we got it. it's perfectly good, no?
8672e19dfac4Smrg	    if test -n "$dlname"; then
86737cea3689Smrg	      soname=$dlname
8674e19dfac4Smrg	    elif test -n "$soname_spec"; then
8675e19dfac4Smrg	      # bleh windows
8676ae545d91Smrg	      case $host_os in
8677ae545d91Smrg	      cygwin* | mingw* | windows* | cegcc* | os2*)
8678e19dfac4Smrg	        func_arith $current - $age
8679e19dfac4Smrg		major=$func_arith_result
86807cea3689Smrg		versuffix=-$major
8681e19dfac4Smrg		;;
8682e19dfac4Smrg	      esac
8683e19dfac4Smrg	      eval soname=\"$soname_spec\"
8684e19dfac4Smrg	    else
86857cea3689Smrg	      soname=$realname
8686e19dfac4Smrg	    fi
8687e19dfac4Smrg
8688e19dfac4Smrg	    # Make a new name for the extract_expsyms_cmds to use
86897cea3689Smrg	    soroot=$soname
8690e19dfac4Smrg	    func_basename "$soroot"
86917cea3689Smrg	    soname=$func_basename_result
8692e19dfac4Smrg	    func_stripname 'lib' '.dll' "$soname"
8693e19dfac4Smrg	    newlib=libimp-$func_stripname_result.a
8694e19dfac4Smrg
8695e19dfac4Smrg	    # If the library has no export list, then create one now
8696e19dfac4Smrg	    if test -f "$output_objdir/$soname-def"; then :
8697e19dfac4Smrg	    else
86987cea3689Smrg	      func_verbose "extracting exported symbol list from '$soname'"
8699e19dfac4Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
8700e19dfac4Smrg	    fi
8701e19dfac4Smrg
8702e19dfac4Smrg	    # Create $newlib
8703e19dfac4Smrg	    if test -f "$output_objdir/$newlib"; then :; else
87047cea3689Smrg	      func_verbose "generating import library for '$soname'"
8705e19dfac4Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
8706e19dfac4Smrg	    fi
8707e19dfac4Smrg	    # make sure the library variables are pointing to the new library
8708e19dfac4Smrg	    dir=$output_objdir
8709e19dfac4Smrg	    linklib=$newlib
8710e19dfac4Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
8711e19dfac4Smrg
87127cea3689Smrg	  if test prog = "$linkmode" || test relink != "$opt_mode"; then
8713e19dfac4Smrg	    add_shlibpath=
8714e19dfac4Smrg	    add_dir=
8715e19dfac4Smrg	    add=
8716e19dfac4Smrg	    lib_linked=yes
8717e19dfac4Smrg	    case $hardcode_action in
8718e19dfac4Smrg	    immediate | unsupported)
87197cea3689Smrg	      if test no = "$hardcode_direct"; then
87207cea3689Smrg		add=$dir/$linklib
8721e19dfac4Smrg		case $host in
87227cea3689Smrg		  *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
87237cea3689Smrg		  *-*-sysv4*uw2*) add_dir=-L$dir ;;
8724ae545d91Smrg		  *-*-emscripten*) add_dir=-L$dir ;;
8725e19dfac4Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
87267cea3689Smrg		    *-*-unixware7*) add_dir=-L$dir ;;
8727e19dfac4Smrg		  *-*-darwin* )
87287cea3689Smrg		    # if the lib is a (non-dlopened) module then we cannot
8729e19dfac4Smrg		    # link against it, someone is ignoring the earlier warnings
8730e19dfac4Smrg		    if /usr/bin/file -L $add 2> /dev/null |
87317cea3689Smrg			 $GREP ": [^:]* bundle" >/dev/null; then
8732e19dfac4Smrg		      if test "X$dlopenmodule" != "X$lib"; then
8733ae545d91Smrg			func_warning "lib $linklib is a module, not a shared library"
87347cea3689Smrg			if test -z "$old_library"; then
8735ae545d91Smrg			  func_warning "And there doesn't seem to be a static archive available"
8736ae545d91Smrg			  func_warning "The link will probably fail, sorry"
8737e19dfac4Smrg			else
87387cea3689Smrg			  add=$dir/$old_library
8739e19dfac4Smrg			fi
8740e19dfac4Smrg		      elif test -n "$old_library"; then
87417cea3689Smrg			add=$dir/$old_library
8742e19dfac4Smrg		      fi
8743e19dfac4Smrg		    fi
8744e19dfac4Smrg		esac
87457cea3689Smrg	      elif test no = "$hardcode_minus_L"; then
8746e19dfac4Smrg		case $host in
87477cea3689Smrg		*-*-sunos*) add_shlibpath=$dir ;;
8748e19dfac4Smrg		esac
87497cea3689Smrg		add_dir=-L$dir
87507cea3689Smrg		add=-l$name
87517cea3689Smrg	      elif test no = "$hardcode_shlibpath_var"; then
87527cea3689Smrg		add_shlibpath=$dir
87537cea3689Smrg		add=-l$name
8754e19dfac4Smrg	      else
8755e19dfac4Smrg		lib_linked=no
8756e19dfac4Smrg	      fi
8757e19dfac4Smrg	      ;;
8758e19dfac4Smrg	    relink)
87597cea3689Smrg	      if test yes = "$hardcode_direct" &&
87607cea3689Smrg	         test no = "$hardcode_direct_absolute"; then
87617cea3689Smrg		add=$dir/$linklib
87627cea3689Smrg	      elif test yes = "$hardcode_minus_L"; then
87637cea3689Smrg		add_dir=-L$absdir
8764e19dfac4Smrg		# Try looking first in the location we're being installed to.
8765e19dfac4Smrg		if test -n "$inst_prefix_dir"; then
8766e19dfac4Smrg		  case $libdir in
8767e19dfac4Smrg		    [\\/]*)
8768313a12fdSmrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
8769e19dfac4Smrg		      ;;
8770e19dfac4Smrg		  esac
8771e19dfac4Smrg		fi
87727cea3689Smrg		add=-l$name
87737cea3689Smrg	      elif test yes = "$hardcode_shlibpath_var"; then
87747cea3689Smrg		add_shlibpath=$dir
87757cea3689Smrg		add=-l$name
8776e19dfac4Smrg	      else
8777e19dfac4Smrg		lib_linked=no
8778e19dfac4Smrg	      fi
8779e19dfac4Smrg	      ;;
8780e19dfac4Smrg	    *) lib_linked=no ;;
8781e19dfac4Smrg	    esac
8782e19dfac4Smrg
87837cea3689Smrg	    if test yes != "$lib_linked"; then
8784e19dfac4Smrg	      func_fatal_configuration "unsupported hardcode properties"
8785e19dfac4Smrg	    fi
8786e19dfac4Smrg
8787e19dfac4Smrg	    if test -n "$add_shlibpath"; then
8788e19dfac4Smrg	      case :$compile_shlibpath: in
8789e19dfac4Smrg	      *":$add_shlibpath:"*) ;;
8790313a12fdSmrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
8791e19dfac4Smrg	      esac
8792e19dfac4Smrg	    fi
87937cea3689Smrg	    if test prog = "$linkmode"; then
8794e19dfac4Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
8795e19dfac4Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
8796e19dfac4Smrg	    else
8797e19dfac4Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8798e19dfac4Smrg	      test -n "$add" && deplibs="$add $deplibs"
87997cea3689Smrg	      if test yes != "$hardcode_direct" &&
88007cea3689Smrg		 test yes != "$hardcode_minus_L" &&
88017cea3689Smrg		 test yes = "$hardcode_shlibpath_var"; then
8802e19dfac4Smrg		case :$finalize_shlibpath: in
8803e19dfac4Smrg		*":$libdir:"*) ;;
8804313a12fdSmrg		*) func_append finalize_shlibpath "$libdir:" ;;
8805e19dfac4Smrg		esac
8806e19dfac4Smrg	      fi
8807e19dfac4Smrg	    fi
8808e19dfac4Smrg	  fi
8809e19dfac4Smrg
88107cea3689Smrg	  if test prog = "$linkmode" || test relink = "$opt_mode"; then
8811e19dfac4Smrg	    add_shlibpath=
8812e19dfac4Smrg	    add_dir=
8813e19dfac4Smrg	    add=
8814e19dfac4Smrg	    # Finalize command for both is simple: just hardcode it.
88157cea3689Smrg	    if test yes = "$hardcode_direct" &&
88167cea3689Smrg	       test no = "$hardcode_direct_absolute"; then
88177cea3689Smrg	      add=$libdir/$linklib
88187cea3689Smrg	    elif test yes = "$hardcode_minus_L"; then
8819ae545d91Smrg	      add_dir=-L$lt_sysroot$libdir
88207cea3689Smrg	      add=-l$name
88217cea3689Smrg	    elif test yes = "$hardcode_shlibpath_var"; then
8822e19dfac4Smrg	      case :$finalize_shlibpath: in
8823e19dfac4Smrg	      *":$libdir:"*) ;;
8824313a12fdSmrg	      *) func_append finalize_shlibpath "$libdir:" ;;
8825e19dfac4Smrg	      esac
88267cea3689Smrg	      add=-l$name
88277cea3689Smrg	    elif test yes = "$hardcode_automatic"; then
8828e19dfac4Smrg	      if test -n "$inst_prefix_dir" &&
88297cea3689Smrg		 test -f "$inst_prefix_dir$libdir/$linklib"; then
88307cea3689Smrg		add=$inst_prefix_dir$libdir/$linklib
8831e19dfac4Smrg	      else
88327cea3689Smrg		add=$libdir/$linklib
8833e19dfac4Smrg	      fi
8834e19dfac4Smrg	    else
8835e19dfac4Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
8836ae545d91Smrg	      add_dir=-L$lt_sysroot$libdir
8837e19dfac4Smrg	      # Try looking first in the location we're being installed to.
8838e19dfac4Smrg	      if test -n "$inst_prefix_dir"; then
8839e19dfac4Smrg		case $libdir in
8840e19dfac4Smrg		  [\\/]*)
8841313a12fdSmrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
8842e19dfac4Smrg		    ;;
8843e19dfac4Smrg		esac
8844e19dfac4Smrg	      fi
88457cea3689Smrg	      add=-l$name
8846e19dfac4Smrg	    fi
8847e19dfac4Smrg
88487cea3689Smrg	    if test prog = "$linkmode"; then
8849e19dfac4Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
8850e19dfac4Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
8851e19dfac4Smrg	    else
8852e19dfac4Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8853e19dfac4Smrg	      test -n "$add" && deplibs="$add $deplibs"
8854e19dfac4Smrg	    fi
8855e19dfac4Smrg	  fi
88567cea3689Smrg	elif test prog = "$linkmode"; then
8857e19dfac4Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
8858e19dfac4Smrg	  # is not unsupported.  This is valid on all known static and
8859e19dfac4Smrg	  # shared platforms.
88607cea3689Smrg	  if test unsupported != "$hardcode_direct"; then
88617cea3689Smrg	    test -n "$old_library" && linklib=$old_library
8862e19dfac4Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
8863e19dfac4Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
8864e19dfac4Smrg	  else
8865e19dfac4Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
8866e19dfac4Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
8867e19dfac4Smrg	  fi
88687cea3689Smrg	elif test yes = "$build_libtool_libs"; then
8869e19dfac4Smrg	  # Not a shared library
88707cea3689Smrg	  if test pass_all != "$deplibs_check_method"; then
8871e19dfac4Smrg	    # We're trying link a shared library against a static one
8872e19dfac4Smrg	    # but the system doesn't support it.
8873e19dfac4Smrg
8874e19dfac4Smrg	    # Just print a warning and add the library to dependency_libs so
8875e19dfac4Smrg	    # that the program can be linked against the static library.
8876ae545d91Smrg	    func_warning "This system cannot link to static lib archive $lib."
8877ae545d91Smrg	    func_warning "I have the capability to make that library automatically link in when"
8878ae545d91Smrg	    func_warning "you link to this library.  But I can only do this if you have a"
8879ae545d91Smrg	    func_warning "shared version of the library, which you do not appear to have."
88807cea3689Smrg	    if test yes = "$module"; then
8881ae545d91Smrg	      func_warning "But as you try to build a module library, libtool will still create "
8882ae545d91Smrg	      func_warning "a static module, that should work as long as the dlopening application"
8883ae545d91Smrg	      func_warning "is linked with the -dlopen flag to resolve symbols at runtime."
8884e19dfac4Smrg	      if test -z "$global_symbol_pipe"; then
8885ae545d91Smrg		func_warning "However, this would only work if libtool was able to extract symbol"
8886ae545d91Smrg		func_warning "lists from a program, using 'nm' or equivalent, but libtool could"
8887ae545d91Smrg		func_warning "not find such a program.  So, this module is probably useless."
8888ae545d91Smrg		func_warning "'nm' from GNU binutils and a full rebuild may help."
8889e19dfac4Smrg	      fi
88907cea3689Smrg	      if test no = "$build_old_libs"; then
8891e19dfac4Smrg		build_libtool_libs=module
8892e19dfac4Smrg		build_old_libs=yes
8893e19dfac4Smrg	      else
8894e19dfac4Smrg		build_libtool_libs=no
8895e19dfac4Smrg	      fi
8896e19dfac4Smrg	    fi
8897e19dfac4Smrg	  else
8898e19dfac4Smrg	    deplibs="$dir/$old_library $deplibs"
8899e19dfac4Smrg	    link_static=yes
8900e19dfac4Smrg	  fi
8901e19dfac4Smrg	fi # link shared/static library?
8902e19dfac4Smrg
89037cea3689Smrg	if test lib = "$linkmode"; then
8904e19dfac4Smrg	  if test -n "$dependency_libs" &&
89057cea3689Smrg	     { test yes != "$hardcode_into_libs" ||
89067cea3689Smrg	       test yes = "$build_old_libs" ||
89077cea3689Smrg	       test yes = "$link_static"; }; then
8908e19dfac4Smrg	    # Extract -R from dependency_libs
8909e19dfac4Smrg	    temp_deplibs=
8910e19dfac4Smrg	    for libdir in $dependency_libs; do
8911e19dfac4Smrg	      case $libdir in
8912e19dfac4Smrg	      -R*) func_stripname '-R' '' "$libdir"
8913e19dfac4Smrg	           temp_xrpath=$func_stripname_result
8914e19dfac4Smrg		   case " $xrpath " in
8915e19dfac4Smrg		   *" $temp_xrpath "*) ;;
8916313a12fdSmrg		   *) func_append xrpath " $temp_xrpath";;
8917e19dfac4Smrg		   esac;;
8918313a12fdSmrg	      *) func_append temp_deplibs " $libdir";;
8919e19dfac4Smrg	      esac
8920e19dfac4Smrg	    done
89217cea3689Smrg	    dependency_libs=$temp_deplibs
8922e19dfac4Smrg	  fi
8923e19dfac4Smrg
8924313a12fdSmrg	  func_append newlib_search_path " $absdir"
8925e19dfac4Smrg	  # Link against this library
89267cea3689Smrg	  test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
8927e19dfac4Smrg	  # ... and its dependency_libs
8928e19dfac4Smrg	  tmp_libs=
8929e19dfac4Smrg	  for deplib in $dependency_libs; do
8930e19dfac4Smrg	    newdependency_libs="$deplib $newdependency_libs"
8931313a12fdSmrg	    case $deplib in
8932313a12fdSmrg              -L*) func_stripname '-L' '' "$deplib"
8933313a12fdSmrg                   func_resolve_sysroot "$func_stripname_result";;
8934313a12fdSmrg              *) func_resolve_sysroot "$deplib" ;;
8935313a12fdSmrg            esac
89367cea3689Smrg	    if $opt_preserve_dup_deps; then
8937e19dfac4Smrg	      case "$tmp_libs " in
8938313a12fdSmrg	      *" $func_resolve_sysroot_result "*)
8939313a12fdSmrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
8940e19dfac4Smrg	      esac
8941e19dfac4Smrg	    fi
8942313a12fdSmrg	    func_append tmp_libs " $func_resolve_sysroot_result"
8943e19dfac4Smrg	  done
8944e19dfac4Smrg
89457cea3689Smrg	  if test no != "$link_all_deplibs"; then
8946e19dfac4Smrg	    # Add the search paths of all dependency libraries
8947e19dfac4Smrg	    for deplib in $dependency_libs; do
894800084f2cSmrg	      path=
8949e19dfac4Smrg	      case $deplib in
89507cea3689Smrg	      -L*) path=$deplib ;;
8951e19dfac4Smrg	      *.la)
8952313a12fdSmrg	        func_resolve_sysroot "$deplib"
8953313a12fdSmrg	        deplib=$func_resolve_sysroot_result
8954e19dfac4Smrg	        func_dirname "$deplib" "" "."
8955313a12fdSmrg		dir=$func_dirname_result
8956e19dfac4Smrg		# We need an absolute path.
8957e19dfac4Smrg		case $dir in
89587cea3689Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
8959e19dfac4Smrg		*)
8960e19dfac4Smrg		  absdir=`cd "$dir" && pwd`
8961e19dfac4Smrg		  if test -z "$absdir"; then
89627cea3689Smrg		    func_warning "cannot determine absolute directory name of '$dir'"
89637cea3689Smrg		    absdir=$dir
8964e19dfac4Smrg		  fi
8965e19dfac4Smrg		  ;;
8966e19dfac4Smrg		esac
8967e19dfac4Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
8968e19dfac4Smrg		case $host in
8969e19dfac4Smrg		*-*-darwin*)
8970e19dfac4Smrg		  depdepl=
89717cea3689Smrg		  eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
89727cea3689Smrg		  if test -n "$deplibrary_names"; then
89737cea3689Smrg		    for tmp in $deplibrary_names; do
8974e19dfac4Smrg		      depdepl=$tmp
8975e19dfac4Smrg		    done
89767cea3689Smrg		    if test -f "$absdir/$objdir/$depdepl"; then
89777cea3689Smrg		      depdepl=$absdir/$objdir/$depdepl
89787cea3689Smrg		      darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
8979e19dfac4Smrg                      if test -z "$darwin_install_name"; then
89807cea3689Smrg                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
8981e19dfac4Smrg                      fi
89827cea3689Smrg		      func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
89837cea3689Smrg		      func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
8984e19dfac4Smrg		      path=
8985e19dfac4Smrg		    fi
8986e19dfac4Smrg		  fi
8987e19dfac4Smrg		  ;;
8988e19dfac4Smrg		*)
89897cea3689Smrg		  path=-L$absdir/$objdir
8990e19dfac4Smrg		  ;;
8991e19dfac4Smrg		esac
8992e19dfac4Smrg		else
89937cea3689Smrg		  eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
8994e19dfac4Smrg		  test -z "$libdir" && \
89957cea3689Smrg		    func_fatal_error "'$deplib' is not a valid libtool archive"
8996e19dfac4Smrg		  test "$absdir" != "$libdir" && \
89977cea3689Smrg		    func_warning "'$deplib' seems to be moved"
8998e19dfac4Smrg
89997cea3689Smrg		  path=-L$absdir
9000e19dfac4Smrg		fi
9001e19dfac4Smrg		;;
9002e19dfac4Smrg	      esac
9003e19dfac4Smrg	      case " $deplibs " in
9004e19dfac4Smrg	      *" $path "*) ;;
9005e19dfac4Smrg	      *) deplibs="$path $deplibs" ;;
9006e19dfac4Smrg	      esac
9007e19dfac4Smrg	    done
9008e19dfac4Smrg	  fi # link_all_deplibs != no
9009e19dfac4Smrg	fi # linkmode = lib
9010e19dfac4Smrg      done # for deplib in $libs
9011ae545d91Smrg
9012ae545d91Smrg      func_append temp_rpath "$temp_rpath_tail"
9013ae545d91Smrg      func_append compile_rpath "$compile_rpath_tail"
9014ae545d91Smrg
90157cea3689Smrg      if test link = "$pass"; then
90167cea3689Smrg	if test prog = "$linkmode"; then
9017e19dfac4Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
9018e19dfac4Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
9019e19dfac4Smrg	else
9020313a12fdSmrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9021e19dfac4Smrg	fi
9022e19dfac4Smrg      fi
90237cea3689Smrg      dependency_libs=$newdependency_libs
90247cea3689Smrg      if test dlpreopen = "$pass"; then
9025e19dfac4Smrg	# Link the dlpreopened libraries before other libraries
9026e19dfac4Smrg	for deplib in $save_deplibs; do
9027e19dfac4Smrg	  deplibs="$deplib $deplibs"
9028e19dfac4Smrg	done
9029e19dfac4Smrg      fi
90307cea3689Smrg      if test dlopen != "$pass"; then
90317cea3689Smrg	test conv = "$pass" || {
9032e19dfac4Smrg	  # Make sure lib_search_path contains only unique directories.
9033e19dfac4Smrg	  lib_search_path=
9034e19dfac4Smrg	  for dir in $newlib_search_path; do
9035e19dfac4Smrg	    case "$lib_search_path " in
9036e19dfac4Smrg	    *" $dir "*) ;;
9037313a12fdSmrg	    *) func_append lib_search_path " $dir" ;;
9038e19dfac4Smrg	    esac
9039e19dfac4Smrg	  done
9040e19dfac4Smrg	  newlib_search_path=
90417cea3689Smrg	}
9042e19dfac4Smrg
90437cea3689Smrg	if test prog,link = "$linkmode,$pass"; then
9044e19dfac4Smrg	  vars="compile_deplibs finalize_deplibs"
90457cea3689Smrg	else
90467cea3689Smrg	  vars=deplibs
9047e19dfac4Smrg	fi
9048e19dfac4Smrg	for var in $vars dependency_libs; do
9049e19dfac4Smrg	  # Add libraries to $var in reverse order
9050e19dfac4Smrg	  eval tmp_libs=\"\$$var\"
9051e19dfac4Smrg	  new_libs=
9052ae545d91Smrg	  # FIXME: Pedantically, this is the right thing to do, so
9053ae545d91Smrg	  #        that some nasty dependency loop isn't accidentally
9054ae545d91Smrg	  #        broken: new_libs="$deplib $new_libs"
9055e19dfac4Smrg	  for deplib in $tmp_libs; do
9056ae545d91Smrg	    if $opt_preserve_dup_deps; then
9057ae545d91Smrg	      new_libs="$deplib $new_libs"
9058ae545d91Smrg	    else
9059ae545d91Smrg	      # Pragmatically, this seems to cause very few problems in
9060ae545d91Smrg	      # practice:
9061ae545d91Smrg	      case $deplib in
9062ae545d91Smrg	      -L*) new_libs="$deplib $new_libs" ;;
9063ae545d91Smrg	      -R*) ;;
9064e19dfac4Smrg	      *)
9065ae545d91Smrg	        # And here is the reason: when a library appears more
9066ae545d91Smrg	        # than once as an explicit dependence of a library, or
9067ae545d91Smrg	        # is implicitly linked in more than once by the
9068ae545d91Smrg	        # compiler, it is considered special, and multiple
9069ae545d91Smrg	        # occurrences thereof are not removed.  Compare this
9070ae545d91Smrg	        # with having the same library being listed as a
9071ae545d91Smrg	        # dependency of multiple other libraries: in this case,
9072ae545d91Smrg	        # we know (pedantically, we assume) the library does not
9073ae545d91Smrg	        # need to be listed more than once, so we keep only the
9074ae545d91Smrg	        # last copy.  This is not always right, but it is rare
9075ae545d91Smrg	        # enough that we require users that really mean to play
9076ae545d91Smrg	        # such unportable linking tricks to link the library
9077ae545d91Smrg	        # using -Wl,-lname, so that libtool does not consider it
9078ae545d91Smrg	        # for duplicate removal.  And if not possible for portability
9079ae545d91Smrg	        # reasons, then --preserve-dup-deps should be used.
9080ae545d91Smrg	        case " $specialdeplibs " in
9081ae545d91Smrg	        *" $deplib "*) new_libs="$deplib $new_libs" ;;
9082ae545d91Smrg	        *)
9083ae545d91Smrg	          case " $new_libs " in
9084ae545d91Smrg	          *" $deplib "*) ;;
9085ae545d91Smrg	          *) new_libs="$deplib $new_libs" ;;
9086ae545d91Smrg	          esac
9087ae545d91Smrg	          ;;
9088ae545d91Smrg	        esac
9089ae545d91Smrg	        ;;
9090e19dfac4Smrg	      esac
9091ae545d91Smrg	    fi
9092e19dfac4Smrg	  done
9093e19dfac4Smrg	  tmp_libs=
9094e19dfac4Smrg	  for deplib in $new_libs; do
9095e19dfac4Smrg	    case $deplib in
9096e19dfac4Smrg	    -L*)
9097e19dfac4Smrg	      case " $tmp_libs " in
9098e19dfac4Smrg	      *" $deplib "*) ;;
9099313a12fdSmrg	      *) func_append tmp_libs " $deplib" ;;
9100e19dfac4Smrg	      esac
9101e19dfac4Smrg	      ;;
9102313a12fdSmrg	    *) func_append tmp_libs " $deplib" ;;
9103e19dfac4Smrg	    esac
9104e19dfac4Smrg	  done
9105e19dfac4Smrg	  eval $var=\"$tmp_libs\"
9106e19dfac4Smrg	done # for var
9107e19dfac4Smrg      fi
91087cea3689Smrg
91097cea3689Smrg      # Add Sun CC postdeps if required:
91107cea3689Smrg      test CXX = "$tagname" && {
91117cea3689Smrg        case $host_os in
91127cea3689Smrg        linux*)
911395b7a5c8Smrg          case `$CC -V 2>&1 | $SED 5q` in
91147cea3689Smrg          *Sun\ C*) # Sun C++ 5.9
91157cea3689Smrg            func_suncc_cstd_abi
91167cea3689Smrg
91177cea3689Smrg            if test no != "$suncc_use_cstd_abi"; then
91187cea3689Smrg              func_append postdeps ' -library=Cstd -library=Crun'
91197cea3689Smrg            fi
91207cea3689Smrg            ;;
91217cea3689Smrg          esac
91227cea3689Smrg          ;;
91237cea3689Smrg
91247cea3689Smrg        solaris*)
91257cea3689Smrg          func_cc_basename "$CC"
91267cea3689Smrg          case $func_cc_basename_result in
91277cea3689Smrg          CC* | sunCC*)
91287cea3689Smrg            func_suncc_cstd_abi
91297cea3689Smrg
91307cea3689Smrg            if test no != "$suncc_use_cstd_abi"; then
91317cea3689Smrg              func_append postdeps ' -library=Cstd -library=Crun'
91327cea3689Smrg            fi
91337cea3689Smrg            ;;
91347cea3689Smrg          esac
91357cea3689Smrg          ;;
91367cea3689Smrg        esac
91377cea3689Smrg      }
91387cea3689Smrg
9139e19dfac4Smrg      # Last step: remove runtime libs from dependency_libs
9140e19dfac4Smrg      # (they stay in deplibs)
9141e19dfac4Smrg      tmp_libs=
91427cea3689Smrg      for i in $dependency_libs; do
9143e19dfac4Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
9144e19dfac4Smrg	*" $i "*)
91457cea3689Smrg	  i=
9146e19dfac4Smrg	  ;;
9147e19dfac4Smrg	esac
91487cea3689Smrg	if test -n "$i"; then
9149313a12fdSmrg	  func_append tmp_libs " $i"
9150e19dfac4Smrg	fi
9151e19dfac4Smrg      done
9152e19dfac4Smrg      dependency_libs=$tmp_libs
9153e19dfac4Smrg    done # for pass
91547cea3689Smrg    if test prog = "$linkmode"; then
91557cea3689Smrg      dlfiles=$newdlfiles
9156e19dfac4Smrg    fi
91577cea3689Smrg    if test prog = "$linkmode" || test lib = "$linkmode"; then
91587cea3689Smrg      dlprefiles=$newdlprefiles
9159e19dfac4Smrg    fi
9160e19dfac4Smrg
9161e19dfac4Smrg    case $linkmode in
9162e19dfac4Smrg    oldlib)
91637cea3689Smrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
91647cea3689Smrg	func_warning "'-dlopen' is ignored for archives"
9165e19dfac4Smrg      fi
9166e19dfac4Smrg
9167e19dfac4Smrg      case " $deplibs" in
9168e19dfac4Smrg      *\ -l* | *\ -L*)
91697cea3689Smrg	func_warning "'-l' and '-L' are ignored for archives" ;;
9170e19dfac4Smrg      esac
9171e19dfac4Smrg
9172e19dfac4Smrg      test -n "$rpath" && \
91737cea3689Smrg	func_warning "'-rpath' is ignored for archives"
9174e19dfac4Smrg
9175e19dfac4Smrg      test -n "$xrpath" && \
91767cea3689Smrg	func_warning "'-R' is ignored for archives"
9177e19dfac4Smrg
9178e19dfac4Smrg      test -n "$vinfo" && \
91797cea3689Smrg	func_warning "'-version-info/-version-number' is ignored for archives"
9180e19dfac4Smrg
9181e19dfac4Smrg      test -n "$release" && \
91827cea3689Smrg	func_warning "'-release' is ignored for archives"
9183e19dfac4Smrg
9184e19dfac4Smrg      test -n "$export_symbols$export_symbols_regex" && \
91857cea3689Smrg	func_warning "'-export-symbols' is ignored for archives"
9186e19dfac4Smrg
9187e19dfac4Smrg      # Now set the variables for building old libraries.
9188e19dfac4Smrg      build_libtool_libs=no
91897cea3689Smrg      oldlibs=$output
9190313a12fdSmrg      func_append objs "$old_deplibs"
9191e19dfac4Smrg      ;;
9192e19dfac4Smrg
9193e19dfac4Smrg    lib)
91947cea3689Smrg      # Make sure we only generate libraries of the form 'libNAME.la'.
9195e19dfac4Smrg      case $outputname in
9196e19dfac4Smrg      lib*)
9197e19dfac4Smrg	func_stripname 'lib' '.la' "$outputname"
9198e19dfac4Smrg	name=$func_stripname_result
9199e19dfac4Smrg	eval shared_ext=\"$shrext_cmds\"
9200e19dfac4Smrg	eval libname=\"$libname_spec\"
9201e19dfac4Smrg	;;
9202e19dfac4Smrg      *)
92037cea3689Smrg	test no = "$module" \
92047cea3689Smrg	  && func_fatal_help "libtool library '$output' must begin with 'lib'"
9205e19dfac4Smrg
92067cea3689Smrg	if test no != "$need_lib_prefix"; then
9207e19dfac4Smrg	  # Add the "lib" prefix for modules if required
9208e19dfac4Smrg	  func_stripname '' '.la' "$outputname"
9209e19dfac4Smrg	  name=$func_stripname_result
9210e19dfac4Smrg	  eval shared_ext=\"$shrext_cmds\"
9211e19dfac4Smrg	  eval libname=\"$libname_spec\"
9212e19dfac4Smrg	else
9213e19dfac4Smrg	  func_stripname '' '.la' "$outputname"
9214e19dfac4Smrg	  libname=$func_stripname_result
9215e19dfac4Smrg	fi
9216e19dfac4Smrg	;;
9217e19dfac4Smrg      esac
9218e19dfac4Smrg
9219e19dfac4Smrg      if test -n "$objs"; then
92207cea3689Smrg	if test pass_all != "$deplibs_check_method"; then
92217cea3689Smrg	  func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
9222e19dfac4Smrg	else
9223ae545d91Smrg	  func_warning "Linking the shared library $output against the non-libtool objects $objs is not portable!"
9224313a12fdSmrg	  func_append libobjs " $objs"
9225e19dfac4Smrg	fi
9226e19dfac4Smrg      fi
9227e19dfac4Smrg
92287cea3689Smrg      test no = "$dlself" \
92297cea3689Smrg	|| func_warning "'-dlopen self' is ignored for libtool libraries"
9230e19dfac4Smrg
9231e19dfac4Smrg      set dummy $rpath
9232e19dfac4Smrg      shift
92337cea3689Smrg      test 1 -lt "$#" \
92347cea3689Smrg	&& func_warning "ignoring multiple '-rpath's for a libtool library"
9235e19dfac4Smrg
92367cea3689Smrg      install_libdir=$1
9237e19dfac4Smrg
9238e19dfac4Smrg      oldlibs=
9239e19dfac4Smrg      if test -z "$rpath"; then
92407cea3689Smrg	if test yes = "$build_libtool_libs"; then
9241e19dfac4Smrg	  # Building a libtool convenience library.
92427cea3689Smrg	  # Some compilers have problems with a '.al' extension so
9243e19dfac4Smrg	  # convenience libraries should have the same extension an
9244e19dfac4Smrg	  # archive normally would.
9245e19dfac4Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
9246e19dfac4Smrg	  build_libtool_libs=convenience
9247e19dfac4Smrg	  build_old_libs=yes
9248e19dfac4Smrg	fi
9249e19dfac4Smrg
9250e19dfac4Smrg	test -n "$vinfo" && \
92517cea3689Smrg	  func_warning "'-version-info/-version-number' is ignored for convenience libraries"
9252e19dfac4Smrg
9253e19dfac4Smrg	test -n "$release" && \
92547cea3689Smrg	  func_warning "'-release' is ignored for convenience libraries"
9255e19dfac4Smrg      else
9256e19dfac4Smrg
9257e19dfac4Smrg	# Parse the version information argument.
92587cea3689Smrg	save_ifs=$IFS; IFS=:
9259e19dfac4Smrg	set dummy $vinfo 0 0 0
9260e19dfac4Smrg	shift
92617cea3689Smrg	IFS=$save_ifs
9262e19dfac4Smrg
9263e19dfac4Smrg	test -n "$7" && \
92647cea3689Smrg	  func_fatal_help "too many parameters to '-version-info'"
9265e19dfac4Smrg
9266e19dfac4Smrg	# convert absolute version numbers to libtool ages
9267e19dfac4Smrg	# this retains compatibility with .la files and attempts
9268e19dfac4Smrg	# to make the code below a bit more comprehensible
9269e19dfac4Smrg
9270e19dfac4Smrg	case $vinfo_number in
9271e19dfac4Smrg	yes)
92727cea3689Smrg	  number_major=$1
92737cea3689Smrg	  number_minor=$2
92747cea3689Smrg	  number_revision=$3
9275e19dfac4Smrg	  #
9276e19dfac4Smrg	  # There are really only two kinds -- those that
9277e19dfac4Smrg	  # use the current revision as the major version
9278e19dfac4Smrg	  # and those that subtract age and use age as
9279e19dfac4Smrg	  # a minor version.  But, then there is irix
92807cea3689Smrg	  # that has an extra 1 added just for fun
9281e19dfac4Smrg	  #
9282e19dfac4Smrg	  case $version_type in
9283313a12fdSmrg	  # correct linux to gnu/linux during the next big refactor
9284ae545d91Smrg	  darwin|freebsd-elf|linux|midnightbsd-elf|osf|qnx|windows|none)
9285e19dfac4Smrg	    func_arith $number_major + $number_minor
9286e19dfac4Smrg	    current=$func_arith_result
92877cea3689Smrg	    age=$number_minor
92887cea3689Smrg	    revision=$number_revision
9289e19dfac4Smrg	    ;;
9290ae545d91Smrg	  freebsd-aout|sco|sunos)
92917cea3689Smrg	    current=$number_major
92927cea3689Smrg	    revision=$number_minor
92937cea3689Smrg	    age=0
9294e19dfac4Smrg	    ;;
9295e19dfac4Smrg	  irix|nonstopux)
9296e19dfac4Smrg	    func_arith $number_major + $number_minor
9297e19dfac4Smrg	    current=$func_arith_result
92987cea3689Smrg	    age=$number_minor
92997cea3689Smrg	    revision=$number_minor
9300e19dfac4Smrg	    lt_irix_increment=no
9301e19dfac4Smrg	    ;;
9302ae545d91Smrg	  *)
9303ae545d91Smrg	    func_fatal_configuration "$modename: unknown library version type '$version_type'"
9304ae545d91Smrg	    ;;
9305e19dfac4Smrg	  esac
9306e19dfac4Smrg	  ;;
9307e19dfac4Smrg	no)
93087cea3689Smrg	  current=$1
93097cea3689Smrg	  revision=$2
93107cea3689Smrg	  age=$3
9311e19dfac4Smrg	  ;;
9312e19dfac4Smrg	esac
9313e19dfac4Smrg
9314e19dfac4Smrg	# Check that each of the things are valid numbers.
9315e19dfac4Smrg	case $current in
9316e19dfac4Smrg	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]) ;;
9317e19dfac4Smrg	*)
93187cea3689Smrg	  func_error "CURRENT '$current' must be a nonnegative integer"
93197cea3689Smrg	  func_fatal_error "'$vinfo' is not valid version information"
9320e19dfac4Smrg	  ;;
9321e19dfac4Smrg	esac
9322e19dfac4Smrg
9323e19dfac4Smrg	case $revision in
9324e19dfac4Smrg	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]) ;;
9325e19dfac4Smrg	*)
93267cea3689Smrg	  func_error "REVISION '$revision' must be a nonnegative integer"
93277cea3689Smrg	  func_fatal_error "'$vinfo' is not valid version information"
9328e19dfac4Smrg	  ;;
9329e19dfac4Smrg	esac
9330e19dfac4Smrg
9331e19dfac4Smrg	case $age in
9332e19dfac4Smrg	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]) ;;
9333e19dfac4Smrg	*)
93347cea3689Smrg	  func_error "AGE '$age' must be a nonnegative integer"
93357cea3689Smrg	  func_fatal_error "'$vinfo' is not valid version information"
9336e19dfac4Smrg	  ;;
9337e19dfac4Smrg	esac
9338e19dfac4Smrg
9339e19dfac4Smrg	if test "$age" -gt "$current"; then
93407cea3689Smrg	  func_error "AGE '$age' is greater than the current interface number '$current'"
93417cea3689Smrg	  func_fatal_error "'$vinfo' is not valid version information"
9342e19dfac4Smrg	fi
9343e19dfac4Smrg
9344e19dfac4Smrg	# Calculate the version variables.
9345e19dfac4Smrg	major=
9346e19dfac4Smrg	versuffix=
9347e19dfac4Smrg	verstring=
9348e19dfac4Smrg	case $version_type in
9349e19dfac4Smrg	none) ;;
9350e19dfac4Smrg
9351e19dfac4Smrg	darwin)
9352e19dfac4Smrg	  # Like Linux, but with the current version available in
9353e19dfac4Smrg	  # verstring for coding it into the library header
9354e19dfac4Smrg	  func_arith $current - $age
9355e19dfac4Smrg	  major=.$func_arith_result
93567cea3689Smrg	  versuffix=$major.$age.$revision
9357e19dfac4Smrg	  # Darwin ld doesn't like 0 for these options...
9358e19dfac4Smrg	  func_arith $current + 1
9359e19dfac4Smrg	  minor_current=$func_arith_result
93607cea3689Smrg	  xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
9361e19dfac4Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
93627cea3689Smrg          # On Darwin other compilers
93637cea3689Smrg          case $CC in
93647cea3689Smrg              nagfor*)
93657cea3689Smrg                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
93667cea3689Smrg                  ;;
93677cea3689Smrg              *)
93687cea3689Smrg                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
93697cea3689Smrg                  ;;
93707cea3689Smrg          esac
9371e19dfac4Smrg	  ;;
9372e19dfac4Smrg
9373e19dfac4Smrg	freebsd-aout)
93747cea3689Smrg	  major=.$current
93757cea3689Smrg	  versuffix=.$current.$revision
9376e19dfac4Smrg	  ;;
9377e19dfac4Smrg
937895b7a5c8Smrg	freebsd-elf | midnightbsd-elf)
93797cea3689Smrg	  func_arith $current - $age
93807cea3689Smrg	  major=.$func_arith_result
93817cea3689Smrg	  versuffix=$major.$age.$revision
9382e19dfac4Smrg	  ;;
9383e19dfac4Smrg
9384e19dfac4Smrg	irix | nonstopux)
93857cea3689Smrg	  if test no = "$lt_irix_increment"; then
9386e19dfac4Smrg	    func_arith $current - $age
9387e19dfac4Smrg	  else
9388e19dfac4Smrg	    func_arith $current - $age + 1
9389e19dfac4Smrg	  fi
9390e19dfac4Smrg	  major=$func_arith_result
9391e19dfac4Smrg
9392e19dfac4Smrg	  case $version_type in
9393e19dfac4Smrg	    nonstopux) verstring_prefix=nonstopux ;;
9394e19dfac4Smrg	    *)         verstring_prefix=sgi ;;
9395e19dfac4Smrg	  esac
93967cea3689Smrg	  verstring=$verstring_prefix$major.$revision
9397e19dfac4Smrg
9398e19dfac4Smrg	  # Add in all the interfaces that we are compatible with.
9399e19dfac4Smrg	  loop=$revision
94007cea3689Smrg	  while test 0 -ne "$loop"; do
9401e19dfac4Smrg	    func_arith $revision - $loop
9402e19dfac4Smrg	    iface=$func_arith_result
9403e19dfac4Smrg	    func_arith $loop - 1
9404e19dfac4Smrg	    loop=$func_arith_result
94057cea3689Smrg	    verstring=$verstring_prefix$major.$iface:$verstring
9406e19dfac4Smrg	  done
9407e19dfac4Smrg
94087cea3689Smrg	  # Before this point, $major must not contain '.'.
9409e19dfac4Smrg	  major=.$major
94107cea3689Smrg	  versuffix=$major.$revision
9411e19dfac4Smrg	  ;;
9412e19dfac4Smrg
9413313a12fdSmrg	linux) # correct to gnu/linux during the next big refactor
9414e19dfac4Smrg	  func_arith $current - $age
9415e19dfac4Smrg	  major=.$func_arith_result
94167cea3689Smrg	  versuffix=$major.$age.$revision
9417e19dfac4Smrg	  ;;
9418e19dfac4Smrg
9419e19dfac4Smrg	osf)
9420e19dfac4Smrg	  func_arith $current - $age
9421e19dfac4Smrg	  major=.$func_arith_result
94227cea3689Smrg	  versuffix=.$current.$age.$revision
94237cea3689Smrg	  verstring=$current.$age.$revision
9424e19dfac4Smrg
9425e19dfac4Smrg	  # Add in all the interfaces that we are compatible with.
9426e19dfac4Smrg	  loop=$age
94277cea3689Smrg	  while test 0 -ne "$loop"; do
9428e19dfac4Smrg	    func_arith $current - $loop
9429e19dfac4Smrg	    iface=$func_arith_result
9430e19dfac4Smrg	    func_arith $loop - 1
9431e19dfac4Smrg	    loop=$func_arith_result
94327cea3689Smrg	    verstring=$verstring:$iface.0
9433e19dfac4Smrg	  done
9434e19dfac4Smrg
9435e19dfac4Smrg	  # Make executables depend on our current version.
94367cea3689Smrg	  func_append verstring ":$current.0"
9437e19dfac4Smrg	  ;;
9438e19dfac4Smrg
9439e19dfac4Smrg	qnx)
9440ae545d91Smrg	  func_arith $current - $age
9441ae545d91Smrg	  major=.$func_arith_result
9442ae545d91Smrg	  versuffix=$major.$age.$revision
94437cea3689Smrg	  ;;
94447cea3689Smrg
94457cea3689Smrg	sco)
94467cea3689Smrg	  major=.$current
94477cea3689Smrg	  versuffix=.$current
9448e19dfac4Smrg	  ;;
9449e19dfac4Smrg
9450e19dfac4Smrg	sunos)
94517cea3689Smrg	  major=.$current
94527cea3689Smrg	  versuffix=.$current.$revision
9453e19dfac4Smrg	  ;;
9454e19dfac4Smrg
9455e19dfac4Smrg	windows)
9456e19dfac4Smrg	  # Use '-' rather than '.', since we only want one
94577cea3689Smrg	  # extension on DOS 8.3 file systems.
9458e19dfac4Smrg	  func_arith $current - $age
9459e19dfac4Smrg	  major=$func_arith_result
94607cea3689Smrg	  versuffix=-$major
9461e19dfac4Smrg	  ;;
9462e19dfac4Smrg
9463e19dfac4Smrg	*)
94647cea3689Smrg	  func_fatal_configuration "unknown library version type '$version_type'"
9465e19dfac4Smrg	  ;;
9466e19dfac4Smrg	esac
9467e19dfac4Smrg
9468e19dfac4Smrg	# Clear the version info if we defaulted, and they specified a release.
9469e19dfac4Smrg	if test -z "$vinfo" && test -n "$release"; then
9470e19dfac4Smrg	  major=
9471e19dfac4Smrg	  case $version_type in
9472e19dfac4Smrg	  darwin)
9473e19dfac4Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
9474e19dfac4Smrg	    # problems, so we reset it completely
9475e19dfac4Smrg	    verstring=
9476e19dfac4Smrg	    ;;
9477e19dfac4Smrg	  *)
94787cea3689Smrg	    verstring=0.0
9479e19dfac4Smrg	    ;;
9480e19dfac4Smrg	  esac
94817cea3689Smrg	  if test no = "$need_version"; then
9482e19dfac4Smrg	    versuffix=
9483e19dfac4Smrg	  else
94847cea3689Smrg	    versuffix=.0.0
9485e19dfac4Smrg	  fi
9486e19dfac4Smrg	fi
9487e19dfac4Smrg
9488e19dfac4Smrg	# Remove version info from name if versioning should be avoided
94897cea3689Smrg	if test yes,no = "$avoid_version,$need_version"; then
9490e19dfac4Smrg	  major=
9491e19dfac4Smrg	  versuffix=
94927cea3689Smrg	  verstring=
9493e19dfac4Smrg	fi
9494e19dfac4Smrg
9495e19dfac4Smrg	# Check to see if the archive will have undefined symbols.
94967cea3689Smrg	if test yes = "$allow_undefined"; then
94977cea3689Smrg	  if test unsupported = "$allow_undefined_flag"; then
94987cea3689Smrg	    if test yes = "$build_old_libs"; then
94997cea3689Smrg	      func_warning "undefined symbols not allowed in $host shared libraries; building static only"
95007cea3689Smrg	      build_libtool_libs=no
95017cea3689Smrg	    else
95027cea3689Smrg	      func_fatal_error "can't build $host shared library unless -no-undefined is specified"
95037cea3689Smrg	    fi
9504e19dfac4Smrg	  fi
9505e19dfac4Smrg	else
9506e19dfac4Smrg	  # Don't allow undefined symbols.
95077cea3689Smrg	  allow_undefined_flag=$no_undefined_flag
9508e19dfac4Smrg	fi
9509e19dfac4Smrg
9510e19dfac4Smrg      fi
9511e19dfac4Smrg
95127cea3689Smrg      func_generate_dlsyms "$libname" "$libname" :
9513313a12fdSmrg      func_append libobjs " $symfileobj"
95147cea3689Smrg      test " " = "$libobjs" && libobjs=
9515e19dfac4Smrg
95167cea3689Smrg      if test relink != "$opt_mode"; then
9517e19dfac4Smrg	# Remove our outputs, but don't remove object files since they
9518e19dfac4Smrg	# may have been created when compiling PIC objects.
9519e19dfac4Smrg	removelist=
9520e19dfac4Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
9521e19dfac4Smrg	for p in $tempremovelist; do
9522e19dfac4Smrg	  case $p in
9523e19dfac4Smrg	    *.$objext | *.gcno)
9524e19dfac4Smrg	       ;;
95257cea3689Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
95267cea3689Smrg	       if test -n "$precious_files_regex"; then
9527e19dfac4Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
9528e19dfac4Smrg		 then
9529e19dfac4Smrg		   continue
9530e19dfac4Smrg		 fi
9531e19dfac4Smrg	       fi
9532313a12fdSmrg	       func_append removelist " $p"
9533e19dfac4Smrg	       ;;
9534e19dfac4Smrg	    *) ;;
9535e19dfac4Smrg	  esac
9536e19dfac4Smrg	done
9537e19dfac4Smrg	test -n "$removelist" && \
9538e19dfac4Smrg	  func_show_eval "${RM}r \$removelist"
9539e19dfac4Smrg      fi
9540e19dfac4Smrg
9541e19dfac4Smrg      # Now set the variables for building old libraries.
95427cea3689Smrg      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
9543313a12fdSmrg	func_append oldlibs " $output_objdir/$libname.$libext"
9544e19dfac4Smrg
9545e19dfac4Smrg	# Transform .lo files to .o files.
95467cea3689Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
9547e19dfac4Smrg      fi
9548e19dfac4Smrg
9549e19dfac4Smrg      # Eliminate all temporary directories.
9550e19dfac4Smrg      #for path in $notinst_path; do
9551313a12fdSmrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
9552313a12fdSmrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
9553313a12fdSmrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
9554e19dfac4Smrg      #done
9555e19dfac4Smrg
9556e19dfac4Smrg      if test -n "$xrpath"; then
9557e19dfac4Smrg	# If the user specified any rpath flags, then add them.
9558e19dfac4Smrg	temp_xrpath=
9559e19dfac4Smrg	for libdir in $xrpath; do
9560313a12fdSmrg	  func_replace_sysroot "$libdir"
9561313a12fdSmrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
9562e19dfac4Smrg	  case "$finalize_rpath " in
9563e19dfac4Smrg	  *" $libdir "*) ;;
9564313a12fdSmrg	  *) func_append finalize_rpath " $libdir" ;;
9565e19dfac4Smrg	  esac
9566e19dfac4Smrg	done
95677cea3689Smrg	if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
9568e19dfac4Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
9569e19dfac4Smrg	fi
9570e19dfac4Smrg      fi
9571e19dfac4Smrg
9572e19dfac4Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
95737cea3689Smrg      old_dlfiles=$dlfiles
9574e19dfac4Smrg      dlfiles=
9575e19dfac4Smrg      for lib in $old_dlfiles; do
9576e19dfac4Smrg	case " $dlprefiles $dlfiles " in
9577e19dfac4Smrg	*" $lib "*) ;;
9578313a12fdSmrg	*) func_append dlfiles " $lib" ;;
9579e19dfac4Smrg	esac
9580e19dfac4Smrg      done
9581e19dfac4Smrg
9582e19dfac4Smrg      # Make sure dlprefiles contains only unique files
95837cea3689Smrg      old_dlprefiles=$dlprefiles
9584e19dfac4Smrg      dlprefiles=
9585e19dfac4Smrg      for lib in $old_dlprefiles; do
9586e19dfac4Smrg	case "$dlprefiles " in
9587e19dfac4Smrg	*" $lib "*) ;;
9588313a12fdSmrg	*) func_append dlprefiles " $lib" ;;
9589e19dfac4Smrg	esac
9590e19dfac4Smrg      done
9591e19dfac4Smrg
95927cea3689Smrg      if test yes = "$build_libtool_libs"; then
9593e19dfac4Smrg	if test -n "$rpath"; then
9594e19dfac4Smrg	  case $host in
9595ae545d91Smrg	  *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
9596e19dfac4Smrg	    # these systems don't actually have a c library (as such)!
9597e19dfac4Smrg	    ;;
9598e19dfac4Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
9599e19dfac4Smrg	    # Rhapsody C library is in the System framework
9600313a12fdSmrg	    func_append deplibs " System.ltframework"
9601e19dfac4Smrg	    ;;
9602e19dfac4Smrg	  *-*-netbsd*)
9603e19dfac4Smrg	    # Don't link with libc until the a.out ld.so is fixed.
9604e19dfac4Smrg	    ;;
960595b7a5c8Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
9606e19dfac4Smrg	    # Do not include libc due to us having libc/libc_r.
9607e19dfac4Smrg	    ;;
9608e19dfac4Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
9609e19dfac4Smrg	    # Causes problems with __ctype
9610e19dfac4Smrg	    ;;
9611e19dfac4Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
9612e19dfac4Smrg	    # Compiler inserts libc in the correct place for threads to work
9613e19dfac4Smrg	    ;;
9614e19dfac4Smrg	  *)
9615e19dfac4Smrg	    # Add libc to deplibs on all other systems if necessary.
96167cea3689Smrg	    if test yes = "$build_libtool_need_lc"; then
9617313a12fdSmrg	      func_append deplibs " -lc"
9618e19dfac4Smrg	    fi
9619e19dfac4Smrg	    ;;
9620e19dfac4Smrg	  esac
9621e19dfac4Smrg	fi
9622e19dfac4Smrg
9623e19dfac4Smrg	# Transform deplibs into only deplibs that can be linked in shared.
9624e19dfac4Smrg	name_save=$name
9625e19dfac4Smrg	libname_save=$libname
9626e19dfac4Smrg	release_save=$release
9627e19dfac4Smrg	versuffix_save=$versuffix
9628e19dfac4Smrg	major_save=$major
9629e19dfac4Smrg	# I'm not sure if I'm treating the release correctly.  I think
9630e19dfac4Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
9631e19dfac4Smrg	# add it in twice.  Is that correct?
96327cea3689Smrg	release=
96337cea3689Smrg	versuffix=
96347cea3689Smrg	major=
9635e19dfac4Smrg	newdeplibs=
9636e19dfac4Smrg	droppeddeps=no
9637e19dfac4Smrg	case $deplibs_check_method in
9638e19dfac4Smrg	pass_all)
9639e19dfac4Smrg	  # Don't check for shared/static.  Everything works.
9640e19dfac4Smrg	  # This might be a little naive.  We might want to check
9641e19dfac4Smrg	  # whether the library exists or not.  But this is on
9642e19dfac4Smrg	  # osf3 & osf4 and I'm not really sure... Just
9643e19dfac4Smrg	  # implementing what was already the behavior.
9644e19dfac4Smrg	  newdeplibs=$deplibs
9645e19dfac4Smrg	  ;;
9646e19dfac4Smrg	file_magic*)
9647e19dfac4Smrg	  set dummy $deplibs_check_method; shift
9648e19dfac4Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9649e19dfac4Smrg	  for a_deplib in $deplibs; do
9650e19dfac4Smrg	    case $a_deplib in
9651e19dfac4Smrg	    -l*)
9652e19dfac4Smrg	      func_stripname -l '' "$a_deplib"
9653e19dfac4Smrg	      name=$func_stripname_result
96547cea3689Smrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9655e19dfac4Smrg		case " $predeps $postdeps " in
9656e19dfac4Smrg		*" $a_deplib "*)
9657313a12fdSmrg		  func_append newdeplibs " $a_deplib"
96587cea3689Smrg		  a_deplib=
9659e19dfac4Smrg		  ;;
9660e19dfac4Smrg		esac
9661e19dfac4Smrg	      fi
96627cea3689Smrg	      if test -n "$a_deplib"; then
9663e19dfac4Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
9664313a12fdSmrg		if test -n "$file_magic_glob"; then
9665313a12fdSmrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
9666313a12fdSmrg		else
9667313a12fdSmrg		  libnameglob=$libname
9668313a12fdSmrg		fi
96697cea3689Smrg		test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
9670e19dfac4Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
96717cea3689Smrg		  if test yes = "$want_nocaseglob"; then
9672313a12fdSmrg		    shopt -s nocaseglob
9673313a12fdSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9674313a12fdSmrg		    $nocaseglob
9675313a12fdSmrg		  else
9676313a12fdSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9677313a12fdSmrg		  fi
9678e19dfac4Smrg		  for potent_lib in $potential_libs; do
9679e19dfac4Smrg		      # Follow soft links.
9680e19dfac4Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
9681e19dfac4Smrg			 $GREP " -> " >/dev/null; then
9682e19dfac4Smrg			continue
9683e19dfac4Smrg		      fi
9684e19dfac4Smrg		      # The statement above tries to avoid entering an
9685e19dfac4Smrg		      # endless loop below, in case of cyclic links.
9686e19dfac4Smrg		      # We might still enter an endless loop, since a link
9687e19dfac4Smrg		      # loop can be closed while we follow links,
9688e19dfac4Smrg		      # but so what?
96897cea3689Smrg		      potlib=$potent_lib
9690e19dfac4Smrg		      while test -h "$potlib" 2>/dev/null; do
96917cea3689Smrg			potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
9692e19dfac4Smrg			case $potliblink in
96937cea3689Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
96947cea3689Smrg			*) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
9695e19dfac4Smrg			esac
9696e19dfac4Smrg		      done
9697e19dfac4Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
9698e19dfac4Smrg			 $SED -e 10q |
9699e19dfac4Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
9700313a12fdSmrg			func_append newdeplibs " $a_deplib"
97017cea3689Smrg			a_deplib=
9702e19dfac4Smrg			break 2
9703e19dfac4Smrg		      fi
9704e19dfac4Smrg		  done
9705e19dfac4Smrg		done
9706e19dfac4Smrg	      fi
97077cea3689Smrg	      if test -n "$a_deplib"; then
9708e19dfac4Smrg		droppeddeps=yes
9709ae545d91Smrg		func_warning "Linker path does not have real file for library $a_deplib."
9710ae545d91Smrg		func_warning "I have the capability to make that library automatically link in when"
9711ae545d91Smrg		func_warning "you link to this library.  But I can only do this if you have a"
9712ae545d91Smrg		func_warning "shared version of the library, which you do not appear to have"
9713ae545d91Smrg		func_warning "because I did check the linker path looking for a file starting"
97147cea3689Smrg		if test -z "$potlib"; then
9715ae545d91Smrg		  func_warning "with $libname but no candidates were found. (...for file magic test)"
9716e19dfac4Smrg		else
9717ae545d91Smrg		  func_warning "with $libname and none of the candidates passed a file format test"
9718ae545d91Smrg		  func_warning "using a file magic. Last file checked: $potlib"
9719e19dfac4Smrg		fi
9720e19dfac4Smrg	      fi
9721e19dfac4Smrg	      ;;
9722e19dfac4Smrg	    *)
9723e19dfac4Smrg	      # Add a -L argument.
9724313a12fdSmrg	      func_append newdeplibs " $a_deplib"
9725e19dfac4Smrg	      ;;
9726e19dfac4Smrg	    esac
9727e19dfac4Smrg	  done # Gone through all deplibs.
9728e19dfac4Smrg	  ;;
9729e19dfac4Smrg	match_pattern*)
9730e19dfac4Smrg	  set dummy $deplibs_check_method; shift
9731e19dfac4Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9732e19dfac4Smrg	  for a_deplib in $deplibs; do
9733e19dfac4Smrg	    case $a_deplib in
9734e19dfac4Smrg	    -l*)
9735e19dfac4Smrg	      func_stripname -l '' "$a_deplib"
9736e19dfac4Smrg	      name=$func_stripname_result
97377cea3689Smrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9738e19dfac4Smrg		case " $predeps $postdeps " in
9739e19dfac4Smrg		*" $a_deplib "*)
9740313a12fdSmrg		  func_append newdeplibs " $a_deplib"
97417cea3689Smrg		  a_deplib=
9742e19dfac4Smrg		  ;;
9743e19dfac4Smrg		esac
9744e19dfac4Smrg	      fi
97457cea3689Smrg	      if test -n "$a_deplib"; then
9746e19dfac4Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
9747e19dfac4Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9748e19dfac4Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
9749e19dfac4Smrg		  for potent_lib in $potential_libs; do
97507cea3689Smrg		    potlib=$potent_lib # see symlink-check above in file_magic test
9751313a12fdSmrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
9752e19dfac4Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
9753313a12fdSmrg		      func_append newdeplibs " $a_deplib"
97547cea3689Smrg		      a_deplib=
9755e19dfac4Smrg		      break 2
9756e19dfac4Smrg		    fi
9757e19dfac4Smrg		  done
9758e19dfac4Smrg		done
9759e19dfac4Smrg	      fi
97607cea3689Smrg	      if test -n "$a_deplib"; then
9761e19dfac4Smrg		droppeddeps=yes
9762ae545d91Smrg		func_warning "Linker path does not have real file for library $a_deplib."
9763ae545d91Smrg		func_warning "I have the capability to make that library automatically link in when"
9764ae545d91Smrg		func_warning "you link to this library.  But I can only do this if you have a"
9765ae545d91Smrg		func_warning "shared version of the library, which you do not appear to have"
9766ae545d91Smrg		func_warning "because I did check the linker path looking for a file starting"
97677cea3689Smrg		if test -z "$potlib"; then
9768ae545d91Smrg		  func_warning "with $libname but no candidates were found. (...for regex pattern test)"
9769e19dfac4Smrg		else
9770ae545d91Smrg		  func_warning "with $libname and none of the candidates passed a file format test"
9771ae545d91Smrg		  func_warning "using a regex pattern. Last file checked: $potlib"
9772e19dfac4Smrg		fi
9773e19dfac4Smrg	      fi
9774e19dfac4Smrg	      ;;
9775e19dfac4Smrg	    *)
9776e19dfac4Smrg	      # Add a -L argument.
9777313a12fdSmrg	      func_append newdeplibs " $a_deplib"
9778e19dfac4Smrg	      ;;
9779e19dfac4Smrg	    esac
9780e19dfac4Smrg	  done # Gone through all deplibs.
9781e19dfac4Smrg	  ;;
9782e19dfac4Smrg	none | unknown | *)
97837cea3689Smrg	  newdeplibs=
9784313a12fdSmrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
97857cea3689Smrg	  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
97867cea3689Smrg	    for i in $predeps $postdeps; do
9787e19dfac4Smrg	      # can't use Xsed below, because $i might contain '/'
97887cea3689Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
9789e19dfac4Smrg	    done
9790e19dfac4Smrg	  fi
9791313a12fdSmrg	  case $tmp_deplibs in
9792313a12fdSmrg	  *[!\	\ ]*)
9793313a12fdSmrg	    echo
97947cea3689Smrg	    if test none = "$deplibs_check_method"; then
9795ae545d91Smrg	      func_warning "Inter-library dependencies are not supported in this platform."
9796e19dfac4Smrg	    else
9797ae545d91Smrg	      func_warning "Inter-library dependencies are not known to be supported."
9798e19dfac4Smrg	    fi
9799ae545d91Smrg	    func_warning "All declared inter-library dependencies are being dropped."
9800e19dfac4Smrg	    droppeddeps=yes
9801313a12fdSmrg	    ;;
9802313a12fdSmrg	  esac
9803e19dfac4Smrg	  ;;
9804e19dfac4Smrg	esac
9805e19dfac4Smrg	versuffix=$versuffix_save
9806e19dfac4Smrg	major=$major_save
9807e19dfac4Smrg	release=$release_save
9808e19dfac4Smrg	libname=$libname_save
9809e19dfac4Smrg	name=$name_save
9810e19dfac4Smrg
9811e19dfac4Smrg	case $host in
9812e19dfac4Smrg	*-*-rhapsody* | *-*-darwin1.[012])
9813e19dfac4Smrg	  # On Rhapsody replace the C library with the System framework
9814313a12fdSmrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
9815e19dfac4Smrg	  ;;
9816e19dfac4Smrg	esac
9817e19dfac4Smrg
98187cea3689Smrg	if test yes = "$droppeddeps"; then
98197cea3689Smrg	  if test yes = "$module"; then
9820ae545d91Smrg	    func_warning "libtool could not satisfy all declared inter-library"
9821ae545d91Smrg	    func_warning "dependencies of module $libname.  Therefore, libtool will create"
9822ae545d91Smrg	    func_warning "a static module, that should work as long as the dlopening"
9823ae545d91Smrg	    func_warning "application is linked with the -dlopen flag."
9824e19dfac4Smrg	    if test -z "$global_symbol_pipe"; then
9825ae545d91Smrg	      func_warning "However, this would only work if libtool was able to extract symbol"
9826ae545d91Smrg	      func_warning "lists from a program, using 'nm' or equivalent, but libtool could"
9827ae545d91Smrg	      func_warning "not find such a program.  So, this module is probably useless."
9828ae545d91Smrg	      func_warning "'nm' from GNU binutils and a full rebuild may help."
9829e19dfac4Smrg	    fi
98307cea3689Smrg	    if test no = "$build_old_libs"; then
98317cea3689Smrg	      oldlibs=$output_objdir/$libname.$libext
9832e19dfac4Smrg	      build_libtool_libs=module
9833e19dfac4Smrg	      build_old_libs=yes
9834e19dfac4Smrg	    else
9835e19dfac4Smrg	      build_libtool_libs=no
9836e19dfac4Smrg	    fi
9837e19dfac4Smrg	  else
9838313a12fdSmrg	    echo "*** The inter-library dependencies that have been dropped here will be"
9839313a12fdSmrg	    echo "*** automatically added whenever a program is linked with this library"
9840313a12fdSmrg	    echo "*** or is declared to -dlopen it."
9841e19dfac4Smrg
98427cea3689Smrg	    if test no = "$allow_undefined"; then
9843313a12fdSmrg	      echo
9844313a12fdSmrg	      echo "*** Since this library must not contain undefined symbols,"
9845313a12fdSmrg	      echo "*** because either the platform does not support them or"
9846313a12fdSmrg	      echo "*** it was explicitly requested with -no-undefined,"
9847313a12fdSmrg	      echo "*** libtool will only create a static version of it."
98487cea3689Smrg	      if test no = "$build_old_libs"; then
98497cea3689Smrg		oldlibs=$output_objdir/$libname.$libext
9850e19dfac4Smrg		build_libtool_libs=module
9851e19dfac4Smrg		build_old_libs=yes
9852e19dfac4Smrg	      else
9853e19dfac4Smrg		build_libtool_libs=no
9854e19dfac4Smrg	      fi
9855e19dfac4Smrg	    fi
9856e19dfac4Smrg	  fi
9857e19dfac4Smrg	fi
9858e19dfac4Smrg	# Done checking deplibs!
9859e19dfac4Smrg	deplibs=$newdeplibs
9860e19dfac4Smrg      fi
9861e19dfac4Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
9862e19dfac4Smrg      case $host in
9863e19dfac4Smrg	*-*-darwin*)
9864313a12fdSmrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9865313a12fdSmrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9866313a12fdSmrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9867e19dfac4Smrg	  ;;
9868e19dfac4Smrg      esac
9869e19dfac4Smrg
9870e19dfac4Smrg      # move library search paths that coincide with paths to not yet
9871e19dfac4Smrg      # installed libraries to the beginning of the library search list
9872e19dfac4Smrg      new_libs=
9873e19dfac4Smrg      for path in $notinst_path; do
9874e19dfac4Smrg	case " $new_libs " in
9875e19dfac4Smrg	*" -L$path/$objdir "*) ;;
9876e19dfac4Smrg	*)
9877e19dfac4Smrg	  case " $deplibs " in
9878e19dfac4Smrg	  *" -L$path/$objdir "*)
9879313a12fdSmrg	    func_append new_libs " -L$path/$objdir" ;;
9880e19dfac4Smrg	  esac
9881e19dfac4Smrg	  ;;
9882e19dfac4Smrg	esac
9883e19dfac4Smrg      done
9884e19dfac4Smrg      for deplib in $deplibs; do
9885e19dfac4Smrg	case $deplib in
9886e19dfac4Smrg	-L*)
9887e19dfac4Smrg	  case " $new_libs " in
9888e19dfac4Smrg	  *" $deplib "*) ;;
9889313a12fdSmrg	  *) func_append new_libs " $deplib" ;;
9890e19dfac4Smrg	  esac
9891e19dfac4Smrg	  ;;
9892313a12fdSmrg	*) func_append new_libs " $deplib" ;;
9893e19dfac4Smrg	esac
9894e19dfac4Smrg      done
98957cea3689Smrg      deplibs=$new_libs
9896e19dfac4Smrg
9897e19dfac4Smrg      # All the library-specific variables (install_libdir is set above).
9898e19dfac4Smrg      library_names=
9899e19dfac4Smrg      old_library=
9900e19dfac4Smrg      dlname=
9901e19dfac4Smrg
9902e19dfac4Smrg      # Test again, we may have decided not to build it any more
99037cea3689Smrg      if test yes = "$build_libtool_libs"; then
99047cea3689Smrg	# Remove $wl instances when linking with ld.
9905313a12fdSmrg	# FIXME: should test the right _cmds variable.
9906313a12fdSmrg	case $archive_cmds in
9907313a12fdSmrg	  *\$LD\ *) wl= ;;
9908313a12fdSmrg        esac
99097cea3689Smrg	if test yes = "$hardcode_into_libs"; then
9910e19dfac4Smrg	  # Hardcode the library paths
9911e19dfac4Smrg	  hardcode_libdirs=
9912e19dfac4Smrg	  dep_rpath=
99137cea3689Smrg	  rpath=$finalize_rpath
99147cea3689Smrg	  test relink = "$opt_mode" || rpath=$compile_rpath$rpath
9915e19dfac4Smrg	  for libdir in $rpath; do
9916e19dfac4Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
9917e19dfac4Smrg	      if test -n "$hardcode_libdir_separator"; then
9918313a12fdSmrg		func_replace_sysroot "$libdir"
9919313a12fdSmrg		libdir=$func_replace_sysroot_result
9920e19dfac4Smrg		if test -z "$hardcode_libdirs"; then
99217cea3689Smrg		  hardcode_libdirs=$libdir
9922e19dfac4Smrg		else
9923e19dfac4Smrg		  # Just accumulate the unique libdirs.
9924e19dfac4Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
9925e19dfac4Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
9926e19dfac4Smrg		    ;;
9927e19dfac4Smrg		  *)
9928313a12fdSmrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
9929e19dfac4Smrg		    ;;
9930e19dfac4Smrg		  esac
9931e19dfac4Smrg		fi
9932e19dfac4Smrg	      else
9933e19dfac4Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
9934313a12fdSmrg		func_append dep_rpath " $flag"
9935e19dfac4Smrg	      fi
9936e19dfac4Smrg	    elif test -n "$runpath_var"; then
9937e19dfac4Smrg	      case "$perm_rpath " in
9938e19dfac4Smrg	      *" $libdir "*) ;;
9939313a12fdSmrg	      *) func_append perm_rpath " $libdir" ;;
9940e19dfac4Smrg	      esac
9941e19dfac4Smrg	    fi
9942e19dfac4Smrg	  done
9943e19dfac4Smrg	  # Substitute the hardcoded libdirs into the rpath.
9944e19dfac4Smrg	  if test -n "$hardcode_libdir_separator" &&
9945e19dfac4Smrg	     test -n "$hardcode_libdirs"; then
99467cea3689Smrg	    libdir=$hardcode_libdirs
9947313a12fdSmrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
9948e19dfac4Smrg	  fi
9949e19dfac4Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
9950e19dfac4Smrg	    # We should set the runpath_var.
9951e19dfac4Smrg	    rpath=
9952e19dfac4Smrg	    for dir in $perm_rpath; do
9953313a12fdSmrg	      func_append rpath "$dir:"
9954e19dfac4Smrg	    done
9955e19dfac4Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
9956e19dfac4Smrg	  fi
9957e19dfac4Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
9958e19dfac4Smrg	fi
995927702724Smrg
99607cea3689Smrg	shlibpath=$finalize_shlibpath
99617cea3689Smrg	test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
9962e19dfac4Smrg	if test -n "$shlibpath"; then
9963e19dfac4Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
9964e19dfac4Smrg	fi
996527702724Smrg
9966e19dfac4Smrg	# Get the real and link names of the library.
9967e19dfac4Smrg	eval shared_ext=\"$shrext_cmds\"
9968e19dfac4Smrg	eval library_names=\"$library_names_spec\"
9969e19dfac4Smrg	set dummy $library_names
9970e19dfac4Smrg	shift
99717cea3689Smrg	realname=$1
9972e19dfac4Smrg	shift
997327702724Smrg
9974e19dfac4Smrg	if test -n "$soname_spec"; then
9975e19dfac4Smrg	  eval soname=\"$soname_spec\"
9976e19dfac4Smrg	else
99777cea3689Smrg	  soname=$realname
9978e19dfac4Smrg	fi
9979e19dfac4Smrg	if test -z "$dlname"; then
9980e19dfac4Smrg	  dlname=$soname
9981e19dfac4Smrg	fi
998227702724Smrg
99837cea3689Smrg	lib=$output_objdir/$realname
9984e19dfac4Smrg	linknames=
9985e19dfac4Smrg	for link
9986e19dfac4Smrg	do
9987313a12fdSmrg	  func_append linknames " $link"
9988e19dfac4Smrg	done
998927702724Smrg
9990e19dfac4Smrg	# Use standard objects if they are pic
9991313a12fdSmrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
9992e19dfac4Smrg	test "X$libobjs" = "X " && libobjs=
999327702724Smrg
9994e19dfac4Smrg	delfiles=
9995e19dfac4Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
9996e19dfac4Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
99977cea3689Smrg	  export_symbols=$output_objdir/$libname.uexp
9998313a12fdSmrg	  func_append delfiles " $export_symbols"
9999e19dfac4Smrg	fi
1000027702724Smrg
10001e19dfac4Smrg	orig_export_symbols=
10002e19dfac4Smrg	case $host_os in
10003ae545d91Smrg	cygwin* | mingw* | windows* | cegcc*)
10004e19dfac4Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
10005e19dfac4Smrg	    # exporting using user supplied symfile
100067cea3689Smrg	    func_dll_def_p "$export_symbols" || {
10007e19dfac4Smrg	      # and it's NOT already a .def file. Must figure out
10008e19dfac4Smrg	      # which of the given symbols are data symbols and tag
10009e19dfac4Smrg	      # them as such. So, trigger use of export_symbols_cmds.
10010e19dfac4Smrg	      # export_symbols gets reassigned inside the "prepare
10011e19dfac4Smrg	      # the list of exported symbols" if statement, so the
10012e19dfac4Smrg	      # include_expsyms logic still works.
100137cea3689Smrg	      orig_export_symbols=$export_symbols
10014e19dfac4Smrg	      export_symbols=
10015e19dfac4Smrg	      always_export_symbols=yes
100167cea3689Smrg	    }
10017e19dfac4Smrg	  fi
10018e19dfac4Smrg	  ;;
10019e19dfac4Smrg	esac
1002027702724Smrg
10021e19dfac4Smrg	# Prepare the list of exported symbols
10022e19dfac4Smrg	if test -z "$export_symbols"; then
100237cea3689Smrg	  if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
100247cea3689Smrg	    func_verbose "generating symbol list for '$libname.la'"
100257cea3689Smrg	    export_symbols=$output_objdir/$libname.exp
10026e19dfac4Smrg	    $opt_dry_run || $RM $export_symbols
10027e19dfac4Smrg	    cmds=$export_symbols_cmds
100287cea3689Smrg	    save_ifs=$IFS; IFS='~'
10029313a12fdSmrg	    for cmd1 in $cmds; do
100307cea3689Smrg	      IFS=$save_ifs
10031313a12fdSmrg	      # Take the normal branch if the nm_file_list_spec branch
10032313a12fdSmrg	      # doesn't work or if tool conversion is not needed.
10033313a12fdSmrg	      case $nm_file_list_spec~$to_tool_file_cmd in
10034313a12fdSmrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
10035313a12fdSmrg		  try_normal_branch=yes
10036313a12fdSmrg		  eval cmd=\"$cmd1\"
10037313a12fdSmrg		  func_len " $cmd"
10038313a12fdSmrg		  len=$func_len_result
10039313a12fdSmrg		  ;;
10040313a12fdSmrg		*)
10041313a12fdSmrg		  try_normal_branch=no
10042313a12fdSmrg		  ;;
10043313a12fdSmrg	      esac
100447cea3689Smrg	      if test yes = "$try_normal_branch" \
10045313a12fdSmrg		 && { test "$len" -lt "$max_cmd_len" \
10046313a12fdSmrg		      || test "$max_cmd_len" -le -1; }
10047313a12fdSmrg	      then
10048313a12fdSmrg		func_show_eval "$cmd" 'exit $?'
10049313a12fdSmrg		skipped_export=false
10050313a12fdSmrg	      elif test -n "$nm_file_list_spec"; then
10051313a12fdSmrg		func_basename "$output"
10052313a12fdSmrg		output_la=$func_basename_result
10053313a12fdSmrg		save_libobjs=$libobjs
10054313a12fdSmrg		save_output=$output
100557cea3689Smrg		output=$output_objdir/$output_la.nm
10056313a12fdSmrg		func_to_tool_file "$output"
10057313a12fdSmrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
10058313a12fdSmrg		func_append delfiles " $output"
10059313a12fdSmrg		func_verbose "creating $NM input file list: $output"
10060313a12fdSmrg		for obj in $save_libobjs; do
10061313a12fdSmrg		  func_to_tool_file "$obj"
10062313a12fdSmrg		  $ECHO "$func_to_tool_file_result"
10063313a12fdSmrg		done > "$output"
10064313a12fdSmrg		eval cmd=\"$cmd1\"
10065e19dfac4Smrg		func_show_eval "$cmd" 'exit $?'
10066313a12fdSmrg		output=$save_output
10067313a12fdSmrg		libobjs=$save_libobjs
10068e19dfac4Smrg		skipped_export=false
10069e19dfac4Smrg	      else
10070e19dfac4Smrg		# The command line is too long to execute in one step.
10071e19dfac4Smrg		func_verbose "using reloadable object file for export list..."
10072e19dfac4Smrg		skipped_export=:
10073e19dfac4Smrg		# Break out early, otherwise skipped_export may be
10074e19dfac4Smrg		# set to false by a later but shorter cmd.
10075e19dfac4Smrg		break
10076e19dfac4Smrg	      fi
10077e19dfac4Smrg	    done
100787cea3689Smrg	    IFS=$save_ifs
100797cea3689Smrg	    if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
10080e19dfac4Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
10081e19dfac4Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
10082e19dfac4Smrg	    fi
10083e19dfac4Smrg	  fi
10084e19dfac4Smrg	fi
1008527702724Smrg
10086e19dfac4Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
100877cea3689Smrg	  tmp_export_symbols=$export_symbols
100887cea3689Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
10089313a12fdSmrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
10090e19dfac4Smrg	fi
1009127702724Smrg
100927cea3689Smrg	if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
10093e19dfac4Smrg	  # The given exports_symbols file has to be filtered, so filter it.
100947cea3689Smrg	  func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
10095e19dfac4Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
100967cea3689Smrg	  # 's' commands, which not all seds can handle. GNU sed should be fine
10097e19dfac4Smrg	  # though. Also, the filter scales superlinearly with the number of
10098e19dfac4Smrg	  # global variables. join(1) would be nice here, but unfortunately
10099e19dfac4Smrg	  # isn't a blessed tool.
10100e19dfac4Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
10101313a12fdSmrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
10102e19dfac4Smrg	  export_symbols=$output_objdir/$libname.def
10103e19dfac4Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
1010427702724Smrg	fi
1010527702724Smrg
10106e19dfac4Smrg	tmp_deplibs=
10107e19dfac4Smrg	for test_deplib in $deplibs; do
10108e19dfac4Smrg	  case " $convenience " in
10109e19dfac4Smrg	  *" $test_deplib "*) ;;
10110e19dfac4Smrg	  *)
10111313a12fdSmrg	    func_append tmp_deplibs " $test_deplib"
10112e19dfac4Smrg	    ;;
10113e19dfac4Smrg	  esac
10114e19dfac4Smrg	done
101157cea3689Smrg	deplibs=$tmp_deplibs
1011627702724Smrg
10117e19dfac4Smrg	if test -n "$convenience"; then
10118e19dfac4Smrg	  if test -n "$whole_archive_flag_spec" &&
101197cea3689Smrg	    test yes = "$compiler_needs_object" &&
10120e19dfac4Smrg	    test -z "$libobjs"; then
10121e19dfac4Smrg	    # extract the archives, so we have objects to list.
10122e19dfac4Smrg	    # TODO: could optimize this to just extract one archive.
10123e19dfac4Smrg	    whole_archive_flag_spec=
10124e19dfac4Smrg	  fi
10125e19dfac4Smrg	  if test -n "$whole_archive_flag_spec"; then
10126e19dfac4Smrg	    save_libobjs=$libobjs
10127e19dfac4Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
10128e19dfac4Smrg	    test "X$libobjs" = "X " && libobjs=
10129e19dfac4Smrg	  else
101307cea3689Smrg	    gentop=$output_objdir/${outputname}x
10131313a12fdSmrg	    func_append generated " $gentop"
1013227702724Smrg
10133e19dfac4Smrg	    func_extract_archives $gentop $convenience
10134313a12fdSmrg	    func_append libobjs " $func_extract_archives_result"
10135e19dfac4Smrg	    test "X$libobjs" = "X " && libobjs=
10136e19dfac4Smrg	  fi
10137e19dfac4Smrg	fi
1013827702724Smrg
101397cea3689Smrg	if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
10140e19dfac4Smrg	  eval flag=\"$thread_safe_flag_spec\"
10141313a12fdSmrg	  func_append linker_flags " $flag"
10142e19dfac4Smrg	fi
1014327702724Smrg
10144e19dfac4Smrg	# Make a backup of the uninstalled library when relinking
101457cea3689Smrg	if test relink = "$opt_mode"; then
10146e19dfac4Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
1014727702724Smrg	fi
1014827702724Smrg
10149e19dfac4Smrg	# Do each of the archive commands.
101507cea3689Smrg	if test yes = "$module" && test -n "$module_cmds"; then
10151e19dfac4Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
10152e19dfac4Smrg	    eval test_cmds=\"$module_expsym_cmds\"
10153e19dfac4Smrg	    cmds=$module_expsym_cmds
10154e19dfac4Smrg	  else
10155e19dfac4Smrg	    eval test_cmds=\"$module_cmds\"
10156e19dfac4Smrg	    cmds=$module_cmds
10157e19dfac4Smrg	  fi
10158e19dfac4Smrg	else
10159e19dfac4Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10160e19dfac4Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
10161e19dfac4Smrg	    cmds=$archive_expsym_cmds
10162e19dfac4Smrg	  else
10163e19dfac4Smrg	    eval test_cmds=\"$archive_cmds\"
10164e19dfac4Smrg	    cmds=$archive_cmds
10165e19dfac4Smrg	  fi
1016627702724Smrg	fi
1016727702724Smrg
101687cea3689Smrg	if test : != "$skipped_export" &&
10169e19dfac4Smrg	   func_len " $test_cmds" &&
10170e19dfac4Smrg	   len=$func_len_result &&
10171e19dfac4Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
10172e19dfac4Smrg	  :
10173e19dfac4Smrg	else
10174e19dfac4Smrg	  # The command line is too long to link in one step, link piecewise
10175e19dfac4Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
10176e19dfac4Smrg	  # script.
1017727702724Smrg
10178e19dfac4Smrg	  # Save the value of $output and $libobjs because we want to
10179e19dfac4Smrg	  # use them later.  If we have whole_archive_flag_spec, we
10180e19dfac4Smrg	  # want to use save_libobjs as it was before
10181e19dfac4Smrg	  # whole_archive_flag_spec was expanded, because we can't
10182e19dfac4Smrg	  # assume the linker understands whole_archive_flag_spec.
10183e19dfac4Smrg	  # This may have to be revisited, in case too many
10184e19dfac4Smrg	  # convenience libraries get linked in and end up exceeding
10185e19dfac4Smrg	  # the spec.
10186e19dfac4Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
10187e19dfac4Smrg	    save_libobjs=$libobjs
10188e19dfac4Smrg	  fi
10189e19dfac4Smrg	  save_output=$output
10190313a12fdSmrg	  func_basename "$output"
10191313a12fdSmrg	  output_la=$func_basename_result
1019227702724Smrg
10193e19dfac4Smrg	  # Clear the reloadable object creation command queue and
10194e19dfac4Smrg	  # initialize k to one.
10195e19dfac4Smrg	  test_cmds=
10196e19dfac4Smrg	  concat_cmds=
10197e19dfac4Smrg	  objlist=
10198e19dfac4Smrg	  last_robj=
10199e19dfac4Smrg	  k=1
1020027702724Smrg
10201ae545d91Smrg	  if test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
102027cea3689Smrg	    output=$output_objdir/$output_la.lnk
10203e19dfac4Smrg	    func_verbose "creating linker input file list: $output"
10204e19dfac4Smrg	    : > $output
10205e19dfac4Smrg	    set x $save_libobjs
10206e19dfac4Smrg	    shift
10207e19dfac4Smrg	    firstobj=
102087cea3689Smrg	    if test yes = "$compiler_needs_object"; then
10209e19dfac4Smrg	      firstobj="$1 "
10210e19dfac4Smrg	      shift
10211e19dfac4Smrg	    fi
10212e19dfac4Smrg	    for obj
10213e19dfac4Smrg	    do
10214313a12fdSmrg	      func_to_tool_file "$obj"
10215313a12fdSmrg	      $ECHO "$func_to_tool_file_result" >> $output
10216e19dfac4Smrg	    done
10217313a12fdSmrg	    func_append delfiles " $output"
10218313a12fdSmrg	    func_to_tool_file "$output"
10219313a12fdSmrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
10220ae545d91Smrg	  elif test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
10221ae545d91Smrg	    output=$output_objdir/$output_la.lnkscript
10222ae545d91Smrg	    func_verbose "creating GNU ld script: $output"
10223ae545d91Smrg	    echo 'INPUT (' > $output
10224ae545d91Smrg	    for obj in $save_libobjs
10225ae545d91Smrg	    do
10226ae545d91Smrg	      func_to_tool_file "$obj"
10227ae545d91Smrg	      $ECHO "$func_to_tool_file_result" >> $output
10228ae545d91Smrg	    done
10229ae545d91Smrg	    echo ')' >> $output
10230ae545d91Smrg	    func_append delfiles " $output"
10231ae545d91Smrg	    func_to_tool_file "$output"
10232ae545d91Smrg	    output=$func_to_tool_file_result
10233e19dfac4Smrg	  else
10234e19dfac4Smrg	    if test -n "$save_libobjs"; then
10235e19dfac4Smrg	      func_verbose "creating reloadable object files..."
102367cea3689Smrg	      output=$output_objdir/$output_la-$k.$objext
10237e19dfac4Smrg	      eval test_cmds=\"$reload_cmds\"
10238e19dfac4Smrg	      func_len " $test_cmds"
10239e19dfac4Smrg	      len0=$func_len_result
10240e19dfac4Smrg	      len=$len0
10241e19dfac4Smrg
10242e19dfac4Smrg	      # Loop over the list of objects to be linked.
10243e19dfac4Smrg	      for obj in $save_libobjs
10244e19dfac4Smrg	      do
10245e19dfac4Smrg		func_len " $obj"
10246e19dfac4Smrg		func_arith $len + $func_len_result
10247e19dfac4Smrg		len=$func_arith_result
102487cea3689Smrg		if test -z "$objlist" ||
10249e19dfac4Smrg		   test "$len" -lt "$max_cmd_len"; then
10250e19dfac4Smrg		  func_append objlist " $obj"
10251e19dfac4Smrg		else
10252e19dfac4Smrg		  # The command $test_cmds is almost too long, add a
10253e19dfac4Smrg		  # command to the queue.
102547cea3689Smrg		  if test 1 -eq "$k"; then
10255e19dfac4Smrg		    # The first file doesn't have a previous command to add.
10256313a12fdSmrg		    reload_objs=$objlist
10257313a12fdSmrg		    eval concat_cmds=\"$reload_cmds\"
10258e19dfac4Smrg		  else
10259e19dfac4Smrg		    # All subsequent reloadable object files will link in
10260e19dfac4Smrg		    # the last one created.
10261313a12fdSmrg		    reload_objs="$objlist $last_robj"
10262313a12fdSmrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
10263e19dfac4Smrg		  fi
102647cea3689Smrg		  last_robj=$output_objdir/$output_la-$k.$objext
10265e19dfac4Smrg		  func_arith $k + 1
10266e19dfac4Smrg		  k=$func_arith_result
102677cea3689Smrg		  output=$output_objdir/$output_la-$k.$objext
10268313a12fdSmrg		  objlist=" $obj"
10269e19dfac4Smrg		  func_len " $last_robj"
10270e19dfac4Smrg		  func_arith $len0 + $func_len_result
10271e19dfac4Smrg		  len=$func_arith_result
10272e19dfac4Smrg		fi
10273e19dfac4Smrg	      done
10274e19dfac4Smrg	      # Handle the remaining objects by creating one last
10275e19dfac4Smrg	      # reloadable object file.  All subsequent reloadable object
10276e19dfac4Smrg	      # files will link in the last one created.
10277e19dfac4Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
10278313a12fdSmrg	      reload_objs="$objlist $last_robj"
102797cea3689Smrg	      eval concat_cmds=\"\$concat_cmds$reload_cmds\"
10280e19dfac4Smrg	      if test -n "$last_robj"; then
102817cea3689Smrg	        eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
10282e19dfac4Smrg	      fi
10283313a12fdSmrg	      func_append delfiles " $output"
1028427702724Smrg
10285e19dfac4Smrg	    else
10286e19dfac4Smrg	      output=
10287e19dfac4Smrg	    fi
1028827702724Smrg
102897cea3689Smrg	    ${skipped_export-false} && {
102907cea3689Smrg	      func_verbose "generating symbol list for '$libname.la'"
102917cea3689Smrg	      export_symbols=$output_objdir/$libname.exp
10292e19dfac4Smrg	      $opt_dry_run || $RM $export_symbols
10293e19dfac4Smrg	      libobjs=$output
10294e19dfac4Smrg	      # Append the command to create the export file.
10295e19dfac4Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
10296e19dfac4Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
10297e19dfac4Smrg	      if test -n "$last_robj"; then
10298e19dfac4Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
10299e19dfac4Smrg	      fi
103007cea3689Smrg	    }
1030127702724Smrg
10302e19dfac4Smrg	    test -n "$save_libobjs" &&
10303e19dfac4Smrg	      func_verbose "creating a temporary reloadable object file: $output"
1030427702724Smrg
10305e19dfac4Smrg	    # Loop through the commands generated above and execute them.
103067cea3689Smrg	    save_ifs=$IFS; IFS='~'
10307e19dfac4Smrg	    for cmd in $concat_cmds; do
103087cea3689Smrg	      IFS=$save_ifs
103097cea3689Smrg	      $opt_quiet || {
1031095b7a5c8Smrg		  func_quote_arg expand,pretty "$cmd"
1031195b7a5c8Smrg		  eval "func_echo $func_quote_arg_result"
10312e19dfac4Smrg	      }
10313e19dfac4Smrg	      $opt_dry_run || eval "$cmd" || {
10314e19dfac4Smrg		lt_exit=$?
10315e19dfac4Smrg
10316e19dfac4Smrg		# Restore the uninstalled library and exit
103177cea3689Smrg		if test relink = "$opt_mode"; then
10318e19dfac4Smrg		  ( cd "$output_objdir" && \
10319e19dfac4Smrg		    $RM "${realname}T" && \
10320e19dfac4Smrg		    $MV "${realname}U" "$realname" )
10321e19dfac4Smrg		fi
1032227702724Smrg
10323e19dfac4Smrg		exit $lt_exit
10324e19dfac4Smrg	      }
10325e19dfac4Smrg	    done
103267cea3689Smrg	    IFS=$save_ifs
10327e19dfac4Smrg
10328e19dfac4Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
10329e19dfac4Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
10330e19dfac4Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
1033127702724Smrg	    fi
1033227702724Smrg	  fi
1033327702724Smrg
103347cea3689Smrg          ${skipped_export-false} && {
10335e19dfac4Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
103367cea3689Smrg	      tmp_export_symbols=$export_symbols
103377cea3689Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
10338313a12fdSmrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
10339e19dfac4Smrg	    fi
1034027702724Smrg
10341e19dfac4Smrg	    if test -n "$orig_export_symbols"; then
10342e19dfac4Smrg	      # The given exports_symbols file has to be filtered, so filter it.
103437cea3689Smrg	      func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
10344e19dfac4Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
103457cea3689Smrg	      # 's' commands, which not all seds can handle. GNU sed should be fine
10346e19dfac4Smrg	      # though. Also, the filter scales superlinearly with the number of
10347e19dfac4Smrg	      # global variables. join(1) would be nice here, but unfortunately
10348e19dfac4Smrg	      # isn't a blessed tool.
10349e19dfac4Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
10350313a12fdSmrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
10351e19dfac4Smrg	      export_symbols=$output_objdir/$libname.def
10352e19dfac4Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
10353e19dfac4Smrg	    fi
103547cea3689Smrg	  }
1035527702724Smrg
10356e19dfac4Smrg	  libobjs=$output
10357e19dfac4Smrg	  # Restore the value of output.
10358e19dfac4Smrg	  output=$save_output
1035927702724Smrg
10360e19dfac4Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
10361e19dfac4Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
10362e19dfac4Smrg	    test "X$libobjs" = "X " && libobjs=
10363e19dfac4Smrg	  fi
10364e19dfac4Smrg	  # Expand the library linking commands again to reset the
10365e19dfac4Smrg	  # value of $libobjs for piecewise linking.
10366e19dfac4Smrg
10367e19dfac4Smrg	  # Do each of the archive commands.
103687cea3689Smrg	  if test yes = "$module" && test -n "$module_cmds"; then
10369e19dfac4Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
10370e19dfac4Smrg	      cmds=$module_expsym_cmds
1037127702724Smrg	    else
10372e19dfac4Smrg	      cmds=$module_cmds
1037327702724Smrg	    fi
1037427702724Smrg	  else
10375e19dfac4Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10376e19dfac4Smrg	      cmds=$archive_expsym_cmds
10377e19dfac4Smrg	    else
10378e19dfac4Smrg	      cmds=$archive_cmds
10379e19dfac4Smrg	    fi
1038027702724Smrg	  fi
1038127702724Smrg	fi
1038227702724Smrg
10383e19dfac4Smrg	if test -n "$delfiles"; then
10384e19dfac4Smrg	  # Append the command to remove temporary files to $cmds.
10385e19dfac4Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
10386e19dfac4Smrg	fi
1038727702724Smrg
10388e19dfac4Smrg	# Add any objects from preloaded convenience libraries
10389e19dfac4Smrg	if test -n "$dlprefiles"; then
103907cea3689Smrg	  gentop=$output_objdir/${outputname}x
10391313a12fdSmrg	  func_append generated " $gentop"
1039227702724Smrg
10393e19dfac4Smrg	  func_extract_archives $gentop $dlprefiles
10394313a12fdSmrg	  func_append libobjs " $func_extract_archives_result"
10395e19dfac4Smrg	  test "X$libobjs" = "X " && libobjs=
1039627702724Smrg	fi
1039727702724Smrg
103987cea3689Smrg	save_ifs=$IFS; IFS='~'
10399e19dfac4Smrg	for cmd in $cmds; do
104007cea3689Smrg	  IFS=$sp$nl
10401e19dfac4Smrg	  eval cmd=\"$cmd\"
104027cea3689Smrg	  IFS=$save_ifs
104037cea3689Smrg	  $opt_quiet || {
1040495b7a5c8Smrg	    func_quote_arg expand,pretty "$cmd"
1040595b7a5c8Smrg	    eval "func_echo $func_quote_arg_result"
10406e19dfac4Smrg	  }
10407e19dfac4Smrg	  $opt_dry_run || eval "$cmd" || {
10408e19dfac4Smrg	    lt_exit=$?
1040927702724Smrg
10410e19dfac4Smrg	    # Restore the uninstalled library and exit
104117cea3689Smrg	    if test relink = "$opt_mode"; then
10412e19dfac4Smrg	      ( cd "$output_objdir" && \
10413e19dfac4Smrg	        $RM "${realname}T" && \
10414e19dfac4Smrg		$MV "${realname}U" "$realname" )
10415e19dfac4Smrg	    fi
10416e19dfac4Smrg
10417e19dfac4Smrg	    exit $lt_exit
10418e19dfac4Smrg	  }
10419e19dfac4Smrg	done
104207cea3689Smrg	IFS=$save_ifs
10421e19dfac4Smrg
10422e19dfac4Smrg	# Restore the uninstalled library and exit
104237cea3689Smrg	if test relink = "$opt_mode"; then
10424e19dfac4Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
10425e19dfac4Smrg
10426e19dfac4Smrg	  if test -n "$convenience"; then
10427e19dfac4Smrg	    if test -z "$whole_archive_flag_spec"; then
10428e19dfac4Smrg	      func_show_eval '${RM}r "$gentop"'
1042927702724Smrg	    fi
1043027702724Smrg	  fi
1043127702724Smrg
10432e19dfac4Smrg	  exit $EXIT_SUCCESS
10433e19dfac4Smrg	fi
1043427702724Smrg
10435e19dfac4Smrg	# Create links to the real library.
10436e19dfac4Smrg	for linkname in $linknames; do
10437e19dfac4Smrg	  if test "$realname" != "$linkname"; then
10438e19dfac4Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
10439e19dfac4Smrg	  fi
10440e19dfac4Smrg	done
10441e19dfac4Smrg
10442e19dfac4Smrg	# If -module or -export-dynamic was specified, set the dlname.
104437cea3689Smrg	if test yes = "$module" || test yes = "$export_dynamic"; then
10444e19dfac4Smrg	  # On all known operating systems, these are identical.
104457cea3689Smrg	  dlname=$soname
10446e19dfac4Smrg	fi
10447e19dfac4Smrg      fi
10448e19dfac4Smrg      ;;
10449e19dfac4Smrg
10450e19dfac4Smrg    obj)
104517cea3689Smrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
104527cea3689Smrg	func_warning "'-dlopen' is ignored for objects"
10453e19dfac4Smrg      fi
10454e19dfac4Smrg
10455e19dfac4Smrg      case " $deplibs" in
10456e19dfac4Smrg      *\ -l* | *\ -L*)
104577cea3689Smrg	func_warning "'-l' and '-L' are ignored for objects" ;;
10458e19dfac4Smrg      esac
10459e19dfac4Smrg
10460e19dfac4Smrg      test -n "$rpath" && \
104617cea3689Smrg	func_warning "'-rpath' is ignored for objects"
10462e19dfac4Smrg
10463e19dfac4Smrg      test -n "$xrpath" && \
104647cea3689Smrg	func_warning "'-R' is ignored for objects"
10465e19dfac4Smrg
10466e19dfac4Smrg      test -n "$vinfo" && \
104677cea3689Smrg	func_warning "'-version-info' is ignored for objects"
10468e19dfac4Smrg
10469e19dfac4Smrg      test -n "$release" && \
104707cea3689Smrg	func_warning "'-release' is ignored for objects"
10471e19dfac4Smrg
10472e19dfac4Smrg      case $output in
10473e19dfac4Smrg      *.lo)
10474e19dfac4Smrg	test -n "$objs$old_deplibs" && \
104757cea3689Smrg	  func_fatal_error "cannot build library object '$output' from non-libtool objects"
10476e19dfac4Smrg
10477e19dfac4Smrg	libobj=$output
10478e19dfac4Smrg	func_lo2o "$libobj"
10479e19dfac4Smrg	obj=$func_lo2o_result
10480e19dfac4Smrg	;;
10481e19dfac4Smrg      *)
10482e19dfac4Smrg	libobj=
104837cea3689Smrg	obj=$output
10484e19dfac4Smrg	;;
10485e19dfac4Smrg      esac
10486e19dfac4Smrg
10487e19dfac4Smrg      # Delete the old objects.
10488e19dfac4Smrg      $opt_dry_run || $RM $obj $libobj
10489e19dfac4Smrg
10490e19dfac4Smrg      # Objects from convenience libraries.  This assumes
10491e19dfac4Smrg      # single-version convenience libraries.  Whenever we create
10492e19dfac4Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
10493e19dfac4Smrg      # the extraction.
10494e19dfac4Smrg      reload_conv_objs=
10495e19dfac4Smrg      gentop=
104967cea3689Smrg      # if reload_cmds runs $LD directly, get rid of -Wl from
104977cea3689Smrg      # whole_archive_flag_spec and hope we can get by with turning comma
104987cea3689Smrg      # into space.
104997cea3689Smrg      case $reload_cmds in
105007cea3689Smrg        *\$LD[\ \$]*) wl= ;;
105017cea3689Smrg      esac
10502e19dfac4Smrg      if test -n "$convenience"; then
10503e19dfac4Smrg	if test -n "$whole_archive_flag_spec"; then
10504e19dfac4Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
105057cea3689Smrg	  test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
105067cea3689Smrg	  reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
10507e19dfac4Smrg	else
105087cea3689Smrg	  gentop=$output_objdir/${obj}x
10509313a12fdSmrg	  func_append generated " $gentop"
10510e19dfac4Smrg
10511e19dfac4Smrg	  func_extract_archives $gentop $convenience
10512e19dfac4Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
10513e19dfac4Smrg	fi
10514e19dfac4Smrg      fi
1051527702724Smrg
10516313a12fdSmrg      # If we're not building shared, we need to use non_pic_objs
105177cea3689Smrg      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
10518313a12fdSmrg
10519e19dfac4Smrg      # Create the old-style object.
105207cea3689Smrg      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
1052127702724Smrg
105227cea3689Smrg      output=$obj
10523e19dfac4Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
1052427702724Smrg
10525e19dfac4Smrg      # Exit if we aren't doing a library object file.
10526e19dfac4Smrg      if test -z "$libobj"; then
10527e19dfac4Smrg	if test -n "$gentop"; then
10528e19dfac4Smrg	  func_show_eval '${RM}r "$gentop"'
10529e19dfac4Smrg	fi
1053027702724Smrg
10531e19dfac4Smrg	exit $EXIT_SUCCESS
10532e19dfac4Smrg      fi
1053327702724Smrg
105347cea3689Smrg      test yes = "$build_libtool_libs" || {
10535e19dfac4Smrg	if test -n "$gentop"; then
10536e19dfac4Smrg	  func_show_eval '${RM}r "$gentop"'
10537e19dfac4Smrg	fi
1053827702724Smrg
10539e19dfac4Smrg	# Create an invalid libtool object if no PIC, so that we don't
10540e19dfac4Smrg	# accidentally link it into a program.
10541e19dfac4Smrg	# $show "echo timestamp > $libobj"
10542e19dfac4Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
10543e19dfac4Smrg	exit $EXIT_SUCCESS
105447cea3689Smrg      }
1054527702724Smrg
105467cea3689Smrg      if test -n "$pic_flag" || test default != "$pic_mode"; then
10547e19dfac4Smrg	# Only do commands if we really have different PIC objects.
10548e19dfac4Smrg	reload_objs="$libobjs $reload_conv_objs"
105497cea3689Smrg	output=$libobj
10550e19dfac4Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
1055127702724Smrg      fi
1055227702724Smrg
10553e19dfac4Smrg      if test -n "$gentop"; then
10554e19dfac4Smrg	func_show_eval '${RM}r "$gentop"'
10555e19dfac4Smrg      fi
1055627702724Smrg
10557e19dfac4Smrg      exit $EXIT_SUCCESS
10558e19dfac4Smrg      ;;
1055927702724Smrg
10560e19dfac4Smrg    prog)
10561e19dfac4Smrg      case $host in
10562e19dfac4Smrg	*cygwin*) func_stripname '' '.exe' "$output"
10563e19dfac4Smrg	          output=$func_stripname_result.exe;;
1056427702724Smrg      esac
10565e19dfac4Smrg      test -n "$vinfo" && \
105667cea3689Smrg	func_warning "'-version-info' is ignored for programs"
1056727702724Smrg
10568e19dfac4Smrg      test -n "$release" && \
105697cea3689Smrg	func_warning "'-release' is ignored for programs"
1057027702724Smrg
105717cea3689Smrg      $preload \
105727cea3689Smrg	&& test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
105737cea3689Smrg	&& func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
1057427702724Smrg
10575e19dfac4Smrg      case $host in
10576e19dfac4Smrg      *-*-rhapsody* | *-*-darwin1.[012])
10577e19dfac4Smrg	# On Rhapsody replace the C library is the System framework
10578313a12fdSmrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
10579313a12fdSmrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
1058027702724Smrg	;;
1058127702724Smrg      esac
1058227702724Smrg
10583e19dfac4Smrg      case $host in
10584e19dfac4Smrg      *-*-darwin*)
10585e19dfac4Smrg	# Don't allow lazy linking, it breaks C++ global constructors
10586e19dfac4Smrg	# But is supposedly fixed on 10.4 or later (yay!).
105877cea3689Smrg	if test CXX = "$tagname"; then
10588e19dfac4Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
10589e19dfac4Smrg	    10.[0123])
105907cea3689Smrg	      func_append compile_command " $wl-bind_at_load"
105917cea3689Smrg	      func_append finalize_command " $wl-bind_at_load"
10592e19dfac4Smrg	    ;;
10593e19dfac4Smrg	  esac
10594e19dfac4Smrg	fi
10595e19dfac4Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
10596313a12fdSmrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10597313a12fdSmrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
1059827702724Smrg	;;
1059927702724Smrg      esac
1060027702724Smrg
1060127702724Smrg
10602e19dfac4Smrg      # move library search paths that coincide with paths to not yet
10603e19dfac4Smrg      # installed libraries to the beginning of the library search list
10604e19dfac4Smrg      new_libs=
10605e19dfac4Smrg      for path in $notinst_path; do
10606e19dfac4Smrg	case " $new_libs " in
10607e19dfac4Smrg	*" -L$path/$objdir "*) ;;
1060827702724Smrg	*)
10609e19dfac4Smrg	  case " $compile_deplibs " in
10610e19dfac4Smrg	  *" -L$path/$objdir "*)
10611313a12fdSmrg	    func_append new_libs " -L$path/$objdir" ;;
10612e19dfac4Smrg	  esac
1061327702724Smrg	  ;;
1061427702724Smrg	esac
1061527702724Smrg      done
10616e19dfac4Smrg      for deplib in $compile_deplibs; do
10617e19dfac4Smrg	case $deplib in
10618e19dfac4Smrg	-L*)
10619e19dfac4Smrg	  case " $new_libs " in
10620e19dfac4Smrg	  *" $deplib "*) ;;
10621313a12fdSmrg	  *) func_append new_libs " $deplib" ;;
10622e19dfac4Smrg	  esac
10623e19dfac4Smrg	  ;;
10624313a12fdSmrg	*) func_append new_libs " $deplib" ;;
10625e19dfac4Smrg	esac
10626e19dfac4Smrg      done
106277cea3689Smrg      compile_deplibs=$new_libs
1062827702724Smrg
1062927702724Smrg
10630313a12fdSmrg      func_append compile_command " $compile_deplibs"
10631313a12fdSmrg      func_append finalize_command " $finalize_deplibs"
1063227702724Smrg
10633e19dfac4Smrg      if test -n "$rpath$xrpath"; then
10634e19dfac4Smrg	# If the user specified any rpath flags, then add them.
10635e19dfac4Smrg	for libdir in $rpath $xrpath; do
10636e19dfac4Smrg	  # This is the magic to use -rpath.
10637e19dfac4Smrg	  case "$finalize_rpath " in
10638e19dfac4Smrg	  *" $libdir "*) ;;
10639313a12fdSmrg	  *) func_append finalize_rpath " $libdir" ;;
10640e19dfac4Smrg	  esac
10641e19dfac4Smrg	done
10642e19dfac4Smrg      fi
1064327702724Smrg
10644e19dfac4Smrg      # Now hardcode the library paths
10645e19dfac4Smrg      rpath=
10646e19dfac4Smrg      hardcode_libdirs=
10647e19dfac4Smrg      for libdir in $compile_rpath $finalize_rpath; do
10648e19dfac4Smrg	if test -n "$hardcode_libdir_flag_spec"; then
10649e19dfac4Smrg	  if test -n "$hardcode_libdir_separator"; then
10650e19dfac4Smrg	    if test -z "$hardcode_libdirs"; then
106517cea3689Smrg	      hardcode_libdirs=$libdir
10652e19dfac4Smrg	    else
10653e19dfac4Smrg	      # Just accumulate the unique libdirs.
10654e19dfac4Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10655e19dfac4Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10656e19dfac4Smrg		;;
10657e19dfac4Smrg	      *)
10658313a12fdSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10659e19dfac4Smrg		;;
10660e19dfac4Smrg	      esac
10661e19dfac4Smrg	    fi
10662e19dfac4Smrg	  else
10663e19dfac4Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
10664313a12fdSmrg	    func_append rpath " $flag"
10665e19dfac4Smrg	  fi
10666e19dfac4Smrg	elif test -n "$runpath_var"; then
10667e19dfac4Smrg	  case "$perm_rpath " in
1066827702724Smrg	  *" $libdir "*) ;;
10669313a12fdSmrg	  *) func_append perm_rpath " $libdir" ;;
1067027702724Smrg	  esac
10671e19dfac4Smrg	fi
10672e19dfac4Smrg	case $host in
10673ae545d91Smrg	*-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*)
106747cea3689Smrg	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
10675e19dfac4Smrg	  case :$dllsearchpath: in
10676e19dfac4Smrg	  *":$libdir:"*) ;;
10677e19dfac4Smrg	  ::) dllsearchpath=$libdir;;
10678313a12fdSmrg	  *) func_append dllsearchpath ":$libdir";;
10679e19dfac4Smrg	  esac
10680e19dfac4Smrg	  case :$dllsearchpath: in
10681e19dfac4Smrg	  *":$testbindir:"*) ;;
10682e19dfac4Smrg	  ::) dllsearchpath=$testbindir;;
10683313a12fdSmrg	  *) func_append dllsearchpath ":$testbindir";;
10684e19dfac4Smrg	  esac
10685e19dfac4Smrg	  ;;
10686e19dfac4Smrg	esac
10687e19dfac4Smrg      done
10688e19dfac4Smrg      # Substitute the hardcoded libdirs into the rpath.
10689e19dfac4Smrg      if test -n "$hardcode_libdir_separator" &&
10690e19dfac4Smrg	 test -n "$hardcode_libdirs"; then
106917cea3689Smrg	libdir=$hardcode_libdirs
10692e19dfac4Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
10693e19dfac4Smrg      fi
106947cea3689Smrg      compile_rpath=$rpath
10695e19dfac4Smrg
10696e19dfac4Smrg      rpath=
10697e19dfac4Smrg      hardcode_libdirs=
10698e19dfac4Smrg      for libdir in $finalize_rpath; do
10699e19dfac4Smrg	if test -n "$hardcode_libdir_flag_spec"; then
10700e19dfac4Smrg	  if test -n "$hardcode_libdir_separator"; then
10701e19dfac4Smrg	    if test -z "$hardcode_libdirs"; then
107027cea3689Smrg	      hardcode_libdirs=$libdir
10703e19dfac4Smrg	    else
10704e19dfac4Smrg	      # Just accumulate the unique libdirs.
10705e19dfac4Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10706e19dfac4Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10707e19dfac4Smrg		;;
10708e19dfac4Smrg	      *)
10709313a12fdSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10710e19dfac4Smrg		;;
10711e19dfac4Smrg	      esac
10712e19dfac4Smrg	    fi
10713e19dfac4Smrg	  else
10714e19dfac4Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
10715313a12fdSmrg	    func_append rpath " $flag"
10716e19dfac4Smrg	  fi
10717e19dfac4Smrg	elif test -n "$runpath_var"; then
10718e19dfac4Smrg	  case "$finalize_perm_rpath " in
1071927702724Smrg	  *" $libdir "*) ;;
10720313a12fdSmrg	  *) func_append finalize_perm_rpath " $libdir" ;;
1072127702724Smrg	  esac
1072227702724Smrg	fi
10723e19dfac4Smrg      done
10724e19dfac4Smrg      # Substitute the hardcoded libdirs into the rpath.
10725e19dfac4Smrg      if test -n "$hardcode_libdir_separator" &&
10726e19dfac4Smrg	 test -n "$hardcode_libdirs"; then
107277cea3689Smrg	libdir=$hardcode_libdirs
10728e19dfac4Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
10729e19dfac4Smrg      fi
107307cea3689Smrg      finalize_rpath=$rpath
1073127702724Smrg
107327cea3689Smrg      if test -n "$libobjs" && test yes = "$build_old_libs"; then
10733e19dfac4Smrg	# Transform all the library objects into standard objects.
10734313a12fdSmrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10735313a12fdSmrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10736e19dfac4Smrg      fi
1073727702724Smrg
107387cea3689Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" false
1073927702724Smrg
10740e19dfac4Smrg      # template prelinking step
10741e19dfac4Smrg      if test -n "$prelink_cmds"; then
10742e19dfac4Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
10743e19dfac4Smrg      fi
1074427702724Smrg
107457cea3689Smrg      wrappers_required=:
10746e19dfac4Smrg      case $host in
10747313a12fdSmrg      *cegcc* | *mingw32ce*)
10748313a12fdSmrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
107497cea3689Smrg        wrappers_required=false
10750313a12fdSmrg        ;;
10751ae545d91Smrg      *cygwin* | *mingw* | *windows* )
107527cea3689Smrg        test yes = "$build_libtool_libs" || wrappers_required=false
10753e19dfac4Smrg        ;;
10754e19dfac4Smrg      *)
107557cea3689Smrg        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
107567cea3689Smrg          wrappers_required=false
10757e19dfac4Smrg        fi
10758e19dfac4Smrg        ;;
10759e19dfac4Smrg      esac
107607cea3689Smrg      $wrappers_required || {
10761e19dfac4Smrg	# Replace the output file specification.
10762313a12fdSmrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
107637cea3689Smrg	link_command=$compile_command$compile_rpath
1076427702724Smrg
10765e19dfac4Smrg	# We have no uninstalled library dependencies, so finalize right now.
10766e19dfac4Smrg	exit_status=0
10767e19dfac4Smrg	func_show_eval "$link_command" 'exit_status=$?'
1076827702724Smrg
10769313a12fdSmrg	if test -n "$postlink_cmds"; then
10770313a12fdSmrg	  func_to_tool_file "$output"
10771313a12fdSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10772313a12fdSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
10773313a12fdSmrg	fi
10774313a12fdSmrg
10775e19dfac4Smrg	# Delete the generated files.
107767cea3689Smrg	if test -f "$output_objdir/${outputname}S.$objext"; then
107777cea3689Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
10778e19dfac4Smrg	fi
1077927702724Smrg
10780e19dfac4Smrg	exit $exit_status
107817cea3689Smrg      }
1078227702724Smrg
10783e19dfac4Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
10784e19dfac4Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
10785e19dfac4Smrg      fi
10786e19dfac4Smrg      if test -n "$finalize_shlibpath"; then
10787e19dfac4Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
10788e19dfac4Smrg      fi
1078927702724Smrg
10790e19dfac4Smrg      compile_var=
10791e19dfac4Smrg      finalize_var=
10792e19dfac4Smrg      if test -n "$runpath_var"; then
10793e19dfac4Smrg	if test -n "$perm_rpath"; then
10794e19dfac4Smrg	  # We should set the runpath_var.
10795e19dfac4Smrg	  rpath=
10796e19dfac4Smrg	  for dir in $perm_rpath; do
10797313a12fdSmrg	    func_append rpath "$dir:"
1079827702724Smrg	  done
10799e19dfac4Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
1080027702724Smrg	fi
10801e19dfac4Smrg	if test -n "$finalize_perm_rpath"; then
10802e19dfac4Smrg	  # We should set the runpath_var.
10803e19dfac4Smrg	  rpath=
10804e19dfac4Smrg	  for dir in $finalize_perm_rpath; do
10805313a12fdSmrg	    func_append rpath "$dir:"
10806e19dfac4Smrg	  done
10807e19dfac4Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
10808e19dfac4Smrg	fi
10809e19dfac4Smrg      fi
1081027702724Smrg
108117cea3689Smrg      if test yes = "$no_install"; then
10812e19dfac4Smrg	# We don't need to create a wrapper script.
108137cea3689Smrg	link_command=$compile_var$compile_command$compile_rpath
10814e19dfac4Smrg	# Replace the output file specification.
10815313a12fdSmrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10816e19dfac4Smrg	# Delete the old output file.
10817e19dfac4Smrg	$opt_dry_run || $RM $output
10818e19dfac4Smrg	# Link the executable and exit
10819e19dfac4Smrg	func_show_eval "$link_command" 'exit $?'
10820313a12fdSmrg
10821313a12fdSmrg	if test -n "$postlink_cmds"; then
10822313a12fdSmrg	  func_to_tool_file "$output"
10823313a12fdSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10824313a12fdSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
10825313a12fdSmrg	fi
10826313a12fdSmrg
10827e19dfac4Smrg	exit $EXIT_SUCCESS
10828e19dfac4Smrg      fi
1082927702724Smrg
108307cea3689Smrg      case $hardcode_action,$fast_install in
108317cea3689Smrg        relink,*)
108327cea3689Smrg	  # Fast installation is not supported
108337cea3689Smrg	  link_command=$compile_var$compile_command$compile_rpath
108347cea3689Smrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
1083527702724Smrg
108367cea3689Smrg	  func_warning "this platform does not like uninstalled shared libraries"
108377cea3689Smrg	  func_warning "'$output' will be relinked during installation"
108387cea3689Smrg	  ;;
108397cea3689Smrg        *,yes)
108407cea3689Smrg	  link_command=$finalize_var$compile_command$finalize_rpath
108417cea3689Smrg	  relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
108427cea3689Smrg          ;;
108437cea3689Smrg	*,no)
108447cea3689Smrg	  link_command=$compile_var$compile_command$compile_rpath
108457cea3689Smrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
108467cea3689Smrg          ;;
108477cea3689Smrg	*,needless)
108487cea3689Smrg	  link_command=$finalize_var$compile_command$finalize_rpath
108497cea3689Smrg	  relink_command=
108507cea3689Smrg          ;;
108517cea3689Smrg      esac
1085227702724Smrg
10853e19dfac4Smrg      # Replace the output file specification.
10854313a12fdSmrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
1085527702724Smrg
10856e19dfac4Smrg      # Delete the old output files.
10857e19dfac4Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
1085827702724Smrg
10859e19dfac4Smrg      func_show_eval "$link_command" 'exit $?'
1086027702724Smrg
10861313a12fdSmrg      if test -n "$postlink_cmds"; then
10862313a12fdSmrg	func_to_tool_file "$output_objdir/$outputname"
10863313a12fdSmrg	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'`
10864313a12fdSmrg	func_execute_cmds "$postlink_cmds" 'exit $?'
10865313a12fdSmrg      fi
10866313a12fdSmrg
10867e19dfac4Smrg      # Now create the wrapper script.
10868e19dfac4Smrg      func_verbose "creating $output"
1086927702724Smrg
10870e19dfac4Smrg      # Quote the relink command for shipping.
10871e19dfac4Smrg      if test -n "$relink_command"; then
10872e19dfac4Smrg	# Preserve any variables that may affect compiler behavior
10873e19dfac4Smrg	for var in $variables_saved_for_relink; do
10874e19dfac4Smrg	  if eval test -z \"\${$var+set}\"; then
10875e19dfac4Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10876e19dfac4Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
10877e19dfac4Smrg	    relink_command="$var=; export $var; $relink_command"
10878e19dfac4Smrg	  else
1087995b7a5c8Smrg	    func_quote_arg pretty "$var_value"
1088095b7a5c8Smrg	    relink_command="$var=$func_quote_arg_result; export $var; $relink_command"
10881e19dfac4Smrg	  fi
10882e19dfac4Smrg	done
1088395b7a5c8Smrg	func_quote eval cd "`pwd`"
1088495b7a5c8Smrg	func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)"
1088595b7a5c8Smrg	relink_command=$func_quote_arg_unquoted_result
10886e19dfac4Smrg      fi
1088727702724Smrg
10888e19dfac4Smrg      # Only actually do things if not in dry run mode.
10889e19dfac4Smrg      $opt_dry_run || {
10890e19dfac4Smrg	# win32 will think the script is a binary if it has
10891e19dfac4Smrg	# a .exe suffix, so we strip it off here.
10892e19dfac4Smrg	case $output in
10893e19dfac4Smrg	  *.exe) func_stripname '' '.exe' "$output"
10894e19dfac4Smrg	         output=$func_stripname_result ;;
10895e19dfac4Smrg	esac
10896e19dfac4Smrg	# test for cygwin because mv fails w/o .exe extensions
1089727702724Smrg	case $host in
10898e19dfac4Smrg	  *cygwin*)
10899e19dfac4Smrg	    exeext=.exe
10900e19dfac4Smrg	    func_stripname '' '.exe' "$outputname"
10901e19dfac4Smrg	    outputname=$func_stripname_result ;;
10902e19dfac4Smrg	  *) exeext= ;;
1090327702724Smrg	esac
10904e19dfac4Smrg	case $host in
10905ae545d91Smrg	  *cygwin* | *mingw* | windows* )
10906e19dfac4Smrg	    func_dirname_and_basename "$output" "" "."
10907e19dfac4Smrg	    output_name=$func_basename_result
10908e19dfac4Smrg	    output_path=$func_dirname_result
109097cea3689Smrg	    cwrappersource=$output_path/$objdir/lt-$output_name.c
109107cea3689Smrg	    cwrapper=$output_path/$output_name.exe
10911e19dfac4Smrg	    $RM $cwrappersource $cwrapper
10912e19dfac4Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
10913e19dfac4Smrg
10914e19dfac4Smrg	    func_emit_cwrapperexe_src > $cwrappersource
10915e19dfac4Smrg
10916e19dfac4Smrg	    # The wrapper executable is built using the $host compiler,
10917e19dfac4Smrg	    # because it contains $host paths and files. If cross-
10918e19dfac4Smrg	    # compiling, it, like the target executable, must be
10919e19dfac4Smrg	    # executed on the $host or under an emulation environment.
10920e19dfac4Smrg	    $opt_dry_run || {
10921e19dfac4Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
10922e19dfac4Smrg	      $STRIP $cwrapper
10923e19dfac4Smrg	    }
1092427702724Smrg
10925e19dfac4Smrg	    # Now, create the wrapper script for func_source use:
10926e19dfac4Smrg	    func_ltwrapper_scriptname $cwrapper
10927e19dfac4Smrg	    $RM $func_ltwrapper_scriptname_result
10928e19dfac4Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
10929e19dfac4Smrg	    $opt_dry_run || {
10930e19dfac4Smrg	      # note: this script will not be executed, so do not chmod.
109317cea3689Smrg	      if test "x$build" = "x$host"; then
10932e19dfac4Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
1093327702724Smrg	      else
10934e19dfac4Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
1093527702724Smrg	      fi
10936e19dfac4Smrg	    }
10937e19dfac4Smrg	  ;;
10938e19dfac4Smrg	  * )
10939e19dfac4Smrg	    $RM $output
10940e19dfac4Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
1094127702724Smrg
10942e19dfac4Smrg	    func_emit_wrapper no > $output
10943e19dfac4Smrg	    chmod +x $output
1094427702724Smrg	  ;;
1094527702724Smrg	esac
10946e19dfac4Smrg      }
10947e19dfac4Smrg      exit $EXIT_SUCCESS
10948e19dfac4Smrg      ;;
10949e19dfac4Smrg    esac
1095027702724Smrg
10951e19dfac4Smrg    # See if we need to build an old-fashioned archive.
10952e19dfac4Smrg    for oldlib in $oldlibs; do
1095327702724Smrg
109547cea3689Smrg      case $build_libtool_libs in
109557cea3689Smrg        convenience)
109567cea3689Smrg	  oldobjs="$libobjs_save $symfileobj"
109577cea3689Smrg	  addlibs=$convenience
10958e19dfac4Smrg	  build_libtool_libs=no
109597cea3689Smrg	  ;;
109607cea3689Smrg	module)
109617cea3689Smrg	  oldobjs=$libobjs_save
109627cea3689Smrg	  addlibs=$old_convenience
109637cea3689Smrg	  build_libtool_libs=no
109647cea3689Smrg          ;;
109657cea3689Smrg	*)
10966e19dfac4Smrg	  oldobjs="$old_deplibs $non_pic_objects"
109677cea3689Smrg	  $preload && test -f "$symfileobj" \
109687cea3689Smrg	    && func_append oldobjs " $symfileobj"
109697cea3689Smrg	  addlibs=$old_convenience
109707cea3689Smrg	  ;;
109717cea3689Smrg      esac
1097227702724Smrg
10973e19dfac4Smrg      if test -n "$addlibs"; then
109747cea3689Smrg	gentop=$output_objdir/${outputname}x
10975313a12fdSmrg	func_append generated " $gentop"
1097627702724Smrg
10977e19dfac4Smrg	func_extract_archives $gentop $addlibs
10978313a12fdSmrg	func_append oldobjs " $func_extract_archives_result"
10979e19dfac4Smrg      fi
1098027702724Smrg
10981e19dfac4Smrg      # Do each command in the archive commands.
109827cea3689Smrg      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
10983e19dfac4Smrg	cmds=$old_archive_from_new_cmds
10984e19dfac4Smrg      else
1098527702724Smrg
10986e19dfac4Smrg	# Add any objects from preloaded convenience libraries
10987e19dfac4Smrg	if test -n "$dlprefiles"; then
109887cea3689Smrg	  gentop=$output_objdir/${outputname}x
10989313a12fdSmrg	  func_append generated " $gentop"
1099027702724Smrg
10991e19dfac4Smrg	  func_extract_archives $gentop $dlprefiles
10992313a12fdSmrg	  func_append oldobjs " $func_extract_archives_result"
10993e19dfac4Smrg	fi
1099427702724Smrg
10995e19dfac4Smrg	# POSIX demands no paths to be encoded in archives.  We have
10996e19dfac4Smrg	# to avoid creating archives with duplicate basenames if we
10997e19dfac4Smrg	# might have to extract them afterwards, e.g., when creating a
10998e19dfac4Smrg	# static archive out of a convenience library, or when linking
10999e19dfac4Smrg	# the entirety of a libtool archive into another (currently
11000e19dfac4Smrg	# not supported by libtool).
11001e19dfac4Smrg	if (for obj in $oldobjs
11002e19dfac4Smrg	    do
11003e19dfac4Smrg	      func_basename "$obj"
11004e19dfac4Smrg	      $ECHO "$func_basename_result"
11005e19dfac4Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
11006e19dfac4Smrg	  :
11007e19dfac4Smrg	else
11008313a12fdSmrg	  echo "copying selected object files to avoid basename conflicts..."
110097cea3689Smrg	  gentop=$output_objdir/${outputname}x
11010313a12fdSmrg	  func_append generated " $gentop"
11011e19dfac4Smrg	  func_mkdir_p "$gentop"
11012e19dfac4Smrg	  save_oldobjs=$oldobjs
11013e19dfac4Smrg	  oldobjs=
11014e19dfac4Smrg	  counter=1
11015e19dfac4Smrg	  for obj in $save_oldobjs
11016e19dfac4Smrg	  do
11017e19dfac4Smrg	    func_basename "$obj"
110187cea3689Smrg	    objbase=$func_basename_result
11019e19dfac4Smrg	    case " $oldobjs " in
11020e19dfac4Smrg	    " ") oldobjs=$obj ;;
11021e19dfac4Smrg	    *[\ /]"$objbase "*)
11022e19dfac4Smrg	      while :; do
11023e19dfac4Smrg		# Make sure we don't pick an alternate name that also
11024e19dfac4Smrg		# overlaps.
11025e19dfac4Smrg		newobj=lt$counter-$objbase
11026e19dfac4Smrg		func_arith $counter + 1
11027e19dfac4Smrg		counter=$func_arith_result
11028e19dfac4Smrg		case " $oldobjs " in
11029e19dfac4Smrg		*[\ /]"$newobj "*) ;;
11030e19dfac4Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
11031e19dfac4Smrg		esac
11032e19dfac4Smrg	      done
11033e19dfac4Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
11034313a12fdSmrg	      func_append oldobjs " $gentop/$newobj"
11035e19dfac4Smrg	      ;;
11036313a12fdSmrg	    *) func_append oldobjs " $obj" ;;
11037e19dfac4Smrg	    esac
1103827702724Smrg	  done
1103927702724Smrg	fi
11040313a12fdSmrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
11041313a12fdSmrg	tool_oldlib=$func_to_tool_file_result
11042e19dfac4Smrg	eval cmds=\"$old_archive_cmds\"
1104327702724Smrg
11044e19dfac4Smrg	func_len " $cmds"
11045e19dfac4Smrg	len=$func_len_result
11046e19dfac4Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
11047e19dfac4Smrg	  cmds=$old_archive_cmds
11048313a12fdSmrg	elif test -n "$archiver_list_spec"; then
11049313a12fdSmrg	  func_verbose "using command file archive linking..."
11050313a12fdSmrg	  for obj in $oldobjs
11051313a12fdSmrg	  do
11052313a12fdSmrg	    func_to_tool_file "$obj"
11053313a12fdSmrg	    $ECHO "$func_to_tool_file_result"
11054313a12fdSmrg	  done > $output_objdir/$libname.libcmd
11055313a12fdSmrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
11056313a12fdSmrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
11057313a12fdSmrg	  cmds=$old_archive_cmds
11058e19dfac4Smrg	else
11059e19dfac4Smrg	  # the command line is too long to link in one step, link in parts
11060e19dfac4Smrg	  func_verbose "using piecewise archive linking..."
11061e19dfac4Smrg	  save_RANLIB=$RANLIB
11062e19dfac4Smrg	  RANLIB=:
11063e19dfac4Smrg	  objlist=
11064e19dfac4Smrg	  concat_cmds=
11065e19dfac4Smrg	  save_oldobjs=$oldobjs
11066e19dfac4Smrg	  oldobjs=
11067e19dfac4Smrg	  # Is there a better way of finding the last object in the list?
11068e19dfac4Smrg	  for obj in $save_oldobjs
11069e19dfac4Smrg	  do
11070e19dfac4Smrg	    last_oldobj=$obj
11071e19dfac4Smrg	  done
11072e19dfac4Smrg	  eval test_cmds=\"$old_archive_cmds\"
11073e19dfac4Smrg	  func_len " $test_cmds"
11074e19dfac4Smrg	  len0=$func_len_result
11075e19dfac4Smrg	  len=$len0
11076e19dfac4Smrg	  for obj in $save_oldobjs
11077e19dfac4Smrg	  do
11078e19dfac4Smrg	    func_len " $obj"
11079e19dfac4Smrg	    func_arith $len + $func_len_result
11080e19dfac4Smrg	    len=$func_arith_result
11081e19dfac4Smrg	    func_append objlist " $obj"
11082e19dfac4Smrg	    if test "$len" -lt "$max_cmd_len"; then
11083e19dfac4Smrg	      :
11084e19dfac4Smrg	    else
11085e19dfac4Smrg	      # the above command should be used before it gets too long
11086e19dfac4Smrg	      oldobjs=$objlist
110877cea3689Smrg	      if test "$obj" = "$last_oldobj"; then
11088e19dfac4Smrg		RANLIB=$save_RANLIB
11089e19dfac4Smrg	      fi
11090e19dfac4Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
110917cea3689Smrg	      eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
11092e19dfac4Smrg	      objlist=
11093e19dfac4Smrg	      len=$len0
11094e19dfac4Smrg	    fi
11095e19dfac4Smrg	  done
11096e19dfac4Smrg	  RANLIB=$save_RANLIB
11097e19dfac4Smrg	  oldobjs=$objlist
110987cea3689Smrg	  if test -z "$oldobjs"; then
11099e19dfac4Smrg	    eval cmds=\"\$concat_cmds\"
11100e19dfac4Smrg	  else
11101e19dfac4Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
11102e19dfac4Smrg	  fi
11103e19dfac4Smrg	fi
11104e19dfac4Smrg      fi
11105e19dfac4Smrg      func_execute_cmds "$cmds" 'exit $?'
1110627702724Smrg    done
1110727702724Smrg
11108e19dfac4Smrg    test -n "$generated" && \
11109e19dfac4Smrg      func_show_eval "${RM}r$generated"
1111027702724Smrg
11111e19dfac4Smrg    # Now create the libtool archive.
11112e19dfac4Smrg    case $output in
11113e19dfac4Smrg    *.la)
11114e19dfac4Smrg      old_library=
111157cea3689Smrg      test yes = "$build_old_libs" && old_library=$libname.$libext
11116e19dfac4Smrg      func_verbose "creating $output"
1111727702724Smrg
11118e19dfac4Smrg      # Preserve any variables that may affect compiler behavior
11119e19dfac4Smrg      for var in $variables_saved_for_relink; do
11120e19dfac4Smrg	if eval test -z \"\${$var+set}\"; then
11121e19dfac4Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
11122e19dfac4Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
11123e19dfac4Smrg	  relink_command="$var=; export $var; $relink_command"
1112427702724Smrg	else
1112595b7a5c8Smrg	  func_quote_arg pretty,unquoted "$var_value"
1112695b7a5c8Smrg	  relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command"
1112727702724Smrg	fi
11128e19dfac4Smrg      done
11129e19dfac4Smrg      # Quote the link command for shipping.
1113095b7a5c8Smrg      func_quote eval cd "`pwd`"
1113195b7a5c8Smrg      relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
1113295b7a5c8Smrg      func_quote_arg pretty,unquoted "$relink_command"
1113395b7a5c8Smrg      relink_command=$func_quote_arg_unquoted_result
111347cea3689Smrg      if test yes = "$hardcode_automatic"; then
11135e19dfac4Smrg	relink_command=
11136e19dfac4Smrg      fi
1113727702724Smrg
11138e19dfac4Smrg      # Only create the output if not a dry run.
11139e19dfac4Smrg      $opt_dry_run || {
11140e19dfac4Smrg	for installed in no yes; do
111417cea3689Smrg	  if test yes = "$installed"; then
11142e19dfac4Smrg	    if test -z "$install_libdir"; then
11143e19dfac4Smrg	      break
11144e19dfac4Smrg	    fi
111457cea3689Smrg	    output=$output_objdir/${outputname}i
11146e19dfac4Smrg	    # Replace all uninstalled libtool libraries with the installed ones
11147e19dfac4Smrg	    newdependency_libs=
11148e19dfac4Smrg	    for deplib in $dependency_libs; do
11149e19dfac4Smrg	      case $deplib in
11150e19dfac4Smrg	      *.la)
11151e19dfac4Smrg		func_basename "$deplib"
111527cea3689Smrg		name=$func_basename_result
11153313a12fdSmrg		func_resolve_sysroot "$deplib"
111547cea3689Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
11155e19dfac4Smrg		test -z "$libdir" && \
111567cea3689Smrg		  func_fatal_error "'$deplib' is not a valid libtool archive"
11157313a12fdSmrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
11158313a12fdSmrg		;;
11159313a12fdSmrg	      -L*)
11160313a12fdSmrg		func_stripname -L '' "$deplib"
11161313a12fdSmrg		func_replace_sysroot "$func_stripname_result"
11162313a12fdSmrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
11163e19dfac4Smrg		;;
11164313a12fdSmrg	      -R*)
11165313a12fdSmrg		func_stripname -R '' "$deplib"
11166313a12fdSmrg		func_replace_sysroot "$func_stripname_result"
11167313a12fdSmrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
11168313a12fdSmrg		;;
11169313a12fdSmrg	      *) func_append newdependency_libs " $deplib" ;;
11170e19dfac4Smrg	      esac
11171e19dfac4Smrg	    done
111727cea3689Smrg	    dependency_libs=$newdependency_libs
11173e19dfac4Smrg	    newdlfiles=
11174e19dfac4Smrg
11175e19dfac4Smrg	    for lib in $dlfiles; do
11176e19dfac4Smrg	      case $lib in
11177e19dfac4Smrg	      *.la)
11178e19dfac4Smrg	        func_basename "$lib"
111797cea3689Smrg		name=$func_basename_result
111807cea3689Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
11181e19dfac4Smrg		test -z "$libdir" && \
111827cea3689Smrg		  func_fatal_error "'$lib' is not a valid libtool archive"
11183313a12fdSmrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
11184e19dfac4Smrg		;;
11185313a12fdSmrg	      *) func_append newdlfiles " $lib" ;;
11186e19dfac4Smrg	      esac
11187e19dfac4Smrg	    done
111887cea3689Smrg	    dlfiles=$newdlfiles
11189e19dfac4Smrg	    newdlprefiles=
11190e19dfac4Smrg	    for lib in $dlprefiles; do
11191e19dfac4Smrg	      case $lib in
11192e19dfac4Smrg	      *.la)
11193e19dfac4Smrg		# Only pass preopened files to the pseudo-archive (for
11194e19dfac4Smrg		# eventual linking with the app. that links it) if we
11195e19dfac4Smrg		# didn't already link the preopened objects directly into
11196e19dfac4Smrg		# the library:
11197e19dfac4Smrg		func_basename "$lib"
111987cea3689Smrg		name=$func_basename_result
111997cea3689Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
11200e19dfac4Smrg		test -z "$libdir" && \
112017cea3689Smrg		  func_fatal_error "'$lib' is not a valid libtool archive"
11202313a12fdSmrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
11203e19dfac4Smrg		;;
11204e19dfac4Smrg	      esac
11205e19dfac4Smrg	    done
112067cea3689Smrg	    dlprefiles=$newdlprefiles
11207e19dfac4Smrg	  else
11208e19dfac4Smrg	    newdlfiles=
11209e19dfac4Smrg	    for lib in $dlfiles; do
11210e19dfac4Smrg	      case $lib in
112117cea3689Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
11212e19dfac4Smrg		*) abs=`pwd`"/$lib" ;;
11213e19dfac4Smrg	      esac
11214313a12fdSmrg	      func_append newdlfiles " $abs"
11215e19dfac4Smrg	    done
112167cea3689Smrg	    dlfiles=$newdlfiles
11217e19dfac4Smrg	    newdlprefiles=
11218e19dfac4Smrg	    for lib in $dlprefiles; do
11219e19dfac4Smrg	      case $lib in
112207cea3689Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
11221e19dfac4Smrg		*) abs=`pwd`"/$lib" ;;
11222e19dfac4Smrg	      esac
11223313a12fdSmrg	      func_append newdlprefiles " $abs"
11224e19dfac4Smrg	    done
112257cea3689Smrg	    dlprefiles=$newdlprefiles
11226e19dfac4Smrg	  fi
11227e19dfac4Smrg	  $RM $output
11228e19dfac4Smrg	  # place dlname in correct position for cygwin
11229313a12fdSmrg	  # In fact, it would be nice if we could use this code for all target
11230313a12fdSmrg	  # systems that can't hard-code library paths into their executables
11231313a12fdSmrg	  # and that have no shared library path variable independent of PATH,
11232313a12fdSmrg	  # but it turns out we can't easily determine that from inspecting
11233313a12fdSmrg	  # libtool variables, so we have to hard-code the OSs to which it
11234313a12fdSmrg	  # applies here; at the moment, that means platforms that use the PE
11235313a12fdSmrg	  # object format with DLL files.  See the long comment at the top of
11236313a12fdSmrg	  # tests/bindir.at for full details.
11237e19dfac4Smrg	  tdlname=$dlname
11238e19dfac4Smrg	  case $host,$output,$installed,$module,$dlname in
11239ae545d91Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *windows*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
11240313a12fdSmrg	      # If a -bindir argument was supplied, place the dll there.
112417cea3689Smrg	      if test -n "$bindir"; then
11242313a12fdSmrg		func_relative_path "$install_libdir" "$bindir"
112437cea3689Smrg		tdlname=$func_relative_path_result/$dlname
11244313a12fdSmrg	      else
11245313a12fdSmrg		# Otherwise fall back on heuristic.
11246313a12fdSmrg		tdlname=../bin/$dlname
11247313a12fdSmrg	      fi
11248313a12fdSmrg	      ;;
11249e19dfac4Smrg	  esac
11250e19dfac4Smrg	  $ECHO > $output "\
11251e19dfac4Smrg# $outputname - a libtool library file
112527cea3689Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
11253e19dfac4Smrg#
11254e19dfac4Smrg# Please DO NOT delete this file!
11255e19dfac4Smrg# It is necessary for linking the library.
1125627702724Smrg
11257e19dfac4Smrg# The name that we can dlopen(3).
11258e19dfac4Smrgdlname='$tdlname'
1125927702724Smrg
11260e19dfac4Smrg# Names of this library.
11261e19dfac4Smrglibrary_names='$library_names'
1126227702724Smrg
11263e19dfac4Smrg# The name of the static archive.
11264e19dfac4Smrgold_library='$old_library'
1126527702724Smrg
112667cea3689Smrg# Linker flags that cannot go in dependency_libs.
11267e19dfac4Smrginherited_linker_flags='$new_inherited_linker_flags'
1126827702724Smrg
11269e19dfac4Smrg# Libraries that this one depends upon.
11270e19dfac4Smrgdependency_libs='$dependency_libs'
1127127702724Smrg
11272e19dfac4Smrg# Names of additional weak libraries provided by this library
11273e19dfac4Smrgweak_library_names='$weak_libs'
1127427702724Smrg
11275e19dfac4Smrg# Version information for $libname.
11276e19dfac4Smrgcurrent=$current
11277e19dfac4Smrgage=$age
11278e19dfac4Smrgrevision=$revision
1127927702724Smrg
11280e19dfac4Smrg# Is this an already installed library?
11281e19dfac4Smrginstalled=$installed
1128227702724Smrg
11283e19dfac4Smrg# Should we warn about portability when linking against -modules?
11284e19dfac4Smrgshouldnotlink=$module
1128527702724Smrg
11286e19dfac4Smrg# Files to dlopen/dlpreopen
11287e19dfac4Smrgdlopen='$dlfiles'
11288e19dfac4Smrgdlpreopen='$dlprefiles'
1128927702724Smrg
11290e19dfac4Smrg# Directory that this library needs to be installed in:
11291e19dfac4Smrglibdir='$install_libdir'"
112927cea3689Smrg	  if test no,yes = "$installed,$need_relink"; then
11293e19dfac4Smrg	    $ECHO >> $output "\
11294e19dfac4Smrgrelink_command=\"$relink_command\""
11295e19dfac4Smrg	  fi
11296e19dfac4Smrg	done
11297e19dfac4Smrg      }
1129827702724Smrg
11299e19dfac4Smrg      # Do a symbolic link so that the libtool archive can be found in
11300e19dfac4Smrg      # LD_LIBRARY_PATH before the program is installed.
11301e19dfac4Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
11302e19dfac4Smrg      ;;
11303e19dfac4Smrg    esac
11304e19dfac4Smrg    exit $EXIT_SUCCESS
11305e19dfac4Smrg}
1130627702724Smrg
113077cea3689Smrgif test link = "$opt_mode" || test relink = "$opt_mode"; then
113087cea3689Smrg  func_mode_link ${1+"$@"}
113097cea3689Smrgfi
1131027702724Smrg
1131127702724Smrg
11312e19dfac4Smrg# func_mode_uninstall arg...
11313e19dfac4Smrgfunc_mode_uninstall ()
11314e19dfac4Smrg{
113157cea3689Smrg    $debug_cmd
113167cea3689Smrg
113177cea3689Smrg    RM=$nonopt
1131827702724Smrg    files=
113197cea3689Smrg    rmforce=false
1132027702724Smrg    exit_status=0
1132127702724Smrg
1132227702724Smrg    # This variable tells wrapper scripts just to set variables rather
1132327702724Smrg    # than running their programs.
113247cea3689Smrg    libtool_install_magic=$magic
1132527702724Smrg
1132627702724Smrg    for arg
1132727702724Smrg    do
1132827702724Smrg      case $arg in
113297cea3689Smrg      -f) func_append RM " $arg"; rmforce=: ;;
11330313a12fdSmrg      -*) func_append RM " $arg" ;;
11331313a12fdSmrg      *) func_append files " $arg" ;;
1133227702724Smrg      esac
1133327702724Smrg    done
1133427702724Smrg
11335e19dfac4Smrg    test -z "$RM" && \
11336e19dfac4Smrg      func_fatal_help "you must specify an RM program"
1133727702724Smrg
1133827702724Smrg    rmdirs=
1133927702724Smrg
1134027702724Smrg    for file in $files; do
11341e19dfac4Smrg      func_dirname "$file" "" "."
113427cea3689Smrg      dir=$func_dirname_result
113437cea3689Smrg      if test . = "$dir"; then
113447cea3689Smrg	odir=$objdir
1134527702724Smrg      else
113467cea3689Smrg	odir=$dir/$objdir
1134727702724Smrg      fi
11348e19dfac4Smrg      func_basename "$file"
113497cea3689Smrg      name=$func_basename_result
113507cea3689Smrg      test uninstall = "$opt_mode" && odir=$dir
1135127702724Smrg
11352313a12fdSmrg      # Remember odir for removal later, being careful to avoid duplicates
113537cea3689Smrg      if test clean = "$opt_mode"; then
1135427702724Smrg	case " $rmdirs " in
11355313a12fdSmrg	  *" $odir "*) ;;
11356313a12fdSmrg	  *) func_append rmdirs " $odir" ;;
1135727702724Smrg	esac
1135827702724Smrg      fi
1135927702724Smrg
1136027702724Smrg      # Don't error if the file doesn't exist and rm -f was used.
11361e19dfac4Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
11362e19dfac4Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
11363e19dfac4Smrg	 test -f "$file"; then
1136427702724Smrg	:
1136527702724Smrg      elif test -d "$file"; then
1136627702724Smrg	exit_status=1
1136727702724Smrg	continue
113687cea3689Smrg      elif $rmforce; then
1136927702724Smrg	continue
1137027702724Smrg      fi
1137127702724Smrg
113727cea3689Smrg      rmfiles=$file
1137327702724Smrg
1137427702724Smrg      case $name in
1137527702724Smrg      *.la)
1137627702724Smrg	# Possibly a libtool archive, so verify it.
11377e19dfac4Smrg	if func_lalib_p "$file"; then
11378e19dfac4Smrg	  func_source $dir/$name
1137927702724Smrg
1138027702724Smrg	  # Delete the libtool libraries and symlinks.
1138127702724Smrg	  for n in $library_names; do
11382313a12fdSmrg	    func_append rmfiles " $odir/$n"
1138327702724Smrg	  done
11384313a12fdSmrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
1138527702724Smrg
113867cea3689Smrg	  case $opt_mode in
1138727702724Smrg	  clean)
11388313a12fdSmrg	    case " $library_names " in
1138927702724Smrg	    *" $dlname "*) ;;
11390313a12fdSmrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
1139127702724Smrg	    esac
11392313a12fdSmrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
1139327702724Smrg	    ;;
1139427702724Smrg	  uninstall)
1139527702724Smrg	    if test -n "$library_names"; then
1139627702724Smrg	      # Do each command in the postuninstall commands.
113977cea3689Smrg	      func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
1139827702724Smrg	    fi
1139927702724Smrg
1140027702724Smrg	    if test -n "$old_library"; then
1140127702724Smrg	      # Do each command in the old_postuninstall commands.
114027cea3689Smrg	      func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
1140327702724Smrg	    fi
1140427702724Smrg	    # FIXME: should reinstall the best remaining shared library.
1140527702724Smrg	    ;;
1140627702724Smrg	  esac
1140727702724Smrg	fi
1140827702724Smrg	;;
1140927702724Smrg
1141027702724Smrg      *.lo)
1141127702724Smrg	# Possibly a libtool object, so verify it.
11412e19dfac4Smrg	if func_lalib_p "$file"; then
1141327702724Smrg
1141427702724Smrg	  # Read the .lo file
11415e19dfac4Smrg	  func_source $dir/$name
1141627702724Smrg
1141727702724Smrg	  # Add PIC object to the list of files to remove.
114187cea3689Smrg	  if test -n "$pic_object" && test none != "$pic_object"; then
11419313a12fdSmrg	    func_append rmfiles " $dir/$pic_object"
1142027702724Smrg	  fi
1142127702724Smrg
1142227702724Smrg	  # Add non-PIC object to the list of files to remove.
114237cea3689Smrg	  if test -n "$non_pic_object" && test none != "$non_pic_object"; then
11424313a12fdSmrg	    func_append rmfiles " $dir/$non_pic_object"
1142527702724Smrg	  fi
1142627702724Smrg	fi
1142727702724Smrg	;;
1142827702724Smrg
1142927702724Smrg      *)
114307cea3689Smrg	if test clean = "$opt_mode"; then
1143127702724Smrg	  noexename=$name
1143227702724Smrg	  case $file in
1143327702724Smrg	  *.exe)
11434e19dfac4Smrg	    func_stripname '' '.exe' "$file"
11435e19dfac4Smrg	    file=$func_stripname_result
11436e19dfac4Smrg	    func_stripname '' '.exe' "$name"
11437e19dfac4Smrg	    noexename=$func_stripname_result
1143827702724Smrg	    # $file with .exe has already been added to rmfiles,
1143927702724Smrg	    # add $file without .exe
11440313a12fdSmrg	    func_append rmfiles " $file"
1144127702724Smrg	    ;;
1144227702724Smrg	  esac
1144327702724Smrg	  # Do a test to see if this is a libtool program.
11444e19dfac4Smrg	  if func_ltwrapper_p "$file"; then
11445e19dfac4Smrg	    if func_ltwrapper_executable_p "$file"; then
11446e19dfac4Smrg	      func_ltwrapper_scriptname "$file"
11447e19dfac4Smrg	      relink_command=
11448e19dfac4Smrg	      func_source $func_ltwrapper_scriptname_result
11449313a12fdSmrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
11450e19dfac4Smrg	    else
11451e19dfac4Smrg	      relink_command=
11452e19dfac4Smrg	      func_source $dir/$noexename
11453e19dfac4Smrg	    fi
1145427702724Smrg
1145527702724Smrg	    # note $name still contains .exe if it was in $file originally
1145627702724Smrg	    # as does the version of $file that was added into $rmfiles
114577cea3689Smrg	    func_append rmfiles " $odir/$name $odir/${name}S.$objext"
114587cea3689Smrg	    if test yes = "$fast_install" && test -n "$relink_command"; then
11459313a12fdSmrg	      func_append rmfiles " $odir/lt-$name"
1146027702724Smrg	    fi
114617cea3689Smrg	    if test "X$noexename" != "X$name"; then
114627cea3689Smrg	      func_append rmfiles " $odir/lt-$noexename.c"
1146327702724Smrg	    fi
1146427702724Smrg	  fi
1146527702724Smrg	fi
1146627702724Smrg	;;
1146727702724Smrg      esac
11468e19dfac4Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
1146927702724Smrg    done
1147027702724Smrg
114717cea3689Smrg    # Try to remove the $objdir's in the directories where we deleted files
1147227702724Smrg    for dir in $rmdirs; do
1147327702724Smrg      if test -d "$dir"; then
11474e19dfac4Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
1147527702724Smrg      fi
1147627702724Smrg    done
1147727702724Smrg
1147827702724Smrg    exit $exit_status
11479e19dfac4Smrg}
1148027702724Smrg
114817cea3689Smrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
114827cea3689Smrg  func_mode_uninstall ${1+"$@"}
114837cea3689Smrgfi
1148427702724Smrg
11485313a12fdSmrgtest -z "$opt_mode" && {
114867cea3689Smrg  help=$generic_help
11487e19dfac4Smrg  func_fatal_help "you must specify a MODE"
11488e19dfac4Smrg}
11489e19dfac4Smrg
11490e19dfac4Smrgtest -z "$exec_cmd" && \
114917cea3689Smrg  func_fatal_help "invalid operation mode '$opt_mode'"
1149227702724Smrg
1149327702724Smrgif test -n "$exec_cmd"; then
11494e19dfac4Smrg  eval exec "$exec_cmd"
1149527702724Smrg  exit $EXIT_FAILURE
1149627702724Smrgfi
1149727702724Smrg
11498e19dfac4Smrgexit $exit_status
1149927702724Smrg
1150027702724Smrg
1150127702724Smrg# The TAGs below are defined such that we never get into a situation
115027cea3689Smrg# where we disable both kinds of libraries.  Given conflicting
1150327702724Smrg# choices, we go for a static library, that is the most portable,
1150427702724Smrg# since we can't tell whether shared libraries were disabled because
1150527702724Smrg# the user asked for that or because the platform doesn't support
1150627702724Smrg# them.  This is particularly important on AIX, because we don't
1150727702724Smrg# support having both static and shared libraries enabled at the same
1150827702724Smrg# time on that platform, so we default to a shared-only configuration.
1150927702724Smrg# If a disable-shared tag is given, we'll fallback to a static-only
1151027702724Smrg# configuration.  But we'll never go from static-only to shared-only.
1151127702724Smrg
1151227702724Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
11513e19dfac4Smrgbuild_libtool_libs=no
11514e19dfac4Smrgbuild_old_libs=yes
1151527702724Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
1151627702724Smrg
1151727702724Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
11518e19dfac4Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
1151927702724Smrg# ### END LIBTOOL TAG CONFIG: disable-static
1152027702724Smrg
1152127702724Smrg# Local Variables:
1152227702724Smrg# mode:shell-script
1152327702724Smrg# sh-indentation:2
1152427702724Smrg# End:
11525