ltmain.sh revision 0d16fef4
10d16fef4Smrg#! /bin/sh
20d16fef4Smrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
30d16fef4Smrg##               by inline-source v2014-01-03.01
4de2362d3Smrg
50d16fef4Smrg# libtool (GNU libtool) 2.4.6
60d16fef4Smrg# Provide generalized library-building support services.
7de2362d3Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
8de2362d3Smrg
90d16fef4Smrg# Copyright (C) 1996-2015 Free Software Foundation, Inc.
10de2362d3Smrg# This is free software; see the source for copying conditions.  There is NO
11de2362d3Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12de2362d3Smrg
13de2362d3Smrg# GNU Libtool is free software; you can redistribute it and/or modify
14de2362d3Smrg# it under the terms of the GNU General Public License as published by
15de2362d3Smrg# the Free Software Foundation; either version 2 of the License, or
16de2362d3Smrg# (at your option) any later version.
17de2362d3Smrg#
18de2362d3Smrg# As a special exception to the GNU General Public License,
19de2362d3Smrg# if you distribute this file as part of a program or library that
20de2362d3Smrg# is built using GNU Libtool, you may include this file under the
21de2362d3Smrg# same distribution terms that you use for the rest of that program.
22de2362d3Smrg#
23de2362d3Smrg# GNU Libtool is distributed in the hope that it will be useful, but
24de2362d3Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
25de2362d3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
26de2362d3Smrg# General Public License for more details.
27de2362d3Smrg#
28de2362d3Smrg# You should have received a copy of the GNU General Public License
290d16fef4Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
30de2362d3Smrg
31de2362d3Smrg
32de2362d3SmrgPROGRAM=libtool
33de2362d3SmrgPACKAGE=libtool
340d16fef4SmrgVERSION="2.4.6 Debian-2.4.6-0.1"
350d16fef4Smrgpackage_revision=2.4.6
36de2362d3Smrg
370d16fef4Smrg
380d16fef4Smrg## ------ ##
390d16fef4Smrg## Usage. ##
400d16fef4Smrg## ------ ##
410d16fef4Smrg
420d16fef4Smrg# Run './libtool --help' for help with using this script from the
430d16fef4Smrg# command line.
440d16fef4Smrg
450d16fef4Smrg
460d16fef4Smrg## ------------------------------- ##
470d16fef4Smrg## User overridable command paths. ##
480d16fef4Smrg## ------------------------------- ##
490d16fef4Smrg
500d16fef4Smrg# After configure completes, it has a better idea of some of the
510d16fef4Smrg# shell tools we need than the defaults used by the functions shared
520d16fef4Smrg# with bootstrap, so set those here where they can still be over-
530d16fef4Smrg# ridden by the user, but otherwise take precedence.
540d16fef4Smrg
550d16fef4Smrg: ${AUTOCONF="autoconf"}
560d16fef4Smrg: ${AUTOMAKE="automake"}
570d16fef4Smrg
580d16fef4Smrg
590d16fef4Smrg## -------------------------- ##
600d16fef4Smrg## Source external libraries. ##
610d16fef4Smrg## -------------------------- ##
620d16fef4Smrg
630d16fef4Smrg# Much of our low-level functionality needs to be sourced from external
640d16fef4Smrg# libraries, which are installed to $pkgauxdir.
650d16fef4Smrg
660d16fef4Smrg# Set a version string for this script.
670d16fef4Smrgscriptversion=2015-01-20.17; # UTC
680d16fef4Smrg
690d16fef4Smrg# General shell script boiler plate, and helper functions.
700d16fef4Smrg# Written by Gary V. Vaughan, 2004
710d16fef4Smrg
720d16fef4Smrg# Copyright (C) 2004-2015 Free Software Foundation, Inc.
730d16fef4Smrg# This is free software; see the source for copying conditions.  There is NO
740d16fef4Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
750d16fef4Smrg
760d16fef4Smrg# This program is free software; you can redistribute it and/or modify
770d16fef4Smrg# it under the terms of the GNU General Public License as published by
780d16fef4Smrg# the Free Software Foundation; either version 3 of the License, or
790d16fef4Smrg# (at your option) any later version.
800d16fef4Smrg
810d16fef4Smrg# As a special exception to the GNU General Public License, if you distribute
820d16fef4Smrg# this file as part of a program or library that is built using GNU Libtool,
830d16fef4Smrg# you may include this file under the same distribution terms that you use
840d16fef4Smrg# for the rest of that program.
850d16fef4Smrg
860d16fef4Smrg# This program is distributed in the hope that it will be useful,
870d16fef4Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
880d16fef4Smrg# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
890d16fef4Smrg# General Public License for more details.
900d16fef4Smrg
910d16fef4Smrg# You should have received a copy of the GNU General Public License
920d16fef4Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>.
930d16fef4Smrg
940d16fef4Smrg# Please report bugs or propose patches to gary@gnu.org.
950d16fef4Smrg
960d16fef4Smrg
970d16fef4Smrg## ------ ##
980d16fef4Smrg## Usage. ##
990d16fef4Smrg## ------ ##
1000d16fef4Smrg
1010d16fef4Smrg# Evaluate this file near the top of your script to gain access to
1020d16fef4Smrg# the functions and variables defined here:
1030d16fef4Smrg#
1040d16fef4Smrg#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
1050d16fef4Smrg#
1060d16fef4Smrg# If you need to override any of the default environment variable
1070d16fef4Smrg# settings, do that before evaluating this file.
1080d16fef4Smrg
1090d16fef4Smrg
1100d16fef4Smrg## -------------------- ##
1110d16fef4Smrg## Shell normalisation. ##
1120d16fef4Smrg## -------------------- ##
1130d16fef4Smrg
1140d16fef4Smrg# Some shells need a little help to be as Bourne compatible as possible.
1150d16fef4Smrg# Before doing anything else, make sure all that help has been provided!
1160d16fef4Smrg
1170d16fef4SmrgDUALCASE=1; export DUALCASE # for MKS sh
1180d16fef4Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
119de2362d3Smrg  emulate sh
120de2362d3Smrg  NULLCMD=:
1210d16fef4Smrg  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
122de2362d3Smrg  # is contrary to our usage.  Disable this feature.
123de2362d3Smrg  alias -g '${1+"$@"}'='"$@"'
124de2362d3Smrg  setopt NO_GLOB_SUBST
125de2362d3Smrgelse
1260d16fef4Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
127de2362d3Smrgfi
128de2362d3Smrg
1290d16fef4Smrg# NLS nuisances: We save the old values in case they are required later.
1300d16fef4Smrg_G_user_locale=
1310d16fef4Smrg_G_safe_locale=
1320d16fef4Smrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
133de2362d3Smrgdo
1340d16fef4Smrg  eval "if test set = \"\${$_G_var+set}\"; then
1350d16fef4Smrg          save_$_G_var=\$$_G_var
1360d16fef4Smrg          $_G_var=C
1370d16fef4Smrg	  export $_G_var
1380d16fef4Smrg	  _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
1390d16fef4Smrg	  _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
140de2362d3Smrg	fi"
141de2362d3Smrgdone
142de2362d3Smrg
1430d16fef4Smrg# CDPATH.
1440d16fef4Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
145de2362d3Smrg
1460d16fef4Smrg# Make sure IFS has a sensible default
1470d16fef4Smrgsp=' '
1480d16fef4Smrgnl='
1490d16fef4Smrg'
1500d16fef4SmrgIFS="$sp	$nl"
1510d16fef4Smrg
1520d16fef4Smrg# There are apparently some retarded systems that use ';' as a PATH separator!
1530d16fef4Smrgif test "${PATH_SEPARATOR+set}" != set; then
1540d16fef4Smrg  PATH_SEPARATOR=:
1550d16fef4Smrg  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
1560d16fef4Smrg    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
1570d16fef4Smrg      PATH_SEPARATOR=';'
1580d16fef4Smrg  }
1590d16fef4Smrgfi
160de2362d3Smrg
161de2362d3Smrg
162de2362d3Smrg
1630d16fef4Smrg## ------------------------- ##
1640d16fef4Smrg## Locate command utilities. ##
1650d16fef4Smrg## ------------------------- ##
1660d16fef4Smrg
1670d16fef4Smrg
1680d16fef4Smrg# func_executable_p FILE
1690d16fef4Smrg# ----------------------
1700d16fef4Smrg# Check that FILE is an executable regular file.
1710d16fef4Smrgfunc_executable_p ()
1720d16fef4Smrg{
1730d16fef4Smrg    test -f "$1" && test -x "$1"
1740d16fef4Smrg}
1750d16fef4Smrg
1760d16fef4Smrg
1770d16fef4Smrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
1780d16fef4Smrg# --------------------------------------------
1790d16fef4Smrg# Search for either a program that responds to --version with output
1800d16fef4Smrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by
1810d16fef4Smrg# trying all the directories in PATH with each of the elements of
1820d16fef4Smrg# PROGS_LIST.
1830d16fef4Smrg#
1840d16fef4Smrg# CHECK_FUNC should accept the path to a candidate program, and
1850d16fef4Smrg# set $func_check_prog_result if it truncates its output less than
1860d16fef4Smrg# $_G_path_prog_max characters.
1870d16fef4Smrgfunc_path_progs ()
1880d16fef4Smrg{
1890d16fef4Smrg    _G_progs_list=$1
1900d16fef4Smrg    _G_check_func=$2
1910d16fef4Smrg    _G_PATH=${3-"$PATH"}
1920d16fef4Smrg
1930d16fef4Smrg    _G_path_prog_max=0
1940d16fef4Smrg    _G_path_prog_found=false
1950d16fef4Smrg    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
1960d16fef4Smrg    for _G_dir in $_G_PATH; do
1970d16fef4Smrg      IFS=$_G_save_IFS
1980d16fef4Smrg      test -z "$_G_dir" && _G_dir=.
1990d16fef4Smrg      for _G_prog_name in $_G_progs_list; do
2000d16fef4Smrg        for _exeext in '' .EXE; do
2010d16fef4Smrg          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
2020d16fef4Smrg          func_executable_p "$_G_path_prog" || continue
2030d16fef4Smrg          case `"$_G_path_prog" --version 2>&1` in
2040d16fef4Smrg            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
2050d16fef4Smrg            *)     $_G_check_func $_G_path_prog
2060d16fef4Smrg		   func_path_progs_result=$func_check_prog_result
2070d16fef4Smrg		   ;;
2080d16fef4Smrg          esac
2090d16fef4Smrg          $_G_path_prog_found && break 3
2100d16fef4Smrg        done
2110d16fef4Smrg      done
2120d16fef4Smrg    done
2130d16fef4Smrg    IFS=$_G_save_IFS
2140d16fef4Smrg    test -z "$func_path_progs_result" && {
2150d16fef4Smrg      echo "no acceptable sed could be found in \$PATH" >&2
2160d16fef4Smrg      exit 1
2170d16fef4Smrg    }
2180d16fef4Smrg}
2190d16fef4Smrg
2200d16fef4Smrg
2210d16fef4Smrg# We want to be able to use the functions in this file before configure
2220d16fef4Smrg# has figured out where the best binaries are kept, which means we have
2230d16fef4Smrg# to search for them ourselves - except when the results are already set
2240d16fef4Smrg# where we skip the searches.
2250d16fef4Smrg
2260d16fef4Smrg# Unless the user overrides by setting SED, search the path for either GNU
2270d16fef4Smrg# sed, or the sed that truncates its output the least.
2280d16fef4Smrgtest -z "$SED" && {
2290d16fef4Smrg  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
2300d16fef4Smrg  for _G_i in 1 2 3 4 5 6 7; do
2310d16fef4Smrg    _G_sed_script=$_G_sed_script$nl$_G_sed_script
2320d16fef4Smrg  done
2330d16fef4Smrg  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
2340d16fef4Smrg  _G_sed_script=
2350d16fef4Smrg
2360d16fef4Smrg  func_check_prog_sed ()
2370d16fef4Smrg  {
2380d16fef4Smrg    _G_path_prog=$1
2390d16fef4Smrg
2400d16fef4Smrg    _G_count=0
2410d16fef4Smrg    printf 0123456789 >conftest.in
2420d16fef4Smrg    while :
2430d16fef4Smrg    do
2440d16fef4Smrg      cat conftest.in conftest.in >conftest.tmp
2450d16fef4Smrg      mv conftest.tmp conftest.in
2460d16fef4Smrg      cp conftest.in conftest.nl
2470d16fef4Smrg      echo '' >> conftest.nl
2480d16fef4Smrg      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
2490d16fef4Smrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
2500d16fef4Smrg      _G_count=`expr $_G_count + 1`
2510d16fef4Smrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
2520d16fef4Smrg        # Best one so far, save it but keep looking for a better one
2530d16fef4Smrg        func_check_prog_result=$_G_path_prog
2540d16fef4Smrg        _G_path_prog_max=$_G_count
2550d16fef4Smrg      fi
2560d16fef4Smrg      # 10*(2^10) chars as input seems more than enough
2570d16fef4Smrg      test 10 -lt "$_G_count" && break
2580d16fef4Smrg    done
2590d16fef4Smrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
2600d16fef4Smrg  }
2610d16fef4Smrg
2620d16fef4Smrg  func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
2630d16fef4Smrg  rm -f conftest.sed
2640d16fef4Smrg  SED=$func_path_progs_result
2650d16fef4Smrg}
2660d16fef4Smrg
2670d16fef4Smrg
2680d16fef4Smrg# Unless the user overrides by setting GREP, search the path for either GNU
2690d16fef4Smrg# grep, or the grep that truncates its output the least.
2700d16fef4Smrgtest -z "$GREP" && {
2710d16fef4Smrg  func_check_prog_grep ()
2720d16fef4Smrg  {
2730d16fef4Smrg    _G_path_prog=$1
2740d16fef4Smrg
2750d16fef4Smrg    _G_count=0
2760d16fef4Smrg    _G_path_prog_max=0
2770d16fef4Smrg    printf 0123456789 >conftest.in
2780d16fef4Smrg    while :
2790d16fef4Smrg    do
2800d16fef4Smrg      cat conftest.in conftest.in >conftest.tmp
2810d16fef4Smrg      mv conftest.tmp conftest.in
2820d16fef4Smrg      cp conftest.in conftest.nl
2830d16fef4Smrg      echo 'GREP' >> conftest.nl
2840d16fef4Smrg      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
2850d16fef4Smrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
2860d16fef4Smrg      _G_count=`expr $_G_count + 1`
2870d16fef4Smrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
2880d16fef4Smrg        # Best one so far, save it but keep looking for a better one
2890d16fef4Smrg        func_check_prog_result=$_G_path_prog
2900d16fef4Smrg        _G_path_prog_max=$_G_count
2910d16fef4Smrg      fi
2920d16fef4Smrg      # 10*(2^10) chars as input seems more than enough
2930d16fef4Smrg      test 10 -lt "$_G_count" && break
2940d16fef4Smrg    done
2950d16fef4Smrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
2960d16fef4Smrg  }
2970d16fef4Smrg
2980d16fef4Smrg  func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
2990d16fef4Smrg  GREP=$func_path_progs_result
3000d16fef4Smrg}
3010d16fef4Smrg
3020d16fef4Smrg
3030d16fef4Smrg## ------------------------------- ##
3040d16fef4Smrg## User overridable command paths. ##
3050d16fef4Smrg## ------------------------------- ##
3060d16fef4Smrg
3070d16fef4Smrg# All uppercase variable names are used for environment variables.  These
3080d16fef4Smrg# variables can be overridden by the user before calling a script that
3090d16fef4Smrg# uses them if a suitable command of that name is not already available
3100d16fef4Smrg# in the command search PATH.
311de2362d3Smrg
312de2362d3Smrg: ${CP="cp -f"}
3130d16fef4Smrg: ${ECHO="printf %s\n"}
3140d16fef4Smrg: ${EGREP="$GREP -E"}
3150d16fef4Smrg: ${FGREP="$GREP -F"}
3160d16fef4Smrg: ${LN_S="ln -s"}
317de2362d3Smrg: ${MAKE="make"}
318de2362d3Smrg: ${MKDIR="mkdir"}
319de2362d3Smrg: ${MV="mv -f"}
320de2362d3Smrg: ${RM="rm -f"}
321de2362d3Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
322de2362d3Smrg
323de2362d3Smrg
3240d16fef4Smrg## -------------------- ##
3250d16fef4Smrg## Useful sed snippets. ##
3260d16fef4Smrg## -------------------- ##
327de2362d3Smrg
3280d16fef4Smrgsed_dirname='s|/[^/]*$||'
3290d16fef4Smrgsed_basename='s|^.*/||'
330de2362d3Smrg
3310d16fef4Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
3320d16fef4Smrg# metacharacters that are still active within double-quoted strings.
3330d16fef4Smrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g'
334de2362d3Smrg
3350d16fef4Smrg# Same as above, but do not quote variable references.
3360d16fef4Smrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
337de2362d3Smrg
3380d16fef4Smrg# Sed substitution that turns a string into a regex matching for the
3390d16fef4Smrg# string literally.
3400d16fef4Smrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
341de2362d3Smrg
3420d16fef4Smrg# Sed substitution that converts a w32 file name or path
3430d16fef4Smrg# that contains forward slashes, into one that contains
3440d16fef4Smrg# (escaped) backslashes.  A very naive implementation.
3450d16fef4Smrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
3460d16fef4Smrg
3470d16fef4Smrg# Re-'\' parameter expansions in output of sed_double_quote_subst that
3480d16fef4Smrg# were '\'-ed in input to the same.  If an odd number of '\' preceded a
3490d16fef4Smrg# '$' in input to sed_double_quote_subst, that '$' was protected from
3500d16fef4Smrg# expansion.  Since each input '\' is now two '\'s, look for any number
3510d16fef4Smrg# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
3520d16fef4Smrg_G_bs='\\'
3530d16fef4Smrg_G_bs2='\\\\'
3540d16fef4Smrg_G_bs4='\\\\\\\\'
3550d16fef4Smrg_G_dollar='\$'
3560d16fef4Smrgsed_double_backslash="\
3570d16fef4Smrg  s/$_G_bs4/&\\
3580d16fef4Smrg/g
3590d16fef4Smrg  s/^$_G_bs2$_G_dollar/$_G_bs&/
3600d16fef4Smrg  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
3610d16fef4Smrg  s/\n//g"
362de2362d3Smrg
363de2362d3Smrg
3640d16fef4Smrg## ----------------- ##
3650d16fef4Smrg## Global variables. ##
3660d16fef4Smrg## ----------------- ##
367de2362d3Smrg
3680d16fef4Smrg# Except for the global variables explicitly listed below, the following
3690d16fef4Smrg# functions in the '^func_' namespace, and the '^require_' namespace
3700d16fef4Smrg# variables initialised in the 'Resource management' section, sourcing
3710d16fef4Smrg# this file will not pollute your global namespace with anything
3720d16fef4Smrg# else. There's no portable way to scope variables in Bourne shell
3730d16fef4Smrg# though, so actually running these functions will sometimes place
3740d16fef4Smrg# results into a variable named after the function, and often use
3750d16fef4Smrg# temporary variables in the '^_G_' namespace. If you are careful to
3760d16fef4Smrg# avoid using those namespaces casually in your sourcing script, things
3770d16fef4Smrg# should continue to work as you expect. And, of course, you can freely
3780d16fef4Smrg# overwrite any of the functions or variables defined here before
3790d16fef4Smrg# calling anything to customize them.
380de2362d3Smrg
3810d16fef4SmrgEXIT_SUCCESS=0
3820d16fef4SmrgEXIT_FAILURE=1
3830d16fef4SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
3840d16fef4SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
385de2362d3Smrg
3860d16fef4Smrg# Allow overriding, eg assuming that you follow the convention of
3870d16fef4Smrg# putting '$debug_cmd' at the start of all your functions, you can get
3880d16fef4Smrg# bash to show function call trace with:
3890d16fef4Smrg#
3900d16fef4Smrg#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
3910d16fef4Smrgdebug_cmd=${debug_cmd-":"}
3920d16fef4Smrgexit_cmd=:
393de2362d3Smrg
3940d16fef4Smrg# By convention, finish your script with:
3950d16fef4Smrg#
3960d16fef4Smrg#    exit $exit_status
3970d16fef4Smrg#
3980d16fef4Smrg# so that you can set exit_status to non-zero if you want to indicate
3990d16fef4Smrg# something went wrong during execution without actually bailing out at
4000d16fef4Smrg# the point of failure.
4010d16fef4Smrgexit_status=$EXIT_SUCCESS
402de2362d3Smrg
4030d16fef4Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
4040d16fef4Smrg# is ksh but when the shell is invoked as "sh" and the current value of
4050d16fef4Smrg# the _XPG environment variable is not equal to 1 (one), the special
4060d16fef4Smrg# positional parameter $0, within a function call, is the name of the
4070d16fef4Smrg# function.
4080d16fef4Smrgprogpath=$0
409de2362d3Smrg
4100d16fef4Smrg# The name of this program.
4110d16fef4Smrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"`
412de2362d3Smrg
4130d16fef4Smrg# Make sure we have an absolute progpath for reexecution:
414de2362d3Smrgcase $progpath in
415de2362d3Smrg  [\\/]*|[A-Za-z]:\\*) ;;
416de2362d3Smrg  *[\\/]*)
4170d16fef4Smrg     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
418de2362d3Smrg     progdir=`cd "$progdir" && pwd`
4190d16fef4Smrg     progpath=$progdir/$progname
420de2362d3Smrg     ;;
421de2362d3Smrg  *)
4220d16fef4Smrg     _G_IFS=$IFS
423de2362d3Smrg     IFS=${PATH_SEPARATOR-:}
424de2362d3Smrg     for progdir in $PATH; do
4250d16fef4Smrg       IFS=$_G_IFS
426de2362d3Smrg       test -x "$progdir/$progname" && break
427de2362d3Smrg     done
4280d16fef4Smrg     IFS=$_G_IFS
429de2362d3Smrg     test -n "$progdir" || progdir=`pwd`
4300d16fef4Smrg     progpath=$progdir/$progname
431de2362d3Smrg     ;;
432de2362d3Smrgesac
433de2362d3Smrg
434de2362d3Smrg
4350d16fef4Smrg## ----------------- ##
4360d16fef4Smrg## Standard options. ##
4370d16fef4Smrg## ----------------- ##
438de2362d3Smrg
4390d16fef4Smrg# The following options affect the operation of the functions defined
4400d16fef4Smrg# below, and should be set appropriately depending on run-time para-
4410d16fef4Smrg# meters passed on the command line.
442de2362d3Smrg
443de2362d3Smrgopt_dry_run=false
444de2362d3Smrgopt_quiet=false
445de2362d3Smrgopt_verbose=false
446de2362d3Smrg
4470d16fef4Smrg# Categories 'all' and 'none' are always available.  Append any others
4480d16fef4Smrg# you will pass as the first argument to func_warning from your own
4490d16fef4Smrg# code.
4500d16fef4Smrgwarning_categories=
451de2362d3Smrg
4520d16fef4Smrg# By default, display warnings according to 'opt_warning_types'.  Set
4530d16fef4Smrg# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
4540d16fef4Smrg# treat the next displayed warning as a fatal error.
4550d16fef4Smrgwarning_func=func_warn_and_continue
456de2362d3Smrg
4570d16fef4Smrg# Set to 'all' to display all warnings, 'none' to suppress all
4580d16fef4Smrg# warnings, or a space delimited list of some subset of
4590d16fef4Smrg# 'warning_categories' to display only the listed warnings.
4600d16fef4Smrgopt_warning_types=all
461de2362d3Smrg
462de2362d3Smrg
4630d16fef4Smrg## -------------------- ##
4640d16fef4Smrg## Resource management. ##
4650d16fef4Smrg## -------------------- ##
466de2362d3Smrg
4670d16fef4Smrg# This section contains definitions for functions that each ensure a
4680d16fef4Smrg# particular resource (a file, or a non-empty configuration variable for
4690d16fef4Smrg# example) is available, and if appropriate to extract default values
4700d16fef4Smrg# from pertinent package files. Call them using their associated
4710d16fef4Smrg# 'require_*' variable to ensure that they are executed, at most, once.
4720d16fef4Smrg#
4730d16fef4Smrg# It's entirely deliberate that calling these functions can set
4740d16fef4Smrg# variables that don't obey the namespace limitations obeyed by the rest
4750d16fef4Smrg# of this file, in order that that they be as useful as possible to
4760d16fef4Smrg# callers.
477de2362d3Smrg
478de2362d3Smrg
4790d16fef4Smrg# require_term_colors
4800d16fef4Smrg# -------------------
4810d16fef4Smrg# Allow display of bold text on terminals that support it.
4820d16fef4Smrgrequire_term_colors=func_require_term_colors
4830d16fef4Smrgfunc_require_term_colors ()
484de2362d3Smrg{
4850d16fef4Smrg    $debug_cmd
4860d16fef4Smrg
4870d16fef4Smrg    test -t 1 && {
4880d16fef4Smrg      # COLORTERM and USE_ANSI_COLORS environment variables take
4890d16fef4Smrg      # precedence, because most terminfo databases neglect to describe
4900d16fef4Smrg      # whether color sequences are supported.
4910d16fef4Smrg      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
4920d16fef4Smrg
4930d16fef4Smrg      if test 1 = "$USE_ANSI_COLORS"; then
4940d16fef4Smrg        # Standard ANSI escape sequences
4950d16fef4Smrg        tc_reset='[0m'
4960d16fef4Smrg        tc_bold='[1m';   tc_standout='[7m'
4970d16fef4Smrg        tc_red='[31m';   tc_green='[32m'
4980d16fef4Smrg        tc_blue='[34m';  tc_cyan='[36m'
4990d16fef4Smrg      else
5000d16fef4Smrg        # Otherwise trust the terminfo database after all.
5010d16fef4Smrg        test -n "`tput sgr0 2>/dev/null`" && {
5020d16fef4Smrg          tc_reset=`tput sgr0`
5030d16fef4Smrg          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
5040d16fef4Smrg          tc_standout=$tc_bold
5050d16fef4Smrg          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
5060d16fef4Smrg          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
5070d16fef4Smrg          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
5080d16fef4Smrg          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
5090d16fef4Smrg          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
5100d16fef4Smrg        }
5110d16fef4Smrg      fi
5120d16fef4Smrg    }
513de2362d3Smrg
5140d16fef4Smrg    require_term_colors=:
515de2362d3Smrg}
516de2362d3Smrg
517de2362d3Smrg
5180d16fef4Smrg## ----------------- ##
5190d16fef4Smrg## Function library. ##
5200d16fef4Smrg## ----------------- ##
5210d16fef4Smrg
5220d16fef4Smrg# This section contains a variety of useful functions to call in your
5230d16fef4Smrg# scripts. Take note of the portable wrappers for features provided by
5240d16fef4Smrg# some modern shells, which will fall back to slower equivalents on
5250d16fef4Smrg# less featureful shells.
5260d16fef4Smrg
5270d16fef4Smrg
5280d16fef4Smrg# func_append VAR VALUE
5290d16fef4Smrg# ---------------------
5300d16fef4Smrg# Append VALUE onto the existing contents of VAR.
5310d16fef4Smrg
5320d16fef4Smrg  # We should try to minimise forks, especially on Windows where they are
5330d16fef4Smrg  # unreasonably slow, so skip the feature probes when bash or zsh are
5340d16fef4Smrg  # being used:
5350d16fef4Smrg  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
5360d16fef4Smrg    : ${_G_HAVE_ARITH_OP="yes"}
5370d16fef4Smrg    : ${_G_HAVE_XSI_OPS="yes"}
5380d16fef4Smrg    # The += operator was introduced in bash 3.1
5390d16fef4Smrg    case $BASH_VERSION in
5400d16fef4Smrg      [12].* | 3.0 | 3.0*) ;;
5410d16fef4Smrg      *)
5420d16fef4Smrg        : ${_G_HAVE_PLUSEQ_OP="yes"}
5430d16fef4Smrg        ;;
5440d16fef4Smrg    esac
5450d16fef4Smrg  fi
5460d16fef4Smrg
5470d16fef4Smrg  # _G_HAVE_PLUSEQ_OP
5480d16fef4Smrg  # Can be empty, in which case the shell is probed, "yes" if += is
5490d16fef4Smrg  # useable or anything else if it does not work.
5500d16fef4Smrg  test -z "$_G_HAVE_PLUSEQ_OP" \
5510d16fef4Smrg    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
5520d16fef4Smrg    && _G_HAVE_PLUSEQ_OP=yes
5530d16fef4Smrg
5540d16fef4Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"
5550d16fef4Smrgthen
5560d16fef4Smrg  # This is an XSI compatible shell, allowing a faster implementation...
5570d16fef4Smrg  eval 'func_append ()
5580d16fef4Smrg  {
5590d16fef4Smrg    $debug_cmd
5600d16fef4Smrg
5610d16fef4Smrg    eval "$1+=\$2"
5620d16fef4Smrg  }'
5630d16fef4Smrgelse
5640d16fef4Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
5650d16fef4Smrg  func_append ()
5660d16fef4Smrg  {
5670d16fef4Smrg    $debug_cmd
5680d16fef4Smrg
5690d16fef4Smrg    eval "$1=\$$1\$2"
5700d16fef4Smrg  }
5710d16fef4Smrgfi
5720d16fef4Smrg
5730d16fef4Smrg
5740d16fef4Smrg# func_append_quoted VAR VALUE
5750d16fef4Smrg# ----------------------------
5760d16fef4Smrg# Quote VALUE and append to the end of shell variable VAR, separated
5770d16fef4Smrg# by a space.
5780d16fef4Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then
5790d16fef4Smrg  eval 'func_append_quoted ()
5800d16fef4Smrg  {
5810d16fef4Smrg    $debug_cmd
5820d16fef4Smrg
5830d16fef4Smrg    func_quote_for_eval "$2"
5840d16fef4Smrg    eval "$1+=\\ \$func_quote_for_eval_result"
5850d16fef4Smrg  }'
5860d16fef4Smrgelse
5870d16fef4Smrg  func_append_quoted ()
5880d16fef4Smrg  {
5890d16fef4Smrg    $debug_cmd
5900d16fef4Smrg
5910d16fef4Smrg    func_quote_for_eval "$2"
5920d16fef4Smrg    eval "$1=\$$1\\ \$func_quote_for_eval_result"
5930d16fef4Smrg  }
5940d16fef4Smrgfi
5950d16fef4Smrg
5960d16fef4Smrg
5970d16fef4Smrg# func_append_uniq VAR VALUE
5980d16fef4Smrg# --------------------------
5990d16fef4Smrg# Append unique VALUE onto the existing contents of VAR, assuming
6000d16fef4Smrg# entries are delimited by the first character of VALUE.  For example:
6010d16fef4Smrg#
6020d16fef4Smrg#   func_append_uniq options " --another-option option-argument"
6030d16fef4Smrg#
6040d16fef4Smrg# will only append to $options if " --another-option option-argument "
6050d16fef4Smrg# is not already present somewhere in $options already (note spaces at
6060d16fef4Smrg# each end implied by leading space in second argument).
6070d16fef4Smrgfunc_append_uniq ()
6080d16fef4Smrg{
6090d16fef4Smrg    $debug_cmd
6100d16fef4Smrg
6110d16fef4Smrg    eval _G_current_value='`$ECHO $'$1'`'
6120d16fef4Smrg    _G_delim=`expr "$2" : '\(.\)'`
6130d16fef4Smrg
6140d16fef4Smrg    case $_G_delim$_G_current_value$_G_delim in
6150d16fef4Smrg      *"$2$_G_delim"*) ;;
6160d16fef4Smrg      *) func_append "$@" ;;
6170d16fef4Smrg    esac
6180d16fef4Smrg}
6190d16fef4Smrg
6200d16fef4Smrg
6210d16fef4Smrg# func_arith TERM...
6220d16fef4Smrg# ------------------
6230d16fef4Smrg# Set func_arith_result to the result of evaluating TERMs.
6240d16fef4Smrg  test -z "$_G_HAVE_ARITH_OP" \
6250d16fef4Smrg    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
6260d16fef4Smrg    && _G_HAVE_ARITH_OP=yes
6270d16fef4Smrg
6280d16fef4Smrgif test yes = "$_G_HAVE_ARITH_OP"; then
6290d16fef4Smrg  eval 'func_arith ()
6300d16fef4Smrg  {
6310d16fef4Smrg    $debug_cmd
6320d16fef4Smrg
6330d16fef4Smrg    func_arith_result=$(( $* ))
6340d16fef4Smrg  }'
6350d16fef4Smrgelse
6360d16fef4Smrg  func_arith ()
6370d16fef4Smrg  {
6380d16fef4Smrg    $debug_cmd
6390d16fef4Smrg
6400d16fef4Smrg    func_arith_result=`expr "$@"`
6410d16fef4Smrg  }
6420d16fef4Smrgfi
6430d16fef4Smrg
6440d16fef4Smrg
6450d16fef4Smrg# func_basename FILE
6460d16fef4Smrg# ------------------
6470d16fef4Smrg# Set func_basename_result to FILE with everything up to and including
6480d16fef4Smrg# the last / stripped.
6490d16fef4Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
6500d16fef4Smrg  # If this shell supports suffix pattern removal, then use it to avoid
6510d16fef4Smrg  # forking. Hide the definitions single quotes in case the shell chokes
6520d16fef4Smrg  # on unsupported syntax...
6530d16fef4Smrg  _b='func_basename_result=${1##*/}'
6540d16fef4Smrg  _d='case $1 in
6550d16fef4Smrg        */*) func_dirname_result=${1%/*}$2 ;;
6560d16fef4Smrg        *  ) func_dirname_result=$3        ;;
6570d16fef4Smrg      esac'
6580d16fef4Smrg
6590d16fef4Smrgelse
6600d16fef4Smrg  # ...otherwise fall back to using sed.
6610d16fef4Smrg  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
6620d16fef4Smrg  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
6630d16fef4Smrg      if test "X$func_dirname_result" = "X$1"; then
6640d16fef4Smrg        func_dirname_result=$3
6650d16fef4Smrg      else
6660d16fef4Smrg        func_append func_dirname_result "$2"
6670d16fef4Smrg      fi'
6680d16fef4Smrgfi
6690d16fef4Smrg
6700d16fef4Smrgeval 'func_basename ()
6710d16fef4Smrg{
6720d16fef4Smrg    $debug_cmd
6730d16fef4Smrg
6740d16fef4Smrg    '"$_b"'
6750d16fef4Smrg}'
6760d16fef4Smrg
6770d16fef4Smrg
6780d16fef4Smrg# func_dirname FILE APPEND NONDIR_REPLACEMENT
6790d16fef4Smrg# -------------------------------------------
6800d16fef4Smrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
6810d16fef4Smrg# otherwise set result to NONDIR_REPLACEMENT.
6820d16fef4Smrgeval 'func_dirname ()
6830d16fef4Smrg{
6840d16fef4Smrg    $debug_cmd
6850d16fef4Smrg
6860d16fef4Smrg    '"$_d"'
6870d16fef4Smrg}'
6880d16fef4Smrg
6890d16fef4Smrg
6900d16fef4Smrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
6910d16fef4Smrg# --------------------------------------------------------
6920d16fef4Smrg# Perform func_basename and func_dirname in a single function
6930d16fef4Smrg# call:
6940d16fef4Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
6950d16fef4Smrg#             add APPEND to the result, otherwise set result
6960d16fef4Smrg#             to NONDIR_REPLACEMENT.
6970d16fef4Smrg#             value returned in "$func_dirname_result"
6980d16fef4Smrg#   basename: Compute filename of FILE.
6990d16fef4Smrg#             value retuned in "$func_basename_result"
7000d16fef4Smrg# For efficiency, we do not delegate to the functions above but instead
7010d16fef4Smrg# duplicate the functionality here.
7020d16fef4Smrgeval 'func_dirname_and_basename ()
7030d16fef4Smrg{
7040d16fef4Smrg    $debug_cmd
7050d16fef4Smrg
7060d16fef4Smrg    '"$_b"'
7070d16fef4Smrg    '"$_d"'
7080d16fef4Smrg}'
7090d16fef4Smrg
7100d16fef4Smrg
7110d16fef4Smrg# func_echo ARG...
7120d16fef4Smrg# ----------------
7130d16fef4Smrg# Echo program name prefixed message.
7140d16fef4Smrgfunc_echo ()
7150d16fef4Smrg{
7160d16fef4Smrg    $debug_cmd
7170d16fef4Smrg
7180d16fef4Smrg    _G_message=$*
7190d16fef4Smrg
7200d16fef4Smrg    func_echo_IFS=$IFS
7210d16fef4Smrg    IFS=$nl
7220d16fef4Smrg    for _G_line in $_G_message; do
7230d16fef4Smrg      IFS=$func_echo_IFS
7240d16fef4Smrg      $ECHO "$progname: $_G_line"
7250d16fef4Smrg    done
7260d16fef4Smrg    IFS=$func_echo_IFS
7270d16fef4Smrg}
7280d16fef4Smrg
7290d16fef4Smrg
7300d16fef4Smrg# func_echo_all ARG...
7310d16fef4Smrg# --------------------
7320d16fef4Smrg# Invoke $ECHO with all args, space-separated.
7330d16fef4Smrgfunc_echo_all ()
7340d16fef4Smrg{
7350d16fef4Smrg    $ECHO "$*"
7360d16fef4Smrg}
7370d16fef4Smrg
7380d16fef4Smrg
7390d16fef4Smrg# func_echo_infix_1 INFIX ARG...
7400d16fef4Smrg# ------------------------------
7410d16fef4Smrg# Echo program name, followed by INFIX on the first line, with any
7420d16fef4Smrg# additional lines not showing INFIX.
7430d16fef4Smrgfunc_echo_infix_1 ()
7440d16fef4Smrg{
7450d16fef4Smrg    $debug_cmd
7460d16fef4Smrg
7470d16fef4Smrg    $require_term_colors
7480d16fef4Smrg
7490d16fef4Smrg    _G_infix=$1; shift
7500d16fef4Smrg    _G_indent=$_G_infix
7510d16fef4Smrg    _G_prefix="$progname: $_G_infix: "
7520d16fef4Smrg    _G_message=$*
7530d16fef4Smrg
7540d16fef4Smrg    # Strip color escape sequences before counting printable length
7550d16fef4Smrg    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
7560d16fef4Smrg    do
7570d16fef4Smrg      test -n "$_G_tc" && {
7580d16fef4Smrg        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
7590d16fef4Smrg        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
7600d16fef4Smrg      }
7610d16fef4Smrg    done
7620d16fef4Smrg    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
7630d16fef4Smrg
7640d16fef4Smrg    func_echo_infix_1_IFS=$IFS
7650d16fef4Smrg    IFS=$nl
7660d16fef4Smrg    for _G_line in $_G_message; do
7670d16fef4Smrg      IFS=$func_echo_infix_1_IFS
7680d16fef4Smrg      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
7690d16fef4Smrg      _G_prefix=$_G_indent
7700d16fef4Smrg    done
7710d16fef4Smrg    IFS=$func_echo_infix_1_IFS
7720d16fef4Smrg}
7730d16fef4Smrg
7740d16fef4Smrg
7750d16fef4Smrg# func_error ARG...
7760d16fef4Smrg# -----------------
7770d16fef4Smrg# Echo program name prefixed message to standard error.
7780d16fef4Smrgfunc_error ()
7790d16fef4Smrg{
7800d16fef4Smrg    $debug_cmd
7810d16fef4Smrg
7820d16fef4Smrg    $require_term_colors
7830d16fef4Smrg
7840d16fef4Smrg    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
7850d16fef4Smrg}
7860d16fef4Smrg
7870d16fef4Smrg
7880d16fef4Smrg# func_fatal_error ARG...
7890d16fef4Smrg# -----------------------
7900d16fef4Smrg# Echo program name prefixed message to standard error, and exit.
7910d16fef4Smrgfunc_fatal_error ()
7920d16fef4Smrg{
7930d16fef4Smrg    $debug_cmd
7940d16fef4Smrg
7950d16fef4Smrg    func_error "$*"
7960d16fef4Smrg    exit $EXIT_FAILURE
7970d16fef4Smrg}
7980d16fef4Smrg
7990d16fef4Smrg
8000d16fef4Smrg# func_grep EXPRESSION FILENAME
8010d16fef4Smrg# -----------------------------
802de2362d3Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
803de2362d3Smrgfunc_grep ()
804de2362d3Smrg{
8050d16fef4Smrg    $debug_cmd
8060d16fef4Smrg
807de2362d3Smrg    $GREP "$1" "$2" >/dev/null 2>&1
808de2362d3Smrg}
809de2362d3Smrg
810de2362d3Smrg
8110d16fef4Smrg# func_len STRING
8120d16fef4Smrg# ---------------
8130d16fef4Smrg# Set func_len_result to the length of STRING. STRING may not
8140d16fef4Smrg# start with a hyphen.
8150d16fef4Smrg  test -z "$_G_HAVE_XSI_OPS" \
8160d16fef4Smrg    && (eval 'x=a/b/c;
8170d16fef4Smrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
8180d16fef4Smrg    && _G_HAVE_XSI_OPS=yes
8190d16fef4Smrg
8200d16fef4Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
8210d16fef4Smrg  eval 'func_len ()
8220d16fef4Smrg  {
8230d16fef4Smrg    $debug_cmd
8240d16fef4Smrg
8250d16fef4Smrg    func_len_result=${#1}
8260d16fef4Smrg  }'
8270d16fef4Smrgelse
8280d16fef4Smrg  func_len ()
8290d16fef4Smrg  {
8300d16fef4Smrg    $debug_cmd
8310d16fef4Smrg
8320d16fef4Smrg    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
8330d16fef4Smrg  }
8340d16fef4Smrgfi
8350d16fef4Smrg
8360d16fef4Smrg
8370d16fef4Smrg# func_mkdir_p DIRECTORY-PATH
8380d16fef4Smrg# ---------------------------
839de2362d3Smrg# Make sure the entire path to DIRECTORY-PATH is available.
840de2362d3Smrgfunc_mkdir_p ()
841de2362d3Smrg{
8420d16fef4Smrg    $debug_cmd
8430d16fef4Smrg
8440d16fef4Smrg    _G_directory_path=$1
8450d16fef4Smrg    _G_dir_list=
846de2362d3Smrg
8470d16fef4Smrg    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
848de2362d3Smrg
8490d16fef4Smrg      # Protect directory names starting with '-'
8500d16fef4Smrg      case $_G_directory_path in
8510d16fef4Smrg        -*) _G_directory_path=./$_G_directory_path ;;
852de2362d3Smrg      esac
853de2362d3Smrg
854de2362d3Smrg      # While some portion of DIR does not yet exist...
8550d16fef4Smrg      while test ! -d "$_G_directory_path"; do
856de2362d3Smrg        # ...make a list in topmost first order.  Use a colon delimited
857de2362d3Smrg	# list incase some portion of path contains whitespace.
8580d16fef4Smrg        _G_dir_list=$_G_directory_path:$_G_dir_list
859de2362d3Smrg
860de2362d3Smrg        # If the last portion added has no slash in it, the list is done
8610d16fef4Smrg        case $_G_directory_path in */*) ;; *) break ;; esac
862de2362d3Smrg
863de2362d3Smrg        # ...otherwise throw away the child directory and loop
8640d16fef4Smrg        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
865de2362d3Smrg      done
8660d16fef4Smrg      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
867de2362d3Smrg
8680d16fef4Smrg      func_mkdir_p_IFS=$IFS; IFS=:
8690d16fef4Smrg      for _G_dir in $_G_dir_list; do
8700d16fef4Smrg	IFS=$func_mkdir_p_IFS
8710d16fef4Smrg        # mkdir can fail with a 'File exist' error if two processes
872de2362d3Smrg        # try to create one of the directories concurrently.  Don't
873de2362d3Smrg        # stop in that case!
8740d16fef4Smrg        $MKDIR "$_G_dir" 2>/dev/null || :
875de2362d3Smrg      done
8760d16fef4Smrg      IFS=$func_mkdir_p_IFS
877de2362d3Smrg
878de2362d3Smrg      # Bail out if we (or some other process) failed to create a directory.
8790d16fef4Smrg      test -d "$_G_directory_path" || \
8800d16fef4Smrg        func_fatal_error "Failed to create '$1'"
881de2362d3Smrg    fi
882de2362d3Smrg}
883de2362d3Smrg
884de2362d3Smrg
8850d16fef4Smrg# func_mktempdir [BASENAME]
8860d16fef4Smrg# -------------------------
887de2362d3Smrg# Make a temporary directory that won't clash with other running
888de2362d3Smrg# libtool processes, and avoids race conditions if possible.  If
8890d16fef4Smrg# given, BASENAME is the basename for that directory.
890de2362d3Smrgfunc_mktempdir ()
891de2362d3Smrg{
8920d16fef4Smrg    $debug_cmd
8930d16fef4Smrg
8940d16fef4Smrg    _G_template=${TMPDIR-/tmp}/${1-$progname}
895de2362d3Smrg
8960d16fef4Smrg    if test : = "$opt_dry_run"; then
897de2362d3Smrg      # Return a directory name, but don't create it in dry-run mode
8980d16fef4Smrg      _G_tmpdir=$_G_template-$$
899de2362d3Smrg    else
900de2362d3Smrg
901de2362d3Smrg      # If mktemp works, use that first and foremost
9020d16fef4Smrg      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
903de2362d3Smrg
9040d16fef4Smrg      if test ! -d "$_G_tmpdir"; then
905de2362d3Smrg        # Failing that, at least try and use $RANDOM to avoid a race
9060d16fef4Smrg        _G_tmpdir=$_G_template-${RANDOM-0}$$
907de2362d3Smrg
9080d16fef4Smrg        func_mktempdir_umask=`umask`
909de2362d3Smrg        umask 0077
9100d16fef4Smrg        $MKDIR "$_G_tmpdir"
9110d16fef4Smrg        umask $func_mktempdir_umask
912de2362d3Smrg      fi
913de2362d3Smrg
914de2362d3Smrg      # If we're not in dry-run mode, bomb out on failure
9150d16fef4Smrg      test -d "$_G_tmpdir" || \
9160d16fef4Smrg        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
917de2362d3Smrg    fi
918de2362d3Smrg
9190d16fef4Smrg    $ECHO "$_G_tmpdir"
920de2362d3Smrg}
921de2362d3Smrg
922de2362d3Smrg
9230d16fef4Smrg# func_normal_abspath PATH
9240d16fef4Smrg# ------------------------
9250d16fef4Smrg# Remove doubled-up and trailing slashes, "." path components,
9260d16fef4Smrg# and cancel out any ".." path components in PATH after making
9270d16fef4Smrg# it an absolute path.
9280d16fef4Smrgfunc_normal_abspath ()
929de2362d3Smrg{
9300d16fef4Smrg    $debug_cmd
931de2362d3Smrg
9320d16fef4Smrg    # These SED scripts presuppose an absolute path with a trailing slash.
9330d16fef4Smrg    _G_pathcar='s|^/\([^/]*\).*$|\1|'
9340d16fef4Smrg    _G_pathcdr='s|^/[^/]*||'
9350d16fef4Smrg    _G_removedotparts=':dotsl
9360d16fef4Smrg		s|/\./|/|g
9370d16fef4Smrg		t dotsl
9380d16fef4Smrg		s|/\.$|/|'
9390d16fef4Smrg    _G_collapseslashes='s|/\{1,\}|/|g'
9400d16fef4Smrg    _G_finalslash='s|/*$|/|'
9410d16fef4Smrg
9420d16fef4Smrg    # Start from root dir and reassemble the path.
9430d16fef4Smrg    func_normal_abspath_result=
9440d16fef4Smrg    func_normal_abspath_tpath=$1
9450d16fef4Smrg    func_normal_abspath_altnamespace=
9460d16fef4Smrg    case $func_normal_abspath_tpath in
9470d16fef4Smrg      "")
9480d16fef4Smrg        # Empty path, that just means $cwd.
9490d16fef4Smrg        func_stripname '' '/' "`pwd`"
9500d16fef4Smrg        func_normal_abspath_result=$func_stripname_result
9510d16fef4Smrg        return
9520d16fef4Smrg        ;;
9530d16fef4Smrg      # The next three entries are used to spot a run of precisely
9540d16fef4Smrg      # two leading slashes without using negated character classes;
9550d16fef4Smrg      # we take advantage of case's first-match behaviour.
9560d16fef4Smrg      ///*)
9570d16fef4Smrg        # Unusual form of absolute path, do nothing.
9580d16fef4Smrg        ;;
9590d16fef4Smrg      //*)
9600d16fef4Smrg        # Not necessarily an ordinary path; POSIX reserves leading '//'
9610d16fef4Smrg        # and for example Cygwin uses it to access remote file shares
9620d16fef4Smrg        # over CIFS/SMB, so we conserve a leading double slash if found.
9630d16fef4Smrg        func_normal_abspath_altnamespace=/
9640d16fef4Smrg        ;;
9650d16fef4Smrg      /*)
9660d16fef4Smrg        # Absolute path, do nothing.
967de2362d3Smrg        ;;
968de2362d3Smrg      *)
9690d16fef4Smrg        # Relative path, prepend $cwd.
9700d16fef4Smrg        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
9710d16fef4Smrg        ;;
972de2362d3Smrg    esac
9730d16fef4Smrg
9740d16fef4Smrg    # Cancel out all the simple stuff to save iterations.  We also want
9750d16fef4Smrg    # the path to end with a slash for ease of parsing, so make sure
9760d16fef4Smrg    # there is one (and only one) here.
9770d16fef4Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
9780d16fef4Smrg          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
9790d16fef4Smrg    while :; do
9800d16fef4Smrg      # Processed it all yet?
9810d16fef4Smrg      if test / = "$func_normal_abspath_tpath"; then
9820d16fef4Smrg        # If we ascended to the root using ".." the result may be empty now.
9830d16fef4Smrg        if test -z "$func_normal_abspath_result"; then
9840d16fef4Smrg          func_normal_abspath_result=/
9850d16fef4Smrg        fi
9860d16fef4Smrg        break
9870d16fef4Smrg      fi
9880d16fef4Smrg      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
9890d16fef4Smrg          -e "$_G_pathcar"`
9900d16fef4Smrg      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
9910d16fef4Smrg          -e "$_G_pathcdr"`
9920d16fef4Smrg      # Figure out what to do with it
9930d16fef4Smrg      case $func_normal_abspath_tcomponent in
9940d16fef4Smrg        "")
9950d16fef4Smrg          # Trailing empty path component, ignore it.
9960d16fef4Smrg          ;;
9970d16fef4Smrg        ..)
9980d16fef4Smrg          # Parent dir; strip last assembled component from result.
9990d16fef4Smrg          func_dirname "$func_normal_abspath_result"
10000d16fef4Smrg          func_normal_abspath_result=$func_dirname_result
10010d16fef4Smrg          ;;
10020d16fef4Smrg        *)
10030d16fef4Smrg          # Actual path component, append it.
10040d16fef4Smrg          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
10050d16fef4Smrg          ;;
10060d16fef4Smrg      esac
10070d16fef4Smrg    done
10080d16fef4Smrg    # Restore leading double-slash if one was found on entry.
10090d16fef4Smrg    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
10100d16fef4Smrg}
10110d16fef4Smrg
10120d16fef4Smrg
10130d16fef4Smrg# func_notquiet ARG...
10140d16fef4Smrg# --------------------
10150d16fef4Smrg# Echo program name prefixed message only when not in quiet mode.
10160d16fef4Smrgfunc_notquiet ()
10170d16fef4Smrg{
10180d16fef4Smrg    $debug_cmd
10190d16fef4Smrg
10200d16fef4Smrg    $opt_quiet || func_echo ${1+"$@"}
10210d16fef4Smrg
10220d16fef4Smrg    # A bug in bash halts the script if the last line of a function
10230d16fef4Smrg    # fails when set -e is in force, so we need another command to
10240d16fef4Smrg    # work around that:
10250d16fef4Smrg    :
10260d16fef4Smrg}
10270d16fef4Smrg
10280d16fef4Smrg
10290d16fef4Smrg# func_relative_path SRCDIR DSTDIR
10300d16fef4Smrg# --------------------------------
10310d16fef4Smrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
10320d16fef4Smrgfunc_relative_path ()
10330d16fef4Smrg{
10340d16fef4Smrg    $debug_cmd
10350d16fef4Smrg
10360d16fef4Smrg    func_relative_path_result=
10370d16fef4Smrg    func_normal_abspath "$1"
10380d16fef4Smrg    func_relative_path_tlibdir=$func_normal_abspath_result
10390d16fef4Smrg    func_normal_abspath "$2"
10400d16fef4Smrg    func_relative_path_tbindir=$func_normal_abspath_result
10410d16fef4Smrg
10420d16fef4Smrg    # Ascend the tree starting from libdir
10430d16fef4Smrg    while :; do
10440d16fef4Smrg      # check if we have found a prefix of bindir
10450d16fef4Smrg      case $func_relative_path_tbindir in
10460d16fef4Smrg        $func_relative_path_tlibdir)
10470d16fef4Smrg          # found an exact match
10480d16fef4Smrg          func_relative_path_tcancelled=
10490d16fef4Smrg          break
10500d16fef4Smrg          ;;
10510d16fef4Smrg        $func_relative_path_tlibdir*)
10520d16fef4Smrg          # found a matching prefix
10530d16fef4Smrg          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
10540d16fef4Smrg          func_relative_path_tcancelled=$func_stripname_result
10550d16fef4Smrg          if test -z "$func_relative_path_result"; then
10560d16fef4Smrg            func_relative_path_result=.
10570d16fef4Smrg          fi
10580d16fef4Smrg          break
10590d16fef4Smrg          ;;
10600d16fef4Smrg        *)
10610d16fef4Smrg          func_dirname $func_relative_path_tlibdir
10620d16fef4Smrg          func_relative_path_tlibdir=$func_dirname_result
10630d16fef4Smrg          if test -z "$func_relative_path_tlibdir"; then
10640d16fef4Smrg            # Have to descend all the way to the root!
10650d16fef4Smrg            func_relative_path_result=../$func_relative_path_result
10660d16fef4Smrg            func_relative_path_tcancelled=$func_relative_path_tbindir
10670d16fef4Smrg            break
10680d16fef4Smrg          fi
10690d16fef4Smrg          func_relative_path_result=../$func_relative_path_result
10700d16fef4Smrg          ;;
10710d16fef4Smrg      esac
10720d16fef4Smrg    done
10730d16fef4Smrg
10740d16fef4Smrg    # Now calculate path; take care to avoid doubling-up slashes.
10750d16fef4Smrg    func_stripname '' '/' "$func_relative_path_result"
10760d16fef4Smrg    func_relative_path_result=$func_stripname_result
10770d16fef4Smrg    func_stripname '/' '/' "$func_relative_path_tcancelled"
10780d16fef4Smrg    if test -n "$func_stripname_result"; then
10790d16fef4Smrg      func_append func_relative_path_result "/$func_stripname_result"
10800d16fef4Smrg    fi
10810d16fef4Smrg
10820d16fef4Smrg    # Normalisation. If bindir is libdir, return '.' else relative path.
10830d16fef4Smrg    if test -n "$func_relative_path_result"; then
10840d16fef4Smrg      func_stripname './' '' "$func_relative_path_result"
10850d16fef4Smrg      func_relative_path_result=$func_stripname_result
10860d16fef4Smrg    fi
10870d16fef4Smrg
10880d16fef4Smrg    test -n "$func_relative_path_result" || func_relative_path_result=.
10890d16fef4Smrg
10900d16fef4Smrg    :
1091de2362d3Smrg}
1092de2362d3Smrg
1093de2362d3Smrg
10940d16fef4Smrg# func_quote_for_eval ARG...
10950d16fef4Smrg# --------------------------
10960d16fef4Smrg# Aesthetically quote ARGs to be evaled later.
10970d16fef4Smrg# This function returns two values:
10980d16fef4Smrg#   i) func_quote_for_eval_result
10990d16fef4Smrg#      double-quoted, suitable for a subsequent eval
11000d16fef4Smrg#  ii) func_quote_for_eval_unquoted_result
11010d16fef4Smrg#      has all characters that are still active within double
11020d16fef4Smrg#      quotes backslashified.
11030d16fef4Smrgfunc_quote_for_eval ()
11040d16fef4Smrg{
11050d16fef4Smrg    $debug_cmd
11060d16fef4Smrg
11070d16fef4Smrg    func_quote_for_eval_unquoted_result=
11080d16fef4Smrg    func_quote_for_eval_result=
11090d16fef4Smrg    while test 0 -lt $#; do
11100d16fef4Smrg      case $1 in
11110d16fef4Smrg        *[\\\`\"\$]*)
11120d16fef4Smrg	  _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
11130d16fef4Smrg        *)
11140d16fef4Smrg          _G_unquoted_arg=$1 ;;
11150d16fef4Smrg      esac
11160d16fef4Smrg      if test -n "$func_quote_for_eval_unquoted_result"; then
11170d16fef4Smrg	func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
11180d16fef4Smrg      else
11190d16fef4Smrg        func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
11200d16fef4Smrg      fi
11210d16fef4Smrg
11220d16fef4Smrg      case $_G_unquoted_arg in
11230d16fef4Smrg        # Double-quote args containing shell metacharacters to delay
11240d16fef4Smrg        # word splitting, command substitution and variable expansion
11250d16fef4Smrg        # for a subsequent eval.
11260d16fef4Smrg        # Many Bourne shells cannot handle close brackets correctly
11270d16fef4Smrg        # in scan sets, so we specify it separately.
11280d16fef4Smrg        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
11290d16fef4Smrg          _G_quoted_arg=\"$_G_unquoted_arg\"
11300d16fef4Smrg          ;;
11310d16fef4Smrg        *)
11320d16fef4Smrg          _G_quoted_arg=$_G_unquoted_arg
11330d16fef4Smrg	  ;;
11340d16fef4Smrg      esac
11350d16fef4Smrg
11360d16fef4Smrg      if test -n "$func_quote_for_eval_result"; then
11370d16fef4Smrg	func_append func_quote_for_eval_result " $_G_quoted_arg"
11380d16fef4Smrg      else
11390d16fef4Smrg        func_append func_quote_for_eval_result "$_G_quoted_arg"
11400d16fef4Smrg      fi
11410d16fef4Smrg      shift
11420d16fef4Smrg    done
11430d16fef4Smrg}
11440d16fef4Smrg
11450d16fef4Smrg
11460d16fef4Smrg# func_quote_for_expand ARG
11470d16fef4Smrg# -------------------------
1148de2362d3Smrg# Aesthetically quote ARG to be evaled later; same as above,
1149de2362d3Smrg# but do not quote variable references.
1150de2362d3Smrgfunc_quote_for_expand ()
1151de2362d3Smrg{
11520d16fef4Smrg    $debug_cmd
11530d16fef4Smrg
1154de2362d3Smrg    case $1 in
1155de2362d3Smrg      *[\\\`\"]*)
11560d16fef4Smrg	_G_arg=`$ECHO "$1" | $SED \
11570d16fef4Smrg	    -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
1158de2362d3Smrg      *)
11590d16fef4Smrg        _G_arg=$1 ;;
1160de2362d3Smrg    esac
1161de2362d3Smrg
11620d16fef4Smrg    case $_G_arg in
1163de2362d3Smrg      # Double-quote args containing shell metacharacters to delay
1164de2362d3Smrg      # word splitting and command substitution for a subsequent eval.
1165de2362d3Smrg      # Many Bourne shells cannot handle close brackets correctly
1166de2362d3Smrg      # in scan sets, so we specify it separately.
1167de2362d3Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
11680d16fef4Smrg        _G_arg=\"$_G_arg\"
1169de2362d3Smrg        ;;
1170de2362d3Smrg    esac
1171de2362d3Smrg
11720d16fef4Smrg    func_quote_for_expand_result=$_G_arg
11730d16fef4Smrg}
11740d16fef4Smrg
11750d16fef4Smrg
11760d16fef4Smrg# func_stripname PREFIX SUFFIX NAME
11770d16fef4Smrg# ---------------------------------
11780d16fef4Smrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
11790d16fef4Smrg# PREFIX and SUFFIX must not contain globbing or regex special
11800d16fef4Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading
11810d16fef4Smrg# dot (in which case that matches only a dot).
11820d16fef4Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
11830d16fef4Smrg  eval 'func_stripname ()
11840d16fef4Smrg  {
11850d16fef4Smrg    $debug_cmd
11860d16fef4Smrg
11870d16fef4Smrg    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
11880d16fef4Smrg    # positional parameters, so assign one to ordinary variable first.
11890d16fef4Smrg    func_stripname_result=$3
11900d16fef4Smrg    func_stripname_result=${func_stripname_result#"$1"}
11910d16fef4Smrg    func_stripname_result=${func_stripname_result%"$2"}
11920d16fef4Smrg  }'
11930d16fef4Smrgelse
11940d16fef4Smrg  func_stripname ()
11950d16fef4Smrg  {
11960d16fef4Smrg    $debug_cmd
11970d16fef4Smrg
11980d16fef4Smrg    case $2 in
11990d16fef4Smrg      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
12000d16fef4Smrg      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
12010d16fef4Smrg    esac
12020d16fef4Smrg  }
12030d16fef4Smrgfi
12040d16fef4Smrg
12050d16fef4Smrg
12060d16fef4Smrg# func_show_eval CMD [FAIL_EXP]
12070d16fef4Smrg# -----------------------------
12080d16fef4Smrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
12090d16fef4Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
12100d16fef4Smrg# is given, then evaluate it.
12110d16fef4Smrgfunc_show_eval ()
12120d16fef4Smrg{
12130d16fef4Smrg    $debug_cmd
12140d16fef4Smrg
12150d16fef4Smrg    _G_cmd=$1
12160d16fef4Smrg    _G_fail_exp=${2-':'}
12170d16fef4Smrg
12180d16fef4Smrg    func_quote_for_expand "$_G_cmd"
12190d16fef4Smrg    eval "func_notquiet $func_quote_for_expand_result"
12200d16fef4Smrg
12210d16fef4Smrg    $opt_dry_run || {
12220d16fef4Smrg      eval "$_G_cmd"
12230d16fef4Smrg      _G_status=$?
12240d16fef4Smrg      if test 0 -ne "$_G_status"; then
12250d16fef4Smrg	eval "(exit $_G_status); $_G_fail_exp"
12260d16fef4Smrg      fi
12270d16fef4Smrg    }
12280d16fef4Smrg}
12290d16fef4Smrg
12300d16fef4Smrg
12310d16fef4Smrg# func_show_eval_locale CMD [FAIL_EXP]
12320d16fef4Smrg# ------------------------------------
12330d16fef4Smrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
12340d16fef4Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
12350d16fef4Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
12360d16fef4Smrgfunc_show_eval_locale ()
12370d16fef4Smrg{
12380d16fef4Smrg    $debug_cmd
12390d16fef4Smrg
12400d16fef4Smrg    _G_cmd=$1
12410d16fef4Smrg    _G_fail_exp=${2-':'}
12420d16fef4Smrg
12430d16fef4Smrg    $opt_quiet || {
12440d16fef4Smrg      func_quote_for_expand "$_G_cmd"
12450d16fef4Smrg      eval "func_echo $func_quote_for_expand_result"
12460d16fef4Smrg    }
12470d16fef4Smrg
12480d16fef4Smrg    $opt_dry_run || {
12490d16fef4Smrg      eval "$_G_user_locale
12500d16fef4Smrg	    $_G_cmd"
12510d16fef4Smrg      _G_status=$?
12520d16fef4Smrg      eval "$_G_safe_locale"
12530d16fef4Smrg      if test 0 -ne "$_G_status"; then
12540d16fef4Smrg	eval "(exit $_G_status); $_G_fail_exp"
12550d16fef4Smrg      fi
12560d16fef4Smrg    }
12570d16fef4Smrg}
12580d16fef4Smrg
12590d16fef4Smrg
12600d16fef4Smrg# func_tr_sh
12610d16fef4Smrg# ----------
12620d16fef4Smrg# Turn $1 into a string suitable for a shell variable name.
12630d16fef4Smrg# Result is stored in $func_tr_sh_result.  All characters
12640d16fef4Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
12650d16fef4Smrg# if $1 begins with a digit, a '_' is prepended as well.
12660d16fef4Smrgfunc_tr_sh ()
12670d16fef4Smrg{
12680d16fef4Smrg    $debug_cmd
12690d16fef4Smrg
12700d16fef4Smrg    case $1 in
12710d16fef4Smrg    [0-9]* | *[!a-zA-Z0-9_]*)
12720d16fef4Smrg      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
12730d16fef4Smrg      ;;
12740d16fef4Smrg    * )
12750d16fef4Smrg      func_tr_sh_result=$1
12760d16fef4Smrg      ;;
12770d16fef4Smrg    esac
12780d16fef4Smrg}
12790d16fef4Smrg
12800d16fef4Smrg
12810d16fef4Smrg# func_verbose ARG...
12820d16fef4Smrg# -------------------
12830d16fef4Smrg# Echo program name prefixed message in verbose mode only.
12840d16fef4Smrgfunc_verbose ()
12850d16fef4Smrg{
12860d16fef4Smrg    $debug_cmd
12870d16fef4Smrg
12880d16fef4Smrg    $opt_verbose && func_echo "$*"
12890d16fef4Smrg
12900d16fef4Smrg    :
12910d16fef4Smrg}
12920d16fef4Smrg
12930d16fef4Smrg
12940d16fef4Smrg# func_warn_and_continue ARG...
12950d16fef4Smrg# -----------------------------
12960d16fef4Smrg# Echo program name prefixed warning message to standard error.
12970d16fef4Smrgfunc_warn_and_continue ()
12980d16fef4Smrg{
12990d16fef4Smrg    $debug_cmd
13000d16fef4Smrg
13010d16fef4Smrg    $require_term_colors
13020d16fef4Smrg
13030d16fef4Smrg    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
13040d16fef4Smrg}
13050d16fef4Smrg
13060d16fef4Smrg
13070d16fef4Smrg# func_warning CATEGORY ARG...
13080d16fef4Smrg# ----------------------------
13090d16fef4Smrg# Echo program name prefixed warning message to standard error. Warning
13100d16fef4Smrg# messages can be filtered according to CATEGORY, where this function
13110d16fef4Smrg# elides messages where CATEGORY is not listed in the global variable
13120d16fef4Smrg# 'opt_warning_types'.
13130d16fef4Smrgfunc_warning ()
13140d16fef4Smrg{
13150d16fef4Smrg    $debug_cmd
13160d16fef4Smrg
13170d16fef4Smrg    # CATEGORY must be in the warning_categories list!
13180d16fef4Smrg    case " $warning_categories " in
13190d16fef4Smrg      *" $1 "*) ;;
13200d16fef4Smrg      *) func_internal_error "invalid warning category '$1'" ;;
13210d16fef4Smrg    esac
13220d16fef4Smrg
13230d16fef4Smrg    _G_category=$1
13240d16fef4Smrg    shift
13250d16fef4Smrg
13260d16fef4Smrg    case " $opt_warning_types " in
13270d16fef4Smrg      *" $_G_category "*) $warning_func ${1+"$@"} ;;
13280d16fef4Smrg    esac
1329de2362d3Smrg}
1330de2362d3Smrg
1331de2362d3Smrg
13320d16fef4Smrg# func_sort_ver VER1 VER2
13330d16fef4Smrg# -----------------------
13340d16fef4Smrg# 'sort -V' is not generally available.
13350d16fef4Smrg# Note this deviates from the version comparison in automake
13360d16fef4Smrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
13370d16fef4Smrg# but this should suffice as we won't be specifying old
13380d16fef4Smrg# version formats or redundant trailing .0 in bootstrap.conf.
13390d16fef4Smrg# If we did want full compatibility then we should probably
13400d16fef4Smrg# use m4_version_compare from autoconf.
13410d16fef4Smrgfunc_sort_ver ()
13420d16fef4Smrg{
13430d16fef4Smrg    $debug_cmd
13440d16fef4Smrg
13450d16fef4Smrg    printf '%s\n%s\n' "$1" "$2" \
13460d16fef4Smrg      | 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
13470d16fef4Smrg}
13480d16fef4Smrg
13490d16fef4Smrg# func_lt_ver PREV CURR
13500d16fef4Smrg# ---------------------
13510d16fef4Smrg# Return true if PREV and CURR are in the correct order according to
13520d16fef4Smrg# func_sort_ver, otherwise false.  Use it like this:
13530d16fef4Smrg#
13540d16fef4Smrg#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
13550d16fef4Smrgfunc_lt_ver ()
13560d16fef4Smrg{
13570d16fef4Smrg    $debug_cmd
13580d16fef4Smrg
13590d16fef4Smrg    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
13600d16fef4Smrg}
13610d16fef4Smrg
13620d16fef4Smrg
13630d16fef4Smrg# Local variables:
13640d16fef4Smrg# mode: shell-script
13650d16fef4Smrg# sh-indentation: 2
13660d16fef4Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
13670d16fef4Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
13680d16fef4Smrg# time-stamp-time-zone: "UTC"
13690d16fef4Smrg# End:
13700d16fef4Smrg#! /bin/sh
13710d16fef4Smrg
13720d16fef4Smrg# Set a version string for this script.
13730d16fef4Smrgscriptversion=2014-01-07.03; # UTC
13740d16fef4Smrg
13750d16fef4Smrg# A portable, pluggable option parser for Bourne shell.
13760d16fef4Smrg# Written by Gary V. Vaughan, 2010
13770d16fef4Smrg
13780d16fef4Smrg# Copyright (C) 2010-2015 Free Software Foundation, Inc.
13790d16fef4Smrg# This is free software; see the source for copying conditions.  There is NO
13800d16fef4Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13810d16fef4Smrg
13820d16fef4Smrg# This program is free software: you can redistribute it and/or modify
13830d16fef4Smrg# it under the terms of the GNU General Public License as published by
13840d16fef4Smrg# the Free Software Foundation, either version 3 of the License, or
13850d16fef4Smrg# (at your option) any later version.
13860d16fef4Smrg
13870d16fef4Smrg# This program is distributed in the hope that it will be useful,
13880d16fef4Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
13890d16fef4Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13900d16fef4Smrg# GNU General Public License for more details.
13910d16fef4Smrg
13920d16fef4Smrg# You should have received a copy of the GNU General Public License
13930d16fef4Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
13940d16fef4Smrg
13950d16fef4Smrg# Please report bugs or propose patches to gary@gnu.org.
13960d16fef4Smrg
13970d16fef4Smrg
13980d16fef4Smrg## ------ ##
13990d16fef4Smrg## Usage. ##
14000d16fef4Smrg## ------ ##
14010d16fef4Smrg
14020d16fef4Smrg# This file is a library for parsing options in your shell scripts along
14030d16fef4Smrg# with assorted other useful supporting features that you can make use
14040d16fef4Smrg# of too.
14050d16fef4Smrg#
14060d16fef4Smrg# For the simplest scripts you might need only:
14070d16fef4Smrg#
14080d16fef4Smrg#   #!/bin/sh
14090d16fef4Smrg#   . relative/path/to/funclib.sh
14100d16fef4Smrg#   . relative/path/to/options-parser
14110d16fef4Smrg#   scriptversion=1.0
14120d16fef4Smrg#   func_options ${1+"$@"}
14130d16fef4Smrg#   eval set dummy "$func_options_result"; shift
14140d16fef4Smrg#   ...rest of your script...
14150d16fef4Smrg#
14160d16fef4Smrg# In order for the '--version' option to work, you will need to have a
14170d16fef4Smrg# suitably formatted comment like the one at the top of this file
14180d16fef4Smrg# starting with '# Written by ' and ending with '# warranty; '.
14190d16fef4Smrg#
14200d16fef4Smrg# For '-h' and '--help' to work, you will also need a one line
14210d16fef4Smrg# description of your script's purpose in a comment directly above the
14220d16fef4Smrg# '# Written by ' line, like the one at the top of this file.
14230d16fef4Smrg#
14240d16fef4Smrg# The default options also support '--debug', which will turn on shell
14250d16fef4Smrg# execution tracing (see the comment above debug_cmd below for another
14260d16fef4Smrg# use), and '--verbose' and the func_verbose function to allow your script
14270d16fef4Smrg# to display verbose messages only when your user has specified
14280d16fef4Smrg# '--verbose'.
14290d16fef4Smrg#
14300d16fef4Smrg# After sourcing this file, you can plug processing for additional
14310d16fef4Smrg# options by amending the variables from the 'Configuration' section
14320d16fef4Smrg# below, and following the instructions in the 'Option parsing'
14330d16fef4Smrg# section further down.
14340d16fef4Smrg
14350d16fef4Smrg## -------------- ##
14360d16fef4Smrg## Configuration. ##
14370d16fef4Smrg## -------------- ##
14380d16fef4Smrg
14390d16fef4Smrg# You should override these variables in your script after sourcing this
14400d16fef4Smrg# file so that they reflect the customisations you have added to the
14410d16fef4Smrg# option parser.
14420d16fef4Smrg
14430d16fef4Smrg# The usage line for option parsing errors and the start of '-h' and
14440d16fef4Smrg# '--help' output messages. You can embed shell variables for delayed
14450d16fef4Smrg# expansion at the time the message is displayed, but you will need to
14460d16fef4Smrg# quote other shell meta-characters carefully to prevent them being
14470d16fef4Smrg# expanded when the contents are evaled.
14480d16fef4Smrgusage='$progpath [OPTION]...'
14490d16fef4Smrg
14500d16fef4Smrg# Short help message in response to '-h' and '--help'.  Add to this or
14510d16fef4Smrg# override it after sourcing this library to reflect the full set of
14520d16fef4Smrg# options your script accepts.
14530d16fef4Smrgusage_message="\
14540d16fef4Smrg       --debug        enable verbose shell tracing
14550d16fef4Smrg   -W, --warnings=CATEGORY
14560d16fef4Smrg                      report the warnings falling in CATEGORY [all]
14570d16fef4Smrg   -v, --verbose      verbosely report processing
14580d16fef4Smrg       --version      print version information and exit
14590d16fef4Smrg   -h, --help         print short or long help message and exit
14600d16fef4Smrg"
14610d16fef4Smrg
14620d16fef4Smrg# Additional text appended to 'usage_message' in response to '--help'.
14630d16fef4Smrglong_help_message="
14640d16fef4SmrgWarning categories include:
14650d16fef4Smrg       'all'          show all warnings
14660d16fef4Smrg       'none'         turn off all the warnings
14670d16fef4Smrg       'error'        warnings are treated as fatal errors"
14680d16fef4Smrg
14690d16fef4Smrg# Help message printed before fatal option parsing errors.
14700d16fef4Smrgfatal_help="Try '\$progname --help' for more information."
14710d16fef4Smrg
14720d16fef4Smrg
14730d16fef4Smrg
14740d16fef4Smrg## ------------------------- ##
14750d16fef4Smrg## Hook function management. ##
14760d16fef4Smrg## ------------------------- ##
14770d16fef4Smrg
14780d16fef4Smrg# This section contains functions for adding, removing, and running hooks
14790d16fef4Smrg# to the main code.  A hook is just a named list of of function, that can
14800d16fef4Smrg# be run in order later on.
14810d16fef4Smrg
14820d16fef4Smrg# func_hookable FUNC_NAME
14830d16fef4Smrg# -----------------------
14840d16fef4Smrg# Declare that FUNC_NAME will run hooks added with
14850d16fef4Smrg# 'func_add_hook FUNC_NAME ...'.
14860d16fef4Smrgfunc_hookable ()
14870d16fef4Smrg{
14880d16fef4Smrg    $debug_cmd
14890d16fef4Smrg
14900d16fef4Smrg    func_append hookable_fns " $1"
14910d16fef4Smrg}
14920d16fef4Smrg
14930d16fef4Smrg
14940d16fef4Smrg# func_add_hook FUNC_NAME HOOK_FUNC
14950d16fef4Smrg# ---------------------------------
14960d16fef4Smrg# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
14970d16fef4Smrg# first have been declared "hookable" by a call to 'func_hookable'.
14980d16fef4Smrgfunc_add_hook ()
14990d16fef4Smrg{
15000d16fef4Smrg    $debug_cmd
15010d16fef4Smrg
15020d16fef4Smrg    case " $hookable_fns " in
15030d16fef4Smrg      *" $1 "*) ;;
15040d16fef4Smrg      *) func_fatal_error "'$1' does not accept hook functions." ;;
15050d16fef4Smrg    esac
15060d16fef4Smrg
15070d16fef4Smrg    eval func_append ${1}_hooks '" $2"'
15080d16fef4Smrg}
15090d16fef4Smrg
15100d16fef4Smrg
15110d16fef4Smrg# func_remove_hook FUNC_NAME HOOK_FUNC
15120d16fef4Smrg# ------------------------------------
15130d16fef4Smrg# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
15140d16fef4Smrgfunc_remove_hook ()
15150d16fef4Smrg{
15160d16fef4Smrg    $debug_cmd
15170d16fef4Smrg
15180d16fef4Smrg    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
15190d16fef4Smrg}
15200d16fef4Smrg
15210d16fef4Smrg
15220d16fef4Smrg# func_run_hooks FUNC_NAME [ARG]...
15230d16fef4Smrg# ---------------------------------
15240d16fef4Smrg# Run all hook functions registered to FUNC_NAME.
15250d16fef4Smrg# It is assumed that the list of hook functions contains nothing more
15260d16fef4Smrg# than a whitespace-delimited list of legal shell function names, and
15270d16fef4Smrg# no effort is wasted trying to catch shell meta-characters or preserve
15280d16fef4Smrg# whitespace.
15290d16fef4Smrgfunc_run_hooks ()
15300d16fef4Smrg{
15310d16fef4Smrg    $debug_cmd
15320d16fef4Smrg
15330d16fef4Smrg    case " $hookable_fns " in
15340d16fef4Smrg      *" $1 "*) ;;
15350d16fef4Smrg      *) func_fatal_error "'$1' does not support hook funcions.n" ;;
15360d16fef4Smrg    esac
15370d16fef4Smrg
15380d16fef4Smrg    eval _G_hook_fns=\$$1_hooks; shift
15390d16fef4Smrg
15400d16fef4Smrg    for _G_hook in $_G_hook_fns; do
15410d16fef4Smrg      eval $_G_hook '"$@"'
15420d16fef4Smrg
15430d16fef4Smrg      # store returned options list back into positional
15440d16fef4Smrg      # parameters for next 'cmd' execution.
15450d16fef4Smrg      eval _G_hook_result=\$${_G_hook}_result
15460d16fef4Smrg      eval set dummy "$_G_hook_result"; shift
15470d16fef4Smrg    done
15480d16fef4Smrg
15490d16fef4Smrg    func_quote_for_eval ${1+"$@"}
15500d16fef4Smrg    func_run_hooks_result=$func_quote_for_eval_result
15510d16fef4Smrg}
15520d16fef4Smrg
15530d16fef4Smrg
15540d16fef4Smrg
15550d16fef4Smrg## --------------- ##
15560d16fef4Smrg## Option parsing. ##
15570d16fef4Smrg## --------------- ##
15580d16fef4Smrg
15590d16fef4Smrg# In order to add your own option parsing hooks, you must accept the
15600d16fef4Smrg# full positional parameter list in your hook function, remove any
15610d16fef4Smrg# options that you action, and then pass back the remaining unprocessed
15620d16fef4Smrg# options in '<hooked_function_name>_result', escaped suitably for
15630d16fef4Smrg# 'eval'.  Like this:
15640d16fef4Smrg#
15650d16fef4Smrg#    my_options_prep ()
15660d16fef4Smrg#    {
15670d16fef4Smrg#        $debug_cmd
15680d16fef4Smrg#
15690d16fef4Smrg#        # Extend the existing usage message.
15700d16fef4Smrg#        usage_message=$usage_message'
15710d16fef4Smrg#      -s, --silent       don'\''t print informational messages
15720d16fef4Smrg#    '
15730d16fef4Smrg#
15740d16fef4Smrg#        func_quote_for_eval ${1+"$@"}
15750d16fef4Smrg#        my_options_prep_result=$func_quote_for_eval_result
15760d16fef4Smrg#    }
15770d16fef4Smrg#    func_add_hook func_options_prep my_options_prep
15780d16fef4Smrg#
15790d16fef4Smrg#
15800d16fef4Smrg#    my_silent_option ()
15810d16fef4Smrg#    {
15820d16fef4Smrg#        $debug_cmd
15830d16fef4Smrg#
15840d16fef4Smrg#        # Note that for efficiency, we parse as many options as we can
15850d16fef4Smrg#        # recognise in a loop before passing the remainder back to the
15860d16fef4Smrg#        # caller on the first unrecognised argument we encounter.
15870d16fef4Smrg#        while test $# -gt 0; do
15880d16fef4Smrg#          opt=$1; shift
15890d16fef4Smrg#          case $opt in
15900d16fef4Smrg#            --silent|-s) opt_silent=: ;;
15910d16fef4Smrg#            # Separate non-argument short options:
15920d16fef4Smrg#            -s*)         func_split_short_opt "$_G_opt"
15930d16fef4Smrg#                         set dummy "$func_split_short_opt_name" \
15940d16fef4Smrg#                             "-$func_split_short_opt_arg" ${1+"$@"}
15950d16fef4Smrg#                         shift
15960d16fef4Smrg#                         ;;
15970d16fef4Smrg#            *)            set dummy "$_G_opt" "$*"; shift; break ;;
15980d16fef4Smrg#          esac
15990d16fef4Smrg#        done
16000d16fef4Smrg#
16010d16fef4Smrg#        func_quote_for_eval ${1+"$@"}
16020d16fef4Smrg#        my_silent_option_result=$func_quote_for_eval_result
16030d16fef4Smrg#    }
16040d16fef4Smrg#    func_add_hook func_parse_options my_silent_option
16050d16fef4Smrg#
16060d16fef4Smrg#
16070d16fef4Smrg#    my_option_validation ()
16080d16fef4Smrg#    {
16090d16fef4Smrg#        $debug_cmd
16100d16fef4Smrg#
16110d16fef4Smrg#        $opt_silent && $opt_verbose && func_fatal_help "\
16120d16fef4Smrg#    '--silent' and '--verbose' options are mutually exclusive."
16130d16fef4Smrg#
16140d16fef4Smrg#        func_quote_for_eval ${1+"$@"}
16150d16fef4Smrg#        my_option_validation_result=$func_quote_for_eval_result
16160d16fef4Smrg#    }
16170d16fef4Smrg#    func_add_hook func_validate_options my_option_validation
16180d16fef4Smrg#
16190d16fef4Smrg# You'll alse need to manually amend $usage_message to reflect the extra
16200d16fef4Smrg# options you parse.  It's preferable to append if you can, so that
16210d16fef4Smrg# multiple option parsing hooks can be added safely.
16220d16fef4Smrg
16230d16fef4Smrg
16240d16fef4Smrg# func_options [ARG]...
16250d16fef4Smrg# ---------------------
16260d16fef4Smrg# All the functions called inside func_options are hookable. See the
16270d16fef4Smrg# individual implementations for details.
16280d16fef4Smrgfunc_hookable func_options
16290d16fef4Smrgfunc_options ()
1630de2362d3Smrg{
16310d16fef4Smrg    $debug_cmd
1632de2362d3Smrg
16330d16fef4Smrg    func_options_prep ${1+"$@"}
16340d16fef4Smrg    eval func_parse_options \
16350d16fef4Smrg        ${func_options_prep_result+"$func_options_prep_result"}
16360d16fef4Smrg    eval func_validate_options \
16370d16fef4Smrg        ${func_parse_options_result+"$func_parse_options_result"}
1638de2362d3Smrg
16390d16fef4Smrg    eval func_run_hooks func_options \
16400d16fef4Smrg        ${func_validate_options_result+"$func_validate_options_result"}
16410d16fef4Smrg
16420d16fef4Smrg    # save modified positional parameters for caller
16430d16fef4Smrg    func_options_result=$func_run_hooks_result
1644de2362d3Smrg}
1645de2362d3Smrg
1646de2362d3Smrg
16470d16fef4Smrg# func_options_prep [ARG]...
16480d16fef4Smrg# --------------------------
16490d16fef4Smrg# All initialisations required before starting the option parse loop.
16500d16fef4Smrg# Note that when calling hook functions, we pass through the list of
16510d16fef4Smrg# positional parameters.  If a hook function modifies that list, and
16520d16fef4Smrg# needs to propogate that back to rest of this script, then the complete
16530d16fef4Smrg# modified list must be put in 'func_run_hooks_result' before
16540d16fef4Smrg# returning.
16550d16fef4Smrgfunc_hookable func_options_prep
16560d16fef4Smrgfunc_options_prep ()
1657de2362d3Smrg{
16580d16fef4Smrg    $debug_cmd
1659de2362d3Smrg
16600d16fef4Smrg    # Option defaults:
16610d16fef4Smrg    opt_verbose=false
16620d16fef4Smrg    opt_warning_types=
1663de2362d3Smrg
16640d16fef4Smrg    func_run_hooks func_options_prep ${1+"$@"}
16650d16fef4Smrg
16660d16fef4Smrg    # save modified positional parameters for caller
16670d16fef4Smrg    func_options_prep_result=$func_run_hooks_result
1668de2362d3Smrg}
1669de2362d3Smrg
16700d16fef4Smrg
16710d16fef4Smrg# func_parse_options [ARG]...
16720d16fef4Smrg# ---------------------------
16730d16fef4Smrg# The main option parsing loop.
16740d16fef4Smrgfunc_hookable func_parse_options
16750d16fef4Smrgfunc_parse_options ()
1676de2362d3Smrg{
16770d16fef4Smrg    $debug_cmd
16780d16fef4Smrg
16790d16fef4Smrg    func_parse_options_result=
16800d16fef4Smrg
16810d16fef4Smrg    # this just eases exit handling
16820d16fef4Smrg    while test $# -gt 0; do
16830d16fef4Smrg      # Defer to hook functions for initial option parsing, so they
16840d16fef4Smrg      # get priority in the event of reusing an option name.
16850d16fef4Smrg      func_run_hooks func_parse_options ${1+"$@"}
16860d16fef4Smrg
16870d16fef4Smrg      # Adjust func_parse_options positional parameters to match
16880d16fef4Smrg      eval set dummy "$func_run_hooks_result"; shift
16890d16fef4Smrg
16900d16fef4Smrg      # Break out of the loop if we already parsed every option.
16910d16fef4Smrg      test $# -gt 0 || break
16920d16fef4Smrg
16930d16fef4Smrg      _G_opt=$1
16940d16fef4Smrg      shift
16950d16fef4Smrg      case $_G_opt in
16960d16fef4Smrg        --debug|-x)   debug_cmd='set -x'
16970d16fef4Smrg                      func_echo "enabling shell trace mode"
16980d16fef4Smrg                      $debug_cmd
16990d16fef4Smrg                      ;;
17000d16fef4Smrg
17010d16fef4Smrg        --no-warnings|--no-warning|--no-warn)
17020d16fef4Smrg                      set dummy --warnings none ${1+"$@"}
17030d16fef4Smrg                      shift
17040d16fef4Smrg		      ;;
17050d16fef4Smrg
17060d16fef4Smrg        --warnings|--warning|-W)
17070d16fef4Smrg                      test $# = 0 && func_missing_arg $_G_opt && break
17080d16fef4Smrg                      case " $warning_categories $1" in
17090d16fef4Smrg                        *" $1 "*)
17100d16fef4Smrg                          # trailing space prevents matching last $1 above
17110d16fef4Smrg                          func_append_uniq opt_warning_types " $1"
17120d16fef4Smrg                          ;;
17130d16fef4Smrg                        *all)
17140d16fef4Smrg                          opt_warning_types=$warning_categories
17150d16fef4Smrg                          ;;
17160d16fef4Smrg                        *none)
17170d16fef4Smrg                          opt_warning_types=none
17180d16fef4Smrg                          warning_func=:
17190d16fef4Smrg                          ;;
17200d16fef4Smrg                        *error)
17210d16fef4Smrg                          opt_warning_types=$warning_categories
17220d16fef4Smrg                          warning_func=func_fatal_error
17230d16fef4Smrg                          ;;
17240d16fef4Smrg                        *)
17250d16fef4Smrg                          func_fatal_error \
17260d16fef4Smrg                             "unsupported warning category: '$1'"
17270d16fef4Smrg                          ;;
17280d16fef4Smrg                      esac
17290d16fef4Smrg                      shift
17300d16fef4Smrg                      ;;
17310d16fef4Smrg
17320d16fef4Smrg        --verbose|-v) opt_verbose=: ;;
17330d16fef4Smrg        --version)    func_version ;;
17340d16fef4Smrg        -\?|-h)       func_usage ;;
17350d16fef4Smrg        --help)       func_help ;;
17360d16fef4Smrg
17370d16fef4Smrg	# Separate optargs to long options (plugins may need this):
17380d16fef4Smrg	--*=*)        func_split_equals "$_G_opt"
17390d16fef4Smrg	              set dummy "$func_split_equals_lhs" \
17400d16fef4Smrg                          "$func_split_equals_rhs" ${1+"$@"}
17410d16fef4Smrg                      shift
17420d16fef4Smrg                      ;;
17430d16fef4Smrg
17440d16fef4Smrg       # Separate optargs to short options:
17450d16fef4Smrg        -W*)
17460d16fef4Smrg                      func_split_short_opt "$_G_opt"
17470d16fef4Smrg                      set dummy "$func_split_short_opt_name" \
17480d16fef4Smrg                          "$func_split_short_opt_arg" ${1+"$@"}
17490d16fef4Smrg                      shift
17500d16fef4Smrg                      ;;
17510d16fef4Smrg
17520d16fef4Smrg        # Separate non-argument short options:
17530d16fef4Smrg        -\?*|-h*|-v*|-x*)
17540d16fef4Smrg                      func_split_short_opt "$_G_opt"
17550d16fef4Smrg                      set dummy "$func_split_short_opt_name" \
17560d16fef4Smrg                          "-$func_split_short_opt_arg" ${1+"$@"}
17570d16fef4Smrg                      shift
17580d16fef4Smrg                      ;;
17590d16fef4Smrg
17600d16fef4Smrg        --)           break ;;
17610d16fef4Smrg        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
17620d16fef4Smrg        *)            set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
17630d16fef4Smrg      esac
17640d16fef4Smrg    done
17650d16fef4Smrg
17660d16fef4Smrg    # save modified positional parameters for caller
17670d16fef4Smrg    func_quote_for_eval ${1+"$@"}
17680d16fef4Smrg    func_parse_options_result=$func_quote_for_eval_result
1769de2362d3Smrg}
1770de2362d3Smrg
1771de2362d3Smrg
17720d16fef4Smrg# func_validate_options [ARG]...
17730d16fef4Smrg# ------------------------------
17740d16fef4Smrg# Perform any sanity checks on option settings and/or unconsumed
17750d16fef4Smrg# arguments.
17760d16fef4Smrgfunc_hookable func_validate_options
17770d16fef4Smrgfunc_validate_options ()
1778de2362d3Smrg{
17790d16fef4Smrg    $debug_cmd
1780de2362d3Smrg
17810d16fef4Smrg    # Display all warnings if -W was not given.
17820d16fef4Smrg    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
17830d16fef4Smrg
17840d16fef4Smrg    func_run_hooks func_validate_options ${1+"$@"}
17850d16fef4Smrg
17860d16fef4Smrg    # Bail if the options were screwed!
17870d16fef4Smrg    $exit_cmd $EXIT_FAILURE
17880d16fef4Smrg
17890d16fef4Smrg    # save modified positional parameters for caller
17900d16fef4Smrg    func_validate_options_result=$func_run_hooks_result
1791de2362d3Smrg}
1792de2362d3Smrg
17930d16fef4Smrg
17940d16fef4Smrg
17950d16fef4Smrg## ----------------- ##
17960d16fef4Smrg## Helper functions. ##
17970d16fef4Smrg## ----------------- ##
17980d16fef4Smrg
17990d16fef4Smrg# This section contains the helper functions used by the rest of the
18000d16fef4Smrg# hookable option parser framework in ascii-betical order.
18010d16fef4Smrg
18020d16fef4Smrg
18030d16fef4Smrg# func_fatal_help ARG...
18040d16fef4Smrg# ----------------------
18050d16fef4Smrg# Echo program name prefixed message to standard error, followed by
18060d16fef4Smrg# a help hint, and exit.
18070d16fef4Smrgfunc_fatal_help ()
1808de2362d3Smrg{
18090d16fef4Smrg    $debug_cmd
1810de2362d3Smrg
18110d16fef4Smrg    eval \$ECHO \""Usage: $usage"\"
18120d16fef4Smrg    eval \$ECHO \""$fatal_help"\"
18130d16fef4Smrg    func_error ${1+"$@"}
18140d16fef4Smrg    exit $EXIT_FAILURE
1815de2362d3Smrg}
1816de2362d3Smrg
18170d16fef4Smrg
18180d16fef4Smrg# func_help
18190d16fef4Smrg# ---------
18200d16fef4Smrg# Echo long help message to standard output and exit.
1821de2362d3Smrgfunc_help ()
1822de2362d3Smrg{
18230d16fef4Smrg    $debug_cmd
18240d16fef4Smrg
18250d16fef4Smrg    func_usage_message
18260d16fef4Smrg    $ECHO "$long_help_message"
18270d16fef4Smrg    exit 0
1828de2362d3Smrg}
1829de2362d3Smrg
18300d16fef4Smrg
18310d16fef4Smrg# func_missing_arg ARGNAME
18320d16fef4Smrg# ------------------------
1833de2362d3Smrg# Echo program name prefixed message to standard error and set global
1834de2362d3Smrg# exit_cmd.
1835de2362d3Smrgfunc_missing_arg ()
1836de2362d3Smrg{
18370d16fef4Smrg    $debug_cmd
1838de2362d3Smrg
18390d16fef4Smrg    func_error "Missing argument for '$1'."
1840de2362d3Smrg    exit_cmd=exit
1841de2362d3Smrg}
1842de2362d3Smrg
1843de2362d3Smrg
18440d16fef4Smrg# func_split_equals STRING
18450d16fef4Smrg# ------------------------
18460d16fef4Smrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
18470d16fef4Smrg# splitting STRING at the '=' sign.
18480d16fef4Smrgtest -z "$_G_HAVE_XSI_OPS" \
18490d16fef4Smrg    && (eval 'x=a/b/c;
18500d16fef4Smrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
18510d16fef4Smrg    && _G_HAVE_XSI_OPS=yes
18520d16fef4Smrg
18530d16fef4Smrgif test yes = "$_G_HAVE_XSI_OPS"
18540d16fef4Smrgthen
18550d16fef4Smrg  # This is an XSI compatible shell, allowing a faster implementation...
18560d16fef4Smrg  eval 'func_split_equals ()
18570d16fef4Smrg  {
18580d16fef4Smrg      $debug_cmd
18590d16fef4Smrg
18600d16fef4Smrg      func_split_equals_lhs=${1%%=*}
18610d16fef4Smrg      func_split_equals_rhs=${1#*=}
18620d16fef4Smrg      test "x$func_split_equals_lhs" = "x$1" \
18630d16fef4Smrg        && func_split_equals_rhs=
18640d16fef4Smrg  }'
18650d16fef4Smrgelse
18660d16fef4Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
18670d16fef4Smrg  func_split_equals ()
18680d16fef4Smrg  {
18690d16fef4Smrg      $debug_cmd
18700d16fef4Smrg
18710d16fef4Smrg      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
18720d16fef4Smrg      func_split_equals_rhs=
18730d16fef4Smrg      test "x$func_split_equals_lhs" = "x$1" \
18740d16fef4Smrg        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
18750d16fef4Smrg  }
18760d16fef4Smrgfi #func_split_equals
18770d16fef4Smrg
18780d16fef4Smrg
18790d16fef4Smrg# func_split_short_opt SHORTOPT
18800d16fef4Smrg# -----------------------------
1881de2362d3Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
1882de2362d3Smrg# variables after splitting SHORTOPT after the 2nd character.
18830d16fef4Smrgif test yes = "$_G_HAVE_XSI_OPS"
18840d16fef4Smrgthen
18850d16fef4Smrg  # This is an XSI compatible shell, allowing a faster implementation...
18860d16fef4Smrg  eval 'func_split_short_opt ()
18870d16fef4Smrg  {
18880d16fef4Smrg      $debug_cmd
18890d16fef4Smrg
18900d16fef4Smrg      func_split_short_opt_arg=${1#??}
18910d16fef4Smrg      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
18920d16fef4Smrg  }'
18930d16fef4Smrgelse
18940d16fef4Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
18950d16fef4Smrg  func_split_short_opt ()
18960d16fef4Smrg  {
18970d16fef4Smrg      $debug_cmd
18980d16fef4Smrg
18990d16fef4Smrg      func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
19000d16fef4Smrg      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
19010d16fef4Smrg  }
19020d16fef4Smrgfi #func_split_short_opt
19030d16fef4Smrg
19040d16fef4Smrg
19050d16fef4Smrg# func_usage
19060d16fef4Smrg# ----------
19070d16fef4Smrg# Echo short help message to standard output and exit.
19080d16fef4Smrgfunc_usage ()
1909de2362d3Smrg{
19100d16fef4Smrg    $debug_cmd
1911de2362d3Smrg
19120d16fef4Smrg    func_usage_message
19130d16fef4Smrg    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
19140d16fef4Smrg    exit 0
19150d16fef4Smrg}
1916de2362d3Smrg
1917de2362d3Smrg
19180d16fef4Smrg# func_usage_message
19190d16fef4Smrg# ------------------
19200d16fef4Smrg# Echo short help message to standard output.
19210d16fef4Smrgfunc_usage_message ()
1922de2362d3Smrg{
19230d16fef4Smrg    $debug_cmd
1924de2362d3Smrg
19250d16fef4Smrg    eval \$ECHO \""Usage: $usage"\"
19260d16fef4Smrg    echo
19270d16fef4Smrg    $SED -n 's|^# ||
19280d16fef4Smrg        /^Written by/{
19290d16fef4Smrg          x;p;x
19300d16fef4Smrg        }
19310d16fef4Smrg	h
19320d16fef4Smrg	/^Written by/q' < "$progpath"
19330d16fef4Smrg    echo
19340d16fef4Smrg    eval \$ECHO \""$usage_message"\"
19350d16fef4Smrg}
1936de2362d3Smrg
1937de2362d3Smrg
19380d16fef4Smrg# func_version
19390d16fef4Smrg# ------------
19400d16fef4Smrg# Echo version message to standard output and exit.
19410d16fef4Smrgfunc_version ()
19420d16fef4Smrg{
19430d16fef4Smrg    $debug_cmd
1944de2362d3Smrg
19450d16fef4Smrg    printf '%s\n' "$progname $scriptversion"
19460d16fef4Smrg    $SED -n '
19470d16fef4Smrg        /(C)/!b go
19480d16fef4Smrg        :more
19490d16fef4Smrg        /\./!{
19500d16fef4Smrg          N
19510d16fef4Smrg          s|\n# | |
19520d16fef4Smrg          b more
19530d16fef4Smrg        }
19540d16fef4Smrg        :go
19550d16fef4Smrg        /^# Written by /,/# warranty; / {
19560d16fef4Smrg          s|^# ||
19570d16fef4Smrg          s|^# *$||
19580d16fef4Smrg          s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
19590d16fef4Smrg          p
19600d16fef4Smrg        }
19610d16fef4Smrg        /^# Written by / {
19620d16fef4Smrg          s|^# ||
19630d16fef4Smrg          p
19640d16fef4Smrg        }
19650d16fef4Smrg        /^warranty; /q' < "$progpath"
1966de2362d3Smrg
19670d16fef4Smrg    exit $?
19680d16fef4Smrg}
1969de2362d3Smrg
1970de2362d3Smrg
19710d16fef4Smrg# Local variables:
19720d16fef4Smrg# mode: shell-script
19730d16fef4Smrg# sh-indentation: 2
19740d16fef4Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
19750d16fef4Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
19760d16fef4Smrg# time-stamp-time-zone: "UTC"
19770d16fef4Smrg# End:
1978de2362d3Smrg
19790d16fef4Smrg# Set a version string.
19800d16fef4Smrgscriptversion='(GNU libtool) 2.4.6'
1981de2362d3Smrg
1982de2362d3Smrg
19830d16fef4Smrg# func_echo ARG...
19840d16fef4Smrg# ----------------
19850d16fef4Smrg# Libtool also displays the current mode in messages, so override
19860d16fef4Smrg# funclib.sh func_echo with this custom definition.
19870d16fef4Smrgfunc_echo ()
1988de2362d3Smrg{
19890d16fef4Smrg    $debug_cmd
1990de2362d3Smrg
19910d16fef4Smrg    _G_message=$*
19920d16fef4Smrg
19930d16fef4Smrg    func_echo_IFS=$IFS
19940d16fef4Smrg    IFS=$nl
19950d16fef4Smrg    for _G_line in $_G_message; do
19960d16fef4Smrg      IFS=$func_echo_IFS
19970d16fef4Smrg      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
19980d16fef4Smrg    done
19990d16fef4Smrg    IFS=$func_echo_IFS
20000d16fef4Smrg}
2001de2362d3Smrg
2002de2362d3Smrg
20030d16fef4Smrg# func_warning ARG...
20040d16fef4Smrg# -------------------
20050d16fef4Smrg# Libtool warnings are not categorized, so override funclib.sh
20060d16fef4Smrg# func_warning with this simpler definition.
20070d16fef4Smrgfunc_warning ()
2008de2362d3Smrg{
20090d16fef4Smrg    $debug_cmd
20100d16fef4Smrg
20110d16fef4Smrg    $warning_func ${1+"$@"}
20120d16fef4Smrg}
20130d16fef4Smrg
2014de2362d3Smrg
20150d16fef4Smrg## ---------------- ##
20160d16fef4Smrg## Options parsing. ##
20170d16fef4Smrg## ---------------- ##
20180d16fef4Smrg
20190d16fef4Smrg# Hook in the functions to make sure our own options are parsed during
20200d16fef4Smrg# the option parsing loop.
20210d16fef4Smrg
20220d16fef4Smrgusage='$progpath [OPTION]... [MODE-ARG]...'
20230d16fef4Smrg
20240d16fef4Smrg# Short help message in response to '-h'.
20250d16fef4Smrgusage_message="Options:
20260d16fef4Smrg       --config             show all configuration variables
20270d16fef4Smrg       --debug              enable verbose shell tracing
20280d16fef4Smrg   -n, --dry-run            display commands without modifying any files
20290d16fef4Smrg       --features           display basic configuration information and exit
20300d16fef4Smrg       --mode=MODE          use operation mode MODE
20310d16fef4Smrg       --no-warnings        equivalent to '-Wnone'
20320d16fef4Smrg       --preserve-dup-deps  don't remove duplicate dependency libraries
20330d16fef4Smrg       --quiet, --silent    don't print informational messages
20340d16fef4Smrg       --tag=TAG            use configuration variables from tag TAG
20350d16fef4Smrg   -v, --verbose            print more informational messages than default
20360d16fef4Smrg       --version            print version information
20370d16fef4Smrg   -W, --warnings=CATEGORY  report the warnings falling in CATEGORY [all]
20380d16fef4Smrg   -h, --help, --help-all   print short, long, or detailed help message
20390d16fef4Smrg"
2040de2362d3Smrg
20410d16fef4Smrg# Additional text appended to 'usage_message' in response to '--help'.
20420d16fef4Smrgfunc_help ()
2043de2362d3Smrg{
20440d16fef4Smrg    $debug_cmd
20450d16fef4Smrg
20460d16fef4Smrg    func_usage_message
20470d16fef4Smrg    $ECHO "$long_help_message
20480d16fef4Smrg
20490d16fef4SmrgMODE must be one of the following:
20500d16fef4Smrg
20510d16fef4Smrg       clean           remove files from the build directory
20520d16fef4Smrg       compile         compile a source file into a libtool object
20530d16fef4Smrg       execute         automatically set library path, then run a program
20540d16fef4Smrg       finish          complete the installation of libtool libraries
20550d16fef4Smrg       install         install libraries or executables
20560d16fef4Smrg       link            create a library or an executable
20570d16fef4Smrg       uninstall       remove libraries from an installed directory
20580d16fef4Smrg
20590d16fef4SmrgMODE-ARGS vary depending on the MODE.  When passed as first option,
20600d16fef4Smrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
20610d16fef4SmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE.
20620d16fef4Smrg
20630d16fef4SmrgWhen reporting a bug, please describe a test case to reproduce it and
20640d16fef4Smrginclude the following information:
20650d16fef4Smrg
20660d16fef4Smrg       host-triplet:   $host
20670d16fef4Smrg       shell:          $SHELL
20680d16fef4Smrg       compiler:       $LTCC
20690d16fef4Smrg       compiler flags: $LTCFLAGS
20700d16fef4Smrg       linker:         $LD (gnu? $with_gnu_ld)
20710d16fef4Smrg       version:        $progname (GNU libtool) 2.4.6
20720d16fef4Smrg       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
20730d16fef4Smrg       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
20740d16fef4Smrg
20750d16fef4SmrgReport bugs to <bug-libtool@gnu.org>.
20760d16fef4SmrgGNU libtool home page: <http://www.gnu.org/s/libtool/>.
20770d16fef4SmrgGeneral help using GNU software: <http://www.gnu.org/gethelp/>."
20780d16fef4Smrg    exit 0
20790d16fef4Smrg}
2080de2362d3Smrg
2081de2362d3Smrg
20820d16fef4Smrg# func_lo2o OBJECT-NAME
20830d16fef4Smrg# ---------------------
20840d16fef4Smrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
20850d16fef4Smrg# object suffix.
2086de2362d3Smrg
20870d16fef4Smrglo2o=s/\\.lo\$/.$objext/
20880d16fef4Smrgo2lo=s/\\.$objext\$/.lo/
2089de2362d3Smrg
20900d16fef4Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
20910d16fef4Smrg  eval 'func_lo2o ()
20920d16fef4Smrg  {
20930d16fef4Smrg    case $1 in
20940d16fef4Smrg      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
20950d16fef4Smrg      *   ) func_lo2o_result=$1               ;;
20960d16fef4Smrg    esac
20970d16fef4Smrg  }'
20980d16fef4Smrg
20990d16fef4Smrg  # func_xform LIBOBJ-OR-SOURCE
21000d16fef4Smrg  # ---------------------------
21010d16fef4Smrg  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
21020d16fef4Smrg  # suffix to a '.lo' libtool-object suffix.
21030d16fef4Smrg  eval 'func_xform ()
21040d16fef4Smrg  {
21050d16fef4Smrg    func_xform_result=${1%.*}.lo
21060d16fef4Smrg  }'
21070d16fef4Smrgelse
21080d16fef4Smrg  # ...otherwise fall back to using sed.
21090d16fef4Smrg  func_lo2o ()
21100d16fef4Smrg  {
21110d16fef4Smrg    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
21120d16fef4Smrg  }
21130d16fef4Smrg
21140d16fef4Smrg  func_xform ()
21150d16fef4Smrg  {
21160d16fef4Smrg    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
21170d16fef4Smrg  }
21180d16fef4Smrgfi
2119de2362d3Smrg
2120de2362d3Smrg
21210d16fef4Smrg# func_fatal_configuration ARG...
21220d16fef4Smrg# -------------------------------
2123de2362d3Smrg# Echo program name prefixed message to standard error, followed by
2124de2362d3Smrg# a configuration failure hint, and exit.
2125de2362d3Smrgfunc_fatal_configuration ()
2126de2362d3Smrg{
21270d16fef4Smrg    func__fatal_error ${1+"$@"} \
21280d16fef4Smrg      "See the $PACKAGE documentation for more information." \
21290d16fef4Smrg      "Fatal configuration error."
2130de2362d3Smrg}
2131de2362d3Smrg
2132de2362d3Smrg
2133de2362d3Smrg# func_config
21340d16fef4Smrg# -----------
2135de2362d3Smrg# Display the configuration for all the tags in this script.
2136de2362d3Smrgfunc_config ()
2137de2362d3Smrg{
2138de2362d3Smrg    re_begincf='^# ### BEGIN LIBTOOL'
2139de2362d3Smrg    re_endcf='^# ### END LIBTOOL'
2140de2362d3Smrg
2141de2362d3Smrg    # Default configuration.
2142de2362d3Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
2143de2362d3Smrg
2144de2362d3Smrg    # Now print the configurations for the tags.
2145de2362d3Smrg    for tagname in $taglist; do
2146de2362d3Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
2147de2362d3Smrg    done
2148de2362d3Smrg
2149de2362d3Smrg    exit $?
2150de2362d3Smrg}
2151de2362d3Smrg
21520d16fef4Smrg
2153de2362d3Smrg# func_features
21540d16fef4Smrg# -------------
2155de2362d3Smrg# Display the features supported by this script.
2156de2362d3Smrgfunc_features ()
2157de2362d3Smrg{
2158de2362d3Smrg    echo "host: $host"
21590d16fef4Smrg    if test yes = "$build_libtool_libs"; then
2160de2362d3Smrg      echo "enable shared libraries"
2161de2362d3Smrg    else
2162de2362d3Smrg      echo "disable shared libraries"
2163de2362d3Smrg    fi
21640d16fef4Smrg    if test yes = "$build_old_libs"; then
2165de2362d3Smrg      echo "enable static libraries"
2166de2362d3Smrg    else
2167de2362d3Smrg      echo "disable static libraries"
2168de2362d3Smrg    fi
2169de2362d3Smrg
2170de2362d3Smrg    exit $?
2171de2362d3Smrg}
2172de2362d3Smrg
21730d16fef4Smrg
21740d16fef4Smrg# func_enable_tag TAGNAME
21750d16fef4Smrg# -----------------------
2176de2362d3Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
2177de2362d3Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
2178de2362d3Smrg# variable here.
2179de2362d3Smrgfunc_enable_tag ()
2180de2362d3Smrg{
21810d16fef4Smrg    # Global variable:
21820d16fef4Smrg    tagname=$1
2183de2362d3Smrg
21840d16fef4Smrg    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
21850d16fef4Smrg    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
21860d16fef4Smrg    sed_extractcf=/$re_begincf/,/$re_endcf/p
2187de2362d3Smrg
21880d16fef4Smrg    # Validate tagname.
21890d16fef4Smrg    case $tagname in
21900d16fef4Smrg      *[!-_A-Za-z0-9,/]*)
21910d16fef4Smrg        func_fatal_error "invalid tag name: $tagname"
21920d16fef4Smrg        ;;
21930d16fef4Smrg    esac
2194de2362d3Smrg
21950d16fef4Smrg    # Don't test for the "default" C tag, as we know it's
21960d16fef4Smrg    # there but not specially marked.
21970d16fef4Smrg    case $tagname in
21980d16fef4Smrg        CC) ;;
2199de2362d3Smrg    *)
22000d16fef4Smrg        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
22010d16fef4Smrg	  taglist="$taglist $tagname"
22020d16fef4Smrg
22030d16fef4Smrg	  # Evaluate the configuration.  Be careful to quote the path
22040d16fef4Smrg	  # and the sed script, to avoid splitting on whitespace, but
22050d16fef4Smrg	  # also don't use non-portable quotes within backquotes within
22060d16fef4Smrg	  # quotes we have to do it in 2 steps:
22070d16fef4Smrg	  extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
22080d16fef4Smrg	  eval "$extractedcf"
22090d16fef4Smrg        else
22100d16fef4Smrg	  func_error "ignoring unknown tag $tagname"
22110d16fef4Smrg        fi
22120d16fef4Smrg        ;;
22130d16fef4Smrg    esac
2214de2362d3Smrg}
2215de2362d3Smrg
22160d16fef4Smrg
2217de2362d3Smrg# func_check_version_match
22180d16fef4Smrg# ------------------------
2219de2362d3Smrg# Ensure that we are using m4 macros, and libtool script from the same
2220de2362d3Smrg# release of libtool.
2221de2362d3Smrgfunc_check_version_match ()
2222de2362d3Smrg{
22230d16fef4Smrg    if test "$package_revision" != "$macro_revision"; then
22240d16fef4Smrg      if test "$VERSION" != "$macro_version"; then
22250d16fef4Smrg        if test -z "$macro_version"; then
22260d16fef4Smrg          cat >&2 <<_LT_EOF
2227de2362d3Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2228de2362d3Smrg$progname: definition of this LT_INIT comes from an older release.
2229de2362d3Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2230de2362d3Smrg$progname: and run autoconf again.
2231de2362d3Smrg_LT_EOF
22320d16fef4Smrg        else
22330d16fef4Smrg          cat >&2 <<_LT_EOF
2234de2362d3Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2235de2362d3Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
2236de2362d3Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2237de2362d3Smrg$progname: and run autoconf again.
2238de2362d3Smrg_LT_EOF
22390d16fef4Smrg        fi
22400d16fef4Smrg      else
22410d16fef4Smrg        cat >&2 <<_LT_EOF
2242de2362d3Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
2243de2362d3Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
2244de2362d3Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
2245de2362d3Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
2246de2362d3Smrg_LT_EOF
22470d16fef4Smrg      fi
2248de2362d3Smrg
22490d16fef4Smrg      exit $EXIT_MISMATCH
22500d16fef4Smrg    fi
2251de2362d3Smrg}
2252de2362d3Smrg
2253de2362d3Smrg
22540d16fef4Smrg# libtool_options_prep [ARG]...
22550d16fef4Smrg# -----------------------------
22560d16fef4Smrg# Preparation for options parsed by libtool.
22570d16fef4Smrglibtool_options_prep ()
22580d16fef4Smrg{
22590d16fef4Smrg    $debug_mode
2260de2362d3Smrg
22610d16fef4Smrg    # Option defaults:
22620d16fef4Smrg    opt_config=false
22630d16fef4Smrg    opt_dlopen=
22640d16fef4Smrg    opt_dry_run=false
22650d16fef4Smrg    opt_help=false
22660d16fef4Smrg    opt_mode=
22670d16fef4Smrg    opt_preserve_dup_deps=false
22680d16fef4Smrg    opt_quiet=false
2269de2362d3Smrg
22700d16fef4Smrg    nonopt=
22710d16fef4Smrg    preserve_args=
2272de2362d3Smrg
22730d16fef4Smrg    # Shorthand for --mode=foo, only valid as the first argument
22740d16fef4Smrg    case $1 in
22750d16fef4Smrg    clean|clea|cle|cl)
22760d16fef4Smrg      shift; set dummy --mode clean ${1+"$@"}; shift
22770d16fef4Smrg      ;;
22780d16fef4Smrg    compile|compil|compi|comp|com|co|c)
22790d16fef4Smrg      shift; set dummy --mode compile ${1+"$@"}; shift
22800d16fef4Smrg      ;;
22810d16fef4Smrg    execute|execut|execu|exec|exe|ex|e)
22820d16fef4Smrg      shift; set dummy --mode execute ${1+"$@"}; shift
22830d16fef4Smrg      ;;
22840d16fef4Smrg    finish|finis|fini|fin|fi|f)
22850d16fef4Smrg      shift; set dummy --mode finish ${1+"$@"}; shift
22860d16fef4Smrg      ;;
22870d16fef4Smrg    install|instal|insta|inst|ins|in|i)
22880d16fef4Smrg      shift; set dummy --mode install ${1+"$@"}; shift
22890d16fef4Smrg      ;;
22900d16fef4Smrg    link|lin|li|l)
22910d16fef4Smrg      shift; set dummy --mode link ${1+"$@"}; shift
22920d16fef4Smrg      ;;
22930d16fef4Smrg    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
22940d16fef4Smrg      shift; set dummy --mode uninstall ${1+"$@"}; shift
22950d16fef4Smrg      ;;
22960d16fef4Smrg    esac
22970d16fef4Smrg
22980d16fef4Smrg    # Pass back the list of options.
22990d16fef4Smrg    func_quote_for_eval ${1+"$@"}
23000d16fef4Smrg    libtool_options_prep_result=$func_quote_for_eval_result
23010d16fef4Smrg}
23020d16fef4Smrgfunc_add_hook func_options_prep libtool_options_prep
2303de2362d3Smrg
2304de2362d3Smrg
23050d16fef4Smrg# libtool_parse_options [ARG]...
23060d16fef4Smrg# ---------------------------------
23070d16fef4Smrg# Provide handling for libtool specific options.
23080d16fef4Smrglibtool_parse_options ()
2309de2362d3Smrg{
23100d16fef4Smrg    $debug_cmd
2311de2362d3Smrg
23120d16fef4Smrg    # Perform our own loop to consume as many options as possible in
23130d16fef4Smrg    # each iteration.
23140d16fef4Smrg    while test $# -gt 0; do
23150d16fef4Smrg      _G_opt=$1
23160d16fef4Smrg      shift
23170d16fef4Smrg      case $_G_opt in
23180d16fef4Smrg        --dry-run|--dryrun|-n)
23190d16fef4Smrg                        opt_dry_run=:
23200d16fef4Smrg                        ;;
23210d16fef4Smrg
23220d16fef4Smrg        --config)       func_config ;;
23230d16fef4Smrg
23240d16fef4Smrg        --dlopen|-dlopen)
23250d16fef4Smrg                        opt_dlopen="${opt_dlopen+$opt_dlopen
23260d16fef4Smrg}$1"
23270d16fef4Smrg                        shift
23280d16fef4Smrg                        ;;
23290d16fef4Smrg
23300d16fef4Smrg        --preserve-dup-deps)
23310d16fef4Smrg                        opt_preserve_dup_deps=: ;;
23320d16fef4Smrg
23330d16fef4Smrg        --features)     func_features ;;
23340d16fef4Smrg
23350d16fef4Smrg        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
23360d16fef4Smrg
23370d16fef4Smrg        --help)         opt_help=: ;;
23380d16fef4Smrg
23390d16fef4Smrg        --help-all)     opt_help=': help-all' ;;
23400d16fef4Smrg
23410d16fef4Smrg        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
23420d16fef4Smrg                        opt_mode=$1
23430d16fef4Smrg                        case $1 in
23440d16fef4Smrg                          # Valid mode arguments:
23450d16fef4Smrg                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
23460d16fef4Smrg
23470d16fef4Smrg                          # Catch anything else as an error
23480d16fef4Smrg                          *) func_error "invalid argument for $_G_opt"
23490d16fef4Smrg                             exit_cmd=exit
23500d16fef4Smrg                             break
23510d16fef4Smrg                             ;;
23520d16fef4Smrg                        esac
23530d16fef4Smrg                        shift
23540d16fef4Smrg                        ;;
23550d16fef4Smrg
23560d16fef4Smrg        --no-silent|--no-quiet)
23570d16fef4Smrg                        opt_quiet=false
23580d16fef4Smrg                        func_append preserve_args " $_G_opt"
23590d16fef4Smrg                        ;;
23600d16fef4Smrg
23610d16fef4Smrg        --no-warnings|--no-warning|--no-warn)
23620d16fef4Smrg                        opt_warning=false
23630d16fef4Smrg                        func_append preserve_args " $_G_opt"
23640d16fef4Smrg                        ;;
23650d16fef4Smrg
23660d16fef4Smrg        --no-verbose)
23670d16fef4Smrg                        opt_verbose=false
23680d16fef4Smrg                        func_append preserve_args " $_G_opt"
23690d16fef4Smrg                        ;;
23700d16fef4Smrg
23710d16fef4Smrg        --silent|--quiet)
23720d16fef4Smrg                        opt_quiet=:
23730d16fef4Smrg                        opt_verbose=false
23740d16fef4Smrg                        func_append preserve_args " $_G_opt"
23750d16fef4Smrg                        ;;
23760d16fef4Smrg
23770d16fef4Smrg        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
23780d16fef4Smrg                        opt_tag=$1
23790d16fef4Smrg                        func_append preserve_args " $_G_opt $1"
23800d16fef4Smrg                        func_enable_tag "$1"
23810d16fef4Smrg                        shift
23820d16fef4Smrg                        ;;
23830d16fef4Smrg
23840d16fef4Smrg        --verbose|-v)   opt_quiet=false
23850d16fef4Smrg                        opt_verbose=:
23860d16fef4Smrg                        func_append preserve_args " $_G_opt"
23870d16fef4Smrg                        ;;
23880d16fef4Smrg
23890d16fef4Smrg	# An option not handled by this hook function:
23900d16fef4Smrg        *)		set dummy "$_G_opt" ${1+"$@"};	shift; break  ;;
23910d16fef4Smrg      esac
23920d16fef4Smrg    done
2393de2362d3Smrg
2394de2362d3Smrg
23950d16fef4Smrg    # save modified positional parameters for caller
23960d16fef4Smrg    func_quote_for_eval ${1+"$@"}
23970d16fef4Smrg    libtool_parse_options_result=$func_quote_for_eval_result
23980d16fef4Smrg}
23990d16fef4Smrgfunc_add_hook func_parse_options libtool_parse_options
2400de2362d3Smrg
2401de2362d3Smrg
2402de2362d3Smrg
24030d16fef4Smrg# libtool_validate_options [ARG]...
24040d16fef4Smrg# ---------------------------------
24050d16fef4Smrg# Perform any sanity checks on option settings and/or unconsumed
24060d16fef4Smrg# arguments.
24070d16fef4Smrglibtool_validate_options ()
24080d16fef4Smrg{
24090d16fef4Smrg    # save first non-option argument
24100d16fef4Smrg    if test 0 -lt $#; then
24110d16fef4Smrg      nonopt=$1
24120d16fef4Smrg      shift
2413de2362d3Smrg    fi
2414de2362d3Smrg
24150d16fef4Smrg    # preserve --debug
24160d16fef4Smrg    test : = "$debug_cmd" || func_append preserve_args " --debug"
2417de2362d3Smrg
24180d16fef4Smrg    case $host in
24190d16fef4Smrg      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
24200d16fef4Smrg      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
24210d16fef4Smrg      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
24220d16fef4Smrg        # don't eliminate duplications in $postdeps and $predeps
24230d16fef4Smrg        opt_duplicate_compiler_generated_deps=:
24240d16fef4Smrg        ;;
24250d16fef4Smrg      *)
24260d16fef4Smrg        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
24270d16fef4Smrg        ;;
24280d16fef4Smrg    esac
2429de2362d3Smrg
24300d16fef4Smrg    $opt_help || {
24310d16fef4Smrg      # Sanity checks first:
24320d16fef4Smrg      func_check_version_match
2433de2362d3Smrg
24340d16fef4Smrg      test yes != "$build_libtool_libs" \
24350d16fef4Smrg        && test yes != "$build_old_libs" \
24360d16fef4Smrg        && func_fatal_configuration "not configured to build any kind of library"
2437de2362d3Smrg
24380d16fef4Smrg      # Darwin sucks
24390d16fef4Smrg      eval std_shrext=\"$shrext_cmds\"
24400d16fef4Smrg
24410d16fef4Smrg      # Only execute mode is allowed to have -dlopen flags.
24420d16fef4Smrg      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
24430d16fef4Smrg        func_error "unrecognized option '-dlopen'"
24440d16fef4Smrg        $ECHO "$help" 1>&2
24450d16fef4Smrg        exit $EXIT_FAILURE
24460d16fef4Smrg      fi
24470d16fef4Smrg
24480d16fef4Smrg      # Change the help message to a mode-specific one.
24490d16fef4Smrg      generic_help=$help
24500d16fef4Smrg      help="Try '$progname --help --mode=$opt_mode' for more information."
24510d16fef4Smrg    }
24520d16fef4Smrg
24530d16fef4Smrg    # Pass back the unparsed argument list
24540d16fef4Smrg    func_quote_for_eval ${1+"$@"}
24550d16fef4Smrg    libtool_validate_options_result=$func_quote_for_eval_result
2456de2362d3Smrg}
24570d16fef4Smrgfunc_add_hook func_validate_options libtool_validate_options
24580d16fef4Smrg
2459de2362d3Smrg
24600d16fef4Smrg# Process options as early as possible so that --help and --version
24610d16fef4Smrg# can return quickly.
24620d16fef4Smrgfunc_options ${1+"$@"}
24630d16fef4Smrgeval set dummy "$func_options_result"; shift
2464de2362d3Smrg
2465de2362d3Smrg
2466de2362d3Smrg
2467de2362d3Smrg## ----------- ##
2468de2362d3Smrg##    Main.    ##
2469de2362d3Smrg## ----------- ##
2470de2362d3Smrg
24710d16fef4Smrgmagic='%%%MAGIC variable%%%'
24720d16fef4Smrgmagic_exe='%%%MAGIC EXE variable%%%'
24730d16fef4Smrg
24740d16fef4Smrg# Global variables.
24750d16fef4Smrgextracted_archives=
24760d16fef4Smrgextracted_serial=0
24770d16fef4Smrg
24780d16fef4Smrg# If this variable is set in any of the actions, the command in it
24790d16fef4Smrg# will be execed at the end.  This prevents here-documents from being
24800d16fef4Smrg# left over by shells.
24810d16fef4Smrgexec_cmd=
24820d16fef4Smrg
24830d16fef4Smrg
24840d16fef4Smrg# A function that is used when there is no print builtin or printf.
24850d16fef4Smrgfunc_fallback_echo ()
24860d16fef4Smrg{
24870d16fef4Smrg  eval 'cat <<_LTECHO_EOF
24880d16fef4Smrg$1
24890d16fef4Smrg_LTECHO_EOF'
24900d16fef4Smrg}
24910d16fef4Smrg
24920d16fef4Smrg# func_generated_by_libtool
24930d16fef4Smrg# True iff stdin has been generated by Libtool. This function is only
24940d16fef4Smrg# a basic sanity check; it will hardly flush out determined imposters.
24950d16fef4Smrgfunc_generated_by_libtool_p ()
24960d16fef4Smrg{
24970d16fef4Smrg  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
24980d16fef4Smrg}
24990d16fef4Smrg
2500de2362d3Smrg# func_lalib_p file
25010d16fef4Smrg# True iff FILE is a libtool '.la' library or '.lo' object file.
2502de2362d3Smrg# This function is only a basic sanity check; it will hardly flush out
2503de2362d3Smrg# determined imposters.
2504de2362d3Smrgfunc_lalib_p ()
2505de2362d3Smrg{
2506de2362d3Smrg    test -f "$1" &&
25070d16fef4Smrg      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
2508de2362d3Smrg}
2509de2362d3Smrg
2510de2362d3Smrg# func_lalib_unsafe_p file
25110d16fef4Smrg# True iff FILE is a libtool '.la' library or '.lo' object file.
2512de2362d3Smrg# This function implements the same check as func_lalib_p without
2513de2362d3Smrg# resorting to external programs.  To this end, it redirects stdin and
2514de2362d3Smrg# closes it afterwards, without saving the original file descriptor.
2515de2362d3Smrg# As a safety measure, use it only where a negative result would be
25160d16fef4Smrg# fatal anyway.  Works if 'file' does not exist.
2517de2362d3Smrgfunc_lalib_unsafe_p ()
2518de2362d3Smrg{
2519de2362d3Smrg    lalib_p=no
2520de2362d3Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
2521de2362d3Smrg	for lalib_p_l in 1 2 3 4
2522de2362d3Smrg	do
2523de2362d3Smrg	    read lalib_p_line
25240d16fef4Smrg	    case $lalib_p_line in
2525de2362d3Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
2526de2362d3Smrg	    esac
2527de2362d3Smrg	done
2528de2362d3Smrg	exec 0<&5 5<&-
2529de2362d3Smrg    fi
25300d16fef4Smrg    test yes = "$lalib_p"
2531de2362d3Smrg}
2532de2362d3Smrg
2533de2362d3Smrg# func_ltwrapper_script_p file
2534de2362d3Smrg# True iff FILE is a libtool wrapper script
2535de2362d3Smrg# This function is only a basic sanity check; it will hardly flush out
2536de2362d3Smrg# determined imposters.
2537de2362d3Smrgfunc_ltwrapper_script_p ()
2538de2362d3Smrg{
25390d16fef4Smrg    test -f "$1" &&
25400d16fef4Smrg      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
2541de2362d3Smrg}
2542de2362d3Smrg
2543de2362d3Smrg# func_ltwrapper_executable_p file
2544de2362d3Smrg# True iff FILE is a libtool wrapper executable
2545de2362d3Smrg# This function is only a basic sanity check; it will hardly flush out
2546de2362d3Smrg# determined imposters.
2547de2362d3Smrgfunc_ltwrapper_executable_p ()
2548de2362d3Smrg{
2549de2362d3Smrg    func_ltwrapper_exec_suffix=
2550de2362d3Smrg    case $1 in
2551de2362d3Smrg    *.exe) ;;
2552de2362d3Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
2553de2362d3Smrg    esac
2554de2362d3Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
2555de2362d3Smrg}
2556de2362d3Smrg
2557de2362d3Smrg# func_ltwrapper_scriptname file
2558de2362d3Smrg# Assumes file is an ltwrapper_executable
2559de2362d3Smrg# uses $file to determine the appropriate filename for a
2560de2362d3Smrg# temporary ltwrapper_script.
2561de2362d3Smrgfunc_ltwrapper_scriptname ()
2562de2362d3Smrg{
2563de2362d3Smrg    func_dirname_and_basename "$1" "" "."
2564de2362d3Smrg    func_stripname '' '.exe' "$func_basename_result"
25650d16fef4Smrg    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
2566de2362d3Smrg}
2567de2362d3Smrg
2568de2362d3Smrg# func_ltwrapper_p file
2569de2362d3Smrg# True iff FILE is a libtool wrapper script or wrapper executable
2570de2362d3Smrg# This function is only a basic sanity check; it will hardly flush out
2571de2362d3Smrg# determined imposters.
2572de2362d3Smrgfunc_ltwrapper_p ()
2573de2362d3Smrg{
2574de2362d3Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
2575de2362d3Smrg}
2576de2362d3Smrg
2577de2362d3Smrg
2578de2362d3Smrg# func_execute_cmds commands fail_cmd
2579de2362d3Smrg# Execute tilde-delimited COMMANDS.
2580de2362d3Smrg# If FAIL_CMD is given, eval that upon failure.
2581de2362d3Smrg# FAIL_CMD may read-access the current command in variable CMD!
2582de2362d3Smrgfunc_execute_cmds ()
2583de2362d3Smrg{
25840d16fef4Smrg    $debug_cmd
25850d16fef4Smrg
2586de2362d3Smrg    save_ifs=$IFS; IFS='~'
2587de2362d3Smrg    for cmd in $1; do
25880d16fef4Smrg      IFS=$sp$nl
2589de2362d3Smrg      eval cmd=\"$cmd\"
25900d16fef4Smrg      IFS=$save_ifs
2591de2362d3Smrg      func_show_eval "$cmd" "${2-:}"
2592de2362d3Smrg    done
2593de2362d3Smrg    IFS=$save_ifs
2594de2362d3Smrg}
2595de2362d3Smrg
2596de2362d3Smrg
2597de2362d3Smrg# func_source file
2598de2362d3Smrg# Source FILE, adding directory component if necessary.
2599de2362d3Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
2600de2362d3Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
2601de2362d3Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
26020d16fef4Smrg# 'FILE.' does not work on cygwin managed mounts.
2603de2362d3Smrgfunc_source ()
2604de2362d3Smrg{
26050d16fef4Smrg    $debug_cmd
26060d16fef4Smrg
2607de2362d3Smrg    case $1 in
2608de2362d3Smrg    */* | *\\*)	. "$1" ;;
2609de2362d3Smrg    *)		. "./$1" ;;
2610de2362d3Smrg    esac
2611de2362d3Smrg}
2612de2362d3Smrg
2613de2362d3Smrg
2614de2362d3Smrg# func_resolve_sysroot PATH
2615de2362d3Smrg# Replace a leading = in PATH with a sysroot.  Store the result into
2616de2362d3Smrg# func_resolve_sysroot_result
2617de2362d3Smrgfunc_resolve_sysroot ()
2618de2362d3Smrg{
2619de2362d3Smrg  func_resolve_sysroot_result=$1
2620de2362d3Smrg  case $func_resolve_sysroot_result in
2621de2362d3Smrg  =*)
2622de2362d3Smrg    func_stripname '=' '' "$func_resolve_sysroot_result"
2623de2362d3Smrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
2624de2362d3Smrg    ;;
2625de2362d3Smrg  esac
2626de2362d3Smrg}
2627de2362d3Smrg
2628de2362d3Smrg# func_replace_sysroot PATH
2629de2362d3Smrg# If PATH begins with the sysroot, replace it with = and
2630de2362d3Smrg# store the result into func_replace_sysroot_result.
2631de2362d3Smrgfunc_replace_sysroot ()
2632de2362d3Smrg{
26330d16fef4Smrg  case $lt_sysroot:$1 in
2634de2362d3Smrg  ?*:"$lt_sysroot"*)
2635de2362d3Smrg    func_stripname "$lt_sysroot" '' "$1"
26360d16fef4Smrg    func_replace_sysroot_result='='$func_stripname_result
2637de2362d3Smrg    ;;
2638de2362d3Smrg  *)
2639de2362d3Smrg    # Including no sysroot.
2640de2362d3Smrg    func_replace_sysroot_result=$1
2641de2362d3Smrg    ;;
2642de2362d3Smrg  esac
2643de2362d3Smrg}
2644de2362d3Smrg
2645de2362d3Smrg# func_infer_tag arg
2646de2362d3Smrg# Infer tagged configuration to use if any are available and
2647de2362d3Smrg# if one wasn't chosen via the "--tag" command line option.
2648de2362d3Smrg# Only attempt this if the compiler in the base compile
2649de2362d3Smrg# command doesn't match the default compiler.
2650de2362d3Smrg# arg is usually of the form 'gcc ...'
2651de2362d3Smrgfunc_infer_tag ()
2652de2362d3Smrg{
26530d16fef4Smrg    $debug_cmd
26540d16fef4Smrg
2655de2362d3Smrg    if test -n "$available_tags" && test -z "$tagname"; then
2656de2362d3Smrg      CC_quoted=
2657de2362d3Smrg      for arg in $CC; do
2658de2362d3Smrg	func_append_quoted CC_quoted "$arg"
2659de2362d3Smrg      done
2660de2362d3Smrg      CC_expanded=`func_echo_all $CC`
2661de2362d3Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
2662de2362d3Smrg      case $@ in
2663de2362d3Smrg      # Blanks in the command may have been stripped by the calling shell,
2664de2362d3Smrg      # but not from the CC environment variable when configure was run.
2665de2362d3Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2666de2362d3Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
2667de2362d3Smrg      # Blanks at the start of $base_compile will cause this to fail
2668de2362d3Smrg      # if we don't check for them as well.
2669de2362d3Smrg      *)
2670de2362d3Smrg	for z in $available_tags; do
2671de2362d3Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
2672de2362d3Smrg	    # Evaluate the configuration.
26730d16fef4Smrg	    eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
2674de2362d3Smrg	    CC_quoted=
2675de2362d3Smrg	    for arg in $CC; do
2676de2362d3Smrg	      # Double-quote args containing other shell metacharacters.
2677de2362d3Smrg	      func_append_quoted CC_quoted "$arg"
2678de2362d3Smrg	    done
2679de2362d3Smrg	    CC_expanded=`func_echo_all $CC`
2680de2362d3Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
2681de2362d3Smrg	    case "$@ " in
2682de2362d3Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2683de2362d3Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
2684de2362d3Smrg	      # The compiler in the base compile command matches
2685de2362d3Smrg	      # the one in the tagged configuration.
2686de2362d3Smrg	      # Assume this is the tagged configuration we want.
2687de2362d3Smrg	      tagname=$z
2688de2362d3Smrg	      break
2689de2362d3Smrg	      ;;
2690de2362d3Smrg	    esac
2691de2362d3Smrg	  fi
2692de2362d3Smrg	done
2693de2362d3Smrg	# If $tagname still isn't set, then no tagged configuration
2694de2362d3Smrg	# was found and let the user know that the "--tag" command
2695de2362d3Smrg	# line option must be used.
2696de2362d3Smrg	if test -z "$tagname"; then
2697de2362d3Smrg	  func_echo "unable to infer tagged configuration"
26980d16fef4Smrg	  func_fatal_error "specify a tag with '--tag'"
2699de2362d3Smrg#	else
2700de2362d3Smrg#	  func_verbose "using $tagname tagged configuration"
2701de2362d3Smrg	fi
2702de2362d3Smrg	;;
2703de2362d3Smrg      esac
2704de2362d3Smrg    fi
2705de2362d3Smrg}
2706de2362d3Smrg
2707de2362d3Smrg
2708de2362d3Smrg
2709de2362d3Smrg# func_write_libtool_object output_name pic_name nonpic_name
2710de2362d3Smrg# Create a libtool object file (analogous to a ".la" file),
2711de2362d3Smrg# but don't create it if we're doing a dry run.
2712de2362d3Smrgfunc_write_libtool_object ()
2713de2362d3Smrg{
27140d16fef4Smrg    write_libobj=$1
27150d16fef4Smrg    if test yes = "$build_libtool_libs"; then
27160d16fef4Smrg      write_lobj=\'$2\'
2717de2362d3Smrg    else
2718de2362d3Smrg      write_lobj=none
2719de2362d3Smrg    fi
2720de2362d3Smrg
27210d16fef4Smrg    if test yes = "$build_old_libs"; then
27220d16fef4Smrg      write_oldobj=\'$3\'
2723de2362d3Smrg    else
2724de2362d3Smrg      write_oldobj=none
2725de2362d3Smrg    fi
2726de2362d3Smrg
2727de2362d3Smrg    $opt_dry_run || {
2728de2362d3Smrg      cat >${write_libobj}T <<EOF
2729de2362d3Smrg# $write_libobj - a libtool object file
27300d16fef4Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
2731de2362d3Smrg#
2732de2362d3Smrg# Please DO NOT delete this file!
2733de2362d3Smrg# It is necessary for linking the library.
2734de2362d3Smrg
2735de2362d3Smrg# Name of the PIC object.
2736de2362d3Smrgpic_object=$write_lobj
2737de2362d3Smrg
2738de2362d3Smrg# Name of the non-PIC object
2739de2362d3Smrgnon_pic_object=$write_oldobj
2740de2362d3Smrg
2741de2362d3SmrgEOF
27420d16fef4Smrg      $MV "${write_libobj}T" "$write_libobj"
2743de2362d3Smrg    }
2744de2362d3Smrg}
2745de2362d3Smrg
2746de2362d3Smrg
2747de2362d3Smrg##################################################
2748de2362d3Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
2749de2362d3Smrg##################################################
2750de2362d3Smrg
2751de2362d3Smrg# func_convert_core_file_wine_to_w32 ARG
2752de2362d3Smrg# Helper function used by file name conversion functions when $build is *nix,
2753de2362d3Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
2754de2362d3Smrg# correctly configured wine environment available, with the winepath program
2755de2362d3Smrg# in $build's $PATH.
2756de2362d3Smrg#
2757de2362d3Smrg# ARG is the $build file name to be converted to w32 format.
2758de2362d3Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
2759de2362d3Smrg# be empty on error (or when ARG is empty)
2760de2362d3Smrgfunc_convert_core_file_wine_to_w32 ()
2761de2362d3Smrg{
27620d16fef4Smrg  $debug_cmd
27630d16fef4Smrg
27640d16fef4Smrg  func_convert_core_file_wine_to_w32_result=$1
2765de2362d3Smrg  if test -n "$1"; then
2766de2362d3Smrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
2767de2362d3Smrg    # are forced to check the contents of stdout. On the other hand, if the
2768de2362d3Smrg    # command is not found, the shell will set an exit code of 127 and print
2769de2362d3Smrg    # *an error message* to stdout. So we must check for both error code of
2770de2362d3Smrg    # zero AND non-empty stdout, which explains the odd construction:
2771de2362d3Smrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
27720d16fef4Smrg    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
2773de2362d3Smrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
27740d16fef4Smrg        $SED -e "$sed_naive_backslashify"`
2775de2362d3Smrg    else
2776de2362d3Smrg      func_convert_core_file_wine_to_w32_result=
2777de2362d3Smrg    fi
2778de2362d3Smrg  fi
2779de2362d3Smrg}
2780de2362d3Smrg# end: func_convert_core_file_wine_to_w32
2781de2362d3Smrg
2782de2362d3Smrg
2783de2362d3Smrg# func_convert_core_path_wine_to_w32 ARG
2784de2362d3Smrg# Helper function used by path conversion functions when $build is *nix, and
2785de2362d3Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
2786de2362d3Smrg# configured wine environment available, with the winepath program in $build's
2787de2362d3Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
2788de2362d3Smrg#
2789de2362d3Smrg# ARG is path to be converted from $build format to win32.
2790de2362d3Smrg# Result is available in $func_convert_core_path_wine_to_w32_result.
2791de2362d3Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
2792de2362d3Smrg# are convertible, then the result may be empty.
2793de2362d3Smrgfunc_convert_core_path_wine_to_w32 ()
2794de2362d3Smrg{
27950d16fef4Smrg  $debug_cmd
27960d16fef4Smrg
2797de2362d3Smrg  # unfortunately, winepath doesn't convert paths, only file names
27980d16fef4Smrg  func_convert_core_path_wine_to_w32_result=
2799de2362d3Smrg  if test -n "$1"; then
2800de2362d3Smrg    oldIFS=$IFS
2801de2362d3Smrg    IFS=:
2802de2362d3Smrg    for func_convert_core_path_wine_to_w32_f in $1; do
2803de2362d3Smrg      IFS=$oldIFS
2804de2362d3Smrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
28050d16fef4Smrg      if test -n "$func_convert_core_file_wine_to_w32_result"; then
2806de2362d3Smrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
28070d16fef4Smrg          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
2808de2362d3Smrg        else
2809de2362d3Smrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
2810de2362d3Smrg        fi
2811de2362d3Smrg      fi
2812de2362d3Smrg    done
2813de2362d3Smrg    IFS=$oldIFS
2814de2362d3Smrg  fi
2815de2362d3Smrg}
2816de2362d3Smrg# end: func_convert_core_path_wine_to_w32
2817de2362d3Smrg
2818de2362d3Smrg
2819de2362d3Smrg# func_cygpath ARGS...
2820de2362d3Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
2821de2362d3Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
2822de2362d3Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
2823de2362d3Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
2824de2362d3Smrg# file name or path is assumed to be in w32 format, as previously converted
2825de2362d3Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
2826de2362d3Smrg# or path in func_cygpath_result (input file name or path is assumed to be in
2827de2362d3Smrg# Cygwin format). Returns an empty string on error.
2828de2362d3Smrg#
2829de2362d3Smrg# ARGS are passed to cygpath, with the last one being the file name or path to
2830de2362d3Smrg# be converted.
2831de2362d3Smrg#
2832de2362d3Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
2833de2362d3Smrg# environment variable; do not put it in $PATH.
2834de2362d3Smrgfunc_cygpath ()
2835de2362d3Smrg{
28360d16fef4Smrg  $debug_cmd
28370d16fef4Smrg
2838de2362d3Smrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
2839de2362d3Smrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
2840de2362d3Smrg    if test "$?" -ne 0; then
2841de2362d3Smrg      # on failure, ensure result is empty
2842de2362d3Smrg      func_cygpath_result=
2843de2362d3Smrg    fi
2844de2362d3Smrg  else
2845de2362d3Smrg    func_cygpath_result=
28460d16fef4Smrg    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
2847de2362d3Smrg  fi
2848de2362d3Smrg}
2849de2362d3Smrg#end: func_cygpath
2850de2362d3Smrg
2851de2362d3Smrg
2852de2362d3Smrg# func_convert_core_msys_to_w32 ARG
2853de2362d3Smrg# Convert file name or path ARG from MSYS format to w32 format.  Return
2854de2362d3Smrg# result in func_convert_core_msys_to_w32_result.
2855de2362d3Smrgfunc_convert_core_msys_to_w32 ()
2856de2362d3Smrg{
28570d16fef4Smrg  $debug_cmd
28580d16fef4Smrg
2859de2362d3Smrg  # awkward: cmd appends spaces to result
2860de2362d3Smrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
28610d16fef4Smrg    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
2862de2362d3Smrg}
2863de2362d3Smrg#end: func_convert_core_msys_to_w32
2864de2362d3Smrg
2865de2362d3Smrg
2866de2362d3Smrg# func_convert_file_check ARG1 ARG2
2867de2362d3Smrg# Verify that ARG1 (a file name in $build format) was converted to $host
2868de2362d3Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
2869de2362d3Smrg# func_to_host_file_result to ARG1).
2870de2362d3Smrgfunc_convert_file_check ()
2871de2362d3Smrg{
28720d16fef4Smrg  $debug_cmd
28730d16fef4Smrg
28740d16fef4Smrg  if test -z "$2" && test -n "$1"; then
2875de2362d3Smrg    func_error "Could not determine host file name corresponding to"
28760d16fef4Smrg    func_error "  '$1'"
2877de2362d3Smrg    func_error "Continuing, but uninstalled executables may not work."
2878de2362d3Smrg    # Fallback:
28790d16fef4Smrg    func_to_host_file_result=$1
2880de2362d3Smrg  fi
2881de2362d3Smrg}
2882de2362d3Smrg# end func_convert_file_check
2883de2362d3Smrg
2884de2362d3Smrg
2885de2362d3Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
2886de2362d3Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host
2887de2362d3Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
2888de2362d3Smrg# func_to_host_file_result to a simplistic fallback value (see below).
2889de2362d3Smrgfunc_convert_path_check ()
2890de2362d3Smrg{
28910d16fef4Smrg  $debug_cmd
28920d16fef4Smrg
2893de2362d3Smrg  if test -z "$4" && test -n "$3"; then
2894de2362d3Smrg    func_error "Could not determine the host path corresponding to"
28950d16fef4Smrg    func_error "  '$3'"
2896de2362d3Smrg    func_error "Continuing, but uninstalled executables may not work."
2897de2362d3Smrg    # Fallback.  This is a deliberately simplistic "conversion" and
2898de2362d3Smrg    # should not be "improved".  See libtool.info.
2899de2362d3Smrg    if test "x$1" != "x$2"; then
2900de2362d3Smrg      lt_replace_pathsep_chars="s|$1|$2|g"
2901de2362d3Smrg      func_to_host_path_result=`echo "$3" |
2902de2362d3Smrg        $SED -e "$lt_replace_pathsep_chars"`
2903de2362d3Smrg    else
29040d16fef4Smrg      func_to_host_path_result=$3
2905de2362d3Smrg    fi
2906de2362d3Smrg  fi
2907de2362d3Smrg}
2908de2362d3Smrg# end func_convert_path_check
2909de2362d3Smrg
2910de2362d3Smrg
2911de2362d3Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
2912de2362d3Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
2913de2362d3Smrg# and appending REPL if ORIG matches BACKPAT.
2914de2362d3Smrgfunc_convert_path_front_back_pathsep ()
2915de2362d3Smrg{
29160d16fef4Smrg  $debug_cmd
29170d16fef4Smrg
2918de2362d3Smrg  case $4 in
29190d16fef4Smrg  $1 ) func_to_host_path_result=$3$func_to_host_path_result
2920de2362d3Smrg    ;;
2921de2362d3Smrg  esac
2922de2362d3Smrg  case $4 in
2923de2362d3Smrg  $2 ) func_append func_to_host_path_result "$3"
2924de2362d3Smrg    ;;
2925de2362d3Smrg  esac
2926de2362d3Smrg}
2927de2362d3Smrg# end func_convert_path_front_back_pathsep
2928de2362d3Smrg
2929de2362d3Smrg
2930de2362d3Smrg##################################################
2931de2362d3Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
2932de2362d3Smrg##################################################
29330d16fef4Smrg# invoked via '$to_host_file_cmd ARG'
2934de2362d3Smrg#
2935de2362d3Smrg# In each case, ARG is the path to be converted from $build to $host format.
2936de2362d3Smrg# Result will be available in $func_to_host_file_result.
2937de2362d3Smrg
2938de2362d3Smrg
2939de2362d3Smrg# func_to_host_file ARG
2940de2362d3Smrg# Converts the file name ARG from $build format to $host format. Return result
2941de2362d3Smrg# in func_to_host_file_result.
2942de2362d3Smrgfunc_to_host_file ()
2943de2362d3Smrg{
29440d16fef4Smrg  $debug_cmd
29450d16fef4Smrg
2946de2362d3Smrg  $to_host_file_cmd "$1"
2947de2362d3Smrg}
2948de2362d3Smrg# end func_to_host_file
2949de2362d3Smrg
2950de2362d3Smrg
2951de2362d3Smrg# func_to_tool_file ARG LAZY
2952de2362d3Smrg# converts the file name ARG from $build format to toolchain format. Return
2953de2362d3Smrg# result in func_to_tool_file_result.  If the conversion in use is listed
2954de2362d3Smrg# in (the comma separated) LAZY, no conversion takes place.
2955de2362d3Smrgfunc_to_tool_file ()
2956de2362d3Smrg{
29570d16fef4Smrg  $debug_cmd
29580d16fef4Smrg
2959de2362d3Smrg  case ,$2, in
2960de2362d3Smrg    *,"$to_tool_file_cmd",*)
2961de2362d3Smrg      func_to_tool_file_result=$1
2962de2362d3Smrg      ;;
2963de2362d3Smrg    *)
2964de2362d3Smrg      $to_tool_file_cmd "$1"
2965de2362d3Smrg      func_to_tool_file_result=$func_to_host_file_result
2966de2362d3Smrg      ;;
2967de2362d3Smrg  esac
2968de2362d3Smrg}
2969de2362d3Smrg# end func_to_tool_file
2970de2362d3Smrg
2971de2362d3Smrg
2972de2362d3Smrg# func_convert_file_noop ARG
2973de2362d3Smrg# Copy ARG to func_to_host_file_result.
2974de2362d3Smrgfunc_convert_file_noop ()
2975de2362d3Smrg{
29760d16fef4Smrg  func_to_host_file_result=$1
2977de2362d3Smrg}
2978de2362d3Smrg# end func_convert_file_noop
2979de2362d3Smrg
2980de2362d3Smrg
2981de2362d3Smrg# func_convert_file_msys_to_w32 ARG
2982de2362d3Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
2983de2362d3Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
2984de2362d3Smrg# func_to_host_file_result.
2985de2362d3Smrgfunc_convert_file_msys_to_w32 ()
2986de2362d3Smrg{
29870d16fef4Smrg  $debug_cmd
29880d16fef4Smrg
29890d16fef4Smrg  func_to_host_file_result=$1
2990de2362d3Smrg  if test -n "$1"; then
2991de2362d3Smrg    func_convert_core_msys_to_w32 "$1"
29920d16fef4Smrg    func_to_host_file_result=$func_convert_core_msys_to_w32_result
2993de2362d3Smrg  fi
2994de2362d3Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
2995de2362d3Smrg}
2996de2362d3Smrg# end func_convert_file_msys_to_w32
2997de2362d3Smrg
2998de2362d3Smrg
2999de2362d3Smrg# func_convert_file_cygwin_to_w32 ARG
3000de2362d3Smrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
3001de2362d3Smrg# func_to_host_file_result.
3002de2362d3Smrgfunc_convert_file_cygwin_to_w32 ()
3003de2362d3Smrg{
30040d16fef4Smrg  $debug_cmd
30050d16fef4Smrg
30060d16fef4Smrg  func_to_host_file_result=$1
3007de2362d3Smrg  if test -n "$1"; then
3008de2362d3Smrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
3009de2362d3Smrg    # LT_CYGPATH in this case.
3010de2362d3Smrg    func_to_host_file_result=`cygpath -m "$1"`
3011de2362d3Smrg  fi
3012de2362d3Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3013de2362d3Smrg}
3014de2362d3Smrg# end func_convert_file_cygwin_to_w32
3015de2362d3Smrg
3016de2362d3Smrg
3017de2362d3Smrg# func_convert_file_nix_to_w32 ARG
3018de2362d3Smrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
3019de2362d3Smrg# and a working winepath. Returns result in func_to_host_file_result.
3020de2362d3Smrgfunc_convert_file_nix_to_w32 ()
3021de2362d3Smrg{
30220d16fef4Smrg  $debug_cmd
30230d16fef4Smrg
30240d16fef4Smrg  func_to_host_file_result=$1
3025de2362d3Smrg  if test -n "$1"; then
3026de2362d3Smrg    func_convert_core_file_wine_to_w32 "$1"
30270d16fef4Smrg    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
3028de2362d3Smrg  fi
3029de2362d3Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3030de2362d3Smrg}
3031de2362d3Smrg# end func_convert_file_nix_to_w32
3032de2362d3Smrg
3033de2362d3Smrg
3034de2362d3Smrg# func_convert_file_msys_to_cygwin ARG
3035de2362d3Smrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3036de2362d3Smrg# Returns result in func_to_host_file_result.
3037de2362d3Smrgfunc_convert_file_msys_to_cygwin ()
3038de2362d3Smrg{
30390d16fef4Smrg  $debug_cmd
30400d16fef4Smrg
30410d16fef4Smrg  func_to_host_file_result=$1
3042de2362d3Smrg  if test -n "$1"; then
3043de2362d3Smrg    func_convert_core_msys_to_w32 "$1"
3044de2362d3Smrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
30450d16fef4Smrg    func_to_host_file_result=$func_cygpath_result
3046de2362d3Smrg  fi
3047de2362d3Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3048de2362d3Smrg}
3049de2362d3Smrg# end func_convert_file_msys_to_cygwin
3050de2362d3Smrg
3051de2362d3Smrg
3052de2362d3Smrg# func_convert_file_nix_to_cygwin ARG
3053de2362d3Smrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
3054de2362d3Smrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
3055de2362d3Smrg# in func_to_host_file_result.
3056de2362d3Smrgfunc_convert_file_nix_to_cygwin ()
3057de2362d3Smrg{
30580d16fef4Smrg  $debug_cmd
30590d16fef4Smrg
30600d16fef4Smrg  func_to_host_file_result=$1
3061de2362d3Smrg  if test -n "$1"; then
3062de2362d3Smrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
3063de2362d3Smrg    func_convert_core_file_wine_to_w32 "$1"
3064de2362d3Smrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
30650d16fef4Smrg    func_to_host_file_result=$func_cygpath_result
3066de2362d3Smrg  fi
3067de2362d3Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3068de2362d3Smrg}
3069de2362d3Smrg# end func_convert_file_nix_to_cygwin
3070de2362d3Smrg
3071de2362d3Smrg
3072de2362d3Smrg#############################################
3073de2362d3Smrg# $build to $host PATH CONVERSION FUNCTIONS #
3074de2362d3Smrg#############################################
30750d16fef4Smrg# invoked via '$to_host_path_cmd ARG'
3076de2362d3Smrg#
3077de2362d3Smrg# In each case, ARG is the path to be converted from $build to $host format.
3078de2362d3Smrg# The result will be available in $func_to_host_path_result.
3079de2362d3Smrg#
3080de2362d3Smrg# Path separators are also converted from $build format to $host format.  If
3081de2362d3Smrg# ARG begins or ends with a path separator character, it is preserved (but
3082de2362d3Smrg# converted to $host format) on output.
3083de2362d3Smrg#
3084de2362d3Smrg# All path conversion functions are named using the following convention:
3085de2362d3Smrg#   file name conversion function    : func_convert_file_X_to_Y ()
3086de2362d3Smrg#   path conversion function         : func_convert_path_X_to_Y ()
3087de2362d3Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the
3088de2362d3Smrg# same.  If conversion functions are added for new $build/$host combinations,
3089de2362d3Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
3090de2362d3Smrg# will break.
3091de2362d3Smrg
3092de2362d3Smrg
3093de2362d3Smrg# func_init_to_host_path_cmd
3094de2362d3Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
3095de2362d3Smrg# appropriate value, based on the value of $to_host_file_cmd.
3096de2362d3Smrgto_host_path_cmd=
3097de2362d3Smrgfunc_init_to_host_path_cmd ()
3098de2362d3Smrg{
30990d16fef4Smrg  $debug_cmd
31000d16fef4Smrg
3101de2362d3Smrg  if test -z "$to_host_path_cmd"; then
3102de2362d3Smrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
31030d16fef4Smrg    to_host_path_cmd=func_convert_path_$func_stripname_result
3104de2362d3Smrg  fi
3105de2362d3Smrg}
3106de2362d3Smrg
3107de2362d3Smrg
3108de2362d3Smrg# func_to_host_path ARG
3109de2362d3Smrg# Converts the path ARG from $build format to $host format. Return result
3110de2362d3Smrg# in func_to_host_path_result.
3111de2362d3Smrgfunc_to_host_path ()
3112de2362d3Smrg{
31130d16fef4Smrg  $debug_cmd
31140d16fef4Smrg
3115de2362d3Smrg  func_init_to_host_path_cmd
3116de2362d3Smrg  $to_host_path_cmd "$1"
3117de2362d3Smrg}
3118de2362d3Smrg# end func_to_host_path
3119de2362d3Smrg
3120de2362d3Smrg
3121de2362d3Smrg# func_convert_path_noop ARG
3122de2362d3Smrg# Copy ARG to func_to_host_path_result.
3123de2362d3Smrgfunc_convert_path_noop ()
3124de2362d3Smrg{
31250d16fef4Smrg  func_to_host_path_result=$1
3126de2362d3Smrg}
3127de2362d3Smrg# end func_convert_path_noop
3128de2362d3Smrg
3129de2362d3Smrg
3130de2362d3Smrg# func_convert_path_msys_to_w32 ARG
3131de2362d3Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
3132de2362d3Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
3133de2362d3Smrg# func_to_host_path_result.
3134de2362d3Smrgfunc_convert_path_msys_to_w32 ()
3135de2362d3Smrg{
31360d16fef4Smrg  $debug_cmd
31370d16fef4Smrg
31380d16fef4Smrg  func_to_host_path_result=$1
3139de2362d3Smrg  if test -n "$1"; then
3140de2362d3Smrg    # Remove leading and trailing path separator characters from ARG.  MSYS
3141de2362d3Smrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
3142de2362d3Smrg    # and winepath ignores them completely.
3143de2362d3Smrg    func_stripname : : "$1"
3144de2362d3Smrg    func_to_host_path_tmp1=$func_stripname_result
3145de2362d3Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
31460d16fef4Smrg    func_to_host_path_result=$func_convert_core_msys_to_w32_result
3147de2362d3Smrg    func_convert_path_check : ";" \
3148de2362d3Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3149de2362d3Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3150de2362d3Smrg  fi
3151de2362d3Smrg}
3152de2362d3Smrg# end func_convert_path_msys_to_w32
3153de2362d3Smrg
3154de2362d3Smrg
3155de2362d3Smrg# func_convert_path_cygwin_to_w32 ARG
3156de2362d3Smrg# Convert path ARG from Cygwin to w32 format.  Returns result in
3157de2362d3Smrg# func_to_host_file_result.
3158de2362d3Smrgfunc_convert_path_cygwin_to_w32 ()
3159de2362d3Smrg{
31600d16fef4Smrg  $debug_cmd
31610d16fef4Smrg
31620d16fef4Smrg  func_to_host_path_result=$1
3163de2362d3Smrg  if test -n "$1"; then
3164de2362d3Smrg    # See func_convert_path_msys_to_w32:
3165de2362d3Smrg    func_stripname : : "$1"
3166de2362d3Smrg    func_to_host_path_tmp1=$func_stripname_result
3167de2362d3Smrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
3168de2362d3Smrg    func_convert_path_check : ";" \
3169de2362d3Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3170de2362d3Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3171de2362d3Smrg  fi
3172de2362d3Smrg}
3173de2362d3Smrg# end func_convert_path_cygwin_to_w32
3174de2362d3Smrg
3175de2362d3Smrg
3176de2362d3Smrg# func_convert_path_nix_to_w32 ARG
3177de2362d3Smrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
3178de2362d3Smrg# a working winepath.  Returns result in func_to_host_file_result.
3179de2362d3Smrgfunc_convert_path_nix_to_w32 ()
3180de2362d3Smrg{
31810d16fef4Smrg  $debug_cmd
31820d16fef4Smrg
31830d16fef4Smrg  func_to_host_path_result=$1
3184de2362d3Smrg  if test -n "$1"; then
3185de2362d3Smrg    # See func_convert_path_msys_to_w32:
3186de2362d3Smrg    func_stripname : : "$1"
3187de2362d3Smrg    func_to_host_path_tmp1=$func_stripname_result
3188de2362d3Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
31890d16fef4Smrg    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
3190de2362d3Smrg    func_convert_path_check : ";" \
3191de2362d3Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3192de2362d3Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3193de2362d3Smrg  fi
3194de2362d3Smrg}
3195de2362d3Smrg# end func_convert_path_nix_to_w32
3196de2362d3Smrg
3197de2362d3Smrg
3198de2362d3Smrg# func_convert_path_msys_to_cygwin ARG
3199de2362d3Smrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3200de2362d3Smrg# Returns result in func_to_host_file_result.
3201de2362d3Smrgfunc_convert_path_msys_to_cygwin ()
3202de2362d3Smrg{
32030d16fef4Smrg  $debug_cmd
32040d16fef4Smrg
32050d16fef4Smrg  func_to_host_path_result=$1
3206de2362d3Smrg  if test -n "$1"; then
3207de2362d3Smrg    # See func_convert_path_msys_to_w32:
3208de2362d3Smrg    func_stripname : : "$1"
3209de2362d3Smrg    func_to_host_path_tmp1=$func_stripname_result
3210de2362d3Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3211de2362d3Smrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
32120d16fef4Smrg    func_to_host_path_result=$func_cygpath_result
3213de2362d3Smrg    func_convert_path_check : : \
3214de2362d3Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3215de2362d3Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3216de2362d3Smrg  fi
3217de2362d3Smrg}
3218de2362d3Smrg# end func_convert_path_msys_to_cygwin
3219de2362d3Smrg
3220de2362d3Smrg
3221de2362d3Smrg# func_convert_path_nix_to_cygwin ARG
3222de2362d3Smrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
3223de2362d3Smrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
3224de2362d3Smrg# func_to_host_file_result.
3225de2362d3Smrgfunc_convert_path_nix_to_cygwin ()
3226de2362d3Smrg{
32270d16fef4Smrg  $debug_cmd
32280d16fef4Smrg
32290d16fef4Smrg  func_to_host_path_result=$1
3230de2362d3Smrg  if test -n "$1"; then
3231de2362d3Smrg    # Remove leading and trailing path separator characters from
3232de2362d3Smrg    # ARG. msys behavior is inconsistent here, cygpath turns them
3233de2362d3Smrg    # into '.;' and ';.', and winepath ignores them completely.
3234de2362d3Smrg    func_stripname : : "$1"
3235de2362d3Smrg    func_to_host_path_tmp1=$func_stripname_result
3236de2362d3Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3237de2362d3Smrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
32380d16fef4Smrg    func_to_host_path_result=$func_cygpath_result
3239de2362d3Smrg    func_convert_path_check : : \
3240de2362d3Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3241de2362d3Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3242de2362d3Smrg  fi
3243de2362d3Smrg}
3244de2362d3Smrg# end func_convert_path_nix_to_cygwin
3245de2362d3Smrg
3246de2362d3Smrg
32470d16fef4Smrg# func_dll_def_p FILE
32480d16fef4Smrg# True iff FILE is a Windows DLL '.def' file.
32490d16fef4Smrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4
32500d16fef4Smrgfunc_dll_def_p ()
32510d16fef4Smrg{
32520d16fef4Smrg  $debug_cmd
32530d16fef4Smrg
32540d16fef4Smrg  func_dll_def_p_tmp=`$SED -n \
32550d16fef4Smrg    -e 's/^[	 ]*//' \
32560d16fef4Smrg    -e '/^\(;.*\)*$/d' \
32570d16fef4Smrg    -e 's/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p' \
32580d16fef4Smrg    -e q \
32590d16fef4Smrg    "$1"`
32600d16fef4Smrg  test DEF = "$func_dll_def_p_tmp"
32610d16fef4Smrg}
32620d16fef4Smrg
32630d16fef4Smrg
3264de2362d3Smrg# func_mode_compile arg...
3265de2362d3Smrgfunc_mode_compile ()
3266de2362d3Smrg{
32670d16fef4Smrg    $debug_cmd
32680d16fef4Smrg
3269de2362d3Smrg    # Get the compilation command and the source file.
3270de2362d3Smrg    base_compile=
32710d16fef4Smrg    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
3272de2362d3Smrg    suppress_opt=yes
3273de2362d3Smrg    suppress_output=
3274de2362d3Smrg    arg_mode=normal
3275de2362d3Smrg    libobj=
3276de2362d3Smrg    later=
3277de2362d3Smrg    pie_flag=
3278de2362d3Smrg
3279de2362d3Smrg    for arg
3280de2362d3Smrg    do
3281de2362d3Smrg      case $arg_mode in
3282de2362d3Smrg      arg  )
3283de2362d3Smrg	# do not "continue".  Instead, add this to base_compile
32840d16fef4Smrg	lastarg=$arg
3285de2362d3Smrg	arg_mode=normal
3286de2362d3Smrg	;;
3287de2362d3Smrg
3288de2362d3Smrg      target )
32890d16fef4Smrg	libobj=$arg
3290de2362d3Smrg	arg_mode=normal
3291de2362d3Smrg	continue
3292de2362d3Smrg	;;
3293de2362d3Smrg
3294de2362d3Smrg      normal )
3295de2362d3Smrg	# Accept any command-line options.
3296de2362d3Smrg	case $arg in
3297de2362d3Smrg	-o)
3298de2362d3Smrg	  test -n "$libobj" && \
32990d16fef4Smrg	    func_fatal_error "you cannot specify '-o' more than once"
3300de2362d3Smrg	  arg_mode=target
3301de2362d3Smrg	  continue
3302de2362d3Smrg	  ;;
3303de2362d3Smrg
3304de2362d3Smrg	-pie | -fpie | -fPIE)
3305de2362d3Smrg          func_append pie_flag " $arg"
3306de2362d3Smrg	  continue
3307de2362d3Smrg	  ;;
3308de2362d3Smrg
3309de2362d3Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
3310de2362d3Smrg	  func_append later " $arg"
3311de2362d3Smrg	  continue
3312de2362d3Smrg	  ;;
3313de2362d3Smrg
3314de2362d3Smrg	-no-suppress)
3315de2362d3Smrg	  suppress_opt=no
3316de2362d3Smrg	  continue
3317de2362d3Smrg	  ;;
3318de2362d3Smrg
3319de2362d3Smrg	-Xcompiler)
3320de2362d3Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
3321de2362d3Smrg	  continue      #  The current "srcfile" will either be retained or
3322de2362d3Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
3323de2362d3Smrg
3324de2362d3Smrg	-Wc,*)
3325de2362d3Smrg	  func_stripname '-Wc,' '' "$arg"
3326de2362d3Smrg	  args=$func_stripname_result
3327de2362d3Smrg	  lastarg=
33280d16fef4Smrg	  save_ifs=$IFS; IFS=,
3329de2362d3Smrg	  for arg in $args; do
33300d16fef4Smrg	    IFS=$save_ifs
3331de2362d3Smrg	    func_append_quoted lastarg "$arg"
3332de2362d3Smrg	  done
33330d16fef4Smrg	  IFS=$save_ifs
3334de2362d3Smrg	  func_stripname ' ' '' "$lastarg"
3335de2362d3Smrg	  lastarg=$func_stripname_result
3336de2362d3Smrg
3337de2362d3Smrg	  # Add the arguments to base_compile.
3338de2362d3Smrg	  func_append base_compile " $lastarg"
3339de2362d3Smrg	  continue
3340de2362d3Smrg	  ;;
3341de2362d3Smrg
3342de2362d3Smrg	*)
3343de2362d3Smrg	  # Accept the current argument as the source file.
3344de2362d3Smrg	  # The previous "srcfile" becomes the current argument.
3345de2362d3Smrg	  #
33460d16fef4Smrg	  lastarg=$srcfile
33470d16fef4Smrg	  srcfile=$arg
3348de2362d3Smrg	  ;;
3349de2362d3Smrg	esac  #  case $arg
3350de2362d3Smrg	;;
3351de2362d3Smrg      esac    #  case $arg_mode
3352de2362d3Smrg
3353de2362d3Smrg      # Aesthetically quote the previous argument.
3354de2362d3Smrg      func_append_quoted base_compile "$lastarg"
3355de2362d3Smrg    done # for arg
3356de2362d3Smrg
3357de2362d3Smrg    case $arg_mode in
3358de2362d3Smrg    arg)
3359de2362d3Smrg      func_fatal_error "you must specify an argument for -Xcompile"
3360de2362d3Smrg      ;;
3361de2362d3Smrg    target)
33620d16fef4Smrg      func_fatal_error "you must specify a target with '-o'"
3363de2362d3Smrg      ;;
3364de2362d3Smrg    *)
3365de2362d3Smrg      # Get the name of the library object.
3366de2362d3Smrg      test -z "$libobj" && {
3367de2362d3Smrg	func_basename "$srcfile"
33680d16fef4Smrg	libobj=$func_basename_result
3369de2362d3Smrg      }
3370de2362d3Smrg      ;;
3371de2362d3Smrg    esac
3372de2362d3Smrg
3373de2362d3Smrg    # Recognize several different file suffixes.
3374de2362d3Smrg    # If the user specifies -o file.o, it is replaced with file.lo
3375de2362d3Smrg    case $libobj in
3376de2362d3Smrg    *.[cCFSifmso] | \
3377de2362d3Smrg    *.ada | *.adb | *.ads | *.asm | \
3378de2362d3Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
3379de2362d3Smrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
3380de2362d3Smrg      func_xform "$libobj"
3381de2362d3Smrg      libobj=$func_xform_result
3382de2362d3Smrg      ;;
3383de2362d3Smrg    esac
3384de2362d3Smrg
3385de2362d3Smrg    case $libobj in
3386de2362d3Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
3387de2362d3Smrg    *)
33880d16fef4Smrg      func_fatal_error "cannot determine name of library object from '$libobj'"
3389de2362d3Smrg      ;;
3390de2362d3Smrg    esac
3391de2362d3Smrg
3392de2362d3Smrg    func_infer_tag $base_compile
3393de2362d3Smrg
3394de2362d3Smrg    for arg in $later; do
3395de2362d3Smrg      case $arg in
3396de2362d3Smrg      -shared)
33970d16fef4Smrg	test yes = "$build_libtool_libs" \
33980d16fef4Smrg	  || func_fatal_configuration "cannot build a shared library"
3399de2362d3Smrg	build_old_libs=no
3400de2362d3Smrg	continue
3401de2362d3Smrg	;;
3402de2362d3Smrg
3403de2362d3Smrg      -static)
3404de2362d3Smrg	build_libtool_libs=no
3405de2362d3Smrg	build_old_libs=yes
3406de2362d3Smrg	continue
3407de2362d3Smrg	;;
3408de2362d3Smrg
3409de2362d3Smrg      -prefer-pic)
3410de2362d3Smrg	pic_mode=yes
3411de2362d3Smrg	continue
3412de2362d3Smrg	;;
3413de2362d3Smrg
3414de2362d3Smrg      -prefer-non-pic)
3415de2362d3Smrg	pic_mode=no
3416de2362d3Smrg	continue
3417de2362d3Smrg	;;
3418de2362d3Smrg      esac
3419de2362d3Smrg    done
3420de2362d3Smrg
3421de2362d3Smrg    func_quote_for_eval "$libobj"
3422de2362d3Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
3423de2362d3Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
34240d16fef4Smrg      && func_warning "libobj name '$libobj' may not contain shell special characters."
3425de2362d3Smrg    func_dirname_and_basename "$obj" "/" ""
34260d16fef4Smrg    objname=$func_basename_result
34270d16fef4Smrg    xdir=$func_dirname_result
34280d16fef4Smrg    lobj=$xdir$objdir/$objname
3429de2362d3Smrg
3430de2362d3Smrg    test -z "$base_compile" && \
3431de2362d3Smrg      func_fatal_help "you must specify a compilation command"
3432de2362d3Smrg
3433de2362d3Smrg    # Delete any leftover library objects.
34340d16fef4Smrg    if test yes = "$build_old_libs"; then
3435de2362d3Smrg      removelist="$obj $lobj $libobj ${libobj}T"
3436de2362d3Smrg    else
3437de2362d3Smrg      removelist="$lobj $libobj ${libobj}T"
3438de2362d3Smrg    fi
3439de2362d3Smrg
3440de2362d3Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
3441de2362d3Smrg    case $host_os in
3442de2362d3Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
3443de2362d3Smrg      pic_mode=default
3444de2362d3Smrg      ;;
3445de2362d3Smrg    esac
34460d16fef4Smrg    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
3447de2362d3Smrg      # non-PIC code in shared libraries is not supported
3448de2362d3Smrg      pic_mode=default
3449de2362d3Smrg    fi
3450de2362d3Smrg
3451de2362d3Smrg    # Calculate the filename of the output object if compiler does
3452de2362d3Smrg    # not support -o with -c
34530d16fef4Smrg    if test no = "$compiler_c_o"; then
34540d16fef4Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
34550d16fef4Smrg      lockfile=$output_obj.lock
3456de2362d3Smrg    else
3457de2362d3Smrg      output_obj=
3458de2362d3Smrg      need_locks=no
3459de2362d3Smrg      lockfile=
3460de2362d3Smrg    fi
3461de2362d3Smrg
3462de2362d3Smrg    # Lock this critical section if it is needed
3463de2362d3Smrg    # We use this script file to make the link, it avoids creating a new file
34640d16fef4Smrg    if test yes = "$need_locks"; then
3465de2362d3Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3466de2362d3Smrg	func_echo "Waiting for $lockfile to be removed"
3467de2362d3Smrg	sleep 2
3468de2362d3Smrg      done
34690d16fef4Smrg    elif test warn = "$need_locks"; then
3470de2362d3Smrg      if test -f "$lockfile"; then
3471de2362d3Smrg	$ECHO "\
3472de2362d3Smrg*** ERROR, $lockfile exists and contains:
3473de2362d3Smrg`cat $lockfile 2>/dev/null`
3474de2362d3Smrg
3475de2362d3SmrgThis indicates that another process is trying to use the same
3476de2362d3Smrgtemporary object file, and libtool could not work around it because
34770d16fef4Smrgyour compiler does not support '-c' and '-o' together.  If you
3478de2362d3Smrgrepeat this compilation, it may succeed, by chance, but you had better
3479de2362d3Smrgavoid parallel builds (make -j) in this platform, or get a better
3480de2362d3Smrgcompiler."
3481de2362d3Smrg
3482de2362d3Smrg	$opt_dry_run || $RM $removelist
3483de2362d3Smrg	exit $EXIT_FAILURE
3484de2362d3Smrg      fi
3485de2362d3Smrg      func_append removelist " $output_obj"
3486de2362d3Smrg      $ECHO "$srcfile" > "$lockfile"
3487de2362d3Smrg    fi
3488de2362d3Smrg
3489de2362d3Smrg    $opt_dry_run || $RM $removelist
3490de2362d3Smrg    func_append removelist " $lockfile"
3491de2362d3Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
3492de2362d3Smrg
3493de2362d3Smrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
3494de2362d3Smrg    srcfile=$func_to_tool_file_result
3495de2362d3Smrg    func_quote_for_eval "$srcfile"
3496de2362d3Smrg    qsrcfile=$func_quote_for_eval_result
3497de2362d3Smrg
3498de2362d3Smrg    # Only build a PIC object if we are building libtool libraries.
34990d16fef4Smrg    if test yes = "$build_libtool_libs"; then
3500de2362d3Smrg      # Without this assignment, base_compile gets emptied.
3501de2362d3Smrg      fbsd_hideous_sh_bug=$base_compile
3502de2362d3Smrg
35030d16fef4Smrg      if test no != "$pic_mode"; then
3504de2362d3Smrg	command="$base_compile $qsrcfile $pic_flag"
3505de2362d3Smrg      else
3506de2362d3Smrg	# Don't build PIC code
3507de2362d3Smrg	command="$base_compile $qsrcfile"
3508de2362d3Smrg      fi
3509de2362d3Smrg
3510de2362d3Smrg      func_mkdir_p "$xdir$objdir"
3511de2362d3Smrg
3512de2362d3Smrg      if test -z "$output_obj"; then
3513de2362d3Smrg	# Place PIC objects in $objdir
3514de2362d3Smrg	func_append command " -o $lobj"
3515de2362d3Smrg      fi
3516de2362d3Smrg
3517de2362d3Smrg      func_show_eval_locale "$command"	\
3518de2362d3Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
3519de2362d3Smrg
35200d16fef4Smrg      if test warn = "$need_locks" &&
3521de2362d3Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3522de2362d3Smrg	$ECHO "\
3523de2362d3Smrg*** ERROR, $lockfile contains:
3524de2362d3Smrg`cat $lockfile 2>/dev/null`
3525de2362d3Smrg
3526de2362d3Smrgbut it should contain:
3527de2362d3Smrg$srcfile
3528de2362d3Smrg
3529de2362d3SmrgThis indicates that another process is trying to use the same
3530de2362d3Smrgtemporary object file, and libtool could not work around it because
35310d16fef4Smrgyour compiler does not support '-c' and '-o' together.  If you
3532de2362d3Smrgrepeat this compilation, it may succeed, by chance, but you had better
3533de2362d3Smrgavoid parallel builds (make -j) in this platform, or get a better
3534de2362d3Smrgcompiler."
3535de2362d3Smrg
3536de2362d3Smrg	$opt_dry_run || $RM $removelist
3537de2362d3Smrg	exit $EXIT_FAILURE
3538de2362d3Smrg      fi
3539de2362d3Smrg
3540de2362d3Smrg      # Just move the object if needed, then go on to compile the next one
3541de2362d3Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
3542de2362d3Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
3543de2362d3Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3544de2362d3Smrg      fi
3545de2362d3Smrg
3546de2362d3Smrg      # Allow error messages only from the first compilation.
35470d16fef4Smrg      if test yes = "$suppress_opt"; then
3548de2362d3Smrg	suppress_output=' >/dev/null 2>&1'
3549de2362d3Smrg      fi
3550de2362d3Smrg    fi
3551de2362d3Smrg
3552de2362d3Smrg    # Only build a position-dependent object if we build old libraries.
35530d16fef4Smrg    if test yes = "$build_old_libs"; then
35540d16fef4Smrg      if test yes != "$pic_mode"; then
3555de2362d3Smrg	# Don't build PIC code
3556de2362d3Smrg	command="$base_compile $qsrcfile$pie_flag"
3557de2362d3Smrg      else
3558de2362d3Smrg	command="$base_compile $qsrcfile $pic_flag"
3559de2362d3Smrg      fi
35600d16fef4Smrg      if test yes = "$compiler_c_o"; then
3561de2362d3Smrg	func_append command " -o $obj"
3562de2362d3Smrg      fi
3563de2362d3Smrg
3564de2362d3Smrg      # Suppress compiler output if we already did a PIC compilation.
3565de2362d3Smrg      func_append command "$suppress_output"
3566de2362d3Smrg      func_show_eval_locale "$command" \
3567de2362d3Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
3568de2362d3Smrg
35690d16fef4Smrg      if test warn = "$need_locks" &&
3570de2362d3Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3571de2362d3Smrg	$ECHO "\
3572de2362d3Smrg*** ERROR, $lockfile contains:
3573de2362d3Smrg`cat $lockfile 2>/dev/null`
3574de2362d3Smrg
3575de2362d3Smrgbut it should contain:
3576de2362d3Smrg$srcfile
3577de2362d3Smrg
3578de2362d3SmrgThis indicates that another process is trying to use the same
3579de2362d3Smrgtemporary object file, and libtool could not work around it because
35800d16fef4Smrgyour compiler does not support '-c' and '-o' together.  If you
3581de2362d3Smrgrepeat this compilation, it may succeed, by chance, but you had better
3582de2362d3Smrgavoid parallel builds (make -j) in this platform, or get a better
3583de2362d3Smrgcompiler."
3584de2362d3Smrg
3585de2362d3Smrg	$opt_dry_run || $RM $removelist
3586de2362d3Smrg	exit $EXIT_FAILURE
3587de2362d3Smrg      fi
3588de2362d3Smrg
3589de2362d3Smrg      # Just move the object if needed
3590de2362d3Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
3591de2362d3Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
3592de2362d3Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3593de2362d3Smrg      fi
3594de2362d3Smrg    fi
3595de2362d3Smrg
3596de2362d3Smrg    $opt_dry_run || {
3597de2362d3Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
3598de2362d3Smrg
3599de2362d3Smrg      # Unlock the critical section if it was locked
36000d16fef4Smrg      if test no != "$need_locks"; then
3601de2362d3Smrg	removelist=$lockfile
3602de2362d3Smrg        $RM "$lockfile"
3603de2362d3Smrg      fi
3604de2362d3Smrg    }
3605de2362d3Smrg
3606de2362d3Smrg    exit $EXIT_SUCCESS
3607de2362d3Smrg}
3608de2362d3Smrg
3609de2362d3Smrg$opt_help || {
36100d16fef4Smrg  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
3611de2362d3Smrg}
3612de2362d3Smrg
3613de2362d3Smrgfunc_mode_help ()
3614de2362d3Smrg{
3615de2362d3Smrg    # We need to display help for each of the modes.
3616de2362d3Smrg    case $opt_mode in
3617de2362d3Smrg      "")
3618de2362d3Smrg        # Generic help is extracted from the usage comments
3619de2362d3Smrg        # at the start of this file.
3620de2362d3Smrg        func_help
3621de2362d3Smrg        ;;
3622de2362d3Smrg
3623de2362d3Smrg      clean)
3624de2362d3Smrg        $ECHO \
3625de2362d3Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
3626de2362d3Smrg
3627de2362d3SmrgRemove files from the build directory.
3628de2362d3Smrg
3629de2362d3SmrgRM is the name of the program to use to delete files associated with each FILE
36300d16fef4Smrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
3631de2362d3Smrgto RM.
3632de2362d3Smrg
3633de2362d3SmrgIf FILE is a libtool library, object or program, all the files associated
3634de2362d3Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
3635de2362d3Smrg        ;;
3636de2362d3Smrg
3637de2362d3Smrg      compile)
3638de2362d3Smrg      $ECHO \
3639de2362d3Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
3640de2362d3Smrg
3641de2362d3SmrgCompile a source file into a libtool library object.
3642de2362d3Smrg
3643de2362d3SmrgThis mode accepts the following additional options:
3644de2362d3Smrg
3645de2362d3Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
3646de2362d3Smrg  -no-suppress      do not suppress compiler output for multiple passes
3647de2362d3Smrg  -prefer-pic       try to build PIC objects only
3648de2362d3Smrg  -prefer-non-pic   try to build non-PIC objects only
36490d16fef4Smrg  -shared           do not build a '.o' file suitable for static linking
36500d16fef4Smrg  -static           only build a '.o' file suitable for static linking
3651de2362d3Smrg  -Wc,FLAG          pass FLAG directly to the compiler
3652de2362d3Smrg
36530d16fef4SmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file
3654de2362d3Smrgfrom the given SOURCEFILE.
3655de2362d3Smrg
3656de2362d3SmrgThe output file name is determined by removing the directory component from
36570d16fef4SmrgSOURCEFILE, then substituting the C source code suffix '.c' with the
36580d16fef4Smrglibrary object suffix, '.lo'."
3659de2362d3Smrg        ;;
3660de2362d3Smrg
3661de2362d3Smrg      execute)
3662de2362d3Smrg        $ECHO \
3663de2362d3Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
3664de2362d3Smrg
3665de2362d3SmrgAutomatically set library path, then run a program.
3666de2362d3Smrg
3667de2362d3SmrgThis mode accepts the following additional options:
3668de2362d3Smrg
3669de2362d3Smrg  -dlopen FILE      add the directory containing FILE to the library path
3670de2362d3Smrg
36710d16fef4SmrgThis mode sets the library path environment variable according to '-dlopen'
3672de2362d3Smrgflags.
3673de2362d3Smrg
3674de2362d3SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
3675de2362d3Smrginto their corresponding uninstalled binary, and any of their required library
3676de2362d3Smrgdirectories are added to the library path.
3677de2362d3Smrg
3678de2362d3SmrgThen, COMMAND is executed, with ARGS as arguments."
3679de2362d3Smrg        ;;
3680de2362d3Smrg
3681de2362d3Smrg      finish)
3682de2362d3Smrg        $ECHO \
3683de2362d3Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
3684de2362d3Smrg
3685de2362d3SmrgComplete the installation of libtool libraries.
3686de2362d3Smrg
3687de2362d3SmrgEach LIBDIR is a directory that contains libtool libraries.
3688de2362d3Smrg
3689de2362d3SmrgThe commands that this mode executes may require superuser privileges.  Use
36900d16fef4Smrgthe '--dry-run' option if you just want to see what would be executed."
3691de2362d3Smrg        ;;
3692de2362d3Smrg
3693de2362d3Smrg      install)
3694de2362d3Smrg        $ECHO \
3695de2362d3Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
3696de2362d3Smrg
3697de2362d3SmrgInstall executables or libraries.
3698de2362d3Smrg
3699de2362d3SmrgINSTALL-COMMAND is the installation command.  The first component should be
37000d16fef4Smrgeither the 'install' or 'cp' program.
3701de2362d3Smrg
3702de2362d3SmrgThe following components of INSTALL-COMMAND are treated specially:
3703de2362d3Smrg
3704de2362d3Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
3705de2362d3Smrg
3706de2362d3SmrgThe rest of the components are interpreted as arguments to that command (only
3707de2362d3SmrgBSD-compatible install options are recognized)."
3708de2362d3Smrg        ;;
3709de2362d3Smrg
3710de2362d3Smrg      link)
3711de2362d3Smrg        $ECHO \
3712de2362d3Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
3713de2362d3Smrg
3714de2362d3SmrgLink object files or libraries together to form another library, or to
3715de2362d3Smrgcreate an executable program.
3716de2362d3Smrg
3717de2362d3SmrgLINK-COMMAND is a command using the C compiler that you would use to create
3718de2362d3Smrga program from several object files.
3719de2362d3Smrg
3720de2362d3SmrgThe following components of LINK-COMMAND are treated specially:
3721de2362d3Smrg
3722de2362d3Smrg  -all-static       do not do any dynamic linking at all
3723de2362d3Smrg  -avoid-version    do not add a version suffix if possible
3724de2362d3Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
3725de2362d3Smrg                    libraries must be found in the PATH setting at runtime)
37260d16fef4Smrg  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
3727de2362d3Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
3728de2362d3Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
3729de2362d3Smrg  -export-symbols SYMFILE
3730de2362d3Smrg                    try to export only the symbols listed in SYMFILE
3731de2362d3Smrg  -export-symbols-regex REGEX
3732de2362d3Smrg                    try to export only the symbols matching REGEX
3733de2362d3Smrg  -LLIBDIR          search LIBDIR for required installed libraries
3734de2362d3Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
3735de2362d3Smrg  -module           build a library that can dlopened
3736de2362d3Smrg  -no-fast-install  disable the fast-install mode
3737de2362d3Smrg  -no-install       link a not-installable executable
3738de2362d3Smrg  -no-undefined     declare that a library does not refer to external symbols
3739de2362d3Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
37400d16fef4Smrg  -objectlist FILE  use a list of object files found in FILE to specify objects
37410d16fef4Smrg  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
3742de2362d3Smrg  -precious-files-regex REGEX
3743de2362d3Smrg                    don't remove output files matching REGEX
3744de2362d3Smrg  -release RELEASE  specify package release information
3745de2362d3Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
3746de2362d3Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
3747de2362d3Smrg  -shared           only do dynamic linking of libtool libraries
3748de2362d3Smrg  -shrext SUFFIX    override the standard shared library file extension
3749de2362d3Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
3750de2362d3Smrg  -static-libtool-libs
3751de2362d3Smrg                    do not do any dynamic linking of libtool libraries
3752de2362d3Smrg  -version-info CURRENT[:REVISION[:AGE]]
3753de2362d3Smrg                    specify library version info [each variable defaults to 0]
3754de2362d3Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
3755de2362d3Smrg  -Wc,FLAG
3756de2362d3Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
3757de2362d3Smrg  -Wl,FLAG
3758de2362d3Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
3759de2362d3Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
3760de2362d3Smrg
37610d16fef4SmrgAll other options (arguments beginning with '-') are ignored.
3762de2362d3Smrg
37630d16fef4SmrgEvery other argument is treated as a filename.  Files ending in '.la' are
3764de2362d3Smrgtreated as uninstalled libtool libraries, other files are standard or library
3765de2362d3Smrgobject files.
3766de2362d3Smrg
37670d16fef4SmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created,
37680d16fef4Smrgonly library objects ('.lo' files) may be specified, and '-rpath' is
3769de2362d3Smrgrequired, except when creating a convenience library.
3770de2362d3Smrg
37710d16fef4SmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
37720d16fef4Smrgusing 'ar' and 'ranlib', or on Windows using 'lib'.
3773de2362d3Smrg
37740d16fef4SmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
3775de2362d3Smrgis created, otherwise an executable program is created."
3776de2362d3Smrg        ;;
3777de2362d3Smrg
3778de2362d3Smrg      uninstall)
3779de2362d3Smrg        $ECHO \
3780de2362d3Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
3781de2362d3Smrg
3782de2362d3SmrgRemove libraries from an installation directory.
3783de2362d3Smrg
3784de2362d3SmrgRM is the name of the program to use to delete files associated with each FILE
37850d16fef4Smrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
3786de2362d3Smrgto RM.
3787de2362d3Smrg
3788de2362d3SmrgIf FILE is a libtool library, all the files associated with it are deleted.
3789de2362d3SmrgOtherwise, only FILE itself is deleted using RM."
3790de2362d3Smrg        ;;
3791de2362d3Smrg
3792de2362d3Smrg      *)
37930d16fef4Smrg        func_fatal_help "invalid operation mode '$opt_mode'"
3794de2362d3Smrg        ;;
3795de2362d3Smrg    esac
3796de2362d3Smrg
3797de2362d3Smrg    echo
37980d16fef4Smrg    $ECHO "Try '$progname --help' for more information about other modes."
3799de2362d3Smrg}
3800de2362d3Smrg
3801de2362d3Smrg# Now that we've collected a possible --mode arg, show help if necessary
3802de2362d3Smrgif $opt_help; then
38030d16fef4Smrg  if test : = "$opt_help"; then
3804de2362d3Smrg    func_mode_help
3805de2362d3Smrg  else
3806de2362d3Smrg    {
3807de2362d3Smrg      func_help noexit
3808de2362d3Smrg      for opt_mode in compile link execute install finish uninstall clean; do
3809de2362d3Smrg	func_mode_help
3810de2362d3Smrg      done
38110d16fef4Smrg    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
3812de2362d3Smrg    {
3813de2362d3Smrg      func_help noexit
3814de2362d3Smrg      for opt_mode in compile link execute install finish uninstall clean; do
3815de2362d3Smrg	echo
3816de2362d3Smrg	func_mode_help
3817de2362d3Smrg      done
3818de2362d3Smrg    } |
38190d16fef4Smrg    $SED '1d
3820de2362d3Smrg      /^When reporting/,/^Report/{
3821de2362d3Smrg	H
3822de2362d3Smrg	d
3823de2362d3Smrg      }
3824de2362d3Smrg      $x
3825de2362d3Smrg      /information about other modes/d
3826de2362d3Smrg      /more detailed .*MODE/d
3827de2362d3Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
3828de2362d3Smrg  fi
3829de2362d3Smrg  exit $?
3830de2362d3Smrgfi
3831de2362d3Smrg
3832de2362d3Smrg
3833de2362d3Smrg# func_mode_execute arg...
3834de2362d3Smrgfunc_mode_execute ()
3835de2362d3Smrg{
38360d16fef4Smrg    $debug_cmd
38370d16fef4Smrg
3838de2362d3Smrg    # The first argument is the command name.
38390d16fef4Smrg    cmd=$nonopt
3840de2362d3Smrg    test -z "$cmd" && \
3841de2362d3Smrg      func_fatal_help "you must specify a COMMAND"
3842de2362d3Smrg
3843de2362d3Smrg    # Handle -dlopen flags immediately.
3844de2362d3Smrg    for file in $opt_dlopen; do
3845de2362d3Smrg      test -f "$file" \
38460d16fef4Smrg	|| func_fatal_help "'$file' is not a file"
3847de2362d3Smrg
3848de2362d3Smrg      dir=
3849de2362d3Smrg      case $file in
3850de2362d3Smrg      *.la)
3851de2362d3Smrg	func_resolve_sysroot "$file"
3852de2362d3Smrg	file=$func_resolve_sysroot_result
3853de2362d3Smrg
3854de2362d3Smrg	# Check to see that this really is a libtool archive.
3855de2362d3Smrg	func_lalib_unsafe_p "$file" \
38560d16fef4Smrg	  || func_fatal_help "'$lib' is not a valid libtool archive"
3857de2362d3Smrg
3858de2362d3Smrg	# Read the libtool library.
3859de2362d3Smrg	dlname=
3860de2362d3Smrg	library_names=
3861de2362d3Smrg	func_source "$file"
3862de2362d3Smrg
3863de2362d3Smrg	# Skip this library if it cannot be dlopened.
3864de2362d3Smrg	if test -z "$dlname"; then
3865de2362d3Smrg	  # Warn if it was a shared library.
3866de2362d3Smrg	  test -n "$library_names" && \
38670d16fef4Smrg	    func_warning "'$file' was not linked with '-export-dynamic'"
3868de2362d3Smrg	  continue
3869de2362d3Smrg	fi
3870de2362d3Smrg
3871de2362d3Smrg	func_dirname "$file" "" "."
38720d16fef4Smrg	dir=$func_dirname_result
3873de2362d3Smrg
3874de2362d3Smrg	if test -f "$dir/$objdir/$dlname"; then
3875de2362d3Smrg	  func_append dir "/$objdir"
3876de2362d3Smrg	else
3877de2362d3Smrg	  if test ! -f "$dir/$dlname"; then
38780d16fef4Smrg	    func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
3879de2362d3Smrg	  fi
3880de2362d3Smrg	fi
3881de2362d3Smrg	;;
3882de2362d3Smrg
3883de2362d3Smrg      *.lo)
3884de2362d3Smrg	# Just add the directory containing the .lo file.
3885de2362d3Smrg	func_dirname "$file" "" "."
38860d16fef4Smrg	dir=$func_dirname_result
3887de2362d3Smrg	;;
3888de2362d3Smrg
3889de2362d3Smrg      *)
38900d16fef4Smrg	func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
3891de2362d3Smrg	continue
3892de2362d3Smrg	;;
3893de2362d3Smrg      esac
3894de2362d3Smrg
3895de2362d3Smrg      # Get the absolute pathname.
3896de2362d3Smrg      absdir=`cd "$dir" && pwd`
38970d16fef4Smrg      test -n "$absdir" && dir=$absdir
3898de2362d3Smrg
3899de2362d3Smrg      # Now add the directory to shlibpath_var.
3900de2362d3Smrg      if eval "test -z \"\$$shlibpath_var\""; then
3901de2362d3Smrg	eval "$shlibpath_var=\"\$dir\""
3902de2362d3Smrg      else
3903de2362d3Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
3904de2362d3Smrg      fi
3905de2362d3Smrg    done
3906de2362d3Smrg
3907de2362d3Smrg    # This variable tells wrapper scripts just to set shlibpath_var
3908de2362d3Smrg    # rather than running their programs.
39090d16fef4Smrg    libtool_execute_magic=$magic
3910de2362d3Smrg
3911de2362d3Smrg    # Check if any of the arguments is a wrapper script.
3912de2362d3Smrg    args=
3913de2362d3Smrg    for file
3914de2362d3Smrg    do
3915de2362d3Smrg      case $file in
3916de2362d3Smrg      -* | *.la | *.lo ) ;;
3917de2362d3Smrg      *)
3918de2362d3Smrg	# Do a test to see if this is really a libtool program.
3919de2362d3Smrg	if func_ltwrapper_script_p "$file"; then
3920de2362d3Smrg	  func_source "$file"
3921de2362d3Smrg	  # Transform arg to wrapped name.
39220d16fef4Smrg	  file=$progdir/$program
3923de2362d3Smrg	elif func_ltwrapper_executable_p "$file"; then
3924de2362d3Smrg	  func_ltwrapper_scriptname "$file"
3925de2362d3Smrg	  func_source "$func_ltwrapper_scriptname_result"
3926de2362d3Smrg	  # Transform arg to wrapped name.
39270d16fef4Smrg	  file=$progdir/$program
3928de2362d3Smrg	fi
3929de2362d3Smrg	;;
3930de2362d3Smrg      esac
3931de2362d3Smrg      # Quote arguments (to preserve shell metacharacters).
3932de2362d3Smrg      func_append_quoted args "$file"
3933de2362d3Smrg    done
3934de2362d3Smrg
39350d16fef4Smrg    if $opt_dry_run; then
39360d16fef4Smrg      # Display what would be done.
39370d16fef4Smrg      if test -n "$shlibpath_var"; then
39380d16fef4Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
39390d16fef4Smrg	echo "export $shlibpath_var"
39400d16fef4Smrg      fi
39410d16fef4Smrg      $ECHO "$cmd$args"
39420d16fef4Smrg      exit $EXIT_SUCCESS
39430d16fef4Smrg    else
3944de2362d3Smrg      if test -n "$shlibpath_var"; then
3945de2362d3Smrg	# Export the shlibpath_var.
3946de2362d3Smrg	eval "export $shlibpath_var"
3947de2362d3Smrg      fi
3948de2362d3Smrg
3949de2362d3Smrg      # Restore saved environment variables
3950de2362d3Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
3951de2362d3Smrg      do
3952de2362d3Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
3953de2362d3Smrg                $lt_var=\$save_$lt_var; export $lt_var
3954de2362d3Smrg	      else
3955de2362d3Smrg		$lt_unset $lt_var
3956de2362d3Smrg	      fi"
3957de2362d3Smrg      done
3958de2362d3Smrg
3959de2362d3Smrg      # Now prepare to actually exec the command.
39600d16fef4Smrg      exec_cmd=\$cmd$args
3961de2362d3Smrg    fi
3962de2362d3Smrg}
3963de2362d3Smrg
39640d16fef4Smrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"}
3965de2362d3Smrg
3966de2362d3Smrg
3967de2362d3Smrg# func_mode_finish arg...
3968de2362d3Smrgfunc_mode_finish ()
3969de2362d3Smrg{
39700d16fef4Smrg    $debug_cmd
39710d16fef4Smrg
3972de2362d3Smrg    libs=
3973de2362d3Smrg    libdirs=
3974de2362d3Smrg    admincmds=
3975de2362d3Smrg
3976de2362d3Smrg    for opt in "$nonopt" ${1+"$@"}
3977de2362d3Smrg    do
3978de2362d3Smrg      if test -d "$opt"; then
3979de2362d3Smrg	func_append libdirs " $opt"
3980de2362d3Smrg
3981de2362d3Smrg      elif test -f "$opt"; then
3982de2362d3Smrg	if func_lalib_unsafe_p "$opt"; then
3983de2362d3Smrg	  func_append libs " $opt"
3984de2362d3Smrg	else
39850d16fef4Smrg	  func_warning "'$opt' is not a valid libtool archive"
3986de2362d3Smrg	fi
3987de2362d3Smrg
3988de2362d3Smrg      else
39890d16fef4Smrg	func_fatal_error "invalid argument '$opt'"
3990de2362d3Smrg      fi
3991de2362d3Smrg    done
3992de2362d3Smrg
3993de2362d3Smrg    if test -n "$libs"; then
3994de2362d3Smrg      if test -n "$lt_sysroot"; then
3995de2362d3Smrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
3996de2362d3Smrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
3997de2362d3Smrg      else
3998de2362d3Smrg        sysroot_cmd=
3999de2362d3Smrg      fi
4000de2362d3Smrg
4001de2362d3Smrg      # Remove sysroot references
4002de2362d3Smrg      if $opt_dry_run; then
4003de2362d3Smrg        for lib in $libs; do
40040d16fef4Smrg          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
4005de2362d3Smrg        done
4006de2362d3Smrg      else
4007de2362d3Smrg        tmpdir=`func_mktempdir`
4008de2362d3Smrg        for lib in $libs; do
40090d16fef4Smrg	  $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
4010de2362d3Smrg	    > $tmpdir/tmp-la
4011de2362d3Smrg	  mv -f $tmpdir/tmp-la $lib
4012de2362d3Smrg	done
4013de2362d3Smrg        ${RM}r "$tmpdir"
4014de2362d3Smrg      fi
4015de2362d3Smrg    fi
4016de2362d3Smrg
4017de2362d3Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4018de2362d3Smrg      for libdir in $libdirs; do
4019de2362d3Smrg	if test -n "$finish_cmds"; then
4020de2362d3Smrg	  # Do each command in the finish commands.
4021de2362d3Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
4022de2362d3Smrg'"$cmd"'"'
4023de2362d3Smrg	fi
4024de2362d3Smrg	if test -n "$finish_eval"; then
4025de2362d3Smrg	  # Do the single finish_eval.
4026de2362d3Smrg	  eval cmds=\"$finish_eval\"
4027de2362d3Smrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
4028de2362d3Smrg       $cmds"
4029de2362d3Smrg	fi
4030de2362d3Smrg      done
4031de2362d3Smrg    fi
4032de2362d3Smrg
4033de2362d3Smrg    # Exit here if they wanted silent mode.
40340d16fef4Smrg    $opt_quiet && exit $EXIT_SUCCESS
4035de2362d3Smrg
4036de2362d3Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4037de2362d3Smrg      echo "----------------------------------------------------------------------"
4038de2362d3Smrg      echo "Libraries have been installed in:"
4039de2362d3Smrg      for libdir in $libdirs; do
4040de2362d3Smrg	$ECHO "   $libdir"
4041de2362d3Smrg      done
4042de2362d3Smrg      echo
4043de2362d3Smrg      echo "If you ever happen to want to link against installed libraries"
4044de2362d3Smrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
40450d16fef4Smrg      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
4046de2362d3Smrg      echo "flag during linking and do at least one of the following:"
4047de2362d3Smrg      if test -n "$shlibpath_var"; then
40480d16fef4Smrg	echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
4049de2362d3Smrg	echo "     during execution"
4050de2362d3Smrg      fi
4051de2362d3Smrg      if test -n "$runpath_var"; then
40520d16fef4Smrg	echo "   - add LIBDIR to the '$runpath_var' environment variable"
4053de2362d3Smrg	echo "     during linking"
4054de2362d3Smrg      fi
4055de2362d3Smrg      if test -n "$hardcode_libdir_flag_spec"; then
4056de2362d3Smrg	libdir=LIBDIR
4057de2362d3Smrg	eval flag=\"$hardcode_libdir_flag_spec\"
4058de2362d3Smrg
40590d16fef4Smrg	$ECHO "   - use the '$flag' linker flag"
4060de2362d3Smrg      fi
4061de2362d3Smrg      if test -n "$admincmds"; then
4062de2362d3Smrg	$ECHO "   - have your system administrator run these commands:$admincmds"
4063de2362d3Smrg      fi
4064de2362d3Smrg      if test -f /etc/ld.so.conf; then
40650d16fef4Smrg	echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
4066de2362d3Smrg      fi
4067de2362d3Smrg      echo
4068de2362d3Smrg
4069de2362d3Smrg      echo "See any operating system documentation about shared libraries for"
4070de2362d3Smrg      case $host in
4071de2362d3Smrg	solaris2.[6789]|solaris2.1[0-9])
4072de2362d3Smrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
4073de2362d3Smrg	  echo "pages."
4074de2362d3Smrg	  ;;
4075de2362d3Smrg	*)
4076de2362d3Smrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
4077de2362d3Smrg	  ;;
4078de2362d3Smrg      esac
4079de2362d3Smrg      echo "----------------------------------------------------------------------"
4080de2362d3Smrg    fi
4081de2362d3Smrg    exit $EXIT_SUCCESS
4082de2362d3Smrg}
4083de2362d3Smrg
40840d16fef4Smrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"}
4085de2362d3Smrg
4086de2362d3Smrg
4087de2362d3Smrg# func_mode_install arg...
4088de2362d3Smrgfunc_mode_install ()
4089de2362d3Smrg{
40900d16fef4Smrg    $debug_cmd
40910d16fef4Smrg
4092de2362d3Smrg    # There may be an optional sh(1) argument at the beginning of
4093de2362d3Smrg    # install_prog (especially on Windows NT).
40940d16fef4Smrg    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
4095de2362d3Smrg       # Allow the use of GNU shtool's install command.
40960d16fef4Smrg       case $nonopt in *shtool*) :;; *) false;; esac
40970d16fef4Smrg    then
4098de2362d3Smrg      # Aesthetically quote it.
4099de2362d3Smrg      func_quote_for_eval "$nonopt"
4100de2362d3Smrg      install_prog="$func_quote_for_eval_result "
4101de2362d3Smrg      arg=$1
4102de2362d3Smrg      shift
4103de2362d3Smrg    else
4104de2362d3Smrg      install_prog=
4105de2362d3Smrg      arg=$nonopt
4106de2362d3Smrg    fi
4107de2362d3Smrg
4108de2362d3Smrg    # The real first argument should be the name of the installation program.
4109de2362d3Smrg    # Aesthetically quote it.
4110de2362d3Smrg    func_quote_for_eval "$arg"
4111de2362d3Smrg    func_append install_prog "$func_quote_for_eval_result"
4112de2362d3Smrg    install_shared_prog=$install_prog
4113de2362d3Smrg    case " $install_prog " in
4114de2362d3Smrg      *[\\\ /]cp\ *) install_cp=: ;;
4115de2362d3Smrg      *) install_cp=false ;;
4116de2362d3Smrg    esac
4117de2362d3Smrg
4118de2362d3Smrg    # We need to accept at least all the BSD install flags.
4119de2362d3Smrg    dest=
4120de2362d3Smrg    files=
4121de2362d3Smrg    opts=
4122de2362d3Smrg    prev=
4123de2362d3Smrg    install_type=
41240d16fef4Smrg    isdir=false
4125de2362d3Smrg    stripme=
4126de2362d3Smrg    no_mode=:
4127de2362d3Smrg    for arg
4128de2362d3Smrg    do
4129de2362d3Smrg      arg2=
4130de2362d3Smrg      if test -n "$dest"; then
4131de2362d3Smrg	func_append files " $dest"
4132de2362d3Smrg	dest=$arg
4133de2362d3Smrg	continue
4134de2362d3Smrg      fi
4135de2362d3Smrg
4136de2362d3Smrg      case $arg in
41370d16fef4Smrg      -d) isdir=: ;;
4138de2362d3Smrg      -f)
4139de2362d3Smrg	if $install_cp; then :; else
4140de2362d3Smrg	  prev=$arg
4141de2362d3Smrg	fi
4142de2362d3Smrg	;;
4143de2362d3Smrg      -g | -m | -o)
4144de2362d3Smrg	prev=$arg
4145de2362d3Smrg	;;
4146de2362d3Smrg      -s)
4147de2362d3Smrg	stripme=" -s"
4148de2362d3Smrg	continue
4149de2362d3Smrg	;;
4150de2362d3Smrg      -*)
4151de2362d3Smrg	;;
4152de2362d3Smrg      *)
4153de2362d3Smrg	# If the previous option needed an argument, then skip it.
4154de2362d3Smrg	if test -n "$prev"; then
41550d16fef4Smrg	  if test X-m = "X$prev" && test -n "$install_override_mode"; then
4156de2362d3Smrg	    arg2=$install_override_mode
4157de2362d3Smrg	    no_mode=false
4158de2362d3Smrg	  fi
4159de2362d3Smrg	  prev=
4160de2362d3Smrg	else
4161de2362d3Smrg	  dest=$arg
4162de2362d3Smrg	  continue
4163de2362d3Smrg	fi
4164de2362d3Smrg	;;
4165de2362d3Smrg      esac
4166de2362d3Smrg
4167de2362d3Smrg      # Aesthetically quote the argument.
4168de2362d3Smrg      func_quote_for_eval "$arg"
4169de2362d3Smrg      func_append install_prog " $func_quote_for_eval_result"
4170de2362d3Smrg      if test -n "$arg2"; then
4171de2362d3Smrg	func_quote_for_eval "$arg2"
4172de2362d3Smrg      fi
4173de2362d3Smrg      func_append install_shared_prog " $func_quote_for_eval_result"
4174de2362d3Smrg    done
4175de2362d3Smrg
4176de2362d3Smrg    test -z "$install_prog" && \
4177de2362d3Smrg      func_fatal_help "you must specify an install program"
4178de2362d3Smrg
4179de2362d3Smrg    test -n "$prev" && \
41800d16fef4Smrg      func_fatal_help "the '$prev' option requires an argument"
4181de2362d3Smrg
4182de2362d3Smrg    if test -n "$install_override_mode" && $no_mode; then
4183de2362d3Smrg      if $install_cp; then :; else
4184de2362d3Smrg	func_quote_for_eval "$install_override_mode"
4185de2362d3Smrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
4186de2362d3Smrg      fi
4187de2362d3Smrg    fi
4188de2362d3Smrg
4189de2362d3Smrg    if test -z "$files"; then
4190de2362d3Smrg      if test -z "$dest"; then
4191de2362d3Smrg	func_fatal_help "no file or destination specified"
4192de2362d3Smrg      else
4193de2362d3Smrg	func_fatal_help "you must specify a destination"
4194de2362d3Smrg      fi
4195de2362d3Smrg    fi
4196de2362d3Smrg
4197de2362d3Smrg    # Strip any trailing slash from the destination.
4198de2362d3Smrg    func_stripname '' '/' "$dest"
4199de2362d3Smrg    dest=$func_stripname_result
4200de2362d3Smrg
4201de2362d3Smrg    # Check to see that the destination is a directory.
42020d16fef4Smrg    test -d "$dest" && isdir=:
42030d16fef4Smrg    if $isdir; then
42040d16fef4Smrg      destdir=$dest
4205de2362d3Smrg      destname=
4206de2362d3Smrg    else
4207de2362d3Smrg      func_dirname_and_basename "$dest" "" "."
42080d16fef4Smrg      destdir=$func_dirname_result
42090d16fef4Smrg      destname=$func_basename_result
4210de2362d3Smrg
4211de2362d3Smrg      # Not a directory, so check to see that there is only one file specified.
4212de2362d3Smrg      set dummy $files; shift
4213de2362d3Smrg      test "$#" -gt 1 && \
42140d16fef4Smrg	func_fatal_help "'$dest' is not a directory"
4215de2362d3Smrg    fi
4216de2362d3Smrg    case $destdir in
4217de2362d3Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
4218de2362d3Smrg    *)
4219de2362d3Smrg      for file in $files; do
4220de2362d3Smrg	case $file in
4221de2362d3Smrg	*.lo) ;;
4222de2362d3Smrg	*)
42230d16fef4Smrg	  func_fatal_help "'$destdir' must be an absolute directory name"
4224de2362d3Smrg	  ;;
4225de2362d3Smrg	esac
4226de2362d3Smrg      done
4227de2362d3Smrg      ;;
4228de2362d3Smrg    esac
4229de2362d3Smrg
4230de2362d3Smrg    # This variable tells wrapper scripts just to set variables rather
4231de2362d3Smrg    # than running their programs.
42320d16fef4Smrg    libtool_install_magic=$magic
4233de2362d3Smrg
4234de2362d3Smrg    staticlibs=
4235de2362d3Smrg    future_libdirs=
4236de2362d3Smrg    current_libdirs=
4237de2362d3Smrg    for file in $files; do
4238de2362d3Smrg
4239de2362d3Smrg      # Do each installation.
4240de2362d3Smrg      case $file in
4241de2362d3Smrg      *.$libext)
4242de2362d3Smrg	# Do the static libraries later.
4243de2362d3Smrg	func_append staticlibs " $file"
4244de2362d3Smrg	;;
4245de2362d3Smrg
4246de2362d3Smrg      *.la)
4247de2362d3Smrg	func_resolve_sysroot "$file"
4248de2362d3Smrg	file=$func_resolve_sysroot_result
4249de2362d3Smrg
4250de2362d3Smrg	# Check to see that this really is a libtool archive.
4251de2362d3Smrg	func_lalib_unsafe_p "$file" \
42520d16fef4Smrg	  || func_fatal_help "'$file' is not a valid libtool archive"
4253de2362d3Smrg
4254de2362d3Smrg	library_names=
4255de2362d3Smrg	old_library=
4256de2362d3Smrg	relink_command=
4257de2362d3Smrg	func_source "$file"
4258de2362d3Smrg
4259de2362d3Smrg	# Add the libdir to current_libdirs if it is the destination.
4260de2362d3Smrg	if test "X$destdir" = "X$libdir"; then
4261de2362d3Smrg	  case "$current_libdirs " in
4262de2362d3Smrg	  *" $libdir "*) ;;
4263de2362d3Smrg	  *) func_append current_libdirs " $libdir" ;;
4264de2362d3Smrg	  esac
4265de2362d3Smrg	else
4266de2362d3Smrg	  # Note the libdir as a future libdir.
4267de2362d3Smrg	  case "$future_libdirs " in
4268de2362d3Smrg	  *" $libdir "*) ;;
4269de2362d3Smrg	  *) func_append future_libdirs " $libdir" ;;
4270de2362d3Smrg	  esac
4271de2362d3Smrg	fi
4272de2362d3Smrg
4273de2362d3Smrg	func_dirname "$file" "/" ""
42740d16fef4Smrg	dir=$func_dirname_result
4275de2362d3Smrg	func_append dir "$objdir"
4276de2362d3Smrg
4277de2362d3Smrg	if test -n "$relink_command"; then
4278de2362d3Smrg	  # Determine the prefix the user has applied to our future dir.
4279de2362d3Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
4280de2362d3Smrg
4281de2362d3Smrg	  # Don't allow the user to place us outside of our expected
4282de2362d3Smrg	  # location b/c this prevents finding dependent libraries that
4283de2362d3Smrg	  # are installed to the same prefix.
4284de2362d3Smrg	  # At present, this check doesn't affect windows .dll's that
4285de2362d3Smrg	  # are installed into $libdir/../bin (currently, that works fine)
4286de2362d3Smrg	  # but it's something to keep an eye on.
4287de2362d3Smrg	  test "$inst_prefix_dir" = "$destdir" && \
42880d16fef4Smrg	    func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
4289de2362d3Smrg
4290de2362d3Smrg	  if test -n "$inst_prefix_dir"; then
4291de2362d3Smrg	    # Stick the inst_prefix_dir data into the link command.
4292de2362d3Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
4293de2362d3Smrg	  else
4294de2362d3Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
4295de2362d3Smrg	  fi
4296de2362d3Smrg
42970d16fef4Smrg	  func_warning "relinking '$file'"
4298de2362d3Smrg	  func_show_eval "$relink_command" \
42990d16fef4Smrg	    'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
4300de2362d3Smrg	fi
4301de2362d3Smrg
4302de2362d3Smrg	# See the names of the shared library.
4303de2362d3Smrg	set dummy $library_names; shift
4304de2362d3Smrg	if test -n "$1"; then
43050d16fef4Smrg	  realname=$1
4306de2362d3Smrg	  shift
4307de2362d3Smrg
43080d16fef4Smrg	  srcname=$realname
43090d16fef4Smrg	  test -n "$relink_command" && srcname=${realname}T
4310de2362d3Smrg
4311de2362d3Smrg	  # Install the shared library and build the symlinks.
4312de2362d3Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
4313de2362d3Smrg	      'exit $?'
43140d16fef4Smrg	  tstripme=$stripme
4315de2362d3Smrg	  case $host_os in
4316de2362d3Smrg	  cygwin* | mingw* | pw32* | cegcc*)
4317de2362d3Smrg	    case $realname in
4318de2362d3Smrg	    *.dll.a)
43190d16fef4Smrg	      tstripme=
43200d16fef4Smrg	      ;;
43210d16fef4Smrg	    esac
43220d16fef4Smrg	    ;;
43230d16fef4Smrg	  os2*)
43240d16fef4Smrg	    case $realname in
43250d16fef4Smrg	    *_dll.a)
43260d16fef4Smrg	      tstripme=
4327de2362d3Smrg	      ;;
4328de2362d3Smrg	    esac
4329de2362d3Smrg	    ;;
4330de2362d3Smrg	  esac
4331de2362d3Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
4332de2362d3Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
4333de2362d3Smrg	  fi
4334de2362d3Smrg
4335de2362d3Smrg	  if test "$#" -gt 0; then
4336de2362d3Smrg	    # Delete the old symlinks, and create new ones.
43370d16fef4Smrg	    # Try 'ln -sf' first, because the 'ln' binary might depend on
4338de2362d3Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
4339de2362d3Smrg	    # so we also need to try rm && ln -s.
4340de2362d3Smrg	    for linkname
4341de2362d3Smrg	    do
4342de2362d3Smrg	      test "$linkname" != "$realname" \
4343de2362d3Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
4344de2362d3Smrg	    done
4345de2362d3Smrg	  fi
4346de2362d3Smrg
4347de2362d3Smrg	  # Do each command in the postinstall commands.
43480d16fef4Smrg	  lib=$destdir/$realname
4349de2362d3Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
4350de2362d3Smrg	fi
4351de2362d3Smrg
4352de2362d3Smrg	# Install the pseudo-library for information purposes.
4353de2362d3Smrg	func_basename "$file"
43540d16fef4Smrg	name=$func_basename_result
43550d16fef4Smrg	instname=$dir/${name}i
4356de2362d3Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
4357de2362d3Smrg
4358de2362d3Smrg	# Maybe install the static library, too.
4359de2362d3Smrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
4360de2362d3Smrg	;;
4361de2362d3Smrg
4362de2362d3Smrg      *.lo)
4363de2362d3Smrg	# Install (i.e. copy) a libtool object.
4364de2362d3Smrg
4365de2362d3Smrg	# Figure out destination file name, if it wasn't already specified.
4366de2362d3Smrg	if test -n "$destname"; then
43670d16fef4Smrg	  destfile=$destdir/$destname
4368de2362d3Smrg	else
4369de2362d3Smrg	  func_basename "$file"
43700d16fef4Smrg	  destfile=$func_basename_result
43710d16fef4Smrg	  destfile=$destdir/$destfile
4372de2362d3Smrg	fi
4373de2362d3Smrg
4374de2362d3Smrg	# Deduce the name of the destination old-style object file.
4375de2362d3Smrg	case $destfile in
4376de2362d3Smrg	*.lo)
4377de2362d3Smrg	  func_lo2o "$destfile"
4378de2362d3Smrg	  staticdest=$func_lo2o_result
4379de2362d3Smrg	  ;;
4380de2362d3Smrg	*.$objext)
43810d16fef4Smrg	  staticdest=$destfile
4382de2362d3Smrg	  destfile=
4383de2362d3Smrg	  ;;
4384de2362d3Smrg	*)
43850d16fef4Smrg	  func_fatal_help "cannot copy a libtool object to '$destfile'"
4386de2362d3Smrg	  ;;
4387de2362d3Smrg	esac
4388de2362d3Smrg
4389de2362d3Smrg	# Install the libtool object if requested.
4390de2362d3Smrg	test -n "$destfile" && \
4391de2362d3Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
4392de2362d3Smrg
4393de2362d3Smrg	# Install the old object if enabled.
43940d16fef4Smrg	if test yes = "$build_old_libs"; then
4395de2362d3Smrg	  # Deduce the name of the old-style object file.
4396de2362d3Smrg	  func_lo2o "$file"
4397de2362d3Smrg	  staticobj=$func_lo2o_result
4398de2362d3Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
4399de2362d3Smrg	fi
4400de2362d3Smrg	exit $EXIT_SUCCESS
4401de2362d3Smrg	;;
4402de2362d3Smrg
4403de2362d3Smrg      *)
4404de2362d3Smrg	# Figure out destination file name, if it wasn't already specified.
4405de2362d3Smrg	if test -n "$destname"; then
44060d16fef4Smrg	  destfile=$destdir/$destname
4407de2362d3Smrg	else
4408de2362d3Smrg	  func_basename "$file"
44090d16fef4Smrg	  destfile=$func_basename_result
44100d16fef4Smrg	  destfile=$destdir/$destfile
4411de2362d3Smrg	fi
4412de2362d3Smrg
4413de2362d3Smrg	# If the file is missing, and there is a .exe on the end, strip it
4414de2362d3Smrg	# because it is most likely a libtool script we actually want to
4415de2362d3Smrg	# install
44160d16fef4Smrg	stripped_ext=
4417de2362d3Smrg	case $file in
4418de2362d3Smrg	  *.exe)
4419de2362d3Smrg	    if test ! -f "$file"; then
4420de2362d3Smrg	      func_stripname '' '.exe' "$file"
4421de2362d3Smrg	      file=$func_stripname_result
44220d16fef4Smrg	      stripped_ext=.exe
4423de2362d3Smrg	    fi
4424de2362d3Smrg	    ;;
4425de2362d3Smrg	esac
4426de2362d3Smrg
4427de2362d3Smrg	# Do a test to see if this is really a libtool program.
4428de2362d3Smrg	case $host in
4429de2362d3Smrg	*cygwin* | *mingw*)
4430de2362d3Smrg	    if func_ltwrapper_executable_p "$file"; then
4431de2362d3Smrg	      func_ltwrapper_scriptname "$file"
4432de2362d3Smrg	      wrapper=$func_ltwrapper_scriptname_result
4433de2362d3Smrg	    else
4434de2362d3Smrg	      func_stripname '' '.exe' "$file"
4435de2362d3Smrg	      wrapper=$func_stripname_result
4436de2362d3Smrg	    fi
4437de2362d3Smrg	    ;;
4438de2362d3Smrg	*)
4439de2362d3Smrg	    wrapper=$file
4440de2362d3Smrg	    ;;
4441de2362d3Smrg	esac
4442de2362d3Smrg	if func_ltwrapper_script_p "$wrapper"; then
4443de2362d3Smrg	  notinst_deplibs=
4444de2362d3Smrg	  relink_command=
4445de2362d3Smrg
4446de2362d3Smrg	  func_source "$wrapper"
4447de2362d3Smrg
4448de2362d3Smrg	  # Check the variables that should have been set.
4449de2362d3Smrg	  test -z "$generated_by_libtool_version" && \
44500d16fef4Smrg	    func_fatal_error "invalid libtool wrapper script '$wrapper'"
4451de2362d3Smrg
44520d16fef4Smrg	  finalize=:
4453de2362d3Smrg	  for lib in $notinst_deplibs; do
4454de2362d3Smrg	    # Check to see that each library is installed.
4455de2362d3Smrg	    libdir=
4456de2362d3Smrg	    if test -f "$lib"; then
4457de2362d3Smrg	      func_source "$lib"
4458de2362d3Smrg	    fi
44590d16fef4Smrg	    libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
4460de2362d3Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
44610d16fef4Smrg	      func_warning "'$lib' has not been installed in '$libdir'"
44620d16fef4Smrg	      finalize=false
4463de2362d3Smrg	    fi
4464de2362d3Smrg	  done
4465de2362d3Smrg
4466de2362d3Smrg	  relink_command=
4467de2362d3Smrg	  func_source "$wrapper"
4468de2362d3Smrg
4469de2362d3Smrg	  outputname=
44700d16fef4Smrg	  if test no = "$fast_install" && test -n "$relink_command"; then
4471de2362d3Smrg	    $opt_dry_run || {
44720d16fef4Smrg	      if $finalize; then
4473de2362d3Smrg	        tmpdir=`func_mktempdir`
4474de2362d3Smrg		func_basename "$file$stripped_ext"
44750d16fef4Smrg		file=$func_basename_result
44760d16fef4Smrg	        outputname=$tmpdir/$file
4477de2362d3Smrg	        # Replace the output file specification.
4478de2362d3Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
4479de2362d3Smrg
44800d16fef4Smrg	        $opt_quiet || {
4481de2362d3Smrg	          func_quote_for_expand "$relink_command"
4482de2362d3Smrg		  eval "func_echo $func_quote_for_expand_result"
4483de2362d3Smrg	        }
4484de2362d3Smrg	        if eval "$relink_command"; then :
4485de2362d3Smrg	          else
44860d16fef4Smrg		  func_error "error: relink '$file' with the above command before installing it"
4487de2362d3Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
4488de2362d3Smrg		  continue
4489de2362d3Smrg	        fi
44900d16fef4Smrg	        file=$outputname
4491de2362d3Smrg	      else
44920d16fef4Smrg	        func_warning "cannot relink '$file'"
4493de2362d3Smrg	      fi
4494de2362d3Smrg	    }
4495de2362d3Smrg	  else
4496de2362d3Smrg	    # Install the binary that we compiled earlier.
4497de2362d3Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
4498de2362d3Smrg	  fi
4499de2362d3Smrg	fi
4500de2362d3Smrg
4501de2362d3Smrg	# remove .exe since cygwin /usr/bin/install will append another
4502de2362d3Smrg	# one anyway
4503de2362d3Smrg	case $install_prog,$host in
4504de2362d3Smrg	*/usr/bin/install*,*cygwin*)
4505de2362d3Smrg	  case $file:$destfile in
4506de2362d3Smrg	  *.exe:*.exe)
4507de2362d3Smrg	    # this is ok
4508de2362d3Smrg	    ;;
4509de2362d3Smrg	  *.exe:*)
4510de2362d3Smrg	    destfile=$destfile.exe
4511de2362d3Smrg	    ;;
4512de2362d3Smrg	  *:*.exe)
4513de2362d3Smrg	    func_stripname '' '.exe' "$destfile"
4514de2362d3Smrg	    destfile=$func_stripname_result
4515de2362d3Smrg	    ;;
4516de2362d3Smrg	  esac
4517de2362d3Smrg	  ;;
4518de2362d3Smrg	esac
4519de2362d3Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
4520de2362d3Smrg	$opt_dry_run || if test -n "$outputname"; then
4521de2362d3Smrg	  ${RM}r "$tmpdir"
4522de2362d3Smrg	fi
4523de2362d3Smrg	;;
4524de2362d3Smrg      esac
4525de2362d3Smrg    done
4526de2362d3Smrg
4527de2362d3Smrg    for file in $staticlibs; do
4528de2362d3Smrg      func_basename "$file"
45290d16fef4Smrg      name=$func_basename_result
4530de2362d3Smrg
4531de2362d3Smrg      # Set up the ranlib parameters.
45320d16fef4Smrg      oldlib=$destdir/$name
4533de2362d3Smrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
4534de2362d3Smrg      tool_oldlib=$func_to_tool_file_result
4535de2362d3Smrg
4536de2362d3Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
4537de2362d3Smrg
4538de2362d3Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
4539de2362d3Smrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
4540de2362d3Smrg      fi
4541de2362d3Smrg
4542de2362d3Smrg      # Do each command in the postinstall commands.
4543de2362d3Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
4544de2362d3Smrg    done
4545de2362d3Smrg
4546de2362d3Smrg    test -n "$future_libdirs" && \
45470d16fef4Smrg      func_warning "remember to run '$progname --finish$future_libdirs'"
4548de2362d3Smrg
4549de2362d3Smrg    if test -n "$current_libdirs"; then
4550de2362d3Smrg      # Maybe just do a dry run.
4551de2362d3Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
45520d16fef4Smrg      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
4553de2362d3Smrg    else
4554de2362d3Smrg      exit $EXIT_SUCCESS
4555de2362d3Smrg    fi
4556de2362d3Smrg}
4557de2362d3Smrg
45580d16fef4Smrgtest install = "$opt_mode" && func_mode_install ${1+"$@"}
4559de2362d3Smrg
4560de2362d3Smrg
4561de2362d3Smrg# func_generate_dlsyms outputname originator pic_p
4562de2362d3Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
4563de2362d3Smrg# a dlpreopen symbol table.
4564de2362d3Smrgfunc_generate_dlsyms ()
4565de2362d3Smrg{
45660d16fef4Smrg    $debug_cmd
45670d16fef4Smrg
45680d16fef4Smrg    my_outputname=$1
45690d16fef4Smrg    my_originator=$2
45700d16fef4Smrg    my_pic_p=${3-false}
45710d16fef4Smrg    my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
4572de2362d3Smrg    my_dlsyms=
4573de2362d3Smrg
45740d16fef4Smrg    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
4575de2362d3Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
45760d16fef4Smrg	my_dlsyms=${my_outputname}S.c
4577de2362d3Smrg      else
4578de2362d3Smrg	func_error "not configured to extract global symbols from dlpreopened files"
4579de2362d3Smrg      fi
4580de2362d3Smrg    fi
4581de2362d3Smrg
4582de2362d3Smrg    if test -n "$my_dlsyms"; then
4583de2362d3Smrg      case $my_dlsyms in
4584de2362d3Smrg      "") ;;
4585de2362d3Smrg      *.c)
4586de2362d3Smrg	# Discover the nlist of each of the dlfiles.
45870d16fef4Smrg	nlist=$output_objdir/$my_outputname.nm
4588de2362d3Smrg
4589de2362d3Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
4590de2362d3Smrg
4591de2362d3Smrg	# Parse the name list into a source file.
4592de2362d3Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
4593de2362d3Smrg
4594de2362d3Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
45950d16fef4Smrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
45960d16fef4Smrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
4597de2362d3Smrg
4598de2362d3Smrg#ifdef __cplusplus
4599de2362d3Smrgextern \"C\" {
4600de2362d3Smrg#endif
4601de2362d3Smrg
46020d16fef4Smrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
4603de2362d3Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
4604de2362d3Smrg#endif
4605de2362d3Smrg
4606de2362d3Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
46070d16fef4Smrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
46080d16fef4Smrg/* DATA imports from DLLs on WIN32 can't be const, because runtime
4609de2362d3Smrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
4610de2362d3Smrg# define LT_DLSYM_CONST
46110d16fef4Smrg#elif defined __osf__
4612de2362d3Smrg/* This system does not cope well with relocations in const data.  */
4613de2362d3Smrg# define LT_DLSYM_CONST
4614de2362d3Smrg#else
4615de2362d3Smrg# define LT_DLSYM_CONST const
4616de2362d3Smrg#endif
4617de2362d3Smrg
46180d16fef4Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
46190d16fef4Smrg
4620de2362d3Smrg/* External symbol declarations for the compiler. */\
4621de2362d3Smrg"
4622de2362d3Smrg
46230d16fef4Smrg	if test yes = "$dlself"; then
46240d16fef4Smrg	  func_verbose "generating symbol list for '$output'"
4625de2362d3Smrg
4626de2362d3Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
4627de2362d3Smrg
4628de2362d3Smrg	  # Add our own program objects to the symbol list.
4629de2362d3Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
4630de2362d3Smrg	  for progfile in $progfiles; do
4631de2362d3Smrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
46320d16fef4Smrg	    func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
4633de2362d3Smrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
4634de2362d3Smrg	  done
4635de2362d3Smrg
4636de2362d3Smrg	  if test -n "$exclude_expsyms"; then
4637de2362d3Smrg	    $opt_dry_run || {
4638de2362d3Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
4639de2362d3Smrg	      eval '$MV "$nlist"T "$nlist"'
4640de2362d3Smrg	    }
4641de2362d3Smrg	  fi
4642de2362d3Smrg
4643de2362d3Smrg	  if test -n "$export_symbols_regex"; then
4644de2362d3Smrg	    $opt_dry_run || {
4645de2362d3Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
4646de2362d3Smrg	      eval '$MV "$nlist"T "$nlist"'
4647de2362d3Smrg	    }
4648de2362d3Smrg	  fi
4649de2362d3Smrg
4650de2362d3Smrg	  # Prepare the list of exported symbols
4651de2362d3Smrg	  if test -z "$export_symbols"; then
46520d16fef4Smrg	    export_symbols=$output_objdir/$outputname.exp
4653de2362d3Smrg	    $opt_dry_run || {
4654de2362d3Smrg	      $RM $export_symbols
46550d16fef4Smrg	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
4656de2362d3Smrg	      case $host in
4657de2362d3Smrg	      *cygwin* | *mingw* | *cegcc* )
4658de2362d3Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4659de2362d3Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
4660de2362d3Smrg	        ;;
4661de2362d3Smrg	      esac
4662de2362d3Smrg	    }
4663de2362d3Smrg	  else
4664de2362d3Smrg	    $opt_dry_run || {
46650d16fef4Smrg	      eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
4666de2362d3Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
4667de2362d3Smrg	      eval '$MV "$nlist"T "$nlist"'
4668de2362d3Smrg	      case $host in
4669de2362d3Smrg	        *cygwin* | *mingw* | *cegcc* )
4670de2362d3Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4671de2362d3Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
4672de2362d3Smrg	          ;;
4673de2362d3Smrg	      esac
4674de2362d3Smrg	    }
4675de2362d3Smrg	  fi
4676de2362d3Smrg	fi
4677de2362d3Smrg
4678de2362d3Smrg	for dlprefile in $dlprefiles; do
46790d16fef4Smrg	  func_verbose "extracting global C symbols from '$dlprefile'"
4680de2362d3Smrg	  func_basename "$dlprefile"
46810d16fef4Smrg	  name=$func_basename_result
4682de2362d3Smrg          case $host in
4683de2362d3Smrg	    *cygwin* | *mingw* | *cegcc* )
4684de2362d3Smrg	      # if an import library, we need to obtain dlname
4685de2362d3Smrg	      if func_win32_import_lib_p "$dlprefile"; then
4686de2362d3Smrg	        func_tr_sh "$dlprefile"
4687de2362d3Smrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
46880d16fef4Smrg	        dlprefile_dlbasename=
4689de2362d3Smrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
4690de2362d3Smrg	          # Use subshell, to avoid clobbering current variable values
4691de2362d3Smrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
46920d16fef4Smrg	          if test -n "$dlprefile_dlname"; then
4693de2362d3Smrg	            func_basename "$dlprefile_dlname"
46940d16fef4Smrg	            dlprefile_dlbasename=$func_basename_result
4695de2362d3Smrg	          else
4696de2362d3Smrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
4697de2362d3Smrg	            $sharedlib_from_linklib_cmd "$dlprefile"
4698de2362d3Smrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
4699de2362d3Smrg	          fi
4700de2362d3Smrg	        fi
4701de2362d3Smrg	        $opt_dry_run || {
47020d16fef4Smrg	          if test -n "$dlprefile_dlbasename"; then
4703de2362d3Smrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
4704de2362d3Smrg	          else
4705de2362d3Smrg	            func_warning "Could not compute DLL name from $name"
4706de2362d3Smrg	            eval '$ECHO ": $name " >> "$nlist"'
4707de2362d3Smrg	          fi
4708de2362d3Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4709de2362d3Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
4710de2362d3Smrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
4711de2362d3Smrg	        }
4712de2362d3Smrg	      else # not an import lib
4713de2362d3Smrg	        $opt_dry_run || {
4714de2362d3Smrg	          eval '$ECHO ": $name " >> "$nlist"'
4715de2362d3Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4716de2362d3Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
4717de2362d3Smrg	        }
4718de2362d3Smrg	      fi
4719de2362d3Smrg	    ;;
4720de2362d3Smrg	    *)
4721de2362d3Smrg	      $opt_dry_run || {
4722de2362d3Smrg	        eval '$ECHO ": $name " >> "$nlist"'
4723de2362d3Smrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4724de2362d3Smrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
4725de2362d3Smrg	      }
4726de2362d3Smrg	    ;;
4727de2362d3Smrg          esac
4728de2362d3Smrg	done
4729de2362d3Smrg
4730de2362d3Smrg	$opt_dry_run || {
4731de2362d3Smrg	  # Make sure we have at least an empty file.
4732de2362d3Smrg	  test -f "$nlist" || : > "$nlist"
4733de2362d3Smrg
4734de2362d3Smrg	  if test -n "$exclude_expsyms"; then
4735de2362d3Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
4736de2362d3Smrg	    $MV "$nlist"T "$nlist"
4737de2362d3Smrg	  fi
4738de2362d3Smrg
4739de2362d3Smrg	  # Try sorting and uniquifying the output.
4740de2362d3Smrg	  if $GREP -v "^: " < "$nlist" |
4741de2362d3Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
4742de2362d3Smrg		sort -k 3
4743de2362d3Smrg	      else
4744de2362d3Smrg		sort +2
4745de2362d3Smrg	      fi |
4746de2362d3Smrg	      uniq > "$nlist"S; then
4747de2362d3Smrg	    :
4748de2362d3Smrg	  else
4749de2362d3Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
4750de2362d3Smrg	  fi
4751de2362d3Smrg
4752de2362d3Smrg	  if test -f "$nlist"S; then
4753de2362d3Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
4754de2362d3Smrg	  else
4755de2362d3Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
4756de2362d3Smrg	  fi
4757de2362d3Smrg
47580d16fef4Smrg	  func_show_eval '$RM "${nlist}I"'
47590d16fef4Smrg	  if test -n "$global_symbol_to_import"; then
47600d16fef4Smrg	    eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
47610d16fef4Smrg	  fi
47620d16fef4Smrg
4763de2362d3Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
4764de2362d3Smrg
4765de2362d3Smrg/* The mapping between symbol names and symbols.  */
4766de2362d3Smrgtypedef struct {
4767de2362d3Smrg  const char *name;
4768de2362d3Smrg  void *address;
4769de2362d3Smrg} lt_dlsymlist;
4770de2362d3Smrgextern LT_DLSYM_CONST lt_dlsymlist
47710d16fef4Smrglt_${my_prefix}_LTX_preloaded_symbols[];\
47720d16fef4Smrg"
47730d16fef4Smrg
47740d16fef4Smrg	  if test -s "$nlist"I; then
47750d16fef4Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
47760d16fef4Smrgstatic void lt_syminit(void)
47770d16fef4Smrg{
47780d16fef4Smrg  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
47790d16fef4Smrg  for (; symbol->name; ++symbol)
47800d16fef4Smrg    {"
47810d16fef4Smrg	    $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
47820d16fef4Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
47830d16fef4Smrg    }
47840d16fef4Smrg}"
47850d16fef4Smrg	  fi
47860d16fef4Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
4787de2362d3SmrgLT_DLSYM_CONST lt_dlsymlist
4788de2362d3Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
47890d16fef4Smrg{ {\"$my_originator\", (void *) 0},"
47900d16fef4Smrg
47910d16fef4Smrg	  if test -s "$nlist"I; then
47920d16fef4Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
47930d16fef4Smrg  {\"@INIT@\", (void *) &lt_syminit},"
47940d16fef4Smrg	  fi
4795de2362d3Smrg
4796de2362d3Smrg	  case $need_lib_prefix in
4797de2362d3Smrg	  no)
4798de2362d3Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
4799de2362d3Smrg	    ;;
4800de2362d3Smrg	  *)
4801de2362d3Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
4802de2362d3Smrg	    ;;
4803de2362d3Smrg	  esac
4804de2362d3Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
4805de2362d3Smrg  {0, (void *) 0}
4806de2362d3Smrg};
4807de2362d3Smrg
4808de2362d3Smrg/* This works around a problem in FreeBSD linker */
4809de2362d3Smrg#ifdef FREEBSD_WORKAROUND
4810de2362d3Smrgstatic const void *lt_preloaded_setup() {
4811de2362d3Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
4812de2362d3Smrg}
4813de2362d3Smrg#endif
4814de2362d3Smrg
4815de2362d3Smrg#ifdef __cplusplus
4816de2362d3Smrg}
4817de2362d3Smrg#endif\
4818de2362d3Smrg"
4819de2362d3Smrg	} # !$opt_dry_run
4820de2362d3Smrg
4821de2362d3Smrg	pic_flag_for_symtable=
4822de2362d3Smrg	case "$compile_command " in
4823de2362d3Smrg	*" -static "*) ;;
4824de2362d3Smrg	*)
4825de2362d3Smrg	  case $host in
4826de2362d3Smrg	  # compiling the symbol table file with pic_flag works around
4827de2362d3Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
4828de2362d3Smrg	  # linked before any other PIC object.  But we must not use
4829de2362d3Smrg	  # pic_flag when linking with -static.  The problem exists in
4830de2362d3Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
4831de2362d3Smrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
4832de2362d3Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
4833de2362d3Smrg	  *-*-hpux*)
4834de2362d3Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
4835de2362d3Smrg	  *)
48360d16fef4Smrg	    $my_pic_p && pic_flag_for_symtable=" $pic_flag"
4837de2362d3Smrg	    ;;
4838de2362d3Smrg	  esac
4839de2362d3Smrg	  ;;
4840de2362d3Smrg	esac
4841de2362d3Smrg	symtab_cflags=
4842de2362d3Smrg	for arg in $LTCFLAGS; do
4843de2362d3Smrg	  case $arg in
4844de2362d3Smrg	  -pie | -fpie | -fPIE) ;;
4845de2362d3Smrg	  *) func_append symtab_cflags " $arg" ;;
4846de2362d3Smrg	  esac
4847de2362d3Smrg	done
4848de2362d3Smrg
4849de2362d3Smrg	# Now compile the dynamic symbol file.
4850de2362d3Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
4851de2362d3Smrg
4852de2362d3Smrg	# Clean up the generated files.
48530d16fef4Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
4854de2362d3Smrg
4855de2362d3Smrg	# Transform the symbol file into the correct name.
48560d16fef4Smrg	symfileobj=$output_objdir/${my_outputname}S.$objext
4857de2362d3Smrg	case $host in
4858de2362d3Smrg	*cygwin* | *mingw* | *cegcc* )
4859de2362d3Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
4860de2362d3Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
4861de2362d3Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
4862de2362d3Smrg	  else
4863de2362d3Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4864de2362d3Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4865de2362d3Smrg	  fi
4866de2362d3Smrg	  ;;
4867de2362d3Smrg	*)
4868de2362d3Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4869de2362d3Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4870de2362d3Smrg	  ;;
4871de2362d3Smrg	esac
4872de2362d3Smrg	;;
4873de2362d3Smrg      *)
48740d16fef4Smrg	func_fatal_error "unknown suffix for '$my_dlsyms'"
4875de2362d3Smrg	;;
4876de2362d3Smrg      esac
4877de2362d3Smrg    else
4878de2362d3Smrg      # We keep going just in case the user didn't refer to
4879de2362d3Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
4880de2362d3Smrg      # really was required.
4881de2362d3Smrg
4882de2362d3Smrg      # Nullify the symbol file.
4883de2362d3Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
4884de2362d3Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
4885de2362d3Smrg    fi
4886de2362d3Smrg}
4887de2362d3Smrg
48880d16fef4Smrg# func_cygming_gnu_implib_p ARG
48890d16fef4Smrg# This predicate returns with zero status (TRUE) if
48900d16fef4Smrg# ARG is a GNU/binutils-style import library. Returns
48910d16fef4Smrg# with nonzero status (FALSE) otherwise.
48920d16fef4Smrgfunc_cygming_gnu_implib_p ()
48930d16fef4Smrg{
48940d16fef4Smrg  $debug_cmd
48950d16fef4Smrg
48960d16fef4Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
48970d16fef4Smrg  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)$'`
48980d16fef4Smrg  test -n "$func_cygming_gnu_implib_tmp"
48990d16fef4Smrg}
49000d16fef4Smrg
49010d16fef4Smrg# func_cygming_ms_implib_p ARG
49020d16fef4Smrg# This predicate returns with zero status (TRUE) if
49030d16fef4Smrg# ARG is an MS-style import library. Returns
49040d16fef4Smrg# with nonzero status (FALSE) otherwise.
49050d16fef4Smrgfunc_cygming_ms_implib_p ()
49060d16fef4Smrg{
49070d16fef4Smrg  $debug_cmd
49080d16fef4Smrg
49090d16fef4Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
49100d16fef4Smrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
49110d16fef4Smrg  test -n "$func_cygming_ms_implib_tmp"
49120d16fef4Smrg}
49130d16fef4Smrg
4914de2362d3Smrg# func_win32_libid arg
4915de2362d3Smrg# return the library type of file 'arg'
4916de2362d3Smrg#
4917de2362d3Smrg# Need a lot of goo to handle *both* DLLs and import libs
4918de2362d3Smrg# Has to be a shell function in order to 'eat' the argument
4919de2362d3Smrg# that is supplied when $file_magic_command is called.
4920de2362d3Smrg# Despite the name, also deal with 64 bit binaries.
4921de2362d3Smrgfunc_win32_libid ()
4922de2362d3Smrg{
49230d16fef4Smrg  $debug_cmd
49240d16fef4Smrg
49250d16fef4Smrg  win32_libid_type=unknown
4926de2362d3Smrg  win32_fileres=`file -L $1 2>/dev/null`
4927de2362d3Smrg  case $win32_fileres in
4928de2362d3Smrg  *ar\ archive\ import\ library*) # definitely import
4929de2362d3Smrg    win32_libid_type="x86 archive import"
4930de2362d3Smrg    ;;
4931de2362d3Smrg  *ar\ archive*) # could be an import, or static
4932de2362d3Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
4933de2362d3Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
4934de2362d3Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
49350d16fef4Smrg      case $nm_interface in
49360d16fef4Smrg      "MS dumpbin")
49370d16fef4Smrg	if func_cygming_ms_implib_p "$1" ||
49380d16fef4Smrg	   func_cygming_gnu_implib_p "$1"
49390d16fef4Smrg	then
49400d16fef4Smrg	  win32_nmres=import
49410d16fef4Smrg	else
49420d16fef4Smrg	  win32_nmres=
49430d16fef4Smrg	fi
49440d16fef4Smrg	;;
49450d16fef4Smrg      *)
49460d16fef4Smrg	func_to_tool_file "$1" func_convert_file_msys_to_w32
49470d16fef4Smrg	win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
49480d16fef4Smrg	  $SED -n -e '
4949de2362d3Smrg	    1,100{
4950de2362d3Smrg		/ I /{
49510d16fef4Smrg		    s|.*|import|
4952de2362d3Smrg		    p
4953de2362d3Smrg		    q
4954de2362d3Smrg		}
4955de2362d3Smrg	    }'`
49560d16fef4Smrg	;;
49570d16fef4Smrg      esac
4958de2362d3Smrg      case $win32_nmres in
4959de2362d3Smrg      import*)  win32_libid_type="x86 archive import";;
4960de2362d3Smrg      *)        win32_libid_type="x86 archive static";;
4961de2362d3Smrg      esac
4962de2362d3Smrg    fi
4963de2362d3Smrg    ;;
4964de2362d3Smrg  *DLL*)
4965de2362d3Smrg    win32_libid_type="x86 DLL"
4966de2362d3Smrg    ;;
4967de2362d3Smrg  *executable*) # but shell scripts are "executable" too...
4968de2362d3Smrg    case $win32_fileres in
4969de2362d3Smrg    *MS\ Windows\ PE\ Intel*)
4970de2362d3Smrg      win32_libid_type="x86 DLL"
4971de2362d3Smrg      ;;
4972de2362d3Smrg    esac
4973de2362d3Smrg    ;;
4974de2362d3Smrg  esac
4975de2362d3Smrg  $ECHO "$win32_libid_type"
4976de2362d3Smrg}
4977de2362d3Smrg
4978de2362d3Smrg# func_cygming_dll_for_implib ARG
4979de2362d3Smrg#
4980de2362d3Smrg# Platform-specific function to extract the
4981de2362d3Smrg# name of the DLL associated with the specified
4982de2362d3Smrg# import library ARG.
4983de2362d3Smrg# Invoked by eval'ing the libtool variable
4984de2362d3Smrg#    $sharedlib_from_linklib_cmd
4985de2362d3Smrg# Result is available in the variable
4986de2362d3Smrg#    $sharedlib_from_linklib_result
4987de2362d3Smrgfunc_cygming_dll_for_implib ()
4988de2362d3Smrg{
49890d16fef4Smrg  $debug_cmd
49900d16fef4Smrg
4991de2362d3Smrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
4992de2362d3Smrg}
4993de2362d3Smrg
4994de2362d3Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
4995de2362d3Smrg#
4996de2362d3Smrg# The is the core of a fallback implementation of a
4997de2362d3Smrg# platform-specific function to extract the name of the
4998de2362d3Smrg# DLL associated with the specified import library LIBNAME.
4999de2362d3Smrg#
5000de2362d3Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending
5001de2362d3Smrg# on the platform and compiler that created the implib.
5002de2362d3Smrg#
5003de2362d3Smrg# Echos the name of the DLL associated with the
5004de2362d3Smrg# specified import library.
5005de2362d3Smrgfunc_cygming_dll_for_implib_fallback_core ()
5006de2362d3Smrg{
50070d16fef4Smrg  $debug_cmd
50080d16fef4Smrg
5009de2362d3Smrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
5010de2362d3Smrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
5011de2362d3Smrg    $SED '/^Contents of section '"$match_literal"':/{
5012de2362d3Smrg      # Place marker at beginning of archive member dllname section
5013de2362d3Smrg      s/.*/====MARK====/
5014de2362d3Smrg      p
5015de2362d3Smrg      d
5016de2362d3Smrg    }
5017de2362d3Smrg    # These lines can sometimes be longer than 43 characters, but
5018de2362d3Smrg    # are always uninteresting
5019de2362d3Smrg    /:[	 ]*file format pe[i]\{,1\}-/d
5020de2362d3Smrg    /^In archive [^:]*:/d
5021de2362d3Smrg    # Ensure marker is printed
5022de2362d3Smrg    /^====MARK====/p
5023de2362d3Smrg    # Remove all lines with less than 43 characters
5024de2362d3Smrg    /^.\{43\}/!d
5025de2362d3Smrg    # From remaining lines, remove first 43 characters
5026de2362d3Smrg    s/^.\{43\}//' |
5027de2362d3Smrg    $SED -n '
5028de2362d3Smrg      # Join marker and all lines until next marker into a single line
5029de2362d3Smrg      /^====MARK====/ b para
5030de2362d3Smrg      H
5031de2362d3Smrg      $ b para
5032de2362d3Smrg      b
5033de2362d3Smrg      :para
5034de2362d3Smrg      x
5035de2362d3Smrg      s/\n//g
5036de2362d3Smrg      # Remove the marker
5037de2362d3Smrg      s/^====MARK====//
5038de2362d3Smrg      # Remove trailing dots and whitespace
5039de2362d3Smrg      s/[\. \t]*$//
5040de2362d3Smrg      # Print
5041de2362d3Smrg      /./p' |
5042de2362d3Smrg    # we now have a list, one entry per line, of the stringified
5043de2362d3Smrg    # contents of the appropriate section of all members of the
50440d16fef4Smrg    # archive that possess that section. Heuristic: eliminate
50450d16fef4Smrg    # all those that have a first or second character that is
5046de2362d3Smrg    # a '.' (that is, objdump's representation of an unprintable
5047de2362d3Smrg    # character.) This should work for all archives with less than
5048de2362d3Smrg    # 0x302f exports -- but will fail for DLLs whose name actually
5049de2362d3Smrg    # begins with a literal '.' or a single character followed by
5050de2362d3Smrg    # a '.'.
5051de2362d3Smrg    #
5052de2362d3Smrg    # Of those that remain, print the first one.
5053de2362d3Smrg    $SED -e '/^\./d;/^.\./d;q'
5054de2362d3Smrg}
5055de2362d3Smrg
5056de2362d3Smrg# func_cygming_dll_for_implib_fallback ARG
5057de2362d3Smrg# Platform-specific function to extract the
5058de2362d3Smrg# name of the DLL associated with the specified
5059de2362d3Smrg# import library ARG.
5060de2362d3Smrg#
5061de2362d3Smrg# This fallback implementation is for use when $DLLTOOL
5062de2362d3Smrg# does not support the --identify-strict option.
5063de2362d3Smrg# Invoked by eval'ing the libtool variable
5064de2362d3Smrg#    $sharedlib_from_linklib_cmd
5065de2362d3Smrg# Result is available in the variable
5066de2362d3Smrg#    $sharedlib_from_linklib_result
5067de2362d3Smrgfunc_cygming_dll_for_implib_fallback ()
5068de2362d3Smrg{
50690d16fef4Smrg  $debug_cmd
50700d16fef4Smrg
50710d16fef4Smrg  if func_cygming_gnu_implib_p "$1"; then
5072de2362d3Smrg    # binutils import library
5073de2362d3Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
50740d16fef4Smrg  elif func_cygming_ms_implib_p "$1"; then
5075de2362d3Smrg    # ms-generated import library
5076de2362d3Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
5077de2362d3Smrg  else
5078de2362d3Smrg    # unknown
50790d16fef4Smrg    sharedlib_from_linklib_result=
5080de2362d3Smrg  fi
5081de2362d3Smrg}
5082de2362d3Smrg
5083de2362d3Smrg
5084de2362d3Smrg# func_extract_an_archive dir oldlib
5085de2362d3Smrgfunc_extract_an_archive ()
5086de2362d3Smrg{
50870d16fef4Smrg    $debug_cmd
50880d16fef4Smrg
50890d16fef4Smrg    f_ex_an_ar_dir=$1; shift
50900d16fef4Smrg    f_ex_an_ar_oldlib=$1
50910d16fef4Smrg    if test yes = "$lock_old_archive_extraction"; then
5092de2362d3Smrg      lockfile=$f_ex_an_ar_oldlib.lock
5093de2362d3Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
5094de2362d3Smrg	func_echo "Waiting for $lockfile to be removed"
5095de2362d3Smrg	sleep 2
5096de2362d3Smrg      done
5097de2362d3Smrg    fi
5098de2362d3Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
5099de2362d3Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
51000d16fef4Smrg    if test yes = "$lock_old_archive_extraction"; then
5101de2362d3Smrg      $opt_dry_run || rm -f "$lockfile"
5102de2362d3Smrg    fi
5103de2362d3Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
5104de2362d3Smrg     :
5105de2362d3Smrg    else
5106de2362d3Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
5107de2362d3Smrg    fi
5108de2362d3Smrg}
5109de2362d3Smrg
5110de2362d3Smrg
5111de2362d3Smrg# func_extract_archives gentop oldlib ...
5112de2362d3Smrgfunc_extract_archives ()
5113de2362d3Smrg{
51140d16fef4Smrg    $debug_cmd
51150d16fef4Smrg
51160d16fef4Smrg    my_gentop=$1; shift
5117de2362d3Smrg    my_oldlibs=${1+"$@"}
51180d16fef4Smrg    my_oldobjs=
51190d16fef4Smrg    my_xlib=
51200d16fef4Smrg    my_xabs=
51210d16fef4Smrg    my_xdir=
5122de2362d3Smrg
5123de2362d3Smrg    for my_xlib in $my_oldlibs; do
5124de2362d3Smrg      # Extract the objects.
5125de2362d3Smrg      case $my_xlib in
51260d16fef4Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
5127de2362d3Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
5128de2362d3Smrg      esac
5129de2362d3Smrg      func_basename "$my_xlib"
51300d16fef4Smrg      my_xlib=$func_basename_result
5131de2362d3Smrg      my_xlib_u=$my_xlib
5132de2362d3Smrg      while :; do
5133de2362d3Smrg        case " $extracted_archives " in
5134de2362d3Smrg	*" $my_xlib_u "*)
5135de2362d3Smrg	  func_arith $extracted_serial + 1
5136de2362d3Smrg	  extracted_serial=$func_arith_result
5137de2362d3Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
5138de2362d3Smrg	*) break ;;
5139de2362d3Smrg	esac
5140de2362d3Smrg      done
5141de2362d3Smrg      extracted_archives="$extracted_archives $my_xlib_u"
51420d16fef4Smrg      my_xdir=$my_gentop/$my_xlib_u
5143de2362d3Smrg
5144de2362d3Smrg      func_mkdir_p "$my_xdir"
5145de2362d3Smrg
5146de2362d3Smrg      case $host in
5147de2362d3Smrg      *-darwin*)
5148de2362d3Smrg	func_verbose "Extracting $my_xabs"
5149de2362d3Smrg	# Do not bother doing anything if just a dry run
5150de2362d3Smrg	$opt_dry_run || {
5151de2362d3Smrg	  darwin_orig_dir=`pwd`
5152de2362d3Smrg	  cd $my_xdir || exit $?
5153de2362d3Smrg	  darwin_archive=$my_xabs
5154de2362d3Smrg	  darwin_curdir=`pwd`
51550d16fef4Smrg	  func_basename "$darwin_archive"
51560d16fef4Smrg	  darwin_base_archive=$func_basename_result
5157de2362d3Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
5158de2362d3Smrg	  if test -n "$darwin_arches"; then
5159de2362d3Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
5160de2362d3Smrg	    darwin_arch=
5161de2362d3Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
51620d16fef4Smrg	    for darwin_arch in  $darwin_arches; do
51630d16fef4Smrg	      func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
51640d16fef4Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
51650d16fef4Smrg	      cd "unfat-$$/$darwin_base_archive-$darwin_arch"
51660d16fef4Smrg	      func_extract_an_archive "`pwd`" "$darwin_base_archive"
5167de2362d3Smrg	      cd "$darwin_curdir"
51680d16fef4Smrg	      $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
5169de2362d3Smrg	    done # $darwin_arches
5170de2362d3Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
51710d16fef4Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
5172de2362d3Smrg	    darwin_file=
5173de2362d3Smrg	    darwin_files=
5174de2362d3Smrg	    for darwin_file in $darwin_filelist; do
5175de2362d3Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
5176de2362d3Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
5177de2362d3Smrg	    done # $darwin_filelist
5178de2362d3Smrg	    $RM -rf unfat-$$
5179de2362d3Smrg	    cd "$darwin_orig_dir"
5180de2362d3Smrg	  else
5181de2362d3Smrg	    cd $darwin_orig_dir
5182de2362d3Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
5183de2362d3Smrg	  fi # $darwin_arches
5184de2362d3Smrg	} # !$opt_dry_run
5185de2362d3Smrg	;;
5186de2362d3Smrg      *)
5187de2362d3Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
5188de2362d3Smrg	;;
5189de2362d3Smrg      esac
5190de2362d3Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
5191de2362d3Smrg    done
5192de2362d3Smrg
51930d16fef4Smrg    func_extract_archives_result=$my_oldobjs
5194de2362d3Smrg}
5195de2362d3Smrg
5196de2362d3Smrg
5197de2362d3Smrg# func_emit_wrapper [arg=no]
5198de2362d3Smrg#
5199de2362d3Smrg# Emit a libtool wrapper script on stdout.
5200de2362d3Smrg# Don't directly open a file because we may want to
5201de2362d3Smrg# incorporate the script contents within a cygwin/mingw
5202de2362d3Smrg# wrapper executable.  Must ONLY be called from within
5203de2362d3Smrg# func_mode_link because it depends on a number of variables
5204de2362d3Smrg# set therein.
5205de2362d3Smrg#
5206de2362d3Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
5207de2362d3Smrg# variable will take.  If 'yes', then the emitted script
52080d16fef4Smrg# will assume that the directory where it is stored is
5209de2362d3Smrg# the $objdir directory.  This is a cygwin/mingw-specific
5210de2362d3Smrg# behavior.
5211de2362d3Smrgfunc_emit_wrapper ()
5212de2362d3Smrg{
5213de2362d3Smrg	func_emit_wrapper_arg1=${1-no}
5214de2362d3Smrg
5215de2362d3Smrg	$ECHO "\
5216de2362d3Smrg#! $SHELL
5217de2362d3Smrg
5218de2362d3Smrg# $output - temporary wrapper script for $objdir/$outputname
52190d16fef4Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5220de2362d3Smrg#
5221de2362d3Smrg# The $output program cannot be directly executed until all the libtool
5222de2362d3Smrg# libraries that it depends on are installed.
5223de2362d3Smrg#
5224de2362d3Smrg# This wrapper script should never be moved out of the build directory.
5225de2362d3Smrg# If it is, it will not operate correctly.
5226de2362d3Smrg
5227de2362d3Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
5228de2362d3Smrg# metacharacters that are still active within double-quoted strings.
5229de2362d3Smrgsed_quote_subst='$sed_quote_subst'
5230de2362d3Smrg
5231de2362d3Smrg# Be Bourne compatible
5232de2362d3Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
5233de2362d3Smrg  emulate sh
5234de2362d3Smrg  NULLCMD=:
5235de2362d3Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
5236de2362d3Smrg  # is contrary to our usage.  Disable this feature.
5237de2362d3Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
5238de2362d3Smrg  setopt NO_GLOB_SUBST
5239de2362d3Smrgelse
5240de2362d3Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
5241de2362d3Smrgfi
5242de2362d3SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
5243de2362d3SmrgDUALCASE=1; export DUALCASE # for MKS sh
5244de2362d3Smrg
5245de2362d3Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
5246de2362d3Smrg# if CDPATH is set.
5247de2362d3Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
5248de2362d3Smrg
5249de2362d3Smrgrelink_command=\"$relink_command\"
5250de2362d3Smrg
5251de2362d3Smrg# This environment variable determines our operation mode.
5252de2362d3Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
5253de2362d3Smrg  # install mode needs the following variables:
5254de2362d3Smrg  generated_by_libtool_version='$macro_version'
5255de2362d3Smrg  notinst_deplibs='$notinst_deplibs'
5256de2362d3Smrgelse
5257de2362d3Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
5258de2362d3Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
5259de2362d3Smrg    file=\"\$0\""
5260de2362d3Smrg
5261de2362d3Smrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
5262de2362d3Smrg    $ECHO "\
5263de2362d3Smrg
5264de2362d3Smrg# A function that is used when there is no print builtin or printf.
5265de2362d3Smrgfunc_fallback_echo ()
5266de2362d3Smrg{
5267de2362d3Smrg  eval 'cat <<_LTECHO_EOF
5268de2362d3Smrg\$1
5269de2362d3Smrg_LTECHO_EOF'
5270de2362d3Smrg}
5271de2362d3Smrg    ECHO=\"$qECHO\"
5272de2362d3Smrg  fi
5273de2362d3Smrg
5274de2362d3Smrg# Very basic option parsing. These options are (a) specific to
5275de2362d3Smrg# the libtool wrapper, (b) are identical between the wrapper
52760d16fef4Smrg# /script/ and the wrapper /executable/ that is used only on
5277de2362d3Smrg# windows platforms, and (c) all begin with the string "--lt-"
52780d16fef4Smrg# (application programs are unlikely to have options that match
5279de2362d3Smrg# this pattern).
5280de2362d3Smrg#
5281de2362d3Smrg# There are only two supported options: --lt-debug and
5282de2362d3Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
5283de2362d3Smrg#
5284de2362d3Smrg# The first argument to this parsing function should be the
5285de2362d3Smrg# script's $0 value, followed by "$@".
5286de2362d3Smrglt_option_debug=
5287de2362d3Smrgfunc_parse_lt_options ()
5288de2362d3Smrg{
5289de2362d3Smrg  lt_script_arg0=\$0
5290de2362d3Smrg  shift
5291de2362d3Smrg  for lt_opt
5292de2362d3Smrg  do
5293de2362d3Smrg    case \"\$lt_opt\" in
5294de2362d3Smrg    --lt-debug) lt_option_debug=1 ;;
5295de2362d3Smrg    --lt-dump-script)
5296de2362d3Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
5297de2362d3Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
5298de2362d3Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
5299de2362d3Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
5300de2362d3Smrg        exit 0
5301de2362d3Smrg      ;;
5302de2362d3Smrg    --lt-*)
5303de2362d3Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
5304de2362d3Smrg        exit 1
5305de2362d3Smrg      ;;
5306de2362d3Smrg    esac
5307de2362d3Smrg  done
5308de2362d3Smrg
5309de2362d3Smrg  # Print the debug banner immediately:
5310de2362d3Smrg  if test -n \"\$lt_option_debug\"; then
53110d16fef4Smrg    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
5312de2362d3Smrg  fi
5313de2362d3Smrg}
5314de2362d3Smrg
5315de2362d3Smrg# Used when --lt-debug. Prints its arguments to stdout
5316de2362d3Smrg# (redirection is the responsibility of the caller)
5317de2362d3Smrgfunc_lt_dump_args ()
5318de2362d3Smrg{
5319de2362d3Smrg  lt_dump_args_N=1;
5320de2362d3Smrg  for lt_arg
5321de2362d3Smrg  do
53220d16fef4Smrg    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
5323de2362d3Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
5324de2362d3Smrg  done
5325de2362d3Smrg}
5326de2362d3Smrg
5327de2362d3Smrg# Core function for launching the target application
5328de2362d3Smrgfunc_exec_program_core ()
5329de2362d3Smrg{
5330de2362d3Smrg"
5331de2362d3Smrg  case $host in
5332de2362d3Smrg  # Backslashes separate directories on plain windows
5333de2362d3Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
5334de2362d3Smrg    $ECHO "\
5335de2362d3Smrg      if test -n \"\$lt_option_debug\"; then
53360d16fef4Smrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
5337de2362d3Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
5338de2362d3Smrg      fi
5339de2362d3Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
5340de2362d3Smrg"
5341de2362d3Smrg    ;;
5342de2362d3Smrg
5343de2362d3Smrg  *)
5344de2362d3Smrg    $ECHO "\
5345de2362d3Smrg      if test -n \"\$lt_option_debug\"; then
53460d16fef4Smrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
5347de2362d3Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
5348de2362d3Smrg      fi
5349de2362d3Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
5350de2362d3Smrg"
5351de2362d3Smrg    ;;
5352de2362d3Smrg  esac
5353de2362d3Smrg  $ECHO "\
5354de2362d3Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
5355de2362d3Smrg      exit 1
5356de2362d3Smrg}
5357de2362d3Smrg
5358de2362d3Smrg# A function to encapsulate launching the target application
5359de2362d3Smrg# Strips options in the --lt-* namespace from \$@ and
5360de2362d3Smrg# launches target application with the remaining arguments.
5361de2362d3Smrgfunc_exec_program ()
5362de2362d3Smrg{
5363de2362d3Smrg  case \" \$* \" in
5364de2362d3Smrg  *\\ --lt-*)
5365de2362d3Smrg    for lt_wr_arg
5366de2362d3Smrg    do
5367de2362d3Smrg      case \$lt_wr_arg in
5368de2362d3Smrg      --lt-*) ;;
5369de2362d3Smrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
5370de2362d3Smrg      esac
5371de2362d3Smrg      shift
5372de2362d3Smrg    done ;;
5373de2362d3Smrg  esac
5374de2362d3Smrg  func_exec_program_core \${1+\"\$@\"}
5375de2362d3Smrg}
5376de2362d3Smrg
5377de2362d3Smrg  # Parse options
5378de2362d3Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
5379de2362d3Smrg
5380de2362d3Smrg  # Find the directory that this script lives in.
5381de2362d3Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
5382de2362d3Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
5383de2362d3Smrg
5384de2362d3Smrg  # Follow symbolic links until we get to the real thisdir.
5385de2362d3Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
5386de2362d3Smrg  while test -n \"\$file\"; do
5387de2362d3Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
5388de2362d3Smrg
5389de2362d3Smrg    # If there was a directory component, then change thisdir.
5390de2362d3Smrg    if test \"x\$destdir\" != \"x\$file\"; then
5391de2362d3Smrg      case \"\$destdir\" in
5392de2362d3Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
5393de2362d3Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
5394de2362d3Smrg      esac
5395de2362d3Smrg    fi
5396de2362d3Smrg
5397de2362d3Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
5398de2362d3Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
5399de2362d3Smrg  done
5400de2362d3Smrg
5401de2362d3Smrg  # Usually 'no', except on cygwin/mingw when embedded into
5402de2362d3Smrg  # the cwrapper.
5403de2362d3Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
5404de2362d3Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
5405de2362d3Smrg    # special case for '.'
5406de2362d3Smrg    if test \"\$thisdir\" = \".\"; then
5407de2362d3Smrg      thisdir=\`pwd\`
5408de2362d3Smrg    fi
5409de2362d3Smrg    # remove .libs from thisdir
5410de2362d3Smrg    case \"\$thisdir\" in
5411de2362d3Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
5412de2362d3Smrg    $objdir )   thisdir=. ;;
5413de2362d3Smrg    esac
5414de2362d3Smrg  fi
5415de2362d3Smrg
5416de2362d3Smrg  # Try to get the absolute directory name.
5417de2362d3Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
5418de2362d3Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
5419de2362d3Smrg"
5420de2362d3Smrg
54210d16fef4Smrg	if test yes = "$fast_install"; then
5422de2362d3Smrg	  $ECHO "\
5423de2362d3Smrg  program=lt-'$outputname'$exeext
5424de2362d3Smrg  progdir=\"\$thisdir/$objdir\"
5425de2362d3Smrg
5426de2362d3Smrg  if test ! -f \"\$progdir/\$program\" ||
54270d16fef4Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
5428de2362d3Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
5429de2362d3Smrg
5430de2362d3Smrg    file=\"\$\$-\$program\"
5431de2362d3Smrg
5432de2362d3Smrg    if test ! -d \"\$progdir\"; then
5433de2362d3Smrg      $MKDIR \"\$progdir\"
5434de2362d3Smrg    else
5435de2362d3Smrg      $RM \"\$progdir/\$file\"
5436de2362d3Smrg    fi"
5437de2362d3Smrg
5438de2362d3Smrg	  $ECHO "\
5439de2362d3Smrg
5440de2362d3Smrg    # relink executable if necessary
5441de2362d3Smrg    if test -n \"\$relink_command\"; then
5442de2362d3Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
5443de2362d3Smrg      else
54440d16fef4Smrg	\$ECHO \"\$relink_command_output\" >&2
5445de2362d3Smrg	$RM \"\$progdir/\$file\"
5446de2362d3Smrg	exit 1
5447de2362d3Smrg      fi
5448de2362d3Smrg    fi
5449de2362d3Smrg
5450de2362d3Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
5451de2362d3Smrg    { $RM \"\$progdir/\$program\";
5452de2362d3Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
5453de2362d3Smrg    $RM \"\$progdir/\$file\"
5454de2362d3Smrg  fi"
5455de2362d3Smrg	else
5456de2362d3Smrg	  $ECHO "\
5457de2362d3Smrg  program='$outputname'
5458de2362d3Smrg  progdir=\"\$thisdir/$objdir\"
5459de2362d3Smrg"
5460de2362d3Smrg	fi
5461de2362d3Smrg
5462de2362d3Smrg	$ECHO "\
5463de2362d3Smrg
5464de2362d3Smrg  if test -f \"\$progdir/\$program\"; then"
5465de2362d3Smrg
5466de2362d3Smrg	# fixup the dll searchpath if we need to.
5467de2362d3Smrg	#
5468de2362d3Smrg	# Fix the DLL searchpath if we need to.  Do this before prepending
5469de2362d3Smrg	# to shlibpath, because on Windows, both are PATH and uninstalled
5470de2362d3Smrg	# libraries must come first.
5471de2362d3Smrg	if test -n "$dllsearchpath"; then
5472de2362d3Smrg	  $ECHO "\
5473de2362d3Smrg    # Add the dll search path components to the executable PATH
5474de2362d3Smrg    PATH=$dllsearchpath:\$PATH
5475de2362d3Smrg"
5476de2362d3Smrg	fi
5477de2362d3Smrg
5478de2362d3Smrg	# Export our shlibpath_var if we have one.
54790d16fef4Smrg	if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5480de2362d3Smrg	  $ECHO "\
5481de2362d3Smrg    # Add our own library path to $shlibpath_var
5482de2362d3Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
5483de2362d3Smrg
5484de2362d3Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
5485de2362d3Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
5486de2362d3Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
5487de2362d3Smrg
5488de2362d3Smrg    export $shlibpath_var
5489de2362d3Smrg"
5490de2362d3Smrg	fi
5491de2362d3Smrg
5492de2362d3Smrg	$ECHO "\
5493de2362d3Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
5494de2362d3Smrg      # Run the actual program with our arguments.
5495de2362d3Smrg      func_exec_program \${1+\"\$@\"}
5496de2362d3Smrg    fi
5497de2362d3Smrg  else
5498de2362d3Smrg    # The program doesn't exist.
54990d16fef4Smrg    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
5500de2362d3Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
5501de2362d3Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
5502de2362d3Smrg    exit 1
5503de2362d3Smrg  fi
5504de2362d3Smrgfi\
5505de2362d3Smrg"
5506de2362d3Smrg}
5507de2362d3Smrg
5508de2362d3Smrg
5509de2362d3Smrg# func_emit_cwrapperexe_src
5510de2362d3Smrg# emit the source code for a wrapper executable on stdout
5511de2362d3Smrg# Must ONLY be called from within func_mode_link because
5512de2362d3Smrg# it depends on a number of variable set therein.
5513de2362d3Smrgfunc_emit_cwrapperexe_src ()
5514de2362d3Smrg{
5515de2362d3Smrg	cat <<EOF
5516de2362d3Smrg
5517de2362d3Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
55180d16fef4Smrg   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5519de2362d3Smrg
5520de2362d3Smrg   The $output program cannot be directly executed until all the libtool
5521de2362d3Smrg   libraries that it depends on are installed.
5522de2362d3Smrg
5523de2362d3Smrg   This wrapper executable should never be moved out of the build directory.
5524de2362d3Smrg   If it is, it will not operate correctly.
5525de2362d3Smrg*/
5526de2362d3SmrgEOF
5527de2362d3Smrg	    cat <<"EOF"
5528de2362d3Smrg#ifdef _MSC_VER
5529de2362d3Smrg# define _CRT_SECURE_NO_DEPRECATE 1
5530de2362d3Smrg#endif
5531de2362d3Smrg#include <stdio.h>
5532de2362d3Smrg#include <stdlib.h>
5533de2362d3Smrg#ifdef _MSC_VER
5534de2362d3Smrg# include <direct.h>
5535de2362d3Smrg# include <process.h>
5536de2362d3Smrg# include <io.h>
5537de2362d3Smrg#else
5538de2362d3Smrg# include <unistd.h>
5539de2362d3Smrg# include <stdint.h>
5540de2362d3Smrg# ifdef __CYGWIN__
5541de2362d3Smrg#  include <io.h>
5542de2362d3Smrg# endif
5543de2362d3Smrg#endif
5544de2362d3Smrg#include <malloc.h>
5545de2362d3Smrg#include <stdarg.h>
5546de2362d3Smrg#include <assert.h>
5547de2362d3Smrg#include <string.h>
5548de2362d3Smrg#include <ctype.h>
5549de2362d3Smrg#include <errno.h>
5550de2362d3Smrg#include <fcntl.h>
5551de2362d3Smrg#include <sys/stat.h>
5552de2362d3Smrg
55530d16fef4Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
55540d16fef4Smrg
5555de2362d3Smrg/* declarations of non-ANSI functions */
55560d16fef4Smrg#if defined __MINGW32__
5557de2362d3Smrg# ifdef __STRICT_ANSI__
5558de2362d3Smrgint _putenv (const char *);
5559de2362d3Smrg# endif
55600d16fef4Smrg#elif defined __CYGWIN__
5561de2362d3Smrg# ifdef __STRICT_ANSI__
5562de2362d3Smrgchar *realpath (const char *, char *);
5563de2362d3Smrgint putenv (char *);
5564de2362d3Smrgint setenv (const char *, const char *, int);
5565de2362d3Smrg# endif
55660d16fef4Smrg/* #elif defined other_platform || defined ... */
5567de2362d3Smrg#endif
5568de2362d3Smrg
5569de2362d3Smrg/* portability defines, excluding path handling macros */
55700d16fef4Smrg#if defined _MSC_VER
5571de2362d3Smrg# define setmode _setmode
5572de2362d3Smrg# define stat    _stat
5573de2362d3Smrg# define chmod   _chmod
5574de2362d3Smrg# define getcwd  _getcwd
5575de2362d3Smrg# define putenv  _putenv
5576de2362d3Smrg# define S_IXUSR _S_IEXEC
55770d16fef4Smrg#elif defined __MINGW32__
5578de2362d3Smrg# define setmode _setmode
5579de2362d3Smrg# define stat    _stat
5580de2362d3Smrg# define chmod   _chmod
5581de2362d3Smrg# define getcwd  _getcwd
5582de2362d3Smrg# define putenv  _putenv
55830d16fef4Smrg#elif defined __CYGWIN__
5584de2362d3Smrg# define HAVE_SETENV
5585de2362d3Smrg# define FOPEN_WB "wb"
55860d16fef4Smrg/* #elif defined other platforms ... */
5587de2362d3Smrg#endif
5588de2362d3Smrg
55890d16fef4Smrg#if defined PATH_MAX
5590de2362d3Smrg# define LT_PATHMAX PATH_MAX
55910d16fef4Smrg#elif defined MAXPATHLEN
5592de2362d3Smrg# define LT_PATHMAX MAXPATHLEN
5593de2362d3Smrg#else
5594de2362d3Smrg# define LT_PATHMAX 1024
5595de2362d3Smrg#endif
5596de2362d3Smrg
5597de2362d3Smrg#ifndef S_IXOTH
5598de2362d3Smrg# define S_IXOTH 0
5599de2362d3Smrg#endif
5600de2362d3Smrg#ifndef S_IXGRP
5601de2362d3Smrg# define S_IXGRP 0
5602de2362d3Smrg#endif
5603de2362d3Smrg
5604de2362d3Smrg/* path handling portability macros */
5605de2362d3Smrg#ifndef DIR_SEPARATOR
5606de2362d3Smrg# define DIR_SEPARATOR '/'
5607de2362d3Smrg# define PATH_SEPARATOR ':'
5608de2362d3Smrg#endif
5609de2362d3Smrg
56100d16fef4Smrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
56110d16fef4Smrg  defined __OS2__
5612de2362d3Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
5613de2362d3Smrg# define FOPEN_WB "wb"
5614de2362d3Smrg# ifndef DIR_SEPARATOR_2
5615de2362d3Smrg#  define DIR_SEPARATOR_2 '\\'
5616de2362d3Smrg# endif
5617de2362d3Smrg# ifndef PATH_SEPARATOR_2
5618de2362d3Smrg#  define PATH_SEPARATOR_2 ';'
5619de2362d3Smrg# endif
5620de2362d3Smrg#endif
5621de2362d3Smrg
5622de2362d3Smrg#ifndef DIR_SEPARATOR_2
5623de2362d3Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
5624de2362d3Smrg#else /* DIR_SEPARATOR_2 */
5625de2362d3Smrg# define IS_DIR_SEPARATOR(ch) \
5626de2362d3Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
5627de2362d3Smrg#endif /* DIR_SEPARATOR_2 */
5628de2362d3Smrg
5629de2362d3Smrg#ifndef PATH_SEPARATOR_2
5630de2362d3Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
5631de2362d3Smrg#else /* PATH_SEPARATOR_2 */
5632de2362d3Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
5633de2362d3Smrg#endif /* PATH_SEPARATOR_2 */
5634de2362d3Smrg
5635de2362d3Smrg#ifndef FOPEN_WB
5636de2362d3Smrg# define FOPEN_WB "w"
5637de2362d3Smrg#endif
5638de2362d3Smrg#ifndef _O_BINARY
5639de2362d3Smrg# define _O_BINARY 0
5640de2362d3Smrg#endif
5641de2362d3Smrg
5642de2362d3Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
5643de2362d3Smrg#define XFREE(stale) do { \
56440d16fef4Smrg  if (stale) { free (stale); stale = 0; } \
5645de2362d3Smrg} while (0)
5646de2362d3Smrg
56470d16fef4Smrg#if defined LT_DEBUGWRAPPER
5648de2362d3Smrgstatic int lt_debug = 1;
5649de2362d3Smrg#else
5650de2362d3Smrgstatic int lt_debug = 0;
5651de2362d3Smrg#endif
5652de2362d3Smrg
5653de2362d3Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
5654de2362d3Smrg
5655de2362d3Smrgvoid *xmalloc (size_t num);
5656de2362d3Smrgchar *xstrdup (const char *string);
5657de2362d3Smrgconst char *base_name (const char *name);
5658de2362d3Smrgchar *find_executable (const char *wrapper);
5659de2362d3Smrgchar *chase_symlinks (const char *pathspec);
5660de2362d3Smrgint make_executable (const char *path);
5661de2362d3Smrgint check_executable (const char *path);
5662de2362d3Smrgchar *strendzap (char *str, const char *pat);
5663de2362d3Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
5664de2362d3Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
5665de2362d3Smrgstatic const char *nonnull (const char *s);
5666de2362d3Smrgstatic const char *nonempty (const char *s);
5667de2362d3Smrgvoid lt_setenv (const char *name, const char *value);
5668de2362d3Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
5669de2362d3Smrgvoid lt_update_exe_path (const char *name, const char *value);
5670de2362d3Smrgvoid lt_update_lib_path (const char *name, const char *value);
5671de2362d3Smrgchar **prepare_spawn (char **argv);
5672de2362d3Smrgvoid lt_dump_script (FILE *f);
5673de2362d3SmrgEOF
5674de2362d3Smrg
5675de2362d3Smrg	    cat <<EOF
56760d16fef4Smrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
56770d16fef4Smrg# define externally_visible volatile
56780d16fef4Smrg#else
56790d16fef4Smrg# define externally_visible __attribute__((externally_visible)) volatile
56800d16fef4Smrg#endif
56810d16fef4Smrgexternally_visible const char * MAGIC_EXE = "$magic_exe";
5682de2362d3Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
5683de2362d3SmrgEOF
5684de2362d3Smrg
56850d16fef4Smrg	    if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5686de2362d3Smrg              func_to_host_path "$temp_rpath"
5687de2362d3Smrg	      cat <<EOF
5688de2362d3Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
5689de2362d3SmrgEOF
5690de2362d3Smrg	    else
5691de2362d3Smrg	      cat <<"EOF"
5692de2362d3Smrgconst char * LIB_PATH_VALUE   = "";
5693de2362d3SmrgEOF
5694de2362d3Smrg	    fi
5695de2362d3Smrg
5696de2362d3Smrg	    if test -n "$dllsearchpath"; then
5697de2362d3Smrg              func_to_host_path "$dllsearchpath:"
5698de2362d3Smrg	      cat <<EOF
5699de2362d3Smrgconst char * EXE_PATH_VARNAME = "PATH";
5700de2362d3Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
5701de2362d3SmrgEOF
5702de2362d3Smrg	    else
5703de2362d3Smrg	      cat <<"EOF"
5704de2362d3Smrgconst char * EXE_PATH_VARNAME = "";
5705de2362d3Smrgconst char * EXE_PATH_VALUE   = "";
5706de2362d3SmrgEOF
5707de2362d3Smrg	    fi
5708de2362d3Smrg
57090d16fef4Smrg	    if test yes = "$fast_install"; then
5710de2362d3Smrg	      cat <<EOF
5711de2362d3Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
5712de2362d3SmrgEOF
5713de2362d3Smrg	    else
5714de2362d3Smrg	      cat <<EOF
5715de2362d3Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
5716de2362d3SmrgEOF
5717de2362d3Smrg	    fi
5718de2362d3Smrg
5719de2362d3Smrg
5720de2362d3Smrg	    cat <<"EOF"
5721de2362d3Smrg
5722de2362d3Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
5723de2362d3Smrg
5724de2362d3Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
5725de2362d3Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
5726de2362d3Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
5727de2362d3Smrg
5728de2362d3Smrgint
5729de2362d3Smrgmain (int argc, char *argv[])
5730de2362d3Smrg{
5731de2362d3Smrg  char **newargz;
5732de2362d3Smrg  int  newargc;
5733de2362d3Smrg  char *tmp_pathspec;
5734de2362d3Smrg  char *actual_cwrapper_path;
5735de2362d3Smrg  char *actual_cwrapper_name;
5736de2362d3Smrg  char *target_name;
5737de2362d3Smrg  char *lt_argv_zero;
57380d16fef4Smrg  int rval = 127;
5739de2362d3Smrg
5740de2362d3Smrg  int i;
5741de2362d3Smrg
5742de2362d3Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
57430d16fef4Smrg  newargz = XMALLOC (char *, (size_t) argc + 1);
5744de2362d3Smrg
5745de2362d3Smrg  /* very simple arg parsing; don't want to rely on getopt
5746de2362d3Smrg   * also, copy all non cwrapper options to newargz, except
5747de2362d3Smrg   * argz[0], which is handled differently
5748de2362d3Smrg   */
5749de2362d3Smrg  newargc=0;
5750de2362d3Smrg  for (i = 1; i < argc; i++)
5751de2362d3Smrg    {
57520d16fef4Smrg      if (STREQ (argv[i], dumpscript_opt))
5753de2362d3Smrg	{
5754de2362d3SmrgEOF
57550d16fef4Smrg	    case $host in
5756de2362d3Smrg	      *mingw* | *cygwin* )
5757de2362d3Smrg		# make stdout use "unix" line endings
5758de2362d3Smrg		echo "          setmode(1,_O_BINARY);"
5759de2362d3Smrg		;;
5760de2362d3Smrg	      esac
5761de2362d3Smrg
5762de2362d3Smrg	    cat <<"EOF"
5763de2362d3Smrg	  lt_dump_script (stdout);
5764de2362d3Smrg	  return 0;
5765de2362d3Smrg	}
57660d16fef4Smrg      if (STREQ (argv[i], debug_opt))
5767de2362d3Smrg	{
5768de2362d3Smrg          lt_debug = 1;
5769de2362d3Smrg          continue;
5770de2362d3Smrg	}
57710d16fef4Smrg      if (STREQ (argv[i], ltwrapper_option_prefix))
5772de2362d3Smrg        {
5773de2362d3Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
5774de2362d3Smrg             namespace, but it is not one of the ones we know about and
5775de2362d3Smrg             have already dealt with, above (inluding dump-script), then
5776de2362d3Smrg             report an error. Otherwise, targets might begin to believe
5777de2362d3Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
5778de2362d3Smrg             namespace. The first time any user complains about this, we'll
5779de2362d3Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
5780de2362d3Smrg             or a configure.ac-settable value.
5781de2362d3Smrg           */
5782de2362d3Smrg          lt_fatal (__FILE__, __LINE__,
5783de2362d3Smrg		    "unrecognized %s option: '%s'",
5784de2362d3Smrg                    ltwrapper_option_prefix, argv[i]);
5785de2362d3Smrg        }
5786de2362d3Smrg      /* otherwise ... */
5787de2362d3Smrg      newargz[++newargc] = xstrdup (argv[i]);
5788de2362d3Smrg    }
5789de2362d3Smrg  newargz[++newargc] = NULL;
5790de2362d3Smrg
5791de2362d3SmrgEOF
5792de2362d3Smrg	    cat <<EOF
5793de2362d3Smrg  /* The GNU banner must be the first non-error debug message */
57940d16fef4Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
5795de2362d3SmrgEOF
5796de2362d3Smrg	    cat <<"EOF"
5797de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
5798de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
5799de2362d3Smrg
5800de2362d3Smrg  tmp_pathspec = find_executable (argv[0]);
5801de2362d3Smrg  if (tmp_pathspec == NULL)
5802de2362d3Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
5803de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__,
5804de2362d3Smrg                  "(main) found exe (before symlink chase) at: %s\n",
5805de2362d3Smrg		  tmp_pathspec);
5806de2362d3Smrg
5807de2362d3Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
5808de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__,
5809de2362d3Smrg                  "(main) found exe (after symlink chase) at: %s\n",
5810de2362d3Smrg		  actual_cwrapper_path);
5811de2362d3Smrg  XFREE (tmp_pathspec);
5812de2362d3Smrg
5813de2362d3Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
5814de2362d3Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
5815de2362d3Smrg
5816de2362d3Smrg  /* wrapper name transforms */
5817de2362d3Smrg  strendzap (actual_cwrapper_name, ".exe");
5818de2362d3Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
5819de2362d3Smrg  XFREE (actual_cwrapper_name);
5820de2362d3Smrg  actual_cwrapper_name = tmp_pathspec;
5821de2362d3Smrg  tmp_pathspec = 0;
5822de2362d3Smrg
5823de2362d3Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
5824de2362d3Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
5825de2362d3Smrg  strendzap (target_name, ".exe");
5826de2362d3Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
5827de2362d3Smrg  XFREE (target_name);
5828de2362d3Smrg  target_name = tmp_pathspec;
5829de2362d3Smrg  tmp_pathspec = 0;
5830de2362d3Smrg
5831de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__,
5832de2362d3Smrg		  "(main) libtool target name: %s\n",
5833de2362d3Smrg		  target_name);
5834de2362d3SmrgEOF
5835de2362d3Smrg
5836de2362d3Smrg	    cat <<EOF
5837de2362d3Smrg  newargz[0] =
5838de2362d3Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
5839de2362d3Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
5840de2362d3Smrg  strcpy (newargz[0], actual_cwrapper_path);
5841de2362d3Smrg  strcat (newargz[0], "$objdir");
5842de2362d3Smrg  strcat (newargz[0], "/");
5843de2362d3SmrgEOF
5844de2362d3Smrg
5845de2362d3Smrg	    cat <<"EOF"
5846de2362d3Smrg  /* stop here, and copy so we don't have to do this twice */
5847de2362d3Smrg  tmp_pathspec = xstrdup (newargz[0]);
5848de2362d3Smrg
5849de2362d3Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
5850de2362d3Smrg  strcat (newargz[0], actual_cwrapper_name);
5851de2362d3Smrg
5852de2362d3Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
5853de2362d3Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
5854de2362d3Smrg  XFREE (tmp_pathspec);
5855de2362d3Smrg  tmp_pathspec = NULL;
5856de2362d3SmrgEOF
5857de2362d3Smrg
5858de2362d3Smrg	    case $host_os in
5859de2362d3Smrg	      mingw*)
5860de2362d3Smrg	    cat <<"EOF"
5861de2362d3Smrg  {
5862de2362d3Smrg    char* p;
5863de2362d3Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
5864de2362d3Smrg      {
5865de2362d3Smrg	*p = '/';
5866de2362d3Smrg      }
5867de2362d3Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
5868de2362d3Smrg      {
5869de2362d3Smrg	*p = '/';
5870de2362d3Smrg      }
5871de2362d3Smrg  }
5872de2362d3SmrgEOF
5873de2362d3Smrg	    ;;
5874de2362d3Smrg	    esac
5875de2362d3Smrg
5876de2362d3Smrg	    cat <<"EOF"
5877de2362d3Smrg  XFREE (target_name);
5878de2362d3Smrg  XFREE (actual_cwrapper_path);
5879de2362d3Smrg  XFREE (actual_cwrapper_name);
5880de2362d3Smrg
5881de2362d3Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
5882de2362d3Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
5883de2362d3Smrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
5884de2362d3Smrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
5885de2362d3Smrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
5886de2362d3Smrg     libraries must come first. */
5887de2362d3Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
5888de2362d3Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
5889de2362d3Smrg
5890de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
5891de2362d3Smrg		  nonnull (lt_argv_zero));
5892de2362d3Smrg  for (i = 0; i < newargc; i++)
5893de2362d3Smrg    {
5894de2362d3Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
5895de2362d3Smrg		      i, nonnull (newargz[i]));
5896de2362d3Smrg    }
5897de2362d3Smrg
5898de2362d3SmrgEOF
5899de2362d3Smrg
5900de2362d3Smrg	    case $host_os in
5901de2362d3Smrg	      mingw*)
5902de2362d3Smrg		cat <<"EOF"
5903de2362d3Smrg  /* execv doesn't actually work on mingw as expected on unix */
5904de2362d3Smrg  newargz = prepare_spawn (newargz);
59050d16fef4Smrg  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
5906de2362d3Smrg  if (rval == -1)
5907de2362d3Smrg    {
5908de2362d3Smrg      /* failed to start process */
5909de2362d3Smrg      lt_debugprintf (__FILE__, __LINE__,
5910de2362d3Smrg		      "(main) failed to launch target \"%s\": %s\n",
5911de2362d3Smrg		      lt_argv_zero, nonnull (strerror (errno)));
5912de2362d3Smrg      return 127;
5913de2362d3Smrg    }
5914de2362d3Smrg  return rval;
5915de2362d3SmrgEOF
5916de2362d3Smrg		;;
5917de2362d3Smrg	      *)
5918de2362d3Smrg		cat <<"EOF"
5919de2362d3Smrg  execv (lt_argv_zero, newargz);
5920de2362d3Smrg  return rval; /* =127, but avoids unused variable warning */
5921de2362d3SmrgEOF
5922de2362d3Smrg		;;
5923de2362d3Smrg	    esac
5924de2362d3Smrg
5925de2362d3Smrg	    cat <<"EOF"
5926de2362d3Smrg}
5927de2362d3Smrg
5928de2362d3Smrgvoid *
5929de2362d3Smrgxmalloc (size_t num)
5930de2362d3Smrg{
5931de2362d3Smrg  void *p = (void *) malloc (num);
5932de2362d3Smrg  if (!p)
5933de2362d3Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
5934de2362d3Smrg
5935de2362d3Smrg  return p;
5936de2362d3Smrg}
5937de2362d3Smrg
5938de2362d3Smrgchar *
5939de2362d3Smrgxstrdup (const char *string)
5940de2362d3Smrg{
5941de2362d3Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
5942de2362d3Smrg			  string) : NULL;
5943de2362d3Smrg}
5944de2362d3Smrg
5945de2362d3Smrgconst char *
5946de2362d3Smrgbase_name (const char *name)
5947de2362d3Smrg{
5948de2362d3Smrg  const char *base;
5949de2362d3Smrg
59500d16fef4Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
5951de2362d3Smrg  /* Skip over the disk name in MSDOS pathnames. */
5952de2362d3Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
5953de2362d3Smrg    name += 2;
5954de2362d3Smrg#endif
5955de2362d3Smrg
5956de2362d3Smrg  for (base = name; *name; name++)
5957de2362d3Smrg    if (IS_DIR_SEPARATOR (*name))
5958de2362d3Smrg      base = name + 1;
5959de2362d3Smrg  return base;
5960de2362d3Smrg}
5961de2362d3Smrg
5962de2362d3Smrgint
5963de2362d3Smrgcheck_executable (const char *path)
5964de2362d3Smrg{
5965de2362d3Smrg  struct stat st;
5966de2362d3Smrg
5967de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
5968de2362d3Smrg                  nonempty (path));
5969de2362d3Smrg  if ((!path) || (!*path))
5970de2362d3Smrg    return 0;
5971de2362d3Smrg
5972de2362d3Smrg  if ((stat (path, &st) >= 0)
5973de2362d3Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
5974de2362d3Smrg    return 1;
5975de2362d3Smrg  else
5976de2362d3Smrg    return 0;
5977de2362d3Smrg}
5978de2362d3Smrg
5979de2362d3Smrgint
5980de2362d3Smrgmake_executable (const char *path)
5981de2362d3Smrg{
5982de2362d3Smrg  int rval = 0;
5983de2362d3Smrg  struct stat st;
5984de2362d3Smrg
5985de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
5986de2362d3Smrg                  nonempty (path));
5987de2362d3Smrg  if ((!path) || (!*path))
5988de2362d3Smrg    return 0;
5989de2362d3Smrg
5990de2362d3Smrg  if (stat (path, &st) >= 0)
5991de2362d3Smrg    {
5992de2362d3Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
5993de2362d3Smrg    }
5994de2362d3Smrg  return rval;
5995de2362d3Smrg}
5996de2362d3Smrg
5997de2362d3Smrg/* Searches for the full path of the wrapper.  Returns
5998de2362d3Smrg   newly allocated full path name if found, NULL otherwise
5999de2362d3Smrg   Does not chase symlinks, even on platforms that support them.
6000de2362d3Smrg*/
6001de2362d3Smrgchar *
6002de2362d3Smrgfind_executable (const char *wrapper)
6003de2362d3Smrg{
6004de2362d3Smrg  int has_slash = 0;
6005de2362d3Smrg  const char *p;
6006de2362d3Smrg  const char *p_next;
6007de2362d3Smrg  /* static buffer for getcwd */
6008de2362d3Smrg  char tmp[LT_PATHMAX + 1];
60090d16fef4Smrg  size_t tmp_len;
6010de2362d3Smrg  char *concat_name;
6011de2362d3Smrg
6012de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
6013de2362d3Smrg                  nonempty (wrapper));
6014de2362d3Smrg
6015de2362d3Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
6016de2362d3Smrg    return NULL;
6017de2362d3Smrg
6018de2362d3Smrg  /* Absolute path? */
60190d16fef4Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6020de2362d3Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
6021de2362d3Smrg    {
6022de2362d3Smrg      concat_name = xstrdup (wrapper);
6023de2362d3Smrg      if (check_executable (concat_name))
6024de2362d3Smrg	return concat_name;
6025de2362d3Smrg      XFREE (concat_name);
6026de2362d3Smrg    }
6027de2362d3Smrg  else
6028de2362d3Smrg    {
6029de2362d3Smrg#endif
6030de2362d3Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
6031de2362d3Smrg	{
6032de2362d3Smrg	  concat_name = xstrdup (wrapper);
6033de2362d3Smrg	  if (check_executable (concat_name))
6034de2362d3Smrg	    return concat_name;
6035de2362d3Smrg	  XFREE (concat_name);
6036de2362d3Smrg	}
60370d16fef4Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6038de2362d3Smrg    }
6039de2362d3Smrg#endif
6040de2362d3Smrg
6041de2362d3Smrg  for (p = wrapper; *p; p++)
6042de2362d3Smrg    if (*p == '/')
6043de2362d3Smrg      {
6044de2362d3Smrg	has_slash = 1;
6045de2362d3Smrg	break;
6046de2362d3Smrg      }
6047de2362d3Smrg  if (!has_slash)
6048de2362d3Smrg    {
6049de2362d3Smrg      /* no slashes; search PATH */
6050de2362d3Smrg      const char *path = getenv ("PATH");
6051de2362d3Smrg      if (path != NULL)
6052de2362d3Smrg	{
6053de2362d3Smrg	  for (p = path; *p; p = p_next)
6054de2362d3Smrg	    {
6055de2362d3Smrg	      const char *q;
6056de2362d3Smrg	      size_t p_len;
6057de2362d3Smrg	      for (q = p; *q; q++)
6058de2362d3Smrg		if (IS_PATH_SEPARATOR (*q))
6059de2362d3Smrg		  break;
60600d16fef4Smrg	      p_len = (size_t) (q - p);
6061de2362d3Smrg	      p_next = (*q == '\0' ? q : q + 1);
6062de2362d3Smrg	      if (p_len == 0)
6063de2362d3Smrg		{
6064de2362d3Smrg		  /* empty path: current directory */
6065de2362d3Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
6066de2362d3Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6067de2362d3Smrg                              nonnull (strerror (errno)));
6068de2362d3Smrg		  tmp_len = strlen (tmp);
6069de2362d3Smrg		  concat_name =
6070de2362d3Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6071de2362d3Smrg		  memcpy (concat_name, tmp, tmp_len);
6072de2362d3Smrg		  concat_name[tmp_len] = '/';
6073de2362d3Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
6074de2362d3Smrg		}
6075de2362d3Smrg	      else
6076de2362d3Smrg		{
6077de2362d3Smrg		  concat_name =
6078de2362d3Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
6079de2362d3Smrg		  memcpy (concat_name, p, p_len);
6080de2362d3Smrg		  concat_name[p_len] = '/';
6081de2362d3Smrg		  strcpy (concat_name + p_len + 1, wrapper);
6082de2362d3Smrg		}
6083de2362d3Smrg	      if (check_executable (concat_name))
6084de2362d3Smrg		return concat_name;
6085de2362d3Smrg	      XFREE (concat_name);
6086de2362d3Smrg	    }
6087de2362d3Smrg	}
6088de2362d3Smrg      /* not found in PATH; assume curdir */
6089de2362d3Smrg    }
6090de2362d3Smrg  /* Relative path | not found in path: prepend cwd */
6091de2362d3Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
6092de2362d3Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6093de2362d3Smrg              nonnull (strerror (errno)));
6094de2362d3Smrg  tmp_len = strlen (tmp);
6095de2362d3Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6096de2362d3Smrg  memcpy (concat_name, tmp, tmp_len);
6097de2362d3Smrg  concat_name[tmp_len] = '/';
6098de2362d3Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
6099de2362d3Smrg
6100de2362d3Smrg  if (check_executable (concat_name))
6101de2362d3Smrg    return concat_name;
6102de2362d3Smrg  XFREE (concat_name);
6103de2362d3Smrg  return NULL;
6104de2362d3Smrg}
6105de2362d3Smrg
6106de2362d3Smrgchar *
6107de2362d3Smrgchase_symlinks (const char *pathspec)
6108de2362d3Smrg{
6109de2362d3Smrg#ifndef S_ISLNK
6110de2362d3Smrg  return xstrdup (pathspec);
6111de2362d3Smrg#else
6112de2362d3Smrg  char buf[LT_PATHMAX];
6113de2362d3Smrg  struct stat s;
6114de2362d3Smrg  char *tmp_pathspec = xstrdup (pathspec);
6115de2362d3Smrg  char *p;
6116de2362d3Smrg  int has_symlinks = 0;
6117de2362d3Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
6118de2362d3Smrg    {
6119de2362d3Smrg      lt_debugprintf (__FILE__, __LINE__,
6120de2362d3Smrg		      "checking path component for symlinks: %s\n",
6121de2362d3Smrg		      tmp_pathspec);
6122de2362d3Smrg      if (lstat (tmp_pathspec, &s) == 0)
6123de2362d3Smrg	{
6124de2362d3Smrg	  if (S_ISLNK (s.st_mode) != 0)
6125de2362d3Smrg	    {
6126de2362d3Smrg	      has_symlinks = 1;
6127de2362d3Smrg	      break;
6128de2362d3Smrg	    }
6129de2362d3Smrg
6130de2362d3Smrg	  /* search backwards for last DIR_SEPARATOR */
6131de2362d3Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
6132de2362d3Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6133de2362d3Smrg	    p--;
6134de2362d3Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6135de2362d3Smrg	    {
6136de2362d3Smrg	      /* no more DIR_SEPARATORS left */
6137de2362d3Smrg	      break;
6138de2362d3Smrg	    }
6139de2362d3Smrg	  *p = '\0';
6140de2362d3Smrg	}
6141de2362d3Smrg      else
6142de2362d3Smrg	{
6143de2362d3Smrg	  lt_fatal (__FILE__, __LINE__,
6144de2362d3Smrg		    "error accessing file \"%s\": %s",
6145de2362d3Smrg		    tmp_pathspec, nonnull (strerror (errno)));
6146de2362d3Smrg	}
6147de2362d3Smrg    }
6148de2362d3Smrg  XFREE (tmp_pathspec);
6149de2362d3Smrg
6150de2362d3Smrg  if (!has_symlinks)
6151de2362d3Smrg    {
6152de2362d3Smrg      return xstrdup (pathspec);
6153de2362d3Smrg    }
6154de2362d3Smrg
6155de2362d3Smrg  tmp_pathspec = realpath (pathspec, buf);
6156de2362d3Smrg  if (tmp_pathspec == 0)
6157de2362d3Smrg    {
6158de2362d3Smrg      lt_fatal (__FILE__, __LINE__,
6159de2362d3Smrg		"could not follow symlinks for %s", pathspec);
6160de2362d3Smrg    }
6161de2362d3Smrg  return xstrdup (tmp_pathspec);
6162de2362d3Smrg#endif
6163de2362d3Smrg}
6164de2362d3Smrg
6165de2362d3Smrgchar *
6166de2362d3Smrgstrendzap (char *str, const char *pat)
6167de2362d3Smrg{
6168de2362d3Smrg  size_t len, patlen;
6169de2362d3Smrg
6170de2362d3Smrg  assert (str != NULL);
6171de2362d3Smrg  assert (pat != NULL);
6172de2362d3Smrg
6173de2362d3Smrg  len = strlen (str);
6174de2362d3Smrg  patlen = strlen (pat);
6175de2362d3Smrg
6176de2362d3Smrg  if (patlen <= len)
6177de2362d3Smrg    {
6178de2362d3Smrg      str += len - patlen;
61790d16fef4Smrg      if (STREQ (str, pat))
6180de2362d3Smrg	*str = '\0';
6181de2362d3Smrg    }
6182de2362d3Smrg  return str;
6183de2362d3Smrg}
6184de2362d3Smrg
6185de2362d3Smrgvoid
6186de2362d3Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
6187de2362d3Smrg{
6188de2362d3Smrg  va_list args;
6189de2362d3Smrg  if (lt_debug)
6190de2362d3Smrg    {
6191de2362d3Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
6192de2362d3Smrg      va_start (args, fmt);
6193de2362d3Smrg      (void) vfprintf (stderr, fmt, args);
6194de2362d3Smrg      va_end (args);
6195de2362d3Smrg    }
6196de2362d3Smrg}
6197de2362d3Smrg
6198de2362d3Smrgstatic void
6199de2362d3Smrglt_error_core (int exit_status, const char *file,
6200de2362d3Smrg	       int line, const char *mode,
6201de2362d3Smrg	       const char *message, va_list ap)
6202de2362d3Smrg{
6203de2362d3Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
6204de2362d3Smrg  vfprintf (stderr, message, ap);
6205de2362d3Smrg  fprintf (stderr, ".\n");
6206de2362d3Smrg
6207de2362d3Smrg  if (exit_status >= 0)
6208de2362d3Smrg    exit (exit_status);
6209de2362d3Smrg}
6210de2362d3Smrg
6211de2362d3Smrgvoid
6212de2362d3Smrglt_fatal (const char *file, int line, const char *message, ...)
6213de2362d3Smrg{
6214de2362d3Smrg  va_list ap;
6215de2362d3Smrg  va_start (ap, message);
6216de2362d3Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
6217de2362d3Smrg  va_end (ap);
6218de2362d3Smrg}
6219de2362d3Smrg
6220de2362d3Smrgstatic const char *
6221de2362d3Smrgnonnull (const char *s)
6222de2362d3Smrg{
6223de2362d3Smrg  return s ? s : "(null)";
6224de2362d3Smrg}
6225de2362d3Smrg
6226de2362d3Smrgstatic const char *
6227de2362d3Smrgnonempty (const char *s)
6228de2362d3Smrg{
6229de2362d3Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
6230de2362d3Smrg}
6231de2362d3Smrg
6232de2362d3Smrgvoid
6233de2362d3Smrglt_setenv (const char *name, const char *value)
6234de2362d3Smrg{
6235de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__,
6236de2362d3Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
6237de2362d3Smrg                  nonnull (name), nonnull (value));
6238de2362d3Smrg  {
6239de2362d3Smrg#ifdef HAVE_SETENV
6240de2362d3Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
6241de2362d3Smrg    char *str = xstrdup (value);
6242de2362d3Smrg    setenv (name, str, 1);
6243de2362d3Smrg#else
62440d16fef4Smrg    size_t len = strlen (name) + 1 + strlen (value) + 1;
6245de2362d3Smrg    char *str = XMALLOC (char, len);
6246de2362d3Smrg    sprintf (str, "%s=%s", name, value);
6247de2362d3Smrg    if (putenv (str) != EXIT_SUCCESS)
6248de2362d3Smrg      {
6249de2362d3Smrg        XFREE (str);
6250de2362d3Smrg      }
6251de2362d3Smrg#endif
6252de2362d3Smrg  }
6253de2362d3Smrg}
6254de2362d3Smrg
6255de2362d3Smrgchar *
6256de2362d3Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
6257de2362d3Smrg{
6258de2362d3Smrg  char *new_value;
6259de2362d3Smrg  if (orig_value && *orig_value)
6260de2362d3Smrg    {
62610d16fef4Smrg      size_t orig_value_len = strlen (orig_value);
62620d16fef4Smrg      size_t add_len = strlen (add);
6263de2362d3Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
6264de2362d3Smrg      if (to_end)
6265de2362d3Smrg        {
6266de2362d3Smrg          strcpy (new_value, orig_value);
6267de2362d3Smrg          strcpy (new_value + orig_value_len, add);
6268de2362d3Smrg        }
6269de2362d3Smrg      else
6270de2362d3Smrg        {
6271de2362d3Smrg          strcpy (new_value, add);
6272de2362d3Smrg          strcpy (new_value + add_len, orig_value);
6273de2362d3Smrg        }
6274de2362d3Smrg    }
6275de2362d3Smrg  else
6276de2362d3Smrg    {
6277de2362d3Smrg      new_value = xstrdup (add);
6278de2362d3Smrg    }
6279de2362d3Smrg  return new_value;
6280de2362d3Smrg}
6281de2362d3Smrg
6282de2362d3Smrgvoid
6283de2362d3Smrglt_update_exe_path (const char *name, const char *value)
6284de2362d3Smrg{
6285de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__,
6286de2362d3Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
6287de2362d3Smrg                  nonnull (name), nonnull (value));
6288de2362d3Smrg
6289de2362d3Smrg  if (name && *name && value && *value)
6290de2362d3Smrg    {
6291de2362d3Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
6292de2362d3Smrg      /* some systems can't cope with a ':'-terminated path #' */
62930d16fef4Smrg      size_t len = strlen (new_value);
62940d16fef4Smrg      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
6295de2362d3Smrg        {
62960d16fef4Smrg          new_value[--len] = '\0';
6297de2362d3Smrg        }
6298de2362d3Smrg      lt_setenv (name, new_value);
6299de2362d3Smrg      XFREE (new_value);
6300de2362d3Smrg    }
6301de2362d3Smrg}
6302de2362d3Smrg
6303de2362d3Smrgvoid
6304de2362d3Smrglt_update_lib_path (const char *name, const char *value)
6305de2362d3Smrg{
6306de2362d3Smrg  lt_debugprintf (__FILE__, __LINE__,
6307de2362d3Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
6308de2362d3Smrg                  nonnull (name), nonnull (value));
6309de2362d3Smrg
6310de2362d3Smrg  if (name && *name && value && *value)
6311de2362d3Smrg    {
6312de2362d3Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
6313de2362d3Smrg      lt_setenv (name, new_value);
6314de2362d3Smrg      XFREE (new_value);
6315de2362d3Smrg    }
6316de2362d3Smrg}
6317de2362d3Smrg
6318de2362d3SmrgEOF
6319de2362d3Smrg	    case $host_os in
6320de2362d3Smrg	      mingw*)
6321de2362d3Smrg		cat <<"EOF"
6322de2362d3Smrg
6323de2362d3Smrg/* Prepares an argument vector before calling spawn().
6324de2362d3Smrg   Note that spawn() does not by itself call the command interpreter
6325de2362d3Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
6326de2362d3Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
6327de2362d3Smrg         GetVersionEx(&v);
6328de2362d3Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
6329de2362d3Smrg      }) ? "cmd.exe" : "command.com").
6330de2362d3Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
6331de2362d3Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
6332de2362d3Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
6333de2362d3Smrg   special way:
6334de2362d3Smrg   - Space and tab are interpreted as delimiters. They are not treated as
6335de2362d3Smrg     delimiters if they are surrounded by double quotes: "...".
6336de2362d3Smrg   - Unescaped double quotes are removed from the input. Their only effect is
6337de2362d3Smrg     that within double quotes, space and tab are treated like normal
6338de2362d3Smrg     characters.
6339de2362d3Smrg   - Backslashes not followed by double quotes are not special.
6340de2362d3Smrg   - But 2*n+1 backslashes followed by a double quote become
6341de2362d3Smrg     n backslashes followed by a double quote (n >= 0):
6342de2362d3Smrg       \" -> "
6343de2362d3Smrg       \\\" -> \"
6344de2362d3Smrg       \\\\\" -> \\"
6345de2362d3Smrg */
6346de2362d3Smrg#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"
6347de2362d3Smrg#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"
6348de2362d3Smrgchar **
6349de2362d3Smrgprepare_spawn (char **argv)
6350de2362d3Smrg{
6351de2362d3Smrg  size_t argc;
6352de2362d3Smrg  char **new_argv;
6353de2362d3Smrg  size_t i;
6354de2362d3Smrg
6355de2362d3Smrg  /* Count number of arguments.  */
6356de2362d3Smrg  for (argc = 0; argv[argc] != NULL; argc++)
6357de2362d3Smrg    ;
6358de2362d3Smrg
6359de2362d3Smrg  /* Allocate new argument vector.  */
6360de2362d3Smrg  new_argv = XMALLOC (char *, argc + 1);
6361de2362d3Smrg
6362de2362d3Smrg  /* Put quoted arguments into the new argument vector.  */
6363de2362d3Smrg  for (i = 0; i < argc; i++)
6364de2362d3Smrg    {
6365de2362d3Smrg      const char *string = argv[i];
6366de2362d3Smrg
6367de2362d3Smrg      if (string[0] == '\0')
6368de2362d3Smrg	new_argv[i] = xstrdup ("\"\"");
6369de2362d3Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
6370de2362d3Smrg	{
6371de2362d3Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
6372de2362d3Smrg	  size_t length;
6373de2362d3Smrg	  unsigned int backslashes;
6374de2362d3Smrg	  const char *s;
6375de2362d3Smrg	  char *quoted_string;
6376de2362d3Smrg	  char *p;
6377de2362d3Smrg
6378de2362d3Smrg	  length = 0;
6379de2362d3Smrg	  backslashes = 0;
6380de2362d3Smrg	  if (quote_around)
6381de2362d3Smrg	    length++;
6382de2362d3Smrg	  for (s = string; *s != '\0'; s++)
6383de2362d3Smrg	    {
6384de2362d3Smrg	      char c = *s;
6385de2362d3Smrg	      if (c == '"')
6386de2362d3Smrg		length += backslashes + 1;
6387de2362d3Smrg	      length++;
6388de2362d3Smrg	      if (c == '\\')
6389de2362d3Smrg		backslashes++;
6390de2362d3Smrg	      else
6391de2362d3Smrg		backslashes = 0;
6392de2362d3Smrg	    }
6393de2362d3Smrg	  if (quote_around)
6394de2362d3Smrg	    length += backslashes + 1;
6395de2362d3Smrg
6396de2362d3Smrg	  quoted_string = XMALLOC (char, length + 1);
6397de2362d3Smrg
6398de2362d3Smrg	  p = quoted_string;
6399de2362d3Smrg	  backslashes = 0;
6400de2362d3Smrg	  if (quote_around)
6401de2362d3Smrg	    *p++ = '"';
6402de2362d3Smrg	  for (s = string; *s != '\0'; s++)
6403de2362d3Smrg	    {
6404de2362d3Smrg	      char c = *s;
6405de2362d3Smrg	      if (c == '"')
6406de2362d3Smrg		{
6407de2362d3Smrg		  unsigned int j;
6408de2362d3Smrg		  for (j = backslashes + 1; j > 0; j--)
6409de2362d3Smrg		    *p++ = '\\';
6410de2362d3Smrg		}
6411de2362d3Smrg	      *p++ = c;
6412de2362d3Smrg	      if (c == '\\')
6413de2362d3Smrg		backslashes++;
6414de2362d3Smrg	      else
6415de2362d3Smrg		backslashes = 0;
6416de2362d3Smrg	    }
6417de2362d3Smrg	  if (quote_around)
6418de2362d3Smrg	    {
6419de2362d3Smrg	      unsigned int j;
6420de2362d3Smrg	      for (j = backslashes; j > 0; j--)
6421de2362d3Smrg		*p++ = '\\';
6422de2362d3Smrg	      *p++ = '"';
6423de2362d3Smrg	    }
6424de2362d3Smrg	  *p = '\0';
6425de2362d3Smrg
6426de2362d3Smrg	  new_argv[i] = quoted_string;
6427de2362d3Smrg	}
6428de2362d3Smrg      else
6429de2362d3Smrg	new_argv[i] = (char *) string;
6430de2362d3Smrg    }
6431de2362d3Smrg  new_argv[argc] = NULL;
6432de2362d3Smrg
6433de2362d3Smrg  return new_argv;
6434de2362d3Smrg}
6435de2362d3SmrgEOF
6436de2362d3Smrg		;;
6437de2362d3Smrg	    esac
6438de2362d3Smrg
6439de2362d3Smrg            cat <<"EOF"
6440de2362d3Smrgvoid lt_dump_script (FILE* f)
6441de2362d3Smrg{
6442de2362d3SmrgEOF
6443de2362d3Smrg	    func_emit_wrapper yes |
6444de2362d3Smrg	      $SED -n -e '
6445de2362d3Smrgs/^\(.\{79\}\)\(..*\)/\1\
6446de2362d3Smrg\2/
6447de2362d3Smrgh
6448de2362d3Smrgs/\([\\"]\)/\\\1/g
6449de2362d3Smrgs/$/\\n/
6450de2362d3Smrgs/\([^\n]*\).*/  fputs ("\1", f);/p
6451de2362d3Smrgg
6452de2362d3SmrgD'
6453de2362d3Smrg            cat <<"EOF"
6454de2362d3Smrg}
6455de2362d3SmrgEOF
6456de2362d3Smrg}
6457de2362d3Smrg# end: func_emit_cwrapperexe_src
6458de2362d3Smrg
6459de2362d3Smrg# func_win32_import_lib_p ARG
6460de2362d3Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
6461de2362d3Smrgfunc_win32_import_lib_p ()
6462de2362d3Smrg{
64630d16fef4Smrg    $debug_cmd
64640d16fef4Smrg
6465de2362d3Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
6466de2362d3Smrg    *import*) : ;;
6467de2362d3Smrg    *) false ;;
6468de2362d3Smrg    esac
6469de2362d3Smrg}
6470de2362d3Smrg
64710d16fef4Smrg# func_suncc_cstd_abi
64720d16fef4Smrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
64730d16fef4Smrg# Several compiler flags select an ABI that is incompatible with the
64740d16fef4Smrg# Cstd library. Avoid specifying it if any are in CXXFLAGS.
64750d16fef4Smrgfunc_suncc_cstd_abi ()
64760d16fef4Smrg{
64770d16fef4Smrg    $debug_cmd
64780d16fef4Smrg
64790d16fef4Smrg    case " $compile_command " in
64800d16fef4Smrg    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
64810d16fef4Smrg      suncc_use_cstd_abi=no
64820d16fef4Smrg      ;;
64830d16fef4Smrg    *)
64840d16fef4Smrg      suncc_use_cstd_abi=yes
64850d16fef4Smrg      ;;
64860d16fef4Smrg    esac
64870d16fef4Smrg}
64880d16fef4Smrg
6489de2362d3Smrg# func_mode_link arg...
6490de2362d3Smrgfunc_mode_link ()
6491de2362d3Smrg{
64920d16fef4Smrg    $debug_cmd
64930d16fef4Smrg
6494de2362d3Smrg    case $host in
6495de2362d3Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
6496de2362d3Smrg      # It is impossible to link a dll without this setting, and
6497de2362d3Smrg      # we shouldn't force the makefile maintainer to figure out
64980d16fef4Smrg      # what system we are compiling for in order to pass an extra
6499de2362d3Smrg      # flag for every libtool invocation.
6500de2362d3Smrg      # allow_undefined=no
6501de2362d3Smrg
6502de2362d3Smrg      # FIXME: Unfortunately, there are problems with the above when trying
65030d16fef4Smrg      # to make a dll that has undefined symbols, in which case not
6504de2362d3Smrg      # even a static library is built.  For now, we need to specify
6505de2362d3Smrg      # -no-undefined on the libtool link line when we can be certain
6506de2362d3Smrg      # that all symbols are satisfied, otherwise we get a static library.
6507de2362d3Smrg      allow_undefined=yes
6508de2362d3Smrg      ;;
6509de2362d3Smrg    *)
6510de2362d3Smrg      allow_undefined=yes
6511de2362d3Smrg      ;;
6512de2362d3Smrg    esac
6513de2362d3Smrg    libtool_args=$nonopt
6514de2362d3Smrg    base_compile="$nonopt $@"
6515de2362d3Smrg    compile_command=$nonopt
6516de2362d3Smrg    finalize_command=$nonopt
6517de2362d3Smrg
6518de2362d3Smrg    compile_rpath=
6519de2362d3Smrg    finalize_rpath=
6520de2362d3Smrg    compile_shlibpath=
6521de2362d3Smrg    finalize_shlibpath=
6522de2362d3Smrg    convenience=
6523de2362d3Smrg    old_convenience=
6524de2362d3Smrg    deplibs=
6525de2362d3Smrg    old_deplibs=
6526de2362d3Smrg    compiler_flags=
6527de2362d3Smrg    linker_flags=
6528de2362d3Smrg    dllsearchpath=
6529de2362d3Smrg    lib_search_path=`pwd`
6530de2362d3Smrg    inst_prefix_dir=
6531de2362d3Smrg    new_inherited_linker_flags=
6532de2362d3Smrg
6533de2362d3Smrg    avoid_version=no
6534de2362d3Smrg    bindir=
6535de2362d3Smrg    dlfiles=
6536de2362d3Smrg    dlprefiles=
6537de2362d3Smrg    dlself=no
6538de2362d3Smrg    export_dynamic=no
6539de2362d3Smrg    export_symbols=
6540de2362d3Smrg    export_symbols_regex=
6541de2362d3Smrg    generated=
6542de2362d3Smrg    libobjs=
6543de2362d3Smrg    ltlibs=
6544de2362d3Smrg    module=no
6545de2362d3Smrg    no_install=no
6546de2362d3Smrg    objs=
65470d16fef4Smrg    os2dllname=
6548de2362d3Smrg    non_pic_objects=
6549de2362d3Smrg    precious_files_regex=
6550de2362d3Smrg    prefer_static_libs=no
65510d16fef4Smrg    preload=false
6552de2362d3Smrg    prev=
6553de2362d3Smrg    prevarg=
6554de2362d3Smrg    release=
6555de2362d3Smrg    rpath=
6556de2362d3Smrg    xrpath=
6557de2362d3Smrg    perm_rpath=
6558de2362d3Smrg    temp_rpath=
6559de2362d3Smrg    thread_safe=no
6560de2362d3Smrg    vinfo=
6561de2362d3Smrg    vinfo_number=no
6562de2362d3Smrg    weak_libs=
65630d16fef4Smrg    single_module=$wl-single_module
6564de2362d3Smrg    func_infer_tag $base_compile
6565de2362d3Smrg
6566de2362d3Smrg    # We need to know -static, to get the right output filenames.
6567de2362d3Smrg    for arg
6568de2362d3Smrg    do
6569de2362d3Smrg      case $arg in
6570de2362d3Smrg      -shared)
65710d16fef4Smrg	test yes != "$build_libtool_libs" \
65720d16fef4Smrg	  && func_fatal_configuration "cannot build a shared library"
6573de2362d3Smrg	build_old_libs=no
6574de2362d3Smrg	break
6575de2362d3Smrg	;;
6576de2362d3Smrg      -all-static | -static | -static-libtool-libs)
6577de2362d3Smrg	case $arg in
6578de2362d3Smrg	-all-static)
65790d16fef4Smrg	  if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
6580de2362d3Smrg	    func_warning "complete static linking is impossible in this configuration"
6581de2362d3Smrg	  fi
6582de2362d3Smrg	  if test -n "$link_static_flag"; then
6583de2362d3Smrg	    dlopen_self=$dlopen_self_static
6584de2362d3Smrg	  fi
6585de2362d3Smrg	  prefer_static_libs=yes
6586de2362d3Smrg	  ;;
6587de2362d3Smrg	-static)
6588de2362d3Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
6589de2362d3Smrg	    dlopen_self=$dlopen_self_static
6590de2362d3Smrg	  fi
6591de2362d3Smrg	  prefer_static_libs=built
6592de2362d3Smrg	  ;;
6593de2362d3Smrg	-static-libtool-libs)
6594de2362d3Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
6595de2362d3Smrg	    dlopen_self=$dlopen_self_static
6596de2362d3Smrg	  fi
6597de2362d3Smrg	  prefer_static_libs=yes
6598de2362d3Smrg	  ;;
6599de2362d3Smrg	esac
6600de2362d3Smrg	build_libtool_libs=no
6601de2362d3Smrg	build_old_libs=yes
6602de2362d3Smrg	break
6603de2362d3Smrg	;;
6604de2362d3Smrg      esac
6605de2362d3Smrg    done
6606de2362d3Smrg
6607de2362d3Smrg    # See if our shared archives depend on static archives.
6608de2362d3Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
6609de2362d3Smrg
6610de2362d3Smrg    # Go through the arguments, transforming them on the way.
6611de2362d3Smrg    while test "$#" -gt 0; do
66120d16fef4Smrg      arg=$1
6613de2362d3Smrg      shift
6614de2362d3Smrg      func_quote_for_eval "$arg"
6615de2362d3Smrg      qarg=$func_quote_for_eval_unquoted_result
6616de2362d3Smrg      func_append libtool_args " $func_quote_for_eval_result"
6617de2362d3Smrg
6618de2362d3Smrg      # If the previous option needs an argument, assign it.
6619de2362d3Smrg      if test -n "$prev"; then
6620de2362d3Smrg	case $prev in
6621de2362d3Smrg	output)
6622de2362d3Smrg	  func_append compile_command " @OUTPUT@"
6623de2362d3Smrg	  func_append finalize_command " @OUTPUT@"
6624de2362d3Smrg	  ;;
6625de2362d3Smrg	esac
6626de2362d3Smrg
6627de2362d3Smrg	case $prev in
6628de2362d3Smrg	bindir)
66290d16fef4Smrg	  bindir=$arg
6630de2362d3Smrg	  prev=
6631de2362d3Smrg	  continue
6632de2362d3Smrg	  ;;
6633de2362d3Smrg	dlfiles|dlprefiles)
66340d16fef4Smrg	  $preload || {
6635de2362d3Smrg	    # Add the symbol object into the linking commands.
6636de2362d3Smrg	    func_append compile_command " @SYMFILE@"
6637de2362d3Smrg	    func_append finalize_command " @SYMFILE@"
66380d16fef4Smrg	    preload=:
66390d16fef4Smrg	  }
6640de2362d3Smrg	  case $arg in
6641de2362d3Smrg	  *.la | *.lo) ;;  # We handle these cases below.
6642de2362d3Smrg	  force)
66430d16fef4Smrg	    if test no = "$dlself"; then
6644de2362d3Smrg	      dlself=needless
6645de2362d3Smrg	      export_dynamic=yes
6646de2362d3Smrg	    fi
6647de2362d3Smrg	    prev=
6648de2362d3Smrg	    continue
6649de2362d3Smrg	    ;;
6650de2362d3Smrg	  self)
66510d16fef4Smrg	    if test dlprefiles = "$prev"; then
6652de2362d3Smrg	      dlself=yes
66530d16fef4Smrg	    elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
6654de2362d3Smrg	      dlself=yes
6655de2362d3Smrg	    else
6656de2362d3Smrg	      dlself=needless
6657de2362d3Smrg	      export_dynamic=yes
6658de2362d3Smrg	    fi
6659de2362d3Smrg	    prev=
6660de2362d3Smrg	    continue
6661de2362d3Smrg	    ;;
6662de2362d3Smrg	  *)
66630d16fef4Smrg	    if test dlfiles = "$prev"; then
6664de2362d3Smrg	      func_append dlfiles " $arg"
6665de2362d3Smrg	    else
6666de2362d3Smrg	      func_append dlprefiles " $arg"
6667de2362d3Smrg	    fi
6668de2362d3Smrg	    prev=
6669de2362d3Smrg	    continue
6670de2362d3Smrg	    ;;
6671de2362d3Smrg	  esac
6672de2362d3Smrg	  ;;
6673de2362d3Smrg	expsyms)
66740d16fef4Smrg	  export_symbols=$arg
6675de2362d3Smrg	  test -f "$arg" \
66760d16fef4Smrg	    || func_fatal_error "symbol file '$arg' does not exist"
6677de2362d3Smrg	  prev=
6678de2362d3Smrg	  continue
6679de2362d3Smrg	  ;;
6680de2362d3Smrg	expsyms_regex)
66810d16fef4Smrg	  export_symbols_regex=$arg
6682de2362d3Smrg	  prev=
6683de2362d3Smrg	  continue
6684de2362d3Smrg	  ;;
6685de2362d3Smrg	framework)
6686de2362d3Smrg	  case $host in
6687de2362d3Smrg	    *-*-darwin*)
6688de2362d3Smrg	      case "$deplibs " in
6689de2362d3Smrg		*" $qarg.ltframework "*) ;;
6690de2362d3Smrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
6691de2362d3Smrg		   ;;
6692de2362d3Smrg	      esac
6693de2362d3Smrg	      ;;
6694de2362d3Smrg	  esac
6695de2362d3Smrg	  prev=
6696de2362d3Smrg	  continue
6697de2362d3Smrg	  ;;
6698de2362d3Smrg	inst_prefix)
66990d16fef4Smrg	  inst_prefix_dir=$arg
67000d16fef4Smrg	  prev=
67010d16fef4Smrg	  continue
67020d16fef4Smrg	  ;;
67030d16fef4Smrg	mllvm)
67040d16fef4Smrg	  # Clang does not use LLVM to link, so we can simply discard any
67050d16fef4Smrg	  # '-mllvm $arg' options when doing the link step.
6706de2362d3Smrg	  prev=
6707de2362d3Smrg	  continue
6708de2362d3Smrg	  ;;
6709de2362d3Smrg	objectlist)
6710de2362d3Smrg	  if test -f "$arg"; then
6711de2362d3Smrg	    save_arg=$arg
6712de2362d3Smrg	    moreargs=
6713de2362d3Smrg	    for fil in `cat "$save_arg"`
6714de2362d3Smrg	    do
6715de2362d3Smrg#	      func_append moreargs " $fil"
6716de2362d3Smrg	      arg=$fil
6717de2362d3Smrg	      # A libtool-controlled object.
6718de2362d3Smrg
6719de2362d3Smrg	      # Check to see that this really is a libtool object.
6720de2362d3Smrg	      if func_lalib_unsafe_p "$arg"; then
6721de2362d3Smrg		pic_object=
6722de2362d3Smrg		non_pic_object=
6723de2362d3Smrg
6724de2362d3Smrg		# Read the .lo file
6725de2362d3Smrg		func_source "$arg"
6726de2362d3Smrg
6727de2362d3Smrg		if test -z "$pic_object" ||
6728de2362d3Smrg		   test -z "$non_pic_object" ||
67290d16fef4Smrg		   test none = "$pic_object" &&
67300d16fef4Smrg		   test none = "$non_pic_object"; then
67310d16fef4Smrg		  func_fatal_error "cannot find name of object for '$arg'"
6732de2362d3Smrg		fi
6733de2362d3Smrg
6734de2362d3Smrg		# Extract subdirectory from the argument.
6735de2362d3Smrg		func_dirname "$arg" "/" ""
67360d16fef4Smrg		xdir=$func_dirname_result
6737de2362d3Smrg
67380d16fef4Smrg		if test none != "$pic_object"; then
6739de2362d3Smrg		  # Prepend the subdirectory the object is found in.
67400d16fef4Smrg		  pic_object=$xdir$pic_object
6741de2362d3Smrg
67420d16fef4Smrg		  if test dlfiles = "$prev"; then
67430d16fef4Smrg		    if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
6744de2362d3Smrg		      func_append dlfiles " $pic_object"
6745de2362d3Smrg		      prev=
6746de2362d3Smrg		      continue
6747de2362d3Smrg		    else
6748de2362d3Smrg		      # If libtool objects are unsupported, then we need to preload.
6749de2362d3Smrg		      prev=dlprefiles
6750de2362d3Smrg		    fi
6751de2362d3Smrg		  fi
6752de2362d3Smrg
6753de2362d3Smrg		  # CHECK ME:  I think I busted this.  -Ossama
67540d16fef4Smrg		  if test dlprefiles = "$prev"; then
6755de2362d3Smrg		    # Preload the old-style object.
6756de2362d3Smrg		    func_append dlprefiles " $pic_object"
6757de2362d3Smrg		    prev=
6758de2362d3Smrg		  fi
6759de2362d3Smrg
6760de2362d3Smrg		  # A PIC object.
6761de2362d3Smrg		  func_append libobjs " $pic_object"
67620d16fef4Smrg		  arg=$pic_object
6763de2362d3Smrg		fi
6764de2362d3Smrg
6765de2362d3Smrg		# Non-PIC object.
67660d16fef4Smrg		if test none != "$non_pic_object"; then
6767de2362d3Smrg		  # Prepend the subdirectory the object is found in.
67680d16fef4Smrg		  non_pic_object=$xdir$non_pic_object
6769de2362d3Smrg
6770de2362d3Smrg		  # A standard non-PIC object
6771de2362d3Smrg		  func_append non_pic_objects " $non_pic_object"
67720d16fef4Smrg		  if test -z "$pic_object" || test none = "$pic_object"; then
67730d16fef4Smrg		    arg=$non_pic_object
6774de2362d3Smrg		  fi
6775de2362d3Smrg		else
6776de2362d3Smrg		  # If the PIC object exists, use it instead.
6777de2362d3Smrg		  # $xdir was prepended to $pic_object above.
67780d16fef4Smrg		  non_pic_object=$pic_object
6779de2362d3Smrg		  func_append non_pic_objects " $non_pic_object"
6780de2362d3Smrg		fi
6781de2362d3Smrg	      else
6782de2362d3Smrg		# Only an error if not doing a dry-run.
6783de2362d3Smrg		if $opt_dry_run; then
6784de2362d3Smrg		  # Extract subdirectory from the argument.
6785de2362d3Smrg		  func_dirname "$arg" "/" ""
67860d16fef4Smrg		  xdir=$func_dirname_result
6787de2362d3Smrg
6788de2362d3Smrg		  func_lo2o "$arg"
6789de2362d3Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
6790de2362d3Smrg		  non_pic_object=$xdir$func_lo2o_result
6791de2362d3Smrg		  func_append libobjs " $pic_object"
6792de2362d3Smrg		  func_append non_pic_objects " $non_pic_object"
6793de2362d3Smrg	        else
67940d16fef4Smrg		  func_fatal_error "'$arg' is not a valid libtool object"
6795de2362d3Smrg		fi
6796de2362d3Smrg	      fi
6797de2362d3Smrg	    done
6798de2362d3Smrg	  else
67990d16fef4Smrg	    func_fatal_error "link input file '$arg' does not exist"
6800de2362d3Smrg	  fi
6801de2362d3Smrg	  arg=$save_arg
6802de2362d3Smrg	  prev=
6803de2362d3Smrg	  continue
6804de2362d3Smrg	  ;;
68050d16fef4Smrg	os2dllname)
68060d16fef4Smrg	  os2dllname=$arg
68070d16fef4Smrg	  prev=
68080d16fef4Smrg	  continue
68090d16fef4Smrg	  ;;
6810de2362d3Smrg	precious_regex)
68110d16fef4Smrg	  precious_files_regex=$arg
6812de2362d3Smrg	  prev=
6813de2362d3Smrg	  continue
6814de2362d3Smrg	  ;;
6815de2362d3Smrg	release)
68160d16fef4Smrg	  release=-$arg
6817de2362d3Smrg	  prev=
6818de2362d3Smrg	  continue
6819de2362d3Smrg	  ;;
6820de2362d3Smrg	rpath | xrpath)
6821de2362d3Smrg	  # We need an absolute path.
6822de2362d3Smrg	  case $arg in
6823de2362d3Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
6824de2362d3Smrg	  *)
6825de2362d3Smrg	    func_fatal_error "only absolute run-paths are allowed"
6826de2362d3Smrg	    ;;
6827de2362d3Smrg	  esac
68280d16fef4Smrg	  if test rpath = "$prev"; then
6829de2362d3Smrg	    case "$rpath " in
6830de2362d3Smrg	    *" $arg "*) ;;
6831de2362d3Smrg	    *) func_append rpath " $arg" ;;
6832de2362d3Smrg	    esac
6833de2362d3Smrg	  else
6834de2362d3Smrg	    case "$xrpath " in
6835de2362d3Smrg	    *" $arg "*) ;;
6836de2362d3Smrg	    *) func_append xrpath " $arg" ;;
6837de2362d3Smrg	    esac
6838de2362d3Smrg	  fi
6839de2362d3Smrg	  prev=
6840de2362d3Smrg	  continue
6841de2362d3Smrg	  ;;
6842de2362d3Smrg	shrext)
68430d16fef4Smrg	  shrext_cmds=$arg
6844de2362d3Smrg	  prev=
6845de2362d3Smrg	  continue
6846de2362d3Smrg	  ;;
6847de2362d3Smrg	weak)
6848de2362d3Smrg	  func_append weak_libs " $arg"
6849de2362d3Smrg	  prev=
6850de2362d3Smrg	  continue
6851de2362d3Smrg	  ;;
6852de2362d3Smrg	xcclinker)
6853de2362d3Smrg	  func_append linker_flags " $qarg"
6854de2362d3Smrg	  func_append compiler_flags " $qarg"
6855de2362d3Smrg	  prev=
6856de2362d3Smrg	  func_append compile_command " $qarg"
6857de2362d3Smrg	  func_append finalize_command " $qarg"
6858de2362d3Smrg	  continue
6859de2362d3Smrg	  ;;
6860de2362d3Smrg	xcompiler)
6861de2362d3Smrg	  func_append compiler_flags " $qarg"
6862de2362d3Smrg	  prev=
6863de2362d3Smrg	  func_append compile_command " $qarg"
6864de2362d3Smrg	  func_append finalize_command " $qarg"
6865de2362d3Smrg	  continue
6866de2362d3Smrg	  ;;
6867de2362d3Smrg	xlinker)
6868de2362d3Smrg	  func_append linker_flags " $qarg"
6869de2362d3Smrg	  func_append compiler_flags " $wl$qarg"
6870de2362d3Smrg	  prev=
6871de2362d3Smrg	  func_append compile_command " $wl$qarg"
6872de2362d3Smrg	  func_append finalize_command " $wl$qarg"
6873de2362d3Smrg	  continue
6874de2362d3Smrg	  ;;
6875de2362d3Smrg	*)
6876de2362d3Smrg	  eval "$prev=\"\$arg\""
6877de2362d3Smrg	  prev=
6878de2362d3Smrg	  continue
6879de2362d3Smrg	  ;;
6880de2362d3Smrg	esac
6881de2362d3Smrg      fi # test -n "$prev"
6882de2362d3Smrg
68830d16fef4Smrg      prevarg=$arg
6884de2362d3Smrg
6885de2362d3Smrg      case $arg in
6886de2362d3Smrg      -all-static)
6887de2362d3Smrg	if test -n "$link_static_flag"; then
6888de2362d3Smrg	  # See comment for -static flag below, for more details.
6889de2362d3Smrg	  func_append compile_command " $link_static_flag"
6890de2362d3Smrg	  func_append finalize_command " $link_static_flag"
6891de2362d3Smrg	fi
6892de2362d3Smrg	continue
6893de2362d3Smrg	;;
6894de2362d3Smrg
6895de2362d3Smrg      -allow-undefined)
6896de2362d3Smrg	# FIXME: remove this flag sometime in the future.
68970d16fef4Smrg	func_fatal_error "'-allow-undefined' must not be used because it is the default"
6898de2362d3Smrg	;;
6899de2362d3Smrg
6900de2362d3Smrg      -avoid-version)
6901de2362d3Smrg	avoid_version=yes
6902de2362d3Smrg	continue
6903de2362d3Smrg	;;
6904de2362d3Smrg
6905de2362d3Smrg      -bindir)
6906de2362d3Smrg	prev=bindir
6907de2362d3Smrg	continue
6908de2362d3Smrg	;;
6909de2362d3Smrg
6910de2362d3Smrg      -dlopen)
6911de2362d3Smrg	prev=dlfiles
6912de2362d3Smrg	continue
6913de2362d3Smrg	;;
6914de2362d3Smrg
6915de2362d3Smrg      -dlpreopen)
6916de2362d3Smrg	prev=dlprefiles
6917de2362d3Smrg	continue
6918de2362d3Smrg	;;
6919de2362d3Smrg
6920de2362d3Smrg      -export-dynamic)
6921de2362d3Smrg	export_dynamic=yes
6922de2362d3Smrg	continue
6923de2362d3Smrg	;;
6924de2362d3Smrg
6925de2362d3Smrg      -export-symbols | -export-symbols-regex)
6926de2362d3Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
6927de2362d3Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
6928de2362d3Smrg	fi
69290d16fef4Smrg	if test X-export-symbols = "X$arg"; then
6930de2362d3Smrg	  prev=expsyms
6931de2362d3Smrg	else
6932de2362d3Smrg	  prev=expsyms_regex
6933de2362d3Smrg	fi
6934de2362d3Smrg	continue
6935de2362d3Smrg	;;
6936de2362d3Smrg
6937de2362d3Smrg      -framework)
6938de2362d3Smrg	prev=framework
6939de2362d3Smrg	continue
6940de2362d3Smrg	;;
6941de2362d3Smrg
6942de2362d3Smrg      -inst-prefix-dir)
6943de2362d3Smrg	prev=inst_prefix
6944de2362d3Smrg	continue
6945de2362d3Smrg	;;
6946de2362d3Smrg
6947de2362d3Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
6948de2362d3Smrg      # so, if we see these flags be careful not to treat them like -L
6949de2362d3Smrg      -L[A-Z][A-Z]*:*)
6950de2362d3Smrg	case $with_gcc/$host in
6951de2362d3Smrg	no/*-*-irix* | /*-*-irix*)
6952de2362d3Smrg	  func_append compile_command " $arg"
6953de2362d3Smrg	  func_append finalize_command " $arg"
6954de2362d3Smrg	  ;;
6955de2362d3Smrg	esac
6956de2362d3Smrg	continue
6957de2362d3Smrg	;;
6958de2362d3Smrg
6959de2362d3Smrg      -L*)
6960de2362d3Smrg	func_stripname "-L" '' "$arg"
6961de2362d3Smrg	if test -z "$func_stripname_result"; then
6962de2362d3Smrg	  if test "$#" -gt 0; then
69630d16fef4Smrg	    func_fatal_error "require no space between '-L' and '$1'"
6964de2362d3Smrg	  else
69650d16fef4Smrg	    func_fatal_error "need path for '-L' option"
6966de2362d3Smrg	  fi
6967de2362d3Smrg	fi
6968de2362d3Smrg	func_resolve_sysroot "$func_stripname_result"
6969de2362d3Smrg	dir=$func_resolve_sysroot_result
6970de2362d3Smrg	# We need an absolute path.
6971de2362d3Smrg	case $dir in
6972de2362d3Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
6973de2362d3Smrg	*)
6974de2362d3Smrg	  absdir=`cd "$dir" && pwd`
6975de2362d3Smrg	  test -z "$absdir" && \
69760d16fef4Smrg	    func_fatal_error "cannot determine absolute directory name of '$dir'"
69770d16fef4Smrg	  dir=$absdir
6978de2362d3Smrg	  ;;
6979de2362d3Smrg	esac
6980de2362d3Smrg	case "$deplibs " in
6981de2362d3Smrg	*" -L$dir "* | *" $arg "*)
6982de2362d3Smrg	  # Will only happen for absolute or sysroot arguments
6983de2362d3Smrg	  ;;
6984de2362d3Smrg	*)
6985de2362d3Smrg	  # Preserve sysroot, but never include relative directories
6986de2362d3Smrg	  case $dir in
6987de2362d3Smrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
6988de2362d3Smrg	    *) func_append deplibs " -L$dir" ;;
6989de2362d3Smrg	  esac
6990de2362d3Smrg	  func_append lib_search_path " $dir"
6991de2362d3Smrg	  ;;
6992de2362d3Smrg	esac
6993de2362d3Smrg	case $host in
6994de2362d3Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
6995de2362d3Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
6996de2362d3Smrg	  case :$dllsearchpath: in
6997de2362d3Smrg	  *":$dir:"*) ;;
6998de2362d3Smrg	  ::) dllsearchpath=$dir;;
6999de2362d3Smrg	  *) func_append dllsearchpath ":$dir";;
7000de2362d3Smrg	  esac
7001de2362d3Smrg	  case :$dllsearchpath: in
7002de2362d3Smrg	  *":$testbindir:"*) ;;
7003de2362d3Smrg	  ::) dllsearchpath=$testbindir;;
7004de2362d3Smrg	  *) func_append dllsearchpath ":$testbindir";;
7005de2362d3Smrg	  esac
7006de2362d3Smrg	  ;;
7007de2362d3Smrg	esac
7008de2362d3Smrg	continue
7009de2362d3Smrg	;;
7010de2362d3Smrg
7011de2362d3Smrg      -l*)
70120d16fef4Smrg	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
7013de2362d3Smrg	  case $host in
7014de2362d3Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
7015de2362d3Smrg	    # These systems don't actually have a C or math library (as such)
7016de2362d3Smrg	    continue
7017de2362d3Smrg	    ;;
7018de2362d3Smrg	  *-*-os2*)
7019de2362d3Smrg	    # These systems don't actually have a C library (as such)
70200d16fef4Smrg	    test X-lc = "X$arg" && continue
7021de2362d3Smrg	    ;;
70220d16fef4Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
7023de2362d3Smrg	    # Do not include libc due to us having libc/libc_r.
70240d16fef4Smrg	    test X-lc = "X$arg" && continue
7025de2362d3Smrg	    ;;
7026de2362d3Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
7027de2362d3Smrg	    # Rhapsody C and math libraries are in the System framework
7028de2362d3Smrg	    func_append deplibs " System.ltframework"
7029de2362d3Smrg	    continue
7030de2362d3Smrg	    ;;
7031de2362d3Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7032de2362d3Smrg	    # Causes problems with __ctype
70330d16fef4Smrg	    test X-lc = "X$arg" && continue
7034de2362d3Smrg	    ;;
7035de2362d3Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7036de2362d3Smrg	    # Compiler inserts libc in the correct place for threads to work
70370d16fef4Smrg	    test X-lc = "X$arg" && continue
7038de2362d3Smrg	    ;;
7039de2362d3Smrg	  esac
70400d16fef4Smrg	elif test X-lc_r = "X$arg"; then
7041de2362d3Smrg	 case $host in
70420d16fef4Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
7043de2362d3Smrg	   # Do not include libc_r directly, use -pthread flag.
7044de2362d3Smrg	   continue
7045de2362d3Smrg	   ;;
7046de2362d3Smrg	 esac
7047de2362d3Smrg	fi
7048de2362d3Smrg	func_append deplibs " $arg"
7049de2362d3Smrg	continue
7050de2362d3Smrg	;;
7051de2362d3Smrg
70520d16fef4Smrg      -mllvm)
70530d16fef4Smrg	prev=mllvm
70540d16fef4Smrg	continue
70550d16fef4Smrg	;;
70560d16fef4Smrg
7057de2362d3Smrg      -module)
7058de2362d3Smrg	module=yes
7059de2362d3Smrg	continue
7060de2362d3Smrg	;;
7061de2362d3Smrg
7062de2362d3Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
7063de2362d3Smrg      # classes, name mangling, and exception handling.
7064de2362d3Smrg      # Darwin uses the -arch flag to determine output architecture.
7065de2362d3Smrg      -model|-arch|-isysroot|--sysroot)
7066de2362d3Smrg	func_append compiler_flags " $arg"
7067de2362d3Smrg	func_append compile_command " $arg"
7068de2362d3Smrg	func_append finalize_command " $arg"
7069de2362d3Smrg	prev=xcompiler
7070de2362d3Smrg	continue
7071de2362d3Smrg	;;
7072de2362d3Smrg
7073de2362d3Smrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7074de2362d3Smrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7075de2362d3Smrg	func_append compiler_flags " $arg"
7076de2362d3Smrg	func_append compile_command " $arg"
7077de2362d3Smrg	func_append finalize_command " $arg"
7078de2362d3Smrg	case "$new_inherited_linker_flags " in
7079de2362d3Smrg	    *" $arg "*) ;;
7080de2362d3Smrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
7081de2362d3Smrg	esac
7082de2362d3Smrg	continue
7083de2362d3Smrg	;;
7084de2362d3Smrg
7085de2362d3Smrg      -multi_module)
70860d16fef4Smrg	single_module=$wl-multi_module
7087de2362d3Smrg	continue
7088de2362d3Smrg	;;
7089de2362d3Smrg
7090de2362d3Smrg      -no-fast-install)
7091de2362d3Smrg	fast_install=no
7092de2362d3Smrg	continue
7093de2362d3Smrg	;;
7094de2362d3Smrg
7095de2362d3Smrg      -no-install)
7096de2362d3Smrg	case $host in
7097de2362d3Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
7098de2362d3Smrg	  # The PATH hackery in wrapper scripts is required on Windows
7099de2362d3Smrg	  # and Darwin in order for the loader to find any dlls it needs.
71000d16fef4Smrg	  func_warning "'-no-install' is ignored for $host"
71010d16fef4Smrg	  func_warning "assuming '-no-fast-install' instead"
7102de2362d3Smrg	  fast_install=no
7103de2362d3Smrg	  ;;
7104de2362d3Smrg	*) no_install=yes ;;
7105de2362d3Smrg	esac
7106de2362d3Smrg	continue
7107de2362d3Smrg	;;
7108de2362d3Smrg
7109de2362d3Smrg      -no-undefined)
7110de2362d3Smrg	allow_undefined=no
7111de2362d3Smrg	continue
7112de2362d3Smrg	;;
7113de2362d3Smrg
7114de2362d3Smrg      -objectlist)
7115de2362d3Smrg	prev=objectlist
7116de2362d3Smrg	continue
7117de2362d3Smrg	;;
7118de2362d3Smrg
71190d16fef4Smrg      -os2dllname)
71200d16fef4Smrg	prev=os2dllname
71210d16fef4Smrg	continue
71220d16fef4Smrg	;;
71230d16fef4Smrg
7124de2362d3Smrg      -o) prev=output ;;
7125de2362d3Smrg
7126de2362d3Smrg      -precious-files-regex)
7127de2362d3Smrg	prev=precious_regex
7128de2362d3Smrg	continue
7129de2362d3Smrg	;;
7130de2362d3Smrg
7131de2362d3Smrg      -release)
7132de2362d3Smrg	prev=release
7133de2362d3Smrg	continue
7134de2362d3Smrg	;;
7135de2362d3Smrg
7136de2362d3Smrg      -rpath)
7137de2362d3Smrg	prev=rpath
7138de2362d3Smrg	continue
7139de2362d3Smrg	;;
7140de2362d3Smrg
7141de2362d3Smrg      -R)
7142de2362d3Smrg	prev=xrpath
7143de2362d3Smrg	continue
7144de2362d3Smrg	;;
7145de2362d3Smrg
7146de2362d3Smrg      -R*)
7147de2362d3Smrg	func_stripname '-R' '' "$arg"
7148de2362d3Smrg	dir=$func_stripname_result
7149de2362d3Smrg	# We need an absolute path.
7150de2362d3Smrg	case $dir in
7151de2362d3Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
7152de2362d3Smrg	=*)
7153de2362d3Smrg	  func_stripname '=' '' "$dir"
7154de2362d3Smrg	  dir=$lt_sysroot$func_stripname_result
7155de2362d3Smrg	  ;;
7156de2362d3Smrg	*)
7157de2362d3Smrg	  func_fatal_error "only absolute run-paths are allowed"
7158de2362d3Smrg	  ;;
7159de2362d3Smrg	esac
7160de2362d3Smrg	case "$xrpath " in
7161de2362d3Smrg	*" $dir "*) ;;
7162de2362d3Smrg	*) func_append xrpath " $dir" ;;
7163de2362d3Smrg	esac
7164de2362d3Smrg	continue
7165de2362d3Smrg	;;
7166de2362d3Smrg
7167de2362d3Smrg      -shared)
7168de2362d3Smrg	# The effects of -shared are defined in a previous loop.
7169de2362d3Smrg	continue
7170de2362d3Smrg	;;
7171de2362d3Smrg
7172de2362d3Smrg      -shrext)
7173de2362d3Smrg	prev=shrext
7174de2362d3Smrg	continue
7175de2362d3Smrg	;;
7176de2362d3Smrg
7177de2362d3Smrg      -static | -static-libtool-libs)
7178de2362d3Smrg	# The effects of -static are defined in a previous loop.
7179de2362d3Smrg	# We used to do the same as -all-static on platforms that
7180de2362d3Smrg	# didn't have a PIC flag, but the assumption that the effects
7181de2362d3Smrg	# would be equivalent was wrong.  It would break on at least
7182de2362d3Smrg	# Digital Unix and AIX.
7183de2362d3Smrg	continue
7184de2362d3Smrg	;;
7185de2362d3Smrg
7186de2362d3Smrg      -thread-safe)
7187de2362d3Smrg	thread_safe=yes
7188de2362d3Smrg	continue
7189de2362d3Smrg	;;
7190de2362d3Smrg
7191de2362d3Smrg      -version-info)
7192de2362d3Smrg	prev=vinfo
7193de2362d3Smrg	continue
7194de2362d3Smrg	;;
7195de2362d3Smrg
7196de2362d3Smrg      -version-number)
7197de2362d3Smrg	prev=vinfo
7198de2362d3Smrg	vinfo_number=yes
7199de2362d3Smrg	continue
7200de2362d3Smrg	;;
7201de2362d3Smrg
7202de2362d3Smrg      -weak)
7203de2362d3Smrg        prev=weak
7204de2362d3Smrg	continue
7205de2362d3Smrg	;;
7206de2362d3Smrg
7207de2362d3Smrg      -Wc,*)
7208de2362d3Smrg	func_stripname '-Wc,' '' "$arg"
7209de2362d3Smrg	args=$func_stripname_result
7210de2362d3Smrg	arg=
72110d16fef4Smrg	save_ifs=$IFS; IFS=,
7212de2362d3Smrg	for flag in $args; do
72130d16fef4Smrg	  IFS=$save_ifs
7214de2362d3Smrg          func_quote_for_eval "$flag"
7215de2362d3Smrg	  func_append arg " $func_quote_for_eval_result"
7216de2362d3Smrg	  func_append compiler_flags " $func_quote_for_eval_result"
7217de2362d3Smrg	done
72180d16fef4Smrg	IFS=$save_ifs
7219de2362d3Smrg	func_stripname ' ' '' "$arg"
7220de2362d3Smrg	arg=$func_stripname_result
7221de2362d3Smrg	;;
7222de2362d3Smrg
7223de2362d3Smrg      -Wl,*)
7224de2362d3Smrg	func_stripname '-Wl,' '' "$arg"
7225de2362d3Smrg	args=$func_stripname_result
7226de2362d3Smrg	arg=
72270d16fef4Smrg	save_ifs=$IFS; IFS=,
7228de2362d3Smrg	for flag in $args; do
72290d16fef4Smrg	  IFS=$save_ifs
7230de2362d3Smrg          func_quote_for_eval "$flag"
7231de2362d3Smrg	  func_append arg " $wl$func_quote_for_eval_result"
7232de2362d3Smrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
7233de2362d3Smrg	  func_append linker_flags " $func_quote_for_eval_result"
7234de2362d3Smrg	done
72350d16fef4Smrg	IFS=$save_ifs
7236de2362d3Smrg	func_stripname ' ' '' "$arg"
7237de2362d3Smrg	arg=$func_stripname_result
7238de2362d3Smrg	;;
7239de2362d3Smrg
7240de2362d3Smrg      -Xcompiler)
7241de2362d3Smrg	prev=xcompiler
7242de2362d3Smrg	continue
7243de2362d3Smrg	;;
7244de2362d3Smrg
7245de2362d3Smrg      -Xlinker)
7246de2362d3Smrg	prev=xlinker
7247de2362d3Smrg	continue
7248de2362d3Smrg	;;
7249de2362d3Smrg
7250de2362d3Smrg      -XCClinker)
7251de2362d3Smrg	prev=xcclinker
7252de2362d3Smrg	continue
7253de2362d3Smrg	;;
7254de2362d3Smrg
7255de2362d3Smrg      # -msg_* for osf cc
7256de2362d3Smrg      -msg_*)
7257de2362d3Smrg	func_quote_for_eval "$arg"
72580d16fef4Smrg	arg=$func_quote_for_eval_result
7259de2362d3Smrg	;;
7260de2362d3Smrg
7261de2362d3Smrg      # Flags to be passed through unchanged, with rationale:
7262de2362d3Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
7263de2362d3Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
7264de2362d3Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
7265de2362d3Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
7266de2362d3Smrg      # -q*                  compiler args for the IBM compiler
7267de2362d3Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
7268de2362d3Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
7269de2362d3Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
72700d16fef4Smrg      # -fstack-protector*   stack protector flags for GCC
7271de2362d3Smrg      # @file                GCC response files
7272de2362d3Smrg      # -tp=*                Portland pgcc target processor selection
7273de2362d3Smrg      # --sysroot=*          for sysroot support
72740d16fef4Smrg      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
72750d16fef4Smrg      # -specs=*             GCC specs files
72760d16fef4Smrg      # -stdlib=*            select c++ std lib with clang
72770d16fef4Smrg      # -fsanitize=*         Clang/GCC memory and address sanitizer
7278de2362d3Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
7279de2362d3Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
72800d16fef4Smrg      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
72810d16fef4Smrg      -specs=*|-fsanitize=*)
7282de2362d3Smrg        func_quote_for_eval "$arg"
72830d16fef4Smrg	arg=$func_quote_for_eval_result
7284de2362d3Smrg        func_append compile_command " $arg"
7285de2362d3Smrg        func_append finalize_command " $arg"
7286de2362d3Smrg        func_append compiler_flags " $arg"
7287de2362d3Smrg        continue
7288de2362d3Smrg        ;;
7289de2362d3Smrg
72900d16fef4Smrg      -Z*)
72910d16fef4Smrg        if test os2 = "`expr $host : '.*\(os2\)'`"; then
72920d16fef4Smrg          # OS/2 uses -Zxxx to specify OS/2-specific options
72930d16fef4Smrg	  compiler_flags="$compiler_flags $arg"
72940d16fef4Smrg	  func_append compile_command " $arg"
72950d16fef4Smrg	  func_append finalize_command " $arg"
72960d16fef4Smrg	  case $arg in
72970d16fef4Smrg	  -Zlinker | -Zstack)
72980d16fef4Smrg	    prev=xcompiler
72990d16fef4Smrg	    ;;
73000d16fef4Smrg	  esac
73010d16fef4Smrg	  continue
73020d16fef4Smrg        else
73030d16fef4Smrg	  # Otherwise treat like 'Some other compiler flag' below
73040d16fef4Smrg	  func_quote_for_eval "$arg"
73050d16fef4Smrg	  arg=$func_quote_for_eval_result
73060d16fef4Smrg        fi
73070d16fef4Smrg	;;
73080d16fef4Smrg
7309de2362d3Smrg      # Some other compiler flag.
7310de2362d3Smrg      -* | +*)
7311de2362d3Smrg        func_quote_for_eval "$arg"
73120d16fef4Smrg	arg=$func_quote_for_eval_result
7313de2362d3Smrg	;;
7314de2362d3Smrg
7315de2362d3Smrg      *.$objext)
7316de2362d3Smrg	# A standard object.
7317de2362d3Smrg	func_append objs " $arg"
7318de2362d3Smrg	;;
7319de2362d3Smrg
7320de2362d3Smrg      *.lo)
7321de2362d3Smrg	# A libtool-controlled object.
7322de2362d3Smrg
7323de2362d3Smrg	# Check to see that this really is a libtool object.
7324de2362d3Smrg	if func_lalib_unsafe_p "$arg"; then
7325de2362d3Smrg	  pic_object=
7326de2362d3Smrg	  non_pic_object=
7327de2362d3Smrg
7328de2362d3Smrg	  # Read the .lo file
7329de2362d3Smrg	  func_source "$arg"
7330de2362d3Smrg
7331de2362d3Smrg	  if test -z "$pic_object" ||
7332de2362d3Smrg	     test -z "$non_pic_object" ||
73330d16fef4Smrg	     test none = "$pic_object" &&
73340d16fef4Smrg	     test none = "$non_pic_object"; then
73350d16fef4Smrg	    func_fatal_error "cannot find name of object for '$arg'"
7336de2362d3Smrg	  fi
7337de2362d3Smrg
7338de2362d3Smrg	  # Extract subdirectory from the argument.
7339de2362d3Smrg	  func_dirname "$arg" "/" ""
73400d16fef4Smrg	  xdir=$func_dirname_result
7341de2362d3Smrg
73420d16fef4Smrg	  test none = "$pic_object" || {
7343de2362d3Smrg	    # Prepend the subdirectory the object is found in.
73440d16fef4Smrg	    pic_object=$xdir$pic_object
7345de2362d3Smrg
73460d16fef4Smrg	    if test dlfiles = "$prev"; then
73470d16fef4Smrg	      if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
7348de2362d3Smrg		func_append dlfiles " $pic_object"
7349de2362d3Smrg		prev=
7350de2362d3Smrg		continue
7351de2362d3Smrg	      else
7352de2362d3Smrg		# If libtool objects are unsupported, then we need to preload.
7353de2362d3Smrg		prev=dlprefiles
7354de2362d3Smrg	      fi
7355de2362d3Smrg	    fi
7356de2362d3Smrg
7357de2362d3Smrg	    # CHECK ME:  I think I busted this.  -Ossama
73580d16fef4Smrg	    if test dlprefiles = "$prev"; then
7359de2362d3Smrg	      # Preload the old-style object.
7360de2362d3Smrg	      func_append dlprefiles " $pic_object"
7361de2362d3Smrg	      prev=
7362de2362d3Smrg	    fi
7363de2362d3Smrg
7364de2362d3Smrg	    # A PIC object.
7365de2362d3Smrg	    func_append libobjs " $pic_object"
73660d16fef4Smrg	    arg=$pic_object
73670d16fef4Smrg	  }
7368de2362d3Smrg
7369de2362d3Smrg	  # Non-PIC object.
73700d16fef4Smrg	  if test none != "$non_pic_object"; then
7371de2362d3Smrg	    # Prepend the subdirectory the object is found in.
73720d16fef4Smrg	    non_pic_object=$xdir$non_pic_object
7373de2362d3Smrg
7374de2362d3Smrg	    # A standard non-PIC object
7375de2362d3Smrg	    func_append non_pic_objects " $non_pic_object"
73760d16fef4Smrg	    if test -z "$pic_object" || test none = "$pic_object"; then
73770d16fef4Smrg	      arg=$non_pic_object
7378de2362d3Smrg	    fi
7379de2362d3Smrg	  else
7380de2362d3Smrg	    # If the PIC object exists, use it instead.
7381de2362d3Smrg	    # $xdir was prepended to $pic_object above.
73820d16fef4Smrg	    non_pic_object=$pic_object
7383de2362d3Smrg	    func_append non_pic_objects " $non_pic_object"
7384de2362d3Smrg	  fi
7385de2362d3Smrg	else
7386de2362d3Smrg	  # Only an error if not doing a dry-run.
7387de2362d3Smrg	  if $opt_dry_run; then
7388de2362d3Smrg	    # Extract subdirectory from the argument.
7389de2362d3Smrg	    func_dirname "$arg" "/" ""
73900d16fef4Smrg	    xdir=$func_dirname_result
7391de2362d3Smrg
7392de2362d3Smrg	    func_lo2o "$arg"
7393de2362d3Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
7394de2362d3Smrg	    non_pic_object=$xdir$func_lo2o_result
7395de2362d3Smrg	    func_append libobjs " $pic_object"
7396de2362d3Smrg	    func_append non_pic_objects " $non_pic_object"
7397de2362d3Smrg	  else
73980d16fef4Smrg	    func_fatal_error "'$arg' is not a valid libtool object"
7399de2362d3Smrg	  fi
7400de2362d3Smrg	fi
7401de2362d3Smrg	;;
7402de2362d3Smrg
7403de2362d3Smrg      *.$libext)
7404de2362d3Smrg	# An archive.
7405de2362d3Smrg	func_append deplibs " $arg"
7406de2362d3Smrg	func_append old_deplibs " $arg"
7407de2362d3Smrg	continue
7408de2362d3Smrg	;;
7409de2362d3Smrg
7410de2362d3Smrg      *.la)
7411de2362d3Smrg	# A libtool-controlled library.
7412de2362d3Smrg
7413de2362d3Smrg	func_resolve_sysroot "$arg"
74140d16fef4Smrg	if test dlfiles = "$prev"; then
7415de2362d3Smrg	  # This library was specified with -dlopen.
7416de2362d3Smrg	  func_append dlfiles " $func_resolve_sysroot_result"
7417de2362d3Smrg	  prev=
74180d16fef4Smrg	elif test dlprefiles = "$prev"; then
7419de2362d3Smrg	  # The library was specified with -dlpreopen.
7420de2362d3Smrg	  func_append dlprefiles " $func_resolve_sysroot_result"
7421de2362d3Smrg	  prev=
7422de2362d3Smrg	else
7423de2362d3Smrg	  func_append deplibs " $func_resolve_sysroot_result"
7424de2362d3Smrg	fi
7425de2362d3Smrg	continue
7426de2362d3Smrg	;;
7427de2362d3Smrg
7428de2362d3Smrg      # Some other compiler argument.
7429de2362d3Smrg      *)
7430de2362d3Smrg	# Unknown arguments in both finalize_command and compile_command need
7431de2362d3Smrg	# to be aesthetically quoted because they are evaled later.
7432de2362d3Smrg	func_quote_for_eval "$arg"
74330d16fef4Smrg	arg=$func_quote_for_eval_result
7434de2362d3Smrg	;;
7435de2362d3Smrg      esac # arg
7436de2362d3Smrg
7437de2362d3Smrg      # Now actually substitute the argument into the commands.
7438de2362d3Smrg      if test -n "$arg"; then
7439de2362d3Smrg	func_append compile_command " $arg"
7440de2362d3Smrg	func_append finalize_command " $arg"
7441de2362d3Smrg      fi
7442de2362d3Smrg    done # argument parsing loop
7443de2362d3Smrg
7444de2362d3Smrg    test -n "$prev" && \
74450d16fef4Smrg      func_fatal_help "the '$prevarg' option requires an argument"
7446de2362d3Smrg
74470d16fef4Smrg    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
7448de2362d3Smrg      eval arg=\"$export_dynamic_flag_spec\"
7449de2362d3Smrg      func_append compile_command " $arg"
7450de2362d3Smrg      func_append finalize_command " $arg"
7451de2362d3Smrg    fi
7452de2362d3Smrg
7453de2362d3Smrg    oldlibs=
7454de2362d3Smrg    # calculate the name of the file, without its directory
7455de2362d3Smrg    func_basename "$output"
74560d16fef4Smrg    outputname=$func_basename_result
74570d16fef4Smrg    libobjs_save=$libobjs
7458de2362d3Smrg
7459de2362d3Smrg    if test -n "$shlibpath_var"; then
7460de2362d3Smrg      # get the directories listed in $shlibpath_var
74610d16fef4Smrg      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
7462de2362d3Smrg    else
7463de2362d3Smrg      shlib_search_path=
7464de2362d3Smrg    fi
7465de2362d3Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
7466de2362d3Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
7467de2362d3Smrg
74680d16fef4Smrg    # Definition is injected by LT_CONFIG during libtool generation.
74690d16fef4Smrg    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
74700d16fef4Smrg
7471de2362d3Smrg    func_dirname "$output" "/" ""
74720d16fef4Smrg    output_objdir=$func_dirname_result$objdir
7473de2362d3Smrg    func_to_tool_file "$output_objdir/"
7474de2362d3Smrg    tool_output_objdir=$func_to_tool_file_result
7475de2362d3Smrg    # Create the object directory.
7476de2362d3Smrg    func_mkdir_p "$output_objdir"
7477de2362d3Smrg
7478de2362d3Smrg    # Determine the type of output
7479de2362d3Smrg    case $output in
7480de2362d3Smrg    "")
7481de2362d3Smrg      func_fatal_help "you must specify an output file"
7482de2362d3Smrg      ;;
7483de2362d3Smrg    *.$libext) linkmode=oldlib ;;
7484de2362d3Smrg    *.lo | *.$objext) linkmode=obj ;;
7485de2362d3Smrg    *.la) linkmode=lib ;;
7486de2362d3Smrg    *) linkmode=prog ;; # Anything else should be a program.
7487de2362d3Smrg    esac
7488de2362d3Smrg
7489de2362d3Smrg    specialdeplibs=
7490de2362d3Smrg
7491de2362d3Smrg    libs=
7492de2362d3Smrg    # Find all interdependent deplibs by searching for libraries
7493de2362d3Smrg    # that are linked more than once (e.g. -la -lb -la)
7494de2362d3Smrg    for deplib in $deplibs; do
74950d16fef4Smrg      if $opt_preserve_dup_deps; then
7496de2362d3Smrg	case "$libs " in
7497de2362d3Smrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
7498de2362d3Smrg	esac
7499de2362d3Smrg      fi
7500de2362d3Smrg      func_append libs " $deplib"
7501de2362d3Smrg    done
7502de2362d3Smrg
75030d16fef4Smrg    if test lib = "$linkmode"; then
7504de2362d3Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
7505de2362d3Smrg
7506de2362d3Smrg      # Compute libraries that are listed more than once in $predeps
7507de2362d3Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
7508de2362d3Smrg      # not to be eliminated).
7509de2362d3Smrg      pre_post_deps=
7510de2362d3Smrg      if $opt_duplicate_compiler_generated_deps; then
7511de2362d3Smrg	for pre_post_dep in $predeps $postdeps; do
7512de2362d3Smrg	  case "$pre_post_deps " in
7513de2362d3Smrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
7514de2362d3Smrg	  esac
7515de2362d3Smrg	  func_append pre_post_deps " $pre_post_dep"
7516de2362d3Smrg	done
7517de2362d3Smrg      fi
7518de2362d3Smrg      pre_post_deps=
7519de2362d3Smrg    fi
7520de2362d3Smrg
7521de2362d3Smrg    deplibs=
7522de2362d3Smrg    newdependency_libs=
7523de2362d3Smrg    newlib_search_path=
7524de2362d3Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
7525de2362d3Smrg    notinst_deplibs= # not-installed libtool libraries
7526de2362d3Smrg    notinst_path= # paths that contain not-installed libtool libraries
7527de2362d3Smrg
7528de2362d3Smrg    case $linkmode in
7529de2362d3Smrg    lib)
7530de2362d3Smrg	passes="conv dlpreopen link"
7531de2362d3Smrg	for file in $dlfiles $dlprefiles; do
7532de2362d3Smrg	  case $file in
7533de2362d3Smrg	  *.la) ;;
7534de2362d3Smrg	  *)
75350d16fef4Smrg	    func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
7536de2362d3Smrg	    ;;
7537de2362d3Smrg	  esac
7538de2362d3Smrg	done
7539de2362d3Smrg	;;
7540de2362d3Smrg    prog)
7541de2362d3Smrg	compile_deplibs=
7542de2362d3Smrg	finalize_deplibs=
75430d16fef4Smrg	alldeplibs=false
7544de2362d3Smrg	newdlfiles=
7545de2362d3Smrg	newdlprefiles=
7546de2362d3Smrg	passes="conv scan dlopen dlpreopen link"
7547de2362d3Smrg	;;
7548de2362d3Smrg    *)  passes="conv"
7549de2362d3Smrg	;;
7550de2362d3Smrg    esac
7551de2362d3Smrg
7552de2362d3Smrg    for pass in $passes; do
7553de2362d3Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
7554de2362d3Smrg      # so that -L comes before libs that need it for instance...
75550d16fef4Smrg      if test lib,link = "$linkmode,$pass"; then
7556de2362d3Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
7557de2362d3Smrg	##        order, and fix it there properly
7558de2362d3Smrg        tmp_deplibs=
7559de2362d3Smrg	for deplib in $deplibs; do
7560de2362d3Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
7561de2362d3Smrg	done
75620d16fef4Smrg	deplibs=$tmp_deplibs
7563de2362d3Smrg      fi
7564de2362d3Smrg
75650d16fef4Smrg      if test lib,link = "$linkmode,$pass" ||
75660d16fef4Smrg	 test prog,scan = "$linkmode,$pass"; then
75670d16fef4Smrg	libs=$deplibs
7568de2362d3Smrg	deplibs=
7569de2362d3Smrg      fi
75700d16fef4Smrg      if test prog = "$linkmode"; then
7571de2362d3Smrg	case $pass in
75720d16fef4Smrg	dlopen) libs=$dlfiles ;;
75730d16fef4Smrg	dlpreopen) libs=$dlprefiles ;;
75740d16fef4Smrg	link)
75750d16fef4Smrg	  libs="$deplibs %DEPLIBS%"
75760d16fef4Smrg	  test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
75770d16fef4Smrg	  ;;
7578de2362d3Smrg	esac
7579de2362d3Smrg      fi
75800d16fef4Smrg      if test lib,dlpreopen = "$linkmode,$pass"; then
7581de2362d3Smrg	# Collect and forward deplibs of preopened libtool libs
7582de2362d3Smrg	for lib in $dlprefiles; do
7583de2362d3Smrg	  # Ignore non-libtool-libs
7584de2362d3Smrg	  dependency_libs=
7585de2362d3Smrg	  func_resolve_sysroot "$lib"
7586de2362d3Smrg	  case $lib in
7587de2362d3Smrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
7588de2362d3Smrg	  esac
7589de2362d3Smrg
7590de2362d3Smrg	  # Collect preopened libtool deplibs, except any this library
7591de2362d3Smrg	  # has declared as weak libs
7592de2362d3Smrg	  for deplib in $dependency_libs; do
7593de2362d3Smrg	    func_basename "$deplib"
7594de2362d3Smrg            deplib_base=$func_basename_result
7595de2362d3Smrg	    case " $weak_libs " in
7596de2362d3Smrg	    *" $deplib_base "*) ;;
7597de2362d3Smrg	    *) func_append deplibs " $deplib" ;;
7598de2362d3Smrg	    esac
7599de2362d3Smrg	  done
7600de2362d3Smrg	done
76010d16fef4Smrg	libs=$dlprefiles
7602de2362d3Smrg      fi
76030d16fef4Smrg      if test dlopen = "$pass"; then
7604de2362d3Smrg	# Collect dlpreopened libraries
76050d16fef4Smrg	save_deplibs=$deplibs
7606de2362d3Smrg	deplibs=
7607de2362d3Smrg      fi
7608de2362d3Smrg
7609de2362d3Smrg      for deplib in $libs; do
7610de2362d3Smrg	lib=
76110d16fef4Smrg	found=false
7612de2362d3Smrg	case $deplib in
7613de2362d3Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7614de2362d3Smrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
76150d16fef4Smrg	  if test prog,link = "$linkmode,$pass"; then
7616de2362d3Smrg	    compile_deplibs="$deplib $compile_deplibs"
7617de2362d3Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
7618de2362d3Smrg	  else
7619de2362d3Smrg	    func_append compiler_flags " $deplib"
76200d16fef4Smrg	    if test lib = "$linkmode"; then
7621de2362d3Smrg		case "$new_inherited_linker_flags " in
7622de2362d3Smrg		    *" $deplib "*) ;;
7623de2362d3Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
7624de2362d3Smrg		esac
7625de2362d3Smrg	    fi
7626de2362d3Smrg	  fi
7627de2362d3Smrg	  continue
7628de2362d3Smrg	  ;;
7629de2362d3Smrg	-l*)
76300d16fef4Smrg	  if test lib != "$linkmode" && test prog != "$linkmode"; then
76310d16fef4Smrg	    func_warning "'-l' is ignored for archives/objects"
7632de2362d3Smrg	    continue
7633de2362d3Smrg	  fi
7634de2362d3Smrg	  func_stripname '-l' '' "$deplib"
7635de2362d3Smrg	  name=$func_stripname_result
76360d16fef4Smrg	  if test lib = "$linkmode"; then
7637de2362d3Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
7638de2362d3Smrg	  else
7639de2362d3Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
7640de2362d3Smrg	  fi
7641de2362d3Smrg	  for searchdir in $searchdirs; do
7642de2362d3Smrg	    for search_ext in .la $std_shrext .so .a; do
7643de2362d3Smrg	      # Search the libtool library
76440d16fef4Smrg	      lib=$searchdir/lib$name$search_ext
7645de2362d3Smrg	      if test -f "$lib"; then
76460d16fef4Smrg		if test .la = "$search_ext"; then
76470d16fef4Smrg		  found=:
7648de2362d3Smrg		else
76490d16fef4Smrg		  found=false
7650de2362d3Smrg		fi
7651de2362d3Smrg		break 2
7652de2362d3Smrg	      fi
7653de2362d3Smrg	    done
7654de2362d3Smrg	  done
76550d16fef4Smrg	  if $found; then
76560d16fef4Smrg	    # deplib is a libtool library
7657de2362d3Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
7658de2362d3Smrg	    # We need to do some special things here, and not later.
76590d16fef4Smrg	    if test yes = "$allow_libtool_libs_with_static_runtimes"; then
7660de2362d3Smrg	      case " $predeps $postdeps " in
7661de2362d3Smrg	      *" $deplib "*)
7662de2362d3Smrg		if func_lalib_p "$lib"; then
7663de2362d3Smrg		  library_names=
7664de2362d3Smrg		  old_library=
7665de2362d3Smrg		  func_source "$lib"
7666de2362d3Smrg		  for l in $old_library $library_names; do
76670d16fef4Smrg		    ll=$l
7668de2362d3Smrg		  done
76690d16fef4Smrg		  if test "X$ll" = "X$old_library"; then # only static version available
76700d16fef4Smrg		    found=false
7671de2362d3Smrg		    func_dirname "$lib" "" "."
76720d16fef4Smrg		    ladir=$func_dirname_result
7673de2362d3Smrg		    lib=$ladir/$old_library
76740d16fef4Smrg		    if test prog,link = "$linkmode,$pass"; then
7675de2362d3Smrg		      compile_deplibs="$deplib $compile_deplibs"
7676de2362d3Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
7677de2362d3Smrg		    else
7678de2362d3Smrg		      deplibs="$deplib $deplibs"
76790d16fef4Smrg		      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
7680de2362d3Smrg		    fi
7681de2362d3Smrg		    continue
7682de2362d3Smrg		  fi
7683de2362d3Smrg		fi
7684de2362d3Smrg		;;
7685de2362d3Smrg	      *) ;;
7686de2362d3Smrg	      esac
7687de2362d3Smrg	    fi
76880d16fef4Smrg	  else
76890d16fef4Smrg	    # deplib doesn't seem to be a libtool library
76900d16fef4Smrg	    if test prog,link = "$linkmode,$pass"; then
76910d16fef4Smrg	      compile_deplibs="$deplib $compile_deplibs"
76920d16fef4Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
76930d16fef4Smrg	    else
76940d16fef4Smrg	      deplibs="$deplib $deplibs"
76950d16fef4Smrg	      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
76960d16fef4Smrg	    fi
76970d16fef4Smrg	    continue
7698de2362d3Smrg	  fi
7699de2362d3Smrg	  ;; # -l
7700de2362d3Smrg	*.ltframework)
77010d16fef4Smrg	  if test prog,link = "$linkmode,$pass"; then
7702de2362d3Smrg	    compile_deplibs="$deplib $compile_deplibs"
7703de2362d3Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
7704de2362d3Smrg	  else
7705de2362d3Smrg	    deplibs="$deplib $deplibs"
77060d16fef4Smrg	    if test lib = "$linkmode"; then
7707de2362d3Smrg		case "$new_inherited_linker_flags " in
7708de2362d3Smrg		    *" $deplib "*) ;;
7709de2362d3Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
7710de2362d3Smrg		esac
7711de2362d3Smrg	    fi
7712de2362d3Smrg	  fi
7713de2362d3Smrg	  continue
7714de2362d3Smrg	  ;;
7715de2362d3Smrg	-L*)
7716de2362d3Smrg	  case $linkmode in
7717de2362d3Smrg	  lib)
7718de2362d3Smrg	    deplibs="$deplib $deplibs"
77190d16fef4Smrg	    test conv = "$pass" && continue
7720de2362d3Smrg	    newdependency_libs="$deplib $newdependency_libs"
7721de2362d3Smrg	    func_stripname '-L' '' "$deplib"
7722de2362d3Smrg	    func_resolve_sysroot "$func_stripname_result"
7723de2362d3Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
7724de2362d3Smrg	    ;;
7725de2362d3Smrg	  prog)
77260d16fef4Smrg	    if test conv = "$pass"; then
7727de2362d3Smrg	      deplibs="$deplib $deplibs"
7728de2362d3Smrg	      continue
7729de2362d3Smrg	    fi
77300d16fef4Smrg	    if test scan = "$pass"; then
7731de2362d3Smrg	      deplibs="$deplib $deplibs"
7732de2362d3Smrg	    else
7733de2362d3Smrg	      compile_deplibs="$deplib $compile_deplibs"
7734de2362d3Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
7735de2362d3Smrg	    fi
7736de2362d3Smrg	    func_stripname '-L' '' "$deplib"
7737de2362d3Smrg	    func_resolve_sysroot "$func_stripname_result"
7738de2362d3Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
7739de2362d3Smrg	    ;;
7740de2362d3Smrg	  *)
77410d16fef4Smrg	    func_warning "'-L' is ignored for archives/objects"
7742de2362d3Smrg	    ;;
7743de2362d3Smrg	  esac # linkmode
7744de2362d3Smrg	  continue
7745de2362d3Smrg	  ;; # -L
7746de2362d3Smrg	-R*)
77470d16fef4Smrg	  if test link = "$pass"; then
7748de2362d3Smrg	    func_stripname '-R' '' "$deplib"
7749de2362d3Smrg	    func_resolve_sysroot "$func_stripname_result"
7750de2362d3Smrg	    dir=$func_resolve_sysroot_result
7751de2362d3Smrg	    # Make sure the xrpath contains only unique directories.
7752de2362d3Smrg	    case "$xrpath " in
7753de2362d3Smrg	    *" $dir "*) ;;
7754de2362d3Smrg	    *) func_append xrpath " $dir" ;;
7755de2362d3Smrg	    esac
7756de2362d3Smrg	  fi
7757de2362d3Smrg	  deplibs="$deplib $deplibs"
7758de2362d3Smrg	  continue
7759de2362d3Smrg	  ;;
7760de2362d3Smrg	*.la)
7761de2362d3Smrg	  func_resolve_sysroot "$deplib"
7762de2362d3Smrg	  lib=$func_resolve_sysroot_result
7763de2362d3Smrg	  ;;
7764de2362d3Smrg	*.$libext)
77650d16fef4Smrg	  if test conv = "$pass"; then
7766de2362d3Smrg	    deplibs="$deplib $deplibs"
7767de2362d3Smrg	    continue
7768de2362d3Smrg	  fi
7769de2362d3Smrg	  case $linkmode in
7770de2362d3Smrg	  lib)
7771de2362d3Smrg	    # Linking convenience modules into shared libraries is allowed,
7772de2362d3Smrg	    # but linking other static libraries is non-portable.
7773de2362d3Smrg	    case " $dlpreconveniencelibs " in
7774de2362d3Smrg	    *" $deplib "*) ;;
7775de2362d3Smrg	    *)
77760d16fef4Smrg	      valid_a_lib=false
7777de2362d3Smrg	      case $deplibs_check_method in
7778de2362d3Smrg		match_pattern*)
7779de2362d3Smrg		  set dummy $deplibs_check_method; shift
7780de2362d3Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7781de2362d3Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
7782de2362d3Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
77830d16fef4Smrg		    valid_a_lib=:
7784de2362d3Smrg		  fi
7785de2362d3Smrg		;;
7786de2362d3Smrg		pass_all)
77870d16fef4Smrg		  valid_a_lib=:
7788de2362d3Smrg		;;
7789de2362d3Smrg	      esac
77900d16fef4Smrg	      if $valid_a_lib; then
77910d16fef4Smrg		echo
77920d16fef4Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
77930d16fef4Smrg		$ECHO "*** static library $deplib is not portable!"
77940d16fef4Smrg		deplibs="$deplib $deplibs"
77950d16fef4Smrg	      else
7796de2362d3Smrg		echo
7797de2362d3Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
7798de2362d3Smrg		echo "*** I have the capability to make that library automatically link in when"
7799de2362d3Smrg		echo "*** you link to this library.  But I can only do this if you have a"
7800de2362d3Smrg		echo "*** shared version of the library, which you do not appear to have"
7801de2362d3Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
7802de2362d3Smrg		echo "*** that it is just a static archive that I should not use here."
7803de2362d3Smrg	      fi
7804de2362d3Smrg	      ;;
7805de2362d3Smrg	    esac
7806de2362d3Smrg	    continue
7807de2362d3Smrg	    ;;
7808de2362d3Smrg	  prog)
78090d16fef4Smrg	    if test link != "$pass"; then
7810de2362d3Smrg	      deplibs="$deplib $deplibs"
7811de2362d3Smrg	    else
7812de2362d3Smrg	      compile_deplibs="$deplib $compile_deplibs"
7813de2362d3Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
7814de2362d3Smrg	    fi
7815de2362d3Smrg	    continue
7816de2362d3Smrg	    ;;
7817de2362d3Smrg	  esac # linkmode
7818de2362d3Smrg	  ;; # *.$libext
7819de2362d3Smrg	*.lo | *.$objext)
78200d16fef4Smrg	  if test conv = "$pass"; then
7821de2362d3Smrg	    deplibs="$deplib $deplibs"
78220d16fef4Smrg	  elif test prog = "$linkmode"; then
78230d16fef4Smrg	    if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
7824de2362d3Smrg	      # If there is no dlopen support or we're linking statically,
7825de2362d3Smrg	      # we need to preload.
7826de2362d3Smrg	      func_append newdlprefiles " $deplib"
7827de2362d3Smrg	      compile_deplibs="$deplib $compile_deplibs"
7828de2362d3Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
7829de2362d3Smrg	    else
7830de2362d3Smrg	      func_append newdlfiles " $deplib"
7831de2362d3Smrg	    fi
7832de2362d3Smrg	  fi
7833de2362d3Smrg	  continue
7834de2362d3Smrg	  ;;
7835de2362d3Smrg	%DEPLIBS%)
78360d16fef4Smrg	  alldeplibs=:
7837de2362d3Smrg	  continue
7838de2362d3Smrg	  ;;
7839de2362d3Smrg	esac # case $deplib
7840de2362d3Smrg
78410d16fef4Smrg	$found || test -f "$lib" \
78420d16fef4Smrg	  || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
7843de2362d3Smrg
7844de2362d3Smrg	# Check to see that this really is a libtool archive.
7845de2362d3Smrg	func_lalib_unsafe_p "$lib" \
78460d16fef4Smrg	  || func_fatal_error "'$lib' is not a valid libtool archive"
7847de2362d3Smrg
7848de2362d3Smrg	func_dirname "$lib" "" "."
78490d16fef4Smrg	ladir=$func_dirname_result
7850de2362d3Smrg
7851de2362d3Smrg	dlname=
7852de2362d3Smrg	dlopen=
7853de2362d3Smrg	dlpreopen=
7854de2362d3Smrg	libdir=
7855de2362d3Smrg	library_names=
7856de2362d3Smrg	old_library=
7857de2362d3Smrg	inherited_linker_flags=
7858de2362d3Smrg	# If the library was installed with an old release of libtool,
7859de2362d3Smrg	# it will not redefine variables installed, or shouldnotlink
7860de2362d3Smrg	installed=yes
7861de2362d3Smrg	shouldnotlink=no
7862de2362d3Smrg	avoidtemprpath=
7863de2362d3Smrg
7864de2362d3Smrg
7865de2362d3Smrg	# Read the .la file
7866de2362d3Smrg	func_source "$lib"
7867de2362d3Smrg
7868de2362d3Smrg	# Convert "-framework foo" to "foo.ltframework"
7869de2362d3Smrg	if test -n "$inherited_linker_flags"; then
7870de2362d3Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
7871de2362d3Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
7872de2362d3Smrg	    case " $new_inherited_linker_flags " in
7873de2362d3Smrg	      *" $tmp_inherited_linker_flag "*) ;;
7874de2362d3Smrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
7875de2362d3Smrg	    esac
7876de2362d3Smrg	  done
7877de2362d3Smrg	fi
7878de2362d3Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
78790d16fef4Smrg	if test lib,link = "$linkmode,$pass" ||
78800d16fef4Smrg	   test prog,scan = "$linkmode,$pass" ||
78810d16fef4Smrg	   { test prog != "$linkmode" && test lib != "$linkmode"; }; then
7882de2362d3Smrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
7883de2362d3Smrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
7884de2362d3Smrg	fi
7885de2362d3Smrg
78860d16fef4Smrg	if test conv = "$pass"; then
7887de2362d3Smrg	  # Only check for convenience libraries
7888de2362d3Smrg	  deplibs="$lib $deplibs"
7889de2362d3Smrg	  if test -z "$libdir"; then
7890de2362d3Smrg	    if test -z "$old_library"; then
78910d16fef4Smrg	      func_fatal_error "cannot find name of link library for '$lib'"
7892de2362d3Smrg	    fi
7893de2362d3Smrg	    # It is a libtool convenience library, so add in its objects.
7894de2362d3Smrg	    func_append convenience " $ladir/$objdir/$old_library"
7895de2362d3Smrg	    func_append old_convenience " $ladir/$objdir/$old_library"
78960d16fef4Smrg	    tmp_libs=
78970d16fef4Smrg	    for deplib in $dependency_libs; do
78980d16fef4Smrg	      deplibs="$deplib $deplibs"
78990d16fef4Smrg	      if $opt_preserve_dup_deps; then
79000d16fef4Smrg		case "$tmp_libs " in
79010d16fef4Smrg		*" $deplib "*) func_append specialdeplibs " $deplib" ;;
79020d16fef4Smrg		esac
79030d16fef4Smrg	      fi
79040d16fef4Smrg	      func_append tmp_libs " $deplib"
79050d16fef4Smrg	    done
79060d16fef4Smrg	  elif test prog != "$linkmode" && test lib != "$linkmode"; then
79070d16fef4Smrg	    func_fatal_error "'$lib' is not a convenience library"
7908de2362d3Smrg	  fi
7909de2362d3Smrg	  continue
7910de2362d3Smrg	fi # $pass = conv
7911de2362d3Smrg
7912de2362d3Smrg
7913de2362d3Smrg	# Get the name of the library we link against.
7914de2362d3Smrg	linklib=
7915de2362d3Smrg	if test -n "$old_library" &&
79160d16fef4Smrg	   { test yes = "$prefer_static_libs" ||
79170d16fef4Smrg	     test built,no = "$prefer_static_libs,$installed"; }; then
7918de2362d3Smrg	  linklib=$old_library
7919de2362d3Smrg	else
7920de2362d3Smrg	  for l in $old_library $library_names; do
79210d16fef4Smrg	    linklib=$l
7922de2362d3Smrg	  done
7923de2362d3Smrg	fi
7924de2362d3Smrg	if test -z "$linklib"; then
79250d16fef4Smrg	  func_fatal_error "cannot find name of link library for '$lib'"
7926de2362d3Smrg	fi
7927de2362d3Smrg
7928de2362d3Smrg	# This library was specified with -dlopen.
79290d16fef4Smrg	if test dlopen = "$pass"; then
79300d16fef4Smrg	  test -z "$libdir" \
79310d16fef4Smrg	    && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
7932de2362d3Smrg	  if test -z "$dlname" ||
79330d16fef4Smrg	     test yes != "$dlopen_support" ||
79340d16fef4Smrg	     test no = "$build_libtool_libs"
79350d16fef4Smrg	  then
7936de2362d3Smrg	    # If there is no dlname, no dlopen support or we're linking
7937de2362d3Smrg	    # statically, we need to preload.  We also need to preload any
7938de2362d3Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
7939de2362d3Smrg	    # bomb out in the load deplibs phase.
7940de2362d3Smrg	    func_append dlprefiles " $lib $dependency_libs"
7941de2362d3Smrg	  else
7942de2362d3Smrg	    func_append newdlfiles " $lib"
7943de2362d3Smrg	  fi
7944de2362d3Smrg	  continue
7945de2362d3Smrg	fi # $pass = dlopen
7946de2362d3Smrg
7947de2362d3Smrg	# We need an absolute path.
7948de2362d3Smrg	case $ladir in
79490d16fef4Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
7950de2362d3Smrg	*)
7951de2362d3Smrg	  abs_ladir=`cd "$ladir" && pwd`
7952de2362d3Smrg	  if test -z "$abs_ladir"; then
79530d16fef4Smrg	    func_warning "cannot determine absolute directory name of '$ladir'"
7954de2362d3Smrg	    func_warning "passing it literally to the linker, although it might fail"
79550d16fef4Smrg	    abs_ladir=$ladir
7956de2362d3Smrg	  fi
7957de2362d3Smrg	  ;;
7958de2362d3Smrg	esac
7959de2362d3Smrg	func_basename "$lib"
79600d16fef4Smrg	laname=$func_basename_result
7961de2362d3Smrg
7962de2362d3Smrg	# Find the relevant object directory and library name.
79630d16fef4Smrg	if test yes = "$installed"; then
7964de2362d3Smrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
79650d16fef4Smrg	    func_warning "library '$lib' was moved."
79660d16fef4Smrg	    dir=$ladir
79670d16fef4Smrg	    absdir=$abs_ladir
79680d16fef4Smrg	    libdir=$abs_ladir
7969de2362d3Smrg	  else
79700d16fef4Smrg	    dir=$lt_sysroot$libdir
79710d16fef4Smrg	    absdir=$lt_sysroot$libdir
7972de2362d3Smrg	  fi
79730d16fef4Smrg	  test yes = "$hardcode_automatic" && avoidtemprpath=yes
7974de2362d3Smrg	else
7975de2362d3Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
79760d16fef4Smrg	    dir=$ladir
79770d16fef4Smrg	    absdir=$abs_ladir
7978de2362d3Smrg	    # Remove this search path later
7979de2362d3Smrg	    func_append notinst_path " $abs_ladir"
7980de2362d3Smrg	  else
79810d16fef4Smrg	    dir=$ladir/$objdir
79820d16fef4Smrg	    absdir=$abs_ladir/$objdir
7983de2362d3Smrg	    # Remove this search path later
7984de2362d3Smrg	    func_append notinst_path " $abs_ladir"
7985de2362d3Smrg	  fi
7986de2362d3Smrg	fi # $installed = yes
7987de2362d3Smrg	func_stripname 'lib' '.la' "$laname"
7988de2362d3Smrg	name=$func_stripname_result
7989de2362d3Smrg
7990de2362d3Smrg	# This library was specified with -dlpreopen.
79910d16fef4Smrg	if test dlpreopen = "$pass"; then
79920d16fef4Smrg	  if test -z "$libdir" && test prog = "$linkmode"; then
79930d16fef4Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
7994de2362d3Smrg	  fi
79950d16fef4Smrg	  case $host in
7996de2362d3Smrg	    # special handling for platforms with PE-DLLs.
7997de2362d3Smrg	    *cygwin* | *mingw* | *cegcc* )
7998de2362d3Smrg	      # Linker will automatically link against shared library if both
7999de2362d3Smrg	      # static and shared are present.  Therefore, ensure we extract
8000de2362d3Smrg	      # symbols from the import library if a shared library is present
8001de2362d3Smrg	      # (otherwise, the dlopen module name will be incorrect).  We do
8002de2362d3Smrg	      # this by putting the import library name into $newdlprefiles.
8003de2362d3Smrg	      # We recover the dlopen module name by 'saving' the la file
8004de2362d3Smrg	      # name in a special purpose variable, and (later) extracting the
8005de2362d3Smrg	      # dlname from the la file.
8006de2362d3Smrg	      if test -n "$dlname"; then
8007de2362d3Smrg	        func_tr_sh "$dir/$linklib"
8008de2362d3Smrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
8009de2362d3Smrg	        func_append newdlprefiles " $dir/$linklib"
8010de2362d3Smrg	      else
8011de2362d3Smrg	        func_append newdlprefiles " $dir/$old_library"
8012de2362d3Smrg	        # Keep a list of preopened convenience libraries to check
8013de2362d3Smrg	        # that they are being used correctly in the link pass.
8014de2362d3Smrg	        test -z "$libdir" && \
8015de2362d3Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
8016de2362d3Smrg	      fi
8017de2362d3Smrg	    ;;
8018de2362d3Smrg	    * )
8019de2362d3Smrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
8020de2362d3Smrg	      # are required to link).
8021de2362d3Smrg	      if test -n "$old_library"; then
8022de2362d3Smrg	        func_append newdlprefiles " $dir/$old_library"
8023de2362d3Smrg	        # Keep a list of preopened convenience libraries to check
8024de2362d3Smrg	        # that they are being used correctly in the link pass.
8025de2362d3Smrg	        test -z "$libdir" && \
8026de2362d3Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
8027de2362d3Smrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
8028de2362d3Smrg	      elif test -n "$dlname"; then
8029de2362d3Smrg	        func_append newdlprefiles " $dir/$dlname"
8030de2362d3Smrg	      else
8031de2362d3Smrg	        func_append newdlprefiles " $dir/$linklib"
8032de2362d3Smrg	      fi
8033de2362d3Smrg	    ;;
8034de2362d3Smrg	  esac
8035de2362d3Smrg	fi # $pass = dlpreopen
8036de2362d3Smrg
8037de2362d3Smrg	if test -z "$libdir"; then
8038de2362d3Smrg	  # Link the convenience library
80390d16fef4Smrg	  if test lib = "$linkmode"; then
8040de2362d3Smrg	    deplibs="$dir/$old_library $deplibs"
80410d16fef4Smrg	  elif test prog,link = "$linkmode,$pass"; then
8042de2362d3Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
8043de2362d3Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
8044de2362d3Smrg	  else
8045de2362d3Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
8046de2362d3Smrg	  fi
8047de2362d3Smrg	  continue
8048de2362d3Smrg	fi
8049de2362d3Smrg
8050de2362d3Smrg
80510d16fef4Smrg	if test prog = "$linkmode" && test link != "$pass"; then
8052de2362d3Smrg	  func_append newlib_search_path " $ladir"
8053de2362d3Smrg	  deplibs="$lib $deplibs"
8054de2362d3Smrg
80550d16fef4Smrg	  linkalldeplibs=false
80560d16fef4Smrg	  if test no != "$link_all_deplibs" || test -z "$library_names" ||
80570d16fef4Smrg	     test no = "$build_libtool_libs"; then
80580d16fef4Smrg	    linkalldeplibs=:
8059de2362d3Smrg	  fi
8060de2362d3Smrg
8061de2362d3Smrg	  tmp_libs=
8062de2362d3Smrg	  for deplib in $dependency_libs; do
8063de2362d3Smrg	    case $deplib in
8064de2362d3Smrg	    -L*) func_stripname '-L' '' "$deplib"
8065de2362d3Smrg	         func_resolve_sysroot "$func_stripname_result"
8066de2362d3Smrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
8067de2362d3Smrg		 ;;
8068de2362d3Smrg	    esac
8069de2362d3Smrg	    # Need to link against all dependency_libs?
80700d16fef4Smrg	    if $linkalldeplibs; then
8071de2362d3Smrg	      deplibs="$deplib $deplibs"
8072de2362d3Smrg	    else
8073de2362d3Smrg	      # Need to hardcode shared library paths
8074de2362d3Smrg	      # or/and link against static libraries
8075de2362d3Smrg	      newdependency_libs="$deplib $newdependency_libs"
8076de2362d3Smrg	    fi
80770d16fef4Smrg	    if $opt_preserve_dup_deps; then
8078de2362d3Smrg	      case "$tmp_libs " in
8079de2362d3Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8080de2362d3Smrg	      esac
8081de2362d3Smrg	    fi
8082de2362d3Smrg	    func_append tmp_libs " $deplib"
8083de2362d3Smrg	  done # for deplib
8084de2362d3Smrg	  continue
8085de2362d3Smrg	fi # $linkmode = prog...
8086de2362d3Smrg
80870d16fef4Smrg	if test prog,link = "$linkmode,$pass"; then
8088de2362d3Smrg	  if test -n "$library_names" &&
80890d16fef4Smrg	     { { test no = "$prefer_static_libs" ||
80900d16fef4Smrg	         test built,yes = "$prefer_static_libs,$installed"; } ||
8091de2362d3Smrg	       test -z "$old_library"; }; then
8092de2362d3Smrg	    # We need to hardcode the library path
80930d16fef4Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
8094de2362d3Smrg	      # Make sure the rpath contains only unique directories.
80950d16fef4Smrg	      case $temp_rpath: in
8096de2362d3Smrg	      *"$absdir:"*) ;;
8097de2362d3Smrg	      *) func_append temp_rpath "$absdir:" ;;
8098de2362d3Smrg	      esac
8099de2362d3Smrg	    fi
8100de2362d3Smrg
8101de2362d3Smrg	    # Hardcode the library path.
8102de2362d3Smrg	    # Skip directories that are in the system default run-time
8103de2362d3Smrg	    # search path.
8104de2362d3Smrg	    case " $sys_lib_dlsearch_path " in
8105de2362d3Smrg	    *" $absdir "*) ;;
8106de2362d3Smrg	    *)
8107de2362d3Smrg	      case "$compile_rpath " in
8108de2362d3Smrg	      *" $absdir "*) ;;
8109de2362d3Smrg	      *) func_append compile_rpath " $absdir" ;;
8110de2362d3Smrg	      esac
8111de2362d3Smrg	      ;;
8112de2362d3Smrg	    esac
8113de2362d3Smrg	    case " $sys_lib_dlsearch_path " in
8114de2362d3Smrg	    *" $libdir "*) ;;
8115de2362d3Smrg	    *)
8116de2362d3Smrg	      case "$finalize_rpath " in
8117de2362d3Smrg	      *" $libdir "*) ;;
8118de2362d3Smrg	      *) func_append finalize_rpath " $libdir" ;;
8119de2362d3Smrg	      esac
8120de2362d3Smrg	      ;;
8121de2362d3Smrg	    esac
8122de2362d3Smrg	  fi # $linkmode,$pass = prog,link...
8123de2362d3Smrg
81240d16fef4Smrg	  if $alldeplibs &&
81250d16fef4Smrg	     { test pass_all = "$deplibs_check_method" ||
81260d16fef4Smrg	       { test yes = "$build_libtool_libs" &&
8127de2362d3Smrg		 test -n "$library_names"; }; }; then
8128de2362d3Smrg	    # We only need to search for static libraries
8129de2362d3Smrg	    continue
8130de2362d3Smrg	  fi
8131de2362d3Smrg	fi
8132de2362d3Smrg
8133de2362d3Smrg	link_static=no # Whether the deplib will be linked statically
8134de2362d3Smrg	use_static_libs=$prefer_static_libs
81350d16fef4Smrg	if test built = "$use_static_libs" && test yes = "$installed"; then
8136de2362d3Smrg	  use_static_libs=no
8137de2362d3Smrg	fi
8138de2362d3Smrg	if test -n "$library_names" &&
81390d16fef4Smrg	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
8140de2362d3Smrg	  case $host in
81410d16fef4Smrg	  *cygwin* | *mingw* | *cegcc* | *os2*)
8142de2362d3Smrg	      # No point in relinking DLLs because paths are not encoded
8143de2362d3Smrg	      func_append notinst_deplibs " $lib"
8144de2362d3Smrg	      need_relink=no
8145de2362d3Smrg	    ;;
8146de2362d3Smrg	  *)
81470d16fef4Smrg	    if test no = "$installed"; then
8148de2362d3Smrg	      func_append notinst_deplibs " $lib"
8149de2362d3Smrg	      need_relink=yes
8150de2362d3Smrg	    fi
8151de2362d3Smrg	    ;;
8152de2362d3Smrg	  esac
8153de2362d3Smrg	  # This is a shared library
8154de2362d3Smrg
8155de2362d3Smrg	  # Warn about portability, can't link against -module's on some
8156de2362d3Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
81570d16fef4Smrg	  dlopenmodule=
8158de2362d3Smrg	  for dlpremoduletest in $dlprefiles; do
8159de2362d3Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
81600d16fef4Smrg	      dlopenmodule=$dlpremoduletest
8161de2362d3Smrg	      break
8162de2362d3Smrg	    fi
8163de2362d3Smrg	  done
81640d16fef4Smrg	  if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
8165de2362d3Smrg	    echo
81660d16fef4Smrg	    if test prog = "$linkmode"; then
8167de2362d3Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
8168de2362d3Smrg	    else
8169de2362d3Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
8170de2362d3Smrg	    fi
8171de2362d3Smrg	    $ECHO "*** $linklib is not portable!"
8172de2362d3Smrg	  fi
81730d16fef4Smrg	  if test lib = "$linkmode" &&
81740d16fef4Smrg	     test yes = "$hardcode_into_libs"; then
8175de2362d3Smrg	    # Hardcode the library path.
8176de2362d3Smrg	    # Skip directories that are in the system default run-time
8177de2362d3Smrg	    # search path.
8178de2362d3Smrg	    case " $sys_lib_dlsearch_path " in
8179de2362d3Smrg	    *" $absdir "*) ;;
8180de2362d3Smrg	    *)
8181de2362d3Smrg	      case "$compile_rpath " in
8182de2362d3Smrg	      *" $absdir "*) ;;
8183de2362d3Smrg	      *) func_append compile_rpath " $absdir" ;;
8184de2362d3Smrg	      esac
8185de2362d3Smrg	      ;;
8186de2362d3Smrg	    esac
8187de2362d3Smrg	    case " $sys_lib_dlsearch_path " in
8188de2362d3Smrg	    *" $libdir "*) ;;
8189de2362d3Smrg	    *)
8190de2362d3Smrg	      case "$finalize_rpath " in
8191de2362d3Smrg	      *" $libdir "*) ;;
8192de2362d3Smrg	      *) func_append finalize_rpath " $libdir" ;;
8193de2362d3Smrg	      esac
8194de2362d3Smrg	      ;;
8195de2362d3Smrg	    esac
8196de2362d3Smrg	  fi
8197de2362d3Smrg
8198de2362d3Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
8199de2362d3Smrg	    # figure out the soname
8200de2362d3Smrg	    set dummy $library_names
8201de2362d3Smrg	    shift
82020d16fef4Smrg	    realname=$1
8203de2362d3Smrg	    shift
8204de2362d3Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
8205de2362d3Smrg	    # use dlname if we got it. it's perfectly good, no?
8206de2362d3Smrg	    if test -n "$dlname"; then
82070d16fef4Smrg	      soname=$dlname
8208de2362d3Smrg	    elif test -n "$soname_spec"; then
8209de2362d3Smrg	      # bleh windows
8210de2362d3Smrg	      case $host in
82110d16fef4Smrg	      *cygwin* | mingw* | *cegcc* | *os2*)
8212de2362d3Smrg	        func_arith $current - $age
8213de2362d3Smrg		major=$func_arith_result
82140d16fef4Smrg		versuffix=-$major
8215de2362d3Smrg		;;
8216de2362d3Smrg	      esac
8217de2362d3Smrg	      eval soname=\"$soname_spec\"
8218de2362d3Smrg	    else
82190d16fef4Smrg	      soname=$realname
8220de2362d3Smrg	    fi
8221de2362d3Smrg
8222de2362d3Smrg	    # Make a new name for the extract_expsyms_cmds to use
82230d16fef4Smrg	    soroot=$soname
8224de2362d3Smrg	    func_basename "$soroot"
82250d16fef4Smrg	    soname=$func_basename_result
8226de2362d3Smrg	    func_stripname 'lib' '.dll' "$soname"
8227de2362d3Smrg	    newlib=libimp-$func_stripname_result.a
8228de2362d3Smrg
8229de2362d3Smrg	    # If the library has no export list, then create one now
8230de2362d3Smrg	    if test -f "$output_objdir/$soname-def"; then :
8231de2362d3Smrg	    else
82320d16fef4Smrg	      func_verbose "extracting exported symbol list from '$soname'"
8233de2362d3Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
8234de2362d3Smrg	    fi
8235de2362d3Smrg
8236de2362d3Smrg	    # Create $newlib
8237de2362d3Smrg	    if test -f "$output_objdir/$newlib"; then :; else
82380d16fef4Smrg	      func_verbose "generating import library for '$soname'"
8239de2362d3Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
8240de2362d3Smrg	    fi
8241de2362d3Smrg	    # make sure the library variables are pointing to the new library
8242de2362d3Smrg	    dir=$output_objdir
8243de2362d3Smrg	    linklib=$newlib
8244de2362d3Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
8245de2362d3Smrg
82460d16fef4Smrg	  if test prog = "$linkmode" || test relink != "$opt_mode"; then
8247de2362d3Smrg	    add_shlibpath=
8248de2362d3Smrg	    add_dir=
8249de2362d3Smrg	    add=
8250de2362d3Smrg	    lib_linked=yes
8251de2362d3Smrg	    case $hardcode_action in
8252de2362d3Smrg	    immediate | unsupported)
82530d16fef4Smrg	      if test no = "$hardcode_direct"; then
82540d16fef4Smrg		add=$dir/$linklib
8255de2362d3Smrg		case $host in
82560d16fef4Smrg		  *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
82570d16fef4Smrg		  *-*-sysv4*uw2*) add_dir=-L$dir ;;
8258de2362d3Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
82590d16fef4Smrg		    *-*-unixware7*) add_dir=-L$dir ;;
8260de2362d3Smrg		  *-*-darwin* )
82610d16fef4Smrg		    # if the lib is a (non-dlopened) module then we cannot
8262de2362d3Smrg		    # link against it, someone is ignoring the earlier warnings
8263de2362d3Smrg		    if /usr/bin/file -L $add 2> /dev/null |
82640d16fef4Smrg			 $GREP ": [^:]* bundle" >/dev/null; then
8265de2362d3Smrg		      if test "X$dlopenmodule" != "X$lib"; then
8266de2362d3Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
82670d16fef4Smrg			if test -z "$old_library"; then
8268de2362d3Smrg			  echo
8269de2362d3Smrg			  echo "*** And there doesn't seem to be a static archive available"
8270de2362d3Smrg			  echo "*** The link will probably fail, sorry"
8271de2362d3Smrg			else
82720d16fef4Smrg			  add=$dir/$old_library
8273de2362d3Smrg			fi
8274de2362d3Smrg		      elif test -n "$old_library"; then
82750d16fef4Smrg			add=$dir/$old_library
8276de2362d3Smrg		      fi
8277de2362d3Smrg		    fi
8278de2362d3Smrg		esac
82790d16fef4Smrg	      elif test no = "$hardcode_minus_L"; then
8280de2362d3Smrg		case $host in
82810d16fef4Smrg		*-*-sunos*) add_shlibpath=$dir ;;
8282de2362d3Smrg		esac
82830d16fef4Smrg		add_dir=-L$dir
82840d16fef4Smrg		add=-l$name
82850d16fef4Smrg	      elif test no = "$hardcode_shlibpath_var"; then
82860d16fef4Smrg		add_shlibpath=$dir
82870d16fef4Smrg		add=-l$name
8288de2362d3Smrg	      else
8289de2362d3Smrg		lib_linked=no
8290de2362d3Smrg	      fi
8291de2362d3Smrg	      ;;
8292de2362d3Smrg	    relink)
82930d16fef4Smrg	      if test yes = "$hardcode_direct" &&
82940d16fef4Smrg	         test no = "$hardcode_direct_absolute"; then
82950d16fef4Smrg		add=$dir/$linklib
82960d16fef4Smrg	      elif test yes = "$hardcode_minus_L"; then
82970d16fef4Smrg		add_dir=-L$absdir
8298de2362d3Smrg		# Try looking first in the location we're being installed to.
8299de2362d3Smrg		if test -n "$inst_prefix_dir"; then
8300de2362d3Smrg		  case $libdir in
8301de2362d3Smrg		    [\\/]*)
8302de2362d3Smrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
8303de2362d3Smrg		      ;;
8304de2362d3Smrg		  esac
8305de2362d3Smrg		fi
83060d16fef4Smrg		add=-l$name
83070d16fef4Smrg	      elif test yes = "$hardcode_shlibpath_var"; then
83080d16fef4Smrg		add_shlibpath=$dir
83090d16fef4Smrg		add=-l$name
8310de2362d3Smrg	      else
8311de2362d3Smrg		lib_linked=no
8312de2362d3Smrg	      fi
8313de2362d3Smrg	      ;;
8314de2362d3Smrg	    *) lib_linked=no ;;
8315de2362d3Smrg	    esac
8316de2362d3Smrg
83170d16fef4Smrg	    if test yes != "$lib_linked"; then
8318de2362d3Smrg	      func_fatal_configuration "unsupported hardcode properties"
8319de2362d3Smrg	    fi
8320de2362d3Smrg
8321de2362d3Smrg	    if test -n "$add_shlibpath"; then
8322de2362d3Smrg	      case :$compile_shlibpath: in
8323de2362d3Smrg	      *":$add_shlibpath:"*) ;;
8324de2362d3Smrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
8325de2362d3Smrg	      esac
8326de2362d3Smrg	    fi
83270d16fef4Smrg	    if test prog = "$linkmode"; then
8328de2362d3Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
8329de2362d3Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
8330de2362d3Smrg	    else
8331de2362d3Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8332de2362d3Smrg	      test -n "$add" && deplibs="$add $deplibs"
83330d16fef4Smrg	      if test yes != "$hardcode_direct" &&
83340d16fef4Smrg		 test yes != "$hardcode_minus_L" &&
83350d16fef4Smrg		 test yes = "$hardcode_shlibpath_var"; then
8336de2362d3Smrg		case :$finalize_shlibpath: in
8337de2362d3Smrg		*":$libdir:"*) ;;
8338de2362d3Smrg		*) func_append finalize_shlibpath "$libdir:" ;;
8339de2362d3Smrg		esac
8340de2362d3Smrg	      fi
8341de2362d3Smrg	    fi
8342de2362d3Smrg	  fi
8343de2362d3Smrg
83440d16fef4Smrg	  if test prog = "$linkmode" || test relink = "$opt_mode"; then
8345de2362d3Smrg	    add_shlibpath=
8346de2362d3Smrg	    add_dir=
8347de2362d3Smrg	    add=
8348de2362d3Smrg	    # Finalize command for both is simple: just hardcode it.
83490d16fef4Smrg	    if test yes = "$hardcode_direct" &&
83500d16fef4Smrg	       test no = "$hardcode_direct_absolute"; then
83510d16fef4Smrg	      add=$libdir/$linklib
83520d16fef4Smrg	    elif test yes = "$hardcode_minus_L"; then
83530d16fef4Smrg	      add_dir=-L$libdir
83540d16fef4Smrg	      add=-l$name
83550d16fef4Smrg	    elif test yes = "$hardcode_shlibpath_var"; then
8356de2362d3Smrg	      case :$finalize_shlibpath: in
8357de2362d3Smrg	      *":$libdir:"*) ;;
8358de2362d3Smrg	      *) func_append finalize_shlibpath "$libdir:" ;;
8359de2362d3Smrg	      esac
83600d16fef4Smrg	      add=-l$name
83610d16fef4Smrg	    elif test yes = "$hardcode_automatic"; then
8362de2362d3Smrg	      if test -n "$inst_prefix_dir" &&
83630d16fef4Smrg		 test -f "$inst_prefix_dir$libdir/$linklib"; then
83640d16fef4Smrg		add=$inst_prefix_dir$libdir/$linklib
8365de2362d3Smrg	      else
83660d16fef4Smrg		add=$libdir/$linklib
8367de2362d3Smrg	      fi
8368de2362d3Smrg	    else
8369de2362d3Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
83700d16fef4Smrg	      add_dir=-L$libdir
8371de2362d3Smrg	      # Try looking first in the location we're being installed to.
8372de2362d3Smrg	      if test -n "$inst_prefix_dir"; then
8373de2362d3Smrg		case $libdir in
8374de2362d3Smrg		  [\\/]*)
8375de2362d3Smrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
8376de2362d3Smrg		    ;;
8377de2362d3Smrg		esac
8378de2362d3Smrg	      fi
83790d16fef4Smrg	      add=-l$name
8380de2362d3Smrg	    fi
8381de2362d3Smrg
83820d16fef4Smrg	    if test prog = "$linkmode"; then
8383de2362d3Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
8384de2362d3Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
8385de2362d3Smrg	    else
8386de2362d3Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8387de2362d3Smrg	      test -n "$add" && deplibs="$add $deplibs"
8388de2362d3Smrg	    fi
8389de2362d3Smrg	  fi
83900d16fef4Smrg	elif test prog = "$linkmode"; then
8391de2362d3Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
8392de2362d3Smrg	  # is not unsupported.  This is valid on all known static and
8393de2362d3Smrg	  # shared platforms.
83940d16fef4Smrg	  if test unsupported != "$hardcode_direct"; then
83950d16fef4Smrg	    test -n "$old_library" && linklib=$old_library
8396de2362d3Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
8397de2362d3Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
8398de2362d3Smrg	  else
8399de2362d3Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
8400de2362d3Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
8401de2362d3Smrg	  fi
84020d16fef4Smrg	elif test yes = "$build_libtool_libs"; then
8403de2362d3Smrg	  # Not a shared library
84040d16fef4Smrg	  if test pass_all != "$deplibs_check_method"; then
8405de2362d3Smrg	    # We're trying link a shared library against a static one
8406de2362d3Smrg	    # but the system doesn't support it.
8407de2362d3Smrg
8408de2362d3Smrg	    # Just print a warning and add the library to dependency_libs so
8409de2362d3Smrg	    # that the program can be linked against the static library.
8410de2362d3Smrg	    echo
84110d16fef4Smrg	    $ECHO "*** Warning: This system cannot link to static lib archive $lib."
8412de2362d3Smrg	    echo "*** I have the capability to make that library automatically link in when"
8413de2362d3Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
8414de2362d3Smrg	    echo "*** shared version of the library, which you do not appear to have."
84150d16fef4Smrg	    if test yes = "$module"; then
8416de2362d3Smrg	      echo "*** But as you try to build a module library, libtool will still create "
8417de2362d3Smrg	      echo "*** a static module, that should work as long as the dlopening application"
8418de2362d3Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
8419de2362d3Smrg	      if test -z "$global_symbol_pipe"; then
8420de2362d3Smrg		echo
8421de2362d3Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
84220d16fef4Smrg		echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
8423de2362d3Smrg		echo "*** not find such a program.  So, this module is probably useless."
84240d16fef4Smrg		echo "*** 'nm' from GNU binutils and a full rebuild may help."
8425de2362d3Smrg	      fi
84260d16fef4Smrg	      if test no = "$build_old_libs"; then
8427de2362d3Smrg		build_libtool_libs=module
8428de2362d3Smrg		build_old_libs=yes
8429de2362d3Smrg	      else
8430de2362d3Smrg		build_libtool_libs=no
8431de2362d3Smrg	      fi
8432de2362d3Smrg	    fi
8433de2362d3Smrg	  else
8434de2362d3Smrg	    deplibs="$dir/$old_library $deplibs"
8435de2362d3Smrg	    link_static=yes
8436de2362d3Smrg	  fi
8437de2362d3Smrg	fi # link shared/static library?
8438de2362d3Smrg
84390d16fef4Smrg	if test lib = "$linkmode"; then
8440de2362d3Smrg	  if test -n "$dependency_libs" &&
84410d16fef4Smrg	     { test yes != "$hardcode_into_libs" ||
84420d16fef4Smrg	       test yes = "$build_old_libs" ||
84430d16fef4Smrg	       test yes = "$link_static"; }; then
8444de2362d3Smrg	    # Extract -R from dependency_libs
8445de2362d3Smrg	    temp_deplibs=
8446de2362d3Smrg	    for libdir in $dependency_libs; do
8447de2362d3Smrg	      case $libdir in
8448de2362d3Smrg	      -R*) func_stripname '-R' '' "$libdir"
8449de2362d3Smrg	           temp_xrpath=$func_stripname_result
8450de2362d3Smrg		   case " $xrpath " in
8451de2362d3Smrg		   *" $temp_xrpath "*) ;;
8452de2362d3Smrg		   *) func_append xrpath " $temp_xrpath";;
8453de2362d3Smrg		   esac;;
8454de2362d3Smrg	      *) func_append temp_deplibs " $libdir";;
8455de2362d3Smrg	      esac
8456de2362d3Smrg	    done
84570d16fef4Smrg	    dependency_libs=$temp_deplibs
8458de2362d3Smrg	  fi
8459de2362d3Smrg
8460de2362d3Smrg	  func_append newlib_search_path " $absdir"
8461de2362d3Smrg	  # Link against this library
84620d16fef4Smrg	  test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
8463de2362d3Smrg	  # ... and its dependency_libs
8464de2362d3Smrg	  tmp_libs=
8465de2362d3Smrg	  for deplib in $dependency_libs; do
8466de2362d3Smrg	    newdependency_libs="$deplib $newdependency_libs"
8467de2362d3Smrg	    case $deplib in
8468de2362d3Smrg              -L*) func_stripname '-L' '' "$deplib"
8469de2362d3Smrg                   func_resolve_sysroot "$func_stripname_result";;
8470de2362d3Smrg              *) func_resolve_sysroot "$deplib" ;;
8471de2362d3Smrg            esac
84720d16fef4Smrg	    if $opt_preserve_dup_deps; then
8473de2362d3Smrg	      case "$tmp_libs " in
8474de2362d3Smrg	      *" $func_resolve_sysroot_result "*)
8475de2362d3Smrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
8476de2362d3Smrg	      esac
8477de2362d3Smrg	    fi
8478de2362d3Smrg	    func_append tmp_libs " $func_resolve_sysroot_result"
8479de2362d3Smrg	  done
8480de2362d3Smrg
84810d16fef4Smrg	  if test no != "$link_all_deplibs"; then
8482de2362d3Smrg	    # Add the search paths of all dependency libraries
8483de2362d3Smrg	    for deplib in $dependency_libs; do
8484de2362d3Smrg	      path=
8485de2362d3Smrg	      case $deplib in
84860d16fef4Smrg	      -L*) path=$deplib ;;
8487de2362d3Smrg	      *.la)
8488de2362d3Smrg	        func_resolve_sysroot "$deplib"
8489de2362d3Smrg	        deplib=$func_resolve_sysroot_result
8490de2362d3Smrg	        func_dirname "$deplib" "" "."
8491de2362d3Smrg		dir=$func_dirname_result
8492de2362d3Smrg		# We need an absolute path.
8493de2362d3Smrg		case $dir in
84940d16fef4Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
8495de2362d3Smrg		*)
8496de2362d3Smrg		  absdir=`cd "$dir" && pwd`
8497de2362d3Smrg		  if test -z "$absdir"; then
84980d16fef4Smrg		    func_warning "cannot determine absolute directory name of '$dir'"
84990d16fef4Smrg		    absdir=$dir
8500de2362d3Smrg		  fi
8501de2362d3Smrg		  ;;
8502de2362d3Smrg		esac
8503de2362d3Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
8504de2362d3Smrg		case $host in
8505de2362d3Smrg		*-*-darwin*)
8506de2362d3Smrg		  depdepl=
85070d16fef4Smrg		  eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
85080d16fef4Smrg		  if test -n "$deplibrary_names"; then
85090d16fef4Smrg		    for tmp in $deplibrary_names; do
8510de2362d3Smrg		      depdepl=$tmp
8511de2362d3Smrg		    done
85120d16fef4Smrg		    if test -f "$absdir/$objdir/$depdepl"; then
85130d16fef4Smrg		      depdepl=$absdir/$objdir/$depdepl
85140d16fef4Smrg		      darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
8515de2362d3Smrg                      if test -z "$darwin_install_name"; then
85160d16fef4Smrg                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
8517de2362d3Smrg                      fi
85180d16fef4Smrg		      func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
85190d16fef4Smrg		      func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
8520de2362d3Smrg		      path=
8521de2362d3Smrg		    fi
8522de2362d3Smrg		  fi
8523de2362d3Smrg		  ;;
8524de2362d3Smrg		*)
85250d16fef4Smrg		  path=-L$absdir/$objdir
8526de2362d3Smrg		  ;;
8527de2362d3Smrg		esac
8528de2362d3Smrg		else
85290d16fef4Smrg		  eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
8530de2362d3Smrg		  test -z "$libdir" && \
85310d16fef4Smrg		    func_fatal_error "'$deplib' is not a valid libtool archive"
8532de2362d3Smrg		  test "$absdir" != "$libdir" && \
85330d16fef4Smrg		    func_warning "'$deplib' seems to be moved"
8534de2362d3Smrg
85350d16fef4Smrg		  path=-L$absdir
8536de2362d3Smrg		fi
8537de2362d3Smrg		;;
8538de2362d3Smrg	      esac
8539de2362d3Smrg	      case " $deplibs " in
8540de2362d3Smrg	      *" $path "*) ;;
8541de2362d3Smrg	      *) deplibs="$path $deplibs" ;;
8542de2362d3Smrg	      esac
8543de2362d3Smrg	    done
8544de2362d3Smrg	  fi # link_all_deplibs != no
8545de2362d3Smrg	fi # linkmode = lib
8546de2362d3Smrg      done # for deplib in $libs
85470d16fef4Smrg      if test link = "$pass"; then
85480d16fef4Smrg	if test prog = "$linkmode"; then
8549de2362d3Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
8550de2362d3Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
8551de2362d3Smrg	else
8552de2362d3Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8553de2362d3Smrg	fi
8554de2362d3Smrg      fi
85550d16fef4Smrg      dependency_libs=$newdependency_libs
85560d16fef4Smrg      if test dlpreopen = "$pass"; then
8557de2362d3Smrg	# Link the dlpreopened libraries before other libraries
8558de2362d3Smrg	for deplib in $save_deplibs; do
8559de2362d3Smrg	  deplibs="$deplib $deplibs"
8560de2362d3Smrg	done
8561de2362d3Smrg      fi
85620d16fef4Smrg      if test dlopen != "$pass"; then
85630d16fef4Smrg	test conv = "$pass" || {
8564de2362d3Smrg	  # Make sure lib_search_path contains only unique directories.
8565de2362d3Smrg	  lib_search_path=
8566de2362d3Smrg	  for dir in $newlib_search_path; do
8567de2362d3Smrg	    case "$lib_search_path " in
8568de2362d3Smrg	    *" $dir "*) ;;
8569de2362d3Smrg	    *) func_append lib_search_path " $dir" ;;
8570de2362d3Smrg	    esac
8571de2362d3Smrg	  done
8572de2362d3Smrg	  newlib_search_path=
85730d16fef4Smrg	}
8574de2362d3Smrg
85750d16fef4Smrg	if test prog,link = "$linkmode,$pass"; then
8576de2362d3Smrg	  vars="compile_deplibs finalize_deplibs"
85770d16fef4Smrg	else
85780d16fef4Smrg	  vars=deplibs
8579de2362d3Smrg	fi
8580de2362d3Smrg	for var in $vars dependency_libs; do
8581de2362d3Smrg	  # Add libraries to $var in reverse order
8582de2362d3Smrg	  eval tmp_libs=\"\$$var\"
8583de2362d3Smrg	  new_libs=
8584de2362d3Smrg	  for deplib in $tmp_libs; do
8585de2362d3Smrg	    # FIXME: Pedantically, this is the right thing to do, so
8586de2362d3Smrg	    #        that some nasty dependency loop isn't accidentally
8587de2362d3Smrg	    #        broken:
8588de2362d3Smrg	    #new_libs="$deplib $new_libs"
8589de2362d3Smrg	    # Pragmatically, this seems to cause very few problems in
8590de2362d3Smrg	    # practice:
8591de2362d3Smrg	    case $deplib in
8592de2362d3Smrg	    -L*) new_libs="$deplib $new_libs" ;;
8593de2362d3Smrg	    -R*) ;;
8594de2362d3Smrg	    *)
8595de2362d3Smrg	      # And here is the reason: when a library appears more
8596de2362d3Smrg	      # than once as an explicit dependence of a library, or
8597de2362d3Smrg	      # is implicitly linked in more than once by the
8598de2362d3Smrg	      # compiler, it is considered special, and multiple
8599de2362d3Smrg	      # occurrences thereof are not removed.  Compare this
8600de2362d3Smrg	      # with having the same library being listed as a
8601de2362d3Smrg	      # dependency of multiple other libraries: in this case,
8602de2362d3Smrg	      # we know (pedantically, we assume) the library does not
8603de2362d3Smrg	      # need to be listed more than once, so we keep only the
8604de2362d3Smrg	      # last copy.  This is not always right, but it is rare
8605de2362d3Smrg	      # enough that we require users that really mean to play
8606de2362d3Smrg	      # such unportable linking tricks to link the library
8607de2362d3Smrg	      # using -Wl,-lname, so that libtool does not consider it
8608de2362d3Smrg	      # for duplicate removal.
8609de2362d3Smrg	      case " $specialdeplibs " in
8610de2362d3Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
8611de2362d3Smrg	      *)
8612de2362d3Smrg		case " $new_libs " in
8613de2362d3Smrg		*" $deplib "*) ;;
8614de2362d3Smrg		*) new_libs="$deplib $new_libs" ;;
8615de2362d3Smrg		esac
8616de2362d3Smrg		;;
8617de2362d3Smrg	      esac
8618de2362d3Smrg	      ;;
8619de2362d3Smrg	    esac
8620de2362d3Smrg	  done
8621de2362d3Smrg	  tmp_libs=
8622de2362d3Smrg	  for deplib in $new_libs; do
8623de2362d3Smrg	    case $deplib in
8624de2362d3Smrg	    -L*)
8625de2362d3Smrg	      case " $tmp_libs " in
8626de2362d3Smrg	      *" $deplib "*) ;;
8627de2362d3Smrg	      *) func_append tmp_libs " $deplib" ;;
8628de2362d3Smrg	      esac
8629de2362d3Smrg	      ;;
8630de2362d3Smrg	    *) func_append tmp_libs " $deplib" ;;
8631de2362d3Smrg	    esac
8632de2362d3Smrg	  done
8633de2362d3Smrg	  eval $var=\"$tmp_libs\"
8634de2362d3Smrg	done # for var
8635de2362d3Smrg      fi
86360d16fef4Smrg
86370d16fef4Smrg      # Add Sun CC postdeps if required:
86380d16fef4Smrg      test CXX = "$tagname" && {
86390d16fef4Smrg        case $host_os in
86400d16fef4Smrg        linux*)
86410d16fef4Smrg          case `$CC -V 2>&1 | sed 5q` in
86420d16fef4Smrg          *Sun\ C*) # Sun C++ 5.9
86430d16fef4Smrg            func_suncc_cstd_abi
86440d16fef4Smrg
86450d16fef4Smrg            if test no != "$suncc_use_cstd_abi"; then
86460d16fef4Smrg              func_append postdeps ' -library=Cstd -library=Crun'
86470d16fef4Smrg            fi
86480d16fef4Smrg            ;;
86490d16fef4Smrg          esac
86500d16fef4Smrg          ;;
86510d16fef4Smrg
86520d16fef4Smrg        solaris*)
86530d16fef4Smrg          func_cc_basename "$CC"
86540d16fef4Smrg          case $func_cc_basename_result in
86550d16fef4Smrg          CC* | sunCC*)
86560d16fef4Smrg            func_suncc_cstd_abi
86570d16fef4Smrg
86580d16fef4Smrg            if test no != "$suncc_use_cstd_abi"; then
86590d16fef4Smrg              func_append postdeps ' -library=Cstd -library=Crun'
86600d16fef4Smrg            fi
86610d16fef4Smrg            ;;
86620d16fef4Smrg          esac
86630d16fef4Smrg          ;;
86640d16fef4Smrg        esac
86650d16fef4Smrg      }
86660d16fef4Smrg
8667de2362d3Smrg      # Last step: remove runtime libs from dependency_libs
8668de2362d3Smrg      # (they stay in deplibs)
8669de2362d3Smrg      tmp_libs=
86700d16fef4Smrg      for i in $dependency_libs; do
8671de2362d3Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
8672de2362d3Smrg	*" $i "*)
86730d16fef4Smrg	  i=
8674de2362d3Smrg	  ;;
8675de2362d3Smrg	esac
86760d16fef4Smrg	if test -n "$i"; then
8677de2362d3Smrg	  func_append tmp_libs " $i"
8678de2362d3Smrg	fi
8679de2362d3Smrg      done
8680de2362d3Smrg      dependency_libs=$tmp_libs
8681de2362d3Smrg    done # for pass
86820d16fef4Smrg    if test prog = "$linkmode"; then
86830d16fef4Smrg      dlfiles=$newdlfiles
8684de2362d3Smrg    fi
86850d16fef4Smrg    if test prog = "$linkmode" || test lib = "$linkmode"; then
86860d16fef4Smrg      dlprefiles=$newdlprefiles
8687de2362d3Smrg    fi
8688de2362d3Smrg
8689de2362d3Smrg    case $linkmode in
8690de2362d3Smrg    oldlib)
86910d16fef4Smrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
86920d16fef4Smrg	func_warning "'-dlopen' is ignored for archives"
8693de2362d3Smrg      fi
8694de2362d3Smrg
8695de2362d3Smrg      case " $deplibs" in
8696de2362d3Smrg      *\ -l* | *\ -L*)
86970d16fef4Smrg	func_warning "'-l' and '-L' are ignored for archives" ;;
8698de2362d3Smrg      esac
8699de2362d3Smrg
8700de2362d3Smrg      test -n "$rpath" && \
87010d16fef4Smrg	func_warning "'-rpath' is ignored for archives"
8702de2362d3Smrg
8703de2362d3Smrg      test -n "$xrpath" && \
87040d16fef4Smrg	func_warning "'-R' is ignored for archives"
8705de2362d3Smrg
8706de2362d3Smrg      test -n "$vinfo" && \
87070d16fef4Smrg	func_warning "'-version-info/-version-number' is ignored for archives"
8708de2362d3Smrg
8709de2362d3Smrg      test -n "$release" && \
87100d16fef4Smrg	func_warning "'-release' is ignored for archives"
8711de2362d3Smrg
8712de2362d3Smrg      test -n "$export_symbols$export_symbols_regex" && \
87130d16fef4Smrg	func_warning "'-export-symbols' is ignored for archives"
8714de2362d3Smrg
8715de2362d3Smrg      # Now set the variables for building old libraries.
8716de2362d3Smrg      build_libtool_libs=no
87170d16fef4Smrg      oldlibs=$output
8718de2362d3Smrg      func_append objs "$old_deplibs"
8719de2362d3Smrg      ;;
8720de2362d3Smrg
8721de2362d3Smrg    lib)
87220d16fef4Smrg      # Make sure we only generate libraries of the form 'libNAME.la'.
8723de2362d3Smrg      case $outputname in
8724de2362d3Smrg      lib*)
8725de2362d3Smrg	func_stripname 'lib' '.la' "$outputname"
8726de2362d3Smrg	name=$func_stripname_result
8727de2362d3Smrg	eval shared_ext=\"$shrext_cmds\"
8728de2362d3Smrg	eval libname=\"$libname_spec\"
8729de2362d3Smrg	;;
8730de2362d3Smrg      *)
87310d16fef4Smrg	test no = "$module" \
87320d16fef4Smrg	  && func_fatal_help "libtool library '$output' must begin with 'lib'"
8733de2362d3Smrg
87340d16fef4Smrg	if test no != "$need_lib_prefix"; then
8735de2362d3Smrg	  # Add the "lib" prefix for modules if required
8736de2362d3Smrg	  func_stripname '' '.la' "$outputname"
8737de2362d3Smrg	  name=$func_stripname_result
8738de2362d3Smrg	  eval shared_ext=\"$shrext_cmds\"
8739de2362d3Smrg	  eval libname=\"$libname_spec\"
8740de2362d3Smrg	else
8741de2362d3Smrg	  func_stripname '' '.la' "$outputname"
8742de2362d3Smrg	  libname=$func_stripname_result
8743de2362d3Smrg	fi
8744de2362d3Smrg	;;
8745de2362d3Smrg      esac
8746de2362d3Smrg
8747de2362d3Smrg      if test -n "$objs"; then
87480d16fef4Smrg	if test pass_all != "$deplibs_check_method"; then
87490d16fef4Smrg	  func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
8750de2362d3Smrg	else
8751de2362d3Smrg	  echo
8752de2362d3Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
8753de2362d3Smrg	  $ECHO "*** objects $objs is not portable!"
8754de2362d3Smrg	  func_append libobjs " $objs"
8755de2362d3Smrg	fi
8756de2362d3Smrg      fi
8757de2362d3Smrg
87580d16fef4Smrg      test no = "$dlself" \
87590d16fef4Smrg	|| func_warning "'-dlopen self' is ignored for libtool libraries"
8760de2362d3Smrg
8761de2362d3Smrg      set dummy $rpath
8762de2362d3Smrg      shift
87630d16fef4Smrg      test 1 -lt "$#" \
87640d16fef4Smrg	&& func_warning "ignoring multiple '-rpath's for a libtool library"
8765de2362d3Smrg
87660d16fef4Smrg      install_libdir=$1
8767de2362d3Smrg
8768de2362d3Smrg      oldlibs=
8769de2362d3Smrg      if test -z "$rpath"; then
87700d16fef4Smrg	if test yes = "$build_libtool_libs"; then
8771de2362d3Smrg	  # Building a libtool convenience library.
87720d16fef4Smrg	  # Some compilers have problems with a '.al' extension so
8773de2362d3Smrg	  # convenience libraries should have the same extension an
8774de2362d3Smrg	  # archive normally would.
8775de2362d3Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
8776de2362d3Smrg	  build_libtool_libs=convenience
8777de2362d3Smrg	  build_old_libs=yes
8778de2362d3Smrg	fi
8779de2362d3Smrg
8780de2362d3Smrg	test -n "$vinfo" && \
87810d16fef4Smrg	  func_warning "'-version-info/-version-number' is ignored for convenience libraries"
8782de2362d3Smrg
8783de2362d3Smrg	test -n "$release" && \
87840d16fef4Smrg	  func_warning "'-release' is ignored for convenience libraries"
8785de2362d3Smrg      else
8786de2362d3Smrg
8787de2362d3Smrg	# Parse the version information argument.
87880d16fef4Smrg	save_ifs=$IFS; IFS=:
8789de2362d3Smrg	set dummy $vinfo 0 0 0
8790de2362d3Smrg	shift
87910d16fef4Smrg	IFS=$save_ifs
8792de2362d3Smrg
8793de2362d3Smrg	test -n "$7" && \
87940d16fef4Smrg	  func_fatal_help "too many parameters to '-version-info'"
8795de2362d3Smrg
8796de2362d3Smrg	# convert absolute version numbers to libtool ages
8797de2362d3Smrg	# this retains compatibility with .la files and attempts
8798de2362d3Smrg	# to make the code below a bit more comprehensible
8799de2362d3Smrg
8800de2362d3Smrg	case $vinfo_number in
8801de2362d3Smrg	yes)
88020d16fef4Smrg	  number_major=$1
88030d16fef4Smrg	  number_minor=$2
88040d16fef4Smrg	  number_revision=$3
8805de2362d3Smrg	  #
8806de2362d3Smrg	  # There are really only two kinds -- those that
8807de2362d3Smrg	  # use the current revision as the major version
8808de2362d3Smrg	  # and those that subtract age and use age as
8809de2362d3Smrg	  # a minor version.  But, then there is irix
88100d16fef4Smrg	  # that has an extra 1 added just for fun
8811de2362d3Smrg	  #
8812de2362d3Smrg	  case $version_type in
8813de2362d3Smrg	  # correct linux to gnu/linux during the next big refactor
88140d16fef4Smrg	  darwin|freebsd-elf|linux|osf|windows|none)
8815de2362d3Smrg	    func_arith $number_major + $number_minor
8816de2362d3Smrg	    current=$func_arith_result
88170d16fef4Smrg	    age=$number_minor
88180d16fef4Smrg	    revision=$number_revision
8819de2362d3Smrg	    ;;
88200d16fef4Smrg	  freebsd-aout|qnx|sunos)
88210d16fef4Smrg	    current=$number_major
88220d16fef4Smrg	    revision=$number_minor
88230d16fef4Smrg	    age=0
8824de2362d3Smrg	    ;;
8825de2362d3Smrg	  irix|nonstopux)
8826de2362d3Smrg	    func_arith $number_major + $number_minor
8827de2362d3Smrg	    current=$func_arith_result
88280d16fef4Smrg	    age=$number_minor
88290d16fef4Smrg	    revision=$number_minor
8830de2362d3Smrg	    lt_irix_increment=no
8831de2362d3Smrg	    ;;
88320d16fef4Smrg	  *)
88330d16fef4Smrg	    func_fatal_configuration "$modename: unknown library version type '$version_type'"
88340d16fef4Smrg	    ;;
8835de2362d3Smrg	  esac
8836de2362d3Smrg	  ;;
8837de2362d3Smrg	no)
88380d16fef4Smrg	  current=$1
88390d16fef4Smrg	  revision=$2
88400d16fef4Smrg	  age=$3
8841de2362d3Smrg	  ;;
8842de2362d3Smrg	esac
8843de2362d3Smrg
8844de2362d3Smrg	# Check that each of the things are valid numbers.
8845de2362d3Smrg	case $current in
8846de2362d3Smrg	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]) ;;
8847de2362d3Smrg	*)
88480d16fef4Smrg	  func_error "CURRENT '$current' must be a nonnegative integer"
88490d16fef4Smrg	  func_fatal_error "'$vinfo' is not valid version information"
8850de2362d3Smrg	  ;;
8851de2362d3Smrg	esac
8852de2362d3Smrg
8853de2362d3Smrg	case $revision in
8854de2362d3Smrg	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]) ;;
8855de2362d3Smrg	*)
88560d16fef4Smrg	  func_error "REVISION '$revision' must be a nonnegative integer"
88570d16fef4Smrg	  func_fatal_error "'$vinfo' is not valid version information"
8858de2362d3Smrg	  ;;
8859de2362d3Smrg	esac
8860de2362d3Smrg
8861de2362d3Smrg	case $age in
8862de2362d3Smrg	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]) ;;
8863de2362d3Smrg	*)
88640d16fef4Smrg	  func_error "AGE '$age' must be a nonnegative integer"
88650d16fef4Smrg	  func_fatal_error "'$vinfo' is not valid version information"
8866de2362d3Smrg	  ;;
8867de2362d3Smrg	esac
8868de2362d3Smrg
8869de2362d3Smrg	if test "$age" -gt "$current"; then
88700d16fef4Smrg	  func_error "AGE '$age' is greater than the current interface number '$current'"
88710d16fef4Smrg	  func_fatal_error "'$vinfo' is not valid version information"
8872de2362d3Smrg	fi
8873de2362d3Smrg
8874de2362d3Smrg	# Calculate the version variables.
8875de2362d3Smrg	major=
8876de2362d3Smrg	versuffix=
8877de2362d3Smrg	verstring=
8878de2362d3Smrg	case $version_type in
8879de2362d3Smrg	none) ;;
8880de2362d3Smrg
8881de2362d3Smrg	darwin)
8882de2362d3Smrg	  # Like Linux, but with the current version available in
8883de2362d3Smrg	  # verstring for coding it into the library header
8884de2362d3Smrg	  func_arith $current - $age
8885de2362d3Smrg	  major=.$func_arith_result
88860d16fef4Smrg	  versuffix=$major.$age.$revision
8887de2362d3Smrg	  # Darwin ld doesn't like 0 for these options...
8888de2362d3Smrg	  func_arith $current + 1
8889de2362d3Smrg	  minor_current=$func_arith_result
88900d16fef4Smrg	  xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
8891de2362d3Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
88920d16fef4Smrg          # On Darwin other compilers
88930d16fef4Smrg          case $CC in
88940d16fef4Smrg              nagfor*)
88950d16fef4Smrg                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
88960d16fef4Smrg                  ;;
88970d16fef4Smrg              *)
88980d16fef4Smrg                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
88990d16fef4Smrg                  ;;
89000d16fef4Smrg          esac
8901de2362d3Smrg	  ;;
8902de2362d3Smrg
8903de2362d3Smrg	freebsd-aout)
89040d16fef4Smrg	  major=.$current
89050d16fef4Smrg	  versuffix=.$current.$revision
8906de2362d3Smrg	  ;;
8907de2362d3Smrg
8908de2362d3Smrg	freebsd-elf)
89090d16fef4Smrg	  func_arith $current - $age
89100d16fef4Smrg	  major=.$func_arith_result
89110d16fef4Smrg	  versuffix=$major.$age.$revision
8912de2362d3Smrg	  ;;
8913de2362d3Smrg
8914de2362d3Smrg	irix | nonstopux)
89150d16fef4Smrg	  if test no = "$lt_irix_increment"; then
8916de2362d3Smrg	    func_arith $current - $age
8917de2362d3Smrg	  else
8918de2362d3Smrg	    func_arith $current - $age + 1
8919de2362d3Smrg	  fi
8920de2362d3Smrg	  major=$func_arith_result
8921de2362d3Smrg
8922de2362d3Smrg	  case $version_type in
8923de2362d3Smrg	    nonstopux) verstring_prefix=nonstopux ;;
8924de2362d3Smrg	    *)         verstring_prefix=sgi ;;
8925de2362d3Smrg	  esac
89260d16fef4Smrg	  verstring=$verstring_prefix$major.$revision
8927de2362d3Smrg
8928de2362d3Smrg	  # Add in all the interfaces that we are compatible with.
8929de2362d3Smrg	  loop=$revision
89300d16fef4Smrg	  while test 0 -ne "$loop"; do
8931de2362d3Smrg	    func_arith $revision - $loop
8932de2362d3Smrg	    iface=$func_arith_result
8933de2362d3Smrg	    func_arith $loop - 1
8934de2362d3Smrg	    loop=$func_arith_result
89350d16fef4Smrg	    verstring=$verstring_prefix$major.$iface:$verstring
8936de2362d3Smrg	  done
8937de2362d3Smrg
89380d16fef4Smrg	  # Before this point, $major must not contain '.'.
8939de2362d3Smrg	  major=.$major
89400d16fef4Smrg	  versuffix=$major.$revision
8941de2362d3Smrg	  ;;
8942de2362d3Smrg
8943de2362d3Smrg	linux) # correct to gnu/linux during the next big refactor
8944de2362d3Smrg	  func_arith $current - $age
8945de2362d3Smrg	  major=.$func_arith_result
89460d16fef4Smrg	  versuffix=$major.$age.$revision
8947de2362d3Smrg	  ;;
8948de2362d3Smrg
8949de2362d3Smrg	osf)
8950de2362d3Smrg	  func_arith $current - $age
8951de2362d3Smrg	  major=.$func_arith_result
89520d16fef4Smrg	  versuffix=.$current.$age.$revision
89530d16fef4Smrg	  verstring=$current.$age.$revision
8954de2362d3Smrg
8955de2362d3Smrg	  # Add in all the interfaces that we are compatible with.
8956de2362d3Smrg	  loop=$age
89570d16fef4Smrg	  while test 0 -ne "$loop"; do
8958de2362d3Smrg	    func_arith $current - $loop
8959de2362d3Smrg	    iface=$func_arith_result
8960de2362d3Smrg	    func_arith $loop - 1
8961de2362d3Smrg	    loop=$func_arith_result
89620d16fef4Smrg	    verstring=$verstring:$iface.0
8963de2362d3Smrg	  done
8964de2362d3Smrg
8965de2362d3Smrg	  # Make executables depend on our current version.
89660d16fef4Smrg	  func_append verstring ":$current.0"
8967de2362d3Smrg	  ;;
8968de2362d3Smrg
8969de2362d3Smrg	qnx)
89700d16fef4Smrg	  major=.$current
89710d16fef4Smrg	  versuffix=.$current
89720d16fef4Smrg	  ;;
89730d16fef4Smrg
89740d16fef4Smrg	sco)
89750d16fef4Smrg	  major=.$current
89760d16fef4Smrg	  versuffix=.$current
8977de2362d3Smrg	  ;;
8978de2362d3Smrg
8979de2362d3Smrg	sunos)
89800d16fef4Smrg	  major=.$current
89810d16fef4Smrg	  versuffix=.$current.$revision
8982de2362d3Smrg	  ;;
8983de2362d3Smrg
8984de2362d3Smrg	windows)
8985de2362d3Smrg	  # Use '-' rather than '.', since we only want one
89860d16fef4Smrg	  # extension on DOS 8.3 file systems.
8987de2362d3Smrg	  func_arith $current - $age
8988de2362d3Smrg	  major=$func_arith_result
89890d16fef4Smrg	  versuffix=-$major
8990de2362d3Smrg	  ;;
8991de2362d3Smrg
8992de2362d3Smrg	*)
89930d16fef4Smrg	  func_fatal_configuration "unknown library version type '$version_type'"
8994de2362d3Smrg	  ;;
8995de2362d3Smrg	esac
8996de2362d3Smrg
8997de2362d3Smrg	# Clear the version info if we defaulted, and they specified a release.
8998de2362d3Smrg	if test -z "$vinfo" && test -n "$release"; then
8999de2362d3Smrg	  major=
9000de2362d3Smrg	  case $version_type in
9001de2362d3Smrg	  darwin)
9002de2362d3Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
9003de2362d3Smrg	    # problems, so we reset it completely
9004de2362d3Smrg	    verstring=
9005de2362d3Smrg	    ;;
9006de2362d3Smrg	  *)
90070d16fef4Smrg	    verstring=0.0
9008de2362d3Smrg	    ;;
9009de2362d3Smrg	  esac
90100d16fef4Smrg	  if test no = "$need_version"; then
9011de2362d3Smrg	    versuffix=
9012de2362d3Smrg	  else
90130d16fef4Smrg	    versuffix=.0.0
9014de2362d3Smrg	  fi
9015de2362d3Smrg	fi
9016de2362d3Smrg
9017de2362d3Smrg	# Remove version info from name if versioning should be avoided
90180d16fef4Smrg	if test yes,no = "$avoid_version,$need_version"; then
9019de2362d3Smrg	  major=
9020de2362d3Smrg	  versuffix=
90210d16fef4Smrg	  verstring=
9022de2362d3Smrg	fi
9023de2362d3Smrg
9024de2362d3Smrg	# Check to see if the archive will have undefined symbols.
90250d16fef4Smrg	if test yes = "$allow_undefined"; then
90260d16fef4Smrg	  if test unsupported = "$allow_undefined_flag"; then
90270d16fef4Smrg	    if test yes = "$build_old_libs"; then
90280d16fef4Smrg	      func_warning "undefined symbols not allowed in $host shared libraries; building static only"
90290d16fef4Smrg	      build_libtool_libs=no
90300d16fef4Smrg	    else
90310d16fef4Smrg	      func_fatal_error "can't build $host shared library unless -no-undefined is specified"
90320d16fef4Smrg	    fi
9033de2362d3Smrg	  fi
9034de2362d3Smrg	else
9035de2362d3Smrg	  # Don't allow undefined symbols.
90360d16fef4Smrg	  allow_undefined_flag=$no_undefined_flag
9037de2362d3Smrg	fi
9038de2362d3Smrg
9039de2362d3Smrg      fi
9040de2362d3Smrg
90410d16fef4Smrg      func_generate_dlsyms "$libname" "$libname" :
9042de2362d3Smrg      func_append libobjs " $symfileobj"
90430d16fef4Smrg      test " " = "$libobjs" && libobjs=
9044de2362d3Smrg
90450d16fef4Smrg      if test relink != "$opt_mode"; then
9046de2362d3Smrg	# Remove our outputs, but don't remove object files since they
9047de2362d3Smrg	# may have been created when compiling PIC objects.
9048de2362d3Smrg	removelist=
9049de2362d3Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
9050de2362d3Smrg	for p in $tempremovelist; do
9051de2362d3Smrg	  case $p in
9052de2362d3Smrg	    *.$objext | *.gcno)
9053de2362d3Smrg	       ;;
90540d16fef4Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
90550d16fef4Smrg	       if test -n "$precious_files_regex"; then
9056de2362d3Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
9057de2362d3Smrg		 then
9058de2362d3Smrg		   continue
9059de2362d3Smrg		 fi
9060de2362d3Smrg	       fi
9061de2362d3Smrg	       func_append removelist " $p"
9062de2362d3Smrg	       ;;
9063de2362d3Smrg	    *) ;;
9064de2362d3Smrg	  esac
9065de2362d3Smrg	done
9066de2362d3Smrg	test -n "$removelist" && \
9067de2362d3Smrg	  func_show_eval "${RM}r \$removelist"
9068de2362d3Smrg      fi
9069de2362d3Smrg
9070de2362d3Smrg      # Now set the variables for building old libraries.
90710d16fef4Smrg      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
9072de2362d3Smrg	func_append oldlibs " $output_objdir/$libname.$libext"
9073de2362d3Smrg
9074de2362d3Smrg	# Transform .lo files to .o files.
90750d16fef4Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
9076de2362d3Smrg      fi
9077de2362d3Smrg
9078de2362d3Smrg      # Eliminate all temporary directories.
9079de2362d3Smrg      #for path in $notinst_path; do
9080de2362d3Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
9081de2362d3Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
9082de2362d3Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
9083de2362d3Smrg      #done
9084de2362d3Smrg
9085de2362d3Smrg      if test -n "$xrpath"; then
9086de2362d3Smrg	# If the user specified any rpath flags, then add them.
9087de2362d3Smrg	temp_xrpath=
9088de2362d3Smrg	for libdir in $xrpath; do
9089de2362d3Smrg	  func_replace_sysroot "$libdir"
9090de2362d3Smrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
9091de2362d3Smrg	  case "$finalize_rpath " in
9092de2362d3Smrg	  *" $libdir "*) ;;
9093de2362d3Smrg	  *) func_append finalize_rpath " $libdir" ;;
9094de2362d3Smrg	  esac
9095de2362d3Smrg	done
90960d16fef4Smrg	if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
9097de2362d3Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
9098de2362d3Smrg	fi
9099de2362d3Smrg      fi
9100de2362d3Smrg
9101de2362d3Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
91020d16fef4Smrg      old_dlfiles=$dlfiles
9103de2362d3Smrg      dlfiles=
9104de2362d3Smrg      for lib in $old_dlfiles; do
9105de2362d3Smrg	case " $dlprefiles $dlfiles " in
9106de2362d3Smrg	*" $lib "*) ;;
9107de2362d3Smrg	*) func_append dlfiles " $lib" ;;
9108de2362d3Smrg	esac
9109de2362d3Smrg      done
9110de2362d3Smrg
9111de2362d3Smrg      # Make sure dlprefiles contains only unique files
91120d16fef4Smrg      old_dlprefiles=$dlprefiles
9113de2362d3Smrg      dlprefiles=
9114de2362d3Smrg      for lib in $old_dlprefiles; do
9115de2362d3Smrg	case "$dlprefiles " in
9116de2362d3Smrg	*" $lib "*) ;;
9117de2362d3Smrg	*) func_append dlprefiles " $lib" ;;
9118de2362d3Smrg	esac
9119de2362d3Smrg      done
9120de2362d3Smrg
91210d16fef4Smrg      if test yes = "$build_libtool_libs"; then
9122de2362d3Smrg	if test -n "$rpath"; then
9123de2362d3Smrg	  case $host in
9124de2362d3Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
9125de2362d3Smrg	    # these systems don't actually have a c library (as such)!
9126de2362d3Smrg	    ;;
9127de2362d3Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
9128de2362d3Smrg	    # Rhapsody C library is in the System framework
9129de2362d3Smrg	    func_append deplibs " System.ltframework"
9130de2362d3Smrg	    ;;
9131de2362d3Smrg	  *-*-netbsd*)
9132de2362d3Smrg	    # Don't link with libc until the a.out ld.so is fixed.
9133de2362d3Smrg	    ;;
9134de2362d3Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
9135de2362d3Smrg	    # Do not include libc due to us having libc/libc_r.
9136de2362d3Smrg	    ;;
9137de2362d3Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
9138de2362d3Smrg	    # Causes problems with __ctype
9139de2362d3Smrg	    ;;
9140de2362d3Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
9141de2362d3Smrg	    # Compiler inserts libc in the correct place for threads to work
9142de2362d3Smrg	    ;;
9143de2362d3Smrg	  *)
9144de2362d3Smrg	    # Add libc to deplibs on all other systems if necessary.
91450d16fef4Smrg	    if test yes = "$build_libtool_need_lc"; then
9146de2362d3Smrg	      func_append deplibs " -lc"
9147de2362d3Smrg	    fi
9148de2362d3Smrg	    ;;
9149de2362d3Smrg	  esac
9150de2362d3Smrg	fi
9151de2362d3Smrg
9152de2362d3Smrg	# Transform deplibs into only deplibs that can be linked in shared.
9153de2362d3Smrg	name_save=$name
9154de2362d3Smrg	libname_save=$libname
9155de2362d3Smrg	release_save=$release
9156de2362d3Smrg	versuffix_save=$versuffix
9157de2362d3Smrg	major_save=$major
9158de2362d3Smrg	# I'm not sure if I'm treating the release correctly.  I think
9159de2362d3Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
9160de2362d3Smrg	# add it in twice.  Is that correct?
91610d16fef4Smrg	release=
91620d16fef4Smrg	versuffix=
91630d16fef4Smrg	major=
9164de2362d3Smrg	newdeplibs=
9165de2362d3Smrg	droppeddeps=no
9166de2362d3Smrg	case $deplibs_check_method in
9167de2362d3Smrg	pass_all)
9168de2362d3Smrg	  # Don't check for shared/static.  Everything works.
9169de2362d3Smrg	  # This might be a little naive.  We might want to check
9170de2362d3Smrg	  # whether the library exists or not.  But this is on
9171de2362d3Smrg	  # osf3 & osf4 and I'm not really sure... Just
9172de2362d3Smrg	  # implementing what was already the behavior.
9173de2362d3Smrg	  newdeplibs=$deplibs
9174de2362d3Smrg	  ;;
9175de2362d3Smrg	test_compile)
9176de2362d3Smrg	  # This code stresses the "libraries are programs" paradigm to its
9177de2362d3Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
9178de2362d3Smrg	  # against the deplibs as a proxy for the library.  Then we can check
9179de2362d3Smrg	  # whether they linked in statically or dynamically with ldd.
9180de2362d3Smrg	  $opt_dry_run || $RM conftest.c
9181de2362d3Smrg	  cat > conftest.c <<EOF
9182de2362d3Smrg	  int main() { return 0; }
9183de2362d3SmrgEOF
9184de2362d3Smrg	  $opt_dry_run || $RM conftest
9185de2362d3Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
9186de2362d3Smrg	    ldd_output=`ldd conftest`
9187de2362d3Smrg	    for i in $deplibs; do
9188de2362d3Smrg	      case $i in
9189de2362d3Smrg	      -l*)
9190de2362d3Smrg		func_stripname -l '' "$i"
9191de2362d3Smrg		name=$func_stripname_result
91920d16fef4Smrg		if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9193de2362d3Smrg		  case " $predeps $postdeps " in
9194de2362d3Smrg		  *" $i "*)
9195de2362d3Smrg		    func_append newdeplibs " $i"
91960d16fef4Smrg		    i=
9197de2362d3Smrg		    ;;
9198de2362d3Smrg		  esac
9199de2362d3Smrg		fi
92000d16fef4Smrg		if test -n "$i"; then
9201de2362d3Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
9202de2362d3Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9203de2362d3Smrg		  set dummy $deplib_matches; shift
9204de2362d3Smrg		  deplib_match=$1
92050d16fef4Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9206de2362d3Smrg		    func_append newdeplibs " $i"
9207de2362d3Smrg		  else
9208de2362d3Smrg		    droppeddeps=yes
9209de2362d3Smrg		    echo
9210de2362d3Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
9211de2362d3Smrg		    echo "*** I have the capability to make that library automatically link in when"
9212de2362d3Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
9213de2362d3Smrg		    echo "*** shared version of the library, which I believe you do not have"
9214de2362d3Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
9215de2362d3Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
9216de2362d3Smrg		  fi
9217de2362d3Smrg		fi
9218de2362d3Smrg		;;
9219de2362d3Smrg	      *)
9220de2362d3Smrg		func_append newdeplibs " $i"
9221de2362d3Smrg		;;
9222de2362d3Smrg	      esac
9223de2362d3Smrg	    done
9224de2362d3Smrg	  else
9225de2362d3Smrg	    # Error occurred in the first compile.  Let's try to salvage
9226de2362d3Smrg	    # the situation: Compile a separate program for each library.
9227de2362d3Smrg	    for i in $deplibs; do
9228de2362d3Smrg	      case $i in
9229de2362d3Smrg	      -l*)
9230de2362d3Smrg		func_stripname -l '' "$i"
9231de2362d3Smrg		name=$func_stripname_result
9232de2362d3Smrg		$opt_dry_run || $RM conftest
9233de2362d3Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
9234de2362d3Smrg		  ldd_output=`ldd conftest`
92350d16fef4Smrg		  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9236de2362d3Smrg		    case " $predeps $postdeps " in
9237de2362d3Smrg		    *" $i "*)
9238de2362d3Smrg		      func_append newdeplibs " $i"
92390d16fef4Smrg		      i=
9240de2362d3Smrg		      ;;
9241de2362d3Smrg		    esac
9242de2362d3Smrg		  fi
92430d16fef4Smrg		  if test -n "$i"; then
9244de2362d3Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
9245de2362d3Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9246de2362d3Smrg		    set dummy $deplib_matches; shift
9247de2362d3Smrg		    deplib_match=$1
92480d16fef4Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9249de2362d3Smrg		      func_append newdeplibs " $i"
9250de2362d3Smrg		    else
9251de2362d3Smrg		      droppeddeps=yes
9252de2362d3Smrg		      echo
9253de2362d3Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
9254de2362d3Smrg		      echo "*** I have the capability to make that library automatically link in when"
9255de2362d3Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
9256de2362d3Smrg		      echo "*** shared version of the library, which you do not appear to have"
9257de2362d3Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
9258de2362d3Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
9259de2362d3Smrg		    fi
9260de2362d3Smrg		  fi
9261de2362d3Smrg		else
9262de2362d3Smrg		  droppeddeps=yes
9263de2362d3Smrg		  echo
9264de2362d3Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
9265de2362d3Smrg		  echo "*** make it link in!  You will probably need to install it or some"
9266de2362d3Smrg		  echo "*** library that it depends on before this library will be fully"
9267de2362d3Smrg		  echo "*** functional.  Installing it before continuing would be even better."
9268de2362d3Smrg		fi
9269de2362d3Smrg		;;
9270de2362d3Smrg	      *)
9271de2362d3Smrg		func_append newdeplibs " $i"
9272de2362d3Smrg		;;
9273de2362d3Smrg	      esac
9274de2362d3Smrg	    done
9275de2362d3Smrg	  fi
9276de2362d3Smrg	  ;;
9277de2362d3Smrg	file_magic*)
9278de2362d3Smrg	  set dummy $deplibs_check_method; shift
9279de2362d3Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9280de2362d3Smrg	  for a_deplib in $deplibs; do
9281de2362d3Smrg	    case $a_deplib in
9282de2362d3Smrg	    -l*)
9283de2362d3Smrg	      func_stripname -l '' "$a_deplib"
9284de2362d3Smrg	      name=$func_stripname_result
92850d16fef4Smrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9286de2362d3Smrg		case " $predeps $postdeps " in
9287de2362d3Smrg		*" $a_deplib "*)
9288de2362d3Smrg		  func_append newdeplibs " $a_deplib"
92890d16fef4Smrg		  a_deplib=
9290de2362d3Smrg		  ;;
9291de2362d3Smrg		esac
9292de2362d3Smrg	      fi
92930d16fef4Smrg	      if test -n "$a_deplib"; then
9294de2362d3Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
9295de2362d3Smrg		if test -n "$file_magic_glob"; then
9296de2362d3Smrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
9297de2362d3Smrg		else
9298de2362d3Smrg		  libnameglob=$libname
9299de2362d3Smrg		fi
93000d16fef4Smrg		test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
9301de2362d3Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
93020d16fef4Smrg		  if test yes = "$want_nocaseglob"; then
9303de2362d3Smrg		    shopt -s nocaseglob
9304de2362d3Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9305de2362d3Smrg		    $nocaseglob
9306de2362d3Smrg		  else
9307de2362d3Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9308de2362d3Smrg		  fi
9309de2362d3Smrg		  for potent_lib in $potential_libs; do
9310de2362d3Smrg		      # Follow soft links.
9311de2362d3Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
9312de2362d3Smrg			 $GREP " -> " >/dev/null; then
9313de2362d3Smrg			continue
9314de2362d3Smrg		      fi
9315de2362d3Smrg		      # The statement above tries to avoid entering an
9316de2362d3Smrg		      # endless loop below, in case of cyclic links.
9317de2362d3Smrg		      # We might still enter an endless loop, since a link
9318de2362d3Smrg		      # loop can be closed while we follow links,
9319de2362d3Smrg		      # but so what?
93200d16fef4Smrg		      potlib=$potent_lib
9321de2362d3Smrg		      while test -h "$potlib" 2>/dev/null; do
93220d16fef4Smrg			potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
9323de2362d3Smrg			case $potliblink in
93240d16fef4Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
93250d16fef4Smrg			*) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
9326de2362d3Smrg			esac
9327de2362d3Smrg		      done
9328de2362d3Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
9329de2362d3Smrg			 $SED -e 10q |
9330de2362d3Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
9331de2362d3Smrg			func_append newdeplibs " $a_deplib"
93320d16fef4Smrg			a_deplib=
9333de2362d3Smrg			break 2
9334de2362d3Smrg		      fi
9335de2362d3Smrg		  done
9336de2362d3Smrg		done
9337de2362d3Smrg	      fi
93380d16fef4Smrg	      if test -n "$a_deplib"; then
9339de2362d3Smrg		droppeddeps=yes
9340de2362d3Smrg		echo
9341de2362d3Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
9342de2362d3Smrg		echo "*** I have the capability to make that library automatically link in when"
9343de2362d3Smrg		echo "*** you link to this library.  But I can only do this if you have a"
9344de2362d3Smrg		echo "*** shared version of the library, which you do not appear to have"
9345de2362d3Smrg		echo "*** because I did check the linker path looking for a file starting"
93460d16fef4Smrg		if test -z "$potlib"; then
9347de2362d3Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
9348de2362d3Smrg		else
9349de2362d3Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
9350de2362d3Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
9351de2362d3Smrg		fi
9352de2362d3Smrg	      fi
9353de2362d3Smrg	      ;;
9354de2362d3Smrg	    *)
9355de2362d3Smrg	      # Add a -L argument.
9356de2362d3Smrg	      func_append newdeplibs " $a_deplib"
9357de2362d3Smrg	      ;;
9358de2362d3Smrg	    esac
9359de2362d3Smrg	  done # Gone through all deplibs.
9360de2362d3Smrg	  ;;
9361de2362d3Smrg	match_pattern*)
9362de2362d3Smrg	  set dummy $deplibs_check_method; shift
9363de2362d3Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9364de2362d3Smrg	  for a_deplib in $deplibs; do
9365de2362d3Smrg	    case $a_deplib in
9366de2362d3Smrg	    -l*)
9367de2362d3Smrg	      func_stripname -l '' "$a_deplib"
9368de2362d3Smrg	      name=$func_stripname_result
93690d16fef4Smrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9370de2362d3Smrg		case " $predeps $postdeps " in
9371de2362d3Smrg		*" $a_deplib "*)
9372de2362d3Smrg		  func_append newdeplibs " $a_deplib"
93730d16fef4Smrg		  a_deplib=
9374de2362d3Smrg		  ;;
9375de2362d3Smrg		esac
9376de2362d3Smrg	      fi
93770d16fef4Smrg	      if test -n "$a_deplib"; then
9378de2362d3Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
9379de2362d3Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9380de2362d3Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
9381de2362d3Smrg		  for potent_lib in $potential_libs; do
93820d16fef4Smrg		    potlib=$potent_lib # see symlink-check above in file_magic test
9383de2362d3Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
9384de2362d3Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
9385de2362d3Smrg		      func_append newdeplibs " $a_deplib"
93860d16fef4Smrg		      a_deplib=
9387de2362d3Smrg		      break 2
9388de2362d3Smrg		    fi
9389de2362d3Smrg		  done
9390de2362d3Smrg		done
9391de2362d3Smrg	      fi
93920d16fef4Smrg	      if test -n "$a_deplib"; then
9393de2362d3Smrg		droppeddeps=yes
9394de2362d3Smrg		echo
9395de2362d3Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
9396de2362d3Smrg		echo "*** I have the capability to make that library automatically link in when"
9397de2362d3Smrg		echo "*** you link to this library.  But I can only do this if you have a"
9398de2362d3Smrg		echo "*** shared version of the library, which you do not appear to have"
9399de2362d3Smrg		echo "*** because I did check the linker path looking for a file starting"
94000d16fef4Smrg		if test -z "$potlib"; then
9401de2362d3Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
9402de2362d3Smrg		else
9403de2362d3Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
9404de2362d3Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
9405de2362d3Smrg		fi
9406de2362d3Smrg	      fi
9407de2362d3Smrg	      ;;
9408de2362d3Smrg	    *)
9409de2362d3Smrg	      # Add a -L argument.
9410de2362d3Smrg	      func_append newdeplibs " $a_deplib"
9411de2362d3Smrg	      ;;
9412de2362d3Smrg	    esac
9413de2362d3Smrg	  done # Gone through all deplibs.
9414de2362d3Smrg	  ;;
9415de2362d3Smrg	none | unknown | *)
94160d16fef4Smrg	  newdeplibs=
9417de2362d3Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
94180d16fef4Smrg	  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
94190d16fef4Smrg	    for i in $predeps $postdeps; do
9420de2362d3Smrg	      # can't use Xsed below, because $i might contain '/'
94210d16fef4Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
9422de2362d3Smrg	    done
9423de2362d3Smrg	  fi
9424de2362d3Smrg	  case $tmp_deplibs in
9425de2362d3Smrg	  *[!\	\ ]*)
9426de2362d3Smrg	    echo
94270d16fef4Smrg	    if test none = "$deplibs_check_method"; then
9428de2362d3Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
9429de2362d3Smrg	    else
9430de2362d3Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
9431de2362d3Smrg	    fi
9432de2362d3Smrg	    echo "*** All declared inter-library dependencies are being dropped."
9433de2362d3Smrg	    droppeddeps=yes
9434de2362d3Smrg	    ;;
9435de2362d3Smrg	  esac
9436de2362d3Smrg	  ;;
9437de2362d3Smrg	esac
9438de2362d3Smrg	versuffix=$versuffix_save
9439de2362d3Smrg	major=$major_save
9440de2362d3Smrg	release=$release_save
9441de2362d3Smrg	libname=$libname_save
9442de2362d3Smrg	name=$name_save
9443de2362d3Smrg
9444de2362d3Smrg	case $host in
9445de2362d3Smrg	*-*-rhapsody* | *-*-darwin1.[012])
9446de2362d3Smrg	  # On Rhapsody replace the C library with the System framework
9447de2362d3Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
9448de2362d3Smrg	  ;;
9449de2362d3Smrg	esac
9450de2362d3Smrg
94510d16fef4Smrg	if test yes = "$droppeddeps"; then
94520d16fef4Smrg	  if test yes = "$module"; then
9453de2362d3Smrg	    echo
9454de2362d3Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
9455de2362d3Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
9456de2362d3Smrg	    echo "*** a static module, that should work as long as the dlopening"
9457de2362d3Smrg	    echo "*** application is linked with the -dlopen flag."
9458de2362d3Smrg	    if test -z "$global_symbol_pipe"; then
9459de2362d3Smrg	      echo
9460de2362d3Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
94610d16fef4Smrg	      echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
9462de2362d3Smrg	      echo "*** not find such a program.  So, this module is probably useless."
94630d16fef4Smrg	      echo "*** 'nm' from GNU binutils and a full rebuild may help."
9464de2362d3Smrg	    fi
94650d16fef4Smrg	    if test no = "$build_old_libs"; then
94660d16fef4Smrg	      oldlibs=$output_objdir/$libname.$libext
9467de2362d3Smrg	      build_libtool_libs=module
9468de2362d3Smrg	      build_old_libs=yes
9469de2362d3Smrg	    else
9470de2362d3Smrg	      build_libtool_libs=no
9471de2362d3Smrg	    fi
9472de2362d3Smrg	  else
9473de2362d3Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
9474de2362d3Smrg	    echo "*** automatically added whenever a program is linked with this library"
9475de2362d3Smrg	    echo "*** or is declared to -dlopen it."
9476de2362d3Smrg
94770d16fef4Smrg	    if test no = "$allow_undefined"; then
9478de2362d3Smrg	      echo
9479de2362d3Smrg	      echo "*** Since this library must not contain undefined symbols,"
9480de2362d3Smrg	      echo "*** because either the platform does not support them or"
9481de2362d3Smrg	      echo "*** it was explicitly requested with -no-undefined,"
9482de2362d3Smrg	      echo "*** libtool will only create a static version of it."
94830d16fef4Smrg	      if test no = "$build_old_libs"; then
94840d16fef4Smrg		oldlibs=$output_objdir/$libname.$libext
9485de2362d3Smrg		build_libtool_libs=module
9486de2362d3Smrg		build_old_libs=yes
9487de2362d3Smrg	      else
9488de2362d3Smrg		build_libtool_libs=no
9489de2362d3Smrg	      fi
9490de2362d3Smrg	    fi
9491de2362d3Smrg	  fi
9492de2362d3Smrg	fi
9493de2362d3Smrg	# Done checking deplibs!
9494de2362d3Smrg	deplibs=$newdeplibs
9495de2362d3Smrg      fi
9496de2362d3Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
9497de2362d3Smrg      case $host in
9498de2362d3Smrg	*-*-darwin*)
9499de2362d3Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9500de2362d3Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9501de2362d3Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9502de2362d3Smrg	  ;;
9503de2362d3Smrg      esac
9504de2362d3Smrg
9505de2362d3Smrg      # move library search paths that coincide with paths to not yet
9506de2362d3Smrg      # installed libraries to the beginning of the library search list
9507de2362d3Smrg      new_libs=
9508de2362d3Smrg      for path in $notinst_path; do
9509de2362d3Smrg	case " $new_libs " in
9510de2362d3Smrg	*" -L$path/$objdir "*) ;;
9511de2362d3Smrg	*)
9512de2362d3Smrg	  case " $deplibs " in
9513de2362d3Smrg	  *" -L$path/$objdir "*)
9514de2362d3Smrg	    func_append new_libs " -L$path/$objdir" ;;
9515de2362d3Smrg	  esac
9516de2362d3Smrg	  ;;
9517de2362d3Smrg	esac
9518de2362d3Smrg      done
9519de2362d3Smrg      for deplib in $deplibs; do
9520de2362d3Smrg	case $deplib in
9521de2362d3Smrg	-L*)
9522de2362d3Smrg	  case " $new_libs " in
9523de2362d3Smrg	  *" $deplib "*) ;;
9524de2362d3Smrg	  *) func_append new_libs " $deplib" ;;
9525de2362d3Smrg	  esac
9526de2362d3Smrg	  ;;
9527de2362d3Smrg	*) func_append new_libs " $deplib" ;;
9528de2362d3Smrg	esac
9529de2362d3Smrg      done
95300d16fef4Smrg      deplibs=$new_libs
9531de2362d3Smrg
9532de2362d3Smrg      # All the library-specific variables (install_libdir is set above).
9533de2362d3Smrg      library_names=
9534de2362d3Smrg      old_library=
9535de2362d3Smrg      dlname=
9536de2362d3Smrg
9537de2362d3Smrg      # Test again, we may have decided not to build it any more
95380d16fef4Smrg      if test yes = "$build_libtool_libs"; then
95390d16fef4Smrg	# Remove $wl instances when linking with ld.
9540de2362d3Smrg	# FIXME: should test the right _cmds variable.
9541de2362d3Smrg	case $archive_cmds in
9542de2362d3Smrg	  *\$LD\ *) wl= ;;
9543de2362d3Smrg        esac
95440d16fef4Smrg	if test yes = "$hardcode_into_libs"; then
9545de2362d3Smrg	  # Hardcode the library paths
9546de2362d3Smrg	  hardcode_libdirs=
9547de2362d3Smrg	  dep_rpath=
95480d16fef4Smrg	  rpath=$finalize_rpath
95490d16fef4Smrg	  test relink = "$opt_mode" || rpath=$compile_rpath$rpath
9550de2362d3Smrg	  for libdir in $rpath; do
9551de2362d3Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
9552de2362d3Smrg	      if test -n "$hardcode_libdir_separator"; then
9553de2362d3Smrg		func_replace_sysroot "$libdir"
9554de2362d3Smrg		libdir=$func_replace_sysroot_result
9555de2362d3Smrg		if test -z "$hardcode_libdirs"; then
95560d16fef4Smrg		  hardcode_libdirs=$libdir
9557de2362d3Smrg		else
9558de2362d3Smrg		  # Just accumulate the unique libdirs.
9559de2362d3Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
9560de2362d3Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
9561de2362d3Smrg		    ;;
9562de2362d3Smrg		  *)
9563de2362d3Smrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
9564de2362d3Smrg		    ;;
9565de2362d3Smrg		  esac
9566de2362d3Smrg		fi
9567de2362d3Smrg	      else
9568de2362d3Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
9569de2362d3Smrg		func_append dep_rpath " $flag"
9570de2362d3Smrg	      fi
9571de2362d3Smrg	    elif test -n "$runpath_var"; then
9572de2362d3Smrg	      case "$perm_rpath " in
9573de2362d3Smrg	      *" $libdir "*) ;;
9574de2362d3Smrg	      *) func_append perm_rpath " $libdir" ;;
9575de2362d3Smrg	      esac
9576de2362d3Smrg	    fi
9577de2362d3Smrg	  done
9578de2362d3Smrg	  # Substitute the hardcoded libdirs into the rpath.
9579de2362d3Smrg	  if test -n "$hardcode_libdir_separator" &&
9580de2362d3Smrg	     test -n "$hardcode_libdirs"; then
95810d16fef4Smrg	    libdir=$hardcode_libdirs
9582de2362d3Smrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
9583de2362d3Smrg	  fi
9584de2362d3Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
9585de2362d3Smrg	    # We should set the runpath_var.
9586de2362d3Smrg	    rpath=
9587de2362d3Smrg	    for dir in $perm_rpath; do
9588de2362d3Smrg	      func_append rpath "$dir:"
9589de2362d3Smrg	    done
9590de2362d3Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
9591de2362d3Smrg	  fi
9592de2362d3Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
9593de2362d3Smrg	fi
9594de2362d3Smrg
95950d16fef4Smrg	shlibpath=$finalize_shlibpath
95960d16fef4Smrg	test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
9597de2362d3Smrg	if test -n "$shlibpath"; then
9598de2362d3Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
9599de2362d3Smrg	fi
9600de2362d3Smrg
9601de2362d3Smrg	# Get the real and link names of the library.
9602de2362d3Smrg	eval shared_ext=\"$shrext_cmds\"
9603de2362d3Smrg	eval library_names=\"$library_names_spec\"
9604de2362d3Smrg	set dummy $library_names
9605de2362d3Smrg	shift
96060d16fef4Smrg	realname=$1
9607de2362d3Smrg	shift
9608de2362d3Smrg
9609de2362d3Smrg	if test -n "$soname_spec"; then
9610de2362d3Smrg	  eval soname=\"$soname_spec\"
9611de2362d3Smrg	else
96120d16fef4Smrg	  soname=$realname
9613de2362d3Smrg	fi
9614de2362d3Smrg	if test -z "$dlname"; then
9615de2362d3Smrg	  dlname=$soname
9616de2362d3Smrg	fi
9617de2362d3Smrg
96180d16fef4Smrg	lib=$output_objdir/$realname
9619de2362d3Smrg	linknames=
9620de2362d3Smrg	for link
9621de2362d3Smrg	do
9622de2362d3Smrg	  func_append linknames " $link"
9623de2362d3Smrg	done
9624de2362d3Smrg
9625de2362d3Smrg	# Use standard objects if they are pic
9626de2362d3Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
9627de2362d3Smrg	test "X$libobjs" = "X " && libobjs=
9628de2362d3Smrg
9629de2362d3Smrg	delfiles=
9630de2362d3Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
9631de2362d3Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
96320d16fef4Smrg	  export_symbols=$output_objdir/$libname.uexp
9633de2362d3Smrg	  func_append delfiles " $export_symbols"
9634de2362d3Smrg	fi
9635de2362d3Smrg
9636de2362d3Smrg	orig_export_symbols=
9637de2362d3Smrg	case $host_os in
9638de2362d3Smrg	cygwin* | mingw* | cegcc*)
9639de2362d3Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
9640de2362d3Smrg	    # exporting using user supplied symfile
96410d16fef4Smrg	    func_dll_def_p "$export_symbols" || {
9642de2362d3Smrg	      # and it's NOT already a .def file. Must figure out
9643de2362d3Smrg	      # which of the given symbols are data symbols and tag
9644de2362d3Smrg	      # them as such. So, trigger use of export_symbols_cmds.
9645de2362d3Smrg	      # export_symbols gets reassigned inside the "prepare
9646de2362d3Smrg	      # the list of exported symbols" if statement, so the
9647de2362d3Smrg	      # include_expsyms logic still works.
96480d16fef4Smrg	      orig_export_symbols=$export_symbols
9649de2362d3Smrg	      export_symbols=
9650de2362d3Smrg	      always_export_symbols=yes
96510d16fef4Smrg	    }
9652de2362d3Smrg	  fi
9653de2362d3Smrg	  ;;
9654de2362d3Smrg	esac
9655de2362d3Smrg
9656de2362d3Smrg	# Prepare the list of exported symbols
9657de2362d3Smrg	if test -z "$export_symbols"; then
96580d16fef4Smrg	  if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
96590d16fef4Smrg	    func_verbose "generating symbol list for '$libname.la'"
96600d16fef4Smrg	    export_symbols=$output_objdir/$libname.exp
9661de2362d3Smrg	    $opt_dry_run || $RM $export_symbols
9662de2362d3Smrg	    cmds=$export_symbols_cmds
96630d16fef4Smrg	    save_ifs=$IFS; IFS='~'
9664de2362d3Smrg	    for cmd1 in $cmds; do
96650d16fef4Smrg	      IFS=$save_ifs
9666de2362d3Smrg	      # Take the normal branch if the nm_file_list_spec branch
9667de2362d3Smrg	      # doesn't work or if tool conversion is not needed.
9668de2362d3Smrg	      case $nm_file_list_spec~$to_tool_file_cmd in
9669de2362d3Smrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
9670de2362d3Smrg		  try_normal_branch=yes
9671de2362d3Smrg		  eval cmd=\"$cmd1\"
9672de2362d3Smrg		  func_len " $cmd"
9673de2362d3Smrg		  len=$func_len_result
9674de2362d3Smrg		  ;;
9675de2362d3Smrg		*)
9676de2362d3Smrg		  try_normal_branch=no
9677de2362d3Smrg		  ;;
9678de2362d3Smrg	      esac
96790d16fef4Smrg	      if test yes = "$try_normal_branch" \
9680de2362d3Smrg		 && { test "$len" -lt "$max_cmd_len" \
9681de2362d3Smrg		      || test "$max_cmd_len" -le -1; }
9682de2362d3Smrg	      then
9683de2362d3Smrg		func_show_eval "$cmd" 'exit $?'
9684de2362d3Smrg		skipped_export=false
9685de2362d3Smrg	      elif test -n "$nm_file_list_spec"; then
9686de2362d3Smrg		func_basename "$output"
9687de2362d3Smrg		output_la=$func_basename_result
9688de2362d3Smrg		save_libobjs=$libobjs
9689de2362d3Smrg		save_output=$output
96900d16fef4Smrg		output=$output_objdir/$output_la.nm
9691de2362d3Smrg		func_to_tool_file "$output"
9692de2362d3Smrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
9693de2362d3Smrg		func_append delfiles " $output"
9694de2362d3Smrg		func_verbose "creating $NM input file list: $output"
9695de2362d3Smrg		for obj in $save_libobjs; do
9696de2362d3Smrg		  func_to_tool_file "$obj"
9697de2362d3Smrg		  $ECHO "$func_to_tool_file_result"
9698de2362d3Smrg		done > "$output"
9699de2362d3Smrg		eval cmd=\"$cmd1\"
9700de2362d3Smrg		func_show_eval "$cmd" 'exit $?'
9701de2362d3Smrg		output=$save_output
9702de2362d3Smrg		libobjs=$save_libobjs
9703de2362d3Smrg		skipped_export=false
9704de2362d3Smrg	      else
9705de2362d3Smrg		# The command line is too long to execute in one step.
9706de2362d3Smrg		func_verbose "using reloadable object file for export list..."
9707de2362d3Smrg		skipped_export=:
9708de2362d3Smrg		# Break out early, otherwise skipped_export may be
9709de2362d3Smrg		# set to false by a later but shorter cmd.
9710de2362d3Smrg		break
9711de2362d3Smrg	      fi
9712de2362d3Smrg	    done
97130d16fef4Smrg	    IFS=$save_ifs
97140d16fef4Smrg	    if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
9715de2362d3Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
9716de2362d3Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
9717de2362d3Smrg	    fi
9718de2362d3Smrg	  fi
9719de2362d3Smrg	fi
9720de2362d3Smrg
9721de2362d3Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
97220d16fef4Smrg	  tmp_export_symbols=$export_symbols
97230d16fef4Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
9724de2362d3Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
9725de2362d3Smrg	fi
9726de2362d3Smrg
97270d16fef4Smrg	if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
9728de2362d3Smrg	  # The given exports_symbols file has to be filtered, so filter it.
97290d16fef4Smrg	  func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
9730de2362d3Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
97310d16fef4Smrg	  # 's' commands, which not all seds can handle. GNU sed should be fine
9732de2362d3Smrg	  # though. Also, the filter scales superlinearly with the number of
9733de2362d3Smrg	  # global variables. join(1) would be nice here, but unfortunately
9734de2362d3Smrg	  # isn't a blessed tool.
9735de2362d3Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
9736de2362d3Smrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
9737de2362d3Smrg	  export_symbols=$output_objdir/$libname.def
9738de2362d3Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
9739de2362d3Smrg	fi
9740de2362d3Smrg
9741de2362d3Smrg	tmp_deplibs=
9742de2362d3Smrg	for test_deplib in $deplibs; do
9743de2362d3Smrg	  case " $convenience " in
9744de2362d3Smrg	  *" $test_deplib "*) ;;
9745de2362d3Smrg	  *)
9746de2362d3Smrg	    func_append tmp_deplibs " $test_deplib"
9747de2362d3Smrg	    ;;
9748de2362d3Smrg	  esac
9749de2362d3Smrg	done
97500d16fef4Smrg	deplibs=$tmp_deplibs
9751de2362d3Smrg
9752de2362d3Smrg	if test -n "$convenience"; then
9753de2362d3Smrg	  if test -n "$whole_archive_flag_spec" &&
97540d16fef4Smrg	    test yes = "$compiler_needs_object" &&
9755de2362d3Smrg	    test -z "$libobjs"; then
9756de2362d3Smrg	    # extract the archives, so we have objects to list.
9757de2362d3Smrg	    # TODO: could optimize this to just extract one archive.
9758de2362d3Smrg	    whole_archive_flag_spec=
9759de2362d3Smrg	  fi
9760de2362d3Smrg	  if test -n "$whole_archive_flag_spec"; then
9761de2362d3Smrg	    save_libobjs=$libobjs
9762de2362d3Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
9763de2362d3Smrg	    test "X$libobjs" = "X " && libobjs=
9764de2362d3Smrg	  else
97650d16fef4Smrg	    gentop=$output_objdir/${outputname}x
9766de2362d3Smrg	    func_append generated " $gentop"
9767de2362d3Smrg
9768de2362d3Smrg	    func_extract_archives $gentop $convenience
9769de2362d3Smrg	    func_append libobjs " $func_extract_archives_result"
9770de2362d3Smrg	    test "X$libobjs" = "X " && libobjs=
9771de2362d3Smrg	  fi
9772de2362d3Smrg	fi
9773de2362d3Smrg
97740d16fef4Smrg	if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
9775de2362d3Smrg	  eval flag=\"$thread_safe_flag_spec\"
9776de2362d3Smrg	  func_append linker_flags " $flag"
9777de2362d3Smrg	fi
9778de2362d3Smrg
9779de2362d3Smrg	# Make a backup of the uninstalled library when relinking
97800d16fef4Smrg	if test relink = "$opt_mode"; then
9781de2362d3Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
9782de2362d3Smrg	fi
9783de2362d3Smrg
9784de2362d3Smrg	# Do each of the archive commands.
97850d16fef4Smrg	if test yes = "$module" && test -n "$module_cmds"; then
9786de2362d3Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
9787de2362d3Smrg	    eval test_cmds=\"$module_expsym_cmds\"
9788de2362d3Smrg	    cmds=$module_expsym_cmds
9789de2362d3Smrg	  else
9790de2362d3Smrg	    eval test_cmds=\"$module_cmds\"
9791de2362d3Smrg	    cmds=$module_cmds
9792de2362d3Smrg	  fi
9793de2362d3Smrg	else
9794de2362d3Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
9795de2362d3Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
9796de2362d3Smrg	    cmds=$archive_expsym_cmds
9797de2362d3Smrg	  else
9798de2362d3Smrg	    eval test_cmds=\"$archive_cmds\"
9799de2362d3Smrg	    cmds=$archive_cmds
9800de2362d3Smrg	  fi
9801de2362d3Smrg	fi
9802de2362d3Smrg
98030d16fef4Smrg	if test : != "$skipped_export" &&
9804de2362d3Smrg	   func_len " $test_cmds" &&
9805de2362d3Smrg	   len=$func_len_result &&
9806de2362d3Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9807de2362d3Smrg	  :
9808de2362d3Smrg	else
9809de2362d3Smrg	  # The command line is too long to link in one step, link piecewise
9810de2362d3Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
9811de2362d3Smrg	  # script.
9812de2362d3Smrg
9813de2362d3Smrg	  # Save the value of $output and $libobjs because we want to
9814de2362d3Smrg	  # use them later.  If we have whole_archive_flag_spec, we
9815de2362d3Smrg	  # want to use save_libobjs as it was before
9816de2362d3Smrg	  # whole_archive_flag_spec was expanded, because we can't
9817de2362d3Smrg	  # assume the linker understands whole_archive_flag_spec.
9818de2362d3Smrg	  # This may have to be revisited, in case too many
9819de2362d3Smrg	  # convenience libraries get linked in and end up exceeding
9820de2362d3Smrg	  # the spec.
9821de2362d3Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
9822de2362d3Smrg	    save_libobjs=$libobjs
9823de2362d3Smrg	  fi
9824de2362d3Smrg	  save_output=$output
9825de2362d3Smrg	  func_basename "$output"
9826de2362d3Smrg	  output_la=$func_basename_result
9827de2362d3Smrg
9828de2362d3Smrg	  # Clear the reloadable object creation command queue and
9829de2362d3Smrg	  # initialize k to one.
9830de2362d3Smrg	  test_cmds=
9831de2362d3Smrg	  concat_cmds=
9832de2362d3Smrg	  objlist=
9833de2362d3Smrg	  last_robj=
9834de2362d3Smrg	  k=1
9835de2362d3Smrg
98360d16fef4Smrg	  if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
98370d16fef4Smrg	    output=$output_objdir/$output_la.lnkscript
9838de2362d3Smrg	    func_verbose "creating GNU ld script: $output"
9839de2362d3Smrg	    echo 'INPUT (' > $output
9840de2362d3Smrg	    for obj in $save_libobjs
9841de2362d3Smrg	    do
9842de2362d3Smrg	      func_to_tool_file "$obj"
9843de2362d3Smrg	      $ECHO "$func_to_tool_file_result" >> $output
9844de2362d3Smrg	    done
9845de2362d3Smrg	    echo ')' >> $output
9846de2362d3Smrg	    func_append delfiles " $output"
9847de2362d3Smrg	    func_to_tool_file "$output"
9848de2362d3Smrg	    output=$func_to_tool_file_result
98490d16fef4Smrg	  elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
98500d16fef4Smrg	    output=$output_objdir/$output_la.lnk
9851de2362d3Smrg	    func_verbose "creating linker input file list: $output"
9852de2362d3Smrg	    : > $output
9853de2362d3Smrg	    set x $save_libobjs
9854de2362d3Smrg	    shift
9855de2362d3Smrg	    firstobj=
98560d16fef4Smrg	    if test yes = "$compiler_needs_object"; then
9857de2362d3Smrg	      firstobj="$1 "
9858de2362d3Smrg	      shift
9859de2362d3Smrg	    fi
9860de2362d3Smrg	    for obj
9861de2362d3Smrg	    do
9862de2362d3Smrg	      func_to_tool_file "$obj"
9863de2362d3Smrg	      $ECHO "$func_to_tool_file_result" >> $output
9864de2362d3Smrg	    done
9865de2362d3Smrg	    func_append delfiles " $output"
9866de2362d3Smrg	    func_to_tool_file "$output"
9867de2362d3Smrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
9868de2362d3Smrg	  else
9869de2362d3Smrg	    if test -n "$save_libobjs"; then
9870de2362d3Smrg	      func_verbose "creating reloadable object files..."
98710d16fef4Smrg	      output=$output_objdir/$output_la-$k.$objext
9872de2362d3Smrg	      eval test_cmds=\"$reload_cmds\"
9873de2362d3Smrg	      func_len " $test_cmds"
9874de2362d3Smrg	      len0=$func_len_result
9875de2362d3Smrg	      len=$len0
9876de2362d3Smrg
9877de2362d3Smrg	      # Loop over the list of objects to be linked.
9878de2362d3Smrg	      for obj in $save_libobjs
9879de2362d3Smrg	      do
9880de2362d3Smrg		func_len " $obj"
9881de2362d3Smrg		func_arith $len + $func_len_result
9882de2362d3Smrg		len=$func_arith_result
98830d16fef4Smrg		if test -z "$objlist" ||
9884de2362d3Smrg		   test "$len" -lt "$max_cmd_len"; then
9885de2362d3Smrg		  func_append objlist " $obj"
9886de2362d3Smrg		else
9887de2362d3Smrg		  # The command $test_cmds is almost too long, add a
9888de2362d3Smrg		  # command to the queue.
98890d16fef4Smrg		  if test 1 -eq "$k"; then
9890de2362d3Smrg		    # The first file doesn't have a previous command to add.
9891de2362d3Smrg		    reload_objs=$objlist
9892de2362d3Smrg		    eval concat_cmds=\"$reload_cmds\"
9893de2362d3Smrg		  else
9894de2362d3Smrg		    # All subsequent reloadable object files will link in
9895de2362d3Smrg		    # the last one created.
9896de2362d3Smrg		    reload_objs="$objlist $last_robj"
9897de2362d3Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
9898de2362d3Smrg		  fi
98990d16fef4Smrg		  last_robj=$output_objdir/$output_la-$k.$objext
9900de2362d3Smrg		  func_arith $k + 1
9901de2362d3Smrg		  k=$func_arith_result
99020d16fef4Smrg		  output=$output_objdir/$output_la-$k.$objext
9903de2362d3Smrg		  objlist=" $obj"
9904de2362d3Smrg		  func_len " $last_robj"
9905de2362d3Smrg		  func_arith $len0 + $func_len_result
9906de2362d3Smrg		  len=$func_arith_result
9907de2362d3Smrg		fi
9908de2362d3Smrg	      done
9909de2362d3Smrg	      # Handle the remaining objects by creating one last
9910de2362d3Smrg	      # reloadable object file.  All subsequent reloadable object
9911de2362d3Smrg	      # files will link in the last one created.
9912de2362d3Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9913de2362d3Smrg	      reload_objs="$objlist $last_robj"
99140d16fef4Smrg	      eval concat_cmds=\"\$concat_cmds$reload_cmds\"
9915de2362d3Smrg	      if test -n "$last_robj"; then
99160d16fef4Smrg	        eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
9917de2362d3Smrg	      fi
9918de2362d3Smrg	      func_append delfiles " $output"
9919de2362d3Smrg
9920de2362d3Smrg	    else
9921de2362d3Smrg	      output=
9922de2362d3Smrg	    fi
9923de2362d3Smrg
99240d16fef4Smrg	    ${skipped_export-false} && {
99250d16fef4Smrg	      func_verbose "generating symbol list for '$libname.la'"
99260d16fef4Smrg	      export_symbols=$output_objdir/$libname.exp
9927de2362d3Smrg	      $opt_dry_run || $RM $export_symbols
9928de2362d3Smrg	      libobjs=$output
9929de2362d3Smrg	      # Append the command to create the export file.
9930de2362d3Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9931de2362d3Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
9932de2362d3Smrg	      if test -n "$last_robj"; then
9933de2362d3Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
9934de2362d3Smrg	      fi
99350d16fef4Smrg	    }
9936de2362d3Smrg
9937de2362d3Smrg	    test -n "$save_libobjs" &&
9938de2362d3Smrg	      func_verbose "creating a temporary reloadable object file: $output"
9939de2362d3Smrg
9940de2362d3Smrg	    # Loop through the commands generated above and execute them.
99410d16fef4Smrg	    save_ifs=$IFS; IFS='~'
9942de2362d3Smrg	    for cmd in $concat_cmds; do
99430d16fef4Smrg	      IFS=$save_ifs
99440d16fef4Smrg	      $opt_quiet || {
9945de2362d3Smrg		  func_quote_for_expand "$cmd"
9946de2362d3Smrg		  eval "func_echo $func_quote_for_expand_result"
9947de2362d3Smrg	      }
9948de2362d3Smrg	      $opt_dry_run || eval "$cmd" || {
9949de2362d3Smrg		lt_exit=$?
9950de2362d3Smrg
9951de2362d3Smrg		# Restore the uninstalled library and exit
99520d16fef4Smrg		if test relink = "$opt_mode"; then
9953de2362d3Smrg		  ( cd "$output_objdir" && \
9954de2362d3Smrg		    $RM "${realname}T" && \
9955de2362d3Smrg		    $MV "${realname}U" "$realname" )
9956de2362d3Smrg		fi
9957de2362d3Smrg
9958de2362d3Smrg		exit $lt_exit
9959de2362d3Smrg	      }
9960de2362d3Smrg	    done
99610d16fef4Smrg	    IFS=$save_ifs
9962de2362d3Smrg
9963de2362d3Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
9964de2362d3Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
9965de2362d3Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
9966de2362d3Smrg	    fi
9967de2362d3Smrg	  fi
9968de2362d3Smrg
99690d16fef4Smrg          ${skipped_export-false} && {
9970de2362d3Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
99710d16fef4Smrg	      tmp_export_symbols=$export_symbols
99720d16fef4Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
9973de2362d3Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
9974de2362d3Smrg	    fi
9975de2362d3Smrg
9976de2362d3Smrg	    if test -n "$orig_export_symbols"; then
9977de2362d3Smrg	      # The given exports_symbols file has to be filtered, so filter it.
99780d16fef4Smrg	      func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
9979de2362d3Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
99800d16fef4Smrg	      # 's' commands, which not all seds can handle. GNU sed should be fine
9981de2362d3Smrg	      # though. Also, the filter scales superlinearly with the number of
9982de2362d3Smrg	      # global variables. join(1) would be nice here, but unfortunately
9983de2362d3Smrg	      # isn't a blessed tool.
9984de2362d3Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
9985de2362d3Smrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
9986de2362d3Smrg	      export_symbols=$output_objdir/$libname.def
9987de2362d3Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
9988de2362d3Smrg	    fi
99890d16fef4Smrg	  }
9990de2362d3Smrg
9991de2362d3Smrg	  libobjs=$output
9992de2362d3Smrg	  # Restore the value of output.
9993de2362d3Smrg	  output=$save_output
9994de2362d3Smrg
9995de2362d3Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
9996de2362d3Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
9997de2362d3Smrg	    test "X$libobjs" = "X " && libobjs=
9998de2362d3Smrg	  fi
9999de2362d3Smrg	  # Expand the library linking commands again to reset the
10000de2362d3Smrg	  # value of $libobjs for piecewise linking.
10001de2362d3Smrg
10002de2362d3Smrg	  # Do each of the archive commands.
100030d16fef4Smrg	  if test yes = "$module" && test -n "$module_cmds"; then
10004de2362d3Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
10005de2362d3Smrg	      cmds=$module_expsym_cmds
10006de2362d3Smrg	    else
10007de2362d3Smrg	      cmds=$module_cmds
10008de2362d3Smrg	    fi
10009de2362d3Smrg	  else
10010de2362d3Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10011de2362d3Smrg	      cmds=$archive_expsym_cmds
10012de2362d3Smrg	    else
10013de2362d3Smrg	      cmds=$archive_cmds
10014de2362d3Smrg	    fi
10015de2362d3Smrg	  fi
10016de2362d3Smrg	fi
10017de2362d3Smrg
10018de2362d3Smrg	if test -n "$delfiles"; then
10019de2362d3Smrg	  # Append the command to remove temporary files to $cmds.
10020de2362d3Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
10021de2362d3Smrg	fi
10022de2362d3Smrg
10023de2362d3Smrg	# Add any objects from preloaded convenience libraries
10024de2362d3Smrg	if test -n "$dlprefiles"; then
100250d16fef4Smrg	  gentop=$output_objdir/${outputname}x
10026de2362d3Smrg	  func_append generated " $gentop"
10027de2362d3Smrg
10028de2362d3Smrg	  func_extract_archives $gentop $dlprefiles
10029de2362d3Smrg	  func_append libobjs " $func_extract_archives_result"
10030de2362d3Smrg	  test "X$libobjs" = "X " && libobjs=
10031de2362d3Smrg	fi
10032de2362d3Smrg
100330d16fef4Smrg	save_ifs=$IFS; IFS='~'
10034de2362d3Smrg	for cmd in $cmds; do
100350d16fef4Smrg	  IFS=$sp$nl
10036de2362d3Smrg	  eval cmd=\"$cmd\"
100370d16fef4Smrg	  IFS=$save_ifs
100380d16fef4Smrg	  $opt_quiet || {
10039de2362d3Smrg	    func_quote_for_expand "$cmd"
10040de2362d3Smrg	    eval "func_echo $func_quote_for_expand_result"
10041de2362d3Smrg	  }
10042de2362d3Smrg	  $opt_dry_run || eval "$cmd" || {
10043de2362d3Smrg	    lt_exit=$?
10044de2362d3Smrg
10045de2362d3Smrg	    # Restore the uninstalled library and exit
100460d16fef4Smrg	    if test relink = "$opt_mode"; then
10047de2362d3Smrg	      ( cd "$output_objdir" && \
10048de2362d3Smrg	        $RM "${realname}T" && \
10049de2362d3Smrg		$MV "${realname}U" "$realname" )
10050de2362d3Smrg	    fi
10051de2362d3Smrg
10052de2362d3Smrg	    exit $lt_exit
10053de2362d3Smrg	  }
10054de2362d3Smrg	done
100550d16fef4Smrg	IFS=$save_ifs
10056de2362d3Smrg
10057de2362d3Smrg	# Restore the uninstalled library and exit
100580d16fef4Smrg	if test relink = "$opt_mode"; then
10059de2362d3Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
10060de2362d3Smrg
10061de2362d3Smrg	  if test -n "$convenience"; then
10062de2362d3Smrg	    if test -z "$whole_archive_flag_spec"; then
10063de2362d3Smrg	      func_show_eval '${RM}r "$gentop"'
10064de2362d3Smrg	    fi
10065de2362d3Smrg	  fi
10066de2362d3Smrg
10067de2362d3Smrg	  exit $EXIT_SUCCESS
10068de2362d3Smrg	fi
10069de2362d3Smrg
10070de2362d3Smrg	# Create links to the real library.
10071de2362d3Smrg	for linkname in $linknames; do
10072de2362d3Smrg	  if test "$realname" != "$linkname"; then
10073de2362d3Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
10074de2362d3Smrg	  fi
10075de2362d3Smrg	done
10076de2362d3Smrg
10077de2362d3Smrg	# If -module or -export-dynamic was specified, set the dlname.
100780d16fef4Smrg	if test yes = "$module" || test yes = "$export_dynamic"; then
10079de2362d3Smrg	  # On all known operating systems, these are identical.
100800d16fef4Smrg	  dlname=$soname
10081de2362d3Smrg	fi
10082de2362d3Smrg      fi
10083de2362d3Smrg      ;;
10084de2362d3Smrg
10085de2362d3Smrg    obj)
100860d16fef4Smrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
100870d16fef4Smrg	func_warning "'-dlopen' is ignored for objects"
10088de2362d3Smrg      fi
10089de2362d3Smrg
10090de2362d3Smrg      case " $deplibs" in
10091de2362d3Smrg      *\ -l* | *\ -L*)
100920d16fef4Smrg	func_warning "'-l' and '-L' are ignored for objects" ;;
10093de2362d3Smrg      esac
10094de2362d3Smrg
10095de2362d3Smrg      test -n "$rpath" && \
100960d16fef4Smrg	func_warning "'-rpath' is ignored for objects"
10097de2362d3Smrg
10098de2362d3Smrg      test -n "$xrpath" && \
100990d16fef4Smrg	func_warning "'-R' is ignored for objects"
10100de2362d3Smrg
10101de2362d3Smrg      test -n "$vinfo" && \
101020d16fef4Smrg	func_warning "'-version-info' is ignored for objects"
10103de2362d3Smrg
10104de2362d3Smrg      test -n "$release" && \
101050d16fef4Smrg	func_warning "'-release' is ignored for objects"
10106de2362d3Smrg
10107de2362d3Smrg      case $output in
10108de2362d3Smrg      *.lo)
10109de2362d3Smrg	test -n "$objs$old_deplibs" && \
101100d16fef4Smrg	  func_fatal_error "cannot build library object '$output' from non-libtool objects"
10111de2362d3Smrg
10112de2362d3Smrg	libobj=$output
10113de2362d3Smrg	func_lo2o "$libobj"
10114de2362d3Smrg	obj=$func_lo2o_result
10115de2362d3Smrg	;;
10116de2362d3Smrg      *)
10117de2362d3Smrg	libobj=
101180d16fef4Smrg	obj=$output
10119de2362d3Smrg	;;
10120de2362d3Smrg      esac
10121de2362d3Smrg
10122de2362d3Smrg      # Delete the old objects.
10123de2362d3Smrg      $opt_dry_run || $RM $obj $libobj
10124de2362d3Smrg
10125de2362d3Smrg      # Objects from convenience libraries.  This assumes
10126de2362d3Smrg      # single-version convenience libraries.  Whenever we create
10127de2362d3Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
10128de2362d3Smrg      # the extraction.
10129de2362d3Smrg      reload_conv_objs=
10130de2362d3Smrg      gentop=
101310d16fef4Smrg      # if reload_cmds runs $LD directly, get rid of -Wl from
101320d16fef4Smrg      # whole_archive_flag_spec and hope we can get by with turning comma
101330d16fef4Smrg      # into space.
101340d16fef4Smrg      case $reload_cmds in
101350d16fef4Smrg        *\$LD[\ \$]*) wl= ;;
101360d16fef4Smrg      esac
10137de2362d3Smrg      if test -n "$convenience"; then
10138de2362d3Smrg	if test -n "$whole_archive_flag_spec"; then
10139de2362d3Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
101400d16fef4Smrg	  test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
101410d16fef4Smrg	  reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
10142de2362d3Smrg	else
101430d16fef4Smrg	  gentop=$output_objdir/${obj}x
10144de2362d3Smrg	  func_append generated " $gentop"
10145de2362d3Smrg
10146de2362d3Smrg	  func_extract_archives $gentop $convenience
10147de2362d3Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
10148de2362d3Smrg	fi
10149de2362d3Smrg      fi
10150de2362d3Smrg
10151de2362d3Smrg      # If we're not building shared, we need to use non_pic_objs
101520d16fef4Smrg      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
10153de2362d3Smrg
10154de2362d3Smrg      # Create the old-style object.
101550d16fef4Smrg      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
10156de2362d3Smrg
101570d16fef4Smrg      output=$obj
10158de2362d3Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
10159de2362d3Smrg
10160de2362d3Smrg      # Exit if we aren't doing a library object file.
10161de2362d3Smrg      if test -z "$libobj"; then
10162de2362d3Smrg	if test -n "$gentop"; then
10163de2362d3Smrg	  func_show_eval '${RM}r "$gentop"'
10164de2362d3Smrg	fi
10165de2362d3Smrg
10166de2362d3Smrg	exit $EXIT_SUCCESS
10167de2362d3Smrg      fi
10168de2362d3Smrg
101690d16fef4Smrg      test yes = "$build_libtool_libs" || {
10170de2362d3Smrg	if test -n "$gentop"; then
10171de2362d3Smrg	  func_show_eval '${RM}r "$gentop"'
10172de2362d3Smrg	fi
10173de2362d3Smrg
10174de2362d3Smrg	# Create an invalid libtool object if no PIC, so that we don't
10175de2362d3Smrg	# accidentally link it into a program.
10176de2362d3Smrg	# $show "echo timestamp > $libobj"
10177de2362d3Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
10178de2362d3Smrg	exit $EXIT_SUCCESS
101790d16fef4Smrg      }
10180de2362d3Smrg
101810d16fef4Smrg      if test -n "$pic_flag" || test default != "$pic_mode"; then
10182de2362d3Smrg	# Only do commands if we really have different PIC objects.
10183de2362d3Smrg	reload_objs="$libobjs $reload_conv_objs"
101840d16fef4Smrg	output=$libobj
10185de2362d3Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
10186de2362d3Smrg      fi
10187de2362d3Smrg
10188de2362d3Smrg      if test -n "$gentop"; then
10189de2362d3Smrg	func_show_eval '${RM}r "$gentop"'
10190de2362d3Smrg      fi
10191de2362d3Smrg
10192de2362d3Smrg      exit $EXIT_SUCCESS
10193de2362d3Smrg      ;;
10194de2362d3Smrg
10195de2362d3Smrg    prog)
10196de2362d3Smrg      case $host in
10197de2362d3Smrg	*cygwin*) func_stripname '' '.exe' "$output"
10198de2362d3Smrg	          output=$func_stripname_result.exe;;
10199de2362d3Smrg      esac
10200de2362d3Smrg      test -n "$vinfo" && \
102010d16fef4Smrg	func_warning "'-version-info' is ignored for programs"
10202de2362d3Smrg
10203de2362d3Smrg      test -n "$release" && \
102040d16fef4Smrg	func_warning "'-release' is ignored for programs"
10205de2362d3Smrg
102060d16fef4Smrg      $preload \
102070d16fef4Smrg	&& test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
102080d16fef4Smrg	&& func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
10209de2362d3Smrg
10210de2362d3Smrg      case $host in
10211de2362d3Smrg      *-*-rhapsody* | *-*-darwin1.[012])
10212de2362d3Smrg	# On Rhapsody replace the C library is the System framework
10213de2362d3Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
10214de2362d3Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
10215de2362d3Smrg	;;
10216de2362d3Smrg      esac
10217de2362d3Smrg
10218de2362d3Smrg      case $host in
10219de2362d3Smrg      *-*-darwin*)
10220de2362d3Smrg	# Don't allow lazy linking, it breaks C++ global constructors
10221de2362d3Smrg	# But is supposedly fixed on 10.4 or later (yay!).
102220d16fef4Smrg	if test CXX = "$tagname"; then
10223de2362d3Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
10224de2362d3Smrg	    10.[0123])
102250d16fef4Smrg	      func_append compile_command " $wl-bind_at_load"
102260d16fef4Smrg	      func_append finalize_command " $wl-bind_at_load"
10227de2362d3Smrg	    ;;
10228de2362d3Smrg	  esac
10229de2362d3Smrg	fi
10230de2362d3Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
10231de2362d3Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10232de2362d3Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10233de2362d3Smrg	;;
10234de2362d3Smrg      esac
10235de2362d3Smrg
10236de2362d3Smrg
10237de2362d3Smrg      # move library search paths that coincide with paths to not yet
10238de2362d3Smrg      # installed libraries to the beginning of the library search list
10239de2362d3Smrg      new_libs=
10240de2362d3Smrg      for path in $notinst_path; do
10241de2362d3Smrg	case " $new_libs " in
10242de2362d3Smrg	*" -L$path/$objdir "*) ;;
10243de2362d3Smrg	*)
10244de2362d3Smrg	  case " $compile_deplibs " in
10245de2362d3Smrg	  *" -L$path/$objdir "*)
10246de2362d3Smrg	    func_append new_libs " -L$path/$objdir" ;;
10247de2362d3Smrg	  esac
10248de2362d3Smrg	  ;;
10249de2362d3Smrg	esac
10250de2362d3Smrg      done
10251de2362d3Smrg      for deplib in $compile_deplibs; do
10252de2362d3Smrg	case $deplib in
10253de2362d3Smrg	-L*)
10254de2362d3Smrg	  case " $new_libs " in
10255de2362d3Smrg	  *" $deplib "*) ;;
10256de2362d3Smrg	  *) func_append new_libs " $deplib" ;;
10257de2362d3Smrg	  esac
10258de2362d3Smrg	  ;;
10259de2362d3Smrg	*) func_append new_libs " $deplib" ;;
10260de2362d3Smrg	esac
10261de2362d3Smrg      done
102620d16fef4Smrg      compile_deplibs=$new_libs
10263de2362d3Smrg
10264de2362d3Smrg
10265de2362d3Smrg      func_append compile_command " $compile_deplibs"
10266de2362d3Smrg      func_append finalize_command " $finalize_deplibs"
10267de2362d3Smrg
10268de2362d3Smrg      if test -n "$rpath$xrpath"; then
10269de2362d3Smrg	# If the user specified any rpath flags, then add them.
10270de2362d3Smrg	for libdir in $rpath $xrpath; do
10271de2362d3Smrg	  # This is the magic to use -rpath.
10272de2362d3Smrg	  case "$finalize_rpath " in
10273de2362d3Smrg	  *" $libdir "*) ;;
10274de2362d3Smrg	  *) func_append finalize_rpath " $libdir" ;;
10275de2362d3Smrg	  esac
10276de2362d3Smrg	done
10277de2362d3Smrg      fi
10278de2362d3Smrg
10279de2362d3Smrg      # Now hardcode the library paths
10280de2362d3Smrg      rpath=
10281de2362d3Smrg      hardcode_libdirs=
10282de2362d3Smrg      for libdir in $compile_rpath $finalize_rpath; do
10283de2362d3Smrg	if test -n "$hardcode_libdir_flag_spec"; then
10284de2362d3Smrg	  if test -n "$hardcode_libdir_separator"; then
10285de2362d3Smrg	    if test -z "$hardcode_libdirs"; then
102860d16fef4Smrg	      hardcode_libdirs=$libdir
10287de2362d3Smrg	    else
10288de2362d3Smrg	      # Just accumulate the unique libdirs.
10289de2362d3Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10290de2362d3Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10291de2362d3Smrg		;;
10292de2362d3Smrg	      *)
10293de2362d3Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10294de2362d3Smrg		;;
10295de2362d3Smrg	      esac
10296de2362d3Smrg	    fi
10297de2362d3Smrg	  else
10298de2362d3Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
10299de2362d3Smrg	    func_append rpath " $flag"
10300de2362d3Smrg	  fi
10301de2362d3Smrg	elif test -n "$runpath_var"; then
10302de2362d3Smrg	  case "$perm_rpath " in
10303de2362d3Smrg	  *" $libdir "*) ;;
10304de2362d3Smrg	  *) func_append perm_rpath " $libdir" ;;
10305de2362d3Smrg	  esac
10306de2362d3Smrg	fi
10307de2362d3Smrg	case $host in
10308de2362d3Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
103090d16fef4Smrg	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
10310de2362d3Smrg	  case :$dllsearchpath: in
10311de2362d3Smrg	  *":$libdir:"*) ;;
10312de2362d3Smrg	  ::) dllsearchpath=$libdir;;
10313de2362d3Smrg	  *) func_append dllsearchpath ":$libdir";;
10314de2362d3Smrg	  esac
10315de2362d3Smrg	  case :$dllsearchpath: in
10316de2362d3Smrg	  *":$testbindir:"*) ;;
10317de2362d3Smrg	  ::) dllsearchpath=$testbindir;;
10318de2362d3Smrg	  *) func_append dllsearchpath ":$testbindir";;
10319de2362d3Smrg	  esac
10320de2362d3Smrg	  ;;
10321de2362d3Smrg	esac
10322de2362d3Smrg      done
10323de2362d3Smrg      # Substitute the hardcoded libdirs into the rpath.
10324de2362d3Smrg      if test -n "$hardcode_libdir_separator" &&
10325de2362d3Smrg	 test -n "$hardcode_libdirs"; then
103260d16fef4Smrg	libdir=$hardcode_libdirs
10327de2362d3Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
10328de2362d3Smrg      fi
103290d16fef4Smrg      compile_rpath=$rpath
10330de2362d3Smrg
10331de2362d3Smrg      rpath=
10332de2362d3Smrg      hardcode_libdirs=
10333de2362d3Smrg      for libdir in $finalize_rpath; do
10334de2362d3Smrg	if test -n "$hardcode_libdir_flag_spec"; then
10335de2362d3Smrg	  if test -n "$hardcode_libdir_separator"; then
10336de2362d3Smrg	    if test -z "$hardcode_libdirs"; then
103370d16fef4Smrg	      hardcode_libdirs=$libdir
10338de2362d3Smrg	    else
10339de2362d3Smrg	      # Just accumulate the unique libdirs.
10340de2362d3Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10341de2362d3Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10342de2362d3Smrg		;;
10343de2362d3Smrg	      *)
10344de2362d3Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10345de2362d3Smrg		;;
10346de2362d3Smrg	      esac
10347de2362d3Smrg	    fi
10348de2362d3Smrg	  else
10349de2362d3Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
10350de2362d3Smrg	    func_append rpath " $flag"
10351de2362d3Smrg	  fi
10352de2362d3Smrg	elif test -n "$runpath_var"; then
10353de2362d3Smrg	  case "$finalize_perm_rpath " in
10354de2362d3Smrg	  *" $libdir "*) ;;
10355de2362d3Smrg	  *) func_append finalize_perm_rpath " $libdir" ;;
10356de2362d3Smrg	  esac
10357de2362d3Smrg	fi
10358de2362d3Smrg      done
10359de2362d3Smrg      # Substitute the hardcoded libdirs into the rpath.
10360de2362d3Smrg      if test -n "$hardcode_libdir_separator" &&
10361de2362d3Smrg	 test -n "$hardcode_libdirs"; then
103620d16fef4Smrg	libdir=$hardcode_libdirs
10363de2362d3Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
10364de2362d3Smrg      fi
103650d16fef4Smrg      finalize_rpath=$rpath
10366de2362d3Smrg
103670d16fef4Smrg      if test -n "$libobjs" && test yes = "$build_old_libs"; then
10368de2362d3Smrg	# Transform all the library objects into standard objects.
10369de2362d3Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10370de2362d3Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10371de2362d3Smrg      fi
10372de2362d3Smrg
103730d16fef4Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" false
10374de2362d3Smrg
10375de2362d3Smrg      # template prelinking step
10376de2362d3Smrg      if test -n "$prelink_cmds"; then
10377de2362d3Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
10378de2362d3Smrg      fi
10379de2362d3Smrg
103800d16fef4Smrg      wrappers_required=:
10381de2362d3Smrg      case $host in
10382de2362d3Smrg      *cegcc* | *mingw32ce*)
10383de2362d3Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
103840d16fef4Smrg        wrappers_required=false
10385de2362d3Smrg        ;;
10386de2362d3Smrg      *cygwin* | *mingw* )
103870d16fef4Smrg        test yes = "$build_libtool_libs" || wrappers_required=false
10388de2362d3Smrg        ;;
10389de2362d3Smrg      *)
103900d16fef4Smrg        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
103910d16fef4Smrg          wrappers_required=false
10392de2362d3Smrg        fi
10393de2362d3Smrg        ;;
10394de2362d3Smrg      esac
103950d16fef4Smrg      $wrappers_required || {
10396de2362d3Smrg	# Replace the output file specification.
10397de2362d3Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
103980d16fef4Smrg	link_command=$compile_command$compile_rpath
10399de2362d3Smrg
10400de2362d3Smrg	# We have no uninstalled library dependencies, so finalize right now.
10401de2362d3Smrg	exit_status=0
10402de2362d3Smrg	func_show_eval "$link_command" 'exit_status=$?'
10403de2362d3Smrg
10404de2362d3Smrg	if test -n "$postlink_cmds"; then
10405de2362d3Smrg	  func_to_tool_file "$output"
10406de2362d3Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10407de2362d3Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
10408de2362d3Smrg	fi
10409de2362d3Smrg
10410de2362d3Smrg	# Delete the generated files.
104110d16fef4Smrg	if test -f "$output_objdir/${outputname}S.$objext"; then
104120d16fef4Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
10413de2362d3Smrg	fi
10414de2362d3Smrg
10415de2362d3Smrg	exit $exit_status
104160d16fef4Smrg      }
10417de2362d3Smrg
10418de2362d3Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
10419de2362d3Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
10420de2362d3Smrg      fi
10421de2362d3Smrg      if test -n "$finalize_shlibpath"; then
10422de2362d3Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
10423de2362d3Smrg      fi
10424de2362d3Smrg
10425de2362d3Smrg      compile_var=
10426de2362d3Smrg      finalize_var=
10427de2362d3Smrg      if test -n "$runpath_var"; then
10428de2362d3Smrg	if test -n "$perm_rpath"; then
10429de2362d3Smrg	  # We should set the runpath_var.
10430de2362d3Smrg	  rpath=
10431de2362d3Smrg	  for dir in $perm_rpath; do
10432de2362d3Smrg	    func_append rpath "$dir:"
10433de2362d3Smrg	  done
10434de2362d3Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
10435de2362d3Smrg	fi
10436de2362d3Smrg	if test -n "$finalize_perm_rpath"; then
10437de2362d3Smrg	  # We should set the runpath_var.
10438de2362d3Smrg	  rpath=
10439de2362d3Smrg	  for dir in $finalize_perm_rpath; do
10440de2362d3Smrg	    func_append rpath "$dir:"
10441de2362d3Smrg	  done
10442de2362d3Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
10443de2362d3Smrg	fi
10444de2362d3Smrg      fi
10445de2362d3Smrg
104460d16fef4Smrg      if test yes = "$no_install"; then
10447de2362d3Smrg	# We don't need to create a wrapper script.
104480d16fef4Smrg	link_command=$compile_var$compile_command$compile_rpath
10449de2362d3Smrg	# Replace the output file specification.
10450de2362d3Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10451de2362d3Smrg	# Delete the old output file.
10452de2362d3Smrg	$opt_dry_run || $RM $output
10453de2362d3Smrg	# Link the executable and exit
10454de2362d3Smrg	func_show_eval "$link_command" 'exit $?'
10455de2362d3Smrg
10456de2362d3Smrg	if test -n "$postlink_cmds"; then
10457de2362d3Smrg	  func_to_tool_file "$output"
10458de2362d3Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10459de2362d3Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
10460de2362d3Smrg	fi
10461de2362d3Smrg
10462de2362d3Smrg	exit $EXIT_SUCCESS
10463de2362d3Smrg      fi
10464de2362d3Smrg
104650d16fef4Smrg      case $hardcode_action,$fast_install in
104660d16fef4Smrg        relink,*)
104670d16fef4Smrg	  # Fast installation is not supported
104680d16fef4Smrg	  link_command=$compile_var$compile_command$compile_rpath
104690d16fef4Smrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
10470de2362d3Smrg
104710d16fef4Smrg	  func_warning "this platform does not like uninstalled shared libraries"
104720d16fef4Smrg	  func_warning "'$output' will be relinked during installation"
104730d16fef4Smrg	  ;;
104740d16fef4Smrg        *,yes)
104750d16fef4Smrg	  link_command=$finalize_var$compile_command$finalize_rpath
104760d16fef4Smrg	  relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
104770d16fef4Smrg          ;;
104780d16fef4Smrg	*,no)
104790d16fef4Smrg	  link_command=$compile_var$compile_command$compile_rpath
104800d16fef4Smrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
104810d16fef4Smrg          ;;
104820d16fef4Smrg	*,needless)
104830d16fef4Smrg	  link_command=$finalize_var$compile_command$finalize_rpath
104840d16fef4Smrg	  relink_command=
104850d16fef4Smrg          ;;
104860d16fef4Smrg      esac
10487de2362d3Smrg
10488de2362d3Smrg      # Replace the output file specification.
10489de2362d3Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
10490de2362d3Smrg
10491de2362d3Smrg      # Delete the old output files.
10492de2362d3Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
10493de2362d3Smrg
10494de2362d3Smrg      func_show_eval "$link_command" 'exit $?'
10495de2362d3Smrg
10496de2362d3Smrg      if test -n "$postlink_cmds"; then
10497de2362d3Smrg	func_to_tool_file "$output_objdir/$outputname"
10498de2362d3Smrg	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'`
10499de2362d3Smrg	func_execute_cmds "$postlink_cmds" 'exit $?'
10500de2362d3Smrg      fi
10501de2362d3Smrg
10502de2362d3Smrg      # Now create the wrapper script.
10503de2362d3Smrg      func_verbose "creating $output"
10504de2362d3Smrg
10505de2362d3Smrg      # Quote the relink command for shipping.
10506de2362d3Smrg      if test -n "$relink_command"; then
10507de2362d3Smrg	# Preserve any variables that may affect compiler behavior
10508de2362d3Smrg	for var in $variables_saved_for_relink; do
10509de2362d3Smrg	  if eval test -z \"\${$var+set}\"; then
10510de2362d3Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10511de2362d3Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
10512de2362d3Smrg	    relink_command="$var=; export $var; $relink_command"
10513de2362d3Smrg	  else
10514de2362d3Smrg	    func_quote_for_eval "$var_value"
10515de2362d3Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
10516de2362d3Smrg	  fi
10517de2362d3Smrg	done
10518de2362d3Smrg	relink_command="(cd `pwd`; $relink_command)"
10519de2362d3Smrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
10520de2362d3Smrg      fi
10521de2362d3Smrg
10522de2362d3Smrg      # Only actually do things if not in dry run mode.
10523de2362d3Smrg      $opt_dry_run || {
10524de2362d3Smrg	# win32 will think the script is a binary if it has
10525de2362d3Smrg	# a .exe suffix, so we strip it off here.
10526de2362d3Smrg	case $output in
10527de2362d3Smrg	  *.exe) func_stripname '' '.exe' "$output"
10528de2362d3Smrg	         output=$func_stripname_result ;;
10529de2362d3Smrg	esac
10530de2362d3Smrg	# test for cygwin because mv fails w/o .exe extensions
10531de2362d3Smrg	case $host in
10532de2362d3Smrg	  *cygwin*)
10533de2362d3Smrg	    exeext=.exe
10534de2362d3Smrg	    func_stripname '' '.exe' "$outputname"
10535de2362d3Smrg	    outputname=$func_stripname_result ;;
10536de2362d3Smrg	  *) exeext= ;;
10537de2362d3Smrg	esac
10538de2362d3Smrg	case $host in
10539de2362d3Smrg	  *cygwin* | *mingw* )
10540de2362d3Smrg	    func_dirname_and_basename "$output" "" "."
10541de2362d3Smrg	    output_name=$func_basename_result
10542de2362d3Smrg	    output_path=$func_dirname_result
105430d16fef4Smrg	    cwrappersource=$output_path/$objdir/lt-$output_name.c
105440d16fef4Smrg	    cwrapper=$output_path/$output_name.exe
10545de2362d3Smrg	    $RM $cwrappersource $cwrapper
10546de2362d3Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
10547de2362d3Smrg
10548de2362d3Smrg	    func_emit_cwrapperexe_src > $cwrappersource
10549de2362d3Smrg
10550de2362d3Smrg	    # The wrapper executable is built using the $host compiler,
10551de2362d3Smrg	    # because it contains $host paths and files. If cross-
10552de2362d3Smrg	    # compiling, it, like the target executable, must be
10553de2362d3Smrg	    # executed on the $host or under an emulation environment.
10554de2362d3Smrg	    $opt_dry_run || {
10555de2362d3Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
10556de2362d3Smrg	      $STRIP $cwrapper
10557de2362d3Smrg	    }
10558de2362d3Smrg
10559de2362d3Smrg	    # Now, create the wrapper script for func_source use:
10560de2362d3Smrg	    func_ltwrapper_scriptname $cwrapper
10561de2362d3Smrg	    $RM $func_ltwrapper_scriptname_result
10562de2362d3Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
10563de2362d3Smrg	    $opt_dry_run || {
10564de2362d3Smrg	      # note: this script will not be executed, so do not chmod.
105650d16fef4Smrg	      if test "x$build" = "x$host"; then
10566de2362d3Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
10567de2362d3Smrg	      else
10568de2362d3Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
10569de2362d3Smrg	      fi
10570de2362d3Smrg	    }
10571de2362d3Smrg	  ;;
10572de2362d3Smrg	  * )
10573de2362d3Smrg	    $RM $output
10574de2362d3Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
10575de2362d3Smrg
10576de2362d3Smrg	    func_emit_wrapper no > $output
10577de2362d3Smrg	    chmod +x $output
10578de2362d3Smrg	  ;;
10579de2362d3Smrg	esac
10580de2362d3Smrg      }
10581de2362d3Smrg      exit $EXIT_SUCCESS
10582de2362d3Smrg      ;;
10583de2362d3Smrg    esac
10584de2362d3Smrg
10585de2362d3Smrg    # See if we need to build an old-fashioned archive.
10586de2362d3Smrg    for oldlib in $oldlibs; do
10587de2362d3Smrg
105880d16fef4Smrg      case $build_libtool_libs in
105890d16fef4Smrg        convenience)
105900d16fef4Smrg	  oldobjs="$libobjs_save $symfileobj"
105910d16fef4Smrg	  addlibs=$convenience
10592de2362d3Smrg	  build_libtool_libs=no
105930d16fef4Smrg	  ;;
105940d16fef4Smrg	module)
105950d16fef4Smrg	  oldobjs=$libobjs_save
105960d16fef4Smrg	  addlibs=$old_convenience
105970d16fef4Smrg	  build_libtool_libs=no
105980d16fef4Smrg          ;;
105990d16fef4Smrg	*)
10600de2362d3Smrg	  oldobjs="$old_deplibs $non_pic_objects"
106010d16fef4Smrg	  $preload && test -f "$symfileobj" \
106020d16fef4Smrg	    && func_append oldobjs " $symfileobj"
106030d16fef4Smrg	  addlibs=$old_convenience
106040d16fef4Smrg	  ;;
106050d16fef4Smrg      esac
10606de2362d3Smrg
10607de2362d3Smrg      if test -n "$addlibs"; then
106080d16fef4Smrg	gentop=$output_objdir/${outputname}x
10609de2362d3Smrg	func_append generated " $gentop"
10610de2362d3Smrg
10611de2362d3Smrg	func_extract_archives $gentop $addlibs
10612de2362d3Smrg	func_append oldobjs " $func_extract_archives_result"
10613de2362d3Smrg      fi
10614de2362d3Smrg
10615de2362d3Smrg      # Do each command in the archive commands.
106160d16fef4Smrg      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
10617de2362d3Smrg	cmds=$old_archive_from_new_cmds
10618de2362d3Smrg      else
10619de2362d3Smrg
10620de2362d3Smrg	# Add any objects from preloaded convenience libraries
10621de2362d3Smrg	if test -n "$dlprefiles"; then
106220d16fef4Smrg	  gentop=$output_objdir/${outputname}x
10623de2362d3Smrg	  func_append generated " $gentop"
10624de2362d3Smrg
10625de2362d3Smrg	  func_extract_archives $gentop $dlprefiles
10626de2362d3Smrg	  func_append oldobjs " $func_extract_archives_result"
10627de2362d3Smrg	fi
10628de2362d3Smrg
10629de2362d3Smrg	# POSIX demands no paths to be encoded in archives.  We have
10630de2362d3Smrg	# to avoid creating archives with duplicate basenames if we
10631de2362d3Smrg	# might have to extract them afterwards, e.g., when creating a
10632de2362d3Smrg	# static archive out of a convenience library, or when linking
10633de2362d3Smrg	# the entirety of a libtool archive into another (currently
10634de2362d3Smrg	# not supported by libtool).
10635de2362d3Smrg	if (for obj in $oldobjs
10636de2362d3Smrg	    do
10637de2362d3Smrg	      func_basename "$obj"
10638de2362d3Smrg	      $ECHO "$func_basename_result"
10639de2362d3Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
10640de2362d3Smrg	  :
10641de2362d3Smrg	else
10642de2362d3Smrg	  echo "copying selected object files to avoid basename conflicts..."
106430d16fef4Smrg	  gentop=$output_objdir/${outputname}x
10644de2362d3Smrg	  func_append generated " $gentop"
10645de2362d3Smrg	  func_mkdir_p "$gentop"
10646de2362d3Smrg	  save_oldobjs=$oldobjs
10647de2362d3Smrg	  oldobjs=
10648de2362d3Smrg	  counter=1
10649de2362d3Smrg	  for obj in $save_oldobjs
10650de2362d3Smrg	  do
10651de2362d3Smrg	    func_basename "$obj"
106520d16fef4Smrg	    objbase=$func_basename_result
10653de2362d3Smrg	    case " $oldobjs " in
10654de2362d3Smrg	    " ") oldobjs=$obj ;;
10655de2362d3Smrg	    *[\ /]"$objbase "*)
10656de2362d3Smrg	      while :; do
10657de2362d3Smrg		# Make sure we don't pick an alternate name that also
10658de2362d3Smrg		# overlaps.
10659de2362d3Smrg		newobj=lt$counter-$objbase
10660de2362d3Smrg		func_arith $counter + 1
10661de2362d3Smrg		counter=$func_arith_result
10662de2362d3Smrg		case " $oldobjs " in
10663de2362d3Smrg		*[\ /]"$newobj "*) ;;
10664de2362d3Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
10665de2362d3Smrg		esac
10666de2362d3Smrg	      done
10667de2362d3Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
10668de2362d3Smrg	      func_append oldobjs " $gentop/$newobj"
10669de2362d3Smrg	      ;;
10670de2362d3Smrg	    *) func_append oldobjs " $obj" ;;
10671de2362d3Smrg	    esac
10672de2362d3Smrg	  done
10673de2362d3Smrg	fi
10674de2362d3Smrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
10675de2362d3Smrg	tool_oldlib=$func_to_tool_file_result
10676de2362d3Smrg	eval cmds=\"$old_archive_cmds\"
10677de2362d3Smrg
10678de2362d3Smrg	func_len " $cmds"
10679de2362d3Smrg	len=$func_len_result
10680de2362d3Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
10681de2362d3Smrg	  cmds=$old_archive_cmds
10682de2362d3Smrg	elif test -n "$archiver_list_spec"; then
10683de2362d3Smrg	  func_verbose "using command file archive linking..."
10684de2362d3Smrg	  for obj in $oldobjs
10685de2362d3Smrg	  do
10686de2362d3Smrg	    func_to_tool_file "$obj"
10687de2362d3Smrg	    $ECHO "$func_to_tool_file_result"
10688de2362d3Smrg	  done > $output_objdir/$libname.libcmd
10689de2362d3Smrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
10690de2362d3Smrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
10691de2362d3Smrg	  cmds=$old_archive_cmds
10692de2362d3Smrg	else
10693de2362d3Smrg	  # the command line is too long to link in one step, link in parts
10694de2362d3Smrg	  func_verbose "using piecewise archive linking..."
10695de2362d3Smrg	  save_RANLIB=$RANLIB
10696de2362d3Smrg	  RANLIB=:
10697de2362d3Smrg	  objlist=
10698de2362d3Smrg	  concat_cmds=
10699de2362d3Smrg	  save_oldobjs=$oldobjs
10700de2362d3Smrg	  oldobjs=
10701de2362d3Smrg	  # Is there a better way of finding the last object in the list?
10702de2362d3Smrg	  for obj in $save_oldobjs
10703de2362d3Smrg	  do
10704de2362d3Smrg	    last_oldobj=$obj
10705de2362d3Smrg	  done
10706de2362d3Smrg	  eval test_cmds=\"$old_archive_cmds\"
10707de2362d3Smrg	  func_len " $test_cmds"
10708de2362d3Smrg	  len0=$func_len_result
10709de2362d3Smrg	  len=$len0
10710de2362d3Smrg	  for obj in $save_oldobjs
10711de2362d3Smrg	  do
10712de2362d3Smrg	    func_len " $obj"
10713de2362d3Smrg	    func_arith $len + $func_len_result
10714de2362d3Smrg	    len=$func_arith_result
10715de2362d3Smrg	    func_append objlist " $obj"
10716de2362d3Smrg	    if test "$len" -lt "$max_cmd_len"; then
10717de2362d3Smrg	      :
10718de2362d3Smrg	    else
10719de2362d3Smrg	      # the above command should be used before it gets too long
10720de2362d3Smrg	      oldobjs=$objlist
107210d16fef4Smrg	      if test "$obj" = "$last_oldobj"; then
10722de2362d3Smrg		RANLIB=$save_RANLIB
10723de2362d3Smrg	      fi
10724de2362d3Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
107250d16fef4Smrg	      eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
10726de2362d3Smrg	      objlist=
10727de2362d3Smrg	      len=$len0
10728de2362d3Smrg	    fi
10729de2362d3Smrg	  done
10730de2362d3Smrg	  RANLIB=$save_RANLIB
10731de2362d3Smrg	  oldobjs=$objlist
107320d16fef4Smrg	  if test -z "$oldobjs"; then
10733de2362d3Smrg	    eval cmds=\"\$concat_cmds\"
10734de2362d3Smrg	  else
10735de2362d3Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
10736de2362d3Smrg	  fi
10737de2362d3Smrg	fi
10738de2362d3Smrg      fi
10739de2362d3Smrg      func_execute_cmds "$cmds" 'exit $?'
10740de2362d3Smrg    done
10741de2362d3Smrg
10742de2362d3Smrg    test -n "$generated" && \
10743de2362d3Smrg      func_show_eval "${RM}r$generated"
10744de2362d3Smrg
10745de2362d3Smrg    # Now create the libtool archive.
10746de2362d3Smrg    case $output in
10747de2362d3Smrg    *.la)
10748de2362d3Smrg      old_library=
107490d16fef4Smrg      test yes = "$build_old_libs" && old_library=$libname.$libext
10750de2362d3Smrg      func_verbose "creating $output"
10751de2362d3Smrg
10752de2362d3Smrg      # Preserve any variables that may affect compiler behavior
10753de2362d3Smrg      for var in $variables_saved_for_relink; do
10754de2362d3Smrg	if eval test -z \"\${$var+set}\"; then
10755de2362d3Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10756de2362d3Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
10757de2362d3Smrg	  relink_command="$var=; export $var; $relink_command"
10758de2362d3Smrg	else
10759de2362d3Smrg	  func_quote_for_eval "$var_value"
10760de2362d3Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
10761de2362d3Smrg	fi
10762de2362d3Smrg      done
10763de2362d3Smrg      # Quote the link command for shipping.
107640d16fef4Smrg      relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
10765de2362d3Smrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
107660d16fef4Smrg      if test yes = "$hardcode_automatic"; then
10767de2362d3Smrg	relink_command=
10768de2362d3Smrg      fi
10769de2362d3Smrg
10770de2362d3Smrg      # Only create the output if not a dry run.
10771de2362d3Smrg      $opt_dry_run || {
10772de2362d3Smrg	for installed in no yes; do
107730d16fef4Smrg	  if test yes = "$installed"; then
10774de2362d3Smrg	    if test -z "$install_libdir"; then
10775de2362d3Smrg	      break
10776de2362d3Smrg	    fi
107770d16fef4Smrg	    output=$output_objdir/${outputname}i
10778de2362d3Smrg	    # Replace all uninstalled libtool libraries with the installed ones
10779de2362d3Smrg	    newdependency_libs=
10780de2362d3Smrg	    for deplib in $dependency_libs; do
10781de2362d3Smrg	      case $deplib in
10782de2362d3Smrg	      *.la)
10783de2362d3Smrg		func_basename "$deplib"
107840d16fef4Smrg		name=$func_basename_result
10785de2362d3Smrg		func_resolve_sysroot "$deplib"
107860d16fef4Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
10787de2362d3Smrg		test -z "$libdir" && \
107880d16fef4Smrg		  func_fatal_error "'$deplib' is not a valid libtool archive"
10789de2362d3Smrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
10790de2362d3Smrg		;;
10791de2362d3Smrg	      -L*)
10792de2362d3Smrg		func_stripname -L '' "$deplib"
10793de2362d3Smrg		func_replace_sysroot "$func_stripname_result"
10794de2362d3Smrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
10795de2362d3Smrg		;;
10796de2362d3Smrg	      -R*)
10797de2362d3Smrg		func_stripname -R '' "$deplib"
10798de2362d3Smrg		func_replace_sysroot "$func_stripname_result"
10799de2362d3Smrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
10800de2362d3Smrg		;;
10801de2362d3Smrg	      *) func_append newdependency_libs " $deplib" ;;
10802de2362d3Smrg	      esac
10803de2362d3Smrg	    done
108040d16fef4Smrg	    dependency_libs=$newdependency_libs
10805de2362d3Smrg	    newdlfiles=
10806de2362d3Smrg
10807de2362d3Smrg	    for lib in $dlfiles; do
10808de2362d3Smrg	      case $lib in
10809de2362d3Smrg	      *.la)
10810de2362d3Smrg	        func_basename "$lib"
108110d16fef4Smrg		name=$func_basename_result
108120d16fef4Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
10813de2362d3Smrg		test -z "$libdir" && \
108140d16fef4Smrg		  func_fatal_error "'$lib' is not a valid libtool archive"
10815de2362d3Smrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
10816de2362d3Smrg		;;
10817de2362d3Smrg	      *) func_append newdlfiles " $lib" ;;
10818de2362d3Smrg	      esac
10819de2362d3Smrg	    done
108200d16fef4Smrg	    dlfiles=$newdlfiles
10821de2362d3Smrg	    newdlprefiles=
10822de2362d3Smrg	    for lib in $dlprefiles; do
10823de2362d3Smrg	      case $lib in
10824de2362d3Smrg	      *.la)
10825de2362d3Smrg		# Only pass preopened files to the pseudo-archive (for
10826de2362d3Smrg		# eventual linking with the app. that links it) if we
10827de2362d3Smrg		# didn't already link the preopened objects directly into
10828de2362d3Smrg		# the library:
10829de2362d3Smrg		func_basename "$lib"
108300d16fef4Smrg		name=$func_basename_result
108310d16fef4Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
10832de2362d3Smrg		test -z "$libdir" && \
108330d16fef4Smrg		  func_fatal_error "'$lib' is not a valid libtool archive"
10834de2362d3Smrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
10835de2362d3Smrg		;;
10836de2362d3Smrg	      esac
10837de2362d3Smrg	    done
108380d16fef4Smrg	    dlprefiles=$newdlprefiles
10839de2362d3Smrg	  else
10840de2362d3Smrg	    newdlfiles=
10841de2362d3Smrg	    for lib in $dlfiles; do
10842de2362d3Smrg	      case $lib in
108430d16fef4Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
10844de2362d3Smrg		*) abs=`pwd`"/$lib" ;;
10845de2362d3Smrg	      esac
10846de2362d3Smrg	      func_append newdlfiles " $abs"
10847de2362d3Smrg	    done
108480d16fef4Smrg	    dlfiles=$newdlfiles
10849de2362d3Smrg	    newdlprefiles=
10850de2362d3Smrg	    for lib in $dlprefiles; do
10851de2362d3Smrg	      case $lib in
108520d16fef4Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
10853de2362d3Smrg		*) abs=`pwd`"/$lib" ;;
10854de2362d3Smrg	      esac
10855de2362d3Smrg	      func_append newdlprefiles " $abs"
10856de2362d3Smrg	    done
108570d16fef4Smrg	    dlprefiles=$newdlprefiles
10858de2362d3Smrg	  fi
10859de2362d3Smrg	  $RM $output
10860de2362d3Smrg	  # place dlname in correct position for cygwin
10861de2362d3Smrg	  # In fact, it would be nice if we could use this code for all target
10862de2362d3Smrg	  # systems that can't hard-code library paths into their executables
10863de2362d3Smrg	  # and that have no shared library path variable independent of PATH,
10864de2362d3Smrg	  # but it turns out we can't easily determine that from inspecting
10865de2362d3Smrg	  # libtool variables, so we have to hard-code the OSs to which it
10866de2362d3Smrg	  # applies here; at the moment, that means platforms that use the PE
10867de2362d3Smrg	  # object format with DLL files.  See the long comment at the top of
10868de2362d3Smrg	  # tests/bindir.at for full details.
10869de2362d3Smrg	  tdlname=$dlname
10870de2362d3Smrg	  case $host,$output,$installed,$module,$dlname in
10871de2362d3Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
10872de2362d3Smrg	      # If a -bindir argument was supplied, place the dll there.
108730d16fef4Smrg	      if test -n "$bindir"; then
10874de2362d3Smrg		func_relative_path "$install_libdir" "$bindir"
108750d16fef4Smrg		tdlname=$func_relative_path_result/$dlname
10876de2362d3Smrg	      else
10877de2362d3Smrg		# Otherwise fall back on heuristic.
10878de2362d3Smrg		tdlname=../bin/$dlname
10879de2362d3Smrg	      fi
10880de2362d3Smrg	      ;;
10881de2362d3Smrg	  esac
10882de2362d3Smrg	  $ECHO > $output "\
10883de2362d3Smrg# $outputname - a libtool library file
108840d16fef4Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
10885de2362d3Smrg#
10886de2362d3Smrg# Please DO NOT delete this file!
10887de2362d3Smrg# It is necessary for linking the library.
10888de2362d3Smrg
10889de2362d3Smrg# The name that we can dlopen(3).
10890de2362d3Smrgdlname='$tdlname'
10891de2362d3Smrg
10892de2362d3Smrg# Names of this library.
10893de2362d3Smrglibrary_names='$library_names'
10894de2362d3Smrg
10895de2362d3Smrg# The name of the static archive.
10896de2362d3Smrgold_library='$old_library'
10897de2362d3Smrg
108980d16fef4Smrg# Linker flags that cannot go in dependency_libs.
10899de2362d3Smrginherited_linker_flags='$new_inherited_linker_flags'
10900de2362d3Smrg
10901de2362d3Smrg# Libraries that this one depends upon.
10902de2362d3Smrgdependency_libs='$dependency_libs'
10903de2362d3Smrg
10904de2362d3Smrg# Names of additional weak libraries provided by this library
10905de2362d3Smrgweak_library_names='$weak_libs'
10906de2362d3Smrg
10907de2362d3Smrg# Version information for $libname.
10908de2362d3Smrgcurrent=$current
10909de2362d3Smrgage=$age
10910de2362d3Smrgrevision=$revision
10911de2362d3Smrg
10912de2362d3Smrg# Is this an already installed library?
10913de2362d3Smrginstalled=$installed
10914de2362d3Smrg
10915de2362d3Smrg# Should we warn about portability when linking against -modules?
10916de2362d3Smrgshouldnotlink=$module
10917de2362d3Smrg
10918de2362d3Smrg# Files to dlopen/dlpreopen
10919de2362d3Smrgdlopen='$dlfiles'
10920de2362d3Smrgdlpreopen='$dlprefiles'
10921de2362d3Smrg
10922de2362d3Smrg# Directory that this library needs to be installed in:
10923de2362d3Smrglibdir='$install_libdir'"
109240d16fef4Smrg	  if test no,yes = "$installed,$need_relink"; then
10925de2362d3Smrg	    $ECHO >> $output "\
10926de2362d3Smrgrelink_command=\"$relink_command\""
10927de2362d3Smrg	  fi
10928de2362d3Smrg	done
10929de2362d3Smrg      }
10930de2362d3Smrg
10931de2362d3Smrg      # Do a symbolic link so that the libtool archive can be found in
10932de2362d3Smrg      # LD_LIBRARY_PATH before the program is installed.
10933de2362d3Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
10934de2362d3Smrg      ;;
10935de2362d3Smrg    esac
10936de2362d3Smrg    exit $EXIT_SUCCESS
10937de2362d3Smrg}
10938de2362d3Smrg
109390d16fef4Smrgif test link = "$opt_mode" || test relink = "$opt_mode"; then
109400d16fef4Smrg  func_mode_link ${1+"$@"}
109410d16fef4Smrgfi
10942de2362d3Smrg
10943de2362d3Smrg
10944de2362d3Smrg# func_mode_uninstall arg...
10945de2362d3Smrgfunc_mode_uninstall ()
10946de2362d3Smrg{
109470d16fef4Smrg    $debug_cmd
109480d16fef4Smrg
109490d16fef4Smrg    RM=$nonopt
10950de2362d3Smrg    files=
109510d16fef4Smrg    rmforce=false
10952de2362d3Smrg    exit_status=0
10953de2362d3Smrg
10954de2362d3Smrg    # This variable tells wrapper scripts just to set variables rather
10955de2362d3Smrg    # than running their programs.
109560d16fef4Smrg    libtool_install_magic=$magic
10957de2362d3Smrg
10958de2362d3Smrg    for arg
10959de2362d3Smrg    do
10960de2362d3Smrg      case $arg in
109610d16fef4Smrg      -f) func_append RM " $arg"; rmforce=: ;;
10962de2362d3Smrg      -*) func_append RM " $arg" ;;
10963de2362d3Smrg      *) func_append files " $arg" ;;
10964de2362d3Smrg      esac
10965de2362d3Smrg    done
10966de2362d3Smrg
10967de2362d3Smrg    test -z "$RM" && \
10968de2362d3Smrg      func_fatal_help "you must specify an RM program"
10969de2362d3Smrg
10970de2362d3Smrg    rmdirs=
10971de2362d3Smrg
10972de2362d3Smrg    for file in $files; do
10973de2362d3Smrg      func_dirname "$file" "" "."
109740d16fef4Smrg      dir=$func_dirname_result
109750d16fef4Smrg      if test . = "$dir"; then
109760d16fef4Smrg	odir=$objdir
10977de2362d3Smrg      else
109780d16fef4Smrg	odir=$dir/$objdir
10979de2362d3Smrg      fi
10980de2362d3Smrg      func_basename "$file"
109810d16fef4Smrg      name=$func_basename_result
109820d16fef4Smrg      test uninstall = "$opt_mode" && odir=$dir
10983de2362d3Smrg
10984de2362d3Smrg      # Remember odir for removal later, being careful to avoid duplicates
109850d16fef4Smrg      if test clean = "$opt_mode"; then
10986de2362d3Smrg	case " $rmdirs " in
10987de2362d3Smrg	  *" $odir "*) ;;
10988de2362d3Smrg	  *) func_append rmdirs " $odir" ;;
10989de2362d3Smrg	esac
10990de2362d3Smrg      fi
10991de2362d3Smrg
10992de2362d3Smrg      # Don't error if the file doesn't exist and rm -f was used.
10993de2362d3Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
10994de2362d3Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
10995de2362d3Smrg	 test -f "$file"; then
10996de2362d3Smrg	:
10997de2362d3Smrg      elif test -d "$file"; then
10998de2362d3Smrg	exit_status=1
10999de2362d3Smrg	continue
110000d16fef4Smrg      elif $rmforce; then
11001de2362d3Smrg	continue
11002de2362d3Smrg      fi
11003de2362d3Smrg
110040d16fef4Smrg      rmfiles=$file
11005de2362d3Smrg
11006de2362d3Smrg      case $name in
11007de2362d3Smrg      *.la)
11008de2362d3Smrg	# Possibly a libtool archive, so verify it.
11009de2362d3Smrg	if func_lalib_p "$file"; then
11010de2362d3Smrg	  func_source $dir/$name
11011de2362d3Smrg
11012de2362d3Smrg	  # Delete the libtool libraries and symlinks.
11013de2362d3Smrg	  for n in $library_names; do
11014de2362d3Smrg	    func_append rmfiles " $odir/$n"
11015de2362d3Smrg	  done
11016de2362d3Smrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
11017de2362d3Smrg
110180d16fef4Smrg	  case $opt_mode in
11019de2362d3Smrg	  clean)
11020de2362d3Smrg	    case " $library_names " in
11021de2362d3Smrg	    *" $dlname "*) ;;
11022de2362d3Smrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
11023de2362d3Smrg	    esac
11024de2362d3Smrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
11025de2362d3Smrg	    ;;
11026de2362d3Smrg	  uninstall)
11027de2362d3Smrg	    if test -n "$library_names"; then
11028de2362d3Smrg	      # Do each command in the postuninstall commands.
110290d16fef4Smrg	      func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
11030de2362d3Smrg	    fi
11031de2362d3Smrg
11032de2362d3Smrg	    if test -n "$old_library"; then
11033de2362d3Smrg	      # Do each command in the old_postuninstall commands.
110340d16fef4Smrg	      func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
11035de2362d3Smrg	    fi
11036de2362d3Smrg	    # FIXME: should reinstall the best remaining shared library.
11037de2362d3Smrg	    ;;
11038de2362d3Smrg	  esac
11039de2362d3Smrg	fi
11040de2362d3Smrg	;;
11041de2362d3Smrg
11042de2362d3Smrg      *.lo)
11043de2362d3Smrg	# Possibly a libtool object, so verify it.
11044de2362d3Smrg	if func_lalib_p "$file"; then
11045de2362d3Smrg
11046de2362d3Smrg	  # Read the .lo file
11047de2362d3Smrg	  func_source $dir/$name
11048de2362d3Smrg
11049de2362d3Smrg	  # Add PIC object to the list of files to remove.
110500d16fef4Smrg	  if test -n "$pic_object" && test none != "$pic_object"; then
11051de2362d3Smrg	    func_append rmfiles " $dir/$pic_object"
11052de2362d3Smrg	  fi
11053de2362d3Smrg
11054de2362d3Smrg	  # Add non-PIC object to the list of files to remove.
110550d16fef4Smrg	  if test -n "$non_pic_object" && test none != "$non_pic_object"; then
11056de2362d3Smrg	    func_append rmfiles " $dir/$non_pic_object"
11057de2362d3Smrg	  fi
11058de2362d3Smrg	fi
11059de2362d3Smrg	;;
11060de2362d3Smrg
11061de2362d3Smrg      *)
110620d16fef4Smrg	if test clean = "$opt_mode"; then
11063de2362d3Smrg	  noexename=$name
11064de2362d3Smrg	  case $file in
11065de2362d3Smrg	  *.exe)
11066de2362d3Smrg	    func_stripname '' '.exe' "$file"
11067de2362d3Smrg	    file=$func_stripname_result
11068de2362d3Smrg	    func_stripname '' '.exe' "$name"
11069de2362d3Smrg	    noexename=$func_stripname_result
11070de2362d3Smrg	    # $file with .exe has already been added to rmfiles,
11071de2362d3Smrg	    # add $file without .exe
11072de2362d3Smrg	    func_append rmfiles " $file"
11073de2362d3Smrg	    ;;
11074de2362d3Smrg	  esac
11075de2362d3Smrg	  # Do a test to see if this is a libtool program.
11076de2362d3Smrg	  if func_ltwrapper_p "$file"; then
11077de2362d3Smrg	    if func_ltwrapper_executable_p "$file"; then
11078de2362d3Smrg	      func_ltwrapper_scriptname "$file"
11079de2362d3Smrg	      relink_command=
11080de2362d3Smrg	      func_source $func_ltwrapper_scriptname_result
11081de2362d3Smrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
11082de2362d3Smrg	    else
11083de2362d3Smrg	      relink_command=
11084de2362d3Smrg	      func_source $dir/$noexename
11085de2362d3Smrg	    fi
11086de2362d3Smrg
11087de2362d3Smrg	    # note $name still contains .exe if it was in $file originally
11088de2362d3Smrg	    # as does the version of $file that was added into $rmfiles
110890d16fef4Smrg	    func_append rmfiles " $odir/$name $odir/${name}S.$objext"
110900d16fef4Smrg	    if test yes = "$fast_install" && test -n "$relink_command"; then
11091de2362d3Smrg	      func_append rmfiles " $odir/lt-$name"
11092de2362d3Smrg	    fi
110930d16fef4Smrg	    if test "X$noexename" != "X$name"; then
110940d16fef4Smrg	      func_append rmfiles " $odir/lt-$noexename.c"
11095de2362d3Smrg	    fi
11096de2362d3Smrg	  fi
11097de2362d3Smrg	fi
11098de2362d3Smrg	;;
11099de2362d3Smrg      esac
11100de2362d3Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
11101de2362d3Smrg    done
11102de2362d3Smrg
111030d16fef4Smrg    # Try to remove the $objdir's in the directories where we deleted files
11104de2362d3Smrg    for dir in $rmdirs; do
11105de2362d3Smrg      if test -d "$dir"; then
11106de2362d3Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
11107de2362d3Smrg      fi
11108de2362d3Smrg    done
11109de2362d3Smrg
11110de2362d3Smrg    exit $exit_status
11111de2362d3Smrg}
11112de2362d3Smrg
111130d16fef4Smrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
111140d16fef4Smrg  func_mode_uninstall ${1+"$@"}
111150d16fef4Smrgfi
11116de2362d3Smrg
11117de2362d3Smrgtest -z "$opt_mode" && {
111180d16fef4Smrg  help=$generic_help
11119de2362d3Smrg  func_fatal_help "you must specify a MODE"
11120de2362d3Smrg}
11121de2362d3Smrg
11122de2362d3Smrgtest -z "$exec_cmd" && \
111230d16fef4Smrg  func_fatal_help "invalid operation mode '$opt_mode'"
11124de2362d3Smrg
11125de2362d3Smrgif test -n "$exec_cmd"; then
11126de2362d3Smrg  eval exec "$exec_cmd"
11127de2362d3Smrg  exit $EXIT_FAILURE
11128de2362d3Smrgfi
11129de2362d3Smrg
11130de2362d3Smrgexit $exit_status
11131de2362d3Smrg
11132de2362d3Smrg
11133de2362d3Smrg# The TAGs below are defined such that we never get into a situation
111340d16fef4Smrg# where we disable both kinds of libraries.  Given conflicting
11135de2362d3Smrg# choices, we go for a static library, that is the most portable,
11136de2362d3Smrg# since we can't tell whether shared libraries were disabled because
11137de2362d3Smrg# the user asked for that or because the platform doesn't support
11138de2362d3Smrg# them.  This is particularly important on AIX, because we don't
11139de2362d3Smrg# support having both static and shared libraries enabled at the same
11140de2362d3Smrg# time on that platform, so we default to a shared-only configuration.
11141de2362d3Smrg# If a disable-shared tag is given, we'll fallback to a static-only
11142de2362d3Smrg# configuration.  But we'll never go from static-only to shared-only.
11143de2362d3Smrg
11144de2362d3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
11145de2362d3Smrgbuild_libtool_libs=no
11146de2362d3Smrgbuild_old_libs=yes
11147de2362d3Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
11148de2362d3Smrg
11149de2362d3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
11150de2362d3Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
11151de2362d3Smrg# ### END LIBTOOL TAG CONFIG: disable-static
11152de2362d3Smrg
11153de2362d3Smrg# Local Variables:
11154de2362d3Smrg# mode:shell-script
11155de2362d3Smrg# sh-indentation:2
11156de2362d3Smrg# End:
11157