13d05230fSmrg#! /usr/bin/env sh
2fbc03982Smrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
33d05230fSmrg##               by inline-source v2019-02-19.15
4ed6f5d66Smrg
5a3680546Smrg# libtool (GNU libtool) 2.5.4
6fbc03982Smrg# Provide generalized library-building support services.
7ed6f5d66Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
8ed6f5d66Smrg
9a3680546Smrg# Copyright (C) 1996-2019, 2021-2024 Free Software Foundation, Inc.
10ed6f5d66Smrg# This is free software; see the source for copying conditions.  There is NO
11ed6f5d66Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12ed6f5d66Smrg
13ed6f5d66Smrg# GNU Libtool is free software; you can redistribute it and/or modify
14ed6f5d66Smrg# it under the terms of the GNU General Public License as published by
15ed6f5d66Smrg# the Free Software Foundation; either version 2 of the License, or
16ed6f5d66Smrg# (at your option) any later version.
17ed6f5d66Smrg#
18ed6f5d66Smrg# As a special exception to the GNU General Public License,
19ed6f5d66Smrg# if you distribute this file as part of a program or library that
20ed6f5d66Smrg# is built using GNU Libtool, you may include this file under the
21ed6f5d66Smrg# same distribution terms that you use for the rest of that program.
22ed6f5d66Smrg#
23ed6f5d66Smrg# GNU Libtool is distributed in the hope that it will be useful, but
24ed6f5d66Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
25ed6f5d66Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
26ed6f5d66Smrg# General Public License for more details.
27ed6f5d66Smrg#
28ed6f5d66Smrg# You should have received a copy of the GNU General Public License
29fbc03982Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
30ed6f5d66Smrg
31ed6f5d66Smrg
32ed6f5d66SmrgPROGRAM=libtool
33ed6f5d66SmrgPACKAGE=libtool
34a3680546SmrgVERSION=2.5.4
35a3680546Smrgpackage_revision=2.5.4
36ed6f5d66Smrg
37fbc03982Smrg
38fbc03982Smrg## ------ ##
39fbc03982Smrg## Usage. ##
40fbc03982Smrg## ------ ##
41fbc03982Smrg
42fbc03982Smrg# Run './libtool --help' for help with using this script from the
43fbc03982Smrg# command line.
44fbc03982Smrg
45fbc03982Smrg
46fbc03982Smrg## ------------------------------- ##
47fbc03982Smrg## User overridable command paths. ##
48fbc03982Smrg## ------------------------------- ##
49fbc03982Smrg
50fbc03982Smrg# After configure completes, it has a better idea of some of the
51fbc03982Smrg# shell tools we need than the defaults used by the functions shared
52fbc03982Smrg# with bootstrap, so set those here where they can still be over-
53fbc03982Smrg# ridden by the user, but otherwise take precedence.
54fbc03982Smrg
55fbc03982Smrg: ${AUTOCONF="autoconf"}
56fbc03982Smrg: ${AUTOMAKE="automake"}
57fbc03982Smrg
58fbc03982Smrg
59fbc03982Smrg## -------------------------- ##
60fbc03982Smrg## Source external libraries. ##
61fbc03982Smrg## -------------------------- ##
62fbc03982Smrg
63fbc03982Smrg# Much of our low-level functionality needs to be sourced from external
64fbc03982Smrg# libraries, which are installed to $pkgauxdir.
65fbc03982Smrg
66fbc03982Smrg# Set a version string for this script.
673d05230fSmrgscriptversion=2019-02-19.15; # UTC
68fbc03982Smrg
69fbc03982Smrg# General shell script boiler plate, and helper functions.
70fbc03982Smrg# Written by Gary V. Vaughan, 2004
71fbc03982Smrg
723d05230fSmrg# This is free software.  There is NO warranty; not even for
733d05230fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
743d05230fSmrg#
75a3680546Smrg# Copyright (C) 2004-2019, 2021, 2023-2024 Bootstrap Authors
763d05230fSmrg#
773d05230fSmrg# This file is dual licensed under the terms of the MIT license
78a3680546Smrg# <https://opensource.org/licenses/MIT>, and GPL version 2 or later
79a3680546Smrg# <https://www.gnu.org/licenses/gpl-2.0.html>.  You must apply one of
803d05230fSmrg# these licenses when using or redistributing this software or any of
813d05230fSmrg# the files within it.  See the URLs above, or the file `LICENSE`
823d05230fSmrg# included in the Bootstrap distribution for the full license texts.
83fbc03982Smrg
843d05230fSmrg# Please report bugs or propose patches to:
853d05230fSmrg# <https://github.com/gnulib-modules/bootstrap/issues>
86fbc03982Smrg
87fbc03982Smrg
88fbc03982Smrg## ------ ##
89fbc03982Smrg## Usage. ##
90fbc03982Smrg## ------ ##
91fbc03982Smrg
92fbc03982Smrg# Evaluate this file near the top of your script to gain access to
93fbc03982Smrg# the functions and variables defined here:
94fbc03982Smrg#
95fbc03982Smrg#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
96fbc03982Smrg#
97fbc03982Smrg# If you need to override any of the default environment variable
98fbc03982Smrg# settings, do that before evaluating this file.
99fbc03982Smrg
100fbc03982Smrg
101fbc03982Smrg## -------------------- ##
102fbc03982Smrg## Shell normalisation. ##
103fbc03982Smrg## -------------------- ##
104fbc03982Smrg
105fbc03982Smrg# Some shells need a little help to be as Bourne compatible as possible.
106fbc03982Smrg# Before doing anything else, make sure all that help has been provided!
107fbc03982Smrg
108fbc03982SmrgDUALCASE=1; export DUALCASE # for MKS sh
109fbc03982Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
110ed6f5d66Smrg  emulate sh
111ed6f5d66Smrg  NULLCMD=:
112fbc03982Smrg  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
113ed6f5d66Smrg  # is contrary to our usage.  Disable this feature.
114ed6f5d66Smrg  alias -g '${1+"$@"}'='"$@"'
115ed6f5d66Smrg  setopt NO_GLOB_SUBST
116ed6f5d66Smrgelse
117fbc03982Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
118ed6f5d66Smrgfi
119ed6f5d66Smrg
120fbc03982Smrg# NLS nuisances: We save the old values in case they are required later.
121fbc03982Smrg_G_user_locale=
122fbc03982Smrg_G_safe_locale=
123fbc03982Smrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
124ed6f5d66Smrgdo
125fbc03982Smrg  eval "if test set = \"\${$_G_var+set}\"; then
126fbc03982Smrg          save_$_G_var=\$$_G_var
127fbc03982Smrg          $_G_var=C
128fbc03982Smrg	  export $_G_var
129fbc03982Smrg	  _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
130fbc03982Smrg	  _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
131ed6f5d66Smrg	fi"
132ed6f5d66Smrgdone
1333d05230fSmrg# These NLS vars are set unconditionally (bootstrap issue #24).  Unset those
1343d05230fSmrg# in case the environment reset is needed later and the $save_* variant is not
1353d05230fSmrg# defined (see the code above).
1363d05230fSmrgLC_ALL=C
1373d05230fSmrgLANGUAGE=C
1383d05230fSmrgexport LANGUAGE LC_ALL
139ed6f5d66Smrg
140fbc03982Smrg# Make sure IFS has a sensible default
141fbc03982Smrgsp=' '
142fbc03982Smrgnl='
143fbc03982Smrg'
144fbc03982SmrgIFS="$sp	$nl"
145fbc03982Smrg
146a3680546Smrg# There are apparently some systems that use ';' as a PATH separator!
147fbc03982Smrgif test "${PATH_SEPARATOR+set}" != set; then
148fbc03982Smrg  PATH_SEPARATOR=:
149fbc03982Smrg  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
150fbc03982Smrg    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
151fbc03982Smrg      PATH_SEPARATOR=';'
152fbc03982Smrg  }
153fbc03982Smrgfi
154ed6f5d66Smrg
155ed6f5d66Smrg
1563d05230fSmrg# func_unset VAR
1573d05230fSmrg# --------------
1583d05230fSmrg# Portably unset VAR.
1593d05230fSmrg# In some shells, an 'unset VAR' statement leaves a non-zero return
1603d05230fSmrg# status if VAR is already unset, which might be problematic if the
1613d05230fSmrg# statement is used at the end of a function (thus poisoning its return
1623d05230fSmrg# value) or when 'set -e' is active (causing even a spurious abort of
1633d05230fSmrg# the script in this case).
1643d05230fSmrgfunc_unset ()
1653d05230fSmrg{
1663d05230fSmrg    { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; }
1673d05230fSmrg}
1683d05230fSmrg
1693d05230fSmrg
1703d05230fSmrg# Make sure CDPATH doesn't cause `cd` commands to output the target dir.
1713d05230fSmrgfunc_unset CDPATH
1723d05230fSmrg
1733d05230fSmrg# Make sure ${,E,F}GREP behave sanely.
1743d05230fSmrgfunc_unset GREP_OPTIONS
1753d05230fSmrg
176ed6f5d66Smrg
177fbc03982Smrg## ------------------------- ##
178fbc03982Smrg## Locate command utilities. ##
179fbc03982Smrg## ------------------------- ##
180fbc03982Smrg
181fbc03982Smrg
182fbc03982Smrg# func_executable_p FILE
183fbc03982Smrg# ----------------------
184fbc03982Smrg# Check that FILE is an executable regular file.
185fbc03982Smrgfunc_executable_p ()
186fbc03982Smrg{
187fbc03982Smrg    test -f "$1" && test -x "$1"
188fbc03982Smrg}
189fbc03982Smrg
190fbc03982Smrg
191fbc03982Smrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
192fbc03982Smrg# --------------------------------------------
193fbc03982Smrg# Search for either a program that responds to --version with output
194fbc03982Smrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by
195fbc03982Smrg# trying all the directories in PATH with each of the elements of
196fbc03982Smrg# PROGS_LIST.
197fbc03982Smrg#
198fbc03982Smrg# CHECK_FUNC should accept the path to a candidate program, and
199fbc03982Smrg# set $func_check_prog_result if it truncates its output less than
200fbc03982Smrg# $_G_path_prog_max characters.
201fbc03982Smrgfunc_path_progs ()
202fbc03982Smrg{
203fbc03982Smrg    _G_progs_list=$1
204fbc03982Smrg    _G_check_func=$2
205fbc03982Smrg    _G_PATH=${3-"$PATH"}
206fbc03982Smrg
207fbc03982Smrg    _G_path_prog_max=0
208fbc03982Smrg    _G_path_prog_found=false
209fbc03982Smrg    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
210fbc03982Smrg    for _G_dir in $_G_PATH; do
211fbc03982Smrg      IFS=$_G_save_IFS
212fbc03982Smrg      test -z "$_G_dir" && _G_dir=.
213fbc03982Smrg      for _G_prog_name in $_G_progs_list; do
214fbc03982Smrg        for _exeext in '' .EXE; do
215fbc03982Smrg          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
216fbc03982Smrg          func_executable_p "$_G_path_prog" || continue
217fbc03982Smrg          case `"$_G_path_prog" --version 2>&1` in
218fbc03982Smrg            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
219fbc03982Smrg            *)     $_G_check_func $_G_path_prog
220fbc03982Smrg		   func_path_progs_result=$func_check_prog_result
221fbc03982Smrg		   ;;
222fbc03982Smrg          esac
223fbc03982Smrg          $_G_path_prog_found && break 3
224fbc03982Smrg        done
225fbc03982Smrg      done
226fbc03982Smrg    done
227fbc03982Smrg    IFS=$_G_save_IFS
228fbc03982Smrg    test -z "$func_path_progs_result" && {
229fbc03982Smrg      echo "no acceptable sed could be found in \$PATH" >&2
230fbc03982Smrg      exit 1
231fbc03982Smrg    }
232fbc03982Smrg}
233fbc03982Smrg
234fbc03982Smrg
235fbc03982Smrg# We want to be able to use the functions in this file before configure
236fbc03982Smrg# has figured out where the best binaries are kept, which means we have
237fbc03982Smrg# to search for them ourselves - except when the results are already set
238fbc03982Smrg# where we skip the searches.
239fbc03982Smrg
240fbc03982Smrg# Unless the user overrides by setting SED, search the path for either GNU
241fbc03982Smrg# sed, or the sed that truncates its output the least.
242fbc03982Smrgtest -z "$SED" && {
243fbc03982Smrg  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
244fbc03982Smrg  for _G_i in 1 2 3 4 5 6 7; do
245fbc03982Smrg    _G_sed_script=$_G_sed_script$nl$_G_sed_script
246fbc03982Smrg  done
247fbc03982Smrg  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
248fbc03982Smrg  _G_sed_script=
249fbc03982Smrg
250fbc03982Smrg  func_check_prog_sed ()
251fbc03982Smrg  {
252fbc03982Smrg    _G_path_prog=$1
253fbc03982Smrg
254fbc03982Smrg    _G_count=0
255fbc03982Smrg    printf 0123456789 >conftest.in
256fbc03982Smrg    while :
257fbc03982Smrg    do
258fbc03982Smrg      cat conftest.in conftest.in >conftest.tmp
259fbc03982Smrg      mv conftest.tmp conftest.in
260fbc03982Smrg      cp conftest.in conftest.nl
261fbc03982Smrg      echo '' >> conftest.nl
262fbc03982Smrg      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
263fbc03982Smrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
264fbc03982Smrg      _G_count=`expr $_G_count + 1`
265fbc03982Smrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
266fbc03982Smrg        # Best one so far, save it but keep looking for a better one
267fbc03982Smrg        func_check_prog_result=$_G_path_prog
268fbc03982Smrg        _G_path_prog_max=$_G_count
269fbc03982Smrg      fi
270fbc03982Smrg      # 10*(2^10) chars as input seems more than enough
271fbc03982Smrg      test 10 -lt "$_G_count" && break
272fbc03982Smrg    done
273fbc03982Smrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
274fbc03982Smrg  }
275fbc03982Smrg
2763d05230fSmrg  func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin"
277fbc03982Smrg  rm -f conftest.sed
278fbc03982Smrg  SED=$func_path_progs_result
279fbc03982Smrg}
280fbc03982Smrg
281fbc03982Smrg
282fbc03982Smrg# Unless the user overrides by setting GREP, search the path for either GNU
283fbc03982Smrg# grep, or the grep that truncates its output the least.
284fbc03982Smrgtest -z "$GREP" && {
285fbc03982Smrg  func_check_prog_grep ()
286fbc03982Smrg  {
287fbc03982Smrg    _G_path_prog=$1
288fbc03982Smrg
289fbc03982Smrg    _G_count=0
290fbc03982Smrg    _G_path_prog_max=0
291fbc03982Smrg    printf 0123456789 >conftest.in
292fbc03982Smrg    while :
293fbc03982Smrg    do
294fbc03982Smrg      cat conftest.in conftest.in >conftest.tmp
295fbc03982Smrg      mv conftest.tmp conftest.in
296fbc03982Smrg      cp conftest.in conftest.nl
297fbc03982Smrg      echo 'GREP' >> conftest.nl
298fbc03982Smrg      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
299fbc03982Smrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
300fbc03982Smrg      _G_count=`expr $_G_count + 1`
301fbc03982Smrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
302fbc03982Smrg        # Best one so far, save it but keep looking for a better one
303fbc03982Smrg        func_check_prog_result=$_G_path_prog
304fbc03982Smrg        _G_path_prog_max=$_G_count
305fbc03982Smrg      fi
306fbc03982Smrg      # 10*(2^10) chars as input seems more than enough
307fbc03982Smrg      test 10 -lt "$_G_count" && break
308fbc03982Smrg    done
309fbc03982Smrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
310fbc03982Smrg  }
311fbc03982Smrg
3123d05230fSmrg  func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin"
313fbc03982Smrg  GREP=$func_path_progs_result
314fbc03982Smrg}
315fbc03982Smrg
316fbc03982Smrg
317fbc03982Smrg## ------------------------------- ##
318fbc03982Smrg## User overridable command paths. ##
319fbc03982Smrg## ------------------------------- ##
320fbc03982Smrg
321fbc03982Smrg# All uppercase variable names are used for environment variables.  These
322fbc03982Smrg# variables can be overridden by the user before calling a script that
323fbc03982Smrg# uses them if a suitable command of that name is not already available
324fbc03982Smrg# in the command search PATH.
325ed6f5d66Smrg
326ed6f5d66Smrg: ${CP="cp -f"}
327fbc03982Smrg: ${ECHO="printf %s\n"}
328fbc03982Smrg: ${EGREP="$GREP -E"}
329fbc03982Smrg: ${FGREP="$GREP -F"}
330fbc03982Smrg: ${LN_S="ln -s"}
331ed6f5d66Smrg: ${MAKE="make"}
332ed6f5d66Smrg: ${MKDIR="mkdir"}
333ed6f5d66Smrg: ${MV="mv -f"}
334ed6f5d66Smrg: ${RM="rm -f"}
335ed6f5d66Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
336ed6f5d66Smrg
337ed6f5d66Smrg
338fbc03982Smrg## -------------------- ##
339fbc03982Smrg## Useful sed snippets. ##
340fbc03982Smrg## -------------------- ##
341ed6f5d66Smrg
342fbc03982Smrgsed_dirname='s|/[^/]*$||'
343fbc03982Smrgsed_basename='s|^.*/||'
344ed6f5d66Smrg
345fbc03982Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
346fbc03982Smrg# metacharacters that are still active within double-quoted strings.
347fbc03982Smrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g'
348ed6f5d66Smrg
349fbc03982Smrg# Same as above, but do not quote variable references.
350fbc03982Smrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
351ed6f5d66Smrg
352fbc03982Smrg# Sed substitution that turns a string into a regex matching for the
353fbc03982Smrg# string literally.
354fbc03982Smrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
355ed6f5d66Smrg
356fbc03982Smrg# Sed substitution that converts a w32 file name or path
357fbc03982Smrg# that contains forward slashes, into one that contains
358fbc03982Smrg# (escaped) backslashes.  A very naive implementation.
359fbc03982Smrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
360fbc03982Smrg
361fbc03982Smrg# Re-'\' parameter expansions in output of sed_double_quote_subst that
362fbc03982Smrg# were '\'-ed in input to the same.  If an odd number of '\' preceded a
363fbc03982Smrg# '$' in input to sed_double_quote_subst, that '$' was protected from
364fbc03982Smrg# expansion.  Since each input '\' is now two '\'s, look for any number
365fbc03982Smrg# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
366fbc03982Smrg_G_bs='\\'
367fbc03982Smrg_G_bs2='\\\\'
368fbc03982Smrg_G_bs4='\\\\\\\\'
369fbc03982Smrg_G_dollar='\$'
370fbc03982Smrgsed_double_backslash="\
371fbc03982Smrg  s/$_G_bs4/&\\
372fbc03982Smrg/g
373fbc03982Smrg  s/^$_G_bs2$_G_dollar/$_G_bs&/
374fbc03982Smrg  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
375fbc03982Smrg  s/\n//g"
376ed6f5d66Smrg
3773d05230fSmrg# require_check_ifs_backslash
3783d05230fSmrg# ---------------------------
3793d05230fSmrg# Check if we can use backslash as IFS='\' separator, and set
3803d05230fSmrg# $check_ifs_backshlash_broken to ':' or 'false'.
3813d05230fSmrgrequire_check_ifs_backslash=func_require_check_ifs_backslash
3823d05230fSmrgfunc_require_check_ifs_backslash ()
3833d05230fSmrg{
3843d05230fSmrg  _G_save_IFS=$IFS
3853d05230fSmrg  IFS='\'
3863d05230fSmrg  _G_check_ifs_backshlash='a\\b'
3873d05230fSmrg  for _G_i in $_G_check_ifs_backshlash
3883d05230fSmrg  do
3893d05230fSmrg  case $_G_i in
3903d05230fSmrg  a)
3913d05230fSmrg    check_ifs_backshlash_broken=false
3923d05230fSmrg    ;;
3933d05230fSmrg  '')
3943d05230fSmrg    break
3953d05230fSmrg    ;;
3963d05230fSmrg  *)
3973d05230fSmrg    check_ifs_backshlash_broken=:
3983d05230fSmrg    break
3993d05230fSmrg    ;;
4003d05230fSmrg  esac
4013d05230fSmrg  done
4023d05230fSmrg  IFS=$_G_save_IFS
4033d05230fSmrg  require_check_ifs_backslash=:
4043d05230fSmrg}
4053d05230fSmrg
406ed6f5d66Smrg
407fbc03982Smrg## ----------------- ##
408fbc03982Smrg## Global variables. ##
409fbc03982Smrg## ----------------- ##
410ed6f5d66Smrg
411fbc03982Smrg# Except for the global variables explicitly listed below, the following
412fbc03982Smrg# functions in the '^func_' namespace, and the '^require_' namespace
413fbc03982Smrg# variables initialised in the 'Resource management' section, sourcing
414fbc03982Smrg# this file will not pollute your global namespace with anything
415fbc03982Smrg# else. There's no portable way to scope variables in Bourne shell
416fbc03982Smrg# though, so actually running these functions will sometimes place
417fbc03982Smrg# results into a variable named after the function, and often use
418fbc03982Smrg# temporary variables in the '^_G_' namespace. If you are careful to
419fbc03982Smrg# avoid using those namespaces casually in your sourcing script, things
420fbc03982Smrg# should continue to work as you expect. And, of course, you can freely
421fbc03982Smrg# overwrite any of the functions or variables defined here before
422fbc03982Smrg# calling anything to customize them.
423ed6f5d66Smrg
424fbc03982SmrgEXIT_SUCCESS=0
425fbc03982SmrgEXIT_FAILURE=1
426fbc03982SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
427fbc03982SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
428ed6f5d66Smrg
429fbc03982Smrg# Allow overriding, eg assuming that you follow the convention of
430fbc03982Smrg# putting '$debug_cmd' at the start of all your functions, you can get
431fbc03982Smrg# bash to show function call trace with:
432fbc03982Smrg#
433fbc03982Smrg#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
434fbc03982Smrgdebug_cmd=${debug_cmd-":"}
435fbc03982Smrgexit_cmd=:
436ed6f5d66Smrg
437fbc03982Smrg# By convention, finish your script with:
438fbc03982Smrg#
439fbc03982Smrg#    exit $exit_status
440fbc03982Smrg#
441fbc03982Smrg# so that you can set exit_status to non-zero if you want to indicate
442fbc03982Smrg# something went wrong during execution without actually bailing out at
443fbc03982Smrg# the point of failure.
444fbc03982Smrgexit_status=$EXIT_SUCCESS
445ed6f5d66Smrg
446fbc03982Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
447fbc03982Smrg# is ksh but when the shell is invoked as "sh" and the current value of
448fbc03982Smrg# the _XPG environment variable is not equal to 1 (one), the special
449fbc03982Smrg# positional parameter $0, within a function call, is the name of the
450fbc03982Smrg# function.
451fbc03982Smrgprogpath=$0
452ed6f5d66Smrg
453fbc03982Smrg# The name of this program.
454fbc03982Smrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"`
455ed6f5d66Smrg
456fbc03982Smrg# Make sure we have an absolute progpath for reexecution:
457ed6f5d66Smrgcase $progpath in
458ed6f5d66Smrg  [\\/]*|[A-Za-z]:\\*) ;;
459ed6f5d66Smrg  *[\\/]*)
460fbc03982Smrg     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
461ed6f5d66Smrg     progdir=`cd "$progdir" && pwd`
462fbc03982Smrg     progpath=$progdir/$progname
463ed6f5d66Smrg     ;;
464ed6f5d66Smrg  *)
465fbc03982Smrg     _G_IFS=$IFS
466ed6f5d66Smrg     IFS=${PATH_SEPARATOR-:}
467ed6f5d66Smrg     for progdir in $PATH; do
468fbc03982Smrg       IFS=$_G_IFS
469ed6f5d66Smrg       test -x "$progdir/$progname" && break
470ed6f5d66Smrg     done
471fbc03982Smrg     IFS=$_G_IFS
472ed6f5d66Smrg     test -n "$progdir" || progdir=`pwd`
473fbc03982Smrg     progpath=$progdir/$progname
474ed6f5d66Smrg     ;;
475ed6f5d66Smrgesac
476ed6f5d66Smrg
477ed6f5d66Smrg
478fbc03982Smrg## ----------------- ##
479fbc03982Smrg## Standard options. ##
480fbc03982Smrg## ----------------- ##
481ed6f5d66Smrg
482fbc03982Smrg# The following options affect the operation of the functions defined
483fbc03982Smrg# below, and should be set appropriately depending on run-time para-
484fbc03982Smrg# meters passed on the command line.
485ed6f5d66Smrg
486ed6f5d66Smrgopt_dry_run=false
487ed6f5d66Smrgopt_quiet=false
488ed6f5d66Smrgopt_verbose=false
489ed6f5d66Smrg
490fbc03982Smrg# Categories 'all' and 'none' are always available.  Append any others
491fbc03982Smrg# you will pass as the first argument to func_warning from your own
492fbc03982Smrg# code.
493fbc03982Smrgwarning_categories=
494ed6f5d66Smrg
495fbc03982Smrg# By default, display warnings according to 'opt_warning_types'.  Set
496fbc03982Smrg# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
497fbc03982Smrg# treat the next displayed warning as a fatal error.
498fbc03982Smrgwarning_func=func_warn_and_continue
499ed6f5d66Smrg
500fbc03982Smrg# Set to 'all' to display all warnings, 'none' to suppress all
501fbc03982Smrg# warnings, or a space delimited list of some subset of
502fbc03982Smrg# 'warning_categories' to display only the listed warnings.
503fbc03982Smrgopt_warning_types=all
504ed6f5d66Smrg
505ed6f5d66Smrg
506fbc03982Smrg## -------------------- ##
507fbc03982Smrg## Resource management. ##
508fbc03982Smrg## -------------------- ##
509ed6f5d66Smrg
510fbc03982Smrg# This section contains definitions for functions that each ensure a
511fbc03982Smrg# particular resource (a file, or a non-empty configuration variable for
512fbc03982Smrg# example) is available, and if appropriate to extract default values
513fbc03982Smrg# from pertinent package files. Call them using their associated
514fbc03982Smrg# 'require_*' variable to ensure that they are executed, at most, once.
515fbc03982Smrg#
516fbc03982Smrg# It's entirely deliberate that calling these functions can set
517fbc03982Smrg# variables that don't obey the namespace limitations obeyed by the rest
518fbc03982Smrg# of this file, in order that that they be as useful as possible to
519fbc03982Smrg# callers.
520ed6f5d66Smrg
521ed6f5d66Smrg
522fbc03982Smrg# require_term_colors
523fbc03982Smrg# -------------------
524fbc03982Smrg# Allow display of bold text on terminals that support it.
525fbc03982Smrgrequire_term_colors=func_require_term_colors
526fbc03982Smrgfunc_require_term_colors ()
527ed6f5d66Smrg{
528fbc03982Smrg    $debug_cmd
529fbc03982Smrg
530fbc03982Smrg    test -t 1 && {
531fbc03982Smrg      # COLORTERM and USE_ANSI_COLORS environment variables take
532fbc03982Smrg      # precedence, because most terminfo databases neglect to describe
533fbc03982Smrg      # whether color sequences are supported.
534fbc03982Smrg      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
535fbc03982Smrg
536fbc03982Smrg      if test 1 = "$USE_ANSI_COLORS"; then
537fbc03982Smrg        # Standard ANSI escape sequences
538fbc03982Smrg        tc_reset='[0m'
539fbc03982Smrg        tc_bold='[1m';   tc_standout='[7m'
540fbc03982Smrg        tc_red='[31m';   tc_green='[32m'
541fbc03982Smrg        tc_blue='[34m';  tc_cyan='[36m'
542fbc03982Smrg      else
543fbc03982Smrg        # Otherwise trust the terminfo database after all.
544fbc03982Smrg        test -n "`tput sgr0 2>/dev/null`" && {
545fbc03982Smrg          tc_reset=`tput sgr0`
546fbc03982Smrg          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
547fbc03982Smrg          tc_standout=$tc_bold
548fbc03982Smrg          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
549fbc03982Smrg          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
550fbc03982Smrg          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
551fbc03982Smrg          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
552fbc03982Smrg          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
553fbc03982Smrg        }
554fbc03982Smrg      fi
555fbc03982Smrg    }
556ed6f5d66Smrg
557fbc03982Smrg    require_term_colors=:
558ed6f5d66Smrg}
559ed6f5d66Smrg
560ed6f5d66Smrg
561fbc03982Smrg## ----------------- ##
562fbc03982Smrg## Function library. ##
563fbc03982Smrg## ----------------- ##
564fbc03982Smrg
565fbc03982Smrg# This section contains a variety of useful functions to call in your
566fbc03982Smrg# scripts. Take note of the portable wrappers for features provided by
567fbc03982Smrg# some modern shells, which will fall back to slower equivalents on
568fbc03982Smrg# less featureful shells.
569fbc03982Smrg
570fbc03982Smrg
571fbc03982Smrg# func_append VAR VALUE
572fbc03982Smrg# ---------------------
573fbc03982Smrg# Append VALUE onto the existing contents of VAR.
574fbc03982Smrg
575fbc03982Smrg  # We should try to minimise forks, especially on Windows where they are
576fbc03982Smrg  # unreasonably slow, so skip the feature probes when bash or zsh are
577fbc03982Smrg  # being used:
578fbc03982Smrg  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
579fbc03982Smrg    : ${_G_HAVE_ARITH_OP="yes"}
580fbc03982Smrg    : ${_G_HAVE_XSI_OPS="yes"}
581fbc03982Smrg    # The += operator was introduced in bash 3.1
582fbc03982Smrg    case $BASH_VERSION in
583fbc03982Smrg      [12].* | 3.0 | 3.0*) ;;
584fbc03982Smrg      *)
585fbc03982Smrg        : ${_G_HAVE_PLUSEQ_OP="yes"}
586fbc03982Smrg        ;;
587fbc03982Smrg    esac
588fbc03982Smrg  fi
589fbc03982Smrg
590fbc03982Smrg  # _G_HAVE_PLUSEQ_OP
591fbc03982Smrg  # Can be empty, in which case the shell is probed, "yes" if += is
592a3680546Smrg  # usable or anything else if it does not work.
593fbc03982Smrg  test -z "$_G_HAVE_PLUSEQ_OP" \
594fbc03982Smrg    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
595fbc03982Smrg    && _G_HAVE_PLUSEQ_OP=yes
596fbc03982Smrg
597fbc03982Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"
598fbc03982Smrgthen
599fbc03982Smrg  # This is an XSI compatible shell, allowing a faster implementation...
600fbc03982Smrg  eval 'func_append ()
601fbc03982Smrg  {
602fbc03982Smrg    $debug_cmd
603fbc03982Smrg
604fbc03982Smrg    eval "$1+=\$2"
605fbc03982Smrg  }'
606fbc03982Smrgelse
607fbc03982Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
608fbc03982Smrg  func_append ()
609fbc03982Smrg  {
610fbc03982Smrg    $debug_cmd
611fbc03982Smrg
612fbc03982Smrg    eval "$1=\$$1\$2"
613fbc03982Smrg  }
614fbc03982Smrgfi
615fbc03982Smrg
616fbc03982Smrg
617fbc03982Smrg# func_append_quoted VAR VALUE
618fbc03982Smrg# ----------------------------
619fbc03982Smrg# Quote VALUE and append to the end of shell variable VAR, separated
620fbc03982Smrg# by a space.
621fbc03982Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then
622fbc03982Smrg  eval 'func_append_quoted ()
623fbc03982Smrg  {
624fbc03982Smrg    $debug_cmd
625fbc03982Smrg
6263d05230fSmrg    func_quote_arg pretty "$2"
6273d05230fSmrg    eval "$1+=\\ \$func_quote_arg_result"
628fbc03982Smrg  }'
629fbc03982Smrgelse
630fbc03982Smrg  func_append_quoted ()
631fbc03982Smrg  {
632fbc03982Smrg    $debug_cmd
633fbc03982Smrg
6343d05230fSmrg    func_quote_arg pretty "$2"
6353d05230fSmrg    eval "$1=\$$1\\ \$func_quote_arg_result"
636fbc03982Smrg  }
637fbc03982Smrgfi
638fbc03982Smrg
639fbc03982Smrg
640fbc03982Smrg# func_append_uniq VAR VALUE
641fbc03982Smrg# --------------------------
642fbc03982Smrg# Append unique VALUE onto the existing contents of VAR, assuming
643fbc03982Smrg# entries are delimited by the first character of VALUE.  For example:
644fbc03982Smrg#
645fbc03982Smrg#   func_append_uniq options " --another-option option-argument"
646fbc03982Smrg#
647fbc03982Smrg# will only append to $options if " --another-option option-argument "
648fbc03982Smrg# is not already present somewhere in $options already (note spaces at
649fbc03982Smrg# each end implied by leading space in second argument).
650fbc03982Smrgfunc_append_uniq ()
651fbc03982Smrg{
652fbc03982Smrg    $debug_cmd
653fbc03982Smrg
654fbc03982Smrg    eval _G_current_value='`$ECHO $'$1'`'
655fbc03982Smrg    _G_delim=`expr "$2" : '\(.\)'`
656fbc03982Smrg
657fbc03982Smrg    case $_G_delim$_G_current_value$_G_delim in
658fbc03982Smrg      *"$2$_G_delim"*) ;;
659fbc03982Smrg      *) func_append "$@" ;;
660fbc03982Smrg    esac
661fbc03982Smrg}
662fbc03982Smrg
663fbc03982Smrg
664fbc03982Smrg# func_arith TERM...
665fbc03982Smrg# ------------------
666fbc03982Smrg# Set func_arith_result to the result of evaluating TERMs.
667fbc03982Smrg  test -z "$_G_HAVE_ARITH_OP" \
668fbc03982Smrg    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
669fbc03982Smrg    && _G_HAVE_ARITH_OP=yes
670fbc03982Smrg
671fbc03982Smrgif test yes = "$_G_HAVE_ARITH_OP"; then
672fbc03982Smrg  eval 'func_arith ()
673fbc03982Smrg  {
674fbc03982Smrg    $debug_cmd
675fbc03982Smrg
676fbc03982Smrg    func_arith_result=$(( $* ))
677fbc03982Smrg  }'
678fbc03982Smrgelse
679fbc03982Smrg  func_arith ()
680fbc03982Smrg  {
681fbc03982Smrg    $debug_cmd
682fbc03982Smrg
683fbc03982Smrg    func_arith_result=`expr "$@"`
684fbc03982Smrg  }
685fbc03982Smrgfi
686fbc03982Smrg
687fbc03982Smrg
688fbc03982Smrg# func_basename FILE
689fbc03982Smrg# ------------------
690fbc03982Smrg# Set func_basename_result to FILE with everything up to and including
691fbc03982Smrg# the last / stripped.
692fbc03982Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
693fbc03982Smrg  # If this shell supports suffix pattern removal, then use it to avoid
694fbc03982Smrg  # forking. Hide the definitions single quotes in case the shell chokes
695fbc03982Smrg  # on unsupported syntax...
696fbc03982Smrg  _b='func_basename_result=${1##*/}'
697fbc03982Smrg  _d='case $1 in
698fbc03982Smrg        */*) func_dirname_result=${1%/*}$2 ;;
699fbc03982Smrg        *  ) func_dirname_result=$3        ;;
700fbc03982Smrg      esac'
701fbc03982Smrg
702fbc03982Smrgelse
703fbc03982Smrg  # ...otherwise fall back to using sed.
704fbc03982Smrg  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
705fbc03982Smrg  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
706fbc03982Smrg      if test "X$func_dirname_result" = "X$1"; then
707fbc03982Smrg        func_dirname_result=$3
708fbc03982Smrg      else
709fbc03982Smrg        func_append func_dirname_result "$2"
710fbc03982Smrg      fi'
711fbc03982Smrgfi
712fbc03982Smrg
713fbc03982Smrgeval 'func_basename ()
714fbc03982Smrg{
715fbc03982Smrg    $debug_cmd
716fbc03982Smrg
717fbc03982Smrg    '"$_b"'
718fbc03982Smrg}'
719fbc03982Smrg
720fbc03982Smrg
721fbc03982Smrg# func_dirname FILE APPEND NONDIR_REPLACEMENT
722fbc03982Smrg# -------------------------------------------
723fbc03982Smrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
724fbc03982Smrg# otherwise set result to NONDIR_REPLACEMENT.
725fbc03982Smrgeval 'func_dirname ()
726fbc03982Smrg{
727fbc03982Smrg    $debug_cmd
728fbc03982Smrg
729fbc03982Smrg    '"$_d"'
730fbc03982Smrg}'
731fbc03982Smrg
732fbc03982Smrg
733fbc03982Smrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
734fbc03982Smrg# --------------------------------------------------------
735fbc03982Smrg# Perform func_basename and func_dirname in a single function
736fbc03982Smrg# call:
737fbc03982Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
738fbc03982Smrg#             add APPEND to the result, otherwise set result
739fbc03982Smrg#             to NONDIR_REPLACEMENT.
740fbc03982Smrg#             value returned in "$func_dirname_result"
741fbc03982Smrg#   basename: Compute filename of FILE.
742a3680546Smrg#             value returned in "$func_basename_result"
743fbc03982Smrg# For efficiency, we do not delegate to the functions above but instead
744fbc03982Smrg# duplicate the functionality here.
745fbc03982Smrgeval 'func_dirname_and_basename ()
746fbc03982Smrg{
747fbc03982Smrg    $debug_cmd
748fbc03982Smrg
749fbc03982Smrg    '"$_b"'
750fbc03982Smrg    '"$_d"'
751fbc03982Smrg}'
752fbc03982Smrg
753fbc03982Smrg
754fbc03982Smrg# func_echo ARG...
755fbc03982Smrg# ----------------
756fbc03982Smrg# Echo program name prefixed message.
757fbc03982Smrgfunc_echo ()
758fbc03982Smrg{
759fbc03982Smrg    $debug_cmd
760fbc03982Smrg
761fbc03982Smrg    _G_message=$*
762fbc03982Smrg
763fbc03982Smrg    func_echo_IFS=$IFS
764fbc03982Smrg    IFS=$nl
765fbc03982Smrg    for _G_line in $_G_message; do
766fbc03982Smrg      IFS=$func_echo_IFS
767fbc03982Smrg      $ECHO "$progname: $_G_line"
768fbc03982Smrg    done
769fbc03982Smrg    IFS=$func_echo_IFS
770fbc03982Smrg}
771fbc03982Smrg
772fbc03982Smrg
773fbc03982Smrg# func_echo_all ARG...
774fbc03982Smrg# --------------------
775fbc03982Smrg# Invoke $ECHO with all args, space-separated.
776fbc03982Smrgfunc_echo_all ()
777fbc03982Smrg{
778fbc03982Smrg    $ECHO "$*"
779fbc03982Smrg}
780fbc03982Smrg
781fbc03982Smrg
782fbc03982Smrg# func_echo_infix_1 INFIX ARG...
783fbc03982Smrg# ------------------------------
784fbc03982Smrg# Echo program name, followed by INFIX on the first line, with any
785fbc03982Smrg# additional lines not showing INFIX.
786fbc03982Smrgfunc_echo_infix_1 ()
787fbc03982Smrg{
788fbc03982Smrg    $debug_cmd
789fbc03982Smrg
790fbc03982Smrg    $require_term_colors
791fbc03982Smrg
792fbc03982Smrg    _G_infix=$1; shift
793fbc03982Smrg    _G_indent=$_G_infix
794fbc03982Smrg    _G_prefix="$progname: $_G_infix: "
795fbc03982Smrg    _G_message=$*
796fbc03982Smrg
797fbc03982Smrg    # Strip color escape sequences before counting printable length
798fbc03982Smrg    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
799fbc03982Smrg    do
800fbc03982Smrg      test -n "$_G_tc" && {
801fbc03982Smrg        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
802fbc03982Smrg        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
803fbc03982Smrg      }
804fbc03982Smrg    done
805fbc03982Smrg    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
806fbc03982Smrg
807fbc03982Smrg    func_echo_infix_1_IFS=$IFS
808fbc03982Smrg    IFS=$nl
809fbc03982Smrg    for _G_line in $_G_message; do
810fbc03982Smrg      IFS=$func_echo_infix_1_IFS
811fbc03982Smrg      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
812fbc03982Smrg      _G_prefix=$_G_indent
813fbc03982Smrg    done
814fbc03982Smrg    IFS=$func_echo_infix_1_IFS
815fbc03982Smrg}
816fbc03982Smrg
817fbc03982Smrg
818fbc03982Smrg# func_error ARG...
819fbc03982Smrg# -----------------
820fbc03982Smrg# Echo program name prefixed message to standard error.
821fbc03982Smrgfunc_error ()
822fbc03982Smrg{
823fbc03982Smrg    $debug_cmd
824fbc03982Smrg
825fbc03982Smrg    $require_term_colors
826fbc03982Smrg
827fbc03982Smrg    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
828fbc03982Smrg}
829fbc03982Smrg
830fbc03982Smrg
831fbc03982Smrg# func_fatal_error ARG...
832fbc03982Smrg# -----------------------
833fbc03982Smrg# Echo program name prefixed message to standard error, and exit.
834fbc03982Smrgfunc_fatal_error ()
835fbc03982Smrg{
836fbc03982Smrg    $debug_cmd
837fbc03982Smrg
838fbc03982Smrg    func_error "$*"
839fbc03982Smrg    exit $EXIT_FAILURE
840fbc03982Smrg}
841fbc03982Smrg
842fbc03982Smrg
843fbc03982Smrg# func_grep EXPRESSION FILENAME
844fbc03982Smrg# -----------------------------
845ed6f5d66Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
846ed6f5d66Smrgfunc_grep ()
847ed6f5d66Smrg{
848fbc03982Smrg    $debug_cmd
849fbc03982Smrg
850ed6f5d66Smrg    $GREP "$1" "$2" >/dev/null 2>&1
851ed6f5d66Smrg}
852ed6f5d66Smrg
853ed6f5d66Smrg
854fbc03982Smrg# func_len STRING
855fbc03982Smrg# ---------------
856fbc03982Smrg# Set func_len_result to the length of STRING. STRING may not
857fbc03982Smrg# start with a hyphen.
858fbc03982Smrg  test -z "$_G_HAVE_XSI_OPS" \
859fbc03982Smrg    && (eval 'x=a/b/c;
860fbc03982Smrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
861fbc03982Smrg    && _G_HAVE_XSI_OPS=yes
862fbc03982Smrg
863fbc03982Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
864fbc03982Smrg  eval 'func_len ()
865fbc03982Smrg  {
866fbc03982Smrg    $debug_cmd
867fbc03982Smrg
868fbc03982Smrg    func_len_result=${#1}
869fbc03982Smrg  }'
870fbc03982Smrgelse
871fbc03982Smrg  func_len ()
872fbc03982Smrg  {
873fbc03982Smrg    $debug_cmd
874fbc03982Smrg
875fbc03982Smrg    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
876fbc03982Smrg  }
877fbc03982Smrgfi
878fbc03982Smrg
879fbc03982Smrg
880fbc03982Smrg# func_mkdir_p DIRECTORY-PATH
881fbc03982Smrg# ---------------------------
882ed6f5d66Smrg# Make sure the entire path to DIRECTORY-PATH is available.
883ed6f5d66Smrgfunc_mkdir_p ()
884ed6f5d66Smrg{
885fbc03982Smrg    $debug_cmd
886ed6f5d66Smrg
887fbc03982Smrg    _G_directory_path=$1
888fbc03982Smrg    _G_dir_list=
889ed6f5d66Smrg
890fbc03982Smrg    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
891fbc03982Smrg
892fbc03982Smrg      # Protect directory names starting with '-'
893fbc03982Smrg      case $_G_directory_path in
894fbc03982Smrg        -*) _G_directory_path=./$_G_directory_path ;;
895ed6f5d66Smrg      esac
896ed6f5d66Smrg
897ed6f5d66Smrg      # While some portion of DIR does not yet exist...
898fbc03982Smrg      while test ! -d "$_G_directory_path"; do
899ed6f5d66Smrg        # ...make a list in topmost first order.  Use a colon delimited
900a3680546Smrg	# list in case some portion of path contains whitespace.
901fbc03982Smrg        _G_dir_list=$_G_directory_path:$_G_dir_list
902ed6f5d66Smrg
903ed6f5d66Smrg        # If the last portion added has no slash in it, the list is done
904fbc03982Smrg        case $_G_directory_path in */*) ;; *) break ;; esac
905ed6f5d66Smrg
906ed6f5d66Smrg        # ...otherwise throw away the child directory and loop
907fbc03982Smrg        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
908ed6f5d66Smrg      done
909fbc03982Smrg      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
910ed6f5d66Smrg
911fbc03982Smrg      func_mkdir_p_IFS=$IFS; IFS=:
912fbc03982Smrg      for _G_dir in $_G_dir_list; do
913fbc03982Smrg	IFS=$func_mkdir_p_IFS
914fbc03982Smrg        # mkdir can fail with a 'File exist' error if two processes
915ed6f5d66Smrg        # try to create one of the directories concurrently.  Don't
916ed6f5d66Smrg        # stop in that case!
917fbc03982Smrg        $MKDIR "$_G_dir" 2>/dev/null || :
918ed6f5d66Smrg      done
919fbc03982Smrg      IFS=$func_mkdir_p_IFS
920ed6f5d66Smrg
921ed6f5d66Smrg      # Bail out if we (or some other process) failed to create a directory.
922fbc03982Smrg      test -d "$_G_directory_path" || \
923fbc03982Smrg        func_fatal_error "Failed to create '$1'"
924ed6f5d66Smrg    fi
925ed6f5d66Smrg}
926ed6f5d66Smrg
927ed6f5d66Smrg
928fbc03982Smrg# func_mktempdir [BASENAME]
929fbc03982Smrg# -------------------------
930ed6f5d66Smrg# Make a temporary directory that won't clash with other running
931ed6f5d66Smrg# libtool processes, and avoids race conditions if possible.  If
932fbc03982Smrg# given, BASENAME is the basename for that directory.
933ed6f5d66Smrgfunc_mktempdir ()
934ed6f5d66Smrg{
935fbc03982Smrg    $debug_cmd
936fbc03982Smrg
937fbc03982Smrg    _G_template=${TMPDIR-/tmp}/${1-$progname}
938ed6f5d66Smrg
939fbc03982Smrg    if test : = "$opt_dry_run"; then
940ed6f5d66Smrg      # Return a directory name, but don't create it in dry-run mode
941fbc03982Smrg      _G_tmpdir=$_G_template-$$
942ed6f5d66Smrg    else
943ed6f5d66Smrg
944ed6f5d66Smrg      # If mktemp works, use that first and foremost
945fbc03982Smrg      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
946ed6f5d66Smrg
947fbc03982Smrg      if test ! -d "$_G_tmpdir"; then
948ed6f5d66Smrg        # Failing that, at least try and use $RANDOM to avoid a race
949fbc03982Smrg        _G_tmpdir=$_G_template-${RANDOM-0}$$
950ed6f5d66Smrg
951fbc03982Smrg        func_mktempdir_umask=`umask`
952ed6f5d66Smrg        umask 0077
953fbc03982Smrg        $MKDIR "$_G_tmpdir"
954fbc03982Smrg        umask $func_mktempdir_umask
955ed6f5d66Smrg      fi
956ed6f5d66Smrg
957ed6f5d66Smrg      # If we're not in dry-run mode, bomb out on failure
958fbc03982Smrg      test -d "$_G_tmpdir" || \
959fbc03982Smrg        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
960ed6f5d66Smrg    fi
961ed6f5d66Smrg
962fbc03982Smrg    $ECHO "$_G_tmpdir"
963ed6f5d66Smrg}
964ed6f5d66Smrg
965ed6f5d66Smrg
966fbc03982Smrg# func_normal_abspath PATH
967fbc03982Smrg# ------------------------
968fbc03982Smrg# Remove doubled-up and trailing slashes, "." path components,
969fbc03982Smrg# and cancel out any ".." path components in PATH after making
970fbc03982Smrg# it an absolute path.
971fbc03982Smrgfunc_normal_abspath ()
972ed6f5d66Smrg{
973fbc03982Smrg    $debug_cmd
974fbc03982Smrg
975fbc03982Smrg    # These SED scripts presuppose an absolute path with a trailing slash.
976fbc03982Smrg    _G_pathcar='s|^/\([^/]*\).*$|\1|'
977fbc03982Smrg    _G_pathcdr='s|^/[^/]*||'
978fbc03982Smrg    _G_removedotparts=':dotsl
979fbc03982Smrg		s|/\./|/|g
980fbc03982Smrg		t dotsl
981fbc03982Smrg		s|/\.$|/|'
982fbc03982Smrg    _G_collapseslashes='s|/\{1,\}|/|g'
983fbc03982Smrg    _G_finalslash='s|/*$|/|'
984fbc03982Smrg
985fbc03982Smrg    # Start from root dir and reassemble the path.
986fbc03982Smrg    func_normal_abspath_result=
987fbc03982Smrg    func_normal_abspath_tpath=$1
988fbc03982Smrg    func_normal_abspath_altnamespace=
989fbc03982Smrg    case $func_normal_abspath_tpath in
990fbc03982Smrg      "")
991fbc03982Smrg        # Empty path, that just means $cwd.
992fbc03982Smrg        func_stripname '' '/' "`pwd`"
993fbc03982Smrg        func_normal_abspath_result=$func_stripname_result
994fbc03982Smrg        return
995fbc03982Smrg        ;;
996fbc03982Smrg      # The next three entries are used to spot a run of precisely
997fbc03982Smrg      # two leading slashes without using negated character classes;
998fbc03982Smrg      # we take advantage of case's first-match behaviour.
999fbc03982Smrg      ///*)
1000fbc03982Smrg        # Unusual form of absolute path, do nothing.
1001fbc03982Smrg        ;;
1002fbc03982Smrg      //*)
1003fbc03982Smrg        # Not necessarily an ordinary path; POSIX reserves leading '//'
1004fbc03982Smrg        # and for example Cygwin uses it to access remote file shares
1005fbc03982Smrg        # over CIFS/SMB, so we conserve a leading double slash if found.
1006fbc03982Smrg        func_normal_abspath_altnamespace=/
1007fbc03982Smrg        ;;
1008fbc03982Smrg      /*)
1009fbc03982Smrg        # Absolute path, do nothing.
1010fbc03982Smrg        ;;
1011ed6f5d66Smrg      *)
1012fbc03982Smrg        # Relative path, prepend $cwd.
1013fbc03982Smrg        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
1014fbc03982Smrg        ;;
1015ed6f5d66Smrg    esac
1016ed6f5d66Smrg
1017fbc03982Smrg    # Cancel out all the simple stuff to save iterations.  We also want
1018fbc03982Smrg    # the path to end with a slash for ease of parsing, so make sure
1019fbc03982Smrg    # there is one (and only one) here.
1020fbc03982Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
1021fbc03982Smrg          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
1022fbc03982Smrg    while :; do
1023fbc03982Smrg      # Processed it all yet?
1024fbc03982Smrg      if test / = "$func_normal_abspath_tpath"; then
1025fbc03982Smrg        # If we ascended to the root using ".." the result may be empty now.
1026fbc03982Smrg        if test -z "$func_normal_abspath_result"; then
1027fbc03982Smrg          func_normal_abspath_result=/
1028fbc03982Smrg        fi
1029fbc03982Smrg        break
1030fbc03982Smrg      fi
1031fbc03982Smrg      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
1032fbc03982Smrg          -e "$_G_pathcar"`
1033fbc03982Smrg      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
1034fbc03982Smrg          -e "$_G_pathcdr"`
1035fbc03982Smrg      # Figure out what to do with it
1036fbc03982Smrg      case $func_normal_abspath_tcomponent in
1037fbc03982Smrg        "")
1038fbc03982Smrg          # Trailing empty path component, ignore it.
1039fbc03982Smrg          ;;
1040fbc03982Smrg        ..)
1041fbc03982Smrg          # Parent dir; strip last assembled component from result.
1042fbc03982Smrg          func_dirname "$func_normal_abspath_result"
1043fbc03982Smrg          func_normal_abspath_result=$func_dirname_result
1044fbc03982Smrg          ;;
1045fbc03982Smrg        *)
1046fbc03982Smrg          # Actual path component, append it.
1047fbc03982Smrg          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
1048fbc03982Smrg          ;;
1049fbc03982Smrg      esac
1050fbc03982Smrg    done
1051fbc03982Smrg    # Restore leading double-slash if one was found on entry.
1052fbc03982Smrg    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
1053fbc03982Smrg}
1054fbc03982Smrg
1055fbc03982Smrg
1056fbc03982Smrg# func_notquiet ARG...
1057fbc03982Smrg# --------------------
1058fbc03982Smrg# Echo program name prefixed message only when not in quiet mode.
1059fbc03982Smrgfunc_notquiet ()
1060fbc03982Smrg{
1061fbc03982Smrg    $debug_cmd
1062fbc03982Smrg
1063fbc03982Smrg    $opt_quiet || func_echo ${1+"$@"}
1064fbc03982Smrg
1065fbc03982Smrg    # A bug in bash halts the script if the last line of a function
1066fbc03982Smrg    # fails when set -e is in force, so we need another command to
1067fbc03982Smrg    # work around that:
1068fbc03982Smrg    :
1069fbc03982Smrg}
1070fbc03982Smrg
1071fbc03982Smrg
1072fbc03982Smrg# func_relative_path SRCDIR DSTDIR
1073fbc03982Smrg# --------------------------------
1074fbc03982Smrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
1075fbc03982Smrgfunc_relative_path ()
1076fbc03982Smrg{
1077fbc03982Smrg    $debug_cmd
1078fbc03982Smrg
1079fbc03982Smrg    func_relative_path_result=
1080fbc03982Smrg    func_normal_abspath "$1"
1081fbc03982Smrg    func_relative_path_tlibdir=$func_normal_abspath_result
1082fbc03982Smrg    func_normal_abspath "$2"
1083fbc03982Smrg    func_relative_path_tbindir=$func_normal_abspath_result
1084fbc03982Smrg
1085fbc03982Smrg    # Ascend the tree starting from libdir
1086fbc03982Smrg    while :; do
1087fbc03982Smrg      # check if we have found a prefix of bindir
1088fbc03982Smrg      case $func_relative_path_tbindir in
1089fbc03982Smrg        $func_relative_path_tlibdir)
1090fbc03982Smrg          # found an exact match
1091fbc03982Smrg          func_relative_path_tcancelled=
1092fbc03982Smrg          break
1093fbc03982Smrg          ;;
1094fbc03982Smrg        $func_relative_path_tlibdir*)
1095fbc03982Smrg          # found a matching prefix
1096fbc03982Smrg          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
1097fbc03982Smrg          func_relative_path_tcancelled=$func_stripname_result
1098fbc03982Smrg          if test -z "$func_relative_path_result"; then
1099fbc03982Smrg            func_relative_path_result=.
1100fbc03982Smrg          fi
1101fbc03982Smrg          break
1102fbc03982Smrg          ;;
1103fbc03982Smrg        *)
1104fbc03982Smrg          func_dirname $func_relative_path_tlibdir
1105fbc03982Smrg          func_relative_path_tlibdir=$func_dirname_result
1106fbc03982Smrg          if test -z "$func_relative_path_tlibdir"; then
1107fbc03982Smrg            # Have to descend all the way to the root!
1108fbc03982Smrg            func_relative_path_result=../$func_relative_path_result
1109fbc03982Smrg            func_relative_path_tcancelled=$func_relative_path_tbindir
1110fbc03982Smrg            break
1111fbc03982Smrg          fi
1112fbc03982Smrg          func_relative_path_result=../$func_relative_path_result
1113fbc03982Smrg          ;;
1114fbc03982Smrg      esac
1115fbc03982Smrg    done
1116fbc03982Smrg
1117fbc03982Smrg    # Now calculate path; take care to avoid doubling-up slashes.
1118fbc03982Smrg    func_stripname '' '/' "$func_relative_path_result"
1119fbc03982Smrg    func_relative_path_result=$func_stripname_result
1120fbc03982Smrg    func_stripname '/' '/' "$func_relative_path_tcancelled"
1121fbc03982Smrg    if test -n "$func_stripname_result"; then
1122fbc03982Smrg      func_append func_relative_path_result "/$func_stripname_result"
1123fbc03982Smrg    fi
1124fbc03982Smrg
1125fbc03982Smrg    # Normalisation. If bindir is libdir, return '.' else relative path.
1126fbc03982Smrg    if test -n "$func_relative_path_result"; then
1127fbc03982Smrg      func_stripname './' '' "$func_relative_path_result"
1128fbc03982Smrg      func_relative_path_result=$func_stripname_result
1129fbc03982Smrg    fi
1130fbc03982Smrg
1131fbc03982Smrg    test -n "$func_relative_path_result" || func_relative_path_result=.
1132fbc03982Smrg
1133fbc03982Smrg    :
1134fbc03982Smrg}
1135fbc03982Smrg
1136fbc03982Smrg
11373d05230fSmrg# func_quote_portable EVAL ARG
11383d05230fSmrg# ----------------------------
11393d05230fSmrg# Internal function to portably implement func_quote_arg.  Note that we still
11403d05230fSmrg# keep attention to performance here so we as much as possible try to avoid
11413d05230fSmrg# calling sed binary (so far O(N) complexity as long as func_append is O(1)).
11423d05230fSmrgfunc_quote_portable ()
1143fbc03982Smrg{
1144fbc03982Smrg    $debug_cmd
1145fbc03982Smrg
11463d05230fSmrg    $require_check_ifs_backslash
1147fbc03982Smrg
11483d05230fSmrg    func_quote_portable_result=$2
1149fbc03982Smrg
11503d05230fSmrg    # one-time-loop (easy break)
11513d05230fSmrg    while true
11523d05230fSmrg    do
11533d05230fSmrg      if $1; then
11543d05230fSmrg        func_quote_portable_result=`$ECHO "$2" | $SED \
11553d05230fSmrg          -e "$sed_double_quote_subst" -e "$sed_double_backslash"`
11563d05230fSmrg        break
11573d05230fSmrg      fi
11583d05230fSmrg
11593d05230fSmrg      # Quote for eval.
11603d05230fSmrg      case $func_quote_portable_result in
11613d05230fSmrg        *[\\\`\"\$]*)
11623d05230fSmrg          # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string
11633d05230fSmrg          # contains the shell wildcard characters.
11643d05230fSmrg          case $check_ifs_backshlash_broken$func_quote_portable_result in
11653d05230fSmrg            :*|*[\[\*\?]*)
11663d05230fSmrg              func_quote_portable_result=`$ECHO "$func_quote_portable_result" \
11673d05230fSmrg                  | $SED "$sed_quote_subst"`
11683d05230fSmrg              break
1169fbc03982Smrg              ;;
11703d05230fSmrg          esac
11713d05230fSmrg
11723d05230fSmrg          func_quote_portable_old_IFS=$IFS
11733d05230fSmrg          for _G_char in '\' '`' '"' '$'
11743d05230fSmrg          do
11753d05230fSmrg            # STATE($1) PREV($2) SEPARATOR($3)
11763d05230fSmrg            set start "" ""
11773d05230fSmrg            func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy
11783d05230fSmrg            IFS=$_G_char
11793d05230fSmrg            for _G_part in $func_quote_portable_result
11803d05230fSmrg            do
11813d05230fSmrg              case $1 in
11823d05230fSmrg              quote)
11833d05230fSmrg                func_append func_quote_portable_result "$3$2"
11843d05230fSmrg                set quote "$_G_part" "\\$_G_char"
11853d05230fSmrg                ;;
11863d05230fSmrg              start)
11873d05230fSmrg                set first "" ""
11883d05230fSmrg                func_quote_portable_result=
11893d05230fSmrg                ;;
11903d05230fSmrg              first)
11913d05230fSmrg                set quote "$_G_part" ""
11923d05230fSmrg                ;;
11933d05230fSmrg              esac
11943d05230fSmrg            done
1195fbc03982Smrg          done
11963d05230fSmrg          IFS=$func_quote_portable_old_IFS
11973d05230fSmrg          ;;
11983d05230fSmrg        *) ;;
11993d05230fSmrg      esac
12003d05230fSmrg      break
12013d05230fSmrg    done
12023d05230fSmrg
12033d05230fSmrg    func_quote_portable_unquoted_result=$func_quote_portable_result
12043d05230fSmrg    case $func_quote_portable_result in
12053d05230fSmrg      # double-quote args containing shell metacharacters to delay
12063d05230fSmrg      # word splitting, command substitution and variable expansion
12073d05230fSmrg      # for a subsequent eval.
12083d05230fSmrg      # many bourne shells cannot handle close brackets correctly
12093d05230fSmrg      # in scan sets, so we specify it separately.
12103d05230fSmrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
12113d05230fSmrg        func_quote_portable_result=\"$func_quote_portable_result\"
1212ed6f5d66Smrg        ;;
1213ed6f5d66Smrg    esac
1214ed6f5d66Smrg}
1215ed6f5d66Smrg
1216ed6f5d66Smrg
12173d05230fSmrg# func_quotefast_eval ARG
12183d05230fSmrg# -----------------------
12193d05230fSmrg# Quote one ARG (internal).  This is equivalent to 'func_quote_arg eval ARG',
12203d05230fSmrg# but optimized for speed.  Result is stored in $func_quotefast_eval.
12213d05230fSmrgif test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then
12223d05230fSmrg  printf -v _GL_test_printf_tilde %q '~'
12233d05230fSmrg  if test '\~' = "$_GL_test_printf_tilde"; then
12243d05230fSmrg    func_quotefast_eval ()
12253d05230fSmrg    {
12263d05230fSmrg      printf -v func_quotefast_eval_result %q "$1"
12273d05230fSmrg    }
12283d05230fSmrg  else
12293d05230fSmrg    # Broken older Bash implementations.  Make those faster too if possible.
12303d05230fSmrg    func_quotefast_eval ()
12313d05230fSmrg    {
12323d05230fSmrg      case $1 in
12333d05230fSmrg        '~'*)
12343d05230fSmrg          func_quote_portable false "$1"
12353d05230fSmrg          func_quotefast_eval_result=$func_quote_portable_result
1236fbc03982Smrg          ;;
1237fbc03982Smrg        *)
12383d05230fSmrg          printf -v func_quotefast_eval_result %q "$1"
12393d05230fSmrg          ;;
1240fbc03982Smrg      esac
12413d05230fSmrg    }
12423d05230fSmrg  fi
12433d05230fSmrgelse
12443d05230fSmrg  func_quotefast_eval ()
12453d05230fSmrg  {
12463d05230fSmrg    func_quote_portable false "$1"
12473d05230fSmrg    func_quotefast_eval_result=$func_quote_portable_result
12483d05230fSmrg  }
12493d05230fSmrgfi
1250fbc03982Smrg
1251fbc03982Smrg
12523d05230fSmrg# func_quote_arg MODEs ARG
12533d05230fSmrg# ------------------------
12543d05230fSmrg# Quote one ARG to be evaled later.  MODEs argument may contain zero or more
12553d05230fSmrg# specifiers listed below separated by ',' character.  This function returns two
12563d05230fSmrg# values:
12573d05230fSmrg#   i) func_quote_arg_result
12583d05230fSmrg#      double-quoted (when needed), suitable for a subsequent eval
12593d05230fSmrg#  ii) func_quote_arg_unquoted_result
12603d05230fSmrg#      has all characters that are still active within double
12613d05230fSmrg#      quotes backslashified.  Available only if 'unquoted' is specified.
12623d05230fSmrg#
12633d05230fSmrg# Available modes:
12643d05230fSmrg# ----------------
12653d05230fSmrg# 'eval' (default)
12663d05230fSmrg#       - escape shell special characters
12673d05230fSmrg# 'expand'
12683d05230fSmrg#       - the same as 'eval';  but do not quote variable references
12693d05230fSmrg# 'pretty'
12703d05230fSmrg#       - request aesthetic output, i.e. '"a b"' instead of 'a\ b'.  This might
12713d05230fSmrg#         be used later in func_quote to get output like: 'echo "a b"' instead
12723d05230fSmrg#         of 'echo a\ b'.  This is slower than default on some shells.
12733d05230fSmrg# 'unquoted'
12743d05230fSmrg#       - produce also $func_quote_arg_unquoted_result which does not contain
12753d05230fSmrg#         wrapping double-quotes.
12763d05230fSmrg#
12773d05230fSmrg# Examples for 'func_quote_arg pretty,unquoted string':
12783d05230fSmrg#
12793d05230fSmrg#   string      | *_result              | *_unquoted_result
12803d05230fSmrg#   ------------+-----------------------+-------------------
12813d05230fSmrg#   "           | \"                    | \"
12823d05230fSmrg#   a b         | "a b"                 | a b
12833d05230fSmrg#   "a b"       | "\"a b\""             | \"a b\"
12843d05230fSmrg#   *           | "*"                   | *
12853d05230fSmrg#   z="${x-$y}" | "z=\"\${x-\$y}\""     | z=\"\${x-\$y}\"
12863d05230fSmrg#
12873d05230fSmrg# Examples for 'func_quote_arg pretty,unquoted,expand string':
12883d05230fSmrg#
12893d05230fSmrg#   string        |   *_result          |  *_unquoted_result
12903d05230fSmrg#   --------------+---------------------+--------------------
12913d05230fSmrg#   z="${x-$y}"   | "z=\"${x-$y}\""     | z=\"${x-$y}\"
12923d05230fSmrgfunc_quote_arg ()
12933d05230fSmrg{
12943d05230fSmrg    _G_quote_expand=false
12953d05230fSmrg    case ,$1, in
12963d05230fSmrg      *,expand,*)
12973d05230fSmrg        _G_quote_expand=:
12983d05230fSmrg        ;;
1299ed6f5d66Smrg    esac
1300ed6f5d66Smrg
13013d05230fSmrg    case ,$1, in
13023d05230fSmrg      *,pretty,*|*,expand,*|*,unquoted,*)
13033d05230fSmrg        func_quote_portable $_G_quote_expand "$2"
13043d05230fSmrg        func_quote_arg_result=$func_quote_portable_result
13053d05230fSmrg        func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result
13063d05230fSmrg        ;;
13073d05230fSmrg      *)
13083d05230fSmrg        # Faster quote-for-eval for some shells.
13093d05230fSmrg        func_quotefast_eval "$2"
13103d05230fSmrg        func_quote_arg_result=$func_quotefast_eval_result
1311ed6f5d66Smrg        ;;
1312ed6f5d66Smrg    esac
13133d05230fSmrg}
1314ed6f5d66Smrg
13153d05230fSmrg
13163d05230fSmrg# func_quote MODEs ARGs...
13173d05230fSmrg# ------------------------
13183d05230fSmrg# Quote all ARGs to be evaled later and join them into single command.  See
13193d05230fSmrg# func_quote_arg's description for more info.
13203d05230fSmrgfunc_quote ()
13213d05230fSmrg{
13223d05230fSmrg    $debug_cmd
13233d05230fSmrg    _G_func_quote_mode=$1 ; shift
13243d05230fSmrg    func_quote_result=
13253d05230fSmrg    while test 0 -lt $#; do
13263d05230fSmrg      func_quote_arg "$_G_func_quote_mode" "$1"
13273d05230fSmrg      if test -n "$func_quote_result"; then
13283d05230fSmrg        func_append func_quote_result " $func_quote_arg_result"
13293d05230fSmrg      else
13303d05230fSmrg        func_append func_quote_result "$func_quote_arg_result"
13313d05230fSmrg      fi
13323d05230fSmrg      shift
13333d05230fSmrg    done
1334fbc03982Smrg}
1335fbc03982Smrg
1336fbc03982Smrg
1337fbc03982Smrg# func_stripname PREFIX SUFFIX NAME
1338fbc03982Smrg# ---------------------------------
1339fbc03982Smrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
1340fbc03982Smrg# PREFIX and SUFFIX must not contain globbing or regex special
1341fbc03982Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading
1342fbc03982Smrg# dot (in which case that matches only a dot).
1343fbc03982Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
1344fbc03982Smrg  eval 'func_stripname ()
1345fbc03982Smrg  {
1346fbc03982Smrg    $debug_cmd
1347fbc03982Smrg
1348fbc03982Smrg    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
1349fbc03982Smrg    # positional parameters, so assign one to ordinary variable first.
1350fbc03982Smrg    func_stripname_result=$3
1351fbc03982Smrg    func_stripname_result=${func_stripname_result#"$1"}
1352fbc03982Smrg    func_stripname_result=${func_stripname_result%"$2"}
1353fbc03982Smrg  }'
1354fbc03982Smrgelse
1355fbc03982Smrg  func_stripname ()
1356fbc03982Smrg  {
1357fbc03982Smrg    $debug_cmd
1358fbc03982Smrg
1359fbc03982Smrg    case $2 in
1360fbc03982Smrg      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
1361fbc03982Smrg      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
1362fbc03982Smrg    esac
1363fbc03982Smrg  }
1364fbc03982Smrgfi
1365fbc03982Smrg
1366fbc03982Smrg
1367fbc03982Smrg# func_show_eval CMD [FAIL_EXP]
1368fbc03982Smrg# -----------------------------
1369fbc03982Smrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
1370fbc03982Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
1371fbc03982Smrg# is given, then evaluate it.
1372fbc03982Smrgfunc_show_eval ()
1373fbc03982Smrg{
1374fbc03982Smrg    $debug_cmd
1375fbc03982Smrg
1376fbc03982Smrg    _G_cmd=$1
1377fbc03982Smrg    _G_fail_exp=${2-':'}
1378fbc03982Smrg
13793d05230fSmrg    func_quote_arg pretty,expand "$_G_cmd"
13803d05230fSmrg    eval "func_notquiet $func_quote_arg_result"
1381fbc03982Smrg
1382fbc03982Smrg    $opt_dry_run || {
1383fbc03982Smrg      eval "$_G_cmd"
1384fbc03982Smrg      _G_status=$?
1385fbc03982Smrg      if test 0 -ne "$_G_status"; then
1386fbc03982Smrg	eval "(exit $_G_status); $_G_fail_exp"
1387fbc03982Smrg      fi
1388fbc03982Smrg    }
1389fbc03982Smrg}
1390fbc03982Smrg
1391fbc03982Smrg
1392fbc03982Smrg# func_show_eval_locale CMD [FAIL_EXP]
1393fbc03982Smrg# ------------------------------------
1394fbc03982Smrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
1395fbc03982Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
1396fbc03982Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
1397fbc03982Smrgfunc_show_eval_locale ()
1398fbc03982Smrg{
1399fbc03982Smrg    $debug_cmd
1400fbc03982Smrg
1401fbc03982Smrg    _G_cmd=$1
1402fbc03982Smrg    _G_fail_exp=${2-':'}
1403fbc03982Smrg
1404fbc03982Smrg    $opt_quiet || {
14053d05230fSmrg      func_quote_arg expand,pretty "$_G_cmd"
14063d05230fSmrg      eval "func_echo $func_quote_arg_result"
1407fbc03982Smrg    }
1408fbc03982Smrg
1409fbc03982Smrg    $opt_dry_run || {
1410fbc03982Smrg      eval "$_G_user_locale
1411fbc03982Smrg	    $_G_cmd"
1412fbc03982Smrg      _G_status=$?
1413fbc03982Smrg      eval "$_G_safe_locale"
1414fbc03982Smrg      if test 0 -ne "$_G_status"; then
1415fbc03982Smrg	eval "(exit $_G_status); $_G_fail_exp"
1416fbc03982Smrg      fi
1417fbc03982Smrg    }
1418fbc03982Smrg}
1419fbc03982Smrg
1420fbc03982Smrg
1421fbc03982Smrg# func_tr_sh
1422fbc03982Smrg# ----------
1423fbc03982Smrg# Turn $1 into a string suitable for a shell variable name.
1424fbc03982Smrg# Result is stored in $func_tr_sh_result.  All characters
1425fbc03982Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
1426fbc03982Smrg# if $1 begins with a digit, a '_' is prepended as well.
1427fbc03982Smrgfunc_tr_sh ()
1428fbc03982Smrg{
1429fbc03982Smrg    $debug_cmd
1430fbc03982Smrg
1431fbc03982Smrg    case $1 in
1432fbc03982Smrg    [0-9]* | *[!a-zA-Z0-9_]*)
1433fbc03982Smrg      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
1434fbc03982Smrg      ;;
1435fbc03982Smrg    * )
1436fbc03982Smrg      func_tr_sh_result=$1
1437fbc03982Smrg      ;;
1438fbc03982Smrg    esac
1439fbc03982Smrg}
1440fbc03982Smrg
1441fbc03982Smrg
1442fbc03982Smrg# func_verbose ARG...
1443fbc03982Smrg# -------------------
1444fbc03982Smrg# Echo program name prefixed message in verbose mode only.
1445fbc03982Smrgfunc_verbose ()
1446fbc03982Smrg{
1447fbc03982Smrg    $debug_cmd
1448fbc03982Smrg
1449fbc03982Smrg    $opt_verbose && func_echo "$*"
1450fbc03982Smrg
1451fbc03982Smrg    :
1452ed6f5d66Smrg}
1453ed6f5d66Smrg
1454ed6f5d66Smrg
1455fbc03982Smrg# func_warn_and_continue ARG...
1456fbc03982Smrg# -----------------------------
1457fbc03982Smrg# Echo program name prefixed warning message to standard error.
1458fbc03982Smrgfunc_warn_and_continue ()
1459fbc03982Smrg{
1460fbc03982Smrg    $debug_cmd
1461fbc03982Smrg
1462fbc03982Smrg    $require_term_colors
1463fbc03982Smrg
1464fbc03982Smrg    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
1465fbc03982Smrg}
1466fbc03982Smrg
1467fbc03982Smrg
1468fbc03982Smrg# func_warning CATEGORY ARG...
1469fbc03982Smrg# ----------------------------
1470fbc03982Smrg# Echo program name prefixed warning message to standard error. Warning
1471fbc03982Smrg# messages can be filtered according to CATEGORY, where this function
1472fbc03982Smrg# elides messages where CATEGORY is not listed in the global variable
1473fbc03982Smrg# 'opt_warning_types'.
1474fbc03982Smrgfunc_warning ()
1475fbc03982Smrg{
1476fbc03982Smrg    $debug_cmd
1477fbc03982Smrg
1478fbc03982Smrg    # CATEGORY must be in the warning_categories list!
1479fbc03982Smrg    case " $warning_categories " in
1480fbc03982Smrg      *" $1 "*) ;;
1481fbc03982Smrg      *) func_internal_error "invalid warning category '$1'" ;;
1482fbc03982Smrg    esac
1483fbc03982Smrg
1484fbc03982Smrg    _G_category=$1
1485fbc03982Smrg    shift
1486fbc03982Smrg
1487fbc03982Smrg    case " $opt_warning_types " in
1488fbc03982Smrg      *" $_G_category "*) $warning_func ${1+"$@"} ;;
1489fbc03982Smrg    esac
1490fbc03982Smrg}
1491fbc03982Smrg
1492fbc03982Smrg
1493fbc03982Smrg# func_sort_ver VER1 VER2
1494fbc03982Smrg# -----------------------
1495fbc03982Smrg# 'sort -V' is not generally available.
1496fbc03982Smrg# Note this deviates from the version comparison in automake
1497fbc03982Smrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
1498fbc03982Smrg# but this should suffice as we won't be specifying old
1499fbc03982Smrg# version formats or redundant trailing .0 in bootstrap.conf.
1500fbc03982Smrg# If we did want full compatibility then we should probably
1501fbc03982Smrg# use m4_version_compare from autoconf.
1502fbc03982Smrgfunc_sort_ver ()
1503fbc03982Smrg{
1504fbc03982Smrg    $debug_cmd
1505fbc03982Smrg
1506fbc03982Smrg    printf '%s\n%s\n' "$1" "$2" \
1507fbc03982Smrg      | 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
1508fbc03982Smrg}
1509fbc03982Smrg
1510fbc03982Smrg# func_lt_ver PREV CURR
1511fbc03982Smrg# ---------------------
1512fbc03982Smrg# Return true if PREV and CURR are in the correct order according to
1513fbc03982Smrg# func_sort_ver, otherwise false.  Use it like this:
1514fbc03982Smrg#
1515fbc03982Smrg#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
1516fbc03982Smrgfunc_lt_ver ()
1517fbc03982Smrg{
1518fbc03982Smrg    $debug_cmd
1519fbc03982Smrg
1520fbc03982Smrg    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
1521fbc03982Smrg}
1522fbc03982Smrg
1523fbc03982Smrg
1524fbc03982Smrg# Local variables:
1525fbc03982Smrg# mode: shell-script
1526fbc03982Smrg# sh-indentation: 2
1527fbc03982Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
1528fbc03982Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
1529fbc03982Smrg# time-stamp-time-zone: "UTC"
1530fbc03982Smrg# End:
1531fbc03982Smrg#! /bin/sh
1532fbc03982Smrg
1533fbc03982Smrg# A portable, pluggable option parser for Bourne shell.
1534fbc03982Smrg# Written by Gary V. Vaughan, 2010
1535fbc03982Smrg
15363d05230fSmrg# This is free software.  There is NO warranty; not even for
15373d05230fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15383d05230fSmrg#
1539a3680546Smrg# Copyright (C) 2010-2019, 2021, 2023-2024 Bootstrap Authors
15403d05230fSmrg#
15413d05230fSmrg# This file is dual licensed under the terms of the MIT license
1542a3680546Smrg# <https://opensource.org/licenses/MIT>, and GPL version 2 or later
1543a3680546Smrg# <https://www.gnu.org/licenses/gpl-2.0.html>.  You must apply one of
15443d05230fSmrg# these licenses when using or redistributing this software or any of
15453d05230fSmrg# the files within it.  See the URLs above, or the file `LICENSE`
15463d05230fSmrg# included in the Bootstrap distribution for the full license texts.
1547fbc03982Smrg
15483d05230fSmrg# Please report bugs or propose patches to:
15493d05230fSmrg# <https://github.com/gnulib-modules/bootstrap/issues>
1550fbc03982Smrg
15513d05230fSmrg# Set a version string for this script.
15523d05230fSmrgscriptversion=2019-02-19.15; # UTC
1553fbc03982Smrg
1554fbc03982Smrg
1555fbc03982Smrg## ------ ##
1556fbc03982Smrg## Usage. ##
1557fbc03982Smrg## ------ ##
1558fbc03982Smrg
1559fbc03982Smrg# This file is a library for parsing options in your shell scripts along
1560fbc03982Smrg# with assorted other useful supporting features that you can make use
1561fbc03982Smrg# of too.
1562fbc03982Smrg#
1563fbc03982Smrg# For the simplest scripts you might need only:
1564fbc03982Smrg#
1565fbc03982Smrg#   #!/bin/sh
1566fbc03982Smrg#   . relative/path/to/funclib.sh
1567fbc03982Smrg#   . relative/path/to/options-parser
1568fbc03982Smrg#   scriptversion=1.0
1569fbc03982Smrg#   func_options ${1+"$@"}
1570fbc03982Smrg#   eval set dummy "$func_options_result"; shift
1571fbc03982Smrg#   ...rest of your script...
1572fbc03982Smrg#
1573fbc03982Smrg# In order for the '--version' option to work, you will need to have a
1574fbc03982Smrg# suitably formatted comment like the one at the top of this file
15753d05230fSmrg# starting with '# Written by ' and ending with '# Copyright'.
1576fbc03982Smrg#
1577fbc03982Smrg# For '-h' and '--help' to work, you will also need a one line
1578fbc03982Smrg# description of your script's purpose in a comment directly above the
1579fbc03982Smrg# '# Written by ' line, like the one at the top of this file.
1580fbc03982Smrg#
1581fbc03982Smrg# The default options also support '--debug', which will turn on shell
1582fbc03982Smrg# execution tracing (see the comment above debug_cmd below for another
1583fbc03982Smrg# use), and '--verbose' and the func_verbose function to allow your script
1584fbc03982Smrg# to display verbose messages only when your user has specified
1585fbc03982Smrg# '--verbose'.
1586fbc03982Smrg#
15873d05230fSmrg# After sourcing this file, you can plug in processing for additional
1588fbc03982Smrg# options by amending the variables from the 'Configuration' section
1589fbc03982Smrg# below, and following the instructions in the 'Option parsing'
1590fbc03982Smrg# section further down.
1591fbc03982Smrg
1592fbc03982Smrg## -------------- ##
1593fbc03982Smrg## Configuration. ##
1594fbc03982Smrg## -------------- ##
1595fbc03982Smrg
1596fbc03982Smrg# You should override these variables in your script after sourcing this
1597fbc03982Smrg# file so that they reflect the customisations you have added to the
1598fbc03982Smrg# option parser.
1599fbc03982Smrg
1600fbc03982Smrg# The usage line for option parsing errors and the start of '-h' and
1601fbc03982Smrg# '--help' output messages. You can embed shell variables for delayed
1602fbc03982Smrg# expansion at the time the message is displayed, but you will need to
1603fbc03982Smrg# quote other shell meta-characters carefully to prevent them being
1604fbc03982Smrg# expanded when the contents are evaled.
1605fbc03982Smrgusage='$progpath [OPTION]...'
1606fbc03982Smrg
1607fbc03982Smrg# Short help message in response to '-h' and '--help'.  Add to this or
1608fbc03982Smrg# override it after sourcing this library to reflect the full set of
1609fbc03982Smrg# options your script accepts.
1610fbc03982Smrgusage_message="\
1611fbc03982Smrg       --debug        enable verbose shell tracing
1612fbc03982Smrg   -W, --warnings=CATEGORY
1613fbc03982Smrg                      report the warnings falling in CATEGORY [all]
1614fbc03982Smrg   -v, --verbose      verbosely report processing
1615fbc03982Smrg       --version      print version information and exit
1616fbc03982Smrg   -h, --help         print short or long help message and exit
1617fbc03982Smrg"
1618fbc03982Smrg
1619fbc03982Smrg# Additional text appended to 'usage_message' in response to '--help'.
1620fbc03982Smrglong_help_message="
1621fbc03982SmrgWarning categories include:
1622fbc03982Smrg       'all'          show all warnings
1623fbc03982Smrg       'none'         turn off all the warnings
1624fbc03982Smrg       'error'        warnings are treated as fatal errors"
1625fbc03982Smrg
1626fbc03982Smrg# Help message printed before fatal option parsing errors.
1627fbc03982Smrgfatal_help="Try '\$progname --help' for more information."
1628fbc03982Smrg
1629fbc03982Smrg
1630fbc03982Smrg
1631fbc03982Smrg## ------------------------- ##
1632fbc03982Smrg## Hook function management. ##
1633fbc03982Smrg## ------------------------- ##
1634fbc03982Smrg
1635fbc03982Smrg# This section contains functions for adding, removing, and running hooks
16363d05230fSmrg# in the main code.  A hook is just a list of function names that can be
16373d05230fSmrg# run in order later on.
1638fbc03982Smrg
1639fbc03982Smrg# func_hookable FUNC_NAME
1640fbc03982Smrg# -----------------------
1641fbc03982Smrg# Declare that FUNC_NAME will run hooks added with
1642fbc03982Smrg# 'func_add_hook FUNC_NAME ...'.
1643fbc03982Smrgfunc_hookable ()
1644fbc03982Smrg{
1645fbc03982Smrg    $debug_cmd
1646fbc03982Smrg
1647fbc03982Smrg    func_append hookable_fns " $1"
1648fbc03982Smrg}
1649fbc03982Smrg
1650fbc03982Smrg
1651fbc03982Smrg# func_add_hook FUNC_NAME HOOK_FUNC
1652fbc03982Smrg# ---------------------------------
1653fbc03982Smrg# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
1654fbc03982Smrg# first have been declared "hookable" by a call to 'func_hookable'.
1655fbc03982Smrgfunc_add_hook ()
1656fbc03982Smrg{
1657fbc03982Smrg    $debug_cmd
1658fbc03982Smrg
1659fbc03982Smrg    case " $hookable_fns " in
1660fbc03982Smrg      *" $1 "*) ;;
1661fbc03982Smrg      *) func_fatal_error "'$1' does not accept hook functions." ;;
1662fbc03982Smrg    esac
1663fbc03982Smrg
1664fbc03982Smrg    eval func_append ${1}_hooks '" $2"'
1665fbc03982Smrg}
1666fbc03982Smrg
1667fbc03982Smrg
1668fbc03982Smrg# func_remove_hook FUNC_NAME HOOK_FUNC
1669fbc03982Smrg# ------------------------------------
16703d05230fSmrg# Remove HOOK_FUNC from the list of hook functions to be called by
16713d05230fSmrg# FUNC_NAME.
1672fbc03982Smrgfunc_remove_hook ()
1673fbc03982Smrg{
1674fbc03982Smrg    $debug_cmd
1675fbc03982Smrg
1676fbc03982Smrg    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
1677fbc03982Smrg}
1678fbc03982Smrg
1679fbc03982Smrg
16803d05230fSmrg# func_propagate_result FUNC_NAME_A FUNC_NAME_B
16813d05230fSmrg# ---------------------------------------------
16823d05230fSmrg# If the *_result variable of FUNC_NAME_A _is set_, assign its value to
16833d05230fSmrg# *_result variable of FUNC_NAME_B.
16843d05230fSmrgfunc_propagate_result ()
16853d05230fSmrg{
16863d05230fSmrg    $debug_cmd
16873d05230fSmrg
16883d05230fSmrg    func_propagate_result_result=:
16893d05230fSmrg    if eval "test \"\${${1}_result+set}\" = set"
16903d05230fSmrg    then
16913d05230fSmrg      eval "${2}_result=\$${1}_result"
16923d05230fSmrg    else
16933d05230fSmrg      func_propagate_result_result=false
16943d05230fSmrg    fi
16953d05230fSmrg}
16963d05230fSmrg
16973d05230fSmrg
1698fbc03982Smrg# func_run_hooks FUNC_NAME [ARG]...
1699fbc03982Smrg# ---------------------------------
1700fbc03982Smrg# Run all hook functions registered to FUNC_NAME.
17013d05230fSmrg# It's assumed that the list of hook functions contains nothing more
1702fbc03982Smrg# than a whitespace-delimited list of legal shell function names, and
1703fbc03982Smrg# no effort is wasted trying to catch shell meta-characters or preserve
1704fbc03982Smrg# whitespace.
1705fbc03982Smrgfunc_run_hooks ()
1706fbc03982Smrg{
1707fbc03982Smrg    $debug_cmd
1708fbc03982Smrg
1709fbc03982Smrg    case " $hookable_fns " in
1710fbc03982Smrg      *" $1 "*) ;;
17113d05230fSmrg      *) func_fatal_error "'$1' does not support hook functions." ;;
1712fbc03982Smrg    esac
1713fbc03982Smrg
1714fbc03982Smrg    eval _G_hook_fns=\$$1_hooks; shift
1715fbc03982Smrg
1716fbc03982Smrg    for _G_hook in $_G_hook_fns; do
17173d05230fSmrg      func_unset "${_G_hook}_result"
17183d05230fSmrg      eval $_G_hook '${1+"$@"}'
17193d05230fSmrg      func_propagate_result $_G_hook func_run_hooks
17203d05230fSmrg      if $func_propagate_result_result; then
17213d05230fSmrg        eval set dummy "$func_run_hooks_result"; shift
17223d05230fSmrg      fi
1723fbc03982Smrg    done
1724fbc03982Smrg}
1725fbc03982Smrg
1726fbc03982Smrg
1727fbc03982Smrg
1728fbc03982Smrg## --------------- ##
1729fbc03982Smrg## Option parsing. ##
1730fbc03982Smrg## --------------- ##
1731fbc03982Smrg
1732fbc03982Smrg# In order to add your own option parsing hooks, you must accept the
17333d05230fSmrg# full positional parameter list from your hook function.  You may remove
17343d05230fSmrg# or edit any options that you action, and then pass back the remaining
17353d05230fSmrg# unprocessed options in '<hooked_function_name>_result', escaped
17363d05230fSmrg# suitably for 'eval'.
17373d05230fSmrg#
17383d05230fSmrg# The '<hooked_function_name>_result' variable is automatically unset
17393d05230fSmrg# before your hook gets called; for best performance, only set the
17403d05230fSmrg# *_result variable when necessary (i.e. don't call the 'func_quote'
17413d05230fSmrg# function unnecessarily because it can be an expensive operation on some
17423d05230fSmrg# machines).
17433d05230fSmrg#
17443d05230fSmrg# Like this:
1745fbc03982Smrg#
1746fbc03982Smrg#    my_options_prep ()
1747fbc03982Smrg#    {
1748fbc03982Smrg#        $debug_cmd
1749fbc03982Smrg#
1750fbc03982Smrg#        # Extend the existing usage message.
1751fbc03982Smrg#        usage_message=$usage_message'
1752fbc03982Smrg#      -s, --silent       don'\''t print informational messages
1753fbc03982Smrg#    '
17543d05230fSmrg#        # No change in '$@' (ignored completely by this hook).  Leave
17553d05230fSmrg#        # my_options_prep_result variable intact.
1756fbc03982Smrg#    }
1757fbc03982Smrg#    func_add_hook func_options_prep my_options_prep
1758fbc03982Smrg#
1759fbc03982Smrg#
1760fbc03982Smrg#    my_silent_option ()
1761fbc03982Smrg#    {
1762fbc03982Smrg#        $debug_cmd
1763fbc03982Smrg#
17643d05230fSmrg#        args_changed=false
17653d05230fSmrg#
17663d05230fSmrg#        # Note that, for efficiency, we parse as many options as we can
1767fbc03982Smrg#        # recognise in a loop before passing the remainder back to the
1768fbc03982Smrg#        # caller on the first unrecognised argument we encounter.
1769fbc03982Smrg#        while test $# -gt 0; do
1770fbc03982Smrg#          opt=$1; shift
1771fbc03982Smrg#          case $opt in
17723d05230fSmrg#            --silent|-s) opt_silent=:
17733d05230fSmrg#                         args_changed=:
17743d05230fSmrg#                         ;;
1775fbc03982Smrg#            # Separate non-argument short options:
1776fbc03982Smrg#            -s*)         func_split_short_opt "$_G_opt"
1777fbc03982Smrg#                         set dummy "$func_split_short_opt_name" \
1778fbc03982Smrg#                             "-$func_split_short_opt_arg" ${1+"$@"}
1779fbc03982Smrg#                         shift
17803d05230fSmrg#                         args_changed=:
1781fbc03982Smrg#                         ;;
17823d05230fSmrg#            *)           # Make sure the first unrecognised option "$_G_opt"
17833d05230fSmrg#                         # is added back to "$@" in case we need it later,
17843d05230fSmrg#                         # if $args_changed was set to 'true'.
17853d05230fSmrg#                         set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
1786fbc03982Smrg#          esac
1787fbc03982Smrg#        done
1788fbc03982Smrg#
17893d05230fSmrg#        # Only call 'func_quote' here if we processed at least one argument.
17903d05230fSmrg#        if $args_changed; then
17913d05230fSmrg#          func_quote eval ${1+"$@"}
17923d05230fSmrg#          my_silent_option_result=$func_quote_result
17933d05230fSmrg#        fi
1794fbc03982Smrg#    }
1795fbc03982Smrg#    func_add_hook func_parse_options my_silent_option
1796fbc03982Smrg#
1797fbc03982Smrg#
1798fbc03982Smrg#    my_option_validation ()
1799fbc03982Smrg#    {
1800fbc03982Smrg#        $debug_cmd
1801fbc03982Smrg#
1802fbc03982Smrg#        $opt_silent && $opt_verbose && func_fatal_help "\
1803fbc03982Smrg#    '--silent' and '--verbose' options are mutually exclusive."
1804fbc03982Smrg#    }
1805fbc03982Smrg#    func_add_hook func_validate_options my_option_validation
1806fbc03982Smrg#
18073d05230fSmrg# You'll also need to manually amend $usage_message to reflect the extra
1808fbc03982Smrg# options you parse.  It's preferable to append if you can, so that
1809fbc03982Smrg# multiple option parsing hooks can be added safely.
1810fbc03982Smrg
1811fbc03982Smrg
18123d05230fSmrg# func_options_finish [ARG]...
18133d05230fSmrg# ----------------------------
18143d05230fSmrg# Finishing the option parse loop (call 'func_options' hooks ATM).
18153d05230fSmrgfunc_options_finish ()
18163d05230fSmrg{
18173d05230fSmrg    $debug_cmd
18183d05230fSmrg
18193d05230fSmrg    func_run_hooks func_options ${1+"$@"}
18203d05230fSmrg    func_propagate_result func_run_hooks func_options_finish
18213d05230fSmrg}
18223d05230fSmrg
18233d05230fSmrg
1824fbc03982Smrg# func_options [ARG]...
1825fbc03982Smrg# ---------------------
1826fbc03982Smrg# All the functions called inside func_options are hookable. See the
1827fbc03982Smrg# individual implementations for details.
1828fbc03982Smrgfunc_hookable func_options
1829fbc03982Smrgfunc_options ()
1830ed6f5d66Smrg{
1831fbc03982Smrg    $debug_cmd
1832ed6f5d66Smrg
18333d05230fSmrg    _G_options_quoted=false
1834ed6f5d66Smrg
18353d05230fSmrg    for my_func in options_prep parse_options validate_options options_finish
18363d05230fSmrg    do
18373d05230fSmrg      func_unset func_${my_func}_result
18383d05230fSmrg      func_unset func_run_hooks_result
18393d05230fSmrg      eval func_$my_func '${1+"$@"}'
18403d05230fSmrg      func_propagate_result func_$my_func func_options
18413d05230fSmrg      if $func_propagate_result_result; then
18423d05230fSmrg        eval set dummy "$func_options_result"; shift
18433d05230fSmrg        _G_options_quoted=:
18443d05230fSmrg      fi
18453d05230fSmrg    done
1846fbc03982Smrg
18473d05230fSmrg    $_G_options_quoted || {
18483d05230fSmrg      # As we (func_options) are top-level options-parser function and
18493d05230fSmrg      # nobody quoted "$@" for us yet, we need to do it explicitly for
18503d05230fSmrg      # caller.
18513d05230fSmrg      func_quote eval ${1+"$@"}
18523d05230fSmrg      func_options_result=$func_quote_result
18533d05230fSmrg    }
1854ed6f5d66Smrg}
1855ed6f5d66Smrg
1856ed6f5d66Smrg
1857fbc03982Smrg# func_options_prep [ARG]...
1858fbc03982Smrg# --------------------------
1859fbc03982Smrg# All initialisations required before starting the option parse loop.
1860fbc03982Smrg# Note that when calling hook functions, we pass through the list of
1861fbc03982Smrg# positional parameters.  If a hook function modifies that list, and
18623d05230fSmrg# needs to propagate that back to rest of this script, then the complete
18633d05230fSmrg# modified list must be put in 'func_run_hooks_result' before returning.
1864fbc03982Smrgfunc_hookable func_options_prep
1865fbc03982Smrgfunc_options_prep ()
1866ed6f5d66Smrg{
1867fbc03982Smrg    $debug_cmd
1868ed6f5d66Smrg
1869fbc03982Smrg    # Option defaults:
1870fbc03982Smrg    opt_verbose=false
1871fbc03982Smrg    opt_warning_types=
1872ed6f5d66Smrg
1873fbc03982Smrg    func_run_hooks func_options_prep ${1+"$@"}
18743d05230fSmrg    func_propagate_result func_run_hooks func_options_prep
1875ed6f5d66Smrg}
1876ed6f5d66Smrg
1877fbc03982Smrg
1878fbc03982Smrg# func_parse_options [ARG]...
1879fbc03982Smrg# ---------------------------
1880fbc03982Smrg# The main option parsing loop.
1881fbc03982Smrgfunc_hookable func_parse_options
1882fbc03982Smrgfunc_parse_options ()
1883ed6f5d66Smrg{
1884fbc03982Smrg    $debug_cmd
1885fbc03982Smrg
18863d05230fSmrg    _G_parse_options_requote=false
1887fbc03982Smrg    # this just eases exit handling
1888fbc03982Smrg    while test $# -gt 0; do
1889fbc03982Smrg      # Defer to hook functions for initial option parsing, so they
1890fbc03982Smrg      # get priority in the event of reusing an option name.
1891fbc03982Smrg      func_run_hooks func_parse_options ${1+"$@"}
18923d05230fSmrg      func_propagate_result func_run_hooks func_parse_options
18933d05230fSmrg      if $func_propagate_result_result; then
18943d05230fSmrg        eval set dummy "$func_parse_options_result"; shift
18953d05230fSmrg        # Even though we may have changed "$@", we passed the "$@" array
18963d05230fSmrg        # down into the hook and it quoted it for us (because we are in
18973d05230fSmrg        # this if-branch).  No need to quote it again.
18983d05230fSmrg        _G_parse_options_requote=false
18993d05230fSmrg      fi
1900fbc03982Smrg
1901fbc03982Smrg      # Break out of the loop if we already parsed every option.
1902fbc03982Smrg      test $# -gt 0 || break
1903fbc03982Smrg
19043d05230fSmrg      # We expect that one of the options parsed in this function matches
19053d05230fSmrg      # and thus we remove _G_opt from "$@" and need to re-quote.
19063d05230fSmrg      _G_match_parse_options=:
1907fbc03982Smrg      _G_opt=$1
1908fbc03982Smrg      shift
1909fbc03982Smrg      case $_G_opt in
1910fbc03982Smrg        --debug|-x)   debug_cmd='set -x'
19113d05230fSmrg                      func_echo "enabling shell trace mode" >&2
1912fbc03982Smrg                      $debug_cmd
1913fbc03982Smrg                      ;;
1914fbc03982Smrg
1915fbc03982Smrg        --no-warnings|--no-warning|--no-warn)
1916fbc03982Smrg                      set dummy --warnings none ${1+"$@"}
1917fbc03982Smrg                      shift
1918fbc03982Smrg		      ;;
1919fbc03982Smrg
1920fbc03982Smrg        --warnings|--warning|-W)
19213d05230fSmrg                      if test $# = 0 && func_missing_arg $_G_opt; then
19223d05230fSmrg                        _G_parse_options_requote=:
19233d05230fSmrg                        break
19243d05230fSmrg                      fi
1925fbc03982Smrg                      case " $warning_categories $1" in
1926fbc03982Smrg                        *" $1 "*)
1927fbc03982Smrg                          # trailing space prevents matching last $1 above
1928fbc03982Smrg                          func_append_uniq opt_warning_types " $1"
1929fbc03982Smrg                          ;;
1930fbc03982Smrg                        *all)
1931fbc03982Smrg                          opt_warning_types=$warning_categories
1932fbc03982Smrg                          ;;
1933fbc03982Smrg                        *none)
1934fbc03982Smrg                          opt_warning_types=none
1935fbc03982Smrg                          warning_func=:
1936fbc03982Smrg                          ;;
1937fbc03982Smrg                        *error)
1938fbc03982Smrg                          opt_warning_types=$warning_categories
1939fbc03982Smrg                          warning_func=func_fatal_error
1940fbc03982Smrg                          ;;
1941fbc03982Smrg                        *)
1942fbc03982Smrg                          func_fatal_error \
1943fbc03982Smrg                             "unsupported warning category: '$1'"
1944fbc03982Smrg                          ;;
1945fbc03982Smrg                      esac
1946fbc03982Smrg                      shift
1947fbc03982Smrg                      ;;
1948fbc03982Smrg
1949fbc03982Smrg        --verbose|-v) opt_verbose=: ;;
1950fbc03982Smrg        --version)    func_version ;;
1951fbc03982Smrg        -\?|-h)       func_usage ;;
1952fbc03982Smrg        --help)       func_help ;;
1953fbc03982Smrg
1954fbc03982Smrg	# Separate optargs to long options (plugins may need this):
1955fbc03982Smrg	--*=*)        func_split_equals "$_G_opt"
1956fbc03982Smrg	              set dummy "$func_split_equals_lhs" \
1957fbc03982Smrg                          "$func_split_equals_rhs" ${1+"$@"}
1958fbc03982Smrg                      shift
1959fbc03982Smrg                      ;;
1960fbc03982Smrg
1961fbc03982Smrg       # Separate optargs to short options:
1962fbc03982Smrg        -W*)
1963fbc03982Smrg                      func_split_short_opt "$_G_opt"
1964fbc03982Smrg                      set dummy "$func_split_short_opt_name" \
1965fbc03982Smrg                          "$func_split_short_opt_arg" ${1+"$@"}
1966fbc03982Smrg                      shift
1967fbc03982Smrg                      ;;
1968fbc03982Smrg
1969fbc03982Smrg        # Separate non-argument short options:
1970fbc03982Smrg        -\?*|-h*|-v*|-x*)
1971fbc03982Smrg                      func_split_short_opt "$_G_opt"
1972fbc03982Smrg                      set dummy "$func_split_short_opt_name" \
1973fbc03982Smrg                          "-$func_split_short_opt_arg" ${1+"$@"}
1974fbc03982Smrg                      shift
1975fbc03982Smrg                      ;;
1976fbc03982Smrg
19773d05230fSmrg        --)           _G_parse_options_requote=: ; break ;;
1978fbc03982Smrg        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
19793d05230fSmrg        *)            set dummy "$_G_opt" ${1+"$@"}; shift
19803d05230fSmrg                      _G_match_parse_options=false
19813d05230fSmrg                      break
19823d05230fSmrg                      ;;
1983fbc03982Smrg      esac
19843d05230fSmrg
19853d05230fSmrg      if $_G_match_parse_options; then
19863d05230fSmrg        _G_parse_options_requote=:
19873d05230fSmrg      fi
1988fbc03982Smrg    done
1989fbc03982Smrg
19903d05230fSmrg    if $_G_parse_options_requote; then
19913d05230fSmrg      # save modified positional parameters for caller
19923d05230fSmrg      func_quote eval ${1+"$@"}
19933d05230fSmrg      func_parse_options_result=$func_quote_result
19943d05230fSmrg    fi
1995ed6f5d66Smrg}
1996ed6f5d66Smrg
1997ed6f5d66Smrg
1998fbc03982Smrg# func_validate_options [ARG]...
1999fbc03982Smrg# ------------------------------
2000fbc03982Smrg# Perform any sanity checks on option settings and/or unconsumed
2001fbc03982Smrg# arguments.
2002fbc03982Smrgfunc_hookable func_validate_options
2003fbc03982Smrgfunc_validate_options ()
2004ed6f5d66Smrg{
2005fbc03982Smrg    $debug_cmd
2006ed6f5d66Smrg
2007fbc03982Smrg    # Display all warnings if -W was not given.
2008fbc03982Smrg    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
2009fbc03982Smrg
2010fbc03982Smrg    func_run_hooks func_validate_options ${1+"$@"}
20113d05230fSmrg    func_propagate_result func_run_hooks func_validate_options
2012fbc03982Smrg
2013fbc03982Smrg    # Bail if the options were screwed!
2014fbc03982Smrg    $exit_cmd $EXIT_FAILURE
2015ed6f5d66Smrg}
2016ed6f5d66Smrg
2017fbc03982Smrg
2018fbc03982Smrg
2019fbc03982Smrg## ----------------- ##
2020fbc03982Smrg## Helper functions. ##
2021fbc03982Smrg## ----------------- ##
2022fbc03982Smrg
2023fbc03982Smrg# This section contains the helper functions used by the rest of the
2024fbc03982Smrg# hookable option parser framework in ascii-betical order.
2025fbc03982Smrg
2026fbc03982Smrg
2027fbc03982Smrg# func_fatal_help ARG...
2028fbc03982Smrg# ----------------------
2029fbc03982Smrg# Echo program name prefixed message to standard error, followed by
2030fbc03982Smrg# a help hint, and exit.
2031fbc03982Smrgfunc_fatal_help ()
2032ed6f5d66Smrg{
2033fbc03982Smrg    $debug_cmd
2034ed6f5d66Smrg
2035fbc03982Smrg    eval \$ECHO \""Usage: $usage"\"
2036fbc03982Smrg    eval \$ECHO \""$fatal_help"\"
2037fbc03982Smrg    func_error ${1+"$@"}
2038fbc03982Smrg    exit $EXIT_FAILURE
2039ed6f5d66Smrg}
2040ed6f5d66Smrg
2041fbc03982Smrg
2042fbc03982Smrg# func_help
2043fbc03982Smrg# ---------
2044fbc03982Smrg# Echo long help message to standard output and exit.
2045ed6f5d66Smrgfunc_help ()
2046ed6f5d66Smrg{
2047fbc03982Smrg    $debug_cmd
2048fbc03982Smrg
2049fbc03982Smrg    func_usage_message
2050fbc03982Smrg    $ECHO "$long_help_message"
2051fbc03982Smrg    exit 0
2052ed6f5d66Smrg}
2053ed6f5d66Smrg
2054fbc03982Smrg
2055fbc03982Smrg# func_missing_arg ARGNAME
2056fbc03982Smrg# ------------------------
2057ed6f5d66Smrg# Echo program name prefixed message to standard error and set global
2058ed6f5d66Smrg# exit_cmd.
2059ed6f5d66Smrgfunc_missing_arg ()
2060ed6f5d66Smrg{
2061fbc03982Smrg    $debug_cmd
2062ed6f5d66Smrg
2063fbc03982Smrg    func_error "Missing argument for '$1'."
2064ed6f5d66Smrg    exit_cmd=exit
2065ed6f5d66Smrg}
2066ed6f5d66Smrg
2067ed6f5d66Smrg
2068fbc03982Smrg# func_split_equals STRING
2069fbc03982Smrg# ------------------------
20703d05230fSmrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables
20713d05230fSmrg# after splitting STRING at the '=' sign.
2072fbc03982Smrgtest -z "$_G_HAVE_XSI_OPS" \
2073fbc03982Smrg    && (eval 'x=a/b/c;
2074fbc03982Smrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
2075fbc03982Smrg    && _G_HAVE_XSI_OPS=yes
2076fbc03982Smrg
2077fbc03982Smrgif test yes = "$_G_HAVE_XSI_OPS"
2078fbc03982Smrgthen
2079fbc03982Smrg  # This is an XSI compatible shell, allowing a faster implementation...
2080fbc03982Smrg  eval 'func_split_equals ()
2081fbc03982Smrg  {
2082fbc03982Smrg      $debug_cmd
2083fbc03982Smrg
2084fbc03982Smrg      func_split_equals_lhs=${1%%=*}
2085fbc03982Smrg      func_split_equals_rhs=${1#*=}
20863d05230fSmrg      if test "x$func_split_equals_lhs" = "x$1"; then
20873d05230fSmrg        func_split_equals_rhs=
20883d05230fSmrg      fi
2089fbc03982Smrg  }'
2090fbc03982Smrgelse
2091fbc03982Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
2092fbc03982Smrg  func_split_equals ()
2093fbc03982Smrg  {
2094fbc03982Smrg      $debug_cmd
2095fbc03982Smrg
2096fbc03982Smrg      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
2097fbc03982Smrg      func_split_equals_rhs=
20983d05230fSmrg      test "x$func_split_equals_lhs=" = "x$1" \
2099fbc03982Smrg        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
2100fbc03982Smrg  }
2101fbc03982Smrgfi #func_split_equals
2102fbc03982Smrg
2103fbc03982Smrg
2104fbc03982Smrg# func_split_short_opt SHORTOPT
2105fbc03982Smrg# -----------------------------
2106ed6f5d66Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
2107ed6f5d66Smrg# variables after splitting SHORTOPT after the 2nd character.
2108fbc03982Smrgif test yes = "$_G_HAVE_XSI_OPS"
2109fbc03982Smrgthen
2110fbc03982Smrg  # This is an XSI compatible shell, allowing a faster implementation...
2111fbc03982Smrg  eval 'func_split_short_opt ()
2112fbc03982Smrg  {
2113fbc03982Smrg      $debug_cmd
2114fbc03982Smrg
2115fbc03982Smrg      func_split_short_opt_arg=${1#??}
2116fbc03982Smrg      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
2117fbc03982Smrg  }'
2118fbc03982Smrgelse
2119fbc03982Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
2120fbc03982Smrg  func_split_short_opt ()
2121fbc03982Smrg  {
2122fbc03982Smrg      $debug_cmd
2123fbc03982Smrg
21243d05230fSmrg      func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'`
2125fbc03982Smrg      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
2126fbc03982Smrg  }
2127fbc03982Smrgfi #func_split_short_opt
2128fbc03982Smrg
2129fbc03982Smrg
2130fbc03982Smrg# func_usage
2131fbc03982Smrg# ----------
2132fbc03982Smrg# Echo short help message to standard output and exit.
2133fbc03982Smrgfunc_usage ()
2134ed6f5d66Smrg{
2135fbc03982Smrg    $debug_cmd
2136ed6f5d66Smrg
2137fbc03982Smrg    func_usage_message
2138fbc03982Smrg    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
2139fbc03982Smrg    exit 0
2140fbc03982Smrg}
2141ed6f5d66Smrg
2142ed6f5d66Smrg
2143fbc03982Smrg# func_usage_message
2144fbc03982Smrg# ------------------
2145fbc03982Smrg# Echo short help message to standard output.
2146fbc03982Smrgfunc_usage_message ()
2147ed6f5d66Smrg{
2148fbc03982Smrg    $debug_cmd
2149ed6f5d66Smrg
2150fbc03982Smrg    eval \$ECHO \""Usage: $usage"\"
2151fbc03982Smrg    echo
2152fbc03982Smrg    $SED -n 's|^# ||
2153fbc03982Smrg        /^Written by/{
2154fbc03982Smrg          x;p;x
2155fbc03982Smrg        }
2156fbc03982Smrg	h
2157fbc03982Smrg	/^Written by/q' < "$progpath"
2158fbc03982Smrg    echo
2159fbc03982Smrg    eval \$ECHO \""$usage_message"\"
2160fbc03982Smrg}
2161ed6f5d66Smrg
2162ed6f5d66Smrg
2163fbc03982Smrg# func_version
2164fbc03982Smrg# ------------
2165fbc03982Smrg# Echo version message to standard output and exit.
21663d05230fSmrg# The version message is extracted from the calling file's header
21673d05230fSmrg# comments, with leading '# ' stripped:
21683d05230fSmrg#   1. First display the progname and version
21693d05230fSmrg#   2. Followed by the header comment line matching  /^# Written by /
21703d05230fSmrg#   3. Then a blank line followed by the first following line matching
21713d05230fSmrg#      /^# Copyright /
21723d05230fSmrg#   4. Immediately followed by any lines between the previous matches,
21733d05230fSmrg#      except lines preceding the intervening completely blank line.
21743d05230fSmrg# For example, see the header comments of this file.
2175fbc03982Smrgfunc_version ()
2176fbc03982Smrg{
2177fbc03982Smrg    $debug_cmd
2178ed6f5d66Smrg
2179fbc03982Smrg    printf '%s\n' "$progname $scriptversion"
2180fbc03982Smrg    $SED -n '
21813d05230fSmrg        /^# Written by /!b
21823d05230fSmrg        s|^# ||; p; n
21833d05230fSmrg
21843d05230fSmrg        :fwd2blnk
21853d05230fSmrg        /./ {
21863d05230fSmrg          n
21873d05230fSmrg          b fwd2blnk
2188fbc03982Smrg        }
21893d05230fSmrg        p; n
21903d05230fSmrg
21913d05230fSmrg        :holdwrnt
21923d05230fSmrg        s|^# ||
21933d05230fSmrg        s|^# *$||
21943d05230fSmrg        /^Copyright /!{
21953d05230fSmrg          /./H
21963d05230fSmrg          n
21973d05230fSmrg          b holdwrnt
2198fbc03982Smrg        }
21993d05230fSmrg
22003d05230fSmrg        s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
22013d05230fSmrg        G
22023d05230fSmrg        s|\(\n\)\n*|\1|g
22033d05230fSmrg        p; q' < "$progpath"
2204ed6f5d66Smrg
2205fbc03982Smrg    exit $?
2206fbc03982Smrg}
2207ed6f5d66Smrg
2208ed6f5d66Smrg
2209fbc03982Smrg# Local variables:
2210fbc03982Smrg# mode: shell-script
2211fbc03982Smrg# sh-indentation: 2
2212fbc03982Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
22133d05230fSmrg# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC"
2214fbc03982Smrg# time-stamp-time-zone: "UTC"
2215fbc03982Smrg# End:
2216ed6f5d66Smrg
2217fbc03982Smrg# Set a version string.
2218a3680546Smrgscriptversion='(GNU libtool) 2.5.4'
2219a3680546Smrg
2220a3680546Smrg# func_version
2221a3680546Smrg# ------------
2222a3680546Smrg# Echo version message to standard output and exit.
2223a3680546Smrgfunc_version ()
2224a3680546Smrg{
2225a3680546Smrg    $debug_cmd
2226a3680546Smrg
2227a3680546Smrg	year=`date +%Y`
2228a3680546Smrg
2229a3680546Smrg	cat <<EOF
2230a3680546Smrg$progname $scriptversion
2231a3680546SmrgCopyright (C) $year Free Software Foundation, Inc.
2232a3680546SmrgLicense GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl.html>
2233a3680546SmrgThis is free software: you are free to change and redistribute it.
2234a3680546SmrgThere is NO WARRANTY, to the extent permitted by law.
2235a3680546Smrg
2236a3680546SmrgOriginally written by Gordon Matzigkeit, 1996
2237a3680546Smrg(See AUTHORS for complete contributor listing)
2238a3680546SmrgEOF
2239a3680546Smrg
2240a3680546Smrg    exit $?
2241a3680546Smrg}
2242ed6f5d66Smrg
2243ed6f5d66Smrg
2244fbc03982Smrg# func_echo ARG...
2245fbc03982Smrg# ----------------
2246fbc03982Smrg# Libtool also displays the current mode in messages, so override
2247fbc03982Smrg# funclib.sh func_echo with this custom definition.
2248fbc03982Smrgfunc_echo ()
2249ed6f5d66Smrg{
2250fbc03982Smrg    $debug_cmd
2251ed6f5d66Smrg
2252fbc03982Smrg    _G_message=$*
2253fbc03982Smrg
2254fbc03982Smrg    func_echo_IFS=$IFS
2255fbc03982Smrg    IFS=$nl
2256fbc03982Smrg    for _G_line in $_G_message; do
2257fbc03982Smrg      IFS=$func_echo_IFS
2258fbc03982Smrg      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
2259fbc03982Smrg    done
2260fbc03982Smrg    IFS=$func_echo_IFS
2261fbc03982Smrg}
2262ed6f5d66Smrg
2263ed6f5d66Smrg
2264fbc03982Smrg## ---------------- ##
2265fbc03982Smrg## Options parsing. ##
2266fbc03982Smrg## ---------------- ##
2267fbc03982Smrg
2268fbc03982Smrg# Hook in the functions to make sure our own options are parsed during
2269fbc03982Smrg# the option parsing loop.
2270fbc03982Smrg
2271fbc03982Smrgusage='$progpath [OPTION]... [MODE-ARG]...'
2272fbc03982Smrg
2273fbc03982Smrg# Short help message in response to '-h'.
2274fbc03982Smrgusage_message="Options:
2275a3680546Smrg       --config                 show all configuration variables
2276a3680546Smrg       --debug                  enable verbose shell tracing
2277a3680546Smrg   -n, --dry-run                display commands without modifying any files
2278a3680546Smrg       --features               display basic configuration information
2279a3680546Smrg       --finish                 use operation '--mode=finish'
2280a3680546Smrg       --mode=MODE              use operation mode MODE
2281a3680546Smrg       --no-finish              don't update shared library cache
2282a3680546Smrg       --no-quiet, --no-silent  print default informational messages
2283a3680546Smrg       --no-warnings            equivalent to '-Wnone'
2284a3680546Smrg       --preserve-dup-deps      don't remove duplicate dependency libraries
2285a3680546Smrg       --quiet, --silent        don't print informational messages
2286a3680546Smrg       --reorder-cache=DIRS     reorder shared library cache for preferred DIRS
2287a3680546Smrg       --tag=TAG                use configuration variables from tag TAG
2288a3680546Smrg   -v, --verbose                print more informational messages than default
2289a3680546Smrg       --version                print version information
2290a3680546Smrg   -W, --warnings=CATEGORY      report the warnings falling in CATEGORY [all]
2291a3680546Smrg   -h, --help, --help-all       print short, long, or detailed help message
2292fbc03982Smrg"
2293ed6f5d66Smrg
2294fbc03982Smrg# Additional text appended to 'usage_message' in response to '--help'.
2295fbc03982Smrgfunc_help ()
2296ed6f5d66Smrg{
2297fbc03982Smrg    $debug_cmd
2298fbc03982Smrg
2299fbc03982Smrg    func_usage_message
2300fbc03982Smrg    $ECHO "$long_help_message
2301fbc03982Smrg
2302fbc03982SmrgMODE must be one of the following:
2303fbc03982Smrg
2304fbc03982Smrg       clean           remove files from the build directory
2305fbc03982Smrg       compile         compile a source file into a libtool object
2306fbc03982Smrg       execute         automatically set library path, then run a program
2307fbc03982Smrg       finish          complete the installation of libtool libraries
2308fbc03982Smrg       install         install libraries or executables
2309fbc03982Smrg       link            create a library or an executable
2310fbc03982Smrg       uninstall       remove libraries from an installed directory
2311fbc03982Smrg
2312fbc03982SmrgMODE-ARGS vary depending on the MODE.  When passed as first option,
2313fbc03982Smrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
2314fbc03982SmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE.
2315fbc03982Smrg
2316fbc03982SmrgWhen reporting a bug, please describe a test case to reproduce it and
2317fbc03982Smrginclude the following information:
2318fbc03982Smrg
2319fbc03982Smrg       host-triplet:   $host
2320fbc03982Smrg       shell:          $SHELL
2321fbc03982Smrg       compiler:       $LTCC
2322fbc03982Smrg       compiler flags: $LTCFLAGS
2323fbc03982Smrg       linker:         $LD (gnu? $with_gnu_ld)
2324a3680546Smrg       version:        $progname $scriptversion
2325fbc03982Smrg       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
2326fbc03982Smrg       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
2327fbc03982Smrg
2328fbc03982SmrgReport bugs to <bug-libtool@gnu.org>.
2329a3680546SmrgGNU libtool home page: <https://www.gnu.org/software/libtool/>.
2330a3680546SmrgGeneral help using GNU software: <https://www.gnu.org/gethelp/>."
2331fbc03982Smrg    exit 0
2332fbc03982Smrg}
2333ed6f5d66Smrg
2334ed6f5d66Smrg
2335fbc03982Smrg# func_lo2o OBJECT-NAME
2336fbc03982Smrg# ---------------------
2337fbc03982Smrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
2338fbc03982Smrg# object suffix.
2339ed6f5d66Smrg
2340fbc03982Smrglo2o=s/\\.lo\$/.$objext/
2341fbc03982Smrgo2lo=s/\\.$objext\$/.lo/
2342ed6f5d66Smrg
2343fbc03982Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
2344fbc03982Smrg  eval 'func_lo2o ()
2345fbc03982Smrg  {
2346fbc03982Smrg    case $1 in
2347fbc03982Smrg      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
2348fbc03982Smrg      *   ) func_lo2o_result=$1               ;;
2349fbc03982Smrg    esac
2350fbc03982Smrg  }'
2351fbc03982Smrg
2352fbc03982Smrg  # func_xform LIBOBJ-OR-SOURCE
2353fbc03982Smrg  # ---------------------------
2354fbc03982Smrg  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
2355fbc03982Smrg  # suffix to a '.lo' libtool-object suffix.
2356fbc03982Smrg  eval 'func_xform ()
2357fbc03982Smrg  {
2358fbc03982Smrg    func_xform_result=${1%.*}.lo
2359fbc03982Smrg  }'
2360fbc03982Smrgelse
2361fbc03982Smrg  # ...otherwise fall back to using sed.
2362fbc03982Smrg  func_lo2o ()
2363fbc03982Smrg  {
2364fbc03982Smrg    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
2365fbc03982Smrg  }
2366fbc03982Smrg
2367fbc03982Smrg  func_xform ()
2368fbc03982Smrg  {
2369fbc03982Smrg    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
2370fbc03982Smrg  }
2371fbc03982Smrgfi
2372ed6f5d66Smrg
2373ed6f5d66Smrg
2374fbc03982Smrg# func_fatal_configuration ARG...
2375fbc03982Smrg# -------------------------------
2376ed6f5d66Smrg# Echo program name prefixed message to standard error, followed by
2377ed6f5d66Smrg# a configuration failure hint, and exit.
2378ed6f5d66Smrgfunc_fatal_configuration ()
2379ed6f5d66Smrg{
23803d05230fSmrg    func_fatal_error ${1+"$@"} \
2381fbc03982Smrg      "See the $PACKAGE documentation for more information." \
2382fbc03982Smrg      "Fatal configuration error."
2383ed6f5d66Smrg}
2384ed6f5d66Smrg
2385ed6f5d66Smrg
2386ed6f5d66Smrg# func_config
2387fbc03982Smrg# -----------
2388ed6f5d66Smrg# Display the configuration for all the tags in this script.
2389ed6f5d66Smrgfunc_config ()
2390ed6f5d66Smrg{
2391ed6f5d66Smrg    re_begincf='^# ### BEGIN LIBTOOL'
2392ed6f5d66Smrg    re_endcf='^# ### END LIBTOOL'
2393ed6f5d66Smrg
2394ed6f5d66Smrg    # Default configuration.
2395ed6f5d66Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
2396ed6f5d66Smrg
2397ed6f5d66Smrg    # Now print the configurations for the tags.
2398ed6f5d66Smrg    for tagname in $taglist; do
2399ed6f5d66Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
2400ed6f5d66Smrg    done
2401ed6f5d66Smrg
2402ed6f5d66Smrg    exit $?
2403ed6f5d66Smrg}
2404ed6f5d66Smrg
2405fbc03982Smrg
2406ed6f5d66Smrg# func_features
2407fbc03982Smrg# -------------
2408ed6f5d66Smrg# Display the features supported by this script.
2409ed6f5d66Smrgfunc_features ()
2410ed6f5d66Smrg{
2411ed6f5d66Smrg    echo "host: $host"
2412fbc03982Smrg    if test yes = "$build_libtool_libs"; then
2413ed6f5d66Smrg      echo "enable shared libraries"
2414ed6f5d66Smrg    else
2415ed6f5d66Smrg      echo "disable shared libraries"
2416ed6f5d66Smrg    fi
2417fbc03982Smrg    if test yes = "$build_old_libs"; then
2418ed6f5d66Smrg      echo "enable static libraries"
2419ed6f5d66Smrg    else
2420ed6f5d66Smrg      echo "disable static libraries"
2421ed6f5d66Smrg    fi
2422ed6f5d66Smrg
2423ed6f5d66Smrg    exit $?
2424ed6f5d66Smrg}
2425ed6f5d66Smrg
2426fbc03982Smrg
2427fbc03982Smrg# func_enable_tag TAGNAME
2428fbc03982Smrg# -----------------------
2429ed6f5d66Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
2430ed6f5d66Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
2431ed6f5d66Smrg# variable here.
2432ed6f5d66Smrgfunc_enable_tag ()
2433ed6f5d66Smrg{
2434fbc03982Smrg    # Global variable:
2435fbc03982Smrg    tagname=$1
2436ed6f5d66Smrg
2437fbc03982Smrg    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
2438fbc03982Smrg    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
2439fbc03982Smrg    sed_extractcf=/$re_begincf/,/$re_endcf/p
2440ed6f5d66Smrg
2441fbc03982Smrg    # Validate tagname.
2442fbc03982Smrg    case $tagname in
2443fbc03982Smrg      *[!-_A-Za-z0-9,/]*)
2444fbc03982Smrg        func_fatal_error "invalid tag name: $tagname"
2445fbc03982Smrg        ;;
2446fbc03982Smrg    esac
2447ed6f5d66Smrg
2448fbc03982Smrg    # Don't test for the "default" C tag, as we know it's
2449fbc03982Smrg    # there but not specially marked.
2450fbc03982Smrg    case $tagname in
2451fbc03982Smrg        CC) ;;
2452ed6f5d66Smrg    *)
2453fbc03982Smrg        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
2454fbc03982Smrg	  taglist="$taglist $tagname"
2455fbc03982Smrg
2456fbc03982Smrg	  # Evaluate the configuration.  Be careful to quote the path
2457fbc03982Smrg	  # and the sed script, to avoid splitting on whitespace, but
2458fbc03982Smrg	  # also don't use non-portable quotes within backquotes within
2459fbc03982Smrg	  # quotes we have to do it in 2 steps:
2460fbc03982Smrg	  extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
2461fbc03982Smrg	  eval "$extractedcf"
2462fbc03982Smrg        else
2463fbc03982Smrg	  func_error "ignoring unknown tag $tagname"
2464fbc03982Smrg        fi
2465fbc03982Smrg        ;;
2466fbc03982Smrg    esac
2467ed6f5d66Smrg}
2468ed6f5d66Smrg
2469fbc03982Smrg
2470ed6f5d66Smrg# func_check_version_match
2471fbc03982Smrg# ------------------------
2472ed6f5d66Smrg# Ensure that we are using m4 macros, and libtool script from the same
2473ed6f5d66Smrg# release of libtool.
2474ed6f5d66Smrgfunc_check_version_match ()
2475ed6f5d66Smrg{
2476fbc03982Smrg    if test "$package_revision" != "$macro_revision"; then
2477fbc03982Smrg      if test "$VERSION" != "$macro_version"; then
2478fbc03982Smrg        if test -z "$macro_version"; then
2479fbc03982Smrg          cat >&2 <<_LT_EOF
2480ed6f5d66Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2481ed6f5d66Smrg$progname: definition of this LT_INIT comes from an older release.
2482ed6f5d66Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2483ed6f5d66Smrg$progname: and run autoconf again.
2484ed6f5d66Smrg_LT_EOF
2485fbc03982Smrg        else
2486fbc03982Smrg          cat >&2 <<_LT_EOF
2487ed6f5d66Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2488ed6f5d66Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
2489ed6f5d66Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2490ed6f5d66Smrg$progname: and run autoconf again.
2491ed6f5d66Smrg_LT_EOF
2492fbc03982Smrg        fi
2493fbc03982Smrg      else
2494fbc03982Smrg        cat >&2 <<_LT_EOF
2495ed6f5d66Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
2496ed6f5d66Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
2497ed6f5d66Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
2498ed6f5d66Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
2499ed6f5d66Smrg_LT_EOF
2500fbc03982Smrg      fi
2501ed6f5d66Smrg
2502fbc03982Smrg      exit $EXIT_MISMATCH
2503fbc03982Smrg    fi
2504ed6f5d66Smrg}
2505ed6f5d66Smrg
2506ed6f5d66Smrg
2507fbc03982Smrg# libtool_options_prep [ARG]...
2508fbc03982Smrg# -----------------------------
2509fbc03982Smrg# Preparation for options parsed by libtool.
2510fbc03982Smrglibtool_options_prep ()
2511fbc03982Smrg{
2512fbc03982Smrg    $debug_mode
2513ed6f5d66Smrg
2514fbc03982Smrg    # Option defaults:
2515fbc03982Smrg    opt_config=false
2516fbc03982Smrg    opt_dlopen=
2517fbc03982Smrg    opt_dry_run=false
2518fbc03982Smrg    opt_help=false
2519fbc03982Smrg    opt_mode=
2520a3680546Smrg    opt_reorder_cache=false
2521fbc03982Smrg    opt_preserve_dup_deps=false
2522fbc03982Smrg    opt_quiet=false
2523a3680546Smrg    opt_finishing=true
2524a3680546Smrg    opt_warning=
2525ed6f5d66Smrg
2526fbc03982Smrg    nonopt=
2527fbc03982Smrg    preserve_args=
2528ed6f5d66Smrg
25293d05230fSmrg    _G_rc_lt_options_prep=:
25303d05230fSmrg
2531fbc03982Smrg    # Shorthand for --mode=foo, only valid as the first argument
2532fbc03982Smrg    case $1 in
2533fbc03982Smrg    clean|clea|cle|cl)
2534fbc03982Smrg      shift; set dummy --mode clean ${1+"$@"}; shift
2535fbc03982Smrg      ;;
2536fbc03982Smrg    compile|compil|compi|comp|com|co|c)
2537fbc03982Smrg      shift; set dummy --mode compile ${1+"$@"}; shift
2538fbc03982Smrg      ;;
2539fbc03982Smrg    execute|execut|execu|exec|exe|ex|e)
2540fbc03982Smrg      shift; set dummy --mode execute ${1+"$@"}; shift
2541fbc03982Smrg      ;;
2542fbc03982Smrg    finish|finis|fini|fin|fi|f)
2543fbc03982Smrg      shift; set dummy --mode finish ${1+"$@"}; shift
2544fbc03982Smrg      ;;
2545fbc03982Smrg    install|instal|insta|inst|ins|in|i)
2546fbc03982Smrg      shift; set dummy --mode install ${1+"$@"}; shift
2547fbc03982Smrg      ;;
2548fbc03982Smrg    link|lin|li|l)
2549fbc03982Smrg      shift; set dummy --mode link ${1+"$@"}; shift
2550fbc03982Smrg      ;;
2551fbc03982Smrg    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
2552fbc03982Smrg      shift; set dummy --mode uninstall ${1+"$@"}; shift
2553fbc03982Smrg      ;;
25543d05230fSmrg    *)
25553d05230fSmrg      _G_rc_lt_options_prep=false
25563d05230fSmrg      ;;
2557fbc03982Smrg    esac
2558fbc03982Smrg
25593d05230fSmrg    if $_G_rc_lt_options_prep; then
25603d05230fSmrg      # Pass back the list of options.
25613d05230fSmrg      func_quote eval ${1+"$@"}
25623d05230fSmrg      libtool_options_prep_result=$func_quote_result
25633d05230fSmrg    fi
2564fbc03982Smrg}
2565fbc03982Smrgfunc_add_hook func_options_prep libtool_options_prep
2566ed6f5d66Smrg
2567ed6f5d66Smrg
2568fbc03982Smrg# libtool_parse_options [ARG]...
2569fbc03982Smrg# ---------------------------------
2570fbc03982Smrg# Provide handling for libtool specific options.
2571fbc03982Smrglibtool_parse_options ()
2572ed6f5d66Smrg{
2573fbc03982Smrg    $debug_cmd
2574ed6f5d66Smrg
25753d05230fSmrg    _G_rc_lt_parse_options=false
25763d05230fSmrg
2577fbc03982Smrg    # Perform our own loop to consume as many options as possible in
2578fbc03982Smrg    # each iteration.
2579fbc03982Smrg    while test $# -gt 0; do
25803d05230fSmrg      _G_match_lt_parse_options=:
2581fbc03982Smrg      _G_opt=$1
2582fbc03982Smrg      shift
2583fbc03982Smrg      case $_G_opt in
2584fbc03982Smrg        --dry-run|--dryrun|-n)
2585fbc03982Smrg                        opt_dry_run=:
2586fbc03982Smrg                        ;;
2587fbc03982Smrg
2588fbc03982Smrg        --config)       func_config ;;
2589fbc03982Smrg
2590fbc03982Smrg        --dlopen|-dlopen)
2591fbc03982Smrg                        opt_dlopen="${opt_dlopen+$opt_dlopen
2592fbc03982Smrg}$1"
2593fbc03982Smrg                        shift
2594fbc03982Smrg                        ;;
2595fbc03982Smrg
2596fbc03982Smrg        --preserve-dup-deps)
2597fbc03982Smrg                        opt_preserve_dup_deps=: ;;
2598fbc03982Smrg
2599fbc03982Smrg        --features)     func_features ;;
2600fbc03982Smrg
2601fbc03982Smrg        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
2602fbc03982Smrg
2603fbc03982Smrg        --help)         opt_help=: ;;
2604fbc03982Smrg
2605fbc03982Smrg        --help-all)     opt_help=': help-all' ;;
2606fbc03982Smrg
2607fbc03982Smrg        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
2608fbc03982Smrg                        opt_mode=$1
2609fbc03982Smrg                        case $1 in
2610fbc03982Smrg                          # Valid mode arguments:
2611fbc03982Smrg                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
2612fbc03982Smrg
2613fbc03982Smrg                          # Catch anything else as an error
2614a3680546Smrg                          *) func_error "invalid argument '$1' for $_G_opt"
2615fbc03982Smrg                             exit_cmd=exit
2616fbc03982Smrg                             ;;
2617fbc03982Smrg                        esac
2618fbc03982Smrg                        shift
2619fbc03982Smrg                        ;;
2620fbc03982Smrg
2621a3680546Smrg        --no-finish)
2622a3680546Smrg                        opt_finishing=false
2623a3680546Smrg                        func_append preserve_args " $_G_opt"
2624a3680546Smrg                        ;;
2625a3680546Smrg
2626fbc03982Smrg        --no-silent|--no-quiet)
2627fbc03982Smrg                        opt_quiet=false
2628fbc03982Smrg                        func_append preserve_args " $_G_opt"
2629fbc03982Smrg                        ;;
2630fbc03982Smrg
2631fbc03982Smrg        --no-warnings|--no-warning|--no-warn)
2632fbc03982Smrg                        opt_warning=false
2633fbc03982Smrg                        func_append preserve_args " $_G_opt"
2634fbc03982Smrg                        ;;
2635fbc03982Smrg
2636fbc03982Smrg        --no-verbose)
2637fbc03982Smrg                        opt_verbose=false
2638fbc03982Smrg                        func_append preserve_args " $_G_opt"
2639fbc03982Smrg                        ;;
2640fbc03982Smrg
2641a3680546Smrg        --reorder-cache)
2642a3680546Smrg                        opt_reorder_cache=true
2643a3680546Smrg                        shared_lib_dirs=$1
2644a3680546Smrg                        if test -n "$shared_lib_dirs"; then
2645a3680546Smrg                          case $1 in
2646a3680546Smrg                            # Must begin with /:
2647a3680546Smrg                            /*) ;;
2648a3680546Smrg
2649a3680546Smrg                            # Catch anything else as an error (relative paths)
2650a3680546Smrg                            *) func_error "invalid argument '$1' for $_G_opt"
2651a3680546Smrg                               func_error "absolute paths are required for $_G_opt"
2652a3680546Smrg                               exit_cmd=exit
2653a3680546Smrg                               ;;
2654a3680546Smrg                          esac
2655a3680546Smrg                        fi
2656a3680546Smrg                        shift
2657a3680546Smrg                        ;;
2658a3680546Smrg
2659fbc03982Smrg        --silent|--quiet)
2660fbc03982Smrg                        opt_quiet=:
2661fbc03982Smrg                        opt_verbose=false
2662fbc03982Smrg                        func_append preserve_args " $_G_opt"
2663fbc03982Smrg                        ;;
2664fbc03982Smrg
2665fbc03982Smrg        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
2666fbc03982Smrg                        opt_tag=$1
2667fbc03982Smrg                        func_append preserve_args " $_G_opt $1"
2668fbc03982Smrg                        func_enable_tag "$1"
2669fbc03982Smrg                        shift
2670fbc03982Smrg                        ;;
2671fbc03982Smrg
2672fbc03982Smrg        --verbose|-v)   opt_quiet=false
2673fbc03982Smrg                        opt_verbose=:
2674fbc03982Smrg                        func_append preserve_args " $_G_opt"
2675fbc03982Smrg                        ;;
2676fbc03982Smrg
26773d05230fSmrg        # An option not handled by this hook function:
26783d05230fSmrg        *)              set dummy "$_G_opt" ${1+"$@"} ; shift
26793d05230fSmrg                        _G_match_lt_parse_options=false
26803d05230fSmrg                        break
26813d05230fSmrg                        ;;
2682fbc03982Smrg      esac
26833d05230fSmrg      $_G_match_lt_parse_options && _G_rc_lt_parse_options=:
2684fbc03982Smrg    done
2685ed6f5d66Smrg
26863d05230fSmrg    if $_G_rc_lt_parse_options; then
26873d05230fSmrg      # save modified positional parameters for caller
26883d05230fSmrg      func_quote eval ${1+"$@"}
26893d05230fSmrg      libtool_parse_options_result=$func_quote_result
26903d05230fSmrg    fi
2691fbc03982Smrg}
2692fbc03982Smrgfunc_add_hook func_parse_options libtool_parse_options
2693ed6f5d66Smrg
2694ed6f5d66Smrg
2695a3680546Smrg# func_warning ARG...
2696a3680546Smrg# -------------------
2697a3680546Smrg# Libtool warnings are not categorized, so override funclib.sh
2698a3680546Smrg# func_warning with this simpler definition.
2699a3680546Smrgfunc_warning ()
2700a3680546Smrg{
2701a3680546Smrg    if $opt_warning; then
2702a3680546Smrg        $debug_cmd
2703a3680546Smrg        $warning_func ${1+"$@"}
2704a3680546Smrg    fi
2705a3680546Smrg}
2706a3680546Smrg
2707ed6f5d66Smrg
2708fbc03982Smrg# libtool_validate_options [ARG]...
2709fbc03982Smrg# ---------------------------------
2710fbc03982Smrg# Perform any sanity checks on option settings and/or unconsumed
2711fbc03982Smrg# arguments.
2712fbc03982Smrglibtool_validate_options ()
2713fbc03982Smrg{
2714fbc03982Smrg    # save first non-option argument
2715fbc03982Smrg    if test 0 -lt $#; then
2716fbc03982Smrg      nonopt=$1
2717fbc03982Smrg      shift
2718ed6f5d66Smrg    fi
2719ed6f5d66Smrg
2720fbc03982Smrg    # preserve --debug
2721fbc03982Smrg    test : = "$debug_cmd" || func_append preserve_args " --debug"
2722ed6f5d66Smrg
2723a3680546Smrg    case $host_os in
2724fbc03982Smrg      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
2725fbc03982Smrg      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
2726a3680546Smrg      cygwin* | mingw* | windows* | pw32* | cegcc* | solaris2* | os2*)
2727fbc03982Smrg        # don't eliminate duplications in $postdeps and $predeps
2728fbc03982Smrg        opt_duplicate_compiler_generated_deps=:
2729fbc03982Smrg        ;;
2730fbc03982Smrg      *)
2731fbc03982Smrg        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
2732fbc03982Smrg        ;;
2733fbc03982Smrg    esac
2734ed6f5d66Smrg
2735fbc03982Smrg    $opt_help || {
2736fbc03982Smrg      # Sanity checks first:
2737fbc03982Smrg      func_check_version_match
2738ed6f5d66Smrg
2739fbc03982Smrg      test yes != "$build_libtool_libs" \
2740fbc03982Smrg        && test yes != "$build_old_libs" \
2741fbc03982Smrg        && func_fatal_configuration "not configured to build any kind of library"
2742ed6f5d66Smrg
2743fbc03982Smrg      # Darwin sucks
2744fbc03982Smrg      eval std_shrext=\"$shrext_cmds\"
2745fbc03982Smrg
2746fbc03982Smrg      # Only execute mode is allowed to have -dlopen flags.
2747fbc03982Smrg      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
2748fbc03982Smrg        func_error "unrecognized option '-dlopen'"
2749fbc03982Smrg        $ECHO "$help" 1>&2
2750fbc03982Smrg        exit $EXIT_FAILURE
2751fbc03982Smrg      fi
2752fbc03982Smrg
2753fbc03982Smrg      # Change the help message to a mode-specific one.
2754fbc03982Smrg      generic_help=$help
2755fbc03982Smrg      help="Try '$progname --help --mode=$opt_mode' for more information."
2756fbc03982Smrg    }
2757fbc03982Smrg
2758fbc03982Smrg    # Pass back the unparsed argument list
27593d05230fSmrg    func_quote eval ${1+"$@"}
27603d05230fSmrg    libtool_validate_options_result=$func_quote_result
2761ed6f5d66Smrg}
2762fbc03982Smrgfunc_add_hook func_validate_options libtool_validate_options
2763fbc03982Smrg
2764ed6f5d66Smrg
2765fbc03982Smrg# Process options as early as possible so that --help and --version
2766fbc03982Smrg# can return quickly.
2767fbc03982Smrgfunc_options ${1+"$@"}
2768fbc03982Smrgeval set dummy "$func_options_result"; shift
2769ed6f5d66Smrg
2770ed6f5d66Smrg
2771ed6f5d66Smrg
2772ed6f5d66Smrg## ----------- ##
2773ed6f5d66Smrg##    Main.    ##
2774ed6f5d66Smrg## ----------- ##
2775ed6f5d66Smrg
2776fbc03982Smrgmagic='%%%MAGIC variable%%%'
2777fbc03982Smrgmagic_exe='%%%MAGIC EXE variable%%%'
2778fbc03982Smrg
2779fbc03982Smrg# Global variables.
2780fbc03982Smrgextracted_archives=
2781fbc03982Smrgextracted_serial=0
2782fbc03982Smrg
2783fbc03982Smrg# If this variable is set in any of the actions, the command in it
2784fbc03982Smrg# will be execed at the end.  This prevents here-documents from being
2785fbc03982Smrg# left over by shells.
2786fbc03982Smrgexec_cmd=
2787fbc03982Smrg
2788fbc03982Smrg
2789fbc03982Smrg# A function that is used when there is no print builtin or printf.
2790fbc03982Smrgfunc_fallback_echo ()
2791fbc03982Smrg{
2792fbc03982Smrg  eval 'cat <<_LTECHO_EOF
2793fbc03982Smrg$1
2794fbc03982Smrg_LTECHO_EOF'
2795fbc03982Smrg}
2796fbc03982Smrg
2797fbc03982Smrg# func_generated_by_libtool
2798fbc03982Smrg# True iff stdin has been generated by Libtool. This function is only
2799fbc03982Smrg# a basic sanity check; it will hardly flush out determined imposters.
2800fbc03982Smrgfunc_generated_by_libtool_p ()
2801fbc03982Smrg{
2802fbc03982Smrg  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
2803fbc03982Smrg}
2804fbc03982Smrg
2805ed6f5d66Smrg# func_lalib_p file
2806fbc03982Smrg# True iff FILE is a libtool '.la' library or '.lo' object file.
2807ed6f5d66Smrg# This function is only a basic sanity check; it will hardly flush out
2808ed6f5d66Smrg# determined imposters.
2809ed6f5d66Smrgfunc_lalib_p ()
2810ed6f5d66Smrg{
2811ed6f5d66Smrg    test -f "$1" &&
2812fbc03982Smrg      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
2813ed6f5d66Smrg}
2814ed6f5d66Smrg
2815ed6f5d66Smrg# func_lalib_unsafe_p file
2816fbc03982Smrg# True iff FILE is a libtool '.la' library or '.lo' object file.
2817ed6f5d66Smrg# This function implements the same check as func_lalib_p without
2818ed6f5d66Smrg# resorting to external programs.  To this end, it redirects stdin and
2819ed6f5d66Smrg# closes it afterwards, without saving the original file descriptor.
2820ed6f5d66Smrg# As a safety measure, use it only where a negative result would be
2821fbc03982Smrg# fatal anyway.  Works if 'file' does not exist.
2822ed6f5d66Smrgfunc_lalib_unsafe_p ()
2823ed6f5d66Smrg{
2824ed6f5d66Smrg    lalib_p=no
2825ed6f5d66Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
2826ed6f5d66Smrg	for lalib_p_l in 1 2 3 4
2827ed6f5d66Smrg	do
2828ed6f5d66Smrg	    read lalib_p_line
2829fbc03982Smrg	    case $lalib_p_line in
2830ed6f5d66Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
2831ed6f5d66Smrg	    esac
2832ed6f5d66Smrg	done
2833ed6f5d66Smrg	exec 0<&5 5<&-
2834ed6f5d66Smrg    fi
2835fbc03982Smrg    test yes = "$lalib_p"
2836ed6f5d66Smrg}
2837ed6f5d66Smrg
2838ed6f5d66Smrg# func_ltwrapper_script_p file
2839ed6f5d66Smrg# True iff FILE is a libtool wrapper script
2840ed6f5d66Smrg# This function is only a basic sanity check; it will hardly flush out
2841ed6f5d66Smrg# determined imposters.
2842ed6f5d66Smrgfunc_ltwrapper_script_p ()
2843ed6f5d66Smrg{
2844fbc03982Smrg    test -f "$1" &&
2845fbc03982Smrg      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
2846ed6f5d66Smrg}
2847ed6f5d66Smrg
2848ed6f5d66Smrg# func_ltwrapper_executable_p file
2849ed6f5d66Smrg# True iff FILE is a libtool wrapper executable
2850ed6f5d66Smrg# This function is only a basic sanity check; it will hardly flush out
2851ed6f5d66Smrg# determined imposters.
2852ed6f5d66Smrgfunc_ltwrapper_executable_p ()
2853ed6f5d66Smrg{
2854ed6f5d66Smrg    func_ltwrapper_exec_suffix=
2855ed6f5d66Smrg    case $1 in
2856ed6f5d66Smrg    *.exe) ;;
2857ed6f5d66Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
2858ed6f5d66Smrg    esac
2859ed6f5d66Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
2860ed6f5d66Smrg}
2861ed6f5d66Smrg
2862ed6f5d66Smrg# func_ltwrapper_scriptname file
2863ed6f5d66Smrg# Assumes file is an ltwrapper_executable
2864ed6f5d66Smrg# uses $file to determine the appropriate filename for a
2865ed6f5d66Smrg# temporary ltwrapper_script.
2866ed6f5d66Smrgfunc_ltwrapper_scriptname ()
2867ed6f5d66Smrg{
2868ed6f5d66Smrg    func_dirname_and_basename "$1" "" "."
2869ed6f5d66Smrg    func_stripname '' '.exe' "$func_basename_result"
2870fbc03982Smrg    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
2871ed6f5d66Smrg}
2872ed6f5d66Smrg
2873ed6f5d66Smrg# func_ltwrapper_p file
2874ed6f5d66Smrg# True iff FILE is a libtool wrapper script or wrapper executable
2875ed6f5d66Smrg# This function is only a basic sanity check; it will hardly flush out
2876ed6f5d66Smrg# determined imposters.
2877ed6f5d66Smrgfunc_ltwrapper_p ()
2878ed6f5d66Smrg{
2879ed6f5d66Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
2880ed6f5d66Smrg}
2881ed6f5d66Smrg
2882ed6f5d66Smrg
2883ed6f5d66Smrg# func_execute_cmds commands fail_cmd
2884ed6f5d66Smrg# Execute tilde-delimited COMMANDS.
2885ed6f5d66Smrg# If FAIL_CMD is given, eval that upon failure.
2886ed6f5d66Smrg# FAIL_CMD may read-access the current command in variable CMD!
2887ed6f5d66Smrgfunc_execute_cmds ()
2888ed6f5d66Smrg{
2889fbc03982Smrg    $debug_cmd
2890fbc03982Smrg
2891ed6f5d66Smrg    save_ifs=$IFS; IFS='~'
2892ed6f5d66Smrg    for cmd in $1; do
2893fbc03982Smrg      IFS=$sp$nl
2894ed6f5d66Smrg      eval cmd=\"$cmd\"
2895fbc03982Smrg      IFS=$save_ifs
2896ed6f5d66Smrg      func_show_eval "$cmd" "${2-:}"
2897ed6f5d66Smrg    done
2898ed6f5d66Smrg    IFS=$save_ifs
2899ed6f5d66Smrg}
2900ed6f5d66Smrg
2901ed6f5d66Smrg
2902ed6f5d66Smrg# func_source file
2903ed6f5d66Smrg# Source FILE, adding directory component if necessary.
2904ed6f5d66Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
2905ed6f5d66Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
2906ed6f5d66Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
2907fbc03982Smrg# 'FILE.' does not work on cygwin managed mounts.
2908ed6f5d66Smrgfunc_source ()
2909ed6f5d66Smrg{
2910fbc03982Smrg    $debug_cmd
2911fbc03982Smrg
2912ed6f5d66Smrg    case $1 in
2913ed6f5d66Smrg    */* | *\\*)	. "$1" ;;
2914ed6f5d66Smrg    *)		. "./$1" ;;
2915ed6f5d66Smrg    esac
2916ed6f5d66Smrg}
2917ed6f5d66Smrg
2918ed6f5d66Smrg
2919ed6f5d66Smrg# func_resolve_sysroot PATH
2920ed6f5d66Smrg# Replace a leading = in PATH with a sysroot.  Store the result into
2921ed6f5d66Smrg# func_resolve_sysroot_result
2922ed6f5d66Smrgfunc_resolve_sysroot ()
2923ed6f5d66Smrg{
2924ed6f5d66Smrg  func_resolve_sysroot_result=$1
2925ed6f5d66Smrg  case $func_resolve_sysroot_result in
2926ed6f5d66Smrg  =*)
2927ed6f5d66Smrg    func_stripname '=' '' "$func_resolve_sysroot_result"
2928ed6f5d66Smrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
2929ed6f5d66Smrg    ;;
2930ed6f5d66Smrg  esac
2931ed6f5d66Smrg}
2932ed6f5d66Smrg
2933ed6f5d66Smrg# func_replace_sysroot PATH
2934ed6f5d66Smrg# If PATH begins with the sysroot, replace it with = and
2935ed6f5d66Smrg# store the result into func_replace_sysroot_result.
2936ed6f5d66Smrgfunc_replace_sysroot ()
2937ed6f5d66Smrg{
2938fbc03982Smrg  case $lt_sysroot:$1 in
2939ed6f5d66Smrg  ?*:"$lt_sysroot"*)
2940ed6f5d66Smrg    func_stripname "$lt_sysroot" '' "$1"
2941fbc03982Smrg    func_replace_sysroot_result='='$func_stripname_result
2942ed6f5d66Smrg    ;;
2943ed6f5d66Smrg  *)
2944ed6f5d66Smrg    # Including no sysroot.
2945ed6f5d66Smrg    func_replace_sysroot_result=$1
2946ed6f5d66Smrg    ;;
2947ed6f5d66Smrg  esac
2948ed6f5d66Smrg}
2949ed6f5d66Smrg
2950ed6f5d66Smrg# func_infer_tag arg
2951ed6f5d66Smrg# Infer tagged configuration to use if any are available and
2952ed6f5d66Smrg# if one wasn't chosen via the "--tag" command line option.
2953ed6f5d66Smrg# Only attempt this if the compiler in the base compile
2954ed6f5d66Smrg# command doesn't match the default compiler.
2955ed6f5d66Smrg# arg is usually of the form 'gcc ...'
2956ed6f5d66Smrgfunc_infer_tag ()
2957ed6f5d66Smrg{
2958fbc03982Smrg    $debug_cmd
2959fbc03982Smrg
2960ed6f5d66Smrg    if test -n "$available_tags" && test -z "$tagname"; then
2961ed6f5d66Smrg      CC_quoted=
2962ed6f5d66Smrg      for arg in $CC; do
2963ed6f5d66Smrg	func_append_quoted CC_quoted "$arg"
2964ed6f5d66Smrg      done
2965ed6f5d66Smrg      CC_expanded=`func_echo_all $CC`
2966ed6f5d66Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
2967ed6f5d66Smrg      case $@ in
2968ed6f5d66Smrg      # Blanks in the command may have been stripped by the calling shell,
2969ed6f5d66Smrg      # but not from the CC environment variable when configure was run.
2970ed6f5d66Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2971ed6f5d66Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
2972ed6f5d66Smrg      # Blanks at the start of $base_compile will cause this to fail
2973ed6f5d66Smrg      # if we don't check for them as well.
2974ed6f5d66Smrg      *)
2975ed6f5d66Smrg	for z in $available_tags; do
2976ed6f5d66Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
2977ed6f5d66Smrg	    # Evaluate the configuration.
2978fbc03982Smrg	    eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
2979ed6f5d66Smrg	    CC_quoted=
2980ed6f5d66Smrg	    for arg in $CC; do
2981ed6f5d66Smrg	      # Double-quote args containing other shell metacharacters.
2982ed6f5d66Smrg	      func_append_quoted CC_quoted "$arg"
2983ed6f5d66Smrg	    done
2984ed6f5d66Smrg	    CC_expanded=`func_echo_all $CC`
2985ed6f5d66Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
2986ed6f5d66Smrg	    case "$@ " in
2987ed6f5d66Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2988ed6f5d66Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
2989ed6f5d66Smrg	      # The compiler in the base compile command matches
2990ed6f5d66Smrg	      # the one in the tagged configuration.
2991ed6f5d66Smrg	      # Assume this is the tagged configuration we want.
2992ed6f5d66Smrg	      tagname=$z
2993ed6f5d66Smrg	      break
2994ed6f5d66Smrg	      ;;
2995ed6f5d66Smrg	    esac
2996ed6f5d66Smrg	  fi
2997ed6f5d66Smrg	done
2998ed6f5d66Smrg	# If $tagname still isn't set, then no tagged configuration
2999ed6f5d66Smrg	# was found and let the user know that the "--tag" command
3000ed6f5d66Smrg	# line option must be used.
3001ed6f5d66Smrg	if test -z "$tagname"; then
3002ed6f5d66Smrg	  func_echo "unable to infer tagged configuration"
3003fbc03982Smrg	  func_fatal_error "specify a tag with '--tag'"
3004ed6f5d66Smrg#	else
3005ed6f5d66Smrg#	  func_verbose "using $tagname tagged configuration"
3006ed6f5d66Smrg	fi
3007ed6f5d66Smrg	;;
3008ed6f5d66Smrg      esac
3009ed6f5d66Smrg    fi
3010ed6f5d66Smrg}
3011ed6f5d66Smrg
3012ed6f5d66Smrg
3013ed6f5d66Smrg
3014ed6f5d66Smrg# func_write_libtool_object output_name pic_name nonpic_name
3015ed6f5d66Smrg# Create a libtool object file (analogous to a ".la" file),
3016ed6f5d66Smrg# but don't create it if we're doing a dry run.
3017ed6f5d66Smrgfunc_write_libtool_object ()
3018ed6f5d66Smrg{
3019fbc03982Smrg    write_libobj=$1
3020fbc03982Smrg    if test yes = "$build_libtool_libs"; then
3021fbc03982Smrg      write_lobj=\'$2\'
3022ed6f5d66Smrg    else
3023ed6f5d66Smrg      write_lobj=none
3024ed6f5d66Smrg    fi
3025ed6f5d66Smrg
3026fbc03982Smrg    if test yes = "$build_old_libs"; then
3027fbc03982Smrg      write_oldobj=\'$3\'
3028ed6f5d66Smrg    else
3029ed6f5d66Smrg      write_oldobj=none
3030ed6f5d66Smrg    fi
3031ed6f5d66Smrg
3032ed6f5d66Smrg    $opt_dry_run || {
3033ed6f5d66Smrg      cat >${write_libobj}T <<EOF
3034ed6f5d66Smrg# $write_libobj - a libtool object file
3035fbc03982Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
3036ed6f5d66Smrg#
3037ed6f5d66Smrg# Please DO NOT delete this file!
3038ed6f5d66Smrg# It is necessary for linking the library.
3039ed6f5d66Smrg
3040ed6f5d66Smrg# Name of the PIC object.
3041ed6f5d66Smrgpic_object=$write_lobj
3042ed6f5d66Smrg
3043ed6f5d66Smrg# Name of the non-PIC object
3044ed6f5d66Smrgnon_pic_object=$write_oldobj
3045ed6f5d66Smrg
3046ed6f5d66SmrgEOF
3047fbc03982Smrg      $MV "${write_libobj}T" "$write_libobj"
3048ed6f5d66Smrg    }
3049ed6f5d66Smrg}
3050ed6f5d66Smrg
3051ed6f5d66Smrg
3052ed6f5d66Smrg##################################################
3053ed6f5d66Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
3054ed6f5d66Smrg##################################################
3055ed6f5d66Smrg
3056ed6f5d66Smrg# func_convert_core_file_wine_to_w32 ARG
3057ed6f5d66Smrg# Helper function used by file name conversion functions when $build is *nix,
3058a3680546Smrg# and $host is mingw, windows, cygwin, or some other w32 environment. Relies on a
3059ed6f5d66Smrg# correctly configured wine environment available, with the winepath program
3060ed6f5d66Smrg# in $build's $PATH.
3061ed6f5d66Smrg#
3062ed6f5d66Smrg# ARG is the $build file name to be converted to w32 format.
3063ed6f5d66Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
3064ed6f5d66Smrg# be empty on error (or when ARG is empty)
3065ed6f5d66Smrgfunc_convert_core_file_wine_to_w32 ()
3066ed6f5d66Smrg{
3067fbc03982Smrg  $debug_cmd
3068fbc03982Smrg
3069fbc03982Smrg  func_convert_core_file_wine_to_w32_result=$1
3070ed6f5d66Smrg  if test -n "$1"; then
3071ed6f5d66Smrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
3072ed6f5d66Smrg    # are forced to check the contents of stdout. On the other hand, if the
3073ed6f5d66Smrg    # command is not found, the shell will set an exit code of 127 and print
3074ed6f5d66Smrg    # *an error message* to stdout. So we must check for both error code of
3075ed6f5d66Smrg    # zero AND non-empty stdout, which explains the odd construction:
3076ed6f5d66Smrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
3077fbc03982Smrg    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
3078ed6f5d66Smrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
3079fbc03982Smrg        $SED -e "$sed_naive_backslashify"`
3080ed6f5d66Smrg    else
3081ed6f5d66Smrg      func_convert_core_file_wine_to_w32_result=
3082ed6f5d66Smrg    fi
3083ed6f5d66Smrg  fi
3084ed6f5d66Smrg}
3085ed6f5d66Smrg# end: func_convert_core_file_wine_to_w32
3086ed6f5d66Smrg
3087ed6f5d66Smrg
3088ed6f5d66Smrg# func_convert_core_path_wine_to_w32 ARG
3089ed6f5d66Smrg# Helper function used by path conversion functions when $build is *nix, and
3090a3680546Smrg# $host is mingw, windows, cygwin, or some other w32 environment. Relies on a
3091a3680546Smrg# correctly configured wine environment available, with the winepath program
3092a3680546Smrg# in $build's $PATH. Assumes ARG has no leading or trailing path separator
3093a3680546Smrg# characters.
3094ed6f5d66Smrg#
3095ed6f5d66Smrg# ARG is path to be converted from $build format to win32.
3096ed6f5d66Smrg# Result is available in $func_convert_core_path_wine_to_w32_result.
3097ed6f5d66Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
3098ed6f5d66Smrg# are convertible, then the result may be empty.
3099ed6f5d66Smrgfunc_convert_core_path_wine_to_w32 ()
3100ed6f5d66Smrg{
3101fbc03982Smrg  $debug_cmd
3102fbc03982Smrg
3103ed6f5d66Smrg  # unfortunately, winepath doesn't convert paths, only file names
3104fbc03982Smrg  func_convert_core_path_wine_to_w32_result=
3105ed6f5d66Smrg  if test -n "$1"; then
3106ed6f5d66Smrg    oldIFS=$IFS
3107ed6f5d66Smrg    IFS=:
3108ed6f5d66Smrg    for func_convert_core_path_wine_to_w32_f in $1; do
3109ed6f5d66Smrg      IFS=$oldIFS
3110ed6f5d66Smrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
3111fbc03982Smrg      if test -n "$func_convert_core_file_wine_to_w32_result"; then
3112ed6f5d66Smrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
3113fbc03982Smrg          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
3114ed6f5d66Smrg        else
3115ed6f5d66Smrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
3116ed6f5d66Smrg        fi
3117ed6f5d66Smrg      fi
3118ed6f5d66Smrg    done
3119ed6f5d66Smrg    IFS=$oldIFS
3120ed6f5d66Smrg  fi
3121ed6f5d66Smrg}
3122ed6f5d66Smrg# end: func_convert_core_path_wine_to_w32
3123ed6f5d66Smrg
3124ed6f5d66Smrg
3125ed6f5d66Smrg# func_cygpath ARGS...
3126ed6f5d66Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
3127ed6f5d66Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
3128ed6f5d66Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
3129ed6f5d66Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
3130ed6f5d66Smrg# file name or path is assumed to be in w32 format, as previously converted
3131ed6f5d66Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
3132ed6f5d66Smrg# or path in func_cygpath_result (input file name or path is assumed to be in
3133ed6f5d66Smrg# Cygwin format). Returns an empty string on error.
3134ed6f5d66Smrg#
3135ed6f5d66Smrg# ARGS are passed to cygpath, with the last one being the file name or path to
3136ed6f5d66Smrg# be converted.
3137ed6f5d66Smrg#
3138ed6f5d66Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
3139ed6f5d66Smrg# environment variable; do not put it in $PATH.
3140ed6f5d66Smrgfunc_cygpath ()
3141ed6f5d66Smrg{
3142fbc03982Smrg  $debug_cmd
3143fbc03982Smrg
3144ed6f5d66Smrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
3145ed6f5d66Smrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
3146ed6f5d66Smrg    if test "$?" -ne 0; then
3147ed6f5d66Smrg      # on failure, ensure result is empty
3148ed6f5d66Smrg      func_cygpath_result=
3149ed6f5d66Smrg    fi
3150ed6f5d66Smrg  else
3151ed6f5d66Smrg    func_cygpath_result=
3152fbc03982Smrg    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
3153ed6f5d66Smrg  fi
3154ed6f5d66Smrg}
3155ed6f5d66Smrg#end: func_cygpath
3156ed6f5d66Smrg
3157ed6f5d66Smrg
3158ed6f5d66Smrg# func_convert_core_msys_to_w32 ARG
3159ed6f5d66Smrg# Convert file name or path ARG from MSYS format to w32 format.  Return
3160ed6f5d66Smrg# result in func_convert_core_msys_to_w32_result.
3161ed6f5d66Smrgfunc_convert_core_msys_to_w32 ()
3162ed6f5d66Smrg{
3163fbc03982Smrg  $debug_cmd
3164fbc03982Smrg
3165ed6f5d66Smrg  # awkward: cmd appends spaces to result
3166ed6f5d66Smrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
3167fbc03982Smrg    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
3168ed6f5d66Smrg}
3169ed6f5d66Smrg#end: func_convert_core_msys_to_w32
3170ed6f5d66Smrg
3171ed6f5d66Smrg
3172ed6f5d66Smrg# func_convert_file_check ARG1 ARG2
3173ed6f5d66Smrg# Verify that ARG1 (a file name in $build format) was converted to $host
3174ed6f5d66Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
3175ed6f5d66Smrg# func_to_host_file_result to ARG1).
3176ed6f5d66Smrgfunc_convert_file_check ()
3177ed6f5d66Smrg{
3178fbc03982Smrg  $debug_cmd
3179fbc03982Smrg
3180fbc03982Smrg  if test -z "$2" && test -n "$1"; then
3181ed6f5d66Smrg    func_error "Could not determine host file name corresponding to"
3182fbc03982Smrg    func_error "  '$1'"
3183ed6f5d66Smrg    func_error "Continuing, but uninstalled executables may not work."
3184ed6f5d66Smrg    # Fallback:
3185fbc03982Smrg    func_to_host_file_result=$1
3186ed6f5d66Smrg  fi
3187ed6f5d66Smrg}
3188ed6f5d66Smrg# end func_convert_file_check
3189ed6f5d66Smrg
3190ed6f5d66Smrg
3191ed6f5d66Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
3192ed6f5d66Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host
3193ed6f5d66Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
3194ed6f5d66Smrg# func_to_host_file_result to a simplistic fallback value (see below).
3195ed6f5d66Smrgfunc_convert_path_check ()
3196ed6f5d66Smrg{
3197fbc03982Smrg  $debug_cmd
3198fbc03982Smrg
3199ed6f5d66Smrg  if test -z "$4" && test -n "$3"; then
3200ed6f5d66Smrg    func_error "Could not determine the host path corresponding to"
3201fbc03982Smrg    func_error "  '$3'"
3202ed6f5d66Smrg    func_error "Continuing, but uninstalled executables may not work."
3203ed6f5d66Smrg    # Fallback.  This is a deliberately simplistic "conversion" and
3204ed6f5d66Smrg    # should not be "improved".  See libtool.info.
3205ed6f5d66Smrg    if test "x$1" != "x$2"; then
3206ed6f5d66Smrg      lt_replace_pathsep_chars="s|$1|$2|g"
3207ed6f5d66Smrg      func_to_host_path_result=`echo "$3" |
3208ed6f5d66Smrg        $SED -e "$lt_replace_pathsep_chars"`
3209ed6f5d66Smrg    else
3210fbc03982Smrg      func_to_host_path_result=$3
3211ed6f5d66Smrg    fi
3212ed6f5d66Smrg  fi
3213ed6f5d66Smrg}
3214ed6f5d66Smrg# end func_convert_path_check
3215ed6f5d66Smrg
3216ed6f5d66Smrg
3217ed6f5d66Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
3218ed6f5d66Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
3219ed6f5d66Smrg# and appending REPL if ORIG matches BACKPAT.
3220ed6f5d66Smrgfunc_convert_path_front_back_pathsep ()
3221ed6f5d66Smrg{
3222fbc03982Smrg  $debug_cmd
3223fbc03982Smrg
3224ed6f5d66Smrg  case $4 in
3225fbc03982Smrg  $1 ) func_to_host_path_result=$3$func_to_host_path_result
3226ed6f5d66Smrg    ;;
3227ed6f5d66Smrg  esac
3228ed6f5d66Smrg  case $4 in
3229ed6f5d66Smrg  $2 ) func_append func_to_host_path_result "$3"
3230ed6f5d66Smrg    ;;
3231ed6f5d66Smrg  esac
3232ed6f5d66Smrg}
3233ed6f5d66Smrg# end func_convert_path_front_back_pathsep
3234ed6f5d66Smrg
3235ed6f5d66Smrg
3236a3680546Smrg# func_convert_delimited_path PATH ORIG_DELIMITER NEW_DELIMITER
3237a3680546Smrg# Replaces a delimiter for a given path.
3238a3680546Smrgfunc_convert_delimited_path ()
3239a3680546Smrg{
3240a3680546Smrg	converted_path=`$ECHO "$1" | $SED "s#$2#$3#g"`
3241a3680546Smrg}
3242a3680546Smrg# end func_convert_delimited_path
3243a3680546Smrg
3244a3680546Smrg
3245ed6f5d66Smrg##################################################
3246ed6f5d66Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
3247ed6f5d66Smrg##################################################
3248fbc03982Smrg# invoked via '$to_host_file_cmd ARG'
3249ed6f5d66Smrg#
3250ed6f5d66Smrg# In each case, ARG is the path to be converted from $build to $host format.
3251ed6f5d66Smrg# Result will be available in $func_to_host_file_result.
3252ed6f5d66Smrg
3253ed6f5d66Smrg
3254ed6f5d66Smrg# func_to_host_file ARG
3255ed6f5d66Smrg# Converts the file name ARG from $build format to $host format. Return result
3256ed6f5d66Smrg# in func_to_host_file_result.
3257ed6f5d66Smrgfunc_to_host_file ()
3258ed6f5d66Smrg{
3259fbc03982Smrg  $debug_cmd
3260fbc03982Smrg
3261ed6f5d66Smrg  $to_host_file_cmd "$1"
3262ed6f5d66Smrg}
3263ed6f5d66Smrg# end func_to_host_file
3264ed6f5d66Smrg
3265ed6f5d66Smrg
3266ed6f5d66Smrg# func_to_tool_file ARG LAZY
3267ed6f5d66Smrg# converts the file name ARG from $build format to toolchain format. Return
3268ed6f5d66Smrg# result in func_to_tool_file_result.  If the conversion in use is listed
3269ed6f5d66Smrg# in (the comma separated) LAZY, no conversion takes place.
3270ed6f5d66Smrgfunc_to_tool_file ()
3271ed6f5d66Smrg{
3272fbc03982Smrg  $debug_cmd
3273fbc03982Smrg
3274ed6f5d66Smrg  case ,$2, in
3275ed6f5d66Smrg    *,"$to_tool_file_cmd",*)
3276ed6f5d66Smrg      func_to_tool_file_result=$1
3277ed6f5d66Smrg      ;;
3278ed6f5d66Smrg    *)
3279ed6f5d66Smrg      $to_tool_file_cmd "$1"
3280ed6f5d66Smrg      func_to_tool_file_result=$func_to_host_file_result
3281ed6f5d66Smrg      ;;
3282ed6f5d66Smrg  esac
3283ed6f5d66Smrg}
3284ed6f5d66Smrg# end func_to_tool_file
3285ed6f5d66Smrg
3286ed6f5d66Smrg
3287ed6f5d66Smrg# func_convert_file_noop ARG
3288ed6f5d66Smrg# Copy ARG to func_to_host_file_result.
3289ed6f5d66Smrgfunc_convert_file_noop ()
3290ed6f5d66Smrg{
3291fbc03982Smrg  func_to_host_file_result=$1
3292ed6f5d66Smrg}
3293ed6f5d66Smrg# end func_convert_file_noop
3294ed6f5d66Smrg
3295ed6f5d66Smrg
3296ed6f5d66Smrg# func_convert_file_msys_to_w32 ARG
3297ed6f5d66Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
3298ed6f5d66Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
3299ed6f5d66Smrg# func_to_host_file_result.
3300ed6f5d66Smrgfunc_convert_file_msys_to_w32 ()
3301ed6f5d66Smrg{
3302fbc03982Smrg  $debug_cmd
3303fbc03982Smrg
3304fbc03982Smrg  func_to_host_file_result=$1
3305ed6f5d66Smrg  if test -n "$1"; then
3306ed6f5d66Smrg    func_convert_core_msys_to_w32 "$1"
3307fbc03982Smrg    func_to_host_file_result=$func_convert_core_msys_to_w32_result
3308ed6f5d66Smrg  fi
3309ed6f5d66Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3310ed6f5d66Smrg}
3311ed6f5d66Smrg# end func_convert_file_msys_to_w32
3312ed6f5d66Smrg
3313ed6f5d66Smrg
3314ed6f5d66Smrg# func_convert_file_cygwin_to_w32 ARG
3315ed6f5d66Smrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
3316ed6f5d66Smrg# func_to_host_file_result.
3317ed6f5d66Smrgfunc_convert_file_cygwin_to_w32 ()
3318ed6f5d66Smrg{
3319fbc03982Smrg  $debug_cmd
3320fbc03982Smrg
3321fbc03982Smrg  func_to_host_file_result=$1
3322ed6f5d66Smrg  if test -n "$1"; then
3323ed6f5d66Smrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
3324ed6f5d66Smrg    # LT_CYGPATH in this case.
3325ed6f5d66Smrg    func_to_host_file_result=`cygpath -m "$1"`
3326ed6f5d66Smrg  fi
3327ed6f5d66Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3328ed6f5d66Smrg}
3329ed6f5d66Smrg# end func_convert_file_cygwin_to_w32
3330ed6f5d66Smrg
3331ed6f5d66Smrg
3332ed6f5d66Smrg# func_convert_file_nix_to_w32 ARG
3333ed6f5d66Smrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
3334ed6f5d66Smrg# and a working winepath. Returns result in func_to_host_file_result.
3335ed6f5d66Smrgfunc_convert_file_nix_to_w32 ()
3336ed6f5d66Smrg{
3337fbc03982Smrg  $debug_cmd
3338fbc03982Smrg
3339fbc03982Smrg  func_to_host_file_result=$1
3340ed6f5d66Smrg  if test -n "$1"; then
3341ed6f5d66Smrg    func_convert_core_file_wine_to_w32 "$1"
3342fbc03982Smrg    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
3343ed6f5d66Smrg  fi
3344ed6f5d66Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3345ed6f5d66Smrg}
3346ed6f5d66Smrg# end func_convert_file_nix_to_w32
3347ed6f5d66Smrg
3348ed6f5d66Smrg
3349ed6f5d66Smrg# func_convert_file_msys_to_cygwin ARG
3350ed6f5d66Smrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3351ed6f5d66Smrg# Returns result in func_to_host_file_result.
3352ed6f5d66Smrgfunc_convert_file_msys_to_cygwin ()
3353ed6f5d66Smrg{
3354fbc03982Smrg  $debug_cmd
3355fbc03982Smrg
3356fbc03982Smrg  func_to_host_file_result=$1
3357ed6f5d66Smrg  if test -n "$1"; then
3358ed6f5d66Smrg    func_convert_core_msys_to_w32 "$1"
3359ed6f5d66Smrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
3360fbc03982Smrg    func_to_host_file_result=$func_cygpath_result
3361ed6f5d66Smrg  fi
3362ed6f5d66Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3363ed6f5d66Smrg}
3364ed6f5d66Smrg# end func_convert_file_msys_to_cygwin
3365ed6f5d66Smrg
3366ed6f5d66Smrg
3367ed6f5d66Smrg# func_convert_file_nix_to_cygwin ARG
3368ed6f5d66Smrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
3369ed6f5d66Smrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
3370ed6f5d66Smrg# in func_to_host_file_result.
3371ed6f5d66Smrgfunc_convert_file_nix_to_cygwin ()
3372ed6f5d66Smrg{
3373fbc03982Smrg  $debug_cmd
3374fbc03982Smrg
3375fbc03982Smrg  func_to_host_file_result=$1
3376ed6f5d66Smrg  if test -n "$1"; then
3377ed6f5d66Smrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
3378ed6f5d66Smrg    func_convert_core_file_wine_to_w32 "$1"
3379ed6f5d66Smrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
3380fbc03982Smrg    func_to_host_file_result=$func_cygpath_result
3381ed6f5d66Smrg  fi
3382ed6f5d66Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3383ed6f5d66Smrg}
3384ed6f5d66Smrg# end func_convert_file_nix_to_cygwin
3385ed6f5d66Smrg
3386ed6f5d66Smrg
3387ed6f5d66Smrg#############################################
3388ed6f5d66Smrg# $build to $host PATH CONVERSION FUNCTIONS #
3389ed6f5d66Smrg#############################################
3390fbc03982Smrg# invoked via '$to_host_path_cmd ARG'
3391ed6f5d66Smrg#
3392ed6f5d66Smrg# In each case, ARG is the path to be converted from $build to $host format.
3393ed6f5d66Smrg# The result will be available in $func_to_host_path_result.
3394ed6f5d66Smrg#
3395ed6f5d66Smrg# Path separators are also converted from $build format to $host format.  If
3396ed6f5d66Smrg# ARG begins or ends with a path separator character, it is preserved (but
3397ed6f5d66Smrg# converted to $host format) on output.
3398ed6f5d66Smrg#
3399ed6f5d66Smrg# All path conversion functions are named using the following convention:
3400ed6f5d66Smrg#   file name conversion function    : func_convert_file_X_to_Y ()
3401ed6f5d66Smrg#   path conversion function         : func_convert_path_X_to_Y ()
3402ed6f5d66Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the
3403ed6f5d66Smrg# same.  If conversion functions are added for new $build/$host combinations,
3404ed6f5d66Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
3405ed6f5d66Smrg# will break.
3406ed6f5d66Smrg
3407ed6f5d66Smrg
3408ed6f5d66Smrg# func_init_to_host_path_cmd
3409ed6f5d66Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
3410ed6f5d66Smrg# appropriate value, based on the value of $to_host_file_cmd.
3411ed6f5d66Smrgto_host_path_cmd=
3412ed6f5d66Smrgfunc_init_to_host_path_cmd ()
3413ed6f5d66Smrg{
3414fbc03982Smrg  $debug_cmd
3415fbc03982Smrg
3416ed6f5d66Smrg  if test -z "$to_host_path_cmd"; then
3417ed6f5d66Smrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
3418fbc03982Smrg    to_host_path_cmd=func_convert_path_$func_stripname_result
3419ed6f5d66Smrg  fi
3420ed6f5d66Smrg}
3421ed6f5d66Smrg
3422ed6f5d66Smrg
3423ed6f5d66Smrg# func_to_host_path ARG
3424ed6f5d66Smrg# Converts the path ARG from $build format to $host format. Return result
3425ed6f5d66Smrg# in func_to_host_path_result.
3426ed6f5d66Smrgfunc_to_host_path ()
3427ed6f5d66Smrg{
3428fbc03982Smrg  $debug_cmd
3429fbc03982Smrg
3430ed6f5d66Smrg  func_init_to_host_path_cmd
3431ed6f5d66Smrg  $to_host_path_cmd "$1"
3432ed6f5d66Smrg}
3433ed6f5d66Smrg# end func_to_host_path
3434ed6f5d66Smrg
3435ed6f5d66Smrg
3436ed6f5d66Smrg# func_convert_path_noop ARG
3437ed6f5d66Smrg# Copy ARG to func_to_host_path_result.
3438ed6f5d66Smrgfunc_convert_path_noop ()
3439ed6f5d66Smrg{
3440fbc03982Smrg  func_to_host_path_result=$1
3441ed6f5d66Smrg}
3442ed6f5d66Smrg# end func_convert_path_noop
3443ed6f5d66Smrg
3444ed6f5d66Smrg
3445ed6f5d66Smrg# func_convert_path_msys_to_w32 ARG
3446ed6f5d66Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
3447ed6f5d66Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
3448ed6f5d66Smrg# func_to_host_path_result.
3449ed6f5d66Smrgfunc_convert_path_msys_to_w32 ()
3450ed6f5d66Smrg{
3451fbc03982Smrg  $debug_cmd
3452fbc03982Smrg
3453fbc03982Smrg  func_to_host_path_result=$1
3454ed6f5d66Smrg  if test -n "$1"; then
3455ed6f5d66Smrg    # Remove leading and trailing path separator characters from ARG.  MSYS
3456ed6f5d66Smrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
3457ed6f5d66Smrg    # and winepath ignores them completely.
3458ed6f5d66Smrg    func_stripname : : "$1"
3459ed6f5d66Smrg    func_to_host_path_tmp1=$func_stripname_result
3460ed6f5d66Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3461fbc03982Smrg    func_to_host_path_result=$func_convert_core_msys_to_w32_result
3462ed6f5d66Smrg    func_convert_path_check : ";" \
3463ed6f5d66Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3464ed6f5d66Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3465ed6f5d66Smrg  fi
3466ed6f5d66Smrg}
3467ed6f5d66Smrg# end func_convert_path_msys_to_w32
3468ed6f5d66Smrg
3469ed6f5d66Smrg
3470ed6f5d66Smrg# func_convert_path_cygwin_to_w32 ARG
3471ed6f5d66Smrg# Convert path ARG from Cygwin to w32 format.  Returns result in
3472ed6f5d66Smrg# func_to_host_file_result.
3473ed6f5d66Smrgfunc_convert_path_cygwin_to_w32 ()
3474ed6f5d66Smrg{
3475fbc03982Smrg  $debug_cmd
3476fbc03982Smrg
3477fbc03982Smrg  func_to_host_path_result=$1
3478ed6f5d66Smrg  if test -n "$1"; then
3479ed6f5d66Smrg    # See func_convert_path_msys_to_w32:
3480ed6f5d66Smrg    func_stripname : : "$1"
3481ed6f5d66Smrg    func_to_host_path_tmp1=$func_stripname_result
3482ed6f5d66Smrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
3483ed6f5d66Smrg    func_convert_path_check : ";" \
3484ed6f5d66Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3485ed6f5d66Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3486ed6f5d66Smrg  fi
3487ed6f5d66Smrg}
3488ed6f5d66Smrg# end func_convert_path_cygwin_to_w32
3489ed6f5d66Smrg
3490ed6f5d66Smrg
3491ed6f5d66Smrg# func_convert_path_nix_to_w32 ARG
3492ed6f5d66Smrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
3493ed6f5d66Smrg# a working winepath.  Returns result in func_to_host_file_result.
3494ed6f5d66Smrgfunc_convert_path_nix_to_w32 ()
3495ed6f5d66Smrg{
3496fbc03982Smrg  $debug_cmd
3497fbc03982Smrg
3498fbc03982Smrg  func_to_host_path_result=$1
3499ed6f5d66Smrg  if test -n "$1"; then
3500ed6f5d66Smrg    # See func_convert_path_msys_to_w32:
3501ed6f5d66Smrg    func_stripname : : "$1"
3502ed6f5d66Smrg    func_to_host_path_tmp1=$func_stripname_result
3503ed6f5d66Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3504fbc03982Smrg    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
3505ed6f5d66Smrg    func_convert_path_check : ";" \
3506ed6f5d66Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3507ed6f5d66Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3508ed6f5d66Smrg  fi
3509ed6f5d66Smrg}
3510ed6f5d66Smrg# end func_convert_path_nix_to_w32
3511ed6f5d66Smrg
3512ed6f5d66Smrg
3513ed6f5d66Smrg# func_convert_path_msys_to_cygwin ARG
3514ed6f5d66Smrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3515ed6f5d66Smrg# Returns result in func_to_host_file_result.
3516ed6f5d66Smrgfunc_convert_path_msys_to_cygwin ()
3517ed6f5d66Smrg{
3518fbc03982Smrg  $debug_cmd
3519fbc03982Smrg
3520fbc03982Smrg  func_to_host_path_result=$1
3521ed6f5d66Smrg  if test -n "$1"; then
3522ed6f5d66Smrg    # See func_convert_path_msys_to_w32:
3523ed6f5d66Smrg    func_stripname : : "$1"
3524ed6f5d66Smrg    func_to_host_path_tmp1=$func_stripname_result
3525ed6f5d66Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3526ed6f5d66Smrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
3527fbc03982Smrg    func_to_host_path_result=$func_cygpath_result
3528ed6f5d66Smrg    func_convert_path_check : : \
3529ed6f5d66Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3530ed6f5d66Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3531ed6f5d66Smrg  fi
3532ed6f5d66Smrg}
3533ed6f5d66Smrg# end func_convert_path_msys_to_cygwin
3534ed6f5d66Smrg
3535ed6f5d66Smrg
3536ed6f5d66Smrg# func_convert_path_nix_to_cygwin ARG
3537ed6f5d66Smrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
3538ed6f5d66Smrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
3539ed6f5d66Smrg# func_to_host_file_result.
3540ed6f5d66Smrgfunc_convert_path_nix_to_cygwin ()
3541ed6f5d66Smrg{
3542fbc03982Smrg  $debug_cmd
3543fbc03982Smrg
3544fbc03982Smrg  func_to_host_path_result=$1
3545ed6f5d66Smrg  if test -n "$1"; then
3546ed6f5d66Smrg    # Remove leading and trailing path separator characters from
3547ed6f5d66Smrg    # ARG. msys behavior is inconsistent here, cygpath turns them
3548ed6f5d66Smrg    # into '.;' and ';.', and winepath ignores them completely.
3549ed6f5d66Smrg    func_stripname : : "$1"
3550ed6f5d66Smrg    func_to_host_path_tmp1=$func_stripname_result
3551ed6f5d66Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3552ed6f5d66Smrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
3553fbc03982Smrg    func_to_host_path_result=$func_cygpath_result
3554ed6f5d66Smrg    func_convert_path_check : : \
3555ed6f5d66Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3556ed6f5d66Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3557ed6f5d66Smrg  fi
3558ed6f5d66Smrg}
3559ed6f5d66Smrg# end func_convert_path_nix_to_cygwin
3560ed6f5d66Smrg
3561ed6f5d66Smrg
3562fbc03982Smrg# func_dll_def_p FILE
3563fbc03982Smrg# True iff FILE is a Windows DLL '.def' file.
3564fbc03982Smrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4
3565fbc03982Smrgfunc_dll_def_p ()
3566fbc03982Smrg{
3567fbc03982Smrg  $debug_cmd
3568fbc03982Smrg
3569fbc03982Smrg  func_dll_def_p_tmp=`$SED -n \
3570fbc03982Smrg    -e 's/^[	 ]*//' \
3571fbc03982Smrg    -e '/^\(;.*\)*$/d' \
3572fbc03982Smrg    -e 's/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p' \
3573fbc03982Smrg    -e q \
3574fbc03982Smrg    "$1"`
3575fbc03982Smrg  test DEF = "$func_dll_def_p_tmp"
3576fbc03982Smrg}
3577fbc03982Smrg
3578fbc03982Smrg
3579a3680546Smrg# func_reorder_shared_lib_cache DIRS
3580a3680546Smrg# Reorder the shared library cache by unconfiguring previous shared library cache
3581a3680546Smrg# and configuring preferred search directories before previous search directories.
3582a3680546Smrg# Previous shared library cache: /usr/lib /usr/local/lib
3583a3680546Smrg# Preferred search directories: /tmp/testing
3584a3680546Smrg# Reordered shared library cache: /tmp/testing /usr/lib /usr/local/lib
3585a3680546Smrgfunc_reorder_shared_lib_cache ()
3586a3680546Smrg{
3587a3680546Smrg	$debug_cmd
3588a3680546Smrg
3589a3680546Smrg	case $host_os in
3590a3680546Smrg	  openbsd*)
3591a3680546Smrg	    get_search_directories=`PATH="$PATH:/sbin" ldconfig -r | $GREP "search directories" | $SED "s#.*search directories:\ ##g"`
3592a3680546Smrg	    func_convert_delimited_path "$get_search_directories" ':' '\ '
3593a3680546Smrg	    save_search_directories=$converted_path
3594a3680546Smrg	    func_convert_delimited_path "$1" ':' '\ '
3595a3680546Smrg
3596a3680546Smrg	    # Ensure directories exist
3597a3680546Smrg	    for dir in $converted_path; do
3598a3680546Smrg	      # Ensure each directory is an absolute path
3599a3680546Smrg	      case $dir in
3600a3680546Smrg	        /*) ;;
3601a3680546Smrg	        *) func_error "Directory '$dir' is not an absolute path"
3602a3680546Smrg	           exit $EXIT_FAILURE ;;
3603a3680546Smrg	      esac
3604a3680546Smrg	      # Ensure no trailing slashes
3605a3680546Smrg	      func_stripname '' '/' "$dir"
3606a3680546Smrg	      dir=$func_stripname_result
3607a3680546Smrg	      if test -d "$dir"; then
3608a3680546Smrg	        if test -n "$preferred_search_directories"; then
3609a3680546Smrg	          preferred_search_directories="$preferred_search_directories $dir"
3610a3680546Smrg	        else
3611a3680546Smrg	          preferred_search_directories=$dir
3612a3680546Smrg	        fi
3613a3680546Smrg	      else
3614a3680546Smrg	        func_error "Directory '$dir' does not exist"
3615a3680546Smrg	        exit $EXIT_FAILURE
3616a3680546Smrg	      fi
3617a3680546Smrg	    done
3618a3680546Smrg
3619a3680546Smrg	    PATH="$PATH:/sbin" ldconfig -U $save_search_directories
3620a3680546Smrg	    PATH="$PATH:/sbin" ldconfig -m $preferred_search_directories $save_search_directories
3621a3680546Smrg	    get_search_directories=`PATH="$PATH:/sbin" ldconfig -r | $GREP "search directories" | $SED "s#.*search directories:\ ##g"`
3622a3680546Smrg	    func_convert_delimited_path "$get_search_directories" ':' '\ '
3623a3680546Smrg	    reordered_search_directories=$converted_path
3624a3680546Smrg
3625a3680546Smrg	    $ECHO "Original: $save_search_directories"
3626a3680546Smrg	    $ECHO "Reordered: $reordered_search_directories"
3627a3680546Smrg	    exit $EXIT_SUCCESS
3628a3680546Smrg	  ;;
3629a3680546Smrg	  *)
3630a3680546Smrg	    func_error "--reorder-cache is not supported for host_os=$host_os."
3631a3680546Smrg	    exit $EXIT_FAILURE
3632a3680546Smrg	  ;;
3633a3680546Smrg	esac
3634a3680546Smrg}
3635a3680546Smrg# end func_reorder_shared_lib_cache
3636a3680546Smrg
3637a3680546Smrg
3638ed6f5d66Smrg# func_mode_compile arg...
3639ed6f5d66Smrgfunc_mode_compile ()
3640ed6f5d66Smrg{
3641fbc03982Smrg    $debug_cmd
3642fbc03982Smrg
3643ed6f5d66Smrg    # Get the compilation command and the source file.
3644ed6f5d66Smrg    base_compile=
3645fbc03982Smrg    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
3646ed6f5d66Smrg    suppress_opt=yes
3647ed6f5d66Smrg    suppress_output=
3648ed6f5d66Smrg    arg_mode=normal
3649ed6f5d66Smrg    libobj=
3650ed6f5d66Smrg    later=
3651ed6f5d66Smrg    pie_flag=
3652ed6f5d66Smrg
3653ed6f5d66Smrg    for arg
3654ed6f5d66Smrg    do
3655ed6f5d66Smrg      case $arg_mode in
3656ed6f5d66Smrg      arg  )
3657ed6f5d66Smrg	# do not "continue".  Instead, add this to base_compile
3658fbc03982Smrg	lastarg=$arg
3659ed6f5d66Smrg	arg_mode=normal
3660ed6f5d66Smrg	;;
3661ed6f5d66Smrg
3662ed6f5d66Smrg      target )
3663fbc03982Smrg	libobj=$arg
3664ed6f5d66Smrg	arg_mode=normal
3665ed6f5d66Smrg	continue
3666ed6f5d66Smrg	;;
3667ed6f5d66Smrg
3668ed6f5d66Smrg      normal )
3669ed6f5d66Smrg	# Accept any command-line options.
3670ed6f5d66Smrg	case $arg in
3671ed6f5d66Smrg	-o)
3672ed6f5d66Smrg	  test -n "$libobj" && \
3673fbc03982Smrg	    func_fatal_error "you cannot specify '-o' more than once"
3674ed6f5d66Smrg	  arg_mode=target
3675ed6f5d66Smrg	  continue
3676ed6f5d66Smrg	  ;;
3677ed6f5d66Smrg
3678ed6f5d66Smrg	-pie | -fpie | -fPIE)
3679ed6f5d66Smrg          func_append pie_flag " $arg"
3680ed6f5d66Smrg	  continue
3681ed6f5d66Smrg	  ;;
3682ed6f5d66Smrg
3683ed6f5d66Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
3684ed6f5d66Smrg	  func_append later " $arg"
3685ed6f5d66Smrg	  continue
3686ed6f5d66Smrg	  ;;
3687ed6f5d66Smrg
3688ed6f5d66Smrg	-no-suppress)
3689ed6f5d66Smrg	  suppress_opt=no
3690ed6f5d66Smrg	  continue
3691ed6f5d66Smrg	  ;;
3692ed6f5d66Smrg
3693ed6f5d66Smrg	-Xcompiler)
3694ed6f5d66Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
3695ed6f5d66Smrg	  continue      #  The current "srcfile" will either be retained or
3696ed6f5d66Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
3697ed6f5d66Smrg
3698ed6f5d66Smrg	-Wc,*)
3699ed6f5d66Smrg	  func_stripname '-Wc,' '' "$arg"
3700ed6f5d66Smrg	  args=$func_stripname_result
3701ed6f5d66Smrg	  lastarg=
3702fbc03982Smrg	  save_ifs=$IFS; IFS=,
3703ed6f5d66Smrg	  for arg in $args; do
3704fbc03982Smrg	    IFS=$save_ifs
3705ed6f5d66Smrg	    func_append_quoted lastarg "$arg"
3706ed6f5d66Smrg	  done
3707fbc03982Smrg	  IFS=$save_ifs
3708ed6f5d66Smrg	  func_stripname ' ' '' "$lastarg"
3709ed6f5d66Smrg	  lastarg=$func_stripname_result
3710ed6f5d66Smrg
3711ed6f5d66Smrg	  # Add the arguments to base_compile.
3712ed6f5d66Smrg	  func_append base_compile " $lastarg"
3713ed6f5d66Smrg	  continue
3714ed6f5d66Smrg	  ;;
3715ed6f5d66Smrg
3716ed6f5d66Smrg	*)
3717ed6f5d66Smrg	  # Accept the current argument as the source file.
3718ed6f5d66Smrg	  # The previous "srcfile" becomes the current argument.
3719ed6f5d66Smrg	  #
3720fbc03982Smrg	  lastarg=$srcfile
3721fbc03982Smrg	  srcfile=$arg
3722ed6f5d66Smrg	  ;;
3723ed6f5d66Smrg	esac  #  case $arg
3724ed6f5d66Smrg	;;
3725ed6f5d66Smrg      esac    #  case $arg_mode
3726ed6f5d66Smrg
3727ed6f5d66Smrg      # Aesthetically quote the previous argument.
3728ed6f5d66Smrg      func_append_quoted base_compile "$lastarg"
3729ed6f5d66Smrg    done # for arg
3730ed6f5d66Smrg
3731ed6f5d66Smrg    case $arg_mode in
3732ed6f5d66Smrg    arg)
3733ed6f5d66Smrg      func_fatal_error "you must specify an argument for -Xcompile"
3734ed6f5d66Smrg      ;;
3735ed6f5d66Smrg    target)
3736fbc03982Smrg      func_fatal_error "you must specify a target with '-o'"
3737ed6f5d66Smrg      ;;
3738ed6f5d66Smrg    *)
3739ed6f5d66Smrg      # Get the name of the library object.
3740ed6f5d66Smrg      test -z "$libobj" && {
3741ed6f5d66Smrg	func_basename "$srcfile"
3742fbc03982Smrg	libobj=$func_basename_result
3743ed6f5d66Smrg      }
3744ed6f5d66Smrg      ;;
3745ed6f5d66Smrg    esac
3746ed6f5d66Smrg
3747ed6f5d66Smrg    # Recognize several different file suffixes.
3748ed6f5d66Smrg    # If the user specifies -o file.o, it is replaced with file.lo
3749ed6f5d66Smrg    case $libobj in
3750ed6f5d66Smrg    *.[cCFSifmso] | \
3751ed6f5d66Smrg    *.ada | *.adb | *.ads | *.asm | \
3752ed6f5d66Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
3753ed6f5d66Smrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
3754ed6f5d66Smrg      func_xform "$libobj"
3755ed6f5d66Smrg      libobj=$func_xform_result
3756ed6f5d66Smrg      ;;
3757ed6f5d66Smrg    esac
3758ed6f5d66Smrg
3759ed6f5d66Smrg    case $libobj in
3760ed6f5d66Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
3761ed6f5d66Smrg    *)
3762fbc03982Smrg      func_fatal_error "cannot determine name of library object from '$libobj'"
3763ed6f5d66Smrg      ;;
3764ed6f5d66Smrg    esac
3765ed6f5d66Smrg
3766ed6f5d66Smrg    func_infer_tag $base_compile
3767ed6f5d66Smrg
3768ed6f5d66Smrg    for arg in $later; do
3769ed6f5d66Smrg      case $arg in
3770ed6f5d66Smrg      -shared)
3771fbc03982Smrg	test yes = "$build_libtool_libs" \
3772fbc03982Smrg	  || func_fatal_configuration "cannot build a shared library"
3773ed6f5d66Smrg	build_old_libs=no
3774ed6f5d66Smrg	continue
3775ed6f5d66Smrg	;;
3776ed6f5d66Smrg
3777ed6f5d66Smrg      -static)
3778ed6f5d66Smrg	build_libtool_libs=no
3779ed6f5d66Smrg	build_old_libs=yes
3780ed6f5d66Smrg	continue
3781ed6f5d66Smrg	;;
3782ed6f5d66Smrg
3783ed6f5d66Smrg      -prefer-pic)
3784ed6f5d66Smrg	pic_mode=yes
3785ed6f5d66Smrg	continue
3786ed6f5d66Smrg	;;
3787ed6f5d66Smrg
3788ed6f5d66Smrg      -prefer-non-pic)
3789ed6f5d66Smrg	pic_mode=no
3790ed6f5d66Smrg	continue
3791ed6f5d66Smrg	;;
3792ed6f5d66Smrg      esac
3793ed6f5d66Smrg    done
3794ed6f5d66Smrg
37953d05230fSmrg    func_quote_arg pretty "$libobj"
37963d05230fSmrg    test "X$libobj" != "X$func_quote_arg_result" \
3797ed6f5d66Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
3798fbc03982Smrg      && func_warning "libobj name '$libobj' may not contain shell special characters."
3799ed6f5d66Smrg    func_dirname_and_basename "$obj" "/" ""
3800fbc03982Smrg    objname=$func_basename_result
3801fbc03982Smrg    xdir=$func_dirname_result
3802fbc03982Smrg    lobj=$xdir$objdir/$objname
3803ed6f5d66Smrg
3804ed6f5d66Smrg    test -z "$base_compile" && \
3805ed6f5d66Smrg      func_fatal_help "you must specify a compilation command"
3806ed6f5d66Smrg
3807ed6f5d66Smrg    # Delete any leftover library objects.
3808fbc03982Smrg    if test yes = "$build_old_libs"; then
3809ed6f5d66Smrg      removelist="$obj $lobj $libobj ${libobj}T"
3810ed6f5d66Smrg    else
3811ed6f5d66Smrg      removelist="$lobj $libobj ${libobj}T"
3812ed6f5d66Smrg    fi
3813ed6f5d66Smrg
3814ed6f5d66Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
3815ed6f5d66Smrg    case $host_os in
3816a3680546Smrg    cygwin* | mingw* | windows* | pw32* | os2* | cegcc*)
3817ed6f5d66Smrg      pic_mode=default
3818ed6f5d66Smrg      ;;
3819ed6f5d66Smrg    esac
3820fbc03982Smrg    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
3821ed6f5d66Smrg      # non-PIC code in shared libraries is not supported
3822ed6f5d66Smrg      pic_mode=default
3823ed6f5d66Smrg    fi
3824ed6f5d66Smrg
3825ed6f5d66Smrg    # Calculate the filename of the output object if compiler does
3826ed6f5d66Smrg    # not support -o with -c
3827fbc03982Smrg    if test no = "$compiler_c_o"; then
3828fbc03982Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
3829fbc03982Smrg      lockfile=$output_obj.lock
3830ed6f5d66Smrg    else
3831ed6f5d66Smrg      output_obj=
3832ed6f5d66Smrg      need_locks=no
3833ed6f5d66Smrg      lockfile=
3834ed6f5d66Smrg    fi
3835ed6f5d66Smrg
3836ed6f5d66Smrg    # Lock this critical section if it is needed
3837ed6f5d66Smrg    # We use this script file to make the link, it avoids creating a new file
3838fbc03982Smrg    if test yes = "$need_locks"; then
3839ed6f5d66Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3840ed6f5d66Smrg	func_echo "Waiting for $lockfile to be removed"
3841ed6f5d66Smrg	sleep 2
3842ed6f5d66Smrg      done
3843fbc03982Smrg    elif test warn = "$need_locks"; then
3844ed6f5d66Smrg      if test -f "$lockfile"; then
3845ed6f5d66Smrg	$ECHO "\
3846ed6f5d66Smrg*** ERROR, $lockfile exists and contains:
3847ed6f5d66Smrg`cat $lockfile 2>/dev/null`
3848ed6f5d66Smrg
3849ed6f5d66SmrgThis indicates that another process is trying to use the same
3850ed6f5d66Smrgtemporary object file, and libtool could not work around it because
3851fbc03982Smrgyour compiler does not support '-c' and '-o' together.  If you
3852ed6f5d66Smrgrepeat this compilation, it may succeed, by chance, but you had better
3853ed6f5d66Smrgavoid parallel builds (make -j) in this platform, or get a better
3854ed6f5d66Smrgcompiler."
3855ed6f5d66Smrg
3856ed6f5d66Smrg	$opt_dry_run || $RM $removelist
3857ed6f5d66Smrg	exit $EXIT_FAILURE
3858ed6f5d66Smrg      fi
3859ed6f5d66Smrg      func_append removelist " $output_obj"
3860ed6f5d66Smrg      $ECHO "$srcfile" > "$lockfile"
3861ed6f5d66Smrg    fi
3862ed6f5d66Smrg
3863ed6f5d66Smrg    $opt_dry_run || $RM $removelist
3864ed6f5d66Smrg    func_append removelist " $lockfile"
3865ed6f5d66Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
3866ed6f5d66Smrg
3867ed6f5d66Smrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
3868ed6f5d66Smrg    srcfile=$func_to_tool_file_result
38693d05230fSmrg    func_quote_arg pretty "$srcfile"
38703d05230fSmrg    qsrcfile=$func_quote_arg_result
3871ed6f5d66Smrg
3872ed6f5d66Smrg    # Only build a PIC object if we are building libtool libraries.
3873fbc03982Smrg    if test yes = "$build_libtool_libs"; then
3874ed6f5d66Smrg      # Without this assignment, base_compile gets emptied.
3875ed6f5d66Smrg      fbsd_hideous_sh_bug=$base_compile
3876ed6f5d66Smrg
3877fbc03982Smrg      if test no != "$pic_mode"; then
3878ed6f5d66Smrg	command="$base_compile $qsrcfile $pic_flag"
3879ed6f5d66Smrg      else
3880ed6f5d66Smrg	# Don't build PIC code
3881ed6f5d66Smrg	command="$base_compile $qsrcfile"
3882ed6f5d66Smrg      fi
3883ed6f5d66Smrg
3884ed6f5d66Smrg      func_mkdir_p "$xdir$objdir"
3885ed6f5d66Smrg
3886ed6f5d66Smrg      if test -z "$output_obj"; then
3887ed6f5d66Smrg	# Place PIC objects in $objdir
3888ed6f5d66Smrg	func_append command " -o $lobj"
3889ed6f5d66Smrg      fi
3890ed6f5d66Smrg
3891ed6f5d66Smrg      func_show_eval_locale "$command"	\
3892ed6f5d66Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
3893ed6f5d66Smrg
3894fbc03982Smrg      if test warn = "$need_locks" &&
3895ed6f5d66Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3896ed6f5d66Smrg	$ECHO "\
3897ed6f5d66Smrg*** ERROR, $lockfile contains:
3898ed6f5d66Smrg`cat $lockfile 2>/dev/null`
3899ed6f5d66Smrg
3900ed6f5d66Smrgbut it should contain:
3901ed6f5d66Smrg$srcfile
3902ed6f5d66Smrg
3903ed6f5d66SmrgThis indicates that another process is trying to use the same
3904ed6f5d66Smrgtemporary object file, and libtool could not work around it because
3905fbc03982Smrgyour compiler does not support '-c' and '-o' together.  If you
3906ed6f5d66Smrgrepeat this compilation, it may succeed, by chance, but you had better
3907ed6f5d66Smrgavoid parallel builds (make -j) in this platform, or get a better
3908ed6f5d66Smrgcompiler."
3909ed6f5d66Smrg
3910ed6f5d66Smrg	$opt_dry_run || $RM $removelist
3911ed6f5d66Smrg	exit $EXIT_FAILURE
3912ed6f5d66Smrg      fi
3913ed6f5d66Smrg
3914ed6f5d66Smrg      # Just move the object if needed, then go on to compile the next one
3915ed6f5d66Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
3916ed6f5d66Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
3917ed6f5d66Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3918ed6f5d66Smrg      fi
3919ed6f5d66Smrg
3920ed6f5d66Smrg      # Allow error messages only from the first compilation.
3921fbc03982Smrg      if test yes = "$suppress_opt"; then
3922ed6f5d66Smrg	suppress_output=' >/dev/null 2>&1'
3923ed6f5d66Smrg      fi
3924ed6f5d66Smrg    fi
3925ed6f5d66Smrg
3926ed6f5d66Smrg    # Only build a position-dependent object if we build old libraries.
3927fbc03982Smrg    if test yes = "$build_old_libs"; then
3928fbc03982Smrg      if test yes != "$pic_mode"; then
3929ed6f5d66Smrg	# Don't build PIC code
3930ed6f5d66Smrg	command="$base_compile $qsrcfile$pie_flag"
3931ed6f5d66Smrg      else
3932ed6f5d66Smrg	command="$base_compile $qsrcfile $pic_flag"
3933ed6f5d66Smrg      fi
3934fbc03982Smrg      if test yes = "$compiler_c_o"; then
3935ed6f5d66Smrg	func_append command " -o $obj"
3936ed6f5d66Smrg      fi
3937ed6f5d66Smrg
3938ed6f5d66Smrg      # Suppress compiler output if we already did a PIC compilation.
3939ed6f5d66Smrg      func_append command "$suppress_output"
3940ed6f5d66Smrg      func_show_eval_locale "$command" \
3941ed6f5d66Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
3942ed6f5d66Smrg
3943fbc03982Smrg      if test warn = "$need_locks" &&
3944ed6f5d66Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3945ed6f5d66Smrg	$ECHO "\
3946ed6f5d66Smrg*** ERROR, $lockfile contains:
3947ed6f5d66Smrg`cat $lockfile 2>/dev/null`
3948ed6f5d66Smrg
3949ed6f5d66Smrgbut it should contain:
3950ed6f5d66Smrg$srcfile
3951ed6f5d66Smrg
3952ed6f5d66SmrgThis indicates that another process is trying to use the same
3953ed6f5d66Smrgtemporary object file, and libtool could not work around it because
3954fbc03982Smrgyour compiler does not support '-c' and '-o' together.  If you
3955ed6f5d66Smrgrepeat this compilation, it may succeed, by chance, but you had better
3956ed6f5d66Smrgavoid parallel builds (make -j) in this platform, or get a better
3957ed6f5d66Smrgcompiler."
3958ed6f5d66Smrg
3959ed6f5d66Smrg	$opt_dry_run || $RM $removelist
3960ed6f5d66Smrg	exit $EXIT_FAILURE
3961ed6f5d66Smrg      fi
3962ed6f5d66Smrg
3963ed6f5d66Smrg      # Just move the object if needed
3964ed6f5d66Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
3965ed6f5d66Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
3966ed6f5d66Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3967ed6f5d66Smrg      fi
3968ed6f5d66Smrg    fi
3969ed6f5d66Smrg
3970ed6f5d66Smrg    $opt_dry_run || {
3971ed6f5d66Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
3972ed6f5d66Smrg
3973ed6f5d66Smrg      # Unlock the critical section if it was locked
3974fbc03982Smrg      if test no != "$need_locks"; then
3975ed6f5d66Smrg	removelist=$lockfile
3976ed6f5d66Smrg        $RM "$lockfile"
3977ed6f5d66Smrg      fi
3978ed6f5d66Smrg    }
3979ed6f5d66Smrg
3980ed6f5d66Smrg    exit $EXIT_SUCCESS
3981ed6f5d66Smrg}
3982ed6f5d66Smrg
3983ed6f5d66Smrg$opt_help || {
3984fbc03982Smrg  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
3985ed6f5d66Smrg}
3986ed6f5d66Smrg
3987ed6f5d66Smrgfunc_mode_help ()
3988ed6f5d66Smrg{
3989ed6f5d66Smrg    # We need to display help for each of the modes.
3990ed6f5d66Smrg    case $opt_mode in
3991ed6f5d66Smrg      "")
3992ed6f5d66Smrg        # Generic help is extracted from the usage comments
3993ed6f5d66Smrg        # at the start of this file.
3994ed6f5d66Smrg        func_help
3995ed6f5d66Smrg        ;;
3996ed6f5d66Smrg
3997ed6f5d66Smrg      clean)
3998ed6f5d66Smrg        $ECHO \
3999ed6f5d66Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
4000ed6f5d66Smrg
4001ed6f5d66SmrgRemove files from the build directory.
4002ed6f5d66Smrg
4003ed6f5d66SmrgRM is the name of the program to use to delete files associated with each FILE
4004fbc03982Smrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
4005ed6f5d66Smrgto RM.
4006ed6f5d66Smrg
4007ed6f5d66SmrgIf FILE is a libtool library, object or program, all the files associated
4008ed6f5d66Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
4009ed6f5d66Smrg        ;;
4010ed6f5d66Smrg
4011ed6f5d66Smrg      compile)
4012ed6f5d66Smrg      $ECHO \
4013ed6f5d66Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
4014ed6f5d66Smrg
4015ed6f5d66SmrgCompile a source file into a libtool library object.
4016ed6f5d66Smrg
4017ed6f5d66SmrgThis mode accepts the following additional options:
4018ed6f5d66Smrg
4019ed6f5d66Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
4020ed6f5d66Smrg  -no-suppress      do not suppress compiler output for multiple passes
4021ed6f5d66Smrg  -prefer-pic       try to build PIC objects only
4022ed6f5d66Smrg  -prefer-non-pic   try to build non-PIC objects only
4023fbc03982Smrg  -shared           do not build a '.o' file suitable for static linking
4024fbc03982Smrg  -static           only build a '.o' file suitable for static linking
40253d05230fSmrg  -Wc,FLAG
40263d05230fSmrg  -Xcompiler FLAG   pass FLAG directly to the compiler
4027ed6f5d66Smrg
4028fbc03982SmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file
4029ed6f5d66Smrgfrom the given SOURCEFILE.
4030ed6f5d66Smrg
4031ed6f5d66SmrgThe output file name is determined by removing the directory component from
4032fbc03982SmrgSOURCEFILE, then substituting the C source code suffix '.c' with the
4033fbc03982Smrglibrary object suffix, '.lo'."
4034ed6f5d66Smrg        ;;
4035ed6f5d66Smrg
4036ed6f5d66Smrg      execute)
4037ed6f5d66Smrg        $ECHO \
4038ed6f5d66Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
4039ed6f5d66Smrg
4040ed6f5d66SmrgAutomatically set library path, then run a program.
4041ed6f5d66Smrg
4042ed6f5d66SmrgThis mode accepts the following additional options:
4043ed6f5d66Smrg
4044ed6f5d66Smrg  -dlopen FILE      add the directory containing FILE to the library path
4045ed6f5d66Smrg
4046fbc03982SmrgThis mode sets the library path environment variable according to '-dlopen'
4047ed6f5d66Smrgflags.
4048ed6f5d66Smrg
4049ed6f5d66SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
4050ed6f5d66Smrginto their corresponding uninstalled binary, and any of their required library
4051ed6f5d66Smrgdirectories are added to the library path.
4052ed6f5d66Smrg
4053ed6f5d66SmrgThen, COMMAND is executed, with ARGS as arguments."
4054ed6f5d66Smrg        ;;
4055ed6f5d66Smrg
4056ed6f5d66Smrg      finish)
4057ed6f5d66Smrg        $ECHO \
4058ed6f5d66Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
4059ed6f5d66Smrg
4060ed6f5d66SmrgComplete the installation of libtool libraries.
4061ed6f5d66Smrg
4062ed6f5d66SmrgEach LIBDIR is a directory that contains libtool libraries.
4063ed6f5d66Smrg
4064ed6f5d66SmrgThe commands that this mode executes may require superuser privileges.  Use
4065fbc03982Smrgthe '--dry-run' option if you just want to see what would be executed."
4066ed6f5d66Smrg        ;;
4067ed6f5d66Smrg
4068ed6f5d66Smrg      install)
4069ed6f5d66Smrg        $ECHO \
4070ed6f5d66Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
4071ed6f5d66Smrg
4072ed6f5d66SmrgInstall executables or libraries.
4073ed6f5d66Smrg
4074ed6f5d66SmrgINSTALL-COMMAND is the installation command.  The first component should be
4075fbc03982Smrgeither the 'install' or 'cp' program.
4076ed6f5d66Smrg
4077ed6f5d66SmrgThe following components of INSTALL-COMMAND are treated specially:
4078ed6f5d66Smrg
4079ed6f5d66Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
4080ed6f5d66Smrg
4081ed6f5d66SmrgThe rest of the components are interpreted as arguments to that command (only
4082ed6f5d66SmrgBSD-compatible install options are recognized)."
4083ed6f5d66Smrg        ;;
4084ed6f5d66Smrg
4085ed6f5d66Smrg      link)
4086ed6f5d66Smrg        $ECHO \
4087ed6f5d66Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
4088ed6f5d66Smrg
4089ed6f5d66SmrgLink object files or libraries together to form another library, or to
4090ed6f5d66Smrgcreate an executable program.
4091ed6f5d66Smrg
4092ed6f5d66SmrgLINK-COMMAND is a command using the C compiler that you would use to create
4093ed6f5d66Smrga program from several object files.
4094ed6f5d66Smrg
4095ed6f5d66SmrgThe following components of LINK-COMMAND are treated specially:
4096ed6f5d66Smrg
4097ed6f5d66Smrg  -all-static       do not do any dynamic linking at all
4098ed6f5d66Smrg  -avoid-version    do not add a version suffix if possible
4099ed6f5d66Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
4100ed6f5d66Smrg                    libraries must be found in the PATH setting at runtime)
4101fbc03982Smrg  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
4102ed6f5d66Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
4103ed6f5d66Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
4104ed6f5d66Smrg  -export-symbols SYMFILE
4105ed6f5d66Smrg                    try to export only the symbols listed in SYMFILE
4106ed6f5d66Smrg  -export-symbols-regex REGEX
4107ed6f5d66Smrg                    try to export only the symbols matching REGEX
4108ed6f5d66Smrg  -LLIBDIR          search LIBDIR for required installed libraries
4109ed6f5d66Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
4110ed6f5d66Smrg  -module           build a library that can dlopened
4111ed6f5d66Smrg  -no-fast-install  disable the fast-install mode
4112ed6f5d66Smrg  -no-install       link a not-installable executable
4113ed6f5d66Smrg  -no-undefined     declare that a library does not refer to external symbols
4114ed6f5d66Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
4115fbc03982Smrg  -objectlist FILE  use a list of object files found in FILE to specify objects
4116fbc03982Smrg  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
4117ed6f5d66Smrg  -precious-files-regex REGEX
4118ed6f5d66Smrg                    don't remove output files matching REGEX
4119ed6f5d66Smrg  -release RELEASE  specify package release information
4120ed6f5d66Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
4121ed6f5d66Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
4122ed6f5d66Smrg  -shared           only do dynamic linking of libtool libraries
4123ed6f5d66Smrg  -shrext SUFFIX    override the standard shared library file extension
4124ed6f5d66Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
4125ed6f5d66Smrg  -static-libtool-libs
4126ed6f5d66Smrg                    do not do any dynamic linking of libtool libraries
4127ed6f5d66Smrg  -version-info CURRENT[:REVISION[:AGE]]
4128ed6f5d66Smrg                    specify library version info [each variable defaults to 0]
4129ed6f5d66Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
4130ed6f5d66Smrg  -Wc,FLAG
4131ed6f5d66Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
41323d05230fSmrg  -Wa,FLAG
41333d05230fSmrg  -Xassembler FLAG  pass linker-specific FLAG directly to the assembler
4134ed6f5d66Smrg  -Wl,FLAG
4135ed6f5d66Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
4136ed6f5d66Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
4137ed6f5d66Smrg
4138fbc03982SmrgAll other options (arguments beginning with '-') are ignored.
4139ed6f5d66Smrg
4140fbc03982SmrgEvery other argument is treated as a filename.  Files ending in '.la' are
4141ed6f5d66Smrgtreated as uninstalled libtool libraries, other files are standard or library
4142ed6f5d66Smrgobject files.
4143ed6f5d66Smrg
4144fbc03982SmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created,
4145fbc03982Smrgonly library objects ('.lo' files) may be specified, and '-rpath' is
4146ed6f5d66Smrgrequired, except when creating a convenience library.
4147ed6f5d66Smrg
4148fbc03982SmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
4149fbc03982Smrgusing 'ar' and 'ranlib', or on Windows using 'lib'.
4150ed6f5d66Smrg
4151fbc03982SmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
4152ed6f5d66Smrgis created, otherwise an executable program is created."
4153ed6f5d66Smrg        ;;
4154ed6f5d66Smrg
4155ed6f5d66Smrg      uninstall)
4156ed6f5d66Smrg        $ECHO \
4157ed6f5d66Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
4158ed6f5d66Smrg
4159ed6f5d66SmrgRemove libraries from an installation directory.
4160ed6f5d66Smrg
4161ed6f5d66SmrgRM is the name of the program to use to delete files associated with each FILE
4162fbc03982Smrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
4163ed6f5d66Smrgto RM.
4164ed6f5d66Smrg
4165ed6f5d66SmrgIf FILE is a libtool library, all the files associated with it are deleted.
4166ed6f5d66SmrgOtherwise, only FILE itself is deleted using RM."
4167ed6f5d66Smrg        ;;
4168ed6f5d66Smrg
4169ed6f5d66Smrg      *)
4170fbc03982Smrg        func_fatal_help "invalid operation mode '$opt_mode'"
4171ed6f5d66Smrg        ;;
4172ed6f5d66Smrg    esac
4173ed6f5d66Smrg
4174ed6f5d66Smrg    echo
4175fbc03982Smrg    $ECHO "Try '$progname --help' for more information about other modes."
4176ed6f5d66Smrg}
4177ed6f5d66Smrg
4178ed6f5d66Smrg# Now that we've collected a possible --mode arg, show help if necessary
4179ed6f5d66Smrgif $opt_help; then
4180fbc03982Smrg  if test : = "$opt_help"; then
4181ed6f5d66Smrg    func_mode_help
4182ed6f5d66Smrg  else
4183ed6f5d66Smrg    {
4184ed6f5d66Smrg      func_help noexit
4185ed6f5d66Smrg      for opt_mode in compile link execute install finish uninstall clean; do
4186ed6f5d66Smrg	func_mode_help
4187ed6f5d66Smrg      done
4188fbc03982Smrg    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
4189ed6f5d66Smrg    {
4190ed6f5d66Smrg      func_help noexit
4191ed6f5d66Smrg      for opt_mode in compile link execute install finish uninstall clean; do
4192ed6f5d66Smrg	echo
4193ed6f5d66Smrg	func_mode_help
4194ed6f5d66Smrg      done
4195ed6f5d66Smrg    } |
4196fbc03982Smrg    $SED '1d
4197ed6f5d66Smrg      /^When reporting/,/^Report/{
4198ed6f5d66Smrg	H
4199ed6f5d66Smrg	d
4200ed6f5d66Smrg      }
4201ed6f5d66Smrg      $x
4202ed6f5d66Smrg      /information about other modes/d
4203ed6f5d66Smrg      /more detailed .*MODE/d
4204ed6f5d66Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
4205ed6f5d66Smrg  fi
4206ed6f5d66Smrg  exit $?
4207ed6f5d66Smrgfi
4208ed6f5d66Smrg
4209ed6f5d66Smrg
4210a3680546Smrg# If option '--reorder-cache', reorder the shared library cache and exit.
4211a3680546Smrgif $opt_reorder_cache; then
4212a3680546Smrg    func_reorder_shared_lib_cache $shared_lib_dirs
4213a3680546Smrgfi
4214a3680546Smrg
4215a3680546Smrg
4216ed6f5d66Smrg# func_mode_execute arg...
4217ed6f5d66Smrgfunc_mode_execute ()
4218ed6f5d66Smrg{
4219fbc03982Smrg    $debug_cmd
4220fbc03982Smrg
4221ed6f5d66Smrg    # The first argument is the command name.
4222fbc03982Smrg    cmd=$nonopt
4223ed6f5d66Smrg    test -z "$cmd" && \
4224ed6f5d66Smrg      func_fatal_help "you must specify a COMMAND"
4225ed6f5d66Smrg
4226ed6f5d66Smrg    # Handle -dlopen flags immediately.
4227ed6f5d66Smrg    for file in $opt_dlopen; do
4228ed6f5d66Smrg      test -f "$file" \
4229fbc03982Smrg	|| func_fatal_help "'$file' is not a file"
4230ed6f5d66Smrg
4231ed6f5d66Smrg      dir=
4232ed6f5d66Smrg      case $file in
4233ed6f5d66Smrg      *.la)
4234ed6f5d66Smrg	func_resolve_sysroot "$file"
4235ed6f5d66Smrg	file=$func_resolve_sysroot_result
4236ed6f5d66Smrg
4237ed6f5d66Smrg	# Check to see that this really is a libtool archive.
4238ed6f5d66Smrg	func_lalib_unsafe_p "$file" \
4239fbc03982Smrg	  || func_fatal_help "'$lib' is not a valid libtool archive"
4240ed6f5d66Smrg
4241ed6f5d66Smrg	# Read the libtool library.
4242ed6f5d66Smrg	dlname=
4243ed6f5d66Smrg	library_names=
4244ed6f5d66Smrg	func_source "$file"
4245ed6f5d66Smrg
4246ed6f5d66Smrg	# Skip this library if it cannot be dlopened.
4247ed6f5d66Smrg	if test -z "$dlname"; then
4248ed6f5d66Smrg	  # Warn if it was a shared library.
4249ed6f5d66Smrg	  test -n "$library_names" && \
4250fbc03982Smrg	    func_warning "'$file' was not linked with '-export-dynamic'"
4251ed6f5d66Smrg	  continue
4252ed6f5d66Smrg	fi
4253ed6f5d66Smrg
4254ed6f5d66Smrg	func_dirname "$file" "" "."
4255fbc03982Smrg	dir=$func_dirname_result
4256ed6f5d66Smrg
4257ed6f5d66Smrg	if test -f "$dir/$objdir/$dlname"; then
4258ed6f5d66Smrg	  func_append dir "/$objdir"
4259ed6f5d66Smrg	else
4260ed6f5d66Smrg	  if test ! -f "$dir/$dlname"; then
4261fbc03982Smrg	    func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
4262ed6f5d66Smrg	  fi
4263ed6f5d66Smrg	fi
4264ed6f5d66Smrg	;;
4265ed6f5d66Smrg
4266ed6f5d66Smrg      *.lo)
4267ed6f5d66Smrg	# Just add the directory containing the .lo file.
4268ed6f5d66Smrg	func_dirname "$file" "" "."
4269fbc03982Smrg	dir=$func_dirname_result
4270ed6f5d66Smrg	;;
4271ed6f5d66Smrg
4272ed6f5d66Smrg      *)
4273fbc03982Smrg	func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
4274ed6f5d66Smrg	continue
4275ed6f5d66Smrg	;;
4276ed6f5d66Smrg      esac
4277ed6f5d66Smrg
4278ed6f5d66Smrg      # Get the absolute pathname.
4279ed6f5d66Smrg      absdir=`cd "$dir" && pwd`
4280fbc03982Smrg      test -n "$absdir" && dir=$absdir
4281ed6f5d66Smrg
4282ed6f5d66Smrg      # Now add the directory to shlibpath_var.
4283ed6f5d66Smrg      if eval "test -z \"\$$shlibpath_var\""; then
4284ed6f5d66Smrg	eval "$shlibpath_var=\"\$dir\""
4285ed6f5d66Smrg      else
4286ed6f5d66Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
4287ed6f5d66Smrg      fi
4288ed6f5d66Smrg    done
4289ed6f5d66Smrg
4290ed6f5d66Smrg    # This variable tells wrapper scripts just to set shlibpath_var
4291ed6f5d66Smrg    # rather than running their programs.
4292fbc03982Smrg    libtool_execute_magic=$magic
4293ed6f5d66Smrg
4294ed6f5d66Smrg    # Check if any of the arguments is a wrapper script.
4295ed6f5d66Smrg    args=
4296ed6f5d66Smrg    for file
4297ed6f5d66Smrg    do
4298ed6f5d66Smrg      case $file in
4299ed6f5d66Smrg      -* | *.la | *.lo ) ;;
4300ed6f5d66Smrg      *)
4301ed6f5d66Smrg	# Do a test to see if this is really a libtool program.
4302ed6f5d66Smrg	if func_ltwrapper_script_p "$file"; then
4303ed6f5d66Smrg	  func_source "$file"
4304ed6f5d66Smrg	  # Transform arg to wrapped name.
4305fbc03982Smrg	  file=$progdir/$program
4306ed6f5d66Smrg	elif func_ltwrapper_executable_p "$file"; then
4307ed6f5d66Smrg	  func_ltwrapper_scriptname "$file"
4308ed6f5d66Smrg	  func_source "$func_ltwrapper_scriptname_result"
4309ed6f5d66Smrg	  # Transform arg to wrapped name.
4310fbc03982Smrg	  file=$progdir/$program
4311ed6f5d66Smrg	fi
4312ed6f5d66Smrg	;;
4313ed6f5d66Smrg      esac
4314ed6f5d66Smrg      # Quote arguments (to preserve shell metacharacters).
4315ed6f5d66Smrg      func_append_quoted args "$file"
4316ed6f5d66Smrg    done
4317ed6f5d66Smrg
4318fbc03982Smrg    if $opt_dry_run; then
4319fbc03982Smrg      # Display what would be done.
4320fbc03982Smrg      if test -n "$shlibpath_var"; then
4321fbc03982Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
4322fbc03982Smrg	echo "export $shlibpath_var"
4323fbc03982Smrg      fi
4324fbc03982Smrg      $ECHO "$cmd$args"
4325fbc03982Smrg      exit $EXIT_SUCCESS
4326fbc03982Smrg    else
4327ed6f5d66Smrg      if test -n "$shlibpath_var"; then
4328ed6f5d66Smrg	# Export the shlibpath_var.
4329ed6f5d66Smrg	eval "export $shlibpath_var"
4330ed6f5d66Smrg      fi
4331ed6f5d66Smrg
4332ed6f5d66Smrg      # Restore saved environment variables
4333ed6f5d66Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
4334ed6f5d66Smrg      do
4335ed6f5d66Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
4336ed6f5d66Smrg                $lt_var=\$save_$lt_var; export $lt_var
4337ed6f5d66Smrg	      else
4338ed6f5d66Smrg		$lt_unset $lt_var
4339ed6f5d66Smrg	      fi"
4340ed6f5d66Smrg      done
4341ed6f5d66Smrg
4342ed6f5d66Smrg      # Now prepare to actually exec the command.
4343fbc03982Smrg      exec_cmd=\$cmd$args
4344ed6f5d66Smrg    fi
4345ed6f5d66Smrg}
4346ed6f5d66Smrg
4347fbc03982Smrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"}
4348ed6f5d66Smrg
4349ed6f5d66Smrg
4350ed6f5d66Smrg# func_mode_finish arg...
4351ed6f5d66Smrgfunc_mode_finish ()
4352ed6f5d66Smrg{
4353fbc03982Smrg    $debug_cmd
4354fbc03982Smrg
4355ed6f5d66Smrg    libs=
4356ed6f5d66Smrg    libdirs=
4357ed6f5d66Smrg    admincmds=
4358ed6f5d66Smrg
4359ed6f5d66Smrg    for opt in "$nonopt" ${1+"$@"}
4360ed6f5d66Smrg    do
4361ed6f5d66Smrg      if test -d "$opt"; then
4362ed6f5d66Smrg	func_append libdirs " $opt"
4363ed6f5d66Smrg
4364ed6f5d66Smrg      elif test -f "$opt"; then
4365ed6f5d66Smrg	if func_lalib_unsafe_p "$opt"; then
4366ed6f5d66Smrg	  func_append libs " $opt"
4367ed6f5d66Smrg	else
4368fbc03982Smrg	  func_warning "'$opt' is not a valid libtool archive"
4369ed6f5d66Smrg	fi
4370ed6f5d66Smrg
4371ed6f5d66Smrg      else
4372fbc03982Smrg	func_fatal_error "invalid argument '$opt'"
4373ed6f5d66Smrg      fi
4374ed6f5d66Smrg    done
4375ed6f5d66Smrg
4376ed6f5d66Smrg    if test -n "$libs"; then
4377ed6f5d66Smrg      if test -n "$lt_sysroot"; then
4378ed6f5d66Smrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
4379ed6f5d66Smrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
4380ed6f5d66Smrg      else
4381ed6f5d66Smrg        sysroot_cmd=
4382ed6f5d66Smrg      fi
4383ed6f5d66Smrg
4384ed6f5d66Smrg      # Remove sysroot references
4385ed6f5d66Smrg      if $opt_dry_run; then
4386ed6f5d66Smrg        for lib in $libs; do
4387fbc03982Smrg          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
4388ed6f5d66Smrg        done
4389ed6f5d66Smrg      else
4390ed6f5d66Smrg        tmpdir=`func_mktempdir`
4391ed6f5d66Smrg        for lib in $libs; do
4392fbc03982Smrg	  $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
4393ed6f5d66Smrg	    > $tmpdir/tmp-la
4394ed6f5d66Smrg	  mv -f $tmpdir/tmp-la $lib
4395ed6f5d66Smrg	done
4396ed6f5d66Smrg        ${RM}r "$tmpdir"
4397ed6f5d66Smrg      fi
4398ed6f5d66Smrg    fi
4399ed6f5d66Smrg
4400a3680546Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs" && $opt_finishing; then
4401ed6f5d66Smrg      for libdir in $libdirs; do
4402ed6f5d66Smrg	if test -n "$finish_cmds"; then
4403ed6f5d66Smrg	  # Do each command in the finish commands.
4404ed6f5d66Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
4405ed6f5d66Smrg'"$cmd"'"'
4406ed6f5d66Smrg	fi
4407ed6f5d66Smrg	if test -n "$finish_eval"; then
4408ed6f5d66Smrg	  # Do the single finish_eval.
4409ed6f5d66Smrg	  eval cmds=\"$finish_eval\"
4410ed6f5d66Smrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
4411ed6f5d66Smrg       $cmds"
4412ed6f5d66Smrg	fi
4413ed6f5d66Smrg      done
4414ed6f5d66Smrg    fi
4415ed6f5d66Smrg
4416ed6f5d66Smrg    # Exit here if they wanted silent mode.
4417fbc03982Smrg    $opt_quiet && exit $EXIT_SUCCESS
4418ed6f5d66Smrg
4419ed6f5d66Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4420ed6f5d66Smrg      echo "----------------------------------------------------------------------"
4421ed6f5d66Smrg      echo "Libraries have been installed in:"
4422ed6f5d66Smrg      for libdir in $libdirs; do
4423ed6f5d66Smrg	$ECHO "   $libdir"
4424ed6f5d66Smrg      done
4425a3680546Smrg      if test "false" = "$opt_finishing"; then
4426a3680546Smrg        echo
4427a3680546Smrg        echo "NOTE: finish_cmds were not executed during testing, so you must"
4428a3680546Smrg        echo "manually run ldconfig to add a given test directory, LIBDIR, to"
4429a3680546Smrg        echo "the search path for generated executables."
4430a3680546Smrg      fi
4431ed6f5d66Smrg      echo
4432ed6f5d66Smrg      echo "If you ever happen to want to link against installed libraries"
4433ed6f5d66Smrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
4434fbc03982Smrg      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
4435ed6f5d66Smrg      echo "flag during linking and do at least one of the following:"
4436ed6f5d66Smrg      if test -n "$shlibpath_var"; then
4437fbc03982Smrg	echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
4438ed6f5d66Smrg	echo "     during execution"
4439ed6f5d66Smrg      fi
4440ed6f5d66Smrg      if test -n "$runpath_var"; then
4441fbc03982Smrg	echo "   - add LIBDIR to the '$runpath_var' environment variable"
4442ed6f5d66Smrg	echo "     during linking"
4443ed6f5d66Smrg      fi
4444ed6f5d66Smrg      if test -n "$hardcode_libdir_flag_spec"; then
4445ed6f5d66Smrg	libdir=LIBDIR
4446ed6f5d66Smrg	eval flag=\"$hardcode_libdir_flag_spec\"
4447ed6f5d66Smrg
4448fbc03982Smrg	$ECHO "   - use the '$flag' linker flag"
4449ed6f5d66Smrg      fi
4450ed6f5d66Smrg      if test -n "$admincmds"; then
4451ed6f5d66Smrg	$ECHO "   - have your system administrator run these commands:$admincmds"
4452ed6f5d66Smrg      fi
4453ed6f5d66Smrg      if test -f /etc/ld.so.conf; then
4454fbc03982Smrg	echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
4455ed6f5d66Smrg      fi
4456ed6f5d66Smrg      echo
4457ed6f5d66Smrg
4458ed6f5d66Smrg      echo "See any operating system documentation about shared libraries for"
4459ed6f5d66Smrg      case $host in
4460ed6f5d66Smrg	solaris2.[6789]|solaris2.1[0-9])
4461ed6f5d66Smrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
4462ed6f5d66Smrg	  echo "pages."
4463ed6f5d66Smrg	  ;;
4464ed6f5d66Smrg	*)
4465ed6f5d66Smrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
4466ed6f5d66Smrg	  ;;
4467ed6f5d66Smrg      esac
4468ed6f5d66Smrg      echo "----------------------------------------------------------------------"
4469ed6f5d66Smrg    fi
4470ed6f5d66Smrg    exit $EXIT_SUCCESS
4471ed6f5d66Smrg}
4472ed6f5d66Smrg
4473fbc03982Smrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"}
4474ed6f5d66Smrg
4475ed6f5d66Smrg
4476ed6f5d66Smrg# func_mode_install arg...
4477ed6f5d66Smrgfunc_mode_install ()
4478ed6f5d66Smrg{
4479fbc03982Smrg    $debug_cmd
4480fbc03982Smrg
4481ed6f5d66Smrg    # There may be an optional sh(1) argument at the beginning of
4482ed6f5d66Smrg    # install_prog (especially on Windows NT).
4483fbc03982Smrg    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
4484ed6f5d66Smrg       # Allow the use of GNU shtool's install command.
4485fbc03982Smrg       case $nonopt in *shtool*) :;; *) false;; esac
4486fbc03982Smrg    then
4487ed6f5d66Smrg      # Aesthetically quote it.
44883d05230fSmrg      func_quote_arg pretty "$nonopt"
44893d05230fSmrg      install_prog="$func_quote_arg_result "
4490ed6f5d66Smrg      arg=$1
4491ed6f5d66Smrg      shift
4492ed6f5d66Smrg    else
4493ed6f5d66Smrg      install_prog=
4494ed6f5d66Smrg      arg=$nonopt
4495ed6f5d66Smrg    fi
4496ed6f5d66Smrg
4497ed6f5d66Smrg    # The real first argument should be the name of the installation program.
4498ed6f5d66Smrg    # Aesthetically quote it.
44993d05230fSmrg    func_quote_arg pretty "$arg"
45003d05230fSmrg    func_append install_prog "$func_quote_arg_result"
4501ed6f5d66Smrg    install_shared_prog=$install_prog
4502ed6f5d66Smrg    case " $install_prog " in
4503ed6f5d66Smrg      *[\\\ /]cp\ *) install_cp=: ;;
4504ed6f5d66Smrg      *) install_cp=false ;;
4505ed6f5d66Smrg    esac
4506ed6f5d66Smrg
4507ed6f5d66Smrg    # We need to accept at least all the BSD install flags.
4508ed6f5d66Smrg    dest=
4509ed6f5d66Smrg    files=
4510ed6f5d66Smrg    opts=
4511ed6f5d66Smrg    prev=
4512ed6f5d66Smrg    install_type=
4513fbc03982Smrg    isdir=false
4514ed6f5d66Smrg    stripme=
4515ed6f5d66Smrg    no_mode=:
4516ed6f5d66Smrg    for arg
4517ed6f5d66Smrg    do
4518ed6f5d66Smrg      arg2=
4519ed6f5d66Smrg      if test -n "$dest"; then
4520ed6f5d66Smrg	func_append files " $dest"
4521ed6f5d66Smrg	dest=$arg
4522ed6f5d66Smrg	continue
4523ed6f5d66Smrg      fi
4524ed6f5d66Smrg
4525ed6f5d66Smrg      case $arg in
4526fbc03982Smrg      -d) isdir=: ;;
4527ed6f5d66Smrg      -f)
4528ed6f5d66Smrg	if $install_cp; then :; else
4529ed6f5d66Smrg	  prev=$arg
4530ed6f5d66Smrg	fi
4531ed6f5d66Smrg	;;
4532ed6f5d66Smrg      -g | -m | -o)
4533ed6f5d66Smrg	prev=$arg
4534ed6f5d66Smrg	;;
4535ed6f5d66Smrg      -s)
4536ed6f5d66Smrg	stripme=" -s"
4537ed6f5d66Smrg	continue
4538ed6f5d66Smrg	;;
4539ed6f5d66Smrg      -*)
4540ed6f5d66Smrg	;;
4541ed6f5d66Smrg      *)
4542ed6f5d66Smrg	# If the previous option needed an argument, then skip it.
4543ed6f5d66Smrg	if test -n "$prev"; then
4544fbc03982Smrg	  if test X-m = "X$prev" && test -n "$install_override_mode"; then
4545ed6f5d66Smrg	    arg2=$install_override_mode
4546ed6f5d66Smrg	    no_mode=false
4547ed6f5d66Smrg	  fi
4548ed6f5d66Smrg	  prev=
4549ed6f5d66Smrg	else
4550ed6f5d66Smrg	  dest=$arg
4551ed6f5d66Smrg	  continue
4552ed6f5d66Smrg	fi
4553ed6f5d66Smrg	;;
4554ed6f5d66Smrg      esac
4555ed6f5d66Smrg
4556ed6f5d66Smrg      # Aesthetically quote the argument.
45573d05230fSmrg      func_quote_arg pretty "$arg"
45583d05230fSmrg      func_append install_prog " $func_quote_arg_result"
4559ed6f5d66Smrg      if test -n "$arg2"; then
45603d05230fSmrg	func_quote_arg pretty "$arg2"
4561ed6f5d66Smrg      fi
45623d05230fSmrg      func_append install_shared_prog " $func_quote_arg_result"
4563ed6f5d66Smrg    done
4564ed6f5d66Smrg
4565ed6f5d66Smrg    test -z "$install_prog" && \
4566ed6f5d66Smrg      func_fatal_help "you must specify an install program"
4567ed6f5d66Smrg
4568ed6f5d66Smrg    test -n "$prev" && \
4569fbc03982Smrg      func_fatal_help "the '$prev' option requires an argument"
4570ed6f5d66Smrg
4571ed6f5d66Smrg    if test -n "$install_override_mode" && $no_mode; then
4572ed6f5d66Smrg      if $install_cp; then :; else
45733d05230fSmrg	func_quote_arg pretty "$install_override_mode"
45743d05230fSmrg	func_append install_shared_prog " -m $func_quote_arg_result"
4575ed6f5d66Smrg      fi
4576ed6f5d66Smrg    fi
4577ed6f5d66Smrg
4578ed6f5d66Smrg    if test -z "$files"; then
4579ed6f5d66Smrg      if test -z "$dest"; then
4580ed6f5d66Smrg	func_fatal_help "no file or destination specified"
4581ed6f5d66Smrg      else
4582ed6f5d66Smrg	func_fatal_help "you must specify a destination"
4583ed6f5d66Smrg      fi
4584ed6f5d66Smrg    fi
4585ed6f5d66Smrg
4586ed6f5d66Smrg    # Strip any trailing slash from the destination.
4587ed6f5d66Smrg    func_stripname '' '/' "$dest"
4588ed6f5d66Smrg    dest=$func_stripname_result
4589ed6f5d66Smrg
4590ed6f5d66Smrg    # Check to see that the destination is a directory.
4591fbc03982Smrg    test -d "$dest" && isdir=:
4592fbc03982Smrg    if $isdir; then
4593fbc03982Smrg      destdir=$dest
4594ed6f5d66Smrg      destname=
4595ed6f5d66Smrg    else
4596ed6f5d66Smrg      func_dirname_and_basename "$dest" "" "."
4597fbc03982Smrg      destdir=$func_dirname_result
4598fbc03982Smrg      destname=$func_basename_result
4599ed6f5d66Smrg
4600ed6f5d66Smrg      # Not a directory, so check to see that there is only one file specified.
4601ed6f5d66Smrg      set dummy $files; shift
4602ed6f5d66Smrg      test "$#" -gt 1 && \
4603fbc03982Smrg	func_fatal_help "'$dest' is not a directory"
4604ed6f5d66Smrg    fi
4605ed6f5d66Smrg    case $destdir in
4606ed6f5d66Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
4607ed6f5d66Smrg    *)
4608ed6f5d66Smrg      for file in $files; do
4609ed6f5d66Smrg	case $file in
4610ed6f5d66Smrg	*.lo) ;;
4611ed6f5d66Smrg	*)
4612fbc03982Smrg	  func_fatal_help "'$destdir' must be an absolute directory name"
4613ed6f5d66Smrg	  ;;
4614ed6f5d66Smrg	esac
4615ed6f5d66Smrg      done
4616ed6f5d66Smrg      ;;
4617ed6f5d66Smrg    esac
4618ed6f5d66Smrg
4619ed6f5d66Smrg    # This variable tells wrapper scripts just to set variables rather
4620ed6f5d66Smrg    # than running their programs.
4621fbc03982Smrg    libtool_install_magic=$magic
4622ed6f5d66Smrg
4623ed6f5d66Smrg    staticlibs=
4624ed6f5d66Smrg    future_libdirs=
4625ed6f5d66Smrg    current_libdirs=
4626ed6f5d66Smrg    for file in $files; do
4627ed6f5d66Smrg
4628ed6f5d66Smrg      # Do each installation.
4629ed6f5d66Smrg      case $file in
4630ed6f5d66Smrg      *.$libext)
4631ed6f5d66Smrg	# Do the static libraries later.
4632ed6f5d66Smrg	func_append staticlibs " $file"
4633ed6f5d66Smrg	;;
4634ed6f5d66Smrg
4635ed6f5d66Smrg      *.la)
4636ed6f5d66Smrg	func_resolve_sysroot "$file"
4637ed6f5d66Smrg	file=$func_resolve_sysroot_result
4638ed6f5d66Smrg
4639ed6f5d66Smrg	# Check to see that this really is a libtool archive.
4640ed6f5d66Smrg	func_lalib_unsafe_p "$file" \
4641fbc03982Smrg	  || func_fatal_help "'$file' is not a valid libtool archive"
4642ed6f5d66Smrg
4643ed6f5d66Smrg	library_names=
4644ed6f5d66Smrg	old_library=
4645ed6f5d66Smrg	relink_command=
4646ed6f5d66Smrg	func_source "$file"
4647ed6f5d66Smrg
4648ed6f5d66Smrg	# Add the libdir to current_libdirs if it is the destination.
4649ed6f5d66Smrg	if test "X$destdir" = "X$libdir"; then
4650ed6f5d66Smrg	  case "$current_libdirs " in
4651ed6f5d66Smrg	  *" $libdir "*) ;;
4652ed6f5d66Smrg	  *) func_append current_libdirs " $libdir" ;;
4653ed6f5d66Smrg	  esac
4654ed6f5d66Smrg	else
4655ed6f5d66Smrg	  # Note the libdir as a future libdir.
4656ed6f5d66Smrg	  case "$future_libdirs " in
4657ed6f5d66Smrg	  *" $libdir "*) ;;
4658ed6f5d66Smrg	  *) func_append future_libdirs " $libdir" ;;
4659ed6f5d66Smrg	  esac
4660ed6f5d66Smrg	fi
4661ed6f5d66Smrg
4662ed6f5d66Smrg	func_dirname "$file" "/" ""
4663fbc03982Smrg	dir=$func_dirname_result
4664ed6f5d66Smrg	func_append dir "$objdir"
4665ed6f5d66Smrg
4666ed6f5d66Smrg	if test -n "$relink_command"; then
4667a3680546Smrg	  # Strip any trailing slash from the destination.
4668a3680546Smrg	  func_stripname '' '/' "$libdir"
4669a3680546Smrg	  destlibdir=$func_stripname_result
4670a3680546Smrg
4671a3680546Smrg	  func_stripname '' '/' "$destdir"
4672a3680546Smrg	  s_destdir=$func_stripname_result
4673a3680546Smrg
4674ed6f5d66Smrg	  # Determine the prefix the user has applied to our future dir.
4675a3680546Smrg	  inst_prefix_dir=`$ECHO "X$s_destdir" | $Xsed -e "s%$destlibdir\$%%"`
4676ed6f5d66Smrg
4677ed6f5d66Smrg	  # Don't allow the user to place us outside of our expected
4678ed6f5d66Smrg	  # location b/c this prevents finding dependent libraries that
4679ed6f5d66Smrg	  # are installed to the same prefix.
4680ed6f5d66Smrg	  # At present, this check doesn't affect windows .dll's that
4681ed6f5d66Smrg	  # are installed into $libdir/../bin (currently, that works fine)
4682ed6f5d66Smrg	  # but it's something to keep an eye on.
4683ed6f5d66Smrg	  test "$inst_prefix_dir" = "$destdir" && \
4684fbc03982Smrg	    func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
4685ed6f5d66Smrg
4686ed6f5d66Smrg	  if test -n "$inst_prefix_dir"; then
4687ed6f5d66Smrg	    # Stick the inst_prefix_dir data into the link command.
4688ed6f5d66Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
4689ed6f5d66Smrg	  else
4690ed6f5d66Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
4691ed6f5d66Smrg	  fi
4692ed6f5d66Smrg
4693fbc03982Smrg	  func_warning "relinking '$file'"
4694ed6f5d66Smrg	  func_show_eval "$relink_command" \
4695fbc03982Smrg	    'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
4696ed6f5d66Smrg	fi
4697ed6f5d66Smrg
4698ed6f5d66Smrg	# See the names of the shared library.
4699ed6f5d66Smrg	set dummy $library_names; shift
4700ed6f5d66Smrg	if test -n "$1"; then
4701fbc03982Smrg	  realname=$1
4702ed6f5d66Smrg	  shift
4703ed6f5d66Smrg
4704fbc03982Smrg	  srcname=$realname
4705fbc03982Smrg	  test -n "$relink_command" && srcname=${realname}T
4706ed6f5d66Smrg
4707ed6f5d66Smrg	  # Install the shared library and build the symlinks.
4708ed6f5d66Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
4709ed6f5d66Smrg	      'exit $?'
4710fbc03982Smrg	  tstripme=$stripme
4711ed6f5d66Smrg	  case $host_os in
4712a3680546Smrg	  cygwin* | mingw* | windows* | pw32* | cegcc*)
4713ed6f5d66Smrg	    case $realname in
4714ed6f5d66Smrg	    *.dll.a)
4715fbc03982Smrg	      tstripme=
4716fbc03982Smrg	      ;;
4717fbc03982Smrg	    esac
4718fbc03982Smrg	    ;;
4719fbc03982Smrg	  os2*)
4720fbc03982Smrg	    case $realname in
4721fbc03982Smrg	    *_dll.a)
4722fbc03982Smrg	      tstripme=
4723ed6f5d66Smrg	      ;;
4724ed6f5d66Smrg	    esac
4725ed6f5d66Smrg	    ;;
4726ed6f5d66Smrg	  esac
4727ed6f5d66Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
4728ed6f5d66Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
4729ed6f5d66Smrg	  fi
4730ed6f5d66Smrg
4731ed6f5d66Smrg	  if test "$#" -gt 0; then
4732ed6f5d66Smrg	    # Delete the old symlinks, and create new ones.
4733fbc03982Smrg	    # Try 'ln -sf' first, because the 'ln' binary might depend on
4734ed6f5d66Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
4735ed6f5d66Smrg	    # so we also need to try rm && ln -s.
4736ed6f5d66Smrg	    for linkname
4737ed6f5d66Smrg	    do
4738ed6f5d66Smrg	      test "$linkname" != "$realname" \
4739ed6f5d66Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
4740ed6f5d66Smrg	    done
4741ed6f5d66Smrg	  fi
4742ed6f5d66Smrg
4743ed6f5d66Smrg	  # Do each command in the postinstall commands.
4744fbc03982Smrg	  lib=$destdir/$realname
4745ed6f5d66Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
4746ed6f5d66Smrg	fi
4747ed6f5d66Smrg
4748ed6f5d66Smrg	# Install the pseudo-library for information purposes.
4749ed6f5d66Smrg	func_basename "$file"
4750fbc03982Smrg	name=$func_basename_result
4751fbc03982Smrg	instname=$dir/${name}i
4752ed6f5d66Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
4753ed6f5d66Smrg
4754ed6f5d66Smrg	# Maybe install the static library, too.
4755ed6f5d66Smrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
4756ed6f5d66Smrg	;;
4757ed6f5d66Smrg
4758ed6f5d66Smrg      *.lo)
4759ed6f5d66Smrg	# Install (i.e. copy) a libtool object.
4760ed6f5d66Smrg
4761ed6f5d66Smrg	# Figure out destination file name, if it wasn't already specified.
4762ed6f5d66Smrg	if test -n "$destname"; then
4763fbc03982Smrg	  destfile=$destdir/$destname
4764ed6f5d66Smrg	else
4765ed6f5d66Smrg	  func_basename "$file"
4766fbc03982Smrg	  destfile=$func_basename_result
4767fbc03982Smrg	  destfile=$destdir/$destfile
4768ed6f5d66Smrg	fi
4769ed6f5d66Smrg
4770ed6f5d66Smrg	# Deduce the name of the destination old-style object file.
4771ed6f5d66Smrg	case $destfile in
4772ed6f5d66Smrg	*.lo)
4773ed6f5d66Smrg	  func_lo2o "$destfile"
4774ed6f5d66Smrg	  staticdest=$func_lo2o_result
4775ed6f5d66Smrg	  ;;
4776ed6f5d66Smrg	*.$objext)
4777fbc03982Smrg	  staticdest=$destfile
4778ed6f5d66Smrg	  destfile=
4779ed6f5d66Smrg	  ;;
4780ed6f5d66Smrg	*)
4781fbc03982Smrg	  func_fatal_help "cannot copy a libtool object to '$destfile'"
4782ed6f5d66Smrg	  ;;
4783ed6f5d66Smrg	esac
4784ed6f5d66Smrg
4785ed6f5d66Smrg	# Install the libtool object if requested.
4786ed6f5d66Smrg	test -n "$destfile" && \
4787ed6f5d66Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
4788ed6f5d66Smrg
4789ed6f5d66Smrg	# Install the old object if enabled.
4790fbc03982Smrg	if test yes = "$build_old_libs"; then
4791ed6f5d66Smrg	  # Deduce the name of the old-style object file.
4792ed6f5d66Smrg	  func_lo2o "$file"
4793ed6f5d66Smrg	  staticobj=$func_lo2o_result
4794ed6f5d66Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
4795ed6f5d66Smrg	fi
4796ed6f5d66Smrg	exit $EXIT_SUCCESS
4797ed6f5d66Smrg	;;
4798ed6f5d66Smrg
4799ed6f5d66Smrg      *)
4800ed6f5d66Smrg	# Figure out destination file name, if it wasn't already specified.
4801ed6f5d66Smrg	if test -n "$destname"; then
4802fbc03982Smrg	  destfile=$destdir/$destname
4803ed6f5d66Smrg	else
4804ed6f5d66Smrg	  func_basename "$file"
4805fbc03982Smrg	  destfile=$func_basename_result
4806fbc03982Smrg	  destfile=$destdir/$destfile
4807ed6f5d66Smrg	fi
4808ed6f5d66Smrg
4809ed6f5d66Smrg	# If the file is missing, and there is a .exe on the end, strip it
4810ed6f5d66Smrg	# because it is most likely a libtool script we actually want to
4811ed6f5d66Smrg	# install
4812fbc03982Smrg	stripped_ext=
4813ed6f5d66Smrg	case $file in
4814ed6f5d66Smrg	  *.exe)
4815ed6f5d66Smrg	    if test ! -f "$file"; then
4816ed6f5d66Smrg	      func_stripname '' '.exe' "$file"
4817ed6f5d66Smrg	      file=$func_stripname_result
4818fbc03982Smrg	      stripped_ext=.exe
4819ed6f5d66Smrg	    fi
4820ed6f5d66Smrg	    ;;
4821ed6f5d66Smrg	esac
4822ed6f5d66Smrg
4823ed6f5d66Smrg	# Do a test to see if this is really a libtool program.
4824ed6f5d66Smrg	case $host in
4825a3680546Smrg	*cygwin* | *mingw* | *windows*)
4826ed6f5d66Smrg	    if func_ltwrapper_executable_p "$file"; then
4827ed6f5d66Smrg	      func_ltwrapper_scriptname "$file"
4828ed6f5d66Smrg	      wrapper=$func_ltwrapper_scriptname_result
4829ed6f5d66Smrg	    else
4830ed6f5d66Smrg	      func_stripname '' '.exe' "$file"
4831ed6f5d66Smrg	      wrapper=$func_stripname_result
4832ed6f5d66Smrg	    fi
4833ed6f5d66Smrg	    ;;
4834ed6f5d66Smrg	*)
4835ed6f5d66Smrg	    wrapper=$file
4836ed6f5d66Smrg	    ;;
4837ed6f5d66Smrg	esac
4838ed6f5d66Smrg	if func_ltwrapper_script_p "$wrapper"; then
4839ed6f5d66Smrg	  notinst_deplibs=
4840ed6f5d66Smrg	  relink_command=
4841ed6f5d66Smrg
4842ed6f5d66Smrg	  func_source "$wrapper"
4843ed6f5d66Smrg
4844ed6f5d66Smrg	  # Check the variables that should have been set.
4845ed6f5d66Smrg	  test -z "$generated_by_libtool_version" && \
4846fbc03982Smrg	    func_fatal_error "invalid libtool wrapper script '$wrapper'"
4847ed6f5d66Smrg
4848fbc03982Smrg	  finalize=:
4849ed6f5d66Smrg	  for lib in $notinst_deplibs; do
4850ed6f5d66Smrg	    # Check to see that each library is installed.
4851ed6f5d66Smrg	    libdir=
4852ed6f5d66Smrg	    if test -f "$lib"; then
4853ed6f5d66Smrg	      func_source "$lib"
4854ed6f5d66Smrg	    fi
4855fbc03982Smrg	    libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
4856ed6f5d66Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
4857fbc03982Smrg	      func_warning "'$lib' has not been installed in '$libdir'"
4858fbc03982Smrg	      finalize=false
4859ed6f5d66Smrg	    fi
4860ed6f5d66Smrg	  done
4861ed6f5d66Smrg
4862ed6f5d66Smrg	  relink_command=
4863ed6f5d66Smrg	  func_source "$wrapper"
4864ed6f5d66Smrg
4865ed6f5d66Smrg	  outputname=
4866fbc03982Smrg	  if test no = "$fast_install" && test -n "$relink_command"; then
4867ed6f5d66Smrg	    $opt_dry_run || {
4868fbc03982Smrg	      if $finalize; then
4869ed6f5d66Smrg	        tmpdir=`func_mktempdir`
4870ed6f5d66Smrg		func_basename "$file$stripped_ext"
4871fbc03982Smrg		file=$func_basename_result
4872fbc03982Smrg	        outputname=$tmpdir/$file
4873ed6f5d66Smrg	        # Replace the output file specification.
4874ed6f5d66Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
4875ed6f5d66Smrg
4876fbc03982Smrg	        $opt_quiet || {
48773d05230fSmrg	          func_quote_arg expand,pretty "$relink_command"
48783d05230fSmrg		  eval "func_echo $func_quote_arg_result"
4879ed6f5d66Smrg	        }
4880ed6f5d66Smrg	        if eval "$relink_command"; then :
4881ed6f5d66Smrg	          else
4882fbc03982Smrg		  func_error "error: relink '$file' with the above command before installing it"
4883ed6f5d66Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
4884ed6f5d66Smrg		  continue
4885ed6f5d66Smrg	        fi
4886fbc03982Smrg	        file=$outputname
4887ed6f5d66Smrg	      else
4888fbc03982Smrg	        func_warning "cannot relink '$file'"
4889ed6f5d66Smrg	      fi
4890ed6f5d66Smrg	    }
4891ed6f5d66Smrg	  else
4892ed6f5d66Smrg	    # Install the binary that we compiled earlier.
4893ed6f5d66Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
4894ed6f5d66Smrg	  fi
4895ed6f5d66Smrg	fi
4896ed6f5d66Smrg
4897ed6f5d66Smrg	# remove .exe since cygwin /usr/bin/install will append another
4898ed6f5d66Smrg	# one anyway
4899ed6f5d66Smrg	case $install_prog,$host in
4900ed6f5d66Smrg	*/usr/bin/install*,*cygwin*)
4901ed6f5d66Smrg	  case $file:$destfile in
4902ed6f5d66Smrg	  *.exe:*.exe)
4903ed6f5d66Smrg	    # this is ok
4904ed6f5d66Smrg	    ;;
4905ed6f5d66Smrg	  *.exe:*)
4906ed6f5d66Smrg	    destfile=$destfile.exe
4907ed6f5d66Smrg	    ;;
4908ed6f5d66Smrg	  *:*.exe)
4909ed6f5d66Smrg	    func_stripname '' '.exe' "$destfile"
4910ed6f5d66Smrg	    destfile=$func_stripname_result
4911ed6f5d66Smrg	    ;;
4912ed6f5d66Smrg	  esac
4913ed6f5d66Smrg	  ;;
4914ed6f5d66Smrg	esac
4915ed6f5d66Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
4916ed6f5d66Smrg	$opt_dry_run || if test -n "$outputname"; then
4917ed6f5d66Smrg	  ${RM}r "$tmpdir"
4918ed6f5d66Smrg	fi
4919ed6f5d66Smrg	;;
4920ed6f5d66Smrg      esac
4921ed6f5d66Smrg    done
4922ed6f5d66Smrg
4923ed6f5d66Smrg    for file in $staticlibs; do
4924ed6f5d66Smrg      func_basename "$file"
4925fbc03982Smrg      name=$func_basename_result
4926ed6f5d66Smrg
4927ed6f5d66Smrg      # Set up the ranlib parameters.
4928fbc03982Smrg      oldlib=$destdir/$name
4929ed6f5d66Smrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
4930ed6f5d66Smrg      tool_oldlib=$func_to_tool_file_result
4931ed6f5d66Smrg
4932ed6f5d66Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
4933ed6f5d66Smrg
4934ed6f5d66Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
4935ed6f5d66Smrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
4936ed6f5d66Smrg      fi
4937ed6f5d66Smrg
4938ed6f5d66Smrg      # Do each command in the postinstall commands.
4939ed6f5d66Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
4940ed6f5d66Smrg    done
4941ed6f5d66Smrg
4942ed6f5d66Smrg    test -n "$future_libdirs" && \
4943fbc03982Smrg      func_warning "remember to run '$progname --finish$future_libdirs'"
4944ed6f5d66Smrg
4945ed6f5d66Smrg    if test -n "$current_libdirs"; then
4946ed6f5d66Smrg      # Maybe just do a dry run.
4947ed6f5d66Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
4948fbc03982Smrg      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
4949ed6f5d66Smrg    else
4950ed6f5d66Smrg      exit $EXIT_SUCCESS
4951ed6f5d66Smrg    fi
4952ed6f5d66Smrg}
4953ed6f5d66Smrg
4954fbc03982Smrgtest install = "$opt_mode" && func_mode_install ${1+"$@"}
4955ed6f5d66Smrg
4956ed6f5d66Smrg
4957ed6f5d66Smrg# func_generate_dlsyms outputname originator pic_p
4958ed6f5d66Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
4959ed6f5d66Smrg# a dlpreopen symbol table.
4960ed6f5d66Smrgfunc_generate_dlsyms ()
4961ed6f5d66Smrg{
4962fbc03982Smrg    $debug_cmd
4963fbc03982Smrg
4964fbc03982Smrg    my_outputname=$1
4965fbc03982Smrg    my_originator=$2
4966fbc03982Smrg    my_pic_p=${3-false}
4967fbc03982Smrg    my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
4968ed6f5d66Smrg    my_dlsyms=
4969ed6f5d66Smrg
4970fbc03982Smrg    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
4971ed6f5d66Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
4972fbc03982Smrg	my_dlsyms=${my_outputname}S.c
4973ed6f5d66Smrg      else
4974ed6f5d66Smrg	func_error "not configured to extract global symbols from dlpreopened files"
4975ed6f5d66Smrg      fi
4976ed6f5d66Smrg    fi
4977ed6f5d66Smrg
4978ed6f5d66Smrg    if test -n "$my_dlsyms"; then
4979ed6f5d66Smrg      case $my_dlsyms in
4980ed6f5d66Smrg      "") ;;
4981ed6f5d66Smrg      *.c)
4982ed6f5d66Smrg	# Discover the nlist of each of the dlfiles.
4983fbc03982Smrg	nlist=$output_objdir/$my_outputname.nm
4984ed6f5d66Smrg
4985ed6f5d66Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
4986ed6f5d66Smrg
4987ed6f5d66Smrg	# Parse the name list into a source file.
4988ed6f5d66Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
4989ed6f5d66Smrg
4990ed6f5d66Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
4991fbc03982Smrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
4992fbc03982Smrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
4993ed6f5d66Smrg
4994ed6f5d66Smrg#ifdef __cplusplus
4995ed6f5d66Smrgextern \"C\" {
4996ed6f5d66Smrg#endif
4997ed6f5d66Smrg
4998fbc03982Smrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
4999ed6f5d66Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
5000ed6f5d66Smrg#endif
5001ed6f5d66Smrg
5002ed6f5d66Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
5003fbc03982Smrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
5004fbc03982Smrg/* DATA imports from DLLs on WIN32 can't be const, because runtime
5005ed6f5d66Smrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
5006ed6f5d66Smrg# define LT_DLSYM_CONST
5007fbc03982Smrg#elif defined __osf__
5008ed6f5d66Smrg/* This system does not cope well with relocations in const data.  */
5009ed6f5d66Smrg# define LT_DLSYM_CONST
5010ed6f5d66Smrg#else
5011ed6f5d66Smrg# define LT_DLSYM_CONST const
5012ed6f5d66Smrg#endif
5013ed6f5d66Smrg
5014fbc03982Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
5015fbc03982Smrg
5016ed6f5d66Smrg/* External symbol declarations for the compiler. */\
5017ed6f5d66Smrg"
5018ed6f5d66Smrg
5019fbc03982Smrg	if test yes = "$dlself"; then
5020fbc03982Smrg	  func_verbose "generating symbol list for '$output'"
5021ed6f5d66Smrg
5022ed6f5d66Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
5023ed6f5d66Smrg
5024ed6f5d66Smrg	  # Add our own program objects to the symbol list.
5025ed6f5d66Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
5026ed6f5d66Smrg	  for progfile in $progfiles; do
5027ed6f5d66Smrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
5028fbc03982Smrg	    func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
5029ed6f5d66Smrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
5030ed6f5d66Smrg	  done
5031ed6f5d66Smrg
5032ed6f5d66Smrg	  if test -n "$exclude_expsyms"; then
5033ed6f5d66Smrg	    $opt_dry_run || {
5034ed6f5d66Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
5035ed6f5d66Smrg	      eval '$MV "$nlist"T "$nlist"'
5036ed6f5d66Smrg	    }
5037ed6f5d66Smrg	  fi
5038ed6f5d66Smrg
5039ed6f5d66Smrg	  if test -n "$export_symbols_regex"; then
5040ed6f5d66Smrg	    $opt_dry_run || {
5041ed6f5d66Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
5042ed6f5d66Smrg	      eval '$MV "$nlist"T "$nlist"'
5043ed6f5d66Smrg	    }
5044ed6f5d66Smrg	  fi
5045ed6f5d66Smrg
5046ed6f5d66Smrg	  # Prepare the list of exported symbols
5047ed6f5d66Smrg	  if test -z "$export_symbols"; then
5048fbc03982Smrg	    export_symbols=$output_objdir/$outputname.exp
5049ed6f5d66Smrg	    $opt_dry_run || {
5050ed6f5d66Smrg	      $RM $export_symbols
5051fbc03982Smrg	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
5052ed6f5d66Smrg	      case $host in
5053a3680546Smrg	      *cygwin* | *mingw* | *windows* | *cegcc* )
5054ed6f5d66Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
5055ed6f5d66Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
5056ed6f5d66Smrg	        ;;
5057ed6f5d66Smrg	      esac
5058ed6f5d66Smrg	    }
5059ed6f5d66Smrg	  else
5060ed6f5d66Smrg	    $opt_dry_run || {
5061fbc03982Smrg	      eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
5062ed6f5d66Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
5063ed6f5d66Smrg	      eval '$MV "$nlist"T "$nlist"'
5064ed6f5d66Smrg	      case $host in
5065a3680546Smrg	        *cygwin* | *mingw* | *windows* | *cegcc* )
5066ed6f5d66Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
5067ed6f5d66Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
5068ed6f5d66Smrg	          ;;
5069ed6f5d66Smrg	      esac
5070ed6f5d66Smrg	    }
5071ed6f5d66Smrg	  fi
5072ed6f5d66Smrg	fi
5073ed6f5d66Smrg
5074ed6f5d66Smrg	for dlprefile in $dlprefiles; do
5075fbc03982Smrg	  func_verbose "extracting global C symbols from '$dlprefile'"
5076ed6f5d66Smrg	  func_basename "$dlprefile"
5077fbc03982Smrg	  name=$func_basename_result
5078ed6f5d66Smrg          case $host in
5079a3680546Smrg	    *cygwin* | *mingw* | *windows* | *cegcc* )
5080ed6f5d66Smrg	      # if an import library, we need to obtain dlname
5081ed6f5d66Smrg	      if func_win32_import_lib_p "$dlprefile"; then
5082ed6f5d66Smrg	        func_tr_sh "$dlprefile"
5083ed6f5d66Smrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
5084fbc03982Smrg	        dlprefile_dlbasename=
5085ed6f5d66Smrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
5086ed6f5d66Smrg	          # Use subshell, to avoid clobbering current variable values
5087ed6f5d66Smrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
5088fbc03982Smrg	          if test -n "$dlprefile_dlname"; then
5089ed6f5d66Smrg	            func_basename "$dlprefile_dlname"
5090fbc03982Smrg	            dlprefile_dlbasename=$func_basename_result
5091ed6f5d66Smrg	          else
5092ed6f5d66Smrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
5093ed6f5d66Smrg	            $sharedlib_from_linklib_cmd "$dlprefile"
5094ed6f5d66Smrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
5095ed6f5d66Smrg	          fi
5096ed6f5d66Smrg	        fi
5097ed6f5d66Smrg	        $opt_dry_run || {
5098fbc03982Smrg	          if test -n "$dlprefile_dlbasename"; then
5099ed6f5d66Smrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
5100ed6f5d66Smrg	          else
5101ed6f5d66Smrg	            func_warning "Could not compute DLL name from $name"
5102ed6f5d66Smrg	            eval '$ECHO ": $name " >> "$nlist"'
5103ed6f5d66Smrg	          fi
5104ed6f5d66Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
5105a3680546Smrg	          case $host in
5106a3680546Smrg	            i[3456]86-*-mingw32*)
5107a3680546Smrg	              eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
5108a3680546Smrg	                $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
5109a3680546Smrg	            ;;
5110a3680546Smrg	            *)
5111a3680546Smrg	              eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
5112a3680546Smrg	                $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/__nm_//' >> '$nlist'"
5113a3680546Smrg	            ;;
5114a3680546Smrg	          esac
5115ed6f5d66Smrg	        }
5116ed6f5d66Smrg	      else # not an import lib
5117ed6f5d66Smrg	        $opt_dry_run || {
5118ed6f5d66Smrg	          eval '$ECHO ": $name " >> "$nlist"'
5119ed6f5d66Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
5120ed6f5d66Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
5121ed6f5d66Smrg	        }
5122ed6f5d66Smrg	      fi
5123ed6f5d66Smrg	    ;;
5124ed6f5d66Smrg	    *)
5125ed6f5d66Smrg	      $opt_dry_run || {
5126ed6f5d66Smrg	        eval '$ECHO ": $name " >> "$nlist"'
5127ed6f5d66Smrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
5128ed6f5d66Smrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
5129ed6f5d66Smrg	      }
5130ed6f5d66Smrg	    ;;
5131ed6f5d66Smrg          esac
5132ed6f5d66Smrg	done
5133ed6f5d66Smrg
5134ed6f5d66Smrg	$opt_dry_run || {
5135ed6f5d66Smrg	  # Make sure we have at least an empty file.
5136ed6f5d66Smrg	  test -f "$nlist" || : > "$nlist"
5137ed6f5d66Smrg
5138ed6f5d66Smrg	  if test -n "$exclude_expsyms"; then
5139ed6f5d66Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
5140ed6f5d66Smrg	    $MV "$nlist"T "$nlist"
5141ed6f5d66Smrg	  fi
5142ed6f5d66Smrg
5143ed6f5d66Smrg	  # Try sorting and uniquifying the output.
5144ed6f5d66Smrg	  if $GREP -v "^: " < "$nlist" |
5145ed6f5d66Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
5146ed6f5d66Smrg		sort -k 3
5147ed6f5d66Smrg	      else
5148ed6f5d66Smrg		sort +2
5149ed6f5d66Smrg	      fi |
5150ed6f5d66Smrg	      uniq > "$nlist"S; then
5151ed6f5d66Smrg	    :
5152ed6f5d66Smrg	  else
5153ed6f5d66Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
5154ed6f5d66Smrg	  fi
5155ed6f5d66Smrg
5156ed6f5d66Smrg	  if test -f "$nlist"S; then
5157ed6f5d66Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
5158ed6f5d66Smrg	  else
5159ed6f5d66Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
5160ed6f5d66Smrg	  fi
5161ed6f5d66Smrg
5162fbc03982Smrg	  func_show_eval '$RM "${nlist}I"'
5163fbc03982Smrg	  if test -n "$global_symbol_to_import"; then
5164fbc03982Smrg	    eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
5165fbc03982Smrg	  fi
5166fbc03982Smrg
5167ed6f5d66Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
5168ed6f5d66Smrg
5169ed6f5d66Smrg/* The mapping between symbol names and symbols.  */
5170ed6f5d66Smrgtypedef struct {
5171ed6f5d66Smrg  const char *name;
5172ed6f5d66Smrg  void *address;
5173ed6f5d66Smrg} lt_dlsymlist;
5174ed6f5d66Smrgextern LT_DLSYM_CONST lt_dlsymlist
5175fbc03982Smrglt_${my_prefix}_LTX_preloaded_symbols[];\
5176fbc03982Smrg"
5177fbc03982Smrg
5178fbc03982Smrg	  if test -s "$nlist"I; then
5179fbc03982Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
5180fbc03982Smrgstatic void lt_syminit(void)
5181fbc03982Smrg{
5182fbc03982Smrg  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
5183fbc03982Smrg  for (; symbol->name; ++symbol)
5184fbc03982Smrg    {"
5185fbc03982Smrg	    $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
5186fbc03982Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
5187fbc03982Smrg    }
5188fbc03982Smrg}"
5189fbc03982Smrg	  fi
5190fbc03982Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
5191ed6f5d66SmrgLT_DLSYM_CONST lt_dlsymlist
5192ed6f5d66Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
5193fbc03982Smrg{ {\"$my_originator\", (void *) 0},"
5194fbc03982Smrg
5195fbc03982Smrg	  if test -s "$nlist"I; then
5196fbc03982Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
5197fbc03982Smrg  {\"@INIT@\", (void *) &lt_syminit},"
5198fbc03982Smrg	  fi
5199ed6f5d66Smrg
5200ed6f5d66Smrg	  case $need_lib_prefix in
5201ed6f5d66Smrg	  no)
5202ed6f5d66Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
5203ed6f5d66Smrg	    ;;
5204ed6f5d66Smrg	  *)
5205ed6f5d66Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
5206ed6f5d66Smrg	    ;;
5207ed6f5d66Smrg	  esac
5208ed6f5d66Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
5209ed6f5d66Smrg  {0, (void *) 0}
5210ed6f5d66Smrg};
5211ed6f5d66Smrg
5212ed6f5d66Smrg/* This works around a problem in FreeBSD linker */
5213ed6f5d66Smrg#ifdef FREEBSD_WORKAROUND
5214ed6f5d66Smrgstatic const void *lt_preloaded_setup() {
5215ed6f5d66Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
5216ed6f5d66Smrg}
5217ed6f5d66Smrg#endif
5218ed6f5d66Smrg
5219ed6f5d66Smrg#ifdef __cplusplus
5220ed6f5d66Smrg}
5221ed6f5d66Smrg#endif\
5222ed6f5d66Smrg"
5223ed6f5d66Smrg	} # !$opt_dry_run
5224ed6f5d66Smrg
5225ed6f5d66Smrg	pic_flag_for_symtable=
5226ed6f5d66Smrg	case "$compile_command " in
5227ed6f5d66Smrg	*" -static "*) ;;
5228ed6f5d66Smrg	*)
5229ed6f5d66Smrg	  case $host in
5230ed6f5d66Smrg	  # compiling the symbol table file with pic_flag works around
5231ed6f5d66Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
5232ed6f5d66Smrg	  # linked before any other PIC object.  But we must not use
5233ed6f5d66Smrg	  # pic_flag when linking with -static.  The problem exists in
5234ed6f5d66Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
5235ed6f5d66Smrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
5236ed6f5d66Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
5237ed6f5d66Smrg	  *-*-hpux*)
5238ed6f5d66Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
5239ed6f5d66Smrg	  *)
5240fbc03982Smrg	    $my_pic_p && pic_flag_for_symtable=" $pic_flag"
5241ed6f5d66Smrg	    ;;
5242ed6f5d66Smrg	  esac
5243ed6f5d66Smrg	  ;;
5244ed6f5d66Smrg	esac
5245ed6f5d66Smrg	symtab_cflags=
5246ed6f5d66Smrg	for arg in $LTCFLAGS; do
5247ed6f5d66Smrg	  case $arg in
5248ed6f5d66Smrg	  -pie | -fpie | -fPIE) ;;
5249ed6f5d66Smrg	  *) func_append symtab_cflags " $arg" ;;
5250ed6f5d66Smrg	  esac
5251ed6f5d66Smrg	done
5252ed6f5d66Smrg
5253ed6f5d66Smrg	# Now compile the dynamic symbol file.
5254ed6f5d66Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
5255ed6f5d66Smrg
5256ed6f5d66Smrg	# Clean up the generated files.
5257fbc03982Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
5258ed6f5d66Smrg
5259ed6f5d66Smrg	# Transform the symbol file into the correct name.
5260fbc03982Smrg	symfileobj=$output_objdir/${my_outputname}S.$objext
5261ed6f5d66Smrg	case $host in
5262a3680546Smrg	*cygwin* | *mingw* | *windows* | *cegcc* )
5263ed6f5d66Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
5264ed6f5d66Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
5265ed6f5d66Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
5266ed6f5d66Smrg	  else
5267ed6f5d66Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5268ed6f5d66Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5269ed6f5d66Smrg	  fi
5270ed6f5d66Smrg	  ;;
5271ed6f5d66Smrg	*)
5272ed6f5d66Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5273ed6f5d66Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5274ed6f5d66Smrg	  ;;
5275ed6f5d66Smrg	esac
5276ed6f5d66Smrg	;;
5277ed6f5d66Smrg      *)
5278fbc03982Smrg	func_fatal_error "unknown suffix for '$my_dlsyms'"
5279ed6f5d66Smrg	;;
5280ed6f5d66Smrg      esac
5281ed6f5d66Smrg    else
5282ed6f5d66Smrg      # We keep going just in case the user didn't refer to
5283ed6f5d66Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
5284ed6f5d66Smrg      # really was required.
5285ed6f5d66Smrg
5286ed6f5d66Smrg      # Nullify the symbol file.
5287ed6f5d66Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
5288ed6f5d66Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
5289ed6f5d66Smrg    fi
5290ed6f5d66Smrg}
5291ed6f5d66Smrg
5292fbc03982Smrg# func_cygming_gnu_implib_p ARG
5293fbc03982Smrg# This predicate returns with zero status (TRUE) if
5294fbc03982Smrg# ARG is a GNU/binutils-style import library. Returns
5295fbc03982Smrg# with nonzero status (FALSE) otherwise.
5296fbc03982Smrgfunc_cygming_gnu_implib_p ()
5297fbc03982Smrg{
5298fbc03982Smrg  $debug_cmd
5299fbc03982Smrg
5300fbc03982Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
5301fbc03982Smrg  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)$'`
5302fbc03982Smrg  test -n "$func_cygming_gnu_implib_tmp"
5303fbc03982Smrg}
5304fbc03982Smrg
5305fbc03982Smrg# func_cygming_ms_implib_p ARG
5306fbc03982Smrg# This predicate returns with zero status (TRUE) if
5307fbc03982Smrg# ARG is an MS-style import library. Returns
5308fbc03982Smrg# with nonzero status (FALSE) otherwise.
5309fbc03982Smrgfunc_cygming_ms_implib_p ()
5310fbc03982Smrg{
5311fbc03982Smrg  $debug_cmd
5312fbc03982Smrg
5313fbc03982Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
5314fbc03982Smrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
5315fbc03982Smrg  test -n "$func_cygming_ms_implib_tmp"
5316fbc03982Smrg}
5317fbc03982Smrg
5318ed6f5d66Smrg# func_win32_libid arg
5319ed6f5d66Smrg# return the library type of file 'arg'
5320ed6f5d66Smrg#
5321ed6f5d66Smrg# Need a lot of goo to handle *both* DLLs and import libs
5322ed6f5d66Smrg# Has to be a shell function in order to 'eat' the argument
5323ed6f5d66Smrg# that is supplied when $file_magic_command is called.
5324ed6f5d66Smrg# Despite the name, also deal with 64 bit binaries.
5325ed6f5d66Smrgfunc_win32_libid ()
5326ed6f5d66Smrg{
5327fbc03982Smrg  $debug_cmd
5328fbc03982Smrg
5329fbc03982Smrg  win32_libid_type=unknown
5330ed6f5d66Smrg  win32_fileres=`file -L $1 2>/dev/null`
5331ed6f5d66Smrg  case $win32_fileres in
5332ed6f5d66Smrg  *ar\ archive\ import\ library*) # definitely import
5333ed6f5d66Smrg    win32_libid_type="x86 archive import"
5334ed6f5d66Smrg    ;;
5335ed6f5d66Smrg  *ar\ archive*) # could be an import, or static
5336ed6f5d66Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
5337ed6f5d66Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
5338a3680546Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64|pe-aarch64)' >/dev/null; then
5339fbc03982Smrg      case $nm_interface in
5340fbc03982Smrg      "MS dumpbin")
5341fbc03982Smrg	if func_cygming_ms_implib_p "$1" ||
5342fbc03982Smrg	   func_cygming_gnu_implib_p "$1"
5343fbc03982Smrg	then
5344fbc03982Smrg	  win32_nmres=import
5345fbc03982Smrg	else
5346fbc03982Smrg	  win32_nmres=
5347fbc03982Smrg	fi
5348fbc03982Smrg	;;
5349fbc03982Smrg      *)
5350fbc03982Smrg	func_to_tool_file "$1" func_convert_file_msys_to_w32
5351fbc03982Smrg	win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
5352fbc03982Smrg	  $SED -n -e '
5353ed6f5d66Smrg	    1,100{
5354ed6f5d66Smrg		/ I /{
5355fbc03982Smrg		    s|.*|import|
5356ed6f5d66Smrg		    p
5357ed6f5d66Smrg		    q
5358ed6f5d66Smrg		}
5359ed6f5d66Smrg	    }'`
5360fbc03982Smrg	;;
5361fbc03982Smrg      esac
5362ed6f5d66Smrg      case $win32_nmres in
5363ed6f5d66Smrg      import*)  win32_libid_type="x86 archive import";;
5364ed6f5d66Smrg      *)        win32_libid_type="x86 archive static";;
5365ed6f5d66Smrg      esac
5366ed6f5d66Smrg    fi
5367ed6f5d66Smrg    ;;
5368ed6f5d66Smrg  *DLL*)
5369ed6f5d66Smrg    win32_libid_type="x86 DLL"
5370ed6f5d66Smrg    ;;
5371ed6f5d66Smrg  *executable*) # but shell scripts are "executable" too...
5372ed6f5d66Smrg    case $win32_fileres in
5373ed6f5d66Smrg    *MS\ Windows\ PE\ Intel*)
5374ed6f5d66Smrg      win32_libid_type="x86 DLL"
5375ed6f5d66Smrg      ;;
5376ed6f5d66Smrg    esac
5377ed6f5d66Smrg    ;;
5378ed6f5d66Smrg  esac
5379ed6f5d66Smrg  $ECHO "$win32_libid_type"
5380ed6f5d66Smrg}
5381ed6f5d66Smrg
5382ed6f5d66Smrg# func_cygming_dll_for_implib ARG
5383ed6f5d66Smrg#
5384ed6f5d66Smrg# Platform-specific function to extract the
5385ed6f5d66Smrg# name of the DLL associated with the specified
5386ed6f5d66Smrg# import library ARG.
5387ed6f5d66Smrg# Invoked by eval'ing the libtool variable
5388ed6f5d66Smrg#    $sharedlib_from_linklib_cmd
5389ed6f5d66Smrg# Result is available in the variable
5390ed6f5d66Smrg#    $sharedlib_from_linklib_result
5391ed6f5d66Smrgfunc_cygming_dll_for_implib ()
5392ed6f5d66Smrg{
5393fbc03982Smrg  $debug_cmd
5394fbc03982Smrg
5395ed6f5d66Smrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
5396ed6f5d66Smrg}
5397ed6f5d66Smrg
5398ed6f5d66Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
5399ed6f5d66Smrg#
5400ed6f5d66Smrg# The is the core of a fallback implementation of a
5401ed6f5d66Smrg# platform-specific function to extract the name of the
5402ed6f5d66Smrg# DLL associated with the specified import library LIBNAME.
5403ed6f5d66Smrg#
5404ed6f5d66Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending
5405ed6f5d66Smrg# on the platform and compiler that created the implib.
5406ed6f5d66Smrg#
5407ed6f5d66Smrg# Echos the name of the DLL associated with the
5408ed6f5d66Smrg# specified import library.
5409ed6f5d66Smrgfunc_cygming_dll_for_implib_fallback_core ()
5410ed6f5d66Smrg{
5411fbc03982Smrg  $debug_cmd
5412fbc03982Smrg
5413ed6f5d66Smrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
5414ed6f5d66Smrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
5415ed6f5d66Smrg    $SED '/^Contents of section '"$match_literal"':/{
5416ed6f5d66Smrg      # Place marker at beginning of archive member dllname section
5417ed6f5d66Smrg      s/.*/====MARK====/
5418ed6f5d66Smrg      p
5419ed6f5d66Smrg      d
5420ed6f5d66Smrg    }
5421ed6f5d66Smrg    # These lines can sometimes be longer than 43 characters, but
5422ed6f5d66Smrg    # are always uninteresting
5423ed6f5d66Smrg    /:[	 ]*file format pe[i]\{,1\}-/d
5424ed6f5d66Smrg    /^In archive [^:]*:/d
5425ed6f5d66Smrg    # Ensure marker is printed
5426ed6f5d66Smrg    /^====MARK====/p
5427ed6f5d66Smrg    # Remove all lines with less than 43 characters
5428ed6f5d66Smrg    /^.\{43\}/!d
5429ed6f5d66Smrg    # From remaining lines, remove first 43 characters
5430ed6f5d66Smrg    s/^.\{43\}//' |
5431ed6f5d66Smrg    $SED -n '
5432ed6f5d66Smrg      # Join marker and all lines until next marker into a single line
5433ed6f5d66Smrg      /^====MARK====/ b para
5434ed6f5d66Smrg      H
5435ed6f5d66Smrg      $ b para
5436ed6f5d66Smrg      b
5437ed6f5d66Smrg      :para
5438ed6f5d66Smrg      x
5439ed6f5d66Smrg      s/\n//g
5440ed6f5d66Smrg      # Remove the marker
5441ed6f5d66Smrg      s/^====MARK====//
5442ed6f5d66Smrg      # Remove trailing dots and whitespace
5443ed6f5d66Smrg      s/[\. \t]*$//
5444ed6f5d66Smrg      # Print
5445ed6f5d66Smrg      /./p' |
5446ed6f5d66Smrg    # we now have a list, one entry per line, of the stringified
5447ed6f5d66Smrg    # contents of the appropriate section of all members of the
5448fbc03982Smrg    # archive that possess that section. Heuristic: eliminate
5449fbc03982Smrg    # all those that have a first or second character that is
5450ed6f5d66Smrg    # a '.' (that is, objdump's representation of an unprintable
5451ed6f5d66Smrg    # character.) This should work for all archives with less than
5452ed6f5d66Smrg    # 0x302f exports -- but will fail for DLLs whose name actually
5453ed6f5d66Smrg    # begins with a literal '.' or a single character followed by
5454ed6f5d66Smrg    # a '.'.
5455ed6f5d66Smrg    #
5456ed6f5d66Smrg    # Of those that remain, print the first one.
5457ed6f5d66Smrg    $SED -e '/^\./d;/^.\./d;q'
5458ed6f5d66Smrg}
5459ed6f5d66Smrg
5460ed6f5d66Smrg# func_cygming_dll_for_implib_fallback ARG
5461ed6f5d66Smrg# Platform-specific function to extract the
5462ed6f5d66Smrg# name of the DLL associated with the specified
5463ed6f5d66Smrg# import library ARG.
5464ed6f5d66Smrg#
5465ed6f5d66Smrg# This fallback implementation is for use when $DLLTOOL
5466ed6f5d66Smrg# does not support the --identify-strict option.
5467ed6f5d66Smrg# Invoked by eval'ing the libtool variable
5468ed6f5d66Smrg#    $sharedlib_from_linklib_cmd
5469ed6f5d66Smrg# Result is available in the variable
5470ed6f5d66Smrg#    $sharedlib_from_linklib_result
5471ed6f5d66Smrgfunc_cygming_dll_for_implib_fallback ()
5472ed6f5d66Smrg{
5473fbc03982Smrg  $debug_cmd
5474fbc03982Smrg
5475fbc03982Smrg  if func_cygming_gnu_implib_p "$1"; then
5476ed6f5d66Smrg    # binutils import library
5477ed6f5d66Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
5478fbc03982Smrg  elif func_cygming_ms_implib_p "$1"; then
5479ed6f5d66Smrg    # ms-generated import library
5480ed6f5d66Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
5481ed6f5d66Smrg  else
5482ed6f5d66Smrg    # unknown
5483fbc03982Smrg    sharedlib_from_linklib_result=
5484ed6f5d66Smrg  fi
5485ed6f5d66Smrg}
5486ed6f5d66Smrg
5487ed6f5d66Smrg
5488ed6f5d66Smrg# func_extract_an_archive dir oldlib
5489ed6f5d66Smrgfunc_extract_an_archive ()
5490ed6f5d66Smrg{
5491fbc03982Smrg    $debug_cmd
5492fbc03982Smrg
5493fbc03982Smrg    f_ex_an_ar_dir=$1; shift
5494fbc03982Smrg    f_ex_an_ar_oldlib=$1
5495fbc03982Smrg    if test yes = "$lock_old_archive_extraction"; then
5496ed6f5d66Smrg      lockfile=$f_ex_an_ar_oldlib.lock
5497ed6f5d66Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
5498ed6f5d66Smrg	func_echo "Waiting for $lockfile to be removed"
5499ed6f5d66Smrg	sleep 2
5500ed6f5d66Smrg      done
5501ed6f5d66Smrg    fi
5502ed6f5d66Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
5503ed6f5d66Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
5504fbc03982Smrg    if test yes = "$lock_old_archive_extraction"; then
5505ed6f5d66Smrg      $opt_dry_run || rm -f "$lockfile"
5506ed6f5d66Smrg    fi
5507ed6f5d66Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
5508ed6f5d66Smrg     :
5509ed6f5d66Smrg    else
5510ed6f5d66Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
5511ed6f5d66Smrg    fi
5512ed6f5d66Smrg}
5513ed6f5d66Smrg
5514ed6f5d66Smrg
5515ed6f5d66Smrg# func_extract_archives gentop oldlib ...
5516ed6f5d66Smrgfunc_extract_archives ()
5517ed6f5d66Smrg{
5518fbc03982Smrg    $debug_cmd
5519fbc03982Smrg
5520fbc03982Smrg    my_gentop=$1; shift
5521ed6f5d66Smrg    my_oldlibs=${1+"$@"}
5522fbc03982Smrg    my_oldobjs=
5523fbc03982Smrg    my_xlib=
5524fbc03982Smrg    my_xabs=
5525fbc03982Smrg    my_xdir=
5526ed6f5d66Smrg
5527ed6f5d66Smrg    for my_xlib in $my_oldlibs; do
5528ed6f5d66Smrg      # Extract the objects.
5529ed6f5d66Smrg      case $my_xlib in
5530fbc03982Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
5531ed6f5d66Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
5532ed6f5d66Smrg      esac
5533ed6f5d66Smrg      func_basename "$my_xlib"
5534fbc03982Smrg      my_xlib=$func_basename_result
5535ed6f5d66Smrg      my_xlib_u=$my_xlib
5536ed6f5d66Smrg      while :; do
5537ed6f5d66Smrg        case " $extracted_archives " in
5538ed6f5d66Smrg	*" $my_xlib_u "*)
5539ed6f5d66Smrg	  func_arith $extracted_serial + 1
5540ed6f5d66Smrg	  extracted_serial=$func_arith_result
5541ed6f5d66Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
5542ed6f5d66Smrg	*) break ;;
5543ed6f5d66Smrg	esac
5544ed6f5d66Smrg      done
5545ed6f5d66Smrg      extracted_archives="$extracted_archives $my_xlib_u"
5546fbc03982Smrg      my_xdir=$my_gentop/$my_xlib_u
5547ed6f5d66Smrg
5548ed6f5d66Smrg      func_mkdir_p "$my_xdir"
5549ed6f5d66Smrg
5550ed6f5d66Smrg      case $host in
5551ed6f5d66Smrg      *-darwin*)
5552ed6f5d66Smrg	func_verbose "Extracting $my_xabs"
5553ed6f5d66Smrg	# Do not bother doing anything if just a dry run
5554ed6f5d66Smrg	$opt_dry_run || {
5555ed6f5d66Smrg	  darwin_orig_dir=`pwd`
5556ed6f5d66Smrg	  cd $my_xdir || exit $?
5557ed6f5d66Smrg	  darwin_archive=$my_xabs
5558ed6f5d66Smrg	  darwin_curdir=`pwd`
5559fbc03982Smrg	  func_basename "$darwin_archive"
5560fbc03982Smrg	  darwin_base_archive=$func_basename_result
5561ed6f5d66Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
5562ed6f5d66Smrg	  if test -n "$darwin_arches"; then
5563ed6f5d66Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
5564ed6f5d66Smrg	    darwin_arch=
5565ed6f5d66Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
5566fbc03982Smrg	    for darwin_arch in  $darwin_arches; do
5567fbc03982Smrg	      func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
5568fbc03982Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
5569fbc03982Smrg	      cd "unfat-$$/$darwin_base_archive-$darwin_arch"
5570fbc03982Smrg	      func_extract_an_archive "`pwd`" "$darwin_base_archive"
5571ed6f5d66Smrg	      cd "$darwin_curdir"
5572fbc03982Smrg	      $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
5573ed6f5d66Smrg	    done # $darwin_arches
5574ed6f5d66Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
5575fbc03982Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
5576ed6f5d66Smrg	    darwin_file=
5577ed6f5d66Smrg	    darwin_files=
5578ed6f5d66Smrg	    for darwin_file in $darwin_filelist; do
5579ed6f5d66Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
5580ed6f5d66Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
5581ed6f5d66Smrg	    done # $darwin_filelist
5582ed6f5d66Smrg	    $RM -rf unfat-$$
5583ed6f5d66Smrg	    cd "$darwin_orig_dir"
5584ed6f5d66Smrg	  else
5585ed6f5d66Smrg	    cd $darwin_orig_dir
5586ed6f5d66Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
5587ed6f5d66Smrg	  fi # $darwin_arches
5588ed6f5d66Smrg	} # !$opt_dry_run
5589ed6f5d66Smrg	;;
5590ed6f5d66Smrg      *)
5591ed6f5d66Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
5592ed6f5d66Smrg	;;
5593ed6f5d66Smrg      esac
5594ed6f5d66Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
5595ed6f5d66Smrg    done
5596ed6f5d66Smrg
5597fbc03982Smrg    func_extract_archives_result=$my_oldobjs
5598ed6f5d66Smrg}
5599ed6f5d66Smrg
5600ed6f5d66Smrg
5601ed6f5d66Smrg# func_emit_wrapper [arg=no]
5602ed6f5d66Smrg#
5603ed6f5d66Smrg# Emit a libtool wrapper script on stdout.
5604ed6f5d66Smrg# Don't directly open a file because we may want to
5605a3680546Smrg# incorporate the script contents within a cygwin/mingw/windows
5606ed6f5d66Smrg# wrapper executable.  Must ONLY be called from within
5607ed6f5d66Smrg# func_mode_link because it depends on a number of variables
5608ed6f5d66Smrg# set therein.
5609ed6f5d66Smrg#
5610ed6f5d66Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
5611ed6f5d66Smrg# variable will take.  If 'yes', then the emitted script
5612fbc03982Smrg# will assume that the directory where it is stored is
5613a3680546Smrg# the $objdir directory.  This is a cygwin/mingw/windows-specific
5614ed6f5d66Smrg# behavior.
5615ed6f5d66Smrgfunc_emit_wrapper ()
5616ed6f5d66Smrg{
5617ed6f5d66Smrg	func_emit_wrapper_arg1=${1-no}
5618ed6f5d66Smrg
5619ed6f5d66Smrg	$ECHO "\
5620ed6f5d66Smrg#! $SHELL
5621ed6f5d66Smrg
5622ed6f5d66Smrg# $output - temporary wrapper script for $objdir/$outputname
5623fbc03982Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5624ed6f5d66Smrg#
5625ed6f5d66Smrg# The $output program cannot be directly executed until all the libtool
5626ed6f5d66Smrg# libraries that it depends on are installed.
5627ed6f5d66Smrg#
5628ed6f5d66Smrg# This wrapper script should never be moved out of the build directory.
5629ed6f5d66Smrg# If it is, it will not operate correctly.
5630ed6f5d66Smrg
5631ed6f5d66Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
5632ed6f5d66Smrg# metacharacters that are still active within double-quoted strings.
5633ed6f5d66Smrgsed_quote_subst='$sed_quote_subst'
5634ed6f5d66Smrg
5635ed6f5d66Smrg# Be Bourne compatible
5636ed6f5d66Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
5637ed6f5d66Smrg  emulate sh
5638ed6f5d66Smrg  NULLCMD=:
5639ed6f5d66Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
5640ed6f5d66Smrg  # is contrary to our usage.  Disable this feature.
5641ed6f5d66Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
5642ed6f5d66Smrg  setopt NO_GLOB_SUBST
5643ed6f5d66Smrgelse
5644ed6f5d66Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
5645ed6f5d66Smrgfi
5646ed6f5d66SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
5647ed6f5d66SmrgDUALCASE=1; export DUALCASE # for MKS sh
5648ed6f5d66Smrg
5649ed6f5d66Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
5650ed6f5d66Smrg# if CDPATH is set.
5651ed6f5d66Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
5652ed6f5d66Smrg
5653ed6f5d66Smrgrelink_command=\"$relink_command\"
5654ed6f5d66Smrg
5655ed6f5d66Smrg# This environment variable determines our operation mode.
5656ed6f5d66Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
5657ed6f5d66Smrg  # install mode needs the following variables:
5658ed6f5d66Smrg  generated_by_libtool_version='$macro_version'
5659ed6f5d66Smrg  notinst_deplibs='$notinst_deplibs'
5660ed6f5d66Smrgelse
5661ed6f5d66Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
5662ed6f5d66Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
5663ed6f5d66Smrg    file=\"\$0\""
5664ed6f5d66Smrg
56653d05230fSmrg    func_quote_arg pretty "$ECHO"
56663d05230fSmrg    qECHO=$func_quote_arg_result
5667ed6f5d66Smrg    $ECHO "\
5668ed6f5d66Smrg
5669ed6f5d66Smrg# A function that is used when there is no print builtin or printf.
5670ed6f5d66Smrgfunc_fallback_echo ()
5671ed6f5d66Smrg{
5672ed6f5d66Smrg  eval 'cat <<_LTECHO_EOF
5673ed6f5d66Smrg\$1
5674ed6f5d66Smrg_LTECHO_EOF'
5675ed6f5d66Smrg}
56763d05230fSmrg    ECHO=$qECHO
5677ed6f5d66Smrg  fi
5678ed6f5d66Smrg
5679ed6f5d66Smrg# Very basic option parsing. These options are (a) specific to
5680ed6f5d66Smrg# the libtool wrapper, (b) are identical between the wrapper
5681fbc03982Smrg# /script/ and the wrapper /executable/ that is used only on
5682ed6f5d66Smrg# windows platforms, and (c) all begin with the string "--lt-"
5683fbc03982Smrg# (application programs are unlikely to have options that match
5684ed6f5d66Smrg# this pattern).
5685ed6f5d66Smrg#
5686ed6f5d66Smrg# There are only two supported options: --lt-debug and
5687ed6f5d66Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
5688ed6f5d66Smrg#
5689ed6f5d66Smrg# The first argument to this parsing function should be the
5690ed6f5d66Smrg# script's $0 value, followed by "$@".
5691ed6f5d66Smrglt_option_debug=
5692ed6f5d66Smrgfunc_parse_lt_options ()
5693ed6f5d66Smrg{
5694ed6f5d66Smrg  lt_script_arg0=\$0
5695ed6f5d66Smrg  shift
5696ed6f5d66Smrg  for lt_opt
5697ed6f5d66Smrg  do
5698ed6f5d66Smrg    case \"\$lt_opt\" in
5699ed6f5d66Smrg    --lt-debug) lt_option_debug=1 ;;
5700ed6f5d66Smrg    --lt-dump-script)
5701ed6f5d66Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
5702ed6f5d66Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
5703ed6f5d66Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
5704ed6f5d66Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
5705ed6f5d66Smrg        exit 0
5706ed6f5d66Smrg      ;;
5707ed6f5d66Smrg    --lt-*)
5708ed6f5d66Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
5709ed6f5d66Smrg        exit 1
5710ed6f5d66Smrg      ;;
5711ed6f5d66Smrg    esac
5712ed6f5d66Smrg  done
5713ed6f5d66Smrg
5714ed6f5d66Smrg  # Print the debug banner immediately:
5715ed6f5d66Smrg  if test -n \"\$lt_option_debug\"; then
5716fbc03982Smrg    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
5717ed6f5d66Smrg  fi
5718ed6f5d66Smrg}
5719ed6f5d66Smrg
5720ed6f5d66Smrg# Used when --lt-debug. Prints its arguments to stdout
5721ed6f5d66Smrg# (redirection is the responsibility of the caller)
5722ed6f5d66Smrgfunc_lt_dump_args ()
5723ed6f5d66Smrg{
5724ed6f5d66Smrg  lt_dump_args_N=1;
5725ed6f5d66Smrg  for lt_arg
5726ed6f5d66Smrg  do
5727fbc03982Smrg    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
5728ed6f5d66Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
5729ed6f5d66Smrg  done
5730ed6f5d66Smrg}
5731ed6f5d66Smrg
5732ed6f5d66Smrg# Core function for launching the target application
5733ed6f5d66Smrgfunc_exec_program_core ()
5734ed6f5d66Smrg{
5735ed6f5d66Smrg"
5736ed6f5d66Smrg  case $host in
5737ed6f5d66Smrg  # Backslashes separate directories on plain windows
5738a3680546Smrg  *-*-mingw* | *-*-windows* | *-*-os2* | *-cegcc*)
5739ed6f5d66Smrg    $ECHO "\
5740ed6f5d66Smrg      if test -n \"\$lt_option_debug\"; then
5741fbc03982Smrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
5742ed6f5d66Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
5743ed6f5d66Smrg      fi
5744ed6f5d66Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
5745ed6f5d66Smrg"
5746ed6f5d66Smrg    ;;
5747ed6f5d66Smrg
5748ed6f5d66Smrg  *)
5749ed6f5d66Smrg    $ECHO "\
5750ed6f5d66Smrg      if test -n \"\$lt_option_debug\"; then
5751fbc03982Smrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
5752ed6f5d66Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
5753ed6f5d66Smrg      fi
5754ed6f5d66Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
5755ed6f5d66Smrg"
5756ed6f5d66Smrg    ;;
5757ed6f5d66Smrg  esac
5758ed6f5d66Smrg  $ECHO "\
5759ed6f5d66Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
5760ed6f5d66Smrg      exit 1
5761ed6f5d66Smrg}
5762ed6f5d66Smrg
5763ed6f5d66Smrg# A function to encapsulate launching the target application
5764ed6f5d66Smrg# Strips options in the --lt-* namespace from \$@ and
5765ed6f5d66Smrg# launches target application with the remaining arguments.
5766ed6f5d66Smrgfunc_exec_program ()
5767ed6f5d66Smrg{
5768ed6f5d66Smrg  case \" \$* \" in
5769ed6f5d66Smrg  *\\ --lt-*)
5770ed6f5d66Smrg    for lt_wr_arg
5771ed6f5d66Smrg    do
5772ed6f5d66Smrg      case \$lt_wr_arg in
5773ed6f5d66Smrg      --lt-*) ;;
5774ed6f5d66Smrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
5775ed6f5d66Smrg      esac
5776ed6f5d66Smrg      shift
5777ed6f5d66Smrg    done ;;
5778ed6f5d66Smrg  esac
5779ed6f5d66Smrg  func_exec_program_core \${1+\"\$@\"}
5780ed6f5d66Smrg}
5781ed6f5d66Smrg
5782ed6f5d66Smrg  # Parse options
5783ed6f5d66Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
5784ed6f5d66Smrg
5785ed6f5d66Smrg  # Find the directory that this script lives in.
5786ed6f5d66Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
5787ed6f5d66Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
5788ed6f5d66Smrg
5789ed6f5d66Smrg  # Follow symbolic links until we get to the real thisdir.
5790ed6f5d66Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
5791ed6f5d66Smrg  while test -n \"\$file\"; do
5792ed6f5d66Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
5793ed6f5d66Smrg
5794ed6f5d66Smrg    # If there was a directory component, then change thisdir.
5795ed6f5d66Smrg    if test \"x\$destdir\" != \"x\$file\"; then
5796ed6f5d66Smrg      case \"\$destdir\" in
5797ed6f5d66Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
5798ed6f5d66Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
5799ed6f5d66Smrg      esac
5800ed6f5d66Smrg    fi
5801ed6f5d66Smrg
5802ed6f5d66Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
5803ed6f5d66Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
5804ed6f5d66Smrg  done
5805ed6f5d66Smrg
5806a3680546Smrg  # Usually 'no', except on cygwin/mingw/windows when embedded into
5807ed6f5d66Smrg  # the cwrapper.
5808ed6f5d66Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
5809ed6f5d66Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
5810ed6f5d66Smrg    # special case for '.'
5811ed6f5d66Smrg    if test \"\$thisdir\" = \".\"; then
5812ed6f5d66Smrg      thisdir=\`pwd\`
5813ed6f5d66Smrg    fi
5814ed6f5d66Smrg    # remove .libs from thisdir
5815ed6f5d66Smrg    case \"\$thisdir\" in
5816ed6f5d66Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
5817ed6f5d66Smrg    $objdir )   thisdir=. ;;
5818ed6f5d66Smrg    esac
5819ed6f5d66Smrg  fi
5820ed6f5d66Smrg
5821ed6f5d66Smrg  # Try to get the absolute directory name.
5822ed6f5d66Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
5823ed6f5d66Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
5824ed6f5d66Smrg"
5825ed6f5d66Smrg
5826fbc03982Smrg	if test yes = "$fast_install"; then
5827ed6f5d66Smrg	  $ECHO "\
5828ed6f5d66Smrg  program=lt-'$outputname'$exeext
5829ed6f5d66Smrg  progdir=\"\$thisdir/$objdir\"
5830ed6f5d66Smrg
5831ed6f5d66Smrg  if test ! -f \"\$progdir/\$program\" ||
5832fbc03982Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
5833ed6f5d66Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
5834ed6f5d66Smrg
5835ed6f5d66Smrg    file=\"\$\$-\$program\"
5836ed6f5d66Smrg
5837ed6f5d66Smrg    if test ! -d \"\$progdir\"; then
5838ed6f5d66Smrg      $MKDIR \"\$progdir\"
5839ed6f5d66Smrg    else
5840ed6f5d66Smrg      $RM \"\$progdir/\$file\"
5841ed6f5d66Smrg    fi"
5842ed6f5d66Smrg
5843ed6f5d66Smrg	  $ECHO "\
5844ed6f5d66Smrg
5845ed6f5d66Smrg    # relink executable if necessary
5846ed6f5d66Smrg    if test -n \"\$relink_command\"; then
5847ed6f5d66Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
5848ed6f5d66Smrg      else
5849fbc03982Smrg	\$ECHO \"\$relink_command_output\" >&2
5850ed6f5d66Smrg	$RM \"\$progdir/\$file\"
5851ed6f5d66Smrg	exit 1
5852ed6f5d66Smrg      fi
5853ed6f5d66Smrg    fi
5854ed6f5d66Smrg
5855ed6f5d66Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
5856ed6f5d66Smrg    { $RM \"\$progdir/\$program\";
5857ed6f5d66Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
5858ed6f5d66Smrg    $RM \"\$progdir/\$file\"
5859ed6f5d66Smrg  fi"
5860ed6f5d66Smrg	else
5861ed6f5d66Smrg	  $ECHO "\
5862ed6f5d66Smrg  program='$outputname'
5863ed6f5d66Smrg  progdir=\"\$thisdir/$objdir\"
5864ed6f5d66Smrg"
5865ed6f5d66Smrg	fi
5866ed6f5d66Smrg
5867ed6f5d66Smrg	$ECHO "\
5868ed6f5d66Smrg
5869ed6f5d66Smrg  if test -f \"\$progdir/\$program\"; then"
5870ed6f5d66Smrg
5871ed6f5d66Smrg	# fixup the dll searchpath if we need to.
5872ed6f5d66Smrg	#
5873ed6f5d66Smrg	# Fix the DLL searchpath if we need to.  Do this before prepending
5874ed6f5d66Smrg	# to shlibpath, because on Windows, both are PATH and uninstalled
5875ed6f5d66Smrg	# libraries must come first.
5876ed6f5d66Smrg	if test -n "$dllsearchpath"; then
5877ed6f5d66Smrg	  $ECHO "\
5878ed6f5d66Smrg    # Add the dll search path components to the executable PATH
5879ed6f5d66Smrg    PATH=$dllsearchpath:\$PATH
5880ed6f5d66Smrg"
5881ed6f5d66Smrg	fi
5882ed6f5d66Smrg
5883ed6f5d66Smrg	# Export our shlibpath_var if we have one.
5884fbc03982Smrg	if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5885ed6f5d66Smrg	  $ECHO "\
5886ed6f5d66Smrg    # Add our own library path to $shlibpath_var
5887ed6f5d66Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
5888ed6f5d66Smrg
5889ed6f5d66Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
5890ed6f5d66Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
5891ed6f5d66Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
5892ed6f5d66Smrg
5893ed6f5d66Smrg    export $shlibpath_var
5894ed6f5d66Smrg"
5895ed6f5d66Smrg	fi
5896ed6f5d66Smrg
5897ed6f5d66Smrg	$ECHO "\
5898ed6f5d66Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
5899ed6f5d66Smrg      # Run the actual program with our arguments.
5900ed6f5d66Smrg      func_exec_program \${1+\"\$@\"}
5901ed6f5d66Smrg    fi
5902ed6f5d66Smrg  else
5903ed6f5d66Smrg    # The program doesn't exist.
5904fbc03982Smrg    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
5905ed6f5d66Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
5906ed6f5d66Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
5907ed6f5d66Smrg    exit 1
5908ed6f5d66Smrg  fi
5909ed6f5d66Smrgfi\
5910ed6f5d66Smrg"
5911ed6f5d66Smrg}
5912ed6f5d66Smrg
5913ed6f5d66Smrg
5914ed6f5d66Smrg# func_emit_cwrapperexe_src
5915ed6f5d66Smrg# emit the source code for a wrapper executable on stdout
5916ed6f5d66Smrg# Must ONLY be called from within func_mode_link because
5917ed6f5d66Smrg# it depends on a number of variable set therein.
5918ed6f5d66Smrgfunc_emit_cwrapperexe_src ()
5919ed6f5d66Smrg{
5920ed6f5d66Smrg	cat <<EOF
5921ed6f5d66Smrg
5922ed6f5d66Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
5923fbc03982Smrg   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5924ed6f5d66Smrg
5925ed6f5d66Smrg   The $output program cannot be directly executed until all the libtool
5926ed6f5d66Smrg   libraries that it depends on are installed.
5927ed6f5d66Smrg
5928ed6f5d66Smrg   This wrapper executable should never be moved out of the build directory.
5929ed6f5d66Smrg   If it is, it will not operate correctly.
5930ed6f5d66Smrg*/
5931ed6f5d66SmrgEOF
5932ed6f5d66Smrg	    cat <<"EOF"
5933ed6f5d66Smrg#ifdef _MSC_VER
5934ed6f5d66Smrg# define _CRT_SECURE_NO_DEPRECATE 1
5935ed6f5d66Smrg#endif
5936ed6f5d66Smrg#include <stdio.h>
5937ed6f5d66Smrg#include <stdlib.h>
5938a3680546Smrg#if defined _WIN32 && !defined __GNUC__
5939ed6f5d66Smrg# include <direct.h>
5940ed6f5d66Smrg# include <process.h>
5941ed6f5d66Smrg# include <io.h>
5942ed6f5d66Smrg#else
5943ed6f5d66Smrg# include <unistd.h>
5944ed6f5d66Smrg# include <stdint.h>
5945ed6f5d66Smrg# ifdef __CYGWIN__
5946ed6f5d66Smrg#  include <io.h>
5947ed6f5d66Smrg# endif
5948ed6f5d66Smrg#endif
5949ed6f5d66Smrg#include <malloc.h>
5950ed6f5d66Smrg#include <stdarg.h>
5951ed6f5d66Smrg#include <assert.h>
5952ed6f5d66Smrg#include <string.h>
5953ed6f5d66Smrg#include <ctype.h>
5954ed6f5d66Smrg#include <errno.h>
5955ed6f5d66Smrg#include <fcntl.h>
5956ed6f5d66Smrg#include <sys/stat.h>
5957ed6f5d66Smrg
5958fbc03982Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
5959fbc03982Smrg
5960ed6f5d66Smrg/* declarations of non-ANSI functions */
5961fbc03982Smrg#if defined __MINGW32__
5962ed6f5d66Smrg# ifdef __STRICT_ANSI__
5963a3680546Smrg_CRTIMP int __cdecl _putenv (const char *);
5964ed6f5d66Smrg# endif
5965fbc03982Smrg#elif defined __CYGWIN__
5966ed6f5d66Smrg# ifdef __STRICT_ANSI__
5967ed6f5d66Smrgchar *realpath (const char *, char *);
5968ed6f5d66Smrgint putenv (char *);
5969ed6f5d66Smrgint setenv (const char *, const char *, int);
5970ed6f5d66Smrg# endif
5971fbc03982Smrg/* #elif defined other_platform || defined ... */
5972ed6f5d66Smrg#endif
5973ed6f5d66Smrg
5974ed6f5d66Smrg/* portability defines, excluding path handling macros */
5975fbc03982Smrg#if defined _MSC_VER
5976ed6f5d66Smrg# define setmode _setmode
5977ed6f5d66Smrg# define stat    _stat
5978ed6f5d66Smrg# define chmod   _chmod
5979ed6f5d66Smrg# define getcwd  _getcwd
5980ed6f5d66Smrg# define putenv  _putenv
5981ed6f5d66Smrg# define S_IXUSR _S_IEXEC
5982fbc03982Smrg#elif defined __MINGW32__
5983ed6f5d66Smrg# define setmode _setmode
5984ed6f5d66Smrg# define stat    _stat
5985ed6f5d66Smrg# define chmod   _chmod
5986ed6f5d66Smrg# define getcwd  _getcwd
5987ed6f5d66Smrg# define putenv  _putenv
5988fbc03982Smrg#elif defined __CYGWIN__
5989ed6f5d66Smrg# define HAVE_SETENV
5990ed6f5d66Smrg# define FOPEN_WB "wb"
5991fbc03982Smrg/* #elif defined other platforms ... */
5992ed6f5d66Smrg#endif
5993ed6f5d66Smrg
5994fbc03982Smrg#if defined PATH_MAX
5995ed6f5d66Smrg# define LT_PATHMAX PATH_MAX
5996fbc03982Smrg#elif defined MAXPATHLEN
5997ed6f5d66Smrg# define LT_PATHMAX MAXPATHLEN
5998ed6f5d66Smrg#else
5999ed6f5d66Smrg# define LT_PATHMAX 1024
6000ed6f5d66Smrg#endif
6001ed6f5d66Smrg
6002ed6f5d66Smrg#ifndef S_IXOTH
6003ed6f5d66Smrg# define S_IXOTH 0
6004ed6f5d66Smrg#endif
6005ed6f5d66Smrg#ifndef S_IXGRP
6006ed6f5d66Smrg# define S_IXGRP 0
6007ed6f5d66Smrg#endif
6008ed6f5d66Smrg
6009ed6f5d66Smrg/* path handling portability macros */
6010ed6f5d66Smrg#ifndef DIR_SEPARATOR
6011ed6f5d66Smrg# define DIR_SEPARATOR '/'
6012ed6f5d66Smrg# define PATH_SEPARATOR ':'
6013ed6f5d66Smrg#endif
6014ed6f5d66Smrg
6015fbc03982Smrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
6016fbc03982Smrg  defined __OS2__
6017ed6f5d66Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
6018ed6f5d66Smrg# define FOPEN_WB "wb"
6019ed6f5d66Smrg# ifndef DIR_SEPARATOR_2
6020ed6f5d66Smrg#  define DIR_SEPARATOR_2 '\\'
6021ed6f5d66Smrg# endif
6022ed6f5d66Smrg# ifndef PATH_SEPARATOR_2
6023ed6f5d66Smrg#  define PATH_SEPARATOR_2 ';'
6024ed6f5d66Smrg# endif
6025ed6f5d66Smrg#endif
6026ed6f5d66Smrg
6027ed6f5d66Smrg#ifndef DIR_SEPARATOR_2
6028ed6f5d66Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
6029ed6f5d66Smrg#else /* DIR_SEPARATOR_2 */
6030ed6f5d66Smrg# define IS_DIR_SEPARATOR(ch) \
6031ed6f5d66Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
6032ed6f5d66Smrg#endif /* DIR_SEPARATOR_2 */
6033ed6f5d66Smrg
6034ed6f5d66Smrg#ifndef PATH_SEPARATOR_2
6035ed6f5d66Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
6036ed6f5d66Smrg#else /* PATH_SEPARATOR_2 */
6037ed6f5d66Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
6038ed6f5d66Smrg#endif /* PATH_SEPARATOR_2 */
6039ed6f5d66Smrg
6040ed6f5d66Smrg#ifndef FOPEN_WB
6041ed6f5d66Smrg# define FOPEN_WB "w"
6042ed6f5d66Smrg#endif
6043ed6f5d66Smrg#ifndef _O_BINARY
6044ed6f5d66Smrg# define _O_BINARY 0
6045ed6f5d66Smrg#endif
6046ed6f5d66Smrg
6047ed6f5d66Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
6048ed6f5d66Smrg#define XFREE(stale) do { \
6049fbc03982Smrg  if (stale) { free (stale); stale = 0; } \
6050ed6f5d66Smrg} while (0)
6051ed6f5d66Smrg
6052fbc03982Smrg#if defined LT_DEBUGWRAPPER
6053ed6f5d66Smrgstatic int lt_debug = 1;
6054ed6f5d66Smrg#else
6055ed6f5d66Smrgstatic int lt_debug = 0;
6056ed6f5d66Smrg#endif
6057ed6f5d66Smrg
6058ed6f5d66Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
6059ed6f5d66Smrg
6060ed6f5d66Smrgvoid *xmalloc (size_t num);
6061ed6f5d66Smrgchar *xstrdup (const char *string);
6062ed6f5d66Smrgconst char *base_name (const char *name);
6063ed6f5d66Smrgchar *find_executable (const char *wrapper);
6064ed6f5d66Smrgchar *chase_symlinks (const char *pathspec);
6065ed6f5d66Smrgint make_executable (const char *path);
6066ed6f5d66Smrgint check_executable (const char *path);
6067ed6f5d66Smrgchar *strendzap (char *str, const char *pat);
6068ed6f5d66Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
6069ed6f5d66Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
6070ed6f5d66Smrgstatic const char *nonnull (const char *s);
6071ed6f5d66Smrgstatic const char *nonempty (const char *s);
6072ed6f5d66Smrgvoid lt_setenv (const char *name, const char *value);
6073ed6f5d66Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
6074ed6f5d66Smrgvoid lt_update_exe_path (const char *name, const char *value);
6075ed6f5d66Smrgvoid lt_update_lib_path (const char *name, const char *value);
6076ed6f5d66Smrgchar **prepare_spawn (char **argv);
6077ed6f5d66Smrgvoid lt_dump_script (FILE *f);
6078ed6f5d66SmrgEOF
6079ed6f5d66Smrg
6080ed6f5d66Smrg	    cat <<EOF
6081fbc03982Smrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
6082fbc03982Smrg# define externally_visible volatile
6083fbc03982Smrg#else
6084fbc03982Smrg# define externally_visible __attribute__((externally_visible)) volatile
6085fbc03982Smrg#endif
6086fbc03982Smrgexternally_visible const char * MAGIC_EXE = "$magic_exe";
6087ed6f5d66Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
6088ed6f5d66SmrgEOF
6089ed6f5d66Smrg
6090fbc03982Smrg	    if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
6091ed6f5d66Smrg              func_to_host_path "$temp_rpath"
6092ed6f5d66Smrg	      cat <<EOF
6093ed6f5d66Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
6094ed6f5d66SmrgEOF
6095ed6f5d66Smrg	    else
6096ed6f5d66Smrg	      cat <<"EOF"
6097ed6f5d66Smrgconst char * LIB_PATH_VALUE   = "";
6098ed6f5d66SmrgEOF
6099ed6f5d66Smrg	    fi
6100ed6f5d66Smrg
6101ed6f5d66Smrg	    if test -n "$dllsearchpath"; then
6102ed6f5d66Smrg              func_to_host_path "$dllsearchpath:"
6103ed6f5d66Smrg	      cat <<EOF
6104ed6f5d66Smrgconst char * EXE_PATH_VARNAME = "PATH";
6105ed6f5d66Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
6106ed6f5d66SmrgEOF
6107ed6f5d66Smrg	    else
6108ed6f5d66Smrg	      cat <<"EOF"
6109ed6f5d66Smrgconst char * EXE_PATH_VARNAME = "";
6110ed6f5d66Smrgconst char * EXE_PATH_VALUE   = "";
6111ed6f5d66SmrgEOF
6112ed6f5d66Smrg	    fi
6113ed6f5d66Smrg
6114fbc03982Smrg	    if test yes = "$fast_install"; then
6115ed6f5d66Smrg	      cat <<EOF
6116ed6f5d66Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
6117ed6f5d66SmrgEOF
6118ed6f5d66Smrg	    else
6119ed6f5d66Smrg	      cat <<EOF
6120ed6f5d66Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
6121ed6f5d66SmrgEOF
6122ed6f5d66Smrg	    fi
6123ed6f5d66Smrg
6124ed6f5d66Smrg
6125ed6f5d66Smrg	    cat <<"EOF"
6126ed6f5d66Smrg
6127ed6f5d66Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
6128ed6f5d66Smrg
6129ed6f5d66Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
6130ed6f5d66Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
6131ed6f5d66Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
6132ed6f5d66Smrg
6133ed6f5d66Smrgint
6134ed6f5d66Smrgmain (int argc, char *argv[])
6135ed6f5d66Smrg{
6136ed6f5d66Smrg  char **newargz;
6137ed6f5d66Smrg  int  newargc;
6138ed6f5d66Smrg  char *tmp_pathspec;
6139ed6f5d66Smrg  char *actual_cwrapper_path;
6140ed6f5d66Smrg  char *actual_cwrapper_name;
6141ed6f5d66Smrg  char *target_name;
6142ed6f5d66Smrg  char *lt_argv_zero;
6143fbc03982Smrg  int rval = 127;
6144ed6f5d66Smrg
6145ed6f5d66Smrg  int i;
6146ed6f5d66Smrg
6147ed6f5d66Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
6148fbc03982Smrg  newargz = XMALLOC (char *, (size_t) argc + 1);
6149ed6f5d66Smrg
6150ed6f5d66Smrg  /* very simple arg parsing; don't want to rely on getopt
6151ed6f5d66Smrg   * also, copy all non cwrapper options to newargz, except
6152ed6f5d66Smrg   * argz[0], which is handled differently
6153ed6f5d66Smrg   */
6154ed6f5d66Smrg  newargc=0;
6155ed6f5d66Smrg  for (i = 1; i < argc; i++)
6156ed6f5d66Smrg    {
6157fbc03982Smrg      if (STREQ (argv[i], dumpscript_opt))
6158ed6f5d66Smrg	{
6159ed6f5d66SmrgEOF
6160fbc03982Smrg	    case $host in
6161a3680546Smrg	      *mingw* | *windows* | *cygwin* )
6162ed6f5d66Smrg		# make stdout use "unix" line endings
6163ed6f5d66Smrg		echo "          setmode(1,_O_BINARY);"
6164ed6f5d66Smrg		;;
6165ed6f5d66Smrg	      esac
6166ed6f5d66Smrg
6167ed6f5d66Smrg	    cat <<"EOF"
6168ed6f5d66Smrg	  lt_dump_script (stdout);
6169ed6f5d66Smrg	  return 0;
6170ed6f5d66Smrg	}
6171fbc03982Smrg      if (STREQ (argv[i], debug_opt))
6172ed6f5d66Smrg	{
6173ed6f5d66Smrg          lt_debug = 1;
6174ed6f5d66Smrg          continue;
6175ed6f5d66Smrg	}
6176fbc03982Smrg      if (STREQ (argv[i], ltwrapper_option_prefix))
6177ed6f5d66Smrg        {
6178ed6f5d66Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
6179ed6f5d66Smrg             namespace, but it is not one of the ones we know about and
6180a3680546Smrg             have already dealt with, above (including dump-script), then
6181ed6f5d66Smrg             report an error. Otherwise, targets might begin to believe
6182ed6f5d66Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
6183ed6f5d66Smrg             namespace. The first time any user complains about this, we'll
6184ed6f5d66Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
6185ed6f5d66Smrg             or a configure.ac-settable value.
6186ed6f5d66Smrg           */
6187ed6f5d66Smrg          lt_fatal (__FILE__, __LINE__,
6188ed6f5d66Smrg		    "unrecognized %s option: '%s'",
6189ed6f5d66Smrg                    ltwrapper_option_prefix, argv[i]);
6190ed6f5d66Smrg        }
6191ed6f5d66Smrg      /* otherwise ... */
6192ed6f5d66Smrg      newargz[++newargc] = xstrdup (argv[i]);
6193ed6f5d66Smrg    }
6194ed6f5d66Smrg  newargz[++newargc] = NULL;
6195ed6f5d66Smrg
6196ed6f5d66SmrgEOF
6197ed6f5d66Smrg	    cat <<EOF
6198ed6f5d66Smrg  /* The GNU banner must be the first non-error debug message */
6199fbc03982Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
6200ed6f5d66SmrgEOF
6201ed6f5d66Smrg	    cat <<"EOF"
6202ed6f5d66Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
6203ed6f5d66Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
6204ed6f5d66Smrg
6205ed6f5d66Smrg  tmp_pathspec = find_executable (argv[0]);
6206ed6f5d66Smrg  if (tmp_pathspec == NULL)
6207ed6f5d66Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
6208ed6f5d66Smrg  lt_debugprintf (__FILE__, __LINE__,
6209ed6f5d66Smrg                  "(main) found exe (before symlink chase) at: %s\n",
6210ed6f5d66Smrg		  tmp_pathspec);
6211ed6f5d66Smrg
6212ed6f5d66Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
6213ed6f5d66Smrg  lt_debugprintf (__FILE__, __LINE__,
6214ed6f5d66Smrg                  "(main) found exe (after symlink chase) at: %s\n",
6215ed6f5d66Smrg		  actual_cwrapper_path);
6216ed6f5d66Smrg  XFREE (tmp_pathspec);
6217ed6f5d66Smrg
6218ed6f5d66Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
6219ed6f5d66Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
6220ed6f5d66Smrg
6221ed6f5d66Smrg  /* wrapper name transforms */
6222ed6f5d66Smrg  strendzap (actual_cwrapper_name, ".exe");
6223ed6f5d66Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
6224ed6f5d66Smrg  XFREE (actual_cwrapper_name);
6225ed6f5d66Smrg  actual_cwrapper_name = tmp_pathspec;
6226ed6f5d66Smrg  tmp_pathspec = 0;
6227ed6f5d66Smrg
6228ed6f5d66Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
6229ed6f5d66Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
6230ed6f5d66Smrg  strendzap (target_name, ".exe");
6231ed6f5d66Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
6232ed6f5d66Smrg  XFREE (target_name);
6233ed6f5d66Smrg  target_name = tmp_pathspec;
6234ed6f5d66Smrg  tmp_pathspec = 0;
6235ed6f5d66Smrg
6236ed6f5d66Smrg  lt_debugprintf (__FILE__, __LINE__,
6237ed6f5d66Smrg		  "(main) libtool target name: %s\n",
6238ed6f5d66Smrg		  target_name);
6239ed6f5d66SmrgEOF
6240ed6f5d66Smrg
6241ed6f5d66Smrg	    cat <<EOF
6242ed6f5d66Smrg  newargz[0] =
6243ed6f5d66Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
6244ed6f5d66Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
6245ed6f5d66Smrg  strcpy (newargz[0], actual_cwrapper_path);
6246ed6f5d66Smrg  strcat (newargz[0], "$objdir");
6247ed6f5d66Smrg  strcat (newargz[0], "/");
6248ed6f5d66SmrgEOF
6249ed6f5d66Smrg
6250ed6f5d66Smrg	    cat <<"EOF"
6251ed6f5d66Smrg  /* stop here, and copy so we don't have to do this twice */
6252ed6f5d66Smrg  tmp_pathspec = xstrdup (newargz[0]);
6253ed6f5d66Smrg
6254ed6f5d66Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
6255ed6f5d66Smrg  strcat (newargz[0], actual_cwrapper_name);
6256ed6f5d66Smrg
6257ed6f5d66Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
6258ed6f5d66Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
6259ed6f5d66Smrg  XFREE (tmp_pathspec);
6260ed6f5d66Smrg  tmp_pathspec = NULL;
6261ed6f5d66SmrgEOF
6262ed6f5d66Smrg
6263ed6f5d66Smrg	    case $host_os in
6264a3680546Smrg	      mingw* | windows*)
6265ed6f5d66Smrg	    cat <<"EOF"
6266ed6f5d66Smrg  {
6267ed6f5d66Smrg    char* p;
6268ed6f5d66Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
6269ed6f5d66Smrg      {
6270ed6f5d66Smrg	*p = '/';
6271ed6f5d66Smrg      }
6272ed6f5d66Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
6273ed6f5d66Smrg      {
6274ed6f5d66Smrg	*p = '/';
6275ed6f5d66Smrg      }
6276ed6f5d66Smrg  }
6277ed6f5d66SmrgEOF
6278ed6f5d66Smrg	    ;;
6279ed6f5d66Smrg	    esac
6280ed6f5d66Smrg
6281ed6f5d66Smrg	    cat <<"EOF"
6282ed6f5d66Smrg  XFREE (target_name);
6283ed6f5d66Smrg  XFREE (actual_cwrapper_path);
6284ed6f5d66Smrg  XFREE (actual_cwrapper_name);
6285ed6f5d66Smrg
6286ed6f5d66Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
6287ed6f5d66Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
6288ed6f5d66Smrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
6289ed6f5d66Smrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
6290ed6f5d66Smrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
6291ed6f5d66Smrg     libraries must come first. */
6292ed6f5d66Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
6293ed6f5d66Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
6294ed6f5d66Smrg
6295ed6f5d66Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
6296ed6f5d66Smrg		  nonnull (lt_argv_zero));
6297ed6f5d66Smrg  for (i = 0; i < newargc; i++)
6298ed6f5d66Smrg    {
6299ed6f5d66Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
6300ed6f5d66Smrg		      i, nonnull (newargz[i]));
6301ed6f5d66Smrg    }
6302ed6f5d66Smrg
6303ed6f5d66SmrgEOF
6304ed6f5d66Smrg
6305ed6f5d66Smrg	    case $host_os in
6306a3680546Smrg	      mingw* | windows*)
6307ed6f5d66Smrg		cat <<"EOF"
6308ed6f5d66Smrg  /* execv doesn't actually work on mingw as expected on unix */
6309ed6f5d66Smrg  newargz = prepare_spawn (newargz);
6310fbc03982Smrg  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
6311ed6f5d66Smrg  if (rval == -1)
6312ed6f5d66Smrg    {
6313ed6f5d66Smrg      /* failed to start process */
6314ed6f5d66Smrg      lt_debugprintf (__FILE__, __LINE__,
6315ed6f5d66Smrg		      "(main) failed to launch target \"%s\": %s\n",
6316ed6f5d66Smrg		      lt_argv_zero, nonnull (strerror (errno)));
6317ed6f5d66Smrg      return 127;
6318ed6f5d66Smrg    }
6319ed6f5d66Smrg  return rval;
6320ed6f5d66SmrgEOF
6321ed6f5d66Smrg		;;
6322ed6f5d66Smrg	      *)
6323ed6f5d66Smrg		cat <<"EOF"
6324ed6f5d66Smrg  execv (lt_argv_zero, newargz);
6325ed6f5d66Smrg  return rval; /* =127, but avoids unused variable warning */
6326ed6f5d66SmrgEOF
6327ed6f5d66Smrg		;;
6328ed6f5d66Smrg	    esac
6329ed6f5d66Smrg
6330ed6f5d66Smrg	    cat <<"EOF"
6331ed6f5d66Smrg}
6332ed6f5d66Smrg
6333ed6f5d66Smrgvoid *
6334ed6f5d66Smrgxmalloc (size_t num)
6335ed6f5d66Smrg{
6336ed6f5d66Smrg  void *p = (void *) malloc (num);
6337ed6f5d66Smrg  if (!p)
6338ed6f5d66Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
6339ed6f5d66Smrg
6340ed6f5d66Smrg  return p;
6341ed6f5d66Smrg}
6342ed6f5d66Smrg
6343ed6f5d66Smrgchar *
6344ed6f5d66Smrgxstrdup (const char *string)
6345ed6f5d66Smrg{
6346ed6f5d66Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
6347ed6f5d66Smrg			  string) : NULL;
6348ed6f5d66Smrg}
6349ed6f5d66Smrg
6350ed6f5d66Smrgconst char *
6351ed6f5d66Smrgbase_name (const char *name)
6352ed6f5d66Smrg{
6353ed6f5d66Smrg  const char *base;
6354ed6f5d66Smrg
6355fbc03982Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6356ed6f5d66Smrg  /* Skip over the disk name in MSDOS pathnames. */
6357ed6f5d66Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
6358ed6f5d66Smrg    name += 2;
6359ed6f5d66Smrg#endif
6360ed6f5d66Smrg
6361ed6f5d66Smrg  for (base = name; *name; name++)
6362ed6f5d66Smrg    if (IS_DIR_SEPARATOR (*name))
6363ed6f5d66Smrg      base = name + 1;
6364ed6f5d66Smrg  return base;
6365ed6f5d66Smrg}
6366ed6f5d66Smrg
6367ed6f5d66Smrgint
6368ed6f5d66Smrgcheck_executable (const char *path)
6369ed6f5d66Smrg{
6370ed6f5d66Smrg  struct stat st;
6371ed6f5d66Smrg
6372ed6f5d66Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
6373ed6f5d66Smrg                  nonempty (path));
6374ed6f5d66Smrg  if ((!path) || (!*path))
6375ed6f5d66Smrg    return 0;
6376ed6f5d66Smrg
6377ed6f5d66Smrg  if ((stat (path, &st) >= 0)
6378ed6f5d66Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
6379ed6f5d66Smrg    return 1;
6380ed6f5d66Smrg  else
6381ed6f5d66Smrg    return 0;
6382ed6f5d66Smrg}
6383ed6f5d66Smrg
6384ed6f5d66Smrgint
6385ed6f5d66Smrgmake_executable (const char *path)
6386ed6f5d66Smrg{
6387ed6f5d66Smrg  int rval = 0;
6388ed6f5d66Smrg  struct stat st;
6389ed6f5d66Smrg
6390ed6f5d66Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
6391ed6f5d66Smrg                  nonempty (path));
6392ed6f5d66Smrg  if ((!path) || (!*path))
6393ed6f5d66Smrg    return 0;
6394ed6f5d66Smrg
6395ed6f5d66Smrg  if (stat (path, &st) >= 0)
6396ed6f5d66Smrg    {
6397ed6f5d66Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
6398ed6f5d66Smrg    }
6399ed6f5d66Smrg  return rval;
6400ed6f5d66Smrg}
6401ed6f5d66Smrg
6402ed6f5d66Smrg/* Searches for the full path of the wrapper.  Returns
6403ed6f5d66Smrg   newly allocated full path name if found, NULL otherwise
6404ed6f5d66Smrg   Does not chase symlinks, even on platforms that support them.
6405ed6f5d66Smrg*/
6406ed6f5d66Smrgchar *
6407ed6f5d66Smrgfind_executable (const char *wrapper)
6408ed6f5d66Smrg{
6409ed6f5d66Smrg  int has_slash = 0;
6410ed6f5d66Smrg  const char *p;
6411ed6f5d66Smrg  const char *p_next;
6412ed6f5d66Smrg  /* static buffer for getcwd */
6413ed6f5d66Smrg  char tmp[LT_PATHMAX + 1];
6414fbc03982Smrg  size_t tmp_len;
6415ed6f5d66Smrg  char *concat_name;
6416ed6f5d66Smrg
6417ed6f5d66Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
6418ed6f5d66Smrg                  nonempty (wrapper));
6419ed6f5d66Smrg
6420ed6f5d66Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
6421ed6f5d66Smrg    return NULL;
6422ed6f5d66Smrg
6423ed6f5d66Smrg  /* Absolute path? */
6424fbc03982Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6425ed6f5d66Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
6426ed6f5d66Smrg    {
6427ed6f5d66Smrg      concat_name = xstrdup (wrapper);
6428ed6f5d66Smrg      if (check_executable (concat_name))
6429ed6f5d66Smrg	return concat_name;
6430ed6f5d66Smrg      XFREE (concat_name);
6431ed6f5d66Smrg    }
6432ed6f5d66Smrg  else
6433ed6f5d66Smrg    {
6434ed6f5d66Smrg#endif
6435ed6f5d66Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
6436ed6f5d66Smrg	{
6437ed6f5d66Smrg	  concat_name = xstrdup (wrapper);
6438ed6f5d66Smrg	  if (check_executable (concat_name))
6439ed6f5d66Smrg	    return concat_name;
6440ed6f5d66Smrg	  XFREE (concat_name);
6441ed6f5d66Smrg	}
6442fbc03982Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6443ed6f5d66Smrg    }
6444ed6f5d66Smrg#endif
6445ed6f5d66Smrg
6446ed6f5d66Smrg  for (p = wrapper; *p; p++)
6447ed6f5d66Smrg    if (*p == '/')
6448ed6f5d66Smrg      {
6449ed6f5d66Smrg	has_slash = 1;
6450ed6f5d66Smrg	break;
6451ed6f5d66Smrg      }
6452ed6f5d66Smrg  if (!has_slash)
6453ed6f5d66Smrg    {
6454ed6f5d66Smrg      /* no slashes; search PATH */
6455ed6f5d66Smrg      const char *path = getenv ("PATH");
6456ed6f5d66Smrg      if (path != NULL)
6457ed6f5d66Smrg	{
6458ed6f5d66Smrg	  for (p = path; *p; p = p_next)
6459ed6f5d66Smrg	    {
6460ed6f5d66Smrg	      const char *q;
6461ed6f5d66Smrg	      size_t p_len;
6462ed6f5d66Smrg	      for (q = p; *q; q++)
6463ed6f5d66Smrg		if (IS_PATH_SEPARATOR (*q))
6464ed6f5d66Smrg		  break;
6465fbc03982Smrg	      p_len = (size_t) (q - p);
6466ed6f5d66Smrg	      p_next = (*q == '\0' ? q : q + 1);
6467ed6f5d66Smrg	      if (p_len == 0)
6468ed6f5d66Smrg		{
6469ed6f5d66Smrg		  /* empty path: current directory */
6470ed6f5d66Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
6471ed6f5d66Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6472ed6f5d66Smrg                              nonnull (strerror (errno)));
6473ed6f5d66Smrg		  tmp_len = strlen (tmp);
6474ed6f5d66Smrg		  concat_name =
6475ed6f5d66Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6476ed6f5d66Smrg		  memcpy (concat_name, tmp, tmp_len);
6477ed6f5d66Smrg		  concat_name[tmp_len] = '/';
6478ed6f5d66Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
6479ed6f5d66Smrg		}
6480ed6f5d66Smrg	      else
6481ed6f5d66Smrg		{
6482ed6f5d66Smrg		  concat_name =
6483ed6f5d66Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
6484ed6f5d66Smrg		  memcpy (concat_name, p, p_len);
6485ed6f5d66Smrg		  concat_name[p_len] = '/';
6486ed6f5d66Smrg		  strcpy (concat_name + p_len + 1, wrapper);
6487ed6f5d66Smrg		}
6488ed6f5d66Smrg	      if (check_executable (concat_name))
6489ed6f5d66Smrg		return concat_name;
6490ed6f5d66Smrg	      XFREE (concat_name);
6491ed6f5d66Smrg	    }
6492ed6f5d66Smrg	}
6493ed6f5d66Smrg      /* not found in PATH; assume curdir */
6494ed6f5d66Smrg    }
6495ed6f5d66Smrg  /* Relative path | not found in path: prepend cwd */
6496ed6f5d66Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
6497ed6f5d66Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6498ed6f5d66Smrg              nonnull (strerror (errno)));
6499ed6f5d66Smrg  tmp_len = strlen (tmp);
6500ed6f5d66Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6501ed6f5d66Smrg  memcpy (concat_name, tmp, tmp_len);
6502ed6f5d66Smrg  concat_name[tmp_len] = '/';
6503ed6f5d66Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
6504ed6f5d66Smrg
6505ed6f5d66Smrg  if (check_executable (concat_name))
6506ed6f5d66Smrg    return concat_name;
6507ed6f5d66Smrg  XFREE (concat_name);
6508ed6f5d66Smrg  return NULL;
6509ed6f5d66Smrg}
6510ed6f5d66Smrg
6511ed6f5d66Smrgchar *
6512ed6f5d66Smrgchase_symlinks (const char *pathspec)
6513ed6f5d66Smrg{
6514ed6f5d66Smrg#ifndef S_ISLNK
6515ed6f5d66Smrg  return xstrdup (pathspec);
6516ed6f5d66Smrg#else
6517ed6f5d66Smrg  char buf[LT_PATHMAX];
6518ed6f5d66Smrg  struct stat s;
6519ed6f5d66Smrg  char *tmp_pathspec = xstrdup (pathspec);
6520ed6f5d66Smrg  char *p;
6521ed6f5d66Smrg  int has_symlinks = 0;
6522ed6f5d66Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
6523ed6f5d66Smrg    {
6524ed6f5d66Smrg      lt_debugprintf (__FILE__, __LINE__,
6525ed6f5d66Smrg		      "checking path component for symlinks: %s\n",
6526ed6f5d66Smrg		      tmp_pathspec);
6527ed6f5d66Smrg      if (lstat (tmp_pathspec, &s) == 0)
6528ed6f5d66Smrg	{
6529ed6f5d66Smrg	  if (S_ISLNK (s.st_mode) != 0)
6530ed6f5d66Smrg	    {
6531ed6f5d66Smrg	      has_symlinks = 1;
6532ed6f5d66Smrg	      break;
6533ed6f5d66Smrg	    }
6534ed6f5d66Smrg
6535ed6f5d66Smrg	  /* search backwards for last DIR_SEPARATOR */
6536ed6f5d66Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
6537ed6f5d66Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6538ed6f5d66Smrg	    p--;
6539ed6f5d66Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6540ed6f5d66Smrg	    {
6541ed6f5d66Smrg	      /* no more DIR_SEPARATORS left */
6542ed6f5d66Smrg	      break;
6543ed6f5d66Smrg	    }
6544ed6f5d66Smrg	  *p = '\0';
6545ed6f5d66Smrg	}
6546ed6f5d66Smrg      else
6547ed6f5d66Smrg	{
6548ed6f5d66Smrg	  lt_fatal (__FILE__, __LINE__,
6549ed6f5d66Smrg		    "error accessing file \"%s\": %s",
6550ed6f5d66Smrg		    tmp_pathspec, nonnull (strerror (errno)));
6551ed6f5d66Smrg	}
6552ed6f5d66Smrg    }
6553ed6f5d66Smrg  XFREE (tmp_pathspec);
6554ed6f5d66Smrg
6555ed6f5d66Smrg  if (!has_symlinks)
6556ed6f5d66Smrg    {
6557ed6f5d66Smrg      return xstrdup (pathspec);
6558ed6f5d66Smrg    }
6559ed6f5d66Smrg
6560ed6f5d66Smrg  tmp_pathspec = realpath (pathspec, buf);
6561ed6f5d66Smrg  if (tmp_pathspec == 0)
6562ed6f5d66Smrg    {
6563ed6f5d66Smrg      lt_fatal (__FILE__, __LINE__,
6564ed6f5d66Smrg		"could not follow symlinks for %s", pathspec);
6565ed6f5d66Smrg    }
6566ed6f5d66Smrg  return xstrdup (tmp_pathspec);
6567ed6f5d66Smrg#endif
6568ed6f5d66Smrg}
6569ed6f5d66Smrg
6570ed6f5d66Smrgchar *
6571ed6f5d66Smrgstrendzap (char *str, const char *pat)
6572ed6f5d66Smrg{
6573ed6f5d66Smrg  size_t len, patlen;
6574ed6f5d66Smrg
6575ed6f5d66Smrg  assert (str != NULL);
6576ed6f5d66Smrg  assert (pat != NULL);
6577ed6f5d66Smrg
6578ed6f5d66Smrg  len = strlen (str);
6579ed6f5d66Smrg  patlen = strlen (pat);
6580ed6f5d66Smrg
6581ed6f5d66Smrg  if (patlen <= len)
6582ed6f5d66Smrg    {
6583ed6f5d66Smrg      str += len - patlen;
6584fbc03982Smrg      if (STREQ (str, pat))
6585ed6f5d66Smrg	*str = '\0';
6586ed6f5d66Smrg    }
6587ed6f5d66Smrg  return str;
6588ed6f5d66Smrg}
6589ed6f5d66Smrg
6590ed6f5d66Smrgvoid
6591ed6f5d66Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
6592ed6f5d66Smrg{
6593ed6f5d66Smrg  va_list args;
6594ed6f5d66Smrg  if (lt_debug)
6595ed6f5d66Smrg    {
6596ed6f5d66Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
6597ed6f5d66Smrg      va_start (args, fmt);
6598ed6f5d66Smrg      (void) vfprintf (stderr, fmt, args);
6599ed6f5d66Smrg      va_end (args);
6600ed6f5d66Smrg    }
6601ed6f5d66Smrg}
6602ed6f5d66Smrg
6603ed6f5d66Smrgstatic void
6604ed6f5d66Smrglt_error_core (int exit_status, const char *file,
6605ed6f5d66Smrg	       int line, const char *mode,
6606ed6f5d66Smrg	       const char *message, va_list ap)
6607ed6f5d66Smrg{
6608ed6f5d66Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
6609ed6f5d66Smrg  vfprintf (stderr, message, ap);
6610ed6f5d66Smrg  fprintf (stderr, ".\n");
6611ed6f5d66Smrg
6612ed6f5d66Smrg  if (exit_status >= 0)
6613ed6f5d66Smrg    exit (exit_status);
6614ed6f5d66Smrg}
6615ed6f5d66Smrg
6616ed6f5d66Smrgvoid
6617ed6f5d66Smrglt_fatal (const char *file, int line, const char *message, ...)
6618ed6f5d66Smrg{
6619ed6f5d66Smrg  va_list ap;
6620ed6f5d66Smrg  va_start (ap, message);
6621ed6f5d66Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
6622ed6f5d66Smrg  va_end (ap);
6623ed6f5d66Smrg}
6624ed6f5d66Smrg
6625ed6f5d66Smrgstatic const char *
6626ed6f5d66Smrgnonnull (const char *s)
6627ed6f5d66Smrg{
6628ed6f5d66Smrg  return s ? s : "(null)";
6629ed6f5d66Smrg}
6630ed6f5d66Smrg
6631ed6f5d66Smrgstatic const char *
6632ed6f5d66Smrgnonempty (const char *s)
6633ed6f5d66Smrg{
6634ed6f5d66Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
6635ed6f5d66Smrg}
6636ed6f5d66Smrg
6637ed6f5d66Smrgvoid
6638ed6f5d66Smrglt_setenv (const char *name, const char *value)
6639ed6f5d66Smrg{
6640ed6f5d66Smrg  lt_debugprintf (__FILE__, __LINE__,
6641ed6f5d66Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
6642ed6f5d66Smrg                  nonnull (name), nonnull (value));
6643ed6f5d66Smrg  {
6644ed6f5d66Smrg#ifdef HAVE_SETENV
6645ed6f5d66Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
6646ed6f5d66Smrg    char *str = xstrdup (value);
6647ed6f5d66Smrg    setenv (name, str, 1);
6648ed6f5d66Smrg#else
6649fbc03982Smrg    size_t len = strlen (name) + 1 + strlen (value) + 1;
6650ed6f5d66Smrg    char *str = XMALLOC (char, len);
6651ed6f5d66Smrg    sprintf (str, "%s=%s", name, value);
6652ed6f5d66Smrg    if (putenv (str) != EXIT_SUCCESS)
6653ed6f5d66Smrg      {
6654ed6f5d66Smrg        XFREE (str);
6655ed6f5d66Smrg      }
6656ed6f5d66Smrg#endif
6657ed6f5d66Smrg  }
6658ed6f5d66Smrg}
6659ed6f5d66Smrg
6660ed6f5d66Smrgchar *
6661ed6f5d66Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
6662ed6f5d66Smrg{
6663ed6f5d66Smrg  char *new_value;
6664ed6f5d66Smrg  if (orig_value && *orig_value)
6665ed6f5d66Smrg    {
6666fbc03982Smrg      size_t orig_value_len = strlen (orig_value);
6667fbc03982Smrg      size_t add_len = strlen (add);
6668ed6f5d66Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
6669ed6f5d66Smrg      if (to_end)
6670ed6f5d66Smrg        {
6671ed6f5d66Smrg          strcpy (new_value, orig_value);
6672ed6f5d66Smrg          strcpy (new_value + orig_value_len, add);
6673ed6f5d66Smrg        }
6674ed6f5d66Smrg      else
6675ed6f5d66Smrg        {
6676ed6f5d66Smrg          strcpy (new_value, add);
6677ed6f5d66Smrg          strcpy (new_value + add_len, orig_value);
6678ed6f5d66Smrg        }
6679ed6f5d66Smrg    }
6680ed6f5d66Smrg  else
6681ed6f5d66Smrg    {
6682ed6f5d66Smrg      new_value = xstrdup (add);
6683ed6f5d66Smrg    }
6684ed6f5d66Smrg  return new_value;
6685ed6f5d66Smrg}
6686ed6f5d66Smrg
6687ed6f5d66Smrgvoid
6688ed6f5d66Smrglt_update_exe_path (const char *name, const char *value)
6689ed6f5d66Smrg{
6690ed6f5d66Smrg  lt_debugprintf (__FILE__, __LINE__,
6691ed6f5d66Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
6692ed6f5d66Smrg                  nonnull (name), nonnull (value));
6693ed6f5d66Smrg
6694ed6f5d66Smrg  if (name && *name && value && *value)
6695ed6f5d66Smrg    {
6696ed6f5d66Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
6697ed6f5d66Smrg      /* some systems can't cope with a ':'-terminated path #' */
6698fbc03982Smrg      size_t len = strlen (new_value);
6699fbc03982Smrg      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
6700ed6f5d66Smrg        {
6701fbc03982Smrg          new_value[--len] = '\0';
6702ed6f5d66Smrg        }
6703ed6f5d66Smrg      lt_setenv (name, new_value);
6704ed6f5d66Smrg      XFREE (new_value);
6705ed6f5d66Smrg    }
6706ed6f5d66Smrg}
6707ed6f5d66Smrg
6708ed6f5d66Smrgvoid
6709ed6f5d66Smrglt_update_lib_path (const char *name, const char *value)
6710ed6f5d66Smrg{
6711ed6f5d66Smrg  lt_debugprintf (__FILE__, __LINE__,
6712ed6f5d66Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
6713ed6f5d66Smrg                  nonnull (name), nonnull (value));
6714ed6f5d66Smrg
6715ed6f5d66Smrg  if (name && *name && value && *value)
6716ed6f5d66Smrg    {
6717ed6f5d66Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
6718ed6f5d66Smrg      lt_setenv (name, new_value);
6719ed6f5d66Smrg      XFREE (new_value);
6720ed6f5d66Smrg    }
6721ed6f5d66Smrg}
6722ed6f5d66Smrg
6723ed6f5d66SmrgEOF
6724ed6f5d66Smrg	    case $host_os in
6725a3680546Smrg	      mingw* | windows*)
6726ed6f5d66Smrg		cat <<"EOF"
6727ed6f5d66Smrg
6728ed6f5d66Smrg/* Prepares an argument vector before calling spawn().
6729ed6f5d66Smrg   Note that spawn() does not by itself call the command interpreter
6730ed6f5d66Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
6731ed6f5d66Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
6732ed6f5d66Smrg         GetVersionEx(&v);
6733ed6f5d66Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
6734ed6f5d66Smrg      }) ? "cmd.exe" : "command.com").
6735ed6f5d66Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
6736ed6f5d66Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
6737ed6f5d66Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
6738ed6f5d66Smrg   special way:
6739ed6f5d66Smrg   - Space and tab are interpreted as delimiters. They are not treated as
6740ed6f5d66Smrg     delimiters if they are surrounded by double quotes: "...".
6741ed6f5d66Smrg   - Unescaped double quotes are removed from the input. Their only effect is
6742ed6f5d66Smrg     that within double quotes, space and tab are treated like normal
6743ed6f5d66Smrg     characters.
6744ed6f5d66Smrg   - Backslashes not followed by double quotes are not special.
6745ed6f5d66Smrg   - But 2*n+1 backslashes followed by a double quote become
6746ed6f5d66Smrg     n backslashes followed by a double quote (n >= 0):
6747ed6f5d66Smrg       \" -> "
6748ed6f5d66Smrg       \\\" -> \"
6749ed6f5d66Smrg       \\\\\" -> \\"
6750ed6f5d66Smrg */
6751ed6f5d66Smrg#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"
6752ed6f5d66Smrg#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"
6753ed6f5d66Smrgchar **
6754ed6f5d66Smrgprepare_spawn (char **argv)
6755ed6f5d66Smrg{
6756ed6f5d66Smrg  size_t argc;
6757ed6f5d66Smrg  char **new_argv;
6758ed6f5d66Smrg  size_t i;
6759ed6f5d66Smrg
6760ed6f5d66Smrg  /* Count number of arguments.  */
6761ed6f5d66Smrg  for (argc = 0; argv[argc] != NULL; argc++)
6762ed6f5d66Smrg    ;
6763ed6f5d66Smrg
6764ed6f5d66Smrg  /* Allocate new argument vector.  */
6765ed6f5d66Smrg  new_argv = XMALLOC (char *, argc + 1);
6766ed6f5d66Smrg
6767ed6f5d66Smrg  /* Put quoted arguments into the new argument vector.  */
6768ed6f5d66Smrg  for (i = 0; i < argc; i++)
6769ed6f5d66Smrg    {
6770ed6f5d66Smrg      const char *string = argv[i];
6771ed6f5d66Smrg
6772ed6f5d66Smrg      if (string[0] == '\0')
6773ed6f5d66Smrg	new_argv[i] = xstrdup ("\"\"");
6774ed6f5d66Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
6775ed6f5d66Smrg	{
6776ed6f5d66Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
6777ed6f5d66Smrg	  size_t length;
6778ed6f5d66Smrg	  unsigned int backslashes;
6779ed6f5d66Smrg	  const char *s;
6780ed6f5d66Smrg	  char *quoted_string;
6781ed6f5d66Smrg	  char *p;
6782ed6f5d66Smrg
6783ed6f5d66Smrg	  length = 0;
6784ed6f5d66Smrg	  backslashes = 0;
6785ed6f5d66Smrg	  if (quote_around)
6786ed6f5d66Smrg	    length++;
6787ed6f5d66Smrg	  for (s = string; *s != '\0'; s++)
6788ed6f5d66Smrg	    {
6789ed6f5d66Smrg	      char c = *s;
6790ed6f5d66Smrg	      if (c == '"')
6791ed6f5d66Smrg		length += backslashes + 1;
6792ed6f5d66Smrg	      length++;
6793ed6f5d66Smrg	      if (c == '\\')
6794ed6f5d66Smrg		backslashes++;
6795ed6f5d66Smrg	      else
6796ed6f5d66Smrg		backslashes = 0;
6797ed6f5d66Smrg	    }
6798ed6f5d66Smrg	  if (quote_around)
6799ed6f5d66Smrg	    length += backslashes + 1;
6800ed6f5d66Smrg
6801ed6f5d66Smrg	  quoted_string = XMALLOC (char, length + 1);
6802ed6f5d66Smrg
6803ed6f5d66Smrg	  p = quoted_string;
6804ed6f5d66Smrg	  backslashes = 0;
6805ed6f5d66Smrg	  if (quote_around)
6806ed6f5d66Smrg	    *p++ = '"';
6807ed6f5d66Smrg	  for (s = string; *s != '\0'; s++)
6808ed6f5d66Smrg	    {
6809ed6f5d66Smrg	      char c = *s;
6810ed6f5d66Smrg	      if (c == '"')
6811ed6f5d66Smrg		{
6812ed6f5d66Smrg		  unsigned int j;
6813ed6f5d66Smrg		  for (j = backslashes + 1; j > 0; j--)
6814ed6f5d66Smrg		    *p++ = '\\';
6815ed6f5d66Smrg		}
6816ed6f5d66Smrg	      *p++ = c;
6817ed6f5d66Smrg	      if (c == '\\')
6818ed6f5d66Smrg		backslashes++;
6819ed6f5d66Smrg	      else
6820ed6f5d66Smrg		backslashes = 0;
6821ed6f5d66Smrg	    }
6822ed6f5d66Smrg	  if (quote_around)
6823ed6f5d66Smrg	    {
6824ed6f5d66Smrg	      unsigned int j;
6825ed6f5d66Smrg	      for (j = backslashes; j > 0; j--)
6826ed6f5d66Smrg		*p++ = '\\';
6827ed6f5d66Smrg	      *p++ = '"';
6828ed6f5d66Smrg	    }
6829ed6f5d66Smrg	  *p = '\0';
6830ed6f5d66Smrg
6831ed6f5d66Smrg	  new_argv[i] = quoted_string;
6832ed6f5d66Smrg	}
6833ed6f5d66Smrg      else
6834ed6f5d66Smrg	new_argv[i] = (char *) string;
6835ed6f5d66Smrg    }
6836ed6f5d66Smrg  new_argv[argc] = NULL;
6837ed6f5d66Smrg
6838ed6f5d66Smrg  return new_argv;
6839ed6f5d66Smrg}
6840ed6f5d66SmrgEOF
6841ed6f5d66Smrg		;;
6842ed6f5d66Smrg	    esac
6843ed6f5d66Smrg
6844ed6f5d66Smrg            cat <<"EOF"
6845ed6f5d66Smrgvoid lt_dump_script (FILE* f)
6846ed6f5d66Smrg{
6847ed6f5d66SmrgEOF
6848ed6f5d66Smrg	    func_emit_wrapper yes |
6849ed6f5d66Smrg	      $SED -n -e '
6850ed6f5d66Smrgs/^\(.\{79\}\)\(..*\)/\1\
6851ed6f5d66Smrg\2/
6852ed6f5d66Smrgh
6853ed6f5d66Smrgs/\([\\"]\)/\\\1/g
6854ed6f5d66Smrgs/$/\\n/
6855ed6f5d66Smrgs/\([^\n]*\).*/  fputs ("\1", f);/p
6856ed6f5d66Smrgg
6857ed6f5d66SmrgD'
6858ed6f5d66Smrg            cat <<"EOF"
6859ed6f5d66Smrg}
6860ed6f5d66SmrgEOF
6861ed6f5d66Smrg}
6862ed6f5d66Smrg# end: func_emit_cwrapperexe_src
6863ed6f5d66Smrg
6864ed6f5d66Smrg# func_win32_import_lib_p ARG
6865ed6f5d66Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
6866ed6f5d66Smrgfunc_win32_import_lib_p ()
6867ed6f5d66Smrg{
6868fbc03982Smrg    $debug_cmd
6869fbc03982Smrg
6870ed6f5d66Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
6871ed6f5d66Smrg    *import*) : ;;
6872ed6f5d66Smrg    *) false ;;
6873ed6f5d66Smrg    esac
6874ed6f5d66Smrg}
6875ed6f5d66Smrg
6876fbc03982Smrg# func_suncc_cstd_abi
6877fbc03982Smrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
6878fbc03982Smrg# Several compiler flags select an ABI that is incompatible with the
6879fbc03982Smrg# Cstd library. Avoid specifying it if any are in CXXFLAGS.
6880fbc03982Smrgfunc_suncc_cstd_abi ()
6881fbc03982Smrg{
6882fbc03982Smrg    $debug_cmd
6883fbc03982Smrg
6884fbc03982Smrg    case " $compile_command " in
6885fbc03982Smrg    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
6886fbc03982Smrg      suncc_use_cstd_abi=no
6887fbc03982Smrg      ;;
6888fbc03982Smrg    *)
6889fbc03982Smrg      suncc_use_cstd_abi=yes
6890fbc03982Smrg      ;;
6891fbc03982Smrg    esac
6892fbc03982Smrg}
6893fbc03982Smrg
6894ed6f5d66Smrg# func_mode_link arg...
6895ed6f5d66Smrgfunc_mode_link ()
6896ed6f5d66Smrg{
6897fbc03982Smrg    $debug_cmd
6898fbc03982Smrg
6899ed6f5d66Smrg    case $host in
6900a3680546Smrg    *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*)
6901ed6f5d66Smrg      # It is impossible to link a dll without this setting, and
6902ed6f5d66Smrg      # we shouldn't force the makefile maintainer to figure out
6903fbc03982Smrg      # what system we are compiling for in order to pass an extra
6904ed6f5d66Smrg      # flag for every libtool invocation.
6905ed6f5d66Smrg      # allow_undefined=no
6906ed6f5d66Smrg
6907ed6f5d66Smrg      # FIXME: Unfortunately, there are problems with the above when trying
6908fbc03982Smrg      # to make a dll that has undefined symbols, in which case not
6909ed6f5d66Smrg      # even a static library is built.  For now, we need to specify
6910ed6f5d66Smrg      # -no-undefined on the libtool link line when we can be certain
6911ed6f5d66Smrg      # that all symbols are satisfied, otherwise we get a static library.
6912ed6f5d66Smrg      allow_undefined=yes
6913ed6f5d66Smrg      ;;
6914ed6f5d66Smrg    *)
6915ed6f5d66Smrg      allow_undefined=yes
6916ed6f5d66Smrg      ;;
6917ed6f5d66Smrg    esac
6918ed6f5d66Smrg    libtool_args=$nonopt
6919ed6f5d66Smrg    base_compile="$nonopt $@"
6920ed6f5d66Smrg    compile_command=$nonopt
6921ed6f5d66Smrg    finalize_command=$nonopt
6922ed6f5d66Smrg
6923ed6f5d66Smrg    compile_rpath=
6924a3680546Smrg    compile_rpath_tail=
6925ed6f5d66Smrg    finalize_rpath=
6926ed6f5d66Smrg    compile_shlibpath=
6927ed6f5d66Smrg    finalize_shlibpath=
6928ed6f5d66Smrg    convenience=
6929ed6f5d66Smrg    old_convenience=
6930ed6f5d66Smrg    deplibs=
6931ed6f5d66Smrg    old_deplibs=
6932ed6f5d66Smrg    compiler_flags=
6933ed6f5d66Smrg    linker_flags=
6934ed6f5d66Smrg    dllsearchpath=
6935ed6f5d66Smrg    lib_search_path=`pwd`
6936ed6f5d66Smrg    inst_prefix_dir=
6937ed6f5d66Smrg    new_inherited_linker_flags=
6938ed6f5d66Smrg
6939ed6f5d66Smrg    avoid_version=no
6940ed6f5d66Smrg    bindir=
6941ed6f5d66Smrg    dlfiles=
6942ed6f5d66Smrg    dlprefiles=
6943ed6f5d66Smrg    dlself=no
6944ed6f5d66Smrg    export_dynamic=no
6945ed6f5d66Smrg    export_symbols=
6946ed6f5d66Smrg    export_symbols_regex=
6947ed6f5d66Smrg    generated=
6948ed6f5d66Smrg    libobjs=
6949ed6f5d66Smrg    ltlibs=
6950ed6f5d66Smrg    module=no
6951ed6f5d66Smrg    no_install=no
6952ed6f5d66Smrg    objs=
6953fbc03982Smrg    os2dllname=
6954ed6f5d66Smrg    non_pic_objects=
6955ed6f5d66Smrg    precious_files_regex=
6956ed6f5d66Smrg    prefer_static_libs=no
6957fbc03982Smrg    preload=false
6958ed6f5d66Smrg    prev=
6959ed6f5d66Smrg    prevarg=
6960ed6f5d66Smrg    release=
6961ed6f5d66Smrg    rpath=
6962ed6f5d66Smrg    xrpath=
6963ed6f5d66Smrg    perm_rpath=
6964ed6f5d66Smrg    temp_rpath=
6965a3680546Smrg    temp_rpath_tail=
6966ed6f5d66Smrg    thread_safe=no
6967ed6f5d66Smrg    vinfo=
6968ed6f5d66Smrg    vinfo_number=no
6969ed6f5d66Smrg    weak_libs=
6970a3680546Smrg    rpath_arg=
6971fbc03982Smrg    single_module=$wl-single_module
6972ed6f5d66Smrg    func_infer_tag $base_compile
6973ed6f5d66Smrg
6974ed6f5d66Smrg    # We need to know -static, to get the right output filenames.
6975ed6f5d66Smrg    for arg
6976ed6f5d66Smrg    do
6977ed6f5d66Smrg      case $arg in
6978ed6f5d66Smrg      -shared)
6979fbc03982Smrg	test yes != "$build_libtool_libs" \
6980fbc03982Smrg	  && func_fatal_configuration "cannot build a shared library"
6981ed6f5d66Smrg	build_old_libs=no
6982ed6f5d66Smrg	break
6983ed6f5d66Smrg	;;
6984ed6f5d66Smrg      -all-static | -static | -static-libtool-libs)
6985ed6f5d66Smrg	case $arg in
6986ed6f5d66Smrg	-all-static)
6987fbc03982Smrg	  if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
6988ed6f5d66Smrg	    func_warning "complete static linking is impossible in this configuration"
6989ed6f5d66Smrg	  fi
6990ed6f5d66Smrg	  if test -n "$link_static_flag"; then
6991ed6f5d66Smrg	    dlopen_self=$dlopen_self_static
6992ed6f5d66Smrg	  fi
6993ed6f5d66Smrg	  prefer_static_libs=yes
6994ed6f5d66Smrg	  ;;
6995ed6f5d66Smrg	-static)
6996ed6f5d66Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
6997ed6f5d66Smrg	    dlopen_self=$dlopen_self_static
6998ed6f5d66Smrg	  fi
6999ed6f5d66Smrg	  prefer_static_libs=built
7000ed6f5d66Smrg	  ;;
7001ed6f5d66Smrg	-static-libtool-libs)
7002ed6f5d66Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
7003ed6f5d66Smrg	    dlopen_self=$dlopen_self_static
7004ed6f5d66Smrg	  fi
7005ed6f5d66Smrg	  prefer_static_libs=yes
7006ed6f5d66Smrg	  ;;
7007ed6f5d66Smrg	esac
7008ed6f5d66Smrg	build_libtool_libs=no
7009ed6f5d66Smrg	build_old_libs=yes
7010ed6f5d66Smrg	break
7011ed6f5d66Smrg	;;
7012ed6f5d66Smrg      esac
7013ed6f5d66Smrg    done
7014ed6f5d66Smrg
7015ed6f5d66Smrg    # See if our shared archives depend on static archives.
7016ed6f5d66Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
7017ed6f5d66Smrg
7018ed6f5d66Smrg    # Go through the arguments, transforming them on the way.
7019ed6f5d66Smrg    while test "$#" -gt 0; do
7020fbc03982Smrg      arg=$1
7021ed6f5d66Smrg      shift
70223d05230fSmrg      func_quote_arg pretty,unquoted "$arg"
70233d05230fSmrg      qarg=$func_quote_arg_unquoted_result
70243d05230fSmrg      func_append libtool_args " $func_quote_arg_result"
7025ed6f5d66Smrg
7026ed6f5d66Smrg      # If the previous option needs an argument, assign it.
7027ed6f5d66Smrg      if test -n "$prev"; then
7028ed6f5d66Smrg	case $prev in
7029ed6f5d66Smrg	output)
7030ed6f5d66Smrg	  func_append compile_command " @OUTPUT@"
7031ed6f5d66Smrg	  func_append finalize_command " @OUTPUT@"
7032ed6f5d66Smrg	  ;;
7033ed6f5d66Smrg	esac
7034ed6f5d66Smrg
7035ed6f5d66Smrg	case $prev in
7036ed6f5d66Smrg	bindir)
7037fbc03982Smrg	  bindir=$arg
7038ed6f5d66Smrg	  prev=
7039ed6f5d66Smrg	  continue
7040ed6f5d66Smrg	  ;;
7041ed6f5d66Smrg	dlfiles|dlprefiles)
7042fbc03982Smrg	  $preload || {
7043ed6f5d66Smrg	    # Add the symbol object into the linking commands.
7044ed6f5d66Smrg	    func_append compile_command " @SYMFILE@"
7045ed6f5d66Smrg	    func_append finalize_command " @SYMFILE@"
7046fbc03982Smrg	    preload=:
7047fbc03982Smrg	  }
7048ed6f5d66Smrg	  case $arg in
7049ed6f5d66Smrg	  *.la | *.lo) ;;  # We handle these cases below.
7050ed6f5d66Smrg	  force)
7051fbc03982Smrg	    if test no = "$dlself"; then
7052ed6f5d66Smrg	      dlself=needless
7053ed6f5d66Smrg	      export_dynamic=yes
7054ed6f5d66Smrg	    fi
7055ed6f5d66Smrg	    prev=
7056ed6f5d66Smrg	    continue
7057ed6f5d66Smrg	    ;;
7058ed6f5d66Smrg	  self)
7059fbc03982Smrg	    if test dlprefiles = "$prev"; then
7060ed6f5d66Smrg	      dlself=yes
7061fbc03982Smrg	    elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
7062ed6f5d66Smrg	      dlself=yes
7063ed6f5d66Smrg	    else
7064ed6f5d66Smrg	      dlself=needless
7065ed6f5d66Smrg	      export_dynamic=yes
7066ed6f5d66Smrg	    fi
7067ed6f5d66Smrg	    prev=
7068ed6f5d66Smrg	    continue
7069ed6f5d66Smrg	    ;;
7070ed6f5d66Smrg	  *)
7071fbc03982Smrg	    if test dlfiles = "$prev"; then
7072ed6f5d66Smrg	      func_append dlfiles " $arg"
7073ed6f5d66Smrg	    else
7074ed6f5d66Smrg	      func_append dlprefiles " $arg"
7075ed6f5d66Smrg	    fi
7076ed6f5d66Smrg	    prev=
7077ed6f5d66Smrg	    continue
7078ed6f5d66Smrg	    ;;
7079ed6f5d66Smrg	  esac
7080ed6f5d66Smrg	  ;;
7081ed6f5d66Smrg	expsyms)
7082fbc03982Smrg	  export_symbols=$arg
7083ed6f5d66Smrg	  test -f "$arg" \
7084fbc03982Smrg	    || func_fatal_error "symbol file '$arg' does not exist"
7085ed6f5d66Smrg	  prev=
7086ed6f5d66Smrg	  continue
7087ed6f5d66Smrg	  ;;
7088ed6f5d66Smrg	expsyms_regex)
7089fbc03982Smrg	  export_symbols_regex=$arg
7090ed6f5d66Smrg	  prev=
7091ed6f5d66Smrg	  continue
7092ed6f5d66Smrg	  ;;
7093ed6f5d66Smrg	framework)
7094ed6f5d66Smrg	  case $host in
7095ed6f5d66Smrg	    *-*-darwin*)
7096ed6f5d66Smrg	      case "$deplibs " in
7097ed6f5d66Smrg		*" $qarg.ltframework "*) ;;
7098ed6f5d66Smrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
7099ed6f5d66Smrg		   ;;
7100ed6f5d66Smrg	      esac
7101ed6f5d66Smrg	      ;;
7102ed6f5d66Smrg	  esac
7103ed6f5d66Smrg	  prev=
7104ed6f5d66Smrg	  continue
7105ed6f5d66Smrg	  ;;
7106ed6f5d66Smrg	inst_prefix)
7107fbc03982Smrg	  inst_prefix_dir=$arg
7108fbc03982Smrg	  prev=
7109fbc03982Smrg	  continue
7110fbc03982Smrg	  ;;
7111fbc03982Smrg	mllvm)
7112fbc03982Smrg	  # Clang does not use LLVM to link, so we can simply discard any
7113fbc03982Smrg	  # '-mllvm $arg' options when doing the link step.
7114ed6f5d66Smrg	  prev=
7115ed6f5d66Smrg	  continue
7116ed6f5d66Smrg	  ;;
7117ed6f5d66Smrg	objectlist)
7118ed6f5d66Smrg	  if test -f "$arg"; then
7119ed6f5d66Smrg	    save_arg=$arg
7120ed6f5d66Smrg	    moreargs=
7121ed6f5d66Smrg	    for fil in `cat "$save_arg"`
7122ed6f5d66Smrg	    do
7123ed6f5d66Smrg#	      func_append moreargs " $fil"
7124ed6f5d66Smrg	      arg=$fil
7125ed6f5d66Smrg	      # A libtool-controlled object.
7126ed6f5d66Smrg
7127ed6f5d66Smrg	      # Check to see that this really is a libtool object.
7128ed6f5d66Smrg	      if func_lalib_unsafe_p "$arg"; then
7129ed6f5d66Smrg		pic_object=
7130ed6f5d66Smrg		non_pic_object=
7131ed6f5d66Smrg
7132ed6f5d66Smrg		# Read the .lo file
7133ed6f5d66Smrg		func_source "$arg"
7134ed6f5d66Smrg
7135ed6f5d66Smrg		if test -z "$pic_object" ||
7136ed6f5d66Smrg		   test -z "$non_pic_object" ||
7137fbc03982Smrg		   test none = "$pic_object" &&
7138fbc03982Smrg		   test none = "$non_pic_object"; then
7139fbc03982Smrg		  func_fatal_error "cannot find name of object for '$arg'"
7140ed6f5d66Smrg		fi
7141ed6f5d66Smrg
7142ed6f5d66Smrg		# Extract subdirectory from the argument.
7143ed6f5d66Smrg		func_dirname "$arg" "/" ""
7144fbc03982Smrg		xdir=$func_dirname_result
7145ed6f5d66Smrg
7146fbc03982Smrg		if test none != "$pic_object"; then
7147ed6f5d66Smrg		  # Prepend the subdirectory the object is found in.
7148fbc03982Smrg		  pic_object=$xdir$pic_object
7149ed6f5d66Smrg
7150fbc03982Smrg		  if test dlfiles = "$prev"; then
7151fbc03982Smrg		    if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
7152ed6f5d66Smrg		      func_append dlfiles " $pic_object"
7153ed6f5d66Smrg		      prev=
7154ed6f5d66Smrg		      continue
7155ed6f5d66Smrg		    else
7156ed6f5d66Smrg		      # If libtool objects are unsupported, then we need to preload.
7157ed6f5d66Smrg		      prev=dlprefiles
7158ed6f5d66Smrg		    fi
7159ed6f5d66Smrg		  fi
7160ed6f5d66Smrg
7161ed6f5d66Smrg		  # CHECK ME:  I think I busted this.  -Ossama
7162fbc03982Smrg		  if test dlprefiles = "$prev"; then
7163ed6f5d66Smrg		    # Preload the old-style object.
7164ed6f5d66Smrg		    func_append dlprefiles " $pic_object"
7165ed6f5d66Smrg		    prev=
7166ed6f5d66Smrg		  fi
7167ed6f5d66Smrg
7168ed6f5d66Smrg		  # A PIC object.
7169ed6f5d66Smrg		  func_append libobjs " $pic_object"
7170fbc03982Smrg		  arg=$pic_object
7171ed6f5d66Smrg		fi
7172ed6f5d66Smrg
7173ed6f5d66Smrg		# Non-PIC object.
7174fbc03982Smrg		if test none != "$non_pic_object"; then
7175ed6f5d66Smrg		  # Prepend the subdirectory the object is found in.
7176fbc03982Smrg		  non_pic_object=$xdir$non_pic_object
7177ed6f5d66Smrg
7178ed6f5d66Smrg		  # A standard non-PIC object
7179ed6f5d66Smrg		  func_append non_pic_objects " $non_pic_object"
7180fbc03982Smrg		  if test -z "$pic_object" || test none = "$pic_object"; then
7181fbc03982Smrg		    arg=$non_pic_object
7182ed6f5d66Smrg		  fi
7183ed6f5d66Smrg		else
7184ed6f5d66Smrg		  # If the PIC object exists, use it instead.
7185ed6f5d66Smrg		  # $xdir was prepended to $pic_object above.
7186fbc03982Smrg		  non_pic_object=$pic_object
7187ed6f5d66Smrg		  func_append non_pic_objects " $non_pic_object"
7188ed6f5d66Smrg		fi
7189ed6f5d66Smrg	      else
7190ed6f5d66Smrg		# Only an error if not doing a dry-run.
7191ed6f5d66Smrg		if $opt_dry_run; then
7192ed6f5d66Smrg		  # Extract subdirectory from the argument.
7193ed6f5d66Smrg		  func_dirname "$arg" "/" ""
7194fbc03982Smrg		  xdir=$func_dirname_result
7195ed6f5d66Smrg
7196ed6f5d66Smrg		  func_lo2o "$arg"
7197ed6f5d66Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
7198ed6f5d66Smrg		  non_pic_object=$xdir$func_lo2o_result
7199ed6f5d66Smrg		  func_append libobjs " $pic_object"
7200ed6f5d66Smrg		  func_append non_pic_objects " $non_pic_object"
7201ed6f5d66Smrg	        else
7202fbc03982Smrg		  func_fatal_error "'$arg' is not a valid libtool object"
7203ed6f5d66Smrg		fi
7204ed6f5d66Smrg	      fi
7205ed6f5d66Smrg	    done
7206ed6f5d66Smrg	  else
7207fbc03982Smrg	    func_fatal_error "link input file '$arg' does not exist"
7208ed6f5d66Smrg	  fi
7209ed6f5d66Smrg	  arg=$save_arg
7210ed6f5d66Smrg	  prev=
7211ed6f5d66Smrg	  continue
7212ed6f5d66Smrg	  ;;
7213fbc03982Smrg	os2dllname)
7214fbc03982Smrg	  os2dllname=$arg
7215fbc03982Smrg	  prev=
7216fbc03982Smrg	  continue
7217fbc03982Smrg	  ;;
7218ed6f5d66Smrg	precious_regex)
7219fbc03982Smrg	  precious_files_regex=$arg
7220ed6f5d66Smrg	  prev=
7221ed6f5d66Smrg	  continue
7222ed6f5d66Smrg	  ;;
7223ed6f5d66Smrg	release)
7224fbc03982Smrg	  release=-$arg
7225ed6f5d66Smrg	  prev=
7226ed6f5d66Smrg	  continue
7227ed6f5d66Smrg	  ;;
7228ed6f5d66Smrg	rpath | xrpath)
7229ed6f5d66Smrg	  # We need an absolute path.
7230ed6f5d66Smrg	  case $arg in
7231ed6f5d66Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
7232ed6f5d66Smrg	  *)
7233a3680546Smrg	    func_fatal_error "argument to -rpath is not absolute: $arg"
7234ed6f5d66Smrg	    ;;
7235ed6f5d66Smrg	  esac
7236fbc03982Smrg	  if test rpath = "$prev"; then
7237ed6f5d66Smrg	    case "$rpath " in
7238ed6f5d66Smrg	    *" $arg "*) ;;
7239ed6f5d66Smrg	    *) func_append rpath " $arg" ;;
7240ed6f5d66Smrg	    esac
7241ed6f5d66Smrg	  else
7242ed6f5d66Smrg	    case "$xrpath " in
7243ed6f5d66Smrg	    *" $arg "*) ;;
7244ed6f5d66Smrg	    *) func_append xrpath " $arg" ;;
7245ed6f5d66Smrg	    esac
7246ed6f5d66Smrg	  fi
7247ed6f5d66Smrg	  prev=
7248ed6f5d66Smrg	  continue
7249ed6f5d66Smrg	  ;;
7250ed6f5d66Smrg	shrext)
7251fbc03982Smrg	  shrext_cmds=$arg
7252ed6f5d66Smrg	  prev=
7253ed6f5d66Smrg	  continue
7254ed6f5d66Smrg	  ;;
7255ed6f5d66Smrg	weak)
7256ed6f5d66Smrg	  func_append weak_libs " $arg"
7257ed6f5d66Smrg	  prev=
7258ed6f5d66Smrg	  continue
7259ed6f5d66Smrg	  ;;
72603d05230fSmrg	xassembler)
72613d05230fSmrg	  func_append compiler_flags " -Xassembler $qarg"
72623d05230fSmrg	  prev=
72633d05230fSmrg	  func_append compile_command " -Xassembler $qarg"
72643d05230fSmrg	  func_append finalize_command " -Xassembler $qarg"
72653d05230fSmrg	  continue
72663d05230fSmrg	  ;;
7267ed6f5d66Smrg	xcclinker)
7268ed6f5d66Smrg	  func_append linker_flags " $qarg"
7269ed6f5d66Smrg	  func_append compiler_flags " $qarg"
7270ed6f5d66Smrg	  prev=
7271ed6f5d66Smrg	  func_append compile_command " $qarg"
7272ed6f5d66Smrg	  func_append finalize_command " $qarg"
7273ed6f5d66Smrg	  continue
7274ed6f5d66Smrg	  ;;
7275ed6f5d66Smrg	xcompiler)
7276ed6f5d66Smrg	  func_append compiler_flags " $qarg"
7277ed6f5d66Smrg	  prev=
7278ed6f5d66Smrg	  func_append compile_command " $qarg"
7279ed6f5d66Smrg	  func_append finalize_command " $qarg"
7280ed6f5d66Smrg	  continue
7281ed6f5d66Smrg	  ;;
7282ed6f5d66Smrg	xlinker)
7283ed6f5d66Smrg	  func_append linker_flags " $qarg"
7284ed6f5d66Smrg	  func_append compiler_flags " $wl$qarg"
7285ed6f5d66Smrg	  prev=
7286ed6f5d66Smrg	  func_append compile_command " $wl$qarg"
7287ed6f5d66Smrg	  func_append finalize_command " $wl$qarg"
7288ed6f5d66Smrg	  continue
7289ed6f5d66Smrg	  ;;
7290ed6f5d66Smrg	*)
7291ed6f5d66Smrg	  eval "$prev=\"\$arg\""
7292ed6f5d66Smrg	  prev=
7293ed6f5d66Smrg	  continue
7294ed6f5d66Smrg	  ;;
7295ed6f5d66Smrg	esac
7296ed6f5d66Smrg      fi # test -n "$prev"
7297ed6f5d66Smrg
7298fbc03982Smrg      prevarg=$arg
7299ed6f5d66Smrg
7300ed6f5d66Smrg      case $arg in
7301ed6f5d66Smrg      -all-static)
7302ed6f5d66Smrg	if test -n "$link_static_flag"; then
7303ed6f5d66Smrg	  # See comment for -static flag below, for more details.
7304ed6f5d66Smrg	  func_append compile_command " $link_static_flag"
7305ed6f5d66Smrg	  func_append finalize_command " $link_static_flag"
7306ed6f5d66Smrg	fi
7307ed6f5d66Smrg	continue
7308ed6f5d66Smrg	;;
7309ed6f5d66Smrg
7310ed6f5d66Smrg      -allow-undefined)
7311ed6f5d66Smrg	# FIXME: remove this flag sometime in the future.
7312fbc03982Smrg	func_fatal_error "'-allow-undefined' must not be used because it is the default"
7313ed6f5d66Smrg	;;
7314ed6f5d66Smrg
7315ed6f5d66Smrg      -avoid-version)
7316ed6f5d66Smrg	avoid_version=yes
7317ed6f5d66Smrg	continue
7318ed6f5d66Smrg	;;
7319ed6f5d66Smrg
7320ed6f5d66Smrg      -bindir)
7321ed6f5d66Smrg	prev=bindir
7322ed6f5d66Smrg	continue
7323ed6f5d66Smrg	;;
7324ed6f5d66Smrg
7325ed6f5d66Smrg      -dlopen)
7326ed6f5d66Smrg	prev=dlfiles
7327ed6f5d66Smrg	continue
7328ed6f5d66Smrg	;;
7329ed6f5d66Smrg
7330ed6f5d66Smrg      -dlpreopen)
7331ed6f5d66Smrg	prev=dlprefiles
7332ed6f5d66Smrg	continue
7333ed6f5d66Smrg	;;
7334ed6f5d66Smrg
7335ed6f5d66Smrg      -export-dynamic)
7336ed6f5d66Smrg	export_dynamic=yes
7337ed6f5d66Smrg	continue
7338ed6f5d66Smrg	;;
7339ed6f5d66Smrg
7340ed6f5d66Smrg      -export-symbols | -export-symbols-regex)
7341ed6f5d66Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
7342ed6f5d66Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
7343ed6f5d66Smrg	fi
7344fbc03982Smrg	if test X-export-symbols = "X$arg"; then
7345ed6f5d66Smrg	  prev=expsyms
7346ed6f5d66Smrg	else
7347ed6f5d66Smrg	  prev=expsyms_regex
7348ed6f5d66Smrg	fi
7349ed6f5d66Smrg	continue
7350ed6f5d66Smrg	;;
7351ed6f5d66Smrg
7352ed6f5d66Smrg      -framework)
7353ed6f5d66Smrg	prev=framework
7354ed6f5d66Smrg	continue
7355ed6f5d66Smrg	;;
7356ed6f5d66Smrg
7357ed6f5d66Smrg      -inst-prefix-dir)
7358ed6f5d66Smrg	prev=inst_prefix
7359ed6f5d66Smrg	continue
7360ed6f5d66Smrg	;;
7361ed6f5d66Smrg
7362ed6f5d66Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
7363ed6f5d66Smrg      # so, if we see these flags be careful not to treat them like -L
7364ed6f5d66Smrg      -L[A-Z][A-Z]*:*)
7365ed6f5d66Smrg	case $with_gcc/$host in
7366ed6f5d66Smrg	no/*-*-irix* | /*-*-irix*)
7367ed6f5d66Smrg	  func_append compile_command " $arg"
7368ed6f5d66Smrg	  func_append finalize_command " $arg"
7369ed6f5d66Smrg	  ;;
7370ed6f5d66Smrg	esac
7371ed6f5d66Smrg	continue
7372ed6f5d66Smrg	;;
7373ed6f5d66Smrg
7374ed6f5d66Smrg      -L*)
7375ed6f5d66Smrg	func_stripname "-L" '' "$arg"
7376ed6f5d66Smrg	if test -z "$func_stripname_result"; then
7377ed6f5d66Smrg	  if test "$#" -gt 0; then
7378fbc03982Smrg	    func_fatal_error "require no space between '-L' and '$1'"
7379ed6f5d66Smrg	  else
7380fbc03982Smrg	    func_fatal_error "need path for '-L' option"
7381ed6f5d66Smrg	  fi
7382ed6f5d66Smrg	fi
7383ed6f5d66Smrg	func_resolve_sysroot "$func_stripname_result"
7384ed6f5d66Smrg	dir=$func_resolve_sysroot_result
7385ed6f5d66Smrg	# We need an absolute path.
7386ed6f5d66Smrg	case $dir in
7387ed6f5d66Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
7388ed6f5d66Smrg	*)
7389ed6f5d66Smrg	  absdir=`cd "$dir" && pwd`
7390ed6f5d66Smrg	  test -z "$absdir" && \
7391fbc03982Smrg	    func_fatal_error "cannot determine absolute directory name of '$dir'"
7392fbc03982Smrg	  dir=$absdir
7393ed6f5d66Smrg	  ;;
7394ed6f5d66Smrg	esac
7395ed6f5d66Smrg	case "$deplibs " in
7396ed6f5d66Smrg	*" -L$dir "* | *" $arg "*)
7397ed6f5d66Smrg	  # Will only happen for absolute or sysroot arguments
7398ed6f5d66Smrg	  ;;
7399ed6f5d66Smrg	*)
7400ed6f5d66Smrg	  # Preserve sysroot, but never include relative directories
7401ed6f5d66Smrg	  case $dir in
7402ed6f5d66Smrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
7403ed6f5d66Smrg	    *) func_append deplibs " -L$dir" ;;
7404ed6f5d66Smrg	  esac
7405ed6f5d66Smrg	  func_append lib_search_path " $dir"
7406ed6f5d66Smrg	  ;;
7407ed6f5d66Smrg	esac
7408ed6f5d66Smrg	case $host in
7409a3680546Smrg	*-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*)
7410ed6f5d66Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
7411ed6f5d66Smrg	  case :$dllsearchpath: in
7412ed6f5d66Smrg	  *":$dir:"*) ;;
7413ed6f5d66Smrg	  ::) dllsearchpath=$dir;;
7414ed6f5d66Smrg	  *) func_append dllsearchpath ":$dir";;
7415ed6f5d66Smrg	  esac
7416ed6f5d66Smrg	  case :$dllsearchpath: in
7417ed6f5d66Smrg	  *":$testbindir:"*) ;;
7418ed6f5d66Smrg	  ::) dllsearchpath=$testbindir;;
7419ed6f5d66Smrg	  *) func_append dllsearchpath ":$testbindir";;
7420ed6f5d66Smrg	  esac
7421ed6f5d66Smrg	  ;;
7422ed6f5d66Smrg	esac
7423ed6f5d66Smrg	continue
7424ed6f5d66Smrg	;;
7425ed6f5d66Smrg
7426ed6f5d66Smrg      -l*)
7427fbc03982Smrg	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
7428ed6f5d66Smrg	  case $host in
7429a3680546Smrg	  *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
7430ed6f5d66Smrg	    # These systems don't actually have a C or math library (as such)
7431ed6f5d66Smrg	    continue
7432ed6f5d66Smrg	    ;;
7433ed6f5d66Smrg	  *-*-os2*)
7434ed6f5d66Smrg	    # These systems don't actually have a C library (as such)
7435fbc03982Smrg	    test X-lc = "X$arg" && continue
7436ed6f5d66Smrg	    ;;
7437a3680546Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
7438ed6f5d66Smrg	    # Do not include libc due to us having libc/libc_r.
7439fbc03982Smrg	    test X-lc = "X$arg" && continue
7440ed6f5d66Smrg	    ;;
7441ed6f5d66Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
7442ed6f5d66Smrg	    # Rhapsody C and math libraries are in the System framework
7443ed6f5d66Smrg	    func_append deplibs " System.ltframework"
7444ed6f5d66Smrg	    continue
7445ed6f5d66Smrg	    ;;
7446ed6f5d66Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7447ed6f5d66Smrg	    # Causes problems with __ctype
7448fbc03982Smrg	    test X-lc = "X$arg" && continue
7449ed6f5d66Smrg	    ;;
7450ed6f5d66Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7451ed6f5d66Smrg	    # Compiler inserts libc in the correct place for threads to work
7452fbc03982Smrg	    test X-lc = "X$arg" && continue
7453ed6f5d66Smrg	    ;;
7454ed6f5d66Smrg	  esac
7455fbc03982Smrg	elif test X-lc_r = "X$arg"; then
7456ed6f5d66Smrg	 case $host in
7457a3680546Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
7458ed6f5d66Smrg	   # Do not include libc_r directly, use -pthread flag.
7459ed6f5d66Smrg	   continue
7460ed6f5d66Smrg	   ;;
7461ed6f5d66Smrg	 esac
7462ed6f5d66Smrg	fi
7463ed6f5d66Smrg	func_append deplibs " $arg"
7464ed6f5d66Smrg	continue
7465ed6f5d66Smrg	;;
7466ed6f5d66Smrg
7467fbc03982Smrg      -mllvm)
7468fbc03982Smrg	prev=mllvm
7469fbc03982Smrg	continue
7470fbc03982Smrg	;;
7471fbc03982Smrg
7472ed6f5d66Smrg      -module)
7473ed6f5d66Smrg	module=yes
7474ed6f5d66Smrg	continue
7475ed6f5d66Smrg	;;
7476ed6f5d66Smrg
7477ed6f5d66Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
7478ed6f5d66Smrg      # classes, name mangling, and exception handling.
7479ed6f5d66Smrg      # Darwin uses the -arch flag to determine output architecture.
7480a3680546Smrg      # -q <option> for IBM XL C/C++ compiler.
7481a3680546Smrg      -model|-arch|-isysroot|--sysroot|-q)
7482ed6f5d66Smrg	func_append compiler_flags " $arg"
7483ed6f5d66Smrg	func_append compile_command " $arg"
7484ed6f5d66Smrg	func_append finalize_command " $arg"
7485ed6f5d66Smrg	prev=xcompiler
7486ed6f5d66Smrg	continue
7487ed6f5d66Smrg	;;
74883d05230fSmrg     # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199.
74893d05230fSmrg     -pthread)
74903d05230fSmrg	case $host in
74913d05230fSmrg	  *solaris2*) ;;
74923d05230fSmrg	  *)
74933d05230fSmrg	    case "$new_inherited_linker_flags " in
74943d05230fSmrg	        *" $arg "*) ;;
74953d05230fSmrg	        * ) func_append new_inherited_linker_flags " $arg" ;;
74963d05230fSmrg	    esac
74973d05230fSmrg	  ;;
74983d05230fSmrg	esac
74993d05230fSmrg	continue
75003d05230fSmrg	;;
75013d05230fSmrg      -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \
7502a3680546Smrg      |-threads|-fopenmp|-fopenmp=*|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7503ed6f5d66Smrg	func_append compiler_flags " $arg"
7504ed6f5d66Smrg	func_append compile_command " $arg"
7505ed6f5d66Smrg	func_append finalize_command " $arg"
7506ed6f5d66Smrg	case "$new_inherited_linker_flags " in
7507ed6f5d66Smrg	    *" $arg "*) ;;
7508ed6f5d66Smrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
7509ed6f5d66Smrg	esac
7510ed6f5d66Smrg	continue
7511ed6f5d66Smrg	;;
7512ed6f5d66Smrg
7513ed6f5d66Smrg      -multi_module)
7514fbc03982Smrg	single_module=$wl-multi_module
7515ed6f5d66Smrg	continue
7516ed6f5d66Smrg	;;
7517ed6f5d66Smrg
7518ed6f5d66Smrg      -no-fast-install)
7519ed6f5d66Smrg	fast_install=no
7520ed6f5d66Smrg	continue
7521ed6f5d66Smrg	;;
7522ed6f5d66Smrg
7523ed6f5d66Smrg      -no-install)
7524ed6f5d66Smrg	case $host in
7525a3680546Smrg	*-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
7526ed6f5d66Smrg	  # The PATH hackery in wrapper scripts is required on Windows
7527ed6f5d66Smrg	  # and Darwin in order for the loader to find any dlls it needs.
7528fbc03982Smrg	  func_warning "'-no-install' is ignored for $host"
7529fbc03982Smrg	  func_warning "assuming '-no-fast-install' instead"
7530ed6f5d66Smrg	  fast_install=no
7531ed6f5d66Smrg	  ;;
7532ed6f5d66Smrg	*) no_install=yes ;;
7533ed6f5d66Smrg	esac
7534ed6f5d66Smrg	continue
7535ed6f5d66Smrg	;;
7536ed6f5d66Smrg
7537ed6f5d66Smrg      -no-undefined)
7538ed6f5d66Smrg	allow_undefined=no
7539ed6f5d66Smrg	continue
7540ed6f5d66Smrg	;;
7541ed6f5d66Smrg
7542ed6f5d66Smrg      -objectlist)
7543ed6f5d66Smrg	prev=objectlist
7544ed6f5d66Smrg	continue
7545ed6f5d66Smrg	;;
7546ed6f5d66Smrg
7547fbc03982Smrg      -os2dllname)
7548fbc03982Smrg	prev=os2dllname
7549fbc03982Smrg	continue
7550fbc03982Smrg	;;
7551fbc03982Smrg
7552ed6f5d66Smrg      -o) prev=output ;;
7553ed6f5d66Smrg
7554ed6f5d66Smrg      -precious-files-regex)
7555ed6f5d66Smrg	prev=precious_regex
7556ed6f5d66Smrg	continue
7557ed6f5d66Smrg	;;
7558ed6f5d66Smrg
7559ed6f5d66Smrg      -release)
7560ed6f5d66Smrg	prev=release
7561ed6f5d66Smrg	continue
7562ed6f5d66Smrg	;;
7563ed6f5d66Smrg
7564ed6f5d66Smrg      -rpath)
7565ed6f5d66Smrg	prev=rpath
7566ed6f5d66Smrg	continue
7567ed6f5d66Smrg	;;
7568ed6f5d66Smrg
7569ed6f5d66Smrg      -R)
7570ed6f5d66Smrg	prev=xrpath
7571ed6f5d66Smrg	continue
7572ed6f5d66Smrg	;;
7573ed6f5d66Smrg
7574ed6f5d66Smrg      -R*)
7575ed6f5d66Smrg	func_stripname '-R' '' "$arg"
7576ed6f5d66Smrg	dir=$func_stripname_result
7577ed6f5d66Smrg	# We need an absolute path.
7578ed6f5d66Smrg	case $dir in
7579ed6f5d66Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
7580ed6f5d66Smrg	=*)
7581ed6f5d66Smrg	  func_stripname '=' '' "$dir"
7582ed6f5d66Smrg	  dir=$lt_sysroot$func_stripname_result
7583ed6f5d66Smrg	  ;;
7584ed6f5d66Smrg	*)
7585a3680546Smrg	  func_fatal_error "argument ($arg) to '-R' is not an absolute path: $dir"
7586ed6f5d66Smrg	  ;;
7587ed6f5d66Smrg	esac
7588ed6f5d66Smrg	case "$xrpath " in
7589ed6f5d66Smrg	*" $dir "*) ;;
7590ed6f5d66Smrg	*) func_append xrpath " $dir" ;;
7591ed6f5d66Smrg	esac
7592ed6f5d66Smrg	continue
7593ed6f5d66Smrg	;;
7594ed6f5d66Smrg
7595ed6f5d66Smrg      -shared)
7596ed6f5d66Smrg	# The effects of -shared are defined in a previous loop.
7597ed6f5d66Smrg	continue
7598ed6f5d66Smrg	;;
7599ed6f5d66Smrg
7600ed6f5d66Smrg      -shrext)
7601ed6f5d66Smrg	prev=shrext
7602ed6f5d66Smrg	continue
7603ed6f5d66Smrg	;;
7604ed6f5d66Smrg
7605ed6f5d66Smrg      -static | -static-libtool-libs)
7606ed6f5d66Smrg	# The effects of -static are defined in a previous loop.
7607ed6f5d66Smrg	# We used to do the same as -all-static on platforms that
7608ed6f5d66Smrg	# didn't have a PIC flag, but the assumption that the effects
7609ed6f5d66Smrg	# would be equivalent was wrong.  It would break on at least
7610ed6f5d66Smrg	# Digital Unix and AIX.
7611ed6f5d66Smrg	continue
7612ed6f5d66Smrg	;;
7613ed6f5d66Smrg
7614ed6f5d66Smrg      -thread-safe)
7615ed6f5d66Smrg	thread_safe=yes
7616ed6f5d66Smrg	continue
7617ed6f5d66Smrg	;;
7618ed6f5d66Smrg
7619ed6f5d66Smrg      -version-info)
7620ed6f5d66Smrg	prev=vinfo
7621ed6f5d66Smrg	continue
7622ed6f5d66Smrg	;;
7623ed6f5d66Smrg
7624ed6f5d66Smrg      -version-number)
7625ed6f5d66Smrg	prev=vinfo
7626ed6f5d66Smrg	vinfo_number=yes
7627ed6f5d66Smrg	continue
7628ed6f5d66Smrg	;;
7629ed6f5d66Smrg
7630ed6f5d66Smrg      -weak)
7631ed6f5d66Smrg        prev=weak
7632ed6f5d66Smrg	continue
7633ed6f5d66Smrg	;;
7634ed6f5d66Smrg
7635ed6f5d66Smrg      -Wc,*)
7636ed6f5d66Smrg	func_stripname '-Wc,' '' "$arg"
7637ed6f5d66Smrg	args=$func_stripname_result
7638ed6f5d66Smrg	arg=
7639fbc03982Smrg	save_ifs=$IFS; IFS=,
7640ed6f5d66Smrg	for flag in $args; do
7641fbc03982Smrg	  IFS=$save_ifs
76423d05230fSmrg          func_quote_arg pretty "$flag"
76433d05230fSmrg	  func_append arg " $func_quote_arg_result"
76443d05230fSmrg	  func_append compiler_flags " $func_quote_arg_result"
7645ed6f5d66Smrg	done
7646fbc03982Smrg	IFS=$save_ifs
7647ed6f5d66Smrg	func_stripname ' ' '' "$arg"
7648ed6f5d66Smrg	arg=$func_stripname_result
7649ed6f5d66Smrg	;;
7650ed6f5d66Smrg
7651ed6f5d66Smrg      -Wl,*)
7652ed6f5d66Smrg	func_stripname '-Wl,' '' "$arg"
7653ed6f5d66Smrg	args=$func_stripname_result
7654ed6f5d66Smrg	arg=
7655fbc03982Smrg	save_ifs=$IFS; IFS=,
7656ed6f5d66Smrg	for flag in $args; do
7657fbc03982Smrg	  IFS=$save_ifs
76583d05230fSmrg          func_quote_arg pretty "$flag"
76593d05230fSmrg	  func_append arg " $wl$func_quote_arg_result"
76603d05230fSmrg	  func_append compiler_flags " $wl$func_quote_arg_result"
76613d05230fSmrg	  func_append linker_flags " $func_quote_arg_result"
7662ed6f5d66Smrg	done
7663fbc03982Smrg	IFS=$save_ifs
7664ed6f5d66Smrg	func_stripname ' ' '' "$arg"
7665ed6f5d66Smrg	arg=$func_stripname_result
7666ed6f5d66Smrg	;;
7667ed6f5d66Smrg
76683d05230fSmrg      -Xassembler)
76693d05230fSmrg        prev=xassembler
76703d05230fSmrg        continue
76713d05230fSmrg        ;;
76723d05230fSmrg
7673ed6f5d66Smrg      -Xcompiler)
7674ed6f5d66Smrg	prev=xcompiler
7675ed6f5d66Smrg	continue
7676ed6f5d66Smrg	;;
7677ed6f5d66Smrg
7678ed6f5d66Smrg      -Xlinker)
7679ed6f5d66Smrg	prev=xlinker
7680ed6f5d66Smrg	continue
7681ed6f5d66Smrg	;;
7682ed6f5d66Smrg
7683ed6f5d66Smrg      -XCClinker)
7684ed6f5d66Smrg	prev=xcclinker
7685ed6f5d66Smrg	continue
7686ed6f5d66Smrg	;;
7687ed6f5d66Smrg
7688ed6f5d66Smrg      # -msg_* for osf cc
7689ed6f5d66Smrg      -msg_*)
76903d05230fSmrg	func_quote_arg pretty "$arg"
76913d05230fSmrg	arg=$func_quote_arg_result
7692ed6f5d66Smrg	;;
7693ed6f5d66Smrg
7694ed6f5d66Smrg      # Flags to be passed through unchanged, with rationale:
7695ed6f5d66Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
7696ed6f5d66Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
7697ed6f5d66Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
7698ed6f5d66Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
7699ed6f5d66Smrg      # -q*                  compiler args for the IBM compiler
7700ed6f5d66Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
7701ed6f5d66Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
7702ed6f5d66Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
7703fbc03982Smrg      # -fstack-protector*   stack protector flags for GCC
7704ed6f5d66Smrg      # @file                GCC response files
7705ed6f5d66Smrg      # -tp=*                Portland pgcc target processor selection
7706ed6f5d66Smrg      # --sysroot=*          for sysroot support
7707fbc03982Smrg      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
7708fbc03982Smrg      # -specs=*             GCC specs files
7709fbc03982Smrg      # -stdlib=*            select c++ std lib with clang
7710a3680546Smrg      # -fdiagnostics-color* simply affects output
7711a3680546Smrg      # -frecord-gcc-switches used to verify flags were respected
7712fbc03982Smrg      # -fsanitize=*         Clang/GCC memory and address sanitizer
7713a3680546Smrg      # -fno-sanitize*       Clang/GCC memory and address sanitizer
7714a3680546Smrg      # -shared-libsan       Link with shared sanitizer runtimes (Clang)
7715a3680546Smrg      # -static-libsan       Link with static sanitizer runtimes (Clang)
7716a3680546Smrg      # -no-canonical-prefixes Do not expand any symbolic links
7717fbc03982Smrg      # -fuse-ld=*           Linker select flags for GCC
7718a3680546Smrg      # -static-*            direct GCC to link specific libraries statically
7719a3680546Smrg      # -fcilkplus           Cilk Plus language extension features for C/C++
7720a3680546Smrg      # -rtlib=*             select c runtime lib with clang
7721a3680546Smrg      # --unwindlib=*        select unwinder library with clang
7722a3680546Smrg      # -f{file|debug|macro|profile}-prefix-map=* needed for lto linking
77233d05230fSmrg      # -Wa,*                Pass flags directly to the assembler
7724a3680546Smrg      # -Werror, -Werror=*   Report (specified) warnings as errors
7725ed6f5d66Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
7726ed6f5d66Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
7727a3680546Smrg      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-no-canonical-prefixes| \
7728a3680546Smrg      -stdlib=*|-rtlib=*|--unwindlib=*| \
7729a3680546Smrg      -specs=*|-fsanitize=*|-fno-sanitize*|-shared-libsan|-static-libsan| \
7730a3680546Smrg      -ffile-prefix-map=*|-fdebug-prefix-map=*|-fmacro-prefix-map=*|-fprofile-prefix-map=*| \
7731a3680546Smrg      -fdiagnostics-color*|-frecord-gcc-switches| \
7732a3680546Smrg      -fuse-ld=*|-static-*|-fcilkplus|-Wa,*|-Werror|-Werror=*)
77333d05230fSmrg        func_quote_arg pretty "$arg"
77343d05230fSmrg	arg=$func_quote_arg_result
7735ed6f5d66Smrg        func_append compile_command " $arg"
7736ed6f5d66Smrg        func_append finalize_command " $arg"
7737ed6f5d66Smrg        func_append compiler_flags " $arg"
7738ed6f5d66Smrg        continue
7739ed6f5d66Smrg        ;;
7740ed6f5d66Smrg
7741fbc03982Smrg      -Z*)
7742fbc03982Smrg        if test os2 = "`expr $host : '.*\(os2\)'`"; then
7743fbc03982Smrg          # OS/2 uses -Zxxx to specify OS/2-specific options
7744fbc03982Smrg	  compiler_flags="$compiler_flags $arg"
7745fbc03982Smrg	  func_append compile_command " $arg"
7746fbc03982Smrg	  func_append finalize_command " $arg"
7747fbc03982Smrg	  case $arg in
7748fbc03982Smrg	  -Zlinker | -Zstack)
7749fbc03982Smrg	    prev=xcompiler
7750fbc03982Smrg	    ;;
7751fbc03982Smrg	  esac
7752fbc03982Smrg	  continue
7753fbc03982Smrg        else
7754fbc03982Smrg	  # Otherwise treat like 'Some other compiler flag' below
77553d05230fSmrg	  func_quote_arg pretty "$arg"
77563d05230fSmrg	  arg=$func_quote_arg_result
7757fbc03982Smrg        fi
7758fbc03982Smrg	;;
7759fbc03982Smrg
7760ed6f5d66Smrg      # Some other compiler flag.
7761ed6f5d66Smrg      -* | +*)
77623d05230fSmrg        func_quote_arg pretty "$arg"
77633d05230fSmrg	arg=$func_quote_arg_result
7764ed6f5d66Smrg	;;
7765ed6f5d66Smrg
7766ed6f5d66Smrg      *.$objext)
7767ed6f5d66Smrg	# A standard object.
7768ed6f5d66Smrg	func_append objs " $arg"
7769ed6f5d66Smrg	;;
7770ed6f5d66Smrg
7771ed6f5d66Smrg      *.lo)
7772ed6f5d66Smrg	# A libtool-controlled object.
7773ed6f5d66Smrg
7774ed6f5d66Smrg	# Check to see that this really is a libtool object.
7775ed6f5d66Smrg	if func_lalib_unsafe_p "$arg"; then
7776ed6f5d66Smrg	  pic_object=
7777ed6f5d66Smrg	  non_pic_object=
7778ed6f5d66Smrg
7779ed6f5d66Smrg	  # Read the .lo file
7780ed6f5d66Smrg	  func_source "$arg"
7781ed6f5d66Smrg
7782ed6f5d66Smrg	  if test -z "$pic_object" ||
7783ed6f5d66Smrg	     test -z "$non_pic_object" ||
7784fbc03982Smrg	     test none = "$pic_object" &&
7785fbc03982Smrg	     test none = "$non_pic_object"; then
7786fbc03982Smrg	    func_fatal_error "cannot find name of object for '$arg'"
7787ed6f5d66Smrg	  fi
7788ed6f5d66Smrg
7789ed6f5d66Smrg	  # Extract subdirectory from the argument.
7790ed6f5d66Smrg	  func_dirname "$arg" "/" ""
7791fbc03982Smrg	  xdir=$func_dirname_result
7792ed6f5d66Smrg
7793fbc03982Smrg	  test none = "$pic_object" || {
7794ed6f5d66Smrg	    # Prepend the subdirectory the object is found in.
7795fbc03982Smrg	    pic_object=$xdir$pic_object
7796ed6f5d66Smrg
7797fbc03982Smrg	    if test dlfiles = "$prev"; then
7798fbc03982Smrg	      if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
7799ed6f5d66Smrg		func_append dlfiles " $pic_object"
7800ed6f5d66Smrg		prev=
7801ed6f5d66Smrg		continue
7802ed6f5d66Smrg	      else
7803ed6f5d66Smrg		# If libtool objects are unsupported, then we need to preload.
7804ed6f5d66Smrg		prev=dlprefiles
7805ed6f5d66Smrg	      fi
7806ed6f5d66Smrg	    fi
7807ed6f5d66Smrg
7808ed6f5d66Smrg	    # CHECK ME:  I think I busted this.  -Ossama
7809fbc03982Smrg	    if test dlprefiles = "$prev"; then
7810ed6f5d66Smrg	      # Preload the old-style object.
7811ed6f5d66Smrg	      func_append dlprefiles " $pic_object"
7812ed6f5d66Smrg	      prev=
7813ed6f5d66Smrg	    fi
7814ed6f5d66Smrg
7815ed6f5d66Smrg	    # A PIC object.
7816ed6f5d66Smrg	    func_append libobjs " $pic_object"
7817fbc03982Smrg	    arg=$pic_object
7818fbc03982Smrg	  }
7819ed6f5d66Smrg
7820ed6f5d66Smrg	  # Non-PIC object.
7821fbc03982Smrg	  if test none != "$non_pic_object"; then
7822ed6f5d66Smrg	    # Prepend the subdirectory the object is found in.
7823fbc03982Smrg	    non_pic_object=$xdir$non_pic_object
7824ed6f5d66Smrg
7825ed6f5d66Smrg	    # A standard non-PIC object
7826ed6f5d66Smrg	    func_append non_pic_objects " $non_pic_object"
7827fbc03982Smrg	    if test -z "$pic_object" || test none = "$pic_object"; then
7828fbc03982Smrg	      arg=$non_pic_object
7829ed6f5d66Smrg	    fi
7830ed6f5d66Smrg	  else
7831ed6f5d66Smrg	    # If the PIC object exists, use it instead.
7832ed6f5d66Smrg	    # $xdir was prepended to $pic_object above.
7833fbc03982Smrg	    non_pic_object=$pic_object
7834ed6f5d66Smrg	    func_append non_pic_objects " $non_pic_object"
7835ed6f5d66Smrg	  fi
7836ed6f5d66Smrg	else
7837ed6f5d66Smrg	  # Only an error if not doing a dry-run.
7838ed6f5d66Smrg	  if $opt_dry_run; then
7839ed6f5d66Smrg	    # Extract subdirectory from the argument.
7840ed6f5d66Smrg	    func_dirname "$arg" "/" ""
7841fbc03982Smrg	    xdir=$func_dirname_result
7842ed6f5d66Smrg
7843ed6f5d66Smrg	    func_lo2o "$arg"
7844ed6f5d66Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
7845ed6f5d66Smrg	    non_pic_object=$xdir$func_lo2o_result
7846ed6f5d66Smrg	    func_append libobjs " $pic_object"
7847ed6f5d66Smrg	    func_append non_pic_objects " $non_pic_object"
7848ed6f5d66Smrg	  else
7849fbc03982Smrg	    func_fatal_error "'$arg' is not a valid libtool object"
7850ed6f5d66Smrg	  fi
7851ed6f5d66Smrg	fi
7852ed6f5d66Smrg	;;
7853ed6f5d66Smrg
7854ed6f5d66Smrg      *.$libext)
7855ed6f5d66Smrg	# An archive.
7856ed6f5d66Smrg	func_append deplibs " $arg"
7857ed6f5d66Smrg	func_append old_deplibs " $arg"
7858ed6f5d66Smrg	continue
7859ed6f5d66Smrg	;;
7860ed6f5d66Smrg
7861ed6f5d66Smrg      *.la)
7862ed6f5d66Smrg	# A libtool-controlled library.
7863ed6f5d66Smrg
7864ed6f5d66Smrg	func_resolve_sysroot "$arg"
7865fbc03982Smrg	if test dlfiles = "$prev"; then
7866ed6f5d66Smrg	  # This library was specified with -dlopen.
7867ed6f5d66Smrg	  func_append dlfiles " $func_resolve_sysroot_result"
7868ed6f5d66Smrg	  prev=
7869fbc03982Smrg	elif test dlprefiles = "$prev"; then
7870ed6f5d66Smrg	  # The library was specified with -dlpreopen.
7871ed6f5d66Smrg	  func_append dlprefiles " $func_resolve_sysroot_result"
7872ed6f5d66Smrg	  prev=
7873ed6f5d66Smrg	else
7874ed6f5d66Smrg	  func_append deplibs " $func_resolve_sysroot_result"
7875ed6f5d66Smrg	fi
7876ed6f5d66Smrg	continue
7877ed6f5d66Smrg	;;
7878ed6f5d66Smrg
7879ed6f5d66Smrg      # Some other compiler argument.
7880ed6f5d66Smrg      *)
7881ed6f5d66Smrg	# Unknown arguments in both finalize_command and compile_command need
7882ed6f5d66Smrg	# to be aesthetically quoted because they are evaled later.
78833d05230fSmrg	func_quote_arg pretty "$arg"
78843d05230fSmrg	arg=$func_quote_arg_result
7885ed6f5d66Smrg	;;
7886ed6f5d66Smrg      esac # arg
7887ed6f5d66Smrg
7888ed6f5d66Smrg      # Now actually substitute the argument into the commands.
7889ed6f5d66Smrg      if test -n "$arg"; then
7890a3680546Smrg	if test -n "$rpath_arg"; then
7891a3680546Smrg          func_append finalize_rpath " ${arg##*,}"
7892a3680546Smrg	  unset rpath_arg
7893a3680546Smrg	else
7894a3680546Smrg	  case $arg in
7895a3680546Smrg          -Wl,-rpath,*)
7896a3680546Smrg	    func_append finalize_rpath " ${arg##*,}";;
7897a3680546Smrg          -Wl,-rpath)
7898a3680546Smrg	    rpath_arg=1;;
7899a3680546Smrg          *)
7900a3680546Smrg            func_append compile_command " $arg"
7901a3680546Smrg	    func_append finalize_command " $arg"
7902a3680546Smrg	  esac
7903a3680546Smrg        fi
7904ed6f5d66Smrg      fi
7905ed6f5d66Smrg    done # argument parsing loop
7906ed6f5d66Smrg
7907ed6f5d66Smrg    test -n "$prev" && \
7908fbc03982Smrg      func_fatal_help "the '$prevarg' option requires an argument"
7909ed6f5d66Smrg
7910fbc03982Smrg    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
7911ed6f5d66Smrg      eval arg=\"$export_dynamic_flag_spec\"
7912ed6f5d66Smrg      func_append compile_command " $arg"
7913ed6f5d66Smrg      func_append finalize_command " $arg"
7914ed6f5d66Smrg    fi
7915ed6f5d66Smrg
7916ed6f5d66Smrg    oldlibs=
7917ed6f5d66Smrg    # calculate the name of the file, without its directory
7918ed6f5d66Smrg    func_basename "$output"
7919fbc03982Smrg    outputname=$func_basename_result
7920fbc03982Smrg    libobjs_save=$libobjs
7921ed6f5d66Smrg
7922ed6f5d66Smrg    if test -n "$shlibpath_var"; then
7923ed6f5d66Smrg      # get the directories listed in $shlibpath_var
7924fbc03982Smrg      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
7925ed6f5d66Smrg    else
7926ed6f5d66Smrg      shlib_search_path=
7927ed6f5d66Smrg    fi
7928ed6f5d66Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
7929ed6f5d66Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
7930ed6f5d66Smrg
7931fbc03982Smrg    # Definition is injected by LT_CONFIG during libtool generation.
7932fbc03982Smrg    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
7933fbc03982Smrg
7934ed6f5d66Smrg    func_dirname "$output" "/" ""
7935fbc03982Smrg    output_objdir=$func_dirname_result$objdir
7936ed6f5d66Smrg    func_to_tool_file "$output_objdir/"
7937ed6f5d66Smrg    tool_output_objdir=$func_to_tool_file_result
7938ed6f5d66Smrg    # Create the object directory.
7939ed6f5d66Smrg    func_mkdir_p "$output_objdir"
7940ed6f5d66Smrg
7941ed6f5d66Smrg    # Determine the type of output
7942ed6f5d66Smrg    case $output in
7943ed6f5d66Smrg    "")
7944ed6f5d66Smrg      func_fatal_help "you must specify an output file"
7945ed6f5d66Smrg      ;;
7946ed6f5d66Smrg    *.$libext) linkmode=oldlib ;;
7947ed6f5d66Smrg    *.lo | *.$objext) linkmode=obj ;;
7948ed6f5d66Smrg    *.la) linkmode=lib ;;
7949ed6f5d66Smrg    *) linkmode=prog ;; # Anything else should be a program.
7950ed6f5d66Smrg    esac
7951ed6f5d66Smrg
7952ed6f5d66Smrg    specialdeplibs=
7953ed6f5d66Smrg
7954ed6f5d66Smrg    libs=
7955ed6f5d66Smrg    # Find all interdependent deplibs by searching for libraries
7956ed6f5d66Smrg    # that are linked more than once (e.g. -la -lb -la)
7957ed6f5d66Smrg    for deplib in $deplibs; do
7958fbc03982Smrg      if $opt_preserve_dup_deps; then
7959ed6f5d66Smrg	case "$libs " in
7960ed6f5d66Smrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
7961ed6f5d66Smrg	esac
7962ed6f5d66Smrg      fi
7963ed6f5d66Smrg      func_append libs " $deplib"
7964ed6f5d66Smrg    done
7965ed6f5d66Smrg
7966fbc03982Smrg    if test lib = "$linkmode"; then
7967ed6f5d66Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
7968ed6f5d66Smrg
7969ed6f5d66Smrg      # Compute libraries that are listed more than once in $predeps
7970ed6f5d66Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
7971ed6f5d66Smrg      # not to be eliminated).
7972ed6f5d66Smrg      pre_post_deps=
7973ed6f5d66Smrg      if $opt_duplicate_compiler_generated_deps; then
7974ed6f5d66Smrg	for pre_post_dep in $predeps $postdeps; do
7975ed6f5d66Smrg	  case "$pre_post_deps " in
7976ed6f5d66Smrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
7977ed6f5d66Smrg	  esac
7978ed6f5d66Smrg	  func_append pre_post_deps " $pre_post_dep"
7979ed6f5d66Smrg	done
7980ed6f5d66Smrg      fi
7981ed6f5d66Smrg      pre_post_deps=
7982ed6f5d66Smrg    fi
7983ed6f5d66Smrg
7984ed6f5d66Smrg    deplibs=
7985ed6f5d66Smrg    newdependency_libs=
7986ed6f5d66Smrg    newlib_search_path=
7987ed6f5d66Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
7988ed6f5d66Smrg    notinst_deplibs= # not-installed libtool libraries
7989ed6f5d66Smrg    notinst_path= # paths that contain not-installed libtool libraries
7990ed6f5d66Smrg
7991ed6f5d66Smrg    case $linkmode in
7992ed6f5d66Smrg    lib)
7993ed6f5d66Smrg	passes="conv dlpreopen link"
7994ed6f5d66Smrg	for file in $dlfiles $dlprefiles; do
7995ed6f5d66Smrg	  case $file in
7996ed6f5d66Smrg	  *.la) ;;
7997ed6f5d66Smrg	  *)
7998fbc03982Smrg	    func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
7999ed6f5d66Smrg	    ;;
8000ed6f5d66Smrg	  esac
8001ed6f5d66Smrg	done
8002ed6f5d66Smrg	;;
8003ed6f5d66Smrg    prog)
8004ed6f5d66Smrg	compile_deplibs=
8005ed6f5d66Smrg	finalize_deplibs=
8006fbc03982Smrg	alldeplibs=false
8007ed6f5d66Smrg	newdlfiles=
8008ed6f5d66Smrg	newdlprefiles=
8009ed6f5d66Smrg	passes="conv scan dlopen dlpreopen link"
8010ed6f5d66Smrg	;;
8011ed6f5d66Smrg    *)  passes="conv"
8012ed6f5d66Smrg	;;
8013ed6f5d66Smrg    esac
8014ed6f5d66Smrg
8015ed6f5d66Smrg    for pass in $passes; do
8016ed6f5d66Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
8017ed6f5d66Smrg      # so that -L comes before libs that need it for instance...
8018fbc03982Smrg      if test lib,link = "$linkmode,$pass"; then
8019ed6f5d66Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
8020ed6f5d66Smrg	##        order, and fix it there properly
8021ed6f5d66Smrg        tmp_deplibs=
8022ed6f5d66Smrg	for deplib in $deplibs; do
8023ed6f5d66Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
8024ed6f5d66Smrg	done
8025fbc03982Smrg	deplibs=$tmp_deplibs
8026ed6f5d66Smrg      fi
8027ed6f5d66Smrg
8028fbc03982Smrg      if test lib,link = "$linkmode,$pass" ||
8029fbc03982Smrg	 test prog,scan = "$linkmode,$pass"; then
8030fbc03982Smrg	libs=$deplibs
8031ed6f5d66Smrg	deplibs=
8032ed6f5d66Smrg      fi
8033fbc03982Smrg      if test prog = "$linkmode"; then
8034ed6f5d66Smrg	case $pass in
8035fbc03982Smrg	dlopen) libs=$dlfiles ;;
8036fbc03982Smrg	dlpreopen) libs=$dlprefiles ;;
8037fbc03982Smrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
8038ed6f5d66Smrg	esac
8039ed6f5d66Smrg      fi
8040fbc03982Smrg      if test lib,dlpreopen = "$linkmode,$pass"; then
8041ed6f5d66Smrg	# Collect and forward deplibs of preopened libtool libs
8042ed6f5d66Smrg	for lib in $dlprefiles; do
8043ed6f5d66Smrg	  # Ignore non-libtool-libs
8044ed6f5d66Smrg	  dependency_libs=
8045ed6f5d66Smrg	  func_resolve_sysroot "$lib"
8046ed6f5d66Smrg	  case $lib in
8047ed6f5d66Smrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
8048ed6f5d66Smrg	  esac
8049ed6f5d66Smrg
8050ed6f5d66Smrg	  # Collect preopened libtool deplibs, except any this library
8051ed6f5d66Smrg	  # has declared as weak libs
8052ed6f5d66Smrg	  for deplib in $dependency_libs; do
8053ed6f5d66Smrg	    func_basename "$deplib"
8054ed6f5d66Smrg            deplib_base=$func_basename_result
8055ed6f5d66Smrg	    case " $weak_libs " in
8056ed6f5d66Smrg	    *" $deplib_base "*) ;;
8057ed6f5d66Smrg	    *) func_append deplibs " $deplib" ;;
8058ed6f5d66Smrg	    esac
8059ed6f5d66Smrg	  done
8060ed6f5d66Smrg	done
8061fbc03982Smrg	libs=$dlprefiles
8062ed6f5d66Smrg      fi
8063fbc03982Smrg      if test dlopen = "$pass"; then
8064ed6f5d66Smrg	# Collect dlpreopened libraries
8065fbc03982Smrg	save_deplibs=$deplibs
8066ed6f5d66Smrg	deplibs=
8067ed6f5d66Smrg      fi
8068ed6f5d66Smrg
8069ed6f5d66Smrg      for deplib in $libs; do
8070ed6f5d66Smrg	lib=
8071fbc03982Smrg	found=false
8072ed6f5d66Smrg	case $deplib in
8073ed6f5d66Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
8074a3680546Smrg        |-threads|-fopenmp|-fopenmp=*|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
8075fbc03982Smrg	  if test prog,link = "$linkmode,$pass"; then
8076ed6f5d66Smrg	    compile_deplibs="$deplib $compile_deplibs"
8077ed6f5d66Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
8078ed6f5d66Smrg	  else
8079ed6f5d66Smrg	    func_append compiler_flags " $deplib"
8080fbc03982Smrg	    if test lib = "$linkmode"; then
8081ed6f5d66Smrg		case "$new_inherited_linker_flags " in
8082ed6f5d66Smrg		    *" $deplib "*) ;;
8083ed6f5d66Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
8084ed6f5d66Smrg		esac
8085ed6f5d66Smrg	    fi
8086ed6f5d66Smrg	  fi
8087ed6f5d66Smrg	  continue
8088ed6f5d66Smrg	  ;;
8089ed6f5d66Smrg	-l*)
8090fbc03982Smrg	  if test lib != "$linkmode" && test prog != "$linkmode"; then
8091fbc03982Smrg	    func_warning "'-l' is ignored for archives/objects"
8092ed6f5d66Smrg	    continue
8093ed6f5d66Smrg	  fi
8094ed6f5d66Smrg	  func_stripname '-l' '' "$deplib"
8095ed6f5d66Smrg	  name=$func_stripname_result
8096fbc03982Smrg	  if test lib = "$linkmode"; then
8097ed6f5d66Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
8098ed6f5d66Smrg	  else
8099ed6f5d66Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
8100ed6f5d66Smrg	  fi
8101ed6f5d66Smrg	  for searchdir in $searchdirs; do
8102ed6f5d66Smrg	    for search_ext in .la $std_shrext .so .a; do
8103ed6f5d66Smrg	      # Search the libtool library
8104fbc03982Smrg	      lib=$searchdir/lib$name$search_ext
8105ed6f5d66Smrg	      if test -f "$lib"; then
8106fbc03982Smrg		if test .la = "$search_ext"; then
8107fbc03982Smrg		  found=:
8108ed6f5d66Smrg		else
8109fbc03982Smrg		  found=false
8110ed6f5d66Smrg		fi
8111ed6f5d66Smrg		break 2
8112ed6f5d66Smrg	      fi
8113ed6f5d66Smrg	    done
8114ed6f5d66Smrg	  done
8115fbc03982Smrg	  if $found; then
8116fbc03982Smrg	    # deplib is a libtool library
8117ed6f5d66Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
8118ed6f5d66Smrg	    # We need to do some special things here, and not later.
8119fbc03982Smrg	    if test yes = "$allow_libtool_libs_with_static_runtimes"; then
8120ed6f5d66Smrg	      case " $predeps $postdeps " in
8121ed6f5d66Smrg	      *" $deplib "*)
8122ed6f5d66Smrg		if func_lalib_p "$lib"; then
8123ed6f5d66Smrg		  library_names=
8124ed6f5d66Smrg		  old_library=
8125ed6f5d66Smrg		  func_source "$lib"
8126ed6f5d66Smrg		  for l in $old_library $library_names; do
8127fbc03982Smrg		    ll=$l
8128ed6f5d66Smrg		  done
8129fbc03982Smrg		  if test "X$ll" = "X$old_library"; then # only static version available
8130fbc03982Smrg		    found=false
8131ed6f5d66Smrg		    func_dirname "$lib" "" "."
8132fbc03982Smrg		    ladir=$func_dirname_result
8133ed6f5d66Smrg		    lib=$ladir/$old_library
8134fbc03982Smrg		    if test prog,link = "$linkmode,$pass"; then
8135ed6f5d66Smrg		      compile_deplibs="$deplib $compile_deplibs"
8136ed6f5d66Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
8137ed6f5d66Smrg		    else
8138ed6f5d66Smrg		      deplibs="$deplib $deplibs"
8139fbc03982Smrg		      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
8140ed6f5d66Smrg		    fi
8141ed6f5d66Smrg		    continue
8142ed6f5d66Smrg		  fi
8143ed6f5d66Smrg		fi
8144ed6f5d66Smrg		;;
8145ed6f5d66Smrg	      *) ;;
8146ed6f5d66Smrg	      esac
8147ed6f5d66Smrg	    fi
8148fbc03982Smrg	  else
8149fbc03982Smrg	    # deplib doesn't seem to be a libtool library
8150fbc03982Smrg	    if test prog,link = "$linkmode,$pass"; then
8151fbc03982Smrg	      compile_deplibs="$deplib $compile_deplibs"
8152fbc03982Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
8153fbc03982Smrg	    else
8154fbc03982Smrg	      deplibs="$deplib $deplibs"
8155fbc03982Smrg	      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
8156fbc03982Smrg	    fi
8157fbc03982Smrg	    continue
8158ed6f5d66Smrg	  fi
8159ed6f5d66Smrg	  ;; # -l
8160ed6f5d66Smrg	*.ltframework)
8161fbc03982Smrg	  if test prog,link = "$linkmode,$pass"; then
8162ed6f5d66Smrg	    compile_deplibs="$deplib $compile_deplibs"
8163ed6f5d66Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
8164ed6f5d66Smrg	  else
8165ed6f5d66Smrg	    deplibs="$deplib $deplibs"
8166fbc03982Smrg	    if test lib = "$linkmode"; then
8167ed6f5d66Smrg		case "$new_inherited_linker_flags " in
8168ed6f5d66Smrg		    *" $deplib "*) ;;
8169ed6f5d66Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
8170ed6f5d66Smrg		esac
8171ed6f5d66Smrg	    fi
8172ed6f5d66Smrg	  fi
8173ed6f5d66Smrg	  continue
8174ed6f5d66Smrg	  ;;
8175ed6f5d66Smrg	-L*)
8176ed6f5d66Smrg	  case $linkmode in
8177ed6f5d66Smrg	  lib)
8178ed6f5d66Smrg	    deplibs="$deplib $deplibs"
8179fbc03982Smrg	    test conv = "$pass" && continue
8180ed6f5d66Smrg	    newdependency_libs="$deplib $newdependency_libs"
8181ed6f5d66Smrg	    func_stripname '-L' '' "$deplib"
8182ed6f5d66Smrg	    func_resolve_sysroot "$func_stripname_result"
8183ed6f5d66Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
8184ed6f5d66Smrg	    ;;
8185ed6f5d66Smrg	  prog)
8186fbc03982Smrg	    if test conv = "$pass"; then
8187ed6f5d66Smrg	      deplibs="$deplib $deplibs"
8188ed6f5d66Smrg	      continue
8189ed6f5d66Smrg	    fi
8190fbc03982Smrg	    if test scan = "$pass"; then
8191ed6f5d66Smrg	      deplibs="$deplib $deplibs"
8192ed6f5d66Smrg	    else
8193ed6f5d66Smrg	      compile_deplibs="$deplib $compile_deplibs"
8194ed6f5d66Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
8195ed6f5d66Smrg	    fi
8196ed6f5d66Smrg	    func_stripname '-L' '' "$deplib"
8197ed6f5d66Smrg	    func_resolve_sysroot "$func_stripname_result"
8198ed6f5d66Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
8199ed6f5d66Smrg	    ;;
8200ed6f5d66Smrg	  *)
8201fbc03982Smrg	    func_warning "'-L' is ignored for archives/objects"
8202ed6f5d66Smrg	    ;;
8203ed6f5d66Smrg	  esac # linkmode
8204ed6f5d66Smrg	  continue
8205ed6f5d66Smrg	  ;; # -L
8206ed6f5d66Smrg	-R*)
8207fbc03982Smrg	  if test link = "$pass"; then
8208ed6f5d66Smrg	    func_stripname '-R' '' "$deplib"
8209ed6f5d66Smrg	    func_resolve_sysroot "$func_stripname_result"
8210ed6f5d66Smrg	    dir=$func_resolve_sysroot_result
8211ed6f5d66Smrg	    # Make sure the xrpath contains only unique directories.
8212ed6f5d66Smrg	    case "$xrpath " in
8213ed6f5d66Smrg	    *" $dir "*) ;;
8214ed6f5d66Smrg	    *) func_append xrpath " $dir" ;;
8215ed6f5d66Smrg	    esac
8216ed6f5d66Smrg	  fi
8217ed6f5d66Smrg	  deplibs="$deplib $deplibs"
8218ed6f5d66Smrg	  continue
8219ed6f5d66Smrg	  ;;
8220ed6f5d66Smrg	*.la)
8221ed6f5d66Smrg	  func_resolve_sysroot "$deplib"
8222ed6f5d66Smrg	  lib=$func_resolve_sysroot_result
8223ed6f5d66Smrg	  ;;
8224ed6f5d66Smrg	*.$libext)
8225fbc03982Smrg	  if test conv = "$pass"; then
8226ed6f5d66Smrg	    deplibs="$deplib $deplibs"
8227ed6f5d66Smrg	    continue
8228ed6f5d66Smrg	  fi
8229ed6f5d66Smrg	  case $linkmode in
8230ed6f5d66Smrg	  lib)
8231ed6f5d66Smrg	    # Linking convenience modules into shared libraries is allowed,
8232ed6f5d66Smrg	    # but linking other static libraries is non-portable.
8233ed6f5d66Smrg	    case " $dlpreconveniencelibs " in
8234ed6f5d66Smrg	    *" $deplib "*) ;;
8235ed6f5d66Smrg	    *)
8236fbc03982Smrg	      valid_a_lib=false
8237ed6f5d66Smrg	      case $deplibs_check_method in
8238ed6f5d66Smrg		match_pattern*)
8239ed6f5d66Smrg		  set dummy $deplibs_check_method; shift
8240ed6f5d66Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
8241ed6f5d66Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
8242ed6f5d66Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
8243fbc03982Smrg		    valid_a_lib=:
8244ed6f5d66Smrg		  fi
8245ed6f5d66Smrg		;;
8246ed6f5d66Smrg		pass_all)
8247fbc03982Smrg		  valid_a_lib=:
8248ed6f5d66Smrg		;;
8249ed6f5d66Smrg	      esac
8250fbc03982Smrg	      if $valid_a_lib; then
8251a3680546Smrg		func_warning "Linking the shared library $output against the static library $deplib is not portable!"
8252fbc03982Smrg		deplibs="$deplib $deplibs"
8253fbc03982Smrg	      else
8254a3680546Smrg		func_warning "Trying to link with static lib archive $deplib."
8255a3680546Smrg		func_warning "I have the capability to make that library automatically link in when"
8256a3680546Smrg		func_warning "you link to this library.  But I can only do this if you have a"
8257a3680546Smrg		func_warning "shared version of the library, which you do not appear to have"
8258a3680546Smrg		func_warning "because the file extensions .$libext of this argument makes me believe"
8259a3680546Smrg		func_warning "that it is just a static archive that I should not use here."
8260ed6f5d66Smrg	      fi
8261ed6f5d66Smrg	      ;;
8262ed6f5d66Smrg	    esac
8263ed6f5d66Smrg	    continue
8264ed6f5d66Smrg	    ;;
8265ed6f5d66Smrg	  prog)
8266fbc03982Smrg	    if test link != "$pass"; then
8267ed6f5d66Smrg	      deplibs="$deplib $deplibs"
8268ed6f5d66Smrg	    else
8269ed6f5d66Smrg	      compile_deplibs="$deplib $compile_deplibs"
8270ed6f5d66Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
8271ed6f5d66Smrg	    fi
8272ed6f5d66Smrg	    continue
8273ed6f5d66Smrg	    ;;
8274ed6f5d66Smrg	  esac # linkmode
8275ed6f5d66Smrg	  ;; # *.$libext
8276ed6f5d66Smrg	*.lo | *.$objext)
8277fbc03982Smrg	  if test conv = "$pass"; then
8278ed6f5d66Smrg	    deplibs="$deplib $deplibs"
8279fbc03982Smrg	  elif test prog = "$linkmode"; then
8280fbc03982Smrg	    if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
8281ed6f5d66Smrg	      # If there is no dlopen support or we're linking statically,
8282ed6f5d66Smrg	      # we need to preload.
8283ed6f5d66Smrg	      func_append newdlprefiles " $deplib"
8284ed6f5d66Smrg	      compile_deplibs="$deplib $compile_deplibs"
8285ed6f5d66Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
8286ed6f5d66Smrg	    else
8287ed6f5d66Smrg	      func_append newdlfiles " $deplib"
8288ed6f5d66Smrg	    fi
8289ed6f5d66Smrg	  fi
8290ed6f5d66Smrg	  continue
8291ed6f5d66Smrg	  ;;
8292ed6f5d66Smrg	%DEPLIBS%)
8293fbc03982Smrg	  alldeplibs=:
8294ed6f5d66Smrg	  continue
8295ed6f5d66Smrg	  ;;
8296ed6f5d66Smrg	esac # case $deplib
8297ed6f5d66Smrg
8298fbc03982Smrg	$found || test -f "$lib" \
8299fbc03982Smrg	  || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
8300ed6f5d66Smrg
8301ed6f5d66Smrg	# Check to see that this really is a libtool archive.
8302ed6f5d66Smrg	func_lalib_unsafe_p "$lib" \
8303fbc03982Smrg	  || func_fatal_error "'$lib' is not a valid libtool archive"
8304ed6f5d66Smrg
8305ed6f5d66Smrg	func_dirname "$lib" "" "."
8306fbc03982Smrg	ladir=$func_dirname_result
8307ed6f5d66Smrg
8308ed6f5d66Smrg	dlname=
8309ed6f5d66Smrg	dlopen=
8310ed6f5d66Smrg	dlpreopen=
8311ed6f5d66Smrg	libdir=
8312ed6f5d66Smrg	library_names=
8313ed6f5d66Smrg	old_library=
8314ed6f5d66Smrg	inherited_linker_flags=
8315ed6f5d66Smrg	# If the library was installed with an old release of libtool,
8316ed6f5d66Smrg	# it will not redefine variables installed, or shouldnotlink
8317ed6f5d66Smrg	installed=yes
8318ed6f5d66Smrg	shouldnotlink=no
8319ed6f5d66Smrg	avoidtemprpath=
8320ed6f5d66Smrg
8321ed6f5d66Smrg
8322ed6f5d66Smrg	# Read the .la file
8323ed6f5d66Smrg	func_source "$lib"
8324ed6f5d66Smrg
8325ed6f5d66Smrg	# Convert "-framework foo" to "foo.ltframework"
8326ed6f5d66Smrg	if test -n "$inherited_linker_flags"; then
8327ed6f5d66Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
8328ed6f5d66Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
8329ed6f5d66Smrg	    case " $new_inherited_linker_flags " in
8330ed6f5d66Smrg	      *" $tmp_inherited_linker_flag "*) ;;
8331ed6f5d66Smrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
8332ed6f5d66Smrg	    esac
8333ed6f5d66Smrg	  done
8334ed6f5d66Smrg	fi
8335ed6f5d66Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8336fbc03982Smrg	if test lib,link = "$linkmode,$pass" ||
8337fbc03982Smrg	   test prog,scan = "$linkmode,$pass" ||
8338fbc03982Smrg	   { test prog != "$linkmode" && test lib != "$linkmode"; }; then
8339ed6f5d66Smrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
8340ed6f5d66Smrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
8341ed6f5d66Smrg	fi
8342ed6f5d66Smrg
8343fbc03982Smrg	if test conv = "$pass"; then
8344ed6f5d66Smrg	  # Only check for convenience libraries
8345ed6f5d66Smrg	  deplibs="$lib $deplibs"
8346ed6f5d66Smrg	  if test -z "$libdir"; then
8347ed6f5d66Smrg	    if test -z "$old_library"; then
8348fbc03982Smrg	      func_fatal_error "cannot find name of link library for '$lib'"
8349ed6f5d66Smrg	    fi
8350ed6f5d66Smrg	    # It is a libtool convenience library, so add in its objects.
8351ed6f5d66Smrg	    func_append convenience " $ladir/$objdir/$old_library"
8352ed6f5d66Smrg	    func_append old_convenience " $ladir/$objdir/$old_library"
8353fbc03982Smrg	  elif test prog != "$linkmode" && test lib != "$linkmode"; then
8354fbc03982Smrg	    func_fatal_error "'$lib' is not a convenience library"
8355ed6f5d66Smrg	  fi
8356fbc03982Smrg	  tmp_libs=
8357fbc03982Smrg	  for deplib in $dependency_libs; do
8358fbc03982Smrg	    deplibs="$deplib $deplibs"
8359fbc03982Smrg	    if $opt_preserve_dup_deps; then
8360fbc03982Smrg	      case "$tmp_libs " in
8361fbc03982Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8362fbc03982Smrg	      esac
8363fbc03982Smrg	    fi
8364fbc03982Smrg	    func_append tmp_libs " $deplib"
8365fbc03982Smrg	  done
8366ed6f5d66Smrg	  continue
8367ed6f5d66Smrg	fi # $pass = conv
8368ed6f5d66Smrg
8369ed6f5d66Smrg
8370ed6f5d66Smrg	# Get the name of the library we link against.
8371ed6f5d66Smrg	linklib=
8372ed6f5d66Smrg	if test -n "$old_library" &&
8373fbc03982Smrg	   { test yes = "$prefer_static_libs" ||
8374fbc03982Smrg	     test built,no = "$prefer_static_libs,$installed"; }; then
8375ed6f5d66Smrg	  linklib=$old_library
8376ed6f5d66Smrg	else
8377ed6f5d66Smrg	  for l in $old_library $library_names; do
8378fbc03982Smrg	    linklib=$l
8379ed6f5d66Smrg	  done
8380ed6f5d66Smrg	fi
8381ed6f5d66Smrg	if test -z "$linklib"; then
8382fbc03982Smrg	  func_fatal_error "cannot find name of link library for '$lib'"
8383ed6f5d66Smrg	fi
8384ed6f5d66Smrg
8385ed6f5d66Smrg	# This library was specified with -dlopen.
8386fbc03982Smrg	if test dlopen = "$pass"; then
8387fbc03982Smrg	  test -z "$libdir" \
8388fbc03982Smrg	    && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
8389ed6f5d66Smrg	  if test -z "$dlname" ||
8390fbc03982Smrg	     test yes != "$dlopen_support" ||
8391fbc03982Smrg	     test no = "$build_libtool_libs"
8392fbc03982Smrg	  then
8393ed6f5d66Smrg	    # If there is no dlname, no dlopen support or we're linking
8394ed6f5d66Smrg	    # statically, we need to preload.  We also need to preload any
8395ed6f5d66Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
8396ed6f5d66Smrg	    # bomb out in the load deplibs phase.
8397ed6f5d66Smrg	    func_append dlprefiles " $lib $dependency_libs"
8398ed6f5d66Smrg	  else
8399ed6f5d66Smrg	    func_append newdlfiles " $lib"
8400ed6f5d66Smrg	  fi
8401ed6f5d66Smrg	  continue
8402ed6f5d66Smrg	fi # $pass = dlopen
8403ed6f5d66Smrg
8404ed6f5d66Smrg	# We need an absolute path.
8405ed6f5d66Smrg	case $ladir in
8406fbc03982Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
8407ed6f5d66Smrg	*)
8408ed6f5d66Smrg	  abs_ladir=`cd "$ladir" && pwd`
8409ed6f5d66Smrg	  if test -z "$abs_ladir"; then
8410fbc03982Smrg	    func_warning "cannot determine absolute directory name of '$ladir'"
8411ed6f5d66Smrg	    func_warning "passing it literally to the linker, although it might fail"
8412fbc03982Smrg	    abs_ladir=$ladir
8413ed6f5d66Smrg	  fi
8414ed6f5d66Smrg	  ;;
8415ed6f5d66Smrg	esac
8416ed6f5d66Smrg	func_basename "$lib"
8417fbc03982Smrg	laname=$func_basename_result
8418ed6f5d66Smrg
8419ed6f5d66Smrg	# Find the relevant object directory and library name.
8420fbc03982Smrg	if test yes = "$installed"; then
8421ed6f5d66Smrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
8422fbc03982Smrg	    func_warning "library '$lib' was moved."
8423fbc03982Smrg	    dir=$ladir
8424fbc03982Smrg	    absdir=$abs_ladir
8425fbc03982Smrg	    libdir=$abs_ladir
8426ed6f5d66Smrg	  else
8427fbc03982Smrg	    dir=$lt_sysroot$libdir
8428fbc03982Smrg	    absdir=$lt_sysroot$libdir
8429ed6f5d66Smrg	  fi
8430fbc03982Smrg	  test yes = "$hardcode_automatic" && avoidtemprpath=yes
8431ed6f5d66Smrg	else
8432ed6f5d66Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
8433fbc03982Smrg	    dir=$ladir
8434fbc03982Smrg	    absdir=$abs_ladir
8435ed6f5d66Smrg	    # Remove this search path later
8436ed6f5d66Smrg	    func_append notinst_path " $abs_ladir"
8437ed6f5d66Smrg	  else
8438fbc03982Smrg	    dir=$ladir/$objdir
8439fbc03982Smrg	    absdir=$abs_ladir/$objdir
8440ed6f5d66Smrg	    # Remove this search path later
8441ed6f5d66Smrg	    func_append notinst_path " $abs_ladir"
8442ed6f5d66Smrg	  fi
8443ed6f5d66Smrg	fi # $installed = yes
8444ed6f5d66Smrg	func_stripname 'lib' '.la' "$laname"
8445ed6f5d66Smrg	name=$func_stripname_result
8446ed6f5d66Smrg
8447ed6f5d66Smrg	# This library was specified with -dlpreopen.
8448fbc03982Smrg	if test dlpreopen = "$pass"; then
8449fbc03982Smrg	  if test -z "$libdir" && test prog = "$linkmode"; then
8450fbc03982Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
8451ed6f5d66Smrg	  fi
8452fbc03982Smrg	  case $host in
8453ed6f5d66Smrg	    # special handling for platforms with PE-DLLs.
8454a3680546Smrg	    *cygwin* | *mingw* | *windows* | *cegcc* )
8455ed6f5d66Smrg	      # Linker will automatically link against shared library if both
8456ed6f5d66Smrg	      # static and shared are present.  Therefore, ensure we extract
8457ed6f5d66Smrg	      # symbols from the import library if a shared library is present
8458ed6f5d66Smrg	      # (otherwise, the dlopen module name will be incorrect).  We do
8459ed6f5d66Smrg	      # this by putting the import library name into $newdlprefiles.
8460ed6f5d66Smrg	      # We recover the dlopen module name by 'saving' the la file
8461ed6f5d66Smrg	      # name in a special purpose variable, and (later) extracting the
8462ed6f5d66Smrg	      # dlname from the la file.
8463ed6f5d66Smrg	      if test -n "$dlname"; then
8464ed6f5d66Smrg	        func_tr_sh "$dir/$linklib"
8465ed6f5d66Smrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
8466ed6f5d66Smrg	        func_append newdlprefiles " $dir/$linklib"
8467ed6f5d66Smrg	      else
8468ed6f5d66Smrg	        func_append newdlprefiles " $dir/$old_library"
8469ed6f5d66Smrg	        # Keep a list of preopened convenience libraries to check
8470ed6f5d66Smrg	        # that they are being used correctly in the link pass.
8471ed6f5d66Smrg	        test -z "$libdir" && \
8472ed6f5d66Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
8473ed6f5d66Smrg	      fi
8474ed6f5d66Smrg	    ;;
8475ed6f5d66Smrg	    * )
8476ed6f5d66Smrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
8477ed6f5d66Smrg	      # are required to link).
8478ed6f5d66Smrg	      if test -n "$old_library"; then
8479ed6f5d66Smrg	        func_append newdlprefiles " $dir/$old_library"
8480ed6f5d66Smrg	        # Keep a list of preopened convenience libraries to check
8481ed6f5d66Smrg	        # that they are being used correctly in the link pass.
8482ed6f5d66Smrg	        test -z "$libdir" && \
8483ed6f5d66Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
8484ed6f5d66Smrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
8485ed6f5d66Smrg	      elif test -n "$dlname"; then
8486ed6f5d66Smrg	        func_append newdlprefiles " $dir/$dlname"
8487ed6f5d66Smrg	      else
8488ed6f5d66Smrg	        func_append newdlprefiles " $dir/$linklib"
8489ed6f5d66Smrg	      fi
8490ed6f5d66Smrg	    ;;
8491ed6f5d66Smrg	  esac
8492ed6f5d66Smrg	fi # $pass = dlpreopen
8493ed6f5d66Smrg
8494ed6f5d66Smrg	if test -z "$libdir"; then
8495ed6f5d66Smrg	  # Link the convenience library
8496fbc03982Smrg	  if test lib = "$linkmode"; then
8497ed6f5d66Smrg	    deplibs="$dir/$old_library $deplibs"
8498fbc03982Smrg	  elif test prog,link = "$linkmode,$pass"; then
8499ed6f5d66Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
8500ed6f5d66Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
8501ed6f5d66Smrg	  else
8502ed6f5d66Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
8503ed6f5d66Smrg	  fi
8504ed6f5d66Smrg	  continue
8505ed6f5d66Smrg	fi
8506ed6f5d66Smrg
8507ed6f5d66Smrg
8508fbc03982Smrg	if test prog = "$linkmode" && test link != "$pass"; then
8509ed6f5d66Smrg	  func_append newlib_search_path " $ladir"
8510ed6f5d66Smrg	  deplibs="$lib $deplibs"
8511ed6f5d66Smrg
8512fbc03982Smrg	  linkalldeplibs=false
8513fbc03982Smrg	  if test no != "$link_all_deplibs" || test -z "$library_names" ||
8514fbc03982Smrg	     test no = "$build_libtool_libs"; then
8515fbc03982Smrg	    linkalldeplibs=:
8516ed6f5d66Smrg	  fi
8517ed6f5d66Smrg
8518ed6f5d66Smrg	  tmp_libs=
8519ed6f5d66Smrg	  for deplib in $dependency_libs; do
8520ed6f5d66Smrg	    case $deplib in
8521ed6f5d66Smrg	    -L*) func_stripname '-L' '' "$deplib"
8522ed6f5d66Smrg	         func_resolve_sysroot "$func_stripname_result"
8523ed6f5d66Smrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
8524ed6f5d66Smrg		 ;;
8525ed6f5d66Smrg	    esac
8526ed6f5d66Smrg	    # Need to link against all dependency_libs?
8527fbc03982Smrg	    if $linkalldeplibs; then
8528ed6f5d66Smrg	      deplibs="$deplib $deplibs"
8529ed6f5d66Smrg	    else
8530ed6f5d66Smrg	      # Need to hardcode shared library paths
8531ed6f5d66Smrg	      # or/and link against static libraries
8532ed6f5d66Smrg	      newdependency_libs="$deplib $newdependency_libs"
8533ed6f5d66Smrg	    fi
8534fbc03982Smrg	    if $opt_preserve_dup_deps; then
8535ed6f5d66Smrg	      case "$tmp_libs " in
8536ed6f5d66Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8537ed6f5d66Smrg	      esac
8538ed6f5d66Smrg	    fi
8539ed6f5d66Smrg	    func_append tmp_libs " $deplib"
8540ed6f5d66Smrg	  done # for deplib
8541ed6f5d66Smrg	  continue
8542ed6f5d66Smrg	fi # $linkmode = prog...
8543ed6f5d66Smrg
8544fbc03982Smrg	if test prog,link = "$linkmode,$pass"; then
8545ed6f5d66Smrg	  if test -n "$library_names" &&
8546fbc03982Smrg	     { { test no = "$prefer_static_libs" ||
8547fbc03982Smrg	         test built,yes = "$prefer_static_libs,$installed"; } ||
8548ed6f5d66Smrg	       test -z "$old_library"; }; then
8549ed6f5d66Smrg	    # We need to hardcode the library path
8550fbc03982Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
8551ed6f5d66Smrg	      # Make sure the rpath contains only unique directories.
8552fbc03982Smrg	      case $temp_rpath: in
8553ed6f5d66Smrg	      *"$absdir:"*) ;;
8554a3680546Smrg              *) case $absdir in
8555a3680546Smrg                 "$progdir/"*) func_append temp_rpath "$absdir:" ;;
8556a3680546Smrg                 *)            func_append temp_rpath_tail "$absdir:" ;;
8557a3680546Smrg                 esac
8558ed6f5d66Smrg	      esac
8559ed6f5d66Smrg	    fi
8560ed6f5d66Smrg
8561ed6f5d66Smrg	    # Hardcode the library path.
8562ed6f5d66Smrg	    # Skip directories that are in the system default run-time
8563ed6f5d66Smrg	    # search path.
8564ed6f5d66Smrg	    case " $sys_lib_dlsearch_path " in
8565ed6f5d66Smrg	    *" $absdir "*) ;;
8566ed6f5d66Smrg	    *)
8567a3680546Smrg	      case "$compile_rpath$compile_rpath_tail " in
8568ed6f5d66Smrg	      *" $absdir "*) ;;
8569a3680546Smrg	      *) case $absdir in
8570a3680546Smrg                 "$progdir/"*) func_append compile_rpath " $absdir" ;;
8571a3680546Smrg                 *) func_append compile_rpath_tail " $absdir" ;;
8572a3680546Smrg		 esac
8573ed6f5d66Smrg	      esac
8574ed6f5d66Smrg	      ;;
8575ed6f5d66Smrg	    esac
8576ed6f5d66Smrg	    case " $sys_lib_dlsearch_path " in
8577ed6f5d66Smrg	    *" $libdir "*) ;;
8578ed6f5d66Smrg	    *)
8579ed6f5d66Smrg	      case "$finalize_rpath " in
8580ed6f5d66Smrg	      *" $libdir "*) ;;
8581ed6f5d66Smrg	      *) func_append finalize_rpath " $libdir" ;;
8582ed6f5d66Smrg	      esac
8583ed6f5d66Smrg	      ;;
8584ed6f5d66Smrg	    esac
8585ed6f5d66Smrg	  fi # $linkmode,$pass = prog,link...
8586ed6f5d66Smrg
8587fbc03982Smrg	  if $alldeplibs &&
8588fbc03982Smrg	     { test pass_all = "$deplibs_check_method" ||
8589fbc03982Smrg	       { test yes = "$build_libtool_libs" &&
8590ed6f5d66Smrg		 test -n "$library_names"; }; }; then
8591ed6f5d66Smrg	    # We only need to search for static libraries
8592ed6f5d66Smrg	    continue
8593ed6f5d66Smrg	  fi
8594ed6f5d66Smrg	fi
8595ed6f5d66Smrg
8596ed6f5d66Smrg	link_static=no # Whether the deplib will be linked statically
8597ed6f5d66Smrg	use_static_libs=$prefer_static_libs
8598fbc03982Smrg	if test built = "$use_static_libs" && test yes = "$installed"; then
8599ed6f5d66Smrg	  use_static_libs=no
8600ed6f5d66Smrg	fi
8601ed6f5d66Smrg	if test -n "$library_names" &&
8602fbc03982Smrg	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
8603a3680546Smrg	  case $host_os in
8604a3680546Smrg	  cygwin* | mingw* | windows* | cegcc* | os2*)
8605ed6f5d66Smrg	      # No point in relinking DLLs because paths are not encoded
8606ed6f5d66Smrg	      func_append notinst_deplibs " $lib"
8607ed6f5d66Smrg	      need_relink=no
8608ed6f5d66Smrg	    ;;
8609ed6f5d66Smrg	  *)
8610fbc03982Smrg	    if test no = "$installed"; then
8611ed6f5d66Smrg	      func_append notinst_deplibs " $lib"
8612ed6f5d66Smrg	      need_relink=yes
8613ed6f5d66Smrg	    fi
8614ed6f5d66Smrg	    ;;
8615ed6f5d66Smrg	  esac
8616ed6f5d66Smrg	  # This is a shared library
8617ed6f5d66Smrg
8618ed6f5d66Smrg	  # Warn about portability, can't link against -module's on some
8619ed6f5d66Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
8620fbc03982Smrg	  dlopenmodule=
8621ed6f5d66Smrg	  for dlpremoduletest in $dlprefiles; do
8622ed6f5d66Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
8623fbc03982Smrg	      dlopenmodule=$dlpremoduletest
8624ed6f5d66Smrg	      break
8625ed6f5d66Smrg	    fi
8626ed6f5d66Smrg	  done
8627fbc03982Smrg	  if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
8628ed6f5d66Smrg	    echo
8629fbc03982Smrg	    if test prog = "$linkmode"; then
8630a3680546Smrg	      func_warning "Linking the executable $output against the loadable module"
8631ed6f5d66Smrg	    else
8632a3680546Smrg	      func_warning "Linking the shared library $output against the loadable module"
8633ed6f5d66Smrg	    fi
8634a3680546Smrg	    func_warning "$linklib is not portable!"
8635ed6f5d66Smrg	  fi
8636fbc03982Smrg	  if test lib = "$linkmode" &&
8637fbc03982Smrg	     test yes = "$hardcode_into_libs"; then
8638ed6f5d66Smrg	    # Hardcode the library path.
8639ed6f5d66Smrg	    # Skip directories that are in the system default run-time
8640ed6f5d66Smrg	    # search path.
8641ed6f5d66Smrg	    case " $sys_lib_dlsearch_path " in
8642ed6f5d66Smrg	    *" $absdir "*) ;;
8643ed6f5d66Smrg	    *)
8644a3680546Smrg	      case "$compile_rpath$compile_rpath_tail " in
8645ed6f5d66Smrg	      *" $absdir "*) ;;
8646a3680546Smrg	      *) case $absdir in
8647a3680546Smrg                 "$progdir/"*) func_append compile_rpath " $absdir" ;;
8648a3680546Smrg                 *) func_append compile_rpath_tail " $absdir" ;;
8649a3680546Smrg		 esac
8650ed6f5d66Smrg	      esac
8651ed6f5d66Smrg	      ;;
8652ed6f5d66Smrg	    esac
8653ed6f5d66Smrg	    case " $sys_lib_dlsearch_path " in
8654ed6f5d66Smrg	    *" $libdir "*) ;;
8655ed6f5d66Smrg	    *)
8656ed6f5d66Smrg	      case "$finalize_rpath " in
8657ed6f5d66Smrg	      *" $libdir "*) ;;
8658ed6f5d66Smrg	      *) func_append finalize_rpath " $libdir" ;;
8659ed6f5d66Smrg	      esac
8660ed6f5d66Smrg	      ;;
8661ed6f5d66Smrg	    esac
8662ed6f5d66Smrg	  fi
8663ed6f5d66Smrg
8664ed6f5d66Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
8665ed6f5d66Smrg	    # figure out the soname
8666ed6f5d66Smrg	    set dummy $library_names
8667ed6f5d66Smrg	    shift
8668fbc03982Smrg	    realname=$1
8669ed6f5d66Smrg	    shift
8670ed6f5d66Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
8671ed6f5d66Smrg	    # use dlname if we got it. it's perfectly good, no?
8672ed6f5d66Smrg	    if test -n "$dlname"; then
8673fbc03982Smrg	      soname=$dlname
8674ed6f5d66Smrg	    elif test -n "$soname_spec"; then
8675ed6f5d66Smrg	      # bleh windows
8676a3680546Smrg	      case $host_os in
8677a3680546Smrg	      cygwin* | mingw* | windows* | cegcc* | os2*)
8678ed6f5d66Smrg	        func_arith $current - $age
8679ed6f5d66Smrg		major=$func_arith_result
8680fbc03982Smrg		versuffix=-$major
8681ed6f5d66Smrg		;;
8682ed6f5d66Smrg	      esac
8683ed6f5d66Smrg	      eval soname=\"$soname_spec\"
8684ed6f5d66Smrg	    else
8685fbc03982Smrg	      soname=$realname
8686ed6f5d66Smrg	    fi
8687ed6f5d66Smrg
8688ed6f5d66Smrg	    # Make a new name for the extract_expsyms_cmds to use
8689fbc03982Smrg	    soroot=$soname
8690ed6f5d66Smrg	    func_basename "$soroot"
8691fbc03982Smrg	    soname=$func_basename_result
8692ed6f5d66Smrg	    func_stripname 'lib' '.dll' "$soname"
8693ed6f5d66Smrg	    newlib=libimp-$func_stripname_result.a
8694ed6f5d66Smrg
8695ed6f5d66Smrg	    # If the library has no export list, then create one now
8696ed6f5d66Smrg	    if test -f "$output_objdir/$soname-def"; then :
8697ed6f5d66Smrg	    else
8698fbc03982Smrg	      func_verbose "extracting exported symbol list from '$soname'"
8699ed6f5d66Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
8700ed6f5d66Smrg	    fi
8701ed6f5d66Smrg
8702ed6f5d66Smrg	    # Create $newlib
8703ed6f5d66Smrg	    if test -f "$output_objdir/$newlib"; then :; else
8704fbc03982Smrg	      func_verbose "generating import library for '$soname'"
8705ed6f5d66Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
8706ed6f5d66Smrg	    fi
8707ed6f5d66Smrg	    # make sure the library variables are pointing to the new library
8708ed6f5d66Smrg	    dir=$output_objdir
8709ed6f5d66Smrg	    linklib=$newlib
8710ed6f5d66Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
8711ed6f5d66Smrg
8712fbc03982Smrg	  if test prog = "$linkmode" || test relink != "$opt_mode"; then
8713ed6f5d66Smrg	    add_shlibpath=
8714ed6f5d66Smrg	    add_dir=
8715ed6f5d66Smrg	    add=
8716ed6f5d66Smrg	    lib_linked=yes
8717ed6f5d66Smrg	    case $hardcode_action in
8718ed6f5d66Smrg	    immediate | unsupported)
8719fbc03982Smrg	      if test no = "$hardcode_direct"; then
8720fbc03982Smrg		add=$dir/$linklib
8721ed6f5d66Smrg		case $host in
8722fbc03982Smrg		  *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
8723fbc03982Smrg		  *-*-sysv4*uw2*) add_dir=-L$dir ;;
8724a3680546Smrg		  *-*-emscripten*) add_dir=-L$dir ;;
8725ed6f5d66Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
8726fbc03982Smrg		    *-*-unixware7*) add_dir=-L$dir ;;
8727ed6f5d66Smrg		  *-*-darwin* )
8728fbc03982Smrg		    # if the lib is a (non-dlopened) module then we cannot
8729ed6f5d66Smrg		    # link against it, someone is ignoring the earlier warnings
8730ed6f5d66Smrg		    if /usr/bin/file -L $add 2> /dev/null |
8731fbc03982Smrg			 $GREP ": [^:]* bundle" >/dev/null; then
8732ed6f5d66Smrg		      if test "X$dlopenmodule" != "X$lib"; then
8733a3680546Smrg			func_warning "lib $linklib is a module, not a shared library"
8734fbc03982Smrg			if test -z "$old_library"; then
8735a3680546Smrg			  func_warning "And there doesn't seem to be a static archive available"
8736a3680546Smrg			  func_warning "The link will probably fail, sorry"
8737ed6f5d66Smrg			else
8738fbc03982Smrg			  add=$dir/$old_library
8739ed6f5d66Smrg			fi
8740ed6f5d66Smrg		      elif test -n "$old_library"; then
8741fbc03982Smrg			add=$dir/$old_library
8742ed6f5d66Smrg		      fi
8743ed6f5d66Smrg		    fi
8744ed6f5d66Smrg		esac
8745fbc03982Smrg	      elif test no = "$hardcode_minus_L"; then
8746ed6f5d66Smrg		case $host in
8747fbc03982Smrg		*-*-sunos*) add_shlibpath=$dir ;;
8748ed6f5d66Smrg		esac
8749fbc03982Smrg		add_dir=-L$dir
8750fbc03982Smrg		add=-l$name
8751fbc03982Smrg	      elif test no = "$hardcode_shlibpath_var"; then
8752fbc03982Smrg		add_shlibpath=$dir
8753fbc03982Smrg		add=-l$name
8754ed6f5d66Smrg	      else
8755ed6f5d66Smrg		lib_linked=no
8756ed6f5d66Smrg	      fi
8757ed6f5d66Smrg	      ;;
8758ed6f5d66Smrg	    relink)
8759fbc03982Smrg	      if test yes = "$hardcode_direct" &&
8760fbc03982Smrg	         test no = "$hardcode_direct_absolute"; then
8761fbc03982Smrg		add=$dir/$linklib
8762fbc03982Smrg	      elif test yes = "$hardcode_minus_L"; then
8763fbc03982Smrg		add_dir=-L$absdir
8764ed6f5d66Smrg		# Try looking first in the location we're being installed to.
8765ed6f5d66Smrg		if test -n "$inst_prefix_dir"; then
8766ed6f5d66Smrg		  case $libdir in
8767ed6f5d66Smrg		    [\\/]*)
8768ed6f5d66Smrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
8769ed6f5d66Smrg		      ;;
8770ed6f5d66Smrg		  esac
8771ed6f5d66Smrg		fi
8772fbc03982Smrg		add=-l$name
8773fbc03982Smrg	      elif test yes = "$hardcode_shlibpath_var"; then
8774fbc03982Smrg		add_shlibpath=$dir
8775fbc03982Smrg		add=-l$name
8776ed6f5d66Smrg	      else
8777ed6f5d66Smrg		lib_linked=no
8778ed6f5d66Smrg	      fi
8779ed6f5d66Smrg	      ;;
8780ed6f5d66Smrg	    *) lib_linked=no ;;
8781ed6f5d66Smrg	    esac
8782ed6f5d66Smrg
8783fbc03982Smrg	    if test yes != "$lib_linked"; then
8784ed6f5d66Smrg	      func_fatal_configuration "unsupported hardcode properties"
8785ed6f5d66Smrg	    fi
8786ed6f5d66Smrg
8787ed6f5d66Smrg	    if test -n "$add_shlibpath"; then
8788ed6f5d66Smrg	      case :$compile_shlibpath: in
8789ed6f5d66Smrg	      *":$add_shlibpath:"*) ;;
8790ed6f5d66Smrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
8791ed6f5d66Smrg	      esac
8792ed6f5d66Smrg	    fi
8793fbc03982Smrg	    if test prog = "$linkmode"; then
8794ed6f5d66Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
8795ed6f5d66Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
8796ed6f5d66Smrg	    else
8797ed6f5d66Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8798ed6f5d66Smrg	      test -n "$add" && deplibs="$add $deplibs"
8799fbc03982Smrg	      if test yes != "$hardcode_direct" &&
8800fbc03982Smrg		 test yes != "$hardcode_minus_L" &&
8801fbc03982Smrg		 test yes = "$hardcode_shlibpath_var"; then
8802ed6f5d66Smrg		case :$finalize_shlibpath: in
8803ed6f5d66Smrg		*":$libdir:"*) ;;
8804ed6f5d66Smrg		*) func_append finalize_shlibpath "$libdir:" ;;
8805ed6f5d66Smrg		esac
8806ed6f5d66Smrg	      fi
8807ed6f5d66Smrg	    fi
8808ed6f5d66Smrg	  fi
8809ed6f5d66Smrg
8810fbc03982Smrg	  if test prog = "$linkmode" || test relink = "$opt_mode"; then
8811ed6f5d66Smrg	    add_shlibpath=
8812ed6f5d66Smrg	    add_dir=
8813ed6f5d66Smrg	    add=
8814ed6f5d66Smrg	    # Finalize command for both is simple: just hardcode it.
8815fbc03982Smrg	    if test yes = "$hardcode_direct" &&
8816fbc03982Smrg	       test no = "$hardcode_direct_absolute"; then
8817fbc03982Smrg	      add=$libdir/$linklib
8818fbc03982Smrg	    elif test yes = "$hardcode_minus_L"; then
8819a3680546Smrg	      add_dir=-L$lt_sysroot$libdir
8820fbc03982Smrg	      add=-l$name
8821fbc03982Smrg	    elif test yes = "$hardcode_shlibpath_var"; then
8822ed6f5d66Smrg	      case :$finalize_shlibpath: in
8823ed6f5d66Smrg	      *":$libdir:"*) ;;
8824ed6f5d66Smrg	      *) func_append finalize_shlibpath "$libdir:" ;;
8825ed6f5d66Smrg	      esac
8826fbc03982Smrg	      add=-l$name
8827fbc03982Smrg	    elif test yes = "$hardcode_automatic"; then
8828ed6f5d66Smrg	      if test -n "$inst_prefix_dir" &&
8829fbc03982Smrg		 test -f "$inst_prefix_dir$libdir/$linklib"; then
8830fbc03982Smrg		add=$inst_prefix_dir$libdir/$linklib
8831ed6f5d66Smrg	      else
8832fbc03982Smrg		add=$libdir/$linklib
8833ed6f5d66Smrg	      fi
8834ed6f5d66Smrg	    else
8835ed6f5d66Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
8836a3680546Smrg	      add_dir=-L$lt_sysroot$libdir
8837ed6f5d66Smrg	      # Try looking first in the location we're being installed to.
8838ed6f5d66Smrg	      if test -n "$inst_prefix_dir"; then
8839ed6f5d66Smrg		case $libdir in
8840ed6f5d66Smrg		  [\\/]*)
8841ed6f5d66Smrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
8842ed6f5d66Smrg		    ;;
8843ed6f5d66Smrg		esac
8844ed6f5d66Smrg	      fi
8845fbc03982Smrg	      add=-l$name
8846ed6f5d66Smrg	    fi
8847ed6f5d66Smrg
8848fbc03982Smrg	    if test prog = "$linkmode"; then
8849ed6f5d66Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
8850ed6f5d66Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
8851ed6f5d66Smrg	    else
8852ed6f5d66Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8853ed6f5d66Smrg	      test -n "$add" && deplibs="$add $deplibs"
8854ed6f5d66Smrg	    fi
8855ed6f5d66Smrg	  fi
8856fbc03982Smrg	elif test prog = "$linkmode"; then
8857ed6f5d66Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
8858ed6f5d66Smrg	  # is not unsupported.  This is valid on all known static and
8859ed6f5d66Smrg	  # shared platforms.
8860fbc03982Smrg	  if test unsupported != "$hardcode_direct"; then
8861fbc03982Smrg	    test -n "$old_library" && linklib=$old_library
8862ed6f5d66Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
8863ed6f5d66Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
8864ed6f5d66Smrg	  else
8865ed6f5d66Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
8866ed6f5d66Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
8867ed6f5d66Smrg	  fi
8868fbc03982Smrg	elif test yes = "$build_libtool_libs"; then
8869ed6f5d66Smrg	  # Not a shared library
8870fbc03982Smrg	  if test pass_all != "$deplibs_check_method"; then
8871ed6f5d66Smrg	    # We're trying link a shared library against a static one
8872ed6f5d66Smrg	    # but the system doesn't support it.
8873ed6f5d66Smrg
8874ed6f5d66Smrg	    # Just print a warning and add the library to dependency_libs so
8875ed6f5d66Smrg	    # that the program can be linked against the static library.
8876a3680546Smrg	    func_warning "This system cannot link to static lib archive $lib."
8877a3680546Smrg	    func_warning "I have the capability to make that library automatically link in when"
8878a3680546Smrg	    func_warning "you link to this library.  But I can only do this if you have a"
8879a3680546Smrg	    func_warning "shared version of the library, which you do not appear to have."
8880fbc03982Smrg	    if test yes = "$module"; then
8881a3680546Smrg	      func_warning "But as you try to build a module library, libtool will still create "
8882a3680546Smrg	      func_warning "a static module, that should work as long as the dlopening application"
8883a3680546Smrg	      func_warning "is linked with the -dlopen flag to resolve symbols at runtime."
8884ed6f5d66Smrg	      if test -z "$global_symbol_pipe"; then
8885a3680546Smrg		func_warning "However, this would only work if libtool was able to extract symbol"
8886a3680546Smrg		func_warning "lists from a program, using 'nm' or equivalent, but libtool could"
8887a3680546Smrg		func_warning "not find such a program.  So, this module is probably useless."
8888a3680546Smrg		func_warning "'nm' from GNU binutils and a full rebuild may help."
8889ed6f5d66Smrg	      fi
8890fbc03982Smrg	      if test no = "$build_old_libs"; then
8891ed6f5d66Smrg		build_libtool_libs=module
8892ed6f5d66Smrg		build_old_libs=yes
8893ed6f5d66Smrg	      else
8894ed6f5d66Smrg		build_libtool_libs=no
8895ed6f5d66Smrg	      fi
8896ed6f5d66Smrg	    fi
8897ed6f5d66Smrg	  else
8898ed6f5d66Smrg	    deplibs="$dir/$old_library $deplibs"
8899ed6f5d66Smrg	    link_static=yes
8900ed6f5d66Smrg	  fi
8901ed6f5d66Smrg	fi # link shared/static library?
8902ed6f5d66Smrg
8903fbc03982Smrg	if test lib = "$linkmode"; then
8904ed6f5d66Smrg	  if test -n "$dependency_libs" &&
8905fbc03982Smrg	     { test yes != "$hardcode_into_libs" ||
8906fbc03982Smrg	       test yes = "$build_old_libs" ||
8907fbc03982Smrg	       test yes = "$link_static"; }; then
8908ed6f5d66Smrg	    # Extract -R from dependency_libs
8909ed6f5d66Smrg	    temp_deplibs=
8910ed6f5d66Smrg	    for libdir in $dependency_libs; do
8911ed6f5d66Smrg	      case $libdir in
8912ed6f5d66Smrg	      -R*) func_stripname '-R' '' "$libdir"
8913ed6f5d66Smrg	           temp_xrpath=$func_stripname_result
8914ed6f5d66Smrg		   case " $xrpath " in
8915ed6f5d66Smrg		   *" $temp_xrpath "*) ;;
8916ed6f5d66Smrg		   *) func_append xrpath " $temp_xrpath";;
8917ed6f5d66Smrg		   esac;;
8918ed6f5d66Smrg	      *) func_append temp_deplibs " $libdir";;
8919ed6f5d66Smrg	      esac
8920ed6f5d66Smrg	    done
8921fbc03982Smrg	    dependency_libs=$temp_deplibs
8922ed6f5d66Smrg	  fi
8923ed6f5d66Smrg
8924ed6f5d66Smrg	  func_append newlib_search_path " $absdir"
8925ed6f5d66Smrg	  # Link against this library
8926fbc03982Smrg	  test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
8927ed6f5d66Smrg	  # ... and its dependency_libs
8928ed6f5d66Smrg	  tmp_libs=
8929ed6f5d66Smrg	  for deplib in $dependency_libs; do
8930ed6f5d66Smrg	    newdependency_libs="$deplib $newdependency_libs"
8931ed6f5d66Smrg	    case $deplib in
8932ed6f5d66Smrg              -L*) func_stripname '-L' '' "$deplib"
8933ed6f5d66Smrg                   func_resolve_sysroot "$func_stripname_result";;
8934ed6f5d66Smrg              *) func_resolve_sysroot "$deplib" ;;
8935ed6f5d66Smrg            esac
8936fbc03982Smrg	    if $opt_preserve_dup_deps; then
8937ed6f5d66Smrg	      case "$tmp_libs " in
8938ed6f5d66Smrg	      *" $func_resolve_sysroot_result "*)
8939ed6f5d66Smrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
8940ed6f5d66Smrg	      esac
8941ed6f5d66Smrg	    fi
8942ed6f5d66Smrg	    func_append tmp_libs " $func_resolve_sysroot_result"
8943ed6f5d66Smrg	  done
8944ed6f5d66Smrg
8945fbc03982Smrg	  if test no != "$link_all_deplibs"; then
8946ed6f5d66Smrg	    # Add the search paths of all dependency libraries
8947ed6f5d66Smrg	    for deplib in $dependency_libs; do
8948ed6f5d66Smrg	      path=
8949ed6f5d66Smrg	      case $deplib in
8950fbc03982Smrg	      -L*) path=$deplib ;;
8951ed6f5d66Smrg	      *.la)
8952ed6f5d66Smrg	        func_resolve_sysroot "$deplib"
8953ed6f5d66Smrg	        deplib=$func_resolve_sysroot_result
8954ed6f5d66Smrg	        func_dirname "$deplib" "" "."
8955ed6f5d66Smrg		dir=$func_dirname_result
8956ed6f5d66Smrg		# We need an absolute path.
8957ed6f5d66Smrg		case $dir in
8958fbc03982Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
8959ed6f5d66Smrg		*)
8960ed6f5d66Smrg		  absdir=`cd "$dir" && pwd`
8961ed6f5d66Smrg		  if test -z "$absdir"; then
8962fbc03982Smrg		    func_warning "cannot determine absolute directory name of '$dir'"
8963fbc03982Smrg		    absdir=$dir
8964ed6f5d66Smrg		  fi
8965ed6f5d66Smrg		  ;;
8966ed6f5d66Smrg		esac
8967ed6f5d66Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
8968ed6f5d66Smrg		case $host in
8969ed6f5d66Smrg		*-*-darwin*)
8970ed6f5d66Smrg		  depdepl=
8971fbc03982Smrg		  eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
8972fbc03982Smrg		  if test -n "$deplibrary_names"; then
8973fbc03982Smrg		    for tmp in $deplibrary_names; do
8974ed6f5d66Smrg		      depdepl=$tmp
8975ed6f5d66Smrg		    done
8976fbc03982Smrg		    if test -f "$absdir/$objdir/$depdepl"; then
8977fbc03982Smrg		      depdepl=$absdir/$objdir/$depdepl
8978fbc03982Smrg		      darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
8979ed6f5d66Smrg                      if test -z "$darwin_install_name"; then
8980fbc03982Smrg                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
8981ed6f5d66Smrg                      fi
8982fbc03982Smrg		      func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
8983fbc03982Smrg		      func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
8984ed6f5d66Smrg		      path=
8985ed6f5d66Smrg		    fi
8986ed6f5d66Smrg		  fi
8987ed6f5d66Smrg		  ;;
8988ed6f5d66Smrg		*)
8989fbc03982Smrg		  path=-L$absdir/$objdir
8990ed6f5d66Smrg		  ;;
8991ed6f5d66Smrg		esac
8992ed6f5d66Smrg		else
8993fbc03982Smrg		  eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
8994ed6f5d66Smrg		  test -z "$libdir" && \
8995fbc03982Smrg		    func_fatal_error "'$deplib' is not a valid libtool archive"
8996ed6f5d66Smrg		  test "$absdir" != "$libdir" && \
8997fbc03982Smrg		    func_warning "'$deplib' seems to be moved"
8998ed6f5d66Smrg
8999fbc03982Smrg		  path=-L$absdir
9000ed6f5d66Smrg		fi
9001ed6f5d66Smrg		;;
9002ed6f5d66Smrg	      esac
9003ed6f5d66Smrg	      case " $deplibs " in
9004ed6f5d66Smrg	      *" $path "*) ;;
9005ed6f5d66Smrg	      *) deplibs="$path $deplibs" ;;
9006ed6f5d66Smrg	      esac
9007ed6f5d66Smrg	    done
9008ed6f5d66Smrg	  fi # link_all_deplibs != no
9009ed6f5d66Smrg	fi # linkmode = lib
9010ed6f5d66Smrg      done # for deplib in $libs
9011a3680546Smrg
9012a3680546Smrg      func_append temp_rpath "$temp_rpath_tail"
9013a3680546Smrg      func_append compile_rpath "$compile_rpath_tail"
9014a3680546Smrg
9015fbc03982Smrg      if test link = "$pass"; then
9016fbc03982Smrg	if test prog = "$linkmode"; then
9017ed6f5d66Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
9018ed6f5d66Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
9019ed6f5d66Smrg	else
9020ed6f5d66Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9021ed6f5d66Smrg	fi
9022ed6f5d66Smrg      fi
9023fbc03982Smrg      dependency_libs=$newdependency_libs
9024fbc03982Smrg      if test dlpreopen = "$pass"; then
9025ed6f5d66Smrg	# Link the dlpreopened libraries before other libraries
9026ed6f5d66Smrg	for deplib in $save_deplibs; do
9027ed6f5d66Smrg	  deplibs="$deplib $deplibs"
9028ed6f5d66Smrg	done
9029ed6f5d66Smrg      fi
9030fbc03982Smrg      if test dlopen != "$pass"; then
9031fbc03982Smrg	test conv = "$pass" || {
9032ed6f5d66Smrg	  # Make sure lib_search_path contains only unique directories.
9033ed6f5d66Smrg	  lib_search_path=
9034ed6f5d66Smrg	  for dir in $newlib_search_path; do
9035ed6f5d66Smrg	    case "$lib_search_path " in
9036ed6f5d66Smrg	    *" $dir "*) ;;
9037ed6f5d66Smrg	    *) func_append lib_search_path " $dir" ;;
9038ed6f5d66Smrg	    esac
9039ed6f5d66Smrg	  done
9040ed6f5d66Smrg	  newlib_search_path=
9041fbc03982Smrg	}
9042ed6f5d66Smrg
9043fbc03982Smrg	if test prog,link = "$linkmode,$pass"; then
9044ed6f5d66Smrg	  vars="compile_deplibs finalize_deplibs"
9045fbc03982Smrg	else
9046fbc03982Smrg	  vars=deplibs
9047ed6f5d66Smrg	fi
9048ed6f5d66Smrg	for var in $vars dependency_libs; do
9049ed6f5d66Smrg	  # Add libraries to $var in reverse order
9050ed6f5d66Smrg	  eval tmp_libs=\"\$$var\"
9051ed6f5d66Smrg	  new_libs=
9052a3680546Smrg	  # FIXME: Pedantically, this is the right thing to do, so
9053a3680546Smrg	  #        that some nasty dependency loop isn't accidentally
9054a3680546Smrg	  #        broken: new_libs="$deplib $new_libs"
9055ed6f5d66Smrg	  for deplib in $tmp_libs; do
9056a3680546Smrg	    if $opt_preserve_dup_deps; then
9057a3680546Smrg	      new_libs="$deplib $new_libs"
9058a3680546Smrg	    else
9059a3680546Smrg	      # Pragmatically, this seems to cause very few problems in
9060a3680546Smrg	      # practice:
9061a3680546Smrg	      case $deplib in
9062a3680546Smrg	      -L*) new_libs="$deplib $new_libs" ;;
9063a3680546Smrg	      -R*) ;;
9064ed6f5d66Smrg	      *)
9065a3680546Smrg	        # And here is the reason: when a library appears more
9066a3680546Smrg	        # than once as an explicit dependence of a library, or
9067a3680546Smrg	        # is implicitly linked in more than once by the
9068a3680546Smrg	        # compiler, it is considered special, and multiple
9069a3680546Smrg	        # occurrences thereof are not removed.  Compare this
9070a3680546Smrg	        # with having the same library being listed as a
9071a3680546Smrg	        # dependency of multiple other libraries: in this case,
9072a3680546Smrg	        # we know (pedantically, we assume) the library does not
9073a3680546Smrg	        # need to be listed more than once, so we keep only the
9074a3680546Smrg	        # last copy.  This is not always right, but it is rare
9075a3680546Smrg	        # enough that we require users that really mean to play
9076a3680546Smrg	        # such unportable linking tricks to link the library
9077a3680546Smrg	        # using -Wl,-lname, so that libtool does not consider it
9078a3680546Smrg	        # for duplicate removal.  And if not possible for portability
9079a3680546Smrg	        # reasons, then --preserve-dup-deps should be used.
9080a3680546Smrg	        case " $specialdeplibs " in
9081a3680546Smrg	        *" $deplib "*) new_libs="$deplib $new_libs" ;;
9082a3680546Smrg	        *)
9083a3680546Smrg	          case " $new_libs " in
9084a3680546Smrg	          *" $deplib "*) ;;
9085a3680546Smrg	          *) new_libs="$deplib $new_libs" ;;
9086a3680546Smrg	          esac
9087a3680546Smrg	          ;;
9088a3680546Smrg	        esac
9089a3680546Smrg	        ;;
9090ed6f5d66Smrg	      esac
9091a3680546Smrg	    fi
9092ed6f5d66Smrg	  done
9093ed6f5d66Smrg	  tmp_libs=
9094ed6f5d66Smrg	  for deplib in $new_libs; do
9095ed6f5d66Smrg	    case $deplib in
9096ed6f5d66Smrg	    -L*)
9097ed6f5d66Smrg	      case " $tmp_libs " in
9098ed6f5d66Smrg	      *" $deplib "*) ;;
9099ed6f5d66Smrg	      *) func_append tmp_libs " $deplib" ;;
9100ed6f5d66Smrg	      esac
9101ed6f5d66Smrg	      ;;
9102ed6f5d66Smrg	    *) func_append tmp_libs " $deplib" ;;
9103ed6f5d66Smrg	    esac
9104ed6f5d66Smrg	  done
9105ed6f5d66Smrg	  eval $var=\"$tmp_libs\"
9106ed6f5d66Smrg	done # for var
9107ed6f5d66Smrg      fi
9108fbc03982Smrg
9109fbc03982Smrg      # Add Sun CC postdeps if required:
9110fbc03982Smrg      test CXX = "$tagname" && {
9111fbc03982Smrg        case $host_os in
9112fbc03982Smrg        linux*)
91133d05230fSmrg          case `$CC -V 2>&1 | $SED 5q` in
9114fbc03982Smrg          *Sun\ C*) # Sun C++ 5.9
9115fbc03982Smrg            func_suncc_cstd_abi
9116fbc03982Smrg
9117fbc03982Smrg            if test no != "$suncc_use_cstd_abi"; then
9118fbc03982Smrg              func_append postdeps ' -library=Cstd -library=Crun'
9119fbc03982Smrg            fi
9120fbc03982Smrg            ;;
9121fbc03982Smrg          esac
9122fbc03982Smrg          ;;
9123fbc03982Smrg
9124fbc03982Smrg        solaris*)
9125fbc03982Smrg          func_cc_basename "$CC"
9126fbc03982Smrg          case $func_cc_basename_result in
9127fbc03982Smrg          CC* | sunCC*)
9128fbc03982Smrg            func_suncc_cstd_abi
9129fbc03982Smrg
9130fbc03982Smrg            if test no != "$suncc_use_cstd_abi"; then
9131fbc03982Smrg              func_append postdeps ' -library=Cstd -library=Crun'
9132fbc03982Smrg            fi
9133fbc03982Smrg            ;;
9134fbc03982Smrg          esac
9135fbc03982Smrg          ;;
9136fbc03982Smrg        esac
9137fbc03982Smrg      }
9138fbc03982Smrg
9139ed6f5d66Smrg      # Last step: remove runtime libs from dependency_libs
9140ed6f5d66Smrg      # (they stay in deplibs)
9141ed6f5d66Smrg      tmp_libs=
9142fbc03982Smrg      for i in $dependency_libs; do
9143ed6f5d66Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
9144ed6f5d66Smrg	*" $i "*)
9145fbc03982Smrg	  i=
9146ed6f5d66Smrg	  ;;
9147ed6f5d66Smrg	esac
9148fbc03982Smrg	if test -n "$i"; then
9149ed6f5d66Smrg	  func_append tmp_libs " $i"
9150ed6f5d66Smrg	fi
9151ed6f5d66Smrg      done
9152ed6f5d66Smrg      dependency_libs=$tmp_libs
9153ed6f5d66Smrg    done # for pass
9154fbc03982Smrg    if test prog = "$linkmode"; then
9155fbc03982Smrg      dlfiles=$newdlfiles
9156ed6f5d66Smrg    fi
9157fbc03982Smrg    if test prog = "$linkmode" || test lib = "$linkmode"; then
9158fbc03982Smrg      dlprefiles=$newdlprefiles
9159ed6f5d66Smrg    fi
9160ed6f5d66Smrg
9161ed6f5d66Smrg    case $linkmode in
9162ed6f5d66Smrg    oldlib)
9163fbc03982Smrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
9164fbc03982Smrg	func_warning "'-dlopen' is ignored for archives"
9165ed6f5d66Smrg      fi
9166ed6f5d66Smrg
9167ed6f5d66Smrg      case " $deplibs" in
9168ed6f5d66Smrg      *\ -l* | *\ -L*)
9169fbc03982Smrg	func_warning "'-l' and '-L' are ignored for archives" ;;
9170ed6f5d66Smrg      esac
9171ed6f5d66Smrg
9172ed6f5d66Smrg      test -n "$rpath" && \
9173fbc03982Smrg	func_warning "'-rpath' is ignored for archives"
9174ed6f5d66Smrg
9175ed6f5d66Smrg      test -n "$xrpath" && \
9176fbc03982Smrg	func_warning "'-R' is ignored for archives"
9177ed6f5d66Smrg
9178ed6f5d66Smrg      test -n "$vinfo" && \
9179fbc03982Smrg	func_warning "'-version-info/-version-number' is ignored for archives"
9180ed6f5d66Smrg
9181ed6f5d66Smrg      test -n "$release" && \
9182fbc03982Smrg	func_warning "'-release' is ignored for archives"
9183ed6f5d66Smrg
9184ed6f5d66Smrg      test -n "$export_symbols$export_symbols_regex" && \
9185fbc03982Smrg	func_warning "'-export-symbols' is ignored for archives"
9186ed6f5d66Smrg
9187ed6f5d66Smrg      # Now set the variables for building old libraries.
9188ed6f5d66Smrg      build_libtool_libs=no
9189fbc03982Smrg      oldlibs=$output
9190ed6f5d66Smrg      func_append objs "$old_deplibs"
9191ed6f5d66Smrg      ;;
9192ed6f5d66Smrg
9193ed6f5d66Smrg    lib)
9194fbc03982Smrg      # Make sure we only generate libraries of the form 'libNAME.la'.
9195ed6f5d66Smrg      case $outputname in
9196ed6f5d66Smrg      lib*)
9197ed6f5d66Smrg	func_stripname 'lib' '.la' "$outputname"
9198ed6f5d66Smrg	name=$func_stripname_result
9199ed6f5d66Smrg	eval shared_ext=\"$shrext_cmds\"
9200ed6f5d66Smrg	eval libname=\"$libname_spec\"
9201ed6f5d66Smrg	;;
9202ed6f5d66Smrg      *)
9203fbc03982Smrg	test no = "$module" \
9204fbc03982Smrg	  && func_fatal_help "libtool library '$output' must begin with 'lib'"
9205ed6f5d66Smrg
9206fbc03982Smrg	if test no != "$need_lib_prefix"; then
9207ed6f5d66Smrg	  # Add the "lib" prefix for modules if required
9208ed6f5d66Smrg	  func_stripname '' '.la' "$outputname"
9209ed6f5d66Smrg	  name=$func_stripname_result
9210ed6f5d66Smrg	  eval shared_ext=\"$shrext_cmds\"
9211ed6f5d66Smrg	  eval libname=\"$libname_spec\"
9212ed6f5d66Smrg	else
9213ed6f5d66Smrg	  func_stripname '' '.la' "$outputname"
9214ed6f5d66Smrg	  libname=$func_stripname_result
9215ed6f5d66Smrg	fi
9216ed6f5d66Smrg	;;
9217ed6f5d66Smrg      esac
9218ed6f5d66Smrg
9219ed6f5d66Smrg      if test -n "$objs"; then
9220fbc03982Smrg	if test pass_all != "$deplibs_check_method"; then
9221fbc03982Smrg	  func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
9222ed6f5d66Smrg	else
9223a3680546Smrg	  func_warning "Linking the shared library $output against the non-libtool objects $objs is not portable!"
9224ed6f5d66Smrg	  func_append libobjs " $objs"
9225ed6f5d66Smrg	fi
9226ed6f5d66Smrg      fi
9227ed6f5d66Smrg
9228fbc03982Smrg      test no = "$dlself" \
9229fbc03982Smrg	|| func_warning "'-dlopen self' is ignored for libtool libraries"
9230ed6f5d66Smrg
9231ed6f5d66Smrg      set dummy $rpath
9232ed6f5d66Smrg      shift
9233fbc03982Smrg      test 1 -lt "$#" \
9234fbc03982Smrg	&& func_warning "ignoring multiple '-rpath's for a libtool library"
9235ed6f5d66Smrg
9236fbc03982Smrg      install_libdir=$1
9237ed6f5d66Smrg
9238ed6f5d66Smrg      oldlibs=
9239ed6f5d66Smrg      if test -z "$rpath"; then
9240fbc03982Smrg	if test yes = "$build_libtool_libs"; then
9241ed6f5d66Smrg	  # Building a libtool convenience library.
9242fbc03982Smrg	  # Some compilers have problems with a '.al' extension so
9243ed6f5d66Smrg	  # convenience libraries should have the same extension an
9244ed6f5d66Smrg	  # archive normally would.
9245ed6f5d66Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
9246ed6f5d66Smrg	  build_libtool_libs=convenience
9247ed6f5d66Smrg	  build_old_libs=yes
9248ed6f5d66Smrg	fi
9249ed6f5d66Smrg
9250ed6f5d66Smrg	test -n "$vinfo" && \
9251fbc03982Smrg	  func_warning "'-version-info/-version-number' is ignored for convenience libraries"
9252ed6f5d66Smrg
9253ed6f5d66Smrg	test -n "$release" && \
9254fbc03982Smrg	  func_warning "'-release' is ignored for convenience libraries"
9255ed6f5d66Smrg      else
9256ed6f5d66Smrg
9257ed6f5d66Smrg	# Parse the version information argument.
9258fbc03982Smrg	save_ifs=$IFS; IFS=:
9259ed6f5d66Smrg	set dummy $vinfo 0 0 0
9260ed6f5d66Smrg	shift
9261fbc03982Smrg	IFS=$save_ifs
9262ed6f5d66Smrg
9263ed6f5d66Smrg	test -n "$7" && \
9264fbc03982Smrg	  func_fatal_help "too many parameters to '-version-info'"
9265ed6f5d66Smrg
9266ed6f5d66Smrg	# convert absolute version numbers to libtool ages
9267ed6f5d66Smrg	# this retains compatibility with .la files and attempts
9268ed6f5d66Smrg	# to make the code below a bit more comprehensible
9269ed6f5d66Smrg
9270ed6f5d66Smrg	case $vinfo_number in
9271ed6f5d66Smrg	yes)
9272fbc03982Smrg	  number_major=$1
9273fbc03982Smrg	  number_minor=$2
9274fbc03982Smrg	  number_revision=$3
9275ed6f5d66Smrg	  #
9276ed6f5d66Smrg	  # There are really only two kinds -- those that
9277ed6f5d66Smrg	  # use the current revision as the major version
9278ed6f5d66Smrg	  # and those that subtract age and use age as
9279ed6f5d66Smrg	  # a minor version.  But, then there is irix
9280fbc03982Smrg	  # that has an extra 1 added just for fun
9281ed6f5d66Smrg	  #
9282ed6f5d66Smrg	  case $version_type in
9283ed6f5d66Smrg	  # correct linux to gnu/linux during the next big refactor
9284a3680546Smrg	  darwin|freebsd-elf|linux|midnightbsd-elf|osf|qnx|windows|none)
9285ed6f5d66Smrg	    func_arith $number_major + $number_minor
9286ed6f5d66Smrg	    current=$func_arith_result
9287fbc03982Smrg	    age=$number_minor
9288fbc03982Smrg	    revision=$number_revision
9289ed6f5d66Smrg	    ;;
9290a3680546Smrg	  freebsd-aout|sco|sunos)
9291fbc03982Smrg	    current=$number_major
9292fbc03982Smrg	    revision=$number_minor
9293fbc03982Smrg	    age=0
9294ed6f5d66Smrg	    ;;
9295ed6f5d66Smrg	  irix|nonstopux)
9296ed6f5d66Smrg	    func_arith $number_major + $number_minor
9297ed6f5d66Smrg	    current=$func_arith_result
9298fbc03982Smrg	    age=$number_minor
9299fbc03982Smrg	    revision=$number_minor
9300ed6f5d66Smrg	    lt_irix_increment=no
9301ed6f5d66Smrg	    ;;
9302a3680546Smrg	  *)
9303a3680546Smrg	    func_fatal_configuration "$modename: unknown library version type '$version_type'"
9304a3680546Smrg	    ;;
9305ed6f5d66Smrg	  esac
9306ed6f5d66Smrg	  ;;
9307ed6f5d66Smrg	no)
9308fbc03982Smrg	  current=$1
9309fbc03982Smrg	  revision=$2
9310fbc03982Smrg	  age=$3
9311ed6f5d66Smrg	  ;;
9312ed6f5d66Smrg	esac
9313ed6f5d66Smrg
9314ed6f5d66Smrg	# Check that each of the things are valid numbers.
9315ed6f5d66Smrg	case $current in
9316ed6f5d66Smrg	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]) ;;
9317ed6f5d66Smrg	*)
9318fbc03982Smrg	  func_error "CURRENT '$current' must be a nonnegative integer"
9319fbc03982Smrg	  func_fatal_error "'$vinfo' is not valid version information"
9320ed6f5d66Smrg	  ;;
9321ed6f5d66Smrg	esac
9322ed6f5d66Smrg
9323ed6f5d66Smrg	case $revision in
9324ed6f5d66Smrg	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]) ;;
9325ed6f5d66Smrg	*)
9326fbc03982Smrg	  func_error "REVISION '$revision' must be a nonnegative integer"
9327fbc03982Smrg	  func_fatal_error "'$vinfo' is not valid version information"
9328ed6f5d66Smrg	  ;;
9329ed6f5d66Smrg	esac
9330ed6f5d66Smrg
9331ed6f5d66Smrg	case $age in
9332ed6f5d66Smrg	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]) ;;
9333ed6f5d66Smrg	*)
9334fbc03982Smrg	  func_error "AGE '$age' must be a nonnegative integer"
9335fbc03982Smrg	  func_fatal_error "'$vinfo' is not valid version information"
9336ed6f5d66Smrg	  ;;
9337ed6f5d66Smrg	esac
9338ed6f5d66Smrg
9339ed6f5d66Smrg	if test "$age" -gt "$current"; then
9340fbc03982Smrg	  func_error "AGE '$age' is greater than the current interface number '$current'"
9341fbc03982Smrg	  func_fatal_error "'$vinfo' is not valid version information"
9342ed6f5d66Smrg	fi
9343ed6f5d66Smrg
9344ed6f5d66Smrg	# Calculate the version variables.
9345ed6f5d66Smrg	major=
9346ed6f5d66Smrg	versuffix=
9347ed6f5d66Smrg	verstring=
9348ed6f5d66Smrg	case $version_type in
9349ed6f5d66Smrg	none) ;;
9350ed6f5d66Smrg
9351ed6f5d66Smrg	darwin)
9352ed6f5d66Smrg	  # Like Linux, but with the current version available in
9353ed6f5d66Smrg	  # verstring for coding it into the library header
9354ed6f5d66Smrg	  func_arith $current - $age
9355ed6f5d66Smrg	  major=.$func_arith_result
9356fbc03982Smrg	  versuffix=$major.$age.$revision
9357ed6f5d66Smrg	  # Darwin ld doesn't like 0 for these options...
9358ed6f5d66Smrg	  func_arith $current + 1
9359ed6f5d66Smrg	  minor_current=$func_arith_result
9360fbc03982Smrg	  xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
9361ed6f5d66Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
9362fbc03982Smrg          # On Darwin other compilers
9363fbc03982Smrg          case $CC in
9364fbc03982Smrg              nagfor*)
9365fbc03982Smrg                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
9366fbc03982Smrg                  ;;
9367fbc03982Smrg              *)
9368fbc03982Smrg                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
9369fbc03982Smrg                  ;;
9370fbc03982Smrg          esac
9371ed6f5d66Smrg	  ;;
9372ed6f5d66Smrg
9373ed6f5d66Smrg	freebsd-aout)
9374fbc03982Smrg	  major=.$current
9375fbc03982Smrg	  versuffix=.$current.$revision
9376ed6f5d66Smrg	  ;;
9377ed6f5d66Smrg
93783d05230fSmrg	freebsd-elf | midnightbsd-elf)
9379fbc03982Smrg	  func_arith $current - $age
9380fbc03982Smrg	  major=.$func_arith_result
9381fbc03982Smrg	  versuffix=$major.$age.$revision
9382ed6f5d66Smrg	  ;;
9383ed6f5d66Smrg
9384ed6f5d66Smrg	irix | nonstopux)
9385fbc03982Smrg	  if test no = "$lt_irix_increment"; then
9386ed6f5d66Smrg	    func_arith $current - $age
9387ed6f5d66Smrg	  else
9388ed6f5d66Smrg	    func_arith $current - $age + 1
9389ed6f5d66Smrg	  fi
9390ed6f5d66Smrg	  major=$func_arith_result
9391ed6f5d66Smrg
9392ed6f5d66Smrg	  case $version_type in
9393ed6f5d66Smrg	    nonstopux) verstring_prefix=nonstopux ;;
9394ed6f5d66Smrg	    *)         verstring_prefix=sgi ;;
9395ed6f5d66Smrg	  esac
9396fbc03982Smrg	  verstring=$verstring_prefix$major.$revision
9397ed6f5d66Smrg
9398ed6f5d66Smrg	  # Add in all the interfaces that we are compatible with.
9399ed6f5d66Smrg	  loop=$revision
9400fbc03982Smrg	  while test 0 -ne "$loop"; do
9401ed6f5d66Smrg	    func_arith $revision - $loop
9402ed6f5d66Smrg	    iface=$func_arith_result
9403ed6f5d66Smrg	    func_arith $loop - 1
9404ed6f5d66Smrg	    loop=$func_arith_result
9405fbc03982Smrg	    verstring=$verstring_prefix$major.$iface:$verstring
9406ed6f5d66Smrg	  done
9407ed6f5d66Smrg
9408fbc03982Smrg	  # Before this point, $major must not contain '.'.
9409ed6f5d66Smrg	  major=.$major
9410fbc03982Smrg	  versuffix=$major.$revision
9411ed6f5d66Smrg	  ;;
9412ed6f5d66Smrg
9413ed6f5d66Smrg	linux) # correct to gnu/linux during the next big refactor
9414ed6f5d66Smrg	  func_arith $current - $age
9415ed6f5d66Smrg	  major=.$func_arith_result
9416fbc03982Smrg	  versuffix=$major.$age.$revision
9417ed6f5d66Smrg	  ;;
9418ed6f5d66Smrg
9419ed6f5d66Smrg	osf)
9420ed6f5d66Smrg	  func_arith $current - $age
9421ed6f5d66Smrg	  major=.$func_arith_result
9422fbc03982Smrg	  versuffix=.$current.$age.$revision
9423fbc03982Smrg	  verstring=$current.$age.$revision
9424ed6f5d66Smrg
9425ed6f5d66Smrg	  # Add in all the interfaces that we are compatible with.
9426ed6f5d66Smrg	  loop=$age
9427fbc03982Smrg	  while test 0 -ne "$loop"; do
9428ed6f5d66Smrg	    func_arith $current - $loop
9429ed6f5d66Smrg	    iface=$func_arith_result
9430ed6f5d66Smrg	    func_arith $loop - 1
9431ed6f5d66Smrg	    loop=$func_arith_result
9432fbc03982Smrg	    verstring=$verstring:$iface.0
9433ed6f5d66Smrg	  done
9434ed6f5d66Smrg
9435ed6f5d66Smrg	  # Make executables depend on our current version.
9436fbc03982Smrg	  func_append verstring ":$current.0"
9437ed6f5d66Smrg	  ;;
9438ed6f5d66Smrg
9439ed6f5d66Smrg	qnx)
9440a3680546Smrg	  func_arith $current - $age
9441a3680546Smrg	  major=.$func_arith_result
9442a3680546Smrg	  versuffix=$major.$age.$revision
9443fbc03982Smrg	  ;;
9444fbc03982Smrg
9445fbc03982Smrg	sco)
9446fbc03982Smrg	  major=.$current
9447fbc03982Smrg	  versuffix=.$current
9448ed6f5d66Smrg	  ;;
9449ed6f5d66Smrg
9450ed6f5d66Smrg	sunos)
9451fbc03982Smrg	  major=.$current
9452fbc03982Smrg	  versuffix=.$current.$revision
9453ed6f5d66Smrg	  ;;
9454ed6f5d66Smrg
9455ed6f5d66Smrg	windows)
9456ed6f5d66Smrg	  # Use '-' rather than '.', since we only want one
9457fbc03982Smrg	  # extension on DOS 8.3 file systems.
9458ed6f5d66Smrg	  func_arith $current - $age
9459ed6f5d66Smrg	  major=$func_arith_result
9460fbc03982Smrg	  versuffix=-$major
9461ed6f5d66Smrg	  ;;
9462ed6f5d66Smrg
9463ed6f5d66Smrg	*)
9464fbc03982Smrg	  func_fatal_configuration "unknown library version type '$version_type'"
9465ed6f5d66Smrg	  ;;
9466ed6f5d66Smrg	esac
9467ed6f5d66Smrg
9468ed6f5d66Smrg	# Clear the version info if we defaulted, and they specified a release.
9469ed6f5d66Smrg	if test -z "$vinfo" && test -n "$release"; then
9470ed6f5d66Smrg	  major=
9471ed6f5d66Smrg	  case $version_type in
9472ed6f5d66Smrg	  darwin)
9473ed6f5d66Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
9474ed6f5d66Smrg	    # problems, so we reset it completely
9475ed6f5d66Smrg	    verstring=
9476ed6f5d66Smrg	    ;;
9477ed6f5d66Smrg	  *)
9478fbc03982Smrg	    verstring=0.0
9479ed6f5d66Smrg	    ;;
9480ed6f5d66Smrg	  esac
9481fbc03982Smrg	  if test no = "$need_version"; then
9482ed6f5d66Smrg	    versuffix=
9483ed6f5d66Smrg	  else
9484fbc03982Smrg	    versuffix=.0.0
9485ed6f5d66Smrg	  fi
9486ed6f5d66Smrg	fi
9487ed6f5d66Smrg
9488ed6f5d66Smrg	# Remove version info from name if versioning should be avoided
9489fbc03982Smrg	if test yes,no = "$avoid_version,$need_version"; then
9490ed6f5d66Smrg	  major=
9491ed6f5d66Smrg	  versuffix=
9492fbc03982Smrg	  verstring=
9493ed6f5d66Smrg	fi
9494ed6f5d66Smrg
9495ed6f5d66Smrg	# Check to see if the archive will have undefined symbols.
9496fbc03982Smrg	if test yes = "$allow_undefined"; then
9497fbc03982Smrg	  if test unsupported = "$allow_undefined_flag"; then
9498fbc03982Smrg	    if test yes = "$build_old_libs"; then
9499fbc03982Smrg	      func_warning "undefined symbols not allowed in $host shared libraries; building static only"
9500fbc03982Smrg	      build_libtool_libs=no
9501fbc03982Smrg	    else
9502fbc03982Smrg	      func_fatal_error "can't build $host shared library unless -no-undefined is specified"
9503fbc03982Smrg	    fi
9504ed6f5d66Smrg	  fi
9505ed6f5d66Smrg	else
9506ed6f5d66Smrg	  # Don't allow undefined symbols.
9507fbc03982Smrg	  allow_undefined_flag=$no_undefined_flag
9508ed6f5d66Smrg	fi
9509ed6f5d66Smrg
9510ed6f5d66Smrg      fi
9511ed6f5d66Smrg
9512fbc03982Smrg      func_generate_dlsyms "$libname" "$libname" :
9513ed6f5d66Smrg      func_append libobjs " $symfileobj"
9514fbc03982Smrg      test " " = "$libobjs" && libobjs=
9515ed6f5d66Smrg
9516fbc03982Smrg      if test relink != "$opt_mode"; then
9517ed6f5d66Smrg	# Remove our outputs, but don't remove object files since they
9518ed6f5d66Smrg	# may have been created when compiling PIC objects.
9519ed6f5d66Smrg	removelist=
9520ed6f5d66Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
9521ed6f5d66Smrg	for p in $tempremovelist; do
9522ed6f5d66Smrg	  case $p in
9523ed6f5d66Smrg	    *.$objext | *.gcno)
9524ed6f5d66Smrg	       ;;
9525fbc03982Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
9526fbc03982Smrg	       if test -n "$precious_files_regex"; then
9527ed6f5d66Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
9528ed6f5d66Smrg		 then
9529ed6f5d66Smrg		   continue
9530ed6f5d66Smrg		 fi
9531ed6f5d66Smrg	       fi
9532ed6f5d66Smrg	       func_append removelist " $p"
9533ed6f5d66Smrg	       ;;
9534ed6f5d66Smrg	    *) ;;
9535ed6f5d66Smrg	  esac
9536ed6f5d66Smrg	done
9537ed6f5d66Smrg	test -n "$removelist" && \
9538ed6f5d66Smrg	  func_show_eval "${RM}r \$removelist"
9539ed6f5d66Smrg      fi
9540ed6f5d66Smrg
9541ed6f5d66Smrg      # Now set the variables for building old libraries.
9542fbc03982Smrg      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
9543ed6f5d66Smrg	func_append oldlibs " $output_objdir/$libname.$libext"
9544ed6f5d66Smrg
9545ed6f5d66Smrg	# Transform .lo files to .o files.
9546fbc03982Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
9547ed6f5d66Smrg      fi
9548ed6f5d66Smrg
9549ed6f5d66Smrg      # Eliminate all temporary directories.
9550ed6f5d66Smrg      #for path in $notinst_path; do
9551ed6f5d66Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
9552ed6f5d66Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
9553ed6f5d66Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
9554ed6f5d66Smrg      #done
9555ed6f5d66Smrg
9556ed6f5d66Smrg      if test -n "$xrpath"; then
9557ed6f5d66Smrg	# If the user specified any rpath flags, then add them.
9558ed6f5d66Smrg	temp_xrpath=
9559ed6f5d66Smrg	for libdir in $xrpath; do
9560ed6f5d66Smrg	  func_replace_sysroot "$libdir"
9561ed6f5d66Smrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
9562ed6f5d66Smrg	  case "$finalize_rpath " in
9563ed6f5d66Smrg	  *" $libdir "*) ;;
9564ed6f5d66Smrg	  *) func_append finalize_rpath " $libdir" ;;
9565ed6f5d66Smrg	  esac
9566ed6f5d66Smrg	done
9567fbc03982Smrg	if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
9568ed6f5d66Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
9569ed6f5d66Smrg	fi
9570ed6f5d66Smrg      fi
9571ed6f5d66Smrg
9572ed6f5d66Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
9573fbc03982Smrg      old_dlfiles=$dlfiles
9574ed6f5d66Smrg      dlfiles=
9575ed6f5d66Smrg      for lib in $old_dlfiles; do
9576ed6f5d66Smrg	case " $dlprefiles $dlfiles " in
9577ed6f5d66Smrg	*" $lib "*) ;;
9578ed6f5d66Smrg	*) func_append dlfiles " $lib" ;;
9579ed6f5d66Smrg	esac
9580ed6f5d66Smrg      done
9581ed6f5d66Smrg
9582ed6f5d66Smrg      # Make sure dlprefiles contains only unique files
9583fbc03982Smrg      old_dlprefiles=$dlprefiles
9584ed6f5d66Smrg      dlprefiles=
9585ed6f5d66Smrg      for lib in $old_dlprefiles; do
9586ed6f5d66Smrg	case "$dlprefiles " in
9587ed6f5d66Smrg	*" $lib "*) ;;
9588ed6f5d66Smrg	*) func_append dlprefiles " $lib" ;;
9589ed6f5d66Smrg	esac
9590ed6f5d66Smrg      done
9591ed6f5d66Smrg
9592fbc03982Smrg      if test yes = "$build_libtool_libs"; then
9593ed6f5d66Smrg	if test -n "$rpath"; then
9594ed6f5d66Smrg	  case $host in
9595a3680546Smrg	  *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
9596ed6f5d66Smrg	    # these systems don't actually have a c library (as such)!
9597ed6f5d66Smrg	    ;;
9598ed6f5d66Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
9599ed6f5d66Smrg	    # Rhapsody C library is in the System framework
9600ed6f5d66Smrg	    func_append deplibs " System.ltframework"
9601ed6f5d66Smrg	    ;;
9602ed6f5d66Smrg	  *-*-netbsd*)
9603ed6f5d66Smrg	    # Don't link with libc until the a.out ld.so is fixed.
9604ed6f5d66Smrg	    ;;
96053d05230fSmrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
9606ed6f5d66Smrg	    # Do not include libc due to us having libc/libc_r.
9607ed6f5d66Smrg	    ;;
9608ed6f5d66Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
9609ed6f5d66Smrg	    # Causes problems with __ctype
9610ed6f5d66Smrg	    ;;
9611ed6f5d66Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
9612ed6f5d66Smrg	    # Compiler inserts libc in the correct place for threads to work
9613ed6f5d66Smrg	    ;;
9614ed6f5d66Smrg	  *)
9615ed6f5d66Smrg	    # Add libc to deplibs on all other systems if necessary.
9616fbc03982Smrg	    if test yes = "$build_libtool_need_lc"; then
9617ed6f5d66Smrg	      func_append deplibs " -lc"
9618ed6f5d66Smrg	    fi
9619ed6f5d66Smrg	    ;;
9620ed6f5d66Smrg	  esac
9621ed6f5d66Smrg	fi
9622ed6f5d66Smrg
9623ed6f5d66Smrg	# Transform deplibs into only deplibs that can be linked in shared.
9624ed6f5d66Smrg	name_save=$name
9625ed6f5d66Smrg	libname_save=$libname
9626ed6f5d66Smrg	release_save=$release
9627ed6f5d66Smrg	versuffix_save=$versuffix
9628ed6f5d66Smrg	major_save=$major
9629ed6f5d66Smrg	# I'm not sure if I'm treating the release correctly.  I think
9630ed6f5d66Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
9631ed6f5d66Smrg	# add it in twice.  Is that correct?
9632fbc03982Smrg	release=
9633fbc03982Smrg	versuffix=
9634fbc03982Smrg	major=
9635ed6f5d66Smrg	newdeplibs=
9636ed6f5d66Smrg	droppeddeps=no
9637ed6f5d66Smrg	case $deplibs_check_method in
9638ed6f5d66Smrg	pass_all)
9639ed6f5d66Smrg	  # Don't check for shared/static.  Everything works.
9640ed6f5d66Smrg	  # This might be a little naive.  We might want to check
9641ed6f5d66Smrg	  # whether the library exists or not.  But this is on
9642ed6f5d66Smrg	  # osf3 & osf4 and I'm not really sure... Just
9643ed6f5d66Smrg	  # implementing what was already the behavior.
9644ed6f5d66Smrg	  newdeplibs=$deplibs
9645ed6f5d66Smrg	  ;;
9646ed6f5d66Smrg	file_magic*)
9647ed6f5d66Smrg	  set dummy $deplibs_check_method; shift
9648ed6f5d66Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9649ed6f5d66Smrg	  for a_deplib in $deplibs; do
9650ed6f5d66Smrg	    case $a_deplib in
9651ed6f5d66Smrg	    -l*)
9652ed6f5d66Smrg	      func_stripname -l '' "$a_deplib"
9653ed6f5d66Smrg	      name=$func_stripname_result
9654fbc03982Smrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9655ed6f5d66Smrg		case " $predeps $postdeps " in
9656ed6f5d66Smrg		*" $a_deplib "*)
9657ed6f5d66Smrg		  func_append newdeplibs " $a_deplib"
9658fbc03982Smrg		  a_deplib=
9659ed6f5d66Smrg		  ;;
9660ed6f5d66Smrg		esac
9661ed6f5d66Smrg	      fi
9662fbc03982Smrg	      if test -n "$a_deplib"; then
9663ed6f5d66Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
9664ed6f5d66Smrg		if test -n "$file_magic_glob"; then
9665ed6f5d66Smrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
9666ed6f5d66Smrg		else
9667ed6f5d66Smrg		  libnameglob=$libname
9668ed6f5d66Smrg		fi
9669fbc03982Smrg		test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
9670ed6f5d66Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9671fbc03982Smrg		  if test yes = "$want_nocaseglob"; then
9672ed6f5d66Smrg		    shopt -s nocaseglob
9673ed6f5d66Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9674ed6f5d66Smrg		    $nocaseglob
9675ed6f5d66Smrg		  else
9676ed6f5d66Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9677ed6f5d66Smrg		  fi
9678ed6f5d66Smrg		  for potent_lib in $potential_libs; do
9679ed6f5d66Smrg		      # Follow soft links.
9680ed6f5d66Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
9681ed6f5d66Smrg			 $GREP " -> " >/dev/null; then
9682ed6f5d66Smrg			continue
9683ed6f5d66Smrg		      fi
9684ed6f5d66Smrg		      # The statement above tries to avoid entering an
9685ed6f5d66Smrg		      # endless loop below, in case of cyclic links.
9686ed6f5d66Smrg		      # We might still enter an endless loop, since a link
9687ed6f5d66Smrg		      # loop can be closed while we follow links,
9688ed6f5d66Smrg		      # but so what?
9689fbc03982Smrg		      potlib=$potent_lib
9690ed6f5d66Smrg		      while test -h "$potlib" 2>/dev/null; do
9691fbc03982Smrg			potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
9692ed6f5d66Smrg			case $potliblink in
9693fbc03982Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
9694fbc03982Smrg			*) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
9695ed6f5d66Smrg			esac
9696ed6f5d66Smrg		      done
9697ed6f5d66Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
9698ed6f5d66Smrg			 $SED -e 10q |
9699ed6f5d66Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
9700ed6f5d66Smrg			func_append newdeplibs " $a_deplib"
9701fbc03982Smrg			a_deplib=
9702ed6f5d66Smrg			break 2
9703ed6f5d66Smrg		      fi
9704ed6f5d66Smrg		  done
9705ed6f5d66Smrg		done
9706ed6f5d66Smrg	      fi
9707fbc03982Smrg	      if test -n "$a_deplib"; then
9708ed6f5d66Smrg		droppeddeps=yes
9709a3680546Smrg		func_warning "Linker path does not have real file for library $a_deplib."
9710a3680546Smrg		func_warning "I have the capability to make that library automatically link in when"
9711a3680546Smrg		func_warning "you link to this library.  But I can only do this if you have a"
9712a3680546Smrg		func_warning "shared version of the library, which you do not appear to have"
9713a3680546Smrg		func_warning "because I did check the linker path looking for a file starting"
9714fbc03982Smrg		if test -z "$potlib"; then
9715a3680546Smrg		  func_warning "with $libname but no candidates were found. (...for file magic test)"
9716ed6f5d66Smrg		else
9717a3680546Smrg		  func_warning "with $libname and none of the candidates passed a file format test"
9718a3680546Smrg		  func_warning "using a file magic. Last file checked: $potlib"
9719ed6f5d66Smrg		fi
9720ed6f5d66Smrg	      fi
9721ed6f5d66Smrg	      ;;
9722ed6f5d66Smrg	    *)
9723ed6f5d66Smrg	      # Add a -L argument.
9724ed6f5d66Smrg	      func_append newdeplibs " $a_deplib"
9725ed6f5d66Smrg	      ;;
9726ed6f5d66Smrg	    esac
9727ed6f5d66Smrg	  done # Gone through all deplibs.
9728ed6f5d66Smrg	  ;;
9729ed6f5d66Smrg	match_pattern*)
9730ed6f5d66Smrg	  set dummy $deplibs_check_method; shift
9731ed6f5d66Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9732ed6f5d66Smrg	  for a_deplib in $deplibs; do
9733ed6f5d66Smrg	    case $a_deplib in
9734ed6f5d66Smrg	    -l*)
9735ed6f5d66Smrg	      func_stripname -l '' "$a_deplib"
9736ed6f5d66Smrg	      name=$func_stripname_result
9737fbc03982Smrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9738ed6f5d66Smrg		case " $predeps $postdeps " in
9739ed6f5d66Smrg		*" $a_deplib "*)
9740ed6f5d66Smrg		  func_append newdeplibs " $a_deplib"
9741fbc03982Smrg		  a_deplib=
9742ed6f5d66Smrg		  ;;
9743ed6f5d66Smrg		esac
9744ed6f5d66Smrg	      fi
9745fbc03982Smrg	      if test -n "$a_deplib"; then
9746ed6f5d66Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
9747ed6f5d66Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9748ed6f5d66Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
9749ed6f5d66Smrg		  for potent_lib in $potential_libs; do
9750fbc03982Smrg		    potlib=$potent_lib # see symlink-check above in file_magic test
9751ed6f5d66Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
9752ed6f5d66Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
9753ed6f5d66Smrg		      func_append newdeplibs " $a_deplib"
9754fbc03982Smrg		      a_deplib=
9755ed6f5d66Smrg		      break 2
9756ed6f5d66Smrg		    fi
9757ed6f5d66Smrg		  done
9758ed6f5d66Smrg		done
9759ed6f5d66Smrg	      fi
9760fbc03982Smrg	      if test -n "$a_deplib"; then
9761ed6f5d66Smrg		droppeddeps=yes
9762a3680546Smrg		func_warning "Linker path does not have real file for library $a_deplib."
9763a3680546Smrg		func_warning "I have the capability to make that library automatically link in when"
9764a3680546Smrg		func_warning "you link to this library.  But I can only do this if you have a"
9765a3680546Smrg		func_warning "shared version of the library, which you do not appear to have"
9766a3680546Smrg		func_warning "because I did check the linker path looking for a file starting"
9767fbc03982Smrg		if test -z "$potlib"; then
9768a3680546Smrg		  func_warning "with $libname but no candidates were found. (...for regex pattern test)"
9769ed6f5d66Smrg		else
9770a3680546Smrg		  func_warning "with $libname and none of the candidates passed a file format test"
9771a3680546Smrg		  func_warning "using a regex pattern. Last file checked: $potlib"
9772ed6f5d66Smrg		fi
9773ed6f5d66Smrg	      fi
9774ed6f5d66Smrg	      ;;
9775ed6f5d66Smrg	    *)
9776ed6f5d66Smrg	      # Add a -L argument.
9777ed6f5d66Smrg	      func_append newdeplibs " $a_deplib"
9778ed6f5d66Smrg	      ;;
9779ed6f5d66Smrg	    esac
9780ed6f5d66Smrg	  done # Gone through all deplibs.
9781ed6f5d66Smrg	  ;;
9782ed6f5d66Smrg	none | unknown | *)
9783fbc03982Smrg	  newdeplibs=
9784ed6f5d66Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
9785fbc03982Smrg	  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9786fbc03982Smrg	    for i in $predeps $postdeps; do
9787ed6f5d66Smrg	      # can't use Xsed below, because $i might contain '/'
9788fbc03982Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
9789ed6f5d66Smrg	    done
9790ed6f5d66Smrg	  fi
9791ed6f5d66Smrg	  case $tmp_deplibs in
9792ed6f5d66Smrg	  *[!\	\ ]*)
9793ed6f5d66Smrg	    echo
9794fbc03982Smrg	    if test none = "$deplibs_check_method"; then
9795a3680546Smrg	      func_warning "Inter-library dependencies are not supported in this platform."
9796ed6f5d66Smrg	    else
9797a3680546Smrg	      func_warning "Inter-library dependencies are not known to be supported."
9798ed6f5d66Smrg	    fi
9799a3680546Smrg	    func_warning "All declared inter-library dependencies are being dropped."
9800ed6f5d66Smrg	    droppeddeps=yes
9801ed6f5d66Smrg	    ;;
9802ed6f5d66Smrg	  esac
9803ed6f5d66Smrg	  ;;
9804ed6f5d66Smrg	esac
9805ed6f5d66Smrg	versuffix=$versuffix_save
9806ed6f5d66Smrg	major=$major_save
9807ed6f5d66Smrg	release=$release_save
9808ed6f5d66Smrg	libname=$libname_save
9809ed6f5d66Smrg	name=$name_save
9810ed6f5d66Smrg
9811ed6f5d66Smrg	case $host in
9812ed6f5d66Smrg	*-*-rhapsody* | *-*-darwin1.[012])
9813ed6f5d66Smrg	  # On Rhapsody replace the C library with the System framework
9814ed6f5d66Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
9815ed6f5d66Smrg	  ;;
9816ed6f5d66Smrg	esac
9817ed6f5d66Smrg
9818fbc03982Smrg	if test yes = "$droppeddeps"; then
9819fbc03982Smrg	  if test yes = "$module"; then
9820a3680546Smrg	    func_warning "libtool could not satisfy all declared inter-library"
9821a3680546Smrg	    func_warning "dependencies of module $libname.  Therefore, libtool will create"
9822a3680546Smrg	    func_warning "a static module, that should work as long as the dlopening"
9823a3680546Smrg	    func_warning "application is linked with the -dlopen flag."
9824ed6f5d66Smrg	    if test -z "$global_symbol_pipe"; then
9825a3680546Smrg	      func_warning "However, this would only work if libtool was able to extract symbol"
9826a3680546Smrg	      func_warning "lists from a program, using 'nm' or equivalent, but libtool could"
9827a3680546Smrg	      func_warning "not find such a program.  So, this module is probably useless."
9828a3680546Smrg	      func_warning "'nm' from GNU binutils and a full rebuild may help."
9829ed6f5d66Smrg	    fi
9830fbc03982Smrg	    if test no = "$build_old_libs"; then
9831fbc03982Smrg	      oldlibs=$output_objdir/$libname.$libext
9832ed6f5d66Smrg	      build_libtool_libs=module
9833ed6f5d66Smrg	      build_old_libs=yes
9834ed6f5d66Smrg	    else
9835ed6f5d66Smrg	      build_libtool_libs=no
9836ed6f5d66Smrg	    fi
9837ed6f5d66Smrg	  else
9838ed6f5d66Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
9839ed6f5d66Smrg	    echo "*** automatically added whenever a program is linked with this library"
9840ed6f5d66Smrg	    echo "*** or is declared to -dlopen it."
9841ed6f5d66Smrg
9842fbc03982Smrg	    if test no = "$allow_undefined"; then
9843ed6f5d66Smrg	      echo
9844ed6f5d66Smrg	      echo "*** Since this library must not contain undefined symbols,"
9845ed6f5d66Smrg	      echo "*** because either the platform does not support them or"
9846ed6f5d66Smrg	      echo "*** it was explicitly requested with -no-undefined,"
9847ed6f5d66Smrg	      echo "*** libtool will only create a static version of it."
9848fbc03982Smrg	      if test no = "$build_old_libs"; then
9849fbc03982Smrg		oldlibs=$output_objdir/$libname.$libext
9850ed6f5d66Smrg		build_libtool_libs=module
9851ed6f5d66Smrg		build_old_libs=yes
9852ed6f5d66Smrg	      else
9853ed6f5d66Smrg		build_libtool_libs=no
9854ed6f5d66Smrg	      fi
9855ed6f5d66Smrg	    fi
9856ed6f5d66Smrg	  fi
9857ed6f5d66Smrg	fi
9858ed6f5d66Smrg	# Done checking deplibs!
9859ed6f5d66Smrg	deplibs=$newdeplibs
9860ed6f5d66Smrg      fi
9861ed6f5d66Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
9862ed6f5d66Smrg      case $host in
9863ed6f5d66Smrg	*-*-darwin*)
9864ed6f5d66Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9865ed6f5d66Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9866ed6f5d66Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9867ed6f5d66Smrg	  ;;
9868ed6f5d66Smrg      esac
9869ed6f5d66Smrg
9870ed6f5d66Smrg      # move library search paths that coincide with paths to not yet
9871ed6f5d66Smrg      # installed libraries to the beginning of the library search list
9872ed6f5d66Smrg      new_libs=
9873ed6f5d66Smrg      for path in $notinst_path; do
9874ed6f5d66Smrg	case " $new_libs " in
9875ed6f5d66Smrg	*" -L$path/$objdir "*) ;;
9876ed6f5d66Smrg	*)
9877ed6f5d66Smrg	  case " $deplibs " in
9878ed6f5d66Smrg	  *" -L$path/$objdir "*)
9879ed6f5d66Smrg	    func_append new_libs " -L$path/$objdir" ;;
9880ed6f5d66Smrg	  esac
9881ed6f5d66Smrg	  ;;
9882ed6f5d66Smrg	esac
9883ed6f5d66Smrg      done
9884ed6f5d66Smrg      for deplib in $deplibs; do
9885ed6f5d66Smrg	case $deplib in
9886ed6f5d66Smrg	-L*)
9887ed6f5d66Smrg	  case " $new_libs " in
9888ed6f5d66Smrg	  *" $deplib "*) ;;
9889ed6f5d66Smrg	  *) func_append new_libs " $deplib" ;;
9890ed6f5d66Smrg	  esac
9891ed6f5d66Smrg	  ;;
9892ed6f5d66Smrg	*) func_append new_libs " $deplib" ;;
9893ed6f5d66Smrg	esac
9894ed6f5d66Smrg      done
9895fbc03982Smrg      deplibs=$new_libs
9896ed6f5d66Smrg
9897ed6f5d66Smrg      # All the library-specific variables (install_libdir is set above).
9898ed6f5d66Smrg      library_names=
9899ed6f5d66Smrg      old_library=
9900ed6f5d66Smrg      dlname=
9901ed6f5d66Smrg
9902ed6f5d66Smrg      # Test again, we may have decided not to build it any more
9903fbc03982Smrg      if test yes = "$build_libtool_libs"; then
9904fbc03982Smrg	# Remove $wl instances when linking with ld.
9905ed6f5d66Smrg	# FIXME: should test the right _cmds variable.
9906ed6f5d66Smrg	case $archive_cmds in
9907ed6f5d66Smrg	  *\$LD\ *) wl= ;;
9908ed6f5d66Smrg        esac
9909fbc03982Smrg	if test yes = "$hardcode_into_libs"; then
9910ed6f5d66Smrg	  # Hardcode the library paths
9911ed6f5d66Smrg	  hardcode_libdirs=
9912ed6f5d66Smrg	  dep_rpath=
9913fbc03982Smrg	  rpath=$finalize_rpath
9914fbc03982Smrg	  test relink = "$opt_mode" || rpath=$compile_rpath$rpath
9915ed6f5d66Smrg	  for libdir in $rpath; do
9916ed6f5d66Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
9917ed6f5d66Smrg	      if test -n "$hardcode_libdir_separator"; then
9918ed6f5d66Smrg		func_replace_sysroot "$libdir"
9919ed6f5d66Smrg		libdir=$func_replace_sysroot_result
9920ed6f5d66Smrg		if test -z "$hardcode_libdirs"; then
9921fbc03982Smrg		  hardcode_libdirs=$libdir
9922ed6f5d66Smrg		else
9923ed6f5d66Smrg		  # Just accumulate the unique libdirs.
9924ed6f5d66Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
9925ed6f5d66Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
9926ed6f5d66Smrg		    ;;
9927ed6f5d66Smrg		  *)
9928ed6f5d66Smrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
9929ed6f5d66Smrg		    ;;
9930ed6f5d66Smrg		  esac
9931ed6f5d66Smrg		fi
9932ed6f5d66Smrg	      else
9933ed6f5d66Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
9934ed6f5d66Smrg		func_append dep_rpath " $flag"
9935ed6f5d66Smrg	      fi
9936ed6f5d66Smrg	    elif test -n "$runpath_var"; then
9937ed6f5d66Smrg	      case "$perm_rpath " in
9938ed6f5d66Smrg	      *" $libdir "*) ;;
9939ed6f5d66Smrg	      *) func_append perm_rpath " $libdir" ;;
9940ed6f5d66Smrg	      esac
9941ed6f5d66Smrg	    fi
9942ed6f5d66Smrg	  done
9943ed6f5d66Smrg	  # Substitute the hardcoded libdirs into the rpath.
9944ed6f5d66Smrg	  if test -n "$hardcode_libdir_separator" &&
9945ed6f5d66Smrg	     test -n "$hardcode_libdirs"; then
9946fbc03982Smrg	    libdir=$hardcode_libdirs
9947ed6f5d66Smrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
9948ed6f5d66Smrg	  fi
9949ed6f5d66Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
9950ed6f5d66Smrg	    # We should set the runpath_var.
9951ed6f5d66Smrg	    rpath=
9952ed6f5d66Smrg	    for dir in $perm_rpath; do
9953ed6f5d66Smrg	      func_append rpath "$dir:"
9954ed6f5d66Smrg	    done
9955ed6f5d66Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
9956ed6f5d66Smrg	  fi
9957ed6f5d66Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
9958ed6f5d66Smrg	fi
9959ed6f5d66Smrg
9960fbc03982Smrg	shlibpath=$finalize_shlibpath
9961fbc03982Smrg	test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
9962ed6f5d66Smrg	if test -n "$shlibpath"; then
9963ed6f5d66Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
9964ed6f5d66Smrg	fi
9965ed6f5d66Smrg
9966ed6f5d66Smrg	# Get the real and link names of the library.
9967ed6f5d66Smrg	eval shared_ext=\"$shrext_cmds\"
9968ed6f5d66Smrg	eval library_names=\"$library_names_spec\"
9969ed6f5d66Smrg	set dummy $library_names
9970ed6f5d66Smrg	shift
9971fbc03982Smrg	realname=$1
9972ed6f5d66Smrg	shift
9973ed6f5d66Smrg
9974ed6f5d66Smrg	if test -n "$soname_spec"; then
9975ed6f5d66Smrg	  eval soname=\"$soname_spec\"
9976ed6f5d66Smrg	else
9977fbc03982Smrg	  soname=$realname
9978ed6f5d66Smrg	fi
9979ed6f5d66Smrg	if test -z "$dlname"; then
9980ed6f5d66Smrg	  dlname=$soname
9981ed6f5d66Smrg	fi
9982ed6f5d66Smrg
9983fbc03982Smrg	lib=$output_objdir/$realname
9984ed6f5d66Smrg	linknames=
9985ed6f5d66Smrg	for link
9986ed6f5d66Smrg	do
9987ed6f5d66Smrg	  func_append linknames " $link"
9988ed6f5d66Smrg	done
9989ed6f5d66Smrg
9990ed6f5d66Smrg	# Use standard objects if they are pic
9991ed6f5d66Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
9992ed6f5d66Smrg	test "X$libobjs" = "X " && libobjs=
9993ed6f5d66Smrg
9994ed6f5d66Smrg	delfiles=
9995ed6f5d66Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
9996ed6f5d66Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
9997fbc03982Smrg	  export_symbols=$output_objdir/$libname.uexp
9998ed6f5d66Smrg	  func_append delfiles " $export_symbols"
9999ed6f5d66Smrg	fi
10000ed6f5d66Smrg
10001ed6f5d66Smrg	orig_export_symbols=
10002ed6f5d66Smrg	case $host_os in
10003a3680546Smrg	cygwin* | mingw* | windows* | cegcc*)
10004ed6f5d66Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
10005ed6f5d66Smrg	    # exporting using user supplied symfile
10006fbc03982Smrg	    func_dll_def_p "$export_symbols" || {
10007ed6f5d66Smrg	      # and it's NOT already a .def file. Must figure out
10008ed6f5d66Smrg	      # which of the given symbols are data symbols and tag
10009ed6f5d66Smrg	      # them as such. So, trigger use of export_symbols_cmds.
10010ed6f5d66Smrg	      # export_symbols gets reassigned inside the "prepare
10011ed6f5d66Smrg	      # the list of exported symbols" if statement, so the
10012ed6f5d66Smrg	      # include_expsyms logic still works.
10013fbc03982Smrg	      orig_export_symbols=$export_symbols
10014ed6f5d66Smrg	      export_symbols=
10015ed6f5d66Smrg	      always_export_symbols=yes
10016fbc03982Smrg	    }
10017ed6f5d66Smrg	  fi
10018ed6f5d66Smrg	  ;;
10019ed6f5d66Smrg	esac
10020ed6f5d66Smrg
10021ed6f5d66Smrg	# Prepare the list of exported symbols
10022ed6f5d66Smrg	if test -z "$export_symbols"; then
10023fbc03982Smrg	  if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
10024fbc03982Smrg	    func_verbose "generating symbol list for '$libname.la'"
10025fbc03982Smrg	    export_symbols=$output_objdir/$libname.exp
10026ed6f5d66Smrg	    $opt_dry_run || $RM $export_symbols
10027ed6f5d66Smrg	    cmds=$export_symbols_cmds
10028fbc03982Smrg	    save_ifs=$IFS; IFS='~'
10029ed6f5d66Smrg	    for cmd1 in $cmds; do
10030fbc03982Smrg	      IFS=$save_ifs
10031ed6f5d66Smrg	      # Take the normal branch if the nm_file_list_spec branch
10032ed6f5d66Smrg	      # doesn't work or if tool conversion is not needed.
10033ed6f5d66Smrg	      case $nm_file_list_spec~$to_tool_file_cmd in
10034ed6f5d66Smrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
10035ed6f5d66Smrg		  try_normal_branch=yes
10036ed6f5d66Smrg		  eval cmd=\"$cmd1\"
10037ed6f5d66Smrg		  func_len " $cmd"
10038ed6f5d66Smrg		  len=$func_len_result
10039ed6f5d66Smrg		  ;;
10040ed6f5d66Smrg		*)
10041ed6f5d66Smrg		  try_normal_branch=no
10042ed6f5d66Smrg		  ;;
10043ed6f5d66Smrg	      esac
10044fbc03982Smrg	      if test yes = "$try_normal_branch" \
10045ed6f5d66Smrg		 && { test "$len" -lt "$max_cmd_len" \
10046ed6f5d66Smrg		      || test "$max_cmd_len" -le -1; }
10047ed6f5d66Smrg	      then
10048ed6f5d66Smrg		func_show_eval "$cmd" 'exit $?'
10049ed6f5d66Smrg		skipped_export=false
10050ed6f5d66Smrg	      elif test -n "$nm_file_list_spec"; then
10051ed6f5d66Smrg		func_basename "$output"
10052ed6f5d66Smrg		output_la=$func_basename_result
10053ed6f5d66Smrg		save_libobjs=$libobjs
10054ed6f5d66Smrg		save_output=$output
10055fbc03982Smrg		output=$output_objdir/$output_la.nm
10056ed6f5d66Smrg		func_to_tool_file "$output"
10057ed6f5d66Smrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
10058ed6f5d66Smrg		func_append delfiles " $output"
10059ed6f5d66Smrg		func_verbose "creating $NM input file list: $output"
10060ed6f5d66Smrg		for obj in $save_libobjs; do
10061ed6f5d66Smrg		  func_to_tool_file "$obj"
10062ed6f5d66Smrg		  $ECHO "$func_to_tool_file_result"
10063ed6f5d66Smrg		done > "$output"
10064ed6f5d66Smrg		eval cmd=\"$cmd1\"
10065ed6f5d66Smrg		func_show_eval "$cmd" 'exit $?'
10066ed6f5d66Smrg		output=$save_output
10067ed6f5d66Smrg		libobjs=$save_libobjs
10068ed6f5d66Smrg		skipped_export=false
10069ed6f5d66Smrg	      else
10070ed6f5d66Smrg		# The command line is too long to execute in one step.
10071ed6f5d66Smrg		func_verbose "using reloadable object file for export list..."
10072ed6f5d66Smrg		skipped_export=:
10073ed6f5d66Smrg		# Break out early, otherwise skipped_export may be
10074ed6f5d66Smrg		# set to false by a later but shorter cmd.
10075ed6f5d66Smrg		break
10076ed6f5d66Smrg	      fi
10077ed6f5d66Smrg	    done
10078fbc03982Smrg	    IFS=$save_ifs
10079fbc03982Smrg	    if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
10080ed6f5d66Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
10081ed6f5d66Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
10082ed6f5d66Smrg	    fi
10083ed6f5d66Smrg	  fi
10084ed6f5d66Smrg	fi
10085ed6f5d66Smrg
10086ed6f5d66Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
10087fbc03982Smrg	  tmp_export_symbols=$export_symbols
10088fbc03982Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
10089ed6f5d66Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
10090ed6f5d66Smrg	fi
10091ed6f5d66Smrg
10092fbc03982Smrg	if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
10093ed6f5d66Smrg	  # The given exports_symbols file has to be filtered, so filter it.
10094fbc03982Smrg	  func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
10095ed6f5d66Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
10096fbc03982Smrg	  # 's' commands, which not all seds can handle. GNU sed should be fine
10097ed6f5d66Smrg	  # though. Also, the filter scales superlinearly with the number of
10098ed6f5d66Smrg	  # global variables. join(1) would be nice here, but unfortunately
10099ed6f5d66Smrg	  # isn't a blessed tool.
10100ed6f5d66Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
10101ed6f5d66Smrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
10102ed6f5d66Smrg	  export_symbols=$output_objdir/$libname.def
10103ed6f5d66Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
10104ed6f5d66Smrg	fi
10105ed6f5d66Smrg
10106ed6f5d66Smrg	tmp_deplibs=
10107ed6f5d66Smrg	for test_deplib in $deplibs; do
10108ed6f5d66Smrg	  case " $convenience " in
10109ed6f5d66Smrg	  *" $test_deplib "*) ;;
10110ed6f5d66Smrg	  *)
10111ed6f5d66Smrg	    func_append tmp_deplibs " $test_deplib"
10112ed6f5d66Smrg	    ;;
10113ed6f5d66Smrg	  esac
10114ed6f5d66Smrg	done
10115fbc03982Smrg	deplibs=$tmp_deplibs
10116ed6f5d66Smrg
10117ed6f5d66Smrg	if test -n "$convenience"; then
10118ed6f5d66Smrg	  if test -n "$whole_archive_flag_spec" &&
10119fbc03982Smrg	    test yes = "$compiler_needs_object" &&
10120ed6f5d66Smrg	    test -z "$libobjs"; then
10121ed6f5d66Smrg	    # extract the archives, so we have objects to list.
10122ed6f5d66Smrg	    # TODO: could optimize this to just extract one archive.
10123ed6f5d66Smrg	    whole_archive_flag_spec=
10124ed6f5d66Smrg	  fi
10125ed6f5d66Smrg	  if test -n "$whole_archive_flag_spec"; then
10126ed6f5d66Smrg	    save_libobjs=$libobjs
10127ed6f5d66Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
10128ed6f5d66Smrg	    test "X$libobjs" = "X " && libobjs=
10129ed6f5d66Smrg	  else
10130fbc03982Smrg	    gentop=$output_objdir/${outputname}x
10131ed6f5d66Smrg	    func_append generated " $gentop"
10132ed6f5d66Smrg
10133ed6f5d66Smrg	    func_extract_archives $gentop $convenience
10134ed6f5d66Smrg	    func_append libobjs " $func_extract_archives_result"
10135ed6f5d66Smrg	    test "X$libobjs" = "X " && libobjs=
10136ed6f5d66Smrg	  fi
10137ed6f5d66Smrg	fi
10138ed6f5d66Smrg
10139fbc03982Smrg	if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
10140ed6f5d66Smrg	  eval flag=\"$thread_safe_flag_spec\"
10141ed6f5d66Smrg	  func_append linker_flags " $flag"
10142ed6f5d66Smrg	fi
10143ed6f5d66Smrg
10144ed6f5d66Smrg	# Make a backup of the uninstalled library when relinking
10145fbc03982Smrg	if test relink = "$opt_mode"; then
10146ed6f5d66Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
10147ed6f5d66Smrg	fi
10148ed6f5d66Smrg
10149ed6f5d66Smrg	# Do each of the archive commands.
10150fbc03982Smrg	if test yes = "$module" && test -n "$module_cmds"; then
10151ed6f5d66Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
10152ed6f5d66Smrg	    eval test_cmds=\"$module_expsym_cmds\"
10153ed6f5d66Smrg	    cmds=$module_expsym_cmds
10154ed6f5d66Smrg	  else
10155ed6f5d66Smrg	    eval test_cmds=\"$module_cmds\"
10156ed6f5d66Smrg	    cmds=$module_cmds
10157ed6f5d66Smrg	  fi
10158ed6f5d66Smrg	else
10159ed6f5d66Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10160ed6f5d66Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
10161ed6f5d66Smrg	    cmds=$archive_expsym_cmds
10162ed6f5d66Smrg	  else
10163ed6f5d66Smrg	    eval test_cmds=\"$archive_cmds\"
10164ed6f5d66Smrg	    cmds=$archive_cmds
10165ed6f5d66Smrg	  fi
10166ed6f5d66Smrg	fi
10167ed6f5d66Smrg
10168fbc03982Smrg	if test : != "$skipped_export" &&
10169ed6f5d66Smrg	   func_len " $test_cmds" &&
10170ed6f5d66Smrg	   len=$func_len_result &&
10171ed6f5d66Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
10172ed6f5d66Smrg	  :
10173ed6f5d66Smrg	else
10174ed6f5d66Smrg	  # The command line is too long to link in one step, link piecewise
10175ed6f5d66Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
10176ed6f5d66Smrg	  # script.
10177ed6f5d66Smrg
10178ed6f5d66Smrg	  # Save the value of $output and $libobjs because we want to
10179ed6f5d66Smrg	  # use them later.  If we have whole_archive_flag_spec, we
10180ed6f5d66Smrg	  # want to use save_libobjs as it was before
10181ed6f5d66Smrg	  # whole_archive_flag_spec was expanded, because we can't
10182ed6f5d66Smrg	  # assume the linker understands whole_archive_flag_spec.
10183ed6f5d66Smrg	  # This may have to be revisited, in case too many
10184ed6f5d66Smrg	  # convenience libraries get linked in and end up exceeding
10185ed6f5d66Smrg	  # the spec.
10186ed6f5d66Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
10187ed6f5d66Smrg	    save_libobjs=$libobjs
10188ed6f5d66Smrg	  fi
10189ed6f5d66Smrg	  save_output=$output
10190ed6f5d66Smrg	  func_basename "$output"
10191ed6f5d66Smrg	  output_la=$func_basename_result
10192ed6f5d66Smrg
10193ed6f5d66Smrg	  # Clear the reloadable object creation command queue and
10194ed6f5d66Smrg	  # initialize k to one.
10195ed6f5d66Smrg	  test_cmds=
10196ed6f5d66Smrg	  concat_cmds=
10197ed6f5d66Smrg	  objlist=
10198ed6f5d66Smrg	  last_robj=
10199ed6f5d66Smrg	  k=1
10200ed6f5d66Smrg
10201a3680546Smrg	  if test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
10202fbc03982Smrg	    output=$output_objdir/$output_la.lnk
10203ed6f5d66Smrg	    func_verbose "creating linker input file list: $output"
10204ed6f5d66Smrg	    : > $output
10205ed6f5d66Smrg	    set x $save_libobjs
10206ed6f5d66Smrg	    shift
10207ed6f5d66Smrg	    firstobj=
10208fbc03982Smrg	    if test yes = "$compiler_needs_object"; then
10209ed6f5d66Smrg	      firstobj="$1 "
10210ed6f5d66Smrg	      shift
10211ed6f5d66Smrg	    fi
10212ed6f5d66Smrg	    for obj
10213ed6f5d66Smrg	    do
10214ed6f5d66Smrg	      func_to_tool_file "$obj"
10215ed6f5d66Smrg	      $ECHO "$func_to_tool_file_result" >> $output
10216ed6f5d66Smrg	    done
10217ed6f5d66Smrg	    func_append delfiles " $output"
10218ed6f5d66Smrg	    func_to_tool_file "$output"
10219ed6f5d66Smrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
10220a3680546Smrg	  elif test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
10221a3680546Smrg	    output=$output_objdir/$output_la.lnkscript
10222a3680546Smrg	    func_verbose "creating GNU ld script: $output"
10223a3680546Smrg	    echo 'INPUT (' > $output
10224a3680546Smrg	    for obj in $save_libobjs
10225a3680546Smrg	    do
10226a3680546Smrg	      func_to_tool_file "$obj"
10227a3680546Smrg	      $ECHO "$func_to_tool_file_result" >> $output
10228a3680546Smrg	    done
10229a3680546Smrg	    echo ')' >> $output
10230a3680546Smrg	    func_append delfiles " $output"
10231a3680546Smrg	    func_to_tool_file "$output"
10232a3680546Smrg	    output=$func_to_tool_file_result
10233ed6f5d66Smrg	  else
10234ed6f5d66Smrg	    if test -n "$save_libobjs"; then
10235ed6f5d66Smrg	      func_verbose "creating reloadable object files..."
10236fbc03982Smrg	      output=$output_objdir/$output_la-$k.$objext
10237ed6f5d66Smrg	      eval test_cmds=\"$reload_cmds\"
10238ed6f5d66Smrg	      func_len " $test_cmds"
10239ed6f5d66Smrg	      len0=$func_len_result
10240ed6f5d66Smrg	      len=$len0
10241ed6f5d66Smrg
10242ed6f5d66Smrg	      # Loop over the list of objects to be linked.
10243ed6f5d66Smrg	      for obj in $save_libobjs
10244ed6f5d66Smrg	      do
10245ed6f5d66Smrg		func_len " $obj"
10246ed6f5d66Smrg		func_arith $len + $func_len_result
10247ed6f5d66Smrg		len=$func_arith_result
10248fbc03982Smrg		if test -z "$objlist" ||
10249ed6f5d66Smrg		   test "$len" -lt "$max_cmd_len"; then
10250ed6f5d66Smrg		  func_append objlist " $obj"
10251ed6f5d66Smrg		else
10252ed6f5d66Smrg		  # The command $test_cmds is almost too long, add a
10253ed6f5d66Smrg		  # command to the queue.
10254fbc03982Smrg		  if test 1 -eq "$k"; then
10255ed6f5d66Smrg		    # The first file doesn't have a previous command to add.
10256ed6f5d66Smrg		    reload_objs=$objlist
10257ed6f5d66Smrg		    eval concat_cmds=\"$reload_cmds\"
10258ed6f5d66Smrg		  else
10259ed6f5d66Smrg		    # All subsequent reloadable object files will link in
10260ed6f5d66Smrg		    # the last one created.
10261ed6f5d66Smrg		    reload_objs="$objlist $last_robj"
10262ed6f5d66Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
10263ed6f5d66Smrg		  fi
10264fbc03982Smrg		  last_robj=$output_objdir/$output_la-$k.$objext
10265ed6f5d66Smrg		  func_arith $k + 1
10266ed6f5d66Smrg		  k=$func_arith_result
10267fbc03982Smrg		  output=$output_objdir/$output_la-$k.$objext
10268ed6f5d66Smrg		  objlist=" $obj"
10269ed6f5d66Smrg		  func_len " $last_robj"
10270ed6f5d66Smrg		  func_arith $len0 + $func_len_result
10271ed6f5d66Smrg		  len=$func_arith_result
10272ed6f5d66Smrg		fi
10273ed6f5d66Smrg	      done
10274ed6f5d66Smrg	      # Handle the remaining objects by creating one last
10275ed6f5d66Smrg	      # reloadable object file.  All subsequent reloadable object
10276ed6f5d66Smrg	      # files will link in the last one created.
10277ed6f5d66Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
10278ed6f5d66Smrg	      reload_objs="$objlist $last_robj"
10279fbc03982Smrg	      eval concat_cmds=\"\$concat_cmds$reload_cmds\"
10280ed6f5d66Smrg	      if test -n "$last_robj"; then
10281fbc03982Smrg	        eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
10282ed6f5d66Smrg	      fi
10283ed6f5d66Smrg	      func_append delfiles " $output"
10284ed6f5d66Smrg
10285ed6f5d66Smrg	    else
10286ed6f5d66Smrg	      output=
10287ed6f5d66Smrg	    fi
10288ed6f5d66Smrg
10289fbc03982Smrg	    ${skipped_export-false} && {
10290fbc03982Smrg	      func_verbose "generating symbol list for '$libname.la'"
10291fbc03982Smrg	      export_symbols=$output_objdir/$libname.exp
10292ed6f5d66Smrg	      $opt_dry_run || $RM $export_symbols
10293ed6f5d66Smrg	      libobjs=$output
10294ed6f5d66Smrg	      # Append the command to create the export file.
10295ed6f5d66Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
10296ed6f5d66Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
10297ed6f5d66Smrg	      if test -n "$last_robj"; then
10298ed6f5d66Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
10299ed6f5d66Smrg	      fi
10300fbc03982Smrg	    }
10301ed6f5d66Smrg
10302ed6f5d66Smrg	    test -n "$save_libobjs" &&
10303ed6f5d66Smrg	      func_verbose "creating a temporary reloadable object file: $output"
10304ed6f5d66Smrg
10305ed6f5d66Smrg	    # Loop through the commands generated above and execute them.
10306fbc03982Smrg	    save_ifs=$IFS; IFS='~'
10307ed6f5d66Smrg	    for cmd in $concat_cmds; do
10308fbc03982Smrg	      IFS=$save_ifs
10309fbc03982Smrg	      $opt_quiet || {
103103d05230fSmrg		  func_quote_arg expand,pretty "$cmd"
103113d05230fSmrg		  eval "func_echo $func_quote_arg_result"
10312ed6f5d66Smrg	      }
10313ed6f5d66Smrg	      $opt_dry_run || eval "$cmd" || {
10314ed6f5d66Smrg		lt_exit=$?
10315ed6f5d66Smrg
10316ed6f5d66Smrg		# Restore the uninstalled library and exit
10317fbc03982Smrg		if test relink = "$opt_mode"; then
10318ed6f5d66Smrg		  ( cd "$output_objdir" && \
10319ed6f5d66Smrg		    $RM "${realname}T" && \
10320ed6f5d66Smrg		    $MV "${realname}U" "$realname" )
10321ed6f5d66Smrg		fi
10322ed6f5d66Smrg
10323ed6f5d66Smrg		exit $lt_exit
10324ed6f5d66Smrg	      }
10325ed6f5d66Smrg	    done
10326fbc03982Smrg	    IFS=$save_ifs
10327ed6f5d66Smrg
10328ed6f5d66Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
10329ed6f5d66Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
10330ed6f5d66Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
10331ed6f5d66Smrg	    fi
10332ed6f5d66Smrg	  fi
10333ed6f5d66Smrg
10334fbc03982Smrg          ${skipped_export-false} && {
10335ed6f5d66Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
10336fbc03982Smrg	      tmp_export_symbols=$export_symbols
10337fbc03982Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
10338ed6f5d66Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
10339ed6f5d66Smrg	    fi
10340ed6f5d66Smrg
10341ed6f5d66Smrg	    if test -n "$orig_export_symbols"; then
10342ed6f5d66Smrg	      # The given exports_symbols file has to be filtered, so filter it.
10343fbc03982Smrg	      func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
10344ed6f5d66Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
10345fbc03982Smrg	      # 's' commands, which not all seds can handle. GNU sed should be fine
10346ed6f5d66Smrg	      # though. Also, the filter scales superlinearly with the number of
10347ed6f5d66Smrg	      # global variables. join(1) would be nice here, but unfortunately
10348ed6f5d66Smrg	      # isn't a blessed tool.
10349ed6f5d66Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
10350ed6f5d66Smrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
10351ed6f5d66Smrg	      export_symbols=$output_objdir/$libname.def
10352ed6f5d66Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
10353ed6f5d66Smrg	    fi
10354fbc03982Smrg	  }
10355ed6f5d66Smrg
10356ed6f5d66Smrg	  libobjs=$output
10357ed6f5d66Smrg	  # Restore the value of output.
10358ed6f5d66Smrg	  output=$save_output
10359ed6f5d66Smrg
10360ed6f5d66Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
10361ed6f5d66Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
10362ed6f5d66Smrg	    test "X$libobjs" = "X " && libobjs=
10363ed6f5d66Smrg	  fi
10364ed6f5d66Smrg	  # Expand the library linking commands again to reset the
10365ed6f5d66Smrg	  # value of $libobjs for piecewise linking.
10366ed6f5d66Smrg
10367ed6f5d66Smrg	  # Do each of the archive commands.
10368fbc03982Smrg	  if test yes = "$module" && test -n "$module_cmds"; then
10369ed6f5d66Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
10370ed6f5d66Smrg	      cmds=$module_expsym_cmds
10371ed6f5d66Smrg	    else
10372ed6f5d66Smrg	      cmds=$module_cmds
10373ed6f5d66Smrg	    fi
10374ed6f5d66Smrg	  else
10375ed6f5d66Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10376ed6f5d66Smrg	      cmds=$archive_expsym_cmds
10377ed6f5d66Smrg	    else
10378ed6f5d66Smrg	      cmds=$archive_cmds
10379ed6f5d66Smrg	    fi
10380ed6f5d66Smrg	  fi
10381ed6f5d66Smrg	fi
10382ed6f5d66Smrg
10383ed6f5d66Smrg	if test -n "$delfiles"; then
10384ed6f5d66Smrg	  # Append the command to remove temporary files to $cmds.
10385ed6f5d66Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
10386ed6f5d66Smrg	fi
10387ed6f5d66Smrg
10388ed6f5d66Smrg	# Add any objects from preloaded convenience libraries
10389ed6f5d66Smrg	if test -n "$dlprefiles"; then
10390fbc03982Smrg	  gentop=$output_objdir/${outputname}x
10391ed6f5d66Smrg	  func_append generated " $gentop"
10392ed6f5d66Smrg
10393ed6f5d66Smrg	  func_extract_archives $gentop $dlprefiles
10394ed6f5d66Smrg	  func_append libobjs " $func_extract_archives_result"
10395ed6f5d66Smrg	  test "X$libobjs" = "X " && libobjs=
10396ed6f5d66Smrg	fi
10397ed6f5d66Smrg
10398fbc03982Smrg	save_ifs=$IFS; IFS='~'
10399ed6f5d66Smrg	for cmd in $cmds; do
10400fbc03982Smrg	  IFS=$sp$nl
10401ed6f5d66Smrg	  eval cmd=\"$cmd\"
10402fbc03982Smrg	  IFS=$save_ifs
10403fbc03982Smrg	  $opt_quiet || {
104043d05230fSmrg	    func_quote_arg expand,pretty "$cmd"
104053d05230fSmrg	    eval "func_echo $func_quote_arg_result"
10406ed6f5d66Smrg	  }
10407ed6f5d66Smrg	  $opt_dry_run || eval "$cmd" || {
10408ed6f5d66Smrg	    lt_exit=$?
10409ed6f5d66Smrg
10410ed6f5d66Smrg	    # Restore the uninstalled library and exit
10411fbc03982Smrg	    if test relink = "$opt_mode"; then
10412ed6f5d66Smrg	      ( cd "$output_objdir" && \
10413ed6f5d66Smrg	        $RM "${realname}T" && \
10414ed6f5d66Smrg		$MV "${realname}U" "$realname" )
10415ed6f5d66Smrg	    fi
10416ed6f5d66Smrg
10417ed6f5d66Smrg	    exit $lt_exit
10418ed6f5d66Smrg	  }
10419ed6f5d66Smrg	done
10420fbc03982Smrg	IFS=$save_ifs
10421ed6f5d66Smrg
10422ed6f5d66Smrg	# Restore the uninstalled library and exit
10423fbc03982Smrg	if test relink = "$opt_mode"; then
10424ed6f5d66Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
10425ed6f5d66Smrg
10426ed6f5d66Smrg	  if test -n "$convenience"; then
10427ed6f5d66Smrg	    if test -z "$whole_archive_flag_spec"; then
10428ed6f5d66Smrg	      func_show_eval '${RM}r "$gentop"'
10429ed6f5d66Smrg	    fi
10430ed6f5d66Smrg	  fi
10431ed6f5d66Smrg
10432ed6f5d66Smrg	  exit $EXIT_SUCCESS
10433ed6f5d66Smrg	fi
10434ed6f5d66Smrg
10435ed6f5d66Smrg	# Create links to the real library.
10436ed6f5d66Smrg	for linkname in $linknames; do
10437ed6f5d66Smrg	  if test "$realname" != "$linkname"; then
10438ed6f5d66Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
10439ed6f5d66Smrg	  fi
10440ed6f5d66Smrg	done
10441ed6f5d66Smrg
10442ed6f5d66Smrg	# If -module or -export-dynamic was specified, set the dlname.
10443fbc03982Smrg	if test yes = "$module" || test yes = "$export_dynamic"; then
10444ed6f5d66Smrg	  # On all known operating systems, these are identical.
10445fbc03982Smrg	  dlname=$soname
10446ed6f5d66Smrg	fi
10447ed6f5d66Smrg      fi
10448ed6f5d66Smrg      ;;
10449ed6f5d66Smrg
10450ed6f5d66Smrg    obj)
10451fbc03982Smrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
10452fbc03982Smrg	func_warning "'-dlopen' is ignored for objects"
10453ed6f5d66Smrg      fi
10454ed6f5d66Smrg
10455ed6f5d66Smrg      case " $deplibs" in
10456ed6f5d66Smrg      *\ -l* | *\ -L*)
10457fbc03982Smrg	func_warning "'-l' and '-L' are ignored for objects" ;;
10458ed6f5d66Smrg      esac
10459ed6f5d66Smrg
10460ed6f5d66Smrg      test -n "$rpath" && \
10461fbc03982Smrg	func_warning "'-rpath' is ignored for objects"
10462ed6f5d66Smrg
10463ed6f5d66Smrg      test -n "$xrpath" && \
10464fbc03982Smrg	func_warning "'-R' is ignored for objects"
10465ed6f5d66Smrg
10466ed6f5d66Smrg      test -n "$vinfo" && \
10467fbc03982Smrg	func_warning "'-version-info' is ignored for objects"
10468ed6f5d66Smrg
10469ed6f5d66Smrg      test -n "$release" && \
10470fbc03982Smrg	func_warning "'-release' is ignored for objects"
10471ed6f5d66Smrg
10472ed6f5d66Smrg      case $output in
10473ed6f5d66Smrg      *.lo)
10474ed6f5d66Smrg	test -n "$objs$old_deplibs" && \
10475fbc03982Smrg	  func_fatal_error "cannot build library object '$output' from non-libtool objects"
10476ed6f5d66Smrg
10477ed6f5d66Smrg	libobj=$output
10478ed6f5d66Smrg	func_lo2o "$libobj"
10479ed6f5d66Smrg	obj=$func_lo2o_result
10480ed6f5d66Smrg	;;
10481ed6f5d66Smrg      *)
10482ed6f5d66Smrg	libobj=
10483fbc03982Smrg	obj=$output
10484ed6f5d66Smrg	;;
10485ed6f5d66Smrg      esac
10486ed6f5d66Smrg
10487ed6f5d66Smrg      # Delete the old objects.
10488ed6f5d66Smrg      $opt_dry_run || $RM $obj $libobj
10489ed6f5d66Smrg
10490ed6f5d66Smrg      # Objects from convenience libraries.  This assumes
10491ed6f5d66Smrg      # single-version convenience libraries.  Whenever we create
10492ed6f5d66Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
10493ed6f5d66Smrg      # the extraction.
10494ed6f5d66Smrg      reload_conv_objs=
10495ed6f5d66Smrg      gentop=
10496fbc03982Smrg      # if reload_cmds runs $LD directly, get rid of -Wl from
10497fbc03982Smrg      # whole_archive_flag_spec and hope we can get by with turning comma
10498fbc03982Smrg      # into space.
10499fbc03982Smrg      case $reload_cmds in
10500fbc03982Smrg        *\$LD[\ \$]*) wl= ;;
10501fbc03982Smrg      esac
10502ed6f5d66Smrg      if test -n "$convenience"; then
10503ed6f5d66Smrg	if test -n "$whole_archive_flag_spec"; then
10504ed6f5d66Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
10505fbc03982Smrg	  test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
10506fbc03982Smrg	  reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
10507ed6f5d66Smrg	else
10508fbc03982Smrg	  gentop=$output_objdir/${obj}x
10509ed6f5d66Smrg	  func_append generated " $gentop"
10510ed6f5d66Smrg
10511ed6f5d66Smrg	  func_extract_archives $gentop $convenience
10512ed6f5d66Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
10513ed6f5d66Smrg	fi
10514ed6f5d66Smrg      fi
10515ed6f5d66Smrg
10516ed6f5d66Smrg      # If we're not building shared, we need to use non_pic_objs
10517fbc03982Smrg      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
10518ed6f5d66Smrg
10519ed6f5d66Smrg      # Create the old-style object.
10520fbc03982Smrg      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
10521ed6f5d66Smrg
10522fbc03982Smrg      output=$obj
10523ed6f5d66Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
10524ed6f5d66Smrg
10525ed6f5d66Smrg      # Exit if we aren't doing a library object file.
10526ed6f5d66Smrg      if test -z "$libobj"; then
10527ed6f5d66Smrg	if test -n "$gentop"; then
10528ed6f5d66Smrg	  func_show_eval '${RM}r "$gentop"'
10529ed6f5d66Smrg	fi
10530ed6f5d66Smrg
10531ed6f5d66Smrg	exit $EXIT_SUCCESS
10532ed6f5d66Smrg      fi
10533ed6f5d66Smrg
10534fbc03982Smrg      test yes = "$build_libtool_libs" || {
10535ed6f5d66Smrg	if test -n "$gentop"; then
10536ed6f5d66Smrg	  func_show_eval '${RM}r "$gentop"'
10537ed6f5d66Smrg	fi
10538ed6f5d66Smrg
10539ed6f5d66Smrg	# Create an invalid libtool object if no PIC, so that we don't
10540ed6f5d66Smrg	# accidentally link it into a program.
10541ed6f5d66Smrg	# $show "echo timestamp > $libobj"
10542ed6f5d66Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
10543ed6f5d66Smrg	exit $EXIT_SUCCESS
10544fbc03982Smrg      }
10545ed6f5d66Smrg
10546fbc03982Smrg      if test -n "$pic_flag" || test default != "$pic_mode"; then
10547ed6f5d66Smrg	# Only do commands if we really have different PIC objects.
10548ed6f5d66Smrg	reload_objs="$libobjs $reload_conv_objs"
10549fbc03982Smrg	output=$libobj
10550ed6f5d66Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
10551ed6f5d66Smrg      fi
10552ed6f5d66Smrg
10553ed6f5d66Smrg      if test -n "$gentop"; then
10554ed6f5d66Smrg	func_show_eval '${RM}r "$gentop"'
10555ed6f5d66Smrg      fi
10556ed6f5d66Smrg
10557ed6f5d66Smrg      exit $EXIT_SUCCESS
10558ed6f5d66Smrg      ;;
10559ed6f5d66Smrg
10560ed6f5d66Smrg    prog)
10561ed6f5d66Smrg      case $host in
10562ed6f5d66Smrg	*cygwin*) func_stripname '' '.exe' "$output"
10563ed6f5d66Smrg	          output=$func_stripname_result.exe;;
10564ed6f5d66Smrg      esac
10565ed6f5d66Smrg      test -n "$vinfo" && \
10566fbc03982Smrg	func_warning "'-version-info' is ignored for programs"
10567ed6f5d66Smrg
10568ed6f5d66Smrg      test -n "$release" && \
10569fbc03982Smrg	func_warning "'-release' is ignored for programs"
10570ed6f5d66Smrg
10571fbc03982Smrg      $preload \
10572fbc03982Smrg	&& test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
10573fbc03982Smrg	&& func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
10574ed6f5d66Smrg
10575ed6f5d66Smrg      case $host in
10576ed6f5d66Smrg      *-*-rhapsody* | *-*-darwin1.[012])
10577ed6f5d66Smrg	# On Rhapsody replace the C library is the System framework
10578ed6f5d66Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
10579ed6f5d66Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
10580ed6f5d66Smrg	;;
10581ed6f5d66Smrg      esac
10582ed6f5d66Smrg
10583ed6f5d66Smrg      case $host in
10584ed6f5d66Smrg      *-*-darwin*)
10585ed6f5d66Smrg	# Don't allow lazy linking, it breaks C++ global constructors
10586ed6f5d66Smrg	# But is supposedly fixed on 10.4 or later (yay!).
10587fbc03982Smrg	if test CXX = "$tagname"; then
10588ed6f5d66Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
10589ed6f5d66Smrg	    10.[0123])
10590fbc03982Smrg	      func_append compile_command " $wl-bind_at_load"
10591fbc03982Smrg	      func_append finalize_command " $wl-bind_at_load"
10592ed6f5d66Smrg	    ;;
10593ed6f5d66Smrg	  esac
10594ed6f5d66Smrg	fi
10595ed6f5d66Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
10596ed6f5d66Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10597ed6f5d66Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10598ed6f5d66Smrg	;;
10599ed6f5d66Smrg      esac
10600ed6f5d66Smrg
10601ed6f5d66Smrg
10602ed6f5d66Smrg      # move library search paths that coincide with paths to not yet
10603ed6f5d66Smrg      # installed libraries to the beginning of the library search list
10604ed6f5d66Smrg      new_libs=
10605ed6f5d66Smrg      for path in $notinst_path; do
10606ed6f5d66Smrg	case " $new_libs " in
10607ed6f5d66Smrg	*" -L$path/$objdir "*) ;;
10608ed6f5d66Smrg	*)
10609ed6f5d66Smrg	  case " $compile_deplibs " in
10610ed6f5d66Smrg	  *" -L$path/$objdir "*)
10611ed6f5d66Smrg	    func_append new_libs " -L$path/$objdir" ;;
10612ed6f5d66Smrg	  esac
10613ed6f5d66Smrg	  ;;
10614ed6f5d66Smrg	esac
10615ed6f5d66Smrg      done
10616ed6f5d66Smrg      for deplib in $compile_deplibs; do
10617ed6f5d66Smrg	case $deplib in
10618ed6f5d66Smrg	-L*)
10619ed6f5d66Smrg	  case " $new_libs " in
10620ed6f5d66Smrg	  *" $deplib "*) ;;
10621ed6f5d66Smrg	  *) func_append new_libs " $deplib" ;;
10622ed6f5d66Smrg	  esac
10623ed6f5d66Smrg	  ;;
10624ed6f5d66Smrg	*) func_append new_libs " $deplib" ;;
10625ed6f5d66Smrg	esac
10626ed6f5d66Smrg      done
10627fbc03982Smrg      compile_deplibs=$new_libs
10628ed6f5d66Smrg
10629ed6f5d66Smrg
10630ed6f5d66Smrg      func_append compile_command " $compile_deplibs"
10631ed6f5d66Smrg      func_append finalize_command " $finalize_deplibs"
10632ed6f5d66Smrg
10633ed6f5d66Smrg      if test -n "$rpath$xrpath"; then
10634ed6f5d66Smrg	# If the user specified any rpath flags, then add them.
10635ed6f5d66Smrg	for libdir in $rpath $xrpath; do
10636ed6f5d66Smrg	  # This is the magic to use -rpath.
10637ed6f5d66Smrg	  case "$finalize_rpath " in
10638ed6f5d66Smrg	  *" $libdir "*) ;;
10639ed6f5d66Smrg	  *) func_append finalize_rpath " $libdir" ;;
10640ed6f5d66Smrg	  esac
10641ed6f5d66Smrg	done
10642ed6f5d66Smrg      fi
10643ed6f5d66Smrg
10644ed6f5d66Smrg      # Now hardcode the library paths
10645ed6f5d66Smrg      rpath=
10646ed6f5d66Smrg      hardcode_libdirs=
10647ed6f5d66Smrg      for libdir in $compile_rpath $finalize_rpath; do
10648ed6f5d66Smrg	if test -n "$hardcode_libdir_flag_spec"; then
10649ed6f5d66Smrg	  if test -n "$hardcode_libdir_separator"; then
10650ed6f5d66Smrg	    if test -z "$hardcode_libdirs"; then
10651fbc03982Smrg	      hardcode_libdirs=$libdir
10652ed6f5d66Smrg	    else
10653ed6f5d66Smrg	      # Just accumulate the unique libdirs.
10654ed6f5d66Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10655ed6f5d66Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10656ed6f5d66Smrg		;;
10657ed6f5d66Smrg	      *)
10658ed6f5d66Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10659ed6f5d66Smrg		;;
10660ed6f5d66Smrg	      esac
10661ed6f5d66Smrg	    fi
10662ed6f5d66Smrg	  else
10663ed6f5d66Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
10664ed6f5d66Smrg	    func_append rpath " $flag"
10665ed6f5d66Smrg	  fi
10666ed6f5d66Smrg	elif test -n "$runpath_var"; then
10667ed6f5d66Smrg	  case "$perm_rpath " in
10668ed6f5d66Smrg	  *" $libdir "*) ;;
10669ed6f5d66Smrg	  *) func_append perm_rpath " $libdir" ;;
10670ed6f5d66Smrg	  esac
10671ed6f5d66Smrg	fi
10672ed6f5d66Smrg	case $host in
10673a3680546Smrg	*-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*)
10674fbc03982Smrg	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
10675ed6f5d66Smrg	  case :$dllsearchpath: in
10676ed6f5d66Smrg	  *":$libdir:"*) ;;
10677ed6f5d66Smrg	  ::) dllsearchpath=$libdir;;
10678ed6f5d66Smrg	  *) func_append dllsearchpath ":$libdir";;
10679ed6f5d66Smrg	  esac
10680ed6f5d66Smrg	  case :$dllsearchpath: in
10681ed6f5d66Smrg	  *":$testbindir:"*) ;;
10682ed6f5d66Smrg	  ::) dllsearchpath=$testbindir;;
10683ed6f5d66Smrg	  *) func_append dllsearchpath ":$testbindir";;
10684ed6f5d66Smrg	  esac
10685ed6f5d66Smrg	  ;;
10686ed6f5d66Smrg	esac
10687ed6f5d66Smrg      done
10688ed6f5d66Smrg      # Substitute the hardcoded libdirs into the rpath.
10689ed6f5d66Smrg      if test -n "$hardcode_libdir_separator" &&
10690ed6f5d66Smrg	 test -n "$hardcode_libdirs"; then
10691fbc03982Smrg	libdir=$hardcode_libdirs
10692ed6f5d66Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
10693ed6f5d66Smrg      fi
10694fbc03982Smrg      compile_rpath=$rpath
10695ed6f5d66Smrg
10696ed6f5d66Smrg      rpath=
10697ed6f5d66Smrg      hardcode_libdirs=
10698ed6f5d66Smrg      for libdir in $finalize_rpath; do
10699ed6f5d66Smrg	if test -n "$hardcode_libdir_flag_spec"; then
10700ed6f5d66Smrg	  if test -n "$hardcode_libdir_separator"; then
10701ed6f5d66Smrg	    if test -z "$hardcode_libdirs"; then
10702fbc03982Smrg	      hardcode_libdirs=$libdir
10703ed6f5d66Smrg	    else
10704ed6f5d66Smrg	      # Just accumulate the unique libdirs.
10705ed6f5d66Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10706ed6f5d66Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10707ed6f5d66Smrg		;;
10708ed6f5d66Smrg	      *)
10709ed6f5d66Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10710ed6f5d66Smrg		;;
10711ed6f5d66Smrg	      esac
10712ed6f5d66Smrg	    fi
10713ed6f5d66Smrg	  else
10714ed6f5d66Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
10715ed6f5d66Smrg	    func_append rpath " $flag"
10716ed6f5d66Smrg	  fi
10717ed6f5d66Smrg	elif test -n "$runpath_var"; then
10718ed6f5d66Smrg	  case "$finalize_perm_rpath " in
10719ed6f5d66Smrg	  *" $libdir "*) ;;
10720ed6f5d66Smrg	  *) func_append finalize_perm_rpath " $libdir" ;;
10721ed6f5d66Smrg	  esac
10722ed6f5d66Smrg	fi
10723ed6f5d66Smrg      done
10724ed6f5d66Smrg      # Substitute the hardcoded libdirs into the rpath.
10725ed6f5d66Smrg      if test -n "$hardcode_libdir_separator" &&
10726ed6f5d66Smrg	 test -n "$hardcode_libdirs"; then
10727fbc03982Smrg	libdir=$hardcode_libdirs
10728ed6f5d66Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
10729ed6f5d66Smrg      fi
10730fbc03982Smrg      finalize_rpath=$rpath
10731ed6f5d66Smrg
10732fbc03982Smrg      if test -n "$libobjs" && test yes = "$build_old_libs"; then
10733ed6f5d66Smrg	# Transform all the library objects into standard objects.
10734ed6f5d66Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10735ed6f5d66Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10736ed6f5d66Smrg      fi
10737ed6f5d66Smrg
10738fbc03982Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" false
10739ed6f5d66Smrg
10740ed6f5d66Smrg      # template prelinking step
10741ed6f5d66Smrg      if test -n "$prelink_cmds"; then
10742ed6f5d66Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
10743ed6f5d66Smrg      fi
10744ed6f5d66Smrg
10745fbc03982Smrg      wrappers_required=:
10746ed6f5d66Smrg      case $host in
10747ed6f5d66Smrg      *cegcc* | *mingw32ce*)
10748ed6f5d66Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
10749fbc03982Smrg        wrappers_required=false
10750ed6f5d66Smrg        ;;
10751a3680546Smrg      *cygwin* | *mingw* | *windows* )
10752fbc03982Smrg        test yes = "$build_libtool_libs" || wrappers_required=false
10753ed6f5d66Smrg        ;;
10754ed6f5d66Smrg      *)
10755fbc03982Smrg        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
10756fbc03982Smrg          wrappers_required=false
10757ed6f5d66Smrg        fi
10758ed6f5d66Smrg        ;;
10759ed6f5d66Smrg      esac
10760fbc03982Smrg      $wrappers_required || {
10761ed6f5d66Smrg	# Replace the output file specification.
10762ed6f5d66Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10763fbc03982Smrg	link_command=$compile_command$compile_rpath
10764ed6f5d66Smrg
10765ed6f5d66Smrg	# We have no uninstalled library dependencies, so finalize right now.
10766ed6f5d66Smrg	exit_status=0
10767ed6f5d66Smrg	func_show_eval "$link_command" 'exit_status=$?'
10768ed6f5d66Smrg
10769ed6f5d66Smrg	if test -n "$postlink_cmds"; then
10770ed6f5d66Smrg	  func_to_tool_file "$output"
10771ed6f5d66Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10772ed6f5d66Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
10773ed6f5d66Smrg	fi
10774ed6f5d66Smrg
10775ed6f5d66Smrg	# Delete the generated files.
10776fbc03982Smrg	if test -f "$output_objdir/${outputname}S.$objext"; then
10777fbc03982Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
10778ed6f5d66Smrg	fi
10779ed6f5d66Smrg
10780ed6f5d66Smrg	exit $exit_status
10781fbc03982Smrg      }
10782ed6f5d66Smrg
10783ed6f5d66Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
10784ed6f5d66Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
10785ed6f5d66Smrg      fi
10786ed6f5d66Smrg      if test -n "$finalize_shlibpath"; then
10787ed6f5d66Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
10788ed6f5d66Smrg      fi
10789ed6f5d66Smrg
10790ed6f5d66Smrg      compile_var=
10791ed6f5d66Smrg      finalize_var=
10792ed6f5d66Smrg      if test -n "$runpath_var"; then
10793ed6f5d66Smrg	if test -n "$perm_rpath"; then
10794ed6f5d66Smrg	  # We should set the runpath_var.
10795ed6f5d66Smrg	  rpath=
10796ed6f5d66Smrg	  for dir in $perm_rpath; do
10797ed6f5d66Smrg	    func_append rpath "$dir:"
10798ed6f5d66Smrg	  done
10799ed6f5d66Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
10800ed6f5d66Smrg	fi
10801ed6f5d66Smrg	if test -n "$finalize_perm_rpath"; then
10802ed6f5d66Smrg	  # We should set the runpath_var.
10803ed6f5d66Smrg	  rpath=
10804ed6f5d66Smrg	  for dir in $finalize_perm_rpath; do
10805ed6f5d66Smrg	    func_append rpath "$dir:"
10806ed6f5d66Smrg	  done
10807ed6f5d66Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
10808ed6f5d66Smrg	fi
10809ed6f5d66Smrg      fi
10810ed6f5d66Smrg
10811fbc03982Smrg      if test yes = "$no_install"; then
10812ed6f5d66Smrg	# We don't need to create a wrapper script.
10813fbc03982Smrg	link_command=$compile_var$compile_command$compile_rpath
10814ed6f5d66Smrg	# Replace the output file specification.
10815ed6f5d66Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10816ed6f5d66Smrg	# Delete the old output file.
10817ed6f5d66Smrg	$opt_dry_run || $RM $output
10818ed6f5d66Smrg	# Link the executable and exit
10819ed6f5d66Smrg	func_show_eval "$link_command" 'exit $?'
10820ed6f5d66Smrg
10821ed6f5d66Smrg	if test -n "$postlink_cmds"; then
10822ed6f5d66Smrg	  func_to_tool_file "$output"
10823ed6f5d66Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10824ed6f5d66Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
10825ed6f5d66Smrg	fi
10826ed6f5d66Smrg
10827ed6f5d66Smrg	exit $EXIT_SUCCESS
10828ed6f5d66Smrg      fi
10829ed6f5d66Smrg
10830fbc03982Smrg      case $hardcode_action,$fast_install in
10831fbc03982Smrg        relink,*)
10832fbc03982Smrg	  # Fast installation is not supported
10833fbc03982Smrg	  link_command=$compile_var$compile_command$compile_rpath
10834fbc03982Smrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
10835ed6f5d66Smrg
10836fbc03982Smrg	  func_warning "this platform does not like uninstalled shared libraries"
10837fbc03982Smrg	  func_warning "'$output' will be relinked during installation"
10838fbc03982Smrg	  ;;
10839fbc03982Smrg        *,yes)
10840fbc03982Smrg	  link_command=$finalize_var$compile_command$finalize_rpath
10841fbc03982Smrg	  relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
10842fbc03982Smrg          ;;
10843fbc03982Smrg	*,no)
10844fbc03982Smrg	  link_command=$compile_var$compile_command$compile_rpath
10845fbc03982Smrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
10846fbc03982Smrg          ;;
10847fbc03982Smrg	*,needless)
10848fbc03982Smrg	  link_command=$finalize_var$compile_command$finalize_rpath
10849fbc03982Smrg	  relink_command=
10850fbc03982Smrg          ;;
10851fbc03982Smrg      esac
10852ed6f5d66Smrg
10853ed6f5d66Smrg      # Replace the output file specification.
10854ed6f5d66Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
10855ed6f5d66Smrg
10856ed6f5d66Smrg      # Delete the old output files.
10857ed6f5d66Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
10858ed6f5d66Smrg
10859ed6f5d66Smrg      func_show_eval "$link_command" 'exit $?'
10860ed6f5d66Smrg
10861ed6f5d66Smrg      if test -n "$postlink_cmds"; then
10862ed6f5d66Smrg	func_to_tool_file "$output_objdir/$outputname"
10863ed6f5d66Smrg	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'`
10864ed6f5d66Smrg	func_execute_cmds "$postlink_cmds" 'exit $?'
10865ed6f5d66Smrg      fi
10866ed6f5d66Smrg
10867ed6f5d66Smrg      # Now create the wrapper script.
10868ed6f5d66Smrg      func_verbose "creating $output"
10869ed6f5d66Smrg
10870ed6f5d66Smrg      # Quote the relink command for shipping.
10871ed6f5d66Smrg      if test -n "$relink_command"; then
10872ed6f5d66Smrg	# Preserve any variables that may affect compiler behavior
10873ed6f5d66Smrg	for var in $variables_saved_for_relink; do
10874ed6f5d66Smrg	  if eval test -z \"\${$var+set}\"; then
10875ed6f5d66Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10876ed6f5d66Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
10877ed6f5d66Smrg	    relink_command="$var=; export $var; $relink_command"
10878ed6f5d66Smrg	  else
108793d05230fSmrg	    func_quote_arg pretty "$var_value"
108803d05230fSmrg	    relink_command="$var=$func_quote_arg_result; export $var; $relink_command"
10881ed6f5d66Smrg	  fi
10882ed6f5d66Smrg	done
108833d05230fSmrg	func_quote eval cd "`pwd`"
108843d05230fSmrg	func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)"
108853d05230fSmrg	relink_command=$func_quote_arg_unquoted_result
10886ed6f5d66Smrg      fi
10887ed6f5d66Smrg
10888ed6f5d66Smrg      # Only actually do things if not in dry run mode.
10889ed6f5d66Smrg      $opt_dry_run || {
10890ed6f5d66Smrg	# win32 will think the script is a binary if it has
10891ed6f5d66Smrg	# a .exe suffix, so we strip it off here.
10892ed6f5d66Smrg	case $output in
10893ed6f5d66Smrg	  *.exe) func_stripname '' '.exe' "$output"
10894ed6f5d66Smrg	         output=$func_stripname_result ;;
10895ed6f5d66Smrg	esac
10896ed6f5d66Smrg	# test for cygwin because mv fails w/o .exe extensions
10897ed6f5d66Smrg	case $host in
10898ed6f5d66Smrg	  *cygwin*)
10899ed6f5d66Smrg	    exeext=.exe
10900ed6f5d66Smrg	    func_stripname '' '.exe' "$outputname"
10901ed6f5d66Smrg	    outputname=$func_stripname_result ;;
10902ed6f5d66Smrg	  *) exeext= ;;
10903ed6f5d66Smrg	esac
10904ed6f5d66Smrg	case $host in
10905a3680546Smrg	  *cygwin* | *mingw* | windows* )
10906ed6f5d66Smrg	    func_dirname_and_basename "$output" "" "."
10907ed6f5d66Smrg	    output_name=$func_basename_result
10908ed6f5d66Smrg	    output_path=$func_dirname_result
10909fbc03982Smrg	    cwrappersource=$output_path/$objdir/lt-$output_name.c
10910fbc03982Smrg	    cwrapper=$output_path/$output_name.exe
10911ed6f5d66Smrg	    $RM $cwrappersource $cwrapper
10912ed6f5d66Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
10913ed6f5d66Smrg
10914ed6f5d66Smrg	    func_emit_cwrapperexe_src > $cwrappersource
10915ed6f5d66Smrg
10916ed6f5d66Smrg	    # The wrapper executable is built using the $host compiler,
10917ed6f5d66Smrg	    # because it contains $host paths and files. If cross-
10918ed6f5d66Smrg	    # compiling, it, like the target executable, must be
10919ed6f5d66Smrg	    # executed on the $host or under an emulation environment.
10920ed6f5d66Smrg	    $opt_dry_run || {
10921ed6f5d66Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
10922ed6f5d66Smrg	      $STRIP $cwrapper
10923ed6f5d66Smrg	    }
10924ed6f5d66Smrg
10925ed6f5d66Smrg	    # Now, create the wrapper script for func_source use:
10926ed6f5d66Smrg	    func_ltwrapper_scriptname $cwrapper
10927ed6f5d66Smrg	    $RM $func_ltwrapper_scriptname_result
10928ed6f5d66Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
10929ed6f5d66Smrg	    $opt_dry_run || {
10930ed6f5d66Smrg	      # note: this script will not be executed, so do not chmod.
10931fbc03982Smrg	      if test "x$build" = "x$host"; then
10932ed6f5d66Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
10933ed6f5d66Smrg	      else
10934ed6f5d66Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
10935ed6f5d66Smrg	      fi
10936ed6f5d66Smrg	    }
10937ed6f5d66Smrg	  ;;
10938ed6f5d66Smrg	  * )
10939ed6f5d66Smrg	    $RM $output
10940ed6f5d66Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
10941ed6f5d66Smrg
10942ed6f5d66Smrg	    func_emit_wrapper no > $output
10943ed6f5d66Smrg	    chmod +x $output
10944ed6f5d66Smrg	  ;;
10945ed6f5d66Smrg	esac
10946ed6f5d66Smrg      }
10947ed6f5d66Smrg      exit $EXIT_SUCCESS
10948ed6f5d66Smrg      ;;
10949ed6f5d66Smrg    esac
10950ed6f5d66Smrg
10951ed6f5d66Smrg    # See if we need to build an old-fashioned archive.
10952ed6f5d66Smrg    for oldlib in $oldlibs; do
10953ed6f5d66Smrg
10954fbc03982Smrg      case $build_libtool_libs in
10955fbc03982Smrg        convenience)
10956fbc03982Smrg	  oldobjs="$libobjs_save $symfileobj"
10957fbc03982Smrg	  addlibs=$convenience
10958ed6f5d66Smrg	  build_libtool_libs=no
10959fbc03982Smrg	  ;;
10960fbc03982Smrg	module)
10961fbc03982Smrg	  oldobjs=$libobjs_save
10962fbc03982Smrg	  addlibs=$old_convenience
10963fbc03982Smrg	  build_libtool_libs=no
10964fbc03982Smrg          ;;
10965fbc03982Smrg	*)
10966ed6f5d66Smrg	  oldobjs="$old_deplibs $non_pic_objects"
10967fbc03982Smrg	  $preload && test -f "$symfileobj" \
10968fbc03982Smrg	    && func_append oldobjs " $symfileobj"
10969fbc03982Smrg	  addlibs=$old_convenience
10970fbc03982Smrg	  ;;
10971fbc03982Smrg      esac
10972ed6f5d66Smrg
10973ed6f5d66Smrg      if test -n "$addlibs"; then
10974fbc03982Smrg	gentop=$output_objdir/${outputname}x
10975ed6f5d66Smrg	func_append generated " $gentop"
10976ed6f5d66Smrg
10977ed6f5d66Smrg	func_extract_archives $gentop $addlibs
10978ed6f5d66Smrg	func_append oldobjs " $func_extract_archives_result"
10979ed6f5d66Smrg      fi
10980ed6f5d66Smrg
10981ed6f5d66Smrg      # Do each command in the archive commands.
10982fbc03982Smrg      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
10983ed6f5d66Smrg	cmds=$old_archive_from_new_cmds
10984ed6f5d66Smrg      else
10985ed6f5d66Smrg
10986ed6f5d66Smrg	# Add any objects from preloaded convenience libraries
10987ed6f5d66Smrg	if test -n "$dlprefiles"; then
10988fbc03982Smrg	  gentop=$output_objdir/${outputname}x
10989ed6f5d66Smrg	  func_append generated " $gentop"
10990ed6f5d66Smrg
10991ed6f5d66Smrg	  func_extract_archives $gentop $dlprefiles
10992ed6f5d66Smrg	  func_append oldobjs " $func_extract_archives_result"
10993ed6f5d66Smrg	fi
10994ed6f5d66Smrg
10995ed6f5d66Smrg	# POSIX demands no paths to be encoded in archives.  We have
10996ed6f5d66Smrg	# to avoid creating archives with duplicate basenames if we
10997ed6f5d66Smrg	# might have to extract them afterwards, e.g., when creating a
10998ed6f5d66Smrg	# static archive out of a convenience library, or when linking
10999ed6f5d66Smrg	# the entirety of a libtool archive into another (currently
11000ed6f5d66Smrg	# not supported by libtool).
11001ed6f5d66Smrg	if (for obj in $oldobjs
11002ed6f5d66Smrg	    do
11003ed6f5d66Smrg	      func_basename "$obj"
11004ed6f5d66Smrg	      $ECHO "$func_basename_result"
11005ed6f5d66Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
11006ed6f5d66Smrg	  :
11007ed6f5d66Smrg	else
11008ed6f5d66Smrg	  echo "copying selected object files to avoid basename conflicts..."
11009fbc03982Smrg	  gentop=$output_objdir/${outputname}x
11010ed6f5d66Smrg	  func_append generated " $gentop"
11011ed6f5d66Smrg	  func_mkdir_p "$gentop"
11012ed6f5d66Smrg	  save_oldobjs=$oldobjs
11013ed6f5d66Smrg	  oldobjs=
11014ed6f5d66Smrg	  counter=1
11015ed6f5d66Smrg	  for obj in $save_oldobjs
11016ed6f5d66Smrg	  do
11017ed6f5d66Smrg	    func_basename "$obj"
11018fbc03982Smrg	    objbase=$func_basename_result
11019ed6f5d66Smrg	    case " $oldobjs " in
11020ed6f5d66Smrg	    " ") oldobjs=$obj ;;
11021ed6f5d66Smrg	    *[\ /]"$objbase "*)
11022ed6f5d66Smrg	      while :; do
11023ed6f5d66Smrg		# Make sure we don't pick an alternate name that also
11024ed6f5d66Smrg		# overlaps.
11025ed6f5d66Smrg		newobj=lt$counter-$objbase
11026ed6f5d66Smrg		func_arith $counter + 1
11027ed6f5d66Smrg		counter=$func_arith_result
11028ed6f5d66Smrg		case " $oldobjs " in
11029ed6f5d66Smrg		*[\ /]"$newobj "*) ;;
11030ed6f5d66Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
11031ed6f5d66Smrg		esac
11032ed6f5d66Smrg	      done
11033ed6f5d66Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
11034ed6f5d66Smrg	      func_append oldobjs " $gentop/$newobj"
11035ed6f5d66Smrg	      ;;
11036ed6f5d66Smrg	    *) func_append oldobjs " $obj" ;;
11037ed6f5d66Smrg	    esac
11038ed6f5d66Smrg	  done
11039ed6f5d66Smrg	fi
11040ed6f5d66Smrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
11041ed6f5d66Smrg	tool_oldlib=$func_to_tool_file_result
11042ed6f5d66Smrg	eval cmds=\"$old_archive_cmds\"
11043ed6f5d66Smrg
11044ed6f5d66Smrg	func_len " $cmds"
11045ed6f5d66Smrg	len=$func_len_result
11046ed6f5d66Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
11047ed6f5d66Smrg	  cmds=$old_archive_cmds
11048ed6f5d66Smrg	elif test -n "$archiver_list_spec"; then
11049ed6f5d66Smrg	  func_verbose "using command file archive linking..."
11050ed6f5d66Smrg	  for obj in $oldobjs
11051ed6f5d66Smrg	  do
11052ed6f5d66Smrg	    func_to_tool_file "$obj"
11053ed6f5d66Smrg	    $ECHO "$func_to_tool_file_result"
11054ed6f5d66Smrg	  done > $output_objdir/$libname.libcmd
11055ed6f5d66Smrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
11056ed6f5d66Smrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
11057ed6f5d66Smrg	  cmds=$old_archive_cmds
11058ed6f5d66Smrg	else
11059ed6f5d66Smrg	  # the command line is too long to link in one step, link in parts
11060ed6f5d66Smrg	  func_verbose "using piecewise archive linking..."
11061ed6f5d66Smrg	  save_RANLIB=$RANLIB
11062ed6f5d66Smrg	  RANLIB=:
11063ed6f5d66Smrg	  objlist=
11064ed6f5d66Smrg	  concat_cmds=
11065ed6f5d66Smrg	  save_oldobjs=$oldobjs
11066ed6f5d66Smrg	  oldobjs=
11067ed6f5d66Smrg	  # Is there a better way of finding the last object in the list?
11068ed6f5d66Smrg	  for obj in $save_oldobjs
11069ed6f5d66Smrg	  do
11070ed6f5d66Smrg	    last_oldobj=$obj
11071ed6f5d66Smrg	  done
11072ed6f5d66Smrg	  eval test_cmds=\"$old_archive_cmds\"
11073ed6f5d66Smrg	  func_len " $test_cmds"
11074ed6f5d66Smrg	  len0=$func_len_result
11075ed6f5d66Smrg	  len=$len0
11076ed6f5d66Smrg	  for obj in $save_oldobjs
11077ed6f5d66Smrg	  do
11078ed6f5d66Smrg	    func_len " $obj"
11079ed6f5d66Smrg	    func_arith $len + $func_len_result
11080ed6f5d66Smrg	    len=$func_arith_result
11081ed6f5d66Smrg	    func_append objlist " $obj"
11082ed6f5d66Smrg	    if test "$len" -lt "$max_cmd_len"; then
11083ed6f5d66Smrg	      :
11084ed6f5d66Smrg	    else
11085ed6f5d66Smrg	      # the above command should be used before it gets too long
11086ed6f5d66Smrg	      oldobjs=$objlist
11087fbc03982Smrg	      if test "$obj" = "$last_oldobj"; then
11088ed6f5d66Smrg		RANLIB=$save_RANLIB
11089ed6f5d66Smrg	      fi
11090ed6f5d66Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
11091fbc03982Smrg	      eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
11092ed6f5d66Smrg	      objlist=
11093ed6f5d66Smrg	      len=$len0
11094ed6f5d66Smrg	    fi
11095ed6f5d66Smrg	  done
11096ed6f5d66Smrg	  RANLIB=$save_RANLIB
11097ed6f5d66Smrg	  oldobjs=$objlist
11098fbc03982Smrg	  if test -z "$oldobjs"; then
11099ed6f5d66Smrg	    eval cmds=\"\$concat_cmds\"
11100ed6f5d66Smrg	  else
11101ed6f5d66Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
11102ed6f5d66Smrg	  fi
11103ed6f5d66Smrg	fi
11104ed6f5d66Smrg      fi
11105ed6f5d66Smrg      func_execute_cmds "$cmds" 'exit $?'
11106ed6f5d66Smrg    done
11107ed6f5d66Smrg
11108ed6f5d66Smrg    test -n "$generated" && \
11109ed6f5d66Smrg      func_show_eval "${RM}r$generated"
11110ed6f5d66Smrg
11111ed6f5d66Smrg    # Now create the libtool archive.
11112ed6f5d66Smrg    case $output in
11113ed6f5d66Smrg    *.la)
11114ed6f5d66Smrg      old_library=
11115fbc03982Smrg      test yes = "$build_old_libs" && old_library=$libname.$libext
11116ed6f5d66Smrg      func_verbose "creating $output"
11117ed6f5d66Smrg
11118ed6f5d66Smrg      # Preserve any variables that may affect compiler behavior
11119ed6f5d66Smrg      for var in $variables_saved_for_relink; do
11120ed6f5d66Smrg	if eval test -z \"\${$var+set}\"; then
11121ed6f5d66Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
11122ed6f5d66Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
11123ed6f5d66Smrg	  relink_command="$var=; export $var; $relink_command"
11124ed6f5d66Smrg	else
111253d05230fSmrg	  func_quote_arg pretty,unquoted "$var_value"
111263d05230fSmrg	  relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command"
11127ed6f5d66Smrg	fi
11128ed6f5d66Smrg      done
11129ed6f5d66Smrg      # Quote the link command for shipping.
111303d05230fSmrg      func_quote eval cd "`pwd`"
111313d05230fSmrg      relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
111323d05230fSmrg      func_quote_arg pretty,unquoted "$relink_command"
111333d05230fSmrg      relink_command=$func_quote_arg_unquoted_result
11134fbc03982Smrg      if test yes = "$hardcode_automatic"; then
11135ed6f5d66Smrg	relink_command=
11136ed6f5d66Smrg      fi
11137ed6f5d66Smrg
11138ed6f5d66Smrg      # Only create the output if not a dry run.
11139ed6f5d66Smrg      $opt_dry_run || {
11140ed6f5d66Smrg	for installed in no yes; do
11141fbc03982Smrg	  if test yes = "$installed"; then
11142ed6f5d66Smrg	    if test -z "$install_libdir"; then
11143ed6f5d66Smrg	      break
11144ed6f5d66Smrg	    fi
11145fbc03982Smrg	    output=$output_objdir/${outputname}i
11146ed6f5d66Smrg	    # Replace all uninstalled libtool libraries with the installed ones
11147ed6f5d66Smrg	    newdependency_libs=
11148ed6f5d66Smrg	    for deplib in $dependency_libs; do
11149ed6f5d66Smrg	      case $deplib in
11150ed6f5d66Smrg	      *.la)
11151ed6f5d66Smrg		func_basename "$deplib"
11152fbc03982Smrg		name=$func_basename_result
11153ed6f5d66Smrg		func_resolve_sysroot "$deplib"
11154fbc03982Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
11155ed6f5d66Smrg		test -z "$libdir" && \
11156fbc03982Smrg		  func_fatal_error "'$deplib' is not a valid libtool archive"
11157ed6f5d66Smrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
11158ed6f5d66Smrg		;;
11159ed6f5d66Smrg	      -L*)
11160ed6f5d66Smrg		func_stripname -L '' "$deplib"
11161ed6f5d66Smrg		func_replace_sysroot "$func_stripname_result"
11162ed6f5d66Smrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
11163ed6f5d66Smrg		;;
11164ed6f5d66Smrg	      -R*)
11165ed6f5d66Smrg		func_stripname -R '' "$deplib"
11166ed6f5d66Smrg		func_replace_sysroot "$func_stripname_result"
11167ed6f5d66Smrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
11168ed6f5d66Smrg		;;
11169ed6f5d66Smrg	      *) func_append newdependency_libs " $deplib" ;;
11170ed6f5d66Smrg	      esac
11171ed6f5d66Smrg	    done
11172fbc03982Smrg	    dependency_libs=$newdependency_libs
11173ed6f5d66Smrg	    newdlfiles=
11174ed6f5d66Smrg
11175ed6f5d66Smrg	    for lib in $dlfiles; do
11176ed6f5d66Smrg	      case $lib in
11177ed6f5d66Smrg	      *.la)
11178ed6f5d66Smrg	        func_basename "$lib"
11179fbc03982Smrg		name=$func_basename_result
11180fbc03982Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
11181ed6f5d66Smrg		test -z "$libdir" && \
11182fbc03982Smrg		  func_fatal_error "'$lib' is not a valid libtool archive"
11183ed6f5d66Smrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
11184ed6f5d66Smrg		;;
11185ed6f5d66Smrg	      *) func_append newdlfiles " $lib" ;;
11186ed6f5d66Smrg	      esac
11187ed6f5d66Smrg	    done
11188fbc03982Smrg	    dlfiles=$newdlfiles
11189ed6f5d66Smrg	    newdlprefiles=
11190ed6f5d66Smrg	    for lib in $dlprefiles; do
11191ed6f5d66Smrg	      case $lib in
11192ed6f5d66Smrg	      *.la)
11193ed6f5d66Smrg		# Only pass preopened files to the pseudo-archive (for
11194ed6f5d66Smrg		# eventual linking with the app. that links it) if we
11195ed6f5d66Smrg		# didn't already link the preopened objects directly into
11196ed6f5d66Smrg		# the library:
11197ed6f5d66Smrg		func_basename "$lib"
11198fbc03982Smrg		name=$func_basename_result
11199fbc03982Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
11200ed6f5d66Smrg		test -z "$libdir" && \
11201fbc03982Smrg		  func_fatal_error "'$lib' is not a valid libtool archive"
11202ed6f5d66Smrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
11203ed6f5d66Smrg		;;
11204ed6f5d66Smrg	      esac
11205ed6f5d66Smrg	    done
11206fbc03982Smrg	    dlprefiles=$newdlprefiles
11207ed6f5d66Smrg	  else
11208ed6f5d66Smrg	    newdlfiles=
11209ed6f5d66Smrg	    for lib in $dlfiles; do
11210ed6f5d66Smrg	      case $lib in
11211fbc03982Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
11212ed6f5d66Smrg		*) abs=`pwd`"/$lib" ;;
11213ed6f5d66Smrg	      esac
11214ed6f5d66Smrg	      func_append newdlfiles " $abs"
11215ed6f5d66Smrg	    done
11216fbc03982Smrg	    dlfiles=$newdlfiles
11217ed6f5d66Smrg	    newdlprefiles=
11218ed6f5d66Smrg	    for lib in $dlprefiles; do
11219ed6f5d66Smrg	      case $lib in
11220fbc03982Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
11221ed6f5d66Smrg		*) abs=`pwd`"/$lib" ;;
11222ed6f5d66Smrg	      esac
11223ed6f5d66Smrg	      func_append newdlprefiles " $abs"
11224ed6f5d66Smrg	    done
11225fbc03982Smrg	    dlprefiles=$newdlprefiles
11226ed6f5d66Smrg	  fi
11227ed6f5d66Smrg	  $RM $output
11228ed6f5d66Smrg	  # place dlname in correct position for cygwin
11229ed6f5d66Smrg	  # In fact, it would be nice if we could use this code for all target
11230ed6f5d66Smrg	  # systems that can't hard-code library paths into their executables
11231ed6f5d66Smrg	  # and that have no shared library path variable independent of PATH,
11232ed6f5d66Smrg	  # but it turns out we can't easily determine that from inspecting
11233ed6f5d66Smrg	  # libtool variables, so we have to hard-code the OSs to which it
11234ed6f5d66Smrg	  # applies here; at the moment, that means platforms that use the PE
11235ed6f5d66Smrg	  # object format with DLL files.  See the long comment at the top of
11236ed6f5d66Smrg	  # tests/bindir.at for full details.
11237ed6f5d66Smrg	  tdlname=$dlname
11238ed6f5d66Smrg	  case $host,$output,$installed,$module,$dlname in
11239a3680546Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *windows*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
11240ed6f5d66Smrg	      # If a -bindir argument was supplied, place the dll there.
11241fbc03982Smrg	      if test -n "$bindir"; then
11242ed6f5d66Smrg		func_relative_path "$install_libdir" "$bindir"
11243fbc03982Smrg		tdlname=$func_relative_path_result/$dlname
11244ed6f5d66Smrg	      else
11245ed6f5d66Smrg		# Otherwise fall back on heuristic.
11246ed6f5d66Smrg		tdlname=../bin/$dlname
11247ed6f5d66Smrg	      fi
11248ed6f5d66Smrg	      ;;
11249ed6f5d66Smrg	  esac
11250ed6f5d66Smrg	  $ECHO > $output "\
11251ed6f5d66Smrg# $outputname - a libtool library file
11252fbc03982Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
11253ed6f5d66Smrg#
11254ed6f5d66Smrg# Please DO NOT delete this file!
11255ed6f5d66Smrg# It is necessary for linking the library.
11256ed6f5d66Smrg
11257ed6f5d66Smrg# The name that we can dlopen(3).
11258ed6f5d66Smrgdlname='$tdlname'
11259ed6f5d66Smrg
11260ed6f5d66Smrg# Names of this library.
11261ed6f5d66Smrglibrary_names='$library_names'
11262ed6f5d66Smrg
11263ed6f5d66Smrg# The name of the static archive.
11264ed6f5d66Smrgold_library='$old_library'
11265ed6f5d66Smrg
11266fbc03982Smrg# Linker flags that cannot go in dependency_libs.
11267ed6f5d66Smrginherited_linker_flags='$new_inherited_linker_flags'
11268ed6f5d66Smrg
11269ed6f5d66Smrg# Libraries that this one depends upon.
11270ed6f5d66Smrgdependency_libs='$dependency_libs'
11271ed6f5d66Smrg
11272ed6f5d66Smrg# Names of additional weak libraries provided by this library
11273ed6f5d66Smrgweak_library_names='$weak_libs'
11274ed6f5d66Smrg
11275ed6f5d66Smrg# Version information for $libname.
11276ed6f5d66Smrgcurrent=$current
11277ed6f5d66Smrgage=$age
11278ed6f5d66Smrgrevision=$revision
11279ed6f5d66Smrg
11280ed6f5d66Smrg# Is this an already installed library?
11281ed6f5d66Smrginstalled=$installed
11282ed6f5d66Smrg
11283ed6f5d66Smrg# Should we warn about portability when linking against -modules?
11284ed6f5d66Smrgshouldnotlink=$module
11285ed6f5d66Smrg
11286ed6f5d66Smrg# Files to dlopen/dlpreopen
11287ed6f5d66Smrgdlopen='$dlfiles'
11288ed6f5d66Smrgdlpreopen='$dlprefiles'
11289ed6f5d66Smrg
11290ed6f5d66Smrg# Directory that this library needs to be installed in:
11291ed6f5d66Smrglibdir='$install_libdir'"
11292fbc03982Smrg	  if test no,yes = "$installed,$need_relink"; then
11293ed6f5d66Smrg	    $ECHO >> $output "\
11294ed6f5d66Smrgrelink_command=\"$relink_command\""
11295ed6f5d66Smrg	  fi
11296ed6f5d66Smrg	done
11297ed6f5d66Smrg      }
11298ed6f5d66Smrg
11299ed6f5d66Smrg      # Do a symbolic link so that the libtool archive can be found in
11300ed6f5d66Smrg      # LD_LIBRARY_PATH before the program is installed.
11301ed6f5d66Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
11302ed6f5d66Smrg      ;;
11303ed6f5d66Smrg    esac
11304ed6f5d66Smrg    exit $EXIT_SUCCESS
11305ed6f5d66Smrg}
11306ed6f5d66Smrg
11307fbc03982Smrgif test link = "$opt_mode" || test relink = "$opt_mode"; then
11308fbc03982Smrg  func_mode_link ${1+"$@"}
11309fbc03982Smrgfi
11310ed6f5d66Smrg
11311ed6f5d66Smrg
11312ed6f5d66Smrg# func_mode_uninstall arg...
11313ed6f5d66Smrgfunc_mode_uninstall ()
11314ed6f5d66Smrg{
11315fbc03982Smrg    $debug_cmd
11316fbc03982Smrg
11317fbc03982Smrg    RM=$nonopt
11318ed6f5d66Smrg    files=
11319fbc03982Smrg    rmforce=false
11320ed6f5d66Smrg    exit_status=0
11321ed6f5d66Smrg
11322ed6f5d66Smrg    # This variable tells wrapper scripts just to set variables rather
11323ed6f5d66Smrg    # than running their programs.
11324fbc03982Smrg    libtool_install_magic=$magic
11325ed6f5d66Smrg
11326ed6f5d66Smrg    for arg
11327ed6f5d66Smrg    do
11328ed6f5d66Smrg      case $arg in
11329fbc03982Smrg      -f) func_append RM " $arg"; rmforce=: ;;
11330ed6f5d66Smrg      -*) func_append RM " $arg" ;;
11331ed6f5d66Smrg      *) func_append files " $arg" ;;
11332ed6f5d66Smrg      esac
11333ed6f5d66Smrg    done
11334ed6f5d66Smrg
11335ed6f5d66Smrg    test -z "$RM" && \
11336ed6f5d66Smrg      func_fatal_help "you must specify an RM program"
11337ed6f5d66Smrg
11338ed6f5d66Smrg    rmdirs=
11339ed6f5d66Smrg
11340ed6f5d66Smrg    for file in $files; do
11341ed6f5d66Smrg      func_dirname "$file" "" "."
11342fbc03982Smrg      dir=$func_dirname_result
11343fbc03982Smrg      if test . = "$dir"; then
11344fbc03982Smrg	odir=$objdir
11345ed6f5d66Smrg      else
11346fbc03982Smrg	odir=$dir/$objdir
11347ed6f5d66Smrg      fi
11348ed6f5d66Smrg      func_basename "$file"
11349fbc03982Smrg      name=$func_basename_result
11350fbc03982Smrg      test uninstall = "$opt_mode" && odir=$dir
11351ed6f5d66Smrg
11352ed6f5d66Smrg      # Remember odir for removal later, being careful to avoid duplicates
11353fbc03982Smrg      if test clean = "$opt_mode"; then
11354ed6f5d66Smrg	case " $rmdirs " in
11355ed6f5d66Smrg	  *" $odir "*) ;;
11356ed6f5d66Smrg	  *) func_append rmdirs " $odir" ;;
11357ed6f5d66Smrg	esac
11358ed6f5d66Smrg      fi
11359ed6f5d66Smrg
11360ed6f5d66Smrg      # Don't error if the file doesn't exist and rm -f was used.
11361ed6f5d66Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
11362ed6f5d66Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
11363ed6f5d66Smrg	 test -f "$file"; then
11364ed6f5d66Smrg	:
11365ed6f5d66Smrg      elif test -d "$file"; then
11366ed6f5d66Smrg	exit_status=1
11367ed6f5d66Smrg	continue
11368fbc03982Smrg      elif $rmforce; then
11369ed6f5d66Smrg	continue
11370ed6f5d66Smrg      fi
11371ed6f5d66Smrg
11372fbc03982Smrg      rmfiles=$file
11373ed6f5d66Smrg
11374ed6f5d66Smrg      case $name in
11375ed6f5d66Smrg      *.la)
11376ed6f5d66Smrg	# Possibly a libtool archive, so verify it.
11377ed6f5d66Smrg	if func_lalib_p "$file"; then
11378ed6f5d66Smrg	  func_source $dir/$name
11379ed6f5d66Smrg
11380ed6f5d66Smrg	  # Delete the libtool libraries and symlinks.
11381ed6f5d66Smrg	  for n in $library_names; do
11382ed6f5d66Smrg	    func_append rmfiles " $odir/$n"
11383ed6f5d66Smrg	  done
11384ed6f5d66Smrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
11385ed6f5d66Smrg
11386fbc03982Smrg	  case $opt_mode in
11387ed6f5d66Smrg	  clean)
11388ed6f5d66Smrg	    case " $library_names " in
11389ed6f5d66Smrg	    *" $dlname "*) ;;
11390ed6f5d66Smrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
11391ed6f5d66Smrg	    esac
11392ed6f5d66Smrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
11393ed6f5d66Smrg	    ;;
11394ed6f5d66Smrg	  uninstall)
11395ed6f5d66Smrg	    if test -n "$library_names"; then
11396ed6f5d66Smrg	      # Do each command in the postuninstall commands.
11397fbc03982Smrg	      func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
11398ed6f5d66Smrg	    fi
11399ed6f5d66Smrg
11400ed6f5d66Smrg	    if test -n "$old_library"; then
11401ed6f5d66Smrg	      # Do each command in the old_postuninstall commands.
11402fbc03982Smrg	      func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
11403ed6f5d66Smrg	    fi
11404ed6f5d66Smrg	    # FIXME: should reinstall the best remaining shared library.
11405ed6f5d66Smrg	    ;;
11406ed6f5d66Smrg	  esac
11407ed6f5d66Smrg	fi
11408ed6f5d66Smrg	;;
11409ed6f5d66Smrg
11410ed6f5d66Smrg      *.lo)
11411ed6f5d66Smrg	# Possibly a libtool object, so verify it.
11412ed6f5d66Smrg	if func_lalib_p "$file"; then
11413ed6f5d66Smrg
11414ed6f5d66Smrg	  # Read the .lo file
11415ed6f5d66Smrg	  func_source $dir/$name
11416ed6f5d66Smrg
11417ed6f5d66Smrg	  # Add PIC object to the list of files to remove.
11418fbc03982Smrg	  if test -n "$pic_object" && test none != "$pic_object"; then
11419ed6f5d66Smrg	    func_append rmfiles " $dir/$pic_object"
11420ed6f5d66Smrg	  fi
11421ed6f5d66Smrg
11422ed6f5d66Smrg	  # Add non-PIC object to the list of files to remove.
11423fbc03982Smrg	  if test -n "$non_pic_object" && test none != "$non_pic_object"; then
11424ed6f5d66Smrg	    func_append rmfiles " $dir/$non_pic_object"
11425ed6f5d66Smrg	  fi
11426ed6f5d66Smrg	fi
11427ed6f5d66Smrg	;;
11428ed6f5d66Smrg
11429ed6f5d66Smrg      *)
11430fbc03982Smrg	if test clean = "$opt_mode"; then
11431ed6f5d66Smrg	  noexename=$name
11432ed6f5d66Smrg	  case $file in
11433ed6f5d66Smrg	  *.exe)
11434ed6f5d66Smrg	    func_stripname '' '.exe' "$file"
11435ed6f5d66Smrg	    file=$func_stripname_result
11436ed6f5d66Smrg	    func_stripname '' '.exe' "$name"
11437ed6f5d66Smrg	    noexename=$func_stripname_result
11438ed6f5d66Smrg	    # $file with .exe has already been added to rmfiles,
11439ed6f5d66Smrg	    # add $file without .exe
11440ed6f5d66Smrg	    func_append rmfiles " $file"
11441ed6f5d66Smrg	    ;;
11442ed6f5d66Smrg	  esac
11443ed6f5d66Smrg	  # Do a test to see if this is a libtool program.
11444ed6f5d66Smrg	  if func_ltwrapper_p "$file"; then
11445ed6f5d66Smrg	    if func_ltwrapper_executable_p "$file"; then
11446ed6f5d66Smrg	      func_ltwrapper_scriptname "$file"
11447ed6f5d66Smrg	      relink_command=
11448ed6f5d66Smrg	      func_source $func_ltwrapper_scriptname_result
11449ed6f5d66Smrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
11450ed6f5d66Smrg	    else
11451ed6f5d66Smrg	      relink_command=
11452ed6f5d66Smrg	      func_source $dir/$noexename
11453ed6f5d66Smrg	    fi
11454ed6f5d66Smrg
11455ed6f5d66Smrg	    # note $name still contains .exe if it was in $file originally
11456ed6f5d66Smrg	    # as does the version of $file that was added into $rmfiles
11457fbc03982Smrg	    func_append rmfiles " $odir/$name $odir/${name}S.$objext"
11458fbc03982Smrg	    if test yes = "$fast_install" && test -n "$relink_command"; then
11459ed6f5d66Smrg	      func_append rmfiles " $odir/lt-$name"
11460ed6f5d66Smrg	    fi
11461fbc03982Smrg	    if test "X$noexename" != "X$name"; then
11462fbc03982Smrg	      func_append rmfiles " $odir/lt-$noexename.c"
11463ed6f5d66Smrg	    fi
11464ed6f5d66Smrg	  fi
11465ed6f5d66Smrg	fi
11466ed6f5d66Smrg	;;
11467ed6f5d66Smrg      esac
11468ed6f5d66Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
11469ed6f5d66Smrg    done
11470ed6f5d66Smrg
11471fbc03982Smrg    # Try to remove the $objdir's in the directories where we deleted files
11472ed6f5d66Smrg    for dir in $rmdirs; do
11473ed6f5d66Smrg      if test -d "$dir"; then
11474ed6f5d66Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
11475ed6f5d66Smrg      fi
11476ed6f5d66Smrg    done
11477ed6f5d66Smrg
11478ed6f5d66Smrg    exit $exit_status
11479ed6f5d66Smrg}
11480ed6f5d66Smrg
11481fbc03982Smrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
11482fbc03982Smrg  func_mode_uninstall ${1+"$@"}
11483fbc03982Smrgfi
11484ed6f5d66Smrg
11485ed6f5d66Smrgtest -z "$opt_mode" && {
11486fbc03982Smrg  help=$generic_help
11487ed6f5d66Smrg  func_fatal_help "you must specify a MODE"
11488ed6f5d66Smrg}
11489ed6f5d66Smrg
11490ed6f5d66Smrgtest -z "$exec_cmd" && \
11491fbc03982Smrg  func_fatal_help "invalid operation mode '$opt_mode'"
11492ed6f5d66Smrg
11493ed6f5d66Smrgif test -n "$exec_cmd"; then
11494ed6f5d66Smrg  eval exec "$exec_cmd"
11495ed6f5d66Smrg  exit $EXIT_FAILURE
11496ed6f5d66Smrgfi
11497ed6f5d66Smrg
11498ed6f5d66Smrgexit $exit_status
11499ed6f5d66Smrg
11500ed6f5d66Smrg
11501ed6f5d66Smrg# The TAGs below are defined such that we never get into a situation
11502fbc03982Smrg# where we disable both kinds of libraries.  Given conflicting
11503ed6f5d66Smrg# choices, we go for a static library, that is the most portable,
11504ed6f5d66Smrg# since we can't tell whether shared libraries were disabled because
11505ed6f5d66Smrg# the user asked for that or because the platform doesn't support
11506ed6f5d66Smrg# them.  This is particularly important on AIX, because we don't
11507ed6f5d66Smrg# support having both static and shared libraries enabled at the same
11508ed6f5d66Smrg# time on that platform, so we default to a shared-only configuration.
11509ed6f5d66Smrg# If a disable-shared tag is given, we'll fallback to a static-only
11510ed6f5d66Smrg# configuration.  But we'll never go from static-only to shared-only.
11511ed6f5d66Smrg
11512ed6f5d66Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
11513ed6f5d66Smrgbuild_libtool_libs=no
11514ed6f5d66Smrgbuild_old_libs=yes
11515ed6f5d66Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
11516ed6f5d66Smrg
11517ed6f5d66Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
11518ed6f5d66Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
11519ed6f5d66Smrg# ### END LIBTOOL TAG CONFIG: disable-static
11520ed6f5d66Smrg
11521ed6f5d66Smrg# Local Variables:
11522ed6f5d66Smrg# mode:shell-script
11523ed6f5d66Smrg# sh-indentation:2
11524ed6f5d66Smrg# End:
11525