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