ltmain.sh revision 6ad5a0e2
1e6d2e958Smrg#! /bin/sh
2e6d2e958Smrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
3e6d2e958Smrg##               by inline-source v2014-01-03.01
447e89262Smrg
5e6d2e958Smrg# libtool (GNU libtool) 2.4.6
6e6d2e958Smrg# Provide generalized library-building support services.
747e89262Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
847e89262Smrg
9e6d2e958Smrg# Copyright (C) 1996-2015 Free Software Foundation, Inc.
1047e89262Smrg# This is free software; see the source for copying conditions.  There is NO
1147e89262Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1247e89262Smrg
1347e89262Smrg# GNU Libtool is free software; you can redistribute it and/or modify
14bd1da9d7Smrg# it under the terms of the GNU General Public License as published by
15bd1da9d7Smrg# the Free Software Foundation; either version 2 of the License, or
16bd1da9d7Smrg# (at your option) any later version.
17bd1da9d7Smrg#
1847e89262Smrg# As a special exception to the GNU General Public License,
1947e89262Smrg# if you distribute this file as part of a program or library that
2047e89262Smrg# is built using GNU Libtool, you may include this file under the
2147e89262Smrg# same distribution terms that you use for the rest of that program.
2247e89262Smrg#
2347e89262Smrg# GNU Libtool is distributed in the hope that it will be useful, but
24bd1da9d7Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
25bd1da9d7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
26bd1da9d7Smrg# General Public License for more details.
27bd1da9d7Smrg#
28bd1da9d7Smrg# You should have received a copy of the GNU General Public License
29e6d2e958Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
30bd1da9d7Smrg
31bd1da9d7Smrg
3247e89262SmrgPROGRAM=libtool
33bd1da9d7SmrgPACKAGE=libtool
346ad5a0e2SmrgVERSION="2.4.6 Debian-2.4.6-15"
35e6d2e958Smrgpackage_revision=2.4.6
365bcb6992Smrg
37e6d2e958Smrg
38e6d2e958Smrg## ------ ##
39e6d2e958Smrg## Usage. ##
40e6d2e958Smrg## ------ ##
41e6d2e958Smrg
42e6d2e958Smrg# Run './libtool --help' for help with using this script from the
43e6d2e958Smrg# command line.
44e6d2e958Smrg
45e6d2e958Smrg
46e6d2e958Smrg## ------------------------------- ##
47e6d2e958Smrg## User overridable command paths. ##
48e6d2e958Smrg## ------------------------------- ##
49e6d2e958Smrg
50e6d2e958Smrg# After configure completes, it has a better idea of some of the
51e6d2e958Smrg# shell tools we need than the defaults used by the functions shared
52e6d2e958Smrg# with bootstrap, so set those here where they can still be over-
53e6d2e958Smrg# ridden by the user, but otherwise take precedence.
54e6d2e958Smrg
55e6d2e958Smrg: ${AUTOCONF="autoconf"}
56e6d2e958Smrg: ${AUTOMAKE="automake"}
57e6d2e958Smrg
58e6d2e958Smrg
59e6d2e958Smrg## -------------------------- ##
60e6d2e958Smrg## Source external libraries. ##
61e6d2e958Smrg## -------------------------- ##
62e6d2e958Smrg
63e6d2e958Smrg# Much of our low-level functionality needs to be sourced from external
64e6d2e958Smrg# libraries, which are installed to $pkgauxdir.
65e6d2e958Smrg
66e6d2e958Smrg# Set a version string for this script.
67e6d2e958Smrgscriptversion=2015-01-20.17; # UTC
68e6d2e958Smrg
69e6d2e958Smrg# General shell script boiler plate, and helper functions.
70e6d2e958Smrg# Written by Gary V. Vaughan, 2004
71e6d2e958Smrg
72e6d2e958Smrg# Copyright (C) 2004-2015 Free Software Foundation, Inc.
73e6d2e958Smrg# This is free software; see the source for copying conditions.  There is NO
74e6d2e958Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
75e6d2e958Smrg
76e6d2e958Smrg# This program is free software; you can redistribute it and/or modify
77e6d2e958Smrg# it under the terms of the GNU General Public License as published by
78e6d2e958Smrg# the Free Software Foundation; either version 3 of the License, or
79e6d2e958Smrg# (at your option) any later version.
80e6d2e958Smrg
81e6d2e958Smrg# As a special exception to the GNU General Public License, if you distribute
82e6d2e958Smrg# this file as part of a program or library that is built using GNU Libtool,
83e6d2e958Smrg# you may include this file under the same distribution terms that you use
84e6d2e958Smrg# for the rest of that program.
85e6d2e958Smrg
86e6d2e958Smrg# This program is distributed in the hope that it will be useful,
87e6d2e958Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
88e6d2e958Smrg# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
89e6d2e958Smrg# General Public License for more details.
90e6d2e958Smrg
91e6d2e958Smrg# You should have received a copy of the GNU General Public License
92e6d2e958Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>.
93e6d2e958Smrg
94e6d2e958Smrg# Please report bugs or propose patches to gary@gnu.org.
95e6d2e958Smrg
96e6d2e958Smrg
97e6d2e958Smrg## ------ ##
98e6d2e958Smrg## Usage. ##
99e6d2e958Smrg## ------ ##
100e6d2e958Smrg
101e6d2e958Smrg# Evaluate this file near the top of your script to gain access to
102e6d2e958Smrg# the functions and variables defined here:
103e6d2e958Smrg#
104e6d2e958Smrg#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
105e6d2e958Smrg#
106e6d2e958Smrg# If you need to override any of the default environment variable
107e6d2e958Smrg# settings, do that before evaluating this file.
108e6d2e958Smrg
109e6d2e958Smrg
110e6d2e958Smrg## -------------------- ##
111e6d2e958Smrg## Shell normalisation. ##
112e6d2e958Smrg## -------------------- ##
113e6d2e958Smrg
114e6d2e958Smrg# Some shells need a little help to be as Bourne compatible as possible.
115e6d2e958Smrg# Before doing anything else, make sure all that help has been provided!
116e6d2e958Smrg
117e6d2e958SmrgDUALCASE=1; export DUALCASE # for MKS sh
118e6d2e958Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
1195bcb6992Smrg  emulate sh
1205bcb6992Smrg  NULLCMD=:
121e6d2e958Smrg  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
1225bcb6992Smrg  # is contrary to our usage.  Disable this feature.
1235bcb6992Smrg  alias -g '${1+"$@"}'='"$@"'
124bd1da9d7Smrg  setopt NO_GLOB_SUBST
1255bcb6992Smrgelse
126e6d2e958Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
127bd1da9d7Smrgfi
128bd1da9d7Smrg
129e6d2e958Smrg# NLS nuisances: We save the old values in case they are required later.
130e6d2e958Smrg_G_user_locale=
131e6d2e958Smrg_G_safe_locale=
132e6d2e958Smrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
1335bcb6992Smrgdo
134e6d2e958Smrg  eval "if test set = \"\${$_G_var+set}\"; then
135e6d2e958Smrg          save_$_G_var=\$$_G_var
136e6d2e958Smrg          $_G_var=C
137e6d2e958Smrg	  export $_G_var
138e6d2e958Smrg	  _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
139e6d2e958Smrg	  _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
1405bcb6992Smrg	fi"
1415bcb6992Smrgdone
1425bcb6992Smrg
143e6d2e958Smrg# CDPATH.
144e6d2e958Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
14547e89262Smrg
146e6d2e958Smrg# Make sure IFS has a sensible default
147e6d2e958Smrgsp=' '
148e6d2e958Smrgnl='
149e6d2e958Smrg'
150e6d2e958SmrgIFS="$sp	$nl"
151e6d2e958Smrg
152e6d2e958Smrg# There are apparently some retarded systems that use ';' as a PATH separator!
153e6d2e958Smrgif test "${PATH_SEPARATOR+set}" != set; then
154e6d2e958Smrg  PATH_SEPARATOR=:
155e6d2e958Smrg  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
156e6d2e958Smrg    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
157e6d2e958Smrg      PATH_SEPARATOR=';'
158e6d2e958Smrg  }
159e6d2e958Smrgfi
16047e89262Smrg
16147e89262Smrg
16247e89262Smrg
163e6d2e958Smrg## ------------------------- ##
164e6d2e958Smrg## Locate command utilities. ##
165e6d2e958Smrg## ------------------------- ##
166e6d2e958Smrg
167e6d2e958Smrg
168e6d2e958Smrg# func_executable_p FILE
169e6d2e958Smrg# ----------------------
170e6d2e958Smrg# Check that FILE is an executable regular file.
171e6d2e958Smrgfunc_executable_p ()
172e6d2e958Smrg{
173e6d2e958Smrg    test -f "$1" && test -x "$1"
174e6d2e958Smrg}
175e6d2e958Smrg
176e6d2e958Smrg
177e6d2e958Smrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
178e6d2e958Smrg# --------------------------------------------
179e6d2e958Smrg# Search for either a program that responds to --version with output
180e6d2e958Smrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by
181e6d2e958Smrg# trying all the directories in PATH with each of the elements of
182e6d2e958Smrg# PROGS_LIST.
183e6d2e958Smrg#
184e6d2e958Smrg# CHECK_FUNC should accept the path to a candidate program, and
185e6d2e958Smrg# set $func_check_prog_result if it truncates its output less than
186e6d2e958Smrg# $_G_path_prog_max characters.
187e6d2e958Smrgfunc_path_progs ()
188e6d2e958Smrg{
189e6d2e958Smrg    _G_progs_list=$1
190e6d2e958Smrg    _G_check_func=$2
191e6d2e958Smrg    _G_PATH=${3-"$PATH"}
192e6d2e958Smrg
193e6d2e958Smrg    _G_path_prog_max=0
194e6d2e958Smrg    _G_path_prog_found=false
195e6d2e958Smrg    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
196e6d2e958Smrg    for _G_dir in $_G_PATH; do
197e6d2e958Smrg      IFS=$_G_save_IFS
198e6d2e958Smrg      test -z "$_G_dir" && _G_dir=.
199e6d2e958Smrg      for _G_prog_name in $_G_progs_list; do
200e6d2e958Smrg        for _exeext in '' .EXE; do
201e6d2e958Smrg          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
202e6d2e958Smrg          func_executable_p "$_G_path_prog" || continue
203e6d2e958Smrg          case `"$_G_path_prog" --version 2>&1` in
204e6d2e958Smrg            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
205e6d2e958Smrg            *)     $_G_check_func $_G_path_prog
206e6d2e958Smrg		   func_path_progs_result=$func_check_prog_result
207e6d2e958Smrg		   ;;
208e6d2e958Smrg          esac
209e6d2e958Smrg          $_G_path_prog_found && break 3
210e6d2e958Smrg        done
211e6d2e958Smrg      done
212e6d2e958Smrg    done
213e6d2e958Smrg    IFS=$_G_save_IFS
214e6d2e958Smrg    test -z "$func_path_progs_result" && {
215e6d2e958Smrg      echo "no acceptable sed could be found in \$PATH" >&2
216e6d2e958Smrg      exit 1
217e6d2e958Smrg    }
218e6d2e958Smrg}
219e6d2e958Smrg
220e6d2e958Smrg
221e6d2e958Smrg# We want to be able to use the functions in this file before configure
222e6d2e958Smrg# has figured out where the best binaries are kept, which means we have
223e6d2e958Smrg# to search for them ourselves - except when the results are already set
224e6d2e958Smrg# where we skip the searches.
225e6d2e958Smrg
226e6d2e958Smrg# Unless the user overrides by setting SED, search the path for either GNU
227e6d2e958Smrg# sed, or the sed that truncates its output the least.
228e6d2e958Smrgtest -z "$SED" && {
229e6d2e958Smrg  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
230e6d2e958Smrg  for _G_i in 1 2 3 4 5 6 7; do
231e6d2e958Smrg    _G_sed_script=$_G_sed_script$nl$_G_sed_script
232e6d2e958Smrg  done
233e6d2e958Smrg  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
234e6d2e958Smrg  _G_sed_script=
235e6d2e958Smrg
236e6d2e958Smrg  func_check_prog_sed ()
237e6d2e958Smrg  {
238e6d2e958Smrg    _G_path_prog=$1
239e6d2e958Smrg
240e6d2e958Smrg    _G_count=0
241e6d2e958Smrg    printf 0123456789 >conftest.in
242e6d2e958Smrg    while :
243e6d2e958Smrg    do
244e6d2e958Smrg      cat conftest.in conftest.in >conftest.tmp
245e6d2e958Smrg      mv conftest.tmp conftest.in
246e6d2e958Smrg      cp conftest.in conftest.nl
247e6d2e958Smrg      echo '' >> conftest.nl
248e6d2e958Smrg      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
249e6d2e958Smrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
250e6d2e958Smrg      _G_count=`expr $_G_count + 1`
251e6d2e958Smrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
252e6d2e958Smrg        # Best one so far, save it but keep looking for a better one
253e6d2e958Smrg        func_check_prog_result=$_G_path_prog
254e6d2e958Smrg        _G_path_prog_max=$_G_count
255e6d2e958Smrg      fi
256e6d2e958Smrg      # 10*(2^10) chars as input seems more than enough
257e6d2e958Smrg      test 10 -lt "$_G_count" && break
258e6d2e958Smrg    done
259e6d2e958Smrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
260e6d2e958Smrg  }
261e6d2e958Smrg
262e6d2e958Smrg  func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
263e6d2e958Smrg  rm -f conftest.sed
264e6d2e958Smrg  SED=$func_path_progs_result
265e6d2e958Smrg}
266e6d2e958Smrg
267e6d2e958Smrg
268e6d2e958Smrg# Unless the user overrides by setting GREP, search the path for either GNU
269e6d2e958Smrg# grep, or the grep that truncates its output the least.
270e6d2e958Smrgtest -z "$GREP" && {
271e6d2e958Smrg  func_check_prog_grep ()
272e6d2e958Smrg  {
273e6d2e958Smrg    _G_path_prog=$1
274e6d2e958Smrg
275e6d2e958Smrg    _G_count=0
276e6d2e958Smrg    _G_path_prog_max=0
277e6d2e958Smrg    printf 0123456789 >conftest.in
278e6d2e958Smrg    while :
279e6d2e958Smrg    do
280e6d2e958Smrg      cat conftest.in conftest.in >conftest.tmp
281e6d2e958Smrg      mv conftest.tmp conftest.in
282e6d2e958Smrg      cp conftest.in conftest.nl
283e6d2e958Smrg      echo 'GREP' >> conftest.nl
284e6d2e958Smrg      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
285e6d2e958Smrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
286e6d2e958Smrg      _G_count=`expr $_G_count + 1`
287e6d2e958Smrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
288e6d2e958Smrg        # Best one so far, save it but keep looking for a better one
289e6d2e958Smrg        func_check_prog_result=$_G_path_prog
290e6d2e958Smrg        _G_path_prog_max=$_G_count
291e6d2e958Smrg      fi
292e6d2e958Smrg      # 10*(2^10) chars as input seems more than enough
293e6d2e958Smrg      test 10 -lt "$_G_count" && break
294e6d2e958Smrg    done
295e6d2e958Smrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
296e6d2e958Smrg  }
297e6d2e958Smrg
298e6d2e958Smrg  func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
299e6d2e958Smrg  GREP=$func_path_progs_result
300e6d2e958Smrg}
301e6d2e958Smrg
302e6d2e958Smrg
303e6d2e958Smrg## ------------------------------- ##
304e6d2e958Smrg## User overridable command paths. ##
305e6d2e958Smrg## ------------------------------- ##
306e6d2e958Smrg
307e6d2e958Smrg# All uppercase variable names are used for environment variables.  These
308e6d2e958Smrg# variables can be overridden by the user before calling a script that
309e6d2e958Smrg# uses them if a suitable command of that name is not already available
310e6d2e958Smrg# in the command search PATH.
31147e89262Smrg
31247e89262Smrg: ${CP="cp -f"}
313e6d2e958Smrg: ${ECHO="printf %s\n"}
314e6d2e958Smrg: ${EGREP="$GREP -E"}
315e6d2e958Smrg: ${FGREP="$GREP -F"}
316e6d2e958Smrg: ${LN_S="ln -s"}
31747e89262Smrg: ${MAKE="make"}
31847e89262Smrg: ${MKDIR="mkdir"}
31947e89262Smrg: ${MV="mv -f"}
32047e89262Smrg: ${RM="rm -f"}
32147e89262Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
322bd1da9d7Smrg
32347e89262Smrg
324e6d2e958Smrg## -------------------- ##
325e6d2e958Smrg## Useful sed snippets. ##
326e6d2e958Smrg## -------------------- ##
327899129b3Smrg
328e6d2e958Smrgsed_dirname='s|/[^/]*$||'
329e6d2e958Smrgsed_basename='s|^.*/||'
330899129b3Smrg
331e6d2e958Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
332e6d2e958Smrg# metacharacters that are still active within double-quoted strings.
333e6d2e958Smrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g'
334899129b3Smrg
335e6d2e958Smrg# Same as above, but do not quote variable references.
336e6d2e958Smrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
337899129b3Smrg
338e6d2e958Smrg# Sed substitution that turns a string into a regex matching for the
339e6d2e958Smrg# string literally.
340e6d2e958Smrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
341899129b3Smrg
342e6d2e958Smrg# Sed substitution that converts a w32 file name or path
343e6d2e958Smrg# that contains forward slashes, into one that contains
344e6d2e958Smrg# (escaped) backslashes.  A very naive implementation.
345e6d2e958Smrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
346e6d2e958Smrg
347e6d2e958Smrg# Re-'\' parameter expansions in output of sed_double_quote_subst that
348e6d2e958Smrg# were '\'-ed in input to the same.  If an odd number of '\' preceded a
349e6d2e958Smrg# '$' in input to sed_double_quote_subst, that '$' was protected from
350e6d2e958Smrg# expansion.  Since each input '\' is now two '\'s, look for any number
351e6d2e958Smrg# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
352e6d2e958Smrg_G_bs='\\'
353e6d2e958Smrg_G_bs2='\\\\'
354e6d2e958Smrg_G_bs4='\\\\\\\\'
355e6d2e958Smrg_G_dollar='\$'
356e6d2e958Smrgsed_double_backslash="\
357e6d2e958Smrg  s/$_G_bs4/&\\
358e6d2e958Smrg/g
359e6d2e958Smrg  s/^$_G_bs2$_G_dollar/$_G_bs&/
360e6d2e958Smrg  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
361e6d2e958Smrg  s/\n//g"
362899129b3Smrg
363bd1da9d7Smrg
364e6d2e958Smrg## ----------------- ##
365e6d2e958Smrg## Global variables. ##
366e6d2e958Smrg## ----------------- ##
36747e89262Smrg
368e6d2e958Smrg# Except for the global variables explicitly listed below, the following
369e6d2e958Smrg# functions in the '^func_' namespace, and the '^require_' namespace
370e6d2e958Smrg# variables initialised in the 'Resource management' section, sourcing
371e6d2e958Smrg# this file will not pollute your global namespace with anything
372e6d2e958Smrg# else. There's no portable way to scope variables in Bourne shell
373e6d2e958Smrg# though, so actually running these functions will sometimes place
374e6d2e958Smrg# results into a variable named after the function, and often use
375e6d2e958Smrg# temporary variables in the '^_G_' namespace. If you are careful to
376e6d2e958Smrg# avoid using those namespaces casually in your sourcing script, things
377e6d2e958Smrg# should continue to work as you expect. And, of course, you can freely
378e6d2e958Smrg# overwrite any of the functions or variables defined here before
379e6d2e958Smrg# calling anything to customize them.
38047e89262Smrg
381e6d2e958SmrgEXIT_SUCCESS=0
382e6d2e958SmrgEXIT_FAILURE=1
383e6d2e958SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
384e6d2e958SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
38547e89262Smrg
386e6d2e958Smrg# Allow overriding, eg assuming that you follow the convention of
387e6d2e958Smrg# putting '$debug_cmd' at the start of all your functions, you can get
388e6d2e958Smrg# bash to show function call trace with:
389e6d2e958Smrg#
3906ad5a0e2Smrg#    debug_cmd='echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
391e6d2e958Smrgdebug_cmd=${debug_cmd-":"}
392e6d2e958Smrgexit_cmd=:
39347e89262Smrg
394e6d2e958Smrg# By convention, finish your script with:
395e6d2e958Smrg#
396e6d2e958Smrg#    exit $exit_status
397e6d2e958Smrg#
398e6d2e958Smrg# so that you can set exit_status to non-zero if you want to indicate
399e6d2e958Smrg# something went wrong during execution without actually bailing out at
400e6d2e958Smrg# the point of failure.
401e6d2e958Smrgexit_status=$EXIT_SUCCESS
40247e89262Smrg
403e6d2e958Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
404e6d2e958Smrg# is ksh but when the shell is invoked as "sh" and the current value of
405e6d2e958Smrg# the _XPG environment variable is not equal to 1 (one), the special
406e6d2e958Smrg# positional parameter $0, within a function call, is the name of the
407e6d2e958Smrg# function.
408e6d2e958Smrgprogpath=$0
40947e89262Smrg
410e6d2e958Smrg# The name of this program.
411e6d2e958Smrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"`
41247e89262Smrg
413e6d2e958Smrg# Make sure we have an absolute progpath for reexecution:
41447e89262Smrgcase $progpath in
41547e89262Smrg  [\\/]*|[A-Za-z]:\\*) ;;
41647e89262Smrg  *[\\/]*)
417e6d2e958Smrg     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
41847e89262Smrg     progdir=`cd "$progdir" && pwd`
419e6d2e958Smrg     progpath=$progdir/$progname
42047e89262Smrg     ;;
42147e89262Smrg  *)
422e6d2e958Smrg     _G_IFS=$IFS
423899129b3Smrg     IFS=${PATH_SEPARATOR-:}
42447e89262Smrg     for progdir in $PATH; do
425e6d2e958Smrg       IFS=$_G_IFS
42647e89262Smrg       test -x "$progdir/$progname" && break
42747e89262Smrg     done
428e6d2e958Smrg     IFS=$_G_IFS
42947e89262Smrg     test -n "$progdir" || progdir=`pwd`
430e6d2e958Smrg     progpath=$progdir/$progname
43147e89262Smrg     ;;
43247e89262Smrgesac
43347e89262Smrg
43447e89262Smrg
435e6d2e958Smrg## ----------------- ##
436e6d2e958Smrg## Standard options. ##
437e6d2e958Smrg## ----------------- ##
438899129b3Smrg
439e6d2e958Smrg# The following options affect the operation of the functions defined
440e6d2e958Smrg# below, and should be set appropriately depending on run-time para-
441e6d2e958Smrg# meters passed on the command line.
44247e89262Smrg
44347e89262Smrgopt_dry_run=false
44447e89262Smrgopt_quiet=false
44547e89262Smrgopt_verbose=false
44647e89262Smrg
447e6d2e958Smrg# Categories 'all' and 'none' are always available.  Append any others
448e6d2e958Smrg# you will pass as the first argument to func_warning from your own
449e6d2e958Smrg# code.
450e6d2e958Smrgwarning_categories=
45147e89262Smrg
452e6d2e958Smrg# By default, display warnings according to 'opt_warning_types'.  Set
453e6d2e958Smrg# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
454e6d2e958Smrg# treat the next displayed warning as a fatal error.
455e6d2e958Smrgwarning_func=func_warn_and_continue
45647e89262Smrg
457e6d2e958Smrg# Set to 'all' to display all warnings, 'none' to suppress all
458e6d2e958Smrg# warnings, or a space delimited list of some subset of
459e6d2e958Smrg# 'warning_categories' to display only the listed warnings.
460e6d2e958Smrgopt_warning_types=all
46147e89262Smrg
46247e89262Smrg
463e6d2e958Smrg## -------------------- ##
464e6d2e958Smrg## Resource management. ##
465e6d2e958Smrg## -------------------- ##
46647e89262Smrg
467e6d2e958Smrg# This section contains definitions for functions that each ensure a
468e6d2e958Smrg# particular resource (a file, or a non-empty configuration variable for
469e6d2e958Smrg# example) is available, and if appropriate to extract default values
470e6d2e958Smrg# from pertinent package files. Call them using their associated
471e6d2e958Smrg# 'require_*' variable to ensure that they are executed, at most, once.
472e6d2e958Smrg#
473e6d2e958Smrg# It's entirely deliberate that calling these functions can set
474e6d2e958Smrg# variables that don't obey the namespace limitations obeyed by the rest
475e6d2e958Smrg# of this file, in order that that they be as useful as possible to
476e6d2e958Smrg# callers.
47747e89262Smrg
47847e89262Smrg
479e6d2e958Smrg# require_term_colors
480e6d2e958Smrg# -------------------
481e6d2e958Smrg# Allow display of bold text on terminals that support it.
482e6d2e958Smrgrequire_term_colors=func_require_term_colors
483e6d2e958Smrgfunc_require_term_colors ()
48447e89262Smrg{
485e6d2e958Smrg    $debug_cmd
486e6d2e958Smrg
487e6d2e958Smrg    test -t 1 && {
488e6d2e958Smrg      # COLORTERM and USE_ANSI_COLORS environment variables take
489e6d2e958Smrg      # precedence, because most terminfo databases neglect to describe
490e6d2e958Smrg      # whether color sequences are supported.
491e6d2e958Smrg      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
492e6d2e958Smrg
493e6d2e958Smrg      if test 1 = "$USE_ANSI_COLORS"; then
494e6d2e958Smrg        # Standard ANSI escape sequences
495e6d2e958Smrg        tc_reset='[0m'
496e6d2e958Smrg        tc_bold='[1m';   tc_standout='[7m'
497e6d2e958Smrg        tc_red='[31m';   tc_green='[32m'
498e6d2e958Smrg        tc_blue='[34m';  tc_cyan='[36m'
499e6d2e958Smrg      else
500e6d2e958Smrg        # Otherwise trust the terminfo database after all.
501e6d2e958Smrg        test -n "`tput sgr0 2>/dev/null`" && {
502e6d2e958Smrg          tc_reset=`tput sgr0`
503e6d2e958Smrg          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
504e6d2e958Smrg          tc_standout=$tc_bold
505e6d2e958Smrg          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
506e6d2e958Smrg          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
507e6d2e958Smrg          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
508e6d2e958Smrg          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
509e6d2e958Smrg          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
510e6d2e958Smrg        }
511e6d2e958Smrg      fi
512e6d2e958Smrg    }
51347e89262Smrg
514e6d2e958Smrg    require_term_colors=:
51547e89262Smrg}
51647e89262Smrg
51747e89262Smrg
518e6d2e958Smrg## ----------------- ##
519e6d2e958Smrg## Function library. ##
520e6d2e958Smrg## ----------------- ##
521e6d2e958Smrg
522e6d2e958Smrg# This section contains a variety of useful functions to call in your
523e6d2e958Smrg# scripts. Take note of the portable wrappers for features provided by
524e6d2e958Smrg# some modern shells, which will fall back to slower equivalents on
525e6d2e958Smrg# less featureful shells.
526e6d2e958Smrg
527e6d2e958Smrg
528e6d2e958Smrg# func_append VAR VALUE
529e6d2e958Smrg# ---------------------
530e6d2e958Smrg# Append VALUE onto the existing contents of VAR.
531e6d2e958Smrg
532e6d2e958Smrg  # We should try to minimise forks, especially on Windows where they are
533e6d2e958Smrg  # unreasonably slow, so skip the feature probes when bash or zsh are
534e6d2e958Smrg  # being used:
535e6d2e958Smrg  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
536e6d2e958Smrg    : ${_G_HAVE_ARITH_OP="yes"}
537e6d2e958Smrg    : ${_G_HAVE_XSI_OPS="yes"}
538e6d2e958Smrg    # The += operator was introduced in bash 3.1
539e6d2e958Smrg    case $BASH_VERSION in
540e6d2e958Smrg      [12].* | 3.0 | 3.0*) ;;
541e6d2e958Smrg      *)
542e6d2e958Smrg        : ${_G_HAVE_PLUSEQ_OP="yes"}
543e6d2e958Smrg        ;;
544e6d2e958Smrg    esac
545e6d2e958Smrg  fi
546e6d2e958Smrg
547e6d2e958Smrg  # _G_HAVE_PLUSEQ_OP
548e6d2e958Smrg  # Can be empty, in which case the shell is probed, "yes" if += is
549e6d2e958Smrg  # useable or anything else if it does not work.
550e6d2e958Smrg  test -z "$_G_HAVE_PLUSEQ_OP" \
551e6d2e958Smrg    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
552e6d2e958Smrg    && _G_HAVE_PLUSEQ_OP=yes
553e6d2e958Smrg
554e6d2e958Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"
555e6d2e958Smrgthen
556e6d2e958Smrg  # This is an XSI compatible shell, allowing a faster implementation...
557e6d2e958Smrg  eval 'func_append ()
558e6d2e958Smrg  {
559e6d2e958Smrg    $debug_cmd
560e6d2e958Smrg
561e6d2e958Smrg    eval "$1+=\$2"
562e6d2e958Smrg  }'
563e6d2e958Smrgelse
564e6d2e958Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
565e6d2e958Smrg  func_append ()
566e6d2e958Smrg  {
567e6d2e958Smrg    $debug_cmd
568e6d2e958Smrg
569e6d2e958Smrg    eval "$1=\$$1\$2"
570e6d2e958Smrg  }
571e6d2e958Smrgfi
572e6d2e958Smrg
573e6d2e958Smrg
574e6d2e958Smrg# func_append_quoted VAR VALUE
575e6d2e958Smrg# ----------------------------
576e6d2e958Smrg# Quote VALUE and append to the end of shell variable VAR, separated
577e6d2e958Smrg# by a space.
578e6d2e958Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then
579e6d2e958Smrg  eval 'func_append_quoted ()
580e6d2e958Smrg  {
581e6d2e958Smrg    $debug_cmd
582e6d2e958Smrg
583e6d2e958Smrg    func_quote_for_eval "$2"
584e6d2e958Smrg    eval "$1+=\\ \$func_quote_for_eval_result"
585e6d2e958Smrg  }'
586e6d2e958Smrgelse
587e6d2e958Smrg  func_append_quoted ()
588e6d2e958Smrg  {
589e6d2e958Smrg    $debug_cmd
590e6d2e958Smrg
591e6d2e958Smrg    func_quote_for_eval "$2"
592e6d2e958Smrg    eval "$1=\$$1\\ \$func_quote_for_eval_result"
593e6d2e958Smrg  }
594e6d2e958Smrgfi
595e6d2e958Smrg
596e6d2e958Smrg
597e6d2e958Smrg# func_append_uniq VAR VALUE
598e6d2e958Smrg# --------------------------
599e6d2e958Smrg# Append unique VALUE onto the existing contents of VAR, assuming
600e6d2e958Smrg# entries are delimited by the first character of VALUE.  For example:
601e6d2e958Smrg#
602e6d2e958Smrg#   func_append_uniq options " --another-option option-argument"
603e6d2e958Smrg#
604e6d2e958Smrg# will only append to $options if " --another-option option-argument "
605e6d2e958Smrg# is not already present somewhere in $options already (note spaces at
606e6d2e958Smrg# each end implied by leading space in second argument).
607e6d2e958Smrgfunc_append_uniq ()
608e6d2e958Smrg{
609e6d2e958Smrg    $debug_cmd
610e6d2e958Smrg
611e6d2e958Smrg    eval _G_current_value='`$ECHO $'$1'`'
612e6d2e958Smrg    _G_delim=`expr "$2" : '\(.\)'`
613e6d2e958Smrg
614e6d2e958Smrg    case $_G_delim$_G_current_value$_G_delim in
615e6d2e958Smrg      *"$2$_G_delim"*) ;;
616e6d2e958Smrg      *) func_append "$@" ;;
617e6d2e958Smrg    esac
618e6d2e958Smrg}
619e6d2e958Smrg
620e6d2e958Smrg
621e6d2e958Smrg# func_arith TERM...
622e6d2e958Smrg# ------------------
623e6d2e958Smrg# Set func_arith_result to the result of evaluating TERMs.
624e6d2e958Smrg  test -z "$_G_HAVE_ARITH_OP" \
625e6d2e958Smrg    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
626e6d2e958Smrg    && _G_HAVE_ARITH_OP=yes
627e6d2e958Smrg
628e6d2e958Smrgif test yes = "$_G_HAVE_ARITH_OP"; then
629e6d2e958Smrg  eval 'func_arith ()
630e6d2e958Smrg  {
631e6d2e958Smrg    $debug_cmd
632e6d2e958Smrg
633e6d2e958Smrg    func_arith_result=$(( $* ))
634e6d2e958Smrg  }'
635e6d2e958Smrgelse
636e6d2e958Smrg  func_arith ()
637e6d2e958Smrg  {
638e6d2e958Smrg    $debug_cmd
639e6d2e958Smrg
640e6d2e958Smrg    func_arith_result=`expr "$@"`
641e6d2e958Smrg  }
642e6d2e958Smrgfi
643e6d2e958Smrg
644e6d2e958Smrg
645e6d2e958Smrg# func_basename FILE
646e6d2e958Smrg# ------------------
647e6d2e958Smrg# Set func_basename_result to FILE with everything up to and including
648e6d2e958Smrg# the last / stripped.
649e6d2e958Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
650e6d2e958Smrg  # If this shell supports suffix pattern removal, then use it to avoid
651e6d2e958Smrg  # forking. Hide the definitions single quotes in case the shell chokes
652e6d2e958Smrg  # on unsupported syntax...
653e6d2e958Smrg  _b='func_basename_result=${1##*/}'
654e6d2e958Smrg  _d='case $1 in
655e6d2e958Smrg        */*) func_dirname_result=${1%/*}$2 ;;
656e6d2e958Smrg        *  ) func_dirname_result=$3        ;;
657e6d2e958Smrg      esac'
658e6d2e958Smrg
659e6d2e958Smrgelse
660e6d2e958Smrg  # ...otherwise fall back to using sed.
661e6d2e958Smrg  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
662e6d2e958Smrg  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
663e6d2e958Smrg      if test "X$func_dirname_result" = "X$1"; then
664e6d2e958Smrg        func_dirname_result=$3
665e6d2e958Smrg      else
666e6d2e958Smrg        func_append func_dirname_result "$2"
667e6d2e958Smrg      fi'
668e6d2e958Smrgfi
669e6d2e958Smrg
670e6d2e958Smrgeval 'func_basename ()
671e6d2e958Smrg{
672e6d2e958Smrg    $debug_cmd
673e6d2e958Smrg
674e6d2e958Smrg    '"$_b"'
675e6d2e958Smrg}'
676e6d2e958Smrg
677e6d2e958Smrg
678e6d2e958Smrg# func_dirname FILE APPEND NONDIR_REPLACEMENT
679e6d2e958Smrg# -------------------------------------------
680e6d2e958Smrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
681e6d2e958Smrg# otherwise set result to NONDIR_REPLACEMENT.
682e6d2e958Smrgeval 'func_dirname ()
683e6d2e958Smrg{
684e6d2e958Smrg    $debug_cmd
685e6d2e958Smrg
686e6d2e958Smrg    '"$_d"'
687e6d2e958Smrg}'
688e6d2e958Smrg
689e6d2e958Smrg
690e6d2e958Smrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
691e6d2e958Smrg# --------------------------------------------------------
692e6d2e958Smrg# Perform func_basename and func_dirname in a single function
693e6d2e958Smrg# call:
694e6d2e958Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
695e6d2e958Smrg#             add APPEND to the result, otherwise set result
696e6d2e958Smrg#             to NONDIR_REPLACEMENT.
697e6d2e958Smrg#             value returned in "$func_dirname_result"
698e6d2e958Smrg#   basename: Compute filename of FILE.
699e6d2e958Smrg#             value retuned in "$func_basename_result"
700e6d2e958Smrg# For efficiency, we do not delegate to the functions above but instead
701e6d2e958Smrg# duplicate the functionality here.
702e6d2e958Smrgeval 'func_dirname_and_basename ()
703e6d2e958Smrg{
704e6d2e958Smrg    $debug_cmd
705e6d2e958Smrg
706e6d2e958Smrg    '"$_b"'
707e6d2e958Smrg    '"$_d"'
708e6d2e958Smrg}'
709e6d2e958Smrg
710e6d2e958Smrg
711e6d2e958Smrg# func_echo ARG...
712e6d2e958Smrg# ----------------
713e6d2e958Smrg# Echo program name prefixed message.
714e6d2e958Smrgfunc_echo ()
715e6d2e958Smrg{
716e6d2e958Smrg    $debug_cmd
717e6d2e958Smrg
718e6d2e958Smrg    _G_message=$*
719e6d2e958Smrg
720e6d2e958Smrg    func_echo_IFS=$IFS
721e6d2e958Smrg    IFS=$nl
722e6d2e958Smrg    for _G_line in $_G_message; do
723e6d2e958Smrg      IFS=$func_echo_IFS
724e6d2e958Smrg      $ECHO "$progname: $_G_line"
725e6d2e958Smrg    done
726e6d2e958Smrg    IFS=$func_echo_IFS
727e6d2e958Smrg}
728e6d2e958Smrg
729e6d2e958Smrg
730e6d2e958Smrg# func_echo_all ARG...
731e6d2e958Smrg# --------------------
732e6d2e958Smrg# Invoke $ECHO with all args, space-separated.
733e6d2e958Smrgfunc_echo_all ()
734e6d2e958Smrg{
735e6d2e958Smrg    $ECHO "$*"
736e6d2e958Smrg}
737e6d2e958Smrg
738e6d2e958Smrg
739e6d2e958Smrg# func_echo_infix_1 INFIX ARG...
740e6d2e958Smrg# ------------------------------
741e6d2e958Smrg# Echo program name, followed by INFIX on the first line, with any
742e6d2e958Smrg# additional lines not showing INFIX.
743e6d2e958Smrgfunc_echo_infix_1 ()
744e6d2e958Smrg{
745e6d2e958Smrg    $debug_cmd
746e6d2e958Smrg
747e6d2e958Smrg    $require_term_colors
748e6d2e958Smrg
749e6d2e958Smrg    _G_infix=$1; shift
750e6d2e958Smrg    _G_indent=$_G_infix
751e6d2e958Smrg    _G_prefix="$progname: $_G_infix: "
752e6d2e958Smrg    _G_message=$*
753e6d2e958Smrg
754e6d2e958Smrg    # Strip color escape sequences before counting printable length
755e6d2e958Smrg    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
756e6d2e958Smrg    do
757e6d2e958Smrg      test -n "$_G_tc" && {
758e6d2e958Smrg        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
759e6d2e958Smrg        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
760e6d2e958Smrg      }
761e6d2e958Smrg    done
762e6d2e958Smrg    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
763e6d2e958Smrg
764e6d2e958Smrg    func_echo_infix_1_IFS=$IFS
765e6d2e958Smrg    IFS=$nl
766e6d2e958Smrg    for _G_line in $_G_message; do
767e6d2e958Smrg      IFS=$func_echo_infix_1_IFS
768e6d2e958Smrg      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
769e6d2e958Smrg      _G_prefix=$_G_indent
770e6d2e958Smrg    done
771e6d2e958Smrg    IFS=$func_echo_infix_1_IFS
772e6d2e958Smrg}
773e6d2e958Smrg
774e6d2e958Smrg
775e6d2e958Smrg# func_error ARG...
776e6d2e958Smrg# -----------------
777e6d2e958Smrg# Echo program name prefixed message to standard error.
778e6d2e958Smrgfunc_error ()
779e6d2e958Smrg{
780e6d2e958Smrg    $debug_cmd
781e6d2e958Smrg
782e6d2e958Smrg    $require_term_colors
783e6d2e958Smrg
784e6d2e958Smrg    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
785e6d2e958Smrg}
786e6d2e958Smrg
787e6d2e958Smrg
788e6d2e958Smrg# func_fatal_error ARG...
789e6d2e958Smrg# -----------------------
790e6d2e958Smrg# Echo program name prefixed message to standard error, and exit.
791e6d2e958Smrgfunc_fatal_error ()
792e6d2e958Smrg{
793e6d2e958Smrg    $debug_cmd
794e6d2e958Smrg
795e6d2e958Smrg    func_error "$*"
796e6d2e958Smrg    exit $EXIT_FAILURE
797e6d2e958Smrg}
798e6d2e958Smrg
799e6d2e958Smrg
800e6d2e958Smrg# func_grep EXPRESSION FILENAME
801e6d2e958Smrg# -----------------------------
80247e89262Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
80347e89262Smrgfunc_grep ()
80447e89262Smrg{
805e6d2e958Smrg    $debug_cmd
806e6d2e958Smrg
80747e89262Smrg    $GREP "$1" "$2" >/dev/null 2>&1
80847e89262Smrg}
80947e89262Smrg
81047e89262Smrg
811e6d2e958Smrg# func_len STRING
812e6d2e958Smrg# ---------------
813e6d2e958Smrg# Set func_len_result to the length of STRING. STRING may not
814e6d2e958Smrg# start with a hyphen.
815e6d2e958Smrg  test -z "$_G_HAVE_XSI_OPS" \
816e6d2e958Smrg    && (eval 'x=a/b/c;
817e6d2e958Smrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
818e6d2e958Smrg    && _G_HAVE_XSI_OPS=yes
819e6d2e958Smrg
820e6d2e958Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
821e6d2e958Smrg  eval 'func_len ()
822e6d2e958Smrg  {
823e6d2e958Smrg    $debug_cmd
824e6d2e958Smrg
825e6d2e958Smrg    func_len_result=${#1}
826e6d2e958Smrg  }'
827e6d2e958Smrgelse
828e6d2e958Smrg  func_len ()
829e6d2e958Smrg  {
830e6d2e958Smrg    $debug_cmd
831e6d2e958Smrg
832e6d2e958Smrg    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
833e6d2e958Smrg  }
834e6d2e958Smrgfi
835e6d2e958Smrg
836e6d2e958Smrg
837e6d2e958Smrg# func_mkdir_p DIRECTORY-PATH
838e6d2e958Smrg# ---------------------------
83947e89262Smrg# Make sure the entire path to DIRECTORY-PATH is available.
84047e89262Smrgfunc_mkdir_p ()
84147e89262Smrg{
842e6d2e958Smrg    $debug_cmd
84347e89262Smrg
844e6d2e958Smrg    _G_directory_path=$1
845e6d2e958Smrg    _G_dir_list=
84647e89262Smrg
847e6d2e958Smrg    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
848e6d2e958Smrg
849e6d2e958Smrg      # Protect directory names starting with '-'
850e6d2e958Smrg      case $_G_directory_path in
851e6d2e958Smrg        -*) _G_directory_path=./$_G_directory_path ;;
85247e89262Smrg      esac
85347e89262Smrg
85447e89262Smrg      # While some portion of DIR does not yet exist...
855e6d2e958Smrg      while test ! -d "$_G_directory_path"; do
85647e89262Smrg        # ...make a list in topmost first order.  Use a colon delimited
85747e89262Smrg	# list incase some portion of path contains whitespace.
858e6d2e958Smrg        _G_dir_list=$_G_directory_path:$_G_dir_list
85947e89262Smrg
86047e89262Smrg        # If the last portion added has no slash in it, the list is done
861e6d2e958Smrg        case $_G_directory_path in */*) ;; *) break ;; esac
86247e89262Smrg
86347e89262Smrg        # ...otherwise throw away the child directory and loop
864e6d2e958Smrg        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
86547e89262Smrg      done
866e6d2e958Smrg      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
86747e89262Smrg
868e6d2e958Smrg      func_mkdir_p_IFS=$IFS; IFS=:
869e6d2e958Smrg      for _G_dir in $_G_dir_list; do
870e6d2e958Smrg	IFS=$func_mkdir_p_IFS
871e6d2e958Smrg        # mkdir can fail with a 'File exist' error if two processes
87247e89262Smrg        # try to create one of the directories concurrently.  Don't
87347e89262Smrg        # stop in that case!
874e6d2e958Smrg        $MKDIR "$_G_dir" 2>/dev/null || :
87547e89262Smrg      done
876e6d2e958Smrg      IFS=$func_mkdir_p_IFS
87747e89262Smrg
87847e89262Smrg      # Bail out if we (or some other process) failed to create a directory.
879e6d2e958Smrg      test -d "$_G_directory_path" || \
880e6d2e958Smrg        func_fatal_error "Failed to create '$1'"
88147e89262Smrg    fi
88247e89262Smrg}
883bd1da9d7Smrg
884bd1da9d7Smrg
885e6d2e958Smrg# func_mktempdir [BASENAME]
886e6d2e958Smrg# -------------------------
887bd1da9d7Smrg# Make a temporary directory that won't clash with other running
888bd1da9d7Smrg# libtool processes, and avoids race conditions if possible.  If
889e6d2e958Smrg# given, BASENAME is the basename for that directory.
890bd1da9d7Smrgfunc_mktempdir ()
891bd1da9d7Smrg{
892e6d2e958Smrg    $debug_cmd
893e6d2e958Smrg
894e6d2e958Smrg    _G_template=${TMPDIR-/tmp}/${1-$progname}
895bd1da9d7Smrg
896e6d2e958Smrg    if test : = "$opt_dry_run"; then
897bd1da9d7Smrg      # Return a directory name, but don't create it in dry-run mode
898e6d2e958Smrg      _G_tmpdir=$_G_template-$$
899bd1da9d7Smrg    else
900bd1da9d7Smrg
901bd1da9d7Smrg      # If mktemp works, use that first and foremost
902e6d2e958Smrg      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
903bd1da9d7Smrg
904e6d2e958Smrg      if test ! -d "$_G_tmpdir"; then
90547e89262Smrg        # Failing that, at least try and use $RANDOM to avoid a race
906e6d2e958Smrg        _G_tmpdir=$_G_template-${RANDOM-0}$$
907bd1da9d7Smrg
908e6d2e958Smrg        func_mktempdir_umask=`umask`
90947e89262Smrg        umask 0077
910e6d2e958Smrg        $MKDIR "$_G_tmpdir"
911e6d2e958Smrg        umask $func_mktempdir_umask
912bd1da9d7Smrg      fi
913bd1da9d7Smrg
914bd1da9d7Smrg      # If we're not in dry-run mode, bomb out on failure
915e6d2e958Smrg      test -d "$_G_tmpdir" || \
916e6d2e958Smrg        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
917e6d2e958Smrg    fi
918e6d2e958Smrg
919e6d2e958Smrg    $ECHO "$_G_tmpdir"
920e6d2e958Smrg}
921e6d2e958Smrg
922e6d2e958Smrg
923e6d2e958Smrg# func_normal_abspath PATH
924e6d2e958Smrg# ------------------------
925e6d2e958Smrg# Remove doubled-up and trailing slashes, "." path components,
926e6d2e958Smrg# and cancel out any ".." path components in PATH after making
927e6d2e958Smrg# it an absolute path.
928e6d2e958Smrgfunc_normal_abspath ()
929e6d2e958Smrg{
930e6d2e958Smrg    $debug_cmd
931e6d2e958Smrg
932e6d2e958Smrg    # These SED scripts presuppose an absolute path with a trailing slash.
933e6d2e958Smrg    _G_pathcar='s|^/\([^/]*\).*$|\1|'
934e6d2e958Smrg    _G_pathcdr='s|^/[^/]*||'
935e6d2e958Smrg    _G_removedotparts=':dotsl
936e6d2e958Smrg		s|/\./|/|g
937e6d2e958Smrg		t dotsl
938e6d2e958Smrg		s|/\.$|/|'
939e6d2e958Smrg    _G_collapseslashes='s|/\{1,\}|/|g'
940e6d2e958Smrg    _G_finalslash='s|/*$|/|'
941e6d2e958Smrg
942e6d2e958Smrg    # Start from root dir and reassemble the path.
943e6d2e958Smrg    func_normal_abspath_result=
944e6d2e958Smrg    func_normal_abspath_tpath=$1
945e6d2e958Smrg    func_normal_abspath_altnamespace=
946e6d2e958Smrg    case $func_normal_abspath_tpath in
947e6d2e958Smrg      "")
948e6d2e958Smrg        # Empty path, that just means $cwd.
949e6d2e958Smrg        func_stripname '' '/' "`pwd`"
950e6d2e958Smrg        func_normal_abspath_result=$func_stripname_result
951e6d2e958Smrg        return
952e6d2e958Smrg        ;;
953e6d2e958Smrg      # The next three entries are used to spot a run of precisely
954e6d2e958Smrg      # two leading slashes without using negated character classes;
955e6d2e958Smrg      # we take advantage of case's first-match behaviour.
956e6d2e958Smrg      ///*)
957e6d2e958Smrg        # Unusual form of absolute path, do nothing.
958e6d2e958Smrg        ;;
959e6d2e958Smrg      //*)
960e6d2e958Smrg        # Not necessarily an ordinary path; POSIX reserves leading '//'
961e6d2e958Smrg        # and for example Cygwin uses it to access remote file shares
962e6d2e958Smrg        # over CIFS/SMB, so we conserve a leading double slash if found.
963e6d2e958Smrg        func_normal_abspath_altnamespace=/
964e6d2e958Smrg        ;;
965e6d2e958Smrg      /*)
966e6d2e958Smrg        # Absolute path, do nothing.
967e6d2e958Smrg        ;;
968e6d2e958Smrg      *)
969e6d2e958Smrg        # Relative path, prepend $cwd.
970e6d2e958Smrg        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
971e6d2e958Smrg        ;;
972e6d2e958Smrg    esac
973e6d2e958Smrg
974e6d2e958Smrg    # Cancel out all the simple stuff to save iterations.  We also want
975e6d2e958Smrg    # the path to end with a slash for ease of parsing, so make sure
976e6d2e958Smrg    # there is one (and only one) here.
977e6d2e958Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
978e6d2e958Smrg          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
979e6d2e958Smrg    while :; do
980e6d2e958Smrg      # Processed it all yet?
981e6d2e958Smrg      if test / = "$func_normal_abspath_tpath"; then
982e6d2e958Smrg        # If we ascended to the root using ".." the result may be empty now.
983e6d2e958Smrg        if test -z "$func_normal_abspath_result"; then
984e6d2e958Smrg          func_normal_abspath_result=/
985e6d2e958Smrg        fi
986e6d2e958Smrg        break
987e6d2e958Smrg      fi
988e6d2e958Smrg      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
989e6d2e958Smrg          -e "$_G_pathcar"`
990e6d2e958Smrg      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
991e6d2e958Smrg          -e "$_G_pathcdr"`
992e6d2e958Smrg      # Figure out what to do with it
993e6d2e958Smrg      case $func_normal_abspath_tcomponent in
994e6d2e958Smrg        "")
995e6d2e958Smrg          # Trailing empty path component, ignore it.
996e6d2e958Smrg          ;;
997e6d2e958Smrg        ..)
998e6d2e958Smrg          # Parent dir; strip last assembled component from result.
999e6d2e958Smrg          func_dirname "$func_normal_abspath_result"
1000e6d2e958Smrg          func_normal_abspath_result=$func_dirname_result
1001e6d2e958Smrg          ;;
1002e6d2e958Smrg        *)
1003e6d2e958Smrg          # Actual path component, append it.
1004e6d2e958Smrg          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
1005e6d2e958Smrg          ;;
1006e6d2e958Smrg      esac
1007e6d2e958Smrg    done
1008e6d2e958Smrg    # Restore leading double-slash if one was found on entry.
1009e6d2e958Smrg    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
1010e6d2e958Smrg}
1011e6d2e958Smrg
1012e6d2e958Smrg
1013e6d2e958Smrg# func_notquiet ARG...
1014e6d2e958Smrg# --------------------
1015e6d2e958Smrg# Echo program name prefixed message only when not in quiet mode.
1016e6d2e958Smrgfunc_notquiet ()
1017e6d2e958Smrg{
1018e6d2e958Smrg    $debug_cmd
1019e6d2e958Smrg
1020e6d2e958Smrg    $opt_quiet || func_echo ${1+"$@"}
1021e6d2e958Smrg
1022e6d2e958Smrg    # A bug in bash halts the script if the last line of a function
1023e6d2e958Smrg    # fails when set -e is in force, so we need another command to
1024e6d2e958Smrg    # work around that:
1025e6d2e958Smrg    :
1026e6d2e958Smrg}
1027e6d2e958Smrg
1028e6d2e958Smrg
1029e6d2e958Smrg# func_relative_path SRCDIR DSTDIR
1030e6d2e958Smrg# --------------------------------
1031e6d2e958Smrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
1032e6d2e958Smrgfunc_relative_path ()
1033e6d2e958Smrg{
1034e6d2e958Smrg    $debug_cmd
1035e6d2e958Smrg
1036e6d2e958Smrg    func_relative_path_result=
1037e6d2e958Smrg    func_normal_abspath "$1"
1038e6d2e958Smrg    func_relative_path_tlibdir=$func_normal_abspath_result
1039e6d2e958Smrg    func_normal_abspath "$2"
1040e6d2e958Smrg    func_relative_path_tbindir=$func_normal_abspath_result
1041e6d2e958Smrg
1042e6d2e958Smrg    # Ascend the tree starting from libdir
1043e6d2e958Smrg    while :; do
1044e6d2e958Smrg      # check if we have found a prefix of bindir
1045e6d2e958Smrg      case $func_relative_path_tbindir in
1046e6d2e958Smrg        $func_relative_path_tlibdir)
1047e6d2e958Smrg          # found an exact match
1048e6d2e958Smrg          func_relative_path_tcancelled=
1049e6d2e958Smrg          break
1050e6d2e958Smrg          ;;
1051e6d2e958Smrg        $func_relative_path_tlibdir*)
1052e6d2e958Smrg          # found a matching prefix
1053e6d2e958Smrg          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
1054e6d2e958Smrg          func_relative_path_tcancelled=$func_stripname_result
1055e6d2e958Smrg          if test -z "$func_relative_path_result"; then
1056e6d2e958Smrg            func_relative_path_result=.
1057e6d2e958Smrg          fi
1058e6d2e958Smrg          break
1059e6d2e958Smrg          ;;
1060e6d2e958Smrg        *)
1061e6d2e958Smrg          func_dirname $func_relative_path_tlibdir
1062e6d2e958Smrg          func_relative_path_tlibdir=$func_dirname_result
1063e6d2e958Smrg          if test -z "$func_relative_path_tlibdir"; then
1064e6d2e958Smrg            # Have to descend all the way to the root!
1065e6d2e958Smrg            func_relative_path_result=../$func_relative_path_result
1066e6d2e958Smrg            func_relative_path_tcancelled=$func_relative_path_tbindir
1067e6d2e958Smrg            break
1068e6d2e958Smrg          fi
1069e6d2e958Smrg          func_relative_path_result=../$func_relative_path_result
1070e6d2e958Smrg          ;;
1071e6d2e958Smrg      esac
1072e6d2e958Smrg    done
1073e6d2e958Smrg
1074e6d2e958Smrg    # Now calculate path; take care to avoid doubling-up slashes.
1075e6d2e958Smrg    func_stripname '' '/' "$func_relative_path_result"
1076e6d2e958Smrg    func_relative_path_result=$func_stripname_result
1077e6d2e958Smrg    func_stripname '/' '/' "$func_relative_path_tcancelled"
1078e6d2e958Smrg    if test -n "$func_stripname_result"; then
1079e6d2e958Smrg      func_append func_relative_path_result "/$func_stripname_result"
1080e6d2e958Smrg    fi
1081e6d2e958Smrg
1082e6d2e958Smrg    # Normalisation. If bindir is libdir, return '.' else relative path.
1083e6d2e958Smrg    if test -n "$func_relative_path_result"; then
1084e6d2e958Smrg      func_stripname './' '' "$func_relative_path_result"
1085e6d2e958Smrg      func_relative_path_result=$func_stripname_result
1086bd1da9d7Smrg    fi
1087bd1da9d7Smrg
1088e6d2e958Smrg    test -n "$func_relative_path_result" || func_relative_path_result=.
1089e6d2e958Smrg
1090e6d2e958Smrg    :
1091e6d2e958Smrg}
1092e6d2e958Smrg
1093e6d2e958Smrg
1094e6d2e958Smrg# func_quote_for_eval ARG...
1095e6d2e958Smrg# --------------------------
1096e6d2e958Smrg# Aesthetically quote ARGs to be evaled later.
1097e6d2e958Smrg# This function returns two values:
1098e6d2e958Smrg#   i) func_quote_for_eval_result
1099e6d2e958Smrg#      double-quoted, suitable for a subsequent eval
1100e6d2e958Smrg#  ii) func_quote_for_eval_unquoted_result
1101e6d2e958Smrg#      has all characters that are still active within double
1102e6d2e958Smrg#      quotes backslashified.
1103e6d2e958Smrgfunc_quote_for_eval ()
1104e6d2e958Smrg{
1105e6d2e958Smrg    $debug_cmd
1106e6d2e958Smrg
1107e6d2e958Smrg    func_quote_for_eval_unquoted_result=
1108e6d2e958Smrg    func_quote_for_eval_result=
1109e6d2e958Smrg    while test 0 -lt $#; do
1110e6d2e958Smrg      case $1 in
1111e6d2e958Smrg        *[\\\`\"\$]*)
1112e6d2e958Smrg	  _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
1113e6d2e958Smrg        *)
1114e6d2e958Smrg          _G_unquoted_arg=$1 ;;
1115e6d2e958Smrg      esac
1116e6d2e958Smrg      if test -n "$func_quote_for_eval_unquoted_result"; then
1117e6d2e958Smrg	func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
1118e6d2e958Smrg      else
1119e6d2e958Smrg        func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
1120e6d2e958Smrg      fi
1121e6d2e958Smrg
1122e6d2e958Smrg      case $_G_unquoted_arg in
1123e6d2e958Smrg        # Double-quote args containing shell metacharacters to delay
1124e6d2e958Smrg        # word splitting, command substitution and variable expansion
1125e6d2e958Smrg        # for a subsequent eval.
1126e6d2e958Smrg        # Many Bourne shells cannot handle close brackets correctly
1127e6d2e958Smrg        # in scan sets, so we specify it separately.
1128e6d2e958Smrg        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
1129e6d2e958Smrg          _G_quoted_arg=\"$_G_unquoted_arg\"
1130e6d2e958Smrg          ;;
1131e6d2e958Smrg        *)
1132e6d2e958Smrg          _G_quoted_arg=$_G_unquoted_arg
1133e6d2e958Smrg	  ;;
1134e6d2e958Smrg      esac
1135e6d2e958Smrg
1136e6d2e958Smrg      if test -n "$func_quote_for_eval_result"; then
1137e6d2e958Smrg	func_append func_quote_for_eval_result " $_G_quoted_arg"
1138e6d2e958Smrg      else
1139e6d2e958Smrg        func_append func_quote_for_eval_result "$_G_quoted_arg"
1140e6d2e958Smrg      fi
1141e6d2e958Smrg      shift
1142e6d2e958Smrg    done
1143e6d2e958Smrg}
1144e6d2e958Smrg
1145e6d2e958Smrg
1146e6d2e958Smrg# func_quote_for_expand ARG
1147e6d2e958Smrg# -------------------------
1148e6d2e958Smrg# Aesthetically quote ARG to be evaled later; same as above,
1149e6d2e958Smrg# but do not quote variable references.
1150e6d2e958Smrgfunc_quote_for_expand ()
1151e6d2e958Smrg{
1152e6d2e958Smrg    $debug_cmd
1153e6d2e958Smrg
1154e6d2e958Smrg    case $1 in
1155e6d2e958Smrg      *[\\\`\"]*)
1156e6d2e958Smrg	_G_arg=`$ECHO "$1" | $SED \
1157e6d2e958Smrg	    -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
1158e6d2e958Smrg      *)
1159e6d2e958Smrg        _G_arg=$1 ;;
1160e6d2e958Smrg    esac
1161e6d2e958Smrg
1162e6d2e958Smrg    case $_G_arg in
1163e6d2e958Smrg      # Double-quote args containing shell metacharacters to delay
1164e6d2e958Smrg      # word splitting and command substitution for a subsequent eval.
1165e6d2e958Smrg      # Many Bourne shells cannot handle close brackets correctly
1166e6d2e958Smrg      # in scan sets, so we specify it separately.
1167e6d2e958Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
1168e6d2e958Smrg        _G_arg=\"$_G_arg\"
1169e6d2e958Smrg        ;;
1170e6d2e958Smrg    esac
1171e6d2e958Smrg
1172e6d2e958Smrg    func_quote_for_expand_result=$_G_arg
1173e6d2e958Smrg}
1174e6d2e958Smrg
1175e6d2e958Smrg
1176e6d2e958Smrg# func_stripname PREFIX SUFFIX NAME
1177e6d2e958Smrg# ---------------------------------
1178e6d2e958Smrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
1179e6d2e958Smrg# PREFIX and SUFFIX must not contain globbing or regex special
1180e6d2e958Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading
1181e6d2e958Smrg# dot (in which case that matches only a dot).
1182e6d2e958Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
1183e6d2e958Smrg  eval 'func_stripname ()
1184e6d2e958Smrg  {
1185e6d2e958Smrg    $debug_cmd
1186e6d2e958Smrg
1187e6d2e958Smrg    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
1188e6d2e958Smrg    # positional parameters, so assign one to ordinary variable first.
1189e6d2e958Smrg    func_stripname_result=$3
1190e6d2e958Smrg    func_stripname_result=${func_stripname_result#"$1"}
1191e6d2e958Smrg    func_stripname_result=${func_stripname_result%"$2"}
1192e6d2e958Smrg  }'
1193e6d2e958Smrgelse
1194e6d2e958Smrg  func_stripname ()
1195e6d2e958Smrg  {
1196e6d2e958Smrg    $debug_cmd
1197e6d2e958Smrg
1198e6d2e958Smrg    case $2 in
1199e6d2e958Smrg      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
1200e6d2e958Smrg      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
1201e6d2e958Smrg    esac
1202e6d2e958Smrg  }
1203e6d2e958Smrgfi
1204e6d2e958Smrg
1205e6d2e958Smrg
1206e6d2e958Smrg# func_show_eval CMD [FAIL_EXP]
1207e6d2e958Smrg# -----------------------------
1208e6d2e958Smrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
1209e6d2e958Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
1210e6d2e958Smrg# is given, then evaluate it.
1211e6d2e958Smrgfunc_show_eval ()
1212e6d2e958Smrg{
1213e6d2e958Smrg    $debug_cmd
1214e6d2e958Smrg
1215e6d2e958Smrg    _G_cmd=$1
1216e6d2e958Smrg    _G_fail_exp=${2-':'}
1217e6d2e958Smrg
1218e6d2e958Smrg    func_quote_for_expand "$_G_cmd"
1219e6d2e958Smrg    eval "func_notquiet $func_quote_for_expand_result"
1220e6d2e958Smrg
1221e6d2e958Smrg    $opt_dry_run || {
1222e6d2e958Smrg      eval "$_G_cmd"
1223e6d2e958Smrg      _G_status=$?
1224e6d2e958Smrg      if test 0 -ne "$_G_status"; then
1225e6d2e958Smrg	eval "(exit $_G_status); $_G_fail_exp"
1226e6d2e958Smrg      fi
1227e6d2e958Smrg    }
1228e6d2e958Smrg}
1229e6d2e958Smrg
1230e6d2e958Smrg
1231e6d2e958Smrg# func_show_eval_locale CMD [FAIL_EXP]
1232e6d2e958Smrg# ------------------------------------
1233e6d2e958Smrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
1234e6d2e958Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
1235e6d2e958Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
1236e6d2e958Smrgfunc_show_eval_locale ()
1237e6d2e958Smrg{
1238e6d2e958Smrg    $debug_cmd
1239e6d2e958Smrg
1240e6d2e958Smrg    _G_cmd=$1
1241e6d2e958Smrg    _G_fail_exp=${2-':'}
1242e6d2e958Smrg
1243e6d2e958Smrg    $opt_quiet || {
1244e6d2e958Smrg      func_quote_for_expand "$_G_cmd"
1245e6d2e958Smrg      eval "func_echo $func_quote_for_expand_result"
1246e6d2e958Smrg    }
1247e6d2e958Smrg
1248e6d2e958Smrg    $opt_dry_run || {
1249e6d2e958Smrg      eval "$_G_user_locale
1250e6d2e958Smrg	    $_G_cmd"
1251e6d2e958Smrg      _G_status=$?
1252e6d2e958Smrg      eval "$_G_safe_locale"
1253e6d2e958Smrg      if test 0 -ne "$_G_status"; then
1254e6d2e958Smrg	eval "(exit $_G_status); $_G_fail_exp"
1255e6d2e958Smrg      fi
1256e6d2e958Smrg    }
1257e6d2e958Smrg}
1258e6d2e958Smrg
1259e6d2e958Smrg
1260e6d2e958Smrg# func_tr_sh
1261e6d2e958Smrg# ----------
1262e6d2e958Smrg# Turn $1 into a string suitable for a shell variable name.
1263e6d2e958Smrg# Result is stored in $func_tr_sh_result.  All characters
1264e6d2e958Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
1265e6d2e958Smrg# if $1 begins with a digit, a '_' is prepended as well.
1266e6d2e958Smrgfunc_tr_sh ()
1267e6d2e958Smrg{
1268e6d2e958Smrg    $debug_cmd
1269e6d2e958Smrg
1270e6d2e958Smrg    case $1 in
1271e6d2e958Smrg    [0-9]* | *[!a-zA-Z0-9_]*)
1272e6d2e958Smrg      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
1273e6d2e958Smrg      ;;
1274e6d2e958Smrg    * )
1275e6d2e958Smrg      func_tr_sh_result=$1
1276e6d2e958Smrg      ;;
1277e6d2e958Smrg    esac
1278e6d2e958Smrg}
1279e6d2e958Smrg
1280e6d2e958Smrg
1281e6d2e958Smrg# func_verbose ARG...
1282e6d2e958Smrg# -------------------
1283e6d2e958Smrg# Echo program name prefixed message in verbose mode only.
1284e6d2e958Smrgfunc_verbose ()
1285e6d2e958Smrg{
1286e6d2e958Smrg    $debug_cmd
1287e6d2e958Smrg
1288e6d2e958Smrg    $opt_verbose && func_echo "$*"
1289e6d2e958Smrg
1290e6d2e958Smrg    :
1291e6d2e958Smrg}
1292e6d2e958Smrg
1293e6d2e958Smrg
1294e6d2e958Smrg# func_warn_and_continue ARG...
1295e6d2e958Smrg# -----------------------------
1296e6d2e958Smrg# Echo program name prefixed warning message to standard error.
1297e6d2e958Smrgfunc_warn_and_continue ()
1298e6d2e958Smrg{
1299e6d2e958Smrg    $debug_cmd
1300e6d2e958Smrg
1301e6d2e958Smrg    $require_term_colors
1302e6d2e958Smrg
1303e6d2e958Smrg    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
1304e6d2e958Smrg}
1305e6d2e958Smrg
1306e6d2e958Smrg
1307e6d2e958Smrg# func_warning CATEGORY ARG...
1308e6d2e958Smrg# ----------------------------
1309e6d2e958Smrg# Echo program name prefixed warning message to standard error. Warning
1310e6d2e958Smrg# messages can be filtered according to CATEGORY, where this function
1311e6d2e958Smrg# elides messages where CATEGORY is not listed in the global variable
1312e6d2e958Smrg# 'opt_warning_types'.
1313e6d2e958Smrgfunc_warning ()
1314e6d2e958Smrg{
1315e6d2e958Smrg    $debug_cmd
1316e6d2e958Smrg
1317e6d2e958Smrg    # CATEGORY must be in the warning_categories list!
1318e6d2e958Smrg    case " $warning_categories " in
1319e6d2e958Smrg      *" $1 "*) ;;
1320e6d2e958Smrg      *) func_internal_error "invalid warning category '$1'" ;;
1321e6d2e958Smrg    esac
1322e6d2e958Smrg
1323e6d2e958Smrg    _G_category=$1
1324e6d2e958Smrg    shift
1325e6d2e958Smrg
1326e6d2e958Smrg    case " $opt_warning_types " in
1327e6d2e958Smrg      *" $_G_category "*) $warning_func ${1+"$@"} ;;
1328e6d2e958Smrg    esac
1329e6d2e958Smrg}
1330e6d2e958Smrg
1331e6d2e958Smrg
1332e6d2e958Smrg# func_sort_ver VER1 VER2
1333e6d2e958Smrg# -----------------------
1334e6d2e958Smrg# 'sort -V' is not generally available.
1335e6d2e958Smrg# Note this deviates from the version comparison in automake
1336e6d2e958Smrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
1337e6d2e958Smrg# but this should suffice as we won't be specifying old
1338e6d2e958Smrg# version formats or redundant trailing .0 in bootstrap.conf.
1339e6d2e958Smrg# If we did want full compatibility then we should probably
1340e6d2e958Smrg# use m4_version_compare from autoconf.
1341e6d2e958Smrgfunc_sort_ver ()
1342e6d2e958Smrg{
1343e6d2e958Smrg    $debug_cmd
1344e6d2e958Smrg
1345e6d2e958Smrg    printf '%s\n%s\n' "$1" "$2" \
1346e6d2e958Smrg      | 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
1347e6d2e958Smrg}
1348e6d2e958Smrg
1349e6d2e958Smrg# func_lt_ver PREV CURR
1350e6d2e958Smrg# ---------------------
1351e6d2e958Smrg# Return true if PREV and CURR are in the correct order according to
1352e6d2e958Smrg# func_sort_ver, otherwise false.  Use it like this:
1353e6d2e958Smrg#
1354e6d2e958Smrg#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
1355e6d2e958Smrgfunc_lt_ver ()
1356e6d2e958Smrg{
1357e6d2e958Smrg    $debug_cmd
1358e6d2e958Smrg
1359e6d2e958Smrg    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
1360e6d2e958Smrg}
1361e6d2e958Smrg
1362e6d2e958Smrg
1363e6d2e958Smrg# Local variables:
1364e6d2e958Smrg# mode: shell-script
1365e6d2e958Smrg# sh-indentation: 2
1366e6d2e958Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
1367e6d2e958Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
1368e6d2e958Smrg# time-stamp-time-zone: "UTC"
1369e6d2e958Smrg# End:
1370e6d2e958Smrg#! /bin/sh
1371e6d2e958Smrg
1372e6d2e958Smrg# Set a version string for this script.
13736ad5a0e2Smrgscriptversion=2015-10-07.11; # UTC
1374e6d2e958Smrg
1375e6d2e958Smrg# A portable, pluggable option parser for Bourne shell.
1376e6d2e958Smrg# Written by Gary V. Vaughan, 2010
1377e6d2e958Smrg
1378e6d2e958Smrg# Copyright (C) 2010-2015 Free Software Foundation, Inc.
1379e6d2e958Smrg# This is free software; see the source for copying conditions.  There is NO
1380e6d2e958Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1381e6d2e958Smrg
1382e6d2e958Smrg# This program is free software: you can redistribute it and/or modify
1383e6d2e958Smrg# it under the terms of the GNU General Public License as published by
1384e6d2e958Smrg# the Free Software Foundation, either version 3 of the License, or
1385e6d2e958Smrg# (at your option) any later version.
1386e6d2e958Smrg
1387e6d2e958Smrg# This program is distributed in the hope that it will be useful,
1388e6d2e958Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1389e6d2e958Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1390e6d2e958Smrg# GNU General Public License for more details.
1391e6d2e958Smrg
1392e6d2e958Smrg# You should have received a copy of the GNU General Public License
1393e6d2e958Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
1394e6d2e958Smrg
1395e6d2e958Smrg# Please report bugs or propose patches to gary@gnu.org.
1396e6d2e958Smrg
1397e6d2e958Smrg
1398e6d2e958Smrg## ------ ##
1399e6d2e958Smrg## Usage. ##
1400e6d2e958Smrg## ------ ##
1401e6d2e958Smrg
1402e6d2e958Smrg# This file is a library for parsing options in your shell scripts along
1403e6d2e958Smrg# with assorted other useful supporting features that you can make use
1404e6d2e958Smrg# of too.
1405e6d2e958Smrg#
1406e6d2e958Smrg# For the simplest scripts you might need only:
1407e6d2e958Smrg#
1408e6d2e958Smrg#   #!/bin/sh
1409e6d2e958Smrg#   . relative/path/to/funclib.sh
1410e6d2e958Smrg#   . relative/path/to/options-parser
1411e6d2e958Smrg#   scriptversion=1.0
1412e6d2e958Smrg#   func_options ${1+"$@"}
1413e6d2e958Smrg#   eval set dummy "$func_options_result"; shift
1414e6d2e958Smrg#   ...rest of your script...
1415e6d2e958Smrg#
1416e6d2e958Smrg# In order for the '--version' option to work, you will need to have a
1417e6d2e958Smrg# suitably formatted comment like the one at the top of this file
1418e6d2e958Smrg# starting with '# Written by ' and ending with '# warranty; '.
1419e6d2e958Smrg#
1420e6d2e958Smrg# For '-h' and '--help' to work, you will also need a one line
1421e6d2e958Smrg# description of your script's purpose in a comment directly above the
1422e6d2e958Smrg# '# Written by ' line, like the one at the top of this file.
1423e6d2e958Smrg#
1424e6d2e958Smrg# The default options also support '--debug', which will turn on shell
1425e6d2e958Smrg# execution tracing (see the comment above debug_cmd below for another
1426e6d2e958Smrg# use), and '--verbose' and the func_verbose function to allow your script
1427e6d2e958Smrg# to display verbose messages only when your user has specified
1428e6d2e958Smrg# '--verbose'.
1429e6d2e958Smrg#
1430e6d2e958Smrg# After sourcing this file, you can plug processing for additional
1431e6d2e958Smrg# options by amending the variables from the 'Configuration' section
1432e6d2e958Smrg# below, and following the instructions in the 'Option parsing'
1433e6d2e958Smrg# section further down.
1434e6d2e958Smrg
1435e6d2e958Smrg## -------------- ##
1436e6d2e958Smrg## Configuration. ##
1437e6d2e958Smrg## -------------- ##
1438e6d2e958Smrg
1439e6d2e958Smrg# You should override these variables in your script after sourcing this
1440e6d2e958Smrg# file so that they reflect the customisations you have added to the
1441e6d2e958Smrg# option parser.
1442e6d2e958Smrg
1443e6d2e958Smrg# The usage line for option parsing errors and the start of '-h' and
1444e6d2e958Smrg# '--help' output messages. You can embed shell variables for delayed
1445e6d2e958Smrg# expansion at the time the message is displayed, but you will need to
1446e6d2e958Smrg# quote other shell meta-characters carefully to prevent them being
1447e6d2e958Smrg# expanded when the contents are evaled.
1448e6d2e958Smrgusage='$progpath [OPTION]...'
1449e6d2e958Smrg
1450e6d2e958Smrg# Short help message in response to '-h' and '--help'.  Add to this or
1451e6d2e958Smrg# override it after sourcing this library to reflect the full set of
1452e6d2e958Smrg# options your script accepts.
1453e6d2e958Smrgusage_message="\
1454e6d2e958Smrg       --debug        enable verbose shell tracing
1455e6d2e958Smrg   -W, --warnings=CATEGORY
1456e6d2e958Smrg                      report the warnings falling in CATEGORY [all]
1457e6d2e958Smrg   -v, --verbose      verbosely report processing
1458e6d2e958Smrg       --version      print version information and exit
1459e6d2e958Smrg   -h, --help         print short or long help message and exit
1460e6d2e958Smrg"
1461e6d2e958Smrg
1462e6d2e958Smrg# Additional text appended to 'usage_message' in response to '--help'.
1463e6d2e958Smrglong_help_message="
1464e6d2e958SmrgWarning categories include:
1465e6d2e958Smrg       'all'          show all warnings
1466e6d2e958Smrg       'none'         turn off all the warnings
1467e6d2e958Smrg       'error'        warnings are treated as fatal errors"
1468e6d2e958Smrg
1469e6d2e958Smrg# Help message printed before fatal option parsing errors.
1470e6d2e958Smrgfatal_help="Try '\$progname --help' for more information."
1471e6d2e958Smrg
1472e6d2e958Smrg
1473e6d2e958Smrg
1474e6d2e958Smrg## ------------------------- ##
1475e6d2e958Smrg## Hook function management. ##
1476e6d2e958Smrg## ------------------------- ##
1477e6d2e958Smrg
1478e6d2e958Smrg# This section contains functions for adding, removing, and running hooks
1479e6d2e958Smrg# to the main code.  A hook is just a named list of of function, that can
1480e6d2e958Smrg# be run in order later on.
1481e6d2e958Smrg
1482e6d2e958Smrg# func_hookable FUNC_NAME
1483e6d2e958Smrg# -----------------------
1484e6d2e958Smrg# Declare that FUNC_NAME will run hooks added with
1485e6d2e958Smrg# 'func_add_hook FUNC_NAME ...'.
1486e6d2e958Smrgfunc_hookable ()
1487e6d2e958Smrg{
1488e6d2e958Smrg    $debug_cmd
1489e6d2e958Smrg
1490e6d2e958Smrg    func_append hookable_fns " $1"
1491e6d2e958Smrg}
1492e6d2e958Smrg
1493e6d2e958Smrg
1494e6d2e958Smrg# func_add_hook FUNC_NAME HOOK_FUNC
1495e6d2e958Smrg# ---------------------------------
1496e6d2e958Smrg# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
1497e6d2e958Smrg# first have been declared "hookable" by a call to 'func_hookable'.
1498e6d2e958Smrgfunc_add_hook ()
1499e6d2e958Smrg{
1500e6d2e958Smrg    $debug_cmd
1501e6d2e958Smrg
1502e6d2e958Smrg    case " $hookable_fns " in
1503e6d2e958Smrg      *" $1 "*) ;;
1504e6d2e958Smrg      *) func_fatal_error "'$1' does not accept hook functions." ;;
1505e6d2e958Smrg    esac
1506e6d2e958Smrg
1507e6d2e958Smrg    eval func_append ${1}_hooks '" $2"'
1508e6d2e958Smrg}
1509e6d2e958Smrg
1510e6d2e958Smrg
1511e6d2e958Smrg# func_remove_hook FUNC_NAME HOOK_FUNC
1512e6d2e958Smrg# ------------------------------------
1513e6d2e958Smrg# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
1514e6d2e958Smrgfunc_remove_hook ()
1515e6d2e958Smrg{
1516e6d2e958Smrg    $debug_cmd
1517e6d2e958Smrg
1518e6d2e958Smrg    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
1519e6d2e958Smrg}
1520e6d2e958Smrg
1521e6d2e958Smrg
1522e6d2e958Smrg# func_run_hooks FUNC_NAME [ARG]...
1523e6d2e958Smrg# ---------------------------------
1524e6d2e958Smrg# Run all hook functions registered to FUNC_NAME.
1525e6d2e958Smrg# It is assumed that the list of hook functions contains nothing more
1526e6d2e958Smrg# than a whitespace-delimited list of legal shell function names, and
1527e6d2e958Smrg# no effort is wasted trying to catch shell meta-characters or preserve
1528e6d2e958Smrg# whitespace.
1529e6d2e958Smrgfunc_run_hooks ()
1530e6d2e958Smrg{
1531e6d2e958Smrg    $debug_cmd
1532e6d2e958Smrg
15336ad5a0e2Smrg    _G_rc_run_hooks=false
15346ad5a0e2Smrg
1535e6d2e958Smrg    case " $hookable_fns " in
1536e6d2e958Smrg      *" $1 "*) ;;
1537e6d2e958Smrg      *) func_fatal_error "'$1' does not support hook funcions.n" ;;
1538e6d2e958Smrg    esac
1539e6d2e958Smrg
1540e6d2e958Smrg    eval _G_hook_fns=\$$1_hooks; shift
1541e6d2e958Smrg
1542e6d2e958Smrg    for _G_hook in $_G_hook_fns; do
15436ad5a0e2Smrg      if eval $_G_hook '"$@"'; then
15446ad5a0e2Smrg        # store returned options list back into positional
15456ad5a0e2Smrg        # parameters for next 'cmd' execution.
15466ad5a0e2Smrg        eval _G_hook_result=\$${_G_hook}_result
15476ad5a0e2Smrg        eval set dummy "$_G_hook_result"; shift
15486ad5a0e2Smrg        _G_rc_run_hooks=:
15496ad5a0e2Smrg      fi
1550e6d2e958Smrg    done
1551e6d2e958Smrg
15526ad5a0e2Smrg    $_G_rc_run_hooks && func_run_hooks_result=$_G_hook_result
1553e6d2e958Smrg}
1554e6d2e958Smrg
1555e6d2e958Smrg
1556e6d2e958Smrg
1557e6d2e958Smrg## --------------- ##
1558e6d2e958Smrg## Option parsing. ##
1559e6d2e958Smrg## --------------- ##
1560e6d2e958Smrg
1561e6d2e958Smrg# In order to add your own option parsing hooks, you must accept the
15626ad5a0e2Smrg# full positional parameter list in your hook function, you may remove/edit
15636ad5a0e2Smrg# any options that you action, and then pass back the remaining unprocessed
1564e6d2e958Smrg# options in '<hooked_function_name>_result', escaped suitably for
15656ad5a0e2Smrg# 'eval'.  In this case you also must return $EXIT_SUCCESS to let the
15666ad5a0e2Smrg# hook's caller know that it should pay attention to
15676ad5a0e2Smrg# '<hooked_function_name>_result'.  Returning $EXIT_FAILURE signalizes that
15686ad5a0e2Smrg# arguments are left untouched by the hook and therefore caller will ignore the
15696ad5a0e2Smrg# result variable.
15706ad5a0e2Smrg#
15716ad5a0e2Smrg# Like this:
1572e6d2e958Smrg#
1573e6d2e958Smrg#    my_options_prep ()
1574e6d2e958Smrg#    {
1575e6d2e958Smrg#        $debug_cmd
1576e6d2e958Smrg#
1577e6d2e958Smrg#        # Extend the existing usage message.
1578e6d2e958Smrg#        usage_message=$usage_message'
1579e6d2e958Smrg#      -s, --silent       don'\''t print informational messages
1580e6d2e958Smrg#    '
15816ad5a0e2Smrg#        # No change in '$@' (ignored completely by this hook).  There is
15826ad5a0e2Smrg#        # no need to do the equivalent (but slower) action:
15836ad5a0e2Smrg#        # func_quote_for_eval ${1+"$@"}
15846ad5a0e2Smrg#        # my_options_prep_result=$func_quote_for_eval_result
15856ad5a0e2Smrg#        false
1586e6d2e958Smrg#    }
1587e6d2e958Smrg#    func_add_hook func_options_prep my_options_prep
1588e6d2e958Smrg#
1589e6d2e958Smrg#
1590e6d2e958Smrg#    my_silent_option ()
1591e6d2e958Smrg#    {
1592e6d2e958Smrg#        $debug_cmd
1593e6d2e958Smrg#
15946ad5a0e2Smrg#        args_changed=false
15956ad5a0e2Smrg#
1596e6d2e958Smrg#        # Note that for efficiency, we parse as many options as we can
1597e6d2e958Smrg#        # recognise in a loop before passing the remainder back to the
1598e6d2e958Smrg#        # caller on the first unrecognised argument we encounter.
1599e6d2e958Smrg#        while test $# -gt 0; do
1600e6d2e958Smrg#          opt=$1; shift
1601e6d2e958Smrg#          case $opt in
16026ad5a0e2Smrg#            --silent|-s) opt_silent=:
16036ad5a0e2Smrg#                         args_changed=:
16046ad5a0e2Smrg#                         ;;
1605e6d2e958Smrg#            # Separate non-argument short options:
1606e6d2e958Smrg#            -s*)         func_split_short_opt "$_G_opt"
1607e6d2e958Smrg#                         set dummy "$func_split_short_opt_name" \
1608e6d2e958Smrg#                             "-$func_split_short_opt_arg" ${1+"$@"}
1609e6d2e958Smrg#                         shift
16106ad5a0e2Smrg#                         args_changed=:
1611e6d2e958Smrg#                         ;;
16126ad5a0e2Smrg#            *)           # Make sure the first unrecognised option "$_G_opt"
16136ad5a0e2Smrg#                         # is added back to "$@", we could need that later
16146ad5a0e2Smrg#                         # if $args_changed is true.
16156ad5a0e2Smrg#                         set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
1616e6d2e958Smrg#          esac
1617e6d2e958Smrg#        done
1618e6d2e958Smrg#
16196ad5a0e2Smrg#        if $args_changed; then
16206ad5a0e2Smrg#          func_quote_for_eval ${1+"$@"}
16216ad5a0e2Smrg#          my_silent_option_result=$func_quote_for_eval_result
16226ad5a0e2Smrg#        fi
16236ad5a0e2Smrg#
16246ad5a0e2Smrg#        $args_changed
1625e6d2e958Smrg#    }
1626e6d2e958Smrg#    func_add_hook func_parse_options my_silent_option
1627e6d2e958Smrg#
1628e6d2e958Smrg#
1629e6d2e958Smrg#    my_option_validation ()
1630e6d2e958Smrg#    {
1631e6d2e958Smrg#        $debug_cmd
1632e6d2e958Smrg#
1633e6d2e958Smrg#        $opt_silent && $opt_verbose && func_fatal_help "\
1634e6d2e958Smrg#    '--silent' and '--verbose' options are mutually exclusive."
1635e6d2e958Smrg#
16366ad5a0e2Smrg#        false
1637e6d2e958Smrg#    }
1638e6d2e958Smrg#    func_add_hook func_validate_options my_option_validation
1639e6d2e958Smrg#
16406ad5a0e2Smrg# You'll also need to manually amend $usage_message to reflect the extra
1641e6d2e958Smrg# options you parse.  It's preferable to append if you can, so that
1642e6d2e958Smrg# multiple option parsing hooks can be added safely.
1643e6d2e958Smrg
1644e6d2e958Smrg
16456ad5a0e2Smrg# func_options_finish [ARG]...
16466ad5a0e2Smrg# ----------------------------
16476ad5a0e2Smrg# Finishing the option parse loop (call 'func_options' hooks ATM).
16486ad5a0e2Smrgfunc_options_finish ()
16496ad5a0e2Smrg{
16506ad5a0e2Smrg    $debug_cmd
16516ad5a0e2Smrg
16526ad5a0e2Smrg    _G_func_options_finish_exit=false
16536ad5a0e2Smrg    if func_run_hooks func_options ${1+"$@"}; then
16546ad5a0e2Smrg      func_options_finish_result=$func_run_hooks_result
16556ad5a0e2Smrg      _G_func_options_finish_exit=:
16566ad5a0e2Smrg    fi
16576ad5a0e2Smrg
16586ad5a0e2Smrg    $_G_func_options_finish_exit
16596ad5a0e2Smrg}
16606ad5a0e2Smrg
16616ad5a0e2Smrg
1662e6d2e958Smrg# func_options [ARG]...
1663e6d2e958Smrg# ---------------------
1664e6d2e958Smrg# All the functions called inside func_options are hookable. See the
1665e6d2e958Smrg# individual implementations for details.
1666e6d2e958Smrgfunc_hookable func_options
1667e6d2e958Smrgfunc_options ()
1668e6d2e958Smrg{
1669e6d2e958Smrg    $debug_cmd
1670e6d2e958Smrg
16716ad5a0e2Smrg    _G_rc_options=false
16726ad5a0e2Smrg
16736ad5a0e2Smrg    for my_func in options_prep parse_options validate_options options_finish
16746ad5a0e2Smrg    do
16756ad5a0e2Smrg      if eval func_$my_func '${1+"$@"}'; then
16766ad5a0e2Smrg        eval _G_res_var='$'"func_${my_func}_result"
16776ad5a0e2Smrg        eval set dummy "$_G_res_var" ; shift
16786ad5a0e2Smrg        _G_rc_options=:
16796ad5a0e2Smrg      fi
16806ad5a0e2Smrg    done
1681e6d2e958Smrg
16826ad5a0e2Smrg    # Save modified positional parameters for caller.  As a top-level
16836ad5a0e2Smrg    # options-parser function we always need to set the 'func_options_result'
16846ad5a0e2Smrg    # variable (regardless the $_G_rc_options value).
16856ad5a0e2Smrg    if $_G_rc_options; then
16866ad5a0e2Smrg      func_options_result=$_G_res_var
16876ad5a0e2Smrg    else
16886ad5a0e2Smrg      func_quote_for_eval ${1+"$@"}
16896ad5a0e2Smrg      func_options_result=$func_quote_for_eval_result
16906ad5a0e2Smrg    fi
1691e6d2e958Smrg
16926ad5a0e2Smrg    $_G_rc_options
1693bd1da9d7Smrg}
1694bd1da9d7Smrg
1695bd1da9d7Smrg
1696e6d2e958Smrg# func_options_prep [ARG]...
1697e6d2e958Smrg# --------------------------
1698e6d2e958Smrg# All initialisations required before starting the option parse loop.
1699e6d2e958Smrg# Note that when calling hook functions, we pass through the list of
1700e6d2e958Smrg# positional parameters.  If a hook function modifies that list, and
17016ad5a0e2Smrg# needs to propagate that back to rest of this script, then the complete
1702e6d2e958Smrg# modified list must be put in 'func_run_hooks_result' before
17036ad5a0e2Smrg# returning $EXIT_SUCCESS (otherwise $EXIT_FAILURE is returned).
1704e6d2e958Smrgfunc_hookable func_options_prep
1705e6d2e958Smrgfunc_options_prep ()
1706bd1da9d7Smrg{
1707e6d2e958Smrg    $debug_cmd
170847e89262Smrg
1709e6d2e958Smrg    # Option defaults:
1710e6d2e958Smrg    opt_verbose=false
1711e6d2e958Smrg    opt_warning_types=
1712e6d2e958Smrg
17136ad5a0e2Smrg    _G_rc_options_prep=false
17146ad5a0e2Smrg    if func_run_hooks func_options_prep ${1+"$@"}; then
17156ad5a0e2Smrg      _G_rc_options_prep=:
17166ad5a0e2Smrg      # save modified positional parameters for caller
17176ad5a0e2Smrg      func_options_prep_result=$func_run_hooks_result
17186ad5a0e2Smrg    fi
1719e6d2e958Smrg
17206ad5a0e2Smrg    $_G_rc_options_prep
1721bd1da9d7Smrg}
1722bd1da9d7Smrg
1723bd1da9d7Smrg
1724e6d2e958Smrg# func_parse_options [ARG]...
1725e6d2e958Smrg# ---------------------------
1726e6d2e958Smrg# The main option parsing loop.
1727e6d2e958Smrgfunc_hookable func_parse_options
1728e6d2e958Smrgfunc_parse_options ()
1729bd1da9d7Smrg{
1730e6d2e958Smrg    $debug_cmd
173147e89262Smrg
1732e6d2e958Smrg    func_parse_options_result=
173347e89262Smrg
17346ad5a0e2Smrg    _G_rc_parse_options=false
1735e6d2e958Smrg    # this just eases exit handling
1736e6d2e958Smrg    while test $# -gt 0; do
1737e6d2e958Smrg      # Defer to hook functions for initial option parsing, so they
1738e6d2e958Smrg      # get priority in the event of reusing an option name.
17396ad5a0e2Smrg      if func_run_hooks func_parse_options ${1+"$@"}; then
17406ad5a0e2Smrg        eval set dummy "$func_run_hooks_result"; shift
17416ad5a0e2Smrg        _G_rc_parse_options=:
17426ad5a0e2Smrg      fi
1743bd1da9d7Smrg
1744e6d2e958Smrg      # Break out of the loop if we already parsed every option.
1745e6d2e958Smrg      test $# -gt 0 || break
1746bd1da9d7Smrg
17476ad5a0e2Smrg      _G_match_parse_options=:
1748e6d2e958Smrg      _G_opt=$1
1749e6d2e958Smrg      shift
1750e6d2e958Smrg      case $_G_opt in
1751e6d2e958Smrg        --debug|-x)   debug_cmd='set -x'
1752e6d2e958Smrg                      func_echo "enabling shell trace mode"
1753e6d2e958Smrg                      $debug_cmd
1754e6d2e958Smrg                      ;;
1755e6d2e958Smrg
1756e6d2e958Smrg        --no-warnings|--no-warning|--no-warn)
1757e6d2e958Smrg                      set dummy --warnings none ${1+"$@"}
1758e6d2e958Smrg                      shift
1759e6d2e958Smrg		      ;;
176047e89262Smrg
1761e6d2e958Smrg        --warnings|--warning|-W)
17626ad5a0e2Smrg                      if test $# = 0 && func_missing_arg $_G_opt; then
17636ad5a0e2Smrg                        _G_rc_parse_options=:
17646ad5a0e2Smrg                        break
17656ad5a0e2Smrg                      fi
1766e6d2e958Smrg                      case " $warning_categories $1" in
1767e6d2e958Smrg                        *" $1 "*)
1768e6d2e958Smrg                          # trailing space prevents matching last $1 above
1769e6d2e958Smrg                          func_append_uniq opt_warning_types " $1"
1770e6d2e958Smrg                          ;;
1771e6d2e958Smrg                        *all)
1772e6d2e958Smrg                          opt_warning_types=$warning_categories
1773e6d2e958Smrg                          ;;
1774e6d2e958Smrg                        *none)
1775e6d2e958Smrg                          opt_warning_types=none
1776e6d2e958Smrg                          warning_func=:
1777e6d2e958Smrg                          ;;
1778e6d2e958Smrg                        *error)
1779e6d2e958Smrg                          opt_warning_types=$warning_categories
1780e6d2e958Smrg                          warning_func=func_fatal_error
1781e6d2e958Smrg                          ;;
1782e6d2e958Smrg                        *)
1783e6d2e958Smrg                          func_fatal_error \
1784e6d2e958Smrg                             "unsupported warning category: '$1'"
1785e6d2e958Smrg                          ;;
1786e6d2e958Smrg                      esac
1787e6d2e958Smrg                      shift
1788e6d2e958Smrg                      ;;
1789e6d2e958Smrg
1790e6d2e958Smrg        --verbose|-v) opt_verbose=: ;;
1791e6d2e958Smrg        --version)    func_version ;;
1792e6d2e958Smrg        -\?|-h)       func_usage ;;
1793e6d2e958Smrg        --help)       func_help ;;
1794e6d2e958Smrg
1795e6d2e958Smrg	# Separate optargs to long options (plugins may need this):
1796e6d2e958Smrg	--*=*)        func_split_equals "$_G_opt"
1797e6d2e958Smrg	              set dummy "$func_split_equals_lhs" \
1798e6d2e958Smrg                          "$func_split_equals_rhs" ${1+"$@"}
1799e6d2e958Smrg                      shift
1800e6d2e958Smrg                      ;;
1801e6d2e958Smrg
1802e6d2e958Smrg       # Separate optargs to short options:
1803e6d2e958Smrg        -W*)
1804e6d2e958Smrg                      func_split_short_opt "$_G_opt"
1805e6d2e958Smrg                      set dummy "$func_split_short_opt_name" \
1806e6d2e958Smrg                          "$func_split_short_opt_arg" ${1+"$@"}
1807e6d2e958Smrg                      shift
1808e6d2e958Smrg                      ;;
1809e6d2e958Smrg
1810e6d2e958Smrg        # Separate non-argument short options:
1811e6d2e958Smrg        -\?*|-h*|-v*|-x*)
1812e6d2e958Smrg                      func_split_short_opt "$_G_opt"
1813e6d2e958Smrg                      set dummy "$func_split_short_opt_name" \
1814e6d2e958Smrg                          "-$func_split_short_opt_arg" ${1+"$@"}
1815e6d2e958Smrg                      shift
1816e6d2e958Smrg                      ;;
1817e6d2e958Smrg
18186ad5a0e2Smrg        --)           _G_rc_parse_options=: ; break ;;
1819e6d2e958Smrg        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
18206ad5a0e2Smrg        *)            set dummy "$_G_opt" ${1+"$@"}; shift
18216ad5a0e2Smrg                      _G_match_parse_options=false
18226ad5a0e2Smrg                      break
18236ad5a0e2Smrg                      ;;
1824e6d2e958Smrg      esac
18256ad5a0e2Smrg
18266ad5a0e2Smrg      $_G_match_parse_options && _G_rc_parse_options=:
1827e6d2e958Smrg    done
1828e6d2e958Smrg
18296ad5a0e2Smrg
18306ad5a0e2Smrg    if $_G_rc_parse_options; then
18316ad5a0e2Smrg      # save modified positional parameters for caller
18326ad5a0e2Smrg      func_quote_for_eval ${1+"$@"}
18336ad5a0e2Smrg      func_parse_options_result=$func_quote_for_eval_result
18346ad5a0e2Smrg    fi
18356ad5a0e2Smrg
18366ad5a0e2Smrg    $_G_rc_parse_options
1837bd1da9d7Smrg}
1838bd1da9d7Smrg
183947e89262Smrg
1840e6d2e958Smrg# func_validate_options [ARG]...
1841e6d2e958Smrg# ------------------------------
1842e6d2e958Smrg# Perform any sanity checks on option settings and/or unconsumed
1843e6d2e958Smrg# arguments.
1844e6d2e958Smrgfunc_hookable func_validate_options
1845e6d2e958Smrgfunc_validate_options ()
1846bd1da9d7Smrg{
1847e6d2e958Smrg    $debug_cmd
1848bd1da9d7Smrg
18496ad5a0e2Smrg    _G_rc_validate_options=false
18506ad5a0e2Smrg
1851e6d2e958Smrg    # Display all warnings if -W was not given.
1852e6d2e958Smrg    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
1853bd1da9d7Smrg
18546ad5a0e2Smrg    if func_run_hooks func_validate_options ${1+"$@"}; then
18556ad5a0e2Smrg      # save modified positional parameters for caller
18566ad5a0e2Smrg      func_validate_options_result=$func_run_hooks_result
18576ad5a0e2Smrg      _G_rc_validate_options=:
18586ad5a0e2Smrg    fi
1859bd1da9d7Smrg
1860e6d2e958Smrg    # Bail if the options were screwed!
1861e6d2e958Smrg    $exit_cmd $EXIT_FAILURE
1862e6d2e958Smrg
18636ad5a0e2Smrg    $_G_rc_validate_options
1864899129b3Smrg}
1865899129b3Smrg
1866bd1da9d7Smrg
1867899129b3Smrg
1868e6d2e958Smrg## ----------------- ##
1869e6d2e958Smrg## Helper functions. ##
1870e6d2e958Smrg## ----------------- ##
1871bd1da9d7Smrg
1872e6d2e958Smrg# This section contains the helper functions used by the rest of the
1873e6d2e958Smrg# hookable option parser framework in ascii-betical order.
1874e6d2e958Smrg
1875e6d2e958Smrg
1876e6d2e958Smrg# func_fatal_help ARG...
1877e6d2e958Smrg# ----------------------
1878e6d2e958Smrg# Echo program name prefixed message to standard error, followed by
1879e6d2e958Smrg# a help hint, and exit.
1880e6d2e958Smrgfunc_fatal_help ()
188147e89262Smrg{
1882e6d2e958Smrg    $debug_cmd
1883899129b3Smrg
1884e6d2e958Smrg    eval \$ECHO \""Usage: $usage"\"
1885e6d2e958Smrg    eval \$ECHO \""$fatal_help"\"
1886e6d2e958Smrg    func_error ${1+"$@"}
1887e6d2e958Smrg    exit $EXIT_FAILURE
188847e89262Smrg}
1889bd1da9d7Smrg
1890e6d2e958Smrg
1891e6d2e958Smrg# func_help
1892e6d2e958Smrg# ---------
1893e6d2e958Smrg# Echo long help message to standard output and exit.
189447e89262Smrgfunc_help ()
189547e89262Smrg{
1896e6d2e958Smrg    $debug_cmd
1897e6d2e958Smrg
1898e6d2e958Smrg    func_usage_message
1899e6d2e958Smrg    $ECHO "$long_help_message"
1900e6d2e958Smrg    exit 0
190147e89262Smrg}
1902bd1da9d7Smrg
1903e6d2e958Smrg
1904e6d2e958Smrg# func_missing_arg ARGNAME
1905e6d2e958Smrg# ------------------------
190647e89262Smrg# Echo program name prefixed message to standard error and set global
190747e89262Smrg# exit_cmd.
190847e89262Smrgfunc_missing_arg ()
190947e89262Smrg{
1910e6d2e958Smrg    $debug_cmd
1911899129b3Smrg
1912e6d2e958Smrg    func_error "Missing argument for '$1'."
191347e89262Smrg    exit_cmd=exit
191447e89262Smrg}
1915bd1da9d7Smrg
1916bd1da9d7Smrg
1917e6d2e958Smrg# func_split_equals STRING
1918e6d2e958Smrg# ------------------------
1919e6d2e958Smrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
1920e6d2e958Smrg# splitting STRING at the '=' sign.
1921e6d2e958Smrgtest -z "$_G_HAVE_XSI_OPS" \
1922e6d2e958Smrg    && (eval 'x=a/b/c;
1923e6d2e958Smrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
1924e6d2e958Smrg    && _G_HAVE_XSI_OPS=yes
1925e6d2e958Smrg
1926e6d2e958Smrgif test yes = "$_G_HAVE_XSI_OPS"
1927e6d2e958Smrgthen
1928e6d2e958Smrg  # This is an XSI compatible shell, allowing a faster implementation...
1929e6d2e958Smrg  eval 'func_split_equals ()
1930e6d2e958Smrg  {
1931e6d2e958Smrg      $debug_cmd
1932e6d2e958Smrg
1933e6d2e958Smrg      func_split_equals_lhs=${1%%=*}
1934e6d2e958Smrg      func_split_equals_rhs=${1#*=}
1935e6d2e958Smrg      test "x$func_split_equals_lhs" = "x$1" \
1936e6d2e958Smrg        && func_split_equals_rhs=
1937e6d2e958Smrg  }'
1938e6d2e958Smrgelse
1939e6d2e958Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
1940e6d2e958Smrg  func_split_equals ()
1941e6d2e958Smrg  {
1942e6d2e958Smrg      $debug_cmd
1943e6d2e958Smrg
1944e6d2e958Smrg      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
1945e6d2e958Smrg      func_split_equals_rhs=
1946e6d2e958Smrg      test "x$func_split_equals_lhs" = "x$1" \
1947e6d2e958Smrg        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
1948e6d2e958Smrg  }
1949e6d2e958Smrgfi #func_split_equals
1950e6d2e958Smrg
1951e6d2e958Smrg
1952e6d2e958Smrg# func_split_short_opt SHORTOPT
1953e6d2e958Smrg# -----------------------------
1954899129b3Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
1955899129b3Smrg# variables after splitting SHORTOPT after the 2nd character.
1956e6d2e958Smrgif test yes = "$_G_HAVE_XSI_OPS"
1957e6d2e958Smrgthen
1958e6d2e958Smrg  # This is an XSI compatible shell, allowing a faster implementation...
1959e6d2e958Smrg  eval 'func_split_short_opt ()
1960e6d2e958Smrg  {
1961e6d2e958Smrg      $debug_cmd
1962e6d2e958Smrg
1963e6d2e958Smrg      func_split_short_opt_arg=${1#??}
1964e6d2e958Smrg      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
1965e6d2e958Smrg  }'
1966e6d2e958Smrgelse
1967e6d2e958Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
1968e6d2e958Smrg  func_split_short_opt ()
1969e6d2e958Smrg  {
1970e6d2e958Smrg      $debug_cmd
1971e6d2e958Smrg
1972e6d2e958Smrg      func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
1973e6d2e958Smrg      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
1974e6d2e958Smrg  }
1975e6d2e958Smrgfi #func_split_short_opt
1976e6d2e958Smrg
1977e6d2e958Smrg
1978e6d2e958Smrg# func_usage
1979e6d2e958Smrg# ----------
1980e6d2e958Smrg# Echo short help message to standard output and exit.
1981e6d2e958Smrgfunc_usage ()
1982899129b3Smrg{
1983e6d2e958Smrg    $debug_cmd
1984899129b3Smrg
1985e6d2e958Smrg    func_usage_message
1986e6d2e958Smrg    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
1987e6d2e958Smrg    exit 0
1988e6d2e958Smrg}
1989899129b3Smrg
1990899129b3Smrg
1991e6d2e958Smrg# func_usage_message
1992e6d2e958Smrg# ------------------
1993e6d2e958Smrg# Echo short help message to standard output.
1994e6d2e958Smrgfunc_usage_message ()
1995899129b3Smrg{
1996e6d2e958Smrg    $debug_cmd
1997899129b3Smrg
1998e6d2e958Smrg    eval \$ECHO \""Usage: $usage"\"
1999e6d2e958Smrg    echo
2000e6d2e958Smrg    $SED -n 's|^# ||
2001e6d2e958Smrg        /^Written by/{
2002e6d2e958Smrg          x;p;x
2003e6d2e958Smrg        }
2004e6d2e958Smrg	h
2005e6d2e958Smrg	/^Written by/q' < "$progpath"
2006e6d2e958Smrg    echo
2007e6d2e958Smrg    eval \$ECHO \""$usage_message"\"
2008e6d2e958Smrg}
2009899129b3Smrg
2010bd1da9d7Smrg
2011e6d2e958Smrg# func_version
2012e6d2e958Smrg# ------------
2013e6d2e958Smrg# Echo version message to standard output and exit.
2014e6d2e958Smrgfunc_version ()
2015e6d2e958Smrg{
2016e6d2e958Smrg    $debug_cmd
2017bd1da9d7Smrg
2018e6d2e958Smrg    printf '%s\n' "$progname $scriptversion"
2019e6d2e958Smrg    $SED -n '
2020e6d2e958Smrg        /(C)/!b go
2021e6d2e958Smrg        :more
2022e6d2e958Smrg        /\./!{
2023e6d2e958Smrg          N
2024e6d2e958Smrg          s|\n# | |
2025e6d2e958Smrg          b more
2026e6d2e958Smrg        }
2027e6d2e958Smrg        :go
2028e6d2e958Smrg        /^# Written by /,/# warranty; / {
2029e6d2e958Smrg          s|^# ||
2030e6d2e958Smrg          s|^# *$||
2031e6d2e958Smrg          s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
2032e6d2e958Smrg          p
2033e6d2e958Smrg        }
2034e6d2e958Smrg        /^# Written by / {
2035e6d2e958Smrg          s|^# ||
2036e6d2e958Smrg          p
2037e6d2e958Smrg        }
2038e6d2e958Smrg        /^warranty; /q' < "$progpath"
20395bcb6992Smrg
2040e6d2e958Smrg    exit $?
2041e6d2e958Smrg}
2042bd1da9d7Smrg
204347e89262Smrg
2044e6d2e958Smrg# Local variables:
2045e6d2e958Smrg# mode: shell-script
2046e6d2e958Smrg# sh-indentation: 2
2047e6d2e958Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
2048e6d2e958Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
2049e6d2e958Smrg# time-stamp-time-zone: "UTC"
2050e6d2e958Smrg# End:
205147e89262Smrg
2052e6d2e958Smrg# Set a version string.
2053e6d2e958Smrgscriptversion='(GNU libtool) 2.4.6'
205447e89262Smrg
205547e89262Smrg
2056e6d2e958Smrg# func_echo ARG...
2057e6d2e958Smrg# ----------------
2058e6d2e958Smrg# Libtool also displays the current mode in messages, so override
2059e6d2e958Smrg# funclib.sh func_echo with this custom definition.
2060e6d2e958Smrgfunc_echo ()
2061899129b3Smrg{
2062e6d2e958Smrg    $debug_cmd
2063899129b3Smrg
2064e6d2e958Smrg    _G_message=$*
2065899129b3Smrg
2066e6d2e958Smrg    func_echo_IFS=$IFS
2067e6d2e958Smrg    IFS=$nl
2068e6d2e958Smrg    for _G_line in $_G_message; do
2069e6d2e958Smrg      IFS=$func_echo_IFS
2070e6d2e958Smrg      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
2071e6d2e958Smrg    done
2072e6d2e958Smrg    IFS=$func_echo_IFS
2073e6d2e958Smrg}
2074899129b3Smrg
2075e6d2e958Smrg
2076e6d2e958Smrg# func_warning ARG...
2077e6d2e958Smrg# -------------------
2078e6d2e958Smrg# Libtool warnings are not categorized, so override funclib.sh
2079e6d2e958Smrg# func_warning with this simpler definition.
2080e6d2e958Smrgfunc_warning ()
2081899129b3Smrg{
2082e6d2e958Smrg    $debug_cmd
2083899129b3Smrg
2084e6d2e958Smrg    $warning_func ${1+"$@"}
2085e6d2e958Smrg}
2086899129b3Smrg
2087899129b3Smrg
2088e6d2e958Smrg## ---------------- ##
2089e6d2e958Smrg## Options parsing. ##
2090e6d2e958Smrg## ---------------- ##
2091e6d2e958Smrg
2092e6d2e958Smrg# Hook in the functions to make sure our own options are parsed during
2093e6d2e958Smrg# the option parsing loop.
2094e6d2e958Smrg
2095e6d2e958Smrgusage='$progpath [OPTION]... [MODE-ARG]...'
2096e6d2e958Smrg
2097e6d2e958Smrg# Short help message in response to '-h'.
2098e6d2e958Smrgusage_message="Options:
2099e6d2e958Smrg       --config             show all configuration variables
2100e6d2e958Smrg       --debug              enable verbose shell tracing
2101e6d2e958Smrg   -n, --dry-run            display commands without modifying any files
2102e6d2e958Smrg       --features           display basic configuration information and exit
2103e6d2e958Smrg       --mode=MODE          use operation mode MODE
2104e6d2e958Smrg       --no-warnings        equivalent to '-Wnone'
2105e6d2e958Smrg       --preserve-dup-deps  don't remove duplicate dependency libraries
2106e6d2e958Smrg       --quiet, --silent    don't print informational messages
2107e6d2e958Smrg       --tag=TAG            use configuration variables from tag TAG
2108e6d2e958Smrg   -v, --verbose            print more informational messages than default
2109e6d2e958Smrg       --version            print version information
2110e6d2e958Smrg   -W, --warnings=CATEGORY  report the warnings falling in CATEGORY [all]
2111e6d2e958Smrg   -h, --help, --help-all   print short, long, or detailed help message
2112e6d2e958Smrg"
2113899129b3Smrg
2114e6d2e958Smrg# Additional text appended to 'usage_message' in response to '--help'.
2115e6d2e958Smrgfunc_help ()
2116899129b3Smrg{
2117e6d2e958Smrg    $debug_cmd
2118e6d2e958Smrg
2119e6d2e958Smrg    func_usage_message
2120e6d2e958Smrg    $ECHO "$long_help_message
2121e6d2e958Smrg
2122e6d2e958SmrgMODE must be one of the following:
2123e6d2e958Smrg
2124e6d2e958Smrg       clean           remove files from the build directory
2125e6d2e958Smrg       compile         compile a source file into a libtool object
2126e6d2e958Smrg       execute         automatically set library path, then run a program
2127e6d2e958Smrg       finish          complete the installation of libtool libraries
2128e6d2e958Smrg       install         install libraries or executables
2129e6d2e958Smrg       link            create a library or an executable
2130e6d2e958Smrg       uninstall       remove libraries from an installed directory
2131e6d2e958Smrg
2132e6d2e958SmrgMODE-ARGS vary depending on the MODE.  When passed as first option,
2133e6d2e958Smrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
2134e6d2e958SmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE.
2135e6d2e958Smrg
2136e6d2e958SmrgWhen reporting a bug, please describe a test case to reproduce it and
2137e6d2e958Smrginclude the following information:
2138e6d2e958Smrg
2139e6d2e958Smrg       host-triplet:   $host
2140e6d2e958Smrg       shell:          $SHELL
2141e6d2e958Smrg       compiler:       $LTCC
2142e6d2e958Smrg       compiler flags: $LTCFLAGS
2143e6d2e958Smrg       linker:         $LD (gnu? $with_gnu_ld)
21446ad5a0e2Smrg       version:        $progname $scriptversion Debian-2.4.6-15
2145e6d2e958Smrg       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
2146e6d2e958Smrg       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
2147e6d2e958Smrg
2148e6d2e958SmrgReport bugs to <bug-libtool@gnu.org>.
21496ad5a0e2SmrgGNU libtool home page: <http://www.gnu.org/s/libtool/>.
2150e6d2e958SmrgGeneral help using GNU software: <http://www.gnu.org/gethelp/>."
2151e6d2e958Smrg    exit 0
2152e6d2e958Smrg}
2153899129b3Smrg
2154899129b3Smrg
2155e6d2e958Smrg# func_lo2o OBJECT-NAME
2156e6d2e958Smrg# ---------------------
2157e6d2e958Smrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
2158e6d2e958Smrg# object suffix.
2159e6d2e958Smrg
2160e6d2e958Smrglo2o=s/\\.lo\$/.$objext/
2161e6d2e958Smrgo2lo=s/\\.$objext\$/.lo/
2162e6d2e958Smrg
2163e6d2e958Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
2164e6d2e958Smrg  eval 'func_lo2o ()
2165e6d2e958Smrg  {
2166e6d2e958Smrg    case $1 in
2167e6d2e958Smrg      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
2168e6d2e958Smrg      *   ) func_lo2o_result=$1               ;;
2169e6d2e958Smrg    esac
2170e6d2e958Smrg  }'
2171e6d2e958Smrg
2172e6d2e958Smrg  # func_xform LIBOBJ-OR-SOURCE
2173e6d2e958Smrg  # ---------------------------
2174e6d2e958Smrg  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
2175e6d2e958Smrg  # suffix to a '.lo' libtool-object suffix.
2176e6d2e958Smrg  eval 'func_xform ()
2177e6d2e958Smrg  {
2178e6d2e958Smrg    func_xform_result=${1%.*}.lo
2179e6d2e958Smrg  }'
2180e6d2e958Smrgelse
2181e6d2e958Smrg  # ...otherwise fall back to using sed.
2182e6d2e958Smrg  func_lo2o ()
2183e6d2e958Smrg  {
2184e6d2e958Smrg    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
2185e6d2e958Smrg  }
2186e6d2e958Smrg
2187e6d2e958Smrg  func_xform ()
2188e6d2e958Smrg  {
2189e6d2e958Smrg    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
2190e6d2e958Smrg  }
2191e6d2e958Smrgfi
2192899129b3Smrg
2193899129b3Smrg
2194e6d2e958Smrg# func_fatal_configuration ARG...
2195e6d2e958Smrg# -------------------------------
219647e89262Smrg# Echo program name prefixed message to standard error, followed by
219747e89262Smrg# a configuration failure hint, and exit.
219847e89262Smrgfunc_fatal_configuration ()
219947e89262Smrg{
2200e6d2e958Smrg    func__fatal_error ${1+"$@"} \
2201e6d2e958Smrg      "See the $PACKAGE documentation for more information." \
2202e6d2e958Smrg      "Fatal configuration error."
220347e89262Smrg}
220447e89262Smrg
220547e89262Smrg
220647e89262Smrg# func_config
2207e6d2e958Smrg# -----------
220847e89262Smrg# Display the configuration for all the tags in this script.
220947e89262Smrgfunc_config ()
221047e89262Smrg{
221147e89262Smrg    re_begincf='^# ### BEGIN LIBTOOL'
221247e89262Smrg    re_endcf='^# ### END LIBTOOL'
221347e89262Smrg
221447e89262Smrg    # Default configuration.
221547e89262Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
221647e89262Smrg
2217bd1da9d7Smrg    # Now print the configurations for the tags.
2218bd1da9d7Smrg    for tagname in $taglist; do
221947e89262Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
2220bd1da9d7Smrg    done
2221bd1da9d7Smrg
222247e89262Smrg    exit $?
222347e89262Smrg}
2224bd1da9d7Smrg
2225e6d2e958Smrg
222647e89262Smrg# func_features
2227e6d2e958Smrg# -------------
222847e89262Smrg# Display the features supported by this script.
222947e89262Smrgfunc_features ()
223047e89262Smrg{
223147e89262Smrg    echo "host: $host"
2232e6d2e958Smrg    if test yes = "$build_libtool_libs"; then
223347e89262Smrg      echo "enable shared libraries"
2234bd1da9d7Smrg    else
223547e89262Smrg      echo "disable shared libraries"
2236bd1da9d7Smrg    fi
2237e6d2e958Smrg    if test yes = "$build_old_libs"; then
223847e89262Smrg      echo "enable static libraries"
2239bd1da9d7Smrg    else
224047e89262Smrg      echo "disable static libraries"
2241bd1da9d7Smrg    fi
224247e89262Smrg
2243bd1da9d7Smrg    exit $?
224447e89262Smrg}
2245bd1da9d7Smrg
2246e6d2e958Smrg
2247e6d2e958Smrg# func_enable_tag TAGNAME
2248e6d2e958Smrg# -----------------------
224947e89262Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
225047e89262Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
225147e89262Smrg# variable here.
225247e89262Smrgfunc_enable_tag ()
225347e89262Smrg{
2254e6d2e958Smrg    # Global variable:
2255e6d2e958Smrg    tagname=$1
2256bd1da9d7Smrg
2257e6d2e958Smrg    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
2258e6d2e958Smrg    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
2259e6d2e958Smrg    sed_extractcf=/$re_begincf/,/$re_endcf/p
2260bd1da9d7Smrg
2261e6d2e958Smrg    # Validate tagname.
2262e6d2e958Smrg    case $tagname in
2263e6d2e958Smrg      *[!-_A-Za-z0-9,/]*)
2264e6d2e958Smrg        func_fatal_error "invalid tag name: $tagname"
2265e6d2e958Smrg        ;;
2266e6d2e958Smrg    esac
2267bd1da9d7Smrg
2268e6d2e958Smrg    # Don't test for the "default" C tag, as we know it's
2269e6d2e958Smrg    # there but not specially marked.
2270e6d2e958Smrg    case $tagname in
2271e6d2e958Smrg        CC) ;;
227247e89262Smrg    *)
2273e6d2e958Smrg        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
2274e6d2e958Smrg	  taglist="$taglist $tagname"
2275e6d2e958Smrg
2276e6d2e958Smrg	  # Evaluate the configuration.  Be careful to quote the path
2277e6d2e958Smrg	  # and the sed script, to avoid splitting on whitespace, but
2278e6d2e958Smrg	  # also don't use non-portable quotes within backquotes within
2279e6d2e958Smrg	  # quotes we have to do it in 2 steps:
2280e6d2e958Smrg	  extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
2281e6d2e958Smrg	  eval "$extractedcf"
2282e6d2e958Smrg        else
2283e6d2e958Smrg	  func_error "ignoring unknown tag $tagname"
2284e6d2e958Smrg        fi
2285e6d2e958Smrg        ;;
2286e6d2e958Smrg    esac
228747e89262Smrg}
228847e89262Smrg
2289e6d2e958Smrg
2290899129b3Smrg# func_check_version_match
2291e6d2e958Smrg# ------------------------
2292899129b3Smrg# Ensure that we are using m4 macros, and libtool script from the same
2293899129b3Smrg# release of libtool.
2294899129b3Smrgfunc_check_version_match ()
229547e89262Smrg{
2296e6d2e958Smrg    if test "$package_revision" != "$macro_revision"; then
2297e6d2e958Smrg      if test "$VERSION" != "$macro_version"; then
2298e6d2e958Smrg        if test -z "$macro_version"; then
2299e6d2e958Smrg          cat >&2 <<_LT_EOF
2300899129b3Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2301899129b3Smrg$progname: definition of this LT_INIT comes from an older release.
2302899129b3Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2303899129b3Smrg$progname: and run autoconf again.
2304899129b3Smrg_LT_EOF
2305e6d2e958Smrg        else
2306e6d2e958Smrg          cat >&2 <<_LT_EOF
2307899129b3Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2308899129b3Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
2309899129b3Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2310899129b3Smrg$progname: and run autoconf again.
2311899129b3Smrg_LT_EOF
2312e6d2e958Smrg        fi
2313e6d2e958Smrg      else
2314e6d2e958Smrg        cat >&2 <<_LT_EOF
2315899129b3Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
2316899129b3Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
2317899129b3Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
2318899129b3Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
2319899129b3Smrg_LT_EOF
2320e6d2e958Smrg      fi
2321899129b3Smrg
2322e6d2e958Smrg      exit $EXIT_MISMATCH
2323e6d2e958Smrg    fi
2324899129b3Smrg}
2325899129b3Smrg
2326899129b3Smrg
2327e6d2e958Smrg# libtool_options_prep [ARG]...
2328e6d2e958Smrg# -----------------------------
2329e6d2e958Smrg# Preparation for options parsed by libtool.
2330e6d2e958Smrglibtool_options_prep ()
2331e6d2e958Smrg{
2332e6d2e958Smrg    $debug_mode
2333899129b3Smrg
2334e6d2e958Smrg    # Option defaults:
2335e6d2e958Smrg    opt_config=false
2336e6d2e958Smrg    opt_dlopen=
2337e6d2e958Smrg    opt_dry_run=false
2338e6d2e958Smrg    opt_help=false
2339e6d2e958Smrg    opt_mode=
2340e6d2e958Smrg    opt_preserve_dup_deps=false
2341e6d2e958Smrg    opt_quiet=false
2342899129b3Smrg
2343e6d2e958Smrg    nonopt=
2344e6d2e958Smrg    preserve_args=
2345899129b3Smrg
23466ad5a0e2Smrg    _G_rc_lt_options_prep=:
23476ad5a0e2Smrg
2348e6d2e958Smrg    # Shorthand for --mode=foo, only valid as the first argument
2349e6d2e958Smrg    case $1 in
2350e6d2e958Smrg    clean|clea|cle|cl)
2351e6d2e958Smrg      shift; set dummy --mode clean ${1+"$@"}; shift
2352e6d2e958Smrg      ;;
2353e6d2e958Smrg    compile|compil|compi|comp|com|co|c)
2354e6d2e958Smrg      shift; set dummy --mode compile ${1+"$@"}; shift
2355e6d2e958Smrg      ;;
2356e6d2e958Smrg    execute|execut|execu|exec|exe|ex|e)
2357e6d2e958Smrg      shift; set dummy --mode execute ${1+"$@"}; shift
2358e6d2e958Smrg      ;;
2359e6d2e958Smrg    finish|finis|fini|fin|fi|f)
2360e6d2e958Smrg      shift; set dummy --mode finish ${1+"$@"}; shift
2361e6d2e958Smrg      ;;
2362e6d2e958Smrg    install|instal|insta|inst|ins|in|i)
2363e6d2e958Smrg      shift; set dummy --mode install ${1+"$@"}; shift
2364e6d2e958Smrg      ;;
2365e6d2e958Smrg    link|lin|li|l)
2366e6d2e958Smrg      shift; set dummy --mode link ${1+"$@"}; shift
2367e6d2e958Smrg      ;;
2368e6d2e958Smrg    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
2369e6d2e958Smrg      shift; set dummy --mode uninstall ${1+"$@"}; shift
2370e6d2e958Smrg      ;;
23716ad5a0e2Smrg    *)
23726ad5a0e2Smrg      _G_rc_lt_options_prep=false
23736ad5a0e2Smrg      ;;
2374e6d2e958Smrg    esac
2375e6d2e958Smrg
23766ad5a0e2Smrg    if $_G_rc_lt_options_prep; then
23776ad5a0e2Smrg      # Pass back the list of options.
23786ad5a0e2Smrg      func_quote_for_eval ${1+"$@"}
23796ad5a0e2Smrg      libtool_options_prep_result=$func_quote_for_eval_result
23806ad5a0e2Smrg    fi
23816ad5a0e2Smrg
23826ad5a0e2Smrg    $_G_rc_lt_options_prep
2383e6d2e958Smrg}
2384e6d2e958Smrgfunc_add_hook func_options_prep libtool_options_prep
2385bd1da9d7Smrg
2386bd1da9d7Smrg
2387e6d2e958Smrg# libtool_parse_options [ARG]...
2388e6d2e958Smrg# ---------------------------------
2389e6d2e958Smrg# Provide handling for libtool specific options.
2390e6d2e958Smrglibtool_parse_options ()
2391899129b3Smrg{
2392e6d2e958Smrg    $debug_cmd
239347e89262Smrg
23946ad5a0e2Smrg    _G_rc_lt_parse_options=false
23956ad5a0e2Smrg
2396e6d2e958Smrg    # Perform our own loop to consume as many options as possible in
2397e6d2e958Smrg    # each iteration.
2398e6d2e958Smrg    while test $# -gt 0; do
23996ad5a0e2Smrg      _G_match_lt_parse_options=:
2400e6d2e958Smrg      _G_opt=$1
2401e6d2e958Smrg      shift
2402e6d2e958Smrg      case $_G_opt in
2403e6d2e958Smrg        --dry-run|--dryrun|-n)
2404e6d2e958Smrg                        opt_dry_run=:
2405e6d2e958Smrg                        ;;
2406e6d2e958Smrg
2407e6d2e958Smrg        --config)       func_config ;;
2408e6d2e958Smrg
2409e6d2e958Smrg        --dlopen|-dlopen)
2410e6d2e958Smrg                        opt_dlopen="${opt_dlopen+$opt_dlopen
2411e6d2e958Smrg}$1"
2412e6d2e958Smrg                        shift
2413e6d2e958Smrg                        ;;
2414e6d2e958Smrg
2415e6d2e958Smrg        --preserve-dup-deps)
2416e6d2e958Smrg                        opt_preserve_dup_deps=: ;;
2417e6d2e958Smrg
2418e6d2e958Smrg        --features)     func_features ;;
2419e6d2e958Smrg
2420e6d2e958Smrg        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
2421e6d2e958Smrg
2422e6d2e958Smrg        --help)         opt_help=: ;;
2423e6d2e958Smrg
2424e6d2e958Smrg        --help-all)     opt_help=': help-all' ;;
2425e6d2e958Smrg
2426e6d2e958Smrg        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
2427e6d2e958Smrg                        opt_mode=$1
2428e6d2e958Smrg                        case $1 in
2429e6d2e958Smrg                          # Valid mode arguments:
2430e6d2e958Smrg                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
2431e6d2e958Smrg
2432e6d2e958Smrg                          # Catch anything else as an error
2433e6d2e958Smrg                          *) func_error "invalid argument for $_G_opt"
2434e6d2e958Smrg                             exit_cmd=exit
2435e6d2e958Smrg                             break
2436e6d2e958Smrg                             ;;
2437e6d2e958Smrg                        esac
2438e6d2e958Smrg                        shift
2439e6d2e958Smrg                        ;;
2440e6d2e958Smrg
2441e6d2e958Smrg        --no-silent|--no-quiet)
2442e6d2e958Smrg                        opt_quiet=false
2443e6d2e958Smrg                        func_append preserve_args " $_G_opt"
2444e6d2e958Smrg                        ;;
2445e6d2e958Smrg
2446e6d2e958Smrg        --no-warnings|--no-warning|--no-warn)
2447e6d2e958Smrg                        opt_warning=false
2448e6d2e958Smrg                        func_append preserve_args " $_G_opt"
2449e6d2e958Smrg                        ;;
2450e6d2e958Smrg
2451e6d2e958Smrg        --no-verbose)
2452e6d2e958Smrg                        opt_verbose=false
2453e6d2e958Smrg                        func_append preserve_args " $_G_opt"
2454e6d2e958Smrg                        ;;
2455e6d2e958Smrg
2456e6d2e958Smrg        --silent|--quiet)
2457e6d2e958Smrg                        opt_quiet=:
2458e6d2e958Smrg                        opt_verbose=false
2459e6d2e958Smrg                        func_append preserve_args " $_G_opt"
2460e6d2e958Smrg                        ;;
2461e6d2e958Smrg
2462e6d2e958Smrg        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
2463e6d2e958Smrg                        opt_tag=$1
2464e6d2e958Smrg                        func_append preserve_args " $_G_opt $1"
2465e6d2e958Smrg                        func_enable_tag "$1"
2466e6d2e958Smrg                        shift
2467e6d2e958Smrg                        ;;
2468e6d2e958Smrg
2469e6d2e958Smrg        --verbose|-v)   opt_quiet=false
2470e6d2e958Smrg                        opt_verbose=:
2471e6d2e958Smrg                        func_append preserve_args " $_G_opt"
2472e6d2e958Smrg                        ;;
2473e6d2e958Smrg
24746ad5a0e2Smrg        # An option not handled by this hook function:
24756ad5a0e2Smrg        *)              set dummy "$_G_opt" ${1+"$@"} ; shift
24766ad5a0e2Smrg                        _G_match_lt_parse_options=false
24776ad5a0e2Smrg                        break
24786ad5a0e2Smrg                        ;;
2479e6d2e958Smrg      esac
24806ad5a0e2Smrg      $_G_match_lt_parse_options && _G_rc_lt_parse_options=:
2481e6d2e958Smrg    done
2482899129b3Smrg
24836ad5a0e2Smrg    if $_G_rc_lt_parse_options; then
24846ad5a0e2Smrg      # save modified positional parameters for caller
24856ad5a0e2Smrg      func_quote_for_eval ${1+"$@"}
24866ad5a0e2Smrg      libtool_parse_options_result=$func_quote_for_eval_result
24876ad5a0e2Smrg    fi
2488899129b3Smrg
24896ad5a0e2Smrg    $_G_rc_lt_parse_options
2490e6d2e958Smrg}
2491e6d2e958Smrgfunc_add_hook func_parse_options libtool_parse_options
249247e89262Smrg
2493bd1da9d7Smrg
249447e89262Smrg
2495e6d2e958Smrg# libtool_validate_options [ARG]...
2496e6d2e958Smrg# ---------------------------------
2497e6d2e958Smrg# Perform any sanity checks on option settings and/or unconsumed
2498e6d2e958Smrg# arguments.
2499e6d2e958Smrglibtool_validate_options ()
2500e6d2e958Smrg{
2501e6d2e958Smrg    # save first non-option argument
2502e6d2e958Smrg    if test 0 -lt $#; then
2503e6d2e958Smrg      nonopt=$1
2504e6d2e958Smrg      shift
250547e89262Smrg    fi
250647e89262Smrg
2507e6d2e958Smrg    # preserve --debug
2508e6d2e958Smrg    test : = "$debug_cmd" || func_append preserve_args " --debug"
250947e89262Smrg
2510e6d2e958Smrg    case $host in
2511e6d2e958Smrg      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
2512e6d2e958Smrg      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
2513e6d2e958Smrg      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
2514e6d2e958Smrg        # don't eliminate duplications in $postdeps and $predeps
2515e6d2e958Smrg        opt_duplicate_compiler_generated_deps=:
2516e6d2e958Smrg        ;;
2517e6d2e958Smrg      *)
2518e6d2e958Smrg        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
2519e6d2e958Smrg        ;;
2520e6d2e958Smrg    esac
252147e89262Smrg
2522e6d2e958Smrg    $opt_help || {
2523e6d2e958Smrg      # Sanity checks first:
2524e6d2e958Smrg      func_check_version_match
2525e6d2e958Smrg
2526e6d2e958Smrg      test yes != "$build_libtool_libs" \
2527e6d2e958Smrg        && test yes != "$build_old_libs" \
2528e6d2e958Smrg        && func_fatal_configuration "not configured to build any kind of library"
2529e6d2e958Smrg
2530e6d2e958Smrg      # Darwin sucks
2531e6d2e958Smrg      eval std_shrext=\"$shrext_cmds\"
2532e6d2e958Smrg
2533e6d2e958Smrg      # Only execute mode is allowed to have -dlopen flags.
2534e6d2e958Smrg      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
2535e6d2e958Smrg        func_error "unrecognized option '-dlopen'"
2536e6d2e958Smrg        $ECHO "$help" 1>&2
2537e6d2e958Smrg        exit $EXIT_FAILURE
2538e6d2e958Smrg      fi
253947e89262Smrg
2540e6d2e958Smrg      # Change the help message to a mode-specific one.
2541e6d2e958Smrg      generic_help=$help
2542e6d2e958Smrg      help="Try '$progname --help --mode=$opt_mode' for more information."
2543e6d2e958Smrg    }
254447e89262Smrg
2545e6d2e958Smrg    # Pass back the unparsed argument list
2546e6d2e958Smrg    func_quote_for_eval ${1+"$@"}
2547e6d2e958Smrg    libtool_validate_options_result=$func_quote_for_eval_result
2548899129b3Smrg}
2549e6d2e958Smrgfunc_add_hook func_validate_options libtool_validate_options
255047e89262Smrg
255147e89262Smrg
2552e6d2e958Smrg# Process options as early as possible so that --help and --version
2553e6d2e958Smrg# can return quickly.
2554e6d2e958Smrgfunc_options ${1+"$@"}
2555e6d2e958Smrgeval set dummy "$func_options_result"; shift
2556e6d2e958Smrg
2557bd1da9d7Smrg
2558bd1da9d7Smrg
2559899129b3Smrg## ----------- ##
2560899129b3Smrg##    Main.    ##
2561899129b3Smrg## ----------- ##
2562bd1da9d7Smrg
2563e6d2e958Smrgmagic='%%%MAGIC variable%%%'
2564e6d2e958Smrgmagic_exe='%%%MAGIC EXE variable%%%'
2565e6d2e958Smrg
2566e6d2e958Smrg# Global variables.
2567e6d2e958Smrgextracted_archives=
2568e6d2e958Smrgextracted_serial=0
2569e6d2e958Smrg
2570e6d2e958Smrg# If this variable is set in any of the actions, the command in it
2571e6d2e958Smrg# will be execed at the end.  This prevents here-documents from being
2572e6d2e958Smrg# left over by shells.
2573e6d2e958Smrgexec_cmd=
2574e6d2e958Smrg
2575e6d2e958Smrg
2576e6d2e958Smrg# A function that is used when there is no print builtin or printf.
2577e6d2e958Smrgfunc_fallback_echo ()
2578e6d2e958Smrg{
2579e6d2e958Smrg  eval 'cat <<_LTECHO_EOF
2580e6d2e958Smrg$1
2581e6d2e958Smrg_LTECHO_EOF'
2582e6d2e958Smrg}
2583e6d2e958Smrg
2584e6d2e958Smrg# func_generated_by_libtool
2585e6d2e958Smrg# True iff stdin has been generated by Libtool. This function is only
2586e6d2e958Smrg# a basic sanity check; it will hardly flush out determined imposters.
2587e6d2e958Smrgfunc_generated_by_libtool_p ()
2588e6d2e958Smrg{
2589e6d2e958Smrg  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
2590e6d2e958Smrg}
2591e6d2e958Smrg
259247e89262Smrg# func_lalib_p file
2593e6d2e958Smrg# True iff FILE is a libtool '.la' library or '.lo' object file.
259447e89262Smrg# This function is only a basic sanity check; it will hardly flush out
259547e89262Smrg# determined imposters.
259647e89262Smrgfunc_lalib_p ()
259747e89262Smrg{
259847e89262Smrg    test -f "$1" &&
2599e6d2e958Smrg      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
260047e89262Smrg}
2601bd1da9d7Smrg
260247e89262Smrg# func_lalib_unsafe_p file
2603e6d2e958Smrg# True iff FILE is a libtool '.la' library or '.lo' object file.
260447e89262Smrg# This function implements the same check as func_lalib_p without
260547e89262Smrg# resorting to external programs.  To this end, it redirects stdin and
260647e89262Smrg# closes it afterwards, without saving the original file descriptor.
260747e89262Smrg# As a safety measure, use it only where a negative result would be
2608e6d2e958Smrg# fatal anyway.  Works if 'file' does not exist.
260947e89262Smrgfunc_lalib_unsafe_p ()
261047e89262Smrg{
261147e89262Smrg    lalib_p=no
261247e89262Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
261347e89262Smrg	for lalib_p_l in 1 2 3 4
261447e89262Smrg	do
261547e89262Smrg	    read lalib_p_line
2616e6d2e958Smrg	    case $lalib_p_line in
261747e89262Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
261847e89262Smrg	    esac
261947e89262Smrg	done
262047e89262Smrg	exec 0<&5 5<&-
262147e89262Smrg    fi
2622e6d2e958Smrg    test yes = "$lalib_p"
262347e89262Smrg}
2624bd1da9d7Smrg
262547e89262Smrg# func_ltwrapper_script_p file
262647e89262Smrg# True iff FILE is a libtool wrapper script
262747e89262Smrg# This function is only a basic sanity check; it will hardly flush out
262847e89262Smrg# determined imposters.
262947e89262Smrgfunc_ltwrapper_script_p ()
263047e89262Smrg{
2631e6d2e958Smrg    test -f "$1" &&
2632e6d2e958Smrg      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
263347e89262Smrg}
2634bd1da9d7Smrg
263547e89262Smrg# func_ltwrapper_executable_p file
263647e89262Smrg# True iff FILE is a libtool wrapper executable
263747e89262Smrg# This function is only a basic sanity check; it will hardly flush out
263847e89262Smrg# determined imposters.
263947e89262Smrgfunc_ltwrapper_executable_p ()
264047e89262Smrg{
264147e89262Smrg    func_ltwrapper_exec_suffix=
264247e89262Smrg    case $1 in
264347e89262Smrg    *.exe) ;;
264447e89262Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
264547e89262Smrg    esac
264647e89262Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
264747e89262Smrg}
264847e89262Smrg
264947e89262Smrg# func_ltwrapper_scriptname file
265047e89262Smrg# Assumes file is an ltwrapper_executable
265147e89262Smrg# uses $file to determine the appropriate filename for a
265247e89262Smrg# temporary ltwrapper_script.
265347e89262Smrgfunc_ltwrapper_scriptname ()
265447e89262Smrg{
2655899129b3Smrg    func_dirname_and_basename "$1" "" "."
2656899129b3Smrg    func_stripname '' '.exe' "$func_basename_result"
2657e6d2e958Smrg    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
265847e89262Smrg}
265947e89262Smrg
266047e89262Smrg# func_ltwrapper_p file
266147e89262Smrg# True iff FILE is a libtool wrapper script or wrapper executable
266247e89262Smrg# This function is only a basic sanity check; it will hardly flush out
266347e89262Smrg# determined imposters.
266447e89262Smrgfunc_ltwrapper_p ()
266547e89262Smrg{
266647e89262Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
266747e89262Smrg}
266847e89262Smrg
266947e89262Smrg
267047e89262Smrg# func_execute_cmds commands fail_cmd
267147e89262Smrg# Execute tilde-delimited COMMANDS.
267247e89262Smrg# If FAIL_CMD is given, eval that upon failure.
267347e89262Smrg# FAIL_CMD may read-access the current command in variable CMD!
267447e89262Smrgfunc_execute_cmds ()
267547e89262Smrg{
2676e6d2e958Smrg    $debug_cmd
2677e6d2e958Smrg
267847e89262Smrg    save_ifs=$IFS; IFS='~'
267947e89262Smrg    for cmd in $1; do
2680e6d2e958Smrg      IFS=$sp$nl
268147e89262Smrg      eval cmd=\"$cmd\"
2682e6d2e958Smrg      IFS=$save_ifs
268347e89262Smrg      func_show_eval "$cmd" "${2-:}"
268447e89262Smrg    done
268547e89262Smrg    IFS=$save_ifs
268647e89262Smrg}
268747e89262Smrg
268847e89262Smrg
268947e89262Smrg# func_source file
269047e89262Smrg# Source FILE, adding directory component if necessary.
269147e89262Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
269247e89262Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
269347e89262Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
2694e6d2e958Smrg# 'FILE.' does not work on cygwin managed mounts.
269547e89262Smrgfunc_source ()
269647e89262Smrg{
2697e6d2e958Smrg    $debug_cmd
2698e6d2e958Smrg
269947e89262Smrg    case $1 in
270047e89262Smrg    */* | *\\*)	. "$1" ;;
270147e89262Smrg    *)		. "./$1" ;;
270247e89262Smrg    esac
270347e89262Smrg}
270447e89262Smrg
270547e89262Smrg
2706899129b3Smrg# func_resolve_sysroot PATH
2707899129b3Smrg# Replace a leading = in PATH with a sysroot.  Store the result into
2708899129b3Smrg# func_resolve_sysroot_result
2709899129b3Smrgfunc_resolve_sysroot ()
2710899129b3Smrg{
2711899129b3Smrg  func_resolve_sysroot_result=$1
2712899129b3Smrg  case $func_resolve_sysroot_result in
2713899129b3Smrg  =*)
2714899129b3Smrg    func_stripname '=' '' "$func_resolve_sysroot_result"
2715899129b3Smrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
2716899129b3Smrg    ;;
2717899129b3Smrg  esac
2718899129b3Smrg}
2719899129b3Smrg
2720899129b3Smrg# func_replace_sysroot PATH
2721899129b3Smrg# If PATH begins with the sysroot, replace it with = and
2722899129b3Smrg# store the result into func_replace_sysroot_result.
2723899129b3Smrgfunc_replace_sysroot ()
2724899129b3Smrg{
2725e6d2e958Smrg  case $lt_sysroot:$1 in
2726899129b3Smrg  ?*:"$lt_sysroot"*)
2727899129b3Smrg    func_stripname "$lt_sysroot" '' "$1"
2728e6d2e958Smrg    func_replace_sysroot_result='='$func_stripname_result
2729899129b3Smrg    ;;
2730899129b3Smrg  *)
2731899129b3Smrg    # Including no sysroot.
2732899129b3Smrg    func_replace_sysroot_result=$1
2733899129b3Smrg    ;;
2734899129b3Smrg  esac
2735899129b3Smrg}
2736899129b3Smrg
273747e89262Smrg# func_infer_tag arg
273847e89262Smrg# Infer tagged configuration to use if any are available and
273947e89262Smrg# if one wasn't chosen via the "--tag" command line option.
274047e89262Smrg# Only attempt this if the compiler in the base compile
274147e89262Smrg# command doesn't match the default compiler.
274247e89262Smrg# arg is usually of the form 'gcc ...'
274347e89262Smrgfunc_infer_tag ()
274447e89262Smrg{
2745e6d2e958Smrg    $debug_cmd
2746e6d2e958Smrg
274747e89262Smrg    if test -n "$available_tags" && test -z "$tagname"; then
274847e89262Smrg      CC_quoted=
274947e89262Smrg      for arg in $CC; do
2750899129b3Smrg	func_append_quoted CC_quoted "$arg"
275147e89262Smrg      done
275247e89262Smrg      CC_expanded=`func_echo_all $CC`
275347e89262Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
275447e89262Smrg      case $@ in
275547e89262Smrg      # Blanks in the command may have been stripped by the calling shell,
275647e89262Smrg      # but not from the CC environment variable when configure was run.
275747e89262Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
275847e89262Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
275947e89262Smrg      # Blanks at the start of $base_compile will cause this to fail
276047e89262Smrg      # if we don't check for them as well.
276147e89262Smrg      *)
276247e89262Smrg	for z in $available_tags; do
276347e89262Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
276447e89262Smrg	    # Evaluate the configuration.
2765e6d2e958Smrg	    eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
276647e89262Smrg	    CC_quoted=
276747e89262Smrg	    for arg in $CC; do
276847e89262Smrg	      # Double-quote args containing other shell metacharacters.
2769899129b3Smrg	      func_append_quoted CC_quoted "$arg"
277047e89262Smrg	    done
277147e89262Smrg	    CC_expanded=`func_echo_all $CC`
277247e89262Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
277347e89262Smrg	    case "$@ " in
277447e89262Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
277547e89262Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
277647e89262Smrg	      # The compiler in the base compile command matches
277747e89262Smrg	      # the one in the tagged configuration.
277847e89262Smrg	      # Assume this is the tagged configuration we want.
277947e89262Smrg	      tagname=$z
278047e89262Smrg	      break
278147e89262Smrg	      ;;
278247e89262Smrg	    esac
278347e89262Smrg	  fi
278447e89262Smrg	done
278547e89262Smrg	# If $tagname still isn't set, then no tagged configuration
278647e89262Smrg	# was found and let the user know that the "--tag" command
278747e89262Smrg	# line option must be used.
278847e89262Smrg	if test -z "$tagname"; then
278947e89262Smrg	  func_echo "unable to infer tagged configuration"
2790e6d2e958Smrg	  func_fatal_error "specify a tag with '--tag'"
279147e89262Smrg#	else
279247e89262Smrg#	  func_verbose "using $tagname tagged configuration"
279347e89262Smrg	fi
279447e89262Smrg	;;
279547e89262Smrg      esac
279647e89262Smrg    fi
279747e89262Smrg}
279847e89262Smrg
279947e89262Smrg
2800899129b3Smrg
2801899129b3Smrg# func_write_libtool_object output_name pic_name nonpic_name
2802899129b3Smrg# Create a libtool object file (analogous to a ".la" file),
2803899129b3Smrg# but don't create it if we're doing a dry run.
2804899129b3Smrgfunc_write_libtool_object ()
2805899129b3Smrg{
2806e6d2e958Smrg    write_libobj=$1
2807e6d2e958Smrg    if test yes = "$build_libtool_libs"; then
2808e6d2e958Smrg      write_lobj=\'$2\'
2809899129b3Smrg    else
2810899129b3Smrg      write_lobj=none
2811899129b3Smrg    fi
2812899129b3Smrg
2813e6d2e958Smrg    if test yes = "$build_old_libs"; then
2814e6d2e958Smrg      write_oldobj=\'$3\'
2815899129b3Smrg    else
2816899129b3Smrg      write_oldobj=none
2817899129b3Smrg    fi
2818899129b3Smrg
2819899129b3Smrg    $opt_dry_run || {
2820899129b3Smrg      cat >${write_libobj}T <<EOF
2821899129b3Smrg# $write_libobj - a libtool object file
2822e6d2e958Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
2823899129b3Smrg#
2824899129b3Smrg# Please DO NOT delete this file!
2825899129b3Smrg# It is necessary for linking the library.
2826899129b3Smrg
2827899129b3Smrg# Name of the PIC object.
2828899129b3Smrgpic_object=$write_lobj
2829899129b3Smrg
2830899129b3Smrg# Name of the non-PIC object
2831899129b3Smrgnon_pic_object=$write_oldobj
2832899129b3Smrg
2833899129b3SmrgEOF
2834e6d2e958Smrg      $MV "${write_libobj}T" "$write_libobj"
2835899129b3Smrg    }
2836899129b3Smrg}
2837899129b3Smrg
2838899129b3Smrg
2839899129b3Smrg##################################################
2840899129b3Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
2841899129b3Smrg##################################################
2842899129b3Smrg
2843899129b3Smrg# func_convert_core_file_wine_to_w32 ARG
2844899129b3Smrg# Helper function used by file name conversion functions when $build is *nix,
2845899129b3Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
2846899129b3Smrg# correctly configured wine environment available, with the winepath program
2847899129b3Smrg# in $build's $PATH.
2848899129b3Smrg#
2849899129b3Smrg# ARG is the $build file name to be converted to w32 format.
2850899129b3Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
2851899129b3Smrg# be empty on error (or when ARG is empty)
2852899129b3Smrgfunc_convert_core_file_wine_to_w32 ()
2853899129b3Smrg{
2854e6d2e958Smrg  $debug_cmd
2855e6d2e958Smrg
2856e6d2e958Smrg  func_convert_core_file_wine_to_w32_result=$1
2857899129b3Smrg  if test -n "$1"; then
2858899129b3Smrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
2859899129b3Smrg    # are forced to check the contents of stdout. On the other hand, if the
2860899129b3Smrg    # command is not found, the shell will set an exit code of 127 and print
2861899129b3Smrg    # *an error message* to stdout. So we must check for both error code of
2862899129b3Smrg    # zero AND non-empty stdout, which explains the odd construction:
2863899129b3Smrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
2864e6d2e958Smrg    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
2865899129b3Smrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
2866e6d2e958Smrg        $SED -e "$sed_naive_backslashify"`
2867899129b3Smrg    else
2868899129b3Smrg      func_convert_core_file_wine_to_w32_result=
2869899129b3Smrg    fi
2870899129b3Smrg  fi
2871899129b3Smrg}
2872899129b3Smrg# end: func_convert_core_file_wine_to_w32
2873899129b3Smrg
2874899129b3Smrg
2875899129b3Smrg# func_convert_core_path_wine_to_w32 ARG
2876899129b3Smrg# Helper function used by path conversion functions when $build is *nix, and
2877899129b3Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
2878899129b3Smrg# configured wine environment available, with the winepath program in $build's
2879899129b3Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
2880899129b3Smrg#
2881899129b3Smrg# ARG is path to be converted from $build format to win32.
2882899129b3Smrg# Result is available in $func_convert_core_path_wine_to_w32_result.
2883899129b3Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
2884899129b3Smrg# are convertible, then the result may be empty.
2885899129b3Smrgfunc_convert_core_path_wine_to_w32 ()
2886899129b3Smrg{
2887e6d2e958Smrg  $debug_cmd
2888e6d2e958Smrg
2889899129b3Smrg  # unfortunately, winepath doesn't convert paths, only file names
2890e6d2e958Smrg  func_convert_core_path_wine_to_w32_result=
2891899129b3Smrg  if test -n "$1"; then
2892899129b3Smrg    oldIFS=$IFS
2893899129b3Smrg    IFS=:
2894899129b3Smrg    for func_convert_core_path_wine_to_w32_f in $1; do
2895899129b3Smrg      IFS=$oldIFS
2896899129b3Smrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
2897e6d2e958Smrg      if test -n "$func_convert_core_file_wine_to_w32_result"; then
2898899129b3Smrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
2899e6d2e958Smrg          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
2900899129b3Smrg        else
2901899129b3Smrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
2902899129b3Smrg        fi
2903899129b3Smrg      fi
2904899129b3Smrg    done
2905899129b3Smrg    IFS=$oldIFS
2906899129b3Smrg  fi
2907899129b3Smrg}
2908899129b3Smrg# end: func_convert_core_path_wine_to_w32
2909899129b3Smrg
2910899129b3Smrg
2911899129b3Smrg# func_cygpath ARGS...
2912899129b3Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
2913899129b3Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
2914899129b3Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
2915899129b3Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
2916899129b3Smrg# file name or path is assumed to be in w32 format, as previously converted
2917899129b3Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
2918899129b3Smrg# or path in func_cygpath_result (input file name or path is assumed to be in
2919899129b3Smrg# Cygwin format). Returns an empty string on error.
2920899129b3Smrg#
2921899129b3Smrg# ARGS are passed to cygpath, with the last one being the file name or path to
2922899129b3Smrg# be converted.
2923899129b3Smrg#
2924899129b3Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
2925899129b3Smrg# environment variable; do not put it in $PATH.
2926899129b3Smrgfunc_cygpath ()
2927899129b3Smrg{
2928e6d2e958Smrg  $debug_cmd
2929e6d2e958Smrg
2930899129b3Smrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
2931899129b3Smrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
2932899129b3Smrg    if test "$?" -ne 0; then
2933899129b3Smrg      # on failure, ensure result is empty
2934899129b3Smrg      func_cygpath_result=
2935899129b3Smrg    fi
2936899129b3Smrg  else
2937899129b3Smrg    func_cygpath_result=
2938e6d2e958Smrg    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
2939899129b3Smrg  fi
2940899129b3Smrg}
2941899129b3Smrg#end: func_cygpath
2942899129b3Smrg
2943899129b3Smrg
2944899129b3Smrg# func_convert_core_msys_to_w32 ARG
2945899129b3Smrg# Convert file name or path ARG from MSYS format to w32 format.  Return
2946899129b3Smrg# result in func_convert_core_msys_to_w32_result.
2947899129b3Smrgfunc_convert_core_msys_to_w32 ()
2948899129b3Smrg{
2949e6d2e958Smrg  $debug_cmd
2950e6d2e958Smrg
2951899129b3Smrg  # awkward: cmd appends spaces to result
2952899129b3Smrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
2953e6d2e958Smrg    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
2954899129b3Smrg}
2955899129b3Smrg#end: func_convert_core_msys_to_w32
2956899129b3Smrg
2957899129b3Smrg
2958899129b3Smrg# func_convert_file_check ARG1 ARG2
2959899129b3Smrg# Verify that ARG1 (a file name in $build format) was converted to $host
2960899129b3Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
2961899129b3Smrg# func_to_host_file_result to ARG1).
2962899129b3Smrgfunc_convert_file_check ()
2963899129b3Smrg{
2964e6d2e958Smrg  $debug_cmd
2965e6d2e958Smrg
2966e6d2e958Smrg  if test -z "$2" && test -n "$1"; then
2967899129b3Smrg    func_error "Could not determine host file name corresponding to"
2968e6d2e958Smrg    func_error "  '$1'"
2969899129b3Smrg    func_error "Continuing, but uninstalled executables may not work."
2970899129b3Smrg    # Fallback:
2971e6d2e958Smrg    func_to_host_file_result=$1
2972899129b3Smrg  fi
2973899129b3Smrg}
2974899129b3Smrg# end func_convert_file_check
2975899129b3Smrg
2976899129b3Smrg
2977899129b3Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
2978899129b3Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host
2979899129b3Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
2980899129b3Smrg# func_to_host_file_result to a simplistic fallback value (see below).
2981899129b3Smrgfunc_convert_path_check ()
2982899129b3Smrg{
2983e6d2e958Smrg  $debug_cmd
2984e6d2e958Smrg
2985899129b3Smrg  if test -z "$4" && test -n "$3"; then
2986899129b3Smrg    func_error "Could not determine the host path corresponding to"
2987e6d2e958Smrg    func_error "  '$3'"
2988899129b3Smrg    func_error "Continuing, but uninstalled executables may not work."
2989899129b3Smrg    # Fallback.  This is a deliberately simplistic "conversion" and
2990899129b3Smrg    # should not be "improved".  See libtool.info.
2991899129b3Smrg    if test "x$1" != "x$2"; then
2992899129b3Smrg      lt_replace_pathsep_chars="s|$1|$2|g"
2993899129b3Smrg      func_to_host_path_result=`echo "$3" |
2994899129b3Smrg        $SED -e "$lt_replace_pathsep_chars"`
2995899129b3Smrg    else
2996e6d2e958Smrg      func_to_host_path_result=$3
2997899129b3Smrg    fi
2998899129b3Smrg  fi
2999899129b3Smrg}
3000899129b3Smrg# end func_convert_path_check
3001899129b3Smrg
3002899129b3Smrg
3003899129b3Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
3004899129b3Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
3005899129b3Smrg# and appending REPL if ORIG matches BACKPAT.
3006899129b3Smrgfunc_convert_path_front_back_pathsep ()
3007899129b3Smrg{
3008e6d2e958Smrg  $debug_cmd
3009e6d2e958Smrg
3010899129b3Smrg  case $4 in
3011e6d2e958Smrg  $1 ) func_to_host_path_result=$3$func_to_host_path_result
3012899129b3Smrg    ;;
3013899129b3Smrg  esac
3014899129b3Smrg  case $4 in
3015899129b3Smrg  $2 ) func_append func_to_host_path_result "$3"
3016899129b3Smrg    ;;
3017899129b3Smrg  esac
3018899129b3Smrg}
3019899129b3Smrg# end func_convert_path_front_back_pathsep
3020899129b3Smrg
3021899129b3Smrg
3022899129b3Smrg##################################################
3023899129b3Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
3024899129b3Smrg##################################################
3025e6d2e958Smrg# invoked via '$to_host_file_cmd ARG'
3026899129b3Smrg#
3027899129b3Smrg# In each case, ARG is the path to be converted from $build to $host format.
3028899129b3Smrg# Result will be available in $func_to_host_file_result.
3029899129b3Smrg
3030899129b3Smrg
3031899129b3Smrg# func_to_host_file ARG
3032899129b3Smrg# Converts the file name ARG from $build format to $host format. Return result
3033899129b3Smrg# in func_to_host_file_result.
3034899129b3Smrgfunc_to_host_file ()
3035899129b3Smrg{
3036e6d2e958Smrg  $debug_cmd
3037e6d2e958Smrg
3038899129b3Smrg  $to_host_file_cmd "$1"
3039899129b3Smrg}
3040899129b3Smrg# end func_to_host_file
3041899129b3Smrg
3042899129b3Smrg
3043899129b3Smrg# func_to_tool_file ARG LAZY
3044899129b3Smrg# converts the file name ARG from $build format to toolchain format. Return
3045899129b3Smrg# result in func_to_tool_file_result.  If the conversion in use is listed
3046899129b3Smrg# in (the comma separated) LAZY, no conversion takes place.
3047899129b3Smrgfunc_to_tool_file ()
3048899129b3Smrg{
3049e6d2e958Smrg  $debug_cmd
3050e6d2e958Smrg
3051899129b3Smrg  case ,$2, in
3052899129b3Smrg    *,"$to_tool_file_cmd",*)
3053899129b3Smrg      func_to_tool_file_result=$1
3054899129b3Smrg      ;;
3055899129b3Smrg    *)
3056899129b3Smrg      $to_tool_file_cmd "$1"
3057899129b3Smrg      func_to_tool_file_result=$func_to_host_file_result
3058899129b3Smrg      ;;
3059899129b3Smrg  esac
3060899129b3Smrg}
3061899129b3Smrg# end func_to_tool_file
3062899129b3Smrg
3063899129b3Smrg
3064899129b3Smrg# func_convert_file_noop ARG
3065899129b3Smrg# Copy ARG to func_to_host_file_result.
3066899129b3Smrgfunc_convert_file_noop ()
3067899129b3Smrg{
3068e6d2e958Smrg  func_to_host_file_result=$1
3069899129b3Smrg}
3070899129b3Smrg# end func_convert_file_noop
3071899129b3Smrg
3072899129b3Smrg
3073899129b3Smrg# func_convert_file_msys_to_w32 ARG
3074899129b3Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
3075899129b3Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
3076899129b3Smrg# func_to_host_file_result.
3077899129b3Smrgfunc_convert_file_msys_to_w32 ()
3078899129b3Smrg{
3079e6d2e958Smrg  $debug_cmd
3080e6d2e958Smrg
3081e6d2e958Smrg  func_to_host_file_result=$1
3082899129b3Smrg  if test -n "$1"; then
3083899129b3Smrg    func_convert_core_msys_to_w32 "$1"
3084e6d2e958Smrg    func_to_host_file_result=$func_convert_core_msys_to_w32_result
3085899129b3Smrg  fi
3086899129b3Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3087899129b3Smrg}
3088899129b3Smrg# end func_convert_file_msys_to_w32
3089899129b3Smrg
3090899129b3Smrg
3091899129b3Smrg# func_convert_file_cygwin_to_w32 ARG
3092899129b3Smrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
3093899129b3Smrg# func_to_host_file_result.
3094899129b3Smrgfunc_convert_file_cygwin_to_w32 ()
3095899129b3Smrg{
3096e6d2e958Smrg  $debug_cmd
3097e6d2e958Smrg
3098e6d2e958Smrg  func_to_host_file_result=$1
3099899129b3Smrg  if test -n "$1"; then
3100899129b3Smrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
3101899129b3Smrg    # LT_CYGPATH in this case.
3102899129b3Smrg    func_to_host_file_result=`cygpath -m "$1"`
3103899129b3Smrg  fi
3104899129b3Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3105899129b3Smrg}
3106899129b3Smrg# end func_convert_file_cygwin_to_w32
3107899129b3Smrg
3108899129b3Smrg
3109899129b3Smrg# func_convert_file_nix_to_w32 ARG
3110899129b3Smrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
3111899129b3Smrg# and a working winepath. Returns result in func_to_host_file_result.
3112899129b3Smrgfunc_convert_file_nix_to_w32 ()
3113899129b3Smrg{
3114e6d2e958Smrg  $debug_cmd
3115e6d2e958Smrg
3116e6d2e958Smrg  func_to_host_file_result=$1
3117899129b3Smrg  if test -n "$1"; then
3118899129b3Smrg    func_convert_core_file_wine_to_w32 "$1"
3119e6d2e958Smrg    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
3120899129b3Smrg  fi
3121899129b3Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3122899129b3Smrg}
3123899129b3Smrg# end func_convert_file_nix_to_w32
3124899129b3Smrg
3125899129b3Smrg
3126899129b3Smrg# func_convert_file_msys_to_cygwin ARG
3127899129b3Smrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3128899129b3Smrg# Returns result in func_to_host_file_result.
3129899129b3Smrgfunc_convert_file_msys_to_cygwin ()
3130899129b3Smrg{
3131e6d2e958Smrg  $debug_cmd
3132e6d2e958Smrg
3133e6d2e958Smrg  func_to_host_file_result=$1
3134899129b3Smrg  if test -n "$1"; then
3135899129b3Smrg    func_convert_core_msys_to_w32 "$1"
3136899129b3Smrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
3137e6d2e958Smrg    func_to_host_file_result=$func_cygpath_result
3138899129b3Smrg  fi
3139899129b3Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3140899129b3Smrg}
3141899129b3Smrg# end func_convert_file_msys_to_cygwin
3142899129b3Smrg
3143899129b3Smrg
3144899129b3Smrg# func_convert_file_nix_to_cygwin ARG
3145899129b3Smrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
3146899129b3Smrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
3147899129b3Smrg# in func_to_host_file_result.
3148899129b3Smrgfunc_convert_file_nix_to_cygwin ()
3149899129b3Smrg{
3150e6d2e958Smrg  $debug_cmd
3151e6d2e958Smrg
3152e6d2e958Smrg  func_to_host_file_result=$1
3153899129b3Smrg  if test -n "$1"; then
3154899129b3Smrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
3155899129b3Smrg    func_convert_core_file_wine_to_w32 "$1"
3156899129b3Smrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
3157e6d2e958Smrg    func_to_host_file_result=$func_cygpath_result
3158899129b3Smrg  fi
3159899129b3Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3160899129b3Smrg}
3161899129b3Smrg# end func_convert_file_nix_to_cygwin
3162899129b3Smrg
3163899129b3Smrg
3164899129b3Smrg#############################################
3165899129b3Smrg# $build to $host PATH CONVERSION FUNCTIONS #
3166899129b3Smrg#############################################
3167e6d2e958Smrg# invoked via '$to_host_path_cmd ARG'
3168899129b3Smrg#
3169899129b3Smrg# In each case, ARG is the path to be converted from $build to $host format.
3170899129b3Smrg# The result will be available in $func_to_host_path_result.
3171899129b3Smrg#
3172899129b3Smrg# Path separators are also converted from $build format to $host format.  If
3173899129b3Smrg# ARG begins or ends with a path separator character, it is preserved (but
3174899129b3Smrg# converted to $host format) on output.
3175899129b3Smrg#
3176899129b3Smrg# All path conversion functions are named using the following convention:
3177899129b3Smrg#   file name conversion function    : func_convert_file_X_to_Y ()
3178899129b3Smrg#   path conversion function         : func_convert_path_X_to_Y ()
3179899129b3Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the
3180899129b3Smrg# same.  If conversion functions are added for new $build/$host combinations,
3181899129b3Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
3182899129b3Smrg# will break.
3183899129b3Smrg
3184899129b3Smrg
3185899129b3Smrg# func_init_to_host_path_cmd
3186899129b3Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
3187899129b3Smrg# appropriate value, based on the value of $to_host_file_cmd.
3188899129b3Smrgto_host_path_cmd=
3189899129b3Smrgfunc_init_to_host_path_cmd ()
3190899129b3Smrg{
3191e6d2e958Smrg  $debug_cmd
3192e6d2e958Smrg
3193899129b3Smrg  if test -z "$to_host_path_cmd"; then
3194899129b3Smrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
3195e6d2e958Smrg    to_host_path_cmd=func_convert_path_$func_stripname_result
3196899129b3Smrg  fi
3197899129b3Smrg}
3198899129b3Smrg
3199899129b3Smrg
3200899129b3Smrg# func_to_host_path ARG
3201899129b3Smrg# Converts the path ARG from $build format to $host format. Return result
3202899129b3Smrg# in func_to_host_path_result.
3203899129b3Smrgfunc_to_host_path ()
3204899129b3Smrg{
3205e6d2e958Smrg  $debug_cmd
3206e6d2e958Smrg
3207899129b3Smrg  func_init_to_host_path_cmd
3208899129b3Smrg  $to_host_path_cmd "$1"
3209899129b3Smrg}
3210899129b3Smrg# end func_to_host_path
3211899129b3Smrg
3212899129b3Smrg
3213899129b3Smrg# func_convert_path_noop ARG
3214899129b3Smrg# Copy ARG to func_to_host_path_result.
3215899129b3Smrgfunc_convert_path_noop ()
3216899129b3Smrg{
3217e6d2e958Smrg  func_to_host_path_result=$1
3218899129b3Smrg}
3219899129b3Smrg# end func_convert_path_noop
3220899129b3Smrg
3221899129b3Smrg
3222899129b3Smrg# func_convert_path_msys_to_w32 ARG
3223899129b3Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
3224899129b3Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
3225899129b3Smrg# func_to_host_path_result.
3226899129b3Smrgfunc_convert_path_msys_to_w32 ()
3227899129b3Smrg{
3228e6d2e958Smrg  $debug_cmd
3229e6d2e958Smrg
3230e6d2e958Smrg  func_to_host_path_result=$1
3231899129b3Smrg  if test -n "$1"; then
3232899129b3Smrg    # Remove leading and trailing path separator characters from ARG.  MSYS
3233899129b3Smrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
3234899129b3Smrg    # and winepath ignores them completely.
3235899129b3Smrg    func_stripname : : "$1"
3236899129b3Smrg    func_to_host_path_tmp1=$func_stripname_result
3237899129b3Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3238e6d2e958Smrg    func_to_host_path_result=$func_convert_core_msys_to_w32_result
3239899129b3Smrg    func_convert_path_check : ";" \
3240899129b3Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3241899129b3Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3242899129b3Smrg  fi
3243899129b3Smrg}
3244899129b3Smrg# end func_convert_path_msys_to_w32
3245899129b3Smrg
3246899129b3Smrg
3247899129b3Smrg# func_convert_path_cygwin_to_w32 ARG
3248899129b3Smrg# Convert path ARG from Cygwin to w32 format.  Returns result in
3249899129b3Smrg# func_to_host_file_result.
3250899129b3Smrgfunc_convert_path_cygwin_to_w32 ()
3251899129b3Smrg{
3252e6d2e958Smrg  $debug_cmd
3253e6d2e958Smrg
3254e6d2e958Smrg  func_to_host_path_result=$1
3255899129b3Smrg  if test -n "$1"; then
3256899129b3Smrg    # See func_convert_path_msys_to_w32:
3257899129b3Smrg    func_stripname : : "$1"
3258899129b3Smrg    func_to_host_path_tmp1=$func_stripname_result
3259899129b3Smrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
3260899129b3Smrg    func_convert_path_check : ";" \
3261899129b3Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3262899129b3Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3263899129b3Smrg  fi
3264899129b3Smrg}
3265899129b3Smrg# end func_convert_path_cygwin_to_w32
3266899129b3Smrg
3267899129b3Smrg
3268899129b3Smrg# func_convert_path_nix_to_w32 ARG
3269899129b3Smrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
3270899129b3Smrg# a working winepath.  Returns result in func_to_host_file_result.
3271899129b3Smrgfunc_convert_path_nix_to_w32 ()
327247e89262Smrg{
3273e6d2e958Smrg  $debug_cmd
3274e6d2e958Smrg
3275e6d2e958Smrg  func_to_host_path_result=$1
3276899129b3Smrg  if test -n "$1"; then
3277899129b3Smrg    # See func_convert_path_msys_to_w32:
3278899129b3Smrg    func_stripname : : "$1"
3279899129b3Smrg    func_to_host_path_tmp1=$func_stripname_result
3280899129b3Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3281e6d2e958Smrg    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
3282899129b3Smrg    func_convert_path_check : ";" \
3283899129b3Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3284899129b3Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3285899129b3Smrg  fi
3286899129b3Smrg}
3287899129b3Smrg# end func_convert_path_nix_to_w32
328847e89262Smrg
328947e89262Smrg
3290899129b3Smrg# func_convert_path_msys_to_cygwin ARG
3291899129b3Smrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3292899129b3Smrg# Returns result in func_to_host_file_result.
3293899129b3Smrgfunc_convert_path_msys_to_cygwin ()
3294899129b3Smrg{
3295e6d2e958Smrg  $debug_cmd
3296e6d2e958Smrg
3297e6d2e958Smrg  func_to_host_path_result=$1
3298899129b3Smrg  if test -n "$1"; then
3299899129b3Smrg    # See func_convert_path_msys_to_w32:
3300899129b3Smrg    func_stripname : : "$1"
3301899129b3Smrg    func_to_host_path_tmp1=$func_stripname_result
3302899129b3Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3303899129b3Smrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
3304e6d2e958Smrg    func_to_host_path_result=$func_cygpath_result
3305899129b3Smrg    func_convert_path_check : : \
3306899129b3Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3307899129b3Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3308899129b3Smrg  fi
3309899129b3Smrg}
3310899129b3Smrg# end func_convert_path_msys_to_cygwin
331147e89262Smrg
331247e89262Smrg
3313899129b3Smrg# func_convert_path_nix_to_cygwin ARG
3314899129b3Smrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
3315899129b3Smrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
3316899129b3Smrg# func_to_host_file_result.
3317899129b3Smrgfunc_convert_path_nix_to_cygwin ()
3318899129b3Smrg{
3319e6d2e958Smrg  $debug_cmd
3320e6d2e958Smrg
3321e6d2e958Smrg  func_to_host_path_result=$1
3322899129b3Smrg  if test -n "$1"; then
3323899129b3Smrg    # Remove leading and trailing path separator characters from
3324899129b3Smrg    # ARG. msys behavior is inconsistent here, cygpath turns them
3325899129b3Smrg    # into '.;' and ';.', and winepath ignores them completely.
3326899129b3Smrg    func_stripname : : "$1"
3327899129b3Smrg    func_to_host_path_tmp1=$func_stripname_result
3328899129b3Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3329899129b3Smrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
3330e6d2e958Smrg    func_to_host_path_result=$func_cygpath_result
3331899129b3Smrg    func_convert_path_check : : \
3332899129b3Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3333899129b3Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3334899129b3Smrg  fi
333547e89262Smrg}
3336899129b3Smrg# end func_convert_path_nix_to_cygwin
3337899129b3Smrg
333847e89262Smrg
3339e6d2e958Smrg# func_dll_def_p FILE
3340e6d2e958Smrg# True iff FILE is a Windows DLL '.def' file.
3341e6d2e958Smrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4
3342e6d2e958Smrgfunc_dll_def_p ()
3343e6d2e958Smrg{
3344e6d2e958Smrg  $debug_cmd
3345e6d2e958Smrg
3346e6d2e958Smrg  func_dll_def_p_tmp=`$SED -n \
3347e6d2e958Smrg    -e 's/^[	 ]*//' \
3348e6d2e958Smrg    -e '/^\(;.*\)*$/d' \
3349e6d2e958Smrg    -e 's/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p' \
3350e6d2e958Smrg    -e q \
3351e6d2e958Smrg    "$1"`
3352e6d2e958Smrg  test DEF = "$func_dll_def_p_tmp"
3353e6d2e958Smrg}
3354e6d2e958Smrg
3355e6d2e958Smrg
335647e89262Smrg# func_mode_compile arg...
335747e89262Smrgfunc_mode_compile ()
335847e89262Smrg{
3359e6d2e958Smrg    $debug_cmd
3360e6d2e958Smrg
336147e89262Smrg    # Get the compilation command and the source file.
336247e89262Smrg    base_compile=
3363e6d2e958Smrg    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
336447e89262Smrg    suppress_opt=yes
336547e89262Smrg    suppress_output=
336647e89262Smrg    arg_mode=normal
336747e89262Smrg    libobj=
336847e89262Smrg    later=
336947e89262Smrg    pie_flag=
337047e89262Smrg
337147e89262Smrg    for arg
337247e89262Smrg    do
337347e89262Smrg      case $arg_mode in
337447e89262Smrg      arg  )
337547e89262Smrg	# do not "continue".  Instead, add this to base_compile
3376e6d2e958Smrg	lastarg=$arg
337747e89262Smrg	arg_mode=normal
337847e89262Smrg	;;
337947e89262Smrg
338047e89262Smrg      target )
3381e6d2e958Smrg	libobj=$arg
338247e89262Smrg	arg_mode=normal
338347e89262Smrg	continue
338447e89262Smrg	;;
338547e89262Smrg
338647e89262Smrg      normal )
338747e89262Smrg	# Accept any command-line options.
338847e89262Smrg	case $arg in
338947e89262Smrg	-o)
339047e89262Smrg	  test -n "$libobj" && \
3391e6d2e958Smrg	    func_fatal_error "you cannot specify '-o' more than once"
339247e89262Smrg	  arg_mode=target
339347e89262Smrg	  continue
339447e89262Smrg	  ;;
339547e89262Smrg
339647e89262Smrg	-pie | -fpie | -fPIE)
3397899129b3Smrg          func_append pie_flag " $arg"
339847e89262Smrg	  continue
339947e89262Smrg	  ;;
340047e89262Smrg
340147e89262Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
3402899129b3Smrg	  func_append later " $arg"
340347e89262Smrg	  continue
340447e89262Smrg	  ;;
3405bd1da9d7Smrg
3406bd1da9d7Smrg	-no-suppress)
3407bd1da9d7Smrg	  suppress_opt=no
3408bd1da9d7Smrg	  continue
3409bd1da9d7Smrg	  ;;
3410bd1da9d7Smrg
3411bd1da9d7Smrg	-Xcompiler)
3412bd1da9d7Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
3413bd1da9d7Smrg	  continue      #  The current "srcfile" will either be retained or
3414bd1da9d7Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
3415bd1da9d7Smrg
3416bd1da9d7Smrg	-Wc,*)
341747e89262Smrg	  func_stripname '-Wc,' '' "$arg"
341847e89262Smrg	  args=$func_stripname_result
3419bd1da9d7Smrg	  lastarg=
3420e6d2e958Smrg	  save_ifs=$IFS; IFS=,
342147e89262Smrg	  for arg in $args; do
3422e6d2e958Smrg	    IFS=$save_ifs
3423899129b3Smrg	    func_append_quoted lastarg "$arg"
3424bd1da9d7Smrg	  done
3425e6d2e958Smrg	  IFS=$save_ifs
342647e89262Smrg	  func_stripname ' ' '' "$lastarg"
342747e89262Smrg	  lastarg=$func_stripname_result
3428bd1da9d7Smrg
3429bd1da9d7Smrg	  # Add the arguments to base_compile.
3430899129b3Smrg	  func_append base_compile " $lastarg"
3431bd1da9d7Smrg	  continue
3432bd1da9d7Smrg	  ;;
3433bd1da9d7Smrg
343447e89262Smrg	*)
3435bd1da9d7Smrg	  # Accept the current argument as the source file.
3436bd1da9d7Smrg	  # The previous "srcfile" becomes the current argument.
3437bd1da9d7Smrg	  #
3438e6d2e958Smrg	  lastarg=$srcfile
3439e6d2e958Smrg	  srcfile=$arg
3440bd1da9d7Smrg	  ;;
3441bd1da9d7Smrg	esac  #  case $arg
3442bd1da9d7Smrg	;;
3443bd1da9d7Smrg      esac    #  case $arg_mode
3444bd1da9d7Smrg
3445bd1da9d7Smrg      # Aesthetically quote the previous argument.
3446899129b3Smrg      func_append_quoted base_compile "$lastarg"
3447bd1da9d7Smrg    done # for arg
3448bd1da9d7Smrg
3449bd1da9d7Smrg    case $arg_mode in
3450bd1da9d7Smrg    arg)
345147e89262Smrg      func_fatal_error "you must specify an argument for -Xcompile"
3452bd1da9d7Smrg      ;;
3453bd1da9d7Smrg    target)
3454e6d2e958Smrg      func_fatal_error "you must specify a target with '-o'"
3455bd1da9d7Smrg      ;;
3456bd1da9d7Smrg    *)
3457bd1da9d7Smrg      # Get the name of the library object.
345847e89262Smrg      test -z "$libobj" && {
345947e89262Smrg	func_basename "$srcfile"
3460e6d2e958Smrg	libobj=$func_basename_result
346147e89262Smrg      }
3462bd1da9d7Smrg      ;;
3463bd1da9d7Smrg    esac
3464bd1da9d7Smrg
3465bd1da9d7Smrg    # Recognize several different file suffixes.
3466bd1da9d7Smrg    # If the user specifies -o file.o, it is replaced with file.lo
3467bd1da9d7Smrg    case $libobj in
346847e89262Smrg    *.[cCFSifmso] | \
346947e89262Smrg    *.ada | *.adb | *.ads | *.asm | \
347047e89262Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
3471899129b3Smrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
347247e89262Smrg      func_xform "$libobj"
347347e89262Smrg      libobj=$func_xform_result
347447e89262Smrg      ;;
3475bd1da9d7Smrg    esac
3476bd1da9d7Smrg
3477bd1da9d7Smrg    case $libobj in
347847e89262Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
3479bd1da9d7Smrg    *)
3480e6d2e958Smrg      func_fatal_error "cannot determine name of library object from '$libobj'"
3481bd1da9d7Smrg      ;;
3482bd1da9d7Smrg    esac
3483bd1da9d7Smrg
3484bd1da9d7Smrg    func_infer_tag $base_compile
3485bd1da9d7Smrg
3486bd1da9d7Smrg    for arg in $later; do
3487bd1da9d7Smrg      case $arg in
348847e89262Smrg      -shared)
3489e6d2e958Smrg	test yes = "$build_libtool_libs" \
3490e6d2e958Smrg	  || func_fatal_configuration "cannot build a shared library"
349147e89262Smrg	build_old_libs=no
349247e89262Smrg	continue
349347e89262Smrg	;;
349447e89262Smrg
3495bd1da9d7Smrg      -static)
349647e89262Smrg	build_libtool_libs=no
3497bd1da9d7Smrg	build_old_libs=yes
3498bd1da9d7Smrg	continue
3499bd1da9d7Smrg	;;
3500bd1da9d7Smrg
3501bd1da9d7Smrg      -prefer-pic)
3502bd1da9d7Smrg	pic_mode=yes
3503bd1da9d7Smrg	continue
3504bd1da9d7Smrg	;;
3505bd1da9d7Smrg
3506bd1da9d7Smrg      -prefer-non-pic)
3507bd1da9d7Smrg	pic_mode=no
3508bd1da9d7Smrg	continue
3509bd1da9d7Smrg	;;
3510bd1da9d7Smrg      esac
3511bd1da9d7Smrg    done
3512bd1da9d7Smrg
351347e89262Smrg    func_quote_for_eval "$libobj"
351447e89262Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
351547e89262Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
3516e6d2e958Smrg      && func_warning "libobj name '$libobj' may not contain shell special characters."
351747e89262Smrg    func_dirname_and_basename "$obj" "/" ""
3518e6d2e958Smrg    objname=$func_basename_result
3519e6d2e958Smrg    xdir=$func_dirname_result
3520e6d2e958Smrg    lobj=$xdir$objdir/$objname
3521bd1da9d7Smrg
352247e89262Smrg    test -z "$base_compile" && \
352347e89262Smrg      func_fatal_help "you must specify a compilation command"
3524bd1da9d7Smrg
3525bd1da9d7Smrg    # Delete any leftover library objects.
3526e6d2e958Smrg    if test yes = "$build_old_libs"; then
3527bd1da9d7Smrg      removelist="$obj $lobj $libobj ${libobj}T"
3528bd1da9d7Smrg    else
3529bd1da9d7Smrg      removelist="$lobj $libobj ${libobj}T"
3530bd1da9d7Smrg    fi
3531bd1da9d7Smrg
3532bd1da9d7Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
3533bd1da9d7Smrg    case $host_os in
353447e89262Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
3535bd1da9d7Smrg      pic_mode=default
3536bd1da9d7Smrg      ;;
3537bd1da9d7Smrg    esac
3538e6d2e958Smrg    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
3539bd1da9d7Smrg      # non-PIC code in shared libraries is not supported
3540bd1da9d7Smrg      pic_mode=default
3541bd1da9d7Smrg    fi
3542bd1da9d7Smrg
3543bd1da9d7Smrg    # Calculate the filename of the output object if compiler does
3544bd1da9d7Smrg    # not support -o with -c
3545e6d2e958Smrg    if test no = "$compiler_c_o"; then
3546e6d2e958Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
3547e6d2e958Smrg      lockfile=$output_obj.lock
3548bd1da9d7Smrg    else
3549bd1da9d7Smrg      output_obj=
3550bd1da9d7Smrg      need_locks=no
3551bd1da9d7Smrg      lockfile=
3552bd1da9d7Smrg    fi
3553bd1da9d7Smrg
3554bd1da9d7Smrg    # Lock this critical section if it is needed
3555bd1da9d7Smrg    # We use this script file to make the link, it avoids creating a new file
3556e6d2e958Smrg    if test yes = "$need_locks"; then
355747e89262Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
355847e89262Smrg	func_echo "Waiting for $lockfile to be removed"
3559bd1da9d7Smrg	sleep 2
3560bd1da9d7Smrg      done
3561e6d2e958Smrg    elif test warn = "$need_locks"; then
3562bd1da9d7Smrg      if test -f "$lockfile"; then
356347e89262Smrg	$ECHO "\
3564bd1da9d7Smrg*** ERROR, $lockfile exists and contains:
3565bd1da9d7Smrg`cat $lockfile 2>/dev/null`
3566bd1da9d7Smrg
3567bd1da9d7SmrgThis indicates that another process is trying to use the same
3568bd1da9d7Smrgtemporary object file, and libtool could not work around it because
3569e6d2e958Smrgyour compiler does not support '-c' and '-o' together.  If you
3570bd1da9d7Smrgrepeat this compilation, it may succeed, by chance, but you had better
3571bd1da9d7Smrgavoid parallel builds (make -j) in this platform, or get a better
3572bd1da9d7Smrgcompiler."
3573bd1da9d7Smrg
357447e89262Smrg	$opt_dry_run || $RM $removelist
3575bd1da9d7Smrg	exit $EXIT_FAILURE
3576bd1da9d7Smrg      fi
3577899129b3Smrg      func_append removelist " $output_obj"
357847e89262Smrg      $ECHO "$srcfile" > "$lockfile"
3579bd1da9d7Smrg    fi
3580bd1da9d7Smrg
358147e89262Smrg    $opt_dry_run || $RM $removelist
3582899129b3Smrg    func_append removelist " $lockfile"
358347e89262Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
358447e89262Smrg
3585899129b3Smrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
3586899129b3Smrg    srcfile=$func_to_tool_file_result
358747e89262Smrg    func_quote_for_eval "$srcfile"
358847e89262Smrg    qsrcfile=$func_quote_for_eval_result
3589bd1da9d7Smrg
3590bd1da9d7Smrg    # Only build a PIC object if we are building libtool libraries.
3591e6d2e958Smrg    if test yes = "$build_libtool_libs"; then
3592bd1da9d7Smrg      # Without this assignment, base_compile gets emptied.
3593bd1da9d7Smrg      fbsd_hideous_sh_bug=$base_compile
3594bd1da9d7Smrg
3595e6d2e958Smrg      if test no != "$pic_mode"; then
3596bd1da9d7Smrg	command="$base_compile $qsrcfile $pic_flag"
3597bd1da9d7Smrg      else
3598bd1da9d7Smrg	# Don't build PIC code
3599bd1da9d7Smrg	command="$base_compile $qsrcfile"
3600bd1da9d7Smrg      fi
3601bd1da9d7Smrg
360247e89262Smrg      func_mkdir_p "$xdir$objdir"
3603bd1da9d7Smrg
3604bd1da9d7Smrg      if test -z "$output_obj"; then
3605bd1da9d7Smrg	# Place PIC objects in $objdir
3606899129b3Smrg	func_append command " -o $lobj"
3607bd1da9d7Smrg      fi
3608bd1da9d7Smrg
360947e89262Smrg      func_show_eval_locale "$command"	\
361047e89262Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
3611bd1da9d7Smrg
3612e6d2e958Smrg      if test warn = "$need_locks" &&
3613bd1da9d7Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
361447e89262Smrg	$ECHO "\
3615bd1da9d7Smrg*** ERROR, $lockfile contains:
3616bd1da9d7Smrg`cat $lockfile 2>/dev/null`
3617bd1da9d7Smrg
3618bd1da9d7Smrgbut it should contain:
3619bd1da9d7Smrg$srcfile
3620bd1da9d7Smrg
3621bd1da9d7SmrgThis indicates that another process is trying to use the same
3622bd1da9d7Smrgtemporary object file, and libtool could not work around it because
3623e6d2e958Smrgyour compiler does not support '-c' and '-o' together.  If you
3624bd1da9d7Smrgrepeat this compilation, it may succeed, by chance, but you had better
3625bd1da9d7Smrgavoid parallel builds (make -j) in this platform, or get a better
3626bd1da9d7Smrgcompiler."
3627bd1da9d7Smrg
362847e89262Smrg	$opt_dry_run || $RM $removelist
3629bd1da9d7Smrg	exit $EXIT_FAILURE
3630bd1da9d7Smrg      fi
3631bd1da9d7Smrg
3632bd1da9d7Smrg      # Just move the object if needed, then go on to compile the next one
3633bd1da9d7Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
363447e89262Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
363547e89262Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3636bd1da9d7Smrg      fi
3637bd1da9d7Smrg
3638bd1da9d7Smrg      # Allow error messages only from the first compilation.
3639e6d2e958Smrg      if test yes = "$suppress_opt"; then
364047e89262Smrg	suppress_output=' >/dev/null 2>&1'
3641bd1da9d7Smrg      fi
3642bd1da9d7Smrg    fi
3643bd1da9d7Smrg
3644bd1da9d7Smrg    # Only build a position-dependent object if we build old libraries.
3645e6d2e958Smrg    if test yes = "$build_old_libs"; then
3646e6d2e958Smrg      if test yes != "$pic_mode"; then
3647bd1da9d7Smrg	# Don't build PIC code
364847e89262Smrg	command="$base_compile $qsrcfile$pie_flag"
3649bd1da9d7Smrg      else
3650bd1da9d7Smrg	command="$base_compile $qsrcfile $pic_flag"
3651bd1da9d7Smrg      fi
3652e6d2e958Smrg      if test yes = "$compiler_c_o"; then
3653899129b3Smrg	func_append command " -o $obj"
3654bd1da9d7Smrg      fi
3655bd1da9d7Smrg
3656bd1da9d7Smrg      # Suppress compiler output if we already did a PIC compilation.
3657899129b3Smrg      func_append command "$suppress_output"
365847e89262Smrg      func_show_eval_locale "$command" \
365947e89262Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
3660bd1da9d7Smrg
3661e6d2e958Smrg      if test warn = "$need_locks" &&
3662bd1da9d7Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
366347e89262Smrg	$ECHO "\
3664bd1da9d7Smrg*** ERROR, $lockfile contains:
3665bd1da9d7Smrg`cat $lockfile 2>/dev/null`
3666bd1da9d7Smrg
3667bd1da9d7Smrgbut it should contain:
3668bd1da9d7Smrg$srcfile
3669bd1da9d7Smrg
3670bd1da9d7SmrgThis indicates that another process is trying to use the same
3671bd1da9d7Smrgtemporary object file, and libtool could not work around it because
3672e6d2e958Smrgyour compiler does not support '-c' and '-o' together.  If you
3673bd1da9d7Smrgrepeat this compilation, it may succeed, by chance, but you had better
3674bd1da9d7Smrgavoid parallel builds (make -j) in this platform, or get a better
3675bd1da9d7Smrgcompiler."
3676bd1da9d7Smrg
367747e89262Smrg	$opt_dry_run || $RM $removelist
3678bd1da9d7Smrg	exit $EXIT_FAILURE
3679bd1da9d7Smrg      fi
3680bd1da9d7Smrg
3681bd1da9d7Smrg      # Just move the object if needed
3682bd1da9d7Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
368347e89262Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
368447e89262Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3685bd1da9d7Smrg      fi
3686bd1da9d7Smrg    fi
3687bd1da9d7Smrg
368847e89262Smrg    $opt_dry_run || {
368947e89262Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
3690bd1da9d7Smrg
369147e89262Smrg      # Unlock the critical section if it was locked
3692e6d2e958Smrg      if test no != "$need_locks"; then
369347e89262Smrg	removelist=$lockfile
369447e89262Smrg        $RM "$lockfile"
369547e89262Smrg      fi
369647e89262Smrg    }
3697bd1da9d7Smrg
3698bd1da9d7Smrg    exit $EXIT_SUCCESS
369947e89262Smrg}
3700bd1da9d7Smrg
370147e89262Smrg$opt_help || {
3702e6d2e958Smrg  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
370347e89262Smrg}
3704bd1da9d7Smrg
370547e89262Smrgfunc_mode_help ()
370647e89262Smrg{
370747e89262Smrg    # We need to display help for each of the modes.
3708899129b3Smrg    case $opt_mode in
370947e89262Smrg      "")
371047e89262Smrg        # Generic help is extracted from the usage comments
371147e89262Smrg        # at the start of this file.
371247e89262Smrg        func_help
371347e89262Smrg        ;;
3714bd1da9d7Smrg
371547e89262Smrg      clean)
371647e89262Smrg        $ECHO \
371747e89262Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
3718bd1da9d7Smrg
371947e89262SmrgRemove files from the build directory.
3720bd1da9d7Smrg
372147e89262SmrgRM is the name of the program to use to delete files associated with each FILE
3722e6d2e958Smrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
372347e89262Smrgto RM.
3724bd1da9d7Smrg
372547e89262SmrgIf FILE is a libtool library, object or program, all the files associated
372647e89262Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
372747e89262Smrg        ;;
3728bd1da9d7Smrg
372947e89262Smrg      compile)
373047e89262Smrg      $ECHO \
373147e89262Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
3732bd1da9d7Smrg
373347e89262SmrgCompile a source file into a libtool library object.
3734bd1da9d7Smrg
373547e89262SmrgThis mode accepts the following additional options:
3736bd1da9d7Smrg
373747e89262Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
373847e89262Smrg  -no-suppress      do not suppress compiler output for multiple passes
373947e89262Smrg  -prefer-pic       try to build PIC objects only
374047e89262Smrg  -prefer-non-pic   try to build non-PIC objects only
3741e6d2e958Smrg  -shared           do not build a '.o' file suitable for static linking
3742e6d2e958Smrg  -static           only build a '.o' file suitable for static linking
374347e89262Smrg  -Wc,FLAG          pass FLAG directly to the compiler
3744bd1da9d7Smrg
3745e6d2e958SmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file
374647e89262Smrgfrom the given SOURCEFILE.
3747bd1da9d7Smrg
374847e89262SmrgThe output file name is determined by removing the directory component from
3749e6d2e958SmrgSOURCEFILE, then substituting the C source code suffix '.c' with the
3750e6d2e958Smrglibrary object suffix, '.lo'."
375147e89262Smrg        ;;
3752bd1da9d7Smrg
375347e89262Smrg      execute)
375447e89262Smrg        $ECHO \
375547e89262Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
3756bd1da9d7Smrg
375747e89262SmrgAutomatically set library path, then run a program.
3758bd1da9d7Smrg
375947e89262SmrgThis mode accepts the following additional options:
3760bd1da9d7Smrg
376147e89262Smrg  -dlopen FILE      add the directory containing FILE to the library path
3762bd1da9d7Smrg
3763e6d2e958SmrgThis mode sets the library path environment variable according to '-dlopen'
376447e89262Smrgflags.
3765bd1da9d7Smrg
376647e89262SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
376747e89262Smrginto their corresponding uninstalled binary, and any of their required library
376847e89262Smrgdirectories are added to the library path.
3769bd1da9d7Smrg
377047e89262SmrgThen, COMMAND is executed, with ARGS as arguments."
377147e89262Smrg        ;;
3772bd1da9d7Smrg
377347e89262Smrg      finish)
377447e89262Smrg        $ECHO \
377547e89262Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
3776bd1da9d7Smrg
377747e89262SmrgComplete the installation of libtool libraries.
3778bd1da9d7Smrg
377947e89262SmrgEach LIBDIR is a directory that contains libtool libraries.
3780bd1da9d7Smrg
378147e89262SmrgThe commands that this mode executes may require superuser privileges.  Use
3782e6d2e958Smrgthe '--dry-run' option if you just want to see what would be executed."
378347e89262Smrg        ;;
3784bd1da9d7Smrg
378547e89262Smrg      install)
378647e89262Smrg        $ECHO \
378747e89262Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
3788bd1da9d7Smrg
378947e89262SmrgInstall executables or libraries.
3790bd1da9d7Smrg
379147e89262SmrgINSTALL-COMMAND is the installation command.  The first component should be
3792e6d2e958Smrgeither the 'install' or 'cp' program.
3793bd1da9d7Smrg
379447e89262SmrgThe following components of INSTALL-COMMAND are treated specially:
3795bd1da9d7Smrg
379647e89262Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
3797bd1da9d7Smrg
379847e89262SmrgThe rest of the components are interpreted as arguments to that command (only
379947e89262SmrgBSD-compatible install options are recognized)."
380047e89262Smrg        ;;
3801bd1da9d7Smrg
380247e89262Smrg      link)
380347e89262Smrg        $ECHO \
380447e89262Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
3805bd1da9d7Smrg
380647e89262SmrgLink object files or libraries together to form another library, or to
380747e89262Smrgcreate an executable program.
3808bd1da9d7Smrg
380947e89262SmrgLINK-COMMAND is a command using the C compiler that you would use to create
381047e89262Smrga program from several object files.
3811bd1da9d7Smrg
381247e89262SmrgThe following components of LINK-COMMAND are treated specially:
3813bd1da9d7Smrg
381447e89262Smrg  -all-static       do not do any dynamic linking at all
381547e89262Smrg  -avoid-version    do not add a version suffix if possible
381647e89262Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
381747e89262Smrg                    libraries must be found in the PATH setting at runtime)
3818e6d2e958Smrg  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
381947e89262Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
382047e89262Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
382147e89262Smrg  -export-symbols SYMFILE
382247e89262Smrg                    try to export only the symbols listed in SYMFILE
382347e89262Smrg  -export-symbols-regex REGEX
382447e89262Smrg                    try to export only the symbols matching REGEX
382547e89262Smrg  -LLIBDIR          search LIBDIR for required installed libraries
382647e89262Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
382747e89262Smrg  -module           build a library that can dlopened
382847e89262Smrg  -no-fast-install  disable the fast-install mode
382947e89262Smrg  -no-install       link a not-installable executable
383047e89262Smrg  -no-undefined     declare that a library does not refer to external symbols
383147e89262Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
3832e6d2e958Smrg  -objectlist FILE  use a list of object files found in FILE to specify objects
3833e6d2e958Smrg  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
383447e89262Smrg  -precious-files-regex REGEX
383547e89262Smrg                    don't remove output files matching REGEX
383647e89262Smrg  -release RELEASE  specify package release information
383747e89262Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
383847e89262Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
383947e89262Smrg  -shared           only do dynamic linking of libtool libraries
384047e89262Smrg  -shrext SUFFIX    override the standard shared library file extension
384147e89262Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
384247e89262Smrg  -static-libtool-libs
384347e89262Smrg                    do not do any dynamic linking of libtool libraries
384447e89262Smrg  -version-info CURRENT[:REVISION[:AGE]]
384547e89262Smrg                    specify library version info [each variable defaults to 0]
384647e89262Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
384747e89262Smrg  -Wc,FLAG
384847e89262Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
384947e89262Smrg  -Wl,FLAG
385047e89262Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
385147e89262Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
3852bd1da9d7Smrg
3853e6d2e958SmrgAll other options (arguments beginning with '-') are ignored.
3854bd1da9d7Smrg
3855e6d2e958SmrgEvery other argument is treated as a filename.  Files ending in '.la' are
385647e89262Smrgtreated as uninstalled libtool libraries, other files are standard or library
385747e89262Smrgobject files.
3858bd1da9d7Smrg
3859e6d2e958SmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created,
3860e6d2e958Smrgonly library objects ('.lo' files) may be specified, and '-rpath' is
386147e89262Smrgrequired, except when creating a convenience library.
3862bd1da9d7Smrg
3863e6d2e958SmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
3864e6d2e958Smrgusing 'ar' and 'ranlib', or on Windows using 'lib'.
38655bcb6992Smrg
3866e6d2e958SmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
386747e89262Smrgis created, otherwise an executable program is created."
386847e89262Smrg        ;;
3869bd1da9d7Smrg
387047e89262Smrg      uninstall)
387147e89262Smrg        $ECHO \
387247e89262Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
3873bd1da9d7Smrg
387447e89262SmrgRemove libraries from an installation directory.
3875bd1da9d7Smrg
387647e89262SmrgRM is the name of the program to use to delete files associated with each FILE
3877e6d2e958Smrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
387847e89262Smrgto RM.
3879bd1da9d7Smrg
388047e89262SmrgIf FILE is a libtool library, all the files associated with it are deleted.
388147e89262SmrgOtherwise, only FILE itself is deleted using RM."
388247e89262Smrg        ;;
3883bd1da9d7Smrg
388447e89262Smrg      *)
3885e6d2e958Smrg        func_fatal_help "invalid operation mode '$opt_mode'"
388647e89262Smrg        ;;
388747e89262Smrg    esac
3888bd1da9d7Smrg
388947e89262Smrg    echo
3890e6d2e958Smrg    $ECHO "Try '$progname --help' for more information about other modes."
389147e89262Smrg}
3892bd1da9d7Smrg
389347e89262Smrg# Now that we've collected a possible --mode arg, show help if necessary
389447e89262Smrgif $opt_help; then
3895e6d2e958Smrg  if test : = "$opt_help"; then
389647e89262Smrg    func_mode_help
389747e89262Smrg  else
389847e89262Smrg    {
389947e89262Smrg      func_help noexit
3900899129b3Smrg      for opt_mode in compile link execute install finish uninstall clean; do
390147e89262Smrg	func_mode_help
390247e89262Smrg      done
3903e6d2e958Smrg    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
390447e89262Smrg    {
390547e89262Smrg      func_help noexit
3906899129b3Smrg      for opt_mode in compile link execute install finish uninstall clean; do
390747e89262Smrg	echo
390847e89262Smrg	func_mode_help
390947e89262Smrg      done
391047e89262Smrg    } |
3911e6d2e958Smrg    $SED '1d
391247e89262Smrg      /^When reporting/,/^Report/{
391347e89262Smrg	H
391447e89262Smrg	d
391547e89262Smrg      }
391647e89262Smrg      $x
391747e89262Smrg      /information about other modes/d
391847e89262Smrg      /more detailed .*MODE/d
391947e89262Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
392047e89262Smrg  fi
392147e89262Smrg  exit $?
392247e89262Smrgfi
3923bd1da9d7Smrg
3924bd1da9d7Smrg
392547e89262Smrg# func_mode_execute arg...
392647e89262Smrgfunc_mode_execute ()
392747e89262Smrg{
3928e6d2e958Smrg    $debug_cmd
3929e6d2e958Smrg
393047e89262Smrg    # The first argument is the command name.
3931e6d2e958Smrg    cmd=$nonopt
393247e89262Smrg    test -z "$cmd" && \
393347e89262Smrg      func_fatal_help "you must specify a COMMAND"
3934bd1da9d7Smrg
393547e89262Smrg    # Handle -dlopen flags immediately.
3936899129b3Smrg    for file in $opt_dlopen; do
393747e89262Smrg      test -f "$file" \
3938e6d2e958Smrg	|| func_fatal_help "'$file' is not a file"
3939bd1da9d7Smrg
394047e89262Smrg      dir=
394147e89262Smrg      case $file in
394247e89262Smrg      *.la)
3943899129b3Smrg	func_resolve_sysroot "$file"
3944899129b3Smrg	file=$func_resolve_sysroot_result
3945899129b3Smrg
394647e89262Smrg	# Check to see that this really is a libtool archive.
394747e89262Smrg	func_lalib_unsafe_p "$file" \
3948e6d2e958Smrg	  || func_fatal_help "'$lib' is not a valid libtool archive"
3949bd1da9d7Smrg
395047e89262Smrg	# Read the libtool library.
395147e89262Smrg	dlname=
395247e89262Smrg	library_names=
395347e89262Smrg	func_source "$file"
3954bd1da9d7Smrg
395547e89262Smrg	# Skip this library if it cannot be dlopened.
395647e89262Smrg	if test -z "$dlname"; then
395747e89262Smrg	  # Warn if it was a shared library.
395847e89262Smrg	  test -n "$library_names" && \
3959e6d2e958Smrg	    func_warning "'$file' was not linked with '-export-dynamic'"
396047e89262Smrg	  continue
396147e89262Smrg	fi
3962bd1da9d7Smrg
396347e89262Smrg	func_dirname "$file" "" "."
3964e6d2e958Smrg	dir=$func_dirname_result
3965bd1da9d7Smrg
396647e89262Smrg	if test -f "$dir/$objdir/$dlname"; then
3967899129b3Smrg	  func_append dir "/$objdir"
396847e89262Smrg	else
396947e89262Smrg	  if test ! -f "$dir/$dlname"; then
3970e6d2e958Smrg	    func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
397147e89262Smrg	  fi
397247e89262Smrg	fi
3973bd1da9d7Smrg	;;
3974bd1da9d7Smrg
397547e89262Smrg      *.lo)
397647e89262Smrg	# Just add the directory containing the .lo file.
397747e89262Smrg	func_dirname "$file" "" "."
3978e6d2e958Smrg	dir=$func_dirname_result
3979bd1da9d7Smrg	;;
398047e89262Smrg
398147e89262Smrg      *)
3982e6d2e958Smrg	func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
3983bd1da9d7Smrg	continue
3984bd1da9d7Smrg	;;
398547e89262Smrg      esac
3986bd1da9d7Smrg
398747e89262Smrg      # Get the absolute pathname.
398847e89262Smrg      absdir=`cd "$dir" && pwd`
3989e6d2e958Smrg      test -n "$absdir" && dir=$absdir
3990bd1da9d7Smrg
399147e89262Smrg      # Now add the directory to shlibpath_var.
399247e89262Smrg      if eval "test -z \"\$$shlibpath_var\""; then
399347e89262Smrg	eval "$shlibpath_var=\"\$dir\""
399447e89262Smrg      else
399547e89262Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
399647e89262Smrg      fi
399747e89262Smrg    done
3998bd1da9d7Smrg
399947e89262Smrg    # This variable tells wrapper scripts just to set shlibpath_var
400047e89262Smrg    # rather than running their programs.
4001e6d2e958Smrg    libtool_execute_magic=$magic
4002bd1da9d7Smrg
400347e89262Smrg    # Check if any of the arguments is a wrapper script.
400447e89262Smrg    args=
400547e89262Smrg    for file
400647e89262Smrg    do
400747e89262Smrg      case $file in
400847e89262Smrg      -* | *.la | *.lo ) ;;
400947e89262Smrg      *)
401047e89262Smrg	# Do a test to see if this is really a libtool program.
401147e89262Smrg	if func_ltwrapper_script_p "$file"; then
401247e89262Smrg	  func_source "$file"
401347e89262Smrg	  # Transform arg to wrapped name.
4014e6d2e958Smrg	  file=$progdir/$program
401547e89262Smrg	elif func_ltwrapper_executable_p "$file"; then
401647e89262Smrg	  func_ltwrapper_scriptname "$file"
401747e89262Smrg	  func_source "$func_ltwrapper_scriptname_result"
401847e89262Smrg	  # Transform arg to wrapped name.
4019e6d2e958Smrg	  file=$progdir/$program
402047e89262Smrg	fi
4021bd1da9d7Smrg	;;
402247e89262Smrg      esac
402347e89262Smrg      # Quote arguments (to preserve shell metacharacters).
4024899129b3Smrg      func_append_quoted args "$file"
402547e89262Smrg    done
4026bd1da9d7Smrg
4027e6d2e958Smrg    if $opt_dry_run; then
4028e6d2e958Smrg      # Display what would be done.
4029e6d2e958Smrg      if test -n "$shlibpath_var"; then
4030e6d2e958Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
4031e6d2e958Smrg	echo "export $shlibpath_var"
4032e6d2e958Smrg      fi
4033e6d2e958Smrg      $ECHO "$cmd$args"
4034e6d2e958Smrg      exit $EXIT_SUCCESS
4035e6d2e958Smrg    else
403647e89262Smrg      if test -n "$shlibpath_var"; then
403747e89262Smrg	# Export the shlibpath_var.
403847e89262Smrg	eval "export $shlibpath_var"
403947e89262Smrg      fi
4040bd1da9d7Smrg
404147e89262Smrg      # Restore saved environment variables
404247e89262Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
404347e89262Smrg      do
404447e89262Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
404547e89262Smrg                $lt_var=\$save_$lt_var; export $lt_var
404647e89262Smrg	      else
404747e89262Smrg		$lt_unset $lt_var
404847e89262Smrg	      fi"
404947e89262Smrg      done
4050bd1da9d7Smrg
405147e89262Smrg      # Now prepare to actually exec the command.
4052e6d2e958Smrg      exec_cmd=\$cmd$args
405347e89262Smrg    fi
405447e89262Smrg}
4055bd1da9d7Smrg
4056e6d2e958Smrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"}
4057bd1da9d7Smrg
4058bd1da9d7Smrg
405947e89262Smrg# func_mode_finish arg...
406047e89262Smrgfunc_mode_finish ()
406147e89262Smrg{
4062e6d2e958Smrg    $debug_cmd
4063e6d2e958Smrg
4064899129b3Smrg    libs=
4065899129b3Smrg    libdirs=
406647e89262Smrg    admincmds=
4067bd1da9d7Smrg
4068899129b3Smrg    for opt in "$nonopt" ${1+"$@"}
4069899129b3Smrg    do
4070899129b3Smrg      if test -d "$opt"; then
4071899129b3Smrg	func_append libdirs " $opt"
4072899129b3Smrg
4073899129b3Smrg      elif test -f "$opt"; then
4074899129b3Smrg	if func_lalib_unsafe_p "$opt"; then
4075899129b3Smrg	  func_append libs " $opt"
4076899129b3Smrg	else
4077e6d2e958Smrg	  func_warning "'$opt' is not a valid libtool archive"
4078899129b3Smrg	fi
4079899129b3Smrg
4080899129b3Smrg      else
4081e6d2e958Smrg	func_fatal_error "invalid argument '$opt'"
4082899129b3Smrg      fi
4083899129b3Smrg    done
4084899129b3Smrg
4085899129b3Smrg    if test -n "$libs"; then
4086899129b3Smrg      if test -n "$lt_sysroot"; then
4087899129b3Smrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
4088899129b3Smrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
4089899129b3Smrg      else
4090899129b3Smrg        sysroot_cmd=
4091899129b3Smrg      fi
4092899129b3Smrg
4093899129b3Smrg      # Remove sysroot references
4094899129b3Smrg      if $opt_dry_run; then
4095899129b3Smrg        for lib in $libs; do
4096e6d2e958Smrg          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
4097899129b3Smrg        done
4098899129b3Smrg      else
4099899129b3Smrg        tmpdir=`func_mktempdir`
4100899129b3Smrg        for lib in $libs; do
4101e6d2e958Smrg	  $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
4102899129b3Smrg	    > $tmpdir/tmp-la
4103899129b3Smrg	  mv -f $tmpdir/tmp-la $lib
4104899129b3Smrg	done
4105899129b3Smrg        ${RM}r "$tmpdir"
4106899129b3Smrg      fi
4107899129b3Smrg    fi
4108bd1da9d7Smrg
4109899129b3Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
411047e89262Smrg      for libdir in $libdirs; do
411147e89262Smrg	if test -n "$finish_cmds"; then
411247e89262Smrg	  # Do each command in the finish commands.
411347e89262Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
411447e89262Smrg'"$cmd"'"'
411547e89262Smrg	fi
411647e89262Smrg	if test -n "$finish_eval"; then
411747e89262Smrg	  # Do the single finish_eval.
411847e89262Smrg	  eval cmds=\"$finish_eval\"
4119899129b3Smrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
412047e89262Smrg       $cmds"
412147e89262Smrg	fi
412247e89262Smrg      done
412347e89262Smrg    fi
4124bd1da9d7Smrg
412547e89262Smrg    # Exit here if they wanted silent mode.
4126e6d2e958Smrg    $opt_quiet && exit $EXIT_SUCCESS
4127bd1da9d7Smrg
4128899129b3Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4129899129b3Smrg      echo "----------------------------------------------------------------------"
4130899129b3Smrg      echo "Libraries have been installed in:"
4131899129b3Smrg      for libdir in $libdirs; do
4132899129b3Smrg	$ECHO "   $libdir"
4133899129b3Smrg      done
4134899129b3Smrg      echo
4135899129b3Smrg      echo "If you ever happen to want to link against installed libraries"
4136899129b3Smrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
4137e6d2e958Smrg      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
4138899129b3Smrg      echo "flag during linking and do at least one of the following:"
4139899129b3Smrg      if test -n "$shlibpath_var"; then
4140e6d2e958Smrg	echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
4141899129b3Smrg	echo "     during execution"
4142899129b3Smrg      fi
4143899129b3Smrg      if test -n "$runpath_var"; then
4144e6d2e958Smrg	echo "   - add LIBDIR to the '$runpath_var' environment variable"
4145899129b3Smrg	echo "     during linking"
4146899129b3Smrg      fi
4147899129b3Smrg      if test -n "$hardcode_libdir_flag_spec"; then
4148899129b3Smrg	libdir=LIBDIR
4149899129b3Smrg	eval flag=\"$hardcode_libdir_flag_spec\"
4150bd1da9d7Smrg
4151e6d2e958Smrg	$ECHO "   - use the '$flag' linker flag"
4152899129b3Smrg      fi
4153899129b3Smrg      if test -n "$admincmds"; then
4154899129b3Smrg	$ECHO "   - have your system administrator run these commands:$admincmds"
4155899129b3Smrg      fi
4156899129b3Smrg      if test -f /etc/ld.so.conf; then
4157e6d2e958Smrg	echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
4158899129b3Smrg      fi
4159899129b3Smrg      echo
4160bd1da9d7Smrg
4161899129b3Smrg      echo "See any operating system documentation about shared libraries for"
4162899129b3Smrg      case $host in
4163899129b3Smrg	solaris2.[6789]|solaris2.1[0-9])
4164899129b3Smrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
4165899129b3Smrg	  echo "pages."
4166899129b3Smrg	  ;;
4167899129b3Smrg	*)
4168899129b3Smrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
4169899129b3Smrg	  ;;
4170899129b3Smrg      esac
4171899129b3Smrg      echo "----------------------------------------------------------------------"
4172899129b3Smrg    fi
417347e89262Smrg    exit $EXIT_SUCCESS
417447e89262Smrg}
4175bd1da9d7Smrg
4176e6d2e958Smrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"}
4177bd1da9d7Smrg
4178bd1da9d7Smrg
417947e89262Smrg# func_mode_install arg...
418047e89262Smrgfunc_mode_install ()
418147e89262Smrg{
4182e6d2e958Smrg    $debug_cmd
4183e6d2e958Smrg
418447e89262Smrg    # There may be an optional sh(1) argument at the beginning of
418547e89262Smrg    # install_prog (especially on Windows NT).
4186e6d2e958Smrg    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
418747e89262Smrg       # Allow the use of GNU shtool's install command.
4188e6d2e958Smrg       case $nonopt in *shtool*) :;; *) false;; esac
4189e6d2e958Smrg    then
419047e89262Smrg      # Aesthetically quote it.
419147e89262Smrg      func_quote_for_eval "$nonopt"
419247e89262Smrg      install_prog="$func_quote_for_eval_result "
419347e89262Smrg      arg=$1
419447e89262Smrg      shift
419547e89262Smrg    else
419647e89262Smrg      install_prog=
419747e89262Smrg      arg=$nonopt
419847e89262Smrg    fi
4199bd1da9d7Smrg
420047e89262Smrg    # The real first argument should be the name of the installation program.
420147e89262Smrg    # Aesthetically quote it.
420247e89262Smrg    func_quote_for_eval "$arg"
4203899129b3Smrg    func_append install_prog "$func_quote_for_eval_result"
420447e89262Smrg    install_shared_prog=$install_prog
420547e89262Smrg    case " $install_prog " in
420647e89262Smrg      *[\\\ /]cp\ *) install_cp=: ;;
420747e89262Smrg      *) install_cp=false ;;
420847e89262Smrg    esac
4209bd1da9d7Smrg
421047e89262Smrg    # We need to accept at least all the BSD install flags.
421147e89262Smrg    dest=
421247e89262Smrg    files=
421347e89262Smrg    opts=
421447e89262Smrg    prev=
421547e89262Smrg    install_type=
4216e6d2e958Smrg    isdir=false
421747e89262Smrg    stripme=
421847e89262Smrg    no_mode=:
421947e89262Smrg    for arg
422047e89262Smrg    do
422147e89262Smrg      arg2=
422247e89262Smrg      if test -n "$dest"; then
4223899129b3Smrg	func_append files " $dest"
422447e89262Smrg	dest=$arg
4225bd1da9d7Smrg	continue
422647e89262Smrg      fi
4227bd1da9d7Smrg
422847e89262Smrg      case $arg in
4229e6d2e958Smrg      -d) isdir=: ;;
423047e89262Smrg      -f)
423147e89262Smrg	if $install_cp; then :; else
423247e89262Smrg	  prev=$arg
4233bd1da9d7Smrg	fi
423447e89262Smrg	;;
423547e89262Smrg      -g | -m | -o)
423647e89262Smrg	prev=$arg
423747e89262Smrg	;;
423847e89262Smrg      -s)
423947e89262Smrg	stripme=" -s"
4240bd1da9d7Smrg	continue
4241bd1da9d7Smrg	;;
424247e89262Smrg      -*)
424347e89262Smrg	;;
4244bd1da9d7Smrg      *)
424547e89262Smrg	# If the previous option needed an argument, then skip it.
424647e89262Smrg	if test -n "$prev"; then
4247e6d2e958Smrg	  if test X-m = "X$prev" && test -n "$install_override_mode"; then
424847e89262Smrg	    arg2=$install_override_mode
424947e89262Smrg	    no_mode=false
425047e89262Smrg	  fi
425147e89262Smrg	  prev=
425247e89262Smrg	else
425347e89262Smrg	  dest=$arg
425447e89262Smrg	  continue
425547e89262Smrg	fi
4256bd1da9d7Smrg	;;
425747e89262Smrg      esac
4258bd1da9d7Smrg
425947e89262Smrg      # Aesthetically quote the argument.
426047e89262Smrg      func_quote_for_eval "$arg"
4261899129b3Smrg      func_append install_prog " $func_quote_for_eval_result"
426247e89262Smrg      if test -n "$arg2"; then
426347e89262Smrg	func_quote_for_eval "$arg2"
4264bd1da9d7Smrg      fi
4265899129b3Smrg      func_append install_shared_prog " $func_quote_for_eval_result"
426647e89262Smrg    done
4267bd1da9d7Smrg
426847e89262Smrg    test -z "$install_prog" && \
426947e89262Smrg      func_fatal_help "you must specify an install program"
4270bd1da9d7Smrg
427147e89262Smrg    test -n "$prev" && \
4272e6d2e958Smrg      func_fatal_help "the '$prev' option requires an argument"
4273bd1da9d7Smrg
427447e89262Smrg    if test -n "$install_override_mode" && $no_mode; then
427547e89262Smrg      if $install_cp; then :; else
427647e89262Smrg	func_quote_for_eval "$install_override_mode"
4277899129b3Smrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
427847e89262Smrg      fi
4279bd1da9d7Smrg    fi
4280bd1da9d7Smrg
428147e89262Smrg    if test -z "$files"; then
428247e89262Smrg      if test -z "$dest"; then
428347e89262Smrg	func_fatal_help "no file or destination specified"
428447e89262Smrg      else
428547e89262Smrg	func_fatal_help "you must specify a destination"
4286bd1da9d7Smrg      fi
4287bd1da9d7Smrg    fi
4288bd1da9d7Smrg
428947e89262Smrg    # Strip any trailing slash from the destination.
429047e89262Smrg    func_stripname '' '/' "$dest"
429147e89262Smrg    dest=$func_stripname_result
4292bd1da9d7Smrg
429347e89262Smrg    # Check to see that the destination is a directory.
4294e6d2e958Smrg    test -d "$dest" && isdir=:
4295e6d2e958Smrg    if $isdir; then
4296e6d2e958Smrg      destdir=$dest
429747e89262Smrg      destname=
429847e89262Smrg    else
429947e89262Smrg      func_dirname_and_basename "$dest" "" "."
4300e6d2e958Smrg      destdir=$func_dirname_result
4301e6d2e958Smrg      destname=$func_basename_result
430247e89262Smrg
430347e89262Smrg      # Not a directory, so check to see that there is only one file specified.
430447e89262Smrg      set dummy $files; shift
430547e89262Smrg      test "$#" -gt 1 && \
4306e6d2e958Smrg	func_fatal_help "'$dest' is not a directory"
430747e89262Smrg    fi
430847e89262Smrg    case $destdir in
430947e89262Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
4310bd1da9d7Smrg    *)
431147e89262Smrg      for file in $files; do
431247e89262Smrg	case $file in
431347e89262Smrg	*.lo) ;;
431447e89262Smrg	*)
4315e6d2e958Smrg	  func_fatal_help "'$destdir' must be an absolute directory name"
431647e89262Smrg	  ;;
431747e89262Smrg	esac
431847e89262Smrg      done
4319bd1da9d7Smrg      ;;
4320bd1da9d7Smrg    esac
4321bd1da9d7Smrg
432247e89262Smrg    # This variable tells wrapper scripts just to set variables rather
432347e89262Smrg    # than running their programs.
4324e6d2e958Smrg    libtool_install_magic=$magic
4325bd1da9d7Smrg
432647e89262Smrg    staticlibs=
432747e89262Smrg    future_libdirs=
432847e89262Smrg    current_libdirs=
432947e89262Smrg    for file in $files; do
4330bd1da9d7Smrg
433147e89262Smrg      # Do each installation.
433247e89262Smrg      case $file in
433347e89262Smrg      *.$libext)
433447e89262Smrg	# Do the static libraries later.
4335899129b3Smrg	func_append staticlibs " $file"
433647e89262Smrg	;;
433747e89262Smrg
433847e89262Smrg      *.la)
4339899129b3Smrg	func_resolve_sysroot "$file"
4340899129b3Smrg	file=$func_resolve_sysroot_result
4341899129b3Smrg
434247e89262Smrg	# Check to see that this really is a libtool archive.
434347e89262Smrg	func_lalib_unsafe_p "$file" \
4344e6d2e958Smrg	  || func_fatal_help "'$file' is not a valid libtool archive"
434547e89262Smrg
434647e89262Smrg	library_names=
434747e89262Smrg	old_library=
434847e89262Smrg	relink_command=
434947e89262Smrg	func_source "$file"
435047e89262Smrg
435147e89262Smrg	# Add the libdir to current_libdirs if it is the destination.
435247e89262Smrg	if test "X$destdir" = "X$libdir"; then
435347e89262Smrg	  case "$current_libdirs " in
435447e89262Smrg	  *" $libdir "*) ;;
4355899129b3Smrg	  *) func_append current_libdirs " $libdir" ;;
4356bd1da9d7Smrg	  esac
435747e89262Smrg	else
435847e89262Smrg	  # Note the libdir as a future libdir.
435947e89262Smrg	  case "$future_libdirs " in
436047e89262Smrg	  *" $libdir "*) ;;
4361899129b3Smrg	  *) func_append future_libdirs " $libdir" ;;
436247e89262Smrg	  esac
436347e89262Smrg	fi
4364bd1da9d7Smrg
436547e89262Smrg	func_dirname "$file" "/" ""
4366e6d2e958Smrg	dir=$func_dirname_result
4367899129b3Smrg	func_append dir "$objdir"
436847e89262Smrg
436947e89262Smrg	if test -n "$relink_command"; then
437047e89262Smrg	  # Determine the prefix the user has applied to our future dir.
437147e89262Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
437247e89262Smrg
437347e89262Smrg	  # Don't allow the user to place us outside of our expected
437447e89262Smrg	  # location b/c this prevents finding dependent libraries that
437547e89262Smrg	  # are installed to the same prefix.
437647e89262Smrg	  # At present, this check doesn't affect windows .dll's that
437747e89262Smrg	  # are installed into $libdir/../bin (currently, that works fine)
437847e89262Smrg	  # but it's something to keep an eye on.
437947e89262Smrg	  test "$inst_prefix_dir" = "$destdir" && \
4380e6d2e958Smrg	    func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
438147e89262Smrg
438247e89262Smrg	  if test -n "$inst_prefix_dir"; then
438347e89262Smrg	    # Stick the inst_prefix_dir data into the link command.
438447e89262Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
438547e89262Smrg	  else
438647e89262Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
438747e89262Smrg	  fi
438847e89262Smrg
4389e6d2e958Smrg	  func_warning "relinking '$file'"
439047e89262Smrg	  func_show_eval "$relink_command" \
4391e6d2e958Smrg	    'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
439247e89262Smrg	fi
439347e89262Smrg
439447e89262Smrg	# See the names of the shared library.
439547e89262Smrg	set dummy $library_names; shift
439647e89262Smrg	if test -n "$1"; then
4397e6d2e958Smrg	  realname=$1
439847e89262Smrg	  shift
439947e89262Smrg
4400e6d2e958Smrg	  srcname=$realname
4401e6d2e958Smrg	  test -n "$relink_command" && srcname=${realname}T
440247e89262Smrg
440347e89262Smrg	  # Install the shared library and build the symlinks.
440447e89262Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
440547e89262Smrg	      'exit $?'
4406e6d2e958Smrg	  tstripme=$stripme
440747e89262Smrg	  case $host_os in
440847e89262Smrg	  cygwin* | mingw* | pw32* | cegcc*)
440947e89262Smrg	    case $realname in
441047e89262Smrg	    *.dll.a)
4411e6d2e958Smrg	      tstripme=
4412e6d2e958Smrg	      ;;
4413e6d2e958Smrg	    esac
4414e6d2e958Smrg	    ;;
4415e6d2e958Smrg	  os2*)
4416e6d2e958Smrg	    case $realname in
4417e6d2e958Smrg	    *_dll.a)
4418e6d2e958Smrg	      tstripme=
441947e89262Smrg	      ;;
442047e89262Smrg	    esac
4421bd1da9d7Smrg	    ;;
4422bd1da9d7Smrg	  esac
442347e89262Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
442447e89262Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
442547e89262Smrg	  fi
442647e89262Smrg
442747e89262Smrg	  if test "$#" -gt 0; then
442847e89262Smrg	    # Delete the old symlinks, and create new ones.
4429e6d2e958Smrg	    # Try 'ln -sf' first, because the 'ln' binary might depend on
443047e89262Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
443147e89262Smrg	    # so we also need to try rm && ln -s.
443247e89262Smrg	    for linkname
443347e89262Smrg	    do
443447e89262Smrg	      test "$linkname" != "$realname" \
443547e89262Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
443647e89262Smrg	    done
443747e89262Smrg	  fi
443847e89262Smrg
443947e89262Smrg	  # Do each command in the postinstall commands.
4440e6d2e958Smrg	  lib=$destdir/$realname
444147e89262Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
444247e89262Smrg	fi
444347e89262Smrg
444447e89262Smrg	# Install the pseudo-library for information purposes.
444547e89262Smrg	func_basename "$file"
4446e6d2e958Smrg	name=$func_basename_result
4447e6d2e958Smrg	instname=$dir/${name}i
444847e89262Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
444947e89262Smrg
445047e89262Smrg	# Maybe install the static library, too.
4451899129b3Smrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
4452bd1da9d7Smrg	;;
445347e89262Smrg
445447e89262Smrg      *.lo)
445547e89262Smrg	# Install (i.e. copy) a libtool object.
445647e89262Smrg
445747e89262Smrg	# Figure out destination file name, if it wasn't already specified.
445847e89262Smrg	if test -n "$destname"; then
4459e6d2e958Smrg	  destfile=$destdir/$destname
446047e89262Smrg	else
446147e89262Smrg	  func_basename "$file"
4462e6d2e958Smrg	  destfile=$func_basename_result
4463e6d2e958Smrg	  destfile=$destdir/$destfile
446447e89262Smrg	fi
446547e89262Smrg
446647e89262Smrg	# Deduce the name of the destination old-style object file.
446747e89262Smrg	case $destfile in
446847e89262Smrg	*.lo)
446947e89262Smrg	  func_lo2o "$destfile"
447047e89262Smrg	  staticdest=$func_lo2o_result
4471bd1da9d7Smrg	  ;;
447247e89262Smrg	*.$objext)
4473e6d2e958Smrg	  staticdest=$destfile
447447e89262Smrg	  destfile=
4475bd1da9d7Smrg	  ;;
447647e89262Smrg	*)
4477e6d2e958Smrg	  func_fatal_help "cannot copy a libtool object to '$destfile'"
4478bd1da9d7Smrg	  ;;
447947e89262Smrg	esac
448047e89262Smrg
448147e89262Smrg	# Install the libtool object if requested.
448247e89262Smrg	test -n "$destfile" && \
448347e89262Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
448447e89262Smrg
448547e89262Smrg	# Install the old object if enabled.
4486e6d2e958Smrg	if test yes = "$build_old_libs"; then
448747e89262Smrg	  # Deduce the name of the old-style object file.
448847e89262Smrg	  func_lo2o "$file"
448947e89262Smrg	  staticobj=$func_lo2o_result
449047e89262Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
4491bd1da9d7Smrg	fi
449247e89262Smrg	exit $EXIT_SUCCESS
449347e89262Smrg	;;
4494bd1da9d7Smrg
449547e89262Smrg      *)
449647e89262Smrg	# Figure out destination file name, if it wasn't already specified.
449747e89262Smrg	if test -n "$destname"; then
4498e6d2e958Smrg	  destfile=$destdir/$destname
4499bd1da9d7Smrg	else
450047e89262Smrg	  func_basename "$file"
4501e6d2e958Smrg	  destfile=$func_basename_result
4502e6d2e958Smrg	  destfile=$destdir/$destfile
4503bd1da9d7Smrg	fi
4504bd1da9d7Smrg
450547e89262Smrg	# If the file is missing, and there is a .exe on the end, strip it
450647e89262Smrg	# because it is most likely a libtool script we actually want to
450747e89262Smrg	# install
4508e6d2e958Smrg	stripped_ext=
450947e89262Smrg	case $file in
451047e89262Smrg	  *.exe)
451147e89262Smrg	    if test ! -f "$file"; then
451247e89262Smrg	      func_stripname '' '.exe' "$file"
451347e89262Smrg	      file=$func_stripname_result
4514e6d2e958Smrg	      stripped_ext=.exe
451547e89262Smrg	    fi
451647e89262Smrg	    ;;
451747e89262Smrg	esac
4518bd1da9d7Smrg
451947e89262Smrg	# Do a test to see if this is really a libtool program.
452047e89262Smrg	case $host in
452147e89262Smrg	*cygwin* | *mingw*)
452247e89262Smrg	    if func_ltwrapper_executable_p "$file"; then
452347e89262Smrg	      func_ltwrapper_scriptname "$file"
452447e89262Smrg	      wrapper=$func_ltwrapper_scriptname_result
452547e89262Smrg	    else
452647e89262Smrg	      func_stripname '' '.exe' "$file"
452747e89262Smrg	      wrapper=$func_stripname_result
452847e89262Smrg	    fi
452947e89262Smrg	    ;;
453047e89262Smrg	*)
453147e89262Smrg	    wrapper=$file
453247e89262Smrg	    ;;
453347e89262Smrg	esac
453447e89262Smrg	if func_ltwrapper_script_p "$wrapper"; then
453547e89262Smrg	  notinst_deplibs=
453647e89262Smrg	  relink_command=
4537bd1da9d7Smrg
453847e89262Smrg	  func_source "$wrapper"
4539bd1da9d7Smrg
454047e89262Smrg	  # Check the variables that should have been set.
454147e89262Smrg	  test -z "$generated_by_libtool_version" && \
4542e6d2e958Smrg	    func_fatal_error "invalid libtool wrapper script '$wrapper'"
4543bd1da9d7Smrg
4544e6d2e958Smrg	  finalize=:
454547e89262Smrg	  for lib in $notinst_deplibs; do
454647e89262Smrg	    # Check to see that each library is installed.
454747e89262Smrg	    libdir=
454847e89262Smrg	    if test -f "$lib"; then
454947e89262Smrg	      func_source "$lib"
4550bd1da9d7Smrg	    fi
4551e6d2e958Smrg	    libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
455247e89262Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
4553e6d2e958Smrg	      func_warning "'$lib' has not been installed in '$libdir'"
4554e6d2e958Smrg	      finalize=false
455547e89262Smrg	    fi
455647e89262Smrg	  done
4557bd1da9d7Smrg
455847e89262Smrg	  relink_command=
455947e89262Smrg	  func_source "$wrapper"
4560bd1da9d7Smrg
456147e89262Smrg	  outputname=
4562e6d2e958Smrg	  if test no = "$fast_install" && test -n "$relink_command"; then
456347e89262Smrg	    $opt_dry_run || {
4564e6d2e958Smrg	      if $finalize; then
456547e89262Smrg	        tmpdir=`func_mktempdir`
456647e89262Smrg		func_basename "$file$stripped_ext"
4567e6d2e958Smrg		file=$func_basename_result
4568e6d2e958Smrg	        outputname=$tmpdir/$file
456947e89262Smrg	        # Replace the output file specification.
457047e89262Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
457147e89262Smrg
4572e6d2e958Smrg	        $opt_quiet || {
457347e89262Smrg	          func_quote_for_expand "$relink_command"
457447e89262Smrg		  eval "func_echo $func_quote_for_expand_result"
457547e89262Smrg	        }
457647e89262Smrg	        if eval "$relink_command"; then :
457747e89262Smrg	          else
4578e6d2e958Smrg		  func_error "error: relink '$file' with the above command before installing it"
457947e89262Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
458047e89262Smrg		  continue
458147e89262Smrg	        fi
4582e6d2e958Smrg	        file=$outputname
458347e89262Smrg	      else
4584e6d2e958Smrg	        func_warning "cannot relink '$file'"
458547e89262Smrg	      fi
458647e89262Smrg	    }
4587bd1da9d7Smrg	  else
458847e89262Smrg	    # Install the binary that we compiled earlier.
458947e89262Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
4590bd1da9d7Smrg	  fi
459147e89262Smrg	fi
4592bd1da9d7Smrg
459347e89262Smrg	# remove .exe since cygwin /usr/bin/install will append another
459447e89262Smrg	# one anyway
459547e89262Smrg	case $install_prog,$host in
459647e89262Smrg	*/usr/bin/install*,*cygwin*)
459747e89262Smrg	  case $file:$destfile in
459847e89262Smrg	  *.exe:*.exe)
459947e89262Smrg	    # this is ok
460047e89262Smrg	    ;;
460147e89262Smrg	  *.exe:*)
460247e89262Smrg	    destfile=$destfile.exe
460347e89262Smrg	    ;;
460447e89262Smrg	  *:*.exe)
460547e89262Smrg	    func_stripname '' '.exe' "$destfile"
460647e89262Smrg	    destfile=$func_stripname_result
460747e89262Smrg	    ;;
460847e89262Smrg	  esac
4609bd1da9d7Smrg	  ;;
4610bd1da9d7Smrg	esac
461147e89262Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
461247e89262Smrg	$opt_dry_run || if test -n "$outputname"; then
461347e89262Smrg	  ${RM}r "$tmpdir"
461447e89262Smrg	fi
461547e89262Smrg	;;
461647e89262Smrg      esac
461747e89262Smrg    done
4618bd1da9d7Smrg
461947e89262Smrg    for file in $staticlibs; do
462047e89262Smrg      func_basename "$file"
4621e6d2e958Smrg      name=$func_basename_result
462247e89262Smrg
462347e89262Smrg      # Set up the ranlib parameters.
4624e6d2e958Smrg      oldlib=$destdir/$name
4625899129b3Smrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
4626899129b3Smrg      tool_oldlib=$func_to_tool_file_result
462747e89262Smrg
462847e89262Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
462947e89262Smrg
463047e89262Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
4631899129b3Smrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
463247e89262Smrg      fi
463347e89262Smrg
463447e89262Smrg      # Do each command in the postinstall commands.
463547e89262Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
463647e89262Smrg    done
463747e89262Smrg
463847e89262Smrg    test -n "$future_libdirs" && \
4639e6d2e958Smrg      func_warning "remember to run '$progname --finish$future_libdirs'"
464047e89262Smrg
464147e89262Smrg    if test -n "$current_libdirs"; then
464247e89262Smrg      # Maybe just do a dry run.
464347e89262Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
4644e6d2e958Smrg      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
464547e89262Smrg    else
464647e89262Smrg      exit $EXIT_SUCCESS
464747e89262Smrg    fi
464847e89262Smrg}
464947e89262Smrg
4650e6d2e958Smrgtest install = "$opt_mode" && func_mode_install ${1+"$@"}
465147e89262Smrg
465247e89262Smrg
465347e89262Smrg# func_generate_dlsyms outputname originator pic_p
465447e89262Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
465547e89262Smrg# a dlpreopen symbol table.
465647e89262Smrgfunc_generate_dlsyms ()
465747e89262Smrg{
4658e6d2e958Smrg    $debug_cmd
4659e6d2e958Smrg
4660e6d2e958Smrg    my_outputname=$1
4661e6d2e958Smrg    my_originator=$2
4662e6d2e958Smrg    my_pic_p=${3-false}
4663e6d2e958Smrg    my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
466447e89262Smrg    my_dlsyms=
466547e89262Smrg
4666e6d2e958Smrg    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
466747e89262Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
4668e6d2e958Smrg	my_dlsyms=${my_outputname}S.c
466947e89262Smrg      else
467047e89262Smrg	func_error "not configured to extract global symbols from dlpreopened files"
467147e89262Smrg      fi
467247e89262Smrg    fi
467347e89262Smrg
467447e89262Smrg    if test -n "$my_dlsyms"; then
467547e89262Smrg      case $my_dlsyms in
467647e89262Smrg      "") ;;
467747e89262Smrg      *.c)
467847e89262Smrg	# Discover the nlist of each of the dlfiles.
4679e6d2e958Smrg	nlist=$output_objdir/$my_outputname.nm
468047e89262Smrg
468147e89262Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
468247e89262Smrg
468347e89262Smrg	# Parse the name list into a source file.
468447e89262Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
468547e89262Smrg
468647e89262Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
4687e6d2e958Smrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
4688e6d2e958Smrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
468947e89262Smrg
469047e89262Smrg#ifdef __cplusplus
469147e89262Smrgextern \"C\" {
469247e89262Smrg#endif
469347e89262Smrg
4694e6d2e958Smrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
469547e89262Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
469647e89262Smrg#endif
469747e89262Smrg
4698899129b3Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
4699e6d2e958Smrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
4700e6d2e958Smrg/* DATA imports from DLLs on WIN32 can't be const, because runtime
4701899129b3Smrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
4702899129b3Smrg# define LT_DLSYM_CONST
4703e6d2e958Smrg#elif defined __osf__
4704899129b3Smrg/* This system does not cope well with relocations in const data.  */
4705899129b3Smrg# define LT_DLSYM_CONST
4706899129b3Smrg#else
4707899129b3Smrg# define LT_DLSYM_CONST const
4708899129b3Smrg#endif
4709899129b3Smrg
4710e6d2e958Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
4711e6d2e958Smrg
471247e89262Smrg/* External symbol declarations for the compiler. */\
471347e89262Smrg"
471447e89262Smrg
4715e6d2e958Smrg	if test yes = "$dlself"; then
4716e6d2e958Smrg	  func_verbose "generating symbol list for '$output'"
471747e89262Smrg
471847e89262Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
471947e89262Smrg
472047e89262Smrg	  # Add our own program objects to the symbol list.
472147e89262Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
472247e89262Smrg	  for progfile in $progfiles; do
4723899129b3Smrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
4724e6d2e958Smrg	    func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
4725899129b3Smrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
472647e89262Smrg	  done
472747e89262Smrg
472847e89262Smrg	  if test -n "$exclude_expsyms"; then
472947e89262Smrg	    $opt_dry_run || {
473047e89262Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
473147e89262Smrg	      eval '$MV "$nlist"T "$nlist"'
473247e89262Smrg	    }
4733bd1da9d7Smrg	  fi
473447e89262Smrg
473547e89262Smrg	  if test -n "$export_symbols_regex"; then
473647e89262Smrg	    $opt_dry_run || {
473747e89262Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
473847e89262Smrg	      eval '$MV "$nlist"T "$nlist"'
473947e89262Smrg	    }
474047e89262Smrg	  fi
474147e89262Smrg
474247e89262Smrg	  # Prepare the list of exported symbols
474347e89262Smrg	  if test -z "$export_symbols"; then
4744e6d2e958Smrg	    export_symbols=$output_objdir/$outputname.exp
474547e89262Smrg	    $opt_dry_run || {
474647e89262Smrg	      $RM $export_symbols
4747e6d2e958Smrg	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
474847e89262Smrg	      case $host in
474947e89262Smrg	      *cygwin* | *mingw* | *cegcc* )
475047e89262Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
475147e89262Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
475247e89262Smrg	        ;;
475347e89262Smrg	      esac
475447e89262Smrg	    }
4755bd1da9d7Smrg	  else
475647e89262Smrg	    $opt_dry_run || {
4757e6d2e958Smrg	      eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
475847e89262Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
475947e89262Smrg	      eval '$MV "$nlist"T "$nlist"'
476047e89262Smrg	      case $host in
476147e89262Smrg	        *cygwin* | *mingw* | *cegcc* )
476247e89262Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
476347e89262Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
476447e89262Smrg	          ;;
476547e89262Smrg	      esac
476647e89262Smrg	    }
4767bd1da9d7Smrg	  fi
476847e89262Smrg	fi
4769bd1da9d7Smrg
477047e89262Smrg	for dlprefile in $dlprefiles; do
4771e6d2e958Smrg	  func_verbose "extracting global C symbols from '$dlprefile'"
477247e89262Smrg	  func_basename "$dlprefile"
4773e6d2e958Smrg	  name=$func_basename_result
4774899129b3Smrg          case $host in
4775899129b3Smrg	    *cygwin* | *mingw* | *cegcc* )
4776899129b3Smrg	      # if an import library, we need to obtain dlname
4777899129b3Smrg	      if func_win32_import_lib_p "$dlprefile"; then
4778899129b3Smrg	        func_tr_sh "$dlprefile"
4779899129b3Smrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
4780e6d2e958Smrg	        dlprefile_dlbasename=
4781899129b3Smrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
4782899129b3Smrg	          # Use subshell, to avoid clobbering current variable values
4783899129b3Smrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
4784e6d2e958Smrg	          if test -n "$dlprefile_dlname"; then
4785899129b3Smrg	            func_basename "$dlprefile_dlname"
4786e6d2e958Smrg	            dlprefile_dlbasename=$func_basename_result
4787899129b3Smrg	          else
4788899129b3Smrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
4789899129b3Smrg	            $sharedlib_from_linklib_cmd "$dlprefile"
4790899129b3Smrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
4791899129b3Smrg	          fi
4792899129b3Smrg	        fi
4793899129b3Smrg	        $opt_dry_run || {
4794e6d2e958Smrg	          if test -n "$dlprefile_dlbasename"; then
4795899129b3Smrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
4796899129b3Smrg	          else
4797899129b3Smrg	            func_warning "Could not compute DLL name from $name"
4798899129b3Smrg	            eval '$ECHO ": $name " >> "$nlist"'
4799899129b3Smrg	          fi
4800899129b3Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4801899129b3Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
4802899129b3Smrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
4803899129b3Smrg	        }
4804899129b3Smrg	      else # not an import lib
4805899129b3Smrg	        $opt_dry_run || {
4806899129b3Smrg	          eval '$ECHO ": $name " >> "$nlist"'
4807899129b3Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4808899129b3Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
4809899129b3Smrg	        }
4810899129b3Smrg	      fi
4811899129b3Smrg	    ;;
4812899129b3Smrg	    *)
4813899129b3Smrg	      $opt_dry_run || {
4814899129b3Smrg	        eval '$ECHO ": $name " >> "$nlist"'
4815899129b3Smrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4816899129b3Smrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
4817899129b3Smrg	      }
4818899129b3Smrg	    ;;
4819899129b3Smrg          esac
482047e89262Smrg	done
482147e89262Smrg
482247e89262Smrg	$opt_dry_run || {
482347e89262Smrg	  # Make sure we have at least an empty file.
482447e89262Smrg	  test -f "$nlist" || : > "$nlist"
482547e89262Smrg
482647e89262Smrg	  if test -n "$exclude_expsyms"; then
482747e89262Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
482847e89262Smrg	    $MV "$nlist"T "$nlist"
4829bd1da9d7Smrg	  fi
483047e89262Smrg
483147e89262Smrg	  # Try sorting and uniquifying the output.
483247e89262Smrg	  if $GREP -v "^: " < "$nlist" |
483347e89262Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
483447e89262Smrg		sort -k 3
483547e89262Smrg	      else
483647e89262Smrg		sort +2
483747e89262Smrg	      fi |
483847e89262Smrg	      uniq > "$nlist"S; then
483947e89262Smrg	    :
4840bd1da9d7Smrg	  else
484147e89262Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
4842bd1da9d7Smrg	  fi
4843bd1da9d7Smrg
484447e89262Smrg	  if test -f "$nlist"S; then
484547e89262Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
4846bd1da9d7Smrg	  else
484747e89262Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
4848bd1da9d7Smrg	  fi
4849bd1da9d7Smrg
4850e6d2e958Smrg	  func_show_eval '$RM "${nlist}I"'
4851e6d2e958Smrg	  if test -n "$global_symbol_to_import"; then
4852e6d2e958Smrg	    eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
4853e6d2e958Smrg	  fi
4854e6d2e958Smrg
485547e89262Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
4856bd1da9d7Smrg
485747e89262Smrg/* The mapping between symbol names and symbols.  */
485847e89262Smrgtypedef struct {
485947e89262Smrg  const char *name;
486047e89262Smrg  void *address;
486147e89262Smrg} lt_dlsymlist;
4862899129b3Smrgextern LT_DLSYM_CONST lt_dlsymlist
4863e6d2e958Smrglt_${my_prefix}_LTX_preloaded_symbols[];\
4864e6d2e958Smrg"
4865e6d2e958Smrg
4866e6d2e958Smrg	  if test -s "$nlist"I; then
4867e6d2e958Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
4868e6d2e958Smrgstatic void lt_syminit(void)
4869e6d2e958Smrg{
4870e6d2e958Smrg  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
4871e6d2e958Smrg  for (; symbol->name; ++symbol)
4872e6d2e958Smrg    {"
4873e6d2e958Smrg	    $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
4874e6d2e958Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
4875e6d2e958Smrg    }
4876e6d2e958Smrg}"
4877e6d2e958Smrg	  fi
4878e6d2e958Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
4879899129b3SmrgLT_DLSYM_CONST lt_dlsymlist
488047e89262Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
4881e6d2e958Smrg{ {\"$my_originator\", (void *) 0},"
4882e6d2e958Smrg
4883e6d2e958Smrg	  if test -s "$nlist"I; then
4884e6d2e958Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
4885e6d2e958Smrg  {\"@INIT@\", (void *) &lt_syminit},"
4886e6d2e958Smrg	  fi
4887bd1da9d7Smrg
488847e89262Smrg	  case $need_lib_prefix in
488947e89262Smrg	  no)
489047e89262Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
489147e89262Smrg	    ;;
489247e89262Smrg	  *)
489347e89262Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
489447e89262Smrg	    ;;
489547e89262Smrg	  esac
489647e89262Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
489747e89262Smrg  {0, (void *) 0}
489847e89262Smrg};
4899bd1da9d7Smrg
490047e89262Smrg/* This works around a problem in FreeBSD linker */
490147e89262Smrg#ifdef FREEBSD_WORKAROUND
490247e89262Smrgstatic const void *lt_preloaded_setup() {
490347e89262Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
490447e89262Smrg}
490547e89262Smrg#endif
4906bd1da9d7Smrg
490747e89262Smrg#ifdef __cplusplus
490847e89262Smrg}
490947e89262Smrg#endif\
491047e89262Smrg"
491147e89262Smrg	} # !$opt_dry_run
4912bd1da9d7Smrg
491347e89262Smrg	pic_flag_for_symtable=
491447e89262Smrg	case "$compile_command " in
491547e89262Smrg	*" -static "*) ;;
491647e89262Smrg	*)
491747e89262Smrg	  case $host in
491847e89262Smrg	  # compiling the symbol table file with pic_flag works around
491947e89262Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
492047e89262Smrg	  # linked before any other PIC object.  But we must not use
492147e89262Smrg	  # pic_flag when linking with -static.  The problem exists in
492247e89262Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
4923899129b3Smrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
492447e89262Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
492547e89262Smrg	  *-*-hpux*)
492647e89262Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
492747e89262Smrg	  *)
4928e6d2e958Smrg	    $my_pic_p && pic_flag_for_symtable=" $pic_flag"
492947e89262Smrg	    ;;
493047e89262Smrg	  esac
493147e89262Smrg	  ;;
493247e89262Smrg	esac
493347e89262Smrg	symtab_cflags=
493447e89262Smrg	for arg in $LTCFLAGS; do
493547e89262Smrg	  case $arg in
493647e89262Smrg	  -pie | -fpie | -fPIE) ;;
4937899129b3Smrg	  *) func_append symtab_cflags " $arg" ;;
493847e89262Smrg	  esac
493947e89262Smrg	done
4940bd1da9d7Smrg
494147e89262Smrg	# Now compile the dynamic symbol file.
494247e89262Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
4943bd1da9d7Smrg
494447e89262Smrg	# Clean up the generated files.
4945e6d2e958Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
4946bd1da9d7Smrg
494747e89262Smrg	# Transform the symbol file into the correct name.
4948e6d2e958Smrg	symfileobj=$output_objdir/${my_outputname}S.$objext
494947e89262Smrg	case $host in
495047e89262Smrg	*cygwin* | *mingw* | *cegcc* )
495147e89262Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
495247e89262Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
495347e89262Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
495447e89262Smrg	  else
495547e89262Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
495647e89262Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
495747e89262Smrg	  fi
495847e89262Smrg	  ;;
495947e89262Smrg	*)
496047e89262Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
496147e89262Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
496247e89262Smrg	  ;;
496347e89262Smrg	esac
496447e89262Smrg	;;
496547e89262Smrg      *)
4966e6d2e958Smrg	func_fatal_error "unknown suffix for '$my_dlsyms'"
496747e89262Smrg	;;
496847e89262Smrg      esac
496947e89262Smrg    else
497047e89262Smrg      # We keep going just in case the user didn't refer to
497147e89262Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
497247e89262Smrg      # really was required.
4973bd1da9d7Smrg
497447e89262Smrg      # Nullify the symbol file.
497547e89262Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
497647e89262Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
497747e89262Smrg    fi
497847e89262Smrg}
4979bd1da9d7Smrg
4980e6d2e958Smrg# func_cygming_gnu_implib_p ARG
4981e6d2e958Smrg# This predicate returns with zero status (TRUE) if
4982e6d2e958Smrg# ARG is a GNU/binutils-style import library. Returns
4983e6d2e958Smrg# with nonzero status (FALSE) otherwise.
4984e6d2e958Smrgfunc_cygming_gnu_implib_p ()
4985e6d2e958Smrg{
4986e6d2e958Smrg  $debug_cmd
4987e6d2e958Smrg
4988e6d2e958Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
4989e6d2e958Smrg  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)$'`
4990e6d2e958Smrg  test -n "$func_cygming_gnu_implib_tmp"
4991e6d2e958Smrg}
4992e6d2e958Smrg
4993e6d2e958Smrg# func_cygming_ms_implib_p ARG
4994e6d2e958Smrg# This predicate returns with zero status (TRUE) if
4995e6d2e958Smrg# ARG is an MS-style import library. Returns
4996e6d2e958Smrg# with nonzero status (FALSE) otherwise.
4997e6d2e958Smrgfunc_cygming_ms_implib_p ()
4998e6d2e958Smrg{
4999e6d2e958Smrg  $debug_cmd
5000e6d2e958Smrg
5001e6d2e958Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
5002e6d2e958Smrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
5003e6d2e958Smrg  test -n "$func_cygming_ms_implib_tmp"
5004e6d2e958Smrg}
5005e6d2e958Smrg
500647e89262Smrg# func_win32_libid arg
500747e89262Smrg# return the library type of file 'arg'
500847e89262Smrg#
500947e89262Smrg# Need a lot of goo to handle *both* DLLs and import libs
501047e89262Smrg# Has to be a shell function in order to 'eat' the argument
501147e89262Smrg# that is supplied when $file_magic_command is called.
501247e89262Smrg# Despite the name, also deal with 64 bit binaries.
501347e89262Smrgfunc_win32_libid ()
501447e89262Smrg{
5015e6d2e958Smrg  $debug_cmd
5016e6d2e958Smrg
5017e6d2e958Smrg  win32_libid_type=unknown
501847e89262Smrg  win32_fileres=`file -L $1 2>/dev/null`
501947e89262Smrg  case $win32_fileres in
502047e89262Smrg  *ar\ archive\ import\ library*) # definitely import
502147e89262Smrg    win32_libid_type="x86 archive import"
502247e89262Smrg    ;;
502347e89262Smrg  *ar\ archive*) # could be an import, or static
502447e89262Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
502547e89262Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
502647e89262Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
5027e6d2e958Smrg      case $nm_interface in
5028e6d2e958Smrg      "MS dumpbin")
5029e6d2e958Smrg	if func_cygming_ms_implib_p "$1" ||
5030e6d2e958Smrg	   func_cygming_gnu_implib_p "$1"
5031e6d2e958Smrg	then
5032e6d2e958Smrg	  win32_nmres=import
5033e6d2e958Smrg	else
5034e6d2e958Smrg	  win32_nmres=
5035e6d2e958Smrg	fi
5036e6d2e958Smrg	;;
5037e6d2e958Smrg      *)
5038e6d2e958Smrg	func_to_tool_file "$1" func_convert_file_msys_to_w32
5039e6d2e958Smrg	win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
5040e6d2e958Smrg	  $SED -n -e '
504147e89262Smrg	    1,100{
504247e89262Smrg		/ I /{
5043e6d2e958Smrg		    s|.*|import|
504447e89262Smrg		    p
504547e89262Smrg		    q
504647e89262Smrg		}
504747e89262Smrg	    }'`
5048e6d2e958Smrg	;;
5049e6d2e958Smrg      esac
505047e89262Smrg      case $win32_nmres in
505147e89262Smrg      import*)  win32_libid_type="x86 archive import";;
505247e89262Smrg      *)        win32_libid_type="x86 archive static";;
505347e89262Smrg      esac
505447e89262Smrg    fi
505547e89262Smrg    ;;
505647e89262Smrg  *DLL*)
505747e89262Smrg    win32_libid_type="x86 DLL"
505847e89262Smrg    ;;
505947e89262Smrg  *executable*) # but shell scripts are "executable" too...
506047e89262Smrg    case $win32_fileres in
506147e89262Smrg    *MS\ Windows\ PE\ Intel*)
506247e89262Smrg      win32_libid_type="x86 DLL"
506347e89262Smrg      ;;
506447e89262Smrg    esac
506547e89262Smrg    ;;
506647e89262Smrg  esac
506747e89262Smrg  $ECHO "$win32_libid_type"
506847e89262Smrg}
5069bd1da9d7Smrg
5070899129b3Smrg# func_cygming_dll_for_implib ARG
5071899129b3Smrg#
5072899129b3Smrg# Platform-specific function to extract the
5073899129b3Smrg# name of the DLL associated with the specified
5074899129b3Smrg# import library ARG.
5075899129b3Smrg# Invoked by eval'ing the libtool variable
5076899129b3Smrg#    $sharedlib_from_linklib_cmd
5077899129b3Smrg# Result is available in the variable
5078899129b3Smrg#    $sharedlib_from_linklib_result
5079899129b3Smrgfunc_cygming_dll_for_implib ()
5080899129b3Smrg{
5081e6d2e958Smrg  $debug_cmd
5082e6d2e958Smrg
5083899129b3Smrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
5084899129b3Smrg}
5085899129b3Smrg
5086899129b3Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
5087899129b3Smrg#
5088899129b3Smrg# The is the core of a fallback implementation of a
5089899129b3Smrg# platform-specific function to extract the name of the
5090899129b3Smrg# DLL associated with the specified import library LIBNAME.
5091899129b3Smrg#
5092899129b3Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending
5093899129b3Smrg# on the platform and compiler that created the implib.
5094899129b3Smrg#
5095899129b3Smrg# Echos the name of the DLL associated with the
5096899129b3Smrg# specified import library.
5097899129b3Smrgfunc_cygming_dll_for_implib_fallback_core ()
5098899129b3Smrg{
5099e6d2e958Smrg  $debug_cmd
5100e6d2e958Smrg
5101899129b3Smrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
5102899129b3Smrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
5103899129b3Smrg    $SED '/^Contents of section '"$match_literal"':/{
5104899129b3Smrg      # Place marker at beginning of archive member dllname section
5105899129b3Smrg      s/.*/====MARK====/
5106899129b3Smrg      p
5107899129b3Smrg      d
5108899129b3Smrg    }
5109899129b3Smrg    # These lines can sometimes be longer than 43 characters, but
5110899129b3Smrg    # are always uninteresting
5111899129b3Smrg    /:[	 ]*file format pe[i]\{,1\}-/d
5112899129b3Smrg    /^In archive [^:]*:/d
5113899129b3Smrg    # Ensure marker is printed
5114899129b3Smrg    /^====MARK====/p
5115899129b3Smrg    # Remove all lines with less than 43 characters
5116899129b3Smrg    /^.\{43\}/!d
5117899129b3Smrg    # From remaining lines, remove first 43 characters
5118899129b3Smrg    s/^.\{43\}//' |
5119899129b3Smrg    $SED -n '
5120899129b3Smrg      # Join marker and all lines until next marker into a single line
5121899129b3Smrg      /^====MARK====/ b para
5122899129b3Smrg      H
5123899129b3Smrg      $ b para
5124899129b3Smrg      b
5125899129b3Smrg      :para
5126899129b3Smrg      x
5127899129b3Smrg      s/\n//g
5128899129b3Smrg      # Remove the marker
5129899129b3Smrg      s/^====MARK====//
5130899129b3Smrg      # Remove trailing dots and whitespace
5131899129b3Smrg      s/[\. \t]*$//
5132899129b3Smrg      # Print
5133899129b3Smrg      /./p' |
5134899129b3Smrg    # we now have a list, one entry per line, of the stringified
5135899129b3Smrg    # contents of the appropriate section of all members of the
5136e6d2e958Smrg    # archive that possess that section. Heuristic: eliminate
5137e6d2e958Smrg    # all those that have a first or second character that is
5138899129b3Smrg    # a '.' (that is, objdump's representation of an unprintable
5139899129b3Smrg    # character.) This should work for all archives with less than
5140899129b3Smrg    # 0x302f exports -- but will fail for DLLs whose name actually
5141899129b3Smrg    # begins with a literal '.' or a single character followed by
5142899129b3Smrg    # a '.'.
5143899129b3Smrg    #
5144899129b3Smrg    # Of those that remain, print the first one.
5145899129b3Smrg    $SED -e '/^\./d;/^.\./d;q'
5146899129b3Smrg}
5147899129b3Smrg
5148899129b3Smrg# func_cygming_dll_for_implib_fallback ARG
5149899129b3Smrg# Platform-specific function to extract the
5150899129b3Smrg# name of the DLL associated with the specified
5151899129b3Smrg# import library ARG.
5152899129b3Smrg#
5153899129b3Smrg# This fallback implementation is for use when $DLLTOOL
5154899129b3Smrg# does not support the --identify-strict option.
5155899129b3Smrg# Invoked by eval'ing the libtool variable
5156899129b3Smrg#    $sharedlib_from_linklib_cmd
5157899129b3Smrg# Result is available in the variable
5158899129b3Smrg#    $sharedlib_from_linklib_result
5159899129b3Smrgfunc_cygming_dll_for_implib_fallback ()
5160899129b3Smrg{
5161e6d2e958Smrg  $debug_cmd
5162e6d2e958Smrg
5163e6d2e958Smrg  if func_cygming_gnu_implib_p "$1"; then
5164899129b3Smrg    # binutils import library
5165899129b3Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
5166e6d2e958Smrg  elif func_cygming_ms_implib_p "$1"; then
5167899129b3Smrg    # ms-generated import library
5168899129b3Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
5169899129b3Smrg  else
5170899129b3Smrg    # unknown
5171e6d2e958Smrg    sharedlib_from_linklib_result=
5172899129b3Smrg  fi
5173899129b3Smrg}
5174bd1da9d7Smrg
5175bd1da9d7Smrg
517647e89262Smrg# func_extract_an_archive dir oldlib
517747e89262Smrgfunc_extract_an_archive ()
517847e89262Smrg{
5179e6d2e958Smrg    $debug_cmd
5180e6d2e958Smrg
5181e6d2e958Smrg    f_ex_an_ar_dir=$1; shift
5182e6d2e958Smrg    f_ex_an_ar_oldlib=$1
5183e6d2e958Smrg    if test yes = "$lock_old_archive_extraction"; then
518447e89262Smrg      lockfile=$f_ex_an_ar_oldlib.lock
518547e89262Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
518647e89262Smrg	func_echo "Waiting for $lockfile to be removed"
518747e89262Smrg	sleep 2
518847e89262Smrg      done
518947e89262Smrg    fi
519047e89262Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
519147e89262Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
5192e6d2e958Smrg    if test yes = "$lock_old_archive_extraction"; then
519347e89262Smrg      $opt_dry_run || rm -f "$lockfile"
519447e89262Smrg    fi
519547e89262Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
519647e89262Smrg     :
519747e89262Smrg    else
519847e89262Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
519947e89262Smrg    fi
520047e89262Smrg}
5201bd1da9d7Smrg
5202bd1da9d7Smrg
520347e89262Smrg# func_extract_archives gentop oldlib ...
520447e89262Smrgfunc_extract_archives ()
520547e89262Smrg{
5206e6d2e958Smrg    $debug_cmd
5207e6d2e958Smrg
5208e6d2e958Smrg    my_gentop=$1; shift
520947e89262Smrg    my_oldlibs=${1+"$@"}
5210e6d2e958Smrg    my_oldobjs=
5211e6d2e958Smrg    my_xlib=
5212e6d2e958Smrg    my_xabs=
5213e6d2e958Smrg    my_xdir=
5214bd1da9d7Smrg
521547e89262Smrg    for my_xlib in $my_oldlibs; do
521647e89262Smrg      # Extract the objects.
521747e89262Smrg      case $my_xlib in
5218e6d2e958Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
521947e89262Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
522047e89262Smrg      esac
522147e89262Smrg      func_basename "$my_xlib"
5222e6d2e958Smrg      my_xlib=$func_basename_result
522347e89262Smrg      my_xlib_u=$my_xlib
522447e89262Smrg      while :; do
522547e89262Smrg        case " $extracted_archives " in
522647e89262Smrg	*" $my_xlib_u "*)
522747e89262Smrg	  func_arith $extracted_serial + 1
522847e89262Smrg	  extracted_serial=$func_arith_result
522947e89262Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
523047e89262Smrg	*) break ;;
523147e89262Smrg	esac
523247e89262Smrg      done
523347e89262Smrg      extracted_archives="$extracted_archives $my_xlib_u"
5234e6d2e958Smrg      my_xdir=$my_gentop/$my_xlib_u
5235bd1da9d7Smrg
523647e89262Smrg      func_mkdir_p "$my_xdir"
523747e89262Smrg
523847e89262Smrg      case $host in
523947e89262Smrg      *-darwin*)
524047e89262Smrg	func_verbose "Extracting $my_xabs"
524147e89262Smrg	# Do not bother doing anything if just a dry run
524247e89262Smrg	$opt_dry_run || {
524347e89262Smrg	  darwin_orig_dir=`pwd`
524447e89262Smrg	  cd $my_xdir || exit $?
524547e89262Smrg	  darwin_archive=$my_xabs
524647e89262Smrg	  darwin_curdir=`pwd`
5247e6d2e958Smrg	  func_basename "$darwin_archive"
5248e6d2e958Smrg	  darwin_base_archive=$func_basename_result
524947e89262Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
525047e89262Smrg	  if test -n "$darwin_arches"; then
525147e89262Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
525247e89262Smrg	    darwin_arch=
525347e89262Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
5254e6d2e958Smrg	    for darwin_arch in  $darwin_arches; do
5255e6d2e958Smrg	      func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
5256e6d2e958Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
5257e6d2e958Smrg	      cd "unfat-$$/$darwin_base_archive-$darwin_arch"
5258e6d2e958Smrg	      func_extract_an_archive "`pwd`" "$darwin_base_archive"
525947e89262Smrg	      cd "$darwin_curdir"
5260e6d2e958Smrg	      $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
526147e89262Smrg	    done # $darwin_arches
526247e89262Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
5263e6d2e958Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
526447e89262Smrg	    darwin_file=
526547e89262Smrg	    darwin_files=
526647e89262Smrg	    for darwin_file in $darwin_filelist; do
526747e89262Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
526847e89262Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
526947e89262Smrg	    done # $darwin_filelist
527047e89262Smrg	    $RM -rf unfat-$$
527147e89262Smrg	    cd "$darwin_orig_dir"
5272bd1da9d7Smrg	  else
527347e89262Smrg	    cd $darwin_orig_dir
527447e89262Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
527547e89262Smrg	  fi # $darwin_arches
527647e89262Smrg	} # !$opt_dry_run
527747e89262Smrg	;;
527847e89262Smrg      *)
527947e89262Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
528047e89262Smrg	;;
528147e89262Smrg      esac
528247e89262Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
528347e89262Smrg    done
5284bd1da9d7Smrg
5285e6d2e958Smrg    func_extract_archives_result=$my_oldobjs
528647e89262Smrg}
5287bd1da9d7Smrg
5288bd1da9d7Smrg
528947e89262Smrg# func_emit_wrapper [arg=no]
529047e89262Smrg#
529147e89262Smrg# Emit a libtool wrapper script on stdout.
529247e89262Smrg# Don't directly open a file because we may want to
529347e89262Smrg# incorporate the script contents within a cygwin/mingw
529447e89262Smrg# wrapper executable.  Must ONLY be called from within
529547e89262Smrg# func_mode_link because it depends on a number of variables
529647e89262Smrg# set therein.
529747e89262Smrg#
529847e89262Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
529947e89262Smrg# variable will take.  If 'yes', then the emitted script
5300e6d2e958Smrg# will assume that the directory where it is stored is
530147e89262Smrg# the $objdir directory.  This is a cygwin/mingw-specific
530247e89262Smrg# behavior.
530347e89262Smrgfunc_emit_wrapper ()
530447e89262Smrg{
530547e89262Smrg	func_emit_wrapper_arg1=${1-no}
5306bd1da9d7Smrg
530747e89262Smrg	$ECHO "\
530847e89262Smrg#! $SHELL
5309bd1da9d7Smrg
531047e89262Smrg# $output - temporary wrapper script for $objdir/$outputname
5311e6d2e958Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
531247e89262Smrg#
531347e89262Smrg# The $output program cannot be directly executed until all the libtool
531447e89262Smrg# libraries that it depends on are installed.
531547e89262Smrg#
531647e89262Smrg# This wrapper script should never be moved out of the build directory.
531747e89262Smrg# If it is, it will not operate correctly.
5318bd1da9d7Smrg
531947e89262Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
532047e89262Smrg# metacharacters that are still active within double-quoted strings.
532147e89262Smrgsed_quote_subst='$sed_quote_subst'
5322bd1da9d7Smrg
532347e89262Smrg# Be Bourne compatible
532447e89262Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
532547e89262Smrg  emulate sh
532647e89262Smrg  NULLCMD=:
532747e89262Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
532847e89262Smrg  # is contrary to our usage.  Disable this feature.
532947e89262Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
533047e89262Smrg  setopt NO_GLOB_SUBST
533147e89262Smrgelse
533247e89262Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
533347e89262Smrgfi
533447e89262SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
533547e89262SmrgDUALCASE=1; export DUALCASE # for MKS sh
5336bd1da9d7Smrg
533747e89262Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
533847e89262Smrg# if CDPATH is set.
533947e89262Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
5340bd1da9d7Smrg
534147e89262Smrgrelink_command=\"$relink_command\"
5342bd1da9d7Smrg
534347e89262Smrg# This environment variable determines our operation mode.
534447e89262Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
534547e89262Smrg  # install mode needs the following variables:
534647e89262Smrg  generated_by_libtool_version='$macro_version'
534747e89262Smrg  notinst_deplibs='$notinst_deplibs'
534847e89262Smrgelse
534947e89262Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
535047e89262Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
535147e89262Smrg    file=\"\$0\""
5352bd1da9d7Smrg
535347e89262Smrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
535447e89262Smrg    $ECHO "\
5355bd1da9d7Smrg
535647e89262Smrg# A function that is used when there is no print builtin or printf.
535747e89262Smrgfunc_fallback_echo ()
535847e89262Smrg{
535947e89262Smrg  eval 'cat <<_LTECHO_EOF
536047e89262Smrg\$1
536147e89262Smrg_LTECHO_EOF'
536247e89262Smrg}
536347e89262Smrg    ECHO=\"$qECHO\"
536447e89262Smrg  fi
536547e89262Smrg
536647e89262Smrg# Very basic option parsing. These options are (a) specific to
536747e89262Smrg# the libtool wrapper, (b) are identical between the wrapper
5368e6d2e958Smrg# /script/ and the wrapper /executable/ that is used only on
536947e89262Smrg# windows platforms, and (c) all begin with the string "--lt-"
5370e6d2e958Smrg# (application programs are unlikely to have options that match
537147e89262Smrg# this pattern).
537247e89262Smrg#
537347e89262Smrg# There are only two supported options: --lt-debug and
537447e89262Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
537547e89262Smrg#
537647e89262Smrg# The first argument to this parsing function should be the
537747e89262Smrg# script's $0 value, followed by "$@".
537847e89262Smrglt_option_debug=
537947e89262Smrgfunc_parse_lt_options ()
538047e89262Smrg{
538147e89262Smrg  lt_script_arg0=\$0
538247e89262Smrg  shift
538347e89262Smrg  for lt_opt
538447e89262Smrg  do
538547e89262Smrg    case \"\$lt_opt\" in
538647e89262Smrg    --lt-debug) lt_option_debug=1 ;;
538747e89262Smrg    --lt-dump-script)
538847e89262Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
538947e89262Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
539047e89262Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
539147e89262Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
539247e89262Smrg        exit 0
539347e89262Smrg      ;;
539447e89262Smrg    --lt-*)
539547e89262Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
539647e89262Smrg        exit 1
5397bd1da9d7Smrg      ;;
539847e89262Smrg    esac
539947e89262Smrg  done
5400bd1da9d7Smrg
540147e89262Smrg  # Print the debug banner immediately:
540247e89262Smrg  if test -n \"\$lt_option_debug\"; then
5403e6d2e958Smrg    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
540447e89262Smrg  fi
540547e89262Smrg}
5406bd1da9d7Smrg
540747e89262Smrg# Used when --lt-debug. Prints its arguments to stdout
540847e89262Smrg# (redirection is the responsibility of the caller)
540947e89262Smrgfunc_lt_dump_args ()
541047e89262Smrg{
541147e89262Smrg  lt_dump_args_N=1;
541247e89262Smrg  for lt_arg
541347e89262Smrg  do
5414e6d2e958Smrg    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
541547e89262Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
541647e89262Smrg  done
541747e89262Smrg}
5418bd1da9d7Smrg
541947e89262Smrg# Core function for launching the target application
542047e89262Smrgfunc_exec_program_core ()
542147e89262Smrg{
542247e89262Smrg"
542347e89262Smrg  case $host in
542447e89262Smrg  # Backslashes separate directories on plain windows
542547e89262Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
542647e89262Smrg    $ECHO "\
542747e89262Smrg      if test -n \"\$lt_option_debug\"; then
5428e6d2e958Smrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
542947e89262Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
5430bd1da9d7Smrg      fi
543147e89262Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
543247e89262Smrg"
543347e89262Smrg    ;;
5434bd1da9d7Smrg
543547e89262Smrg  *)
543647e89262Smrg    $ECHO "\
543747e89262Smrg      if test -n \"\$lt_option_debug\"; then
5438e6d2e958Smrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
543947e89262Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
5440bd1da9d7Smrg      fi
544147e89262Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
544247e89262Smrg"
544347e89262Smrg    ;;
544447e89262Smrg  esac
544547e89262Smrg  $ECHO "\
544647e89262Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
544747e89262Smrg      exit 1
544847e89262Smrg}
5449bd1da9d7Smrg
545047e89262Smrg# A function to encapsulate launching the target application
545147e89262Smrg# Strips options in the --lt-* namespace from \$@ and
545247e89262Smrg# launches target application with the remaining arguments.
545347e89262Smrgfunc_exec_program ()
545447e89262Smrg{
5455899129b3Smrg  case \" \$* \" in
5456899129b3Smrg  *\\ --lt-*)
5457899129b3Smrg    for lt_wr_arg
5458899129b3Smrg    do
5459899129b3Smrg      case \$lt_wr_arg in
5460899129b3Smrg      --lt-*) ;;
5461899129b3Smrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
5462899129b3Smrg      esac
5463899129b3Smrg      shift
5464899129b3Smrg    done ;;
5465899129b3Smrg  esac
546647e89262Smrg  func_exec_program_core \${1+\"\$@\"}
546747e89262Smrg}
5468bd1da9d7Smrg
546947e89262Smrg  # Parse options
547047e89262Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
5471bd1da9d7Smrg
547247e89262Smrg  # Find the directory that this script lives in.
547347e89262Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
547447e89262Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
5475bd1da9d7Smrg
547647e89262Smrg  # Follow symbolic links until we get to the real thisdir.
547747e89262Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
547847e89262Smrg  while test -n \"\$file\"; do
547947e89262Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
5480bd1da9d7Smrg
548147e89262Smrg    # If there was a directory component, then change thisdir.
548247e89262Smrg    if test \"x\$destdir\" != \"x\$file\"; then
548347e89262Smrg      case \"\$destdir\" in
548447e89262Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
548547e89262Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
548647e89262Smrg      esac
548747e89262Smrg    fi
5488bd1da9d7Smrg
548947e89262Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
549047e89262Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
549147e89262Smrg  done
5492bd1da9d7Smrg
549347e89262Smrg  # Usually 'no', except on cygwin/mingw when embedded into
549447e89262Smrg  # the cwrapper.
549547e89262Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
549647e89262Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
549747e89262Smrg    # special case for '.'
549847e89262Smrg    if test \"\$thisdir\" = \".\"; then
549947e89262Smrg      thisdir=\`pwd\`
550047e89262Smrg    fi
550147e89262Smrg    # remove .libs from thisdir
550247e89262Smrg    case \"\$thisdir\" in
550347e89262Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
550447e89262Smrg    $objdir )   thisdir=. ;;
550547e89262Smrg    esac
550647e89262Smrg  fi
5507bd1da9d7Smrg
550847e89262Smrg  # Try to get the absolute directory name.
550947e89262Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
551047e89262Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
551147e89262Smrg"
5512bd1da9d7Smrg
5513e6d2e958Smrg	if test yes = "$fast_install"; then
551447e89262Smrg	  $ECHO "\
551547e89262Smrg  program=lt-'$outputname'$exeext
551647e89262Smrg  progdir=\"\$thisdir/$objdir\"
5517bd1da9d7Smrg
551847e89262Smrg  if test ! -f \"\$progdir/\$program\" ||
5519e6d2e958Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
552047e89262Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
5521bd1da9d7Smrg
552247e89262Smrg    file=\"\$\$-\$program\"
5523bd1da9d7Smrg
552447e89262Smrg    if test ! -d \"\$progdir\"; then
552547e89262Smrg      $MKDIR \"\$progdir\"
552647e89262Smrg    else
552747e89262Smrg      $RM \"\$progdir/\$file\"
552847e89262Smrg    fi"
5529bd1da9d7Smrg
553047e89262Smrg	  $ECHO "\
5531bd1da9d7Smrg
553247e89262Smrg    # relink executable if necessary
553347e89262Smrg    if test -n \"\$relink_command\"; then
553447e89262Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
553547e89262Smrg      else
5536e6d2e958Smrg	\$ECHO \"\$relink_command_output\" >&2
553747e89262Smrg	$RM \"\$progdir/\$file\"
553847e89262Smrg	exit 1
553947e89262Smrg      fi
554047e89262Smrg    fi
5541bd1da9d7Smrg
554247e89262Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
554347e89262Smrg    { $RM \"\$progdir/\$program\";
554447e89262Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
554547e89262Smrg    $RM \"\$progdir/\$file\"
554647e89262Smrg  fi"
554747e89262Smrg	else
554847e89262Smrg	  $ECHO "\
554947e89262Smrg  program='$outputname'
555047e89262Smrg  progdir=\"\$thisdir/$objdir\"
555147e89262Smrg"
555247e89262Smrg	fi
5553bd1da9d7Smrg
555447e89262Smrg	$ECHO "\
5555bd1da9d7Smrg
555647e89262Smrg  if test -f \"\$progdir/\$program\"; then"
5557bd1da9d7Smrg
5558899129b3Smrg	# fixup the dll searchpath if we need to.
5559899129b3Smrg	#
5560899129b3Smrg	# Fix the DLL searchpath if we need to.  Do this before prepending
5561899129b3Smrg	# to shlibpath, because on Windows, both are PATH and uninstalled
5562899129b3Smrg	# libraries must come first.
5563899129b3Smrg	if test -n "$dllsearchpath"; then
5564899129b3Smrg	  $ECHO "\
5565899129b3Smrg    # Add the dll search path components to the executable PATH
5566899129b3Smrg    PATH=$dllsearchpath:\$PATH
5567899129b3Smrg"
5568899129b3Smrg	fi
5569899129b3Smrg
557047e89262Smrg	# Export our shlibpath_var if we have one.
5571e6d2e958Smrg	if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
557247e89262Smrg	  $ECHO "\
557347e89262Smrg    # Add our own library path to $shlibpath_var
557447e89262Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
5575bd1da9d7Smrg
557647e89262Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
557747e89262Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
557847e89262Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
5579bd1da9d7Smrg
558047e89262Smrg    export $shlibpath_var
558147e89262Smrg"
558247e89262Smrg	fi
5583bd1da9d7Smrg
558447e89262Smrg	$ECHO "\
558547e89262Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
558647e89262Smrg      # Run the actual program with our arguments.
558747e89262Smrg      func_exec_program \${1+\"\$@\"}
558847e89262Smrg    fi
558947e89262Smrg  else
559047e89262Smrg    # The program doesn't exist.
5591e6d2e958Smrg    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
559247e89262Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
559347e89262Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
559447e89262Smrg    exit 1
559547e89262Smrg  fi
559647e89262Smrgfi\
559747e89262Smrg"
559847e89262Smrg}
5599bd1da9d7Smrg
5600bd1da9d7Smrg
560147e89262Smrg# func_emit_cwrapperexe_src
560247e89262Smrg# emit the source code for a wrapper executable on stdout
560347e89262Smrg# Must ONLY be called from within func_mode_link because
560447e89262Smrg# it depends on a number of variable set therein.
560547e89262Smrgfunc_emit_cwrapperexe_src ()
560647e89262Smrg{
560747e89262Smrg	cat <<EOF
5608bd1da9d7Smrg
560947e89262Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
5610e6d2e958Smrg   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5611bd1da9d7Smrg
561247e89262Smrg   The $output program cannot be directly executed until all the libtool
561347e89262Smrg   libraries that it depends on are installed.
5614bd1da9d7Smrg
561547e89262Smrg   This wrapper executable should never be moved out of the build directory.
561647e89262Smrg   If it is, it will not operate correctly.
561747e89262Smrg*/
561847e89262SmrgEOF
561947e89262Smrg	    cat <<"EOF"
562047e89262Smrg#ifdef _MSC_VER
562147e89262Smrg# define _CRT_SECURE_NO_DEPRECATE 1
562247e89262Smrg#endif
562347e89262Smrg#include <stdio.h>
562447e89262Smrg#include <stdlib.h>
562547e89262Smrg#ifdef _MSC_VER
562647e89262Smrg# include <direct.h>
562747e89262Smrg# include <process.h>
562847e89262Smrg# include <io.h>
562947e89262Smrg#else
563047e89262Smrg# include <unistd.h>
563147e89262Smrg# include <stdint.h>
563247e89262Smrg# ifdef __CYGWIN__
563347e89262Smrg#  include <io.h>
563447e89262Smrg# endif
563547e89262Smrg#endif
563647e89262Smrg#include <malloc.h>
563747e89262Smrg#include <stdarg.h>
563847e89262Smrg#include <assert.h>
563947e89262Smrg#include <string.h>
564047e89262Smrg#include <ctype.h>
564147e89262Smrg#include <errno.h>
564247e89262Smrg#include <fcntl.h>
564347e89262Smrg#include <sys/stat.h>
5644bd1da9d7Smrg
5645e6d2e958Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
5646e6d2e958Smrg
564747e89262Smrg/* declarations of non-ANSI functions */
5648e6d2e958Smrg#if defined __MINGW32__
564947e89262Smrg# ifdef __STRICT_ANSI__
565047e89262Smrgint _putenv (const char *);
565147e89262Smrg# endif
5652e6d2e958Smrg#elif defined __CYGWIN__
565347e89262Smrg# ifdef __STRICT_ANSI__
565447e89262Smrgchar *realpath (const char *, char *);
565547e89262Smrgint putenv (char *);
565647e89262Smrgint setenv (const char *, const char *, int);
565747e89262Smrg# endif
5658e6d2e958Smrg/* #elif defined other_platform || defined ... */
565947e89262Smrg#endif
5660bd1da9d7Smrg
566147e89262Smrg/* portability defines, excluding path handling macros */
5662e6d2e958Smrg#if defined _MSC_VER
566347e89262Smrg# define setmode _setmode
566447e89262Smrg# define stat    _stat
566547e89262Smrg# define chmod   _chmod
566647e89262Smrg# define getcwd  _getcwd
566747e89262Smrg# define putenv  _putenv
566847e89262Smrg# define S_IXUSR _S_IEXEC
5669e6d2e958Smrg#elif defined __MINGW32__
567047e89262Smrg# define setmode _setmode
567147e89262Smrg# define stat    _stat
567247e89262Smrg# define chmod   _chmod
567347e89262Smrg# define getcwd  _getcwd
567447e89262Smrg# define putenv  _putenv
5675e6d2e958Smrg#elif defined __CYGWIN__
567647e89262Smrg# define HAVE_SETENV
567747e89262Smrg# define FOPEN_WB "wb"
5678e6d2e958Smrg/* #elif defined other platforms ... */
567947e89262Smrg#endif
5680bd1da9d7Smrg
5681e6d2e958Smrg#if defined PATH_MAX
568247e89262Smrg# define LT_PATHMAX PATH_MAX
5683e6d2e958Smrg#elif defined MAXPATHLEN
568447e89262Smrg# define LT_PATHMAX MAXPATHLEN
568547e89262Smrg#else
568647e89262Smrg# define LT_PATHMAX 1024
568747e89262Smrg#endif
5688bd1da9d7Smrg
568947e89262Smrg#ifndef S_IXOTH
569047e89262Smrg# define S_IXOTH 0
569147e89262Smrg#endif
569247e89262Smrg#ifndef S_IXGRP
569347e89262Smrg# define S_IXGRP 0
569447e89262Smrg#endif
5695bd1da9d7Smrg
569647e89262Smrg/* path handling portability macros */
569747e89262Smrg#ifndef DIR_SEPARATOR
569847e89262Smrg# define DIR_SEPARATOR '/'
569947e89262Smrg# define PATH_SEPARATOR ':'
570047e89262Smrg#endif
5701bd1da9d7Smrg
5702e6d2e958Smrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
5703e6d2e958Smrg  defined __OS2__
570447e89262Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
570547e89262Smrg# define FOPEN_WB "wb"
570647e89262Smrg# ifndef DIR_SEPARATOR_2
570747e89262Smrg#  define DIR_SEPARATOR_2 '\\'
570847e89262Smrg# endif
570947e89262Smrg# ifndef PATH_SEPARATOR_2
571047e89262Smrg#  define PATH_SEPARATOR_2 ';'
571147e89262Smrg# endif
571247e89262Smrg#endif
5713bd1da9d7Smrg
571447e89262Smrg#ifndef DIR_SEPARATOR_2
571547e89262Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
571647e89262Smrg#else /* DIR_SEPARATOR_2 */
571747e89262Smrg# define IS_DIR_SEPARATOR(ch) \
571847e89262Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
571947e89262Smrg#endif /* DIR_SEPARATOR_2 */
5720bd1da9d7Smrg
572147e89262Smrg#ifndef PATH_SEPARATOR_2
572247e89262Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
572347e89262Smrg#else /* PATH_SEPARATOR_2 */
572447e89262Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
572547e89262Smrg#endif /* PATH_SEPARATOR_2 */
572647e89262Smrg
572747e89262Smrg#ifndef FOPEN_WB
572847e89262Smrg# define FOPEN_WB "w"
572947e89262Smrg#endif
573047e89262Smrg#ifndef _O_BINARY
573147e89262Smrg# define _O_BINARY 0
573247e89262Smrg#endif
573347e89262Smrg
573447e89262Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
573547e89262Smrg#define XFREE(stale) do { \
5736e6d2e958Smrg  if (stale) { free (stale); stale = 0; } \
573747e89262Smrg} while (0)
573847e89262Smrg
5739e6d2e958Smrg#if defined LT_DEBUGWRAPPER
574047e89262Smrgstatic int lt_debug = 1;
574147e89262Smrg#else
574247e89262Smrgstatic int lt_debug = 0;
574347e89262Smrg#endif
574447e89262Smrg
574547e89262Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
574647e89262Smrg
574747e89262Smrgvoid *xmalloc (size_t num);
574847e89262Smrgchar *xstrdup (const char *string);
574947e89262Smrgconst char *base_name (const char *name);
575047e89262Smrgchar *find_executable (const char *wrapper);
575147e89262Smrgchar *chase_symlinks (const char *pathspec);
575247e89262Smrgint make_executable (const char *path);
575347e89262Smrgint check_executable (const char *path);
575447e89262Smrgchar *strendzap (char *str, const char *pat);
575547e89262Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
575647e89262Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
575747e89262Smrgstatic const char *nonnull (const char *s);
575847e89262Smrgstatic const char *nonempty (const char *s);
575947e89262Smrgvoid lt_setenv (const char *name, const char *value);
576047e89262Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
576147e89262Smrgvoid lt_update_exe_path (const char *name, const char *value);
576247e89262Smrgvoid lt_update_lib_path (const char *name, const char *value);
576347e89262Smrgchar **prepare_spawn (char **argv);
576447e89262Smrgvoid lt_dump_script (FILE *f);
576547e89262SmrgEOF
576647e89262Smrg
576747e89262Smrg	    cat <<EOF
5768e6d2e958Smrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
5769e6d2e958Smrg# define externally_visible volatile
5770e6d2e958Smrg#else
5771e6d2e958Smrg# define externally_visible __attribute__((externally_visible)) volatile
5772e6d2e958Smrg#endif
5773e6d2e958Smrgexternally_visible const char * MAGIC_EXE = "$magic_exe";
577447e89262Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
577547e89262SmrgEOF
577647e89262Smrg
5777e6d2e958Smrg	    if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5778899129b3Smrg              func_to_host_path "$temp_rpath"
577947e89262Smrg	      cat <<EOF
5780899129b3Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
5781bd1da9d7SmrgEOF
5782bd1da9d7Smrg	    else
578347e89262Smrg	      cat <<"EOF"
578447e89262Smrgconst char * LIB_PATH_VALUE   = "";
578547e89262SmrgEOF
5786bd1da9d7Smrg	    fi
578747e89262Smrg
578847e89262Smrg	    if test -n "$dllsearchpath"; then
5789899129b3Smrg              func_to_host_path "$dllsearchpath:"
579047e89262Smrg	      cat <<EOF
579147e89262Smrgconst char * EXE_PATH_VARNAME = "PATH";
5792899129b3Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
579347e89262SmrgEOF
5794bd1da9d7Smrg	    else
579547e89262Smrg	      cat <<"EOF"
579647e89262Smrgconst char * EXE_PATH_VARNAME = "";
579747e89262Smrgconst char * EXE_PATH_VALUE   = "";
579847e89262SmrgEOF
5799bd1da9d7Smrg	    fi
580047e89262Smrg
5801e6d2e958Smrg	    if test yes = "$fast_install"; then
580247e89262Smrg	      cat <<EOF
580347e89262Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
580447e89262SmrgEOF
5805bd1da9d7Smrg	    else
580647e89262Smrg	      cat <<EOF
580747e89262Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
580847e89262SmrgEOF
5809bd1da9d7Smrg	    fi
5810bd1da9d7Smrg
5811bd1da9d7Smrg
581247e89262Smrg	    cat <<"EOF"
5813bd1da9d7Smrg
581447e89262Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
5815bd1da9d7Smrg
581647e89262Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
581747e89262Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
581847e89262Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
5819bd1da9d7Smrg
582047e89262Smrgint
582147e89262Smrgmain (int argc, char *argv[])
582247e89262Smrg{
582347e89262Smrg  char **newargz;
582447e89262Smrg  int  newargc;
582547e89262Smrg  char *tmp_pathspec;
582647e89262Smrg  char *actual_cwrapper_path;
582747e89262Smrg  char *actual_cwrapper_name;
582847e89262Smrg  char *target_name;
582947e89262Smrg  char *lt_argv_zero;
5830e6d2e958Smrg  int rval = 127;
5831bd1da9d7Smrg
583247e89262Smrg  int i;
5833bd1da9d7Smrg
583447e89262Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
5835e6d2e958Smrg  newargz = XMALLOC (char *, (size_t) argc + 1);
5836bd1da9d7Smrg
583747e89262Smrg  /* very simple arg parsing; don't want to rely on getopt
583847e89262Smrg   * also, copy all non cwrapper options to newargz, except
583947e89262Smrg   * argz[0], which is handled differently
584047e89262Smrg   */
584147e89262Smrg  newargc=0;
584247e89262Smrg  for (i = 1; i < argc; i++)
584347e89262Smrg    {
5844e6d2e958Smrg      if (STREQ (argv[i], dumpscript_opt))
584547e89262Smrg	{
584647e89262SmrgEOF
5847e6d2e958Smrg	    case $host in
584847e89262Smrg	      *mingw* | *cygwin* )
584947e89262Smrg		# make stdout use "unix" line endings
585047e89262Smrg		echo "          setmode(1,_O_BINARY);"
585147e89262Smrg		;;
58525bcb6992Smrg	      esac
5853bd1da9d7Smrg
585447e89262Smrg	    cat <<"EOF"
585547e89262Smrg	  lt_dump_script (stdout);
585647e89262Smrg	  return 0;
585747e89262Smrg	}
5858e6d2e958Smrg      if (STREQ (argv[i], debug_opt))
585947e89262Smrg	{
586047e89262Smrg          lt_debug = 1;
586147e89262Smrg          continue;
586247e89262Smrg	}
5863e6d2e958Smrg      if (STREQ (argv[i], ltwrapper_option_prefix))
586447e89262Smrg        {
586547e89262Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
586647e89262Smrg             namespace, but it is not one of the ones we know about and
586747e89262Smrg             have already dealt with, above (inluding dump-script), then
586847e89262Smrg             report an error. Otherwise, targets might begin to believe
586947e89262Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
587047e89262Smrg             namespace. The first time any user complains about this, we'll
587147e89262Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
587247e89262Smrg             or a configure.ac-settable value.
587347e89262Smrg           */
587447e89262Smrg          lt_fatal (__FILE__, __LINE__,
587547e89262Smrg		    "unrecognized %s option: '%s'",
587647e89262Smrg                    ltwrapper_option_prefix, argv[i]);
587747e89262Smrg        }
587847e89262Smrg      /* otherwise ... */
587947e89262Smrg      newargz[++newargc] = xstrdup (argv[i]);
588047e89262Smrg    }
588147e89262Smrg  newargz[++newargc] = NULL;
5882bd1da9d7Smrg
588347e89262SmrgEOF
588447e89262Smrg	    cat <<EOF
588547e89262Smrg  /* The GNU banner must be the first non-error debug message */
5886e6d2e958Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
588747e89262SmrgEOF
588847e89262Smrg	    cat <<"EOF"
588947e89262Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
589047e89262Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
589147e89262Smrg
589247e89262Smrg  tmp_pathspec = find_executable (argv[0]);
589347e89262Smrg  if (tmp_pathspec == NULL)
589447e89262Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
589547e89262Smrg  lt_debugprintf (__FILE__, __LINE__,
589647e89262Smrg                  "(main) found exe (before symlink chase) at: %s\n",
589747e89262Smrg		  tmp_pathspec);
589847e89262Smrg
589947e89262Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
590047e89262Smrg  lt_debugprintf (__FILE__, __LINE__,
590147e89262Smrg                  "(main) found exe (after symlink chase) at: %s\n",
590247e89262Smrg		  actual_cwrapper_path);
590347e89262Smrg  XFREE (tmp_pathspec);
590447e89262Smrg
590547e89262Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
590647e89262Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
590747e89262Smrg
590847e89262Smrg  /* wrapper name transforms */
590947e89262Smrg  strendzap (actual_cwrapper_name, ".exe");
591047e89262Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
591147e89262Smrg  XFREE (actual_cwrapper_name);
591247e89262Smrg  actual_cwrapper_name = tmp_pathspec;
591347e89262Smrg  tmp_pathspec = 0;
591447e89262Smrg
591547e89262Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
591647e89262Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
591747e89262Smrg  strendzap (target_name, ".exe");
591847e89262Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
591947e89262Smrg  XFREE (target_name);
592047e89262Smrg  target_name = tmp_pathspec;
592147e89262Smrg  tmp_pathspec = 0;
592247e89262Smrg
592347e89262Smrg  lt_debugprintf (__FILE__, __LINE__,
592447e89262Smrg		  "(main) libtool target name: %s\n",
592547e89262Smrg		  target_name);
592647e89262SmrgEOF
5927bd1da9d7Smrg
592847e89262Smrg	    cat <<EOF
592947e89262Smrg  newargz[0] =
593047e89262Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
593147e89262Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
593247e89262Smrg  strcpy (newargz[0], actual_cwrapper_path);
593347e89262Smrg  strcat (newargz[0], "$objdir");
593447e89262Smrg  strcat (newargz[0], "/");
593547e89262SmrgEOF
5936bd1da9d7Smrg
593747e89262Smrg	    cat <<"EOF"
593847e89262Smrg  /* stop here, and copy so we don't have to do this twice */
593947e89262Smrg  tmp_pathspec = xstrdup (newargz[0]);
5940bd1da9d7Smrg
594147e89262Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
594247e89262Smrg  strcat (newargz[0], actual_cwrapper_name);
5943bd1da9d7Smrg
594447e89262Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
594547e89262Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
594647e89262Smrg  XFREE (tmp_pathspec);
594747e89262Smrg  tmp_pathspec = NULL;
594847e89262SmrgEOF
5949bd1da9d7Smrg
595047e89262Smrg	    case $host_os in
595147e89262Smrg	      mingw*)
595247e89262Smrg	    cat <<"EOF"
595347e89262Smrg  {
595447e89262Smrg    char* p;
595547e89262Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
595647e89262Smrg      {
595747e89262Smrg	*p = '/';
595847e89262Smrg      }
595947e89262Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
596047e89262Smrg      {
596147e89262Smrg	*p = '/';
596247e89262Smrg      }
596347e89262Smrg  }
596447e89262SmrgEOF
596547e89262Smrg	    ;;
596647e89262Smrg	    esac
5967bd1da9d7Smrg
596847e89262Smrg	    cat <<"EOF"
596947e89262Smrg  XFREE (target_name);
597047e89262Smrg  XFREE (actual_cwrapper_path);
597147e89262Smrg  XFREE (actual_cwrapper_name);
5972bd1da9d7Smrg
597347e89262Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
597447e89262Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
5975899129b3Smrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
5976899129b3Smrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
5977899129b3Smrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
5978899129b3Smrg     libraries must come first. */
597947e89262Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
5980899129b3Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
5981bd1da9d7Smrg
598247e89262Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
598347e89262Smrg		  nonnull (lt_argv_zero));
598447e89262Smrg  for (i = 0; i < newargc; i++)
598547e89262Smrg    {
598647e89262Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
598747e89262Smrg		      i, nonnull (newargz[i]));
598847e89262Smrg    }
5989bd1da9d7Smrg
599047e89262SmrgEOF
5991bd1da9d7Smrg
599247e89262Smrg	    case $host_os in
599347e89262Smrg	      mingw*)
599447e89262Smrg		cat <<"EOF"
599547e89262Smrg  /* execv doesn't actually work on mingw as expected on unix */
599647e89262Smrg  newargz = prepare_spawn (newargz);
5997e6d2e958Smrg  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
599847e89262Smrg  if (rval == -1)
599947e89262Smrg    {
600047e89262Smrg      /* failed to start process */
600147e89262Smrg      lt_debugprintf (__FILE__, __LINE__,
600247e89262Smrg		      "(main) failed to launch target \"%s\": %s\n",
600347e89262Smrg		      lt_argv_zero, nonnull (strerror (errno)));
600447e89262Smrg      return 127;
600547e89262Smrg    }
600647e89262Smrg  return rval;
600747e89262SmrgEOF
600847e89262Smrg		;;
600947e89262Smrg	      *)
601047e89262Smrg		cat <<"EOF"
601147e89262Smrg  execv (lt_argv_zero, newargz);
601247e89262Smrg  return rval; /* =127, but avoids unused variable warning */
601347e89262SmrgEOF
601447e89262Smrg		;;
601547e89262Smrg	    esac
6016bd1da9d7Smrg
601747e89262Smrg	    cat <<"EOF"
601847e89262Smrg}
6019bd1da9d7Smrg
602047e89262Smrgvoid *
602147e89262Smrgxmalloc (size_t num)
602247e89262Smrg{
602347e89262Smrg  void *p = (void *) malloc (num);
602447e89262Smrg  if (!p)
602547e89262Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
6026bd1da9d7Smrg
602747e89262Smrg  return p;
602847e89262Smrg}
6029bd1da9d7Smrg
603047e89262Smrgchar *
603147e89262Smrgxstrdup (const char *string)
603247e89262Smrg{
603347e89262Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
603447e89262Smrg			  string) : NULL;
603547e89262Smrg}
6036bd1da9d7Smrg
603747e89262Smrgconst char *
603847e89262Smrgbase_name (const char *name)
603947e89262Smrg{
604047e89262Smrg  const char *base;
6041bd1da9d7Smrg
6042e6d2e958Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
604347e89262Smrg  /* Skip over the disk name in MSDOS pathnames. */
604447e89262Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
604547e89262Smrg    name += 2;
604647e89262Smrg#endif
6047bd1da9d7Smrg
604847e89262Smrg  for (base = name; *name; name++)
604947e89262Smrg    if (IS_DIR_SEPARATOR (*name))
605047e89262Smrg      base = name + 1;
605147e89262Smrg  return base;
605247e89262Smrg}
6053bd1da9d7Smrg
605447e89262Smrgint
605547e89262Smrgcheck_executable (const char *path)
605647e89262Smrg{
605747e89262Smrg  struct stat st;
6058bd1da9d7Smrg
605947e89262Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
606047e89262Smrg                  nonempty (path));
606147e89262Smrg  if ((!path) || (!*path))
606247e89262Smrg    return 0;
6063bd1da9d7Smrg
606447e89262Smrg  if ((stat (path, &st) >= 0)
606547e89262Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
606647e89262Smrg    return 1;
606747e89262Smrg  else
606847e89262Smrg    return 0;
606947e89262Smrg}
6070bd1da9d7Smrg
607147e89262Smrgint
607247e89262Smrgmake_executable (const char *path)
607347e89262Smrg{
607447e89262Smrg  int rval = 0;
607547e89262Smrg  struct stat st;
6076bd1da9d7Smrg
607747e89262Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
607847e89262Smrg                  nonempty (path));
607947e89262Smrg  if ((!path) || (!*path))
608047e89262Smrg    return 0;
6081bd1da9d7Smrg
608247e89262Smrg  if (stat (path, &st) >= 0)
608347e89262Smrg    {
608447e89262Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
608547e89262Smrg    }
608647e89262Smrg  return rval;
608747e89262Smrg}
6088bd1da9d7Smrg
608947e89262Smrg/* Searches for the full path of the wrapper.  Returns
609047e89262Smrg   newly allocated full path name if found, NULL otherwise
609147e89262Smrg   Does not chase symlinks, even on platforms that support them.
609247e89262Smrg*/
609347e89262Smrgchar *
609447e89262Smrgfind_executable (const char *wrapper)
609547e89262Smrg{
609647e89262Smrg  int has_slash = 0;
609747e89262Smrg  const char *p;
609847e89262Smrg  const char *p_next;
609947e89262Smrg  /* static buffer for getcwd */
610047e89262Smrg  char tmp[LT_PATHMAX + 1];
6101e6d2e958Smrg  size_t tmp_len;
610247e89262Smrg  char *concat_name;
6103bd1da9d7Smrg
610447e89262Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
610547e89262Smrg                  nonempty (wrapper));
6106bd1da9d7Smrg
610747e89262Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
610847e89262Smrg    return NULL;
6109bd1da9d7Smrg
611047e89262Smrg  /* Absolute path? */
6111e6d2e958Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
611247e89262Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
611347e89262Smrg    {
611447e89262Smrg      concat_name = xstrdup (wrapper);
611547e89262Smrg      if (check_executable (concat_name))
611647e89262Smrg	return concat_name;
611747e89262Smrg      XFREE (concat_name);
611847e89262Smrg    }
611947e89262Smrg  else
612047e89262Smrg    {
612147e89262Smrg#endif
612247e89262Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
612347e89262Smrg	{
612447e89262Smrg	  concat_name = xstrdup (wrapper);
612547e89262Smrg	  if (check_executable (concat_name))
612647e89262Smrg	    return concat_name;
612747e89262Smrg	  XFREE (concat_name);
612847e89262Smrg	}
6129e6d2e958Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
613047e89262Smrg    }
613147e89262Smrg#endif
6132bd1da9d7Smrg
613347e89262Smrg  for (p = wrapper; *p; p++)
613447e89262Smrg    if (*p == '/')
613547e89262Smrg      {
613647e89262Smrg	has_slash = 1;
613747e89262Smrg	break;
613847e89262Smrg      }
613947e89262Smrg  if (!has_slash)
614047e89262Smrg    {
614147e89262Smrg      /* no slashes; search PATH */
614247e89262Smrg      const char *path = getenv ("PATH");
614347e89262Smrg      if (path != NULL)
614447e89262Smrg	{
614547e89262Smrg	  for (p = path; *p; p = p_next)
614647e89262Smrg	    {
614747e89262Smrg	      const char *q;
614847e89262Smrg	      size_t p_len;
614947e89262Smrg	      for (q = p; *q; q++)
615047e89262Smrg		if (IS_PATH_SEPARATOR (*q))
615147e89262Smrg		  break;
6152e6d2e958Smrg	      p_len = (size_t) (q - p);
615347e89262Smrg	      p_next = (*q == '\0' ? q : q + 1);
615447e89262Smrg	      if (p_len == 0)
615547e89262Smrg		{
615647e89262Smrg		  /* empty path: current directory */
615747e89262Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
615847e89262Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
615947e89262Smrg                              nonnull (strerror (errno)));
616047e89262Smrg		  tmp_len = strlen (tmp);
616147e89262Smrg		  concat_name =
616247e89262Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
616347e89262Smrg		  memcpy (concat_name, tmp, tmp_len);
616447e89262Smrg		  concat_name[tmp_len] = '/';
616547e89262Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
616647e89262Smrg		}
616747e89262Smrg	      else
616847e89262Smrg		{
616947e89262Smrg		  concat_name =
617047e89262Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
617147e89262Smrg		  memcpy (concat_name, p, p_len);
617247e89262Smrg		  concat_name[p_len] = '/';
617347e89262Smrg		  strcpy (concat_name + p_len + 1, wrapper);
617447e89262Smrg		}
617547e89262Smrg	      if (check_executable (concat_name))
617647e89262Smrg		return concat_name;
617747e89262Smrg	      XFREE (concat_name);
617847e89262Smrg	    }
617947e89262Smrg	}
618047e89262Smrg      /* not found in PATH; assume curdir */
618147e89262Smrg    }
618247e89262Smrg  /* Relative path | not found in path: prepend cwd */
618347e89262Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
618447e89262Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
618547e89262Smrg              nonnull (strerror (errno)));
618647e89262Smrg  tmp_len = strlen (tmp);
618747e89262Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
618847e89262Smrg  memcpy (concat_name, tmp, tmp_len);
618947e89262Smrg  concat_name[tmp_len] = '/';
619047e89262Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
6191bd1da9d7Smrg
619247e89262Smrg  if (check_executable (concat_name))
619347e89262Smrg    return concat_name;
619447e89262Smrg  XFREE (concat_name);
619547e89262Smrg  return NULL;
619647e89262Smrg}
6197bd1da9d7Smrg
619847e89262Smrgchar *
619947e89262Smrgchase_symlinks (const char *pathspec)
620047e89262Smrg{
620147e89262Smrg#ifndef S_ISLNK
620247e89262Smrg  return xstrdup (pathspec);
620347e89262Smrg#else
620447e89262Smrg  char buf[LT_PATHMAX];
620547e89262Smrg  struct stat s;
620647e89262Smrg  char *tmp_pathspec = xstrdup (pathspec);
620747e89262Smrg  char *p;
620847e89262Smrg  int has_symlinks = 0;
620947e89262Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
621047e89262Smrg    {
621147e89262Smrg      lt_debugprintf (__FILE__, __LINE__,
621247e89262Smrg		      "checking path component for symlinks: %s\n",
621347e89262Smrg		      tmp_pathspec);
621447e89262Smrg      if (lstat (tmp_pathspec, &s) == 0)
621547e89262Smrg	{
621647e89262Smrg	  if (S_ISLNK (s.st_mode) != 0)
621747e89262Smrg	    {
621847e89262Smrg	      has_symlinks = 1;
621947e89262Smrg	      break;
622047e89262Smrg	    }
6221bd1da9d7Smrg
622247e89262Smrg	  /* search backwards for last DIR_SEPARATOR */
622347e89262Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
622447e89262Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
622547e89262Smrg	    p--;
622647e89262Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
622747e89262Smrg	    {
622847e89262Smrg	      /* no more DIR_SEPARATORS left */
622947e89262Smrg	      break;
623047e89262Smrg	    }
623147e89262Smrg	  *p = '\0';
623247e89262Smrg	}
623347e89262Smrg      else
623447e89262Smrg	{
623547e89262Smrg	  lt_fatal (__FILE__, __LINE__,
623647e89262Smrg		    "error accessing file \"%s\": %s",
623747e89262Smrg		    tmp_pathspec, nonnull (strerror (errno)));
623847e89262Smrg	}
623947e89262Smrg    }
624047e89262Smrg  XFREE (tmp_pathspec);
6241bd1da9d7Smrg
624247e89262Smrg  if (!has_symlinks)
624347e89262Smrg    {
624447e89262Smrg      return xstrdup (pathspec);
624547e89262Smrg    }
6246bd1da9d7Smrg
624747e89262Smrg  tmp_pathspec = realpath (pathspec, buf);
624847e89262Smrg  if (tmp_pathspec == 0)
624947e89262Smrg    {
625047e89262Smrg      lt_fatal (__FILE__, __LINE__,
625147e89262Smrg		"could not follow symlinks for %s", pathspec);
625247e89262Smrg    }
625347e89262Smrg  return xstrdup (tmp_pathspec);
625447e89262Smrg#endif
625547e89262Smrg}
6256bd1da9d7Smrg
625747e89262Smrgchar *
625847e89262Smrgstrendzap (char *str, const char *pat)
625947e89262Smrg{
626047e89262Smrg  size_t len, patlen;
6261bd1da9d7Smrg
626247e89262Smrg  assert (str != NULL);
626347e89262Smrg  assert (pat != NULL);
6264bd1da9d7Smrg
626547e89262Smrg  len = strlen (str);
626647e89262Smrg  patlen = strlen (pat);
6267bd1da9d7Smrg
626847e89262Smrg  if (patlen <= len)
626947e89262Smrg    {
627047e89262Smrg      str += len - patlen;
6271e6d2e958Smrg      if (STREQ (str, pat))
627247e89262Smrg	*str = '\0';
627347e89262Smrg    }
627447e89262Smrg  return str;
627547e89262Smrg}
6276bd1da9d7Smrg
627747e89262Smrgvoid
627847e89262Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
627947e89262Smrg{
628047e89262Smrg  va_list args;
628147e89262Smrg  if (lt_debug)
628247e89262Smrg    {
628347e89262Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
628447e89262Smrg      va_start (args, fmt);
628547e89262Smrg      (void) vfprintf (stderr, fmt, args);
628647e89262Smrg      va_end (args);
628747e89262Smrg    }
628847e89262Smrg}
6289bd1da9d7Smrg
629047e89262Smrgstatic void
629147e89262Smrglt_error_core (int exit_status, const char *file,
629247e89262Smrg	       int line, const char *mode,
629347e89262Smrg	       const char *message, va_list ap)
629447e89262Smrg{
629547e89262Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
629647e89262Smrg  vfprintf (stderr, message, ap);
629747e89262Smrg  fprintf (stderr, ".\n");
6298bd1da9d7Smrg
629947e89262Smrg  if (exit_status >= 0)
630047e89262Smrg    exit (exit_status);
630147e89262Smrg}
6302bd1da9d7Smrg
630347e89262Smrgvoid
630447e89262Smrglt_fatal (const char *file, int line, const char *message, ...)
630547e89262Smrg{
630647e89262Smrg  va_list ap;
630747e89262Smrg  va_start (ap, message);
630847e89262Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
630947e89262Smrg  va_end (ap);
631047e89262Smrg}
6311bd1da9d7Smrg
631247e89262Smrgstatic const char *
631347e89262Smrgnonnull (const char *s)
631447e89262Smrg{
631547e89262Smrg  return s ? s : "(null)";
631647e89262Smrg}
6317bd1da9d7Smrg
631847e89262Smrgstatic const char *
631947e89262Smrgnonempty (const char *s)
632047e89262Smrg{
632147e89262Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
632247e89262Smrg}
6323bd1da9d7Smrg
632447e89262Smrgvoid
632547e89262Smrglt_setenv (const char *name, const char *value)
632647e89262Smrg{
632747e89262Smrg  lt_debugprintf (__FILE__, __LINE__,
632847e89262Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
632947e89262Smrg                  nonnull (name), nonnull (value));
633047e89262Smrg  {
633147e89262Smrg#ifdef HAVE_SETENV
633247e89262Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
633347e89262Smrg    char *str = xstrdup (value);
633447e89262Smrg    setenv (name, str, 1);
633547e89262Smrg#else
6336e6d2e958Smrg    size_t len = strlen (name) + 1 + strlen (value) + 1;
633747e89262Smrg    char *str = XMALLOC (char, len);
633847e89262Smrg    sprintf (str, "%s=%s", name, value);
633947e89262Smrg    if (putenv (str) != EXIT_SUCCESS)
634047e89262Smrg      {
634147e89262Smrg        XFREE (str);
634247e89262Smrg      }
634347e89262Smrg#endif
634447e89262Smrg  }
634547e89262Smrg}
6346bd1da9d7Smrg
634747e89262Smrgchar *
634847e89262Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
634947e89262Smrg{
635047e89262Smrg  char *new_value;
635147e89262Smrg  if (orig_value && *orig_value)
635247e89262Smrg    {
6353e6d2e958Smrg      size_t orig_value_len = strlen (orig_value);
6354e6d2e958Smrg      size_t add_len = strlen (add);
635547e89262Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
635647e89262Smrg      if (to_end)
635747e89262Smrg        {
635847e89262Smrg          strcpy (new_value, orig_value);
635947e89262Smrg          strcpy (new_value + orig_value_len, add);
636047e89262Smrg        }
636147e89262Smrg      else
636247e89262Smrg        {
636347e89262Smrg          strcpy (new_value, add);
636447e89262Smrg          strcpy (new_value + add_len, orig_value);
636547e89262Smrg        }
636647e89262Smrg    }
636747e89262Smrg  else
636847e89262Smrg    {
636947e89262Smrg      new_value = xstrdup (add);
637047e89262Smrg    }
637147e89262Smrg  return new_value;
637247e89262Smrg}
6373bd1da9d7Smrg
637447e89262Smrgvoid
637547e89262Smrglt_update_exe_path (const char *name, const char *value)
637647e89262Smrg{
637747e89262Smrg  lt_debugprintf (__FILE__, __LINE__,
637847e89262Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
637947e89262Smrg                  nonnull (name), nonnull (value));
6380bd1da9d7Smrg
638147e89262Smrg  if (name && *name && value && *value)
638247e89262Smrg    {
638347e89262Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
638447e89262Smrg      /* some systems can't cope with a ':'-terminated path #' */
6385e6d2e958Smrg      size_t len = strlen (new_value);
6386e6d2e958Smrg      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
638747e89262Smrg        {
6388e6d2e958Smrg          new_value[--len] = '\0';
638947e89262Smrg        }
639047e89262Smrg      lt_setenv (name, new_value);
639147e89262Smrg      XFREE (new_value);
639247e89262Smrg    }
639347e89262Smrg}
6394bd1da9d7Smrg
639547e89262Smrgvoid
639647e89262Smrglt_update_lib_path (const char *name, const char *value)
639747e89262Smrg{
639847e89262Smrg  lt_debugprintf (__FILE__, __LINE__,
639947e89262Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
640047e89262Smrg                  nonnull (name), nonnull (value));
6401bd1da9d7Smrg
640247e89262Smrg  if (name && *name && value && *value)
640347e89262Smrg    {
640447e89262Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
640547e89262Smrg      lt_setenv (name, new_value);
640647e89262Smrg      XFREE (new_value);
640747e89262Smrg    }
640847e89262Smrg}
6409bd1da9d7Smrg
641047e89262SmrgEOF
641147e89262Smrg	    case $host_os in
641247e89262Smrg	      mingw*)
641347e89262Smrg		cat <<"EOF"
641447e89262Smrg
641547e89262Smrg/* Prepares an argument vector before calling spawn().
641647e89262Smrg   Note that spawn() does not by itself call the command interpreter
641747e89262Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
641847e89262Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
641947e89262Smrg         GetVersionEx(&v);
642047e89262Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
642147e89262Smrg      }) ? "cmd.exe" : "command.com").
642247e89262Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
642347e89262Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
642447e89262Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
642547e89262Smrg   special way:
642647e89262Smrg   - Space and tab are interpreted as delimiters. They are not treated as
642747e89262Smrg     delimiters if they are surrounded by double quotes: "...".
642847e89262Smrg   - Unescaped double quotes are removed from the input. Their only effect is
642947e89262Smrg     that within double quotes, space and tab are treated like normal
643047e89262Smrg     characters.
643147e89262Smrg   - Backslashes not followed by double quotes are not special.
643247e89262Smrg   - But 2*n+1 backslashes followed by a double quote become
643347e89262Smrg     n backslashes followed by a double quote (n >= 0):
643447e89262Smrg       \" -> "
643547e89262Smrg       \\\" -> \"
643647e89262Smrg       \\\\\" -> \\"
643747e89262Smrg */
643847e89262Smrg#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"
643947e89262Smrg#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"
644047e89262Smrgchar **
644147e89262Smrgprepare_spawn (char **argv)
644247e89262Smrg{
644347e89262Smrg  size_t argc;
644447e89262Smrg  char **new_argv;
644547e89262Smrg  size_t i;
6446bd1da9d7Smrg
644747e89262Smrg  /* Count number of arguments.  */
644847e89262Smrg  for (argc = 0; argv[argc] != NULL; argc++)
644947e89262Smrg    ;
6450bd1da9d7Smrg
645147e89262Smrg  /* Allocate new argument vector.  */
645247e89262Smrg  new_argv = XMALLOC (char *, argc + 1);
6453bd1da9d7Smrg
645447e89262Smrg  /* Put quoted arguments into the new argument vector.  */
645547e89262Smrg  for (i = 0; i < argc; i++)
645647e89262Smrg    {
645747e89262Smrg      const char *string = argv[i];
645847e89262Smrg
645947e89262Smrg      if (string[0] == '\0')
646047e89262Smrg	new_argv[i] = xstrdup ("\"\"");
646147e89262Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
646247e89262Smrg	{
646347e89262Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
646447e89262Smrg	  size_t length;
646547e89262Smrg	  unsigned int backslashes;
646647e89262Smrg	  const char *s;
646747e89262Smrg	  char *quoted_string;
646847e89262Smrg	  char *p;
646947e89262Smrg
647047e89262Smrg	  length = 0;
647147e89262Smrg	  backslashes = 0;
647247e89262Smrg	  if (quote_around)
647347e89262Smrg	    length++;
647447e89262Smrg	  for (s = string; *s != '\0'; s++)
647547e89262Smrg	    {
647647e89262Smrg	      char c = *s;
647747e89262Smrg	      if (c == '"')
647847e89262Smrg		length += backslashes + 1;
647947e89262Smrg	      length++;
648047e89262Smrg	      if (c == '\\')
648147e89262Smrg		backslashes++;
648247e89262Smrg	      else
648347e89262Smrg		backslashes = 0;
648447e89262Smrg	    }
648547e89262Smrg	  if (quote_around)
648647e89262Smrg	    length += backslashes + 1;
648747e89262Smrg
648847e89262Smrg	  quoted_string = XMALLOC (char, length + 1);
648947e89262Smrg
649047e89262Smrg	  p = quoted_string;
649147e89262Smrg	  backslashes = 0;
649247e89262Smrg	  if (quote_around)
649347e89262Smrg	    *p++ = '"';
649447e89262Smrg	  for (s = string; *s != '\0'; s++)
649547e89262Smrg	    {
649647e89262Smrg	      char c = *s;
649747e89262Smrg	      if (c == '"')
649847e89262Smrg		{
649947e89262Smrg		  unsigned int j;
650047e89262Smrg		  for (j = backslashes + 1; j > 0; j--)
650147e89262Smrg		    *p++ = '\\';
650247e89262Smrg		}
650347e89262Smrg	      *p++ = c;
650447e89262Smrg	      if (c == '\\')
650547e89262Smrg		backslashes++;
650647e89262Smrg	      else
650747e89262Smrg		backslashes = 0;
650847e89262Smrg	    }
650947e89262Smrg	  if (quote_around)
651047e89262Smrg	    {
651147e89262Smrg	      unsigned int j;
651247e89262Smrg	      for (j = backslashes; j > 0; j--)
651347e89262Smrg		*p++ = '\\';
651447e89262Smrg	      *p++ = '"';
651547e89262Smrg	    }
651647e89262Smrg	  *p = '\0';
6517bd1da9d7Smrg
651847e89262Smrg	  new_argv[i] = quoted_string;
651947e89262Smrg	}
652047e89262Smrg      else
652147e89262Smrg	new_argv[i] = (char *) string;
652247e89262Smrg    }
652347e89262Smrg  new_argv[argc] = NULL;
6524bd1da9d7Smrg
652547e89262Smrg  return new_argv;
652647e89262Smrg}
652747e89262SmrgEOF
6528bd1da9d7Smrg		;;
652947e89262Smrg	    esac
6530bd1da9d7Smrg
653147e89262Smrg            cat <<"EOF"
653247e89262Smrgvoid lt_dump_script (FILE* f)
653347e89262Smrg{
653447e89262SmrgEOF
653547e89262Smrg	    func_emit_wrapper yes |
6536899129b3Smrg	      $SED -n -e '
6537899129b3Smrgs/^\(.\{79\}\)\(..*\)/\1\
6538899129b3Smrg\2/
6539899129b3Smrgh
6540899129b3Smrgs/\([\\"]\)/\\\1/g
6541899129b3Smrgs/$/\\n/
6542899129b3Smrgs/\([^\n]*\).*/  fputs ("\1", f);/p
6543899129b3Smrgg
6544899129b3SmrgD'
654547e89262Smrg            cat <<"EOF"
654647e89262Smrg}
654747e89262SmrgEOF
654847e89262Smrg}
654947e89262Smrg# end: func_emit_cwrapperexe_src
6550bd1da9d7Smrg
655147e89262Smrg# func_win32_import_lib_p ARG
655247e89262Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
655347e89262Smrgfunc_win32_import_lib_p ()
655447e89262Smrg{
6555e6d2e958Smrg    $debug_cmd
6556e6d2e958Smrg
655747e89262Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
655847e89262Smrg    *import*) : ;;
655947e89262Smrg    *) false ;;
656047e89262Smrg    esac
656147e89262Smrg}
6562bd1da9d7Smrg
6563e6d2e958Smrg# func_suncc_cstd_abi
6564e6d2e958Smrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
6565e6d2e958Smrg# Several compiler flags select an ABI that is incompatible with the
6566e6d2e958Smrg# Cstd library. Avoid specifying it if any are in CXXFLAGS.
6567e6d2e958Smrgfunc_suncc_cstd_abi ()
6568e6d2e958Smrg{
6569e6d2e958Smrg    $debug_cmd
6570e6d2e958Smrg
6571e6d2e958Smrg    case " $compile_command " in
6572e6d2e958Smrg    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
6573e6d2e958Smrg      suncc_use_cstd_abi=no
6574e6d2e958Smrg      ;;
6575e6d2e958Smrg    *)
6576e6d2e958Smrg      suncc_use_cstd_abi=yes
6577e6d2e958Smrg      ;;
6578e6d2e958Smrg    esac
6579e6d2e958Smrg}
6580e6d2e958Smrg
658147e89262Smrg# func_mode_link arg...
658247e89262Smrgfunc_mode_link ()
658347e89262Smrg{
6584e6d2e958Smrg    $debug_cmd
6585e6d2e958Smrg
658647e89262Smrg    case $host in
658747e89262Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
658847e89262Smrg      # It is impossible to link a dll without this setting, and
658947e89262Smrg      # we shouldn't force the makefile maintainer to figure out
6590e6d2e958Smrg      # what system we are compiling for in order to pass an extra
659147e89262Smrg      # flag for every libtool invocation.
659247e89262Smrg      # allow_undefined=no
6593bd1da9d7Smrg
659447e89262Smrg      # FIXME: Unfortunately, there are problems with the above when trying
6595e6d2e958Smrg      # to make a dll that has undefined symbols, in which case not
659647e89262Smrg      # even a static library is built.  For now, we need to specify
659747e89262Smrg      # -no-undefined on the libtool link line when we can be certain
659847e89262Smrg      # that all symbols are satisfied, otherwise we get a static library.
659947e89262Smrg      allow_undefined=yes
660047e89262Smrg      ;;
660147e89262Smrg    *)
660247e89262Smrg      allow_undefined=yes
660347e89262Smrg      ;;
660447e89262Smrg    esac
660547e89262Smrg    libtool_args=$nonopt
660647e89262Smrg    base_compile="$nonopt $@"
660747e89262Smrg    compile_command=$nonopt
660847e89262Smrg    finalize_command=$nonopt
6609bd1da9d7Smrg
661047e89262Smrg    compile_rpath=
661147e89262Smrg    finalize_rpath=
661247e89262Smrg    compile_shlibpath=
661347e89262Smrg    finalize_shlibpath=
661447e89262Smrg    convenience=
661547e89262Smrg    old_convenience=
661647e89262Smrg    deplibs=
661747e89262Smrg    old_deplibs=
661847e89262Smrg    compiler_flags=
661947e89262Smrg    linker_flags=
662047e89262Smrg    dllsearchpath=
662147e89262Smrg    lib_search_path=`pwd`
662247e89262Smrg    inst_prefix_dir=
662347e89262Smrg    new_inherited_linker_flags=
6624bd1da9d7Smrg
662547e89262Smrg    avoid_version=no
662647e89262Smrg    bindir=
662747e89262Smrg    dlfiles=
662847e89262Smrg    dlprefiles=
662947e89262Smrg    dlself=no
663047e89262Smrg    export_dynamic=no
663147e89262Smrg    export_symbols=
663247e89262Smrg    export_symbols_regex=
663347e89262Smrg    generated=
663447e89262Smrg    libobjs=
663547e89262Smrg    ltlibs=
663647e89262Smrg    module=no
663747e89262Smrg    no_install=no
663847e89262Smrg    objs=
6639e6d2e958Smrg    os2dllname=
664047e89262Smrg    non_pic_objects=
664147e89262Smrg    precious_files_regex=
664247e89262Smrg    prefer_static_libs=no
6643e6d2e958Smrg    preload=false
664447e89262Smrg    prev=
664547e89262Smrg    prevarg=
664647e89262Smrg    release=
664747e89262Smrg    rpath=
664847e89262Smrg    xrpath=
664947e89262Smrg    perm_rpath=
665047e89262Smrg    temp_rpath=
665147e89262Smrg    thread_safe=no
665247e89262Smrg    vinfo=
665347e89262Smrg    vinfo_number=no
665447e89262Smrg    weak_libs=
6655e6d2e958Smrg    single_module=$wl-single_module
665647e89262Smrg    func_infer_tag $base_compile
6657bd1da9d7Smrg
665847e89262Smrg    # We need to know -static, to get the right output filenames.
665947e89262Smrg    for arg
666047e89262Smrg    do
666147e89262Smrg      case $arg in
666247e89262Smrg      -shared)
6663e6d2e958Smrg	test yes != "$build_libtool_libs" \
6664e6d2e958Smrg	  && func_fatal_configuration "cannot build a shared library"
666547e89262Smrg	build_old_libs=no
666647e89262Smrg	break
666747e89262Smrg	;;
666847e89262Smrg      -all-static | -static | -static-libtool-libs)
666947e89262Smrg	case $arg in
667047e89262Smrg	-all-static)
6671e6d2e958Smrg	  if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
667247e89262Smrg	    func_warning "complete static linking is impossible in this configuration"
667347e89262Smrg	  fi
667447e89262Smrg	  if test -n "$link_static_flag"; then
667547e89262Smrg	    dlopen_self=$dlopen_self_static
667647e89262Smrg	  fi
667747e89262Smrg	  prefer_static_libs=yes
667847e89262Smrg	  ;;
667947e89262Smrg	-static)
668047e89262Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
668147e89262Smrg	    dlopen_self=$dlopen_self_static
668247e89262Smrg	  fi
668347e89262Smrg	  prefer_static_libs=built
668447e89262Smrg	  ;;
668547e89262Smrg	-static-libtool-libs)
668647e89262Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
668747e89262Smrg	    dlopen_self=$dlopen_self_static
668847e89262Smrg	  fi
668947e89262Smrg	  prefer_static_libs=yes
669047e89262Smrg	  ;;
669147e89262Smrg	esac
669247e89262Smrg	build_libtool_libs=no
669347e89262Smrg	build_old_libs=yes
669447e89262Smrg	break
669547e89262Smrg	;;
669647e89262Smrg      esac
669747e89262Smrg    done
6698bd1da9d7Smrg
669947e89262Smrg    # See if our shared archives depend on static archives.
670047e89262Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
6701bd1da9d7Smrg
670247e89262Smrg    # Go through the arguments, transforming them on the way.
670347e89262Smrg    while test "$#" -gt 0; do
6704e6d2e958Smrg      arg=$1
670547e89262Smrg      shift
670647e89262Smrg      func_quote_for_eval "$arg"
670747e89262Smrg      qarg=$func_quote_for_eval_unquoted_result
670847e89262Smrg      func_append libtool_args " $func_quote_for_eval_result"
6709bd1da9d7Smrg
671047e89262Smrg      # If the previous option needs an argument, assign it.
671147e89262Smrg      if test -n "$prev"; then
671247e89262Smrg	case $prev in
671347e89262Smrg	output)
671447e89262Smrg	  func_append compile_command " @OUTPUT@"
671547e89262Smrg	  func_append finalize_command " @OUTPUT@"
671647e89262Smrg	  ;;
671747e89262Smrg	esac
6718bd1da9d7Smrg
671947e89262Smrg	case $prev in
672047e89262Smrg	bindir)
6721e6d2e958Smrg	  bindir=$arg
672247e89262Smrg	  prev=
672347e89262Smrg	  continue
672447e89262Smrg	  ;;
672547e89262Smrg	dlfiles|dlprefiles)
6726e6d2e958Smrg	  $preload || {
672747e89262Smrg	    # Add the symbol object into the linking commands.
672847e89262Smrg	    func_append compile_command " @SYMFILE@"
672947e89262Smrg	    func_append finalize_command " @SYMFILE@"
6730e6d2e958Smrg	    preload=:
6731e6d2e958Smrg	  }
673247e89262Smrg	  case $arg in
673347e89262Smrg	  *.la | *.lo) ;;  # We handle these cases below.
673447e89262Smrg	  force)
6735e6d2e958Smrg	    if test no = "$dlself"; then
673647e89262Smrg	      dlself=needless
673747e89262Smrg	      export_dynamic=yes
6738bd1da9d7Smrg	    fi
673947e89262Smrg	    prev=
674047e89262Smrg	    continue
674147e89262Smrg	    ;;
674247e89262Smrg	  self)
6743e6d2e958Smrg	    if test dlprefiles = "$prev"; then
674447e89262Smrg	      dlself=yes
6745e6d2e958Smrg	    elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
674647e89262Smrg	      dlself=yes
6747bd1da9d7Smrg	    else
674847e89262Smrg	      dlself=needless
674947e89262Smrg	      export_dynamic=yes
6750bd1da9d7Smrg	    fi
675147e89262Smrg	    prev=
675247e89262Smrg	    continue
675347e89262Smrg	    ;;
675447e89262Smrg	  *)
6755e6d2e958Smrg	    if test dlfiles = "$prev"; then
6756899129b3Smrg	      func_append dlfiles " $arg"
6757bd1da9d7Smrg	    else
6758899129b3Smrg	      func_append dlprefiles " $arg"
6759bd1da9d7Smrg	    fi
676047e89262Smrg	    prev=
676147e89262Smrg	    continue
676247e89262Smrg	    ;;
676347e89262Smrg	  esac
676447e89262Smrg	  ;;
676547e89262Smrg	expsyms)
6766e6d2e958Smrg	  export_symbols=$arg
676747e89262Smrg	  test -f "$arg" \
6768e6d2e958Smrg	    || func_fatal_error "symbol file '$arg' does not exist"
676947e89262Smrg	  prev=
677047e89262Smrg	  continue
677147e89262Smrg	  ;;
677247e89262Smrg	expsyms_regex)
6773e6d2e958Smrg	  export_symbols_regex=$arg
677447e89262Smrg	  prev=
677547e89262Smrg	  continue
677647e89262Smrg	  ;;
677747e89262Smrg	framework)
6778bd1da9d7Smrg	  case $host in
677947e89262Smrg	    *-*-darwin*)
678047e89262Smrg	      case "$deplibs " in
678147e89262Smrg		*" $qarg.ltframework "*) ;;
6782899129b3Smrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
678347e89262Smrg		   ;;
678447e89262Smrg	      esac
678547e89262Smrg	      ;;
6786bd1da9d7Smrg	  esac
678747e89262Smrg	  prev=
678847e89262Smrg	  continue
6789bd1da9d7Smrg	  ;;
679047e89262Smrg	inst_prefix)
6791e6d2e958Smrg	  inst_prefix_dir=$arg
6792e6d2e958Smrg	  prev=
6793e6d2e958Smrg	  continue
6794e6d2e958Smrg	  ;;
6795e6d2e958Smrg	mllvm)
6796e6d2e958Smrg	  # Clang does not use LLVM to link, so we can simply discard any
6797e6d2e958Smrg	  # '-mllvm $arg' options when doing the link step.
679847e89262Smrg	  prev=
679947e89262Smrg	  continue
6800bd1da9d7Smrg	  ;;
680147e89262Smrg	objectlist)
680247e89262Smrg	  if test -f "$arg"; then
680347e89262Smrg	    save_arg=$arg
680447e89262Smrg	    moreargs=
680547e89262Smrg	    for fil in `cat "$save_arg"`
680647e89262Smrg	    do
6807899129b3Smrg#	      func_append moreargs " $fil"
680847e89262Smrg	      arg=$fil
680947e89262Smrg	      # A libtool-controlled object.
6810bd1da9d7Smrg
681147e89262Smrg	      # Check to see that this really is a libtool object.
681247e89262Smrg	      if func_lalib_unsafe_p "$arg"; then
681347e89262Smrg		pic_object=
681447e89262Smrg		non_pic_object=
6815bd1da9d7Smrg
681647e89262Smrg		# Read the .lo file
681747e89262Smrg		func_source "$arg"
6818bd1da9d7Smrg
681947e89262Smrg		if test -z "$pic_object" ||
682047e89262Smrg		   test -z "$non_pic_object" ||
6821e6d2e958Smrg		   test none = "$pic_object" &&
6822e6d2e958Smrg		   test none = "$non_pic_object"; then
6823e6d2e958Smrg		  func_fatal_error "cannot find name of object for '$arg'"
682447e89262Smrg		fi
6825bd1da9d7Smrg
682647e89262Smrg		# Extract subdirectory from the argument.
682747e89262Smrg		func_dirname "$arg" "/" ""
6828e6d2e958Smrg		xdir=$func_dirname_result
6829bd1da9d7Smrg
6830e6d2e958Smrg		if test none != "$pic_object"; then
683147e89262Smrg		  # Prepend the subdirectory the object is found in.
6832e6d2e958Smrg		  pic_object=$xdir$pic_object
6833bd1da9d7Smrg
6834e6d2e958Smrg		  if test dlfiles = "$prev"; then
6835e6d2e958Smrg		    if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
6836899129b3Smrg		      func_append dlfiles " $pic_object"
683747e89262Smrg		      prev=
683847e89262Smrg		      continue
683947e89262Smrg		    else
684047e89262Smrg		      # If libtool objects are unsupported, then we need to preload.
684147e89262Smrg		      prev=dlprefiles
684247e89262Smrg		    fi
684347e89262Smrg		  fi
6844bd1da9d7Smrg
684547e89262Smrg		  # CHECK ME:  I think I busted this.  -Ossama
6846e6d2e958Smrg		  if test dlprefiles = "$prev"; then
684747e89262Smrg		    # Preload the old-style object.
6848899129b3Smrg		    func_append dlprefiles " $pic_object"
684947e89262Smrg		    prev=
685047e89262Smrg		  fi
6851bd1da9d7Smrg
685247e89262Smrg		  # A PIC object.
685347e89262Smrg		  func_append libobjs " $pic_object"
6854e6d2e958Smrg		  arg=$pic_object
685547e89262Smrg		fi
6856bd1da9d7Smrg
685747e89262Smrg		# Non-PIC object.
6858e6d2e958Smrg		if test none != "$non_pic_object"; then
685947e89262Smrg		  # Prepend the subdirectory the object is found in.
6860e6d2e958Smrg		  non_pic_object=$xdir$non_pic_object
6861bd1da9d7Smrg
686247e89262Smrg		  # A standard non-PIC object
686347e89262Smrg		  func_append non_pic_objects " $non_pic_object"
6864e6d2e958Smrg		  if test -z "$pic_object" || test none = "$pic_object"; then
6865e6d2e958Smrg		    arg=$non_pic_object
686647e89262Smrg		  fi
686747e89262Smrg		else
686847e89262Smrg		  # If the PIC object exists, use it instead.
686947e89262Smrg		  # $xdir was prepended to $pic_object above.
6870e6d2e958Smrg		  non_pic_object=$pic_object
687147e89262Smrg		  func_append non_pic_objects " $non_pic_object"
687247e89262Smrg		fi
687347e89262Smrg	      else
687447e89262Smrg		# Only an error if not doing a dry-run.
687547e89262Smrg		if $opt_dry_run; then
687647e89262Smrg		  # Extract subdirectory from the argument.
687747e89262Smrg		  func_dirname "$arg" "/" ""
6878e6d2e958Smrg		  xdir=$func_dirname_result
687947e89262Smrg
688047e89262Smrg		  func_lo2o "$arg"
688147e89262Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
688247e89262Smrg		  non_pic_object=$xdir$func_lo2o_result
688347e89262Smrg		  func_append libobjs " $pic_object"
688447e89262Smrg		  func_append non_pic_objects " $non_pic_object"
688547e89262Smrg	        else
6886e6d2e958Smrg		  func_fatal_error "'$arg' is not a valid libtool object"
688747e89262Smrg		fi
688847e89262Smrg	      fi
688947e89262Smrg	    done
6890bd1da9d7Smrg	  else
6891e6d2e958Smrg	    func_fatal_error "link input file '$arg' does not exist"
6892bd1da9d7Smrg	  fi
689347e89262Smrg	  arg=$save_arg
689447e89262Smrg	  prev=
689547e89262Smrg	  continue
689647e89262Smrg	  ;;
6897e6d2e958Smrg	os2dllname)
6898e6d2e958Smrg	  os2dllname=$arg
6899e6d2e958Smrg	  prev=
6900e6d2e958Smrg	  continue
6901e6d2e958Smrg	  ;;
690247e89262Smrg	precious_regex)
6903e6d2e958Smrg	  precious_files_regex=$arg
690447e89262Smrg	  prev=
690547e89262Smrg	  continue
690647e89262Smrg	  ;;
690747e89262Smrg	release)
6908e6d2e958Smrg	  release=-$arg
690947e89262Smrg	  prev=
691047e89262Smrg	  continue
691147e89262Smrg	  ;;
691247e89262Smrg	rpath | xrpath)
691347e89262Smrg	  # We need an absolute path.
691447e89262Smrg	  case $arg in
691547e89262Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
691647e89262Smrg	  *)
691747e89262Smrg	    func_fatal_error "only absolute run-paths are allowed"
691847e89262Smrg	    ;;
691947e89262Smrg	  esac
6920e6d2e958Smrg	  if test rpath = "$prev"; then
692147e89262Smrg	    case "$rpath " in
692247e89262Smrg	    *" $arg "*) ;;
6923899129b3Smrg	    *) func_append rpath " $arg" ;;
692447e89262Smrg	    esac
6925bd1da9d7Smrg	  else
692647e89262Smrg	    case "$xrpath " in
692747e89262Smrg	    *" $arg "*) ;;
6928899129b3Smrg	    *) func_append xrpath " $arg" ;;
692947e89262Smrg	    esac
6930bd1da9d7Smrg	  fi
693147e89262Smrg	  prev=
693247e89262Smrg	  continue
693347e89262Smrg	  ;;
693447e89262Smrg	shrext)
6935e6d2e958Smrg	  shrext_cmds=$arg
693647e89262Smrg	  prev=
693747e89262Smrg	  continue
693847e89262Smrg	  ;;
693947e89262Smrg	weak)
6940899129b3Smrg	  func_append weak_libs " $arg"
694147e89262Smrg	  prev=
694247e89262Smrg	  continue
694347e89262Smrg	  ;;
694447e89262Smrg	xcclinker)
6945899129b3Smrg	  func_append linker_flags " $qarg"
6946899129b3Smrg	  func_append compiler_flags " $qarg"
694747e89262Smrg	  prev=
694847e89262Smrg	  func_append compile_command " $qarg"
694947e89262Smrg	  func_append finalize_command " $qarg"
695047e89262Smrg	  continue
695147e89262Smrg	  ;;
695247e89262Smrg	xcompiler)
6953899129b3Smrg	  func_append compiler_flags " $qarg"
695447e89262Smrg	  prev=
695547e89262Smrg	  func_append compile_command " $qarg"
695647e89262Smrg	  func_append finalize_command " $qarg"
695747e89262Smrg	  continue
695847e89262Smrg	  ;;
695947e89262Smrg	xlinker)
6960899129b3Smrg	  func_append linker_flags " $qarg"
6961899129b3Smrg	  func_append compiler_flags " $wl$qarg"
696247e89262Smrg	  prev=
696347e89262Smrg	  func_append compile_command " $wl$qarg"
696447e89262Smrg	  func_append finalize_command " $wl$qarg"
696547e89262Smrg	  continue
696647e89262Smrg	  ;;
696747e89262Smrg	*)
696847e89262Smrg	  eval "$prev=\"\$arg\""
696947e89262Smrg	  prev=
697047e89262Smrg	  continue
697147e89262Smrg	  ;;
6972bd1da9d7Smrg	esac
697347e89262Smrg      fi # test -n "$prev"
6974bd1da9d7Smrg
6975e6d2e958Smrg      prevarg=$arg
6976bd1da9d7Smrg
697747e89262Smrg      case $arg in
697847e89262Smrg      -all-static)
697947e89262Smrg	if test -n "$link_static_flag"; then
698047e89262Smrg	  # See comment for -static flag below, for more details.
698147e89262Smrg	  func_append compile_command " $link_static_flag"
698247e89262Smrg	  func_append finalize_command " $link_static_flag"
698347e89262Smrg	fi
698447e89262Smrg	continue
698547e89262Smrg	;;
6986bd1da9d7Smrg
698747e89262Smrg      -allow-undefined)
698847e89262Smrg	# FIXME: remove this flag sometime in the future.
6989e6d2e958Smrg	func_fatal_error "'-allow-undefined' must not be used because it is the default"
699047e89262Smrg	;;
6991bd1da9d7Smrg
699247e89262Smrg      -avoid-version)
699347e89262Smrg	avoid_version=yes
699447e89262Smrg	continue
699547e89262Smrg	;;
6996bd1da9d7Smrg
699747e89262Smrg      -bindir)
699847e89262Smrg	prev=bindir
699947e89262Smrg	continue
700047e89262Smrg	;;
7001bd1da9d7Smrg
700247e89262Smrg      -dlopen)
700347e89262Smrg	prev=dlfiles
700447e89262Smrg	continue
700547e89262Smrg	;;
7006bd1da9d7Smrg
700747e89262Smrg      -dlpreopen)
700847e89262Smrg	prev=dlprefiles
700947e89262Smrg	continue
701047e89262Smrg	;;
7011bd1da9d7Smrg
701247e89262Smrg      -export-dynamic)
701347e89262Smrg	export_dynamic=yes
701447e89262Smrg	continue
701547e89262Smrg	;;
7016bd1da9d7Smrg
701747e89262Smrg      -export-symbols | -export-symbols-regex)
701847e89262Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
701947e89262Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
702047e89262Smrg	fi
7021e6d2e958Smrg	if test X-export-symbols = "X$arg"; then
702247e89262Smrg	  prev=expsyms
702347e89262Smrg	else
702447e89262Smrg	  prev=expsyms_regex
702547e89262Smrg	fi
702647e89262Smrg	continue
702747e89262Smrg	;;
7028bd1da9d7Smrg
702947e89262Smrg      -framework)
703047e89262Smrg	prev=framework
703147e89262Smrg	continue
703247e89262Smrg	;;
7033bd1da9d7Smrg
703447e89262Smrg      -inst-prefix-dir)
703547e89262Smrg	prev=inst_prefix
703647e89262Smrg	continue
703747e89262Smrg	;;
7038bd1da9d7Smrg
703947e89262Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
704047e89262Smrg      # so, if we see these flags be careful not to treat them like -L
704147e89262Smrg      -L[A-Z][A-Z]*:*)
704247e89262Smrg	case $with_gcc/$host in
704347e89262Smrg	no/*-*-irix* | /*-*-irix*)
704447e89262Smrg	  func_append compile_command " $arg"
704547e89262Smrg	  func_append finalize_command " $arg"
704647e89262Smrg	  ;;
704747e89262Smrg	esac
704847e89262Smrg	continue
704947e89262Smrg	;;
7050bd1da9d7Smrg
705147e89262Smrg      -L*)
7052899129b3Smrg	func_stripname "-L" '' "$arg"
7053899129b3Smrg	if test -z "$func_stripname_result"; then
705447e89262Smrg	  if test "$#" -gt 0; then
7055e6d2e958Smrg	    func_fatal_error "require no space between '-L' and '$1'"
705647e89262Smrg	  else
7057e6d2e958Smrg	    func_fatal_error "need path for '-L' option"
705847e89262Smrg	  fi
705947e89262Smrg	fi
7060899129b3Smrg	func_resolve_sysroot "$func_stripname_result"
7061899129b3Smrg	dir=$func_resolve_sysroot_result
706247e89262Smrg	# We need an absolute path.
706347e89262Smrg	case $dir in
706447e89262Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
706547e89262Smrg	*)
706647e89262Smrg	  absdir=`cd "$dir" && pwd`
706747e89262Smrg	  test -z "$absdir" && \
7068e6d2e958Smrg	    func_fatal_error "cannot determine absolute directory name of '$dir'"
7069e6d2e958Smrg	  dir=$absdir
707047e89262Smrg	  ;;
707147e89262Smrg	esac
707247e89262Smrg	case "$deplibs " in
7073899129b3Smrg	*" -L$dir "* | *" $arg "*)
7074899129b3Smrg	  # Will only happen for absolute or sysroot arguments
7075899129b3Smrg	  ;;
707647e89262Smrg	*)
7077899129b3Smrg	  # Preserve sysroot, but never include relative directories
7078899129b3Smrg	  case $dir in
7079899129b3Smrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
7080899129b3Smrg	    *) func_append deplibs " -L$dir" ;;
7081899129b3Smrg	  esac
7082899129b3Smrg	  func_append lib_search_path " $dir"
708347e89262Smrg	  ;;
708447e89262Smrg	esac
708547e89262Smrg	case $host in
708647e89262Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
708747e89262Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
708847e89262Smrg	  case :$dllsearchpath: in
708947e89262Smrg	  *":$dir:"*) ;;
709047e89262Smrg	  ::) dllsearchpath=$dir;;
7091899129b3Smrg	  *) func_append dllsearchpath ":$dir";;
709247e89262Smrg	  esac
709347e89262Smrg	  case :$dllsearchpath: in
709447e89262Smrg	  *":$testbindir:"*) ;;
709547e89262Smrg	  ::) dllsearchpath=$testbindir;;
7096899129b3Smrg	  *) func_append dllsearchpath ":$testbindir";;
709747e89262Smrg	  esac
709847e89262Smrg	  ;;
709947e89262Smrg	esac
710047e89262Smrg	continue
710147e89262Smrg	;;
7102bd1da9d7Smrg
710347e89262Smrg      -l*)
7104e6d2e958Smrg	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
710547e89262Smrg	  case $host in
710647e89262Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
710747e89262Smrg	    # These systems don't actually have a C or math library (as such)
710847e89262Smrg	    continue
710947e89262Smrg	    ;;
711047e89262Smrg	  *-*-os2*)
711147e89262Smrg	    # These systems don't actually have a C library (as such)
7112e6d2e958Smrg	    test X-lc = "X$arg" && continue
711347e89262Smrg	    ;;
7114e6d2e958Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
711547e89262Smrg	    # Do not include libc due to us having libc/libc_r.
7116e6d2e958Smrg	    test X-lc = "X$arg" && continue
711747e89262Smrg	    ;;
711847e89262Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
711947e89262Smrg	    # Rhapsody C and math libraries are in the System framework
7120899129b3Smrg	    func_append deplibs " System.ltframework"
712147e89262Smrg	    continue
712247e89262Smrg	    ;;
712347e89262Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
712447e89262Smrg	    # Causes problems with __ctype
7125e6d2e958Smrg	    test X-lc = "X$arg" && continue
712647e89262Smrg	    ;;
712747e89262Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
712847e89262Smrg	    # Compiler inserts libc in the correct place for threads to work
7129e6d2e958Smrg	    test X-lc = "X$arg" && continue
713047e89262Smrg	    ;;
713147e89262Smrg	  esac
7132e6d2e958Smrg	elif test X-lc_r = "X$arg"; then
713347e89262Smrg	 case $host in
7134e6d2e958Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
713547e89262Smrg	   # Do not include libc_r directly, use -pthread flag.
713647e89262Smrg	   continue
713747e89262Smrg	   ;;
713847e89262Smrg	 esac
713947e89262Smrg	fi
7140899129b3Smrg	func_append deplibs " $arg"
714147e89262Smrg	continue
714247e89262Smrg	;;
7143bd1da9d7Smrg
7144e6d2e958Smrg      -mllvm)
7145e6d2e958Smrg	prev=mllvm
7146e6d2e958Smrg	continue
7147e6d2e958Smrg	;;
7148e6d2e958Smrg
714947e89262Smrg      -module)
715047e89262Smrg	module=yes
715147e89262Smrg	continue
715247e89262Smrg	;;
7153bd1da9d7Smrg
715447e89262Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
715547e89262Smrg      # classes, name mangling, and exception handling.
715647e89262Smrg      # Darwin uses the -arch flag to determine output architecture.
7157899129b3Smrg      -model|-arch|-isysroot|--sysroot)
7158899129b3Smrg	func_append compiler_flags " $arg"
715947e89262Smrg	func_append compile_command " $arg"
716047e89262Smrg	func_append finalize_command " $arg"
716147e89262Smrg	prev=xcompiler
716247e89262Smrg	continue
716347e89262Smrg	;;
7164bd1da9d7Smrg
7165899129b3Smrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7166899129b3Smrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7167899129b3Smrg	func_append compiler_flags " $arg"
716847e89262Smrg	func_append compile_command " $arg"
716947e89262Smrg	func_append finalize_command " $arg"
717047e89262Smrg	case "$new_inherited_linker_flags " in
717147e89262Smrg	    *" $arg "*) ;;
7172899129b3Smrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
717347e89262Smrg	esac
717447e89262Smrg	continue
717547e89262Smrg	;;
7176bd1da9d7Smrg
717747e89262Smrg      -multi_module)
7178e6d2e958Smrg	single_module=$wl-multi_module
717947e89262Smrg	continue
718047e89262Smrg	;;
7181bd1da9d7Smrg
718247e89262Smrg      -no-fast-install)
718347e89262Smrg	fast_install=no
718447e89262Smrg	continue
718547e89262Smrg	;;
7186bd1da9d7Smrg
718747e89262Smrg      -no-install)
718847e89262Smrg	case $host in
718947e89262Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
719047e89262Smrg	  # The PATH hackery in wrapper scripts is required on Windows
719147e89262Smrg	  # and Darwin in order for the loader to find any dlls it needs.
7192e6d2e958Smrg	  func_warning "'-no-install' is ignored for $host"
7193e6d2e958Smrg	  func_warning "assuming '-no-fast-install' instead"
719447e89262Smrg	  fast_install=no
719547e89262Smrg	  ;;
719647e89262Smrg	*) no_install=yes ;;
719747e89262Smrg	esac
719847e89262Smrg	continue
719947e89262Smrg	;;
7200bd1da9d7Smrg
720147e89262Smrg      -no-undefined)
720247e89262Smrg	allow_undefined=no
720347e89262Smrg	continue
720447e89262Smrg	;;
7205bd1da9d7Smrg
720647e89262Smrg      -objectlist)
720747e89262Smrg	prev=objectlist
720847e89262Smrg	continue
720947e89262Smrg	;;
7210bd1da9d7Smrg
7211e6d2e958Smrg      -os2dllname)
7212e6d2e958Smrg	prev=os2dllname
7213e6d2e958Smrg	continue
7214e6d2e958Smrg	;;
7215e6d2e958Smrg
721647e89262Smrg      -o) prev=output ;;
7217bd1da9d7Smrg
721847e89262Smrg      -precious-files-regex)
721947e89262Smrg	prev=precious_regex
722047e89262Smrg	continue
722147e89262Smrg	;;
7222bd1da9d7Smrg
722347e89262Smrg      -release)
722447e89262Smrg	prev=release
722547e89262Smrg	continue
722647e89262Smrg	;;
7227bd1da9d7Smrg
722847e89262Smrg      -rpath)
722947e89262Smrg	prev=rpath
723047e89262Smrg	continue
723147e89262Smrg	;;
7232bd1da9d7Smrg
723347e89262Smrg      -R)
723447e89262Smrg	prev=xrpath
723547e89262Smrg	continue
723647e89262Smrg	;;
7237bd1da9d7Smrg
723847e89262Smrg      -R*)
723947e89262Smrg	func_stripname '-R' '' "$arg"
724047e89262Smrg	dir=$func_stripname_result
724147e89262Smrg	# We need an absolute path.
724247e89262Smrg	case $dir in
724347e89262Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
7244899129b3Smrg	=*)
7245899129b3Smrg	  func_stripname '=' '' "$dir"
7246899129b3Smrg	  dir=$lt_sysroot$func_stripname_result
7247899129b3Smrg	  ;;
724847e89262Smrg	*)
724947e89262Smrg	  func_fatal_error "only absolute run-paths are allowed"
725047e89262Smrg	  ;;
725147e89262Smrg	esac
725247e89262Smrg	case "$xrpath " in
725347e89262Smrg	*" $dir "*) ;;
7254899129b3Smrg	*) func_append xrpath " $dir" ;;
725547e89262Smrg	esac
725647e89262Smrg	continue
725747e89262Smrg	;;
7258bd1da9d7Smrg
725947e89262Smrg      -shared)
726047e89262Smrg	# The effects of -shared are defined in a previous loop.
726147e89262Smrg	continue
726247e89262Smrg	;;
7263bd1da9d7Smrg
726447e89262Smrg      -shrext)
726547e89262Smrg	prev=shrext
726647e89262Smrg	continue
726747e89262Smrg	;;
7268bd1da9d7Smrg
726947e89262Smrg      -static | -static-libtool-libs)
727047e89262Smrg	# The effects of -static are defined in a previous loop.
727147e89262Smrg	# We used to do the same as -all-static on platforms that
727247e89262Smrg	# didn't have a PIC flag, but the assumption that the effects
727347e89262Smrg	# would be equivalent was wrong.  It would break on at least
727447e89262Smrg	# Digital Unix and AIX.
727547e89262Smrg	continue
727647e89262Smrg	;;
7277bd1da9d7Smrg
727847e89262Smrg      -thread-safe)
727947e89262Smrg	thread_safe=yes
728047e89262Smrg	continue
728147e89262Smrg	;;
7282bd1da9d7Smrg
728347e89262Smrg      -version-info)
728447e89262Smrg	prev=vinfo
728547e89262Smrg	continue
728647e89262Smrg	;;
7287bd1da9d7Smrg
728847e89262Smrg      -version-number)
728947e89262Smrg	prev=vinfo
729047e89262Smrg	vinfo_number=yes
729147e89262Smrg	continue
729247e89262Smrg	;;
7293bd1da9d7Smrg
729447e89262Smrg      -weak)
729547e89262Smrg        prev=weak
729647e89262Smrg	continue
729747e89262Smrg	;;
7298bd1da9d7Smrg
729947e89262Smrg      -Wc,*)
730047e89262Smrg	func_stripname '-Wc,' '' "$arg"
730147e89262Smrg	args=$func_stripname_result
730247e89262Smrg	arg=
7303e6d2e958Smrg	save_ifs=$IFS; IFS=,
730447e89262Smrg	for flag in $args; do
7305e6d2e958Smrg	  IFS=$save_ifs
730647e89262Smrg          func_quote_for_eval "$flag"
7307899129b3Smrg	  func_append arg " $func_quote_for_eval_result"
7308899129b3Smrg	  func_append compiler_flags " $func_quote_for_eval_result"
730947e89262Smrg	done
7310e6d2e958Smrg	IFS=$save_ifs
731147e89262Smrg	func_stripname ' ' '' "$arg"
731247e89262Smrg	arg=$func_stripname_result
731347e89262Smrg	;;
7314bd1da9d7Smrg
731547e89262Smrg      -Wl,*)
731647e89262Smrg	func_stripname '-Wl,' '' "$arg"
731747e89262Smrg	args=$func_stripname_result
731847e89262Smrg	arg=
7319e6d2e958Smrg	save_ifs=$IFS; IFS=,
732047e89262Smrg	for flag in $args; do
7321e6d2e958Smrg	  IFS=$save_ifs
732247e89262Smrg          func_quote_for_eval "$flag"
7323899129b3Smrg	  func_append arg " $wl$func_quote_for_eval_result"
7324899129b3Smrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
7325899129b3Smrg	  func_append linker_flags " $func_quote_for_eval_result"
732647e89262Smrg	done
7327e6d2e958Smrg	IFS=$save_ifs
732847e89262Smrg	func_stripname ' ' '' "$arg"
732947e89262Smrg	arg=$func_stripname_result
733047e89262Smrg	;;
7331bd1da9d7Smrg
733247e89262Smrg      -Xcompiler)
733347e89262Smrg	prev=xcompiler
733447e89262Smrg	continue
733547e89262Smrg	;;
7336bd1da9d7Smrg
733747e89262Smrg      -Xlinker)
733847e89262Smrg	prev=xlinker
733947e89262Smrg	continue
734047e89262Smrg	;;
7341bd1da9d7Smrg
734247e89262Smrg      -XCClinker)
734347e89262Smrg	prev=xcclinker
734447e89262Smrg	continue
734547e89262Smrg	;;
7346bd1da9d7Smrg
734747e89262Smrg      # -msg_* for osf cc
734847e89262Smrg      -msg_*)
734947e89262Smrg	func_quote_for_eval "$arg"
7350e6d2e958Smrg	arg=$func_quote_for_eval_result
735147e89262Smrg	;;
7352bd1da9d7Smrg
735347e89262Smrg      # Flags to be passed through unchanged, with rationale:
735447e89262Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
735547e89262Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
735647e89262Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
735747e89262Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
735847e89262Smrg      # -q*                  compiler args for the IBM compiler
735947e89262Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
736047e89262Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
736147e89262Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
7362e6d2e958Smrg      # -fstack-protector*   stack protector flags for GCC
736347e89262Smrg      # @file                GCC response files
736447e89262Smrg      # -tp=*                Portland pgcc target processor selection
7365899129b3Smrg      # --sysroot=*          for sysroot support
7366e6d2e958Smrg      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
73676ad5a0e2Smrg      # -specs=*             GCC specs files
7368e6d2e958Smrg      # -stdlib=*            select c++ std lib with clang
73696ad5a0e2Smrg      # -fsanitize=*         Clang/GCC memory and address sanitizer
73706ad5a0e2Smrg      # -fuse-ld=*           Linker select flags for GCC
73716ad5a0e2Smrg      # -static-*            direct GCC to link specific libraries statically
73726ad5a0e2Smrg      # -fcilkplus           Cilk Plus language extension features for C/C++
737347e89262Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
7374899129b3Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
73756ad5a0e2Smrg      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
73766ad5a0e2Smrg      -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus)
737747e89262Smrg        func_quote_for_eval "$arg"
7378e6d2e958Smrg	arg=$func_quote_for_eval_result
737947e89262Smrg        func_append compile_command " $arg"
738047e89262Smrg        func_append finalize_command " $arg"
7381899129b3Smrg        func_append compiler_flags " $arg"
738247e89262Smrg        continue
738347e89262Smrg        ;;
7384bd1da9d7Smrg
7385e6d2e958Smrg      -Z*)
7386e6d2e958Smrg        if test os2 = "`expr $host : '.*\(os2\)'`"; then
7387e6d2e958Smrg          # OS/2 uses -Zxxx to specify OS/2-specific options
7388e6d2e958Smrg	  compiler_flags="$compiler_flags $arg"
7389e6d2e958Smrg	  func_append compile_command " $arg"
7390e6d2e958Smrg	  func_append finalize_command " $arg"
7391e6d2e958Smrg	  case $arg in
7392e6d2e958Smrg	  -Zlinker | -Zstack)
7393e6d2e958Smrg	    prev=xcompiler
7394e6d2e958Smrg	    ;;
7395e6d2e958Smrg	  esac
7396e6d2e958Smrg	  continue
7397e6d2e958Smrg        else
7398e6d2e958Smrg	  # Otherwise treat like 'Some other compiler flag' below
7399e6d2e958Smrg	  func_quote_for_eval "$arg"
7400e6d2e958Smrg	  arg=$func_quote_for_eval_result
7401e6d2e958Smrg        fi
7402e6d2e958Smrg	;;
7403e6d2e958Smrg
740447e89262Smrg      # Some other compiler flag.
740547e89262Smrg      -* | +*)
740647e89262Smrg        func_quote_for_eval "$arg"
7407e6d2e958Smrg	arg=$func_quote_for_eval_result
740847e89262Smrg	;;
7409bd1da9d7Smrg
741047e89262Smrg      *.$objext)
741147e89262Smrg	# A standard object.
7412899129b3Smrg	func_append objs " $arg"
741347e89262Smrg	;;
7414bd1da9d7Smrg
741547e89262Smrg      *.lo)
741647e89262Smrg	# A libtool-controlled object.
7417bd1da9d7Smrg
741847e89262Smrg	# Check to see that this really is a libtool object.
741947e89262Smrg	if func_lalib_unsafe_p "$arg"; then
742047e89262Smrg	  pic_object=
742147e89262Smrg	  non_pic_object=
7422bd1da9d7Smrg
742347e89262Smrg	  # Read the .lo file
742447e89262Smrg	  func_source "$arg"
7425bd1da9d7Smrg
742647e89262Smrg	  if test -z "$pic_object" ||
742747e89262Smrg	     test -z "$non_pic_object" ||
7428e6d2e958Smrg	     test none = "$pic_object" &&
7429e6d2e958Smrg	     test none = "$non_pic_object"; then
7430e6d2e958Smrg	    func_fatal_error "cannot find name of object for '$arg'"
743147e89262Smrg	  fi
74325bcb6992Smrg
743347e89262Smrg	  # Extract subdirectory from the argument.
743447e89262Smrg	  func_dirname "$arg" "/" ""
7435e6d2e958Smrg	  xdir=$func_dirname_result
7436bd1da9d7Smrg
7437e6d2e958Smrg	  test none = "$pic_object" || {
743847e89262Smrg	    # Prepend the subdirectory the object is found in.
7439e6d2e958Smrg	    pic_object=$xdir$pic_object
7440bd1da9d7Smrg
7441e6d2e958Smrg	    if test dlfiles = "$prev"; then
7442e6d2e958Smrg	      if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
7443899129b3Smrg		func_append dlfiles " $pic_object"
744447e89262Smrg		prev=
744547e89262Smrg		continue
744647e89262Smrg	      else
744747e89262Smrg		# If libtool objects are unsupported, then we need to preload.
744847e89262Smrg		prev=dlprefiles
744947e89262Smrg	      fi
745047e89262Smrg	    fi
745147e89262Smrg
745247e89262Smrg	    # CHECK ME:  I think I busted this.  -Ossama
7453e6d2e958Smrg	    if test dlprefiles = "$prev"; then
745447e89262Smrg	      # Preload the old-style object.
7455899129b3Smrg	      func_append dlprefiles " $pic_object"
745647e89262Smrg	      prev=
745747e89262Smrg	    fi
745847e89262Smrg
745947e89262Smrg	    # A PIC object.
746047e89262Smrg	    func_append libobjs " $pic_object"
7461e6d2e958Smrg	    arg=$pic_object
7462e6d2e958Smrg	  }
746347e89262Smrg
746447e89262Smrg	  # Non-PIC object.
7465e6d2e958Smrg	  if test none != "$non_pic_object"; then
746647e89262Smrg	    # Prepend the subdirectory the object is found in.
7467e6d2e958Smrg	    non_pic_object=$xdir$non_pic_object
746847e89262Smrg
746947e89262Smrg	    # A standard non-PIC object
747047e89262Smrg	    func_append non_pic_objects " $non_pic_object"
7471e6d2e958Smrg	    if test -z "$pic_object" || test none = "$pic_object"; then
7472e6d2e958Smrg	      arg=$non_pic_object
747347e89262Smrg	    fi
747447e89262Smrg	  else
747547e89262Smrg	    # If the PIC object exists, use it instead.
747647e89262Smrg	    # $xdir was prepended to $pic_object above.
7477e6d2e958Smrg	    non_pic_object=$pic_object
747847e89262Smrg	    func_append non_pic_objects " $non_pic_object"
747947e89262Smrg	  fi
748047e89262Smrg	else
748147e89262Smrg	  # Only an error if not doing a dry-run.
748247e89262Smrg	  if $opt_dry_run; then
748347e89262Smrg	    # Extract subdirectory from the argument.
748447e89262Smrg	    func_dirname "$arg" "/" ""
7485e6d2e958Smrg	    xdir=$func_dirname_result
748647e89262Smrg
748747e89262Smrg	    func_lo2o "$arg"
748847e89262Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
748947e89262Smrg	    non_pic_object=$xdir$func_lo2o_result
749047e89262Smrg	    func_append libobjs " $pic_object"
749147e89262Smrg	    func_append non_pic_objects " $non_pic_object"
749247e89262Smrg	  else
7493e6d2e958Smrg	    func_fatal_error "'$arg' is not a valid libtool object"
749447e89262Smrg	  fi
749547e89262Smrg	fi
749647e89262Smrg	;;
749747e89262Smrg
749847e89262Smrg      *.$libext)
749947e89262Smrg	# An archive.
7500899129b3Smrg	func_append deplibs " $arg"
7501899129b3Smrg	func_append old_deplibs " $arg"
750247e89262Smrg	continue
750347e89262Smrg	;;
750447e89262Smrg
750547e89262Smrg      *.la)
750647e89262Smrg	# A libtool-controlled library.
750747e89262Smrg
7508899129b3Smrg	func_resolve_sysroot "$arg"
7509e6d2e958Smrg	if test dlfiles = "$prev"; then
751047e89262Smrg	  # This library was specified with -dlopen.
7511899129b3Smrg	  func_append dlfiles " $func_resolve_sysroot_result"
751247e89262Smrg	  prev=
7513e6d2e958Smrg	elif test dlprefiles = "$prev"; then
751447e89262Smrg	  # The library was specified with -dlpreopen.
7515899129b3Smrg	  func_append dlprefiles " $func_resolve_sysroot_result"
751647e89262Smrg	  prev=
751747e89262Smrg	else
7518899129b3Smrg	  func_append deplibs " $func_resolve_sysroot_result"
751947e89262Smrg	fi
752047e89262Smrg	continue
752147e89262Smrg	;;
752247e89262Smrg
752347e89262Smrg      # Some other compiler argument.
752447e89262Smrg      *)
752547e89262Smrg	# Unknown arguments in both finalize_command and compile_command need
752647e89262Smrg	# to be aesthetically quoted because they are evaled later.
752747e89262Smrg	func_quote_for_eval "$arg"
7528e6d2e958Smrg	arg=$func_quote_for_eval_result
752947e89262Smrg	;;
753047e89262Smrg      esac # arg
753147e89262Smrg
753247e89262Smrg      # Now actually substitute the argument into the commands.
753347e89262Smrg      if test -n "$arg"; then
753447e89262Smrg	func_append compile_command " $arg"
753547e89262Smrg	func_append finalize_command " $arg"
753647e89262Smrg      fi
753747e89262Smrg    done # argument parsing loop
753847e89262Smrg
753947e89262Smrg    test -n "$prev" && \
7540e6d2e958Smrg      func_fatal_help "the '$prevarg' option requires an argument"
754147e89262Smrg
7542e6d2e958Smrg    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
754347e89262Smrg      eval arg=\"$export_dynamic_flag_spec\"
754447e89262Smrg      func_append compile_command " $arg"
754547e89262Smrg      func_append finalize_command " $arg"
754647e89262Smrg    fi
754747e89262Smrg
754847e89262Smrg    oldlibs=
754947e89262Smrg    # calculate the name of the file, without its directory
755047e89262Smrg    func_basename "$output"
7551e6d2e958Smrg    outputname=$func_basename_result
7552e6d2e958Smrg    libobjs_save=$libobjs
755347e89262Smrg
755447e89262Smrg    if test -n "$shlibpath_var"; then
755547e89262Smrg      # get the directories listed in $shlibpath_var
7556e6d2e958Smrg      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
7557bd1da9d7Smrg    else
755847e89262Smrg      shlib_search_path=
7559bd1da9d7Smrg    fi
756047e89262Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
756147e89262Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
7562bd1da9d7Smrg
7563e6d2e958Smrg    # Definition is injected by LT_CONFIG during libtool generation.
7564e6d2e958Smrg    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
7565e6d2e958Smrg
756647e89262Smrg    func_dirname "$output" "/" ""
7567e6d2e958Smrg    output_objdir=$func_dirname_result$objdir
7568899129b3Smrg    func_to_tool_file "$output_objdir/"
7569899129b3Smrg    tool_output_objdir=$func_to_tool_file_result
757047e89262Smrg    # Create the object directory.
757147e89262Smrg    func_mkdir_p "$output_objdir"
7572bd1da9d7Smrg
757347e89262Smrg    # Determine the type of output
757447e89262Smrg    case $output in
757547e89262Smrg    "")
757647e89262Smrg      func_fatal_help "you must specify an output file"
757747e89262Smrg      ;;
757847e89262Smrg    *.$libext) linkmode=oldlib ;;
757947e89262Smrg    *.lo | *.$objext) linkmode=obj ;;
758047e89262Smrg    *.la) linkmode=lib ;;
758147e89262Smrg    *) linkmode=prog ;; # Anything else should be a program.
758247e89262Smrg    esac
758347e89262Smrg
758447e89262Smrg    specialdeplibs=
758547e89262Smrg
758647e89262Smrg    libs=
758747e89262Smrg    # Find all interdependent deplibs by searching for libraries
758847e89262Smrg    # that are linked more than once (e.g. -la -lb -la)
758947e89262Smrg    for deplib in $deplibs; do
7590e6d2e958Smrg      if $opt_preserve_dup_deps; then
759147e89262Smrg	case "$libs " in
7592899129b3Smrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
759347e89262Smrg	esac
759447e89262Smrg      fi
7595899129b3Smrg      func_append libs " $deplib"
759647e89262Smrg    done
759747e89262Smrg
7598e6d2e958Smrg    if test lib = "$linkmode"; then
759947e89262Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
760047e89262Smrg
760147e89262Smrg      # Compute libraries that are listed more than once in $predeps
760247e89262Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
760347e89262Smrg      # not to be eliminated).
760447e89262Smrg      pre_post_deps=
760547e89262Smrg      if $opt_duplicate_compiler_generated_deps; then
760647e89262Smrg	for pre_post_dep in $predeps $postdeps; do
760747e89262Smrg	  case "$pre_post_deps " in
7608899129b3Smrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
760947e89262Smrg	  esac
7610899129b3Smrg	  func_append pre_post_deps " $pre_post_dep"
761147e89262Smrg	done
761247e89262Smrg      fi
761347e89262Smrg      pre_post_deps=
761447e89262Smrg    fi
761547e89262Smrg
761647e89262Smrg    deplibs=
761747e89262Smrg    newdependency_libs=
761847e89262Smrg    newlib_search_path=
761947e89262Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
762047e89262Smrg    notinst_deplibs= # not-installed libtool libraries
762147e89262Smrg    notinst_path= # paths that contain not-installed libtool libraries
762247e89262Smrg
762347e89262Smrg    case $linkmode in
762447e89262Smrg    lib)
762547e89262Smrg	passes="conv dlpreopen link"
762647e89262Smrg	for file in $dlfiles $dlprefiles; do
762747e89262Smrg	  case $file in
762847e89262Smrg	  *.la) ;;
762947e89262Smrg	  *)
7630e6d2e958Smrg	    func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
763147e89262Smrg	    ;;
763247e89262Smrg	  esac
763347e89262Smrg	done
763447e89262Smrg	;;
763547e89262Smrg    prog)
763647e89262Smrg	compile_deplibs=
763747e89262Smrg	finalize_deplibs=
7638e6d2e958Smrg	alldeplibs=false
763947e89262Smrg	newdlfiles=
764047e89262Smrg	newdlprefiles=
764147e89262Smrg	passes="conv scan dlopen dlpreopen link"
764247e89262Smrg	;;
764347e89262Smrg    *)  passes="conv"
764447e89262Smrg	;;
764547e89262Smrg    esac
764647e89262Smrg
764747e89262Smrg    for pass in $passes; do
764847e89262Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
764947e89262Smrg      # so that -L comes before libs that need it for instance...
7650e6d2e958Smrg      if test lib,link = "$linkmode,$pass"; then
765147e89262Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
765247e89262Smrg	##        order, and fix it there properly
765347e89262Smrg        tmp_deplibs=
765447e89262Smrg	for deplib in $deplibs; do
765547e89262Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
765647e89262Smrg	done
7657e6d2e958Smrg	deplibs=$tmp_deplibs
765847e89262Smrg      fi
765947e89262Smrg
7660e6d2e958Smrg      if test lib,link = "$linkmode,$pass" ||
7661e6d2e958Smrg	 test prog,scan = "$linkmode,$pass"; then
7662e6d2e958Smrg	libs=$deplibs
766347e89262Smrg	deplibs=
766447e89262Smrg      fi
7665e6d2e958Smrg      if test prog = "$linkmode"; then
766647e89262Smrg	case $pass in
7667e6d2e958Smrg	dlopen) libs=$dlfiles ;;
7668e6d2e958Smrg	dlpreopen) libs=$dlprefiles ;;
76696ad5a0e2Smrg	link)
76706ad5a0e2Smrg	  libs="$deplibs %DEPLIBS%"
76716ad5a0e2Smrg	  test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
76726ad5a0e2Smrg	  ;;
767347e89262Smrg	esac
767447e89262Smrg      fi
7675e6d2e958Smrg      if test lib,dlpreopen = "$linkmode,$pass"; then
767647e89262Smrg	# Collect and forward deplibs of preopened libtool libs
767747e89262Smrg	for lib in $dlprefiles; do
767847e89262Smrg	  # Ignore non-libtool-libs
767947e89262Smrg	  dependency_libs=
7680899129b3Smrg	  func_resolve_sysroot "$lib"
768147e89262Smrg	  case $lib in
7682899129b3Smrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
768347e89262Smrg	  esac
768447e89262Smrg
768547e89262Smrg	  # Collect preopened libtool deplibs, except any this library
768647e89262Smrg	  # has declared as weak libs
768747e89262Smrg	  for deplib in $dependency_libs; do
768847e89262Smrg	    func_basename "$deplib"
768947e89262Smrg            deplib_base=$func_basename_result
769047e89262Smrg	    case " $weak_libs " in
769147e89262Smrg	    *" $deplib_base "*) ;;
7692899129b3Smrg	    *) func_append deplibs " $deplib" ;;
769347e89262Smrg	    esac
769447e89262Smrg	  done
769547e89262Smrg	done
7696e6d2e958Smrg	libs=$dlprefiles
769747e89262Smrg      fi
7698e6d2e958Smrg      if test dlopen = "$pass"; then
769947e89262Smrg	# Collect dlpreopened libraries
7700e6d2e958Smrg	save_deplibs=$deplibs
770147e89262Smrg	deplibs=
770247e89262Smrg      fi
770347e89262Smrg
770447e89262Smrg      for deplib in $libs; do
770547e89262Smrg	lib=
7706e6d2e958Smrg	found=false
770747e89262Smrg	case $deplib in
7708899129b3Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7709899129b3Smrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7710e6d2e958Smrg	  if test prog,link = "$linkmode,$pass"; then
771147e89262Smrg	    compile_deplibs="$deplib $compile_deplibs"
771247e89262Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
771347e89262Smrg	  else
7714899129b3Smrg	    func_append compiler_flags " $deplib"
7715e6d2e958Smrg	    if test lib = "$linkmode"; then
771647e89262Smrg		case "$new_inherited_linker_flags " in
771747e89262Smrg		    *" $deplib "*) ;;
7718899129b3Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
771947e89262Smrg		esac
772047e89262Smrg	    fi
772147e89262Smrg	  fi
772247e89262Smrg	  continue
772347e89262Smrg	  ;;
772447e89262Smrg	-l*)
7725e6d2e958Smrg	  if test lib != "$linkmode" && test prog != "$linkmode"; then
7726e6d2e958Smrg	    func_warning "'-l' is ignored for archives/objects"
772747e89262Smrg	    continue
772847e89262Smrg	  fi
772947e89262Smrg	  func_stripname '-l' '' "$deplib"
773047e89262Smrg	  name=$func_stripname_result
7731e6d2e958Smrg	  if test lib = "$linkmode"; then
773247e89262Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
773347e89262Smrg	  else
773447e89262Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
773547e89262Smrg	  fi
773647e89262Smrg	  for searchdir in $searchdirs; do
773747e89262Smrg	    for search_ext in .la $std_shrext .so .a; do
773847e89262Smrg	      # Search the libtool library
7739e6d2e958Smrg	      lib=$searchdir/lib$name$search_ext
774047e89262Smrg	      if test -f "$lib"; then
7741e6d2e958Smrg		if test .la = "$search_ext"; then
7742e6d2e958Smrg		  found=:
774347e89262Smrg		else
7744e6d2e958Smrg		  found=false
774547e89262Smrg		fi
774647e89262Smrg		break 2
774747e89262Smrg	      fi
774847e89262Smrg	    done
774947e89262Smrg	  done
7750e6d2e958Smrg	  if $found; then
7751e6d2e958Smrg	    # deplib is a libtool library
775247e89262Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
775347e89262Smrg	    # We need to do some special things here, and not later.
7754e6d2e958Smrg	    if test yes = "$allow_libtool_libs_with_static_runtimes"; then
775547e89262Smrg	      case " $predeps $postdeps " in
775647e89262Smrg	      *" $deplib "*)
775747e89262Smrg		if func_lalib_p "$lib"; then
775847e89262Smrg		  library_names=
775947e89262Smrg		  old_library=
776047e89262Smrg		  func_source "$lib"
776147e89262Smrg		  for l in $old_library $library_names; do
7762e6d2e958Smrg		    ll=$l
776347e89262Smrg		  done
7764e6d2e958Smrg		  if test "X$ll" = "X$old_library"; then # only static version available
7765e6d2e958Smrg		    found=false
776647e89262Smrg		    func_dirname "$lib" "" "."
7767e6d2e958Smrg		    ladir=$func_dirname_result
776847e89262Smrg		    lib=$ladir/$old_library
7769e6d2e958Smrg		    if test prog,link = "$linkmode,$pass"; then
777047e89262Smrg		      compile_deplibs="$deplib $compile_deplibs"
777147e89262Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
777247e89262Smrg		    else
777347e89262Smrg		      deplibs="$deplib $deplibs"
7774e6d2e958Smrg		      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
777547e89262Smrg		    fi
777647e89262Smrg		    continue
777747e89262Smrg		  fi
777847e89262Smrg		fi
777947e89262Smrg		;;
778047e89262Smrg	      *) ;;
778147e89262Smrg	      esac
778247e89262Smrg	    fi
7783e6d2e958Smrg	  else
7784e6d2e958Smrg	    # deplib doesn't seem to be a libtool library
7785e6d2e958Smrg	    if test prog,link = "$linkmode,$pass"; then
7786e6d2e958Smrg	      compile_deplibs="$deplib $compile_deplibs"
7787e6d2e958Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
7788e6d2e958Smrg	    else
7789e6d2e958Smrg	      deplibs="$deplib $deplibs"
7790e6d2e958Smrg	      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
7791e6d2e958Smrg	    fi
7792e6d2e958Smrg	    continue
779347e89262Smrg	  fi
779447e89262Smrg	  ;; # -l
779547e89262Smrg	*.ltframework)
7796e6d2e958Smrg	  if test prog,link = "$linkmode,$pass"; then
779747e89262Smrg	    compile_deplibs="$deplib $compile_deplibs"
779847e89262Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
779947e89262Smrg	  else
780047e89262Smrg	    deplibs="$deplib $deplibs"
7801e6d2e958Smrg	    if test lib = "$linkmode"; then
780247e89262Smrg		case "$new_inherited_linker_flags " in
780347e89262Smrg		    *" $deplib "*) ;;
7804899129b3Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
780547e89262Smrg		esac
780647e89262Smrg	    fi
780747e89262Smrg	  fi
780847e89262Smrg	  continue
780947e89262Smrg	  ;;
781047e89262Smrg	-L*)
781147e89262Smrg	  case $linkmode in
781247e89262Smrg	  lib)
781347e89262Smrg	    deplibs="$deplib $deplibs"
7814e6d2e958Smrg	    test conv = "$pass" && continue
781547e89262Smrg	    newdependency_libs="$deplib $newdependency_libs"
781647e89262Smrg	    func_stripname '-L' '' "$deplib"
7817899129b3Smrg	    func_resolve_sysroot "$func_stripname_result"
7818899129b3Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
781947e89262Smrg	    ;;
782047e89262Smrg	  prog)
7821e6d2e958Smrg	    if test conv = "$pass"; then
782247e89262Smrg	      deplibs="$deplib $deplibs"
782347e89262Smrg	      continue
782447e89262Smrg	    fi
7825e6d2e958Smrg	    if test scan = "$pass"; then
782647e89262Smrg	      deplibs="$deplib $deplibs"
782747e89262Smrg	    else
782847e89262Smrg	      compile_deplibs="$deplib $compile_deplibs"
782947e89262Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
783047e89262Smrg	    fi
783147e89262Smrg	    func_stripname '-L' '' "$deplib"
7832899129b3Smrg	    func_resolve_sysroot "$func_stripname_result"
7833899129b3Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
783447e89262Smrg	    ;;
783547e89262Smrg	  *)
7836e6d2e958Smrg	    func_warning "'-L' is ignored for archives/objects"
783747e89262Smrg	    ;;
783847e89262Smrg	  esac # linkmode
783947e89262Smrg	  continue
784047e89262Smrg	  ;; # -L
784147e89262Smrg	-R*)
7842e6d2e958Smrg	  if test link = "$pass"; then
784347e89262Smrg	    func_stripname '-R' '' "$deplib"
7844899129b3Smrg	    func_resolve_sysroot "$func_stripname_result"
7845899129b3Smrg	    dir=$func_resolve_sysroot_result
784647e89262Smrg	    # Make sure the xrpath contains only unique directories.
784747e89262Smrg	    case "$xrpath " in
784847e89262Smrg	    *" $dir "*) ;;
7849899129b3Smrg	    *) func_append xrpath " $dir" ;;
785047e89262Smrg	    esac
785147e89262Smrg	  fi
785247e89262Smrg	  deplibs="$deplib $deplibs"
785347e89262Smrg	  continue
785447e89262Smrg	  ;;
7855899129b3Smrg	*.la)
7856899129b3Smrg	  func_resolve_sysroot "$deplib"
7857899129b3Smrg	  lib=$func_resolve_sysroot_result
7858899129b3Smrg	  ;;
785947e89262Smrg	*.$libext)
7860e6d2e958Smrg	  if test conv = "$pass"; then
786147e89262Smrg	    deplibs="$deplib $deplibs"
786247e89262Smrg	    continue
786347e89262Smrg	  fi
786447e89262Smrg	  case $linkmode in
786547e89262Smrg	  lib)
786647e89262Smrg	    # Linking convenience modules into shared libraries is allowed,
786747e89262Smrg	    # but linking other static libraries is non-portable.
786847e89262Smrg	    case " $dlpreconveniencelibs " in
786947e89262Smrg	    *" $deplib "*) ;;
787047e89262Smrg	    *)
7871e6d2e958Smrg	      valid_a_lib=false
787247e89262Smrg	      case $deplibs_check_method in
787347e89262Smrg		match_pattern*)
787447e89262Smrg		  set dummy $deplibs_check_method; shift
787547e89262Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
787647e89262Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
787747e89262Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
7878e6d2e958Smrg		    valid_a_lib=:
787947e89262Smrg		  fi
788047e89262Smrg		;;
788147e89262Smrg		pass_all)
7882e6d2e958Smrg		  valid_a_lib=:
788347e89262Smrg		;;
788447e89262Smrg	      esac
7885e6d2e958Smrg	      if $valid_a_lib; then
7886e6d2e958Smrg		echo
7887e6d2e958Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
7888e6d2e958Smrg		$ECHO "*** static library $deplib is not portable!"
7889e6d2e958Smrg		deplibs="$deplib $deplibs"
7890e6d2e958Smrg	      else
789147e89262Smrg		echo
789247e89262Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
789347e89262Smrg		echo "*** I have the capability to make that library automatically link in when"
789447e89262Smrg		echo "*** you link to this library.  But I can only do this if you have a"
789547e89262Smrg		echo "*** shared version of the library, which you do not appear to have"
789647e89262Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
789747e89262Smrg		echo "*** that it is just a static archive that I should not use here."
789847e89262Smrg	      fi
789947e89262Smrg	      ;;
790047e89262Smrg	    esac
790147e89262Smrg	    continue
790247e89262Smrg	    ;;
790347e89262Smrg	  prog)
7904e6d2e958Smrg	    if test link != "$pass"; then
790547e89262Smrg	      deplibs="$deplib $deplibs"
790647e89262Smrg	    else
790747e89262Smrg	      compile_deplibs="$deplib $compile_deplibs"
790847e89262Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
790947e89262Smrg	    fi
791047e89262Smrg	    continue
791147e89262Smrg	    ;;
791247e89262Smrg	  esac # linkmode
791347e89262Smrg	  ;; # *.$libext
791447e89262Smrg	*.lo | *.$objext)
7915e6d2e958Smrg	  if test conv = "$pass"; then
791647e89262Smrg	    deplibs="$deplib $deplibs"
7917e6d2e958Smrg	  elif test prog = "$linkmode"; then
7918e6d2e958Smrg	    if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
791947e89262Smrg	      # If there is no dlopen support or we're linking statically,
792047e89262Smrg	      # we need to preload.
7921899129b3Smrg	      func_append newdlprefiles " $deplib"
792247e89262Smrg	      compile_deplibs="$deplib $compile_deplibs"
792347e89262Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
792447e89262Smrg	    else
7925899129b3Smrg	      func_append newdlfiles " $deplib"
792647e89262Smrg	    fi
792747e89262Smrg	  fi
792847e89262Smrg	  continue
792947e89262Smrg	  ;;
793047e89262Smrg	%DEPLIBS%)
7931e6d2e958Smrg	  alldeplibs=:
793247e89262Smrg	  continue
793347e89262Smrg	  ;;
793447e89262Smrg	esac # case $deplib
793547e89262Smrg
7936e6d2e958Smrg	$found || test -f "$lib" \
7937e6d2e958Smrg	  || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
793847e89262Smrg
793947e89262Smrg	# Check to see that this really is a libtool archive.
794047e89262Smrg	func_lalib_unsafe_p "$lib" \
7941e6d2e958Smrg	  || func_fatal_error "'$lib' is not a valid libtool archive"
794247e89262Smrg
794347e89262Smrg	func_dirname "$lib" "" "."
7944e6d2e958Smrg	ladir=$func_dirname_result
794547e89262Smrg
794647e89262Smrg	dlname=
794747e89262Smrg	dlopen=
794847e89262Smrg	dlpreopen=
794947e89262Smrg	libdir=
795047e89262Smrg	library_names=
795147e89262Smrg	old_library=
795247e89262Smrg	inherited_linker_flags=
795347e89262Smrg	# If the library was installed with an old release of libtool,
795447e89262Smrg	# it will not redefine variables installed, or shouldnotlink
795547e89262Smrg	installed=yes
795647e89262Smrg	shouldnotlink=no
795747e89262Smrg	avoidtemprpath=
795847e89262Smrg
795947e89262Smrg
796047e89262Smrg	# Read the .la file
796147e89262Smrg	func_source "$lib"
796247e89262Smrg
796347e89262Smrg	# Convert "-framework foo" to "foo.ltframework"
796447e89262Smrg	if test -n "$inherited_linker_flags"; then
796547e89262Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
796647e89262Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
796747e89262Smrg	    case " $new_inherited_linker_flags " in
796847e89262Smrg	      *" $tmp_inherited_linker_flag "*) ;;
7969899129b3Smrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
797047e89262Smrg	    esac
797147e89262Smrg	  done
797247e89262Smrg	fi
797347e89262Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7974e6d2e958Smrg	if test lib,link = "$linkmode,$pass" ||
7975e6d2e958Smrg	   test prog,scan = "$linkmode,$pass" ||
7976e6d2e958Smrg	   { test prog != "$linkmode" && test lib != "$linkmode"; }; then
7977899129b3Smrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
7978899129b3Smrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
797947e89262Smrg	fi
798047e89262Smrg
7981e6d2e958Smrg	if test conv = "$pass"; then
798247e89262Smrg	  # Only check for convenience libraries
798347e89262Smrg	  deplibs="$lib $deplibs"
798447e89262Smrg	  if test -z "$libdir"; then
798547e89262Smrg	    if test -z "$old_library"; then
7986e6d2e958Smrg	      func_fatal_error "cannot find name of link library for '$lib'"
798747e89262Smrg	    fi
798847e89262Smrg	    # It is a libtool convenience library, so add in its objects.
7989899129b3Smrg	    func_append convenience " $ladir/$objdir/$old_library"
7990899129b3Smrg	    func_append old_convenience " $ladir/$objdir/$old_library"
79916ad5a0e2Smrg	    tmp_libs=
79926ad5a0e2Smrg	    for deplib in $dependency_libs; do
79936ad5a0e2Smrg	      deplibs="$deplib $deplibs"
79946ad5a0e2Smrg	      if $opt_preserve_dup_deps; then
79956ad5a0e2Smrg		case "$tmp_libs " in
79966ad5a0e2Smrg		*" $deplib "*) func_append specialdeplibs " $deplib" ;;
79976ad5a0e2Smrg		esac
79986ad5a0e2Smrg	      fi
79996ad5a0e2Smrg	      func_append tmp_libs " $deplib"
80006ad5a0e2Smrg	    done
8001e6d2e958Smrg	  elif test prog != "$linkmode" && test lib != "$linkmode"; then
8002e6d2e958Smrg	    func_fatal_error "'$lib' is not a convenience library"
800347e89262Smrg	  fi
800447e89262Smrg	  continue
800547e89262Smrg	fi # $pass = conv
800647e89262Smrg
800747e89262Smrg
800847e89262Smrg	# Get the name of the library we link against.
800947e89262Smrg	linklib=
8010899129b3Smrg	if test -n "$old_library" &&
8011e6d2e958Smrg	   { test yes = "$prefer_static_libs" ||
8012e6d2e958Smrg	     test built,no = "$prefer_static_libs,$installed"; }; then
8013899129b3Smrg	  linklib=$old_library
8014899129b3Smrg	else
8015899129b3Smrg	  for l in $old_library $library_names; do
8016e6d2e958Smrg	    linklib=$l
8017899129b3Smrg	  done
8018899129b3Smrg	fi
801947e89262Smrg	if test -z "$linklib"; then
8020e6d2e958Smrg	  func_fatal_error "cannot find name of link library for '$lib'"
802147e89262Smrg	fi
802247e89262Smrg
802347e89262Smrg	# This library was specified with -dlopen.
8024e6d2e958Smrg	if test dlopen = "$pass"; then
8025e6d2e958Smrg	  test -z "$libdir" \
8026e6d2e958Smrg	    && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
802747e89262Smrg	  if test -z "$dlname" ||
8028e6d2e958Smrg	     test yes != "$dlopen_support" ||
8029e6d2e958Smrg	     test no = "$build_libtool_libs"
8030e6d2e958Smrg	  then
803147e89262Smrg	    # If there is no dlname, no dlopen support or we're linking
803247e89262Smrg	    # statically, we need to preload.  We also need to preload any
803347e89262Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
803447e89262Smrg	    # bomb out in the load deplibs phase.
8035899129b3Smrg	    func_append dlprefiles " $lib $dependency_libs"
803647e89262Smrg	  else
8037899129b3Smrg	    func_append newdlfiles " $lib"
803847e89262Smrg	  fi
803947e89262Smrg	  continue
804047e89262Smrg	fi # $pass = dlopen
804147e89262Smrg
804247e89262Smrg	# We need an absolute path.
804347e89262Smrg	case $ladir in
8044e6d2e958Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
804547e89262Smrg	*)
804647e89262Smrg	  abs_ladir=`cd "$ladir" && pwd`
804747e89262Smrg	  if test -z "$abs_ladir"; then
8048e6d2e958Smrg	    func_warning "cannot determine absolute directory name of '$ladir'"
804947e89262Smrg	    func_warning "passing it literally to the linker, although it might fail"
8050e6d2e958Smrg	    abs_ladir=$ladir
805147e89262Smrg	  fi
805247e89262Smrg	  ;;
805347e89262Smrg	esac
805447e89262Smrg	func_basename "$lib"
8055e6d2e958Smrg	laname=$func_basename_result
805647e89262Smrg
805747e89262Smrg	# Find the relevant object directory and library name.
8058e6d2e958Smrg	if test yes = "$installed"; then
8059899129b3Smrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
8060e6d2e958Smrg	    func_warning "library '$lib' was moved."
8061e6d2e958Smrg	    dir=$ladir
8062e6d2e958Smrg	    absdir=$abs_ladir
8063e6d2e958Smrg	    libdir=$abs_ladir
806447e89262Smrg	  else
8065e6d2e958Smrg	    dir=$lt_sysroot$libdir
8066e6d2e958Smrg	    absdir=$lt_sysroot$libdir
806747e89262Smrg	  fi
8068e6d2e958Smrg	  test yes = "$hardcode_automatic" && avoidtemprpath=yes
806947e89262Smrg	else
807047e89262Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
8071e6d2e958Smrg	    dir=$ladir
8072e6d2e958Smrg	    absdir=$abs_ladir
807347e89262Smrg	    # Remove this search path later
8074899129b3Smrg	    func_append notinst_path " $abs_ladir"
807547e89262Smrg	  else
8076e6d2e958Smrg	    dir=$ladir/$objdir
8077e6d2e958Smrg	    absdir=$abs_ladir/$objdir
807847e89262Smrg	    # Remove this search path later
8079899129b3Smrg	    func_append notinst_path " $abs_ladir"
808047e89262Smrg	  fi
808147e89262Smrg	fi # $installed = yes
808247e89262Smrg	func_stripname 'lib' '.la' "$laname"
808347e89262Smrg	name=$func_stripname_result
808447e89262Smrg
808547e89262Smrg	# This library was specified with -dlpreopen.
8086e6d2e958Smrg	if test dlpreopen = "$pass"; then
8087e6d2e958Smrg	  if test -z "$libdir" && test prog = "$linkmode"; then
8088e6d2e958Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
808947e89262Smrg	  fi
8090e6d2e958Smrg	  case $host in
8091899129b3Smrg	    # special handling for platforms with PE-DLLs.
8092899129b3Smrg	    *cygwin* | *mingw* | *cegcc* )
8093899129b3Smrg	      # Linker will automatically link against shared library if both
8094899129b3Smrg	      # static and shared are present.  Therefore, ensure we extract
8095899129b3Smrg	      # symbols from the import library if a shared library is present
8096899129b3Smrg	      # (otherwise, the dlopen module name will be incorrect).  We do
8097899129b3Smrg	      # this by putting the import library name into $newdlprefiles.
8098899129b3Smrg	      # We recover the dlopen module name by 'saving' the la file
8099899129b3Smrg	      # name in a special purpose variable, and (later) extracting the
8100899129b3Smrg	      # dlname from the la file.
8101899129b3Smrg	      if test -n "$dlname"; then
8102899129b3Smrg	        func_tr_sh "$dir/$linklib"
8103899129b3Smrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
8104899129b3Smrg	        func_append newdlprefiles " $dir/$linklib"
8105899129b3Smrg	      else
8106899129b3Smrg	        func_append newdlprefiles " $dir/$old_library"
8107899129b3Smrg	        # Keep a list of preopened convenience libraries to check
8108899129b3Smrg	        # that they are being used correctly in the link pass.
8109899129b3Smrg	        test -z "$libdir" && \
8110899129b3Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
8111899129b3Smrg	      fi
8112899129b3Smrg	    ;;
8113899129b3Smrg	    * )
8114899129b3Smrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
8115899129b3Smrg	      # are required to link).
8116899129b3Smrg	      if test -n "$old_library"; then
8117899129b3Smrg	        func_append newdlprefiles " $dir/$old_library"
8118899129b3Smrg	        # Keep a list of preopened convenience libraries to check
8119899129b3Smrg	        # that they are being used correctly in the link pass.
8120899129b3Smrg	        test -z "$libdir" && \
8121899129b3Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
8122899129b3Smrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
8123899129b3Smrg	      elif test -n "$dlname"; then
8124899129b3Smrg	        func_append newdlprefiles " $dir/$dlname"
8125899129b3Smrg	      else
8126899129b3Smrg	        func_append newdlprefiles " $dir/$linklib"
8127899129b3Smrg	      fi
8128899129b3Smrg	    ;;
8129899129b3Smrg	  esac
813047e89262Smrg	fi # $pass = dlpreopen
813147e89262Smrg
813247e89262Smrg	if test -z "$libdir"; then
813347e89262Smrg	  # Link the convenience library
8134e6d2e958Smrg	  if test lib = "$linkmode"; then
813547e89262Smrg	    deplibs="$dir/$old_library $deplibs"
8136e6d2e958Smrg	  elif test prog,link = "$linkmode,$pass"; then
813747e89262Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
813847e89262Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
813947e89262Smrg	  else
814047e89262Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
814147e89262Smrg	  fi
814247e89262Smrg	  continue
814347e89262Smrg	fi
814447e89262Smrg
814547e89262Smrg
8146e6d2e958Smrg	if test prog = "$linkmode" && test link != "$pass"; then
8147899129b3Smrg	  func_append newlib_search_path " $ladir"
814847e89262Smrg	  deplibs="$lib $deplibs"
814947e89262Smrg
8150e6d2e958Smrg	  linkalldeplibs=false
8151e6d2e958Smrg	  if test no != "$link_all_deplibs" || test -z "$library_names" ||
8152e6d2e958Smrg	     test no = "$build_libtool_libs"; then
8153e6d2e958Smrg	    linkalldeplibs=:
815447e89262Smrg	  fi
815547e89262Smrg
815647e89262Smrg	  tmp_libs=
815747e89262Smrg	  for deplib in $dependency_libs; do
815847e89262Smrg	    case $deplib in
815947e89262Smrg	    -L*) func_stripname '-L' '' "$deplib"
8160899129b3Smrg	         func_resolve_sysroot "$func_stripname_result"
8161899129b3Smrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
816247e89262Smrg		 ;;
816347e89262Smrg	    esac
816447e89262Smrg	    # Need to link against all dependency_libs?
8165e6d2e958Smrg	    if $linkalldeplibs; then
816647e89262Smrg	      deplibs="$deplib $deplibs"
816747e89262Smrg	    else
816847e89262Smrg	      # Need to hardcode shared library paths
816947e89262Smrg	      # or/and link against static libraries
817047e89262Smrg	      newdependency_libs="$deplib $newdependency_libs"
817147e89262Smrg	    fi
8172e6d2e958Smrg	    if $opt_preserve_dup_deps; then
817347e89262Smrg	      case "$tmp_libs " in
8174899129b3Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
817547e89262Smrg	      esac
817647e89262Smrg	    fi
8177899129b3Smrg	    func_append tmp_libs " $deplib"
817847e89262Smrg	  done # for deplib
817947e89262Smrg	  continue
818047e89262Smrg	fi # $linkmode = prog...
818147e89262Smrg
8182e6d2e958Smrg	if test prog,link = "$linkmode,$pass"; then
818347e89262Smrg	  if test -n "$library_names" &&
8184e6d2e958Smrg	     { { test no = "$prefer_static_libs" ||
8185e6d2e958Smrg	         test built,yes = "$prefer_static_libs,$installed"; } ||
818647e89262Smrg	       test -z "$old_library"; }; then
818747e89262Smrg	    # We need to hardcode the library path
8188e6d2e958Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
818947e89262Smrg	      # Make sure the rpath contains only unique directories.
8190e6d2e958Smrg	      case $temp_rpath: in
819147e89262Smrg	      *"$absdir:"*) ;;
8192899129b3Smrg	      *) func_append temp_rpath "$absdir:" ;;
819347e89262Smrg	      esac
819447e89262Smrg	    fi
819547e89262Smrg
819647e89262Smrg	    # Hardcode the library path.
819747e89262Smrg	    # Skip directories that are in the system default run-time
819847e89262Smrg	    # search path.
819947e89262Smrg	    case " $sys_lib_dlsearch_path " in
820047e89262Smrg	    *" $absdir "*) ;;
820147e89262Smrg	    *)
820247e89262Smrg	      case "$compile_rpath " in
820347e89262Smrg	      *" $absdir "*) ;;
8204899129b3Smrg	      *) func_append compile_rpath " $absdir" ;;
820547e89262Smrg	      esac
820647e89262Smrg	      ;;
820747e89262Smrg	    esac
820847e89262Smrg	    case " $sys_lib_dlsearch_path " in
820947e89262Smrg	    *" $libdir "*) ;;
821047e89262Smrg	    *)
821147e89262Smrg	      case "$finalize_rpath " in
821247e89262Smrg	      *" $libdir "*) ;;
8213899129b3Smrg	      *) func_append finalize_rpath " $libdir" ;;
821447e89262Smrg	      esac
821547e89262Smrg	      ;;
821647e89262Smrg	    esac
821747e89262Smrg	  fi # $linkmode,$pass = prog,link...
821847e89262Smrg
8219e6d2e958Smrg	  if $alldeplibs &&
8220e6d2e958Smrg	     { test pass_all = "$deplibs_check_method" ||
8221e6d2e958Smrg	       { test yes = "$build_libtool_libs" &&
822247e89262Smrg		 test -n "$library_names"; }; }; then
822347e89262Smrg	    # We only need to search for static libraries
822447e89262Smrg	    continue
822547e89262Smrg	  fi
822647e89262Smrg	fi
822747e89262Smrg
822847e89262Smrg	link_static=no # Whether the deplib will be linked statically
822947e89262Smrg	use_static_libs=$prefer_static_libs
8230e6d2e958Smrg	if test built = "$use_static_libs" && test yes = "$installed"; then
823147e89262Smrg	  use_static_libs=no
823247e89262Smrg	fi
823347e89262Smrg	if test -n "$library_names" &&
8234e6d2e958Smrg	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
823547e89262Smrg	  case $host in
8236e6d2e958Smrg	  *cygwin* | *mingw* | *cegcc* | *os2*)
823747e89262Smrg	      # No point in relinking DLLs because paths are not encoded
8238899129b3Smrg	      func_append notinst_deplibs " $lib"
823947e89262Smrg	      need_relink=no
824047e89262Smrg	    ;;
824147e89262Smrg	  *)
8242e6d2e958Smrg	    if test no = "$installed"; then
8243899129b3Smrg	      func_append notinst_deplibs " $lib"
824447e89262Smrg	      need_relink=yes
824547e89262Smrg	    fi
824647e89262Smrg	    ;;
824747e89262Smrg	  esac
824847e89262Smrg	  # This is a shared library
824947e89262Smrg
825047e89262Smrg	  # Warn about portability, can't link against -module's on some
825147e89262Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
8252e6d2e958Smrg	  dlopenmodule=
825347e89262Smrg	  for dlpremoduletest in $dlprefiles; do
825447e89262Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
8255e6d2e958Smrg	      dlopenmodule=$dlpremoduletest
825647e89262Smrg	      break
825747e89262Smrg	    fi
825847e89262Smrg	  done
8259e6d2e958Smrg	  if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
826047e89262Smrg	    echo
8261e6d2e958Smrg	    if test prog = "$linkmode"; then
826247e89262Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
826347e89262Smrg	    else
826447e89262Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
826547e89262Smrg	    fi
826647e89262Smrg	    $ECHO "*** $linklib is not portable!"
826747e89262Smrg	  fi
8268e6d2e958Smrg	  if test lib = "$linkmode" &&
8269e6d2e958Smrg	     test yes = "$hardcode_into_libs"; then
827047e89262Smrg	    # Hardcode the library path.
827147e89262Smrg	    # Skip directories that are in the system default run-time
827247e89262Smrg	    # search path.
827347e89262Smrg	    case " $sys_lib_dlsearch_path " in
827447e89262Smrg	    *" $absdir "*) ;;
827547e89262Smrg	    *)
827647e89262Smrg	      case "$compile_rpath " in
827747e89262Smrg	      *" $absdir "*) ;;
8278899129b3Smrg	      *) func_append compile_rpath " $absdir" ;;
827947e89262Smrg	      esac
828047e89262Smrg	      ;;
828147e89262Smrg	    esac
828247e89262Smrg	    case " $sys_lib_dlsearch_path " in
828347e89262Smrg	    *" $libdir "*) ;;
828447e89262Smrg	    *)
828547e89262Smrg	      case "$finalize_rpath " in
828647e89262Smrg	      *" $libdir "*) ;;
8287899129b3Smrg	      *) func_append finalize_rpath " $libdir" ;;
828847e89262Smrg	      esac
828947e89262Smrg	      ;;
829047e89262Smrg	    esac
829147e89262Smrg	  fi
829247e89262Smrg
829347e89262Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
829447e89262Smrg	    # figure out the soname
829547e89262Smrg	    set dummy $library_names
829647e89262Smrg	    shift
8297e6d2e958Smrg	    realname=$1
829847e89262Smrg	    shift
829947e89262Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
830047e89262Smrg	    # use dlname if we got it. it's perfectly good, no?
830147e89262Smrg	    if test -n "$dlname"; then
8302e6d2e958Smrg	      soname=$dlname
830347e89262Smrg	    elif test -n "$soname_spec"; then
830447e89262Smrg	      # bleh windows
830547e89262Smrg	      case $host in
8306e6d2e958Smrg	      *cygwin* | mingw* | *cegcc* | *os2*)
830747e89262Smrg	        func_arith $current - $age
830847e89262Smrg		major=$func_arith_result
8309e6d2e958Smrg		versuffix=-$major
831047e89262Smrg		;;
831147e89262Smrg	      esac
831247e89262Smrg	      eval soname=\"$soname_spec\"
831347e89262Smrg	    else
8314e6d2e958Smrg	      soname=$realname
831547e89262Smrg	    fi
831647e89262Smrg
831747e89262Smrg	    # Make a new name for the extract_expsyms_cmds to use
8318e6d2e958Smrg	    soroot=$soname
831947e89262Smrg	    func_basename "$soroot"
8320e6d2e958Smrg	    soname=$func_basename_result
832147e89262Smrg	    func_stripname 'lib' '.dll' "$soname"
832247e89262Smrg	    newlib=libimp-$func_stripname_result.a
832347e89262Smrg
832447e89262Smrg	    # If the library has no export list, then create one now
832547e89262Smrg	    if test -f "$output_objdir/$soname-def"; then :
832647e89262Smrg	    else
8327e6d2e958Smrg	      func_verbose "extracting exported symbol list from '$soname'"
832847e89262Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
832947e89262Smrg	    fi
833047e89262Smrg
833147e89262Smrg	    # Create $newlib
833247e89262Smrg	    if test -f "$output_objdir/$newlib"; then :; else
8333e6d2e958Smrg	      func_verbose "generating import library for '$soname'"
833447e89262Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
833547e89262Smrg	    fi
833647e89262Smrg	    # make sure the library variables are pointing to the new library
833747e89262Smrg	    dir=$output_objdir
833847e89262Smrg	    linklib=$newlib
833947e89262Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
834047e89262Smrg
8341e6d2e958Smrg	  if test prog = "$linkmode" || test relink != "$opt_mode"; then
834247e89262Smrg	    add_shlibpath=
834347e89262Smrg	    add_dir=
834447e89262Smrg	    add=
834547e89262Smrg	    lib_linked=yes
834647e89262Smrg	    case $hardcode_action in
834747e89262Smrg	    immediate | unsupported)
8348e6d2e958Smrg	      if test no = "$hardcode_direct"; then
8349e6d2e958Smrg		add=$dir/$linklib
835047e89262Smrg		case $host in
8351e6d2e958Smrg		  *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
8352e6d2e958Smrg		  *-*-sysv4*uw2*) add_dir=-L$dir ;;
835347e89262Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
8354e6d2e958Smrg		    *-*-unixware7*) add_dir=-L$dir ;;
835547e89262Smrg		  *-*-darwin* )
8356e6d2e958Smrg		    # if the lib is a (non-dlopened) module then we cannot
835747e89262Smrg		    # link against it, someone is ignoring the earlier warnings
835847e89262Smrg		    if /usr/bin/file -L $add 2> /dev/null |
8359e6d2e958Smrg			 $GREP ": [^:]* bundle" >/dev/null; then
836047e89262Smrg		      if test "X$dlopenmodule" != "X$lib"; then
836147e89262Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
8362e6d2e958Smrg			if test -z "$old_library"; then
836347e89262Smrg			  echo
836447e89262Smrg			  echo "*** And there doesn't seem to be a static archive available"
836547e89262Smrg			  echo "*** The link will probably fail, sorry"
836647e89262Smrg			else
8367e6d2e958Smrg			  add=$dir/$old_library
836847e89262Smrg			fi
836947e89262Smrg		      elif test -n "$old_library"; then
8370e6d2e958Smrg			add=$dir/$old_library
837147e89262Smrg		      fi
837247e89262Smrg		    fi
837347e89262Smrg		esac
8374e6d2e958Smrg	      elif test no = "$hardcode_minus_L"; then
837547e89262Smrg		case $host in
8376e6d2e958Smrg		*-*-sunos*) add_shlibpath=$dir ;;
837747e89262Smrg		esac
8378e6d2e958Smrg		add_dir=-L$dir
8379e6d2e958Smrg		add=-l$name
8380e6d2e958Smrg	      elif test no = "$hardcode_shlibpath_var"; then
8381e6d2e958Smrg		add_shlibpath=$dir
8382e6d2e958Smrg		add=-l$name
838347e89262Smrg	      else
838447e89262Smrg		lib_linked=no
838547e89262Smrg	      fi
838647e89262Smrg	      ;;
838747e89262Smrg	    relink)
8388e6d2e958Smrg	      if test yes = "$hardcode_direct" &&
8389e6d2e958Smrg	         test no = "$hardcode_direct_absolute"; then
8390e6d2e958Smrg		add=$dir/$linklib
8391e6d2e958Smrg	      elif test yes = "$hardcode_minus_L"; then
8392e6d2e958Smrg		add_dir=-L$absdir
839347e89262Smrg		# Try looking first in the location we're being installed to.
839447e89262Smrg		if test -n "$inst_prefix_dir"; then
839547e89262Smrg		  case $libdir in
839647e89262Smrg		    [\\/]*)
8397899129b3Smrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
839847e89262Smrg		      ;;
839947e89262Smrg		  esac
840047e89262Smrg		fi
8401e6d2e958Smrg		add=-l$name
8402e6d2e958Smrg	      elif test yes = "$hardcode_shlibpath_var"; then
8403e6d2e958Smrg		add_shlibpath=$dir
8404e6d2e958Smrg		add=-l$name
840547e89262Smrg	      else
840647e89262Smrg		lib_linked=no
840747e89262Smrg	      fi
840847e89262Smrg	      ;;
840947e89262Smrg	    *) lib_linked=no ;;
841047e89262Smrg	    esac
841147e89262Smrg
8412e6d2e958Smrg	    if test yes != "$lib_linked"; then
841347e89262Smrg	      func_fatal_configuration "unsupported hardcode properties"
841447e89262Smrg	    fi
841547e89262Smrg
841647e89262Smrg	    if test -n "$add_shlibpath"; then
841747e89262Smrg	      case :$compile_shlibpath: in
841847e89262Smrg	      *":$add_shlibpath:"*) ;;
8419899129b3Smrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
842047e89262Smrg	      esac
842147e89262Smrg	    fi
8422e6d2e958Smrg	    if test prog = "$linkmode"; then
842347e89262Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
842447e89262Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
842547e89262Smrg	    else
842647e89262Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
842747e89262Smrg	      test -n "$add" && deplibs="$add $deplibs"
8428e6d2e958Smrg	      if test yes != "$hardcode_direct" &&
8429e6d2e958Smrg		 test yes != "$hardcode_minus_L" &&
8430e6d2e958Smrg		 test yes = "$hardcode_shlibpath_var"; then
843147e89262Smrg		case :$finalize_shlibpath: in
843247e89262Smrg		*":$libdir:"*) ;;
8433899129b3Smrg		*) func_append finalize_shlibpath "$libdir:" ;;
843447e89262Smrg		esac
843547e89262Smrg	      fi
843647e89262Smrg	    fi
843747e89262Smrg	  fi
843847e89262Smrg
8439e6d2e958Smrg	  if test prog = "$linkmode" || test relink = "$opt_mode"; then
844047e89262Smrg	    add_shlibpath=
844147e89262Smrg	    add_dir=
844247e89262Smrg	    add=
844347e89262Smrg	    # Finalize command for both is simple: just hardcode it.
8444e6d2e958Smrg	    if test yes = "$hardcode_direct" &&
8445e6d2e958Smrg	       test no = "$hardcode_direct_absolute"; then
8446e6d2e958Smrg	      add=$libdir/$linklib
8447e6d2e958Smrg	    elif test yes = "$hardcode_minus_L"; then
8448e6d2e958Smrg	      add_dir=-L$libdir
8449e6d2e958Smrg	      add=-l$name
8450e6d2e958Smrg	    elif test yes = "$hardcode_shlibpath_var"; then
845147e89262Smrg	      case :$finalize_shlibpath: in
845247e89262Smrg	      *":$libdir:"*) ;;
8453899129b3Smrg	      *) func_append finalize_shlibpath "$libdir:" ;;
845447e89262Smrg	      esac
8455e6d2e958Smrg	      add=-l$name
8456e6d2e958Smrg	    elif test yes = "$hardcode_automatic"; then
845747e89262Smrg	      if test -n "$inst_prefix_dir" &&
8458e6d2e958Smrg		 test -f "$inst_prefix_dir$libdir/$linklib"; then
8459e6d2e958Smrg		add=$inst_prefix_dir$libdir/$linklib
846047e89262Smrg	      else
8461e6d2e958Smrg		add=$libdir/$linklib
846247e89262Smrg	      fi
846347e89262Smrg	    else
846447e89262Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
8465e6d2e958Smrg	      add_dir=-L$libdir
846647e89262Smrg	      # Try looking first in the location we're being installed to.
846747e89262Smrg	      if test -n "$inst_prefix_dir"; then
846847e89262Smrg		case $libdir in
846947e89262Smrg		  [\\/]*)
8470899129b3Smrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
847147e89262Smrg		    ;;
847247e89262Smrg		esac
847347e89262Smrg	      fi
8474e6d2e958Smrg	      add=-l$name
847547e89262Smrg	    fi
847647e89262Smrg
8477e6d2e958Smrg	    if test prog = "$linkmode"; then
847847e89262Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
847947e89262Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
848047e89262Smrg	    else
848147e89262Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
848247e89262Smrg	      test -n "$add" && deplibs="$add $deplibs"
848347e89262Smrg	    fi
848447e89262Smrg	  fi
8485e6d2e958Smrg	elif test prog = "$linkmode"; then
848647e89262Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
848747e89262Smrg	  # is not unsupported.  This is valid on all known static and
848847e89262Smrg	  # shared platforms.
8489e6d2e958Smrg	  if test unsupported != "$hardcode_direct"; then
8490e6d2e958Smrg	    test -n "$old_library" && linklib=$old_library
849147e89262Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
849247e89262Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
849347e89262Smrg	  else
849447e89262Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
849547e89262Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
849647e89262Smrg	  fi
8497e6d2e958Smrg	elif test yes = "$build_libtool_libs"; then
849847e89262Smrg	  # Not a shared library
8499e6d2e958Smrg	  if test pass_all != "$deplibs_check_method"; then
850047e89262Smrg	    # We're trying link a shared library against a static one
850147e89262Smrg	    # but the system doesn't support it.
850247e89262Smrg
850347e89262Smrg	    # Just print a warning and add the library to dependency_libs so
850447e89262Smrg	    # that the program can be linked against the static library.
850547e89262Smrg	    echo
8506e6d2e958Smrg	    $ECHO "*** Warning: This system cannot link to static lib archive $lib."
850747e89262Smrg	    echo "*** I have the capability to make that library automatically link in when"
850847e89262Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
850947e89262Smrg	    echo "*** shared version of the library, which you do not appear to have."
8510e6d2e958Smrg	    if test yes = "$module"; then
851147e89262Smrg	      echo "*** But as you try to build a module library, libtool will still create "
851247e89262Smrg	      echo "*** a static module, that should work as long as the dlopening application"
851347e89262Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
851447e89262Smrg	      if test -z "$global_symbol_pipe"; then
851547e89262Smrg		echo
851647e89262Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
8517e6d2e958Smrg		echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
851847e89262Smrg		echo "*** not find such a program.  So, this module is probably useless."
8519e6d2e958Smrg		echo "*** 'nm' from GNU binutils and a full rebuild may help."
852047e89262Smrg	      fi
8521e6d2e958Smrg	      if test no = "$build_old_libs"; then
852247e89262Smrg		build_libtool_libs=module
852347e89262Smrg		build_old_libs=yes
852447e89262Smrg	      else
852547e89262Smrg		build_libtool_libs=no
852647e89262Smrg	      fi
852747e89262Smrg	    fi
852847e89262Smrg	  else
852947e89262Smrg	    deplibs="$dir/$old_library $deplibs"
853047e89262Smrg	    link_static=yes
853147e89262Smrg	  fi
853247e89262Smrg	fi # link shared/static library?
853347e89262Smrg
8534e6d2e958Smrg	if test lib = "$linkmode"; then
853547e89262Smrg	  if test -n "$dependency_libs" &&
8536e6d2e958Smrg	     { test yes != "$hardcode_into_libs" ||
8537e6d2e958Smrg	       test yes = "$build_old_libs" ||
8538e6d2e958Smrg	       test yes = "$link_static"; }; then
853947e89262Smrg	    # Extract -R from dependency_libs
854047e89262Smrg	    temp_deplibs=
854147e89262Smrg	    for libdir in $dependency_libs; do
854247e89262Smrg	      case $libdir in
854347e89262Smrg	      -R*) func_stripname '-R' '' "$libdir"
854447e89262Smrg	           temp_xrpath=$func_stripname_result
854547e89262Smrg		   case " $xrpath " in
854647e89262Smrg		   *" $temp_xrpath "*) ;;
8547899129b3Smrg		   *) func_append xrpath " $temp_xrpath";;
854847e89262Smrg		   esac;;
8549899129b3Smrg	      *) func_append temp_deplibs " $libdir";;
855047e89262Smrg	      esac
855147e89262Smrg	    done
8552e6d2e958Smrg	    dependency_libs=$temp_deplibs
855347e89262Smrg	  fi
855447e89262Smrg
8555899129b3Smrg	  func_append newlib_search_path " $absdir"
855647e89262Smrg	  # Link against this library
8557e6d2e958Smrg	  test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
855847e89262Smrg	  # ... and its dependency_libs
855947e89262Smrg	  tmp_libs=
856047e89262Smrg	  for deplib in $dependency_libs; do
856147e89262Smrg	    newdependency_libs="$deplib $newdependency_libs"
8562899129b3Smrg	    case $deplib in
8563899129b3Smrg              -L*) func_stripname '-L' '' "$deplib"
8564899129b3Smrg                   func_resolve_sysroot "$func_stripname_result";;
8565899129b3Smrg              *) func_resolve_sysroot "$deplib" ;;
8566899129b3Smrg            esac
8567e6d2e958Smrg	    if $opt_preserve_dup_deps; then
856847e89262Smrg	      case "$tmp_libs " in
8569899129b3Smrg	      *" $func_resolve_sysroot_result "*)
8570899129b3Smrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
857147e89262Smrg	      esac
857247e89262Smrg	    fi
8573899129b3Smrg	    func_append tmp_libs " $func_resolve_sysroot_result"
857447e89262Smrg	  done
857547e89262Smrg
8576e6d2e958Smrg	  if test no != "$link_all_deplibs"; then
857747e89262Smrg	    # Add the search paths of all dependency libraries
857847e89262Smrg	    for deplib in $dependency_libs; do
857947e89262Smrg	      path=
858047e89262Smrg	      case $deplib in
8581e6d2e958Smrg	      -L*) path=$deplib ;;
858247e89262Smrg	      *.la)
8583899129b3Smrg	        func_resolve_sysroot "$deplib"
8584899129b3Smrg	        deplib=$func_resolve_sysroot_result
858547e89262Smrg	        func_dirname "$deplib" "" "."
8586899129b3Smrg		dir=$func_dirname_result
858747e89262Smrg		# We need an absolute path.
858847e89262Smrg		case $dir in
8589e6d2e958Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
859047e89262Smrg		*)
859147e89262Smrg		  absdir=`cd "$dir" && pwd`
859247e89262Smrg		  if test -z "$absdir"; then
8593e6d2e958Smrg		    func_warning "cannot determine absolute directory name of '$dir'"
8594e6d2e958Smrg		    absdir=$dir
859547e89262Smrg		  fi
859647e89262Smrg		  ;;
859747e89262Smrg		esac
859847e89262Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
859947e89262Smrg		case $host in
860047e89262Smrg		*-*-darwin*)
860147e89262Smrg		  depdepl=
8602e6d2e958Smrg		  eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
8603e6d2e958Smrg		  if test -n "$deplibrary_names"; then
8604e6d2e958Smrg		    for tmp in $deplibrary_names; do
860547e89262Smrg		      depdepl=$tmp
860647e89262Smrg		    done
8607e6d2e958Smrg		    if test -f "$absdir/$objdir/$depdepl"; then
8608e6d2e958Smrg		      depdepl=$absdir/$objdir/$depdepl
8609e6d2e958Smrg		      darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
861047e89262Smrg                      if test -z "$darwin_install_name"; then
8611e6d2e958Smrg                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
861247e89262Smrg                      fi
8613e6d2e958Smrg		      func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
8614e6d2e958Smrg		      func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
861547e89262Smrg		      path=
861647e89262Smrg		    fi
861747e89262Smrg		  fi
861847e89262Smrg		  ;;
861947e89262Smrg		*)
8620e6d2e958Smrg		  path=-L$absdir/$objdir
862147e89262Smrg		  ;;
862247e89262Smrg		esac
862347e89262Smrg		else
8624e6d2e958Smrg		  eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
862547e89262Smrg		  test -z "$libdir" && \
8626e6d2e958Smrg		    func_fatal_error "'$deplib' is not a valid libtool archive"
862747e89262Smrg		  test "$absdir" != "$libdir" && \
8628e6d2e958Smrg		    func_warning "'$deplib' seems to be moved"
862947e89262Smrg
8630e6d2e958Smrg		  path=-L$absdir
863147e89262Smrg		fi
863247e89262Smrg		;;
863347e89262Smrg	      esac
863447e89262Smrg	      case " $deplibs " in
863547e89262Smrg	      *" $path "*) ;;
863647e89262Smrg	      *) deplibs="$path $deplibs" ;;
863747e89262Smrg	      esac
863847e89262Smrg	    done
863947e89262Smrg	  fi # link_all_deplibs != no
864047e89262Smrg	fi # linkmode = lib
864147e89262Smrg      done # for deplib in $libs
8642e6d2e958Smrg      if test link = "$pass"; then
8643e6d2e958Smrg	if test prog = "$linkmode"; then
864447e89262Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
864547e89262Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
864647e89262Smrg	else
864747e89262Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
864847e89262Smrg	fi
864947e89262Smrg      fi
8650e6d2e958Smrg      dependency_libs=$newdependency_libs
8651e6d2e958Smrg      if test dlpreopen = "$pass"; then
865247e89262Smrg	# Link the dlpreopened libraries before other libraries
865347e89262Smrg	for deplib in $save_deplibs; do
865447e89262Smrg	  deplibs="$deplib $deplibs"
865547e89262Smrg	done
865647e89262Smrg      fi
8657e6d2e958Smrg      if test dlopen != "$pass"; then
8658e6d2e958Smrg	test conv = "$pass" || {
865947e89262Smrg	  # Make sure lib_search_path contains only unique directories.
866047e89262Smrg	  lib_search_path=
866147e89262Smrg	  for dir in $newlib_search_path; do
866247e89262Smrg	    case "$lib_search_path " in
866347e89262Smrg	    *" $dir "*) ;;
8664899129b3Smrg	    *) func_append lib_search_path " $dir" ;;
866547e89262Smrg	    esac
866647e89262Smrg	  done
866747e89262Smrg	  newlib_search_path=
8668e6d2e958Smrg	}
866947e89262Smrg
8670e6d2e958Smrg	if test prog,link = "$linkmode,$pass"; then
867147e89262Smrg	  vars="compile_deplibs finalize_deplibs"
8672e6d2e958Smrg	else
8673e6d2e958Smrg	  vars=deplibs
867447e89262Smrg	fi
867547e89262Smrg	for var in $vars dependency_libs; do
867647e89262Smrg	  # Add libraries to $var in reverse order
867747e89262Smrg	  eval tmp_libs=\"\$$var\"
867847e89262Smrg	  new_libs=
867947e89262Smrg	  for deplib in $tmp_libs; do
868047e89262Smrg	    # FIXME: Pedantically, this is the right thing to do, so
868147e89262Smrg	    #        that some nasty dependency loop isn't accidentally
868247e89262Smrg	    #        broken:
868347e89262Smrg	    #new_libs="$deplib $new_libs"
868447e89262Smrg	    # Pragmatically, this seems to cause very few problems in
868547e89262Smrg	    # practice:
868647e89262Smrg	    case $deplib in
868747e89262Smrg	    -L*) new_libs="$deplib $new_libs" ;;
868847e89262Smrg	    -R*) ;;
868947e89262Smrg	    *)
869047e89262Smrg	      # And here is the reason: when a library appears more
869147e89262Smrg	      # than once as an explicit dependence of a library, or
869247e89262Smrg	      # is implicitly linked in more than once by the
869347e89262Smrg	      # compiler, it is considered special, and multiple
869447e89262Smrg	      # occurrences thereof are not removed.  Compare this
869547e89262Smrg	      # with having the same library being listed as a
869647e89262Smrg	      # dependency of multiple other libraries: in this case,
869747e89262Smrg	      # we know (pedantically, we assume) the library does not
869847e89262Smrg	      # need to be listed more than once, so we keep only the
869947e89262Smrg	      # last copy.  This is not always right, but it is rare
870047e89262Smrg	      # enough that we require users that really mean to play
870147e89262Smrg	      # such unportable linking tricks to link the library
870247e89262Smrg	      # using -Wl,-lname, so that libtool does not consider it
870347e89262Smrg	      # for duplicate removal.
870447e89262Smrg	      case " $specialdeplibs " in
870547e89262Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
870647e89262Smrg	      *)
870747e89262Smrg		case " $new_libs " in
870847e89262Smrg		*" $deplib "*) ;;
870947e89262Smrg		*) new_libs="$deplib $new_libs" ;;
871047e89262Smrg		esac
871147e89262Smrg		;;
871247e89262Smrg	      esac
871347e89262Smrg	      ;;
871447e89262Smrg	    esac
871547e89262Smrg	  done
871647e89262Smrg	  tmp_libs=
871747e89262Smrg	  for deplib in $new_libs; do
871847e89262Smrg	    case $deplib in
871947e89262Smrg	    -L*)
872047e89262Smrg	      case " $tmp_libs " in
872147e89262Smrg	      *" $deplib "*) ;;
8722899129b3Smrg	      *) func_append tmp_libs " $deplib" ;;
872347e89262Smrg	      esac
872447e89262Smrg	      ;;
8725899129b3Smrg	    *) func_append tmp_libs " $deplib" ;;
872647e89262Smrg	    esac
872747e89262Smrg	  done
872847e89262Smrg	  eval $var=\"$tmp_libs\"
872947e89262Smrg	done # for var
873047e89262Smrg      fi
8731e6d2e958Smrg
8732e6d2e958Smrg      # Add Sun CC postdeps if required:
8733e6d2e958Smrg      test CXX = "$tagname" && {
8734e6d2e958Smrg        case $host_os in
8735e6d2e958Smrg        linux*)
8736e6d2e958Smrg          case `$CC -V 2>&1 | sed 5q` in
8737e6d2e958Smrg          *Sun\ C*) # Sun C++ 5.9
8738e6d2e958Smrg            func_suncc_cstd_abi
8739e6d2e958Smrg
8740e6d2e958Smrg            if test no != "$suncc_use_cstd_abi"; then
8741e6d2e958Smrg              func_append postdeps ' -library=Cstd -library=Crun'
8742e6d2e958Smrg            fi
8743e6d2e958Smrg            ;;
8744e6d2e958Smrg          esac
8745e6d2e958Smrg          ;;
8746e6d2e958Smrg
8747e6d2e958Smrg        solaris*)
8748e6d2e958Smrg          func_cc_basename "$CC"
8749e6d2e958Smrg          case $func_cc_basename_result in
8750e6d2e958Smrg          CC* | sunCC*)
8751e6d2e958Smrg            func_suncc_cstd_abi
8752e6d2e958Smrg
8753e6d2e958Smrg            if test no != "$suncc_use_cstd_abi"; then
8754e6d2e958Smrg              func_append postdeps ' -library=Cstd -library=Crun'
8755e6d2e958Smrg            fi
8756e6d2e958Smrg            ;;
8757e6d2e958Smrg          esac
8758e6d2e958Smrg          ;;
8759e6d2e958Smrg        esac
8760e6d2e958Smrg      }
8761e6d2e958Smrg
876247e89262Smrg      # Last step: remove runtime libs from dependency_libs
876347e89262Smrg      # (they stay in deplibs)
876447e89262Smrg      tmp_libs=
8765e6d2e958Smrg      for i in $dependency_libs; do
876647e89262Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
876747e89262Smrg	*" $i "*)
8768e6d2e958Smrg	  i=
876947e89262Smrg	  ;;
877047e89262Smrg	esac
8771e6d2e958Smrg	if test -n "$i"; then
8772899129b3Smrg	  func_append tmp_libs " $i"
877347e89262Smrg	fi
877447e89262Smrg      done
877547e89262Smrg      dependency_libs=$tmp_libs
877647e89262Smrg    done # for pass
8777e6d2e958Smrg    if test prog = "$linkmode"; then
8778e6d2e958Smrg      dlfiles=$newdlfiles
877947e89262Smrg    fi
8780e6d2e958Smrg    if test prog = "$linkmode" || test lib = "$linkmode"; then
8781e6d2e958Smrg      dlprefiles=$newdlprefiles
878247e89262Smrg    fi
878347e89262Smrg
878447e89262Smrg    case $linkmode in
878547e89262Smrg    oldlib)
8786e6d2e958Smrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
8787e6d2e958Smrg	func_warning "'-dlopen' is ignored for archives"
878847e89262Smrg      fi
878947e89262Smrg
879047e89262Smrg      case " $deplibs" in
879147e89262Smrg      *\ -l* | *\ -L*)
8792e6d2e958Smrg	func_warning "'-l' and '-L' are ignored for archives" ;;
879347e89262Smrg      esac
879447e89262Smrg
879547e89262Smrg      test -n "$rpath" && \
8796e6d2e958Smrg	func_warning "'-rpath' is ignored for archives"
879747e89262Smrg
879847e89262Smrg      test -n "$xrpath" && \
8799e6d2e958Smrg	func_warning "'-R' is ignored for archives"
880047e89262Smrg
880147e89262Smrg      test -n "$vinfo" && \
8802e6d2e958Smrg	func_warning "'-version-info/-version-number' is ignored for archives"
880347e89262Smrg
880447e89262Smrg      test -n "$release" && \
8805e6d2e958Smrg	func_warning "'-release' is ignored for archives"
880647e89262Smrg
880747e89262Smrg      test -n "$export_symbols$export_symbols_regex" && \
8808e6d2e958Smrg	func_warning "'-export-symbols' is ignored for archives"
880947e89262Smrg
881047e89262Smrg      # Now set the variables for building old libraries.
881147e89262Smrg      build_libtool_libs=no
8812e6d2e958Smrg      oldlibs=$output
8813899129b3Smrg      func_append objs "$old_deplibs"
881447e89262Smrg      ;;
881547e89262Smrg
881647e89262Smrg    lib)
8817e6d2e958Smrg      # Make sure we only generate libraries of the form 'libNAME.la'.
881847e89262Smrg      case $outputname in
881947e89262Smrg      lib*)
882047e89262Smrg	func_stripname 'lib' '.la' "$outputname"
882147e89262Smrg	name=$func_stripname_result
882247e89262Smrg	eval shared_ext=\"$shrext_cmds\"
882347e89262Smrg	eval libname=\"$libname_spec\"
882447e89262Smrg	;;
882547e89262Smrg      *)
8826e6d2e958Smrg	test no = "$module" \
8827e6d2e958Smrg	  && func_fatal_help "libtool library '$output' must begin with 'lib'"
882847e89262Smrg
8829e6d2e958Smrg	if test no != "$need_lib_prefix"; then
883047e89262Smrg	  # Add the "lib" prefix for modules if required
883147e89262Smrg	  func_stripname '' '.la' "$outputname"
883247e89262Smrg	  name=$func_stripname_result
883347e89262Smrg	  eval shared_ext=\"$shrext_cmds\"
883447e89262Smrg	  eval libname=\"$libname_spec\"
883547e89262Smrg	else
883647e89262Smrg	  func_stripname '' '.la' "$outputname"
883747e89262Smrg	  libname=$func_stripname_result
883847e89262Smrg	fi
883947e89262Smrg	;;
884047e89262Smrg      esac
884147e89262Smrg
884247e89262Smrg      if test -n "$objs"; then
8843e6d2e958Smrg	if test pass_all != "$deplibs_check_method"; then
8844e6d2e958Smrg	  func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
884547e89262Smrg	else
884647e89262Smrg	  echo
884747e89262Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
884847e89262Smrg	  $ECHO "*** objects $objs is not portable!"
8849899129b3Smrg	  func_append libobjs " $objs"
885047e89262Smrg	fi
885147e89262Smrg      fi
885247e89262Smrg
8853e6d2e958Smrg      test no = "$dlself" \
8854e6d2e958Smrg	|| func_warning "'-dlopen self' is ignored for libtool libraries"
885547e89262Smrg
885647e89262Smrg      set dummy $rpath
885747e89262Smrg      shift
8858e6d2e958Smrg      test 1 -lt "$#" \
8859e6d2e958Smrg	&& func_warning "ignoring multiple '-rpath's for a libtool library"
886047e89262Smrg
8861e6d2e958Smrg      install_libdir=$1
886247e89262Smrg
886347e89262Smrg      oldlibs=
886447e89262Smrg      if test -z "$rpath"; then
8865e6d2e958Smrg	if test yes = "$build_libtool_libs"; then
886647e89262Smrg	  # Building a libtool convenience library.
8867e6d2e958Smrg	  # Some compilers have problems with a '.al' extension so
886847e89262Smrg	  # convenience libraries should have the same extension an
886947e89262Smrg	  # archive normally would.
887047e89262Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
887147e89262Smrg	  build_libtool_libs=convenience
887247e89262Smrg	  build_old_libs=yes
887347e89262Smrg	fi
887447e89262Smrg
887547e89262Smrg	test -n "$vinfo" && \
8876e6d2e958Smrg	  func_warning "'-version-info/-version-number' is ignored for convenience libraries"
887747e89262Smrg
887847e89262Smrg	test -n "$release" && \
8879e6d2e958Smrg	  func_warning "'-release' is ignored for convenience libraries"
888047e89262Smrg      else
888147e89262Smrg
888247e89262Smrg	# Parse the version information argument.
8883e6d2e958Smrg	save_ifs=$IFS; IFS=:
888447e89262Smrg	set dummy $vinfo 0 0 0
888547e89262Smrg	shift
8886e6d2e958Smrg	IFS=$save_ifs
888747e89262Smrg
888847e89262Smrg	test -n "$7" && \
8889e6d2e958Smrg	  func_fatal_help "too many parameters to '-version-info'"
889047e89262Smrg
889147e89262Smrg	# convert absolute version numbers to libtool ages
889247e89262Smrg	# this retains compatibility with .la files and attempts
889347e89262Smrg	# to make the code below a bit more comprehensible
889447e89262Smrg
889547e89262Smrg	case $vinfo_number in
889647e89262Smrg	yes)
8897e6d2e958Smrg	  number_major=$1
8898e6d2e958Smrg	  number_minor=$2
8899e6d2e958Smrg	  number_revision=$3
890047e89262Smrg	  #
890147e89262Smrg	  # There are really only two kinds -- those that
890247e89262Smrg	  # use the current revision as the major version
890347e89262Smrg	  # and those that subtract age and use age as
890447e89262Smrg	  # a minor version.  But, then there is irix
8905e6d2e958Smrg	  # that has an extra 1 added just for fun
890647e89262Smrg	  #
890747e89262Smrg	  case $version_type in
8908899129b3Smrg	  # correct linux to gnu/linux during the next big refactor
8909e6d2e958Smrg	  darwin|freebsd-elf|linux|osf|windows|none)
891047e89262Smrg	    func_arith $number_major + $number_minor
891147e89262Smrg	    current=$func_arith_result
8912e6d2e958Smrg	    age=$number_minor
8913e6d2e958Smrg	    revision=$number_revision
891447e89262Smrg	    ;;
8915e6d2e958Smrg	  freebsd-aout|qnx|sunos)
8916e6d2e958Smrg	    current=$number_major
8917e6d2e958Smrg	    revision=$number_minor
8918e6d2e958Smrg	    age=0
891947e89262Smrg	    ;;
892047e89262Smrg	  irix|nonstopux)
892147e89262Smrg	    func_arith $number_major + $number_minor
892247e89262Smrg	    current=$func_arith_result
8923e6d2e958Smrg	    age=$number_minor
8924e6d2e958Smrg	    revision=$number_minor
892547e89262Smrg	    lt_irix_increment=no
892647e89262Smrg	    ;;
89276ad5a0e2Smrg	  *)
89286ad5a0e2Smrg	    func_fatal_configuration "$modename: unknown library version type '$version_type'"
89296ad5a0e2Smrg	    ;;
893047e89262Smrg	  esac
893147e89262Smrg	  ;;
893247e89262Smrg	no)
8933e6d2e958Smrg	  current=$1
8934e6d2e958Smrg	  revision=$2
8935e6d2e958Smrg	  age=$3
893647e89262Smrg	  ;;
893747e89262Smrg	esac
893847e89262Smrg
893947e89262Smrg	# Check that each of the things are valid numbers.
894047e89262Smrg	case $current in
894147e89262Smrg	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]) ;;
894247e89262Smrg	*)
8943e6d2e958Smrg	  func_error "CURRENT '$current' must be a nonnegative integer"
8944e6d2e958Smrg	  func_fatal_error "'$vinfo' is not valid version information"
894547e89262Smrg	  ;;
894647e89262Smrg	esac
894747e89262Smrg
894847e89262Smrg	case $revision in
894947e89262Smrg	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]) ;;
895047e89262Smrg	*)
8951e6d2e958Smrg	  func_error "REVISION '$revision' must be a nonnegative integer"
8952e6d2e958Smrg	  func_fatal_error "'$vinfo' is not valid version information"
895347e89262Smrg	  ;;
895447e89262Smrg	esac
895547e89262Smrg
895647e89262Smrg	case $age in
895747e89262Smrg	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]) ;;
895847e89262Smrg	*)
8959e6d2e958Smrg	  func_error "AGE '$age' must be a nonnegative integer"
8960e6d2e958Smrg	  func_fatal_error "'$vinfo' is not valid version information"
896147e89262Smrg	  ;;
896247e89262Smrg	esac
896347e89262Smrg
896447e89262Smrg	if test "$age" -gt "$current"; then
8965e6d2e958Smrg	  func_error "AGE '$age' is greater than the current interface number '$current'"
8966e6d2e958Smrg	  func_fatal_error "'$vinfo' is not valid version information"
896747e89262Smrg	fi
896847e89262Smrg
896947e89262Smrg	# Calculate the version variables.
897047e89262Smrg	major=
897147e89262Smrg	versuffix=
897247e89262Smrg	verstring=
897347e89262Smrg	case $version_type in
897447e89262Smrg	none) ;;
897547e89262Smrg
897647e89262Smrg	darwin)
897747e89262Smrg	  # Like Linux, but with the current version available in
897847e89262Smrg	  # verstring for coding it into the library header
897947e89262Smrg	  func_arith $current - $age
898047e89262Smrg	  major=.$func_arith_result
8981e6d2e958Smrg	  versuffix=$major.$age.$revision
898247e89262Smrg	  # Darwin ld doesn't like 0 for these options...
898347e89262Smrg	  func_arith $current + 1
898447e89262Smrg	  minor_current=$func_arith_result
8985e6d2e958Smrg	  xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
898647e89262Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
8987e6d2e958Smrg          # On Darwin other compilers
8988e6d2e958Smrg          case $CC in
8989e6d2e958Smrg              nagfor*)
8990e6d2e958Smrg                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
8991e6d2e958Smrg                  ;;
8992e6d2e958Smrg              *)
8993e6d2e958Smrg                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
8994e6d2e958Smrg                  ;;
8995e6d2e958Smrg          esac
899647e89262Smrg	  ;;
899747e89262Smrg
899847e89262Smrg	freebsd-aout)
8999e6d2e958Smrg	  major=.$current
9000e6d2e958Smrg	  versuffix=.$current.$revision
900147e89262Smrg	  ;;
900247e89262Smrg
900347e89262Smrg	freebsd-elf)
9004e6d2e958Smrg	  func_arith $current - $age
9005e6d2e958Smrg	  major=.$func_arith_result
9006e6d2e958Smrg	  versuffix=$major.$age.$revision
900747e89262Smrg	  ;;
900847e89262Smrg
900947e89262Smrg	irix | nonstopux)
9010e6d2e958Smrg	  if test no = "$lt_irix_increment"; then
901147e89262Smrg	    func_arith $current - $age
901247e89262Smrg	  else
901347e89262Smrg	    func_arith $current - $age + 1
901447e89262Smrg	  fi
901547e89262Smrg	  major=$func_arith_result
901647e89262Smrg
901747e89262Smrg	  case $version_type in
901847e89262Smrg	    nonstopux) verstring_prefix=nonstopux ;;
901947e89262Smrg	    *)         verstring_prefix=sgi ;;
902047e89262Smrg	  esac
9021e6d2e958Smrg	  verstring=$verstring_prefix$major.$revision
902247e89262Smrg
902347e89262Smrg	  # Add in all the interfaces that we are compatible with.
902447e89262Smrg	  loop=$revision
9025e6d2e958Smrg	  while test 0 -ne "$loop"; do
902647e89262Smrg	    func_arith $revision - $loop
902747e89262Smrg	    iface=$func_arith_result
902847e89262Smrg	    func_arith $loop - 1
902947e89262Smrg	    loop=$func_arith_result
9030e6d2e958Smrg	    verstring=$verstring_prefix$major.$iface:$verstring
903147e89262Smrg	  done
903247e89262Smrg
9033e6d2e958Smrg	  # Before this point, $major must not contain '.'.
903447e89262Smrg	  major=.$major
9035e6d2e958Smrg	  versuffix=$major.$revision
903647e89262Smrg	  ;;
903747e89262Smrg
9038899129b3Smrg	linux) # correct to gnu/linux during the next big refactor
903947e89262Smrg	  func_arith $current - $age
904047e89262Smrg	  major=.$func_arith_result
9041e6d2e958Smrg	  versuffix=$major.$age.$revision
904247e89262Smrg	  ;;
904347e89262Smrg
904447e89262Smrg	osf)
904547e89262Smrg	  func_arith $current - $age
904647e89262Smrg	  major=.$func_arith_result
9047e6d2e958Smrg	  versuffix=.$current.$age.$revision
9048e6d2e958Smrg	  verstring=$current.$age.$revision
904947e89262Smrg
905047e89262Smrg	  # Add in all the interfaces that we are compatible with.
905147e89262Smrg	  loop=$age
9052e6d2e958Smrg	  while test 0 -ne "$loop"; do
905347e89262Smrg	    func_arith $current - $loop
905447e89262Smrg	    iface=$func_arith_result
905547e89262Smrg	    func_arith $loop - 1
905647e89262Smrg	    loop=$func_arith_result
9057e6d2e958Smrg	    verstring=$verstring:$iface.0
905847e89262Smrg	  done
905947e89262Smrg
906047e89262Smrg	  # Make executables depend on our current version.
9061e6d2e958Smrg	  func_append verstring ":$current.0"
906247e89262Smrg	  ;;
906347e89262Smrg
906447e89262Smrg	qnx)
9065e6d2e958Smrg	  major=.$current
9066e6d2e958Smrg	  versuffix=.$current
9067e6d2e958Smrg	  ;;
9068e6d2e958Smrg
9069e6d2e958Smrg	sco)
9070e6d2e958Smrg	  major=.$current
9071e6d2e958Smrg	  versuffix=.$current
907247e89262Smrg	  ;;
907347e89262Smrg
907447e89262Smrg	sunos)
9075e6d2e958Smrg	  major=.$current
9076e6d2e958Smrg	  versuffix=.$current.$revision
907747e89262Smrg	  ;;
907847e89262Smrg
907947e89262Smrg	windows)
908047e89262Smrg	  # Use '-' rather than '.', since we only want one
9081e6d2e958Smrg	  # extension on DOS 8.3 file systems.
908247e89262Smrg	  func_arith $current - $age
908347e89262Smrg	  major=$func_arith_result
9084e6d2e958Smrg	  versuffix=-$major
908547e89262Smrg	  ;;
908647e89262Smrg
908747e89262Smrg	*)
9088e6d2e958Smrg	  func_fatal_configuration "unknown library version type '$version_type'"
908947e89262Smrg	  ;;
909047e89262Smrg	esac
909147e89262Smrg
909247e89262Smrg	# Clear the version info if we defaulted, and they specified a release.
909347e89262Smrg	if test -z "$vinfo" && test -n "$release"; then
909447e89262Smrg	  major=
909547e89262Smrg	  case $version_type in
909647e89262Smrg	  darwin)
909747e89262Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
909847e89262Smrg	    # problems, so we reset it completely
909947e89262Smrg	    verstring=
910047e89262Smrg	    ;;
910147e89262Smrg	  *)
9102e6d2e958Smrg	    verstring=0.0
910347e89262Smrg	    ;;
910447e89262Smrg	  esac
9105e6d2e958Smrg	  if test no = "$need_version"; then
910647e89262Smrg	    versuffix=
910747e89262Smrg	  else
9108e6d2e958Smrg	    versuffix=.0.0
910947e89262Smrg	  fi
911047e89262Smrg	fi
911147e89262Smrg
911247e89262Smrg	# Remove version info from name if versioning should be avoided
9113e6d2e958Smrg	if test yes,no = "$avoid_version,$need_version"; then
911447e89262Smrg	  major=
911547e89262Smrg	  versuffix=
9116e6d2e958Smrg	  verstring=
911747e89262Smrg	fi
911847e89262Smrg
911947e89262Smrg	# Check to see if the archive will have undefined symbols.
9120e6d2e958Smrg	if test yes = "$allow_undefined"; then
9121e6d2e958Smrg	  if test unsupported = "$allow_undefined_flag"; then
9122e6d2e958Smrg	    if test yes = "$build_old_libs"; then
9123e6d2e958Smrg	      func_warning "undefined symbols not allowed in $host shared libraries; building static only"
9124e6d2e958Smrg	      build_libtool_libs=no
9125e6d2e958Smrg	    else
9126e6d2e958Smrg	      func_fatal_error "can't build $host shared library unless -no-undefined is specified"
9127e6d2e958Smrg	    fi
912847e89262Smrg	  fi
912947e89262Smrg	else
913047e89262Smrg	  # Don't allow undefined symbols.
9131e6d2e958Smrg	  allow_undefined_flag=$no_undefined_flag
913247e89262Smrg	fi
913347e89262Smrg
913447e89262Smrg      fi
913547e89262Smrg
9136e6d2e958Smrg      func_generate_dlsyms "$libname" "$libname" :
9137899129b3Smrg      func_append libobjs " $symfileobj"
9138e6d2e958Smrg      test " " = "$libobjs" && libobjs=
913947e89262Smrg
9140e6d2e958Smrg      if test relink != "$opt_mode"; then
914147e89262Smrg	# Remove our outputs, but don't remove object files since they
914247e89262Smrg	# may have been created when compiling PIC objects.
914347e89262Smrg	removelist=
914447e89262Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
914547e89262Smrg	for p in $tempremovelist; do
914647e89262Smrg	  case $p in
914747e89262Smrg	    *.$objext | *.gcno)
914847e89262Smrg	       ;;
9149e6d2e958Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
9150e6d2e958Smrg	       if test -n "$precious_files_regex"; then
915147e89262Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
915247e89262Smrg		 then
915347e89262Smrg		   continue
915447e89262Smrg		 fi
915547e89262Smrg	       fi
9156899129b3Smrg	       func_append removelist " $p"
915747e89262Smrg	       ;;
915847e89262Smrg	    *) ;;
915947e89262Smrg	  esac
916047e89262Smrg	done
916147e89262Smrg	test -n "$removelist" && \
916247e89262Smrg	  func_show_eval "${RM}r \$removelist"
916347e89262Smrg      fi
916447e89262Smrg
916547e89262Smrg      # Now set the variables for building old libraries.
9166e6d2e958Smrg      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
9167899129b3Smrg	func_append oldlibs " $output_objdir/$libname.$libext"
916847e89262Smrg
916947e89262Smrg	# Transform .lo files to .o files.
9170e6d2e958Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
917147e89262Smrg      fi
917247e89262Smrg
917347e89262Smrg      # Eliminate all temporary directories.
917447e89262Smrg      #for path in $notinst_path; do
917547e89262Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
917647e89262Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
917747e89262Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
917847e89262Smrg      #done
917947e89262Smrg
918047e89262Smrg      if test -n "$xrpath"; then
918147e89262Smrg	# If the user specified any rpath flags, then add them.
918247e89262Smrg	temp_xrpath=
918347e89262Smrg	for libdir in $xrpath; do
9184899129b3Smrg	  func_replace_sysroot "$libdir"
9185899129b3Smrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
918647e89262Smrg	  case "$finalize_rpath " in
918747e89262Smrg	  *" $libdir "*) ;;
9188899129b3Smrg	  *) func_append finalize_rpath " $libdir" ;;
918947e89262Smrg	  esac
919047e89262Smrg	done
9191e6d2e958Smrg	if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
919247e89262Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
919347e89262Smrg	fi
919447e89262Smrg      fi
919547e89262Smrg
919647e89262Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
9197e6d2e958Smrg      old_dlfiles=$dlfiles
919847e89262Smrg      dlfiles=
919947e89262Smrg      for lib in $old_dlfiles; do
920047e89262Smrg	case " $dlprefiles $dlfiles " in
920147e89262Smrg	*" $lib "*) ;;
9202899129b3Smrg	*) func_append dlfiles " $lib" ;;
920347e89262Smrg	esac
920447e89262Smrg      done
920547e89262Smrg
920647e89262Smrg      # Make sure dlprefiles contains only unique files
9207e6d2e958Smrg      old_dlprefiles=$dlprefiles
920847e89262Smrg      dlprefiles=
920947e89262Smrg      for lib in $old_dlprefiles; do
921047e89262Smrg	case "$dlprefiles " in
921147e89262Smrg	*" $lib "*) ;;
9212899129b3Smrg	*) func_append dlprefiles " $lib" ;;
921347e89262Smrg	esac
921447e89262Smrg      done
921547e89262Smrg
9216e6d2e958Smrg      if test yes = "$build_libtool_libs"; then
921747e89262Smrg	if test -n "$rpath"; then
921847e89262Smrg	  case $host in
921947e89262Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
922047e89262Smrg	    # these systems don't actually have a c library (as such)!
922147e89262Smrg	    ;;
922247e89262Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
922347e89262Smrg	    # Rhapsody C library is in the System framework
9224899129b3Smrg	    func_append deplibs " System.ltframework"
922547e89262Smrg	    ;;
922647e89262Smrg	  *-*-netbsd*)
922747e89262Smrg	    # Don't link with libc until the a.out ld.so is fixed.
922847e89262Smrg	    ;;
922947e89262Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
923047e89262Smrg	    # Do not include libc due to us having libc/libc_r.
923147e89262Smrg	    ;;
923247e89262Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
923347e89262Smrg	    # Causes problems with __ctype
923447e89262Smrg	    ;;
923547e89262Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
923647e89262Smrg	    # Compiler inserts libc in the correct place for threads to work
923747e89262Smrg	    ;;
923847e89262Smrg	  *)
923947e89262Smrg	    # Add libc to deplibs on all other systems if necessary.
9240e6d2e958Smrg	    if test yes = "$build_libtool_need_lc"; then
9241899129b3Smrg	      func_append deplibs " -lc"
924247e89262Smrg	    fi
924347e89262Smrg	    ;;
924447e89262Smrg	  esac
924547e89262Smrg	fi
924647e89262Smrg
924747e89262Smrg	# Transform deplibs into only deplibs that can be linked in shared.
924847e89262Smrg	name_save=$name
924947e89262Smrg	libname_save=$libname
925047e89262Smrg	release_save=$release
925147e89262Smrg	versuffix_save=$versuffix
925247e89262Smrg	major_save=$major
925347e89262Smrg	# I'm not sure if I'm treating the release correctly.  I think
925447e89262Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
925547e89262Smrg	# add it in twice.  Is that correct?
9256e6d2e958Smrg	release=
9257e6d2e958Smrg	versuffix=
9258e6d2e958Smrg	major=
925947e89262Smrg	newdeplibs=
926047e89262Smrg	droppeddeps=no
926147e89262Smrg	case $deplibs_check_method in
926247e89262Smrg	pass_all)
926347e89262Smrg	  # Don't check for shared/static.  Everything works.
926447e89262Smrg	  # This might be a little naive.  We might want to check
926547e89262Smrg	  # whether the library exists or not.  But this is on
926647e89262Smrg	  # osf3 & osf4 and I'm not really sure... Just
926747e89262Smrg	  # implementing what was already the behavior.
926847e89262Smrg	  newdeplibs=$deplibs
926947e89262Smrg	  ;;
927047e89262Smrg	test_compile)
927147e89262Smrg	  # This code stresses the "libraries are programs" paradigm to its
927247e89262Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
927347e89262Smrg	  # against the deplibs as a proxy for the library.  Then we can check
927447e89262Smrg	  # whether they linked in statically or dynamically with ldd.
927547e89262Smrg	  $opt_dry_run || $RM conftest.c
927647e89262Smrg	  cat > conftest.c <<EOF
927747e89262Smrg	  int main() { return 0; }
927847e89262SmrgEOF
927947e89262Smrg	  $opt_dry_run || $RM conftest
928047e89262Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
928147e89262Smrg	    ldd_output=`ldd conftest`
928247e89262Smrg	    for i in $deplibs; do
928347e89262Smrg	      case $i in
928447e89262Smrg	      -l*)
928547e89262Smrg		func_stripname -l '' "$i"
928647e89262Smrg		name=$func_stripname_result
9287e6d2e958Smrg		if test yes = "$allow_libtool_libs_with_static_runtimes"; then
928847e89262Smrg		  case " $predeps $postdeps " in
928947e89262Smrg		  *" $i "*)
9290899129b3Smrg		    func_append newdeplibs " $i"
9291e6d2e958Smrg		    i=
929247e89262Smrg		    ;;
929347e89262Smrg		  esac
929447e89262Smrg		fi
9295e6d2e958Smrg		if test -n "$i"; then
929647e89262Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
929747e89262Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
929847e89262Smrg		  set dummy $deplib_matches; shift
929947e89262Smrg		  deplib_match=$1
9300e6d2e958Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9301899129b3Smrg		    func_append newdeplibs " $i"
930247e89262Smrg		  else
930347e89262Smrg		    droppeddeps=yes
930447e89262Smrg		    echo
930547e89262Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
930647e89262Smrg		    echo "*** I have the capability to make that library automatically link in when"
930747e89262Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
930847e89262Smrg		    echo "*** shared version of the library, which I believe you do not have"
930947e89262Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
931047e89262Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
931147e89262Smrg		  fi
931247e89262Smrg		fi
931347e89262Smrg		;;
931447e89262Smrg	      *)
9315899129b3Smrg		func_append newdeplibs " $i"
931647e89262Smrg		;;
931747e89262Smrg	      esac
931847e89262Smrg	    done
931947e89262Smrg	  else
932047e89262Smrg	    # Error occurred in the first compile.  Let's try to salvage
932147e89262Smrg	    # the situation: Compile a separate program for each library.
932247e89262Smrg	    for i in $deplibs; do
932347e89262Smrg	      case $i in
932447e89262Smrg	      -l*)
932547e89262Smrg		func_stripname -l '' "$i"
932647e89262Smrg		name=$func_stripname_result
932747e89262Smrg		$opt_dry_run || $RM conftest
932847e89262Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
932947e89262Smrg		  ldd_output=`ldd conftest`
9330e6d2e958Smrg		  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
933147e89262Smrg		    case " $predeps $postdeps " in
933247e89262Smrg		    *" $i "*)
9333899129b3Smrg		      func_append newdeplibs " $i"
9334e6d2e958Smrg		      i=
933547e89262Smrg		      ;;
933647e89262Smrg		    esac
933747e89262Smrg		  fi
9338e6d2e958Smrg		  if test -n "$i"; then
933947e89262Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
934047e89262Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
934147e89262Smrg		    set dummy $deplib_matches; shift
934247e89262Smrg		    deplib_match=$1
9343e6d2e958Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9344899129b3Smrg		      func_append newdeplibs " $i"
934547e89262Smrg		    else
934647e89262Smrg		      droppeddeps=yes
934747e89262Smrg		      echo
934847e89262Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
934947e89262Smrg		      echo "*** I have the capability to make that library automatically link in when"
935047e89262Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
935147e89262Smrg		      echo "*** shared version of the library, which you do not appear to have"
935247e89262Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
935347e89262Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
935447e89262Smrg		    fi
935547e89262Smrg		  fi
935647e89262Smrg		else
935747e89262Smrg		  droppeddeps=yes
935847e89262Smrg		  echo
935947e89262Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
936047e89262Smrg		  echo "*** make it link in!  You will probably need to install it or some"
936147e89262Smrg		  echo "*** library that it depends on before this library will be fully"
936247e89262Smrg		  echo "*** functional.  Installing it before continuing would be even better."
936347e89262Smrg		fi
936447e89262Smrg		;;
936547e89262Smrg	      *)
9366899129b3Smrg		func_append newdeplibs " $i"
936747e89262Smrg		;;
936847e89262Smrg	      esac
936947e89262Smrg	    done
937047e89262Smrg	  fi
937147e89262Smrg	  ;;
937247e89262Smrg	file_magic*)
937347e89262Smrg	  set dummy $deplibs_check_method; shift
937447e89262Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
937547e89262Smrg	  for a_deplib in $deplibs; do
937647e89262Smrg	    case $a_deplib in
937747e89262Smrg	    -l*)
937847e89262Smrg	      func_stripname -l '' "$a_deplib"
937947e89262Smrg	      name=$func_stripname_result
9380e6d2e958Smrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
938147e89262Smrg		case " $predeps $postdeps " in
938247e89262Smrg		*" $a_deplib "*)
9383899129b3Smrg		  func_append newdeplibs " $a_deplib"
9384e6d2e958Smrg		  a_deplib=
938547e89262Smrg		  ;;
938647e89262Smrg		esac
938747e89262Smrg	      fi
9388e6d2e958Smrg	      if test -n "$a_deplib"; then
938947e89262Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
9390899129b3Smrg		if test -n "$file_magic_glob"; then
9391899129b3Smrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
9392899129b3Smrg		else
9393899129b3Smrg		  libnameglob=$libname
9394899129b3Smrg		fi
9395e6d2e958Smrg		test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
939647e89262Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9397e6d2e958Smrg		  if test yes = "$want_nocaseglob"; then
9398899129b3Smrg		    shopt -s nocaseglob
9399899129b3Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9400899129b3Smrg		    $nocaseglob
9401899129b3Smrg		  else
9402899129b3Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9403899129b3Smrg		  fi
940447e89262Smrg		  for potent_lib in $potential_libs; do
940547e89262Smrg		      # Follow soft links.
940647e89262Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
940747e89262Smrg			 $GREP " -> " >/dev/null; then
940847e89262Smrg			continue
940947e89262Smrg		      fi
941047e89262Smrg		      # The statement above tries to avoid entering an
941147e89262Smrg		      # endless loop below, in case of cyclic links.
941247e89262Smrg		      # We might still enter an endless loop, since a link
941347e89262Smrg		      # loop can be closed while we follow links,
941447e89262Smrg		      # but so what?
9415e6d2e958Smrg		      potlib=$potent_lib
941647e89262Smrg		      while test -h "$potlib" 2>/dev/null; do
9417e6d2e958Smrg			potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
941847e89262Smrg			case $potliblink in
9419e6d2e958Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
9420e6d2e958Smrg			*) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
942147e89262Smrg			esac
942247e89262Smrg		      done
942347e89262Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
942447e89262Smrg			 $SED -e 10q |
942547e89262Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
9426899129b3Smrg			func_append newdeplibs " $a_deplib"
9427e6d2e958Smrg			a_deplib=
942847e89262Smrg			break 2
942947e89262Smrg		      fi
943047e89262Smrg		  done
943147e89262Smrg		done
943247e89262Smrg	      fi
9433e6d2e958Smrg	      if test -n "$a_deplib"; then
943447e89262Smrg		droppeddeps=yes
943547e89262Smrg		echo
943647e89262Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
943747e89262Smrg		echo "*** I have the capability to make that library automatically link in when"
943847e89262Smrg		echo "*** you link to this library.  But I can only do this if you have a"
943947e89262Smrg		echo "*** shared version of the library, which you do not appear to have"
944047e89262Smrg		echo "*** because I did check the linker path looking for a file starting"
9441e6d2e958Smrg		if test -z "$potlib"; then
944247e89262Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
944347e89262Smrg		else
944447e89262Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
944547e89262Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
944647e89262Smrg		fi
944747e89262Smrg	      fi
944847e89262Smrg	      ;;
944947e89262Smrg	    *)
945047e89262Smrg	      # Add a -L argument.
9451899129b3Smrg	      func_append newdeplibs " $a_deplib"
945247e89262Smrg	      ;;
945347e89262Smrg	    esac
945447e89262Smrg	  done # Gone through all deplibs.
945547e89262Smrg	  ;;
945647e89262Smrg	match_pattern*)
945747e89262Smrg	  set dummy $deplibs_check_method; shift
945847e89262Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
945947e89262Smrg	  for a_deplib in $deplibs; do
946047e89262Smrg	    case $a_deplib in
946147e89262Smrg	    -l*)
946247e89262Smrg	      func_stripname -l '' "$a_deplib"
946347e89262Smrg	      name=$func_stripname_result
9464e6d2e958Smrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
946547e89262Smrg		case " $predeps $postdeps " in
946647e89262Smrg		*" $a_deplib "*)
9467899129b3Smrg		  func_append newdeplibs " $a_deplib"
9468e6d2e958Smrg		  a_deplib=
946947e89262Smrg		  ;;
947047e89262Smrg		esac
947147e89262Smrg	      fi
9472e6d2e958Smrg	      if test -n "$a_deplib"; then
947347e89262Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
947447e89262Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
947547e89262Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
947647e89262Smrg		  for potent_lib in $potential_libs; do
9477e6d2e958Smrg		    potlib=$potent_lib # see symlink-check above in file_magic test
947847e89262Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
947947e89262Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
9480899129b3Smrg		      func_append newdeplibs " $a_deplib"
9481e6d2e958Smrg		      a_deplib=
948247e89262Smrg		      break 2
948347e89262Smrg		    fi
948447e89262Smrg		  done
948547e89262Smrg		done
948647e89262Smrg	      fi
9487e6d2e958Smrg	      if test -n "$a_deplib"; then
948847e89262Smrg		droppeddeps=yes
948947e89262Smrg		echo
949047e89262Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
949147e89262Smrg		echo "*** I have the capability to make that library automatically link in when"
949247e89262Smrg		echo "*** you link to this library.  But I can only do this if you have a"
949347e89262Smrg		echo "*** shared version of the library, which you do not appear to have"
949447e89262Smrg		echo "*** because I did check the linker path looking for a file starting"
9495e6d2e958Smrg		if test -z "$potlib"; then
949647e89262Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
949747e89262Smrg		else
949847e89262Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
949947e89262Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
950047e89262Smrg		fi
950147e89262Smrg	      fi
950247e89262Smrg	      ;;
950347e89262Smrg	    *)
950447e89262Smrg	      # Add a -L argument.
9505899129b3Smrg	      func_append newdeplibs " $a_deplib"
950647e89262Smrg	      ;;
950747e89262Smrg	    esac
950847e89262Smrg	  done # Gone through all deplibs.
950947e89262Smrg	  ;;
951047e89262Smrg	none | unknown | *)
9511e6d2e958Smrg	  newdeplibs=
951247e89262Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
9513e6d2e958Smrg	  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9514e6d2e958Smrg	    for i in $predeps $postdeps; do
951547e89262Smrg	      # can't use Xsed below, because $i might contain '/'
9516e6d2e958Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
951747e89262Smrg	    done
951847e89262Smrg	  fi
951947e89262Smrg	  case $tmp_deplibs in
952047e89262Smrg	  *[!\	\ ]*)
952147e89262Smrg	    echo
9522e6d2e958Smrg	    if test none = "$deplibs_check_method"; then
952347e89262Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
952447e89262Smrg	    else
952547e89262Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
952647e89262Smrg	    fi
952747e89262Smrg	    echo "*** All declared inter-library dependencies are being dropped."
952847e89262Smrg	    droppeddeps=yes
952947e89262Smrg	    ;;
953047e89262Smrg	  esac
953147e89262Smrg	  ;;
953247e89262Smrg	esac
953347e89262Smrg	versuffix=$versuffix_save
953447e89262Smrg	major=$major_save
953547e89262Smrg	release=$release_save
953647e89262Smrg	libname=$libname_save
953747e89262Smrg	name=$name_save
953847e89262Smrg
953947e89262Smrg	case $host in
954047e89262Smrg	*-*-rhapsody* | *-*-darwin1.[012])
954147e89262Smrg	  # On Rhapsody replace the C library with the System framework
954247e89262Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
954347e89262Smrg	  ;;
954447e89262Smrg	esac
954547e89262Smrg
9546e6d2e958Smrg	if test yes = "$droppeddeps"; then
9547e6d2e958Smrg	  if test yes = "$module"; then
954847e89262Smrg	    echo
954947e89262Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
955047e89262Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
955147e89262Smrg	    echo "*** a static module, that should work as long as the dlopening"
955247e89262Smrg	    echo "*** application is linked with the -dlopen flag."
955347e89262Smrg	    if test -z "$global_symbol_pipe"; then
955447e89262Smrg	      echo
955547e89262Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
9556e6d2e958Smrg	      echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
955747e89262Smrg	      echo "*** not find such a program.  So, this module is probably useless."
9558e6d2e958Smrg	      echo "*** 'nm' from GNU binutils and a full rebuild may help."
955947e89262Smrg	    fi
9560e6d2e958Smrg	    if test no = "$build_old_libs"; then
9561e6d2e958Smrg	      oldlibs=$output_objdir/$libname.$libext
956247e89262Smrg	      build_libtool_libs=module
956347e89262Smrg	      build_old_libs=yes
956447e89262Smrg	    else
956547e89262Smrg	      build_libtool_libs=no
956647e89262Smrg	    fi
956747e89262Smrg	  else
956847e89262Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
956947e89262Smrg	    echo "*** automatically added whenever a program is linked with this library"
957047e89262Smrg	    echo "*** or is declared to -dlopen it."
957147e89262Smrg
9572e6d2e958Smrg	    if test no = "$allow_undefined"; then
957347e89262Smrg	      echo
957447e89262Smrg	      echo "*** Since this library must not contain undefined symbols,"
957547e89262Smrg	      echo "*** because either the platform does not support them or"
957647e89262Smrg	      echo "*** it was explicitly requested with -no-undefined,"
957747e89262Smrg	      echo "*** libtool will only create a static version of it."
9578e6d2e958Smrg	      if test no = "$build_old_libs"; then
9579e6d2e958Smrg		oldlibs=$output_objdir/$libname.$libext
958047e89262Smrg		build_libtool_libs=module
958147e89262Smrg		build_old_libs=yes
958247e89262Smrg	      else
958347e89262Smrg		build_libtool_libs=no
958447e89262Smrg	      fi
958547e89262Smrg	    fi
958647e89262Smrg	  fi
958747e89262Smrg	fi
958847e89262Smrg	# Done checking deplibs!
958947e89262Smrg	deplibs=$newdeplibs
959047e89262Smrg      fi
959147e89262Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
959247e89262Smrg      case $host in
959347e89262Smrg	*-*-darwin*)
959447e89262Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
959547e89262Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
959647e89262Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
959747e89262Smrg	  ;;
959847e89262Smrg      esac
959947e89262Smrg
960047e89262Smrg      # move library search paths that coincide with paths to not yet
960147e89262Smrg      # installed libraries to the beginning of the library search list
960247e89262Smrg      new_libs=
960347e89262Smrg      for path in $notinst_path; do
960447e89262Smrg	case " $new_libs " in
960547e89262Smrg	*" -L$path/$objdir "*) ;;
960647e89262Smrg	*)
960747e89262Smrg	  case " $deplibs " in
960847e89262Smrg	  *" -L$path/$objdir "*)
9609899129b3Smrg	    func_append new_libs " -L$path/$objdir" ;;
961047e89262Smrg	  esac
961147e89262Smrg	  ;;
961247e89262Smrg	esac
961347e89262Smrg      done
961447e89262Smrg      for deplib in $deplibs; do
961547e89262Smrg	case $deplib in
961647e89262Smrg	-L*)
961747e89262Smrg	  case " $new_libs " in
961847e89262Smrg	  *" $deplib "*) ;;
9619899129b3Smrg	  *) func_append new_libs " $deplib" ;;
962047e89262Smrg	  esac
962147e89262Smrg	  ;;
9622899129b3Smrg	*) func_append new_libs " $deplib" ;;
962347e89262Smrg	esac
962447e89262Smrg      done
9625e6d2e958Smrg      deplibs=$new_libs
962647e89262Smrg
962747e89262Smrg      # All the library-specific variables (install_libdir is set above).
962847e89262Smrg      library_names=
962947e89262Smrg      old_library=
963047e89262Smrg      dlname=
963147e89262Smrg
963247e89262Smrg      # Test again, we may have decided not to build it any more
9633e6d2e958Smrg      if test yes = "$build_libtool_libs"; then
9634e6d2e958Smrg	# Remove $wl instances when linking with ld.
9635899129b3Smrg	# FIXME: should test the right _cmds variable.
9636899129b3Smrg	case $archive_cmds in
9637899129b3Smrg	  *\$LD\ *) wl= ;;
9638899129b3Smrg        esac
9639e6d2e958Smrg	if test yes = "$hardcode_into_libs"; then
964047e89262Smrg	  # Hardcode the library paths
964147e89262Smrg	  hardcode_libdirs=
964247e89262Smrg	  dep_rpath=
9643e6d2e958Smrg	  rpath=$finalize_rpath
9644e6d2e958Smrg	  test relink = "$opt_mode" || rpath=$compile_rpath$rpath
964547e89262Smrg	  for libdir in $rpath; do
964647e89262Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
964747e89262Smrg	      if test -n "$hardcode_libdir_separator"; then
9648899129b3Smrg		func_replace_sysroot "$libdir"
9649899129b3Smrg		libdir=$func_replace_sysroot_result
965047e89262Smrg		if test -z "$hardcode_libdirs"; then
9651e6d2e958Smrg		  hardcode_libdirs=$libdir
965247e89262Smrg		else
965347e89262Smrg		  # Just accumulate the unique libdirs.
965447e89262Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
965547e89262Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
965647e89262Smrg		    ;;
965747e89262Smrg		  *)
9658899129b3Smrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
965947e89262Smrg		    ;;
966047e89262Smrg		  esac
966147e89262Smrg		fi
966247e89262Smrg	      else
966347e89262Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
9664899129b3Smrg		func_append dep_rpath " $flag"
966547e89262Smrg	      fi
966647e89262Smrg	    elif test -n "$runpath_var"; then
966747e89262Smrg	      case "$perm_rpath " in
966847e89262Smrg	      *" $libdir "*) ;;
9669899129b3Smrg	      *) func_append perm_rpath " $libdir" ;;
967047e89262Smrg	      esac
967147e89262Smrg	    fi
967247e89262Smrg	  done
967347e89262Smrg	  # Substitute the hardcoded libdirs into the rpath.
967447e89262Smrg	  if test -n "$hardcode_libdir_separator" &&
967547e89262Smrg	     test -n "$hardcode_libdirs"; then
9676e6d2e958Smrg	    libdir=$hardcode_libdirs
9677899129b3Smrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
967847e89262Smrg	  fi
967947e89262Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
968047e89262Smrg	    # We should set the runpath_var.
968147e89262Smrg	    rpath=
968247e89262Smrg	    for dir in $perm_rpath; do
9683899129b3Smrg	      func_append rpath "$dir:"
968447e89262Smrg	    done
968547e89262Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
968647e89262Smrg	  fi
968747e89262Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
968847e89262Smrg	fi
9689bd1da9d7Smrg
9690e6d2e958Smrg	shlibpath=$finalize_shlibpath
9691e6d2e958Smrg	test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
969247e89262Smrg	if test -n "$shlibpath"; then
969347e89262Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
969447e89262Smrg	fi
9695bd1da9d7Smrg
969647e89262Smrg	# Get the real and link names of the library.
969747e89262Smrg	eval shared_ext=\"$shrext_cmds\"
969847e89262Smrg	eval library_names=\"$library_names_spec\"
969947e89262Smrg	set dummy $library_names
970047e89262Smrg	shift
9701e6d2e958Smrg	realname=$1
970247e89262Smrg	shift
9703bd1da9d7Smrg
970447e89262Smrg	if test -n "$soname_spec"; then
970547e89262Smrg	  eval soname=\"$soname_spec\"
970647e89262Smrg	else
9707e6d2e958Smrg	  soname=$realname
970847e89262Smrg	fi
970947e89262Smrg	if test -z "$dlname"; then
971047e89262Smrg	  dlname=$soname
971147e89262Smrg	fi
9712bd1da9d7Smrg
9713e6d2e958Smrg	lib=$output_objdir/$realname
971447e89262Smrg	linknames=
971547e89262Smrg	for link
971647e89262Smrg	do
9717899129b3Smrg	  func_append linknames " $link"
971847e89262Smrg	done
9719bd1da9d7Smrg
972047e89262Smrg	# Use standard objects if they are pic
972147e89262Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
972247e89262Smrg	test "X$libobjs" = "X " && libobjs=
9723bd1da9d7Smrg
972447e89262Smrg	delfiles=
972547e89262Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
972647e89262Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
9727e6d2e958Smrg	  export_symbols=$output_objdir/$libname.uexp
9728899129b3Smrg	  func_append delfiles " $export_symbols"
972947e89262Smrg	fi
9730bd1da9d7Smrg
973147e89262Smrg	orig_export_symbols=
973247e89262Smrg	case $host_os in
973347e89262Smrg	cygwin* | mingw* | cegcc*)
973447e89262Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
973547e89262Smrg	    # exporting using user supplied symfile
9736e6d2e958Smrg	    func_dll_def_p "$export_symbols" || {
973747e89262Smrg	      # and it's NOT already a .def file. Must figure out
973847e89262Smrg	      # which of the given symbols are data symbols and tag
973947e89262Smrg	      # them as such. So, trigger use of export_symbols_cmds.
974047e89262Smrg	      # export_symbols gets reassigned inside the "prepare
974147e89262Smrg	      # the list of exported symbols" if statement, so the
974247e89262Smrg	      # include_expsyms logic still works.
9743e6d2e958Smrg	      orig_export_symbols=$export_symbols
974447e89262Smrg	      export_symbols=
974547e89262Smrg	      always_export_symbols=yes
9746e6d2e958Smrg	    }
974747e89262Smrg	  fi
974847e89262Smrg	  ;;
974947e89262Smrg	esac
9750bd1da9d7Smrg
975147e89262Smrg	# Prepare the list of exported symbols
975247e89262Smrg	if test -z "$export_symbols"; then
9753e6d2e958Smrg	  if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
9754e6d2e958Smrg	    func_verbose "generating symbol list for '$libname.la'"
9755e6d2e958Smrg	    export_symbols=$output_objdir/$libname.exp
975647e89262Smrg	    $opt_dry_run || $RM $export_symbols
975747e89262Smrg	    cmds=$export_symbols_cmds
9758e6d2e958Smrg	    save_ifs=$IFS; IFS='~'
9759899129b3Smrg	    for cmd1 in $cmds; do
9760e6d2e958Smrg	      IFS=$save_ifs
9761899129b3Smrg	      # Take the normal branch if the nm_file_list_spec branch
9762899129b3Smrg	      # doesn't work or if tool conversion is not needed.
9763899129b3Smrg	      case $nm_file_list_spec~$to_tool_file_cmd in
9764899129b3Smrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
9765899129b3Smrg		  try_normal_branch=yes
9766899129b3Smrg		  eval cmd=\"$cmd1\"
9767899129b3Smrg		  func_len " $cmd"
9768899129b3Smrg		  len=$func_len_result
9769899129b3Smrg		  ;;
9770899129b3Smrg		*)
9771899129b3Smrg		  try_normal_branch=no
9772899129b3Smrg		  ;;
9773899129b3Smrg	      esac
9774e6d2e958Smrg	      if test yes = "$try_normal_branch" \
9775899129b3Smrg		 && { test "$len" -lt "$max_cmd_len" \
9776899129b3Smrg		      || test "$max_cmd_len" -le -1; }
9777899129b3Smrg	      then
9778899129b3Smrg		func_show_eval "$cmd" 'exit $?'
9779899129b3Smrg		skipped_export=false
9780899129b3Smrg	      elif test -n "$nm_file_list_spec"; then
9781899129b3Smrg		func_basename "$output"
9782899129b3Smrg		output_la=$func_basename_result
9783899129b3Smrg		save_libobjs=$libobjs
9784899129b3Smrg		save_output=$output
9785e6d2e958Smrg		output=$output_objdir/$output_la.nm
9786899129b3Smrg		func_to_tool_file "$output"
9787899129b3Smrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
9788899129b3Smrg		func_append delfiles " $output"
9789899129b3Smrg		func_verbose "creating $NM input file list: $output"
9790899129b3Smrg		for obj in $save_libobjs; do
9791899129b3Smrg		  func_to_tool_file "$obj"
9792899129b3Smrg		  $ECHO "$func_to_tool_file_result"
9793899129b3Smrg		done > "$output"
9794899129b3Smrg		eval cmd=\"$cmd1\"
979547e89262Smrg		func_show_eval "$cmd" 'exit $?'
9796899129b3Smrg		output=$save_output
9797899129b3Smrg		libobjs=$save_libobjs
979847e89262Smrg		skipped_export=false
979947e89262Smrg	      else
980047e89262Smrg		# The command line is too long to execute in one step.
980147e89262Smrg		func_verbose "using reloadable object file for export list..."
980247e89262Smrg		skipped_export=:
980347e89262Smrg		# Break out early, otherwise skipped_export may be
980447e89262Smrg		# set to false by a later but shorter cmd.
980547e89262Smrg		break
980647e89262Smrg	      fi
980747e89262Smrg	    done
9808e6d2e958Smrg	    IFS=$save_ifs
9809e6d2e958Smrg	    if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
981047e89262Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
981147e89262Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
981247e89262Smrg	    fi
981347e89262Smrg	  fi
981447e89262Smrg	fi
9815bd1da9d7Smrg
981647e89262Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
9817e6d2e958Smrg	  tmp_export_symbols=$export_symbols
9818e6d2e958Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
981947e89262Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
982047e89262Smrg	fi
9821bd1da9d7Smrg
9822e6d2e958Smrg	if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
982347e89262Smrg	  # The given exports_symbols file has to be filtered, so filter it.
9824e6d2e958Smrg	  func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
982547e89262Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
9826e6d2e958Smrg	  # 's' commands, which not all seds can handle. GNU sed should be fine
982747e89262Smrg	  # though. Also, the filter scales superlinearly with the number of
982847e89262Smrg	  # global variables. join(1) would be nice here, but unfortunately
982947e89262Smrg	  # isn't a blessed tool.
983047e89262Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
9831899129b3Smrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
983247e89262Smrg	  export_symbols=$output_objdir/$libname.def
983347e89262Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
9834bd1da9d7Smrg	fi
9835bd1da9d7Smrg
983647e89262Smrg	tmp_deplibs=
983747e89262Smrg	for test_deplib in $deplibs; do
983847e89262Smrg	  case " $convenience " in
983947e89262Smrg	  *" $test_deplib "*) ;;
984047e89262Smrg	  *)
9841899129b3Smrg	    func_append tmp_deplibs " $test_deplib"
984247e89262Smrg	    ;;
984347e89262Smrg	  esac
984447e89262Smrg	done
9845e6d2e958Smrg	deplibs=$tmp_deplibs
9846bd1da9d7Smrg
984747e89262Smrg	if test -n "$convenience"; then
984847e89262Smrg	  if test -n "$whole_archive_flag_spec" &&
9849e6d2e958Smrg	    test yes = "$compiler_needs_object" &&
985047e89262Smrg	    test -z "$libobjs"; then
985147e89262Smrg	    # extract the archives, so we have objects to list.
985247e89262Smrg	    # TODO: could optimize this to just extract one archive.
985347e89262Smrg	    whole_archive_flag_spec=
985447e89262Smrg	  fi
985547e89262Smrg	  if test -n "$whole_archive_flag_spec"; then
985647e89262Smrg	    save_libobjs=$libobjs
985747e89262Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
985847e89262Smrg	    test "X$libobjs" = "X " && libobjs=
985947e89262Smrg	  else
9860e6d2e958Smrg	    gentop=$output_objdir/${outputname}x
9861899129b3Smrg	    func_append generated " $gentop"
9862bd1da9d7Smrg
986347e89262Smrg	    func_extract_archives $gentop $convenience
9864899129b3Smrg	    func_append libobjs " $func_extract_archives_result"
986547e89262Smrg	    test "X$libobjs" = "X " && libobjs=
986647e89262Smrg	  fi
986747e89262Smrg	fi
9868bd1da9d7Smrg
9869e6d2e958Smrg	if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
987047e89262Smrg	  eval flag=\"$thread_safe_flag_spec\"
9871899129b3Smrg	  func_append linker_flags " $flag"
987247e89262Smrg	fi
9873bd1da9d7Smrg
987447e89262Smrg	# Make a backup of the uninstalled library when relinking
9875e6d2e958Smrg	if test relink = "$opt_mode"; then
987647e89262Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
9877bd1da9d7Smrg	fi
9878bd1da9d7Smrg
987947e89262Smrg	# Do each of the archive commands.
9880e6d2e958Smrg	if test yes = "$module" && test -n "$module_cmds"; then
988147e89262Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
988247e89262Smrg	    eval test_cmds=\"$module_expsym_cmds\"
988347e89262Smrg	    cmds=$module_expsym_cmds
988447e89262Smrg	  else
988547e89262Smrg	    eval test_cmds=\"$module_cmds\"
988647e89262Smrg	    cmds=$module_cmds
988747e89262Smrg	  fi
988847e89262Smrg	else
988947e89262Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
989047e89262Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
989147e89262Smrg	    cmds=$archive_expsym_cmds
989247e89262Smrg	  else
989347e89262Smrg	    eval test_cmds=\"$archive_cmds\"
989447e89262Smrg	    cmds=$archive_cmds
989547e89262Smrg	  fi
9896bd1da9d7Smrg	fi
9897bd1da9d7Smrg
9898e6d2e958Smrg	if test : != "$skipped_export" &&
989947e89262Smrg	   func_len " $test_cmds" &&
990047e89262Smrg	   len=$func_len_result &&
990147e89262Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
990247e89262Smrg	  :
990347e89262Smrg	else
990447e89262Smrg	  # The command line is too long to link in one step, link piecewise
990547e89262Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
990647e89262Smrg	  # script.
9907bd1da9d7Smrg
990847e89262Smrg	  # Save the value of $output and $libobjs because we want to
990947e89262Smrg	  # use them later.  If we have whole_archive_flag_spec, we
991047e89262Smrg	  # want to use save_libobjs as it was before
991147e89262Smrg	  # whole_archive_flag_spec was expanded, because we can't
991247e89262Smrg	  # assume the linker understands whole_archive_flag_spec.
991347e89262Smrg	  # This may have to be revisited, in case too many
991447e89262Smrg	  # convenience libraries get linked in and end up exceeding
991547e89262Smrg	  # the spec.
991647e89262Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
991747e89262Smrg	    save_libobjs=$libobjs
991847e89262Smrg	  fi
991947e89262Smrg	  save_output=$output
992047e89262Smrg	  func_basename "$output"
992147e89262Smrg	  output_la=$func_basename_result
9922bd1da9d7Smrg
992347e89262Smrg	  # Clear the reloadable object creation command queue and
992447e89262Smrg	  # initialize k to one.
992547e89262Smrg	  test_cmds=
992647e89262Smrg	  concat_cmds=
992747e89262Smrg	  objlist=
992847e89262Smrg	  last_robj=
992947e89262Smrg	  k=1
9930bd1da9d7Smrg
9931e6d2e958Smrg	  if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
9932e6d2e958Smrg	    output=$output_objdir/$output_la.lnkscript
993347e89262Smrg	    func_verbose "creating GNU ld script: $output"
993447e89262Smrg	    echo 'INPUT (' > $output
993547e89262Smrg	    for obj in $save_libobjs
993647e89262Smrg	    do
9937899129b3Smrg	      func_to_tool_file "$obj"
9938899129b3Smrg	      $ECHO "$func_to_tool_file_result" >> $output
993947e89262Smrg	    done
994047e89262Smrg	    echo ')' >> $output
9941899129b3Smrg	    func_append delfiles " $output"
9942899129b3Smrg	    func_to_tool_file "$output"
9943899129b3Smrg	    output=$func_to_tool_file_result
9944e6d2e958Smrg	  elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
9945e6d2e958Smrg	    output=$output_objdir/$output_la.lnk
994647e89262Smrg	    func_verbose "creating linker input file list: $output"
994747e89262Smrg	    : > $output
994847e89262Smrg	    set x $save_libobjs
994947e89262Smrg	    shift
995047e89262Smrg	    firstobj=
9951e6d2e958Smrg	    if test yes = "$compiler_needs_object"; then
995247e89262Smrg	      firstobj="$1 "
995347e89262Smrg	      shift
995447e89262Smrg	    fi
995547e89262Smrg	    for obj
995647e89262Smrg	    do
9957899129b3Smrg	      func_to_tool_file "$obj"
9958899129b3Smrg	      $ECHO "$func_to_tool_file_result" >> $output
995947e89262Smrg	    done
9960899129b3Smrg	    func_append delfiles " $output"
9961899129b3Smrg	    func_to_tool_file "$output"
9962899129b3Smrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
996347e89262Smrg	  else
996447e89262Smrg	    if test -n "$save_libobjs"; then
996547e89262Smrg	      func_verbose "creating reloadable object files..."
9966e6d2e958Smrg	      output=$output_objdir/$output_la-$k.$objext
996747e89262Smrg	      eval test_cmds=\"$reload_cmds\"
996847e89262Smrg	      func_len " $test_cmds"
996947e89262Smrg	      len0=$func_len_result
997047e89262Smrg	      len=$len0
997147e89262Smrg
997247e89262Smrg	      # Loop over the list of objects to be linked.
997347e89262Smrg	      for obj in $save_libobjs
997447e89262Smrg	      do
997547e89262Smrg		func_len " $obj"
997647e89262Smrg		func_arith $len + $func_len_result
997747e89262Smrg		len=$func_arith_result
9978e6d2e958Smrg		if test -z "$objlist" ||
997947e89262Smrg		   test "$len" -lt "$max_cmd_len"; then
998047e89262Smrg		  func_append objlist " $obj"
998147e89262Smrg		else
998247e89262Smrg		  # The command $test_cmds is almost too long, add a
998347e89262Smrg		  # command to the queue.
9984e6d2e958Smrg		  if test 1 -eq "$k"; then
998547e89262Smrg		    # The first file doesn't have a previous command to add.
998647e89262Smrg		    reload_objs=$objlist
998747e89262Smrg		    eval concat_cmds=\"$reload_cmds\"
998847e89262Smrg		  else
998947e89262Smrg		    # All subsequent reloadable object files will link in
999047e89262Smrg		    # the last one created.
999147e89262Smrg		    reload_objs="$objlist $last_robj"
999247e89262Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
999347e89262Smrg		  fi
9994e6d2e958Smrg		  last_robj=$output_objdir/$output_la-$k.$objext
999547e89262Smrg		  func_arith $k + 1
999647e89262Smrg		  k=$func_arith_result
9997e6d2e958Smrg		  output=$output_objdir/$output_la-$k.$objext
999847e89262Smrg		  objlist=" $obj"
999947e89262Smrg		  func_len " $last_robj"
1000047e89262Smrg		  func_arith $len0 + $func_len_result
1000147e89262Smrg		  len=$func_arith_result
1000247e89262Smrg		fi
1000347e89262Smrg	      done
1000447e89262Smrg	      # Handle the remaining objects by creating one last
1000547e89262Smrg	      # reloadable object file.  All subsequent reloadable object
1000647e89262Smrg	      # files will link in the last one created.
1000747e89262Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
1000847e89262Smrg	      reload_objs="$objlist $last_robj"
10009e6d2e958Smrg	      eval concat_cmds=\"\$concat_cmds$reload_cmds\"
1001047e89262Smrg	      if test -n "$last_robj"; then
10011e6d2e958Smrg	        eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
1001247e89262Smrg	      fi
10013899129b3Smrg	      func_append delfiles " $output"
1001447e89262Smrg
1001547e89262Smrg	    else
1001647e89262Smrg	      output=
1001747e89262Smrg	    fi
10018bd1da9d7Smrg
10019e6d2e958Smrg	    ${skipped_export-false} && {
10020e6d2e958Smrg	      func_verbose "generating symbol list for '$libname.la'"
10021e6d2e958Smrg	      export_symbols=$output_objdir/$libname.exp
1002247e89262Smrg	      $opt_dry_run || $RM $export_symbols
1002347e89262Smrg	      libobjs=$output
1002447e89262Smrg	      # Append the command to create the export file.
1002547e89262Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
1002647e89262Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
1002747e89262Smrg	      if test -n "$last_robj"; then
1002847e89262Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
1002947e89262Smrg	      fi
10030e6d2e958Smrg	    }
10031bd1da9d7Smrg
1003247e89262Smrg	    test -n "$save_libobjs" &&
1003347e89262Smrg	      func_verbose "creating a temporary reloadable object file: $output"
10034bd1da9d7Smrg
1003547e89262Smrg	    # Loop through the commands generated above and execute them.
10036e6d2e958Smrg	    save_ifs=$IFS; IFS='~'
1003747e89262Smrg	    for cmd in $concat_cmds; do
10038e6d2e958Smrg	      IFS=$save_ifs
10039e6d2e958Smrg	      $opt_quiet || {
1004047e89262Smrg		  func_quote_for_expand "$cmd"
1004147e89262Smrg		  eval "func_echo $func_quote_for_expand_result"
1004247e89262Smrg	      }
1004347e89262Smrg	      $opt_dry_run || eval "$cmd" || {
1004447e89262Smrg		lt_exit=$?
1004547e89262Smrg
1004647e89262Smrg		# Restore the uninstalled library and exit
10047e6d2e958Smrg		if test relink = "$opt_mode"; then
1004847e89262Smrg		  ( cd "$output_objdir" && \
1004947e89262Smrg		    $RM "${realname}T" && \
1005047e89262Smrg		    $MV "${realname}U" "$realname" )
1005147e89262Smrg		fi
10052bd1da9d7Smrg
1005347e89262Smrg		exit $lt_exit
1005447e89262Smrg	      }
1005547e89262Smrg	    done
10056e6d2e958Smrg	    IFS=$save_ifs
10057bd1da9d7Smrg
1005847e89262Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
1005947e89262Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
1006047e89262Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
10061bd1da9d7Smrg	    fi
10062bd1da9d7Smrg	  fi
10063bd1da9d7Smrg
10064e6d2e958Smrg          ${skipped_export-false} && {
1006547e89262Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
10066e6d2e958Smrg	      tmp_export_symbols=$export_symbols
10067e6d2e958Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
1006847e89262Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
1006947e89262Smrg	    fi
10070bd1da9d7Smrg
1007147e89262Smrg	    if test -n "$orig_export_symbols"; then
1007247e89262Smrg	      # The given exports_symbols file has to be filtered, so filter it.
10073e6d2e958Smrg	      func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
1007447e89262Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
10075e6d2e958Smrg	      # 's' commands, which not all seds can handle. GNU sed should be fine
1007647e89262Smrg	      # though. Also, the filter scales superlinearly with the number of
1007747e89262Smrg	      # global variables. join(1) would be nice here, but unfortunately
1007847e89262Smrg	      # isn't a blessed tool.
1007947e89262Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
10080899129b3Smrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
1008147e89262Smrg	      export_symbols=$output_objdir/$libname.def
1008247e89262Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
1008347e89262Smrg	    fi
10084e6d2e958Smrg	  }
10085bd1da9d7Smrg
1008647e89262Smrg	  libobjs=$output
1008747e89262Smrg	  # Restore the value of output.
1008847e89262Smrg	  output=$save_output
10089bd1da9d7Smrg
1009047e89262Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
1009147e89262Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
1009247e89262Smrg	    test "X$libobjs" = "X " && libobjs=
1009347e89262Smrg	  fi
1009447e89262Smrg	  # Expand the library linking commands again to reset the
1009547e89262Smrg	  # value of $libobjs for piecewise linking.
1009647e89262Smrg
1009747e89262Smrg	  # Do each of the archive commands.
10098e6d2e958Smrg	  if test yes = "$module" && test -n "$module_cmds"; then
1009947e89262Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
1010047e89262Smrg	      cmds=$module_expsym_cmds
10101bd1da9d7Smrg	    else
1010247e89262Smrg	      cmds=$module_cmds
10103bd1da9d7Smrg	    fi
10104bd1da9d7Smrg	  else
1010547e89262Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
1010647e89262Smrg	      cmds=$archive_expsym_cmds
1010747e89262Smrg	    else
1010847e89262Smrg	      cmds=$archive_cmds
1010947e89262Smrg	    fi
10110bd1da9d7Smrg	  fi
10111bd1da9d7Smrg	fi
10112bd1da9d7Smrg
1011347e89262Smrg	if test -n "$delfiles"; then
1011447e89262Smrg	  # Append the command to remove temporary files to $cmds.
1011547e89262Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
1011647e89262Smrg	fi
10117bd1da9d7Smrg
1011847e89262Smrg	# Add any objects from preloaded convenience libraries
1011947e89262Smrg	if test -n "$dlprefiles"; then
10120e6d2e958Smrg	  gentop=$output_objdir/${outputname}x
10121899129b3Smrg	  func_append generated " $gentop"
10122bd1da9d7Smrg
1012347e89262Smrg	  func_extract_archives $gentop $dlprefiles
10124899129b3Smrg	  func_append libobjs " $func_extract_archives_result"
1012547e89262Smrg	  test "X$libobjs" = "X " && libobjs=
10126bd1da9d7Smrg	fi
10127bd1da9d7Smrg
10128e6d2e958Smrg	save_ifs=$IFS; IFS='~'
1012947e89262Smrg	for cmd in $cmds; do
10130e6d2e958Smrg	  IFS=$sp$nl
1013147e89262Smrg	  eval cmd=\"$cmd\"
10132e6d2e958Smrg	  IFS=$save_ifs
10133e6d2e958Smrg	  $opt_quiet || {
1013447e89262Smrg	    func_quote_for_expand "$cmd"
1013547e89262Smrg	    eval "func_echo $func_quote_for_expand_result"
1013647e89262Smrg	  }
1013747e89262Smrg	  $opt_dry_run || eval "$cmd" || {
1013847e89262Smrg	    lt_exit=$?
10139bd1da9d7Smrg
1014047e89262Smrg	    # Restore the uninstalled library and exit
10141e6d2e958Smrg	    if test relink = "$opt_mode"; then
1014247e89262Smrg	      ( cd "$output_objdir" && \
1014347e89262Smrg	        $RM "${realname}T" && \
1014447e89262Smrg		$MV "${realname}U" "$realname" )
10145bd1da9d7Smrg	    fi
10146bd1da9d7Smrg
1014747e89262Smrg	    exit $lt_exit
1014847e89262Smrg	  }
1014947e89262Smrg	done
10150e6d2e958Smrg	IFS=$save_ifs
10151bd1da9d7Smrg
1015247e89262Smrg	# Restore the uninstalled library and exit
10153e6d2e958Smrg	if test relink = "$opt_mode"; then
1015447e89262Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
10155bd1da9d7Smrg
1015647e89262Smrg	  if test -n "$convenience"; then
1015747e89262Smrg	    if test -z "$whole_archive_flag_spec"; then
1015847e89262Smrg	      func_show_eval '${RM}r "$gentop"'
1015947e89262Smrg	    fi
1016047e89262Smrg	  fi
10161bd1da9d7Smrg
1016247e89262Smrg	  exit $EXIT_SUCCESS
1016347e89262Smrg	fi
10164bd1da9d7Smrg
1016547e89262Smrg	# Create links to the real library.
1016647e89262Smrg	for linkname in $linknames; do
1016747e89262Smrg	  if test "$realname" != "$linkname"; then
1016847e89262Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
1016947e89262Smrg	  fi
1017047e89262Smrg	done
10171bd1da9d7Smrg
1017247e89262Smrg	# If -module or -export-dynamic was specified, set the dlname.
10173e6d2e958Smrg	if test yes = "$module" || test yes = "$export_dynamic"; then
1017447e89262Smrg	  # On all known operating systems, these are identical.
10175e6d2e958Smrg	  dlname=$soname
1017647e89262Smrg	fi
1017747e89262Smrg      fi
1017847e89262Smrg      ;;
10179bd1da9d7Smrg
1018047e89262Smrg    obj)
10181e6d2e958Smrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
10182e6d2e958Smrg	func_warning "'-dlopen' is ignored for objects"
1018347e89262Smrg      fi
10184bd1da9d7Smrg
1018547e89262Smrg      case " $deplibs" in
1018647e89262Smrg      *\ -l* | *\ -L*)
10187e6d2e958Smrg	func_warning "'-l' and '-L' are ignored for objects" ;;
1018847e89262Smrg      esac
10189bd1da9d7Smrg
1019047e89262Smrg      test -n "$rpath" && \
10191e6d2e958Smrg	func_warning "'-rpath' is ignored for objects"
10192bd1da9d7Smrg
1019347e89262Smrg      test -n "$xrpath" && \
10194e6d2e958Smrg	func_warning "'-R' is ignored for objects"
1019547e89262Smrg
1019647e89262Smrg      test -n "$vinfo" && \
10197e6d2e958Smrg	func_warning "'-version-info' is ignored for objects"
10198bd1da9d7Smrg
1019947e89262Smrg      test -n "$release" && \
10200e6d2e958Smrg	func_warning "'-release' is ignored for objects"
10201bd1da9d7Smrg
1020247e89262Smrg      case $output in
1020347e89262Smrg      *.lo)
1020447e89262Smrg	test -n "$objs$old_deplibs" && \
10205e6d2e958Smrg	  func_fatal_error "cannot build library object '$output' from non-libtool objects"
1020647e89262Smrg
1020747e89262Smrg	libobj=$output
1020847e89262Smrg	func_lo2o "$libobj"
1020947e89262Smrg	obj=$func_lo2o_result
1021047e89262Smrg	;;
1021147e89262Smrg      *)
1021247e89262Smrg	libobj=
10213e6d2e958Smrg	obj=$output
10214bd1da9d7Smrg	;;
10215bd1da9d7Smrg      esac
10216bd1da9d7Smrg
1021747e89262Smrg      # Delete the old objects.
1021847e89262Smrg      $opt_dry_run || $RM $obj $libobj
10219bd1da9d7Smrg
1022047e89262Smrg      # Objects from convenience libraries.  This assumes
1022147e89262Smrg      # single-version convenience libraries.  Whenever we create
1022247e89262Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
1022347e89262Smrg      # the extraction.
1022447e89262Smrg      reload_conv_objs=
1022547e89262Smrg      gentop=
10226e6d2e958Smrg      # if reload_cmds runs $LD directly, get rid of -Wl from
10227e6d2e958Smrg      # whole_archive_flag_spec and hope we can get by with turning comma
10228e6d2e958Smrg      # into space.
10229e6d2e958Smrg      case $reload_cmds in
10230e6d2e958Smrg        *\$LD[\ \$]*) wl= ;;
10231e6d2e958Smrg      esac
1023247e89262Smrg      if test -n "$convenience"; then
1023347e89262Smrg	if test -n "$whole_archive_flag_spec"; then
1023447e89262Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
10235e6d2e958Smrg	  test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
10236e6d2e958Smrg	  reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
10237bd1da9d7Smrg	else
10238e6d2e958Smrg	  gentop=$output_objdir/${obj}x
10239899129b3Smrg	  func_append generated " $gentop"
1024047e89262Smrg
1024147e89262Smrg	  func_extract_archives $gentop $convenience
1024247e89262Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
10243bd1da9d7Smrg	fi
1024447e89262Smrg      fi
10245bd1da9d7Smrg
10246899129b3Smrg      # If we're not building shared, we need to use non_pic_objs
10247e6d2e958Smrg      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
10248899129b3Smrg
1024947e89262Smrg      # Create the old-style object.
10250e6d2e958Smrg      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
10251bd1da9d7Smrg
10252e6d2e958Smrg      output=$obj
1025347e89262Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
10254bd1da9d7Smrg
1025547e89262Smrg      # Exit if we aren't doing a library object file.
1025647e89262Smrg      if test -z "$libobj"; then
1025747e89262Smrg	if test -n "$gentop"; then
1025847e89262Smrg	  func_show_eval '${RM}r "$gentop"'
1025947e89262Smrg	fi
10260bd1da9d7Smrg
1026147e89262Smrg	exit $EXIT_SUCCESS
10262bd1da9d7Smrg      fi
10263bd1da9d7Smrg
10264e6d2e958Smrg      test yes = "$build_libtool_libs" || {
1026547e89262Smrg	if test -n "$gentop"; then
1026647e89262Smrg	  func_show_eval '${RM}r "$gentop"'
1026747e89262Smrg	fi
10268bd1da9d7Smrg
1026947e89262Smrg	# Create an invalid libtool object if no PIC, so that we don't
1027047e89262Smrg	# accidentally link it into a program.
1027147e89262Smrg	# $show "echo timestamp > $libobj"
1027247e89262Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
1027347e89262Smrg	exit $EXIT_SUCCESS
10274e6d2e958Smrg      }
10275bd1da9d7Smrg
10276e6d2e958Smrg      if test -n "$pic_flag" || test default != "$pic_mode"; then
1027747e89262Smrg	# Only do commands if we really have different PIC objects.
1027847e89262Smrg	reload_objs="$libobjs $reload_conv_objs"
10279e6d2e958Smrg	output=$libobj
1028047e89262Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
10281bd1da9d7Smrg      fi
1028247e89262Smrg
1028347e89262Smrg      if test -n "$gentop"; then
1028447e89262Smrg	func_show_eval '${RM}r "$gentop"'
1028547e89262Smrg      fi
1028647e89262Smrg
1028747e89262Smrg      exit $EXIT_SUCCESS
10288bd1da9d7Smrg      ;;
10289bd1da9d7Smrg
1029047e89262Smrg    prog)
1029147e89262Smrg      case $host in
1029247e89262Smrg	*cygwin*) func_stripname '' '.exe' "$output"
1029347e89262Smrg	          output=$func_stripname_result.exe;;
1029447e89262Smrg      esac
1029547e89262Smrg      test -n "$vinfo" && \
10296e6d2e958Smrg	func_warning "'-version-info' is ignored for programs"
10297bd1da9d7Smrg
1029847e89262Smrg      test -n "$release" && \
10299e6d2e958Smrg	func_warning "'-release' is ignored for programs"
10300bd1da9d7Smrg
10301e6d2e958Smrg      $preload \
10302e6d2e958Smrg	&& test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
10303e6d2e958Smrg	&& func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
1030447e89262Smrg
1030547e89262Smrg      case $host in
1030647e89262Smrg      *-*-rhapsody* | *-*-darwin1.[012])
1030747e89262Smrg	# On Rhapsody replace the C library is the System framework
1030847e89262Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
1030947e89262Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
10310bd1da9d7Smrg	;;
1031147e89262Smrg      esac
10312bd1da9d7Smrg
1031347e89262Smrg      case $host in
1031447e89262Smrg      *-*-darwin*)
1031547e89262Smrg	# Don't allow lazy linking, it breaks C++ global constructors
1031647e89262Smrg	# But is supposedly fixed on 10.4 or later (yay!).
10317e6d2e958Smrg	if test CXX = "$tagname"; then
1031847e89262Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
1031947e89262Smrg	    10.[0123])
10320e6d2e958Smrg	      func_append compile_command " $wl-bind_at_load"
10321e6d2e958Smrg	      func_append finalize_command " $wl-bind_at_load"
1032247e89262Smrg	    ;;
1032347e89262Smrg	  esac
10324bd1da9d7Smrg	fi
1032547e89262Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
1032647e89262Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
1032747e89262Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
1032847e89262Smrg	;;
1032947e89262Smrg      esac
10330bd1da9d7Smrg
10331bd1da9d7Smrg
1033247e89262Smrg      # move library search paths that coincide with paths to not yet
1033347e89262Smrg      # installed libraries to the beginning of the library search list
1033447e89262Smrg      new_libs=
1033547e89262Smrg      for path in $notinst_path; do
1033647e89262Smrg	case " $new_libs " in
1033747e89262Smrg	*" -L$path/$objdir "*) ;;
1033847e89262Smrg	*)
1033947e89262Smrg	  case " $compile_deplibs " in
1034047e89262Smrg	  *" -L$path/$objdir "*)
10341899129b3Smrg	    func_append new_libs " -L$path/$objdir" ;;
10342bd1da9d7Smrg	  esac
1034347e89262Smrg	  ;;
1034447e89262Smrg	esac
1034547e89262Smrg      done
1034647e89262Smrg      for deplib in $compile_deplibs; do
1034747e89262Smrg	case $deplib in
1034847e89262Smrg	-L*)
1034947e89262Smrg	  case " $new_libs " in
1035047e89262Smrg	  *" $deplib "*) ;;
10351899129b3Smrg	  *) func_append new_libs " $deplib" ;;
10352bd1da9d7Smrg	  esac
1035347e89262Smrg	  ;;
10354899129b3Smrg	*) func_append new_libs " $deplib" ;;
1035547e89262Smrg	esac
1035647e89262Smrg      done
10357e6d2e958Smrg      compile_deplibs=$new_libs
10358bd1da9d7Smrg
10359bd1da9d7Smrg
10360899129b3Smrg      func_append compile_command " $compile_deplibs"
10361899129b3Smrg      func_append finalize_command " $finalize_deplibs"
10362bd1da9d7Smrg
1036347e89262Smrg      if test -n "$rpath$xrpath"; then
1036447e89262Smrg	# If the user specified any rpath flags, then add them.
1036547e89262Smrg	for libdir in $rpath $xrpath; do
1036647e89262Smrg	  # This is the magic to use -rpath.
1036747e89262Smrg	  case "$finalize_rpath " in
1036847e89262Smrg	  *" $libdir "*) ;;
10369899129b3Smrg	  *) func_append finalize_rpath " $libdir" ;;
1037047e89262Smrg	  esac
1037147e89262Smrg	done
1037247e89262Smrg      fi
10373bd1da9d7Smrg
1037447e89262Smrg      # Now hardcode the library paths
1037547e89262Smrg      rpath=
1037647e89262Smrg      hardcode_libdirs=
1037747e89262Smrg      for libdir in $compile_rpath $finalize_rpath; do
1037847e89262Smrg	if test -n "$hardcode_libdir_flag_spec"; then
1037947e89262Smrg	  if test -n "$hardcode_libdir_separator"; then
1038047e89262Smrg	    if test -z "$hardcode_libdirs"; then
10381e6d2e958Smrg	      hardcode_libdirs=$libdir
1038247e89262Smrg	    else
1038347e89262Smrg	      # Just accumulate the unique libdirs.
1038447e89262Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
1038547e89262Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
1038647e89262Smrg		;;
1038747e89262Smrg	      *)
10388899129b3Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
1038947e89262Smrg		;;
1039047e89262Smrg	      esac
1039147e89262Smrg	    fi
10392bd1da9d7Smrg	  else
1039347e89262Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
10394899129b3Smrg	    func_append rpath " $flag"
10395bd1da9d7Smrg	  fi
1039647e89262Smrg	elif test -n "$runpath_var"; then
1039747e89262Smrg	  case "$perm_rpath " in
1039847e89262Smrg	  *" $libdir "*) ;;
10399899129b3Smrg	  *) func_append perm_rpath " $libdir" ;;
1040047e89262Smrg	  esac
1040147e89262Smrg	fi
1040247e89262Smrg	case $host in
1040347e89262Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
10404e6d2e958Smrg	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
1040547e89262Smrg	  case :$dllsearchpath: in
1040647e89262Smrg	  *":$libdir:"*) ;;
1040747e89262Smrg	  ::) dllsearchpath=$libdir;;
10408899129b3Smrg	  *) func_append dllsearchpath ":$libdir";;
1040947e89262Smrg	  esac
1041047e89262Smrg	  case :$dllsearchpath: in
1041147e89262Smrg	  *":$testbindir:"*) ;;
1041247e89262Smrg	  ::) dllsearchpath=$testbindir;;
10413899129b3Smrg	  *) func_append dllsearchpath ":$testbindir";;
1041447e89262Smrg	  esac
1041547e89262Smrg	  ;;
1041647e89262Smrg	esac
1041747e89262Smrg      done
1041847e89262Smrg      # Substitute the hardcoded libdirs into the rpath.
1041947e89262Smrg      if test -n "$hardcode_libdir_separator" &&
1042047e89262Smrg	 test -n "$hardcode_libdirs"; then
10421e6d2e958Smrg	libdir=$hardcode_libdirs
1042247e89262Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
1042347e89262Smrg      fi
10424e6d2e958Smrg      compile_rpath=$rpath
10425bd1da9d7Smrg
1042647e89262Smrg      rpath=
1042747e89262Smrg      hardcode_libdirs=
1042847e89262Smrg      for libdir in $finalize_rpath; do
1042947e89262Smrg	if test -n "$hardcode_libdir_flag_spec"; then
1043047e89262Smrg	  if test -n "$hardcode_libdir_separator"; then
1043147e89262Smrg	    if test -z "$hardcode_libdirs"; then
10432e6d2e958Smrg	      hardcode_libdirs=$libdir
1043347e89262Smrg	    else
1043447e89262Smrg	      # Just accumulate the unique libdirs.
1043547e89262Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
1043647e89262Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
1043747e89262Smrg		;;
1043847e89262Smrg	      *)
10439899129b3Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
1044047e89262Smrg		;;
1044147e89262Smrg	      esac
1044247e89262Smrg	    fi
10443bd1da9d7Smrg	  else
1044447e89262Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
10445899129b3Smrg	    func_append rpath " $flag"
10446bd1da9d7Smrg	  fi
1044747e89262Smrg	elif test -n "$runpath_var"; then
1044847e89262Smrg	  case "$finalize_perm_rpath " in
1044947e89262Smrg	  *" $libdir "*) ;;
10450899129b3Smrg	  *) func_append finalize_perm_rpath " $libdir" ;;
1045147e89262Smrg	  esac
10452bd1da9d7Smrg	fi
1045347e89262Smrg      done
1045447e89262Smrg      # Substitute the hardcoded libdirs into the rpath.
1045547e89262Smrg      if test -n "$hardcode_libdir_separator" &&
1045647e89262Smrg	 test -n "$hardcode_libdirs"; then
10457e6d2e958Smrg	libdir=$hardcode_libdirs
1045847e89262Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
1045947e89262Smrg      fi
10460e6d2e958Smrg      finalize_rpath=$rpath
10461bd1da9d7Smrg
10462e6d2e958Smrg      if test -n "$libobjs" && test yes = "$build_old_libs"; then
1046347e89262Smrg	# Transform all the library objects into standard objects.
1046447e89262Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
1046547e89262Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
1046647e89262Smrg      fi
10467bd1da9d7Smrg
10468e6d2e958Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" false
10469bd1da9d7Smrg
1047047e89262Smrg      # template prelinking step
1047147e89262Smrg      if test -n "$prelink_cmds"; then
1047247e89262Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
1047347e89262Smrg      fi
10474bd1da9d7Smrg
10475e6d2e958Smrg      wrappers_required=:
1047647e89262Smrg      case $host in
1047747e89262Smrg      *cegcc* | *mingw32ce*)
1047847e89262Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
10479e6d2e958Smrg        wrappers_required=false
1048047e89262Smrg        ;;
1048147e89262Smrg      *cygwin* | *mingw* )
10482e6d2e958Smrg        test yes = "$build_libtool_libs" || wrappers_required=false
1048347e89262Smrg        ;;
1048447e89262Smrg      *)
10485e6d2e958Smrg        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
10486e6d2e958Smrg          wrappers_required=false
1048747e89262Smrg        fi
1048847e89262Smrg        ;;
1048947e89262Smrg      esac
10490e6d2e958Smrg      $wrappers_required || {
1049147e89262Smrg	# Replace the output file specification.
1049247e89262Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10493e6d2e958Smrg	link_command=$compile_command$compile_rpath
10494bd1da9d7Smrg
1049547e89262Smrg	# We have no uninstalled library dependencies, so finalize right now.
1049647e89262Smrg	exit_status=0
1049747e89262Smrg	func_show_eval "$link_command" 'exit_status=$?'
10498bd1da9d7Smrg
10499899129b3Smrg	if test -n "$postlink_cmds"; then
10500899129b3Smrg	  func_to_tool_file "$output"
10501899129b3Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10502899129b3Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
10503899129b3Smrg	fi
10504899129b3Smrg
1050547e89262Smrg	# Delete the generated files.
10506e6d2e958Smrg	if test -f "$output_objdir/${outputname}S.$objext"; then
10507e6d2e958Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
10508bd1da9d7Smrg	fi
10509bd1da9d7Smrg
1051047e89262Smrg	exit $exit_status
10511e6d2e958Smrg      }
10512bd1da9d7Smrg
1051347e89262Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
1051447e89262Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
1051547e89262Smrg      fi
1051647e89262Smrg      if test -n "$finalize_shlibpath"; then
1051747e89262Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
1051847e89262Smrg      fi
10519bd1da9d7Smrg
1052047e89262Smrg      compile_var=
1052147e89262Smrg      finalize_var=
1052247e89262Smrg      if test -n "$runpath_var"; then
1052347e89262Smrg	if test -n "$perm_rpath"; then
1052447e89262Smrg	  # We should set the runpath_var.
1052547e89262Smrg	  rpath=
1052647e89262Smrg	  for dir in $perm_rpath; do
10527899129b3Smrg	    func_append rpath "$dir:"
1052847e89262Smrg	  done
1052947e89262Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
10530bd1da9d7Smrg	fi
1053147e89262Smrg	if test -n "$finalize_perm_rpath"; then
1053247e89262Smrg	  # We should set the runpath_var.
1053347e89262Smrg	  rpath=
1053447e89262Smrg	  for dir in $finalize_perm_rpath; do
10535899129b3Smrg	    func_append rpath "$dir:"
1053647e89262Smrg	  done
1053747e89262Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
10538bd1da9d7Smrg	fi
1053947e89262Smrg      fi
10540bd1da9d7Smrg
10541e6d2e958Smrg      if test yes = "$no_install"; then
1054247e89262Smrg	# We don't need to create a wrapper script.
10543e6d2e958Smrg	link_command=$compile_var$compile_command$compile_rpath
1054447e89262Smrg	# Replace the output file specification.
1054547e89262Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
1054647e89262Smrg	# Delete the old output file.
1054747e89262Smrg	$opt_dry_run || $RM $output
1054847e89262Smrg	# Link the executable and exit
1054947e89262Smrg	func_show_eval "$link_command" 'exit $?'
10550899129b3Smrg
10551899129b3Smrg	if test -n "$postlink_cmds"; then
10552899129b3Smrg	  func_to_tool_file "$output"
10553899129b3Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10554899129b3Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
10555899129b3Smrg	fi
10556899129b3Smrg
10557bd1da9d7Smrg	exit $EXIT_SUCCESS
1055847e89262Smrg      fi
10559bd1da9d7Smrg
10560e6d2e958Smrg      case $hardcode_action,$fast_install in
10561e6d2e958Smrg        relink,*)
10562e6d2e958Smrg	  # Fast installation is not supported
10563e6d2e958Smrg	  link_command=$compile_var$compile_command$compile_rpath
10564e6d2e958Smrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
1056547e89262Smrg
10566e6d2e958Smrg	  func_warning "this platform does not like uninstalled shared libraries"
10567e6d2e958Smrg	  func_warning "'$output' will be relinked during installation"
10568e6d2e958Smrg	  ;;
10569e6d2e958Smrg        *,yes)
10570e6d2e958Smrg	  link_command=$finalize_var$compile_command$finalize_rpath
10571e6d2e958Smrg	  relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
10572e6d2e958Smrg          ;;
10573e6d2e958Smrg	*,no)
10574e6d2e958Smrg	  link_command=$compile_var$compile_command$compile_rpath
10575e6d2e958Smrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
10576e6d2e958Smrg          ;;
10577e6d2e958Smrg	*,needless)
10578e6d2e958Smrg	  link_command=$finalize_var$compile_command$finalize_rpath
10579e6d2e958Smrg	  relink_command=
10580e6d2e958Smrg          ;;
10581e6d2e958Smrg      esac
10582bd1da9d7Smrg
1058347e89262Smrg      # Replace the output file specification.
1058447e89262Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
10585bd1da9d7Smrg
1058647e89262Smrg      # Delete the old output files.
1058747e89262Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
10588bd1da9d7Smrg
1058947e89262Smrg      func_show_eval "$link_command" 'exit $?'
10590bd1da9d7Smrg
10591899129b3Smrg      if test -n "$postlink_cmds"; then
10592899129b3Smrg	func_to_tool_file "$output_objdir/$outputname"
10593899129b3Smrg	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'`
10594899129b3Smrg	func_execute_cmds "$postlink_cmds" 'exit $?'
10595899129b3Smrg      fi
10596899129b3Smrg
1059747e89262Smrg      # Now create the wrapper script.
1059847e89262Smrg      func_verbose "creating $output"
10599bd1da9d7Smrg
1060047e89262Smrg      # Quote the relink command for shipping.
1060147e89262Smrg      if test -n "$relink_command"; then
1060247e89262Smrg	# Preserve any variables that may affect compiler behavior
1060347e89262Smrg	for var in $variables_saved_for_relink; do
1060447e89262Smrg	  if eval test -z \"\${$var+set}\"; then
1060547e89262Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
1060647e89262Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
1060747e89262Smrg	    relink_command="$var=; export $var; $relink_command"
10608bd1da9d7Smrg	  else
1060947e89262Smrg	    func_quote_for_eval "$var_value"
1061047e89262Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
10611bd1da9d7Smrg	  fi
1061247e89262Smrg	done
1061347e89262Smrg	relink_command="(cd `pwd`; $relink_command)"
1061447e89262Smrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
1061547e89262Smrg      fi
10616bd1da9d7Smrg
1061747e89262Smrg      # Only actually do things if not in dry run mode.
1061847e89262Smrg      $opt_dry_run || {
1061947e89262Smrg	# win32 will think the script is a binary if it has
1062047e89262Smrg	# a .exe suffix, so we strip it off here.
1062147e89262Smrg	case $output in
1062247e89262Smrg	  *.exe) func_stripname '' '.exe' "$output"
1062347e89262Smrg	         output=$func_stripname_result ;;
1062447e89262Smrg	esac
1062547e89262Smrg	# test for cygwin because mv fails w/o .exe extensions
1062647e89262Smrg	case $host in
1062747e89262Smrg	  *cygwin*)
1062847e89262Smrg	    exeext=.exe
1062947e89262Smrg	    func_stripname '' '.exe' "$outputname"
1063047e89262Smrg	    outputname=$func_stripname_result ;;
1063147e89262Smrg	  *) exeext= ;;
10632bd1da9d7Smrg	esac
1063347e89262Smrg	case $host in
1063447e89262Smrg	  *cygwin* | *mingw* )
1063547e89262Smrg	    func_dirname_and_basename "$output" "" "."
1063647e89262Smrg	    output_name=$func_basename_result
1063747e89262Smrg	    output_path=$func_dirname_result
10638e6d2e958Smrg	    cwrappersource=$output_path/$objdir/lt-$output_name.c
10639e6d2e958Smrg	    cwrapper=$output_path/$output_name.exe
1064047e89262Smrg	    $RM $cwrappersource $cwrapper
1064147e89262Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
1064247e89262Smrg
1064347e89262Smrg	    func_emit_cwrapperexe_src > $cwrappersource
1064447e89262Smrg
1064547e89262Smrg	    # The wrapper executable is built using the $host compiler,
1064647e89262Smrg	    # because it contains $host paths and files. If cross-
1064747e89262Smrg	    # compiling, it, like the target executable, must be
1064847e89262Smrg	    # executed on the $host or under an emulation environment.
1064947e89262Smrg	    $opt_dry_run || {
1065047e89262Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
1065147e89262Smrg	      $STRIP $cwrapper
1065247e89262Smrg	    }
10653bd1da9d7Smrg
1065447e89262Smrg	    # Now, create the wrapper script for func_source use:
1065547e89262Smrg	    func_ltwrapper_scriptname $cwrapper
1065647e89262Smrg	    $RM $func_ltwrapper_scriptname_result
1065747e89262Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
1065847e89262Smrg	    $opt_dry_run || {
1065947e89262Smrg	      # note: this script will not be executed, so do not chmod.
10660e6d2e958Smrg	      if test "x$build" = "x$host"; then
1066147e89262Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
1066247e89262Smrg	      else
1066347e89262Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
1066447e89262Smrg	      fi
1066547e89262Smrg	    }
1066647e89262Smrg	  ;;
1066747e89262Smrg	  * )
1066847e89262Smrg	    $RM $output
1066947e89262Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
10670bd1da9d7Smrg
1067147e89262Smrg	    func_emit_wrapper no > $output
1067247e89262Smrg	    chmod +x $output
1067347e89262Smrg	  ;;
1067447e89262Smrg	esac
1067547e89262Smrg      }
1067647e89262Smrg      exit $EXIT_SUCCESS
1067747e89262Smrg      ;;
1067847e89262Smrg    esac
10679bd1da9d7Smrg
1068047e89262Smrg    # See if we need to build an old-fashioned archive.
1068147e89262Smrg    for oldlib in $oldlibs; do
10682bd1da9d7Smrg
10683e6d2e958Smrg      case $build_libtool_libs in
10684e6d2e958Smrg        convenience)
10685e6d2e958Smrg	  oldobjs="$libobjs_save $symfileobj"
10686e6d2e958Smrg	  addlibs=$convenience
1068747e89262Smrg	  build_libtool_libs=no
10688e6d2e958Smrg	  ;;
10689e6d2e958Smrg	module)
10690e6d2e958Smrg	  oldobjs=$libobjs_save
10691e6d2e958Smrg	  addlibs=$old_convenience
10692e6d2e958Smrg	  build_libtool_libs=no
10693e6d2e958Smrg          ;;
10694e6d2e958Smrg	*)
1069547e89262Smrg	  oldobjs="$old_deplibs $non_pic_objects"
10696e6d2e958Smrg	  $preload && test -f "$symfileobj" \
10697e6d2e958Smrg	    && func_append oldobjs " $symfileobj"
10698e6d2e958Smrg	  addlibs=$old_convenience
10699e6d2e958Smrg	  ;;
10700e6d2e958Smrg      esac
10701bd1da9d7Smrg
1070247e89262Smrg      if test -n "$addlibs"; then
10703e6d2e958Smrg	gentop=$output_objdir/${outputname}x
10704899129b3Smrg	func_append generated " $gentop"
10705bd1da9d7Smrg
1070647e89262Smrg	func_extract_archives $gentop $addlibs
10707899129b3Smrg	func_append oldobjs " $func_extract_archives_result"
1070847e89262Smrg      fi
10709bd1da9d7Smrg
1071047e89262Smrg      # Do each command in the archive commands.
10711e6d2e958Smrg      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
1071247e89262Smrg	cmds=$old_archive_from_new_cmds
1071347e89262Smrg      else
10714bd1da9d7Smrg
1071547e89262Smrg	# Add any objects from preloaded convenience libraries
1071647e89262Smrg	if test -n "$dlprefiles"; then
10717e6d2e958Smrg	  gentop=$output_objdir/${outputname}x
10718899129b3Smrg	  func_append generated " $gentop"
10719bd1da9d7Smrg
1072047e89262Smrg	  func_extract_archives $gentop $dlprefiles
10721899129b3Smrg	  func_append oldobjs " $func_extract_archives_result"
1072247e89262Smrg	fi
10723bd1da9d7Smrg
1072447e89262Smrg	# POSIX demands no paths to be encoded in archives.  We have
1072547e89262Smrg	# to avoid creating archives with duplicate basenames if we
1072647e89262Smrg	# might have to extract them afterwards, e.g., when creating a
1072747e89262Smrg	# static archive out of a convenience library, or when linking
1072847e89262Smrg	# the entirety of a libtool archive into another (currently
1072947e89262Smrg	# not supported by libtool).
1073047e89262Smrg	if (for obj in $oldobjs
1073147e89262Smrg	    do
1073247e89262Smrg	      func_basename "$obj"
1073347e89262Smrg	      $ECHO "$func_basename_result"
1073447e89262Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
1073547e89262Smrg	  :
1073647e89262Smrg	else
1073747e89262Smrg	  echo "copying selected object files to avoid basename conflicts..."
10738e6d2e958Smrg	  gentop=$output_objdir/${outputname}x
10739899129b3Smrg	  func_append generated " $gentop"
1074047e89262Smrg	  func_mkdir_p "$gentop"
1074147e89262Smrg	  save_oldobjs=$oldobjs
1074247e89262Smrg	  oldobjs=
1074347e89262Smrg	  counter=1
1074447e89262Smrg	  for obj in $save_oldobjs
1074547e89262Smrg	  do
1074647e89262Smrg	    func_basename "$obj"
10747e6d2e958Smrg	    objbase=$func_basename_result
1074847e89262Smrg	    case " $oldobjs " in
1074947e89262Smrg	    " ") oldobjs=$obj ;;
1075047e89262Smrg	    *[\ /]"$objbase "*)
1075147e89262Smrg	      while :; do
1075247e89262Smrg		# Make sure we don't pick an alternate name that also
1075347e89262Smrg		# overlaps.
1075447e89262Smrg		newobj=lt$counter-$objbase
1075547e89262Smrg		func_arith $counter + 1
1075647e89262Smrg		counter=$func_arith_result
1075747e89262Smrg		case " $oldobjs " in
1075847e89262Smrg		*[\ /]"$newobj "*) ;;
1075947e89262Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
1076047e89262Smrg		esac
1076147e89262Smrg	      done
1076247e89262Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
10763899129b3Smrg	      func_append oldobjs " $gentop/$newobj"
1076447e89262Smrg	      ;;
10765899129b3Smrg	    *) func_append oldobjs " $obj" ;;
1076647e89262Smrg	    esac
10767bd1da9d7Smrg	  done
10768bd1da9d7Smrg	fi
10769899129b3Smrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
10770899129b3Smrg	tool_oldlib=$func_to_tool_file_result
1077147e89262Smrg	eval cmds=\"$old_archive_cmds\"
10772bd1da9d7Smrg
1077347e89262Smrg	func_len " $cmds"
1077447e89262Smrg	len=$func_len_result
1077547e89262Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
1077647e89262Smrg	  cmds=$old_archive_cmds
10777899129b3Smrg	elif test -n "$archiver_list_spec"; then
10778899129b3Smrg	  func_verbose "using command file archive linking..."
10779899129b3Smrg	  for obj in $oldobjs
10780899129b3Smrg	  do
10781899129b3Smrg	    func_to_tool_file "$obj"
10782899129b3Smrg	    $ECHO "$func_to_tool_file_result"
10783899129b3Smrg	  done > $output_objdir/$libname.libcmd
10784899129b3Smrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
10785899129b3Smrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
10786899129b3Smrg	  cmds=$old_archive_cmds
1078747e89262Smrg	else
1078847e89262Smrg	  # the command line is too long to link in one step, link in parts
1078947e89262Smrg	  func_verbose "using piecewise archive linking..."
1079047e89262Smrg	  save_RANLIB=$RANLIB
1079147e89262Smrg	  RANLIB=:
1079247e89262Smrg	  objlist=
1079347e89262Smrg	  concat_cmds=
1079447e89262Smrg	  save_oldobjs=$oldobjs
1079547e89262Smrg	  oldobjs=
1079647e89262Smrg	  # Is there a better way of finding the last object in the list?
1079747e89262Smrg	  for obj in $save_oldobjs
1079847e89262Smrg	  do
1079947e89262Smrg	    last_oldobj=$obj
1080047e89262Smrg	  done
1080147e89262Smrg	  eval test_cmds=\"$old_archive_cmds\"
1080247e89262Smrg	  func_len " $test_cmds"
1080347e89262Smrg	  len0=$func_len_result
1080447e89262Smrg	  len=$len0
1080547e89262Smrg	  for obj in $save_oldobjs
1080647e89262Smrg	  do
1080747e89262Smrg	    func_len " $obj"
1080847e89262Smrg	    func_arith $len + $func_len_result
1080947e89262Smrg	    len=$func_arith_result
1081047e89262Smrg	    func_append objlist " $obj"
1081147e89262Smrg	    if test "$len" -lt "$max_cmd_len"; then
1081247e89262Smrg	      :
1081347e89262Smrg	    else
1081447e89262Smrg	      # the above command should be used before it gets too long
1081547e89262Smrg	      oldobjs=$objlist
10816e6d2e958Smrg	      if test "$obj" = "$last_oldobj"; then
1081747e89262Smrg		RANLIB=$save_RANLIB
1081847e89262Smrg	      fi
1081947e89262Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
10820e6d2e958Smrg	      eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
1082147e89262Smrg	      objlist=
1082247e89262Smrg	      len=$len0
1082347e89262Smrg	    fi
1082447e89262Smrg	  done
1082547e89262Smrg	  RANLIB=$save_RANLIB
1082647e89262Smrg	  oldobjs=$objlist
10827e6d2e958Smrg	  if test -z "$oldobjs"; then
1082847e89262Smrg	    eval cmds=\"\$concat_cmds\"
1082947e89262Smrg	  else
1083047e89262Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
1083147e89262Smrg	  fi
1083247e89262Smrg	fi
1083347e89262Smrg      fi
1083447e89262Smrg      func_execute_cmds "$cmds" 'exit $?'
10835bd1da9d7Smrg    done
10836bd1da9d7Smrg
1083747e89262Smrg    test -n "$generated" && \
1083847e89262Smrg      func_show_eval "${RM}r$generated"
10839bd1da9d7Smrg
1084047e89262Smrg    # Now create the libtool archive.
1084147e89262Smrg    case $output in
1084247e89262Smrg    *.la)
1084347e89262Smrg      old_library=
10844e6d2e958Smrg      test yes = "$build_old_libs" && old_library=$libname.$libext
1084547e89262Smrg      func_verbose "creating $output"
10846bd1da9d7Smrg
1084747e89262Smrg      # Preserve any variables that may affect compiler behavior
1084847e89262Smrg      for var in $variables_saved_for_relink; do
1084947e89262Smrg	if eval test -z \"\${$var+set}\"; then
1085047e89262Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
1085147e89262Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
1085247e89262Smrg	  relink_command="$var=; export $var; $relink_command"
10853bd1da9d7Smrg	else
1085447e89262Smrg	  func_quote_for_eval "$var_value"
1085547e89262Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
10856bd1da9d7Smrg	fi
1085747e89262Smrg      done
1085847e89262Smrg      # Quote the link command for shipping.
10859e6d2e958Smrg      relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
1086047e89262Smrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
10861e6d2e958Smrg      if test yes = "$hardcode_automatic"; then
1086247e89262Smrg	relink_command=
1086347e89262Smrg      fi
10864bd1da9d7Smrg
1086547e89262Smrg      # Only create the output if not a dry run.
1086647e89262Smrg      $opt_dry_run || {
1086747e89262Smrg	for installed in no yes; do
10868e6d2e958Smrg	  if test yes = "$installed"; then
1086947e89262Smrg	    if test -z "$install_libdir"; then
1087047e89262Smrg	      break
1087147e89262Smrg	    fi
10872e6d2e958Smrg	    output=$output_objdir/${outputname}i
1087347e89262Smrg	    # Replace all uninstalled libtool libraries with the installed ones
1087447e89262Smrg	    newdependency_libs=
1087547e89262Smrg	    for deplib in $dependency_libs; do
1087647e89262Smrg	      case $deplib in
1087747e89262Smrg	      *.la)
1087847e89262Smrg		func_basename "$deplib"
10879e6d2e958Smrg		name=$func_basename_result
10880899129b3Smrg		func_resolve_sysroot "$deplib"
10881e6d2e958Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
1088247e89262Smrg		test -z "$libdir" && \
10883e6d2e958Smrg		  func_fatal_error "'$deplib' is not a valid libtool archive"
10884899129b3Smrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
10885899129b3Smrg		;;
10886899129b3Smrg	      -L*)
10887899129b3Smrg		func_stripname -L '' "$deplib"
10888899129b3Smrg		func_replace_sysroot "$func_stripname_result"
10889899129b3Smrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
10890899129b3Smrg		;;
10891899129b3Smrg	      -R*)
10892899129b3Smrg		func_stripname -R '' "$deplib"
10893899129b3Smrg		func_replace_sysroot "$func_stripname_result"
10894899129b3Smrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
1089547e89262Smrg		;;
10896899129b3Smrg	      *) func_append newdependency_libs " $deplib" ;;
1089747e89262Smrg	      esac
1089847e89262Smrg	    done
10899e6d2e958Smrg	    dependency_libs=$newdependency_libs
1090047e89262Smrg	    newdlfiles=
1090147e89262Smrg
1090247e89262Smrg	    for lib in $dlfiles; do
1090347e89262Smrg	      case $lib in
1090447e89262Smrg	      *.la)
1090547e89262Smrg	        func_basename "$lib"
10906e6d2e958Smrg		name=$func_basename_result
10907e6d2e958Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
1090847e89262Smrg		test -z "$libdir" && \
10909e6d2e958Smrg		  func_fatal_error "'$lib' is not a valid libtool archive"
10910899129b3Smrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
1091147e89262Smrg		;;
10912899129b3Smrg	      *) func_append newdlfiles " $lib" ;;
1091347e89262Smrg	      esac
1091447e89262Smrg	    done
10915e6d2e958Smrg	    dlfiles=$newdlfiles
1091647e89262Smrg	    newdlprefiles=
1091747e89262Smrg	    for lib in $dlprefiles; do
1091847e89262Smrg	      case $lib in
1091947e89262Smrg	      *.la)
1092047e89262Smrg		# Only pass preopened files to the pseudo-archive (for
1092147e89262Smrg		# eventual linking with the app. that links it) if we
1092247e89262Smrg		# didn't already link the preopened objects directly into
1092347e89262Smrg		# the library:
1092447e89262Smrg		func_basename "$lib"
10925e6d2e958Smrg		name=$func_basename_result
10926e6d2e958Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
1092747e89262Smrg		test -z "$libdir" && \
10928e6d2e958Smrg		  func_fatal_error "'$lib' is not a valid libtool archive"
10929899129b3Smrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
1093047e89262Smrg		;;
1093147e89262Smrg	      esac
1093247e89262Smrg	    done
10933e6d2e958Smrg	    dlprefiles=$newdlprefiles
1093447e89262Smrg	  else
1093547e89262Smrg	    newdlfiles=
1093647e89262Smrg	    for lib in $dlfiles; do
1093747e89262Smrg	      case $lib in
10938e6d2e958Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
1093947e89262Smrg		*) abs=`pwd`"/$lib" ;;
1094047e89262Smrg	      esac
10941899129b3Smrg	      func_append newdlfiles " $abs"
1094247e89262Smrg	    done
10943e6d2e958Smrg	    dlfiles=$newdlfiles
1094447e89262Smrg	    newdlprefiles=
1094547e89262Smrg	    for lib in $dlprefiles; do
1094647e89262Smrg	      case $lib in
10947e6d2e958Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
1094847e89262Smrg		*) abs=`pwd`"/$lib" ;;
1094947e89262Smrg	      esac
10950899129b3Smrg	      func_append newdlprefiles " $abs"
1095147e89262Smrg	    done
10952e6d2e958Smrg	    dlprefiles=$newdlprefiles
1095347e89262Smrg	  fi
1095447e89262Smrg	  $RM $output
1095547e89262Smrg	  # place dlname in correct position for cygwin
1095647e89262Smrg	  # In fact, it would be nice if we could use this code for all target
1095747e89262Smrg	  # systems that can't hard-code library paths into their executables
1095847e89262Smrg	  # and that have no shared library path variable independent of PATH,
1095947e89262Smrg	  # but it turns out we can't easily determine that from inspecting
1096047e89262Smrg	  # libtool variables, so we have to hard-code the OSs to which it
1096147e89262Smrg	  # applies here; at the moment, that means platforms that use the PE
1096247e89262Smrg	  # object format with DLL files.  See the long comment at the top of
1096347e89262Smrg	  # tests/bindir.at for full details.
1096447e89262Smrg	  tdlname=$dlname
1096547e89262Smrg	  case $host,$output,$installed,$module,$dlname in
1096647e89262Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
1096747e89262Smrg	      # If a -bindir argument was supplied, place the dll there.
10968e6d2e958Smrg	      if test -n "$bindir"; then
1096947e89262Smrg		func_relative_path "$install_libdir" "$bindir"
10970e6d2e958Smrg		tdlname=$func_relative_path_result/$dlname
1097147e89262Smrg	      else
1097247e89262Smrg		# Otherwise fall back on heuristic.
1097347e89262Smrg		tdlname=../bin/$dlname
1097447e89262Smrg	      fi
1097547e89262Smrg	      ;;
1097647e89262Smrg	  esac
1097747e89262Smrg	  $ECHO > $output "\
1097847e89262Smrg# $outputname - a libtool library file
10979e6d2e958Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
1098047e89262Smrg#
1098147e89262Smrg# Please DO NOT delete this file!
1098247e89262Smrg# It is necessary for linking the library.
10983bd1da9d7Smrg
1098447e89262Smrg# The name that we can dlopen(3).
1098547e89262Smrgdlname='$tdlname'
10986bd1da9d7Smrg
1098747e89262Smrg# Names of this library.
1098847e89262Smrglibrary_names='$library_names'
10989bd1da9d7Smrg
1099047e89262Smrg# The name of the static archive.
1099147e89262Smrgold_library='$old_library'
10992bd1da9d7Smrg
10993e6d2e958Smrg# Linker flags that cannot go in dependency_libs.
1099447e89262Smrginherited_linker_flags='$new_inherited_linker_flags'
10995bd1da9d7Smrg
1099647e89262Smrg# Libraries that this one depends upon.
1099747e89262Smrgdependency_libs='$dependency_libs'
10998bd1da9d7Smrg
1099947e89262Smrg# Names of additional weak libraries provided by this library
1100047e89262Smrgweak_library_names='$weak_libs'
11001bd1da9d7Smrg
1100247e89262Smrg# Version information for $libname.
1100347e89262Smrgcurrent=$current
1100447e89262Smrgage=$age
1100547e89262Smrgrevision=$revision
11006bd1da9d7Smrg
1100747e89262Smrg# Is this an already installed library?
1100847e89262Smrginstalled=$installed
11009bd1da9d7Smrg
1101047e89262Smrg# Should we warn about portability when linking against -modules?
1101147e89262Smrgshouldnotlink=$module
11012bd1da9d7Smrg
1101347e89262Smrg# Files to dlopen/dlpreopen
1101447e89262Smrgdlopen='$dlfiles'
1101547e89262Smrgdlpreopen='$dlprefiles'
11016bd1da9d7Smrg
1101747e89262Smrg# Directory that this library needs to be installed in:
1101847e89262Smrglibdir='$install_libdir'"
11019e6d2e958Smrg	  if test no,yes = "$installed,$need_relink"; then
1102047e89262Smrg	    $ECHO >> $output "\
1102147e89262Smrgrelink_command=\"$relink_command\""
1102247e89262Smrg	  fi
1102347e89262Smrg	done
1102447e89262Smrg      }
11025bd1da9d7Smrg
1102647e89262Smrg      # Do a symbolic link so that the libtool archive can be found in
1102747e89262Smrg      # LD_LIBRARY_PATH before the program is installed.
1102847e89262Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
1102947e89262Smrg      ;;
1103047e89262Smrg    esac
1103147e89262Smrg    exit $EXIT_SUCCESS
1103247e89262Smrg}
11033bd1da9d7Smrg
11034e6d2e958Smrgif test link = "$opt_mode" || test relink = "$opt_mode"; then
11035e6d2e958Smrg  func_mode_link ${1+"$@"}
11036e6d2e958Smrgfi
11037bd1da9d7Smrg
11038bd1da9d7Smrg
1103947e89262Smrg# func_mode_uninstall arg...
1104047e89262Smrgfunc_mode_uninstall ()
1104147e89262Smrg{
11042e6d2e958Smrg    $debug_cmd
11043e6d2e958Smrg
11044e6d2e958Smrg    RM=$nonopt
11045bd1da9d7Smrg    files=
11046e6d2e958Smrg    rmforce=false
11047bd1da9d7Smrg    exit_status=0
11048bd1da9d7Smrg
11049bd1da9d7Smrg    # This variable tells wrapper scripts just to set variables rather
11050bd1da9d7Smrg    # than running their programs.
11051e6d2e958Smrg    libtool_install_magic=$magic
11052bd1da9d7Smrg
11053bd1da9d7Smrg    for arg
11054bd1da9d7Smrg    do
11055bd1da9d7Smrg      case $arg in
11056e6d2e958Smrg      -f) func_append RM " $arg"; rmforce=: ;;
11057899129b3Smrg      -*) func_append RM " $arg" ;;
11058899129b3Smrg      *) func_append files " $arg" ;;
11059bd1da9d7Smrg      esac
11060bd1da9d7Smrg    done
11061bd1da9d7Smrg
1106247e89262Smrg    test -z "$RM" && \
1106347e89262Smrg      func_fatal_help "you must specify an RM program"
11064bd1da9d7Smrg
11065bd1da9d7Smrg    rmdirs=
11066bd1da9d7Smrg
11067bd1da9d7Smrg    for file in $files; do
1106847e89262Smrg      func_dirname "$file" "" "."
11069e6d2e958Smrg      dir=$func_dirname_result
11070e6d2e958Smrg      if test . = "$dir"; then
11071e6d2e958Smrg	odir=$objdir
11072bd1da9d7Smrg      else
11073e6d2e958Smrg	odir=$dir/$objdir
11074bd1da9d7Smrg      fi
1107547e89262Smrg      func_basename "$file"
11076e6d2e958Smrg      name=$func_basename_result
11077e6d2e958Smrg      test uninstall = "$opt_mode" && odir=$dir
11078bd1da9d7Smrg
11079899129b3Smrg      # Remember odir for removal later, being careful to avoid duplicates
11080e6d2e958Smrg      if test clean = "$opt_mode"; then
11081bd1da9d7Smrg	case " $rmdirs " in
11082899129b3Smrg	  *" $odir "*) ;;
11083899129b3Smrg	  *) func_append rmdirs " $odir" ;;
11084bd1da9d7Smrg	esac
11085bd1da9d7Smrg      fi
11086bd1da9d7Smrg
11087bd1da9d7Smrg      # Don't error if the file doesn't exist and rm -f was used.
1108847e89262Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
1108947e89262Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
1109047e89262Smrg	 test -f "$file"; then
11091bd1da9d7Smrg	:
11092bd1da9d7Smrg      elif test -d "$file"; then
11093bd1da9d7Smrg	exit_status=1
11094bd1da9d7Smrg	continue
11095e6d2e958Smrg      elif $rmforce; then
11096bd1da9d7Smrg	continue
11097bd1da9d7Smrg      fi
11098bd1da9d7Smrg
11099e6d2e958Smrg      rmfiles=$file
11100bd1da9d7Smrg
11101bd1da9d7Smrg      case $name in
11102bd1da9d7Smrg      *.la)
11103bd1da9d7Smrg	# Possibly a libtool archive, so verify it.
1110447e89262Smrg	if func_lalib_p "$file"; then
1110547e89262Smrg	  func_source $dir/$name
11106bd1da9d7Smrg
11107bd1da9d7Smrg	  # Delete the libtool libraries and symlinks.
11108bd1da9d7Smrg	  for n in $library_names; do
11109899129b3Smrg	    func_append rmfiles " $odir/$n"
11110bd1da9d7Smrg	  done
11111899129b3Smrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
11112bd1da9d7Smrg
11113e6d2e958Smrg	  case $opt_mode in
11114bd1da9d7Smrg	  clean)
11115899129b3Smrg	    case " $library_names " in
11116bd1da9d7Smrg	    *" $dlname "*) ;;
11117899129b3Smrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
11118bd1da9d7Smrg	    esac
11119899129b3Smrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
11120bd1da9d7Smrg	    ;;
11121bd1da9d7Smrg	  uninstall)
11122bd1da9d7Smrg	    if test -n "$library_names"; then
11123bd1da9d7Smrg	      # Do each command in the postuninstall commands.
11124e6d2e958Smrg	      func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
11125bd1da9d7Smrg	    fi
11126bd1da9d7Smrg
11127bd1da9d7Smrg	    if test -n "$old_library"; then
11128bd1da9d7Smrg	      # Do each command in the old_postuninstall commands.
11129e6d2e958Smrg	      func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
11130bd1da9d7Smrg	    fi
11131bd1da9d7Smrg	    # FIXME: should reinstall the best remaining shared library.
11132bd1da9d7Smrg	    ;;
11133bd1da9d7Smrg	  esac
11134bd1da9d7Smrg	fi
11135bd1da9d7Smrg	;;
11136bd1da9d7Smrg
11137bd1da9d7Smrg      *.lo)
11138bd1da9d7Smrg	# Possibly a libtool object, so verify it.
1113947e89262Smrg	if func_lalib_p "$file"; then
11140bd1da9d7Smrg
11141bd1da9d7Smrg	  # Read the .lo file
1114247e89262Smrg	  func_source $dir/$name
11143bd1da9d7Smrg
11144bd1da9d7Smrg	  # Add PIC object to the list of files to remove.
11145e6d2e958Smrg	  if test -n "$pic_object" && test none != "$pic_object"; then
11146899129b3Smrg	    func_append rmfiles " $dir/$pic_object"
11147bd1da9d7Smrg	  fi
11148bd1da9d7Smrg
11149bd1da9d7Smrg	  # Add non-PIC object to the list of files to remove.
11150e6d2e958Smrg	  if test -n "$non_pic_object" && test none != "$non_pic_object"; then
11151899129b3Smrg	    func_append rmfiles " $dir/$non_pic_object"
11152bd1da9d7Smrg	  fi
11153bd1da9d7Smrg	fi
11154bd1da9d7Smrg	;;
11155bd1da9d7Smrg
11156bd1da9d7Smrg      *)
11157e6d2e958Smrg	if test clean = "$opt_mode"; then
11158bd1da9d7Smrg	  noexename=$name
11159bd1da9d7Smrg	  case $file in
11160bd1da9d7Smrg	  *.exe)
1116147e89262Smrg	    func_stripname '' '.exe' "$file"
1116247e89262Smrg	    file=$func_stripname_result
1116347e89262Smrg	    func_stripname '' '.exe' "$name"
1116447e89262Smrg	    noexename=$func_stripname_result
11165bd1da9d7Smrg	    # $file with .exe has already been added to rmfiles,
11166bd1da9d7Smrg	    # add $file without .exe
11167899129b3Smrg	    func_append rmfiles " $file"
11168bd1da9d7Smrg	    ;;
11169bd1da9d7Smrg	  esac
11170bd1da9d7Smrg	  # Do a test to see if this is a libtool program.
1117147e89262Smrg	  if func_ltwrapper_p "$file"; then
1117247e89262Smrg	    if func_ltwrapper_executable_p "$file"; then
1117347e89262Smrg	      func_ltwrapper_scriptname "$file"
1117447e89262Smrg	      relink_command=
1117547e89262Smrg	      func_source $func_ltwrapper_scriptname_result
11176899129b3Smrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
1117747e89262Smrg	    else
1117847e89262Smrg	      relink_command=
1117947e89262Smrg	      func_source $dir/$noexename
1118047e89262Smrg	    fi
11181bd1da9d7Smrg
11182bd1da9d7Smrg	    # note $name still contains .exe if it was in $file originally
11183bd1da9d7Smrg	    # as does the version of $file that was added into $rmfiles
11184e6d2e958Smrg	    func_append rmfiles " $odir/$name $odir/${name}S.$objext"
11185e6d2e958Smrg	    if test yes = "$fast_install" && test -n "$relink_command"; then
11186899129b3Smrg	      func_append rmfiles " $odir/lt-$name"
11187bd1da9d7Smrg	    fi
11188e6d2e958Smrg	    if test "X$noexename" != "X$name"; then
11189e6d2e958Smrg	      func_append rmfiles " $odir/lt-$noexename.c"
11190bd1da9d7Smrg	    fi
11191bd1da9d7Smrg	  fi
11192bd1da9d7Smrg	fi
11193bd1da9d7Smrg	;;
11194bd1da9d7Smrg      esac
1119547e89262Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
11196bd1da9d7Smrg    done
11197bd1da9d7Smrg
11198e6d2e958Smrg    # Try to remove the $objdir's in the directories where we deleted files
11199bd1da9d7Smrg    for dir in $rmdirs; do
11200bd1da9d7Smrg      if test -d "$dir"; then
1120147e89262Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
11202bd1da9d7Smrg      fi
11203bd1da9d7Smrg    done
11204bd1da9d7Smrg
11205bd1da9d7Smrg    exit $exit_status
1120647e89262Smrg}
11207bd1da9d7Smrg
11208e6d2e958Smrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
11209e6d2e958Smrg  func_mode_uninstall ${1+"$@"}
11210e6d2e958Smrgfi
11211bd1da9d7Smrg
11212899129b3Smrgtest -z "$opt_mode" && {
11213e6d2e958Smrg  help=$generic_help
1121447e89262Smrg  func_fatal_help "you must specify a MODE"
1121547e89262Smrg}
1121647e89262Smrg
1121747e89262Smrgtest -z "$exec_cmd" && \
11218e6d2e958Smrg  func_fatal_help "invalid operation mode '$opt_mode'"
11219bd1da9d7Smrg
11220bd1da9d7Smrgif test -n "$exec_cmd"; then
1122147e89262Smrg  eval exec "$exec_cmd"
11222bd1da9d7Smrg  exit $EXIT_FAILURE
11223bd1da9d7Smrgfi
11224bd1da9d7Smrg
1122547e89262Smrgexit $exit_status
11226bd1da9d7Smrg
11227bd1da9d7Smrg
11228bd1da9d7Smrg# The TAGs below are defined such that we never get into a situation
11229e6d2e958Smrg# where we disable both kinds of libraries.  Given conflicting
11230bd1da9d7Smrg# choices, we go for a static library, that is the most portable,
11231bd1da9d7Smrg# since we can't tell whether shared libraries were disabled because
11232bd1da9d7Smrg# the user asked for that or because the platform doesn't support
11233bd1da9d7Smrg# them.  This is particularly important on AIX, because we don't
11234bd1da9d7Smrg# support having both static and shared libraries enabled at the same
11235bd1da9d7Smrg# time on that platform, so we default to a shared-only configuration.
11236bd1da9d7Smrg# If a disable-shared tag is given, we'll fallback to a static-only
11237bd1da9d7Smrg# configuration.  But we'll never go from static-only to shared-only.
11238bd1da9d7Smrg
11239bd1da9d7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
1124047e89262Smrgbuild_libtool_libs=no
1124147e89262Smrgbuild_old_libs=yes
11242bd1da9d7Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
11243bd1da9d7Smrg
11244bd1da9d7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
1124547e89262Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
11246bd1da9d7Smrg# ### END LIBTOOL TAG CONFIG: disable-static
11247bd1da9d7Smrg
11248bd1da9d7Smrg# Local Variables:
11249bd1da9d7Smrg# mode:shell-script
11250bd1da9d7Smrg# sh-indentation:2
11251bd1da9d7Smrg# End:
11252