xref: /freebsd/contrib/openbsm/config/ltmain.sh (revision eb336521)
13b97a967SRobert Watson#! /bin/sh
23b97a967SRobert Watson## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
33b97a967SRobert Watson##               by inline-source v2014-01-03.01
4eb336521SRobert Watson
5eb336521SRobert Watson# libtool (GNU libtool) 2.4.6
63b97a967SRobert Watson# Provide generalized library-building support services.
73b97a967SRobert Watson# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
83b97a967SRobert Watson
93b97a967SRobert Watson# Copyright (C) 1996-2015 Free Software Foundation, Inc.
103b97a967SRobert Watson# This is free software; see the source for copying conditions.  There is NO
113b97a967SRobert Watson# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
123b97a967SRobert Watson
133b97a967SRobert Watson# GNU Libtool is free software; you can redistribute it and/or modify
143b97a967SRobert Watson# it under the terms of the GNU General Public License as published by
153b97a967SRobert Watson# the Free Software Foundation; either version 2 of the License, or
163b97a967SRobert Watson# (at your option) any later version.
173b97a967SRobert Watson#
183b97a967SRobert Watson# As a special exception to the GNU General Public License,
193b97a967SRobert Watson# if you distribute this file as part of a program or library that
203b97a967SRobert Watson# is built using GNU Libtool, you may include this file under the
213b97a967SRobert Watson# same distribution terms that you use for the rest of that program.
223b97a967SRobert Watson#
233b97a967SRobert Watson# GNU Libtool is distributed in the hope that it will be useful, but
243b97a967SRobert Watson# WITHOUT ANY WARRANTY; without even the implied warranty of
253b97a967SRobert Watson# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
263b97a967SRobert Watson# General Public License for more details.
273b97a967SRobert Watson#
283b97a967SRobert Watson# You should have received a copy of the GNU General Public License
293b97a967SRobert Watson# along with this program.  If not, see <http://www.gnu.org/licenses/>.
303b97a967SRobert Watson
313b97a967SRobert Watson
323b97a967SRobert WatsonPROGRAM=libtool
333b97a967SRobert WatsonPACKAGE=libtool
343b97a967SRobert WatsonVERSION=2.4.6
353b97a967SRobert Watsonpackage_revision=2.4.6
363b97a967SRobert Watson
373b97a967SRobert Watson
383b97a967SRobert Watson## ------ ##
393b97a967SRobert Watson## Usage. ##
403b97a967SRobert Watson## ------ ##
413b97a967SRobert Watson
423b97a967SRobert Watson# Run './libtool --help' for help with using this script from the
433b97a967SRobert Watson# command line.
443b97a967SRobert Watson
453b97a967SRobert Watson
46eb336521SRobert Watson## ------------------------------- ##
47eb336521SRobert Watson## User overridable command paths. ##
483b97a967SRobert Watson## ------------------------------- ##
49eb336521SRobert Watson
50eb336521SRobert Watson# After configure completes, it has a better idea of some of the
51eb336521SRobert Watson# shell tools we need than the defaults used by the functions shared
52eb336521SRobert Watson# with bootstrap, so set those here where they can still be over-
53eb336521SRobert Watson# ridden by the user, but otherwise take precedence.
54eb336521SRobert Watson
55eb336521SRobert Watson: ${AUTOCONF="autoconf"}
563b97a967SRobert Watson: ${AUTOMAKE="automake"}
57eb336521SRobert Watson
58eb336521SRobert Watson
593b97a967SRobert Watson## -------------------------- ##
60eb336521SRobert Watson## Source external libraries. ##
61eb336521SRobert Watson## -------------------------- ##
623b97a967SRobert Watson
633b97a967SRobert Watson# Much of our low-level functionality needs to be sourced from external
643b97a967SRobert Watson# libraries, which are installed to $pkgauxdir.
653b97a967SRobert Watson
663b97a967SRobert Watson# Set a version string for this script.
673b97a967SRobert Watsonscriptversion=2015-01-20.17; # UTC
683b97a967SRobert Watson
693b97a967SRobert Watson# General shell script boiler plate, and helper functions.
703b97a967SRobert Watson# Written by Gary V. Vaughan, 2004
713b97a967SRobert Watson
723b97a967SRobert Watson# Copyright (C) 2004-2015 Free Software Foundation, Inc.
733b97a967SRobert Watson# This is free software; see the source for copying conditions.  There is NO
743b97a967SRobert Watson# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
753b97a967SRobert Watson
763b97a967SRobert Watson# This program is free software; you can redistribute it and/or modify
773b97a967SRobert Watson# it under the terms of the GNU General Public License as published by
783b97a967SRobert Watson# the Free Software Foundation; either version 3 of the License, or
793b97a967SRobert Watson# (at your option) any later version.
803b97a967SRobert Watson
813b97a967SRobert Watson# As a special exception to the GNU General Public License, if you distribute
823b97a967SRobert Watson# this file as part of a program or library that is built using GNU Libtool,
833b97a967SRobert Watson# you may include this file under the same distribution terms that you use
843b97a967SRobert Watson# for the rest of that program.
853b97a967SRobert Watson
863b97a967SRobert Watson# This program is distributed in the hope that it will be useful,
873b97a967SRobert Watson# but WITHOUT ANY WARRANTY; without even the implied warranty of
883b97a967SRobert Watson# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
893b97a967SRobert Watson# General Public License for more details.
903b97a967SRobert Watson
913b97a967SRobert Watson# You should have received a copy of the GNU General Public License
923b97a967SRobert Watson# along with this program. If not, see <http://www.gnu.org/licenses/>.
933b97a967SRobert Watson
943b97a967SRobert Watson# Please report bugs or propose patches to gary@gnu.org.
953b97a967SRobert Watson
963b97a967SRobert Watson
973b97a967SRobert Watson## ------ ##
983b97a967SRobert Watson## Usage. ##
993b97a967SRobert Watson## ------ ##
1003b97a967SRobert Watson
1013b97a967SRobert Watson# Evaluate this file near the top of your script to gain access to
1023b97a967SRobert Watson# the functions and variables defined here:
1033b97a967SRobert Watson#
1043b97a967SRobert Watson#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
1053b97a967SRobert Watson#
1063b97a967SRobert Watson# If you need to override any of the default environment variable
1073b97a967SRobert Watson# settings, do that before evaluating this file.
1083b97a967SRobert Watson
1093b97a967SRobert Watson
1103b97a967SRobert Watson## -------------------- ##
1113b97a967SRobert Watson## Shell normalisation. ##
1123b97a967SRobert Watson## -------------------- ##
1133b97a967SRobert Watson
1143b97a967SRobert Watson# Some shells need a little help to be as Bourne compatible as possible.
1153b97a967SRobert Watson# Before doing anything else, make sure all that help has been provided!
116eb336521SRobert Watson
117eb336521SRobert WatsonDUALCASE=1; export DUALCASE # for MKS sh
118eb336521SRobert Watsonif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
119eb336521SRobert Watson  emulate sh
120eb336521SRobert Watson  NULLCMD=:
121eb336521SRobert Watson  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
122eb336521SRobert Watson  # is contrary to our usage.  Disable this feature.
123eb336521SRobert Watson  alias -g '${1+"$@"}'='"$@"'
1243b97a967SRobert Watson  setopt NO_GLOB_SUBST
1253b97a967SRobert Watsonelse
1263b97a967SRobert Watson  case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
1273b97a967SRobert Watsonfi
1283b97a967SRobert Watson
1293b97a967SRobert Watson# NLS nuisances: We save the old values in case they are required later.
1303b97a967SRobert Watson_G_user_locale=
1313b97a967SRobert Watson_G_safe_locale=
1323b97a967SRobert Watsonfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
1333b97a967SRobert Watsondo
1343b97a967SRobert Watson  eval "if test set = \"\${$_G_var+set}\"; then
1353b97a967SRobert Watson          save_$_G_var=\$$_G_var
1363b97a967SRobert Watson          $_G_var=C
1373b97a967SRobert Watson	  export $_G_var
1383b97a967SRobert Watson	  _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
1393b97a967SRobert Watson	  _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
1403b97a967SRobert Watson	fi"
1413b97a967SRobert Watsondone
1423b97a967SRobert Watson
1433b97a967SRobert Watson# CDPATH.
1443b97a967SRobert Watson(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
145d9af45c4SRobert Watson
146d9af45c4SRobert Watson# Make sure IFS has a sensible default
1473b97a967SRobert Watsonsp=' '
1483b97a967SRobert Watsonnl='
149eb336521SRobert Watson'
150eb336521SRobert WatsonIFS="$sp	$nl"
1513b97a967SRobert Watson
1523b97a967SRobert Watson# There are apparently some retarded systems that use ';' as a PATH separator!
1533b97a967SRobert Watsonif test "${PATH_SEPARATOR+set}" != set; then
1543b97a967SRobert Watson  PATH_SEPARATOR=:
1553b97a967SRobert Watson  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
156d9af45c4SRobert Watson    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
157d9af45c4SRobert Watson      PATH_SEPARATOR=';'
158d9af45c4SRobert Watson  }
159d9af45c4SRobert Watsonfi
160d9af45c4SRobert Watson
161d9af45c4SRobert Watson
162d9af45c4SRobert Watson
163d9af45c4SRobert Watson## ------------------------- ##
164d9af45c4SRobert Watson## Locate command utilities. ##
165d9af45c4SRobert Watson## ------------------------- ##
166d9af45c4SRobert Watson
167d9af45c4SRobert Watson
168d9af45c4SRobert Watson# func_executable_p FILE
169d9af45c4SRobert Watson# ----------------------
170d9af45c4SRobert Watson# Check that FILE is an executable regular file.
171d9af45c4SRobert Watsonfunc_executable_p ()
172d9af45c4SRobert Watson{
173d9af45c4SRobert Watson    test -f "$1" && test -x "$1"
174d9af45c4SRobert Watson}
175d9af45c4SRobert Watson
176d9af45c4SRobert Watson
177d9af45c4SRobert Watson# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
178d9af45c4SRobert Watson# --------------------------------------------
179d9af45c4SRobert Watson# Search for either a program that responds to --version with output
180d9af45c4SRobert Watson# containing "GNU", or else returned by CHECK_FUNC otherwise, by
181d9af45c4SRobert Watson# trying all the directories in PATH with each of the elements of
182d9af45c4SRobert Watson# PROGS_LIST.
183d9af45c4SRobert Watson#
184d9af45c4SRobert Watson# CHECK_FUNC should accept the path to a candidate program, and
185d9af45c4SRobert Watson# set $func_check_prog_result if it truncates its output less than
186d9af45c4SRobert Watson# $_G_path_prog_max characters.
187d9af45c4SRobert Watsonfunc_path_progs ()
188d9af45c4SRobert Watson{
189d9af45c4SRobert Watson    _G_progs_list=$1
190d9af45c4SRobert Watson    _G_check_func=$2
191d9af45c4SRobert Watson    _G_PATH=${3-"$PATH"}
192d9af45c4SRobert Watson
1933b97a967SRobert Watson    _G_path_prog_max=0
1943b97a967SRobert Watson    _G_path_prog_found=false
1953b97a967SRobert Watson    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
1963b97a967SRobert Watson    for _G_dir in $_G_PATH; do
1973b97a967SRobert Watson      IFS=$_G_save_IFS
1983b97a967SRobert Watson      test -z "$_G_dir" && _G_dir=.
1993b97a967SRobert Watson      for _G_prog_name in $_G_progs_list; do
2003b97a967SRobert Watson        for _exeext in '' .EXE; do
2013b97a967SRobert Watson          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
2023b97a967SRobert Watson          func_executable_p "$_G_path_prog" || continue
2033b97a967SRobert Watson          case `"$_G_path_prog" --version 2>&1` in
2043b97a967SRobert Watson            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
2053b97a967SRobert Watson            *)     $_G_check_func $_G_path_prog
2063b97a967SRobert Watson		   func_path_progs_result=$func_check_prog_result
2073b97a967SRobert Watson		   ;;
2083b97a967SRobert Watson          esac
2093b97a967SRobert Watson          $_G_path_prog_found && break 3
2103b97a967SRobert Watson        done
211eb336521SRobert Watson      done
212eb336521SRobert Watson    done
213eb336521SRobert Watson    IFS=$_G_save_IFS
214eb336521SRobert Watson    test -z "$func_path_progs_result" && {
215eb336521SRobert Watson      echo "no acceptable sed could be found in \$PATH" >&2
216eb336521SRobert Watson      exit 1
217eb336521SRobert Watson    }
218d9af45c4SRobert Watson}
219d9af45c4SRobert Watson
220d9af45c4SRobert Watson
221d9af45c4SRobert Watson# We want to be able to use the functions in this file before configure
2223b97a967SRobert Watson# has figured out where the best binaries are kept, which means we have
2233b97a967SRobert Watson# to search for them ourselves - except when the results are already set
2243b97a967SRobert Watson# where we skip the searches.
2253b97a967SRobert Watson
2263b97a967SRobert Watson# Unless the user overrides by setting SED, search the path for either GNU
2273b97a967SRobert Watson# sed, or the sed that truncates its output the least.
2283b97a967SRobert Watsontest -z "$SED" && {
2293b97a967SRobert Watson  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
2303b97a967SRobert Watson  for _G_i in 1 2 3 4 5 6 7; do
2313b97a967SRobert Watson    _G_sed_script=$_G_sed_script$nl$_G_sed_script
2323b97a967SRobert Watson  done
2333b97a967SRobert Watson  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
2343b97a967SRobert Watson  _G_sed_script=
2353b97a967SRobert Watson
2363b97a967SRobert Watson  func_check_prog_sed ()
2373b97a967SRobert Watson  {
2383b97a967SRobert Watson    _G_path_prog=$1
2393b97a967SRobert Watson
2403b97a967SRobert Watson    _G_count=0
2413b97a967SRobert Watson    printf 0123456789 >conftest.in
2423b97a967SRobert Watson    while :
2433b97a967SRobert Watson    do
2443b97a967SRobert Watson      cat conftest.in conftest.in >conftest.tmp
2453b97a967SRobert Watson      mv conftest.tmp conftest.in
2463b97a967SRobert Watson      cp conftest.in conftest.nl
247d9af45c4SRobert Watson      echo '' >> conftest.nl
248d9af45c4SRobert Watson      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
249d9af45c4SRobert Watson      diff conftest.out conftest.nl >/dev/null 2>&1 || break
250d9af45c4SRobert Watson      _G_count=`expr $_G_count + 1`
251d9af45c4SRobert Watson      if test "$_G_count" -gt "$_G_path_prog_max"; then
252d9af45c4SRobert Watson        # Best one so far, save it but keep looking for a better one
253d9af45c4SRobert Watson        func_check_prog_result=$_G_path_prog
254d9af45c4SRobert Watson        _G_path_prog_max=$_G_count
255d9af45c4SRobert Watson      fi
256d9af45c4SRobert Watson      # 10*(2^10) chars as input seems more than enough
257d9af45c4SRobert Watson      test 10 -lt "$_G_count" && break
258d9af45c4SRobert Watson    done
259d9af45c4SRobert Watson    rm -f conftest.in conftest.tmp conftest.nl conftest.out
260d9af45c4SRobert Watson  }
2613b97a967SRobert Watson
2623b97a967SRobert Watson  func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
2633b97a967SRobert Watson  rm -f conftest.sed
2643b97a967SRobert Watson  SED=$func_path_progs_result
2653b97a967SRobert Watson}
2663b97a967SRobert Watson
2673b97a967SRobert Watson
2683b97a967SRobert Watson# Unless the user overrides by setting GREP, search the path for either GNU
2693b97a967SRobert Watson# grep, or the grep that truncates its output the least.
2703b97a967SRobert Watsontest -z "$GREP" && {
2713b97a967SRobert Watson  func_check_prog_grep ()
2723b97a967SRobert Watson  {
2733b97a967SRobert Watson    _G_path_prog=$1
2743b97a967SRobert Watson
2753b97a967SRobert Watson    _G_count=0
2763b97a967SRobert Watson    _G_path_prog_max=0
2773b97a967SRobert Watson    printf 0123456789 >conftest.in
2783b97a967SRobert Watson    while :
2793b97a967SRobert Watson    do
2803b97a967SRobert Watson      cat conftest.in conftest.in >conftest.tmp
2813b97a967SRobert Watson      mv conftest.tmp conftest.in
2823b97a967SRobert Watson      cp conftest.in conftest.nl
2833b97a967SRobert Watson      echo 'GREP' >> conftest.nl
2843b97a967SRobert Watson      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
2853b97a967SRobert Watson      diff conftest.out conftest.nl >/dev/null 2>&1 || break
2863b97a967SRobert Watson      _G_count=`expr $_G_count + 1`
2873b97a967SRobert Watson      if test "$_G_count" -gt "$_G_path_prog_max"; then
2883b97a967SRobert Watson        # Best one so far, save it but keep looking for a better one
2893b97a967SRobert Watson        func_check_prog_result=$_G_path_prog
2903b97a967SRobert Watson        _G_path_prog_max=$_G_count
2913b97a967SRobert Watson      fi
2923b97a967SRobert Watson      # 10*(2^10) chars as input seems more than enough
2933b97a967SRobert Watson      test 10 -lt "$_G_count" && break
2943b97a967SRobert Watson    done
2953b97a967SRobert Watson    rm -f conftest.in conftest.tmp conftest.nl conftest.out
2963b97a967SRobert Watson  }
2973b97a967SRobert Watson
2983b97a967SRobert Watson  func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
2993b97a967SRobert Watson  GREP=$func_path_progs_result
3003b97a967SRobert Watson}
301d9af45c4SRobert Watson
302d9af45c4SRobert Watson
303d9af45c4SRobert Watson## ------------------------------- ##
304d9af45c4SRobert Watson## User overridable command paths. ##
305d9af45c4SRobert Watson## ------------------------------- ##
306d9af45c4SRobert Watson
307d9af45c4SRobert Watson# All uppercase variable names are used for environment variables.  These
308d9af45c4SRobert Watson# variables can be overridden by the user before calling a script that
309d9af45c4SRobert Watson# uses them if a suitable command of that name is not already available
310d9af45c4SRobert Watson# in the command search PATH.
311d9af45c4SRobert Watson
312d9af45c4SRobert Watson: ${CP="cp -f"}
313d9af45c4SRobert Watson: ${ECHO="printf %s\n"}
314d9af45c4SRobert Watson: ${EGREP="$GREP -E"}
315d9af45c4SRobert Watson: ${FGREP="$GREP -F"}
3163b97a967SRobert Watson: ${LN_S="ln -s"}
3173b97a967SRobert Watson: ${MAKE="make"}
3183b97a967SRobert Watson: ${MKDIR="mkdir"}
3193b97a967SRobert Watson: ${MV="mv -f"}
3203b97a967SRobert Watson: ${RM="rm -f"}
3213b97a967SRobert Watson: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
3223b97a967SRobert Watson
3233b97a967SRobert Watson
3243b97a967SRobert Watson## -------------------- ##
3253b97a967SRobert Watson## Useful sed snippets. ##
3263b97a967SRobert Watson## -------------------- ##
3273b97a967SRobert Watson
3283b97a967SRobert Watsonsed_dirname='s|/[^/]*$||'
3293b97a967SRobert Watsonsed_basename='s|^.*/||'
3303b97a967SRobert Watson
3313b97a967SRobert Watson# Sed substitution that helps us do robust quoting.  It backslashifies
3323b97a967SRobert Watson# metacharacters that are still active within double-quoted strings.
3333b97a967SRobert Watsonsed_quote_subst='s|\([`"$\\]\)|\\\1|g'
3343b97a967SRobert Watson
3353b97a967SRobert Watson# Same as above, but do not quote variable references.
3363b97a967SRobert Watsonsed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
3373b97a967SRobert Watson
3383b97a967SRobert Watson# Sed substitution that turns a string into a regex matching for the
3393b97a967SRobert Watson# string literally.
3403b97a967SRobert Watsonsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
3413b97a967SRobert Watson
3423b97a967SRobert Watson# Sed substitution that converts a w32 file name or path
3433b97a967SRobert Watson# that contains forward slashes, into one that contains
3443b97a967SRobert Watson# (escaped) backslashes.  A very naive implementation.
3453b97a967SRobert Watsonsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
3463b97a967SRobert Watson
3473b97a967SRobert Watson# Re-'\' parameter expansions in output of sed_double_quote_subst that
3483b97a967SRobert Watson# were '\'-ed in input to the same.  If an odd number of '\' preceded a
3493b97a967SRobert Watson# '$' in input to sed_double_quote_subst, that '$' was protected from
3503b97a967SRobert Watson# expansion.  Since each input '\' is now two '\'s, look for any number
3513b97a967SRobert Watson# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
3523b97a967SRobert Watson_G_bs='\\'
3533b97a967SRobert Watson_G_bs2='\\\\'
3543b97a967SRobert Watson_G_bs4='\\\\\\\\'
3553b97a967SRobert Watson_G_dollar='\$'
3563b97a967SRobert Watsonsed_double_backslash="\
3573b97a967SRobert Watson  s/$_G_bs4/&\\
3583b97a967SRobert Watson/g
3593b97a967SRobert Watson  s/^$_G_bs2$_G_dollar/$_G_bs&/
3603b97a967SRobert Watson  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
3613b97a967SRobert Watson  s/\n//g"
3623b97a967SRobert Watson
3633b97a967SRobert Watson
3643b97a967SRobert Watson## ----------------- ##
3653b97a967SRobert Watson## Global variables. ##
3663b97a967SRobert Watson## ----------------- ##
3673b97a967SRobert Watson
3683b97a967SRobert Watson# Except for the global variables explicitly listed below, the following
3693b97a967SRobert Watson# functions in the '^func_' namespace, and the '^require_' namespace
3703b97a967SRobert Watson# variables initialised in the 'Resource management' section, sourcing
3713b97a967SRobert Watson# this file will not pollute your global namespace with anything
3723b97a967SRobert Watson# else. There's no portable way to scope variables in Bourne shell
3733b97a967SRobert Watson# though, so actually running these functions will sometimes place
3743b97a967SRobert Watson# results into a variable named after the function, and often use
3753b97a967SRobert Watson# temporary variables in the '^_G_' namespace. If you are careful to
3763b97a967SRobert Watson# avoid using those namespaces casually in your sourcing script, things
377eb336521SRobert Watson# should continue to work as you expect. And, of course, you can freely
378eb336521SRobert Watson# overwrite any of the functions or variables defined here before
379eb336521SRobert Watson# calling anything to customize them.
380eb336521SRobert Watson
381eb336521SRobert WatsonEXIT_SUCCESS=0
382eb336521SRobert WatsonEXIT_FAILURE=1
383eb336521SRobert WatsonEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
384eb336521SRobert WatsonEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
385eb336521SRobert Watson
386eb336521SRobert Watson# Allow overriding, eg assuming that you follow the convention of
387eb336521SRobert Watson# putting '$debug_cmd' at the start of all your functions, you can get
3883b97a967SRobert Watson# bash to show function call trace with:
3893b97a967SRobert Watson#
3903b97a967SRobert Watson#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
3913b97a967SRobert Watsondebug_cmd=${debug_cmd-":"}
3923b97a967SRobert Watsonexit_cmd=:
393d9af45c4SRobert Watson
394d9af45c4SRobert Watson# By convention, finish your script with:
395d9af45c4SRobert Watson#
3963b97a967SRobert Watson#    exit $exit_status
3973b97a967SRobert Watson#
3983b97a967SRobert Watson# so that you can set exit_status to non-zero if you want to indicate
3993b97a967SRobert Watson# something went wrong during execution without actually bailing out at
4003b97a967SRobert Watson# the point of failure.
4013b97a967SRobert Watsonexit_status=$EXIT_SUCCESS
4023b97a967SRobert Watson
4033b97a967SRobert Watson# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
4043b97a967SRobert Watson# is ksh but when the shell is invoked as "sh" and the current value of
4053b97a967SRobert Watson# the _XPG environment variable is not equal to 1 (one), the special
4063b97a967SRobert Watson# positional parameter $0, within a function call, is the name of the
4073b97a967SRobert Watson# function.
4083b97a967SRobert Watsonprogpath=$0
4093b97a967SRobert Watson
4103b97a967SRobert Watson# The name of this program.
4113b97a967SRobert Watsonprogname=`$ECHO "$progpath" |$SED "$sed_basename"`
4123b97a967SRobert Watson
4133b97a967SRobert Watson# Make sure we have an absolute progpath for reexecution:
4143b97a967SRobert Watsoncase $progpath in
4153b97a967SRobert Watson  [\\/]*|[A-Za-z]:\\*) ;;
4163b97a967SRobert Watson  *[\\/]*)
4173b97a967SRobert Watson     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
4183b97a967SRobert Watson     progdir=`cd "$progdir" && pwd`
4193b97a967SRobert Watson     progpath=$progdir/$progname
4203b97a967SRobert Watson     ;;
4213b97a967SRobert Watson  *)
4223b97a967SRobert Watson     _G_IFS=$IFS
4233b97a967SRobert Watson     IFS=${PATH_SEPARATOR-:}
4243b97a967SRobert Watson     for progdir in $PATH; do
4253b97a967SRobert Watson       IFS=$_G_IFS
4263b97a967SRobert Watson       test -x "$progdir/$progname" && break
4273b97a967SRobert Watson     done
4283b97a967SRobert Watson     IFS=$_G_IFS
4293b97a967SRobert Watson     test -n "$progdir" || progdir=`pwd`
4303b97a967SRobert Watson     progpath=$progdir/$progname
4313b97a967SRobert Watson     ;;
4323b97a967SRobert Watsonesac
4333b97a967SRobert Watson
4343b97a967SRobert Watson
4353b97a967SRobert Watson## ----------------- ##
4363b97a967SRobert Watson## Standard options. ##
4373b97a967SRobert Watson## ----------------- ##
4383b97a967SRobert Watson
4393b97a967SRobert Watson# The following options affect the operation of the functions defined
4403b97a967SRobert Watson# below, and should be set appropriately depending on run-time para-
4413b97a967SRobert Watson# meters passed on the command line.
4423b97a967SRobert Watson
4433b97a967SRobert Watsonopt_dry_run=false
4443b97a967SRobert Watsonopt_quiet=false
4453b97a967SRobert Watsonopt_verbose=false
4463b97a967SRobert Watson
4473b97a967SRobert Watson# Categories 'all' and 'none' are always available.  Append any others
4483b97a967SRobert Watson# you will pass as the first argument to func_warning from your own
4493b97a967SRobert Watson# code.
450d9af45c4SRobert Watsonwarning_categories=
451d9af45c4SRobert Watson
4523b97a967SRobert Watson# By default, display warnings according to 'opt_warning_types'.  Set
4533b97a967SRobert Watson# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
4543b97a967SRobert Watson# treat the next displayed warning as a fatal error.
4553b97a967SRobert Watsonwarning_func=func_warn_and_continue
4563b97a967SRobert Watson
4573b97a967SRobert Watson# Set to 'all' to display all warnings, 'none' to suppress all
4583b97a967SRobert Watson# warnings, or a space delimited list of some subset of
4593b97a967SRobert Watson# 'warning_categories' to display only the listed warnings.
4603b97a967SRobert Watsonopt_warning_types=all
4613b97a967SRobert Watson
4623b97a967SRobert Watson
4633b97a967SRobert Watson## -------------------- ##
4643b97a967SRobert Watson## Resource management. ##
4653b97a967SRobert Watson## -------------------- ##
4663b97a967SRobert Watson
4673b97a967SRobert Watson# This section contains definitions for functions that each ensure a
4683b97a967SRobert Watson# particular resource (a file, or a non-empty configuration variable for
4693b97a967SRobert Watson# example) is available, and if appropriate to extract default values
4703b97a967SRobert Watson# from pertinent package files. Call them using their associated
4713b97a967SRobert Watson# 'require_*' variable to ensure that they are executed, at most, once.
4723b97a967SRobert Watson#
4733b97a967SRobert Watson# It's entirely deliberate that calling these functions can set
4743b97a967SRobert Watson# variables that don't obey the namespace limitations obeyed by the rest
4753b97a967SRobert Watson# of this file, in order that that they be as useful as possible to
4763b97a967SRobert Watson# callers.
4773b97a967SRobert Watson
4783b97a967SRobert Watson
4793b97a967SRobert Watson# require_term_colors
4803b97a967SRobert Watson# -------------------
4813b97a967SRobert Watson# Allow display of bold text on terminals that support it.
4823b97a967SRobert Watsonrequire_term_colors=func_require_term_colors
4833b97a967SRobert Watsonfunc_require_term_colors ()
4843b97a967SRobert Watson{
4853b97a967SRobert Watson    $debug_cmd
4863b97a967SRobert Watson
4873b97a967SRobert Watson    test -t 1 && {
4883b97a967SRobert Watson      # COLORTERM and USE_ANSI_COLORS environment variables take
4893b97a967SRobert Watson      # precedence, because most terminfo databases neglect to describe
4903b97a967SRobert Watson      # whether color sequences are supported.
4913b97a967SRobert Watson      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
4923b97a967SRobert Watson
4933b97a967SRobert Watson      if test 1 = "$USE_ANSI_COLORS"; then
4943b97a967SRobert Watson        # Standard ANSI escape sequences
4953b97a967SRobert Watson        tc_reset=''
4963b97a967SRobert Watson        tc_bold='';   tc_standout=''
4973b97a967SRobert Watson        tc_red='';   tc_green=''
4983b97a967SRobert Watson        tc_blue='';  tc_cyan=''
4993b97a967SRobert Watson      else
5003b97a967SRobert Watson        # Otherwise trust the terminfo database after all.
5013b97a967SRobert Watson        test -n "`tput sgr0 2>/dev/null`" && {
5023b97a967SRobert Watson          tc_reset=`tput sgr0`
5033b97a967SRobert Watson          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
5043b97a967SRobert Watson          tc_standout=$tc_bold
5053b97a967SRobert Watson          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
5063b97a967SRobert Watson          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
5073b97a967SRobert Watson          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
5083b97a967SRobert Watson          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
5093b97a967SRobert Watson          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
5103b97a967SRobert Watson        }
5113b97a967SRobert Watson      fi
5123b97a967SRobert Watson    }
5133b97a967SRobert Watson
514eb336521SRobert Watson    require_term_colors=:
515eb336521SRobert Watson}
516eb336521SRobert Watson
517eb336521SRobert Watson
518eb336521SRobert Watson## ----------------- ##
519eb336521SRobert Watson## Function library. ##
5203b97a967SRobert Watson## ----------------- ##
5213b97a967SRobert Watson
5223b97a967SRobert Watson# This section contains a variety of useful functions to call in your
5233b97a967SRobert Watson# scripts. Take note of the portable wrappers for features provided by
5243b97a967SRobert Watson# some modern shells, which will fall back to slower equivalents on
5253b97a967SRobert Watson# less featureful shells.
5263b97a967SRobert Watson
5273b97a967SRobert Watson
5283b97a967SRobert Watson# func_append VAR VALUE
5293b97a967SRobert Watson# ---------------------
5303b97a967SRobert Watson# Append VALUE onto the existing contents of VAR.
5313b97a967SRobert Watson
5323b97a967SRobert Watson  # We should try to minimise forks, especially on Windows where they are
5333b97a967SRobert Watson  # unreasonably slow, so skip the feature probes when bash or zsh are
5343b97a967SRobert Watson  # being used:
5353b97a967SRobert Watson  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
5363b97a967SRobert Watson    : ${_G_HAVE_ARITH_OP="yes"}
5373b97a967SRobert Watson    : ${_G_HAVE_XSI_OPS="yes"}
5383b97a967SRobert Watson    # The += operator was introduced in bash 3.1
5393b97a967SRobert Watson    case $BASH_VERSION in
5403b97a967SRobert Watson      [12].* | 3.0 | 3.0*) ;;
5413b97a967SRobert Watson      *)
5423b97a967SRobert Watson        : ${_G_HAVE_PLUSEQ_OP="yes"}
5433b97a967SRobert Watson        ;;
5443b97a967SRobert Watson    esac
5453b97a967SRobert Watson  fi
5463b97a967SRobert Watson
5473b97a967SRobert Watson  # _G_HAVE_PLUSEQ_OP
5483b97a967SRobert Watson  # Can be empty, in which case the shell is probed, "yes" if += is
5493b97a967SRobert Watson  # useable or anything else if it does not work.
5503b97a967SRobert Watson  test -z "$_G_HAVE_PLUSEQ_OP" \
5513b97a967SRobert Watson    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
5523b97a967SRobert Watson    && _G_HAVE_PLUSEQ_OP=yes
5533b97a967SRobert Watson
5543b97a967SRobert Watsonif test yes = "$_G_HAVE_PLUSEQ_OP"
5553b97a967SRobert Watsonthen
5563b97a967SRobert Watson  # This is an XSI compatible shell, allowing a faster implementation...
5573b97a967SRobert Watson  eval 'func_append ()
5583b97a967SRobert Watson  {
5593b97a967SRobert Watson    $debug_cmd
5603b97a967SRobert Watson
5613b97a967SRobert Watson    eval "$1+=\$2"
5623b97a967SRobert Watson  }'
5633b97a967SRobert Watsonelse
5643b97a967SRobert Watson  # ...otherwise fall back to using expr, which is often a shell builtin.
5653b97a967SRobert Watson  func_append ()
5663b97a967SRobert Watson  {
5673b97a967SRobert Watson    $debug_cmd
5683b97a967SRobert Watson
569d9af45c4SRobert Watson    eval "$1=\$$1\$2"
570d9af45c4SRobert Watson  }
571d9af45c4SRobert Watsonfi
572d9af45c4SRobert Watson
573d9af45c4SRobert Watson
5743b97a967SRobert Watson# func_append_quoted VAR VALUE
5753b97a967SRobert Watson# ----------------------------
5763b97a967SRobert Watson# Quote VALUE and append to the end of shell variable VAR, separated
5773b97a967SRobert Watson# by a space.
5783b97a967SRobert Watsonif test yes = "$_G_HAVE_PLUSEQ_OP"; then
5793b97a967SRobert Watson  eval 'func_append_quoted ()
5803b97a967SRobert Watson  {
5813b97a967SRobert Watson    $debug_cmd
5823b97a967SRobert Watson
5833b97a967SRobert Watson    func_quote_for_eval "$2"
5843b97a967SRobert Watson    eval "$1+=\\ \$func_quote_for_eval_result"
5853b97a967SRobert Watson  }'
5863b97a967SRobert Watsonelse
5873b97a967SRobert Watson  func_append_quoted ()
5883b97a967SRobert Watson  {
5893b97a967SRobert Watson    $debug_cmd
5903b97a967SRobert Watson
5913b97a967SRobert Watson    func_quote_for_eval "$2"
5923b97a967SRobert Watson    eval "$1=\$$1\\ \$func_quote_for_eval_result"
5933b97a967SRobert Watson  }
5943b97a967SRobert Watsonfi
5953b97a967SRobert Watson
5963b97a967SRobert Watson
5973b97a967SRobert Watson# func_append_uniq VAR VALUE
5983b97a967SRobert Watson# --------------------------
5993b97a967SRobert Watson# Append unique VALUE onto the existing contents of VAR, assuming
6003b97a967SRobert Watson# entries are delimited by the first character of VALUE.  For example:
6013b97a967SRobert Watson#
6023b97a967SRobert Watson#   func_append_uniq options " --another-option option-argument"
6033b97a967SRobert Watson#
6043b97a967SRobert Watson# will only append to $options if " --another-option option-argument "
605d9af45c4SRobert Watson# is not already present somewhere in $options already (note spaces at
606d9af45c4SRobert Watson# each end implied by leading space in second argument).
607d9af45c4SRobert Watsonfunc_append_uniq ()
608d9af45c4SRobert Watson{
609d9af45c4SRobert Watson    $debug_cmd
610d9af45c4SRobert Watson
611d9af45c4SRobert Watson    eval _G_current_value='`$ECHO $'$1'`'
612d9af45c4SRobert Watson    _G_delim=`expr "$2" : '\(.\)'`
613d9af45c4SRobert Watson
614d9af45c4SRobert Watson    case $_G_delim$_G_current_value$_G_delim in
615d9af45c4SRobert Watson      *"$2$_G_delim"*) ;;
616d9af45c4SRobert Watson      *) func_append "$@" ;;
6173b97a967SRobert Watson    esac
6183b97a967SRobert Watson}
6193b97a967SRobert Watson
6203b97a967SRobert Watson
6213b97a967SRobert Watson# func_arith TERM...
6223b97a967SRobert Watson# ------------------
6233b97a967SRobert Watson# Set func_arith_result to the result of evaluating TERMs.
6243b97a967SRobert Watson  test -z "$_G_HAVE_ARITH_OP" \
6253b97a967SRobert Watson    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
6263b97a967SRobert Watson    && _G_HAVE_ARITH_OP=yes
6273b97a967SRobert Watson
6283b97a967SRobert Watsonif test yes = "$_G_HAVE_ARITH_OP"; then
6293b97a967SRobert Watson  eval 'func_arith ()
6303b97a967SRobert Watson  {
6313b97a967SRobert Watson    $debug_cmd
6323b97a967SRobert Watson
6333b97a967SRobert Watson    func_arith_result=$(( $* ))
6343b97a967SRobert Watson  }'
6353b97a967SRobert Watsonelse
6363b97a967SRobert Watson  func_arith ()
6373b97a967SRobert Watson  {
6383b97a967SRobert Watson    $debug_cmd
6393b97a967SRobert Watson
6403b97a967SRobert Watson    func_arith_result=`expr "$@"`
6413b97a967SRobert Watson  }
6423b97a967SRobert Watsonfi
6433b97a967SRobert Watson
6443b97a967SRobert Watson
6453b97a967SRobert Watson# func_basename FILE
6463b97a967SRobert Watson# ------------------
6473b97a967SRobert Watson# Set func_basename_result to FILE with everything up to and including
6483b97a967SRobert Watson# the last / stripped.
6493b97a967SRobert Watsonif test yes = "$_G_HAVE_XSI_OPS"; then
6503b97a967SRobert Watson  # If this shell supports suffix pattern removal, then use it to avoid
6513b97a967SRobert Watson  # forking. Hide the definitions single quotes in case the shell chokes
6523b97a967SRobert Watson  # on unsupported syntax...
6533b97a967SRobert Watson  _b='func_basename_result=${1##*/}'
6543b97a967SRobert Watson  _d='case $1 in
6553b97a967SRobert Watson        */*) func_dirname_result=${1%/*}$2 ;;
6563b97a967SRobert Watson        *  ) func_dirname_result=$3        ;;
6573b97a967SRobert Watson      esac'
6583b97a967SRobert Watson
6593b97a967SRobert Watsonelse
6603b97a967SRobert Watson  # ...otherwise fall back to using sed.
6613b97a967SRobert Watson  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
6623b97a967SRobert Watson  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
6633b97a967SRobert Watson      if test "X$func_dirname_result" = "X$1"; then
6643b97a967SRobert Watson        func_dirname_result=$3
6653b97a967SRobert Watson      else
6663b97a967SRobert Watson        func_append func_dirname_result "$2"
6673b97a967SRobert Watson      fi'
6683b97a967SRobert Watsonfi
6693b97a967SRobert Watson
6703b97a967SRobert Watsoneval 'func_basename ()
6713b97a967SRobert Watson{
6723b97a967SRobert Watson    $debug_cmd
6733b97a967SRobert Watson
6743b97a967SRobert Watson    '"$_b"'
6753b97a967SRobert Watson}'
6763b97a967SRobert Watson
6773b97a967SRobert Watson
6783b97a967SRobert Watson# func_dirname FILE APPEND NONDIR_REPLACEMENT
6793b97a967SRobert Watson# -------------------------------------------
6803b97a967SRobert Watson# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
6813b97a967SRobert Watson# otherwise set result to NONDIR_REPLACEMENT.
6823b97a967SRobert Watsoneval 'func_dirname ()
6833b97a967SRobert Watson{
6843b97a967SRobert Watson    $debug_cmd
6853b97a967SRobert Watson
6863b97a967SRobert Watson    '"$_d"'
6873b97a967SRobert Watson}'
6883b97a967SRobert Watson
6893b97a967SRobert Watson
6903b97a967SRobert Watson# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
6913b97a967SRobert Watson# --------------------------------------------------------
6923b97a967SRobert Watson# Perform func_basename and func_dirname in a single function
6933b97a967SRobert Watson# call:
6943b97a967SRobert Watson#   dirname:  Compute the dirname of FILE.  If nonempty,
6953b97a967SRobert Watson#             add APPEND to the result, otherwise set result
6963b97a967SRobert Watson#             to NONDIR_REPLACEMENT.
6973b97a967SRobert Watson#             value returned in "$func_dirname_result"
6983b97a967SRobert Watson#   basename: Compute filename of FILE.
6993b97a967SRobert Watson#             value retuned in "$func_basename_result"
7003b97a967SRobert Watson# For efficiency, we do not delegate to the functions above but instead
7013b97a967SRobert Watson# duplicate the functionality here.
7023b97a967SRobert Watsoneval 'func_dirname_and_basename ()
7033b97a967SRobert Watson{
7043b97a967SRobert Watson    $debug_cmd
7053b97a967SRobert Watson
7063b97a967SRobert Watson    '"$_b"'
7073b97a967SRobert Watson    '"$_d"'
7083b97a967SRobert Watson}'
7093b97a967SRobert Watson
7103b97a967SRobert Watson
7113b97a967SRobert Watson# func_echo ARG...
7123b97a967SRobert Watson# ----------------
7133b97a967SRobert Watson# Echo program name prefixed message.
7143b97a967SRobert Watsonfunc_echo ()
7153b97a967SRobert Watson{
7163b97a967SRobert Watson    $debug_cmd
7173b97a967SRobert Watson
7183b97a967SRobert Watson    _G_message=$*
7193b97a967SRobert Watson
7203b97a967SRobert Watson    func_echo_IFS=$IFS
7213b97a967SRobert Watson    IFS=$nl
7223b97a967SRobert Watson    for _G_line in $_G_message; do
7233b97a967SRobert Watson      IFS=$func_echo_IFS
7243b97a967SRobert Watson      $ECHO "$progname: $_G_line"
7253b97a967SRobert Watson    done
7263b97a967SRobert Watson    IFS=$func_echo_IFS
7273b97a967SRobert Watson}
7283b97a967SRobert Watson
7293b97a967SRobert Watson
7303b97a967SRobert Watson# func_echo_all ARG...
7313b97a967SRobert Watson# --------------------
7323b97a967SRobert Watson# Invoke $ECHO with all args, space-separated.
7333b97a967SRobert Watsonfunc_echo_all ()
7343b97a967SRobert Watson{
7353b97a967SRobert Watson    $ECHO "$*"
7363b97a967SRobert Watson}
7373b97a967SRobert Watson
7383b97a967SRobert Watson
7393b97a967SRobert Watson# func_echo_infix_1 INFIX ARG...
7403b97a967SRobert Watson# ------------------------------
7413b97a967SRobert Watson# Echo program name, followed by INFIX on the first line, with any
7423b97a967SRobert Watson# additional lines not showing INFIX.
7433b97a967SRobert Watsonfunc_echo_infix_1 ()
7443b97a967SRobert Watson{
7453b97a967SRobert Watson    $debug_cmd
7463b97a967SRobert Watson
7473b97a967SRobert Watson    $require_term_colors
7483b97a967SRobert Watson
7493b97a967SRobert Watson    _G_infix=$1; shift
7503b97a967SRobert Watson    _G_indent=$_G_infix
7513b97a967SRobert Watson    _G_prefix="$progname: $_G_infix: "
7523b97a967SRobert Watson    _G_message=$*
7533b97a967SRobert Watson
7543b97a967SRobert Watson    # Strip color escape sequences before counting printable length
7553b97a967SRobert Watson    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
7563b97a967SRobert Watson    do
7573b97a967SRobert Watson      test -n "$_G_tc" && {
7583b97a967SRobert Watson        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
7593b97a967SRobert Watson        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
7603b97a967SRobert Watson      }
7613b97a967SRobert Watson    done
7623b97a967SRobert Watson    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
7633b97a967SRobert Watson
7643b97a967SRobert Watson    func_echo_infix_1_IFS=$IFS
7653b97a967SRobert Watson    IFS=$nl
7663b97a967SRobert Watson    for _G_line in $_G_message; do
7673b97a967SRobert Watson      IFS=$func_echo_infix_1_IFS
7683b97a967SRobert Watson      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
7693b97a967SRobert Watson      _G_prefix=$_G_indent
7703b97a967SRobert Watson    done
7713b97a967SRobert Watson    IFS=$func_echo_infix_1_IFS
7723b97a967SRobert Watson}
7733b97a967SRobert Watson
7743b97a967SRobert Watson
7753b97a967SRobert Watson# func_error ARG...
7763b97a967SRobert Watson# -----------------
7773b97a967SRobert Watson# Echo program name prefixed message to standard error.
7783b97a967SRobert Watsonfunc_error ()
7793b97a967SRobert Watson{
7803b97a967SRobert Watson    $debug_cmd
7813b97a967SRobert Watson
7823b97a967SRobert Watson    $require_term_colors
7833b97a967SRobert Watson
7843b97a967SRobert Watson    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
7853b97a967SRobert Watson}
7863b97a967SRobert Watson
7873b97a967SRobert Watson
7883b97a967SRobert Watson# func_fatal_error ARG...
7893b97a967SRobert Watson# -----------------------
7903b97a967SRobert Watson# Echo program name prefixed message to standard error, and exit.
7913b97a967SRobert Watsonfunc_fatal_error ()
7923b97a967SRobert Watson{
7933b97a967SRobert Watson    $debug_cmd
7943b97a967SRobert Watson
7953b97a967SRobert Watson    func_error "$*"
7963b97a967SRobert Watson    exit $EXIT_FAILURE
7973b97a967SRobert Watson}
7983b97a967SRobert Watson
7993b97a967SRobert Watson
8003b97a967SRobert Watson# func_grep EXPRESSION FILENAME
8013b97a967SRobert Watson# -----------------------------
8023b97a967SRobert Watson# Check whether EXPRESSION matches any line of FILENAME, without output.
8033b97a967SRobert Watsonfunc_grep ()
8043b97a967SRobert Watson{
8053b97a967SRobert Watson    $debug_cmd
8063b97a967SRobert Watson
8073b97a967SRobert Watson    $GREP "$1" "$2" >/dev/null 2>&1
8083b97a967SRobert Watson}
8093b97a967SRobert Watson
8103b97a967SRobert Watson
8113b97a967SRobert Watson# func_len STRING
8123b97a967SRobert Watson# ---------------
8133b97a967SRobert Watson# Set func_len_result to the length of STRING. STRING may not
8143b97a967SRobert Watson# start with a hyphen.
8153b97a967SRobert Watson  test -z "$_G_HAVE_XSI_OPS" \
816eb336521SRobert Watson    && (eval 'x=a/b/c;
8173b97a967SRobert Watson      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
8183b97a967SRobert Watson    && _G_HAVE_XSI_OPS=yes
819eb336521SRobert Watson
8203b97a967SRobert Watsonif test yes = "$_G_HAVE_XSI_OPS"; then
8213b97a967SRobert Watson  eval 'func_len ()
8223b97a967SRobert Watson  {
8233b97a967SRobert Watson    $debug_cmd
8243b97a967SRobert Watson
8253b97a967SRobert Watson    func_len_result=${#1}
8263b97a967SRobert Watson  }'
8273b97a967SRobert Watsonelse
8283b97a967SRobert Watson  func_len ()
8293b97a967SRobert Watson  {
8303b97a967SRobert Watson    $debug_cmd
8313b97a967SRobert Watson
8323b97a967SRobert Watson    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
8333b97a967SRobert Watson  }
8343b97a967SRobert Watsonfi
8353b97a967SRobert Watson
8363b97a967SRobert Watson
8373b97a967SRobert Watson# func_mkdir_p DIRECTORY-PATH
8383b97a967SRobert Watson# ---------------------------
8393b97a967SRobert Watson# Make sure the entire path to DIRECTORY-PATH is available.
8403b97a967SRobert Watsonfunc_mkdir_p ()
8413b97a967SRobert Watson{
8423b97a967SRobert Watson    $debug_cmd
8433b97a967SRobert Watson
8443b97a967SRobert Watson    _G_directory_path=$1
8453b97a967SRobert Watson    _G_dir_list=
8463b97a967SRobert Watson
8473b97a967SRobert Watson    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
8483b97a967SRobert Watson
8493b97a967SRobert Watson      # Protect directory names starting with '-'
8503b97a967SRobert Watson      case $_G_directory_path in
8513b97a967SRobert Watson        -*) _G_directory_path=./$_G_directory_path ;;
8523b97a967SRobert Watson      esac
8533b97a967SRobert Watson
8543b97a967SRobert Watson      # While some portion of DIR does not yet exist...
8553b97a967SRobert Watson      while test ! -d "$_G_directory_path"; do
8563b97a967SRobert Watson        # ...make a list in topmost first order.  Use a colon delimited
8573b97a967SRobert Watson	# list incase some portion of path contains whitespace.
8583b97a967SRobert Watson        _G_dir_list=$_G_directory_path:$_G_dir_list
8593b97a967SRobert Watson
8603b97a967SRobert Watson        # If the last portion added has no slash in it, the list is done
8613b97a967SRobert Watson        case $_G_directory_path in */*) ;; *) break ;; esac
8623b97a967SRobert Watson
8633b97a967SRobert Watson        # ...otherwise throw away the child directory and loop
8643b97a967SRobert Watson        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
8653b97a967SRobert Watson      done
8663b97a967SRobert Watson      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
8673b97a967SRobert Watson
8683b97a967SRobert Watson      func_mkdir_p_IFS=$IFS; IFS=:
8693b97a967SRobert Watson      for _G_dir in $_G_dir_list; do
8703b97a967SRobert Watson	IFS=$func_mkdir_p_IFS
8713b97a967SRobert Watson        # mkdir can fail with a 'File exist' error if two processes
8723b97a967SRobert Watson        # try to create one of the directories concurrently.  Don't
8733b97a967SRobert Watson        # stop in that case!
8743b97a967SRobert Watson        $MKDIR "$_G_dir" 2>/dev/null || :
8753b97a967SRobert Watson      done
8763b97a967SRobert Watson      IFS=$func_mkdir_p_IFS
8773b97a967SRobert Watson
8783b97a967SRobert Watson      # Bail out if we (or some other process) failed to create a directory.
8793b97a967SRobert Watson      test -d "$_G_directory_path" || \
8803b97a967SRobert Watson        func_fatal_error "Failed to create '$1'"
8813b97a967SRobert Watson    fi
8823b97a967SRobert Watson}
8833b97a967SRobert Watson
8843b97a967SRobert Watson
8853b97a967SRobert Watson# func_mktempdir [BASENAME]
8863b97a967SRobert Watson# -------------------------
8873b97a967SRobert Watson# Make a temporary directory that won't clash with other running
8883b97a967SRobert Watson# libtool processes, and avoids race conditions if possible.  If
8893b97a967SRobert Watson# given, BASENAME is the basename for that directory.
8903b97a967SRobert Watsonfunc_mktempdir ()
8913b97a967SRobert Watson{
8923b97a967SRobert Watson    $debug_cmd
8933b97a967SRobert Watson
8943b97a967SRobert Watson    _G_template=${TMPDIR-/tmp}/${1-$progname}
8953b97a967SRobert Watson
8963b97a967SRobert Watson    if test : = "$opt_dry_run"; then
8973b97a967SRobert Watson      # Return a directory name, but don't create it in dry-run mode
8983b97a967SRobert Watson      _G_tmpdir=$_G_template-$$
8993b97a967SRobert Watson    else
9003b97a967SRobert Watson
9013b97a967SRobert Watson      # If mktemp works, use that first and foremost
9023b97a967SRobert Watson      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
9033b97a967SRobert Watson
9043b97a967SRobert Watson      if test ! -d "$_G_tmpdir"; then
9053b97a967SRobert Watson        # Failing that, at least try and use $RANDOM to avoid a race
9063b97a967SRobert Watson        _G_tmpdir=$_G_template-${RANDOM-0}$$
9073b97a967SRobert Watson
9083b97a967SRobert Watson        func_mktempdir_umask=`umask`
9093b97a967SRobert Watson        umask 0077
9103b97a967SRobert Watson        $MKDIR "$_G_tmpdir"
9113b97a967SRobert Watson        umask $func_mktempdir_umask
9123b97a967SRobert Watson      fi
9133b97a967SRobert Watson
9143b97a967SRobert Watson      # If we're not in dry-run mode, bomb out on failure
9153b97a967SRobert Watson      test -d "$_G_tmpdir" || \
9163b97a967SRobert Watson        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
9173b97a967SRobert Watson    fi
9183b97a967SRobert Watson
9193b97a967SRobert Watson    $ECHO "$_G_tmpdir"
9203b97a967SRobert Watson}
9213b97a967SRobert Watson
9223b97a967SRobert Watson
9233b97a967SRobert Watson# func_normal_abspath PATH
9243b97a967SRobert Watson# ------------------------
9253b97a967SRobert Watson# Remove doubled-up and trailing slashes, "." path components,
9263b97a967SRobert Watson# and cancel out any ".." path components in PATH after making
9273b97a967SRobert Watson# it an absolute path.
9283b97a967SRobert Watsonfunc_normal_abspath ()
9293b97a967SRobert Watson{
9303b97a967SRobert Watson    $debug_cmd
9313b97a967SRobert Watson
9323b97a967SRobert Watson    # These SED scripts presuppose an absolute path with a trailing slash.
9333b97a967SRobert Watson    _G_pathcar='s|^/\([^/]*\).*$|\1|'
9343b97a967SRobert Watson    _G_pathcdr='s|^/[^/]*||'
9353b97a967SRobert Watson    _G_removedotparts=':dotsl
9363b97a967SRobert Watson		s|/\./|/|g
9373b97a967SRobert Watson		t dotsl
9383b97a967SRobert Watson		s|/\.$|/|'
9393b97a967SRobert Watson    _G_collapseslashes='s|/\{1,\}|/|g'
9403b97a967SRobert Watson    _G_finalslash='s|/*$|/|'
9413b97a967SRobert Watson
9423b97a967SRobert Watson    # Start from root dir and reassemble the path.
9433b97a967SRobert Watson    func_normal_abspath_result=
9443b97a967SRobert Watson    func_normal_abspath_tpath=$1
9453b97a967SRobert Watson    func_normal_abspath_altnamespace=
9463b97a967SRobert Watson    case $func_normal_abspath_tpath in
9473b97a967SRobert Watson      "")
9483b97a967SRobert Watson        # Empty path, that just means $cwd.
9493b97a967SRobert Watson        func_stripname '' '/' "`pwd`"
9503b97a967SRobert Watson        func_normal_abspath_result=$func_stripname_result
9513b97a967SRobert Watson        return
9523b97a967SRobert Watson        ;;
9533b97a967SRobert Watson      # The next three entries are used to spot a run of precisely
9543b97a967SRobert Watson      # two leading slashes without using negated character classes;
9553b97a967SRobert Watson      # we take advantage of case's first-match behaviour.
9563b97a967SRobert Watson      ///*)
9573b97a967SRobert Watson        # Unusual form of absolute path, do nothing.
9583b97a967SRobert Watson        ;;
9593b97a967SRobert Watson      //*)
9603b97a967SRobert Watson        # Not necessarily an ordinary path; POSIX reserves leading '//'
9613b97a967SRobert Watson        # and for example Cygwin uses it to access remote file shares
9623b97a967SRobert Watson        # over CIFS/SMB, so we conserve a leading double slash if found.
9633b97a967SRobert Watson        func_normal_abspath_altnamespace=/
9643b97a967SRobert Watson        ;;
9653b97a967SRobert Watson      /*)
9663b97a967SRobert Watson        # Absolute path, do nothing.
9673b97a967SRobert Watson        ;;
9683b97a967SRobert Watson      *)
9693b97a967SRobert Watson        # Relative path, prepend $cwd.
9703b97a967SRobert Watson        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
9713b97a967SRobert Watson        ;;
9723b97a967SRobert Watson    esac
9733b97a967SRobert Watson
974d9af45c4SRobert Watson    # Cancel out all the simple stuff to save iterations.  We also want
975d9af45c4SRobert Watson    # the path to end with a slash for ease of parsing, so make sure
976d9af45c4SRobert Watson    # there is one (and only one) here.
9773b97a967SRobert Watson    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
9783b97a967SRobert Watson          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
9793b97a967SRobert Watson    while :; do
9803b97a967SRobert Watson      # Processed it all yet?
9813b97a967SRobert Watson      if test / = "$func_normal_abspath_tpath"; then
9823b97a967SRobert Watson        # If we ascended to the root using ".." the result may be empty now.
9833b97a967SRobert Watson        if test -z "$func_normal_abspath_result"; then
9843b97a967SRobert Watson          func_normal_abspath_result=/
9853b97a967SRobert Watson        fi
9863b97a967SRobert Watson        break
9873b97a967SRobert Watson      fi
9883b97a967SRobert Watson      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
9893b97a967SRobert Watson          -e "$_G_pathcar"`
9903b97a967SRobert Watson      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
9913b97a967SRobert Watson          -e "$_G_pathcdr"`
9923b97a967SRobert Watson      # Figure out what to do with it
9933b97a967SRobert Watson      case $func_normal_abspath_tcomponent in
9943b97a967SRobert Watson        "")
9953b97a967SRobert Watson          # Trailing empty path component, ignore it.
9963b97a967SRobert Watson          ;;
9973b97a967SRobert Watson        ..)
9983b97a967SRobert Watson          # Parent dir; strip last assembled component from result.
9993b97a967SRobert Watson          func_dirname "$func_normal_abspath_result"
10003b97a967SRobert Watson          func_normal_abspath_result=$func_dirname_result
10013b97a967SRobert Watson          ;;
10023b97a967SRobert Watson        *)
10033b97a967SRobert Watson          # Actual path component, append it.
10043b97a967SRobert Watson          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
10053b97a967SRobert Watson          ;;
10063b97a967SRobert Watson      esac
10073b97a967SRobert Watson    done
10083b97a967SRobert Watson    # Restore leading double-slash if one was found on entry.
10093b97a967SRobert Watson    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
10103b97a967SRobert Watson}
10113b97a967SRobert Watson
10123b97a967SRobert Watson
10133b97a967SRobert Watson# func_notquiet ARG...
10143b97a967SRobert Watson# --------------------
10153b97a967SRobert Watson# Echo program name prefixed message only when not in quiet mode.
10163b97a967SRobert Watsonfunc_notquiet ()
10173b97a967SRobert Watson{
10183b97a967SRobert Watson    $debug_cmd
10193b97a967SRobert Watson
10203b97a967SRobert Watson    $opt_quiet || func_echo ${1+"$@"}
10213b97a967SRobert Watson
10223b97a967SRobert Watson    # A bug in bash halts the script if the last line of a function
10233b97a967SRobert Watson    # fails when set -e is in force, so we need another command to
10243b97a967SRobert Watson    # work around that:
10253b97a967SRobert Watson    :
10263b97a967SRobert Watson}
10273b97a967SRobert Watson
10283b97a967SRobert Watson
10293b97a967SRobert Watson# func_relative_path SRCDIR DSTDIR
10303b97a967SRobert Watson# --------------------------------
10313b97a967SRobert Watson# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
10323b97a967SRobert Watsonfunc_relative_path ()
10333b97a967SRobert Watson{
10343b97a967SRobert Watson    $debug_cmd
10353b97a967SRobert Watson
10363b97a967SRobert Watson    func_relative_path_result=
10373b97a967SRobert Watson    func_normal_abspath "$1"
10383b97a967SRobert Watson    func_relative_path_tlibdir=$func_normal_abspath_result
10393b97a967SRobert Watson    func_normal_abspath "$2"
10403b97a967SRobert Watson    func_relative_path_tbindir=$func_normal_abspath_result
10413b97a967SRobert Watson
10423b97a967SRobert Watson    # Ascend the tree starting from libdir
10433b97a967SRobert Watson    while :; do
10443b97a967SRobert Watson      # check if we have found a prefix of bindir
10453b97a967SRobert Watson      case $func_relative_path_tbindir in
10463b97a967SRobert Watson        $func_relative_path_tlibdir)
10473b97a967SRobert Watson          # found an exact match
10483b97a967SRobert Watson          func_relative_path_tcancelled=
10493b97a967SRobert Watson          break
10503b97a967SRobert Watson          ;;
10513b97a967SRobert Watson        $func_relative_path_tlibdir*)
10523b97a967SRobert Watson          # found a matching prefix
10533b97a967SRobert Watson          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
10543b97a967SRobert Watson          func_relative_path_tcancelled=$func_stripname_result
10553b97a967SRobert Watson          if test -z "$func_relative_path_result"; then
10563b97a967SRobert Watson            func_relative_path_result=.
10573b97a967SRobert Watson          fi
10583b97a967SRobert Watson          break
10593b97a967SRobert Watson          ;;
10603b97a967SRobert Watson        *)
10613b97a967SRobert Watson          func_dirname $func_relative_path_tlibdir
10623b97a967SRobert Watson          func_relative_path_tlibdir=$func_dirname_result
10633b97a967SRobert Watson          if test -z "$func_relative_path_tlibdir"; then
10643b97a967SRobert Watson            # Have to descend all the way to the root!
10653b97a967SRobert Watson            func_relative_path_result=../$func_relative_path_result
10663b97a967SRobert Watson            func_relative_path_tcancelled=$func_relative_path_tbindir
10673b97a967SRobert Watson            break
10683b97a967SRobert Watson          fi
10693b97a967SRobert Watson          func_relative_path_result=../$func_relative_path_result
10703b97a967SRobert Watson          ;;
10713b97a967SRobert Watson      esac
10723b97a967SRobert Watson    done
10733b97a967SRobert Watson
10743b97a967SRobert Watson    # Now calculate path; take care to avoid doubling-up slashes.
10753b97a967SRobert Watson    func_stripname '' '/' "$func_relative_path_result"
10763b97a967SRobert Watson    func_relative_path_result=$func_stripname_result
10773b97a967SRobert Watson    func_stripname '/' '/' "$func_relative_path_tcancelled"
10783b97a967SRobert Watson    if test -n "$func_stripname_result"; then
10793b97a967SRobert Watson      func_append func_relative_path_result "/$func_stripname_result"
10803b97a967SRobert Watson    fi
10813b97a967SRobert Watson
10823b97a967SRobert Watson    # Normalisation. If bindir is libdir, return '.' else relative path.
10833b97a967SRobert Watson    if test -n "$func_relative_path_result"; then
10843b97a967SRobert Watson      func_stripname './' '' "$func_relative_path_result"
10853b97a967SRobert Watson      func_relative_path_result=$func_stripname_result
10863b97a967SRobert Watson    fi
10873b97a967SRobert Watson
10883b97a967SRobert Watson    test -n "$func_relative_path_result" || func_relative_path_result=.
10893b97a967SRobert Watson
10903b97a967SRobert Watson    :
10913b97a967SRobert Watson}
10923b97a967SRobert Watson
10933b97a967SRobert Watson
10943b97a967SRobert Watson# func_quote_for_eval ARG...
10953b97a967SRobert Watson# --------------------------
10963b97a967SRobert Watson# Aesthetically quote ARGs to be evaled later.
10973b97a967SRobert Watson# This function returns two values:
10983b97a967SRobert Watson#   i) func_quote_for_eval_result
10993b97a967SRobert Watson#      double-quoted, suitable for a subsequent eval
11003b97a967SRobert Watson#  ii) func_quote_for_eval_unquoted_result
11013b97a967SRobert Watson#      has all characters that are still active within double
11023b97a967SRobert Watson#      quotes backslashified.
11033b97a967SRobert Watsonfunc_quote_for_eval ()
11043b97a967SRobert Watson{
11053b97a967SRobert Watson    $debug_cmd
11063b97a967SRobert Watson
11073b97a967SRobert Watson    func_quote_for_eval_unquoted_result=
11083b97a967SRobert Watson    func_quote_for_eval_result=
11093b97a967SRobert Watson    while test 0 -lt $#; do
11103b97a967SRobert Watson      case $1 in
11113b97a967SRobert Watson        *[\\\`\"\$]*)
11123b97a967SRobert Watson	  _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
11133b97a967SRobert Watson        *)
11143b97a967SRobert Watson          _G_unquoted_arg=$1 ;;
11153b97a967SRobert Watson      esac
11163b97a967SRobert Watson      if test -n "$func_quote_for_eval_unquoted_result"; then
11173b97a967SRobert Watson	func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
11183b97a967SRobert Watson      else
11193b97a967SRobert Watson        func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
11203b97a967SRobert Watson      fi
11213b97a967SRobert Watson
11223b97a967SRobert Watson      case $_G_unquoted_arg in
11233b97a967SRobert Watson        # Double-quote args containing shell metacharacters to delay
11243b97a967SRobert Watson        # word splitting, command substitution and variable expansion
11253b97a967SRobert Watson        # for a subsequent eval.
11263b97a967SRobert Watson        # Many Bourne shells cannot handle close brackets correctly
11273b97a967SRobert Watson        # in scan sets, so we specify it separately.
11283b97a967SRobert Watson        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
11293b97a967SRobert Watson          _G_quoted_arg=\"$_G_unquoted_arg\"
11303b97a967SRobert Watson          ;;
11313b97a967SRobert Watson        *)
11323b97a967SRobert Watson          _G_quoted_arg=$_G_unquoted_arg
11333b97a967SRobert Watson	  ;;
11343b97a967SRobert Watson      esac
11353b97a967SRobert Watson
11363b97a967SRobert Watson      if test -n "$func_quote_for_eval_result"; then
11373b97a967SRobert Watson	func_append func_quote_for_eval_result " $_G_quoted_arg"
11383b97a967SRobert Watson      else
11393b97a967SRobert Watson        func_append func_quote_for_eval_result "$_G_quoted_arg"
11403b97a967SRobert Watson      fi
11413b97a967SRobert Watson      shift
11423b97a967SRobert Watson    done
11433b97a967SRobert Watson}
11443b97a967SRobert Watson
11453b97a967SRobert Watson
11463b97a967SRobert Watson# func_quote_for_expand ARG
11473b97a967SRobert Watson# -------------------------
11483b97a967SRobert Watson# Aesthetically quote ARG to be evaled later; same as above,
11493b97a967SRobert Watson# but do not quote variable references.
11503b97a967SRobert Watsonfunc_quote_for_expand ()
11513b97a967SRobert Watson{
11523b97a967SRobert Watson    $debug_cmd
11533b97a967SRobert Watson
11543b97a967SRobert Watson    case $1 in
11553b97a967SRobert Watson      *[\\\`\"]*)
11563b97a967SRobert Watson	_G_arg=`$ECHO "$1" | $SED \
11573b97a967SRobert Watson	    -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
11583b97a967SRobert Watson      *)
11593b97a967SRobert Watson        _G_arg=$1 ;;
11603b97a967SRobert Watson    esac
11613b97a967SRobert Watson
11623b97a967SRobert Watson    case $_G_arg in
11633b97a967SRobert Watson      # Double-quote args containing shell metacharacters to delay
11643b97a967SRobert Watson      # word splitting and command substitution for a subsequent eval.
11653b97a967SRobert Watson      # Many Bourne shells cannot handle close brackets correctly
11663b97a967SRobert Watson      # in scan sets, so we specify it separately.
11673b97a967SRobert Watson      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
11683b97a967SRobert Watson        _G_arg=\"$_G_arg\"
11693b97a967SRobert Watson        ;;
11703b97a967SRobert Watson    esac
11713b97a967SRobert Watson
11723b97a967SRobert Watson    func_quote_for_expand_result=$_G_arg
11733b97a967SRobert Watson}
11743b97a967SRobert Watson
11753b97a967SRobert Watson
11763b97a967SRobert Watson# func_stripname PREFIX SUFFIX NAME
11773b97a967SRobert Watson# ---------------------------------
11783b97a967SRobert Watson# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
1179d9af45c4SRobert Watson# PREFIX and SUFFIX must not contain globbing or regex special
11803b97a967SRobert Watson# characters, hashes, percent signs, but SUFFIX may contain a leading
11813b97a967SRobert Watson# dot (in which case that matches only a dot).
11823b97a967SRobert Watsonif test yes = "$_G_HAVE_XSI_OPS"; then
11833b97a967SRobert Watson  eval 'func_stripname ()
11843b97a967SRobert Watson  {
11853b97a967SRobert Watson    $debug_cmd
11863b97a967SRobert Watson
11873b97a967SRobert Watson    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
11883b97a967SRobert Watson    # positional parameters, so assign one to ordinary variable first.
11893b97a967SRobert Watson    func_stripname_result=$3
11903b97a967SRobert Watson    func_stripname_result=${func_stripname_result#"$1"}
11913b97a967SRobert Watson    func_stripname_result=${func_stripname_result%"$2"}
11923b97a967SRobert Watson  }'
11933b97a967SRobert Watsonelse
11943b97a967SRobert Watson  func_stripname ()
11953b97a967SRobert Watson  {
11963b97a967SRobert Watson    $debug_cmd
11973b97a967SRobert Watson
11983b97a967SRobert Watson    case $2 in
11993b97a967SRobert Watson      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
1200eb336521SRobert Watson      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
1201eb336521SRobert Watson    esac
1202eb336521SRobert Watson  }
12033b97a967SRobert Watsonfi
12043b97a967SRobert Watson
12053b97a967SRobert Watson
12063b97a967SRobert Watson# func_show_eval CMD [FAIL_EXP]
12073b97a967SRobert Watson# -----------------------------
12083b97a967SRobert Watson# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
1209d9af45c4SRobert Watson# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
1210eb336521SRobert Watson# is given, then evaluate it.
1211eb336521SRobert Watsonfunc_show_eval ()
12123b97a967SRobert Watson{
12133b97a967SRobert Watson    $debug_cmd
12143b97a967SRobert Watson
1215d9af45c4SRobert Watson    _G_cmd=$1
1216eb336521SRobert Watson    _G_fail_exp=${2-':'}
1217eb336521SRobert Watson
1218eb336521SRobert Watson    func_quote_for_expand "$_G_cmd"
1219eb336521SRobert Watson    eval "func_notquiet $func_quote_for_expand_result"
12203b97a967SRobert Watson
1221eb336521SRobert Watson    $opt_dry_run || {
1222eb336521SRobert Watson      eval "$_G_cmd"
1223eb336521SRobert Watson      _G_status=$?
12243b97a967SRobert Watson      if test 0 -ne "$_G_status"; then
12253b97a967SRobert Watson	eval "(exit $_G_status); $_G_fail_exp"
12263b97a967SRobert Watson      fi
12273b97a967SRobert Watson    }
12283b97a967SRobert Watson}
12293b97a967SRobert Watson
12303b97a967SRobert Watson
12313b97a967SRobert Watson# func_show_eval_locale CMD [FAIL_EXP]
12323b97a967SRobert Watson# ------------------------------------
12333b97a967SRobert Watson# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
12343b97a967SRobert Watson# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
12353b97a967SRobert Watson# is given, then evaluate it.  Use the saved locale for evaluation.
12363b97a967SRobert Watsonfunc_show_eval_locale ()
12373b97a967SRobert Watson{
12383b97a967SRobert Watson    $debug_cmd
12393b97a967SRobert Watson
12403b97a967SRobert Watson    _G_cmd=$1
12413b97a967SRobert Watson    _G_fail_exp=${2-':'}
12423b97a967SRobert Watson
12433b97a967SRobert Watson    $opt_quiet || {
12443b97a967SRobert Watson      func_quote_for_expand "$_G_cmd"
12453b97a967SRobert Watson      eval "func_echo $func_quote_for_expand_result"
12463b97a967SRobert Watson    }
12473b97a967SRobert Watson
12483b97a967SRobert Watson    $opt_dry_run || {
12493b97a967SRobert Watson      eval "$_G_user_locale
12503b97a967SRobert Watson	    $_G_cmd"
12513b97a967SRobert Watson      _G_status=$?
12523b97a967SRobert Watson      eval "$_G_safe_locale"
12533b97a967SRobert Watson      if test 0 -ne "$_G_status"; then
12543b97a967SRobert Watson	eval "(exit $_G_status); $_G_fail_exp"
12553b97a967SRobert Watson      fi
12563b97a967SRobert Watson    }
12573b97a967SRobert Watson}
12583b97a967SRobert Watson
12593b97a967SRobert Watson
12603b97a967SRobert Watson# func_tr_sh
12613b97a967SRobert Watson# ----------
12623b97a967SRobert Watson# Turn $1 into a string suitable for a shell variable name.
12633b97a967SRobert Watson# Result is stored in $func_tr_sh_result.  All characters
12643b97a967SRobert Watson# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
12653b97a967SRobert Watson# if $1 begins with a digit, a '_' is prepended as well.
12663b97a967SRobert Watsonfunc_tr_sh ()
12673b97a967SRobert Watson{
12683b97a967SRobert Watson    $debug_cmd
12693b97a967SRobert Watson
12703b97a967SRobert Watson    case $1 in
12713b97a967SRobert Watson    [0-9]* | *[!a-zA-Z0-9_]*)
12723b97a967SRobert Watson      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
12733b97a967SRobert Watson      ;;
12743b97a967SRobert Watson    * )
12753b97a967SRobert Watson      func_tr_sh_result=$1
12763b97a967SRobert Watson      ;;
12773b97a967SRobert Watson    esac
12783b97a967SRobert Watson}
12793b97a967SRobert Watson
12803b97a967SRobert Watson
12813b97a967SRobert Watson# func_verbose ARG...
12823b97a967SRobert Watson# -------------------
12833b97a967SRobert Watson# Echo program name prefixed message in verbose mode only.
12843b97a967SRobert Watsonfunc_verbose ()
12853b97a967SRobert Watson{
12863b97a967SRobert Watson    $debug_cmd
12873b97a967SRobert Watson
12883b97a967SRobert Watson    $opt_verbose && func_echo "$*"
12893b97a967SRobert Watson
12903b97a967SRobert Watson    :
12913b97a967SRobert Watson}
12923b97a967SRobert Watson
12933b97a967SRobert Watson
12943b97a967SRobert Watson# func_warn_and_continue ARG...
12953b97a967SRobert Watson# -----------------------------
12963b97a967SRobert Watson# Echo program name prefixed warning message to standard error.
12973b97a967SRobert Watsonfunc_warn_and_continue ()
12983b97a967SRobert Watson{
12993b97a967SRobert Watson    $debug_cmd
13003b97a967SRobert Watson
13013b97a967SRobert Watson    $require_term_colors
13023b97a967SRobert Watson
13033b97a967SRobert Watson    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
13043b97a967SRobert Watson}
13053b97a967SRobert Watson
13063b97a967SRobert Watson
13073b97a967SRobert Watson# func_warning CATEGORY ARG...
13083b97a967SRobert Watson# ----------------------------
13093b97a967SRobert Watson# Echo program name prefixed warning message to standard error. Warning
13103b97a967SRobert Watson# messages can be filtered according to CATEGORY, where this function
13113b97a967SRobert Watson# elides messages where CATEGORY is not listed in the global variable
13123b97a967SRobert Watson# 'opt_warning_types'.
13133b97a967SRobert Watsonfunc_warning ()
13143b97a967SRobert Watson{
13153b97a967SRobert Watson    $debug_cmd
13163b97a967SRobert Watson
13173b97a967SRobert Watson    # CATEGORY must be in the warning_categories list!
13183b97a967SRobert Watson    case " $warning_categories " in
13193b97a967SRobert Watson      *" $1 "*) ;;
13203b97a967SRobert Watson      *) func_internal_error "invalid warning category '$1'" ;;
13213b97a967SRobert Watson    esac
13223b97a967SRobert Watson
13233b97a967SRobert Watson    _G_category=$1
13243b97a967SRobert Watson    shift
13253b97a967SRobert Watson
13263b97a967SRobert Watson    case " $opt_warning_types " in
13273b97a967SRobert Watson      *" $_G_category "*) $warning_func ${1+"$@"} ;;
13283b97a967SRobert Watson    esac
13293b97a967SRobert Watson}
13303b97a967SRobert Watson
13313b97a967SRobert Watson
13323b97a967SRobert Watson# func_sort_ver VER1 VER2
13333b97a967SRobert Watson# -----------------------
13343b97a967SRobert Watson# 'sort -V' is not generally available.
13353b97a967SRobert Watson# Note this deviates from the version comparison in automake
13363b97a967SRobert Watson# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
13373b97a967SRobert Watson# but this should suffice as we won't be specifying old
13383b97a967SRobert Watson# version formats or redundant trailing .0 in bootstrap.conf.
13393b97a967SRobert Watson# If we did want full compatibility then we should probably
13403b97a967SRobert Watson# use m4_version_compare from autoconf.
13413b97a967SRobert Watsonfunc_sort_ver ()
13423b97a967SRobert Watson{
13433b97a967SRobert Watson    $debug_cmd
13443b97a967SRobert Watson
13453b97a967SRobert Watson    printf '%s\n%s\n' "$1" "$2" \
13463b97a967SRobert Watson      | 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
13473b97a967SRobert Watson}
13483b97a967SRobert Watson
13493b97a967SRobert Watson# func_lt_ver PREV CURR
13503b97a967SRobert Watson# ---------------------
13513b97a967SRobert Watson# Return true if PREV and CURR are in the correct order according to
13523b97a967SRobert Watson# func_sort_ver, otherwise false.  Use it like this:
13533b97a967SRobert Watson#
13543b97a967SRobert Watson#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
13553b97a967SRobert Watsonfunc_lt_ver ()
13563b97a967SRobert Watson{
13573b97a967SRobert Watson    $debug_cmd
13583b97a967SRobert Watson
13593b97a967SRobert Watson    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
13603b97a967SRobert Watson}
13613b97a967SRobert Watson
13623b97a967SRobert Watson
13633b97a967SRobert Watson# Local variables:
13643b97a967SRobert Watson# mode: shell-script
13653b97a967SRobert Watson# sh-indentation: 2
13663b97a967SRobert Watson# eval: (add-hook 'before-save-hook 'time-stamp)
13673b97a967SRobert Watson# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
13683b97a967SRobert Watson# time-stamp-time-zone: "UTC"
13693b97a967SRobert Watson# End:
13703b97a967SRobert Watson#! /bin/sh
13713b97a967SRobert Watson
13723b97a967SRobert Watson# Set a version string for this script.
13733b97a967SRobert Watsonscriptversion=2014-01-07.03; # UTC
13743b97a967SRobert Watson
13753b97a967SRobert Watson# A portable, pluggable option parser for Bourne shell.
13763b97a967SRobert Watson# Written by Gary V. Vaughan, 2010
13773b97a967SRobert Watson
13783b97a967SRobert Watson# Copyright (C) 2010-2015 Free Software Foundation, Inc.
13793b97a967SRobert Watson# This is free software; see the source for copying conditions.  There is NO
13803b97a967SRobert Watson# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13813b97a967SRobert Watson
13823b97a967SRobert Watson# This program is free software: you can redistribute it and/or modify
13833b97a967SRobert Watson# it under the terms of the GNU General Public License as published by
13843b97a967SRobert Watson# the Free Software Foundation, either version 3 of the License, or
13853b97a967SRobert Watson# (at your option) any later version.
13863b97a967SRobert Watson
13873b97a967SRobert Watson# This program is distributed in the hope that it will be useful,
13883b97a967SRobert Watson# but WITHOUT ANY WARRANTY; without even the implied warranty of
13893b97a967SRobert Watson# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13903b97a967SRobert Watson# GNU General Public License for more details.
13913b97a967SRobert Watson
13923b97a967SRobert Watson# You should have received a copy of the GNU General Public License
13933b97a967SRobert Watson# along with this program.  If not, see <http://www.gnu.org/licenses/>.
13943b97a967SRobert Watson
13953b97a967SRobert Watson# Please report bugs or propose patches to gary@gnu.org.
13963b97a967SRobert Watson
13973b97a967SRobert Watson
13983b97a967SRobert Watson## ------ ##
13993b97a967SRobert Watson## Usage. ##
1400d9af45c4SRobert Watson## ------ ##
1401d9af45c4SRobert Watson
1402d9af45c4SRobert Watson# This file is a library for parsing options in your shell scripts along
1403d9af45c4SRobert Watson# with assorted other useful supporting features that you can make use
1404d9af45c4SRobert Watson# of too.
14053b97a967SRobert Watson#
14063b97a967SRobert Watson# For the simplest scripts you might need only:
14073b97a967SRobert Watson#
14083b97a967SRobert Watson#   #!/bin/sh
14093b97a967SRobert Watson#   . relative/path/to/funclib.sh
14103b97a967SRobert Watson#   . relative/path/to/options-parser
14113b97a967SRobert Watson#   scriptversion=1.0
14123b97a967SRobert Watson#   func_options ${1+"$@"}
14133b97a967SRobert Watson#   eval set dummy "$func_options_result"; shift
14143b97a967SRobert Watson#   ...rest of your script...
14153b97a967SRobert Watson#
14163b97a967SRobert Watson# In order for the '--version' option to work, you will need to have a
14173b97a967SRobert Watson# suitably formatted comment like the one at the top of this file
14183b97a967SRobert Watson# starting with '# Written by ' and ending with '# warranty; '.
14193b97a967SRobert Watson#
14203b97a967SRobert Watson# For '-h' and '--help' to work, you will also need a one line
14213b97a967SRobert Watson# description of your script's purpose in a comment directly above the
14223b97a967SRobert Watson# '# Written by ' line, like the one at the top of this file.
14233b97a967SRobert Watson#
14243b97a967SRobert Watson# The default options also support '--debug', which will turn on shell
14253b97a967SRobert Watson# execution tracing (see the comment above debug_cmd below for another
14263b97a967SRobert Watson# use), and '--verbose' and the func_verbose function to allow your script
14273b97a967SRobert Watson# to display verbose messages only when your user has specified
14283b97a967SRobert Watson# '--verbose'.
14293b97a967SRobert Watson#
14303b97a967SRobert Watson# After sourcing this file, you can plug processing for additional
14313b97a967SRobert Watson# options by amending the variables from the 'Configuration' section
14323b97a967SRobert Watson# below, and following the instructions in the 'Option parsing'
14333b97a967SRobert Watson# section further down.
14343b97a967SRobert Watson
14353b97a967SRobert Watson## -------------- ##
14363b97a967SRobert Watson## Configuration. ##
14373b97a967SRobert Watson## -------------- ##
14383b97a967SRobert Watson
14393b97a967SRobert Watson# You should override these variables in your script after sourcing this
14403b97a967SRobert Watson# file so that they reflect the customisations you have added to the
14413b97a967SRobert Watson# option parser.
14423b97a967SRobert Watson
14433b97a967SRobert Watson# The usage line for option parsing errors and the start of '-h' and
14443b97a967SRobert Watson# '--help' output messages. You can embed shell variables for delayed
14453b97a967SRobert Watson# expansion at the time the message is displayed, but you will need to
14463b97a967SRobert Watson# quote other shell meta-characters carefully to prevent them being
14473b97a967SRobert Watson# expanded when the contents are evaled.
14483b97a967SRobert Watsonusage='$progpath [OPTION]...'
14493b97a967SRobert Watson
14503b97a967SRobert Watson# Short help message in response to '-h' and '--help'.  Add to this or
14513b97a967SRobert Watson# override it after sourcing this library to reflect the full set of
14523b97a967SRobert Watson# options your script accepts.
14533b97a967SRobert Watsonusage_message="\
14543b97a967SRobert Watson       --debug        enable verbose shell tracing
14553b97a967SRobert Watson   -W, --warnings=CATEGORY
14563b97a967SRobert Watson                      report the warnings falling in CATEGORY [all]
14573b97a967SRobert Watson   -v, --verbose      verbosely report processing
14583b97a967SRobert Watson       --version      print version information and exit
14593b97a967SRobert Watson   -h, --help         print short or long help message and exit
14603b97a967SRobert Watson"
14613b97a967SRobert Watson
14623b97a967SRobert Watson# Additional text appended to 'usage_message' in response to '--help'.
14633b97a967SRobert Watsonlong_help_message="
14643b97a967SRobert WatsonWarning categories include:
14653b97a967SRobert Watson       'all'          show all warnings
14663b97a967SRobert Watson       'none'         turn off all the warnings
14673b97a967SRobert Watson       'error'        warnings are treated as fatal errors"
14683b97a967SRobert Watson
14693b97a967SRobert Watson# Help message printed before fatal option parsing errors.
14703b97a967SRobert Watsonfatal_help="Try '\$progname --help' for more information."
14713b97a967SRobert Watson
14723b97a967SRobert Watson
14733b97a967SRobert Watson
14743b97a967SRobert Watson## ------------------------- ##
14753b97a967SRobert Watson## Hook function management. ##
14763b97a967SRobert Watson## ------------------------- ##
14773b97a967SRobert Watson
14783b97a967SRobert Watson# This section contains functions for adding, removing, and running hooks
14793b97a967SRobert Watson# to the main code.  A hook is just a named list of of function, that can
14803b97a967SRobert Watson# be run in order later on.
14813b97a967SRobert Watson
14823b97a967SRobert Watson# func_hookable FUNC_NAME
14833b97a967SRobert Watson# -----------------------
14843b97a967SRobert Watson# Declare that FUNC_NAME will run hooks added with
14853b97a967SRobert Watson# 'func_add_hook FUNC_NAME ...'.
14863b97a967SRobert Watsonfunc_hookable ()
14873b97a967SRobert Watson{
1488d9af45c4SRobert Watson    $debug_cmd
1489d9af45c4SRobert Watson
14903b97a967SRobert Watson    func_append hookable_fns " $1"
14913b97a967SRobert Watson}
14923b97a967SRobert Watson
14933b97a967SRobert Watson
14943b97a967SRobert Watson# func_add_hook FUNC_NAME HOOK_FUNC
14953b97a967SRobert Watson# ---------------------------------
14963b97a967SRobert Watson# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
14973b97a967SRobert Watson# first have been declared "hookable" by a call to 'func_hookable'.
14983b97a967SRobert Watsonfunc_add_hook ()
14993b97a967SRobert Watson{
15003b97a967SRobert Watson    $debug_cmd
15013b97a967SRobert Watson
15023b97a967SRobert Watson    case " $hookable_fns " in
15033b97a967SRobert Watson      *" $1 "*) ;;
15043b97a967SRobert Watson      *) func_fatal_error "'$1' does not accept hook functions." ;;
15053b97a967SRobert Watson    esac
15063b97a967SRobert Watson
15073b97a967SRobert Watson    eval func_append ${1}_hooks '" $2"'
15083b97a967SRobert Watson}
15093b97a967SRobert Watson
15103b97a967SRobert Watson
15113b97a967SRobert Watson# func_remove_hook FUNC_NAME HOOK_FUNC
15123b97a967SRobert Watson# ------------------------------------
15133b97a967SRobert Watson# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
15143b97a967SRobert Watsonfunc_remove_hook ()
15153b97a967SRobert Watson{
15163b97a967SRobert Watson    $debug_cmd
15173b97a967SRobert Watson
15183b97a967SRobert Watson    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
15193b97a967SRobert Watson}
15203b97a967SRobert Watson
15213b97a967SRobert Watson
15223b97a967SRobert Watson# func_run_hooks FUNC_NAME [ARG]...
15233b97a967SRobert Watson# ---------------------------------
15243b97a967SRobert Watson# Run all hook functions registered to FUNC_NAME.
15253b97a967SRobert Watson# It is assumed that the list of hook functions contains nothing more
15263b97a967SRobert Watson# than a whitespace-delimited list of legal shell function names, and
15273b97a967SRobert Watson# no effort is wasted trying to catch shell meta-characters or preserve
15283b97a967SRobert Watson# whitespace.
15293b97a967SRobert Watsonfunc_run_hooks ()
15303b97a967SRobert Watson{
15313b97a967SRobert Watson    $debug_cmd
15323b97a967SRobert Watson
15333b97a967SRobert Watson    case " $hookable_fns " in
15343b97a967SRobert Watson      *" $1 "*) ;;
15353b97a967SRobert Watson      *) func_fatal_error "'$1' does not support hook funcions.n" ;;
15363b97a967SRobert Watson    esac
15373b97a967SRobert Watson
15383b97a967SRobert Watson    eval _G_hook_fns=\$$1_hooks; shift
15393b97a967SRobert Watson
15403b97a967SRobert Watson    for _G_hook in $_G_hook_fns; do
15413b97a967SRobert Watson      eval $_G_hook '"$@"'
15423b97a967SRobert Watson
15433b97a967SRobert Watson      # store returned options list back into positional
15443b97a967SRobert Watson      # parameters for next 'cmd' execution.
15453b97a967SRobert Watson      eval _G_hook_result=\$${_G_hook}_result
15463b97a967SRobert Watson      eval set dummy "$_G_hook_result"; shift
15473b97a967SRobert Watson    done
15483b97a967SRobert Watson
15493b97a967SRobert Watson    func_quote_for_eval ${1+"$@"}
15503b97a967SRobert Watson    func_run_hooks_result=$func_quote_for_eval_result
15513b97a967SRobert Watson}
15523b97a967SRobert Watson
1553d9af45c4SRobert Watson
1554d9af45c4SRobert Watson
1555d9af45c4SRobert Watson## --------------- ##
1556d9af45c4SRobert Watson## Option parsing. ##
1557d9af45c4SRobert Watson## --------------- ##
1558d9af45c4SRobert Watson
1559d9af45c4SRobert Watson# In order to add your own option parsing hooks, you must accept the
15603b97a967SRobert Watson# full positional parameter list in your hook function, remove any
15613b97a967SRobert Watson# options that you action, and then pass back the remaining unprocessed
15623b97a967SRobert Watson# options in '<hooked_function_name>_result', escaped suitably for
15633b97a967SRobert Watson# 'eval'.  Like this:
15643b97a967SRobert Watson#
15653b97a967SRobert Watson#    my_options_prep ()
15663b97a967SRobert Watson#    {
15673b97a967SRobert Watson#        $debug_cmd
15683b97a967SRobert Watson#
15693b97a967SRobert Watson#        # Extend the existing usage message.
15703b97a967SRobert Watson#        usage_message=$usage_message'
15713b97a967SRobert Watson#      -s, --silent       don'\''t print informational messages
15723b97a967SRobert Watson#    '
15733b97a967SRobert Watson#
15743b97a967SRobert Watson#        func_quote_for_eval ${1+"$@"}
15753b97a967SRobert Watson#        my_options_prep_result=$func_quote_for_eval_result
15763b97a967SRobert Watson#    }
15773b97a967SRobert Watson#    func_add_hook func_options_prep my_options_prep
15783b97a967SRobert Watson#
15793b97a967SRobert Watson#
15803b97a967SRobert Watson#    my_silent_option ()
15813b97a967SRobert Watson#    {
15823b97a967SRobert Watson#        $debug_cmd
15833b97a967SRobert Watson#
15843b97a967SRobert Watson#        # Note that for efficiency, we parse as many options as we can
15853b97a967SRobert Watson#        # recognise in a loop before passing the remainder back to the
15863b97a967SRobert Watson#        # caller on the first unrecognised argument we encounter.
15873b97a967SRobert Watson#        while test $# -gt 0; do
15883b97a967SRobert Watson#          opt=$1; shift
15893b97a967SRobert Watson#          case $opt in
15903b97a967SRobert Watson#            --silent|-s) opt_silent=: ;;
1591d9af45c4SRobert Watson#            # Separate non-argument short options:
1592d9af45c4SRobert Watson#            -s*)         func_split_short_opt "$_G_opt"
15933b97a967SRobert Watson#                         set dummy "$func_split_short_opt_name" \
15943b97a967SRobert Watson#                             "-$func_split_short_opt_arg" ${1+"$@"}
15953b97a967SRobert Watson#                         shift
15963b97a967SRobert Watson#                         ;;
15973b97a967SRobert Watson#            *)            set dummy "$_G_opt" "$*"; shift; break ;;
15983b97a967SRobert Watson#          esac
15993b97a967SRobert Watson#        done
16003b97a967SRobert Watson#
16013b97a967SRobert Watson#        func_quote_for_eval ${1+"$@"}
16023b97a967SRobert Watson#        my_silent_option_result=$func_quote_for_eval_result
16033b97a967SRobert Watson#    }
16043b97a967SRobert Watson#    func_add_hook func_parse_options my_silent_option
16053b97a967SRobert Watson#
1606d9af45c4SRobert Watson#
16073b97a967SRobert Watson#    my_option_validation ()
16083b97a967SRobert Watson#    {
16093b97a967SRobert Watson#        $debug_cmd
16103b97a967SRobert Watson#
1611d9af45c4SRobert Watson#        $opt_silent && $opt_verbose && func_fatal_help "\
1612d9af45c4SRobert Watson#    '--silent' and '--verbose' options are mutually exclusive."
1613d9af45c4SRobert Watson#
1614d9af45c4SRobert Watson#        func_quote_for_eval ${1+"$@"}
16153b97a967SRobert Watson#        my_option_validation_result=$func_quote_for_eval_result
16163b97a967SRobert Watson#    }
16173b97a967SRobert Watson#    func_add_hook func_validate_options my_option_validation
16183b97a967SRobert Watson#
16193b97a967SRobert Watson# You'll alse need to manually amend $usage_message to reflect the extra
16203b97a967SRobert Watson# options you parse.  It's preferable to append if you can, so that
16213b97a967SRobert Watson# multiple option parsing hooks can be added safely.
16223b97a967SRobert Watson
1623d9af45c4SRobert Watson
16243b97a967SRobert Watson# func_options [ARG]...
16253b97a967SRobert Watson# ---------------------
16263b97a967SRobert Watson# All the functions called inside func_options are hookable. See the
1627d9af45c4SRobert Watson# individual implementations for details.
16283b97a967SRobert Watsonfunc_hookable func_options
16293b97a967SRobert Watsonfunc_options ()
16303b97a967SRobert Watson{
16313b97a967SRobert Watson    $debug_cmd
16323b97a967SRobert Watson
16333b97a967SRobert Watson    func_options_prep ${1+"$@"}
16343b97a967SRobert Watson    eval func_parse_options \
16353b97a967SRobert Watson        ${func_options_prep_result+"$func_options_prep_result"}
16363b97a967SRobert Watson    eval func_validate_options \
16373b97a967SRobert Watson        ${func_parse_options_result+"$func_parse_options_result"}
16383b97a967SRobert Watson
1639d9af45c4SRobert Watson    eval func_run_hooks func_options \
1640d9af45c4SRobert Watson        ${func_validate_options_result+"$func_validate_options_result"}
1641d9af45c4SRobert Watson
1642d9af45c4SRobert Watson    # save modified positional parameters for caller
1643d9af45c4SRobert Watson    func_options_result=$func_run_hooks_result
1644d9af45c4SRobert Watson}
1645d9af45c4SRobert Watson
1646d9af45c4SRobert Watson
1647d9af45c4SRobert Watson# func_options_prep [ARG]...
16483b97a967SRobert Watson# --------------------------
16493b97a967SRobert Watson# All initialisations required before starting the option parse loop.
16503b97a967SRobert Watson# Note that when calling hook functions, we pass through the list of
16513b97a967SRobert Watson# positional parameters.  If a hook function modifies that list, and
16523b97a967SRobert Watson# needs to propogate that back to rest of this script, then the complete
16533b97a967SRobert Watson# modified list must be put in 'func_run_hooks_result' before
16543b97a967SRobert Watson# returning.
16553b97a967SRobert Watsonfunc_hookable func_options_prep
16563b97a967SRobert Watsonfunc_options_prep ()
16573b97a967SRobert Watson{
16583b97a967SRobert Watson    $debug_cmd
16593b97a967SRobert Watson
16603b97a967SRobert Watson    # Option defaults:
16613b97a967SRobert Watson    opt_verbose=false
16623b97a967SRobert Watson    opt_warning_types=
16633b97a967SRobert Watson
16643b97a967SRobert Watson    func_run_hooks func_options_prep ${1+"$@"}
16653b97a967SRobert Watson
16663b97a967SRobert Watson    # save modified positional parameters for caller
16673b97a967SRobert Watson    func_options_prep_result=$func_run_hooks_result
16683b97a967SRobert Watson}
16693b97a967SRobert Watson
16703b97a967SRobert Watson
1671eb336521SRobert Watson# func_parse_options [ARG]...
16723b97a967SRobert Watson# ---------------------------
16733b97a967SRobert Watson# The main option parsing loop.
16743b97a967SRobert Watsonfunc_hookable func_parse_options
1675d9af45c4SRobert Watsonfunc_parse_options ()
16763b97a967SRobert Watson{
16773b97a967SRobert Watson    $debug_cmd
16783b97a967SRobert Watson
16793b97a967SRobert Watson    func_parse_options_result=
16803b97a967SRobert Watson
16813b97a967SRobert Watson    # this just eases exit handling
16823b97a967SRobert Watson    while test $# -gt 0; do
16833b97a967SRobert Watson      # Defer to hook functions for initial option parsing, so they
16843b97a967SRobert Watson      # get priority in the event of reusing an option name.
16853b97a967SRobert Watson      func_run_hooks func_parse_options ${1+"$@"}
16863b97a967SRobert Watson
16873b97a967SRobert Watson      # Adjust func_parse_options positional parameters to match
16883b97a967SRobert Watson      eval set dummy "$func_run_hooks_result"; shift
16893b97a967SRobert Watson
1690d9af45c4SRobert Watson      # Break out of the loop if we already parsed every option.
1691d9af45c4SRobert Watson      test $# -gt 0 || break
1692eb336521SRobert Watson
1693eb336521SRobert Watson      _G_opt=$1
1694d9af45c4SRobert Watson      shift
1695eb336521SRobert Watson      case $_G_opt in
1696eb336521SRobert Watson        --debug|-x)   debug_cmd='set -x'
16973b97a967SRobert Watson                      func_echo "enabling shell trace mode"
16983b97a967SRobert Watson                      $debug_cmd
16993b97a967SRobert Watson                      ;;
17003b97a967SRobert Watson
17013b97a967SRobert Watson        --no-warnings|--no-warning|--no-warn)
17023b97a967SRobert Watson                      set dummy --warnings none ${1+"$@"}
17033b97a967SRobert Watson                      shift
17043b97a967SRobert Watson		      ;;
17053b97a967SRobert Watson
17063b97a967SRobert Watson        --warnings|--warning|-W)
17073b97a967SRobert Watson                      test $# = 0 && func_missing_arg $_G_opt && break
17083b97a967SRobert Watson                      case " $warning_categories $1" in
17093b97a967SRobert Watson                        *" $1 "*)
17103b97a967SRobert Watson                          # trailing space prevents matching last $1 above
17113b97a967SRobert Watson                          func_append_uniq opt_warning_types " $1"
17123b97a967SRobert Watson                          ;;
17133b97a967SRobert Watson                        *all)
17143b97a967SRobert Watson                          opt_warning_types=$warning_categories
17153b97a967SRobert Watson                          ;;
17163b97a967SRobert Watson                        *none)
17173b97a967SRobert Watson                          opt_warning_types=none
17183b97a967SRobert Watson                          warning_func=:
17193b97a967SRobert Watson                          ;;
17203b97a967SRobert Watson                        *error)
17213b97a967SRobert Watson                          opt_warning_types=$warning_categories
17223b97a967SRobert Watson                          warning_func=func_fatal_error
17233b97a967SRobert Watson                          ;;
1724eb336521SRobert Watson                        *)
17253b97a967SRobert Watson                          func_fatal_error \
1726eb336521SRobert Watson                             "unsupported warning category: '$1'"
17273b97a967SRobert Watson                          ;;
17283b97a967SRobert Watson                      esac
17293b97a967SRobert Watson                      shift
17303b97a967SRobert Watson                      ;;
17313b97a967SRobert Watson
17323b97a967SRobert Watson        --verbose|-v) opt_verbose=: ;;
17333b97a967SRobert Watson        --version)    func_version ;;
17343b97a967SRobert Watson        -\?|-h)       func_usage ;;
17353b97a967SRobert Watson        --help)       func_help ;;
17363b97a967SRobert Watson
17373b97a967SRobert Watson	# Separate optargs to long options (plugins may need this):
17383b97a967SRobert Watson	--*=*)        func_split_equals "$_G_opt"
17393b97a967SRobert Watson	              set dummy "$func_split_equals_lhs" \
17403b97a967SRobert Watson                          "$func_split_equals_rhs" ${1+"$@"}
17413b97a967SRobert Watson                      shift
17423b97a967SRobert Watson                      ;;
17433b97a967SRobert Watson
17443b97a967SRobert Watson       # Separate optargs to short options:
17453b97a967SRobert Watson        -W*)
17463b97a967SRobert Watson                      func_split_short_opt "$_G_opt"
17473b97a967SRobert Watson                      set dummy "$func_split_short_opt_name" \
17483b97a967SRobert Watson                          "$func_split_short_opt_arg" ${1+"$@"}
17493b97a967SRobert Watson                      shift
17503b97a967SRobert Watson                      ;;
17513b97a967SRobert Watson
17523b97a967SRobert Watson        # Separate non-argument short options:
17533b97a967SRobert Watson        -\?*|-h*|-v*|-x*)
17543b97a967SRobert Watson                      func_split_short_opt "$_G_opt"
17553b97a967SRobert Watson                      set dummy "$func_split_short_opt_name" \
17563b97a967SRobert Watson                          "-$func_split_short_opt_arg" ${1+"$@"}
17573b97a967SRobert Watson                      shift
17583b97a967SRobert Watson                      ;;
17593b97a967SRobert Watson
17603b97a967SRobert Watson        --)           break ;;
17613b97a967SRobert Watson        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
17623b97a967SRobert Watson        *)            set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
17633b97a967SRobert Watson      esac
17643b97a967SRobert Watson    done
17653b97a967SRobert Watson
17663b97a967SRobert Watson    # save modified positional parameters for caller
17673b97a967SRobert Watson    func_quote_for_eval ${1+"$@"}
17683b97a967SRobert Watson    func_parse_options_result=$func_quote_for_eval_result
17693b97a967SRobert Watson}
17703b97a967SRobert Watson
17713b97a967SRobert Watson
17723b97a967SRobert Watson# func_validate_options [ARG]...
17733b97a967SRobert Watson# ------------------------------
17743b97a967SRobert Watson# Perform any sanity checks on option settings and/or unconsumed
17753b97a967SRobert Watson# arguments.
17763b97a967SRobert Watsonfunc_hookable func_validate_options
17773b97a967SRobert Watsonfunc_validate_options ()
17783b97a967SRobert Watson{
17793b97a967SRobert Watson    $debug_cmd
17803b97a967SRobert Watson
17813b97a967SRobert Watson    # Display all warnings if -W was not given.
17823b97a967SRobert Watson    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
17833b97a967SRobert Watson
17843b97a967SRobert Watson    func_run_hooks func_validate_options ${1+"$@"}
1785eb336521SRobert Watson
17863b97a967SRobert Watson    # Bail if the options were screwed!
17873b97a967SRobert Watson    $exit_cmd $EXIT_FAILURE
17883b97a967SRobert Watson
17893b97a967SRobert Watson    # save modified positional parameters for caller
17903b97a967SRobert Watson    func_validate_options_result=$func_run_hooks_result
17913b97a967SRobert Watson}
17923b97a967SRobert Watson
17933b97a967SRobert Watson
17943b97a967SRobert Watson
17953b97a967SRobert Watson## ----------------- ##
17963b97a967SRobert Watson## Helper functions. ##
17973b97a967SRobert Watson## ----------------- ##
17983b97a967SRobert Watson
17993b97a967SRobert Watson# This section contains the helper functions used by the rest of the
18003b97a967SRobert Watson# hookable option parser framework in ascii-betical order.
18013b97a967SRobert Watson
18023b97a967SRobert Watson
18033b97a967SRobert Watson# func_fatal_help ARG...
18043b97a967SRobert Watson# ----------------------
18053b97a967SRobert Watson# Echo program name prefixed message to standard error, followed by
18063b97a967SRobert Watson# a help hint, and exit.
18073b97a967SRobert Watsonfunc_fatal_help ()
18083b97a967SRobert Watson{
18093b97a967SRobert Watson    $debug_cmd
18103b97a967SRobert Watson
18113b97a967SRobert Watson    eval \$ECHO \""Usage: $usage"\"
18123b97a967SRobert Watson    eval \$ECHO \""$fatal_help"\"
18133b97a967SRobert Watson    func_error ${1+"$@"}
18143b97a967SRobert Watson    exit $EXIT_FAILURE
18153b97a967SRobert Watson}
18163b97a967SRobert Watson
18173b97a967SRobert Watson
18183b97a967SRobert Watson# func_help
18193b97a967SRobert Watson# ---------
18203b97a967SRobert Watson# Echo long help message to standard output and exit.
18213b97a967SRobert Watsonfunc_help ()
18223b97a967SRobert Watson{
18233b97a967SRobert Watson    $debug_cmd
18243b97a967SRobert Watson
18253b97a967SRobert Watson    func_usage_message
18263b97a967SRobert Watson    $ECHO "$long_help_message"
18273b97a967SRobert Watson    exit 0
18283b97a967SRobert Watson}
18293b97a967SRobert Watson
18303b97a967SRobert Watson
18313b97a967SRobert Watson# func_missing_arg ARGNAME
18323b97a967SRobert Watson# ------------------------
18333b97a967SRobert Watson# Echo program name prefixed message to standard error and set global
18343b97a967SRobert Watson# exit_cmd.
18353b97a967SRobert Watsonfunc_missing_arg ()
18363b97a967SRobert Watson{
18373b97a967SRobert Watson    $debug_cmd
18383b97a967SRobert Watson
18393b97a967SRobert Watson    func_error "Missing argument for '$1'."
18403b97a967SRobert Watson    exit_cmd=exit
18413b97a967SRobert Watson}
18423b97a967SRobert Watson
18433b97a967SRobert Watson
18443b97a967SRobert Watson# func_split_equals STRING
18453b97a967SRobert Watson# ------------------------
18463b97a967SRobert Watson# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
18473b97a967SRobert Watson# splitting STRING at the '=' sign.
18483b97a967SRobert Watsontest -z "$_G_HAVE_XSI_OPS" \
18493b97a967SRobert Watson    && (eval 'x=a/b/c;
18503b97a967SRobert Watson      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
18513b97a967SRobert Watson    && _G_HAVE_XSI_OPS=yes
18523b97a967SRobert Watson
18533b97a967SRobert Watsonif test yes = "$_G_HAVE_XSI_OPS"
18543b97a967SRobert Watsonthen
18553b97a967SRobert Watson  # This is an XSI compatible shell, allowing a faster implementation...
18563b97a967SRobert Watson  eval 'func_split_equals ()
18573b97a967SRobert Watson  {
18583b97a967SRobert Watson      $debug_cmd
18593b97a967SRobert Watson
18603b97a967SRobert Watson      func_split_equals_lhs=${1%%=*}
18613b97a967SRobert Watson      func_split_equals_rhs=${1#*=}
18623b97a967SRobert Watson      test "x$func_split_equals_lhs" = "x$1" \
18633b97a967SRobert Watson        && func_split_equals_rhs=
18643b97a967SRobert Watson  }'
18653b97a967SRobert Watsonelse
18663b97a967SRobert Watson  # ...otherwise fall back to using expr, which is often a shell builtin.
18673b97a967SRobert Watson  func_split_equals ()
18683b97a967SRobert Watson  {
18693b97a967SRobert Watson      $debug_cmd
18703b97a967SRobert Watson
18713b97a967SRobert Watson      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
18723b97a967SRobert Watson      func_split_equals_rhs=
18733b97a967SRobert Watson      test "x$func_split_equals_lhs" = "x$1" \
18743b97a967SRobert Watson        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
18753b97a967SRobert Watson  }
18763b97a967SRobert Watsonfi #func_split_equals
18773b97a967SRobert Watson
18783b97a967SRobert Watson
18793b97a967SRobert Watson# func_split_short_opt SHORTOPT
18803b97a967SRobert Watson# -----------------------------
18813b97a967SRobert Watson# Set func_split_short_opt_name and func_split_short_opt_arg shell
18823b97a967SRobert Watson# variables after splitting SHORTOPT after the 2nd character.
18833b97a967SRobert Watsonif test yes = "$_G_HAVE_XSI_OPS"
18843b97a967SRobert Watsonthen
18853b97a967SRobert Watson  # This is an XSI compatible shell, allowing a faster implementation...
18863b97a967SRobert Watson  eval 'func_split_short_opt ()
18873b97a967SRobert Watson  {
18883b97a967SRobert Watson      $debug_cmd
18893b97a967SRobert Watson
18903b97a967SRobert Watson      func_split_short_opt_arg=${1#??}
18913b97a967SRobert Watson      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
18923b97a967SRobert Watson  }'
18933b97a967SRobert Watsonelse
18943b97a967SRobert Watson  # ...otherwise fall back to using expr, which is often a shell builtin.
18953b97a967SRobert Watson  func_split_short_opt ()
18963b97a967SRobert Watson  {
18973b97a967SRobert Watson      $debug_cmd
18983b97a967SRobert Watson
18993b97a967SRobert Watson      func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
19003b97a967SRobert Watson      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
19013b97a967SRobert Watson  }
19023b97a967SRobert Watsonfi #func_split_short_opt
19033b97a967SRobert Watson
19043b97a967SRobert Watson
19053b97a967SRobert Watson# func_usage
19063b97a967SRobert Watson# ----------
19073b97a967SRobert Watson# Echo short help message to standard output and exit.
19083b97a967SRobert Watsonfunc_usage ()
19093b97a967SRobert Watson{
19103b97a967SRobert Watson    $debug_cmd
19113b97a967SRobert Watson
19123b97a967SRobert Watson    func_usage_message
19133b97a967SRobert Watson    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
19143b97a967SRobert Watson    exit 0
19153b97a967SRobert Watson}
19163b97a967SRobert Watson
19173b97a967SRobert Watson
19183b97a967SRobert Watson# func_usage_message
19193b97a967SRobert Watson# ------------------
19203b97a967SRobert Watson# Echo short help message to standard output.
19213b97a967SRobert Watsonfunc_usage_message ()
19223b97a967SRobert Watson{
19233b97a967SRobert Watson    $debug_cmd
19243b97a967SRobert Watson
19253b97a967SRobert Watson    eval \$ECHO \""Usage: $usage"\"
19263b97a967SRobert Watson    echo
19273b97a967SRobert Watson    $SED -n 's|^# ||
19283b97a967SRobert Watson        /^Written by/{
19293b97a967SRobert Watson          x;p;x
19303b97a967SRobert Watson        }
19313b97a967SRobert Watson	h
19323b97a967SRobert Watson	/^Written by/q' < "$progpath"
19333b97a967SRobert Watson    echo
19343b97a967SRobert Watson    eval \$ECHO \""$usage_message"\"
19353b97a967SRobert Watson}
19363b97a967SRobert Watson
19373b97a967SRobert Watson
19383b97a967SRobert Watson# func_version
19393b97a967SRobert Watson# ------------
19403b97a967SRobert Watson# Echo version message to standard output and exit.
19413b97a967SRobert Watsonfunc_version ()
19423b97a967SRobert Watson{
19433b97a967SRobert Watson    $debug_cmd
19443b97a967SRobert Watson
19453b97a967SRobert Watson    printf '%s\n' "$progname $scriptversion"
1946d9af45c4SRobert Watson    $SED -n '
1947d9af45c4SRobert Watson        /(C)/!b go
1948d9af45c4SRobert Watson        :more
1949d9af45c4SRobert Watson        /\./!{
1950d9af45c4SRobert Watson          N
19513b97a967SRobert Watson          s|\n# | |
19523b97a967SRobert Watson          b more
19533b97a967SRobert Watson        }
19543b97a967SRobert Watson        :go
19553b97a967SRobert Watson        /^# Written by /,/# warranty; / {
19563b97a967SRobert Watson          s|^# ||
19573b97a967SRobert Watson          s|^# *$||
19583b97a967SRobert Watson          s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
19593b97a967SRobert Watson          p
19603b97a967SRobert Watson        }
19613b97a967SRobert Watson        /^# Written by / {
19623b97a967SRobert Watson          s|^# ||
19633b97a967SRobert Watson          p
19643b97a967SRobert Watson        }
19653b97a967SRobert Watson        /^warranty; /q' < "$progpath"
19663b97a967SRobert Watson
19673b97a967SRobert Watson    exit $?
19683b97a967SRobert Watson}
19693b97a967SRobert Watson
19703b97a967SRobert Watson
19713b97a967SRobert Watson# Local variables:
19723b97a967SRobert Watson# mode: shell-script
19733b97a967SRobert Watson# sh-indentation: 2
19743b97a967SRobert Watson# eval: (add-hook 'before-save-hook 'time-stamp)
19753b97a967SRobert Watson# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
19763b97a967SRobert Watson# time-stamp-time-zone: "UTC"
19773b97a967SRobert Watson# End:
19783b97a967SRobert Watson
19793b97a967SRobert Watson# Set a version string.
19803b97a967SRobert Watsonscriptversion='(GNU libtool) 2.4.6'
19813b97a967SRobert Watson
19823b97a967SRobert Watson
19833b97a967SRobert Watson# func_echo ARG...
19843b97a967SRobert Watson# ----------------
19853b97a967SRobert Watson# Libtool also displays the current mode in messages, so override
19863b97a967SRobert Watson# funclib.sh func_echo with this custom definition.
19873b97a967SRobert Watsonfunc_echo ()
19883b97a967SRobert Watson{
19893b97a967SRobert Watson    $debug_cmd
19903b97a967SRobert Watson
19913b97a967SRobert Watson    _G_message=$*
19923b97a967SRobert Watson
19933b97a967SRobert Watson    func_echo_IFS=$IFS
19943b97a967SRobert Watson    IFS=$nl
19953b97a967SRobert Watson    for _G_line in $_G_message; do
19963b97a967SRobert Watson      IFS=$func_echo_IFS
19973b97a967SRobert Watson      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
19983b97a967SRobert Watson    done
19993b97a967SRobert Watson    IFS=$func_echo_IFS
20003b97a967SRobert Watson}
20013b97a967SRobert Watson
20023b97a967SRobert Watson
20033b97a967SRobert Watson# func_warning ARG...
20043b97a967SRobert Watson# -------------------
20053b97a967SRobert Watson# Libtool warnings are not categorized, so override funclib.sh
20063b97a967SRobert Watson# func_warning with this simpler definition.
20073b97a967SRobert Watsonfunc_warning ()
20083b97a967SRobert Watson{
20093b97a967SRobert Watson    $debug_cmd
20103b97a967SRobert Watson
20113b97a967SRobert Watson    $warning_func ${1+"$@"}
20123b97a967SRobert Watson}
20133b97a967SRobert Watson
20143b97a967SRobert Watson
20153b97a967SRobert Watson## ---------------- ##
20163b97a967SRobert Watson## Options parsing. ##
20173b97a967SRobert Watson## ---------------- ##
20183b97a967SRobert Watson
20193b97a967SRobert Watson# Hook in the functions to make sure our own options are parsed during
20203b97a967SRobert Watson# the option parsing loop.
20213b97a967SRobert Watson
20223b97a967SRobert Watsonusage='$progpath [OPTION]... [MODE-ARG]...'
20233b97a967SRobert Watson
20243b97a967SRobert Watson# Short help message in response to '-h'.
20253b97a967SRobert Watsonusage_message="Options:
20263b97a967SRobert Watson       --config             show all configuration variables
20273b97a967SRobert Watson       --debug              enable verbose shell tracing
20283b97a967SRobert Watson   -n, --dry-run            display commands without modifying any files
20293b97a967SRobert Watson       --features           display basic configuration information and exit
20303b97a967SRobert Watson       --mode=MODE          use operation mode MODE
20313b97a967SRobert Watson       --no-warnings        equivalent to '-Wnone'
20323b97a967SRobert Watson       --preserve-dup-deps  don't remove duplicate dependency libraries
20333b97a967SRobert Watson       --quiet, --silent    don't print informational messages
20343b97a967SRobert Watson       --tag=TAG            use configuration variables from tag TAG
20353b97a967SRobert Watson   -v, --verbose            print more informational messages than default
20363b97a967SRobert Watson       --version            print version information
20373b97a967SRobert Watson   -W, --warnings=CATEGORY  report the warnings falling in CATEGORY [all]
20383b97a967SRobert Watson   -h, --help, --help-all   print short, long, or detailed help message
20393b97a967SRobert Watson"
20403b97a967SRobert Watson
20413b97a967SRobert Watson# Additional text appended to 'usage_message' in response to '--help'.
20423b97a967SRobert Watsonfunc_help ()
20433b97a967SRobert Watson{
20443b97a967SRobert Watson    $debug_cmd
20453b97a967SRobert Watson
20463b97a967SRobert Watson    func_usage_message
20473b97a967SRobert Watson    $ECHO "$long_help_message
20483b97a967SRobert Watson
20493b97a967SRobert WatsonMODE must be one of the following:
20503b97a967SRobert Watson
20513b97a967SRobert Watson       clean           remove files from the build directory
20523b97a967SRobert Watson       compile         compile a source file into a libtool object
20533b97a967SRobert Watson       execute         automatically set library path, then run a program
20543b97a967SRobert Watson       finish          complete the installation of libtool libraries
20553b97a967SRobert Watson       install         install libraries or executables
2056d9af45c4SRobert Watson       link            create a library or an executable
2057d9af45c4SRobert Watson       uninstall       remove libraries from an installed directory
2058d9af45c4SRobert Watson
20593b97a967SRobert WatsonMODE-ARGS vary depending on the MODE.  When passed as first option,
20603b97a967SRobert Watson'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
20613b97a967SRobert WatsonTry '$progname --help --mode=MODE' for a more detailed description of MODE.
20623b97a967SRobert Watson
20633b97a967SRobert WatsonWhen reporting a bug, please describe a test case to reproduce it and
20643b97a967SRobert Watsoninclude the following information:
20653b97a967SRobert Watson
20663b97a967SRobert Watson       host-triplet:   $host
20673b97a967SRobert Watson       shell:          $SHELL
20683b97a967SRobert Watson       compiler:       $LTCC
20693b97a967SRobert Watson       compiler flags: $LTCFLAGS
20703b97a967SRobert Watson       linker:         $LD (gnu? $with_gnu_ld)
20713b97a967SRobert Watson       version:        $progname (GNU libtool) 2.4.6
20723b97a967SRobert Watson       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
20733b97a967SRobert Watson       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
20743b97a967SRobert Watson
20753b97a967SRobert WatsonReport bugs to <bug-libtool@gnu.org>.
20763b97a967SRobert WatsonGNU libtool home page: <http://www.gnu.org/software/libtool/>.
20773b97a967SRobert WatsonGeneral help using GNU software: <http://www.gnu.org/gethelp/>."
20783b97a967SRobert Watson    exit 0
20793b97a967SRobert Watson}
20803b97a967SRobert Watson
20813b97a967SRobert Watson
20823b97a967SRobert Watson# func_lo2o OBJECT-NAME
20833b97a967SRobert Watson# ---------------------
20843b97a967SRobert Watson# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
20853b97a967SRobert Watson# object suffix.
20863b97a967SRobert Watson
20873b97a967SRobert Watsonlo2o=s/\\.lo\$/.$objext/
20883b97a967SRobert Watsono2lo=s/\\.$objext\$/.lo/
20893b97a967SRobert Watson
20903b97a967SRobert Watsonif test yes = "$_G_HAVE_XSI_OPS"; then
20913b97a967SRobert Watson  eval 'func_lo2o ()
20923b97a967SRobert Watson  {
20933b97a967SRobert Watson    case $1 in
20943b97a967SRobert Watson      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
20953b97a967SRobert Watson      *   ) func_lo2o_result=$1               ;;
20963b97a967SRobert Watson    esac
20973b97a967SRobert Watson  }'
20983b97a967SRobert Watson
20993b97a967SRobert Watson  # func_xform LIBOBJ-OR-SOURCE
21003b97a967SRobert Watson  # ---------------------------
21013b97a967SRobert Watson  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
21023b97a967SRobert Watson  # suffix to a '.lo' libtool-object suffix.
21033b97a967SRobert Watson  eval 'func_xform ()
21043b97a967SRobert Watson  {
21053b97a967SRobert Watson    func_xform_result=${1%.*}.lo
21063b97a967SRobert Watson  }'
21073b97a967SRobert Watsonelse
21083b97a967SRobert Watson  # ...otherwise fall back to using sed.
21093b97a967SRobert Watson  func_lo2o ()
21103b97a967SRobert Watson  {
21113b97a967SRobert Watson    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
21123b97a967SRobert Watson  }
21133b97a967SRobert Watson
21143b97a967SRobert Watson  func_xform ()
21153b97a967SRobert Watson  {
21163b97a967SRobert Watson    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
21173b97a967SRobert Watson  }
21183b97a967SRobert Watsonfi
21193b97a967SRobert Watson
21203b97a967SRobert Watson
21213b97a967SRobert Watson# func_fatal_configuration ARG...
21223b97a967SRobert Watson# -------------------------------
21233b97a967SRobert Watson# Echo program name prefixed message to standard error, followed by
21243b97a967SRobert Watson# a configuration failure hint, and exit.
21253b97a967SRobert Watsonfunc_fatal_configuration ()
21263b97a967SRobert Watson{
21273b97a967SRobert Watson    func__fatal_error ${1+"$@"} \
21283b97a967SRobert Watson      "See the $PACKAGE documentation for more information." \
21293b97a967SRobert Watson      "Fatal configuration error."
21303b97a967SRobert Watson}
21313b97a967SRobert Watson
21323b97a967SRobert Watson
21333b97a967SRobert Watson# func_config
21343b97a967SRobert Watson# -----------
21353b97a967SRobert Watson# Display the configuration for all the tags in this script.
21363b97a967SRobert Watsonfunc_config ()
21373b97a967SRobert Watson{
21383b97a967SRobert Watson    re_begincf='^# ### BEGIN LIBTOOL'
21393b97a967SRobert Watson    re_endcf='^# ### END LIBTOOL'
21403b97a967SRobert Watson
21413b97a967SRobert Watson    # Default configuration.
21423b97a967SRobert Watson    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
21433b97a967SRobert Watson
21443b97a967SRobert Watson    # Now print the configurations for the tags.
21453b97a967SRobert Watson    for tagname in $taglist; do
21463b97a967SRobert Watson      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
21473b97a967SRobert Watson    done
21483b97a967SRobert Watson
21493b97a967SRobert Watson    exit $?
21503b97a967SRobert Watson}
21513b97a967SRobert Watson
21523b97a967SRobert Watson
21533b97a967SRobert Watson# func_features
21543b97a967SRobert Watson# -------------
21553b97a967SRobert Watson# Display the features supported by this script.
21563b97a967SRobert Watsonfunc_features ()
21573b97a967SRobert Watson{
21583b97a967SRobert Watson    echo "host: $host"
21593b97a967SRobert Watson    if test yes = "$build_libtool_libs"; then
21603b97a967SRobert Watson      echo "enable shared libraries"
21613b97a967SRobert Watson    else
21623b97a967SRobert Watson      echo "disable shared libraries"
21633b97a967SRobert Watson    fi
21643b97a967SRobert Watson    if test yes = "$build_old_libs"; then
21653b97a967SRobert Watson      echo "enable static libraries"
21663b97a967SRobert Watson    else
2167eb336521SRobert Watson      echo "disable static libraries"
21683b97a967SRobert Watson    fi
21693b97a967SRobert Watson
21703b97a967SRobert Watson    exit $?
21713b97a967SRobert Watson}
21723b97a967SRobert Watson
21733b97a967SRobert Watson
2174d9af45c4SRobert Watson# func_enable_tag TAGNAME
2175d9af45c4SRobert Watson# -----------------------
2176d9af45c4SRobert Watson# Verify that TAGNAME is valid, and either flag an error and exit, or
2177d9af45c4SRobert Watson# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
2178d9af45c4SRobert Watson# variable here.
2179d9af45c4SRobert Watsonfunc_enable_tag ()
2180d9af45c4SRobert Watson{
2181d9af45c4SRobert Watson    # Global variable:
2182d9af45c4SRobert Watson    tagname=$1
2183d9af45c4SRobert Watson
2184d9af45c4SRobert Watson    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
2185d9af45c4SRobert Watson    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
2186d9af45c4SRobert Watson    sed_extractcf=/$re_begincf/,/$re_endcf/p
2187d9af45c4SRobert Watson
2188d9af45c4SRobert Watson    # Validate tagname.
2189d9af45c4SRobert Watson    case $tagname in
2190d9af45c4SRobert Watson      *[!-_A-Za-z0-9,/]*)
2191d9af45c4SRobert Watson        func_fatal_error "invalid tag name: $tagname"
2192d9af45c4SRobert Watson        ;;
2193d9af45c4SRobert Watson    esac
2194d9af45c4SRobert Watson
2195d9af45c4SRobert Watson    # Don't test for the "default" C tag, as we know it's
2196d9af45c4SRobert Watson    # there but not specially marked.
21973b97a967SRobert Watson    case $tagname in
21983b97a967SRobert Watson        CC) ;;
21993b97a967SRobert Watson    *)
22003b97a967SRobert Watson        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
22013b97a967SRobert Watson	  taglist="$taglist $tagname"
22023b97a967SRobert Watson
22033b97a967SRobert Watson	  # Evaluate the configuration.  Be careful to quote the path
22043b97a967SRobert Watson	  # and the sed script, to avoid splitting on whitespace, but
22053b97a967SRobert Watson	  # also don't use non-portable quotes within backquotes within
22063b97a967SRobert Watson	  # quotes we have to do it in 2 steps:
22073b97a967SRobert Watson	  extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
22083b97a967SRobert Watson	  eval "$extractedcf"
22093b97a967SRobert Watson        else
22103b97a967SRobert Watson	  func_error "ignoring unknown tag $tagname"
22113b97a967SRobert Watson        fi
22123b97a967SRobert Watson        ;;
22133b97a967SRobert Watson    esac
22143b97a967SRobert Watson}
22153b97a967SRobert Watson
22163b97a967SRobert Watson
22173b97a967SRobert Watson# func_check_version_match
22183b97a967SRobert Watson# ------------------------
22193b97a967SRobert Watson# Ensure that we are using m4 macros, and libtool script from the same
22203b97a967SRobert Watson# release of libtool.
22213b97a967SRobert Watsonfunc_check_version_match ()
22223b97a967SRobert Watson{
22233b97a967SRobert Watson    if test "$package_revision" != "$macro_revision"; then
22243b97a967SRobert Watson      if test "$VERSION" != "$macro_version"; then
22253b97a967SRobert Watson        if test -z "$macro_version"; then
22263b97a967SRobert Watson          cat >&2 <<_LT_EOF
22273b97a967SRobert Watson$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
22283b97a967SRobert Watson$progname: definition of this LT_INIT comes from an older release.
22293b97a967SRobert Watson$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
22303b97a967SRobert Watson$progname: and run autoconf again.
22313b97a967SRobert Watson_LT_EOF
22323b97a967SRobert Watson        else
22333b97a967SRobert Watson          cat >&2 <<_LT_EOF
22343b97a967SRobert Watson$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
22353b97a967SRobert Watson$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
22363b97a967SRobert Watson$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
22373b97a967SRobert Watson$progname: and run autoconf again.
22383b97a967SRobert Watson_LT_EOF
22393b97a967SRobert Watson        fi
22403b97a967SRobert Watson      else
22413b97a967SRobert Watson        cat >&2 <<_LT_EOF
22423b97a967SRobert Watson$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
22433b97a967SRobert Watson$progname: but the definition of this LT_INIT comes from revision $macro_revision.
22443b97a967SRobert Watson$progname: You should recreate aclocal.m4 with macros from revision $package_revision
22453b97a967SRobert Watson$progname: of $PACKAGE $VERSION and run autoconf again.
22463b97a967SRobert Watson_LT_EOF
22473b97a967SRobert Watson      fi
22483b97a967SRobert Watson
22493b97a967SRobert Watson      exit $EXIT_MISMATCH
22503b97a967SRobert Watson    fi
22513b97a967SRobert Watson}
22523b97a967SRobert Watson
22533b97a967SRobert Watson
22543b97a967SRobert Watson# libtool_options_prep [ARG]...
22553b97a967SRobert Watson# -----------------------------
22563b97a967SRobert Watson# Preparation for options parsed by libtool.
22573b97a967SRobert Watsonlibtool_options_prep ()
22583b97a967SRobert Watson{
22593b97a967SRobert Watson    $debug_mode
22603b97a967SRobert Watson
22613b97a967SRobert Watson    # Option defaults:
22623b97a967SRobert Watson    opt_config=false
22633b97a967SRobert Watson    opt_dlopen=
22643b97a967SRobert Watson    opt_dry_run=false
22653b97a967SRobert Watson    opt_help=false
22663b97a967SRobert Watson    opt_mode=
22673b97a967SRobert Watson    opt_preserve_dup_deps=false
22683b97a967SRobert Watson    opt_quiet=false
22693b97a967SRobert Watson
22703b97a967SRobert Watson    nonopt=
22713b97a967SRobert Watson    preserve_args=
22723b97a967SRobert Watson
22733b97a967SRobert Watson    # Shorthand for --mode=foo, only valid as the first argument
22743b97a967SRobert Watson    case $1 in
22753b97a967SRobert Watson    clean|clea|cle|cl)
22763b97a967SRobert Watson      shift; set dummy --mode clean ${1+"$@"}; shift
22773b97a967SRobert Watson      ;;
22783b97a967SRobert Watson    compile|compil|compi|comp|com|co|c)
22793b97a967SRobert Watson      shift; set dummy --mode compile ${1+"$@"}; shift
22803b97a967SRobert Watson      ;;
22813b97a967SRobert Watson    execute|execut|execu|exec|exe|ex|e)
22823b97a967SRobert Watson      shift; set dummy --mode execute ${1+"$@"}; shift
22833b97a967SRobert Watson      ;;
22843b97a967SRobert Watson    finish|finis|fini|fin|fi|f)
22853b97a967SRobert Watson      shift; set dummy --mode finish ${1+"$@"}; shift
22863b97a967SRobert Watson      ;;
22873b97a967SRobert Watson    install|instal|insta|inst|ins|in|i)
22883b97a967SRobert Watson      shift; set dummy --mode install ${1+"$@"}; shift
22893b97a967SRobert Watson      ;;
22903b97a967SRobert Watson    link|lin|li|l)
22913b97a967SRobert Watson      shift; set dummy --mode link ${1+"$@"}; shift
22923b97a967SRobert Watson      ;;
22933b97a967SRobert Watson    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
22943b97a967SRobert Watson      shift; set dummy --mode uninstall ${1+"$@"}; shift
22953b97a967SRobert Watson      ;;
22963b97a967SRobert Watson    esac
22973b97a967SRobert Watson
22983b97a967SRobert Watson    # Pass back the list of options.
22993b97a967SRobert Watson    func_quote_for_eval ${1+"$@"}
23003b97a967SRobert Watson    libtool_options_prep_result=$func_quote_for_eval_result
23013b97a967SRobert Watson}
23023b97a967SRobert Watsonfunc_add_hook func_options_prep libtool_options_prep
23033b97a967SRobert Watson
23043b97a967SRobert Watson
23053b97a967SRobert Watson# libtool_parse_options [ARG]...
23063b97a967SRobert Watson# ---------------------------------
23073b97a967SRobert Watson# Provide handling for libtool specific options.
23083b97a967SRobert Watsonlibtool_parse_options ()
23093b97a967SRobert Watson{
23103b97a967SRobert Watson    $debug_cmd
23113b97a967SRobert Watson
23123b97a967SRobert Watson    # Perform our own loop to consume as many options as possible in
23133b97a967SRobert Watson    # each iteration.
23143b97a967SRobert Watson    while test $# -gt 0; do
23153b97a967SRobert Watson      _G_opt=$1
23163b97a967SRobert Watson      shift
23173b97a967SRobert Watson      case $_G_opt in
23183b97a967SRobert Watson        --dry-run|--dryrun|-n)
23193b97a967SRobert Watson                        opt_dry_run=:
23203b97a967SRobert Watson                        ;;
23213b97a967SRobert Watson
23223b97a967SRobert Watson        --config)       func_config ;;
23233b97a967SRobert Watson
23243b97a967SRobert Watson        --dlopen|-dlopen)
23253b97a967SRobert Watson                        opt_dlopen="${opt_dlopen+$opt_dlopen
23263b97a967SRobert Watson}$1"
23273b97a967SRobert Watson                        shift
23283b97a967SRobert Watson                        ;;
23293b97a967SRobert Watson
23303b97a967SRobert Watson        --preserve-dup-deps)
23313b97a967SRobert Watson                        opt_preserve_dup_deps=: ;;
23323b97a967SRobert Watson
23333b97a967SRobert Watson        --features)     func_features ;;
23343b97a967SRobert Watson
23353b97a967SRobert Watson        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
23363b97a967SRobert Watson
23373b97a967SRobert Watson        --help)         opt_help=: ;;
23383b97a967SRobert Watson
23393b97a967SRobert Watson        --help-all)     opt_help=': help-all' ;;
23403b97a967SRobert Watson
23413b97a967SRobert Watson        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
23423b97a967SRobert Watson                        opt_mode=$1
23433b97a967SRobert Watson                        case $1 in
23443b97a967SRobert Watson                          # Valid mode arguments:
23453b97a967SRobert Watson                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
23463b97a967SRobert Watson
23473b97a967SRobert Watson                          # Catch anything else as an error
23483b97a967SRobert Watson                          *) func_error "invalid argument for $_G_opt"
23493b97a967SRobert Watson                             exit_cmd=exit
23503b97a967SRobert Watson                             break
23513b97a967SRobert Watson                             ;;
23523b97a967SRobert Watson                        esac
23533b97a967SRobert Watson                        shift
23543b97a967SRobert Watson                        ;;
23553b97a967SRobert Watson
23563b97a967SRobert Watson        --no-silent|--no-quiet)
23573b97a967SRobert Watson                        opt_quiet=false
23583b97a967SRobert Watson                        func_append preserve_args " $_G_opt"
23593b97a967SRobert Watson                        ;;
23603b97a967SRobert Watson
23613b97a967SRobert Watson        --no-warnings|--no-warning|--no-warn)
23623b97a967SRobert Watson                        opt_warning=false
23633b97a967SRobert Watson                        func_append preserve_args " $_G_opt"
23643b97a967SRobert Watson                        ;;
23653b97a967SRobert Watson
23663b97a967SRobert Watson        --no-verbose)
23673b97a967SRobert Watson                        opt_verbose=false
23683b97a967SRobert Watson                        func_append preserve_args " $_G_opt"
23693b97a967SRobert Watson                        ;;
23703b97a967SRobert Watson
23713b97a967SRobert Watson        --silent|--quiet)
23723b97a967SRobert Watson                        opt_quiet=:
23733b97a967SRobert Watson                        opt_verbose=false
23743b97a967SRobert Watson                        func_append preserve_args " $_G_opt"
23753b97a967SRobert Watson                        ;;
23763b97a967SRobert Watson
23773b97a967SRobert Watson        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
23783b97a967SRobert Watson                        opt_tag=$1
2379d9af45c4SRobert Watson                        func_append preserve_args " $_G_opt $1"
23803b97a967SRobert Watson                        func_enable_tag "$1"
23813b97a967SRobert Watson                        shift
23823b97a967SRobert Watson                        ;;
23833b97a967SRobert Watson
23843b97a967SRobert Watson        --verbose|-v)   opt_quiet=false
23853b97a967SRobert Watson                        opt_verbose=:
23863b97a967SRobert Watson                        func_append preserve_args " $_G_opt"
23873b97a967SRobert Watson                        ;;
23883b97a967SRobert Watson
23893b97a967SRobert Watson	# An option not handled by this hook function:
23903b97a967SRobert Watson        *)		set dummy "$_G_opt" ${1+"$@"};	shift; break  ;;
23913b97a967SRobert Watson      esac
23923b97a967SRobert Watson    done
23933b97a967SRobert Watson
23943b97a967SRobert Watson
23953b97a967SRobert Watson    # save modified positional parameters for caller
23963b97a967SRobert Watson    func_quote_for_eval ${1+"$@"}
23973b97a967SRobert Watson    libtool_parse_options_result=$func_quote_for_eval_result
23983b97a967SRobert Watson}
23993b97a967SRobert Watsonfunc_add_hook func_parse_options libtool_parse_options
24003b97a967SRobert Watson
24013b97a967SRobert Watson
24023b97a967SRobert Watson
24033b97a967SRobert Watson# libtool_validate_options [ARG]...
24043b97a967SRobert Watson# ---------------------------------
24053b97a967SRobert Watson# Perform any sanity checks on option settings and/or unconsumed
24063b97a967SRobert Watson# arguments.
24073b97a967SRobert Watsonlibtool_validate_options ()
24083b97a967SRobert Watson{
24093b97a967SRobert Watson    # save first non-option argument
24103b97a967SRobert Watson    if test 0 -lt $#; then
24113b97a967SRobert Watson      nonopt=$1
24123b97a967SRobert Watson      shift
24133b97a967SRobert Watson    fi
24143b97a967SRobert Watson
24153b97a967SRobert Watson    # preserve --debug
24163b97a967SRobert Watson    test : = "$debug_cmd" || func_append preserve_args " --debug"
24173b97a967SRobert Watson
24183b97a967SRobert Watson    case $host in
24193b97a967SRobert Watson      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
24203b97a967SRobert Watson      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
24213b97a967SRobert Watson      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
24223b97a967SRobert Watson        # don't eliminate duplications in $postdeps and $predeps
24233b97a967SRobert Watson        opt_duplicate_compiler_generated_deps=:
24243b97a967SRobert Watson        ;;
24253b97a967SRobert Watson      *)
24263b97a967SRobert Watson        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
24273b97a967SRobert Watson        ;;
24283b97a967SRobert Watson    esac
24293b97a967SRobert Watson
24303b97a967SRobert Watson    $opt_help || {
24313b97a967SRobert Watson      # Sanity checks first:
24323b97a967SRobert Watson      func_check_version_match
24333b97a967SRobert Watson
24343b97a967SRobert Watson      test yes != "$build_libtool_libs" \
24353b97a967SRobert Watson        && test yes != "$build_old_libs" \
24363b97a967SRobert Watson        && func_fatal_configuration "not configured to build any kind of library"
24373b97a967SRobert Watson
24383b97a967SRobert Watson      # Darwin sucks
24393b97a967SRobert Watson      eval std_shrext=\"$shrext_cmds\"
24403b97a967SRobert Watson
24413b97a967SRobert Watson      # Only execute mode is allowed to have -dlopen flags.
24423b97a967SRobert Watson      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
24433b97a967SRobert Watson        func_error "unrecognized option '-dlopen'"
24443b97a967SRobert Watson        $ECHO "$help" 1>&2
24453b97a967SRobert Watson        exit $EXIT_FAILURE
24463b97a967SRobert Watson      fi
24473b97a967SRobert Watson
24483b97a967SRobert Watson      # Change the help message to a mode-specific one.
24493b97a967SRobert Watson      generic_help=$help
24503b97a967SRobert Watson      help="Try '$progname --help --mode=$opt_mode' for more information."
24513b97a967SRobert Watson    }
24523b97a967SRobert Watson
24533b97a967SRobert Watson    # Pass back the unparsed argument list
24543b97a967SRobert Watson    func_quote_for_eval ${1+"$@"}
24553b97a967SRobert Watson    libtool_validate_options_result=$func_quote_for_eval_result
24563b97a967SRobert Watson}
24573b97a967SRobert Watsonfunc_add_hook func_validate_options libtool_validate_options
24583b97a967SRobert Watson
24593b97a967SRobert Watson
24603b97a967SRobert Watson# Process options as early as possible so that --help and --version
24613b97a967SRobert Watson# can return quickly.
24623b97a967SRobert Watsonfunc_options ${1+"$@"}
24633b97a967SRobert Watsoneval set dummy "$func_options_result"; shift
24643b97a967SRobert Watson
24653b97a967SRobert Watson
24663b97a967SRobert Watson
24673b97a967SRobert Watson## ----------- ##
24683b97a967SRobert Watson##    Main.    ##
24693b97a967SRobert Watson## ----------- ##
24703b97a967SRobert Watson
24713b97a967SRobert Watsonmagic='%%%MAGIC variable%%%'
24723b97a967SRobert Watsonmagic_exe='%%%MAGIC EXE variable%%%'
24733b97a967SRobert Watson
24743b97a967SRobert Watson# Global variables.
24753b97a967SRobert Watsonextracted_archives=
24763b97a967SRobert Watsonextracted_serial=0
24773b97a967SRobert Watson
24783b97a967SRobert Watson# If this variable is set in any of the actions, the command in it
24793b97a967SRobert Watson# will be execed at the end.  This prevents here-documents from being
24803b97a967SRobert Watson# left over by shells.
24813b97a967SRobert Watsonexec_cmd=
24823b97a967SRobert Watson
24833b97a967SRobert Watson
24843b97a967SRobert Watson# A function that is used when there is no print builtin or printf.
24853b97a967SRobert Watsonfunc_fallback_echo ()
24863b97a967SRobert Watson{
24873b97a967SRobert Watson  eval 'cat <<_LTECHO_EOF
24883b97a967SRobert Watson$1
24893b97a967SRobert Watson_LTECHO_EOF'
24903b97a967SRobert Watson}
24913b97a967SRobert Watson
24923b97a967SRobert Watson# func_generated_by_libtool
24933b97a967SRobert Watson# True iff stdin has been generated by Libtool. This function is only
24943b97a967SRobert Watson# a basic sanity check; it will hardly flush out determined imposters.
24953b97a967SRobert Watsonfunc_generated_by_libtool_p ()
24963b97a967SRobert Watson{
24973b97a967SRobert Watson  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
24983b97a967SRobert Watson}
24993b97a967SRobert Watson
25003b97a967SRobert Watson# func_lalib_p file
25013b97a967SRobert Watson# True iff FILE is a libtool '.la' library or '.lo' object file.
25023b97a967SRobert Watson# This function is only a basic sanity check; it will hardly flush out
25033b97a967SRobert Watson# determined imposters.
25043b97a967SRobert Watsonfunc_lalib_p ()
25053b97a967SRobert Watson{
25063b97a967SRobert Watson    test -f "$1" &&
25073b97a967SRobert Watson      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
25083b97a967SRobert Watson}
25093b97a967SRobert Watson
25103b97a967SRobert Watson# func_lalib_unsafe_p file
25113b97a967SRobert Watson# True iff FILE is a libtool '.la' library or '.lo' object file.
25123b97a967SRobert Watson# This function implements the same check as func_lalib_p without
25133b97a967SRobert Watson# resorting to external programs.  To this end, it redirects stdin and
25143b97a967SRobert Watson# closes it afterwards, without saving the original file descriptor.
25153b97a967SRobert Watson# As a safety measure, use it only where a negative result would be
25163b97a967SRobert Watson# fatal anyway.  Works if 'file' does not exist.
25173b97a967SRobert Watsonfunc_lalib_unsafe_p ()
25183b97a967SRobert Watson{
25193b97a967SRobert Watson    lalib_p=no
25203b97a967SRobert Watson    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
25213b97a967SRobert Watson	for lalib_p_l in 1 2 3 4
25223b97a967SRobert Watson	do
25233b97a967SRobert Watson	    read lalib_p_line
25243b97a967SRobert Watson	    case $lalib_p_line in
25253b97a967SRobert Watson		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
25263b97a967SRobert Watson	    esac
25273b97a967SRobert Watson	done
25283b97a967SRobert Watson	exec 0<&5 5<&-
25293b97a967SRobert Watson    fi
25303b97a967SRobert Watson    test yes = "$lalib_p"
25313b97a967SRobert Watson}
25323b97a967SRobert Watson
25333b97a967SRobert Watson# func_ltwrapper_script_p file
25343b97a967SRobert Watson# True iff FILE is a libtool wrapper script
25353b97a967SRobert Watson# This function is only a basic sanity check; it will hardly flush out
25363b97a967SRobert Watson# determined imposters.
25373b97a967SRobert Watsonfunc_ltwrapper_script_p ()
25383b97a967SRobert Watson{
25393b97a967SRobert Watson    test -f "$1" &&
25403b97a967SRobert Watson      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
25413b97a967SRobert Watson}
25423b97a967SRobert Watson
25433b97a967SRobert Watson# func_ltwrapper_executable_p file
25443b97a967SRobert Watson# True iff FILE is a libtool wrapper executable
25453b97a967SRobert Watson# This function is only a basic sanity check; it will hardly flush out
25463b97a967SRobert Watson# determined imposters.
25473b97a967SRobert Watsonfunc_ltwrapper_executable_p ()
25483b97a967SRobert Watson{
25493b97a967SRobert Watson    func_ltwrapper_exec_suffix=
25503b97a967SRobert Watson    case $1 in
25513b97a967SRobert Watson    *.exe) ;;
25523b97a967SRobert Watson    *) func_ltwrapper_exec_suffix=.exe ;;
25533b97a967SRobert Watson    esac
25543b97a967SRobert Watson    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
25553b97a967SRobert Watson}
25563b97a967SRobert Watson
25573b97a967SRobert Watson# func_ltwrapper_scriptname file
25583b97a967SRobert Watson# Assumes file is an ltwrapper_executable
25593b97a967SRobert Watson# uses $file to determine the appropriate filename for a
25603b97a967SRobert Watson# temporary ltwrapper_script.
25613b97a967SRobert Watsonfunc_ltwrapper_scriptname ()
25623b97a967SRobert Watson{
25633b97a967SRobert Watson    func_dirname_and_basename "$1" "" "."
25643b97a967SRobert Watson    func_stripname '' '.exe' "$func_basename_result"
25653b97a967SRobert Watson    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
25663b97a967SRobert Watson}
25673b97a967SRobert Watson
25683b97a967SRobert Watson# func_ltwrapper_p file
25693b97a967SRobert Watson# True iff FILE is a libtool wrapper script or wrapper executable
25703b97a967SRobert Watson# This function is only a basic sanity check; it will hardly flush out
25713b97a967SRobert Watson# determined imposters.
25723b97a967SRobert Watsonfunc_ltwrapper_p ()
25733b97a967SRobert Watson{
25743b97a967SRobert Watson    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
25753b97a967SRobert Watson}
25763b97a967SRobert Watson
25773b97a967SRobert Watson
25783b97a967SRobert Watson# func_execute_cmds commands fail_cmd
25793b97a967SRobert Watson# Execute tilde-delimited COMMANDS.
25803b97a967SRobert Watson# If FAIL_CMD is given, eval that upon failure.
25813b97a967SRobert Watson# FAIL_CMD may read-access the current command in variable CMD!
25823b97a967SRobert Watsonfunc_execute_cmds ()
25833b97a967SRobert Watson{
25843b97a967SRobert Watson    $debug_cmd
25853b97a967SRobert Watson
2586eb336521SRobert Watson    save_ifs=$IFS; IFS='~'
2587eb336521SRobert Watson    for cmd in $1; do
2588eb336521SRobert Watson      IFS=$sp$nl
25893b97a967SRobert Watson      eval cmd=\"$cmd\"
25903b97a967SRobert Watson      IFS=$save_ifs
25913b97a967SRobert Watson      func_show_eval "$cmd" "${2-:}"
25923b97a967SRobert Watson    done
25933b97a967SRobert Watson    IFS=$save_ifs
25943b97a967SRobert Watson}
25953b97a967SRobert Watson
25963b97a967SRobert Watson
25973b97a967SRobert Watson# func_source file
25983b97a967SRobert Watson# Source FILE, adding directory component if necessary.
25993b97a967SRobert Watson# Note that it is not necessary on cygwin/mingw to append a dot to
26003b97a967SRobert Watson# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
26013b97a967SRobert Watson# behavior happens only for exec(3), not for open(2)!  Also, sourcing
26023b97a967SRobert Watson# 'FILE.' does not work on cygwin managed mounts.
26033b97a967SRobert Watsonfunc_source ()
26043b97a967SRobert Watson{
26053b97a967SRobert Watson    $debug_cmd
26063b97a967SRobert Watson
26073b97a967SRobert Watson    case $1 in
26083b97a967SRobert Watson    */* | *\\*)	. "$1" ;;
26093b97a967SRobert Watson    *)		. "./$1" ;;
26103b97a967SRobert Watson    esac
26113b97a967SRobert Watson}
26123b97a967SRobert Watson
26133b97a967SRobert Watson
26143b97a967SRobert Watson# func_resolve_sysroot PATH
26153b97a967SRobert Watson# Replace a leading = in PATH with a sysroot.  Store the result into
26163b97a967SRobert Watson# func_resolve_sysroot_result
26173b97a967SRobert Watsonfunc_resolve_sysroot ()
26183b97a967SRobert Watson{
26193b97a967SRobert Watson  func_resolve_sysroot_result=$1
26203b97a967SRobert Watson  case $func_resolve_sysroot_result in
26213b97a967SRobert Watson  =*)
26223b97a967SRobert Watson    func_stripname '=' '' "$func_resolve_sysroot_result"
26233b97a967SRobert Watson    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
26243b97a967SRobert Watson    ;;
26253b97a967SRobert Watson  esac
26263b97a967SRobert Watson}
26273b97a967SRobert Watson
26283b97a967SRobert Watson# func_replace_sysroot PATH
26293b97a967SRobert Watson# If PATH begins with the sysroot, replace it with = and
26303b97a967SRobert Watson# store the result into func_replace_sysroot_result.
26313b97a967SRobert Watsonfunc_replace_sysroot ()
2632d9af45c4SRobert Watson{
2633d9af45c4SRobert Watson  case $lt_sysroot:$1 in
2634d9af45c4SRobert Watson  ?*:"$lt_sysroot"*)
2635d9af45c4SRobert Watson    func_stripname "$lt_sysroot" '' "$1"
26363b97a967SRobert Watson    func_replace_sysroot_result='='$func_stripname_result
2637d9af45c4SRobert Watson    ;;
26383b97a967SRobert Watson  *)
26393b97a967SRobert Watson    # Including no sysroot.
26403b97a967SRobert Watson    func_replace_sysroot_result=$1
26413b97a967SRobert Watson    ;;
26423b97a967SRobert Watson  esac
26433b97a967SRobert Watson}
26443b97a967SRobert Watson
26453b97a967SRobert Watson# func_infer_tag arg
26463b97a967SRobert Watson# Infer tagged configuration to use if any are available and
26473b97a967SRobert Watson# if one wasn't chosen via the "--tag" command line option.
26483b97a967SRobert Watson# Only attempt this if the compiler in the base compile
26493b97a967SRobert Watson# command doesn't match the default compiler.
26503b97a967SRobert Watson# arg is usually of the form 'gcc ...'
26513b97a967SRobert Watsonfunc_infer_tag ()
26523b97a967SRobert Watson{
26533b97a967SRobert Watson    $debug_cmd
26543b97a967SRobert Watson
26553b97a967SRobert Watson    if test -n "$available_tags" && test -z "$tagname"; then
26563b97a967SRobert Watson      CC_quoted=
26573b97a967SRobert Watson      for arg in $CC; do
26583b97a967SRobert Watson	func_append_quoted CC_quoted "$arg"
26593b97a967SRobert Watson      done
26603b97a967SRobert Watson      CC_expanded=`func_echo_all $CC`
26613b97a967SRobert Watson      CC_quoted_expanded=`func_echo_all $CC_quoted`
26623b97a967SRobert Watson      case $@ in
26633b97a967SRobert Watson      # Blanks in the command may have been stripped by the calling shell,
26643b97a967SRobert Watson      # but not from the CC environment variable when configure was run.
26653b97a967SRobert Watson      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
26663b97a967SRobert Watson      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
26673b97a967SRobert Watson      # Blanks at the start of $base_compile will cause this to fail
26683b97a967SRobert Watson      # if we don't check for them as well.
26693b97a967SRobert Watson      *)
26703b97a967SRobert Watson	for z in $available_tags; do
26713b97a967SRobert Watson	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
26723b97a967SRobert Watson	    # Evaluate the configuration.
26733b97a967SRobert Watson	    eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
26743b97a967SRobert Watson	    CC_quoted=
26753b97a967SRobert Watson	    for arg in $CC; do
26763b97a967SRobert Watson	      # Double-quote args containing other shell metacharacters.
26773b97a967SRobert Watson	      func_append_quoted CC_quoted "$arg"
26783b97a967SRobert Watson	    done
26793b97a967SRobert Watson	    CC_expanded=`func_echo_all $CC`
26803b97a967SRobert Watson	    CC_quoted_expanded=`func_echo_all $CC_quoted`
26813b97a967SRobert Watson	    case "$@ " in
26823b97a967SRobert Watson	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
26833b97a967SRobert Watson	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
26843b97a967SRobert Watson	      # The compiler in the base compile command matches
26853b97a967SRobert Watson	      # the one in the tagged configuration.
26863b97a967SRobert Watson	      # Assume this is the tagged configuration we want.
26873b97a967SRobert Watson	      tagname=$z
26883b97a967SRobert Watson	      break
26893b97a967SRobert Watson	      ;;
26903b97a967SRobert Watson	    esac
26913b97a967SRobert Watson	  fi
26923b97a967SRobert Watson	done
26933b97a967SRobert Watson	# If $tagname still isn't set, then no tagged configuration
26943b97a967SRobert Watson	# was found and let the user know that the "--tag" command
26953b97a967SRobert Watson	# line option must be used.
26963b97a967SRobert Watson	if test -z "$tagname"; then
26973b97a967SRobert Watson	  func_echo "unable to infer tagged configuration"
26983b97a967SRobert Watson	  func_fatal_error "specify a tag with '--tag'"
26993b97a967SRobert Watson#	else
27003b97a967SRobert Watson#	  func_verbose "using $tagname tagged configuration"
27013b97a967SRobert Watson	fi
27023b97a967SRobert Watson	;;
27033b97a967SRobert Watson      esac
27043b97a967SRobert Watson    fi
27053b97a967SRobert Watson}
27063b97a967SRobert Watson
27073b97a967SRobert Watson
27083b97a967SRobert Watson
27093b97a967SRobert Watson# func_write_libtool_object output_name pic_name nonpic_name
27103b97a967SRobert Watson# Create a libtool object file (analogous to a ".la" file),
27113b97a967SRobert Watson# but don't create it if we're doing a dry run.
27123b97a967SRobert Watsonfunc_write_libtool_object ()
27133b97a967SRobert Watson{
27143b97a967SRobert Watson    write_libobj=$1
27153b97a967SRobert Watson    if test yes = "$build_libtool_libs"; then
27163b97a967SRobert Watson      write_lobj=\'$2\'
27173b97a967SRobert Watson    else
27183b97a967SRobert Watson      write_lobj=none
27193b97a967SRobert Watson    fi
27203b97a967SRobert Watson
27213b97a967SRobert Watson    if test yes = "$build_old_libs"; then
27223b97a967SRobert Watson      write_oldobj=\'$3\'
27233b97a967SRobert Watson    else
27243b97a967SRobert Watson      write_oldobj=none
27253b97a967SRobert Watson    fi
27263b97a967SRobert Watson
27273b97a967SRobert Watson    $opt_dry_run || {
27283b97a967SRobert Watson      cat >${write_libobj}T <<EOF
27293b97a967SRobert Watson# $write_libobj - a libtool object file
27303b97a967SRobert Watson# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
27313b97a967SRobert Watson#
27323b97a967SRobert Watson# Please DO NOT delete this file!
27333b97a967SRobert Watson# It is necessary for linking the library.
27343b97a967SRobert Watson
27353b97a967SRobert Watson# Name of the PIC object.
27363b97a967SRobert Watsonpic_object=$write_lobj
27373b97a967SRobert Watson
27383b97a967SRobert Watson# Name of the non-PIC object
27393b97a967SRobert Watsonnon_pic_object=$write_oldobj
27403b97a967SRobert Watson
27413b97a967SRobert WatsonEOF
27423b97a967SRobert Watson      $MV "${write_libobj}T" "$write_libobj"
27433b97a967SRobert Watson    }
27443b97a967SRobert Watson}
27453b97a967SRobert Watson
27463b97a967SRobert Watson
27473b97a967SRobert Watson##################################################
27483b97a967SRobert Watson# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
27493b97a967SRobert Watson##################################################
2750d9af45c4SRobert Watson
2751d9af45c4SRobert Watson# func_convert_core_file_wine_to_w32 ARG
2752d9af45c4SRobert Watson# Helper function used by file name conversion functions when $build is *nix,
2753d9af45c4SRobert Watson# and $host is mingw, cygwin, or some other w32 environment. Relies on a
27543b97a967SRobert Watson# correctly configured wine environment available, with the winepath program
27553b97a967SRobert Watson# in $build's $PATH.
27563b97a967SRobert Watson#
2757d9af45c4SRobert Watson# ARG is the $build file name to be converted to w32 format.
2758d9af45c4SRobert Watson# Result is available in $func_convert_core_file_wine_to_w32_result, and will
27593b97a967SRobert Watson# be empty on error (or when ARG is empty)
27603b97a967SRobert Watsonfunc_convert_core_file_wine_to_w32 ()
27613b97a967SRobert Watson{
27623b97a967SRobert Watson  $debug_cmd
27633b97a967SRobert Watson
27643b97a967SRobert Watson  func_convert_core_file_wine_to_w32_result=$1
27653b97a967SRobert Watson  if test -n "$1"; then
27663b97a967SRobert Watson    # Unfortunately, winepath does not exit with a non-zero error code, so we
27673b97a967SRobert Watson    # are forced to check the contents of stdout. On the other hand, if the
27683b97a967SRobert Watson    # command is not found, the shell will set an exit code of 127 and print
27693b97a967SRobert Watson    # *an error message* to stdout. So we must check for both error code of
27703b97a967SRobert Watson    # zero AND non-empty stdout, which explains the odd construction:
27713b97a967SRobert Watson    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
27723b97a967SRobert Watson    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
27733b97a967SRobert Watson      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
27743b97a967SRobert Watson        $SED -e "$sed_naive_backslashify"`
27753b97a967SRobert Watson    else
27763b97a967SRobert Watson      func_convert_core_file_wine_to_w32_result=
27773b97a967SRobert Watson    fi
27783b97a967SRobert Watson  fi
27793b97a967SRobert Watson}
27803b97a967SRobert Watson# end: func_convert_core_file_wine_to_w32
27813b97a967SRobert Watson
27823b97a967SRobert Watson
27833b97a967SRobert Watson# func_convert_core_path_wine_to_w32 ARG
27843b97a967SRobert Watson# Helper function used by path conversion functions when $build is *nix, and
27853b97a967SRobert Watson# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
27863b97a967SRobert Watson# configured wine environment available, with the winepath program in $build's
27873b97a967SRobert Watson# $PATH. Assumes ARG has no leading or trailing path separator characters.
27883b97a967SRobert Watson#
27893b97a967SRobert Watson# ARG is path to be converted from $build format to win32.
27903b97a967SRobert Watson# Result is available in $func_convert_core_path_wine_to_w32_result.
27913b97a967SRobert Watson# Unconvertible file (directory) names in ARG are skipped; if no directory names
27923b97a967SRobert Watson# are convertible, then the result may be empty.
27933b97a967SRobert Watsonfunc_convert_core_path_wine_to_w32 ()
27943b97a967SRobert Watson{
27953b97a967SRobert Watson  $debug_cmd
27963b97a967SRobert Watson
27973b97a967SRobert Watson  # unfortunately, winepath doesn't convert paths, only file names
27983b97a967SRobert Watson  func_convert_core_path_wine_to_w32_result=
27993b97a967SRobert Watson  if test -n "$1"; then
28003b97a967SRobert Watson    oldIFS=$IFS
28013b97a967SRobert Watson    IFS=:
28023b97a967SRobert Watson    for func_convert_core_path_wine_to_w32_f in $1; do
28033b97a967SRobert Watson      IFS=$oldIFS
28043b97a967SRobert Watson      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
28053b97a967SRobert Watson      if test -n "$func_convert_core_file_wine_to_w32_result"; then
28063b97a967SRobert Watson        if test -z "$func_convert_core_path_wine_to_w32_result"; then
28073b97a967SRobert Watson          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
28083b97a967SRobert Watson        else
28093b97a967SRobert Watson          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
28103b97a967SRobert Watson        fi
28113b97a967SRobert Watson      fi
28123b97a967SRobert Watson    done
28133b97a967SRobert Watson    IFS=$oldIFS
28143b97a967SRobert Watson  fi
28153b97a967SRobert Watson}
28163b97a967SRobert Watson# end: func_convert_core_path_wine_to_w32
28173b97a967SRobert Watson
28183b97a967SRobert Watson
28193b97a967SRobert Watson# func_cygpath ARGS...
28203b97a967SRobert Watson# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
28213b97a967SRobert Watson# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
28223b97a967SRobert Watson# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
28233b97a967SRobert Watson# (2), returns the Cygwin file name or path in func_cygpath_result (input
28243b97a967SRobert Watson# file name or path is assumed to be in w32 format, as previously converted
28253b97a967SRobert Watson# from $build's *nix or MSYS format). In case (3), returns the w32 file name
28263b97a967SRobert Watson# or path in func_cygpath_result (input file name or path is assumed to be in
28273b97a967SRobert Watson# Cygwin format). Returns an empty string on error.
28283b97a967SRobert Watson#
28293b97a967SRobert Watson# ARGS are passed to cygpath, with the last one being the file name or path to
28303b97a967SRobert Watson# be converted.
28313b97a967SRobert Watson#
28323b97a967SRobert Watson# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
28333b97a967SRobert Watson# environment variable; do not put it in $PATH.
28343b97a967SRobert Watsonfunc_cygpath ()
28353b97a967SRobert Watson{
28363b97a967SRobert Watson  $debug_cmd
28373b97a967SRobert Watson
28383b97a967SRobert Watson  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
28393b97a967SRobert Watson    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
28403b97a967SRobert Watson    if test "$?" -ne 0; then
28413b97a967SRobert Watson      # on failure, ensure result is empty
28423b97a967SRobert Watson      func_cygpath_result=
28433b97a967SRobert Watson    fi
28443b97a967SRobert Watson  else
28453b97a967SRobert Watson    func_cygpath_result=
28463b97a967SRobert Watson    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
28473b97a967SRobert Watson  fi
28483b97a967SRobert Watson}
28493b97a967SRobert Watson#end: func_cygpath
28503b97a967SRobert Watson
28513b97a967SRobert Watson
28523b97a967SRobert Watson# func_convert_core_msys_to_w32 ARG
28533b97a967SRobert Watson# Convert file name or path ARG from MSYS format to w32 format.  Return
28543b97a967SRobert Watson# result in func_convert_core_msys_to_w32_result.
28553b97a967SRobert Watsonfunc_convert_core_msys_to_w32 ()
28563b97a967SRobert Watson{
28573b97a967SRobert Watson  $debug_cmd
28583b97a967SRobert Watson
28593b97a967SRobert Watson  # awkward: cmd appends spaces to result
28603b97a967SRobert Watson  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
28613b97a967SRobert Watson    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
28623b97a967SRobert Watson}
28633b97a967SRobert Watson#end: func_convert_core_msys_to_w32
28643b97a967SRobert Watson
28653b97a967SRobert Watson
28663b97a967SRobert Watson# func_convert_file_check ARG1 ARG2
28673b97a967SRobert Watson# Verify that ARG1 (a file name in $build format) was converted to $host
28683b97a967SRobert Watson# format in ARG2. Otherwise, emit an error message, but continue (resetting
28693b97a967SRobert Watson# func_to_host_file_result to ARG1).
28703b97a967SRobert Watsonfunc_convert_file_check ()
28713b97a967SRobert Watson{
28723b97a967SRobert Watson  $debug_cmd
28733b97a967SRobert Watson
28743b97a967SRobert Watson  if test -z "$2" && test -n "$1"; then
28753b97a967SRobert Watson    func_error "Could not determine host file name corresponding to"
28763b97a967SRobert Watson    func_error "  '$1'"
28773b97a967SRobert Watson    func_error "Continuing, but uninstalled executables may not work."
28783b97a967SRobert Watson    # Fallback:
28793b97a967SRobert Watson    func_to_host_file_result=$1
28803b97a967SRobert Watson  fi
28813b97a967SRobert Watson}
28823b97a967SRobert Watson# end func_convert_file_check
28833b97a967SRobert Watson
28843b97a967SRobert Watson
28853b97a967SRobert Watson# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
28863b97a967SRobert Watson# Verify that FROM_PATH (a path in $build format) was converted to $host
28873b97a967SRobert Watson# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
28883b97a967SRobert Watson# func_to_host_file_result to a simplistic fallback value (see below).
28893b97a967SRobert Watsonfunc_convert_path_check ()
28903b97a967SRobert Watson{
28913b97a967SRobert Watson  $debug_cmd
28923b97a967SRobert Watson
28933b97a967SRobert Watson  if test -z "$4" && test -n "$3"; then
28943b97a967SRobert Watson    func_error "Could not determine the host path corresponding to"
28953b97a967SRobert Watson    func_error "  '$3'"
28963b97a967SRobert Watson    func_error "Continuing, but uninstalled executables may not work."
28973b97a967SRobert Watson    # Fallback.  This is a deliberately simplistic "conversion" and
28983b97a967SRobert Watson    # should not be "improved".  See libtool.info.
28993b97a967SRobert Watson    if test "x$1" != "x$2"; then
29003b97a967SRobert Watson      lt_replace_pathsep_chars="s|$1|$2|g"
29013b97a967SRobert Watson      func_to_host_path_result=`echo "$3" |
29023b97a967SRobert Watson        $SED -e "$lt_replace_pathsep_chars"`
29033b97a967SRobert Watson    else
29043b97a967SRobert Watson      func_to_host_path_result=$3
29053b97a967SRobert Watson    fi
29063b97a967SRobert Watson  fi
29073b97a967SRobert Watson}
29083b97a967SRobert Watson# end func_convert_path_check
29093b97a967SRobert Watson
29103b97a967SRobert Watson
29113b97a967SRobert Watson# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
29123b97a967SRobert Watson# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
29133b97a967SRobert Watson# and appending REPL if ORIG matches BACKPAT.
29143b97a967SRobert Watsonfunc_convert_path_front_back_pathsep ()
29153b97a967SRobert Watson{
29163b97a967SRobert Watson  $debug_cmd
29173b97a967SRobert Watson
29183b97a967SRobert Watson  case $4 in
29193b97a967SRobert Watson  $1 ) func_to_host_path_result=$3$func_to_host_path_result
29203b97a967SRobert Watson    ;;
29213b97a967SRobert Watson  esac
29223b97a967SRobert Watson  case $4 in
29233b97a967SRobert Watson  $2 ) func_append func_to_host_path_result "$3"
29243b97a967SRobert Watson    ;;
29253b97a967SRobert Watson  esac
29263b97a967SRobert Watson}
29273b97a967SRobert Watson# end func_convert_path_front_back_pathsep
29283b97a967SRobert Watson
29293b97a967SRobert Watson
29303b97a967SRobert Watson##################################################
29313b97a967SRobert Watson# $build to $host FILE NAME CONVERSION FUNCTIONS #
29323b97a967SRobert Watson##################################################
29333b97a967SRobert Watson# invoked via '$to_host_file_cmd ARG'
29343b97a967SRobert Watson#
29353b97a967SRobert Watson# In each case, ARG is the path to be converted from $build to $host format.
29363b97a967SRobert Watson# Result will be available in $func_to_host_file_result.
29373b97a967SRobert Watson
29383b97a967SRobert Watson
29393b97a967SRobert Watson# func_to_host_file ARG
29403b97a967SRobert Watson# Converts the file name ARG from $build format to $host format. Return result
29413b97a967SRobert Watson# in func_to_host_file_result.
29423b97a967SRobert Watsonfunc_to_host_file ()
29433b97a967SRobert Watson{
29443b97a967SRobert Watson  $debug_cmd
29453b97a967SRobert Watson
29463b97a967SRobert Watson  $to_host_file_cmd "$1"
29473b97a967SRobert Watson}
29483b97a967SRobert Watson# end func_to_host_file
29493b97a967SRobert Watson
29503b97a967SRobert Watson
29513b97a967SRobert Watson# func_to_tool_file ARG LAZY
29523b97a967SRobert Watson# converts the file name ARG from $build format to toolchain format. Return
29533b97a967SRobert Watson# result in func_to_tool_file_result.  If the conversion in use is listed
29543b97a967SRobert Watson# in (the comma separated) LAZY, no conversion takes place.
29553b97a967SRobert Watsonfunc_to_tool_file ()
29563b97a967SRobert Watson{
29573b97a967SRobert Watson  $debug_cmd
29583b97a967SRobert Watson
29593b97a967SRobert Watson  case ,$2, in
29603b97a967SRobert Watson    *,"$to_tool_file_cmd",*)
29613b97a967SRobert Watson      func_to_tool_file_result=$1
29623b97a967SRobert Watson      ;;
29633b97a967SRobert Watson    *)
29643b97a967SRobert Watson      $to_tool_file_cmd "$1"
29653b97a967SRobert Watson      func_to_tool_file_result=$func_to_host_file_result
29663b97a967SRobert Watson      ;;
29673b97a967SRobert Watson  esac
29683b97a967SRobert Watson}
29693b97a967SRobert Watson# end func_to_tool_file
29703b97a967SRobert Watson
29713b97a967SRobert Watson
29723b97a967SRobert Watson# func_convert_file_noop ARG
29733b97a967SRobert Watson# Copy ARG to func_to_host_file_result.
29743b97a967SRobert Watsonfunc_convert_file_noop ()
29753b97a967SRobert Watson{
29763b97a967SRobert Watson  func_to_host_file_result=$1
29773b97a967SRobert Watson}
29783b97a967SRobert Watson# end func_convert_file_noop
29793b97a967SRobert Watson
29803b97a967SRobert Watson
29813b97a967SRobert Watson# func_convert_file_msys_to_w32 ARG
29823b97a967SRobert Watson# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
29833b97a967SRobert Watson# conversion to w32 is not available inside the cwrapper.  Returns result in
29843b97a967SRobert Watson# func_to_host_file_result.
29853b97a967SRobert Watsonfunc_convert_file_msys_to_w32 ()
29863b97a967SRobert Watson{
29873b97a967SRobert Watson  $debug_cmd
29883b97a967SRobert Watson
29893b97a967SRobert Watson  func_to_host_file_result=$1
29903b97a967SRobert Watson  if test -n "$1"; then
29913b97a967SRobert Watson    func_convert_core_msys_to_w32 "$1"
29923b97a967SRobert Watson    func_to_host_file_result=$func_convert_core_msys_to_w32_result
29933b97a967SRobert Watson  fi
29943b97a967SRobert Watson  func_convert_file_check "$1" "$func_to_host_file_result"
29953b97a967SRobert Watson}
29963b97a967SRobert Watson# end func_convert_file_msys_to_w32
29973b97a967SRobert Watson
29983b97a967SRobert Watson
29993b97a967SRobert Watson# func_convert_file_cygwin_to_w32 ARG
30003b97a967SRobert Watson# Convert file name ARG from Cygwin to w32 format.  Returns result in
30013b97a967SRobert Watson# func_to_host_file_result.
30023b97a967SRobert Watsonfunc_convert_file_cygwin_to_w32 ()
30033b97a967SRobert Watson{
30043b97a967SRobert Watson  $debug_cmd
30053b97a967SRobert Watson
30063b97a967SRobert Watson  func_to_host_file_result=$1
30073b97a967SRobert Watson  if test -n "$1"; then
30083b97a967SRobert Watson    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
30093b97a967SRobert Watson    # LT_CYGPATH in this case.
30103b97a967SRobert Watson    func_to_host_file_result=`cygpath -m "$1"`
30113b97a967SRobert Watson  fi
30123b97a967SRobert Watson  func_convert_file_check "$1" "$func_to_host_file_result"
30133b97a967SRobert Watson}
30143b97a967SRobert Watson# end func_convert_file_cygwin_to_w32
30153b97a967SRobert Watson
30163b97a967SRobert Watson
30173b97a967SRobert Watson# func_convert_file_nix_to_w32 ARG
30183b97a967SRobert Watson# Convert file name ARG from *nix to w32 format.  Requires a wine environment
30193b97a967SRobert Watson# and a working winepath. Returns result in func_to_host_file_result.
30203b97a967SRobert Watsonfunc_convert_file_nix_to_w32 ()
30213b97a967SRobert Watson{
30223b97a967SRobert Watson  $debug_cmd
30233b97a967SRobert Watson
30243b97a967SRobert Watson  func_to_host_file_result=$1
30253b97a967SRobert Watson  if test -n "$1"; then
30263b97a967SRobert Watson    func_convert_core_file_wine_to_w32 "$1"
30273b97a967SRobert Watson    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
30283b97a967SRobert Watson  fi
30293b97a967SRobert Watson  func_convert_file_check "$1" "$func_to_host_file_result"
30303b97a967SRobert Watson}
30313b97a967SRobert Watson# end func_convert_file_nix_to_w32
30323b97a967SRobert Watson
30333b97a967SRobert Watson
30343b97a967SRobert Watson# func_convert_file_msys_to_cygwin ARG
30353b97a967SRobert Watson# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
30363b97a967SRobert Watson# Returns result in func_to_host_file_result.
30373b97a967SRobert Watsonfunc_convert_file_msys_to_cygwin ()
30383b97a967SRobert Watson{
30393b97a967SRobert Watson  $debug_cmd
30403b97a967SRobert Watson
30413b97a967SRobert Watson  func_to_host_file_result=$1
30423b97a967SRobert Watson  if test -n "$1"; then
30433b97a967SRobert Watson    func_convert_core_msys_to_w32 "$1"
30443b97a967SRobert Watson    func_cygpath -u "$func_convert_core_msys_to_w32_result"
30453b97a967SRobert Watson    func_to_host_file_result=$func_cygpath_result
30463b97a967SRobert Watson  fi
30473b97a967SRobert Watson  func_convert_file_check "$1" "$func_to_host_file_result"
30483b97a967SRobert Watson}
30493b97a967SRobert Watson# end func_convert_file_msys_to_cygwin
30503b97a967SRobert Watson
30513b97a967SRobert Watson
30523b97a967SRobert Watson# func_convert_file_nix_to_cygwin ARG
30533b97a967SRobert Watson# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
30543b97a967SRobert Watson# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
30553b97a967SRobert Watson# in func_to_host_file_result.
30563b97a967SRobert Watsonfunc_convert_file_nix_to_cygwin ()
30573b97a967SRobert Watson{
30583b97a967SRobert Watson  $debug_cmd
30593b97a967SRobert Watson
30603b97a967SRobert Watson  func_to_host_file_result=$1
30613b97a967SRobert Watson  if test -n "$1"; then
30623b97a967SRobert Watson    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
30633b97a967SRobert Watson    func_convert_core_file_wine_to_w32 "$1"
30643b97a967SRobert Watson    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
30653b97a967SRobert Watson    func_to_host_file_result=$func_cygpath_result
30663b97a967SRobert Watson  fi
30673b97a967SRobert Watson  func_convert_file_check "$1" "$func_to_host_file_result"
30683b97a967SRobert Watson}
30693b97a967SRobert Watson# end func_convert_file_nix_to_cygwin
30703b97a967SRobert Watson
30713b97a967SRobert Watson
30723b97a967SRobert Watson#############################################
30733b97a967SRobert Watson# $build to $host PATH CONVERSION FUNCTIONS #
30743b97a967SRobert Watson#############################################
30753b97a967SRobert Watson# invoked via '$to_host_path_cmd ARG'
30763b97a967SRobert Watson#
30773b97a967SRobert Watson# In each case, ARG is the path to be converted from $build to $host format.
30783b97a967SRobert Watson# The result will be available in $func_to_host_path_result.
30793b97a967SRobert Watson#
30803b97a967SRobert Watson# Path separators are also converted from $build format to $host format.  If
30813b97a967SRobert Watson# ARG begins or ends with a path separator character, it is preserved (but
30823b97a967SRobert Watson# converted to $host format) on output.
30833b97a967SRobert Watson#
30843b97a967SRobert Watson# All path conversion functions are named using the following convention:
30853b97a967SRobert Watson#   file name conversion function    : func_convert_file_X_to_Y ()
30863b97a967SRobert Watson#   path conversion function         : func_convert_path_X_to_Y ()
30873b97a967SRobert Watson# where, for any given $build/$host combination the 'X_to_Y' value is the
30883b97a967SRobert Watson# same.  If conversion functions are added for new $build/$host combinations,
30893b97a967SRobert Watson# the two new functions must follow this pattern, or func_init_to_host_path_cmd
30903b97a967SRobert Watson# will break.
30913b97a967SRobert Watson
30923b97a967SRobert Watson
30933b97a967SRobert Watson# func_init_to_host_path_cmd
30943b97a967SRobert Watson# Ensures that function "pointer" variable $to_host_path_cmd is set to the
30953b97a967SRobert Watson# appropriate value, based on the value of $to_host_file_cmd.
30963b97a967SRobert Watsonto_host_path_cmd=
30973b97a967SRobert Watsonfunc_init_to_host_path_cmd ()
30983b97a967SRobert Watson{
30993b97a967SRobert Watson  $debug_cmd
31003b97a967SRobert Watson
31013b97a967SRobert Watson  if test -z "$to_host_path_cmd"; then
31023b97a967SRobert Watson    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
31033b97a967SRobert Watson    to_host_path_cmd=func_convert_path_$func_stripname_result
31043b97a967SRobert Watson  fi
31053b97a967SRobert Watson}
31063b97a967SRobert Watson
31073b97a967SRobert Watson
31083b97a967SRobert Watson# func_to_host_path ARG
31093b97a967SRobert Watson# Converts the path ARG from $build format to $host format. Return result
31103b97a967SRobert Watson# in func_to_host_path_result.
31113b97a967SRobert Watsonfunc_to_host_path ()
31123b97a967SRobert Watson{
31133b97a967SRobert Watson  $debug_cmd
31143b97a967SRobert Watson
31153b97a967SRobert Watson  func_init_to_host_path_cmd
31163b97a967SRobert Watson  $to_host_path_cmd "$1"
31173b97a967SRobert Watson}
31183b97a967SRobert Watson# end func_to_host_path
31193b97a967SRobert Watson
31203b97a967SRobert Watson
31213b97a967SRobert Watson# func_convert_path_noop ARG
31223b97a967SRobert Watson# Copy ARG to func_to_host_path_result.
31233b97a967SRobert Watsonfunc_convert_path_noop ()
31243b97a967SRobert Watson{
31253b97a967SRobert Watson  func_to_host_path_result=$1
31263b97a967SRobert Watson}
31273b97a967SRobert Watson# end func_convert_path_noop
31283b97a967SRobert Watson
31293b97a967SRobert Watson
31303b97a967SRobert Watson# func_convert_path_msys_to_w32 ARG
31313b97a967SRobert Watson# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
31323b97a967SRobert Watson# conversion to w32 is not available inside the cwrapper.  Returns result in
31333b97a967SRobert Watson# func_to_host_path_result.
31343b97a967SRobert Watsonfunc_convert_path_msys_to_w32 ()
31353b97a967SRobert Watson{
31363b97a967SRobert Watson  $debug_cmd
31373b97a967SRobert Watson
31383b97a967SRobert Watson  func_to_host_path_result=$1
31393b97a967SRobert Watson  if test -n "$1"; then
31403b97a967SRobert Watson    # Remove leading and trailing path separator characters from ARG.  MSYS
31413b97a967SRobert Watson    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
31423b97a967SRobert Watson    # and winepath ignores them completely.
31433b97a967SRobert Watson    func_stripname : : "$1"
31443b97a967SRobert Watson    func_to_host_path_tmp1=$func_stripname_result
31453b97a967SRobert Watson    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
31463b97a967SRobert Watson    func_to_host_path_result=$func_convert_core_msys_to_w32_result
31473b97a967SRobert Watson    func_convert_path_check : ";" \
31483b97a967SRobert Watson      "$func_to_host_path_tmp1" "$func_to_host_path_result"
31493b97a967SRobert Watson    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
31503b97a967SRobert Watson  fi
31513b97a967SRobert Watson}
31523b97a967SRobert Watson# end func_convert_path_msys_to_w32
31533b97a967SRobert Watson
31543b97a967SRobert Watson
31553b97a967SRobert Watson# func_convert_path_cygwin_to_w32 ARG
31563b97a967SRobert Watson# Convert path ARG from Cygwin to w32 format.  Returns result in
31573b97a967SRobert Watson# func_to_host_file_result.
31583b97a967SRobert Watsonfunc_convert_path_cygwin_to_w32 ()
31593b97a967SRobert Watson{
31603b97a967SRobert Watson  $debug_cmd
31613b97a967SRobert Watson
31623b97a967SRobert Watson  func_to_host_path_result=$1
31633b97a967SRobert Watson  if test -n "$1"; then
31643b97a967SRobert Watson    # See func_convert_path_msys_to_w32:
31653b97a967SRobert Watson    func_stripname : : "$1"
31663b97a967SRobert Watson    func_to_host_path_tmp1=$func_stripname_result
31673b97a967SRobert Watson    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
31683b97a967SRobert Watson    func_convert_path_check : ";" \
31693b97a967SRobert Watson      "$func_to_host_path_tmp1" "$func_to_host_path_result"
31703b97a967SRobert Watson    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
31713b97a967SRobert Watson  fi
31723b97a967SRobert Watson}
31733b97a967SRobert Watson# end func_convert_path_cygwin_to_w32
31743b97a967SRobert Watson
31753b97a967SRobert Watson
31763b97a967SRobert Watson# func_convert_path_nix_to_w32 ARG
31773b97a967SRobert Watson# Convert path ARG from *nix to w32 format.  Requires a wine environment and
31783b97a967SRobert Watson# a working winepath.  Returns result in func_to_host_file_result.
31793b97a967SRobert Watsonfunc_convert_path_nix_to_w32 ()
31803b97a967SRobert Watson{
31813b97a967SRobert Watson  $debug_cmd
31823b97a967SRobert Watson
31833b97a967SRobert Watson  func_to_host_path_result=$1
31843b97a967SRobert Watson  if test -n "$1"; then
31853b97a967SRobert Watson    # See func_convert_path_msys_to_w32:
31863b97a967SRobert Watson    func_stripname : : "$1"
31873b97a967SRobert Watson    func_to_host_path_tmp1=$func_stripname_result
31883b97a967SRobert Watson    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
31893b97a967SRobert Watson    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
31903b97a967SRobert Watson    func_convert_path_check : ";" \
31913b97a967SRobert Watson      "$func_to_host_path_tmp1" "$func_to_host_path_result"
31923b97a967SRobert Watson    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
31933b97a967SRobert Watson  fi
31943b97a967SRobert Watson}
31953b97a967SRobert Watson# end func_convert_path_nix_to_w32
31963b97a967SRobert Watson
31973b97a967SRobert Watson
31983b97a967SRobert Watson# func_convert_path_msys_to_cygwin ARG
31993b97a967SRobert Watson# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
32003b97a967SRobert Watson# Returns result in func_to_host_file_result.
32013b97a967SRobert Watsonfunc_convert_path_msys_to_cygwin ()
32023b97a967SRobert Watson{
32033b97a967SRobert Watson  $debug_cmd
32043b97a967SRobert Watson
32053b97a967SRobert Watson  func_to_host_path_result=$1
32063b97a967SRobert Watson  if test -n "$1"; then
32073b97a967SRobert Watson    # See func_convert_path_msys_to_w32:
32083b97a967SRobert Watson    func_stripname : : "$1"
32093b97a967SRobert Watson    func_to_host_path_tmp1=$func_stripname_result
32103b97a967SRobert Watson    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
32113b97a967SRobert Watson    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
32123b97a967SRobert Watson    func_to_host_path_result=$func_cygpath_result
32133b97a967SRobert Watson    func_convert_path_check : : \
32143b97a967SRobert Watson      "$func_to_host_path_tmp1" "$func_to_host_path_result"
32153b97a967SRobert Watson    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
32163b97a967SRobert Watson  fi
32173b97a967SRobert Watson}
32183b97a967SRobert Watson# end func_convert_path_msys_to_cygwin
32193b97a967SRobert Watson
32203b97a967SRobert Watson
32213b97a967SRobert Watson# func_convert_path_nix_to_cygwin ARG
32223b97a967SRobert Watson# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
32233b97a967SRobert Watson# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
32243b97a967SRobert Watson# func_to_host_file_result.
32253b97a967SRobert Watsonfunc_convert_path_nix_to_cygwin ()
32263b97a967SRobert Watson{
32273b97a967SRobert Watson  $debug_cmd
32283b97a967SRobert Watson
32293b97a967SRobert Watson  func_to_host_path_result=$1
32303b97a967SRobert Watson  if test -n "$1"; then
32313b97a967SRobert Watson    # Remove leading and trailing path separator characters from
32323b97a967SRobert Watson    # ARG. msys behavior is inconsistent here, cygpath turns them
32333b97a967SRobert Watson    # into '.;' and ';.', and winepath ignores them completely.
32343b97a967SRobert Watson    func_stripname : : "$1"
32353b97a967SRobert Watson    func_to_host_path_tmp1=$func_stripname_result
32363b97a967SRobert Watson    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
32373b97a967SRobert Watson    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
32383b97a967SRobert Watson    func_to_host_path_result=$func_cygpath_result
32393b97a967SRobert Watson    func_convert_path_check : : \
32403b97a967SRobert Watson      "$func_to_host_path_tmp1" "$func_to_host_path_result"
32413b97a967SRobert Watson    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
32423b97a967SRobert Watson  fi
32433b97a967SRobert Watson}
32443b97a967SRobert Watson# end func_convert_path_nix_to_cygwin
32453b97a967SRobert Watson
32463b97a967SRobert Watson
32473b97a967SRobert Watson# func_dll_def_p FILE
32483b97a967SRobert Watson# True iff FILE is a Windows DLL '.def' file.
32493b97a967SRobert Watson# Keep in sync with _LT_DLL_DEF_P in libtool.m4
32503b97a967SRobert Watsonfunc_dll_def_p ()
32513b97a967SRobert Watson{
32523b97a967SRobert Watson  $debug_cmd
32533b97a967SRobert Watson
32543b97a967SRobert Watson  func_dll_def_p_tmp=`$SED -n \
32553b97a967SRobert Watson    -e 's/^[	 ]*//' \
32563b97a967SRobert Watson    -e '/^\(;.*\)*$/d' \
32573b97a967SRobert Watson    -e 's/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p' \
32583b97a967SRobert Watson    -e q \
32593b97a967SRobert Watson    "$1"`
32603b97a967SRobert Watson  test DEF = "$func_dll_def_p_tmp"
32613b97a967SRobert Watson}
32623b97a967SRobert Watson
32633b97a967SRobert Watson
32643b97a967SRobert Watson# func_mode_compile arg...
32653b97a967SRobert Watsonfunc_mode_compile ()
32663b97a967SRobert Watson{
32673b97a967SRobert Watson    $debug_cmd
32683b97a967SRobert Watson
32693b97a967SRobert Watson    # Get the compilation command and the source file.
32703b97a967SRobert Watson    base_compile=
32713b97a967SRobert Watson    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
32723b97a967SRobert Watson    suppress_opt=yes
32733b97a967SRobert Watson    suppress_output=
32743b97a967SRobert Watson    arg_mode=normal
32753b97a967SRobert Watson    libobj=
32763b97a967SRobert Watson    later=
32773b97a967SRobert Watson    pie_flag=
32783b97a967SRobert Watson
32793b97a967SRobert Watson    for arg
32803b97a967SRobert Watson    do
32813b97a967SRobert Watson      case $arg_mode in
32823b97a967SRobert Watson      arg  )
32833b97a967SRobert Watson	# do not "continue".  Instead, add this to base_compile
3284eb336521SRobert Watson	lastarg=$arg
32853b97a967SRobert Watson	arg_mode=normal
32863b97a967SRobert Watson	;;
32873b97a967SRobert Watson
32883b97a967SRobert Watson      target )
32893b97a967SRobert Watson	libobj=$arg
32903b97a967SRobert Watson	arg_mode=normal
32913b97a967SRobert Watson	continue
32923b97a967SRobert Watson	;;
32933b97a967SRobert Watson
32943b97a967SRobert Watson      normal )
3295eb336521SRobert Watson	# Accept any command-line options.
32963b97a967SRobert Watson	case $arg in
32973b97a967SRobert Watson	-o)
3298eb336521SRobert Watson	  test -n "$libobj" && \
32993b97a967SRobert Watson	    func_fatal_error "you cannot specify '-o' more than once"
33003b97a967SRobert Watson	  arg_mode=target
33013b97a967SRobert Watson	  continue
33023b97a967SRobert Watson	  ;;
33033b97a967SRobert Watson
33043b97a967SRobert Watson	-pie | -fpie | -fPIE)
33053b97a967SRobert Watson          func_append pie_flag " $arg"
33063b97a967SRobert Watson	  continue
33073b97a967SRobert Watson	  ;;
33083b97a967SRobert Watson
33093b97a967SRobert Watson	-shared | -static | -prefer-pic | -prefer-non-pic)
33103b97a967SRobert Watson	  func_append later " $arg"
33113b97a967SRobert Watson	  continue
33123b97a967SRobert Watson	  ;;
33133b97a967SRobert Watson
33143b97a967SRobert Watson	-no-suppress)
33153b97a967SRobert Watson	  suppress_opt=no
33163b97a967SRobert Watson	  continue
33173b97a967SRobert Watson	  ;;
33183b97a967SRobert Watson
33193b97a967SRobert Watson	-Xcompiler)
33203b97a967SRobert Watson	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
33213b97a967SRobert Watson	  continue      #  The current "srcfile" will either be retained or
33223b97a967SRobert Watson	  ;;            #  replaced later.  I would guess that would be a bug.
33233b97a967SRobert Watson
33243b97a967SRobert Watson	-Wc,*)
33253b97a967SRobert Watson	  func_stripname '-Wc,' '' "$arg"
33263b97a967SRobert Watson	  args=$func_stripname_result
33273b97a967SRobert Watson	  lastarg=
33283b97a967SRobert Watson	  save_ifs=$IFS; IFS=,
33293b97a967SRobert Watson	  for arg in $args; do
33303b97a967SRobert Watson	    IFS=$save_ifs
33313b97a967SRobert Watson	    func_append_quoted lastarg "$arg"
33323b97a967SRobert Watson	  done
33333b97a967SRobert Watson	  IFS=$save_ifs
33343b97a967SRobert Watson	  func_stripname ' ' '' "$lastarg"
33353b97a967SRobert Watson	  lastarg=$func_stripname_result
33363b97a967SRobert Watson
33373b97a967SRobert Watson	  # Add the arguments to base_compile.
33383b97a967SRobert Watson	  func_append base_compile " $lastarg"
33393b97a967SRobert Watson	  continue
33403b97a967SRobert Watson	  ;;
33413b97a967SRobert Watson
33423b97a967SRobert Watson	*)
33433b97a967SRobert Watson	  # Accept the current argument as the source file.
33443b97a967SRobert Watson	  # The previous "srcfile" becomes the current argument.
33453b97a967SRobert Watson	  #
33463b97a967SRobert Watson	  lastarg=$srcfile
33473b97a967SRobert Watson	  srcfile=$arg
33483b97a967SRobert Watson	  ;;
33493b97a967SRobert Watson	esac  #  case $arg
33503b97a967SRobert Watson	;;
33513b97a967SRobert Watson      esac    #  case $arg_mode
33523b97a967SRobert Watson
33533b97a967SRobert Watson      # Aesthetically quote the previous argument.
33543b97a967SRobert Watson      func_append_quoted base_compile "$lastarg"
33553b97a967SRobert Watson    done # for arg
33563b97a967SRobert Watson
3357eb336521SRobert Watson    case $arg_mode in
3358eb336521SRobert Watson    arg)
33593b97a967SRobert Watson      func_fatal_error "you must specify an argument for -Xcompile"
33603b97a967SRobert Watson      ;;
33613b97a967SRobert Watson    target)
33623b97a967SRobert Watson      func_fatal_error "you must specify a target with '-o'"
33633b97a967SRobert Watson      ;;
33643b97a967SRobert Watson    *)
33653b97a967SRobert Watson      # Get the name of the library object.
33663b97a967SRobert Watson      test -z "$libobj" && {
33673b97a967SRobert Watson	func_basename "$srcfile"
33683b97a967SRobert Watson	libobj=$func_basename_result
33693b97a967SRobert Watson      }
33703b97a967SRobert Watson      ;;
33713b97a967SRobert Watson    esac
3372eb336521SRobert Watson
3373eb336521SRobert Watson    # Recognize several different file suffixes.
3374eb336521SRobert Watson    # If the user specifies -o file.o, it is replaced with file.lo
33753b97a967SRobert Watson    case $libobj in
3376eb336521SRobert Watson    *.[cCFSifmso] | \
33773b97a967SRobert Watson    *.ada | *.adb | *.ads | *.asm | \
33783b97a967SRobert Watson    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
33793b97a967SRobert Watson    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
33803b97a967SRobert Watson      func_xform "$libobj"
33813b97a967SRobert Watson      libobj=$func_xform_result
33823b97a967SRobert Watson      ;;
33833b97a967SRobert Watson    esac
33843b97a967SRobert Watson
33853b97a967SRobert Watson    case $libobj in
33863b97a967SRobert Watson    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
33873b97a967SRobert Watson    *)
33883b97a967SRobert Watson      func_fatal_error "cannot determine name of library object from '$libobj'"
33893b97a967SRobert Watson      ;;
33903b97a967SRobert Watson    esac
33913b97a967SRobert Watson
33923b97a967SRobert Watson    func_infer_tag $base_compile
33933b97a967SRobert Watson
33943b97a967SRobert Watson    for arg in $later; do
33953b97a967SRobert Watson      case $arg in
33963b97a967SRobert Watson      -shared)
33973b97a967SRobert Watson	test yes = "$build_libtool_libs" \
33983b97a967SRobert Watson	  || func_fatal_configuration "cannot build a shared library"
33993b97a967SRobert Watson	build_old_libs=no
34003b97a967SRobert Watson	continue
34013b97a967SRobert Watson	;;
34023b97a967SRobert Watson
34033b97a967SRobert Watson      -static)
34043b97a967SRobert Watson	build_libtool_libs=no
34053b97a967SRobert Watson	build_old_libs=yes
34063b97a967SRobert Watson	continue
34073b97a967SRobert Watson	;;
34083b97a967SRobert Watson
34093b97a967SRobert Watson      -prefer-pic)
34103b97a967SRobert Watson	pic_mode=yes
34113b97a967SRobert Watson	continue
34123b97a967SRobert Watson	;;
34133b97a967SRobert Watson
34143b97a967SRobert Watson      -prefer-non-pic)
34153b97a967SRobert Watson	pic_mode=no
34163b97a967SRobert Watson	continue
34173b97a967SRobert Watson	;;
34183b97a967SRobert Watson      esac
34193b97a967SRobert Watson    done
34203b97a967SRobert Watson
34213b97a967SRobert Watson    func_quote_for_eval "$libobj"
34223b97a967SRobert Watson    test "X$libobj" != "X$func_quote_for_eval_result" \
34233b97a967SRobert Watson      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
34243b97a967SRobert Watson      && func_warning "libobj name '$libobj' may not contain shell special characters."
34253b97a967SRobert Watson    func_dirname_and_basename "$obj" "/" ""
34263b97a967SRobert Watson    objname=$func_basename_result
34273b97a967SRobert Watson    xdir=$func_dirname_result
34283b97a967SRobert Watson    lobj=$xdir$objdir/$objname
34293b97a967SRobert Watson
34303b97a967SRobert Watson    test -z "$base_compile" && \
34313b97a967SRobert Watson      func_fatal_help "you must specify a compilation command"
34323b97a967SRobert Watson
34333b97a967SRobert Watson    # Delete any leftover library objects.
34343b97a967SRobert Watson    if test yes = "$build_old_libs"; then
34353b97a967SRobert Watson      removelist="$obj $lobj $libobj ${libobj}T"
34363b97a967SRobert Watson    else
34373b97a967SRobert Watson      removelist="$lobj $libobj ${libobj}T"
34383b97a967SRobert Watson    fi
34393b97a967SRobert Watson
34403b97a967SRobert Watson    # On Cygwin there's no "real" PIC flag so we must build both object types
34413b97a967SRobert Watson    case $host_os in
34423b97a967SRobert Watson    cygwin* | mingw* | pw32* | os2* | cegcc*)
34433b97a967SRobert Watson      pic_mode=default
34443b97a967SRobert Watson      ;;
34453b97a967SRobert Watson    esac
34463b97a967SRobert Watson    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
34473b97a967SRobert Watson      # non-PIC code in shared libraries is not supported
34483b97a967SRobert Watson      pic_mode=default
34493b97a967SRobert Watson    fi
34503b97a967SRobert Watson
34513b97a967SRobert Watson    # Calculate the filename of the output object if compiler does
34523b97a967SRobert Watson    # not support -o with -c
34533b97a967SRobert Watson    if test no = "$compiler_c_o"; then
34543b97a967SRobert Watson      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
34553b97a967SRobert Watson      lockfile=$output_obj.lock
34563b97a967SRobert Watson    else
34573b97a967SRobert Watson      output_obj=
34583b97a967SRobert Watson      need_locks=no
34593b97a967SRobert Watson      lockfile=
34603b97a967SRobert Watson    fi
34613b97a967SRobert Watson
34623b97a967SRobert Watson    # Lock this critical section if it is needed
34633b97a967SRobert Watson    # We use this script file to make the link, it avoids creating a new file
34643b97a967SRobert Watson    if test yes = "$need_locks"; then
34653b97a967SRobert Watson      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
34663b97a967SRobert Watson	func_echo "Waiting for $lockfile to be removed"
34673b97a967SRobert Watson	sleep 2
34683b97a967SRobert Watson      done
34693b97a967SRobert Watson    elif test warn = "$need_locks"; then
34703b97a967SRobert Watson      if test -f "$lockfile"; then
34713b97a967SRobert Watson	$ECHO "\
34723b97a967SRobert Watson*** ERROR, $lockfile exists and contains:
34733b97a967SRobert Watson`cat $lockfile 2>/dev/null`
34743b97a967SRobert Watson
34753b97a967SRobert WatsonThis indicates that another process is trying to use the same
34763b97a967SRobert Watsontemporary object file, and libtool could not work around it because
34773b97a967SRobert Watsonyour compiler does not support '-c' and '-o' together.  If you
34783b97a967SRobert Watsonrepeat this compilation, it may succeed, by chance, but you had better
34793b97a967SRobert Watsonavoid parallel builds (make -j) in this platform, or get a better
34803b97a967SRobert Watsoncompiler."
34813b97a967SRobert Watson
34823b97a967SRobert Watson	$opt_dry_run || $RM $removelist
34833b97a967SRobert Watson	exit $EXIT_FAILURE
34843b97a967SRobert Watson      fi
34853b97a967SRobert Watson      func_append removelist " $output_obj"
34863b97a967SRobert Watson      $ECHO "$srcfile" > "$lockfile"
34873b97a967SRobert Watson    fi
34883b97a967SRobert Watson
34893b97a967SRobert Watson    $opt_dry_run || $RM $removelist
34903b97a967SRobert Watson    func_append removelist " $lockfile"
34913b97a967SRobert Watson    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
34923b97a967SRobert Watson
34933b97a967SRobert Watson    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
34943b97a967SRobert Watson    srcfile=$func_to_tool_file_result
34953b97a967SRobert Watson    func_quote_for_eval "$srcfile"
34963b97a967SRobert Watson    qsrcfile=$func_quote_for_eval_result
34973b97a967SRobert Watson
34983b97a967SRobert Watson    # Only build a PIC object if we are building libtool libraries.
34993b97a967SRobert Watson    if test yes = "$build_libtool_libs"; then
35003b97a967SRobert Watson      # Without this assignment, base_compile gets emptied.
35013b97a967SRobert Watson      fbsd_hideous_sh_bug=$base_compile
35023b97a967SRobert Watson
35033b97a967SRobert Watson      if test no != "$pic_mode"; then
35043b97a967SRobert Watson	command="$base_compile $qsrcfile $pic_flag"
35053b97a967SRobert Watson      else
35063b97a967SRobert Watson	# Don't build PIC code
35073b97a967SRobert Watson	command="$base_compile $qsrcfile"
35083b97a967SRobert Watson      fi
35093b97a967SRobert Watson
35103b97a967SRobert Watson      func_mkdir_p "$xdir$objdir"
35113b97a967SRobert Watson
35123b97a967SRobert Watson      if test -z "$output_obj"; then
3513eb336521SRobert Watson	# Place PIC objects in $objdir
3514eb336521SRobert Watson	func_append command " -o $lobj"
3515eb336521SRobert Watson      fi
3516eb336521SRobert Watson
3517eb336521SRobert Watson      func_show_eval_locale "$command"	\
35183b97a967SRobert Watson          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
35193b97a967SRobert Watson
35203b97a967SRobert Watson      if test warn = "$need_locks" &&
35213b97a967SRobert Watson	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
35223b97a967SRobert Watson	$ECHO "\
35233b97a967SRobert Watson*** ERROR, $lockfile contains:
35243b97a967SRobert Watson`cat $lockfile 2>/dev/null`
35253b97a967SRobert Watson
35263b97a967SRobert Watsonbut it should contain:
35273b97a967SRobert Watson$srcfile
35283b97a967SRobert Watson
35293b97a967SRobert WatsonThis indicates that another process is trying to use the same
35303b97a967SRobert Watsontemporary object file, and libtool could not work around it because
35313b97a967SRobert Watsonyour compiler does not support '-c' and '-o' together.  If you
35323b97a967SRobert Watsonrepeat this compilation, it may succeed, by chance, but you had better
35333b97a967SRobert Watsonavoid parallel builds (make -j) in this platform, or get a better
35343b97a967SRobert Watsoncompiler."
35353b97a967SRobert Watson
35363b97a967SRobert Watson	$opt_dry_run || $RM $removelist
35373b97a967SRobert Watson	exit $EXIT_FAILURE
35383b97a967SRobert Watson      fi
35393b97a967SRobert Watson
35403b97a967SRobert Watson      # Just move the object if needed, then go on to compile the next one
35413b97a967SRobert Watson      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
35423b97a967SRobert Watson	func_show_eval '$MV "$output_obj" "$lobj"' \
35433b97a967SRobert Watson	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
35443b97a967SRobert Watson      fi
35453b97a967SRobert Watson
35463b97a967SRobert Watson      # Allow error messages only from the first compilation.
35473b97a967SRobert Watson      if test yes = "$suppress_opt"; then
35483b97a967SRobert Watson	suppress_output=' >/dev/null 2>&1'
35493b97a967SRobert Watson      fi
35503b97a967SRobert Watson    fi
35513b97a967SRobert Watson
35523b97a967SRobert Watson    # Only build a position-dependent object if we build old libraries.
35533b97a967SRobert Watson    if test yes = "$build_old_libs"; then
35543b97a967SRobert Watson      if test yes != "$pic_mode"; then
35553b97a967SRobert Watson	# Don't build PIC code
35563b97a967SRobert Watson	command="$base_compile $qsrcfile$pie_flag"
35573b97a967SRobert Watson      else
35583b97a967SRobert Watson	command="$base_compile $qsrcfile $pic_flag"
35593b97a967SRobert Watson      fi
35603b97a967SRobert Watson      if test yes = "$compiler_c_o"; then
35613b97a967SRobert Watson	func_append command " -o $obj"
35623b97a967SRobert Watson      fi
35633b97a967SRobert Watson
35643b97a967SRobert Watson      # Suppress compiler output if we already did a PIC compilation.
35653b97a967SRobert Watson      func_append command "$suppress_output"
35663b97a967SRobert Watson      func_show_eval_locale "$command" \
35673b97a967SRobert Watson        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
35683b97a967SRobert Watson
3569d9af45c4SRobert Watson      if test warn = "$need_locks" &&
3570d9af45c4SRobert Watson	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3571d9af45c4SRobert Watson	$ECHO "\
3572d9af45c4SRobert Watson*** ERROR, $lockfile contains:
3573d9af45c4SRobert Watson`cat $lockfile 2>/dev/null`
3574d9af45c4SRobert Watson
35753b97a967SRobert Watsonbut it should contain:
35763b97a967SRobert Watson$srcfile
35773b97a967SRobert Watson
35783b97a967SRobert WatsonThis indicates that another process is trying to use the same
35793b97a967SRobert Watsontemporary object file, and libtool could not work around it because
35803b97a967SRobert Watsonyour compiler does not support '-c' and '-o' together.  If you
35813b97a967SRobert Watsonrepeat this compilation, it may succeed, by chance, but you had better
35823b97a967SRobert Watsonavoid parallel builds (make -j) in this platform, or get a better
35833b97a967SRobert Watsoncompiler."
35843b97a967SRobert Watson
35853b97a967SRobert Watson	$opt_dry_run || $RM $removelist
35863b97a967SRobert Watson	exit $EXIT_FAILURE
35873b97a967SRobert Watson      fi
35883b97a967SRobert Watson
35893b97a967SRobert Watson      # Just move the object if needed
35903b97a967SRobert Watson      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
35913b97a967SRobert Watson	func_show_eval '$MV "$output_obj" "$obj"' \
35923b97a967SRobert Watson	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
35933b97a967SRobert Watson      fi
35943b97a967SRobert Watson    fi
35953b97a967SRobert Watson
35963b97a967SRobert Watson    $opt_dry_run || {
35973b97a967SRobert Watson      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
35983b97a967SRobert Watson
35993b97a967SRobert Watson      # Unlock the critical section if it was locked
36003b97a967SRobert Watson      if test no != "$need_locks"; then
36013b97a967SRobert Watson	removelist=$lockfile
36023b97a967SRobert Watson        $RM "$lockfile"
36033b97a967SRobert Watson      fi
36043b97a967SRobert Watson    }
36053b97a967SRobert Watson
36063b97a967SRobert Watson    exit $EXIT_SUCCESS
36073b97a967SRobert Watson}
36083b97a967SRobert Watson
36093b97a967SRobert Watson$opt_help || {
36103b97a967SRobert Watson  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
36113b97a967SRobert Watson}
36123b97a967SRobert Watson
36133b97a967SRobert Watsonfunc_mode_help ()
36143b97a967SRobert Watson{
36153b97a967SRobert Watson    # We need to display help for each of the modes.
36163b97a967SRobert Watson    case $opt_mode in
36173b97a967SRobert Watson      "")
3618eb336521SRobert Watson        # Generic help is extracted from the usage comments
36193b97a967SRobert Watson        # at the start of this file.
36203b97a967SRobert Watson        func_help
36213b97a967SRobert Watson        ;;
36223b97a967SRobert Watson
3623eb336521SRobert Watson      clean)
36243b97a967SRobert Watson        $ECHO \
36253b97a967SRobert Watson"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
36263b97a967SRobert Watson
36273b97a967SRobert WatsonRemove files from the build directory.
36283b97a967SRobert Watson
36293b97a967SRobert WatsonRM is the name of the program to use to delete files associated with each FILE
36303b97a967SRobert Watson(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
36313b97a967SRobert Watsonto RM.
36323b97a967SRobert Watson
36333b97a967SRobert WatsonIf FILE is a libtool library, object or program, all the files associated
36343b97a967SRobert Watsonwith it are deleted. Otherwise, only FILE itself is deleted using RM."
36353b97a967SRobert Watson        ;;
36363b97a967SRobert Watson
36373b97a967SRobert Watson      compile)
36383b97a967SRobert Watson      $ECHO \
36393b97a967SRobert Watson"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
36403b97a967SRobert Watson
36413b97a967SRobert WatsonCompile a source file into a libtool library object.
36423b97a967SRobert Watson
36433b97a967SRobert WatsonThis mode accepts the following additional options:
36443b97a967SRobert Watson
36453b97a967SRobert Watson  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
36463b97a967SRobert Watson  -no-suppress      do not suppress compiler output for multiple passes
36473b97a967SRobert Watson  -prefer-pic       try to build PIC objects only
36483b97a967SRobert Watson  -prefer-non-pic   try to build non-PIC objects only
36493b97a967SRobert Watson  -shared           do not build a '.o' file suitable for static linking
36503b97a967SRobert Watson  -static           only build a '.o' file suitable for static linking
36513b97a967SRobert Watson  -Wc,FLAG          pass FLAG directly to the compiler
36523b97a967SRobert Watson
36533b97a967SRobert WatsonCOMPILE-COMMAND is a command to be used in creating a 'standard' object file
36543b97a967SRobert Watsonfrom the given SOURCEFILE.
36553b97a967SRobert Watson
36563b97a967SRobert WatsonThe output file name is determined by removing the directory component from
36573b97a967SRobert WatsonSOURCEFILE, then substituting the C source code suffix '.c' with the
36583b97a967SRobert Watsonlibrary object suffix, '.lo'."
36593b97a967SRobert Watson        ;;
36603b97a967SRobert Watson
36613b97a967SRobert Watson      execute)
3662eb336521SRobert Watson        $ECHO \
36633b97a967SRobert Watson"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
36643b97a967SRobert Watson
36653b97a967SRobert WatsonAutomatically set library path, then run a program.
36663b97a967SRobert Watson
36673b97a967SRobert WatsonThis mode accepts the following additional options:
36683b97a967SRobert Watson
36693b97a967SRobert Watson  -dlopen FILE      add the directory containing FILE to the library path
36703b97a967SRobert Watson
36713b97a967SRobert WatsonThis mode sets the library path environment variable according to '-dlopen'
36723b97a967SRobert Watsonflags.
36733b97a967SRobert Watson
36743b97a967SRobert WatsonIf any of the ARGS are libtool executable wrappers, then they are translated
36753b97a967SRobert Watsoninto their corresponding uninstalled binary, and any of their required library
36763b97a967SRobert Watsondirectories are added to the library path.
36773b97a967SRobert Watson
36783b97a967SRobert WatsonThen, COMMAND is executed, with ARGS as arguments."
36793b97a967SRobert Watson        ;;
36803b97a967SRobert Watson
36813b97a967SRobert Watson      finish)
36823b97a967SRobert Watson        $ECHO \
36833b97a967SRobert Watson"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
36843b97a967SRobert Watson
36853b97a967SRobert WatsonComplete the installation of libtool libraries.
36863b97a967SRobert Watson
36873b97a967SRobert WatsonEach LIBDIR is a directory that contains libtool libraries.
36883b97a967SRobert Watson
36893b97a967SRobert WatsonThe commands that this mode executes may require superuser privileges.  Use
36903b97a967SRobert Watsonthe '--dry-run' option if you just want to see what would be executed."
36913b97a967SRobert Watson        ;;
36923b97a967SRobert Watson
36933b97a967SRobert Watson      install)
36943b97a967SRobert Watson        $ECHO \
36953b97a967SRobert Watson"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
36963b97a967SRobert Watson
36973b97a967SRobert WatsonInstall executables or libraries.
36983b97a967SRobert Watson
36993b97a967SRobert WatsonINSTALL-COMMAND is the installation command.  The first component should be
37003b97a967SRobert Watsoneither the 'install' or 'cp' program.
37013b97a967SRobert Watson
37023b97a967SRobert WatsonThe following components of INSTALL-COMMAND are treated specially:
37033b97a967SRobert Watson
37043b97a967SRobert Watson  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
37053b97a967SRobert Watson
37063b97a967SRobert WatsonThe rest of the components are interpreted as arguments to that command (only
37073b97a967SRobert WatsonBSD-compatible install options are recognized)."
37083b97a967SRobert Watson        ;;
37093b97a967SRobert Watson
37103b97a967SRobert Watson      link)
37113b97a967SRobert Watson        $ECHO \
37123b97a967SRobert Watson"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
37133b97a967SRobert Watson
37143b97a967SRobert WatsonLink object files or libraries together to form another library, or to
37153b97a967SRobert Watsoncreate an executable program.
37163b97a967SRobert Watson
37173b97a967SRobert WatsonLINK-COMMAND is a command using the C compiler that you would use to create
37183b97a967SRobert Watsona program from several object files.
37193b97a967SRobert Watson
37203b97a967SRobert WatsonThe following components of LINK-COMMAND are treated specially:
37213b97a967SRobert Watson
37223b97a967SRobert Watson  -all-static       do not do any dynamic linking at all
37233b97a967SRobert Watson  -avoid-version    do not add a version suffix if possible
37243b97a967SRobert Watson  -bindir BINDIR    specify path to binaries directory (for systems where
37253b97a967SRobert Watson                    libraries must be found in the PATH setting at runtime)
37263b97a967SRobert Watson  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
37273b97a967SRobert Watson  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
37283b97a967SRobert Watson  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
37293b97a967SRobert Watson  -export-symbols SYMFILE
37303b97a967SRobert Watson                    try to export only the symbols listed in SYMFILE
37313b97a967SRobert Watson  -export-symbols-regex REGEX
37323b97a967SRobert Watson                    try to export only the symbols matching REGEX
37333b97a967SRobert Watson  -LLIBDIR          search LIBDIR for required installed libraries
37343b97a967SRobert Watson  -lNAME            OUTPUT-FILE requires the installed library libNAME
37353b97a967SRobert Watson  -module           build a library that can dlopened
37363b97a967SRobert Watson  -no-fast-install  disable the fast-install mode
37373b97a967SRobert Watson  -no-install       link a not-installable executable
37383b97a967SRobert Watson  -no-undefined     declare that a library does not refer to external symbols
37393b97a967SRobert Watson  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
37403b97a967SRobert Watson  -objectlist FILE  use a list of object files found in FILE to specify objects
37413b97a967SRobert Watson  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
37423b97a967SRobert Watson  -precious-files-regex REGEX
37433b97a967SRobert Watson                    don't remove output files matching REGEX
37443b97a967SRobert Watson  -release RELEASE  specify package release information
37453b97a967SRobert Watson  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
37463b97a967SRobert Watson  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
37473b97a967SRobert Watson  -shared           only do dynamic linking of libtool libraries
37483b97a967SRobert Watson  -shrext SUFFIX    override the standard shared library file extension
37493b97a967SRobert Watson  -static           do not do any dynamic linking of uninstalled libtool libraries
37503b97a967SRobert Watson  -static-libtool-libs
37513b97a967SRobert Watson                    do not do any dynamic linking of libtool libraries
37523b97a967SRobert Watson  -version-info CURRENT[:REVISION[:AGE]]
37533b97a967SRobert Watson                    specify library version info [each variable defaults to 0]
37543b97a967SRobert Watson  -weak LIBNAME     declare that the target provides the LIBNAME interface
37553b97a967SRobert Watson  -Wc,FLAG
37563b97a967SRobert Watson  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
37573b97a967SRobert Watson  -Wl,FLAG
37583b97a967SRobert Watson  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
37593b97a967SRobert Watson  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
37603b97a967SRobert Watson
37613b97a967SRobert WatsonAll other options (arguments beginning with '-') are ignored.
37623b97a967SRobert Watson
37633b97a967SRobert WatsonEvery other argument is treated as a filename.  Files ending in '.la' are
37643b97a967SRobert Watsontreated as uninstalled libtool libraries, other files are standard or library
37653b97a967SRobert Watsonobject files.
37663b97a967SRobert Watson
37673b97a967SRobert WatsonIf the OUTPUT-FILE ends in '.la', then a libtool library is created,
37683b97a967SRobert Watsononly library objects ('.lo' files) may be specified, and '-rpath' is
37693b97a967SRobert Watsonrequired, except when creating a convenience library.
37703b97a967SRobert Watson
37713b97a967SRobert WatsonIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
37723b97a967SRobert Watsonusing 'ar' and 'ranlib', or on Windows using 'lib'.
37733b97a967SRobert Watson
37743b97a967SRobert WatsonIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
37753b97a967SRobert Watsonis created, otherwise an executable program is created."
37763b97a967SRobert Watson        ;;
37773b97a967SRobert Watson
37783b97a967SRobert Watson      uninstall)
37793b97a967SRobert Watson        $ECHO \
37803b97a967SRobert Watson"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
37813b97a967SRobert Watson
37823b97a967SRobert WatsonRemove libraries from an installation directory.
37833b97a967SRobert Watson
37843b97a967SRobert WatsonRM is the name of the program to use to delete files associated with each FILE
37853b97a967SRobert Watson(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
37863b97a967SRobert Watsonto RM.
37873b97a967SRobert Watson
37883b97a967SRobert WatsonIf FILE is a libtool library, all the files associated with it are deleted.
37893b97a967SRobert WatsonOtherwise, only FILE itself is deleted using RM."
37903b97a967SRobert Watson        ;;
37913b97a967SRobert Watson
37923b97a967SRobert Watson      *)
37933b97a967SRobert Watson        func_fatal_help "invalid operation mode '$opt_mode'"
37943b97a967SRobert Watson        ;;
37953b97a967SRobert Watson    esac
37963b97a967SRobert Watson
37973b97a967SRobert Watson    echo
37983b97a967SRobert Watson    $ECHO "Try '$progname --help' for more information about other modes."
37993b97a967SRobert Watson}
38003b97a967SRobert Watson
38013b97a967SRobert Watson# Now that we've collected a possible --mode arg, show help if necessary
38023b97a967SRobert Watsonif $opt_help; then
38033b97a967SRobert Watson  if test : = "$opt_help"; then
38043b97a967SRobert Watson    func_mode_help
38053b97a967SRobert Watson  else
38063b97a967SRobert Watson    {
38073b97a967SRobert Watson      func_help noexit
38083b97a967SRobert Watson      for opt_mode in compile link execute install finish uninstall clean; do
38093b97a967SRobert Watson	func_mode_help
38103b97a967SRobert Watson      done
38113b97a967SRobert Watson    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
38123b97a967SRobert Watson    {
38133b97a967SRobert Watson      func_help noexit
38143b97a967SRobert Watson      for opt_mode in compile link execute install finish uninstall clean; do
38153b97a967SRobert Watson	echo
38163b97a967SRobert Watson	func_mode_help
38173b97a967SRobert Watson      done
38183b97a967SRobert Watson    } |
38193b97a967SRobert Watson    $SED '1d
38203b97a967SRobert Watson      /^When reporting/,/^Report/{
38213b97a967SRobert Watson	H
38223b97a967SRobert Watson	d
38233b97a967SRobert Watson      }
38243b97a967SRobert Watson      $x
38253b97a967SRobert Watson      /information about other modes/d
38263b97a967SRobert Watson      /more detailed .*MODE/d
38273b97a967SRobert Watson      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
38283b97a967SRobert Watson  fi
38293b97a967SRobert Watson  exit $?
38303b97a967SRobert Watsonfi
38313b97a967SRobert Watson
38323b97a967SRobert Watson
38333b97a967SRobert Watson# func_mode_execute arg...
38343b97a967SRobert Watsonfunc_mode_execute ()
38353b97a967SRobert Watson{
38363b97a967SRobert Watson    $debug_cmd
38373b97a967SRobert Watson
38383b97a967SRobert Watson    # The first argument is the command name.
38393b97a967SRobert Watson    cmd=$nonopt
38403b97a967SRobert Watson    test -z "$cmd" && \
38413b97a967SRobert Watson      func_fatal_help "you must specify a COMMAND"
38423b97a967SRobert Watson
38433b97a967SRobert Watson    # Handle -dlopen flags immediately.
38443b97a967SRobert Watson    for file in $opt_dlopen; do
38453b97a967SRobert Watson      test -f "$file" \
38463b97a967SRobert Watson	|| func_fatal_help "'$file' is not a file"
38473b97a967SRobert Watson
38483b97a967SRobert Watson      dir=
38493b97a967SRobert Watson      case $file in
38503b97a967SRobert Watson      *.la)
38513b97a967SRobert Watson	func_resolve_sysroot "$file"
38523b97a967SRobert Watson	file=$func_resolve_sysroot_result
38533b97a967SRobert Watson
38543b97a967SRobert Watson	# Check to see that this really is a libtool archive.
38553b97a967SRobert Watson	func_lalib_unsafe_p "$file" \
38563b97a967SRobert Watson	  || func_fatal_help "'$lib' is not a valid libtool archive"
38573b97a967SRobert Watson
38583b97a967SRobert Watson	# Read the libtool library.
38593b97a967SRobert Watson	dlname=
38603b97a967SRobert Watson	library_names=
38613b97a967SRobert Watson	func_source "$file"
38623b97a967SRobert Watson
38633b97a967SRobert Watson	# Skip this library if it cannot be dlopened.
38643b97a967SRobert Watson	if test -z "$dlname"; then
38653b97a967SRobert Watson	  # Warn if it was a shared library.
38663b97a967SRobert Watson	  test -n "$library_names" && \
38673b97a967SRobert Watson	    func_warning "'$file' was not linked with '-export-dynamic'"
38683b97a967SRobert Watson	  continue
38693b97a967SRobert Watson	fi
38703b97a967SRobert Watson
38713b97a967SRobert Watson	func_dirname "$file" "" "."
38723b97a967SRobert Watson	dir=$func_dirname_result
38733b97a967SRobert Watson
38743b97a967SRobert Watson	if test -f "$dir/$objdir/$dlname"; then
38753b97a967SRobert Watson	  func_append dir "/$objdir"
38763b97a967SRobert Watson	else
38773b97a967SRobert Watson	  if test ! -f "$dir/$dlname"; then
38783b97a967SRobert Watson	    func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
38793b97a967SRobert Watson	  fi
38803b97a967SRobert Watson	fi
38813b97a967SRobert Watson	;;
38823b97a967SRobert Watson
38833b97a967SRobert Watson      *.lo)
38843b97a967SRobert Watson	# Just add the directory containing the .lo file.
38853b97a967SRobert Watson	func_dirname "$file" "" "."
38863b97a967SRobert Watson	dir=$func_dirname_result
38873b97a967SRobert Watson	;;
38883b97a967SRobert Watson
38893b97a967SRobert Watson      *)
38903b97a967SRobert Watson	func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
38913b97a967SRobert Watson	continue
38923b97a967SRobert Watson	;;
38933b97a967SRobert Watson      esac
38943b97a967SRobert Watson
38953b97a967SRobert Watson      # Get the absolute pathname.
38963b97a967SRobert Watson      absdir=`cd "$dir" && pwd`
38973b97a967SRobert Watson      test -n "$absdir" && dir=$absdir
38983b97a967SRobert Watson
38993b97a967SRobert Watson      # Now add the directory to shlibpath_var.
39003b97a967SRobert Watson      if eval "test -z \"\$$shlibpath_var\""; then
39013b97a967SRobert Watson	eval "$shlibpath_var=\"\$dir\""
39023b97a967SRobert Watson      else
39033b97a967SRobert Watson	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
39043b97a967SRobert Watson      fi
39053b97a967SRobert Watson    done
39063b97a967SRobert Watson
3907d9af45c4SRobert Watson    # This variable tells wrapper scripts just to set shlibpath_var
3908d9af45c4SRobert Watson    # rather than running their programs.
3909d9af45c4SRobert Watson    libtool_execute_magic=$magic
3910d9af45c4SRobert Watson
3911d9af45c4SRobert Watson    # Check if any of the arguments is a wrapper script.
3912d9af45c4SRobert Watson    args=
3913d9af45c4SRobert Watson    for file
3914d9af45c4SRobert Watson    do
3915d9af45c4SRobert Watson      case $file in
3916d9af45c4SRobert Watson      -* | *.la | *.lo ) ;;
3917d9af45c4SRobert Watson      *)
3918d9af45c4SRobert Watson	# Do a test to see if this is really a libtool program.
3919d9af45c4SRobert Watson	if func_ltwrapper_script_p "$file"; then
3920d9af45c4SRobert Watson	  func_source "$file"
3921d9af45c4SRobert Watson	  # Transform arg to wrapped name.
3922d9af45c4SRobert Watson	  file=$progdir/$program
3923d9af45c4SRobert Watson	elif func_ltwrapper_executable_p "$file"; then
3924d9af45c4SRobert Watson	  func_ltwrapper_scriptname "$file"
3925d9af45c4SRobert Watson	  func_source "$func_ltwrapper_scriptname_result"
3926d9af45c4SRobert Watson	  # Transform arg to wrapped name.
3927d9af45c4SRobert Watson	  file=$progdir/$program
3928d9af45c4SRobert Watson	fi
3929d9af45c4SRobert Watson	;;
3930d9af45c4SRobert Watson      esac
3931d9af45c4SRobert Watson      # Quote arguments (to preserve shell metacharacters).
3932d9af45c4SRobert Watson      func_append_quoted args "$file"
3933d9af45c4SRobert Watson    done
3934d9af45c4SRobert Watson
3935d9af45c4SRobert Watson    if $opt_dry_run; then
39363b97a967SRobert Watson      # Display what would be done.
39373b97a967SRobert Watson      if test -n "$shlibpath_var"; then
39383b97a967SRobert Watson	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
39393b97a967SRobert Watson	echo "export $shlibpath_var"
39403b97a967SRobert Watson      fi
39413b97a967SRobert Watson      $ECHO "$cmd$args"
39423b97a967SRobert Watson      exit $EXIT_SUCCESS
39433b97a967SRobert Watson    else
39443b97a967SRobert Watson      if test -n "$shlibpath_var"; then
39453b97a967SRobert Watson	# Export the shlibpath_var.
39463b97a967SRobert Watson	eval "export $shlibpath_var"
39473b97a967SRobert Watson      fi
39483b97a967SRobert Watson
39493b97a967SRobert Watson      # Restore saved environment variables
39503b97a967SRobert Watson      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
39513b97a967SRobert Watson      do
39523b97a967SRobert Watson	eval "if test \"\${save_$lt_var+set}\" = set; then
39533b97a967SRobert Watson                $lt_var=\$save_$lt_var; export $lt_var
39543b97a967SRobert Watson	      else
39553b97a967SRobert Watson		$lt_unset $lt_var
39563b97a967SRobert Watson	      fi"
39573b97a967SRobert Watson      done
39583b97a967SRobert Watson
39593b97a967SRobert Watson      # Now prepare to actually exec the command.
39603b97a967SRobert Watson      exec_cmd=\$cmd$args
39613b97a967SRobert Watson    fi
39623b97a967SRobert Watson}
39633b97a967SRobert Watson
39643b97a967SRobert Watsontest execute = "$opt_mode" && func_mode_execute ${1+"$@"}
39653b97a967SRobert Watson
39663b97a967SRobert Watson
39673b97a967SRobert Watson# func_mode_finish arg...
39683b97a967SRobert Watsonfunc_mode_finish ()
39693b97a967SRobert Watson{
39703b97a967SRobert Watson    $debug_cmd
39713b97a967SRobert Watson
39723b97a967SRobert Watson    libs=
39733b97a967SRobert Watson    libdirs=
39743b97a967SRobert Watson    admincmds=
39753b97a967SRobert Watson
39763b97a967SRobert Watson    for opt in "$nonopt" ${1+"$@"}
39773b97a967SRobert Watson    do
39783b97a967SRobert Watson      if test -d "$opt"; then
39793b97a967SRobert Watson	func_append libdirs " $opt"
3980eb336521SRobert Watson
3981eb336521SRobert Watson      elif test -f "$opt"; then
3982eb336521SRobert Watson	if func_lalib_unsafe_p "$opt"; then
3983eb336521SRobert Watson	  func_append libs " $opt"
39843b97a967SRobert Watson	else
39853b97a967SRobert Watson	  func_warning "'$opt' is not a valid libtool archive"
39863b97a967SRobert Watson	fi
39873b97a967SRobert Watson
39883b97a967SRobert Watson      else
39893b97a967SRobert Watson	func_fatal_error "invalid argument '$opt'"
39903b97a967SRobert Watson      fi
39913b97a967SRobert Watson    done
39923b97a967SRobert Watson
39933b97a967SRobert Watson    if test -n "$libs"; then
39943b97a967SRobert Watson      if test -n "$lt_sysroot"; then
39953b97a967SRobert Watson        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
39963b97a967SRobert Watson        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
39973b97a967SRobert Watson      else
39983b97a967SRobert Watson        sysroot_cmd=
39993b97a967SRobert Watson      fi
40003b97a967SRobert Watson
40013b97a967SRobert Watson      # Remove sysroot references
40023b97a967SRobert Watson      if $opt_dry_run; then
40033b97a967SRobert Watson        for lib in $libs; do
40043b97a967SRobert Watson          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
40053b97a967SRobert Watson        done
40063b97a967SRobert Watson      else
40073b97a967SRobert Watson        tmpdir=`func_mktempdir`
40083b97a967SRobert Watson        for lib in $libs; do
40093b97a967SRobert Watson	  $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
40103b97a967SRobert Watson	    > $tmpdir/tmp-la
40113b97a967SRobert Watson	  mv -f $tmpdir/tmp-la $lib
40123b97a967SRobert Watson	done
40133b97a967SRobert Watson        ${RM}r "$tmpdir"
40143b97a967SRobert Watson      fi
40153b97a967SRobert Watson    fi
40163b97a967SRobert Watson
40173b97a967SRobert Watson    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
40183b97a967SRobert Watson      for libdir in $libdirs; do
40193b97a967SRobert Watson	if test -n "$finish_cmds"; then
40203b97a967SRobert Watson	  # Do each command in the finish commands.
40213b97a967SRobert Watson	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
4022d9af45c4SRobert Watson'"$cmd"'"'
40233b97a967SRobert Watson	fi
40243b97a967SRobert Watson	if test -n "$finish_eval"; then
40253b97a967SRobert Watson	  # Do the single finish_eval.
40263b97a967SRobert Watson	  eval cmds=\"$finish_eval\"
40273b97a967SRobert Watson	  $opt_dry_run || eval "$cmds" || func_append admincmds "
40283b97a967SRobert Watson       $cmds"
40293b97a967SRobert Watson	fi
40303b97a967SRobert Watson      done
40313b97a967SRobert Watson    fi
40323b97a967SRobert Watson
40333b97a967SRobert Watson    # Exit here if they wanted silent mode.
40343b97a967SRobert Watson    $opt_quiet && exit $EXIT_SUCCESS
40353b97a967SRobert Watson
40363b97a967SRobert Watson    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
40373b97a967SRobert Watson      echo "----------------------------------------------------------------------"
40383b97a967SRobert Watson      echo "Libraries have been installed in:"
40393b97a967SRobert Watson      for libdir in $libdirs; do
40403b97a967SRobert Watson	$ECHO "   $libdir"
40413b97a967SRobert Watson      done
40423b97a967SRobert Watson      echo
40433b97a967SRobert Watson      echo "If you ever happen to want to link against installed libraries"
40443b97a967SRobert Watson      echo "in a given directory, LIBDIR, you must either use libtool, and"
40453b97a967SRobert Watson      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
40463b97a967SRobert Watson      echo "flag during linking and do at least one of the following:"
40473b97a967SRobert Watson      if test -n "$shlibpath_var"; then
40483b97a967SRobert Watson	echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
40493b97a967SRobert Watson	echo "     during execution"
40503b97a967SRobert Watson      fi
40513b97a967SRobert Watson      if test -n "$runpath_var"; then
40523b97a967SRobert Watson	echo "   - add LIBDIR to the '$runpath_var' environment variable"
40533b97a967SRobert Watson	echo "     during linking"
40543b97a967SRobert Watson      fi
40553b97a967SRobert Watson      if test -n "$hardcode_libdir_flag_spec"; then
40563b97a967SRobert Watson	libdir=LIBDIR
40573b97a967SRobert Watson	eval flag=\"$hardcode_libdir_flag_spec\"
40583b97a967SRobert Watson
40593b97a967SRobert Watson	$ECHO "   - use the '$flag' linker flag"
40603b97a967SRobert Watson      fi
40613b97a967SRobert Watson      if test -n "$admincmds"; then
40623b97a967SRobert Watson	$ECHO "   - have your system administrator run these commands:$admincmds"
40633b97a967SRobert Watson      fi
40643b97a967SRobert Watson      if test -f /etc/ld.so.conf; then
40653b97a967SRobert Watson	echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
40663b97a967SRobert Watson      fi
40673b97a967SRobert Watson      echo
40683b97a967SRobert Watson
40693b97a967SRobert Watson      echo "See any operating system documentation about shared libraries for"
40703b97a967SRobert Watson      case $host in
40713b97a967SRobert Watson	solaris2.[6789]|solaris2.1[0-9])
40723b97a967SRobert Watson	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
40733b97a967SRobert Watson	  echo "pages."
40743b97a967SRobert Watson	  ;;
40753b97a967SRobert Watson	*)
40763b97a967SRobert Watson	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
40773b97a967SRobert Watson	  ;;
40783b97a967SRobert Watson      esac
40793b97a967SRobert Watson      echo "----------------------------------------------------------------------"
40803b97a967SRobert Watson    fi
40813b97a967SRobert Watson    exit $EXIT_SUCCESS
40823b97a967SRobert Watson}
40833b97a967SRobert Watson
40843b97a967SRobert Watsontest finish = "$opt_mode" && func_mode_finish ${1+"$@"}
40853b97a967SRobert Watson
40863b97a967SRobert Watson
40873b97a967SRobert Watson# func_mode_install arg...
40883b97a967SRobert Watsonfunc_mode_install ()
40893b97a967SRobert Watson{
40903b97a967SRobert Watson    $debug_cmd
40913b97a967SRobert Watson
40923b97a967SRobert Watson    # There may be an optional sh(1) argument at the beginning of
40933b97a967SRobert Watson    # install_prog (especially on Windows NT).
40943b97a967SRobert Watson    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
40953b97a967SRobert Watson       # Allow the use of GNU shtool's install command.
40963b97a967SRobert Watson       case $nonopt in *shtool*) :;; *) false;; esac
40973b97a967SRobert Watson    then
40983b97a967SRobert Watson      # Aesthetically quote it.
40993b97a967SRobert Watson      func_quote_for_eval "$nonopt"
41003b97a967SRobert Watson      install_prog="$func_quote_for_eval_result "
41013b97a967SRobert Watson      arg=$1
41023b97a967SRobert Watson      shift
41033b97a967SRobert Watson    else
41043b97a967SRobert Watson      install_prog=
41053b97a967SRobert Watson      arg=$nonopt
41063b97a967SRobert Watson    fi
41073b97a967SRobert Watson
41083b97a967SRobert Watson    # The real first argument should be the name of the installation program.
41093b97a967SRobert Watson    # Aesthetically quote it.
41103b97a967SRobert Watson    func_quote_for_eval "$arg"
41113b97a967SRobert Watson    func_append install_prog "$func_quote_for_eval_result"
41123b97a967SRobert Watson    install_shared_prog=$install_prog
41133b97a967SRobert Watson    case " $install_prog " in
41143b97a967SRobert Watson      *[\\\ /]cp\ *) install_cp=: ;;
41153b97a967SRobert Watson      *) install_cp=false ;;
41163b97a967SRobert Watson    esac
41173b97a967SRobert Watson
41183b97a967SRobert Watson    # We need to accept at least all the BSD install flags.
41193b97a967SRobert Watson    dest=
41203b97a967SRobert Watson    files=
41213b97a967SRobert Watson    opts=
41223b97a967SRobert Watson    prev=
41233b97a967SRobert Watson    install_type=
41243b97a967SRobert Watson    isdir=false
41253b97a967SRobert Watson    stripme=
41263b97a967SRobert Watson    no_mode=:
41273b97a967SRobert Watson    for arg
41283b97a967SRobert Watson    do
41293b97a967SRobert Watson      arg2=
41303b97a967SRobert Watson      if test -n "$dest"; then
41313b97a967SRobert Watson	func_append files " $dest"
41323b97a967SRobert Watson	dest=$arg
41333b97a967SRobert Watson	continue
41343b97a967SRobert Watson      fi
41353b97a967SRobert Watson
41363b97a967SRobert Watson      case $arg in
41373b97a967SRobert Watson      -d) isdir=: ;;
41383b97a967SRobert Watson      -f)
41393b97a967SRobert Watson	if $install_cp; then :; else
41403b97a967SRobert Watson	  prev=$arg
41413b97a967SRobert Watson	fi
41423b97a967SRobert Watson	;;
41433b97a967SRobert Watson      -g | -m | -o)
41443b97a967SRobert Watson	prev=$arg
41453b97a967SRobert Watson	;;
41463b97a967SRobert Watson      -s)
41473b97a967SRobert Watson	stripme=" -s"
41483b97a967SRobert Watson	continue
41493b97a967SRobert Watson	;;
41503b97a967SRobert Watson      -*)
41513b97a967SRobert Watson	;;
41523b97a967SRobert Watson      *)
41533b97a967SRobert Watson	# If the previous option needed an argument, then skip it.
41543b97a967SRobert Watson	if test -n "$prev"; then
41553b97a967SRobert Watson	  if test X-m = "X$prev" && test -n "$install_override_mode"; then
41563b97a967SRobert Watson	    arg2=$install_override_mode
41573b97a967SRobert Watson	    no_mode=false
41583b97a967SRobert Watson	  fi
41593b97a967SRobert Watson	  prev=
41603b97a967SRobert Watson	else
41613b97a967SRobert Watson	  dest=$arg
41623b97a967SRobert Watson	  continue
41633b97a967SRobert Watson	fi
41643b97a967SRobert Watson	;;
41653b97a967SRobert Watson      esac
41663b97a967SRobert Watson
41673b97a967SRobert Watson      # Aesthetically quote the argument.
41683b97a967SRobert Watson      func_quote_for_eval "$arg"
41693b97a967SRobert Watson      func_append install_prog " $func_quote_for_eval_result"
41703b97a967SRobert Watson      if test -n "$arg2"; then
41713b97a967SRobert Watson	func_quote_for_eval "$arg2"
41723b97a967SRobert Watson      fi
41733b97a967SRobert Watson      func_append install_shared_prog " $func_quote_for_eval_result"
41743b97a967SRobert Watson    done
41753b97a967SRobert Watson
41763b97a967SRobert Watson    test -z "$install_prog" && \
41773b97a967SRobert Watson      func_fatal_help "you must specify an install program"
41783b97a967SRobert Watson
41793b97a967SRobert Watson    test -n "$prev" && \
41803b97a967SRobert Watson      func_fatal_help "the '$prev' option requires an argument"
41813b97a967SRobert Watson
41823b97a967SRobert Watson    if test -n "$install_override_mode" && $no_mode; then
41833b97a967SRobert Watson      if $install_cp; then :; else
41843b97a967SRobert Watson	func_quote_for_eval "$install_override_mode"
41853b97a967SRobert Watson	func_append install_shared_prog " -m $func_quote_for_eval_result"
41863b97a967SRobert Watson      fi
41873b97a967SRobert Watson    fi
41883b97a967SRobert Watson
41893b97a967SRobert Watson    if test -z "$files"; then
41903b97a967SRobert Watson      if test -z "$dest"; then
41913b97a967SRobert Watson	func_fatal_help "no file or destination specified"
41923b97a967SRobert Watson      else
41933b97a967SRobert Watson	func_fatal_help "you must specify a destination"
41943b97a967SRobert Watson      fi
41953b97a967SRobert Watson    fi
41963b97a967SRobert Watson
41973b97a967SRobert Watson    # Strip any trailing slash from the destination.
41983b97a967SRobert Watson    func_stripname '' '/' "$dest"
41993b97a967SRobert Watson    dest=$func_stripname_result
42003b97a967SRobert Watson
42013b97a967SRobert Watson    # Check to see that the destination is a directory.
42023b97a967SRobert Watson    test -d "$dest" && isdir=:
42033b97a967SRobert Watson    if $isdir; then
42043b97a967SRobert Watson      destdir=$dest
42053b97a967SRobert Watson      destname=
42063b97a967SRobert Watson    else
42073b97a967SRobert Watson      func_dirname_and_basename "$dest" "" "."
42083b97a967SRobert Watson      destdir=$func_dirname_result
42093b97a967SRobert Watson      destname=$func_basename_result
42103b97a967SRobert Watson
42113b97a967SRobert Watson      # Not a directory, so check to see that there is only one file specified.
42123b97a967SRobert Watson      set dummy $files; shift
42133b97a967SRobert Watson      test "$#" -gt 1 && \
42143b97a967SRobert Watson	func_fatal_help "'$dest' is not a directory"
42153b97a967SRobert Watson    fi
42163b97a967SRobert Watson    case $destdir in
42173b97a967SRobert Watson    [\\/]* | [A-Za-z]:[\\/]*) ;;
42183b97a967SRobert Watson    *)
42193b97a967SRobert Watson      for file in $files; do
42203b97a967SRobert Watson	case $file in
42213b97a967SRobert Watson	*.lo) ;;
42223b97a967SRobert Watson	*)
42233b97a967SRobert Watson	  func_fatal_help "'$destdir' must be an absolute directory name"
42243b97a967SRobert Watson	  ;;
42253b97a967SRobert Watson	esac
42263b97a967SRobert Watson      done
42273b97a967SRobert Watson      ;;
42283b97a967SRobert Watson    esac
42293b97a967SRobert Watson
42303b97a967SRobert Watson    # This variable tells wrapper scripts just to set variables rather
42313b97a967SRobert Watson    # than running their programs.
42323b97a967SRobert Watson    libtool_install_magic=$magic
42333b97a967SRobert Watson
42343b97a967SRobert Watson    staticlibs=
42353b97a967SRobert Watson    future_libdirs=
42363b97a967SRobert Watson    current_libdirs=
42373b97a967SRobert Watson    for file in $files; do
42383b97a967SRobert Watson
42393b97a967SRobert Watson      # Do each installation.
42403b97a967SRobert Watson      case $file in
42413b97a967SRobert Watson      *.$libext)
42423b97a967SRobert Watson	# Do the static libraries later.
42433b97a967SRobert Watson	func_append staticlibs " $file"
42443b97a967SRobert Watson	;;
42453b97a967SRobert Watson
42463b97a967SRobert Watson      *.la)
42473b97a967SRobert Watson	func_resolve_sysroot "$file"
42483b97a967SRobert Watson	file=$func_resolve_sysroot_result
42493b97a967SRobert Watson
42503b97a967SRobert Watson	# Check to see that this really is a libtool archive.
42513b97a967SRobert Watson	func_lalib_unsafe_p "$file" \
42523b97a967SRobert Watson	  || func_fatal_help "'$file' is not a valid libtool archive"
42533b97a967SRobert Watson
42543b97a967SRobert Watson	library_names=
42553b97a967SRobert Watson	old_library=
42563b97a967SRobert Watson	relink_command=
42573b97a967SRobert Watson	func_source "$file"
42583b97a967SRobert Watson
42593b97a967SRobert Watson	# Add the libdir to current_libdirs if it is the destination.
42603b97a967SRobert Watson	if test "X$destdir" = "X$libdir"; then
42613b97a967SRobert Watson	  case "$current_libdirs " in
42623b97a967SRobert Watson	  *" $libdir "*) ;;
42633b97a967SRobert Watson	  *) func_append current_libdirs " $libdir" ;;
42643b97a967SRobert Watson	  esac
42653b97a967SRobert Watson	else
42663b97a967SRobert Watson	  # Note the libdir as a future libdir.
42673b97a967SRobert Watson	  case "$future_libdirs " in
42683b97a967SRobert Watson	  *" $libdir "*) ;;
42693b97a967SRobert Watson	  *) func_append future_libdirs " $libdir" ;;
42703b97a967SRobert Watson	  esac
42713b97a967SRobert Watson	fi
42723b97a967SRobert Watson
42733b97a967SRobert Watson	func_dirname "$file" "/" ""
42743b97a967SRobert Watson	dir=$func_dirname_result
42753b97a967SRobert Watson	func_append dir "$objdir"
42763b97a967SRobert Watson
42773b97a967SRobert Watson	if test -n "$relink_command"; then
42783b97a967SRobert Watson	  # Determine the prefix the user has applied to our future dir.
42793b97a967SRobert Watson	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
42803b97a967SRobert Watson
42813b97a967SRobert Watson	  # Don't allow the user to place us outside of our expected
42823b97a967SRobert Watson	  # location b/c this prevents finding dependent libraries that
42833b97a967SRobert Watson	  # are installed to the same prefix.
42843b97a967SRobert Watson	  # At present, this check doesn't affect windows .dll's that
42853b97a967SRobert Watson	  # are installed into $libdir/../bin (currently, that works fine)
42863b97a967SRobert Watson	  # but it's something to keep an eye on.
42873b97a967SRobert Watson	  test "$inst_prefix_dir" = "$destdir" && \
42883b97a967SRobert Watson	    func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
42893b97a967SRobert Watson
42903b97a967SRobert Watson	  if test -n "$inst_prefix_dir"; then
42913b97a967SRobert Watson	    # Stick the inst_prefix_dir data into the link command.
42923b97a967SRobert Watson	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
42933b97a967SRobert Watson	  else
42943b97a967SRobert Watson	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
42953b97a967SRobert Watson	  fi
42963b97a967SRobert Watson
42973b97a967SRobert Watson	  func_warning "relinking '$file'"
42983b97a967SRobert Watson	  func_show_eval "$relink_command" \
42993b97a967SRobert Watson	    'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
43003b97a967SRobert Watson	fi
43013b97a967SRobert Watson
43023b97a967SRobert Watson	# See the names of the shared library.
43033b97a967SRobert Watson	set dummy $library_names; shift
43043b97a967SRobert Watson	if test -n "$1"; then
43053b97a967SRobert Watson	  realname=$1
43063b97a967SRobert Watson	  shift
43073b97a967SRobert Watson
43083b97a967SRobert Watson	  srcname=$realname
43093b97a967SRobert Watson	  test -n "$relink_command" && srcname=${realname}T
43103b97a967SRobert Watson
43113b97a967SRobert Watson	  # Install the shared library and build the symlinks.
43123b97a967SRobert Watson	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
43133b97a967SRobert Watson	      'exit $?'
43143b97a967SRobert Watson	  tstripme=$stripme
43153b97a967SRobert Watson	  case $host_os in
43163b97a967SRobert Watson	  cygwin* | mingw* | pw32* | cegcc*)
43173b97a967SRobert Watson	    case $realname in
43183b97a967SRobert Watson	    *.dll.a)
43193b97a967SRobert Watson	      tstripme=
43203b97a967SRobert Watson	      ;;
43213b97a967SRobert Watson	    esac
43223b97a967SRobert Watson	    ;;
43233b97a967SRobert Watson	  os2*)
43243b97a967SRobert Watson	    case $realname in
43253b97a967SRobert Watson	    *_dll.a)
43263b97a967SRobert Watson	      tstripme=
43273b97a967SRobert Watson	      ;;
43283b97a967SRobert Watson	    esac
43293b97a967SRobert Watson	    ;;
43303b97a967SRobert Watson	  esac
43313b97a967SRobert Watson	  if test -n "$tstripme" && test -n "$striplib"; then
43323b97a967SRobert Watson	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
43333b97a967SRobert Watson	  fi
43343b97a967SRobert Watson
43353b97a967SRobert Watson	  if test "$#" -gt 0; then
43363b97a967SRobert Watson	    # Delete the old symlinks, and create new ones.
43373b97a967SRobert Watson	    # Try 'ln -sf' first, because the 'ln' binary might depend on
43383b97a967SRobert Watson	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
43393b97a967SRobert Watson	    # so we also need to try rm && ln -s.
43403b97a967SRobert Watson	    for linkname
43413b97a967SRobert Watson	    do
4342eb336521SRobert Watson	      test "$linkname" != "$realname" \
4343eb336521SRobert Watson		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
43443b97a967SRobert Watson	    done
43453b97a967SRobert Watson	  fi
43463b97a967SRobert Watson
43473b97a967SRobert Watson	  # Do each command in the postinstall commands.
4348eb336521SRobert Watson	  lib=$destdir/$realname
4349eb336521SRobert Watson	  func_execute_cmds "$postinstall_cmds" 'exit $?'
43503b97a967SRobert Watson	fi
43513b97a967SRobert Watson
43523b97a967SRobert Watson	# Install the pseudo-library for information purposes.
43533b97a967SRobert Watson	func_basename "$file"
43543b97a967SRobert Watson	name=$func_basename_result
43553b97a967SRobert Watson	instname=$dir/${name}i
43563b97a967SRobert Watson	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
43573b97a967SRobert Watson
43583b97a967SRobert Watson	# Maybe install the static library, too.
43593b97a967SRobert Watson	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
43603b97a967SRobert Watson	;;
43613b97a967SRobert Watson
43623b97a967SRobert Watson      *.lo)
43633b97a967SRobert Watson	# Install (i.e. copy) a libtool object.
43643b97a967SRobert Watson
43653b97a967SRobert Watson	# Figure out destination file name, if it wasn't already specified.
43663b97a967SRobert Watson	if test -n "$destname"; then
43673b97a967SRobert Watson	  destfile=$destdir/$destname
43683b97a967SRobert Watson	else
43693b97a967SRobert Watson	  func_basename "$file"
43703b97a967SRobert Watson	  destfile=$func_basename_result
43713b97a967SRobert Watson	  destfile=$destdir/$destfile
43723b97a967SRobert Watson	fi
43733b97a967SRobert Watson
43743b97a967SRobert Watson	# Deduce the name of the destination old-style object file.
43753b97a967SRobert Watson	case $destfile in
43763b97a967SRobert Watson	*.lo)
43773b97a967SRobert Watson	  func_lo2o "$destfile"
43783b97a967SRobert Watson	  staticdest=$func_lo2o_result
43793b97a967SRobert Watson	  ;;
43803b97a967SRobert Watson	*.$objext)
43813b97a967SRobert Watson	  staticdest=$destfile
43823b97a967SRobert Watson	  destfile=
43833b97a967SRobert Watson	  ;;
43843b97a967SRobert Watson	*)
43853b97a967SRobert Watson	  func_fatal_help "cannot copy a libtool object to '$destfile'"
43863b97a967SRobert Watson	  ;;
43873b97a967SRobert Watson	esac
43883b97a967SRobert Watson
43893b97a967SRobert Watson	# Install the libtool object if requested.
43903b97a967SRobert Watson	test -n "$destfile" && \
43913b97a967SRobert Watson	  func_show_eval "$install_prog $file $destfile" 'exit $?'
43923b97a967SRobert Watson
43933b97a967SRobert Watson	# Install the old object if enabled.
43943b97a967SRobert Watson	if test yes = "$build_old_libs"; then
43953b97a967SRobert Watson	  # Deduce the name of the old-style object file.
43963b97a967SRobert Watson	  func_lo2o "$file"
43973b97a967SRobert Watson	  staticobj=$func_lo2o_result
43983b97a967SRobert Watson	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
43993b97a967SRobert Watson	fi
44003b97a967SRobert Watson	exit $EXIT_SUCCESS
44013b97a967SRobert Watson	;;
44023b97a967SRobert Watson
44033b97a967SRobert Watson      *)
44043b97a967SRobert Watson	# Figure out destination file name, if it wasn't already specified.
44053b97a967SRobert Watson	if test -n "$destname"; then
44063b97a967SRobert Watson	  destfile=$destdir/$destname
44073b97a967SRobert Watson	else
44083b97a967SRobert Watson	  func_basename "$file"
44093b97a967SRobert Watson	  destfile=$func_basename_result
44103b97a967SRobert Watson	  destfile=$destdir/$destfile
44113b97a967SRobert Watson	fi
44123b97a967SRobert Watson
44133b97a967SRobert Watson	# If the file is missing, and there is a .exe on the end, strip it
44143b97a967SRobert Watson	# because it is most likely a libtool script we actually want to
44153b97a967SRobert Watson	# install
44163b97a967SRobert Watson	stripped_ext=
44173b97a967SRobert Watson	case $file in
44183b97a967SRobert Watson	  *.exe)
44193b97a967SRobert Watson	    if test ! -f "$file"; then
44203b97a967SRobert Watson	      func_stripname '' '.exe' "$file"
44213b97a967SRobert Watson	      file=$func_stripname_result
44223b97a967SRobert Watson	      stripped_ext=.exe
44233b97a967SRobert Watson	    fi
44243b97a967SRobert Watson	    ;;
44253b97a967SRobert Watson	esac
44263b97a967SRobert Watson
44273b97a967SRobert Watson	# Do a test to see if this is really a libtool program.
44283b97a967SRobert Watson	case $host in
44293b97a967SRobert Watson	*cygwin* | *mingw*)
44303b97a967SRobert Watson	    if func_ltwrapper_executable_p "$file"; then
44313b97a967SRobert Watson	      func_ltwrapper_scriptname "$file"
44323b97a967SRobert Watson	      wrapper=$func_ltwrapper_scriptname_result
44333b97a967SRobert Watson	    else
44343b97a967SRobert Watson	      func_stripname '' '.exe' "$file"
44353b97a967SRobert Watson	      wrapper=$func_stripname_result
44363b97a967SRobert Watson	    fi
44373b97a967SRobert Watson	    ;;
44383b97a967SRobert Watson	*)
44393b97a967SRobert Watson	    wrapper=$file
44403b97a967SRobert Watson	    ;;
44413b97a967SRobert Watson	esac
44423b97a967SRobert Watson	if func_ltwrapper_script_p "$wrapper"; then
44433b97a967SRobert Watson	  notinst_deplibs=
44443b97a967SRobert Watson	  relink_command=
44453b97a967SRobert Watson
44463b97a967SRobert Watson	  func_source "$wrapper"
44473b97a967SRobert Watson
44483b97a967SRobert Watson	  # Check the variables that should have been set.
44493b97a967SRobert Watson	  test -z "$generated_by_libtool_version" && \
44503b97a967SRobert Watson	    func_fatal_error "invalid libtool wrapper script '$wrapper'"
44513b97a967SRobert Watson
44523b97a967SRobert Watson	  finalize=:
44533b97a967SRobert Watson	  for lib in $notinst_deplibs; do
44543b97a967SRobert Watson	    # Check to see that each library is installed.
44553b97a967SRobert Watson	    libdir=
4456d9af45c4SRobert Watson	    if test -f "$lib"; then
4457d9af45c4SRobert Watson	      func_source "$lib"
4458d9af45c4SRobert Watson	    fi
4459d9af45c4SRobert Watson	    libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
4460d9af45c4SRobert Watson	    if test -n "$libdir" && test ! -f "$libfile"; then
4461d9af45c4SRobert Watson	      func_warning "'$lib' has not been installed in '$libdir'"
4462d9af45c4SRobert Watson	      finalize=false
4463d9af45c4SRobert Watson	    fi
4464d9af45c4SRobert Watson	  done
4465d9af45c4SRobert Watson
4466d9af45c4SRobert Watson	  relink_command=
4467d9af45c4SRobert Watson	  func_source "$wrapper"
4468d9af45c4SRobert Watson
4469d9af45c4SRobert Watson	  outputname=
4470d9af45c4SRobert Watson	  if test no = "$fast_install" && test -n "$relink_command"; then
4471d9af45c4SRobert Watson	    $opt_dry_run || {
4472d9af45c4SRobert Watson	      if $finalize; then
4473d9af45c4SRobert Watson	        tmpdir=`func_mktempdir`
4474d9af45c4SRobert Watson		func_basename "$file$stripped_ext"
4475d9af45c4SRobert Watson		file=$func_basename_result
4476d9af45c4SRobert Watson	        outputname=$tmpdir/$file
4477d9af45c4SRobert Watson	        # Replace the output file specification.
4478d9af45c4SRobert Watson	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
4479d9af45c4SRobert Watson
4480d9af45c4SRobert Watson	        $opt_quiet || {
4481d9af45c4SRobert Watson	          func_quote_for_expand "$relink_command"
4482d9af45c4SRobert Watson		  eval "func_echo $func_quote_for_expand_result"
4483d9af45c4SRobert Watson	        }
4484d9af45c4SRobert Watson	        if eval "$relink_command"; then :
44853b97a967SRobert Watson	          else
44863b97a967SRobert Watson		  func_error "error: relink '$file' with the above command before installing it"
44873b97a967SRobert Watson		  $opt_dry_run || ${RM}r "$tmpdir"
44883b97a967SRobert Watson		  continue
44893b97a967SRobert Watson	        fi
44903b97a967SRobert Watson	        file=$outputname
44913b97a967SRobert Watson	      else
44923b97a967SRobert Watson	        func_warning "cannot relink '$file'"
44933b97a967SRobert Watson	      fi
44943b97a967SRobert Watson	    }
44953b97a967SRobert Watson	  else
44963b97a967SRobert Watson	    # Install the binary that we compiled earlier.
44973b97a967SRobert Watson	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
44983b97a967SRobert Watson	  fi
44993b97a967SRobert Watson	fi
45003b97a967SRobert Watson
45013b97a967SRobert Watson	# remove .exe since cygwin /usr/bin/install will append another
45023b97a967SRobert Watson	# one anyway
45033b97a967SRobert Watson	case $install_prog,$host in
45043b97a967SRobert Watson	*/usr/bin/install*,*cygwin*)
45053b97a967SRobert Watson	  case $file:$destfile in
45063b97a967SRobert Watson	  *.exe:*.exe)
45073b97a967SRobert Watson	    # this is ok
45083b97a967SRobert Watson	    ;;
45093b97a967SRobert Watson	  *.exe:*)
45103b97a967SRobert Watson	    destfile=$destfile.exe
45113b97a967SRobert Watson	    ;;
45123b97a967SRobert Watson	  *:*.exe)
45133b97a967SRobert Watson	    func_stripname '' '.exe' "$destfile"
45143b97a967SRobert Watson	    destfile=$func_stripname_result
45153b97a967SRobert Watson	    ;;
45163b97a967SRobert Watson	  esac
45173b97a967SRobert Watson	  ;;
45183b97a967SRobert Watson	esac
45193b97a967SRobert Watson	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
45203b97a967SRobert Watson	$opt_dry_run || if test -n "$outputname"; then
45213b97a967SRobert Watson	  ${RM}r "$tmpdir"
45223b97a967SRobert Watson	fi
45233b97a967SRobert Watson	;;
45243b97a967SRobert Watson      esac
45253b97a967SRobert Watson    done
45263b97a967SRobert Watson
45273b97a967SRobert Watson    for file in $staticlibs; do
45283b97a967SRobert Watson      func_basename "$file"
4529d9af45c4SRobert Watson      name=$func_basename_result
45303b97a967SRobert Watson
45313b97a967SRobert Watson      # Set up the ranlib parameters.
45323b97a967SRobert Watson      oldlib=$destdir/$name
45333b97a967SRobert Watson      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
4534d9af45c4SRobert Watson      tool_oldlib=$func_to_tool_file_result
4535d9af45c4SRobert Watson
4536d9af45c4SRobert Watson      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
4537d9af45c4SRobert Watson
45383b97a967SRobert Watson      if test -n "$stripme" && test -n "$old_striplib"; then
45393b97a967SRobert Watson	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
45403b97a967SRobert Watson      fi
45413b97a967SRobert Watson
45423b97a967SRobert Watson      # Do each command in the postinstall commands.
45433b97a967SRobert Watson      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
45443b97a967SRobert Watson    done
45453b97a967SRobert Watson
45463b97a967SRobert Watson    test -n "$future_libdirs" && \
45473b97a967SRobert Watson      func_warning "remember to run '$progname --finish$future_libdirs'"
45483b97a967SRobert Watson
45493b97a967SRobert Watson    if test -n "$current_libdirs"; then
45503b97a967SRobert Watson      # Maybe just do a dry run.
45513b97a967SRobert Watson      $opt_dry_run && current_libdirs=" -n$current_libdirs"
45523b97a967SRobert Watson      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
45533b97a967SRobert Watson    else
45543b97a967SRobert Watson      exit $EXIT_SUCCESS
45553b97a967SRobert Watson    fi
45563b97a967SRobert Watson}
45573b97a967SRobert Watson
45583b97a967SRobert Watsontest install = "$opt_mode" && func_mode_install ${1+"$@"}
45593b97a967SRobert Watson
45603b97a967SRobert Watson
45613b97a967SRobert Watson# func_generate_dlsyms outputname originator pic_p
45623b97a967SRobert Watson# Extract symbols from dlprefiles and create ${outputname}S.o with
45633b97a967SRobert Watson# a dlpreopen symbol table.
45643b97a967SRobert Watsonfunc_generate_dlsyms ()
45653b97a967SRobert Watson{
45663b97a967SRobert Watson    $debug_cmd
45673b97a967SRobert Watson
45683b97a967SRobert Watson    my_outputname=$1
45693b97a967SRobert Watson    my_originator=$2
45703b97a967SRobert Watson    my_pic_p=${3-false}
45713b97a967SRobert Watson    my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
45723b97a967SRobert Watson    my_dlsyms=
45733b97a967SRobert Watson
45743b97a967SRobert Watson    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
45753b97a967SRobert Watson      if test -n "$NM" && test -n "$global_symbol_pipe"; then
45763b97a967SRobert Watson	my_dlsyms=${my_outputname}S.c
45773b97a967SRobert Watson      else
45783b97a967SRobert Watson	func_error "not configured to extract global symbols from dlpreopened files"
45793b97a967SRobert Watson      fi
45803b97a967SRobert Watson    fi
45813b97a967SRobert Watson
45823b97a967SRobert Watson    if test -n "$my_dlsyms"; then
45833b97a967SRobert Watson      case $my_dlsyms in
45843b97a967SRobert Watson      "") ;;
45853b97a967SRobert Watson      *.c)
45863b97a967SRobert Watson	# Discover the nlist of each of the dlfiles.
45873b97a967SRobert Watson	nlist=$output_objdir/$my_outputname.nm
45883b97a967SRobert Watson
45893b97a967SRobert Watson	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
45903b97a967SRobert Watson
45913b97a967SRobert Watson	# Parse the name list into a source file.
45923b97a967SRobert Watson	func_verbose "creating $output_objdir/$my_dlsyms"
45933b97a967SRobert Watson
45943b97a967SRobert Watson	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
45953b97a967SRobert Watson/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
45963b97a967SRobert Watson/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
45973b97a967SRobert Watson
45983b97a967SRobert Watson#ifdef __cplusplus
45993b97a967SRobert Watsonextern \"C\" {
46003b97a967SRobert Watson#endif
46013b97a967SRobert Watson
46023b97a967SRobert Watson#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
46033b97a967SRobert Watson#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
46043b97a967SRobert Watson#endif
46053b97a967SRobert Watson
46063b97a967SRobert Watson/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
46073b97a967SRobert Watson#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
46083b97a967SRobert Watson/* DATA imports from DLLs on WIN32 can't be const, because runtime
46093b97a967SRobert Watson   relocations are performed -- see ld's documentation on pseudo-relocs.  */
46103b97a967SRobert Watson# define LT_DLSYM_CONST
46113b97a967SRobert Watson#elif defined __osf__
46123b97a967SRobert Watson/* This system does not cope well with relocations in const data.  */
46133b97a967SRobert Watson# define LT_DLSYM_CONST
46143b97a967SRobert Watson#else
46153b97a967SRobert Watson# define LT_DLSYM_CONST const
46163b97a967SRobert Watson#endif
46173b97a967SRobert Watson
46183b97a967SRobert Watson#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
46193b97a967SRobert Watson
46203b97a967SRobert Watson/* External symbol declarations for the compiler. */\
46213b97a967SRobert Watson"
46223b97a967SRobert Watson
46233b97a967SRobert Watson	if test yes = "$dlself"; then
46243b97a967SRobert Watson	  func_verbose "generating symbol list for '$output'"
46253b97a967SRobert Watson
46263b97a967SRobert Watson	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
46273b97a967SRobert Watson
46283b97a967SRobert Watson	  # Add our own program objects to the symbol list.
46293b97a967SRobert Watson	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
46303b97a967SRobert Watson	  for progfile in $progfiles; do
46313b97a967SRobert Watson	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
46323b97a967SRobert Watson	    func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
46333b97a967SRobert Watson	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
46343b97a967SRobert Watson	  done
46353b97a967SRobert Watson
46363b97a967SRobert Watson	  if test -n "$exclude_expsyms"; then
46373b97a967SRobert Watson	    $opt_dry_run || {
46383b97a967SRobert Watson	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
46393b97a967SRobert Watson	      eval '$MV "$nlist"T "$nlist"'
46403b97a967SRobert Watson	    }
46413b97a967SRobert Watson	  fi
46423b97a967SRobert Watson
46433b97a967SRobert Watson	  if test -n "$export_symbols_regex"; then
46443b97a967SRobert Watson	    $opt_dry_run || {
46453b97a967SRobert Watson	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
46463b97a967SRobert Watson	      eval '$MV "$nlist"T "$nlist"'
46473b97a967SRobert Watson	    }
46483b97a967SRobert Watson	  fi
46493b97a967SRobert Watson
46503b97a967SRobert Watson	  # Prepare the list of exported symbols
46513b97a967SRobert Watson	  if test -z "$export_symbols"; then
46523b97a967SRobert Watson	    export_symbols=$output_objdir/$outputname.exp
46533b97a967SRobert Watson	    $opt_dry_run || {
4654d9af45c4SRobert Watson	      $RM $export_symbols
4655d9af45c4SRobert Watson	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
4656d9af45c4SRobert Watson	      case $host in
4657d9af45c4SRobert Watson	      *cygwin* | *mingw* | *cegcc* )
4658d9af45c4SRobert Watson                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4659d9af45c4SRobert Watson                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
46603b97a967SRobert Watson	        ;;
4661d9af45c4SRobert Watson	      esac
46623b97a967SRobert Watson	    }
46633b97a967SRobert Watson	  else
4664d9af45c4SRobert Watson	    $opt_dry_run || {
4665d9af45c4SRobert Watson	      eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
4666d9af45c4SRobert Watson	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
4667d9af45c4SRobert Watson	      eval '$MV "$nlist"T "$nlist"'
4668d9af45c4SRobert Watson	      case $host in
4669d9af45c4SRobert Watson	        *cygwin* | *mingw* | *cegcc* )
46703b97a967SRobert Watson	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
46713b97a967SRobert Watson	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
46723b97a967SRobert Watson	          ;;
46733b97a967SRobert Watson	      esac
46743b97a967SRobert Watson	    }
46753b97a967SRobert Watson	  fi
46763b97a967SRobert Watson	fi
46773b97a967SRobert Watson
46783b97a967SRobert Watson	for dlprefile in $dlprefiles; do
46793b97a967SRobert Watson	  func_verbose "extracting global C symbols from '$dlprefile'"
46803b97a967SRobert Watson	  func_basename "$dlprefile"
46813b97a967SRobert Watson	  name=$func_basename_result
46823b97a967SRobert Watson          case $host in
46833b97a967SRobert Watson	    *cygwin* | *mingw* | *cegcc* )
46843b97a967SRobert Watson	      # if an import library, we need to obtain dlname
46853b97a967SRobert Watson	      if func_win32_import_lib_p "$dlprefile"; then
46863b97a967SRobert Watson	        func_tr_sh "$dlprefile"
46873b97a967SRobert Watson	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
46883b97a967SRobert Watson	        dlprefile_dlbasename=
46893b97a967SRobert Watson	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
46903b97a967SRobert Watson	          # Use subshell, to avoid clobbering current variable values
46913b97a967SRobert Watson	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
46923b97a967SRobert Watson	          if test -n "$dlprefile_dlname"; then
46933b97a967SRobert Watson	            func_basename "$dlprefile_dlname"
46943b97a967SRobert Watson	            dlprefile_dlbasename=$func_basename_result
46953b97a967SRobert Watson	          else
46963b97a967SRobert Watson	            # no lafile. user explicitly requested -dlpreopen <import library>.
46973b97a967SRobert Watson	            $sharedlib_from_linklib_cmd "$dlprefile"
46983b97a967SRobert Watson	            dlprefile_dlbasename=$sharedlib_from_linklib_result
46993b97a967SRobert Watson	          fi
47003b97a967SRobert Watson	        fi
47013b97a967SRobert Watson	        $opt_dry_run || {
47023b97a967SRobert Watson	          if test -n "$dlprefile_dlbasename"; then
47033b97a967SRobert Watson	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
47043b97a967SRobert Watson	          else
47053b97a967SRobert Watson	            func_warning "Could not compute DLL name from $name"
47063b97a967SRobert Watson	            eval '$ECHO ": $name " >> "$nlist"'
47073b97a967SRobert Watson	          fi
47083b97a967SRobert Watson	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
47093b97a967SRobert Watson	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
47103b97a967SRobert Watson	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
47113b97a967SRobert Watson	        }
47123b97a967SRobert Watson	      else # not an import lib
47133b97a967SRobert Watson	        $opt_dry_run || {
47143b97a967SRobert Watson	          eval '$ECHO ": $name " >> "$nlist"'
47153b97a967SRobert Watson	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
47163b97a967SRobert Watson	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
47173b97a967SRobert Watson	        }
47183b97a967SRobert Watson	      fi
47193b97a967SRobert Watson	    ;;
47203b97a967SRobert Watson	    *)
47213b97a967SRobert Watson	      $opt_dry_run || {
47223b97a967SRobert Watson	        eval '$ECHO ": $name " >> "$nlist"'
47233b97a967SRobert Watson	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
47243b97a967SRobert Watson	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
47253b97a967SRobert Watson	      }
47263b97a967SRobert Watson	    ;;
47273b97a967SRobert Watson          esac
47283b97a967SRobert Watson	done
47293b97a967SRobert Watson
47303b97a967SRobert Watson	$opt_dry_run || {
47313b97a967SRobert Watson	  # Make sure we have at least an empty file.
47323b97a967SRobert Watson	  test -f "$nlist" || : > "$nlist"
47333b97a967SRobert Watson
47343b97a967SRobert Watson	  if test -n "$exclude_expsyms"; then
47353b97a967SRobert Watson	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
47363b97a967SRobert Watson	    $MV "$nlist"T "$nlist"
47373b97a967SRobert Watson	  fi
47383b97a967SRobert Watson
47393b97a967SRobert Watson	  # Try sorting and uniquifying the output.
47403b97a967SRobert Watson	  if $GREP -v "^: " < "$nlist" |
47413b97a967SRobert Watson	      if sort -k 3 </dev/null >/dev/null 2>&1; then
47423b97a967SRobert Watson		sort -k 3
47433b97a967SRobert Watson	      else
47443b97a967SRobert Watson		sort +2
47453b97a967SRobert Watson	      fi |
47463b97a967SRobert Watson	      uniq > "$nlist"S; then
47473b97a967SRobert Watson	    :
47483b97a967SRobert Watson	  else
47493b97a967SRobert Watson	    $GREP -v "^: " < "$nlist" > "$nlist"S
47503b97a967SRobert Watson	  fi
47513b97a967SRobert Watson
47523b97a967SRobert Watson	  if test -f "$nlist"S; then
47533b97a967SRobert Watson	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
47543b97a967SRobert Watson	  else
47553b97a967SRobert Watson	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
47563b97a967SRobert Watson	  fi
47573b97a967SRobert Watson
47583b97a967SRobert Watson	  func_show_eval '$RM "${nlist}I"'
47593b97a967SRobert Watson	  if test -n "$global_symbol_to_import"; then
47603b97a967SRobert Watson	    eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
47613b97a967SRobert Watson	  fi
47623b97a967SRobert Watson
47633b97a967SRobert Watson	  echo >> "$output_objdir/$my_dlsyms" "\
47643b97a967SRobert Watson
47653b97a967SRobert Watson/* The mapping between symbol names and symbols.  */
47663b97a967SRobert Watsontypedef struct {
47673b97a967SRobert Watson  const char *name;
47683b97a967SRobert Watson  void *address;
47693b97a967SRobert Watson} lt_dlsymlist;
47703b97a967SRobert Watsonextern LT_DLSYM_CONST lt_dlsymlist
47713b97a967SRobert Watsonlt_${my_prefix}_LTX_preloaded_symbols[];\
47723b97a967SRobert Watson"
47733b97a967SRobert Watson
47743b97a967SRobert Watson	  if test -s "$nlist"I; then
47753b97a967SRobert Watson	    echo >> "$output_objdir/$my_dlsyms" "\
47763b97a967SRobert Watsonstatic void lt_syminit(void)
47773b97a967SRobert Watson{
47783b97a967SRobert Watson  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
47793b97a967SRobert Watson  for (; symbol->name; ++symbol)
47803b97a967SRobert Watson    {"
47813b97a967SRobert Watson	    $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
47823b97a967SRobert Watson	    echo >> "$output_objdir/$my_dlsyms" "\
47833b97a967SRobert Watson    }
47843b97a967SRobert Watson}"
47853b97a967SRobert Watson	  fi
4786d9af45c4SRobert Watson	  echo >> "$output_objdir/$my_dlsyms" "\
4787d9af45c4SRobert WatsonLT_DLSYM_CONST lt_dlsymlist
47883b97a967SRobert Watsonlt_${my_prefix}_LTX_preloaded_symbols[] =
47893b97a967SRobert Watson{ {\"$my_originator\", (void *) 0},"
47903b97a967SRobert Watson
47913b97a967SRobert Watson	  if test -s "$nlist"I; then
47923b97a967SRobert Watson	    echo >> "$output_objdir/$my_dlsyms" "\
47933b97a967SRobert Watson  {\"@INIT@\", (void *) &lt_syminit},"
4794d9af45c4SRobert Watson	  fi
4795d9af45c4SRobert Watson
4796d9af45c4SRobert Watson	  case $need_lib_prefix in
4797eb336521SRobert Watson	  no)
4798eb336521SRobert Watson	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
4799d9af45c4SRobert Watson	    ;;
4800eb336521SRobert Watson	  *)
4801eb336521SRobert Watson	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
4802d9af45c4SRobert Watson	    ;;
4803d9af45c4SRobert Watson	  esac
4804d9af45c4SRobert Watson	  echo >> "$output_objdir/$my_dlsyms" "\
4805eb336521SRobert Watson  {0, (void *) 0}
4806eb336521SRobert Watson};
4807d9af45c4SRobert Watson
4808d9af45c4SRobert Watson/* This works around a problem in FreeBSD linker */
4809d9af45c4SRobert Watson#ifdef FREEBSD_WORKAROUND
4810d9af45c4SRobert Watsonstatic const void *lt_preloaded_setup() {
4811d9af45c4SRobert Watson  return lt_${my_prefix}_LTX_preloaded_symbols;
48123b97a967SRobert Watson}
48133b97a967SRobert Watson#endif
48143b97a967SRobert Watson
48153b97a967SRobert Watson#ifdef __cplusplus
48163b97a967SRobert Watson}
48173b97a967SRobert Watson#endif\
48183b97a967SRobert Watson"
48193b97a967SRobert Watson	} # !$opt_dry_run
48203b97a967SRobert Watson
48213b97a967SRobert Watson	pic_flag_for_symtable=
48223b97a967SRobert Watson	case "$compile_command " in
48233b97a967SRobert Watson	*" -static "*) ;;
4824eb336521SRobert Watson	*)
4825eb336521SRobert Watson	  case $host in
48263b97a967SRobert Watson	  # compiling the symbol table file with pic_flag works around
48273b97a967SRobert Watson	  # a FreeBSD bug that causes programs to crash when -lm is
48283b97a967SRobert Watson	  # linked before any other PIC object.  But we must not use
48293b97a967SRobert Watson	  # pic_flag when linking with -static.  The problem exists in
4830eb336521SRobert Watson	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
48313b97a967SRobert Watson	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
48323b97a967SRobert Watson	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
48333b97a967SRobert Watson	  *-*-hpux*)
48343b97a967SRobert Watson	    pic_flag_for_symtable=" $pic_flag"  ;;
48353b97a967SRobert Watson	  *)
4836d9af45c4SRobert Watson	    $my_pic_p && pic_flag_for_symtable=" $pic_flag"
48373b97a967SRobert Watson	    ;;
48383b97a967SRobert Watson	  esac
48393b97a967SRobert Watson	  ;;
48403b97a967SRobert Watson	esac
48413b97a967SRobert Watson	symtab_cflags=
48423b97a967SRobert Watson	for arg in $LTCFLAGS; do
48433b97a967SRobert Watson	  case $arg in
4844d9af45c4SRobert Watson	  -pie | -fpie | -fPIE) ;;
48453b97a967SRobert Watson	  *) func_append symtab_cflags " $arg" ;;
48463b97a967SRobert Watson	  esac
48473b97a967SRobert Watson	done
48483b97a967SRobert Watson
48493b97a967SRobert Watson	# Now compile the dynamic symbol file.
48503b97a967SRobert Watson	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
48513b97a967SRobert Watson
48523b97a967SRobert Watson	# Clean up the generated files.
48533b97a967SRobert Watson	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
48543b97a967SRobert Watson
48553b97a967SRobert Watson	# Transform the symbol file into the correct name.
48563b97a967SRobert Watson	symfileobj=$output_objdir/${my_outputname}S.$objext
48573b97a967SRobert Watson	case $host in
48583b97a967SRobert Watson	*cygwin* | *mingw* | *cegcc* )
48593b97a967SRobert Watson	  if test -f "$output_objdir/$my_outputname.def"; then
48603b97a967SRobert Watson	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
48613b97a967SRobert Watson	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
48623b97a967SRobert Watson	  else
48633b97a967SRobert Watson	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
48643b97a967SRobert Watson	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
48653b97a967SRobert Watson	  fi
48663b97a967SRobert Watson	  ;;
48673b97a967SRobert Watson	*)
48683b97a967SRobert Watson	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
48693b97a967SRobert Watson	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
48703b97a967SRobert Watson	  ;;
48713b97a967SRobert Watson	esac
48723b97a967SRobert Watson	;;
48733b97a967SRobert Watson      *)
48743b97a967SRobert Watson	func_fatal_error "unknown suffix for '$my_dlsyms'"
48753b97a967SRobert Watson	;;
48763b97a967SRobert Watson      esac
48773b97a967SRobert Watson    else
48783b97a967SRobert Watson      # We keep going just in case the user didn't refer to
48793b97a967SRobert Watson      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
48803b97a967SRobert Watson      # really was required.
48813b97a967SRobert Watson
48823b97a967SRobert Watson      # Nullify the symbol file.
48833b97a967SRobert Watson      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
48843b97a967SRobert Watson      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
48853b97a967SRobert Watson    fi
48863b97a967SRobert Watson}
48873b97a967SRobert Watson
48883b97a967SRobert Watson# func_cygming_gnu_implib_p ARG
48893b97a967SRobert Watson# This predicate returns with zero status (TRUE) if
48903b97a967SRobert Watson# ARG is a GNU/binutils-style import library. Returns
48913b97a967SRobert Watson# with nonzero status (FALSE) otherwise.
48923b97a967SRobert Watsonfunc_cygming_gnu_implib_p ()
48933b97a967SRobert Watson{
48943b97a967SRobert Watson  $debug_cmd
48953b97a967SRobert Watson
48963b97a967SRobert Watson  func_to_tool_file "$1" func_convert_file_msys_to_w32
48973b97a967SRobert Watson  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)$'`
48983b97a967SRobert Watson  test -n "$func_cygming_gnu_implib_tmp"
48993b97a967SRobert Watson}
49003b97a967SRobert Watson
49013b97a967SRobert Watson# func_cygming_ms_implib_p ARG
49023b97a967SRobert Watson# This predicate returns with zero status (TRUE) if
49033b97a967SRobert Watson# ARG is an MS-style import library. Returns
49043b97a967SRobert Watson# with nonzero status (FALSE) otherwise.
49053b97a967SRobert Watsonfunc_cygming_ms_implib_p ()
49063b97a967SRobert Watson{
49073b97a967SRobert Watson  $debug_cmd
49083b97a967SRobert Watson
49093b97a967SRobert Watson  func_to_tool_file "$1" func_convert_file_msys_to_w32
49103b97a967SRobert Watson  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
49113b97a967SRobert Watson  test -n "$func_cygming_ms_implib_tmp"
49123b97a967SRobert Watson}
49133b97a967SRobert Watson
49143b97a967SRobert Watson# func_win32_libid arg
49153b97a967SRobert Watson# return the library type of file 'arg'
49163b97a967SRobert Watson#
4917eb336521SRobert Watson# Need a lot of goo to handle *both* DLLs and import libs
49183b97a967SRobert Watson# Has to be a shell function in order to 'eat' the argument
49193b97a967SRobert Watson# that is supplied when $file_magic_command is called.
49203b97a967SRobert Watson# Despite the name, also deal with 64 bit binaries.
49213b97a967SRobert Watsonfunc_win32_libid ()
49223b97a967SRobert Watson{
49233b97a967SRobert Watson  $debug_cmd
49243b97a967SRobert Watson
49253b97a967SRobert Watson  win32_libid_type=unknown
49263b97a967SRobert Watson  win32_fileres=`file -L $1 2>/dev/null`
49273b97a967SRobert Watson  case $win32_fileres in
49283b97a967SRobert Watson  *ar\ archive\ import\ library*) # definitely import
49293b97a967SRobert Watson    win32_libid_type="x86 archive import"
49303b97a967SRobert Watson    ;;
49313b97a967SRobert Watson  *ar\ archive*) # could be an import, or static
49323b97a967SRobert Watson    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
49333b97a967SRobert Watson    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
49343b97a967SRobert Watson       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
49353b97a967SRobert Watson      case $nm_interface in
49363b97a967SRobert Watson      "MS dumpbin")
49373b97a967SRobert Watson	if func_cygming_ms_implib_p "$1" ||
49383b97a967SRobert Watson	   func_cygming_gnu_implib_p "$1"
49393b97a967SRobert Watson	then
49403b97a967SRobert Watson	  win32_nmres=import
49413b97a967SRobert Watson	else
49423b97a967SRobert Watson	  win32_nmres=
49433b97a967SRobert Watson	fi
49443b97a967SRobert Watson	;;
49453b97a967SRobert Watson      *)
49463b97a967SRobert Watson	func_to_tool_file "$1" func_convert_file_msys_to_w32
49473b97a967SRobert Watson	win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
49483b97a967SRobert Watson	  $SED -n -e '
49493b97a967SRobert Watson	    1,100{
49503b97a967SRobert Watson		/ I /{
49513b97a967SRobert Watson		    s|.*|import|
49523b97a967SRobert Watson		    p
49533b97a967SRobert Watson		    q
4954eb336521SRobert Watson		}
49553b97a967SRobert Watson	    }'`
49563b97a967SRobert Watson	;;
49573b97a967SRobert Watson      esac
49583b97a967SRobert Watson      case $win32_nmres in
49593b97a967SRobert Watson      import*)  win32_libid_type="x86 archive import";;
49603b97a967SRobert Watson      *)        win32_libid_type="x86 archive static";;
49613b97a967SRobert Watson      esac
49623b97a967SRobert Watson    fi
49633b97a967SRobert Watson    ;;
49643b97a967SRobert Watson  *DLL*)
49653b97a967SRobert Watson    win32_libid_type="x86 DLL"
49663b97a967SRobert Watson    ;;
49673b97a967SRobert Watson  *executable*) # but shell scripts are "executable" too...
49683b97a967SRobert Watson    case $win32_fileres in
49693b97a967SRobert Watson    *MS\ Windows\ PE\ Intel*)
49703b97a967SRobert Watson      win32_libid_type="x86 DLL"
49713b97a967SRobert Watson      ;;
49723b97a967SRobert Watson    esac
49733b97a967SRobert Watson    ;;
49743b97a967SRobert Watson  esac
49753b97a967SRobert Watson  $ECHO "$win32_libid_type"
49763b97a967SRobert Watson}
49773b97a967SRobert Watson
49783b97a967SRobert Watson# func_cygming_dll_for_implib ARG
49793b97a967SRobert Watson#
49803b97a967SRobert Watson# Platform-specific function to extract the
49813b97a967SRobert Watson# name of the DLL associated with the specified
49823b97a967SRobert Watson# import library ARG.
49833b97a967SRobert Watson# Invoked by eval'ing the libtool variable
4984d9af45c4SRobert Watson#    $sharedlib_from_linklib_cmd
4985d9af45c4SRobert Watson# Result is available in the variable
4986d9af45c4SRobert Watson#    $sharedlib_from_linklib_result
4987d9af45c4SRobert Watsonfunc_cygming_dll_for_implib ()
49883b97a967SRobert Watson{
49893b97a967SRobert Watson  $debug_cmd
49903b97a967SRobert Watson
49913b97a967SRobert Watson  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
49923b97a967SRobert Watson}
49933b97a967SRobert Watson
49943b97a967SRobert Watson# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
49953b97a967SRobert Watson#
49963b97a967SRobert Watson# The is the core of a fallback implementation of a
49973b97a967SRobert Watson# platform-specific function to extract the name of the
49983b97a967SRobert Watson# DLL associated with the specified import library LIBNAME.
49993b97a967SRobert Watson#
50003b97a967SRobert Watson# SECTION_NAME is either .idata$6 or .idata$7, depending
50013b97a967SRobert Watson# on the platform and compiler that created the implib.
50023b97a967SRobert Watson#
50033b97a967SRobert Watson# Echos the name of the DLL associated with the
50043b97a967SRobert Watson# specified import library.
50053b97a967SRobert Watsonfunc_cygming_dll_for_implib_fallback_core ()
50063b97a967SRobert Watson{
50073b97a967SRobert Watson  $debug_cmd
50083b97a967SRobert Watson
50093b97a967SRobert Watson  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
50103b97a967SRobert Watson  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
50113b97a967SRobert Watson    $SED '/^Contents of section '"$match_literal"':/{
50123b97a967SRobert Watson      # Place marker at beginning of archive member dllname section
50133b97a967SRobert Watson      s/.*/====MARK====/
5014d9af45c4SRobert Watson      p
5015d9af45c4SRobert Watson      d
5016d9af45c4SRobert Watson    }
50173b97a967SRobert Watson    # These lines can sometimes be longer than 43 characters, but
50183b97a967SRobert Watson    # are always uninteresting
50193b97a967SRobert Watson    /:[	 ]*file format pe[i]\{,1\}-/d
50203b97a967SRobert Watson    /^In archive [^:]*:/d
50213b97a967SRobert Watson    # Ensure marker is printed
50223b97a967SRobert Watson    /^====MARK====/p
50233b97a967SRobert Watson    # Remove all lines with less than 43 characters
50243b97a967SRobert Watson    /^.\{43\}/!d
50253b97a967SRobert Watson    # From remaining lines, remove first 43 characters
50263b97a967SRobert Watson    s/^.\{43\}//' |
50273b97a967SRobert Watson    $SED -n '
5028d9af45c4SRobert Watson      # Join marker and all lines until next marker into a single line
50293b97a967SRobert Watson      /^====MARK====/ b para
50303b97a967SRobert Watson      H
50313b97a967SRobert Watson      $ b para
50323b97a967SRobert Watson      b
50333b97a967SRobert Watson      :para
50343b97a967SRobert Watson      x
50353b97a967SRobert Watson      s/\n//g
50363b97a967SRobert Watson      # Remove the marker
5037d9af45c4SRobert Watson      s/^====MARK====//
5038d9af45c4SRobert Watson      # Remove trailing dots and whitespace
5039d9af45c4SRobert Watson      s/[\. \t]*$//
50403b97a967SRobert Watson      # Print
50413b97a967SRobert Watson      /./p' |
50423b97a967SRobert Watson    # we now have a list, one entry per line, of the stringified
50433b97a967SRobert Watson    # contents of the appropriate section of all members of the
50443b97a967SRobert Watson    # archive that possess that section. Heuristic: eliminate
50453b97a967SRobert Watson    # all those that have a first or second character that is
50463b97a967SRobert Watson    # a '.' (that is, objdump's representation of an unprintable
50473b97a967SRobert Watson    # character.) This should work for all archives with less than
50483b97a967SRobert Watson    # 0x302f exports -- but will fail for DLLs whose name actually
5049d9af45c4SRobert Watson    # begins with a literal '.' or a single character followed by
5050d9af45c4SRobert Watson    # a '.'.
5051d9af45c4SRobert Watson    #
5052d9af45c4SRobert Watson    # Of those that remain, print the first one.
5053d9af45c4SRobert Watson    $SED -e '/^\./d;/^.\./d;q'
5054d9af45c4SRobert Watson}
50553b97a967SRobert Watson
50563b97a967SRobert Watson# func_cygming_dll_for_implib_fallback ARG
50573b97a967SRobert Watson# Platform-specific function to extract the
50583b97a967SRobert Watson# name of the DLL associated with the specified
50593b97a967SRobert Watson# import library ARG.
5060d9af45c4SRobert Watson#
5061d9af45c4SRobert Watson# This fallback implementation is for use when $DLLTOOL
5062d9af45c4SRobert Watson# does not support the --identify-strict option.
5063d9af45c4SRobert Watson# Invoked by eval'ing the libtool variable
5064d9af45c4SRobert Watson#    $sharedlib_from_linklib_cmd
5065d9af45c4SRobert Watson# Result is available in the variable
5066d9af45c4SRobert Watson#    $sharedlib_from_linklib_result
5067d9af45c4SRobert Watsonfunc_cygming_dll_for_implib_fallback ()
50683b97a967SRobert Watson{
50693b97a967SRobert Watson  $debug_cmd
50703b97a967SRobert Watson
50713b97a967SRobert Watson  if func_cygming_gnu_implib_p "$1"; then
5072d9af45c4SRobert Watson    # binutils import library
5073d9af45c4SRobert Watson    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
5074d9af45c4SRobert Watson  elif func_cygming_ms_implib_p "$1"; then
50753b97a967SRobert Watson    # ms-generated import library
50763b97a967SRobert Watson    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
50773b97a967SRobert Watson  else
50783b97a967SRobert Watson    # unknown
50793b97a967SRobert Watson    sharedlib_from_linklib_result=
50803b97a967SRobert Watson  fi
50813b97a967SRobert Watson}
50823b97a967SRobert Watson
50833b97a967SRobert Watson
5084d9af45c4SRobert Watson# func_extract_an_archive dir oldlib
5085d9af45c4SRobert Watsonfunc_extract_an_archive ()
5086d9af45c4SRobert Watson{
50873b97a967SRobert Watson    $debug_cmd
50883b97a967SRobert Watson
50893b97a967SRobert Watson    f_ex_an_ar_dir=$1; shift
50903b97a967SRobert Watson    f_ex_an_ar_oldlib=$1
5091d9af45c4SRobert Watson    if test yes = "$lock_old_archive_extraction"; then
50923b97a967SRobert Watson      lockfile=$f_ex_an_ar_oldlib.lock
50933b97a967SRobert Watson      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
50943b97a967SRobert Watson	func_echo "Waiting for $lockfile to be removed"
5095d9af45c4SRobert Watson	sleep 2
5096d9af45c4SRobert Watson      done
5097d9af45c4SRobert Watson    fi
5098d9af45c4SRobert Watson    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
50993b97a967SRobert Watson		   'stat=$?; rm -f "$lockfile"; exit $stat'
51003b97a967SRobert Watson    if test yes = "$lock_old_archive_extraction"; then
51013b97a967SRobert Watson      $opt_dry_run || rm -f "$lockfile"
51023b97a967SRobert Watson    fi
51033b97a967SRobert Watson    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
51043b97a967SRobert Watson     :
5105d9af45c4SRobert Watson    else
5106d9af45c4SRobert Watson      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
5107d9af45c4SRobert Watson    fi
5108d9af45c4SRobert Watson}
5109d9af45c4SRobert Watson
5110d9af45c4SRobert Watson
5111d9af45c4SRobert Watson# func_extract_archives gentop oldlib ...
51123b97a967SRobert Watsonfunc_extract_archives ()
51133b97a967SRobert Watson{
5114d9af45c4SRobert Watson    $debug_cmd
5115d9af45c4SRobert Watson
5116d9af45c4SRobert Watson    my_gentop=$1; shift
5117d9af45c4SRobert Watson    my_oldlibs=${1+"$@"}
5118d9af45c4SRobert Watson    my_oldobjs=
5119d9af45c4SRobert Watson    my_xlib=
5120d9af45c4SRobert Watson    my_xabs=
51213b97a967SRobert Watson    my_xdir=
51223b97a967SRobert Watson
51233b97a967SRobert Watson    for my_xlib in $my_oldlibs; do
5124d9af45c4SRobert Watson      # Extract the objects.
5125d9af45c4SRobert Watson      case $my_xlib in
51263b97a967SRobert Watson	[\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
51273b97a967SRobert Watson	*) my_xabs=`pwd`"/$my_xlib" ;;
51283b97a967SRobert Watson      esac
51293b97a967SRobert Watson      func_basename "$my_xlib"
51303b97a967SRobert Watson      my_xlib=$func_basename_result
51313b97a967SRobert Watson      my_xlib_u=$my_xlib
51323b97a967SRobert Watson      while :; do
51333b97a967SRobert Watson        case " $extracted_archives " in
51343b97a967SRobert Watson	*" $my_xlib_u "*)
51353b97a967SRobert Watson	  func_arith $extracted_serial + 1
51363b97a967SRobert Watson	  extracted_serial=$func_arith_result
51373b97a967SRobert Watson	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
51383b97a967SRobert Watson	*) break ;;
51393b97a967SRobert Watson	esac
51403b97a967SRobert Watson      done
51413b97a967SRobert Watson      extracted_archives="$extracted_archives $my_xlib_u"
51423b97a967SRobert Watson      my_xdir=$my_gentop/$my_xlib_u
51433b97a967SRobert Watson
51443b97a967SRobert Watson      func_mkdir_p "$my_xdir"
51453b97a967SRobert Watson
51463b97a967SRobert Watson      case $host in
51473b97a967SRobert Watson      *-darwin*)
5148d9af45c4SRobert Watson	func_verbose "Extracting $my_xabs"
5149d9af45c4SRobert Watson	# Do not bother doing anything if just a dry run
51503b97a967SRobert Watson	$opt_dry_run || {
51513b97a967SRobert Watson	  darwin_orig_dir=`pwd`
51523b97a967SRobert Watson	  cd $my_xdir || exit $?
51533b97a967SRobert Watson	  darwin_archive=$my_xabs
51543b97a967SRobert Watson	  darwin_curdir=`pwd`
5155d9af45c4SRobert Watson	  func_basename "$darwin_archive"
51563b97a967SRobert Watson	  darwin_base_archive=$func_basename_result
51573b97a967SRobert Watson	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
51583b97a967SRobert Watson	  if test -n "$darwin_arches"; then
51593b97a967SRobert Watson	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
51603b97a967SRobert Watson	    darwin_arch=
51613b97a967SRobert Watson	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
5162d9af45c4SRobert Watson	    for darwin_arch in  $darwin_arches; do
51633b97a967SRobert Watson	      func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
51643b97a967SRobert Watson	      $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
5165d9af45c4SRobert Watson	      cd "unfat-$$/$darwin_base_archive-$darwin_arch"
5166d9af45c4SRobert Watson	      func_extract_an_archive "`pwd`" "$darwin_base_archive"
51673b97a967SRobert Watson	      cd "$darwin_curdir"
5168d9af45c4SRobert Watson	      $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
51693b97a967SRobert Watson	    done # $darwin_arches
5170d9af45c4SRobert Watson            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
5171d9af45c4SRobert Watson	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
5172d9af45c4SRobert Watson	    darwin_file=
51733b97a967SRobert Watson	    darwin_files=
5174d9af45c4SRobert Watson	    for darwin_file in $darwin_filelist; do
5175d9af45c4SRobert Watson	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
5176d9af45c4SRobert Watson	      $LIPO -create -output "$darwin_file" $darwin_files
5177d9af45c4SRobert Watson	    done # $darwin_filelist
5178d9af45c4SRobert Watson	    $RM -rf unfat-$$
51793b97a967SRobert Watson	    cd "$darwin_orig_dir"
5180d9af45c4SRobert Watson	  else
5181d9af45c4SRobert Watson	    cd $darwin_orig_dir
5182d9af45c4SRobert Watson	    func_extract_an_archive "$my_xdir" "$my_xabs"
5183d9af45c4SRobert Watson	  fi # $darwin_arches
5184d9af45c4SRobert Watson	} # !$opt_dry_run
5185d9af45c4SRobert Watson	;;
5186d9af45c4SRobert Watson      *)
5187d9af45c4SRobert Watson        func_extract_an_archive "$my_xdir" "$my_xabs"
5188d9af45c4SRobert Watson	;;
51893b97a967SRobert Watson      esac
5190d9af45c4SRobert Watson      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
5191d9af45c4SRobert Watson    done
5192d9af45c4SRobert Watson
5193d9af45c4SRobert Watson    func_extract_archives_result=$my_oldobjs
5194d9af45c4SRobert Watson}
5195d9af45c4SRobert Watson
5196d9af45c4SRobert Watson
5197d9af45c4SRobert Watson# func_emit_wrapper [arg=no]
5198d9af45c4SRobert Watson#
5199d9af45c4SRobert Watson# Emit a libtool wrapper script on stdout.
5200d9af45c4SRobert Watson# Don't directly open a file because we may want to
5201d9af45c4SRobert Watson# incorporate the script contents within a cygwin/mingw
5202d9af45c4SRobert Watson# wrapper executable.  Must ONLY be called from within
5203d9af45c4SRobert Watson# func_mode_link because it depends on a number of variables
5204d9af45c4SRobert Watson# set therein.
5205d9af45c4SRobert Watson#
5206d9af45c4SRobert Watson# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
5207d9af45c4SRobert Watson# variable will take.  If 'yes', then the emitted script
5208d9af45c4SRobert Watson# will assume that the directory where it is stored is
5209d9af45c4SRobert Watson# the $objdir directory.  This is a cygwin/mingw-specific
5210d9af45c4SRobert Watson# behavior.
5211d9af45c4SRobert Watsonfunc_emit_wrapper ()
5212d9af45c4SRobert Watson{
5213d9af45c4SRobert Watson	func_emit_wrapper_arg1=${1-no}
5214d9af45c4SRobert Watson
5215d9af45c4SRobert Watson	$ECHO "\
5216d9af45c4SRobert Watson#! $SHELL
5217d9af45c4SRobert Watson
5218d9af45c4SRobert Watson# $output - temporary wrapper script for $objdir/$outputname
5219d9af45c4SRobert Watson# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5220d9af45c4SRobert Watson#
5221d9af45c4SRobert Watson# The $output program cannot be directly executed until all the libtool
5222d9af45c4SRobert Watson# libraries that it depends on are installed.
5223d9af45c4SRobert Watson#
5224d9af45c4SRobert Watson# This wrapper script should never be moved out of the build directory.
5225d9af45c4SRobert Watson# If it is, it will not operate correctly.
5226d9af45c4SRobert Watson
5227d9af45c4SRobert Watson# Sed substitution that helps us do robust quoting.  It backslashifies
5228d9af45c4SRobert Watson# metacharacters that are still active within double-quoted strings.
5229d9af45c4SRobert Watsonsed_quote_subst='$sed_quote_subst'
5230d9af45c4SRobert Watson
5231d9af45c4SRobert Watson# Be Bourne compatible
5232d9af45c4SRobert Watsonif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
5233d9af45c4SRobert Watson  emulate sh
5234d9af45c4SRobert Watson  NULLCMD=:
5235d9af45c4SRobert Watson  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
5236d9af45c4SRobert Watson  # is contrary to our usage.  Disable this feature.
5237d9af45c4SRobert Watson  alias -g '\${1+\"\$@\"}'='\"\$@\"'
5238d9af45c4SRobert Watson  setopt NO_GLOB_SUBST
5239d9af45c4SRobert Watsonelse
5240d9af45c4SRobert Watson  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
5241d9af45c4SRobert Watsonfi
5242d9af45c4SRobert WatsonBIN_SH=xpg4; export BIN_SH # for Tru64
5243d9af45c4SRobert WatsonDUALCASE=1; export DUALCASE # for MKS sh
5244d9af45c4SRobert Watson
5245d9af45c4SRobert Watson# The HP-UX ksh and POSIX shell print the target directory to stdout
5246d9af45c4SRobert Watson# if CDPATH is set.
5247d9af45c4SRobert Watson(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
5248d9af45c4SRobert Watson
5249d9af45c4SRobert Watsonrelink_command=\"$relink_command\"
5250d9af45c4SRobert Watson
5251d9af45c4SRobert Watson# This environment variable determines our operation mode.
5252d9af45c4SRobert Watsonif test \"\$libtool_install_magic\" = \"$magic\"; then
5253d9af45c4SRobert Watson  # install mode needs the following variables:
5254d9af45c4SRobert Watson  generated_by_libtool_version='$macro_version'
52553b97a967SRobert Watson  notinst_deplibs='$notinst_deplibs'
52563b97a967SRobert Watsonelse
5257d9af45c4SRobert Watson  # When we are sourced in execute mode, \$file and \$ECHO are already set.
5258d9af45c4SRobert Watson  if test \"\$libtool_execute_magic\" != \"$magic\"; then
5259d9af45c4SRobert Watson    file=\"\$0\""
5260d9af45c4SRobert Watson
5261d9af45c4SRobert Watson    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
5262d9af45c4SRobert Watson    $ECHO "\
5263d9af45c4SRobert Watson
5264d9af45c4SRobert Watson# A function that is used when there is no print builtin or printf.
5265d9af45c4SRobert Watsonfunc_fallback_echo ()
5266d9af45c4SRobert Watson{
5267d9af45c4SRobert Watson  eval 'cat <<_LTECHO_EOF
5268d9af45c4SRobert Watson\$1
5269d9af45c4SRobert Watson_LTECHO_EOF'
5270d9af45c4SRobert Watson}
5271d9af45c4SRobert Watson    ECHO=\"$qECHO\"
5272d9af45c4SRobert Watson  fi
5273d9af45c4SRobert Watson
5274d9af45c4SRobert Watson# Very basic option parsing. These options are (a) specific to
5275d9af45c4SRobert Watson# the libtool wrapper, (b) are identical between the wrapper
5276d9af45c4SRobert Watson# /script/ and the wrapper /executable/ that is used only on
5277d9af45c4SRobert Watson# windows platforms, and (c) all begin with the string "--lt-"
5278d9af45c4SRobert Watson# (application programs are unlikely to have options that match
5279d9af45c4SRobert Watson# this pattern).
5280d9af45c4SRobert Watson#
5281d9af45c4SRobert Watson# There are only two supported options: --lt-debug and
5282d9af45c4SRobert Watson# --lt-dump-script. There is, deliberately, no --lt-help.
5283d9af45c4SRobert Watson#
5284d9af45c4SRobert Watson# The first argument to this parsing function should be the
5285d9af45c4SRobert Watson# script's $0 value, followed by "$@".
5286d9af45c4SRobert Watsonlt_option_debug=
5287d9af45c4SRobert Watsonfunc_parse_lt_options ()
5288d9af45c4SRobert Watson{
5289d9af45c4SRobert Watson  lt_script_arg0=\$0
52903b97a967SRobert Watson  shift
52913b97a967SRobert Watson  for lt_opt
52923b97a967SRobert Watson  do
52933b97a967SRobert Watson    case \"\$lt_opt\" in
52943b97a967SRobert Watson    --lt-debug) lt_option_debug=1 ;;
52953b97a967SRobert Watson    --lt-dump-script)
52963b97a967SRobert Watson        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
52973b97a967SRobert Watson        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
52983b97a967SRobert Watson        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
52993b97a967SRobert Watson        cat \"\$lt_dump_D/\$lt_dump_F\"
53003b97a967SRobert Watson        exit 0
53013b97a967SRobert Watson      ;;
53023b97a967SRobert Watson    --lt-*)
53033b97a967SRobert Watson        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
53043b97a967SRobert Watson        exit 1
53053b97a967SRobert Watson      ;;
53063b97a967SRobert Watson    esac
53073b97a967SRobert Watson  done
53083b97a967SRobert Watson
53093b97a967SRobert Watson  # Print the debug banner immediately:
53103b97a967SRobert Watson  if test -n \"\$lt_option_debug\"; then
53113b97a967SRobert Watson    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
53123b97a967SRobert Watson  fi
53133b97a967SRobert Watson}
53143b97a967SRobert Watson
53153b97a967SRobert Watson# Used when --lt-debug. Prints its arguments to stdout
53163b97a967SRobert Watson# (redirection is the responsibility of the caller)
53173b97a967SRobert Watsonfunc_lt_dump_args ()
53183b97a967SRobert Watson{
53193b97a967SRobert Watson  lt_dump_args_N=1;
53203b97a967SRobert Watson  for lt_arg
53213b97a967SRobert Watson  do
53223b97a967SRobert Watson    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
53233b97a967SRobert Watson    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
53243b97a967SRobert Watson  done
53253b97a967SRobert Watson}
53263b97a967SRobert Watson
53273b97a967SRobert Watson# Core function for launching the target application
53283b97a967SRobert Watsonfunc_exec_program_core ()
53293b97a967SRobert Watson{
53303b97a967SRobert Watson"
53313b97a967SRobert Watson  case $host in
53323b97a967SRobert Watson  # Backslashes separate directories on plain windows
53333b97a967SRobert Watson  *-*-mingw | *-*-os2* | *-cegcc*)
53343b97a967SRobert Watson    $ECHO "\
53353b97a967SRobert Watson      if test -n \"\$lt_option_debug\"; then
53363b97a967SRobert Watson        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
53373b97a967SRobert Watson        func_lt_dump_args \${1+\"\$@\"} 1>&2
5338d9af45c4SRobert Watson      fi
53393b97a967SRobert Watson      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
53403b97a967SRobert Watson"
53413b97a967SRobert Watson    ;;
53423b97a967SRobert Watson
53433b97a967SRobert Watson  *)
53443b97a967SRobert Watson    $ECHO "\
53453b97a967SRobert Watson      if test -n \"\$lt_option_debug\"; then
53463b97a967SRobert Watson        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
53473b97a967SRobert Watson        func_lt_dump_args \${1+\"\$@\"} 1>&2
53483b97a967SRobert Watson      fi
53493b97a967SRobert Watson      exec \"\$progdir/\$program\" \${1+\"\$@\"}
53503b97a967SRobert Watson"
53513b97a967SRobert Watson    ;;
53523b97a967SRobert Watson  esac
53533b97a967SRobert Watson  $ECHO "\
53543b97a967SRobert Watson      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
53553b97a967SRobert Watson      exit 1
53563b97a967SRobert Watson}
53573b97a967SRobert Watson
53583b97a967SRobert Watson# A function to encapsulate launching the target application
53593b97a967SRobert Watson# Strips options in the --lt-* namespace from \$@ and
53603b97a967SRobert Watson# launches target application with the remaining arguments.
5361eb336521SRobert Watsonfunc_exec_program ()
5362eb336521SRobert Watson{
5363eb336521SRobert Watson  case \" \$* \" in
5364eb336521SRobert Watson  *\\ --lt-*)
5365eb336521SRobert Watson    for lt_wr_arg
5366eb336521SRobert Watson    do
5367eb336521SRobert Watson      case \$lt_wr_arg in
5368eb336521SRobert Watson      --lt-*) ;;
5369eb336521SRobert Watson      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
5370eb336521SRobert Watson      esac
5371eb336521SRobert Watson      shift
5372eb336521SRobert Watson    done ;;
5373eb336521SRobert Watson  esac
5374eb336521SRobert Watson  func_exec_program_core \${1+\"\$@\"}
53753b97a967SRobert Watson}
53763b97a967SRobert Watson
53773b97a967SRobert Watson  # Parse options
53783b97a967SRobert Watson  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
53793b97a967SRobert Watson
53803b97a967SRobert Watson  # Find the directory that this script lives in.
53813b97a967SRobert Watson  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
53823b97a967SRobert Watson  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
53833b97a967SRobert Watson
53843b97a967SRobert Watson  # Follow symbolic links until we get to the real thisdir.
53853b97a967SRobert Watson  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
53863b97a967SRobert Watson  while test -n \"\$file\"; do
53873b97a967SRobert Watson    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
53883b97a967SRobert Watson
53893b97a967SRobert Watson    # If there was a directory component, then change thisdir.
53903b97a967SRobert Watson    if test \"x\$destdir\" != \"x\$file\"; then
53913b97a967SRobert Watson      case \"\$destdir\" in
53923b97a967SRobert Watson      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
53933b97a967SRobert Watson      *) thisdir=\"\$thisdir/\$destdir\" ;;
53943b97a967SRobert Watson      esac
53953b97a967SRobert Watson    fi
53963b97a967SRobert Watson
53973b97a967SRobert Watson    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
53983b97a967SRobert Watson    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
53993b97a967SRobert Watson  done
54003b97a967SRobert Watson
54013b97a967SRobert Watson  # Usually 'no', except on cygwin/mingw when embedded into
54023b97a967SRobert Watson  # the cwrapper.
54033b97a967SRobert Watson  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
54043b97a967SRobert Watson  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
54053b97a967SRobert Watson    # special case for '.'
54063b97a967SRobert Watson    if test \"\$thisdir\" = \".\"; then
54073b97a967SRobert Watson      thisdir=\`pwd\`
54083b97a967SRobert Watson    fi
54093b97a967SRobert Watson    # remove .libs from thisdir
54103b97a967SRobert Watson    case \"\$thisdir\" in
54113b97a967SRobert Watson    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
54123b97a967SRobert Watson    $objdir )   thisdir=. ;;
54133b97a967SRobert Watson    esac
54143b97a967SRobert Watson  fi
54153b97a967SRobert Watson
54163b97a967SRobert Watson  # Try to get the absolute directory name.
54173b97a967SRobert Watson  absdir=\`cd \"\$thisdir\" && pwd\`
54183b97a967SRobert Watson  test -n \"\$absdir\" && thisdir=\"\$absdir\"
54193b97a967SRobert Watson"
54203b97a967SRobert Watson
54213b97a967SRobert Watson	if test yes = "$fast_install"; then
54223b97a967SRobert Watson	  $ECHO "\
54233b97a967SRobert Watson  program=lt-'$outputname'$exeext
54243b97a967SRobert Watson  progdir=\"\$thisdir/$objdir\"
54253b97a967SRobert Watson
54263b97a967SRobert Watson  if test ! -f \"\$progdir/\$program\" ||
54273b97a967SRobert Watson     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
54283b97a967SRobert Watson       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
54293b97a967SRobert Watson
54303b97a967SRobert Watson    file=\"\$\$-\$program\"
54313b97a967SRobert Watson
54323b97a967SRobert Watson    if test ! -d \"\$progdir\"; then
54333b97a967SRobert Watson      $MKDIR \"\$progdir\"
54343b97a967SRobert Watson    else
54353b97a967SRobert Watson      $RM \"\$progdir/\$file\"
54363b97a967SRobert Watson    fi"
54373b97a967SRobert Watson
54383b97a967SRobert Watson	  $ECHO "\
54393b97a967SRobert Watson
54403b97a967SRobert Watson    # relink executable if necessary
54413b97a967SRobert Watson    if test -n \"\$relink_command\"; then
54423b97a967SRobert Watson      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
54433b97a967SRobert Watson      else
54443b97a967SRobert Watson	\$ECHO \"\$relink_command_output\" >&2
54453b97a967SRobert Watson	$RM \"\$progdir/\$file\"
54463b97a967SRobert Watson	exit 1
54473b97a967SRobert Watson      fi
54483b97a967SRobert Watson    fi
54493b97a967SRobert Watson
54503b97a967SRobert Watson    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
54513b97a967SRobert Watson    { $RM \"\$progdir/\$program\";
54523b97a967SRobert Watson      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
54533b97a967SRobert Watson    $RM \"\$progdir/\$file\"
54543b97a967SRobert Watson  fi"
54553b97a967SRobert Watson	else
54563b97a967SRobert Watson	  $ECHO "\
54573b97a967SRobert Watson  program='$outputname'
54583b97a967SRobert Watson  progdir=\"\$thisdir/$objdir\"
54593b97a967SRobert Watson"
54603b97a967SRobert Watson	fi
54613b97a967SRobert Watson
54623b97a967SRobert Watson	$ECHO "\
54633b97a967SRobert Watson
54643b97a967SRobert Watson  if test -f \"\$progdir/\$program\"; then"
54653b97a967SRobert Watson
54663b97a967SRobert Watson	# fixup the dll searchpath if we need to.
54673b97a967SRobert Watson	#
54683b97a967SRobert Watson	# Fix the DLL searchpath if we need to.  Do this before prepending
54693b97a967SRobert Watson	# to shlibpath, because on Windows, both are PATH and uninstalled
54703b97a967SRobert Watson	# libraries must come first.
54713b97a967SRobert Watson	if test -n "$dllsearchpath"; then
54723b97a967SRobert Watson	  $ECHO "\
54733b97a967SRobert Watson    # Add the dll search path components to the executable PATH
54743b97a967SRobert Watson    PATH=$dllsearchpath:\$PATH
54753b97a967SRobert Watson"
54763b97a967SRobert Watson	fi
54773b97a967SRobert Watson
54783b97a967SRobert Watson	# Export our shlibpath_var if we have one.
54793b97a967SRobert Watson	if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
54803b97a967SRobert Watson	  $ECHO "\
54813b97a967SRobert Watson    # Add our own library path to $shlibpath_var
54823b97a967SRobert Watson    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
54833b97a967SRobert Watson
54843b97a967SRobert Watson    # Some systems cannot cope with colon-terminated $shlibpath_var
54853b97a967SRobert Watson    # The second colon is a workaround for a bug in BeOS R4 sed
54863b97a967SRobert Watson    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
54873b97a967SRobert Watson
54883b97a967SRobert Watson    export $shlibpath_var
54893b97a967SRobert Watson"
54903b97a967SRobert Watson	fi
54913b97a967SRobert Watson
54923b97a967SRobert Watson	$ECHO "\
54933b97a967SRobert Watson    if test \"\$libtool_execute_magic\" != \"$magic\"; then
54943b97a967SRobert Watson      # Run the actual program with our arguments.
54953b97a967SRobert Watson      func_exec_program \${1+\"\$@\"}
54963b97a967SRobert Watson    fi
54973b97a967SRobert Watson  else
54983b97a967SRobert Watson    # The program doesn't exist.
54993b97a967SRobert Watson    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
55003b97a967SRobert Watson    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
55013b97a967SRobert Watson    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
55023b97a967SRobert Watson    exit 1
55033b97a967SRobert Watson  fi
55043b97a967SRobert Watsonfi\
55053b97a967SRobert Watson"
55063b97a967SRobert Watson}
55073b97a967SRobert Watson
55083b97a967SRobert Watson
55093b97a967SRobert Watson# func_emit_cwrapperexe_src
55103b97a967SRobert Watson# emit the source code for a wrapper executable on stdout
55113b97a967SRobert Watson# Must ONLY be called from within func_mode_link because
55123b97a967SRobert Watson# it depends on a number of variable set therein.
55133b97a967SRobert Watsonfunc_emit_cwrapperexe_src ()
55143b97a967SRobert Watson{
55153b97a967SRobert Watson	cat <<EOF
55163b97a967SRobert Watson
5517eb336521SRobert Watson/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
55183b97a967SRobert Watson   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
55193b97a967SRobert Watson
55203b97a967SRobert Watson   The $output program cannot be directly executed until all the libtool
55213b97a967SRobert Watson   libraries that it depends on are installed.
55223b97a967SRobert Watson
55233b97a967SRobert Watson   This wrapper executable should never be moved out of the build directory.
55243b97a967SRobert Watson   If it is, it will not operate correctly.
55253b97a967SRobert Watson*/
55263b97a967SRobert WatsonEOF
55273b97a967SRobert Watson	    cat <<"EOF"
55283b97a967SRobert Watson#ifdef _MSC_VER
55293b97a967SRobert Watson# define _CRT_SECURE_NO_DEPRECATE 1
55303b97a967SRobert Watson#endif
55313b97a967SRobert Watson#include <stdio.h>
55323b97a967SRobert Watson#include <stdlib.h>
55333b97a967SRobert Watson#ifdef _MSC_VER
55343b97a967SRobert Watson# include <direct.h>
55353b97a967SRobert Watson# include <process.h>
55363b97a967SRobert Watson# include <io.h>
55373b97a967SRobert Watson#else
55383b97a967SRobert Watson# include <unistd.h>
55393b97a967SRobert Watson# include <stdint.h>
55403b97a967SRobert Watson# ifdef __CYGWIN__
55413b97a967SRobert Watson#  include <io.h>
55423b97a967SRobert Watson# endif
55433b97a967SRobert Watson#endif
55443b97a967SRobert Watson#include <malloc.h>
55453b97a967SRobert Watson#include <stdarg.h>
55463b97a967SRobert Watson#include <assert.h>
55473b97a967SRobert Watson#include <string.h>
55483b97a967SRobert Watson#include <ctype.h>
55493b97a967SRobert Watson#include <errno.h>
55503b97a967SRobert Watson#include <fcntl.h>
55513b97a967SRobert Watson#include <sys/stat.h>
55523b97a967SRobert Watson
55533b97a967SRobert Watson#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
55543b97a967SRobert Watson
55553b97a967SRobert Watson/* declarations of non-ANSI functions */
55563b97a967SRobert Watson#if defined __MINGW32__
55573b97a967SRobert Watson# ifdef __STRICT_ANSI__
55583b97a967SRobert Watsonint _putenv (const char *);
55593b97a967SRobert Watson# endif
55603b97a967SRobert Watson#elif defined __CYGWIN__
55613b97a967SRobert Watson# ifdef __STRICT_ANSI__
55623b97a967SRobert Watsonchar *realpath (const char *, char *);
55633b97a967SRobert Watsonint putenv (char *);
55643b97a967SRobert Watsonint setenv (const char *, const char *, int);
55653b97a967SRobert Watson# endif
55663b97a967SRobert Watson/* #elif defined other_platform || defined ... */
55673b97a967SRobert Watson#endif
55683b97a967SRobert Watson
55693b97a967SRobert Watson/* portability defines, excluding path handling macros */
55703b97a967SRobert Watson#if defined _MSC_VER
55713b97a967SRobert Watson# define setmode _setmode
55723b97a967SRobert Watson# define stat    _stat
55733b97a967SRobert Watson# define chmod   _chmod
55743b97a967SRobert Watson# define getcwd  _getcwd
55753b97a967SRobert Watson# define putenv  _putenv
55763b97a967SRobert Watson# define S_IXUSR _S_IEXEC
55773b97a967SRobert Watson#elif defined __MINGW32__
55783b97a967SRobert Watson# define setmode _setmode
55793b97a967SRobert Watson# define stat    _stat
55803b97a967SRobert Watson# define chmod   _chmod
55813b97a967SRobert Watson# define getcwd  _getcwd
55823b97a967SRobert Watson# define putenv  _putenv
55833b97a967SRobert Watson#elif defined __CYGWIN__
55843b97a967SRobert Watson# define HAVE_SETENV
55853b97a967SRobert Watson# define FOPEN_WB "wb"
5586d9af45c4SRobert Watson/* #elif defined other platforms ... */
5587d9af45c4SRobert Watson#endif
5588d9af45c4SRobert Watson
55893b97a967SRobert Watson#if defined PATH_MAX
55903b97a967SRobert Watson# define LT_PATHMAX PATH_MAX
55913b97a967SRobert Watson#elif defined MAXPATHLEN
55923b97a967SRobert Watson# define LT_PATHMAX MAXPATHLEN
55933b97a967SRobert Watson#else
55943b97a967SRobert Watson# define LT_PATHMAX 1024
55953b97a967SRobert Watson#endif
55963b97a967SRobert Watson
55973b97a967SRobert Watson#ifndef S_IXOTH
55983b97a967SRobert Watson# define S_IXOTH 0
55993b97a967SRobert Watson#endif
56003b97a967SRobert Watson#ifndef S_IXGRP
56013b97a967SRobert Watson# define S_IXGRP 0
56023b97a967SRobert Watson#endif
56033b97a967SRobert Watson
56043b97a967SRobert Watson/* path handling portability macros */
56053b97a967SRobert Watson#ifndef DIR_SEPARATOR
56063b97a967SRobert Watson# define DIR_SEPARATOR '/'
56073b97a967SRobert Watson# define PATH_SEPARATOR ':'
56083b97a967SRobert Watson#endif
56093b97a967SRobert Watson
56103b97a967SRobert Watson#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
56113b97a967SRobert Watson  defined __OS2__
56123b97a967SRobert Watson# define HAVE_DOS_BASED_FILE_SYSTEM
56133b97a967SRobert Watson# define FOPEN_WB "wb"
56143b97a967SRobert Watson# ifndef DIR_SEPARATOR_2
56153b97a967SRobert Watson#  define DIR_SEPARATOR_2 '\\'
56163b97a967SRobert Watson# endif
56173b97a967SRobert Watson# ifndef PATH_SEPARATOR_2
56183b97a967SRobert Watson#  define PATH_SEPARATOR_2 ';'
56193b97a967SRobert Watson# endif
56203b97a967SRobert Watson#endif
56213b97a967SRobert Watson
56223b97a967SRobert Watson#ifndef DIR_SEPARATOR_2
56233b97a967SRobert Watson# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
56243b97a967SRobert Watson#else /* DIR_SEPARATOR_2 */
56253b97a967SRobert Watson# define IS_DIR_SEPARATOR(ch) \
56263b97a967SRobert Watson	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
56273b97a967SRobert Watson#endif /* DIR_SEPARATOR_2 */
56283b97a967SRobert Watson
56293b97a967SRobert Watson#ifndef PATH_SEPARATOR_2
56303b97a967SRobert Watson# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
56313b97a967SRobert Watson#else /* PATH_SEPARATOR_2 */
56323b97a967SRobert Watson# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
56333b97a967SRobert Watson#endif /* PATH_SEPARATOR_2 */
56343b97a967SRobert Watson
56353b97a967SRobert Watson#ifndef FOPEN_WB
56363b97a967SRobert Watson# define FOPEN_WB "w"
56373b97a967SRobert Watson#endif
56383b97a967SRobert Watson#ifndef _O_BINARY
56393b97a967SRobert Watson# define _O_BINARY 0
56403b97a967SRobert Watson#endif
56413b97a967SRobert Watson
56423b97a967SRobert Watson#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
56433b97a967SRobert Watson#define XFREE(stale) do { \
56443b97a967SRobert Watson  if (stale) { free (stale); stale = 0; } \
56453b97a967SRobert Watson} while (0)
56463b97a967SRobert Watson
56473b97a967SRobert Watson#if defined LT_DEBUGWRAPPER
56483b97a967SRobert Watsonstatic int lt_debug = 1;
56493b97a967SRobert Watson#else
56503b97a967SRobert Watsonstatic int lt_debug = 0;
56513b97a967SRobert Watson#endif
56523b97a967SRobert Watson
56533b97a967SRobert Watsonconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
56543b97a967SRobert Watson
56553b97a967SRobert Watsonvoid *xmalloc (size_t num);
56563b97a967SRobert Watsonchar *xstrdup (const char *string);
56573b97a967SRobert Watsonconst char *base_name (const char *name);
56583b97a967SRobert Watsonchar *find_executable (const char *wrapper);
56593b97a967SRobert Watsonchar *chase_symlinks (const char *pathspec);
56603b97a967SRobert Watsonint make_executable (const char *path);
56613b97a967SRobert Watsonint check_executable (const char *path);
56623b97a967SRobert Watsonchar *strendzap (char *str, const char *pat);
56633b97a967SRobert Watsonvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
56643b97a967SRobert Watsonvoid lt_fatal (const char *file, int line, const char *message, ...);
56653b97a967SRobert Watsonstatic const char *nonnull (const char *s);
56663b97a967SRobert Watsonstatic const char *nonempty (const char *s);
56673b97a967SRobert Watsonvoid lt_setenv (const char *name, const char *value);
56683b97a967SRobert Watsonchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
56693b97a967SRobert Watsonvoid lt_update_exe_path (const char *name, const char *value);
56703b97a967SRobert Watsonvoid lt_update_lib_path (const char *name, const char *value);
56713b97a967SRobert Watsonchar **prepare_spawn (char **argv);
56723b97a967SRobert Watsonvoid lt_dump_script (FILE *f);
56733b97a967SRobert WatsonEOF
56743b97a967SRobert Watson
56753b97a967SRobert Watson	    cat <<EOF
56763b97a967SRobert Watson#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
56773b97a967SRobert Watson# define externally_visible volatile
56783b97a967SRobert Watson#else
56793b97a967SRobert Watson# define externally_visible __attribute__((externally_visible)) volatile
56803b97a967SRobert Watson#endif
56813b97a967SRobert Watsonexternally_visible const char * MAGIC_EXE = "$magic_exe";
56823b97a967SRobert Watsonconst char * LIB_PATH_VARNAME = "$shlibpath_var";
56833b97a967SRobert WatsonEOF
56843b97a967SRobert Watson
56853b97a967SRobert Watson	    if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
56863b97a967SRobert Watson              func_to_host_path "$temp_rpath"
56873b97a967SRobert Watson	      cat <<EOF
56883b97a967SRobert Watsonconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
56893b97a967SRobert WatsonEOF
56903b97a967SRobert Watson	    else
56913b97a967SRobert Watson	      cat <<"EOF"
56923b97a967SRobert Watsonconst char * LIB_PATH_VALUE   = "";
56933b97a967SRobert WatsonEOF
56943b97a967SRobert Watson	    fi
56953b97a967SRobert Watson
56963b97a967SRobert Watson	    if test -n "$dllsearchpath"; then
56973b97a967SRobert Watson              func_to_host_path "$dllsearchpath:"
56983b97a967SRobert Watson	      cat <<EOF
56993b97a967SRobert Watsonconst char * EXE_PATH_VARNAME = "PATH";
57003b97a967SRobert Watsonconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
57013b97a967SRobert WatsonEOF
57023b97a967SRobert Watson	    else
5703eb336521SRobert Watson	      cat <<"EOF"
57043b97a967SRobert Watsonconst char * EXE_PATH_VARNAME = "";
57053b97a967SRobert Watsonconst char * EXE_PATH_VALUE   = "";
57063b97a967SRobert WatsonEOF
57073b97a967SRobert Watson	    fi
57083b97a967SRobert Watson
57093b97a967SRobert Watson	    if test yes = "$fast_install"; then
57103b97a967SRobert Watson	      cat <<EOF
57113b97a967SRobert Watsonconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
57123b97a967SRobert WatsonEOF
57133b97a967SRobert Watson	    else
57143b97a967SRobert Watson	      cat <<EOF
57153b97a967SRobert Watsonconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
57163b97a967SRobert WatsonEOF
57173b97a967SRobert Watson	    fi
57183b97a967SRobert Watson
57193b97a967SRobert Watson
57203b97a967SRobert Watson	    cat <<"EOF"
57213b97a967SRobert Watson
57223b97a967SRobert Watson#define LTWRAPPER_OPTION_PREFIX         "--lt-"
57233b97a967SRobert Watson
57243b97a967SRobert Watsonstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
57253b97a967SRobert Watsonstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
57263b97a967SRobert Watsonstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
57273b97a967SRobert Watson
57283b97a967SRobert Watsonint
57293b97a967SRobert Watsonmain (int argc, char *argv[])
57303b97a967SRobert Watson{
57313b97a967SRobert Watson  char **newargz;
57323b97a967SRobert Watson  int  newargc;
57333b97a967SRobert Watson  char *tmp_pathspec;
57343b97a967SRobert Watson  char *actual_cwrapper_path;
57353b97a967SRobert Watson  char *actual_cwrapper_name;
57363b97a967SRobert Watson  char *target_name;
57373b97a967SRobert Watson  char *lt_argv_zero;
57383b97a967SRobert Watson  int rval = 127;
57393b97a967SRobert Watson
57403b97a967SRobert Watson  int i;
57413b97a967SRobert Watson
57423b97a967SRobert Watson  program_name = (char *) xstrdup (base_name (argv[0]));
57433b97a967SRobert Watson  newargz = XMALLOC (char *, (size_t) argc + 1);
57443b97a967SRobert Watson
57453b97a967SRobert Watson  /* very simple arg parsing; don't want to rely on getopt
57463b97a967SRobert Watson   * also, copy all non cwrapper options to newargz, except
57473b97a967SRobert Watson   * argz[0], which is handled differently
57483b97a967SRobert Watson   */
57493b97a967SRobert Watson  newargc=0;
57503b97a967SRobert Watson  for (i = 1; i < argc; i++)
57513b97a967SRobert Watson    {
57523b97a967SRobert Watson      if (STREQ (argv[i], dumpscript_opt))
57533b97a967SRobert Watson	{
57543b97a967SRobert WatsonEOF
57553b97a967SRobert Watson	    case $host in
57563b97a967SRobert Watson	      *mingw* | *cygwin* )
57573b97a967SRobert Watson		# make stdout use "unix" line endings
57583b97a967SRobert Watson		echo "          setmode(1,_O_BINARY);"
57593b97a967SRobert Watson		;;
57603b97a967SRobert Watson	      esac
57613b97a967SRobert Watson
57623b97a967SRobert Watson	    cat <<"EOF"
57633b97a967SRobert Watson	  lt_dump_script (stdout);
57643b97a967SRobert Watson	  return 0;
57653b97a967SRobert Watson	}
57663b97a967SRobert Watson      if (STREQ (argv[i], debug_opt))
57673b97a967SRobert Watson	{
57683b97a967SRobert Watson          lt_debug = 1;
57693b97a967SRobert Watson          continue;
57703b97a967SRobert Watson	}
57713b97a967SRobert Watson      if (STREQ (argv[i], ltwrapper_option_prefix))
57723b97a967SRobert Watson        {
57733b97a967SRobert Watson          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
57743b97a967SRobert Watson             namespace, but it is not one of the ones we know about and
57753b97a967SRobert Watson             have already dealt with, above (inluding dump-script), then
57763b97a967SRobert Watson             report an error. Otherwise, targets might begin to believe
57773b97a967SRobert Watson             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
57783b97a967SRobert Watson             namespace. The first time any user complains about this, we'll
57793b97a967SRobert Watson             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
57803b97a967SRobert Watson             or a configure.ac-settable value.
57813b97a967SRobert Watson           */
57823b97a967SRobert Watson          lt_fatal (__FILE__, __LINE__,
57833b97a967SRobert Watson		    "unrecognized %s option: '%s'",
57843b97a967SRobert Watson                    ltwrapper_option_prefix, argv[i]);
57853b97a967SRobert Watson        }
57863b97a967SRobert Watson      /* otherwise ... */
57873b97a967SRobert Watson      newargz[++newargc] = xstrdup (argv[i]);
57883b97a967SRobert Watson    }
57893b97a967SRobert Watson  newargz[++newargc] = NULL;
57903b97a967SRobert Watson
57913b97a967SRobert WatsonEOF
57923b97a967SRobert Watson	    cat <<EOF
57933b97a967SRobert Watson  /* The GNU banner must be the first non-error debug message */
57943b97a967SRobert Watson  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
57953b97a967SRobert WatsonEOF
57963b97a967SRobert Watson	    cat <<"EOF"
57973b97a967SRobert Watson  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
57983b97a967SRobert Watson  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
57993b97a967SRobert Watson
58003b97a967SRobert Watson  tmp_pathspec = find_executable (argv[0]);
58013b97a967SRobert Watson  if (tmp_pathspec == NULL)
58023b97a967SRobert Watson    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
58033b97a967SRobert Watson  lt_debugprintf (__FILE__, __LINE__,
58043b97a967SRobert Watson                  "(main) found exe (before symlink chase) at: %s\n",
58053b97a967SRobert Watson		  tmp_pathspec);
58063b97a967SRobert Watson
58073b97a967SRobert Watson  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
58083b97a967SRobert Watson  lt_debugprintf (__FILE__, __LINE__,
58093b97a967SRobert Watson                  "(main) found exe (after symlink chase) at: %s\n",
58103b97a967SRobert Watson		  actual_cwrapper_path);
58113b97a967SRobert Watson  XFREE (tmp_pathspec);
58123b97a967SRobert Watson
58133b97a967SRobert Watson  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
58143b97a967SRobert Watson  strendzap (actual_cwrapper_path, actual_cwrapper_name);
58153b97a967SRobert Watson
58163b97a967SRobert Watson  /* wrapper name transforms */
58173b97a967SRobert Watson  strendzap (actual_cwrapper_name, ".exe");
58183b97a967SRobert Watson  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
58193b97a967SRobert Watson  XFREE (actual_cwrapper_name);
58203b97a967SRobert Watson  actual_cwrapper_name = tmp_pathspec;
58213b97a967SRobert Watson  tmp_pathspec = 0;
58223b97a967SRobert Watson
58233b97a967SRobert Watson  /* target_name transforms -- use actual target program name; might have lt- prefix */
58243b97a967SRobert Watson  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
58253b97a967SRobert Watson  strendzap (target_name, ".exe");
58263b97a967SRobert Watson  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
58273b97a967SRobert Watson  XFREE (target_name);
58283b97a967SRobert Watson  target_name = tmp_pathspec;
58293b97a967SRobert Watson  tmp_pathspec = 0;
58303b97a967SRobert Watson
58313b97a967SRobert Watson  lt_debugprintf (__FILE__, __LINE__,
58323b97a967SRobert Watson		  "(main) libtool target name: %s\n",
58333b97a967SRobert Watson		  target_name);
58343b97a967SRobert WatsonEOF
58353b97a967SRobert Watson
58363b97a967SRobert Watson	    cat <<EOF
58373b97a967SRobert Watson  newargz[0] =
58383b97a967SRobert Watson    XMALLOC (char, (strlen (actual_cwrapper_path) +
58393b97a967SRobert Watson		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
58403b97a967SRobert Watson  strcpy (newargz[0], actual_cwrapper_path);
58413b97a967SRobert Watson  strcat (newargz[0], "$objdir");
58423b97a967SRobert Watson  strcat (newargz[0], "/");
58433b97a967SRobert WatsonEOF
58443b97a967SRobert Watson
58453b97a967SRobert Watson	    cat <<"EOF"
58463b97a967SRobert Watson  /* stop here, and copy so we don't have to do this twice */
58473b97a967SRobert Watson  tmp_pathspec = xstrdup (newargz[0]);
58483b97a967SRobert Watson
58493b97a967SRobert Watson  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
58503b97a967SRobert Watson  strcat (newargz[0], actual_cwrapper_name);
58513b97a967SRobert Watson
58523b97a967SRobert Watson  /* DO want the lt- prefix here if it exists, so use target_name */
58533b97a967SRobert Watson  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
58543b97a967SRobert Watson  XFREE (tmp_pathspec);
58553b97a967SRobert Watson  tmp_pathspec = NULL;
58563b97a967SRobert WatsonEOF
58573b97a967SRobert Watson
58583b97a967SRobert Watson	    case $host_os in
58593b97a967SRobert Watson	      mingw*)
58603b97a967SRobert Watson	    cat <<"EOF"
58613b97a967SRobert Watson  {
58623b97a967SRobert Watson    char* p;
58633b97a967SRobert Watson    while ((p = strchr (newargz[0], '\\')) != NULL)
58643b97a967SRobert Watson      {
58653b97a967SRobert Watson	*p = '/';
58663b97a967SRobert Watson      }
58673b97a967SRobert Watson    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
58683b97a967SRobert Watson      {
58693b97a967SRobert Watson	*p = '/';
58703b97a967SRobert Watson      }
58713b97a967SRobert Watson  }
58723b97a967SRobert WatsonEOF
58733b97a967SRobert Watson	    ;;
58743b97a967SRobert Watson	    esac
58753b97a967SRobert Watson
58763b97a967SRobert Watson	    cat <<"EOF"
58773b97a967SRobert Watson  XFREE (target_name);
58783b97a967SRobert Watson  XFREE (actual_cwrapper_path);
58793b97a967SRobert Watson  XFREE (actual_cwrapper_name);
58803b97a967SRobert Watson
58813b97a967SRobert Watson  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
58823b97a967SRobert Watson  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
58833b97a967SRobert Watson  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
58843b97a967SRobert Watson     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
58853b97a967SRobert Watson     because on Windows, both *_VARNAMEs are PATH but uninstalled
58863b97a967SRobert Watson     libraries must come first. */
58873b97a967SRobert Watson  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
58883b97a967SRobert Watson  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
58893b97a967SRobert Watson
58903b97a967SRobert Watson  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
58913b97a967SRobert Watson		  nonnull (lt_argv_zero));
58923b97a967SRobert Watson  for (i = 0; i < newargc; i++)
58933b97a967SRobert Watson    {
58943b97a967SRobert Watson      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
58953b97a967SRobert Watson		      i, nonnull (newargz[i]));
58963b97a967SRobert Watson    }
58973b97a967SRobert Watson
58983b97a967SRobert WatsonEOF
58993b97a967SRobert Watson
59003b97a967SRobert Watson	    case $host_os in
59013b97a967SRobert Watson	      mingw*)
59023b97a967SRobert Watson		cat <<"EOF"
59033b97a967SRobert Watson  /* execv doesn't actually work on mingw as expected on unix */
59043b97a967SRobert Watson  newargz = prepare_spawn (newargz);
59053b97a967SRobert Watson  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
59063b97a967SRobert Watson  if (rval == -1)
59073b97a967SRobert Watson    {
59083b97a967SRobert Watson      /* failed to start process */
59093b97a967SRobert Watson      lt_debugprintf (__FILE__, __LINE__,
59103b97a967SRobert Watson		      "(main) failed to launch target \"%s\": %s\n",
59113b97a967SRobert Watson		      lt_argv_zero, nonnull (strerror (errno)));
59123b97a967SRobert Watson      return 127;
59133b97a967SRobert Watson    }
59143b97a967SRobert Watson  return rval;
59153b97a967SRobert WatsonEOF
59163b97a967SRobert Watson		;;
59173b97a967SRobert Watson	      *)
59183b97a967SRobert Watson		cat <<"EOF"
59193b97a967SRobert Watson  execv (lt_argv_zero, newargz);
59203b97a967SRobert Watson  return rval; /* =127, but avoids unused variable warning */
59213b97a967SRobert WatsonEOF
59223b97a967SRobert Watson		;;
59233b97a967SRobert Watson	    esac
59243b97a967SRobert Watson
59253b97a967SRobert Watson	    cat <<"EOF"
59263b97a967SRobert Watson}
59273b97a967SRobert Watson
59283b97a967SRobert Watsonvoid *
59293b97a967SRobert Watsonxmalloc (size_t num)
59303b97a967SRobert Watson{
59313b97a967SRobert Watson  void *p = (void *) malloc (num);
59323b97a967SRobert Watson  if (!p)
59333b97a967SRobert Watson    lt_fatal (__FILE__, __LINE__, "memory exhausted");
59343b97a967SRobert Watson
59353b97a967SRobert Watson  return p;
59363b97a967SRobert Watson}
59373b97a967SRobert Watson
59383b97a967SRobert Watsonchar *
59393b97a967SRobert Watsonxstrdup (const char *string)
59403b97a967SRobert Watson{
59413b97a967SRobert Watson  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
59423b97a967SRobert Watson			  string) : NULL;
59433b97a967SRobert Watson}
59443b97a967SRobert Watson
59453b97a967SRobert Watsonconst char *
59463b97a967SRobert Watsonbase_name (const char *name)
59473b97a967SRobert Watson{
59483b97a967SRobert Watson  const char *base;
59493b97a967SRobert Watson
59503b97a967SRobert Watson#if defined HAVE_DOS_BASED_FILE_SYSTEM
59513b97a967SRobert Watson  /* Skip over the disk name in MSDOS pathnames. */
59523b97a967SRobert Watson  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
59533b97a967SRobert Watson    name += 2;
59543b97a967SRobert Watson#endif
59553b97a967SRobert Watson
59563b97a967SRobert Watson  for (base = name; *name; name++)
59573b97a967SRobert Watson    if (IS_DIR_SEPARATOR (*name))
59583b97a967SRobert Watson      base = name + 1;
59593b97a967SRobert Watson  return base;
59603b97a967SRobert Watson}
59613b97a967SRobert Watson
59623b97a967SRobert Watsonint
59633b97a967SRobert Watsoncheck_executable (const char *path)
59643b97a967SRobert Watson{
59653b97a967SRobert Watson  struct stat st;
59663b97a967SRobert Watson
59673b97a967SRobert Watson  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
59683b97a967SRobert Watson                  nonempty (path));
59693b97a967SRobert Watson  if ((!path) || (!*path))
59703b97a967SRobert Watson    return 0;
59713b97a967SRobert Watson
59723b97a967SRobert Watson  if ((stat (path, &st) >= 0)
59733b97a967SRobert Watson      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
59743b97a967SRobert Watson    return 1;
59753b97a967SRobert Watson  else
59763b97a967SRobert Watson    return 0;
59773b97a967SRobert Watson}
59783b97a967SRobert Watson
59793b97a967SRobert Watsonint
59803b97a967SRobert Watsonmake_executable (const char *path)
59813b97a967SRobert Watson{
59823b97a967SRobert Watson  int rval = 0;
59833b97a967SRobert Watson  struct stat st;
59843b97a967SRobert Watson
59853b97a967SRobert Watson  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
59863b97a967SRobert Watson                  nonempty (path));
59873b97a967SRobert Watson  if ((!path) || (!*path))
59883b97a967SRobert Watson    return 0;
59893b97a967SRobert Watson
59903b97a967SRobert Watson  if (stat (path, &st) >= 0)
59913b97a967SRobert Watson    {
59923b97a967SRobert Watson      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
59933b97a967SRobert Watson    }
59943b97a967SRobert Watson  return rval;
59953b97a967SRobert Watson}
59963b97a967SRobert Watson
59973b97a967SRobert Watson/* Searches for the full path of the wrapper.  Returns
59983b97a967SRobert Watson   newly allocated full path name if found, NULL otherwise
59993b97a967SRobert Watson   Does not chase symlinks, even on platforms that support them.
60003b97a967SRobert Watson*/
60013b97a967SRobert Watsonchar *
60023b97a967SRobert Watsonfind_executable (const char *wrapper)
60033b97a967SRobert Watson{
60043b97a967SRobert Watson  int has_slash = 0;
60053b97a967SRobert Watson  const char *p;
60063b97a967SRobert Watson  const char *p_next;
60073b97a967SRobert Watson  /* static buffer for getcwd */
60083b97a967SRobert Watson  char tmp[LT_PATHMAX + 1];
60093b97a967SRobert Watson  size_t tmp_len;
60103b97a967SRobert Watson  char *concat_name;
60113b97a967SRobert Watson
60123b97a967SRobert Watson  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
60133b97a967SRobert Watson                  nonempty (wrapper));
60143b97a967SRobert Watson
60153b97a967SRobert Watson  if ((wrapper == NULL) || (*wrapper == '\0'))
60163b97a967SRobert Watson    return NULL;
60173b97a967SRobert Watson
60183b97a967SRobert Watson  /* Absolute path? */
60193b97a967SRobert Watson#if defined HAVE_DOS_BASED_FILE_SYSTEM
60203b97a967SRobert Watson  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
60213b97a967SRobert Watson    {
60223b97a967SRobert Watson      concat_name = xstrdup (wrapper);
60233b97a967SRobert Watson      if (check_executable (concat_name))
60243b97a967SRobert Watson	return concat_name;
60253b97a967SRobert Watson      XFREE (concat_name);
60263b97a967SRobert Watson    }
60273b97a967SRobert Watson  else
60283b97a967SRobert Watson    {
60293b97a967SRobert Watson#endif
60303b97a967SRobert Watson      if (IS_DIR_SEPARATOR (wrapper[0]))
60313b97a967SRobert Watson	{
60323b97a967SRobert Watson	  concat_name = xstrdup (wrapper);
60333b97a967SRobert Watson	  if (check_executable (concat_name))
60343b97a967SRobert Watson	    return concat_name;
60353b97a967SRobert Watson	  XFREE (concat_name);
60363b97a967SRobert Watson	}
60373b97a967SRobert Watson#if defined HAVE_DOS_BASED_FILE_SYSTEM
60383b97a967SRobert Watson    }
60393b97a967SRobert Watson#endif
60403b97a967SRobert Watson
60413b97a967SRobert Watson  for (p = wrapper; *p; p++)
60423b97a967SRobert Watson    if (*p == '/')
60433b97a967SRobert Watson      {
60443b97a967SRobert Watson	has_slash = 1;
60453b97a967SRobert Watson	break;
60463b97a967SRobert Watson      }
60473b97a967SRobert Watson  if (!has_slash)
6048eb336521SRobert Watson    {
60493b97a967SRobert Watson      /* no slashes; search PATH */
6050eb336521SRobert Watson      const char *path = getenv ("PATH");
60513b97a967SRobert Watson      if (path != NULL)
60523b97a967SRobert Watson	{
60533b97a967SRobert Watson	  for (p = path; *p; p = p_next)
60543b97a967SRobert Watson	    {
60553b97a967SRobert Watson	      const char *q;
60563b97a967SRobert Watson	      size_t p_len;
60573b97a967SRobert Watson	      for (q = p; *q; q++)
60583b97a967SRobert Watson		if (IS_PATH_SEPARATOR (*q))
60593b97a967SRobert Watson		  break;
60603b97a967SRobert Watson	      p_len = (size_t) (q - p);
60613b97a967SRobert Watson	      p_next = (*q == '\0' ? q : q + 1);
60623b97a967SRobert Watson	      if (p_len == 0)
60633b97a967SRobert Watson		{
60643b97a967SRobert Watson		  /* empty path: current directory */
60653b97a967SRobert Watson		  if (getcwd (tmp, LT_PATHMAX) == NULL)
60663b97a967SRobert Watson		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
60673b97a967SRobert Watson                              nonnull (strerror (errno)));
60683b97a967SRobert Watson		  tmp_len = strlen (tmp);
60693b97a967SRobert Watson		  concat_name =
60703b97a967SRobert Watson		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
60713b97a967SRobert Watson		  memcpy (concat_name, tmp, tmp_len);
60723b97a967SRobert Watson		  concat_name[tmp_len] = '/';
60733b97a967SRobert Watson		  strcpy (concat_name + tmp_len + 1, wrapper);
60743b97a967SRobert Watson		}
60753b97a967SRobert Watson	      else
60763b97a967SRobert Watson		{
60773b97a967SRobert Watson		  concat_name =
60783b97a967SRobert Watson		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
60793b97a967SRobert Watson		  memcpy (concat_name, p, p_len);
60803b97a967SRobert Watson		  concat_name[p_len] = '/';
60813b97a967SRobert Watson		  strcpy (concat_name + p_len + 1, wrapper);
60823b97a967SRobert Watson		}
60833b97a967SRobert Watson	      if (check_executable (concat_name))
60843b97a967SRobert Watson		return concat_name;
60853b97a967SRobert Watson	      XFREE (concat_name);
60863b97a967SRobert Watson	    }
60873b97a967SRobert Watson	}
60883b97a967SRobert Watson      /* not found in PATH; assume curdir */
60893b97a967SRobert Watson    }
60903b97a967SRobert Watson  /* Relative path | not found in path: prepend cwd */
60913b97a967SRobert Watson  if (getcwd (tmp, LT_PATHMAX) == NULL)
60923b97a967SRobert Watson    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
60933b97a967SRobert Watson              nonnull (strerror (errno)));
60943b97a967SRobert Watson  tmp_len = strlen (tmp);
60953b97a967SRobert Watson  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
60963b97a967SRobert Watson  memcpy (concat_name, tmp, tmp_len);
60973b97a967SRobert Watson  concat_name[tmp_len] = '/';
60983b97a967SRobert Watson  strcpy (concat_name + tmp_len + 1, wrapper);
60993b97a967SRobert Watson
61003b97a967SRobert Watson  if (check_executable (concat_name))
61013b97a967SRobert Watson    return concat_name;
61023b97a967SRobert Watson  XFREE (concat_name);
61033b97a967SRobert Watson  return NULL;
61043b97a967SRobert Watson}
61053b97a967SRobert Watson
61063b97a967SRobert Watsonchar *
61073b97a967SRobert Watsonchase_symlinks (const char *pathspec)
61083b97a967SRobert Watson{
61093b97a967SRobert Watson#ifndef S_ISLNK
61103b97a967SRobert Watson  return xstrdup (pathspec);
61113b97a967SRobert Watson#else
61123b97a967SRobert Watson  char buf[LT_PATHMAX];
61133b97a967SRobert Watson  struct stat s;
61143b97a967SRobert Watson  char *tmp_pathspec = xstrdup (pathspec);
61153b97a967SRobert Watson  char *p;
61163b97a967SRobert Watson  int has_symlinks = 0;
61173b97a967SRobert Watson  while (strlen (tmp_pathspec) && !has_symlinks)
61183b97a967SRobert Watson    {
61193b97a967SRobert Watson      lt_debugprintf (__FILE__, __LINE__,
61203b97a967SRobert Watson		      "checking path component for symlinks: %s\n",
61213b97a967SRobert Watson		      tmp_pathspec);
61223b97a967SRobert Watson      if (lstat (tmp_pathspec, &s) == 0)
61233b97a967SRobert Watson	{
61243b97a967SRobert Watson	  if (S_ISLNK (s.st_mode) != 0)
61253b97a967SRobert Watson	    {
61263b97a967SRobert Watson	      has_symlinks = 1;
61273b97a967SRobert Watson	      break;
61283b97a967SRobert Watson	    }
61293b97a967SRobert Watson
61303b97a967SRobert Watson	  /* search backwards for last DIR_SEPARATOR */
61313b97a967SRobert Watson	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
61323b97a967SRobert Watson	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
61333b97a967SRobert Watson	    p--;
61343b97a967SRobert Watson	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
61353b97a967SRobert Watson	    {
61363b97a967SRobert Watson	      /* no more DIR_SEPARATORS left */
61373b97a967SRobert Watson	      break;
61383b97a967SRobert Watson	    }
61393b97a967SRobert Watson	  *p = '\0';
61403b97a967SRobert Watson	}
61413b97a967SRobert Watson      else
61423b97a967SRobert Watson	{
61433b97a967SRobert Watson	  lt_fatal (__FILE__, __LINE__,
61443b97a967SRobert Watson		    "error accessing file \"%s\": %s",
61453b97a967SRobert Watson		    tmp_pathspec, nonnull (strerror (errno)));
61463b97a967SRobert Watson	}
61473b97a967SRobert Watson    }
61483b97a967SRobert Watson  XFREE (tmp_pathspec);
61493b97a967SRobert Watson
61503b97a967SRobert Watson  if (!has_symlinks)
61513b97a967SRobert Watson    {
61523b97a967SRobert Watson      return xstrdup (pathspec);
61533b97a967SRobert Watson    }
61543b97a967SRobert Watson
61553b97a967SRobert Watson  tmp_pathspec = realpath (pathspec, buf);
61563b97a967SRobert Watson  if (tmp_pathspec == 0)
61573b97a967SRobert Watson    {
61583b97a967SRobert Watson      lt_fatal (__FILE__, __LINE__,
61593b97a967SRobert Watson		"could not follow symlinks for %s", pathspec);
61603b97a967SRobert Watson    }
61613b97a967SRobert Watson  return xstrdup (tmp_pathspec);
61623b97a967SRobert Watson#endif
61633b97a967SRobert Watson}
61643b97a967SRobert Watson
61653b97a967SRobert Watsonchar *
61663b97a967SRobert Watsonstrendzap (char *str, const char *pat)
61673b97a967SRobert Watson{
61683b97a967SRobert Watson  size_t len, patlen;
61693b97a967SRobert Watson
61703b97a967SRobert Watson  assert (str != NULL);
61713b97a967SRobert Watson  assert (pat != NULL);
61723b97a967SRobert Watson
61733b97a967SRobert Watson  len = strlen (str);
61743b97a967SRobert Watson  patlen = strlen (pat);
61753b97a967SRobert Watson
61763b97a967SRobert Watson  if (patlen <= len)
61773b97a967SRobert Watson    {
61783b97a967SRobert Watson      str += len - patlen;
61793b97a967SRobert Watson      if (STREQ (str, pat))
61803b97a967SRobert Watson	*str = '\0';
61813b97a967SRobert Watson    }
61823b97a967SRobert Watson  return str;
61833b97a967SRobert Watson}
61843b97a967SRobert Watson
61853b97a967SRobert Watsonvoid
61863b97a967SRobert Watsonlt_debugprintf (const char *file, int line, const char *fmt, ...)
61873b97a967SRobert Watson{
61883b97a967SRobert Watson  va_list args;
61893b97a967SRobert Watson  if (lt_debug)
61903b97a967SRobert Watson    {
61913b97a967SRobert Watson      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
61923b97a967SRobert Watson      va_start (args, fmt);
61933b97a967SRobert Watson      (void) vfprintf (stderr, fmt, args);
61943b97a967SRobert Watson      va_end (args);
61953b97a967SRobert Watson    }
61963b97a967SRobert Watson}
61973b97a967SRobert Watson
61983b97a967SRobert Watsonstatic void
61993b97a967SRobert Watsonlt_error_core (int exit_status, const char *file,
62003b97a967SRobert Watson	       int line, const char *mode,
62013b97a967SRobert Watson	       const char *message, va_list ap)
62023b97a967SRobert Watson{
62033b97a967SRobert Watson  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
62043b97a967SRobert Watson  vfprintf (stderr, message, ap);
62053b97a967SRobert Watson  fprintf (stderr, ".\n");
62063b97a967SRobert Watson
62073b97a967SRobert Watson  if (exit_status >= 0)
62083b97a967SRobert Watson    exit (exit_status);
62093b97a967SRobert Watson}
62103b97a967SRobert Watson
62113b97a967SRobert Watsonvoid
62123b97a967SRobert Watsonlt_fatal (const char *file, int line, const char *message, ...)
62133b97a967SRobert Watson{
62143b97a967SRobert Watson  va_list ap;
62153b97a967SRobert Watson  va_start (ap, message);
62163b97a967SRobert Watson  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
62173b97a967SRobert Watson  va_end (ap);
62183b97a967SRobert Watson}
62193b97a967SRobert Watson
62203b97a967SRobert Watsonstatic const char *
62213b97a967SRobert Watsonnonnull (const char *s)
62223b97a967SRobert Watson{
62233b97a967SRobert Watson  return s ? s : "(null)";
62243b97a967SRobert Watson}
62253b97a967SRobert Watson
62263b97a967SRobert Watsonstatic const char *
62273b97a967SRobert Watsonnonempty (const char *s)
62283b97a967SRobert Watson{
62293b97a967SRobert Watson  return (s && !*s) ? "(empty)" : nonnull (s);
62303b97a967SRobert Watson}
62313b97a967SRobert Watson
62323b97a967SRobert Watsonvoid
62333b97a967SRobert Watsonlt_setenv (const char *name, const char *value)
62343b97a967SRobert Watson{
62353b97a967SRobert Watson  lt_debugprintf (__FILE__, __LINE__,
62363b97a967SRobert Watson		  "(lt_setenv) setting '%s' to '%s'\n",
62373b97a967SRobert Watson                  nonnull (name), nonnull (value));
62383b97a967SRobert Watson  {
62393b97a967SRobert Watson#ifdef HAVE_SETENV
62403b97a967SRobert Watson    /* always make a copy, for consistency with !HAVE_SETENV */
62413b97a967SRobert Watson    char *str = xstrdup (value);
62423b97a967SRobert Watson    setenv (name, str, 1);
62433b97a967SRobert Watson#else
62443b97a967SRobert Watson    size_t len = strlen (name) + 1 + strlen (value) + 1;
62453b97a967SRobert Watson    char *str = XMALLOC (char, len);
62463b97a967SRobert Watson    sprintf (str, "%s=%s", name, value);
62473b97a967SRobert Watson    if (putenv (str) != EXIT_SUCCESS)
62483b97a967SRobert Watson      {
62493b97a967SRobert Watson        XFREE (str);
62503b97a967SRobert Watson      }
62513b97a967SRobert Watson#endif
62523b97a967SRobert Watson  }
62533b97a967SRobert Watson}
62543b97a967SRobert Watson
6255d9af45c4SRobert Watsonchar *
62563b97a967SRobert Watsonlt_extend_str (const char *orig_value, const char *add, int to_end)
62573b97a967SRobert Watson{
62583b97a967SRobert Watson  char *new_value;
6259eb336521SRobert Watson  if (orig_value && *orig_value)
62603b97a967SRobert Watson    {
62613b97a967SRobert Watson      size_t orig_value_len = strlen (orig_value);
62623b97a967SRobert Watson      size_t add_len = strlen (add);
62633b97a967SRobert Watson      new_value = XMALLOC (char, add_len + orig_value_len + 1);
62643b97a967SRobert Watson      if (to_end)
62653b97a967SRobert Watson        {
62663b97a967SRobert Watson          strcpy (new_value, orig_value);
62673b97a967SRobert Watson          strcpy (new_value + orig_value_len, add);
62683b97a967SRobert Watson        }
62693b97a967SRobert Watson      else
62703b97a967SRobert Watson        {
62713b97a967SRobert Watson          strcpy (new_value, add);
62723b97a967SRobert Watson          strcpy (new_value + add_len, orig_value);
62733b97a967SRobert Watson        }
62743b97a967SRobert Watson    }
62753b97a967SRobert Watson  else
62763b97a967SRobert Watson    {
62773b97a967SRobert Watson      new_value = xstrdup (add);
62783b97a967SRobert Watson    }
62793b97a967SRobert Watson  return new_value;
62803b97a967SRobert Watson}
62813b97a967SRobert Watson
62823b97a967SRobert Watsonvoid
62833b97a967SRobert Watsonlt_update_exe_path (const char *name, const char *value)
62843b97a967SRobert Watson{
62853b97a967SRobert Watson  lt_debugprintf (__FILE__, __LINE__,
62863b97a967SRobert Watson		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
62873b97a967SRobert Watson                  nonnull (name), nonnull (value));
62883b97a967SRobert Watson
62893b97a967SRobert Watson  if (name && *name && value && *value)
62903b97a967SRobert Watson    {
62913b97a967SRobert Watson      char *new_value = lt_extend_str (getenv (name), value, 0);
62923b97a967SRobert Watson      /* some systems can't cope with a ':'-terminated path #' */
62933b97a967SRobert Watson      size_t len = strlen (new_value);
62943b97a967SRobert Watson      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
62953b97a967SRobert Watson        {
62963b97a967SRobert Watson          new_value[--len] = '\0';
62973b97a967SRobert Watson        }
62983b97a967SRobert Watson      lt_setenv (name, new_value);
62993b97a967SRobert Watson      XFREE (new_value);
63003b97a967SRobert Watson    }
63013b97a967SRobert Watson}
63023b97a967SRobert Watson
63033b97a967SRobert Watsonvoid
63043b97a967SRobert Watsonlt_update_lib_path (const char *name, const char *value)
63053b97a967SRobert Watson{
63063b97a967SRobert Watson  lt_debugprintf (__FILE__, __LINE__,
63073b97a967SRobert Watson		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
63083b97a967SRobert Watson                  nonnull (name), nonnull (value));
63093b97a967SRobert Watson
63103b97a967SRobert Watson  if (name && *name && value && *value)
63113b97a967SRobert Watson    {
63123b97a967SRobert Watson      char *new_value = lt_extend_str (getenv (name), value, 0);
63133b97a967SRobert Watson      lt_setenv (name, new_value);
63143b97a967SRobert Watson      XFREE (new_value);
63153b97a967SRobert Watson    }
63163b97a967SRobert Watson}
63173b97a967SRobert Watson
63183b97a967SRobert WatsonEOF
63193b97a967SRobert Watson	    case $host_os in
63203b97a967SRobert Watson	      mingw*)
63213b97a967SRobert Watson		cat <<"EOF"
63223b97a967SRobert Watson
63233b97a967SRobert Watson/* Prepares an argument vector before calling spawn().
63243b97a967SRobert Watson   Note that spawn() does not by itself call the command interpreter
63253b97a967SRobert Watson     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
63263b97a967SRobert Watson      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
63273b97a967SRobert Watson         GetVersionEx(&v);
63283b97a967SRobert Watson         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
63293b97a967SRobert Watson      }) ? "cmd.exe" : "command.com").
63303b97a967SRobert Watson   Instead it simply concatenates the arguments, separated by ' ', and calls
63313b97a967SRobert Watson   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
63323b97a967SRobert Watson   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
63333b97a967SRobert Watson   special way:
63343b97a967SRobert Watson   - Space and tab are interpreted as delimiters. They are not treated as
63353b97a967SRobert Watson     delimiters if they are surrounded by double quotes: "...".
63363b97a967SRobert Watson   - Unescaped double quotes are removed from the input. Their only effect is
63373b97a967SRobert Watson     that within double quotes, space and tab are treated like normal
63383b97a967SRobert Watson     characters.
63393b97a967SRobert Watson   - Backslashes not followed by double quotes are not special.
63403b97a967SRobert Watson   - But 2*n+1 backslashes followed by a double quote become
63413b97a967SRobert Watson     n backslashes followed by a double quote (n >= 0):
63423b97a967SRobert Watson       \" -> "
63433b97a967SRobert Watson       \\\" -> \"
63443b97a967SRobert Watson       \\\\\" -> \\"
63453b97a967SRobert Watson */
63463b97a967SRobert Watson#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"
63473b97a967SRobert Watson#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"
63483b97a967SRobert Watsonchar **
63493b97a967SRobert Watsonprepare_spawn (char **argv)
63503b97a967SRobert Watson{
63513b97a967SRobert Watson  size_t argc;
63523b97a967SRobert Watson  char **new_argv;
63533b97a967SRobert Watson  size_t i;
63543b97a967SRobert Watson
63553b97a967SRobert Watson  /* Count number of arguments.  */
63563b97a967SRobert Watson  for (argc = 0; argv[argc] != NULL; argc++)
63573b97a967SRobert Watson    ;
63583b97a967SRobert Watson
63593b97a967SRobert Watson  /* Allocate new argument vector.  */
63603b97a967SRobert Watson  new_argv = XMALLOC (char *, argc + 1);
63613b97a967SRobert Watson
63623b97a967SRobert Watson  /* Put quoted arguments into the new argument vector.  */
63633b97a967SRobert Watson  for (i = 0; i < argc; i++)
63643b97a967SRobert Watson    {
63653b97a967SRobert Watson      const char *string = argv[i];
63663b97a967SRobert Watson
63673b97a967SRobert Watson      if (string[0] == '\0')
63683b97a967SRobert Watson	new_argv[i] = xstrdup ("\"\"");
63693b97a967SRobert Watson      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
63703b97a967SRobert Watson	{
63713b97a967SRobert Watson	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
63723b97a967SRobert Watson	  size_t length;
63733b97a967SRobert Watson	  unsigned int backslashes;
63743b97a967SRobert Watson	  const char *s;
63753b97a967SRobert Watson	  char *quoted_string;
63763b97a967SRobert Watson	  char *p;
63773b97a967SRobert Watson
63783b97a967SRobert Watson	  length = 0;
6379d9af45c4SRobert Watson	  backslashes = 0;
63803b97a967SRobert Watson	  if (quote_around)
63813b97a967SRobert Watson	    length++;
63823b97a967SRobert Watson	  for (s = string; *s != '\0'; s++)
63833b97a967SRobert Watson	    {
63843b97a967SRobert Watson	      char c = *s;
63853b97a967SRobert Watson	      if (c == '"')
63863b97a967SRobert Watson		length += backslashes + 1;
63873b97a967SRobert Watson	      length++;
63883b97a967SRobert Watson	      if (c == '\\')
63893b97a967SRobert Watson		backslashes++;
63903b97a967SRobert Watson	      else
63913b97a967SRobert Watson		backslashes = 0;
63923b97a967SRobert Watson	    }
63933b97a967SRobert Watson	  if (quote_around)
63943b97a967SRobert Watson	    length += backslashes + 1;
63953b97a967SRobert Watson
63963b97a967SRobert Watson	  quoted_string = XMALLOC (char, length + 1);
63973b97a967SRobert Watson
63983b97a967SRobert Watson	  p = quoted_string;
63993b97a967SRobert Watson	  backslashes = 0;
64003b97a967SRobert Watson	  if (quote_around)
64013b97a967SRobert Watson	    *p++ = '"';
64023b97a967SRobert Watson	  for (s = string; *s != '\0'; s++)
64033b97a967SRobert Watson	    {
64043b97a967SRobert Watson	      char c = *s;
64053b97a967SRobert Watson	      if (c == '"')
64063b97a967SRobert Watson		{
64073b97a967SRobert Watson		  unsigned int j;
64083b97a967SRobert Watson		  for (j = backslashes + 1; j > 0; j--)
64093b97a967SRobert Watson		    *p++ = '\\';
64103b97a967SRobert Watson		}
64113b97a967SRobert Watson	      *p++ = c;
6412d9af45c4SRobert Watson	      if (c == '\\')
64133b97a967SRobert Watson		backslashes++;
64143b97a967SRobert Watson	      else
64153b97a967SRobert Watson		backslashes = 0;
64163b97a967SRobert Watson	    }
64173b97a967SRobert Watson	  if (quote_around)
64183b97a967SRobert Watson	    {
64193b97a967SRobert Watson	      unsigned int j;
64203b97a967SRobert Watson	      for (j = backslashes; j > 0; j--)
64213b97a967SRobert Watson		*p++ = '\\';
64223b97a967SRobert Watson	      *p++ = '"';
64233b97a967SRobert Watson	    }
64243b97a967SRobert Watson	  *p = '\0';
64253b97a967SRobert Watson
64263b97a967SRobert Watson	  new_argv[i] = quoted_string;
64273b97a967SRobert Watson	}
64283b97a967SRobert Watson      else
64293b97a967SRobert Watson	new_argv[i] = (char *) string;
64303b97a967SRobert Watson    }
64313b97a967SRobert Watson  new_argv[argc] = NULL;
64323b97a967SRobert Watson
64333b97a967SRobert Watson  return new_argv;
64343b97a967SRobert Watson}
64353b97a967SRobert WatsonEOF
64363b97a967SRobert Watson		;;
64373b97a967SRobert Watson	    esac
64383b97a967SRobert Watson
64393b97a967SRobert Watson            cat <<"EOF"
64403b97a967SRobert Watsonvoid lt_dump_script (FILE* f)
64413b97a967SRobert Watson{
64423b97a967SRobert WatsonEOF
64433b97a967SRobert Watson	    func_emit_wrapper yes |
64443b97a967SRobert Watson	      $SED -n -e '
64453b97a967SRobert Watsons/^\(.\{79\}\)\(..*\)/\1\
64463b97a967SRobert Watson\2/
64473b97a967SRobert Watsonh
64483b97a967SRobert Watsons/\([\\"]\)/\\\1/g
64493b97a967SRobert Watsons/$/\\n/
64503b97a967SRobert Watsons/\([^\n]*\).*/  fputs ("\1", f);/p
64513b97a967SRobert Watsong
64523b97a967SRobert WatsonD'
64533b97a967SRobert Watson            cat <<"EOF"
64543b97a967SRobert Watson}
64553b97a967SRobert WatsonEOF
64563b97a967SRobert Watson}
64573b97a967SRobert Watson# end: func_emit_cwrapperexe_src
64583b97a967SRobert Watson
64593b97a967SRobert Watson# func_win32_import_lib_p ARG
64603b97a967SRobert Watson# True if ARG is an import lib, as indicated by $file_magic_cmd
64613b97a967SRobert Watsonfunc_win32_import_lib_p ()
64623b97a967SRobert Watson{
64633b97a967SRobert Watson    $debug_cmd
64643b97a967SRobert Watson
64653b97a967SRobert Watson    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
64663b97a967SRobert Watson    *import*) : ;;
64673b97a967SRobert Watson    *) false ;;
64683b97a967SRobert Watson    esac
64693b97a967SRobert Watson}
6470eb336521SRobert Watson
64713b97a967SRobert Watson# func_suncc_cstd_abi
64723b97a967SRobert Watson# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
64733b97a967SRobert Watson# Several compiler flags select an ABI that is incompatible with the
6474eb336521SRobert Watson# Cstd library. Avoid specifying it if any are in CXXFLAGS.
64753b97a967SRobert Watsonfunc_suncc_cstd_abi ()
64763b97a967SRobert Watson{
64773b97a967SRobert Watson    $debug_cmd
64783b97a967SRobert Watson
64793b97a967SRobert Watson    case " $compile_command " in
64803b97a967SRobert Watson    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
64813b97a967SRobert Watson      suncc_use_cstd_abi=no
64823b97a967SRobert Watson      ;;
64833b97a967SRobert Watson    *)
64843b97a967SRobert Watson      suncc_use_cstd_abi=yes
64853b97a967SRobert Watson      ;;
64863b97a967SRobert Watson    esac
64873b97a967SRobert Watson}
64883b97a967SRobert Watson
64893b97a967SRobert Watson# func_mode_link arg...
64903b97a967SRobert Watsonfunc_mode_link ()
64913b97a967SRobert Watson{
64923b97a967SRobert Watson    $debug_cmd
64933b97a967SRobert Watson
64943b97a967SRobert Watson    case $host in
64953b97a967SRobert Watson    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
64963b97a967SRobert Watson      # It is impossible to link a dll without this setting, and
64973b97a967SRobert Watson      # we shouldn't force the makefile maintainer to figure out
64983b97a967SRobert Watson      # what system we are compiling for in order to pass an extra
64993b97a967SRobert Watson      # flag for every libtool invocation.
65003b97a967SRobert Watson      # allow_undefined=no
65013b97a967SRobert Watson
65023b97a967SRobert Watson      # FIXME: Unfortunately, there are problems with the above when trying
65033b97a967SRobert Watson      # to make a dll that has undefined symbols, in which case not
65043b97a967SRobert Watson      # even a static library is built.  For now, we need to specify
65053b97a967SRobert Watson      # -no-undefined on the libtool link line when we can be certain
65063b97a967SRobert Watson      # that all symbols are satisfied, otherwise we get a static library.
65073b97a967SRobert Watson      allow_undefined=yes
65083b97a967SRobert Watson      ;;
65093b97a967SRobert Watson    *)
65103b97a967SRobert Watson      allow_undefined=yes
65113b97a967SRobert Watson      ;;
65123b97a967SRobert Watson    esac
65133b97a967SRobert Watson    libtool_args=$nonopt
65143b97a967SRobert Watson    base_compile="$nonopt $@"
65153b97a967SRobert Watson    compile_command=$nonopt
65163b97a967SRobert Watson    finalize_command=$nonopt
65173b97a967SRobert Watson
65183b97a967SRobert Watson    compile_rpath=
65193b97a967SRobert Watson    finalize_rpath=
65203b97a967SRobert Watson    compile_shlibpath=
65213b97a967SRobert Watson    finalize_shlibpath=
65223b97a967SRobert Watson    convenience=
65233b97a967SRobert Watson    old_convenience=
65243b97a967SRobert Watson    deplibs=
65253b97a967SRobert Watson    old_deplibs=
65263b97a967SRobert Watson    compiler_flags=
65273b97a967SRobert Watson    linker_flags=
65283b97a967SRobert Watson    dllsearchpath=
65293b97a967SRobert Watson    lib_search_path=`pwd`
65303b97a967SRobert Watson    inst_prefix_dir=
65313b97a967SRobert Watson    new_inherited_linker_flags=
65323b97a967SRobert Watson
65333b97a967SRobert Watson    avoid_version=no
65343b97a967SRobert Watson    bindir=
65353b97a967SRobert Watson    dlfiles=
65363b97a967SRobert Watson    dlprefiles=
6537eb336521SRobert Watson    dlself=no
6538eb336521SRobert Watson    export_dynamic=no
6539eb336521SRobert Watson    export_symbols=
6540eb336521SRobert Watson    export_symbols_regex=
6541eb336521SRobert Watson    generated=
6542eb336521SRobert Watson    libobjs=
65433b97a967SRobert Watson    ltlibs=
65443b97a967SRobert Watson    module=no
65453b97a967SRobert Watson    no_install=no
65463b97a967SRobert Watson    objs=
65473b97a967SRobert Watson    os2dllname=
65483b97a967SRobert Watson    non_pic_objects=
65493b97a967SRobert Watson    precious_files_regex=
65503b97a967SRobert Watson    prefer_static_libs=no
65513b97a967SRobert Watson    preload=false
65523b97a967SRobert Watson    prev=
65533b97a967SRobert Watson    prevarg=
65543b97a967SRobert Watson    release=
65553b97a967SRobert Watson    rpath=
65563b97a967SRobert Watson    xrpath=
65573b97a967SRobert Watson    perm_rpath=
65583b97a967SRobert Watson    temp_rpath=
65593b97a967SRobert Watson    thread_safe=no
65603b97a967SRobert Watson    vinfo=
65613b97a967SRobert Watson    vinfo_number=no
65623b97a967SRobert Watson    weak_libs=
65633b97a967SRobert Watson    single_module=$wl-single_module
65643b97a967SRobert Watson    func_infer_tag $base_compile
65653b97a967SRobert Watson
65663b97a967SRobert Watson    # We need to know -static, to get the right output filenames.
65673b97a967SRobert Watson    for arg
65683b97a967SRobert Watson    do
65693b97a967SRobert Watson      case $arg in
65703b97a967SRobert Watson      -shared)
65713b97a967SRobert Watson	test yes != "$build_libtool_libs" \
65723b97a967SRobert Watson	  && func_fatal_configuration "cannot build a shared library"
65733b97a967SRobert Watson	build_old_libs=no
65743b97a967SRobert Watson	break
65753b97a967SRobert Watson	;;
65763b97a967SRobert Watson      -all-static | -static | -static-libtool-libs)
65773b97a967SRobert Watson	case $arg in
65783b97a967SRobert Watson	-all-static)
65793b97a967SRobert Watson	  if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
65803b97a967SRobert Watson	    func_warning "complete static linking is impossible in this configuration"
65813b97a967SRobert Watson	  fi
65823b97a967SRobert Watson	  if test -n "$link_static_flag"; then
65833b97a967SRobert Watson	    dlopen_self=$dlopen_self_static
65843b97a967SRobert Watson	  fi
65853b97a967SRobert Watson	  prefer_static_libs=yes
65863b97a967SRobert Watson	  ;;
65873b97a967SRobert Watson	-static)
65883b97a967SRobert Watson	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
65893b97a967SRobert Watson	    dlopen_self=$dlopen_self_static
65903b97a967SRobert Watson	  fi
65913b97a967SRobert Watson	  prefer_static_libs=built
65923b97a967SRobert Watson	  ;;
65933b97a967SRobert Watson	-static-libtool-libs)
65943b97a967SRobert Watson	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
65953b97a967SRobert Watson	    dlopen_self=$dlopen_self_static
65963b97a967SRobert Watson	  fi
65973b97a967SRobert Watson	  prefer_static_libs=yes
65983b97a967SRobert Watson	  ;;
65993b97a967SRobert Watson	esac
66003b97a967SRobert Watson	build_libtool_libs=no
66013b97a967SRobert Watson	build_old_libs=yes
66023b97a967SRobert Watson	break
66033b97a967SRobert Watson	;;
66043b97a967SRobert Watson      esac
66053b97a967SRobert Watson    done
66063b97a967SRobert Watson
66073b97a967SRobert Watson    # See if our shared archives depend on static archives.
66083b97a967SRobert Watson    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
66093b97a967SRobert Watson
66103b97a967SRobert Watson    # Go through the arguments, transforming them on the way.
66113b97a967SRobert Watson    while test "$#" -gt 0; do
66123b97a967SRobert Watson      arg=$1
66133b97a967SRobert Watson      shift
66143b97a967SRobert Watson      func_quote_for_eval "$arg"
66153b97a967SRobert Watson      qarg=$func_quote_for_eval_unquoted_result
66163b97a967SRobert Watson      func_append libtool_args " $func_quote_for_eval_result"
66173b97a967SRobert Watson
66183b97a967SRobert Watson      # If the previous option needs an argument, assign it.
66193b97a967SRobert Watson      if test -n "$prev"; then
66203b97a967SRobert Watson	case $prev in
66213b97a967SRobert Watson	output)
66223b97a967SRobert Watson	  func_append compile_command " @OUTPUT@"
66233b97a967SRobert Watson	  func_append finalize_command " @OUTPUT@"
66243b97a967SRobert Watson	  ;;
66253b97a967SRobert Watson	esac
66263b97a967SRobert Watson
66273b97a967SRobert Watson	case $prev in
66283b97a967SRobert Watson	bindir)
66293b97a967SRobert Watson	  bindir=$arg
66303b97a967SRobert Watson	  prev=
66313b97a967SRobert Watson	  continue
6632d9af45c4SRobert Watson	  ;;
6633d9af45c4SRobert Watson	dlfiles|dlprefiles)
6634d9af45c4SRobert Watson	  $preload || {
6635d9af45c4SRobert Watson	    # Add the symbol object into the linking commands.
6636d9af45c4SRobert Watson	    func_append compile_command " @SYMFILE@"
6637d9af45c4SRobert Watson	    func_append finalize_command " @SYMFILE@"
6638d9af45c4SRobert Watson	    preload=:
6639d9af45c4SRobert Watson	  }
6640d9af45c4SRobert Watson	  case $arg in
6641d9af45c4SRobert Watson	  *.la | *.lo) ;;  # We handle these cases below.
66423b97a967SRobert Watson	  force)
66433b97a967SRobert Watson	    if test no = "$dlself"; then
66443b97a967SRobert Watson	      dlself=needless
66453b97a967SRobert Watson	      export_dynamic=yes
66463b97a967SRobert Watson	    fi
66473b97a967SRobert Watson	    prev=
66483b97a967SRobert Watson	    continue
66493b97a967SRobert Watson	    ;;
66503b97a967SRobert Watson	  self)
66513b97a967SRobert Watson	    if test dlprefiles = "$prev"; then
66523b97a967SRobert Watson	      dlself=yes
66533b97a967SRobert Watson	    elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
66543b97a967SRobert Watson	      dlself=yes
66553b97a967SRobert Watson	    else
66563b97a967SRobert Watson	      dlself=needless
66573b97a967SRobert Watson	      export_dynamic=yes
66583b97a967SRobert Watson	    fi
66593b97a967SRobert Watson	    prev=
66603b97a967SRobert Watson	    continue
66613b97a967SRobert Watson	    ;;
66623b97a967SRobert Watson	  *)
66633b97a967SRobert Watson	    if test dlfiles = "$prev"; then
66643b97a967SRobert Watson	      func_append dlfiles " $arg"
66653b97a967SRobert Watson	    else
66663b97a967SRobert Watson	      func_append dlprefiles " $arg"
66673b97a967SRobert Watson	    fi
66683b97a967SRobert Watson	    prev=
66693b97a967SRobert Watson	    continue
66703b97a967SRobert Watson	    ;;
66713b97a967SRobert Watson	  esac
66723b97a967SRobert Watson	  ;;
66733b97a967SRobert Watson	expsyms)
6674d9af45c4SRobert Watson	  export_symbols=$arg
6675d9af45c4SRobert Watson	  test -f "$arg" \
66763b97a967SRobert Watson	    || func_fatal_error "symbol file '$arg' does not exist"
66773b97a967SRobert Watson	  prev=
66783b97a967SRobert Watson	  continue
66793b97a967SRobert Watson	  ;;
66803b97a967SRobert Watson	expsyms_regex)
66813b97a967SRobert Watson	  export_symbols_regex=$arg
66823b97a967SRobert Watson	  prev=
66833b97a967SRobert Watson	  continue
66843b97a967SRobert Watson	  ;;
66853b97a967SRobert Watson	framework)
66863b97a967SRobert Watson	  case $host in
66873b97a967SRobert Watson	    *-*-darwin*)
66883b97a967SRobert Watson	      case "$deplibs " in
66893b97a967SRobert Watson		*" $qarg.ltframework "*) ;;
66903b97a967SRobert Watson		*) func_append deplibs " $qarg.ltframework" # this is fixed later
66913b97a967SRobert Watson		   ;;
66923b97a967SRobert Watson	      esac
66933b97a967SRobert Watson	      ;;
66943b97a967SRobert Watson	  esac
66953b97a967SRobert Watson	  prev=
66963b97a967SRobert Watson	  continue
66973b97a967SRobert Watson	  ;;
66983b97a967SRobert Watson	inst_prefix)
66993b97a967SRobert Watson	  inst_prefix_dir=$arg
67003b97a967SRobert Watson	  prev=
67013b97a967SRobert Watson	  continue
67023b97a967SRobert Watson	  ;;
67033b97a967SRobert Watson	mllvm)
67043b97a967SRobert Watson	  # Clang does not use LLVM to link, so we can simply discard any
67053b97a967SRobert Watson	  # '-mllvm $arg' options when doing the link step.
67063b97a967SRobert Watson	  prev=
67073b97a967SRobert Watson	  continue
67083b97a967SRobert Watson	  ;;
67093b97a967SRobert Watson	objectlist)
67103b97a967SRobert Watson	  if test -f "$arg"; then
67113b97a967SRobert Watson	    save_arg=$arg
67123b97a967SRobert Watson	    moreargs=
67133b97a967SRobert Watson	    for fil in `cat "$save_arg"`
67143b97a967SRobert Watson	    do
67153b97a967SRobert Watson#	      func_append moreargs " $fil"
67163b97a967SRobert Watson	      arg=$fil
67173b97a967SRobert Watson	      # A libtool-controlled object.
67183b97a967SRobert Watson
67193b97a967SRobert Watson	      # Check to see that this really is a libtool object.
67203b97a967SRobert Watson	      if func_lalib_unsafe_p "$arg"; then
67213b97a967SRobert Watson		pic_object=
67223b97a967SRobert Watson		non_pic_object=
67233b97a967SRobert Watson
67243b97a967SRobert Watson		# Read the .lo file
67253b97a967SRobert Watson		func_source "$arg"
67263b97a967SRobert Watson
67273b97a967SRobert Watson		if test -z "$pic_object" ||
67283b97a967SRobert Watson		   test -z "$non_pic_object" ||
67293b97a967SRobert Watson		   test none = "$pic_object" &&
67303b97a967SRobert Watson		   test none = "$non_pic_object"; then
67313b97a967SRobert Watson		  func_fatal_error "cannot find name of object for '$arg'"
67323b97a967SRobert Watson		fi
67333b97a967SRobert Watson
67343b97a967SRobert Watson		# Extract subdirectory from the argument.
67353b97a967SRobert Watson		func_dirname "$arg" "/" ""
67363b97a967SRobert Watson		xdir=$func_dirname_result
67373b97a967SRobert Watson
67383b97a967SRobert Watson		if test none != "$pic_object"; then
67393b97a967SRobert Watson		  # Prepend the subdirectory the object is found in.
67403b97a967SRobert Watson		  pic_object=$xdir$pic_object
67413b97a967SRobert Watson
67423b97a967SRobert Watson		  if test dlfiles = "$prev"; then
67433b97a967SRobert Watson		    if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
67443b97a967SRobert Watson		      func_append dlfiles " $pic_object"
67453b97a967SRobert Watson		      prev=
67463b97a967SRobert Watson		      continue
67473b97a967SRobert Watson		    else
67483b97a967SRobert Watson		      # If libtool objects are unsupported, then we need to preload.
67493b97a967SRobert Watson		      prev=dlprefiles
67503b97a967SRobert Watson		    fi
67513b97a967SRobert Watson		  fi
67523b97a967SRobert Watson
67533b97a967SRobert Watson		  # CHECK ME:  I think I busted this.  -Ossama
67543b97a967SRobert Watson		  if test dlprefiles = "$prev"; then
67553b97a967SRobert Watson		    # Preload the old-style object.
67563b97a967SRobert Watson		    func_append dlprefiles " $pic_object"
67573b97a967SRobert Watson		    prev=
67583b97a967SRobert Watson		  fi
67593b97a967SRobert Watson
67603b97a967SRobert Watson		  # A PIC object.
67613b97a967SRobert Watson		  func_append libobjs " $pic_object"
67623b97a967SRobert Watson		  arg=$pic_object
67633b97a967SRobert Watson		fi
67643b97a967SRobert Watson
67653b97a967SRobert Watson		# Non-PIC object.
67663b97a967SRobert Watson		if test none != "$non_pic_object"; then
67673b97a967SRobert Watson		  # Prepend the subdirectory the object is found in.
67683b97a967SRobert Watson		  non_pic_object=$xdir$non_pic_object
67693b97a967SRobert Watson
67703b97a967SRobert Watson		  # A standard non-PIC object
67713b97a967SRobert Watson		  func_append non_pic_objects " $non_pic_object"
67723b97a967SRobert Watson		  if test -z "$pic_object" || test none = "$pic_object"; then
67733b97a967SRobert Watson		    arg=$non_pic_object
67743b97a967SRobert Watson		  fi
67753b97a967SRobert Watson		else
67763b97a967SRobert Watson		  # If the PIC object exists, use it instead.
67773b97a967SRobert Watson		  # $xdir was prepended to $pic_object above.
67783b97a967SRobert Watson		  non_pic_object=$pic_object
67793b97a967SRobert Watson		  func_append non_pic_objects " $non_pic_object"
67803b97a967SRobert Watson		fi
67813b97a967SRobert Watson	      else
67823b97a967SRobert Watson		# Only an error if not doing a dry-run.
67833b97a967SRobert Watson		if $opt_dry_run; then
67843b97a967SRobert Watson		  # Extract subdirectory from the argument.
67853b97a967SRobert Watson		  func_dirname "$arg" "/" ""
67863b97a967SRobert Watson		  xdir=$func_dirname_result
67873b97a967SRobert Watson
67883b97a967SRobert Watson		  func_lo2o "$arg"
67893b97a967SRobert Watson		  pic_object=$xdir$objdir/$func_lo2o_result
67903b97a967SRobert Watson		  non_pic_object=$xdir$func_lo2o_result
67913b97a967SRobert Watson		  func_append libobjs " $pic_object"
67923b97a967SRobert Watson		  func_append non_pic_objects " $non_pic_object"
67933b97a967SRobert Watson	        else
67943b97a967SRobert Watson		  func_fatal_error "'$arg' is not a valid libtool object"
67953b97a967SRobert Watson		fi
67963b97a967SRobert Watson	      fi
67973b97a967SRobert Watson	    done
67983b97a967SRobert Watson	  else
67993b97a967SRobert Watson	    func_fatal_error "link input file '$arg' does not exist"
68003b97a967SRobert Watson	  fi
68013b97a967SRobert Watson	  arg=$save_arg
68023b97a967SRobert Watson	  prev=
68033b97a967SRobert Watson	  continue
68043b97a967SRobert Watson	  ;;
68053b97a967SRobert Watson	os2dllname)
68063b97a967SRobert Watson	  os2dllname=$arg
68073b97a967SRobert Watson	  prev=
68083b97a967SRobert Watson	  continue
68093b97a967SRobert Watson	  ;;
68103b97a967SRobert Watson	precious_regex)
68113b97a967SRobert Watson	  precious_files_regex=$arg
68123b97a967SRobert Watson	  prev=
68133b97a967SRobert Watson	  continue
68143b97a967SRobert Watson	  ;;
68153b97a967SRobert Watson	release)
68163b97a967SRobert Watson	  release=-$arg
68173b97a967SRobert Watson	  prev=
68183b97a967SRobert Watson	  continue
68193b97a967SRobert Watson	  ;;
68203b97a967SRobert Watson	rpath | xrpath)
68213b97a967SRobert Watson	  # We need an absolute path.
68223b97a967SRobert Watson	  case $arg in
68233b97a967SRobert Watson	  [\\/]* | [A-Za-z]:[\\/]*) ;;
68243b97a967SRobert Watson	  *)
68253b97a967SRobert Watson	    func_fatal_error "only absolute run-paths are allowed"
68263b97a967SRobert Watson	    ;;
68273b97a967SRobert Watson	  esac
68283b97a967SRobert Watson	  if test rpath = "$prev"; then
68293b97a967SRobert Watson	    case "$rpath " in
68303b97a967SRobert Watson	    *" $arg "*) ;;
68313b97a967SRobert Watson	    *) func_append rpath " $arg" ;;
68323b97a967SRobert Watson	    esac
68333b97a967SRobert Watson	  else
68343b97a967SRobert Watson	    case "$xrpath " in
68353b97a967SRobert Watson	    *" $arg "*) ;;
68363b97a967SRobert Watson	    *) func_append xrpath " $arg" ;;
68373b97a967SRobert Watson	    esac
68383b97a967SRobert Watson	  fi
68393b97a967SRobert Watson	  prev=
68403b97a967SRobert Watson	  continue
68413b97a967SRobert Watson	  ;;
68423b97a967SRobert Watson	shrext)
68433b97a967SRobert Watson	  shrext_cmds=$arg
68443b97a967SRobert Watson	  prev=
68453b97a967SRobert Watson	  continue
68463b97a967SRobert Watson	  ;;
68473b97a967SRobert Watson	weak)
68483b97a967SRobert Watson	  func_append weak_libs " $arg"
68493b97a967SRobert Watson	  prev=
68503b97a967SRobert Watson	  continue
68513b97a967SRobert Watson	  ;;
68523b97a967SRobert Watson	xcclinker)
68533b97a967SRobert Watson	  func_append linker_flags " $qarg"
68543b97a967SRobert Watson	  func_append compiler_flags " $qarg"
68553b97a967SRobert Watson	  prev=
68563b97a967SRobert Watson	  func_append compile_command " $qarg"
68573b97a967SRobert Watson	  func_append finalize_command " $qarg"
68583b97a967SRobert Watson	  continue
68593b97a967SRobert Watson	  ;;
68603b97a967SRobert Watson	xcompiler)
68613b97a967SRobert Watson	  func_append compiler_flags " $qarg"
68623b97a967SRobert Watson	  prev=
68633b97a967SRobert Watson	  func_append compile_command " $qarg"
68643b97a967SRobert Watson	  func_append finalize_command " $qarg"
68653b97a967SRobert Watson	  continue
68663b97a967SRobert Watson	  ;;
68673b97a967SRobert Watson	xlinker)
68683b97a967SRobert Watson	  func_append linker_flags " $qarg"
68693b97a967SRobert Watson	  func_append compiler_flags " $wl$qarg"
68703b97a967SRobert Watson	  prev=
68713b97a967SRobert Watson	  func_append compile_command " $wl$qarg"
68723b97a967SRobert Watson	  func_append finalize_command " $wl$qarg"
68733b97a967SRobert Watson	  continue
68743b97a967SRobert Watson	  ;;
68753b97a967SRobert Watson	*)
68763b97a967SRobert Watson	  eval "$prev=\"\$arg\""
68773b97a967SRobert Watson	  prev=
68783b97a967SRobert Watson	  continue
68793b97a967SRobert Watson	  ;;
68803b97a967SRobert Watson	esac
68813b97a967SRobert Watson      fi # test -n "$prev"
68823b97a967SRobert Watson
68833b97a967SRobert Watson      prevarg=$arg
68843b97a967SRobert Watson
68853b97a967SRobert Watson      case $arg in
68863b97a967SRobert Watson      -all-static)
68873b97a967SRobert Watson	if test -n "$link_static_flag"; then
68883b97a967SRobert Watson	  # See comment for -static flag below, for more details.
68893b97a967SRobert Watson	  func_append compile_command " $link_static_flag"
68903b97a967SRobert Watson	  func_append finalize_command " $link_static_flag"
68913b97a967SRobert Watson	fi
68923b97a967SRobert Watson	continue
68933b97a967SRobert Watson	;;
68943b97a967SRobert Watson
68953b97a967SRobert Watson      -allow-undefined)
68963b97a967SRobert Watson	# FIXME: remove this flag sometime in the future.
68973b97a967SRobert Watson	func_fatal_error "'-allow-undefined' must not be used because it is the default"
68983b97a967SRobert Watson	;;
68993b97a967SRobert Watson
69003b97a967SRobert Watson      -avoid-version)
69013b97a967SRobert Watson	avoid_version=yes
69023b97a967SRobert Watson	continue
69033b97a967SRobert Watson	;;
69043b97a967SRobert Watson
69053b97a967SRobert Watson      -bindir)
69063b97a967SRobert Watson	prev=bindir
69073b97a967SRobert Watson	continue
69083b97a967SRobert Watson	;;
69093b97a967SRobert Watson
69103b97a967SRobert Watson      -dlopen)
69113b97a967SRobert Watson	prev=dlfiles
69123b97a967SRobert Watson	continue
69133b97a967SRobert Watson	;;
69143b97a967SRobert Watson
6915eb336521SRobert Watson      -dlpreopen)
6916eb336521SRobert Watson	prev=dlprefiles
6917eb336521SRobert Watson	continue
69183b97a967SRobert Watson	;;
69193b97a967SRobert Watson
69203b97a967SRobert Watson      -export-dynamic)
69213b97a967SRobert Watson	export_dynamic=yes
69223b97a967SRobert Watson	continue
69233b97a967SRobert Watson	;;
69243b97a967SRobert Watson
69253b97a967SRobert Watson      -export-symbols | -export-symbols-regex)
69263b97a967SRobert Watson	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
69273b97a967SRobert Watson	  func_fatal_error "more than one -exported-symbols argument is not allowed"
69283b97a967SRobert Watson	fi
69293b97a967SRobert Watson	if test X-export-symbols = "X$arg"; then
69303b97a967SRobert Watson	  prev=expsyms
69313b97a967SRobert Watson	else
69323b97a967SRobert Watson	  prev=expsyms_regex
69333b97a967SRobert Watson	fi
69343b97a967SRobert Watson	continue
69353b97a967SRobert Watson	;;
69363b97a967SRobert Watson
69373b97a967SRobert Watson      -framework)
69383b97a967SRobert Watson	prev=framework
69393b97a967SRobert Watson	continue
69403b97a967SRobert Watson	;;
69413b97a967SRobert Watson
69423b97a967SRobert Watson      -inst-prefix-dir)
69433b97a967SRobert Watson	prev=inst_prefix
69443b97a967SRobert Watson	continue
69453b97a967SRobert Watson	;;
69463b97a967SRobert Watson
69473b97a967SRobert Watson      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
69483b97a967SRobert Watson      # so, if we see these flags be careful not to treat them like -L
69493b97a967SRobert Watson      -L[A-Z][A-Z]*:*)
69503b97a967SRobert Watson	case $with_gcc/$host in
69513b97a967SRobert Watson	no/*-*-irix* | /*-*-irix*)
69523b97a967SRobert Watson	  func_append compile_command " $arg"
69533b97a967SRobert Watson	  func_append finalize_command " $arg"
69543b97a967SRobert Watson	  ;;
69553b97a967SRobert Watson	esac
69563b97a967SRobert Watson	continue
69573b97a967SRobert Watson	;;
69583b97a967SRobert Watson
69593b97a967SRobert Watson      -L*)
69603b97a967SRobert Watson	func_stripname "-L" '' "$arg"
69613b97a967SRobert Watson	if test -z "$func_stripname_result"; then
69623b97a967SRobert Watson	  if test "$#" -gt 0; then
69633b97a967SRobert Watson	    func_fatal_error "require no space between '-L' and '$1'"
69643b97a967SRobert Watson	  else
69653b97a967SRobert Watson	    func_fatal_error "need path for '-L' option"
69663b97a967SRobert Watson	  fi
69673b97a967SRobert Watson	fi
69683b97a967SRobert Watson	func_resolve_sysroot "$func_stripname_result"
69693b97a967SRobert Watson	dir=$func_resolve_sysroot_result
69703b97a967SRobert Watson	# We need an absolute path.
69713b97a967SRobert Watson	case $dir in
69723b97a967SRobert Watson	[\\/]* | [A-Za-z]:[\\/]*) ;;
69733b97a967SRobert Watson	*)
69743b97a967SRobert Watson	  absdir=`cd "$dir" && pwd`
69753b97a967SRobert Watson	  test -z "$absdir" && \
6976d9af45c4SRobert Watson	    func_fatal_error "cannot determine absolute directory name of '$dir'"
69773b97a967SRobert Watson	  dir=$absdir
69783b97a967SRobert Watson	  ;;
69793b97a967SRobert Watson	esac
6980d9af45c4SRobert Watson	case "$deplibs " in
69813b97a967SRobert Watson	*" -L$dir "* | *" $arg "*)
69823b97a967SRobert Watson	  # Will only happen for absolute or sysroot arguments
69833b97a967SRobert Watson	  ;;
69843b97a967SRobert Watson	*)
69853b97a967SRobert Watson	  # Preserve sysroot, but never include relative directories
69863b97a967SRobert Watson	  case $dir in
6987	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
6988	    *) func_append deplibs " -L$dir" ;;
6989	  esac
6990	  func_append lib_search_path " $dir"
6991	  ;;
6992	esac
6993	case $host in
6994	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
6995	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
6996	  case :$dllsearchpath: in
6997	  *":$dir:"*) ;;
6998	  ::) dllsearchpath=$dir;;
6999	  *) func_append dllsearchpath ":$dir";;
7000	  esac
7001	  case :$dllsearchpath: in
7002	  *":$testbindir:"*) ;;
7003	  ::) dllsearchpath=$testbindir;;
7004	  *) func_append dllsearchpath ":$testbindir";;
7005	  esac
7006	  ;;
7007	esac
7008	continue
7009	;;
7010
7011      -l*)
7012	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
7013	  case $host in
7014	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
7015	    # These systems don't actually have a C or math library (as such)
7016	    continue
7017	    ;;
7018	  *-*-os2*)
7019	    # These systems don't actually have a C library (as such)
7020	    test X-lc = "X$arg" && continue
7021	    ;;
7022	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
7023	    # Do not include libc due to us having libc/libc_r.
7024	    test X-lc = "X$arg" && continue
7025	    ;;
7026	  *-*-rhapsody* | *-*-darwin1.[012])
7027	    # Rhapsody C and math libraries are in the System framework
7028	    func_append deplibs " System.ltframework"
7029	    continue
7030	    ;;
7031	  *-*-sco3.2v5* | *-*-sco5v6*)
7032	    # Causes problems with __ctype
7033	    test X-lc = "X$arg" && continue
7034	    ;;
7035	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7036	    # Compiler inserts libc in the correct place for threads to work
7037	    test X-lc = "X$arg" && continue
7038	    ;;
7039	  esac
7040	elif test X-lc_r = "X$arg"; then
7041	 case $host in
7042	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
7043	   # Do not include libc_r directly, use -pthread flag.
7044	   continue
7045	   ;;
7046	 esac
7047	fi
7048	func_append deplibs " $arg"
7049	continue
7050	;;
7051
7052      -mllvm)
7053	prev=mllvm
7054	continue
7055	;;
7056
7057      -module)
7058	module=yes
7059	continue
7060	;;
7061
7062      # Tru64 UNIX uses -model [arg] to determine the layout of C++
7063      # classes, name mangling, and exception handling.
7064      # Darwin uses the -arch flag to determine output architecture.
7065      -model|-arch|-isysroot|--sysroot)
7066	func_append compiler_flags " $arg"
7067	func_append compile_command " $arg"
7068	func_append finalize_command " $arg"
7069	prev=xcompiler
7070	continue
7071	;;
7072
7073      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7074      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7075	func_append compiler_flags " $arg"
7076	func_append compile_command " $arg"
7077	func_append finalize_command " $arg"
7078	case "$new_inherited_linker_flags " in
7079	    *" $arg "*) ;;
7080	    * ) func_append new_inherited_linker_flags " $arg" ;;
7081	esac
7082	continue
7083	;;
7084
7085      -multi_module)
7086	single_module=$wl-multi_module
7087	continue
7088	;;
7089
7090      -no-fast-install)
7091	fast_install=no
7092	continue
7093	;;
7094
7095      -no-install)
7096	case $host in
7097	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
7098	  # The PATH hackery in wrapper scripts is required on Windows
7099	  # and Darwin in order for the loader to find any dlls it needs.
7100	  func_warning "'-no-install' is ignored for $host"
7101	  func_warning "assuming '-no-fast-install' instead"
7102	  fast_install=no
7103	  ;;
7104	*) no_install=yes ;;
7105	esac
7106	continue
7107	;;
7108
7109      -no-undefined)
7110	allow_undefined=no
7111	continue
7112	;;
7113
7114      -objectlist)
7115	prev=objectlist
7116	continue
7117	;;
7118
7119      -os2dllname)
7120	prev=os2dllname
7121	continue
7122	;;
7123
7124      -o) prev=output ;;
7125
7126      -precious-files-regex)
7127	prev=precious_regex
7128	continue
7129	;;
7130
7131      -release)
7132	prev=release
7133	continue
7134	;;
7135
7136      -rpath)
7137	prev=rpath
7138	continue
7139	;;
7140
7141      -R)
7142	prev=xrpath
7143	continue
7144	;;
7145
7146      -R*)
7147	func_stripname '-R' '' "$arg"
7148	dir=$func_stripname_result
7149	# We need an absolute path.
7150	case $dir in
7151	[\\/]* | [A-Za-z]:[\\/]*) ;;
7152	=*)
7153	  func_stripname '=' '' "$dir"
7154	  dir=$lt_sysroot$func_stripname_result
7155	  ;;
7156	*)
7157	  func_fatal_error "only absolute run-paths are allowed"
7158	  ;;
7159	esac
7160	case "$xrpath " in
7161	*" $dir "*) ;;
7162	*) func_append xrpath " $dir" ;;
7163	esac
7164	continue
7165	;;
7166
7167      -shared)
7168	# The effects of -shared are defined in a previous loop.
7169	continue
7170	;;
7171
7172      -shrext)
7173	prev=shrext
7174	continue
7175	;;
7176
7177      -static | -static-libtool-libs)
7178	# The effects of -static are defined in a previous loop.
7179	# We used to do the same as -all-static on platforms that
7180	# didn't have a PIC flag, but the assumption that the effects
7181	# would be equivalent was wrong.  It would break on at least
7182	# Digital Unix and AIX.
7183	continue
7184	;;
7185
7186      -thread-safe)
7187	thread_safe=yes
7188	continue
7189	;;
7190
7191      -version-info)
7192	prev=vinfo
7193	continue
7194	;;
7195
7196      -version-number)
7197	prev=vinfo
7198	vinfo_number=yes
7199	continue
7200	;;
7201
7202      -weak)
7203        prev=weak
7204	continue
7205	;;
7206
7207      -Wc,*)
7208	func_stripname '-Wc,' '' "$arg"
7209	args=$func_stripname_result
7210	arg=
7211	save_ifs=$IFS; IFS=,
7212	for flag in $args; do
7213	  IFS=$save_ifs
7214          func_quote_for_eval "$flag"
7215	  func_append arg " $func_quote_for_eval_result"
7216	  func_append compiler_flags " $func_quote_for_eval_result"
7217	done
7218	IFS=$save_ifs
7219	func_stripname ' ' '' "$arg"
7220	arg=$func_stripname_result
7221	;;
7222
7223      -Wl,*)
7224	func_stripname '-Wl,' '' "$arg"
7225	args=$func_stripname_result
7226	arg=
7227	save_ifs=$IFS; IFS=,
7228	for flag in $args; do
7229	  IFS=$save_ifs
7230          func_quote_for_eval "$flag"
7231	  func_append arg " $wl$func_quote_for_eval_result"
7232	  func_append compiler_flags " $wl$func_quote_for_eval_result"
7233	  func_append linker_flags " $func_quote_for_eval_result"
7234	done
7235	IFS=$save_ifs
7236	func_stripname ' ' '' "$arg"
7237	arg=$func_stripname_result
7238	;;
7239
7240      -Xcompiler)
7241	prev=xcompiler
7242	continue
7243	;;
7244
7245      -Xlinker)
7246	prev=xlinker
7247	continue
7248	;;
7249
7250      -XCClinker)
7251	prev=xcclinker
7252	continue
7253	;;
7254
7255      # -msg_* for osf cc
7256      -msg_*)
7257	func_quote_for_eval "$arg"
7258	arg=$func_quote_for_eval_result
7259	;;
7260
7261      # Flags to be passed through unchanged, with rationale:
7262      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
7263      # -r[0-9][0-9]*        specify processor for the SGI compiler
7264      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
7265      # +DA*, +DD*           enable 64-bit mode for the HP compiler
7266      # -q*                  compiler args for the IBM compiler
7267      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
7268      # -F/path              path to uninstalled frameworks, gcc on darwin
7269      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
7270      # -fstack-protector*   stack protector flags for GCC
7271      # @file                GCC response files
7272      # -tp=*                Portland pgcc target processor selection
7273      # --sysroot=*          for sysroot support
7274      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
7275      # -stdlib=*            select c++ std lib with clang
7276      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
7277      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
7278      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
7279        func_quote_for_eval "$arg"
7280	arg=$func_quote_for_eval_result
7281        func_append compile_command " $arg"
7282        func_append finalize_command " $arg"
7283        func_append compiler_flags " $arg"
7284        continue
7285        ;;
7286
7287      -Z*)
7288        if test os2 = "`expr $host : '.*\(os2\)'`"; then
7289          # OS/2 uses -Zxxx to specify OS/2-specific options
7290	  compiler_flags="$compiler_flags $arg"
7291	  func_append compile_command " $arg"
7292	  func_append finalize_command " $arg"
7293	  case $arg in
7294	  -Zlinker | -Zstack)
7295	    prev=xcompiler
7296	    ;;
7297	  esac
7298	  continue
7299        else
7300	  # Otherwise treat like 'Some other compiler flag' below
7301	  func_quote_for_eval "$arg"
7302	  arg=$func_quote_for_eval_result
7303        fi
7304	;;
7305
7306      # Some other compiler flag.
7307      -* | +*)
7308        func_quote_for_eval "$arg"
7309	arg=$func_quote_for_eval_result
7310	;;
7311
7312      *.$objext)
7313	# A standard object.
7314	func_append objs " $arg"
7315	;;
7316
7317      *.lo)
7318	# A libtool-controlled object.
7319
7320	# Check to see that this really is a libtool object.
7321	if func_lalib_unsafe_p "$arg"; then
7322	  pic_object=
7323	  non_pic_object=
7324
7325	  # Read the .lo file
7326	  func_source "$arg"
7327
7328	  if test -z "$pic_object" ||
7329	     test -z "$non_pic_object" ||
7330	     test none = "$pic_object" &&
7331	     test none = "$non_pic_object"; then
7332	    func_fatal_error "cannot find name of object for '$arg'"
7333	  fi
7334
7335	  # Extract subdirectory from the argument.
7336	  func_dirname "$arg" "/" ""
7337	  xdir=$func_dirname_result
7338
7339	  test none = "$pic_object" || {
7340	    # Prepend the subdirectory the object is found in.
7341	    pic_object=$xdir$pic_object
7342
7343	    if test dlfiles = "$prev"; then
7344	      if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
7345		func_append dlfiles " $pic_object"
7346		prev=
7347		continue
7348	      else
7349		# If libtool objects are unsupported, then we need to preload.
7350		prev=dlprefiles
7351	      fi
7352	    fi
7353
7354	    # CHECK ME:  I think I busted this.  -Ossama
7355	    if test dlprefiles = "$prev"; then
7356	      # Preload the old-style object.
7357	      func_append dlprefiles " $pic_object"
7358	      prev=
7359	    fi
7360
7361	    # A PIC object.
7362	    func_append libobjs " $pic_object"
7363	    arg=$pic_object
7364	  }
7365
7366	  # Non-PIC object.
7367	  if test none != "$non_pic_object"; then
7368	    # Prepend the subdirectory the object is found in.
7369	    non_pic_object=$xdir$non_pic_object
7370
7371	    # A standard non-PIC object
7372	    func_append non_pic_objects " $non_pic_object"
7373	    if test -z "$pic_object" || test none = "$pic_object"; then
7374	      arg=$non_pic_object
7375	    fi
7376	  else
7377	    # If the PIC object exists, use it instead.
7378	    # $xdir was prepended to $pic_object above.
7379	    non_pic_object=$pic_object
7380	    func_append non_pic_objects " $non_pic_object"
7381	  fi
7382	else
7383	  # Only an error if not doing a dry-run.
7384	  if $opt_dry_run; then
7385	    # Extract subdirectory from the argument.
7386	    func_dirname "$arg" "/" ""
7387	    xdir=$func_dirname_result
7388
7389	    func_lo2o "$arg"
7390	    pic_object=$xdir$objdir/$func_lo2o_result
7391	    non_pic_object=$xdir$func_lo2o_result
7392	    func_append libobjs " $pic_object"
7393	    func_append non_pic_objects " $non_pic_object"
7394	  else
7395	    func_fatal_error "'$arg' is not a valid libtool object"
7396	  fi
7397	fi
7398	;;
7399
7400      *.$libext)
7401	# An archive.
7402	func_append deplibs " $arg"
7403	func_append old_deplibs " $arg"
7404	continue
7405	;;
7406
7407      *.la)
7408	# A libtool-controlled library.
7409
7410	func_resolve_sysroot "$arg"
7411	if test dlfiles = "$prev"; then
7412	  # This library was specified with -dlopen.
7413	  func_append dlfiles " $func_resolve_sysroot_result"
7414	  prev=
7415	elif test dlprefiles = "$prev"; then
7416	  # The library was specified with -dlpreopen.
7417	  func_append dlprefiles " $func_resolve_sysroot_result"
7418	  prev=
7419	else
7420	  func_append deplibs " $func_resolve_sysroot_result"
7421	fi
7422	continue
7423	;;
7424
7425      # Some other compiler argument.
7426      *)
7427	# Unknown arguments in both finalize_command and compile_command need
7428	# to be aesthetically quoted because they are evaled later.
7429	func_quote_for_eval "$arg"
7430	arg=$func_quote_for_eval_result
7431	;;
7432      esac # arg
7433
7434      # Now actually substitute the argument into the commands.
7435      if test -n "$arg"; then
7436	func_append compile_command " $arg"
7437	func_append finalize_command " $arg"
7438      fi
7439    done # argument parsing loop
7440
7441    test -n "$prev" && \
7442      func_fatal_help "the '$prevarg' option requires an argument"
7443
7444    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
7445      eval arg=\"$export_dynamic_flag_spec\"
7446      func_append compile_command " $arg"
7447      func_append finalize_command " $arg"
7448    fi
7449
7450    oldlibs=
7451    # calculate the name of the file, without its directory
7452    func_basename "$output"
7453    outputname=$func_basename_result
7454    libobjs_save=$libobjs
7455
7456    if test -n "$shlibpath_var"; then
7457      # get the directories listed in $shlibpath_var
7458      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
7459    else
7460      shlib_search_path=
7461    fi
7462    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
7463    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
7464
7465    # Definition is injected by LT_CONFIG during libtool generation.
7466    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
7467
7468    func_dirname "$output" "/" ""
7469    output_objdir=$func_dirname_result$objdir
7470    func_to_tool_file "$output_objdir/"
7471    tool_output_objdir=$func_to_tool_file_result
7472    # Create the object directory.
7473    func_mkdir_p "$output_objdir"
7474
7475    # Determine the type of output
7476    case $output in
7477    "")
7478      func_fatal_help "you must specify an output file"
7479      ;;
7480    *.$libext) linkmode=oldlib ;;
7481    *.lo | *.$objext) linkmode=obj ;;
7482    *.la) linkmode=lib ;;
7483    *) linkmode=prog ;; # Anything else should be a program.
7484    esac
7485
7486    specialdeplibs=
7487
7488    libs=
7489    # Find all interdependent deplibs by searching for libraries
7490    # that are linked more than once (e.g. -la -lb -la)
7491    for deplib in $deplibs; do
7492      if $opt_preserve_dup_deps; then
7493	case "$libs " in
7494	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
7495	esac
7496      fi
7497      func_append libs " $deplib"
7498    done
7499
7500    if test lib = "$linkmode"; then
7501      libs="$predeps $libs $compiler_lib_search_path $postdeps"
7502
7503      # Compute libraries that are listed more than once in $predeps
7504      # $postdeps and mark them as special (i.e., whose duplicates are
7505      # not to be eliminated).
7506      pre_post_deps=
7507      if $opt_duplicate_compiler_generated_deps; then
7508	for pre_post_dep in $predeps $postdeps; do
7509	  case "$pre_post_deps " in
7510	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
7511	  esac
7512	  func_append pre_post_deps " $pre_post_dep"
7513	done
7514      fi
7515      pre_post_deps=
7516    fi
7517
7518    deplibs=
7519    newdependency_libs=
7520    newlib_search_path=
7521    need_relink=no # whether we're linking any uninstalled libtool libraries
7522    notinst_deplibs= # not-installed libtool libraries
7523    notinst_path= # paths that contain not-installed libtool libraries
7524
7525    case $linkmode in
7526    lib)
7527	passes="conv dlpreopen link"
7528	for file in $dlfiles $dlprefiles; do
7529	  case $file in
7530	  *.la) ;;
7531	  *)
7532	    func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
7533	    ;;
7534	  esac
7535	done
7536	;;
7537    prog)
7538	compile_deplibs=
7539	finalize_deplibs=
7540	alldeplibs=false
7541	newdlfiles=
7542	newdlprefiles=
7543	passes="conv scan dlopen dlpreopen link"
7544	;;
7545    *)  passes="conv"
7546	;;
7547    esac
7548
7549    for pass in $passes; do
7550      # The preopen pass in lib mode reverses $deplibs; put it back here
7551      # so that -L comes before libs that need it for instance...
7552      if test lib,link = "$linkmode,$pass"; then
7553	## FIXME: Find the place where the list is rebuilt in the wrong
7554	##        order, and fix it there properly
7555        tmp_deplibs=
7556	for deplib in $deplibs; do
7557	  tmp_deplibs="$deplib $tmp_deplibs"
7558	done
7559	deplibs=$tmp_deplibs
7560      fi
7561
7562      if test lib,link = "$linkmode,$pass" ||
7563	 test prog,scan = "$linkmode,$pass"; then
7564	libs=$deplibs
7565	deplibs=
7566      fi
7567      if test prog = "$linkmode"; then
7568	case $pass in
7569	dlopen) libs=$dlfiles ;;
7570	dlpreopen) libs=$dlprefiles ;;
7571	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
7572	esac
7573      fi
7574      if test lib,dlpreopen = "$linkmode,$pass"; then
7575	# Collect and forward deplibs of preopened libtool libs
7576	for lib in $dlprefiles; do
7577	  # Ignore non-libtool-libs
7578	  dependency_libs=
7579	  func_resolve_sysroot "$lib"
7580	  case $lib in
7581	  *.la)	func_source "$func_resolve_sysroot_result" ;;
7582	  esac
7583
7584	  # Collect preopened libtool deplibs, except any this library
7585	  # has declared as weak libs
7586	  for deplib in $dependency_libs; do
7587	    func_basename "$deplib"
7588            deplib_base=$func_basename_result
7589	    case " $weak_libs " in
7590	    *" $deplib_base "*) ;;
7591	    *) func_append deplibs " $deplib" ;;
7592	    esac
7593	  done
7594	done
7595	libs=$dlprefiles
7596      fi
7597      if test dlopen = "$pass"; then
7598	# Collect dlpreopened libraries
7599	save_deplibs=$deplibs
7600	deplibs=
7601      fi
7602
7603      for deplib in $libs; do
7604	lib=
7605	found=false
7606	case $deplib in
7607	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7608        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7609	  if test prog,link = "$linkmode,$pass"; then
7610	    compile_deplibs="$deplib $compile_deplibs"
7611	    finalize_deplibs="$deplib $finalize_deplibs"
7612	  else
7613	    func_append compiler_flags " $deplib"
7614	    if test lib = "$linkmode"; then
7615		case "$new_inherited_linker_flags " in
7616		    *" $deplib "*) ;;
7617		    * ) func_append new_inherited_linker_flags " $deplib" ;;
7618		esac
7619	    fi
7620	  fi
7621	  continue
7622	  ;;
7623	-l*)
7624	  if test lib != "$linkmode" && test prog != "$linkmode"; then
7625	    func_warning "'-l' is ignored for archives/objects"
7626	    continue
7627	  fi
7628	  func_stripname '-l' '' "$deplib"
7629	  name=$func_stripname_result
7630	  if test lib = "$linkmode"; then
7631	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
7632	  else
7633	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
7634	  fi
7635	  for searchdir in $searchdirs; do
7636	    for search_ext in .la $std_shrext .so .a; do
7637	      # Search the libtool library
7638	      lib=$searchdir/lib$name$search_ext
7639	      if test -f "$lib"; then
7640		if test .la = "$search_ext"; then
7641		  found=:
7642		else
7643		  found=false
7644		fi
7645		break 2
7646	      fi
7647	    done
7648	  done
7649	  if $found; then
7650	    # deplib is a libtool library
7651	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
7652	    # We need to do some special things here, and not later.
7653	    if test yes = "$allow_libtool_libs_with_static_runtimes"; then
7654	      case " $predeps $postdeps " in
7655	      *" $deplib "*)
7656		if func_lalib_p "$lib"; then
7657		  library_names=
7658		  old_library=
7659		  func_source "$lib"
7660		  for l in $old_library $library_names; do
7661		    ll=$l
7662		  done
7663		  if test "X$ll" = "X$old_library"; then # only static version available
7664		    found=false
7665		    func_dirname "$lib" "" "."
7666		    ladir=$func_dirname_result
7667		    lib=$ladir/$old_library
7668		    if test prog,link = "$linkmode,$pass"; then
7669		      compile_deplibs="$deplib $compile_deplibs"
7670		      finalize_deplibs="$deplib $finalize_deplibs"
7671		    else
7672		      deplibs="$deplib $deplibs"
7673		      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
7674		    fi
7675		    continue
7676		  fi
7677		fi
7678		;;
7679	      *) ;;
7680	      esac
7681	    fi
7682	  else
7683	    # deplib doesn't seem to be a libtool library
7684	    if test prog,link = "$linkmode,$pass"; then
7685	      compile_deplibs="$deplib $compile_deplibs"
7686	      finalize_deplibs="$deplib $finalize_deplibs"
7687	    else
7688	      deplibs="$deplib $deplibs"
7689	      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
7690	    fi
7691	    continue
7692	  fi
7693	  ;; # -l
7694	*.ltframework)
7695	  if test prog,link = "$linkmode,$pass"; then
7696	    compile_deplibs="$deplib $compile_deplibs"
7697	    finalize_deplibs="$deplib $finalize_deplibs"
7698	  else
7699	    deplibs="$deplib $deplibs"
7700	    if test lib = "$linkmode"; then
7701		case "$new_inherited_linker_flags " in
7702		    *" $deplib "*) ;;
7703		    * ) func_append new_inherited_linker_flags " $deplib" ;;
7704		esac
7705	    fi
7706	  fi
7707	  continue
7708	  ;;
7709	-L*)
7710	  case $linkmode in
7711	  lib)
7712	    deplibs="$deplib $deplibs"
7713	    test conv = "$pass" && continue
7714	    newdependency_libs="$deplib $newdependency_libs"
7715	    func_stripname '-L' '' "$deplib"
7716	    func_resolve_sysroot "$func_stripname_result"
7717	    func_append newlib_search_path " $func_resolve_sysroot_result"
7718	    ;;
7719	  prog)
7720	    if test conv = "$pass"; then
7721	      deplibs="$deplib $deplibs"
7722	      continue
7723	    fi
7724	    if test scan = "$pass"; then
7725	      deplibs="$deplib $deplibs"
7726	    else
7727	      compile_deplibs="$deplib $compile_deplibs"
7728	      finalize_deplibs="$deplib $finalize_deplibs"
7729	    fi
7730	    func_stripname '-L' '' "$deplib"
7731	    func_resolve_sysroot "$func_stripname_result"
7732	    func_append newlib_search_path " $func_resolve_sysroot_result"
7733	    ;;
7734	  *)
7735	    func_warning "'-L' is ignored for archives/objects"
7736	    ;;
7737	  esac # linkmode
7738	  continue
7739	  ;; # -L
7740	-R*)
7741	  if test link = "$pass"; then
7742	    func_stripname '-R' '' "$deplib"
7743	    func_resolve_sysroot "$func_stripname_result"
7744	    dir=$func_resolve_sysroot_result
7745	    # Make sure the xrpath contains only unique directories.
7746	    case "$xrpath " in
7747	    *" $dir "*) ;;
7748	    *) func_append xrpath " $dir" ;;
7749	    esac
7750	  fi
7751	  deplibs="$deplib $deplibs"
7752	  continue
7753	  ;;
7754	*.la)
7755	  func_resolve_sysroot "$deplib"
7756	  lib=$func_resolve_sysroot_result
7757	  ;;
7758	*.$libext)
7759	  if test conv = "$pass"; then
7760	    deplibs="$deplib $deplibs"
7761	    continue
7762	  fi
7763	  case $linkmode in
7764	  lib)
7765	    # Linking convenience modules into shared libraries is allowed,
7766	    # but linking other static libraries is non-portable.
7767	    case " $dlpreconveniencelibs " in
7768	    *" $deplib "*) ;;
7769	    *)
7770	      valid_a_lib=false
7771	      case $deplibs_check_method in
7772		match_pattern*)
7773		  set dummy $deplibs_check_method; shift
7774		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7775		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
7776		    | $EGREP "$match_pattern_regex" > /dev/null; then
7777		    valid_a_lib=:
7778		  fi
7779		;;
7780		pass_all)
7781		  valid_a_lib=:
7782		;;
7783	      esac
7784	      if $valid_a_lib; then
7785		echo
7786		$ECHO "*** Warning: Linking the shared library $output against the"
7787		$ECHO "*** static library $deplib is not portable!"
7788		deplibs="$deplib $deplibs"
7789	      else
7790		echo
7791		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
7792		echo "*** I have the capability to make that library automatically link in when"
7793		echo "*** you link to this library.  But I can only do this if you have a"
7794		echo "*** shared version of the library, which you do not appear to have"
7795		echo "*** because the file extensions .$libext of this argument makes me believe"
7796		echo "*** that it is just a static archive that I should not use here."
7797	      fi
7798	      ;;
7799	    esac
7800	    continue
7801	    ;;
7802	  prog)
7803	    if test link != "$pass"; then
7804	      deplibs="$deplib $deplibs"
7805	    else
7806	      compile_deplibs="$deplib $compile_deplibs"
7807	      finalize_deplibs="$deplib $finalize_deplibs"
7808	    fi
7809	    continue
7810	    ;;
7811	  esac # linkmode
7812	  ;; # *.$libext
7813	*.lo | *.$objext)
7814	  if test conv = "$pass"; then
7815	    deplibs="$deplib $deplibs"
7816	  elif test prog = "$linkmode"; then
7817	    if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
7818	      # If there is no dlopen support or we're linking statically,
7819	      # we need to preload.
7820	      func_append newdlprefiles " $deplib"
7821	      compile_deplibs="$deplib $compile_deplibs"
7822	      finalize_deplibs="$deplib $finalize_deplibs"
7823	    else
7824	      func_append newdlfiles " $deplib"
7825	    fi
7826	  fi
7827	  continue
7828	  ;;
7829	%DEPLIBS%)
7830	  alldeplibs=:
7831	  continue
7832	  ;;
7833	esac # case $deplib
7834
7835	$found || test -f "$lib" \
7836	  || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
7837
7838	# Check to see that this really is a libtool archive.
7839	func_lalib_unsafe_p "$lib" \
7840	  || func_fatal_error "'$lib' is not a valid libtool archive"
7841
7842	func_dirname "$lib" "" "."
7843	ladir=$func_dirname_result
7844
7845	dlname=
7846	dlopen=
7847	dlpreopen=
7848	libdir=
7849	library_names=
7850	old_library=
7851	inherited_linker_flags=
7852	# If the library was installed with an old release of libtool,
7853	# it will not redefine variables installed, or shouldnotlink
7854	installed=yes
7855	shouldnotlink=no
7856	avoidtemprpath=
7857
7858
7859	# Read the .la file
7860	func_source "$lib"
7861
7862	# Convert "-framework foo" to "foo.ltframework"
7863	if test -n "$inherited_linker_flags"; then
7864	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
7865	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
7866	    case " $new_inherited_linker_flags " in
7867	      *" $tmp_inherited_linker_flag "*) ;;
7868	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
7869	    esac
7870	  done
7871	fi
7872	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7873	if test lib,link = "$linkmode,$pass" ||
7874	   test prog,scan = "$linkmode,$pass" ||
7875	   { test prog != "$linkmode" && test lib != "$linkmode"; }; then
7876	  test -n "$dlopen" && func_append dlfiles " $dlopen"
7877	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
7878	fi
7879
7880	if test conv = "$pass"; then
7881	  # Only check for convenience libraries
7882	  deplibs="$lib $deplibs"
7883	  if test -z "$libdir"; then
7884	    if test -z "$old_library"; then
7885	      func_fatal_error "cannot find name of link library for '$lib'"
7886	    fi
7887	    # It is a libtool convenience library, so add in its objects.
7888	    func_append convenience " $ladir/$objdir/$old_library"
7889	    func_append old_convenience " $ladir/$objdir/$old_library"
7890	  elif test prog != "$linkmode" && test lib != "$linkmode"; then
7891	    func_fatal_error "'$lib' is not a convenience library"
7892	  fi
7893	  tmp_libs=
7894	  for deplib in $dependency_libs; do
7895	    deplibs="$deplib $deplibs"
7896	    if $opt_preserve_dup_deps; then
7897	      case "$tmp_libs " in
7898	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
7899	      esac
7900	    fi
7901	    func_append tmp_libs " $deplib"
7902	  done
7903	  continue
7904	fi # $pass = conv
7905
7906
7907	# Get the name of the library we link against.
7908	linklib=
7909	if test -n "$old_library" &&
7910	   { test yes = "$prefer_static_libs" ||
7911	     test built,no = "$prefer_static_libs,$installed"; }; then
7912	  linklib=$old_library
7913	else
7914	  for l in $old_library $library_names; do
7915	    linklib=$l
7916	  done
7917	fi
7918	if test -z "$linklib"; then
7919	  func_fatal_error "cannot find name of link library for '$lib'"
7920	fi
7921
7922	# This library was specified with -dlopen.
7923	if test dlopen = "$pass"; then
7924	  test -z "$libdir" \
7925	    && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
7926	  if test -z "$dlname" ||
7927	     test yes != "$dlopen_support" ||
7928	     test no = "$build_libtool_libs"
7929	  then
7930	    # If there is no dlname, no dlopen support or we're linking
7931	    # statically, we need to preload.  We also need to preload any
7932	    # dependent libraries so libltdl's deplib preloader doesn't
7933	    # bomb out in the load deplibs phase.
7934	    func_append dlprefiles " $lib $dependency_libs"
7935	  else
7936	    func_append newdlfiles " $lib"
7937	  fi
7938	  continue
7939	fi # $pass = dlopen
7940
7941	# We need an absolute path.
7942	case $ladir in
7943	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
7944	*)
7945	  abs_ladir=`cd "$ladir" && pwd`
7946	  if test -z "$abs_ladir"; then
7947	    func_warning "cannot determine absolute directory name of '$ladir'"
7948	    func_warning "passing it literally to the linker, although it might fail"
7949	    abs_ladir=$ladir
7950	  fi
7951	  ;;
7952	esac
7953	func_basename "$lib"
7954	laname=$func_basename_result
7955
7956	# Find the relevant object directory and library name.
7957	if test yes = "$installed"; then
7958	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
7959	    func_warning "library '$lib' was moved."
7960	    dir=$ladir
7961	    absdir=$abs_ladir
7962	    libdir=$abs_ladir
7963	  else
7964	    dir=$lt_sysroot$libdir
7965	    absdir=$lt_sysroot$libdir
7966	  fi
7967	  test yes = "$hardcode_automatic" && avoidtemprpath=yes
7968	else
7969	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
7970	    dir=$ladir
7971	    absdir=$abs_ladir
7972	    # Remove this search path later
7973	    func_append notinst_path " $abs_ladir"
7974	  else
7975	    dir=$ladir/$objdir
7976	    absdir=$abs_ladir/$objdir
7977	    # Remove this search path later
7978	    func_append notinst_path " $abs_ladir"
7979	  fi
7980	fi # $installed = yes
7981	func_stripname 'lib' '.la' "$laname"
7982	name=$func_stripname_result
7983
7984	# This library was specified with -dlpreopen.
7985	if test dlpreopen = "$pass"; then
7986	  if test -z "$libdir" && test prog = "$linkmode"; then
7987	    func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
7988	  fi
7989	  case $host in
7990	    # special handling for platforms with PE-DLLs.
7991	    *cygwin* | *mingw* | *cegcc* )
7992	      # Linker will automatically link against shared library if both
7993	      # static and shared are present.  Therefore, ensure we extract
7994	      # symbols from the import library if a shared library is present
7995	      # (otherwise, the dlopen module name will be incorrect).  We do
7996	      # this by putting the import library name into $newdlprefiles.
7997	      # We recover the dlopen module name by 'saving' the la file
7998	      # name in a special purpose variable, and (later) extracting the
7999	      # dlname from the la file.
8000	      if test -n "$dlname"; then
8001	        func_tr_sh "$dir/$linklib"
8002	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
8003	        func_append newdlprefiles " $dir/$linklib"
8004	      else
8005	        func_append newdlprefiles " $dir/$old_library"
8006	        # Keep a list of preopened convenience libraries to check
8007	        # that they are being used correctly in the link pass.
8008	        test -z "$libdir" && \
8009	          func_append dlpreconveniencelibs " $dir/$old_library"
8010	      fi
8011	    ;;
8012	    * )
8013	      # Prefer using a static library (so that no silly _DYNAMIC symbols
8014	      # are required to link).
8015	      if test -n "$old_library"; then
8016	        func_append newdlprefiles " $dir/$old_library"
8017	        # Keep a list of preopened convenience libraries to check
8018	        # that they are being used correctly in the link pass.
8019	        test -z "$libdir" && \
8020	          func_append dlpreconveniencelibs " $dir/$old_library"
8021	      # Otherwise, use the dlname, so that lt_dlopen finds it.
8022	      elif test -n "$dlname"; then
8023	        func_append newdlprefiles " $dir/$dlname"
8024	      else
8025	        func_append newdlprefiles " $dir/$linklib"
8026	      fi
8027	    ;;
8028	  esac
8029	fi # $pass = dlpreopen
8030
8031	if test -z "$libdir"; then
8032	  # Link the convenience library
8033	  if test lib = "$linkmode"; then
8034	    deplibs="$dir/$old_library $deplibs"
8035	  elif test prog,link = "$linkmode,$pass"; then
8036	    compile_deplibs="$dir/$old_library $compile_deplibs"
8037	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
8038	  else
8039	    deplibs="$lib $deplibs" # used for prog,scan pass
8040	  fi
8041	  continue
8042	fi
8043
8044
8045	if test prog = "$linkmode" && test link != "$pass"; then
8046	  func_append newlib_search_path " $ladir"
8047	  deplibs="$lib $deplibs"
8048
8049	  linkalldeplibs=false
8050	  if test no != "$link_all_deplibs" || test -z "$library_names" ||
8051	     test no = "$build_libtool_libs"; then
8052	    linkalldeplibs=:
8053	  fi
8054
8055	  tmp_libs=
8056	  for deplib in $dependency_libs; do
8057	    case $deplib in
8058	    -L*) func_stripname '-L' '' "$deplib"
8059	         func_resolve_sysroot "$func_stripname_result"
8060	         func_append newlib_search_path " $func_resolve_sysroot_result"
8061		 ;;
8062	    esac
8063	    # Need to link against all dependency_libs?
8064	    if $linkalldeplibs; then
8065	      deplibs="$deplib $deplibs"
8066	    else
8067	      # Need to hardcode shared library paths
8068	      # or/and link against static libraries
8069	      newdependency_libs="$deplib $newdependency_libs"
8070	    fi
8071	    if $opt_preserve_dup_deps; then
8072	      case "$tmp_libs " in
8073	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8074	      esac
8075	    fi
8076	    func_append tmp_libs " $deplib"
8077	  done # for deplib
8078	  continue
8079	fi # $linkmode = prog...
8080
8081	if test prog,link = "$linkmode,$pass"; then
8082	  if test -n "$library_names" &&
8083	     { { test no = "$prefer_static_libs" ||
8084	         test built,yes = "$prefer_static_libs,$installed"; } ||
8085	       test -z "$old_library"; }; then
8086	    # We need to hardcode the library path
8087	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
8088	      # Make sure the rpath contains only unique directories.
8089	      case $temp_rpath: in
8090	      *"$absdir:"*) ;;
8091	      *) func_append temp_rpath "$absdir:" ;;
8092	      esac
8093	    fi
8094
8095	    # Hardcode the library path.
8096	    # Skip directories that are in the system default run-time
8097	    # search path.
8098	    case " $sys_lib_dlsearch_path " in
8099	    *" $absdir "*) ;;
8100	    *)
8101	      case "$compile_rpath " in
8102	      *" $absdir "*) ;;
8103	      *) func_append compile_rpath " $absdir" ;;
8104	      esac
8105	      ;;
8106	    esac
8107	    case " $sys_lib_dlsearch_path " in
8108	    *" $libdir "*) ;;
8109	    *)
8110	      case "$finalize_rpath " in
8111	      *" $libdir "*) ;;
8112	      *) func_append finalize_rpath " $libdir" ;;
8113	      esac
8114	      ;;
8115	    esac
8116	  fi # $linkmode,$pass = prog,link...
8117
8118	  if $alldeplibs &&
8119	     { test pass_all = "$deplibs_check_method" ||
8120	       { test yes = "$build_libtool_libs" &&
8121		 test -n "$library_names"; }; }; then
8122	    # We only need to search for static libraries
8123	    continue
8124	  fi
8125	fi
8126
8127	link_static=no # Whether the deplib will be linked statically
8128	use_static_libs=$prefer_static_libs
8129	if test built = "$use_static_libs" && test yes = "$installed"; then
8130	  use_static_libs=no
8131	fi
8132	if test -n "$library_names" &&
8133	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
8134	  case $host in
8135	  *cygwin* | *mingw* | *cegcc* | *os2*)
8136	      # No point in relinking DLLs because paths are not encoded
8137	      func_append notinst_deplibs " $lib"
8138	      need_relink=no
8139	    ;;
8140	  *)
8141	    if test no = "$installed"; then
8142	      func_append notinst_deplibs " $lib"
8143	      need_relink=yes
8144	    fi
8145	    ;;
8146	  esac
8147	  # This is a shared library
8148
8149	  # Warn about portability, can't link against -module's on some
8150	  # systems (darwin).  Don't bleat about dlopened modules though!
8151	  dlopenmodule=
8152	  for dlpremoduletest in $dlprefiles; do
8153	    if test "X$dlpremoduletest" = "X$lib"; then
8154	      dlopenmodule=$dlpremoduletest
8155	      break
8156	    fi
8157	  done
8158	  if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
8159	    echo
8160	    if test prog = "$linkmode"; then
8161	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
8162	    else
8163	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
8164	    fi
8165	    $ECHO "*** $linklib is not portable!"
8166	  fi
8167	  if test lib = "$linkmode" &&
8168	     test yes = "$hardcode_into_libs"; then
8169	    # Hardcode the library path.
8170	    # Skip directories that are in the system default run-time
8171	    # search path.
8172	    case " $sys_lib_dlsearch_path " in
8173	    *" $absdir "*) ;;
8174	    *)
8175	      case "$compile_rpath " in
8176	      *" $absdir "*) ;;
8177	      *) func_append compile_rpath " $absdir" ;;
8178	      esac
8179	      ;;
8180	    esac
8181	    case " $sys_lib_dlsearch_path " in
8182	    *" $libdir "*) ;;
8183	    *)
8184	      case "$finalize_rpath " in
8185	      *" $libdir "*) ;;
8186	      *) func_append finalize_rpath " $libdir" ;;
8187	      esac
8188	      ;;
8189	    esac
8190	  fi
8191
8192	  if test -n "$old_archive_from_expsyms_cmds"; then
8193	    # figure out the soname
8194	    set dummy $library_names
8195	    shift
8196	    realname=$1
8197	    shift
8198	    libname=`eval "\\$ECHO \"$libname_spec\""`
8199	    # use dlname if we got it. it's perfectly good, no?
8200	    if test -n "$dlname"; then
8201	      soname=$dlname
8202	    elif test -n "$soname_spec"; then
8203	      # bleh windows
8204	      case $host in
8205	      *cygwin* | mingw* | *cegcc* | *os2*)
8206	        func_arith $current - $age
8207		major=$func_arith_result
8208		versuffix=-$major
8209		;;
8210	      esac
8211	      eval soname=\"$soname_spec\"
8212	    else
8213	      soname=$realname
8214	    fi
8215
8216	    # Make a new name for the extract_expsyms_cmds to use
8217	    soroot=$soname
8218	    func_basename "$soroot"
8219	    soname=$func_basename_result
8220	    func_stripname 'lib' '.dll' "$soname"
8221	    newlib=libimp-$func_stripname_result.a
8222
8223	    # If the library has no export list, then create one now
8224	    if test -f "$output_objdir/$soname-def"; then :
8225	    else
8226	      func_verbose "extracting exported symbol list from '$soname'"
8227	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
8228	    fi
8229
8230	    # Create $newlib
8231	    if test -f "$output_objdir/$newlib"; then :; else
8232	      func_verbose "generating import library for '$soname'"
8233	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
8234	    fi
8235	    # make sure the library variables are pointing to the new library
8236	    dir=$output_objdir
8237	    linklib=$newlib
8238	  fi # test -n "$old_archive_from_expsyms_cmds"
8239
8240	  if test prog = "$linkmode" || test relink != "$opt_mode"; then
8241	    add_shlibpath=
8242	    add_dir=
8243	    add=
8244	    lib_linked=yes
8245	    case $hardcode_action in
8246	    immediate | unsupported)
8247	      if test no = "$hardcode_direct"; then
8248		add=$dir/$linklib
8249		case $host in
8250		  *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
8251		  *-*-sysv4*uw2*) add_dir=-L$dir ;;
8252		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
8253		    *-*-unixware7*) add_dir=-L$dir ;;
8254		  *-*-darwin* )
8255		    # if the lib is a (non-dlopened) module then we cannot
8256		    # link against it, someone is ignoring the earlier warnings
8257		    if /usr/bin/file -L $add 2> /dev/null |
8258			 $GREP ": [^:]* bundle" >/dev/null; then
8259		      if test "X$dlopenmodule" != "X$lib"; then
8260			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
8261			if test -z "$old_library"; then
8262			  echo
8263			  echo "*** And there doesn't seem to be a static archive available"
8264			  echo "*** The link will probably fail, sorry"
8265			else
8266			  add=$dir/$old_library
8267			fi
8268		      elif test -n "$old_library"; then
8269			add=$dir/$old_library
8270		      fi
8271		    fi
8272		esac
8273	      elif test no = "$hardcode_minus_L"; then
8274		case $host in
8275		*-*-sunos*) add_shlibpath=$dir ;;
8276		esac
8277		add_dir=-L$dir
8278		add=-l$name
8279	      elif test no = "$hardcode_shlibpath_var"; then
8280		add_shlibpath=$dir
8281		add=-l$name
8282	      else
8283		lib_linked=no
8284	      fi
8285	      ;;
8286	    relink)
8287	      if test yes = "$hardcode_direct" &&
8288	         test no = "$hardcode_direct_absolute"; then
8289		add=$dir/$linklib
8290	      elif test yes = "$hardcode_minus_L"; then
8291		add_dir=-L$absdir
8292		# Try looking first in the location we're being installed to.
8293		if test -n "$inst_prefix_dir"; then
8294		  case $libdir in
8295		    [\\/]*)
8296		      func_append add_dir " -L$inst_prefix_dir$libdir"
8297		      ;;
8298		  esac
8299		fi
8300		add=-l$name
8301	      elif test yes = "$hardcode_shlibpath_var"; then
8302		add_shlibpath=$dir
8303		add=-l$name
8304	      else
8305		lib_linked=no
8306	      fi
8307	      ;;
8308	    *) lib_linked=no ;;
8309	    esac
8310
8311	    if test yes != "$lib_linked"; then
8312	      func_fatal_configuration "unsupported hardcode properties"
8313	    fi
8314
8315	    if test -n "$add_shlibpath"; then
8316	      case :$compile_shlibpath: in
8317	      *":$add_shlibpath:"*) ;;
8318	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
8319	      esac
8320	    fi
8321	    if test prog = "$linkmode"; then
8322	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
8323	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
8324	    else
8325	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8326	      test -n "$add" && deplibs="$add $deplibs"
8327	      if test yes != "$hardcode_direct" &&
8328		 test yes != "$hardcode_minus_L" &&
8329		 test yes = "$hardcode_shlibpath_var"; then
8330		case :$finalize_shlibpath: in
8331		*":$libdir:"*) ;;
8332		*) func_append finalize_shlibpath "$libdir:" ;;
8333		esac
8334	      fi
8335	    fi
8336	  fi
8337
8338	  if test prog = "$linkmode" || test relink = "$opt_mode"; then
8339	    add_shlibpath=
8340	    add_dir=
8341	    add=
8342	    # Finalize command for both is simple: just hardcode it.
8343	    if test yes = "$hardcode_direct" &&
8344	       test no = "$hardcode_direct_absolute"; then
8345	      add=$libdir/$linklib
8346	    elif test yes = "$hardcode_minus_L"; then
8347	      add_dir=-L$libdir
8348	      add=-l$name
8349	    elif test yes = "$hardcode_shlibpath_var"; then
8350	      case :$finalize_shlibpath: in
8351	      *":$libdir:"*) ;;
8352	      *) func_append finalize_shlibpath "$libdir:" ;;
8353	      esac
8354	      add=-l$name
8355	    elif test yes = "$hardcode_automatic"; then
8356	      if test -n "$inst_prefix_dir" &&
8357		 test -f "$inst_prefix_dir$libdir/$linklib"; then
8358		add=$inst_prefix_dir$libdir/$linklib
8359	      else
8360		add=$libdir/$linklib
8361	      fi
8362	    else
8363	      # We cannot seem to hardcode it, guess we'll fake it.
8364	      add_dir=-L$libdir
8365	      # Try looking first in the location we're being installed to.
8366	      if test -n "$inst_prefix_dir"; then
8367		case $libdir in
8368		  [\\/]*)
8369		    func_append add_dir " -L$inst_prefix_dir$libdir"
8370		    ;;
8371		esac
8372	      fi
8373	      add=-l$name
8374	    fi
8375
8376	    if test prog = "$linkmode"; then
8377	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
8378	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
8379	    else
8380	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8381	      test -n "$add" && deplibs="$add $deplibs"
8382	    fi
8383	  fi
8384	elif test prog = "$linkmode"; then
8385	  # Here we assume that one of hardcode_direct or hardcode_minus_L
8386	  # is not unsupported.  This is valid on all known static and
8387	  # shared platforms.
8388	  if test unsupported != "$hardcode_direct"; then
8389	    test -n "$old_library" && linklib=$old_library
8390	    compile_deplibs="$dir/$linklib $compile_deplibs"
8391	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
8392	  else
8393	    compile_deplibs="-l$name -L$dir $compile_deplibs"
8394	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
8395	  fi
8396	elif test yes = "$build_libtool_libs"; then
8397	  # Not a shared library
8398	  if test pass_all != "$deplibs_check_method"; then
8399	    # We're trying link a shared library against a static one
8400	    # but the system doesn't support it.
8401
8402	    # Just print a warning and add the library to dependency_libs so
8403	    # that the program can be linked against the static library.
8404	    echo
8405	    $ECHO "*** Warning: This system cannot link to static lib archive $lib."
8406	    echo "*** I have the capability to make that library automatically link in when"
8407	    echo "*** you link to this library.  But I can only do this if you have a"
8408	    echo "*** shared version of the library, which you do not appear to have."
8409	    if test yes = "$module"; then
8410	      echo "*** But as you try to build a module library, libtool will still create "
8411	      echo "*** a static module, that should work as long as the dlopening application"
8412	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
8413	      if test -z "$global_symbol_pipe"; then
8414		echo
8415		echo "*** However, this would only work if libtool was able to extract symbol"
8416		echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
8417		echo "*** not find such a program.  So, this module is probably useless."
8418		echo "*** 'nm' from GNU binutils and a full rebuild may help."
8419	      fi
8420	      if test no = "$build_old_libs"; then
8421		build_libtool_libs=module
8422		build_old_libs=yes
8423	      else
8424		build_libtool_libs=no
8425	      fi
8426	    fi
8427	  else
8428	    deplibs="$dir/$old_library $deplibs"
8429	    link_static=yes
8430	  fi
8431	fi # link shared/static library?
8432
8433	if test lib = "$linkmode"; then
8434	  if test -n "$dependency_libs" &&
8435	     { test yes != "$hardcode_into_libs" ||
8436	       test yes = "$build_old_libs" ||
8437	       test yes = "$link_static"; }; then
8438	    # Extract -R from dependency_libs
8439	    temp_deplibs=
8440	    for libdir in $dependency_libs; do
8441	      case $libdir in
8442	      -R*) func_stripname '-R' '' "$libdir"
8443	           temp_xrpath=$func_stripname_result
8444		   case " $xrpath " in
8445		   *" $temp_xrpath "*) ;;
8446		   *) func_append xrpath " $temp_xrpath";;
8447		   esac;;
8448	      *) func_append temp_deplibs " $libdir";;
8449	      esac
8450	    done
8451	    dependency_libs=$temp_deplibs
8452	  fi
8453
8454	  func_append newlib_search_path " $absdir"
8455	  # Link against this library
8456	  test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
8457	  # ... and its dependency_libs
8458	  tmp_libs=
8459	  for deplib in $dependency_libs; do
8460	    newdependency_libs="$deplib $newdependency_libs"
8461	    case $deplib in
8462              -L*) func_stripname '-L' '' "$deplib"
8463                   func_resolve_sysroot "$func_stripname_result";;
8464              *) func_resolve_sysroot "$deplib" ;;
8465            esac
8466	    if $opt_preserve_dup_deps; then
8467	      case "$tmp_libs " in
8468	      *" $func_resolve_sysroot_result "*)
8469                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
8470	      esac
8471	    fi
8472	    func_append tmp_libs " $func_resolve_sysroot_result"
8473	  done
8474
8475	  if test no != "$link_all_deplibs"; then
8476	    # Add the search paths of all dependency libraries
8477	    for deplib in $dependency_libs; do
8478	      path=
8479	      case $deplib in
8480	      -L*) path=$deplib ;;
8481	      *.la)
8482	        func_resolve_sysroot "$deplib"
8483	        deplib=$func_resolve_sysroot_result
8484	        func_dirname "$deplib" "" "."
8485		dir=$func_dirname_result
8486		# We need an absolute path.
8487		case $dir in
8488		[\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
8489		*)
8490		  absdir=`cd "$dir" && pwd`
8491		  if test -z "$absdir"; then
8492		    func_warning "cannot determine absolute directory name of '$dir'"
8493		    absdir=$dir
8494		  fi
8495		  ;;
8496		esac
8497		if $GREP "^installed=no" $deplib > /dev/null; then
8498		case $host in
8499		*-*-darwin*)
8500		  depdepl=
8501		  eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
8502		  if test -n "$deplibrary_names"; then
8503		    for tmp in $deplibrary_names; do
8504		      depdepl=$tmp
8505		    done
8506		    if test -f "$absdir/$objdir/$depdepl"; then
8507		      depdepl=$absdir/$objdir/$depdepl
8508		      darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
8509                      if test -z "$darwin_install_name"; then
8510                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
8511                      fi
8512		      func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
8513		      func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
8514		      path=
8515		    fi
8516		  fi
8517		  ;;
8518		*)
8519		  path=-L$absdir/$objdir
8520		  ;;
8521		esac
8522		else
8523		  eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
8524		  test -z "$libdir" && \
8525		    func_fatal_error "'$deplib' is not a valid libtool archive"
8526		  test "$absdir" != "$libdir" && \
8527		    func_warning "'$deplib' seems to be moved"
8528
8529		  path=-L$absdir
8530		fi
8531		;;
8532	      esac
8533	      case " $deplibs " in
8534	      *" $path "*) ;;
8535	      *) deplibs="$path $deplibs" ;;
8536	      esac
8537	    done
8538	  fi # link_all_deplibs != no
8539	fi # linkmode = lib
8540      done # for deplib in $libs
8541      if test link = "$pass"; then
8542	if test prog = "$linkmode"; then
8543	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
8544	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
8545	else
8546	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8547	fi
8548      fi
8549      dependency_libs=$newdependency_libs
8550      if test dlpreopen = "$pass"; then
8551	# Link the dlpreopened libraries before other libraries
8552	for deplib in $save_deplibs; do
8553	  deplibs="$deplib $deplibs"
8554	done
8555      fi
8556      if test dlopen != "$pass"; then
8557	test conv = "$pass" || {
8558	  # Make sure lib_search_path contains only unique directories.
8559	  lib_search_path=
8560	  for dir in $newlib_search_path; do
8561	    case "$lib_search_path " in
8562	    *" $dir "*) ;;
8563	    *) func_append lib_search_path " $dir" ;;
8564	    esac
8565	  done
8566	  newlib_search_path=
8567	}
8568
8569	if test prog,link = "$linkmode,$pass"; then
8570	  vars="compile_deplibs finalize_deplibs"
8571	else
8572	  vars=deplibs
8573	fi
8574	for var in $vars dependency_libs; do
8575	  # Add libraries to $var in reverse order
8576	  eval tmp_libs=\"\$$var\"
8577	  new_libs=
8578	  for deplib in $tmp_libs; do
8579	    # FIXME: Pedantically, this is the right thing to do, so
8580	    #        that some nasty dependency loop isn't accidentally
8581	    #        broken:
8582	    #new_libs="$deplib $new_libs"
8583	    # Pragmatically, this seems to cause very few problems in
8584	    # practice:
8585	    case $deplib in
8586	    -L*) new_libs="$deplib $new_libs" ;;
8587	    -R*) ;;
8588	    *)
8589	      # And here is the reason: when a library appears more
8590	      # than once as an explicit dependence of a library, or
8591	      # is implicitly linked in more than once by the
8592	      # compiler, it is considered special, and multiple
8593	      # occurrences thereof are not removed.  Compare this
8594	      # with having the same library being listed as a
8595	      # dependency of multiple other libraries: in this case,
8596	      # we know (pedantically, we assume) the library does not
8597	      # need to be listed more than once, so we keep only the
8598	      # last copy.  This is not always right, but it is rare
8599	      # enough that we require users that really mean to play
8600	      # such unportable linking tricks to link the library
8601	      # using -Wl,-lname, so that libtool does not consider it
8602	      # for duplicate removal.
8603	      case " $specialdeplibs " in
8604	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
8605	      *)
8606		case " $new_libs " in
8607		*" $deplib "*) ;;
8608		*) new_libs="$deplib $new_libs" ;;
8609		esac
8610		;;
8611	      esac
8612	      ;;
8613	    esac
8614	  done
8615	  tmp_libs=
8616	  for deplib in $new_libs; do
8617	    case $deplib in
8618	    -L*)
8619	      case " $tmp_libs " in
8620	      *" $deplib "*) ;;
8621	      *) func_append tmp_libs " $deplib" ;;
8622	      esac
8623	      ;;
8624	    *) func_append tmp_libs " $deplib" ;;
8625	    esac
8626	  done
8627	  eval $var=\"$tmp_libs\"
8628	done # for var
8629      fi
8630
8631      # Add Sun CC postdeps if required:
8632      test CXX = "$tagname" && {
8633        case $host_os in
8634        linux*)
8635          case `$CC -V 2>&1 | sed 5q` in
8636          *Sun\ C*) # Sun C++ 5.9
8637            func_suncc_cstd_abi
8638
8639            if test no != "$suncc_use_cstd_abi"; then
8640              func_append postdeps ' -library=Cstd -library=Crun'
8641            fi
8642            ;;
8643          esac
8644          ;;
8645
8646        solaris*)
8647          func_cc_basename "$CC"
8648          case $func_cc_basename_result in
8649          CC* | sunCC*)
8650            func_suncc_cstd_abi
8651
8652            if test no != "$suncc_use_cstd_abi"; then
8653              func_append postdeps ' -library=Cstd -library=Crun'
8654            fi
8655            ;;
8656          esac
8657          ;;
8658        esac
8659      }
8660
8661      # Last step: remove runtime libs from dependency_libs
8662      # (they stay in deplibs)
8663      tmp_libs=
8664      for i in $dependency_libs; do
8665	case " $predeps $postdeps $compiler_lib_search_path " in
8666	*" $i "*)
8667	  i=
8668	  ;;
8669	esac
8670	if test -n "$i"; then
8671	  func_append tmp_libs " $i"
8672	fi
8673      done
8674      dependency_libs=$tmp_libs
8675    done # for pass
8676    if test prog = "$linkmode"; then
8677      dlfiles=$newdlfiles
8678    fi
8679    if test prog = "$linkmode" || test lib = "$linkmode"; then
8680      dlprefiles=$newdlprefiles
8681    fi
8682
8683    case $linkmode in
8684    oldlib)
8685      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
8686	func_warning "'-dlopen' is ignored for archives"
8687      fi
8688
8689      case " $deplibs" in
8690      *\ -l* | *\ -L*)
8691	func_warning "'-l' and '-L' are ignored for archives" ;;
8692      esac
8693
8694      test -n "$rpath" && \
8695	func_warning "'-rpath' is ignored for archives"
8696
8697      test -n "$xrpath" && \
8698	func_warning "'-R' is ignored for archives"
8699
8700      test -n "$vinfo" && \
8701	func_warning "'-version-info/-version-number' is ignored for archives"
8702
8703      test -n "$release" && \
8704	func_warning "'-release' is ignored for archives"
8705
8706      test -n "$export_symbols$export_symbols_regex" && \
8707	func_warning "'-export-symbols' is ignored for archives"
8708
8709      # Now set the variables for building old libraries.
8710      build_libtool_libs=no
8711      oldlibs=$output
8712      func_append objs "$old_deplibs"
8713      ;;
8714
8715    lib)
8716      # Make sure we only generate libraries of the form 'libNAME.la'.
8717      case $outputname in
8718      lib*)
8719	func_stripname 'lib' '.la' "$outputname"
8720	name=$func_stripname_result
8721	eval shared_ext=\"$shrext_cmds\"
8722	eval libname=\"$libname_spec\"
8723	;;
8724      *)
8725	test no = "$module" \
8726	  && func_fatal_help "libtool library '$output' must begin with 'lib'"
8727
8728	if test no != "$need_lib_prefix"; then
8729	  # Add the "lib" prefix for modules if required
8730	  func_stripname '' '.la' "$outputname"
8731	  name=$func_stripname_result
8732	  eval shared_ext=\"$shrext_cmds\"
8733	  eval libname=\"$libname_spec\"
8734	else
8735	  func_stripname '' '.la' "$outputname"
8736	  libname=$func_stripname_result
8737	fi
8738	;;
8739      esac
8740
8741      if test -n "$objs"; then
8742	if test pass_all != "$deplibs_check_method"; then
8743	  func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
8744	else
8745	  echo
8746	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
8747	  $ECHO "*** objects $objs is not portable!"
8748	  func_append libobjs " $objs"
8749	fi
8750      fi
8751
8752      test no = "$dlself" \
8753	|| func_warning "'-dlopen self' is ignored for libtool libraries"
8754
8755      set dummy $rpath
8756      shift
8757      test 1 -lt "$#" \
8758	&& func_warning "ignoring multiple '-rpath's for a libtool library"
8759
8760      install_libdir=$1
8761
8762      oldlibs=
8763      if test -z "$rpath"; then
8764	if test yes = "$build_libtool_libs"; then
8765	  # Building a libtool convenience library.
8766	  # Some compilers have problems with a '.al' extension so
8767	  # convenience libraries should have the same extension an
8768	  # archive normally would.
8769	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
8770	  build_libtool_libs=convenience
8771	  build_old_libs=yes
8772	fi
8773
8774	test -n "$vinfo" && \
8775	  func_warning "'-version-info/-version-number' is ignored for convenience libraries"
8776
8777	test -n "$release" && \
8778	  func_warning "'-release' is ignored for convenience libraries"
8779      else
8780
8781	# Parse the version information argument.
8782	save_ifs=$IFS; IFS=:
8783	set dummy $vinfo 0 0 0
8784	shift
8785	IFS=$save_ifs
8786
8787	test -n "$7" && \
8788	  func_fatal_help "too many parameters to '-version-info'"
8789
8790	# convert absolute version numbers to libtool ages
8791	# this retains compatibility with .la files and attempts
8792	# to make the code below a bit more comprehensible
8793
8794	case $vinfo_number in
8795	yes)
8796	  number_major=$1
8797	  number_minor=$2
8798	  number_revision=$3
8799	  #
8800	  # There are really only two kinds -- those that
8801	  # use the current revision as the major version
8802	  # and those that subtract age and use age as
8803	  # a minor version.  But, then there is irix
8804	  # that has an extra 1 added just for fun
8805	  #
8806	  case $version_type in
8807	  # correct linux to gnu/linux during the next big refactor
8808	  darwin|freebsd-elf|linux|osf|windows|none)
8809	    func_arith $number_major + $number_minor
8810	    current=$func_arith_result
8811	    age=$number_minor
8812	    revision=$number_revision
8813	    ;;
8814	  freebsd-aout|qnx|sunos)
8815	    current=$number_major
8816	    revision=$number_minor
8817	    age=0
8818	    ;;
8819	  irix|nonstopux)
8820	    func_arith $number_major + $number_minor
8821	    current=$func_arith_result
8822	    age=$number_minor
8823	    revision=$number_minor
8824	    lt_irix_increment=no
8825	    ;;
8826	  esac
8827	  ;;
8828	no)
8829	  current=$1
8830	  revision=$2
8831	  age=$3
8832	  ;;
8833	esac
8834
8835	# Check that each of the things are valid numbers.
8836	case $current in
8837	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]) ;;
8838	*)
8839	  func_error "CURRENT '$current' must be a nonnegative integer"
8840	  func_fatal_error "'$vinfo' is not valid version information"
8841	  ;;
8842	esac
8843
8844	case $revision in
8845	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]) ;;
8846	*)
8847	  func_error "REVISION '$revision' must be a nonnegative integer"
8848	  func_fatal_error "'$vinfo' is not valid version information"
8849	  ;;
8850	esac
8851
8852	case $age in
8853	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]) ;;
8854	*)
8855	  func_error "AGE '$age' must be a nonnegative integer"
8856	  func_fatal_error "'$vinfo' is not valid version information"
8857	  ;;
8858	esac
8859
8860	if test "$age" -gt "$current"; then
8861	  func_error "AGE '$age' is greater than the current interface number '$current'"
8862	  func_fatal_error "'$vinfo' is not valid version information"
8863	fi
8864
8865	# Calculate the version variables.
8866	major=
8867	versuffix=
8868	verstring=
8869	case $version_type in
8870	none) ;;
8871
8872	darwin)
8873	  # Like Linux, but with the current version available in
8874	  # verstring for coding it into the library header
8875	  func_arith $current - $age
8876	  major=.$func_arith_result
8877	  versuffix=$major.$age.$revision
8878	  # Darwin ld doesn't like 0 for these options...
8879	  func_arith $current + 1
8880	  minor_current=$func_arith_result
8881	  xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
8882	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
8883          # On Darwin other compilers
8884          case $CC in
8885              nagfor*)
8886                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
8887                  ;;
8888              *)
8889                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
8890                  ;;
8891          esac
8892	  ;;
8893
8894	freebsd-aout)
8895	  major=.$current
8896	  versuffix=.$current.$revision
8897	  ;;
8898
8899	freebsd-elf)
8900	  func_arith $current - $age
8901	  major=.$func_arith_result
8902	  versuffix=$major.$age.$revision
8903	  ;;
8904
8905	irix | nonstopux)
8906	  if test no = "$lt_irix_increment"; then
8907	    func_arith $current - $age
8908	  else
8909	    func_arith $current - $age + 1
8910	  fi
8911	  major=$func_arith_result
8912
8913	  case $version_type in
8914	    nonstopux) verstring_prefix=nonstopux ;;
8915	    *)         verstring_prefix=sgi ;;
8916	  esac
8917	  verstring=$verstring_prefix$major.$revision
8918
8919	  # Add in all the interfaces that we are compatible with.
8920	  loop=$revision
8921	  while test 0 -ne "$loop"; do
8922	    func_arith $revision - $loop
8923	    iface=$func_arith_result
8924	    func_arith $loop - 1
8925	    loop=$func_arith_result
8926	    verstring=$verstring_prefix$major.$iface:$verstring
8927	  done
8928
8929	  # Before this point, $major must not contain '.'.
8930	  major=.$major
8931	  versuffix=$major.$revision
8932	  ;;
8933
8934	linux) # correct to gnu/linux during the next big refactor
8935	  func_arith $current - $age
8936	  major=.$func_arith_result
8937	  versuffix=$major.$age.$revision
8938	  ;;
8939
8940	osf)
8941	  func_arith $current - $age
8942	  major=.$func_arith_result
8943	  versuffix=.$current.$age.$revision
8944	  verstring=$current.$age.$revision
8945
8946	  # Add in all the interfaces that we are compatible with.
8947	  loop=$age
8948	  while test 0 -ne "$loop"; do
8949	    func_arith $current - $loop
8950	    iface=$func_arith_result
8951	    func_arith $loop - 1
8952	    loop=$func_arith_result
8953	    verstring=$verstring:$iface.0
8954	  done
8955
8956	  # Make executables depend on our current version.
8957	  func_append verstring ":$current.0"
8958	  ;;
8959
8960	qnx)
8961	  major=.$current
8962	  versuffix=.$current
8963	  ;;
8964
8965	sco)
8966	  major=.$current
8967	  versuffix=.$current
8968	  ;;
8969
8970	sunos)
8971	  major=.$current
8972	  versuffix=.$current.$revision
8973	  ;;
8974
8975	windows)
8976	  # Use '-' rather than '.', since we only want one
8977	  # extension on DOS 8.3 file systems.
8978	  func_arith $current - $age
8979	  major=$func_arith_result
8980	  versuffix=-$major
8981	  ;;
8982
8983	*)
8984	  func_fatal_configuration "unknown library version type '$version_type'"
8985	  ;;
8986	esac
8987
8988	# Clear the version info if we defaulted, and they specified a release.
8989	if test -z "$vinfo" && test -n "$release"; then
8990	  major=
8991	  case $version_type in
8992	  darwin)
8993	    # we can't check for "0.0" in archive_cmds due to quoting
8994	    # problems, so we reset it completely
8995	    verstring=
8996	    ;;
8997	  *)
8998	    verstring=0.0
8999	    ;;
9000	  esac
9001	  if test no = "$need_version"; then
9002	    versuffix=
9003	  else
9004	    versuffix=.0.0
9005	  fi
9006	fi
9007
9008	# Remove version info from name if versioning should be avoided
9009	if test yes,no = "$avoid_version,$need_version"; then
9010	  major=
9011	  versuffix=
9012	  verstring=
9013	fi
9014
9015	# Check to see if the archive will have undefined symbols.
9016	if test yes = "$allow_undefined"; then
9017	  if test unsupported = "$allow_undefined_flag"; then
9018	    if test yes = "$build_old_libs"; then
9019	      func_warning "undefined symbols not allowed in $host shared libraries; building static only"
9020	      build_libtool_libs=no
9021	    else
9022	      func_fatal_error "can't build $host shared library unless -no-undefined is specified"
9023	    fi
9024	  fi
9025	else
9026	  # Don't allow undefined symbols.
9027	  allow_undefined_flag=$no_undefined_flag
9028	fi
9029
9030      fi
9031
9032      func_generate_dlsyms "$libname" "$libname" :
9033      func_append libobjs " $symfileobj"
9034      test " " = "$libobjs" && libobjs=
9035
9036      if test relink != "$opt_mode"; then
9037	# Remove our outputs, but don't remove object files since they
9038	# may have been created when compiling PIC objects.
9039	removelist=
9040	tempremovelist=`$ECHO "$output_objdir/*"`
9041	for p in $tempremovelist; do
9042	  case $p in
9043	    *.$objext | *.gcno)
9044	       ;;
9045	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
9046	       if test -n "$precious_files_regex"; then
9047		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
9048		 then
9049		   continue
9050		 fi
9051	       fi
9052	       func_append removelist " $p"
9053	       ;;
9054	    *) ;;
9055	  esac
9056	done
9057	test -n "$removelist" && \
9058	  func_show_eval "${RM}r \$removelist"
9059      fi
9060
9061      # Now set the variables for building old libraries.
9062      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
9063	func_append oldlibs " $output_objdir/$libname.$libext"
9064
9065	# Transform .lo files to .o files.
9066	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
9067      fi
9068
9069      # Eliminate all temporary directories.
9070      #for path in $notinst_path; do
9071      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
9072      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
9073      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
9074      #done
9075
9076      if test -n "$xrpath"; then
9077	# If the user specified any rpath flags, then add them.
9078	temp_xrpath=
9079	for libdir in $xrpath; do
9080	  func_replace_sysroot "$libdir"
9081	  func_append temp_xrpath " -R$func_replace_sysroot_result"
9082	  case "$finalize_rpath " in
9083	  *" $libdir "*) ;;
9084	  *) func_append finalize_rpath " $libdir" ;;
9085	  esac
9086	done
9087	if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
9088	  dependency_libs="$temp_xrpath $dependency_libs"
9089	fi
9090      fi
9091
9092      # Make sure dlfiles contains only unique files that won't be dlpreopened
9093      old_dlfiles=$dlfiles
9094      dlfiles=
9095      for lib in $old_dlfiles; do
9096	case " $dlprefiles $dlfiles " in
9097	*" $lib "*) ;;
9098	*) func_append dlfiles " $lib" ;;
9099	esac
9100      done
9101
9102      # Make sure dlprefiles contains only unique files
9103      old_dlprefiles=$dlprefiles
9104      dlprefiles=
9105      for lib in $old_dlprefiles; do
9106	case "$dlprefiles " in
9107	*" $lib "*) ;;
9108	*) func_append dlprefiles " $lib" ;;
9109	esac
9110      done
9111
9112      if test yes = "$build_libtool_libs"; then
9113	if test -n "$rpath"; then
9114	  case $host in
9115	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
9116	    # these systems don't actually have a c library (as such)!
9117	    ;;
9118	  *-*-rhapsody* | *-*-darwin1.[012])
9119	    # Rhapsody C library is in the System framework
9120	    func_append deplibs " System.ltframework"
9121	    ;;
9122	  *-*-netbsd*)
9123	    # Don't link with libc until the a.out ld.so is fixed.
9124	    ;;
9125	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
9126	    # Do not include libc due to us having libc/libc_r.
9127	    ;;
9128	  *-*-sco3.2v5* | *-*-sco5v6*)
9129	    # Causes problems with __ctype
9130	    ;;
9131	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
9132	    # Compiler inserts libc in the correct place for threads to work
9133	    ;;
9134	  *)
9135	    # Add libc to deplibs on all other systems if necessary.
9136	    if test yes = "$build_libtool_need_lc"; then
9137	      func_append deplibs " -lc"
9138	    fi
9139	    ;;
9140	  esac
9141	fi
9142
9143	# Transform deplibs into only deplibs that can be linked in shared.
9144	name_save=$name
9145	libname_save=$libname
9146	release_save=$release
9147	versuffix_save=$versuffix
9148	major_save=$major
9149	# I'm not sure if I'm treating the release correctly.  I think
9150	# release should show up in the -l (ie -lgmp5) so we don't want to
9151	# add it in twice.  Is that correct?
9152	release=
9153	versuffix=
9154	major=
9155	newdeplibs=
9156	droppeddeps=no
9157	case $deplibs_check_method in
9158	pass_all)
9159	  # Don't check for shared/static.  Everything works.
9160	  # This might be a little naive.  We might want to check
9161	  # whether the library exists or not.  But this is on
9162	  # osf3 & osf4 and I'm not really sure... Just
9163	  # implementing what was already the behavior.
9164	  newdeplibs=$deplibs
9165	  ;;
9166	test_compile)
9167	  # This code stresses the "libraries are programs" paradigm to its
9168	  # limits. Maybe even breaks it.  We compile a program, linking it
9169	  # against the deplibs as a proxy for the library.  Then we can check
9170	  # whether they linked in statically or dynamically with ldd.
9171	  $opt_dry_run || $RM conftest.c
9172	  cat > conftest.c <<EOF
9173	  int main() { return 0; }
9174EOF
9175	  $opt_dry_run || $RM conftest
9176	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
9177	    ldd_output=`ldd conftest`
9178	    for i in $deplibs; do
9179	      case $i in
9180	      -l*)
9181		func_stripname -l '' "$i"
9182		name=$func_stripname_result
9183		if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9184		  case " $predeps $postdeps " in
9185		  *" $i "*)
9186		    func_append newdeplibs " $i"
9187		    i=
9188		    ;;
9189		  esac
9190		fi
9191		if test -n "$i"; then
9192		  libname=`eval "\\$ECHO \"$libname_spec\""`
9193		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9194		  set dummy $deplib_matches; shift
9195		  deplib_match=$1
9196		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9197		    func_append newdeplibs " $i"
9198		  else
9199		    droppeddeps=yes
9200		    echo
9201		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
9202		    echo "*** I have the capability to make that library automatically link in when"
9203		    echo "*** you link to this library.  But I can only do this if you have a"
9204		    echo "*** shared version of the library, which I believe you do not have"
9205		    echo "*** because a test_compile did reveal that the linker did not use it for"
9206		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
9207		  fi
9208		fi
9209		;;
9210	      *)
9211		func_append newdeplibs " $i"
9212		;;
9213	      esac
9214	    done
9215	  else
9216	    # Error occurred in the first compile.  Let's try to salvage
9217	    # the situation: Compile a separate program for each library.
9218	    for i in $deplibs; do
9219	      case $i in
9220	      -l*)
9221		func_stripname -l '' "$i"
9222		name=$func_stripname_result
9223		$opt_dry_run || $RM conftest
9224		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
9225		  ldd_output=`ldd conftest`
9226		  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9227		    case " $predeps $postdeps " in
9228		    *" $i "*)
9229		      func_append newdeplibs " $i"
9230		      i=
9231		      ;;
9232		    esac
9233		  fi
9234		  if test -n "$i"; then
9235		    libname=`eval "\\$ECHO \"$libname_spec\""`
9236		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9237		    set dummy $deplib_matches; shift
9238		    deplib_match=$1
9239		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9240		      func_append newdeplibs " $i"
9241		    else
9242		      droppeddeps=yes
9243		      echo
9244		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
9245		      echo "*** I have the capability to make that library automatically link in when"
9246		      echo "*** you link to this library.  But I can only do this if you have a"
9247		      echo "*** shared version of the library, which you do not appear to have"
9248		      echo "*** because a test_compile did reveal that the linker did not use this one"
9249		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
9250		    fi
9251		  fi
9252		else
9253		  droppeddeps=yes
9254		  echo
9255		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
9256		  echo "*** make it link in!  You will probably need to install it or some"
9257		  echo "*** library that it depends on before this library will be fully"
9258		  echo "*** functional.  Installing it before continuing would be even better."
9259		fi
9260		;;
9261	      *)
9262		func_append newdeplibs " $i"
9263		;;
9264	      esac
9265	    done
9266	  fi
9267	  ;;
9268	file_magic*)
9269	  set dummy $deplibs_check_method; shift
9270	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9271	  for a_deplib in $deplibs; do
9272	    case $a_deplib in
9273	    -l*)
9274	      func_stripname -l '' "$a_deplib"
9275	      name=$func_stripname_result
9276	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9277		case " $predeps $postdeps " in
9278		*" $a_deplib "*)
9279		  func_append newdeplibs " $a_deplib"
9280		  a_deplib=
9281		  ;;
9282		esac
9283	      fi
9284	      if test -n "$a_deplib"; then
9285		libname=`eval "\\$ECHO \"$libname_spec\""`
9286		if test -n "$file_magic_glob"; then
9287		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
9288		else
9289		  libnameglob=$libname
9290		fi
9291		test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
9292		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9293		  if test yes = "$want_nocaseglob"; then
9294		    shopt -s nocaseglob
9295		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9296		    $nocaseglob
9297		  else
9298		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9299		  fi
9300		  for potent_lib in $potential_libs; do
9301		      # Follow soft links.
9302		      if ls -lLd "$potent_lib" 2>/dev/null |
9303			 $GREP " -> " >/dev/null; then
9304			continue
9305		      fi
9306		      # The statement above tries to avoid entering an
9307		      # endless loop below, in case of cyclic links.
9308		      # We might still enter an endless loop, since a link
9309		      # loop can be closed while we follow links,
9310		      # but so what?
9311		      potlib=$potent_lib
9312		      while test -h "$potlib" 2>/dev/null; do
9313			potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
9314			case $potliblink in
9315			[\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
9316			*) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
9317			esac
9318		      done
9319		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
9320			 $SED -e 10q |
9321			 $EGREP "$file_magic_regex" > /dev/null; then
9322			func_append newdeplibs " $a_deplib"
9323			a_deplib=
9324			break 2
9325		      fi
9326		  done
9327		done
9328	      fi
9329	      if test -n "$a_deplib"; then
9330		droppeddeps=yes
9331		echo
9332		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
9333		echo "*** I have the capability to make that library automatically link in when"
9334		echo "*** you link to this library.  But I can only do this if you have a"
9335		echo "*** shared version of the library, which you do not appear to have"
9336		echo "*** because I did check the linker path looking for a file starting"
9337		if test -z "$potlib"; then
9338		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
9339		else
9340		  $ECHO "*** with $libname and none of the candidates passed a file format test"
9341		  $ECHO "*** using a file magic. Last file checked: $potlib"
9342		fi
9343	      fi
9344	      ;;
9345	    *)
9346	      # Add a -L argument.
9347	      func_append newdeplibs " $a_deplib"
9348	      ;;
9349	    esac
9350	  done # Gone through all deplibs.
9351	  ;;
9352	match_pattern*)
9353	  set dummy $deplibs_check_method; shift
9354	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9355	  for a_deplib in $deplibs; do
9356	    case $a_deplib in
9357	    -l*)
9358	      func_stripname -l '' "$a_deplib"
9359	      name=$func_stripname_result
9360	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9361		case " $predeps $postdeps " in
9362		*" $a_deplib "*)
9363		  func_append newdeplibs " $a_deplib"
9364		  a_deplib=
9365		  ;;
9366		esac
9367	      fi
9368	      if test -n "$a_deplib"; then
9369		libname=`eval "\\$ECHO \"$libname_spec\""`
9370		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9371		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
9372		  for potent_lib in $potential_libs; do
9373		    potlib=$potent_lib # see symlink-check above in file_magic test
9374		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
9375		       $EGREP "$match_pattern_regex" > /dev/null; then
9376		      func_append newdeplibs " $a_deplib"
9377		      a_deplib=
9378		      break 2
9379		    fi
9380		  done
9381		done
9382	      fi
9383	      if test -n "$a_deplib"; then
9384		droppeddeps=yes
9385		echo
9386		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
9387		echo "*** I have the capability to make that library automatically link in when"
9388		echo "*** you link to this library.  But I can only do this if you have a"
9389		echo "*** shared version of the library, which you do not appear to have"
9390		echo "*** because I did check the linker path looking for a file starting"
9391		if test -z "$potlib"; then
9392		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
9393		else
9394		  $ECHO "*** with $libname and none of the candidates passed a file format test"
9395		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
9396		fi
9397	      fi
9398	      ;;
9399	    *)
9400	      # Add a -L argument.
9401	      func_append newdeplibs " $a_deplib"
9402	      ;;
9403	    esac
9404	  done # Gone through all deplibs.
9405	  ;;
9406	none | unknown | *)
9407	  newdeplibs=
9408	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
9409	  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9410	    for i in $predeps $postdeps; do
9411	      # can't use Xsed below, because $i might contain '/'
9412	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
9413	    done
9414	  fi
9415	  case $tmp_deplibs in
9416	  *[!\	\ ]*)
9417	    echo
9418	    if test none = "$deplibs_check_method"; then
9419	      echo "*** Warning: inter-library dependencies are not supported in this platform."
9420	    else
9421	      echo "*** Warning: inter-library dependencies are not known to be supported."
9422	    fi
9423	    echo "*** All declared inter-library dependencies are being dropped."
9424	    droppeddeps=yes
9425	    ;;
9426	  esac
9427	  ;;
9428	esac
9429	versuffix=$versuffix_save
9430	major=$major_save
9431	release=$release_save
9432	libname=$libname_save
9433	name=$name_save
9434
9435	case $host in
9436	*-*-rhapsody* | *-*-darwin1.[012])
9437	  # On Rhapsody replace the C library with the System framework
9438	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
9439	  ;;
9440	esac
9441
9442	if test yes = "$droppeddeps"; then
9443	  if test yes = "$module"; then
9444	    echo
9445	    echo "*** Warning: libtool could not satisfy all declared inter-library"
9446	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
9447	    echo "*** a static module, that should work as long as the dlopening"
9448	    echo "*** application is linked with the -dlopen flag."
9449	    if test -z "$global_symbol_pipe"; then
9450	      echo
9451	      echo "*** However, this would only work if libtool was able to extract symbol"
9452	      echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
9453	      echo "*** not find such a program.  So, this module is probably useless."
9454	      echo "*** 'nm' from GNU binutils and a full rebuild may help."
9455	    fi
9456	    if test no = "$build_old_libs"; then
9457	      oldlibs=$output_objdir/$libname.$libext
9458	      build_libtool_libs=module
9459	      build_old_libs=yes
9460	    else
9461	      build_libtool_libs=no
9462	    fi
9463	  else
9464	    echo "*** The inter-library dependencies that have been dropped here will be"
9465	    echo "*** automatically added whenever a program is linked with this library"
9466	    echo "*** or is declared to -dlopen it."
9467
9468	    if test no = "$allow_undefined"; then
9469	      echo
9470	      echo "*** Since this library must not contain undefined symbols,"
9471	      echo "*** because either the platform does not support them or"
9472	      echo "*** it was explicitly requested with -no-undefined,"
9473	      echo "*** libtool will only create a static version of it."
9474	      if test no = "$build_old_libs"; then
9475		oldlibs=$output_objdir/$libname.$libext
9476		build_libtool_libs=module
9477		build_old_libs=yes
9478	      else
9479		build_libtool_libs=no
9480	      fi
9481	    fi
9482	  fi
9483	fi
9484	# Done checking deplibs!
9485	deplibs=$newdeplibs
9486      fi
9487      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
9488      case $host in
9489	*-*-darwin*)
9490	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9491	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9492	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9493	  ;;
9494      esac
9495
9496      # move library search paths that coincide with paths to not yet
9497      # installed libraries to the beginning of the library search list
9498      new_libs=
9499      for path in $notinst_path; do
9500	case " $new_libs " in
9501	*" -L$path/$objdir "*) ;;
9502	*)
9503	  case " $deplibs " in
9504	  *" -L$path/$objdir "*)
9505	    func_append new_libs " -L$path/$objdir" ;;
9506	  esac
9507	  ;;
9508	esac
9509      done
9510      for deplib in $deplibs; do
9511	case $deplib in
9512	-L*)
9513	  case " $new_libs " in
9514	  *" $deplib "*) ;;
9515	  *) func_append new_libs " $deplib" ;;
9516	  esac
9517	  ;;
9518	*) func_append new_libs " $deplib" ;;
9519	esac
9520      done
9521      deplibs=$new_libs
9522
9523      # All the library-specific variables (install_libdir is set above).
9524      library_names=
9525      old_library=
9526      dlname=
9527
9528      # Test again, we may have decided not to build it any more
9529      if test yes = "$build_libtool_libs"; then
9530	# Remove $wl instances when linking with ld.
9531	# FIXME: should test the right _cmds variable.
9532	case $archive_cmds in
9533	  *\$LD\ *) wl= ;;
9534        esac
9535	if test yes = "$hardcode_into_libs"; then
9536	  # Hardcode the library paths
9537	  hardcode_libdirs=
9538	  dep_rpath=
9539	  rpath=$finalize_rpath
9540	  test relink = "$opt_mode" || rpath=$compile_rpath$rpath
9541	  for libdir in $rpath; do
9542	    if test -n "$hardcode_libdir_flag_spec"; then
9543	      if test -n "$hardcode_libdir_separator"; then
9544		func_replace_sysroot "$libdir"
9545		libdir=$func_replace_sysroot_result
9546		if test -z "$hardcode_libdirs"; then
9547		  hardcode_libdirs=$libdir
9548		else
9549		  # Just accumulate the unique libdirs.
9550		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
9551		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
9552		    ;;
9553		  *)
9554		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
9555		    ;;
9556		  esac
9557		fi
9558	      else
9559		eval flag=\"$hardcode_libdir_flag_spec\"
9560		func_append dep_rpath " $flag"
9561	      fi
9562	    elif test -n "$runpath_var"; then
9563	      case "$perm_rpath " in
9564	      *" $libdir "*) ;;
9565	      *) func_append perm_rpath " $libdir" ;;
9566	      esac
9567	    fi
9568	  done
9569	  # Substitute the hardcoded libdirs into the rpath.
9570	  if test -n "$hardcode_libdir_separator" &&
9571	     test -n "$hardcode_libdirs"; then
9572	    libdir=$hardcode_libdirs
9573	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
9574	  fi
9575	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
9576	    # We should set the runpath_var.
9577	    rpath=
9578	    for dir in $perm_rpath; do
9579	      func_append rpath "$dir:"
9580	    done
9581	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
9582	  fi
9583	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
9584	fi
9585
9586	shlibpath=$finalize_shlibpath
9587	test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
9588	if test -n "$shlibpath"; then
9589	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
9590	fi
9591
9592	# Get the real and link names of the library.
9593	eval shared_ext=\"$shrext_cmds\"
9594	eval library_names=\"$library_names_spec\"
9595	set dummy $library_names
9596	shift
9597	realname=$1
9598	shift
9599
9600	if test -n "$soname_spec"; then
9601	  eval soname=\"$soname_spec\"
9602	else
9603	  soname=$realname
9604	fi
9605	if test -z "$dlname"; then
9606	  dlname=$soname
9607	fi
9608
9609	lib=$output_objdir/$realname
9610	linknames=
9611	for link
9612	do
9613	  func_append linknames " $link"
9614	done
9615
9616	# Use standard objects if they are pic
9617	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
9618	test "X$libobjs" = "X " && libobjs=
9619
9620	delfiles=
9621	if test -n "$export_symbols" && test -n "$include_expsyms"; then
9622	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
9623	  export_symbols=$output_objdir/$libname.uexp
9624	  func_append delfiles " $export_symbols"
9625	fi
9626
9627	orig_export_symbols=
9628	case $host_os in
9629	cygwin* | mingw* | cegcc*)
9630	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
9631	    # exporting using user supplied symfile
9632	    func_dll_def_p "$export_symbols" || {
9633	      # and it's NOT already a .def file. Must figure out
9634	      # which of the given symbols are data symbols and tag
9635	      # them as such. So, trigger use of export_symbols_cmds.
9636	      # export_symbols gets reassigned inside the "prepare
9637	      # the list of exported symbols" if statement, so the
9638	      # include_expsyms logic still works.
9639	      orig_export_symbols=$export_symbols
9640	      export_symbols=
9641	      always_export_symbols=yes
9642	    }
9643	  fi
9644	  ;;
9645	esac
9646
9647	# Prepare the list of exported symbols
9648	if test -z "$export_symbols"; then
9649	  if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
9650	    func_verbose "generating symbol list for '$libname.la'"
9651	    export_symbols=$output_objdir/$libname.exp
9652	    $opt_dry_run || $RM $export_symbols
9653	    cmds=$export_symbols_cmds
9654	    save_ifs=$IFS; IFS='~'
9655	    for cmd1 in $cmds; do
9656	      IFS=$save_ifs
9657	      # Take the normal branch if the nm_file_list_spec branch
9658	      # doesn't work or if tool conversion is not needed.
9659	      case $nm_file_list_spec~$to_tool_file_cmd in
9660		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
9661		  try_normal_branch=yes
9662		  eval cmd=\"$cmd1\"
9663		  func_len " $cmd"
9664		  len=$func_len_result
9665		  ;;
9666		*)
9667		  try_normal_branch=no
9668		  ;;
9669	      esac
9670	      if test yes = "$try_normal_branch" \
9671		 && { test "$len" -lt "$max_cmd_len" \
9672		      || test "$max_cmd_len" -le -1; }
9673	      then
9674		func_show_eval "$cmd" 'exit $?'
9675		skipped_export=false
9676	      elif test -n "$nm_file_list_spec"; then
9677		func_basename "$output"
9678		output_la=$func_basename_result
9679		save_libobjs=$libobjs
9680		save_output=$output
9681		output=$output_objdir/$output_la.nm
9682		func_to_tool_file "$output"
9683		libobjs=$nm_file_list_spec$func_to_tool_file_result
9684		func_append delfiles " $output"
9685		func_verbose "creating $NM input file list: $output"
9686		for obj in $save_libobjs; do
9687		  func_to_tool_file "$obj"
9688		  $ECHO "$func_to_tool_file_result"
9689		done > "$output"
9690		eval cmd=\"$cmd1\"
9691		func_show_eval "$cmd" 'exit $?'
9692		output=$save_output
9693		libobjs=$save_libobjs
9694		skipped_export=false
9695	      else
9696		# The command line is too long to execute in one step.
9697		func_verbose "using reloadable object file for export list..."
9698		skipped_export=:
9699		# Break out early, otherwise skipped_export may be
9700		# set to false by a later but shorter cmd.
9701		break
9702	      fi
9703	    done
9704	    IFS=$save_ifs
9705	    if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
9706	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
9707	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
9708	    fi
9709	  fi
9710	fi
9711
9712	if test -n "$export_symbols" && test -n "$include_expsyms"; then
9713	  tmp_export_symbols=$export_symbols
9714	  test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
9715	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
9716	fi
9717
9718	if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
9719	  # The given exports_symbols file has to be filtered, so filter it.
9720	  func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
9721	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
9722	  # 's' commands, which not all seds can handle. GNU sed should be fine
9723	  # though. Also, the filter scales superlinearly with the number of
9724	  # global variables. join(1) would be nice here, but unfortunately
9725	  # isn't a blessed tool.
9726	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
9727	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
9728	  export_symbols=$output_objdir/$libname.def
9729	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
9730	fi
9731
9732	tmp_deplibs=
9733	for test_deplib in $deplibs; do
9734	  case " $convenience " in
9735	  *" $test_deplib "*) ;;
9736	  *)
9737	    func_append tmp_deplibs " $test_deplib"
9738	    ;;
9739	  esac
9740	done
9741	deplibs=$tmp_deplibs
9742
9743	if test -n "$convenience"; then
9744	  if test -n "$whole_archive_flag_spec" &&
9745	    test yes = "$compiler_needs_object" &&
9746	    test -z "$libobjs"; then
9747	    # extract the archives, so we have objects to list.
9748	    # TODO: could optimize this to just extract one archive.
9749	    whole_archive_flag_spec=
9750	  fi
9751	  if test -n "$whole_archive_flag_spec"; then
9752	    save_libobjs=$libobjs
9753	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
9754	    test "X$libobjs" = "X " && libobjs=
9755	  else
9756	    gentop=$output_objdir/${outputname}x
9757	    func_append generated " $gentop"
9758
9759	    func_extract_archives $gentop $convenience
9760	    func_append libobjs " $func_extract_archives_result"
9761	    test "X$libobjs" = "X " && libobjs=
9762	  fi
9763	fi
9764
9765	if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
9766	  eval flag=\"$thread_safe_flag_spec\"
9767	  func_append linker_flags " $flag"
9768	fi
9769
9770	# Make a backup of the uninstalled library when relinking
9771	if test relink = "$opt_mode"; then
9772	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
9773	fi
9774
9775	# Do each of the archive commands.
9776	if test yes = "$module" && test -n "$module_cmds"; then
9777	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
9778	    eval test_cmds=\"$module_expsym_cmds\"
9779	    cmds=$module_expsym_cmds
9780	  else
9781	    eval test_cmds=\"$module_cmds\"
9782	    cmds=$module_cmds
9783	  fi
9784	else
9785	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
9786	    eval test_cmds=\"$archive_expsym_cmds\"
9787	    cmds=$archive_expsym_cmds
9788	  else
9789	    eval test_cmds=\"$archive_cmds\"
9790	    cmds=$archive_cmds
9791	  fi
9792	fi
9793
9794	if test : != "$skipped_export" &&
9795	   func_len " $test_cmds" &&
9796	   len=$func_len_result &&
9797	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9798	  :
9799	else
9800	  # The command line is too long to link in one step, link piecewise
9801	  # or, if using GNU ld and skipped_export is not :, use a linker
9802	  # script.
9803
9804	  # Save the value of $output and $libobjs because we want to
9805	  # use them later.  If we have whole_archive_flag_spec, we
9806	  # want to use save_libobjs as it was before
9807	  # whole_archive_flag_spec was expanded, because we can't
9808	  # assume the linker understands whole_archive_flag_spec.
9809	  # This may have to be revisited, in case too many
9810	  # convenience libraries get linked in and end up exceeding
9811	  # the spec.
9812	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
9813	    save_libobjs=$libobjs
9814	  fi
9815	  save_output=$output
9816	  func_basename "$output"
9817	  output_la=$func_basename_result
9818
9819	  # Clear the reloadable object creation command queue and
9820	  # initialize k to one.
9821	  test_cmds=
9822	  concat_cmds=
9823	  objlist=
9824	  last_robj=
9825	  k=1
9826
9827	  if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
9828	    output=$output_objdir/$output_la.lnkscript
9829	    func_verbose "creating GNU ld script: $output"
9830	    echo 'INPUT (' > $output
9831	    for obj in $save_libobjs
9832	    do
9833	      func_to_tool_file "$obj"
9834	      $ECHO "$func_to_tool_file_result" >> $output
9835	    done
9836	    echo ')' >> $output
9837	    func_append delfiles " $output"
9838	    func_to_tool_file "$output"
9839	    output=$func_to_tool_file_result
9840	  elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
9841	    output=$output_objdir/$output_la.lnk
9842	    func_verbose "creating linker input file list: $output"
9843	    : > $output
9844	    set x $save_libobjs
9845	    shift
9846	    firstobj=
9847	    if test yes = "$compiler_needs_object"; then
9848	      firstobj="$1 "
9849	      shift
9850	    fi
9851	    for obj
9852	    do
9853	      func_to_tool_file "$obj"
9854	      $ECHO "$func_to_tool_file_result" >> $output
9855	    done
9856	    func_append delfiles " $output"
9857	    func_to_tool_file "$output"
9858	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
9859	  else
9860	    if test -n "$save_libobjs"; then
9861	      func_verbose "creating reloadable object files..."
9862	      output=$output_objdir/$output_la-$k.$objext
9863	      eval test_cmds=\"$reload_cmds\"
9864	      func_len " $test_cmds"
9865	      len0=$func_len_result
9866	      len=$len0
9867
9868	      # Loop over the list of objects to be linked.
9869	      for obj in $save_libobjs
9870	      do
9871		func_len " $obj"
9872		func_arith $len + $func_len_result
9873		len=$func_arith_result
9874		if test -z "$objlist" ||
9875		   test "$len" -lt "$max_cmd_len"; then
9876		  func_append objlist " $obj"
9877		else
9878		  # The command $test_cmds is almost too long, add a
9879		  # command to the queue.
9880		  if test 1 -eq "$k"; then
9881		    # The first file doesn't have a previous command to add.
9882		    reload_objs=$objlist
9883		    eval concat_cmds=\"$reload_cmds\"
9884		  else
9885		    # All subsequent reloadable object files will link in
9886		    # the last one created.
9887		    reload_objs="$objlist $last_robj"
9888		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
9889		  fi
9890		  last_robj=$output_objdir/$output_la-$k.$objext
9891		  func_arith $k + 1
9892		  k=$func_arith_result
9893		  output=$output_objdir/$output_la-$k.$objext
9894		  objlist=" $obj"
9895		  func_len " $last_robj"
9896		  func_arith $len0 + $func_len_result
9897		  len=$func_arith_result
9898		fi
9899	      done
9900	      # Handle the remaining objects by creating one last
9901	      # reloadable object file.  All subsequent reloadable object
9902	      # files will link in the last one created.
9903	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9904	      reload_objs="$objlist $last_robj"
9905	      eval concat_cmds=\"\$concat_cmds$reload_cmds\"
9906	      if test -n "$last_robj"; then
9907	        eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
9908	      fi
9909	      func_append delfiles " $output"
9910
9911	    else
9912	      output=
9913	    fi
9914
9915	    ${skipped_export-false} && {
9916	      func_verbose "generating symbol list for '$libname.la'"
9917	      export_symbols=$output_objdir/$libname.exp
9918	      $opt_dry_run || $RM $export_symbols
9919	      libobjs=$output
9920	      # Append the command to create the export file.
9921	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9922	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
9923	      if test -n "$last_robj"; then
9924		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
9925	      fi
9926	    }
9927
9928	    test -n "$save_libobjs" &&
9929	      func_verbose "creating a temporary reloadable object file: $output"
9930
9931	    # Loop through the commands generated above and execute them.
9932	    save_ifs=$IFS; IFS='~'
9933	    for cmd in $concat_cmds; do
9934	      IFS=$save_ifs
9935	      $opt_quiet || {
9936		  func_quote_for_expand "$cmd"
9937		  eval "func_echo $func_quote_for_expand_result"
9938	      }
9939	      $opt_dry_run || eval "$cmd" || {
9940		lt_exit=$?
9941
9942		# Restore the uninstalled library and exit
9943		if test relink = "$opt_mode"; then
9944		  ( cd "$output_objdir" && \
9945		    $RM "${realname}T" && \
9946		    $MV "${realname}U" "$realname" )
9947		fi
9948
9949		exit $lt_exit
9950	      }
9951	    done
9952	    IFS=$save_ifs
9953
9954	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
9955	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
9956	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
9957	    fi
9958	  fi
9959
9960          ${skipped_export-false} && {
9961	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
9962	      tmp_export_symbols=$export_symbols
9963	      test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
9964	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
9965	    fi
9966
9967	    if test -n "$orig_export_symbols"; then
9968	      # The given exports_symbols file has to be filtered, so filter it.
9969	      func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
9970	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
9971	      # 's' commands, which not all seds can handle. GNU sed should be fine
9972	      # though. Also, the filter scales superlinearly with the number of
9973	      # global variables. join(1) would be nice here, but unfortunately
9974	      # isn't a blessed tool.
9975	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
9976	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
9977	      export_symbols=$output_objdir/$libname.def
9978	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
9979	    fi
9980	  }
9981
9982	  libobjs=$output
9983	  # Restore the value of output.
9984	  output=$save_output
9985
9986	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
9987	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
9988	    test "X$libobjs" = "X " && libobjs=
9989	  fi
9990	  # Expand the library linking commands again to reset the
9991	  # value of $libobjs for piecewise linking.
9992
9993	  # Do each of the archive commands.
9994	  if test yes = "$module" && test -n "$module_cmds"; then
9995	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
9996	      cmds=$module_expsym_cmds
9997	    else
9998	      cmds=$module_cmds
9999	    fi
10000	  else
10001	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10002	      cmds=$archive_expsym_cmds
10003	    else
10004	      cmds=$archive_cmds
10005	    fi
10006	  fi
10007	fi
10008
10009	if test -n "$delfiles"; then
10010	  # Append the command to remove temporary files to $cmds.
10011	  eval cmds=\"\$cmds~\$RM $delfiles\"
10012	fi
10013
10014	# Add any objects from preloaded convenience libraries
10015	if test -n "$dlprefiles"; then
10016	  gentop=$output_objdir/${outputname}x
10017	  func_append generated " $gentop"
10018
10019	  func_extract_archives $gentop $dlprefiles
10020	  func_append libobjs " $func_extract_archives_result"
10021	  test "X$libobjs" = "X " && libobjs=
10022	fi
10023
10024	save_ifs=$IFS; IFS='~'
10025	for cmd in $cmds; do
10026	  IFS=$sp$nl
10027	  eval cmd=\"$cmd\"
10028	  IFS=$save_ifs
10029	  $opt_quiet || {
10030	    func_quote_for_expand "$cmd"
10031	    eval "func_echo $func_quote_for_expand_result"
10032	  }
10033	  $opt_dry_run || eval "$cmd" || {
10034	    lt_exit=$?
10035
10036	    # Restore the uninstalled library and exit
10037	    if test relink = "$opt_mode"; then
10038	      ( cd "$output_objdir" && \
10039	        $RM "${realname}T" && \
10040		$MV "${realname}U" "$realname" )
10041	    fi
10042
10043	    exit $lt_exit
10044	  }
10045	done
10046	IFS=$save_ifs
10047
10048	# Restore the uninstalled library and exit
10049	if test relink = "$opt_mode"; then
10050	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
10051
10052	  if test -n "$convenience"; then
10053	    if test -z "$whole_archive_flag_spec"; then
10054	      func_show_eval '${RM}r "$gentop"'
10055	    fi
10056	  fi
10057
10058	  exit $EXIT_SUCCESS
10059	fi
10060
10061	# Create links to the real library.
10062	for linkname in $linknames; do
10063	  if test "$realname" != "$linkname"; then
10064	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
10065	  fi
10066	done
10067
10068	# If -module or -export-dynamic was specified, set the dlname.
10069	if test yes = "$module" || test yes = "$export_dynamic"; then
10070	  # On all known operating systems, these are identical.
10071	  dlname=$soname
10072	fi
10073      fi
10074      ;;
10075
10076    obj)
10077      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
10078	func_warning "'-dlopen' is ignored for objects"
10079      fi
10080
10081      case " $deplibs" in
10082      *\ -l* | *\ -L*)
10083	func_warning "'-l' and '-L' are ignored for objects" ;;
10084      esac
10085
10086      test -n "$rpath" && \
10087	func_warning "'-rpath' is ignored for objects"
10088
10089      test -n "$xrpath" && \
10090	func_warning "'-R' is ignored for objects"
10091
10092      test -n "$vinfo" && \
10093	func_warning "'-version-info' is ignored for objects"
10094
10095      test -n "$release" && \
10096	func_warning "'-release' is ignored for objects"
10097
10098      case $output in
10099      *.lo)
10100	test -n "$objs$old_deplibs" && \
10101	  func_fatal_error "cannot build library object '$output' from non-libtool objects"
10102
10103	libobj=$output
10104	func_lo2o "$libobj"
10105	obj=$func_lo2o_result
10106	;;
10107      *)
10108	libobj=
10109	obj=$output
10110	;;
10111      esac
10112
10113      # Delete the old objects.
10114      $opt_dry_run || $RM $obj $libobj
10115
10116      # Objects from convenience libraries.  This assumes
10117      # single-version convenience libraries.  Whenever we create
10118      # different ones for PIC/non-PIC, this we'll have to duplicate
10119      # the extraction.
10120      reload_conv_objs=
10121      gentop=
10122      # if reload_cmds runs $LD directly, get rid of -Wl from
10123      # whole_archive_flag_spec and hope we can get by with turning comma
10124      # into space.
10125      case $reload_cmds in
10126        *\$LD[\ \$]*) wl= ;;
10127      esac
10128      if test -n "$convenience"; then
10129	if test -n "$whole_archive_flag_spec"; then
10130	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
10131	  test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
10132	  reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
10133	else
10134	  gentop=$output_objdir/${obj}x
10135	  func_append generated " $gentop"
10136
10137	  func_extract_archives $gentop $convenience
10138	  reload_conv_objs="$reload_objs $func_extract_archives_result"
10139	fi
10140      fi
10141
10142      # If we're not building shared, we need to use non_pic_objs
10143      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
10144
10145      # Create the old-style object.
10146      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
10147
10148      output=$obj
10149      func_execute_cmds "$reload_cmds" 'exit $?'
10150
10151      # Exit if we aren't doing a library object file.
10152      if test -z "$libobj"; then
10153	if test -n "$gentop"; then
10154	  func_show_eval '${RM}r "$gentop"'
10155	fi
10156
10157	exit $EXIT_SUCCESS
10158      fi
10159
10160      test yes = "$build_libtool_libs" || {
10161	if test -n "$gentop"; then
10162	  func_show_eval '${RM}r "$gentop"'
10163	fi
10164
10165	# Create an invalid libtool object if no PIC, so that we don't
10166	# accidentally link it into a program.
10167	# $show "echo timestamp > $libobj"
10168	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
10169	exit $EXIT_SUCCESS
10170      }
10171
10172      if test -n "$pic_flag" || test default != "$pic_mode"; then
10173	# Only do commands if we really have different PIC objects.
10174	reload_objs="$libobjs $reload_conv_objs"
10175	output=$libobj
10176	func_execute_cmds "$reload_cmds" 'exit $?'
10177      fi
10178
10179      if test -n "$gentop"; then
10180	func_show_eval '${RM}r "$gentop"'
10181      fi
10182
10183      exit $EXIT_SUCCESS
10184      ;;
10185
10186    prog)
10187      case $host in
10188	*cygwin*) func_stripname '' '.exe' "$output"
10189	          output=$func_stripname_result.exe;;
10190      esac
10191      test -n "$vinfo" && \
10192	func_warning "'-version-info' is ignored for programs"
10193
10194      test -n "$release" && \
10195	func_warning "'-release' is ignored for programs"
10196
10197      $preload \
10198	&& test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
10199	&& func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
10200
10201      case $host in
10202      *-*-rhapsody* | *-*-darwin1.[012])
10203	# On Rhapsody replace the C library is the System framework
10204	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
10205	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
10206	;;
10207      esac
10208
10209      case $host in
10210      *-*-darwin*)
10211	# Don't allow lazy linking, it breaks C++ global constructors
10212	# But is supposedly fixed on 10.4 or later (yay!).
10213	if test CXX = "$tagname"; then
10214	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
10215	    10.[0123])
10216	      func_append compile_command " $wl-bind_at_load"
10217	      func_append finalize_command " $wl-bind_at_load"
10218	    ;;
10219	  esac
10220	fi
10221	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
10222	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10223	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10224	;;
10225      esac
10226
10227
10228      # move library search paths that coincide with paths to not yet
10229      # installed libraries to the beginning of the library search list
10230      new_libs=
10231      for path in $notinst_path; do
10232	case " $new_libs " in
10233	*" -L$path/$objdir "*) ;;
10234	*)
10235	  case " $compile_deplibs " in
10236	  *" -L$path/$objdir "*)
10237	    func_append new_libs " -L$path/$objdir" ;;
10238	  esac
10239	  ;;
10240	esac
10241      done
10242      for deplib in $compile_deplibs; do
10243	case $deplib in
10244	-L*)
10245	  case " $new_libs " in
10246	  *" $deplib "*) ;;
10247	  *) func_append new_libs " $deplib" ;;
10248	  esac
10249	  ;;
10250	*) func_append new_libs " $deplib" ;;
10251	esac
10252      done
10253      compile_deplibs=$new_libs
10254
10255
10256      func_append compile_command " $compile_deplibs"
10257      func_append finalize_command " $finalize_deplibs"
10258
10259      if test -n "$rpath$xrpath"; then
10260	# If the user specified any rpath flags, then add them.
10261	for libdir in $rpath $xrpath; do
10262	  # This is the magic to use -rpath.
10263	  case "$finalize_rpath " in
10264	  *" $libdir "*) ;;
10265	  *) func_append finalize_rpath " $libdir" ;;
10266	  esac
10267	done
10268      fi
10269
10270      # Now hardcode the library paths
10271      rpath=
10272      hardcode_libdirs=
10273      for libdir in $compile_rpath $finalize_rpath; do
10274	if test -n "$hardcode_libdir_flag_spec"; then
10275	  if test -n "$hardcode_libdir_separator"; then
10276	    if test -z "$hardcode_libdirs"; then
10277	      hardcode_libdirs=$libdir
10278	    else
10279	      # Just accumulate the unique libdirs.
10280	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10281	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10282		;;
10283	      *)
10284		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10285		;;
10286	      esac
10287	    fi
10288	  else
10289	    eval flag=\"$hardcode_libdir_flag_spec\"
10290	    func_append rpath " $flag"
10291	  fi
10292	elif test -n "$runpath_var"; then
10293	  case "$perm_rpath " in
10294	  *" $libdir "*) ;;
10295	  *) func_append perm_rpath " $libdir" ;;
10296	  esac
10297	fi
10298	case $host in
10299	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
10300	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
10301	  case :$dllsearchpath: in
10302	  *":$libdir:"*) ;;
10303	  ::) dllsearchpath=$libdir;;
10304	  *) func_append dllsearchpath ":$libdir";;
10305	  esac
10306	  case :$dllsearchpath: in
10307	  *":$testbindir:"*) ;;
10308	  ::) dllsearchpath=$testbindir;;
10309	  *) func_append dllsearchpath ":$testbindir";;
10310	  esac
10311	  ;;
10312	esac
10313      done
10314      # Substitute the hardcoded libdirs into the rpath.
10315      if test -n "$hardcode_libdir_separator" &&
10316	 test -n "$hardcode_libdirs"; then
10317	libdir=$hardcode_libdirs
10318	eval rpath=\" $hardcode_libdir_flag_spec\"
10319      fi
10320      compile_rpath=$rpath
10321
10322      rpath=
10323      hardcode_libdirs=
10324      for libdir in $finalize_rpath; do
10325	if test -n "$hardcode_libdir_flag_spec"; then
10326	  if test -n "$hardcode_libdir_separator"; then
10327	    if test -z "$hardcode_libdirs"; then
10328	      hardcode_libdirs=$libdir
10329	    else
10330	      # Just accumulate the unique libdirs.
10331	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10332	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10333		;;
10334	      *)
10335		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10336		;;
10337	      esac
10338	    fi
10339	  else
10340	    eval flag=\"$hardcode_libdir_flag_spec\"
10341	    func_append rpath " $flag"
10342	  fi
10343	elif test -n "$runpath_var"; then
10344	  case "$finalize_perm_rpath " in
10345	  *" $libdir "*) ;;
10346	  *) func_append finalize_perm_rpath " $libdir" ;;
10347	  esac
10348	fi
10349      done
10350      # Substitute the hardcoded libdirs into the rpath.
10351      if test -n "$hardcode_libdir_separator" &&
10352	 test -n "$hardcode_libdirs"; then
10353	libdir=$hardcode_libdirs
10354	eval rpath=\" $hardcode_libdir_flag_spec\"
10355      fi
10356      finalize_rpath=$rpath
10357
10358      if test -n "$libobjs" && test yes = "$build_old_libs"; then
10359	# Transform all the library objects into standard objects.
10360	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10361	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10362      fi
10363
10364      func_generate_dlsyms "$outputname" "@PROGRAM@" false
10365
10366      # template prelinking step
10367      if test -n "$prelink_cmds"; then
10368	func_execute_cmds "$prelink_cmds" 'exit $?'
10369      fi
10370
10371      wrappers_required=:
10372      case $host in
10373      *cegcc* | *mingw32ce*)
10374        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
10375        wrappers_required=false
10376        ;;
10377      *cygwin* | *mingw* )
10378        test yes = "$build_libtool_libs" || wrappers_required=false
10379        ;;
10380      *)
10381        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
10382          wrappers_required=false
10383        fi
10384        ;;
10385      esac
10386      $wrappers_required || {
10387	# Replace the output file specification.
10388	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10389	link_command=$compile_command$compile_rpath
10390
10391	# We have no uninstalled library dependencies, so finalize right now.
10392	exit_status=0
10393	func_show_eval "$link_command" 'exit_status=$?'
10394
10395	if test -n "$postlink_cmds"; then
10396	  func_to_tool_file "$output"
10397	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10398	  func_execute_cmds "$postlink_cmds" 'exit $?'
10399	fi
10400
10401	# Delete the generated files.
10402	if test -f "$output_objdir/${outputname}S.$objext"; then
10403	  func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
10404	fi
10405
10406	exit $exit_status
10407      }
10408
10409      if test -n "$compile_shlibpath$finalize_shlibpath"; then
10410	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
10411      fi
10412      if test -n "$finalize_shlibpath"; then
10413	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
10414      fi
10415
10416      compile_var=
10417      finalize_var=
10418      if test -n "$runpath_var"; then
10419	if test -n "$perm_rpath"; then
10420	  # We should set the runpath_var.
10421	  rpath=
10422	  for dir in $perm_rpath; do
10423	    func_append rpath "$dir:"
10424	  done
10425	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
10426	fi
10427	if test -n "$finalize_perm_rpath"; then
10428	  # We should set the runpath_var.
10429	  rpath=
10430	  for dir in $finalize_perm_rpath; do
10431	    func_append rpath "$dir:"
10432	  done
10433	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
10434	fi
10435      fi
10436
10437      if test yes = "$no_install"; then
10438	# We don't need to create a wrapper script.
10439	link_command=$compile_var$compile_command$compile_rpath
10440	# Replace the output file specification.
10441	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10442	# Delete the old output file.
10443	$opt_dry_run || $RM $output
10444	# Link the executable and exit
10445	func_show_eval "$link_command" 'exit $?'
10446
10447	if test -n "$postlink_cmds"; then
10448	  func_to_tool_file "$output"
10449	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10450	  func_execute_cmds "$postlink_cmds" 'exit $?'
10451	fi
10452
10453	exit $EXIT_SUCCESS
10454      fi
10455
10456      case $hardcode_action,$fast_install in
10457        relink,*)
10458	  # Fast installation is not supported
10459	  link_command=$compile_var$compile_command$compile_rpath
10460	  relink_command=$finalize_var$finalize_command$finalize_rpath
10461
10462	  func_warning "this platform does not like uninstalled shared libraries"
10463	  func_warning "'$output' will be relinked during installation"
10464	  ;;
10465        *,yes)
10466	  link_command=$finalize_var$compile_command$finalize_rpath
10467	  relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
10468          ;;
10469	*,no)
10470	  link_command=$compile_var$compile_command$compile_rpath
10471	  relink_command=$finalize_var$finalize_command$finalize_rpath
10472          ;;
10473	*,needless)
10474	  link_command=$finalize_var$compile_command$finalize_rpath
10475	  relink_command=
10476          ;;
10477      esac
10478
10479      # Replace the output file specification.
10480      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
10481
10482      # Delete the old output files.
10483      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
10484
10485      func_show_eval "$link_command" 'exit $?'
10486
10487      if test -n "$postlink_cmds"; then
10488	func_to_tool_file "$output_objdir/$outputname"
10489	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'`
10490	func_execute_cmds "$postlink_cmds" 'exit $?'
10491      fi
10492
10493      # Now create the wrapper script.
10494      func_verbose "creating $output"
10495
10496      # Quote the relink command for shipping.
10497      if test -n "$relink_command"; then
10498	# Preserve any variables that may affect compiler behavior
10499	for var in $variables_saved_for_relink; do
10500	  if eval test -z \"\${$var+set}\"; then
10501	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10502	  elif eval var_value=\$$var; test -z "$var_value"; then
10503	    relink_command="$var=; export $var; $relink_command"
10504	  else
10505	    func_quote_for_eval "$var_value"
10506	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
10507	  fi
10508	done
10509	relink_command="(cd `pwd`; $relink_command)"
10510	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
10511      fi
10512
10513      # Only actually do things if not in dry run mode.
10514      $opt_dry_run || {
10515	# win32 will think the script is a binary if it has
10516	# a .exe suffix, so we strip it off here.
10517	case $output in
10518	  *.exe) func_stripname '' '.exe' "$output"
10519	         output=$func_stripname_result ;;
10520	esac
10521	# test for cygwin because mv fails w/o .exe extensions
10522	case $host in
10523	  *cygwin*)
10524	    exeext=.exe
10525	    func_stripname '' '.exe' "$outputname"
10526	    outputname=$func_stripname_result ;;
10527	  *) exeext= ;;
10528	esac
10529	case $host in
10530	  *cygwin* | *mingw* )
10531	    func_dirname_and_basename "$output" "" "."
10532	    output_name=$func_basename_result
10533	    output_path=$func_dirname_result
10534	    cwrappersource=$output_path/$objdir/lt-$output_name.c
10535	    cwrapper=$output_path/$output_name.exe
10536	    $RM $cwrappersource $cwrapper
10537	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
10538
10539	    func_emit_cwrapperexe_src > $cwrappersource
10540
10541	    # The wrapper executable is built using the $host compiler,
10542	    # because it contains $host paths and files. If cross-
10543	    # compiling, it, like the target executable, must be
10544	    # executed on the $host or under an emulation environment.
10545	    $opt_dry_run || {
10546	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
10547	      $STRIP $cwrapper
10548	    }
10549
10550	    # Now, create the wrapper script for func_source use:
10551	    func_ltwrapper_scriptname $cwrapper
10552	    $RM $func_ltwrapper_scriptname_result
10553	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
10554	    $opt_dry_run || {
10555	      # note: this script will not be executed, so do not chmod.
10556	      if test "x$build" = "x$host"; then
10557		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
10558	      else
10559		func_emit_wrapper no > $func_ltwrapper_scriptname_result
10560	      fi
10561	    }
10562	  ;;
10563	  * )
10564	    $RM $output
10565	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
10566
10567	    func_emit_wrapper no > $output
10568	    chmod +x $output
10569	  ;;
10570	esac
10571      }
10572      exit $EXIT_SUCCESS
10573      ;;
10574    esac
10575
10576    # See if we need to build an old-fashioned archive.
10577    for oldlib in $oldlibs; do
10578
10579      case $build_libtool_libs in
10580        convenience)
10581	  oldobjs="$libobjs_save $symfileobj"
10582	  addlibs=$convenience
10583	  build_libtool_libs=no
10584	  ;;
10585	module)
10586	  oldobjs=$libobjs_save
10587	  addlibs=$old_convenience
10588	  build_libtool_libs=no
10589          ;;
10590	*)
10591	  oldobjs="$old_deplibs $non_pic_objects"
10592	  $preload && test -f "$symfileobj" \
10593	    && func_append oldobjs " $symfileobj"
10594	  addlibs=$old_convenience
10595	  ;;
10596      esac
10597
10598      if test -n "$addlibs"; then
10599	gentop=$output_objdir/${outputname}x
10600	func_append generated " $gentop"
10601
10602	func_extract_archives $gentop $addlibs
10603	func_append oldobjs " $func_extract_archives_result"
10604      fi
10605
10606      # Do each command in the archive commands.
10607      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
10608	cmds=$old_archive_from_new_cmds
10609      else
10610
10611	# Add any objects from preloaded convenience libraries
10612	if test -n "$dlprefiles"; then
10613	  gentop=$output_objdir/${outputname}x
10614	  func_append generated " $gentop"
10615
10616	  func_extract_archives $gentop $dlprefiles
10617	  func_append oldobjs " $func_extract_archives_result"
10618	fi
10619
10620	# POSIX demands no paths to be encoded in archives.  We have
10621	# to avoid creating archives with duplicate basenames if we
10622	# might have to extract them afterwards, e.g., when creating a
10623	# static archive out of a convenience library, or when linking
10624	# the entirety of a libtool archive into another (currently
10625	# not supported by libtool).
10626	if (for obj in $oldobjs
10627	    do
10628	      func_basename "$obj"
10629	      $ECHO "$func_basename_result"
10630	    done | sort | sort -uc >/dev/null 2>&1); then
10631	  :
10632	else
10633	  echo "copying selected object files to avoid basename conflicts..."
10634	  gentop=$output_objdir/${outputname}x
10635	  func_append generated " $gentop"
10636	  func_mkdir_p "$gentop"
10637	  save_oldobjs=$oldobjs
10638	  oldobjs=
10639	  counter=1
10640	  for obj in $save_oldobjs
10641	  do
10642	    func_basename "$obj"
10643	    objbase=$func_basename_result
10644	    case " $oldobjs " in
10645	    " ") oldobjs=$obj ;;
10646	    *[\ /]"$objbase "*)
10647	      while :; do
10648		# Make sure we don't pick an alternate name that also
10649		# overlaps.
10650		newobj=lt$counter-$objbase
10651		func_arith $counter + 1
10652		counter=$func_arith_result
10653		case " $oldobjs " in
10654		*[\ /]"$newobj "*) ;;
10655		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
10656		esac
10657	      done
10658	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
10659	      func_append oldobjs " $gentop/$newobj"
10660	      ;;
10661	    *) func_append oldobjs " $obj" ;;
10662	    esac
10663	  done
10664	fi
10665	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
10666	tool_oldlib=$func_to_tool_file_result
10667	eval cmds=\"$old_archive_cmds\"
10668
10669	func_len " $cmds"
10670	len=$func_len_result
10671	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
10672	  cmds=$old_archive_cmds
10673	elif test -n "$archiver_list_spec"; then
10674	  func_verbose "using command file archive linking..."
10675	  for obj in $oldobjs
10676	  do
10677	    func_to_tool_file "$obj"
10678	    $ECHO "$func_to_tool_file_result"
10679	  done > $output_objdir/$libname.libcmd
10680	  func_to_tool_file "$output_objdir/$libname.libcmd"
10681	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
10682	  cmds=$old_archive_cmds
10683	else
10684	  # the command line is too long to link in one step, link in parts
10685	  func_verbose "using piecewise archive linking..."
10686	  save_RANLIB=$RANLIB
10687	  RANLIB=:
10688	  objlist=
10689	  concat_cmds=
10690	  save_oldobjs=$oldobjs
10691	  oldobjs=
10692	  # Is there a better way of finding the last object in the list?
10693	  for obj in $save_oldobjs
10694	  do
10695	    last_oldobj=$obj
10696	  done
10697	  eval test_cmds=\"$old_archive_cmds\"
10698	  func_len " $test_cmds"
10699	  len0=$func_len_result
10700	  len=$len0
10701	  for obj in $save_oldobjs
10702	  do
10703	    func_len " $obj"
10704	    func_arith $len + $func_len_result
10705	    len=$func_arith_result
10706	    func_append objlist " $obj"
10707	    if test "$len" -lt "$max_cmd_len"; then
10708	      :
10709	    else
10710	      # the above command should be used before it gets too long
10711	      oldobjs=$objlist
10712	      if test "$obj" = "$last_oldobj"; then
10713		RANLIB=$save_RANLIB
10714	      fi
10715	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
10716	      eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
10717	      objlist=
10718	      len=$len0
10719	    fi
10720	  done
10721	  RANLIB=$save_RANLIB
10722	  oldobjs=$objlist
10723	  if test -z "$oldobjs"; then
10724	    eval cmds=\"\$concat_cmds\"
10725	  else
10726	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
10727	  fi
10728	fi
10729      fi
10730      func_execute_cmds "$cmds" 'exit $?'
10731    done
10732
10733    test -n "$generated" && \
10734      func_show_eval "${RM}r$generated"
10735
10736    # Now create the libtool archive.
10737    case $output in
10738    *.la)
10739      old_library=
10740      test yes = "$build_old_libs" && old_library=$libname.$libext
10741      func_verbose "creating $output"
10742
10743      # Preserve any variables that may affect compiler behavior
10744      for var in $variables_saved_for_relink; do
10745	if eval test -z \"\${$var+set}\"; then
10746	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10747	elif eval var_value=\$$var; test -z "$var_value"; then
10748	  relink_command="$var=; export $var; $relink_command"
10749	else
10750	  func_quote_for_eval "$var_value"
10751	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
10752	fi
10753      done
10754      # Quote the link command for shipping.
10755      relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
10756      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
10757      if test yes = "$hardcode_automatic"; then
10758	relink_command=
10759      fi
10760
10761      # Only create the output if not a dry run.
10762      $opt_dry_run || {
10763	for installed in no yes; do
10764	  if test yes = "$installed"; then
10765	    if test -z "$install_libdir"; then
10766	      break
10767	    fi
10768	    output=$output_objdir/${outputname}i
10769	    # Replace all uninstalled libtool libraries with the installed ones
10770	    newdependency_libs=
10771	    for deplib in $dependency_libs; do
10772	      case $deplib in
10773	      *.la)
10774		func_basename "$deplib"
10775		name=$func_basename_result
10776		func_resolve_sysroot "$deplib"
10777		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
10778		test -z "$libdir" && \
10779		  func_fatal_error "'$deplib' is not a valid libtool archive"
10780		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
10781		;;
10782	      -L*)
10783		func_stripname -L '' "$deplib"
10784		func_replace_sysroot "$func_stripname_result"
10785		func_append newdependency_libs " -L$func_replace_sysroot_result"
10786		;;
10787	      -R*)
10788		func_stripname -R '' "$deplib"
10789		func_replace_sysroot "$func_stripname_result"
10790		func_append newdependency_libs " -R$func_replace_sysroot_result"
10791		;;
10792	      *) func_append newdependency_libs " $deplib" ;;
10793	      esac
10794	    done
10795	    dependency_libs=$newdependency_libs
10796	    newdlfiles=
10797
10798	    for lib in $dlfiles; do
10799	      case $lib in
10800	      *.la)
10801	        func_basename "$lib"
10802		name=$func_basename_result
10803		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
10804		test -z "$libdir" && \
10805		  func_fatal_error "'$lib' is not a valid libtool archive"
10806		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
10807		;;
10808	      *) func_append newdlfiles " $lib" ;;
10809	      esac
10810	    done
10811	    dlfiles=$newdlfiles
10812	    newdlprefiles=
10813	    for lib in $dlprefiles; do
10814	      case $lib in
10815	      *.la)
10816		# Only pass preopened files to the pseudo-archive (for
10817		# eventual linking with the app. that links it) if we
10818		# didn't already link the preopened objects directly into
10819		# the library:
10820		func_basename "$lib"
10821		name=$func_basename_result
10822		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
10823		test -z "$libdir" && \
10824		  func_fatal_error "'$lib' is not a valid libtool archive"
10825		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
10826		;;
10827	      esac
10828	    done
10829	    dlprefiles=$newdlprefiles
10830	  else
10831	    newdlfiles=
10832	    for lib in $dlfiles; do
10833	      case $lib in
10834		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
10835		*) abs=`pwd`"/$lib" ;;
10836	      esac
10837	      func_append newdlfiles " $abs"
10838	    done
10839	    dlfiles=$newdlfiles
10840	    newdlprefiles=
10841	    for lib in $dlprefiles; do
10842	      case $lib in
10843		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
10844		*) abs=`pwd`"/$lib" ;;
10845	      esac
10846	      func_append newdlprefiles " $abs"
10847	    done
10848	    dlprefiles=$newdlprefiles
10849	  fi
10850	  $RM $output
10851	  # place dlname in correct position for cygwin
10852	  # In fact, it would be nice if we could use this code for all target
10853	  # systems that can't hard-code library paths into their executables
10854	  # and that have no shared library path variable independent of PATH,
10855	  # but it turns out we can't easily determine that from inspecting
10856	  # libtool variables, so we have to hard-code the OSs to which it
10857	  # applies here; at the moment, that means platforms that use the PE
10858	  # object format with DLL files.  See the long comment at the top of
10859	  # tests/bindir.at for full details.
10860	  tdlname=$dlname
10861	  case $host,$output,$installed,$module,$dlname in
10862	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
10863	      # If a -bindir argument was supplied, place the dll there.
10864	      if test -n "$bindir"; then
10865		func_relative_path "$install_libdir" "$bindir"
10866		tdlname=$func_relative_path_result/$dlname
10867	      else
10868		# Otherwise fall back on heuristic.
10869		tdlname=../bin/$dlname
10870	      fi
10871	      ;;
10872	  esac
10873	  $ECHO > $output "\
10874# $outputname - a libtool library file
10875# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
10876#
10877# Please DO NOT delete this file!
10878# It is necessary for linking the library.
10879
10880# The name that we can dlopen(3).
10881dlname='$tdlname'
10882
10883# Names of this library.
10884library_names='$library_names'
10885
10886# The name of the static archive.
10887old_library='$old_library'
10888
10889# Linker flags that cannot go in dependency_libs.
10890inherited_linker_flags='$new_inherited_linker_flags'
10891
10892# Libraries that this one depends upon.
10893dependency_libs='$dependency_libs'
10894
10895# Names of additional weak libraries provided by this library
10896weak_library_names='$weak_libs'
10897
10898# Version information for $libname.
10899current=$current
10900age=$age
10901revision=$revision
10902
10903# Is this an already installed library?
10904installed=$installed
10905
10906# Should we warn about portability when linking against -modules?
10907shouldnotlink=$module
10908
10909# Files to dlopen/dlpreopen
10910dlopen='$dlfiles'
10911dlpreopen='$dlprefiles'
10912
10913# Directory that this library needs to be installed in:
10914libdir='$install_libdir'"
10915	  if test no,yes = "$installed,$need_relink"; then
10916	    $ECHO >> $output "\
10917relink_command=\"$relink_command\""
10918	  fi
10919	done
10920      }
10921
10922      # Do a symbolic link so that the libtool archive can be found in
10923      # LD_LIBRARY_PATH before the program is installed.
10924      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
10925      ;;
10926    esac
10927    exit $EXIT_SUCCESS
10928}
10929
10930if test link = "$opt_mode" || test relink = "$opt_mode"; then
10931  func_mode_link ${1+"$@"}
10932fi
10933
10934
10935# func_mode_uninstall arg...
10936func_mode_uninstall ()
10937{
10938    $debug_cmd
10939
10940    RM=$nonopt
10941    files=
10942    rmforce=false
10943    exit_status=0
10944
10945    # This variable tells wrapper scripts just to set variables rather
10946    # than running their programs.
10947    libtool_install_magic=$magic
10948
10949    for arg
10950    do
10951      case $arg in
10952      -f) func_append RM " $arg"; rmforce=: ;;
10953      -*) func_append RM " $arg" ;;
10954      *) func_append files " $arg" ;;
10955      esac
10956    done
10957
10958    test -z "$RM" && \
10959      func_fatal_help "you must specify an RM program"
10960
10961    rmdirs=
10962
10963    for file in $files; do
10964      func_dirname "$file" "" "."
10965      dir=$func_dirname_result
10966      if test . = "$dir"; then
10967	odir=$objdir
10968      else
10969	odir=$dir/$objdir
10970      fi
10971      func_basename "$file"
10972      name=$func_basename_result
10973      test uninstall = "$opt_mode" && odir=$dir
10974
10975      # Remember odir for removal later, being careful to avoid duplicates
10976      if test clean = "$opt_mode"; then
10977	case " $rmdirs " in
10978	  *" $odir "*) ;;
10979	  *) func_append rmdirs " $odir" ;;
10980	esac
10981      fi
10982
10983      # Don't error if the file doesn't exist and rm -f was used.
10984      if { test -L "$file"; } >/dev/null 2>&1 ||
10985	 { test -h "$file"; } >/dev/null 2>&1 ||
10986	 test -f "$file"; then
10987	:
10988      elif test -d "$file"; then
10989	exit_status=1
10990	continue
10991      elif $rmforce; then
10992	continue
10993      fi
10994
10995      rmfiles=$file
10996
10997      case $name in
10998      *.la)
10999	# Possibly a libtool archive, so verify it.
11000	if func_lalib_p "$file"; then
11001	  func_source $dir/$name
11002
11003	  # Delete the libtool libraries and symlinks.
11004	  for n in $library_names; do
11005	    func_append rmfiles " $odir/$n"
11006	  done
11007	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
11008
11009	  case $opt_mode in
11010	  clean)
11011	    case " $library_names " in
11012	    *" $dlname "*) ;;
11013	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
11014	    esac
11015	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
11016	    ;;
11017	  uninstall)
11018	    if test -n "$library_names"; then
11019	      # Do each command in the postuninstall commands.
11020	      func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
11021	    fi
11022
11023	    if test -n "$old_library"; then
11024	      # Do each command in the old_postuninstall commands.
11025	      func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
11026	    fi
11027	    # FIXME: should reinstall the best remaining shared library.
11028	    ;;
11029	  esac
11030	fi
11031	;;
11032
11033      *.lo)
11034	# Possibly a libtool object, so verify it.
11035	if func_lalib_p "$file"; then
11036
11037	  # Read the .lo file
11038	  func_source $dir/$name
11039
11040	  # Add PIC object to the list of files to remove.
11041	  if test -n "$pic_object" && test none != "$pic_object"; then
11042	    func_append rmfiles " $dir/$pic_object"
11043	  fi
11044
11045	  # Add non-PIC object to the list of files to remove.
11046	  if test -n "$non_pic_object" && test none != "$non_pic_object"; then
11047	    func_append rmfiles " $dir/$non_pic_object"
11048	  fi
11049	fi
11050	;;
11051
11052      *)
11053	if test clean = "$opt_mode"; then
11054	  noexename=$name
11055	  case $file in
11056	  *.exe)
11057	    func_stripname '' '.exe' "$file"
11058	    file=$func_stripname_result
11059	    func_stripname '' '.exe' "$name"
11060	    noexename=$func_stripname_result
11061	    # $file with .exe has already been added to rmfiles,
11062	    # add $file without .exe
11063	    func_append rmfiles " $file"
11064	    ;;
11065	  esac
11066	  # Do a test to see if this is a libtool program.
11067	  if func_ltwrapper_p "$file"; then
11068	    if func_ltwrapper_executable_p "$file"; then
11069	      func_ltwrapper_scriptname "$file"
11070	      relink_command=
11071	      func_source $func_ltwrapper_scriptname_result
11072	      func_append rmfiles " $func_ltwrapper_scriptname_result"
11073	    else
11074	      relink_command=
11075	      func_source $dir/$noexename
11076	    fi
11077
11078	    # note $name still contains .exe if it was in $file originally
11079	    # as does the version of $file that was added into $rmfiles
11080	    func_append rmfiles " $odir/$name $odir/${name}S.$objext"
11081	    if test yes = "$fast_install" && test -n "$relink_command"; then
11082	      func_append rmfiles " $odir/lt-$name"
11083	    fi
11084	    if test "X$noexename" != "X$name"; then
11085	      func_append rmfiles " $odir/lt-$noexename.c"
11086	    fi
11087	  fi
11088	fi
11089	;;
11090      esac
11091      func_show_eval "$RM $rmfiles" 'exit_status=1'
11092    done
11093
11094    # Try to remove the $objdir's in the directories where we deleted files
11095    for dir in $rmdirs; do
11096      if test -d "$dir"; then
11097	func_show_eval "rmdir $dir >/dev/null 2>&1"
11098      fi
11099    done
11100
11101    exit $exit_status
11102}
11103
11104if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
11105  func_mode_uninstall ${1+"$@"}
11106fi
11107
11108test -z "$opt_mode" && {
11109  help=$generic_help
11110  func_fatal_help "you must specify a MODE"
11111}
11112
11113test -z "$exec_cmd" && \
11114  func_fatal_help "invalid operation mode '$opt_mode'"
11115
11116if test -n "$exec_cmd"; then
11117  eval exec "$exec_cmd"
11118  exit $EXIT_FAILURE
11119fi
11120
11121exit $exit_status
11122
11123
11124# The TAGs below are defined such that we never get into a situation
11125# where we disable both kinds of libraries.  Given conflicting
11126# choices, we go for a static library, that is the most portable,
11127# since we can't tell whether shared libraries were disabled because
11128# the user asked for that or because the platform doesn't support
11129# them.  This is particularly important on AIX, because we don't
11130# support having both static and shared libraries enabled at the same
11131# time on that platform, so we default to a shared-only configuration.
11132# If a disable-shared tag is given, we'll fallback to a static-only
11133# configuration.  But we'll never go from static-only to shared-only.
11134
11135# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
11136build_libtool_libs=no
11137build_old_libs=yes
11138# ### END LIBTOOL TAG CONFIG: disable-shared
11139
11140# ### BEGIN LIBTOOL TAG CONFIG: disable-static
11141build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
11142# ### END LIBTOOL TAG CONFIG: disable-static
11143
11144# Local Variables:
11145# mode:shell-script
11146# sh-indentation:2
11147# End:
11148