xref: /freebsd/contrib/lutok/admin/ltmain.sh (revision 132f818ddbf457ee67d502cd89b5a18e0a34713d)
1*132f818dSEnji Cooper#! /usr/bin/env sh
2*132f818dSEnji Cooper## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
3*132f818dSEnji Cooper##               by inline-source v2019-02-19.15
4*132f818dSEnji Cooper
5*132f818dSEnji Cooper# libtool (GNU libtool) 2.5.4
6*132f818dSEnji Cooper# Provide generalized library-building support services.
7*132f818dSEnji Cooper# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
8*132f818dSEnji Cooper
9*132f818dSEnji Cooper# Copyright (C) 1996-2019, 2021-2024 Free Software Foundation, Inc.
10*132f818dSEnji Cooper# This is free software; see the source for copying conditions.  There is NO
11*132f818dSEnji Cooper# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12*132f818dSEnji Cooper
13*132f818dSEnji Cooper# GNU Libtool is free software; you can redistribute it and/or modify
14*132f818dSEnji Cooper# it under the terms of the GNU General Public License as published by
15*132f818dSEnji Cooper# the Free Software Foundation; either version 2 of the License, or
16*132f818dSEnji Cooper# (at your option) any later version.
17*132f818dSEnji Cooper#
18*132f818dSEnji Cooper# As a special exception to the GNU General Public License,
19*132f818dSEnji Cooper# if you distribute this file as part of a program or library that
20*132f818dSEnji Cooper# is built using GNU Libtool, you may include this file under the
21*132f818dSEnji Cooper# same distribution terms that you use for the rest of that program.
22*132f818dSEnji Cooper#
23*132f818dSEnji Cooper# GNU Libtool is distributed in the hope that it will be useful, but
24*132f818dSEnji Cooper# WITHOUT ANY WARRANTY; without even the implied warranty of
25*132f818dSEnji Cooper# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
26*132f818dSEnji Cooper# General Public License for more details.
27*132f818dSEnji Cooper#
28*132f818dSEnji Cooper# You should have received a copy of the GNU General Public License
29*132f818dSEnji Cooper# along with this program.  If not, see <http://www.gnu.org/licenses/>.
30*132f818dSEnji Cooper
31*132f818dSEnji Cooper
32*132f818dSEnji CooperPROGRAM=libtool
33*132f818dSEnji CooperPACKAGE=libtool
34*132f818dSEnji CooperVERSION=2.5.4
35*132f818dSEnji Cooperpackage_revision=2.5.4
36*132f818dSEnji Cooper
37*132f818dSEnji Cooper
38*132f818dSEnji Cooper## ------ ##
39*132f818dSEnji Cooper## Usage. ##
40*132f818dSEnji Cooper## ------ ##
41*132f818dSEnji Cooper
42*132f818dSEnji Cooper# Run './libtool --help' for help with using this script from the
43*132f818dSEnji Cooper# command line.
44*132f818dSEnji Cooper
45*132f818dSEnji Cooper
46*132f818dSEnji Cooper## ------------------------------- ##
47*132f818dSEnji Cooper## User overridable command paths. ##
48*132f818dSEnji Cooper## ------------------------------- ##
49*132f818dSEnji Cooper
50*132f818dSEnji Cooper# After configure completes, it has a better idea of some of the
51*132f818dSEnji Cooper# shell tools we need than the defaults used by the functions shared
52*132f818dSEnji Cooper# with bootstrap, so set those here where they can still be over-
53*132f818dSEnji Cooper# ridden by the user, but otherwise take precedence.
54*132f818dSEnji Cooper
55*132f818dSEnji Cooper: ${AUTOCONF="autoconf"}
56*132f818dSEnji Cooper: ${AUTOMAKE="automake"}
57*132f818dSEnji Cooper
58*132f818dSEnji Cooper
59*132f818dSEnji Cooper## -------------------------- ##
60*132f818dSEnji Cooper## Source external libraries. ##
61*132f818dSEnji Cooper## -------------------------- ##
62*132f818dSEnji Cooper
63*132f818dSEnji Cooper# Much of our low-level functionality needs to be sourced from external
64*132f818dSEnji Cooper# libraries, which are installed to $pkgauxdir.
65*132f818dSEnji Cooper
66*132f818dSEnji Cooper# Set a version string for this script.
67*132f818dSEnji Cooperscriptversion=2019-02-19.15; # UTC
68*132f818dSEnji Cooper
69*132f818dSEnji Cooper# General shell script boiler plate, and helper functions.
70*132f818dSEnji Cooper# Written by Gary V. Vaughan, 2004
71*132f818dSEnji Cooper
72*132f818dSEnji Cooper# This is free software.  There is NO warranty; not even for
73*132f818dSEnji Cooper# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
74*132f818dSEnji Cooper#
75*132f818dSEnji Cooper# Copyright (C) 2004-2019, 2021, 2023-2024 Bootstrap Authors
76*132f818dSEnji Cooper#
77*132f818dSEnji Cooper# This file is dual licensed under the terms of the MIT license
78*132f818dSEnji Cooper# <https://opensource.org/licenses/MIT>, and GPL version 2 or later
79*132f818dSEnji Cooper# <https://www.gnu.org/licenses/gpl-2.0.html>.  You must apply one of
80*132f818dSEnji Cooper# these licenses when using or redistributing this software or any of
81*132f818dSEnji Cooper# the files within it.  See the URLs above, or the file `LICENSE`
82*132f818dSEnji Cooper# included in the Bootstrap distribution for the full license texts.
83*132f818dSEnji Cooper
84*132f818dSEnji Cooper# Please report bugs or propose patches to:
85*132f818dSEnji Cooper# <https://github.com/gnulib-modules/bootstrap/issues>
86*132f818dSEnji Cooper
87*132f818dSEnji Cooper
88*132f818dSEnji Cooper## ------ ##
89*132f818dSEnji Cooper## Usage. ##
90*132f818dSEnji Cooper## ------ ##
91*132f818dSEnji Cooper
92*132f818dSEnji Cooper# Evaluate this file near the top of your script to gain access to
93*132f818dSEnji Cooper# the functions and variables defined here:
94*132f818dSEnji Cooper#
95*132f818dSEnji Cooper#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
96*132f818dSEnji Cooper#
97*132f818dSEnji Cooper# If you need to override any of the default environment variable
98*132f818dSEnji Cooper# settings, do that before evaluating this file.
99*132f818dSEnji Cooper
100*132f818dSEnji Cooper
101*132f818dSEnji Cooper## -------------------- ##
102*132f818dSEnji Cooper## Shell normalisation. ##
103*132f818dSEnji Cooper## -------------------- ##
104*132f818dSEnji Cooper
105*132f818dSEnji Cooper# Some shells need a little help to be as Bourne compatible as possible.
106*132f818dSEnji Cooper# Before doing anything else, make sure all that help has been provided!
107*132f818dSEnji Cooper
108*132f818dSEnji CooperDUALCASE=1; export DUALCASE # for MKS sh
109*132f818dSEnji Cooperif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
110*132f818dSEnji Cooper  emulate sh
111*132f818dSEnji Cooper  NULLCMD=:
112*132f818dSEnji Cooper  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
113*132f818dSEnji Cooper  # is contrary to our usage.  Disable this feature.
114*132f818dSEnji Cooper  alias -g '${1+"$@"}'='"$@"'
115*132f818dSEnji Cooper  setopt NO_GLOB_SUBST
116*132f818dSEnji Cooperelse
117*132f818dSEnji Cooper  case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
118*132f818dSEnji Cooperfi
119*132f818dSEnji Cooper
120*132f818dSEnji Cooper# NLS nuisances: We save the old values in case they are required later.
121*132f818dSEnji Cooper_G_user_locale=
122*132f818dSEnji Cooper_G_safe_locale=
123*132f818dSEnji Cooperfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
124*132f818dSEnji Cooperdo
125*132f818dSEnji Cooper  eval "if test set = \"\${$_G_var+set}\"; then
126*132f818dSEnji Cooper          save_$_G_var=\$$_G_var
127*132f818dSEnji Cooper          $_G_var=C
128*132f818dSEnji Cooper	  export $_G_var
129*132f818dSEnji Cooper	  _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
130*132f818dSEnji Cooper	  _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
131*132f818dSEnji Cooper	fi"
132*132f818dSEnji Cooperdone
133*132f818dSEnji Cooper# These NLS vars are set unconditionally (bootstrap issue #24).  Unset those
134*132f818dSEnji Cooper# in case the environment reset is needed later and the $save_* variant is not
135*132f818dSEnji Cooper# defined (see the code above).
136*132f818dSEnji CooperLC_ALL=C
137*132f818dSEnji CooperLANGUAGE=C
138*132f818dSEnji Cooperexport LANGUAGE LC_ALL
139*132f818dSEnji Cooper
140*132f818dSEnji Cooper# Make sure IFS has a sensible default
141*132f818dSEnji Coopersp=' '
142*132f818dSEnji Coopernl='
143*132f818dSEnji Cooper'
144*132f818dSEnji CooperIFS="$sp	$nl"
145*132f818dSEnji Cooper
146*132f818dSEnji Cooper# There are apparently some systems that use ';' as a PATH separator!
147*132f818dSEnji Cooperif test "${PATH_SEPARATOR+set}" != set; then
148*132f818dSEnji Cooper  PATH_SEPARATOR=:
149*132f818dSEnji Cooper  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
150*132f818dSEnji Cooper    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
151*132f818dSEnji Cooper      PATH_SEPARATOR=';'
152*132f818dSEnji Cooper  }
153*132f818dSEnji Cooperfi
154*132f818dSEnji Cooper
155*132f818dSEnji Cooper
156*132f818dSEnji Cooper# func_unset VAR
157*132f818dSEnji Cooper# --------------
158*132f818dSEnji Cooper# Portably unset VAR.
159*132f818dSEnji Cooper# In some shells, an 'unset VAR' statement leaves a non-zero return
160*132f818dSEnji Cooper# status if VAR is already unset, which might be problematic if the
161*132f818dSEnji Cooper# statement is used at the end of a function (thus poisoning its return
162*132f818dSEnji Cooper# value) or when 'set -e' is active (causing even a spurious abort of
163*132f818dSEnji Cooper# the script in this case).
164*132f818dSEnji Cooperfunc_unset ()
165*132f818dSEnji Cooper{
166*132f818dSEnji Cooper    { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; }
167*132f818dSEnji Cooper}
168*132f818dSEnji Cooper
169*132f818dSEnji Cooper
170*132f818dSEnji Cooper# Make sure CDPATH doesn't cause `cd` commands to output the target dir.
171*132f818dSEnji Cooperfunc_unset CDPATH
172*132f818dSEnji Cooper
173*132f818dSEnji Cooper# Make sure ${,E,F}GREP behave sanely.
174*132f818dSEnji Cooperfunc_unset GREP_OPTIONS
175*132f818dSEnji Cooper
176*132f818dSEnji Cooper
177*132f818dSEnji Cooper## ------------------------- ##
178*132f818dSEnji Cooper## Locate command utilities. ##
179*132f818dSEnji Cooper## ------------------------- ##
180*132f818dSEnji Cooper
181*132f818dSEnji Cooper
182*132f818dSEnji Cooper# func_executable_p FILE
183*132f818dSEnji Cooper# ----------------------
184*132f818dSEnji Cooper# Check that FILE is an executable regular file.
185*132f818dSEnji Cooperfunc_executable_p ()
186*132f818dSEnji Cooper{
187*132f818dSEnji Cooper    test -f "$1" && test -x "$1"
188*132f818dSEnji Cooper}
189*132f818dSEnji Cooper
190*132f818dSEnji Cooper
191*132f818dSEnji Cooper# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
192*132f818dSEnji Cooper# --------------------------------------------
193*132f818dSEnji Cooper# Search for either a program that responds to --version with output
194*132f818dSEnji Cooper# containing "GNU", or else returned by CHECK_FUNC otherwise, by
195*132f818dSEnji Cooper# trying all the directories in PATH with each of the elements of
196*132f818dSEnji Cooper# PROGS_LIST.
197*132f818dSEnji Cooper#
198*132f818dSEnji Cooper# CHECK_FUNC should accept the path to a candidate program, and
199*132f818dSEnji Cooper# set $func_check_prog_result if it truncates its output less than
200*132f818dSEnji Cooper# $_G_path_prog_max characters.
201*132f818dSEnji Cooperfunc_path_progs ()
202*132f818dSEnji Cooper{
203*132f818dSEnji Cooper    _G_progs_list=$1
204*132f818dSEnji Cooper    _G_check_func=$2
205*132f818dSEnji Cooper    _G_PATH=${3-"$PATH"}
206*132f818dSEnji Cooper
207*132f818dSEnji Cooper    _G_path_prog_max=0
208*132f818dSEnji Cooper    _G_path_prog_found=false
209*132f818dSEnji Cooper    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
210*132f818dSEnji Cooper    for _G_dir in $_G_PATH; do
211*132f818dSEnji Cooper      IFS=$_G_save_IFS
212*132f818dSEnji Cooper      test -z "$_G_dir" && _G_dir=.
213*132f818dSEnji Cooper      for _G_prog_name in $_G_progs_list; do
214*132f818dSEnji Cooper        for _exeext in '' .EXE; do
215*132f818dSEnji Cooper          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
216*132f818dSEnji Cooper          func_executable_p "$_G_path_prog" || continue
217*132f818dSEnji Cooper          case `"$_G_path_prog" --version 2>&1` in
218*132f818dSEnji Cooper            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
219*132f818dSEnji Cooper            *)     $_G_check_func $_G_path_prog
220*132f818dSEnji Cooper		   func_path_progs_result=$func_check_prog_result
221*132f818dSEnji Cooper		   ;;
222*132f818dSEnji Cooper          esac
223*132f818dSEnji Cooper          $_G_path_prog_found && break 3
224*132f818dSEnji Cooper        done
225*132f818dSEnji Cooper      done
226*132f818dSEnji Cooper    done
227*132f818dSEnji Cooper    IFS=$_G_save_IFS
228*132f818dSEnji Cooper    test -z "$func_path_progs_result" && {
229*132f818dSEnji Cooper      echo "no acceptable sed could be found in \$PATH" >&2
230*132f818dSEnji Cooper      exit 1
231*132f818dSEnji Cooper    }
232*132f818dSEnji Cooper}
233*132f818dSEnji Cooper
234*132f818dSEnji Cooper
235*132f818dSEnji Cooper# We want to be able to use the functions in this file before configure
236*132f818dSEnji Cooper# has figured out where the best binaries are kept, which means we have
237*132f818dSEnji Cooper# to search for them ourselves - except when the results are already set
238*132f818dSEnji Cooper# where we skip the searches.
239*132f818dSEnji Cooper
240*132f818dSEnji Cooper# Unless the user overrides by setting SED, search the path for either GNU
241*132f818dSEnji Cooper# sed, or the sed that truncates its output the least.
242*132f818dSEnji Coopertest -z "$SED" && {
243*132f818dSEnji Cooper  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
244*132f818dSEnji Cooper  for _G_i in 1 2 3 4 5 6 7; do
245*132f818dSEnji Cooper    _G_sed_script=$_G_sed_script$nl$_G_sed_script
246*132f818dSEnji Cooper  done
247*132f818dSEnji Cooper  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
248*132f818dSEnji Cooper  _G_sed_script=
249*132f818dSEnji Cooper
250*132f818dSEnji Cooper  func_check_prog_sed ()
251*132f818dSEnji Cooper  {
252*132f818dSEnji Cooper    _G_path_prog=$1
253*132f818dSEnji Cooper
254*132f818dSEnji Cooper    _G_count=0
255*132f818dSEnji Cooper    printf 0123456789 >conftest.in
256*132f818dSEnji Cooper    while :
257*132f818dSEnji Cooper    do
258*132f818dSEnji Cooper      cat conftest.in conftest.in >conftest.tmp
259*132f818dSEnji Cooper      mv conftest.tmp conftest.in
260*132f818dSEnji Cooper      cp conftest.in conftest.nl
261*132f818dSEnji Cooper      echo '' >> conftest.nl
262*132f818dSEnji Cooper      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
263*132f818dSEnji Cooper      diff conftest.out conftest.nl >/dev/null 2>&1 || break
264*132f818dSEnji Cooper      _G_count=`expr $_G_count + 1`
265*132f818dSEnji Cooper      if test "$_G_count" -gt "$_G_path_prog_max"; then
266*132f818dSEnji Cooper        # Best one so far, save it but keep looking for a better one
267*132f818dSEnji Cooper        func_check_prog_result=$_G_path_prog
268*132f818dSEnji Cooper        _G_path_prog_max=$_G_count
269*132f818dSEnji Cooper      fi
270*132f818dSEnji Cooper      # 10*(2^10) chars as input seems more than enough
271*132f818dSEnji Cooper      test 10 -lt "$_G_count" && break
272*132f818dSEnji Cooper    done
273*132f818dSEnji Cooper    rm -f conftest.in conftest.tmp conftest.nl conftest.out
274*132f818dSEnji Cooper  }
275*132f818dSEnji Cooper
276*132f818dSEnji Cooper  func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin"
277*132f818dSEnji Cooper  rm -f conftest.sed
278*132f818dSEnji Cooper  SED=$func_path_progs_result
279*132f818dSEnji Cooper}
280*132f818dSEnji Cooper
281*132f818dSEnji Cooper
282*132f818dSEnji Cooper# Unless the user overrides by setting GREP, search the path for either GNU
283*132f818dSEnji Cooper# grep, or the grep that truncates its output the least.
284*132f818dSEnji Coopertest -z "$GREP" && {
285*132f818dSEnji Cooper  func_check_prog_grep ()
286*132f818dSEnji Cooper  {
287*132f818dSEnji Cooper    _G_path_prog=$1
288*132f818dSEnji Cooper
289*132f818dSEnji Cooper    _G_count=0
290*132f818dSEnji Cooper    _G_path_prog_max=0
291*132f818dSEnji Cooper    printf 0123456789 >conftest.in
292*132f818dSEnji Cooper    while :
293*132f818dSEnji Cooper    do
294*132f818dSEnji Cooper      cat conftest.in conftest.in >conftest.tmp
295*132f818dSEnji Cooper      mv conftest.tmp conftest.in
296*132f818dSEnji Cooper      cp conftest.in conftest.nl
297*132f818dSEnji Cooper      echo 'GREP' >> conftest.nl
298*132f818dSEnji Cooper      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
299*132f818dSEnji Cooper      diff conftest.out conftest.nl >/dev/null 2>&1 || break
300*132f818dSEnji Cooper      _G_count=`expr $_G_count + 1`
301*132f818dSEnji Cooper      if test "$_G_count" -gt "$_G_path_prog_max"; then
302*132f818dSEnji Cooper        # Best one so far, save it but keep looking for a better one
303*132f818dSEnji Cooper        func_check_prog_result=$_G_path_prog
304*132f818dSEnji Cooper        _G_path_prog_max=$_G_count
305*132f818dSEnji Cooper      fi
306*132f818dSEnji Cooper      # 10*(2^10) chars as input seems more than enough
307*132f818dSEnji Cooper      test 10 -lt "$_G_count" && break
308*132f818dSEnji Cooper    done
309*132f818dSEnji Cooper    rm -f conftest.in conftest.tmp conftest.nl conftest.out
310*132f818dSEnji Cooper  }
311*132f818dSEnji Cooper
312*132f818dSEnji Cooper  func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin"
313*132f818dSEnji Cooper  GREP=$func_path_progs_result
314*132f818dSEnji Cooper}
315*132f818dSEnji Cooper
316*132f818dSEnji Cooper
317*132f818dSEnji Cooper## ------------------------------- ##
318*132f818dSEnji Cooper## User overridable command paths. ##
319*132f818dSEnji Cooper## ------------------------------- ##
320*132f818dSEnji Cooper
321*132f818dSEnji Cooper# All uppercase variable names are used for environment variables.  These
322*132f818dSEnji Cooper# variables can be overridden by the user before calling a script that
323*132f818dSEnji Cooper# uses them if a suitable command of that name is not already available
324*132f818dSEnji Cooper# in the command search PATH.
325*132f818dSEnji Cooper
326*132f818dSEnji Cooper: ${CP="cp -f"}
327*132f818dSEnji Cooper: ${ECHO="printf %s\n"}
328*132f818dSEnji Cooper: ${EGREP="$GREP -E"}
329*132f818dSEnji Cooper: ${FGREP="$GREP -F"}
330*132f818dSEnji Cooper: ${LN_S="ln -s"}
331*132f818dSEnji Cooper: ${MAKE="make"}
332*132f818dSEnji Cooper: ${MKDIR="mkdir"}
333*132f818dSEnji Cooper: ${MV="mv -f"}
334*132f818dSEnji Cooper: ${RM="rm -f"}
335*132f818dSEnji Cooper: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
336*132f818dSEnji Cooper
337*132f818dSEnji Cooper
338*132f818dSEnji Cooper## -------------------- ##
339*132f818dSEnji Cooper## Useful sed snippets. ##
340*132f818dSEnji Cooper## -------------------- ##
341*132f818dSEnji Cooper
342*132f818dSEnji Coopersed_dirname='s|/[^/]*$||'
343*132f818dSEnji Coopersed_basename='s|^.*/||'
344*132f818dSEnji Cooper
345*132f818dSEnji Cooper# Sed substitution that helps us do robust quoting.  It backslashifies
346*132f818dSEnji Cooper# metacharacters that are still active within double-quoted strings.
347*132f818dSEnji Coopersed_quote_subst='s|\([`"$\\]\)|\\\1|g'
348*132f818dSEnji Cooper
349*132f818dSEnji Cooper# Same as above, but do not quote variable references.
350*132f818dSEnji Coopersed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
351*132f818dSEnji Cooper
352*132f818dSEnji Cooper# Sed substitution that turns a string into a regex matching for the
353*132f818dSEnji Cooper# string literally.
354*132f818dSEnji Coopersed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
355*132f818dSEnji Cooper
356*132f818dSEnji Cooper# Sed substitution that converts a w32 file name or path
357*132f818dSEnji Cooper# that contains forward slashes, into one that contains
358*132f818dSEnji Cooper# (escaped) backslashes.  A very naive implementation.
359*132f818dSEnji Coopersed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
360*132f818dSEnji Cooper
361*132f818dSEnji Cooper# Re-'\' parameter expansions in output of sed_double_quote_subst that
362*132f818dSEnji Cooper# were '\'-ed in input to the same.  If an odd number of '\' preceded a
363*132f818dSEnji Cooper# '$' in input to sed_double_quote_subst, that '$' was protected from
364*132f818dSEnji Cooper# expansion.  Since each input '\' is now two '\'s, look for any number
365*132f818dSEnji Cooper# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
366*132f818dSEnji Cooper_G_bs='\\'
367*132f818dSEnji Cooper_G_bs2='\\\\'
368*132f818dSEnji Cooper_G_bs4='\\\\\\\\'
369*132f818dSEnji Cooper_G_dollar='\$'
370*132f818dSEnji Coopersed_double_backslash="\
371*132f818dSEnji Cooper  s/$_G_bs4/&\\
372*132f818dSEnji Cooper/g
373*132f818dSEnji Cooper  s/^$_G_bs2$_G_dollar/$_G_bs&/
374*132f818dSEnji Cooper  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
375*132f818dSEnji Cooper  s/\n//g"
376*132f818dSEnji Cooper
377*132f818dSEnji Cooper# require_check_ifs_backslash
378*132f818dSEnji Cooper# ---------------------------
379*132f818dSEnji Cooper# Check if we can use backslash as IFS='\' separator, and set
380*132f818dSEnji Cooper# $check_ifs_backshlash_broken to ':' or 'false'.
381*132f818dSEnji Cooperrequire_check_ifs_backslash=func_require_check_ifs_backslash
382*132f818dSEnji Cooperfunc_require_check_ifs_backslash ()
383*132f818dSEnji Cooper{
384*132f818dSEnji Cooper  _G_save_IFS=$IFS
385*132f818dSEnji Cooper  IFS='\'
386*132f818dSEnji Cooper  _G_check_ifs_backshlash='a\\b'
387*132f818dSEnji Cooper  for _G_i in $_G_check_ifs_backshlash
388*132f818dSEnji Cooper  do
389*132f818dSEnji Cooper  case $_G_i in
390*132f818dSEnji Cooper  a)
391*132f818dSEnji Cooper    check_ifs_backshlash_broken=false
392*132f818dSEnji Cooper    ;;
393*132f818dSEnji Cooper  '')
394*132f818dSEnji Cooper    break
395*132f818dSEnji Cooper    ;;
396*132f818dSEnji Cooper  *)
397*132f818dSEnji Cooper    check_ifs_backshlash_broken=:
398*132f818dSEnji Cooper    break
399*132f818dSEnji Cooper    ;;
400*132f818dSEnji Cooper  esac
401*132f818dSEnji Cooper  done
402*132f818dSEnji Cooper  IFS=$_G_save_IFS
403*132f818dSEnji Cooper  require_check_ifs_backslash=:
404*132f818dSEnji Cooper}
405*132f818dSEnji Cooper
406*132f818dSEnji Cooper
407*132f818dSEnji Cooper## ----------------- ##
408*132f818dSEnji Cooper## Global variables. ##
409*132f818dSEnji Cooper## ----------------- ##
410*132f818dSEnji Cooper
411*132f818dSEnji Cooper# Except for the global variables explicitly listed below, the following
412*132f818dSEnji Cooper# functions in the '^func_' namespace, and the '^require_' namespace
413*132f818dSEnji Cooper# variables initialised in the 'Resource management' section, sourcing
414*132f818dSEnji Cooper# this file will not pollute your global namespace with anything
415*132f818dSEnji Cooper# else. There's no portable way to scope variables in Bourne shell
416*132f818dSEnji Cooper# though, so actually running these functions will sometimes place
417*132f818dSEnji Cooper# results into a variable named after the function, and often use
418*132f818dSEnji Cooper# temporary variables in the '^_G_' namespace. If you are careful to
419*132f818dSEnji Cooper# avoid using those namespaces casually in your sourcing script, things
420*132f818dSEnji Cooper# should continue to work as you expect. And, of course, you can freely
421*132f818dSEnji Cooper# overwrite any of the functions or variables defined here before
422*132f818dSEnji Cooper# calling anything to customize them.
423*132f818dSEnji Cooper
424*132f818dSEnji CooperEXIT_SUCCESS=0
425*132f818dSEnji CooperEXIT_FAILURE=1
426*132f818dSEnji CooperEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
427*132f818dSEnji CooperEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
428*132f818dSEnji Cooper
429*132f818dSEnji Cooper# Allow overriding, eg assuming that you follow the convention of
430*132f818dSEnji Cooper# putting '$debug_cmd' at the start of all your functions, you can get
431*132f818dSEnji Cooper# bash to show function call trace with:
432*132f818dSEnji Cooper#
433*132f818dSEnji Cooper#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
434*132f818dSEnji Cooperdebug_cmd=${debug_cmd-":"}
435*132f818dSEnji Cooperexit_cmd=:
436*132f818dSEnji Cooper
437*132f818dSEnji Cooper# By convention, finish your script with:
438*132f818dSEnji Cooper#
439*132f818dSEnji Cooper#    exit $exit_status
440*132f818dSEnji Cooper#
441*132f818dSEnji Cooper# so that you can set exit_status to non-zero if you want to indicate
442*132f818dSEnji Cooper# something went wrong during execution without actually bailing out at
443*132f818dSEnji Cooper# the point of failure.
444*132f818dSEnji Cooperexit_status=$EXIT_SUCCESS
445*132f818dSEnji Cooper
446*132f818dSEnji Cooper# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
447*132f818dSEnji Cooper# is ksh but when the shell is invoked as "sh" and the current value of
448*132f818dSEnji Cooper# the _XPG environment variable is not equal to 1 (one), the special
449*132f818dSEnji Cooper# positional parameter $0, within a function call, is the name of the
450*132f818dSEnji Cooper# function.
451*132f818dSEnji Cooperprogpath=$0
452*132f818dSEnji Cooper
453*132f818dSEnji Cooper# The name of this program.
454*132f818dSEnji Cooperprogname=`$ECHO "$progpath" |$SED "$sed_basename"`
455*132f818dSEnji Cooper
456*132f818dSEnji Cooper# Make sure we have an absolute progpath for reexecution:
457*132f818dSEnji Coopercase $progpath in
458*132f818dSEnji Cooper  [\\/]*|[A-Za-z]:\\*) ;;
459*132f818dSEnji Cooper  *[\\/]*)
460*132f818dSEnji Cooper     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
461*132f818dSEnji Cooper     progdir=`cd "$progdir" && pwd`
462*132f818dSEnji Cooper     progpath=$progdir/$progname
463*132f818dSEnji Cooper     ;;
464*132f818dSEnji Cooper  *)
465*132f818dSEnji Cooper     _G_IFS=$IFS
466*132f818dSEnji Cooper     IFS=${PATH_SEPARATOR-:}
467*132f818dSEnji Cooper     for progdir in $PATH; do
468*132f818dSEnji Cooper       IFS=$_G_IFS
469*132f818dSEnji Cooper       test -x "$progdir/$progname" && break
470*132f818dSEnji Cooper     done
471*132f818dSEnji Cooper     IFS=$_G_IFS
472*132f818dSEnji Cooper     test -n "$progdir" || progdir=`pwd`
473*132f818dSEnji Cooper     progpath=$progdir/$progname
474*132f818dSEnji Cooper     ;;
475*132f818dSEnji Cooperesac
476*132f818dSEnji Cooper
477*132f818dSEnji Cooper
478*132f818dSEnji Cooper## ----------------- ##
479*132f818dSEnji Cooper## Standard options. ##
480*132f818dSEnji Cooper## ----------------- ##
481*132f818dSEnji Cooper
482*132f818dSEnji Cooper# The following options affect the operation of the functions defined
483*132f818dSEnji Cooper# below, and should be set appropriately depending on run-time para-
484*132f818dSEnji Cooper# meters passed on the command line.
485*132f818dSEnji Cooper
486*132f818dSEnji Cooperopt_dry_run=false
487*132f818dSEnji Cooperopt_quiet=false
488*132f818dSEnji Cooperopt_verbose=false
489*132f818dSEnji Cooper
490*132f818dSEnji Cooper# Categories 'all' and 'none' are always available.  Append any others
491*132f818dSEnji Cooper# you will pass as the first argument to func_warning from your own
492*132f818dSEnji Cooper# code.
493*132f818dSEnji Cooperwarning_categories=
494*132f818dSEnji Cooper
495*132f818dSEnji Cooper# By default, display warnings according to 'opt_warning_types'.  Set
496*132f818dSEnji Cooper# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
497*132f818dSEnji Cooper# treat the next displayed warning as a fatal error.
498*132f818dSEnji Cooperwarning_func=func_warn_and_continue
499*132f818dSEnji Cooper
500*132f818dSEnji Cooper# Set to 'all' to display all warnings, 'none' to suppress all
501*132f818dSEnji Cooper# warnings, or a space delimited list of some subset of
502*132f818dSEnji Cooper# 'warning_categories' to display only the listed warnings.
503*132f818dSEnji Cooperopt_warning_types=all
504*132f818dSEnji Cooper
505*132f818dSEnji Cooper
506*132f818dSEnji Cooper## -------------------- ##
507*132f818dSEnji Cooper## Resource management. ##
508*132f818dSEnji Cooper## -------------------- ##
509*132f818dSEnji Cooper
510*132f818dSEnji Cooper# This section contains definitions for functions that each ensure a
511*132f818dSEnji Cooper# particular resource (a file, or a non-empty configuration variable for
512*132f818dSEnji Cooper# example) is available, and if appropriate to extract default values
513*132f818dSEnji Cooper# from pertinent package files. Call them using their associated
514*132f818dSEnji Cooper# 'require_*' variable to ensure that they are executed, at most, once.
515*132f818dSEnji Cooper#
516*132f818dSEnji Cooper# It's entirely deliberate that calling these functions can set
517*132f818dSEnji Cooper# variables that don't obey the namespace limitations obeyed by the rest
518*132f818dSEnji Cooper# of this file, in order that that they be as useful as possible to
519*132f818dSEnji Cooper# callers.
520*132f818dSEnji Cooper
521*132f818dSEnji Cooper
522*132f818dSEnji Cooper# require_term_colors
523*132f818dSEnji Cooper# -------------------
524*132f818dSEnji Cooper# Allow display of bold text on terminals that support it.
525*132f818dSEnji Cooperrequire_term_colors=func_require_term_colors
526*132f818dSEnji Cooperfunc_require_term_colors ()
527*132f818dSEnji Cooper{
528*132f818dSEnji Cooper    $debug_cmd
529*132f818dSEnji Cooper
530*132f818dSEnji Cooper    test -t 1 && {
531*132f818dSEnji Cooper      # COLORTERM and USE_ANSI_COLORS environment variables take
532*132f818dSEnji Cooper      # precedence, because most terminfo databases neglect to describe
533*132f818dSEnji Cooper      # whether color sequences are supported.
534*132f818dSEnji Cooper      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
535*132f818dSEnji Cooper
536*132f818dSEnji Cooper      if test 1 = "$USE_ANSI_COLORS"; then
537*132f818dSEnji Cooper        # Standard ANSI escape sequences
538*132f818dSEnji Cooper        tc_reset=''
539*132f818dSEnji Cooper        tc_bold='';   tc_standout=''
540*132f818dSEnji Cooper        tc_red='';   tc_green=''
541*132f818dSEnji Cooper        tc_blue='';  tc_cyan=''
542*132f818dSEnji Cooper      else
543*132f818dSEnji Cooper        # Otherwise trust the terminfo database after all.
544*132f818dSEnji Cooper        test -n "`tput sgr0 2>/dev/null`" && {
545*132f818dSEnji Cooper          tc_reset=`tput sgr0`
546*132f818dSEnji Cooper          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
547*132f818dSEnji Cooper          tc_standout=$tc_bold
548*132f818dSEnji Cooper          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
549*132f818dSEnji Cooper          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
550*132f818dSEnji Cooper          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
551*132f818dSEnji Cooper          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
552*132f818dSEnji Cooper          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
553*132f818dSEnji Cooper        }
554*132f818dSEnji Cooper      fi
555*132f818dSEnji Cooper    }
556*132f818dSEnji Cooper
557*132f818dSEnji Cooper    require_term_colors=:
558*132f818dSEnji Cooper}
559*132f818dSEnji Cooper
560*132f818dSEnji Cooper
561*132f818dSEnji Cooper## ----------------- ##
562*132f818dSEnji Cooper## Function library. ##
563*132f818dSEnji Cooper## ----------------- ##
564*132f818dSEnji Cooper
565*132f818dSEnji Cooper# This section contains a variety of useful functions to call in your
566*132f818dSEnji Cooper# scripts. Take note of the portable wrappers for features provided by
567*132f818dSEnji Cooper# some modern shells, which will fall back to slower equivalents on
568*132f818dSEnji Cooper# less featureful shells.
569*132f818dSEnji Cooper
570*132f818dSEnji Cooper
571*132f818dSEnji Cooper# func_append VAR VALUE
572*132f818dSEnji Cooper# ---------------------
573*132f818dSEnji Cooper# Append VALUE onto the existing contents of VAR.
574*132f818dSEnji Cooper
575*132f818dSEnji Cooper  # We should try to minimise forks, especially on Windows where they are
576*132f818dSEnji Cooper  # unreasonably slow, so skip the feature probes when bash or zsh are
577*132f818dSEnji Cooper  # being used:
578*132f818dSEnji Cooper  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
579*132f818dSEnji Cooper    : ${_G_HAVE_ARITH_OP="yes"}
580*132f818dSEnji Cooper    : ${_G_HAVE_XSI_OPS="yes"}
581*132f818dSEnji Cooper    # The += operator was introduced in bash 3.1
582*132f818dSEnji Cooper    case $BASH_VERSION in
583*132f818dSEnji Cooper      [12].* | 3.0 | 3.0*) ;;
584*132f818dSEnji Cooper      *)
585*132f818dSEnji Cooper        : ${_G_HAVE_PLUSEQ_OP="yes"}
586*132f818dSEnji Cooper        ;;
587*132f818dSEnji Cooper    esac
588*132f818dSEnji Cooper  fi
589*132f818dSEnji Cooper
590*132f818dSEnji Cooper  # _G_HAVE_PLUSEQ_OP
591*132f818dSEnji Cooper  # Can be empty, in which case the shell is probed, "yes" if += is
592*132f818dSEnji Cooper  # usable or anything else if it does not work.
593*132f818dSEnji Cooper  test -z "$_G_HAVE_PLUSEQ_OP" \
594*132f818dSEnji Cooper    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
595*132f818dSEnji Cooper    && _G_HAVE_PLUSEQ_OP=yes
596*132f818dSEnji Cooper
597*132f818dSEnji Cooperif test yes = "$_G_HAVE_PLUSEQ_OP"
598*132f818dSEnji Cooperthen
599*132f818dSEnji Cooper  # This is an XSI compatible shell, allowing a faster implementation...
600*132f818dSEnji Cooper  eval 'func_append ()
601*132f818dSEnji Cooper  {
602*132f818dSEnji Cooper    $debug_cmd
603*132f818dSEnji Cooper
604*132f818dSEnji Cooper    eval "$1+=\$2"
605*132f818dSEnji Cooper  }'
606*132f818dSEnji Cooperelse
607*132f818dSEnji Cooper  # ...otherwise fall back to using expr, which is often a shell builtin.
608*132f818dSEnji Cooper  func_append ()
609*132f818dSEnji Cooper  {
610*132f818dSEnji Cooper    $debug_cmd
611*132f818dSEnji Cooper
612*132f818dSEnji Cooper    eval "$1=\$$1\$2"
613*132f818dSEnji Cooper  }
614*132f818dSEnji Cooperfi
615*132f818dSEnji Cooper
616*132f818dSEnji Cooper
617*132f818dSEnji Cooper# func_append_quoted VAR VALUE
618*132f818dSEnji Cooper# ----------------------------
619*132f818dSEnji Cooper# Quote VALUE and append to the end of shell variable VAR, separated
620*132f818dSEnji Cooper# by a space.
621*132f818dSEnji Cooperif test yes = "$_G_HAVE_PLUSEQ_OP"; then
622*132f818dSEnji Cooper  eval 'func_append_quoted ()
623*132f818dSEnji Cooper  {
624*132f818dSEnji Cooper    $debug_cmd
625*132f818dSEnji Cooper
626*132f818dSEnji Cooper    func_quote_arg pretty "$2"
627*132f818dSEnji Cooper    eval "$1+=\\ \$func_quote_arg_result"
628*132f818dSEnji Cooper  }'
629*132f818dSEnji Cooperelse
630*132f818dSEnji Cooper  func_append_quoted ()
631*132f818dSEnji Cooper  {
632*132f818dSEnji Cooper    $debug_cmd
633*132f818dSEnji Cooper
634*132f818dSEnji Cooper    func_quote_arg pretty "$2"
635*132f818dSEnji Cooper    eval "$1=\$$1\\ \$func_quote_arg_result"
636*132f818dSEnji Cooper  }
637*132f818dSEnji Cooperfi
638*132f818dSEnji Cooper
639*132f818dSEnji Cooper
640*132f818dSEnji Cooper# func_append_uniq VAR VALUE
641*132f818dSEnji Cooper# --------------------------
642*132f818dSEnji Cooper# Append unique VALUE onto the existing contents of VAR, assuming
643*132f818dSEnji Cooper# entries are delimited by the first character of VALUE.  For example:
644*132f818dSEnji Cooper#
645*132f818dSEnji Cooper#   func_append_uniq options " --another-option option-argument"
646*132f818dSEnji Cooper#
647*132f818dSEnji Cooper# will only append to $options if " --another-option option-argument "
648*132f818dSEnji Cooper# is not already present somewhere in $options already (note spaces at
649*132f818dSEnji Cooper# each end implied by leading space in second argument).
650*132f818dSEnji Cooperfunc_append_uniq ()
651*132f818dSEnji Cooper{
652*132f818dSEnji Cooper    $debug_cmd
653*132f818dSEnji Cooper
654*132f818dSEnji Cooper    eval _G_current_value='`$ECHO $'$1'`'
655*132f818dSEnji Cooper    _G_delim=`expr "$2" : '\(.\)'`
656*132f818dSEnji Cooper
657*132f818dSEnji Cooper    case $_G_delim$_G_current_value$_G_delim in
658*132f818dSEnji Cooper      *"$2$_G_delim"*) ;;
659*132f818dSEnji Cooper      *) func_append "$@" ;;
660*132f818dSEnji Cooper    esac
661*132f818dSEnji Cooper}
662*132f818dSEnji Cooper
663*132f818dSEnji Cooper
664*132f818dSEnji Cooper# func_arith TERM...
665*132f818dSEnji Cooper# ------------------
666*132f818dSEnji Cooper# Set func_arith_result to the result of evaluating TERMs.
667*132f818dSEnji Cooper  test -z "$_G_HAVE_ARITH_OP" \
668*132f818dSEnji Cooper    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
669*132f818dSEnji Cooper    && _G_HAVE_ARITH_OP=yes
670*132f818dSEnji Cooper
671*132f818dSEnji Cooperif test yes = "$_G_HAVE_ARITH_OP"; then
672*132f818dSEnji Cooper  eval 'func_arith ()
673*132f818dSEnji Cooper  {
674*132f818dSEnji Cooper    $debug_cmd
675*132f818dSEnji Cooper
676*132f818dSEnji Cooper    func_arith_result=$(( $* ))
677*132f818dSEnji Cooper  }'
678*132f818dSEnji Cooperelse
679*132f818dSEnji Cooper  func_arith ()
680*132f818dSEnji Cooper  {
681*132f818dSEnji Cooper    $debug_cmd
682*132f818dSEnji Cooper
683*132f818dSEnji Cooper    func_arith_result=`expr "$@"`
684*132f818dSEnji Cooper  }
685*132f818dSEnji Cooperfi
686*132f818dSEnji Cooper
687*132f818dSEnji Cooper
688*132f818dSEnji Cooper# func_basename FILE
689*132f818dSEnji Cooper# ------------------
690*132f818dSEnji Cooper# Set func_basename_result to FILE with everything up to and including
691*132f818dSEnji Cooper# the last / stripped.
692*132f818dSEnji Cooperif test yes = "$_G_HAVE_XSI_OPS"; then
693*132f818dSEnji Cooper  # If this shell supports suffix pattern removal, then use it to avoid
694*132f818dSEnji Cooper  # forking. Hide the definitions single quotes in case the shell chokes
695*132f818dSEnji Cooper  # on unsupported syntax...
696*132f818dSEnji Cooper  _b='func_basename_result=${1##*/}'
697*132f818dSEnji Cooper  _d='case $1 in
698*132f818dSEnji Cooper        */*) func_dirname_result=${1%/*}$2 ;;
699*132f818dSEnji Cooper        *  ) func_dirname_result=$3        ;;
700*132f818dSEnji Cooper      esac'
701*132f818dSEnji Cooper
702*132f818dSEnji Cooperelse
703*132f818dSEnji Cooper  # ...otherwise fall back to using sed.
704*132f818dSEnji Cooper  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
705*132f818dSEnji Cooper  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
706*132f818dSEnji Cooper      if test "X$func_dirname_result" = "X$1"; then
707*132f818dSEnji Cooper        func_dirname_result=$3
708*132f818dSEnji Cooper      else
709*132f818dSEnji Cooper        func_append func_dirname_result "$2"
710*132f818dSEnji Cooper      fi'
711*132f818dSEnji Cooperfi
712*132f818dSEnji Cooper
713*132f818dSEnji Coopereval 'func_basename ()
714*132f818dSEnji Cooper{
715*132f818dSEnji Cooper    $debug_cmd
716*132f818dSEnji Cooper
717*132f818dSEnji Cooper    '"$_b"'
718*132f818dSEnji Cooper}'
719*132f818dSEnji Cooper
720*132f818dSEnji Cooper
721*132f818dSEnji Cooper# func_dirname FILE APPEND NONDIR_REPLACEMENT
722*132f818dSEnji Cooper# -------------------------------------------
723*132f818dSEnji Cooper# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
724*132f818dSEnji Cooper# otherwise set result to NONDIR_REPLACEMENT.
725*132f818dSEnji Coopereval 'func_dirname ()
726*132f818dSEnji Cooper{
727*132f818dSEnji Cooper    $debug_cmd
728*132f818dSEnji Cooper
729*132f818dSEnji Cooper    '"$_d"'
730*132f818dSEnji Cooper}'
731*132f818dSEnji Cooper
732*132f818dSEnji Cooper
733*132f818dSEnji Cooper# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
734*132f818dSEnji Cooper# --------------------------------------------------------
735*132f818dSEnji Cooper# Perform func_basename and func_dirname in a single function
736*132f818dSEnji Cooper# call:
737*132f818dSEnji Cooper#   dirname:  Compute the dirname of FILE.  If nonempty,
738*132f818dSEnji Cooper#             add APPEND to the result, otherwise set result
739*132f818dSEnji Cooper#             to NONDIR_REPLACEMENT.
740*132f818dSEnji Cooper#             value returned in "$func_dirname_result"
741*132f818dSEnji Cooper#   basename: Compute filename of FILE.
742*132f818dSEnji Cooper#             value returned in "$func_basename_result"
743*132f818dSEnji Cooper# For efficiency, we do not delegate to the functions above but instead
744*132f818dSEnji Cooper# duplicate the functionality here.
745*132f818dSEnji Coopereval 'func_dirname_and_basename ()
746*132f818dSEnji Cooper{
747*132f818dSEnji Cooper    $debug_cmd
748*132f818dSEnji Cooper
749*132f818dSEnji Cooper    '"$_b"'
750*132f818dSEnji Cooper    '"$_d"'
751*132f818dSEnji Cooper}'
752*132f818dSEnji Cooper
753*132f818dSEnji Cooper
754*132f818dSEnji Cooper# func_echo ARG...
755*132f818dSEnji Cooper# ----------------
756*132f818dSEnji Cooper# Echo program name prefixed message.
757*132f818dSEnji Cooperfunc_echo ()
758*132f818dSEnji Cooper{
759*132f818dSEnji Cooper    $debug_cmd
760*132f818dSEnji Cooper
761*132f818dSEnji Cooper    _G_message=$*
762*132f818dSEnji Cooper
763*132f818dSEnji Cooper    func_echo_IFS=$IFS
764*132f818dSEnji Cooper    IFS=$nl
765*132f818dSEnji Cooper    for _G_line in $_G_message; do
766*132f818dSEnji Cooper      IFS=$func_echo_IFS
767*132f818dSEnji Cooper      $ECHO "$progname: $_G_line"
768*132f818dSEnji Cooper    done
769*132f818dSEnji Cooper    IFS=$func_echo_IFS
770*132f818dSEnji Cooper}
771*132f818dSEnji Cooper
772*132f818dSEnji Cooper
773*132f818dSEnji Cooper# func_echo_all ARG...
774*132f818dSEnji Cooper# --------------------
775*132f818dSEnji Cooper# Invoke $ECHO with all args, space-separated.
776*132f818dSEnji Cooperfunc_echo_all ()
777*132f818dSEnji Cooper{
778*132f818dSEnji Cooper    $ECHO "$*"
779*132f818dSEnji Cooper}
780*132f818dSEnji Cooper
781*132f818dSEnji Cooper
782*132f818dSEnji Cooper# func_echo_infix_1 INFIX ARG...
783*132f818dSEnji Cooper# ------------------------------
784*132f818dSEnji Cooper# Echo program name, followed by INFIX on the first line, with any
785*132f818dSEnji Cooper# additional lines not showing INFIX.
786*132f818dSEnji Cooperfunc_echo_infix_1 ()
787*132f818dSEnji Cooper{
788*132f818dSEnji Cooper    $debug_cmd
789*132f818dSEnji Cooper
790*132f818dSEnji Cooper    $require_term_colors
791*132f818dSEnji Cooper
792*132f818dSEnji Cooper    _G_infix=$1; shift
793*132f818dSEnji Cooper    _G_indent=$_G_infix
794*132f818dSEnji Cooper    _G_prefix="$progname: $_G_infix: "
795*132f818dSEnji Cooper    _G_message=$*
796*132f818dSEnji Cooper
797*132f818dSEnji Cooper    # Strip color escape sequences before counting printable length
798*132f818dSEnji Cooper    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
799*132f818dSEnji Cooper    do
800*132f818dSEnji Cooper      test -n "$_G_tc" && {
801*132f818dSEnji Cooper        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
802*132f818dSEnji Cooper        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
803*132f818dSEnji Cooper      }
804*132f818dSEnji Cooper    done
805*132f818dSEnji Cooper    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
806*132f818dSEnji Cooper
807*132f818dSEnji Cooper    func_echo_infix_1_IFS=$IFS
808*132f818dSEnji Cooper    IFS=$nl
809*132f818dSEnji Cooper    for _G_line in $_G_message; do
810*132f818dSEnji Cooper      IFS=$func_echo_infix_1_IFS
811*132f818dSEnji Cooper      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
812*132f818dSEnji Cooper      _G_prefix=$_G_indent
813*132f818dSEnji Cooper    done
814*132f818dSEnji Cooper    IFS=$func_echo_infix_1_IFS
815*132f818dSEnji Cooper}
816*132f818dSEnji Cooper
817*132f818dSEnji Cooper
818*132f818dSEnji Cooper# func_error ARG...
819*132f818dSEnji Cooper# -----------------
820*132f818dSEnji Cooper# Echo program name prefixed message to standard error.
821*132f818dSEnji Cooperfunc_error ()
822*132f818dSEnji Cooper{
823*132f818dSEnji Cooper    $debug_cmd
824*132f818dSEnji Cooper
825*132f818dSEnji Cooper    $require_term_colors
826*132f818dSEnji Cooper
827*132f818dSEnji Cooper    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
828*132f818dSEnji Cooper}
829*132f818dSEnji Cooper
830*132f818dSEnji Cooper
831*132f818dSEnji Cooper# func_fatal_error ARG...
832*132f818dSEnji Cooper# -----------------------
833*132f818dSEnji Cooper# Echo program name prefixed message to standard error, and exit.
834*132f818dSEnji Cooperfunc_fatal_error ()
835*132f818dSEnji Cooper{
836*132f818dSEnji Cooper    $debug_cmd
837*132f818dSEnji Cooper
838*132f818dSEnji Cooper    func_error "$*"
839*132f818dSEnji Cooper    exit $EXIT_FAILURE
840*132f818dSEnji Cooper}
841*132f818dSEnji Cooper
842*132f818dSEnji Cooper
843*132f818dSEnji Cooper# func_grep EXPRESSION FILENAME
844*132f818dSEnji Cooper# -----------------------------
845*132f818dSEnji Cooper# Check whether EXPRESSION matches any line of FILENAME, without output.
846*132f818dSEnji Cooperfunc_grep ()
847*132f818dSEnji Cooper{
848*132f818dSEnji Cooper    $debug_cmd
849*132f818dSEnji Cooper
850*132f818dSEnji Cooper    $GREP "$1" "$2" >/dev/null 2>&1
851*132f818dSEnji Cooper}
852*132f818dSEnji Cooper
853*132f818dSEnji Cooper
854*132f818dSEnji Cooper# func_len STRING
855*132f818dSEnji Cooper# ---------------
856*132f818dSEnji Cooper# Set func_len_result to the length of STRING. STRING may not
857*132f818dSEnji Cooper# start with a hyphen.
858*132f818dSEnji Cooper  test -z "$_G_HAVE_XSI_OPS" \
859*132f818dSEnji Cooper    && (eval 'x=a/b/c;
860*132f818dSEnji Cooper      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
861*132f818dSEnji Cooper    && _G_HAVE_XSI_OPS=yes
862*132f818dSEnji Cooper
863*132f818dSEnji Cooperif test yes = "$_G_HAVE_XSI_OPS"; then
864*132f818dSEnji Cooper  eval 'func_len ()
865*132f818dSEnji Cooper  {
866*132f818dSEnji Cooper    $debug_cmd
867*132f818dSEnji Cooper
868*132f818dSEnji Cooper    func_len_result=${#1}
869*132f818dSEnji Cooper  }'
870*132f818dSEnji Cooperelse
871*132f818dSEnji Cooper  func_len ()
872*132f818dSEnji Cooper  {
873*132f818dSEnji Cooper    $debug_cmd
874*132f818dSEnji Cooper
875*132f818dSEnji Cooper    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
876*132f818dSEnji Cooper  }
877*132f818dSEnji Cooperfi
878*132f818dSEnji Cooper
879*132f818dSEnji Cooper
880*132f818dSEnji Cooper# func_mkdir_p DIRECTORY-PATH
881*132f818dSEnji Cooper# ---------------------------
882*132f818dSEnji Cooper# Make sure the entire path to DIRECTORY-PATH is available.
883*132f818dSEnji Cooperfunc_mkdir_p ()
884*132f818dSEnji Cooper{
885*132f818dSEnji Cooper    $debug_cmd
886*132f818dSEnji Cooper
887*132f818dSEnji Cooper    _G_directory_path=$1
888*132f818dSEnji Cooper    _G_dir_list=
889*132f818dSEnji Cooper
890*132f818dSEnji Cooper    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
891*132f818dSEnji Cooper
892*132f818dSEnji Cooper      # Protect directory names starting with '-'
893*132f818dSEnji Cooper      case $_G_directory_path in
894*132f818dSEnji Cooper        -*) _G_directory_path=./$_G_directory_path ;;
895*132f818dSEnji Cooper      esac
896*132f818dSEnji Cooper
897*132f818dSEnji Cooper      # While some portion of DIR does not yet exist...
898*132f818dSEnji Cooper      while test ! -d "$_G_directory_path"; do
899*132f818dSEnji Cooper        # ...make a list in topmost first order.  Use a colon delimited
900*132f818dSEnji Cooper	# list in case some portion of path contains whitespace.
901*132f818dSEnji Cooper        _G_dir_list=$_G_directory_path:$_G_dir_list
902*132f818dSEnji Cooper
903*132f818dSEnji Cooper        # If the last portion added has no slash in it, the list is done
904*132f818dSEnji Cooper        case $_G_directory_path in */*) ;; *) break ;; esac
905*132f818dSEnji Cooper
906*132f818dSEnji Cooper        # ...otherwise throw away the child directory and loop
907*132f818dSEnji Cooper        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
908*132f818dSEnji Cooper      done
909*132f818dSEnji Cooper      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
910*132f818dSEnji Cooper
911*132f818dSEnji Cooper      func_mkdir_p_IFS=$IFS; IFS=:
912*132f818dSEnji Cooper      for _G_dir in $_G_dir_list; do
913*132f818dSEnji Cooper	IFS=$func_mkdir_p_IFS
914*132f818dSEnji Cooper        # mkdir can fail with a 'File exist' error if two processes
915*132f818dSEnji Cooper        # try to create one of the directories concurrently.  Don't
916*132f818dSEnji Cooper        # stop in that case!
917*132f818dSEnji Cooper        $MKDIR "$_G_dir" 2>/dev/null || :
918*132f818dSEnji Cooper      done
919*132f818dSEnji Cooper      IFS=$func_mkdir_p_IFS
920*132f818dSEnji Cooper
921*132f818dSEnji Cooper      # Bail out if we (or some other process) failed to create a directory.
922*132f818dSEnji Cooper      test -d "$_G_directory_path" || \
923*132f818dSEnji Cooper        func_fatal_error "Failed to create '$1'"
924*132f818dSEnji Cooper    fi
925*132f818dSEnji Cooper}
926*132f818dSEnji Cooper
927*132f818dSEnji Cooper
928*132f818dSEnji Cooper# func_mktempdir [BASENAME]
929*132f818dSEnji Cooper# -------------------------
930*132f818dSEnji Cooper# Make a temporary directory that won't clash with other running
931*132f818dSEnji Cooper# libtool processes, and avoids race conditions if possible.  If
932*132f818dSEnji Cooper# given, BASENAME is the basename for that directory.
933*132f818dSEnji Cooperfunc_mktempdir ()
934*132f818dSEnji Cooper{
935*132f818dSEnji Cooper    $debug_cmd
936*132f818dSEnji Cooper
937*132f818dSEnji Cooper    _G_template=${TMPDIR-/tmp}/${1-$progname}
938*132f818dSEnji Cooper
939*132f818dSEnji Cooper    if test : = "$opt_dry_run"; then
940*132f818dSEnji Cooper      # Return a directory name, but don't create it in dry-run mode
941*132f818dSEnji Cooper      _G_tmpdir=$_G_template-$$
942*132f818dSEnji Cooper    else
943*132f818dSEnji Cooper
944*132f818dSEnji Cooper      # If mktemp works, use that first and foremost
945*132f818dSEnji Cooper      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
946*132f818dSEnji Cooper
947*132f818dSEnji Cooper      if test ! -d "$_G_tmpdir"; then
948*132f818dSEnji Cooper        # Failing that, at least try and use $RANDOM to avoid a race
949*132f818dSEnji Cooper        _G_tmpdir=$_G_template-${RANDOM-0}$$
950*132f818dSEnji Cooper
951*132f818dSEnji Cooper        func_mktempdir_umask=`umask`
952*132f818dSEnji Cooper        umask 0077
953*132f818dSEnji Cooper        $MKDIR "$_G_tmpdir"
954*132f818dSEnji Cooper        umask $func_mktempdir_umask
955*132f818dSEnji Cooper      fi
956*132f818dSEnji Cooper
957*132f818dSEnji Cooper      # If we're not in dry-run mode, bomb out on failure
958*132f818dSEnji Cooper      test -d "$_G_tmpdir" || \
959*132f818dSEnji Cooper        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
960*132f818dSEnji Cooper    fi
961*132f818dSEnji Cooper
962*132f818dSEnji Cooper    $ECHO "$_G_tmpdir"
963*132f818dSEnji Cooper}
964*132f818dSEnji Cooper
965*132f818dSEnji Cooper
966*132f818dSEnji Cooper# func_normal_abspath PATH
967*132f818dSEnji Cooper# ------------------------
968*132f818dSEnji Cooper# Remove doubled-up and trailing slashes, "." path components,
969*132f818dSEnji Cooper# and cancel out any ".." path components in PATH after making
970*132f818dSEnji Cooper# it an absolute path.
971*132f818dSEnji Cooperfunc_normal_abspath ()
972*132f818dSEnji Cooper{
973*132f818dSEnji Cooper    $debug_cmd
974*132f818dSEnji Cooper
975*132f818dSEnji Cooper    # These SED scripts presuppose an absolute path with a trailing slash.
976*132f818dSEnji Cooper    _G_pathcar='s|^/\([^/]*\).*$|\1|'
977*132f818dSEnji Cooper    _G_pathcdr='s|^/[^/]*||'
978*132f818dSEnji Cooper    _G_removedotparts=':dotsl
979*132f818dSEnji Cooper		s|/\./|/|g
980*132f818dSEnji Cooper		t dotsl
981*132f818dSEnji Cooper		s|/\.$|/|'
982*132f818dSEnji Cooper    _G_collapseslashes='s|/\{1,\}|/|g'
983*132f818dSEnji Cooper    _G_finalslash='s|/*$|/|'
984*132f818dSEnji Cooper
985*132f818dSEnji Cooper    # Start from root dir and reassemble the path.
986*132f818dSEnji Cooper    func_normal_abspath_result=
987*132f818dSEnji Cooper    func_normal_abspath_tpath=$1
988*132f818dSEnji Cooper    func_normal_abspath_altnamespace=
989*132f818dSEnji Cooper    case $func_normal_abspath_tpath in
990*132f818dSEnji Cooper      "")
991*132f818dSEnji Cooper        # Empty path, that just means $cwd.
992*132f818dSEnji Cooper        func_stripname '' '/' "`pwd`"
993*132f818dSEnji Cooper        func_normal_abspath_result=$func_stripname_result
994*132f818dSEnji Cooper        return
995*132f818dSEnji Cooper        ;;
996*132f818dSEnji Cooper      # The next three entries are used to spot a run of precisely
997*132f818dSEnji Cooper      # two leading slashes without using negated character classes;
998*132f818dSEnji Cooper      # we take advantage of case's first-match behaviour.
999*132f818dSEnji Cooper      ///*)
1000*132f818dSEnji Cooper        # Unusual form of absolute path, do nothing.
1001*132f818dSEnji Cooper        ;;
1002*132f818dSEnji Cooper      //*)
1003*132f818dSEnji Cooper        # Not necessarily an ordinary path; POSIX reserves leading '//'
1004*132f818dSEnji Cooper        # and for example Cygwin uses it to access remote file shares
1005*132f818dSEnji Cooper        # over CIFS/SMB, so we conserve a leading double slash if found.
1006*132f818dSEnji Cooper        func_normal_abspath_altnamespace=/
1007*132f818dSEnji Cooper        ;;
1008*132f818dSEnji Cooper      /*)
1009*132f818dSEnji Cooper        # Absolute path, do nothing.
1010*132f818dSEnji Cooper        ;;
1011*132f818dSEnji Cooper      *)
1012*132f818dSEnji Cooper        # Relative path, prepend $cwd.
1013*132f818dSEnji Cooper        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
1014*132f818dSEnji Cooper        ;;
1015*132f818dSEnji Cooper    esac
1016*132f818dSEnji Cooper
1017*132f818dSEnji Cooper    # Cancel out all the simple stuff to save iterations.  We also want
1018*132f818dSEnji Cooper    # the path to end with a slash for ease of parsing, so make sure
1019*132f818dSEnji Cooper    # there is one (and only one) here.
1020*132f818dSEnji Cooper    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
1021*132f818dSEnji Cooper          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
1022*132f818dSEnji Cooper    while :; do
1023*132f818dSEnji Cooper      # Processed it all yet?
1024*132f818dSEnji Cooper      if test / = "$func_normal_abspath_tpath"; then
1025*132f818dSEnji Cooper        # If we ascended to the root using ".." the result may be empty now.
1026*132f818dSEnji Cooper        if test -z "$func_normal_abspath_result"; then
1027*132f818dSEnji Cooper          func_normal_abspath_result=/
1028*132f818dSEnji Cooper        fi
1029*132f818dSEnji Cooper        break
1030*132f818dSEnji Cooper      fi
1031*132f818dSEnji Cooper      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
1032*132f818dSEnji Cooper          -e "$_G_pathcar"`
1033*132f818dSEnji Cooper      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
1034*132f818dSEnji Cooper          -e "$_G_pathcdr"`
1035*132f818dSEnji Cooper      # Figure out what to do with it
1036*132f818dSEnji Cooper      case $func_normal_abspath_tcomponent in
1037*132f818dSEnji Cooper        "")
1038*132f818dSEnji Cooper          # Trailing empty path component, ignore it.
1039*132f818dSEnji Cooper          ;;
1040*132f818dSEnji Cooper        ..)
1041*132f818dSEnji Cooper          # Parent dir; strip last assembled component from result.
1042*132f818dSEnji Cooper          func_dirname "$func_normal_abspath_result"
1043*132f818dSEnji Cooper          func_normal_abspath_result=$func_dirname_result
1044*132f818dSEnji Cooper          ;;
1045*132f818dSEnji Cooper        *)
1046*132f818dSEnji Cooper          # Actual path component, append it.
1047*132f818dSEnji Cooper          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
1048*132f818dSEnji Cooper          ;;
1049*132f818dSEnji Cooper      esac
1050*132f818dSEnji Cooper    done
1051*132f818dSEnji Cooper    # Restore leading double-slash if one was found on entry.
1052*132f818dSEnji Cooper    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
1053*132f818dSEnji Cooper}
1054*132f818dSEnji Cooper
1055*132f818dSEnji Cooper
1056*132f818dSEnji Cooper# func_notquiet ARG...
1057*132f818dSEnji Cooper# --------------------
1058*132f818dSEnji Cooper# Echo program name prefixed message only when not in quiet mode.
1059*132f818dSEnji Cooperfunc_notquiet ()
1060*132f818dSEnji Cooper{
1061*132f818dSEnji Cooper    $debug_cmd
1062*132f818dSEnji Cooper
1063*132f818dSEnji Cooper    $opt_quiet || func_echo ${1+"$@"}
1064*132f818dSEnji Cooper
1065*132f818dSEnji Cooper    # A bug in bash halts the script if the last line of a function
1066*132f818dSEnji Cooper    # fails when set -e is in force, so we need another command to
1067*132f818dSEnji Cooper    # work around that:
1068*132f818dSEnji Cooper    :
1069*132f818dSEnji Cooper}
1070*132f818dSEnji Cooper
1071*132f818dSEnji Cooper
1072*132f818dSEnji Cooper# func_relative_path SRCDIR DSTDIR
1073*132f818dSEnji Cooper# --------------------------------
1074*132f818dSEnji Cooper# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
1075*132f818dSEnji Cooperfunc_relative_path ()
1076*132f818dSEnji Cooper{
1077*132f818dSEnji Cooper    $debug_cmd
1078*132f818dSEnji Cooper
1079*132f818dSEnji Cooper    func_relative_path_result=
1080*132f818dSEnji Cooper    func_normal_abspath "$1"
1081*132f818dSEnji Cooper    func_relative_path_tlibdir=$func_normal_abspath_result
1082*132f818dSEnji Cooper    func_normal_abspath "$2"
1083*132f818dSEnji Cooper    func_relative_path_tbindir=$func_normal_abspath_result
1084*132f818dSEnji Cooper
1085*132f818dSEnji Cooper    # Ascend the tree starting from libdir
1086*132f818dSEnji Cooper    while :; do
1087*132f818dSEnji Cooper      # check if we have found a prefix of bindir
1088*132f818dSEnji Cooper      case $func_relative_path_tbindir in
1089*132f818dSEnji Cooper        $func_relative_path_tlibdir)
1090*132f818dSEnji Cooper          # found an exact match
1091*132f818dSEnji Cooper          func_relative_path_tcancelled=
1092*132f818dSEnji Cooper          break
1093*132f818dSEnji Cooper          ;;
1094*132f818dSEnji Cooper        $func_relative_path_tlibdir*)
1095*132f818dSEnji Cooper          # found a matching prefix
1096*132f818dSEnji Cooper          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
1097*132f818dSEnji Cooper          func_relative_path_tcancelled=$func_stripname_result
1098*132f818dSEnji Cooper          if test -z "$func_relative_path_result"; then
1099*132f818dSEnji Cooper            func_relative_path_result=.
1100*132f818dSEnji Cooper          fi
1101*132f818dSEnji Cooper          break
1102*132f818dSEnji Cooper          ;;
1103*132f818dSEnji Cooper        *)
1104*132f818dSEnji Cooper          func_dirname $func_relative_path_tlibdir
1105*132f818dSEnji Cooper          func_relative_path_tlibdir=$func_dirname_result
1106*132f818dSEnji Cooper          if test -z "$func_relative_path_tlibdir"; then
1107*132f818dSEnji Cooper            # Have to descend all the way to the root!
1108*132f818dSEnji Cooper            func_relative_path_result=../$func_relative_path_result
1109*132f818dSEnji Cooper            func_relative_path_tcancelled=$func_relative_path_tbindir
1110*132f818dSEnji Cooper            break
1111*132f818dSEnji Cooper          fi
1112*132f818dSEnji Cooper          func_relative_path_result=../$func_relative_path_result
1113*132f818dSEnji Cooper          ;;
1114*132f818dSEnji Cooper      esac
1115*132f818dSEnji Cooper    done
1116*132f818dSEnji Cooper
1117*132f818dSEnji Cooper    # Now calculate path; take care to avoid doubling-up slashes.
1118*132f818dSEnji Cooper    func_stripname '' '/' "$func_relative_path_result"
1119*132f818dSEnji Cooper    func_relative_path_result=$func_stripname_result
1120*132f818dSEnji Cooper    func_stripname '/' '/' "$func_relative_path_tcancelled"
1121*132f818dSEnji Cooper    if test -n "$func_stripname_result"; then
1122*132f818dSEnji Cooper      func_append func_relative_path_result "/$func_stripname_result"
1123*132f818dSEnji Cooper    fi
1124*132f818dSEnji Cooper
1125*132f818dSEnji Cooper    # Normalisation. If bindir is libdir, return '.' else relative path.
1126*132f818dSEnji Cooper    if test -n "$func_relative_path_result"; then
1127*132f818dSEnji Cooper      func_stripname './' '' "$func_relative_path_result"
1128*132f818dSEnji Cooper      func_relative_path_result=$func_stripname_result
1129*132f818dSEnji Cooper    fi
1130*132f818dSEnji Cooper
1131*132f818dSEnji Cooper    test -n "$func_relative_path_result" || func_relative_path_result=.
1132*132f818dSEnji Cooper
1133*132f818dSEnji Cooper    :
1134*132f818dSEnji Cooper}
1135*132f818dSEnji Cooper
1136*132f818dSEnji Cooper
1137*132f818dSEnji Cooper# func_quote_portable EVAL ARG
1138*132f818dSEnji Cooper# ----------------------------
1139*132f818dSEnji Cooper# Internal function to portably implement func_quote_arg.  Note that we still
1140*132f818dSEnji Cooper# keep attention to performance here so we as much as possible try to avoid
1141*132f818dSEnji Cooper# calling sed binary (so far O(N) complexity as long as func_append is O(1)).
1142*132f818dSEnji Cooperfunc_quote_portable ()
1143*132f818dSEnji Cooper{
1144*132f818dSEnji Cooper    $debug_cmd
1145*132f818dSEnji Cooper
1146*132f818dSEnji Cooper    $require_check_ifs_backslash
1147*132f818dSEnji Cooper
1148*132f818dSEnji Cooper    func_quote_portable_result=$2
1149*132f818dSEnji Cooper
1150*132f818dSEnji Cooper    # one-time-loop (easy break)
1151*132f818dSEnji Cooper    while true
1152*132f818dSEnji Cooper    do
1153*132f818dSEnji Cooper      if $1; then
1154*132f818dSEnji Cooper        func_quote_portable_result=`$ECHO "$2" | $SED \
1155*132f818dSEnji Cooper          -e "$sed_double_quote_subst" -e "$sed_double_backslash"`
1156*132f818dSEnji Cooper        break
1157*132f818dSEnji Cooper      fi
1158*132f818dSEnji Cooper
1159*132f818dSEnji Cooper      # Quote for eval.
1160*132f818dSEnji Cooper      case $func_quote_portable_result in
1161*132f818dSEnji Cooper        *[\\\`\"\$]*)
1162*132f818dSEnji Cooper          # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string
1163*132f818dSEnji Cooper          # contains the shell wildcard characters.
1164*132f818dSEnji Cooper          case $check_ifs_backshlash_broken$func_quote_portable_result in
1165*132f818dSEnji Cooper            :*|*[\[\*\?]*)
1166*132f818dSEnji Cooper              func_quote_portable_result=`$ECHO "$func_quote_portable_result" \
1167*132f818dSEnji Cooper                  | $SED "$sed_quote_subst"`
1168*132f818dSEnji Cooper              break
1169*132f818dSEnji Cooper              ;;
1170*132f818dSEnji Cooper          esac
1171*132f818dSEnji Cooper
1172*132f818dSEnji Cooper          func_quote_portable_old_IFS=$IFS
1173*132f818dSEnji Cooper          for _G_char in '\' '`' '"' '$'
1174*132f818dSEnji Cooper          do
1175*132f818dSEnji Cooper            # STATE($1) PREV($2) SEPARATOR($3)
1176*132f818dSEnji Cooper            set start "" ""
1177*132f818dSEnji Cooper            func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy
1178*132f818dSEnji Cooper            IFS=$_G_char
1179*132f818dSEnji Cooper            for _G_part in $func_quote_portable_result
1180*132f818dSEnji Cooper            do
1181*132f818dSEnji Cooper              case $1 in
1182*132f818dSEnji Cooper              quote)
1183*132f818dSEnji Cooper                func_append func_quote_portable_result "$3$2"
1184*132f818dSEnji Cooper                set quote "$_G_part" "\\$_G_char"
1185*132f818dSEnji Cooper                ;;
1186*132f818dSEnji Cooper              start)
1187*132f818dSEnji Cooper                set first "" ""
1188*132f818dSEnji Cooper                func_quote_portable_result=
1189*132f818dSEnji Cooper                ;;
1190*132f818dSEnji Cooper              first)
1191*132f818dSEnji Cooper                set quote "$_G_part" ""
1192*132f818dSEnji Cooper                ;;
1193*132f818dSEnji Cooper              esac
1194*132f818dSEnji Cooper            done
1195*132f818dSEnji Cooper          done
1196*132f818dSEnji Cooper          IFS=$func_quote_portable_old_IFS
1197*132f818dSEnji Cooper          ;;
1198*132f818dSEnji Cooper        *) ;;
1199*132f818dSEnji Cooper      esac
1200*132f818dSEnji Cooper      break
1201*132f818dSEnji Cooper    done
1202*132f818dSEnji Cooper
1203*132f818dSEnji Cooper    func_quote_portable_unquoted_result=$func_quote_portable_result
1204*132f818dSEnji Cooper    case $func_quote_portable_result in
1205*132f818dSEnji Cooper      # double-quote args containing shell metacharacters to delay
1206*132f818dSEnji Cooper      # word splitting, command substitution and variable expansion
1207*132f818dSEnji Cooper      # for a subsequent eval.
1208*132f818dSEnji Cooper      # many bourne shells cannot handle close brackets correctly
1209*132f818dSEnji Cooper      # in scan sets, so we specify it separately.
1210*132f818dSEnji Cooper      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
1211*132f818dSEnji Cooper        func_quote_portable_result=\"$func_quote_portable_result\"
1212*132f818dSEnji Cooper        ;;
1213*132f818dSEnji Cooper    esac
1214*132f818dSEnji Cooper}
1215*132f818dSEnji Cooper
1216*132f818dSEnji Cooper
1217*132f818dSEnji Cooper# func_quotefast_eval ARG
1218*132f818dSEnji Cooper# -----------------------
1219*132f818dSEnji Cooper# Quote one ARG (internal).  This is equivalent to 'func_quote_arg eval ARG',
1220*132f818dSEnji Cooper# but optimized for speed.  Result is stored in $func_quotefast_eval.
1221*132f818dSEnji Cooperif test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then
1222*132f818dSEnji Cooper  printf -v _GL_test_printf_tilde %q '~'
1223*132f818dSEnji Cooper  if test '\~' = "$_GL_test_printf_tilde"; then
1224*132f818dSEnji Cooper    func_quotefast_eval ()
1225*132f818dSEnji Cooper    {
1226*132f818dSEnji Cooper      printf -v func_quotefast_eval_result %q "$1"
1227*132f818dSEnji Cooper    }
1228*132f818dSEnji Cooper  else
1229*132f818dSEnji Cooper    # Broken older Bash implementations.  Make those faster too if possible.
1230*132f818dSEnji Cooper    func_quotefast_eval ()
1231*132f818dSEnji Cooper    {
1232*132f818dSEnji Cooper      case $1 in
1233*132f818dSEnji Cooper        '~'*)
1234*132f818dSEnji Cooper          func_quote_portable false "$1"
1235*132f818dSEnji Cooper          func_quotefast_eval_result=$func_quote_portable_result
1236*132f818dSEnji Cooper          ;;
1237*132f818dSEnji Cooper        *)
1238*132f818dSEnji Cooper          printf -v func_quotefast_eval_result %q "$1"
1239*132f818dSEnji Cooper          ;;
1240*132f818dSEnji Cooper      esac
1241*132f818dSEnji Cooper    }
1242*132f818dSEnji Cooper  fi
1243*132f818dSEnji Cooperelse
1244*132f818dSEnji Cooper  func_quotefast_eval ()
1245*132f818dSEnji Cooper  {
1246*132f818dSEnji Cooper    func_quote_portable false "$1"
1247*132f818dSEnji Cooper    func_quotefast_eval_result=$func_quote_portable_result
1248*132f818dSEnji Cooper  }
1249*132f818dSEnji Cooperfi
1250*132f818dSEnji Cooper
1251*132f818dSEnji Cooper
1252*132f818dSEnji Cooper# func_quote_arg MODEs ARG
1253*132f818dSEnji Cooper# ------------------------
1254*132f818dSEnji Cooper# Quote one ARG to be evaled later.  MODEs argument may contain zero or more
1255*132f818dSEnji Cooper# specifiers listed below separated by ',' character.  This function returns two
1256*132f818dSEnji Cooper# values:
1257*132f818dSEnji Cooper#   i) func_quote_arg_result
1258*132f818dSEnji Cooper#      double-quoted (when needed), suitable for a subsequent eval
1259*132f818dSEnji Cooper#  ii) func_quote_arg_unquoted_result
1260*132f818dSEnji Cooper#      has all characters that are still active within double
1261*132f818dSEnji Cooper#      quotes backslashified.  Available only if 'unquoted' is specified.
1262*132f818dSEnji Cooper#
1263*132f818dSEnji Cooper# Available modes:
1264*132f818dSEnji Cooper# ----------------
1265*132f818dSEnji Cooper# 'eval' (default)
1266*132f818dSEnji Cooper#       - escape shell special characters
1267*132f818dSEnji Cooper# 'expand'
1268*132f818dSEnji Cooper#       - the same as 'eval';  but do not quote variable references
1269*132f818dSEnji Cooper# 'pretty'
1270*132f818dSEnji Cooper#       - request aesthetic output, i.e. '"a b"' instead of 'a\ b'.  This might
1271*132f818dSEnji Cooper#         be used later in func_quote to get output like: 'echo "a b"' instead
1272*132f818dSEnji Cooper#         of 'echo a\ b'.  This is slower than default on some shells.
1273*132f818dSEnji Cooper# 'unquoted'
1274*132f818dSEnji Cooper#       - produce also $func_quote_arg_unquoted_result which does not contain
1275*132f818dSEnji Cooper#         wrapping double-quotes.
1276*132f818dSEnji Cooper#
1277*132f818dSEnji Cooper# Examples for 'func_quote_arg pretty,unquoted string':
1278*132f818dSEnji Cooper#
1279*132f818dSEnji Cooper#   string      | *_result              | *_unquoted_result
1280*132f818dSEnji Cooper#   ------------+-----------------------+-------------------
1281*132f818dSEnji Cooper#   "           | \"                    | \"
1282*132f818dSEnji Cooper#   a b         | "a b"                 | a b
1283*132f818dSEnji Cooper#   "a b"       | "\"a b\""             | \"a b\"
1284*132f818dSEnji Cooper#   *           | "*"                   | *
1285*132f818dSEnji Cooper#   z="${x-$y}" | "z=\"\${x-\$y}\""     | z=\"\${x-\$y}\"
1286*132f818dSEnji Cooper#
1287*132f818dSEnji Cooper# Examples for 'func_quote_arg pretty,unquoted,expand string':
1288*132f818dSEnji Cooper#
1289*132f818dSEnji Cooper#   string        |   *_result          |  *_unquoted_result
1290*132f818dSEnji Cooper#   --------------+---------------------+--------------------
1291*132f818dSEnji Cooper#   z="${x-$y}"   | "z=\"${x-$y}\""     | z=\"${x-$y}\"
1292*132f818dSEnji Cooperfunc_quote_arg ()
1293*132f818dSEnji Cooper{
1294*132f818dSEnji Cooper    _G_quote_expand=false
1295*132f818dSEnji Cooper    case ,$1, in
1296*132f818dSEnji Cooper      *,expand,*)
1297*132f818dSEnji Cooper        _G_quote_expand=:
1298*132f818dSEnji Cooper        ;;
1299*132f818dSEnji Cooper    esac
1300*132f818dSEnji Cooper
1301*132f818dSEnji Cooper    case ,$1, in
1302*132f818dSEnji Cooper      *,pretty,*|*,expand,*|*,unquoted,*)
1303*132f818dSEnji Cooper        func_quote_portable $_G_quote_expand "$2"
1304*132f818dSEnji Cooper        func_quote_arg_result=$func_quote_portable_result
1305*132f818dSEnji Cooper        func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result
1306*132f818dSEnji Cooper        ;;
1307*132f818dSEnji Cooper      *)
1308*132f818dSEnji Cooper        # Faster quote-for-eval for some shells.
1309*132f818dSEnji Cooper        func_quotefast_eval "$2"
1310*132f818dSEnji Cooper        func_quote_arg_result=$func_quotefast_eval_result
1311*132f818dSEnji Cooper        ;;
1312*132f818dSEnji Cooper    esac
1313*132f818dSEnji Cooper}
1314*132f818dSEnji Cooper
1315*132f818dSEnji Cooper
1316*132f818dSEnji Cooper# func_quote MODEs ARGs...
1317*132f818dSEnji Cooper# ------------------------
1318*132f818dSEnji Cooper# Quote all ARGs to be evaled later and join them into single command.  See
1319*132f818dSEnji Cooper# func_quote_arg's description for more info.
1320*132f818dSEnji Cooperfunc_quote ()
1321*132f818dSEnji Cooper{
1322*132f818dSEnji Cooper    $debug_cmd
1323*132f818dSEnji Cooper    _G_func_quote_mode=$1 ; shift
1324*132f818dSEnji Cooper    func_quote_result=
1325*132f818dSEnji Cooper    while test 0 -lt $#; do
1326*132f818dSEnji Cooper      func_quote_arg "$_G_func_quote_mode" "$1"
1327*132f818dSEnji Cooper      if test -n "$func_quote_result"; then
1328*132f818dSEnji Cooper        func_append func_quote_result " $func_quote_arg_result"
1329*132f818dSEnji Cooper      else
1330*132f818dSEnji Cooper        func_append func_quote_result "$func_quote_arg_result"
1331*132f818dSEnji Cooper      fi
1332*132f818dSEnji Cooper      shift
1333*132f818dSEnji Cooper    done
1334*132f818dSEnji Cooper}
1335*132f818dSEnji Cooper
1336*132f818dSEnji Cooper
1337*132f818dSEnji Cooper# func_stripname PREFIX SUFFIX NAME
1338*132f818dSEnji Cooper# ---------------------------------
1339*132f818dSEnji Cooper# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
1340*132f818dSEnji Cooper# PREFIX and SUFFIX must not contain globbing or regex special
1341*132f818dSEnji Cooper# characters, hashes, percent signs, but SUFFIX may contain a leading
1342*132f818dSEnji Cooper# dot (in which case that matches only a dot).
1343*132f818dSEnji Cooperif test yes = "$_G_HAVE_XSI_OPS"; then
1344*132f818dSEnji Cooper  eval 'func_stripname ()
1345*132f818dSEnji Cooper  {
1346*132f818dSEnji Cooper    $debug_cmd
1347*132f818dSEnji Cooper
1348*132f818dSEnji Cooper    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
1349*132f818dSEnji Cooper    # positional parameters, so assign one to ordinary variable first.
1350*132f818dSEnji Cooper    func_stripname_result=$3
1351*132f818dSEnji Cooper    func_stripname_result=${func_stripname_result#"$1"}
1352*132f818dSEnji Cooper    func_stripname_result=${func_stripname_result%"$2"}
1353*132f818dSEnji Cooper  }'
1354*132f818dSEnji Cooperelse
1355*132f818dSEnji Cooper  func_stripname ()
1356*132f818dSEnji Cooper  {
1357*132f818dSEnji Cooper    $debug_cmd
1358*132f818dSEnji Cooper
1359*132f818dSEnji Cooper    case $2 in
1360*132f818dSEnji Cooper      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
1361*132f818dSEnji Cooper      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
1362*132f818dSEnji Cooper    esac
1363*132f818dSEnji Cooper  }
1364*132f818dSEnji Cooperfi
1365*132f818dSEnji Cooper
1366*132f818dSEnji Cooper
1367*132f818dSEnji Cooper# func_show_eval CMD [FAIL_EXP]
1368*132f818dSEnji Cooper# -----------------------------
1369*132f818dSEnji Cooper# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
1370*132f818dSEnji Cooper# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
1371*132f818dSEnji Cooper# is given, then evaluate it.
1372*132f818dSEnji Cooperfunc_show_eval ()
1373*132f818dSEnji Cooper{
1374*132f818dSEnji Cooper    $debug_cmd
1375*132f818dSEnji Cooper
1376*132f818dSEnji Cooper    _G_cmd=$1
1377*132f818dSEnji Cooper    _G_fail_exp=${2-':'}
1378*132f818dSEnji Cooper
1379*132f818dSEnji Cooper    func_quote_arg pretty,expand "$_G_cmd"
1380*132f818dSEnji Cooper    eval "func_notquiet $func_quote_arg_result"
1381*132f818dSEnji Cooper
1382*132f818dSEnji Cooper    $opt_dry_run || {
1383*132f818dSEnji Cooper      eval "$_G_cmd"
1384*132f818dSEnji Cooper      _G_status=$?
1385*132f818dSEnji Cooper      if test 0 -ne "$_G_status"; then
1386*132f818dSEnji Cooper	eval "(exit $_G_status); $_G_fail_exp"
1387*132f818dSEnji Cooper      fi
1388*132f818dSEnji Cooper    }
1389*132f818dSEnji Cooper}
1390*132f818dSEnji Cooper
1391*132f818dSEnji Cooper
1392*132f818dSEnji Cooper# func_show_eval_locale CMD [FAIL_EXP]
1393*132f818dSEnji Cooper# ------------------------------------
1394*132f818dSEnji Cooper# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
1395*132f818dSEnji Cooper# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
1396*132f818dSEnji Cooper# is given, then evaluate it.  Use the saved locale for evaluation.
1397*132f818dSEnji Cooperfunc_show_eval_locale ()
1398*132f818dSEnji Cooper{
1399*132f818dSEnji Cooper    $debug_cmd
1400*132f818dSEnji Cooper
1401*132f818dSEnji Cooper    _G_cmd=$1
1402*132f818dSEnji Cooper    _G_fail_exp=${2-':'}
1403*132f818dSEnji Cooper
1404*132f818dSEnji Cooper    $opt_quiet || {
1405*132f818dSEnji Cooper      func_quote_arg expand,pretty "$_G_cmd"
1406*132f818dSEnji Cooper      eval "func_echo $func_quote_arg_result"
1407*132f818dSEnji Cooper    }
1408*132f818dSEnji Cooper
1409*132f818dSEnji Cooper    $opt_dry_run || {
1410*132f818dSEnji Cooper      eval "$_G_user_locale
1411*132f818dSEnji Cooper	    $_G_cmd"
1412*132f818dSEnji Cooper      _G_status=$?
1413*132f818dSEnji Cooper      eval "$_G_safe_locale"
1414*132f818dSEnji Cooper      if test 0 -ne "$_G_status"; then
1415*132f818dSEnji Cooper	eval "(exit $_G_status); $_G_fail_exp"
1416*132f818dSEnji Cooper      fi
1417*132f818dSEnji Cooper    }
1418*132f818dSEnji Cooper}
1419*132f818dSEnji Cooper
1420*132f818dSEnji Cooper
1421*132f818dSEnji Cooper# func_tr_sh
1422*132f818dSEnji Cooper# ----------
1423*132f818dSEnji Cooper# Turn $1 into a string suitable for a shell variable name.
1424*132f818dSEnji Cooper# Result is stored in $func_tr_sh_result.  All characters
1425*132f818dSEnji Cooper# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
1426*132f818dSEnji Cooper# if $1 begins with a digit, a '_' is prepended as well.
1427*132f818dSEnji Cooperfunc_tr_sh ()
1428*132f818dSEnji Cooper{
1429*132f818dSEnji Cooper    $debug_cmd
1430*132f818dSEnji Cooper
1431*132f818dSEnji Cooper    case $1 in
1432*132f818dSEnji Cooper    [0-9]* | *[!a-zA-Z0-9_]*)
1433*132f818dSEnji Cooper      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
1434*132f818dSEnji Cooper      ;;
1435*132f818dSEnji Cooper    * )
1436*132f818dSEnji Cooper      func_tr_sh_result=$1
1437*132f818dSEnji Cooper      ;;
1438*132f818dSEnji Cooper    esac
1439*132f818dSEnji Cooper}
1440*132f818dSEnji Cooper
1441*132f818dSEnji Cooper
1442*132f818dSEnji Cooper# func_verbose ARG...
1443*132f818dSEnji Cooper# -------------------
1444*132f818dSEnji Cooper# Echo program name prefixed message in verbose mode only.
1445*132f818dSEnji Cooperfunc_verbose ()
1446*132f818dSEnji Cooper{
1447*132f818dSEnji Cooper    $debug_cmd
1448*132f818dSEnji Cooper
1449*132f818dSEnji Cooper    $opt_verbose && func_echo "$*"
1450*132f818dSEnji Cooper
1451*132f818dSEnji Cooper    :
1452*132f818dSEnji Cooper}
1453*132f818dSEnji Cooper
1454*132f818dSEnji Cooper
1455*132f818dSEnji Cooper# func_warn_and_continue ARG...
1456*132f818dSEnji Cooper# -----------------------------
1457*132f818dSEnji Cooper# Echo program name prefixed warning message to standard error.
1458*132f818dSEnji Cooperfunc_warn_and_continue ()
1459*132f818dSEnji Cooper{
1460*132f818dSEnji Cooper    $debug_cmd
1461*132f818dSEnji Cooper
1462*132f818dSEnji Cooper    $require_term_colors
1463*132f818dSEnji Cooper
1464*132f818dSEnji Cooper    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
1465*132f818dSEnji Cooper}
1466*132f818dSEnji Cooper
1467*132f818dSEnji Cooper
1468*132f818dSEnji Cooper# func_warning CATEGORY ARG...
1469*132f818dSEnji Cooper# ----------------------------
1470*132f818dSEnji Cooper# Echo program name prefixed warning message to standard error. Warning
1471*132f818dSEnji Cooper# messages can be filtered according to CATEGORY, where this function
1472*132f818dSEnji Cooper# elides messages where CATEGORY is not listed in the global variable
1473*132f818dSEnji Cooper# 'opt_warning_types'.
1474*132f818dSEnji Cooperfunc_warning ()
1475*132f818dSEnji Cooper{
1476*132f818dSEnji Cooper    $debug_cmd
1477*132f818dSEnji Cooper
1478*132f818dSEnji Cooper    # CATEGORY must be in the warning_categories list!
1479*132f818dSEnji Cooper    case " $warning_categories " in
1480*132f818dSEnji Cooper      *" $1 "*) ;;
1481*132f818dSEnji Cooper      *) func_internal_error "invalid warning category '$1'" ;;
1482*132f818dSEnji Cooper    esac
1483*132f818dSEnji Cooper
1484*132f818dSEnji Cooper    _G_category=$1
1485*132f818dSEnji Cooper    shift
1486*132f818dSEnji Cooper
1487*132f818dSEnji Cooper    case " $opt_warning_types " in
1488*132f818dSEnji Cooper      *" $_G_category "*) $warning_func ${1+"$@"} ;;
1489*132f818dSEnji Cooper    esac
1490*132f818dSEnji Cooper}
1491*132f818dSEnji Cooper
1492*132f818dSEnji Cooper
1493*132f818dSEnji Cooper# func_sort_ver VER1 VER2
1494*132f818dSEnji Cooper# -----------------------
1495*132f818dSEnji Cooper# 'sort -V' is not generally available.
1496*132f818dSEnji Cooper# Note this deviates from the version comparison in automake
1497*132f818dSEnji Cooper# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
1498*132f818dSEnji Cooper# but this should suffice as we won't be specifying old
1499*132f818dSEnji Cooper# version formats or redundant trailing .0 in bootstrap.conf.
1500*132f818dSEnji Cooper# If we did want full compatibility then we should probably
1501*132f818dSEnji Cooper# use m4_version_compare from autoconf.
1502*132f818dSEnji Cooperfunc_sort_ver ()
1503*132f818dSEnji Cooper{
1504*132f818dSEnji Cooper    $debug_cmd
1505*132f818dSEnji Cooper
1506*132f818dSEnji Cooper    printf '%s\n%s\n' "$1" "$2" \
1507*132f818dSEnji Cooper      | 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
1508*132f818dSEnji Cooper}
1509*132f818dSEnji Cooper
1510*132f818dSEnji Cooper# func_lt_ver PREV CURR
1511*132f818dSEnji Cooper# ---------------------
1512*132f818dSEnji Cooper# Return true if PREV and CURR are in the correct order according to
1513*132f818dSEnji Cooper# func_sort_ver, otherwise false.  Use it like this:
1514*132f818dSEnji Cooper#
1515*132f818dSEnji Cooper#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
1516*132f818dSEnji Cooperfunc_lt_ver ()
1517*132f818dSEnji Cooper{
1518*132f818dSEnji Cooper    $debug_cmd
1519*132f818dSEnji Cooper
1520*132f818dSEnji Cooper    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
1521*132f818dSEnji Cooper}
1522*132f818dSEnji Cooper
1523*132f818dSEnji Cooper
1524*132f818dSEnji Cooper# Local variables:
1525*132f818dSEnji Cooper# mode: shell-script
1526*132f818dSEnji Cooper# sh-indentation: 2
1527*132f818dSEnji Cooper# eval: (add-hook 'before-save-hook 'time-stamp)
1528*132f818dSEnji Cooper# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
1529*132f818dSEnji Cooper# time-stamp-time-zone: "UTC"
1530*132f818dSEnji Cooper# End:
1531*132f818dSEnji Cooper#! /bin/sh
1532*132f818dSEnji Cooper
1533*132f818dSEnji Cooper# A portable, pluggable option parser for Bourne shell.
1534*132f818dSEnji Cooper# Written by Gary V. Vaughan, 2010
1535*132f818dSEnji Cooper
1536*132f818dSEnji Cooper# This is free software.  There is NO warranty; not even for
1537*132f818dSEnji Cooper# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1538*132f818dSEnji Cooper#
1539*132f818dSEnji Cooper# Copyright (C) 2010-2019, 2021, 2023-2024 Bootstrap Authors
1540*132f818dSEnji Cooper#
1541*132f818dSEnji Cooper# This file is dual licensed under the terms of the MIT license
1542*132f818dSEnji Cooper# <https://opensource.org/licenses/MIT>, and GPL version 2 or later
1543*132f818dSEnji Cooper# <https://www.gnu.org/licenses/gpl-2.0.html>.  You must apply one of
1544*132f818dSEnji Cooper# these licenses when using or redistributing this software or any of
1545*132f818dSEnji Cooper# the files within it.  See the URLs above, or the file `LICENSE`
1546*132f818dSEnji Cooper# included in the Bootstrap distribution for the full license texts.
1547*132f818dSEnji Cooper
1548*132f818dSEnji Cooper# Please report bugs or propose patches to:
1549*132f818dSEnji Cooper# <https://github.com/gnulib-modules/bootstrap/issues>
1550*132f818dSEnji Cooper
1551*132f818dSEnji Cooper# Set a version string for this script.
1552*132f818dSEnji Cooperscriptversion=2019-02-19.15; # UTC
1553*132f818dSEnji Cooper
1554*132f818dSEnji Cooper
1555*132f818dSEnji Cooper## ------ ##
1556*132f818dSEnji Cooper## Usage. ##
1557*132f818dSEnji Cooper## ------ ##
1558*132f818dSEnji Cooper
1559*132f818dSEnji Cooper# This file is a library for parsing options in your shell scripts along
1560*132f818dSEnji Cooper# with assorted other useful supporting features that you can make use
1561*132f818dSEnji Cooper# of too.
1562*132f818dSEnji Cooper#
1563*132f818dSEnji Cooper# For the simplest scripts you might need only:
1564*132f818dSEnji Cooper#
1565*132f818dSEnji Cooper#   #!/bin/sh
1566*132f818dSEnji Cooper#   . relative/path/to/funclib.sh
1567*132f818dSEnji Cooper#   . relative/path/to/options-parser
1568*132f818dSEnji Cooper#   scriptversion=1.0
1569*132f818dSEnji Cooper#   func_options ${1+"$@"}
1570*132f818dSEnji Cooper#   eval set dummy "$func_options_result"; shift
1571*132f818dSEnji Cooper#   ...rest of your script...
1572*132f818dSEnji Cooper#
1573*132f818dSEnji Cooper# In order for the '--version' option to work, you will need to have a
1574*132f818dSEnji Cooper# suitably formatted comment like the one at the top of this file
1575*132f818dSEnji Cooper# starting with '# Written by ' and ending with '# Copyright'.
1576*132f818dSEnji Cooper#
1577*132f818dSEnji Cooper# For '-h' and '--help' to work, you will also need a one line
1578*132f818dSEnji Cooper# description of your script's purpose in a comment directly above the
1579*132f818dSEnji Cooper# '# Written by ' line, like the one at the top of this file.
1580*132f818dSEnji Cooper#
1581*132f818dSEnji Cooper# The default options also support '--debug', which will turn on shell
1582*132f818dSEnji Cooper# execution tracing (see the comment above debug_cmd below for another
1583*132f818dSEnji Cooper# use), and '--verbose' and the func_verbose function to allow your script
1584*132f818dSEnji Cooper# to display verbose messages only when your user has specified
1585*132f818dSEnji Cooper# '--verbose'.
1586*132f818dSEnji Cooper#
1587*132f818dSEnji Cooper# After sourcing this file, you can plug in processing for additional
1588*132f818dSEnji Cooper# options by amending the variables from the 'Configuration' section
1589*132f818dSEnji Cooper# below, and following the instructions in the 'Option parsing'
1590*132f818dSEnji Cooper# section further down.
1591*132f818dSEnji Cooper
1592*132f818dSEnji Cooper## -------------- ##
1593*132f818dSEnji Cooper## Configuration. ##
1594*132f818dSEnji Cooper## -------------- ##
1595*132f818dSEnji Cooper
1596*132f818dSEnji Cooper# You should override these variables in your script after sourcing this
1597*132f818dSEnji Cooper# file so that they reflect the customisations you have added to the
1598*132f818dSEnji Cooper# option parser.
1599*132f818dSEnji Cooper
1600*132f818dSEnji Cooper# The usage line for option parsing errors and the start of '-h' and
1601*132f818dSEnji Cooper# '--help' output messages. You can embed shell variables for delayed
1602*132f818dSEnji Cooper# expansion at the time the message is displayed, but you will need to
1603*132f818dSEnji Cooper# quote other shell meta-characters carefully to prevent them being
1604*132f818dSEnji Cooper# expanded when the contents are evaled.
1605*132f818dSEnji Cooperusage='$progpath [OPTION]...'
1606*132f818dSEnji Cooper
1607*132f818dSEnji Cooper# Short help message in response to '-h' and '--help'.  Add to this or
1608*132f818dSEnji Cooper# override it after sourcing this library to reflect the full set of
1609*132f818dSEnji Cooper# options your script accepts.
1610*132f818dSEnji Cooperusage_message="\
1611*132f818dSEnji Cooper       --debug        enable verbose shell tracing
1612*132f818dSEnji Cooper   -W, --warnings=CATEGORY
1613*132f818dSEnji Cooper                      report the warnings falling in CATEGORY [all]
1614*132f818dSEnji Cooper   -v, --verbose      verbosely report processing
1615*132f818dSEnji Cooper       --version      print version information and exit
1616*132f818dSEnji Cooper   -h, --help         print short or long help message and exit
1617*132f818dSEnji Cooper"
1618*132f818dSEnji Cooper
1619*132f818dSEnji Cooper# Additional text appended to 'usage_message' in response to '--help'.
1620*132f818dSEnji Cooperlong_help_message="
1621*132f818dSEnji CooperWarning categories include:
1622*132f818dSEnji Cooper       'all'          show all warnings
1623*132f818dSEnji Cooper       'none'         turn off all the warnings
1624*132f818dSEnji Cooper       'error'        warnings are treated as fatal errors"
1625*132f818dSEnji Cooper
1626*132f818dSEnji Cooper# Help message printed before fatal option parsing errors.
1627*132f818dSEnji Cooperfatal_help="Try '\$progname --help' for more information."
1628*132f818dSEnji Cooper
1629*132f818dSEnji Cooper
1630*132f818dSEnji Cooper
1631*132f818dSEnji Cooper## ------------------------- ##
1632*132f818dSEnji Cooper## Hook function management. ##
1633*132f818dSEnji Cooper## ------------------------- ##
1634*132f818dSEnji Cooper
1635*132f818dSEnji Cooper# This section contains functions for adding, removing, and running hooks
1636*132f818dSEnji Cooper# in the main code.  A hook is just a list of function names that can be
1637*132f818dSEnji Cooper# run in order later on.
1638*132f818dSEnji Cooper
1639*132f818dSEnji Cooper# func_hookable FUNC_NAME
1640*132f818dSEnji Cooper# -----------------------
1641*132f818dSEnji Cooper# Declare that FUNC_NAME will run hooks added with
1642*132f818dSEnji Cooper# 'func_add_hook FUNC_NAME ...'.
1643*132f818dSEnji Cooperfunc_hookable ()
1644*132f818dSEnji Cooper{
1645*132f818dSEnji Cooper    $debug_cmd
1646*132f818dSEnji Cooper
1647*132f818dSEnji Cooper    func_append hookable_fns " $1"
1648*132f818dSEnji Cooper}
1649*132f818dSEnji Cooper
1650*132f818dSEnji Cooper
1651*132f818dSEnji Cooper# func_add_hook FUNC_NAME HOOK_FUNC
1652*132f818dSEnji Cooper# ---------------------------------
1653*132f818dSEnji Cooper# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
1654*132f818dSEnji Cooper# first have been declared "hookable" by a call to 'func_hookable'.
1655*132f818dSEnji Cooperfunc_add_hook ()
1656*132f818dSEnji Cooper{
1657*132f818dSEnji Cooper    $debug_cmd
1658*132f818dSEnji Cooper
1659*132f818dSEnji Cooper    case " $hookable_fns " in
1660*132f818dSEnji Cooper      *" $1 "*) ;;
1661*132f818dSEnji Cooper      *) func_fatal_error "'$1' does not accept hook functions." ;;
1662*132f818dSEnji Cooper    esac
1663*132f818dSEnji Cooper
1664*132f818dSEnji Cooper    eval func_append ${1}_hooks '" $2"'
1665*132f818dSEnji Cooper}
1666*132f818dSEnji Cooper
1667*132f818dSEnji Cooper
1668*132f818dSEnji Cooper# func_remove_hook FUNC_NAME HOOK_FUNC
1669*132f818dSEnji Cooper# ------------------------------------
1670*132f818dSEnji Cooper# Remove HOOK_FUNC from the list of hook functions to be called by
1671*132f818dSEnji Cooper# FUNC_NAME.
1672*132f818dSEnji Cooperfunc_remove_hook ()
1673*132f818dSEnji Cooper{
1674*132f818dSEnji Cooper    $debug_cmd
1675*132f818dSEnji Cooper
1676*132f818dSEnji Cooper    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
1677*132f818dSEnji Cooper}
1678*132f818dSEnji Cooper
1679*132f818dSEnji Cooper
1680*132f818dSEnji Cooper# func_propagate_result FUNC_NAME_A FUNC_NAME_B
1681*132f818dSEnji Cooper# ---------------------------------------------
1682*132f818dSEnji Cooper# If the *_result variable of FUNC_NAME_A _is set_, assign its value to
1683*132f818dSEnji Cooper# *_result variable of FUNC_NAME_B.
1684*132f818dSEnji Cooperfunc_propagate_result ()
1685*132f818dSEnji Cooper{
1686*132f818dSEnji Cooper    $debug_cmd
1687*132f818dSEnji Cooper
1688*132f818dSEnji Cooper    func_propagate_result_result=:
1689*132f818dSEnji Cooper    if eval "test \"\${${1}_result+set}\" = set"
1690*132f818dSEnji Cooper    then
1691*132f818dSEnji Cooper      eval "${2}_result=\$${1}_result"
1692*132f818dSEnji Cooper    else
1693*132f818dSEnji Cooper      func_propagate_result_result=false
1694*132f818dSEnji Cooper    fi
1695*132f818dSEnji Cooper}
1696*132f818dSEnji Cooper
1697*132f818dSEnji Cooper
1698*132f818dSEnji Cooper# func_run_hooks FUNC_NAME [ARG]...
1699*132f818dSEnji Cooper# ---------------------------------
1700*132f818dSEnji Cooper# Run all hook functions registered to FUNC_NAME.
1701*132f818dSEnji Cooper# It's assumed that the list of hook functions contains nothing more
1702*132f818dSEnji Cooper# than a whitespace-delimited list of legal shell function names, and
1703*132f818dSEnji Cooper# no effort is wasted trying to catch shell meta-characters or preserve
1704*132f818dSEnji Cooper# whitespace.
1705*132f818dSEnji Cooperfunc_run_hooks ()
1706*132f818dSEnji Cooper{
1707*132f818dSEnji Cooper    $debug_cmd
1708*132f818dSEnji Cooper
1709*132f818dSEnji Cooper    case " $hookable_fns " in
1710*132f818dSEnji Cooper      *" $1 "*) ;;
1711*132f818dSEnji Cooper      *) func_fatal_error "'$1' does not support hook functions." ;;
1712*132f818dSEnji Cooper    esac
1713*132f818dSEnji Cooper
1714*132f818dSEnji Cooper    eval _G_hook_fns=\$$1_hooks; shift
1715*132f818dSEnji Cooper
1716*132f818dSEnji Cooper    for _G_hook in $_G_hook_fns; do
1717*132f818dSEnji Cooper      func_unset "${_G_hook}_result"
1718*132f818dSEnji Cooper      eval $_G_hook '${1+"$@"}'
1719*132f818dSEnji Cooper      func_propagate_result $_G_hook func_run_hooks
1720*132f818dSEnji Cooper      if $func_propagate_result_result; then
1721*132f818dSEnji Cooper        eval set dummy "$func_run_hooks_result"; shift
1722*132f818dSEnji Cooper      fi
1723*132f818dSEnji Cooper    done
1724*132f818dSEnji Cooper}
1725*132f818dSEnji Cooper
1726*132f818dSEnji Cooper
1727*132f818dSEnji Cooper
1728*132f818dSEnji Cooper## --------------- ##
1729*132f818dSEnji Cooper## Option parsing. ##
1730*132f818dSEnji Cooper## --------------- ##
1731*132f818dSEnji Cooper
1732*132f818dSEnji Cooper# In order to add your own option parsing hooks, you must accept the
1733*132f818dSEnji Cooper# full positional parameter list from your hook function.  You may remove
1734*132f818dSEnji Cooper# or edit any options that you action, and then pass back the remaining
1735*132f818dSEnji Cooper# unprocessed options in '<hooked_function_name>_result', escaped
1736*132f818dSEnji Cooper# suitably for 'eval'.
1737*132f818dSEnji Cooper#
1738*132f818dSEnji Cooper# The '<hooked_function_name>_result' variable is automatically unset
1739*132f818dSEnji Cooper# before your hook gets called; for best performance, only set the
1740*132f818dSEnji Cooper# *_result variable when necessary (i.e. don't call the 'func_quote'
1741*132f818dSEnji Cooper# function unnecessarily because it can be an expensive operation on some
1742*132f818dSEnji Cooper# machines).
1743*132f818dSEnji Cooper#
1744*132f818dSEnji Cooper# Like this:
1745*132f818dSEnji Cooper#
1746*132f818dSEnji Cooper#    my_options_prep ()
1747*132f818dSEnji Cooper#    {
1748*132f818dSEnji Cooper#        $debug_cmd
1749*132f818dSEnji Cooper#
1750*132f818dSEnji Cooper#        # Extend the existing usage message.
1751*132f818dSEnji Cooper#        usage_message=$usage_message'
1752*132f818dSEnji Cooper#      -s, --silent       don'\''t print informational messages
1753*132f818dSEnji Cooper#    '
1754*132f818dSEnji Cooper#        # No change in '$@' (ignored completely by this hook).  Leave
1755*132f818dSEnji Cooper#        # my_options_prep_result variable intact.
1756*132f818dSEnji Cooper#    }
1757*132f818dSEnji Cooper#    func_add_hook func_options_prep my_options_prep
1758*132f818dSEnji Cooper#
1759*132f818dSEnji Cooper#
1760*132f818dSEnji Cooper#    my_silent_option ()
1761*132f818dSEnji Cooper#    {
1762*132f818dSEnji Cooper#        $debug_cmd
1763*132f818dSEnji Cooper#
1764*132f818dSEnji Cooper#        args_changed=false
1765*132f818dSEnji Cooper#
1766*132f818dSEnji Cooper#        # Note that, for efficiency, we parse as many options as we can
1767*132f818dSEnji Cooper#        # recognise in a loop before passing the remainder back to the
1768*132f818dSEnji Cooper#        # caller on the first unrecognised argument we encounter.
1769*132f818dSEnji Cooper#        while test $# -gt 0; do
1770*132f818dSEnji Cooper#          opt=$1; shift
1771*132f818dSEnji Cooper#          case $opt in
1772*132f818dSEnji Cooper#            --silent|-s) opt_silent=:
1773*132f818dSEnji Cooper#                         args_changed=:
1774*132f818dSEnji Cooper#                         ;;
1775*132f818dSEnji Cooper#            # Separate non-argument short options:
1776*132f818dSEnji Cooper#            -s*)         func_split_short_opt "$_G_opt"
1777*132f818dSEnji Cooper#                         set dummy "$func_split_short_opt_name" \
1778*132f818dSEnji Cooper#                             "-$func_split_short_opt_arg" ${1+"$@"}
1779*132f818dSEnji Cooper#                         shift
1780*132f818dSEnji Cooper#                         args_changed=:
1781*132f818dSEnji Cooper#                         ;;
1782*132f818dSEnji Cooper#            *)           # Make sure the first unrecognised option "$_G_opt"
1783*132f818dSEnji Cooper#                         # is added back to "$@" in case we need it later,
1784*132f818dSEnji Cooper#                         # if $args_changed was set to 'true'.
1785*132f818dSEnji Cooper#                         set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
1786*132f818dSEnji Cooper#          esac
1787*132f818dSEnji Cooper#        done
1788*132f818dSEnji Cooper#
1789*132f818dSEnji Cooper#        # Only call 'func_quote' here if we processed at least one argument.
1790*132f818dSEnji Cooper#        if $args_changed; then
1791*132f818dSEnji Cooper#          func_quote eval ${1+"$@"}
1792*132f818dSEnji Cooper#          my_silent_option_result=$func_quote_result
1793*132f818dSEnji Cooper#        fi
1794*132f818dSEnji Cooper#    }
1795*132f818dSEnji Cooper#    func_add_hook func_parse_options my_silent_option
1796*132f818dSEnji Cooper#
1797*132f818dSEnji Cooper#
1798*132f818dSEnji Cooper#    my_option_validation ()
1799*132f818dSEnji Cooper#    {
1800*132f818dSEnji Cooper#        $debug_cmd
1801*132f818dSEnji Cooper#
1802*132f818dSEnji Cooper#        $opt_silent && $opt_verbose && func_fatal_help "\
1803*132f818dSEnji Cooper#    '--silent' and '--verbose' options are mutually exclusive."
1804*132f818dSEnji Cooper#    }
1805*132f818dSEnji Cooper#    func_add_hook func_validate_options my_option_validation
1806*132f818dSEnji Cooper#
1807*132f818dSEnji Cooper# You'll also need to manually amend $usage_message to reflect the extra
1808*132f818dSEnji Cooper# options you parse.  It's preferable to append if you can, so that
1809*132f818dSEnji Cooper# multiple option parsing hooks can be added safely.
1810*132f818dSEnji Cooper
1811*132f818dSEnji Cooper
1812*132f818dSEnji Cooper# func_options_finish [ARG]...
1813*132f818dSEnji Cooper# ----------------------------
1814*132f818dSEnji Cooper# Finishing the option parse loop (call 'func_options' hooks ATM).
1815*132f818dSEnji Cooperfunc_options_finish ()
1816*132f818dSEnji Cooper{
1817*132f818dSEnji Cooper    $debug_cmd
1818*132f818dSEnji Cooper
1819*132f818dSEnji Cooper    func_run_hooks func_options ${1+"$@"}
1820*132f818dSEnji Cooper    func_propagate_result func_run_hooks func_options_finish
1821*132f818dSEnji Cooper}
1822*132f818dSEnji Cooper
1823*132f818dSEnji Cooper
1824*132f818dSEnji Cooper# func_options [ARG]...
1825*132f818dSEnji Cooper# ---------------------
1826*132f818dSEnji Cooper# All the functions called inside func_options are hookable. See the
1827*132f818dSEnji Cooper# individual implementations for details.
1828*132f818dSEnji Cooperfunc_hookable func_options
1829*132f818dSEnji Cooperfunc_options ()
1830*132f818dSEnji Cooper{
1831*132f818dSEnji Cooper    $debug_cmd
1832*132f818dSEnji Cooper
1833*132f818dSEnji Cooper    _G_options_quoted=false
1834*132f818dSEnji Cooper
1835*132f818dSEnji Cooper    for my_func in options_prep parse_options validate_options options_finish
1836*132f818dSEnji Cooper    do
1837*132f818dSEnji Cooper      func_unset func_${my_func}_result
1838*132f818dSEnji Cooper      func_unset func_run_hooks_result
1839*132f818dSEnji Cooper      eval func_$my_func '${1+"$@"}'
1840*132f818dSEnji Cooper      func_propagate_result func_$my_func func_options
1841*132f818dSEnji Cooper      if $func_propagate_result_result; then
1842*132f818dSEnji Cooper        eval set dummy "$func_options_result"; shift
1843*132f818dSEnji Cooper        _G_options_quoted=:
1844*132f818dSEnji Cooper      fi
1845*132f818dSEnji Cooper    done
1846*132f818dSEnji Cooper
1847*132f818dSEnji Cooper    $_G_options_quoted || {
1848*132f818dSEnji Cooper      # As we (func_options) are top-level options-parser function and
1849*132f818dSEnji Cooper      # nobody quoted "$@" for us yet, we need to do it explicitly for
1850*132f818dSEnji Cooper      # caller.
1851*132f818dSEnji Cooper      func_quote eval ${1+"$@"}
1852*132f818dSEnji Cooper      func_options_result=$func_quote_result
1853*132f818dSEnji Cooper    }
1854*132f818dSEnji Cooper}
1855*132f818dSEnji Cooper
1856*132f818dSEnji Cooper
1857*132f818dSEnji Cooper# func_options_prep [ARG]...
1858*132f818dSEnji Cooper# --------------------------
1859*132f818dSEnji Cooper# All initialisations required before starting the option parse loop.
1860*132f818dSEnji Cooper# Note that when calling hook functions, we pass through the list of
1861*132f818dSEnji Cooper# positional parameters.  If a hook function modifies that list, and
1862*132f818dSEnji Cooper# needs to propagate that back to rest of this script, then the complete
1863*132f818dSEnji Cooper# modified list must be put in 'func_run_hooks_result' before returning.
1864*132f818dSEnji Cooperfunc_hookable func_options_prep
1865*132f818dSEnji Cooperfunc_options_prep ()
1866*132f818dSEnji Cooper{
1867*132f818dSEnji Cooper    $debug_cmd
1868*132f818dSEnji Cooper
1869*132f818dSEnji Cooper    # Option defaults:
1870*132f818dSEnji Cooper    opt_verbose=false
1871*132f818dSEnji Cooper    opt_warning_types=
1872*132f818dSEnji Cooper
1873*132f818dSEnji Cooper    func_run_hooks func_options_prep ${1+"$@"}
1874*132f818dSEnji Cooper    func_propagate_result func_run_hooks func_options_prep
1875*132f818dSEnji Cooper}
1876*132f818dSEnji Cooper
1877*132f818dSEnji Cooper
1878*132f818dSEnji Cooper# func_parse_options [ARG]...
1879*132f818dSEnji Cooper# ---------------------------
1880*132f818dSEnji Cooper# The main option parsing loop.
1881*132f818dSEnji Cooperfunc_hookable func_parse_options
1882*132f818dSEnji Cooperfunc_parse_options ()
1883*132f818dSEnji Cooper{
1884*132f818dSEnji Cooper    $debug_cmd
1885*132f818dSEnji Cooper
1886*132f818dSEnji Cooper    _G_parse_options_requote=false
1887*132f818dSEnji Cooper    # this just eases exit handling
1888*132f818dSEnji Cooper    while test $# -gt 0; do
1889*132f818dSEnji Cooper      # Defer to hook functions for initial option parsing, so they
1890*132f818dSEnji Cooper      # get priority in the event of reusing an option name.
1891*132f818dSEnji Cooper      func_run_hooks func_parse_options ${1+"$@"}
1892*132f818dSEnji Cooper      func_propagate_result func_run_hooks func_parse_options
1893*132f818dSEnji Cooper      if $func_propagate_result_result; then
1894*132f818dSEnji Cooper        eval set dummy "$func_parse_options_result"; shift
1895*132f818dSEnji Cooper        # Even though we may have changed "$@", we passed the "$@" array
1896*132f818dSEnji Cooper        # down into the hook and it quoted it for us (because we are in
1897*132f818dSEnji Cooper        # this if-branch).  No need to quote it again.
1898*132f818dSEnji Cooper        _G_parse_options_requote=false
1899*132f818dSEnji Cooper      fi
1900*132f818dSEnji Cooper
1901*132f818dSEnji Cooper      # Break out of the loop if we already parsed every option.
1902*132f818dSEnji Cooper      test $# -gt 0 || break
1903*132f818dSEnji Cooper
1904*132f818dSEnji Cooper      # We expect that one of the options parsed in this function matches
1905*132f818dSEnji Cooper      # and thus we remove _G_opt from "$@" and need to re-quote.
1906*132f818dSEnji Cooper      _G_match_parse_options=:
1907*132f818dSEnji Cooper      _G_opt=$1
1908*132f818dSEnji Cooper      shift
1909*132f818dSEnji Cooper      case $_G_opt in
1910*132f818dSEnji Cooper        --debug|-x)   debug_cmd='set -x'
1911*132f818dSEnji Cooper                      func_echo "enabling shell trace mode" >&2
1912*132f818dSEnji Cooper                      $debug_cmd
1913*132f818dSEnji Cooper                      ;;
1914*132f818dSEnji Cooper
1915*132f818dSEnji Cooper        --no-warnings|--no-warning|--no-warn)
1916*132f818dSEnji Cooper                      set dummy --warnings none ${1+"$@"}
1917*132f818dSEnji Cooper                      shift
1918*132f818dSEnji Cooper		      ;;
1919*132f818dSEnji Cooper
1920*132f818dSEnji Cooper        --warnings|--warning|-W)
1921*132f818dSEnji Cooper                      if test $# = 0 && func_missing_arg $_G_opt; then
1922*132f818dSEnji Cooper                        _G_parse_options_requote=:
1923*132f818dSEnji Cooper                        break
1924*132f818dSEnji Cooper                      fi
1925*132f818dSEnji Cooper                      case " $warning_categories $1" in
1926*132f818dSEnji Cooper                        *" $1 "*)
1927*132f818dSEnji Cooper                          # trailing space prevents matching last $1 above
1928*132f818dSEnji Cooper                          func_append_uniq opt_warning_types " $1"
1929*132f818dSEnji Cooper                          ;;
1930*132f818dSEnji Cooper                        *all)
1931*132f818dSEnji Cooper                          opt_warning_types=$warning_categories
1932*132f818dSEnji Cooper                          ;;
1933*132f818dSEnji Cooper                        *none)
1934*132f818dSEnji Cooper                          opt_warning_types=none
1935*132f818dSEnji Cooper                          warning_func=:
1936*132f818dSEnji Cooper                          ;;
1937*132f818dSEnji Cooper                        *error)
1938*132f818dSEnji Cooper                          opt_warning_types=$warning_categories
1939*132f818dSEnji Cooper                          warning_func=func_fatal_error
1940*132f818dSEnji Cooper                          ;;
1941*132f818dSEnji Cooper                        *)
1942*132f818dSEnji Cooper                          func_fatal_error \
1943*132f818dSEnji Cooper                             "unsupported warning category: '$1'"
1944*132f818dSEnji Cooper                          ;;
1945*132f818dSEnji Cooper                      esac
1946*132f818dSEnji Cooper                      shift
1947*132f818dSEnji Cooper                      ;;
1948*132f818dSEnji Cooper
1949*132f818dSEnji Cooper        --verbose|-v) opt_verbose=: ;;
1950*132f818dSEnji Cooper        --version)    func_version ;;
1951*132f818dSEnji Cooper        -\?|-h)       func_usage ;;
1952*132f818dSEnji Cooper        --help)       func_help ;;
1953*132f818dSEnji Cooper
1954*132f818dSEnji Cooper	# Separate optargs to long options (plugins may need this):
1955*132f818dSEnji Cooper	--*=*)        func_split_equals "$_G_opt"
1956*132f818dSEnji Cooper	              set dummy "$func_split_equals_lhs" \
1957*132f818dSEnji Cooper                          "$func_split_equals_rhs" ${1+"$@"}
1958*132f818dSEnji Cooper                      shift
1959*132f818dSEnji Cooper                      ;;
1960*132f818dSEnji Cooper
1961*132f818dSEnji Cooper       # Separate optargs to short options:
1962*132f818dSEnji Cooper        -W*)
1963*132f818dSEnji Cooper                      func_split_short_opt "$_G_opt"
1964*132f818dSEnji Cooper                      set dummy "$func_split_short_opt_name" \
1965*132f818dSEnji Cooper                          "$func_split_short_opt_arg" ${1+"$@"}
1966*132f818dSEnji Cooper                      shift
1967*132f818dSEnji Cooper                      ;;
1968*132f818dSEnji Cooper
1969*132f818dSEnji Cooper        # Separate non-argument short options:
1970*132f818dSEnji Cooper        -\?*|-h*|-v*|-x*)
1971*132f818dSEnji Cooper                      func_split_short_opt "$_G_opt"
1972*132f818dSEnji Cooper                      set dummy "$func_split_short_opt_name" \
1973*132f818dSEnji Cooper                          "-$func_split_short_opt_arg" ${1+"$@"}
1974*132f818dSEnji Cooper                      shift
1975*132f818dSEnji Cooper                      ;;
1976*132f818dSEnji Cooper
1977*132f818dSEnji Cooper        --)           _G_parse_options_requote=: ; break ;;
1978*132f818dSEnji Cooper        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
1979*132f818dSEnji Cooper        *)            set dummy "$_G_opt" ${1+"$@"}; shift
1980*132f818dSEnji Cooper                      _G_match_parse_options=false
1981*132f818dSEnji Cooper                      break
1982*132f818dSEnji Cooper                      ;;
1983*132f818dSEnji Cooper      esac
1984*132f818dSEnji Cooper
1985*132f818dSEnji Cooper      if $_G_match_parse_options; then
1986*132f818dSEnji Cooper        _G_parse_options_requote=:
1987*132f818dSEnji Cooper      fi
1988*132f818dSEnji Cooper    done
1989*132f818dSEnji Cooper
1990*132f818dSEnji Cooper    if $_G_parse_options_requote; then
1991*132f818dSEnji Cooper      # save modified positional parameters for caller
1992*132f818dSEnji Cooper      func_quote eval ${1+"$@"}
1993*132f818dSEnji Cooper      func_parse_options_result=$func_quote_result
1994*132f818dSEnji Cooper    fi
1995*132f818dSEnji Cooper}
1996*132f818dSEnji Cooper
1997*132f818dSEnji Cooper
1998*132f818dSEnji Cooper# func_validate_options [ARG]...
1999*132f818dSEnji Cooper# ------------------------------
2000*132f818dSEnji Cooper# Perform any sanity checks on option settings and/or unconsumed
2001*132f818dSEnji Cooper# arguments.
2002*132f818dSEnji Cooperfunc_hookable func_validate_options
2003*132f818dSEnji Cooperfunc_validate_options ()
2004*132f818dSEnji Cooper{
2005*132f818dSEnji Cooper    $debug_cmd
2006*132f818dSEnji Cooper
2007*132f818dSEnji Cooper    # Display all warnings if -W was not given.
2008*132f818dSEnji Cooper    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
2009*132f818dSEnji Cooper
2010*132f818dSEnji Cooper    func_run_hooks func_validate_options ${1+"$@"}
2011*132f818dSEnji Cooper    func_propagate_result func_run_hooks func_validate_options
2012*132f818dSEnji Cooper
2013*132f818dSEnji Cooper    # Bail if the options were screwed!
2014*132f818dSEnji Cooper    $exit_cmd $EXIT_FAILURE
2015*132f818dSEnji Cooper}
2016*132f818dSEnji Cooper
2017*132f818dSEnji Cooper
2018*132f818dSEnji Cooper
2019*132f818dSEnji Cooper## ----------------- ##
2020*132f818dSEnji Cooper## Helper functions. ##
2021*132f818dSEnji Cooper## ----------------- ##
2022*132f818dSEnji Cooper
2023*132f818dSEnji Cooper# This section contains the helper functions used by the rest of the
2024*132f818dSEnji Cooper# hookable option parser framework in ascii-betical order.
2025*132f818dSEnji Cooper
2026*132f818dSEnji Cooper
2027*132f818dSEnji Cooper# func_fatal_help ARG...
2028*132f818dSEnji Cooper# ----------------------
2029*132f818dSEnji Cooper# Echo program name prefixed message to standard error, followed by
2030*132f818dSEnji Cooper# a help hint, and exit.
2031*132f818dSEnji Cooperfunc_fatal_help ()
2032*132f818dSEnji Cooper{
2033*132f818dSEnji Cooper    $debug_cmd
2034*132f818dSEnji Cooper
2035*132f818dSEnji Cooper    eval \$ECHO \""Usage: $usage"\"
2036*132f818dSEnji Cooper    eval \$ECHO \""$fatal_help"\"
2037*132f818dSEnji Cooper    func_error ${1+"$@"}
2038*132f818dSEnji Cooper    exit $EXIT_FAILURE
2039*132f818dSEnji Cooper}
2040*132f818dSEnji Cooper
2041*132f818dSEnji Cooper
2042*132f818dSEnji Cooper# func_help
2043*132f818dSEnji Cooper# ---------
2044*132f818dSEnji Cooper# Echo long help message to standard output and exit.
2045*132f818dSEnji Cooperfunc_help ()
2046*132f818dSEnji Cooper{
2047*132f818dSEnji Cooper    $debug_cmd
2048*132f818dSEnji Cooper
2049*132f818dSEnji Cooper    func_usage_message
2050*132f818dSEnji Cooper    $ECHO "$long_help_message"
2051*132f818dSEnji Cooper    exit 0
2052*132f818dSEnji Cooper}
2053*132f818dSEnji Cooper
2054*132f818dSEnji Cooper
2055*132f818dSEnji Cooper# func_missing_arg ARGNAME
2056*132f818dSEnji Cooper# ------------------------
2057*132f818dSEnji Cooper# Echo program name prefixed message to standard error and set global
2058*132f818dSEnji Cooper# exit_cmd.
2059*132f818dSEnji Cooperfunc_missing_arg ()
2060*132f818dSEnji Cooper{
2061*132f818dSEnji Cooper    $debug_cmd
2062*132f818dSEnji Cooper
2063*132f818dSEnji Cooper    func_error "Missing argument for '$1'."
2064*132f818dSEnji Cooper    exit_cmd=exit
2065*132f818dSEnji Cooper}
2066*132f818dSEnji Cooper
2067*132f818dSEnji Cooper
2068*132f818dSEnji Cooper# func_split_equals STRING
2069*132f818dSEnji Cooper# ------------------------
2070*132f818dSEnji Cooper# Set func_split_equals_lhs and func_split_equals_rhs shell variables
2071*132f818dSEnji Cooper# after splitting STRING at the '=' sign.
2072*132f818dSEnji Coopertest -z "$_G_HAVE_XSI_OPS" \
2073*132f818dSEnji Cooper    && (eval 'x=a/b/c;
2074*132f818dSEnji Cooper      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
2075*132f818dSEnji Cooper    && _G_HAVE_XSI_OPS=yes
2076*132f818dSEnji Cooper
2077*132f818dSEnji Cooperif test yes = "$_G_HAVE_XSI_OPS"
2078*132f818dSEnji Cooperthen
2079*132f818dSEnji Cooper  # This is an XSI compatible shell, allowing a faster implementation...
2080*132f818dSEnji Cooper  eval 'func_split_equals ()
2081*132f818dSEnji Cooper  {
2082*132f818dSEnji Cooper      $debug_cmd
2083*132f818dSEnji Cooper
2084*132f818dSEnji Cooper      func_split_equals_lhs=${1%%=*}
2085*132f818dSEnji Cooper      func_split_equals_rhs=${1#*=}
2086*132f818dSEnji Cooper      if test "x$func_split_equals_lhs" = "x$1"; then
2087*132f818dSEnji Cooper        func_split_equals_rhs=
2088*132f818dSEnji Cooper      fi
2089*132f818dSEnji Cooper  }'
2090*132f818dSEnji Cooperelse
2091*132f818dSEnji Cooper  # ...otherwise fall back to using expr, which is often a shell builtin.
2092*132f818dSEnji Cooper  func_split_equals ()
2093*132f818dSEnji Cooper  {
2094*132f818dSEnji Cooper      $debug_cmd
2095*132f818dSEnji Cooper
2096*132f818dSEnji Cooper      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
2097*132f818dSEnji Cooper      func_split_equals_rhs=
2098*132f818dSEnji Cooper      test "x$func_split_equals_lhs=" = "x$1" \
2099*132f818dSEnji Cooper        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
2100*132f818dSEnji Cooper  }
2101*132f818dSEnji Cooperfi #func_split_equals
2102*132f818dSEnji Cooper
2103*132f818dSEnji Cooper
2104*132f818dSEnji Cooper# func_split_short_opt SHORTOPT
2105*132f818dSEnji Cooper# -----------------------------
2106*132f818dSEnji Cooper# Set func_split_short_opt_name and func_split_short_opt_arg shell
2107*132f818dSEnji Cooper# variables after splitting SHORTOPT after the 2nd character.
2108*132f818dSEnji Cooperif test yes = "$_G_HAVE_XSI_OPS"
2109*132f818dSEnji Cooperthen
2110*132f818dSEnji Cooper  # This is an XSI compatible shell, allowing a faster implementation...
2111*132f818dSEnji Cooper  eval 'func_split_short_opt ()
2112*132f818dSEnji Cooper  {
2113*132f818dSEnji Cooper      $debug_cmd
2114*132f818dSEnji Cooper
2115*132f818dSEnji Cooper      func_split_short_opt_arg=${1#??}
2116*132f818dSEnji Cooper      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
2117*132f818dSEnji Cooper  }'
2118*132f818dSEnji Cooperelse
2119*132f818dSEnji Cooper  # ...otherwise fall back to using expr, which is often a shell builtin.
2120*132f818dSEnji Cooper  func_split_short_opt ()
2121*132f818dSEnji Cooper  {
2122*132f818dSEnji Cooper      $debug_cmd
2123*132f818dSEnji Cooper
2124*132f818dSEnji Cooper      func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'`
2125*132f818dSEnji Cooper      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
2126*132f818dSEnji Cooper  }
2127*132f818dSEnji Cooperfi #func_split_short_opt
2128*132f818dSEnji Cooper
2129*132f818dSEnji Cooper
2130*132f818dSEnji Cooper# func_usage
2131*132f818dSEnji Cooper# ----------
2132*132f818dSEnji Cooper# Echo short help message to standard output and exit.
2133*132f818dSEnji Cooperfunc_usage ()
2134*132f818dSEnji Cooper{
2135*132f818dSEnji Cooper    $debug_cmd
2136*132f818dSEnji Cooper
2137*132f818dSEnji Cooper    func_usage_message
2138*132f818dSEnji Cooper    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
2139*132f818dSEnji Cooper    exit 0
2140*132f818dSEnji Cooper}
2141*132f818dSEnji Cooper
2142*132f818dSEnji Cooper
2143*132f818dSEnji Cooper# func_usage_message
2144*132f818dSEnji Cooper# ------------------
2145*132f818dSEnji Cooper# Echo short help message to standard output.
2146*132f818dSEnji Cooperfunc_usage_message ()
2147*132f818dSEnji Cooper{
2148*132f818dSEnji Cooper    $debug_cmd
2149*132f818dSEnji Cooper
2150*132f818dSEnji Cooper    eval \$ECHO \""Usage: $usage"\"
2151*132f818dSEnji Cooper    echo
2152*132f818dSEnji Cooper    $SED -n 's|^# ||
2153*132f818dSEnji Cooper        /^Written by/{
2154*132f818dSEnji Cooper          x;p;x
2155*132f818dSEnji Cooper        }
2156*132f818dSEnji Cooper	h
2157*132f818dSEnji Cooper	/^Written by/q' < "$progpath"
2158*132f818dSEnji Cooper    echo
2159*132f818dSEnji Cooper    eval \$ECHO \""$usage_message"\"
2160*132f818dSEnji Cooper}
2161*132f818dSEnji Cooper
2162*132f818dSEnji Cooper
2163*132f818dSEnji Cooper# func_version
2164*132f818dSEnji Cooper# ------------
2165*132f818dSEnji Cooper# Echo version message to standard output and exit.
2166*132f818dSEnji Cooper# The version message is extracted from the calling file's header
2167*132f818dSEnji Cooper# comments, with leading '# ' stripped:
2168*132f818dSEnji Cooper#   1. First display the progname and version
2169*132f818dSEnji Cooper#   2. Followed by the header comment line matching  /^# Written by /
2170*132f818dSEnji Cooper#   3. Then a blank line followed by the first following line matching
2171*132f818dSEnji Cooper#      /^# Copyright /
2172*132f818dSEnji Cooper#   4. Immediately followed by any lines between the previous matches,
2173*132f818dSEnji Cooper#      except lines preceding the intervening completely blank line.
2174*132f818dSEnji Cooper# For example, see the header comments of this file.
2175*132f818dSEnji Cooperfunc_version ()
2176*132f818dSEnji Cooper{
2177*132f818dSEnji Cooper    $debug_cmd
2178*132f818dSEnji Cooper
2179*132f818dSEnji Cooper    printf '%s\n' "$progname $scriptversion"
2180*132f818dSEnji Cooper    $SED -n '
2181*132f818dSEnji Cooper        /^# Written by /!b
2182*132f818dSEnji Cooper        s|^# ||; p; n
2183*132f818dSEnji Cooper
2184*132f818dSEnji Cooper        :fwd2blnk
2185*132f818dSEnji Cooper        /./ {
2186*132f818dSEnji Cooper          n
2187*132f818dSEnji Cooper          b fwd2blnk
2188*132f818dSEnji Cooper        }
2189*132f818dSEnji Cooper        p; n
2190*132f818dSEnji Cooper
2191*132f818dSEnji Cooper        :holdwrnt
2192*132f818dSEnji Cooper        s|^# ||
2193*132f818dSEnji Cooper        s|^# *$||
2194*132f818dSEnji Cooper        /^Copyright /!{
2195*132f818dSEnji Cooper          /./H
2196*132f818dSEnji Cooper          n
2197*132f818dSEnji Cooper          b holdwrnt
2198*132f818dSEnji Cooper        }
2199*132f818dSEnji Cooper
2200*132f818dSEnji Cooper        s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
2201*132f818dSEnji Cooper        G
2202*132f818dSEnji Cooper        s|\(\n\)\n*|\1|g
2203*132f818dSEnji Cooper        p; q' < "$progpath"
2204*132f818dSEnji Cooper
2205*132f818dSEnji Cooper    exit $?
2206*132f818dSEnji Cooper}
2207*132f818dSEnji Cooper
2208*132f818dSEnji Cooper
2209*132f818dSEnji Cooper# Local variables:
2210*132f818dSEnji Cooper# mode: shell-script
2211*132f818dSEnji Cooper# sh-indentation: 2
2212*132f818dSEnji Cooper# eval: (add-hook 'before-save-hook 'time-stamp)
2213*132f818dSEnji Cooper# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC"
2214*132f818dSEnji Cooper# time-stamp-time-zone: "UTC"
2215*132f818dSEnji Cooper# End:
2216*132f818dSEnji Cooper
2217*132f818dSEnji Cooper# Set a version string.
2218*132f818dSEnji Cooperscriptversion='(GNU libtool) 2.5.4'
2219*132f818dSEnji Cooper
2220*132f818dSEnji Cooper# func_version
2221*132f818dSEnji Cooper# ------------
2222*132f818dSEnji Cooper# Echo version message to standard output and exit.
2223*132f818dSEnji Cooperfunc_version ()
2224*132f818dSEnji Cooper{
2225*132f818dSEnji Cooper    $debug_cmd
2226*132f818dSEnji Cooper
2227*132f818dSEnji Cooper	year=`date +%Y`
2228*132f818dSEnji Cooper
2229*132f818dSEnji Cooper	cat <<EOF
2230*132f818dSEnji Cooper$progname $scriptversion
2231*132f818dSEnji CooperCopyright (C) $year Free Software Foundation, Inc.
2232*132f818dSEnji CooperLicense GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl.html>
2233*132f818dSEnji CooperThis is free software: you are free to change and redistribute it.
2234*132f818dSEnji CooperThere is NO WARRANTY, to the extent permitted by law.
2235*132f818dSEnji Cooper
2236*132f818dSEnji CooperOriginally written by Gordon Matzigkeit, 1996
2237*132f818dSEnji Cooper(See AUTHORS for complete contributor listing)
2238*132f818dSEnji CooperEOF
2239*132f818dSEnji Cooper
2240*132f818dSEnji Cooper    exit $?
2241*132f818dSEnji Cooper}
2242*132f818dSEnji Cooper
2243*132f818dSEnji Cooper
2244*132f818dSEnji Cooper# func_echo ARG...
2245*132f818dSEnji Cooper# ----------------
2246*132f818dSEnji Cooper# Libtool also displays the current mode in messages, so override
2247*132f818dSEnji Cooper# funclib.sh func_echo with this custom definition.
2248*132f818dSEnji Cooperfunc_echo ()
2249*132f818dSEnji Cooper{
2250*132f818dSEnji Cooper    $debug_cmd
2251*132f818dSEnji Cooper
2252*132f818dSEnji Cooper    _G_message=$*
2253*132f818dSEnji Cooper
2254*132f818dSEnji Cooper    func_echo_IFS=$IFS
2255*132f818dSEnji Cooper    IFS=$nl
2256*132f818dSEnji Cooper    for _G_line in $_G_message; do
2257*132f818dSEnji Cooper      IFS=$func_echo_IFS
2258*132f818dSEnji Cooper      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
2259*132f818dSEnji Cooper    done
2260*132f818dSEnji Cooper    IFS=$func_echo_IFS
2261*132f818dSEnji Cooper}
2262*132f818dSEnji Cooper
2263*132f818dSEnji Cooper
2264*132f818dSEnji Cooper## ---------------- ##
2265*132f818dSEnji Cooper## Options parsing. ##
2266*132f818dSEnji Cooper## ---------------- ##
2267*132f818dSEnji Cooper
2268*132f818dSEnji Cooper# Hook in the functions to make sure our own options are parsed during
2269*132f818dSEnji Cooper# the option parsing loop.
2270*132f818dSEnji Cooper
2271*132f818dSEnji Cooperusage='$progpath [OPTION]... [MODE-ARG]...'
2272*132f818dSEnji Cooper
2273*132f818dSEnji Cooper# Short help message in response to '-h'.
2274*132f818dSEnji Cooperusage_message="Options:
2275*132f818dSEnji Cooper       --config                 show all configuration variables
2276*132f818dSEnji Cooper       --debug                  enable verbose shell tracing
2277*132f818dSEnji Cooper   -n, --dry-run                display commands without modifying any files
2278*132f818dSEnji Cooper       --features               display basic configuration information
2279*132f818dSEnji Cooper       --finish                 use operation '--mode=finish'
2280*132f818dSEnji Cooper       --mode=MODE              use operation mode MODE
2281*132f818dSEnji Cooper       --no-finish              don't update shared library cache
2282*132f818dSEnji Cooper       --no-quiet, --no-silent  print default informational messages
2283*132f818dSEnji Cooper       --no-warnings            equivalent to '-Wnone'
2284*132f818dSEnji Cooper       --preserve-dup-deps      don't remove duplicate dependency libraries
2285*132f818dSEnji Cooper       --quiet, --silent        don't print informational messages
2286*132f818dSEnji Cooper       --reorder-cache=DIRS     reorder shared library cache for preferred DIRS
2287*132f818dSEnji Cooper       --tag=TAG                use configuration variables from tag TAG
2288*132f818dSEnji Cooper   -v, --verbose                print more informational messages than default
2289*132f818dSEnji Cooper       --version                print version information
2290*132f818dSEnji Cooper   -W, --warnings=CATEGORY      report the warnings falling in CATEGORY [all]
2291*132f818dSEnji Cooper   -h, --help, --help-all       print short, long, or detailed help message
2292*132f818dSEnji Cooper"
2293*132f818dSEnji Cooper
2294*132f818dSEnji Cooper# Additional text appended to 'usage_message' in response to '--help'.
2295*132f818dSEnji Cooperfunc_help ()
2296*132f818dSEnji Cooper{
2297*132f818dSEnji Cooper    $debug_cmd
2298*132f818dSEnji Cooper
2299*132f818dSEnji Cooper    func_usage_message
2300*132f818dSEnji Cooper    $ECHO "$long_help_message
2301*132f818dSEnji Cooper
2302*132f818dSEnji CooperMODE must be one of the following:
2303*132f818dSEnji Cooper
2304*132f818dSEnji Cooper       clean           remove files from the build directory
2305*132f818dSEnji Cooper       compile         compile a source file into a libtool object
2306*132f818dSEnji Cooper       execute         automatically set library path, then run a program
2307*132f818dSEnji Cooper       finish          complete the installation of libtool libraries
2308*132f818dSEnji Cooper       install         install libraries or executables
2309*132f818dSEnji Cooper       link            create a library or an executable
2310*132f818dSEnji Cooper       uninstall       remove libraries from an installed directory
2311*132f818dSEnji Cooper
2312*132f818dSEnji CooperMODE-ARGS vary depending on the MODE.  When passed as first option,
2313*132f818dSEnji Cooper'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
2314*132f818dSEnji CooperTry '$progname --help --mode=MODE' for a more detailed description of MODE.
2315*132f818dSEnji Cooper
2316*132f818dSEnji CooperWhen reporting a bug, please describe a test case to reproduce it and
2317*132f818dSEnji Cooperinclude the following information:
2318*132f818dSEnji Cooper
2319*132f818dSEnji Cooper       host-triplet:   $host
2320*132f818dSEnji Cooper       shell:          $SHELL
2321*132f818dSEnji Cooper       compiler:       $LTCC
2322*132f818dSEnji Cooper       compiler flags: $LTCFLAGS
2323*132f818dSEnji Cooper       linker:         $LD (gnu? $with_gnu_ld)
2324*132f818dSEnji Cooper       version:        $progname $scriptversion
2325*132f818dSEnji Cooper       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
2326*132f818dSEnji Cooper       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
2327*132f818dSEnji Cooper
2328*132f818dSEnji CooperReport bugs to <bug-libtool@gnu.org>.
2329*132f818dSEnji CooperGNU libtool home page: <https://www.gnu.org/software/libtool/>.
2330*132f818dSEnji CooperGeneral help using GNU software: <https://www.gnu.org/gethelp/>."
2331*132f818dSEnji Cooper    exit 0
2332*132f818dSEnji Cooper}
2333*132f818dSEnji Cooper
2334*132f818dSEnji Cooper
2335*132f818dSEnji Cooper# func_lo2o OBJECT-NAME
2336*132f818dSEnji Cooper# ---------------------
2337*132f818dSEnji Cooper# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
2338*132f818dSEnji Cooper# object suffix.
2339*132f818dSEnji Cooper
2340*132f818dSEnji Cooperlo2o=s/\\.lo\$/.$objext/
2341*132f818dSEnji Coopero2lo=s/\\.$objext\$/.lo/
2342*132f818dSEnji Cooper
2343*132f818dSEnji Cooperif test yes = "$_G_HAVE_XSI_OPS"; then
2344*132f818dSEnji Cooper  eval 'func_lo2o ()
2345*132f818dSEnji Cooper  {
2346*132f818dSEnji Cooper    case $1 in
2347*132f818dSEnji Cooper      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
2348*132f818dSEnji Cooper      *   ) func_lo2o_result=$1               ;;
2349*132f818dSEnji Cooper    esac
2350*132f818dSEnji Cooper  }'
2351*132f818dSEnji Cooper
2352*132f818dSEnji Cooper  # func_xform LIBOBJ-OR-SOURCE
2353*132f818dSEnji Cooper  # ---------------------------
2354*132f818dSEnji Cooper  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
2355*132f818dSEnji Cooper  # suffix to a '.lo' libtool-object suffix.
2356*132f818dSEnji Cooper  eval 'func_xform ()
2357*132f818dSEnji Cooper  {
2358*132f818dSEnji Cooper    func_xform_result=${1%.*}.lo
2359*132f818dSEnji Cooper  }'
2360*132f818dSEnji Cooperelse
2361*132f818dSEnji Cooper  # ...otherwise fall back to using sed.
2362*132f818dSEnji Cooper  func_lo2o ()
2363*132f818dSEnji Cooper  {
2364*132f818dSEnji Cooper    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
2365*132f818dSEnji Cooper  }
2366*132f818dSEnji Cooper
2367*132f818dSEnji Cooper  func_xform ()
2368*132f818dSEnji Cooper  {
2369*132f818dSEnji Cooper    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
2370*132f818dSEnji Cooper  }
2371*132f818dSEnji Cooperfi
2372*132f818dSEnji Cooper
2373*132f818dSEnji Cooper
2374*132f818dSEnji Cooper# func_fatal_configuration ARG...
2375*132f818dSEnji Cooper# -------------------------------
2376*132f818dSEnji Cooper# Echo program name prefixed message to standard error, followed by
2377*132f818dSEnji Cooper# a configuration failure hint, and exit.
2378*132f818dSEnji Cooperfunc_fatal_configuration ()
2379*132f818dSEnji Cooper{
2380*132f818dSEnji Cooper    func_fatal_error ${1+"$@"} \
2381*132f818dSEnji Cooper      "See the $PACKAGE documentation for more information." \
2382*132f818dSEnji Cooper      "Fatal configuration error."
2383*132f818dSEnji Cooper}
2384*132f818dSEnji Cooper
2385*132f818dSEnji Cooper
2386*132f818dSEnji Cooper# func_config
2387*132f818dSEnji Cooper# -----------
2388*132f818dSEnji Cooper# Display the configuration for all the tags in this script.
2389*132f818dSEnji Cooperfunc_config ()
2390*132f818dSEnji Cooper{
2391*132f818dSEnji Cooper    re_begincf='^# ### BEGIN LIBTOOL'
2392*132f818dSEnji Cooper    re_endcf='^# ### END LIBTOOL'
2393*132f818dSEnji Cooper
2394*132f818dSEnji Cooper    # Default configuration.
2395*132f818dSEnji Cooper    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
2396*132f818dSEnji Cooper
2397*132f818dSEnji Cooper    # Now print the configurations for the tags.
2398*132f818dSEnji Cooper    for tagname in $taglist; do
2399*132f818dSEnji Cooper      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
2400*132f818dSEnji Cooper    done
2401*132f818dSEnji Cooper
2402*132f818dSEnji Cooper    exit $?
2403*132f818dSEnji Cooper}
2404*132f818dSEnji Cooper
2405*132f818dSEnji Cooper
2406*132f818dSEnji Cooper# func_features
2407*132f818dSEnji Cooper# -------------
2408*132f818dSEnji Cooper# Display the features supported by this script.
2409*132f818dSEnji Cooperfunc_features ()
2410*132f818dSEnji Cooper{
2411*132f818dSEnji Cooper    echo "host: $host"
2412*132f818dSEnji Cooper    if test yes = "$build_libtool_libs"; then
2413*132f818dSEnji Cooper      echo "enable shared libraries"
2414*132f818dSEnji Cooper    else
2415*132f818dSEnji Cooper      echo "disable shared libraries"
2416*132f818dSEnji Cooper    fi
2417*132f818dSEnji Cooper    if test yes = "$build_old_libs"; then
2418*132f818dSEnji Cooper      echo "enable static libraries"
2419*132f818dSEnji Cooper    else
2420*132f818dSEnji Cooper      echo "disable static libraries"
2421*132f818dSEnji Cooper    fi
2422*132f818dSEnji Cooper
2423*132f818dSEnji Cooper    exit $?
2424*132f818dSEnji Cooper}
2425*132f818dSEnji Cooper
2426*132f818dSEnji Cooper
2427*132f818dSEnji Cooper# func_enable_tag TAGNAME
2428*132f818dSEnji Cooper# -----------------------
2429*132f818dSEnji Cooper# Verify that TAGNAME is valid, and either flag an error and exit, or
2430*132f818dSEnji Cooper# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
2431*132f818dSEnji Cooper# variable here.
2432*132f818dSEnji Cooperfunc_enable_tag ()
2433*132f818dSEnji Cooper{
2434*132f818dSEnji Cooper    # Global variable:
2435*132f818dSEnji Cooper    tagname=$1
2436*132f818dSEnji Cooper
2437*132f818dSEnji Cooper    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
2438*132f818dSEnji Cooper    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
2439*132f818dSEnji Cooper    sed_extractcf=/$re_begincf/,/$re_endcf/p
2440*132f818dSEnji Cooper
2441*132f818dSEnji Cooper    # Validate tagname.
2442*132f818dSEnji Cooper    case $tagname in
2443*132f818dSEnji Cooper      *[!-_A-Za-z0-9,/]*)
2444*132f818dSEnji Cooper        func_fatal_error "invalid tag name: $tagname"
2445*132f818dSEnji Cooper        ;;
2446*132f818dSEnji Cooper    esac
2447*132f818dSEnji Cooper
2448*132f818dSEnji Cooper    # Don't test for the "default" C tag, as we know it's
2449*132f818dSEnji Cooper    # there but not specially marked.
2450*132f818dSEnji Cooper    case $tagname in
2451*132f818dSEnji Cooper        CC) ;;
2452*132f818dSEnji Cooper    *)
2453*132f818dSEnji Cooper        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
2454*132f818dSEnji Cooper	  taglist="$taglist $tagname"
2455*132f818dSEnji Cooper
2456*132f818dSEnji Cooper	  # Evaluate the configuration.  Be careful to quote the path
2457*132f818dSEnji Cooper	  # and the sed script, to avoid splitting on whitespace, but
2458*132f818dSEnji Cooper	  # also don't use non-portable quotes within backquotes within
2459*132f818dSEnji Cooper	  # quotes we have to do it in 2 steps:
2460*132f818dSEnji Cooper	  extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
2461*132f818dSEnji Cooper	  eval "$extractedcf"
2462*132f818dSEnji Cooper        else
2463*132f818dSEnji Cooper	  func_error "ignoring unknown tag $tagname"
2464*132f818dSEnji Cooper        fi
2465*132f818dSEnji Cooper        ;;
2466*132f818dSEnji Cooper    esac
2467*132f818dSEnji Cooper}
2468*132f818dSEnji Cooper
2469*132f818dSEnji Cooper
2470*132f818dSEnji Cooper# func_check_version_match
2471*132f818dSEnji Cooper# ------------------------
2472*132f818dSEnji Cooper# Ensure that we are using m4 macros, and libtool script from the same
2473*132f818dSEnji Cooper# release of libtool.
2474*132f818dSEnji Cooperfunc_check_version_match ()
2475*132f818dSEnji Cooper{
2476*132f818dSEnji Cooper    if test "$package_revision" != "$macro_revision"; then
2477*132f818dSEnji Cooper      if test "$VERSION" != "$macro_version"; then
2478*132f818dSEnji Cooper        if test -z "$macro_version"; then
2479*132f818dSEnji Cooper          cat >&2 <<_LT_EOF
2480*132f818dSEnji Cooper$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2481*132f818dSEnji Cooper$progname: definition of this LT_INIT comes from an older release.
2482*132f818dSEnji Cooper$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2483*132f818dSEnji Cooper$progname: and run autoconf again.
2484*132f818dSEnji Cooper_LT_EOF
2485*132f818dSEnji Cooper        else
2486*132f818dSEnji Cooper          cat >&2 <<_LT_EOF
2487*132f818dSEnji Cooper$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2488*132f818dSEnji Cooper$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
2489*132f818dSEnji Cooper$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2490*132f818dSEnji Cooper$progname: and run autoconf again.
2491*132f818dSEnji Cooper_LT_EOF
2492*132f818dSEnji Cooper        fi
2493*132f818dSEnji Cooper      else
2494*132f818dSEnji Cooper        cat >&2 <<_LT_EOF
2495*132f818dSEnji Cooper$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
2496*132f818dSEnji Cooper$progname: but the definition of this LT_INIT comes from revision $macro_revision.
2497*132f818dSEnji Cooper$progname: You should recreate aclocal.m4 with macros from revision $package_revision
2498*132f818dSEnji Cooper$progname: of $PACKAGE $VERSION and run autoconf again.
2499*132f818dSEnji Cooper_LT_EOF
2500*132f818dSEnji Cooper      fi
2501*132f818dSEnji Cooper
2502*132f818dSEnji Cooper      exit $EXIT_MISMATCH
2503*132f818dSEnji Cooper    fi
2504*132f818dSEnji Cooper}
2505*132f818dSEnji Cooper
2506*132f818dSEnji Cooper
2507*132f818dSEnji Cooper# libtool_options_prep [ARG]...
2508*132f818dSEnji Cooper# -----------------------------
2509*132f818dSEnji Cooper# Preparation for options parsed by libtool.
2510*132f818dSEnji Cooperlibtool_options_prep ()
2511*132f818dSEnji Cooper{
2512*132f818dSEnji Cooper    $debug_mode
2513*132f818dSEnji Cooper
2514*132f818dSEnji Cooper    # Option defaults:
2515*132f818dSEnji Cooper    opt_config=false
2516*132f818dSEnji Cooper    opt_dlopen=
2517*132f818dSEnji Cooper    opt_dry_run=false
2518*132f818dSEnji Cooper    opt_help=false
2519*132f818dSEnji Cooper    opt_mode=
2520*132f818dSEnji Cooper    opt_reorder_cache=false
2521*132f818dSEnji Cooper    opt_preserve_dup_deps=false
2522*132f818dSEnji Cooper    opt_quiet=false
2523*132f818dSEnji Cooper    opt_finishing=true
2524*132f818dSEnji Cooper    opt_warning=
2525*132f818dSEnji Cooper
2526*132f818dSEnji Cooper    nonopt=
2527*132f818dSEnji Cooper    preserve_args=
2528*132f818dSEnji Cooper
2529*132f818dSEnji Cooper    _G_rc_lt_options_prep=:
2530*132f818dSEnji Cooper
2531*132f818dSEnji Cooper    # Shorthand for --mode=foo, only valid as the first argument
2532*132f818dSEnji Cooper    case $1 in
2533*132f818dSEnji Cooper    clean|clea|cle|cl)
2534*132f818dSEnji Cooper      shift; set dummy --mode clean ${1+"$@"}; shift
2535*132f818dSEnji Cooper      ;;
2536*132f818dSEnji Cooper    compile|compil|compi|comp|com|co|c)
2537*132f818dSEnji Cooper      shift; set dummy --mode compile ${1+"$@"}; shift
2538*132f818dSEnji Cooper      ;;
2539*132f818dSEnji Cooper    execute|execut|execu|exec|exe|ex|e)
2540*132f818dSEnji Cooper      shift; set dummy --mode execute ${1+"$@"}; shift
2541*132f818dSEnji Cooper      ;;
2542*132f818dSEnji Cooper    finish|finis|fini|fin|fi|f)
2543*132f818dSEnji Cooper      shift; set dummy --mode finish ${1+"$@"}; shift
2544*132f818dSEnji Cooper      ;;
2545*132f818dSEnji Cooper    install|instal|insta|inst|ins|in|i)
2546*132f818dSEnji Cooper      shift; set dummy --mode install ${1+"$@"}; shift
2547*132f818dSEnji Cooper      ;;
2548*132f818dSEnji Cooper    link|lin|li|l)
2549*132f818dSEnji Cooper      shift; set dummy --mode link ${1+"$@"}; shift
2550*132f818dSEnji Cooper      ;;
2551*132f818dSEnji Cooper    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
2552*132f818dSEnji Cooper      shift; set dummy --mode uninstall ${1+"$@"}; shift
2553*132f818dSEnji Cooper      ;;
2554*132f818dSEnji Cooper    *)
2555*132f818dSEnji Cooper      _G_rc_lt_options_prep=false
2556*132f818dSEnji Cooper      ;;
2557*132f818dSEnji Cooper    esac
2558*132f818dSEnji Cooper
2559*132f818dSEnji Cooper    if $_G_rc_lt_options_prep; then
2560*132f818dSEnji Cooper      # Pass back the list of options.
2561*132f818dSEnji Cooper      func_quote eval ${1+"$@"}
2562*132f818dSEnji Cooper      libtool_options_prep_result=$func_quote_result
2563*132f818dSEnji Cooper    fi
2564*132f818dSEnji Cooper}
2565*132f818dSEnji Cooperfunc_add_hook func_options_prep libtool_options_prep
2566*132f818dSEnji Cooper
2567*132f818dSEnji Cooper
2568*132f818dSEnji Cooper# libtool_parse_options [ARG]...
2569*132f818dSEnji Cooper# ---------------------------------
2570*132f818dSEnji Cooper# Provide handling for libtool specific options.
2571*132f818dSEnji Cooperlibtool_parse_options ()
2572*132f818dSEnji Cooper{
2573*132f818dSEnji Cooper    $debug_cmd
2574*132f818dSEnji Cooper
2575*132f818dSEnji Cooper    _G_rc_lt_parse_options=false
2576*132f818dSEnji Cooper
2577*132f818dSEnji Cooper    # Perform our own loop to consume as many options as possible in
2578*132f818dSEnji Cooper    # each iteration.
2579*132f818dSEnji Cooper    while test $# -gt 0; do
2580*132f818dSEnji Cooper      _G_match_lt_parse_options=:
2581*132f818dSEnji Cooper      _G_opt=$1
2582*132f818dSEnji Cooper      shift
2583*132f818dSEnji Cooper      case $_G_opt in
2584*132f818dSEnji Cooper        --dry-run|--dryrun|-n)
2585*132f818dSEnji Cooper                        opt_dry_run=:
2586*132f818dSEnji Cooper                        ;;
2587*132f818dSEnji Cooper
2588*132f818dSEnji Cooper        --config)       func_config ;;
2589*132f818dSEnji Cooper
2590*132f818dSEnji Cooper        --dlopen|-dlopen)
2591*132f818dSEnji Cooper                        opt_dlopen="${opt_dlopen+$opt_dlopen
2592*132f818dSEnji Cooper}$1"
2593*132f818dSEnji Cooper                        shift
2594*132f818dSEnji Cooper                        ;;
2595*132f818dSEnji Cooper
2596*132f818dSEnji Cooper        --preserve-dup-deps)
2597*132f818dSEnji Cooper                        opt_preserve_dup_deps=: ;;
2598*132f818dSEnji Cooper
2599*132f818dSEnji Cooper        --features)     func_features ;;
2600*132f818dSEnji Cooper
2601*132f818dSEnji Cooper        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
2602*132f818dSEnji Cooper
2603*132f818dSEnji Cooper        --help)         opt_help=: ;;
2604*132f818dSEnji Cooper
2605*132f818dSEnji Cooper        --help-all)     opt_help=': help-all' ;;
2606*132f818dSEnji Cooper
2607*132f818dSEnji Cooper        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
2608*132f818dSEnji Cooper                        opt_mode=$1
2609*132f818dSEnji Cooper                        case $1 in
2610*132f818dSEnji Cooper                          # Valid mode arguments:
2611*132f818dSEnji Cooper                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
2612*132f818dSEnji Cooper
2613*132f818dSEnji Cooper                          # Catch anything else as an error
2614*132f818dSEnji Cooper                          *) func_error "invalid argument '$1' for $_G_opt"
2615*132f818dSEnji Cooper                             exit_cmd=exit
2616*132f818dSEnji Cooper                             ;;
2617*132f818dSEnji Cooper                        esac
2618*132f818dSEnji Cooper                        shift
2619*132f818dSEnji Cooper                        ;;
2620*132f818dSEnji Cooper
2621*132f818dSEnji Cooper        --no-finish)
2622*132f818dSEnji Cooper                        opt_finishing=false
2623*132f818dSEnji Cooper                        func_append preserve_args " $_G_opt"
2624*132f818dSEnji Cooper                        ;;
2625*132f818dSEnji Cooper
2626*132f818dSEnji Cooper        --no-silent|--no-quiet)
2627*132f818dSEnji Cooper                        opt_quiet=false
2628*132f818dSEnji Cooper                        func_append preserve_args " $_G_opt"
2629*132f818dSEnji Cooper                        ;;
2630*132f818dSEnji Cooper
2631*132f818dSEnji Cooper        --no-warnings|--no-warning|--no-warn)
2632*132f818dSEnji Cooper                        opt_warning=false
2633*132f818dSEnji Cooper                        func_append preserve_args " $_G_opt"
2634*132f818dSEnji Cooper                        ;;
2635*132f818dSEnji Cooper
2636*132f818dSEnji Cooper        --no-verbose)
2637*132f818dSEnji Cooper                        opt_verbose=false
2638*132f818dSEnji Cooper                        func_append preserve_args " $_G_opt"
2639*132f818dSEnji Cooper                        ;;
2640*132f818dSEnji Cooper
2641*132f818dSEnji Cooper        --reorder-cache)
2642*132f818dSEnji Cooper                        opt_reorder_cache=true
2643*132f818dSEnji Cooper                        shared_lib_dirs=$1
2644*132f818dSEnji Cooper                        if test -n "$shared_lib_dirs"; then
2645*132f818dSEnji Cooper                          case $1 in
2646*132f818dSEnji Cooper                            # Must begin with /:
2647*132f818dSEnji Cooper                            /*) ;;
2648*132f818dSEnji Cooper
2649*132f818dSEnji Cooper                            # Catch anything else as an error (relative paths)
2650*132f818dSEnji Cooper                            *) func_error "invalid argument '$1' for $_G_opt"
2651*132f818dSEnji Cooper                               func_error "absolute paths are required for $_G_opt"
2652*132f818dSEnji Cooper                               exit_cmd=exit
2653*132f818dSEnji Cooper                               ;;
2654*132f818dSEnji Cooper                          esac
2655*132f818dSEnji Cooper                        fi
2656*132f818dSEnji Cooper                        shift
2657*132f818dSEnji Cooper                        ;;
2658*132f818dSEnji Cooper
2659*132f818dSEnji Cooper        --silent|--quiet)
2660*132f818dSEnji Cooper                        opt_quiet=:
2661*132f818dSEnji Cooper                        opt_verbose=false
2662*132f818dSEnji Cooper                        func_append preserve_args " $_G_opt"
2663*132f818dSEnji Cooper                        ;;
2664*132f818dSEnji Cooper
2665*132f818dSEnji Cooper        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
2666*132f818dSEnji Cooper                        opt_tag=$1
2667*132f818dSEnji Cooper                        func_append preserve_args " $_G_opt $1"
2668*132f818dSEnji Cooper                        func_enable_tag "$1"
2669*132f818dSEnji Cooper                        shift
2670*132f818dSEnji Cooper                        ;;
2671*132f818dSEnji Cooper
2672*132f818dSEnji Cooper        --verbose|-v)   opt_quiet=false
2673*132f818dSEnji Cooper                        opt_verbose=:
2674*132f818dSEnji Cooper                        func_append preserve_args " $_G_opt"
2675*132f818dSEnji Cooper                        ;;
2676*132f818dSEnji Cooper
2677*132f818dSEnji Cooper        # An option not handled by this hook function:
2678*132f818dSEnji Cooper        *)              set dummy "$_G_opt" ${1+"$@"} ; shift
2679*132f818dSEnji Cooper                        _G_match_lt_parse_options=false
2680*132f818dSEnji Cooper                        break
2681*132f818dSEnji Cooper                        ;;
2682*132f818dSEnji Cooper      esac
2683*132f818dSEnji Cooper      $_G_match_lt_parse_options && _G_rc_lt_parse_options=:
2684*132f818dSEnji Cooper    done
2685*132f818dSEnji Cooper
2686*132f818dSEnji Cooper    if $_G_rc_lt_parse_options; then
2687*132f818dSEnji Cooper      # save modified positional parameters for caller
2688*132f818dSEnji Cooper      func_quote eval ${1+"$@"}
2689*132f818dSEnji Cooper      libtool_parse_options_result=$func_quote_result
2690*132f818dSEnji Cooper    fi
2691*132f818dSEnji Cooper}
2692*132f818dSEnji Cooperfunc_add_hook func_parse_options libtool_parse_options
2693*132f818dSEnji Cooper
2694*132f818dSEnji Cooper
2695*132f818dSEnji Cooper# func_warning ARG...
2696*132f818dSEnji Cooper# -------------------
2697*132f818dSEnji Cooper# Libtool warnings are not categorized, so override funclib.sh
2698*132f818dSEnji Cooper# func_warning with this simpler definition.
2699*132f818dSEnji Cooperfunc_warning ()
2700*132f818dSEnji Cooper{
2701*132f818dSEnji Cooper    if $opt_warning; then
2702*132f818dSEnji Cooper        $debug_cmd
2703*132f818dSEnji Cooper        $warning_func ${1+"$@"}
2704*132f818dSEnji Cooper    fi
2705*132f818dSEnji Cooper}
2706*132f818dSEnji Cooper
2707*132f818dSEnji Cooper
2708*132f818dSEnji Cooper# libtool_validate_options [ARG]...
2709*132f818dSEnji Cooper# ---------------------------------
2710*132f818dSEnji Cooper# Perform any sanity checks on option settings and/or unconsumed
2711*132f818dSEnji Cooper# arguments.
2712*132f818dSEnji Cooperlibtool_validate_options ()
2713*132f818dSEnji Cooper{
2714*132f818dSEnji Cooper    # save first non-option argument
2715*132f818dSEnji Cooper    if test 0 -lt $#; then
2716*132f818dSEnji Cooper      nonopt=$1
2717*132f818dSEnji Cooper      shift
2718*132f818dSEnji Cooper    fi
2719*132f818dSEnji Cooper
2720*132f818dSEnji Cooper    # preserve --debug
2721*132f818dSEnji Cooper    test : = "$debug_cmd" || func_append preserve_args " --debug"
2722*132f818dSEnji Cooper
2723*132f818dSEnji Cooper    case $host_os in
2724*132f818dSEnji Cooper      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
2725*132f818dSEnji Cooper      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
2726*132f818dSEnji Cooper      cygwin* | mingw* | windows* | pw32* | cegcc* | solaris2* | os2*)
2727*132f818dSEnji Cooper        # don't eliminate duplications in $postdeps and $predeps
2728*132f818dSEnji Cooper        opt_duplicate_compiler_generated_deps=:
2729*132f818dSEnji Cooper        ;;
2730*132f818dSEnji Cooper      *)
2731*132f818dSEnji Cooper        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
2732*132f818dSEnji Cooper        ;;
2733*132f818dSEnji Cooper    esac
2734*132f818dSEnji Cooper
2735*132f818dSEnji Cooper    $opt_help || {
2736*132f818dSEnji Cooper      # Sanity checks first:
2737*132f818dSEnji Cooper      func_check_version_match
2738*132f818dSEnji Cooper
2739*132f818dSEnji Cooper      test yes != "$build_libtool_libs" \
2740*132f818dSEnji Cooper        && test yes != "$build_old_libs" \
2741*132f818dSEnji Cooper        && func_fatal_configuration "not configured to build any kind of library"
2742*132f818dSEnji Cooper
2743*132f818dSEnji Cooper      # Darwin sucks
2744*132f818dSEnji Cooper      eval std_shrext=\"$shrext_cmds\"
2745*132f818dSEnji Cooper
2746*132f818dSEnji Cooper      # Only execute mode is allowed to have -dlopen flags.
2747*132f818dSEnji Cooper      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
2748*132f818dSEnji Cooper        func_error "unrecognized option '-dlopen'"
2749*132f818dSEnji Cooper        $ECHO "$help" 1>&2
2750*132f818dSEnji Cooper        exit $EXIT_FAILURE
2751*132f818dSEnji Cooper      fi
2752*132f818dSEnji Cooper
2753*132f818dSEnji Cooper      # Change the help message to a mode-specific one.
2754*132f818dSEnji Cooper      generic_help=$help
2755*132f818dSEnji Cooper      help="Try '$progname --help --mode=$opt_mode' for more information."
2756*132f818dSEnji Cooper    }
2757*132f818dSEnji Cooper
2758*132f818dSEnji Cooper    # Pass back the unparsed argument list
2759*132f818dSEnji Cooper    func_quote eval ${1+"$@"}
2760*132f818dSEnji Cooper    libtool_validate_options_result=$func_quote_result
2761*132f818dSEnji Cooper}
2762*132f818dSEnji Cooperfunc_add_hook func_validate_options libtool_validate_options
2763*132f818dSEnji Cooper
2764*132f818dSEnji Cooper
2765*132f818dSEnji Cooper# Process options as early as possible so that --help and --version
2766*132f818dSEnji Cooper# can return quickly.
2767*132f818dSEnji Cooperfunc_options ${1+"$@"}
2768*132f818dSEnji Coopereval set dummy "$func_options_result"; shift
2769*132f818dSEnji Cooper
2770*132f818dSEnji Cooper
2771*132f818dSEnji Cooper
2772*132f818dSEnji Cooper## ----------- ##
2773*132f818dSEnji Cooper##    Main.    ##
2774*132f818dSEnji Cooper## ----------- ##
2775*132f818dSEnji Cooper
2776*132f818dSEnji Coopermagic='%%%MAGIC variable%%%'
2777*132f818dSEnji Coopermagic_exe='%%%MAGIC EXE variable%%%'
2778*132f818dSEnji Cooper
2779*132f818dSEnji Cooper# Global variables.
2780*132f818dSEnji Cooperextracted_archives=
2781*132f818dSEnji Cooperextracted_serial=0
2782*132f818dSEnji Cooper
2783*132f818dSEnji Cooper# If this variable is set in any of the actions, the command in it
2784*132f818dSEnji Cooper# will be execed at the end.  This prevents here-documents from being
2785*132f818dSEnji Cooper# left over by shells.
2786*132f818dSEnji Cooperexec_cmd=
2787*132f818dSEnji Cooper
2788*132f818dSEnji Cooper
2789*132f818dSEnji Cooper# A function that is used when there is no print builtin or printf.
2790*132f818dSEnji Cooperfunc_fallback_echo ()
2791*132f818dSEnji Cooper{
2792*132f818dSEnji Cooper  eval 'cat <<_LTECHO_EOF
2793*132f818dSEnji Cooper$1
2794*132f818dSEnji Cooper_LTECHO_EOF'
2795*132f818dSEnji Cooper}
2796*132f818dSEnji Cooper
2797*132f818dSEnji Cooper# func_generated_by_libtool
2798*132f818dSEnji Cooper# True iff stdin has been generated by Libtool. This function is only
2799*132f818dSEnji Cooper# a basic sanity check; it will hardly flush out determined imposters.
2800*132f818dSEnji Cooperfunc_generated_by_libtool_p ()
2801*132f818dSEnji Cooper{
2802*132f818dSEnji Cooper  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
2803*132f818dSEnji Cooper}
2804*132f818dSEnji Cooper
2805*132f818dSEnji Cooper# func_lalib_p file
2806*132f818dSEnji Cooper# True iff FILE is a libtool '.la' library or '.lo' object file.
2807*132f818dSEnji Cooper# This function is only a basic sanity check; it will hardly flush out
2808*132f818dSEnji Cooper# determined imposters.
2809*132f818dSEnji Cooperfunc_lalib_p ()
2810*132f818dSEnji Cooper{
2811*132f818dSEnji Cooper    test -f "$1" &&
2812*132f818dSEnji Cooper      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
2813*132f818dSEnji Cooper}
2814*132f818dSEnji Cooper
2815*132f818dSEnji Cooper# func_lalib_unsafe_p file
2816*132f818dSEnji Cooper# True iff FILE is a libtool '.la' library or '.lo' object file.
2817*132f818dSEnji Cooper# This function implements the same check as func_lalib_p without
2818*132f818dSEnji Cooper# resorting to external programs.  To this end, it redirects stdin and
2819*132f818dSEnji Cooper# closes it afterwards, without saving the original file descriptor.
2820*132f818dSEnji Cooper# As a safety measure, use it only where a negative result would be
2821*132f818dSEnji Cooper# fatal anyway.  Works if 'file' does not exist.
2822*132f818dSEnji Cooperfunc_lalib_unsafe_p ()
2823*132f818dSEnji Cooper{
2824*132f818dSEnji Cooper    lalib_p=no
2825*132f818dSEnji Cooper    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
2826*132f818dSEnji Cooper	for lalib_p_l in 1 2 3 4
2827*132f818dSEnji Cooper	do
2828*132f818dSEnji Cooper	    read lalib_p_line
2829*132f818dSEnji Cooper	    case $lalib_p_line in
2830*132f818dSEnji Cooper		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
2831*132f818dSEnji Cooper	    esac
2832*132f818dSEnji Cooper	done
2833*132f818dSEnji Cooper	exec 0<&5 5<&-
2834*132f818dSEnji Cooper    fi
2835*132f818dSEnji Cooper    test yes = "$lalib_p"
2836*132f818dSEnji Cooper}
2837*132f818dSEnji Cooper
2838*132f818dSEnji Cooper# func_ltwrapper_script_p file
2839*132f818dSEnji Cooper# True iff FILE is a libtool wrapper script
2840*132f818dSEnji Cooper# This function is only a basic sanity check; it will hardly flush out
2841*132f818dSEnji Cooper# determined imposters.
2842*132f818dSEnji Cooperfunc_ltwrapper_script_p ()
2843*132f818dSEnji Cooper{
2844*132f818dSEnji Cooper    test -f "$1" &&
2845*132f818dSEnji Cooper      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
2846*132f818dSEnji Cooper}
2847*132f818dSEnji Cooper
2848*132f818dSEnji Cooper# func_ltwrapper_executable_p file
2849*132f818dSEnji Cooper# True iff FILE is a libtool wrapper executable
2850*132f818dSEnji Cooper# This function is only a basic sanity check; it will hardly flush out
2851*132f818dSEnji Cooper# determined imposters.
2852*132f818dSEnji Cooperfunc_ltwrapper_executable_p ()
2853*132f818dSEnji Cooper{
2854*132f818dSEnji Cooper    func_ltwrapper_exec_suffix=
2855*132f818dSEnji Cooper    case $1 in
2856*132f818dSEnji Cooper    *.exe) ;;
2857*132f818dSEnji Cooper    *) func_ltwrapper_exec_suffix=.exe ;;
2858*132f818dSEnji Cooper    esac
2859*132f818dSEnji Cooper    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
2860*132f818dSEnji Cooper}
2861*132f818dSEnji Cooper
2862*132f818dSEnji Cooper# func_ltwrapper_scriptname file
2863*132f818dSEnji Cooper# Assumes file is an ltwrapper_executable
2864*132f818dSEnji Cooper# uses $file to determine the appropriate filename for a
2865*132f818dSEnji Cooper# temporary ltwrapper_script.
2866*132f818dSEnji Cooperfunc_ltwrapper_scriptname ()
2867*132f818dSEnji Cooper{
2868*132f818dSEnji Cooper    func_dirname_and_basename "$1" "" "."
2869*132f818dSEnji Cooper    func_stripname '' '.exe' "$func_basename_result"
2870*132f818dSEnji Cooper    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
2871*132f818dSEnji Cooper}
2872*132f818dSEnji Cooper
2873*132f818dSEnji Cooper# func_ltwrapper_p file
2874*132f818dSEnji Cooper# True iff FILE is a libtool wrapper script or wrapper executable
2875*132f818dSEnji Cooper# This function is only a basic sanity check; it will hardly flush out
2876*132f818dSEnji Cooper# determined imposters.
2877*132f818dSEnji Cooperfunc_ltwrapper_p ()
2878*132f818dSEnji Cooper{
2879*132f818dSEnji Cooper    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
2880*132f818dSEnji Cooper}
2881*132f818dSEnji Cooper
2882*132f818dSEnji Cooper
2883*132f818dSEnji Cooper# func_execute_cmds commands fail_cmd
2884*132f818dSEnji Cooper# Execute tilde-delimited COMMANDS.
2885*132f818dSEnji Cooper# If FAIL_CMD is given, eval that upon failure.
2886*132f818dSEnji Cooper# FAIL_CMD may read-access the current command in variable CMD!
2887*132f818dSEnji Cooperfunc_execute_cmds ()
2888*132f818dSEnji Cooper{
2889*132f818dSEnji Cooper    $debug_cmd
2890*132f818dSEnji Cooper
2891*132f818dSEnji Cooper    save_ifs=$IFS; IFS='~'
2892*132f818dSEnji Cooper    for cmd in $1; do
2893*132f818dSEnji Cooper      IFS=$sp$nl
2894*132f818dSEnji Cooper      eval cmd=\"$cmd\"
2895*132f818dSEnji Cooper      IFS=$save_ifs
2896*132f818dSEnji Cooper      func_show_eval "$cmd" "${2-:}"
2897*132f818dSEnji Cooper    done
2898*132f818dSEnji Cooper    IFS=$save_ifs
2899*132f818dSEnji Cooper}
2900*132f818dSEnji Cooper
2901*132f818dSEnji Cooper
2902*132f818dSEnji Cooper# func_source file
2903*132f818dSEnji Cooper# Source FILE, adding directory component if necessary.
2904*132f818dSEnji Cooper# Note that it is not necessary on cygwin/mingw to append a dot to
2905*132f818dSEnji Cooper# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
2906*132f818dSEnji Cooper# behavior happens only for exec(3), not for open(2)!  Also, sourcing
2907*132f818dSEnji Cooper# 'FILE.' does not work on cygwin managed mounts.
2908*132f818dSEnji Cooperfunc_source ()
2909*132f818dSEnji Cooper{
2910*132f818dSEnji Cooper    $debug_cmd
2911*132f818dSEnji Cooper
2912*132f818dSEnji Cooper    case $1 in
2913*132f818dSEnji Cooper    */* | *\\*)	. "$1" ;;
2914*132f818dSEnji Cooper    *)		. "./$1" ;;
2915*132f818dSEnji Cooper    esac
2916*132f818dSEnji Cooper}
2917*132f818dSEnji Cooper
2918*132f818dSEnji Cooper
2919*132f818dSEnji Cooper# func_resolve_sysroot PATH
2920*132f818dSEnji Cooper# Replace a leading = in PATH with a sysroot.  Store the result into
2921*132f818dSEnji Cooper# func_resolve_sysroot_result
2922*132f818dSEnji Cooperfunc_resolve_sysroot ()
2923*132f818dSEnji Cooper{
2924*132f818dSEnji Cooper  func_resolve_sysroot_result=$1
2925*132f818dSEnji Cooper  case $func_resolve_sysroot_result in
2926*132f818dSEnji Cooper  =*)
2927*132f818dSEnji Cooper    func_stripname '=' '' "$func_resolve_sysroot_result"
2928*132f818dSEnji Cooper    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
2929*132f818dSEnji Cooper    ;;
2930*132f818dSEnji Cooper  esac
2931*132f818dSEnji Cooper}
2932*132f818dSEnji Cooper
2933*132f818dSEnji Cooper# func_replace_sysroot PATH
2934*132f818dSEnji Cooper# If PATH begins with the sysroot, replace it with = and
2935*132f818dSEnji Cooper# store the result into func_replace_sysroot_result.
2936*132f818dSEnji Cooperfunc_replace_sysroot ()
2937*132f818dSEnji Cooper{
2938*132f818dSEnji Cooper  case $lt_sysroot:$1 in
2939*132f818dSEnji Cooper  ?*:"$lt_sysroot"*)
2940*132f818dSEnji Cooper    func_stripname "$lt_sysroot" '' "$1"
2941*132f818dSEnji Cooper    func_replace_sysroot_result='='$func_stripname_result
2942*132f818dSEnji Cooper    ;;
2943*132f818dSEnji Cooper  *)
2944*132f818dSEnji Cooper    # Including no sysroot.
2945*132f818dSEnji Cooper    func_replace_sysroot_result=$1
2946*132f818dSEnji Cooper    ;;
2947*132f818dSEnji Cooper  esac
2948*132f818dSEnji Cooper}
2949*132f818dSEnji Cooper
2950*132f818dSEnji Cooper# func_infer_tag arg
2951*132f818dSEnji Cooper# Infer tagged configuration to use if any are available and
2952*132f818dSEnji Cooper# if one wasn't chosen via the "--tag" command line option.
2953*132f818dSEnji Cooper# Only attempt this if the compiler in the base compile
2954*132f818dSEnji Cooper# command doesn't match the default compiler.
2955*132f818dSEnji Cooper# arg is usually of the form 'gcc ...'
2956*132f818dSEnji Cooperfunc_infer_tag ()
2957*132f818dSEnji Cooper{
2958*132f818dSEnji Cooper    $debug_cmd
2959*132f818dSEnji Cooper
2960*132f818dSEnji Cooper    if test -n "$available_tags" && test -z "$tagname"; then
2961*132f818dSEnji Cooper      CC_quoted=
2962*132f818dSEnji Cooper      for arg in $CC; do
2963*132f818dSEnji Cooper	func_append_quoted CC_quoted "$arg"
2964*132f818dSEnji Cooper      done
2965*132f818dSEnji Cooper      CC_expanded=`func_echo_all $CC`
2966*132f818dSEnji Cooper      CC_quoted_expanded=`func_echo_all $CC_quoted`
2967*132f818dSEnji Cooper      case $@ in
2968*132f818dSEnji Cooper      # Blanks in the command may have been stripped by the calling shell,
2969*132f818dSEnji Cooper      # but not from the CC environment variable when configure was run.
2970*132f818dSEnji Cooper      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2971*132f818dSEnji Cooper      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
2972*132f818dSEnji Cooper      # Blanks at the start of $base_compile will cause this to fail
2973*132f818dSEnji Cooper      # if we don't check for them as well.
2974*132f818dSEnji Cooper      *)
2975*132f818dSEnji Cooper	for z in $available_tags; do
2976*132f818dSEnji Cooper	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
2977*132f818dSEnji Cooper	    # Evaluate the configuration.
2978*132f818dSEnji Cooper	    eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
2979*132f818dSEnji Cooper	    CC_quoted=
2980*132f818dSEnji Cooper	    for arg in $CC; do
2981*132f818dSEnji Cooper	      # Double-quote args containing other shell metacharacters.
2982*132f818dSEnji Cooper	      func_append_quoted CC_quoted "$arg"
2983*132f818dSEnji Cooper	    done
2984*132f818dSEnji Cooper	    CC_expanded=`func_echo_all $CC`
2985*132f818dSEnji Cooper	    CC_quoted_expanded=`func_echo_all $CC_quoted`
2986*132f818dSEnji Cooper	    case "$@ " in
2987*132f818dSEnji Cooper	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2988*132f818dSEnji Cooper	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
2989*132f818dSEnji Cooper	      # The compiler in the base compile command matches
2990*132f818dSEnji Cooper	      # the one in the tagged configuration.
2991*132f818dSEnji Cooper	      # Assume this is the tagged configuration we want.
2992*132f818dSEnji Cooper	      tagname=$z
2993*132f818dSEnji Cooper	      break
2994*132f818dSEnji Cooper	      ;;
2995*132f818dSEnji Cooper	    esac
2996*132f818dSEnji Cooper	  fi
2997*132f818dSEnji Cooper	done
2998*132f818dSEnji Cooper	# If $tagname still isn't set, then no tagged configuration
2999*132f818dSEnji Cooper	# was found and let the user know that the "--tag" command
3000*132f818dSEnji Cooper	# line option must be used.
3001*132f818dSEnji Cooper	if test -z "$tagname"; then
3002*132f818dSEnji Cooper	  func_echo "unable to infer tagged configuration"
3003*132f818dSEnji Cooper	  func_fatal_error "specify a tag with '--tag'"
3004*132f818dSEnji Cooper#	else
3005*132f818dSEnji Cooper#	  func_verbose "using $tagname tagged configuration"
3006*132f818dSEnji Cooper	fi
3007*132f818dSEnji Cooper	;;
3008*132f818dSEnji Cooper      esac
3009*132f818dSEnji Cooper    fi
3010*132f818dSEnji Cooper}
3011*132f818dSEnji Cooper
3012*132f818dSEnji Cooper
3013*132f818dSEnji Cooper
3014*132f818dSEnji Cooper# func_write_libtool_object output_name pic_name nonpic_name
3015*132f818dSEnji Cooper# Create a libtool object file (analogous to a ".la" file),
3016*132f818dSEnji Cooper# but don't create it if we're doing a dry run.
3017*132f818dSEnji Cooperfunc_write_libtool_object ()
3018*132f818dSEnji Cooper{
3019*132f818dSEnji Cooper    write_libobj=$1
3020*132f818dSEnji Cooper    if test yes = "$build_libtool_libs"; then
3021*132f818dSEnji Cooper      write_lobj=\'$2\'
3022*132f818dSEnji Cooper    else
3023*132f818dSEnji Cooper      write_lobj=none
3024*132f818dSEnji Cooper    fi
3025*132f818dSEnji Cooper
3026*132f818dSEnji Cooper    if test yes = "$build_old_libs"; then
3027*132f818dSEnji Cooper      write_oldobj=\'$3\'
3028*132f818dSEnji Cooper    else
3029*132f818dSEnji Cooper      write_oldobj=none
3030*132f818dSEnji Cooper    fi
3031*132f818dSEnji Cooper
3032*132f818dSEnji Cooper    $opt_dry_run || {
3033*132f818dSEnji Cooper      cat >${write_libobj}T <<EOF
3034*132f818dSEnji Cooper# $write_libobj - a libtool object file
3035*132f818dSEnji Cooper# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
3036*132f818dSEnji Cooper#
3037*132f818dSEnji Cooper# Please DO NOT delete this file!
3038*132f818dSEnji Cooper# It is necessary for linking the library.
3039*132f818dSEnji Cooper
3040*132f818dSEnji Cooper# Name of the PIC object.
3041*132f818dSEnji Cooperpic_object=$write_lobj
3042*132f818dSEnji Cooper
3043*132f818dSEnji Cooper# Name of the non-PIC object
3044*132f818dSEnji Coopernon_pic_object=$write_oldobj
3045*132f818dSEnji Cooper
3046*132f818dSEnji CooperEOF
3047*132f818dSEnji Cooper      $MV "${write_libobj}T" "$write_libobj"
3048*132f818dSEnji Cooper    }
3049*132f818dSEnji Cooper}
3050*132f818dSEnji Cooper
3051*132f818dSEnji Cooper
3052*132f818dSEnji Cooper##################################################
3053*132f818dSEnji Cooper# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
3054*132f818dSEnji Cooper##################################################
3055*132f818dSEnji Cooper
3056*132f818dSEnji Cooper# func_convert_core_file_wine_to_w32 ARG
3057*132f818dSEnji Cooper# Helper function used by file name conversion functions when $build is *nix,
3058*132f818dSEnji Cooper# and $host is mingw, windows, cygwin, or some other w32 environment. Relies on a
3059*132f818dSEnji Cooper# correctly configured wine environment available, with the winepath program
3060*132f818dSEnji Cooper# in $build's $PATH.
3061*132f818dSEnji Cooper#
3062*132f818dSEnji Cooper# ARG is the $build file name to be converted to w32 format.
3063*132f818dSEnji Cooper# Result is available in $func_convert_core_file_wine_to_w32_result, and will
3064*132f818dSEnji Cooper# be empty on error (or when ARG is empty)
3065*132f818dSEnji Cooperfunc_convert_core_file_wine_to_w32 ()
3066*132f818dSEnji Cooper{
3067*132f818dSEnji Cooper  $debug_cmd
3068*132f818dSEnji Cooper
3069*132f818dSEnji Cooper  func_convert_core_file_wine_to_w32_result=$1
3070*132f818dSEnji Cooper  if test -n "$1"; then
3071*132f818dSEnji Cooper    # Unfortunately, winepath does not exit with a non-zero error code, so we
3072*132f818dSEnji Cooper    # are forced to check the contents of stdout. On the other hand, if the
3073*132f818dSEnji Cooper    # command is not found, the shell will set an exit code of 127 and print
3074*132f818dSEnji Cooper    # *an error message* to stdout. So we must check for both error code of
3075*132f818dSEnji Cooper    # zero AND non-empty stdout, which explains the odd construction:
3076*132f818dSEnji Cooper    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
3077*132f818dSEnji Cooper    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
3078*132f818dSEnji Cooper      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
3079*132f818dSEnji Cooper        $SED -e "$sed_naive_backslashify"`
3080*132f818dSEnji Cooper    else
3081*132f818dSEnji Cooper      func_convert_core_file_wine_to_w32_result=
3082*132f818dSEnji Cooper    fi
3083*132f818dSEnji Cooper  fi
3084*132f818dSEnji Cooper}
3085*132f818dSEnji Cooper# end: func_convert_core_file_wine_to_w32
3086*132f818dSEnji Cooper
3087*132f818dSEnji Cooper
3088*132f818dSEnji Cooper# func_convert_core_path_wine_to_w32 ARG
3089*132f818dSEnji Cooper# Helper function used by path conversion functions when $build is *nix, and
3090*132f818dSEnji Cooper# $host is mingw, windows, cygwin, or some other w32 environment. Relies on a
3091*132f818dSEnji Cooper# correctly configured wine environment available, with the winepath program
3092*132f818dSEnji Cooper# in $build's $PATH. Assumes ARG has no leading or trailing path separator
3093*132f818dSEnji Cooper# characters.
3094*132f818dSEnji Cooper#
3095*132f818dSEnji Cooper# ARG is path to be converted from $build format to win32.
3096*132f818dSEnji Cooper# Result is available in $func_convert_core_path_wine_to_w32_result.
3097*132f818dSEnji Cooper# Unconvertible file (directory) names in ARG are skipped; if no directory names
3098*132f818dSEnji Cooper# are convertible, then the result may be empty.
3099*132f818dSEnji Cooperfunc_convert_core_path_wine_to_w32 ()
3100*132f818dSEnji Cooper{
3101*132f818dSEnji Cooper  $debug_cmd
3102*132f818dSEnji Cooper
3103*132f818dSEnji Cooper  # unfortunately, winepath doesn't convert paths, only file names
3104*132f818dSEnji Cooper  func_convert_core_path_wine_to_w32_result=
3105*132f818dSEnji Cooper  if test -n "$1"; then
3106*132f818dSEnji Cooper    oldIFS=$IFS
3107*132f818dSEnji Cooper    IFS=:
3108*132f818dSEnji Cooper    for func_convert_core_path_wine_to_w32_f in $1; do
3109*132f818dSEnji Cooper      IFS=$oldIFS
3110*132f818dSEnji Cooper      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
3111*132f818dSEnji Cooper      if test -n "$func_convert_core_file_wine_to_w32_result"; then
3112*132f818dSEnji Cooper        if test -z "$func_convert_core_path_wine_to_w32_result"; then
3113*132f818dSEnji Cooper          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
3114*132f818dSEnji Cooper        else
3115*132f818dSEnji Cooper          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
3116*132f818dSEnji Cooper        fi
3117*132f818dSEnji Cooper      fi
3118*132f818dSEnji Cooper    done
3119*132f818dSEnji Cooper    IFS=$oldIFS
3120*132f818dSEnji Cooper  fi
3121*132f818dSEnji Cooper}
3122*132f818dSEnji Cooper# end: func_convert_core_path_wine_to_w32
3123*132f818dSEnji Cooper
3124*132f818dSEnji Cooper
3125*132f818dSEnji Cooper# func_cygpath ARGS...
3126*132f818dSEnji Cooper# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
3127*132f818dSEnji Cooper# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
3128*132f818dSEnji Cooper# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
3129*132f818dSEnji Cooper# (2), returns the Cygwin file name or path in func_cygpath_result (input
3130*132f818dSEnji Cooper# file name or path is assumed to be in w32 format, as previously converted
3131*132f818dSEnji Cooper# from $build's *nix or MSYS format). In case (3), returns the w32 file name
3132*132f818dSEnji Cooper# or path in func_cygpath_result (input file name or path is assumed to be in
3133*132f818dSEnji Cooper# Cygwin format). Returns an empty string on error.
3134*132f818dSEnji Cooper#
3135*132f818dSEnji Cooper# ARGS are passed to cygpath, with the last one being the file name or path to
3136*132f818dSEnji Cooper# be converted.
3137*132f818dSEnji Cooper#
3138*132f818dSEnji Cooper# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
3139*132f818dSEnji Cooper# environment variable; do not put it in $PATH.
3140*132f818dSEnji Cooperfunc_cygpath ()
3141*132f818dSEnji Cooper{
3142*132f818dSEnji Cooper  $debug_cmd
3143*132f818dSEnji Cooper
3144*132f818dSEnji Cooper  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
3145*132f818dSEnji Cooper    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
3146*132f818dSEnji Cooper    if test "$?" -ne 0; then
3147*132f818dSEnji Cooper      # on failure, ensure result is empty
3148*132f818dSEnji Cooper      func_cygpath_result=
3149*132f818dSEnji Cooper    fi
3150*132f818dSEnji Cooper  else
3151*132f818dSEnji Cooper    func_cygpath_result=
3152*132f818dSEnji Cooper    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
3153*132f818dSEnji Cooper  fi
3154*132f818dSEnji Cooper}
3155*132f818dSEnji Cooper#end: func_cygpath
3156*132f818dSEnji Cooper
3157*132f818dSEnji Cooper
3158*132f818dSEnji Cooper# func_convert_core_msys_to_w32 ARG
3159*132f818dSEnji Cooper# Convert file name or path ARG from MSYS format to w32 format.  Return
3160*132f818dSEnji Cooper# result in func_convert_core_msys_to_w32_result.
3161*132f818dSEnji Cooperfunc_convert_core_msys_to_w32 ()
3162*132f818dSEnji Cooper{
3163*132f818dSEnji Cooper  $debug_cmd
3164*132f818dSEnji Cooper
3165*132f818dSEnji Cooper  # awkward: cmd appends spaces to result
3166*132f818dSEnji Cooper  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
3167*132f818dSEnji Cooper    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
3168*132f818dSEnji Cooper}
3169*132f818dSEnji Cooper#end: func_convert_core_msys_to_w32
3170*132f818dSEnji Cooper
3171*132f818dSEnji Cooper
3172*132f818dSEnji Cooper# func_convert_file_check ARG1 ARG2
3173*132f818dSEnji Cooper# Verify that ARG1 (a file name in $build format) was converted to $host
3174*132f818dSEnji Cooper# format in ARG2. Otherwise, emit an error message, but continue (resetting
3175*132f818dSEnji Cooper# func_to_host_file_result to ARG1).
3176*132f818dSEnji Cooperfunc_convert_file_check ()
3177*132f818dSEnji Cooper{
3178*132f818dSEnji Cooper  $debug_cmd
3179*132f818dSEnji Cooper
3180*132f818dSEnji Cooper  if test -z "$2" && test -n "$1"; then
3181*132f818dSEnji Cooper    func_error "Could not determine host file name corresponding to"
3182*132f818dSEnji Cooper    func_error "  '$1'"
3183*132f818dSEnji Cooper    func_error "Continuing, but uninstalled executables may not work."
3184*132f818dSEnji Cooper    # Fallback:
3185*132f818dSEnji Cooper    func_to_host_file_result=$1
3186*132f818dSEnji Cooper  fi
3187*132f818dSEnji Cooper}
3188*132f818dSEnji Cooper# end func_convert_file_check
3189*132f818dSEnji Cooper
3190*132f818dSEnji Cooper
3191*132f818dSEnji Cooper# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
3192*132f818dSEnji Cooper# Verify that FROM_PATH (a path in $build format) was converted to $host
3193*132f818dSEnji Cooper# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
3194*132f818dSEnji Cooper# func_to_host_file_result to a simplistic fallback value (see below).
3195*132f818dSEnji Cooperfunc_convert_path_check ()
3196*132f818dSEnji Cooper{
3197*132f818dSEnji Cooper  $debug_cmd
3198*132f818dSEnji Cooper
3199*132f818dSEnji Cooper  if test -z "$4" && test -n "$3"; then
3200*132f818dSEnji Cooper    func_error "Could not determine the host path corresponding to"
3201*132f818dSEnji Cooper    func_error "  '$3'"
3202*132f818dSEnji Cooper    func_error "Continuing, but uninstalled executables may not work."
3203*132f818dSEnji Cooper    # Fallback.  This is a deliberately simplistic "conversion" and
3204*132f818dSEnji Cooper    # should not be "improved".  See libtool.info.
3205*132f818dSEnji Cooper    if test "x$1" != "x$2"; then
3206*132f818dSEnji Cooper      lt_replace_pathsep_chars="s|$1|$2|g"
3207*132f818dSEnji Cooper      func_to_host_path_result=`echo "$3" |
3208*132f818dSEnji Cooper        $SED -e "$lt_replace_pathsep_chars"`
3209*132f818dSEnji Cooper    else
3210*132f818dSEnji Cooper      func_to_host_path_result=$3
3211*132f818dSEnji Cooper    fi
3212*132f818dSEnji Cooper  fi
3213*132f818dSEnji Cooper}
3214*132f818dSEnji Cooper# end func_convert_path_check
3215*132f818dSEnji Cooper
3216*132f818dSEnji Cooper
3217*132f818dSEnji Cooper# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
3218*132f818dSEnji Cooper# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
3219*132f818dSEnji Cooper# and appending REPL if ORIG matches BACKPAT.
3220*132f818dSEnji Cooperfunc_convert_path_front_back_pathsep ()
3221*132f818dSEnji Cooper{
3222*132f818dSEnji Cooper  $debug_cmd
3223*132f818dSEnji Cooper
3224*132f818dSEnji Cooper  case $4 in
3225*132f818dSEnji Cooper  $1 ) func_to_host_path_result=$3$func_to_host_path_result
3226*132f818dSEnji Cooper    ;;
3227*132f818dSEnji Cooper  esac
3228*132f818dSEnji Cooper  case $4 in
3229*132f818dSEnji Cooper  $2 ) func_append func_to_host_path_result "$3"
3230*132f818dSEnji Cooper    ;;
3231*132f818dSEnji Cooper  esac
3232*132f818dSEnji Cooper}
3233*132f818dSEnji Cooper# end func_convert_path_front_back_pathsep
3234*132f818dSEnji Cooper
3235*132f818dSEnji Cooper
3236*132f818dSEnji Cooper# func_convert_delimited_path PATH ORIG_DELIMITER NEW_DELIMITER
3237*132f818dSEnji Cooper# Replaces a delimiter for a given path.
3238*132f818dSEnji Cooperfunc_convert_delimited_path ()
3239*132f818dSEnji Cooper{
3240*132f818dSEnji Cooper	converted_path=`$ECHO "$1" | $SED "s#$2#$3#g"`
3241*132f818dSEnji Cooper}
3242*132f818dSEnji Cooper# end func_convert_delimited_path
3243*132f818dSEnji Cooper
3244*132f818dSEnji Cooper
3245*132f818dSEnji Cooper##################################################
3246*132f818dSEnji Cooper# $build to $host FILE NAME CONVERSION FUNCTIONS #
3247*132f818dSEnji Cooper##################################################
3248*132f818dSEnji Cooper# invoked via '$to_host_file_cmd ARG'
3249*132f818dSEnji Cooper#
3250*132f818dSEnji Cooper# In each case, ARG is the path to be converted from $build to $host format.
3251*132f818dSEnji Cooper# Result will be available in $func_to_host_file_result.
3252*132f818dSEnji Cooper
3253*132f818dSEnji Cooper
3254*132f818dSEnji Cooper# func_to_host_file ARG
3255*132f818dSEnji Cooper# Converts the file name ARG from $build format to $host format. Return result
3256*132f818dSEnji Cooper# in func_to_host_file_result.
3257*132f818dSEnji Cooperfunc_to_host_file ()
3258*132f818dSEnji Cooper{
3259*132f818dSEnji Cooper  $debug_cmd
3260*132f818dSEnji Cooper
3261*132f818dSEnji Cooper  $to_host_file_cmd "$1"
3262*132f818dSEnji Cooper}
3263*132f818dSEnji Cooper# end func_to_host_file
3264*132f818dSEnji Cooper
3265*132f818dSEnji Cooper
3266*132f818dSEnji Cooper# func_to_tool_file ARG LAZY
3267*132f818dSEnji Cooper# converts the file name ARG from $build format to toolchain format. Return
3268*132f818dSEnji Cooper# result in func_to_tool_file_result.  If the conversion in use is listed
3269*132f818dSEnji Cooper# in (the comma separated) LAZY, no conversion takes place.
3270*132f818dSEnji Cooperfunc_to_tool_file ()
3271*132f818dSEnji Cooper{
3272*132f818dSEnji Cooper  $debug_cmd
3273*132f818dSEnji Cooper
3274*132f818dSEnji Cooper  case ,$2, in
3275*132f818dSEnji Cooper    *,"$to_tool_file_cmd",*)
3276*132f818dSEnji Cooper      func_to_tool_file_result=$1
3277*132f818dSEnji Cooper      ;;
3278*132f818dSEnji Cooper    *)
3279*132f818dSEnji Cooper      $to_tool_file_cmd "$1"
3280*132f818dSEnji Cooper      func_to_tool_file_result=$func_to_host_file_result
3281*132f818dSEnji Cooper      ;;
3282*132f818dSEnji Cooper  esac
3283*132f818dSEnji Cooper}
3284*132f818dSEnji Cooper# end func_to_tool_file
3285*132f818dSEnji Cooper
3286*132f818dSEnji Cooper
3287*132f818dSEnji Cooper# func_convert_file_noop ARG
3288*132f818dSEnji Cooper# Copy ARG to func_to_host_file_result.
3289*132f818dSEnji Cooperfunc_convert_file_noop ()
3290*132f818dSEnji Cooper{
3291*132f818dSEnji Cooper  func_to_host_file_result=$1
3292*132f818dSEnji Cooper}
3293*132f818dSEnji Cooper# end func_convert_file_noop
3294*132f818dSEnji Cooper
3295*132f818dSEnji Cooper
3296*132f818dSEnji Cooper# func_convert_file_msys_to_w32 ARG
3297*132f818dSEnji Cooper# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
3298*132f818dSEnji Cooper# conversion to w32 is not available inside the cwrapper.  Returns result in
3299*132f818dSEnji Cooper# func_to_host_file_result.
3300*132f818dSEnji Cooperfunc_convert_file_msys_to_w32 ()
3301*132f818dSEnji Cooper{
3302*132f818dSEnji Cooper  $debug_cmd
3303*132f818dSEnji Cooper
3304*132f818dSEnji Cooper  func_to_host_file_result=$1
3305*132f818dSEnji Cooper  if test -n "$1"; then
3306*132f818dSEnji Cooper    func_convert_core_msys_to_w32 "$1"
3307*132f818dSEnji Cooper    func_to_host_file_result=$func_convert_core_msys_to_w32_result
3308*132f818dSEnji Cooper  fi
3309*132f818dSEnji Cooper  func_convert_file_check "$1" "$func_to_host_file_result"
3310*132f818dSEnji Cooper}
3311*132f818dSEnji Cooper# end func_convert_file_msys_to_w32
3312*132f818dSEnji Cooper
3313*132f818dSEnji Cooper
3314*132f818dSEnji Cooper# func_convert_file_cygwin_to_w32 ARG
3315*132f818dSEnji Cooper# Convert file name ARG from Cygwin to w32 format.  Returns result in
3316*132f818dSEnji Cooper# func_to_host_file_result.
3317*132f818dSEnji Cooperfunc_convert_file_cygwin_to_w32 ()
3318*132f818dSEnji Cooper{
3319*132f818dSEnji Cooper  $debug_cmd
3320*132f818dSEnji Cooper
3321*132f818dSEnji Cooper  func_to_host_file_result=$1
3322*132f818dSEnji Cooper  if test -n "$1"; then
3323*132f818dSEnji Cooper    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
3324*132f818dSEnji Cooper    # LT_CYGPATH in this case.
3325*132f818dSEnji Cooper    func_to_host_file_result=`cygpath -m "$1"`
3326*132f818dSEnji Cooper  fi
3327*132f818dSEnji Cooper  func_convert_file_check "$1" "$func_to_host_file_result"
3328*132f818dSEnji Cooper}
3329*132f818dSEnji Cooper# end func_convert_file_cygwin_to_w32
3330*132f818dSEnji Cooper
3331*132f818dSEnji Cooper
3332*132f818dSEnji Cooper# func_convert_file_nix_to_w32 ARG
3333*132f818dSEnji Cooper# Convert file name ARG from *nix to w32 format.  Requires a wine environment
3334*132f818dSEnji Cooper# and a working winepath. Returns result in func_to_host_file_result.
3335*132f818dSEnji Cooperfunc_convert_file_nix_to_w32 ()
3336*132f818dSEnji Cooper{
3337*132f818dSEnji Cooper  $debug_cmd
3338*132f818dSEnji Cooper
3339*132f818dSEnji Cooper  func_to_host_file_result=$1
3340*132f818dSEnji Cooper  if test -n "$1"; then
3341*132f818dSEnji Cooper    func_convert_core_file_wine_to_w32 "$1"
3342*132f818dSEnji Cooper    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
3343*132f818dSEnji Cooper  fi
3344*132f818dSEnji Cooper  func_convert_file_check "$1" "$func_to_host_file_result"
3345*132f818dSEnji Cooper}
3346*132f818dSEnji Cooper# end func_convert_file_nix_to_w32
3347*132f818dSEnji Cooper
3348*132f818dSEnji Cooper
3349*132f818dSEnji Cooper# func_convert_file_msys_to_cygwin ARG
3350*132f818dSEnji Cooper# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3351*132f818dSEnji Cooper# Returns result in func_to_host_file_result.
3352*132f818dSEnji Cooperfunc_convert_file_msys_to_cygwin ()
3353*132f818dSEnji Cooper{
3354*132f818dSEnji Cooper  $debug_cmd
3355*132f818dSEnji Cooper
3356*132f818dSEnji Cooper  func_to_host_file_result=$1
3357*132f818dSEnji Cooper  if test -n "$1"; then
3358*132f818dSEnji Cooper    func_convert_core_msys_to_w32 "$1"
3359*132f818dSEnji Cooper    func_cygpath -u "$func_convert_core_msys_to_w32_result"
3360*132f818dSEnji Cooper    func_to_host_file_result=$func_cygpath_result
3361*132f818dSEnji Cooper  fi
3362*132f818dSEnji Cooper  func_convert_file_check "$1" "$func_to_host_file_result"
3363*132f818dSEnji Cooper}
3364*132f818dSEnji Cooper# end func_convert_file_msys_to_cygwin
3365*132f818dSEnji Cooper
3366*132f818dSEnji Cooper
3367*132f818dSEnji Cooper# func_convert_file_nix_to_cygwin ARG
3368*132f818dSEnji Cooper# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
3369*132f818dSEnji Cooper# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
3370*132f818dSEnji Cooper# in func_to_host_file_result.
3371*132f818dSEnji Cooperfunc_convert_file_nix_to_cygwin ()
3372*132f818dSEnji Cooper{
3373*132f818dSEnji Cooper  $debug_cmd
3374*132f818dSEnji Cooper
3375*132f818dSEnji Cooper  func_to_host_file_result=$1
3376*132f818dSEnji Cooper  if test -n "$1"; then
3377*132f818dSEnji Cooper    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
3378*132f818dSEnji Cooper    func_convert_core_file_wine_to_w32 "$1"
3379*132f818dSEnji Cooper    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
3380*132f818dSEnji Cooper    func_to_host_file_result=$func_cygpath_result
3381*132f818dSEnji Cooper  fi
3382*132f818dSEnji Cooper  func_convert_file_check "$1" "$func_to_host_file_result"
3383*132f818dSEnji Cooper}
3384*132f818dSEnji Cooper# end func_convert_file_nix_to_cygwin
3385*132f818dSEnji Cooper
3386*132f818dSEnji Cooper
3387*132f818dSEnji Cooper#############################################
3388*132f818dSEnji Cooper# $build to $host PATH CONVERSION FUNCTIONS #
3389*132f818dSEnji Cooper#############################################
3390*132f818dSEnji Cooper# invoked via '$to_host_path_cmd ARG'
3391*132f818dSEnji Cooper#
3392*132f818dSEnji Cooper# In each case, ARG is the path to be converted from $build to $host format.
3393*132f818dSEnji Cooper# The result will be available in $func_to_host_path_result.
3394*132f818dSEnji Cooper#
3395*132f818dSEnji Cooper# Path separators are also converted from $build format to $host format.  If
3396*132f818dSEnji Cooper# ARG begins or ends with a path separator character, it is preserved (but
3397*132f818dSEnji Cooper# converted to $host format) on output.
3398*132f818dSEnji Cooper#
3399*132f818dSEnji Cooper# All path conversion functions are named using the following convention:
3400*132f818dSEnji Cooper#   file name conversion function    : func_convert_file_X_to_Y ()
3401*132f818dSEnji Cooper#   path conversion function         : func_convert_path_X_to_Y ()
3402*132f818dSEnji Cooper# where, for any given $build/$host combination the 'X_to_Y' value is the
3403*132f818dSEnji Cooper# same.  If conversion functions are added for new $build/$host combinations,
3404*132f818dSEnji Cooper# the two new functions must follow this pattern, or func_init_to_host_path_cmd
3405*132f818dSEnji Cooper# will break.
3406*132f818dSEnji Cooper
3407*132f818dSEnji Cooper
3408*132f818dSEnji Cooper# func_init_to_host_path_cmd
3409*132f818dSEnji Cooper# Ensures that function "pointer" variable $to_host_path_cmd is set to the
3410*132f818dSEnji Cooper# appropriate value, based on the value of $to_host_file_cmd.
3411*132f818dSEnji Cooperto_host_path_cmd=
3412*132f818dSEnji Cooperfunc_init_to_host_path_cmd ()
3413*132f818dSEnji Cooper{
3414*132f818dSEnji Cooper  $debug_cmd
3415*132f818dSEnji Cooper
3416*132f818dSEnji Cooper  if test -z "$to_host_path_cmd"; then
3417*132f818dSEnji Cooper    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
3418*132f818dSEnji Cooper    to_host_path_cmd=func_convert_path_$func_stripname_result
3419*132f818dSEnji Cooper  fi
3420*132f818dSEnji Cooper}
3421*132f818dSEnji Cooper
3422*132f818dSEnji Cooper
3423*132f818dSEnji Cooper# func_to_host_path ARG
3424*132f818dSEnji Cooper# Converts the path ARG from $build format to $host format. Return result
3425*132f818dSEnji Cooper# in func_to_host_path_result.
3426*132f818dSEnji Cooperfunc_to_host_path ()
3427*132f818dSEnji Cooper{
3428*132f818dSEnji Cooper  $debug_cmd
3429*132f818dSEnji Cooper
3430*132f818dSEnji Cooper  func_init_to_host_path_cmd
3431*132f818dSEnji Cooper  $to_host_path_cmd "$1"
3432*132f818dSEnji Cooper}
3433*132f818dSEnji Cooper# end func_to_host_path
3434*132f818dSEnji Cooper
3435*132f818dSEnji Cooper
3436*132f818dSEnji Cooper# func_convert_path_noop ARG
3437*132f818dSEnji Cooper# Copy ARG to func_to_host_path_result.
3438*132f818dSEnji Cooperfunc_convert_path_noop ()
3439*132f818dSEnji Cooper{
3440*132f818dSEnji Cooper  func_to_host_path_result=$1
3441*132f818dSEnji Cooper}
3442*132f818dSEnji Cooper# end func_convert_path_noop
3443*132f818dSEnji Cooper
3444*132f818dSEnji Cooper
3445*132f818dSEnji Cooper# func_convert_path_msys_to_w32 ARG
3446*132f818dSEnji Cooper# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
3447*132f818dSEnji Cooper# conversion to w32 is not available inside the cwrapper.  Returns result in
3448*132f818dSEnji Cooper# func_to_host_path_result.
3449*132f818dSEnji Cooperfunc_convert_path_msys_to_w32 ()
3450*132f818dSEnji Cooper{
3451*132f818dSEnji Cooper  $debug_cmd
3452*132f818dSEnji Cooper
3453*132f818dSEnji Cooper  func_to_host_path_result=$1
3454*132f818dSEnji Cooper  if test -n "$1"; then
3455*132f818dSEnji Cooper    # Remove leading and trailing path separator characters from ARG.  MSYS
3456*132f818dSEnji Cooper    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
3457*132f818dSEnji Cooper    # and winepath ignores them completely.
3458*132f818dSEnji Cooper    func_stripname : : "$1"
3459*132f818dSEnji Cooper    func_to_host_path_tmp1=$func_stripname_result
3460*132f818dSEnji Cooper    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3461*132f818dSEnji Cooper    func_to_host_path_result=$func_convert_core_msys_to_w32_result
3462*132f818dSEnji Cooper    func_convert_path_check : ";" \
3463*132f818dSEnji Cooper      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3464*132f818dSEnji Cooper    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3465*132f818dSEnji Cooper  fi
3466*132f818dSEnji Cooper}
3467*132f818dSEnji Cooper# end func_convert_path_msys_to_w32
3468*132f818dSEnji Cooper
3469*132f818dSEnji Cooper
3470*132f818dSEnji Cooper# func_convert_path_cygwin_to_w32 ARG
3471*132f818dSEnji Cooper# Convert path ARG from Cygwin to w32 format.  Returns result in
3472*132f818dSEnji Cooper# func_to_host_file_result.
3473*132f818dSEnji Cooperfunc_convert_path_cygwin_to_w32 ()
3474*132f818dSEnji Cooper{
3475*132f818dSEnji Cooper  $debug_cmd
3476*132f818dSEnji Cooper
3477*132f818dSEnji Cooper  func_to_host_path_result=$1
3478*132f818dSEnji Cooper  if test -n "$1"; then
3479*132f818dSEnji Cooper    # See func_convert_path_msys_to_w32:
3480*132f818dSEnji Cooper    func_stripname : : "$1"
3481*132f818dSEnji Cooper    func_to_host_path_tmp1=$func_stripname_result
3482*132f818dSEnji Cooper    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
3483*132f818dSEnji Cooper    func_convert_path_check : ";" \
3484*132f818dSEnji Cooper      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3485*132f818dSEnji Cooper    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3486*132f818dSEnji Cooper  fi
3487*132f818dSEnji Cooper}
3488*132f818dSEnji Cooper# end func_convert_path_cygwin_to_w32
3489*132f818dSEnji Cooper
3490*132f818dSEnji Cooper
3491*132f818dSEnji Cooper# func_convert_path_nix_to_w32 ARG
3492*132f818dSEnji Cooper# Convert path ARG from *nix to w32 format.  Requires a wine environment and
3493*132f818dSEnji Cooper# a working winepath.  Returns result in func_to_host_file_result.
3494*132f818dSEnji Cooperfunc_convert_path_nix_to_w32 ()
3495*132f818dSEnji Cooper{
3496*132f818dSEnji Cooper  $debug_cmd
3497*132f818dSEnji Cooper
3498*132f818dSEnji Cooper  func_to_host_path_result=$1
3499*132f818dSEnji Cooper  if test -n "$1"; then
3500*132f818dSEnji Cooper    # See func_convert_path_msys_to_w32:
3501*132f818dSEnji Cooper    func_stripname : : "$1"
3502*132f818dSEnji Cooper    func_to_host_path_tmp1=$func_stripname_result
3503*132f818dSEnji Cooper    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3504*132f818dSEnji Cooper    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
3505*132f818dSEnji Cooper    func_convert_path_check : ";" \
3506*132f818dSEnji Cooper      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3507*132f818dSEnji Cooper    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3508*132f818dSEnji Cooper  fi
3509*132f818dSEnji Cooper}
3510*132f818dSEnji Cooper# end func_convert_path_nix_to_w32
3511*132f818dSEnji Cooper
3512*132f818dSEnji Cooper
3513*132f818dSEnji Cooper# func_convert_path_msys_to_cygwin ARG
3514*132f818dSEnji Cooper# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3515*132f818dSEnji Cooper# Returns result in func_to_host_file_result.
3516*132f818dSEnji Cooperfunc_convert_path_msys_to_cygwin ()
3517*132f818dSEnji Cooper{
3518*132f818dSEnji Cooper  $debug_cmd
3519*132f818dSEnji Cooper
3520*132f818dSEnji Cooper  func_to_host_path_result=$1
3521*132f818dSEnji Cooper  if test -n "$1"; then
3522*132f818dSEnji Cooper    # See func_convert_path_msys_to_w32:
3523*132f818dSEnji Cooper    func_stripname : : "$1"
3524*132f818dSEnji Cooper    func_to_host_path_tmp1=$func_stripname_result
3525*132f818dSEnji Cooper    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3526*132f818dSEnji Cooper    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
3527*132f818dSEnji Cooper    func_to_host_path_result=$func_cygpath_result
3528*132f818dSEnji Cooper    func_convert_path_check : : \
3529*132f818dSEnji Cooper      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3530*132f818dSEnji Cooper    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3531*132f818dSEnji Cooper  fi
3532*132f818dSEnji Cooper}
3533*132f818dSEnji Cooper# end func_convert_path_msys_to_cygwin
3534*132f818dSEnji Cooper
3535*132f818dSEnji Cooper
3536*132f818dSEnji Cooper# func_convert_path_nix_to_cygwin ARG
3537*132f818dSEnji Cooper# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
3538*132f818dSEnji Cooper# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
3539*132f818dSEnji Cooper# func_to_host_file_result.
3540*132f818dSEnji Cooperfunc_convert_path_nix_to_cygwin ()
3541*132f818dSEnji Cooper{
3542*132f818dSEnji Cooper  $debug_cmd
3543*132f818dSEnji Cooper
3544*132f818dSEnji Cooper  func_to_host_path_result=$1
3545*132f818dSEnji Cooper  if test -n "$1"; then
3546*132f818dSEnji Cooper    # Remove leading and trailing path separator characters from
3547*132f818dSEnji Cooper    # ARG. msys behavior is inconsistent here, cygpath turns them
3548*132f818dSEnji Cooper    # into '.;' and ';.', and winepath ignores them completely.
3549*132f818dSEnji Cooper    func_stripname : : "$1"
3550*132f818dSEnji Cooper    func_to_host_path_tmp1=$func_stripname_result
3551*132f818dSEnji Cooper    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3552*132f818dSEnji Cooper    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
3553*132f818dSEnji Cooper    func_to_host_path_result=$func_cygpath_result
3554*132f818dSEnji Cooper    func_convert_path_check : : \
3555*132f818dSEnji Cooper      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3556*132f818dSEnji Cooper    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3557*132f818dSEnji Cooper  fi
3558*132f818dSEnji Cooper}
3559*132f818dSEnji Cooper# end func_convert_path_nix_to_cygwin
3560*132f818dSEnji Cooper
3561*132f818dSEnji Cooper
3562*132f818dSEnji Cooper# func_dll_def_p FILE
3563*132f818dSEnji Cooper# True iff FILE is a Windows DLL '.def' file.
3564*132f818dSEnji Cooper# Keep in sync with _LT_DLL_DEF_P in libtool.m4
3565*132f818dSEnji Cooperfunc_dll_def_p ()
3566*132f818dSEnji Cooper{
3567*132f818dSEnji Cooper  $debug_cmd
3568*132f818dSEnji Cooper
3569*132f818dSEnji Cooper  func_dll_def_p_tmp=`$SED -n \
3570*132f818dSEnji Cooper    -e 's/^[	 ]*//' \
3571*132f818dSEnji Cooper    -e '/^\(;.*\)*$/d' \
3572*132f818dSEnji Cooper    -e 's/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p' \
3573*132f818dSEnji Cooper    -e q \
3574*132f818dSEnji Cooper    "$1"`
3575*132f818dSEnji Cooper  test DEF = "$func_dll_def_p_tmp"
3576*132f818dSEnji Cooper}
3577*132f818dSEnji Cooper
3578*132f818dSEnji Cooper
3579*132f818dSEnji Cooper# func_reorder_shared_lib_cache DIRS
3580*132f818dSEnji Cooper# Reorder the shared library cache by unconfiguring previous shared library cache
3581*132f818dSEnji Cooper# and configuring preferred search directories before previous search directories.
3582*132f818dSEnji Cooper# Previous shared library cache: /usr/lib /usr/local/lib
3583*132f818dSEnji Cooper# Preferred search directories: /tmp/testing
3584*132f818dSEnji Cooper# Reordered shared library cache: /tmp/testing /usr/lib /usr/local/lib
3585*132f818dSEnji Cooperfunc_reorder_shared_lib_cache ()
3586*132f818dSEnji Cooper{
3587*132f818dSEnji Cooper	$debug_cmd
3588*132f818dSEnji Cooper
3589*132f818dSEnji Cooper	case $host_os in
3590*132f818dSEnji Cooper	  openbsd*)
3591*132f818dSEnji Cooper	    get_search_directories=`PATH="$PATH:/sbin" ldconfig -r | $GREP "search directories" | $SED "s#.*search directories:\ ##g"`
3592*132f818dSEnji Cooper	    func_convert_delimited_path "$get_search_directories" ':' '\ '
3593*132f818dSEnji Cooper	    save_search_directories=$converted_path
3594*132f818dSEnji Cooper	    func_convert_delimited_path "$1" ':' '\ '
3595*132f818dSEnji Cooper
3596*132f818dSEnji Cooper	    # Ensure directories exist
3597*132f818dSEnji Cooper	    for dir in $converted_path; do
3598*132f818dSEnji Cooper	      # Ensure each directory is an absolute path
3599*132f818dSEnji Cooper	      case $dir in
3600*132f818dSEnji Cooper	        /*) ;;
3601*132f818dSEnji Cooper	        *) func_error "Directory '$dir' is not an absolute path"
3602*132f818dSEnji Cooper	           exit $EXIT_FAILURE ;;
3603*132f818dSEnji Cooper	      esac
3604*132f818dSEnji Cooper	      # Ensure no trailing slashes
3605*132f818dSEnji Cooper	      func_stripname '' '/' "$dir"
3606*132f818dSEnji Cooper	      dir=$func_stripname_result
3607*132f818dSEnji Cooper	      if test -d "$dir"; then
3608*132f818dSEnji Cooper	        if test -n "$preferred_search_directories"; then
3609*132f818dSEnji Cooper	          preferred_search_directories="$preferred_search_directories $dir"
3610*132f818dSEnji Cooper	        else
3611*132f818dSEnji Cooper	          preferred_search_directories=$dir
3612*132f818dSEnji Cooper	        fi
3613*132f818dSEnji Cooper	      else
3614*132f818dSEnji Cooper	        func_error "Directory '$dir' does not exist"
3615*132f818dSEnji Cooper	        exit $EXIT_FAILURE
3616*132f818dSEnji Cooper	      fi
3617*132f818dSEnji Cooper	    done
3618*132f818dSEnji Cooper
3619*132f818dSEnji Cooper	    PATH="$PATH:/sbin" ldconfig -U $save_search_directories
3620*132f818dSEnji Cooper	    PATH="$PATH:/sbin" ldconfig -m $preferred_search_directories $save_search_directories
3621*132f818dSEnji Cooper	    get_search_directories=`PATH="$PATH:/sbin" ldconfig -r | $GREP "search directories" | $SED "s#.*search directories:\ ##g"`
3622*132f818dSEnji Cooper	    func_convert_delimited_path "$get_search_directories" ':' '\ '
3623*132f818dSEnji Cooper	    reordered_search_directories=$converted_path
3624*132f818dSEnji Cooper
3625*132f818dSEnji Cooper	    $ECHO "Original: $save_search_directories"
3626*132f818dSEnji Cooper	    $ECHO "Reordered: $reordered_search_directories"
3627*132f818dSEnji Cooper	    exit $EXIT_SUCCESS
3628*132f818dSEnji Cooper	  ;;
3629*132f818dSEnji Cooper	  *)
3630*132f818dSEnji Cooper	    func_error "--reorder-cache is not supported for host_os=$host_os."
3631*132f818dSEnji Cooper	    exit $EXIT_FAILURE
3632*132f818dSEnji Cooper	  ;;
3633*132f818dSEnji Cooper	esac
3634*132f818dSEnji Cooper}
3635*132f818dSEnji Cooper# end func_reorder_shared_lib_cache
3636*132f818dSEnji Cooper
3637*132f818dSEnji Cooper
3638*132f818dSEnji Cooper# func_mode_compile arg...
3639*132f818dSEnji Cooperfunc_mode_compile ()
3640*132f818dSEnji Cooper{
3641*132f818dSEnji Cooper    $debug_cmd
3642*132f818dSEnji Cooper
3643*132f818dSEnji Cooper    # Get the compilation command and the source file.
3644*132f818dSEnji Cooper    base_compile=
3645*132f818dSEnji Cooper    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
3646*132f818dSEnji Cooper    suppress_opt=yes
3647*132f818dSEnji Cooper    suppress_output=
3648*132f818dSEnji Cooper    arg_mode=normal
3649*132f818dSEnji Cooper    libobj=
3650*132f818dSEnji Cooper    later=
3651*132f818dSEnji Cooper    pie_flag=
3652*132f818dSEnji Cooper
3653*132f818dSEnji Cooper    for arg
3654*132f818dSEnji Cooper    do
3655*132f818dSEnji Cooper      case $arg_mode in
3656*132f818dSEnji Cooper      arg  )
3657*132f818dSEnji Cooper	# do not "continue".  Instead, add this to base_compile
3658*132f818dSEnji Cooper	lastarg=$arg
3659*132f818dSEnji Cooper	arg_mode=normal
3660*132f818dSEnji Cooper	;;
3661*132f818dSEnji Cooper
3662*132f818dSEnji Cooper      target )
3663*132f818dSEnji Cooper	libobj=$arg
3664*132f818dSEnji Cooper	arg_mode=normal
3665*132f818dSEnji Cooper	continue
3666*132f818dSEnji Cooper	;;
3667*132f818dSEnji Cooper
3668*132f818dSEnji Cooper      normal )
3669*132f818dSEnji Cooper	# Accept any command-line options.
3670*132f818dSEnji Cooper	case $arg in
3671*132f818dSEnji Cooper	-o)
3672*132f818dSEnji Cooper	  test -n "$libobj" && \
3673*132f818dSEnji Cooper	    func_fatal_error "you cannot specify '-o' more than once"
3674*132f818dSEnji Cooper	  arg_mode=target
3675*132f818dSEnji Cooper	  continue
3676*132f818dSEnji Cooper	  ;;
3677*132f818dSEnji Cooper
3678*132f818dSEnji Cooper	-pie | -fpie | -fPIE)
3679*132f818dSEnji Cooper          func_append pie_flag " $arg"
3680*132f818dSEnji Cooper	  continue
3681*132f818dSEnji Cooper	  ;;
3682*132f818dSEnji Cooper
3683*132f818dSEnji Cooper	-shared | -static | -prefer-pic | -prefer-non-pic)
3684*132f818dSEnji Cooper	  func_append later " $arg"
3685*132f818dSEnji Cooper	  continue
3686*132f818dSEnji Cooper	  ;;
3687*132f818dSEnji Cooper
3688*132f818dSEnji Cooper	-no-suppress)
3689*132f818dSEnji Cooper	  suppress_opt=no
3690*132f818dSEnji Cooper	  continue
3691*132f818dSEnji Cooper	  ;;
3692*132f818dSEnji Cooper
3693*132f818dSEnji Cooper	-Xcompiler)
3694*132f818dSEnji Cooper	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
3695*132f818dSEnji Cooper	  continue      #  The current "srcfile" will either be retained or
3696*132f818dSEnji Cooper	  ;;            #  replaced later.  I would guess that would be a bug.
3697*132f818dSEnji Cooper
3698*132f818dSEnji Cooper	-Wc,*)
3699*132f818dSEnji Cooper	  func_stripname '-Wc,' '' "$arg"
3700*132f818dSEnji Cooper	  args=$func_stripname_result
3701*132f818dSEnji Cooper	  lastarg=
3702*132f818dSEnji Cooper	  save_ifs=$IFS; IFS=,
3703*132f818dSEnji Cooper	  for arg in $args; do
3704*132f818dSEnji Cooper	    IFS=$save_ifs
3705*132f818dSEnji Cooper	    func_append_quoted lastarg "$arg"
3706*132f818dSEnji Cooper	  done
3707*132f818dSEnji Cooper	  IFS=$save_ifs
3708*132f818dSEnji Cooper	  func_stripname ' ' '' "$lastarg"
3709*132f818dSEnji Cooper	  lastarg=$func_stripname_result
3710*132f818dSEnji Cooper
3711*132f818dSEnji Cooper	  # Add the arguments to base_compile.
3712*132f818dSEnji Cooper	  func_append base_compile " $lastarg"
3713*132f818dSEnji Cooper	  continue
3714*132f818dSEnji Cooper	  ;;
3715*132f818dSEnji Cooper
3716*132f818dSEnji Cooper	*)
3717*132f818dSEnji Cooper	  # Accept the current argument as the source file.
3718*132f818dSEnji Cooper	  # The previous "srcfile" becomes the current argument.
3719*132f818dSEnji Cooper	  #
3720*132f818dSEnji Cooper	  lastarg=$srcfile
3721*132f818dSEnji Cooper	  srcfile=$arg
3722*132f818dSEnji Cooper	  ;;
3723*132f818dSEnji Cooper	esac  #  case $arg
3724*132f818dSEnji Cooper	;;
3725*132f818dSEnji Cooper      esac    #  case $arg_mode
3726*132f818dSEnji Cooper
3727*132f818dSEnji Cooper      # Aesthetically quote the previous argument.
3728*132f818dSEnji Cooper      func_append_quoted base_compile "$lastarg"
3729*132f818dSEnji Cooper    done # for arg
3730*132f818dSEnji Cooper
3731*132f818dSEnji Cooper    case $arg_mode in
3732*132f818dSEnji Cooper    arg)
3733*132f818dSEnji Cooper      func_fatal_error "you must specify an argument for -Xcompile"
3734*132f818dSEnji Cooper      ;;
3735*132f818dSEnji Cooper    target)
3736*132f818dSEnji Cooper      func_fatal_error "you must specify a target with '-o'"
3737*132f818dSEnji Cooper      ;;
3738*132f818dSEnji Cooper    *)
3739*132f818dSEnji Cooper      # Get the name of the library object.
3740*132f818dSEnji Cooper      test -z "$libobj" && {
3741*132f818dSEnji Cooper	func_basename "$srcfile"
3742*132f818dSEnji Cooper	libobj=$func_basename_result
3743*132f818dSEnji Cooper      }
3744*132f818dSEnji Cooper      ;;
3745*132f818dSEnji Cooper    esac
3746*132f818dSEnji Cooper
3747*132f818dSEnji Cooper    # Recognize several different file suffixes.
3748*132f818dSEnji Cooper    # If the user specifies -o file.o, it is replaced with file.lo
3749*132f818dSEnji Cooper    case $libobj in
3750*132f818dSEnji Cooper    *.[cCFSifmso] | \
3751*132f818dSEnji Cooper    *.ada | *.adb | *.ads | *.asm | \
3752*132f818dSEnji Cooper    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
3753*132f818dSEnji Cooper    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
3754*132f818dSEnji Cooper      func_xform "$libobj"
3755*132f818dSEnji Cooper      libobj=$func_xform_result
3756*132f818dSEnji Cooper      ;;
3757*132f818dSEnji Cooper    esac
3758*132f818dSEnji Cooper
3759*132f818dSEnji Cooper    case $libobj in
3760*132f818dSEnji Cooper    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
3761*132f818dSEnji Cooper    *)
3762*132f818dSEnji Cooper      func_fatal_error "cannot determine name of library object from '$libobj'"
3763*132f818dSEnji Cooper      ;;
3764*132f818dSEnji Cooper    esac
3765*132f818dSEnji Cooper
3766*132f818dSEnji Cooper    func_infer_tag $base_compile
3767*132f818dSEnji Cooper
3768*132f818dSEnji Cooper    for arg in $later; do
3769*132f818dSEnji Cooper      case $arg in
3770*132f818dSEnji Cooper      -shared)
3771*132f818dSEnji Cooper	test yes = "$build_libtool_libs" \
3772*132f818dSEnji Cooper	  || func_fatal_configuration "cannot build a shared library"
3773*132f818dSEnji Cooper	build_old_libs=no
3774*132f818dSEnji Cooper	continue
3775*132f818dSEnji Cooper	;;
3776*132f818dSEnji Cooper
3777*132f818dSEnji Cooper      -static)
3778*132f818dSEnji Cooper	build_libtool_libs=no
3779*132f818dSEnji Cooper	build_old_libs=yes
3780*132f818dSEnji Cooper	continue
3781*132f818dSEnji Cooper	;;
3782*132f818dSEnji Cooper
3783*132f818dSEnji Cooper      -prefer-pic)
3784*132f818dSEnji Cooper	pic_mode=yes
3785*132f818dSEnji Cooper	continue
3786*132f818dSEnji Cooper	;;
3787*132f818dSEnji Cooper
3788*132f818dSEnji Cooper      -prefer-non-pic)
3789*132f818dSEnji Cooper	pic_mode=no
3790*132f818dSEnji Cooper	continue
3791*132f818dSEnji Cooper	;;
3792*132f818dSEnji Cooper      esac
3793*132f818dSEnji Cooper    done
3794*132f818dSEnji Cooper
3795*132f818dSEnji Cooper    func_quote_arg pretty "$libobj"
3796*132f818dSEnji Cooper    test "X$libobj" != "X$func_quote_arg_result" \
3797*132f818dSEnji Cooper      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
3798*132f818dSEnji Cooper      && func_warning "libobj name '$libobj' may not contain shell special characters."
3799*132f818dSEnji Cooper    func_dirname_and_basename "$obj" "/" ""
3800*132f818dSEnji Cooper    objname=$func_basename_result
3801*132f818dSEnji Cooper    xdir=$func_dirname_result
3802*132f818dSEnji Cooper    lobj=$xdir$objdir/$objname
3803*132f818dSEnji Cooper
3804*132f818dSEnji Cooper    test -z "$base_compile" && \
3805*132f818dSEnji Cooper      func_fatal_help "you must specify a compilation command"
3806*132f818dSEnji Cooper
3807*132f818dSEnji Cooper    # Delete any leftover library objects.
3808*132f818dSEnji Cooper    if test yes = "$build_old_libs"; then
3809*132f818dSEnji Cooper      removelist="$obj $lobj $libobj ${libobj}T"
3810*132f818dSEnji Cooper    else
3811*132f818dSEnji Cooper      removelist="$lobj $libobj ${libobj}T"
3812*132f818dSEnji Cooper    fi
3813*132f818dSEnji Cooper
3814*132f818dSEnji Cooper    # On Cygwin there's no "real" PIC flag so we must build both object types
3815*132f818dSEnji Cooper    case $host_os in
3816*132f818dSEnji Cooper    cygwin* | mingw* | windows* | pw32* | os2* | cegcc*)
3817*132f818dSEnji Cooper      pic_mode=default
3818*132f818dSEnji Cooper      ;;
3819*132f818dSEnji Cooper    esac
3820*132f818dSEnji Cooper    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
3821*132f818dSEnji Cooper      # non-PIC code in shared libraries is not supported
3822*132f818dSEnji Cooper      pic_mode=default
3823*132f818dSEnji Cooper    fi
3824*132f818dSEnji Cooper
3825*132f818dSEnji Cooper    # Calculate the filename of the output object if compiler does
3826*132f818dSEnji Cooper    # not support -o with -c
3827*132f818dSEnji Cooper    if test no = "$compiler_c_o"; then
3828*132f818dSEnji Cooper      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
3829*132f818dSEnji Cooper      lockfile=$output_obj.lock
3830*132f818dSEnji Cooper    else
3831*132f818dSEnji Cooper      output_obj=
3832*132f818dSEnji Cooper      need_locks=no
3833*132f818dSEnji Cooper      lockfile=
3834*132f818dSEnji Cooper    fi
3835*132f818dSEnji Cooper
3836*132f818dSEnji Cooper    # Lock this critical section if it is needed
3837*132f818dSEnji Cooper    # We use this script file to make the link, it avoids creating a new file
3838*132f818dSEnji Cooper    if test yes = "$need_locks"; then
3839*132f818dSEnji Cooper      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3840*132f818dSEnji Cooper	func_echo "Waiting for $lockfile to be removed"
3841*132f818dSEnji Cooper	sleep 2
3842*132f818dSEnji Cooper      done
3843*132f818dSEnji Cooper    elif test warn = "$need_locks"; then
3844*132f818dSEnji Cooper      if test -f "$lockfile"; then
3845*132f818dSEnji Cooper	$ECHO "\
3846*132f818dSEnji Cooper*** ERROR, $lockfile exists and contains:
3847*132f818dSEnji Cooper`cat $lockfile 2>/dev/null`
3848*132f818dSEnji Cooper
3849*132f818dSEnji CooperThis indicates that another process is trying to use the same
3850*132f818dSEnji Coopertemporary object file, and libtool could not work around it because
3851*132f818dSEnji Cooperyour compiler does not support '-c' and '-o' together.  If you
3852*132f818dSEnji Cooperrepeat this compilation, it may succeed, by chance, but you had better
3853*132f818dSEnji Cooperavoid parallel builds (make -j) in this platform, or get a better
3854*132f818dSEnji Coopercompiler."
3855*132f818dSEnji Cooper
3856*132f818dSEnji Cooper	$opt_dry_run || $RM $removelist
3857*132f818dSEnji Cooper	exit $EXIT_FAILURE
3858*132f818dSEnji Cooper      fi
3859*132f818dSEnji Cooper      func_append removelist " $output_obj"
3860*132f818dSEnji Cooper      $ECHO "$srcfile" > "$lockfile"
3861*132f818dSEnji Cooper    fi
3862*132f818dSEnji Cooper
3863*132f818dSEnji Cooper    $opt_dry_run || $RM $removelist
3864*132f818dSEnji Cooper    func_append removelist " $lockfile"
3865*132f818dSEnji Cooper    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
3866*132f818dSEnji Cooper
3867*132f818dSEnji Cooper    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
3868*132f818dSEnji Cooper    srcfile=$func_to_tool_file_result
3869*132f818dSEnji Cooper    func_quote_arg pretty "$srcfile"
3870*132f818dSEnji Cooper    qsrcfile=$func_quote_arg_result
3871*132f818dSEnji Cooper
3872*132f818dSEnji Cooper    # Only build a PIC object if we are building libtool libraries.
3873*132f818dSEnji Cooper    if test yes = "$build_libtool_libs"; then
3874*132f818dSEnji Cooper      # Without this assignment, base_compile gets emptied.
3875*132f818dSEnji Cooper      fbsd_hideous_sh_bug=$base_compile
3876*132f818dSEnji Cooper
3877*132f818dSEnji Cooper      if test no != "$pic_mode"; then
3878*132f818dSEnji Cooper	command="$base_compile $qsrcfile $pic_flag"
3879*132f818dSEnji Cooper      else
3880*132f818dSEnji Cooper	# Don't build PIC code
3881*132f818dSEnji Cooper	command="$base_compile $qsrcfile"
3882*132f818dSEnji Cooper      fi
3883*132f818dSEnji Cooper
3884*132f818dSEnji Cooper      func_mkdir_p "$xdir$objdir"
3885*132f818dSEnji Cooper
3886*132f818dSEnji Cooper      if test -z "$output_obj"; then
3887*132f818dSEnji Cooper	# Place PIC objects in $objdir
3888*132f818dSEnji Cooper	func_append command " -o $lobj"
3889*132f818dSEnji Cooper      fi
3890*132f818dSEnji Cooper
3891*132f818dSEnji Cooper      func_show_eval_locale "$command"	\
3892*132f818dSEnji Cooper          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
3893*132f818dSEnji Cooper
3894*132f818dSEnji Cooper      if test warn = "$need_locks" &&
3895*132f818dSEnji Cooper	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3896*132f818dSEnji Cooper	$ECHO "\
3897*132f818dSEnji Cooper*** ERROR, $lockfile contains:
3898*132f818dSEnji Cooper`cat $lockfile 2>/dev/null`
3899*132f818dSEnji Cooper
3900*132f818dSEnji Cooperbut it should contain:
3901*132f818dSEnji Cooper$srcfile
3902*132f818dSEnji Cooper
3903*132f818dSEnji CooperThis indicates that another process is trying to use the same
3904*132f818dSEnji Coopertemporary object file, and libtool could not work around it because
3905*132f818dSEnji Cooperyour compiler does not support '-c' and '-o' together.  If you
3906*132f818dSEnji Cooperrepeat this compilation, it may succeed, by chance, but you had better
3907*132f818dSEnji Cooperavoid parallel builds (make -j) in this platform, or get a better
3908*132f818dSEnji Coopercompiler."
3909*132f818dSEnji Cooper
3910*132f818dSEnji Cooper	$opt_dry_run || $RM $removelist
3911*132f818dSEnji Cooper	exit $EXIT_FAILURE
3912*132f818dSEnji Cooper      fi
3913*132f818dSEnji Cooper
3914*132f818dSEnji Cooper      # Just move the object if needed, then go on to compile the next one
3915*132f818dSEnji Cooper      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
3916*132f818dSEnji Cooper	func_show_eval '$MV "$output_obj" "$lobj"' \
3917*132f818dSEnji Cooper	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3918*132f818dSEnji Cooper      fi
3919*132f818dSEnji Cooper
3920*132f818dSEnji Cooper      # Allow error messages only from the first compilation.
3921*132f818dSEnji Cooper      if test yes = "$suppress_opt"; then
3922*132f818dSEnji Cooper	suppress_output=' >/dev/null 2>&1'
3923*132f818dSEnji Cooper      fi
3924*132f818dSEnji Cooper    fi
3925*132f818dSEnji Cooper
3926*132f818dSEnji Cooper    # Only build a position-dependent object if we build old libraries.
3927*132f818dSEnji Cooper    if test yes = "$build_old_libs"; then
3928*132f818dSEnji Cooper      if test yes != "$pic_mode"; then
3929*132f818dSEnji Cooper	# Don't build PIC code
3930*132f818dSEnji Cooper	command="$base_compile $qsrcfile$pie_flag"
3931*132f818dSEnji Cooper      else
3932*132f818dSEnji Cooper	command="$base_compile $qsrcfile $pic_flag"
3933*132f818dSEnji Cooper      fi
3934*132f818dSEnji Cooper      if test yes = "$compiler_c_o"; then
3935*132f818dSEnji Cooper	func_append command " -o $obj"
3936*132f818dSEnji Cooper      fi
3937*132f818dSEnji Cooper
3938*132f818dSEnji Cooper      # Suppress compiler output if we already did a PIC compilation.
3939*132f818dSEnji Cooper      func_append command "$suppress_output"
3940*132f818dSEnji Cooper      func_show_eval_locale "$command" \
3941*132f818dSEnji Cooper        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
3942*132f818dSEnji Cooper
3943*132f818dSEnji Cooper      if test warn = "$need_locks" &&
3944*132f818dSEnji Cooper	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3945*132f818dSEnji Cooper	$ECHO "\
3946*132f818dSEnji Cooper*** ERROR, $lockfile contains:
3947*132f818dSEnji Cooper`cat $lockfile 2>/dev/null`
3948*132f818dSEnji Cooper
3949*132f818dSEnji Cooperbut it should contain:
3950*132f818dSEnji Cooper$srcfile
3951*132f818dSEnji Cooper
3952*132f818dSEnji CooperThis indicates that another process is trying to use the same
3953*132f818dSEnji Coopertemporary object file, and libtool could not work around it because
3954*132f818dSEnji Cooperyour compiler does not support '-c' and '-o' together.  If you
3955*132f818dSEnji Cooperrepeat this compilation, it may succeed, by chance, but you had better
3956*132f818dSEnji Cooperavoid parallel builds (make -j) in this platform, or get a better
3957*132f818dSEnji Coopercompiler."
3958*132f818dSEnji Cooper
3959*132f818dSEnji Cooper	$opt_dry_run || $RM $removelist
3960*132f818dSEnji Cooper	exit $EXIT_FAILURE
3961*132f818dSEnji Cooper      fi
3962*132f818dSEnji Cooper
3963*132f818dSEnji Cooper      # Just move the object if needed
3964*132f818dSEnji Cooper      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
3965*132f818dSEnji Cooper	func_show_eval '$MV "$output_obj" "$obj"' \
3966*132f818dSEnji Cooper	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3967*132f818dSEnji Cooper      fi
3968*132f818dSEnji Cooper    fi
3969*132f818dSEnji Cooper
3970*132f818dSEnji Cooper    $opt_dry_run || {
3971*132f818dSEnji Cooper      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
3972*132f818dSEnji Cooper
3973*132f818dSEnji Cooper      # Unlock the critical section if it was locked
3974*132f818dSEnji Cooper      if test no != "$need_locks"; then
3975*132f818dSEnji Cooper	removelist=$lockfile
3976*132f818dSEnji Cooper        $RM "$lockfile"
3977*132f818dSEnji Cooper      fi
3978*132f818dSEnji Cooper    }
3979*132f818dSEnji Cooper
3980*132f818dSEnji Cooper    exit $EXIT_SUCCESS
3981*132f818dSEnji Cooper}
3982*132f818dSEnji Cooper
3983*132f818dSEnji Cooper$opt_help || {
3984*132f818dSEnji Cooper  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
3985*132f818dSEnji Cooper}
3986*132f818dSEnji Cooper
3987*132f818dSEnji Cooperfunc_mode_help ()
3988*132f818dSEnji Cooper{
3989*132f818dSEnji Cooper    # We need to display help for each of the modes.
3990*132f818dSEnji Cooper    case $opt_mode in
3991*132f818dSEnji Cooper      "")
3992*132f818dSEnji Cooper        # Generic help is extracted from the usage comments
3993*132f818dSEnji Cooper        # at the start of this file.
3994*132f818dSEnji Cooper        func_help
3995*132f818dSEnji Cooper        ;;
3996*132f818dSEnji Cooper
3997*132f818dSEnji Cooper      clean)
3998*132f818dSEnji Cooper        $ECHO \
3999*132f818dSEnji Cooper"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
4000*132f818dSEnji Cooper
4001*132f818dSEnji CooperRemove files from the build directory.
4002*132f818dSEnji Cooper
4003*132f818dSEnji CooperRM is the name of the program to use to delete files associated with each FILE
4004*132f818dSEnji Cooper(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
4005*132f818dSEnji Cooperto RM.
4006*132f818dSEnji Cooper
4007*132f818dSEnji CooperIf FILE is a libtool library, object or program, all the files associated
4008*132f818dSEnji Cooperwith it are deleted. Otherwise, only FILE itself is deleted using RM."
4009*132f818dSEnji Cooper        ;;
4010*132f818dSEnji Cooper
4011*132f818dSEnji Cooper      compile)
4012*132f818dSEnji Cooper      $ECHO \
4013*132f818dSEnji Cooper"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
4014*132f818dSEnji Cooper
4015*132f818dSEnji CooperCompile a source file into a libtool library object.
4016*132f818dSEnji Cooper
4017*132f818dSEnji CooperThis mode accepts the following additional options:
4018*132f818dSEnji Cooper
4019*132f818dSEnji Cooper  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
4020*132f818dSEnji Cooper  -no-suppress      do not suppress compiler output for multiple passes
4021*132f818dSEnji Cooper  -prefer-pic       try to build PIC objects only
4022*132f818dSEnji Cooper  -prefer-non-pic   try to build non-PIC objects only
4023*132f818dSEnji Cooper  -shared           do not build a '.o' file suitable for static linking
4024*132f818dSEnji Cooper  -static           only build a '.o' file suitable for static linking
4025*132f818dSEnji Cooper  -Wc,FLAG
4026*132f818dSEnji Cooper  -Xcompiler FLAG   pass FLAG directly to the compiler
4027*132f818dSEnji Cooper
4028*132f818dSEnji CooperCOMPILE-COMMAND is a command to be used in creating a 'standard' object file
4029*132f818dSEnji Cooperfrom the given SOURCEFILE.
4030*132f818dSEnji Cooper
4031*132f818dSEnji CooperThe output file name is determined by removing the directory component from
4032*132f818dSEnji CooperSOURCEFILE, then substituting the C source code suffix '.c' with the
4033*132f818dSEnji Cooperlibrary object suffix, '.lo'."
4034*132f818dSEnji Cooper        ;;
4035*132f818dSEnji Cooper
4036*132f818dSEnji Cooper      execute)
4037*132f818dSEnji Cooper        $ECHO \
4038*132f818dSEnji Cooper"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
4039*132f818dSEnji Cooper
4040*132f818dSEnji CooperAutomatically set library path, then run a program.
4041*132f818dSEnji Cooper
4042*132f818dSEnji CooperThis mode accepts the following additional options:
4043*132f818dSEnji Cooper
4044*132f818dSEnji Cooper  -dlopen FILE      add the directory containing FILE to the library path
4045*132f818dSEnji Cooper
4046*132f818dSEnji CooperThis mode sets the library path environment variable according to '-dlopen'
4047*132f818dSEnji Cooperflags.
4048*132f818dSEnji Cooper
4049*132f818dSEnji CooperIf any of the ARGS are libtool executable wrappers, then they are translated
4050*132f818dSEnji Cooperinto their corresponding uninstalled binary, and any of their required library
4051*132f818dSEnji Cooperdirectories are added to the library path.
4052*132f818dSEnji Cooper
4053*132f818dSEnji CooperThen, COMMAND is executed, with ARGS as arguments."
4054*132f818dSEnji Cooper        ;;
4055*132f818dSEnji Cooper
4056*132f818dSEnji Cooper      finish)
4057*132f818dSEnji Cooper        $ECHO \
4058*132f818dSEnji Cooper"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
4059*132f818dSEnji Cooper
4060*132f818dSEnji CooperComplete the installation of libtool libraries.
4061*132f818dSEnji Cooper
4062*132f818dSEnji CooperEach LIBDIR is a directory that contains libtool libraries.
4063*132f818dSEnji Cooper
4064*132f818dSEnji CooperThe commands that this mode executes may require superuser privileges.  Use
4065*132f818dSEnji Cooperthe '--dry-run' option if you just want to see what would be executed."
4066*132f818dSEnji Cooper        ;;
4067*132f818dSEnji Cooper
4068*132f818dSEnji Cooper      install)
4069*132f818dSEnji Cooper        $ECHO \
4070*132f818dSEnji Cooper"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
4071*132f818dSEnji Cooper
4072*132f818dSEnji CooperInstall executables or libraries.
4073*132f818dSEnji Cooper
4074*132f818dSEnji CooperINSTALL-COMMAND is the installation command.  The first component should be
4075*132f818dSEnji Coopereither the 'install' or 'cp' program.
4076*132f818dSEnji Cooper
4077*132f818dSEnji CooperThe following components of INSTALL-COMMAND are treated specially:
4078*132f818dSEnji Cooper
4079*132f818dSEnji Cooper  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
4080*132f818dSEnji Cooper
4081*132f818dSEnji CooperThe rest of the components are interpreted as arguments to that command (only
4082*132f818dSEnji CooperBSD-compatible install options are recognized)."
4083*132f818dSEnji Cooper        ;;
4084*132f818dSEnji Cooper
4085*132f818dSEnji Cooper      link)
4086*132f818dSEnji Cooper        $ECHO \
4087*132f818dSEnji Cooper"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
4088*132f818dSEnji Cooper
4089*132f818dSEnji CooperLink object files or libraries together to form another library, or to
4090*132f818dSEnji Coopercreate an executable program.
4091*132f818dSEnji Cooper
4092*132f818dSEnji CooperLINK-COMMAND is a command using the C compiler that you would use to create
4093*132f818dSEnji Coopera program from several object files.
4094*132f818dSEnji Cooper
4095*132f818dSEnji CooperThe following components of LINK-COMMAND are treated specially:
4096*132f818dSEnji Cooper
4097*132f818dSEnji Cooper  -all-static       do not do any dynamic linking at all
4098*132f818dSEnji Cooper  -avoid-version    do not add a version suffix if possible
4099*132f818dSEnji Cooper  -bindir BINDIR    specify path to binaries directory (for systems where
4100*132f818dSEnji Cooper                    libraries must be found in the PATH setting at runtime)
4101*132f818dSEnji Cooper  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
4102*132f818dSEnji Cooper  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
4103*132f818dSEnji Cooper  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
4104*132f818dSEnji Cooper  -export-symbols SYMFILE
4105*132f818dSEnji Cooper                    try to export only the symbols listed in SYMFILE
4106*132f818dSEnji Cooper  -export-symbols-regex REGEX
4107*132f818dSEnji Cooper                    try to export only the symbols matching REGEX
4108*132f818dSEnji Cooper  -LLIBDIR          search LIBDIR for required installed libraries
4109*132f818dSEnji Cooper  -lNAME            OUTPUT-FILE requires the installed library libNAME
4110*132f818dSEnji Cooper  -module           build a library that can dlopened
4111*132f818dSEnji Cooper  -no-fast-install  disable the fast-install mode
4112*132f818dSEnji Cooper  -no-install       link a not-installable executable
4113*132f818dSEnji Cooper  -no-undefined     declare that a library does not refer to external symbols
4114*132f818dSEnji Cooper  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
4115*132f818dSEnji Cooper  -objectlist FILE  use a list of object files found in FILE to specify objects
4116*132f818dSEnji Cooper  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
4117*132f818dSEnji Cooper  -precious-files-regex REGEX
4118*132f818dSEnji Cooper                    don't remove output files matching REGEX
4119*132f818dSEnji Cooper  -release RELEASE  specify package release information
4120*132f818dSEnji Cooper  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
4121*132f818dSEnji Cooper  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
4122*132f818dSEnji Cooper  -shared           only do dynamic linking of libtool libraries
4123*132f818dSEnji Cooper  -shrext SUFFIX    override the standard shared library file extension
4124*132f818dSEnji Cooper  -static           do not do any dynamic linking of uninstalled libtool libraries
4125*132f818dSEnji Cooper  -static-libtool-libs
4126*132f818dSEnji Cooper                    do not do any dynamic linking of libtool libraries
4127*132f818dSEnji Cooper  -version-info CURRENT[:REVISION[:AGE]]
4128*132f818dSEnji Cooper                    specify library version info [each variable defaults to 0]
4129*132f818dSEnji Cooper  -weak LIBNAME     declare that the target provides the LIBNAME interface
4130*132f818dSEnji Cooper  -Wc,FLAG
4131*132f818dSEnji Cooper  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
4132*132f818dSEnji Cooper  -Wa,FLAG
4133*132f818dSEnji Cooper  -Xassembler FLAG  pass linker-specific FLAG directly to the assembler
4134*132f818dSEnji Cooper  -Wl,FLAG
4135*132f818dSEnji Cooper  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
4136*132f818dSEnji Cooper  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
4137*132f818dSEnji Cooper
4138*132f818dSEnji CooperAll other options (arguments beginning with '-') are ignored.
4139*132f818dSEnji Cooper
4140*132f818dSEnji CooperEvery other argument is treated as a filename.  Files ending in '.la' are
4141*132f818dSEnji Coopertreated as uninstalled libtool libraries, other files are standard or library
4142*132f818dSEnji Cooperobject files.
4143*132f818dSEnji Cooper
4144*132f818dSEnji CooperIf the OUTPUT-FILE ends in '.la', then a libtool library is created,
4145*132f818dSEnji Cooperonly library objects ('.lo' files) may be specified, and '-rpath' is
4146*132f818dSEnji Cooperrequired, except when creating a convenience library.
4147*132f818dSEnji Cooper
4148*132f818dSEnji CooperIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
4149*132f818dSEnji Cooperusing 'ar' and 'ranlib', or on Windows using 'lib'.
4150*132f818dSEnji Cooper
4151*132f818dSEnji CooperIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
4152*132f818dSEnji Cooperis created, otherwise an executable program is created."
4153*132f818dSEnji Cooper        ;;
4154*132f818dSEnji Cooper
4155*132f818dSEnji Cooper      uninstall)
4156*132f818dSEnji Cooper        $ECHO \
4157*132f818dSEnji Cooper"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
4158*132f818dSEnji Cooper
4159*132f818dSEnji CooperRemove libraries from an installation directory.
4160*132f818dSEnji Cooper
4161*132f818dSEnji CooperRM is the name of the program to use to delete files associated with each FILE
4162*132f818dSEnji Cooper(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
4163*132f818dSEnji Cooperto RM.
4164*132f818dSEnji Cooper
4165*132f818dSEnji CooperIf FILE is a libtool library, all the files associated with it are deleted.
4166*132f818dSEnji CooperOtherwise, only FILE itself is deleted using RM."
4167*132f818dSEnji Cooper        ;;
4168*132f818dSEnji Cooper
4169*132f818dSEnji Cooper      *)
4170*132f818dSEnji Cooper        func_fatal_help "invalid operation mode '$opt_mode'"
4171*132f818dSEnji Cooper        ;;
4172*132f818dSEnji Cooper    esac
4173*132f818dSEnji Cooper
4174*132f818dSEnji Cooper    echo
4175*132f818dSEnji Cooper    $ECHO "Try '$progname --help' for more information about other modes."
4176*132f818dSEnji Cooper}
4177*132f818dSEnji Cooper
4178*132f818dSEnji Cooper# Now that we've collected a possible --mode arg, show help if necessary
4179*132f818dSEnji Cooperif $opt_help; then
4180*132f818dSEnji Cooper  if test : = "$opt_help"; then
4181*132f818dSEnji Cooper    func_mode_help
4182*132f818dSEnji Cooper  else
4183*132f818dSEnji Cooper    {
4184*132f818dSEnji Cooper      func_help noexit
4185*132f818dSEnji Cooper      for opt_mode in compile link execute install finish uninstall clean; do
4186*132f818dSEnji Cooper	func_mode_help
4187*132f818dSEnji Cooper      done
4188*132f818dSEnji Cooper    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
4189*132f818dSEnji Cooper    {
4190*132f818dSEnji Cooper      func_help noexit
4191*132f818dSEnji Cooper      for opt_mode in compile link execute install finish uninstall clean; do
4192*132f818dSEnji Cooper	echo
4193*132f818dSEnji Cooper	func_mode_help
4194*132f818dSEnji Cooper      done
4195*132f818dSEnji Cooper    } |
4196*132f818dSEnji Cooper    $SED '1d
4197*132f818dSEnji Cooper      /^When reporting/,/^Report/{
4198*132f818dSEnji Cooper	H
4199*132f818dSEnji Cooper	d
4200*132f818dSEnji Cooper      }
4201*132f818dSEnji Cooper      $x
4202*132f818dSEnji Cooper      /information about other modes/d
4203*132f818dSEnji Cooper      /more detailed .*MODE/d
4204*132f818dSEnji Cooper      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
4205*132f818dSEnji Cooper  fi
4206*132f818dSEnji Cooper  exit $?
4207*132f818dSEnji Cooperfi
4208*132f818dSEnji Cooper
4209*132f818dSEnji Cooper
4210*132f818dSEnji Cooper# If option '--reorder-cache', reorder the shared library cache and exit.
4211*132f818dSEnji Cooperif $opt_reorder_cache; then
4212*132f818dSEnji Cooper    func_reorder_shared_lib_cache $shared_lib_dirs
4213*132f818dSEnji Cooperfi
4214*132f818dSEnji Cooper
4215*132f818dSEnji Cooper
4216*132f818dSEnji Cooper# func_mode_execute arg...
4217*132f818dSEnji Cooperfunc_mode_execute ()
4218*132f818dSEnji Cooper{
4219*132f818dSEnji Cooper    $debug_cmd
4220*132f818dSEnji Cooper
4221*132f818dSEnji Cooper    # The first argument is the command name.
4222*132f818dSEnji Cooper    cmd=$nonopt
4223*132f818dSEnji Cooper    test -z "$cmd" && \
4224*132f818dSEnji Cooper      func_fatal_help "you must specify a COMMAND"
4225*132f818dSEnji Cooper
4226*132f818dSEnji Cooper    # Handle -dlopen flags immediately.
4227*132f818dSEnji Cooper    for file in $opt_dlopen; do
4228*132f818dSEnji Cooper      test -f "$file" \
4229*132f818dSEnji Cooper	|| func_fatal_help "'$file' is not a file"
4230*132f818dSEnji Cooper
4231*132f818dSEnji Cooper      dir=
4232*132f818dSEnji Cooper      case $file in
4233*132f818dSEnji Cooper      *.la)
4234*132f818dSEnji Cooper	func_resolve_sysroot "$file"
4235*132f818dSEnji Cooper	file=$func_resolve_sysroot_result
4236*132f818dSEnji Cooper
4237*132f818dSEnji Cooper	# Check to see that this really is a libtool archive.
4238*132f818dSEnji Cooper	func_lalib_unsafe_p "$file" \
4239*132f818dSEnji Cooper	  || func_fatal_help "'$lib' is not a valid libtool archive"
4240*132f818dSEnji Cooper
4241*132f818dSEnji Cooper	# Read the libtool library.
4242*132f818dSEnji Cooper	dlname=
4243*132f818dSEnji Cooper	library_names=
4244*132f818dSEnji Cooper	func_source "$file"
4245*132f818dSEnji Cooper
4246*132f818dSEnji Cooper	# Skip this library if it cannot be dlopened.
4247*132f818dSEnji Cooper	if test -z "$dlname"; then
4248*132f818dSEnji Cooper	  # Warn if it was a shared library.
4249*132f818dSEnji Cooper	  test -n "$library_names" && \
4250*132f818dSEnji Cooper	    func_warning "'$file' was not linked with '-export-dynamic'"
4251*132f818dSEnji Cooper	  continue
4252*132f818dSEnji Cooper	fi
4253*132f818dSEnji Cooper
4254*132f818dSEnji Cooper	func_dirname "$file" "" "."
4255*132f818dSEnji Cooper	dir=$func_dirname_result
4256*132f818dSEnji Cooper
4257*132f818dSEnji Cooper	if test -f "$dir/$objdir/$dlname"; then
4258*132f818dSEnji Cooper	  func_append dir "/$objdir"
4259*132f818dSEnji Cooper	else
4260*132f818dSEnji Cooper	  if test ! -f "$dir/$dlname"; then
4261*132f818dSEnji Cooper	    func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
4262*132f818dSEnji Cooper	  fi
4263*132f818dSEnji Cooper	fi
4264*132f818dSEnji Cooper	;;
4265*132f818dSEnji Cooper
4266*132f818dSEnji Cooper      *.lo)
4267*132f818dSEnji Cooper	# Just add the directory containing the .lo file.
4268*132f818dSEnji Cooper	func_dirname "$file" "" "."
4269*132f818dSEnji Cooper	dir=$func_dirname_result
4270*132f818dSEnji Cooper	;;
4271*132f818dSEnji Cooper
4272*132f818dSEnji Cooper      *)
4273*132f818dSEnji Cooper	func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
4274*132f818dSEnji Cooper	continue
4275*132f818dSEnji Cooper	;;
4276*132f818dSEnji Cooper      esac
4277*132f818dSEnji Cooper
4278*132f818dSEnji Cooper      # Get the absolute pathname.
4279*132f818dSEnji Cooper      absdir=`cd "$dir" && pwd`
4280*132f818dSEnji Cooper      test -n "$absdir" && dir=$absdir
4281*132f818dSEnji Cooper
4282*132f818dSEnji Cooper      # Now add the directory to shlibpath_var.
4283*132f818dSEnji Cooper      if eval "test -z \"\$$shlibpath_var\""; then
4284*132f818dSEnji Cooper	eval "$shlibpath_var=\"\$dir\""
4285*132f818dSEnji Cooper      else
4286*132f818dSEnji Cooper	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
4287*132f818dSEnji Cooper      fi
4288*132f818dSEnji Cooper    done
4289*132f818dSEnji Cooper
4290*132f818dSEnji Cooper    # This variable tells wrapper scripts just to set shlibpath_var
4291*132f818dSEnji Cooper    # rather than running their programs.
4292*132f818dSEnji Cooper    libtool_execute_magic=$magic
4293*132f818dSEnji Cooper
4294*132f818dSEnji Cooper    # Check if any of the arguments is a wrapper script.
4295*132f818dSEnji Cooper    args=
4296*132f818dSEnji Cooper    for file
4297*132f818dSEnji Cooper    do
4298*132f818dSEnji Cooper      case $file in
4299*132f818dSEnji Cooper      -* | *.la | *.lo ) ;;
4300*132f818dSEnji Cooper      *)
4301*132f818dSEnji Cooper	# Do a test to see if this is really a libtool program.
4302*132f818dSEnji Cooper	if func_ltwrapper_script_p "$file"; then
4303*132f818dSEnji Cooper	  func_source "$file"
4304*132f818dSEnji Cooper	  # Transform arg to wrapped name.
4305*132f818dSEnji Cooper	  file=$progdir/$program
4306*132f818dSEnji Cooper	elif func_ltwrapper_executable_p "$file"; then
4307*132f818dSEnji Cooper	  func_ltwrapper_scriptname "$file"
4308*132f818dSEnji Cooper	  func_source "$func_ltwrapper_scriptname_result"
4309*132f818dSEnji Cooper	  # Transform arg to wrapped name.
4310*132f818dSEnji Cooper	  file=$progdir/$program
4311*132f818dSEnji Cooper	fi
4312*132f818dSEnji Cooper	;;
4313*132f818dSEnji Cooper      esac
4314*132f818dSEnji Cooper      # Quote arguments (to preserve shell metacharacters).
4315*132f818dSEnji Cooper      func_append_quoted args "$file"
4316*132f818dSEnji Cooper    done
4317*132f818dSEnji Cooper
4318*132f818dSEnji Cooper    if $opt_dry_run; then
4319*132f818dSEnji Cooper      # Display what would be done.
4320*132f818dSEnji Cooper      if test -n "$shlibpath_var"; then
4321*132f818dSEnji Cooper	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
4322*132f818dSEnji Cooper	echo "export $shlibpath_var"
4323*132f818dSEnji Cooper      fi
4324*132f818dSEnji Cooper      $ECHO "$cmd$args"
4325*132f818dSEnji Cooper      exit $EXIT_SUCCESS
4326*132f818dSEnji Cooper    else
4327*132f818dSEnji Cooper      if test -n "$shlibpath_var"; then
4328*132f818dSEnji Cooper	# Export the shlibpath_var.
4329*132f818dSEnji Cooper	eval "export $shlibpath_var"
4330*132f818dSEnji Cooper      fi
4331*132f818dSEnji Cooper
4332*132f818dSEnji Cooper      # Restore saved environment variables
4333*132f818dSEnji Cooper      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
4334*132f818dSEnji Cooper      do
4335*132f818dSEnji Cooper	eval "if test \"\${save_$lt_var+set}\" = set; then
4336*132f818dSEnji Cooper                $lt_var=\$save_$lt_var; export $lt_var
4337*132f818dSEnji Cooper	      else
4338*132f818dSEnji Cooper		$lt_unset $lt_var
4339*132f818dSEnji Cooper	      fi"
4340*132f818dSEnji Cooper      done
4341*132f818dSEnji Cooper
4342*132f818dSEnji Cooper      # Now prepare to actually exec the command.
4343*132f818dSEnji Cooper      exec_cmd=\$cmd$args
4344*132f818dSEnji Cooper    fi
4345*132f818dSEnji Cooper}
4346*132f818dSEnji Cooper
4347*132f818dSEnji Coopertest execute = "$opt_mode" && func_mode_execute ${1+"$@"}
4348*132f818dSEnji Cooper
4349*132f818dSEnji Cooper
4350*132f818dSEnji Cooper# func_mode_finish arg...
4351*132f818dSEnji Cooperfunc_mode_finish ()
4352*132f818dSEnji Cooper{
4353*132f818dSEnji Cooper    $debug_cmd
4354*132f818dSEnji Cooper
4355*132f818dSEnji Cooper    libs=
4356*132f818dSEnji Cooper    libdirs=
4357*132f818dSEnji Cooper    admincmds=
4358*132f818dSEnji Cooper
4359*132f818dSEnji Cooper    for opt in "$nonopt" ${1+"$@"}
4360*132f818dSEnji Cooper    do
4361*132f818dSEnji Cooper      if test -d "$opt"; then
4362*132f818dSEnji Cooper	func_append libdirs " $opt"
4363*132f818dSEnji Cooper
4364*132f818dSEnji Cooper      elif test -f "$opt"; then
4365*132f818dSEnji Cooper	if func_lalib_unsafe_p "$opt"; then
4366*132f818dSEnji Cooper	  func_append libs " $opt"
4367*132f818dSEnji Cooper	else
4368*132f818dSEnji Cooper	  func_warning "'$opt' is not a valid libtool archive"
4369*132f818dSEnji Cooper	fi
4370*132f818dSEnji Cooper
4371*132f818dSEnji Cooper      else
4372*132f818dSEnji Cooper	func_fatal_error "invalid argument '$opt'"
4373*132f818dSEnji Cooper      fi
4374*132f818dSEnji Cooper    done
4375*132f818dSEnji Cooper
4376*132f818dSEnji Cooper    if test -n "$libs"; then
4377*132f818dSEnji Cooper      if test -n "$lt_sysroot"; then
4378*132f818dSEnji Cooper        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
4379*132f818dSEnji Cooper        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
4380*132f818dSEnji Cooper      else
4381*132f818dSEnji Cooper        sysroot_cmd=
4382*132f818dSEnji Cooper      fi
4383*132f818dSEnji Cooper
4384*132f818dSEnji Cooper      # Remove sysroot references
4385*132f818dSEnji Cooper      if $opt_dry_run; then
4386*132f818dSEnji Cooper        for lib in $libs; do
4387*132f818dSEnji Cooper          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
4388*132f818dSEnji Cooper        done
4389*132f818dSEnji Cooper      else
4390*132f818dSEnji Cooper        tmpdir=`func_mktempdir`
4391*132f818dSEnji Cooper        for lib in $libs; do
4392*132f818dSEnji Cooper	  $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
4393*132f818dSEnji Cooper	    > $tmpdir/tmp-la
4394*132f818dSEnji Cooper	  mv -f $tmpdir/tmp-la $lib
4395*132f818dSEnji Cooper	done
4396*132f818dSEnji Cooper        ${RM}r "$tmpdir"
4397*132f818dSEnji Cooper      fi
4398*132f818dSEnji Cooper    fi
4399*132f818dSEnji Cooper
4400*132f818dSEnji Cooper    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs" && $opt_finishing; then
4401*132f818dSEnji Cooper      for libdir in $libdirs; do
4402*132f818dSEnji Cooper	if test -n "$finish_cmds"; then
4403*132f818dSEnji Cooper	  # Do each command in the finish commands.
4404*132f818dSEnji Cooper	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
4405*132f818dSEnji Cooper'"$cmd"'"'
4406*132f818dSEnji Cooper	fi
4407*132f818dSEnji Cooper	if test -n "$finish_eval"; then
4408*132f818dSEnji Cooper	  # Do the single finish_eval.
4409*132f818dSEnji Cooper	  eval cmds=\"$finish_eval\"
4410*132f818dSEnji Cooper	  $opt_dry_run || eval "$cmds" || func_append admincmds "
4411*132f818dSEnji Cooper       $cmds"
4412*132f818dSEnji Cooper	fi
4413*132f818dSEnji Cooper      done
4414*132f818dSEnji Cooper    fi
4415*132f818dSEnji Cooper
4416*132f818dSEnji Cooper    # Exit here if they wanted silent mode.
4417*132f818dSEnji Cooper    $opt_quiet && exit $EXIT_SUCCESS
4418*132f818dSEnji Cooper
4419*132f818dSEnji Cooper    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4420*132f818dSEnji Cooper      echo "----------------------------------------------------------------------"
4421*132f818dSEnji Cooper      echo "Libraries have been installed in:"
4422*132f818dSEnji Cooper      for libdir in $libdirs; do
4423*132f818dSEnji Cooper	$ECHO "   $libdir"
4424*132f818dSEnji Cooper      done
4425*132f818dSEnji Cooper      if test "false" = "$opt_finishing"; then
4426*132f818dSEnji Cooper        echo
4427*132f818dSEnji Cooper        echo "NOTE: finish_cmds were not executed during testing, so you must"
4428*132f818dSEnji Cooper        echo "manually run ldconfig to add a given test directory, LIBDIR, to"
4429*132f818dSEnji Cooper        echo "the search path for generated executables."
4430*132f818dSEnji Cooper      fi
4431*132f818dSEnji Cooper      echo
4432*132f818dSEnji Cooper      echo "If you ever happen to want to link against installed libraries"
4433*132f818dSEnji Cooper      echo "in a given directory, LIBDIR, you must either use libtool, and"
4434*132f818dSEnji Cooper      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
4435*132f818dSEnji Cooper      echo "flag during linking and do at least one of the following:"
4436*132f818dSEnji Cooper      if test -n "$shlibpath_var"; then
4437*132f818dSEnji Cooper	echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
4438*132f818dSEnji Cooper	echo "     during execution"
4439*132f818dSEnji Cooper      fi
4440*132f818dSEnji Cooper      if test -n "$runpath_var"; then
4441*132f818dSEnji Cooper	echo "   - add LIBDIR to the '$runpath_var' environment variable"
4442*132f818dSEnji Cooper	echo "     during linking"
4443*132f818dSEnji Cooper      fi
4444*132f818dSEnji Cooper      if test -n "$hardcode_libdir_flag_spec"; then
4445*132f818dSEnji Cooper	libdir=LIBDIR
4446*132f818dSEnji Cooper	eval flag=\"$hardcode_libdir_flag_spec\"
4447*132f818dSEnji Cooper
4448*132f818dSEnji Cooper	$ECHO "   - use the '$flag' linker flag"
4449*132f818dSEnji Cooper      fi
4450*132f818dSEnji Cooper      if test -n "$admincmds"; then
4451*132f818dSEnji Cooper	$ECHO "   - have your system administrator run these commands:$admincmds"
4452*132f818dSEnji Cooper      fi
4453*132f818dSEnji Cooper      if test -f /etc/ld.so.conf; then
4454*132f818dSEnji Cooper	echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
4455*132f818dSEnji Cooper      fi
4456*132f818dSEnji Cooper      echo
4457*132f818dSEnji Cooper
4458*132f818dSEnji Cooper      echo "See any operating system documentation about shared libraries for"
4459*132f818dSEnji Cooper      case $host in
4460*132f818dSEnji Cooper	solaris2.[6789]|solaris2.1[0-9])
4461*132f818dSEnji Cooper	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
4462*132f818dSEnji Cooper	  echo "pages."
4463*132f818dSEnji Cooper	  ;;
4464*132f818dSEnji Cooper	*)
4465*132f818dSEnji Cooper	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
4466*132f818dSEnji Cooper	  ;;
4467*132f818dSEnji Cooper      esac
4468*132f818dSEnji Cooper      echo "----------------------------------------------------------------------"
4469*132f818dSEnji Cooper    fi
4470*132f818dSEnji Cooper    exit $EXIT_SUCCESS
4471*132f818dSEnji Cooper}
4472*132f818dSEnji Cooper
4473*132f818dSEnji Coopertest finish = "$opt_mode" && func_mode_finish ${1+"$@"}
4474*132f818dSEnji Cooper
4475*132f818dSEnji Cooper
4476*132f818dSEnji Cooper# func_mode_install arg...
4477*132f818dSEnji Cooperfunc_mode_install ()
4478*132f818dSEnji Cooper{
4479*132f818dSEnji Cooper    $debug_cmd
4480*132f818dSEnji Cooper
4481*132f818dSEnji Cooper    # There may be an optional sh(1) argument at the beginning of
4482*132f818dSEnji Cooper    # install_prog (especially on Windows NT).
4483*132f818dSEnji Cooper    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
4484*132f818dSEnji Cooper       # Allow the use of GNU shtool's install command.
4485*132f818dSEnji Cooper       case $nonopt in *shtool*) :;; *) false;; esac
4486*132f818dSEnji Cooper    then
4487*132f818dSEnji Cooper      # Aesthetically quote it.
4488*132f818dSEnji Cooper      func_quote_arg pretty "$nonopt"
4489*132f818dSEnji Cooper      install_prog="$func_quote_arg_result "
4490*132f818dSEnji Cooper      arg=$1
4491*132f818dSEnji Cooper      shift
4492*132f818dSEnji Cooper    else
4493*132f818dSEnji Cooper      install_prog=
4494*132f818dSEnji Cooper      arg=$nonopt
4495*132f818dSEnji Cooper    fi
4496*132f818dSEnji Cooper
4497*132f818dSEnji Cooper    # The real first argument should be the name of the installation program.
4498*132f818dSEnji Cooper    # Aesthetically quote it.
4499*132f818dSEnji Cooper    func_quote_arg pretty "$arg"
4500*132f818dSEnji Cooper    func_append install_prog "$func_quote_arg_result"
4501*132f818dSEnji Cooper    install_shared_prog=$install_prog
4502*132f818dSEnji Cooper    case " $install_prog " in
4503*132f818dSEnji Cooper      *[\\\ /]cp\ *) install_cp=: ;;
4504*132f818dSEnji Cooper      *) install_cp=false ;;
4505*132f818dSEnji Cooper    esac
4506*132f818dSEnji Cooper
4507*132f818dSEnji Cooper    # We need to accept at least all the BSD install flags.
4508*132f818dSEnji Cooper    dest=
4509*132f818dSEnji Cooper    files=
4510*132f818dSEnji Cooper    opts=
4511*132f818dSEnji Cooper    prev=
4512*132f818dSEnji Cooper    install_type=
4513*132f818dSEnji Cooper    isdir=false
4514*132f818dSEnji Cooper    stripme=
4515*132f818dSEnji Cooper    no_mode=:
4516*132f818dSEnji Cooper    for arg
4517*132f818dSEnji Cooper    do
4518*132f818dSEnji Cooper      arg2=
4519*132f818dSEnji Cooper      if test -n "$dest"; then
4520*132f818dSEnji Cooper	func_append files " $dest"
4521*132f818dSEnji Cooper	dest=$arg
4522*132f818dSEnji Cooper	continue
4523*132f818dSEnji Cooper      fi
4524*132f818dSEnji Cooper
4525*132f818dSEnji Cooper      case $arg in
4526*132f818dSEnji Cooper      -d) isdir=: ;;
4527*132f818dSEnji Cooper      -f)
4528*132f818dSEnji Cooper	if $install_cp; then :; else
4529*132f818dSEnji Cooper	  prev=$arg
4530*132f818dSEnji Cooper	fi
4531*132f818dSEnji Cooper	;;
4532*132f818dSEnji Cooper      -g | -m | -o)
4533*132f818dSEnji Cooper	prev=$arg
4534*132f818dSEnji Cooper	;;
4535*132f818dSEnji Cooper      -s)
4536*132f818dSEnji Cooper	stripme=" -s"
4537*132f818dSEnji Cooper	continue
4538*132f818dSEnji Cooper	;;
4539*132f818dSEnji Cooper      -*)
4540*132f818dSEnji Cooper	;;
4541*132f818dSEnji Cooper      *)
4542*132f818dSEnji Cooper	# If the previous option needed an argument, then skip it.
4543*132f818dSEnji Cooper	if test -n "$prev"; then
4544*132f818dSEnji Cooper	  if test X-m = "X$prev" && test -n "$install_override_mode"; then
4545*132f818dSEnji Cooper	    arg2=$install_override_mode
4546*132f818dSEnji Cooper	    no_mode=false
4547*132f818dSEnji Cooper	  fi
4548*132f818dSEnji Cooper	  prev=
4549*132f818dSEnji Cooper	else
4550*132f818dSEnji Cooper	  dest=$arg
4551*132f818dSEnji Cooper	  continue
4552*132f818dSEnji Cooper	fi
4553*132f818dSEnji Cooper	;;
4554*132f818dSEnji Cooper      esac
4555*132f818dSEnji Cooper
4556*132f818dSEnji Cooper      # Aesthetically quote the argument.
4557*132f818dSEnji Cooper      func_quote_arg pretty "$arg"
4558*132f818dSEnji Cooper      func_append install_prog " $func_quote_arg_result"
4559*132f818dSEnji Cooper      if test -n "$arg2"; then
4560*132f818dSEnji Cooper	func_quote_arg pretty "$arg2"
4561*132f818dSEnji Cooper      fi
4562*132f818dSEnji Cooper      func_append install_shared_prog " $func_quote_arg_result"
4563*132f818dSEnji Cooper    done
4564*132f818dSEnji Cooper
4565*132f818dSEnji Cooper    test -z "$install_prog" && \
4566*132f818dSEnji Cooper      func_fatal_help "you must specify an install program"
4567*132f818dSEnji Cooper
4568*132f818dSEnji Cooper    test -n "$prev" && \
4569*132f818dSEnji Cooper      func_fatal_help "the '$prev' option requires an argument"
4570*132f818dSEnji Cooper
4571*132f818dSEnji Cooper    if test -n "$install_override_mode" && $no_mode; then
4572*132f818dSEnji Cooper      if $install_cp; then :; else
4573*132f818dSEnji Cooper	func_quote_arg pretty "$install_override_mode"
4574*132f818dSEnji Cooper	func_append install_shared_prog " -m $func_quote_arg_result"
4575*132f818dSEnji Cooper      fi
4576*132f818dSEnji Cooper    fi
4577*132f818dSEnji Cooper
4578*132f818dSEnji Cooper    if test -z "$files"; then
4579*132f818dSEnji Cooper      if test -z "$dest"; then
4580*132f818dSEnji Cooper	func_fatal_help "no file or destination specified"
4581*132f818dSEnji Cooper      else
4582*132f818dSEnji Cooper	func_fatal_help "you must specify a destination"
4583*132f818dSEnji Cooper      fi
4584*132f818dSEnji Cooper    fi
4585*132f818dSEnji Cooper
4586*132f818dSEnji Cooper    # Strip any trailing slash from the destination.
4587*132f818dSEnji Cooper    func_stripname '' '/' "$dest"
4588*132f818dSEnji Cooper    dest=$func_stripname_result
4589*132f818dSEnji Cooper
4590*132f818dSEnji Cooper    # Check to see that the destination is a directory.
4591*132f818dSEnji Cooper    test -d "$dest" && isdir=:
4592*132f818dSEnji Cooper    if $isdir; then
4593*132f818dSEnji Cooper      destdir=$dest
4594*132f818dSEnji Cooper      destname=
4595*132f818dSEnji Cooper    else
4596*132f818dSEnji Cooper      func_dirname_and_basename "$dest" "" "."
4597*132f818dSEnji Cooper      destdir=$func_dirname_result
4598*132f818dSEnji Cooper      destname=$func_basename_result
4599*132f818dSEnji Cooper
4600*132f818dSEnji Cooper      # Not a directory, so check to see that there is only one file specified.
4601*132f818dSEnji Cooper      set dummy $files; shift
4602*132f818dSEnji Cooper      test "$#" -gt 1 && \
4603*132f818dSEnji Cooper	func_fatal_help "'$dest' is not a directory"
4604*132f818dSEnji Cooper    fi
4605*132f818dSEnji Cooper    case $destdir in
4606*132f818dSEnji Cooper    [\\/]* | [A-Za-z]:[\\/]*) ;;
4607*132f818dSEnji Cooper    *)
4608*132f818dSEnji Cooper      for file in $files; do
4609*132f818dSEnji Cooper	case $file in
4610*132f818dSEnji Cooper	*.lo) ;;
4611*132f818dSEnji Cooper	*)
4612*132f818dSEnji Cooper	  func_fatal_help "'$destdir' must be an absolute directory name"
4613*132f818dSEnji Cooper	  ;;
4614*132f818dSEnji Cooper	esac
4615*132f818dSEnji Cooper      done
4616*132f818dSEnji Cooper      ;;
4617*132f818dSEnji Cooper    esac
4618*132f818dSEnji Cooper
4619*132f818dSEnji Cooper    # This variable tells wrapper scripts just to set variables rather
4620*132f818dSEnji Cooper    # than running their programs.
4621*132f818dSEnji Cooper    libtool_install_magic=$magic
4622*132f818dSEnji Cooper
4623*132f818dSEnji Cooper    staticlibs=
4624*132f818dSEnji Cooper    future_libdirs=
4625*132f818dSEnji Cooper    current_libdirs=
4626*132f818dSEnji Cooper    for file in $files; do
4627*132f818dSEnji Cooper
4628*132f818dSEnji Cooper      # Do each installation.
4629*132f818dSEnji Cooper      case $file in
4630*132f818dSEnji Cooper      *.$libext)
4631*132f818dSEnji Cooper	# Do the static libraries later.
4632*132f818dSEnji Cooper	func_append staticlibs " $file"
4633*132f818dSEnji Cooper	;;
4634*132f818dSEnji Cooper
4635*132f818dSEnji Cooper      *.la)
4636*132f818dSEnji Cooper	func_resolve_sysroot "$file"
4637*132f818dSEnji Cooper	file=$func_resolve_sysroot_result
4638*132f818dSEnji Cooper
4639*132f818dSEnji Cooper	# Check to see that this really is a libtool archive.
4640*132f818dSEnji Cooper	func_lalib_unsafe_p "$file" \
4641*132f818dSEnji Cooper	  || func_fatal_help "'$file' is not a valid libtool archive"
4642*132f818dSEnji Cooper
4643*132f818dSEnji Cooper	library_names=
4644*132f818dSEnji Cooper	old_library=
4645*132f818dSEnji Cooper	relink_command=
4646*132f818dSEnji Cooper	func_source "$file"
4647*132f818dSEnji Cooper
4648*132f818dSEnji Cooper	# Add the libdir to current_libdirs if it is the destination.
4649*132f818dSEnji Cooper	if test "X$destdir" = "X$libdir"; then
4650*132f818dSEnji Cooper	  case "$current_libdirs " in
4651*132f818dSEnji Cooper	  *" $libdir "*) ;;
4652*132f818dSEnji Cooper	  *) func_append current_libdirs " $libdir" ;;
4653*132f818dSEnji Cooper	  esac
4654*132f818dSEnji Cooper	else
4655*132f818dSEnji Cooper	  # Note the libdir as a future libdir.
4656*132f818dSEnji Cooper	  case "$future_libdirs " in
4657*132f818dSEnji Cooper	  *" $libdir "*) ;;
4658*132f818dSEnji Cooper	  *) func_append future_libdirs " $libdir" ;;
4659*132f818dSEnji Cooper	  esac
4660*132f818dSEnji Cooper	fi
4661*132f818dSEnji Cooper
4662*132f818dSEnji Cooper	func_dirname "$file" "/" ""
4663*132f818dSEnji Cooper	dir=$func_dirname_result
4664*132f818dSEnji Cooper	func_append dir "$objdir"
4665*132f818dSEnji Cooper
4666*132f818dSEnji Cooper	if test -n "$relink_command"; then
4667*132f818dSEnji Cooper	  # Strip any trailing slash from the destination.
4668*132f818dSEnji Cooper	  func_stripname '' '/' "$libdir"
4669*132f818dSEnji Cooper	  destlibdir=$func_stripname_result
4670*132f818dSEnji Cooper
4671*132f818dSEnji Cooper	  func_stripname '' '/' "$destdir"
4672*132f818dSEnji Cooper	  s_destdir=$func_stripname_result
4673*132f818dSEnji Cooper
4674*132f818dSEnji Cooper	  # Determine the prefix the user has applied to our future dir.
4675*132f818dSEnji Cooper	  inst_prefix_dir=`$ECHO "X$s_destdir" | $Xsed -e "s%$destlibdir\$%%"`
4676*132f818dSEnji Cooper
4677*132f818dSEnji Cooper	  # Don't allow the user to place us outside of our expected
4678*132f818dSEnji Cooper	  # location b/c this prevents finding dependent libraries that
4679*132f818dSEnji Cooper	  # are installed to the same prefix.
4680*132f818dSEnji Cooper	  # At present, this check doesn't affect windows .dll's that
4681*132f818dSEnji Cooper	  # are installed into $libdir/../bin (currently, that works fine)
4682*132f818dSEnji Cooper	  # but it's something to keep an eye on.
4683*132f818dSEnji Cooper	  test "$inst_prefix_dir" = "$destdir" && \
4684*132f818dSEnji Cooper	    func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
4685*132f818dSEnji Cooper
4686*132f818dSEnji Cooper	  if test -n "$inst_prefix_dir"; then
4687*132f818dSEnji Cooper	    # Stick the inst_prefix_dir data into the link command.
4688*132f818dSEnji Cooper	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
4689*132f818dSEnji Cooper	  else
4690*132f818dSEnji Cooper	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
4691*132f818dSEnji Cooper	  fi
4692*132f818dSEnji Cooper
4693*132f818dSEnji Cooper	  func_warning "relinking '$file'"
4694*132f818dSEnji Cooper	  func_show_eval "$relink_command" \
4695*132f818dSEnji Cooper	    'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
4696*132f818dSEnji Cooper	fi
4697*132f818dSEnji Cooper
4698*132f818dSEnji Cooper	# See the names of the shared library.
4699*132f818dSEnji Cooper	set dummy $library_names; shift
4700*132f818dSEnji Cooper	if test -n "$1"; then
4701*132f818dSEnji Cooper	  realname=$1
4702*132f818dSEnji Cooper	  shift
4703*132f818dSEnji Cooper
4704*132f818dSEnji Cooper	  srcname=$realname
4705*132f818dSEnji Cooper	  test -n "$relink_command" && srcname=${realname}T
4706*132f818dSEnji Cooper
4707*132f818dSEnji Cooper	  # Install the shared library and build the symlinks.
4708*132f818dSEnji Cooper	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
4709*132f818dSEnji Cooper	      'exit $?'
4710*132f818dSEnji Cooper	  tstripme=$stripme
4711*132f818dSEnji Cooper	  case $host_os in
4712*132f818dSEnji Cooper	  cygwin* | mingw* | windows* | pw32* | cegcc*)
4713*132f818dSEnji Cooper	    case $realname in
4714*132f818dSEnji Cooper	    *.dll.a)
4715*132f818dSEnji Cooper	      tstripme=
4716*132f818dSEnji Cooper	      ;;
4717*132f818dSEnji Cooper	    esac
4718*132f818dSEnji Cooper	    ;;
4719*132f818dSEnji Cooper	  os2*)
4720*132f818dSEnji Cooper	    case $realname in
4721*132f818dSEnji Cooper	    *_dll.a)
4722*132f818dSEnji Cooper	      tstripme=
4723*132f818dSEnji Cooper	      ;;
4724*132f818dSEnji Cooper	    esac
4725*132f818dSEnji Cooper	    ;;
4726*132f818dSEnji Cooper	  esac
4727*132f818dSEnji Cooper	  if test -n "$tstripme" && test -n "$striplib"; then
4728*132f818dSEnji Cooper	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
4729*132f818dSEnji Cooper	  fi
4730*132f818dSEnji Cooper
4731*132f818dSEnji Cooper	  if test "$#" -gt 0; then
4732*132f818dSEnji Cooper	    # Delete the old symlinks, and create new ones.
4733*132f818dSEnji Cooper	    # Try 'ln -sf' first, because the 'ln' binary might depend on
4734*132f818dSEnji Cooper	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
4735*132f818dSEnji Cooper	    # so we also need to try rm && ln -s.
4736*132f818dSEnji Cooper	    for linkname
4737*132f818dSEnji Cooper	    do
4738*132f818dSEnji Cooper	      test "$linkname" != "$realname" \
4739*132f818dSEnji Cooper		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
4740*132f818dSEnji Cooper	    done
4741*132f818dSEnji Cooper	  fi
4742*132f818dSEnji Cooper
4743*132f818dSEnji Cooper	  # Do each command in the postinstall commands.
4744*132f818dSEnji Cooper	  lib=$destdir/$realname
4745*132f818dSEnji Cooper	  func_execute_cmds "$postinstall_cmds" 'exit $?'
4746*132f818dSEnji Cooper	fi
4747*132f818dSEnji Cooper
4748*132f818dSEnji Cooper	# Install the pseudo-library for information purposes.
4749*132f818dSEnji Cooper	func_basename "$file"
4750*132f818dSEnji Cooper	name=$func_basename_result
4751*132f818dSEnji Cooper	instname=$dir/${name}i
4752*132f818dSEnji Cooper	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
4753*132f818dSEnji Cooper
4754*132f818dSEnji Cooper	# Maybe install the static library, too.
4755*132f818dSEnji Cooper	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
4756*132f818dSEnji Cooper	;;
4757*132f818dSEnji Cooper
4758*132f818dSEnji Cooper      *.lo)
4759*132f818dSEnji Cooper	# Install (i.e. copy) a libtool object.
4760*132f818dSEnji Cooper
4761*132f818dSEnji Cooper	# Figure out destination file name, if it wasn't already specified.
4762*132f818dSEnji Cooper	if test -n "$destname"; then
4763*132f818dSEnji Cooper	  destfile=$destdir/$destname
4764*132f818dSEnji Cooper	else
4765*132f818dSEnji Cooper	  func_basename "$file"
4766*132f818dSEnji Cooper	  destfile=$func_basename_result
4767*132f818dSEnji Cooper	  destfile=$destdir/$destfile
4768*132f818dSEnji Cooper	fi
4769*132f818dSEnji Cooper
4770*132f818dSEnji Cooper	# Deduce the name of the destination old-style object file.
4771*132f818dSEnji Cooper	case $destfile in
4772*132f818dSEnji Cooper	*.lo)
4773*132f818dSEnji Cooper	  func_lo2o "$destfile"
4774*132f818dSEnji Cooper	  staticdest=$func_lo2o_result
4775*132f818dSEnji Cooper	  ;;
4776*132f818dSEnji Cooper	*.$objext)
4777*132f818dSEnji Cooper	  staticdest=$destfile
4778*132f818dSEnji Cooper	  destfile=
4779*132f818dSEnji Cooper	  ;;
4780*132f818dSEnji Cooper	*)
4781*132f818dSEnji Cooper	  func_fatal_help "cannot copy a libtool object to '$destfile'"
4782*132f818dSEnji Cooper	  ;;
4783*132f818dSEnji Cooper	esac
4784*132f818dSEnji Cooper
4785*132f818dSEnji Cooper	# Install the libtool object if requested.
4786*132f818dSEnji Cooper	test -n "$destfile" && \
4787*132f818dSEnji Cooper	  func_show_eval "$install_prog $file $destfile" 'exit $?'
4788*132f818dSEnji Cooper
4789*132f818dSEnji Cooper	# Install the old object if enabled.
4790*132f818dSEnji Cooper	if test yes = "$build_old_libs"; then
4791*132f818dSEnji Cooper	  # Deduce the name of the old-style object file.
4792*132f818dSEnji Cooper	  func_lo2o "$file"
4793*132f818dSEnji Cooper	  staticobj=$func_lo2o_result
4794*132f818dSEnji Cooper	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
4795*132f818dSEnji Cooper	fi
4796*132f818dSEnji Cooper	exit $EXIT_SUCCESS
4797*132f818dSEnji Cooper	;;
4798*132f818dSEnji Cooper
4799*132f818dSEnji Cooper      *)
4800*132f818dSEnji Cooper	# Figure out destination file name, if it wasn't already specified.
4801*132f818dSEnji Cooper	if test -n "$destname"; then
4802*132f818dSEnji Cooper	  destfile=$destdir/$destname
4803*132f818dSEnji Cooper	else
4804*132f818dSEnji Cooper	  func_basename "$file"
4805*132f818dSEnji Cooper	  destfile=$func_basename_result
4806*132f818dSEnji Cooper	  destfile=$destdir/$destfile
4807*132f818dSEnji Cooper	fi
4808*132f818dSEnji Cooper
4809*132f818dSEnji Cooper	# If the file is missing, and there is a .exe on the end, strip it
4810*132f818dSEnji Cooper	# because it is most likely a libtool script we actually want to
4811*132f818dSEnji Cooper	# install
4812*132f818dSEnji Cooper	stripped_ext=
4813*132f818dSEnji Cooper	case $file in
4814*132f818dSEnji Cooper	  *.exe)
4815*132f818dSEnji Cooper	    if test ! -f "$file"; then
4816*132f818dSEnji Cooper	      func_stripname '' '.exe' "$file"
4817*132f818dSEnji Cooper	      file=$func_stripname_result
4818*132f818dSEnji Cooper	      stripped_ext=.exe
4819*132f818dSEnji Cooper	    fi
4820*132f818dSEnji Cooper	    ;;
4821*132f818dSEnji Cooper	esac
4822*132f818dSEnji Cooper
4823*132f818dSEnji Cooper	# Do a test to see if this is really a libtool program.
4824*132f818dSEnji Cooper	case $host in
4825*132f818dSEnji Cooper	*cygwin* | *mingw* | *windows*)
4826*132f818dSEnji Cooper	    if func_ltwrapper_executable_p "$file"; then
4827*132f818dSEnji Cooper	      func_ltwrapper_scriptname "$file"
4828*132f818dSEnji Cooper	      wrapper=$func_ltwrapper_scriptname_result
4829*132f818dSEnji Cooper	    else
4830*132f818dSEnji Cooper	      func_stripname '' '.exe' "$file"
4831*132f818dSEnji Cooper	      wrapper=$func_stripname_result
4832*132f818dSEnji Cooper	    fi
4833*132f818dSEnji Cooper	    ;;
4834*132f818dSEnji Cooper	*)
4835*132f818dSEnji Cooper	    wrapper=$file
4836*132f818dSEnji Cooper	    ;;
4837*132f818dSEnji Cooper	esac
4838*132f818dSEnji Cooper	if func_ltwrapper_script_p "$wrapper"; then
4839*132f818dSEnji Cooper	  notinst_deplibs=
4840*132f818dSEnji Cooper	  relink_command=
4841*132f818dSEnji Cooper
4842*132f818dSEnji Cooper	  func_source "$wrapper"
4843*132f818dSEnji Cooper
4844*132f818dSEnji Cooper	  # Check the variables that should have been set.
4845*132f818dSEnji Cooper	  test -z "$generated_by_libtool_version" && \
4846*132f818dSEnji Cooper	    func_fatal_error "invalid libtool wrapper script '$wrapper'"
4847*132f818dSEnji Cooper
4848*132f818dSEnji Cooper	  finalize=:
4849*132f818dSEnji Cooper	  for lib in $notinst_deplibs; do
4850*132f818dSEnji Cooper	    # Check to see that each library is installed.
4851*132f818dSEnji Cooper	    libdir=
4852*132f818dSEnji Cooper	    if test -f "$lib"; then
4853*132f818dSEnji Cooper	      func_source "$lib"
4854*132f818dSEnji Cooper	    fi
4855*132f818dSEnji Cooper	    libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
4856*132f818dSEnji Cooper	    if test -n "$libdir" && test ! -f "$libfile"; then
4857*132f818dSEnji Cooper	      func_warning "'$lib' has not been installed in '$libdir'"
4858*132f818dSEnji Cooper	      finalize=false
4859*132f818dSEnji Cooper	    fi
4860*132f818dSEnji Cooper	  done
4861*132f818dSEnji Cooper
4862*132f818dSEnji Cooper	  relink_command=
4863*132f818dSEnji Cooper	  func_source "$wrapper"
4864*132f818dSEnji Cooper
4865*132f818dSEnji Cooper	  outputname=
4866*132f818dSEnji Cooper	  if test no = "$fast_install" && test -n "$relink_command"; then
4867*132f818dSEnji Cooper	    $opt_dry_run || {
4868*132f818dSEnji Cooper	      if $finalize; then
4869*132f818dSEnji Cooper	        tmpdir=`func_mktempdir`
4870*132f818dSEnji Cooper		func_basename "$file$stripped_ext"
4871*132f818dSEnji Cooper		file=$func_basename_result
4872*132f818dSEnji Cooper	        outputname=$tmpdir/$file
4873*132f818dSEnji Cooper	        # Replace the output file specification.
4874*132f818dSEnji Cooper	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
4875*132f818dSEnji Cooper
4876*132f818dSEnji Cooper	        $opt_quiet || {
4877*132f818dSEnji Cooper	          func_quote_arg expand,pretty "$relink_command"
4878*132f818dSEnji Cooper		  eval "func_echo $func_quote_arg_result"
4879*132f818dSEnji Cooper	        }
4880*132f818dSEnji Cooper	        if eval "$relink_command"; then :
4881*132f818dSEnji Cooper	          else
4882*132f818dSEnji Cooper		  func_error "error: relink '$file' with the above command before installing it"
4883*132f818dSEnji Cooper		  $opt_dry_run || ${RM}r "$tmpdir"
4884*132f818dSEnji Cooper		  continue
4885*132f818dSEnji Cooper	        fi
4886*132f818dSEnji Cooper	        file=$outputname
4887*132f818dSEnji Cooper	      else
4888*132f818dSEnji Cooper	        func_warning "cannot relink '$file'"
4889*132f818dSEnji Cooper	      fi
4890*132f818dSEnji Cooper	    }
4891*132f818dSEnji Cooper	  else
4892*132f818dSEnji Cooper	    # Install the binary that we compiled earlier.
4893*132f818dSEnji Cooper	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
4894*132f818dSEnji Cooper	  fi
4895*132f818dSEnji Cooper	fi
4896*132f818dSEnji Cooper
4897*132f818dSEnji Cooper	# remove .exe since cygwin /usr/bin/install will append another
4898*132f818dSEnji Cooper	# one anyway
4899*132f818dSEnji Cooper	case $install_prog,$host in
4900*132f818dSEnji Cooper	*/usr/bin/install*,*cygwin*)
4901*132f818dSEnji Cooper	  case $file:$destfile in
4902*132f818dSEnji Cooper	  *.exe:*.exe)
4903*132f818dSEnji Cooper	    # this is ok
4904*132f818dSEnji Cooper	    ;;
4905*132f818dSEnji Cooper	  *.exe:*)
4906*132f818dSEnji Cooper	    destfile=$destfile.exe
4907*132f818dSEnji Cooper	    ;;
4908*132f818dSEnji Cooper	  *:*.exe)
4909*132f818dSEnji Cooper	    func_stripname '' '.exe' "$destfile"
4910*132f818dSEnji Cooper	    destfile=$func_stripname_result
4911*132f818dSEnji Cooper	    ;;
4912*132f818dSEnji Cooper	  esac
4913*132f818dSEnji Cooper	  ;;
4914*132f818dSEnji Cooper	esac
4915*132f818dSEnji Cooper	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
4916*132f818dSEnji Cooper	$opt_dry_run || if test -n "$outputname"; then
4917*132f818dSEnji Cooper	  ${RM}r "$tmpdir"
4918*132f818dSEnji Cooper	fi
4919*132f818dSEnji Cooper	;;
4920*132f818dSEnji Cooper      esac
4921*132f818dSEnji Cooper    done
4922*132f818dSEnji Cooper
4923*132f818dSEnji Cooper    for file in $staticlibs; do
4924*132f818dSEnji Cooper      func_basename "$file"
4925*132f818dSEnji Cooper      name=$func_basename_result
4926*132f818dSEnji Cooper
4927*132f818dSEnji Cooper      # Set up the ranlib parameters.
4928*132f818dSEnji Cooper      oldlib=$destdir/$name
4929*132f818dSEnji Cooper      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
4930*132f818dSEnji Cooper      tool_oldlib=$func_to_tool_file_result
4931*132f818dSEnji Cooper
4932*132f818dSEnji Cooper      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
4933*132f818dSEnji Cooper
4934*132f818dSEnji Cooper      if test -n "$stripme" && test -n "$old_striplib"; then
4935*132f818dSEnji Cooper	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
4936*132f818dSEnji Cooper      fi
4937*132f818dSEnji Cooper
4938*132f818dSEnji Cooper      # Do each command in the postinstall commands.
4939*132f818dSEnji Cooper      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
4940*132f818dSEnji Cooper    done
4941*132f818dSEnji Cooper
4942*132f818dSEnji Cooper    test -n "$future_libdirs" && \
4943*132f818dSEnji Cooper      func_warning "remember to run '$progname --finish$future_libdirs'"
4944*132f818dSEnji Cooper
4945*132f818dSEnji Cooper    if test -n "$current_libdirs"; then
4946*132f818dSEnji Cooper      # Maybe just do a dry run.
4947*132f818dSEnji Cooper      $opt_dry_run && current_libdirs=" -n$current_libdirs"
4948*132f818dSEnji Cooper      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
4949*132f818dSEnji Cooper    else
4950*132f818dSEnji Cooper      exit $EXIT_SUCCESS
4951*132f818dSEnji Cooper    fi
4952*132f818dSEnji Cooper}
4953*132f818dSEnji Cooper
4954*132f818dSEnji Coopertest install = "$opt_mode" && func_mode_install ${1+"$@"}
4955*132f818dSEnji Cooper
4956*132f818dSEnji Cooper
4957*132f818dSEnji Cooper# func_generate_dlsyms outputname originator pic_p
4958*132f818dSEnji Cooper# Extract symbols from dlprefiles and create ${outputname}S.o with
4959*132f818dSEnji Cooper# a dlpreopen symbol table.
4960*132f818dSEnji Cooperfunc_generate_dlsyms ()
4961*132f818dSEnji Cooper{
4962*132f818dSEnji Cooper    $debug_cmd
4963*132f818dSEnji Cooper
4964*132f818dSEnji Cooper    my_outputname=$1
4965*132f818dSEnji Cooper    my_originator=$2
4966*132f818dSEnji Cooper    my_pic_p=${3-false}
4967*132f818dSEnji Cooper    my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
4968*132f818dSEnji Cooper    my_dlsyms=
4969*132f818dSEnji Cooper
4970*132f818dSEnji Cooper    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
4971*132f818dSEnji Cooper      if test -n "$NM" && test -n "$global_symbol_pipe"; then
4972*132f818dSEnji Cooper	my_dlsyms=${my_outputname}S.c
4973*132f818dSEnji Cooper      else
4974*132f818dSEnji Cooper	func_error "not configured to extract global symbols from dlpreopened files"
4975*132f818dSEnji Cooper      fi
4976*132f818dSEnji Cooper    fi
4977*132f818dSEnji Cooper
4978*132f818dSEnji Cooper    if test -n "$my_dlsyms"; then
4979*132f818dSEnji Cooper      case $my_dlsyms in
4980*132f818dSEnji Cooper      "") ;;
4981*132f818dSEnji Cooper      *.c)
4982*132f818dSEnji Cooper	# Discover the nlist of each of the dlfiles.
4983*132f818dSEnji Cooper	nlist=$output_objdir/$my_outputname.nm
4984*132f818dSEnji Cooper
4985*132f818dSEnji Cooper	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
4986*132f818dSEnji Cooper
4987*132f818dSEnji Cooper	# Parse the name list into a source file.
4988*132f818dSEnji Cooper	func_verbose "creating $output_objdir/$my_dlsyms"
4989*132f818dSEnji Cooper
4990*132f818dSEnji Cooper	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
4991*132f818dSEnji Cooper/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
4992*132f818dSEnji Cooper/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
4993*132f818dSEnji Cooper
4994*132f818dSEnji Cooper#ifdef __cplusplus
4995*132f818dSEnji Cooperextern \"C\" {
4996*132f818dSEnji Cooper#endif
4997*132f818dSEnji Cooper
4998*132f818dSEnji Cooper#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
4999*132f818dSEnji Cooper#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
5000*132f818dSEnji Cooper#endif
5001*132f818dSEnji Cooper
5002*132f818dSEnji Cooper/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
5003*132f818dSEnji Cooper#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
5004*132f818dSEnji Cooper/* DATA imports from DLLs on WIN32 can't be const, because runtime
5005*132f818dSEnji Cooper   relocations are performed -- see ld's documentation on pseudo-relocs.  */
5006*132f818dSEnji Cooper# define LT_DLSYM_CONST
5007*132f818dSEnji Cooper#elif defined __osf__
5008*132f818dSEnji Cooper/* This system does not cope well with relocations in const data.  */
5009*132f818dSEnji Cooper# define LT_DLSYM_CONST
5010*132f818dSEnji Cooper#else
5011*132f818dSEnji Cooper# define LT_DLSYM_CONST const
5012*132f818dSEnji Cooper#endif
5013*132f818dSEnji Cooper
5014*132f818dSEnji Cooper#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
5015*132f818dSEnji Cooper
5016*132f818dSEnji Cooper/* External symbol declarations for the compiler. */\
5017*132f818dSEnji Cooper"
5018*132f818dSEnji Cooper
5019*132f818dSEnji Cooper	if test yes = "$dlself"; then
5020*132f818dSEnji Cooper	  func_verbose "generating symbol list for '$output'"
5021*132f818dSEnji Cooper
5022*132f818dSEnji Cooper	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
5023*132f818dSEnji Cooper
5024*132f818dSEnji Cooper	  # Add our own program objects to the symbol list.
5025*132f818dSEnji Cooper	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
5026*132f818dSEnji Cooper	  for progfile in $progfiles; do
5027*132f818dSEnji Cooper	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
5028*132f818dSEnji Cooper	    func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
5029*132f818dSEnji Cooper	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
5030*132f818dSEnji Cooper	  done
5031*132f818dSEnji Cooper
5032*132f818dSEnji Cooper	  if test -n "$exclude_expsyms"; then
5033*132f818dSEnji Cooper	    $opt_dry_run || {
5034*132f818dSEnji Cooper	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
5035*132f818dSEnji Cooper	      eval '$MV "$nlist"T "$nlist"'
5036*132f818dSEnji Cooper	    }
5037*132f818dSEnji Cooper	  fi
5038*132f818dSEnji Cooper
5039*132f818dSEnji Cooper	  if test -n "$export_symbols_regex"; then
5040*132f818dSEnji Cooper	    $opt_dry_run || {
5041*132f818dSEnji Cooper	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
5042*132f818dSEnji Cooper	      eval '$MV "$nlist"T "$nlist"'
5043*132f818dSEnji Cooper	    }
5044*132f818dSEnji Cooper	  fi
5045*132f818dSEnji Cooper
5046*132f818dSEnji Cooper	  # Prepare the list of exported symbols
5047*132f818dSEnji Cooper	  if test -z "$export_symbols"; then
5048*132f818dSEnji Cooper	    export_symbols=$output_objdir/$outputname.exp
5049*132f818dSEnji Cooper	    $opt_dry_run || {
5050*132f818dSEnji Cooper	      $RM $export_symbols
5051*132f818dSEnji Cooper	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
5052*132f818dSEnji Cooper	      case $host in
5053*132f818dSEnji Cooper	      *cygwin* | *mingw* | *windows* | *cegcc* )
5054*132f818dSEnji Cooper                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
5055*132f818dSEnji Cooper                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
5056*132f818dSEnji Cooper	        ;;
5057*132f818dSEnji Cooper	      esac
5058*132f818dSEnji Cooper	    }
5059*132f818dSEnji Cooper	  else
5060*132f818dSEnji Cooper	    $opt_dry_run || {
5061*132f818dSEnji Cooper	      eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
5062*132f818dSEnji Cooper	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
5063*132f818dSEnji Cooper	      eval '$MV "$nlist"T "$nlist"'
5064*132f818dSEnji Cooper	      case $host in
5065*132f818dSEnji Cooper	        *cygwin* | *mingw* | *windows* | *cegcc* )
5066*132f818dSEnji Cooper	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
5067*132f818dSEnji Cooper	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
5068*132f818dSEnji Cooper	          ;;
5069*132f818dSEnji Cooper	      esac
5070*132f818dSEnji Cooper	    }
5071*132f818dSEnji Cooper	  fi
5072*132f818dSEnji Cooper	fi
5073*132f818dSEnji Cooper
5074*132f818dSEnji Cooper	for dlprefile in $dlprefiles; do
5075*132f818dSEnji Cooper	  func_verbose "extracting global C symbols from '$dlprefile'"
5076*132f818dSEnji Cooper	  func_basename "$dlprefile"
5077*132f818dSEnji Cooper	  name=$func_basename_result
5078*132f818dSEnji Cooper          case $host in
5079*132f818dSEnji Cooper	    *cygwin* | *mingw* | *windows* | *cegcc* )
5080*132f818dSEnji Cooper	      # if an import library, we need to obtain dlname
5081*132f818dSEnji Cooper	      if func_win32_import_lib_p "$dlprefile"; then
5082*132f818dSEnji Cooper	        func_tr_sh "$dlprefile"
5083*132f818dSEnji Cooper	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
5084*132f818dSEnji Cooper	        dlprefile_dlbasename=
5085*132f818dSEnji Cooper	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
5086*132f818dSEnji Cooper	          # Use subshell, to avoid clobbering current variable values
5087*132f818dSEnji Cooper	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
5088*132f818dSEnji Cooper	          if test -n "$dlprefile_dlname"; then
5089*132f818dSEnji Cooper	            func_basename "$dlprefile_dlname"
5090*132f818dSEnji Cooper	            dlprefile_dlbasename=$func_basename_result
5091*132f818dSEnji Cooper	          else
5092*132f818dSEnji Cooper	            # no lafile. user explicitly requested -dlpreopen <import library>.
5093*132f818dSEnji Cooper	            $sharedlib_from_linklib_cmd "$dlprefile"
5094*132f818dSEnji Cooper	            dlprefile_dlbasename=$sharedlib_from_linklib_result
5095*132f818dSEnji Cooper	          fi
5096*132f818dSEnji Cooper	        fi
5097*132f818dSEnji Cooper	        $opt_dry_run || {
5098*132f818dSEnji Cooper	          if test -n "$dlprefile_dlbasename"; then
5099*132f818dSEnji Cooper	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
5100*132f818dSEnji Cooper	          else
5101*132f818dSEnji Cooper	            func_warning "Could not compute DLL name from $name"
5102*132f818dSEnji Cooper	            eval '$ECHO ": $name " >> "$nlist"'
5103*132f818dSEnji Cooper	          fi
5104*132f818dSEnji Cooper	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
5105*132f818dSEnji Cooper	          case $host in
5106*132f818dSEnji Cooper	            i[3456]86-*-mingw32*)
5107*132f818dSEnji Cooper	              eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
5108*132f818dSEnji Cooper	                $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
5109*132f818dSEnji Cooper	            ;;
5110*132f818dSEnji Cooper	            *)
5111*132f818dSEnji Cooper	              eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
5112*132f818dSEnji Cooper	                $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/__nm_//' >> '$nlist'"
5113*132f818dSEnji Cooper	            ;;
5114*132f818dSEnji Cooper	          esac
5115*132f818dSEnji Cooper	        }
5116*132f818dSEnji Cooper	      else # not an import lib
5117*132f818dSEnji Cooper	        $opt_dry_run || {
5118*132f818dSEnji Cooper	          eval '$ECHO ": $name " >> "$nlist"'
5119*132f818dSEnji Cooper	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
5120*132f818dSEnji Cooper	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
5121*132f818dSEnji Cooper	        }
5122*132f818dSEnji Cooper	      fi
5123*132f818dSEnji Cooper	    ;;
5124*132f818dSEnji Cooper	    *)
5125*132f818dSEnji Cooper	      $opt_dry_run || {
5126*132f818dSEnji Cooper	        eval '$ECHO ": $name " >> "$nlist"'
5127*132f818dSEnji Cooper	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
5128*132f818dSEnji Cooper	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
5129*132f818dSEnji Cooper	      }
5130*132f818dSEnji Cooper	    ;;
5131*132f818dSEnji Cooper          esac
5132*132f818dSEnji Cooper	done
5133*132f818dSEnji Cooper
5134*132f818dSEnji Cooper	$opt_dry_run || {
5135*132f818dSEnji Cooper	  # Make sure we have at least an empty file.
5136*132f818dSEnji Cooper	  test -f "$nlist" || : > "$nlist"
5137*132f818dSEnji Cooper
5138*132f818dSEnji Cooper	  if test -n "$exclude_expsyms"; then
5139*132f818dSEnji Cooper	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
5140*132f818dSEnji Cooper	    $MV "$nlist"T "$nlist"
5141*132f818dSEnji Cooper	  fi
5142*132f818dSEnji Cooper
5143*132f818dSEnji Cooper	  # Try sorting and uniquifying the output.
5144*132f818dSEnji Cooper	  if $GREP -v "^: " < "$nlist" |
5145*132f818dSEnji Cooper	      if sort -k 3 </dev/null >/dev/null 2>&1; then
5146*132f818dSEnji Cooper		sort -k 3
5147*132f818dSEnji Cooper	      else
5148*132f818dSEnji Cooper		sort +2
5149*132f818dSEnji Cooper	      fi |
5150*132f818dSEnji Cooper	      uniq > "$nlist"S; then
5151*132f818dSEnji Cooper	    :
5152*132f818dSEnji Cooper	  else
5153*132f818dSEnji Cooper	    $GREP -v "^: " < "$nlist" > "$nlist"S
5154*132f818dSEnji Cooper	  fi
5155*132f818dSEnji Cooper
5156*132f818dSEnji Cooper	  if test -f "$nlist"S; then
5157*132f818dSEnji Cooper	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
5158*132f818dSEnji Cooper	  else
5159*132f818dSEnji Cooper	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
5160*132f818dSEnji Cooper	  fi
5161*132f818dSEnji Cooper
5162*132f818dSEnji Cooper	  func_show_eval '$RM "${nlist}I"'
5163*132f818dSEnji Cooper	  if test -n "$global_symbol_to_import"; then
5164*132f818dSEnji Cooper	    eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
5165*132f818dSEnji Cooper	  fi
5166*132f818dSEnji Cooper
5167*132f818dSEnji Cooper	  echo >> "$output_objdir/$my_dlsyms" "\
5168*132f818dSEnji Cooper
5169*132f818dSEnji Cooper/* The mapping between symbol names and symbols.  */
5170*132f818dSEnji Coopertypedef struct {
5171*132f818dSEnji Cooper  const char *name;
5172*132f818dSEnji Cooper  void *address;
5173*132f818dSEnji Cooper} lt_dlsymlist;
5174*132f818dSEnji Cooperextern LT_DLSYM_CONST lt_dlsymlist
5175*132f818dSEnji Cooperlt_${my_prefix}_LTX_preloaded_symbols[];\
5176*132f818dSEnji Cooper"
5177*132f818dSEnji Cooper
5178*132f818dSEnji Cooper	  if test -s "$nlist"I; then
5179*132f818dSEnji Cooper	    echo >> "$output_objdir/$my_dlsyms" "\
5180*132f818dSEnji Cooperstatic void lt_syminit(void)
5181*132f818dSEnji Cooper{
5182*132f818dSEnji Cooper  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
5183*132f818dSEnji Cooper  for (; symbol->name; ++symbol)
5184*132f818dSEnji Cooper    {"
5185*132f818dSEnji Cooper	    $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
5186*132f818dSEnji Cooper	    echo >> "$output_objdir/$my_dlsyms" "\
5187*132f818dSEnji Cooper    }
5188*132f818dSEnji Cooper}"
5189*132f818dSEnji Cooper	  fi
5190*132f818dSEnji Cooper	  echo >> "$output_objdir/$my_dlsyms" "\
5191*132f818dSEnji CooperLT_DLSYM_CONST lt_dlsymlist
5192*132f818dSEnji Cooperlt_${my_prefix}_LTX_preloaded_symbols[] =
5193*132f818dSEnji Cooper{ {\"$my_originator\", (void *) 0},"
5194*132f818dSEnji Cooper
5195*132f818dSEnji Cooper	  if test -s "$nlist"I; then
5196*132f818dSEnji Cooper	    echo >> "$output_objdir/$my_dlsyms" "\
5197*132f818dSEnji Cooper  {\"@INIT@\", (void *) &lt_syminit},"
5198*132f818dSEnji Cooper	  fi
5199*132f818dSEnji Cooper
5200*132f818dSEnji Cooper	  case $need_lib_prefix in
5201*132f818dSEnji Cooper	  no)
5202*132f818dSEnji Cooper	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
5203*132f818dSEnji Cooper	    ;;
5204*132f818dSEnji Cooper	  *)
5205*132f818dSEnji Cooper	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
5206*132f818dSEnji Cooper	    ;;
5207*132f818dSEnji Cooper	  esac
5208*132f818dSEnji Cooper	  echo >> "$output_objdir/$my_dlsyms" "\
5209*132f818dSEnji Cooper  {0, (void *) 0}
5210*132f818dSEnji Cooper};
5211*132f818dSEnji Cooper
5212*132f818dSEnji Cooper/* This works around a problem in FreeBSD linker */
5213*132f818dSEnji Cooper#ifdef FREEBSD_WORKAROUND
5214*132f818dSEnji Cooperstatic const void *lt_preloaded_setup() {
5215*132f818dSEnji Cooper  return lt_${my_prefix}_LTX_preloaded_symbols;
5216*132f818dSEnji Cooper}
5217*132f818dSEnji Cooper#endif
5218*132f818dSEnji Cooper
5219*132f818dSEnji Cooper#ifdef __cplusplus
5220*132f818dSEnji Cooper}
5221*132f818dSEnji Cooper#endif\
5222*132f818dSEnji Cooper"
5223*132f818dSEnji Cooper	} # !$opt_dry_run
5224*132f818dSEnji Cooper
5225*132f818dSEnji Cooper	pic_flag_for_symtable=
5226*132f818dSEnji Cooper	case "$compile_command " in
5227*132f818dSEnji Cooper	*" -static "*) ;;
5228*132f818dSEnji Cooper	*)
5229*132f818dSEnji Cooper	  case $host in
5230*132f818dSEnji Cooper	  # compiling the symbol table file with pic_flag works around
5231*132f818dSEnji Cooper	  # a FreeBSD bug that causes programs to crash when -lm is
5232*132f818dSEnji Cooper	  # linked before any other PIC object.  But we must not use
5233*132f818dSEnji Cooper	  # pic_flag when linking with -static.  The problem exists in
5234*132f818dSEnji Cooper	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
5235*132f818dSEnji Cooper	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
5236*132f818dSEnji Cooper	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
5237*132f818dSEnji Cooper	  *-*-hpux*)
5238*132f818dSEnji Cooper	    pic_flag_for_symtable=" $pic_flag"  ;;
5239*132f818dSEnji Cooper	  *)
5240*132f818dSEnji Cooper	    $my_pic_p && pic_flag_for_symtable=" $pic_flag"
5241*132f818dSEnji Cooper	    ;;
5242*132f818dSEnji Cooper	  esac
5243*132f818dSEnji Cooper	  ;;
5244*132f818dSEnji Cooper	esac
5245*132f818dSEnji Cooper	symtab_cflags=
5246*132f818dSEnji Cooper	for arg in $LTCFLAGS; do
5247*132f818dSEnji Cooper	  case $arg in
5248*132f818dSEnji Cooper	  -pie | -fpie | -fPIE) ;;
5249*132f818dSEnji Cooper	  *) func_append symtab_cflags " $arg" ;;
5250*132f818dSEnji Cooper	  esac
5251*132f818dSEnji Cooper	done
5252*132f818dSEnji Cooper
5253*132f818dSEnji Cooper	# Now compile the dynamic symbol file.
5254*132f818dSEnji Cooper	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
5255*132f818dSEnji Cooper
5256*132f818dSEnji Cooper	# Clean up the generated files.
5257*132f818dSEnji Cooper	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
5258*132f818dSEnji Cooper
5259*132f818dSEnji Cooper	# Transform the symbol file into the correct name.
5260*132f818dSEnji Cooper	symfileobj=$output_objdir/${my_outputname}S.$objext
5261*132f818dSEnji Cooper	case $host in
5262*132f818dSEnji Cooper	*cygwin* | *mingw* | *windows* | *cegcc* )
5263*132f818dSEnji Cooper	  if test -f "$output_objdir/$my_outputname.def"; then
5264*132f818dSEnji Cooper	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
5265*132f818dSEnji Cooper	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
5266*132f818dSEnji Cooper	  else
5267*132f818dSEnji Cooper	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5268*132f818dSEnji Cooper	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5269*132f818dSEnji Cooper	  fi
5270*132f818dSEnji Cooper	  ;;
5271*132f818dSEnji Cooper	*)
5272*132f818dSEnji Cooper	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5273*132f818dSEnji Cooper	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5274*132f818dSEnji Cooper	  ;;
5275*132f818dSEnji Cooper	esac
5276*132f818dSEnji Cooper	;;
5277*132f818dSEnji Cooper      *)
5278*132f818dSEnji Cooper	func_fatal_error "unknown suffix for '$my_dlsyms'"
5279*132f818dSEnji Cooper	;;
5280*132f818dSEnji Cooper      esac
5281*132f818dSEnji Cooper    else
5282*132f818dSEnji Cooper      # We keep going just in case the user didn't refer to
5283*132f818dSEnji Cooper      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
5284*132f818dSEnji Cooper      # really was required.
5285*132f818dSEnji Cooper
5286*132f818dSEnji Cooper      # Nullify the symbol file.
5287*132f818dSEnji Cooper      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
5288*132f818dSEnji Cooper      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
5289*132f818dSEnji Cooper    fi
5290*132f818dSEnji Cooper}
5291*132f818dSEnji Cooper
5292*132f818dSEnji Cooper# func_cygming_gnu_implib_p ARG
5293*132f818dSEnji Cooper# This predicate returns with zero status (TRUE) if
5294*132f818dSEnji Cooper# ARG is a GNU/binutils-style import library. Returns
5295*132f818dSEnji Cooper# with nonzero status (FALSE) otherwise.
5296*132f818dSEnji Cooperfunc_cygming_gnu_implib_p ()
5297*132f818dSEnji Cooper{
5298*132f818dSEnji Cooper  $debug_cmd
5299*132f818dSEnji Cooper
5300*132f818dSEnji Cooper  func_to_tool_file "$1" func_convert_file_msys_to_w32
5301*132f818dSEnji Cooper  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)$'`
5302*132f818dSEnji Cooper  test -n "$func_cygming_gnu_implib_tmp"
5303*132f818dSEnji Cooper}
5304*132f818dSEnji Cooper
5305*132f818dSEnji Cooper# func_cygming_ms_implib_p ARG
5306*132f818dSEnji Cooper# This predicate returns with zero status (TRUE) if
5307*132f818dSEnji Cooper# ARG is an MS-style import library. Returns
5308*132f818dSEnji Cooper# with nonzero status (FALSE) otherwise.
5309*132f818dSEnji Cooperfunc_cygming_ms_implib_p ()
5310*132f818dSEnji Cooper{
5311*132f818dSEnji Cooper  $debug_cmd
5312*132f818dSEnji Cooper
5313*132f818dSEnji Cooper  func_to_tool_file "$1" func_convert_file_msys_to_w32
5314*132f818dSEnji Cooper  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
5315*132f818dSEnji Cooper  test -n "$func_cygming_ms_implib_tmp"
5316*132f818dSEnji Cooper}
5317*132f818dSEnji Cooper
5318*132f818dSEnji Cooper# func_win32_libid arg
5319*132f818dSEnji Cooper# return the library type of file 'arg'
5320*132f818dSEnji Cooper#
5321*132f818dSEnji Cooper# Need a lot of goo to handle *both* DLLs and import libs
5322*132f818dSEnji Cooper# Has to be a shell function in order to 'eat' the argument
5323*132f818dSEnji Cooper# that is supplied when $file_magic_command is called.
5324*132f818dSEnji Cooper# Despite the name, also deal with 64 bit binaries.
5325*132f818dSEnji Cooperfunc_win32_libid ()
5326*132f818dSEnji Cooper{
5327*132f818dSEnji Cooper  $debug_cmd
5328*132f818dSEnji Cooper
5329*132f818dSEnji Cooper  win32_libid_type=unknown
5330*132f818dSEnji Cooper  win32_fileres=`file -L $1 2>/dev/null`
5331*132f818dSEnji Cooper  case $win32_fileres in
5332*132f818dSEnji Cooper  *ar\ archive\ import\ library*) # definitely import
5333*132f818dSEnji Cooper    win32_libid_type="x86 archive import"
5334*132f818dSEnji Cooper    ;;
5335*132f818dSEnji Cooper  *ar\ archive*) # could be an import, or static
5336*132f818dSEnji Cooper    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
5337*132f818dSEnji Cooper    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
5338*132f818dSEnji Cooper       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64|pe-aarch64)' >/dev/null; then
5339*132f818dSEnji Cooper      case $nm_interface in
5340*132f818dSEnji Cooper      "MS dumpbin")
5341*132f818dSEnji Cooper	if func_cygming_ms_implib_p "$1" ||
5342*132f818dSEnji Cooper	   func_cygming_gnu_implib_p "$1"
5343*132f818dSEnji Cooper	then
5344*132f818dSEnji Cooper	  win32_nmres=import
5345*132f818dSEnji Cooper	else
5346*132f818dSEnji Cooper	  win32_nmres=
5347*132f818dSEnji Cooper	fi
5348*132f818dSEnji Cooper	;;
5349*132f818dSEnji Cooper      *)
5350*132f818dSEnji Cooper	func_to_tool_file "$1" func_convert_file_msys_to_w32
5351*132f818dSEnji Cooper	win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
5352*132f818dSEnji Cooper	  $SED -n -e '
5353*132f818dSEnji Cooper	    1,100{
5354*132f818dSEnji Cooper		/ I /{
5355*132f818dSEnji Cooper		    s|.*|import|
5356*132f818dSEnji Cooper		    p
5357*132f818dSEnji Cooper		    q
5358*132f818dSEnji Cooper		}
5359*132f818dSEnji Cooper	    }'`
5360*132f818dSEnji Cooper	;;
5361*132f818dSEnji Cooper      esac
5362*132f818dSEnji Cooper      case $win32_nmres in
5363*132f818dSEnji Cooper      import*)  win32_libid_type="x86 archive import";;
5364*132f818dSEnji Cooper      *)        win32_libid_type="x86 archive static";;
5365*132f818dSEnji Cooper      esac
5366*132f818dSEnji Cooper    fi
5367*132f818dSEnji Cooper    ;;
5368*132f818dSEnji Cooper  *DLL*)
5369*132f818dSEnji Cooper    win32_libid_type="x86 DLL"
5370*132f818dSEnji Cooper    ;;
5371*132f818dSEnji Cooper  *executable*) # but shell scripts are "executable" too...
5372*132f818dSEnji Cooper    case $win32_fileres in
5373*132f818dSEnji Cooper    *MS\ Windows\ PE\ Intel*)
5374*132f818dSEnji Cooper      win32_libid_type="x86 DLL"
5375*132f818dSEnji Cooper      ;;
5376*132f818dSEnji Cooper    esac
5377*132f818dSEnji Cooper    ;;
5378*132f818dSEnji Cooper  esac
5379*132f818dSEnji Cooper  $ECHO "$win32_libid_type"
5380*132f818dSEnji Cooper}
5381*132f818dSEnji Cooper
5382*132f818dSEnji Cooper# func_cygming_dll_for_implib ARG
5383*132f818dSEnji Cooper#
5384*132f818dSEnji Cooper# Platform-specific function to extract the
5385*132f818dSEnji Cooper# name of the DLL associated with the specified
5386*132f818dSEnji Cooper# import library ARG.
5387*132f818dSEnji Cooper# Invoked by eval'ing the libtool variable
5388*132f818dSEnji Cooper#    $sharedlib_from_linklib_cmd
5389*132f818dSEnji Cooper# Result is available in the variable
5390*132f818dSEnji Cooper#    $sharedlib_from_linklib_result
5391*132f818dSEnji Cooperfunc_cygming_dll_for_implib ()
5392*132f818dSEnji Cooper{
5393*132f818dSEnji Cooper  $debug_cmd
5394*132f818dSEnji Cooper
5395*132f818dSEnji Cooper  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
5396*132f818dSEnji Cooper}
5397*132f818dSEnji Cooper
5398*132f818dSEnji Cooper# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
5399*132f818dSEnji Cooper#
5400*132f818dSEnji Cooper# The is the core of a fallback implementation of a
5401*132f818dSEnji Cooper# platform-specific function to extract the name of the
5402*132f818dSEnji Cooper# DLL associated with the specified import library LIBNAME.
5403*132f818dSEnji Cooper#
5404*132f818dSEnji Cooper# SECTION_NAME is either .idata$6 or .idata$7, depending
5405*132f818dSEnji Cooper# on the platform and compiler that created the implib.
5406*132f818dSEnji Cooper#
5407*132f818dSEnji Cooper# Echos the name of the DLL associated with the
5408*132f818dSEnji Cooper# specified import library.
5409*132f818dSEnji Cooperfunc_cygming_dll_for_implib_fallback_core ()
5410*132f818dSEnji Cooper{
5411*132f818dSEnji Cooper  $debug_cmd
5412*132f818dSEnji Cooper
5413*132f818dSEnji Cooper  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
5414*132f818dSEnji Cooper  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
5415*132f818dSEnji Cooper    $SED '/^Contents of section '"$match_literal"':/{
5416*132f818dSEnji Cooper      # Place marker at beginning of archive member dllname section
5417*132f818dSEnji Cooper      s/.*/====MARK====/
5418*132f818dSEnji Cooper      p
5419*132f818dSEnji Cooper      d
5420*132f818dSEnji Cooper    }
5421*132f818dSEnji Cooper    # These lines can sometimes be longer than 43 characters, but
5422*132f818dSEnji Cooper    # are always uninteresting
5423*132f818dSEnji Cooper    /:[	 ]*file format pe[i]\{,1\}-/d
5424*132f818dSEnji Cooper    /^In archive [^:]*:/d
5425*132f818dSEnji Cooper    # Ensure marker is printed
5426*132f818dSEnji Cooper    /^====MARK====/p
5427*132f818dSEnji Cooper    # Remove all lines with less than 43 characters
5428*132f818dSEnji Cooper    /^.\{43\}/!d
5429*132f818dSEnji Cooper    # From remaining lines, remove first 43 characters
5430*132f818dSEnji Cooper    s/^.\{43\}//' |
5431*132f818dSEnji Cooper    $SED -n '
5432*132f818dSEnji Cooper      # Join marker and all lines until next marker into a single line
5433*132f818dSEnji Cooper      /^====MARK====/ b para
5434*132f818dSEnji Cooper      H
5435*132f818dSEnji Cooper      $ b para
5436*132f818dSEnji Cooper      b
5437*132f818dSEnji Cooper      :para
5438*132f818dSEnji Cooper      x
5439*132f818dSEnji Cooper      s/\n//g
5440*132f818dSEnji Cooper      # Remove the marker
5441*132f818dSEnji Cooper      s/^====MARK====//
5442*132f818dSEnji Cooper      # Remove trailing dots and whitespace
5443*132f818dSEnji Cooper      s/[\. \t]*$//
5444*132f818dSEnji Cooper      # Print
5445*132f818dSEnji Cooper      /./p' |
5446*132f818dSEnji Cooper    # we now have a list, one entry per line, of the stringified
5447*132f818dSEnji Cooper    # contents of the appropriate section of all members of the
5448*132f818dSEnji Cooper    # archive that possess that section. Heuristic: eliminate
5449*132f818dSEnji Cooper    # all those that have a first or second character that is
5450*132f818dSEnji Cooper    # a '.' (that is, objdump's representation of an unprintable
5451*132f818dSEnji Cooper    # character.) This should work for all archives with less than
5452*132f818dSEnji Cooper    # 0x302f exports -- but will fail for DLLs whose name actually
5453*132f818dSEnji Cooper    # begins with a literal '.' or a single character followed by
5454*132f818dSEnji Cooper    # a '.'.
5455*132f818dSEnji Cooper    #
5456*132f818dSEnji Cooper    # Of those that remain, print the first one.
5457*132f818dSEnji Cooper    $SED -e '/^\./d;/^.\./d;q'
5458*132f818dSEnji Cooper}
5459*132f818dSEnji Cooper
5460*132f818dSEnji Cooper# func_cygming_dll_for_implib_fallback ARG
5461*132f818dSEnji Cooper# Platform-specific function to extract the
5462*132f818dSEnji Cooper# name of the DLL associated with the specified
5463*132f818dSEnji Cooper# import library ARG.
5464*132f818dSEnji Cooper#
5465*132f818dSEnji Cooper# This fallback implementation is for use when $DLLTOOL
5466*132f818dSEnji Cooper# does not support the --identify-strict option.
5467*132f818dSEnji Cooper# Invoked by eval'ing the libtool variable
5468*132f818dSEnji Cooper#    $sharedlib_from_linklib_cmd
5469*132f818dSEnji Cooper# Result is available in the variable
5470*132f818dSEnji Cooper#    $sharedlib_from_linklib_result
5471*132f818dSEnji Cooperfunc_cygming_dll_for_implib_fallback ()
5472*132f818dSEnji Cooper{
5473*132f818dSEnji Cooper  $debug_cmd
5474*132f818dSEnji Cooper
5475*132f818dSEnji Cooper  if func_cygming_gnu_implib_p "$1"; then
5476*132f818dSEnji Cooper    # binutils import library
5477*132f818dSEnji Cooper    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
5478*132f818dSEnji Cooper  elif func_cygming_ms_implib_p "$1"; then
5479*132f818dSEnji Cooper    # ms-generated import library
5480*132f818dSEnji Cooper    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
5481*132f818dSEnji Cooper  else
5482*132f818dSEnji Cooper    # unknown
5483*132f818dSEnji Cooper    sharedlib_from_linklib_result=
5484*132f818dSEnji Cooper  fi
5485*132f818dSEnji Cooper}
5486*132f818dSEnji Cooper
5487*132f818dSEnji Cooper
5488*132f818dSEnji Cooper# func_extract_an_archive dir oldlib
5489*132f818dSEnji Cooperfunc_extract_an_archive ()
5490*132f818dSEnji Cooper{
5491*132f818dSEnji Cooper    $debug_cmd
5492*132f818dSEnji Cooper
5493*132f818dSEnji Cooper    f_ex_an_ar_dir=$1; shift
5494*132f818dSEnji Cooper    f_ex_an_ar_oldlib=$1
5495*132f818dSEnji Cooper    if test yes = "$lock_old_archive_extraction"; then
5496*132f818dSEnji Cooper      lockfile=$f_ex_an_ar_oldlib.lock
5497*132f818dSEnji Cooper      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
5498*132f818dSEnji Cooper	func_echo "Waiting for $lockfile to be removed"
5499*132f818dSEnji Cooper	sleep 2
5500*132f818dSEnji Cooper      done
5501*132f818dSEnji Cooper    fi
5502*132f818dSEnji Cooper    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
5503*132f818dSEnji Cooper		   'stat=$?; rm -f "$lockfile"; exit $stat'
5504*132f818dSEnji Cooper    if test yes = "$lock_old_archive_extraction"; then
5505*132f818dSEnji Cooper      $opt_dry_run || rm -f "$lockfile"
5506*132f818dSEnji Cooper    fi
5507*132f818dSEnji Cooper    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
5508*132f818dSEnji Cooper     :
5509*132f818dSEnji Cooper    else
5510*132f818dSEnji Cooper      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
5511*132f818dSEnji Cooper    fi
5512*132f818dSEnji Cooper}
5513*132f818dSEnji Cooper
5514*132f818dSEnji Cooper
5515*132f818dSEnji Cooper# func_extract_archives gentop oldlib ...
5516*132f818dSEnji Cooperfunc_extract_archives ()
5517*132f818dSEnji Cooper{
5518*132f818dSEnji Cooper    $debug_cmd
5519*132f818dSEnji Cooper
5520*132f818dSEnji Cooper    my_gentop=$1; shift
5521*132f818dSEnji Cooper    my_oldlibs=${1+"$@"}
5522*132f818dSEnji Cooper    my_oldobjs=
5523*132f818dSEnji Cooper    my_xlib=
5524*132f818dSEnji Cooper    my_xabs=
5525*132f818dSEnji Cooper    my_xdir=
5526*132f818dSEnji Cooper
5527*132f818dSEnji Cooper    for my_xlib in $my_oldlibs; do
5528*132f818dSEnji Cooper      # Extract the objects.
5529*132f818dSEnji Cooper      case $my_xlib in
5530*132f818dSEnji Cooper	[\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
5531*132f818dSEnji Cooper	*) my_xabs=`pwd`"/$my_xlib" ;;
5532*132f818dSEnji Cooper      esac
5533*132f818dSEnji Cooper      func_basename "$my_xlib"
5534*132f818dSEnji Cooper      my_xlib=$func_basename_result
5535*132f818dSEnji Cooper      my_xlib_u=$my_xlib
5536*132f818dSEnji Cooper      while :; do
5537*132f818dSEnji Cooper        case " $extracted_archives " in
5538*132f818dSEnji Cooper	*" $my_xlib_u "*)
5539*132f818dSEnji Cooper	  func_arith $extracted_serial + 1
5540*132f818dSEnji Cooper	  extracted_serial=$func_arith_result
5541*132f818dSEnji Cooper	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
5542*132f818dSEnji Cooper	*) break ;;
5543*132f818dSEnji Cooper	esac
5544*132f818dSEnji Cooper      done
5545*132f818dSEnji Cooper      extracted_archives="$extracted_archives $my_xlib_u"
5546*132f818dSEnji Cooper      my_xdir=$my_gentop/$my_xlib_u
5547*132f818dSEnji Cooper
5548*132f818dSEnji Cooper      func_mkdir_p "$my_xdir"
5549*132f818dSEnji Cooper
5550*132f818dSEnji Cooper      case $host in
5551*132f818dSEnji Cooper      *-darwin*)
5552*132f818dSEnji Cooper	func_verbose "Extracting $my_xabs"
5553*132f818dSEnji Cooper	# Do not bother doing anything if just a dry run
5554*132f818dSEnji Cooper	$opt_dry_run || {
5555*132f818dSEnji Cooper	  darwin_orig_dir=`pwd`
5556*132f818dSEnji Cooper	  cd $my_xdir || exit $?
5557*132f818dSEnji Cooper	  darwin_archive=$my_xabs
5558*132f818dSEnji Cooper	  darwin_curdir=`pwd`
5559*132f818dSEnji Cooper	  func_basename "$darwin_archive"
5560*132f818dSEnji Cooper	  darwin_base_archive=$func_basename_result
5561*132f818dSEnji Cooper	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
5562*132f818dSEnji Cooper	  if test -n "$darwin_arches"; then
5563*132f818dSEnji Cooper	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
5564*132f818dSEnji Cooper	    darwin_arch=
5565*132f818dSEnji Cooper	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
5566*132f818dSEnji Cooper	    for darwin_arch in  $darwin_arches; do
5567*132f818dSEnji Cooper	      func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
5568*132f818dSEnji Cooper	      $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
5569*132f818dSEnji Cooper	      cd "unfat-$$/$darwin_base_archive-$darwin_arch"
5570*132f818dSEnji Cooper	      func_extract_an_archive "`pwd`" "$darwin_base_archive"
5571*132f818dSEnji Cooper	      cd "$darwin_curdir"
5572*132f818dSEnji Cooper	      $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
5573*132f818dSEnji Cooper	    done # $darwin_arches
5574*132f818dSEnji Cooper            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
5575*132f818dSEnji Cooper	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
5576*132f818dSEnji Cooper	    darwin_file=
5577*132f818dSEnji Cooper	    darwin_files=
5578*132f818dSEnji Cooper	    for darwin_file in $darwin_filelist; do
5579*132f818dSEnji Cooper	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
5580*132f818dSEnji Cooper	      $LIPO -create -output "$darwin_file" $darwin_files
5581*132f818dSEnji Cooper	    done # $darwin_filelist
5582*132f818dSEnji Cooper	    $RM -rf unfat-$$
5583*132f818dSEnji Cooper	    cd "$darwin_orig_dir"
5584*132f818dSEnji Cooper	  else
5585*132f818dSEnji Cooper	    cd $darwin_orig_dir
5586*132f818dSEnji Cooper	    func_extract_an_archive "$my_xdir" "$my_xabs"
5587*132f818dSEnji Cooper	  fi # $darwin_arches
5588*132f818dSEnji Cooper	} # !$opt_dry_run
5589*132f818dSEnji Cooper	;;
5590*132f818dSEnji Cooper      *)
5591*132f818dSEnji Cooper        func_extract_an_archive "$my_xdir" "$my_xabs"
5592*132f818dSEnji Cooper	;;
5593*132f818dSEnji Cooper      esac
5594*132f818dSEnji Cooper      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
5595*132f818dSEnji Cooper    done
5596*132f818dSEnji Cooper
5597*132f818dSEnji Cooper    func_extract_archives_result=$my_oldobjs
5598*132f818dSEnji Cooper}
5599*132f818dSEnji Cooper
5600*132f818dSEnji Cooper
5601*132f818dSEnji Cooper# func_emit_wrapper [arg=no]
5602*132f818dSEnji Cooper#
5603*132f818dSEnji Cooper# Emit a libtool wrapper script on stdout.
5604*132f818dSEnji Cooper# Don't directly open a file because we may want to
5605*132f818dSEnji Cooper# incorporate the script contents within a cygwin/mingw/windows
5606*132f818dSEnji Cooper# wrapper executable.  Must ONLY be called from within
5607*132f818dSEnji Cooper# func_mode_link because it depends on a number of variables
5608*132f818dSEnji Cooper# set therein.
5609*132f818dSEnji Cooper#
5610*132f818dSEnji Cooper# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
5611*132f818dSEnji Cooper# variable will take.  If 'yes', then the emitted script
5612*132f818dSEnji Cooper# will assume that the directory where it is stored is
5613*132f818dSEnji Cooper# the $objdir directory.  This is a cygwin/mingw/windows-specific
5614*132f818dSEnji Cooper# behavior.
5615*132f818dSEnji Cooperfunc_emit_wrapper ()
5616*132f818dSEnji Cooper{
5617*132f818dSEnji Cooper	func_emit_wrapper_arg1=${1-no}
5618*132f818dSEnji Cooper
5619*132f818dSEnji Cooper	$ECHO "\
5620*132f818dSEnji Cooper#! $SHELL
5621*132f818dSEnji Cooper
5622*132f818dSEnji Cooper# $output - temporary wrapper script for $objdir/$outputname
5623*132f818dSEnji Cooper# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5624*132f818dSEnji Cooper#
5625*132f818dSEnji Cooper# The $output program cannot be directly executed until all the libtool
5626*132f818dSEnji Cooper# libraries that it depends on are installed.
5627*132f818dSEnji Cooper#
5628*132f818dSEnji Cooper# This wrapper script should never be moved out of the build directory.
5629*132f818dSEnji Cooper# If it is, it will not operate correctly.
5630*132f818dSEnji Cooper
5631*132f818dSEnji Cooper# Sed substitution that helps us do robust quoting.  It backslashifies
5632*132f818dSEnji Cooper# metacharacters that are still active within double-quoted strings.
5633*132f818dSEnji Coopersed_quote_subst='$sed_quote_subst'
5634*132f818dSEnji Cooper
5635*132f818dSEnji Cooper# Be Bourne compatible
5636*132f818dSEnji Cooperif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
5637*132f818dSEnji Cooper  emulate sh
5638*132f818dSEnji Cooper  NULLCMD=:
5639*132f818dSEnji Cooper  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
5640*132f818dSEnji Cooper  # is contrary to our usage.  Disable this feature.
5641*132f818dSEnji Cooper  alias -g '\${1+\"\$@\"}'='\"\$@\"'
5642*132f818dSEnji Cooper  setopt NO_GLOB_SUBST
5643*132f818dSEnji Cooperelse
5644*132f818dSEnji Cooper  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
5645*132f818dSEnji Cooperfi
5646*132f818dSEnji CooperBIN_SH=xpg4; export BIN_SH # for Tru64
5647*132f818dSEnji CooperDUALCASE=1; export DUALCASE # for MKS sh
5648*132f818dSEnji Cooper
5649*132f818dSEnji Cooper# The HP-UX ksh and POSIX shell print the target directory to stdout
5650*132f818dSEnji Cooper# if CDPATH is set.
5651*132f818dSEnji Cooper(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
5652*132f818dSEnji Cooper
5653*132f818dSEnji Cooperrelink_command=\"$relink_command\"
5654*132f818dSEnji Cooper
5655*132f818dSEnji Cooper# This environment variable determines our operation mode.
5656*132f818dSEnji Cooperif test \"\$libtool_install_magic\" = \"$magic\"; then
5657*132f818dSEnji Cooper  # install mode needs the following variables:
5658*132f818dSEnji Cooper  generated_by_libtool_version='$macro_version'
5659*132f818dSEnji Cooper  notinst_deplibs='$notinst_deplibs'
5660*132f818dSEnji Cooperelse
5661*132f818dSEnji Cooper  # When we are sourced in execute mode, \$file and \$ECHO are already set.
5662*132f818dSEnji Cooper  if test \"\$libtool_execute_magic\" != \"$magic\"; then
5663*132f818dSEnji Cooper    file=\"\$0\""
5664*132f818dSEnji Cooper
5665*132f818dSEnji Cooper    func_quote_arg pretty "$ECHO"
5666*132f818dSEnji Cooper    qECHO=$func_quote_arg_result
5667*132f818dSEnji Cooper    $ECHO "\
5668*132f818dSEnji Cooper
5669*132f818dSEnji Cooper# A function that is used when there is no print builtin or printf.
5670*132f818dSEnji Cooperfunc_fallback_echo ()
5671*132f818dSEnji Cooper{
5672*132f818dSEnji Cooper  eval 'cat <<_LTECHO_EOF
5673*132f818dSEnji Cooper\$1
5674*132f818dSEnji Cooper_LTECHO_EOF'
5675*132f818dSEnji Cooper}
5676*132f818dSEnji Cooper    ECHO=$qECHO
5677*132f818dSEnji Cooper  fi
5678*132f818dSEnji Cooper
5679*132f818dSEnji Cooper# Very basic option parsing. These options are (a) specific to
5680*132f818dSEnji Cooper# the libtool wrapper, (b) are identical between the wrapper
5681*132f818dSEnji Cooper# /script/ and the wrapper /executable/ that is used only on
5682*132f818dSEnji Cooper# windows platforms, and (c) all begin with the string "--lt-"
5683*132f818dSEnji Cooper# (application programs are unlikely to have options that match
5684*132f818dSEnji Cooper# this pattern).
5685*132f818dSEnji Cooper#
5686*132f818dSEnji Cooper# There are only two supported options: --lt-debug and
5687*132f818dSEnji Cooper# --lt-dump-script. There is, deliberately, no --lt-help.
5688*132f818dSEnji Cooper#
5689*132f818dSEnji Cooper# The first argument to this parsing function should be the
5690*132f818dSEnji Cooper# script's $0 value, followed by "$@".
5691*132f818dSEnji Cooperlt_option_debug=
5692*132f818dSEnji Cooperfunc_parse_lt_options ()
5693*132f818dSEnji Cooper{
5694*132f818dSEnji Cooper  lt_script_arg0=\$0
5695*132f818dSEnji Cooper  shift
5696*132f818dSEnji Cooper  for lt_opt
5697*132f818dSEnji Cooper  do
5698*132f818dSEnji Cooper    case \"\$lt_opt\" in
5699*132f818dSEnji Cooper    --lt-debug) lt_option_debug=1 ;;
5700*132f818dSEnji Cooper    --lt-dump-script)
5701*132f818dSEnji Cooper        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
5702*132f818dSEnji Cooper        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
5703*132f818dSEnji Cooper        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
5704*132f818dSEnji Cooper        cat \"\$lt_dump_D/\$lt_dump_F\"
5705*132f818dSEnji Cooper        exit 0
5706*132f818dSEnji Cooper      ;;
5707*132f818dSEnji Cooper    --lt-*)
5708*132f818dSEnji Cooper        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
5709*132f818dSEnji Cooper        exit 1
5710*132f818dSEnji Cooper      ;;
5711*132f818dSEnji Cooper    esac
5712*132f818dSEnji Cooper  done
5713*132f818dSEnji Cooper
5714*132f818dSEnji Cooper  # Print the debug banner immediately:
5715*132f818dSEnji Cooper  if test -n \"\$lt_option_debug\"; then
5716*132f818dSEnji Cooper    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
5717*132f818dSEnji Cooper  fi
5718*132f818dSEnji Cooper}
5719*132f818dSEnji Cooper
5720*132f818dSEnji Cooper# Used when --lt-debug. Prints its arguments to stdout
5721*132f818dSEnji Cooper# (redirection is the responsibility of the caller)
5722*132f818dSEnji Cooperfunc_lt_dump_args ()
5723*132f818dSEnji Cooper{
5724*132f818dSEnji Cooper  lt_dump_args_N=1;
5725*132f818dSEnji Cooper  for lt_arg
5726*132f818dSEnji Cooper  do
5727*132f818dSEnji Cooper    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
5728*132f818dSEnji Cooper    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
5729*132f818dSEnji Cooper  done
5730*132f818dSEnji Cooper}
5731*132f818dSEnji Cooper
5732*132f818dSEnji Cooper# Core function for launching the target application
5733*132f818dSEnji Cooperfunc_exec_program_core ()
5734*132f818dSEnji Cooper{
5735*132f818dSEnji Cooper"
5736*132f818dSEnji Cooper  case $host in
5737*132f818dSEnji Cooper  # Backslashes separate directories on plain windows
5738*132f818dSEnji Cooper  *-*-mingw* | *-*-windows* | *-*-os2* | *-cegcc*)
5739*132f818dSEnji Cooper    $ECHO "\
5740*132f818dSEnji Cooper      if test -n \"\$lt_option_debug\"; then
5741*132f818dSEnji Cooper        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
5742*132f818dSEnji Cooper        func_lt_dump_args \${1+\"\$@\"} 1>&2
5743*132f818dSEnji Cooper      fi
5744*132f818dSEnji Cooper      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
5745*132f818dSEnji Cooper"
5746*132f818dSEnji Cooper    ;;
5747*132f818dSEnji Cooper
5748*132f818dSEnji Cooper  *)
5749*132f818dSEnji Cooper    $ECHO "\
5750*132f818dSEnji Cooper      if test -n \"\$lt_option_debug\"; then
5751*132f818dSEnji Cooper        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
5752*132f818dSEnji Cooper        func_lt_dump_args \${1+\"\$@\"} 1>&2
5753*132f818dSEnji Cooper      fi
5754*132f818dSEnji Cooper      exec \"\$progdir/\$program\" \${1+\"\$@\"}
5755*132f818dSEnji Cooper"
5756*132f818dSEnji Cooper    ;;
5757*132f818dSEnji Cooper  esac
5758*132f818dSEnji Cooper  $ECHO "\
5759*132f818dSEnji Cooper      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
5760*132f818dSEnji Cooper      exit 1
5761*132f818dSEnji Cooper}
5762*132f818dSEnji Cooper
5763*132f818dSEnji Cooper# A function to encapsulate launching the target application
5764*132f818dSEnji Cooper# Strips options in the --lt-* namespace from \$@ and
5765*132f818dSEnji Cooper# launches target application with the remaining arguments.
5766*132f818dSEnji Cooperfunc_exec_program ()
5767*132f818dSEnji Cooper{
5768*132f818dSEnji Cooper  case \" \$* \" in
5769*132f818dSEnji Cooper  *\\ --lt-*)
5770*132f818dSEnji Cooper    for lt_wr_arg
5771*132f818dSEnji Cooper    do
5772*132f818dSEnji Cooper      case \$lt_wr_arg in
5773*132f818dSEnji Cooper      --lt-*) ;;
5774*132f818dSEnji Cooper      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
5775*132f818dSEnji Cooper      esac
5776*132f818dSEnji Cooper      shift
5777*132f818dSEnji Cooper    done ;;
5778*132f818dSEnji Cooper  esac
5779*132f818dSEnji Cooper  func_exec_program_core \${1+\"\$@\"}
5780*132f818dSEnji Cooper}
5781*132f818dSEnji Cooper
5782*132f818dSEnji Cooper  # Parse options
5783*132f818dSEnji Cooper  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
5784*132f818dSEnji Cooper
5785*132f818dSEnji Cooper  # Find the directory that this script lives in.
5786*132f818dSEnji Cooper  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
5787*132f818dSEnji Cooper  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
5788*132f818dSEnji Cooper
5789*132f818dSEnji Cooper  # Follow symbolic links until we get to the real thisdir.
5790*132f818dSEnji Cooper  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
5791*132f818dSEnji Cooper  while test -n \"\$file\"; do
5792*132f818dSEnji Cooper    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
5793*132f818dSEnji Cooper
5794*132f818dSEnji Cooper    # If there was a directory component, then change thisdir.
5795*132f818dSEnji Cooper    if test \"x\$destdir\" != \"x\$file\"; then
5796*132f818dSEnji Cooper      case \"\$destdir\" in
5797*132f818dSEnji Cooper      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
5798*132f818dSEnji Cooper      *) thisdir=\"\$thisdir/\$destdir\" ;;
5799*132f818dSEnji Cooper      esac
5800*132f818dSEnji Cooper    fi
5801*132f818dSEnji Cooper
5802*132f818dSEnji Cooper    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
5803*132f818dSEnji Cooper    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
5804*132f818dSEnji Cooper  done
5805*132f818dSEnji Cooper
5806*132f818dSEnji Cooper  # Usually 'no', except on cygwin/mingw/windows when embedded into
5807*132f818dSEnji Cooper  # the cwrapper.
5808*132f818dSEnji Cooper  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
5809*132f818dSEnji Cooper  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
5810*132f818dSEnji Cooper    # special case for '.'
5811*132f818dSEnji Cooper    if test \"\$thisdir\" = \".\"; then
5812*132f818dSEnji Cooper      thisdir=\`pwd\`
5813*132f818dSEnji Cooper    fi
5814*132f818dSEnji Cooper    # remove .libs from thisdir
5815*132f818dSEnji Cooper    case \"\$thisdir\" in
5816*132f818dSEnji Cooper    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
5817*132f818dSEnji Cooper    $objdir )   thisdir=. ;;
5818*132f818dSEnji Cooper    esac
5819*132f818dSEnji Cooper  fi
5820*132f818dSEnji Cooper
5821*132f818dSEnji Cooper  # Try to get the absolute directory name.
5822*132f818dSEnji Cooper  absdir=\`cd \"\$thisdir\" && pwd\`
5823*132f818dSEnji Cooper  test -n \"\$absdir\" && thisdir=\"\$absdir\"
5824*132f818dSEnji Cooper"
5825*132f818dSEnji Cooper
5826*132f818dSEnji Cooper	if test yes = "$fast_install"; then
5827*132f818dSEnji Cooper	  $ECHO "\
5828*132f818dSEnji Cooper  program=lt-'$outputname'$exeext
5829*132f818dSEnji Cooper  progdir=\"\$thisdir/$objdir\"
5830*132f818dSEnji Cooper
5831*132f818dSEnji Cooper  if test ! -f \"\$progdir/\$program\" ||
5832*132f818dSEnji Cooper     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
5833*132f818dSEnji Cooper       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
5834*132f818dSEnji Cooper
5835*132f818dSEnji Cooper    file=\"\$\$-\$program\"
5836*132f818dSEnji Cooper
5837*132f818dSEnji Cooper    if test ! -d \"\$progdir\"; then
5838*132f818dSEnji Cooper      $MKDIR \"\$progdir\"
5839*132f818dSEnji Cooper    else
5840*132f818dSEnji Cooper      $RM \"\$progdir/\$file\"
5841*132f818dSEnji Cooper    fi"
5842*132f818dSEnji Cooper
5843*132f818dSEnji Cooper	  $ECHO "\
5844*132f818dSEnji Cooper
5845*132f818dSEnji Cooper    # relink executable if necessary
5846*132f818dSEnji Cooper    if test -n \"\$relink_command\"; then
5847*132f818dSEnji Cooper      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
5848*132f818dSEnji Cooper      else
5849*132f818dSEnji Cooper	\$ECHO \"\$relink_command_output\" >&2
5850*132f818dSEnji Cooper	$RM \"\$progdir/\$file\"
5851*132f818dSEnji Cooper	exit 1
5852*132f818dSEnji Cooper      fi
5853*132f818dSEnji Cooper    fi
5854*132f818dSEnji Cooper
5855*132f818dSEnji Cooper    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
5856*132f818dSEnji Cooper    { $RM \"\$progdir/\$program\";
5857*132f818dSEnji Cooper      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
5858*132f818dSEnji Cooper    $RM \"\$progdir/\$file\"
5859*132f818dSEnji Cooper  fi"
5860*132f818dSEnji Cooper	else
5861*132f818dSEnji Cooper	  $ECHO "\
5862*132f818dSEnji Cooper  program='$outputname'
5863*132f818dSEnji Cooper  progdir=\"\$thisdir/$objdir\"
5864*132f818dSEnji Cooper"
5865*132f818dSEnji Cooper	fi
5866*132f818dSEnji Cooper
5867*132f818dSEnji Cooper	$ECHO "\
5868*132f818dSEnji Cooper
5869*132f818dSEnji Cooper  if test -f \"\$progdir/\$program\"; then"
5870*132f818dSEnji Cooper
5871*132f818dSEnji Cooper	# fixup the dll searchpath if we need to.
5872*132f818dSEnji Cooper	#
5873*132f818dSEnji Cooper	# Fix the DLL searchpath if we need to.  Do this before prepending
5874*132f818dSEnji Cooper	# to shlibpath, because on Windows, both are PATH and uninstalled
5875*132f818dSEnji Cooper	# libraries must come first.
5876*132f818dSEnji Cooper	if test -n "$dllsearchpath"; then
5877*132f818dSEnji Cooper	  $ECHO "\
5878*132f818dSEnji Cooper    # Add the dll search path components to the executable PATH
5879*132f818dSEnji Cooper    PATH=$dllsearchpath:\$PATH
5880*132f818dSEnji Cooper"
5881*132f818dSEnji Cooper	fi
5882*132f818dSEnji Cooper
5883*132f818dSEnji Cooper	# Export our shlibpath_var if we have one.
5884*132f818dSEnji Cooper	if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5885*132f818dSEnji Cooper	  $ECHO "\
5886*132f818dSEnji Cooper    # Add our own library path to $shlibpath_var
5887*132f818dSEnji Cooper    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
5888*132f818dSEnji Cooper
5889*132f818dSEnji Cooper    # Some systems cannot cope with colon-terminated $shlibpath_var
5890*132f818dSEnji Cooper    # The second colon is a workaround for a bug in BeOS R4 sed
5891*132f818dSEnji Cooper    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
5892*132f818dSEnji Cooper
5893*132f818dSEnji Cooper    export $shlibpath_var
5894*132f818dSEnji Cooper"
5895*132f818dSEnji Cooper	fi
5896*132f818dSEnji Cooper
5897*132f818dSEnji Cooper	$ECHO "\
5898*132f818dSEnji Cooper    if test \"\$libtool_execute_magic\" != \"$magic\"; then
5899*132f818dSEnji Cooper      # Run the actual program with our arguments.
5900*132f818dSEnji Cooper      func_exec_program \${1+\"\$@\"}
5901*132f818dSEnji Cooper    fi
5902*132f818dSEnji Cooper  else
5903*132f818dSEnji Cooper    # The program doesn't exist.
5904*132f818dSEnji Cooper    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
5905*132f818dSEnji Cooper    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
5906*132f818dSEnji Cooper    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
5907*132f818dSEnji Cooper    exit 1
5908*132f818dSEnji Cooper  fi
5909*132f818dSEnji Cooperfi\
5910*132f818dSEnji Cooper"
5911*132f818dSEnji Cooper}
5912*132f818dSEnji Cooper
5913*132f818dSEnji Cooper
5914*132f818dSEnji Cooper# func_emit_cwrapperexe_src
5915*132f818dSEnji Cooper# emit the source code for a wrapper executable on stdout
5916*132f818dSEnji Cooper# Must ONLY be called from within func_mode_link because
5917*132f818dSEnji Cooper# it depends on a number of variable set therein.
5918*132f818dSEnji Cooperfunc_emit_cwrapperexe_src ()
5919*132f818dSEnji Cooper{
5920*132f818dSEnji Cooper	cat <<EOF
5921*132f818dSEnji Cooper
5922*132f818dSEnji Cooper/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
5923*132f818dSEnji Cooper   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5924*132f818dSEnji Cooper
5925*132f818dSEnji Cooper   The $output program cannot be directly executed until all the libtool
5926*132f818dSEnji Cooper   libraries that it depends on are installed.
5927*132f818dSEnji Cooper
5928*132f818dSEnji Cooper   This wrapper executable should never be moved out of the build directory.
5929*132f818dSEnji Cooper   If it is, it will not operate correctly.
5930*132f818dSEnji Cooper*/
5931*132f818dSEnji CooperEOF
5932*132f818dSEnji Cooper	    cat <<"EOF"
5933*132f818dSEnji Cooper#ifdef _MSC_VER
5934*132f818dSEnji Cooper# define _CRT_SECURE_NO_DEPRECATE 1
5935*132f818dSEnji Cooper#endif
5936*132f818dSEnji Cooper#include <stdio.h>
5937*132f818dSEnji Cooper#include <stdlib.h>
5938*132f818dSEnji Cooper#if defined _WIN32 && !defined __GNUC__
5939*132f818dSEnji Cooper# include <direct.h>
5940*132f818dSEnji Cooper# include <process.h>
5941*132f818dSEnji Cooper# include <io.h>
5942*132f818dSEnji Cooper#else
5943*132f818dSEnji Cooper# include <unistd.h>
5944*132f818dSEnji Cooper# include <stdint.h>
5945*132f818dSEnji Cooper# ifdef __CYGWIN__
5946*132f818dSEnji Cooper#  include <io.h>
5947*132f818dSEnji Cooper# endif
5948*132f818dSEnji Cooper#endif
5949*132f818dSEnji Cooper#include <malloc.h>
5950*132f818dSEnji Cooper#include <stdarg.h>
5951*132f818dSEnji Cooper#include <assert.h>
5952*132f818dSEnji Cooper#include <string.h>
5953*132f818dSEnji Cooper#include <ctype.h>
5954*132f818dSEnji Cooper#include <errno.h>
5955*132f818dSEnji Cooper#include <fcntl.h>
5956*132f818dSEnji Cooper#include <sys/stat.h>
5957*132f818dSEnji Cooper
5958*132f818dSEnji Cooper#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
5959*132f818dSEnji Cooper
5960*132f818dSEnji Cooper/* declarations of non-ANSI functions */
5961*132f818dSEnji Cooper#if defined __MINGW32__
5962*132f818dSEnji Cooper# ifdef __STRICT_ANSI__
5963*132f818dSEnji Cooper_CRTIMP int __cdecl _putenv (const char *);
5964*132f818dSEnji Cooper# endif
5965*132f818dSEnji Cooper#elif defined __CYGWIN__
5966*132f818dSEnji Cooper# ifdef __STRICT_ANSI__
5967*132f818dSEnji Cooperchar *realpath (const char *, char *);
5968*132f818dSEnji Cooperint putenv (char *);
5969*132f818dSEnji Cooperint setenv (const char *, const char *, int);
5970*132f818dSEnji Cooper# endif
5971*132f818dSEnji Cooper/* #elif defined other_platform || defined ... */
5972*132f818dSEnji Cooper#endif
5973*132f818dSEnji Cooper
5974*132f818dSEnji Cooper/* portability defines, excluding path handling macros */
5975*132f818dSEnji Cooper#if defined _MSC_VER
5976*132f818dSEnji Cooper# define setmode _setmode
5977*132f818dSEnji Cooper# define stat    _stat
5978*132f818dSEnji Cooper# define chmod   _chmod
5979*132f818dSEnji Cooper# define getcwd  _getcwd
5980*132f818dSEnji Cooper# define putenv  _putenv
5981*132f818dSEnji Cooper# define S_IXUSR _S_IEXEC
5982*132f818dSEnji Cooper#elif defined __MINGW32__
5983*132f818dSEnji Cooper# define setmode _setmode
5984*132f818dSEnji Cooper# define stat    _stat
5985*132f818dSEnji Cooper# define chmod   _chmod
5986*132f818dSEnji Cooper# define getcwd  _getcwd
5987*132f818dSEnji Cooper# define putenv  _putenv
5988*132f818dSEnji Cooper#elif defined __CYGWIN__
5989*132f818dSEnji Cooper# define HAVE_SETENV
5990*132f818dSEnji Cooper# define FOPEN_WB "wb"
5991*132f818dSEnji Cooper/* #elif defined other platforms ... */
5992*132f818dSEnji Cooper#endif
5993*132f818dSEnji Cooper
5994*132f818dSEnji Cooper#if defined PATH_MAX
5995*132f818dSEnji Cooper# define LT_PATHMAX PATH_MAX
5996*132f818dSEnji Cooper#elif defined MAXPATHLEN
5997*132f818dSEnji Cooper# define LT_PATHMAX MAXPATHLEN
5998*132f818dSEnji Cooper#else
5999*132f818dSEnji Cooper# define LT_PATHMAX 1024
6000*132f818dSEnji Cooper#endif
6001*132f818dSEnji Cooper
6002*132f818dSEnji Cooper#ifndef S_IXOTH
6003*132f818dSEnji Cooper# define S_IXOTH 0
6004*132f818dSEnji Cooper#endif
6005*132f818dSEnji Cooper#ifndef S_IXGRP
6006*132f818dSEnji Cooper# define S_IXGRP 0
6007*132f818dSEnji Cooper#endif
6008*132f818dSEnji Cooper
6009*132f818dSEnji Cooper/* path handling portability macros */
6010*132f818dSEnji Cooper#ifndef DIR_SEPARATOR
6011*132f818dSEnji Cooper# define DIR_SEPARATOR '/'
6012*132f818dSEnji Cooper# define PATH_SEPARATOR ':'
6013*132f818dSEnji Cooper#endif
6014*132f818dSEnji Cooper
6015*132f818dSEnji Cooper#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
6016*132f818dSEnji Cooper  defined __OS2__
6017*132f818dSEnji Cooper# define HAVE_DOS_BASED_FILE_SYSTEM
6018*132f818dSEnji Cooper# define FOPEN_WB "wb"
6019*132f818dSEnji Cooper# ifndef DIR_SEPARATOR_2
6020*132f818dSEnji Cooper#  define DIR_SEPARATOR_2 '\\'
6021*132f818dSEnji Cooper# endif
6022*132f818dSEnji Cooper# ifndef PATH_SEPARATOR_2
6023*132f818dSEnji Cooper#  define PATH_SEPARATOR_2 ';'
6024*132f818dSEnji Cooper# endif
6025*132f818dSEnji Cooper#endif
6026*132f818dSEnji Cooper
6027*132f818dSEnji Cooper#ifndef DIR_SEPARATOR_2
6028*132f818dSEnji Cooper# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
6029*132f818dSEnji Cooper#else /* DIR_SEPARATOR_2 */
6030*132f818dSEnji Cooper# define IS_DIR_SEPARATOR(ch) \
6031*132f818dSEnji Cooper	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
6032*132f818dSEnji Cooper#endif /* DIR_SEPARATOR_2 */
6033*132f818dSEnji Cooper
6034*132f818dSEnji Cooper#ifndef PATH_SEPARATOR_2
6035*132f818dSEnji Cooper# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
6036*132f818dSEnji Cooper#else /* PATH_SEPARATOR_2 */
6037*132f818dSEnji Cooper# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
6038*132f818dSEnji Cooper#endif /* PATH_SEPARATOR_2 */
6039*132f818dSEnji Cooper
6040*132f818dSEnji Cooper#ifndef FOPEN_WB
6041*132f818dSEnji Cooper# define FOPEN_WB "w"
6042*132f818dSEnji Cooper#endif
6043*132f818dSEnji Cooper#ifndef _O_BINARY
6044*132f818dSEnji Cooper# define _O_BINARY 0
6045*132f818dSEnji Cooper#endif
6046*132f818dSEnji Cooper
6047*132f818dSEnji Cooper#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
6048*132f818dSEnji Cooper#define XFREE(stale) do { \
6049*132f818dSEnji Cooper  if (stale) { free (stale); stale = 0; } \
6050*132f818dSEnji Cooper} while (0)
6051*132f818dSEnji Cooper
6052*132f818dSEnji Cooper#if defined LT_DEBUGWRAPPER
6053*132f818dSEnji Cooperstatic int lt_debug = 1;
6054*132f818dSEnji Cooper#else
6055*132f818dSEnji Cooperstatic int lt_debug = 0;
6056*132f818dSEnji Cooper#endif
6057*132f818dSEnji Cooper
6058*132f818dSEnji Cooperconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
6059*132f818dSEnji Cooper
6060*132f818dSEnji Coopervoid *xmalloc (size_t num);
6061*132f818dSEnji Cooperchar *xstrdup (const char *string);
6062*132f818dSEnji Cooperconst char *base_name (const char *name);
6063*132f818dSEnji Cooperchar *find_executable (const char *wrapper);
6064*132f818dSEnji Cooperchar *chase_symlinks (const char *pathspec);
6065*132f818dSEnji Cooperint make_executable (const char *path);
6066*132f818dSEnji Cooperint check_executable (const char *path);
6067*132f818dSEnji Cooperchar *strendzap (char *str, const char *pat);
6068*132f818dSEnji Coopervoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
6069*132f818dSEnji Coopervoid lt_fatal (const char *file, int line, const char *message, ...);
6070*132f818dSEnji Cooperstatic const char *nonnull (const char *s);
6071*132f818dSEnji Cooperstatic const char *nonempty (const char *s);
6072*132f818dSEnji Coopervoid lt_setenv (const char *name, const char *value);
6073*132f818dSEnji Cooperchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
6074*132f818dSEnji Coopervoid lt_update_exe_path (const char *name, const char *value);
6075*132f818dSEnji Coopervoid lt_update_lib_path (const char *name, const char *value);
6076*132f818dSEnji Cooperchar **prepare_spawn (char **argv);
6077*132f818dSEnji Coopervoid lt_dump_script (FILE *f);
6078*132f818dSEnji CooperEOF
6079*132f818dSEnji Cooper
6080*132f818dSEnji Cooper	    cat <<EOF
6081*132f818dSEnji Cooper#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
6082*132f818dSEnji Cooper# define externally_visible volatile
6083*132f818dSEnji Cooper#else
6084*132f818dSEnji Cooper# define externally_visible __attribute__((externally_visible)) volatile
6085*132f818dSEnji Cooper#endif
6086*132f818dSEnji Cooperexternally_visible const char * MAGIC_EXE = "$magic_exe";
6087*132f818dSEnji Cooperconst char * LIB_PATH_VARNAME = "$shlibpath_var";
6088*132f818dSEnji CooperEOF
6089*132f818dSEnji Cooper
6090*132f818dSEnji Cooper	    if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
6091*132f818dSEnji Cooper              func_to_host_path "$temp_rpath"
6092*132f818dSEnji Cooper	      cat <<EOF
6093*132f818dSEnji Cooperconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
6094*132f818dSEnji CooperEOF
6095*132f818dSEnji Cooper	    else
6096*132f818dSEnji Cooper	      cat <<"EOF"
6097*132f818dSEnji Cooperconst char * LIB_PATH_VALUE   = "";
6098*132f818dSEnji CooperEOF
6099*132f818dSEnji Cooper	    fi
6100*132f818dSEnji Cooper
6101*132f818dSEnji Cooper	    if test -n "$dllsearchpath"; then
6102*132f818dSEnji Cooper              func_to_host_path "$dllsearchpath:"
6103*132f818dSEnji Cooper	      cat <<EOF
6104*132f818dSEnji Cooperconst char * EXE_PATH_VARNAME = "PATH";
6105*132f818dSEnji Cooperconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
6106*132f818dSEnji CooperEOF
6107*132f818dSEnji Cooper	    else
6108*132f818dSEnji Cooper	      cat <<"EOF"
6109*132f818dSEnji Cooperconst char * EXE_PATH_VARNAME = "";
6110*132f818dSEnji Cooperconst char * EXE_PATH_VALUE   = "";
6111*132f818dSEnji CooperEOF
6112*132f818dSEnji Cooper	    fi
6113*132f818dSEnji Cooper
6114*132f818dSEnji Cooper	    if test yes = "$fast_install"; then
6115*132f818dSEnji Cooper	      cat <<EOF
6116*132f818dSEnji Cooperconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
6117*132f818dSEnji CooperEOF
6118*132f818dSEnji Cooper	    else
6119*132f818dSEnji Cooper	      cat <<EOF
6120*132f818dSEnji Cooperconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
6121*132f818dSEnji CooperEOF
6122*132f818dSEnji Cooper	    fi
6123*132f818dSEnji Cooper
6124*132f818dSEnji Cooper
6125*132f818dSEnji Cooper	    cat <<"EOF"
6126*132f818dSEnji Cooper
6127*132f818dSEnji Cooper#define LTWRAPPER_OPTION_PREFIX         "--lt-"
6128*132f818dSEnji Cooper
6129*132f818dSEnji Cooperstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
6130*132f818dSEnji Cooperstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
6131*132f818dSEnji Cooperstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
6132*132f818dSEnji Cooper
6133*132f818dSEnji Cooperint
6134*132f818dSEnji Coopermain (int argc, char *argv[])
6135*132f818dSEnji Cooper{
6136*132f818dSEnji Cooper  char **newargz;
6137*132f818dSEnji Cooper  int  newargc;
6138*132f818dSEnji Cooper  char *tmp_pathspec;
6139*132f818dSEnji Cooper  char *actual_cwrapper_path;
6140*132f818dSEnji Cooper  char *actual_cwrapper_name;
6141*132f818dSEnji Cooper  char *target_name;
6142*132f818dSEnji Cooper  char *lt_argv_zero;
6143*132f818dSEnji Cooper  int rval = 127;
6144*132f818dSEnji Cooper
6145*132f818dSEnji Cooper  int i;
6146*132f818dSEnji Cooper
6147*132f818dSEnji Cooper  program_name = (char *) xstrdup (base_name (argv[0]));
6148*132f818dSEnji Cooper  newargz = XMALLOC (char *, (size_t) argc + 1);
6149*132f818dSEnji Cooper
6150*132f818dSEnji Cooper  /* very simple arg parsing; don't want to rely on getopt
6151*132f818dSEnji Cooper   * also, copy all non cwrapper options to newargz, except
6152*132f818dSEnji Cooper   * argz[0], which is handled differently
6153*132f818dSEnji Cooper   */
6154*132f818dSEnji Cooper  newargc=0;
6155*132f818dSEnji Cooper  for (i = 1; i < argc; i++)
6156*132f818dSEnji Cooper    {
6157*132f818dSEnji Cooper      if (STREQ (argv[i], dumpscript_opt))
6158*132f818dSEnji Cooper	{
6159*132f818dSEnji CooperEOF
6160*132f818dSEnji Cooper	    case $host in
6161*132f818dSEnji Cooper	      *mingw* | *windows* | *cygwin* )
6162*132f818dSEnji Cooper		# make stdout use "unix" line endings
6163*132f818dSEnji Cooper		echo "          setmode(1,_O_BINARY);"
6164*132f818dSEnji Cooper		;;
6165*132f818dSEnji Cooper	      esac
6166*132f818dSEnji Cooper
6167*132f818dSEnji Cooper	    cat <<"EOF"
6168*132f818dSEnji Cooper	  lt_dump_script (stdout);
6169*132f818dSEnji Cooper	  return 0;
6170*132f818dSEnji Cooper	}
6171*132f818dSEnji Cooper      if (STREQ (argv[i], debug_opt))
6172*132f818dSEnji Cooper	{
6173*132f818dSEnji Cooper          lt_debug = 1;
6174*132f818dSEnji Cooper          continue;
6175*132f818dSEnji Cooper	}
6176*132f818dSEnji Cooper      if (STREQ (argv[i], ltwrapper_option_prefix))
6177*132f818dSEnji Cooper        {
6178*132f818dSEnji Cooper          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
6179*132f818dSEnji Cooper             namespace, but it is not one of the ones we know about and
6180*132f818dSEnji Cooper             have already dealt with, above (including dump-script), then
6181*132f818dSEnji Cooper             report an error. Otherwise, targets might begin to believe
6182*132f818dSEnji Cooper             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
6183*132f818dSEnji Cooper             namespace. The first time any user complains about this, we'll
6184*132f818dSEnji Cooper             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
6185*132f818dSEnji Cooper             or a configure.ac-settable value.
6186*132f818dSEnji Cooper           */
6187*132f818dSEnji Cooper          lt_fatal (__FILE__, __LINE__,
6188*132f818dSEnji Cooper		    "unrecognized %s option: '%s'",
6189*132f818dSEnji Cooper                    ltwrapper_option_prefix, argv[i]);
6190*132f818dSEnji Cooper        }
6191*132f818dSEnji Cooper      /* otherwise ... */
6192*132f818dSEnji Cooper      newargz[++newargc] = xstrdup (argv[i]);
6193*132f818dSEnji Cooper    }
6194*132f818dSEnji Cooper  newargz[++newargc] = NULL;
6195*132f818dSEnji Cooper
6196*132f818dSEnji CooperEOF
6197*132f818dSEnji Cooper	    cat <<EOF
6198*132f818dSEnji Cooper  /* The GNU banner must be the first non-error debug message */
6199*132f818dSEnji Cooper  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
6200*132f818dSEnji CooperEOF
6201*132f818dSEnji Cooper	    cat <<"EOF"
6202*132f818dSEnji Cooper  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
6203*132f818dSEnji Cooper  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
6204*132f818dSEnji Cooper
6205*132f818dSEnji Cooper  tmp_pathspec = find_executable (argv[0]);
6206*132f818dSEnji Cooper  if (tmp_pathspec == NULL)
6207*132f818dSEnji Cooper    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
6208*132f818dSEnji Cooper  lt_debugprintf (__FILE__, __LINE__,
6209*132f818dSEnji Cooper                  "(main) found exe (before symlink chase) at: %s\n",
6210*132f818dSEnji Cooper		  tmp_pathspec);
6211*132f818dSEnji Cooper
6212*132f818dSEnji Cooper  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
6213*132f818dSEnji Cooper  lt_debugprintf (__FILE__, __LINE__,
6214*132f818dSEnji Cooper                  "(main) found exe (after symlink chase) at: %s\n",
6215*132f818dSEnji Cooper		  actual_cwrapper_path);
6216*132f818dSEnji Cooper  XFREE (tmp_pathspec);
6217*132f818dSEnji Cooper
6218*132f818dSEnji Cooper  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
6219*132f818dSEnji Cooper  strendzap (actual_cwrapper_path, actual_cwrapper_name);
6220*132f818dSEnji Cooper
6221*132f818dSEnji Cooper  /* wrapper name transforms */
6222*132f818dSEnji Cooper  strendzap (actual_cwrapper_name, ".exe");
6223*132f818dSEnji Cooper  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
6224*132f818dSEnji Cooper  XFREE (actual_cwrapper_name);
6225*132f818dSEnji Cooper  actual_cwrapper_name = tmp_pathspec;
6226*132f818dSEnji Cooper  tmp_pathspec = 0;
6227*132f818dSEnji Cooper
6228*132f818dSEnji Cooper  /* target_name transforms -- use actual target program name; might have lt- prefix */
6229*132f818dSEnji Cooper  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
6230*132f818dSEnji Cooper  strendzap (target_name, ".exe");
6231*132f818dSEnji Cooper  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
6232*132f818dSEnji Cooper  XFREE (target_name);
6233*132f818dSEnji Cooper  target_name = tmp_pathspec;
6234*132f818dSEnji Cooper  tmp_pathspec = 0;
6235*132f818dSEnji Cooper
6236*132f818dSEnji Cooper  lt_debugprintf (__FILE__, __LINE__,
6237*132f818dSEnji Cooper		  "(main) libtool target name: %s\n",
6238*132f818dSEnji Cooper		  target_name);
6239*132f818dSEnji CooperEOF
6240*132f818dSEnji Cooper
6241*132f818dSEnji Cooper	    cat <<EOF
6242*132f818dSEnji Cooper  newargz[0] =
6243*132f818dSEnji Cooper    XMALLOC (char, (strlen (actual_cwrapper_path) +
6244*132f818dSEnji Cooper		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
6245*132f818dSEnji Cooper  strcpy (newargz[0], actual_cwrapper_path);
6246*132f818dSEnji Cooper  strcat (newargz[0], "$objdir");
6247*132f818dSEnji Cooper  strcat (newargz[0], "/");
6248*132f818dSEnji CooperEOF
6249*132f818dSEnji Cooper
6250*132f818dSEnji Cooper	    cat <<"EOF"
6251*132f818dSEnji Cooper  /* stop here, and copy so we don't have to do this twice */
6252*132f818dSEnji Cooper  tmp_pathspec = xstrdup (newargz[0]);
6253*132f818dSEnji Cooper
6254*132f818dSEnji Cooper  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
6255*132f818dSEnji Cooper  strcat (newargz[0], actual_cwrapper_name);
6256*132f818dSEnji Cooper
6257*132f818dSEnji Cooper  /* DO want the lt- prefix here if it exists, so use target_name */
6258*132f818dSEnji Cooper  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
6259*132f818dSEnji Cooper  XFREE (tmp_pathspec);
6260*132f818dSEnji Cooper  tmp_pathspec = NULL;
6261*132f818dSEnji CooperEOF
6262*132f818dSEnji Cooper
6263*132f818dSEnji Cooper	    case $host_os in
6264*132f818dSEnji Cooper	      mingw* | windows*)
6265*132f818dSEnji Cooper	    cat <<"EOF"
6266*132f818dSEnji Cooper  {
6267*132f818dSEnji Cooper    char* p;
6268*132f818dSEnji Cooper    while ((p = strchr (newargz[0], '\\')) != NULL)
6269*132f818dSEnji Cooper      {
6270*132f818dSEnji Cooper	*p = '/';
6271*132f818dSEnji Cooper      }
6272*132f818dSEnji Cooper    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
6273*132f818dSEnji Cooper      {
6274*132f818dSEnji Cooper	*p = '/';
6275*132f818dSEnji Cooper      }
6276*132f818dSEnji Cooper  }
6277*132f818dSEnji CooperEOF
6278*132f818dSEnji Cooper	    ;;
6279*132f818dSEnji Cooper	    esac
6280*132f818dSEnji Cooper
6281*132f818dSEnji Cooper	    cat <<"EOF"
6282*132f818dSEnji Cooper  XFREE (target_name);
6283*132f818dSEnji Cooper  XFREE (actual_cwrapper_path);
6284*132f818dSEnji Cooper  XFREE (actual_cwrapper_name);
6285*132f818dSEnji Cooper
6286*132f818dSEnji Cooper  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
6287*132f818dSEnji Cooper  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
6288*132f818dSEnji Cooper  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
6289*132f818dSEnji Cooper     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
6290*132f818dSEnji Cooper     because on Windows, both *_VARNAMEs are PATH but uninstalled
6291*132f818dSEnji Cooper     libraries must come first. */
6292*132f818dSEnji Cooper  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
6293*132f818dSEnji Cooper  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
6294*132f818dSEnji Cooper
6295*132f818dSEnji Cooper  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
6296*132f818dSEnji Cooper		  nonnull (lt_argv_zero));
6297*132f818dSEnji Cooper  for (i = 0; i < newargc; i++)
6298*132f818dSEnji Cooper    {
6299*132f818dSEnji Cooper      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
6300*132f818dSEnji Cooper		      i, nonnull (newargz[i]));
6301*132f818dSEnji Cooper    }
6302*132f818dSEnji Cooper
6303*132f818dSEnji CooperEOF
6304*132f818dSEnji Cooper
6305*132f818dSEnji Cooper	    case $host_os in
6306*132f818dSEnji Cooper	      mingw* | windows*)
6307*132f818dSEnji Cooper		cat <<"EOF"
6308*132f818dSEnji Cooper  /* execv doesn't actually work on mingw as expected on unix */
6309*132f818dSEnji Cooper  newargz = prepare_spawn (newargz);
6310*132f818dSEnji Cooper  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
6311*132f818dSEnji Cooper  if (rval == -1)
6312*132f818dSEnji Cooper    {
6313*132f818dSEnji Cooper      /* failed to start process */
6314*132f818dSEnji Cooper      lt_debugprintf (__FILE__, __LINE__,
6315*132f818dSEnji Cooper		      "(main) failed to launch target \"%s\": %s\n",
6316*132f818dSEnji Cooper		      lt_argv_zero, nonnull (strerror (errno)));
6317*132f818dSEnji Cooper      return 127;
6318*132f818dSEnji Cooper    }
6319*132f818dSEnji Cooper  return rval;
6320*132f818dSEnji CooperEOF
6321*132f818dSEnji Cooper		;;
6322*132f818dSEnji Cooper	      *)
6323*132f818dSEnji Cooper		cat <<"EOF"
6324*132f818dSEnji Cooper  execv (lt_argv_zero, newargz);
6325*132f818dSEnji Cooper  return rval; /* =127, but avoids unused variable warning */
6326*132f818dSEnji CooperEOF
6327*132f818dSEnji Cooper		;;
6328*132f818dSEnji Cooper	    esac
6329*132f818dSEnji Cooper
6330*132f818dSEnji Cooper	    cat <<"EOF"
6331*132f818dSEnji Cooper}
6332*132f818dSEnji Cooper
6333*132f818dSEnji Coopervoid *
6334*132f818dSEnji Cooperxmalloc (size_t num)
6335*132f818dSEnji Cooper{
6336*132f818dSEnji Cooper  void *p = (void *) malloc (num);
6337*132f818dSEnji Cooper  if (!p)
6338*132f818dSEnji Cooper    lt_fatal (__FILE__, __LINE__, "memory exhausted");
6339*132f818dSEnji Cooper
6340*132f818dSEnji Cooper  return p;
6341*132f818dSEnji Cooper}
6342*132f818dSEnji Cooper
6343*132f818dSEnji Cooperchar *
6344*132f818dSEnji Cooperxstrdup (const char *string)
6345*132f818dSEnji Cooper{
6346*132f818dSEnji Cooper  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
6347*132f818dSEnji Cooper			  string) : NULL;
6348*132f818dSEnji Cooper}
6349*132f818dSEnji Cooper
6350*132f818dSEnji Cooperconst char *
6351*132f818dSEnji Cooperbase_name (const char *name)
6352*132f818dSEnji Cooper{
6353*132f818dSEnji Cooper  const char *base;
6354*132f818dSEnji Cooper
6355*132f818dSEnji Cooper#if defined HAVE_DOS_BASED_FILE_SYSTEM
6356*132f818dSEnji Cooper  /* Skip over the disk name in MSDOS pathnames. */
6357*132f818dSEnji Cooper  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
6358*132f818dSEnji Cooper    name += 2;
6359*132f818dSEnji Cooper#endif
6360*132f818dSEnji Cooper
6361*132f818dSEnji Cooper  for (base = name; *name; name++)
6362*132f818dSEnji Cooper    if (IS_DIR_SEPARATOR (*name))
6363*132f818dSEnji Cooper      base = name + 1;
6364*132f818dSEnji Cooper  return base;
6365*132f818dSEnji Cooper}
6366*132f818dSEnji Cooper
6367*132f818dSEnji Cooperint
6368*132f818dSEnji Coopercheck_executable (const char *path)
6369*132f818dSEnji Cooper{
6370*132f818dSEnji Cooper  struct stat st;
6371*132f818dSEnji Cooper
6372*132f818dSEnji Cooper  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
6373*132f818dSEnji Cooper                  nonempty (path));
6374*132f818dSEnji Cooper  if ((!path) || (!*path))
6375*132f818dSEnji Cooper    return 0;
6376*132f818dSEnji Cooper
6377*132f818dSEnji Cooper  if ((stat (path, &st) >= 0)
6378*132f818dSEnji Cooper      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
6379*132f818dSEnji Cooper    return 1;
6380*132f818dSEnji Cooper  else
6381*132f818dSEnji Cooper    return 0;
6382*132f818dSEnji Cooper}
6383*132f818dSEnji Cooper
6384*132f818dSEnji Cooperint
6385*132f818dSEnji Coopermake_executable (const char *path)
6386*132f818dSEnji Cooper{
6387*132f818dSEnji Cooper  int rval = 0;
6388*132f818dSEnji Cooper  struct stat st;
6389*132f818dSEnji Cooper
6390*132f818dSEnji Cooper  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
6391*132f818dSEnji Cooper                  nonempty (path));
6392*132f818dSEnji Cooper  if ((!path) || (!*path))
6393*132f818dSEnji Cooper    return 0;
6394*132f818dSEnji Cooper
6395*132f818dSEnji Cooper  if (stat (path, &st) >= 0)
6396*132f818dSEnji Cooper    {
6397*132f818dSEnji Cooper      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
6398*132f818dSEnji Cooper    }
6399*132f818dSEnji Cooper  return rval;
6400*132f818dSEnji Cooper}
6401*132f818dSEnji Cooper
6402*132f818dSEnji Cooper/* Searches for the full path of the wrapper.  Returns
6403*132f818dSEnji Cooper   newly allocated full path name if found, NULL otherwise
6404*132f818dSEnji Cooper   Does not chase symlinks, even on platforms that support them.
6405*132f818dSEnji Cooper*/
6406*132f818dSEnji Cooperchar *
6407*132f818dSEnji Cooperfind_executable (const char *wrapper)
6408*132f818dSEnji Cooper{
6409*132f818dSEnji Cooper  int has_slash = 0;
6410*132f818dSEnji Cooper  const char *p;
6411*132f818dSEnji Cooper  const char *p_next;
6412*132f818dSEnji Cooper  /* static buffer for getcwd */
6413*132f818dSEnji Cooper  char tmp[LT_PATHMAX + 1];
6414*132f818dSEnji Cooper  size_t tmp_len;
6415*132f818dSEnji Cooper  char *concat_name;
6416*132f818dSEnji Cooper
6417*132f818dSEnji Cooper  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
6418*132f818dSEnji Cooper                  nonempty (wrapper));
6419*132f818dSEnji Cooper
6420*132f818dSEnji Cooper  if ((wrapper == NULL) || (*wrapper == '\0'))
6421*132f818dSEnji Cooper    return NULL;
6422*132f818dSEnji Cooper
6423*132f818dSEnji Cooper  /* Absolute path? */
6424*132f818dSEnji Cooper#if defined HAVE_DOS_BASED_FILE_SYSTEM
6425*132f818dSEnji Cooper  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
6426*132f818dSEnji Cooper    {
6427*132f818dSEnji Cooper      concat_name = xstrdup (wrapper);
6428*132f818dSEnji Cooper      if (check_executable (concat_name))
6429*132f818dSEnji Cooper	return concat_name;
6430*132f818dSEnji Cooper      XFREE (concat_name);
6431*132f818dSEnji Cooper    }
6432*132f818dSEnji Cooper  else
6433*132f818dSEnji Cooper    {
6434*132f818dSEnji Cooper#endif
6435*132f818dSEnji Cooper      if (IS_DIR_SEPARATOR (wrapper[0]))
6436*132f818dSEnji Cooper	{
6437*132f818dSEnji Cooper	  concat_name = xstrdup (wrapper);
6438*132f818dSEnji Cooper	  if (check_executable (concat_name))
6439*132f818dSEnji Cooper	    return concat_name;
6440*132f818dSEnji Cooper	  XFREE (concat_name);
6441*132f818dSEnji Cooper	}
6442*132f818dSEnji Cooper#if defined HAVE_DOS_BASED_FILE_SYSTEM
6443*132f818dSEnji Cooper    }
6444*132f818dSEnji Cooper#endif
6445*132f818dSEnji Cooper
6446*132f818dSEnji Cooper  for (p = wrapper; *p; p++)
6447*132f818dSEnji Cooper    if (*p == '/')
6448*132f818dSEnji Cooper      {
6449*132f818dSEnji Cooper	has_slash = 1;
6450*132f818dSEnji Cooper	break;
6451*132f818dSEnji Cooper      }
6452*132f818dSEnji Cooper  if (!has_slash)
6453*132f818dSEnji Cooper    {
6454*132f818dSEnji Cooper      /* no slashes; search PATH */
6455*132f818dSEnji Cooper      const char *path = getenv ("PATH");
6456*132f818dSEnji Cooper      if (path != NULL)
6457*132f818dSEnji Cooper	{
6458*132f818dSEnji Cooper	  for (p = path; *p; p = p_next)
6459*132f818dSEnji Cooper	    {
6460*132f818dSEnji Cooper	      const char *q;
6461*132f818dSEnji Cooper	      size_t p_len;
6462*132f818dSEnji Cooper	      for (q = p; *q; q++)
6463*132f818dSEnji Cooper		if (IS_PATH_SEPARATOR (*q))
6464*132f818dSEnji Cooper		  break;
6465*132f818dSEnji Cooper	      p_len = (size_t) (q - p);
6466*132f818dSEnji Cooper	      p_next = (*q == '\0' ? q : q + 1);
6467*132f818dSEnji Cooper	      if (p_len == 0)
6468*132f818dSEnji Cooper		{
6469*132f818dSEnji Cooper		  /* empty path: current directory */
6470*132f818dSEnji Cooper		  if (getcwd (tmp, LT_PATHMAX) == NULL)
6471*132f818dSEnji Cooper		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6472*132f818dSEnji Cooper                              nonnull (strerror (errno)));
6473*132f818dSEnji Cooper		  tmp_len = strlen (tmp);
6474*132f818dSEnji Cooper		  concat_name =
6475*132f818dSEnji Cooper		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6476*132f818dSEnji Cooper		  memcpy (concat_name, tmp, tmp_len);
6477*132f818dSEnji Cooper		  concat_name[tmp_len] = '/';
6478*132f818dSEnji Cooper		  strcpy (concat_name + tmp_len + 1, wrapper);
6479*132f818dSEnji Cooper		}
6480*132f818dSEnji Cooper	      else
6481*132f818dSEnji Cooper		{
6482*132f818dSEnji Cooper		  concat_name =
6483*132f818dSEnji Cooper		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
6484*132f818dSEnji Cooper		  memcpy (concat_name, p, p_len);
6485*132f818dSEnji Cooper		  concat_name[p_len] = '/';
6486*132f818dSEnji Cooper		  strcpy (concat_name + p_len + 1, wrapper);
6487*132f818dSEnji Cooper		}
6488*132f818dSEnji Cooper	      if (check_executable (concat_name))
6489*132f818dSEnji Cooper		return concat_name;
6490*132f818dSEnji Cooper	      XFREE (concat_name);
6491*132f818dSEnji Cooper	    }
6492*132f818dSEnji Cooper	}
6493*132f818dSEnji Cooper      /* not found in PATH; assume curdir */
6494*132f818dSEnji Cooper    }
6495*132f818dSEnji Cooper  /* Relative path | not found in path: prepend cwd */
6496*132f818dSEnji Cooper  if (getcwd (tmp, LT_PATHMAX) == NULL)
6497*132f818dSEnji Cooper    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6498*132f818dSEnji Cooper              nonnull (strerror (errno)));
6499*132f818dSEnji Cooper  tmp_len = strlen (tmp);
6500*132f818dSEnji Cooper  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6501*132f818dSEnji Cooper  memcpy (concat_name, tmp, tmp_len);
6502*132f818dSEnji Cooper  concat_name[tmp_len] = '/';
6503*132f818dSEnji Cooper  strcpy (concat_name + tmp_len + 1, wrapper);
6504*132f818dSEnji Cooper
6505*132f818dSEnji Cooper  if (check_executable (concat_name))
6506*132f818dSEnji Cooper    return concat_name;
6507*132f818dSEnji Cooper  XFREE (concat_name);
6508*132f818dSEnji Cooper  return NULL;
6509*132f818dSEnji Cooper}
6510*132f818dSEnji Cooper
6511*132f818dSEnji Cooperchar *
6512*132f818dSEnji Cooperchase_symlinks (const char *pathspec)
6513*132f818dSEnji Cooper{
6514*132f818dSEnji Cooper#ifndef S_ISLNK
6515*132f818dSEnji Cooper  return xstrdup (pathspec);
6516*132f818dSEnji Cooper#else
6517*132f818dSEnji Cooper  char buf[LT_PATHMAX];
6518*132f818dSEnji Cooper  struct stat s;
6519*132f818dSEnji Cooper  char *tmp_pathspec = xstrdup (pathspec);
6520*132f818dSEnji Cooper  char *p;
6521*132f818dSEnji Cooper  int has_symlinks = 0;
6522*132f818dSEnji Cooper  while (strlen (tmp_pathspec) && !has_symlinks)
6523*132f818dSEnji Cooper    {
6524*132f818dSEnji Cooper      lt_debugprintf (__FILE__, __LINE__,
6525*132f818dSEnji Cooper		      "checking path component for symlinks: %s\n",
6526*132f818dSEnji Cooper		      tmp_pathspec);
6527*132f818dSEnji Cooper      if (lstat (tmp_pathspec, &s) == 0)
6528*132f818dSEnji Cooper	{
6529*132f818dSEnji Cooper	  if (S_ISLNK (s.st_mode) != 0)
6530*132f818dSEnji Cooper	    {
6531*132f818dSEnji Cooper	      has_symlinks = 1;
6532*132f818dSEnji Cooper	      break;
6533*132f818dSEnji Cooper	    }
6534*132f818dSEnji Cooper
6535*132f818dSEnji Cooper	  /* search backwards for last DIR_SEPARATOR */
6536*132f818dSEnji Cooper	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
6537*132f818dSEnji Cooper	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6538*132f818dSEnji Cooper	    p--;
6539*132f818dSEnji Cooper	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6540*132f818dSEnji Cooper	    {
6541*132f818dSEnji Cooper	      /* no more DIR_SEPARATORS left */
6542*132f818dSEnji Cooper	      break;
6543*132f818dSEnji Cooper	    }
6544*132f818dSEnji Cooper	  *p = '\0';
6545*132f818dSEnji Cooper	}
6546*132f818dSEnji Cooper      else
6547*132f818dSEnji Cooper	{
6548*132f818dSEnji Cooper	  lt_fatal (__FILE__, __LINE__,
6549*132f818dSEnji Cooper		    "error accessing file \"%s\": %s",
6550*132f818dSEnji Cooper		    tmp_pathspec, nonnull (strerror (errno)));
6551*132f818dSEnji Cooper	}
6552*132f818dSEnji Cooper    }
6553*132f818dSEnji Cooper  XFREE (tmp_pathspec);
6554*132f818dSEnji Cooper
6555*132f818dSEnji Cooper  if (!has_symlinks)
6556*132f818dSEnji Cooper    {
6557*132f818dSEnji Cooper      return xstrdup (pathspec);
6558*132f818dSEnji Cooper    }
6559*132f818dSEnji Cooper
6560*132f818dSEnji Cooper  tmp_pathspec = realpath (pathspec, buf);
6561*132f818dSEnji Cooper  if (tmp_pathspec == 0)
6562*132f818dSEnji Cooper    {
6563*132f818dSEnji Cooper      lt_fatal (__FILE__, __LINE__,
6564*132f818dSEnji Cooper		"could not follow symlinks for %s", pathspec);
6565*132f818dSEnji Cooper    }
6566*132f818dSEnji Cooper  return xstrdup (tmp_pathspec);
6567*132f818dSEnji Cooper#endif
6568*132f818dSEnji Cooper}
6569*132f818dSEnji Cooper
6570*132f818dSEnji Cooperchar *
6571*132f818dSEnji Cooperstrendzap (char *str, const char *pat)
6572*132f818dSEnji Cooper{
6573*132f818dSEnji Cooper  size_t len, patlen;
6574*132f818dSEnji Cooper
6575*132f818dSEnji Cooper  assert (str != NULL);
6576*132f818dSEnji Cooper  assert (pat != NULL);
6577*132f818dSEnji Cooper
6578*132f818dSEnji Cooper  len = strlen (str);
6579*132f818dSEnji Cooper  patlen = strlen (pat);
6580*132f818dSEnji Cooper
6581*132f818dSEnji Cooper  if (patlen <= len)
6582*132f818dSEnji Cooper    {
6583*132f818dSEnji Cooper      str += len - patlen;
6584*132f818dSEnji Cooper      if (STREQ (str, pat))
6585*132f818dSEnji Cooper	*str = '\0';
6586*132f818dSEnji Cooper    }
6587*132f818dSEnji Cooper  return str;
6588*132f818dSEnji Cooper}
6589*132f818dSEnji Cooper
6590*132f818dSEnji Coopervoid
6591*132f818dSEnji Cooperlt_debugprintf (const char *file, int line, const char *fmt, ...)
6592*132f818dSEnji Cooper{
6593*132f818dSEnji Cooper  va_list args;
6594*132f818dSEnji Cooper  if (lt_debug)
6595*132f818dSEnji Cooper    {
6596*132f818dSEnji Cooper      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
6597*132f818dSEnji Cooper      va_start (args, fmt);
6598*132f818dSEnji Cooper      (void) vfprintf (stderr, fmt, args);
6599*132f818dSEnji Cooper      va_end (args);
6600*132f818dSEnji Cooper    }
6601*132f818dSEnji Cooper}
6602*132f818dSEnji Cooper
6603*132f818dSEnji Cooperstatic void
6604*132f818dSEnji Cooperlt_error_core (int exit_status, const char *file,
6605*132f818dSEnji Cooper	       int line, const char *mode,
6606*132f818dSEnji Cooper	       const char *message, va_list ap)
6607*132f818dSEnji Cooper{
6608*132f818dSEnji Cooper  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
6609*132f818dSEnji Cooper  vfprintf (stderr, message, ap);
6610*132f818dSEnji Cooper  fprintf (stderr, ".\n");
6611*132f818dSEnji Cooper
6612*132f818dSEnji Cooper  if (exit_status >= 0)
6613*132f818dSEnji Cooper    exit (exit_status);
6614*132f818dSEnji Cooper}
6615*132f818dSEnji Cooper
6616*132f818dSEnji Coopervoid
6617*132f818dSEnji Cooperlt_fatal (const char *file, int line, const char *message, ...)
6618*132f818dSEnji Cooper{
6619*132f818dSEnji Cooper  va_list ap;
6620*132f818dSEnji Cooper  va_start (ap, message);
6621*132f818dSEnji Cooper  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
6622*132f818dSEnji Cooper  va_end (ap);
6623*132f818dSEnji Cooper}
6624*132f818dSEnji Cooper
6625*132f818dSEnji Cooperstatic const char *
6626*132f818dSEnji Coopernonnull (const char *s)
6627*132f818dSEnji Cooper{
6628*132f818dSEnji Cooper  return s ? s : "(null)";
6629*132f818dSEnji Cooper}
6630*132f818dSEnji Cooper
6631*132f818dSEnji Cooperstatic const char *
6632*132f818dSEnji Coopernonempty (const char *s)
6633*132f818dSEnji Cooper{
6634*132f818dSEnji Cooper  return (s && !*s) ? "(empty)" : nonnull (s);
6635*132f818dSEnji Cooper}
6636*132f818dSEnji Cooper
6637*132f818dSEnji Coopervoid
6638*132f818dSEnji Cooperlt_setenv (const char *name, const char *value)
6639*132f818dSEnji Cooper{
6640*132f818dSEnji Cooper  lt_debugprintf (__FILE__, __LINE__,
6641*132f818dSEnji Cooper		  "(lt_setenv) setting '%s' to '%s'\n",
6642*132f818dSEnji Cooper                  nonnull (name), nonnull (value));
6643*132f818dSEnji Cooper  {
6644*132f818dSEnji Cooper#ifdef HAVE_SETENV
6645*132f818dSEnji Cooper    /* always make a copy, for consistency with !HAVE_SETENV */
6646*132f818dSEnji Cooper    char *str = xstrdup (value);
6647*132f818dSEnji Cooper    setenv (name, str, 1);
6648*132f818dSEnji Cooper#else
6649*132f818dSEnji Cooper    size_t len = strlen (name) + 1 + strlen (value) + 1;
6650*132f818dSEnji Cooper    char *str = XMALLOC (char, len);
6651*132f818dSEnji Cooper    sprintf (str, "%s=%s", name, value);
6652*132f818dSEnji Cooper    if (putenv (str) != EXIT_SUCCESS)
6653*132f818dSEnji Cooper      {
6654*132f818dSEnji Cooper        XFREE (str);
6655*132f818dSEnji Cooper      }
6656*132f818dSEnji Cooper#endif
6657*132f818dSEnji Cooper  }
6658*132f818dSEnji Cooper}
6659*132f818dSEnji Cooper
6660*132f818dSEnji Cooperchar *
6661*132f818dSEnji Cooperlt_extend_str (const char *orig_value, const char *add, int to_end)
6662*132f818dSEnji Cooper{
6663*132f818dSEnji Cooper  char *new_value;
6664*132f818dSEnji Cooper  if (orig_value && *orig_value)
6665*132f818dSEnji Cooper    {
6666*132f818dSEnji Cooper      size_t orig_value_len = strlen (orig_value);
6667*132f818dSEnji Cooper      size_t add_len = strlen (add);
6668*132f818dSEnji Cooper      new_value = XMALLOC (char, add_len + orig_value_len + 1);
6669*132f818dSEnji Cooper      if (to_end)
6670*132f818dSEnji Cooper        {
6671*132f818dSEnji Cooper          strcpy (new_value, orig_value);
6672*132f818dSEnji Cooper          strcpy (new_value + orig_value_len, add);
6673*132f818dSEnji Cooper        }
6674*132f818dSEnji Cooper      else
6675*132f818dSEnji Cooper        {
6676*132f818dSEnji Cooper          strcpy (new_value, add);
6677*132f818dSEnji Cooper          strcpy (new_value + add_len, orig_value);
6678*132f818dSEnji Cooper        }
6679*132f818dSEnji Cooper    }
6680*132f818dSEnji Cooper  else
6681*132f818dSEnji Cooper    {
6682*132f818dSEnji Cooper      new_value = xstrdup (add);
6683*132f818dSEnji Cooper    }
6684*132f818dSEnji Cooper  return new_value;
6685*132f818dSEnji Cooper}
6686*132f818dSEnji Cooper
6687*132f818dSEnji Coopervoid
6688*132f818dSEnji Cooperlt_update_exe_path (const char *name, const char *value)
6689*132f818dSEnji Cooper{
6690*132f818dSEnji Cooper  lt_debugprintf (__FILE__, __LINE__,
6691*132f818dSEnji Cooper		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
6692*132f818dSEnji Cooper                  nonnull (name), nonnull (value));
6693*132f818dSEnji Cooper
6694*132f818dSEnji Cooper  if (name && *name && value && *value)
6695*132f818dSEnji Cooper    {
6696*132f818dSEnji Cooper      char *new_value = lt_extend_str (getenv (name), value, 0);
6697*132f818dSEnji Cooper      /* some systems can't cope with a ':'-terminated path #' */
6698*132f818dSEnji Cooper      size_t len = strlen (new_value);
6699*132f818dSEnji Cooper      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
6700*132f818dSEnji Cooper        {
6701*132f818dSEnji Cooper          new_value[--len] = '\0';
6702*132f818dSEnji Cooper        }
6703*132f818dSEnji Cooper      lt_setenv (name, new_value);
6704*132f818dSEnji Cooper      XFREE (new_value);
6705*132f818dSEnji Cooper    }
6706*132f818dSEnji Cooper}
6707*132f818dSEnji Cooper
6708*132f818dSEnji Coopervoid
6709*132f818dSEnji Cooperlt_update_lib_path (const char *name, const char *value)
6710*132f818dSEnji Cooper{
6711*132f818dSEnji Cooper  lt_debugprintf (__FILE__, __LINE__,
6712*132f818dSEnji Cooper		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
6713*132f818dSEnji Cooper                  nonnull (name), nonnull (value));
6714*132f818dSEnji Cooper
6715*132f818dSEnji Cooper  if (name && *name && value && *value)
6716*132f818dSEnji Cooper    {
6717*132f818dSEnji Cooper      char *new_value = lt_extend_str (getenv (name), value, 0);
6718*132f818dSEnji Cooper      lt_setenv (name, new_value);
6719*132f818dSEnji Cooper      XFREE (new_value);
6720*132f818dSEnji Cooper    }
6721*132f818dSEnji Cooper}
6722*132f818dSEnji Cooper
6723*132f818dSEnji CooperEOF
6724*132f818dSEnji Cooper	    case $host_os in
6725*132f818dSEnji Cooper	      mingw* | windows*)
6726*132f818dSEnji Cooper		cat <<"EOF"
6727*132f818dSEnji Cooper
6728*132f818dSEnji Cooper/* Prepares an argument vector before calling spawn().
6729*132f818dSEnji Cooper   Note that spawn() does not by itself call the command interpreter
6730*132f818dSEnji Cooper     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
6731*132f818dSEnji Cooper      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
6732*132f818dSEnji Cooper         GetVersionEx(&v);
6733*132f818dSEnji Cooper         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
6734*132f818dSEnji Cooper      }) ? "cmd.exe" : "command.com").
6735*132f818dSEnji Cooper   Instead it simply concatenates the arguments, separated by ' ', and calls
6736*132f818dSEnji Cooper   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
6737*132f818dSEnji Cooper   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
6738*132f818dSEnji Cooper   special way:
6739*132f818dSEnji Cooper   - Space and tab are interpreted as delimiters. They are not treated as
6740*132f818dSEnji Cooper     delimiters if they are surrounded by double quotes: "...".
6741*132f818dSEnji Cooper   - Unescaped double quotes are removed from the input. Their only effect is
6742*132f818dSEnji Cooper     that within double quotes, space and tab are treated like normal
6743*132f818dSEnji Cooper     characters.
6744*132f818dSEnji Cooper   - Backslashes not followed by double quotes are not special.
6745*132f818dSEnji Cooper   - But 2*n+1 backslashes followed by a double quote become
6746*132f818dSEnji Cooper     n backslashes followed by a double quote (n >= 0):
6747*132f818dSEnji Cooper       \" -> "
6748*132f818dSEnji Cooper       \\\" -> \"
6749*132f818dSEnji Cooper       \\\\\" -> \\"
6750*132f818dSEnji Cooper */
6751*132f818dSEnji Cooper#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"
6752*132f818dSEnji Cooper#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"
6753*132f818dSEnji Cooperchar **
6754*132f818dSEnji Cooperprepare_spawn (char **argv)
6755*132f818dSEnji Cooper{
6756*132f818dSEnji Cooper  size_t argc;
6757*132f818dSEnji Cooper  char **new_argv;
6758*132f818dSEnji Cooper  size_t i;
6759*132f818dSEnji Cooper
6760*132f818dSEnji Cooper  /* Count number of arguments.  */
6761*132f818dSEnji Cooper  for (argc = 0; argv[argc] != NULL; argc++)
6762*132f818dSEnji Cooper    ;
6763*132f818dSEnji Cooper
6764*132f818dSEnji Cooper  /* Allocate new argument vector.  */
6765*132f818dSEnji Cooper  new_argv = XMALLOC (char *, argc + 1);
6766*132f818dSEnji Cooper
6767*132f818dSEnji Cooper  /* Put quoted arguments into the new argument vector.  */
6768*132f818dSEnji Cooper  for (i = 0; i < argc; i++)
6769*132f818dSEnji Cooper    {
6770*132f818dSEnji Cooper      const char *string = argv[i];
6771*132f818dSEnji Cooper
6772*132f818dSEnji Cooper      if (string[0] == '\0')
6773*132f818dSEnji Cooper	new_argv[i] = xstrdup ("\"\"");
6774*132f818dSEnji Cooper      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
6775*132f818dSEnji Cooper	{
6776*132f818dSEnji Cooper	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
6777*132f818dSEnji Cooper	  size_t length;
6778*132f818dSEnji Cooper	  unsigned int backslashes;
6779*132f818dSEnji Cooper	  const char *s;
6780*132f818dSEnji Cooper	  char *quoted_string;
6781*132f818dSEnji Cooper	  char *p;
6782*132f818dSEnji Cooper
6783*132f818dSEnji Cooper	  length = 0;
6784*132f818dSEnji Cooper	  backslashes = 0;
6785*132f818dSEnji Cooper	  if (quote_around)
6786*132f818dSEnji Cooper	    length++;
6787*132f818dSEnji Cooper	  for (s = string; *s != '\0'; s++)
6788*132f818dSEnji Cooper	    {
6789*132f818dSEnji Cooper	      char c = *s;
6790*132f818dSEnji Cooper	      if (c == '"')
6791*132f818dSEnji Cooper		length += backslashes + 1;
6792*132f818dSEnji Cooper	      length++;
6793*132f818dSEnji Cooper	      if (c == '\\')
6794*132f818dSEnji Cooper		backslashes++;
6795*132f818dSEnji Cooper	      else
6796*132f818dSEnji Cooper		backslashes = 0;
6797*132f818dSEnji Cooper	    }
6798*132f818dSEnji Cooper	  if (quote_around)
6799*132f818dSEnji Cooper	    length += backslashes + 1;
6800*132f818dSEnji Cooper
6801*132f818dSEnji Cooper	  quoted_string = XMALLOC (char, length + 1);
6802*132f818dSEnji Cooper
6803*132f818dSEnji Cooper	  p = quoted_string;
6804*132f818dSEnji Cooper	  backslashes = 0;
6805*132f818dSEnji Cooper	  if (quote_around)
6806*132f818dSEnji Cooper	    *p++ = '"';
6807*132f818dSEnji Cooper	  for (s = string; *s != '\0'; s++)
6808*132f818dSEnji Cooper	    {
6809*132f818dSEnji Cooper	      char c = *s;
6810*132f818dSEnji Cooper	      if (c == '"')
6811*132f818dSEnji Cooper		{
6812*132f818dSEnji Cooper		  unsigned int j;
6813*132f818dSEnji Cooper		  for (j = backslashes + 1; j > 0; j--)
6814*132f818dSEnji Cooper		    *p++ = '\\';
6815*132f818dSEnji Cooper		}
6816*132f818dSEnji Cooper	      *p++ = c;
6817*132f818dSEnji Cooper	      if (c == '\\')
6818*132f818dSEnji Cooper		backslashes++;
6819*132f818dSEnji Cooper	      else
6820*132f818dSEnji Cooper		backslashes = 0;
6821*132f818dSEnji Cooper	    }
6822*132f818dSEnji Cooper	  if (quote_around)
6823*132f818dSEnji Cooper	    {
6824*132f818dSEnji Cooper	      unsigned int j;
6825*132f818dSEnji Cooper	      for (j = backslashes; j > 0; j--)
6826*132f818dSEnji Cooper		*p++ = '\\';
6827*132f818dSEnji Cooper	      *p++ = '"';
6828*132f818dSEnji Cooper	    }
6829*132f818dSEnji Cooper	  *p = '\0';
6830*132f818dSEnji Cooper
6831*132f818dSEnji Cooper	  new_argv[i] = quoted_string;
6832*132f818dSEnji Cooper	}
6833*132f818dSEnji Cooper      else
6834*132f818dSEnji Cooper	new_argv[i] = (char *) string;
6835*132f818dSEnji Cooper    }
6836*132f818dSEnji Cooper  new_argv[argc] = NULL;
6837*132f818dSEnji Cooper
6838*132f818dSEnji Cooper  return new_argv;
6839*132f818dSEnji Cooper}
6840*132f818dSEnji CooperEOF
6841*132f818dSEnji Cooper		;;
6842*132f818dSEnji Cooper	    esac
6843*132f818dSEnji Cooper
6844*132f818dSEnji Cooper            cat <<"EOF"
6845*132f818dSEnji Coopervoid lt_dump_script (FILE* f)
6846*132f818dSEnji Cooper{
6847*132f818dSEnji CooperEOF
6848*132f818dSEnji Cooper	    func_emit_wrapper yes |
6849*132f818dSEnji Cooper	      $SED -n -e '
6850*132f818dSEnji Coopers/^\(.\{79\}\)\(..*\)/\1\
6851*132f818dSEnji Cooper\2/
6852*132f818dSEnji Cooperh
6853*132f818dSEnji Coopers/\([\\"]\)/\\\1/g
6854*132f818dSEnji Coopers/$/\\n/
6855*132f818dSEnji Coopers/\([^\n]*\).*/  fputs ("\1", f);/p
6856*132f818dSEnji Cooperg
6857*132f818dSEnji CooperD'
6858*132f818dSEnji Cooper            cat <<"EOF"
6859*132f818dSEnji Cooper}
6860*132f818dSEnji CooperEOF
6861*132f818dSEnji Cooper}
6862*132f818dSEnji Cooper# end: func_emit_cwrapperexe_src
6863*132f818dSEnji Cooper
6864*132f818dSEnji Cooper# func_win32_import_lib_p ARG
6865*132f818dSEnji Cooper# True if ARG is an import lib, as indicated by $file_magic_cmd
6866*132f818dSEnji Cooperfunc_win32_import_lib_p ()
6867*132f818dSEnji Cooper{
6868*132f818dSEnji Cooper    $debug_cmd
6869*132f818dSEnji Cooper
6870*132f818dSEnji Cooper    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
6871*132f818dSEnji Cooper    *import*) : ;;
6872*132f818dSEnji Cooper    *) false ;;
6873*132f818dSEnji Cooper    esac
6874*132f818dSEnji Cooper}
6875*132f818dSEnji Cooper
6876*132f818dSEnji Cooper# func_suncc_cstd_abi
6877*132f818dSEnji Cooper# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
6878*132f818dSEnji Cooper# Several compiler flags select an ABI that is incompatible with the
6879*132f818dSEnji Cooper# Cstd library. Avoid specifying it if any are in CXXFLAGS.
6880*132f818dSEnji Cooperfunc_suncc_cstd_abi ()
6881*132f818dSEnji Cooper{
6882*132f818dSEnji Cooper    $debug_cmd
6883*132f818dSEnji Cooper
6884*132f818dSEnji Cooper    case " $compile_command " in
6885*132f818dSEnji Cooper    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
6886*132f818dSEnji Cooper      suncc_use_cstd_abi=no
6887*132f818dSEnji Cooper      ;;
6888*132f818dSEnji Cooper    *)
6889*132f818dSEnji Cooper      suncc_use_cstd_abi=yes
6890*132f818dSEnji Cooper      ;;
6891*132f818dSEnji Cooper    esac
6892*132f818dSEnji Cooper}
6893*132f818dSEnji Cooper
6894*132f818dSEnji Cooper# func_mode_link arg...
6895*132f818dSEnji Cooperfunc_mode_link ()
6896*132f818dSEnji Cooper{
6897*132f818dSEnji Cooper    $debug_cmd
6898*132f818dSEnji Cooper
6899*132f818dSEnji Cooper    case $host in
6900*132f818dSEnji Cooper    *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*)
6901*132f818dSEnji Cooper      # It is impossible to link a dll without this setting, and
6902*132f818dSEnji Cooper      # we shouldn't force the makefile maintainer to figure out
6903*132f818dSEnji Cooper      # what system we are compiling for in order to pass an extra
6904*132f818dSEnji Cooper      # flag for every libtool invocation.
6905*132f818dSEnji Cooper      # allow_undefined=no
6906*132f818dSEnji Cooper
6907*132f818dSEnji Cooper      # FIXME: Unfortunately, there are problems with the above when trying
6908*132f818dSEnji Cooper      # to make a dll that has undefined symbols, in which case not
6909*132f818dSEnji Cooper      # even a static library is built.  For now, we need to specify
6910*132f818dSEnji Cooper      # -no-undefined on the libtool link line when we can be certain
6911*132f818dSEnji Cooper      # that all symbols are satisfied, otherwise we get a static library.
6912*132f818dSEnji Cooper      allow_undefined=yes
6913*132f818dSEnji Cooper      ;;
6914*132f818dSEnji Cooper    *)
6915*132f818dSEnji Cooper      allow_undefined=yes
6916*132f818dSEnji Cooper      ;;
6917*132f818dSEnji Cooper    esac
6918*132f818dSEnji Cooper    libtool_args=$nonopt
6919*132f818dSEnji Cooper    base_compile="$nonopt $@"
6920*132f818dSEnji Cooper    compile_command=$nonopt
6921*132f818dSEnji Cooper    finalize_command=$nonopt
6922*132f818dSEnji Cooper
6923*132f818dSEnji Cooper    compile_rpath=
6924*132f818dSEnji Cooper    compile_rpath_tail=
6925*132f818dSEnji Cooper    finalize_rpath=
6926*132f818dSEnji Cooper    compile_shlibpath=
6927*132f818dSEnji Cooper    finalize_shlibpath=
6928*132f818dSEnji Cooper    convenience=
6929*132f818dSEnji Cooper    old_convenience=
6930*132f818dSEnji Cooper    deplibs=
6931*132f818dSEnji Cooper    old_deplibs=
6932*132f818dSEnji Cooper    compiler_flags=
6933*132f818dSEnji Cooper    linker_flags=
6934*132f818dSEnji Cooper    dllsearchpath=
6935*132f818dSEnji Cooper    lib_search_path=`pwd`
6936*132f818dSEnji Cooper    inst_prefix_dir=
6937*132f818dSEnji Cooper    new_inherited_linker_flags=
6938*132f818dSEnji Cooper
6939*132f818dSEnji Cooper    avoid_version=no
6940*132f818dSEnji Cooper    bindir=
6941*132f818dSEnji Cooper    dlfiles=
6942*132f818dSEnji Cooper    dlprefiles=
6943*132f818dSEnji Cooper    dlself=no
6944*132f818dSEnji Cooper    export_dynamic=no
6945*132f818dSEnji Cooper    export_symbols=
6946*132f818dSEnji Cooper    export_symbols_regex=
6947*132f818dSEnji Cooper    generated=
6948*132f818dSEnji Cooper    libobjs=
6949*132f818dSEnji Cooper    ltlibs=
6950*132f818dSEnji Cooper    module=no
6951*132f818dSEnji Cooper    no_install=no
6952*132f818dSEnji Cooper    objs=
6953*132f818dSEnji Cooper    os2dllname=
6954*132f818dSEnji Cooper    non_pic_objects=
6955*132f818dSEnji Cooper    precious_files_regex=
6956*132f818dSEnji Cooper    prefer_static_libs=no
6957*132f818dSEnji Cooper    preload=false
6958*132f818dSEnji Cooper    prev=
6959*132f818dSEnji Cooper    prevarg=
6960*132f818dSEnji Cooper    release=
6961*132f818dSEnji Cooper    rpath=
6962*132f818dSEnji Cooper    xrpath=
6963*132f818dSEnji Cooper    perm_rpath=
6964*132f818dSEnji Cooper    temp_rpath=
6965*132f818dSEnji Cooper    temp_rpath_tail=
6966*132f818dSEnji Cooper    thread_safe=no
6967*132f818dSEnji Cooper    vinfo=
6968*132f818dSEnji Cooper    vinfo_number=no
6969*132f818dSEnji Cooper    weak_libs=
6970*132f818dSEnji Cooper    rpath_arg=
6971*132f818dSEnji Cooper    single_module=$wl-single_module
6972*132f818dSEnji Cooper    func_infer_tag $base_compile
6973*132f818dSEnji Cooper
6974*132f818dSEnji Cooper    # We need to know -static, to get the right output filenames.
6975*132f818dSEnji Cooper    for arg
6976*132f818dSEnji Cooper    do
6977*132f818dSEnji Cooper      case $arg in
6978*132f818dSEnji Cooper      -shared)
6979*132f818dSEnji Cooper	test yes != "$build_libtool_libs" \
6980*132f818dSEnji Cooper	  && func_fatal_configuration "cannot build a shared library"
6981*132f818dSEnji Cooper	build_old_libs=no
6982*132f818dSEnji Cooper	break
6983*132f818dSEnji Cooper	;;
6984*132f818dSEnji Cooper      -all-static | -static | -static-libtool-libs)
6985*132f818dSEnji Cooper	case $arg in
6986*132f818dSEnji Cooper	-all-static)
6987*132f818dSEnji Cooper	  if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
6988*132f818dSEnji Cooper	    func_warning "complete static linking is impossible in this configuration"
6989*132f818dSEnji Cooper	  fi
6990*132f818dSEnji Cooper	  if test -n "$link_static_flag"; then
6991*132f818dSEnji Cooper	    dlopen_self=$dlopen_self_static
6992*132f818dSEnji Cooper	  fi
6993*132f818dSEnji Cooper	  prefer_static_libs=yes
6994*132f818dSEnji Cooper	  ;;
6995*132f818dSEnji Cooper	-static)
6996*132f818dSEnji Cooper	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
6997*132f818dSEnji Cooper	    dlopen_self=$dlopen_self_static
6998*132f818dSEnji Cooper	  fi
6999*132f818dSEnji Cooper	  prefer_static_libs=built
7000*132f818dSEnji Cooper	  ;;
7001*132f818dSEnji Cooper	-static-libtool-libs)
7002*132f818dSEnji Cooper	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
7003*132f818dSEnji Cooper	    dlopen_self=$dlopen_self_static
7004*132f818dSEnji Cooper	  fi
7005*132f818dSEnji Cooper	  prefer_static_libs=yes
7006*132f818dSEnji Cooper	  ;;
7007*132f818dSEnji Cooper	esac
7008*132f818dSEnji Cooper	build_libtool_libs=no
7009*132f818dSEnji Cooper	build_old_libs=yes
7010*132f818dSEnji Cooper	break
7011*132f818dSEnji Cooper	;;
7012*132f818dSEnji Cooper      esac
7013*132f818dSEnji Cooper    done
7014*132f818dSEnji Cooper
7015*132f818dSEnji Cooper    # See if our shared archives depend on static archives.
7016*132f818dSEnji Cooper    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
7017*132f818dSEnji Cooper
7018*132f818dSEnji Cooper    # Go through the arguments, transforming them on the way.
7019*132f818dSEnji Cooper    while test "$#" -gt 0; do
7020*132f818dSEnji Cooper      arg=$1
7021*132f818dSEnji Cooper      shift
7022*132f818dSEnji Cooper      func_quote_arg pretty,unquoted "$arg"
7023*132f818dSEnji Cooper      qarg=$func_quote_arg_unquoted_result
7024*132f818dSEnji Cooper      func_append libtool_args " $func_quote_arg_result"
7025*132f818dSEnji Cooper
7026*132f818dSEnji Cooper      # If the previous option needs an argument, assign it.
7027*132f818dSEnji Cooper      if test -n "$prev"; then
7028*132f818dSEnji Cooper	case $prev in
7029*132f818dSEnji Cooper	output)
7030*132f818dSEnji Cooper	  func_append compile_command " @OUTPUT@"
7031*132f818dSEnji Cooper	  func_append finalize_command " @OUTPUT@"
7032*132f818dSEnji Cooper	  ;;
7033*132f818dSEnji Cooper	esac
7034*132f818dSEnji Cooper
7035*132f818dSEnji Cooper	case $prev in
7036*132f818dSEnji Cooper	bindir)
7037*132f818dSEnji Cooper	  bindir=$arg
7038*132f818dSEnji Cooper	  prev=
7039*132f818dSEnji Cooper	  continue
7040*132f818dSEnji Cooper	  ;;
7041*132f818dSEnji Cooper	dlfiles|dlprefiles)
7042*132f818dSEnji Cooper	  $preload || {
7043*132f818dSEnji Cooper	    # Add the symbol object into the linking commands.
7044*132f818dSEnji Cooper	    func_append compile_command " @SYMFILE@"
7045*132f818dSEnji Cooper	    func_append finalize_command " @SYMFILE@"
7046*132f818dSEnji Cooper	    preload=:
7047*132f818dSEnji Cooper	  }
7048*132f818dSEnji Cooper	  case $arg in
7049*132f818dSEnji Cooper	  *.la | *.lo) ;;  # We handle these cases below.
7050*132f818dSEnji Cooper	  force)
7051*132f818dSEnji Cooper	    if test no = "$dlself"; then
7052*132f818dSEnji Cooper	      dlself=needless
7053*132f818dSEnji Cooper	      export_dynamic=yes
7054*132f818dSEnji Cooper	    fi
7055*132f818dSEnji Cooper	    prev=
7056*132f818dSEnji Cooper	    continue
7057*132f818dSEnji Cooper	    ;;
7058*132f818dSEnji Cooper	  self)
7059*132f818dSEnji Cooper	    if test dlprefiles = "$prev"; then
7060*132f818dSEnji Cooper	      dlself=yes
7061*132f818dSEnji Cooper	    elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
7062*132f818dSEnji Cooper	      dlself=yes
7063*132f818dSEnji Cooper	    else
7064*132f818dSEnji Cooper	      dlself=needless
7065*132f818dSEnji Cooper	      export_dynamic=yes
7066*132f818dSEnji Cooper	    fi
7067*132f818dSEnji Cooper	    prev=
7068*132f818dSEnji Cooper	    continue
7069*132f818dSEnji Cooper	    ;;
7070*132f818dSEnji Cooper	  *)
7071*132f818dSEnji Cooper	    if test dlfiles = "$prev"; then
7072*132f818dSEnji Cooper	      func_append dlfiles " $arg"
7073*132f818dSEnji Cooper	    else
7074*132f818dSEnji Cooper	      func_append dlprefiles " $arg"
7075*132f818dSEnji Cooper	    fi
7076*132f818dSEnji Cooper	    prev=
7077*132f818dSEnji Cooper	    continue
7078*132f818dSEnji Cooper	    ;;
7079*132f818dSEnji Cooper	  esac
7080*132f818dSEnji Cooper	  ;;
7081*132f818dSEnji Cooper	expsyms)
7082*132f818dSEnji Cooper	  export_symbols=$arg
7083*132f818dSEnji Cooper	  test -f "$arg" \
7084*132f818dSEnji Cooper	    || func_fatal_error "symbol file '$arg' does not exist"
7085*132f818dSEnji Cooper	  prev=
7086*132f818dSEnji Cooper	  continue
7087*132f818dSEnji Cooper	  ;;
7088*132f818dSEnji Cooper	expsyms_regex)
7089*132f818dSEnji Cooper	  export_symbols_regex=$arg
7090*132f818dSEnji Cooper	  prev=
7091*132f818dSEnji Cooper	  continue
7092*132f818dSEnji Cooper	  ;;
7093*132f818dSEnji Cooper	framework)
7094*132f818dSEnji Cooper	  case $host in
7095*132f818dSEnji Cooper	    *-*-darwin*)
7096*132f818dSEnji Cooper	      case "$deplibs " in
7097*132f818dSEnji Cooper		*" $qarg.ltframework "*) ;;
7098*132f818dSEnji Cooper		*) func_append deplibs " $qarg.ltframework" # this is fixed later
7099*132f818dSEnji Cooper		   ;;
7100*132f818dSEnji Cooper	      esac
7101*132f818dSEnji Cooper	      ;;
7102*132f818dSEnji Cooper	  esac
7103*132f818dSEnji Cooper	  prev=
7104*132f818dSEnji Cooper	  continue
7105*132f818dSEnji Cooper	  ;;
7106*132f818dSEnji Cooper	inst_prefix)
7107*132f818dSEnji Cooper	  inst_prefix_dir=$arg
7108*132f818dSEnji Cooper	  prev=
7109*132f818dSEnji Cooper	  continue
7110*132f818dSEnji Cooper	  ;;
7111*132f818dSEnji Cooper	mllvm)
7112*132f818dSEnji Cooper	  # Clang does not use LLVM to link, so we can simply discard any
7113*132f818dSEnji Cooper	  # '-mllvm $arg' options when doing the link step.
7114*132f818dSEnji Cooper	  prev=
7115*132f818dSEnji Cooper	  continue
7116*132f818dSEnji Cooper	  ;;
7117*132f818dSEnji Cooper	objectlist)
7118*132f818dSEnji Cooper	  if test -f "$arg"; then
7119*132f818dSEnji Cooper	    save_arg=$arg
7120*132f818dSEnji Cooper	    moreargs=
7121*132f818dSEnji Cooper	    for fil in `cat "$save_arg"`
7122*132f818dSEnji Cooper	    do
7123*132f818dSEnji Cooper#	      func_append moreargs " $fil"
7124*132f818dSEnji Cooper	      arg=$fil
7125*132f818dSEnji Cooper	      # A libtool-controlled object.
7126*132f818dSEnji Cooper
7127*132f818dSEnji Cooper	      # Check to see that this really is a libtool object.
7128*132f818dSEnji Cooper	      if func_lalib_unsafe_p "$arg"; then
7129*132f818dSEnji Cooper		pic_object=
7130*132f818dSEnji Cooper		non_pic_object=
7131*132f818dSEnji Cooper
7132*132f818dSEnji Cooper		# Read the .lo file
7133*132f818dSEnji Cooper		func_source "$arg"
7134*132f818dSEnji Cooper
7135*132f818dSEnji Cooper		if test -z "$pic_object" ||
7136*132f818dSEnji Cooper		   test -z "$non_pic_object" ||
7137*132f818dSEnji Cooper		   test none = "$pic_object" &&
7138*132f818dSEnji Cooper		   test none = "$non_pic_object"; then
7139*132f818dSEnji Cooper		  func_fatal_error "cannot find name of object for '$arg'"
7140*132f818dSEnji Cooper		fi
7141*132f818dSEnji Cooper
7142*132f818dSEnji Cooper		# Extract subdirectory from the argument.
7143*132f818dSEnji Cooper		func_dirname "$arg" "/" ""
7144*132f818dSEnji Cooper		xdir=$func_dirname_result
7145*132f818dSEnji Cooper
7146*132f818dSEnji Cooper		if test none != "$pic_object"; then
7147*132f818dSEnji Cooper		  # Prepend the subdirectory the object is found in.
7148*132f818dSEnji Cooper		  pic_object=$xdir$pic_object
7149*132f818dSEnji Cooper
7150*132f818dSEnji Cooper		  if test dlfiles = "$prev"; then
7151*132f818dSEnji Cooper		    if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
7152*132f818dSEnji Cooper		      func_append dlfiles " $pic_object"
7153*132f818dSEnji Cooper		      prev=
7154*132f818dSEnji Cooper		      continue
7155*132f818dSEnji Cooper		    else
7156*132f818dSEnji Cooper		      # If libtool objects are unsupported, then we need to preload.
7157*132f818dSEnji Cooper		      prev=dlprefiles
7158*132f818dSEnji Cooper		    fi
7159*132f818dSEnji Cooper		  fi
7160*132f818dSEnji Cooper
7161*132f818dSEnji Cooper		  # CHECK ME:  I think I busted this.  -Ossama
7162*132f818dSEnji Cooper		  if test dlprefiles = "$prev"; then
7163*132f818dSEnji Cooper		    # Preload the old-style object.
7164*132f818dSEnji Cooper		    func_append dlprefiles " $pic_object"
7165*132f818dSEnji Cooper		    prev=
7166*132f818dSEnji Cooper		  fi
7167*132f818dSEnji Cooper
7168*132f818dSEnji Cooper		  # A PIC object.
7169*132f818dSEnji Cooper		  func_append libobjs " $pic_object"
7170*132f818dSEnji Cooper		  arg=$pic_object
7171*132f818dSEnji Cooper		fi
7172*132f818dSEnji Cooper
7173*132f818dSEnji Cooper		# Non-PIC object.
7174*132f818dSEnji Cooper		if test none != "$non_pic_object"; then
7175*132f818dSEnji Cooper		  # Prepend the subdirectory the object is found in.
7176*132f818dSEnji Cooper		  non_pic_object=$xdir$non_pic_object
7177*132f818dSEnji Cooper
7178*132f818dSEnji Cooper		  # A standard non-PIC object
7179*132f818dSEnji Cooper		  func_append non_pic_objects " $non_pic_object"
7180*132f818dSEnji Cooper		  if test -z "$pic_object" || test none = "$pic_object"; then
7181*132f818dSEnji Cooper		    arg=$non_pic_object
7182*132f818dSEnji Cooper		  fi
7183*132f818dSEnji Cooper		else
7184*132f818dSEnji Cooper		  # If the PIC object exists, use it instead.
7185*132f818dSEnji Cooper		  # $xdir was prepended to $pic_object above.
7186*132f818dSEnji Cooper		  non_pic_object=$pic_object
7187*132f818dSEnji Cooper		  func_append non_pic_objects " $non_pic_object"
7188*132f818dSEnji Cooper		fi
7189*132f818dSEnji Cooper	      else
7190*132f818dSEnji Cooper		# Only an error if not doing a dry-run.
7191*132f818dSEnji Cooper		if $opt_dry_run; then
7192*132f818dSEnji Cooper		  # Extract subdirectory from the argument.
7193*132f818dSEnji Cooper		  func_dirname "$arg" "/" ""
7194*132f818dSEnji Cooper		  xdir=$func_dirname_result
7195*132f818dSEnji Cooper
7196*132f818dSEnji Cooper		  func_lo2o "$arg"
7197*132f818dSEnji Cooper		  pic_object=$xdir$objdir/$func_lo2o_result
7198*132f818dSEnji Cooper		  non_pic_object=$xdir$func_lo2o_result
7199*132f818dSEnji Cooper		  func_append libobjs " $pic_object"
7200*132f818dSEnji Cooper		  func_append non_pic_objects " $non_pic_object"
7201*132f818dSEnji Cooper	        else
7202*132f818dSEnji Cooper		  func_fatal_error "'$arg' is not a valid libtool object"
7203*132f818dSEnji Cooper		fi
7204*132f818dSEnji Cooper	      fi
7205*132f818dSEnji Cooper	    done
7206*132f818dSEnji Cooper	  else
7207*132f818dSEnji Cooper	    func_fatal_error "link input file '$arg' does not exist"
7208*132f818dSEnji Cooper	  fi
7209*132f818dSEnji Cooper	  arg=$save_arg
7210*132f818dSEnji Cooper	  prev=
7211*132f818dSEnji Cooper	  continue
7212*132f818dSEnji Cooper	  ;;
7213*132f818dSEnji Cooper	os2dllname)
7214*132f818dSEnji Cooper	  os2dllname=$arg
7215*132f818dSEnji Cooper	  prev=
7216*132f818dSEnji Cooper	  continue
7217*132f818dSEnji Cooper	  ;;
7218*132f818dSEnji Cooper	precious_regex)
7219*132f818dSEnji Cooper	  precious_files_regex=$arg
7220*132f818dSEnji Cooper	  prev=
7221*132f818dSEnji Cooper	  continue
7222*132f818dSEnji Cooper	  ;;
7223*132f818dSEnji Cooper	release)
7224*132f818dSEnji Cooper	  release=-$arg
7225*132f818dSEnji Cooper	  prev=
7226*132f818dSEnji Cooper	  continue
7227*132f818dSEnji Cooper	  ;;
7228*132f818dSEnji Cooper	rpath | xrpath)
7229*132f818dSEnji Cooper	  # We need an absolute path.
7230*132f818dSEnji Cooper	  case $arg in
7231*132f818dSEnji Cooper	  [\\/]* | [A-Za-z]:[\\/]*) ;;
7232*132f818dSEnji Cooper	  *)
7233*132f818dSEnji Cooper	    func_fatal_error "argument to -rpath is not absolute: $arg"
7234*132f818dSEnji Cooper	    ;;
7235*132f818dSEnji Cooper	  esac
7236*132f818dSEnji Cooper	  if test rpath = "$prev"; then
7237*132f818dSEnji Cooper	    case "$rpath " in
7238*132f818dSEnji Cooper	    *" $arg "*) ;;
7239*132f818dSEnji Cooper	    *) func_append rpath " $arg" ;;
7240*132f818dSEnji Cooper	    esac
7241*132f818dSEnji Cooper	  else
7242*132f818dSEnji Cooper	    case "$xrpath " in
7243*132f818dSEnji Cooper	    *" $arg "*) ;;
7244*132f818dSEnji Cooper	    *) func_append xrpath " $arg" ;;
7245*132f818dSEnji Cooper	    esac
7246*132f818dSEnji Cooper	  fi
7247*132f818dSEnji Cooper	  prev=
7248*132f818dSEnji Cooper	  continue
7249*132f818dSEnji Cooper	  ;;
7250*132f818dSEnji Cooper	shrext)
7251*132f818dSEnji Cooper	  shrext_cmds=$arg
7252*132f818dSEnji Cooper	  prev=
7253*132f818dSEnji Cooper	  continue
7254*132f818dSEnji Cooper	  ;;
7255*132f818dSEnji Cooper	weak)
7256*132f818dSEnji Cooper	  func_append weak_libs " $arg"
7257*132f818dSEnji Cooper	  prev=
7258*132f818dSEnji Cooper	  continue
7259*132f818dSEnji Cooper	  ;;
7260*132f818dSEnji Cooper	xassembler)
7261*132f818dSEnji Cooper	  func_append compiler_flags " -Xassembler $qarg"
7262*132f818dSEnji Cooper	  prev=
7263*132f818dSEnji Cooper	  func_append compile_command " -Xassembler $qarg"
7264*132f818dSEnji Cooper	  func_append finalize_command " -Xassembler $qarg"
7265*132f818dSEnji Cooper	  continue
7266*132f818dSEnji Cooper	  ;;
7267*132f818dSEnji Cooper	xcclinker)
7268*132f818dSEnji Cooper	  func_append linker_flags " $qarg"
7269*132f818dSEnji Cooper	  func_append compiler_flags " $qarg"
7270*132f818dSEnji Cooper	  prev=
7271*132f818dSEnji Cooper	  func_append compile_command " $qarg"
7272*132f818dSEnji Cooper	  func_append finalize_command " $qarg"
7273*132f818dSEnji Cooper	  continue
7274*132f818dSEnji Cooper	  ;;
7275*132f818dSEnji Cooper	xcompiler)
7276*132f818dSEnji Cooper	  func_append compiler_flags " $qarg"
7277*132f818dSEnji Cooper	  prev=
7278*132f818dSEnji Cooper	  func_append compile_command " $qarg"
7279*132f818dSEnji Cooper	  func_append finalize_command " $qarg"
7280*132f818dSEnji Cooper	  continue
7281*132f818dSEnji Cooper	  ;;
7282*132f818dSEnji Cooper	xlinker)
7283*132f818dSEnji Cooper	  func_append linker_flags " $qarg"
7284*132f818dSEnji Cooper	  func_append compiler_flags " $wl$qarg"
7285*132f818dSEnji Cooper	  prev=
7286*132f818dSEnji Cooper	  func_append compile_command " $wl$qarg"
7287*132f818dSEnji Cooper	  func_append finalize_command " $wl$qarg"
7288*132f818dSEnji Cooper	  continue
7289*132f818dSEnji Cooper	  ;;
7290*132f818dSEnji Cooper	*)
7291*132f818dSEnji Cooper	  eval "$prev=\"\$arg\""
7292*132f818dSEnji Cooper	  prev=
7293*132f818dSEnji Cooper	  continue
7294*132f818dSEnji Cooper	  ;;
7295*132f818dSEnji Cooper	esac
7296*132f818dSEnji Cooper      fi # test -n "$prev"
7297*132f818dSEnji Cooper
7298*132f818dSEnji Cooper      prevarg=$arg
7299*132f818dSEnji Cooper
7300*132f818dSEnji Cooper      case $arg in
7301*132f818dSEnji Cooper      -all-static)
7302*132f818dSEnji Cooper	if test -n "$link_static_flag"; then
7303*132f818dSEnji Cooper	  # See comment for -static flag below, for more details.
7304*132f818dSEnji Cooper	  func_append compile_command " $link_static_flag"
7305*132f818dSEnji Cooper	  func_append finalize_command " $link_static_flag"
7306*132f818dSEnji Cooper	fi
7307*132f818dSEnji Cooper	continue
7308*132f818dSEnji Cooper	;;
7309*132f818dSEnji Cooper
7310*132f818dSEnji Cooper      -allow-undefined)
7311*132f818dSEnji Cooper	# FIXME: remove this flag sometime in the future.
7312*132f818dSEnji Cooper	func_fatal_error "'-allow-undefined' must not be used because it is the default"
7313*132f818dSEnji Cooper	;;
7314*132f818dSEnji Cooper
7315*132f818dSEnji Cooper      -avoid-version)
7316*132f818dSEnji Cooper	avoid_version=yes
7317*132f818dSEnji Cooper	continue
7318*132f818dSEnji Cooper	;;
7319*132f818dSEnji Cooper
7320*132f818dSEnji Cooper      -bindir)
7321*132f818dSEnji Cooper	prev=bindir
7322*132f818dSEnji Cooper	continue
7323*132f818dSEnji Cooper	;;
7324*132f818dSEnji Cooper
7325*132f818dSEnji Cooper      -dlopen)
7326*132f818dSEnji Cooper	prev=dlfiles
7327*132f818dSEnji Cooper	continue
7328*132f818dSEnji Cooper	;;
7329*132f818dSEnji Cooper
7330*132f818dSEnji Cooper      -dlpreopen)
7331*132f818dSEnji Cooper	prev=dlprefiles
7332*132f818dSEnji Cooper	continue
7333*132f818dSEnji Cooper	;;
7334*132f818dSEnji Cooper
7335*132f818dSEnji Cooper      -export-dynamic)
7336*132f818dSEnji Cooper	export_dynamic=yes
7337*132f818dSEnji Cooper	continue
7338*132f818dSEnji Cooper	;;
7339*132f818dSEnji Cooper
7340*132f818dSEnji Cooper      -export-symbols | -export-symbols-regex)
7341*132f818dSEnji Cooper	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
7342*132f818dSEnji Cooper	  func_fatal_error "more than one -exported-symbols argument is not allowed"
7343*132f818dSEnji Cooper	fi
7344*132f818dSEnji Cooper	if test X-export-symbols = "X$arg"; then
7345*132f818dSEnji Cooper	  prev=expsyms
7346*132f818dSEnji Cooper	else
7347*132f818dSEnji Cooper	  prev=expsyms_regex
7348*132f818dSEnji Cooper	fi
7349*132f818dSEnji Cooper	continue
7350*132f818dSEnji Cooper	;;
7351*132f818dSEnji Cooper
7352*132f818dSEnji Cooper      -framework)
7353*132f818dSEnji Cooper	prev=framework
7354*132f818dSEnji Cooper	continue
7355*132f818dSEnji Cooper	;;
7356*132f818dSEnji Cooper
7357*132f818dSEnji Cooper      -inst-prefix-dir)
7358*132f818dSEnji Cooper	prev=inst_prefix
7359*132f818dSEnji Cooper	continue
7360*132f818dSEnji Cooper	;;
7361*132f818dSEnji Cooper
7362*132f818dSEnji Cooper      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
7363*132f818dSEnji Cooper      # so, if we see these flags be careful not to treat them like -L
7364*132f818dSEnji Cooper      -L[A-Z][A-Z]*:*)
7365*132f818dSEnji Cooper	case $with_gcc/$host in
7366*132f818dSEnji Cooper	no/*-*-irix* | /*-*-irix*)
7367*132f818dSEnji Cooper	  func_append compile_command " $arg"
7368*132f818dSEnji Cooper	  func_append finalize_command " $arg"
7369*132f818dSEnji Cooper	  ;;
7370*132f818dSEnji Cooper	esac
7371*132f818dSEnji Cooper	continue
7372*132f818dSEnji Cooper	;;
7373*132f818dSEnji Cooper
7374*132f818dSEnji Cooper      -L*)
7375*132f818dSEnji Cooper	func_stripname "-L" '' "$arg"
7376*132f818dSEnji Cooper	if test -z "$func_stripname_result"; then
7377*132f818dSEnji Cooper	  if test "$#" -gt 0; then
7378*132f818dSEnji Cooper	    func_fatal_error "require no space between '-L' and '$1'"
7379*132f818dSEnji Cooper	  else
7380*132f818dSEnji Cooper	    func_fatal_error "need path for '-L' option"
7381*132f818dSEnji Cooper	  fi
7382*132f818dSEnji Cooper	fi
7383*132f818dSEnji Cooper	func_resolve_sysroot "$func_stripname_result"
7384*132f818dSEnji Cooper	dir=$func_resolve_sysroot_result
7385*132f818dSEnji Cooper	# We need an absolute path.
7386*132f818dSEnji Cooper	case $dir in
7387*132f818dSEnji Cooper	[\\/]* | [A-Za-z]:[\\/]*) ;;
7388*132f818dSEnji Cooper	*)
7389*132f818dSEnji Cooper	  absdir=`cd "$dir" && pwd`
7390*132f818dSEnji Cooper	  test -z "$absdir" && \
7391*132f818dSEnji Cooper	    func_fatal_error "cannot determine absolute directory name of '$dir'"
7392*132f818dSEnji Cooper	  dir=$absdir
7393*132f818dSEnji Cooper	  ;;
7394*132f818dSEnji Cooper	esac
7395*132f818dSEnji Cooper	case "$deplibs " in
7396*132f818dSEnji Cooper	*" -L$dir "* | *" $arg "*)
7397*132f818dSEnji Cooper	  # Will only happen for absolute or sysroot arguments
7398*132f818dSEnji Cooper	  ;;
7399*132f818dSEnji Cooper	*)
7400*132f818dSEnji Cooper	  # Preserve sysroot, but never include relative directories
7401*132f818dSEnji Cooper	  case $dir in
7402*132f818dSEnji Cooper	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
7403*132f818dSEnji Cooper	    *) func_append deplibs " -L$dir" ;;
7404*132f818dSEnji Cooper	  esac
7405*132f818dSEnji Cooper	  func_append lib_search_path " $dir"
7406*132f818dSEnji Cooper	  ;;
7407*132f818dSEnji Cooper	esac
7408*132f818dSEnji Cooper	case $host in
7409*132f818dSEnji Cooper	*-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*)
7410*132f818dSEnji Cooper	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
7411*132f818dSEnji Cooper	  case :$dllsearchpath: in
7412*132f818dSEnji Cooper	  *":$dir:"*) ;;
7413*132f818dSEnji Cooper	  ::) dllsearchpath=$dir;;
7414*132f818dSEnji Cooper	  *) func_append dllsearchpath ":$dir";;
7415*132f818dSEnji Cooper	  esac
7416*132f818dSEnji Cooper	  case :$dllsearchpath: in
7417*132f818dSEnji Cooper	  *":$testbindir:"*) ;;
7418*132f818dSEnji Cooper	  ::) dllsearchpath=$testbindir;;
7419*132f818dSEnji Cooper	  *) func_append dllsearchpath ":$testbindir";;
7420*132f818dSEnji Cooper	  esac
7421*132f818dSEnji Cooper	  ;;
7422*132f818dSEnji Cooper	esac
7423*132f818dSEnji Cooper	continue
7424*132f818dSEnji Cooper	;;
7425*132f818dSEnji Cooper
7426*132f818dSEnji Cooper      -l*)
7427*132f818dSEnji Cooper	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
7428*132f818dSEnji Cooper	  case $host in
7429*132f818dSEnji Cooper	  *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
7430*132f818dSEnji Cooper	    # These systems don't actually have a C or math library (as such)
7431*132f818dSEnji Cooper	    continue
7432*132f818dSEnji Cooper	    ;;
7433*132f818dSEnji Cooper	  *-*-os2*)
7434*132f818dSEnji Cooper	    # These systems don't actually have a C library (as such)
7435*132f818dSEnji Cooper	    test X-lc = "X$arg" && continue
7436*132f818dSEnji Cooper	    ;;
7437*132f818dSEnji Cooper	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
7438*132f818dSEnji Cooper	    # Do not include libc due to us having libc/libc_r.
7439*132f818dSEnji Cooper	    test X-lc = "X$arg" && continue
7440*132f818dSEnji Cooper	    ;;
7441*132f818dSEnji Cooper	  *-*-rhapsody* | *-*-darwin1.[012])
7442*132f818dSEnji Cooper	    # Rhapsody C and math libraries are in the System framework
7443*132f818dSEnji Cooper	    func_append deplibs " System.ltframework"
7444*132f818dSEnji Cooper	    continue
7445*132f818dSEnji Cooper	    ;;
7446*132f818dSEnji Cooper	  *-*-sco3.2v5* | *-*-sco5v6*)
7447*132f818dSEnji Cooper	    # Causes problems with __ctype
7448*132f818dSEnji Cooper	    test X-lc = "X$arg" && continue
7449*132f818dSEnji Cooper	    ;;
7450*132f818dSEnji Cooper	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7451*132f818dSEnji Cooper	    # Compiler inserts libc in the correct place for threads to work
7452*132f818dSEnji Cooper	    test X-lc = "X$arg" && continue
7453*132f818dSEnji Cooper	    ;;
7454*132f818dSEnji Cooper	  esac
7455*132f818dSEnji Cooper	elif test X-lc_r = "X$arg"; then
7456*132f818dSEnji Cooper	 case $host in
7457*132f818dSEnji Cooper	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
7458*132f818dSEnji Cooper	   # Do not include libc_r directly, use -pthread flag.
7459*132f818dSEnji Cooper	   continue
7460*132f818dSEnji Cooper	   ;;
7461*132f818dSEnji Cooper	 esac
7462*132f818dSEnji Cooper	fi
7463*132f818dSEnji Cooper	func_append deplibs " $arg"
7464*132f818dSEnji Cooper	continue
7465*132f818dSEnji Cooper	;;
7466*132f818dSEnji Cooper
7467*132f818dSEnji Cooper      -mllvm)
7468*132f818dSEnji Cooper	prev=mllvm
7469*132f818dSEnji Cooper	continue
7470*132f818dSEnji Cooper	;;
7471*132f818dSEnji Cooper
7472*132f818dSEnji Cooper      -module)
7473*132f818dSEnji Cooper	module=yes
7474*132f818dSEnji Cooper	continue
7475*132f818dSEnji Cooper	;;
7476*132f818dSEnji Cooper
7477*132f818dSEnji Cooper      # Tru64 UNIX uses -model [arg] to determine the layout of C++
7478*132f818dSEnji Cooper      # classes, name mangling, and exception handling.
7479*132f818dSEnji Cooper      # Darwin uses the -arch flag to determine output architecture.
7480*132f818dSEnji Cooper      # -q <option> for IBM XL C/C++ compiler.
7481*132f818dSEnji Cooper      -model|-arch|-isysroot|--sysroot|-q)
7482*132f818dSEnji Cooper	func_append compiler_flags " $arg"
7483*132f818dSEnji Cooper	func_append compile_command " $arg"
7484*132f818dSEnji Cooper	func_append finalize_command " $arg"
7485*132f818dSEnji Cooper	prev=xcompiler
7486*132f818dSEnji Cooper	continue
7487*132f818dSEnji Cooper	;;
7488*132f818dSEnji Cooper     # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199.
7489*132f818dSEnji Cooper     -pthread)
7490*132f818dSEnji Cooper	case $host in
7491*132f818dSEnji Cooper	  *solaris2*) ;;
7492*132f818dSEnji Cooper	  *)
7493*132f818dSEnji Cooper	    case "$new_inherited_linker_flags " in
7494*132f818dSEnji Cooper	        *" $arg "*) ;;
7495*132f818dSEnji Cooper	        * ) func_append new_inherited_linker_flags " $arg" ;;
7496*132f818dSEnji Cooper	    esac
7497*132f818dSEnji Cooper	  ;;
7498*132f818dSEnji Cooper	esac
7499*132f818dSEnji Cooper	continue
7500*132f818dSEnji Cooper	;;
7501*132f818dSEnji Cooper      -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \
7502*132f818dSEnji Cooper      |-threads|-fopenmp|-fopenmp=*|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7503*132f818dSEnji Cooper	func_append compiler_flags " $arg"
7504*132f818dSEnji Cooper	func_append compile_command " $arg"
7505*132f818dSEnji Cooper	func_append finalize_command " $arg"
7506*132f818dSEnji Cooper	case "$new_inherited_linker_flags " in
7507*132f818dSEnji Cooper	    *" $arg "*) ;;
7508*132f818dSEnji Cooper	    * ) func_append new_inherited_linker_flags " $arg" ;;
7509*132f818dSEnji Cooper	esac
7510*132f818dSEnji Cooper	continue
7511*132f818dSEnji Cooper	;;
7512*132f818dSEnji Cooper
7513*132f818dSEnji Cooper      -multi_module)
7514*132f818dSEnji Cooper	single_module=$wl-multi_module
7515*132f818dSEnji Cooper	continue
7516*132f818dSEnji Cooper	;;
7517*132f818dSEnji Cooper
7518*132f818dSEnji Cooper      -no-fast-install)
7519*132f818dSEnji Cooper	fast_install=no
7520*132f818dSEnji Cooper	continue
7521*132f818dSEnji Cooper	;;
7522*132f818dSEnji Cooper
7523*132f818dSEnji Cooper      -no-install)
7524*132f818dSEnji Cooper	case $host in
7525*132f818dSEnji Cooper	*-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
7526*132f818dSEnji Cooper	  # The PATH hackery in wrapper scripts is required on Windows
7527*132f818dSEnji Cooper	  # and Darwin in order for the loader to find any dlls it needs.
7528*132f818dSEnji Cooper	  func_warning "'-no-install' is ignored for $host"
7529*132f818dSEnji Cooper	  func_warning "assuming '-no-fast-install' instead"
7530*132f818dSEnji Cooper	  fast_install=no
7531*132f818dSEnji Cooper	  ;;
7532*132f818dSEnji Cooper	*) no_install=yes ;;
7533*132f818dSEnji Cooper	esac
7534*132f818dSEnji Cooper	continue
7535*132f818dSEnji Cooper	;;
7536*132f818dSEnji Cooper
7537*132f818dSEnji Cooper      -no-undefined)
7538*132f818dSEnji Cooper	allow_undefined=no
7539*132f818dSEnji Cooper	continue
7540*132f818dSEnji Cooper	;;
7541*132f818dSEnji Cooper
7542*132f818dSEnji Cooper      -objectlist)
7543*132f818dSEnji Cooper	prev=objectlist
7544*132f818dSEnji Cooper	continue
7545*132f818dSEnji Cooper	;;
7546*132f818dSEnji Cooper
7547*132f818dSEnji Cooper      -os2dllname)
7548*132f818dSEnji Cooper	prev=os2dllname
7549*132f818dSEnji Cooper	continue
7550*132f818dSEnji Cooper	;;
7551*132f818dSEnji Cooper
7552*132f818dSEnji Cooper      -o) prev=output ;;
7553*132f818dSEnji Cooper
7554*132f818dSEnji Cooper      -precious-files-regex)
7555*132f818dSEnji Cooper	prev=precious_regex
7556*132f818dSEnji Cooper	continue
7557*132f818dSEnji Cooper	;;
7558*132f818dSEnji Cooper
7559*132f818dSEnji Cooper      -release)
7560*132f818dSEnji Cooper	prev=release
7561*132f818dSEnji Cooper	continue
7562*132f818dSEnji Cooper	;;
7563*132f818dSEnji Cooper
7564*132f818dSEnji Cooper      -rpath)
7565*132f818dSEnji Cooper	prev=rpath
7566*132f818dSEnji Cooper	continue
7567*132f818dSEnji Cooper	;;
7568*132f818dSEnji Cooper
7569*132f818dSEnji Cooper      -R)
7570*132f818dSEnji Cooper	prev=xrpath
7571*132f818dSEnji Cooper	continue
7572*132f818dSEnji Cooper	;;
7573*132f818dSEnji Cooper
7574*132f818dSEnji Cooper      -R*)
7575*132f818dSEnji Cooper	func_stripname '-R' '' "$arg"
7576*132f818dSEnji Cooper	dir=$func_stripname_result
7577*132f818dSEnji Cooper	# We need an absolute path.
7578*132f818dSEnji Cooper	case $dir in
7579*132f818dSEnji Cooper	[\\/]* | [A-Za-z]:[\\/]*) ;;
7580*132f818dSEnji Cooper	=*)
7581*132f818dSEnji Cooper	  func_stripname '=' '' "$dir"
7582*132f818dSEnji Cooper	  dir=$lt_sysroot$func_stripname_result
7583*132f818dSEnji Cooper	  ;;
7584*132f818dSEnji Cooper	*)
7585*132f818dSEnji Cooper	  func_fatal_error "argument ($arg) to '-R' is not an absolute path: $dir"
7586*132f818dSEnji Cooper	  ;;
7587*132f818dSEnji Cooper	esac
7588*132f818dSEnji Cooper	case "$xrpath " in
7589*132f818dSEnji Cooper	*" $dir "*) ;;
7590*132f818dSEnji Cooper	*) func_append xrpath " $dir" ;;
7591*132f818dSEnji Cooper	esac
7592*132f818dSEnji Cooper	continue
7593*132f818dSEnji Cooper	;;
7594*132f818dSEnji Cooper
7595*132f818dSEnji Cooper      -shared)
7596*132f818dSEnji Cooper	# The effects of -shared are defined in a previous loop.
7597*132f818dSEnji Cooper	continue
7598*132f818dSEnji Cooper	;;
7599*132f818dSEnji Cooper
7600*132f818dSEnji Cooper      -shrext)
7601*132f818dSEnji Cooper	prev=shrext
7602*132f818dSEnji Cooper	continue
7603*132f818dSEnji Cooper	;;
7604*132f818dSEnji Cooper
7605*132f818dSEnji Cooper      -static | -static-libtool-libs)
7606*132f818dSEnji Cooper	# The effects of -static are defined in a previous loop.
7607*132f818dSEnji Cooper	# We used to do the same as -all-static on platforms that
7608*132f818dSEnji Cooper	# didn't have a PIC flag, but the assumption that the effects
7609*132f818dSEnji Cooper	# would be equivalent was wrong.  It would break on at least
7610*132f818dSEnji Cooper	# Digital Unix and AIX.
7611*132f818dSEnji Cooper	continue
7612*132f818dSEnji Cooper	;;
7613*132f818dSEnji Cooper
7614*132f818dSEnji Cooper      -thread-safe)
7615*132f818dSEnji Cooper	thread_safe=yes
7616*132f818dSEnji Cooper	continue
7617*132f818dSEnji Cooper	;;
7618*132f818dSEnji Cooper
7619*132f818dSEnji Cooper      -version-info)
7620*132f818dSEnji Cooper	prev=vinfo
7621*132f818dSEnji Cooper	continue
7622*132f818dSEnji Cooper	;;
7623*132f818dSEnji Cooper
7624*132f818dSEnji Cooper      -version-number)
7625*132f818dSEnji Cooper	prev=vinfo
7626*132f818dSEnji Cooper	vinfo_number=yes
7627*132f818dSEnji Cooper	continue
7628*132f818dSEnji Cooper	;;
7629*132f818dSEnji Cooper
7630*132f818dSEnji Cooper      -weak)
7631*132f818dSEnji Cooper        prev=weak
7632*132f818dSEnji Cooper	continue
7633*132f818dSEnji Cooper	;;
7634*132f818dSEnji Cooper
7635*132f818dSEnji Cooper      -Wc,*)
7636*132f818dSEnji Cooper	func_stripname '-Wc,' '' "$arg"
7637*132f818dSEnji Cooper	args=$func_stripname_result
7638*132f818dSEnji Cooper	arg=
7639*132f818dSEnji Cooper	save_ifs=$IFS; IFS=,
7640*132f818dSEnji Cooper	for flag in $args; do
7641*132f818dSEnji Cooper	  IFS=$save_ifs
7642*132f818dSEnji Cooper          func_quote_arg pretty "$flag"
7643*132f818dSEnji Cooper	  func_append arg " $func_quote_arg_result"
7644*132f818dSEnji Cooper	  func_append compiler_flags " $func_quote_arg_result"
7645*132f818dSEnji Cooper	done
7646*132f818dSEnji Cooper	IFS=$save_ifs
7647*132f818dSEnji Cooper	func_stripname ' ' '' "$arg"
7648*132f818dSEnji Cooper	arg=$func_stripname_result
7649*132f818dSEnji Cooper	;;
7650*132f818dSEnji Cooper
7651*132f818dSEnji Cooper      -Wl,*)
7652*132f818dSEnji Cooper	func_stripname '-Wl,' '' "$arg"
7653*132f818dSEnji Cooper	args=$func_stripname_result
7654*132f818dSEnji Cooper	arg=
7655*132f818dSEnji Cooper	save_ifs=$IFS; IFS=,
7656*132f818dSEnji Cooper	for flag in $args; do
7657*132f818dSEnji Cooper	  IFS=$save_ifs
7658*132f818dSEnji Cooper          func_quote_arg pretty "$flag"
7659*132f818dSEnji Cooper	  func_append arg " $wl$func_quote_arg_result"
7660*132f818dSEnji Cooper	  func_append compiler_flags " $wl$func_quote_arg_result"
7661*132f818dSEnji Cooper	  func_append linker_flags " $func_quote_arg_result"
7662*132f818dSEnji Cooper	done
7663*132f818dSEnji Cooper	IFS=$save_ifs
7664*132f818dSEnji Cooper	func_stripname ' ' '' "$arg"
7665*132f818dSEnji Cooper	arg=$func_stripname_result
7666*132f818dSEnji Cooper	;;
7667*132f818dSEnji Cooper
7668*132f818dSEnji Cooper      -Xassembler)
7669*132f818dSEnji Cooper        prev=xassembler
7670*132f818dSEnji Cooper        continue
7671*132f818dSEnji Cooper        ;;
7672*132f818dSEnji Cooper
7673*132f818dSEnji Cooper      -Xcompiler)
7674*132f818dSEnji Cooper	prev=xcompiler
7675*132f818dSEnji Cooper	continue
7676*132f818dSEnji Cooper	;;
7677*132f818dSEnji Cooper
7678*132f818dSEnji Cooper      -Xlinker)
7679*132f818dSEnji Cooper	prev=xlinker
7680*132f818dSEnji Cooper	continue
7681*132f818dSEnji Cooper	;;
7682*132f818dSEnji Cooper
7683*132f818dSEnji Cooper      -XCClinker)
7684*132f818dSEnji Cooper	prev=xcclinker
7685*132f818dSEnji Cooper	continue
7686*132f818dSEnji Cooper	;;
7687*132f818dSEnji Cooper
7688*132f818dSEnji Cooper      # -msg_* for osf cc
7689*132f818dSEnji Cooper      -msg_*)
7690*132f818dSEnji Cooper	func_quote_arg pretty "$arg"
7691*132f818dSEnji Cooper	arg=$func_quote_arg_result
7692*132f818dSEnji Cooper	;;
7693*132f818dSEnji Cooper
7694*132f818dSEnji Cooper      # Flags to be passed through unchanged, with rationale:
7695*132f818dSEnji Cooper      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
7696*132f818dSEnji Cooper      # -r[0-9][0-9]*        specify processor for the SGI compiler
7697*132f818dSEnji Cooper      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
7698*132f818dSEnji Cooper      # +DA*, +DD*           enable 64-bit mode for the HP compiler
7699*132f818dSEnji Cooper      # -q*                  compiler args for the IBM compiler
7700*132f818dSEnji Cooper      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
7701*132f818dSEnji Cooper      # -F/path              path to uninstalled frameworks, gcc on darwin
7702*132f818dSEnji Cooper      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
7703*132f818dSEnji Cooper      # -fstack-protector*   stack protector flags for GCC
7704*132f818dSEnji Cooper      # @file                GCC response files
7705*132f818dSEnji Cooper      # -tp=*                Portland pgcc target processor selection
7706*132f818dSEnji Cooper      # --sysroot=*          for sysroot support
7707*132f818dSEnji Cooper      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
7708*132f818dSEnji Cooper      # -specs=*             GCC specs files
7709*132f818dSEnji Cooper      # -stdlib=*            select c++ std lib with clang
7710*132f818dSEnji Cooper      # -fdiagnostics-color* simply affects output
7711*132f818dSEnji Cooper      # -frecord-gcc-switches used to verify flags were respected
7712*132f818dSEnji Cooper      # -fsanitize=*         Clang/GCC memory and address sanitizer
7713*132f818dSEnji Cooper      # -fno-sanitize*       Clang/GCC memory and address sanitizer
7714*132f818dSEnji Cooper      # -shared-libsan       Link with shared sanitizer runtimes (Clang)
7715*132f818dSEnji Cooper      # -static-libsan       Link with static sanitizer runtimes (Clang)
7716*132f818dSEnji Cooper      # -no-canonical-prefixes Do not expand any symbolic links
7717*132f818dSEnji Cooper      # -fuse-ld=*           Linker select flags for GCC
7718*132f818dSEnji Cooper      # -static-*            direct GCC to link specific libraries statically
7719*132f818dSEnji Cooper      # -fcilkplus           Cilk Plus language extension features for C/C++
7720*132f818dSEnji Cooper      # -rtlib=*             select c runtime lib with clang
7721*132f818dSEnji Cooper      # --unwindlib=*        select unwinder library with clang
7722*132f818dSEnji Cooper      # -f{file|debug|macro|profile}-prefix-map=* needed for lto linking
7723*132f818dSEnji Cooper      # -Wa,*                Pass flags directly to the assembler
7724*132f818dSEnji Cooper      # -Werror, -Werror=*   Report (specified) warnings as errors
7725*132f818dSEnji Cooper      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
7726*132f818dSEnji Cooper      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
7727*132f818dSEnji Cooper      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-no-canonical-prefixes| \
7728*132f818dSEnji Cooper      -stdlib=*|-rtlib=*|--unwindlib=*| \
7729*132f818dSEnji Cooper      -specs=*|-fsanitize=*|-fno-sanitize*|-shared-libsan|-static-libsan| \
7730*132f818dSEnji Cooper      -ffile-prefix-map=*|-fdebug-prefix-map=*|-fmacro-prefix-map=*|-fprofile-prefix-map=*| \
7731*132f818dSEnji Cooper      -fdiagnostics-color*|-frecord-gcc-switches| \
7732*132f818dSEnji Cooper      -fuse-ld=*|-static-*|-fcilkplus|-Wa,*|-Werror|-Werror=*)
7733*132f818dSEnji Cooper        func_quote_arg pretty "$arg"
7734*132f818dSEnji Cooper	arg=$func_quote_arg_result
7735*132f818dSEnji Cooper        func_append compile_command " $arg"
7736*132f818dSEnji Cooper        func_append finalize_command " $arg"
7737*132f818dSEnji Cooper        func_append compiler_flags " $arg"
7738*132f818dSEnji Cooper        continue
7739*132f818dSEnji Cooper        ;;
7740*132f818dSEnji Cooper
7741*132f818dSEnji Cooper      -Z*)
7742*132f818dSEnji Cooper        if test os2 = "`expr $host : '.*\(os2\)'`"; then
7743*132f818dSEnji Cooper          # OS/2 uses -Zxxx to specify OS/2-specific options
7744*132f818dSEnji Cooper	  compiler_flags="$compiler_flags $arg"
7745*132f818dSEnji Cooper	  func_append compile_command " $arg"
7746*132f818dSEnji Cooper	  func_append finalize_command " $arg"
7747*132f818dSEnji Cooper	  case $arg in
7748*132f818dSEnji Cooper	  -Zlinker | -Zstack)
7749*132f818dSEnji Cooper	    prev=xcompiler
7750*132f818dSEnji Cooper	    ;;
7751*132f818dSEnji Cooper	  esac
7752*132f818dSEnji Cooper	  continue
7753*132f818dSEnji Cooper        else
7754*132f818dSEnji Cooper	  # Otherwise treat like 'Some other compiler flag' below
7755*132f818dSEnji Cooper	  func_quote_arg pretty "$arg"
7756*132f818dSEnji Cooper	  arg=$func_quote_arg_result
7757*132f818dSEnji Cooper        fi
7758*132f818dSEnji Cooper	;;
7759*132f818dSEnji Cooper
7760*132f818dSEnji Cooper      # Some other compiler flag.
7761*132f818dSEnji Cooper      -* | +*)
7762*132f818dSEnji Cooper        func_quote_arg pretty "$arg"
7763*132f818dSEnji Cooper	arg=$func_quote_arg_result
7764*132f818dSEnji Cooper	;;
7765*132f818dSEnji Cooper
7766*132f818dSEnji Cooper      *.$objext)
7767*132f818dSEnji Cooper	# A standard object.
7768*132f818dSEnji Cooper	func_append objs " $arg"
7769*132f818dSEnji Cooper	;;
7770*132f818dSEnji Cooper
7771*132f818dSEnji Cooper      *.lo)
7772*132f818dSEnji Cooper	# A libtool-controlled object.
7773*132f818dSEnji Cooper
7774*132f818dSEnji Cooper	# Check to see that this really is a libtool object.
7775*132f818dSEnji Cooper	if func_lalib_unsafe_p "$arg"; then
7776*132f818dSEnji Cooper	  pic_object=
7777*132f818dSEnji Cooper	  non_pic_object=
7778*132f818dSEnji Cooper
7779*132f818dSEnji Cooper	  # Read the .lo file
7780*132f818dSEnji Cooper	  func_source "$arg"
7781*132f818dSEnji Cooper
7782*132f818dSEnji Cooper	  if test -z "$pic_object" ||
7783*132f818dSEnji Cooper	     test -z "$non_pic_object" ||
7784*132f818dSEnji Cooper	     test none = "$pic_object" &&
7785*132f818dSEnji Cooper	     test none = "$non_pic_object"; then
7786*132f818dSEnji Cooper	    func_fatal_error "cannot find name of object for '$arg'"
7787*132f818dSEnji Cooper	  fi
7788*132f818dSEnji Cooper
7789*132f818dSEnji Cooper	  # Extract subdirectory from the argument.
7790*132f818dSEnji Cooper	  func_dirname "$arg" "/" ""
7791*132f818dSEnji Cooper	  xdir=$func_dirname_result
7792*132f818dSEnji Cooper
7793*132f818dSEnji Cooper	  test none = "$pic_object" || {
7794*132f818dSEnji Cooper	    # Prepend the subdirectory the object is found in.
7795*132f818dSEnji Cooper	    pic_object=$xdir$pic_object
7796*132f818dSEnji Cooper
7797*132f818dSEnji Cooper	    if test dlfiles = "$prev"; then
7798*132f818dSEnji Cooper	      if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
7799*132f818dSEnji Cooper		func_append dlfiles " $pic_object"
7800*132f818dSEnji Cooper		prev=
7801*132f818dSEnji Cooper		continue
7802*132f818dSEnji Cooper	      else
7803*132f818dSEnji Cooper		# If libtool objects are unsupported, then we need to preload.
7804*132f818dSEnji Cooper		prev=dlprefiles
7805*132f818dSEnji Cooper	      fi
7806*132f818dSEnji Cooper	    fi
7807*132f818dSEnji Cooper
7808*132f818dSEnji Cooper	    # CHECK ME:  I think I busted this.  -Ossama
7809*132f818dSEnji Cooper	    if test dlprefiles = "$prev"; then
7810*132f818dSEnji Cooper	      # Preload the old-style object.
7811*132f818dSEnji Cooper	      func_append dlprefiles " $pic_object"
7812*132f818dSEnji Cooper	      prev=
7813*132f818dSEnji Cooper	    fi
7814*132f818dSEnji Cooper
7815*132f818dSEnji Cooper	    # A PIC object.
7816*132f818dSEnji Cooper	    func_append libobjs " $pic_object"
7817*132f818dSEnji Cooper	    arg=$pic_object
7818*132f818dSEnji Cooper	  }
7819*132f818dSEnji Cooper
7820*132f818dSEnji Cooper	  # Non-PIC object.
7821*132f818dSEnji Cooper	  if test none != "$non_pic_object"; then
7822*132f818dSEnji Cooper	    # Prepend the subdirectory the object is found in.
7823*132f818dSEnji Cooper	    non_pic_object=$xdir$non_pic_object
7824*132f818dSEnji Cooper
7825*132f818dSEnji Cooper	    # A standard non-PIC object
7826*132f818dSEnji Cooper	    func_append non_pic_objects " $non_pic_object"
7827*132f818dSEnji Cooper	    if test -z "$pic_object" || test none = "$pic_object"; then
7828*132f818dSEnji Cooper	      arg=$non_pic_object
7829*132f818dSEnji Cooper	    fi
7830*132f818dSEnji Cooper	  else
7831*132f818dSEnji Cooper	    # If the PIC object exists, use it instead.
7832*132f818dSEnji Cooper	    # $xdir was prepended to $pic_object above.
7833*132f818dSEnji Cooper	    non_pic_object=$pic_object
7834*132f818dSEnji Cooper	    func_append non_pic_objects " $non_pic_object"
7835*132f818dSEnji Cooper	  fi
7836*132f818dSEnji Cooper	else
7837*132f818dSEnji Cooper	  # Only an error if not doing a dry-run.
7838*132f818dSEnji Cooper	  if $opt_dry_run; then
7839*132f818dSEnji Cooper	    # Extract subdirectory from the argument.
7840*132f818dSEnji Cooper	    func_dirname "$arg" "/" ""
7841*132f818dSEnji Cooper	    xdir=$func_dirname_result
7842*132f818dSEnji Cooper
7843*132f818dSEnji Cooper	    func_lo2o "$arg"
7844*132f818dSEnji Cooper	    pic_object=$xdir$objdir/$func_lo2o_result
7845*132f818dSEnji Cooper	    non_pic_object=$xdir$func_lo2o_result
7846*132f818dSEnji Cooper	    func_append libobjs " $pic_object"
7847*132f818dSEnji Cooper	    func_append non_pic_objects " $non_pic_object"
7848*132f818dSEnji Cooper	  else
7849*132f818dSEnji Cooper	    func_fatal_error "'$arg' is not a valid libtool object"
7850*132f818dSEnji Cooper	  fi
7851*132f818dSEnji Cooper	fi
7852*132f818dSEnji Cooper	;;
7853*132f818dSEnji Cooper
7854*132f818dSEnji Cooper      *.$libext)
7855*132f818dSEnji Cooper	# An archive.
7856*132f818dSEnji Cooper	func_append deplibs " $arg"
7857*132f818dSEnji Cooper	func_append old_deplibs " $arg"
7858*132f818dSEnji Cooper	continue
7859*132f818dSEnji Cooper	;;
7860*132f818dSEnji Cooper
7861*132f818dSEnji Cooper      *.la)
7862*132f818dSEnji Cooper	# A libtool-controlled library.
7863*132f818dSEnji Cooper
7864*132f818dSEnji Cooper	func_resolve_sysroot "$arg"
7865*132f818dSEnji Cooper	if test dlfiles = "$prev"; then
7866*132f818dSEnji Cooper	  # This library was specified with -dlopen.
7867*132f818dSEnji Cooper	  func_append dlfiles " $func_resolve_sysroot_result"
7868*132f818dSEnji Cooper	  prev=
7869*132f818dSEnji Cooper	elif test dlprefiles = "$prev"; then
7870*132f818dSEnji Cooper	  # The library was specified with -dlpreopen.
7871*132f818dSEnji Cooper	  func_append dlprefiles " $func_resolve_sysroot_result"
7872*132f818dSEnji Cooper	  prev=
7873*132f818dSEnji Cooper	else
7874*132f818dSEnji Cooper	  func_append deplibs " $func_resolve_sysroot_result"
7875*132f818dSEnji Cooper	fi
7876*132f818dSEnji Cooper	continue
7877*132f818dSEnji Cooper	;;
7878*132f818dSEnji Cooper
7879*132f818dSEnji Cooper      # Some other compiler argument.
7880*132f818dSEnji Cooper      *)
7881*132f818dSEnji Cooper	# Unknown arguments in both finalize_command and compile_command need
7882*132f818dSEnji Cooper	# to be aesthetically quoted because they are evaled later.
7883*132f818dSEnji Cooper	func_quote_arg pretty "$arg"
7884*132f818dSEnji Cooper	arg=$func_quote_arg_result
7885*132f818dSEnji Cooper	;;
7886*132f818dSEnji Cooper      esac # arg
7887*132f818dSEnji Cooper
7888*132f818dSEnji Cooper      # Now actually substitute the argument into the commands.
7889*132f818dSEnji Cooper      if test -n "$arg"; then
7890*132f818dSEnji Cooper	if test -n "$rpath_arg"; then
7891*132f818dSEnji Cooper          func_append finalize_rpath " ${arg##*,}"
7892*132f818dSEnji Cooper	  unset rpath_arg
7893*132f818dSEnji Cooper	else
7894*132f818dSEnji Cooper	  case $arg in
7895*132f818dSEnji Cooper          -Wl,-rpath,*)
7896*132f818dSEnji Cooper	    func_append finalize_rpath " ${arg##*,}";;
7897*132f818dSEnji Cooper          -Wl,-rpath)
7898*132f818dSEnji Cooper	    rpath_arg=1;;
7899*132f818dSEnji Cooper          *)
7900*132f818dSEnji Cooper            func_append compile_command " $arg"
7901*132f818dSEnji Cooper	    func_append finalize_command " $arg"
7902*132f818dSEnji Cooper	  esac
7903*132f818dSEnji Cooper        fi
7904*132f818dSEnji Cooper      fi
7905*132f818dSEnji Cooper    done # argument parsing loop
7906*132f818dSEnji Cooper
7907*132f818dSEnji Cooper    test -n "$prev" && \
7908*132f818dSEnji Cooper      func_fatal_help "the '$prevarg' option requires an argument"
7909*132f818dSEnji Cooper
7910*132f818dSEnji Cooper    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
7911*132f818dSEnji Cooper      eval arg=\"$export_dynamic_flag_spec\"
7912*132f818dSEnji Cooper      func_append compile_command " $arg"
7913*132f818dSEnji Cooper      func_append finalize_command " $arg"
7914*132f818dSEnji Cooper    fi
7915*132f818dSEnji Cooper
7916*132f818dSEnji Cooper    oldlibs=
7917*132f818dSEnji Cooper    # calculate the name of the file, without its directory
7918*132f818dSEnji Cooper    func_basename "$output"
7919*132f818dSEnji Cooper    outputname=$func_basename_result
7920*132f818dSEnji Cooper    libobjs_save=$libobjs
7921*132f818dSEnji Cooper
7922*132f818dSEnji Cooper    if test -n "$shlibpath_var"; then
7923*132f818dSEnji Cooper      # get the directories listed in $shlibpath_var
7924*132f818dSEnji Cooper      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
7925*132f818dSEnji Cooper    else
7926*132f818dSEnji Cooper      shlib_search_path=
7927*132f818dSEnji Cooper    fi
7928*132f818dSEnji Cooper    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
7929*132f818dSEnji Cooper    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
7930*132f818dSEnji Cooper
7931*132f818dSEnji Cooper    # Definition is injected by LT_CONFIG during libtool generation.
7932*132f818dSEnji Cooper    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
7933*132f818dSEnji Cooper
7934*132f818dSEnji Cooper    func_dirname "$output" "/" ""
7935*132f818dSEnji Cooper    output_objdir=$func_dirname_result$objdir
7936*132f818dSEnji Cooper    func_to_tool_file "$output_objdir/"
7937*132f818dSEnji Cooper    tool_output_objdir=$func_to_tool_file_result
7938*132f818dSEnji Cooper    # Create the object directory.
7939*132f818dSEnji Cooper    func_mkdir_p "$output_objdir"
7940*132f818dSEnji Cooper
7941*132f818dSEnji Cooper    # Determine the type of output
7942*132f818dSEnji Cooper    case $output in
7943*132f818dSEnji Cooper    "")
7944*132f818dSEnji Cooper      func_fatal_help "you must specify an output file"
7945*132f818dSEnji Cooper      ;;
7946*132f818dSEnji Cooper    *.$libext) linkmode=oldlib ;;
7947*132f818dSEnji Cooper    *.lo | *.$objext) linkmode=obj ;;
7948*132f818dSEnji Cooper    *.la) linkmode=lib ;;
7949*132f818dSEnji Cooper    *) linkmode=prog ;; # Anything else should be a program.
7950*132f818dSEnji Cooper    esac
7951*132f818dSEnji Cooper
7952*132f818dSEnji Cooper    specialdeplibs=
7953*132f818dSEnji Cooper
7954*132f818dSEnji Cooper    libs=
7955*132f818dSEnji Cooper    # Find all interdependent deplibs by searching for libraries
7956*132f818dSEnji Cooper    # that are linked more than once (e.g. -la -lb -la)
7957*132f818dSEnji Cooper    for deplib in $deplibs; do
7958*132f818dSEnji Cooper      if $opt_preserve_dup_deps; then
7959*132f818dSEnji Cooper	case "$libs " in
7960*132f818dSEnji Cooper	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
7961*132f818dSEnji Cooper	esac
7962*132f818dSEnji Cooper      fi
7963*132f818dSEnji Cooper      func_append libs " $deplib"
7964*132f818dSEnji Cooper    done
7965*132f818dSEnji Cooper
7966*132f818dSEnji Cooper    if test lib = "$linkmode"; then
7967*132f818dSEnji Cooper      libs="$predeps $libs $compiler_lib_search_path $postdeps"
7968*132f818dSEnji Cooper
7969*132f818dSEnji Cooper      # Compute libraries that are listed more than once in $predeps
7970*132f818dSEnji Cooper      # $postdeps and mark them as special (i.e., whose duplicates are
7971*132f818dSEnji Cooper      # not to be eliminated).
7972*132f818dSEnji Cooper      pre_post_deps=
7973*132f818dSEnji Cooper      if $opt_duplicate_compiler_generated_deps; then
7974*132f818dSEnji Cooper	for pre_post_dep in $predeps $postdeps; do
7975*132f818dSEnji Cooper	  case "$pre_post_deps " in
7976*132f818dSEnji Cooper	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
7977*132f818dSEnji Cooper	  esac
7978*132f818dSEnji Cooper	  func_append pre_post_deps " $pre_post_dep"
7979*132f818dSEnji Cooper	done
7980*132f818dSEnji Cooper      fi
7981*132f818dSEnji Cooper      pre_post_deps=
7982*132f818dSEnji Cooper    fi
7983*132f818dSEnji Cooper
7984*132f818dSEnji Cooper    deplibs=
7985*132f818dSEnji Cooper    newdependency_libs=
7986*132f818dSEnji Cooper    newlib_search_path=
7987*132f818dSEnji Cooper    need_relink=no # whether we're linking any uninstalled libtool libraries
7988*132f818dSEnji Cooper    notinst_deplibs= # not-installed libtool libraries
7989*132f818dSEnji Cooper    notinst_path= # paths that contain not-installed libtool libraries
7990*132f818dSEnji Cooper
7991*132f818dSEnji Cooper    case $linkmode in
7992*132f818dSEnji Cooper    lib)
7993*132f818dSEnji Cooper	passes="conv dlpreopen link"
7994*132f818dSEnji Cooper	for file in $dlfiles $dlprefiles; do
7995*132f818dSEnji Cooper	  case $file in
7996*132f818dSEnji Cooper	  *.la) ;;
7997*132f818dSEnji Cooper	  *)
7998*132f818dSEnji Cooper	    func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
7999*132f818dSEnji Cooper	    ;;
8000*132f818dSEnji Cooper	  esac
8001*132f818dSEnji Cooper	done
8002*132f818dSEnji Cooper	;;
8003*132f818dSEnji Cooper    prog)
8004*132f818dSEnji Cooper	compile_deplibs=
8005*132f818dSEnji Cooper	finalize_deplibs=
8006*132f818dSEnji Cooper	alldeplibs=false
8007*132f818dSEnji Cooper	newdlfiles=
8008*132f818dSEnji Cooper	newdlprefiles=
8009*132f818dSEnji Cooper	passes="conv scan dlopen dlpreopen link"
8010*132f818dSEnji Cooper	;;
8011*132f818dSEnji Cooper    *)  passes="conv"
8012*132f818dSEnji Cooper	;;
8013*132f818dSEnji Cooper    esac
8014*132f818dSEnji Cooper
8015*132f818dSEnji Cooper    for pass in $passes; do
8016*132f818dSEnji Cooper      # The preopen pass in lib mode reverses $deplibs; put it back here
8017*132f818dSEnji Cooper      # so that -L comes before libs that need it for instance...
8018*132f818dSEnji Cooper      if test lib,link = "$linkmode,$pass"; then
8019*132f818dSEnji Cooper	## FIXME: Find the place where the list is rebuilt in the wrong
8020*132f818dSEnji Cooper	##        order, and fix it there properly
8021*132f818dSEnji Cooper        tmp_deplibs=
8022*132f818dSEnji Cooper	for deplib in $deplibs; do
8023*132f818dSEnji Cooper	  tmp_deplibs="$deplib $tmp_deplibs"
8024*132f818dSEnji Cooper	done
8025*132f818dSEnji Cooper	deplibs=$tmp_deplibs
8026*132f818dSEnji Cooper      fi
8027*132f818dSEnji Cooper
8028*132f818dSEnji Cooper      if test lib,link = "$linkmode,$pass" ||
8029*132f818dSEnji Cooper	 test prog,scan = "$linkmode,$pass"; then
8030*132f818dSEnji Cooper	libs=$deplibs
8031*132f818dSEnji Cooper	deplibs=
8032*132f818dSEnji Cooper      fi
8033*132f818dSEnji Cooper      if test prog = "$linkmode"; then
8034*132f818dSEnji Cooper	case $pass in
8035*132f818dSEnji Cooper	dlopen) libs=$dlfiles ;;
8036*132f818dSEnji Cooper	dlpreopen) libs=$dlprefiles ;;
8037*132f818dSEnji Cooper	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
8038*132f818dSEnji Cooper	esac
8039*132f818dSEnji Cooper      fi
8040*132f818dSEnji Cooper      if test lib,dlpreopen = "$linkmode,$pass"; then
8041*132f818dSEnji Cooper	# Collect and forward deplibs of preopened libtool libs
8042*132f818dSEnji Cooper	for lib in $dlprefiles; do
8043*132f818dSEnji Cooper	  # Ignore non-libtool-libs
8044*132f818dSEnji Cooper	  dependency_libs=
8045*132f818dSEnji Cooper	  func_resolve_sysroot "$lib"
8046*132f818dSEnji Cooper	  case $lib in
8047*132f818dSEnji Cooper	  *.la)	func_source "$func_resolve_sysroot_result" ;;
8048*132f818dSEnji Cooper	  esac
8049*132f818dSEnji Cooper
8050*132f818dSEnji Cooper	  # Collect preopened libtool deplibs, except any this library
8051*132f818dSEnji Cooper	  # has declared as weak libs
8052*132f818dSEnji Cooper	  for deplib in $dependency_libs; do
8053*132f818dSEnji Cooper	    func_basename "$deplib"
8054*132f818dSEnji Cooper            deplib_base=$func_basename_result
8055*132f818dSEnji Cooper	    case " $weak_libs " in
8056*132f818dSEnji Cooper	    *" $deplib_base "*) ;;
8057*132f818dSEnji Cooper	    *) func_append deplibs " $deplib" ;;
8058*132f818dSEnji Cooper	    esac
8059*132f818dSEnji Cooper	  done
8060*132f818dSEnji Cooper	done
8061*132f818dSEnji Cooper	libs=$dlprefiles
8062*132f818dSEnji Cooper      fi
8063*132f818dSEnji Cooper      if test dlopen = "$pass"; then
8064*132f818dSEnji Cooper	# Collect dlpreopened libraries
8065*132f818dSEnji Cooper	save_deplibs=$deplibs
8066*132f818dSEnji Cooper	deplibs=
8067*132f818dSEnji Cooper      fi
8068*132f818dSEnji Cooper
8069*132f818dSEnji Cooper      for deplib in $libs; do
8070*132f818dSEnji Cooper	lib=
8071*132f818dSEnji Cooper	found=false
8072*132f818dSEnji Cooper	case $deplib in
8073*132f818dSEnji Cooper	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
8074*132f818dSEnji Cooper        |-threads|-fopenmp|-fopenmp=*|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
8075*132f818dSEnji Cooper	  if test prog,link = "$linkmode,$pass"; then
8076*132f818dSEnji Cooper	    compile_deplibs="$deplib $compile_deplibs"
8077*132f818dSEnji Cooper	    finalize_deplibs="$deplib $finalize_deplibs"
8078*132f818dSEnji Cooper	  else
8079*132f818dSEnji Cooper	    func_append compiler_flags " $deplib"
8080*132f818dSEnji Cooper	    if test lib = "$linkmode"; then
8081*132f818dSEnji Cooper		case "$new_inherited_linker_flags " in
8082*132f818dSEnji Cooper		    *" $deplib "*) ;;
8083*132f818dSEnji Cooper		    * ) func_append new_inherited_linker_flags " $deplib" ;;
8084*132f818dSEnji Cooper		esac
8085*132f818dSEnji Cooper	    fi
8086*132f818dSEnji Cooper	  fi
8087*132f818dSEnji Cooper	  continue
8088*132f818dSEnji Cooper	  ;;
8089*132f818dSEnji Cooper	-l*)
8090*132f818dSEnji Cooper	  if test lib != "$linkmode" && test prog != "$linkmode"; then
8091*132f818dSEnji Cooper	    func_warning "'-l' is ignored for archives/objects"
8092*132f818dSEnji Cooper	    continue
8093*132f818dSEnji Cooper	  fi
8094*132f818dSEnji Cooper	  func_stripname '-l' '' "$deplib"
8095*132f818dSEnji Cooper	  name=$func_stripname_result
8096*132f818dSEnji Cooper	  if test lib = "$linkmode"; then
8097*132f818dSEnji Cooper	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
8098*132f818dSEnji Cooper	  else
8099*132f818dSEnji Cooper	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
8100*132f818dSEnji Cooper	  fi
8101*132f818dSEnji Cooper	  for searchdir in $searchdirs; do
8102*132f818dSEnji Cooper	    for search_ext in .la $std_shrext .so .a; do
8103*132f818dSEnji Cooper	      # Search the libtool library
8104*132f818dSEnji Cooper	      lib=$searchdir/lib$name$search_ext
8105*132f818dSEnji Cooper	      if test -f "$lib"; then
8106*132f818dSEnji Cooper		if test .la = "$search_ext"; then
8107*132f818dSEnji Cooper		  found=:
8108*132f818dSEnji Cooper		else
8109*132f818dSEnji Cooper		  found=false
8110*132f818dSEnji Cooper		fi
8111*132f818dSEnji Cooper		break 2
8112*132f818dSEnji Cooper	      fi
8113*132f818dSEnji Cooper	    done
8114*132f818dSEnji Cooper	  done
8115*132f818dSEnji Cooper	  if $found; then
8116*132f818dSEnji Cooper	    # deplib is a libtool library
8117*132f818dSEnji Cooper	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
8118*132f818dSEnji Cooper	    # We need to do some special things here, and not later.
8119*132f818dSEnji Cooper	    if test yes = "$allow_libtool_libs_with_static_runtimes"; then
8120*132f818dSEnji Cooper	      case " $predeps $postdeps " in
8121*132f818dSEnji Cooper	      *" $deplib "*)
8122*132f818dSEnji Cooper		if func_lalib_p "$lib"; then
8123*132f818dSEnji Cooper		  library_names=
8124*132f818dSEnji Cooper		  old_library=
8125*132f818dSEnji Cooper		  func_source "$lib"
8126*132f818dSEnji Cooper		  for l in $old_library $library_names; do
8127*132f818dSEnji Cooper		    ll=$l
8128*132f818dSEnji Cooper		  done
8129*132f818dSEnji Cooper		  if test "X$ll" = "X$old_library"; then # only static version available
8130*132f818dSEnji Cooper		    found=false
8131*132f818dSEnji Cooper		    func_dirname "$lib" "" "."
8132*132f818dSEnji Cooper		    ladir=$func_dirname_result
8133*132f818dSEnji Cooper		    lib=$ladir/$old_library
8134*132f818dSEnji Cooper		    if test prog,link = "$linkmode,$pass"; then
8135*132f818dSEnji Cooper		      compile_deplibs="$deplib $compile_deplibs"
8136*132f818dSEnji Cooper		      finalize_deplibs="$deplib $finalize_deplibs"
8137*132f818dSEnji Cooper		    else
8138*132f818dSEnji Cooper		      deplibs="$deplib $deplibs"
8139*132f818dSEnji Cooper		      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
8140*132f818dSEnji Cooper		    fi
8141*132f818dSEnji Cooper		    continue
8142*132f818dSEnji Cooper		  fi
8143*132f818dSEnji Cooper		fi
8144*132f818dSEnji Cooper		;;
8145*132f818dSEnji Cooper	      *) ;;
8146*132f818dSEnji Cooper	      esac
8147*132f818dSEnji Cooper	    fi
8148*132f818dSEnji Cooper	  else
8149*132f818dSEnji Cooper	    # deplib doesn't seem to be a libtool library
8150*132f818dSEnji Cooper	    if test prog,link = "$linkmode,$pass"; then
8151*132f818dSEnji Cooper	      compile_deplibs="$deplib $compile_deplibs"
8152*132f818dSEnji Cooper	      finalize_deplibs="$deplib $finalize_deplibs"
8153*132f818dSEnji Cooper	    else
8154*132f818dSEnji Cooper	      deplibs="$deplib $deplibs"
8155*132f818dSEnji Cooper	      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
8156*132f818dSEnji Cooper	    fi
8157*132f818dSEnji Cooper	    continue
8158*132f818dSEnji Cooper	  fi
8159*132f818dSEnji Cooper	  ;; # -l
8160*132f818dSEnji Cooper	*.ltframework)
8161*132f818dSEnji Cooper	  if test prog,link = "$linkmode,$pass"; then
8162*132f818dSEnji Cooper	    compile_deplibs="$deplib $compile_deplibs"
8163*132f818dSEnji Cooper	    finalize_deplibs="$deplib $finalize_deplibs"
8164*132f818dSEnji Cooper	  else
8165*132f818dSEnji Cooper	    deplibs="$deplib $deplibs"
8166*132f818dSEnji Cooper	    if test lib = "$linkmode"; then
8167*132f818dSEnji Cooper		case "$new_inherited_linker_flags " in
8168*132f818dSEnji Cooper		    *" $deplib "*) ;;
8169*132f818dSEnji Cooper		    * ) func_append new_inherited_linker_flags " $deplib" ;;
8170*132f818dSEnji Cooper		esac
8171*132f818dSEnji Cooper	    fi
8172*132f818dSEnji Cooper	  fi
8173*132f818dSEnji Cooper	  continue
8174*132f818dSEnji Cooper	  ;;
8175*132f818dSEnji Cooper	-L*)
8176*132f818dSEnji Cooper	  case $linkmode in
8177*132f818dSEnji Cooper	  lib)
8178*132f818dSEnji Cooper	    deplibs="$deplib $deplibs"
8179*132f818dSEnji Cooper	    test conv = "$pass" && continue
8180*132f818dSEnji Cooper	    newdependency_libs="$deplib $newdependency_libs"
8181*132f818dSEnji Cooper	    func_stripname '-L' '' "$deplib"
8182*132f818dSEnji Cooper	    func_resolve_sysroot "$func_stripname_result"
8183*132f818dSEnji Cooper	    func_append newlib_search_path " $func_resolve_sysroot_result"
8184*132f818dSEnji Cooper	    ;;
8185*132f818dSEnji Cooper	  prog)
8186*132f818dSEnji Cooper	    if test conv = "$pass"; then
8187*132f818dSEnji Cooper	      deplibs="$deplib $deplibs"
8188*132f818dSEnji Cooper	      continue
8189*132f818dSEnji Cooper	    fi
8190*132f818dSEnji Cooper	    if test scan = "$pass"; then
8191*132f818dSEnji Cooper	      deplibs="$deplib $deplibs"
8192*132f818dSEnji Cooper	    else
8193*132f818dSEnji Cooper	      compile_deplibs="$deplib $compile_deplibs"
8194*132f818dSEnji Cooper	      finalize_deplibs="$deplib $finalize_deplibs"
8195*132f818dSEnji Cooper	    fi
8196*132f818dSEnji Cooper	    func_stripname '-L' '' "$deplib"
8197*132f818dSEnji Cooper	    func_resolve_sysroot "$func_stripname_result"
8198*132f818dSEnji Cooper	    func_append newlib_search_path " $func_resolve_sysroot_result"
8199*132f818dSEnji Cooper	    ;;
8200*132f818dSEnji Cooper	  *)
8201*132f818dSEnji Cooper	    func_warning "'-L' is ignored for archives/objects"
8202*132f818dSEnji Cooper	    ;;
8203*132f818dSEnji Cooper	  esac # linkmode
8204*132f818dSEnji Cooper	  continue
8205*132f818dSEnji Cooper	  ;; # -L
8206*132f818dSEnji Cooper	-R*)
8207*132f818dSEnji Cooper	  if test link = "$pass"; then
8208*132f818dSEnji Cooper	    func_stripname '-R' '' "$deplib"
8209*132f818dSEnji Cooper	    func_resolve_sysroot "$func_stripname_result"
8210*132f818dSEnji Cooper	    dir=$func_resolve_sysroot_result
8211*132f818dSEnji Cooper	    # Make sure the xrpath contains only unique directories.
8212*132f818dSEnji Cooper	    case "$xrpath " in
8213*132f818dSEnji Cooper	    *" $dir "*) ;;
8214*132f818dSEnji Cooper	    *) func_append xrpath " $dir" ;;
8215*132f818dSEnji Cooper	    esac
8216*132f818dSEnji Cooper	  fi
8217*132f818dSEnji Cooper	  deplibs="$deplib $deplibs"
8218*132f818dSEnji Cooper	  continue
8219*132f818dSEnji Cooper	  ;;
8220*132f818dSEnji Cooper	*.la)
8221*132f818dSEnji Cooper	  func_resolve_sysroot "$deplib"
8222*132f818dSEnji Cooper	  lib=$func_resolve_sysroot_result
8223*132f818dSEnji Cooper	  ;;
8224*132f818dSEnji Cooper	*.$libext)
8225*132f818dSEnji Cooper	  if test conv = "$pass"; then
8226*132f818dSEnji Cooper	    deplibs="$deplib $deplibs"
8227*132f818dSEnji Cooper	    continue
8228*132f818dSEnji Cooper	  fi
8229*132f818dSEnji Cooper	  case $linkmode in
8230*132f818dSEnji Cooper	  lib)
8231*132f818dSEnji Cooper	    # Linking convenience modules into shared libraries is allowed,
8232*132f818dSEnji Cooper	    # but linking other static libraries is non-portable.
8233*132f818dSEnji Cooper	    case " $dlpreconveniencelibs " in
8234*132f818dSEnji Cooper	    *" $deplib "*) ;;
8235*132f818dSEnji Cooper	    *)
8236*132f818dSEnji Cooper	      valid_a_lib=false
8237*132f818dSEnji Cooper	      case $deplibs_check_method in
8238*132f818dSEnji Cooper		match_pattern*)
8239*132f818dSEnji Cooper		  set dummy $deplibs_check_method; shift
8240*132f818dSEnji Cooper		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
8241*132f818dSEnji Cooper		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
8242*132f818dSEnji Cooper		    | $EGREP "$match_pattern_regex" > /dev/null; then
8243*132f818dSEnji Cooper		    valid_a_lib=:
8244*132f818dSEnji Cooper		  fi
8245*132f818dSEnji Cooper		;;
8246*132f818dSEnji Cooper		pass_all)
8247*132f818dSEnji Cooper		  valid_a_lib=:
8248*132f818dSEnji Cooper		;;
8249*132f818dSEnji Cooper	      esac
8250*132f818dSEnji Cooper	      if $valid_a_lib; then
8251*132f818dSEnji Cooper		func_warning "Linking the shared library $output against the static library $deplib is not portable!"
8252*132f818dSEnji Cooper		deplibs="$deplib $deplibs"
8253*132f818dSEnji Cooper	      else
8254*132f818dSEnji Cooper		func_warning "Trying to link with static lib archive $deplib."
8255*132f818dSEnji Cooper		func_warning "I have the capability to make that library automatically link in when"
8256*132f818dSEnji Cooper		func_warning "you link to this library.  But I can only do this if you have a"
8257*132f818dSEnji Cooper		func_warning "shared version of the library, which you do not appear to have"
8258*132f818dSEnji Cooper		func_warning "because the file extensions .$libext of this argument makes me believe"
8259*132f818dSEnji Cooper		func_warning "that it is just a static archive that I should not use here."
8260*132f818dSEnji Cooper	      fi
8261*132f818dSEnji Cooper	      ;;
8262*132f818dSEnji Cooper	    esac
8263*132f818dSEnji Cooper	    continue
8264*132f818dSEnji Cooper	    ;;
8265*132f818dSEnji Cooper	  prog)
8266*132f818dSEnji Cooper	    if test link != "$pass"; then
8267*132f818dSEnji Cooper	      deplibs="$deplib $deplibs"
8268*132f818dSEnji Cooper	    else
8269*132f818dSEnji Cooper	      compile_deplibs="$deplib $compile_deplibs"
8270*132f818dSEnji Cooper	      finalize_deplibs="$deplib $finalize_deplibs"
8271*132f818dSEnji Cooper	    fi
8272*132f818dSEnji Cooper	    continue
8273*132f818dSEnji Cooper	    ;;
8274*132f818dSEnji Cooper	  esac # linkmode
8275*132f818dSEnji Cooper	  ;; # *.$libext
8276*132f818dSEnji Cooper	*.lo | *.$objext)
8277*132f818dSEnji Cooper	  if test conv = "$pass"; then
8278*132f818dSEnji Cooper	    deplibs="$deplib $deplibs"
8279*132f818dSEnji Cooper	  elif test prog = "$linkmode"; then
8280*132f818dSEnji Cooper	    if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
8281*132f818dSEnji Cooper	      # If there is no dlopen support or we're linking statically,
8282*132f818dSEnji Cooper	      # we need to preload.
8283*132f818dSEnji Cooper	      func_append newdlprefiles " $deplib"
8284*132f818dSEnji Cooper	      compile_deplibs="$deplib $compile_deplibs"
8285*132f818dSEnji Cooper	      finalize_deplibs="$deplib $finalize_deplibs"
8286*132f818dSEnji Cooper	    else
8287*132f818dSEnji Cooper	      func_append newdlfiles " $deplib"
8288*132f818dSEnji Cooper	    fi
8289*132f818dSEnji Cooper	  fi
8290*132f818dSEnji Cooper	  continue
8291*132f818dSEnji Cooper	  ;;
8292*132f818dSEnji Cooper	%DEPLIBS%)
8293*132f818dSEnji Cooper	  alldeplibs=:
8294*132f818dSEnji Cooper	  continue
8295*132f818dSEnji Cooper	  ;;
8296*132f818dSEnji Cooper	esac # case $deplib
8297*132f818dSEnji Cooper
8298*132f818dSEnji Cooper	$found || test -f "$lib" \
8299*132f818dSEnji Cooper	  || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
8300*132f818dSEnji Cooper
8301*132f818dSEnji Cooper	# Check to see that this really is a libtool archive.
8302*132f818dSEnji Cooper	func_lalib_unsafe_p "$lib" \
8303*132f818dSEnji Cooper	  || func_fatal_error "'$lib' is not a valid libtool archive"
8304*132f818dSEnji Cooper
8305*132f818dSEnji Cooper	func_dirname "$lib" "" "."
8306*132f818dSEnji Cooper	ladir=$func_dirname_result
8307*132f818dSEnji Cooper
8308*132f818dSEnji Cooper	dlname=
8309*132f818dSEnji Cooper	dlopen=
8310*132f818dSEnji Cooper	dlpreopen=
8311*132f818dSEnji Cooper	libdir=
8312*132f818dSEnji Cooper	library_names=
8313*132f818dSEnji Cooper	old_library=
8314*132f818dSEnji Cooper	inherited_linker_flags=
8315*132f818dSEnji Cooper	# If the library was installed with an old release of libtool,
8316*132f818dSEnji Cooper	# it will not redefine variables installed, or shouldnotlink
8317*132f818dSEnji Cooper	installed=yes
8318*132f818dSEnji Cooper	shouldnotlink=no
8319*132f818dSEnji Cooper	avoidtemprpath=
8320*132f818dSEnji Cooper
8321*132f818dSEnji Cooper
8322*132f818dSEnji Cooper	# Read the .la file
8323*132f818dSEnji Cooper	func_source "$lib"
8324*132f818dSEnji Cooper
8325*132f818dSEnji Cooper	# Convert "-framework foo" to "foo.ltframework"
8326*132f818dSEnji Cooper	if test -n "$inherited_linker_flags"; then
8327*132f818dSEnji Cooper	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
8328*132f818dSEnji Cooper	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
8329*132f818dSEnji Cooper	    case " $new_inherited_linker_flags " in
8330*132f818dSEnji Cooper	      *" $tmp_inherited_linker_flag "*) ;;
8331*132f818dSEnji Cooper	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
8332*132f818dSEnji Cooper	    esac
8333*132f818dSEnji Cooper	  done
8334*132f818dSEnji Cooper	fi
8335*132f818dSEnji Cooper	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8336*132f818dSEnji Cooper	if test lib,link = "$linkmode,$pass" ||
8337*132f818dSEnji Cooper	   test prog,scan = "$linkmode,$pass" ||
8338*132f818dSEnji Cooper	   { test prog != "$linkmode" && test lib != "$linkmode"; }; then
8339*132f818dSEnji Cooper	  test -n "$dlopen" && func_append dlfiles " $dlopen"
8340*132f818dSEnji Cooper	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
8341*132f818dSEnji Cooper	fi
8342*132f818dSEnji Cooper
8343*132f818dSEnji Cooper	if test conv = "$pass"; then
8344*132f818dSEnji Cooper	  # Only check for convenience libraries
8345*132f818dSEnji Cooper	  deplibs="$lib $deplibs"
8346*132f818dSEnji Cooper	  if test -z "$libdir"; then
8347*132f818dSEnji Cooper	    if test -z "$old_library"; then
8348*132f818dSEnji Cooper	      func_fatal_error "cannot find name of link library for '$lib'"
8349*132f818dSEnji Cooper	    fi
8350*132f818dSEnji Cooper	    # It is a libtool convenience library, so add in its objects.
8351*132f818dSEnji Cooper	    func_append convenience " $ladir/$objdir/$old_library"
8352*132f818dSEnji Cooper	    func_append old_convenience " $ladir/$objdir/$old_library"
8353*132f818dSEnji Cooper	  elif test prog != "$linkmode" && test lib != "$linkmode"; then
8354*132f818dSEnji Cooper	    func_fatal_error "'$lib' is not a convenience library"
8355*132f818dSEnji Cooper	  fi
8356*132f818dSEnji Cooper	  tmp_libs=
8357*132f818dSEnji Cooper	  for deplib in $dependency_libs; do
8358*132f818dSEnji Cooper	    deplibs="$deplib $deplibs"
8359*132f818dSEnji Cooper	    if $opt_preserve_dup_deps; then
8360*132f818dSEnji Cooper	      case "$tmp_libs " in
8361*132f818dSEnji Cooper	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8362*132f818dSEnji Cooper	      esac
8363*132f818dSEnji Cooper	    fi
8364*132f818dSEnji Cooper	    func_append tmp_libs " $deplib"
8365*132f818dSEnji Cooper	  done
8366*132f818dSEnji Cooper	  continue
8367*132f818dSEnji Cooper	fi # $pass = conv
8368*132f818dSEnji Cooper
8369*132f818dSEnji Cooper
8370*132f818dSEnji Cooper	# Get the name of the library we link against.
8371*132f818dSEnji Cooper	linklib=
8372*132f818dSEnji Cooper	if test -n "$old_library" &&
8373*132f818dSEnji Cooper	   { test yes = "$prefer_static_libs" ||
8374*132f818dSEnji Cooper	     test built,no = "$prefer_static_libs,$installed"; }; then
8375*132f818dSEnji Cooper	  linklib=$old_library
8376*132f818dSEnji Cooper	else
8377*132f818dSEnji Cooper	  for l in $old_library $library_names; do
8378*132f818dSEnji Cooper	    linklib=$l
8379*132f818dSEnji Cooper	  done
8380*132f818dSEnji Cooper	fi
8381*132f818dSEnji Cooper	if test -z "$linklib"; then
8382*132f818dSEnji Cooper	  func_fatal_error "cannot find name of link library for '$lib'"
8383*132f818dSEnji Cooper	fi
8384*132f818dSEnji Cooper
8385*132f818dSEnji Cooper	# This library was specified with -dlopen.
8386*132f818dSEnji Cooper	if test dlopen = "$pass"; then
8387*132f818dSEnji Cooper	  test -z "$libdir" \
8388*132f818dSEnji Cooper	    && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
8389*132f818dSEnji Cooper	  if test -z "$dlname" ||
8390*132f818dSEnji Cooper	     test yes != "$dlopen_support" ||
8391*132f818dSEnji Cooper	     test no = "$build_libtool_libs"
8392*132f818dSEnji Cooper	  then
8393*132f818dSEnji Cooper	    # If there is no dlname, no dlopen support or we're linking
8394*132f818dSEnji Cooper	    # statically, we need to preload.  We also need to preload any
8395*132f818dSEnji Cooper	    # dependent libraries so libltdl's deplib preloader doesn't
8396*132f818dSEnji Cooper	    # bomb out in the load deplibs phase.
8397*132f818dSEnji Cooper	    func_append dlprefiles " $lib $dependency_libs"
8398*132f818dSEnji Cooper	  else
8399*132f818dSEnji Cooper	    func_append newdlfiles " $lib"
8400*132f818dSEnji Cooper	  fi
8401*132f818dSEnji Cooper	  continue
8402*132f818dSEnji Cooper	fi # $pass = dlopen
8403*132f818dSEnji Cooper
8404*132f818dSEnji Cooper	# We need an absolute path.
8405*132f818dSEnji Cooper	case $ladir in
8406*132f818dSEnji Cooper	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
8407*132f818dSEnji Cooper	*)
8408*132f818dSEnji Cooper	  abs_ladir=`cd "$ladir" && pwd`
8409*132f818dSEnji Cooper	  if test -z "$abs_ladir"; then
8410*132f818dSEnji Cooper	    func_warning "cannot determine absolute directory name of '$ladir'"
8411*132f818dSEnji Cooper	    func_warning "passing it literally to the linker, although it might fail"
8412*132f818dSEnji Cooper	    abs_ladir=$ladir
8413*132f818dSEnji Cooper	  fi
8414*132f818dSEnji Cooper	  ;;
8415*132f818dSEnji Cooper	esac
8416*132f818dSEnji Cooper	func_basename "$lib"
8417*132f818dSEnji Cooper	laname=$func_basename_result
8418*132f818dSEnji Cooper
8419*132f818dSEnji Cooper	# Find the relevant object directory and library name.
8420*132f818dSEnji Cooper	if test yes = "$installed"; then
8421*132f818dSEnji Cooper	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
8422*132f818dSEnji Cooper	    func_warning "library '$lib' was moved."
8423*132f818dSEnji Cooper	    dir=$ladir
8424*132f818dSEnji Cooper	    absdir=$abs_ladir
8425*132f818dSEnji Cooper	    libdir=$abs_ladir
8426*132f818dSEnji Cooper	  else
8427*132f818dSEnji Cooper	    dir=$lt_sysroot$libdir
8428*132f818dSEnji Cooper	    absdir=$lt_sysroot$libdir
8429*132f818dSEnji Cooper	  fi
8430*132f818dSEnji Cooper	  test yes = "$hardcode_automatic" && avoidtemprpath=yes
8431*132f818dSEnji Cooper	else
8432*132f818dSEnji Cooper	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
8433*132f818dSEnji Cooper	    dir=$ladir
8434*132f818dSEnji Cooper	    absdir=$abs_ladir
8435*132f818dSEnji Cooper	    # Remove this search path later
8436*132f818dSEnji Cooper	    func_append notinst_path " $abs_ladir"
8437*132f818dSEnji Cooper	  else
8438*132f818dSEnji Cooper	    dir=$ladir/$objdir
8439*132f818dSEnji Cooper	    absdir=$abs_ladir/$objdir
8440*132f818dSEnji Cooper	    # Remove this search path later
8441*132f818dSEnji Cooper	    func_append notinst_path " $abs_ladir"
8442*132f818dSEnji Cooper	  fi
8443*132f818dSEnji Cooper	fi # $installed = yes
8444*132f818dSEnji Cooper	func_stripname 'lib' '.la' "$laname"
8445*132f818dSEnji Cooper	name=$func_stripname_result
8446*132f818dSEnji Cooper
8447*132f818dSEnji Cooper	# This library was specified with -dlpreopen.
8448*132f818dSEnji Cooper	if test dlpreopen = "$pass"; then
8449*132f818dSEnji Cooper	  if test -z "$libdir" && test prog = "$linkmode"; then
8450*132f818dSEnji Cooper	    func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
8451*132f818dSEnji Cooper	  fi
8452*132f818dSEnji Cooper	  case $host in
8453*132f818dSEnji Cooper	    # special handling for platforms with PE-DLLs.
8454*132f818dSEnji Cooper	    *cygwin* | *mingw* | *windows* | *cegcc* )
8455*132f818dSEnji Cooper	      # Linker will automatically link against shared library if both
8456*132f818dSEnji Cooper	      # static and shared are present.  Therefore, ensure we extract
8457*132f818dSEnji Cooper	      # symbols from the import library if a shared library is present
8458*132f818dSEnji Cooper	      # (otherwise, the dlopen module name will be incorrect).  We do
8459*132f818dSEnji Cooper	      # this by putting the import library name into $newdlprefiles.
8460*132f818dSEnji Cooper	      # We recover the dlopen module name by 'saving' the la file
8461*132f818dSEnji Cooper	      # name in a special purpose variable, and (later) extracting the
8462*132f818dSEnji Cooper	      # dlname from the la file.
8463*132f818dSEnji Cooper	      if test -n "$dlname"; then
8464*132f818dSEnji Cooper	        func_tr_sh "$dir/$linklib"
8465*132f818dSEnji Cooper	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
8466*132f818dSEnji Cooper	        func_append newdlprefiles " $dir/$linklib"
8467*132f818dSEnji Cooper	      else
8468*132f818dSEnji Cooper	        func_append newdlprefiles " $dir/$old_library"
8469*132f818dSEnji Cooper	        # Keep a list of preopened convenience libraries to check
8470*132f818dSEnji Cooper	        # that they are being used correctly in the link pass.
8471*132f818dSEnji Cooper	        test -z "$libdir" && \
8472*132f818dSEnji Cooper	          func_append dlpreconveniencelibs " $dir/$old_library"
8473*132f818dSEnji Cooper	      fi
8474*132f818dSEnji Cooper	    ;;
8475*132f818dSEnji Cooper	    * )
8476*132f818dSEnji Cooper	      # Prefer using a static library (so that no silly _DYNAMIC symbols
8477*132f818dSEnji Cooper	      # are required to link).
8478*132f818dSEnji Cooper	      if test -n "$old_library"; then
8479*132f818dSEnji Cooper	        func_append newdlprefiles " $dir/$old_library"
8480*132f818dSEnji Cooper	        # Keep a list of preopened convenience libraries to check
8481*132f818dSEnji Cooper	        # that they are being used correctly in the link pass.
8482*132f818dSEnji Cooper	        test -z "$libdir" && \
8483*132f818dSEnji Cooper	          func_append dlpreconveniencelibs " $dir/$old_library"
8484*132f818dSEnji Cooper	      # Otherwise, use the dlname, so that lt_dlopen finds it.
8485*132f818dSEnji Cooper	      elif test -n "$dlname"; then
8486*132f818dSEnji Cooper	        func_append newdlprefiles " $dir/$dlname"
8487*132f818dSEnji Cooper	      else
8488*132f818dSEnji Cooper	        func_append newdlprefiles " $dir/$linklib"
8489*132f818dSEnji Cooper	      fi
8490*132f818dSEnji Cooper	    ;;
8491*132f818dSEnji Cooper	  esac
8492*132f818dSEnji Cooper	fi # $pass = dlpreopen
8493*132f818dSEnji Cooper
8494*132f818dSEnji Cooper	if test -z "$libdir"; then
8495*132f818dSEnji Cooper	  # Link the convenience library
8496*132f818dSEnji Cooper	  if test lib = "$linkmode"; then
8497*132f818dSEnji Cooper	    deplibs="$dir/$old_library $deplibs"
8498*132f818dSEnji Cooper	  elif test prog,link = "$linkmode,$pass"; then
8499*132f818dSEnji Cooper	    compile_deplibs="$dir/$old_library $compile_deplibs"
8500*132f818dSEnji Cooper	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
8501*132f818dSEnji Cooper	  else
8502*132f818dSEnji Cooper	    deplibs="$lib $deplibs" # used for prog,scan pass
8503*132f818dSEnji Cooper	  fi
8504*132f818dSEnji Cooper	  continue
8505*132f818dSEnji Cooper	fi
8506*132f818dSEnji Cooper
8507*132f818dSEnji Cooper
8508*132f818dSEnji Cooper	if test prog = "$linkmode" && test link != "$pass"; then
8509*132f818dSEnji Cooper	  func_append newlib_search_path " $ladir"
8510*132f818dSEnji Cooper	  deplibs="$lib $deplibs"
8511*132f818dSEnji Cooper
8512*132f818dSEnji Cooper	  linkalldeplibs=false
8513*132f818dSEnji Cooper	  if test no != "$link_all_deplibs" || test -z "$library_names" ||
8514*132f818dSEnji Cooper	     test no = "$build_libtool_libs"; then
8515*132f818dSEnji Cooper	    linkalldeplibs=:
8516*132f818dSEnji Cooper	  fi
8517*132f818dSEnji Cooper
8518*132f818dSEnji Cooper	  tmp_libs=
8519*132f818dSEnji Cooper	  for deplib in $dependency_libs; do
8520*132f818dSEnji Cooper	    case $deplib in
8521*132f818dSEnji Cooper	    -L*) func_stripname '-L' '' "$deplib"
8522*132f818dSEnji Cooper	         func_resolve_sysroot "$func_stripname_result"
8523*132f818dSEnji Cooper	         func_append newlib_search_path " $func_resolve_sysroot_result"
8524*132f818dSEnji Cooper		 ;;
8525*132f818dSEnji Cooper	    esac
8526*132f818dSEnji Cooper	    # Need to link against all dependency_libs?
8527*132f818dSEnji Cooper	    if $linkalldeplibs; then
8528*132f818dSEnji Cooper	      deplibs="$deplib $deplibs"
8529*132f818dSEnji Cooper	    else
8530*132f818dSEnji Cooper	      # Need to hardcode shared library paths
8531*132f818dSEnji Cooper	      # or/and link against static libraries
8532*132f818dSEnji Cooper	      newdependency_libs="$deplib $newdependency_libs"
8533*132f818dSEnji Cooper	    fi
8534*132f818dSEnji Cooper	    if $opt_preserve_dup_deps; then
8535*132f818dSEnji Cooper	      case "$tmp_libs " in
8536*132f818dSEnji Cooper	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8537*132f818dSEnji Cooper	      esac
8538*132f818dSEnji Cooper	    fi
8539*132f818dSEnji Cooper	    func_append tmp_libs " $deplib"
8540*132f818dSEnji Cooper	  done # for deplib
8541*132f818dSEnji Cooper	  continue
8542*132f818dSEnji Cooper	fi # $linkmode = prog...
8543*132f818dSEnji Cooper
8544*132f818dSEnji Cooper	if test prog,link = "$linkmode,$pass"; then
8545*132f818dSEnji Cooper	  if test -n "$library_names" &&
8546*132f818dSEnji Cooper	     { { test no = "$prefer_static_libs" ||
8547*132f818dSEnji Cooper	         test built,yes = "$prefer_static_libs,$installed"; } ||
8548*132f818dSEnji Cooper	       test -z "$old_library"; }; then
8549*132f818dSEnji Cooper	    # We need to hardcode the library path
8550*132f818dSEnji Cooper	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
8551*132f818dSEnji Cooper	      # Make sure the rpath contains only unique directories.
8552*132f818dSEnji Cooper	      case $temp_rpath: in
8553*132f818dSEnji Cooper	      *"$absdir:"*) ;;
8554*132f818dSEnji Cooper              *) case $absdir in
8555*132f818dSEnji Cooper                 "$progdir/"*) func_append temp_rpath "$absdir:" ;;
8556*132f818dSEnji Cooper                 *)            func_append temp_rpath_tail "$absdir:" ;;
8557*132f818dSEnji Cooper                 esac
8558*132f818dSEnji Cooper	      esac
8559*132f818dSEnji Cooper	    fi
8560*132f818dSEnji Cooper
8561*132f818dSEnji Cooper	    # Hardcode the library path.
8562*132f818dSEnji Cooper	    # Skip directories that are in the system default run-time
8563*132f818dSEnji Cooper	    # search path.
8564*132f818dSEnji Cooper	    case " $sys_lib_dlsearch_path " in
8565*132f818dSEnji Cooper	    *" $absdir "*) ;;
8566*132f818dSEnji Cooper	    *)
8567*132f818dSEnji Cooper	      case "$compile_rpath$compile_rpath_tail " in
8568*132f818dSEnji Cooper	      *" $absdir "*) ;;
8569*132f818dSEnji Cooper	      *) case $absdir in
8570*132f818dSEnji Cooper                 "$progdir/"*) func_append compile_rpath " $absdir" ;;
8571*132f818dSEnji Cooper                 *) func_append compile_rpath_tail " $absdir" ;;
8572*132f818dSEnji Cooper		 esac
8573*132f818dSEnji Cooper	      esac
8574*132f818dSEnji Cooper	      ;;
8575*132f818dSEnji Cooper	    esac
8576*132f818dSEnji Cooper	    case " $sys_lib_dlsearch_path " in
8577*132f818dSEnji Cooper	    *" $libdir "*) ;;
8578*132f818dSEnji Cooper	    *)
8579*132f818dSEnji Cooper	      case "$finalize_rpath " in
8580*132f818dSEnji Cooper	      *" $libdir "*) ;;
8581*132f818dSEnji Cooper	      *) func_append finalize_rpath " $libdir" ;;
8582*132f818dSEnji Cooper	      esac
8583*132f818dSEnji Cooper	      ;;
8584*132f818dSEnji Cooper	    esac
8585*132f818dSEnji Cooper	  fi # $linkmode,$pass = prog,link...
8586*132f818dSEnji Cooper
8587*132f818dSEnji Cooper	  if $alldeplibs &&
8588*132f818dSEnji Cooper	     { test pass_all = "$deplibs_check_method" ||
8589*132f818dSEnji Cooper	       { test yes = "$build_libtool_libs" &&
8590*132f818dSEnji Cooper		 test -n "$library_names"; }; }; then
8591*132f818dSEnji Cooper	    # We only need to search for static libraries
8592*132f818dSEnji Cooper	    continue
8593*132f818dSEnji Cooper	  fi
8594*132f818dSEnji Cooper	fi
8595*132f818dSEnji Cooper
8596*132f818dSEnji Cooper	link_static=no # Whether the deplib will be linked statically
8597*132f818dSEnji Cooper	use_static_libs=$prefer_static_libs
8598*132f818dSEnji Cooper	if test built = "$use_static_libs" && test yes = "$installed"; then
8599*132f818dSEnji Cooper	  use_static_libs=no
8600*132f818dSEnji Cooper	fi
8601*132f818dSEnji Cooper	if test -n "$library_names" &&
8602*132f818dSEnji Cooper	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
8603*132f818dSEnji Cooper	  case $host_os in
8604*132f818dSEnji Cooper	  cygwin* | mingw* | windows* | cegcc* | os2*)
8605*132f818dSEnji Cooper	      # No point in relinking DLLs because paths are not encoded
8606*132f818dSEnji Cooper	      func_append notinst_deplibs " $lib"
8607*132f818dSEnji Cooper	      need_relink=no
8608*132f818dSEnji Cooper	    ;;
8609*132f818dSEnji Cooper	  *)
8610*132f818dSEnji Cooper	    if test no = "$installed"; then
8611*132f818dSEnji Cooper	      func_append notinst_deplibs " $lib"
8612*132f818dSEnji Cooper	      need_relink=yes
8613*132f818dSEnji Cooper	    fi
8614*132f818dSEnji Cooper	    ;;
8615*132f818dSEnji Cooper	  esac
8616*132f818dSEnji Cooper	  # This is a shared library
8617*132f818dSEnji Cooper
8618*132f818dSEnji Cooper	  # Warn about portability, can't link against -module's on some
8619*132f818dSEnji Cooper	  # systems (darwin).  Don't bleat about dlopened modules though!
8620*132f818dSEnji Cooper	  dlopenmodule=
8621*132f818dSEnji Cooper	  for dlpremoduletest in $dlprefiles; do
8622*132f818dSEnji Cooper	    if test "X$dlpremoduletest" = "X$lib"; then
8623*132f818dSEnji Cooper	      dlopenmodule=$dlpremoduletest
8624*132f818dSEnji Cooper	      break
8625*132f818dSEnji Cooper	    fi
8626*132f818dSEnji Cooper	  done
8627*132f818dSEnji Cooper	  if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
8628*132f818dSEnji Cooper	    echo
8629*132f818dSEnji Cooper	    if test prog = "$linkmode"; then
8630*132f818dSEnji Cooper	      func_warning "Linking the executable $output against the loadable module"
8631*132f818dSEnji Cooper	    else
8632*132f818dSEnji Cooper	      func_warning "Linking the shared library $output against the loadable module"
8633*132f818dSEnji Cooper	    fi
8634*132f818dSEnji Cooper	    func_warning "$linklib is not portable!"
8635*132f818dSEnji Cooper	  fi
8636*132f818dSEnji Cooper	  if test lib = "$linkmode" &&
8637*132f818dSEnji Cooper	     test yes = "$hardcode_into_libs"; then
8638*132f818dSEnji Cooper	    # Hardcode the library path.
8639*132f818dSEnji Cooper	    # Skip directories that are in the system default run-time
8640*132f818dSEnji Cooper	    # search path.
8641*132f818dSEnji Cooper	    case " $sys_lib_dlsearch_path " in
8642*132f818dSEnji Cooper	    *" $absdir "*) ;;
8643*132f818dSEnji Cooper	    *)
8644*132f818dSEnji Cooper	      case "$compile_rpath$compile_rpath_tail " in
8645*132f818dSEnji Cooper	      *" $absdir "*) ;;
8646*132f818dSEnji Cooper	      *) case $absdir in
8647*132f818dSEnji Cooper                 "$progdir/"*) func_append compile_rpath " $absdir" ;;
8648*132f818dSEnji Cooper                 *) func_append compile_rpath_tail " $absdir" ;;
8649*132f818dSEnji Cooper		 esac
8650*132f818dSEnji Cooper	      esac
8651*132f818dSEnji Cooper	      ;;
8652*132f818dSEnji Cooper	    esac
8653*132f818dSEnji Cooper	    case " $sys_lib_dlsearch_path " in
8654*132f818dSEnji Cooper	    *" $libdir "*) ;;
8655*132f818dSEnji Cooper	    *)
8656*132f818dSEnji Cooper	      case "$finalize_rpath " in
8657*132f818dSEnji Cooper	      *" $libdir "*) ;;
8658*132f818dSEnji Cooper	      *) func_append finalize_rpath " $libdir" ;;
8659*132f818dSEnji Cooper	      esac
8660*132f818dSEnji Cooper	      ;;
8661*132f818dSEnji Cooper	    esac
8662*132f818dSEnji Cooper	  fi
8663*132f818dSEnji Cooper
8664*132f818dSEnji Cooper	  if test -n "$old_archive_from_expsyms_cmds"; then
8665*132f818dSEnji Cooper	    # figure out the soname
8666*132f818dSEnji Cooper	    set dummy $library_names
8667*132f818dSEnji Cooper	    shift
8668*132f818dSEnji Cooper	    realname=$1
8669*132f818dSEnji Cooper	    shift
8670*132f818dSEnji Cooper	    libname=`eval "\\$ECHO \"$libname_spec\""`
8671*132f818dSEnji Cooper	    # use dlname if we got it. it's perfectly good, no?
8672*132f818dSEnji Cooper	    if test -n "$dlname"; then
8673*132f818dSEnji Cooper	      soname=$dlname
8674*132f818dSEnji Cooper	    elif test -n "$soname_spec"; then
8675*132f818dSEnji Cooper	      # bleh windows
8676*132f818dSEnji Cooper	      case $host_os in
8677*132f818dSEnji Cooper	      cygwin* | mingw* | windows* | cegcc* | os2*)
8678*132f818dSEnji Cooper	        func_arith $current - $age
8679*132f818dSEnji Cooper		major=$func_arith_result
8680*132f818dSEnji Cooper		versuffix=-$major
8681*132f818dSEnji Cooper		;;
8682*132f818dSEnji Cooper	      esac
8683*132f818dSEnji Cooper	      eval soname=\"$soname_spec\"
8684*132f818dSEnji Cooper	    else
8685*132f818dSEnji Cooper	      soname=$realname
8686*132f818dSEnji Cooper	    fi
8687*132f818dSEnji Cooper
8688*132f818dSEnji Cooper	    # Make a new name for the extract_expsyms_cmds to use
8689*132f818dSEnji Cooper	    soroot=$soname
8690*132f818dSEnji Cooper	    func_basename "$soroot"
8691*132f818dSEnji Cooper	    soname=$func_basename_result
8692*132f818dSEnji Cooper	    func_stripname 'lib' '.dll' "$soname"
8693*132f818dSEnji Cooper	    newlib=libimp-$func_stripname_result.a
8694*132f818dSEnji Cooper
8695*132f818dSEnji Cooper	    # If the library has no export list, then create one now
8696*132f818dSEnji Cooper	    if test -f "$output_objdir/$soname-def"; then :
8697*132f818dSEnji Cooper	    else
8698*132f818dSEnji Cooper	      func_verbose "extracting exported symbol list from '$soname'"
8699*132f818dSEnji Cooper	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
8700*132f818dSEnji Cooper	    fi
8701*132f818dSEnji Cooper
8702*132f818dSEnji Cooper	    # Create $newlib
8703*132f818dSEnji Cooper	    if test -f "$output_objdir/$newlib"; then :; else
8704*132f818dSEnji Cooper	      func_verbose "generating import library for '$soname'"
8705*132f818dSEnji Cooper	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
8706*132f818dSEnji Cooper	    fi
8707*132f818dSEnji Cooper	    # make sure the library variables are pointing to the new library
8708*132f818dSEnji Cooper	    dir=$output_objdir
8709*132f818dSEnji Cooper	    linklib=$newlib
8710*132f818dSEnji Cooper	  fi # test -n "$old_archive_from_expsyms_cmds"
8711*132f818dSEnji Cooper
8712*132f818dSEnji Cooper	  if test prog = "$linkmode" || test relink != "$opt_mode"; then
8713*132f818dSEnji Cooper	    add_shlibpath=
8714*132f818dSEnji Cooper	    add_dir=
8715*132f818dSEnji Cooper	    add=
8716*132f818dSEnji Cooper	    lib_linked=yes
8717*132f818dSEnji Cooper	    case $hardcode_action in
8718*132f818dSEnji Cooper	    immediate | unsupported)
8719*132f818dSEnji Cooper	      if test no = "$hardcode_direct"; then
8720*132f818dSEnji Cooper		add=$dir/$linklib
8721*132f818dSEnji Cooper		case $host in
8722*132f818dSEnji Cooper		  *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
8723*132f818dSEnji Cooper		  *-*-sysv4*uw2*) add_dir=-L$dir ;;
8724*132f818dSEnji Cooper		  *-*-emscripten*) add_dir=-L$dir ;;
8725*132f818dSEnji Cooper		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
8726*132f818dSEnji Cooper		    *-*-unixware7*) add_dir=-L$dir ;;
8727*132f818dSEnji Cooper		  *-*-darwin* )
8728*132f818dSEnji Cooper		    # if the lib is a (non-dlopened) module then we cannot
8729*132f818dSEnji Cooper		    # link against it, someone is ignoring the earlier warnings
8730*132f818dSEnji Cooper		    if /usr/bin/file -L $add 2> /dev/null |
8731*132f818dSEnji Cooper			 $GREP ": [^:]* bundle" >/dev/null; then
8732*132f818dSEnji Cooper		      if test "X$dlopenmodule" != "X$lib"; then
8733*132f818dSEnji Cooper			func_warning "lib $linklib is a module, not a shared library"
8734*132f818dSEnji Cooper			if test -z "$old_library"; then
8735*132f818dSEnji Cooper			  func_warning "And there doesn't seem to be a static archive available"
8736*132f818dSEnji Cooper			  func_warning "The link will probably fail, sorry"
8737*132f818dSEnji Cooper			else
8738*132f818dSEnji Cooper			  add=$dir/$old_library
8739*132f818dSEnji Cooper			fi
8740*132f818dSEnji Cooper		      elif test -n "$old_library"; then
8741*132f818dSEnji Cooper			add=$dir/$old_library
8742*132f818dSEnji Cooper		      fi
8743*132f818dSEnji Cooper		    fi
8744*132f818dSEnji Cooper		esac
8745*132f818dSEnji Cooper	      elif test no = "$hardcode_minus_L"; then
8746*132f818dSEnji Cooper		case $host in
8747*132f818dSEnji Cooper		*-*-sunos*) add_shlibpath=$dir ;;
8748*132f818dSEnji Cooper		esac
8749*132f818dSEnji Cooper		add_dir=-L$dir
8750*132f818dSEnji Cooper		add=-l$name
8751*132f818dSEnji Cooper	      elif test no = "$hardcode_shlibpath_var"; then
8752*132f818dSEnji Cooper		add_shlibpath=$dir
8753*132f818dSEnji Cooper		add=-l$name
8754*132f818dSEnji Cooper	      else
8755*132f818dSEnji Cooper		lib_linked=no
8756*132f818dSEnji Cooper	      fi
8757*132f818dSEnji Cooper	      ;;
8758*132f818dSEnji Cooper	    relink)
8759*132f818dSEnji Cooper	      if test yes = "$hardcode_direct" &&
8760*132f818dSEnji Cooper	         test no = "$hardcode_direct_absolute"; then
8761*132f818dSEnji Cooper		add=$dir/$linklib
8762*132f818dSEnji Cooper	      elif test yes = "$hardcode_minus_L"; then
8763*132f818dSEnji Cooper		add_dir=-L$absdir
8764*132f818dSEnji Cooper		# Try looking first in the location we're being installed to.
8765*132f818dSEnji Cooper		if test -n "$inst_prefix_dir"; then
8766*132f818dSEnji Cooper		  case $libdir in
8767*132f818dSEnji Cooper		    [\\/]*)
8768*132f818dSEnji Cooper		      func_append add_dir " -L$inst_prefix_dir$libdir"
8769*132f818dSEnji Cooper		      ;;
8770*132f818dSEnji Cooper		  esac
8771*132f818dSEnji Cooper		fi
8772*132f818dSEnji Cooper		add=-l$name
8773*132f818dSEnji Cooper	      elif test yes = "$hardcode_shlibpath_var"; then
8774*132f818dSEnji Cooper		add_shlibpath=$dir
8775*132f818dSEnji Cooper		add=-l$name
8776*132f818dSEnji Cooper	      else
8777*132f818dSEnji Cooper		lib_linked=no
8778*132f818dSEnji Cooper	      fi
8779*132f818dSEnji Cooper	      ;;
8780*132f818dSEnji Cooper	    *) lib_linked=no ;;
8781*132f818dSEnji Cooper	    esac
8782*132f818dSEnji Cooper
8783*132f818dSEnji Cooper	    if test yes != "$lib_linked"; then
8784*132f818dSEnji Cooper	      func_fatal_configuration "unsupported hardcode properties"
8785*132f818dSEnji Cooper	    fi
8786*132f818dSEnji Cooper
8787*132f818dSEnji Cooper	    if test -n "$add_shlibpath"; then
8788*132f818dSEnji Cooper	      case :$compile_shlibpath: in
8789*132f818dSEnji Cooper	      *":$add_shlibpath:"*) ;;
8790*132f818dSEnji Cooper	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
8791*132f818dSEnji Cooper	      esac
8792*132f818dSEnji Cooper	    fi
8793*132f818dSEnji Cooper	    if test prog = "$linkmode"; then
8794*132f818dSEnji Cooper	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
8795*132f818dSEnji Cooper	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
8796*132f818dSEnji Cooper	    else
8797*132f818dSEnji Cooper	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8798*132f818dSEnji Cooper	      test -n "$add" && deplibs="$add $deplibs"
8799*132f818dSEnji Cooper	      if test yes != "$hardcode_direct" &&
8800*132f818dSEnji Cooper		 test yes != "$hardcode_minus_L" &&
8801*132f818dSEnji Cooper		 test yes = "$hardcode_shlibpath_var"; then
8802*132f818dSEnji Cooper		case :$finalize_shlibpath: in
8803*132f818dSEnji Cooper		*":$libdir:"*) ;;
8804*132f818dSEnji Cooper		*) func_append finalize_shlibpath "$libdir:" ;;
8805*132f818dSEnji Cooper		esac
8806*132f818dSEnji Cooper	      fi
8807*132f818dSEnji Cooper	    fi
8808*132f818dSEnji Cooper	  fi
8809*132f818dSEnji Cooper
8810*132f818dSEnji Cooper	  if test prog = "$linkmode" || test relink = "$opt_mode"; then
8811*132f818dSEnji Cooper	    add_shlibpath=
8812*132f818dSEnji Cooper	    add_dir=
8813*132f818dSEnji Cooper	    add=
8814*132f818dSEnji Cooper	    # Finalize command for both is simple: just hardcode it.
8815*132f818dSEnji Cooper	    if test yes = "$hardcode_direct" &&
8816*132f818dSEnji Cooper	       test no = "$hardcode_direct_absolute"; then
8817*132f818dSEnji Cooper	      add=$libdir/$linklib
8818*132f818dSEnji Cooper	    elif test yes = "$hardcode_minus_L"; then
8819*132f818dSEnji Cooper	      add_dir=-L$lt_sysroot$libdir
8820*132f818dSEnji Cooper	      add=-l$name
8821*132f818dSEnji Cooper	    elif test yes = "$hardcode_shlibpath_var"; then
8822*132f818dSEnji Cooper	      case :$finalize_shlibpath: in
8823*132f818dSEnji Cooper	      *":$libdir:"*) ;;
8824*132f818dSEnji Cooper	      *) func_append finalize_shlibpath "$libdir:" ;;
8825*132f818dSEnji Cooper	      esac
8826*132f818dSEnji Cooper	      add=-l$name
8827*132f818dSEnji Cooper	    elif test yes = "$hardcode_automatic"; then
8828*132f818dSEnji Cooper	      if test -n "$inst_prefix_dir" &&
8829*132f818dSEnji Cooper		 test -f "$inst_prefix_dir$libdir/$linklib"; then
8830*132f818dSEnji Cooper		add=$inst_prefix_dir$libdir/$linklib
8831*132f818dSEnji Cooper	      else
8832*132f818dSEnji Cooper		add=$libdir/$linklib
8833*132f818dSEnji Cooper	      fi
8834*132f818dSEnji Cooper	    else
8835*132f818dSEnji Cooper	      # We cannot seem to hardcode it, guess we'll fake it.
8836*132f818dSEnji Cooper	      add_dir=-L$lt_sysroot$libdir
8837*132f818dSEnji Cooper	      # Try looking first in the location we're being installed to.
8838*132f818dSEnji Cooper	      if test -n "$inst_prefix_dir"; then
8839*132f818dSEnji Cooper		case $libdir in
8840*132f818dSEnji Cooper		  [\\/]*)
8841*132f818dSEnji Cooper		    func_append add_dir " -L$inst_prefix_dir$libdir"
8842*132f818dSEnji Cooper		    ;;
8843*132f818dSEnji Cooper		esac
8844*132f818dSEnji Cooper	      fi
8845*132f818dSEnji Cooper	      add=-l$name
8846*132f818dSEnji Cooper	    fi
8847*132f818dSEnji Cooper
8848*132f818dSEnji Cooper	    if test prog = "$linkmode"; then
8849*132f818dSEnji Cooper	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
8850*132f818dSEnji Cooper	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
8851*132f818dSEnji Cooper	    else
8852*132f818dSEnji Cooper	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8853*132f818dSEnji Cooper	      test -n "$add" && deplibs="$add $deplibs"
8854*132f818dSEnji Cooper	    fi
8855*132f818dSEnji Cooper	  fi
8856*132f818dSEnji Cooper	elif test prog = "$linkmode"; then
8857*132f818dSEnji Cooper	  # Here we assume that one of hardcode_direct or hardcode_minus_L
8858*132f818dSEnji Cooper	  # is not unsupported.  This is valid on all known static and
8859*132f818dSEnji Cooper	  # shared platforms.
8860*132f818dSEnji Cooper	  if test unsupported != "$hardcode_direct"; then
8861*132f818dSEnji Cooper	    test -n "$old_library" && linklib=$old_library
8862*132f818dSEnji Cooper	    compile_deplibs="$dir/$linklib $compile_deplibs"
8863*132f818dSEnji Cooper	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
8864*132f818dSEnji Cooper	  else
8865*132f818dSEnji Cooper	    compile_deplibs="-l$name -L$dir $compile_deplibs"
8866*132f818dSEnji Cooper	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
8867*132f818dSEnji Cooper	  fi
8868*132f818dSEnji Cooper	elif test yes = "$build_libtool_libs"; then
8869*132f818dSEnji Cooper	  # Not a shared library
8870*132f818dSEnji Cooper	  if test pass_all != "$deplibs_check_method"; then
8871*132f818dSEnji Cooper	    # We're trying link a shared library against a static one
8872*132f818dSEnji Cooper	    # but the system doesn't support it.
8873*132f818dSEnji Cooper
8874*132f818dSEnji Cooper	    # Just print a warning and add the library to dependency_libs so
8875*132f818dSEnji Cooper	    # that the program can be linked against the static library.
8876*132f818dSEnji Cooper	    func_warning "This system cannot link to static lib archive $lib."
8877*132f818dSEnji Cooper	    func_warning "I have the capability to make that library automatically link in when"
8878*132f818dSEnji Cooper	    func_warning "you link to this library.  But I can only do this if you have a"
8879*132f818dSEnji Cooper	    func_warning "shared version of the library, which you do not appear to have."
8880*132f818dSEnji Cooper	    if test yes = "$module"; then
8881*132f818dSEnji Cooper	      func_warning "But as you try to build a module library, libtool will still create "
8882*132f818dSEnji Cooper	      func_warning "a static module, that should work as long as the dlopening application"
8883*132f818dSEnji Cooper	      func_warning "is linked with the -dlopen flag to resolve symbols at runtime."
8884*132f818dSEnji Cooper	      if test -z "$global_symbol_pipe"; then
8885*132f818dSEnji Cooper		func_warning "However, this would only work if libtool was able to extract symbol"
8886*132f818dSEnji Cooper		func_warning "lists from a program, using 'nm' or equivalent, but libtool could"
8887*132f818dSEnji Cooper		func_warning "not find such a program.  So, this module is probably useless."
8888*132f818dSEnji Cooper		func_warning "'nm' from GNU binutils and a full rebuild may help."
8889*132f818dSEnji Cooper	      fi
8890*132f818dSEnji Cooper	      if test no = "$build_old_libs"; then
8891*132f818dSEnji Cooper		build_libtool_libs=module
8892*132f818dSEnji Cooper		build_old_libs=yes
8893*132f818dSEnji Cooper	      else
8894*132f818dSEnji Cooper		build_libtool_libs=no
8895*132f818dSEnji Cooper	      fi
8896*132f818dSEnji Cooper	    fi
8897*132f818dSEnji Cooper	  else
8898*132f818dSEnji Cooper	    deplibs="$dir/$old_library $deplibs"
8899*132f818dSEnji Cooper	    link_static=yes
8900*132f818dSEnji Cooper	  fi
8901*132f818dSEnji Cooper	fi # link shared/static library?
8902*132f818dSEnji Cooper
8903*132f818dSEnji Cooper	if test lib = "$linkmode"; then
8904*132f818dSEnji Cooper	  if test -n "$dependency_libs" &&
8905*132f818dSEnji Cooper	     { test yes != "$hardcode_into_libs" ||
8906*132f818dSEnji Cooper	       test yes = "$build_old_libs" ||
8907*132f818dSEnji Cooper	       test yes = "$link_static"; }; then
8908*132f818dSEnji Cooper	    # Extract -R from dependency_libs
8909*132f818dSEnji Cooper	    temp_deplibs=
8910*132f818dSEnji Cooper	    for libdir in $dependency_libs; do
8911*132f818dSEnji Cooper	      case $libdir in
8912*132f818dSEnji Cooper	      -R*) func_stripname '-R' '' "$libdir"
8913*132f818dSEnji Cooper	           temp_xrpath=$func_stripname_result
8914*132f818dSEnji Cooper		   case " $xrpath " in
8915*132f818dSEnji Cooper		   *" $temp_xrpath "*) ;;
8916*132f818dSEnji Cooper		   *) func_append xrpath " $temp_xrpath";;
8917*132f818dSEnji Cooper		   esac;;
8918*132f818dSEnji Cooper	      *) func_append temp_deplibs " $libdir";;
8919*132f818dSEnji Cooper	      esac
8920*132f818dSEnji Cooper	    done
8921*132f818dSEnji Cooper	    dependency_libs=$temp_deplibs
8922*132f818dSEnji Cooper	  fi
8923*132f818dSEnji Cooper
8924*132f818dSEnji Cooper	  func_append newlib_search_path " $absdir"
8925*132f818dSEnji Cooper	  # Link against this library
8926*132f818dSEnji Cooper	  test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
8927*132f818dSEnji Cooper	  # ... and its dependency_libs
8928*132f818dSEnji Cooper	  tmp_libs=
8929*132f818dSEnji Cooper	  for deplib in $dependency_libs; do
8930*132f818dSEnji Cooper	    newdependency_libs="$deplib $newdependency_libs"
8931*132f818dSEnji Cooper	    case $deplib in
8932*132f818dSEnji Cooper              -L*) func_stripname '-L' '' "$deplib"
8933*132f818dSEnji Cooper                   func_resolve_sysroot "$func_stripname_result";;
8934*132f818dSEnji Cooper              *) func_resolve_sysroot "$deplib" ;;
8935*132f818dSEnji Cooper            esac
8936*132f818dSEnji Cooper	    if $opt_preserve_dup_deps; then
8937*132f818dSEnji Cooper	      case "$tmp_libs " in
8938*132f818dSEnji Cooper	      *" $func_resolve_sysroot_result "*)
8939*132f818dSEnji Cooper                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
8940*132f818dSEnji Cooper	      esac
8941*132f818dSEnji Cooper	    fi
8942*132f818dSEnji Cooper	    func_append tmp_libs " $func_resolve_sysroot_result"
8943*132f818dSEnji Cooper	  done
8944*132f818dSEnji Cooper
8945*132f818dSEnji Cooper	  if test no != "$link_all_deplibs"; then
8946*132f818dSEnji Cooper	    # Add the search paths of all dependency libraries
8947*132f818dSEnji Cooper	    for deplib in $dependency_libs; do
8948*132f818dSEnji Cooper	      path=
8949*132f818dSEnji Cooper	      case $deplib in
8950*132f818dSEnji Cooper	      -L*) path=$deplib ;;
8951*132f818dSEnji Cooper	      *.la)
8952*132f818dSEnji Cooper	        func_resolve_sysroot "$deplib"
8953*132f818dSEnji Cooper	        deplib=$func_resolve_sysroot_result
8954*132f818dSEnji Cooper	        func_dirname "$deplib" "" "."
8955*132f818dSEnji Cooper		dir=$func_dirname_result
8956*132f818dSEnji Cooper		# We need an absolute path.
8957*132f818dSEnji Cooper		case $dir in
8958*132f818dSEnji Cooper		[\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
8959*132f818dSEnji Cooper		*)
8960*132f818dSEnji Cooper		  absdir=`cd "$dir" && pwd`
8961*132f818dSEnji Cooper		  if test -z "$absdir"; then
8962*132f818dSEnji Cooper		    func_warning "cannot determine absolute directory name of '$dir'"
8963*132f818dSEnji Cooper		    absdir=$dir
8964*132f818dSEnji Cooper		  fi
8965*132f818dSEnji Cooper		  ;;
8966*132f818dSEnji Cooper		esac
8967*132f818dSEnji Cooper		if $GREP "^installed=no" $deplib > /dev/null; then
8968*132f818dSEnji Cooper		case $host in
8969*132f818dSEnji Cooper		*-*-darwin*)
8970*132f818dSEnji Cooper		  depdepl=
8971*132f818dSEnji Cooper		  eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
8972*132f818dSEnji Cooper		  if test -n "$deplibrary_names"; then
8973*132f818dSEnji Cooper		    for tmp in $deplibrary_names; do
8974*132f818dSEnji Cooper		      depdepl=$tmp
8975*132f818dSEnji Cooper		    done
8976*132f818dSEnji Cooper		    if test -f "$absdir/$objdir/$depdepl"; then
8977*132f818dSEnji Cooper		      depdepl=$absdir/$objdir/$depdepl
8978*132f818dSEnji Cooper		      darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
8979*132f818dSEnji Cooper                      if test -z "$darwin_install_name"; then
8980*132f818dSEnji Cooper                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
8981*132f818dSEnji Cooper                      fi
8982*132f818dSEnji Cooper		      func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
8983*132f818dSEnji Cooper		      func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
8984*132f818dSEnji Cooper		      path=
8985*132f818dSEnji Cooper		    fi
8986*132f818dSEnji Cooper		  fi
8987*132f818dSEnji Cooper		  ;;
8988*132f818dSEnji Cooper		*)
8989*132f818dSEnji Cooper		  path=-L$absdir/$objdir
8990*132f818dSEnji Cooper		  ;;
8991*132f818dSEnji Cooper		esac
8992*132f818dSEnji Cooper		else
8993*132f818dSEnji Cooper		  eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
8994*132f818dSEnji Cooper		  test -z "$libdir" && \
8995*132f818dSEnji Cooper		    func_fatal_error "'$deplib' is not a valid libtool archive"
8996*132f818dSEnji Cooper		  test "$absdir" != "$libdir" && \
8997*132f818dSEnji Cooper		    func_warning "'$deplib' seems to be moved"
8998*132f818dSEnji Cooper
8999*132f818dSEnji Cooper		  path=-L$absdir
9000*132f818dSEnji Cooper		fi
9001*132f818dSEnji Cooper		;;
9002*132f818dSEnji Cooper	      esac
9003*132f818dSEnji Cooper	      case " $deplibs " in
9004*132f818dSEnji Cooper	      *" $path "*) ;;
9005*132f818dSEnji Cooper	      *) deplibs="$path $deplibs" ;;
9006*132f818dSEnji Cooper	      esac
9007*132f818dSEnji Cooper	    done
9008*132f818dSEnji Cooper	  fi # link_all_deplibs != no
9009*132f818dSEnji Cooper	fi # linkmode = lib
9010*132f818dSEnji Cooper      done # for deplib in $libs
9011*132f818dSEnji Cooper
9012*132f818dSEnji Cooper      func_append temp_rpath "$temp_rpath_tail"
9013*132f818dSEnji Cooper      func_append compile_rpath "$compile_rpath_tail"
9014*132f818dSEnji Cooper
9015*132f818dSEnji Cooper      if test link = "$pass"; then
9016*132f818dSEnji Cooper	if test prog = "$linkmode"; then
9017*132f818dSEnji Cooper	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
9018*132f818dSEnji Cooper	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
9019*132f818dSEnji Cooper	else
9020*132f818dSEnji Cooper	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9021*132f818dSEnji Cooper	fi
9022*132f818dSEnji Cooper      fi
9023*132f818dSEnji Cooper      dependency_libs=$newdependency_libs
9024*132f818dSEnji Cooper      if test dlpreopen = "$pass"; then
9025*132f818dSEnji Cooper	# Link the dlpreopened libraries before other libraries
9026*132f818dSEnji Cooper	for deplib in $save_deplibs; do
9027*132f818dSEnji Cooper	  deplibs="$deplib $deplibs"
9028*132f818dSEnji Cooper	done
9029*132f818dSEnji Cooper      fi
9030*132f818dSEnji Cooper      if test dlopen != "$pass"; then
9031*132f818dSEnji Cooper	test conv = "$pass" || {
9032*132f818dSEnji Cooper	  # Make sure lib_search_path contains only unique directories.
9033*132f818dSEnji Cooper	  lib_search_path=
9034*132f818dSEnji Cooper	  for dir in $newlib_search_path; do
9035*132f818dSEnji Cooper	    case "$lib_search_path " in
9036*132f818dSEnji Cooper	    *" $dir "*) ;;
9037*132f818dSEnji Cooper	    *) func_append lib_search_path " $dir" ;;
9038*132f818dSEnji Cooper	    esac
9039*132f818dSEnji Cooper	  done
9040*132f818dSEnji Cooper	  newlib_search_path=
9041*132f818dSEnji Cooper	}
9042*132f818dSEnji Cooper
9043*132f818dSEnji Cooper	if test prog,link = "$linkmode,$pass"; then
9044*132f818dSEnji Cooper	  vars="compile_deplibs finalize_deplibs"
9045*132f818dSEnji Cooper	else
9046*132f818dSEnji Cooper	  vars=deplibs
9047*132f818dSEnji Cooper	fi
9048*132f818dSEnji Cooper	for var in $vars dependency_libs; do
9049*132f818dSEnji Cooper	  # Add libraries to $var in reverse order
9050*132f818dSEnji Cooper	  eval tmp_libs=\"\$$var\"
9051*132f818dSEnji Cooper	  new_libs=
9052*132f818dSEnji Cooper	  # FIXME: Pedantically, this is the right thing to do, so
9053*132f818dSEnji Cooper	  #        that some nasty dependency loop isn't accidentally
9054*132f818dSEnji Cooper	  #        broken: new_libs="$deplib $new_libs"
9055*132f818dSEnji Cooper	  for deplib in $tmp_libs; do
9056*132f818dSEnji Cooper	    if $opt_preserve_dup_deps; then
9057*132f818dSEnji Cooper	      new_libs="$deplib $new_libs"
9058*132f818dSEnji Cooper	    else
9059*132f818dSEnji Cooper	      # Pragmatically, this seems to cause very few problems in
9060*132f818dSEnji Cooper	      # practice:
9061*132f818dSEnji Cooper	      case $deplib in
9062*132f818dSEnji Cooper	      -L*) new_libs="$deplib $new_libs" ;;
9063*132f818dSEnji Cooper	      -R*) ;;
9064*132f818dSEnji Cooper	      *)
9065*132f818dSEnji Cooper	        # And here is the reason: when a library appears more
9066*132f818dSEnji Cooper	        # than once as an explicit dependence of a library, or
9067*132f818dSEnji Cooper	        # is implicitly linked in more than once by the
9068*132f818dSEnji Cooper	        # compiler, it is considered special, and multiple
9069*132f818dSEnji Cooper	        # occurrences thereof are not removed.  Compare this
9070*132f818dSEnji Cooper	        # with having the same library being listed as a
9071*132f818dSEnji Cooper	        # dependency of multiple other libraries: in this case,
9072*132f818dSEnji Cooper	        # we know (pedantically, we assume) the library does not
9073*132f818dSEnji Cooper	        # need to be listed more than once, so we keep only the
9074*132f818dSEnji Cooper	        # last copy.  This is not always right, but it is rare
9075*132f818dSEnji Cooper	        # enough that we require users that really mean to play
9076*132f818dSEnji Cooper	        # such unportable linking tricks to link the library
9077*132f818dSEnji Cooper	        # using -Wl,-lname, so that libtool does not consider it
9078*132f818dSEnji Cooper	        # for duplicate removal.  And if not possible for portability
9079*132f818dSEnji Cooper	        # reasons, then --preserve-dup-deps should be used.
9080*132f818dSEnji Cooper	        case " $specialdeplibs " in
9081*132f818dSEnji Cooper	        *" $deplib "*) new_libs="$deplib $new_libs" ;;
9082*132f818dSEnji Cooper	        *)
9083*132f818dSEnji Cooper	          case " $new_libs " in
9084*132f818dSEnji Cooper	          *" $deplib "*) ;;
9085*132f818dSEnji Cooper	          *) new_libs="$deplib $new_libs" ;;
9086*132f818dSEnji Cooper	          esac
9087*132f818dSEnji Cooper	          ;;
9088*132f818dSEnji Cooper	        esac
9089*132f818dSEnji Cooper	        ;;
9090*132f818dSEnji Cooper	      esac
9091*132f818dSEnji Cooper	    fi
9092*132f818dSEnji Cooper	  done
9093*132f818dSEnji Cooper	  tmp_libs=
9094*132f818dSEnji Cooper	  for deplib in $new_libs; do
9095*132f818dSEnji Cooper	    case $deplib in
9096*132f818dSEnji Cooper	    -L*)
9097*132f818dSEnji Cooper	      case " $tmp_libs " in
9098*132f818dSEnji Cooper	      *" $deplib "*) ;;
9099*132f818dSEnji Cooper	      *) func_append tmp_libs " $deplib" ;;
9100*132f818dSEnji Cooper	      esac
9101*132f818dSEnji Cooper	      ;;
9102*132f818dSEnji Cooper	    *) func_append tmp_libs " $deplib" ;;
9103*132f818dSEnji Cooper	    esac
9104*132f818dSEnji Cooper	  done
9105*132f818dSEnji Cooper	  eval $var=\"$tmp_libs\"
9106*132f818dSEnji Cooper	done # for var
9107*132f818dSEnji Cooper      fi
9108*132f818dSEnji Cooper
9109*132f818dSEnji Cooper      # Add Sun CC postdeps if required:
9110*132f818dSEnji Cooper      test CXX = "$tagname" && {
9111*132f818dSEnji Cooper        case $host_os in
9112*132f818dSEnji Cooper        linux*)
9113*132f818dSEnji Cooper          case `$CC -V 2>&1 | $SED 5q` in
9114*132f818dSEnji Cooper          *Sun\ C*) # Sun C++ 5.9
9115*132f818dSEnji Cooper            func_suncc_cstd_abi
9116*132f818dSEnji Cooper
9117*132f818dSEnji Cooper            if test no != "$suncc_use_cstd_abi"; then
9118*132f818dSEnji Cooper              func_append postdeps ' -library=Cstd -library=Crun'
9119*132f818dSEnji Cooper            fi
9120*132f818dSEnji Cooper            ;;
9121*132f818dSEnji Cooper          esac
9122*132f818dSEnji Cooper          ;;
9123*132f818dSEnji Cooper
9124*132f818dSEnji Cooper        solaris*)
9125*132f818dSEnji Cooper          func_cc_basename "$CC"
9126*132f818dSEnji Cooper          case $func_cc_basename_result in
9127*132f818dSEnji Cooper          CC* | sunCC*)
9128*132f818dSEnji Cooper            func_suncc_cstd_abi
9129*132f818dSEnji Cooper
9130*132f818dSEnji Cooper            if test no != "$suncc_use_cstd_abi"; then
9131*132f818dSEnji Cooper              func_append postdeps ' -library=Cstd -library=Crun'
9132*132f818dSEnji Cooper            fi
9133*132f818dSEnji Cooper            ;;
9134*132f818dSEnji Cooper          esac
9135*132f818dSEnji Cooper          ;;
9136*132f818dSEnji Cooper        esac
9137*132f818dSEnji Cooper      }
9138*132f818dSEnji Cooper
9139*132f818dSEnji Cooper      # Last step: remove runtime libs from dependency_libs
9140*132f818dSEnji Cooper      # (they stay in deplibs)
9141*132f818dSEnji Cooper      tmp_libs=
9142*132f818dSEnji Cooper      for i in $dependency_libs; do
9143*132f818dSEnji Cooper	case " $predeps $postdeps $compiler_lib_search_path " in
9144*132f818dSEnji Cooper	*" $i "*)
9145*132f818dSEnji Cooper	  i=
9146*132f818dSEnji Cooper	  ;;
9147*132f818dSEnji Cooper	esac
9148*132f818dSEnji Cooper	if test -n "$i"; then
9149*132f818dSEnji Cooper	  func_append tmp_libs " $i"
9150*132f818dSEnji Cooper	fi
9151*132f818dSEnji Cooper      done
9152*132f818dSEnji Cooper      dependency_libs=$tmp_libs
9153*132f818dSEnji Cooper    done # for pass
9154*132f818dSEnji Cooper    if test prog = "$linkmode"; then
9155*132f818dSEnji Cooper      dlfiles=$newdlfiles
9156*132f818dSEnji Cooper    fi
9157*132f818dSEnji Cooper    if test prog = "$linkmode" || test lib = "$linkmode"; then
9158*132f818dSEnji Cooper      dlprefiles=$newdlprefiles
9159*132f818dSEnji Cooper    fi
9160*132f818dSEnji Cooper
9161*132f818dSEnji Cooper    case $linkmode in
9162*132f818dSEnji Cooper    oldlib)
9163*132f818dSEnji Cooper      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
9164*132f818dSEnji Cooper	func_warning "'-dlopen' is ignored for archives"
9165*132f818dSEnji Cooper      fi
9166*132f818dSEnji Cooper
9167*132f818dSEnji Cooper      case " $deplibs" in
9168*132f818dSEnji Cooper      *\ -l* | *\ -L*)
9169*132f818dSEnji Cooper	func_warning "'-l' and '-L' are ignored for archives" ;;
9170*132f818dSEnji Cooper      esac
9171*132f818dSEnji Cooper
9172*132f818dSEnji Cooper      test -n "$rpath" && \
9173*132f818dSEnji Cooper	func_warning "'-rpath' is ignored for archives"
9174*132f818dSEnji Cooper
9175*132f818dSEnji Cooper      test -n "$xrpath" && \
9176*132f818dSEnji Cooper	func_warning "'-R' is ignored for archives"
9177*132f818dSEnji Cooper
9178*132f818dSEnji Cooper      test -n "$vinfo" && \
9179*132f818dSEnji Cooper	func_warning "'-version-info/-version-number' is ignored for archives"
9180*132f818dSEnji Cooper
9181*132f818dSEnji Cooper      test -n "$release" && \
9182*132f818dSEnji Cooper	func_warning "'-release' is ignored for archives"
9183*132f818dSEnji Cooper
9184*132f818dSEnji Cooper      test -n "$export_symbols$export_symbols_regex" && \
9185*132f818dSEnji Cooper	func_warning "'-export-symbols' is ignored for archives"
9186*132f818dSEnji Cooper
9187*132f818dSEnji Cooper      # Now set the variables for building old libraries.
9188*132f818dSEnji Cooper      build_libtool_libs=no
9189*132f818dSEnji Cooper      oldlibs=$output
9190*132f818dSEnji Cooper      func_append objs "$old_deplibs"
9191*132f818dSEnji Cooper      ;;
9192*132f818dSEnji Cooper
9193*132f818dSEnji Cooper    lib)
9194*132f818dSEnji Cooper      # Make sure we only generate libraries of the form 'libNAME.la'.
9195*132f818dSEnji Cooper      case $outputname in
9196*132f818dSEnji Cooper      lib*)
9197*132f818dSEnji Cooper	func_stripname 'lib' '.la' "$outputname"
9198*132f818dSEnji Cooper	name=$func_stripname_result
9199*132f818dSEnji Cooper	eval shared_ext=\"$shrext_cmds\"
9200*132f818dSEnji Cooper	eval libname=\"$libname_spec\"
9201*132f818dSEnji Cooper	;;
9202*132f818dSEnji Cooper      *)
9203*132f818dSEnji Cooper	test no = "$module" \
9204*132f818dSEnji Cooper	  && func_fatal_help "libtool library '$output' must begin with 'lib'"
9205*132f818dSEnji Cooper
9206*132f818dSEnji Cooper	if test no != "$need_lib_prefix"; then
9207*132f818dSEnji Cooper	  # Add the "lib" prefix for modules if required
9208*132f818dSEnji Cooper	  func_stripname '' '.la' "$outputname"
9209*132f818dSEnji Cooper	  name=$func_stripname_result
9210*132f818dSEnji Cooper	  eval shared_ext=\"$shrext_cmds\"
9211*132f818dSEnji Cooper	  eval libname=\"$libname_spec\"
9212*132f818dSEnji Cooper	else
9213*132f818dSEnji Cooper	  func_stripname '' '.la' "$outputname"
9214*132f818dSEnji Cooper	  libname=$func_stripname_result
9215*132f818dSEnji Cooper	fi
9216*132f818dSEnji Cooper	;;
9217*132f818dSEnji Cooper      esac
9218*132f818dSEnji Cooper
9219*132f818dSEnji Cooper      if test -n "$objs"; then
9220*132f818dSEnji Cooper	if test pass_all != "$deplibs_check_method"; then
9221*132f818dSEnji Cooper	  func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
9222*132f818dSEnji Cooper	else
9223*132f818dSEnji Cooper	  func_warning "Linking the shared library $output against the non-libtool objects $objs is not portable!"
9224*132f818dSEnji Cooper	  func_append libobjs " $objs"
9225*132f818dSEnji Cooper	fi
9226*132f818dSEnji Cooper      fi
9227*132f818dSEnji Cooper
9228*132f818dSEnji Cooper      test no = "$dlself" \
9229*132f818dSEnji Cooper	|| func_warning "'-dlopen self' is ignored for libtool libraries"
9230*132f818dSEnji Cooper
9231*132f818dSEnji Cooper      set dummy $rpath
9232*132f818dSEnji Cooper      shift
9233*132f818dSEnji Cooper      test 1 -lt "$#" \
9234*132f818dSEnji Cooper	&& func_warning "ignoring multiple '-rpath's for a libtool library"
9235*132f818dSEnji Cooper
9236*132f818dSEnji Cooper      install_libdir=$1
9237*132f818dSEnji Cooper
9238*132f818dSEnji Cooper      oldlibs=
9239*132f818dSEnji Cooper      if test -z "$rpath"; then
9240*132f818dSEnji Cooper	if test yes = "$build_libtool_libs"; then
9241*132f818dSEnji Cooper	  # Building a libtool convenience library.
9242*132f818dSEnji Cooper	  # Some compilers have problems with a '.al' extension so
9243*132f818dSEnji Cooper	  # convenience libraries should have the same extension an
9244*132f818dSEnji Cooper	  # archive normally would.
9245*132f818dSEnji Cooper	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
9246*132f818dSEnji Cooper	  build_libtool_libs=convenience
9247*132f818dSEnji Cooper	  build_old_libs=yes
9248*132f818dSEnji Cooper	fi
9249*132f818dSEnji Cooper
9250*132f818dSEnji Cooper	test -n "$vinfo" && \
9251*132f818dSEnji Cooper	  func_warning "'-version-info/-version-number' is ignored for convenience libraries"
9252*132f818dSEnji Cooper
9253*132f818dSEnji Cooper	test -n "$release" && \
9254*132f818dSEnji Cooper	  func_warning "'-release' is ignored for convenience libraries"
9255*132f818dSEnji Cooper      else
9256*132f818dSEnji Cooper
9257*132f818dSEnji Cooper	# Parse the version information argument.
9258*132f818dSEnji Cooper	save_ifs=$IFS; IFS=:
9259*132f818dSEnji Cooper	set dummy $vinfo 0 0 0
9260*132f818dSEnji Cooper	shift
9261*132f818dSEnji Cooper	IFS=$save_ifs
9262*132f818dSEnji Cooper
9263*132f818dSEnji Cooper	test -n "$7" && \
9264*132f818dSEnji Cooper	  func_fatal_help "too many parameters to '-version-info'"
9265*132f818dSEnji Cooper
9266*132f818dSEnji Cooper	# convert absolute version numbers to libtool ages
9267*132f818dSEnji Cooper	# this retains compatibility with .la files and attempts
9268*132f818dSEnji Cooper	# to make the code below a bit more comprehensible
9269*132f818dSEnji Cooper
9270*132f818dSEnji Cooper	case $vinfo_number in
9271*132f818dSEnji Cooper	yes)
9272*132f818dSEnji Cooper	  number_major=$1
9273*132f818dSEnji Cooper	  number_minor=$2
9274*132f818dSEnji Cooper	  number_revision=$3
9275*132f818dSEnji Cooper	  #
9276*132f818dSEnji Cooper	  # There are really only two kinds -- those that
9277*132f818dSEnji Cooper	  # use the current revision as the major version
9278*132f818dSEnji Cooper	  # and those that subtract age and use age as
9279*132f818dSEnji Cooper	  # a minor version.  But, then there is irix
9280*132f818dSEnji Cooper	  # that has an extra 1 added just for fun
9281*132f818dSEnji Cooper	  #
9282*132f818dSEnji Cooper	  case $version_type in
9283*132f818dSEnji Cooper	  # correct linux to gnu/linux during the next big refactor
9284*132f818dSEnji Cooper	  darwin|freebsd-elf|linux|midnightbsd-elf|osf|qnx|windows|none)
9285*132f818dSEnji Cooper	    func_arith $number_major + $number_minor
9286*132f818dSEnji Cooper	    current=$func_arith_result
9287*132f818dSEnji Cooper	    age=$number_minor
9288*132f818dSEnji Cooper	    revision=$number_revision
9289*132f818dSEnji Cooper	    ;;
9290*132f818dSEnji Cooper	  freebsd-aout|sco|sunos)
9291*132f818dSEnji Cooper	    current=$number_major
9292*132f818dSEnji Cooper	    revision=$number_minor
9293*132f818dSEnji Cooper	    age=0
9294*132f818dSEnji Cooper	    ;;
9295*132f818dSEnji Cooper	  irix|nonstopux)
9296*132f818dSEnji Cooper	    func_arith $number_major + $number_minor
9297*132f818dSEnji Cooper	    current=$func_arith_result
9298*132f818dSEnji Cooper	    age=$number_minor
9299*132f818dSEnji Cooper	    revision=$number_minor
9300*132f818dSEnji Cooper	    lt_irix_increment=no
9301*132f818dSEnji Cooper	    ;;
9302*132f818dSEnji Cooper	  *)
9303*132f818dSEnji Cooper	    func_fatal_configuration "$modename: unknown library version type '$version_type'"
9304*132f818dSEnji Cooper	    ;;
9305*132f818dSEnji Cooper	  esac
9306*132f818dSEnji Cooper	  ;;
9307*132f818dSEnji Cooper	no)
9308*132f818dSEnji Cooper	  current=$1
9309*132f818dSEnji Cooper	  revision=$2
9310*132f818dSEnji Cooper	  age=$3
9311*132f818dSEnji Cooper	  ;;
9312*132f818dSEnji Cooper	esac
9313*132f818dSEnji Cooper
9314*132f818dSEnji Cooper	# Check that each of the things are valid numbers.
9315*132f818dSEnji Cooper	case $current in
9316*132f818dSEnji Cooper	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]) ;;
9317*132f818dSEnji Cooper	*)
9318*132f818dSEnji Cooper	  func_error "CURRENT '$current' must be a nonnegative integer"
9319*132f818dSEnji Cooper	  func_fatal_error "'$vinfo' is not valid version information"
9320*132f818dSEnji Cooper	  ;;
9321*132f818dSEnji Cooper	esac
9322*132f818dSEnji Cooper
9323*132f818dSEnji Cooper	case $revision in
9324*132f818dSEnji Cooper	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]) ;;
9325*132f818dSEnji Cooper	*)
9326*132f818dSEnji Cooper	  func_error "REVISION '$revision' must be a nonnegative integer"
9327*132f818dSEnji Cooper	  func_fatal_error "'$vinfo' is not valid version information"
9328*132f818dSEnji Cooper	  ;;
9329*132f818dSEnji Cooper	esac
9330*132f818dSEnji Cooper
9331*132f818dSEnji Cooper	case $age in
9332*132f818dSEnji Cooper	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]) ;;
9333*132f818dSEnji Cooper	*)
9334*132f818dSEnji Cooper	  func_error "AGE '$age' must be a nonnegative integer"
9335*132f818dSEnji Cooper	  func_fatal_error "'$vinfo' is not valid version information"
9336*132f818dSEnji Cooper	  ;;
9337*132f818dSEnji Cooper	esac
9338*132f818dSEnji Cooper
9339*132f818dSEnji Cooper	if test "$age" -gt "$current"; then
9340*132f818dSEnji Cooper	  func_error "AGE '$age' is greater than the current interface number '$current'"
9341*132f818dSEnji Cooper	  func_fatal_error "'$vinfo' is not valid version information"
9342*132f818dSEnji Cooper	fi
9343*132f818dSEnji Cooper
9344*132f818dSEnji Cooper	# Calculate the version variables.
9345*132f818dSEnji Cooper	major=
9346*132f818dSEnji Cooper	versuffix=
9347*132f818dSEnji Cooper	verstring=
9348*132f818dSEnji Cooper	case $version_type in
9349*132f818dSEnji Cooper	none) ;;
9350*132f818dSEnji Cooper
9351*132f818dSEnji Cooper	darwin)
9352*132f818dSEnji Cooper	  # Like Linux, but with the current version available in
9353*132f818dSEnji Cooper	  # verstring for coding it into the library header
9354*132f818dSEnji Cooper	  func_arith $current - $age
9355*132f818dSEnji Cooper	  major=.$func_arith_result
9356*132f818dSEnji Cooper	  versuffix=$major.$age.$revision
9357*132f818dSEnji Cooper	  # Darwin ld doesn't like 0 for these options...
9358*132f818dSEnji Cooper	  func_arith $current + 1
9359*132f818dSEnji Cooper	  minor_current=$func_arith_result
9360*132f818dSEnji Cooper	  xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
9361*132f818dSEnji Cooper	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
9362*132f818dSEnji Cooper          # On Darwin other compilers
9363*132f818dSEnji Cooper          case $CC in
9364*132f818dSEnji Cooper              nagfor*)
9365*132f818dSEnji Cooper                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
9366*132f818dSEnji Cooper                  ;;
9367*132f818dSEnji Cooper              *)
9368*132f818dSEnji Cooper                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
9369*132f818dSEnji Cooper                  ;;
9370*132f818dSEnji Cooper          esac
9371*132f818dSEnji Cooper	  ;;
9372*132f818dSEnji Cooper
9373*132f818dSEnji Cooper	freebsd-aout)
9374*132f818dSEnji Cooper	  major=.$current
9375*132f818dSEnji Cooper	  versuffix=.$current.$revision
9376*132f818dSEnji Cooper	  ;;
9377*132f818dSEnji Cooper
9378*132f818dSEnji Cooper	freebsd-elf | midnightbsd-elf)
9379*132f818dSEnji Cooper	  func_arith $current - $age
9380*132f818dSEnji Cooper	  major=.$func_arith_result
9381*132f818dSEnji Cooper	  versuffix=$major.$age.$revision
9382*132f818dSEnji Cooper	  ;;
9383*132f818dSEnji Cooper
9384*132f818dSEnji Cooper	irix | nonstopux)
9385*132f818dSEnji Cooper	  if test no = "$lt_irix_increment"; then
9386*132f818dSEnji Cooper	    func_arith $current - $age
9387*132f818dSEnji Cooper	  else
9388*132f818dSEnji Cooper	    func_arith $current - $age + 1
9389*132f818dSEnji Cooper	  fi
9390*132f818dSEnji Cooper	  major=$func_arith_result
9391*132f818dSEnji Cooper
9392*132f818dSEnji Cooper	  case $version_type in
9393*132f818dSEnji Cooper	    nonstopux) verstring_prefix=nonstopux ;;
9394*132f818dSEnji Cooper	    *)         verstring_prefix=sgi ;;
9395*132f818dSEnji Cooper	  esac
9396*132f818dSEnji Cooper	  verstring=$verstring_prefix$major.$revision
9397*132f818dSEnji Cooper
9398*132f818dSEnji Cooper	  # Add in all the interfaces that we are compatible with.
9399*132f818dSEnji Cooper	  loop=$revision
9400*132f818dSEnji Cooper	  while test 0 -ne "$loop"; do
9401*132f818dSEnji Cooper	    func_arith $revision - $loop
9402*132f818dSEnji Cooper	    iface=$func_arith_result
9403*132f818dSEnji Cooper	    func_arith $loop - 1
9404*132f818dSEnji Cooper	    loop=$func_arith_result
9405*132f818dSEnji Cooper	    verstring=$verstring_prefix$major.$iface:$verstring
9406*132f818dSEnji Cooper	  done
9407*132f818dSEnji Cooper
9408*132f818dSEnji Cooper	  # Before this point, $major must not contain '.'.
9409*132f818dSEnji Cooper	  major=.$major
9410*132f818dSEnji Cooper	  versuffix=$major.$revision
9411*132f818dSEnji Cooper	  ;;
9412*132f818dSEnji Cooper
9413*132f818dSEnji Cooper	linux) # correct to gnu/linux during the next big refactor
9414*132f818dSEnji Cooper	  func_arith $current - $age
9415*132f818dSEnji Cooper	  major=.$func_arith_result
9416*132f818dSEnji Cooper	  versuffix=$major.$age.$revision
9417*132f818dSEnji Cooper	  ;;
9418*132f818dSEnji Cooper
9419*132f818dSEnji Cooper	osf)
9420*132f818dSEnji Cooper	  func_arith $current - $age
9421*132f818dSEnji Cooper	  major=.$func_arith_result
9422*132f818dSEnji Cooper	  versuffix=.$current.$age.$revision
9423*132f818dSEnji Cooper	  verstring=$current.$age.$revision
9424*132f818dSEnji Cooper
9425*132f818dSEnji Cooper	  # Add in all the interfaces that we are compatible with.
9426*132f818dSEnji Cooper	  loop=$age
9427*132f818dSEnji Cooper	  while test 0 -ne "$loop"; do
9428*132f818dSEnji Cooper	    func_arith $current - $loop
9429*132f818dSEnji Cooper	    iface=$func_arith_result
9430*132f818dSEnji Cooper	    func_arith $loop - 1
9431*132f818dSEnji Cooper	    loop=$func_arith_result
9432*132f818dSEnji Cooper	    verstring=$verstring:$iface.0
9433*132f818dSEnji Cooper	  done
9434*132f818dSEnji Cooper
9435*132f818dSEnji Cooper	  # Make executables depend on our current version.
9436*132f818dSEnji Cooper	  func_append verstring ":$current.0"
9437*132f818dSEnji Cooper	  ;;
9438*132f818dSEnji Cooper
9439*132f818dSEnji Cooper	qnx)
9440*132f818dSEnji Cooper	  func_arith $current - $age
9441*132f818dSEnji Cooper	  major=.$func_arith_result
9442*132f818dSEnji Cooper	  versuffix=$major.$age.$revision
9443*132f818dSEnji Cooper	  ;;
9444*132f818dSEnji Cooper
9445*132f818dSEnji Cooper	sco)
9446*132f818dSEnji Cooper	  major=.$current
9447*132f818dSEnji Cooper	  versuffix=.$current
9448*132f818dSEnji Cooper	  ;;
9449*132f818dSEnji Cooper
9450*132f818dSEnji Cooper	sunos)
9451*132f818dSEnji Cooper	  major=.$current
9452*132f818dSEnji Cooper	  versuffix=.$current.$revision
9453*132f818dSEnji Cooper	  ;;
9454*132f818dSEnji Cooper
9455*132f818dSEnji Cooper	windows)
9456*132f818dSEnji Cooper	  # Use '-' rather than '.', since we only want one
9457*132f818dSEnji Cooper	  # extension on DOS 8.3 file systems.
9458*132f818dSEnji Cooper	  func_arith $current - $age
9459*132f818dSEnji Cooper	  major=$func_arith_result
9460*132f818dSEnji Cooper	  versuffix=-$major
9461*132f818dSEnji Cooper	  ;;
9462*132f818dSEnji Cooper
9463*132f818dSEnji Cooper	*)
9464*132f818dSEnji Cooper	  func_fatal_configuration "unknown library version type '$version_type'"
9465*132f818dSEnji Cooper	  ;;
9466*132f818dSEnji Cooper	esac
9467*132f818dSEnji Cooper
9468*132f818dSEnji Cooper	# Clear the version info if we defaulted, and they specified a release.
9469*132f818dSEnji Cooper	if test -z "$vinfo" && test -n "$release"; then
9470*132f818dSEnji Cooper	  major=
9471*132f818dSEnji Cooper	  case $version_type in
9472*132f818dSEnji Cooper	  darwin)
9473*132f818dSEnji Cooper	    # we can't check for "0.0" in archive_cmds due to quoting
9474*132f818dSEnji Cooper	    # problems, so we reset it completely
9475*132f818dSEnji Cooper	    verstring=
9476*132f818dSEnji Cooper	    ;;
9477*132f818dSEnji Cooper	  *)
9478*132f818dSEnji Cooper	    verstring=0.0
9479*132f818dSEnji Cooper	    ;;
9480*132f818dSEnji Cooper	  esac
9481*132f818dSEnji Cooper	  if test no = "$need_version"; then
9482*132f818dSEnji Cooper	    versuffix=
9483*132f818dSEnji Cooper	  else
9484*132f818dSEnji Cooper	    versuffix=.0.0
9485*132f818dSEnji Cooper	  fi
9486*132f818dSEnji Cooper	fi
9487*132f818dSEnji Cooper
9488*132f818dSEnji Cooper	# Remove version info from name if versioning should be avoided
9489*132f818dSEnji Cooper	if test yes,no = "$avoid_version,$need_version"; then
9490*132f818dSEnji Cooper	  major=
9491*132f818dSEnji Cooper	  versuffix=
9492*132f818dSEnji Cooper	  verstring=
9493*132f818dSEnji Cooper	fi
9494*132f818dSEnji Cooper
9495*132f818dSEnji Cooper	# Check to see if the archive will have undefined symbols.
9496*132f818dSEnji Cooper	if test yes = "$allow_undefined"; then
9497*132f818dSEnji Cooper	  if test unsupported = "$allow_undefined_flag"; then
9498*132f818dSEnji Cooper	    if test yes = "$build_old_libs"; then
9499*132f818dSEnji Cooper	      func_warning "undefined symbols not allowed in $host shared libraries; building static only"
9500*132f818dSEnji Cooper	      build_libtool_libs=no
9501*132f818dSEnji Cooper	    else
9502*132f818dSEnji Cooper	      func_fatal_error "can't build $host shared library unless -no-undefined is specified"
9503*132f818dSEnji Cooper	    fi
9504*132f818dSEnji Cooper	  fi
9505*132f818dSEnji Cooper	else
9506*132f818dSEnji Cooper	  # Don't allow undefined symbols.
9507*132f818dSEnji Cooper	  allow_undefined_flag=$no_undefined_flag
9508*132f818dSEnji Cooper	fi
9509*132f818dSEnji Cooper
9510*132f818dSEnji Cooper      fi
9511*132f818dSEnji Cooper
9512*132f818dSEnji Cooper      func_generate_dlsyms "$libname" "$libname" :
9513*132f818dSEnji Cooper      func_append libobjs " $symfileobj"
9514*132f818dSEnji Cooper      test " " = "$libobjs" && libobjs=
9515*132f818dSEnji Cooper
9516*132f818dSEnji Cooper      if test relink != "$opt_mode"; then
9517*132f818dSEnji Cooper	# Remove our outputs, but don't remove object files since they
9518*132f818dSEnji Cooper	# may have been created when compiling PIC objects.
9519*132f818dSEnji Cooper	removelist=
9520*132f818dSEnji Cooper	tempremovelist=`$ECHO "$output_objdir/*"`
9521*132f818dSEnji Cooper	for p in $tempremovelist; do
9522*132f818dSEnji Cooper	  case $p in
9523*132f818dSEnji Cooper	    *.$objext | *.gcno)
9524*132f818dSEnji Cooper	       ;;
9525*132f818dSEnji Cooper	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
9526*132f818dSEnji Cooper	       if test -n "$precious_files_regex"; then
9527*132f818dSEnji Cooper		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
9528*132f818dSEnji Cooper		 then
9529*132f818dSEnji Cooper		   continue
9530*132f818dSEnji Cooper		 fi
9531*132f818dSEnji Cooper	       fi
9532*132f818dSEnji Cooper	       func_append removelist " $p"
9533*132f818dSEnji Cooper	       ;;
9534*132f818dSEnji Cooper	    *) ;;
9535*132f818dSEnji Cooper	  esac
9536*132f818dSEnji Cooper	done
9537*132f818dSEnji Cooper	test -n "$removelist" && \
9538*132f818dSEnji Cooper	  func_show_eval "${RM}r \$removelist"
9539*132f818dSEnji Cooper      fi
9540*132f818dSEnji Cooper
9541*132f818dSEnji Cooper      # Now set the variables for building old libraries.
9542*132f818dSEnji Cooper      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
9543*132f818dSEnji Cooper	func_append oldlibs " $output_objdir/$libname.$libext"
9544*132f818dSEnji Cooper
9545*132f818dSEnji Cooper	# Transform .lo files to .o files.
9546*132f818dSEnji Cooper	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
9547*132f818dSEnji Cooper      fi
9548*132f818dSEnji Cooper
9549*132f818dSEnji Cooper      # Eliminate all temporary directories.
9550*132f818dSEnji Cooper      #for path in $notinst_path; do
9551*132f818dSEnji Cooper      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
9552*132f818dSEnji Cooper      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
9553*132f818dSEnji Cooper      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
9554*132f818dSEnji Cooper      #done
9555*132f818dSEnji Cooper
9556*132f818dSEnji Cooper      if test -n "$xrpath"; then
9557*132f818dSEnji Cooper	# If the user specified any rpath flags, then add them.
9558*132f818dSEnji Cooper	temp_xrpath=
9559*132f818dSEnji Cooper	for libdir in $xrpath; do
9560*132f818dSEnji Cooper	  func_replace_sysroot "$libdir"
9561*132f818dSEnji Cooper	  func_append temp_xrpath " -R$func_replace_sysroot_result"
9562*132f818dSEnji Cooper	  case "$finalize_rpath " in
9563*132f818dSEnji Cooper	  *" $libdir "*) ;;
9564*132f818dSEnji Cooper	  *) func_append finalize_rpath " $libdir" ;;
9565*132f818dSEnji Cooper	  esac
9566*132f818dSEnji Cooper	done
9567*132f818dSEnji Cooper	if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
9568*132f818dSEnji Cooper	  dependency_libs="$temp_xrpath $dependency_libs"
9569*132f818dSEnji Cooper	fi
9570*132f818dSEnji Cooper      fi
9571*132f818dSEnji Cooper
9572*132f818dSEnji Cooper      # Make sure dlfiles contains only unique files that won't be dlpreopened
9573*132f818dSEnji Cooper      old_dlfiles=$dlfiles
9574*132f818dSEnji Cooper      dlfiles=
9575*132f818dSEnji Cooper      for lib in $old_dlfiles; do
9576*132f818dSEnji Cooper	case " $dlprefiles $dlfiles " in
9577*132f818dSEnji Cooper	*" $lib "*) ;;
9578*132f818dSEnji Cooper	*) func_append dlfiles " $lib" ;;
9579*132f818dSEnji Cooper	esac
9580*132f818dSEnji Cooper      done
9581*132f818dSEnji Cooper
9582*132f818dSEnji Cooper      # Make sure dlprefiles contains only unique files
9583*132f818dSEnji Cooper      old_dlprefiles=$dlprefiles
9584*132f818dSEnji Cooper      dlprefiles=
9585*132f818dSEnji Cooper      for lib in $old_dlprefiles; do
9586*132f818dSEnji Cooper	case "$dlprefiles " in
9587*132f818dSEnji Cooper	*" $lib "*) ;;
9588*132f818dSEnji Cooper	*) func_append dlprefiles " $lib" ;;
9589*132f818dSEnji Cooper	esac
9590*132f818dSEnji Cooper      done
9591*132f818dSEnji Cooper
9592*132f818dSEnji Cooper      if test yes = "$build_libtool_libs"; then
9593*132f818dSEnji Cooper	if test -n "$rpath"; then
9594*132f818dSEnji Cooper	  case $host in
9595*132f818dSEnji Cooper	  *-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
9596*132f818dSEnji Cooper	    # these systems don't actually have a c library (as such)!
9597*132f818dSEnji Cooper	    ;;
9598*132f818dSEnji Cooper	  *-*-rhapsody* | *-*-darwin1.[012])
9599*132f818dSEnji Cooper	    # Rhapsody C library is in the System framework
9600*132f818dSEnji Cooper	    func_append deplibs " System.ltframework"
9601*132f818dSEnji Cooper	    ;;
9602*132f818dSEnji Cooper	  *-*-netbsd*)
9603*132f818dSEnji Cooper	    # Don't link with libc until the a.out ld.so is fixed.
9604*132f818dSEnji Cooper	    ;;
9605*132f818dSEnji Cooper	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
9606*132f818dSEnji Cooper	    # Do not include libc due to us having libc/libc_r.
9607*132f818dSEnji Cooper	    ;;
9608*132f818dSEnji Cooper	  *-*-sco3.2v5* | *-*-sco5v6*)
9609*132f818dSEnji Cooper	    # Causes problems with __ctype
9610*132f818dSEnji Cooper	    ;;
9611*132f818dSEnji Cooper	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
9612*132f818dSEnji Cooper	    # Compiler inserts libc in the correct place for threads to work
9613*132f818dSEnji Cooper	    ;;
9614*132f818dSEnji Cooper	  *)
9615*132f818dSEnji Cooper	    # Add libc to deplibs on all other systems if necessary.
9616*132f818dSEnji Cooper	    if test yes = "$build_libtool_need_lc"; then
9617*132f818dSEnji Cooper	      func_append deplibs " -lc"
9618*132f818dSEnji Cooper	    fi
9619*132f818dSEnji Cooper	    ;;
9620*132f818dSEnji Cooper	  esac
9621*132f818dSEnji Cooper	fi
9622*132f818dSEnji Cooper
9623*132f818dSEnji Cooper	# Transform deplibs into only deplibs that can be linked in shared.
9624*132f818dSEnji Cooper	name_save=$name
9625*132f818dSEnji Cooper	libname_save=$libname
9626*132f818dSEnji Cooper	release_save=$release
9627*132f818dSEnji Cooper	versuffix_save=$versuffix
9628*132f818dSEnji Cooper	major_save=$major
9629*132f818dSEnji Cooper	# I'm not sure if I'm treating the release correctly.  I think
9630*132f818dSEnji Cooper	# release should show up in the -l (ie -lgmp5) so we don't want to
9631*132f818dSEnji Cooper	# add it in twice.  Is that correct?
9632*132f818dSEnji Cooper	release=
9633*132f818dSEnji Cooper	versuffix=
9634*132f818dSEnji Cooper	major=
9635*132f818dSEnji Cooper	newdeplibs=
9636*132f818dSEnji Cooper	droppeddeps=no
9637*132f818dSEnji Cooper	case $deplibs_check_method in
9638*132f818dSEnji Cooper	pass_all)
9639*132f818dSEnji Cooper	  # Don't check for shared/static.  Everything works.
9640*132f818dSEnji Cooper	  # This might be a little naive.  We might want to check
9641*132f818dSEnji Cooper	  # whether the library exists or not.  But this is on
9642*132f818dSEnji Cooper	  # osf3 & osf4 and I'm not really sure... Just
9643*132f818dSEnji Cooper	  # implementing what was already the behavior.
9644*132f818dSEnji Cooper	  newdeplibs=$deplibs
9645*132f818dSEnji Cooper	  ;;
9646*132f818dSEnji Cooper	file_magic*)
9647*132f818dSEnji Cooper	  set dummy $deplibs_check_method; shift
9648*132f818dSEnji Cooper	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9649*132f818dSEnji Cooper	  for a_deplib in $deplibs; do
9650*132f818dSEnji Cooper	    case $a_deplib in
9651*132f818dSEnji Cooper	    -l*)
9652*132f818dSEnji Cooper	      func_stripname -l '' "$a_deplib"
9653*132f818dSEnji Cooper	      name=$func_stripname_result
9654*132f818dSEnji Cooper	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9655*132f818dSEnji Cooper		case " $predeps $postdeps " in
9656*132f818dSEnji Cooper		*" $a_deplib "*)
9657*132f818dSEnji Cooper		  func_append newdeplibs " $a_deplib"
9658*132f818dSEnji Cooper		  a_deplib=
9659*132f818dSEnji Cooper		  ;;
9660*132f818dSEnji Cooper		esac
9661*132f818dSEnji Cooper	      fi
9662*132f818dSEnji Cooper	      if test -n "$a_deplib"; then
9663*132f818dSEnji Cooper		libname=`eval "\\$ECHO \"$libname_spec\""`
9664*132f818dSEnji Cooper		if test -n "$file_magic_glob"; then
9665*132f818dSEnji Cooper		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
9666*132f818dSEnji Cooper		else
9667*132f818dSEnji Cooper		  libnameglob=$libname
9668*132f818dSEnji Cooper		fi
9669*132f818dSEnji Cooper		test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
9670*132f818dSEnji Cooper		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9671*132f818dSEnji Cooper		  if test yes = "$want_nocaseglob"; then
9672*132f818dSEnji Cooper		    shopt -s nocaseglob
9673*132f818dSEnji Cooper		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9674*132f818dSEnji Cooper		    $nocaseglob
9675*132f818dSEnji Cooper		  else
9676*132f818dSEnji Cooper		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9677*132f818dSEnji Cooper		  fi
9678*132f818dSEnji Cooper		  for potent_lib in $potential_libs; do
9679*132f818dSEnji Cooper		      # Follow soft links.
9680*132f818dSEnji Cooper		      if ls -lLd "$potent_lib" 2>/dev/null |
9681*132f818dSEnji Cooper			 $GREP " -> " >/dev/null; then
9682*132f818dSEnji Cooper			continue
9683*132f818dSEnji Cooper		      fi
9684*132f818dSEnji Cooper		      # The statement above tries to avoid entering an
9685*132f818dSEnji Cooper		      # endless loop below, in case of cyclic links.
9686*132f818dSEnji Cooper		      # We might still enter an endless loop, since a link
9687*132f818dSEnji Cooper		      # loop can be closed while we follow links,
9688*132f818dSEnji Cooper		      # but so what?
9689*132f818dSEnji Cooper		      potlib=$potent_lib
9690*132f818dSEnji Cooper		      while test -h "$potlib" 2>/dev/null; do
9691*132f818dSEnji Cooper			potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
9692*132f818dSEnji Cooper			case $potliblink in
9693*132f818dSEnji Cooper			[\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
9694*132f818dSEnji Cooper			*) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
9695*132f818dSEnji Cooper			esac
9696*132f818dSEnji Cooper		      done
9697*132f818dSEnji Cooper		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
9698*132f818dSEnji Cooper			 $SED -e 10q |
9699*132f818dSEnji Cooper			 $EGREP "$file_magic_regex" > /dev/null; then
9700*132f818dSEnji Cooper			func_append newdeplibs " $a_deplib"
9701*132f818dSEnji Cooper			a_deplib=
9702*132f818dSEnji Cooper			break 2
9703*132f818dSEnji Cooper		      fi
9704*132f818dSEnji Cooper		  done
9705*132f818dSEnji Cooper		done
9706*132f818dSEnji Cooper	      fi
9707*132f818dSEnji Cooper	      if test -n "$a_deplib"; then
9708*132f818dSEnji Cooper		droppeddeps=yes
9709*132f818dSEnji Cooper		func_warning "Linker path does not have real file for library $a_deplib."
9710*132f818dSEnji Cooper		func_warning "I have the capability to make that library automatically link in when"
9711*132f818dSEnji Cooper		func_warning "you link to this library.  But I can only do this if you have a"
9712*132f818dSEnji Cooper		func_warning "shared version of the library, which you do not appear to have"
9713*132f818dSEnji Cooper		func_warning "because I did check the linker path looking for a file starting"
9714*132f818dSEnji Cooper		if test -z "$potlib"; then
9715*132f818dSEnji Cooper		  func_warning "with $libname but no candidates were found. (...for file magic test)"
9716*132f818dSEnji Cooper		else
9717*132f818dSEnji Cooper		  func_warning "with $libname and none of the candidates passed a file format test"
9718*132f818dSEnji Cooper		  func_warning "using a file magic. Last file checked: $potlib"
9719*132f818dSEnji Cooper		fi
9720*132f818dSEnji Cooper	      fi
9721*132f818dSEnji Cooper	      ;;
9722*132f818dSEnji Cooper	    *)
9723*132f818dSEnji Cooper	      # Add a -L argument.
9724*132f818dSEnji Cooper	      func_append newdeplibs " $a_deplib"
9725*132f818dSEnji Cooper	      ;;
9726*132f818dSEnji Cooper	    esac
9727*132f818dSEnji Cooper	  done # Gone through all deplibs.
9728*132f818dSEnji Cooper	  ;;
9729*132f818dSEnji Cooper	match_pattern*)
9730*132f818dSEnji Cooper	  set dummy $deplibs_check_method; shift
9731*132f818dSEnji Cooper	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9732*132f818dSEnji Cooper	  for a_deplib in $deplibs; do
9733*132f818dSEnji Cooper	    case $a_deplib in
9734*132f818dSEnji Cooper	    -l*)
9735*132f818dSEnji Cooper	      func_stripname -l '' "$a_deplib"
9736*132f818dSEnji Cooper	      name=$func_stripname_result
9737*132f818dSEnji Cooper	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9738*132f818dSEnji Cooper		case " $predeps $postdeps " in
9739*132f818dSEnji Cooper		*" $a_deplib "*)
9740*132f818dSEnji Cooper		  func_append newdeplibs " $a_deplib"
9741*132f818dSEnji Cooper		  a_deplib=
9742*132f818dSEnji Cooper		  ;;
9743*132f818dSEnji Cooper		esac
9744*132f818dSEnji Cooper	      fi
9745*132f818dSEnji Cooper	      if test -n "$a_deplib"; then
9746*132f818dSEnji Cooper		libname=`eval "\\$ECHO \"$libname_spec\""`
9747*132f818dSEnji Cooper		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9748*132f818dSEnji Cooper		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
9749*132f818dSEnji Cooper		  for potent_lib in $potential_libs; do
9750*132f818dSEnji Cooper		    potlib=$potent_lib # see symlink-check above in file_magic test
9751*132f818dSEnji Cooper		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
9752*132f818dSEnji Cooper		       $EGREP "$match_pattern_regex" > /dev/null; then
9753*132f818dSEnji Cooper		      func_append newdeplibs " $a_deplib"
9754*132f818dSEnji Cooper		      a_deplib=
9755*132f818dSEnji Cooper		      break 2
9756*132f818dSEnji Cooper		    fi
9757*132f818dSEnji Cooper		  done
9758*132f818dSEnji Cooper		done
9759*132f818dSEnji Cooper	      fi
9760*132f818dSEnji Cooper	      if test -n "$a_deplib"; then
9761*132f818dSEnji Cooper		droppeddeps=yes
9762*132f818dSEnji Cooper		func_warning "Linker path does not have real file for library $a_deplib."
9763*132f818dSEnji Cooper		func_warning "I have the capability to make that library automatically link in when"
9764*132f818dSEnji Cooper		func_warning "you link to this library.  But I can only do this if you have a"
9765*132f818dSEnji Cooper		func_warning "shared version of the library, which you do not appear to have"
9766*132f818dSEnji Cooper		func_warning "because I did check the linker path looking for a file starting"
9767*132f818dSEnji Cooper		if test -z "$potlib"; then
9768*132f818dSEnji Cooper		  func_warning "with $libname but no candidates were found. (...for regex pattern test)"
9769*132f818dSEnji Cooper		else
9770*132f818dSEnji Cooper		  func_warning "with $libname and none of the candidates passed a file format test"
9771*132f818dSEnji Cooper		  func_warning "using a regex pattern. Last file checked: $potlib"
9772*132f818dSEnji Cooper		fi
9773*132f818dSEnji Cooper	      fi
9774*132f818dSEnji Cooper	      ;;
9775*132f818dSEnji Cooper	    *)
9776*132f818dSEnji Cooper	      # Add a -L argument.
9777*132f818dSEnji Cooper	      func_append newdeplibs " $a_deplib"
9778*132f818dSEnji Cooper	      ;;
9779*132f818dSEnji Cooper	    esac
9780*132f818dSEnji Cooper	  done # Gone through all deplibs.
9781*132f818dSEnji Cooper	  ;;
9782*132f818dSEnji Cooper	none | unknown | *)
9783*132f818dSEnji Cooper	  newdeplibs=
9784*132f818dSEnji Cooper	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
9785*132f818dSEnji Cooper	  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9786*132f818dSEnji Cooper	    for i in $predeps $postdeps; do
9787*132f818dSEnji Cooper	      # can't use Xsed below, because $i might contain '/'
9788*132f818dSEnji Cooper	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
9789*132f818dSEnji Cooper	    done
9790*132f818dSEnji Cooper	  fi
9791*132f818dSEnji Cooper	  case $tmp_deplibs in
9792*132f818dSEnji Cooper	  *[!\	\ ]*)
9793*132f818dSEnji Cooper	    echo
9794*132f818dSEnji Cooper	    if test none = "$deplibs_check_method"; then
9795*132f818dSEnji Cooper	      func_warning "Inter-library dependencies are not supported in this platform."
9796*132f818dSEnji Cooper	    else
9797*132f818dSEnji Cooper	      func_warning "Inter-library dependencies are not known to be supported."
9798*132f818dSEnji Cooper	    fi
9799*132f818dSEnji Cooper	    func_warning "All declared inter-library dependencies are being dropped."
9800*132f818dSEnji Cooper	    droppeddeps=yes
9801*132f818dSEnji Cooper	    ;;
9802*132f818dSEnji Cooper	  esac
9803*132f818dSEnji Cooper	  ;;
9804*132f818dSEnji Cooper	esac
9805*132f818dSEnji Cooper	versuffix=$versuffix_save
9806*132f818dSEnji Cooper	major=$major_save
9807*132f818dSEnji Cooper	release=$release_save
9808*132f818dSEnji Cooper	libname=$libname_save
9809*132f818dSEnji Cooper	name=$name_save
9810*132f818dSEnji Cooper
9811*132f818dSEnji Cooper	case $host in
9812*132f818dSEnji Cooper	*-*-rhapsody* | *-*-darwin1.[012])
9813*132f818dSEnji Cooper	  # On Rhapsody replace the C library with the System framework
9814*132f818dSEnji Cooper	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
9815*132f818dSEnji Cooper	  ;;
9816*132f818dSEnji Cooper	esac
9817*132f818dSEnji Cooper
9818*132f818dSEnji Cooper	if test yes = "$droppeddeps"; then
9819*132f818dSEnji Cooper	  if test yes = "$module"; then
9820*132f818dSEnji Cooper	    func_warning "libtool could not satisfy all declared inter-library"
9821*132f818dSEnji Cooper	    func_warning "dependencies of module $libname.  Therefore, libtool will create"
9822*132f818dSEnji Cooper	    func_warning "a static module, that should work as long as the dlopening"
9823*132f818dSEnji Cooper	    func_warning "application is linked with the -dlopen flag."
9824*132f818dSEnji Cooper	    if test -z "$global_symbol_pipe"; then
9825*132f818dSEnji Cooper	      func_warning "However, this would only work if libtool was able to extract symbol"
9826*132f818dSEnji Cooper	      func_warning "lists from a program, using 'nm' or equivalent, but libtool could"
9827*132f818dSEnji Cooper	      func_warning "not find such a program.  So, this module is probably useless."
9828*132f818dSEnji Cooper	      func_warning "'nm' from GNU binutils and a full rebuild may help."
9829*132f818dSEnji Cooper	    fi
9830*132f818dSEnji Cooper	    if test no = "$build_old_libs"; then
9831*132f818dSEnji Cooper	      oldlibs=$output_objdir/$libname.$libext
9832*132f818dSEnji Cooper	      build_libtool_libs=module
9833*132f818dSEnji Cooper	      build_old_libs=yes
9834*132f818dSEnji Cooper	    else
9835*132f818dSEnji Cooper	      build_libtool_libs=no
9836*132f818dSEnji Cooper	    fi
9837*132f818dSEnji Cooper	  else
9838*132f818dSEnji Cooper	    echo "*** The inter-library dependencies that have been dropped here will be"
9839*132f818dSEnji Cooper	    echo "*** automatically added whenever a program is linked with this library"
9840*132f818dSEnji Cooper	    echo "*** or is declared to -dlopen it."
9841*132f818dSEnji Cooper
9842*132f818dSEnji Cooper	    if test no = "$allow_undefined"; then
9843*132f818dSEnji Cooper	      echo
9844*132f818dSEnji Cooper	      echo "*** Since this library must not contain undefined symbols,"
9845*132f818dSEnji Cooper	      echo "*** because either the platform does not support them or"
9846*132f818dSEnji Cooper	      echo "*** it was explicitly requested with -no-undefined,"
9847*132f818dSEnji Cooper	      echo "*** libtool will only create a static version of it."
9848*132f818dSEnji Cooper	      if test no = "$build_old_libs"; then
9849*132f818dSEnji Cooper		oldlibs=$output_objdir/$libname.$libext
9850*132f818dSEnji Cooper		build_libtool_libs=module
9851*132f818dSEnji Cooper		build_old_libs=yes
9852*132f818dSEnji Cooper	      else
9853*132f818dSEnji Cooper		build_libtool_libs=no
9854*132f818dSEnji Cooper	      fi
9855*132f818dSEnji Cooper	    fi
9856*132f818dSEnji Cooper	  fi
9857*132f818dSEnji Cooper	fi
9858*132f818dSEnji Cooper	# Done checking deplibs!
9859*132f818dSEnji Cooper	deplibs=$newdeplibs
9860*132f818dSEnji Cooper      fi
9861*132f818dSEnji Cooper      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
9862*132f818dSEnji Cooper      case $host in
9863*132f818dSEnji Cooper	*-*-darwin*)
9864*132f818dSEnji Cooper	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9865*132f818dSEnji Cooper	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9866*132f818dSEnji Cooper	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9867*132f818dSEnji Cooper	  ;;
9868*132f818dSEnji Cooper      esac
9869*132f818dSEnji Cooper
9870*132f818dSEnji Cooper      # move library search paths that coincide with paths to not yet
9871*132f818dSEnji Cooper      # installed libraries to the beginning of the library search list
9872*132f818dSEnji Cooper      new_libs=
9873*132f818dSEnji Cooper      for path in $notinst_path; do
9874*132f818dSEnji Cooper	case " $new_libs " in
9875*132f818dSEnji Cooper	*" -L$path/$objdir "*) ;;
9876*132f818dSEnji Cooper	*)
9877*132f818dSEnji Cooper	  case " $deplibs " in
9878*132f818dSEnji Cooper	  *" -L$path/$objdir "*)
9879*132f818dSEnji Cooper	    func_append new_libs " -L$path/$objdir" ;;
9880*132f818dSEnji Cooper	  esac
9881*132f818dSEnji Cooper	  ;;
9882*132f818dSEnji Cooper	esac
9883*132f818dSEnji Cooper      done
9884*132f818dSEnji Cooper      for deplib in $deplibs; do
9885*132f818dSEnji Cooper	case $deplib in
9886*132f818dSEnji Cooper	-L*)
9887*132f818dSEnji Cooper	  case " $new_libs " in
9888*132f818dSEnji Cooper	  *" $deplib "*) ;;
9889*132f818dSEnji Cooper	  *) func_append new_libs " $deplib" ;;
9890*132f818dSEnji Cooper	  esac
9891*132f818dSEnji Cooper	  ;;
9892*132f818dSEnji Cooper	*) func_append new_libs " $deplib" ;;
9893*132f818dSEnji Cooper	esac
9894*132f818dSEnji Cooper      done
9895*132f818dSEnji Cooper      deplibs=$new_libs
9896*132f818dSEnji Cooper
9897*132f818dSEnji Cooper      # All the library-specific variables (install_libdir is set above).
9898*132f818dSEnji Cooper      library_names=
9899*132f818dSEnji Cooper      old_library=
9900*132f818dSEnji Cooper      dlname=
9901*132f818dSEnji Cooper
9902*132f818dSEnji Cooper      # Test again, we may have decided not to build it any more
9903*132f818dSEnji Cooper      if test yes = "$build_libtool_libs"; then
9904*132f818dSEnji Cooper	# Remove $wl instances when linking with ld.
9905*132f818dSEnji Cooper	# FIXME: should test the right _cmds variable.
9906*132f818dSEnji Cooper	case $archive_cmds in
9907*132f818dSEnji Cooper	  *\$LD\ *) wl= ;;
9908*132f818dSEnji Cooper        esac
9909*132f818dSEnji Cooper	if test yes = "$hardcode_into_libs"; then
9910*132f818dSEnji Cooper	  # Hardcode the library paths
9911*132f818dSEnji Cooper	  hardcode_libdirs=
9912*132f818dSEnji Cooper	  dep_rpath=
9913*132f818dSEnji Cooper	  rpath=$finalize_rpath
9914*132f818dSEnji Cooper	  test relink = "$opt_mode" || rpath=$compile_rpath$rpath
9915*132f818dSEnji Cooper	  for libdir in $rpath; do
9916*132f818dSEnji Cooper	    if test -n "$hardcode_libdir_flag_spec"; then
9917*132f818dSEnji Cooper	      if test -n "$hardcode_libdir_separator"; then
9918*132f818dSEnji Cooper		func_replace_sysroot "$libdir"
9919*132f818dSEnji Cooper		libdir=$func_replace_sysroot_result
9920*132f818dSEnji Cooper		if test -z "$hardcode_libdirs"; then
9921*132f818dSEnji Cooper		  hardcode_libdirs=$libdir
9922*132f818dSEnji Cooper		else
9923*132f818dSEnji Cooper		  # Just accumulate the unique libdirs.
9924*132f818dSEnji Cooper		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
9925*132f818dSEnji Cooper		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
9926*132f818dSEnji Cooper		    ;;
9927*132f818dSEnji Cooper		  *)
9928*132f818dSEnji Cooper		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
9929*132f818dSEnji Cooper		    ;;
9930*132f818dSEnji Cooper		  esac
9931*132f818dSEnji Cooper		fi
9932*132f818dSEnji Cooper	      else
9933*132f818dSEnji Cooper		eval flag=\"$hardcode_libdir_flag_spec\"
9934*132f818dSEnji Cooper		func_append dep_rpath " $flag"
9935*132f818dSEnji Cooper	      fi
9936*132f818dSEnji Cooper	    elif test -n "$runpath_var"; then
9937*132f818dSEnji Cooper	      case "$perm_rpath " in
9938*132f818dSEnji Cooper	      *" $libdir "*) ;;
9939*132f818dSEnji Cooper	      *) func_append perm_rpath " $libdir" ;;
9940*132f818dSEnji Cooper	      esac
9941*132f818dSEnji Cooper	    fi
9942*132f818dSEnji Cooper	  done
9943*132f818dSEnji Cooper	  # Substitute the hardcoded libdirs into the rpath.
9944*132f818dSEnji Cooper	  if test -n "$hardcode_libdir_separator" &&
9945*132f818dSEnji Cooper	     test -n "$hardcode_libdirs"; then
9946*132f818dSEnji Cooper	    libdir=$hardcode_libdirs
9947*132f818dSEnji Cooper	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
9948*132f818dSEnji Cooper	  fi
9949*132f818dSEnji Cooper	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
9950*132f818dSEnji Cooper	    # We should set the runpath_var.
9951*132f818dSEnji Cooper	    rpath=
9952*132f818dSEnji Cooper	    for dir in $perm_rpath; do
9953*132f818dSEnji Cooper	      func_append rpath "$dir:"
9954*132f818dSEnji Cooper	    done
9955*132f818dSEnji Cooper	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
9956*132f818dSEnji Cooper	  fi
9957*132f818dSEnji Cooper	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
9958*132f818dSEnji Cooper	fi
9959*132f818dSEnji Cooper
9960*132f818dSEnji Cooper	shlibpath=$finalize_shlibpath
9961*132f818dSEnji Cooper	test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
9962*132f818dSEnji Cooper	if test -n "$shlibpath"; then
9963*132f818dSEnji Cooper	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
9964*132f818dSEnji Cooper	fi
9965*132f818dSEnji Cooper
9966*132f818dSEnji Cooper	# Get the real and link names of the library.
9967*132f818dSEnji Cooper	eval shared_ext=\"$shrext_cmds\"
9968*132f818dSEnji Cooper	eval library_names=\"$library_names_spec\"
9969*132f818dSEnji Cooper	set dummy $library_names
9970*132f818dSEnji Cooper	shift
9971*132f818dSEnji Cooper	realname=$1
9972*132f818dSEnji Cooper	shift
9973*132f818dSEnji Cooper
9974*132f818dSEnji Cooper	if test -n "$soname_spec"; then
9975*132f818dSEnji Cooper	  eval soname=\"$soname_spec\"
9976*132f818dSEnji Cooper	else
9977*132f818dSEnji Cooper	  soname=$realname
9978*132f818dSEnji Cooper	fi
9979*132f818dSEnji Cooper	if test -z "$dlname"; then
9980*132f818dSEnji Cooper	  dlname=$soname
9981*132f818dSEnji Cooper	fi
9982*132f818dSEnji Cooper
9983*132f818dSEnji Cooper	lib=$output_objdir/$realname
9984*132f818dSEnji Cooper	linknames=
9985*132f818dSEnji Cooper	for link
9986*132f818dSEnji Cooper	do
9987*132f818dSEnji Cooper	  func_append linknames " $link"
9988*132f818dSEnji Cooper	done
9989*132f818dSEnji Cooper
9990*132f818dSEnji Cooper	# Use standard objects if they are pic
9991*132f818dSEnji Cooper	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
9992*132f818dSEnji Cooper	test "X$libobjs" = "X " && libobjs=
9993*132f818dSEnji Cooper
9994*132f818dSEnji Cooper	delfiles=
9995*132f818dSEnji Cooper	if test -n "$export_symbols" && test -n "$include_expsyms"; then
9996*132f818dSEnji Cooper	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
9997*132f818dSEnji Cooper	  export_symbols=$output_objdir/$libname.uexp
9998*132f818dSEnji Cooper	  func_append delfiles " $export_symbols"
9999*132f818dSEnji Cooper	fi
10000*132f818dSEnji Cooper
10001*132f818dSEnji Cooper	orig_export_symbols=
10002*132f818dSEnji Cooper	case $host_os in
10003*132f818dSEnji Cooper	cygwin* | mingw* | windows* | cegcc*)
10004*132f818dSEnji Cooper	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
10005*132f818dSEnji Cooper	    # exporting using user supplied symfile
10006*132f818dSEnji Cooper	    func_dll_def_p "$export_symbols" || {
10007*132f818dSEnji Cooper	      # and it's NOT already a .def file. Must figure out
10008*132f818dSEnji Cooper	      # which of the given symbols are data symbols and tag
10009*132f818dSEnji Cooper	      # them as such. So, trigger use of export_symbols_cmds.
10010*132f818dSEnji Cooper	      # export_symbols gets reassigned inside the "prepare
10011*132f818dSEnji Cooper	      # the list of exported symbols" if statement, so the
10012*132f818dSEnji Cooper	      # include_expsyms logic still works.
10013*132f818dSEnji Cooper	      orig_export_symbols=$export_symbols
10014*132f818dSEnji Cooper	      export_symbols=
10015*132f818dSEnji Cooper	      always_export_symbols=yes
10016*132f818dSEnji Cooper	    }
10017*132f818dSEnji Cooper	  fi
10018*132f818dSEnji Cooper	  ;;
10019*132f818dSEnji Cooper	esac
10020*132f818dSEnji Cooper
10021*132f818dSEnji Cooper	# Prepare the list of exported symbols
10022*132f818dSEnji Cooper	if test -z "$export_symbols"; then
10023*132f818dSEnji Cooper	  if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
10024*132f818dSEnji Cooper	    func_verbose "generating symbol list for '$libname.la'"
10025*132f818dSEnji Cooper	    export_symbols=$output_objdir/$libname.exp
10026*132f818dSEnji Cooper	    $opt_dry_run || $RM $export_symbols
10027*132f818dSEnji Cooper	    cmds=$export_symbols_cmds
10028*132f818dSEnji Cooper	    save_ifs=$IFS; IFS='~'
10029*132f818dSEnji Cooper	    for cmd1 in $cmds; do
10030*132f818dSEnji Cooper	      IFS=$save_ifs
10031*132f818dSEnji Cooper	      # Take the normal branch if the nm_file_list_spec branch
10032*132f818dSEnji Cooper	      # doesn't work or if tool conversion is not needed.
10033*132f818dSEnji Cooper	      case $nm_file_list_spec~$to_tool_file_cmd in
10034*132f818dSEnji Cooper		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
10035*132f818dSEnji Cooper		  try_normal_branch=yes
10036*132f818dSEnji Cooper		  eval cmd=\"$cmd1\"
10037*132f818dSEnji Cooper		  func_len " $cmd"
10038*132f818dSEnji Cooper		  len=$func_len_result
10039*132f818dSEnji Cooper		  ;;
10040*132f818dSEnji Cooper		*)
10041*132f818dSEnji Cooper		  try_normal_branch=no
10042*132f818dSEnji Cooper		  ;;
10043*132f818dSEnji Cooper	      esac
10044*132f818dSEnji Cooper	      if test yes = "$try_normal_branch" \
10045*132f818dSEnji Cooper		 && { test "$len" -lt "$max_cmd_len" \
10046*132f818dSEnji Cooper		      || test "$max_cmd_len" -le -1; }
10047*132f818dSEnji Cooper	      then
10048*132f818dSEnji Cooper		func_show_eval "$cmd" 'exit $?'
10049*132f818dSEnji Cooper		skipped_export=false
10050*132f818dSEnji Cooper	      elif test -n "$nm_file_list_spec"; then
10051*132f818dSEnji Cooper		func_basename "$output"
10052*132f818dSEnji Cooper		output_la=$func_basename_result
10053*132f818dSEnji Cooper		save_libobjs=$libobjs
10054*132f818dSEnji Cooper		save_output=$output
10055*132f818dSEnji Cooper		output=$output_objdir/$output_la.nm
10056*132f818dSEnji Cooper		func_to_tool_file "$output"
10057*132f818dSEnji Cooper		libobjs=$nm_file_list_spec$func_to_tool_file_result
10058*132f818dSEnji Cooper		func_append delfiles " $output"
10059*132f818dSEnji Cooper		func_verbose "creating $NM input file list: $output"
10060*132f818dSEnji Cooper		for obj in $save_libobjs; do
10061*132f818dSEnji Cooper		  func_to_tool_file "$obj"
10062*132f818dSEnji Cooper		  $ECHO "$func_to_tool_file_result"
10063*132f818dSEnji Cooper		done > "$output"
10064*132f818dSEnji Cooper		eval cmd=\"$cmd1\"
10065*132f818dSEnji Cooper		func_show_eval "$cmd" 'exit $?'
10066*132f818dSEnji Cooper		output=$save_output
10067*132f818dSEnji Cooper		libobjs=$save_libobjs
10068*132f818dSEnji Cooper		skipped_export=false
10069*132f818dSEnji Cooper	      else
10070*132f818dSEnji Cooper		# The command line is too long to execute in one step.
10071*132f818dSEnji Cooper		func_verbose "using reloadable object file for export list..."
10072*132f818dSEnji Cooper		skipped_export=:
10073*132f818dSEnji Cooper		# Break out early, otherwise skipped_export may be
10074*132f818dSEnji Cooper		# set to false by a later but shorter cmd.
10075*132f818dSEnji Cooper		break
10076*132f818dSEnji Cooper	      fi
10077*132f818dSEnji Cooper	    done
10078*132f818dSEnji Cooper	    IFS=$save_ifs
10079*132f818dSEnji Cooper	    if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
10080*132f818dSEnji Cooper	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
10081*132f818dSEnji Cooper	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
10082*132f818dSEnji Cooper	    fi
10083*132f818dSEnji Cooper	  fi
10084*132f818dSEnji Cooper	fi
10085*132f818dSEnji Cooper
10086*132f818dSEnji Cooper	if test -n "$export_symbols" && test -n "$include_expsyms"; then
10087*132f818dSEnji Cooper	  tmp_export_symbols=$export_symbols
10088*132f818dSEnji Cooper	  test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
10089*132f818dSEnji Cooper	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
10090*132f818dSEnji Cooper	fi
10091*132f818dSEnji Cooper
10092*132f818dSEnji Cooper	if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
10093*132f818dSEnji Cooper	  # The given exports_symbols file has to be filtered, so filter it.
10094*132f818dSEnji Cooper	  func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
10095*132f818dSEnji Cooper	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
10096*132f818dSEnji Cooper	  # 's' commands, which not all seds can handle. GNU sed should be fine
10097*132f818dSEnji Cooper	  # though. Also, the filter scales superlinearly with the number of
10098*132f818dSEnji Cooper	  # global variables. join(1) would be nice here, but unfortunately
10099*132f818dSEnji Cooper	  # isn't a blessed tool.
10100*132f818dSEnji Cooper	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
10101*132f818dSEnji Cooper	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
10102*132f818dSEnji Cooper	  export_symbols=$output_objdir/$libname.def
10103*132f818dSEnji Cooper	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
10104*132f818dSEnji Cooper	fi
10105*132f818dSEnji Cooper
10106*132f818dSEnji Cooper	tmp_deplibs=
10107*132f818dSEnji Cooper	for test_deplib in $deplibs; do
10108*132f818dSEnji Cooper	  case " $convenience " in
10109*132f818dSEnji Cooper	  *" $test_deplib "*) ;;
10110*132f818dSEnji Cooper	  *)
10111*132f818dSEnji Cooper	    func_append tmp_deplibs " $test_deplib"
10112*132f818dSEnji Cooper	    ;;
10113*132f818dSEnji Cooper	  esac
10114*132f818dSEnji Cooper	done
10115*132f818dSEnji Cooper	deplibs=$tmp_deplibs
10116*132f818dSEnji Cooper
10117*132f818dSEnji Cooper	if test -n "$convenience"; then
10118*132f818dSEnji Cooper	  if test -n "$whole_archive_flag_spec" &&
10119*132f818dSEnji Cooper	    test yes = "$compiler_needs_object" &&
10120*132f818dSEnji Cooper	    test -z "$libobjs"; then
10121*132f818dSEnji Cooper	    # extract the archives, so we have objects to list.
10122*132f818dSEnji Cooper	    # TODO: could optimize this to just extract one archive.
10123*132f818dSEnji Cooper	    whole_archive_flag_spec=
10124*132f818dSEnji Cooper	  fi
10125*132f818dSEnji Cooper	  if test -n "$whole_archive_flag_spec"; then
10126*132f818dSEnji Cooper	    save_libobjs=$libobjs
10127*132f818dSEnji Cooper	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
10128*132f818dSEnji Cooper	    test "X$libobjs" = "X " && libobjs=
10129*132f818dSEnji Cooper	  else
10130*132f818dSEnji Cooper	    gentop=$output_objdir/${outputname}x
10131*132f818dSEnji Cooper	    func_append generated " $gentop"
10132*132f818dSEnji Cooper
10133*132f818dSEnji Cooper	    func_extract_archives $gentop $convenience
10134*132f818dSEnji Cooper	    func_append libobjs " $func_extract_archives_result"
10135*132f818dSEnji Cooper	    test "X$libobjs" = "X " && libobjs=
10136*132f818dSEnji Cooper	  fi
10137*132f818dSEnji Cooper	fi
10138*132f818dSEnji Cooper
10139*132f818dSEnji Cooper	if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
10140*132f818dSEnji Cooper	  eval flag=\"$thread_safe_flag_spec\"
10141*132f818dSEnji Cooper	  func_append linker_flags " $flag"
10142*132f818dSEnji Cooper	fi
10143*132f818dSEnji Cooper
10144*132f818dSEnji Cooper	# Make a backup of the uninstalled library when relinking
10145*132f818dSEnji Cooper	if test relink = "$opt_mode"; then
10146*132f818dSEnji Cooper	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
10147*132f818dSEnji Cooper	fi
10148*132f818dSEnji Cooper
10149*132f818dSEnji Cooper	# Do each of the archive commands.
10150*132f818dSEnji Cooper	if test yes = "$module" && test -n "$module_cmds"; then
10151*132f818dSEnji Cooper	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
10152*132f818dSEnji Cooper	    eval test_cmds=\"$module_expsym_cmds\"
10153*132f818dSEnji Cooper	    cmds=$module_expsym_cmds
10154*132f818dSEnji Cooper	  else
10155*132f818dSEnji Cooper	    eval test_cmds=\"$module_cmds\"
10156*132f818dSEnji Cooper	    cmds=$module_cmds
10157*132f818dSEnji Cooper	  fi
10158*132f818dSEnji Cooper	else
10159*132f818dSEnji Cooper	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10160*132f818dSEnji Cooper	    eval test_cmds=\"$archive_expsym_cmds\"
10161*132f818dSEnji Cooper	    cmds=$archive_expsym_cmds
10162*132f818dSEnji Cooper	  else
10163*132f818dSEnji Cooper	    eval test_cmds=\"$archive_cmds\"
10164*132f818dSEnji Cooper	    cmds=$archive_cmds
10165*132f818dSEnji Cooper	  fi
10166*132f818dSEnji Cooper	fi
10167*132f818dSEnji Cooper
10168*132f818dSEnji Cooper	if test : != "$skipped_export" &&
10169*132f818dSEnji Cooper	   func_len " $test_cmds" &&
10170*132f818dSEnji Cooper	   len=$func_len_result &&
10171*132f818dSEnji Cooper	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
10172*132f818dSEnji Cooper	  :
10173*132f818dSEnji Cooper	else
10174*132f818dSEnji Cooper	  # The command line is too long to link in one step, link piecewise
10175*132f818dSEnji Cooper	  # or, if using GNU ld and skipped_export is not :, use a linker
10176*132f818dSEnji Cooper	  # script.
10177*132f818dSEnji Cooper
10178*132f818dSEnji Cooper	  # Save the value of $output and $libobjs because we want to
10179*132f818dSEnji Cooper	  # use them later.  If we have whole_archive_flag_spec, we
10180*132f818dSEnji Cooper	  # want to use save_libobjs as it was before
10181*132f818dSEnji Cooper	  # whole_archive_flag_spec was expanded, because we can't
10182*132f818dSEnji Cooper	  # assume the linker understands whole_archive_flag_spec.
10183*132f818dSEnji Cooper	  # This may have to be revisited, in case too many
10184*132f818dSEnji Cooper	  # convenience libraries get linked in and end up exceeding
10185*132f818dSEnji Cooper	  # the spec.
10186*132f818dSEnji Cooper	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
10187*132f818dSEnji Cooper	    save_libobjs=$libobjs
10188*132f818dSEnji Cooper	  fi
10189*132f818dSEnji Cooper	  save_output=$output
10190*132f818dSEnji Cooper	  func_basename "$output"
10191*132f818dSEnji Cooper	  output_la=$func_basename_result
10192*132f818dSEnji Cooper
10193*132f818dSEnji Cooper	  # Clear the reloadable object creation command queue and
10194*132f818dSEnji Cooper	  # initialize k to one.
10195*132f818dSEnji Cooper	  test_cmds=
10196*132f818dSEnji Cooper	  concat_cmds=
10197*132f818dSEnji Cooper	  objlist=
10198*132f818dSEnji Cooper	  last_robj=
10199*132f818dSEnji Cooper	  k=1
10200*132f818dSEnji Cooper
10201*132f818dSEnji Cooper	  if test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
10202*132f818dSEnji Cooper	    output=$output_objdir/$output_la.lnk
10203*132f818dSEnji Cooper	    func_verbose "creating linker input file list: $output"
10204*132f818dSEnji Cooper	    : > $output
10205*132f818dSEnji Cooper	    set x $save_libobjs
10206*132f818dSEnji Cooper	    shift
10207*132f818dSEnji Cooper	    firstobj=
10208*132f818dSEnji Cooper	    if test yes = "$compiler_needs_object"; then
10209*132f818dSEnji Cooper	      firstobj="$1 "
10210*132f818dSEnji Cooper	      shift
10211*132f818dSEnji Cooper	    fi
10212*132f818dSEnji Cooper	    for obj
10213*132f818dSEnji Cooper	    do
10214*132f818dSEnji Cooper	      func_to_tool_file "$obj"
10215*132f818dSEnji Cooper	      $ECHO "$func_to_tool_file_result" >> $output
10216*132f818dSEnji Cooper	    done
10217*132f818dSEnji Cooper	    func_append delfiles " $output"
10218*132f818dSEnji Cooper	    func_to_tool_file "$output"
10219*132f818dSEnji Cooper	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
10220*132f818dSEnji Cooper	  elif test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
10221*132f818dSEnji Cooper	    output=$output_objdir/$output_la.lnkscript
10222*132f818dSEnji Cooper	    func_verbose "creating GNU ld script: $output"
10223*132f818dSEnji Cooper	    echo 'INPUT (' > $output
10224*132f818dSEnji Cooper	    for obj in $save_libobjs
10225*132f818dSEnji Cooper	    do
10226*132f818dSEnji Cooper	      func_to_tool_file "$obj"
10227*132f818dSEnji Cooper	      $ECHO "$func_to_tool_file_result" >> $output
10228*132f818dSEnji Cooper	    done
10229*132f818dSEnji Cooper	    echo ')' >> $output
10230*132f818dSEnji Cooper	    func_append delfiles " $output"
10231*132f818dSEnji Cooper	    func_to_tool_file "$output"
10232*132f818dSEnji Cooper	    output=$func_to_tool_file_result
10233*132f818dSEnji Cooper	  else
10234*132f818dSEnji Cooper	    if test -n "$save_libobjs"; then
10235*132f818dSEnji Cooper	      func_verbose "creating reloadable object files..."
10236*132f818dSEnji Cooper	      output=$output_objdir/$output_la-$k.$objext
10237*132f818dSEnji Cooper	      eval test_cmds=\"$reload_cmds\"
10238*132f818dSEnji Cooper	      func_len " $test_cmds"
10239*132f818dSEnji Cooper	      len0=$func_len_result
10240*132f818dSEnji Cooper	      len=$len0
10241*132f818dSEnji Cooper
10242*132f818dSEnji Cooper	      # Loop over the list of objects to be linked.
10243*132f818dSEnji Cooper	      for obj in $save_libobjs
10244*132f818dSEnji Cooper	      do
10245*132f818dSEnji Cooper		func_len " $obj"
10246*132f818dSEnji Cooper		func_arith $len + $func_len_result
10247*132f818dSEnji Cooper		len=$func_arith_result
10248*132f818dSEnji Cooper		if test -z "$objlist" ||
10249*132f818dSEnji Cooper		   test "$len" -lt "$max_cmd_len"; then
10250*132f818dSEnji Cooper		  func_append objlist " $obj"
10251*132f818dSEnji Cooper		else
10252*132f818dSEnji Cooper		  # The command $test_cmds is almost too long, add a
10253*132f818dSEnji Cooper		  # command to the queue.
10254*132f818dSEnji Cooper		  if test 1 -eq "$k"; then
10255*132f818dSEnji Cooper		    # The first file doesn't have a previous command to add.
10256*132f818dSEnji Cooper		    reload_objs=$objlist
10257*132f818dSEnji Cooper		    eval concat_cmds=\"$reload_cmds\"
10258*132f818dSEnji Cooper		  else
10259*132f818dSEnji Cooper		    # All subsequent reloadable object files will link in
10260*132f818dSEnji Cooper		    # the last one created.
10261*132f818dSEnji Cooper		    reload_objs="$objlist $last_robj"
10262*132f818dSEnji Cooper		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
10263*132f818dSEnji Cooper		  fi
10264*132f818dSEnji Cooper		  last_robj=$output_objdir/$output_la-$k.$objext
10265*132f818dSEnji Cooper		  func_arith $k + 1
10266*132f818dSEnji Cooper		  k=$func_arith_result
10267*132f818dSEnji Cooper		  output=$output_objdir/$output_la-$k.$objext
10268*132f818dSEnji Cooper		  objlist=" $obj"
10269*132f818dSEnji Cooper		  func_len " $last_robj"
10270*132f818dSEnji Cooper		  func_arith $len0 + $func_len_result
10271*132f818dSEnji Cooper		  len=$func_arith_result
10272*132f818dSEnji Cooper		fi
10273*132f818dSEnji Cooper	      done
10274*132f818dSEnji Cooper	      # Handle the remaining objects by creating one last
10275*132f818dSEnji Cooper	      # reloadable object file.  All subsequent reloadable object
10276*132f818dSEnji Cooper	      # files will link in the last one created.
10277*132f818dSEnji Cooper	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
10278*132f818dSEnji Cooper	      reload_objs="$objlist $last_robj"
10279*132f818dSEnji Cooper	      eval concat_cmds=\"\$concat_cmds$reload_cmds\"
10280*132f818dSEnji Cooper	      if test -n "$last_robj"; then
10281*132f818dSEnji Cooper	        eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
10282*132f818dSEnji Cooper	      fi
10283*132f818dSEnji Cooper	      func_append delfiles " $output"
10284*132f818dSEnji Cooper
10285*132f818dSEnji Cooper	    else
10286*132f818dSEnji Cooper	      output=
10287*132f818dSEnji Cooper	    fi
10288*132f818dSEnji Cooper
10289*132f818dSEnji Cooper	    ${skipped_export-false} && {
10290*132f818dSEnji Cooper	      func_verbose "generating symbol list for '$libname.la'"
10291*132f818dSEnji Cooper	      export_symbols=$output_objdir/$libname.exp
10292*132f818dSEnji Cooper	      $opt_dry_run || $RM $export_symbols
10293*132f818dSEnji Cooper	      libobjs=$output
10294*132f818dSEnji Cooper	      # Append the command to create the export file.
10295*132f818dSEnji Cooper	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
10296*132f818dSEnji Cooper	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
10297*132f818dSEnji Cooper	      if test -n "$last_robj"; then
10298*132f818dSEnji Cooper		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
10299*132f818dSEnji Cooper	      fi
10300*132f818dSEnji Cooper	    }
10301*132f818dSEnji Cooper
10302*132f818dSEnji Cooper	    test -n "$save_libobjs" &&
10303*132f818dSEnji Cooper	      func_verbose "creating a temporary reloadable object file: $output"
10304*132f818dSEnji Cooper
10305*132f818dSEnji Cooper	    # Loop through the commands generated above and execute them.
10306*132f818dSEnji Cooper	    save_ifs=$IFS; IFS='~'
10307*132f818dSEnji Cooper	    for cmd in $concat_cmds; do
10308*132f818dSEnji Cooper	      IFS=$save_ifs
10309*132f818dSEnji Cooper	      $opt_quiet || {
10310*132f818dSEnji Cooper		  func_quote_arg expand,pretty "$cmd"
10311*132f818dSEnji Cooper		  eval "func_echo $func_quote_arg_result"
10312*132f818dSEnji Cooper	      }
10313*132f818dSEnji Cooper	      $opt_dry_run || eval "$cmd" || {
10314*132f818dSEnji Cooper		lt_exit=$?
10315*132f818dSEnji Cooper
10316*132f818dSEnji Cooper		# Restore the uninstalled library and exit
10317*132f818dSEnji Cooper		if test relink = "$opt_mode"; then
10318*132f818dSEnji Cooper		  ( cd "$output_objdir" && \
10319*132f818dSEnji Cooper		    $RM "${realname}T" && \
10320*132f818dSEnji Cooper		    $MV "${realname}U" "$realname" )
10321*132f818dSEnji Cooper		fi
10322*132f818dSEnji Cooper
10323*132f818dSEnji Cooper		exit $lt_exit
10324*132f818dSEnji Cooper	      }
10325*132f818dSEnji Cooper	    done
10326*132f818dSEnji Cooper	    IFS=$save_ifs
10327*132f818dSEnji Cooper
10328*132f818dSEnji Cooper	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
10329*132f818dSEnji Cooper	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
10330*132f818dSEnji Cooper	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
10331*132f818dSEnji Cooper	    fi
10332*132f818dSEnji Cooper	  fi
10333*132f818dSEnji Cooper
10334*132f818dSEnji Cooper          ${skipped_export-false} && {
10335*132f818dSEnji Cooper	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
10336*132f818dSEnji Cooper	      tmp_export_symbols=$export_symbols
10337*132f818dSEnji Cooper	      test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
10338*132f818dSEnji Cooper	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
10339*132f818dSEnji Cooper	    fi
10340*132f818dSEnji Cooper
10341*132f818dSEnji Cooper	    if test -n "$orig_export_symbols"; then
10342*132f818dSEnji Cooper	      # The given exports_symbols file has to be filtered, so filter it.
10343*132f818dSEnji Cooper	      func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
10344*132f818dSEnji Cooper	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
10345*132f818dSEnji Cooper	      # 's' commands, which not all seds can handle. GNU sed should be fine
10346*132f818dSEnji Cooper	      # though. Also, the filter scales superlinearly with the number of
10347*132f818dSEnji Cooper	      # global variables. join(1) would be nice here, but unfortunately
10348*132f818dSEnji Cooper	      # isn't a blessed tool.
10349*132f818dSEnji Cooper	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
10350*132f818dSEnji Cooper	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
10351*132f818dSEnji Cooper	      export_symbols=$output_objdir/$libname.def
10352*132f818dSEnji Cooper	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
10353*132f818dSEnji Cooper	    fi
10354*132f818dSEnji Cooper	  }
10355*132f818dSEnji Cooper
10356*132f818dSEnji Cooper	  libobjs=$output
10357*132f818dSEnji Cooper	  # Restore the value of output.
10358*132f818dSEnji Cooper	  output=$save_output
10359*132f818dSEnji Cooper
10360*132f818dSEnji Cooper	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
10361*132f818dSEnji Cooper	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
10362*132f818dSEnji Cooper	    test "X$libobjs" = "X " && libobjs=
10363*132f818dSEnji Cooper	  fi
10364*132f818dSEnji Cooper	  # Expand the library linking commands again to reset the
10365*132f818dSEnji Cooper	  # value of $libobjs for piecewise linking.
10366*132f818dSEnji Cooper
10367*132f818dSEnji Cooper	  # Do each of the archive commands.
10368*132f818dSEnji Cooper	  if test yes = "$module" && test -n "$module_cmds"; then
10369*132f818dSEnji Cooper	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
10370*132f818dSEnji Cooper	      cmds=$module_expsym_cmds
10371*132f818dSEnji Cooper	    else
10372*132f818dSEnji Cooper	      cmds=$module_cmds
10373*132f818dSEnji Cooper	    fi
10374*132f818dSEnji Cooper	  else
10375*132f818dSEnji Cooper	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10376*132f818dSEnji Cooper	      cmds=$archive_expsym_cmds
10377*132f818dSEnji Cooper	    else
10378*132f818dSEnji Cooper	      cmds=$archive_cmds
10379*132f818dSEnji Cooper	    fi
10380*132f818dSEnji Cooper	  fi
10381*132f818dSEnji Cooper	fi
10382*132f818dSEnji Cooper
10383*132f818dSEnji Cooper	if test -n "$delfiles"; then
10384*132f818dSEnji Cooper	  # Append the command to remove temporary files to $cmds.
10385*132f818dSEnji Cooper	  eval cmds=\"\$cmds~\$RM $delfiles\"
10386*132f818dSEnji Cooper	fi
10387*132f818dSEnji Cooper
10388*132f818dSEnji Cooper	# Add any objects from preloaded convenience libraries
10389*132f818dSEnji Cooper	if test -n "$dlprefiles"; then
10390*132f818dSEnji Cooper	  gentop=$output_objdir/${outputname}x
10391*132f818dSEnji Cooper	  func_append generated " $gentop"
10392*132f818dSEnji Cooper
10393*132f818dSEnji Cooper	  func_extract_archives $gentop $dlprefiles
10394*132f818dSEnji Cooper	  func_append libobjs " $func_extract_archives_result"
10395*132f818dSEnji Cooper	  test "X$libobjs" = "X " && libobjs=
10396*132f818dSEnji Cooper	fi
10397*132f818dSEnji Cooper
10398*132f818dSEnji Cooper	save_ifs=$IFS; IFS='~'
10399*132f818dSEnji Cooper	for cmd in $cmds; do
10400*132f818dSEnji Cooper	  IFS=$sp$nl
10401*132f818dSEnji Cooper	  eval cmd=\"$cmd\"
10402*132f818dSEnji Cooper	  IFS=$save_ifs
10403*132f818dSEnji Cooper	  $opt_quiet || {
10404*132f818dSEnji Cooper	    func_quote_arg expand,pretty "$cmd"
10405*132f818dSEnji Cooper	    eval "func_echo $func_quote_arg_result"
10406*132f818dSEnji Cooper	  }
10407*132f818dSEnji Cooper	  $opt_dry_run || eval "$cmd" || {
10408*132f818dSEnji Cooper	    lt_exit=$?
10409*132f818dSEnji Cooper
10410*132f818dSEnji Cooper	    # Restore the uninstalled library and exit
10411*132f818dSEnji Cooper	    if test relink = "$opt_mode"; then
10412*132f818dSEnji Cooper	      ( cd "$output_objdir" && \
10413*132f818dSEnji Cooper	        $RM "${realname}T" && \
10414*132f818dSEnji Cooper		$MV "${realname}U" "$realname" )
10415*132f818dSEnji Cooper	    fi
10416*132f818dSEnji Cooper
10417*132f818dSEnji Cooper	    exit $lt_exit
10418*132f818dSEnji Cooper	  }
10419*132f818dSEnji Cooper	done
10420*132f818dSEnji Cooper	IFS=$save_ifs
10421*132f818dSEnji Cooper
10422*132f818dSEnji Cooper	# Restore the uninstalled library and exit
10423*132f818dSEnji Cooper	if test relink = "$opt_mode"; then
10424*132f818dSEnji Cooper	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
10425*132f818dSEnji Cooper
10426*132f818dSEnji Cooper	  if test -n "$convenience"; then
10427*132f818dSEnji Cooper	    if test -z "$whole_archive_flag_spec"; then
10428*132f818dSEnji Cooper	      func_show_eval '${RM}r "$gentop"'
10429*132f818dSEnji Cooper	    fi
10430*132f818dSEnji Cooper	  fi
10431*132f818dSEnji Cooper
10432*132f818dSEnji Cooper	  exit $EXIT_SUCCESS
10433*132f818dSEnji Cooper	fi
10434*132f818dSEnji Cooper
10435*132f818dSEnji Cooper	# Create links to the real library.
10436*132f818dSEnji Cooper	for linkname in $linknames; do
10437*132f818dSEnji Cooper	  if test "$realname" != "$linkname"; then
10438*132f818dSEnji Cooper	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
10439*132f818dSEnji Cooper	  fi
10440*132f818dSEnji Cooper	done
10441*132f818dSEnji Cooper
10442*132f818dSEnji Cooper	# If -module or -export-dynamic was specified, set the dlname.
10443*132f818dSEnji Cooper	if test yes = "$module" || test yes = "$export_dynamic"; then
10444*132f818dSEnji Cooper	  # On all known operating systems, these are identical.
10445*132f818dSEnji Cooper	  dlname=$soname
10446*132f818dSEnji Cooper	fi
10447*132f818dSEnji Cooper      fi
10448*132f818dSEnji Cooper      ;;
10449*132f818dSEnji Cooper
10450*132f818dSEnji Cooper    obj)
10451*132f818dSEnji Cooper      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
10452*132f818dSEnji Cooper	func_warning "'-dlopen' is ignored for objects"
10453*132f818dSEnji Cooper      fi
10454*132f818dSEnji Cooper
10455*132f818dSEnji Cooper      case " $deplibs" in
10456*132f818dSEnji Cooper      *\ -l* | *\ -L*)
10457*132f818dSEnji Cooper	func_warning "'-l' and '-L' are ignored for objects" ;;
10458*132f818dSEnji Cooper      esac
10459*132f818dSEnji Cooper
10460*132f818dSEnji Cooper      test -n "$rpath" && \
10461*132f818dSEnji Cooper	func_warning "'-rpath' is ignored for objects"
10462*132f818dSEnji Cooper
10463*132f818dSEnji Cooper      test -n "$xrpath" && \
10464*132f818dSEnji Cooper	func_warning "'-R' is ignored for objects"
10465*132f818dSEnji Cooper
10466*132f818dSEnji Cooper      test -n "$vinfo" && \
10467*132f818dSEnji Cooper	func_warning "'-version-info' is ignored for objects"
10468*132f818dSEnji Cooper
10469*132f818dSEnji Cooper      test -n "$release" && \
10470*132f818dSEnji Cooper	func_warning "'-release' is ignored for objects"
10471*132f818dSEnji Cooper
10472*132f818dSEnji Cooper      case $output in
10473*132f818dSEnji Cooper      *.lo)
10474*132f818dSEnji Cooper	test -n "$objs$old_deplibs" && \
10475*132f818dSEnji Cooper	  func_fatal_error "cannot build library object '$output' from non-libtool objects"
10476*132f818dSEnji Cooper
10477*132f818dSEnji Cooper	libobj=$output
10478*132f818dSEnji Cooper	func_lo2o "$libobj"
10479*132f818dSEnji Cooper	obj=$func_lo2o_result
10480*132f818dSEnji Cooper	;;
10481*132f818dSEnji Cooper      *)
10482*132f818dSEnji Cooper	libobj=
10483*132f818dSEnji Cooper	obj=$output
10484*132f818dSEnji Cooper	;;
10485*132f818dSEnji Cooper      esac
10486*132f818dSEnji Cooper
10487*132f818dSEnji Cooper      # Delete the old objects.
10488*132f818dSEnji Cooper      $opt_dry_run || $RM $obj $libobj
10489*132f818dSEnji Cooper
10490*132f818dSEnji Cooper      # Objects from convenience libraries.  This assumes
10491*132f818dSEnji Cooper      # single-version convenience libraries.  Whenever we create
10492*132f818dSEnji Cooper      # different ones for PIC/non-PIC, this we'll have to duplicate
10493*132f818dSEnji Cooper      # the extraction.
10494*132f818dSEnji Cooper      reload_conv_objs=
10495*132f818dSEnji Cooper      gentop=
10496*132f818dSEnji Cooper      # if reload_cmds runs $LD directly, get rid of -Wl from
10497*132f818dSEnji Cooper      # whole_archive_flag_spec and hope we can get by with turning comma
10498*132f818dSEnji Cooper      # into space.
10499*132f818dSEnji Cooper      case $reload_cmds in
10500*132f818dSEnji Cooper        *\$LD[\ \$]*) wl= ;;
10501*132f818dSEnji Cooper      esac
10502*132f818dSEnji Cooper      if test -n "$convenience"; then
10503*132f818dSEnji Cooper	if test -n "$whole_archive_flag_spec"; then
10504*132f818dSEnji Cooper	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
10505*132f818dSEnji Cooper	  test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
10506*132f818dSEnji Cooper	  reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
10507*132f818dSEnji Cooper	else
10508*132f818dSEnji Cooper	  gentop=$output_objdir/${obj}x
10509*132f818dSEnji Cooper	  func_append generated " $gentop"
10510*132f818dSEnji Cooper
10511*132f818dSEnji Cooper	  func_extract_archives $gentop $convenience
10512*132f818dSEnji Cooper	  reload_conv_objs="$reload_objs $func_extract_archives_result"
10513*132f818dSEnji Cooper	fi
10514*132f818dSEnji Cooper      fi
10515*132f818dSEnji Cooper
10516*132f818dSEnji Cooper      # If we're not building shared, we need to use non_pic_objs
10517*132f818dSEnji Cooper      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
10518*132f818dSEnji Cooper
10519*132f818dSEnji Cooper      # Create the old-style object.
10520*132f818dSEnji Cooper      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
10521*132f818dSEnji Cooper
10522*132f818dSEnji Cooper      output=$obj
10523*132f818dSEnji Cooper      func_execute_cmds "$reload_cmds" 'exit $?'
10524*132f818dSEnji Cooper
10525*132f818dSEnji Cooper      # Exit if we aren't doing a library object file.
10526*132f818dSEnji Cooper      if test -z "$libobj"; then
10527*132f818dSEnji Cooper	if test -n "$gentop"; then
10528*132f818dSEnji Cooper	  func_show_eval '${RM}r "$gentop"'
10529*132f818dSEnji Cooper	fi
10530*132f818dSEnji Cooper
10531*132f818dSEnji Cooper	exit $EXIT_SUCCESS
10532*132f818dSEnji Cooper      fi
10533*132f818dSEnji Cooper
10534*132f818dSEnji Cooper      test yes = "$build_libtool_libs" || {
10535*132f818dSEnji Cooper	if test -n "$gentop"; then
10536*132f818dSEnji Cooper	  func_show_eval '${RM}r "$gentop"'
10537*132f818dSEnji Cooper	fi
10538*132f818dSEnji Cooper
10539*132f818dSEnji Cooper	# Create an invalid libtool object if no PIC, so that we don't
10540*132f818dSEnji Cooper	# accidentally link it into a program.
10541*132f818dSEnji Cooper	# $show "echo timestamp > $libobj"
10542*132f818dSEnji Cooper	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
10543*132f818dSEnji Cooper	exit $EXIT_SUCCESS
10544*132f818dSEnji Cooper      }
10545*132f818dSEnji Cooper
10546*132f818dSEnji Cooper      if test -n "$pic_flag" || test default != "$pic_mode"; then
10547*132f818dSEnji Cooper	# Only do commands if we really have different PIC objects.
10548*132f818dSEnji Cooper	reload_objs="$libobjs $reload_conv_objs"
10549*132f818dSEnji Cooper	output=$libobj
10550*132f818dSEnji Cooper	func_execute_cmds "$reload_cmds" 'exit $?'
10551*132f818dSEnji Cooper      fi
10552*132f818dSEnji Cooper
10553*132f818dSEnji Cooper      if test -n "$gentop"; then
10554*132f818dSEnji Cooper	func_show_eval '${RM}r "$gentop"'
10555*132f818dSEnji Cooper      fi
10556*132f818dSEnji Cooper
10557*132f818dSEnji Cooper      exit $EXIT_SUCCESS
10558*132f818dSEnji Cooper      ;;
10559*132f818dSEnji Cooper
10560*132f818dSEnji Cooper    prog)
10561*132f818dSEnji Cooper      case $host in
10562*132f818dSEnji Cooper	*cygwin*) func_stripname '' '.exe' "$output"
10563*132f818dSEnji Cooper	          output=$func_stripname_result.exe;;
10564*132f818dSEnji Cooper      esac
10565*132f818dSEnji Cooper      test -n "$vinfo" && \
10566*132f818dSEnji Cooper	func_warning "'-version-info' is ignored for programs"
10567*132f818dSEnji Cooper
10568*132f818dSEnji Cooper      test -n "$release" && \
10569*132f818dSEnji Cooper	func_warning "'-release' is ignored for programs"
10570*132f818dSEnji Cooper
10571*132f818dSEnji Cooper      $preload \
10572*132f818dSEnji Cooper	&& test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
10573*132f818dSEnji Cooper	&& func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
10574*132f818dSEnji Cooper
10575*132f818dSEnji Cooper      case $host in
10576*132f818dSEnji Cooper      *-*-rhapsody* | *-*-darwin1.[012])
10577*132f818dSEnji Cooper	# On Rhapsody replace the C library is the System framework
10578*132f818dSEnji Cooper	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
10579*132f818dSEnji Cooper	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
10580*132f818dSEnji Cooper	;;
10581*132f818dSEnji Cooper      esac
10582*132f818dSEnji Cooper
10583*132f818dSEnji Cooper      case $host in
10584*132f818dSEnji Cooper      *-*-darwin*)
10585*132f818dSEnji Cooper	# Don't allow lazy linking, it breaks C++ global constructors
10586*132f818dSEnji Cooper	# But is supposedly fixed on 10.4 or later (yay!).
10587*132f818dSEnji Cooper	if test CXX = "$tagname"; then
10588*132f818dSEnji Cooper	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
10589*132f818dSEnji Cooper	    10.[0123])
10590*132f818dSEnji Cooper	      func_append compile_command " $wl-bind_at_load"
10591*132f818dSEnji Cooper	      func_append finalize_command " $wl-bind_at_load"
10592*132f818dSEnji Cooper	    ;;
10593*132f818dSEnji Cooper	  esac
10594*132f818dSEnji Cooper	fi
10595*132f818dSEnji Cooper	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
10596*132f818dSEnji Cooper	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10597*132f818dSEnji Cooper	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10598*132f818dSEnji Cooper	;;
10599*132f818dSEnji Cooper      esac
10600*132f818dSEnji Cooper
10601*132f818dSEnji Cooper
10602*132f818dSEnji Cooper      # move library search paths that coincide with paths to not yet
10603*132f818dSEnji Cooper      # installed libraries to the beginning of the library search list
10604*132f818dSEnji Cooper      new_libs=
10605*132f818dSEnji Cooper      for path in $notinst_path; do
10606*132f818dSEnji Cooper	case " $new_libs " in
10607*132f818dSEnji Cooper	*" -L$path/$objdir "*) ;;
10608*132f818dSEnji Cooper	*)
10609*132f818dSEnji Cooper	  case " $compile_deplibs " in
10610*132f818dSEnji Cooper	  *" -L$path/$objdir "*)
10611*132f818dSEnji Cooper	    func_append new_libs " -L$path/$objdir" ;;
10612*132f818dSEnji Cooper	  esac
10613*132f818dSEnji Cooper	  ;;
10614*132f818dSEnji Cooper	esac
10615*132f818dSEnji Cooper      done
10616*132f818dSEnji Cooper      for deplib in $compile_deplibs; do
10617*132f818dSEnji Cooper	case $deplib in
10618*132f818dSEnji Cooper	-L*)
10619*132f818dSEnji Cooper	  case " $new_libs " in
10620*132f818dSEnji Cooper	  *" $deplib "*) ;;
10621*132f818dSEnji Cooper	  *) func_append new_libs " $deplib" ;;
10622*132f818dSEnji Cooper	  esac
10623*132f818dSEnji Cooper	  ;;
10624*132f818dSEnji Cooper	*) func_append new_libs " $deplib" ;;
10625*132f818dSEnji Cooper	esac
10626*132f818dSEnji Cooper      done
10627*132f818dSEnji Cooper      compile_deplibs=$new_libs
10628*132f818dSEnji Cooper
10629*132f818dSEnji Cooper
10630*132f818dSEnji Cooper      func_append compile_command " $compile_deplibs"
10631*132f818dSEnji Cooper      func_append finalize_command " $finalize_deplibs"
10632*132f818dSEnji Cooper
10633*132f818dSEnji Cooper      if test -n "$rpath$xrpath"; then
10634*132f818dSEnji Cooper	# If the user specified any rpath flags, then add them.
10635*132f818dSEnji Cooper	for libdir in $rpath $xrpath; do
10636*132f818dSEnji Cooper	  # This is the magic to use -rpath.
10637*132f818dSEnji Cooper	  case "$finalize_rpath " in
10638*132f818dSEnji Cooper	  *" $libdir "*) ;;
10639*132f818dSEnji Cooper	  *) func_append finalize_rpath " $libdir" ;;
10640*132f818dSEnji Cooper	  esac
10641*132f818dSEnji Cooper	done
10642*132f818dSEnji Cooper      fi
10643*132f818dSEnji Cooper
10644*132f818dSEnji Cooper      # Now hardcode the library paths
10645*132f818dSEnji Cooper      rpath=
10646*132f818dSEnji Cooper      hardcode_libdirs=
10647*132f818dSEnji Cooper      for libdir in $compile_rpath $finalize_rpath; do
10648*132f818dSEnji Cooper	if test -n "$hardcode_libdir_flag_spec"; then
10649*132f818dSEnji Cooper	  if test -n "$hardcode_libdir_separator"; then
10650*132f818dSEnji Cooper	    if test -z "$hardcode_libdirs"; then
10651*132f818dSEnji Cooper	      hardcode_libdirs=$libdir
10652*132f818dSEnji Cooper	    else
10653*132f818dSEnji Cooper	      # Just accumulate the unique libdirs.
10654*132f818dSEnji Cooper	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10655*132f818dSEnji Cooper	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10656*132f818dSEnji Cooper		;;
10657*132f818dSEnji Cooper	      *)
10658*132f818dSEnji Cooper		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10659*132f818dSEnji Cooper		;;
10660*132f818dSEnji Cooper	      esac
10661*132f818dSEnji Cooper	    fi
10662*132f818dSEnji Cooper	  else
10663*132f818dSEnji Cooper	    eval flag=\"$hardcode_libdir_flag_spec\"
10664*132f818dSEnji Cooper	    func_append rpath " $flag"
10665*132f818dSEnji Cooper	  fi
10666*132f818dSEnji Cooper	elif test -n "$runpath_var"; then
10667*132f818dSEnji Cooper	  case "$perm_rpath " in
10668*132f818dSEnji Cooper	  *" $libdir "*) ;;
10669*132f818dSEnji Cooper	  *) func_append perm_rpath " $libdir" ;;
10670*132f818dSEnji Cooper	  esac
10671*132f818dSEnji Cooper	fi
10672*132f818dSEnji Cooper	case $host in
10673*132f818dSEnji Cooper	*-*-cygwin* | *-*-mingw* | *-*-windows* | *-*-pw32* | *-*-os2* | *-cegcc*)
10674*132f818dSEnji Cooper	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
10675*132f818dSEnji Cooper	  case :$dllsearchpath: in
10676*132f818dSEnji Cooper	  *":$libdir:"*) ;;
10677*132f818dSEnji Cooper	  ::) dllsearchpath=$libdir;;
10678*132f818dSEnji Cooper	  *) func_append dllsearchpath ":$libdir";;
10679*132f818dSEnji Cooper	  esac
10680*132f818dSEnji Cooper	  case :$dllsearchpath: in
10681*132f818dSEnji Cooper	  *":$testbindir:"*) ;;
10682*132f818dSEnji Cooper	  ::) dllsearchpath=$testbindir;;
10683*132f818dSEnji Cooper	  *) func_append dllsearchpath ":$testbindir";;
10684*132f818dSEnji Cooper	  esac
10685*132f818dSEnji Cooper	  ;;
10686*132f818dSEnji Cooper	esac
10687*132f818dSEnji Cooper      done
10688*132f818dSEnji Cooper      # Substitute the hardcoded libdirs into the rpath.
10689*132f818dSEnji Cooper      if test -n "$hardcode_libdir_separator" &&
10690*132f818dSEnji Cooper	 test -n "$hardcode_libdirs"; then
10691*132f818dSEnji Cooper	libdir=$hardcode_libdirs
10692*132f818dSEnji Cooper	eval rpath=\" $hardcode_libdir_flag_spec\"
10693*132f818dSEnji Cooper      fi
10694*132f818dSEnji Cooper      compile_rpath=$rpath
10695*132f818dSEnji Cooper
10696*132f818dSEnji Cooper      rpath=
10697*132f818dSEnji Cooper      hardcode_libdirs=
10698*132f818dSEnji Cooper      for libdir in $finalize_rpath; do
10699*132f818dSEnji Cooper	if test -n "$hardcode_libdir_flag_spec"; then
10700*132f818dSEnji Cooper	  if test -n "$hardcode_libdir_separator"; then
10701*132f818dSEnji Cooper	    if test -z "$hardcode_libdirs"; then
10702*132f818dSEnji Cooper	      hardcode_libdirs=$libdir
10703*132f818dSEnji Cooper	    else
10704*132f818dSEnji Cooper	      # Just accumulate the unique libdirs.
10705*132f818dSEnji Cooper	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10706*132f818dSEnji Cooper	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10707*132f818dSEnji Cooper		;;
10708*132f818dSEnji Cooper	      *)
10709*132f818dSEnji Cooper		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10710*132f818dSEnji Cooper		;;
10711*132f818dSEnji Cooper	      esac
10712*132f818dSEnji Cooper	    fi
10713*132f818dSEnji Cooper	  else
10714*132f818dSEnji Cooper	    eval flag=\"$hardcode_libdir_flag_spec\"
10715*132f818dSEnji Cooper	    func_append rpath " $flag"
10716*132f818dSEnji Cooper	  fi
10717*132f818dSEnji Cooper	elif test -n "$runpath_var"; then
10718*132f818dSEnji Cooper	  case "$finalize_perm_rpath " in
10719*132f818dSEnji Cooper	  *" $libdir "*) ;;
10720*132f818dSEnji Cooper	  *) func_append finalize_perm_rpath " $libdir" ;;
10721*132f818dSEnji Cooper	  esac
10722*132f818dSEnji Cooper	fi
10723*132f818dSEnji Cooper      done
10724*132f818dSEnji Cooper      # Substitute the hardcoded libdirs into the rpath.
10725*132f818dSEnji Cooper      if test -n "$hardcode_libdir_separator" &&
10726*132f818dSEnji Cooper	 test -n "$hardcode_libdirs"; then
10727*132f818dSEnji Cooper	libdir=$hardcode_libdirs
10728*132f818dSEnji Cooper	eval rpath=\" $hardcode_libdir_flag_spec\"
10729*132f818dSEnji Cooper      fi
10730*132f818dSEnji Cooper      finalize_rpath=$rpath
10731*132f818dSEnji Cooper
10732*132f818dSEnji Cooper      if test -n "$libobjs" && test yes = "$build_old_libs"; then
10733*132f818dSEnji Cooper	# Transform all the library objects into standard objects.
10734*132f818dSEnji Cooper	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10735*132f818dSEnji Cooper	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10736*132f818dSEnji Cooper      fi
10737*132f818dSEnji Cooper
10738*132f818dSEnji Cooper      func_generate_dlsyms "$outputname" "@PROGRAM@" false
10739*132f818dSEnji Cooper
10740*132f818dSEnji Cooper      # template prelinking step
10741*132f818dSEnji Cooper      if test -n "$prelink_cmds"; then
10742*132f818dSEnji Cooper	func_execute_cmds "$prelink_cmds" 'exit $?'
10743*132f818dSEnji Cooper      fi
10744*132f818dSEnji Cooper
10745*132f818dSEnji Cooper      wrappers_required=:
10746*132f818dSEnji Cooper      case $host in
10747*132f818dSEnji Cooper      *cegcc* | *mingw32ce*)
10748*132f818dSEnji Cooper        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
10749*132f818dSEnji Cooper        wrappers_required=false
10750*132f818dSEnji Cooper        ;;
10751*132f818dSEnji Cooper      *cygwin* | *mingw* | *windows* )
10752*132f818dSEnji Cooper        test yes = "$build_libtool_libs" || wrappers_required=false
10753*132f818dSEnji Cooper        ;;
10754*132f818dSEnji Cooper      *)
10755*132f818dSEnji Cooper        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
10756*132f818dSEnji Cooper          wrappers_required=false
10757*132f818dSEnji Cooper        fi
10758*132f818dSEnji Cooper        ;;
10759*132f818dSEnji Cooper      esac
10760*132f818dSEnji Cooper      $wrappers_required || {
10761*132f818dSEnji Cooper	# Replace the output file specification.
10762*132f818dSEnji Cooper	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10763*132f818dSEnji Cooper	link_command=$compile_command$compile_rpath
10764*132f818dSEnji Cooper
10765*132f818dSEnji Cooper	# We have no uninstalled library dependencies, so finalize right now.
10766*132f818dSEnji Cooper	exit_status=0
10767*132f818dSEnji Cooper	func_show_eval "$link_command" 'exit_status=$?'
10768*132f818dSEnji Cooper
10769*132f818dSEnji Cooper	if test -n "$postlink_cmds"; then
10770*132f818dSEnji Cooper	  func_to_tool_file "$output"
10771*132f818dSEnji Cooper	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10772*132f818dSEnji Cooper	  func_execute_cmds "$postlink_cmds" 'exit $?'
10773*132f818dSEnji Cooper	fi
10774*132f818dSEnji Cooper
10775*132f818dSEnji Cooper	# Delete the generated files.
10776*132f818dSEnji Cooper	if test -f "$output_objdir/${outputname}S.$objext"; then
10777*132f818dSEnji Cooper	  func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
10778*132f818dSEnji Cooper	fi
10779*132f818dSEnji Cooper
10780*132f818dSEnji Cooper	exit $exit_status
10781*132f818dSEnji Cooper      }
10782*132f818dSEnji Cooper
10783*132f818dSEnji Cooper      if test -n "$compile_shlibpath$finalize_shlibpath"; then
10784*132f818dSEnji Cooper	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
10785*132f818dSEnji Cooper      fi
10786*132f818dSEnji Cooper      if test -n "$finalize_shlibpath"; then
10787*132f818dSEnji Cooper	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
10788*132f818dSEnji Cooper      fi
10789*132f818dSEnji Cooper
10790*132f818dSEnji Cooper      compile_var=
10791*132f818dSEnji Cooper      finalize_var=
10792*132f818dSEnji Cooper      if test -n "$runpath_var"; then
10793*132f818dSEnji Cooper	if test -n "$perm_rpath"; then
10794*132f818dSEnji Cooper	  # We should set the runpath_var.
10795*132f818dSEnji Cooper	  rpath=
10796*132f818dSEnji Cooper	  for dir in $perm_rpath; do
10797*132f818dSEnji Cooper	    func_append rpath "$dir:"
10798*132f818dSEnji Cooper	  done
10799*132f818dSEnji Cooper	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
10800*132f818dSEnji Cooper	fi
10801*132f818dSEnji Cooper	if test -n "$finalize_perm_rpath"; then
10802*132f818dSEnji Cooper	  # We should set the runpath_var.
10803*132f818dSEnji Cooper	  rpath=
10804*132f818dSEnji Cooper	  for dir in $finalize_perm_rpath; do
10805*132f818dSEnji Cooper	    func_append rpath "$dir:"
10806*132f818dSEnji Cooper	  done
10807*132f818dSEnji Cooper	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
10808*132f818dSEnji Cooper	fi
10809*132f818dSEnji Cooper      fi
10810*132f818dSEnji Cooper
10811*132f818dSEnji Cooper      if test yes = "$no_install"; then
10812*132f818dSEnji Cooper	# We don't need to create a wrapper script.
10813*132f818dSEnji Cooper	link_command=$compile_var$compile_command$compile_rpath
10814*132f818dSEnji Cooper	# Replace the output file specification.
10815*132f818dSEnji Cooper	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10816*132f818dSEnji Cooper	# Delete the old output file.
10817*132f818dSEnji Cooper	$opt_dry_run || $RM $output
10818*132f818dSEnji Cooper	# Link the executable and exit
10819*132f818dSEnji Cooper	func_show_eval "$link_command" 'exit $?'
10820*132f818dSEnji Cooper
10821*132f818dSEnji Cooper	if test -n "$postlink_cmds"; then
10822*132f818dSEnji Cooper	  func_to_tool_file "$output"
10823*132f818dSEnji Cooper	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10824*132f818dSEnji Cooper	  func_execute_cmds "$postlink_cmds" 'exit $?'
10825*132f818dSEnji Cooper	fi
10826*132f818dSEnji Cooper
10827*132f818dSEnji Cooper	exit $EXIT_SUCCESS
10828*132f818dSEnji Cooper      fi
10829*132f818dSEnji Cooper
10830*132f818dSEnji Cooper      case $hardcode_action,$fast_install in
10831*132f818dSEnji Cooper        relink,*)
10832*132f818dSEnji Cooper	  # Fast installation is not supported
10833*132f818dSEnji Cooper	  link_command=$compile_var$compile_command$compile_rpath
10834*132f818dSEnji Cooper	  relink_command=$finalize_var$finalize_command$finalize_rpath
10835*132f818dSEnji Cooper
10836*132f818dSEnji Cooper	  func_warning "this platform does not like uninstalled shared libraries"
10837*132f818dSEnji Cooper	  func_warning "'$output' will be relinked during installation"
10838*132f818dSEnji Cooper	  ;;
10839*132f818dSEnji Cooper        *,yes)
10840*132f818dSEnji Cooper	  link_command=$finalize_var$compile_command$finalize_rpath
10841*132f818dSEnji Cooper	  relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
10842*132f818dSEnji Cooper          ;;
10843*132f818dSEnji Cooper	*,no)
10844*132f818dSEnji Cooper	  link_command=$compile_var$compile_command$compile_rpath
10845*132f818dSEnji Cooper	  relink_command=$finalize_var$finalize_command$finalize_rpath
10846*132f818dSEnji Cooper          ;;
10847*132f818dSEnji Cooper	*,needless)
10848*132f818dSEnji Cooper	  link_command=$finalize_var$compile_command$finalize_rpath
10849*132f818dSEnji Cooper	  relink_command=
10850*132f818dSEnji Cooper          ;;
10851*132f818dSEnji Cooper      esac
10852*132f818dSEnji Cooper
10853*132f818dSEnji Cooper      # Replace the output file specification.
10854*132f818dSEnji Cooper      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
10855*132f818dSEnji Cooper
10856*132f818dSEnji Cooper      # Delete the old output files.
10857*132f818dSEnji Cooper      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
10858*132f818dSEnji Cooper
10859*132f818dSEnji Cooper      func_show_eval "$link_command" 'exit $?'
10860*132f818dSEnji Cooper
10861*132f818dSEnji Cooper      if test -n "$postlink_cmds"; then
10862*132f818dSEnji Cooper	func_to_tool_file "$output_objdir/$outputname"
10863*132f818dSEnji Cooper	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'`
10864*132f818dSEnji Cooper	func_execute_cmds "$postlink_cmds" 'exit $?'
10865*132f818dSEnji Cooper      fi
10866*132f818dSEnji Cooper
10867*132f818dSEnji Cooper      # Now create the wrapper script.
10868*132f818dSEnji Cooper      func_verbose "creating $output"
10869*132f818dSEnji Cooper
10870*132f818dSEnji Cooper      # Quote the relink command for shipping.
10871*132f818dSEnji Cooper      if test -n "$relink_command"; then
10872*132f818dSEnji Cooper	# Preserve any variables that may affect compiler behavior
10873*132f818dSEnji Cooper	for var in $variables_saved_for_relink; do
10874*132f818dSEnji Cooper	  if eval test -z \"\${$var+set}\"; then
10875*132f818dSEnji Cooper	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10876*132f818dSEnji Cooper	  elif eval var_value=\$$var; test -z "$var_value"; then
10877*132f818dSEnji Cooper	    relink_command="$var=; export $var; $relink_command"
10878*132f818dSEnji Cooper	  else
10879*132f818dSEnji Cooper	    func_quote_arg pretty "$var_value"
10880*132f818dSEnji Cooper	    relink_command="$var=$func_quote_arg_result; export $var; $relink_command"
10881*132f818dSEnji Cooper	  fi
10882*132f818dSEnji Cooper	done
10883*132f818dSEnji Cooper	func_quote eval cd "`pwd`"
10884*132f818dSEnji Cooper	func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)"
10885*132f818dSEnji Cooper	relink_command=$func_quote_arg_unquoted_result
10886*132f818dSEnji Cooper      fi
10887*132f818dSEnji Cooper
10888*132f818dSEnji Cooper      # Only actually do things if not in dry run mode.
10889*132f818dSEnji Cooper      $opt_dry_run || {
10890*132f818dSEnji Cooper	# win32 will think the script is a binary if it has
10891*132f818dSEnji Cooper	# a .exe suffix, so we strip it off here.
10892*132f818dSEnji Cooper	case $output in
10893*132f818dSEnji Cooper	  *.exe) func_stripname '' '.exe' "$output"
10894*132f818dSEnji Cooper	         output=$func_stripname_result ;;
10895*132f818dSEnji Cooper	esac
10896*132f818dSEnji Cooper	# test for cygwin because mv fails w/o .exe extensions
10897*132f818dSEnji Cooper	case $host in
10898*132f818dSEnji Cooper	  *cygwin*)
10899*132f818dSEnji Cooper	    exeext=.exe
10900*132f818dSEnji Cooper	    func_stripname '' '.exe' "$outputname"
10901*132f818dSEnji Cooper	    outputname=$func_stripname_result ;;
10902*132f818dSEnji Cooper	  *) exeext= ;;
10903*132f818dSEnji Cooper	esac
10904*132f818dSEnji Cooper	case $host in
10905*132f818dSEnji Cooper	  *cygwin* | *mingw* | windows* )
10906*132f818dSEnji Cooper	    func_dirname_and_basename "$output" "" "."
10907*132f818dSEnji Cooper	    output_name=$func_basename_result
10908*132f818dSEnji Cooper	    output_path=$func_dirname_result
10909*132f818dSEnji Cooper	    cwrappersource=$output_path/$objdir/lt-$output_name.c
10910*132f818dSEnji Cooper	    cwrapper=$output_path/$output_name.exe
10911*132f818dSEnji Cooper	    $RM $cwrappersource $cwrapper
10912*132f818dSEnji Cooper	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
10913*132f818dSEnji Cooper
10914*132f818dSEnji Cooper	    func_emit_cwrapperexe_src > $cwrappersource
10915*132f818dSEnji Cooper
10916*132f818dSEnji Cooper	    # The wrapper executable is built using the $host compiler,
10917*132f818dSEnji Cooper	    # because it contains $host paths and files. If cross-
10918*132f818dSEnji Cooper	    # compiling, it, like the target executable, must be
10919*132f818dSEnji Cooper	    # executed on the $host or under an emulation environment.
10920*132f818dSEnji Cooper	    $opt_dry_run || {
10921*132f818dSEnji Cooper	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
10922*132f818dSEnji Cooper	      $STRIP $cwrapper
10923*132f818dSEnji Cooper	    }
10924*132f818dSEnji Cooper
10925*132f818dSEnji Cooper	    # Now, create the wrapper script for func_source use:
10926*132f818dSEnji Cooper	    func_ltwrapper_scriptname $cwrapper
10927*132f818dSEnji Cooper	    $RM $func_ltwrapper_scriptname_result
10928*132f818dSEnji Cooper	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
10929*132f818dSEnji Cooper	    $opt_dry_run || {
10930*132f818dSEnji Cooper	      # note: this script will not be executed, so do not chmod.
10931*132f818dSEnji Cooper	      if test "x$build" = "x$host"; then
10932*132f818dSEnji Cooper		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
10933*132f818dSEnji Cooper	      else
10934*132f818dSEnji Cooper		func_emit_wrapper no > $func_ltwrapper_scriptname_result
10935*132f818dSEnji Cooper	      fi
10936*132f818dSEnji Cooper	    }
10937*132f818dSEnji Cooper	  ;;
10938*132f818dSEnji Cooper	  * )
10939*132f818dSEnji Cooper	    $RM $output
10940*132f818dSEnji Cooper	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
10941*132f818dSEnji Cooper
10942*132f818dSEnji Cooper	    func_emit_wrapper no > $output
10943*132f818dSEnji Cooper	    chmod +x $output
10944*132f818dSEnji Cooper	  ;;
10945*132f818dSEnji Cooper	esac
10946*132f818dSEnji Cooper      }
10947*132f818dSEnji Cooper      exit $EXIT_SUCCESS
10948*132f818dSEnji Cooper      ;;
10949*132f818dSEnji Cooper    esac
10950*132f818dSEnji Cooper
10951*132f818dSEnji Cooper    # See if we need to build an old-fashioned archive.
10952*132f818dSEnji Cooper    for oldlib in $oldlibs; do
10953*132f818dSEnji Cooper
10954*132f818dSEnji Cooper      case $build_libtool_libs in
10955*132f818dSEnji Cooper        convenience)
10956*132f818dSEnji Cooper	  oldobjs="$libobjs_save $symfileobj"
10957*132f818dSEnji Cooper	  addlibs=$convenience
10958*132f818dSEnji Cooper	  build_libtool_libs=no
10959*132f818dSEnji Cooper	  ;;
10960*132f818dSEnji Cooper	module)
10961*132f818dSEnji Cooper	  oldobjs=$libobjs_save
10962*132f818dSEnji Cooper	  addlibs=$old_convenience
10963*132f818dSEnji Cooper	  build_libtool_libs=no
10964*132f818dSEnji Cooper          ;;
10965*132f818dSEnji Cooper	*)
10966*132f818dSEnji Cooper	  oldobjs="$old_deplibs $non_pic_objects"
10967*132f818dSEnji Cooper	  $preload && test -f "$symfileobj" \
10968*132f818dSEnji Cooper	    && func_append oldobjs " $symfileobj"
10969*132f818dSEnji Cooper	  addlibs=$old_convenience
10970*132f818dSEnji Cooper	  ;;
10971*132f818dSEnji Cooper      esac
10972*132f818dSEnji Cooper
10973*132f818dSEnji Cooper      if test -n "$addlibs"; then
10974*132f818dSEnji Cooper	gentop=$output_objdir/${outputname}x
10975*132f818dSEnji Cooper	func_append generated " $gentop"
10976*132f818dSEnji Cooper
10977*132f818dSEnji Cooper	func_extract_archives $gentop $addlibs
10978*132f818dSEnji Cooper	func_append oldobjs " $func_extract_archives_result"
10979*132f818dSEnji Cooper      fi
10980*132f818dSEnji Cooper
10981*132f818dSEnji Cooper      # Do each command in the archive commands.
10982*132f818dSEnji Cooper      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
10983*132f818dSEnji Cooper	cmds=$old_archive_from_new_cmds
10984*132f818dSEnji Cooper      else
10985*132f818dSEnji Cooper
10986*132f818dSEnji Cooper	# Add any objects from preloaded convenience libraries
10987*132f818dSEnji Cooper	if test -n "$dlprefiles"; then
10988*132f818dSEnji Cooper	  gentop=$output_objdir/${outputname}x
10989*132f818dSEnji Cooper	  func_append generated " $gentop"
10990*132f818dSEnji Cooper
10991*132f818dSEnji Cooper	  func_extract_archives $gentop $dlprefiles
10992*132f818dSEnji Cooper	  func_append oldobjs " $func_extract_archives_result"
10993*132f818dSEnji Cooper	fi
10994*132f818dSEnji Cooper
10995*132f818dSEnji Cooper	# POSIX demands no paths to be encoded in archives.  We have
10996*132f818dSEnji Cooper	# to avoid creating archives with duplicate basenames if we
10997*132f818dSEnji Cooper	# might have to extract them afterwards, e.g., when creating a
10998*132f818dSEnji Cooper	# static archive out of a convenience library, or when linking
10999*132f818dSEnji Cooper	# the entirety of a libtool archive into another (currently
11000*132f818dSEnji Cooper	# not supported by libtool).
11001*132f818dSEnji Cooper	if (for obj in $oldobjs
11002*132f818dSEnji Cooper	    do
11003*132f818dSEnji Cooper	      func_basename "$obj"
11004*132f818dSEnji Cooper	      $ECHO "$func_basename_result"
11005*132f818dSEnji Cooper	    done | sort | sort -uc >/dev/null 2>&1); then
11006*132f818dSEnji Cooper	  :
11007*132f818dSEnji Cooper	else
11008*132f818dSEnji Cooper	  echo "copying selected object files to avoid basename conflicts..."
11009*132f818dSEnji Cooper	  gentop=$output_objdir/${outputname}x
11010*132f818dSEnji Cooper	  func_append generated " $gentop"
11011*132f818dSEnji Cooper	  func_mkdir_p "$gentop"
11012*132f818dSEnji Cooper	  save_oldobjs=$oldobjs
11013*132f818dSEnji Cooper	  oldobjs=
11014*132f818dSEnji Cooper	  counter=1
11015*132f818dSEnji Cooper	  for obj in $save_oldobjs
11016*132f818dSEnji Cooper	  do
11017*132f818dSEnji Cooper	    func_basename "$obj"
11018*132f818dSEnji Cooper	    objbase=$func_basename_result
11019*132f818dSEnji Cooper	    case " $oldobjs " in
11020*132f818dSEnji Cooper	    " ") oldobjs=$obj ;;
11021*132f818dSEnji Cooper	    *[\ /]"$objbase "*)
11022*132f818dSEnji Cooper	      while :; do
11023*132f818dSEnji Cooper		# Make sure we don't pick an alternate name that also
11024*132f818dSEnji Cooper		# overlaps.
11025*132f818dSEnji Cooper		newobj=lt$counter-$objbase
11026*132f818dSEnji Cooper		func_arith $counter + 1
11027*132f818dSEnji Cooper		counter=$func_arith_result
11028*132f818dSEnji Cooper		case " $oldobjs " in
11029*132f818dSEnji Cooper		*[\ /]"$newobj "*) ;;
11030*132f818dSEnji Cooper		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
11031*132f818dSEnji Cooper		esac
11032*132f818dSEnji Cooper	      done
11033*132f818dSEnji Cooper	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
11034*132f818dSEnji Cooper	      func_append oldobjs " $gentop/$newobj"
11035*132f818dSEnji Cooper	      ;;
11036*132f818dSEnji Cooper	    *) func_append oldobjs " $obj" ;;
11037*132f818dSEnji Cooper	    esac
11038*132f818dSEnji Cooper	  done
11039*132f818dSEnji Cooper	fi
11040*132f818dSEnji Cooper	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
11041*132f818dSEnji Cooper	tool_oldlib=$func_to_tool_file_result
11042*132f818dSEnji Cooper	eval cmds=\"$old_archive_cmds\"
11043*132f818dSEnji Cooper
11044*132f818dSEnji Cooper	func_len " $cmds"
11045*132f818dSEnji Cooper	len=$func_len_result
11046*132f818dSEnji Cooper	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
11047*132f818dSEnji Cooper	  cmds=$old_archive_cmds
11048*132f818dSEnji Cooper	elif test -n "$archiver_list_spec"; then
11049*132f818dSEnji Cooper	  func_verbose "using command file archive linking..."
11050*132f818dSEnji Cooper	  for obj in $oldobjs
11051*132f818dSEnji Cooper	  do
11052*132f818dSEnji Cooper	    func_to_tool_file "$obj"
11053*132f818dSEnji Cooper	    $ECHO "$func_to_tool_file_result"
11054*132f818dSEnji Cooper	  done > $output_objdir/$libname.libcmd
11055*132f818dSEnji Cooper	  func_to_tool_file "$output_objdir/$libname.libcmd"
11056*132f818dSEnji Cooper	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
11057*132f818dSEnji Cooper	  cmds=$old_archive_cmds
11058*132f818dSEnji Cooper	else
11059*132f818dSEnji Cooper	  # the command line is too long to link in one step, link in parts
11060*132f818dSEnji Cooper	  func_verbose "using piecewise archive linking..."
11061*132f818dSEnji Cooper	  save_RANLIB=$RANLIB
11062*132f818dSEnji Cooper	  RANLIB=:
11063*132f818dSEnji Cooper	  objlist=
11064*132f818dSEnji Cooper	  concat_cmds=
11065*132f818dSEnji Cooper	  save_oldobjs=$oldobjs
11066*132f818dSEnji Cooper	  oldobjs=
11067*132f818dSEnji Cooper	  # Is there a better way of finding the last object in the list?
11068*132f818dSEnji Cooper	  for obj in $save_oldobjs
11069*132f818dSEnji Cooper	  do
11070*132f818dSEnji Cooper	    last_oldobj=$obj
11071*132f818dSEnji Cooper	  done
11072*132f818dSEnji Cooper	  eval test_cmds=\"$old_archive_cmds\"
11073*132f818dSEnji Cooper	  func_len " $test_cmds"
11074*132f818dSEnji Cooper	  len0=$func_len_result
11075*132f818dSEnji Cooper	  len=$len0
11076*132f818dSEnji Cooper	  for obj in $save_oldobjs
11077*132f818dSEnji Cooper	  do
11078*132f818dSEnji Cooper	    func_len " $obj"
11079*132f818dSEnji Cooper	    func_arith $len + $func_len_result
11080*132f818dSEnji Cooper	    len=$func_arith_result
11081*132f818dSEnji Cooper	    func_append objlist " $obj"
11082*132f818dSEnji Cooper	    if test "$len" -lt "$max_cmd_len"; then
11083*132f818dSEnji Cooper	      :
11084*132f818dSEnji Cooper	    else
11085*132f818dSEnji Cooper	      # the above command should be used before it gets too long
11086*132f818dSEnji Cooper	      oldobjs=$objlist
11087*132f818dSEnji Cooper	      if test "$obj" = "$last_oldobj"; then
11088*132f818dSEnji Cooper		RANLIB=$save_RANLIB
11089*132f818dSEnji Cooper	      fi
11090*132f818dSEnji Cooper	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
11091*132f818dSEnji Cooper	      eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
11092*132f818dSEnji Cooper	      objlist=
11093*132f818dSEnji Cooper	      len=$len0
11094*132f818dSEnji Cooper	    fi
11095*132f818dSEnji Cooper	  done
11096*132f818dSEnji Cooper	  RANLIB=$save_RANLIB
11097*132f818dSEnji Cooper	  oldobjs=$objlist
11098*132f818dSEnji Cooper	  if test -z "$oldobjs"; then
11099*132f818dSEnji Cooper	    eval cmds=\"\$concat_cmds\"
11100*132f818dSEnji Cooper	  else
11101*132f818dSEnji Cooper	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
11102*132f818dSEnji Cooper	  fi
11103*132f818dSEnji Cooper	fi
11104*132f818dSEnji Cooper      fi
11105*132f818dSEnji Cooper      func_execute_cmds "$cmds" 'exit $?'
11106*132f818dSEnji Cooper    done
11107*132f818dSEnji Cooper
11108*132f818dSEnji Cooper    test -n "$generated" && \
11109*132f818dSEnji Cooper      func_show_eval "${RM}r$generated"
11110*132f818dSEnji Cooper
11111*132f818dSEnji Cooper    # Now create the libtool archive.
11112*132f818dSEnji Cooper    case $output in
11113*132f818dSEnji Cooper    *.la)
11114*132f818dSEnji Cooper      old_library=
11115*132f818dSEnji Cooper      test yes = "$build_old_libs" && old_library=$libname.$libext
11116*132f818dSEnji Cooper      func_verbose "creating $output"
11117*132f818dSEnji Cooper
11118*132f818dSEnji Cooper      # Preserve any variables that may affect compiler behavior
11119*132f818dSEnji Cooper      for var in $variables_saved_for_relink; do
11120*132f818dSEnji Cooper	if eval test -z \"\${$var+set}\"; then
11121*132f818dSEnji Cooper	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
11122*132f818dSEnji Cooper	elif eval var_value=\$$var; test -z "$var_value"; then
11123*132f818dSEnji Cooper	  relink_command="$var=; export $var; $relink_command"
11124*132f818dSEnji Cooper	else
11125*132f818dSEnji Cooper	  func_quote_arg pretty,unquoted "$var_value"
11126*132f818dSEnji Cooper	  relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command"
11127*132f818dSEnji Cooper	fi
11128*132f818dSEnji Cooper      done
11129*132f818dSEnji Cooper      # Quote the link command for shipping.
11130*132f818dSEnji Cooper      func_quote eval cd "`pwd`"
11131*132f818dSEnji Cooper      relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
11132*132f818dSEnji Cooper      func_quote_arg pretty,unquoted "$relink_command"
11133*132f818dSEnji Cooper      relink_command=$func_quote_arg_unquoted_result
11134*132f818dSEnji Cooper      if test yes = "$hardcode_automatic"; then
11135*132f818dSEnji Cooper	relink_command=
11136*132f818dSEnji Cooper      fi
11137*132f818dSEnji Cooper
11138*132f818dSEnji Cooper      # Only create the output if not a dry run.
11139*132f818dSEnji Cooper      $opt_dry_run || {
11140*132f818dSEnji Cooper	for installed in no yes; do
11141*132f818dSEnji Cooper	  if test yes = "$installed"; then
11142*132f818dSEnji Cooper	    if test -z "$install_libdir"; then
11143*132f818dSEnji Cooper	      break
11144*132f818dSEnji Cooper	    fi
11145*132f818dSEnji Cooper	    output=$output_objdir/${outputname}i
11146*132f818dSEnji Cooper	    # Replace all uninstalled libtool libraries with the installed ones
11147*132f818dSEnji Cooper	    newdependency_libs=
11148*132f818dSEnji Cooper	    for deplib in $dependency_libs; do
11149*132f818dSEnji Cooper	      case $deplib in
11150*132f818dSEnji Cooper	      *.la)
11151*132f818dSEnji Cooper		func_basename "$deplib"
11152*132f818dSEnji Cooper		name=$func_basename_result
11153*132f818dSEnji Cooper		func_resolve_sysroot "$deplib"
11154*132f818dSEnji Cooper		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
11155*132f818dSEnji Cooper		test -z "$libdir" && \
11156*132f818dSEnji Cooper		  func_fatal_error "'$deplib' is not a valid libtool archive"
11157*132f818dSEnji Cooper		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
11158*132f818dSEnji Cooper		;;
11159*132f818dSEnji Cooper	      -L*)
11160*132f818dSEnji Cooper		func_stripname -L '' "$deplib"
11161*132f818dSEnji Cooper		func_replace_sysroot "$func_stripname_result"
11162*132f818dSEnji Cooper		func_append newdependency_libs " -L$func_replace_sysroot_result"
11163*132f818dSEnji Cooper		;;
11164*132f818dSEnji Cooper	      -R*)
11165*132f818dSEnji Cooper		func_stripname -R '' "$deplib"
11166*132f818dSEnji Cooper		func_replace_sysroot "$func_stripname_result"
11167*132f818dSEnji Cooper		func_append newdependency_libs " -R$func_replace_sysroot_result"
11168*132f818dSEnji Cooper		;;
11169*132f818dSEnji Cooper	      *) func_append newdependency_libs " $deplib" ;;
11170*132f818dSEnji Cooper	      esac
11171*132f818dSEnji Cooper	    done
11172*132f818dSEnji Cooper	    dependency_libs=$newdependency_libs
11173*132f818dSEnji Cooper	    newdlfiles=
11174*132f818dSEnji Cooper
11175*132f818dSEnji Cooper	    for lib in $dlfiles; do
11176*132f818dSEnji Cooper	      case $lib in
11177*132f818dSEnji Cooper	      *.la)
11178*132f818dSEnji Cooper	        func_basename "$lib"
11179*132f818dSEnji Cooper		name=$func_basename_result
11180*132f818dSEnji Cooper		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
11181*132f818dSEnji Cooper		test -z "$libdir" && \
11182*132f818dSEnji Cooper		  func_fatal_error "'$lib' is not a valid libtool archive"
11183*132f818dSEnji Cooper		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
11184*132f818dSEnji Cooper		;;
11185*132f818dSEnji Cooper	      *) func_append newdlfiles " $lib" ;;
11186*132f818dSEnji Cooper	      esac
11187*132f818dSEnji Cooper	    done
11188*132f818dSEnji Cooper	    dlfiles=$newdlfiles
11189*132f818dSEnji Cooper	    newdlprefiles=
11190*132f818dSEnji Cooper	    for lib in $dlprefiles; do
11191*132f818dSEnji Cooper	      case $lib in
11192*132f818dSEnji Cooper	      *.la)
11193*132f818dSEnji Cooper		# Only pass preopened files to the pseudo-archive (for
11194*132f818dSEnji Cooper		# eventual linking with the app. that links it) if we
11195*132f818dSEnji Cooper		# didn't already link the preopened objects directly into
11196*132f818dSEnji Cooper		# the library:
11197*132f818dSEnji Cooper		func_basename "$lib"
11198*132f818dSEnji Cooper		name=$func_basename_result
11199*132f818dSEnji Cooper		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
11200*132f818dSEnji Cooper		test -z "$libdir" && \
11201*132f818dSEnji Cooper		  func_fatal_error "'$lib' is not a valid libtool archive"
11202*132f818dSEnji Cooper		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
11203*132f818dSEnji Cooper		;;
11204*132f818dSEnji Cooper	      esac
11205*132f818dSEnji Cooper	    done
11206*132f818dSEnji Cooper	    dlprefiles=$newdlprefiles
11207*132f818dSEnji Cooper	  else
11208*132f818dSEnji Cooper	    newdlfiles=
11209*132f818dSEnji Cooper	    for lib in $dlfiles; do
11210*132f818dSEnji Cooper	      case $lib in
11211*132f818dSEnji Cooper		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
11212*132f818dSEnji Cooper		*) abs=`pwd`"/$lib" ;;
11213*132f818dSEnji Cooper	      esac
11214*132f818dSEnji Cooper	      func_append newdlfiles " $abs"
11215*132f818dSEnji Cooper	    done
11216*132f818dSEnji Cooper	    dlfiles=$newdlfiles
11217*132f818dSEnji Cooper	    newdlprefiles=
11218*132f818dSEnji Cooper	    for lib in $dlprefiles; do
11219*132f818dSEnji Cooper	      case $lib in
11220*132f818dSEnji Cooper		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
11221*132f818dSEnji Cooper		*) abs=`pwd`"/$lib" ;;
11222*132f818dSEnji Cooper	      esac
11223*132f818dSEnji Cooper	      func_append newdlprefiles " $abs"
11224*132f818dSEnji Cooper	    done
11225*132f818dSEnji Cooper	    dlprefiles=$newdlprefiles
11226*132f818dSEnji Cooper	  fi
11227*132f818dSEnji Cooper	  $RM $output
11228*132f818dSEnji Cooper	  # place dlname in correct position for cygwin
11229*132f818dSEnji Cooper	  # In fact, it would be nice if we could use this code for all target
11230*132f818dSEnji Cooper	  # systems that can't hard-code library paths into their executables
11231*132f818dSEnji Cooper	  # and that have no shared library path variable independent of PATH,
11232*132f818dSEnji Cooper	  # but it turns out we can't easily determine that from inspecting
11233*132f818dSEnji Cooper	  # libtool variables, so we have to hard-code the OSs to which it
11234*132f818dSEnji Cooper	  # applies here; at the moment, that means platforms that use the PE
11235*132f818dSEnji Cooper	  # object format with DLL files.  See the long comment at the top of
11236*132f818dSEnji Cooper	  # tests/bindir.at for full details.
11237*132f818dSEnji Cooper	  tdlname=$dlname
11238*132f818dSEnji Cooper	  case $host,$output,$installed,$module,$dlname in
11239*132f818dSEnji Cooper	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *windows*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
11240*132f818dSEnji Cooper	      # If a -bindir argument was supplied, place the dll there.
11241*132f818dSEnji Cooper	      if test -n "$bindir"; then
11242*132f818dSEnji Cooper		func_relative_path "$install_libdir" "$bindir"
11243*132f818dSEnji Cooper		tdlname=$func_relative_path_result/$dlname
11244*132f818dSEnji Cooper	      else
11245*132f818dSEnji Cooper		# Otherwise fall back on heuristic.
11246*132f818dSEnji Cooper		tdlname=../bin/$dlname
11247*132f818dSEnji Cooper	      fi
11248*132f818dSEnji Cooper	      ;;
11249*132f818dSEnji Cooper	  esac
11250*132f818dSEnji Cooper	  $ECHO > $output "\
11251*132f818dSEnji Cooper# $outputname - a libtool library file
11252*132f818dSEnji Cooper# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
11253*132f818dSEnji Cooper#
11254*132f818dSEnji Cooper# Please DO NOT delete this file!
11255*132f818dSEnji Cooper# It is necessary for linking the library.
11256*132f818dSEnji Cooper
11257*132f818dSEnji Cooper# The name that we can dlopen(3).
11258*132f818dSEnji Cooperdlname='$tdlname'
11259*132f818dSEnji Cooper
11260*132f818dSEnji Cooper# Names of this library.
11261*132f818dSEnji Cooperlibrary_names='$library_names'
11262*132f818dSEnji Cooper
11263*132f818dSEnji Cooper# The name of the static archive.
11264*132f818dSEnji Cooperold_library='$old_library'
11265*132f818dSEnji Cooper
11266*132f818dSEnji Cooper# Linker flags that cannot go in dependency_libs.
11267*132f818dSEnji Cooperinherited_linker_flags='$new_inherited_linker_flags'
11268*132f818dSEnji Cooper
11269*132f818dSEnji Cooper# Libraries that this one depends upon.
11270*132f818dSEnji Cooperdependency_libs='$dependency_libs'
11271*132f818dSEnji Cooper
11272*132f818dSEnji Cooper# Names of additional weak libraries provided by this library
11273*132f818dSEnji Cooperweak_library_names='$weak_libs'
11274*132f818dSEnji Cooper
11275*132f818dSEnji Cooper# Version information for $libname.
11276*132f818dSEnji Coopercurrent=$current
11277*132f818dSEnji Cooperage=$age
11278*132f818dSEnji Cooperrevision=$revision
11279*132f818dSEnji Cooper
11280*132f818dSEnji Cooper# Is this an already installed library?
11281*132f818dSEnji Cooperinstalled=$installed
11282*132f818dSEnji Cooper
11283*132f818dSEnji Cooper# Should we warn about portability when linking against -modules?
11284*132f818dSEnji Coopershouldnotlink=$module
11285*132f818dSEnji Cooper
11286*132f818dSEnji Cooper# Files to dlopen/dlpreopen
11287*132f818dSEnji Cooperdlopen='$dlfiles'
11288*132f818dSEnji Cooperdlpreopen='$dlprefiles'
11289*132f818dSEnji Cooper
11290*132f818dSEnji Cooper# Directory that this library needs to be installed in:
11291*132f818dSEnji Cooperlibdir='$install_libdir'"
11292*132f818dSEnji Cooper	  if test no,yes = "$installed,$need_relink"; then
11293*132f818dSEnji Cooper	    $ECHO >> $output "\
11294*132f818dSEnji Cooperrelink_command=\"$relink_command\""
11295*132f818dSEnji Cooper	  fi
11296*132f818dSEnji Cooper	done
11297*132f818dSEnji Cooper      }
11298*132f818dSEnji Cooper
11299*132f818dSEnji Cooper      # Do a symbolic link so that the libtool archive can be found in
11300*132f818dSEnji Cooper      # LD_LIBRARY_PATH before the program is installed.
11301*132f818dSEnji Cooper      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
11302*132f818dSEnji Cooper      ;;
11303*132f818dSEnji Cooper    esac
11304*132f818dSEnji Cooper    exit $EXIT_SUCCESS
11305*132f818dSEnji Cooper}
11306*132f818dSEnji Cooper
11307*132f818dSEnji Cooperif test link = "$opt_mode" || test relink = "$opt_mode"; then
11308*132f818dSEnji Cooper  func_mode_link ${1+"$@"}
11309*132f818dSEnji Cooperfi
11310*132f818dSEnji Cooper
11311*132f818dSEnji Cooper
11312*132f818dSEnji Cooper# func_mode_uninstall arg...
11313*132f818dSEnji Cooperfunc_mode_uninstall ()
11314*132f818dSEnji Cooper{
11315*132f818dSEnji Cooper    $debug_cmd
11316*132f818dSEnji Cooper
11317*132f818dSEnji Cooper    RM=$nonopt
11318*132f818dSEnji Cooper    files=
11319*132f818dSEnji Cooper    rmforce=false
11320*132f818dSEnji Cooper    exit_status=0
11321*132f818dSEnji Cooper
11322*132f818dSEnji Cooper    # This variable tells wrapper scripts just to set variables rather
11323*132f818dSEnji Cooper    # than running their programs.
11324*132f818dSEnji Cooper    libtool_install_magic=$magic
11325*132f818dSEnji Cooper
11326*132f818dSEnji Cooper    for arg
11327*132f818dSEnji Cooper    do
11328*132f818dSEnji Cooper      case $arg in
11329*132f818dSEnji Cooper      -f) func_append RM " $arg"; rmforce=: ;;
11330*132f818dSEnji Cooper      -*) func_append RM " $arg" ;;
11331*132f818dSEnji Cooper      *) func_append files " $arg" ;;
11332*132f818dSEnji Cooper      esac
11333*132f818dSEnji Cooper    done
11334*132f818dSEnji Cooper
11335*132f818dSEnji Cooper    test -z "$RM" && \
11336*132f818dSEnji Cooper      func_fatal_help "you must specify an RM program"
11337*132f818dSEnji Cooper
11338*132f818dSEnji Cooper    rmdirs=
11339*132f818dSEnji Cooper
11340*132f818dSEnji Cooper    for file in $files; do
11341*132f818dSEnji Cooper      func_dirname "$file" "" "."
11342*132f818dSEnji Cooper      dir=$func_dirname_result
11343*132f818dSEnji Cooper      if test . = "$dir"; then
11344*132f818dSEnji Cooper	odir=$objdir
11345*132f818dSEnji Cooper      else
11346*132f818dSEnji Cooper	odir=$dir/$objdir
11347*132f818dSEnji Cooper      fi
11348*132f818dSEnji Cooper      func_basename "$file"
11349*132f818dSEnji Cooper      name=$func_basename_result
11350*132f818dSEnji Cooper      test uninstall = "$opt_mode" && odir=$dir
11351*132f818dSEnji Cooper
11352*132f818dSEnji Cooper      # Remember odir for removal later, being careful to avoid duplicates
11353*132f818dSEnji Cooper      if test clean = "$opt_mode"; then
11354*132f818dSEnji Cooper	case " $rmdirs " in
11355*132f818dSEnji Cooper	  *" $odir "*) ;;
11356*132f818dSEnji Cooper	  *) func_append rmdirs " $odir" ;;
11357*132f818dSEnji Cooper	esac
11358*132f818dSEnji Cooper      fi
11359*132f818dSEnji Cooper
11360*132f818dSEnji Cooper      # Don't error if the file doesn't exist and rm -f was used.
11361*132f818dSEnji Cooper      if { test -L "$file"; } >/dev/null 2>&1 ||
11362*132f818dSEnji Cooper	 { test -h "$file"; } >/dev/null 2>&1 ||
11363*132f818dSEnji Cooper	 test -f "$file"; then
11364*132f818dSEnji Cooper	:
11365*132f818dSEnji Cooper      elif test -d "$file"; then
11366*132f818dSEnji Cooper	exit_status=1
11367*132f818dSEnji Cooper	continue
11368*132f818dSEnji Cooper      elif $rmforce; then
11369*132f818dSEnji Cooper	continue
11370*132f818dSEnji Cooper      fi
11371*132f818dSEnji Cooper
11372*132f818dSEnji Cooper      rmfiles=$file
11373*132f818dSEnji Cooper
11374*132f818dSEnji Cooper      case $name in
11375*132f818dSEnji Cooper      *.la)
11376*132f818dSEnji Cooper	# Possibly a libtool archive, so verify it.
11377*132f818dSEnji Cooper	if func_lalib_p "$file"; then
11378*132f818dSEnji Cooper	  func_source $dir/$name
11379*132f818dSEnji Cooper
11380*132f818dSEnji Cooper	  # Delete the libtool libraries and symlinks.
11381*132f818dSEnji Cooper	  for n in $library_names; do
11382*132f818dSEnji Cooper	    func_append rmfiles " $odir/$n"
11383*132f818dSEnji Cooper	  done
11384*132f818dSEnji Cooper	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
11385*132f818dSEnji Cooper
11386*132f818dSEnji Cooper	  case $opt_mode in
11387*132f818dSEnji Cooper	  clean)
11388*132f818dSEnji Cooper	    case " $library_names " in
11389*132f818dSEnji Cooper	    *" $dlname "*) ;;
11390*132f818dSEnji Cooper	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
11391*132f818dSEnji Cooper	    esac
11392*132f818dSEnji Cooper	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
11393*132f818dSEnji Cooper	    ;;
11394*132f818dSEnji Cooper	  uninstall)
11395*132f818dSEnji Cooper	    if test -n "$library_names"; then
11396*132f818dSEnji Cooper	      # Do each command in the postuninstall commands.
11397*132f818dSEnji Cooper	      func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
11398*132f818dSEnji Cooper	    fi
11399*132f818dSEnji Cooper
11400*132f818dSEnji Cooper	    if test -n "$old_library"; then
11401*132f818dSEnji Cooper	      # Do each command in the old_postuninstall commands.
11402*132f818dSEnji Cooper	      func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
11403*132f818dSEnji Cooper	    fi
11404*132f818dSEnji Cooper	    # FIXME: should reinstall the best remaining shared library.
11405*132f818dSEnji Cooper	    ;;
11406*132f818dSEnji Cooper	  esac
11407*132f818dSEnji Cooper	fi
11408*132f818dSEnji Cooper	;;
11409*132f818dSEnji Cooper
11410*132f818dSEnji Cooper      *.lo)
11411*132f818dSEnji Cooper	# Possibly a libtool object, so verify it.
11412*132f818dSEnji Cooper	if func_lalib_p "$file"; then
11413*132f818dSEnji Cooper
11414*132f818dSEnji Cooper	  # Read the .lo file
11415*132f818dSEnji Cooper	  func_source $dir/$name
11416*132f818dSEnji Cooper
11417*132f818dSEnji Cooper	  # Add PIC object to the list of files to remove.
11418*132f818dSEnji Cooper	  if test -n "$pic_object" && test none != "$pic_object"; then
11419*132f818dSEnji Cooper	    func_append rmfiles " $dir/$pic_object"
11420*132f818dSEnji Cooper	  fi
11421*132f818dSEnji Cooper
11422*132f818dSEnji Cooper	  # Add non-PIC object to the list of files to remove.
11423*132f818dSEnji Cooper	  if test -n "$non_pic_object" && test none != "$non_pic_object"; then
11424*132f818dSEnji Cooper	    func_append rmfiles " $dir/$non_pic_object"
11425*132f818dSEnji Cooper	  fi
11426*132f818dSEnji Cooper	fi
11427*132f818dSEnji Cooper	;;
11428*132f818dSEnji Cooper
11429*132f818dSEnji Cooper      *)
11430*132f818dSEnji Cooper	if test clean = "$opt_mode"; then
11431*132f818dSEnji Cooper	  noexename=$name
11432*132f818dSEnji Cooper	  case $file in
11433*132f818dSEnji Cooper	  *.exe)
11434*132f818dSEnji Cooper	    func_stripname '' '.exe' "$file"
11435*132f818dSEnji Cooper	    file=$func_stripname_result
11436*132f818dSEnji Cooper	    func_stripname '' '.exe' "$name"
11437*132f818dSEnji Cooper	    noexename=$func_stripname_result
11438*132f818dSEnji Cooper	    # $file with .exe has already been added to rmfiles,
11439*132f818dSEnji Cooper	    # add $file without .exe
11440*132f818dSEnji Cooper	    func_append rmfiles " $file"
11441*132f818dSEnji Cooper	    ;;
11442*132f818dSEnji Cooper	  esac
11443*132f818dSEnji Cooper	  # Do a test to see if this is a libtool program.
11444*132f818dSEnji Cooper	  if func_ltwrapper_p "$file"; then
11445*132f818dSEnji Cooper	    if func_ltwrapper_executable_p "$file"; then
11446*132f818dSEnji Cooper	      func_ltwrapper_scriptname "$file"
11447*132f818dSEnji Cooper	      relink_command=
11448*132f818dSEnji Cooper	      func_source $func_ltwrapper_scriptname_result
11449*132f818dSEnji Cooper	      func_append rmfiles " $func_ltwrapper_scriptname_result"
11450*132f818dSEnji Cooper	    else
11451*132f818dSEnji Cooper	      relink_command=
11452*132f818dSEnji Cooper	      func_source $dir/$noexename
11453*132f818dSEnji Cooper	    fi
11454*132f818dSEnji Cooper
11455*132f818dSEnji Cooper	    # note $name still contains .exe if it was in $file originally
11456*132f818dSEnji Cooper	    # as does the version of $file that was added into $rmfiles
11457*132f818dSEnji Cooper	    func_append rmfiles " $odir/$name $odir/${name}S.$objext"
11458*132f818dSEnji Cooper	    if test yes = "$fast_install" && test -n "$relink_command"; then
11459*132f818dSEnji Cooper	      func_append rmfiles " $odir/lt-$name"
11460*132f818dSEnji Cooper	    fi
11461*132f818dSEnji Cooper	    if test "X$noexename" != "X$name"; then
11462*132f818dSEnji Cooper	      func_append rmfiles " $odir/lt-$noexename.c"
11463*132f818dSEnji Cooper	    fi
11464*132f818dSEnji Cooper	  fi
11465*132f818dSEnji Cooper	fi
11466*132f818dSEnji Cooper	;;
11467*132f818dSEnji Cooper      esac
11468*132f818dSEnji Cooper      func_show_eval "$RM $rmfiles" 'exit_status=1'
11469*132f818dSEnji Cooper    done
11470*132f818dSEnji Cooper
11471*132f818dSEnji Cooper    # Try to remove the $objdir's in the directories where we deleted files
11472*132f818dSEnji Cooper    for dir in $rmdirs; do
11473*132f818dSEnji Cooper      if test -d "$dir"; then
11474*132f818dSEnji Cooper	func_show_eval "rmdir $dir >/dev/null 2>&1"
11475*132f818dSEnji Cooper      fi
11476*132f818dSEnji Cooper    done
11477*132f818dSEnji Cooper
11478*132f818dSEnji Cooper    exit $exit_status
11479*132f818dSEnji Cooper}
11480*132f818dSEnji Cooper
11481*132f818dSEnji Cooperif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
11482*132f818dSEnji Cooper  func_mode_uninstall ${1+"$@"}
11483*132f818dSEnji Cooperfi
11484*132f818dSEnji Cooper
11485*132f818dSEnji Coopertest -z "$opt_mode" && {
11486*132f818dSEnji Cooper  help=$generic_help
11487*132f818dSEnji Cooper  func_fatal_help "you must specify a MODE"
11488*132f818dSEnji Cooper}
11489*132f818dSEnji Cooper
11490*132f818dSEnji Coopertest -z "$exec_cmd" && \
11491*132f818dSEnji Cooper  func_fatal_help "invalid operation mode '$opt_mode'"
11492*132f818dSEnji Cooper
11493*132f818dSEnji Cooperif test -n "$exec_cmd"; then
11494*132f818dSEnji Cooper  eval exec "$exec_cmd"
11495*132f818dSEnji Cooper  exit $EXIT_FAILURE
11496*132f818dSEnji Cooperfi
11497*132f818dSEnji Cooper
11498*132f818dSEnji Cooperexit $exit_status
11499*132f818dSEnji Cooper
11500*132f818dSEnji Cooper
11501*132f818dSEnji Cooper# The TAGs below are defined such that we never get into a situation
11502*132f818dSEnji Cooper# where we disable both kinds of libraries.  Given conflicting
11503*132f818dSEnji Cooper# choices, we go for a static library, that is the most portable,
11504*132f818dSEnji Cooper# since we can't tell whether shared libraries were disabled because
11505*132f818dSEnji Cooper# the user asked for that or because the platform doesn't support
11506*132f818dSEnji Cooper# them.  This is particularly important on AIX, because we don't
11507*132f818dSEnji Cooper# support having both static and shared libraries enabled at the same
11508*132f818dSEnji Cooper# time on that platform, so we default to a shared-only configuration.
11509*132f818dSEnji Cooper# If a disable-shared tag is given, we'll fallback to a static-only
11510*132f818dSEnji Cooper# configuration.  But we'll never go from static-only to shared-only.
11511*132f818dSEnji Cooper
11512*132f818dSEnji Cooper# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
11513*132f818dSEnji Cooperbuild_libtool_libs=no
11514*132f818dSEnji Cooperbuild_old_libs=yes
11515*132f818dSEnji Cooper# ### END LIBTOOL TAG CONFIG: disable-shared
11516*132f818dSEnji Cooper
11517*132f818dSEnji Cooper# ### BEGIN LIBTOOL TAG CONFIG: disable-static
11518*132f818dSEnji Cooperbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
11519*132f818dSEnji Cooper# ### END LIBTOOL TAG CONFIG: disable-static
11520*132f818dSEnji Cooper
11521*132f818dSEnji Cooper# Local Variables:
11522*132f818dSEnji Cooper# mode:shell-script
11523*132f818dSEnji Cooper# sh-indentation:2
11524*132f818dSEnji Cooper# End:
11525