ltmain.sh revision fe4c343a
1fe4c343aSmrg#! /bin/sh
2fe4c343aSmrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
3fe4c343aSmrg##               by inline-source v2014-01-03.01
4549e21daSmrg
5fe4c343aSmrg# libtool (GNU libtool) 2.4.6
6fe4c343aSmrg# Provide generalized library-building support services.
7549e21daSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
8549e21daSmrg
9fe4c343aSmrg# Copyright (C) 1996-2015 Free Software Foundation, Inc.
10549e21daSmrg# This is free software; see the source for copying conditions.  There is NO
11549e21daSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12549e21daSmrg
13549e21daSmrg# GNU Libtool is free software; you can redistribute it and/or modify
14ba6a1819Smrg# it under the terms of the GNU General Public License as published by
15ba6a1819Smrg# the Free Software Foundation; either version 2 of the License, or
16ba6a1819Smrg# (at your option) any later version.
17ba6a1819Smrg#
18549e21daSmrg# As a special exception to the GNU General Public License,
19549e21daSmrg# if you distribute this file as part of a program or library that
20549e21daSmrg# is built using GNU Libtool, you may include this file under the
21549e21daSmrg# same distribution terms that you use for the rest of that program.
22549e21daSmrg#
23549e21daSmrg# GNU Libtool is distributed in the hope that it will be useful, but
24ba6a1819Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
25ba6a1819Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
26ba6a1819Smrg# General Public License for more details.
27ba6a1819Smrg#
28ba6a1819Smrg# You should have received a copy of the GNU General Public License
29fe4c343aSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
30549e21daSmrg
31549e21daSmrg
32549e21daSmrgPROGRAM=libtool
33549e21daSmrgPACKAGE=libtool
34fe4c343aSmrgVERSION=2.4.6
35fe4c343aSmrgpackage_revision=2.4.6
36549e21daSmrg
37fe4c343aSmrg
38fe4c343aSmrg## ------ ##
39fe4c343aSmrg## Usage. ##
40fe4c343aSmrg## ------ ##
41fe4c343aSmrg
42fe4c343aSmrg# Run './libtool --help' for help with using this script from the
43fe4c343aSmrg# command line.
44fe4c343aSmrg
45fe4c343aSmrg
46fe4c343aSmrg## ------------------------------- ##
47fe4c343aSmrg## User overridable command paths. ##
48fe4c343aSmrg## ------------------------------- ##
49fe4c343aSmrg
50fe4c343aSmrg# After configure completes, it has a better idea of some of the
51fe4c343aSmrg# shell tools we need than the defaults used by the functions shared
52fe4c343aSmrg# with bootstrap, so set those here where they can still be over-
53fe4c343aSmrg# ridden by the user, but otherwise take precedence.
54fe4c343aSmrg
55fe4c343aSmrg: ${AUTOCONF="autoconf"}
56fe4c343aSmrg: ${AUTOMAKE="automake"}
57fe4c343aSmrg
58fe4c343aSmrg
59fe4c343aSmrg## -------------------------- ##
60fe4c343aSmrg## Source external libraries. ##
61fe4c343aSmrg## -------------------------- ##
62fe4c343aSmrg
63fe4c343aSmrg# Much of our low-level functionality needs to be sourced from external
64fe4c343aSmrg# libraries, which are installed to $pkgauxdir.
65fe4c343aSmrg
66fe4c343aSmrg# Set a version string for this script.
67fe4c343aSmrgscriptversion=2015-01-20.17; # UTC
68fe4c343aSmrg
69fe4c343aSmrg# General shell script boiler plate, and helper functions.
70fe4c343aSmrg# Written by Gary V. Vaughan, 2004
71fe4c343aSmrg
72fe4c343aSmrg# Copyright (C) 2004-2015 Free Software Foundation, Inc.
73fe4c343aSmrg# This is free software; see the source for copying conditions.  There is NO
74fe4c343aSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
75fe4c343aSmrg
76fe4c343aSmrg# This program is free software; you can redistribute it and/or modify
77fe4c343aSmrg# it under the terms of the GNU General Public License as published by
78fe4c343aSmrg# the Free Software Foundation; either version 3 of the License, or
79fe4c343aSmrg# (at your option) any later version.
80fe4c343aSmrg
81fe4c343aSmrg# As a special exception to the GNU General Public License, if you distribute
82fe4c343aSmrg# this file as part of a program or library that is built using GNU Libtool,
83fe4c343aSmrg# you may include this file under the same distribution terms that you use
84fe4c343aSmrg# for the rest of that program.
85fe4c343aSmrg
86fe4c343aSmrg# This program is distributed in the hope that it will be useful,
87fe4c343aSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
88fe4c343aSmrg# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
89fe4c343aSmrg# General Public License for more details.
90fe4c343aSmrg
91fe4c343aSmrg# You should have received a copy of the GNU General Public License
92fe4c343aSmrg# along with this program. If not, see <http://www.gnu.org/licenses/>.
93fe4c343aSmrg
94fe4c343aSmrg# Please report bugs or propose patches to gary@gnu.org.
95fe4c343aSmrg
96fe4c343aSmrg
97fe4c343aSmrg## ------ ##
98fe4c343aSmrg## Usage. ##
99fe4c343aSmrg## ------ ##
100fe4c343aSmrg
101fe4c343aSmrg# Evaluate this file near the top of your script to gain access to
102fe4c343aSmrg# the functions and variables defined here:
103fe4c343aSmrg#
104fe4c343aSmrg#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
105fe4c343aSmrg#
106fe4c343aSmrg# If you need to override any of the default environment variable
107fe4c343aSmrg# settings, do that before evaluating this file.
108fe4c343aSmrg
109fe4c343aSmrg
110fe4c343aSmrg## -------------------- ##
111fe4c343aSmrg## Shell normalisation. ##
112fe4c343aSmrg## -------------------- ##
113fe4c343aSmrg
114fe4c343aSmrg# Some shells need a little help to be as Bourne compatible as possible.
115fe4c343aSmrg# Before doing anything else, make sure all that help has been provided!
116fe4c343aSmrg
117fe4c343aSmrgDUALCASE=1; export DUALCASE # for MKS sh
118fe4c343aSmrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
119549e21daSmrg  emulate sh
120549e21daSmrg  NULLCMD=:
121fe4c343aSmrg  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
122549e21daSmrg  # is contrary to our usage.  Disable this feature.
123549e21daSmrg  alias -g '${1+"$@"}'='"$@"'
124549e21daSmrg  setopt NO_GLOB_SUBST
125549e21daSmrgelse
126fe4c343aSmrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
127549e21daSmrgfi
128549e21daSmrg
129fe4c343aSmrg# NLS nuisances: We save the old values in case they are required later.
130fe4c343aSmrg_G_user_locale=
131fe4c343aSmrg_G_safe_locale=
132fe4c343aSmrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
133549e21daSmrgdo
134fe4c343aSmrg  eval "if test set = \"\${$_G_var+set}\"; then
135fe4c343aSmrg          save_$_G_var=\$$_G_var
136fe4c343aSmrg          $_G_var=C
137fe4c343aSmrg	  export $_G_var
138fe4c343aSmrg	  _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
139fe4c343aSmrg	  _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
140549e21daSmrg	fi"
141549e21daSmrgdone
142549e21daSmrg
143fe4c343aSmrg# CDPATH.
144fe4c343aSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
145ba6a1819Smrg
146fe4c343aSmrg# Make sure IFS has a sensible default
147fe4c343aSmrgsp=' '
148fe4c343aSmrgnl='
149fe4c343aSmrg'
150fe4c343aSmrgIFS="$sp	$nl"
151fe4c343aSmrg
152fe4c343aSmrg# There are apparently some retarded systems that use ';' as a PATH separator!
153fe4c343aSmrgif test "${PATH_SEPARATOR+set}" != set; then
154fe4c343aSmrg  PATH_SEPARATOR=:
155fe4c343aSmrg  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
156fe4c343aSmrg    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
157fe4c343aSmrg      PATH_SEPARATOR=';'
158fe4c343aSmrg  }
159fe4c343aSmrgfi
160ba6a1819Smrg
161ba6a1819Smrg
162549e21daSmrg
163fe4c343aSmrg## ------------------------- ##
164fe4c343aSmrg## Locate command utilities. ##
165fe4c343aSmrg## ------------------------- ##
166fe4c343aSmrg
167fe4c343aSmrg
168fe4c343aSmrg# func_executable_p FILE
169fe4c343aSmrg# ----------------------
170fe4c343aSmrg# Check that FILE is an executable regular file.
171fe4c343aSmrgfunc_executable_p ()
172fe4c343aSmrg{
173fe4c343aSmrg    test -f "$1" && test -x "$1"
174fe4c343aSmrg}
175fe4c343aSmrg
176fe4c343aSmrg
177fe4c343aSmrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
178fe4c343aSmrg# --------------------------------------------
179fe4c343aSmrg# Search for either a program that responds to --version with output
180fe4c343aSmrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by
181fe4c343aSmrg# trying all the directories in PATH with each of the elements of
182fe4c343aSmrg# PROGS_LIST.
183fe4c343aSmrg#
184fe4c343aSmrg# CHECK_FUNC should accept the path to a candidate program, and
185fe4c343aSmrg# set $func_check_prog_result if it truncates its output less than
186fe4c343aSmrg# $_G_path_prog_max characters.
187fe4c343aSmrgfunc_path_progs ()
188fe4c343aSmrg{
189fe4c343aSmrg    _G_progs_list=$1
190fe4c343aSmrg    _G_check_func=$2
191fe4c343aSmrg    _G_PATH=${3-"$PATH"}
192fe4c343aSmrg
193fe4c343aSmrg    _G_path_prog_max=0
194fe4c343aSmrg    _G_path_prog_found=false
195fe4c343aSmrg    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
196fe4c343aSmrg    for _G_dir in $_G_PATH; do
197fe4c343aSmrg      IFS=$_G_save_IFS
198fe4c343aSmrg      test -z "$_G_dir" && _G_dir=.
199fe4c343aSmrg      for _G_prog_name in $_G_progs_list; do
200fe4c343aSmrg        for _exeext in '' .EXE; do
201fe4c343aSmrg          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
202fe4c343aSmrg          func_executable_p "$_G_path_prog" || continue
203fe4c343aSmrg          case `"$_G_path_prog" --version 2>&1` in
204fe4c343aSmrg            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
205fe4c343aSmrg            *)     $_G_check_func $_G_path_prog
206fe4c343aSmrg		   func_path_progs_result=$func_check_prog_result
207fe4c343aSmrg		   ;;
208fe4c343aSmrg          esac
209fe4c343aSmrg          $_G_path_prog_found && break 3
210fe4c343aSmrg        done
211fe4c343aSmrg      done
212fe4c343aSmrg    done
213fe4c343aSmrg    IFS=$_G_save_IFS
214fe4c343aSmrg    test -z "$func_path_progs_result" && {
215fe4c343aSmrg      echo "no acceptable sed could be found in \$PATH" >&2
216fe4c343aSmrg      exit 1
217fe4c343aSmrg    }
218fe4c343aSmrg}
219fe4c343aSmrg
220fe4c343aSmrg
221fe4c343aSmrg# We want to be able to use the functions in this file before configure
222fe4c343aSmrg# has figured out where the best binaries are kept, which means we have
223fe4c343aSmrg# to search for them ourselves - except when the results are already set
224fe4c343aSmrg# where we skip the searches.
225fe4c343aSmrg
226fe4c343aSmrg# Unless the user overrides by setting SED, search the path for either GNU
227fe4c343aSmrg# sed, or the sed that truncates its output the least.
228fe4c343aSmrgtest -z "$SED" && {
229fe4c343aSmrg  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
230fe4c343aSmrg  for _G_i in 1 2 3 4 5 6 7; do
231fe4c343aSmrg    _G_sed_script=$_G_sed_script$nl$_G_sed_script
232fe4c343aSmrg  done
233fe4c343aSmrg  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
234fe4c343aSmrg  _G_sed_script=
235fe4c343aSmrg
236fe4c343aSmrg  func_check_prog_sed ()
237fe4c343aSmrg  {
238fe4c343aSmrg    _G_path_prog=$1
239fe4c343aSmrg
240fe4c343aSmrg    _G_count=0
241fe4c343aSmrg    printf 0123456789 >conftest.in
242fe4c343aSmrg    while :
243fe4c343aSmrg    do
244fe4c343aSmrg      cat conftest.in conftest.in >conftest.tmp
245fe4c343aSmrg      mv conftest.tmp conftest.in
246fe4c343aSmrg      cp conftest.in conftest.nl
247fe4c343aSmrg      echo '' >> conftest.nl
248fe4c343aSmrg      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
249fe4c343aSmrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
250fe4c343aSmrg      _G_count=`expr $_G_count + 1`
251fe4c343aSmrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
252fe4c343aSmrg        # Best one so far, save it but keep looking for a better one
253fe4c343aSmrg        func_check_prog_result=$_G_path_prog
254fe4c343aSmrg        _G_path_prog_max=$_G_count
255fe4c343aSmrg      fi
256fe4c343aSmrg      # 10*(2^10) chars as input seems more than enough
257fe4c343aSmrg      test 10 -lt "$_G_count" && break
258fe4c343aSmrg    done
259fe4c343aSmrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
260fe4c343aSmrg  }
261fe4c343aSmrg
262fe4c343aSmrg  func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
263fe4c343aSmrg  rm -f conftest.sed
264fe4c343aSmrg  SED=$func_path_progs_result
265fe4c343aSmrg}
266fe4c343aSmrg
267fe4c343aSmrg
268fe4c343aSmrg# Unless the user overrides by setting GREP, search the path for either GNU
269fe4c343aSmrg# grep, or the grep that truncates its output the least.
270fe4c343aSmrgtest -z "$GREP" && {
271fe4c343aSmrg  func_check_prog_grep ()
272fe4c343aSmrg  {
273fe4c343aSmrg    _G_path_prog=$1
274fe4c343aSmrg
275fe4c343aSmrg    _G_count=0
276fe4c343aSmrg    _G_path_prog_max=0
277fe4c343aSmrg    printf 0123456789 >conftest.in
278fe4c343aSmrg    while :
279fe4c343aSmrg    do
280fe4c343aSmrg      cat conftest.in conftest.in >conftest.tmp
281fe4c343aSmrg      mv conftest.tmp conftest.in
282fe4c343aSmrg      cp conftest.in conftest.nl
283fe4c343aSmrg      echo 'GREP' >> conftest.nl
284fe4c343aSmrg      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
285fe4c343aSmrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
286fe4c343aSmrg      _G_count=`expr $_G_count + 1`
287fe4c343aSmrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
288fe4c343aSmrg        # Best one so far, save it but keep looking for a better one
289fe4c343aSmrg        func_check_prog_result=$_G_path_prog
290fe4c343aSmrg        _G_path_prog_max=$_G_count
291fe4c343aSmrg      fi
292fe4c343aSmrg      # 10*(2^10) chars as input seems more than enough
293fe4c343aSmrg      test 10 -lt "$_G_count" && break
294fe4c343aSmrg    done
295fe4c343aSmrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
296fe4c343aSmrg  }
297fe4c343aSmrg
298fe4c343aSmrg  func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
299fe4c343aSmrg  GREP=$func_path_progs_result
300fe4c343aSmrg}
301fe4c343aSmrg
302fe4c343aSmrg
303fe4c343aSmrg## ------------------------------- ##
304fe4c343aSmrg## User overridable command paths. ##
305fe4c343aSmrg## ------------------------------- ##
306fe4c343aSmrg
307fe4c343aSmrg# All uppercase variable names are used for environment variables.  These
308fe4c343aSmrg# variables can be overridden by the user before calling a script that
309fe4c343aSmrg# uses them if a suitable command of that name is not already available
310fe4c343aSmrg# in the command search PATH.
311549e21daSmrg
312549e21daSmrg: ${CP="cp -f"}
313fe4c343aSmrg: ${ECHO="printf %s\n"}
314fe4c343aSmrg: ${EGREP="$GREP -E"}
315fe4c343aSmrg: ${FGREP="$GREP -F"}
316fe4c343aSmrg: ${LN_S="ln -s"}
317549e21daSmrg: ${MAKE="make"}
318549e21daSmrg: ${MKDIR="mkdir"}
319549e21daSmrg: ${MV="mv -f"}
320549e21daSmrg: ${RM="rm -f"}
321549e21daSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
322ba6a1819Smrg
323549e21daSmrg
324fe4c343aSmrg## -------------------- ##
325fe4c343aSmrg## Useful sed snippets. ##
326fe4c343aSmrg## -------------------- ##
3271bedbe3fSmrg
328fe4c343aSmrgsed_dirname='s|/[^/]*$||'
329fe4c343aSmrgsed_basename='s|^.*/||'
3301bedbe3fSmrg
331fe4c343aSmrg# Sed substitution that helps us do robust quoting.  It backslashifies
332fe4c343aSmrg# metacharacters that are still active within double-quoted strings.
333fe4c343aSmrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g'
3341bedbe3fSmrg
335fe4c343aSmrg# Same as above, but do not quote variable references.
336fe4c343aSmrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
3371bedbe3fSmrg
338fe4c343aSmrg# Sed substitution that turns a string into a regex matching for the
339fe4c343aSmrg# string literally.
340fe4c343aSmrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
3411bedbe3fSmrg
342fe4c343aSmrg# Sed substitution that converts a w32 file name or path
343fe4c343aSmrg# that contains forward slashes, into one that contains
344fe4c343aSmrg# (escaped) backslashes.  A very naive implementation.
345fe4c343aSmrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
346fe4c343aSmrg
347fe4c343aSmrg# Re-'\' parameter expansions in output of sed_double_quote_subst that
348fe4c343aSmrg# were '\'-ed in input to the same.  If an odd number of '\' preceded a
349fe4c343aSmrg# '$' in input to sed_double_quote_subst, that '$' was protected from
350fe4c343aSmrg# expansion.  Since each input '\' is now two '\'s, look for any number
351fe4c343aSmrg# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
352fe4c343aSmrg_G_bs='\\'
353fe4c343aSmrg_G_bs2='\\\\'
354fe4c343aSmrg_G_bs4='\\\\\\\\'
355fe4c343aSmrg_G_dollar='\$'
356fe4c343aSmrgsed_double_backslash="\
357fe4c343aSmrg  s/$_G_bs4/&\\
358fe4c343aSmrg/g
359fe4c343aSmrg  s/^$_G_bs2$_G_dollar/$_G_bs&/
360fe4c343aSmrg  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
361fe4c343aSmrg  s/\n//g"
3621bedbe3fSmrg
363ba6a1819Smrg
364fe4c343aSmrg## ----------------- ##
365fe4c343aSmrg## Global variables. ##
366fe4c343aSmrg## ----------------- ##
367549e21daSmrg
368fe4c343aSmrg# Except for the global variables explicitly listed below, the following
369fe4c343aSmrg# functions in the '^func_' namespace, and the '^require_' namespace
370fe4c343aSmrg# variables initialised in the 'Resource management' section, sourcing
371fe4c343aSmrg# this file will not pollute your global namespace with anything
372fe4c343aSmrg# else. There's no portable way to scope variables in Bourne shell
373fe4c343aSmrg# though, so actually running these functions will sometimes place
374fe4c343aSmrg# results into a variable named after the function, and often use
375fe4c343aSmrg# temporary variables in the '^_G_' namespace. If you are careful to
376fe4c343aSmrg# avoid using those namespaces casually in your sourcing script, things
377fe4c343aSmrg# should continue to work as you expect. And, of course, you can freely
378fe4c343aSmrg# overwrite any of the functions or variables defined here before
379fe4c343aSmrg# calling anything to customize them.
380549e21daSmrg
381fe4c343aSmrgEXIT_SUCCESS=0
382fe4c343aSmrgEXIT_FAILURE=1
383fe4c343aSmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
384fe4c343aSmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
385ba6a1819Smrg
386fe4c343aSmrg# Allow overriding, eg assuming that you follow the convention of
387fe4c343aSmrg# putting '$debug_cmd' at the start of all your functions, you can get
388fe4c343aSmrg# bash to show function call trace with:
389fe4c343aSmrg#
390fe4c343aSmrg#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
391fe4c343aSmrgdebug_cmd=${debug_cmd-":"}
392fe4c343aSmrgexit_cmd=:
393549e21daSmrg
394fe4c343aSmrg# By convention, finish your script with:
395fe4c343aSmrg#
396fe4c343aSmrg#    exit $exit_status
397fe4c343aSmrg#
398fe4c343aSmrg# so that you can set exit_status to non-zero if you want to indicate
399fe4c343aSmrg# something went wrong during execution without actually bailing out at
400fe4c343aSmrg# the point of failure.
401fe4c343aSmrgexit_status=$EXIT_SUCCESS
402549e21daSmrg
403fe4c343aSmrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
404fe4c343aSmrg# is ksh but when the shell is invoked as "sh" and the current value of
405fe4c343aSmrg# the _XPG environment variable is not equal to 1 (one), the special
406fe4c343aSmrg# positional parameter $0, within a function call, is the name of the
407fe4c343aSmrg# function.
408fe4c343aSmrgprogpath=$0
409549e21daSmrg
410fe4c343aSmrg# The name of this program.
411fe4c343aSmrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"`
412549e21daSmrg
413fe4c343aSmrg# Make sure we have an absolute progpath for reexecution:
414549e21daSmrgcase $progpath in
415549e21daSmrg  [\\/]*|[A-Za-z]:\\*) ;;
416549e21daSmrg  *[\\/]*)
417fe4c343aSmrg     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
418549e21daSmrg     progdir=`cd "$progdir" && pwd`
419fe4c343aSmrg     progpath=$progdir/$progname
420549e21daSmrg     ;;
421549e21daSmrg  *)
422fe4c343aSmrg     _G_IFS=$IFS
4231bedbe3fSmrg     IFS=${PATH_SEPARATOR-:}
424549e21daSmrg     for progdir in $PATH; do
425fe4c343aSmrg       IFS=$_G_IFS
426549e21daSmrg       test -x "$progdir/$progname" && break
427549e21daSmrg     done
428fe4c343aSmrg     IFS=$_G_IFS
429549e21daSmrg     test -n "$progdir" || progdir=`pwd`
430fe4c343aSmrg     progpath=$progdir/$progname
431549e21daSmrg     ;;
432549e21daSmrgesac
433ba6a1819Smrg
434549e21daSmrg
435fe4c343aSmrg## ----------------- ##
436fe4c343aSmrg## Standard options. ##
437fe4c343aSmrg## ----------------- ##
4381bedbe3fSmrg
439fe4c343aSmrg# The following options affect the operation of the functions defined
440fe4c343aSmrg# below, and should be set appropriately depending on run-time para-
441fe4c343aSmrg# meters passed on the command line.
442549e21daSmrg
443549e21daSmrgopt_dry_run=false
444549e21daSmrgopt_quiet=false
445549e21daSmrgopt_verbose=false
446549e21daSmrg
447fe4c343aSmrg# Categories 'all' and 'none' are always available.  Append any others
448fe4c343aSmrg# you will pass as the first argument to func_warning from your own
449fe4c343aSmrg# code.
450fe4c343aSmrgwarning_categories=
451ba6a1819Smrg
452fe4c343aSmrg# By default, display warnings according to 'opt_warning_types'.  Set
453fe4c343aSmrg# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
454fe4c343aSmrg# treat the next displayed warning as a fatal error.
455fe4c343aSmrgwarning_func=func_warn_and_continue
456ba6a1819Smrg
457fe4c343aSmrg# Set to 'all' to display all warnings, 'none' to suppress all
458fe4c343aSmrg# warnings, or a space delimited list of some subset of
459fe4c343aSmrg# 'warning_categories' to display only the listed warnings.
460fe4c343aSmrgopt_warning_types=all
461ba6a1819Smrg
462ba6a1819Smrg
463fe4c343aSmrg## -------------------- ##
464fe4c343aSmrg## Resource management. ##
465fe4c343aSmrg## -------------------- ##
466549e21daSmrg
467fe4c343aSmrg# This section contains definitions for functions that each ensure a
468fe4c343aSmrg# particular resource (a file, or a non-empty configuration variable for
469fe4c343aSmrg# example) is available, and if appropriate to extract default values
470fe4c343aSmrg# from pertinent package files. Call them using their associated
471fe4c343aSmrg# 'require_*' variable to ensure that they are executed, at most, once.
472fe4c343aSmrg#
473fe4c343aSmrg# It's entirely deliberate that calling these functions can set
474fe4c343aSmrg# variables that don't obey the namespace limitations obeyed by the rest
475fe4c343aSmrg# of this file, in order that that they be as useful as possible to
476fe4c343aSmrg# callers.
477549e21daSmrg
478549e21daSmrg
479fe4c343aSmrg# require_term_colors
480fe4c343aSmrg# -------------------
481fe4c343aSmrg# Allow display of bold text on terminals that support it.
482fe4c343aSmrgrequire_term_colors=func_require_term_colors
483fe4c343aSmrgfunc_require_term_colors ()
484549e21daSmrg{
485fe4c343aSmrg    $debug_cmd
486fe4c343aSmrg
487fe4c343aSmrg    test -t 1 && {
488fe4c343aSmrg      # COLORTERM and USE_ANSI_COLORS environment variables take
489fe4c343aSmrg      # precedence, because most terminfo databases neglect to describe
490fe4c343aSmrg      # whether color sequences are supported.
491fe4c343aSmrg      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
492fe4c343aSmrg
493fe4c343aSmrg      if test 1 = "$USE_ANSI_COLORS"; then
494fe4c343aSmrg        # Standard ANSI escape sequences
495fe4c343aSmrg        tc_reset='[0m'
496fe4c343aSmrg        tc_bold='[1m';   tc_standout='[7m'
497fe4c343aSmrg        tc_red='[31m';   tc_green='[32m'
498fe4c343aSmrg        tc_blue='[34m';  tc_cyan='[36m'
499fe4c343aSmrg      else
500fe4c343aSmrg        # Otherwise trust the terminfo database after all.
501fe4c343aSmrg        test -n "`tput sgr0 2>/dev/null`" && {
502fe4c343aSmrg          tc_reset=`tput sgr0`
503fe4c343aSmrg          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
504fe4c343aSmrg          tc_standout=$tc_bold
505fe4c343aSmrg          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
506fe4c343aSmrg          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
507fe4c343aSmrg          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
508fe4c343aSmrg          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
509fe4c343aSmrg          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
510fe4c343aSmrg        }
511fe4c343aSmrg      fi
512fe4c343aSmrg    }
513549e21daSmrg
514fe4c343aSmrg    require_term_colors=:
515549e21daSmrg}
516549e21daSmrg
517549e21daSmrg
518fe4c343aSmrg## ----------------- ##
519fe4c343aSmrg## Function library. ##
520fe4c343aSmrg## ----------------- ##
521fe4c343aSmrg
522fe4c343aSmrg# This section contains a variety of useful functions to call in your
523fe4c343aSmrg# scripts. Take note of the portable wrappers for features provided by
524fe4c343aSmrg# some modern shells, which will fall back to slower equivalents on
525fe4c343aSmrg# less featureful shells.
526fe4c343aSmrg
527fe4c343aSmrg
528fe4c343aSmrg# func_append VAR VALUE
529fe4c343aSmrg# ---------------------
530fe4c343aSmrg# Append VALUE onto the existing contents of VAR.
531fe4c343aSmrg
532fe4c343aSmrg  # We should try to minimise forks, especially on Windows where they are
533fe4c343aSmrg  # unreasonably slow, so skip the feature probes when bash or zsh are
534fe4c343aSmrg  # being used:
535fe4c343aSmrg  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
536fe4c343aSmrg    : ${_G_HAVE_ARITH_OP="yes"}
537fe4c343aSmrg    : ${_G_HAVE_XSI_OPS="yes"}
538fe4c343aSmrg    # The += operator was introduced in bash 3.1
539fe4c343aSmrg    case $BASH_VERSION in
540fe4c343aSmrg      [12].* | 3.0 | 3.0*) ;;
541fe4c343aSmrg      *)
542fe4c343aSmrg        : ${_G_HAVE_PLUSEQ_OP="yes"}
543fe4c343aSmrg        ;;
544fe4c343aSmrg    esac
545fe4c343aSmrg  fi
546fe4c343aSmrg
547fe4c343aSmrg  # _G_HAVE_PLUSEQ_OP
548fe4c343aSmrg  # Can be empty, in which case the shell is probed, "yes" if += is
549fe4c343aSmrg  # useable or anything else if it does not work.
550fe4c343aSmrg  test -z "$_G_HAVE_PLUSEQ_OP" \
551fe4c343aSmrg    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
552fe4c343aSmrg    && _G_HAVE_PLUSEQ_OP=yes
553fe4c343aSmrg
554fe4c343aSmrgif test yes = "$_G_HAVE_PLUSEQ_OP"
555fe4c343aSmrgthen
556fe4c343aSmrg  # This is an XSI compatible shell, allowing a faster implementation...
557fe4c343aSmrg  eval 'func_append ()
558fe4c343aSmrg  {
559fe4c343aSmrg    $debug_cmd
560fe4c343aSmrg
561fe4c343aSmrg    eval "$1+=\$2"
562fe4c343aSmrg  }'
563fe4c343aSmrgelse
564fe4c343aSmrg  # ...otherwise fall back to using expr, which is often a shell builtin.
565fe4c343aSmrg  func_append ()
566fe4c343aSmrg  {
567fe4c343aSmrg    $debug_cmd
568fe4c343aSmrg
569fe4c343aSmrg    eval "$1=\$$1\$2"
570fe4c343aSmrg  }
571fe4c343aSmrgfi
572fe4c343aSmrg
573fe4c343aSmrg
574fe4c343aSmrg# func_append_quoted VAR VALUE
575fe4c343aSmrg# ----------------------------
576fe4c343aSmrg# Quote VALUE and append to the end of shell variable VAR, separated
577fe4c343aSmrg# by a space.
578fe4c343aSmrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then
579fe4c343aSmrg  eval 'func_append_quoted ()
580fe4c343aSmrg  {
581fe4c343aSmrg    $debug_cmd
582fe4c343aSmrg
583fe4c343aSmrg    func_quote_for_eval "$2"
584fe4c343aSmrg    eval "$1+=\\ \$func_quote_for_eval_result"
585fe4c343aSmrg  }'
586fe4c343aSmrgelse
587fe4c343aSmrg  func_append_quoted ()
588fe4c343aSmrg  {
589fe4c343aSmrg    $debug_cmd
590fe4c343aSmrg
591fe4c343aSmrg    func_quote_for_eval "$2"
592fe4c343aSmrg    eval "$1=\$$1\\ \$func_quote_for_eval_result"
593fe4c343aSmrg  }
594fe4c343aSmrgfi
595fe4c343aSmrg
596fe4c343aSmrg
597fe4c343aSmrg# func_append_uniq VAR VALUE
598fe4c343aSmrg# --------------------------
599fe4c343aSmrg# Append unique VALUE onto the existing contents of VAR, assuming
600fe4c343aSmrg# entries are delimited by the first character of VALUE.  For example:
601fe4c343aSmrg#
602fe4c343aSmrg#   func_append_uniq options " --another-option option-argument"
603fe4c343aSmrg#
604fe4c343aSmrg# will only append to $options if " --another-option option-argument "
605fe4c343aSmrg# is not already present somewhere in $options already (note spaces at
606fe4c343aSmrg# each end implied by leading space in second argument).
607fe4c343aSmrgfunc_append_uniq ()
608fe4c343aSmrg{
609fe4c343aSmrg    $debug_cmd
610fe4c343aSmrg
611fe4c343aSmrg    eval _G_current_value='`$ECHO $'$1'`'
612fe4c343aSmrg    _G_delim=`expr "$2" : '\(.\)'`
613fe4c343aSmrg
614fe4c343aSmrg    case $_G_delim$_G_current_value$_G_delim in
615fe4c343aSmrg      *"$2$_G_delim"*) ;;
616fe4c343aSmrg      *) func_append "$@" ;;
617fe4c343aSmrg    esac
618fe4c343aSmrg}
619fe4c343aSmrg
620fe4c343aSmrg
621fe4c343aSmrg# func_arith TERM...
622fe4c343aSmrg# ------------------
623fe4c343aSmrg# Set func_arith_result to the result of evaluating TERMs.
624fe4c343aSmrg  test -z "$_G_HAVE_ARITH_OP" \
625fe4c343aSmrg    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
626fe4c343aSmrg    && _G_HAVE_ARITH_OP=yes
627fe4c343aSmrg
628fe4c343aSmrgif test yes = "$_G_HAVE_ARITH_OP"; then
629fe4c343aSmrg  eval 'func_arith ()
630fe4c343aSmrg  {
631fe4c343aSmrg    $debug_cmd
632fe4c343aSmrg
633fe4c343aSmrg    func_arith_result=$(( $* ))
634fe4c343aSmrg  }'
635fe4c343aSmrgelse
636fe4c343aSmrg  func_arith ()
637fe4c343aSmrg  {
638fe4c343aSmrg    $debug_cmd
639fe4c343aSmrg
640fe4c343aSmrg    func_arith_result=`expr "$@"`
641fe4c343aSmrg  }
642fe4c343aSmrgfi
643fe4c343aSmrg
644fe4c343aSmrg
645fe4c343aSmrg# func_basename FILE
646fe4c343aSmrg# ------------------
647fe4c343aSmrg# Set func_basename_result to FILE with everything up to and including
648fe4c343aSmrg# the last / stripped.
649fe4c343aSmrgif test yes = "$_G_HAVE_XSI_OPS"; then
650fe4c343aSmrg  # If this shell supports suffix pattern removal, then use it to avoid
651fe4c343aSmrg  # forking. Hide the definitions single quotes in case the shell chokes
652fe4c343aSmrg  # on unsupported syntax...
653fe4c343aSmrg  _b='func_basename_result=${1##*/}'
654fe4c343aSmrg  _d='case $1 in
655fe4c343aSmrg        */*) func_dirname_result=${1%/*}$2 ;;
656fe4c343aSmrg        *  ) func_dirname_result=$3        ;;
657fe4c343aSmrg      esac'
658fe4c343aSmrg
659fe4c343aSmrgelse
660fe4c343aSmrg  # ...otherwise fall back to using sed.
661fe4c343aSmrg  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
662fe4c343aSmrg  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
663fe4c343aSmrg      if test "X$func_dirname_result" = "X$1"; then
664fe4c343aSmrg        func_dirname_result=$3
665fe4c343aSmrg      else
666fe4c343aSmrg        func_append func_dirname_result "$2"
667fe4c343aSmrg      fi'
668fe4c343aSmrgfi
669fe4c343aSmrg
670fe4c343aSmrgeval 'func_basename ()
671fe4c343aSmrg{
672fe4c343aSmrg    $debug_cmd
673fe4c343aSmrg
674fe4c343aSmrg    '"$_b"'
675fe4c343aSmrg}'
676fe4c343aSmrg
677fe4c343aSmrg
678fe4c343aSmrg# func_dirname FILE APPEND NONDIR_REPLACEMENT
679fe4c343aSmrg# -------------------------------------------
680fe4c343aSmrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
681fe4c343aSmrg# otherwise set result to NONDIR_REPLACEMENT.
682fe4c343aSmrgeval 'func_dirname ()
683fe4c343aSmrg{
684fe4c343aSmrg    $debug_cmd
685fe4c343aSmrg
686fe4c343aSmrg    '"$_d"'
687fe4c343aSmrg}'
688fe4c343aSmrg
689fe4c343aSmrg
690fe4c343aSmrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
691fe4c343aSmrg# --------------------------------------------------------
692fe4c343aSmrg# Perform func_basename and func_dirname in a single function
693fe4c343aSmrg# call:
694fe4c343aSmrg#   dirname:  Compute the dirname of FILE.  If nonempty,
695fe4c343aSmrg#             add APPEND to the result, otherwise set result
696fe4c343aSmrg#             to NONDIR_REPLACEMENT.
697fe4c343aSmrg#             value returned in "$func_dirname_result"
698fe4c343aSmrg#   basename: Compute filename of FILE.
699fe4c343aSmrg#             value retuned in "$func_basename_result"
700fe4c343aSmrg# For efficiency, we do not delegate to the functions above but instead
701fe4c343aSmrg# duplicate the functionality here.
702fe4c343aSmrgeval 'func_dirname_and_basename ()
703fe4c343aSmrg{
704fe4c343aSmrg    $debug_cmd
705fe4c343aSmrg
706fe4c343aSmrg    '"$_b"'
707fe4c343aSmrg    '"$_d"'
708fe4c343aSmrg}'
709fe4c343aSmrg
710fe4c343aSmrg
711fe4c343aSmrg# func_echo ARG...
712fe4c343aSmrg# ----------------
713fe4c343aSmrg# Echo program name prefixed message.
714fe4c343aSmrgfunc_echo ()
715fe4c343aSmrg{
716fe4c343aSmrg    $debug_cmd
717fe4c343aSmrg
718fe4c343aSmrg    _G_message=$*
719fe4c343aSmrg
720fe4c343aSmrg    func_echo_IFS=$IFS
721fe4c343aSmrg    IFS=$nl
722fe4c343aSmrg    for _G_line in $_G_message; do
723fe4c343aSmrg      IFS=$func_echo_IFS
724fe4c343aSmrg      $ECHO "$progname: $_G_line"
725fe4c343aSmrg    done
726fe4c343aSmrg    IFS=$func_echo_IFS
727fe4c343aSmrg}
728fe4c343aSmrg
729fe4c343aSmrg
730fe4c343aSmrg# func_echo_all ARG...
731fe4c343aSmrg# --------------------
732fe4c343aSmrg# Invoke $ECHO with all args, space-separated.
733fe4c343aSmrgfunc_echo_all ()
734fe4c343aSmrg{
735fe4c343aSmrg    $ECHO "$*"
736fe4c343aSmrg}
737fe4c343aSmrg
738fe4c343aSmrg
739fe4c343aSmrg# func_echo_infix_1 INFIX ARG...
740fe4c343aSmrg# ------------------------------
741fe4c343aSmrg# Echo program name, followed by INFIX on the first line, with any
742fe4c343aSmrg# additional lines not showing INFIX.
743fe4c343aSmrgfunc_echo_infix_1 ()
744fe4c343aSmrg{
745fe4c343aSmrg    $debug_cmd
746fe4c343aSmrg
747fe4c343aSmrg    $require_term_colors
748fe4c343aSmrg
749fe4c343aSmrg    _G_infix=$1; shift
750fe4c343aSmrg    _G_indent=$_G_infix
751fe4c343aSmrg    _G_prefix="$progname: $_G_infix: "
752fe4c343aSmrg    _G_message=$*
753fe4c343aSmrg
754fe4c343aSmrg    # Strip color escape sequences before counting printable length
755fe4c343aSmrg    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
756fe4c343aSmrg    do
757fe4c343aSmrg      test -n "$_G_tc" && {
758fe4c343aSmrg        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
759fe4c343aSmrg        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
760fe4c343aSmrg      }
761fe4c343aSmrg    done
762fe4c343aSmrg    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
763fe4c343aSmrg
764fe4c343aSmrg    func_echo_infix_1_IFS=$IFS
765fe4c343aSmrg    IFS=$nl
766fe4c343aSmrg    for _G_line in $_G_message; do
767fe4c343aSmrg      IFS=$func_echo_infix_1_IFS
768fe4c343aSmrg      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
769fe4c343aSmrg      _G_prefix=$_G_indent
770fe4c343aSmrg    done
771fe4c343aSmrg    IFS=$func_echo_infix_1_IFS
772fe4c343aSmrg}
773fe4c343aSmrg
774fe4c343aSmrg
775fe4c343aSmrg# func_error ARG...
776fe4c343aSmrg# -----------------
777fe4c343aSmrg# Echo program name prefixed message to standard error.
778fe4c343aSmrgfunc_error ()
779fe4c343aSmrg{
780fe4c343aSmrg    $debug_cmd
781fe4c343aSmrg
782fe4c343aSmrg    $require_term_colors
783fe4c343aSmrg
784fe4c343aSmrg    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
785fe4c343aSmrg}
786fe4c343aSmrg
787fe4c343aSmrg
788fe4c343aSmrg# func_fatal_error ARG...
789fe4c343aSmrg# -----------------------
790fe4c343aSmrg# Echo program name prefixed message to standard error, and exit.
791fe4c343aSmrgfunc_fatal_error ()
792fe4c343aSmrg{
793fe4c343aSmrg    $debug_cmd
794fe4c343aSmrg
795fe4c343aSmrg    func_error "$*"
796fe4c343aSmrg    exit $EXIT_FAILURE
797fe4c343aSmrg}
798fe4c343aSmrg
799fe4c343aSmrg
800fe4c343aSmrg# func_grep EXPRESSION FILENAME
801fe4c343aSmrg# -----------------------------
802549e21daSmrg# Check whether EXPRESSION matches any line of FILENAME, without output.
803549e21daSmrgfunc_grep ()
804549e21daSmrg{
805fe4c343aSmrg    $debug_cmd
806fe4c343aSmrg
807549e21daSmrg    $GREP "$1" "$2" >/dev/null 2>&1
808549e21daSmrg}
809549e21daSmrg
810549e21daSmrg
811fe4c343aSmrg# func_len STRING
812fe4c343aSmrg# ---------------
813fe4c343aSmrg# Set func_len_result to the length of STRING. STRING may not
814fe4c343aSmrg# start with a hyphen.
815fe4c343aSmrg  test -z "$_G_HAVE_XSI_OPS" \
816fe4c343aSmrg    && (eval 'x=a/b/c;
817fe4c343aSmrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
818fe4c343aSmrg    && _G_HAVE_XSI_OPS=yes
819fe4c343aSmrg
820fe4c343aSmrgif test yes = "$_G_HAVE_XSI_OPS"; then
821fe4c343aSmrg  eval 'func_len ()
822fe4c343aSmrg  {
823fe4c343aSmrg    $debug_cmd
824fe4c343aSmrg
825fe4c343aSmrg    func_len_result=${#1}
826fe4c343aSmrg  }'
827fe4c343aSmrgelse
828fe4c343aSmrg  func_len ()
829fe4c343aSmrg  {
830fe4c343aSmrg    $debug_cmd
831fe4c343aSmrg
832fe4c343aSmrg    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
833fe4c343aSmrg  }
834fe4c343aSmrgfi
835fe4c343aSmrg
836fe4c343aSmrg
837fe4c343aSmrg# func_mkdir_p DIRECTORY-PATH
838fe4c343aSmrg# ---------------------------
839549e21daSmrg# Make sure the entire path to DIRECTORY-PATH is available.
840549e21daSmrgfunc_mkdir_p ()
841549e21daSmrg{
842fe4c343aSmrg    $debug_cmd
843549e21daSmrg
844fe4c343aSmrg    _G_directory_path=$1
845fe4c343aSmrg    _G_dir_list=
846549e21daSmrg
847fe4c343aSmrg    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
848fe4c343aSmrg
849fe4c343aSmrg      # Protect directory names starting with '-'
850fe4c343aSmrg      case $_G_directory_path in
851fe4c343aSmrg        -*) _G_directory_path=./$_G_directory_path ;;
852549e21daSmrg      esac
853549e21daSmrg
854549e21daSmrg      # While some portion of DIR does not yet exist...
855fe4c343aSmrg      while test ! -d "$_G_directory_path"; do
856549e21daSmrg        # ...make a list in topmost first order.  Use a colon delimited
857549e21daSmrg	# list incase some portion of path contains whitespace.
858fe4c343aSmrg        _G_dir_list=$_G_directory_path:$_G_dir_list
859549e21daSmrg
860549e21daSmrg        # If the last portion added has no slash in it, the list is done
861fe4c343aSmrg        case $_G_directory_path in */*) ;; *) break ;; esac
862549e21daSmrg
863549e21daSmrg        # ...otherwise throw away the child directory and loop
864fe4c343aSmrg        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
865549e21daSmrg      done
866fe4c343aSmrg      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
867549e21daSmrg
868fe4c343aSmrg      func_mkdir_p_IFS=$IFS; IFS=:
869fe4c343aSmrg      for _G_dir in $_G_dir_list; do
870fe4c343aSmrg	IFS=$func_mkdir_p_IFS
871fe4c343aSmrg        # mkdir can fail with a 'File exist' error if two processes
872549e21daSmrg        # try to create one of the directories concurrently.  Don't
873549e21daSmrg        # stop in that case!
874fe4c343aSmrg        $MKDIR "$_G_dir" 2>/dev/null || :
875549e21daSmrg      done
876fe4c343aSmrg      IFS=$func_mkdir_p_IFS
877549e21daSmrg
878549e21daSmrg      # Bail out if we (or some other process) failed to create a directory.
879fe4c343aSmrg      test -d "$_G_directory_path" || \
880fe4c343aSmrg        func_fatal_error "Failed to create '$1'"
881549e21daSmrg    fi
882549e21daSmrg}
883ba6a1819Smrg
884ba6a1819Smrg
885fe4c343aSmrg# func_mktempdir [BASENAME]
886fe4c343aSmrg# -------------------------
887ba6a1819Smrg# Make a temporary directory that won't clash with other running
888ba6a1819Smrg# libtool processes, and avoids race conditions if possible.  If
889fe4c343aSmrg# given, BASENAME is the basename for that directory.
890ba6a1819Smrgfunc_mktempdir ()
891ba6a1819Smrg{
892fe4c343aSmrg    $debug_cmd
893fe4c343aSmrg
894fe4c343aSmrg    _G_template=${TMPDIR-/tmp}/${1-$progname}
895ba6a1819Smrg
896fe4c343aSmrg    if test : = "$opt_dry_run"; then
897ba6a1819Smrg      # Return a directory name, but don't create it in dry-run mode
898fe4c343aSmrg      _G_tmpdir=$_G_template-$$
899ba6a1819Smrg    else
900ba6a1819Smrg
901ba6a1819Smrg      # If mktemp works, use that first and foremost
902fe4c343aSmrg      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
903ba6a1819Smrg
904fe4c343aSmrg      if test ! -d "$_G_tmpdir"; then
905549e21daSmrg        # Failing that, at least try and use $RANDOM to avoid a race
906fe4c343aSmrg        _G_tmpdir=$_G_template-${RANDOM-0}$$
907ba6a1819Smrg
908fe4c343aSmrg        func_mktempdir_umask=`umask`
909549e21daSmrg        umask 0077
910fe4c343aSmrg        $MKDIR "$_G_tmpdir"
911fe4c343aSmrg        umask $func_mktempdir_umask
912ba6a1819Smrg      fi
913ba6a1819Smrg
914ba6a1819Smrg      # If we're not in dry-run mode, bomb out on failure
915fe4c343aSmrg      test -d "$_G_tmpdir" || \
916fe4c343aSmrg        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
917fe4c343aSmrg    fi
918fe4c343aSmrg
919fe4c343aSmrg    $ECHO "$_G_tmpdir"
920fe4c343aSmrg}
921fe4c343aSmrg
922fe4c343aSmrg
923fe4c343aSmrg# func_normal_abspath PATH
924fe4c343aSmrg# ------------------------
925fe4c343aSmrg# Remove doubled-up and trailing slashes, "." path components,
926fe4c343aSmrg# and cancel out any ".." path components in PATH after making
927fe4c343aSmrg# it an absolute path.
928fe4c343aSmrgfunc_normal_abspath ()
929fe4c343aSmrg{
930fe4c343aSmrg    $debug_cmd
931fe4c343aSmrg
932fe4c343aSmrg    # These SED scripts presuppose an absolute path with a trailing slash.
933fe4c343aSmrg    _G_pathcar='s|^/\([^/]*\).*$|\1|'
934fe4c343aSmrg    _G_pathcdr='s|^/[^/]*||'
935fe4c343aSmrg    _G_removedotparts=':dotsl
936fe4c343aSmrg		s|/\./|/|g
937fe4c343aSmrg		t dotsl
938fe4c343aSmrg		s|/\.$|/|'
939fe4c343aSmrg    _G_collapseslashes='s|/\{1,\}|/|g'
940fe4c343aSmrg    _G_finalslash='s|/*$|/|'
941fe4c343aSmrg
942fe4c343aSmrg    # Start from root dir and reassemble the path.
943fe4c343aSmrg    func_normal_abspath_result=
944fe4c343aSmrg    func_normal_abspath_tpath=$1
945fe4c343aSmrg    func_normal_abspath_altnamespace=
946fe4c343aSmrg    case $func_normal_abspath_tpath in
947fe4c343aSmrg      "")
948fe4c343aSmrg        # Empty path, that just means $cwd.
949fe4c343aSmrg        func_stripname '' '/' "`pwd`"
950fe4c343aSmrg        func_normal_abspath_result=$func_stripname_result
951fe4c343aSmrg        return
952fe4c343aSmrg        ;;
953fe4c343aSmrg      # The next three entries are used to spot a run of precisely
954fe4c343aSmrg      # two leading slashes without using negated character classes;
955fe4c343aSmrg      # we take advantage of case's first-match behaviour.
956fe4c343aSmrg      ///*)
957fe4c343aSmrg        # Unusual form of absolute path, do nothing.
958fe4c343aSmrg        ;;
959fe4c343aSmrg      //*)
960fe4c343aSmrg        # Not necessarily an ordinary path; POSIX reserves leading '//'
961fe4c343aSmrg        # and for example Cygwin uses it to access remote file shares
962fe4c343aSmrg        # over CIFS/SMB, so we conserve a leading double slash if found.
963fe4c343aSmrg        func_normal_abspath_altnamespace=/
964fe4c343aSmrg        ;;
965fe4c343aSmrg      /*)
966fe4c343aSmrg        # Absolute path, do nothing.
967fe4c343aSmrg        ;;
968fe4c343aSmrg      *)
969fe4c343aSmrg        # Relative path, prepend $cwd.
970fe4c343aSmrg        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
971fe4c343aSmrg        ;;
972fe4c343aSmrg    esac
973fe4c343aSmrg
974fe4c343aSmrg    # Cancel out all the simple stuff to save iterations.  We also want
975fe4c343aSmrg    # the path to end with a slash for ease of parsing, so make sure
976fe4c343aSmrg    # there is one (and only one) here.
977fe4c343aSmrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
978fe4c343aSmrg          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
979fe4c343aSmrg    while :; do
980fe4c343aSmrg      # Processed it all yet?
981fe4c343aSmrg      if test / = "$func_normal_abspath_tpath"; then
982fe4c343aSmrg        # If we ascended to the root using ".." the result may be empty now.
983fe4c343aSmrg        if test -z "$func_normal_abspath_result"; then
984fe4c343aSmrg          func_normal_abspath_result=/
985fe4c343aSmrg        fi
986fe4c343aSmrg        break
987fe4c343aSmrg      fi
988fe4c343aSmrg      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
989fe4c343aSmrg          -e "$_G_pathcar"`
990fe4c343aSmrg      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
991fe4c343aSmrg          -e "$_G_pathcdr"`
992fe4c343aSmrg      # Figure out what to do with it
993fe4c343aSmrg      case $func_normal_abspath_tcomponent in
994fe4c343aSmrg        "")
995fe4c343aSmrg          # Trailing empty path component, ignore it.
996fe4c343aSmrg          ;;
997fe4c343aSmrg        ..)
998fe4c343aSmrg          # Parent dir; strip last assembled component from result.
999fe4c343aSmrg          func_dirname "$func_normal_abspath_result"
1000fe4c343aSmrg          func_normal_abspath_result=$func_dirname_result
1001fe4c343aSmrg          ;;
1002fe4c343aSmrg        *)
1003fe4c343aSmrg          # Actual path component, append it.
1004fe4c343aSmrg          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
1005fe4c343aSmrg          ;;
1006fe4c343aSmrg      esac
1007fe4c343aSmrg    done
1008fe4c343aSmrg    # Restore leading double-slash if one was found on entry.
1009fe4c343aSmrg    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
1010fe4c343aSmrg}
1011fe4c343aSmrg
1012fe4c343aSmrg
1013fe4c343aSmrg# func_notquiet ARG...
1014fe4c343aSmrg# --------------------
1015fe4c343aSmrg# Echo program name prefixed message only when not in quiet mode.
1016fe4c343aSmrgfunc_notquiet ()
1017fe4c343aSmrg{
1018fe4c343aSmrg    $debug_cmd
1019fe4c343aSmrg
1020fe4c343aSmrg    $opt_quiet || func_echo ${1+"$@"}
1021fe4c343aSmrg
1022fe4c343aSmrg    # A bug in bash halts the script if the last line of a function
1023fe4c343aSmrg    # fails when set -e is in force, so we need another command to
1024fe4c343aSmrg    # work around that:
1025fe4c343aSmrg    :
1026fe4c343aSmrg}
1027fe4c343aSmrg
1028fe4c343aSmrg
1029fe4c343aSmrg# func_relative_path SRCDIR DSTDIR
1030fe4c343aSmrg# --------------------------------
1031fe4c343aSmrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
1032fe4c343aSmrgfunc_relative_path ()
1033fe4c343aSmrg{
1034fe4c343aSmrg    $debug_cmd
1035fe4c343aSmrg
1036fe4c343aSmrg    func_relative_path_result=
1037fe4c343aSmrg    func_normal_abspath "$1"
1038fe4c343aSmrg    func_relative_path_tlibdir=$func_normal_abspath_result
1039fe4c343aSmrg    func_normal_abspath "$2"
1040fe4c343aSmrg    func_relative_path_tbindir=$func_normal_abspath_result
1041fe4c343aSmrg
1042fe4c343aSmrg    # Ascend the tree starting from libdir
1043fe4c343aSmrg    while :; do
1044fe4c343aSmrg      # check if we have found a prefix of bindir
1045fe4c343aSmrg      case $func_relative_path_tbindir in
1046fe4c343aSmrg        $func_relative_path_tlibdir)
1047fe4c343aSmrg          # found an exact match
1048fe4c343aSmrg          func_relative_path_tcancelled=
1049fe4c343aSmrg          break
1050fe4c343aSmrg          ;;
1051fe4c343aSmrg        $func_relative_path_tlibdir*)
1052fe4c343aSmrg          # found a matching prefix
1053fe4c343aSmrg          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
1054fe4c343aSmrg          func_relative_path_tcancelled=$func_stripname_result
1055fe4c343aSmrg          if test -z "$func_relative_path_result"; then
1056fe4c343aSmrg            func_relative_path_result=.
1057fe4c343aSmrg          fi
1058fe4c343aSmrg          break
1059fe4c343aSmrg          ;;
1060fe4c343aSmrg        *)
1061fe4c343aSmrg          func_dirname $func_relative_path_tlibdir
1062fe4c343aSmrg          func_relative_path_tlibdir=$func_dirname_result
1063fe4c343aSmrg          if test -z "$func_relative_path_tlibdir"; then
1064fe4c343aSmrg            # Have to descend all the way to the root!
1065fe4c343aSmrg            func_relative_path_result=../$func_relative_path_result
1066fe4c343aSmrg            func_relative_path_tcancelled=$func_relative_path_tbindir
1067fe4c343aSmrg            break
1068fe4c343aSmrg          fi
1069fe4c343aSmrg          func_relative_path_result=../$func_relative_path_result
1070fe4c343aSmrg          ;;
1071fe4c343aSmrg      esac
1072fe4c343aSmrg    done
1073fe4c343aSmrg
1074fe4c343aSmrg    # Now calculate path; take care to avoid doubling-up slashes.
1075fe4c343aSmrg    func_stripname '' '/' "$func_relative_path_result"
1076fe4c343aSmrg    func_relative_path_result=$func_stripname_result
1077fe4c343aSmrg    func_stripname '/' '/' "$func_relative_path_tcancelled"
1078fe4c343aSmrg    if test -n "$func_stripname_result"; then
1079fe4c343aSmrg      func_append func_relative_path_result "/$func_stripname_result"
1080fe4c343aSmrg    fi
1081fe4c343aSmrg
1082fe4c343aSmrg    # Normalisation. If bindir is libdir, return '.' else relative path.
1083fe4c343aSmrg    if test -n "$func_relative_path_result"; then
1084fe4c343aSmrg      func_stripname './' '' "$func_relative_path_result"
1085fe4c343aSmrg      func_relative_path_result=$func_stripname_result
1086ba6a1819Smrg    fi
1087ba6a1819Smrg
1088fe4c343aSmrg    test -n "$func_relative_path_result" || func_relative_path_result=.
1089fe4c343aSmrg
1090fe4c343aSmrg    :
1091fe4c343aSmrg}
1092fe4c343aSmrg
1093fe4c343aSmrg
1094fe4c343aSmrg# func_quote_for_eval ARG...
1095fe4c343aSmrg# --------------------------
1096fe4c343aSmrg# Aesthetically quote ARGs to be evaled later.
1097fe4c343aSmrg# This function returns two values:
1098fe4c343aSmrg#   i) func_quote_for_eval_result
1099fe4c343aSmrg#      double-quoted, suitable for a subsequent eval
1100fe4c343aSmrg#  ii) func_quote_for_eval_unquoted_result
1101fe4c343aSmrg#      has all characters that are still active within double
1102fe4c343aSmrg#      quotes backslashified.
1103fe4c343aSmrgfunc_quote_for_eval ()
1104fe4c343aSmrg{
1105fe4c343aSmrg    $debug_cmd
1106fe4c343aSmrg
1107fe4c343aSmrg    func_quote_for_eval_unquoted_result=
1108fe4c343aSmrg    func_quote_for_eval_result=
1109fe4c343aSmrg    while test 0 -lt $#; do
1110fe4c343aSmrg      case $1 in
1111fe4c343aSmrg        *[\\\`\"\$]*)
1112fe4c343aSmrg	  _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
1113fe4c343aSmrg        *)
1114fe4c343aSmrg          _G_unquoted_arg=$1 ;;
1115fe4c343aSmrg      esac
1116fe4c343aSmrg      if test -n "$func_quote_for_eval_unquoted_result"; then
1117fe4c343aSmrg	func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
1118fe4c343aSmrg      else
1119fe4c343aSmrg        func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
1120fe4c343aSmrg      fi
1121fe4c343aSmrg
1122fe4c343aSmrg      case $_G_unquoted_arg in
1123fe4c343aSmrg        # Double-quote args containing shell metacharacters to delay
1124fe4c343aSmrg        # word splitting, command substitution and variable expansion
1125fe4c343aSmrg        # for a subsequent eval.
1126fe4c343aSmrg        # Many Bourne shells cannot handle close brackets correctly
1127fe4c343aSmrg        # in scan sets, so we specify it separately.
1128fe4c343aSmrg        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
1129fe4c343aSmrg          _G_quoted_arg=\"$_G_unquoted_arg\"
1130fe4c343aSmrg          ;;
1131fe4c343aSmrg        *)
1132fe4c343aSmrg          _G_quoted_arg=$_G_unquoted_arg
1133fe4c343aSmrg	  ;;
1134fe4c343aSmrg      esac
1135fe4c343aSmrg
1136fe4c343aSmrg      if test -n "$func_quote_for_eval_result"; then
1137fe4c343aSmrg	func_append func_quote_for_eval_result " $_G_quoted_arg"
1138fe4c343aSmrg      else
1139fe4c343aSmrg        func_append func_quote_for_eval_result "$_G_quoted_arg"
1140fe4c343aSmrg      fi
1141fe4c343aSmrg      shift
1142fe4c343aSmrg    done
1143fe4c343aSmrg}
1144fe4c343aSmrg
1145fe4c343aSmrg
1146fe4c343aSmrg# func_quote_for_expand ARG
1147fe4c343aSmrg# -------------------------
1148fe4c343aSmrg# Aesthetically quote ARG to be evaled later; same as above,
1149fe4c343aSmrg# but do not quote variable references.
1150fe4c343aSmrgfunc_quote_for_expand ()
1151fe4c343aSmrg{
1152fe4c343aSmrg    $debug_cmd
1153fe4c343aSmrg
1154fe4c343aSmrg    case $1 in
1155fe4c343aSmrg      *[\\\`\"]*)
1156fe4c343aSmrg	_G_arg=`$ECHO "$1" | $SED \
1157fe4c343aSmrg	    -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
1158fe4c343aSmrg      *)
1159fe4c343aSmrg        _G_arg=$1 ;;
1160fe4c343aSmrg    esac
1161fe4c343aSmrg
1162fe4c343aSmrg    case $_G_arg in
1163fe4c343aSmrg      # Double-quote args containing shell metacharacters to delay
1164fe4c343aSmrg      # word splitting and command substitution for a subsequent eval.
1165fe4c343aSmrg      # Many Bourne shells cannot handle close brackets correctly
1166fe4c343aSmrg      # in scan sets, so we specify it separately.
1167fe4c343aSmrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
1168fe4c343aSmrg        _G_arg=\"$_G_arg\"
1169fe4c343aSmrg        ;;
1170fe4c343aSmrg    esac
1171fe4c343aSmrg
1172fe4c343aSmrg    func_quote_for_expand_result=$_G_arg
1173fe4c343aSmrg}
1174fe4c343aSmrg
1175fe4c343aSmrg
1176fe4c343aSmrg# func_stripname PREFIX SUFFIX NAME
1177fe4c343aSmrg# ---------------------------------
1178fe4c343aSmrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
1179fe4c343aSmrg# PREFIX and SUFFIX must not contain globbing or regex special
1180fe4c343aSmrg# characters, hashes, percent signs, but SUFFIX may contain a leading
1181fe4c343aSmrg# dot (in which case that matches only a dot).
1182fe4c343aSmrgif test yes = "$_G_HAVE_XSI_OPS"; then
1183fe4c343aSmrg  eval 'func_stripname ()
1184fe4c343aSmrg  {
1185fe4c343aSmrg    $debug_cmd
1186fe4c343aSmrg
1187fe4c343aSmrg    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
1188fe4c343aSmrg    # positional parameters, so assign one to ordinary variable first.
1189fe4c343aSmrg    func_stripname_result=$3
1190fe4c343aSmrg    func_stripname_result=${func_stripname_result#"$1"}
1191fe4c343aSmrg    func_stripname_result=${func_stripname_result%"$2"}
1192fe4c343aSmrg  }'
1193fe4c343aSmrgelse
1194fe4c343aSmrg  func_stripname ()
1195fe4c343aSmrg  {
1196fe4c343aSmrg    $debug_cmd
1197fe4c343aSmrg
1198fe4c343aSmrg    case $2 in
1199fe4c343aSmrg      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
1200fe4c343aSmrg      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
1201fe4c343aSmrg    esac
1202fe4c343aSmrg  }
1203fe4c343aSmrgfi
1204fe4c343aSmrg
1205fe4c343aSmrg
1206fe4c343aSmrg# func_show_eval CMD [FAIL_EXP]
1207fe4c343aSmrg# -----------------------------
1208fe4c343aSmrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
1209fe4c343aSmrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
1210fe4c343aSmrg# is given, then evaluate it.
1211fe4c343aSmrgfunc_show_eval ()
1212fe4c343aSmrg{
1213fe4c343aSmrg    $debug_cmd
1214fe4c343aSmrg
1215fe4c343aSmrg    _G_cmd=$1
1216fe4c343aSmrg    _G_fail_exp=${2-':'}
1217fe4c343aSmrg
1218fe4c343aSmrg    func_quote_for_expand "$_G_cmd"
1219fe4c343aSmrg    eval "func_notquiet $func_quote_for_expand_result"
1220fe4c343aSmrg
1221fe4c343aSmrg    $opt_dry_run || {
1222fe4c343aSmrg      eval "$_G_cmd"
1223fe4c343aSmrg      _G_status=$?
1224fe4c343aSmrg      if test 0 -ne "$_G_status"; then
1225fe4c343aSmrg	eval "(exit $_G_status); $_G_fail_exp"
1226fe4c343aSmrg      fi
1227fe4c343aSmrg    }
1228fe4c343aSmrg}
1229fe4c343aSmrg
1230fe4c343aSmrg
1231fe4c343aSmrg# func_show_eval_locale CMD [FAIL_EXP]
1232fe4c343aSmrg# ------------------------------------
1233fe4c343aSmrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
1234fe4c343aSmrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
1235fe4c343aSmrg# is given, then evaluate it.  Use the saved locale for evaluation.
1236fe4c343aSmrgfunc_show_eval_locale ()
1237fe4c343aSmrg{
1238fe4c343aSmrg    $debug_cmd
1239fe4c343aSmrg
1240fe4c343aSmrg    _G_cmd=$1
1241fe4c343aSmrg    _G_fail_exp=${2-':'}
1242fe4c343aSmrg
1243fe4c343aSmrg    $opt_quiet || {
1244fe4c343aSmrg      func_quote_for_expand "$_G_cmd"
1245fe4c343aSmrg      eval "func_echo $func_quote_for_expand_result"
1246fe4c343aSmrg    }
1247fe4c343aSmrg
1248fe4c343aSmrg    $opt_dry_run || {
1249fe4c343aSmrg      eval "$_G_user_locale
1250fe4c343aSmrg	    $_G_cmd"
1251fe4c343aSmrg      _G_status=$?
1252fe4c343aSmrg      eval "$_G_safe_locale"
1253fe4c343aSmrg      if test 0 -ne "$_G_status"; then
1254fe4c343aSmrg	eval "(exit $_G_status); $_G_fail_exp"
1255fe4c343aSmrg      fi
1256fe4c343aSmrg    }
1257fe4c343aSmrg}
1258fe4c343aSmrg
1259fe4c343aSmrg
1260fe4c343aSmrg# func_tr_sh
1261fe4c343aSmrg# ----------
1262fe4c343aSmrg# Turn $1 into a string suitable for a shell variable name.
1263fe4c343aSmrg# Result is stored in $func_tr_sh_result.  All characters
1264fe4c343aSmrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
1265fe4c343aSmrg# if $1 begins with a digit, a '_' is prepended as well.
1266fe4c343aSmrgfunc_tr_sh ()
1267fe4c343aSmrg{
1268fe4c343aSmrg    $debug_cmd
1269fe4c343aSmrg
1270fe4c343aSmrg    case $1 in
1271fe4c343aSmrg    [0-9]* | *[!a-zA-Z0-9_]*)
1272fe4c343aSmrg      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
1273fe4c343aSmrg      ;;
1274fe4c343aSmrg    * )
1275fe4c343aSmrg      func_tr_sh_result=$1
1276fe4c343aSmrg      ;;
1277fe4c343aSmrg    esac
1278fe4c343aSmrg}
1279fe4c343aSmrg
1280fe4c343aSmrg
1281fe4c343aSmrg# func_verbose ARG...
1282fe4c343aSmrg# -------------------
1283fe4c343aSmrg# Echo program name prefixed message in verbose mode only.
1284fe4c343aSmrgfunc_verbose ()
1285fe4c343aSmrg{
1286fe4c343aSmrg    $debug_cmd
1287fe4c343aSmrg
1288fe4c343aSmrg    $opt_verbose && func_echo "$*"
1289fe4c343aSmrg
1290fe4c343aSmrg    :
1291fe4c343aSmrg}
1292fe4c343aSmrg
1293fe4c343aSmrg
1294fe4c343aSmrg# func_warn_and_continue ARG...
1295fe4c343aSmrg# -----------------------------
1296fe4c343aSmrg# Echo program name prefixed warning message to standard error.
1297fe4c343aSmrgfunc_warn_and_continue ()
1298fe4c343aSmrg{
1299fe4c343aSmrg    $debug_cmd
1300fe4c343aSmrg
1301fe4c343aSmrg    $require_term_colors
1302fe4c343aSmrg
1303fe4c343aSmrg    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
1304fe4c343aSmrg}
1305fe4c343aSmrg
1306fe4c343aSmrg
1307fe4c343aSmrg# func_warning CATEGORY ARG...
1308fe4c343aSmrg# ----------------------------
1309fe4c343aSmrg# Echo program name prefixed warning message to standard error. Warning
1310fe4c343aSmrg# messages can be filtered according to CATEGORY, where this function
1311fe4c343aSmrg# elides messages where CATEGORY is not listed in the global variable
1312fe4c343aSmrg# 'opt_warning_types'.
1313fe4c343aSmrgfunc_warning ()
1314fe4c343aSmrg{
1315fe4c343aSmrg    $debug_cmd
1316fe4c343aSmrg
1317fe4c343aSmrg    # CATEGORY must be in the warning_categories list!
1318fe4c343aSmrg    case " $warning_categories " in
1319fe4c343aSmrg      *" $1 "*) ;;
1320fe4c343aSmrg      *) func_internal_error "invalid warning category '$1'" ;;
1321fe4c343aSmrg    esac
1322fe4c343aSmrg
1323fe4c343aSmrg    _G_category=$1
1324fe4c343aSmrg    shift
1325fe4c343aSmrg
1326fe4c343aSmrg    case " $opt_warning_types " in
1327fe4c343aSmrg      *" $_G_category "*) $warning_func ${1+"$@"} ;;
1328fe4c343aSmrg    esac
1329fe4c343aSmrg}
1330fe4c343aSmrg
1331fe4c343aSmrg
1332fe4c343aSmrg# func_sort_ver VER1 VER2
1333fe4c343aSmrg# -----------------------
1334fe4c343aSmrg# 'sort -V' is not generally available.
1335fe4c343aSmrg# Note this deviates from the version comparison in automake
1336fe4c343aSmrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
1337fe4c343aSmrg# but this should suffice as we won't be specifying old
1338fe4c343aSmrg# version formats or redundant trailing .0 in bootstrap.conf.
1339fe4c343aSmrg# If we did want full compatibility then we should probably
1340fe4c343aSmrg# use m4_version_compare from autoconf.
1341fe4c343aSmrgfunc_sort_ver ()
1342fe4c343aSmrg{
1343fe4c343aSmrg    $debug_cmd
1344fe4c343aSmrg
1345fe4c343aSmrg    printf '%s\n%s\n' "$1" "$2" \
1346fe4c343aSmrg      | 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
1347fe4c343aSmrg}
1348fe4c343aSmrg
1349fe4c343aSmrg# func_lt_ver PREV CURR
1350fe4c343aSmrg# ---------------------
1351fe4c343aSmrg# Return true if PREV and CURR are in the correct order according to
1352fe4c343aSmrg# func_sort_ver, otherwise false.  Use it like this:
1353fe4c343aSmrg#
1354fe4c343aSmrg#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
1355fe4c343aSmrgfunc_lt_ver ()
1356fe4c343aSmrg{
1357fe4c343aSmrg    $debug_cmd
1358fe4c343aSmrg
1359fe4c343aSmrg    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
1360fe4c343aSmrg}
1361fe4c343aSmrg
1362fe4c343aSmrg
1363fe4c343aSmrg# Local variables:
1364fe4c343aSmrg# mode: shell-script
1365fe4c343aSmrg# sh-indentation: 2
1366fe4c343aSmrg# eval: (add-hook 'before-save-hook 'time-stamp)
1367fe4c343aSmrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
1368fe4c343aSmrg# time-stamp-time-zone: "UTC"
1369fe4c343aSmrg# End:
1370fe4c343aSmrg#! /bin/sh
1371fe4c343aSmrg
1372fe4c343aSmrg# Set a version string for this script.
1373fe4c343aSmrgscriptversion=2014-01-07.03; # UTC
1374fe4c343aSmrg
1375fe4c343aSmrg# A portable, pluggable option parser for Bourne shell.
1376fe4c343aSmrg# Written by Gary V. Vaughan, 2010
1377fe4c343aSmrg
1378fe4c343aSmrg# Copyright (C) 2010-2015 Free Software Foundation, Inc.
1379fe4c343aSmrg# This is free software; see the source for copying conditions.  There is NO
1380fe4c343aSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1381fe4c343aSmrg
1382fe4c343aSmrg# This program is free software: you can redistribute it and/or modify
1383fe4c343aSmrg# it under the terms of the GNU General Public License as published by
1384fe4c343aSmrg# the Free Software Foundation, either version 3 of the License, or
1385fe4c343aSmrg# (at your option) any later version.
1386fe4c343aSmrg
1387fe4c343aSmrg# This program is distributed in the hope that it will be useful,
1388fe4c343aSmrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
1389fe4c343aSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1390fe4c343aSmrg# GNU General Public License for more details.
1391fe4c343aSmrg
1392fe4c343aSmrg# You should have received a copy of the GNU General Public License
1393fe4c343aSmrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
1394fe4c343aSmrg
1395fe4c343aSmrg# Please report bugs or propose patches to gary@gnu.org.
1396fe4c343aSmrg
1397fe4c343aSmrg
1398fe4c343aSmrg## ------ ##
1399fe4c343aSmrg## Usage. ##
1400fe4c343aSmrg## ------ ##
1401fe4c343aSmrg
1402fe4c343aSmrg# This file is a library for parsing options in your shell scripts along
1403fe4c343aSmrg# with assorted other useful supporting features that you can make use
1404fe4c343aSmrg# of too.
1405fe4c343aSmrg#
1406fe4c343aSmrg# For the simplest scripts you might need only:
1407fe4c343aSmrg#
1408fe4c343aSmrg#   #!/bin/sh
1409fe4c343aSmrg#   . relative/path/to/funclib.sh
1410fe4c343aSmrg#   . relative/path/to/options-parser
1411fe4c343aSmrg#   scriptversion=1.0
1412fe4c343aSmrg#   func_options ${1+"$@"}
1413fe4c343aSmrg#   eval set dummy "$func_options_result"; shift
1414fe4c343aSmrg#   ...rest of your script...
1415fe4c343aSmrg#
1416fe4c343aSmrg# In order for the '--version' option to work, you will need to have a
1417fe4c343aSmrg# suitably formatted comment like the one at the top of this file
1418fe4c343aSmrg# starting with '# Written by ' and ending with '# warranty; '.
1419fe4c343aSmrg#
1420fe4c343aSmrg# For '-h' and '--help' to work, you will also need a one line
1421fe4c343aSmrg# description of your script's purpose in a comment directly above the
1422fe4c343aSmrg# '# Written by ' line, like the one at the top of this file.
1423fe4c343aSmrg#
1424fe4c343aSmrg# The default options also support '--debug', which will turn on shell
1425fe4c343aSmrg# execution tracing (see the comment above debug_cmd below for another
1426fe4c343aSmrg# use), and '--verbose' and the func_verbose function to allow your script
1427fe4c343aSmrg# to display verbose messages only when your user has specified
1428fe4c343aSmrg# '--verbose'.
1429fe4c343aSmrg#
1430fe4c343aSmrg# After sourcing this file, you can plug processing for additional
1431fe4c343aSmrg# options by amending the variables from the 'Configuration' section
1432fe4c343aSmrg# below, and following the instructions in the 'Option parsing'
1433fe4c343aSmrg# section further down.
1434fe4c343aSmrg
1435fe4c343aSmrg## -------------- ##
1436fe4c343aSmrg## Configuration. ##
1437fe4c343aSmrg## -------------- ##
1438fe4c343aSmrg
1439fe4c343aSmrg# You should override these variables in your script after sourcing this
1440fe4c343aSmrg# file so that they reflect the customisations you have added to the
1441fe4c343aSmrg# option parser.
1442fe4c343aSmrg
1443fe4c343aSmrg# The usage line for option parsing errors and the start of '-h' and
1444fe4c343aSmrg# '--help' output messages. You can embed shell variables for delayed
1445fe4c343aSmrg# expansion at the time the message is displayed, but you will need to
1446fe4c343aSmrg# quote other shell meta-characters carefully to prevent them being
1447fe4c343aSmrg# expanded when the contents are evaled.
1448fe4c343aSmrgusage='$progpath [OPTION]...'
1449fe4c343aSmrg
1450fe4c343aSmrg# Short help message in response to '-h' and '--help'.  Add to this or
1451fe4c343aSmrg# override it after sourcing this library to reflect the full set of
1452fe4c343aSmrg# options your script accepts.
1453fe4c343aSmrgusage_message="\
1454fe4c343aSmrg       --debug        enable verbose shell tracing
1455fe4c343aSmrg   -W, --warnings=CATEGORY
1456fe4c343aSmrg                      report the warnings falling in CATEGORY [all]
1457fe4c343aSmrg   -v, --verbose      verbosely report processing
1458fe4c343aSmrg       --version      print version information and exit
1459fe4c343aSmrg   -h, --help         print short or long help message and exit
1460fe4c343aSmrg"
1461fe4c343aSmrg
1462fe4c343aSmrg# Additional text appended to 'usage_message' in response to '--help'.
1463fe4c343aSmrglong_help_message="
1464fe4c343aSmrgWarning categories include:
1465fe4c343aSmrg       'all'          show all warnings
1466fe4c343aSmrg       'none'         turn off all the warnings
1467fe4c343aSmrg       'error'        warnings are treated as fatal errors"
1468fe4c343aSmrg
1469fe4c343aSmrg# Help message printed before fatal option parsing errors.
1470fe4c343aSmrgfatal_help="Try '\$progname --help' for more information."
1471fe4c343aSmrg
1472fe4c343aSmrg
1473fe4c343aSmrg
1474fe4c343aSmrg## ------------------------- ##
1475fe4c343aSmrg## Hook function management. ##
1476fe4c343aSmrg## ------------------------- ##
1477fe4c343aSmrg
1478fe4c343aSmrg# This section contains functions for adding, removing, and running hooks
1479fe4c343aSmrg# to the main code.  A hook is just a named list of of function, that can
1480fe4c343aSmrg# be run in order later on.
1481fe4c343aSmrg
1482fe4c343aSmrg# func_hookable FUNC_NAME
1483fe4c343aSmrg# -----------------------
1484fe4c343aSmrg# Declare that FUNC_NAME will run hooks added with
1485fe4c343aSmrg# 'func_add_hook FUNC_NAME ...'.
1486fe4c343aSmrgfunc_hookable ()
1487fe4c343aSmrg{
1488fe4c343aSmrg    $debug_cmd
1489fe4c343aSmrg
1490fe4c343aSmrg    func_append hookable_fns " $1"
1491fe4c343aSmrg}
1492fe4c343aSmrg
1493fe4c343aSmrg
1494fe4c343aSmrg# func_add_hook FUNC_NAME HOOK_FUNC
1495fe4c343aSmrg# ---------------------------------
1496fe4c343aSmrg# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
1497fe4c343aSmrg# first have been declared "hookable" by a call to 'func_hookable'.
1498fe4c343aSmrgfunc_add_hook ()
1499fe4c343aSmrg{
1500fe4c343aSmrg    $debug_cmd
1501fe4c343aSmrg
1502fe4c343aSmrg    case " $hookable_fns " in
1503fe4c343aSmrg      *" $1 "*) ;;
1504fe4c343aSmrg      *) func_fatal_error "'$1' does not accept hook functions." ;;
1505fe4c343aSmrg    esac
1506fe4c343aSmrg
1507fe4c343aSmrg    eval func_append ${1}_hooks '" $2"'
1508fe4c343aSmrg}
1509fe4c343aSmrg
1510fe4c343aSmrg
1511fe4c343aSmrg# func_remove_hook FUNC_NAME HOOK_FUNC
1512fe4c343aSmrg# ------------------------------------
1513fe4c343aSmrg# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
1514fe4c343aSmrgfunc_remove_hook ()
1515fe4c343aSmrg{
1516fe4c343aSmrg    $debug_cmd
1517fe4c343aSmrg
1518fe4c343aSmrg    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
1519fe4c343aSmrg}
1520fe4c343aSmrg
1521fe4c343aSmrg
1522fe4c343aSmrg# func_run_hooks FUNC_NAME [ARG]...
1523fe4c343aSmrg# ---------------------------------
1524fe4c343aSmrg# Run all hook functions registered to FUNC_NAME.
1525fe4c343aSmrg# It is assumed that the list of hook functions contains nothing more
1526fe4c343aSmrg# than a whitespace-delimited list of legal shell function names, and
1527fe4c343aSmrg# no effort is wasted trying to catch shell meta-characters or preserve
1528fe4c343aSmrg# whitespace.
1529fe4c343aSmrgfunc_run_hooks ()
1530fe4c343aSmrg{
1531fe4c343aSmrg    $debug_cmd
1532fe4c343aSmrg
1533fe4c343aSmrg    case " $hookable_fns " in
1534fe4c343aSmrg      *" $1 "*) ;;
1535fe4c343aSmrg      *) func_fatal_error "'$1' does not support hook funcions.n" ;;
1536fe4c343aSmrg    esac
1537fe4c343aSmrg
1538fe4c343aSmrg    eval _G_hook_fns=\$$1_hooks; shift
1539fe4c343aSmrg
1540fe4c343aSmrg    for _G_hook in $_G_hook_fns; do
1541fe4c343aSmrg      eval $_G_hook '"$@"'
1542fe4c343aSmrg
1543fe4c343aSmrg      # store returned options list back into positional
1544fe4c343aSmrg      # parameters for next 'cmd' execution.
1545fe4c343aSmrg      eval _G_hook_result=\$${_G_hook}_result
1546fe4c343aSmrg      eval set dummy "$_G_hook_result"; shift
1547fe4c343aSmrg    done
1548fe4c343aSmrg
1549fe4c343aSmrg    func_quote_for_eval ${1+"$@"}
1550fe4c343aSmrg    func_run_hooks_result=$func_quote_for_eval_result
1551fe4c343aSmrg}
1552fe4c343aSmrg
1553fe4c343aSmrg
1554fe4c343aSmrg
1555fe4c343aSmrg## --------------- ##
1556fe4c343aSmrg## Option parsing. ##
1557fe4c343aSmrg## --------------- ##
1558fe4c343aSmrg
1559fe4c343aSmrg# In order to add your own option parsing hooks, you must accept the
1560fe4c343aSmrg# full positional parameter list in your hook function, remove any
1561fe4c343aSmrg# options that you action, and then pass back the remaining unprocessed
1562fe4c343aSmrg# options in '<hooked_function_name>_result', escaped suitably for
1563fe4c343aSmrg# 'eval'.  Like this:
1564fe4c343aSmrg#
1565fe4c343aSmrg#    my_options_prep ()
1566fe4c343aSmrg#    {
1567fe4c343aSmrg#        $debug_cmd
1568fe4c343aSmrg#
1569fe4c343aSmrg#        # Extend the existing usage message.
1570fe4c343aSmrg#        usage_message=$usage_message'
1571fe4c343aSmrg#      -s, --silent       don'\''t print informational messages
1572fe4c343aSmrg#    '
1573fe4c343aSmrg#
1574fe4c343aSmrg#        func_quote_for_eval ${1+"$@"}
1575fe4c343aSmrg#        my_options_prep_result=$func_quote_for_eval_result
1576fe4c343aSmrg#    }
1577fe4c343aSmrg#    func_add_hook func_options_prep my_options_prep
1578fe4c343aSmrg#
1579fe4c343aSmrg#
1580fe4c343aSmrg#    my_silent_option ()
1581fe4c343aSmrg#    {
1582fe4c343aSmrg#        $debug_cmd
1583fe4c343aSmrg#
1584fe4c343aSmrg#        # Note that for efficiency, we parse as many options as we can
1585fe4c343aSmrg#        # recognise in a loop before passing the remainder back to the
1586fe4c343aSmrg#        # caller on the first unrecognised argument we encounter.
1587fe4c343aSmrg#        while test $# -gt 0; do
1588fe4c343aSmrg#          opt=$1; shift
1589fe4c343aSmrg#          case $opt in
1590fe4c343aSmrg#            --silent|-s) opt_silent=: ;;
1591fe4c343aSmrg#            # Separate non-argument short options:
1592fe4c343aSmrg#            -s*)         func_split_short_opt "$_G_opt"
1593fe4c343aSmrg#                         set dummy "$func_split_short_opt_name" \
1594fe4c343aSmrg#                             "-$func_split_short_opt_arg" ${1+"$@"}
1595fe4c343aSmrg#                         shift
1596fe4c343aSmrg#                         ;;
1597fe4c343aSmrg#            *)            set dummy "$_G_opt" "$*"; shift; break ;;
1598fe4c343aSmrg#          esac
1599fe4c343aSmrg#        done
1600fe4c343aSmrg#
1601fe4c343aSmrg#        func_quote_for_eval ${1+"$@"}
1602fe4c343aSmrg#        my_silent_option_result=$func_quote_for_eval_result
1603fe4c343aSmrg#    }
1604fe4c343aSmrg#    func_add_hook func_parse_options my_silent_option
1605fe4c343aSmrg#
1606fe4c343aSmrg#
1607fe4c343aSmrg#    my_option_validation ()
1608fe4c343aSmrg#    {
1609fe4c343aSmrg#        $debug_cmd
1610fe4c343aSmrg#
1611fe4c343aSmrg#        $opt_silent && $opt_verbose && func_fatal_help "\
1612fe4c343aSmrg#    '--silent' and '--verbose' options are mutually exclusive."
1613fe4c343aSmrg#
1614fe4c343aSmrg#        func_quote_for_eval ${1+"$@"}
1615fe4c343aSmrg#        my_option_validation_result=$func_quote_for_eval_result
1616fe4c343aSmrg#    }
1617fe4c343aSmrg#    func_add_hook func_validate_options my_option_validation
1618fe4c343aSmrg#
1619fe4c343aSmrg# You'll alse need to manually amend $usage_message to reflect the extra
1620fe4c343aSmrg# options you parse.  It's preferable to append if you can, so that
1621fe4c343aSmrg# multiple option parsing hooks can be added safely.
1622fe4c343aSmrg
1623fe4c343aSmrg
1624fe4c343aSmrg# func_options [ARG]...
1625fe4c343aSmrg# ---------------------
1626fe4c343aSmrg# All the functions called inside func_options are hookable. See the
1627fe4c343aSmrg# individual implementations for details.
1628fe4c343aSmrgfunc_hookable func_options
1629fe4c343aSmrgfunc_options ()
1630fe4c343aSmrg{
1631fe4c343aSmrg    $debug_cmd
1632fe4c343aSmrg
1633fe4c343aSmrg    func_options_prep ${1+"$@"}
1634fe4c343aSmrg    eval func_parse_options \
1635fe4c343aSmrg        ${func_options_prep_result+"$func_options_prep_result"}
1636fe4c343aSmrg    eval func_validate_options \
1637fe4c343aSmrg        ${func_parse_options_result+"$func_parse_options_result"}
1638fe4c343aSmrg
1639fe4c343aSmrg    eval func_run_hooks func_options \
1640fe4c343aSmrg        ${func_validate_options_result+"$func_validate_options_result"}
1641fe4c343aSmrg
1642fe4c343aSmrg    # save modified positional parameters for caller
1643fe4c343aSmrg    func_options_result=$func_run_hooks_result
1644ba6a1819Smrg}
1645ba6a1819Smrg
1646ba6a1819Smrg
1647fe4c343aSmrg# func_options_prep [ARG]...
1648fe4c343aSmrg# --------------------------
1649fe4c343aSmrg# All initialisations required before starting the option parse loop.
1650fe4c343aSmrg# Note that when calling hook functions, we pass through the list of
1651fe4c343aSmrg# positional parameters.  If a hook function modifies that list, and
1652fe4c343aSmrg# needs to propogate that back to rest of this script, then the complete
1653fe4c343aSmrg# modified list must be put in 'func_run_hooks_result' before
1654fe4c343aSmrg# returning.
1655fe4c343aSmrgfunc_hookable func_options_prep
1656fe4c343aSmrgfunc_options_prep ()
1657ba6a1819Smrg{
1658fe4c343aSmrg    $debug_cmd
1659549e21daSmrg
1660fe4c343aSmrg    # Option defaults:
1661fe4c343aSmrg    opt_verbose=false
1662fe4c343aSmrg    opt_warning_types=
1663fe4c343aSmrg
1664fe4c343aSmrg    func_run_hooks func_options_prep ${1+"$@"}
1665fe4c343aSmrg
1666fe4c343aSmrg    # save modified positional parameters for caller
1667fe4c343aSmrg    func_options_prep_result=$func_run_hooks_result
1668ba6a1819Smrg}
1669ba6a1819Smrg
1670ba6a1819Smrg
1671fe4c343aSmrg# func_parse_options [ARG]...
1672fe4c343aSmrg# ---------------------------
1673fe4c343aSmrg# The main option parsing loop.
1674fe4c343aSmrgfunc_hookable func_parse_options
1675fe4c343aSmrgfunc_parse_options ()
1676ba6a1819Smrg{
1677fe4c343aSmrg    $debug_cmd
1678549e21daSmrg
1679fe4c343aSmrg    func_parse_options_result=
1680549e21daSmrg
1681fe4c343aSmrg    # this just eases exit handling
1682fe4c343aSmrg    while test $# -gt 0; do
1683fe4c343aSmrg      # Defer to hook functions for initial option parsing, so they
1684fe4c343aSmrg      # get priority in the event of reusing an option name.
1685fe4c343aSmrg      func_run_hooks func_parse_options ${1+"$@"}
1686ba6a1819Smrg
1687fe4c343aSmrg      # Adjust func_parse_options positional parameters to match
1688fe4c343aSmrg      eval set dummy "$func_run_hooks_result"; shift
1689ba6a1819Smrg
1690fe4c343aSmrg      # Break out of the loop if we already parsed every option.
1691fe4c343aSmrg      test $# -gt 0 || break
1692ba6a1819Smrg
1693fe4c343aSmrg      _G_opt=$1
1694fe4c343aSmrg      shift
1695fe4c343aSmrg      case $_G_opt in
1696fe4c343aSmrg        --debug|-x)   debug_cmd='set -x'
1697fe4c343aSmrg                      func_echo "enabling shell trace mode"
1698fe4c343aSmrg                      $debug_cmd
1699fe4c343aSmrg                      ;;
1700fe4c343aSmrg
1701fe4c343aSmrg        --no-warnings|--no-warning|--no-warn)
1702fe4c343aSmrg                      set dummy --warnings none ${1+"$@"}
1703fe4c343aSmrg                      shift
1704fe4c343aSmrg		      ;;
1705549e21daSmrg
1706fe4c343aSmrg        --warnings|--warning|-W)
1707fe4c343aSmrg                      test $# = 0 && func_missing_arg $_G_opt && break
1708fe4c343aSmrg                      case " $warning_categories $1" in
1709fe4c343aSmrg                        *" $1 "*)
1710fe4c343aSmrg                          # trailing space prevents matching last $1 above
1711fe4c343aSmrg                          func_append_uniq opt_warning_types " $1"
1712fe4c343aSmrg                          ;;
1713fe4c343aSmrg                        *all)
1714fe4c343aSmrg                          opt_warning_types=$warning_categories
1715fe4c343aSmrg                          ;;
1716fe4c343aSmrg                        *none)
1717fe4c343aSmrg                          opt_warning_types=none
1718fe4c343aSmrg                          warning_func=:
1719fe4c343aSmrg                          ;;
1720fe4c343aSmrg                        *error)
1721fe4c343aSmrg                          opt_warning_types=$warning_categories
1722fe4c343aSmrg                          warning_func=func_fatal_error
1723fe4c343aSmrg                          ;;
1724fe4c343aSmrg                        *)
1725fe4c343aSmrg                          func_fatal_error \
1726fe4c343aSmrg                             "unsupported warning category: '$1'"
1727fe4c343aSmrg                          ;;
1728fe4c343aSmrg                      esac
1729fe4c343aSmrg                      shift
1730fe4c343aSmrg                      ;;
1731fe4c343aSmrg
1732fe4c343aSmrg        --verbose|-v) opt_verbose=: ;;
1733fe4c343aSmrg        --version)    func_version ;;
1734fe4c343aSmrg        -\?|-h)       func_usage ;;
1735fe4c343aSmrg        --help)       func_help ;;
1736fe4c343aSmrg
1737fe4c343aSmrg	# Separate optargs to long options (plugins may need this):
1738fe4c343aSmrg	--*=*)        func_split_equals "$_G_opt"
1739fe4c343aSmrg	              set dummy "$func_split_equals_lhs" \
1740fe4c343aSmrg                          "$func_split_equals_rhs" ${1+"$@"}
1741fe4c343aSmrg                      shift
1742fe4c343aSmrg                      ;;
1743fe4c343aSmrg
1744fe4c343aSmrg       # Separate optargs to short options:
1745fe4c343aSmrg        -W*)
1746fe4c343aSmrg                      func_split_short_opt "$_G_opt"
1747fe4c343aSmrg                      set dummy "$func_split_short_opt_name" \
1748fe4c343aSmrg                          "$func_split_short_opt_arg" ${1+"$@"}
1749fe4c343aSmrg                      shift
1750fe4c343aSmrg                      ;;
1751fe4c343aSmrg
1752fe4c343aSmrg        # Separate non-argument short options:
1753fe4c343aSmrg        -\?*|-h*|-v*|-x*)
1754fe4c343aSmrg                      func_split_short_opt "$_G_opt"
1755fe4c343aSmrg                      set dummy "$func_split_short_opt_name" \
1756fe4c343aSmrg                          "-$func_split_short_opt_arg" ${1+"$@"}
1757fe4c343aSmrg                      shift
1758fe4c343aSmrg                      ;;
1759fe4c343aSmrg
1760fe4c343aSmrg        --)           break ;;
1761fe4c343aSmrg        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
1762fe4c343aSmrg        *)            set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
1763fe4c343aSmrg      esac
1764fe4c343aSmrg    done
1765fe4c343aSmrg
1766fe4c343aSmrg    # save modified positional parameters for caller
1767fe4c343aSmrg    func_quote_for_eval ${1+"$@"}
1768fe4c343aSmrg    func_parse_options_result=$func_quote_for_eval_result
1769ba6a1819Smrg}
1770ba6a1819Smrg
1771549e21daSmrg
1772fe4c343aSmrg# func_validate_options [ARG]...
1773fe4c343aSmrg# ------------------------------
1774fe4c343aSmrg# Perform any sanity checks on option settings and/or unconsumed
1775fe4c343aSmrg# arguments.
1776fe4c343aSmrgfunc_hookable func_validate_options
1777fe4c343aSmrgfunc_validate_options ()
1778ba6a1819Smrg{
1779fe4c343aSmrg    $debug_cmd
1780ba6a1819Smrg
1781fe4c343aSmrg    # Display all warnings if -W was not given.
1782fe4c343aSmrg    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
1783549e21daSmrg
1784fe4c343aSmrg    func_run_hooks func_validate_options ${1+"$@"}
1785ba6a1819Smrg
1786fe4c343aSmrg    # Bail if the options were screwed!
1787fe4c343aSmrg    $exit_cmd $EXIT_FAILURE
1788fe4c343aSmrg
1789fe4c343aSmrg    # save modified positional parameters for caller
1790fe4c343aSmrg    func_validate_options_result=$func_run_hooks_result
17911bedbe3fSmrg}
17921bedbe3fSmrg
1793ba6a1819Smrg
17941bedbe3fSmrg
1795fe4c343aSmrg## ----------------- ##
1796fe4c343aSmrg## Helper functions. ##
1797fe4c343aSmrg## ----------------- ##
1798ba6a1819Smrg
1799fe4c343aSmrg# This section contains the helper functions used by the rest of the
1800fe4c343aSmrg# hookable option parser framework in ascii-betical order.
1801fe4c343aSmrg
1802fe4c343aSmrg
1803fe4c343aSmrg# func_fatal_help ARG...
1804fe4c343aSmrg# ----------------------
1805fe4c343aSmrg# Echo program name prefixed message to standard error, followed by
1806fe4c343aSmrg# a help hint, and exit.
1807fe4c343aSmrgfunc_fatal_help ()
1808549e21daSmrg{
1809fe4c343aSmrg    $debug_cmd
18101bedbe3fSmrg
1811fe4c343aSmrg    eval \$ECHO \""Usage: $usage"\"
1812fe4c343aSmrg    eval \$ECHO \""$fatal_help"\"
1813fe4c343aSmrg    func_error ${1+"$@"}
1814fe4c343aSmrg    exit $EXIT_FAILURE
1815549e21daSmrg}
1816ba6a1819Smrg
1817fe4c343aSmrg
1818fe4c343aSmrg# func_help
1819fe4c343aSmrg# ---------
1820fe4c343aSmrg# Echo long help message to standard output and exit.
1821549e21daSmrgfunc_help ()
1822549e21daSmrg{
1823fe4c343aSmrg    $debug_cmd
1824fe4c343aSmrg
1825fe4c343aSmrg    func_usage_message
1826fe4c343aSmrg    $ECHO "$long_help_message"
1827fe4c343aSmrg    exit 0
1828549e21daSmrg}
1829ba6a1819Smrg
1830fe4c343aSmrg
1831fe4c343aSmrg# func_missing_arg ARGNAME
1832fe4c343aSmrg# ------------------------
1833549e21daSmrg# Echo program name prefixed message to standard error and set global
1834549e21daSmrg# exit_cmd.
1835549e21daSmrgfunc_missing_arg ()
1836549e21daSmrg{
1837fe4c343aSmrg    $debug_cmd
18381bedbe3fSmrg
1839fe4c343aSmrg    func_error "Missing argument for '$1'."
1840549e21daSmrg    exit_cmd=exit
1841549e21daSmrg}
1842ba6a1819Smrg
1843ba6a1819Smrg
1844fe4c343aSmrg# func_split_equals STRING
1845fe4c343aSmrg# ------------------------
1846fe4c343aSmrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
1847fe4c343aSmrg# splitting STRING at the '=' sign.
1848fe4c343aSmrgtest -z "$_G_HAVE_XSI_OPS" \
1849fe4c343aSmrg    && (eval 'x=a/b/c;
1850fe4c343aSmrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
1851fe4c343aSmrg    && _G_HAVE_XSI_OPS=yes
1852fe4c343aSmrg
1853fe4c343aSmrgif test yes = "$_G_HAVE_XSI_OPS"
1854fe4c343aSmrgthen
1855fe4c343aSmrg  # This is an XSI compatible shell, allowing a faster implementation...
1856fe4c343aSmrg  eval 'func_split_equals ()
1857fe4c343aSmrg  {
1858fe4c343aSmrg      $debug_cmd
1859fe4c343aSmrg
1860fe4c343aSmrg      func_split_equals_lhs=${1%%=*}
1861fe4c343aSmrg      func_split_equals_rhs=${1#*=}
1862fe4c343aSmrg      test "x$func_split_equals_lhs" = "x$1" \
1863fe4c343aSmrg        && func_split_equals_rhs=
1864fe4c343aSmrg  }'
1865fe4c343aSmrgelse
1866fe4c343aSmrg  # ...otherwise fall back to using expr, which is often a shell builtin.
1867fe4c343aSmrg  func_split_equals ()
1868fe4c343aSmrg  {
1869fe4c343aSmrg      $debug_cmd
1870fe4c343aSmrg
1871fe4c343aSmrg      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
1872fe4c343aSmrg      func_split_equals_rhs=
1873fe4c343aSmrg      test "x$func_split_equals_lhs" = "x$1" \
1874fe4c343aSmrg        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
1875fe4c343aSmrg  }
1876fe4c343aSmrgfi #func_split_equals
1877fe4c343aSmrg
1878fe4c343aSmrg
1879fe4c343aSmrg# func_split_short_opt SHORTOPT
1880fe4c343aSmrg# -----------------------------
18811bedbe3fSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
18821bedbe3fSmrg# variables after splitting SHORTOPT after the 2nd character.
1883fe4c343aSmrgif test yes = "$_G_HAVE_XSI_OPS"
1884fe4c343aSmrgthen
1885fe4c343aSmrg  # This is an XSI compatible shell, allowing a faster implementation...
1886fe4c343aSmrg  eval 'func_split_short_opt ()
1887fe4c343aSmrg  {
1888fe4c343aSmrg      $debug_cmd
1889fe4c343aSmrg
1890fe4c343aSmrg      func_split_short_opt_arg=${1#??}
1891fe4c343aSmrg      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
1892fe4c343aSmrg  }'
1893fe4c343aSmrgelse
1894fe4c343aSmrg  # ...otherwise fall back to using expr, which is often a shell builtin.
1895fe4c343aSmrg  func_split_short_opt ()
1896fe4c343aSmrg  {
1897fe4c343aSmrg      $debug_cmd
1898fe4c343aSmrg
1899fe4c343aSmrg      func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
1900fe4c343aSmrg      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
1901fe4c343aSmrg  }
1902fe4c343aSmrgfi #func_split_short_opt
1903fe4c343aSmrg
1904fe4c343aSmrg
1905fe4c343aSmrg# func_usage
1906fe4c343aSmrg# ----------
1907fe4c343aSmrg# Echo short help message to standard output and exit.
1908fe4c343aSmrgfunc_usage ()
19091bedbe3fSmrg{
1910fe4c343aSmrg    $debug_cmd
19111bedbe3fSmrg
1912fe4c343aSmrg    func_usage_message
1913fe4c343aSmrg    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
1914fe4c343aSmrg    exit 0
1915fe4c343aSmrg}
19161bedbe3fSmrg
19171bedbe3fSmrg
1918fe4c343aSmrg# func_usage_message
1919fe4c343aSmrg# ------------------
1920fe4c343aSmrg# Echo short help message to standard output.
1921fe4c343aSmrgfunc_usage_message ()
19221bedbe3fSmrg{
1923fe4c343aSmrg    $debug_cmd
19241bedbe3fSmrg
1925fe4c343aSmrg    eval \$ECHO \""Usage: $usage"\"
1926fe4c343aSmrg    echo
1927fe4c343aSmrg    $SED -n 's|^# ||
1928fe4c343aSmrg        /^Written by/{
1929fe4c343aSmrg          x;p;x
1930fe4c343aSmrg        }
1931fe4c343aSmrg	h
1932fe4c343aSmrg	/^Written by/q' < "$progpath"
1933fe4c343aSmrg    echo
1934fe4c343aSmrg    eval \$ECHO \""$usage_message"\"
1935fe4c343aSmrg}
19361bedbe3fSmrg
1937ba6a1819Smrg
1938fe4c343aSmrg# func_version
1939fe4c343aSmrg# ------------
1940fe4c343aSmrg# Echo version message to standard output and exit.
1941fe4c343aSmrgfunc_version ()
1942fe4c343aSmrg{
1943fe4c343aSmrg    $debug_cmd
1944ba6a1819Smrg
1945fe4c343aSmrg    printf '%s\n' "$progname $scriptversion"
1946fe4c343aSmrg    $SED -n '
1947fe4c343aSmrg        /(C)/!b go
1948fe4c343aSmrg        :more
1949fe4c343aSmrg        /\./!{
1950fe4c343aSmrg          N
1951fe4c343aSmrg          s|\n# | |
1952fe4c343aSmrg          b more
1953fe4c343aSmrg        }
1954fe4c343aSmrg        :go
1955fe4c343aSmrg        /^# Written by /,/# warranty; / {
1956fe4c343aSmrg          s|^# ||
1957fe4c343aSmrg          s|^# *$||
1958fe4c343aSmrg          s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
1959fe4c343aSmrg          p
1960fe4c343aSmrg        }
1961fe4c343aSmrg        /^# Written by / {
1962fe4c343aSmrg          s|^# ||
1963fe4c343aSmrg          p
1964fe4c343aSmrg        }
1965fe4c343aSmrg        /^warranty; /q' < "$progpath"
1966ba6a1819Smrg
1967fe4c343aSmrg    exit $?
1968fe4c343aSmrg}
1969549e21daSmrg
1970549e21daSmrg
1971fe4c343aSmrg# Local variables:
1972fe4c343aSmrg# mode: shell-script
1973fe4c343aSmrg# sh-indentation: 2
1974fe4c343aSmrg# eval: (add-hook 'before-save-hook 'time-stamp)
1975fe4c343aSmrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
1976fe4c343aSmrg# time-stamp-time-zone: "UTC"
1977fe4c343aSmrg# End:
1978549e21daSmrg
1979fe4c343aSmrg# Set a version string.
1980fe4c343aSmrgscriptversion='(GNU libtool) 2.4.6'
1981549e21daSmrg
1982549e21daSmrg
1983fe4c343aSmrg# func_echo ARG...
1984fe4c343aSmrg# ----------------
1985fe4c343aSmrg# Libtool also displays the current mode in messages, so override
1986fe4c343aSmrg# funclib.sh func_echo with this custom definition.
1987fe4c343aSmrgfunc_echo ()
19881bedbe3fSmrg{
1989fe4c343aSmrg    $debug_cmd
19901bedbe3fSmrg
1991fe4c343aSmrg    _G_message=$*
19921bedbe3fSmrg
1993fe4c343aSmrg    func_echo_IFS=$IFS
1994fe4c343aSmrg    IFS=$nl
1995fe4c343aSmrg    for _G_line in $_G_message; do
1996fe4c343aSmrg      IFS=$func_echo_IFS
1997fe4c343aSmrg      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
1998fe4c343aSmrg    done
1999fe4c343aSmrg    IFS=$func_echo_IFS
2000fe4c343aSmrg}
20011bedbe3fSmrg
2002fe4c343aSmrg
2003fe4c343aSmrg# func_warning ARG...
2004fe4c343aSmrg# -------------------
2005fe4c343aSmrg# Libtool warnings are not categorized, so override funclib.sh
2006fe4c343aSmrg# func_warning with this simpler definition.
2007fe4c343aSmrgfunc_warning ()
20081bedbe3fSmrg{
2009fe4c343aSmrg    $debug_cmd
20101bedbe3fSmrg
2011fe4c343aSmrg    $warning_func ${1+"$@"}
2012fe4c343aSmrg}
20131bedbe3fSmrg
20141bedbe3fSmrg
2015fe4c343aSmrg## ---------------- ##
2016fe4c343aSmrg## Options parsing. ##
2017fe4c343aSmrg## ---------------- ##
2018fe4c343aSmrg
2019fe4c343aSmrg# Hook in the functions to make sure our own options are parsed during
2020fe4c343aSmrg# the option parsing loop.
2021fe4c343aSmrg
2022fe4c343aSmrgusage='$progpath [OPTION]... [MODE-ARG]...'
2023fe4c343aSmrg
2024fe4c343aSmrg# Short help message in response to '-h'.
2025fe4c343aSmrgusage_message="Options:
2026fe4c343aSmrg       --config             show all configuration variables
2027fe4c343aSmrg       --debug              enable verbose shell tracing
2028fe4c343aSmrg   -n, --dry-run            display commands without modifying any files
2029fe4c343aSmrg       --features           display basic configuration information and exit
2030fe4c343aSmrg       --mode=MODE          use operation mode MODE
2031fe4c343aSmrg       --no-warnings        equivalent to '-Wnone'
2032fe4c343aSmrg       --preserve-dup-deps  don't remove duplicate dependency libraries
2033fe4c343aSmrg       --quiet, --silent    don't print informational messages
2034fe4c343aSmrg       --tag=TAG            use configuration variables from tag TAG
2035fe4c343aSmrg   -v, --verbose            print more informational messages than default
2036fe4c343aSmrg       --version            print version information
2037fe4c343aSmrg   -W, --warnings=CATEGORY  report the warnings falling in CATEGORY [all]
2038fe4c343aSmrg   -h, --help, --help-all   print short, long, or detailed help message
2039fe4c343aSmrg"
20401bedbe3fSmrg
2041fe4c343aSmrg# Additional text appended to 'usage_message' in response to '--help'.
2042fe4c343aSmrgfunc_help ()
20431bedbe3fSmrg{
2044fe4c343aSmrg    $debug_cmd
2045fe4c343aSmrg
2046fe4c343aSmrg    func_usage_message
2047fe4c343aSmrg    $ECHO "$long_help_message
2048fe4c343aSmrg
2049fe4c343aSmrgMODE must be one of the following:
2050fe4c343aSmrg
2051fe4c343aSmrg       clean           remove files from the build directory
2052fe4c343aSmrg       compile         compile a source file into a libtool object
2053fe4c343aSmrg       execute         automatically set library path, then run a program
2054fe4c343aSmrg       finish          complete the installation of libtool libraries
2055fe4c343aSmrg       install         install libraries or executables
2056fe4c343aSmrg       link            create a library or an executable
2057fe4c343aSmrg       uninstall       remove libraries from an installed directory
2058fe4c343aSmrg
2059fe4c343aSmrgMODE-ARGS vary depending on the MODE.  When passed as first option,
2060fe4c343aSmrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
2061fe4c343aSmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE.
2062fe4c343aSmrg
2063fe4c343aSmrgWhen reporting a bug, please describe a test case to reproduce it and
2064fe4c343aSmrginclude the following information:
2065fe4c343aSmrg
2066fe4c343aSmrg       host-triplet:   $host
2067fe4c343aSmrg       shell:          $SHELL
2068fe4c343aSmrg       compiler:       $LTCC
2069fe4c343aSmrg       compiler flags: $LTCFLAGS
2070fe4c343aSmrg       linker:         $LD (gnu? $with_gnu_ld)
2071fe4c343aSmrg       version:        $progname (GNU libtool) 2.4.6
2072fe4c343aSmrg       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
2073fe4c343aSmrg       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
2074fe4c343aSmrg
2075fe4c343aSmrgReport bugs to <bug-libtool@gnu.org>.
2076fe4c343aSmrgGNU libtool home page: <http://www.gnu.org/s/libtool/>.
2077fe4c343aSmrgGeneral help using GNU software: <http://www.gnu.org/gethelp/>."
2078fe4c343aSmrg    exit 0
2079fe4c343aSmrg}
20801bedbe3fSmrg
20811bedbe3fSmrg
2082fe4c343aSmrg# func_lo2o OBJECT-NAME
2083fe4c343aSmrg# ---------------------
2084fe4c343aSmrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
2085fe4c343aSmrg# object suffix.
2086fe4c343aSmrg
2087fe4c343aSmrglo2o=s/\\.lo\$/.$objext/
2088fe4c343aSmrgo2lo=s/\\.$objext\$/.lo/
2089fe4c343aSmrg
2090fe4c343aSmrgif test yes = "$_G_HAVE_XSI_OPS"; then
2091fe4c343aSmrg  eval 'func_lo2o ()
2092fe4c343aSmrg  {
2093fe4c343aSmrg    case $1 in
2094fe4c343aSmrg      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
2095fe4c343aSmrg      *   ) func_lo2o_result=$1               ;;
2096fe4c343aSmrg    esac
2097fe4c343aSmrg  }'
2098fe4c343aSmrg
2099fe4c343aSmrg  # func_xform LIBOBJ-OR-SOURCE
2100fe4c343aSmrg  # ---------------------------
2101fe4c343aSmrg  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
2102fe4c343aSmrg  # suffix to a '.lo' libtool-object suffix.
2103fe4c343aSmrg  eval 'func_xform ()
2104fe4c343aSmrg  {
2105fe4c343aSmrg    func_xform_result=${1%.*}.lo
2106fe4c343aSmrg  }'
2107fe4c343aSmrgelse
2108fe4c343aSmrg  # ...otherwise fall back to using sed.
2109fe4c343aSmrg  func_lo2o ()
2110fe4c343aSmrg  {
2111fe4c343aSmrg    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
2112fe4c343aSmrg  }
2113fe4c343aSmrg
2114fe4c343aSmrg  func_xform ()
2115fe4c343aSmrg  {
2116fe4c343aSmrg    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
2117fe4c343aSmrg  }
2118fe4c343aSmrgfi
21191bedbe3fSmrg
21201bedbe3fSmrg
2121fe4c343aSmrg# func_fatal_configuration ARG...
2122fe4c343aSmrg# -------------------------------
2123549e21daSmrg# Echo program name prefixed message to standard error, followed by
2124549e21daSmrg# a configuration failure hint, and exit.
2125549e21daSmrgfunc_fatal_configuration ()
2126549e21daSmrg{
2127fe4c343aSmrg    func__fatal_error ${1+"$@"} \
2128fe4c343aSmrg      "See the $PACKAGE documentation for more information." \
2129fe4c343aSmrg      "Fatal configuration error."
2130549e21daSmrg}
2131549e21daSmrg
2132549e21daSmrg
2133549e21daSmrg# func_config
2134fe4c343aSmrg# -----------
2135549e21daSmrg# Display the configuration for all the tags in this script.
2136549e21daSmrgfunc_config ()
2137549e21daSmrg{
2138549e21daSmrg    re_begincf='^# ### BEGIN LIBTOOL'
2139549e21daSmrg    re_endcf='^# ### END LIBTOOL'
2140549e21daSmrg
2141549e21daSmrg    # Default configuration.
2142549e21daSmrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
2143549e21daSmrg
2144ba6a1819Smrg    # Now print the configurations for the tags.
2145ba6a1819Smrg    for tagname in $taglist; do
2146549e21daSmrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
2147ba6a1819Smrg    done
2148ba6a1819Smrg
2149549e21daSmrg    exit $?
2150549e21daSmrg}
2151ba6a1819Smrg
2152fe4c343aSmrg
2153549e21daSmrg# func_features
2154fe4c343aSmrg# -------------
2155549e21daSmrg# Display the features supported by this script.
2156549e21daSmrgfunc_features ()
2157549e21daSmrg{
2158549e21daSmrg    echo "host: $host"
2159fe4c343aSmrg    if test yes = "$build_libtool_libs"; then
2160549e21daSmrg      echo "enable shared libraries"
2161ba6a1819Smrg    else
2162549e21daSmrg      echo "disable shared libraries"
2163ba6a1819Smrg    fi
2164fe4c343aSmrg    if test yes = "$build_old_libs"; then
2165549e21daSmrg      echo "enable static libraries"
2166ba6a1819Smrg    else
2167549e21daSmrg      echo "disable static libraries"
2168ba6a1819Smrg    fi
2169549e21daSmrg
2170ba6a1819Smrg    exit $?
2171549e21daSmrg}
2172549e21daSmrg
2173fe4c343aSmrg
2174fe4c343aSmrg# func_enable_tag TAGNAME
2175fe4c343aSmrg# -----------------------
2176549e21daSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or
2177549e21daSmrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
2178549e21daSmrg# variable here.
2179549e21daSmrgfunc_enable_tag ()
2180549e21daSmrg{
2181fe4c343aSmrg    # Global variable:
2182fe4c343aSmrg    tagname=$1
2183ba6a1819Smrg
2184fe4c343aSmrg    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
2185fe4c343aSmrg    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
2186fe4c343aSmrg    sed_extractcf=/$re_begincf/,/$re_endcf/p
2187ba6a1819Smrg
2188fe4c343aSmrg    # Validate tagname.
2189fe4c343aSmrg    case $tagname in
2190fe4c343aSmrg      *[!-_A-Za-z0-9,/]*)
2191fe4c343aSmrg        func_fatal_error "invalid tag name: $tagname"
2192fe4c343aSmrg        ;;
2193fe4c343aSmrg    esac
2194ba6a1819Smrg
2195fe4c343aSmrg    # Don't test for the "default" C tag, as we know it's
2196fe4c343aSmrg    # there but not specially marked.
2197fe4c343aSmrg    case $tagname in
2198fe4c343aSmrg        CC) ;;
2199549e21daSmrg    *)
2200fe4c343aSmrg        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
2201fe4c343aSmrg	  taglist="$taglist $tagname"
2202fe4c343aSmrg
2203fe4c343aSmrg	  # Evaluate the configuration.  Be careful to quote the path
2204fe4c343aSmrg	  # and the sed script, to avoid splitting on whitespace, but
2205fe4c343aSmrg	  # also don't use non-portable quotes within backquotes within
2206fe4c343aSmrg	  # quotes we have to do it in 2 steps:
2207fe4c343aSmrg	  extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
2208fe4c343aSmrg	  eval "$extractedcf"
2209fe4c343aSmrg        else
2210fe4c343aSmrg	  func_error "ignoring unknown tag $tagname"
2211fe4c343aSmrg        fi
2212fe4c343aSmrg        ;;
2213fe4c343aSmrg    esac
2214549e21daSmrg}
2215ba6a1819Smrg
2216fe4c343aSmrg
22171bedbe3fSmrg# func_check_version_match
2218fe4c343aSmrg# ------------------------
22191bedbe3fSmrg# Ensure that we are using m4 macros, and libtool script from the same
22201bedbe3fSmrg# release of libtool.
22211bedbe3fSmrgfunc_check_version_match ()
2222549e21daSmrg{
2223fe4c343aSmrg    if test "$package_revision" != "$macro_revision"; then
2224fe4c343aSmrg      if test "$VERSION" != "$macro_version"; then
2225fe4c343aSmrg        if test -z "$macro_version"; then
2226fe4c343aSmrg          cat >&2 <<_LT_EOF
22271bedbe3fSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
22281bedbe3fSmrg$progname: definition of this LT_INIT comes from an older release.
22291bedbe3fSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
22301bedbe3fSmrg$progname: and run autoconf again.
22311bedbe3fSmrg_LT_EOF
2232fe4c343aSmrg        else
2233fe4c343aSmrg          cat >&2 <<_LT_EOF
22341bedbe3fSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
22351bedbe3fSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
22361bedbe3fSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
22371bedbe3fSmrg$progname: and run autoconf again.
22381bedbe3fSmrg_LT_EOF
2239fe4c343aSmrg        fi
2240fe4c343aSmrg      else
2241fe4c343aSmrg        cat >&2 <<_LT_EOF
22421bedbe3fSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
22431bedbe3fSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
22441bedbe3fSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
22451bedbe3fSmrg$progname: of $PACKAGE $VERSION and run autoconf again.
22461bedbe3fSmrg_LT_EOF
2247fe4c343aSmrg      fi
22481bedbe3fSmrg
2249fe4c343aSmrg      exit $EXIT_MISMATCH
2250fe4c343aSmrg    fi
22511bedbe3fSmrg}
22521bedbe3fSmrg
22531bedbe3fSmrg
2254fe4c343aSmrg# libtool_options_prep [ARG]...
2255fe4c343aSmrg# -----------------------------
2256fe4c343aSmrg# Preparation for options parsed by libtool.
2257fe4c343aSmrglibtool_options_prep ()
2258fe4c343aSmrg{
2259fe4c343aSmrg    $debug_mode
22601bedbe3fSmrg
2261fe4c343aSmrg    # Option defaults:
2262fe4c343aSmrg    opt_config=false
2263fe4c343aSmrg    opt_dlopen=
2264fe4c343aSmrg    opt_dry_run=false
2265fe4c343aSmrg    opt_help=false
2266fe4c343aSmrg    opt_mode=
2267fe4c343aSmrg    opt_preserve_dup_deps=false
2268fe4c343aSmrg    opt_quiet=false
22691bedbe3fSmrg
2270fe4c343aSmrg    nonopt=
2271fe4c343aSmrg    preserve_args=
22721bedbe3fSmrg
2273fe4c343aSmrg    # Shorthand for --mode=foo, only valid as the first argument
2274fe4c343aSmrg    case $1 in
2275fe4c343aSmrg    clean|clea|cle|cl)
2276fe4c343aSmrg      shift; set dummy --mode clean ${1+"$@"}; shift
2277fe4c343aSmrg      ;;
2278fe4c343aSmrg    compile|compil|compi|comp|com|co|c)
2279fe4c343aSmrg      shift; set dummy --mode compile ${1+"$@"}; shift
2280fe4c343aSmrg      ;;
2281fe4c343aSmrg    execute|execut|execu|exec|exe|ex|e)
2282fe4c343aSmrg      shift; set dummy --mode execute ${1+"$@"}; shift
2283fe4c343aSmrg      ;;
2284fe4c343aSmrg    finish|finis|fini|fin|fi|f)
2285fe4c343aSmrg      shift; set dummy --mode finish ${1+"$@"}; shift
2286fe4c343aSmrg      ;;
2287fe4c343aSmrg    install|instal|insta|inst|ins|in|i)
2288fe4c343aSmrg      shift; set dummy --mode install ${1+"$@"}; shift
2289fe4c343aSmrg      ;;
2290fe4c343aSmrg    link|lin|li|l)
2291fe4c343aSmrg      shift; set dummy --mode link ${1+"$@"}; shift
2292fe4c343aSmrg      ;;
2293fe4c343aSmrg    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
2294fe4c343aSmrg      shift; set dummy --mode uninstall ${1+"$@"}; shift
2295fe4c343aSmrg      ;;
2296fe4c343aSmrg    esac
2297fe4c343aSmrg
2298fe4c343aSmrg    # Pass back the list of options.
2299fe4c343aSmrg    func_quote_for_eval ${1+"$@"}
2300fe4c343aSmrg    libtool_options_prep_result=$func_quote_for_eval_result
2301fe4c343aSmrg}
2302fe4c343aSmrgfunc_add_hook func_options_prep libtool_options_prep
2303ba6a1819Smrg
2304ba6a1819Smrg
2305fe4c343aSmrg# libtool_parse_options [ARG]...
2306fe4c343aSmrg# ---------------------------------
2307fe4c343aSmrg# Provide handling for libtool specific options.
2308fe4c343aSmrglibtool_parse_options ()
23091bedbe3fSmrg{
2310fe4c343aSmrg    $debug_cmd
2311549e21daSmrg
2312fe4c343aSmrg    # Perform our own loop to consume as many options as possible in
2313fe4c343aSmrg    # each iteration.
2314fe4c343aSmrg    while test $# -gt 0; do
2315fe4c343aSmrg      _G_opt=$1
2316fe4c343aSmrg      shift
2317fe4c343aSmrg      case $_G_opt in
2318fe4c343aSmrg        --dry-run|--dryrun|-n)
2319fe4c343aSmrg                        opt_dry_run=:
2320fe4c343aSmrg                        ;;
2321fe4c343aSmrg
2322fe4c343aSmrg        --config)       func_config ;;
2323fe4c343aSmrg
2324fe4c343aSmrg        --dlopen|-dlopen)
2325fe4c343aSmrg                        opt_dlopen="${opt_dlopen+$opt_dlopen
2326fe4c343aSmrg}$1"
2327fe4c343aSmrg                        shift
2328fe4c343aSmrg                        ;;
2329fe4c343aSmrg
2330fe4c343aSmrg        --preserve-dup-deps)
2331fe4c343aSmrg                        opt_preserve_dup_deps=: ;;
2332fe4c343aSmrg
2333fe4c343aSmrg        --features)     func_features ;;
2334fe4c343aSmrg
2335fe4c343aSmrg        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
2336fe4c343aSmrg
2337fe4c343aSmrg        --help)         opt_help=: ;;
2338fe4c343aSmrg
2339fe4c343aSmrg        --help-all)     opt_help=': help-all' ;;
2340fe4c343aSmrg
2341fe4c343aSmrg        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
2342fe4c343aSmrg                        opt_mode=$1
2343fe4c343aSmrg                        case $1 in
2344fe4c343aSmrg                          # Valid mode arguments:
2345fe4c343aSmrg                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
2346fe4c343aSmrg
2347fe4c343aSmrg                          # Catch anything else as an error
2348fe4c343aSmrg                          *) func_error "invalid argument for $_G_opt"
2349fe4c343aSmrg                             exit_cmd=exit
2350fe4c343aSmrg                             break
2351fe4c343aSmrg                             ;;
2352fe4c343aSmrg                        esac
2353fe4c343aSmrg                        shift
2354fe4c343aSmrg                        ;;
2355fe4c343aSmrg
2356fe4c343aSmrg        --no-silent|--no-quiet)
2357fe4c343aSmrg                        opt_quiet=false
2358fe4c343aSmrg                        func_append preserve_args " $_G_opt"
2359fe4c343aSmrg                        ;;
2360fe4c343aSmrg
2361fe4c343aSmrg        --no-warnings|--no-warning|--no-warn)
2362fe4c343aSmrg                        opt_warning=false
2363fe4c343aSmrg                        func_append preserve_args " $_G_opt"
2364fe4c343aSmrg                        ;;
2365fe4c343aSmrg
2366fe4c343aSmrg        --no-verbose)
2367fe4c343aSmrg                        opt_verbose=false
2368fe4c343aSmrg                        func_append preserve_args " $_G_opt"
2369fe4c343aSmrg                        ;;
2370fe4c343aSmrg
2371fe4c343aSmrg        --silent|--quiet)
2372fe4c343aSmrg                        opt_quiet=:
2373fe4c343aSmrg                        opt_verbose=false
2374fe4c343aSmrg                        func_append preserve_args " $_G_opt"
2375fe4c343aSmrg                        ;;
2376fe4c343aSmrg
2377fe4c343aSmrg        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
2378fe4c343aSmrg                        opt_tag=$1
2379fe4c343aSmrg                        func_append preserve_args " $_G_opt $1"
2380fe4c343aSmrg                        func_enable_tag "$1"
2381fe4c343aSmrg                        shift
2382fe4c343aSmrg                        ;;
2383fe4c343aSmrg
2384fe4c343aSmrg        --verbose|-v)   opt_quiet=false
2385fe4c343aSmrg                        opt_verbose=:
2386fe4c343aSmrg                        func_append preserve_args " $_G_opt"
2387fe4c343aSmrg                        ;;
2388fe4c343aSmrg
2389fe4c343aSmrg	# An option not handled by this hook function:
2390fe4c343aSmrg        *)		set dummy "$_G_opt" ${1+"$@"};	shift; break  ;;
2391fe4c343aSmrg      esac
2392fe4c343aSmrg    done
23931bedbe3fSmrg
23941bedbe3fSmrg
2395fe4c343aSmrg    # save modified positional parameters for caller
2396fe4c343aSmrg    func_quote_for_eval ${1+"$@"}
2397fe4c343aSmrg    libtool_parse_options_result=$func_quote_for_eval_result
2398fe4c343aSmrg}
2399fe4c343aSmrgfunc_add_hook func_parse_options libtool_parse_options
2400549e21daSmrg
2401ba6a1819Smrg
2402549e21daSmrg
2403fe4c343aSmrg# libtool_validate_options [ARG]...
2404fe4c343aSmrg# ---------------------------------
2405fe4c343aSmrg# Perform any sanity checks on option settings and/or unconsumed
2406fe4c343aSmrg# arguments.
2407fe4c343aSmrglibtool_validate_options ()
2408fe4c343aSmrg{
2409fe4c343aSmrg    # save first non-option argument
2410fe4c343aSmrg    if test 0 -lt $#; then
2411fe4c343aSmrg      nonopt=$1
2412fe4c343aSmrg      shift
2413549e21daSmrg    fi
2414549e21daSmrg
2415fe4c343aSmrg    # preserve --debug
2416fe4c343aSmrg    test : = "$debug_cmd" || func_append preserve_args " --debug"
2417549e21daSmrg
2418fe4c343aSmrg    case $host in
2419fe4c343aSmrg      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
2420fe4c343aSmrg      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
2421fe4c343aSmrg      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
2422fe4c343aSmrg        # don't eliminate duplications in $postdeps and $predeps
2423fe4c343aSmrg        opt_duplicate_compiler_generated_deps=:
2424fe4c343aSmrg        ;;
2425fe4c343aSmrg      *)
2426fe4c343aSmrg        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
2427fe4c343aSmrg        ;;
2428fe4c343aSmrg    esac
2429549e21daSmrg
2430fe4c343aSmrg    $opt_help || {
2431fe4c343aSmrg      # Sanity checks first:
2432fe4c343aSmrg      func_check_version_match
2433fe4c343aSmrg
2434fe4c343aSmrg      test yes != "$build_libtool_libs" \
2435fe4c343aSmrg        && test yes != "$build_old_libs" \
2436fe4c343aSmrg        && func_fatal_configuration "not configured to build any kind of library"
2437fe4c343aSmrg
2438fe4c343aSmrg      # Darwin sucks
2439fe4c343aSmrg      eval std_shrext=\"$shrext_cmds\"
2440fe4c343aSmrg
2441fe4c343aSmrg      # Only execute mode is allowed to have -dlopen flags.
2442fe4c343aSmrg      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
2443fe4c343aSmrg        func_error "unrecognized option '-dlopen'"
2444fe4c343aSmrg        $ECHO "$help" 1>&2
2445fe4c343aSmrg        exit $EXIT_FAILURE
2446fe4c343aSmrg      fi
2447549e21daSmrg
2448fe4c343aSmrg      # Change the help message to a mode-specific one.
2449fe4c343aSmrg      generic_help=$help
2450fe4c343aSmrg      help="Try '$progname --help --mode=$opt_mode' for more information."
2451fe4c343aSmrg    }
2452549e21daSmrg
2453fe4c343aSmrg    # Pass back the unparsed argument list
2454fe4c343aSmrg    func_quote_for_eval ${1+"$@"}
2455fe4c343aSmrg    libtool_validate_options_result=$func_quote_for_eval_result
24561bedbe3fSmrg}
2457fe4c343aSmrgfunc_add_hook func_validate_options libtool_validate_options
2458549e21daSmrg
2459549e21daSmrg
2460fe4c343aSmrg# Process options as early as possible so that --help and --version
2461fe4c343aSmrg# can return quickly.
2462fe4c343aSmrgfunc_options ${1+"$@"}
2463fe4c343aSmrgeval set dummy "$func_options_result"; shift
2464fe4c343aSmrg
2465ba6a1819Smrg
2466ba6a1819Smrg
24671bedbe3fSmrg## ----------- ##
24681bedbe3fSmrg##    Main.    ##
24691bedbe3fSmrg## ----------- ##
2470ba6a1819Smrg
2471fe4c343aSmrgmagic='%%%MAGIC variable%%%'
2472fe4c343aSmrgmagic_exe='%%%MAGIC EXE variable%%%'
2473fe4c343aSmrg
2474fe4c343aSmrg# Global variables.
2475fe4c343aSmrgextracted_archives=
2476fe4c343aSmrgextracted_serial=0
2477fe4c343aSmrg
2478fe4c343aSmrg# If this variable is set in any of the actions, the command in it
2479fe4c343aSmrg# will be execed at the end.  This prevents here-documents from being
2480fe4c343aSmrg# left over by shells.
2481fe4c343aSmrgexec_cmd=
2482fe4c343aSmrg
2483fe4c343aSmrg
2484fe4c343aSmrg# A function that is used when there is no print builtin or printf.
2485fe4c343aSmrgfunc_fallback_echo ()
2486fe4c343aSmrg{
2487fe4c343aSmrg  eval 'cat <<_LTECHO_EOF
2488fe4c343aSmrg$1
2489fe4c343aSmrg_LTECHO_EOF'
2490fe4c343aSmrg}
2491fe4c343aSmrg
2492fe4c343aSmrg# func_generated_by_libtool
2493fe4c343aSmrg# True iff stdin has been generated by Libtool. This function is only
2494fe4c343aSmrg# a basic sanity check; it will hardly flush out determined imposters.
2495fe4c343aSmrgfunc_generated_by_libtool_p ()
2496fe4c343aSmrg{
2497fe4c343aSmrg  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
2498fe4c343aSmrg}
2499fe4c343aSmrg
2500549e21daSmrg# func_lalib_p file
2501fe4c343aSmrg# True iff FILE is a libtool '.la' library or '.lo' object file.
2502549e21daSmrg# This function is only a basic sanity check; it will hardly flush out
2503549e21daSmrg# determined imposters.
2504549e21daSmrgfunc_lalib_p ()
2505549e21daSmrg{
2506549e21daSmrg    test -f "$1" &&
2507fe4c343aSmrg      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
2508549e21daSmrg}
2509ba6a1819Smrg
2510549e21daSmrg# func_lalib_unsafe_p file
2511fe4c343aSmrg# True iff FILE is a libtool '.la' library or '.lo' object file.
2512549e21daSmrg# This function implements the same check as func_lalib_p without
2513549e21daSmrg# resorting to external programs.  To this end, it redirects stdin and
2514549e21daSmrg# closes it afterwards, without saving the original file descriptor.
2515549e21daSmrg# As a safety measure, use it only where a negative result would be
2516fe4c343aSmrg# fatal anyway.  Works if 'file' does not exist.
2517549e21daSmrgfunc_lalib_unsafe_p ()
2518549e21daSmrg{
2519549e21daSmrg    lalib_p=no
2520549e21daSmrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
2521549e21daSmrg	for lalib_p_l in 1 2 3 4
2522549e21daSmrg	do
2523549e21daSmrg	    read lalib_p_line
2524fe4c343aSmrg	    case $lalib_p_line in
2525549e21daSmrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
2526549e21daSmrg	    esac
2527549e21daSmrg	done
2528549e21daSmrg	exec 0<&5 5<&-
2529549e21daSmrg    fi
2530fe4c343aSmrg    test yes = "$lalib_p"
2531549e21daSmrg}
2532ba6a1819Smrg
2533549e21daSmrg# func_ltwrapper_script_p file
2534549e21daSmrg# True iff FILE is a libtool wrapper script
2535549e21daSmrg# This function is only a basic sanity check; it will hardly flush out
2536549e21daSmrg# determined imposters.
2537549e21daSmrgfunc_ltwrapper_script_p ()
2538549e21daSmrg{
2539fe4c343aSmrg    test -f "$1" &&
2540fe4c343aSmrg      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
2541549e21daSmrg}
2542ba6a1819Smrg
2543549e21daSmrg# func_ltwrapper_executable_p file
2544549e21daSmrg# True iff FILE is a libtool wrapper executable
2545549e21daSmrg# This function is only a basic sanity check; it will hardly flush out
2546549e21daSmrg# determined imposters.
2547549e21daSmrgfunc_ltwrapper_executable_p ()
2548549e21daSmrg{
2549549e21daSmrg    func_ltwrapper_exec_suffix=
2550549e21daSmrg    case $1 in
2551549e21daSmrg    *.exe) ;;
2552549e21daSmrg    *) func_ltwrapper_exec_suffix=.exe ;;
2553549e21daSmrg    esac
2554549e21daSmrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
2555549e21daSmrg}
2556ba6a1819Smrg
2557549e21daSmrg# func_ltwrapper_scriptname file
2558549e21daSmrg# Assumes file is an ltwrapper_executable
2559549e21daSmrg# uses $file to determine the appropriate filename for a
2560549e21daSmrg# temporary ltwrapper_script.
2561549e21daSmrgfunc_ltwrapper_scriptname ()
2562549e21daSmrg{
25631bedbe3fSmrg    func_dirname_and_basename "$1" "" "."
25641bedbe3fSmrg    func_stripname '' '.exe' "$func_basename_result"
2565fe4c343aSmrg    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
2566549e21daSmrg}
2567ba6a1819Smrg
2568549e21daSmrg# func_ltwrapper_p file
2569549e21daSmrg# True iff FILE is a libtool wrapper script or wrapper executable
2570549e21daSmrg# This function is only a basic sanity check; it will hardly flush out
2571549e21daSmrg# determined imposters.
2572549e21daSmrgfunc_ltwrapper_p ()
2573549e21daSmrg{
2574549e21daSmrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
2575549e21daSmrg}
2576ba6a1819Smrg
2577ba6a1819Smrg
2578549e21daSmrg# func_execute_cmds commands fail_cmd
2579549e21daSmrg# Execute tilde-delimited COMMANDS.
2580549e21daSmrg# If FAIL_CMD is given, eval that upon failure.
2581549e21daSmrg# FAIL_CMD may read-access the current command in variable CMD!
2582549e21daSmrgfunc_execute_cmds ()
2583549e21daSmrg{
2584fe4c343aSmrg    $debug_cmd
2585fe4c343aSmrg
2586549e21daSmrg    save_ifs=$IFS; IFS='~'
2587549e21daSmrg    for cmd in $1; do
2588fe4c343aSmrg      IFS=$sp$nl
2589549e21daSmrg      eval cmd=\"$cmd\"
2590fe4c343aSmrg      IFS=$save_ifs
2591549e21daSmrg      func_show_eval "$cmd" "${2-:}"
2592549e21daSmrg    done
2593549e21daSmrg    IFS=$save_ifs
2594549e21daSmrg}
2595ba6a1819Smrg
2596ba6a1819Smrg
2597549e21daSmrg# func_source file
2598549e21daSmrg# Source FILE, adding directory component if necessary.
2599549e21daSmrg# Note that it is not necessary on cygwin/mingw to append a dot to
2600549e21daSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
2601549e21daSmrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
2602fe4c343aSmrg# 'FILE.' does not work on cygwin managed mounts.
2603549e21daSmrgfunc_source ()
2604549e21daSmrg{
2605fe4c343aSmrg    $debug_cmd
2606fe4c343aSmrg
2607549e21daSmrg    case $1 in
2608549e21daSmrg    */* | *\\*)	. "$1" ;;
2609549e21daSmrg    *)		. "./$1" ;;
2610549e21daSmrg    esac
2611549e21daSmrg}
2612549e21daSmrg
2613549e21daSmrg
26141bedbe3fSmrg# func_resolve_sysroot PATH
26151bedbe3fSmrg# Replace a leading = in PATH with a sysroot.  Store the result into
26161bedbe3fSmrg# func_resolve_sysroot_result
26171bedbe3fSmrgfunc_resolve_sysroot ()
26181bedbe3fSmrg{
26191bedbe3fSmrg  func_resolve_sysroot_result=$1
26201bedbe3fSmrg  case $func_resolve_sysroot_result in
26211bedbe3fSmrg  =*)
26221bedbe3fSmrg    func_stripname '=' '' "$func_resolve_sysroot_result"
26231bedbe3fSmrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
26241bedbe3fSmrg    ;;
26251bedbe3fSmrg  esac
26261bedbe3fSmrg}
26271bedbe3fSmrg
26281bedbe3fSmrg# func_replace_sysroot PATH
26291bedbe3fSmrg# If PATH begins with the sysroot, replace it with = and
26301bedbe3fSmrg# store the result into func_replace_sysroot_result.
26311bedbe3fSmrgfunc_replace_sysroot ()
26321bedbe3fSmrg{
2633fe4c343aSmrg  case $lt_sysroot:$1 in
26341bedbe3fSmrg  ?*:"$lt_sysroot"*)
26351bedbe3fSmrg    func_stripname "$lt_sysroot" '' "$1"
2636fe4c343aSmrg    func_replace_sysroot_result='='$func_stripname_result
26371bedbe3fSmrg    ;;
26381bedbe3fSmrg  *)
26391bedbe3fSmrg    # Including no sysroot.
26401bedbe3fSmrg    func_replace_sysroot_result=$1
26411bedbe3fSmrg    ;;
26421bedbe3fSmrg  esac
26431bedbe3fSmrg}
26441bedbe3fSmrg
2645549e21daSmrg# func_infer_tag arg
2646549e21daSmrg# Infer tagged configuration to use if any are available and
2647549e21daSmrg# if one wasn't chosen via the "--tag" command line option.
2648549e21daSmrg# Only attempt this if the compiler in the base compile
2649549e21daSmrg# command doesn't match the default compiler.
2650549e21daSmrg# arg is usually of the form 'gcc ...'
2651549e21daSmrgfunc_infer_tag ()
2652549e21daSmrg{
2653fe4c343aSmrg    $debug_cmd
2654fe4c343aSmrg
2655549e21daSmrg    if test -n "$available_tags" && test -z "$tagname"; then
2656549e21daSmrg      CC_quoted=
2657549e21daSmrg      for arg in $CC; do
26581bedbe3fSmrg	func_append_quoted CC_quoted "$arg"
2659549e21daSmrg      done
2660549e21daSmrg      CC_expanded=`func_echo_all $CC`
2661549e21daSmrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
2662549e21daSmrg      case $@ in
2663549e21daSmrg      # Blanks in the command may have been stripped by the calling shell,
2664549e21daSmrg      # but not from the CC environment variable when configure was run.
2665549e21daSmrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2666549e21daSmrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
2667549e21daSmrg      # Blanks at the start of $base_compile will cause this to fail
2668549e21daSmrg      # if we don't check for them as well.
2669549e21daSmrg      *)
2670549e21daSmrg	for z in $available_tags; do
2671549e21daSmrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
2672549e21daSmrg	    # Evaluate the configuration.
2673fe4c343aSmrg	    eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
2674549e21daSmrg	    CC_quoted=
2675549e21daSmrg	    for arg in $CC; do
2676549e21daSmrg	      # Double-quote args containing other shell metacharacters.
26771bedbe3fSmrg	      func_append_quoted CC_quoted "$arg"
2678549e21daSmrg	    done
2679549e21daSmrg	    CC_expanded=`func_echo_all $CC`
2680549e21daSmrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
2681549e21daSmrg	    case "$@ " in
2682549e21daSmrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2683549e21daSmrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
2684549e21daSmrg	      # The compiler in the base compile command matches
2685549e21daSmrg	      # the one in the tagged configuration.
2686549e21daSmrg	      # Assume this is the tagged configuration we want.
2687549e21daSmrg	      tagname=$z
2688549e21daSmrg	      break
2689549e21daSmrg	      ;;
2690549e21daSmrg	    esac
2691549e21daSmrg	  fi
2692549e21daSmrg	done
2693549e21daSmrg	# If $tagname still isn't set, then no tagged configuration
2694549e21daSmrg	# was found and let the user know that the "--tag" command
2695549e21daSmrg	# line option must be used.
2696549e21daSmrg	if test -z "$tagname"; then
2697549e21daSmrg	  func_echo "unable to infer tagged configuration"
2698fe4c343aSmrg	  func_fatal_error "specify a tag with '--tag'"
2699549e21daSmrg#	else
2700549e21daSmrg#	  func_verbose "using $tagname tagged configuration"
2701549e21daSmrg	fi
2702549e21daSmrg	;;
2703549e21daSmrg      esac
2704549e21daSmrg    fi
2705549e21daSmrg}
2706549e21daSmrg
2707549e21daSmrg
27081bedbe3fSmrg
27091bedbe3fSmrg# func_write_libtool_object output_name pic_name nonpic_name
27101bedbe3fSmrg# Create a libtool object file (analogous to a ".la" file),
27111bedbe3fSmrg# but don't create it if we're doing a dry run.
27121bedbe3fSmrgfunc_write_libtool_object ()
27131bedbe3fSmrg{
2714fe4c343aSmrg    write_libobj=$1
2715fe4c343aSmrg    if test yes = "$build_libtool_libs"; then
2716fe4c343aSmrg      write_lobj=\'$2\'
27171bedbe3fSmrg    else
27181bedbe3fSmrg      write_lobj=none
27191bedbe3fSmrg    fi
27201bedbe3fSmrg
2721fe4c343aSmrg    if test yes = "$build_old_libs"; then
2722fe4c343aSmrg      write_oldobj=\'$3\'
27231bedbe3fSmrg    else
27241bedbe3fSmrg      write_oldobj=none
27251bedbe3fSmrg    fi
27261bedbe3fSmrg
27271bedbe3fSmrg    $opt_dry_run || {
27281bedbe3fSmrg      cat >${write_libobj}T <<EOF
27291bedbe3fSmrg# $write_libobj - a libtool object file
2730fe4c343aSmrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
27311bedbe3fSmrg#
27321bedbe3fSmrg# Please DO NOT delete this file!
27331bedbe3fSmrg# It is necessary for linking the library.
27341bedbe3fSmrg
27351bedbe3fSmrg# Name of the PIC object.
27361bedbe3fSmrgpic_object=$write_lobj
27371bedbe3fSmrg
27381bedbe3fSmrg# Name of the non-PIC object
27391bedbe3fSmrgnon_pic_object=$write_oldobj
27401bedbe3fSmrg
27411bedbe3fSmrgEOF
2742fe4c343aSmrg      $MV "${write_libobj}T" "$write_libobj"
27431bedbe3fSmrg    }
27441bedbe3fSmrg}
27451bedbe3fSmrg
27461bedbe3fSmrg
27471bedbe3fSmrg##################################################
27481bedbe3fSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
27491bedbe3fSmrg##################################################
27501bedbe3fSmrg
27511bedbe3fSmrg# func_convert_core_file_wine_to_w32 ARG
27521bedbe3fSmrg# Helper function used by file name conversion functions when $build is *nix,
27531bedbe3fSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
27541bedbe3fSmrg# correctly configured wine environment available, with the winepath program
27551bedbe3fSmrg# in $build's $PATH.
27561bedbe3fSmrg#
27571bedbe3fSmrg# ARG is the $build file name to be converted to w32 format.
27581bedbe3fSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
27591bedbe3fSmrg# be empty on error (or when ARG is empty)
27601bedbe3fSmrgfunc_convert_core_file_wine_to_w32 ()
27611bedbe3fSmrg{
2762fe4c343aSmrg  $debug_cmd
2763fe4c343aSmrg
2764fe4c343aSmrg  func_convert_core_file_wine_to_w32_result=$1
27651bedbe3fSmrg  if test -n "$1"; then
27661bedbe3fSmrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
27671bedbe3fSmrg    # are forced to check the contents of stdout. On the other hand, if the
27681bedbe3fSmrg    # command is not found, the shell will set an exit code of 127 and print
27691bedbe3fSmrg    # *an error message* to stdout. So we must check for both error code of
27701bedbe3fSmrg    # zero AND non-empty stdout, which explains the odd construction:
27711bedbe3fSmrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
2772fe4c343aSmrg    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
27731bedbe3fSmrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
2774fe4c343aSmrg        $SED -e "$sed_naive_backslashify"`
27751bedbe3fSmrg    else
27761bedbe3fSmrg      func_convert_core_file_wine_to_w32_result=
27771bedbe3fSmrg    fi
27781bedbe3fSmrg  fi
27791bedbe3fSmrg}
27801bedbe3fSmrg# end: func_convert_core_file_wine_to_w32
27811bedbe3fSmrg
27821bedbe3fSmrg
27831bedbe3fSmrg# func_convert_core_path_wine_to_w32 ARG
27841bedbe3fSmrg# Helper function used by path conversion functions when $build is *nix, and
27851bedbe3fSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
27861bedbe3fSmrg# configured wine environment available, with the winepath program in $build's
27871bedbe3fSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
27881bedbe3fSmrg#
27891bedbe3fSmrg# ARG is path to be converted from $build format to win32.
27901bedbe3fSmrg# Result is available in $func_convert_core_path_wine_to_w32_result.
27911bedbe3fSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
27921bedbe3fSmrg# are convertible, then the result may be empty.
27931bedbe3fSmrgfunc_convert_core_path_wine_to_w32 ()
27941bedbe3fSmrg{
2795fe4c343aSmrg  $debug_cmd
2796fe4c343aSmrg
27971bedbe3fSmrg  # unfortunately, winepath doesn't convert paths, only file names
2798fe4c343aSmrg  func_convert_core_path_wine_to_w32_result=
27991bedbe3fSmrg  if test -n "$1"; then
28001bedbe3fSmrg    oldIFS=$IFS
28011bedbe3fSmrg    IFS=:
28021bedbe3fSmrg    for func_convert_core_path_wine_to_w32_f in $1; do
28031bedbe3fSmrg      IFS=$oldIFS
28041bedbe3fSmrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
2805fe4c343aSmrg      if test -n "$func_convert_core_file_wine_to_w32_result"; then
28061bedbe3fSmrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
2807fe4c343aSmrg          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
28081bedbe3fSmrg        else
28091bedbe3fSmrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
28101bedbe3fSmrg        fi
28111bedbe3fSmrg      fi
28121bedbe3fSmrg    done
28131bedbe3fSmrg    IFS=$oldIFS
28141bedbe3fSmrg  fi
28151bedbe3fSmrg}
28161bedbe3fSmrg# end: func_convert_core_path_wine_to_w32
28171bedbe3fSmrg
28181bedbe3fSmrg
28191bedbe3fSmrg# func_cygpath ARGS...
28201bedbe3fSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
28211bedbe3fSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
28221bedbe3fSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
28231bedbe3fSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
28241bedbe3fSmrg# file name or path is assumed to be in w32 format, as previously converted
28251bedbe3fSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
28261bedbe3fSmrg# or path in func_cygpath_result (input file name or path is assumed to be in
28271bedbe3fSmrg# Cygwin format). Returns an empty string on error.
28281bedbe3fSmrg#
28291bedbe3fSmrg# ARGS are passed to cygpath, with the last one being the file name or path to
28301bedbe3fSmrg# be converted.
28311bedbe3fSmrg#
28321bedbe3fSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
28331bedbe3fSmrg# environment variable; do not put it in $PATH.
28341bedbe3fSmrgfunc_cygpath ()
28351bedbe3fSmrg{
2836fe4c343aSmrg  $debug_cmd
2837fe4c343aSmrg
28381bedbe3fSmrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
28391bedbe3fSmrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
28401bedbe3fSmrg    if test "$?" -ne 0; then
28411bedbe3fSmrg      # on failure, ensure result is empty
28421bedbe3fSmrg      func_cygpath_result=
28431bedbe3fSmrg    fi
28441bedbe3fSmrg  else
28451bedbe3fSmrg    func_cygpath_result=
2846fe4c343aSmrg    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
28471bedbe3fSmrg  fi
28481bedbe3fSmrg}
28491bedbe3fSmrg#end: func_cygpath
28501bedbe3fSmrg
28511bedbe3fSmrg
28521bedbe3fSmrg# func_convert_core_msys_to_w32 ARG
28531bedbe3fSmrg# Convert file name or path ARG from MSYS format to w32 format.  Return
28541bedbe3fSmrg# result in func_convert_core_msys_to_w32_result.
28551bedbe3fSmrgfunc_convert_core_msys_to_w32 ()
28561bedbe3fSmrg{
2857fe4c343aSmrg  $debug_cmd
2858fe4c343aSmrg
28591bedbe3fSmrg  # awkward: cmd appends spaces to result
28601bedbe3fSmrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
2861fe4c343aSmrg    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
28621bedbe3fSmrg}
28631bedbe3fSmrg#end: func_convert_core_msys_to_w32
28641bedbe3fSmrg
28651bedbe3fSmrg
28661bedbe3fSmrg# func_convert_file_check ARG1 ARG2
28671bedbe3fSmrg# Verify that ARG1 (a file name in $build format) was converted to $host
28681bedbe3fSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
28691bedbe3fSmrg# func_to_host_file_result to ARG1).
28701bedbe3fSmrgfunc_convert_file_check ()
28711bedbe3fSmrg{
2872fe4c343aSmrg  $debug_cmd
2873fe4c343aSmrg
2874fe4c343aSmrg  if test -z "$2" && test -n "$1"; then
28751bedbe3fSmrg    func_error "Could not determine host file name corresponding to"
2876fe4c343aSmrg    func_error "  '$1'"
28771bedbe3fSmrg    func_error "Continuing, but uninstalled executables may not work."
28781bedbe3fSmrg    # Fallback:
2879fe4c343aSmrg    func_to_host_file_result=$1
28801bedbe3fSmrg  fi
28811bedbe3fSmrg}
28821bedbe3fSmrg# end func_convert_file_check
28831bedbe3fSmrg
28841bedbe3fSmrg
28851bedbe3fSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
28861bedbe3fSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host
28871bedbe3fSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
28881bedbe3fSmrg# func_to_host_file_result to a simplistic fallback value (see below).
28891bedbe3fSmrgfunc_convert_path_check ()
28901bedbe3fSmrg{
2891fe4c343aSmrg  $debug_cmd
2892fe4c343aSmrg
28931bedbe3fSmrg  if test -z "$4" && test -n "$3"; then
28941bedbe3fSmrg    func_error "Could not determine the host path corresponding to"
2895fe4c343aSmrg    func_error "  '$3'"
28961bedbe3fSmrg    func_error "Continuing, but uninstalled executables may not work."
28971bedbe3fSmrg    # Fallback.  This is a deliberately simplistic "conversion" and
28981bedbe3fSmrg    # should not be "improved".  See libtool.info.
28991bedbe3fSmrg    if test "x$1" != "x$2"; then
29001bedbe3fSmrg      lt_replace_pathsep_chars="s|$1|$2|g"
29011bedbe3fSmrg      func_to_host_path_result=`echo "$3" |
29021bedbe3fSmrg        $SED -e "$lt_replace_pathsep_chars"`
29031bedbe3fSmrg    else
2904fe4c343aSmrg      func_to_host_path_result=$3
29051bedbe3fSmrg    fi
29061bedbe3fSmrg  fi
29071bedbe3fSmrg}
29081bedbe3fSmrg# end func_convert_path_check
29091bedbe3fSmrg
29101bedbe3fSmrg
29111bedbe3fSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
29121bedbe3fSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
29131bedbe3fSmrg# and appending REPL if ORIG matches BACKPAT.
29141bedbe3fSmrgfunc_convert_path_front_back_pathsep ()
29151bedbe3fSmrg{
2916fe4c343aSmrg  $debug_cmd
2917fe4c343aSmrg
29181bedbe3fSmrg  case $4 in
2919fe4c343aSmrg  $1 ) func_to_host_path_result=$3$func_to_host_path_result
29201bedbe3fSmrg    ;;
29211bedbe3fSmrg  esac
29221bedbe3fSmrg  case $4 in
29231bedbe3fSmrg  $2 ) func_append func_to_host_path_result "$3"
29241bedbe3fSmrg    ;;
29251bedbe3fSmrg  esac
29261bedbe3fSmrg}
29271bedbe3fSmrg# end func_convert_path_front_back_pathsep
29281bedbe3fSmrg
29291bedbe3fSmrg
29301bedbe3fSmrg##################################################
29311bedbe3fSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
29321bedbe3fSmrg##################################################
2933fe4c343aSmrg# invoked via '$to_host_file_cmd ARG'
29341bedbe3fSmrg#
29351bedbe3fSmrg# In each case, ARG is the path to be converted from $build to $host format.
29361bedbe3fSmrg# Result will be available in $func_to_host_file_result.
29371bedbe3fSmrg
29381bedbe3fSmrg
29391bedbe3fSmrg# func_to_host_file ARG
29401bedbe3fSmrg# Converts the file name ARG from $build format to $host format. Return result
29411bedbe3fSmrg# in func_to_host_file_result.
29421bedbe3fSmrgfunc_to_host_file ()
29431bedbe3fSmrg{
2944fe4c343aSmrg  $debug_cmd
2945fe4c343aSmrg
29461bedbe3fSmrg  $to_host_file_cmd "$1"
29471bedbe3fSmrg}
29481bedbe3fSmrg# end func_to_host_file
29491bedbe3fSmrg
29501bedbe3fSmrg
29511bedbe3fSmrg# func_to_tool_file ARG LAZY
29521bedbe3fSmrg# converts the file name ARG from $build format to toolchain format. Return
29531bedbe3fSmrg# result in func_to_tool_file_result.  If the conversion in use is listed
29541bedbe3fSmrg# in (the comma separated) LAZY, no conversion takes place.
29551bedbe3fSmrgfunc_to_tool_file ()
29561bedbe3fSmrg{
2957fe4c343aSmrg  $debug_cmd
2958fe4c343aSmrg
29591bedbe3fSmrg  case ,$2, in
29601bedbe3fSmrg    *,"$to_tool_file_cmd",*)
29611bedbe3fSmrg      func_to_tool_file_result=$1
29621bedbe3fSmrg      ;;
29631bedbe3fSmrg    *)
29641bedbe3fSmrg      $to_tool_file_cmd "$1"
29651bedbe3fSmrg      func_to_tool_file_result=$func_to_host_file_result
29661bedbe3fSmrg      ;;
29671bedbe3fSmrg  esac
29681bedbe3fSmrg}
29691bedbe3fSmrg# end func_to_tool_file
29701bedbe3fSmrg
29711bedbe3fSmrg
29721bedbe3fSmrg# func_convert_file_noop ARG
29731bedbe3fSmrg# Copy ARG to func_to_host_file_result.
29741bedbe3fSmrgfunc_convert_file_noop ()
29751bedbe3fSmrg{
2976fe4c343aSmrg  func_to_host_file_result=$1
29771bedbe3fSmrg}
29781bedbe3fSmrg# end func_convert_file_noop
29791bedbe3fSmrg
29801bedbe3fSmrg
29811bedbe3fSmrg# func_convert_file_msys_to_w32 ARG
29821bedbe3fSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
29831bedbe3fSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
29841bedbe3fSmrg# func_to_host_file_result.
29851bedbe3fSmrgfunc_convert_file_msys_to_w32 ()
29861bedbe3fSmrg{
2987fe4c343aSmrg  $debug_cmd
2988fe4c343aSmrg
2989fe4c343aSmrg  func_to_host_file_result=$1
29901bedbe3fSmrg  if test -n "$1"; then
29911bedbe3fSmrg    func_convert_core_msys_to_w32 "$1"
2992fe4c343aSmrg    func_to_host_file_result=$func_convert_core_msys_to_w32_result
29931bedbe3fSmrg  fi
29941bedbe3fSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
29951bedbe3fSmrg}
29961bedbe3fSmrg# end func_convert_file_msys_to_w32
29971bedbe3fSmrg
29981bedbe3fSmrg
29991bedbe3fSmrg# func_convert_file_cygwin_to_w32 ARG
30001bedbe3fSmrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
30011bedbe3fSmrg# func_to_host_file_result.
30021bedbe3fSmrgfunc_convert_file_cygwin_to_w32 ()
30031bedbe3fSmrg{
3004fe4c343aSmrg  $debug_cmd
3005fe4c343aSmrg
3006fe4c343aSmrg  func_to_host_file_result=$1
30071bedbe3fSmrg  if test -n "$1"; then
30081bedbe3fSmrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
30091bedbe3fSmrg    # LT_CYGPATH in this case.
30101bedbe3fSmrg    func_to_host_file_result=`cygpath -m "$1"`
30111bedbe3fSmrg  fi
30121bedbe3fSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
30131bedbe3fSmrg}
30141bedbe3fSmrg# end func_convert_file_cygwin_to_w32
30151bedbe3fSmrg
30161bedbe3fSmrg
30171bedbe3fSmrg# func_convert_file_nix_to_w32 ARG
30181bedbe3fSmrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
30191bedbe3fSmrg# and a working winepath. Returns result in func_to_host_file_result.
30201bedbe3fSmrgfunc_convert_file_nix_to_w32 ()
30211bedbe3fSmrg{
3022fe4c343aSmrg  $debug_cmd
3023fe4c343aSmrg
3024fe4c343aSmrg  func_to_host_file_result=$1
30251bedbe3fSmrg  if test -n "$1"; then
30261bedbe3fSmrg    func_convert_core_file_wine_to_w32 "$1"
3027fe4c343aSmrg    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
30281bedbe3fSmrg  fi
30291bedbe3fSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
30301bedbe3fSmrg}
30311bedbe3fSmrg# end func_convert_file_nix_to_w32
30321bedbe3fSmrg
30331bedbe3fSmrg
30341bedbe3fSmrg# func_convert_file_msys_to_cygwin ARG
30351bedbe3fSmrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
30361bedbe3fSmrg# Returns result in func_to_host_file_result.
30371bedbe3fSmrgfunc_convert_file_msys_to_cygwin ()
30381bedbe3fSmrg{
3039fe4c343aSmrg  $debug_cmd
3040fe4c343aSmrg
3041fe4c343aSmrg  func_to_host_file_result=$1
30421bedbe3fSmrg  if test -n "$1"; then
30431bedbe3fSmrg    func_convert_core_msys_to_w32 "$1"
30441bedbe3fSmrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
3045fe4c343aSmrg    func_to_host_file_result=$func_cygpath_result
30461bedbe3fSmrg  fi
30471bedbe3fSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
30481bedbe3fSmrg}
30491bedbe3fSmrg# end func_convert_file_msys_to_cygwin
30501bedbe3fSmrg
30511bedbe3fSmrg
30521bedbe3fSmrg# func_convert_file_nix_to_cygwin ARG
30531bedbe3fSmrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
30541bedbe3fSmrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
30551bedbe3fSmrg# in func_to_host_file_result.
30561bedbe3fSmrgfunc_convert_file_nix_to_cygwin ()
30571bedbe3fSmrg{
3058fe4c343aSmrg  $debug_cmd
3059fe4c343aSmrg
3060fe4c343aSmrg  func_to_host_file_result=$1
30611bedbe3fSmrg  if test -n "$1"; then
30621bedbe3fSmrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
30631bedbe3fSmrg    func_convert_core_file_wine_to_w32 "$1"
30641bedbe3fSmrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
3065fe4c343aSmrg    func_to_host_file_result=$func_cygpath_result
30661bedbe3fSmrg  fi
30671bedbe3fSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
30681bedbe3fSmrg}
30691bedbe3fSmrg# end func_convert_file_nix_to_cygwin
30701bedbe3fSmrg
30711bedbe3fSmrg
30721bedbe3fSmrg#############################################
30731bedbe3fSmrg# $build to $host PATH CONVERSION FUNCTIONS #
30741bedbe3fSmrg#############################################
3075fe4c343aSmrg# invoked via '$to_host_path_cmd ARG'
30761bedbe3fSmrg#
30771bedbe3fSmrg# In each case, ARG is the path to be converted from $build to $host format.
30781bedbe3fSmrg# The result will be available in $func_to_host_path_result.
30791bedbe3fSmrg#
30801bedbe3fSmrg# Path separators are also converted from $build format to $host format.  If
30811bedbe3fSmrg# ARG begins or ends with a path separator character, it is preserved (but
30821bedbe3fSmrg# converted to $host format) on output.
30831bedbe3fSmrg#
30841bedbe3fSmrg# All path conversion functions are named using the following convention:
30851bedbe3fSmrg#   file name conversion function    : func_convert_file_X_to_Y ()
30861bedbe3fSmrg#   path conversion function         : func_convert_path_X_to_Y ()
30871bedbe3fSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the
30881bedbe3fSmrg# same.  If conversion functions are added for new $build/$host combinations,
30891bedbe3fSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
30901bedbe3fSmrg# will break.
30911bedbe3fSmrg
30921bedbe3fSmrg
30931bedbe3fSmrg# func_init_to_host_path_cmd
30941bedbe3fSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
30951bedbe3fSmrg# appropriate value, based on the value of $to_host_file_cmd.
30961bedbe3fSmrgto_host_path_cmd=
30971bedbe3fSmrgfunc_init_to_host_path_cmd ()
30981bedbe3fSmrg{
3099fe4c343aSmrg  $debug_cmd
3100fe4c343aSmrg
31011bedbe3fSmrg  if test -z "$to_host_path_cmd"; then
31021bedbe3fSmrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
3103fe4c343aSmrg    to_host_path_cmd=func_convert_path_$func_stripname_result
31041bedbe3fSmrg  fi
31051bedbe3fSmrg}
31061bedbe3fSmrg
31071bedbe3fSmrg
31081bedbe3fSmrg# func_to_host_path ARG
31091bedbe3fSmrg# Converts the path ARG from $build format to $host format. Return result
31101bedbe3fSmrg# in func_to_host_path_result.
31111bedbe3fSmrgfunc_to_host_path ()
31121bedbe3fSmrg{
3113fe4c343aSmrg  $debug_cmd
3114fe4c343aSmrg
31151bedbe3fSmrg  func_init_to_host_path_cmd
31161bedbe3fSmrg  $to_host_path_cmd "$1"
31171bedbe3fSmrg}
31181bedbe3fSmrg# end func_to_host_path
31191bedbe3fSmrg
31201bedbe3fSmrg
31211bedbe3fSmrg# func_convert_path_noop ARG
31221bedbe3fSmrg# Copy ARG to func_to_host_path_result.
31231bedbe3fSmrgfunc_convert_path_noop ()
31241bedbe3fSmrg{
3125fe4c343aSmrg  func_to_host_path_result=$1
31261bedbe3fSmrg}
31271bedbe3fSmrg# end func_convert_path_noop
31281bedbe3fSmrg
31291bedbe3fSmrg
31301bedbe3fSmrg# func_convert_path_msys_to_w32 ARG
31311bedbe3fSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
31321bedbe3fSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
31331bedbe3fSmrg# func_to_host_path_result.
31341bedbe3fSmrgfunc_convert_path_msys_to_w32 ()
31351bedbe3fSmrg{
3136fe4c343aSmrg  $debug_cmd
3137fe4c343aSmrg
3138fe4c343aSmrg  func_to_host_path_result=$1
31391bedbe3fSmrg  if test -n "$1"; then
31401bedbe3fSmrg    # Remove leading and trailing path separator characters from ARG.  MSYS
31411bedbe3fSmrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
31421bedbe3fSmrg    # and winepath ignores them completely.
31431bedbe3fSmrg    func_stripname : : "$1"
31441bedbe3fSmrg    func_to_host_path_tmp1=$func_stripname_result
31451bedbe3fSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3146fe4c343aSmrg    func_to_host_path_result=$func_convert_core_msys_to_w32_result
31471bedbe3fSmrg    func_convert_path_check : ";" \
31481bedbe3fSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
31491bedbe3fSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
31501bedbe3fSmrg  fi
31511bedbe3fSmrg}
31521bedbe3fSmrg# end func_convert_path_msys_to_w32
31531bedbe3fSmrg
31541bedbe3fSmrg
31551bedbe3fSmrg# func_convert_path_cygwin_to_w32 ARG
31561bedbe3fSmrg# Convert path ARG from Cygwin to w32 format.  Returns result in
31571bedbe3fSmrg# func_to_host_file_result.
31581bedbe3fSmrgfunc_convert_path_cygwin_to_w32 ()
31591bedbe3fSmrg{
3160fe4c343aSmrg  $debug_cmd
3161fe4c343aSmrg
3162fe4c343aSmrg  func_to_host_path_result=$1
31631bedbe3fSmrg  if test -n "$1"; then
31641bedbe3fSmrg    # See func_convert_path_msys_to_w32:
31651bedbe3fSmrg    func_stripname : : "$1"
31661bedbe3fSmrg    func_to_host_path_tmp1=$func_stripname_result
31671bedbe3fSmrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
31681bedbe3fSmrg    func_convert_path_check : ";" \
31691bedbe3fSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
31701bedbe3fSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
31711bedbe3fSmrg  fi
31721bedbe3fSmrg}
31731bedbe3fSmrg# end func_convert_path_cygwin_to_w32
31741bedbe3fSmrg
31751bedbe3fSmrg
31761bedbe3fSmrg# func_convert_path_nix_to_w32 ARG
31771bedbe3fSmrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
31781bedbe3fSmrg# a working winepath.  Returns result in func_to_host_file_result.
31791bedbe3fSmrgfunc_convert_path_nix_to_w32 ()
3180549e21daSmrg{
3181fe4c343aSmrg  $debug_cmd
3182fe4c343aSmrg
3183fe4c343aSmrg  func_to_host_path_result=$1
31841bedbe3fSmrg  if test -n "$1"; then
31851bedbe3fSmrg    # See func_convert_path_msys_to_w32:
31861bedbe3fSmrg    func_stripname : : "$1"
31871bedbe3fSmrg    func_to_host_path_tmp1=$func_stripname_result
31881bedbe3fSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3189fe4c343aSmrg    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
31901bedbe3fSmrg    func_convert_path_check : ";" \
31911bedbe3fSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
31921bedbe3fSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
31931bedbe3fSmrg  fi
31941bedbe3fSmrg}
31951bedbe3fSmrg# end func_convert_path_nix_to_w32
3196549e21daSmrg
3197549e21daSmrg
31981bedbe3fSmrg# func_convert_path_msys_to_cygwin ARG
31991bedbe3fSmrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
32001bedbe3fSmrg# Returns result in func_to_host_file_result.
32011bedbe3fSmrgfunc_convert_path_msys_to_cygwin ()
32021bedbe3fSmrg{
3203fe4c343aSmrg  $debug_cmd
3204fe4c343aSmrg
3205fe4c343aSmrg  func_to_host_path_result=$1
32061bedbe3fSmrg  if test -n "$1"; then
32071bedbe3fSmrg    # See func_convert_path_msys_to_w32:
32081bedbe3fSmrg    func_stripname : : "$1"
32091bedbe3fSmrg    func_to_host_path_tmp1=$func_stripname_result
32101bedbe3fSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
32111bedbe3fSmrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
3212fe4c343aSmrg    func_to_host_path_result=$func_cygpath_result
32131bedbe3fSmrg    func_convert_path_check : : \
32141bedbe3fSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
32151bedbe3fSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
32161bedbe3fSmrg  fi
32171bedbe3fSmrg}
32181bedbe3fSmrg# end func_convert_path_msys_to_cygwin
3219549e21daSmrg
3220549e21daSmrg
32211bedbe3fSmrg# func_convert_path_nix_to_cygwin ARG
32221bedbe3fSmrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
32231bedbe3fSmrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
32241bedbe3fSmrg# func_to_host_file_result.
32251bedbe3fSmrgfunc_convert_path_nix_to_cygwin ()
32261bedbe3fSmrg{
3227fe4c343aSmrg  $debug_cmd
3228fe4c343aSmrg
3229fe4c343aSmrg  func_to_host_path_result=$1
32301bedbe3fSmrg  if test -n "$1"; then
32311bedbe3fSmrg    # Remove leading and trailing path separator characters from
32321bedbe3fSmrg    # ARG. msys behavior is inconsistent here, cygpath turns them
32331bedbe3fSmrg    # into '.;' and ';.', and winepath ignores them completely.
32341bedbe3fSmrg    func_stripname : : "$1"
32351bedbe3fSmrg    func_to_host_path_tmp1=$func_stripname_result
32361bedbe3fSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
32371bedbe3fSmrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
3238fe4c343aSmrg    func_to_host_path_result=$func_cygpath_result
32391bedbe3fSmrg    func_convert_path_check : : \
32401bedbe3fSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
32411bedbe3fSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
32421bedbe3fSmrg  fi
3243549e21daSmrg}
32441bedbe3fSmrg# end func_convert_path_nix_to_cygwin
32451bedbe3fSmrg
3246549e21daSmrg
3247fe4c343aSmrg# func_dll_def_p FILE
3248fe4c343aSmrg# True iff FILE is a Windows DLL '.def' file.
3249fe4c343aSmrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4
3250fe4c343aSmrgfunc_dll_def_p ()
3251fe4c343aSmrg{
3252fe4c343aSmrg  $debug_cmd
3253fe4c343aSmrg
3254fe4c343aSmrg  func_dll_def_p_tmp=`$SED -n \
3255fe4c343aSmrg    -e 's/^[	 ]*//' \
3256fe4c343aSmrg    -e '/^\(;.*\)*$/d' \
3257fe4c343aSmrg    -e 's/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p' \
3258fe4c343aSmrg    -e q \
3259fe4c343aSmrg    "$1"`
3260fe4c343aSmrg  test DEF = "$func_dll_def_p_tmp"
3261fe4c343aSmrg}
3262fe4c343aSmrg
3263fe4c343aSmrg
3264549e21daSmrg# func_mode_compile arg...
3265549e21daSmrgfunc_mode_compile ()
3266549e21daSmrg{
3267fe4c343aSmrg    $debug_cmd
3268fe4c343aSmrg
3269549e21daSmrg    # Get the compilation command and the source file.
3270549e21daSmrg    base_compile=
3271fe4c343aSmrg    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
3272549e21daSmrg    suppress_opt=yes
3273549e21daSmrg    suppress_output=
3274549e21daSmrg    arg_mode=normal
3275549e21daSmrg    libobj=
3276549e21daSmrg    later=
3277549e21daSmrg    pie_flag=
3278549e21daSmrg
3279549e21daSmrg    for arg
3280549e21daSmrg    do
3281549e21daSmrg      case $arg_mode in
3282549e21daSmrg      arg  )
3283549e21daSmrg	# do not "continue".  Instead, add this to base_compile
3284fe4c343aSmrg	lastarg=$arg
3285549e21daSmrg	arg_mode=normal
3286549e21daSmrg	;;
3287549e21daSmrg
3288549e21daSmrg      target )
3289fe4c343aSmrg	libobj=$arg
3290549e21daSmrg	arg_mode=normal
3291549e21daSmrg	continue
3292549e21daSmrg	;;
3293549e21daSmrg
3294549e21daSmrg      normal )
3295549e21daSmrg	# Accept any command-line options.
3296549e21daSmrg	case $arg in
3297549e21daSmrg	-o)
3298549e21daSmrg	  test -n "$libobj" && \
3299fe4c343aSmrg	    func_fatal_error "you cannot specify '-o' more than once"
3300549e21daSmrg	  arg_mode=target
3301549e21daSmrg	  continue
3302549e21daSmrg	  ;;
3303549e21daSmrg
3304549e21daSmrg	-pie | -fpie | -fPIE)
33051bedbe3fSmrg          func_append pie_flag " $arg"
3306549e21daSmrg	  continue
3307549e21daSmrg	  ;;
3308549e21daSmrg
3309549e21daSmrg	-shared | -static | -prefer-pic | -prefer-non-pic)
33101bedbe3fSmrg	  func_append later " $arg"
3311549e21daSmrg	  continue
3312549e21daSmrg	  ;;
3313549e21daSmrg
3314549e21daSmrg	-no-suppress)
3315549e21daSmrg	  suppress_opt=no
3316549e21daSmrg	  continue
3317549e21daSmrg	  ;;
3318549e21daSmrg
3319549e21daSmrg	-Xcompiler)
3320549e21daSmrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
3321549e21daSmrg	  continue      #  The current "srcfile" will either be retained or
3322549e21daSmrg	  ;;            #  replaced later.  I would guess that would be a bug.
3323549e21daSmrg
3324549e21daSmrg	-Wc,*)
3325549e21daSmrg	  func_stripname '-Wc,' '' "$arg"
3326549e21daSmrg	  args=$func_stripname_result
3327549e21daSmrg	  lastarg=
3328fe4c343aSmrg	  save_ifs=$IFS; IFS=,
3329549e21daSmrg	  for arg in $args; do
3330fe4c343aSmrg	    IFS=$save_ifs
33311bedbe3fSmrg	    func_append_quoted lastarg "$arg"
3332549e21daSmrg	  done
3333fe4c343aSmrg	  IFS=$save_ifs
3334549e21daSmrg	  func_stripname ' ' '' "$lastarg"
3335549e21daSmrg	  lastarg=$func_stripname_result
3336549e21daSmrg
3337549e21daSmrg	  # Add the arguments to base_compile.
33381bedbe3fSmrg	  func_append base_compile " $lastarg"
3339549e21daSmrg	  continue
3340549e21daSmrg	  ;;
3341549e21daSmrg
3342549e21daSmrg	*)
3343549e21daSmrg	  # Accept the current argument as the source file.
3344549e21daSmrg	  # The previous "srcfile" becomes the current argument.
3345ba6a1819Smrg	  #
3346fe4c343aSmrg	  lastarg=$srcfile
3347fe4c343aSmrg	  srcfile=$arg
3348ba6a1819Smrg	  ;;
3349ba6a1819Smrg	esac  #  case $arg
3350ba6a1819Smrg	;;
3351ba6a1819Smrg      esac    #  case $arg_mode
3352ba6a1819Smrg
3353ba6a1819Smrg      # Aesthetically quote the previous argument.
33541bedbe3fSmrg      func_append_quoted base_compile "$lastarg"
3355ba6a1819Smrg    done # for arg
3356ba6a1819Smrg
3357ba6a1819Smrg    case $arg_mode in
3358ba6a1819Smrg    arg)
3359549e21daSmrg      func_fatal_error "you must specify an argument for -Xcompile"
3360ba6a1819Smrg      ;;
3361ba6a1819Smrg    target)
3362fe4c343aSmrg      func_fatal_error "you must specify a target with '-o'"
3363ba6a1819Smrg      ;;
3364ba6a1819Smrg    *)
3365ba6a1819Smrg      # Get the name of the library object.
3366549e21daSmrg      test -z "$libobj" && {
3367549e21daSmrg	func_basename "$srcfile"
3368fe4c343aSmrg	libobj=$func_basename_result
3369549e21daSmrg      }
3370ba6a1819Smrg      ;;
3371ba6a1819Smrg    esac
3372ba6a1819Smrg
3373ba6a1819Smrg    # Recognize several different file suffixes.
3374ba6a1819Smrg    # If the user specifies -o file.o, it is replaced with file.lo
3375ba6a1819Smrg    case $libobj in
3376549e21daSmrg    *.[cCFSifmso] | \
3377549e21daSmrg    *.ada | *.adb | *.ads | *.asm | \
3378549e21daSmrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
33791bedbe3fSmrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
3380549e21daSmrg      func_xform "$libobj"
3381549e21daSmrg      libobj=$func_xform_result
3382549e21daSmrg      ;;
3383ba6a1819Smrg    esac
3384ba6a1819Smrg
3385ba6a1819Smrg    case $libobj in
3386549e21daSmrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
3387ba6a1819Smrg    *)
3388fe4c343aSmrg      func_fatal_error "cannot determine name of library object from '$libobj'"
3389ba6a1819Smrg      ;;
3390ba6a1819Smrg    esac
3391ba6a1819Smrg
3392ba6a1819Smrg    func_infer_tag $base_compile
3393ba6a1819Smrg
3394ba6a1819Smrg    for arg in $later; do
3395ba6a1819Smrg      case $arg in
3396549e21daSmrg      -shared)
3397fe4c343aSmrg	test yes = "$build_libtool_libs" \
3398fe4c343aSmrg	  || func_fatal_configuration "cannot build a shared library"
3399549e21daSmrg	build_old_libs=no
3400549e21daSmrg	continue
3401549e21daSmrg	;;
3402549e21daSmrg
3403ba6a1819Smrg      -static)
3404549e21daSmrg	build_libtool_libs=no
3405ba6a1819Smrg	build_old_libs=yes
3406ba6a1819Smrg	continue
3407ba6a1819Smrg	;;
3408ba6a1819Smrg
3409ba6a1819Smrg      -prefer-pic)
3410ba6a1819Smrg	pic_mode=yes
3411ba6a1819Smrg	continue
3412ba6a1819Smrg	;;
3413ba6a1819Smrg
3414ba6a1819Smrg      -prefer-non-pic)
3415ba6a1819Smrg	pic_mode=no
3416ba6a1819Smrg	continue
3417ba6a1819Smrg	;;
3418ba6a1819Smrg      esac
3419ba6a1819Smrg    done
3420ba6a1819Smrg
3421549e21daSmrg    func_quote_for_eval "$libobj"
3422549e21daSmrg    test "X$libobj" != "X$func_quote_for_eval_result" \
3423549e21daSmrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
3424fe4c343aSmrg      && func_warning "libobj name '$libobj' may not contain shell special characters."
3425549e21daSmrg    func_dirname_and_basename "$obj" "/" ""
3426fe4c343aSmrg    objname=$func_basename_result
3427fe4c343aSmrg    xdir=$func_dirname_result
3428fe4c343aSmrg    lobj=$xdir$objdir/$objname
3429ba6a1819Smrg
3430549e21daSmrg    test -z "$base_compile" && \
3431549e21daSmrg      func_fatal_help "you must specify a compilation command"
3432ba6a1819Smrg
3433ba6a1819Smrg    # Delete any leftover library objects.
3434fe4c343aSmrg    if test yes = "$build_old_libs"; then
3435ba6a1819Smrg      removelist="$obj $lobj $libobj ${libobj}T"
3436ba6a1819Smrg    else
3437ba6a1819Smrg      removelist="$lobj $libobj ${libobj}T"
3438ba6a1819Smrg    fi
3439ba6a1819Smrg
3440ba6a1819Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
3441ba6a1819Smrg    case $host_os in
3442549e21daSmrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
3443ba6a1819Smrg      pic_mode=default
3444ba6a1819Smrg      ;;
3445ba6a1819Smrg    esac
3446fe4c343aSmrg    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
3447ba6a1819Smrg      # non-PIC code in shared libraries is not supported
3448ba6a1819Smrg      pic_mode=default
3449ba6a1819Smrg    fi
3450ba6a1819Smrg
3451ba6a1819Smrg    # Calculate the filename of the output object if compiler does
3452ba6a1819Smrg    # not support -o with -c
3453fe4c343aSmrg    if test no = "$compiler_c_o"; then
3454fe4c343aSmrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
3455fe4c343aSmrg      lockfile=$output_obj.lock
3456ba6a1819Smrg    else
3457ba6a1819Smrg      output_obj=
3458ba6a1819Smrg      need_locks=no
3459ba6a1819Smrg      lockfile=
3460ba6a1819Smrg    fi
3461ba6a1819Smrg
3462ba6a1819Smrg    # Lock this critical section if it is needed
3463ba6a1819Smrg    # We use this script file to make the link, it avoids creating a new file
3464fe4c343aSmrg    if test yes = "$need_locks"; then
3465549e21daSmrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3466549e21daSmrg	func_echo "Waiting for $lockfile to be removed"
3467ba6a1819Smrg	sleep 2
3468ba6a1819Smrg      done
3469fe4c343aSmrg    elif test warn = "$need_locks"; then
3470ba6a1819Smrg      if test -f "$lockfile"; then
3471549e21daSmrg	$ECHO "\
3472ba6a1819Smrg*** ERROR, $lockfile exists and contains:
3473ba6a1819Smrg`cat $lockfile 2>/dev/null`
3474ba6a1819Smrg
3475ba6a1819SmrgThis indicates that another process is trying to use the same
3476ba6a1819Smrgtemporary object file, and libtool could not work around it because
3477fe4c343aSmrgyour compiler does not support '-c' and '-o' together.  If you
3478ba6a1819Smrgrepeat this compilation, it may succeed, by chance, but you had better
3479ba6a1819Smrgavoid parallel builds (make -j) in this platform, or get a better
3480ba6a1819Smrgcompiler."
3481ba6a1819Smrg
3482549e21daSmrg	$opt_dry_run || $RM $removelist
3483ba6a1819Smrg	exit $EXIT_FAILURE
3484ba6a1819Smrg      fi
34851bedbe3fSmrg      func_append removelist " $output_obj"
3486549e21daSmrg      $ECHO "$srcfile" > "$lockfile"
3487ba6a1819Smrg    fi
3488ba6a1819Smrg
3489549e21daSmrg    $opt_dry_run || $RM $removelist
34901bedbe3fSmrg    func_append removelist " $lockfile"
3491549e21daSmrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
3492549e21daSmrg
34931bedbe3fSmrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
34941bedbe3fSmrg    srcfile=$func_to_tool_file_result
3495549e21daSmrg    func_quote_for_eval "$srcfile"
3496549e21daSmrg    qsrcfile=$func_quote_for_eval_result
3497ba6a1819Smrg
3498ba6a1819Smrg    # Only build a PIC object if we are building libtool libraries.
3499fe4c343aSmrg    if test yes = "$build_libtool_libs"; then
3500ba6a1819Smrg      # Without this assignment, base_compile gets emptied.
3501ba6a1819Smrg      fbsd_hideous_sh_bug=$base_compile
3502ba6a1819Smrg
3503fe4c343aSmrg      if test no != "$pic_mode"; then
3504ba6a1819Smrg	command="$base_compile $qsrcfile $pic_flag"
3505ba6a1819Smrg      else
3506ba6a1819Smrg	# Don't build PIC code
3507ba6a1819Smrg	command="$base_compile $qsrcfile"
3508ba6a1819Smrg      fi
3509ba6a1819Smrg
3510549e21daSmrg      func_mkdir_p "$xdir$objdir"
3511ba6a1819Smrg
3512ba6a1819Smrg      if test -z "$output_obj"; then
3513ba6a1819Smrg	# Place PIC objects in $objdir
35141bedbe3fSmrg	func_append command " -o $lobj"
3515ba6a1819Smrg      fi
3516ba6a1819Smrg
3517549e21daSmrg      func_show_eval_locale "$command"	\
3518549e21daSmrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
3519ba6a1819Smrg
3520fe4c343aSmrg      if test warn = "$need_locks" &&
3521ba6a1819Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3522549e21daSmrg	$ECHO "\
3523ba6a1819Smrg*** ERROR, $lockfile contains:
3524ba6a1819Smrg`cat $lockfile 2>/dev/null`
3525ba6a1819Smrg
3526ba6a1819Smrgbut it should contain:
3527ba6a1819Smrg$srcfile
3528ba6a1819Smrg
3529ba6a1819SmrgThis indicates that another process is trying to use the same
3530ba6a1819Smrgtemporary object file, and libtool could not work around it because
3531fe4c343aSmrgyour compiler does not support '-c' and '-o' together.  If you
3532ba6a1819Smrgrepeat this compilation, it may succeed, by chance, but you had better
3533ba6a1819Smrgavoid parallel builds (make -j) in this platform, or get a better
3534ba6a1819Smrgcompiler."
3535ba6a1819Smrg
3536549e21daSmrg	$opt_dry_run || $RM $removelist
3537ba6a1819Smrg	exit $EXIT_FAILURE
3538ba6a1819Smrg      fi
3539ba6a1819Smrg
3540ba6a1819Smrg      # Just move the object if needed, then go on to compile the next one
3541ba6a1819Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
3542549e21daSmrg	func_show_eval '$MV "$output_obj" "$lobj"' \
3543549e21daSmrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3544ba6a1819Smrg      fi
3545ba6a1819Smrg
3546ba6a1819Smrg      # Allow error messages only from the first compilation.
3547fe4c343aSmrg      if test yes = "$suppress_opt"; then
3548549e21daSmrg	suppress_output=' >/dev/null 2>&1'
3549ba6a1819Smrg      fi
3550ba6a1819Smrg    fi
3551ba6a1819Smrg
3552ba6a1819Smrg    # Only build a position-dependent object if we build old libraries.
3553fe4c343aSmrg    if test yes = "$build_old_libs"; then
3554fe4c343aSmrg      if test yes != "$pic_mode"; then
3555ba6a1819Smrg	# Don't build PIC code
3556549e21daSmrg	command="$base_compile $qsrcfile$pie_flag"
3557ba6a1819Smrg      else
3558ba6a1819Smrg	command="$base_compile $qsrcfile $pic_flag"
3559ba6a1819Smrg      fi
3560fe4c343aSmrg      if test yes = "$compiler_c_o"; then
35611bedbe3fSmrg	func_append command " -o $obj"
3562ba6a1819Smrg      fi
3563ba6a1819Smrg
3564ba6a1819Smrg      # Suppress compiler output if we already did a PIC compilation.
35651bedbe3fSmrg      func_append command "$suppress_output"
3566549e21daSmrg      func_show_eval_locale "$command" \
3567549e21daSmrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
3568ba6a1819Smrg
3569fe4c343aSmrg      if test warn = "$need_locks" &&
3570ba6a1819Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3571549e21daSmrg	$ECHO "\
3572ba6a1819Smrg*** ERROR, $lockfile contains:
3573ba6a1819Smrg`cat $lockfile 2>/dev/null`
3574ba6a1819Smrg
3575ba6a1819Smrgbut it should contain:
3576ba6a1819Smrg$srcfile
3577ba6a1819Smrg
3578ba6a1819SmrgThis indicates that another process is trying to use the same
3579ba6a1819Smrgtemporary object file, and libtool could not work around it because
3580fe4c343aSmrgyour compiler does not support '-c' and '-o' together.  If you
3581ba6a1819Smrgrepeat this compilation, it may succeed, by chance, but you had better
3582ba6a1819Smrgavoid parallel builds (make -j) in this platform, or get a better
3583ba6a1819Smrgcompiler."
3584ba6a1819Smrg
3585549e21daSmrg	$opt_dry_run || $RM $removelist
3586ba6a1819Smrg	exit $EXIT_FAILURE
3587ba6a1819Smrg      fi
3588ba6a1819Smrg
3589ba6a1819Smrg      # Just move the object if needed
3590ba6a1819Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
3591549e21daSmrg	func_show_eval '$MV "$output_obj" "$obj"' \
3592549e21daSmrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3593ba6a1819Smrg      fi
3594549e21daSmrg    fi
3595ba6a1819Smrg
3596549e21daSmrg    $opt_dry_run || {
3597549e21daSmrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
3598ba6a1819Smrg
3599549e21daSmrg      # Unlock the critical section if it was locked
3600fe4c343aSmrg      if test no != "$need_locks"; then
3601549e21daSmrg	removelist=$lockfile
3602549e21daSmrg        $RM "$lockfile"
3603549e21daSmrg      fi
3604549e21daSmrg    }
3605ba6a1819Smrg
3606549e21daSmrg    exit $EXIT_SUCCESS
3607549e21daSmrg}
3608ba6a1819Smrg
3609549e21daSmrg$opt_help || {
3610fe4c343aSmrg  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
3611549e21daSmrg}
3612ba6a1819Smrg
3613549e21daSmrgfunc_mode_help ()
3614549e21daSmrg{
3615549e21daSmrg    # We need to display help for each of the modes.
36161bedbe3fSmrg    case $opt_mode in
3617549e21daSmrg      "")
3618549e21daSmrg        # Generic help is extracted from the usage comments
3619549e21daSmrg        # at the start of this file.
3620549e21daSmrg        func_help
3621549e21daSmrg        ;;
3622ba6a1819Smrg
3623549e21daSmrg      clean)
3624549e21daSmrg        $ECHO \
3625549e21daSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
3626ba6a1819Smrg
3627549e21daSmrgRemove files from the build directory.
3628ba6a1819Smrg
3629549e21daSmrgRM is the name of the program to use to delete files associated with each FILE
3630fe4c343aSmrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
3631549e21daSmrgto RM.
3632ba6a1819Smrg
3633549e21daSmrgIf FILE is a libtool library, object or program, all the files associated
3634549e21daSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
3635549e21daSmrg        ;;
3636ba6a1819Smrg
3637549e21daSmrg      compile)
3638549e21daSmrg      $ECHO \
3639549e21daSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
3640ba6a1819Smrg
3641549e21daSmrgCompile a source file into a libtool library object.
3642ba6a1819Smrg
3643549e21daSmrgThis mode accepts the following additional options:
3644ba6a1819Smrg
3645549e21daSmrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
3646549e21daSmrg  -no-suppress      do not suppress compiler output for multiple passes
3647549e21daSmrg  -prefer-pic       try to build PIC objects only
3648549e21daSmrg  -prefer-non-pic   try to build non-PIC objects only
3649fe4c343aSmrg  -shared           do not build a '.o' file suitable for static linking
3650fe4c343aSmrg  -static           only build a '.o' file suitable for static linking
3651549e21daSmrg  -Wc,FLAG          pass FLAG directly to the compiler
3652ba6a1819Smrg
3653fe4c343aSmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file
3654549e21daSmrgfrom the given SOURCEFILE.
3655ba6a1819Smrg
3656549e21daSmrgThe output file name is determined by removing the directory component from
3657fe4c343aSmrgSOURCEFILE, then substituting the C source code suffix '.c' with the
3658fe4c343aSmrglibrary object suffix, '.lo'."
3659549e21daSmrg        ;;
3660ba6a1819Smrg
3661549e21daSmrg      execute)
3662549e21daSmrg        $ECHO \
3663549e21daSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
3664ba6a1819Smrg
3665549e21daSmrgAutomatically set library path, then run a program.
3666ba6a1819Smrg
3667549e21daSmrgThis mode accepts the following additional options:
3668ba6a1819Smrg
3669549e21daSmrg  -dlopen FILE      add the directory containing FILE to the library path
3670ba6a1819Smrg
3671fe4c343aSmrgThis mode sets the library path environment variable according to '-dlopen'
3672549e21daSmrgflags.
3673ba6a1819Smrg
3674549e21daSmrgIf any of the ARGS are libtool executable wrappers, then they are translated
3675549e21daSmrginto their corresponding uninstalled binary, and any of their required library
3676549e21daSmrgdirectories are added to the library path.
3677ba6a1819Smrg
3678549e21daSmrgThen, COMMAND is executed, with ARGS as arguments."
3679549e21daSmrg        ;;
3680ba6a1819Smrg
3681549e21daSmrg      finish)
3682549e21daSmrg        $ECHO \
3683549e21daSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
3684ba6a1819Smrg
3685549e21daSmrgComplete the installation of libtool libraries.
3686ba6a1819Smrg
3687549e21daSmrgEach LIBDIR is a directory that contains libtool libraries.
3688ba6a1819Smrg
3689549e21daSmrgThe commands that this mode executes may require superuser privileges.  Use
3690fe4c343aSmrgthe '--dry-run' option if you just want to see what would be executed."
3691549e21daSmrg        ;;
3692ba6a1819Smrg
3693549e21daSmrg      install)
3694549e21daSmrg        $ECHO \
3695549e21daSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
3696ba6a1819Smrg
3697549e21daSmrgInstall executables or libraries.
3698ba6a1819Smrg
3699549e21daSmrgINSTALL-COMMAND is the installation command.  The first component should be
3700fe4c343aSmrgeither the 'install' or 'cp' program.
3701ba6a1819Smrg
3702549e21daSmrgThe following components of INSTALL-COMMAND are treated specially:
3703ba6a1819Smrg
3704549e21daSmrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
3705ba6a1819Smrg
3706549e21daSmrgThe rest of the components are interpreted as arguments to that command (only
3707549e21daSmrgBSD-compatible install options are recognized)."
3708549e21daSmrg        ;;
3709ba6a1819Smrg
3710549e21daSmrg      link)
3711549e21daSmrg        $ECHO \
3712549e21daSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
3713ba6a1819Smrg
3714549e21daSmrgLink object files or libraries together to form another library, or to
3715549e21daSmrgcreate an executable program.
3716ba6a1819Smrg
3717549e21daSmrgLINK-COMMAND is a command using the C compiler that you would use to create
3718549e21daSmrga program from several object files.
3719ba6a1819Smrg
3720549e21daSmrgThe following components of LINK-COMMAND are treated specially:
3721ba6a1819Smrg
3722549e21daSmrg  -all-static       do not do any dynamic linking at all
3723549e21daSmrg  -avoid-version    do not add a version suffix if possible
3724549e21daSmrg  -bindir BINDIR    specify path to binaries directory (for systems where
3725549e21daSmrg                    libraries must be found in the PATH setting at runtime)
3726fe4c343aSmrg  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
3727549e21daSmrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
3728549e21daSmrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
3729549e21daSmrg  -export-symbols SYMFILE
3730549e21daSmrg                    try to export only the symbols listed in SYMFILE
3731549e21daSmrg  -export-symbols-regex REGEX
3732549e21daSmrg                    try to export only the symbols matching REGEX
3733549e21daSmrg  -LLIBDIR          search LIBDIR for required installed libraries
3734549e21daSmrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
3735549e21daSmrg  -module           build a library that can dlopened
3736549e21daSmrg  -no-fast-install  disable the fast-install mode
3737549e21daSmrg  -no-install       link a not-installable executable
3738549e21daSmrg  -no-undefined     declare that a library does not refer to external symbols
3739549e21daSmrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
3740fe4c343aSmrg  -objectlist FILE  use a list of object files found in FILE to specify objects
3741fe4c343aSmrg  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
3742549e21daSmrg  -precious-files-regex REGEX
3743549e21daSmrg                    don't remove output files matching REGEX
3744549e21daSmrg  -release RELEASE  specify package release information
3745549e21daSmrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
3746549e21daSmrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
3747549e21daSmrg  -shared           only do dynamic linking of libtool libraries
3748549e21daSmrg  -shrext SUFFIX    override the standard shared library file extension
3749549e21daSmrg  -static           do not do any dynamic linking of uninstalled libtool libraries
3750549e21daSmrg  -static-libtool-libs
3751549e21daSmrg                    do not do any dynamic linking of libtool libraries
3752549e21daSmrg  -version-info CURRENT[:REVISION[:AGE]]
3753549e21daSmrg                    specify library version info [each variable defaults to 0]
3754549e21daSmrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
3755549e21daSmrg  -Wc,FLAG
3756549e21daSmrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
3757549e21daSmrg  -Wl,FLAG
3758549e21daSmrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
3759549e21daSmrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
3760ba6a1819Smrg
3761fe4c343aSmrgAll other options (arguments beginning with '-') are ignored.
3762ba6a1819Smrg
3763fe4c343aSmrgEvery other argument is treated as a filename.  Files ending in '.la' are
3764549e21daSmrgtreated as uninstalled libtool libraries, other files are standard or library
3765549e21daSmrgobject files.
3766ba6a1819Smrg
3767fe4c343aSmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created,
3768fe4c343aSmrgonly library objects ('.lo' files) may be specified, and '-rpath' is
3769549e21daSmrgrequired, except when creating a convenience library.
3770ba6a1819Smrg
3771fe4c343aSmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
3772fe4c343aSmrgusing 'ar' and 'ranlib', or on Windows using 'lib'.
3773ba6a1819Smrg
3774fe4c343aSmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
3775549e21daSmrgis created, otherwise an executable program is created."
3776549e21daSmrg        ;;
3777ba6a1819Smrg
3778549e21daSmrg      uninstall)
3779549e21daSmrg        $ECHO \
3780549e21daSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
3781ba6a1819Smrg
3782549e21daSmrgRemove libraries from an installation directory.
3783ba6a1819Smrg
3784549e21daSmrgRM is the name of the program to use to delete files associated with each FILE
3785fe4c343aSmrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
3786549e21daSmrgto RM.
3787ba6a1819Smrg
3788549e21daSmrgIf FILE is a libtool library, all the files associated with it are deleted.
3789549e21daSmrgOtherwise, only FILE itself is deleted using RM."
3790ba6a1819Smrg        ;;
3791ba6a1819Smrg
3792549e21daSmrg      *)
3793fe4c343aSmrg        func_fatal_help "invalid operation mode '$opt_mode'"
3794549e21daSmrg        ;;
3795549e21daSmrg    esac
3796ba6a1819Smrg
3797549e21daSmrg    echo
3798fe4c343aSmrg    $ECHO "Try '$progname --help' for more information about other modes."
3799549e21daSmrg}
3800ba6a1819Smrg
3801549e21daSmrg# Now that we've collected a possible --mode arg, show help if necessary
3802549e21daSmrgif $opt_help; then
3803fe4c343aSmrg  if test : = "$opt_help"; then
3804549e21daSmrg    func_mode_help
3805549e21daSmrg  else
3806549e21daSmrg    {
3807549e21daSmrg      func_help noexit
38081bedbe3fSmrg      for opt_mode in compile link execute install finish uninstall clean; do
3809549e21daSmrg	func_mode_help
3810549e21daSmrg      done
3811fe4c343aSmrg    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
3812549e21daSmrg    {
3813549e21daSmrg      func_help noexit
38141bedbe3fSmrg      for opt_mode in compile link execute install finish uninstall clean; do
3815549e21daSmrg	echo
3816549e21daSmrg	func_mode_help
3817549e21daSmrg      done
3818549e21daSmrg    } |
3819fe4c343aSmrg    $SED '1d
3820549e21daSmrg      /^When reporting/,/^Report/{
3821549e21daSmrg	H
3822549e21daSmrg	d
3823549e21daSmrg      }
3824549e21daSmrg      $x
3825549e21daSmrg      /information about other modes/d
3826549e21daSmrg      /more detailed .*MODE/d
3827549e21daSmrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
3828549e21daSmrg  fi
3829549e21daSmrg  exit $?
3830549e21daSmrgfi
3831ba6a1819Smrg
3832ba6a1819Smrg
3833549e21daSmrg# func_mode_execute arg...
3834549e21daSmrgfunc_mode_execute ()
3835549e21daSmrg{
3836fe4c343aSmrg    $debug_cmd
3837fe4c343aSmrg
3838549e21daSmrg    # The first argument is the command name.
3839fe4c343aSmrg    cmd=$nonopt
3840549e21daSmrg    test -z "$cmd" && \
3841549e21daSmrg      func_fatal_help "you must specify a COMMAND"
3842ba6a1819Smrg
3843549e21daSmrg    # Handle -dlopen flags immediately.
38441bedbe3fSmrg    for file in $opt_dlopen; do
3845549e21daSmrg      test -f "$file" \
3846fe4c343aSmrg	|| func_fatal_help "'$file' is not a file"
3847ba6a1819Smrg
3848549e21daSmrg      dir=
3849549e21daSmrg      case $file in
3850549e21daSmrg      *.la)
38511bedbe3fSmrg	func_resolve_sysroot "$file"
38521bedbe3fSmrg	file=$func_resolve_sysroot_result
38531bedbe3fSmrg
3854549e21daSmrg	# Check to see that this really is a libtool archive.
3855549e21daSmrg	func_lalib_unsafe_p "$file" \
3856fe4c343aSmrg	  || func_fatal_help "'$lib' is not a valid libtool archive"
3857ba6a1819Smrg
3858549e21daSmrg	# Read the libtool library.
3859549e21daSmrg	dlname=
3860549e21daSmrg	library_names=
3861549e21daSmrg	func_source "$file"
3862ba6a1819Smrg
3863549e21daSmrg	# Skip this library if it cannot be dlopened.
3864549e21daSmrg	if test -z "$dlname"; then
3865549e21daSmrg	  # Warn if it was a shared library.
3866549e21daSmrg	  test -n "$library_names" && \
3867fe4c343aSmrg	    func_warning "'$file' was not linked with '-export-dynamic'"
3868549e21daSmrg	  continue
3869549e21daSmrg	fi
3870ba6a1819Smrg
3871549e21daSmrg	func_dirname "$file" "" "."
3872fe4c343aSmrg	dir=$func_dirname_result
3873ba6a1819Smrg
3874549e21daSmrg	if test -f "$dir/$objdir/$dlname"; then
38751bedbe3fSmrg	  func_append dir "/$objdir"
3876549e21daSmrg	else
3877549e21daSmrg	  if test ! -f "$dir/$dlname"; then
3878fe4c343aSmrg	    func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
3879549e21daSmrg	  fi
3880549e21daSmrg	fi
3881ba6a1819Smrg	;;
3882ba6a1819Smrg
3883549e21daSmrg      *.lo)
3884549e21daSmrg	# Just add the directory containing the .lo file.
3885549e21daSmrg	func_dirname "$file" "" "."
3886fe4c343aSmrg	dir=$func_dirname_result
3887ba6a1819Smrg	;;
3888ba6a1819Smrg
3889549e21daSmrg      *)
3890fe4c343aSmrg	func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
3891ba6a1819Smrg	continue
3892ba6a1819Smrg	;;
3893549e21daSmrg      esac
3894ba6a1819Smrg
3895549e21daSmrg      # Get the absolute pathname.
3896549e21daSmrg      absdir=`cd "$dir" && pwd`
3897fe4c343aSmrg      test -n "$absdir" && dir=$absdir
3898ba6a1819Smrg
3899549e21daSmrg      # Now add the directory to shlibpath_var.
3900549e21daSmrg      if eval "test -z \"\$$shlibpath_var\""; then
3901549e21daSmrg	eval "$shlibpath_var=\"\$dir\""
3902549e21daSmrg      else
3903549e21daSmrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
3904549e21daSmrg      fi
3905549e21daSmrg    done
3906ba6a1819Smrg
3907549e21daSmrg    # This variable tells wrapper scripts just to set shlibpath_var
3908549e21daSmrg    # rather than running their programs.
3909fe4c343aSmrg    libtool_execute_magic=$magic
3910ba6a1819Smrg
3911549e21daSmrg    # Check if any of the arguments is a wrapper script.
3912549e21daSmrg    args=
3913549e21daSmrg    for file
3914549e21daSmrg    do
3915549e21daSmrg      case $file in
3916549e21daSmrg      -* | *.la | *.lo ) ;;
3917549e21daSmrg      *)
3918549e21daSmrg	# Do a test to see if this is really a libtool program.
3919549e21daSmrg	if func_ltwrapper_script_p "$file"; then
3920549e21daSmrg	  func_source "$file"
3921549e21daSmrg	  # Transform arg to wrapped name.
3922fe4c343aSmrg	  file=$progdir/$program
3923549e21daSmrg	elif func_ltwrapper_executable_p "$file"; then
3924549e21daSmrg	  func_ltwrapper_scriptname "$file"
3925549e21daSmrg	  func_source "$func_ltwrapper_scriptname_result"
3926549e21daSmrg	  # Transform arg to wrapped name.
3927fe4c343aSmrg	  file=$progdir/$program
3928549e21daSmrg	fi
3929ba6a1819Smrg	;;
3930549e21daSmrg      esac
3931549e21daSmrg      # Quote arguments (to preserve shell metacharacters).
39321bedbe3fSmrg      func_append_quoted args "$file"
3933549e21daSmrg    done
3934ba6a1819Smrg
3935fe4c343aSmrg    if $opt_dry_run; then
3936fe4c343aSmrg      # Display what would be done.
3937fe4c343aSmrg      if test -n "$shlibpath_var"; then
3938fe4c343aSmrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
3939fe4c343aSmrg	echo "export $shlibpath_var"
3940fe4c343aSmrg      fi
3941fe4c343aSmrg      $ECHO "$cmd$args"
3942fe4c343aSmrg      exit $EXIT_SUCCESS
3943fe4c343aSmrg    else
3944549e21daSmrg      if test -n "$shlibpath_var"; then
3945549e21daSmrg	# Export the shlibpath_var.
3946549e21daSmrg	eval "export $shlibpath_var"
3947549e21daSmrg      fi
3948ba6a1819Smrg
3949549e21daSmrg      # Restore saved environment variables
3950549e21daSmrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
3951549e21daSmrg      do
3952549e21daSmrg	eval "if test \"\${save_$lt_var+set}\" = set; then
3953549e21daSmrg                $lt_var=\$save_$lt_var; export $lt_var
3954549e21daSmrg	      else
3955549e21daSmrg		$lt_unset $lt_var
3956549e21daSmrg	      fi"
3957549e21daSmrg      done
3958ba6a1819Smrg
3959549e21daSmrg      # Now prepare to actually exec the command.
3960fe4c343aSmrg      exec_cmd=\$cmd$args
3961549e21daSmrg    fi
3962549e21daSmrg}
3963ba6a1819Smrg
3964fe4c343aSmrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"}
3965ba6a1819Smrg
3966ba6a1819Smrg
3967549e21daSmrg# func_mode_finish arg...
3968549e21daSmrgfunc_mode_finish ()
3969549e21daSmrg{
3970fe4c343aSmrg    $debug_cmd
3971fe4c343aSmrg
39721bedbe3fSmrg    libs=
39731bedbe3fSmrg    libdirs=
3974549e21daSmrg    admincmds=
3975ba6a1819Smrg
39761bedbe3fSmrg    for opt in "$nonopt" ${1+"$@"}
39771bedbe3fSmrg    do
39781bedbe3fSmrg      if test -d "$opt"; then
39791bedbe3fSmrg	func_append libdirs " $opt"
39801bedbe3fSmrg
39811bedbe3fSmrg      elif test -f "$opt"; then
39821bedbe3fSmrg	if func_lalib_unsafe_p "$opt"; then
39831bedbe3fSmrg	  func_append libs " $opt"
39841bedbe3fSmrg	else
3985fe4c343aSmrg	  func_warning "'$opt' is not a valid libtool archive"
39861bedbe3fSmrg	fi
39871bedbe3fSmrg
39881bedbe3fSmrg      else
3989fe4c343aSmrg	func_fatal_error "invalid argument '$opt'"
39901bedbe3fSmrg      fi
39911bedbe3fSmrg    done
39921bedbe3fSmrg
39931bedbe3fSmrg    if test -n "$libs"; then
39941bedbe3fSmrg      if test -n "$lt_sysroot"; then
39951bedbe3fSmrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
39961bedbe3fSmrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
39971bedbe3fSmrg      else
39981bedbe3fSmrg        sysroot_cmd=
39991bedbe3fSmrg      fi
40001bedbe3fSmrg
40011bedbe3fSmrg      # Remove sysroot references
40021bedbe3fSmrg      if $opt_dry_run; then
40031bedbe3fSmrg        for lib in $libs; do
4004fe4c343aSmrg          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
40051bedbe3fSmrg        done
40061bedbe3fSmrg      else
40071bedbe3fSmrg        tmpdir=`func_mktempdir`
40081bedbe3fSmrg        for lib in $libs; do
4009fe4c343aSmrg	  $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
40101bedbe3fSmrg	    > $tmpdir/tmp-la
40111bedbe3fSmrg	  mv -f $tmpdir/tmp-la $lib
40121bedbe3fSmrg	done
40131bedbe3fSmrg        ${RM}r "$tmpdir"
40141bedbe3fSmrg      fi
40151bedbe3fSmrg    fi
4016ba6a1819Smrg
40171bedbe3fSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4018549e21daSmrg      for libdir in $libdirs; do
4019549e21daSmrg	if test -n "$finish_cmds"; then
4020549e21daSmrg	  # Do each command in the finish commands.
4021549e21daSmrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
4022549e21daSmrg'"$cmd"'"'
4023549e21daSmrg	fi
4024549e21daSmrg	if test -n "$finish_eval"; then
4025549e21daSmrg	  # Do the single finish_eval.
4026549e21daSmrg	  eval cmds=\"$finish_eval\"
40271bedbe3fSmrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
4028549e21daSmrg       $cmds"
4029549e21daSmrg	fi
4030549e21daSmrg      done
4031549e21daSmrg    fi
4032ba6a1819Smrg
4033549e21daSmrg    # Exit here if they wanted silent mode.
4034fe4c343aSmrg    $opt_quiet && exit $EXIT_SUCCESS
4035ba6a1819Smrg
40361bedbe3fSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
40371bedbe3fSmrg      echo "----------------------------------------------------------------------"
40381bedbe3fSmrg      echo "Libraries have been installed in:"
40391bedbe3fSmrg      for libdir in $libdirs; do
40401bedbe3fSmrg	$ECHO "   $libdir"
40411bedbe3fSmrg      done
40421bedbe3fSmrg      echo
40431bedbe3fSmrg      echo "If you ever happen to want to link against installed libraries"
40441bedbe3fSmrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
4045fe4c343aSmrg      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
40461bedbe3fSmrg      echo "flag during linking and do at least one of the following:"
40471bedbe3fSmrg      if test -n "$shlibpath_var"; then
4048fe4c343aSmrg	echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
40491bedbe3fSmrg	echo "     during execution"
40501bedbe3fSmrg      fi
40511bedbe3fSmrg      if test -n "$runpath_var"; then
4052fe4c343aSmrg	echo "   - add LIBDIR to the '$runpath_var' environment variable"
40531bedbe3fSmrg	echo "     during linking"
40541bedbe3fSmrg      fi
40551bedbe3fSmrg      if test -n "$hardcode_libdir_flag_spec"; then
40561bedbe3fSmrg	libdir=LIBDIR
40571bedbe3fSmrg	eval flag=\"$hardcode_libdir_flag_spec\"
4058ba6a1819Smrg
4059fe4c343aSmrg	$ECHO "   - use the '$flag' linker flag"
40601bedbe3fSmrg      fi
40611bedbe3fSmrg      if test -n "$admincmds"; then
40621bedbe3fSmrg	$ECHO "   - have your system administrator run these commands:$admincmds"
40631bedbe3fSmrg      fi
40641bedbe3fSmrg      if test -f /etc/ld.so.conf; then
4065fe4c343aSmrg	echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
40661bedbe3fSmrg      fi
40671bedbe3fSmrg      echo
4068ba6a1819Smrg
40691bedbe3fSmrg      echo "See any operating system documentation about shared libraries for"
40701bedbe3fSmrg      case $host in
40711bedbe3fSmrg	solaris2.[6789]|solaris2.1[0-9])
40721bedbe3fSmrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
40731bedbe3fSmrg	  echo "pages."
40741bedbe3fSmrg	  ;;
40751bedbe3fSmrg	*)
40761bedbe3fSmrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
40771bedbe3fSmrg	  ;;
40781bedbe3fSmrg      esac
40791bedbe3fSmrg      echo "----------------------------------------------------------------------"
40801bedbe3fSmrg    fi
4081549e21daSmrg    exit $EXIT_SUCCESS
4082549e21daSmrg}
4083ba6a1819Smrg
4084fe4c343aSmrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"}
4085ba6a1819Smrg
4086ba6a1819Smrg
4087549e21daSmrg# func_mode_install arg...
4088549e21daSmrgfunc_mode_install ()
4089549e21daSmrg{
4090fe4c343aSmrg    $debug_cmd
4091fe4c343aSmrg
4092549e21daSmrg    # There may be an optional sh(1) argument at the beginning of
4093549e21daSmrg    # install_prog (especially on Windows NT).
4094fe4c343aSmrg    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
4095549e21daSmrg       # Allow the use of GNU shtool's install command.
4096fe4c343aSmrg       case $nonopt in *shtool*) :;; *) false;; esac
4097fe4c343aSmrg    then
4098549e21daSmrg      # Aesthetically quote it.
4099549e21daSmrg      func_quote_for_eval "$nonopt"
4100549e21daSmrg      install_prog="$func_quote_for_eval_result "
4101549e21daSmrg      arg=$1
4102549e21daSmrg      shift
4103549e21daSmrg    else
4104549e21daSmrg      install_prog=
4105549e21daSmrg      arg=$nonopt
4106549e21daSmrg    fi
4107ba6a1819Smrg
4108549e21daSmrg    # The real first argument should be the name of the installation program.
4109549e21daSmrg    # Aesthetically quote it.
4110549e21daSmrg    func_quote_for_eval "$arg"
41111bedbe3fSmrg    func_append install_prog "$func_quote_for_eval_result"
4112549e21daSmrg    install_shared_prog=$install_prog
4113549e21daSmrg    case " $install_prog " in
4114549e21daSmrg      *[\\\ /]cp\ *) install_cp=: ;;
4115549e21daSmrg      *) install_cp=false ;;
4116549e21daSmrg    esac
4117ba6a1819Smrg
4118549e21daSmrg    # We need to accept at least all the BSD install flags.
4119549e21daSmrg    dest=
4120549e21daSmrg    files=
4121549e21daSmrg    opts=
4122549e21daSmrg    prev=
4123549e21daSmrg    install_type=
4124fe4c343aSmrg    isdir=false
4125549e21daSmrg    stripme=
4126549e21daSmrg    no_mode=:
4127549e21daSmrg    for arg
4128549e21daSmrg    do
4129549e21daSmrg      arg2=
4130549e21daSmrg      if test -n "$dest"; then
41311bedbe3fSmrg	func_append files " $dest"
4132549e21daSmrg	dest=$arg
4133549e21daSmrg	continue
4134549e21daSmrg      fi
4135ba6a1819Smrg
4136549e21daSmrg      case $arg in
4137fe4c343aSmrg      -d) isdir=: ;;
4138549e21daSmrg      -f)
4139549e21daSmrg	if $install_cp; then :; else
4140549e21daSmrg	  prev=$arg
4141ba6a1819Smrg	fi
4142549e21daSmrg	;;
4143549e21daSmrg      -g | -m | -o)
4144549e21daSmrg	prev=$arg
4145549e21daSmrg	;;
4146549e21daSmrg      -s)
4147549e21daSmrg	stripme=" -s"
4148ba6a1819Smrg	continue
4149ba6a1819Smrg	;;
4150549e21daSmrg      -*)
4151549e21daSmrg	;;
4152ba6a1819Smrg      *)
4153549e21daSmrg	# If the previous option needed an argument, then skip it.
4154549e21daSmrg	if test -n "$prev"; then
4155fe4c343aSmrg	  if test X-m = "X$prev" && test -n "$install_override_mode"; then
4156549e21daSmrg	    arg2=$install_override_mode
4157549e21daSmrg	    no_mode=false
4158549e21daSmrg	  fi
4159549e21daSmrg	  prev=
4160549e21daSmrg	else
4161549e21daSmrg	  dest=$arg
4162549e21daSmrg	  continue
4163549e21daSmrg	fi
4164ba6a1819Smrg	;;
4165549e21daSmrg      esac
4166ba6a1819Smrg
4167549e21daSmrg      # Aesthetically quote the argument.
4168549e21daSmrg      func_quote_for_eval "$arg"
41691bedbe3fSmrg      func_append install_prog " $func_quote_for_eval_result"
4170549e21daSmrg      if test -n "$arg2"; then
4171549e21daSmrg	func_quote_for_eval "$arg2"
4172ba6a1819Smrg      fi
41731bedbe3fSmrg      func_append install_shared_prog " $func_quote_for_eval_result"
4174549e21daSmrg    done
4175ba6a1819Smrg
4176549e21daSmrg    test -z "$install_prog" && \
4177549e21daSmrg      func_fatal_help "you must specify an install program"
4178ba6a1819Smrg
4179549e21daSmrg    test -n "$prev" && \
4180fe4c343aSmrg      func_fatal_help "the '$prev' option requires an argument"
4181ba6a1819Smrg
4182549e21daSmrg    if test -n "$install_override_mode" && $no_mode; then
4183549e21daSmrg      if $install_cp; then :; else
4184549e21daSmrg	func_quote_for_eval "$install_override_mode"
41851bedbe3fSmrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
4186549e21daSmrg      fi
4187ba6a1819Smrg    fi
4188ba6a1819Smrg
4189549e21daSmrg    if test -z "$files"; then
4190549e21daSmrg      if test -z "$dest"; then
4191549e21daSmrg	func_fatal_help "no file or destination specified"
4192549e21daSmrg      else
4193549e21daSmrg	func_fatal_help "you must specify a destination"
4194ba6a1819Smrg      fi
4195ba6a1819Smrg    fi
4196ba6a1819Smrg
4197549e21daSmrg    # Strip any trailing slash from the destination.
4198549e21daSmrg    func_stripname '' '/' "$dest"
4199549e21daSmrg    dest=$func_stripname_result
4200ba6a1819Smrg
4201549e21daSmrg    # Check to see that the destination is a directory.
4202fe4c343aSmrg    test -d "$dest" && isdir=:
4203fe4c343aSmrg    if $isdir; then
4204fe4c343aSmrg      destdir=$dest
4205549e21daSmrg      destname=
4206549e21daSmrg    else
4207549e21daSmrg      func_dirname_and_basename "$dest" "" "."
4208fe4c343aSmrg      destdir=$func_dirname_result
4209fe4c343aSmrg      destname=$func_basename_result
4210549e21daSmrg
4211549e21daSmrg      # Not a directory, so check to see that there is only one file specified.
4212549e21daSmrg      set dummy $files; shift
4213549e21daSmrg      test "$#" -gt 1 && \
4214fe4c343aSmrg	func_fatal_help "'$dest' is not a directory"
4215549e21daSmrg    fi
4216549e21daSmrg    case $destdir in
4217549e21daSmrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
4218ba6a1819Smrg    *)
4219549e21daSmrg      for file in $files; do
4220549e21daSmrg	case $file in
4221549e21daSmrg	*.lo) ;;
4222549e21daSmrg	*)
4223fe4c343aSmrg	  func_fatal_help "'$destdir' must be an absolute directory name"
4224549e21daSmrg	  ;;
4225549e21daSmrg	esac
4226549e21daSmrg      done
4227ba6a1819Smrg      ;;
4228ba6a1819Smrg    esac
4229ba6a1819Smrg
4230549e21daSmrg    # This variable tells wrapper scripts just to set variables rather
4231549e21daSmrg    # than running their programs.
4232fe4c343aSmrg    libtool_install_magic=$magic
4233ba6a1819Smrg
4234549e21daSmrg    staticlibs=
4235549e21daSmrg    future_libdirs=
4236549e21daSmrg    current_libdirs=
4237549e21daSmrg    for file in $files; do
4238ba6a1819Smrg
4239549e21daSmrg      # Do each installation.
4240549e21daSmrg      case $file in
4241549e21daSmrg      *.$libext)
4242549e21daSmrg	# Do the static libraries later.
42431bedbe3fSmrg	func_append staticlibs " $file"
4244549e21daSmrg	;;
4245ba6a1819Smrg
4246549e21daSmrg      *.la)
42471bedbe3fSmrg	func_resolve_sysroot "$file"
42481bedbe3fSmrg	file=$func_resolve_sysroot_result
42491bedbe3fSmrg
4250549e21daSmrg	# Check to see that this really is a libtool archive.
4251549e21daSmrg	func_lalib_unsafe_p "$file" \
4252fe4c343aSmrg	  || func_fatal_help "'$file' is not a valid libtool archive"
4253549e21daSmrg
4254549e21daSmrg	library_names=
4255549e21daSmrg	old_library=
4256549e21daSmrg	relink_command=
4257549e21daSmrg	func_source "$file"
4258549e21daSmrg
4259549e21daSmrg	# Add the libdir to current_libdirs if it is the destination.
4260549e21daSmrg	if test "X$destdir" = "X$libdir"; then
4261549e21daSmrg	  case "$current_libdirs " in
4262549e21daSmrg	  *" $libdir "*) ;;
42631bedbe3fSmrg	  *) func_append current_libdirs " $libdir" ;;
4264ba6a1819Smrg	  esac
4265549e21daSmrg	else
4266549e21daSmrg	  # Note the libdir as a future libdir.
4267549e21daSmrg	  case "$future_libdirs " in
4268549e21daSmrg	  *" $libdir "*) ;;
42691bedbe3fSmrg	  *) func_append future_libdirs " $libdir" ;;
4270549e21daSmrg	  esac
4271549e21daSmrg	fi
4272549e21daSmrg
4273549e21daSmrg	func_dirname "$file" "/" ""
4274fe4c343aSmrg	dir=$func_dirname_result
42751bedbe3fSmrg	func_append dir "$objdir"
4276549e21daSmrg
4277549e21daSmrg	if test -n "$relink_command"; then
4278549e21daSmrg	  # Determine the prefix the user has applied to our future dir.
4279549e21daSmrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
4280549e21daSmrg
4281549e21daSmrg	  # Don't allow the user to place us outside of our expected
4282549e21daSmrg	  # location b/c this prevents finding dependent libraries that
4283549e21daSmrg	  # are installed to the same prefix.
4284549e21daSmrg	  # At present, this check doesn't affect windows .dll's that
4285549e21daSmrg	  # are installed into $libdir/../bin (currently, that works fine)
4286549e21daSmrg	  # but it's something to keep an eye on.
4287549e21daSmrg	  test "$inst_prefix_dir" = "$destdir" && \
4288fe4c343aSmrg	    func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
4289549e21daSmrg
4290549e21daSmrg	  if test -n "$inst_prefix_dir"; then
4291549e21daSmrg	    # Stick the inst_prefix_dir data into the link command.
4292549e21daSmrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
4293ba6a1819Smrg	  else
4294549e21daSmrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
4295ba6a1819Smrg	  fi
4296549e21daSmrg
4297fe4c343aSmrg	  func_warning "relinking '$file'"
4298549e21daSmrg	  func_show_eval "$relink_command" \
4299fe4c343aSmrg	    'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
4300549e21daSmrg	fi
4301549e21daSmrg
4302549e21daSmrg	# See the names of the shared library.
4303549e21daSmrg	set dummy $library_names; shift
4304549e21daSmrg	if test -n "$1"; then
4305fe4c343aSmrg	  realname=$1
4306549e21daSmrg	  shift
4307549e21daSmrg
4308fe4c343aSmrg	  srcname=$realname
4309fe4c343aSmrg	  test -n "$relink_command" && srcname=${realname}T
4310549e21daSmrg
4311549e21daSmrg	  # Install the shared library and build the symlinks.
4312549e21daSmrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
4313549e21daSmrg	      'exit $?'
4314fe4c343aSmrg	  tstripme=$stripme
4315549e21daSmrg	  case $host_os in
4316549e21daSmrg	  cygwin* | mingw* | pw32* | cegcc*)
4317549e21daSmrg	    case $realname in
4318549e21daSmrg	    *.dll.a)
4319fe4c343aSmrg	      tstripme=
4320fe4c343aSmrg	      ;;
4321fe4c343aSmrg	    esac
4322fe4c343aSmrg	    ;;
4323fe4c343aSmrg	  os2*)
4324fe4c343aSmrg	    case $realname in
4325fe4c343aSmrg	    *_dll.a)
4326fe4c343aSmrg	      tstripme=
4327549e21daSmrg	      ;;
4328549e21daSmrg	    esac
4329549e21daSmrg	    ;;
4330549e21daSmrg	  esac
4331549e21daSmrg	  if test -n "$tstripme" && test -n "$striplib"; then
4332549e21daSmrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
4333ba6a1819Smrg	  fi
4334549e21daSmrg
4335549e21daSmrg	  if test "$#" -gt 0; then
4336549e21daSmrg	    # Delete the old symlinks, and create new ones.
4337fe4c343aSmrg	    # Try 'ln -sf' first, because the 'ln' binary might depend on
4338549e21daSmrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
4339549e21daSmrg	    # so we also need to try rm && ln -s.
4340549e21daSmrg	    for linkname
4341549e21daSmrg	    do
4342549e21daSmrg	      test "$linkname" != "$realname" \
4343549e21daSmrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
4344ba6a1819Smrg	    done
4345ba6a1819Smrg	  fi
4346549e21daSmrg
4347549e21daSmrg	  # Do each command in the postinstall commands.
4348fe4c343aSmrg	  lib=$destdir/$realname
4349549e21daSmrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
4350549e21daSmrg	fi
4351549e21daSmrg
4352549e21daSmrg	# Install the pseudo-library for information purposes.
4353549e21daSmrg	func_basename "$file"
4354fe4c343aSmrg	name=$func_basename_result
4355fe4c343aSmrg	instname=$dir/${name}i
4356549e21daSmrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
4357549e21daSmrg
4358549e21daSmrg	# Maybe install the static library, too.
43591bedbe3fSmrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
4360549e21daSmrg	;;
4361549e21daSmrg
4362549e21daSmrg      *.lo)
4363549e21daSmrg	# Install (i.e. copy) a libtool object.
4364549e21daSmrg
4365549e21daSmrg	# Figure out destination file name, if it wasn't already specified.
4366549e21daSmrg	if test -n "$destname"; then
4367fe4c343aSmrg	  destfile=$destdir/$destname
4368549e21daSmrg	else
4369549e21daSmrg	  func_basename "$file"
4370fe4c343aSmrg	  destfile=$func_basename_result
4371fe4c343aSmrg	  destfile=$destdir/$destfile
4372549e21daSmrg	fi
4373549e21daSmrg
4374549e21daSmrg	# Deduce the name of the destination old-style object file.
4375549e21daSmrg	case $destfile in
4376549e21daSmrg	*.lo)
4377549e21daSmrg	  func_lo2o "$destfile"
4378549e21daSmrg	  staticdest=$func_lo2o_result
4379ba6a1819Smrg	  ;;
4380549e21daSmrg	*.$objext)
4381fe4c343aSmrg	  staticdest=$destfile
4382549e21daSmrg	  destfile=
4383ba6a1819Smrg	  ;;
4384549e21daSmrg	*)
4385fe4c343aSmrg	  func_fatal_help "cannot copy a libtool object to '$destfile'"
4386ba6a1819Smrg	  ;;
4387549e21daSmrg	esac
4388549e21daSmrg
4389549e21daSmrg	# Install the libtool object if requested.
4390549e21daSmrg	test -n "$destfile" && \
4391549e21daSmrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
4392549e21daSmrg
4393549e21daSmrg	# Install the old object if enabled.
4394fe4c343aSmrg	if test yes = "$build_old_libs"; then
4395549e21daSmrg	  # Deduce the name of the old-style object file.
4396549e21daSmrg	  func_lo2o "$file"
4397549e21daSmrg	  staticobj=$func_lo2o_result
4398549e21daSmrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
4399ba6a1819Smrg	fi
4400549e21daSmrg	exit $EXIT_SUCCESS
4401549e21daSmrg	;;
4402ba6a1819Smrg
4403549e21daSmrg      *)
4404549e21daSmrg	# Figure out destination file name, if it wasn't already specified.
4405549e21daSmrg	if test -n "$destname"; then
4406fe4c343aSmrg	  destfile=$destdir/$destname
4407ba6a1819Smrg	else
4408549e21daSmrg	  func_basename "$file"
4409fe4c343aSmrg	  destfile=$func_basename_result
4410fe4c343aSmrg	  destfile=$destdir/$destfile
4411ba6a1819Smrg	fi
4412ba6a1819Smrg
4413549e21daSmrg	# If the file is missing, and there is a .exe on the end, strip it
4414549e21daSmrg	# because it is most likely a libtool script we actually want to
4415549e21daSmrg	# install
4416fe4c343aSmrg	stripped_ext=
4417549e21daSmrg	case $file in
4418549e21daSmrg	  *.exe)
4419549e21daSmrg	    if test ! -f "$file"; then
4420549e21daSmrg	      func_stripname '' '.exe' "$file"
4421549e21daSmrg	      file=$func_stripname_result
4422fe4c343aSmrg	      stripped_ext=.exe
4423549e21daSmrg	    fi
4424549e21daSmrg	    ;;
4425549e21daSmrg	esac
4426ba6a1819Smrg
4427549e21daSmrg	# Do a test to see if this is really a libtool program.
4428549e21daSmrg	case $host in
4429549e21daSmrg	*cygwin* | *mingw*)
4430549e21daSmrg	    if func_ltwrapper_executable_p "$file"; then
4431549e21daSmrg	      func_ltwrapper_scriptname "$file"
4432549e21daSmrg	      wrapper=$func_ltwrapper_scriptname_result
4433549e21daSmrg	    else
4434549e21daSmrg	      func_stripname '' '.exe' "$file"
4435549e21daSmrg	      wrapper=$func_stripname_result
4436549e21daSmrg	    fi
4437549e21daSmrg	    ;;
4438549e21daSmrg	*)
4439549e21daSmrg	    wrapper=$file
4440549e21daSmrg	    ;;
4441ba6a1819Smrg	esac
4442549e21daSmrg	if func_ltwrapper_script_p "$wrapper"; then
4443549e21daSmrg	  notinst_deplibs=
4444549e21daSmrg	  relink_command=
4445ba6a1819Smrg
4446549e21daSmrg	  func_source "$wrapper"
4447ba6a1819Smrg
4448549e21daSmrg	  # Check the variables that should have been set.
4449549e21daSmrg	  test -z "$generated_by_libtool_version" && \
4450fe4c343aSmrg	    func_fatal_error "invalid libtool wrapper script '$wrapper'"
4451549e21daSmrg
4452fe4c343aSmrg	  finalize=:
4453549e21daSmrg	  for lib in $notinst_deplibs; do
4454549e21daSmrg	    # Check to see that each library is installed.
4455549e21daSmrg	    libdir=
4456549e21daSmrg	    if test -f "$lib"; then
4457549e21daSmrg	      func_source "$lib"
4458ba6a1819Smrg	    fi
4459fe4c343aSmrg	    libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
4460549e21daSmrg	    if test -n "$libdir" && test ! -f "$libfile"; then
4461fe4c343aSmrg	      func_warning "'$lib' has not been installed in '$libdir'"
4462fe4c343aSmrg	      finalize=false
4463549e21daSmrg	    fi
4464549e21daSmrg	  done
4465ba6a1819Smrg
4466549e21daSmrg	  relink_command=
4467549e21daSmrg	  func_source "$wrapper"
4468ba6a1819Smrg
4469549e21daSmrg	  outputname=
4470fe4c343aSmrg	  if test no = "$fast_install" && test -n "$relink_command"; then
4471549e21daSmrg	    $opt_dry_run || {
4472fe4c343aSmrg	      if $finalize; then
4473549e21daSmrg	        tmpdir=`func_mktempdir`
4474549e21daSmrg		func_basename "$file$stripped_ext"
4475fe4c343aSmrg		file=$func_basename_result
4476fe4c343aSmrg	        outputname=$tmpdir/$file
4477549e21daSmrg	        # Replace the output file specification.
4478549e21daSmrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
4479549e21daSmrg
4480fe4c343aSmrg	        $opt_quiet || {
4481549e21daSmrg	          func_quote_for_expand "$relink_command"
4482549e21daSmrg		  eval "func_echo $func_quote_for_expand_result"
4483549e21daSmrg	        }
4484549e21daSmrg	        if eval "$relink_command"; then :
4485549e21daSmrg	          else
4486fe4c343aSmrg		  func_error "error: relink '$file' with the above command before installing it"
4487549e21daSmrg		  $opt_dry_run || ${RM}r "$tmpdir"
4488549e21daSmrg		  continue
4489549e21daSmrg	        fi
4490fe4c343aSmrg	        file=$outputname
4491549e21daSmrg	      else
4492fe4c343aSmrg	        func_warning "cannot relink '$file'"
4493549e21daSmrg	      fi
4494549e21daSmrg	    }
4495ba6a1819Smrg	  else
4496549e21daSmrg	    # Install the binary that we compiled earlier.
4497549e21daSmrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
4498ba6a1819Smrg	  fi
4499549e21daSmrg	fi
4500ba6a1819Smrg
4501549e21daSmrg	# remove .exe since cygwin /usr/bin/install will append another
4502549e21daSmrg	# one anyway
4503549e21daSmrg	case $install_prog,$host in
4504549e21daSmrg	*/usr/bin/install*,*cygwin*)
4505549e21daSmrg	  case $file:$destfile in
4506549e21daSmrg	  *.exe:*.exe)
4507549e21daSmrg	    # this is ok
4508549e21daSmrg	    ;;
4509549e21daSmrg	  *.exe:*)
4510549e21daSmrg	    destfile=$destfile.exe
4511549e21daSmrg	    ;;
4512549e21daSmrg	  *:*.exe)
4513549e21daSmrg	    func_stripname '' '.exe' "$destfile"
4514549e21daSmrg	    destfile=$func_stripname_result
4515549e21daSmrg	    ;;
4516549e21daSmrg	  esac
4517ba6a1819Smrg	  ;;
4518ba6a1819Smrg	esac
4519549e21daSmrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
4520549e21daSmrg	$opt_dry_run || if test -n "$outputname"; then
4521549e21daSmrg	  ${RM}r "$tmpdir"
4522549e21daSmrg	fi
4523549e21daSmrg	;;
4524549e21daSmrg      esac
4525549e21daSmrg    done
4526ba6a1819Smrg
4527549e21daSmrg    for file in $staticlibs; do
4528549e21daSmrg      func_basename "$file"
4529fe4c343aSmrg      name=$func_basename_result
4530ba6a1819Smrg
4531549e21daSmrg      # Set up the ranlib parameters.
4532fe4c343aSmrg      oldlib=$destdir/$name
45331bedbe3fSmrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
45341bedbe3fSmrg      tool_oldlib=$func_to_tool_file_result
4535ba6a1819Smrg
4536549e21daSmrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
4537ba6a1819Smrg
4538549e21daSmrg      if test -n "$stripme" && test -n "$old_striplib"; then
45391bedbe3fSmrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
4540549e21daSmrg      fi
4541ba6a1819Smrg
4542549e21daSmrg      # Do each command in the postinstall commands.
4543549e21daSmrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
4544549e21daSmrg    done
4545ba6a1819Smrg
4546549e21daSmrg    test -n "$future_libdirs" && \
4547fe4c343aSmrg      func_warning "remember to run '$progname --finish$future_libdirs'"
4548ba6a1819Smrg
4549549e21daSmrg    if test -n "$current_libdirs"; then
4550549e21daSmrg      # Maybe just do a dry run.
4551549e21daSmrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
4552fe4c343aSmrg      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
4553549e21daSmrg    else
4554549e21daSmrg      exit $EXIT_SUCCESS
4555549e21daSmrg    fi
4556549e21daSmrg}
4557ba6a1819Smrg
4558fe4c343aSmrgtest install = "$opt_mode" && func_mode_install ${1+"$@"}
4559ba6a1819Smrg
4560ba6a1819Smrg
4561549e21daSmrg# func_generate_dlsyms outputname originator pic_p
4562549e21daSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with
4563549e21daSmrg# a dlpreopen symbol table.
4564549e21daSmrgfunc_generate_dlsyms ()
4565549e21daSmrg{
4566fe4c343aSmrg    $debug_cmd
4567fe4c343aSmrg
4568fe4c343aSmrg    my_outputname=$1
4569fe4c343aSmrg    my_originator=$2
4570fe4c343aSmrg    my_pic_p=${3-false}
4571fe4c343aSmrg    my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
4572549e21daSmrg    my_dlsyms=
4573549e21daSmrg
4574fe4c343aSmrg    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
4575549e21daSmrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
4576fe4c343aSmrg	my_dlsyms=${my_outputname}S.c
4577549e21daSmrg      else
4578549e21daSmrg	func_error "not configured to extract global symbols from dlpreopened files"
4579549e21daSmrg      fi
4580549e21daSmrg    fi
4581ba6a1819Smrg
4582549e21daSmrg    if test -n "$my_dlsyms"; then
4583549e21daSmrg      case $my_dlsyms in
4584549e21daSmrg      "") ;;
4585549e21daSmrg      *.c)
4586549e21daSmrg	# Discover the nlist of each of the dlfiles.
4587fe4c343aSmrg	nlist=$output_objdir/$my_outputname.nm
4588549e21daSmrg
4589549e21daSmrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
4590549e21daSmrg
4591549e21daSmrg	# Parse the name list into a source file.
4592549e21daSmrg	func_verbose "creating $output_objdir/$my_dlsyms"
4593549e21daSmrg
4594549e21daSmrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
4595fe4c343aSmrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
4596fe4c343aSmrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
4597549e21daSmrg
4598549e21daSmrg#ifdef __cplusplus
4599549e21daSmrgextern \"C\" {
4600549e21daSmrg#endif
4601549e21daSmrg
4602fe4c343aSmrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
4603549e21daSmrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
4604549e21daSmrg#endif
4605549e21daSmrg
46061bedbe3fSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
4607fe4c343aSmrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
4608fe4c343aSmrg/* DATA imports from DLLs on WIN32 can't be const, because runtime
46091bedbe3fSmrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
46101bedbe3fSmrg# define LT_DLSYM_CONST
4611fe4c343aSmrg#elif defined __osf__
46121bedbe3fSmrg/* This system does not cope well with relocations in const data.  */
46131bedbe3fSmrg# define LT_DLSYM_CONST
46141bedbe3fSmrg#else
46151bedbe3fSmrg# define LT_DLSYM_CONST const
46161bedbe3fSmrg#endif
46171bedbe3fSmrg
4618fe4c343aSmrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
4619fe4c343aSmrg
4620549e21daSmrg/* External symbol declarations for the compiler. */\
4621549e21daSmrg"
4622549e21daSmrg
4623fe4c343aSmrg	if test yes = "$dlself"; then
4624fe4c343aSmrg	  func_verbose "generating symbol list for '$output'"
4625549e21daSmrg
4626549e21daSmrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
4627549e21daSmrg
4628549e21daSmrg	  # Add our own program objects to the symbol list.
4629549e21daSmrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
4630549e21daSmrg	  for progfile in $progfiles; do
46311bedbe3fSmrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
4632fe4c343aSmrg	    func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
46331bedbe3fSmrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
4634549e21daSmrg	  done
4635549e21daSmrg
4636549e21daSmrg	  if test -n "$exclude_expsyms"; then
4637549e21daSmrg	    $opt_dry_run || {
4638549e21daSmrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
4639549e21daSmrg	      eval '$MV "$nlist"T "$nlist"'
4640549e21daSmrg	    }
4641ba6a1819Smrg	  fi
4642ba6a1819Smrg
4643549e21daSmrg	  if test -n "$export_symbols_regex"; then
4644549e21daSmrg	    $opt_dry_run || {
4645549e21daSmrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
4646549e21daSmrg	      eval '$MV "$nlist"T "$nlist"'
4647549e21daSmrg	    }
4648ba6a1819Smrg	  fi
4649549e21daSmrg
4650549e21daSmrg	  # Prepare the list of exported symbols
4651549e21daSmrg	  if test -z "$export_symbols"; then
4652fe4c343aSmrg	    export_symbols=$output_objdir/$outputname.exp
4653549e21daSmrg	    $opt_dry_run || {
4654549e21daSmrg	      $RM $export_symbols
4655fe4c343aSmrg	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
4656549e21daSmrg	      case $host in
4657549e21daSmrg	      *cygwin* | *mingw* | *cegcc* )
4658549e21daSmrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4659549e21daSmrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
4660549e21daSmrg	        ;;
4661ba6a1819Smrg	      esac
4662549e21daSmrg	    }
4663549e21daSmrg	  else
4664549e21daSmrg	    $opt_dry_run || {
4665fe4c343aSmrg	      eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
4666549e21daSmrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
4667549e21daSmrg	      eval '$MV "$nlist"T "$nlist"'
4668549e21daSmrg	      case $host in
4669549e21daSmrg	        *cygwin* | *mingw* | *cegcc* )
4670549e21daSmrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4671549e21daSmrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
4672549e21daSmrg	          ;;
4673ba6a1819Smrg	      esac
4674549e21daSmrg	    }
4675ba6a1819Smrg	  fi
4676549e21daSmrg	fi
4677ba6a1819Smrg
4678549e21daSmrg	for dlprefile in $dlprefiles; do
4679fe4c343aSmrg	  func_verbose "extracting global C symbols from '$dlprefile'"
4680549e21daSmrg	  func_basename "$dlprefile"
4681fe4c343aSmrg	  name=$func_basename_result
46821bedbe3fSmrg          case $host in
46831bedbe3fSmrg	    *cygwin* | *mingw* | *cegcc* )
46841bedbe3fSmrg	      # if an import library, we need to obtain dlname
46851bedbe3fSmrg	      if func_win32_import_lib_p "$dlprefile"; then
46861bedbe3fSmrg	        func_tr_sh "$dlprefile"
46871bedbe3fSmrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
4688fe4c343aSmrg	        dlprefile_dlbasename=
46891bedbe3fSmrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
46901bedbe3fSmrg	          # Use subshell, to avoid clobbering current variable values
46911bedbe3fSmrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
4692fe4c343aSmrg	          if test -n "$dlprefile_dlname"; then
46931bedbe3fSmrg	            func_basename "$dlprefile_dlname"
4694fe4c343aSmrg	            dlprefile_dlbasename=$func_basename_result
46951bedbe3fSmrg	          else
46961bedbe3fSmrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
46971bedbe3fSmrg	            $sharedlib_from_linklib_cmd "$dlprefile"
46981bedbe3fSmrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
46991bedbe3fSmrg	          fi
47001bedbe3fSmrg	        fi
47011bedbe3fSmrg	        $opt_dry_run || {
4702fe4c343aSmrg	          if test -n "$dlprefile_dlbasename"; then
47031bedbe3fSmrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
47041bedbe3fSmrg	          else
47051bedbe3fSmrg	            func_warning "Could not compute DLL name from $name"
47061bedbe3fSmrg	            eval '$ECHO ": $name " >> "$nlist"'
47071bedbe3fSmrg	          fi
47081bedbe3fSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
47091bedbe3fSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
47101bedbe3fSmrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
47111bedbe3fSmrg	        }
47121bedbe3fSmrg	      else # not an import lib
47131bedbe3fSmrg	        $opt_dry_run || {
47141bedbe3fSmrg	          eval '$ECHO ": $name " >> "$nlist"'
47151bedbe3fSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
47161bedbe3fSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
47171bedbe3fSmrg	        }
47181bedbe3fSmrg	      fi
47191bedbe3fSmrg	    ;;
47201bedbe3fSmrg	    *)
47211bedbe3fSmrg	      $opt_dry_run || {
47221bedbe3fSmrg	        eval '$ECHO ": $name " >> "$nlist"'
47231bedbe3fSmrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
47241bedbe3fSmrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
47251bedbe3fSmrg	      }
47261bedbe3fSmrg	    ;;
47271bedbe3fSmrg          esac
4728549e21daSmrg	done
4729ba6a1819Smrg
4730549e21daSmrg	$opt_dry_run || {
4731549e21daSmrg	  # Make sure we have at least an empty file.
4732549e21daSmrg	  test -f "$nlist" || : > "$nlist"
4733ba6a1819Smrg
4734549e21daSmrg	  if test -n "$exclude_expsyms"; then
4735549e21daSmrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
4736549e21daSmrg	    $MV "$nlist"T "$nlist"
4737ba6a1819Smrg	  fi
4738ba6a1819Smrg
4739549e21daSmrg	  # Try sorting and uniquifying the output.
4740549e21daSmrg	  if $GREP -v "^: " < "$nlist" |
4741549e21daSmrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
4742549e21daSmrg		sort -k 3
4743ba6a1819Smrg	      else
4744549e21daSmrg		sort +2
4745549e21daSmrg	      fi |
4746549e21daSmrg	      uniq > "$nlist"S; then
4747549e21daSmrg	    :
4748ba6a1819Smrg	  else
4749549e21daSmrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
4750ba6a1819Smrg	  fi
4751ba6a1819Smrg
4752549e21daSmrg	  if test -f "$nlist"S; then
4753549e21daSmrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
4754ba6a1819Smrg	  else
4755549e21daSmrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
4756ba6a1819Smrg	  fi
4757ba6a1819Smrg
4758fe4c343aSmrg	  func_show_eval '$RM "${nlist}I"'
4759fe4c343aSmrg	  if test -n "$global_symbol_to_import"; then
4760fe4c343aSmrg	    eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
4761fe4c343aSmrg	  fi
4762fe4c343aSmrg
4763549e21daSmrg	  echo >> "$output_objdir/$my_dlsyms" "\
4764ba6a1819Smrg
4765549e21daSmrg/* The mapping between symbol names and symbols.  */
4766549e21daSmrgtypedef struct {
4767549e21daSmrg  const char *name;
4768549e21daSmrg  void *address;
4769549e21daSmrg} lt_dlsymlist;
47701bedbe3fSmrgextern LT_DLSYM_CONST lt_dlsymlist
4771fe4c343aSmrglt_${my_prefix}_LTX_preloaded_symbols[];\
4772fe4c343aSmrg"
4773fe4c343aSmrg
4774fe4c343aSmrg	  if test -s "$nlist"I; then
4775fe4c343aSmrg	    echo >> "$output_objdir/$my_dlsyms" "\
4776fe4c343aSmrgstatic void lt_syminit(void)
4777fe4c343aSmrg{
4778fe4c343aSmrg  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
4779fe4c343aSmrg  for (; symbol->name; ++symbol)
4780fe4c343aSmrg    {"
4781fe4c343aSmrg	    $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
4782fe4c343aSmrg	    echo >> "$output_objdir/$my_dlsyms" "\
4783fe4c343aSmrg    }
4784fe4c343aSmrg}"
4785fe4c343aSmrg	  fi
4786fe4c343aSmrg	  echo >> "$output_objdir/$my_dlsyms" "\
47871bedbe3fSmrgLT_DLSYM_CONST lt_dlsymlist
4788549e21daSmrglt_${my_prefix}_LTX_preloaded_symbols[] =
4789fe4c343aSmrg{ {\"$my_originator\", (void *) 0},"
4790fe4c343aSmrg
4791fe4c343aSmrg	  if test -s "$nlist"I; then
4792fe4c343aSmrg	    echo >> "$output_objdir/$my_dlsyms" "\
4793fe4c343aSmrg  {\"@INIT@\", (void *) &lt_syminit},"
4794fe4c343aSmrg	  fi
4795549e21daSmrg
4796549e21daSmrg	  case $need_lib_prefix in
4797549e21daSmrg	  no)
4798549e21daSmrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
4799549e21daSmrg	    ;;
4800549e21daSmrg	  *)
4801549e21daSmrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
4802549e21daSmrg	    ;;
4803549e21daSmrg	  esac
4804549e21daSmrg	  echo >> "$output_objdir/$my_dlsyms" "\
4805549e21daSmrg  {0, (void *) 0}
4806549e21daSmrg};
4807549e21daSmrg
4808549e21daSmrg/* This works around a problem in FreeBSD linker */
4809549e21daSmrg#ifdef FREEBSD_WORKAROUND
4810549e21daSmrgstatic const void *lt_preloaded_setup() {
4811549e21daSmrg  return lt_${my_prefix}_LTX_preloaded_symbols;
4812549e21daSmrg}
4813549e21daSmrg#endif
4814549e21daSmrg
4815549e21daSmrg#ifdef __cplusplus
4816549e21daSmrg}
4817549e21daSmrg#endif\
4818549e21daSmrg"
4819549e21daSmrg	} # !$opt_dry_run
4820549e21daSmrg
4821549e21daSmrg	pic_flag_for_symtable=
4822549e21daSmrg	case "$compile_command " in
4823549e21daSmrg	*" -static "*) ;;
4824549e21daSmrg	*)
4825549e21daSmrg	  case $host in
4826549e21daSmrg	  # compiling the symbol table file with pic_flag works around
4827549e21daSmrg	  # a FreeBSD bug that causes programs to crash when -lm is
4828549e21daSmrg	  # linked before any other PIC object.  But we must not use
4829549e21daSmrg	  # pic_flag when linking with -static.  The problem exists in
4830549e21daSmrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
48311bedbe3fSmrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
4832549e21daSmrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
4833549e21daSmrg	  *-*-hpux*)
4834549e21daSmrg	    pic_flag_for_symtable=" $pic_flag"  ;;
4835549e21daSmrg	  *)
4836fe4c343aSmrg	    $my_pic_p && pic_flag_for_symtable=" $pic_flag"
4837549e21daSmrg	    ;;
4838549e21daSmrg	  esac
4839549e21daSmrg	  ;;
4840549e21daSmrg	esac
4841549e21daSmrg	symtab_cflags=
4842549e21daSmrg	for arg in $LTCFLAGS; do
4843549e21daSmrg	  case $arg in
4844549e21daSmrg	  -pie | -fpie | -fPIE) ;;
48451bedbe3fSmrg	  *) func_append symtab_cflags " $arg" ;;
4846549e21daSmrg	  esac
4847549e21daSmrg	done
4848ba6a1819Smrg
4849549e21daSmrg	# Now compile the dynamic symbol file.
4850549e21daSmrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
4851ba6a1819Smrg
4852549e21daSmrg	# Clean up the generated files.
4853fe4c343aSmrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
4854549e21daSmrg
4855549e21daSmrg	# Transform the symbol file into the correct name.
4856fe4c343aSmrg	symfileobj=$output_objdir/${my_outputname}S.$objext
4857549e21daSmrg	case $host in
4858549e21daSmrg	*cygwin* | *mingw* | *cegcc* )
4859549e21daSmrg	  if test -f "$output_objdir/$my_outputname.def"; then
4860549e21daSmrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
4861549e21daSmrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
4862549e21daSmrg	  else
4863549e21daSmrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4864549e21daSmrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4865549e21daSmrg	  fi
4866549e21daSmrg	  ;;
4867549e21daSmrg	*)
4868549e21daSmrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4869549e21daSmrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4870ba6a1819Smrg	  ;;
4871ba6a1819Smrg	esac
4872549e21daSmrg	;;
4873549e21daSmrg      *)
4874fe4c343aSmrg	func_fatal_error "unknown suffix for '$my_dlsyms'"
4875549e21daSmrg	;;
4876549e21daSmrg      esac
4877549e21daSmrg    else
4878549e21daSmrg      # We keep going just in case the user didn't refer to
4879549e21daSmrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
4880549e21daSmrg      # really was required.
4881ba6a1819Smrg
4882549e21daSmrg      # Nullify the symbol file.
4883549e21daSmrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
4884549e21daSmrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
4885549e21daSmrg    fi
4886549e21daSmrg}
4887ba6a1819Smrg
4888fe4c343aSmrg# func_cygming_gnu_implib_p ARG
4889fe4c343aSmrg# This predicate returns with zero status (TRUE) if
4890fe4c343aSmrg# ARG is a GNU/binutils-style import library. Returns
4891fe4c343aSmrg# with nonzero status (FALSE) otherwise.
4892fe4c343aSmrgfunc_cygming_gnu_implib_p ()
4893fe4c343aSmrg{
4894fe4c343aSmrg  $debug_cmd
4895fe4c343aSmrg
4896fe4c343aSmrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
4897fe4c343aSmrg  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)$'`
4898fe4c343aSmrg  test -n "$func_cygming_gnu_implib_tmp"
4899fe4c343aSmrg}
4900fe4c343aSmrg
4901fe4c343aSmrg# func_cygming_ms_implib_p ARG
4902fe4c343aSmrg# This predicate returns with zero status (TRUE) if
4903fe4c343aSmrg# ARG is an MS-style import library. Returns
4904fe4c343aSmrg# with nonzero status (FALSE) otherwise.
4905fe4c343aSmrgfunc_cygming_ms_implib_p ()
4906fe4c343aSmrg{
4907fe4c343aSmrg  $debug_cmd
4908fe4c343aSmrg
4909fe4c343aSmrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
4910fe4c343aSmrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
4911fe4c343aSmrg  test -n "$func_cygming_ms_implib_tmp"
4912fe4c343aSmrg}
4913fe4c343aSmrg
4914549e21daSmrg# func_win32_libid arg
4915549e21daSmrg# return the library type of file 'arg'
4916549e21daSmrg#
4917549e21daSmrg# Need a lot of goo to handle *both* DLLs and import libs
4918549e21daSmrg# Has to be a shell function in order to 'eat' the argument
4919549e21daSmrg# that is supplied when $file_magic_command is called.
4920549e21daSmrg# Despite the name, also deal with 64 bit binaries.
4921549e21daSmrgfunc_win32_libid ()
4922549e21daSmrg{
4923fe4c343aSmrg  $debug_cmd
4924fe4c343aSmrg
4925fe4c343aSmrg  win32_libid_type=unknown
4926549e21daSmrg  win32_fileres=`file -L $1 2>/dev/null`
4927549e21daSmrg  case $win32_fileres in
4928549e21daSmrg  *ar\ archive\ import\ library*) # definitely import
4929549e21daSmrg    win32_libid_type="x86 archive import"
4930549e21daSmrg    ;;
4931549e21daSmrg  *ar\ archive*) # could be an import, or static
4932549e21daSmrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
4933549e21daSmrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
4934549e21daSmrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
4935fe4c343aSmrg      case $nm_interface in
4936fe4c343aSmrg      "MS dumpbin")
4937fe4c343aSmrg	if func_cygming_ms_implib_p "$1" ||
4938fe4c343aSmrg	   func_cygming_gnu_implib_p "$1"
4939fe4c343aSmrg	then
4940fe4c343aSmrg	  win32_nmres=import
4941fe4c343aSmrg	else
4942fe4c343aSmrg	  win32_nmres=
4943fe4c343aSmrg	fi
4944fe4c343aSmrg	;;
4945fe4c343aSmrg      *)
4946fe4c343aSmrg	func_to_tool_file "$1" func_convert_file_msys_to_w32
4947fe4c343aSmrg	win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
4948fe4c343aSmrg	  $SED -n -e '
4949549e21daSmrg	    1,100{
4950549e21daSmrg		/ I /{
4951fe4c343aSmrg		    s|.*|import|
4952549e21daSmrg		    p
4953549e21daSmrg		    q
4954549e21daSmrg		}
4955549e21daSmrg	    }'`
4956fe4c343aSmrg	;;
4957fe4c343aSmrg      esac
4958549e21daSmrg      case $win32_nmres in
4959549e21daSmrg      import*)  win32_libid_type="x86 archive import";;
4960549e21daSmrg      *)        win32_libid_type="x86 archive static";;
4961549e21daSmrg      esac
4962549e21daSmrg    fi
4963549e21daSmrg    ;;
4964549e21daSmrg  *DLL*)
4965549e21daSmrg    win32_libid_type="x86 DLL"
4966549e21daSmrg    ;;
4967549e21daSmrg  *executable*) # but shell scripts are "executable" too...
4968549e21daSmrg    case $win32_fileres in
4969549e21daSmrg    *MS\ Windows\ PE\ Intel*)
4970549e21daSmrg      win32_libid_type="x86 DLL"
4971549e21daSmrg      ;;
4972549e21daSmrg    esac
4973549e21daSmrg    ;;
4974549e21daSmrg  esac
4975549e21daSmrg  $ECHO "$win32_libid_type"
4976549e21daSmrg}
4977ba6a1819Smrg
49781bedbe3fSmrg# func_cygming_dll_for_implib ARG
49791bedbe3fSmrg#
49801bedbe3fSmrg# Platform-specific function to extract the
49811bedbe3fSmrg# name of the DLL associated with the specified
49821bedbe3fSmrg# import library ARG.
49831bedbe3fSmrg# Invoked by eval'ing the libtool variable
49841bedbe3fSmrg#    $sharedlib_from_linklib_cmd
49851bedbe3fSmrg# Result is available in the variable
49861bedbe3fSmrg#    $sharedlib_from_linklib_result
49871bedbe3fSmrgfunc_cygming_dll_for_implib ()
49881bedbe3fSmrg{
4989fe4c343aSmrg  $debug_cmd
4990fe4c343aSmrg
49911bedbe3fSmrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
49921bedbe3fSmrg}
49931bedbe3fSmrg
49941bedbe3fSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
49951bedbe3fSmrg#
49961bedbe3fSmrg# The is the core of a fallback implementation of a
49971bedbe3fSmrg# platform-specific function to extract the name of the
49981bedbe3fSmrg# DLL associated with the specified import library LIBNAME.
49991bedbe3fSmrg#
50001bedbe3fSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending
50011bedbe3fSmrg# on the platform and compiler that created the implib.
50021bedbe3fSmrg#
50031bedbe3fSmrg# Echos the name of the DLL associated with the
50041bedbe3fSmrg# specified import library.
50051bedbe3fSmrgfunc_cygming_dll_for_implib_fallback_core ()
50061bedbe3fSmrg{
5007fe4c343aSmrg  $debug_cmd
5008fe4c343aSmrg
50091bedbe3fSmrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
50101bedbe3fSmrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
50111bedbe3fSmrg    $SED '/^Contents of section '"$match_literal"':/{
50121bedbe3fSmrg      # Place marker at beginning of archive member dllname section
50131bedbe3fSmrg      s/.*/====MARK====/
50141bedbe3fSmrg      p
50151bedbe3fSmrg      d
50161bedbe3fSmrg    }
50171bedbe3fSmrg    # These lines can sometimes be longer than 43 characters, but
50181bedbe3fSmrg    # are always uninteresting
50191bedbe3fSmrg    /:[	 ]*file format pe[i]\{,1\}-/d
50201bedbe3fSmrg    /^In archive [^:]*:/d
50211bedbe3fSmrg    # Ensure marker is printed
50221bedbe3fSmrg    /^====MARK====/p
50231bedbe3fSmrg    # Remove all lines with less than 43 characters
50241bedbe3fSmrg    /^.\{43\}/!d
50251bedbe3fSmrg    # From remaining lines, remove first 43 characters
50261bedbe3fSmrg    s/^.\{43\}//' |
50271bedbe3fSmrg    $SED -n '
50281bedbe3fSmrg      # Join marker and all lines until next marker into a single line
50291bedbe3fSmrg      /^====MARK====/ b para
50301bedbe3fSmrg      H
50311bedbe3fSmrg      $ b para
50321bedbe3fSmrg      b
50331bedbe3fSmrg      :para
50341bedbe3fSmrg      x
50351bedbe3fSmrg      s/\n//g
50361bedbe3fSmrg      # Remove the marker
50371bedbe3fSmrg      s/^====MARK====//
50381bedbe3fSmrg      # Remove trailing dots and whitespace
50391bedbe3fSmrg      s/[\. \t]*$//
50401bedbe3fSmrg      # Print
50411bedbe3fSmrg      /./p' |
50421bedbe3fSmrg    # we now have a list, one entry per line, of the stringified
50431bedbe3fSmrg    # contents of the appropriate section of all members of the
5044fe4c343aSmrg    # archive that possess that section. Heuristic: eliminate
5045fe4c343aSmrg    # all those that have a first or second character that is
50461bedbe3fSmrg    # a '.' (that is, objdump's representation of an unprintable
50471bedbe3fSmrg    # character.) This should work for all archives with less than
50481bedbe3fSmrg    # 0x302f exports -- but will fail for DLLs whose name actually
50491bedbe3fSmrg    # begins with a literal '.' or a single character followed by
50501bedbe3fSmrg    # a '.'.
50511bedbe3fSmrg    #
50521bedbe3fSmrg    # Of those that remain, print the first one.
50531bedbe3fSmrg    $SED -e '/^\./d;/^.\./d;q'
50541bedbe3fSmrg}
50551bedbe3fSmrg
50561bedbe3fSmrg# func_cygming_dll_for_implib_fallback ARG
50571bedbe3fSmrg# Platform-specific function to extract the
50581bedbe3fSmrg# name of the DLL associated with the specified
50591bedbe3fSmrg# import library ARG.
50601bedbe3fSmrg#
50611bedbe3fSmrg# This fallback implementation is for use when $DLLTOOL
50621bedbe3fSmrg# does not support the --identify-strict option.
50631bedbe3fSmrg# Invoked by eval'ing the libtool variable
50641bedbe3fSmrg#    $sharedlib_from_linklib_cmd
50651bedbe3fSmrg# Result is available in the variable
50661bedbe3fSmrg#    $sharedlib_from_linklib_result
50671bedbe3fSmrgfunc_cygming_dll_for_implib_fallback ()
50681bedbe3fSmrg{
5069fe4c343aSmrg  $debug_cmd
5070fe4c343aSmrg
5071fe4c343aSmrg  if func_cygming_gnu_implib_p "$1"; then
50721bedbe3fSmrg    # binutils import library
50731bedbe3fSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
5074fe4c343aSmrg  elif func_cygming_ms_implib_p "$1"; then
50751bedbe3fSmrg    # ms-generated import library
50761bedbe3fSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
50771bedbe3fSmrg  else
50781bedbe3fSmrg    # unknown
5079fe4c343aSmrg    sharedlib_from_linklib_result=
50801bedbe3fSmrg  fi
50811bedbe3fSmrg}
5082ba6a1819Smrg
5083ba6a1819Smrg
5084549e21daSmrg# func_extract_an_archive dir oldlib
5085549e21daSmrgfunc_extract_an_archive ()
5086549e21daSmrg{
5087fe4c343aSmrg    $debug_cmd
5088fe4c343aSmrg
5089fe4c343aSmrg    f_ex_an_ar_dir=$1; shift
5090fe4c343aSmrg    f_ex_an_ar_oldlib=$1
5091fe4c343aSmrg    if test yes = "$lock_old_archive_extraction"; then
5092549e21daSmrg      lockfile=$f_ex_an_ar_oldlib.lock
5093549e21daSmrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
5094549e21daSmrg	func_echo "Waiting for $lockfile to be removed"
5095549e21daSmrg	sleep 2
5096549e21daSmrg      done
5097549e21daSmrg    fi
5098549e21daSmrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
5099549e21daSmrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
5100fe4c343aSmrg    if test yes = "$lock_old_archive_extraction"; then
5101549e21daSmrg      $opt_dry_run || rm -f "$lockfile"
5102549e21daSmrg    fi
5103549e21daSmrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
5104549e21daSmrg     :
5105549e21daSmrg    else
5106549e21daSmrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
5107549e21daSmrg    fi
5108549e21daSmrg}
5109ba6a1819Smrg
5110ba6a1819Smrg
5111549e21daSmrg# func_extract_archives gentop oldlib ...
5112549e21daSmrgfunc_extract_archives ()
5113549e21daSmrg{
5114fe4c343aSmrg    $debug_cmd
5115fe4c343aSmrg
5116fe4c343aSmrg    my_gentop=$1; shift
5117549e21daSmrg    my_oldlibs=${1+"$@"}
5118fe4c343aSmrg    my_oldobjs=
5119fe4c343aSmrg    my_xlib=
5120fe4c343aSmrg    my_xabs=
5121fe4c343aSmrg    my_xdir=
5122ba6a1819Smrg
5123549e21daSmrg    for my_xlib in $my_oldlibs; do
5124549e21daSmrg      # Extract the objects.
5125549e21daSmrg      case $my_xlib in
5126fe4c343aSmrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
5127549e21daSmrg	*) my_xabs=`pwd`"/$my_xlib" ;;
5128ba6a1819Smrg      esac
5129549e21daSmrg      func_basename "$my_xlib"
5130fe4c343aSmrg      my_xlib=$func_basename_result
5131549e21daSmrg      my_xlib_u=$my_xlib
5132549e21daSmrg      while :; do
5133549e21daSmrg        case " $extracted_archives " in
5134549e21daSmrg	*" $my_xlib_u "*)
5135549e21daSmrg	  func_arith $extracted_serial + 1
5136549e21daSmrg	  extracted_serial=$func_arith_result
5137549e21daSmrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
5138549e21daSmrg	*) break ;;
5139549e21daSmrg	esac
5140549e21daSmrg      done
5141549e21daSmrg      extracted_archives="$extracted_archives $my_xlib_u"
5142fe4c343aSmrg      my_xdir=$my_gentop/$my_xlib_u
5143ba6a1819Smrg
5144549e21daSmrg      func_mkdir_p "$my_xdir"
5145ba6a1819Smrg
5146549e21daSmrg      case $host in
5147549e21daSmrg      *-darwin*)
5148549e21daSmrg	func_verbose "Extracting $my_xabs"
5149549e21daSmrg	# Do not bother doing anything if just a dry run
5150549e21daSmrg	$opt_dry_run || {
5151549e21daSmrg	  darwin_orig_dir=`pwd`
5152549e21daSmrg	  cd $my_xdir || exit $?
5153549e21daSmrg	  darwin_archive=$my_xabs
5154549e21daSmrg	  darwin_curdir=`pwd`
5155fe4c343aSmrg	  func_basename "$darwin_archive"
5156fe4c343aSmrg	  darwin_base_archive=$func_basename_result
5157549e21daSmrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
5158549e21daSmrg	  if test -n "$darwin_arches"; then
5159549e21daSmrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
5160549e21daSmrg	    darwin_arch=
5161549e21daSmrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
5162fe4c343aSmrg	    for darwin_arch in  $darwin_arches; do
5163fe4c343aSmrg	      func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
5164fe4c343aSmrg	      $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
5165fe4c343aSmrg	      cd "unfat-$$/$darwin_base_archive-$darwin_arch"
5166fe4c343aSmrg	      func_extract_an_archive "`pwd`" "$darwin_base_archive"
5167549e21daSmrg	      cd "$darwin_curdir"
5168fe4c343aSmrg	      $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
5169549e21daSmrg	    done # $darwin_arches
5170549e21daSmrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
5171fe4c343aSmrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
5172549e21daSmrg	    darwin_file=
5173549e21daSmrg	    darwin_files=
5174549e21daSmrg	    for darwin_file in $darwin_filelist; do
5175549e21daSmrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
5176549e21daSmrg	      $LIPO -create -output "$darwin_file" $darwin_files
5177549e21daSmrg	    done # $darwin_filelist
5178549e21daSmrg	    $RM -rf unfat-$$
5179549e21daSmrg	    cd "$darwin_orig_dir"
5180549e21daSmrg	  else
5181549e21daSmrg	    cd $darwin_orig_dir
5182549e21daSmrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
5183549e21daSmrg	  fi # $darwin_arches
5184549e21daSmrg	} # !$opt_dry_run
5185549e21daSmrg	;;
5186549e21daSmrg      *)
5187549e21daSmrg        func_extract_an_archive "$my_xdir" "$my_xabs"
5188549e21daSmrg	;;
5189549e21daSmrg      esac
5190549e21daSmrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
5191549e21daSmrg    done
5192ba6a1819Smrg
5193fe4c343aSmrg    func_extract_archives_result=$my_oldobjs
5194549e21daSmrg}
5195ba6a1819Smrg
5196ba6a1819Smrg
5197549e21daSmrg# func_emit_wrapper [arg=no]
5198549e21daSmrg#
5199549e21daSmrg# Emit a libtool wrapper script on stdout.
5200549e21daSmrg# Don't directly open a file because we may want to
5201549e21daSmrg# incorporate the script contents within a cygwin/mingw
5202549e21daSmrg# wrapper executable.  Must ONLY be called from within
5203549e21daSmrg# func_mode_link because it depends on a number of variables
5204549e21daSmrg# set therein.
5205549e21daSmrg#
5206549e21daSmrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
5207549e21daSmrg# variable will take.  If 'yes', then the emitted script
5208fe4c343aSmrg# will assume that the directory where it is stored is
5209549e21daSmrg# the $objdir directory.  This is a cygwin/mingw-specific
5210549e21daSmrg# behavior.
5211549e21daSmrgfunc_emit_wrapper ()
5212549e21daSmrg{
5213549e21daSmrg	func_emit_wrapper_arg1=${1-no}
5214ba6a1819Smrg
5215549e21daSmrg	$ECHO "\
5216549e21daSmrg#! $SHELL
5217ba6a1819Smrg
5218549e21daSmrg# $output - temporary wrapper script for $objdir/$outputname
5219fe4c343aSmrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5220549e21daSmrg#
5221549e21daSmrg# The $output program cannot be directly executed until all the libtool
5222549e21daSmrg# libraries that it depends on are installed.
5223549e21daSmrg#
5224549e21daSmrg# This wrapper script should never be moved out of the build directory.
5225549e21daSmrg# If it is, it will not operate correctly.
5226ba6a1819Smrg
5227549e21daSmrg# Sed substitution that helps us do robust quoting.  It backslashifies
5228549e21daSmrg# metacharacters that are still active within double-quoted strings.
5229549e21daSmrgsed_quote_subst='$sed_quote_subst'
5230ba6a1819Smrg
5231549e21daSmrg# Be Bourne compatible
5232549e21daSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
5233549e21daSmrg  emulate sh
5234549e21daSmrg  NULLCMD=:
5235549e21daSmrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
5236549e21daSmrg  # is contrary to our usage.  Disable this feature.
5237549e21daSmrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
5238549e21daSmrg  setopt NO_GLOB_SUBST
5239549e21daSmrgelse
5240549e21daSmrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
5241549e21daSmrgfi
5242549e21daSmrgBIN_SH=xpg4; export BIN_SH # for Tru64
5243549e21daSmrgDUALCASE=1; export DUALCASE # for MKS sh
5244ba6a1819Smrg
5245549e21daSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout
5246549e21daSmrg# if CDPATH is set.
5247549e21daSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
5248ba6a1819Smrg
5249549e21daSmrgrelink_command=\"$relink_command\"
5250ba6a1819Smrg
5251549e21daSmrg# This environment variable determines our operation mode.
5252549e21daSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then
5253549e21daSmrg  # install mode needs the following variables:
5254549e21daSmrg  generated_by_libtool_version='$macro_version'
5255549e21daSmrg  notinst_deplibs='$notinst_deplibs'
5256549e21daSmrgelse
5257549e21daSmrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
5258549e21daSmrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
5259549e21daSmrg    file=\"\$0\""
5260ba6a1819Smrg
5261549e21daSmrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
5262549e21daSmrg    $ECHO "\
5263ba6a1819Smrg
5264549e21daSmrg# A function that is used when there is no print builtin or printf.
5265549e21daSmrgfunc_fallback_echo ()
5266549e21daSmrg{
5267549e21daSmrg  eval 'cat <<_LTECHO_EOF
5268549e21daSmrg\$1
5269549e21daSmrg_LTECHO_EOF'
5270549e21daSmrg}
5271549e21daSmrg    ECHO=\"$qECHO\"
5272549e21daSmrg  fi
5273ba6a1819Smrg
5274549e21daSmrg# Very basic option parsing. These options are (a) specific to
5275549e21daSmrg# the libtool wrapper, (b) are identical between the wrapper
5276fe4c343aSmrg# /script/ and the wrapper /executable/ that is used only on
5277549e21daSmrg# windows platforms, and (c) all begin with the string "--lt-"
5278fe4c343aSmrg# (application programs are unlikely to have options that match
5279549e21daSmrg# this pattern).
5280549e21daSmrg#
5281549e21daSmrg# There are only two supported options: --lt-debug and
5282549e21daSmrg# --lt-dump-script. There is, deliberately, no --lt-help.
5283549e21daSmrg#
5284549e21daSmrg# The first argument to this parsing function should be the
5285549e21daSmrg# script's $0 value, followed by "$@".
5286549e21daSmrglt_option_debug=
5287549e21daSmrgfunc_parse_lt_options ()
5288549e21daSmrg{
5289549e21daSmrg  lt_script_arg0=\$0
5290549e21daSmrg  shift
5291549e21daSmrg  for lt_opt
5292549e21daSmrg  do
5293549e21daSmrg    case \"\$lt_opt\" in
5294549e21daSmrg    --lt-debug) lt_option_debug=1 ;;
5295549e21daSmrg    --lt-dump-script)
5296549e21daSmrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
5297549e21daSmrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
5298549e21daSmrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
5299549e21daSmrg        cat \"\$lt_dump_D/\$lt_dump_F\"
5300549e21daSmrg        exit 0
5301549e21daSmrg      ;;
5302549e21daSmrg    --lt-*)
5303549e21daSmrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
5304549e21daSmrg        exit 1
5305549e21daSmrg      ;;
5306549e21daSmrg    esac
5307549e21daSmrg  done
5308ba6a1819Smrg
5309549e21daSmrg  # Print the debug banner immediately:
5310549e21daSmrg  if test -n \"\$lt_option_debug\"; then
5311fe4c343aSmrg    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
5312549e21daSmrg  fi
5313549e21daSmrg}
5314ba6a1819Smrg
5315549e21daSmrg# Used when --lt-debug. Prints its arguments to stdout
5316549e21daSmrg# (redirection is the responsibility of the caller)
5317549e21daSmrgfunc_lt_dump_args ()
5318549e21daSmrg{
5319549e21daSmrg  lt_dump_args_N=1;
5320549e21daSmrg  for lt_arg
5321549e21daSmrg  do
5322fe4c343aSmrg    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
5323549e21daSmrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
5324549e21daSmrg  done
5325549e21daSmrg}
5326ba6a1819Smrg
5327549e21daSmrg# Core function for launching the target application
5328549e21daSmrgfunc_exec_program_core ()
5329549e21daSmrg{
5330549e21daSmrg"
5331549e21daSmrg  case $host in
5332549e21daSmrg  # Backslashes separate directories on plain windows
5333549e21daSmrg  *-*-mingw | *-*-os2* | *-cegcc*)
5334549e21daSmrg    $ECHO "\
5335549e21daSmrg      if test -n \"\$lt_option_debug\"; then
5336fe4c343aSmrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
5337549e21daSmrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
5338549e21daSmrg      fi
5339549e21daSmrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
5340549e21daSmrg"
5341549e21daSmrg    ;;
5342ba6a1819Smrg
5343549e21daSmrg  *)
5344549e21daSmrg    $ECHO "\
5345549e21daSmrg      if test -n \"\$lt_option_debug\"; then
5346fe4c343aSmrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
5347549e21daSmrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
5348549e21daSmrg      fi
5349549e21daSmrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
5350549e21daSmrg"
5351549e21daSmrg    ;;
5352549e21daSmrg  esac
5353549e21daSmrg  $ECHO "\
5354549e21daSmrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
5355549e21daSmrg      exit 1
5356549e21daSmrg}
5357ba6a1819Smrg
5358549e21daSmrg# A function to encapsulate launching the target application
5359549e21daSmrg# Strips options in the --lt-* namespace from \$@ and
5360549e21daSmrg# launches target application with the remaining arguments.
5361549e21daSmrgfunc_exec_program ()
5362549e21daSmrg{
53631bedbe3fSmrg  case \" \$* \" in
53641bedbe3fSmrg  *\\ --lt-*)
53651bedbe3fSmrg    for lt_wr_arg
53661bedbe3fSmrg    do
53671bedbe3fSmrg      case \$lt_wr_arg in
53681bedbe3fSmrg      --lt-*) ;;
53691bedbe3fSmrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
53701bedbe3fSmrg      esac
53711bedbe3fSmrg      shift
53721bedbe3fSmrg    done ;;
53731bedbe3fSmrg  esac
5374549e21daSmrg  func_exec_program_core \${1+\"\$@\"}
5375549e21daSmrg}
5376ba6a1819Smrg
5377549e21daSmrg  # Parse options
5378549e21daSmrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
5379ba6a1819Smrg
5380549e21daSmrg  # Find the directory that this script lives in.
5381549e21daSmrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
5382549e21daSmrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
5383ba6a1819Smrg
5384549e21daSmrg  # Follow symbolic links until we get to the real thisdir.
5385549e21daSmrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
5386549e21daSmrg  while test -n \"\$file\"; do
5387549e21daSmrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
5388ba6a1819Smrg
5389549e21daSmrg    # If there was a directory component, then change thisdir.
5390549e21daSmrg    if test \"x\$destdir\" != \"x\$file\"; then
5391549e21daSmrg      case \"\$destdir\" in
5392549e21daSmrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
5393549e21daSmrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
5394549e21daSmrg      esac
5395549e21daSmrg    fi
5396ba6a1819Smrg
5397549e21daSmrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
5398549e21daSmrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
5399549e21daSmrg  done
5400ba6a1819Smrg
5401549e21daSmrg  # Usually 'no', except on cygwin/mingw when embedded into
5402549e21daSmrg  # the cwrapper.
5403549e21daSmrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
5404549e21daSmrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
5405549e21daSmrg    # special case for '.'
5406549e21daSmrg    if test \"\$thisdir\" = \".\"; then
5407549e21daSmrg      thisdir=\`pwd\`
5408549e21daSmrg    fi
5409549e21daSmrg    # remove .libs from thisdir
5410549e21daSmrg    case \"\$thisdir\" in
5411549e21daSmrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
5412549e21daSmrg    $objdir )   thisdir=. ;;
5413549e21daSmrg    esac
5414549e21daSmrg  fi
5415ba6a1819Smrg
5416549e21daSmrg  # Try to get the absolute directory name.
5417549e21daSmrg  absdir=\`cd \"\$thisdir\" && pwd\`
5418549e21daSmrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
5419549e21daSmrg"
5420ba6a1819Smrg
5421fe4c343aSmrg	if test yes = "$fast_install"; then
5422549e21daSmrg	  $ECHO "\
5423549e21daSmrg  program=lt-'$outputname'$exeext
5424549e21daSmrg  progdir=\"\$thisdir/$objdir\"
5425ba6a1819Smrg
5426549e21daSmrg  if test ! -f \"\$progdir/\$program\" ||
5427fe4c343aSmrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
5428549e21daSmrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
5429ba6a1819Smrg
5430549e21daSmrg    file=\"\$\$-\$program\"
5431ba6a1819Smrg
5432549e21daSmrg    if test ! -d \"\$progdir\"; then
5433549e21daSmrg      $MKDIR \"\$progdir\"
5434549e21daSmrg    else
5435549e21daSmrg      $RM \"\$progdir/\$file\"
5436549e21daSmrg    fi"
5437ba6a1819Smrg
5438549e21daSmrg	  $ECHO "\
5439549e21daSmrg
5440549e21daSmrg    # relink executable if necessary
5441549e21daSmrg    if test -n \"\$relink_command\"; then
5442549e21daSmrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
5443549e21daSmrg      else
5444fe4c343aSmrg	\$ECHO \"\$relink_command_output\" >&2
5445549e21daSmrg	$RM \"\$progdir/\$file\"
5446549e21daSmrg	exit 1
5447ba6a1819Smrg      fi
5448549e21daSmrg    fi
5449ba6a1819Smrg
5450549e21daSmrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
5451549e21daSmrg    { $RM \"\$progdir/\$program\";
5452549e21daSmrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
5453549e21daSmrg    $RM \"\$progdir/\$file\"
5454549e21daSmrg  fi"
5455549e21daSmrg	else
5456549e21daSmrg	  $ECHO "\
5457549e21daSmrg  program='$outputname'
5458549e21daSmrg  progdir=\"\$thisdir/$objdir\"
5459549e21daSmrg"
5460ba6a1819Smrg	fi
5461ba6a1819Smrg
5462549e21daSmrg	$ECHO "\
5463ba6a1819Smrg
5464549e21daSmrg  if test -f \"\$progdir/\$program\"; then"
5465ba6a1819Smrg
54661bedbe3fSmrg	# fixup the dll searchpath if we need to.
54671bedbe3fSmrg	#
54681bedbe3fSmrg	# Fix the DLL searchpath if we need to.  Do this before prepending
54691bedbe3fSmrg	# to shlibpath, because on Windows, both are PATH and uninstalled
54701bedbe3fSmrg	# libraries must come first.
54711bedbe3fSmrg	if test -n "$dllsearchpath"; then
54721bedbe3fSmrg	  $ECHO "\
54731bedbe3fSmrg    # Add the dll search path components to the executable PATH
54741bedbe3fSmrg    PATH=$dllsearchpath:\$PATH
54751bedbe3fSmrg"
54761bedbe3fSmrg	fi
54771bedbe3fSmrg
5478549e21daSmrg	# Export our shlibpath_var if we have one.
5479fe4c343aSmrg	if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5480549e21daSmrg	  $ECHO "\
5481549e21daSmrg    # Add our own library path to $shlibpath_var
5482549e21daSmrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
5483ba6a1819Smrg
5484549e21daSmrg    # Some systems cannot cope with colon-terminated $shlibpath_var
5485549e21daSmrg    # The second colon is a workaround for a bug in BeOS R4 sed
5486549e21daSmrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
5487549e21daSmrg
5488549e21daSmrg    export $shlibpath_var
5489549e21daSmrg"
5490ba6a1819Smrg	fi
5491ba6a1819Smrg
5492549e21daSmrg	$ECHO "\
5493549e21daSmrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
5494549e21daSmrg      # Run the actual program with our arguments.
5495549e21daSmrg      func_exec_program \${1+\"\$@\"}
5496549e21daSmrg    fi
5497549e21daSmrg  else
5498549e21daSmrg    # The program doesn't exist.
5499fe4c343aSmrg    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
5500549e21daSmrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
5501549e21daSmrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
5502549e21daSmrg    exit 1
5503549e21daSmrg  fi
5504549e21daSmrgfi\
5505549e21daSmrg"
5506549e21daSmrg}
5507ba6a1819Smrg
5508ba6a1819Smrg
5509549e21daSmrg# func_emit_cwrapperexe_src
5510549e21daSmrg# emit the source code for a wrapper executable on stdout
5511549e21daSmrg# Must ONLY be called from within func_mode_link because
5512549e21daSmrg# it depends on a number of variable set therein.
5513549e21daSmrgfunc_emit_cwrapperexe_src ()
5514549e21daSmrg{
5515549e21daSmrg	cat <<EOF
5516549e21daSmrg
5517549e21daSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
5518fe4c343aSmrg   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5519549e21daSmrg
5520549e21daSmrg   The $output program cannot be directly executed until all the libtool
5521549e21daSmrg   libraries that it depends on are installed.
5522549e21daSmrg
5523549e21daSmrg   This wrapper executable should never be moved out of the build directory.
5524549e21daSmrg   If it is, it will not operate correctly.
5525549e21daSmrg*/
5526549e21daSmrgEOF
5527549e21daSmrg	    cat <<"EOF"
5528549e21daSmrg#ifdef _MSC_VER
5529549e21daSmrg# define _CRT_SECURE_NO_DEPRECATE 1
5530549e21daSmrg#endif
5531549e21daSmrg#include <stdio.h>
5532549e21daSmrg#include <stdlib.h>
5533549e21daSmrg#ifdef _MSC_VER
5534549e21daSmrg# include <direct.h>
5535549e21daSmrg# include <process.h>
5536549e21daSmrg# include <io.h>
5537549e21daSmrg#else
5538549e21daSmrg# include <unistd.h>
5539549e21daSmrg# include <stdint.h>
5540549e21daSmrg# ifdef __CYGWIN__
5541549e21daSmrg#  include <io.h>
5542549e21daSmrg# endif
5543549e21daSmrg#endif
5544549e21daSmrg#include <malloc.h>
5545549e21daSmrg#include <stdarg.h>
5546549e21daSmrg#include <assert.h>
5547549e21daSmrg#include <string.h>
5548549e21daSmrg#include <ctype.h>
5549549e21daSmrg#include <errno.h>
5550549e21daSmrg#include <fcntl.h>
5551549e21daSmrg#include <sys/stat.h>
5552549e21daSmrg
5553fe4c343aSmrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
5554fe4c343aSmrg
5555549e21daSmrg/* declarations of non-ANSI functions */
5556fe4c343aSmrg#if defined __MINGW32__
5557549e21daSmrg# ifdef __STRICT_ANSI__
5558549e21daSmrgint _putenv (const char *);
5559549e21daSmrg# endif
5560fe4c343aSmrg#elif defined __CYGWIN__
5561549e21daSmrg# ifdef __STRICT_ANSI__
5562549e21daSmrgchar *realpath (const char *, char *);
5563549e21daSmrgint putenv (char *);
5564549e21daSmrgint setenv (const char *, const char *, int);
5565549e21daSmrg# endif
5566fe4c343aSmrg/* #elif defined other_platform || defined ... */
5567549e21daSmrg#endif
5568549e21daSmrg
5569549e21daSmrg/* portability defines, excluding path handling macros */
5570fe4c343aSmrg#if defined _MSC_VER
5571549e21daSmrg# define setmode _setmode
5572549e21daSmrg# define stat    _stat
5573549e21daSmrg# define chmod   _chmod
5574549e21daSmrg# define getcwd  _getcwd
5575549e21daSmrg# define putenv  _putenv
5576549e21daSmrg# define S_IXUSR _S_IEXEC
5577fe4c343aSmrg#elif defined __MINGW32__
5578549e21daSmrg# define setmode _setmode
5579549e21daSmrg# define stat    _stat
5580549e21daSmrg# define chmod   _chmod
5581549e21daSmrg# define getcwd  _getcwd
5582549e21daSmrg# define putenv  _putenv
5583fe4c343aSmrg#elif defined __CYGWIN__
5584549e21daSmrg# define HAVE_SETENV
5585549e21daSmrg# define FOPEN_WB "wb"
5586fe4c343aSmrg/* #elif defined other platforms ... */
5587549e21daSmrg#endif
5588549e21daSmrg
5589fe4c343aSmrg#if defined PATH_MAX
5590549e21daSmrg# define LT_PATHMAX PATH_MAX
5591fe4c343aSmrg#elif defined MAXPATHLEN
5592549e21daSmrg# define LT_PATHMAX MAXPATHLEN
5593549e21daSmrg#else
5594549e21daSmrg# define LT_PATHMAX 1024
5595549e21daSmrg#endif
5596549e21daSmrg
5597549e21daSmrg#ifndef S_IXOTH
5598549e21daSmrg# define S_IXOTH 0
5599549e21daSmrg#endif
5600549e21daSmrg#ifndef S_IXGRP
5601549e21daSmrg# define S_IXGRP 0
5602549e21daSmrg#endif
5603549e21daSmrg
5604549e21daSmrg/* path handling portability macros */
5605549e21daSmrg#ifndef DIR_SEPARATOR
5606549e21daSmrg# define DIR_SEPARATOR '/'
5607549e21daSmrg# define PATH_SEPARATOR ':'
5608549e21daSmrg#endif
5609549e21daSmrg
5610fe4c343aSmrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
5611fe4c343aSmrg  defined __OS2__
5612549e21daSmrg# define HAVE_DOS_BASED_FILE_SYSTEM
5613549e21daSmrg# define FOPEN_WB "wb"
5614549e21daSmrg# ifndef DIR_SEPARATOR_2
5615549e21daSmrg#  define DIR_SEPARATOR_2 '\\'
5616549e21daSmrg# endif
5617549e21daSmrg# ifndef PATH_SEPARATOR_2
5618549e21daSmrg#  define PATH_SEPARATOR_2 ';'
5619549e21daSmrg# endif
5620549e21daSmrg#endif
5621549e21daSmrg
5622549e21daSmrg#ifndef DIR_SEPARATOR_2
5623549e21daSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
5624549e21daSmrg#else /* DIR_SEPARATOR_2 */
5625549e21daSmrg# define IS_DIR_SEPARATOR(ch) \
5626549e21daSmrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
5627549e21daSmrg#endif /* DIR_SEPARATOR_2 */
5628549e21daSmrg
5629549e21daSmrg#ifndef PATH_SEPARATOR_2
5630549e21daSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
5631549e21daSmrg#else /* PATH_SEPARATOR_2 */
5632549e21daSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
5633549e21daSmrg#endif /* PATH_SEPARATOR_2 */
5634549e21daSmrg
5635549e21daSmrg#ifndef FOPEN_WB
5636549e21daSmrg# define FOPEN_WB "w"
5637549e21daSmrg#endif
5638549e21daSmrg#ifndef _O_BINARY
5639549e21daSmrg# define _O_BINARY 0
5640549e21daSmrg#endif
5641549e21daSmrg
5642549e21daSmrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
5643549e21daSmrg#define XFREE(stale) do { \
5644fe4c343aSmrg  if (stale) { free (stale); stale = 0; } \
5645549e21daSmrg} while (0)
5646549e21daSmrg
5647fe4c343aSmrg#if defined LT_DEBUGWRAPPER
5648549e21daSmrgstatic int lt_debug = 1;
5649549e21daSmrg#else
5650549e21daSmrgstatic int lt_debug = 0;
5651549e21daSmrg#endif
5652549e21daSmrg
5653549e21daSmrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
5654549e21daSmrg
5655549e21daSmrgvoid *xmalloc (size_t num);
5656549e21daSmrgchar *xstrdup (const char *string);
5657549e21daSmrgconst char *base_name (const char *name);
5658549e21daSmrgchar *find_executable (const char *wrapper);
5659549e21daSmrgchar *chase_symlinks (const char *pathspec);
5660549e21daSmrgint make_executable (const char *path);
5661549e21daSmrgint check_executable (const char *path);
5662549e21daSmrgchar *strendzap (char *str, const char *pat);
5663549e21daSmrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
5664549e21daSmrgvoid lt_fatal (const char *file, int line, const char *message, ...);
5665549e21daSmrgstatic const char *nonnull (const char *s);
5666549e21daSmrgstatic const char *nonempty (const char *s);
5667549e21daSmrgvoid lt_setenv (const char *name, const char *value);
5668549e21daSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
5669549e21daSmrgvoid lt_update_exe_path (const char *name, const char *value);
5670549e21daSmrgvoid lt_update_lib_path (const char *name, const char *value);
5671549e21daSmrgchar **prepare_spawn (char **argv);
5672549e21daSmrgvoid lt_dump_script (FILE *f);
5673549e21daSmrgEOF
5674549e21daSmrg
5675549e21daSmrg	    cat <<EOF
5676fe4c343aSmrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
5677fe4c343aSmrg# define externally_visible volatile
5678fe4c343aSmrg#else
5679fe4c343aSmrg# define externally_visible __attribute__((externally_visible)) volatile
5680fe4c343aSmrg#endif
5681fe4c343aSmrgexternally_visible const char * MAGIC_EXE = "$magic_exe";
5682549e21daSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
5683549e21daSmrgEOF
5684549e21daSmrg
5685fe4c343aSmrg	    if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
56861bedbe3fSmrg              func_to_host_path "$temp_rpath"
5687549e21daSmrg	      cat <<EOF
56881bedbe3fSmrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
5689ba6a1819SmrgEOF
5690ba6a1819Smrg	    else
5691549e21daSmrg	      cat <<"EOF"
5692549e21daSmrgconst char * LIB_PATH_VALUE   = "";
5693549e21daSmrgEOF
5694ba6a1819Smrg	    fi
5695549e21daSmrg
5696549e21daSmrg	    if test -n "$dllsearchpath"; then
56971bedbe3fSmrg              func_to_host_path "$dllsearchpath:"
5698549e21daSmrg	      cat <<EOF
5699549e21daSmrgconst char * EXE_PATH_VARNAME = "PATH";
57001bedbe3fSmrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
5701549e21daSmrgEOF
5702ba6a1819Smrg	    else
5703549e21daSmrg	      cat <<"EOF"
5704549e21daSmrgconst char * EXE_PATH_VARNAME = "";
5705549e21daSmrgconst char * EXE_PATH_VALUE   = "";
5706549e21daSmrgEOF
5707ba6a1819Smrg	    fi
5708ba6a1819Smrg
5709fe4c343aSmrg	    if test yes = "$fast_install"; then
5710549e21daSmrg	      cat <<EOF
5711549e21daSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
5712549e21daSmrgEOF
5713ba6a1819Smrg	    else
5714549e21daSmrg	      cat <<EOF
5715549e21daSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
5716549e21daSmrgEOF
5717ba6a1819Smrg	    fi
5718ba6a1819Smrg
5719ba6a1819Smrg
5720549e21daSmrg	    cat <<"EOF"
5721ba6a1819Smrg
5722549e21daSmrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
5723ba6a1819Smrg
5724549e21daSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
5725549e21daSmrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
5726549e21daSmrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
5727ba6a1819Smrg
5728549e21daSmrgint
5729549e21daSmrgmain (int argc, char *argv[])
5730549e21daSmrg{
5731549e21daSmrg  char **newargz;
5732549e21daSmrg  int  newargc;
5733549e21daSmrg  char *tmp_pathspec;
5734549e21daSmrg  char *actual_cwrapper_path;
5735549e21daSmrg  char *actual_cwrapper_name;
5736549e21daSmrg  char *target_name;
5737549e21daSmrg  char *lt_argv_zero;
5738fe4c343aSmrg  int rval = 127;
5739ba6a1819Smrg
5740549e21daSmrg  int i;
5741ba6a1819Smrg
5742549e21daSmrg  program_name = (char *) xstrdup (base_name (argv[0]));
5743fe4c343aSmrg  newargz = XMALLOC (char *, (size_t) argc + 1);
5744ba6a1819Smrg
5745549e21daSmrg  /* very simple arg parsing; don't want to rely on getopt
5746549e21daSmrg   * also, copy all non cwrapper options to newargz, except
5747549e21daSmrg   * argz[0], which is handled differently
5748549e21daSmrg   */
5749549e21daSmrg  newargc=0;
5750549e21daSmrg  for (i = 1; i < argc; i++)
5751549e21daSmrg    {
5752fe4c343aSmrg      if (STREQ (argv[i], dumpscript_opt))
5753549e21daSmrg	{
5754549e21daSmrgEOF
5755fe4c343aSmrg	    case $host in
5756549e21daSmrg	      *mingw* | *cygwin* )
5757549e21daSmrg		# make stdout use "unix" line endings
5758549e21daSmrg		echo "          setmode(1,_O_BINARY);"
5759549e21daSmrg		;;
5760549e21daSmrg	      esac
5761ba6a1819Smrg
5762549e21daSmrg	    cat <<"EOF"
5763549e21daSmrg	  lt_dump_script (stdout);
5764549e21daSmrg	  return 0;
5765549e21daSmrg	}
5766fe4c343aSmrg      if (STREQ (argv[i], debug_opt))
5767549e21daSmrg	{
5768549e21daSmrg          lt_debug = 1;
5769549e21daSmrg          continue;
5770549e21daSmrg	}
5771fe4c343aSmrg      if (STREQ (argv[i], ltwrapper_option_prefix))
5772549e21daSmrg        {
5773549e21daSmrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
5774549e21daSmrg             namespace, but it is not one of the ones we know about and
5775549e21daSmrg             have already dealt with, above (inluding dump-script), then
5776549e21daSmrg             report an error. Otherwise, targets might begin to believe
5777549e21daSmrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
5778549e21daSmrg             namespace. The first time any user complains about this, we'll
5779549e21daSmrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
5780549e21daSmrg             or a configure.ac-settable value.
5781549e21daSmrg           */
5782549e21daSmrg          lt_fatal (__FILE__, __LINE__,
5783549e21daSmrg		    "unrecognized %s option: '%s'",
5784549e21daSmrg                    ltwrapper_option_prefix, argv[i]);
5785549e21daSmrg        }
5786549e21daSmrg      /* otherwise ... */
5787549e21daSmrg      newargz[++newargc] = xstrdup (argv[i]);
5788549e21daSmrg    }
5789549e21daSmrg  newargz[++newargc] = NULL;
5790ba6a1819Smrg
5791549e21daSmrgEOF
5792549e21daSmrg	    cat <<EOF
5793549e21daSmrg  /* The GNU banner must be the first non-error debug message */
5794fe4c343aSmrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
5795549e21daSmrgEOF
5796549e21daSmrg	    cat <<"EOF"
5797549e21daSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
5798549e21daSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
5799549e21daSmrg
5800549e21daSmrg  tmp_pathspec = find_executable (argv[0]);
5801549e21daSmrg  if (tmp_pathspec == NULL)
5802549e21daSmrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
5803549e21daSmrg  lt_debugprintf (__FILE__, __LINE__,
5804549e21daSmrg                  "(main) found exe (before symlink chase) at: %s\n",
5805549e21daSmrg		  tmp_pathspec);
5806549e21daSmrg
5807549e21daSmrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
5808549e21daSmrg  lt_debugprintf (__FILE__, __LINE__,
5809549e21daSmrg                  "(main) found exe (after symlink chase) at: %s\n",
5810549e21daSmrg		  actual_cwrapper_path);
5811549e21daSmrg  XFREE (tmp_pathspec);
5812549e21daSmrg
5813549e21daSmrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
5814549e21daSmrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
5815549e21daSmrg
5816549e21daSmrg  /* wrapper name transforms */
5817549e21daSmrg  strendzap (actual_cwrapper_name, ".exe");
5818549e21daSmrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
5819549e21daSmrg  XFREE (actual_cwrapper_name);
5820549e21daSmrg  actual_cwrapper_name = tmp_pathspec;
5821549e21daSmrg  tmp_pathspec = 0;
5822549e21daSmrg
5823549e21daSmrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
5824549e21daSmrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
5825549e21daSmrg  strendzap (target_name, ".exe");
5826549e21daSmrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
5827549e21daSmrg  XFREE (target_name);
5828549e21daSmrg  target_name = tmp_pathspec;
5829549e21daSmrg  tmp_pathspec = 0;
5830549e21daSmrg
5831549e21daSmrg  lt_debugprintf (__FILE__, __LINE__,
5832549e21daSmrg		  "(main) libtool target name: %s\n",
5833549e21daSmrg		  target_name);
5834549e21daSmrgEOF
5835ba6a1819Smrg
5836549e21daSmrg	    cat <<EOF
5837549e21daSmrg  newargz[0] =
5838549e21daSmrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
5839549e21daSmrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
5840549e21daSmrg  strcpy (newargz[0], actual_cwrapper_path);
5841549e21daSmrg  strcat (newargz[0], "$objdir");
5842549e21daSmrg  strcat (newargz[0], "/");
5843549e21daSmrgEOF
5844ba6a1819Smrg
5845549e21daSmrg	    cat <<"EOF"
5846549e21daSmrg  /* stop here, and copy so we don't have to do this twice */
5847549e21daSmrg  tmp_pathspec = xstrdup (newargz[0]);
5848ba6a1819Smrg
5849549e21daSmrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
5850549e21daSmrg  strcat (newargz[0], actual_cwrapper_name);
5851ba6a1819Smrg
5852549e21daSmrg  /* DO want the lt- prefix here if it exists, so use target_name */
5853549e21daSmrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
5854549e21daSmrg  XFREE (tmp_pathspec);
5855549e21daSmrg  tmp_pathspec = NULL;
5856549e21daSmrgEOF
5857ba6a1819Smrg
5858549e21daSmrg	    case $host_os in
5859549e21daSmrg	      mingw*)
5860549e21daSmrg	    cat <<"EOF"
5861549e21daSmrg  {
5862549e21daSmrg    char* p;
5863549e21daSmrg    while ((p = strchr (newargz[0], '\\')) != NULL)
5864549e21daSmrg      {
5865549e21daSmrg	*p = '/';
5866549e21daSmrg      }
5867549e21daSmrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
5868549e21daSmrg      {
5869549e21daSmrg	*p = '/';
5870549e21daSmrg      }
5871549e21daSmrg  }
5872549e21daSmrgEOF
5873549e21daSmrg	    ;;
5874549e21daSmrg	    esac
5875ba6a1819Smrg
5876549e21daSmrg	    cat <<"EOF"
5877549e21daSmrg  XFREE (target_name);
5878549e21daSmrg  XFREE (actual_cwrapper_path);
5879549e21daSmrg  XFREE (actual_cwrapper_name);
5880ba6a1819Smrg
5881549e21daSmrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
5882549e21daSmrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
58831bedbe3fSmrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
58841bedbe3fSmrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
58851bedbe3fSmrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
58861bedbe3fSmrg     libraries must come first. */
5887549e21daSmrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
58881bedbe3fSmrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
5889ba6a1819Smrg
5890549e21daSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
5891549e21daSmrg		  nonnull (lt_argv_zero));
5892549e21daSmrg  for (i = 0; i < newargc; i++)
5893549e21daSmrg    {
5894549e21daSmrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
5895549e21daSmrg		      i, nonnull (newargz[i]));
5896549e21daSmrg    }
5897ba6a1819Smrg
5898549e21daSmrgEOF
5899ba6a1819Smrg
5900549e21daSmrg	    case $host_os in
5901549e21daSmrg	      mingw*)
5902549e21daSmrg		cat <<"EOF"
5903549e21daSmrg  /* execv doesn't actually work on mingw as expected on unix */
5904549e21daSmrg  newargz = prepare_spawn (newargz);
5905fe4c343aSmrg  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
5906549e21daSmrg  if (rval == -1)
5907549e21daSmrg    {
5908549e21daSmrg      /* failed to start process */
5909549e21daSmrg      lt_debugprintf (__FILE__, __LINE__,
5910549e21daSmrg		      "(main) failed to launch target \"%s\": %s\n",
5911549e21daSmrg		      lt_argv_zero, nonnull (strerror (errno)));
5912549e21daSmrg      return 127;
5913549e21daSmrg    }
5914549e21daSmrg  return rval;
5915549e21daSmrgEOF
5916549e21daSmrg		;;
5917549e21daSmrg	      *)
5918549e21daSmrg		cat <<"EOF"
5919549e21daSmrg  execv (lt_argv_zero, newargz);
5920549e21daSmrg  return rval; /* =127, but avoids unused variable warning */
5921549e21daSmrgEOF
5922549e21daSmrg		;;
5923549e21daSmrg	    esac
5924ba6a1819Smrg
5925549e21daSmrg	    cat <<"EOF"
5926549e21daSmrg}
5927ba6a1819Smrg
5928549e21daSmrgvoid *
5929549e21daSmrgxmalloc (size_t num)
5930549e21daSmrg{
5931549e21daSmrg  void *p = (void *) malloc (num);
5932549e21daSmrg  if (!p)
5933549e21daSmrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
5934ba6a1819Smrg
5935549e21daSmrg  return p;
5936549e21daSmrg}
5937ba6a1819Smrg
5938549e21daSmrgchar *
5939549e21daSmrgxstrdup (const char *string)
5940549e21daSmrg{
5941549e21daSmrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
5942549e21daSmrg			  string) : NULL;
5943549e21daSmrg}
5944ba6a1819Smrg
5945549e21daSmrgconst char *
5946549e21daSmrgbase_name (const char *name)
5947549e21daSmrg{
5948549e21daSmrg  const char *base;
5949ba6a1819Smrg
5950fe4c343aSmrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
5951549e21daSmrg  /* Skip over the disk name in MSDOS pathnames. */
5952549e21daSmrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
5953549e21daSmrg    name += 2;
5954549e21daSmrg#endif
5955ba6a1819Smrg
5956549e21daSmrg  for (base = name; *name; name++)
5957549e21daSmrg    if (IS_DIR_SEPARATOR (*name))
5958549e21daSmrg      base = name + 1;
5959549e21daSmrg  return base;
5960549e21daSmrg}
5961ba6a1819Smrg
5962549e21daSmrgint
5963549e21daSmrgcheck_executable (const char *path)
5964549e21daSmrg{
5965549e21daSmrg  struct stat st;
5966ba6a1819Smrg
5967549e21daSmrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
5968549e21daSmrg                  nonempty (path));
5969549e21daSmrg  if ((!path) || (!*path))
5970549e21daSmrg    return 0;
5971ba6a1819Smrg
5972549e21daSmrg  if ((stat (path, &st) >= 0)
5973549e21daSmrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
5974549e21daSmrg    return 1;
5975549e21daSmrg  else
5976549e21daSmrg    return 0;
5977549e21daSmrg}
5978ba6a1819Smrg
5979549e21daSmrgint
5980549e21daSmrgmake_executable (const char *path)
5981549e21daSmrg{
5982549e21daSmrg  int rval = 0;
5983549e21daSmrg  struct stat st;
5984ba6a1819Smrg
5985549e21daSmrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
5986549e21daSmrg                  nonempty (path));
5987549e21daSmrg  if ((!path) || (!*path))
5988549e21daSmrg    return 0;
5989ba6a1819Smrg
5990549e21daSmrg  if (stat (path, &st) >= 0)
5991549e21daSmrg    {
5992549e21daSmrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
5993549e21daSmrg    }
5994549e21daSmrg  return rval;
5995549e21daSmrg}
5996ba6a1819Smrg
5997549e21daSmrg/* Searches for the full path of the wrapper.  Returns
5998549e21daSmrg   newly allocated full path name if found, NULL otherwise
5999549e21daSmrg   Does not chase symlinks, even on platforms that support them.
6000549e21daSmrg*/
6001549e21daSmrgchar *
6002549e21daSmrgfind_executable (const char *wrapper)
6003549e21daSmrg{
6004549e21daSmrg  int has_slash = 0;
6005549e21daSmrg  const char *p;
6006549e21daSmrg  const char *p_next;
6007549e21daSmrg  /* static buffer for getcwd */
6008549e21daSmrg  char tmp[LT_PATHMAX + 1];
6009fe4c343aSmrg  size_t tmp_len;
6010549e21daSmrg  char *concat_name;
6011ba6a1819Smrg
6012549e21daSmrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
6013549e21daSmrg                  nonempty (wrapper));
6014ba6a1819Smrg
6015549e21daSmrg  if ((wrapper == NULL) || (*wrapper == '\0'))
6016549e21daSmrg    return NULL;
6017ba6a1819Smrg
6018549e21daSmrg  /* Absolute path? */
6019fe4c343aSmrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6020549e21daSmrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
6021549e21daSmrg    {
6022549e21daSmrg      concat_name = xstrdup (wrapper);
6023549e21daSmrg      if (check_executable (concat_name))
6024549e21daSmrg	return concat_name;
6025549e21daSmrg      XFREE (concat_name);
6026549e21daSmrg    }
6027549e21daSmrg  else
6028549e21daSmrg    {
6029549e21daSmrg#endif
6030549e21daSmrg      if (IS_DIR_SEPARATOR (wrapper[0]))
6031549e21daSmrg	{
6032549e21daSmrg	  concat_name = xstrdup (wrapper);
6033549e21daSmrg	  if (check_executable (concat_name))
6034549e21daSmrg	    return concat_name;
6035549e21daSmrg	  XFREE (concat_name);
6036549e21daSmrg	}
6037fe4c343aSmrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6038549e21daSmrg    }
6039549e21daSmrg#endif
6040ba6a1819Smrg
6041549e21daSmrg  for (p = wrapper; *p; p++)
6042549e21daSmrg    if (*p == '/')
6043549e21daSmrg      {
6044549e21daSmrg	has_slash = 1;
6045549e21daSmrg	break;
6046549e21daSmrg      }
6047549e21daSmrg  if (!has_slash)
6048549e21daSmrg    {
6049549e21daSmrg      /* no slashes; search PATH */
6050549e21daSmrg      const char *path = getenv ("PATH");
6051549e21daSmrg      if (path != NULL)
6052549e21daSmrg	{
6053549e21daSmrg	  for (p = path; *p; p = p_next)
6054549e21daSmrg	    {
6055549e21daSmrg	      const char *q;
6056549e21daSmrg	      size_t p_len;
6057549e21daSmrg	      for (q = p; *q; q++)
6058549e21daSmrg		if (IS_PATH_SEPARATOR (*q))
6059549e21daSmrg		  break;
6060fe4c343aSmrg	      p_len = (size_t) (q - p);
6061549e21daSmrg	      p_next = (*q == '\0' ? q : q + 1);
6062549e21daSmrg	      if (p_len == 0)
6063549e21daSmrg		{
6064549e21daSmrg		  /* empty path: current directory */
6065549e21daSmrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
6066549e21daSmrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6067549e21daSmrg                              nonnull (strerror (errno)));
6068549e21daSmrg		  tmp_len = strlen (tmp);
6069549e21daSmrg		  concat_name =
6070549e21daSmrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6071549e21daSmrg		  memcpy (concat_name, tmp, tmp_len);
6072549e21daSmrg		  concat_name[tmp_len] = '/';
6073549e21daSmrg		  strcpy (concat_name + tmp_len + 1, wrapper);
6074549e21daSmrg		}
6075549e21daSmrg	      else
6076549e21daSmrg		{
6077549e21daSmrg		  concat_name =
6078549e21daSmrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
6079549e21daSmrg		  memcpy (concat_name, p, p_len);
6080549e21daSmrg		  concat_name[p_len] = '/';
6081549e21daSmrg		  strcpy (concat_name + p_len + 1, wrapper);
6082549e21daSmrg		}
6083549e21daSmrg	      if (check_executable (concat_name))
6084549e21daSmrg		return concat_name;
6085549e21daSmrg	      XFREE (concat_name);
6086549e21daSmrg	    }
6087549e21daSmrg	}
6088549e21daSmrg      /* not found in PATH; assume curdir */
6089549e21daSmrg    }
6090549e21daSmrg  /* Relative path | not found in path: prepend cwd */
6091549e21daSmrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
6092549e21daSmrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6093549e21daSmrg              nonnull (strerror (errno)));
6094549e21daSmrg  tmp_len = strlen (tmp);
6095549e21daSmrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6096549e21daSmrg  memcpy (concat_name, tmp, tmp_len);
6097549e21daSmrg  concat_name[tmp_len] = '/';
6098549e21daSmrg  strcpy (concat_name + tmp_len + 1, wrapper);
6099ba6a1819Smrg
6100549e21daSmrg  if (check_executable (concat_name))
6101549e21daSmrg    return concat_name;
6102549e21daSmrg  XFREE (concat_name);
6103549e21daSmrg  return NULL;
6104549e21daSmrg}
6105ba6a1819Smrg
6106549e21daSmrgchar *
6107549e21daSmrgchase_symlinks (const char *pathspec)
6108549e21daSmrg{
6109549e21daSmrg#ifndef S_ISLNK
6110549e21daSmrg  return xstrdup (pathspec);
6111549e21daSmrg#else
6112549e21daSmrg  char buf[LT_PATHMAX];
6113549e21daSmrg  struct stat s;
6114549e21daSmrg  char *tmp_pathspec = xstrdup (pathspec);
6115549e21daSmrg  char *p;
6116549e21daSmrg  int has_symlinks = 0;
6117549e21daSmrg  while (strlen (tmp_pathspec) && !has_symlinks)
6118549e21daSmrg    {
6119549e21daSmrg      lt_debugprintf (__FILE__, __LINE__,
6120549e21daSmrg		      "checking path component for symlinks: %s\n",
6121549e21daSmrg		      tmp_pathspec);
6122549e21daSmrg      if (lstat (tmp_pathspec, &s) == 0)
6123549e21daSmrg	{
6124549e21daSmrg	  if (S_ISLNK (s.st_mode) != 0)
6125549e21daSmrg	    {
6126549e21daSmrg	      has_symlinks = 1;
6127549e21daSmrg	      break;
6128549e21daSmrg	    }
6129ba6a1819Smrg
6130549e21daSmrg	  /* search backwards for last DIR_SEPARATOR */
6131549e21daSmrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
6132549e21daSmrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6133549e21daSmrg	    p--;
6134549e21daSmrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6135549e21daSmrg	    {
6136549e21daSmrg	      /* no more DIR_SEPARATORS left */
6137549e21daSmrg	      break;
6138549e21daSmrg	    }
6139549e21daSmrg	  *p = '\0';
6140549e21daSmrg	}
6141549e21daSmrg      else
6142549e21daSmrg	{
6143549e21daSmrg	  lt_fatal (__FILE__, __LINE__,
6144549e21daSmrg		    "error accessing file \"%s\": %s",
6145549e21daSmrg		    tmp_pathspec, nonnull (strerror (errno)));
6146549e21daSmrg	}
6147549e21daSmrg    }
6148549e21daSmrg  XFREE (tmp_pathspec);
6149ba6a1819Smrg
6150549e21daSmrg  if (!has_symlinks)
6151549e21daSmrg    {
6152549e21daSmrg      return xstrdup (pathspec);
6153549e21daSmrg    }
6154ba6a1819Smrg
6155549e21daSmrg  tmp_pathspec = realpath (pathspec, buf);
6156549e21daSmrg  if (tmp_pathspec == 0)
6157549e21daSmrg    {
6158549e21daSmrg      lt_fatal (__FILE__, __LINE__,
6159549e21daSmrg		"could not follow symlinks for %s", pathspec);
6160549e21daSmrg    }
6161549e21daSmrg  return xstrdup (tmp_pathspec);
6162549e21daSmrg#endif
6163549e21daSmrg}
6164ba6a1819Smrg
6165549e21daSmrgchar *
6166549e21daSmrgstrendzap (char *str, const char *pat)
6167549e21daSmrg{
6168549e21daSmrg  size_t len, patlen;
6169ba6a1819Smrg
6170549e21daSmrg  assert (str != NULL);
6171549e21daSmrg  assert (pat != NULL);
6172ba6a1819Smrg
6173549e21daSmrg  len = strlen (str);
6174549e21daSmrg  patlen = strlen (pat);
6175ba6a1819Smrg
6176549e21daSmrg  if (patlen <= len)
6177549e21daSmrg    {
6178549e21daSmrg      str += len - patlen;
6179fe4c343aSmrg      if (STREQ (str, pat))
6180549e21daSmrg	*str = '\0';
6181549e21daSmrg    }
6182549e21daSmrg  return str;
6183549e21daSmrg}
6184ba6a1819Smrg
6185549e21daSmrgvoid
6186549e21daSmrglt_debugprintf (const char *file, int line, const char *fmt, ...)
6187549e21daSmrg{
6188549e21daSmrg  va_list args;
6189549e21daSmrg  if (lt_debug)
6190549e21daSmrg    {
6191549e21daSmrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
6192549e21daSmrg      va_start (args, fmt);
6193549e21daSmrg      (void) vfprintf (stderr, fmt, args);
6194549e21daSmrg      va_end (args);
6195549e21daSmrg    }
6196549e21daSmrg}
6197ba6a1819Smrg
6198549e21daSmrgstatic void
6199549e21daSmrglt_error_core (int exit_status, const char *file,
6200549e21daSmrg	       int line, const char *mode,
6201549e21daSmrg	       const char *message, va_list ap)
6202549e21daSmrg{
6203549e21daSmrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
6204549e21daSmrg  vfprintf (stderr, message, ap);
6205549e21daSmrg  fprintf (stderr, ".\n");
6206ba6a1819Smrg
6207549e21daSmrg  if (exit_status >= 0)
6208549e21daSmrg    exit (exit_status);
6209549e21daSmrg}
6210ba6a1819Smrg
6211549e21daSmrgvoid
6212549e21daSmrglt_fatal (const char *file, int line, const char *message, ...)
6213549e21daSmrg{
6214549e21daSmrg  va_list ap;
6215549e21daSmrg  va_start (ap, message);
6216549e21daSmrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
6217549e21daSmrg  va_end (ap);
6218549e21daSmrg}
6219ba6a1819Smrg
6220549e21daSmrgstatic const char *
6221549e21daSmrgnonnull (const char *s)
6222549e21daSmrg{
6223549e21daSmrg  return s ? s : "(null)";
6224549e21daSmrg}
6225ba6a1819Smrg
6226549e21daSmrgstatic const char *
6227549e21daSmrgnonempty (const char *s)
6228549e21daSmrg{
6229549e21daSmrg  return (s && !*s) ? "(empty)" : nonnull (s);
6230549e21daSmrg}
6231ba6a1819Smrg
6232549e21daSmrgvoid
6233549e21daSmrglt_setenv (const char *name, const char *value)
6234549e21daSmrg{
6235549e21daSmrg  lt_debugprintf (__FILE__, __LINE__,
6236549e21daSmrg		  "(lt_setenv) setting '%s' to '%s'\n",
6237549e21daSmrg                  nonnull (name), nonnull (value));
6238549e21daSmrg  {
6239549e21daSmrg#ifdef HAVE_SETENV
6240549e21daSmrg    /* always make a copy, for consistency with !HAVE_SETENV */
6241549e21daSmrg    char *str = xstrdup (value);
6242549e21daSmrg    setenv (name, str, 1);
6243549e21daSmrg#else
6244fe4c343aSmrg    size_t len = strlen (name) + 1 + strlen (value) + 1;
6245549e21daSmrg    char *str = XMALLOC (char, len);
6246549e21daSmrg    sprintf (str, "%s=%s", name, value);
6247549e21daSmrg    if (putenv (str) != EXIT_SUCCESS)
6248549e21daSmrg      {
6249549e21daSmrg        XFREE (str);
6250549e21daSmrg      }
6251549e21daSmrg#endif
6252549e21daSmrg  }
6253549e21daSmrg}
6254ba6a1819Smrg
6255549e21daSmrgchar *
6256549e21daSmrglt_extend_str (const char *orig_value, const char *add, int to_end)
6257549e21daSmrg{
6258549e21daSmrg  char *new_value;
6259549e21daSmrg  if (orig_value && *orig_value)
6260549e21daSmrg    {
6261fe4c343aSmrg      size_t orig_value_len = strlen (orig_value);
6262fe4c343aSmrg      size_t add_len = strlen (add);
6263549e21daSmrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
6264549e21daSmrg      if (to_end)
6265549e21daSmrg        {
6266549e21daSmrg          strcpy (new_value, orig_value);
6267549e21daSmrg          strcpy (new_value + orig_value_len, add);
6268549e21daSmrg        }
6269549e21daSmrg      else
6270549e21daSmrg        {
6271549e21daSmrg          strcpy (new_value, add);
6272549e21daSmrg          strcpy (new_value + add_len, orig_value);
6273549e21daSmrg        }
6274549e21daSmrg    }
6275549e21daSmrg  else
6276549e21daSmrg    {
6277549e21daSmrg      new_value = xstrdup (add);
6278549e21daSmrg    }
6279549e21daSmrg  return new_value;
6280549e21daSmrg}
6281ba6a1819Smrg
6282549e21daSmrgvoid
6283549e21daSmrglt_update_exe_path (const char *name, const char *value)
6284549e21daSmrg{
6285549e21daSmrg  lt_debugprintf (__FILE__, __LINE__,
6286549e21daSmrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
6287549e21daSmrg                  nonnull (name), nonnull (value));
6288ba6a1819Smrg
6289549e21daSmrg  if (name && *name && value && *value)
6290549e21daSmrg    {
6291549e21daSmrg      char *new_value = lt_extend_str (getenv (name), value, 0);
6292549e21daSmrg      /* some systems can't cope with a ':'-terminated path #' */
6293fe4c343aSmrg      size_t len = strlen (new_value);
6294fe4c343aSmrg      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
6295549e21daSmrg        {
6296fe4c343aSmrg          new_value[--len] = '\0';
6297549e21daSmrg        }
6298549e21daSmrg      lt_setenv (name, new_value);
6299549e21daSmrg      XFREE (new_value);
6300549e21daSmrg    }
6301549e21daSmrg}
6302ba6a1819Smrg
6303549e21daSmrgvoid
6304549e21daSmrglt_update_lib_path (const char *name, const char *value)
6305549e21daSmrg{
6306549e21daSmrg  lt_debugprintf (__FILE__, __LINE__,
6307549e21daSmrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
6308549e21daSmrg                  nonnull (name), nonnull (value));
6309ba6a1819Smrg
6310549e21daSmrg  if (name && *name && value && *value)
6311549e21daSmrg    {
6312549e21daSmrg      char *new_value = lt_extend_str (getenv (name), value, 0);
6313549e21daSmrg      lt_setenv (name, new_value);
6314549e21daSmrg      XFREE (new_value);
6315549e21daSmrg    }
6316549e21daSmrg}
6317ba6a1819Smrg
6318549e21daSmrgEOF
6319549e21daSmrg	    case $host_os in
6320549e21daSmrg	      mingw*)
6321549e21daSmrg		cat <<"EOF"
6322549e21daSmrg
6323549e21daSmrg/* Prepares an argument vector before calling spawn().
6324549e21daSmrg   Note that spawn() does not by itself call the command interpreter
6325549e21daSmrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
6326549e21daSmrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
6327549e21daSmrg         GetVersionEx(&v);
6328549e21daSmrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
6329549e21daSmrg      }) ? "cmd.exe" : "command.com").
6330549e21daSmrg   Instead it simply concatenates the arguments, separated by ' ', and calls
6331549e21daSmrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
6332549e21daSmrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
6333549e21daSmrg   special way:
6334549e21daSmrg   - Space and tab are interpreted as delimiters. They are not treated as
6335549e21daSmrg     delimiters if they are surrounded by double quotes: "...".
6336549e21daSmrg   - Unescaped double quotes are removed from the input. Their only effect is
6337549e21daSmrg     that within double quotes, space and tab are treated like normal
6338549e21daSmrg     characters.
6339549e21daSmrg   - Backslashes not followed by double quotes are not special.
6340549e21daSmrg   - But 2*n+1 backslashes followed by a double quote become
6341549e21daSmrg     n backslashes followed by a double quote (n >= 0):
6342549e21daSmrg       \" -> "
6343549e21daSmrg       \\\" -> \"
6344549e21daSmrg       \\\\\" -> \\"
6345549e21daSmrg */
6346549e21daSmrg#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"
6347549e21daSmrg#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"
6348549e21daSmrgchar **
6349549e21daSmrgprepare_spawn (char **argv)
6350549e21daSmrg{
6351549e21daSmrg  size_t argc;
6352549e21daSmrg  char **new_argv;
6353549e21daSmrg  size_t i;
6354ba6a1819Smrg
6355549e21daSmrg  /* Count number of arguments.  */
6356549e21daSmrg  for (argc = 0; argv[argc] != NULL; argc++)
6357549e21daSmrg    ;
6358ba6a1819Smrg
6359549e21daSmrg  /* Allocate new argument vector.  */
6360549e21daSmrg  new_argv = XMALLOC (char *, argc + 1);
6361ba6a1819Smrg
6362549e21daSmrg  /* Put quoted arguments into the new argument vector.  */
6363549e21daSmrg  for (i = 0; i < argc; i++)
6364549e21daSmrg    {
6365549e21daSmrg      const char *string = argv[i];
6366549e21daSmrg
6367549e21daSmrg      if (string[0] == '\0')
6368549e21daSmrg	new_argv[i] = xstrdup ("\"\"");
6369549e21daSmrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
6370549e21daSmrg	{
6371549e21daSmrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
6372549e21daSmrg	  size_t length;
6373549e21daSmrg	  unsigned int backslashes;
6374549e21daSmrg	  const char *s;
6375549e21daSmrg	  char *quoted_string;
6376549e21daSmrg	  char *p;
6377549e21daSmrg
6378549e21daSmrg	  length = 0;
6379549e21daSmrg	  backslashes = 0;
6380549e21daSmrg	  if (quote_around)
6381549e21daSmrg	    length++;
6382549e21daSmrg	  for (s = string; *s != '\0'; s++)
6383549e21daSmrg	    {
6384549e21daSmrg	      char c = *s;
6385549e21daSmrg	      if (c == '"')
6386549e21daSmrg		length += backslashes + 1;
6387549e21daSmrg	      length++;
6388549e21daSmrg	      if (c == '\\')
6389549e21daSmrg		backslashes++;
6390549e21daSmrg	      else
6391549e21daSmrg		backslashes = 0;
6392549e21daSmrg	    }
6393549e21daSmrg	  if (quote_around)
6394549e21daSmrg	    length += backslashes + 1;
6395549e21daSmrg
6396549e21daSmrg	  quoted_string = XMALLOC (char, length + 1);
6397549e21daSmrg
6398549e21daSmrg	  p = quoted_string;
6399549e21daSmrg	  backslashes = 0;
6400549e21daSmrg	  if (quote_around)
6401549e21daSmrg	    *p++ = '"';
6402549e21daSmrg	  for (s = string; *s != '\0'; s++)
6403549e21daSmrg	    {
6404549e21daSmrg	      char c = *s;
6405549e21daSmrg	      if (c == '"')
6406549e21daSmrg		{
6407549e21daSmrg		  unsigned int j;
6408549e21daSmrg		  for (j = backslashes + 1; j > 0; j--)
6409549e21daSmrg		    *p++ = '\\';
6410549e21daSmrg		}
6411549e21daSmrg	      *p++ = c;
6412549e21daSmrg	      if (c == '\\')
6413549e21daSmrg		backslashes++;
6414549e21daSmrg	      else
6415549e21daSmrg		backslashes = 0;
6416549e21daSmrg	    }
6417549e21daSmrg	  if (quote_around)
6418549e21daSmrg	    {
6419549e21daSmrg	      unsigned int j;
6420549e21daSmrg	      for (j = backslashes; j > 0; j--)
6421549e21daSmrg		*p++ = '\\';
6422549e21daSmrg	      *p++ = '"';
6423549e21daSmrg	    }
6424549e21daSmrg	  *p = '\0';
6425ba6a1819Smrg
6426549e21daSmrg	  new_argv[i] = quoted_string;
6427549e21daSmrg	}
6428549e21daSmrg      else
6429549e21daSmrg	new_argv[i] = (char *) string;
6430549e21daSmrg    }
6431549e21daSmrg  new_argv[argc] = NULL;
6432ba6a1819Smrg
6433549e21daSmrg  return new_argv;
6434549e21daSmrg}
6435549e21daSmrgEOF
6436ba6a1819Smrg		;;
6437549e21daSmrg	    esac
6438ba6a1819Smrg
6439549e21daSmrg            cat <<"EOF"
6440549e21daSmrgvoid lt_dump_script (FILE* f)
6441549e21daSmrg{
6442549e21daSmrgEOF
6443549e21daSmrg	    func_emit_wrapper yes |
64441bedbe3fSmrg	      $SED -n -e '
64451bedbe3fSmrgs/^\(.\{79\}\)\(..*\)/\1\
64461bedbe3fSmrg\2/
64471bedbe3fSmrgh
64481bedbe3fSmrgs/\([\\"]\)/\\\1/g
64491bedbe3fSmrgs/$/\\n/
64501bedbe3fSmrgs/\([^\n]*\).*/  fputs ("\1", f);/p
64511bedbe3fSmrgg
64521bedbe3fSmrgD'
6453549e21daSmrg            cat <<"EOF"
6454549e21daSmrg}
6455549e21daSmrgEOF
6456549e21daSmrg}
6457549e21daSmrg# end: func_emit_cwrapperexe_src
6458ba6a1819Smrg
6459549e21daSmrg# func_win32_import_lib_p ARG
6460549e21daSmrg# True if ARG is an import lib, as indicated by $file_magic_cmd
6461549e21daSmrgfunc_win32_import_lib_p ()
6462549e21daSmrg{
6463fe4c343aSmrg    $debug_cmd
6464fe4c343aSmrg
6465549e21daSmrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
6466549e21daSmrg    *import*) : ;;
6467549e21daSmrg    *) false ;;
6468549e21daSmrg    esac
6469549e21daSmrg}
6470ba6a1819Smrg
6471fe4c343aSmrg# func_suncc_cstd_abi
6472fe4c343aSmrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
6473fe4c343aSmrg# Several compiler flags select an ABI that is incompatible with the
6474fe4c343aSmrg# Cstd library. Avoid specifying it if any are in CXXFLAGS.
6475fe4c343aSmrgfunc_suncc_cstd_abi ()
6476fe4c343aSmrg{
6477fe4c343aSmrg    $debug_cmd
6478fe4c343aSmrg
6479fe4c343aSmrg    case " $compile_command " in
6480fe4c343aSmrg    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
6481fe4c343aSmrg      suncc_use_cstd_abi=no
6482fe4c343aSmrg      ;;
6483fe4c343aSmrg    *)
6484fe4c343aSmrg      suncc_use_cstd_abi=yes
6485fe4c343aSmrg      ;;
6486fe4c343aSmrg    esac
6487fe4c343aSmrg}
6488fe4c343aSmrg
6489549e21daSmrg# func_mode_link arg...
6490549e21daSmrgfunc_mode_link ()
6491549e21daSmrg{
6492fe4c343aSmrg    $debug_cmd
6493fe4c343aSmrg
6494549e21daSmrg    case $host in
6495549e21daSmrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
6496549e21daSmrg      # It is impossible to link a dll without this setting, and
6497549e21daSmrg      # we shouldn't force the makefile maintainer to figure out
6498fe4c343aSmrg      # what system we are compiling for in order to pass an extra
6499549e21daSmrg      # flag for every libtool invocation.
6500549e21daSmrg      # allow_undefined=no
6501ba6a1819Smrg
6502549e21daSmrg      # FIXME: Unfortunately, there are problems with the above when trying
6503fe4c343aSmrg      # to make a dll that has undefined symbols, in which case not
6504549e21daSmrg      # even a static library is built.  For now, we need to specify
6505549e21daSmrg      # -no-undefined on the libtool link line when we can be certain
6506549e21daSmrg      # that all symbols are satisfied, otherwise we get a static library.
6507549e21daSmrg      allow_undefined=yes
6508549e21daSmrg      ;;
6509549e21daSmrg    *)
6510549e21daSmrg      allow_undefined=yes
6511549e21daSmrg      ;;
6512549e21daSmrg    esac
6513549e21daSmrg    libtool_args=$nonopt
6514549e21daSmrg    base_compile="$nonopt $@"
6515549e21daSmrg    compile_command=$nonopt
6516549e21daSmrg    finalize_command=$nonopt
6517ba6a1819Smrg
6518549e21daSmrg    compile_rpath=
6519549e21daSmrg    finalize_rpath=
6520549e21daSmrg    compile_shlibpath=
6521549e21daSmrg    finalize_shlibpath=
6522549e21daSmrg    convenience=
6523549e21daSmrg    old_convenience=
6524549e21daSmrg    deplibs=
6525549e21daSmrg    old_deplibs=
6526549e21daSmrg    compiler_flags=
6527549e21daSmrg    linker_flags=
6528549e21daSmrg    dllsearchpath=
6529549e21daSmrg    lib_search_path=`pwd`
6530549e21daSmrg    inst_prefix_dir=
6531549e21daSmrg    new_inherited_linker_flags=
6532ba6a1819Smrg
6533549e21daSmrg    avoid_version=no
6534549e21daSmrg    bindir=
6535549e21daSmrg    dlfiles=
6536549e21daSmrg    dlprefiles=
6537549e21daSmrg    dlself=no
6538549e21daSmrg    export_dynamic=no
6539549e21daSmrg    export_symbols=
6540549e21daSmrg    export_symbols_regex=
6541549e21daSmrg    generated=
6542549e21daSmrg    libobjs=
6543549e21daSmrg    ltlibs=
6544549e21daSmrg    module=no
6545549e21daSmrg    no_install=no
6546549e21daSmrg    objs=
6547fe4c343aSmrg    os2dllname=
6548549e21daSmrg    non_pic_objects=
6549549e21daSmrg    precious_files_regex=
6550549e21daSmrg    prefer_static_libs=no
6551fe4c343aSmrg    preload=false
6552549e21daSmrg    prev=
6553549e21daSmrg    prevarg=
6554549e21daSmrg    release=
6555549e21daSmrg    rpath=
6556549e21daSmrg    xrpath=
6557549e21daSmrg    perm_rpath=
6558549e21daSmrg    temp_rpath=
6559549e21daSmrg    thread_safe=no
6560549e21daSmrg    vinfo=
6561549e21daSmrg    vinfo_number=no
6562549e21daSmrg    weak_libs=
6563fe4c343aSmrg    single_module=$wl-single_module
6564549e21daSmrg    func_infer_tag $base_compile
6565ba6a1819Smrg
6566549e21daSmrg    # We need to know -static, to get the right output filenames.
6567549e21daSmrg    for arg
6568549e21daSmrg    do
6569549e21daSmrg      case $arg in
6570549e21daSmrg      -shared)
6571fe4c343aSmrg	test yes != "$build_libtool_libs" \
6572fe4c343aSmrg	  && func_fatal_configuration "cannot build a shared library"
6573549e21daSmrg	build_old_libs=no
6574549e21daSmrg	break
6575549e21daSmrg	;;
6576549e21daSmrg      -all-static | -static | -static-libtool-libs)
6577549e21daSmrg	case $arg in
6578549e21daSmrg	-all-static)
6579fe4c343aSmrg	  if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
6580549e21daSmrg	    func_warning "complete static linking is impossible in this configuration"
6581549e21daSmrg	  fi
6582549e21daSmrg	  if test -n "$link_static_flag"; then
6583549e21daSmrg	    dlopen_self=$dlopen_self_static
6584549e21daSmrg	  fi
6585549e21daSmrg	  prefer_static_libs=yes
6586549e21daSmrg	  ;;
6587549e21daSmrg	-static)
6588549e21daSmrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
6589549e21daSmrg	    dlopen_self=$dlopen_self_static
6590549e21daSmrg	  fi
6591549e21daSmrg	  prefer_static_libs=built
6592549e21daSmrg	  ;;
6593549e21daSmrg	-static-libtool-libs)
6594549e21daSmrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
6595549e21daSmrg	    dlopen_self=$dlopen_self_static
6596549e21daSmrg	  fi
6597549e21daSmrg	  prefer_static_libs=yes
6598549e21daSmrg	  ;;
6599549e21daSmrg	esac
6600549e21daSmrg	build_libtool_libs=no
6601549e21daSmrg	build_old_libs=yes
6602549e21daSmrg	break
6603549e21daSmrg	;;
6604549e21daSmrg      esac
6605549e21daSmrg    done
6606ba6a1819Smrg
6607549e21daSmrg    # See if our shared archives depend on static archives.
6608549e21daSmrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
6609ba6a1819Smrg
6610549e21daSmrg    # Go through the arguments, transforming them on the way.
6611549e21daSmrg    while test "$#" -gt 0; do
6612fe4c343aSmrg      arg=$1
6613549e21daSmrg      shift
6614549e21daSmrg      func_quote_for_eval "$arg"
6615549e21daSmrg      qarg=$func_quote_for_eval_unquoted_result
6616549e21daSmrg      func_append libtool_args " $func_quote_for_eval_result"
6617ba6a1819Smrg
6618549e21daSmrg      # If the previous option needs an argument, assign it.
6619549e21daSmrg      if test -n "$prev"; then
6620549e21daSmrg	case $prev in
6621549e21daSmrg	output)
6622549e21daSmrg	  func_append compile_command " @OUTPUT@"
6623549e21daSmrg	  func_append finalize_command " @OUTPUT@"
6624549e21daSmrg	  ;;
6625549e21daSmrg	esac
6626ba6a1819Smrg
6627549e21daSmrg	case $prev in
6628549e21daSmrg	bindir)
6629fe4c343aSmrg	  bindir=$arg
6630549e21daSmrg	  prev=
6631549e21daSmrg	  continue
6632549e21daSmrg	  ;;
6633549e21daSmrg	dlfiles|dlprefiles)
6634fe4c343aSmrg	  $preload || {
6635549e21daSmrg	    # Add the symbol object into the linking commands.
6636549e21daSmrg	    func_append compile_command " @SYMFILE@"
6637549e21daSmrg	    func_append finalize_command " @SYMFILE@"
6638fe4c343aSmrg	    preload=:
6639fe4c343aSmrg	  }
6640549e21daSmrg	  case $arg in
6641549e21daSmrg	  *.la | *.lo) ;;  # We handle these cases below.
6642549e21daSmrg	  force)
6643fe4c343aSmrg	    if test no = "$dlself"; then
6644549e21daSmrg	      dlself=needless
6645549e21daSmrg	      export_dynamic=yes
6646ba6a1819Smrg	    fi
6647549e21daSmrg	    prev=
6648549e21daSmrg	    continue
6649549e21daSmrg	    ;;
6650549e21daSmrg	  self)
6651fe4c343aSmrg	    if test dlprefiles = "$prev"; then
6652549e21daSmrg	      dlself=yes
6653fe4c343aSmrg	    elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
6654549e21daSmrg	      dlself=yes
6655ba6a1819Smrg	    else
6656549e21daSmrg	      dlself=needless
6657549e21daSmrg	      export_dynamic=yes
6658ba6a1819Smrg	    fi
6659549e21daSmrg	    prev=
6660549e21daSmrg	    continue
6661549e21daSmrg	    ;;
6662549e21daSmrg	  *)
6663fe4c343aSmrg	    if test dlfiles = "$prev"; then
66641bedbe3fSmrg	      func_append dlfiles " $arg"
6665ba6a1819Smrg	    else
66661bedbe3fSmrg	      func_append dlprefiles " $arg"
6667ba6a1819Smrg	    fi
6668549e21daSmrg	    prev=
6669549e21daSmrg	    continue
6670549e21daSmrg	    ;;
6671549e21daSmrg	  esac
6672549e21daSmrg	  ;;
6673549e21daSmrg	expsyms)
6674fe4c343aSmrg	  export_symbols=$arg
6675549e21daSmrg	  test -f "$arg" \
6676fe4c343aSmrg	    || func_fatal_error "symbol file '$arg' does not exist"
6677549e21daSmrg	  prev=
6678549e21daSmrg	  continue
6679549e21daSmrg	  ;;
6680549e21daSmrg	expsyms_regex)
6681fe4c343aSmrg	  export_symbols_regex=$arg
6682549e21daSmrg	  prev=
6683549e21daSmrg	  continue
6684549e21daSmrg	  ;;
6685549e21daSmrg	framework)
6686549e21daSmrg	  case $host in
6687549e21daSmrg	    *-*-darwin*)
6688549e21daSmrg	      case "$deplibs " in
6689549e21daSmrg		*" $qarg.ltframework "*) ;;
66901bedbe3fSmrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
6691549e21daSmrg		   ;;
6692549e21daSmrg	      esac
6693549e21daSmrg	      ;;
6694549e21daSmrg	  esac
6695549e21daSmrg	  prev=
6696549e21daSmrg	  continue
6697549e21daSmrg	  ;;
6698549e21daSmrg	inst_prefix)
6699fe4c343aSmrg	  inst_prefix_dir=$arg
6700fe4c343aSmrg	  prev=
6701fe4c343aSmrg	  continue
6702fe4c343aSmrg	  ;;
6703fe4c343aSmrg	mllvm)
6704fe4c343aSmrg	  # Clang does not use LLVM to link, so we can simply discard any
6705fe4c343aSmrg	  # '-mllvm $arg' options when doing the link step.
6706549e21daSmrg	  prev=
6707549e21daSmrg	  continue
6708549e21daSmrg	  ;;
6709549e21daSmrg	objectlist)
6710549e21daSmrg	  if test -f "$arg"; then
6711549e21daSmrg	    save_arg=$arg
6712549e21daSmrg	    moreargs=
6713549e21daSmrg	    for fil in `cat "$save_arg"`
6714549e21daSmrg	    do
67151bedbe3fSmrg#	      func_append moreargs " $fil"
6716549e21daSmrg	      arg=$fil
6717549e21daSmrg	      # A libtool-controlled object.
6718ba6a1819Smrg
6719549e21daSmrg	      # Check to see that this really is a libtool object.
6720549e21daSmrg	      if func_lalib_unsafe_p "$arg"; then
6721549e21daSmrg		pic_object=
6722549e21daSmrg		non_pic_object=
6723ba6a1819Smrg
6724549e21daSmrg		# Read the .lo file
6725549e21daSmrg		func_source "$arg"
6726ba6a1819Smrg
6727549e21daSmrg		if test -z "$pic_object" ||
6728549e21daSmrg		   test -z "$non_pic_object" ||
6729fe4c343aSmrg		   test none = "$pic_object" &&
6730fe4c343aSmrg		   test none = "$non_pic_object"; then
6731fe4c343aSmrg		  func_fatal_error "cannot find name of object for '$arg'"
6732549e21daSmrg		fi
6733ba6a1819Smrg
6734549e21daSmrg		# Extract subdirectory from the argument.
6735549e21daSmrg		func_dirname "$arg" "/" ""
6736fe4c343aSmrg		xdir=$func_dirname_result
6737ba6a1819Smrg
6738fe4c343aSmrg		if test none != "$pic_object"; then
6739549e21daSmrg		  # Prepend the subdirectory the object is found in.
6740fe4c343aSmrg		  pic_object=$xdir$pic_object
6741ba6a1819Smrg
6742fe4c343aSmrg		  if test dlfiles = "$prev"; then
6743fe4c343aSmrg		    if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
67441bedbe3fSmrg		      func_append dlfiles " $pic_object"
6745549e21daSmrg		      prev=
6746549e21daSmrg		      continue
6747549e21daSmrg		    else
6748549e21daSmrg		      # If libtool objects are unsupported, then we need to preload.
6749549e21daSmrg		      prev=dlprefiles
6750549e21daSmrg		    fi
6751549e21daSmrg		  fi
6752ba6a1819Smrg
6753549e21daSmrg		  # CHECK ME:  I think I busted this.  -Ossama
6754fe4c343aSmrg		  if test dlprefiles = "$prev"; then
6755549e21daSmrg		    # Preload the old-style object.
67561bedbe3fSmrg		    func_append dlprefiles " $pic_object"
6757549e21daSmrg		    prev=
6758549e21daSmrg		  fi
6759ba6a1819Smrg
6760549e21daSmrg		  # A PIC object.
6761549e21daSmrg		  func_append libobjs " $pic_object"
6762fe4c343aSmrg		  arg=$pic_object
6763549e21daSmrg		fi
6764ba6a1819Smrg
6765549e21daSmrg		# Non-PIC object.
6766fe4c343aSmrg		if test none != "$non_pic_object"; then
6767549e21daSmrg		  # Prepend the subdirectory the object is found in.
6768fe4c343aSmrg		  non_pic_object=$xdir$non_pic_object
6769ba6a1819Smrg
6770549e21daSmrg		  # A standard non-PIC object
6771549e21daSmrg		  func_append non_pic_objects " $non_pic_object"
6772fe4c343aSmrg		  if test -z "$pic_object" || test none = "$pic_object"; then
6773fe4c343aSmrg		    arg=$non_pic_object
6774549e21daSmrg		  fi
6775549e21daSmrg		else
6776549e21daSmrg		  # If the PIC object exists, use it instead.
6777549e21daSmrg		  # $xdir was prepended to $pic_object above.
6778fe4c343aSmrg		  non_pic_object=$pic_object
6779549e21daSmrg		  func_append non_pic_objects " $non_pic_object"
6780549e21daSmrg		fi
6781549e21daSmrg	      else
6782549e21daSmrg		# Only an error if not doing a dry-run.
6783549e21daSmrg		if $opt_dry_run; then
6784549e21daSmrg		  # Extract subdirectory from the argument.
6785549e21daSmrg		  func_dirname "$arg" "/" ""
6786fe4c343aSmrg		  xdir=$func_dirname_result
6787549e21daSmrg
6788549e21daSmrg		  func_lo2o "$arg"
6789549e21daSmrg		  pic_object=$xdir$objdir/$func_lo2o_result
6790549e21daSmrg		  non_pic_object=$xdir$func_lo2o_result
6791549e21daSmrg		  func_append libobjs " $pic_object"
6792549e21daSmrg		  func_append non_pic_objects " $non_pic_object"
6793549e21daSmrg	        else
6794fe4c343aSmrg		  func_fatal_error "'$arg' is not a valid libtool object"
6795549e21daSmrg		fi
6796549e21daSmrg	      fi
6797549e21daSmrg	    done
6798549e21daSmrg	  else
6799fe4c343aSmrg	    func_fatal_error "link input file '$arg' does not exist"
6800ba6a1819Smrg	  fi
6801549e21daSmrg	  arg=$save_arg
6802549e21daSmrg	  prev=
6803549e21daSmrg	  continue
6804549e21daSmrg	  ;;
6805fe4c343aSmrg	os2dllname)
6806fe4c343aSmrg	  os2dllname=$arg
6807fe4c343aSmrg	  prev=
6808fe4c343aSmrg	  continue
6809fe4c343aSmrg	  ;;
6810549e21daSmrg	precious_regex)
6811fe4c343aSmrg	  precious_files_regex=$arg
6812549e21daSmrg	  prev=
6813549e21daSmrg	  continue
6814549e21daSmrg	  ;;
6815549e21daSmrg	release)
6816fe4c343aSmrg	  release=-$arg
6817549e21daSmrg	  prev=
6818549e21daSmrg	  continue
6819549e21daSmrg	  ;;
6820549e21daSmrg	rpath | xrpath)
6821549e21daSmrg	  # We need an absolute path.
6822549e21daSmrg	  case $arg in
6823549e21daSmrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
6824549e21daSmrg	  *)
6825549e21daSmrg	    func_fatal_error "only absolute run-paths are allowed"
6826549e21daSmrg	    ;;
6827ba6a1819Smrg	  esac
6828fe4c343aSmrg	  if test rpath = "$prev"; then
6829549e21daSmrg	    case "$rpath " in
6830549e21daSmrg	    *" $arg "*) ;;
68311bedbe3fSmrg	    *) func_append rpath " $arg" ;;
6832549e21daSmrg	    esac
6833549e21daSmrg	  else
6834549e21daSmrg	    case "$xrpath " in
6835549e21daSmrg	    *" $arg "*) ;;
68361bedbe3fSmrg	    *) func_append xrpath " $arg" ;;
6837549e21daSmrg	    esac
6838549e21daSmrg	  fi
6839549e21daSmrg	  prev=
6840549e21daSmrg	  continue
6841549e21daSmrg	  ;;
6842549e21daSmrg	shrext)
6843fe4c343aSmrg	  shrext_cmds=$arg
6844549e21daSmrg	  prev=
6845549e21daSmrg	  continue
6846549e21daSmrg	  ;;
6847549e21daSmrg	weak)
68481bedbe3fSmrg	  func_append weak_libs " $arg"
6849549e21daSmrg	  prev=
6850549e21daSmrg	  continue
6851549e21daSmrg	  ;;
6852549e21daSmrg	xcclinker)
68531bedbe3fSmrg	  func_append linker_flags " $qarg"
68541bedbe3fSmrg	  func_append compiler_flags " $qarg"
6855549e21daSmrg	  prev=
6856549e21daSmrg	  func_append compile_command " $qarg"
6857549e21daSmrg	  func_append finalize_command " $qarg"
6858549e21daSmrg	  continue
6859549e21daSmrg	  ;;
6860549e21daSmrg	xcompiler)
68611bedbe3fSmrg	  func_append compiler_flags " $qarg"
6862549e21daSmrg	  prev=
6863549e21daSmrg	  func_append compile_command " $qarg"
6864549e21daSmrg	  func_append finalize_command " $qarg"
6865549e21daSmrg	  continue
6866549e21daSmrg	  ;;
6867549e21daSmrg	xlinker)
68681bedbe3fSmrg	  func_append linker_flags " $qarg"
68691bedbe3fSmrg	  func_append compiler_flags " $wl$qarg"
6870549e21daSmrg	  prev=
6871549e21daSmrg	  func_append compile_command " $wl$qarg"
6872549e21daSmrg	  func_append finalize_command " $wl$qarg"
6873549e21daSmrg	  continue
6874ba6a1819Smrg	  ;;
6875ba6a1819Smrg	*)
6876549e21daSmrg	  eval "$prev=\"\$arg\""
6877549e21daSmrg	  prev=
6878549e21daSmrg	  continue
6879ba6a1819Smrg	  ;;
6880ba6a1819Smrg	esac
6881549e21daSmrg      fi # test -n "$prev"
6882ba6a1819Smrg
6883fe4c343aSmrg      prevarg=$arg
6884ba6a1819Smrg
6885549e21daSmrg      case $arg in
6886549e21daSmrg      -all-static)
6887549e21daSmrg	if test -n "$link_static_flag"; then
6888549e21daSmrg	  # See comment for -static flag below, for more details.
6889549e21daSmrg	  func_append compile_command " $link_static_flag"
6890549e21daSmrg	  func_append finalize_command " $link_static_flag"
6891ba6a1819Smrg	fi
6892549e21daSmrg	continue
6893549e21daSmrg	;;
6894ba6a1819Smrg
6895549e21daSmrg      -allow-undefined)
6896549e21daSmrg	# FIXME: remove this flag sometime in the future.
6897fe4c343aSmrg	func_fatal_error "'-allow-undefined' must not be used because it is the default"
6898549e21daSmrg	;;
6899ba6a1819Smrg
6900549e21daSmrg      -avoid-version)
6901549e21daSmrg	avoid_version=yes
6902549e21daSmrg	continue
6903549e21daSmrg	;;
6904ba6a1819Smrg
6905549e21daSmrg      -bindir)
6906549e21daSmrg	prev=bindir
6907549e21daSmrg	continue
6908549e21daSmrg	;;
6909ba6a1819Smrg
6910549e21daSmrg      -dlopen)
6911549e21daSmrg	prev=dlfiles
6912549e21daSmrg	continue
6913549e21daSmrg	;;
6914ba6a1819Smrg
6915549e21daSmrg      -dlpreopen)
6916549e21daSmrg	prev=dlprefiles
6917549e21daSmrg	continue
6918549e21daSmrg	;;
6919ba6a1819Smrg
6920549e21daSmrg      -export-dynamic)
6921549e21daSmrg	export_dynamic=yes
6922549e21daSmrg	continue
6923549e21daSmrg	;;
6924ba6a1819Smrg
6925549e21daSmrg      -export-symbols | -export-symbols-regex)
6926549e21daSmrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
6927549e21daSmrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
6928549e21daSmrg	fi
6929fe4c343aSmrg	if test X-export-symbols = "X$arg"; then
6930549e21daSmrg	  prev=expsyms
6931ba6a1819Smrg	else
6932549e21daSmrg	  prev=expsyms_regex
6933ba6a1819Smrg	fi
6934549e21daSmrg	continue
6935549e21daSmrg	;;
6936ba6a1819Smrg
6937549e21daSmrg      -framework)
6938549e21daSmrg	prev=framework
6939549e21daSmrg	continue
6940549e21daSmrg	;;
6941ba6a1819Smrg
6942549e21daSmrg      -inst-prefix-dir)
6943549e21daSmrg	prev=inst_prefix
6944549e21daSmrg	continue
6945549e21daSmrg	;;
6946ba6a1819Smrg
6947549e21daSmrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
6948549e21daSmrg      # so, if we see these flags be careful not to treat them like -L
6949549e21daSmrg      -L[A-Z][A-Z]*:*)
6950549e21daSmrg	case $with_gcc/$host in
6951549e21daSmrg	no/*-*-irix* | /*-*-irix*)
6952549e21daSmrg	  func_append compile_command " $arg"
6953549e21daSmrg	  func_append finalize_command " $arg"
6954549e21daSmrg	  ;;
6955549e21daSmrg	esac
6956549e21daSmrg	continue
6957549e21daSmrg	;;
6958ba6a1819Smrg
6959549e21daSmrg      -L*)
69601bedbe3fSmrg	func_stripname "-L" '' "$arg"
69611bedbe3fSmrg	if test -z "$func_stripname_result"; then
6962549e21daSmrg	  if test "$#" -gt 0; then
6963fe4c343aSmrg	    func_fatal_error "require no space between '-L' and '$1'"
6964ba6a1819Smrg	  else
6965fe4c343aSmrg	    func_fatal_error "need path for '-L' option"
6966ba6a1819Smrg	  fi
6967549e21daSmrg	fi
69681bedbe3fSmrg	func_resolve_sysroot "$func_stripname_result"
69691bedbe3fSmrg	dir=$func_resolve_sysroot_result
6970549e21daSmrg	# We need an absolute path.
6971549e21daSmrg	case $dir in
6972549e21daSmrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
6973549e21daSmrg	*)
6974549e21daSmrg	  absdir=`cd "$dir" && pwd`
6975549e21daSmrg	  test -z "$absdir" && \
6976fe4c343aSmrg	    func_fatal_error "cannot determine absolute directory name of '$dir'"
6977fe4c343aSmrg	  dir=$absdir
6978549e21daSmrg	  ;;
6979ba6a1819Smrg	esac
6980549e21daSmrg	case "$deplibs " in
69811bedbe3fSmrg	*" -L$dir "* | *" $arg "*)
69821bedbe3fSmrg	  # Will only happen for absolute or sysroot arguments
69831bedbe3fSmrg	  ;;
6984549e21daSmrg	*)
69851bedbe3fSmrg	  # Preserve sysroot, but never include relative directories
69861bedbe3fSmrg	  case $dir in
69871bedbe3fSmrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
69881bedbe3fSmrg	    *) func_append deplibs " -L$dir" ;;
69891bedbe3fSmrg	  esac
69901bedbe3fSmrg	  func_append lib_search_path " $dir"
6991549e21daSmrg	  ;;
6992ba6a1819Smrg	esac
6993ba6a1819Smrg	case $host in
6994549e21daSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
6995549e21daSmrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
6996549e21daSmrg	  case :$dllsearchpath: in
6997549e21daSmrg	  *":$dir:"*) ;;
6998549e21daSmrg	  ::) dllsearchpath=$dir;;
69991bedbe3fSmrg	  *) func_append dllsearchpath ":$dir";;
7000549e21daSmrg	  esac
7001549e21daSmrg	  case :$dllsearchpath: in
7002549e21daSmrg	  *":$testbindir:"*) ;;
7003549e21daSmrg	  ::) dllsearchpath=$testbindir;;
70041bedbe3fSmrg	  *) func_append dllsearchpath ":$testbindir";;
7005549e21daSmrg	  esac
7006549e21daSmrg	  ;;
7007ba6a1819Smrg	esac
7008549e21daSmrg	continue
7009549e21daSmrg	;;
7010ba6a1819Smrg
7011549e21daSmrg      -l*)
7012fe4c343aSmrg	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
7013549e21daSmrg	  case $host in
7014549e21daSmrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
7015549e21daSmrg	    # These systems don't actually have a C or math library (as such)
7016549e21daSmrg	    continue
7017549e21daSmrg	    ;;
7018549e21daSmrg	  *-*-os2*)
7019549e21daSmrg	    # These systems don't actually have a C library (as such)
7020fe4c343aSmrg	    test X-lc = "X$arg" && continue
7021549e21daSmrg	    ;;
7022fe4c343aSmrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
7023549e21daSmrg	    # Do not include libc due to us having libc/libc_r.
7024fe4c343aSmrg	    test X-lc = "X$arg" && continue
7025549e21daSmrg	    ;;
7026549e21daSmrg	  *-*-rhapsody* | *-*-darwin1.[012])
7027549e21daSmrg	    # Rhapsody C and math libraries are in the System framework
70281bedbe3fSmrg	    func_append deplibs " System.ltframework"
7029549e21daSmrg	    continue
7030549e21daSmrg	    ;;
7031549e21daSmrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7032549e21daSmrg	    # Causes problems with __ctype
7033fe4c343aSmrg	    test X-lc = "X$arg" && continue
7034549e21daSmrg	    ;;
7035549e21daSmrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7036549e21daSmrg	    # Compiler inserts libc in the correct place for threads to work
7037fe4c343aSmrg	    test X-lc = "X$arg" && continue
7038549e21daSmrg	    ;;
7039549e21daSmrg	  esac
7040fe4c343aSmrg	elif test X-lc_r = "X$arg"; then
7041549e21daSmrg	 case $host in
7042fe4c343aSmrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
7043549e21daSmrg	   # Do not include libc_r directly, use -pthread flag.
7044549e21daSmrg	   continue
7045549e21daSmrg	   ;;
7046549e21daSmrg	 esac
7047549e21daSmrg	fi
70481bedbe3fSmrg	func_append deplibs " $arg"
7049549e21daSmrg	continue
7050549e21daSmrg	;;
7051ba6a1819Smrg
7052fe4c343aSmrg      -mllvm)
7053fe4c343aSmrg	prev=mllvm
7054fe4c343aSmrg	continue
7055fe4c343aSmrg	;;
7056fe4c343aSmrg
7057549e21daSmrg      -module)
7058549e21daSmrg	module=yes
7059549e21daSmrg	continue
7060549e21daSmrg	;;
7061ba6a1819Smrg
7062549e21daSmrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
7063549e21daSmrg      # classes, name mangling, and exception handling.
7064549e21daSmrg      # Darwin uses the -arch flag to determine output architecture.
70651bedbe3fSmrg      -model|-arch|-isysroot|--sysroot)
70661bedbe3fSmrg	func_append compiler_flags " $arg"
7067549e21daSmrg	func_append compile_command " $arg"
7068549e21daSmrg	func_append finalize_command " $arg"
7069549e21daSmrg	prev=xcompiler
7070549e21daSmrg	continue
7071549e21daSmrg	;;
7072ba6a1819Smrg
70731bedbe3fSmrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
70741bedbe3fSmrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
70751bedbe3fSmrg	func_append compiler_flags " $arg"
7076549e21daSmrg	func_append compile_command " $arg"
7077549e21daSmrg	func_append finalize_command " $arg"
7078549e21daSmrg	case "$new_inherited_linker_flags " in
7079549e21daSmrg	    *" $arg "*) ;;
70801bedbe3fSmrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
7081549e21daSmrg	esac
7082549e21daSmrg	continue
7083549e21daSmrg	;;
7084ba6a1819Smrg
7085549e21daSmrg      -multi_module)
7086fe4c343aSmrg	single_module=$wl-multi_module
7087549e21daSmrg	continue
7088549e21daSmrg	;;
7089ba6a1819Smrg
7090549e21daSmrg      -no-fast-install)
7091549e21daSmrg	fast_install=no
7092549e21daSmrg	continue
7093549e21daSmrg	;;
7094ba6a1819Smrg
7095549e21daSmrg      -no-install)
7096549e21daSmrg	case $host in
7097549e21daSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
7098549e21daSmrg	  # The PATH hackery in wrapper scripts is required on Windows
7099549e21daSmrg	  # and Darwin in order for the loader to find any dlls it needs.
7100fe4c343aSmrg	  func_warning "'-no-install' is ignored for $host"
7101fe4c343aSmrg	  func_warning "assuming '-no-fast-install' instead"
7102549e21daSmrg	  fast_install=no
7103549e21daSmrg	  ;;
7104549e21daSmrg	*) no_install=yes ;;
7105549e21daSmrg	esac
7106549e21daSmrg	continue
7107549e21daSmrg	;;
7108ba6a1819Smrg
7109549e21daSmrg      -no-undefined)
7110549e21daSmrg	allow_undefined=no
7111549e21daSmrg	continue
7112549e21daSmrg	;;
7113ba6a1819Smrg
7114549e21daSmrg      -objectlist)
7115549e21daSmrg	prev=objectlist
7116549e21daSmrg	continue
7117549e21daSmrg	;;
7118ba6a1819Smrg
7119fe4c343aSmrg      -os2dllname)
7120fe4c343aSmrg	prev=os2dllname
7121fe4c343aSmrg	continue
7122fe4c343aSmrg	;;
7123fe4c343aSmrg
7124549e21daSmrg      -o) prev=output ;;
7125ba6a1819Smrg
7126549e21daSmrg      -precious-files-regex)
7127549e21daSmrg	prev=precious_regex
7128549e21daSmrg	continue
7129549e21daSmrg	;;
7130ba6a1819Smrg
7131549e21daSmrg      -release)
7132549e21daSmrg	prev=release
7133549e21daSmrg	continue
7134549e21daSmrg	;;
7135ba6a1819Smrg
7136549e21daSmrg      -rpath)
7137549e21daSmrg	prev=rpath
7138549e21daSmrg	continue
7139549e21daSmrg	;;
7140ba6a1819Smrg
7141549e21daSmrg      -R)
7142549e21daSmrg	prev=xrpath
7143549e21daSmrg	continue
7144549e21daSmrg	;;
7145ba6a1819Smrg
7146549e21daSmrg      -R*)
7147549e21daSmrg	func_stripname '-R' '' "$arg"
7148549e21daSmrg	dir=$func_stripname_result
7149549e21daSmrg	# We need an absolute path.
7150549e21daSmrg	case $dir in
7151549e21daSmrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
71521bedbe3fSmrg	=*)
71531bedbe3fSmrg	  func_stripname '=' '' "$dir"
71541bedbe3fSmrg	  dir=$lt_sysroot$func_stripname_result
71551bedbe3fSmrg	  ;;
7156549e21daSmrg	*)
7157549e21daSmrg	  func_fatal_error "only absolute run-paths are allowed"
7158549e21daSmrg	  ;;
7159549e21daSmrg	esac
7160549e21daSmrg	case "$xrpath " in
7161549e21daSmrg	*" $dir "*) ;;
71621bedbe3fSmrg	*) func_append xrpath " $dir" ;;
7163549e21daSmrg	esac
7164549e21daSmrg	continue
7165549e21daSmrg	;;
7166ba6a1819Smrg
7167549e21daSmrg      -shared)
7168549e21daSmrg	# The effects of -shared are defined in a previous loop.
7169549e21daSmrg	continue
7170549e21daSmrg	;;
7171ba6a1819Smrg
7172549e21daSmrg      -shrext)
7173549e21daSmrg	prev=shrext
7174549e21daSmrg	continue
7175549e21daSmrg	;;
7176ba6a1819Smrg
7177549e21daSmrg      -static | -static-libtool-libs)
7178549e21daSmrg	# The effects of -static are defined in a previous loop.
7179549e21daSmrg	# We used to do the same as -all-static on platforms that
7180549e21daSmrg	# didn't have a PIC flag, but the assumption that the effects
7181549e21daSmrg	# would be equivalent was wrong.  It would break on at least
7182549e21daSmrg	# Digital Unix and AIX.
7183549e21daSmrg	continue
7184549e21daSmrg	;;
7185ba6a1819Smrg
7186549e21daSmrg      -thread-safe)
7187549e21daSmrg	thread_safe=yes
7188549e21daSmrg	continue
7189549e21daSmrg	;;
7190ba6a1819Smrg
7191549e21daSmrg      -version-info)
7192549e21daSmrg	prev=vinfo
7193549e21daSmrg	continue
7194549e21daSmrg	;;
7195ba6a1819Smrg
7196549e21daSmrg      -version-number)
7197549e21daSmrg	prev=vinfo
7198549e21daSmrg	vinfo_number=yes
7199549e21daSmrg	continue
7200549e21daSmrg	;;
7201ba6a1819Smrg
7202549e21daSmrg      -weak)
7203549e21daSmrg        prev=weak
7204549e21daSmrg	continue
7205549e21daSmrg	;;
7206ba6a1819Smrg
7207549e21daSmrg      -Wc,*)
7208549e21daSmrg	func_stripname '-Wc,' '' "$arg"
7209549e21daSmrg	args=$func_stripname_result
7210549e21daSmrg	arg=
7211fe4c343aSmrg	save_ifs=$IFS; IFS=,
7212549e21daSmrg	for flag in $args; do
7213fe4c343aSmrg	  IFS=$save_ifs
7214549e21daSmrg          func_quote_for_eval "$flag"
72151bedbe3fSmrg	  func_append arg " $func_quote_for_eval_result"
72161bedbe3fSmrg	  func_append compiler_flags " $func_quote_for_eval_result"
7217549e21daSmrg	done
7218fe4c343aSmrg	IFS=$save_ifs
7219549e21daSmrg	func_stripname ' ' '' "$arg"
7220549e21daSmrg	arg=$func_stripname_result
7221549e21daSmrg	;;
7222ba6a1819Smrg
7223549e21daSmrg      -Wl,*)
7224549e21daSmrg	func_stripname '-Wl,' '' "$arg"
7225549e21daSmrg	args=$func_stripname_result
7226549e21daSmrg	arg=
7227fe4c343aSmrg	save_ifs=$IFS; IFS=,
7228549e21daSmrg	for flag in $args; do
7229fe4c343aSmrg	  IFS=$save_ifs
7230549e21daSmrg          func_quote_for_eval "$flag"
72311bedbe3fSmrg	  func_append arg " $wl$func_quote_for_eval_result"
72321bedbe3fSmrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
72331bedbe3fSmrg	  func_append linker_flags " $func_quote_for_eval_result"
7234549e21daSmrg	done
7235fe4c343aSmrg	IFS=$save_ifs
7236549e21daSmrg	func_stripname ' ' '' "$arg"
7237549e21daSmrg	arg=$func_stripname_result
7238549e21daSmrg	;;
7239ba6a1819Smrg
7240549e21daSmrg      -Xcompiler)
7241549e21daSmrg	prev=xcompiler
7242549e21daSmrg	continue
7243549e21daSmrg	;;
7244ba6a1819Smrg
7245549e21daSmrg      -Xlinker)
7246549e21daSmrg	prev=xlinker
7247549e21daSmrg	continue
7248549e21daSmrg	;;
7249ba6a1819Smrg
7250549e21daSmrg      -XCClinker)
7251549e21daSmrg	prev=xcclinker
7252549e21daSmrg	continue
7253549e21daSmrg	;;
7254ba6a1819Smrg
7255549e21daSmrg      # -msg_* for osf cc
7256549e21daSmrg      -msg_*)
7257549e21daSmrg	func_quote_for_eval "$arg"
7258fe4c343aSmrg	arg=$func_quote_for_eval_result
7259549e21daSmrg	;;
7260ba6a1819Smrg
7261549e21daSmrg      # Flags to be passed through unchanged, with rationale:
7262549e21daSmrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
7263549e21daSmrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
7264549e21daSmrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
7265549e21daSmrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
7266549e21daSmrg      # -q*                  compiler args for the IBM compiler
7267549e21daSmrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
7268549e21daSmrg      # -F/path              path to uninstalled frameworks, gcc on darwin
7269549e21daSmrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
7270fe4c343aSmrg      # -fstack-protector*   stack protector flags for GCC
7271549e21daSmrg      # @file                GCC response files
7272549e21daSmrg      # -tp=*                Portland pgcc target processor selection
72731bedbe3fSmrg      # --sysroot=*          for sysroot support
7274fe4c343aSmrg      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
7275fe4c343aSmrg      # -stdlib=*            select c++ std lib with clang
7276549e21daSmrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
72771bedbe3fSmrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
7278fe4c343aSmrg      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
7279549e21daSmrg        func_quote_for_eval "$arg"
7280fe4c343aSmrg	arg=$func_quote_for_eval_result
7281549e21daSmrg        func_append compile_command " $arg"
7282549e21daSmrg        func_append finalize_command " $arg"
72831bedbe3fSmrg        func_append compiler_flags " $arg"
7284549e21daSmrg        continue
7285549e21daSmrg        ;;
7286ba6a1819Smrg
7287fe4c343aSmrg      -Z*)
7288fe4c343aSmrg        if test os2 = "`expr $host : '.*\(os2\)'`"; then
7289fe4c343aSmrg          # OS/2 uses -Zxxx to specify OS/2-specific options
7290fe4c343aSmrg	  compiler_flags="$compiler_flags $arg"
7291fe4c343aSmrg	  func_append compile_command " $arg"
7292fe4c343aSmrg	  func_append finalize_command " $arg"
7293fe4c343aSmrg	  case $arg in
7294fe4c343aSmrg	  -Zlinker | -Zstack)
7295fe4c343aSmrg	    prev=xcompiler
7296fe4c343aSmrg	    ;;
7297fe4c343aSmrg	  esac
7298fe4c343aSmrg	  continue
7299fe4c343aSmrg        else
7300fe4c343aSmrg	  # Otherwise treat like 'Some other compiler flag' below
7301fe4c343aSmrg	  func_quote_for_eval "$arg"
7302fe4c343aSmrg	  arg=$func_quote_for_eval_result
7303fe4c343aSmrg        fi
7304fe4c343aSmrg	;;
7305fe4c343aSmrg
7306549e21daSmrg      # Some other compiler flag.
7307549e21daSmrg      -* | +*)
7308549e21daSmrg        func_quote_for_eval "$arg"
7309fe4c343aSmrg	arg=$func_quote_for_eval_result
7310549e21daSmrg	;;
7311ba6a1819Smrg
7312549e21daSmrg      *.$objext)
7313549e21daSmrg	# A standard object.
73141bedbe3fSmrg	func_append objs " $arg"
7315549e21daSmrg	;;
7316ba6a1819Smrg
7317549e21daSmrg      *.lo)
7318549e21daSmrg	# A libtool-controlled object.
7319ba6a1819Smrg
7320549e21daSmrg	# Check to see that this really is a libtool object.
7321549e21daSmrg	if func_lalib_unsafe_p "$arg"; then
7322549e21daSmrg	  pic_object=
7323549e21daSmrg	  non_pic_object=
7324ba6a1819Smrg
7325549e21daSmrg	  # Read the .lo file
7326549e21daSmrg	  func_source "$arg"
7327ba6a1819Smrg
7328549e21daSmrg	  if test -z "$pic_object" ||
7329549e21daSmrg	     test -z "$non_pic_object" ||
7330fe4c343aSmrg	     test none = "$pic_object" &&
7331fe4c343aSmrg	     test none = "$non_pic_object"; then
7332fe4c343aSmrg	    func_fatal_error "cannot find name of object for '$arg'"
7333549e21daSmrg	  fi
7334ba6a1819Smrg
7335549e21daSmrg	  # Extract subdirectory from the argument.
7336549e21daSmrg	  func_dirname "$arg" "/" ""
7337fe4c343aSmrg	  xdir=$func_dirname_result
7338ba6a1819Smrg
7339fe4c343aSmrg	  test none = "$pic_object" || {
7340549e21daSmrg	    # Prepend the subdirectory the object is found in.
7341fe4c343aSmrg	    pic_object=$xdir$pic_object
7342ba6a1819Smrg
7343fe4c343aSmrg	    if test dlfiles = "$prev"; then
7344fe4c343aSmrg	      if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
73451bedbe3fSmrg		func_append dlfiles " $pic_object"
7346549e21daSmrg		prev=
7347549e21daSmrg		continue
7348549e21daSmrg	      else
7349549e21daSmrg		# If libtool objects are unsupported, then we need to preload.
7350549e21daSmrg		prev=dlprefiles
7351549e21daSmrg	      fi
7352549e21daSmrg	    fi
7353ba6a1819Smrg
7354549e21daSmrg	    # CHECK ME:  I think I busted this.  -Ossama
7355fe4c343aSmrg	    if test dlprefiles = "$prev"; then
7356549e21daSmrg	      # Preload the old-style object.
73571bedbe3fSmrg	      func_append dlprefiles " $pic_object"
7358549e21daSmrg	      prev=
7359549e21daSmrg	    fi
7360ba6a1819Smrg
7361549e21daSmrg	    # A PIC object.
7362549e21daSmrg	    func_append libobjs " $pic_object"
7363fe4c343aSmrg	    arg=$pic_object
7364fe4c343aSmrg	  }
7365ba6a1819Smrg
7366549e21daSmrg	  # Non-PIC object.
7367fe4c343aSmrg	  if test none != "$non_pic_object"; then
7368549e21daSmrg	    # Prepend the subdirectory the object is found in.
7369fe4c343aSmrg	    non_pic_object=$xdir$non_pic_object
7370ba6a1819Smrg
7371549e21daSmrg	    # A standard non-PIC object
7372549e21daSmrg	    func_append non_pic_objects " $non_pic_object"
7373fe4c343aSmrg	    if test -z "$pic_object" || test none = "$pic_object"; then
7374fe4c343aSmrg	      arg=$non_pic_object
7375549e21daSmrg	    fi
7376549e21daSmrg	  else
7377549e21daSmrg	    # If the PIC object exists, use it instead.
7378549e21daSmrg	    # $xdir was prepended to $pic_object above.
7379fe4c343aSmrg	    non_pic_object=$pic_object
7380549e21daSmrg	    func_append non_pic_objects " $non_pic_object"
7381549e21daSmrg	  fi
7382549e21daSmrg	else
7383549e21daSmrg	  # Only an error if not doing a dry-run.
7384549e21daSmrg	  if $opt_dry_run; then
7385549e21daSmrg	    # Extract subdirectory from the argument.
7386549e21daSmrg	    func_dirname "$arg" "/" ""
7387fe4c343aSmrg	    xdir=$func_dirname_result
7388549e21daSmrg
7389549e21daSmrg	    func_lo2o "$arg"
7390549e21daSmrg	    pic_object=$xdir$objdir/$func_lo2o_result
7391549e21daSmrg	    non_pic_object=$xdir$func_lo2o_result
7392549e21daSmrg	    func_append libobjs " $pic_object"
7393549e21daSmrg	    func_append non_pic_objects " $non_pic_object"
7394549e21daSmrg	  else
7395fe4c343aSmrg	    func_fatal_error "'$arg' is not a valid libtool object"
7396549e21daSmrg	  fi
7397549e21daSmrg	fi
7398549e21daSmrg	;;
7399ba6a1819Smrg
7400549e21daSmrg      *.$libext)
7401549e21daSmrg	# An archive.
74021bedbe3fSmrg	func_append deplibs " $arg"
74031bedbe3fSmrg	func_append old_deplibs " $arg"
7404549e21daSmrg	continue
7405549e21daSmrg	;;
7406ba6a1819Smrg
7407549e21daSmrg      *.la)
7408549e21daSmrg	# A libtool-controlled library.
7409ba6a1819Smrg
74101bedbe3fSmrg	func_resolve_sysroot "$arg"
7411fe4c343aSmrg	if test dlfiles = "$prev"; then
7412549e21daSmrg	  # This library was specified with -dlopen.
74131bedbe3fSmrg	  func_append dlfiles " $func_resolve_sysroot_result"
7414549e21daSmrg	  prev=
7415fe4c343aSmrg	elif test dlprefiles = "$prev"; then
7416549e21daSmrg	  # The library was specified with -dlpreopen.
74171bedbe3fSmrg	  func_append dlprefiles " $func_resolve_sysroot_result"
7418549e21daSmrg	  prev=
7419549e21daSmrg	else
74201bedbe3fSmrg	  func_append deplibs " $func_resolve_sysroot_result"
7421549e21daSmrg	fi
7422549e21daSmrg	continue
7423549e21daSmrg	;;
7424ba6a1819Smrg
7425549e21daSmrg      # Some other compiler argument.
7426549e21daSmrg      *)
7427549e21daSmrg	# Unknown arguments in both finalize_command and compile_command need
7428549e21daSmrg	# to be aesthetically quoted because they are evaled later.
7429549e21daSmrg	func_quote_for_eval "$arg"
7430fe4c343aSmrg	arg=$func_quote_for_eval_result
7431549e21daSmrg	;;
7432549e21daSmrg      esac # arg
7433ba6a1819Smrg
7434549e21daSmrg      # Now actually substitute the argument into the commands.
7435549e21daSmrg      if test -n "$arg"; then
7436549e21daSmrg	func_append compile_command " $arg"
7437549e21daSmrg	func_append finalize_command " $arg"
7438549e21daSmrg      fi
7439549e21daSmrg    done # argument parsing loop
7440ba6a1819Smrg
7441549e21daSmrg    test -n "$prev" && \
7442fe4c343aSmrg      func_fatal_help "the '$prevarg' option requires an argument"
7443ba6a1819Smrg
7444fe4c343aSmrg    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
7445549e21daSmrg      eval arg=\"$export_dynamic_flag_spec\"
7446549e21daSmrg      func_append compile_command " $arg"
7447549e21daSmrg      func_append finalize_command " $arg"
7448549e21daSmrg    fi
7449ba6a1819Smrg
7450549e21daSmrg    oldlibs=
7451549e21daSmrg    # calculate the name of the file, without its directory
7452549e21daSmrg    func_basename "$output"
7453fe4c343aSmrg    outputname=$func_basename_result
7454fe4c343aSmrg    libobjs_save=$libobjs
7455549e21daSmrg
7456549e21daSmrg    if test -n "$shlibpath_var"; then
7457549e21daSmrg      # get the directories listed in $shlibpath_var
7458fe4c343aSmrg      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
7459ba6a1819Smrg    else
7460549e21daSmrg      shlib_search_path=
7461ba6a1819Smrg    fi
7462549e21daSmrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
7463549e21daSmrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
7464ba6a1819Smrg
7465fe4c343aSmrg    # Definition is injected by LT_CONFIG during libtool generation.
7466fe4c343aSmrg    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
7467fe4c343aSmrg
7468549e21daSmrg    func_dirname "$output" "/" ""
7469fe4c343aSmrg    output_objdir=$func_dirname_result$objdir
74701bedbe3fSmrg    func_to_tool_file "$output_objdir/"
74711bedbe3fSmrg    tool_output_objdir=$func_to_tool_file_result
7472549e21daSmrg    # Create the object directory.
7473549e21daSmrg    func_mkdir_p "$output_objdir"
7474549e21daSmrg
7475549e21daSmrg    # Determine the type of output
7476549e21daSmrg    case $output in
7477549e21daSmrg    "")
7478549e21daSmrg      func_fatal_help "you must specify an output file"
7479549e21daSmrg      ;;
7480549e21daSmrg    *.$libext) linkmode=oldlib ;;
7481549e21daSmrg    *.lo | *.$objext) linkmode=obj ;;
7482549e21daSmrg    *.la) linkmode=lib ;;
7483549e21daSmrg    *) linkmode=prog ;; # Anything else should be a program.
7484549e21daSmrg    esac
7485549e21daSmrg
7486549e21daSmrg    specialdeplibs=
7487549e21daSmrg
7488549e21daSmrg    libs=
7489549e21daSmrg    # Find all interdependent deplibs by searching for libraries
7490549e21daSmrg    # that are linked more than once (e.g. -la -lb -la)
7491549e21daSmrg    for deplib in $deplibs; do
7492fe4c343aSmrg      if $opt_preserve_dup_deps; then
7493549e21daSmrg	case "$libs " in
74941bedbe3fSmrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
7495549e21daSmrg	esac
7496549e21daSmrg      fi
74971bedbe3fSmrg      func_append libs " $deplib"
7498549e21daSmrg    done
7499549e21daSmrg
7500fe4c343aSmrg    if test lib = "$linkmode"; then
7501549e21daSmrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
7502549e21daSmrg
7503549e21daSmrg      # Compute libraries that are listed more than once in $predeps
7504549e21daSmrg      # $postdeps and mark them as special (i.e., whose duplicates are
7505549e21daSmrg      # not to be eliminated).
7506549e21daSmrg      pre_post_deps=
7507549e21daSmrg      if $opt_duplicate_compiler_generated_deps; then
7508549e21daSmrg	for pre_post_dep in $predeps $postdeps; do
7509549e21daSmrg	  case "$pre_post_deps " in
75101bedbe3fSmrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
7511549e21daSmrg	  esac
75121bedbe3fSmrg	  func_append pre_post_deps " $pre_post_dep"
7513549e21daSmrg	done
7514549e21daSmrg      fi
7515549e21daSmrg      pre_post_deps=
7516549e21daSmrg    fi
7517549e21daSmrg
7518549e21daSmrg    deplibs=
7519549e21daSmrg    newdependency_libs=
7520549e21daSmrg    newlib_search_path=
7521549e21daSmrg    need_relink=no # whether we're linking any uninstalled libtool libraries
7522549e21daSmrg    notinst_deplibs= # not-installed libtool libraries
7523549e21daSmrg    notinst_path= # paths that contain not-installed libtool libraries
7524549e21daSmrg
7525549e21daSmrg    case $linkmode in
7526549e21daSmrg    lib)
7527549e21daSmrg	passes="conv dlpreopen link"
7528549e21daSmrg	for file in $dlfiles $dlprefiles; do
7529549e21daSmrg	  case $file in
7530549e21daSmrg	  *.la) ;;
7531549e21daSmrg	  *)
7532fe4c343aSmrg	    func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
7533549e21daSmrg	    ;;
7534549e21daSmrg	  esac
7535549e21daSmrg	done
7536549e21daSmrg	;;
7537549e21daSmrg    prog)
7538549e21daSmrg	compile_deplibs=
7539549e21daSmrg	finalize_deplibs=
7540fe4c343aSmrg	alldeplibs=false
7541549e21daSmrg	newdlfiles=
7542549e21daSmrg	newdlprefiles=
7543549e21daSmrg	passes="conv scan dlopen dlpreopen link"
7544549e21daSmrg	;;
7545549e21daSmrg    *)  passes="conv"
7546549e21daSmrg	;;
7547549e21daSmrg    esac
7548549e21daSmrg
7549549e21daSmrg    for pass in $passes; do
7550549e21daSmrg      # The preopen pass in lib mode reverses $deplibs; put it back here
7551549e21daSmrg      # so that -L comes before libs that need it for instance...
7552fe4c343aSmrg      if test lib,link = "$linkmode,$pass"; then
7553549e21daSmrg	## FIXME: Find the place where the list is rebuilt in the wrong
7554549e21daSmrg	##        order, and fix it there properly
7555549e21daSmrg        tmp_deplibs=
7556549e21daSmrg	for deplib in $deplibs; do
7557549e21daSmrg	  tmp_deplibs="$deplib $tmp_deplibs"
7558549e21daSmrg	done
7559fe4c343aSmrg	deplibs=$tmp_deplibs
7560549e21daSmrg      fi
7561549e21daSmrg
7562fe4c343aSmrg      if test lib,link = "$linkmode,$pass" ||
7563fe4c343aSmrg	 test prog,scan = "$linkmode,$pass"; then
7564fe4c343aSmrg	libs=$deplibs
7565549e21daSmrg	deplibs=
7566549e21daSmrg      fi
7567fe4c343aSmrg      if test prog = "$linkmode"; then
7568549e21daSmrg	case $pass in
7569fe4c343aSmrg	dlopen) libs=$dlfiles ;;
7570fe4c343aSmrg	dlpreopen) libs=$dlprefiles ;;
7571549e21daSmrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
7572549e21daSmrg	esac
7573549e21daSmrg      fi
7574fe4c343aSmrg      if test lib,dlpreopen = "$linkmode,$pass"; then
7575549e21daSmrg	# Collect and forward deplibs of preopened libtool libs
7576549e21daSmrg	for lib in $dlprefiles; do
7577549e21daSmrg	  # Ignore non-libtool-libs
7578549e21daSmrg	  dependency_libs=
75791bedbe3fSmrg	  func_resolve_sysroot "$lib"
7580549e21daSmrg	  case $lib in
75811bedbe3fSmrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
7582549e21daSmrg	  esac
7583549e21daSmrg
7584549e21daSmrg	  # Collect preopened libtool deplibs, except any this library
7585549e21daSmrg	  # has declared as weak libs
7586549e21daSmrg	  for deplib in $dependency_libs; do
7587549e21daSmrg	    func_basename "$deplib"
7588549e21daSmrg            deplib_base=$func_basename_result
7589549e21daSmrg	    case " $weak_libs " in
7590549e21daSmrg	    *" $deplib_base "*) ;;
75911bedbe3fSmrg	    *) func_append deplibs " $deplib" ;;
7592549e21daSmrg	    esac
7593549e21daSmrg	  done
7594549e21daSmrg	done
7595fe4c343aSmrg	libs=$dlprefiles
7596549e21daSmrg      fi
7597fe4c343aSmrg      if test dlopen = "$pass"; then
7598549e21daSmrg	# Collect dlpreopened libraries
7599fe4c343aSmrg	save_deplibs=$deplibs
7600549e21daSmrg	deplibs=
7601549e21daSmrg      fi
7602549e21daSmrg
7603549e21daSmrg      for deplib in $libs; do
7604549e21daSmrg	lib=
7605fe4c343aSmrg	found=false
7606549e21daSmrg	case $deplib in
76071bedbe3fSmrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
76081bedbe3fSmrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7609fe4c343aSmrg	  if test prog,link = "$linkmode,$pass"; then
7610549e21daSmrg	    compile_deplibs="$deplib $compile_deplibs"
7611549e21daSmrg	    finalize_deplibs="$deplib $finalize_deplibs"
7612549e21daSmrg	  else
76131bedbe3fSmrg	    func_append compiler_flags " $deplib"
7614fe4c343aSmrg	    if test lib = "$linkmode"; then
7615549e21daSmrg		case "$new_inherited_linker_flags " in
7616549e21daSmrg		    *" $deplib "*) ;;
76171bedbe3fSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
7618549e21daSmrg		esac
7619549e21daSmrg	    fi
7620549e21daSmrg	  fi
7621549e21daSmrg	  continue
7622549e21daSmrg	  ;;
7623549e21daSmrg	-l*)
7624fe4c343aSmrg	  if test lib != "$linkmode" && test prog != "$linkmode"; then
7625fe4c343aSmrg	    func_warning "'-l' is ignored for archives/objects"
7626549e21daSmrg	    continue
7627549e21daSmrg	  fi
7628549e21daSmrg	  func_stripname '-l' '' "$deplib"
7629549e21daSmrg	  name=$func_stripname_result
7630fe4c343aSmrg	  if test lib = "$linkmode"; then
7631549e21daSmrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
7632549e21daSmrg	  else
7633549e21daSmrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
7634549e21daSmrg	  fi
7635549e21daSmrg	  for searchdir in $searchdirs; do
7636549e21daSmrg	    for search_ext in .la $std_shrext .so .a; do
7637549e21daSmrg	      # Search the libtool library
7638fe4c343aSmrg	      lib=$searchdir/lib$name$search_ext
7639549e21daSmrg	      if test -f "$lib"; then
7640fe4c343aSmrg		if test .la = "$search_ext"; then
7641fe4c343aSmrg		  found=:
7642549e21daSmrg		else
7643fe4c343aSmrg		  found=false
7644549e21daSmrg		fi
7645549e21daSmrg		break 2
7646549e21daSmrg	      fi
7647549e21daSmrg	    done
7648549e21daSmrg	  done
7649fe4c343aSmrg	  if $found; then
7650fe4c343aSmrg	    # deplib is a libtool library
7651549e21daSmrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
7652549e21daSmrg	    # We need to do some special things here, and not later.
7653fe4c343aSmrg	    if test yes = "$allow_libtool_libs_with_static_runtimes"; then
7654549e21daSmrg	      case " $predeps $postdeps " in
7655549e21daSmrg	      *" $deplib "*)
7656549e21daSmrg		if func_lalib_p "$lib"; then
7657549e21daSmrg		  library_names=
7658549e21daSmrg		  old_library=
7659549e21daSmrg		  func_source "$lib"
7660549e21daSmrg		  for l in $old_library $library_names; do
7661fe4c343aSmrg		    ll=$l
7662549e21daSmrg		  done
7663fe4c343aSmrg		  if test "X$ll" = "X$old_library"; then # only static version available
7664fe4c343aSmrg		    found=false
7665549e21daSmrg		    func_dirname "$lib" "" "."
7666fe4c343aSmrg		    ladir=$func_dirname_result
7667549e21daSmrg		    lib=$ladir/$old_library
7668fe4c343aSmrg		    if test prog,link = "$linkmode,$pass"; then
7669549e21daSmrg		      compile_deplibs="$deplib $compile_deplibs"
7670549e21daSmrg		      finalize_deplibs="$deplib $finalize_deplibs"
7671549e21daSmrg		    else
7672549e21daSmrg		      deplibs="$deplib $deplibs"
7673fe4c343aSmrg		      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
7674549e21daSmrg		    fi
7675549e21daSmrg		    continue
7676549e21daSmrg		  fi
7677549e21daSmrg		fi
7678549e21daSmrg		;;
7679549e21daSmrg	      *) ;;
7680549e21daSmrg	      esac
7681549e21daSmrg	    fi
7682fe4c343aSmrg	  else
7683fe4c343aSmrg	    # deplib doesn't seem to be a libtool library
7684fe4c343aSmrg	    if test prog,link = "$linkmode,$pass"; then
7685fe4c343aSmrg	      compile_deplibs="$deplib $compile_deplibs"
7686fe4c343aSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
7687fe4c343aSmrg	    else
7688fe4c343aSmrg	      deplibs="$deplib $deplibs"
7689fe4c343aSmrg	      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
7690fe4c343aSmrg	    fi
7691fe4c343aSmrg	    continue
7692549e21daSmrg	  fi
7693549e21daSmrg	  ;; # -l
7694549e21daSmrg	*.ltframework)
7695fe4c343aSmrg	  if test prog,link = "$linkmode,$pass"; then
7696549e21daSmrg	    compile_deplibs="$deplib $compile_deplibs"
7697549e21daSmrg	    finalize_deplibs="$deplib $finalize_deplibs"
7698549e21daSmrg	  else
7699549e21daSmrg	    deplibs="$deplib $deplibs"
7700fe4c343aSmrg	    if test lib = "$linkmode"; then
7701549e21daSmrg		case "$new_inherited_linker_flags " in
7702549e21daSmrg		    *" $deplib "*) ;;
77031bedbe3fSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
7704549e21daSmrg		esac
7705549e21daSmrg	    fi
7706549e21daSmrg	  fi
7707549e21daSmrg	  continue
7708549e21daSmrg	  ;;
7709549e21daSmrg	-L*)
7710549e21daSmrg	  case $linkmode in
7711549e21daSmrg	  lib)
7712549e21daSmrg	    deplibs="$deplib $deplibs"
7713fe4c343aSmrg	    test conv = "$pass" && continue
7714549e21daSmrg	    newdependency_libs="$deplib $newdependency_libs"
7715549e21daSmrg	    func_stripname '-L' '' "$deplib"
77161bedbe3fSmrg	    func_resolve_sysroot "$func_stripname_result"
77171bedbe3fSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
7718549e21daSmrg	    ;;
7719549e21daSmrg	  prog)
7720fe4c343aSmrg	    if test conv = "$pass"; then
7721549e21daSmrg	      deplibs="$deplib $deplibs"
7722549e21daSmrg	      continue
7723549e21daSmrg	    fi
7724fe4c343aSmrg	    if test scan = "$pass"; then
7725549e21daSmrg	      deplibs="$deplib $deplibs"
7726549e21daSmrg	    else
7727549e21daSmrg	      compile_deplibs="$deplib $compile_deplibs"
7728549e21daSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
7729549e21daSmrg	    fi
7730549e21daSmrg	    func_stripname '-L' '' "$deplib"
77311bedbe3fSmrg	    func_resolve_sysroot "$func_stripname_result"
77321bedbe3fSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
7733549e21daSmrg	    ;;
7734549e21daSmrg	  *)
7735fe4c343aSmrg	    func_warning "'-L' is ignored for archives/objects"
7736549e21daSmrg	    ;;
7737549e21daSmrg	  esac # linkmode
7738549e21daSmrg	  continue
7739549e21daSmrg	  ;; # -L
7740549e21daSmrg	-R*)
7741fe4c343aSmrg	  if test link = "$pass"; then
7742549e21daSmrg	    func_stripname '-R' '' "$deplib"
77431bedbe3fSmrg	    func_resolve_sysroot "$func_stripname_result"
77441bedbe3fSmrg	    dir=$func_resolve_sysroot_result
7745549e21daSmrg	    # Make sure the xrpath contains only unique directories.
7746549e21daSmrg	    case "$xrpath " in
7747549e21daSmrg	    *" $dir "*) ;;
77481bedbe3fSmrg	    *) func_append xrpath " $dir" ;;
7749549e21daSmrg	    esac
7750549e21daSmrg	  fi
7751549e21daSmrg	  deplibs="$deplib $deplibs"
7752549e21daSmrg	  continue
7753549e21daSmrg	  ;;
77541bedbe3fSmrg	*.la)
77551bedbe3fSmrg	  func_resolve_sysroot "$deplib"
77561bedbe3fSmrg	  lib=$func_resolve_sysroot_result
77571bedbe3fSmrg	  ;;
7758549e21daSmrg	*.$libext)
7759fe4c343aSmrg	  if test conv = "$pass"; then
7760549e21daSmrg	    deplibs="$deplib $deplibs"
7761549e21daSmrg	    continue
7762549e21daSmrg	  fi
7763549e21daSmrg	  case $linkmode in
7764549e21daSmrg	  lib)
7765549e21daSmrg	    # Linking convenience modules into shared libraries is allowed,
7766549e21daSmrg	    # but linking other static libraries is non-portable.
7767549e21daSmrg	    case " $dlpreconveniencelibs " in
7768549e21daSmrg	    *" $deplib "*) ;;
7769549e21daSmrg	    *)
7770fe4c343aSmrg	      valid_a_lib=false
7771549e21daSmrg	      case $deplibs_check_method in
7772549e21daSmrg		match_pattern*)
7773549e21daSmrg		  set dummy $deplibs_check_method; shift
7774549e21daSmrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7775549e21daSmrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
7776549e21daSmrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
7777fe4c343aSmrg		    valid_a_lib=:
7778549e21daSmrg		  fi
7779549e21daSmrg		;;
7780549e21daSmrg		pass_all)
7781fe4c343aSmrg		  valid_a_lib=:
7782549e21daSmrg		;;
7783549e21daSmrg	      esac
7784fe4c343aSmrg	      if $valid_a_lib; then
7785fe4c343aSmrg		echo
7786fe4c343aSmrg		$ECHO "*** Warning: Linking the shared library $output against the"
7787fe4c343aSmrg		$ECHO "*** static library $deplib is not portable!"
7788fe4c343aSmrg		deplibs="$deplib $deplibs"
7789fe4c343aSmrg	      else
7790549e21daSmrg		echo
7791549e21daSmrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
7792549e21daSmrg		echo "*** I have the capability to make that library automatically link in when"
7793549e21daSmrg		echo "*** you link to this library.  But I can only do this if you have a"
7794549e21daSmrg		echo "*** shared version of the library, which you do not appear to have"
7795549e21daSmrg		echo "*** because the file extensions .$libext of this argument makes me believe"
7796549e21daSmrg		echo "*** that it is just a static archive that I should not use here."
7797549e21daSmrg	      fi
7798549e21daSmrg	      ;;
7799549e21daSmrg	    esac
7800549e21daSmrg	    continue
7801549e21daSmrg	    ;;
7802549e21daSmrg	  prog)
7803fe4c343aSmrg	    if test link != "$pass"; then
7804549e21daSmrg	      deplibs="$deplib $deplibs"
7805549e21daSmrg	    else
7806549e21daSmrg	      compile_deplibs="$deplib $compile_deplibs"
7807549e21daSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
7808549e21daSmrg	    fi
7809549e21daSmrg	    continue
7810549e21daSmrg	    ;;
7811549e21daSmrg	  esac # linkmode
7812549e21daSmrg	  ;; # *.$libext
7813549e21daSmrg	*.lo | *.$objext)
7814fe4c343aSmrg	  if test conv = "$pass"; then
7815549e21daSmrg	    deplibs="$deplib $deplibs"
7816fe4c343aSmrg	  elif test prog = "$linkmode"; then
7817fe4c343aSmrg	    if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
7818549e21daSmrg	      # If there is no dlopen support or we're linking statically,
7819549e21daSmrg	      # we need to preload.
78201bedbe3fSmrg	      func_append newdlprefiles " $deplib"
7821549e21daSmrg	      compile_deplibs="$deplib $compile_deplibs"
7822549e21daSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
7823549e21daSmrg	    else
78241bedbe3fSmrg	      func_append newdlfiles " $deplib"
7825549e21daSmrg	    fi
7826549e21daSmrg	  fi
7827549e21daSmrg	  continue
7828549e21daSmrg	  ;;
7829549e21daSmrg	%DEPLIBS%)
7830fe4c343aSmrg	  alldeplibs=:
7831549e21daSmrg	  continue
7832549e21daSmrg	  ;;
7833549e21daSmrg	esac # case $deplib
7834549e21daSmrg
7835fe4c343aSmrg	$found || test -f "$lib" \
7836fe4c343aSmrg	  || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
7837549e21daSmrg
7838549e21daSmrg	# Check to see that this really is a libtool archive.
7839549e21daSmrg	func_lalib_unsafe_p "$lib" \
7840fe4c343aSmrg	  || func_fatal_error "'$lib' is not a valid libtool archive"
7841549e21daSmrg
7842549e21daSmrg	func_dirname "$lib" "" "."
7843fe4c343aSmrg	ladir=$func_dirname_result
7844549e21daSmrg
7845549e21daSmrg	dlname=
7846549e21daSmrg	dlopen=
7847549e21daSmrg	dlpreopen=
7848549e21daSmrg	libdir=
7849549e21daSmrg	library_names=
7850549e21daSmrg	old_library=
7851549e21daSmrg	inherited_linker_flags=
7852549e21daSmrg	# If the library was installed with an old release of libtool,
7853549e21daSmrg	# it will not redefine variables installed, or shouldnotlink
7854549e21daSmrg	installed=yes
7855549e21daSmrg	shouldnotlink=no
7856549e21daSmrg	avoidtemprpath=
7857549e21daSmrg
7858549e21daSmrg
7859549e21daSmrg	# Read the .la file
7860549e21daSmrg	func_source "$lib"
7861549e21daSmrg
7862549e21daSmrg	# Convert "-framework foo" to "foo.ltframework"
7863549e21daSmrg	if test -n "$inherited_linker_flags"; then
7864549e21daSmrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
7865549e21daSmrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
7866549e21daSmrg	    case " $new_inherited_linker_flags " in
7867549e21daSmrg	      *" $tmp_inherited_linker_flag "*) ;;
78681bedbe3fSmrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
7869549e21daSmrg	    esac
7870549e21daSmrg	  done
7871549e21daSmrg	fi
7872549e21daSmrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7873fe4c343aSmrg	if test lib,link = "$linkmode,$pass" ||
7874fe4c343aSmrg	   test prog,scan = "$linkmode,$pass" ||
7875fe4c343aSmrg	   { test prog != "$linkmode" && test lib != "$linkmode"; }; then
78761bedbe3fSmrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
78771bedbe3fSmrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
7878549e21daSmrg	fi
7879549e21daSmrg
7880fe4c343aSmrg	if test conv = "$pass"; then
7881549e21daSmrg	  # Only check for convenience libraries
7882549e21daSmrg	  deplibs="$lib $deplibs"
7883549e21daSmrg	  if test -z "$libdir"; then
7884549e21daSmrg	    if test -z "$old_library"; then
7885fe4c343aSmrg	      func_fatal_error "cannot find name of link library for '$lib'"
7886549e21daSmrg	    fi
7887549e21daSmrg	    # It is a libtool convenience library, so add in its objects.
78881bedbe3fSmrg	    func_append convenience " $ladir/$objdir/$old_library"
78891bedbe3fSmrg	    func_append old_convenience " $ladir/$objdir/$old_library"
7890fe4c343aSmrg	  elif test prog != "$linkmode" && test lib != "$linkmode"; then
7891fe4c343aSmrg	    func_fatal_error "'$lib' is not a convenience library"
7892549e21daSmrg	  fi
7893549e21daSmrg	  tmp_libs=
7894549e21daSmrg	  for deplib in $dependency_libs; do
7895549e21daSmrg	    deplibs="$deplib $deplibs"
7896fe4c343aSmrg	    if $opt_preserve_dup_deps; then
7897549e21daSmrg	      case "$tmp_libs " in
78981bedbe3fSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
7899549e21daSmrg	      esac
7900549e21daSmrg	    fi
79011bedbe3fSmrg	    func_append tmp_libs " $deplib"
7902549e21daSmrg	  done
7903549e21daSmrg	  continue
7904549e21daSmrg	fi # $pass = conv
7905549e21daSmrg
7906549e21daSmrg
7907549e21daSmrg	# Get the name of the library we link against.
7908549e21daSmrg	linklib=
79091bedbe3fSmrg	if test -n "$old_library" &&
7910fe4c343aSmrg	   { test yes = "$prefer_static_libs" ||
7911fe4c343aSmrg	     test built,no = "$prefer_static_libs,$installed"; }; then
79121bedbe3fSmrg	  linklib=$old_library
79131bedbe3fSmrg	else
79141bedbe3fSmrg	  for l in $old_library $library_names; do
7915fe4c343aSmrg	    linklib=$l
79161bedbe3fSmrg	  done
79171bedbe3fSmrg	fi
7918549e21daSmrg	if test -z "$linklib"; then
7919fe4c343aSmrg	  func_fatal_error "cannot find name of link library for '$lib'"
7920549e21daSmrg	fi
7921549e21daSmrg
7922549e21daSmrg	# This library was specified with -dlopen.
7923fe4c343aSmrg	if test dlopen = "$pass"; then
7924fe4c343aSmrg	  test -z "$libdir" \
7925fe4c343aSmrg	    && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
7926549e21daSmrg	  if test -z "$dlname" ||
7927fe4c343aSmrg	     test yes != "$dlopen_support" ||
7928fe4c343aSmrg	     test no = "$build_libtool_libs"
7929fe4c343aSmrg	  then
7930549e21daSmrg	    # If there is no dlname, no dlopen support or we're linking
7931549e21daSmrg	    # statically, we need to preload.  We also need to preload any
7932549e21daSmrg	    # dependent libraries so libltdl's deplib preloader doesn't
7933549e21daSmrg	    # bomb out in the load deplibs phase.
79341bedbe3fSmrg	    func_append dlprefiles " $lib $dependency_libs"
7935549e21daSmrg	  else
79361bedbe3fSmrg	    func_append newdlfiles " $lib"
7937549e21daSmrg	  fi
7938549e21daSmrg	  continue
7939549e21daSmrg	fi # $pass = dlopen
7940549e21daSmrg
7941549e21daSmrg	# We need an absolute path.
7942549e21daSmrg	case $ladir in
7943fe4c343aSmrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
7944549e21daSmrg	*)
7945549e21daSmrg	  abs_ladir=`cd "$ladir" && pwd`
7946549e21daSmrg	  if test -z "$abs_ladir"; then
7947fe4c343aSmrg	    func_warning "cannot determine absolute directory name of '$ladir'"
7948549e21daSmrg	    func_warning "passing it literally to the linker, although it might fail"
7949fe4c343aSmrg	    abs_ladir=$ladir
7950549e21daSmrg	  fi
7951549e21daSmrg	  ;;
7952549e21daSmrg	esac
7953549e21daSmrg	func_basename "$lib"
7954fe4c343aSmrg	laname=$func_basename_result
7955549e21daSmrg
7956549e21daSmrg	# Find the relevant object directory and library name.
7957fe4c343aSmrg	if test yes = "$installed"; then
79581bedbe3fSmrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
7959fe4c343aSmrg	    func_warning "library '$lib' was moved."
7960fe4c343aSmrg	    dir=$ladir
7961fe4c343aSmrg	    absdir=$abs_ladir
7962fe4c343aSmrg	    libdir=$abs_ladir
7963549e21daSmrg	  else
7964fe4c343aSmrg	    dir=$lt_sysroot$libdir
7965fe4c343aSmrg	    absdir=$lt_sysroot$libdir
7966549e21daSmrg	  fi
7967fe4c343aSmrg	  test yes = "$hardcode_automatic" && avoidtemprpath=yes
7968549e21daSmrg	else
7969549e21daSmrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
7970fe4c343aSmrg	    dir=$ladir
7971fe4c343aSmrg	    absdir=$abs_ladir
7972549e21daSmrg	    # Remove this search path later
79731bedbe3fSmrg	    func_append notinst_path " $abs_ladir"
7974549e21daSmrg	  else
7975fe4c343aSmrg	    dir=$ladir/$objdir
7976fe4c343aSmrg	    absdir=$abs_ladir/$objdir
7977549e21daSmrg	    # Remove this search path later
79781bedbe3fSmrg	    func_append notinst_path " $abs_ladir"
7979549e21daSmrg	  fi
7980549e21daSmrg	fi # $installed = yes
7981549e21daSmrg	func_stripname 'lib' '.la' "$laname"
7982549e21daSmrg	name=$func_stripname_result
7983549e21daSmrg
7984549e21daSmrg	# This library was specified with -dlpreopen.
7985fe4c343aSmrg	if test dlpreopen = "$pass"; then
7986fe4c343aSmrg	  if test -z "$libdir" && test prog = "$linkmode"; then
7987fe4c343aSmrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
7988549e21daSmrg	  fi
7989fe4c343aSmrg	  case $host in
79901bedbe3fSmrg	    # special handling for platforms with PE-DLLs.
79911bedbe3fSmrg	    *cygwin* | *mingw* | *cegcc* )
79921bedbe3fSmrg	      # Linker will automatically link against shared library if both
79931bedbe3fSmrg	      # static and shared are present.  Therefore, ensure we extract
79941bedbe3fSmrg	      # symbols from the import library if a shared library is present
79951bedbe3fSmrg	      # (otherwise, the dlopen module name will be incorrect).  We do
79961bedbe3fSmrg	      # this by putting the import library name into $newdlprefiles.
79971bedbe3fSmrg	      # We recover the dlopen module name by 'saving' the la file
79981bedbe3fSmrg	      # name in a special purpose variable, and (later) extracting the
79991bedbe3fSmrg	      # dlname from the la file.
80001bedbe3fSmrg	      if test -n "$dlname"; then
80011bedbe3fSmrg	        func_tr_sh "$dir/$linklib"
80021bedbe3fSmrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
80031bedbe3fSmrg	        func_append newdlprefiles " $dir/$linklib"
80041bedbe3fSmrg	      else
80051bedbe3fSmrg	        func_append newdlprefiles " $dir/$old_library"
80061bedbe3fSmrg	        # Keep a list of preopened convenience libraries to check
80071bedbe3fSmrg	        # that they are being used correctly in the link pass.
80081bedbe3fSmrg	        test -z "$libdir" && \
80091bedbe3fSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
80101bedbe3fSmrg	      fi
80111bedbe3fSmrg	    ;;
80121bedbe3fSmrg	    * )
80131bedbe3fSmrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
80141bedbe3fSmrg	      # are required to link).
80151bedbe3fSmrg	      if test -n "$old_library"; then
80161bedbe3fSmrg	        func_append newdlprefiles " $dir/$old_library"
80171bedbe3fSmrg	        # Keep a list of preopened convenience libraries to check
80181bedbe3fSmrg	        # that they are being used correctly in the link pass.
80191bedbe3fSmrg	        test -z "$libdir" && \
80201bedbe3fSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
80211bedbe3fSmrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
80221bedbe3fSmrg	      elif test -n "$dlname"; then
80231bedbe3fSmrg	        func_append newdlprefiles " $dir/$dlname"
80241bedbe3fSmrg	      else
80251bedbe3fSmrg	        func_append newdlprefiles " $dir/$linklib"
80261bedbe3fSmrg	      fi
80271bedbe3fSmrg	    ;;
80281bedbe3fSmrg	  esac
8029549e21daSmrg	fi # $pass = dlpreopen
8030549e21daSmrg
8031549e21daSmrg	if test -z "$libdir"; then
8032549e21daSmrg	  # Link the convenience library
8033fe4c343aSmrg	  if test lib = "$linkmode"; then
8034549e21daSmrg	    deplibs="$dir/$old_library $deplibs"
8035fe4c343aSmrg	  elif test prog,link = "$linkmode,$pass"; then
8036549e21daSmrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
8037549e21daSmrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
8038549e21daSmrg	  else
8039549e21daSmrg	    deplibs="$lib $deplibs" # used for prog,scan pass
8040549e21daSmrg	  fi
8041549e21daSmrg	  continue
8042549e21daSmrg	fi
8043549e21daSmrg
8044549e21daSmrg
8045fe4c343aSmrg	if test prog = "$linkmode" && test link != "$pass"; then
80461bedbe3fSmrg	  func_append newlib_search_path " $ladir"
8047549e21daSmrg	  deplibs="$lib $deplibs"
8048549e21daSmrg
8049fe4c343aSmrg	  linkalldeplibs=false
8050fe4c343aSmrg	  if test no != "$link_all_deplibs" || test -z "$library_names" ||
8051fe4c343aSmrg	     test no = "$build_libtool_libs"; then
8052fe4c343aSmrg	    linkalldeplibs=:
8053549e21daSmrg	  fi
8054549e21daSmrg
8055549e21daSmrg	  tmp_libs=
8056549e21daSmrg	  for deplib in $dependency_libs; do
8057549e21daSmrg	    case $deplib in
8058549e21daSmrg	    -L*) func_stripname '-L' '' "$deplib"
80591bedbe3fSmrg	         func_resolve_sysroot "$func_stripname_result"
80601bedbe3fSmrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
8061549e21daSmrg		 ;;
8062549e21daSmrg	    esac
8063549e21daSmrg	    # Need to link against all dependency_libs?
8064fe4c343aSmrg	    if $linkalldeplibs; then
8065549e21daSmrg	      deplibs="$deplib $deplibs"
8066549e21daSmrg	    else
8067549e21daSmrg	      # Need to hardcode shared library paths
8068549e21daSmrg	      # or/and link against static libraries
8069549e21daSmrg	      newdependency_libs="$deplib $newdependency_libs"
8070549e21daSmrg	    fi
8071fe4c343aSmrg	    if $opt_preserve_dup_deps; then
8072549e21daSmrg	      case "$tmp_libs " in
80731bedbe3fSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8074549e21daSmrg	      esac
8075549e21daSmrg	    fi
80761bedbe3fSmrg	    func_append tmp_libs " $deplib"
8077549e21daSmrg	  done # for deplib
8078549e21daSmrg	  continue
8079549e21daSmrg	fi # $linkmode = prog...
8080549e21daSmrg
8081fe4c343aSmrg	if test prog,link = "$linkmode,$pass"; then
8082549e21daSmrg	  if test -n "$library_names" &&
8083fe4c343aSmrg	     { { test no = "$prefer_static_libs" ||
8084fe4c343aSmrg	         test built,yes = "$prefer_static_libs,$installed"; } ||
8085549e21daSmrg	       test -z "$old_library"; }; then
8086549e21daSmrg	    # We need to hardcode the library path
8087fe4c343aSmrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
8088549e21daSmrg	      # Make sure the rpath contains only unique directories.
8089fe4c343aSmrg	      case $temp_rpath: in
8090549e21daSmrg	      *"$absdir:"*) ;;
80911bedbe3fSmrg	      *) func_append temp_rpath "$absdir:" ;;
8092549e21daSmrg	      esac
8093549e21daSmrg	    fi
8094549e21daSmrg
8095549e21daSmrg	    # Hardcode the library path.
8096549e21daSmrg	    # Skip directories that are in the system default run-time
8097549e21daSmrg	    # search path.
8098549e21daSmrg	    case " $sys_lib_dlsearch_path " in
8099549e21daSmrg	    *" $absdir "*) ;;
8100549e21daSmrg	    *)
8101549e21daSmrg	      case "$compile_rpath " in
8102549e21daSmrg	      *" $absdir "*) ;;
81031bedbe3fSmrg	      *) func_append compile_rpath " $absdir" ;;
8104549e21daSmrg	      esac
8105549e21daSmrg	      ;;
8106549e21daSmrg	    esac
8107549e21daSmrg	    case " $sys_lib_dlsearch_path " in
8108549e21daSmrg	    *" $libdir "*) ;;
8109549e21daSmrg	    *)
8110549e21daSmrg	      case "$finalize_rpath " in
8111549e21daSmrg	      *" $libdir "*) ;;
81121bedbe3fSmrg	      *) func_append finalize_rpath " $libdir" ;;
8113549e21daSmrg	      esac
8114549e21daSmrg	      ;;
8115549e21daSmrg	    esac
8116549e21daSmrg	  fi # $linkmode,$pass = prog,link...
8117549e21daSmrg
8118fe4c343aSmrg	  if $alldeplibs &&
8119fe4c343aSmrg	     { test pass_all = "$deplibs_check_method" ||
8120fe4c343aSmrg	       { test yes = "$build_libtool_libs" &&
8121549e21daSmrg		 test -n "$library_names"; }; }; then
8122549e21daSmrg	    # We only need to search for static libraries
8123549e21daSmrg	    continue
8124549e21daSmrg	  fi
8125549e21daSmrg	fi
8126549e21daSmrg
8127549e21daSmrg	link_static=no # Whether the deplib will be linked statically
8128549e21daSmrg	use_static_libs=$prefer_static_libs
8129fe4c343aSmrg	if test built = "$use_static_libs" && test yes = "$installed"; then
8130549e21daSmrg	  use_static_libs=no
8131549e21daSmrg	fi
8132549e21daSmrg	if test -n "$library_names" &&
8133fe4c343aSmrg	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
8134549e21daSmrg	  case $host in
8135fe4c343aSmrg	  *cygwin* | *mingw* | *cegcc* | *os2*)
8136549e21daSmrg	      # No point in relinking DLLs because paths are not encoded
81371bedbe3fSmrg	      func_append notinst_deplibs " $lib"
8138549e21daSmrg	      need_relink=no
8139549e21daSmrg	    ;;
8140549e21daSmrg	  *)
8141fe4c343aSmrg	    if test no = "$installed"; then
81421bedbe3fSmrg	      func_append notinst_deplibs " $lib"
8143549e21daSmrg	      need_relink=yes
8144549e21daSmrg	    fi
8145549e21daSmrg	    ;;
8146549e21daSmrg	  esac
8147549e21daSmrg	  # This is a shared library
8148549e21daSmrg
8149549e21daSmrg	  # Warn about portability, can't link against -module's on some
8150549e21daSmrg	  # systems (darwin).  Don't bleat about dlopened modules though!
8151fe4c343aSmrg	  dlopenmodule=
8152549e21daSmrg	  for dlpremoduletest in $dlprefiles; do
8153549e21daSmrg	    if test "X$dlpremoduletest" = "X$lib"; then
8154fe4c343aSmrg	      dlopenmodule=$dlpremoduletest
8155549e21daSmrg	      break
8156549e21daSmrg	    fi
8157549e21daSmrg	  done
8158fe4c343aSmrg	  if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
8159549e21daSmrg	    echo
8160fe4c343aSmrg	    if test prog = "$linkmode"; then
8161549e21daSmrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
8162549e21daSmrg	    else
8163549e21daSmrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
8164549e21daSmrg	    fi
8165549e21daSmrg	    $ECHO "*** $linklib is not portable!"
8166549e21daSmrg	  fi
8167fe4c343aSmrg	  if test lib = "$linkmode" &&
8168fe4c343aSmrg	     test yes = "$hardcode_into_libs"; then
8169549e21daSmrg	    # Hardcode the library path.
8170549e21daSmrg	    # Skip directories that are in the system default run-time
8171549e21daSmrg	    # search path.
8172549e21daSmrg	    case " $sys_lib_dlsearch_path " in
8173549e21daSmrg	    *" $absdir "*) ;;
8174549e21daSmrg	    *)
8175549e21daSmrg	      case "$compile_rpath " in
8176549e21daSmrg	      *" $absdir "*) ;;
81771bedbe3fSmrg	      *) func_append compile_rpath " $absdir" ;;
8178549e21daSmrg	      esac
8179549e21daSmrg	      ;;
8180549e21daSmrg	    esac
8181549e21daSmrg	    case " $sys_lib_dlsearch_path " in
8182549e21daSmrg	    *" $libdir "*) ;;
8183549e21daSmrg	    *)
8184549e21daSmrg	      case "$finalize_rpath " in
8185549e21daSmrg	      *" $libdir "*) ;;
81861bedbe3fSmrg	      *) func_append finalize_rpath " $libdir" ;;
8187549e21daSmrg	      esac
8188549e21daSmrg	      ;;
8189549e21daSmrg	    esac
8190549e21daSmrg	  fi
8191549e21daSmrg
8192549e21daSmrg	  if test -n "$old_archive_from_expsyms_cmds"; then
8193549e21daSmrg	    # figure out the soname
8194549e21daSmrg	    set dummy $library_names
8195549e21daSmrg	    shift
8196fe4c343aSmrg	    realname=$1
8197549e21daSmrg	    shift
8198549e21daSmrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
8199549e21daSmrg	    # use dlname if we got it. it's perfectly good, no?
8200549e21daSmrg	    if test -n "$dlname"; then
8201fe4c343aSmrg	      soname=$dlname
8202549e21daSmrg	    elif test -n "$soname_spec"; then
8203549e21daSmrg	      # bleh windows
8204549e21daSmrg	      case $host in
8205fe4c343aSmrg	      *cygwin* | mingw* | *cegcc* | *os2*)
8206549e21daSmrg	        func_arith $current - $age
8207549e21daSmrg		major=$func_arith_result
8208fe4c343aSmrg		versuffix=-$major
8209549e21daSmrg		;;
8210549e21daSmrg	      esac
8211549e21daSmrg	      eval soname=\"$soname_spec\"
8212549e21daSmrg	    else
8213fe4c343aSmrg	      soname=$realname
8214549e21daSmrg	    fi
8215549e21daSmrg
8216549e21daSmrg	    # Make a new name for the extract_expsyms_cmds to use
8217fe4c343aSmrg	    soroot=$soname
8218549e21daSmrg	    func_basename "$soroot"
8219fe4c343aSmrg	    soname=$func_basename_result
8220549e21daSmrg	    func_stripname 'lib' '.dll' "$soname"
8221549e21daSmrg	    newlib=libimp-$func_stripname_result.a
8222549e21daSmrg
8223549e21daSmrg	    # If the library has no export list, then create one now
8224549e21daSmrg	    if test -f "$output_objdir/$soname-def"; then :
8225549e21daSmrg	    else
8226fe4c343aSmrg	      func_verbose "extracting exported symbol list from '$soname'"
8227549e21daSmrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
8228549e21daSmrg	    fi
8229549e21daSmrg
8230549e21daSmrg	    # Create $newlib
8231549e21daSmrg	    if test -f "$output_objdir/$newlib"; then :; else
8232fe4c343aSmrg	      func_verbose "generating import library for '$soname'"
8233549e21daSmrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
8234549e21daSmrg	    fi
8235549e21daSmrg	    # make sure the library variables are pointing to the new library
8236549e21daSmrg	    dir=$output_objdir
8237549e21daSmrg	    linklib=$newlib
8238549e21daSmrg	  fi # test -n "$old_archive_from_expsyms_cmds"
8239549e21daSmrg
8240fe4c343aSmrg	  if test prog = "$linkmode" || test relink != "$opt_mode"; then
8241549e21daSmrg	    add_shlibpath=
8242549e21daSmrg	    add_dir=
8243549e21daSmrg	    add=
8244549e21daSmrg	    lib_linked=yes
8245549e21daSmrg	    case $hardcode_action in
8246549e21daSmrg	    immediate | unsupported)
8247fe4c343aSmrg	      if test no = "$hardcode_direct"; then
8248fe4c343aSmrg		add=$dir/$linklib
8249549e21daSmrg		case $host in
8250fe4c343aSmrg		  *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
8251fe4c343aSmrg		  *-*-sysv4*uw2*) add_dir=-L$dir ;;
8252549e21daSmrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
8253fe4c343aSmrg		    *-*-unixware7*) add_dir=-L$dir ;;
8254549e21daSmrg		  *-*-darwin* )
8255fe4c343aSmrg		    # if the lib is a (non-dlopened) module then we cannot
8256549e21daSmrg		    # link against it, someone is ignoring the earlier warnings
8257549e21daSmrg		    if /usr/bin/file -L $add 2> /dev/null |
8258fe4c343aSmrg			 $GREP ": [^:]* bundle" >/dev/null; then
8259549e21daSmrg		      if test "X$dlopenmodule" != "X$lib"; then
8260549e21daSmrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
8261fe4c343aSmrg			if test -z "$old_library"; then
8262549e21daSmrg			  echo
8263549e21daSmrg			  echo "*** And there doesn't seem to be a static archive available"
8264549e21daSmrg			  echo "*** The link will probably fail, sorry"
8265549e21daSmrg			else
8266fe4c343aSmrg			  add=$dir/$old_library
8267549e21daSmrg			fi
8268549e21daSmrg		      elif test -n "$old_library"; then
8269fe4c343aSmrg			add=$dir/$old_library
8270549e21daSmrg		      fi
8271549e21daSmrg		    fi
8272549e21daSmrg		esac
8273fe4c343aSmrg	      elif test no = "$hardcode_minus_L"; then
8274549e21daSmrg		case $host in
8275fe4c343aSmrg		*-*-sunos*) add_shlibpath=$dir ;;
8276549e21daSmrg		esac
8277fe4c343aSmrg		add_dir=-L$dir
8278fe4c343aSmrg		add=-l$name
8279fe4c343aSmrg	      elif test no = "$hardcode_shlibpath_var"; then
8280fe4c343aSmrg		add_shlibpath=$dir
8281fe4c343aSmrg		add=-l$name
8282549e21daSmrg	      else
8283549e21daSmrg		lib_linked=no
8284549e21daSmrg	      fi
8285549e21daSmrg	      ;;
8286549e21daSmrg	    relink)
8287fe4c343aSmrg	      if test yes = "$hardcode_direct" &&
8288fe4c343aSmrg	         test no = "$hardcode_direct_absolute"; then
8289fe4c343aSmrg		add=$dir/$linklib
8290fe4c343aSmrg	      elif test yes = "$hardcode_minus_L"; then
8291fe4c343aSmrg		add_dir=-L$absdir
8292549e21daSmrg		# Try looking first in the location we're being installed to.
8293549e21daSmrg		if test -n "$inst_prefix_dir"; then
8294549e21daSmrg		  case $libdir in
8295549e21daSmrg		    [\\/]*)
82961bedbe3fSmrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
8297549e21daSmrg		      ;;
8298549e21daSmrg		  esac
8299549e21daSmrg		fi
8300fe4c343aSmrg		add=-l$name
8301fe4c343aSmrg	      elif test yes = "$hardcode_shlibpath_var"; then
8302fe4c343aSmrg		add_shlibpath=$dir
8303fe4c343aSmrg		add=-l$name
8304549e21daSmrg	      else
8305549e21daSmrg		lib_linked=no
8306549e21daSmrg	      fi
8307549e21daSmrg	      ;;
8308549e21daSmrg	    *) lib_linked=no ;;
8309549e21daSmrg	    esac
8310549e21daSmrg
8311fe4c343aSmrg	    if test yes != "$lib_linked"; then
8312549e21daSmrg	      func_fatal_configuration "unsupported hardcode properties"
8313549e21daSmrg	    fi
8314549e21daSmrg
8315549e21daSmrg	    if test -n "$add_shlibpath"; then
8316549e21daSmrg	      case :$compile_shlibpath: in
8317549e21daSmrg	      *":$add_shlibpath:"*) ;;
83181bedbe3fSmrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
8319549e21daSmrg	      esac
8320549e21daSmrg	    fi
8321fe4c343aSmrg	    if test prog = "$linkmode"; then
8322549e21daSmrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
8323549e21daSmrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
8324549e21daSmrg	    else
8325549e21daSmrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8326549e21daSmrg	      test -n "$add" && deplibs="$add $deplibs"
8327fe4c343aSmrg	      if test yes != "$hardcode_direct" &&
8328fe4c343aSmrg		 test yes != "$hardcode_minus_L" &&
8329fe4c343aSmrg		 test yes = "$hardcode_shlibpath_var"; then
8330549e21daSmrg		case :$finalize_shlibpath: in
8331549e21daSmrg		*":$libdir:"*) ;;
83321bedbe3fSmrg		*) func_append finalize_shlibpath "$libdir:" ;;
8333549e21daSmrg		esac
8334549e21daSmrg	      fi
8335549e21daSmrg	    fi
8336549e21daSmrg	  fi
8337549e21daSmrg
8338fe4c343aSmrg	  if test prog = "$linkmode" || test relink = "$opt_mode"; then
8339549e21daSmrg	    add_shlibpath=
8340549e21daSmrg	    add_dir=
8341549e21daSmrg	    add=
8342549e21daSmrg	    # Finalize command for both is simple: just hardcode it.
8343fe4c343aSmrg	    if test yes = "$hardcode_direct" &&
8344fe4c343aSmrg	       test no = "$hardcode_direct_absolute"; then
8345fe4c343aSmrg	      add=$libdir/$linklib
8346fe4c343aSmrg	    elif test yes = "$hardcode_minus_L"; then
8347fe4c343aSmrg	      add_dir=-L$libdir
8348fe4c343aSmrg	      add=-l$name
8349fe4c343aSmrg	    elif test yes = "$hardcode_shlibpath_var"; then
8350549e21daSmrg	      case :$finalize_shlibpath: in
8351549e21daSmrg	      *":$libdir:"*) ;;
83521bedbe3fSmrg	      *) func_append finalize_shlibpath "$libdir:" ;;
8353549e21daSmrg	      esac
8354fe4c343aSmrg	      add=-l$name
8355fe4c343aSmrg	    elif test yes = "$hardcode_automatic"; then
8356549e21daSmrg	      if test -n "$inst_prefix_dir" &&
8357fe4c343aSmrg		 test -f "$inst_prefix_dir$libdir/$linklib"; then
8358fe4c343aSmrg		add=$inst_prefix_dir$libdir/$linklib
8359549e21daSmrg	      else
8360fe4c343aSmrg		add=$libdir/$linklib
8361549e21daSmrg	      fi
8362549e21daSmrg	    else
8363549e21daSmrg	      # We cannot seem to hardcode it, guess we'll fake it.
8364fe4c343aSmrg	      add_dir=-L$libdir
8365549e21daSmrg	      # Try looking first in the location we're being installed to.
8366549e21daSmrg	      if test -n "$inst_prefix_dir"; then
8367549e21daSmrg		case $libdir in
8368549e21daSmrg		  [\\/]*)
83691bedbe3fSmrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
8370549e21daSmrg		    ;;
8371549e21daSmrg		esac
8372549e21daSmrg	      fi
8373fe4c343aSmrg	      add=-l$name
8374549e21daSmrg	    fi
8375549e21daSmrg
8376fe4c343aSmrg	    if test prog = "$linkmode"; then
8377549e21daSmrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
8378549e21daSmrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
8379549e21daSmrg	    else
8380549e21daSmrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8381549e21daSmrg	      test -n "$add" && deplibs="$add $deplibs"
8382549e21daSmrg	    fi
8383549e21daSmrg	  fi
8384fe4c343aSmrg	elif test prog = "$linkmode"; then
8385549e21daSmrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
8386549e21daSmrg	  # is not unsupported.  This is valid on all known static and
8387549e21daSmrg	  # shared platforms.
8388fe4c343aSmrg	  if test unsupported != "$hardcode_direct"; then
8389fe4c343aSmrg	    test -n "$old_library" && linklib=$old_library
8390549e21daSmrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
8391549e21daSmrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
8392549e21daSmrg	  else
8393549e21daSmrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
8394549e21daSmrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
8395549e21daSmrg	  fi
8396fe4c343aSmrg	elif test yes = "$build_libtool_libs"; then
8397549e21daSmrg	  # Not a shared library
8398fe4c343aSmrg	  if test pass_all != "$deplibs_check_method"; then
8399549e21daSmrg	    # We're trying link a shared library against a static one
8400549e21daSmrg	    # but the system doesn't support it.
8401549e21daSmrg
8402549e21daSmrg	    # Just print a warning and add the library to dependency_libs so
8403549e21daSmrg	    # that the program can be linked against the static library.
8404549e21daSmrg	    echo
8405fe4c343aSmrg	    $ECHO "*** Warning: This system cannot link to static lib archive $lib."
8406549e21daSmrg	    echo "*** I have the capability to make that library automatically link in when"
8407549e21daSmrg	    echo "*** you link to this library.  But I can only do this if you have a"
8408549e21daSmrg	    echo "*** shared version of the library, which you do not appear to have."
8409fe4c343aSmrg	    if test yes = "$module"; then
8410549e21daSmrg	      echo "*** But as you try to build a module library, libtool will still create "
8411549e21daSmrg	      echo "*** a static module, that should work as long as the dlopening application"
8412549e21daSmrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
8413549e21daSmrg	      if test -z "$global_symbol_pipe"; then
8414549e21daSmrg		echo
8415549e21daSmrg		echo "*** However, this would only work if libtool was able to extract symbol"
8416fe4c343aSmrg		echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
8417549e21daSmrg		echo "*** not find such a program.  So, this module is probably useless."
8418fe4c343aSmrg		echo "*** 'nm' from GNU binutils and a full rebuild may help."
8419549e21daSmrg	      fi
8420fe4c343aSmrg	      if test no = "$build_old_libs"; then
8421549e21daSmrg		build_libtool_libs=module
8422549e21daSmrg		build_old_libs=yes
8423549e21daSmrg	      else
8424549e21daSmrg		build_libtool_libs=no
8425549e21daSmrg	      fi
8426549e21daSmrg	    fi
8427549e21daSmrg	  else
8428549e21daSmrg	    deplibs="$dir/$old_library $deplibs"
8429549e21daSmrg	    link_static=yes
8430549e21daSmrg	  fi
8431549e21daSmrg	fi # link shared/static library?
8432549e21daSmrg
8433fe4c343aSmrg	if test lib = "$linkmode"; then
8434549e21daSmrg	  if test -n "$dependency_libs" &&
8435fe4c343aSmrg	     { test yes != "$hardcode_into_libs" ||
8436fe4c343aSmrg	       test yes = "$build_old_libs" ||
8437fe4c343aSmrg	       test yes = "$link_static"; }; then
8438549e21daSmrg	    # Extract -R from dependency_libs
8439549e21daSmrg	    temp_deplibs=
8440549e21daSmrg	    for libdir in $dependency_libs; do
8441549e21daSmrg	      case $libdir in
8442549e21daSmrg	      -R*) func_stripname '-R' '' "$libdir"
8443549e21daSmrg	           temp_xrpath=$func_stripname_result
8444549e21daSmrg		   case " $xrpath " in
8445549e21daSmrg		   *" $temp_xrpath "*) ;;
84461bedbe3fSmrg		   *) func_append xrpath " $temp_xrpath";;
8447549e21daSmrg		   esac;;
84481bedbe3fSmrg	      *) func_append temp_deplibs " $libdir";;
8449549e21daSmrg	      esac
8450549e21daSmrg	    done
8451fe4c343aSmrg	    dependency_libs=$temp_deplibs
8452549e21daSmrg	  fi
8453549e21daSmrg
84541bedbe3fSmrg	  func_append newlib_search_path " $absdir"
8455549e21daSmrg	  # Link against this library
8456fe4c343aSmrg	  test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
8457549e21daSmrg	  # ... and its dependency_libs
8458549e21daSmrg	  tmp_libs=
8459549e21daSmrg	  for deplib in $dependency_libs; do
8460549e21daSmrg	    newdependency_libs="$deplib $newdependency_libs"
84611bedbe3fSmrg	    case $deplib in
84621bedbe3fSmrg              -L*) func_stripname '-L' '' "$deplib"
84631bedbe3fSmrg                   func_resolve_sysroot "$func_stripname_result";;
84641bedbe3fSmrg              *) func_resolve_sysroot "$deplib" ;;
84651bedbe3fSmrg            esac
8466fe4c343aSmrg	    if $opt_preserve_dup_deps; then
8467549e21daSmrg	      case "$tmp_libs " in
84681bedbe3fSmrg	      *" $func_resolve_sysroot_result "*)
84691bedbe3fSmrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
8470549e21daSmrg	      esac
8471549e21daSmrg	    fi
84721bedbe3fSmrg	    func_append tmp_libs " $func_resolve_sysroot_result"
8473549e21daSmrg	  done
8474549e21daSmrg
8475fe4c343aSmrg	  if test no != "$link_all_deplibs"; then
8476549e21daSmrg	    # Add the search paths of all dependency libraries
8477549e21daSmrg	    for deplib in $dependency_libs; do
8478549e21daSmrg	      path=
8479549e21daSmrg	      case $deplib in
8480fe4c343aSmrg	      -L*) path=$deplib ;;
8481549e21daSmrg	      *.la)
84821bedbe3fSmrg	        func_resolve_sysroot "$deplib"
84831bedbe3fSmrg	        deplib=$func_resolve_sysroot_result
8484549e21daSmrg	        func_dirname "$deplib" "" "."
84851bedbe3fSmrg		dir=$func_dirname_result
8486549e21daSmrg		# We need an absolute path.
8487549e21daSmrg		case $dir in
8488fe4c343aSmrg		[\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
8489549e21daSmrg		*)
8490549e21daSmrg		  absdir=`cd "$dir" && pwd`
8491549e21daSmrg		  if test -z "$absdir"; then
8492fe4c343aSmrg		    func_warning "cannot determine absolute directory name of '$dir'"
8493fe4c343aSmrg		    absdir=$dir
8494549e21daSmrg		  fi
8495549e21daSmrg		  ;;
8496549e21daSmrg		esac
8497549e21daSmrg		if $GREP "^installed=no" $deplib > /dev/null; then
8498549e21daSmrg		case $host in
8499549e21daSmrg		*-*-darwin*)
8500549e21daSmrg		  depdepl=
8501fe4c343aSmrg		  eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
8502fe4c343aSmrg		  if test -n "$deplibrary_names"; then
8503fe4c343aSmrg		    for tmp in $deplibrary_names; do
8504549e21daSmrg		      depdepl=$tmp
8505549e21daSmrg		    done
8506fe4c343aSmrg		    if test -f "$absdir/$objdir/$depdepl"; then
8507fe4c343aSmrg		      depdepl=$absdir/$objdir/$depdepl
8508fe4c343aSmrg		      darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
8509549e21daSmrg                      if test -z "$darwin_install_name"; then
8510fe4c343aSmrg                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
8511549e21daSmrg                      fi
8512fe4c343aSmrg		      func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
8513fe4c343aSmrg		      func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
8514549e21daSmrg		      path=
8515549e21daSmrg		    fi
8516549e21daSmrg		  fi
8517549e21daSmrg		  ;;
8518549e21daSmrg		*)
8519fe4c343aSmrg		  path=-L$absdir/$objdir
8520549e21daSmrg		  ;;
8521549e21daSmrg		esac
8522549e21daSmrg		else
8523fe4c343aSmrg		  eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
8524549e21daSmrg		  test -z "$libdir" && \
8525fe4c343aSmrg		    func_fatal_error "'$deplib' is not a valid libtool archive"
8526549e21daSmrg		  test "$absdir" != "$libdir" && \
8527fe4c343aSmrg		    func_warning "'$deplib' seems to be moved"
8528549e21daSmrg
8529fe4c343aSmrg		  path=-L$absdir
8530549e21daSmrg		fi
8531549e21daSmrg		;;
8532549e21daSmrg	      esac
8533549e21daSmrg	      case " $deplibs " in
8534549e21daSmrg	      *" $path "*) ;;
8535549e21daSmrg	      *) deplibs="$path $deplibs" ;;
8536549e21daSmrg	      esac
8537549e21daSmrg	    done
8538549e21daSmrg	  fi # link_all_deplibs != no
8539549e21daSmrg	fi # linkmode = lib
8540549e21daSmrg      done # for deplib in $libs
8541fe4c343aSmrg      if test link = "$pass"; then
8542fe4c343aSmrg	if test prog = "$linkmode"; then
8543549e21daSmrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
8544549e21daSmrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
8545549e21daSmrg	else
8546549e21daSmrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8547549e21daSmrg	fi
8548549e21daSmrg      fi
8549fe4c343aSmrg      dependency_libs=$newdependency_libs
8550fe4c343aSmrg      if test dlpreopen = "$pass"; then
8551549e21daSmrg	# Link the dlpreopened libraries before other libraries
8552549e21daSmrg	for deplib in $save_deplibs; do
8553549e21daSmrg	  deplibs="$deplib $deplibs"
8554549e21daSmrg	done
8555549e21daSmrg      fi
8556fe4c343aSmrg      if test dlopen != "$pass"; then
8557fe4c343aSmrg	test conv = "$pass" || {
8558549e21daSmrg	  # Make sure lib_search_path contains only unique directories.
8559549e21daSmrg	  lib_search_path=
8560549e21daSmrg	  for dir in $newlib_search_path; do
8561549e21daSmrg	    case "$lib_search_path " in
8562549e21daSmrg	    *" $dir "*) ;;
85631bedbe3fSmrg	    *) func_append lib_search_path " $dir" ;;
8564549e21daSmrg	    esac
8565549e21daSmrg	  done
8566549e21daSmrg	  newlib_search_path=
8567fe4c343aSmrg	}
8568549e21daSmrg
8569fe4c343aSmrg	if test prog,link = "$linkmode,$pass"; then
8570549e21daSmrg	  vars="compile_deplibs finalize_deplibs"
8571fe4c343aSmrg	else
8572fe4c343aSmrg	  vars=deplibs
8573549e21daSmrg	fi
8574549e21daSmrg	for var in $vars dependency_libs; do
8575549e21daSmrg	  # Add libraries to $var in reverse order
8576549e21daSmrg	  eval tmp_libs=\"\$$var\"
8577549e21daSmrg	  new_libs=
8578549e21daSmrg	  for deplib in $tmp_libs; do
8579549e21daSmrg	    # FIXME: Pedantically, this is the right thing to do, so
8580549e21daSmrg	    #        that some nasty dependency loop isn't accidentally
8581549e21daSmrg	    #        broken:
8582549e21daSmrg	    #new_libs="$deplib $new_libs"
8583549e21daSmrg	    # Pragmatically, this seems to cause very few problems in
8584549e21daSmrg	    # practice:
8585549e21daSmrg	    case $deplib in
8586549e21daSmrg	    -L*) new_libs="$deplib $new_libs" ;;
8587549e21daSmrg	    -R*) ;;
8588549e21daSmrg	    *)
8589549e21daSmrg	      # And here is the reason: when a library appears more
8590549e21daSmrg	      # than once as an explicit dependence of a library, or
8591549e21daSmrg	      # is implicitly linked in more than once by the
8592549e21daSmrg	      # compiler, it is considered special, and multiple
8593549e21daSmrg	      # occurrences thereof are not removed.  Compare this
8594549e21daSmrg	      # with having the same library being listed as a
8595549e21daSmrg	      # dependency of multiple other libraries: in this case,
8596549e21daSmrg	      # we know (pedantically, we assume) the library does not
8597549e21daSmrg	      # need to be listed more than once, so we keep only the
8598549e21daSmrg	      # last copy.  This is not always right, but it is rare
8599549e21daSmrg	      # enough that we require users that really mean to play
8600549e21daSmrg	      # such unportable linking tricks to link the library
8601549e21daSmrg	      # using -Wl,-lname, so that libtool does not consider it
8602549e21daSmrg	      # for duplicate removal.
8603549e21daSmrg	      case " $specialdeplibs " in
8604549e21daSmrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
8605549e21daSmrg	      *)
8606549e21daSmrg		case " $new_libs " in
8607549e21daSmrg		*" $deplib "*) ;;
8608549e21daSmrg		*) new_libs="$deplib $new_libs" ;;
8609549e21daSmrg		esac
8610549e21daSmrg		;;
8611549e21daSmrg	      esac
8612549e21daSmrg	      ;;
8613549e21daSmrg	    esac
8614549e21daSmrg	  done
8615549e21daSmrg	  tmp_libs=
8616549e21daSmrg	  for deplib in $new_libs; do
8617549e21daSmrg	    case $deplib in
8618549e21daSmrg	    -L*)
8619549e21daSmrg	      case " $tmp_libs " in
8620549e21daSmrg	      *" $deplib "*) ;;
86211bedbe3fSmrg	      *) func_append tmp_libs " $deplib" ;;
8622549e21daSmrg	      esac
8623549e21daSmrg	      ;;
86241bedbe3fSmrg	    *) func_append tmp_libs " $deplib" ;;
8625549e21daSmrg	    esac
8626549e21daSmrg	  done
8627549e21daSmrg	  eval $var=\"$tmp_libs\"
8628549e21daSmrg	done # for var
8629549e21daSmrg      fi
8630fe4c343aSmrg
8631fe4c343aSmrg      # Add Sun CC postdeps if required:
8632fe4c343aSmrg      test CXX = "$tagname" && {
8633fe4c343aSmrg        case $host_os in
8634fe4c343aSmrg        linux*)
8635fe4c343aSmrg          case `$CC -V 2>&1 | sed 5q` in
8636fe4c343aSmrg          *Sun\ C*) # Sun C++ 5.9
8637fe4c343aSmrg            func_suncc_cstd_abi
8638fe4c343aSmrg
8639fe4c343aSmrg            if test no != "$suncc_use_cstd_abi"; then
8640fe4c343aSmrg              func_append postdeps ' -library=Cstd -library=Crun'
8641fe4c343aSmrg            fi
8642fe4c343aSmrg            ;;
8643fe4c343aSmrg          esac
8644fe4c343aSmrg          ;;
8645fe4c343aSmrg
8646fe4c343aSmrg        solaris*)
8647fe4c343aSmrg          func_cc_basename "$CC"
8648fe4c343aSmrg          case $func_cc_basename_result in
8649fe4c343aSmrg          CC* | sunCC*)
8650fe4c343aSmrg            func_suncc_cstd_abi
8651fe4c343aSmrg
8652fe4c343aSmrg            if test no != "$suncc_use_cstd_abi"; then
8653fe4c343aSmrg              func_append postdeps ' -library=Cstd -library=Crun'
8654fe4c343aSmrg            fi
8655fe4c343aSmrg            ;;
8656fe4c343aSmrg          esac
8657fe4c343aSmrg          ;;
8658fe4c343aSmrg        esac
8659fe4c343aSmrg      }
8660fe4c343aSmrg
8661549e21daSmrg      # Last step: remove runtime libs from dependency_libs
8662549e21daSmrg      # (they stay in deplibs)
8663549e21daSmrg      tmp_libs=
8664fe4c343aSmrg      for i in $dependency_libs; do
8665549e21daSmrg	case " $predeps $postdeps $compiler_lib_search_path " in
8666549e21daSmrg	*" $i "*)
8667fe4c343aSmrg	  i=
8668549e21daSmrg	  ;;
8669549e21daSmrg	esac
8670fe4c343aSmrg	if test -n "$i"; then
86711bedbe3fSmrg	  func_append tmp_libs " $i"
8672549e21daSmrg	fi
8673549e21daSmrg      done
8674549e21daSmrg      dependency_libs=$tmp_libs
8675549e21daSmrg    done # for pass
8676fe4c343aSmrg    if test prog = "$linkmode"; then
8677fe4c343aSmrg      dlfiles=$newdlfiles
8678549e21daSmrg    fi
8679fe4c343aSmrg    if test prog = "$linkmode" || test lib = "$linkmode"; then
8680fe4c343aSmrg      dlprefiles=$newdlprefiles
8681549e21daSmrg    fi
8682549e21daSmrg
8683549e21daSmrg    case $linkmode in
8684549e21daSmrg    oldlib)
8685fe4c343aSmrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
8686fe4c343aSmrg	func_warning "'-dlopen' is ignored for archives"
8687549e21daSmrg      fi
8688549e21daSmrg
8689549e21daSmrg      case " $deplibs" in
8690549e21daSmrg      *\ -l* | *\ -L*)
8691fe4c343aSmrg	func_warning "'-l' and '-L' are ignored for archives" ;;
8692549e21daSmrg      esac
8693549e21daSmrg
8694549e21daSmrg      test -n "$rpath" && \
8695fe4c343aSmrg	func_warning "'-rpath' is ignored for archives"
8696549e21daSmrg
8697549e21daSmrg      test -n "$xrpath" && \
8698fe4c343aSmrg	func_warning "'-R' is ignored for archives"
8699549e21daSmrg
8700549e21daSmrg      test -n "$vinfo" && \
8701fe4c343aSmrg	func_warning "'-version-info/-version-number' is ignored for archives"
8702549e21daSmrg
8703549e21daSmrg      test -n "$release" && \
8704fe4c343aSmrg	func_warning "'-release' is ignored for archives"
8705549e21daSmrg
8706549e21daSmrg      test -n "$export_symbols$export_symbols_regex" && \
8707fe4c343aSmrg	func_warning "'-export-symbols' is ignored for archives"
8708549e21daSmrg
8709549e21daSmrg      # Now set the variables for building old libraries.
8710549e21daSmrg      build_libtool_libs=no
8711fe4c343aSmrg      oldlibs=$output
87121bedbe3fSmrg      func_append objs "$old_deplibs"
8713549e21daSmrg      ;;
8714549e21daSmrg
8715549e21daSmrg    lib)
8716fe4c343aSmrg      # Make sure we only generate libraries of the form 'libNAME.la'.
8717549e21daSmrg      case $outputname in
8718549e21daSmrg      lib*)
8719549e21daSmrg	func_stripname 'lib' '.la' "$outputname"
8720549e21daSmrg	name=$func_stripname_result
8721549e21daSmrg	eval shared_ext=\"$shrext_cmds\"
8722549e21daSmrg	eval libname=\"$libname_spec\"
8723549e21daSmrg	;;
8724549e21daSmrg      *)
8725fe4c343aSmrg	test no = "$module" \
8726fe4c343aSmrg	  && func_fatal_help "libtool library '$output' must begin with 'lib'"
8727549e21daSmrg
8728fe4c343aSmrg	if test no != "$need_lib_prefix"; then
8729549e21daSmrg	  # Add the "lib" prefix for modules if required
8730549e21daSmrg	  func_stripname '' '.la' "$outputname"
8731549e21daSmrg	  name=$func_stripname_result
8732549e21daSmrg	  eval shared_ext=\"$shrext_cmds\"
8733549e21daSmrg	  eval libname=\"$libname_spec\"
8734549e21daSmrg	else
8735549e21daSmrg	  func_stripname '' '.la' "$outputname"
8736549e21daSmrg	  libname=$func_stripname_result
8737549e21daSmrg	fi
8738549e21daSmrg	;;
8739549e21daSmrg      esac
8740549e21daSmrg
8741549e21daSmrg      if test -n "$objs"; then
8742fe4c343aSmrg	if test pass_all != "$deplibs_check_method"; then
8743fe4c343aSmrg	  func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
8744549e21daSmrg	else
8745549e21daSmrg	  echo
8746549e21daSmrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
8747549e21daSmrg	  $ECHO "*** objects $objs is not portable!"
87481bedbe3fSmrg	  func_append libobjs " $objs"
8749549e21daSmrg	fi
8750549e21daSmrg      fi
8751549e21daSmrg
8752fe4c343aSmrg      test no = "$dlself" \
8753fe4c343aSmrg	|| func_warning "'-dlopen self' is ignored for libtool libraries"
8754549e21daSmrg
8755549e21daSmrg      set dummy $rpath
8756549e21daSmrg      shift
8757fe4c343aSmrg      test 1 -lt "$#" \
8758fe4c343aSmrg	&& func_warning "ignoring multiple '-rpath's for a libtool library"
8759549e21daSmrg
8760fe4c343aSmrg      install_libdir=$1
8761549e21daSmrg
8762549e21daSmrg      oldlibs=
8763549e21daSmrg      if test -z "$rpath"; then
8764fe4c343aSmrg	if test yes = "$build_libtool_libs"; then
8765549e21daSmrg	  # Building a libtool convenience library.
8766fe4c343aSmrg	  # Some compilers have problems with a '.al' extension so
8767549e21daSmrg	  # convenience libraries should have the same extension an
8768549e21daSmrg	  # archive normally would.
8769549e21daSmrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
8770549e21daSmrg	  build_libtool_libs=convenience
8771549e21daSmrg	  build_old_libs=yes
8772549e21daSmrg	fi
8773549e21daSmrg
8774549e21daSmrg	test -n "$vinfo" && \
8775fe4c343aSmrg	  func_warning "'-version-info/-version-number' is ignored for convenience libraries"
8776549e21daSmrg
8777549e21daSmrg	test -n "$release" && \
8778fe4c343aSmrg	  func_warning "'-release' is ignored for convenience libraries"
8779549e21daSmrg      else
8780549e21daSmrg
8781549e21daSmrg	# Parse the version information argument.
8782fe4c343aSmrg	save_ifs=$IFS; IFS=:
8783549e21daSmrg	set dummy $vinfo 0 0 0
8784549e21daSmrg	shift
8785fe4c343aSmrg	IFS=$save_ifs
8786549e21daSmrg
8787549e21daSmrg	test -n "$7" && \
8788fe4c343aSmrg	  func_fatal_help "too many parameters to '-version-info'"
8789549e21daSmrg
8790549e21daSmrg	# convert absolute version numbers to libtool ages
8791549e21daSmrg	# this retains compatibility with .la files and attempts
8792549e21daSmrg	# to make the code below a bit more comprehensible
8793549e21daSmrg
8794549e21daSmrg	case $vinfo_number in
8795549e21daSmrg	yes)
8796fe4c343aSmrg	  number_major=$1
8797fe4c343aSmrg	  number_minor=$2
8798fe4c343aSmrg	  number_revision=$3
8799549e21daSmrg	  #
8800549e21daSmrg	  # There are really only two kinds -- those that
8801549e21daSmrg	  # use the current revision as the major version
8802549e21daSmrg	  # and those that subtract age and use age as
8803549e21daSmrg	  # a minor version.  But, then there is irix
8804fe4c343aSmrg	  # that has an extra 1 added just for fun
8805549e21daSmrg	  #
8806549e21daSmrg	  case $version_type in
88071bedbe3fSmrg	  # correct linux to gnu/linux during the next big refactor
8808fe4c343aSmrg	  darwin|freebsd-elf|linux|osf|windows|none)
8809549e21daSmrg	    func_arith $number_major + $number_minor
8810549e21daSmrg	    current=$func_arith_result
8811fe4c343aSmrg	    age=$number_minor
8812fe4c343aSmrg	    revision=$number_revision
8813549e21daSmrg	    ;;
8814fe4c343aSmrg	  freebsd-aout|qnx|sunos)
8815fe4c343aSmrg	    current=$number_major
8816fe4c343aSmrg	    revision=$number_minor
8817fe4c343aSmrg	    age=0
8818549e21daSmrg	    ;;
8819549e21daSmrg	  irix|nonstopux)
8820549e21daSmrg	    func_arith $number_major + $number_minor
8821549e21daSmrg	    current=$func_arith_result
8822fe4c343aSmrg	    age=$number_minor
8823fe4c343aSmrg	    revision=$number_minor
8824549e21daSmrg	    lt_irix_increment=no
8825549e21daSmrg	    ;;
8826549e21daSmrg	  esac
8827549e21daSmrg	  ;;
8828549e21daSmrg	no)
8829fe4c343aSmrg	  current=$1
8830fe4c343aSmrg	  revision=$2
8831fe4c343aSmrg	  age=$3
8832549e21daSmrg	  ;;
8833549e21daSmrg	esac
8834549e21daSmrg
8835549e21daSmrg	# Check that each of the things are valid numbers.
8836549e21daSmrg	case $current in
8837549e21daSmrg	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]) ;;
8838549e21daSmrg	*)
8839fe4c343aSmrg	  func_error "CURRENT '$current' must be a nonnegative integer"
8840fe4c343aSmrg	  func_fatal_error "'$vinfo' is not valid version information"
8841549e21daSmrg	  ;;
8842549e21daSmrg	esac
8843549e21daSmrg
8844549e21daSmrg	case $revision in
8845549e21daSmrg	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]) ;;
8846549e21daSmrg	*)
8847fe4c343aSmrg	  func_error "REVISION '$revision' must be a nonnegative integer"
8848fe4c343aSmrg	  func_fatal_error "'$vinfo' is not valid version information"
8849549e21daSmrg	  ;;
8850549e21daSmrg	esac
8851549e21daSmrg
8852549e21daSmrg	case $age in
8853549e21daSmrg	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]) ;;
8854549e21daSmrg	*)
8855fe4c343aSmrg	  func_error "AGE '$age' must be a nonnegative integer"
8856fe4c343aSmrg	  func_fatal_error "'$vinfo' is not valid version information"
8857549e21daSmrg	  ;;
8858549e21daSmrg	esac
8859549e21daSmrg
8860549e21daSmrg	if test "$age" -gt "$current"; then
8861fe4c343aSmrg	  func_error "AGE '$age' is greater than the current interface number '$current'"
8862fe4c343aSmrg	  func_fatal_error "'$vinfo' is not valid version information"
8863549e21daSmrg	fi
8864549e21daSmrg
8865549e21daSmrg	# Calculate the version variables.
8866549e21daSmrg	major=
8867549e21daSmrg	versuffix=
8868549e21daSmrg	verstring=
8869549e21daSmrg	case $version_type in
8870549e21daSmrg	none) ;;
8871549e21daSmrg
8872549e21daSmrg	darwin)
8873549e21daSmrg	  # Like Linux, but with the current version available in
8874549e21daSmrg	  # verstring for coding it into the library header
8875549e21daSmrg	  func_arith $current - $age
8876549e21daSmrg	  major=.$func_arith_result
8877fe4c343aSmrg	  versuffix=$major.$age.$revision
8878549e21daSmrg	  # Darwin ld doesn't like 0 for these options...
8879549e21daSmrg	  func_arith $current + 1
8880549e21daSmrg	  minor_current=$func_arith_result
8881fe4c343aSmrg	  xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
8882549e21daSmrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
8883fe4c343aSmrg          # On Darwin other compilers
8884fe4c343aSmrg          case $CC in
8885fe4c343aSmrg              nagfor*)
8886fe4c343aSmrg                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
8887fe4c343aSmrg                  ;;
8888fe4c343aSmrg              *)
8889fe4c343aSmrg                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
8890fe4c343aSmrg                  ;;
8891fe4c343aSmrg          esac
8892549e21daSmrg	  ;;
8893549e21daSmrg
8894549e21daSmrg	freebsd-aout)
8895fe4c343aSmrg	  major=.$current
8896fe4c343aSmrg	  versuffix=.$current.$revision
8897549e21daSmrg	  ;;
8898549e21daSmrg
8899549e21daSmrg	freebsd-elf)
8900fe4c343aSmrg	  func_arith $current - $age
8901fe4c343aSmrg	  major=.$func_arith_result
8902fe4c343aSmrg	  versuffix=$major.$age.$revision
8903549e21daSmrg	  ;;
8904549e21daSmrg
8905549e21daSmrg	irix | nonstopux)
8906fe4c343aSmrg	  if test no = "$lt_irix_increment"; then
8907549e21daSmrg	    func_arith $current - $age
8908549e21daSmrg	  else
8909549e21daSmrg	    func_arith $current - $age + 1
8910549e21daSmrg	  fi
8911549e21daSmrg	  major=$func_arith_result
8912549e21daSmrg
8913549e21daSmrg	  case $version_type in
8914549e21daSmrg	    nonstopux) verstring_prefix=nonstopux ;;
8915549e21daSmrg	    *)         verstring_prefix=sgi ;;
8916549e21daSmrg	  esac
8917fe4c343aSmrg	  verstring=$verstring_prefix$major.$revision
8918549e21daSmrg
8919549e21daSmrg	  # Add in all the interfaces that we are compatible with.
8920549e21daSmrg	  loop=$revision
8921fe4c343aSmrg	  while test 0 -ne "$loop"; do
8922549e21daSmrg	    func_arith $revision - $loop
8923549e21daSmrg	    iface=$func_arith_result
8924549e21daSmrg	    func_arith $loop - 1
8925549e21daSmrg	    loop=$func_arith_result
8926fe4c343aSmrg	    verstring=$verstring_prefix$major.$iface:$verstring
8927549e21daSmrg	  done
8928549e21daSmrg
8929fe4c343aSmrg	  # Before this point, $major must not contain '.'.
8930549e21daSmrg	  major=.$major
8931fe4c343aSmrg	  versuffix=$major.$revision
8932549e21daSmrg	  ;;
8933549e21daSmrg
89341bedbe3fSmrg	linux) # correct to gnu/linux during the next big refactor
8935549e21daSmrg	  func_arith $current - $age
8936549e21daSmrg	  major=.$func_arith_result
8937fe4c343aSmrg	  versuffix=$major.$age.$revision
8938549e21daSmrg	  ;;
8939549e21daSmrg
8940549e21daSmrg	osf)
8941549e21daSmrg	  func_arith $current - $age
8942549e21daSmrg	  major=.$func_arith_result
8943fe4c343aSmrg	  versuffix=.$current.$age.$revision
8944fe4c343aSmrg	  verstring=$current.$age.$revision
8945549e21daSmrg
8946549e21daSmrg	  # Add in all the interfaces that we are compatible with.
8947549e21daSmrg	  loop=$age
8948fe4c343aSmrg	  while test 0 -ne "$loop"; do
8949549e21daSmrg	    func_arith $current - $loop
8950549e21daSmrg	    iface=$func_arith_result
8951549e21daSmrg	    func_arith $loop - 1
8952549e21daSmrg	    loop=$func_arith_result
8953fe4c343aSmrg	    verstring=$verstring:$iface.0
8954549e21daSmrg	  done
8955549e21daSmrg
8956549e21daSmrg	  # Make executables depend on our current version.
8957fe4c343aSmrg	  func_append verstring ":$current.0"
8958549e21daSmrg	  ;;
8959549e21daSmrg
8960549e21daSmrg	qnx)
8961fe4c343aSmrg	  major=.$current
8962fe4c343aSmrg	  versuffix=.$current
8963fe4c343aSmrg	  ;;
8964fe4c343aSmrg
8965fe4c343aSmrg	sco)
8966fe4c343aSmrg	  major=.$current
8967fe4c343aSmrg	  versuffix=.$current
8968549e21daSmrg	  ;;
8969549e21daSmrg
8970549e21daSmrg	sunos)
8971fe4c343aSmrg	  major=.$current
8972fe4c343aSmrg	  versuffix=.$current.$revision
8973549e21daSmrg	  ;;
8974549e21daSmrg
8975549e21daSmrg	windows)
8976549e21daSmrg	  # Use '-' rather than '.', since we only want one
8977fe4c343aSmrg	  # extension on DOS 8.3 file systems.
8978549e21daSmrg	  func_arith $current - $age
8979549e21daSmrg	  major=$func_arith_result
8980fe4c343aSmrg	  versuffix=-$major
8981549e21daSmrg	  ;;
8982549e21daSmrg
8983549e21daSmrg	*)
8984fe4c343aSmrg	  func_fatal_configuration "unknown library version type '$version_type'"
8985549e21daSmrg	  ;;
8986549e21daSmrg	esac
8987549e21daSmrg
8988549e21daSmrg	# Clear the version info if we defaulted, and they specified a release.
8989549e21daSmrg	if test -z "$vinfo" && test -n "$release"; then
8990549e21daSmrg	  major=
8991549e21daSmrg	  case $version_type in
8992549e21daSmrg	  darwin)
8993549e21daSmrg	    # we can't check for "0.0" in archive_cmds due to quoting
8994549e21daSmrg	    # problems, so we reset it completely
8995549e21daSmrg	    verstring=
8996549e21daSmrg	    ;;
8997549e21daSmrg	  *)
8998fe4c343aSmrg	    verstring=0.0
8999549e21daSmrg	    ;;
9000549e21daSmrg	  esac
9001fe4c343aSmrg	  if test no = "$need_version"; then
9002549e21daSmrg	    versuffix=
9003549e21daSmrg	  else
9004fe4c343aSmrg	    versuffix=.0.0
9005549e21daSmrg	  fi
9006549e21daSmrg	fi
9007549e21daSmrg
9008549e21daSmrg	# Remove version info from name if versioning should be avoided
9009fe4c343aSmrg	if test yes,no = "$avoid_version,$need_version"; then
9010549e21daSmrg	  major=
9011549e21daSmrg	  versuffix=
9012fe4c343aSmrg	  verstring=
9013549e21daSmrg	fi
9014549e21daSmrg
9015549e21daSmrg	# Check to see if the archive will have undefined symbols.
9016fe4c343aSmrg	if test yes = "$allow_undefined"; then
9017fe4c343aSmrg	  if test unsupported = "$allow_undefined_flag"; then
9018fe4c343aSmrg	    if test yes = "$build_old_libs"; then
9019fe4c343aSmrg	      func_warning "undefined symbols not allowed in $host shared libraries; building static only"
9020fe4c343aSmrg	      build_libtool_libs=no
9021fe4c343aSmrg	    else
9022fe4c343aSmrg	      func_fatal_error "can't build $host shared library unless -no-undefined is specified"
9023fe4c343aSmrg	    fi
9024549e21daSmrg	  fi
9025549e21daSmrg	else
9026549e21daSmrg	  # Don't allow undefined symbols.
9027fe4c343aSmrg	  allow_undefined_flag=$no_undefined_flag
9028549e21daSmrg	fi
9029549e21daSmrg
9030549e21daSmrg      fi
9031549e21daSmrg
9032fe4c343aSmrg      func_generate_dlsyms "$libname" "$libname" :
90331bedbe3fSmrg      func_append libobjs " $symfileobj"
9034fe4c343aSmrg      test " " = "$libobjs" && libobjs=
9035549e21daSmrg
9036fe4c343aSmrg      if test relink != "$opt_mode"; then
9037549e21daSmrg	# Remove our outputs, but don't remove object files since they
9038549e21daSmrg	# may have been created when compiling PIC objects.
9039549e21daSmrg	removelist=
9040549e21daSmrg	tempremovelist=`$ECHO "$output_objdir/*"`
9041549e21daSmrg	for p in $tempremovelist; do
9042549e21daSmrg	  case $p in
9043549e21daSmrg	    *.$objext | *.gcno)
9044549e21daSmrg	       ;;
9045fe4c343aSmrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
9046fe4c343aSmrg	       if test -n "$precious_files_regex"; then
9047549e21daSmrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
9048549e21daSmrg		 then
9049549e21daSmrg		   continue
9050549e21daSmrg		 fi
9051549e21daSmrg	       fi
90521bedbe3fSmrg	       func_append removelist " $p"
9053549e21daSmrg	       ;;
9054549e21daSmrg	    *) ;;
9055549e21daSmrg	  esac
9056549e21daSmrg	done
9057549e21daSmrg	test -n "$removelist" && \
9058549e21daSmrg	  func_show_eval "${RM}r \$removelist"
9059549e21daSmrg      fi
9060549e21daSmrg
9061549e21daSmrg      # Now set the variables for building old libraries.
9062fe4c343aSmrg      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
90631bedbe3fSmrg	func_append oldlibs " $output_objdir/$libname.$libext"
9064549e21daSmrg
9065549e21daSmrg	# Transform .lo files to .o files.
9066fe4c343aSmrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
9067549e21daSmrg      fi
9068549e21daSmrg
9069549e21daSmrg      # Eliminate all temporary directories.
9070549e21daSmrg      #for path in $notinst_path; do
9071549e21daSmrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
9072549e21daSmrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
9073549e21daSmrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
9074549e21daSmrg      #done
9075549e21daSmrg
9076549e21daSmrg      if test -n "$xrpath"; then
9077549e21daSmrg	# If the user specified any rpath flags, then add them.
9078549e21daSmrg	temp_xrpath=
9079549e21daSmrg	for libdir in $xrpath; do
90801bedbe3fSmrg	  func_replace_sysroot "$libdir"
90811bedbe3fSmrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
9082549e21daSmrg	  case "$finalize_rpath " in
9083549e21daSmrg	  *" $libdir "*) ;;
90841bedbe3fSmrg	  *) func_append finalize_rpath " $libdir" ;;
9085549e21daSmrg	  esac
9086549e21daSmrg	done
9087fe4c343aSmrg	if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
9088549e21daSmrg	  dependency_libs="$temp_xrpath $dependency_libs"
9089549e21daSmrg	fi
9090549e21daSmrg      fi
9091549e21daSmrg
9092549e21daSmrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
9093fe4c343aSmrg      old_dlfiles=$dlfiles
9094549e21daSmrg      dlfiles=
9095549e21daSmrg      for lib in $old_dlfiles; do
9096549e21daSmrg	case " $dlprefiles $dlfiles " in
9097549e21daSmrg	*" $lib "*) ;;
90981bedbe3fSmrg	*) func_append dlfiles " $lib" ;;
9099549e21daSmrg	esac
9100549e21daSmrg      done
9101549e21daSmrg
9102549e21daSmrg      # Make sure dlprefiles contains only unique files
9103fe4c343aSmrg      old_dlprefiles=$dlprefiles
9104549e21daSmrg      dlprefiles=
9105549e21daSmrg      for lib in $old_dlprefiles; do
9106549e21daSmrg	case "$dlprefiles " in
9107549e21daSmrg	*" $lib "*) ;;
91081bedbe3fSmrg	*) func_append dlprefiles " $lib" ;;
9109549e21daSmrg	esac
9110549e21daSmrg      done
9111549e21daSmrg
9112fe4c343aSmrg      if test yes = "$build_libtool_libs"; then
9113549e21daSmrg	if test -n "$rpath"; then
9114549e21daSmrg	  case $host in
9115549e21daSmrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
9116549e21daSmrg	    # these systems don't actually have a c library (as such)!
9117549e21daSmrg	    ;;
9118549e21daSmrg	  *-*-rhapsody* | *-*-darwin1.[012])
9119549e21daSmrg	    # Rhapsody C library is in the System framework
91201bedbe3fSmrg	    func_append deplibs " System.ltframework"
9121549e21daSmrg	    ;;
9122549e21daSmrg	  *-*-netbsd*)
9123549e21daSmrg	    # Don't link with libc until the a.out ld.so is fixed.
9124549e21daSmrg	    ;;
9125549e21daSmrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
9126549e21daSmrg	    # Do not include libc due to us having libc/libc_r.
9127549e21daSmrg	    ;;
9128549e21daSmrg	  *-*-sco3.2v5* | *-*-sco5v6*)
9129549e21daSmrg	    # Causes problems with __ctype
9130549e21daSmrg	    ;;
9131549e21daSmrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
9132549e21daSmrg	    # Compiler inserts libc in the correct place for threads to work
9133549e21daSmrg	    ;;
9134549e21daSmrg	  *)
9135549e21daSmrg	    # Add libc to deplibs on all other systems if necessary.
9136fe4c343aSmrg	    if test yes = "$build_libtool_need_lc"; then
91371bedbe3fSmrg	      func_append deplibs " -lc"
9138549e21daSmrg	    fi
9139549e21daSmrg	    ;;
9140549e21daSmrg	  esac
9141549e21daSmrg	fi
9142549e21daSmrg
9143549e21daSmrg	# Transform deplibs into only deplibs that can be linked in shared.
9144549e21daSmrg	name_save=$name
9145549e21daSmrg	libname_save=$libname
9146549e21daSmrg	release_save=$release
9147549e21daSmrg	versuffix_save=$versuffix
9148549e21daSmrg	major_save=$major
9149549e21daSmrg	# I'm not sure if I'm treating the release correctly.  I think
9150549e21daSmrg	# release should show up in the -l (ie -lgmp5) so we don't want to
9151549e21daSmrg	# add it in twice.  Is that correct?
9152fe4c343aSmrg	release=
9153fe4c343aSmrg	versuffix=
9154fe4c343aSmrg	major=
9155549e21daSmrg	newdeplibs=
9156549e21daSmrg	droppeddeps=no
9157549e21daSmrg	case $deplibs_check_method in
9158549e21daSmrg	pass_all)
9159549e21daSmrg	  # Don't check for shared/static.  Everything works.
9160549e21daSmrg	  # This might be a little naive.  We might want to check
9161549e21daSmrg	  # whether the library exists or not.  But this is on
9162549e21daSmrg	  # osf3 & osf4 and I'm not really sure... Just
9163549e21daSmrg	  # implementing what was already the behavior.
9164549e21daSmrg	  newdeplibs=$deplibs
9165549e21daSmrg	  ;;
9166549e21daSmrg	test_compile)
9167549e21daSmrg	  # This code stresses the "libraries are programs" paradigm to its
9168549e21daSmrg	  # limits. Maybe even breaks it.  We compile a program, linking it
9169549e21daSmrg	  # against the deplibs as a proxy for the library.  Then we can check
9170549e21daSmrg	  # whether they linked in statically or dynamically with ldd.
9171549e21daSmrg	  $opt_dry_run || $RM conftest.c
9172549e21daSmrg	  cat > conftest.c <<EOF
9173549e21daSmrg	  int main() { return 0; }
9174549e21daSmrgEOF
9175549e21daSmrg	  $opt_dry_run || $RM conftest
9176549e21daSmrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
9177549e21daSmrg	    ldd_output=`ldd conftest`
9178549e21daSmrg	    for i in $deplibs; do
9179549e21daSmrg	      case $i in
9180549e21daSmrg	      -l*)
9181549e21daSmrg		func_stripname -l '' "$i"
9182549e21daSmrg		name=$func_stripname_result
9183fe4c343aSmrg		if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9184549e21daSmrg		  case " $predeps $postdeps " in
9185549e21daSmrg		  *" $i "*)
91861bedbe3fSmrg		    func_append newdeplibs " $i"
9187fe4c343aSmrg		    i=
9188549e21daSmrg		    ;;
9189549e21daSmrg		  esac
9190549e21daSmrg		fi
9191fe4c343aSmrg		if test -n "$i"; then
9192549e21daSmrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
9193549e21daSmrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9194549e21daSmrg		  set dummy $deplib_matches; shift
9195549e21daSmrg		  deplib_match=$1
9196fe4c343aSmrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
91971bedbe3fSmrg		    func_append newdeplibs " $i"
9198549e21daSmrg		  else
9199549e21daSmrg		    droppeddeps=yes
9200549e21daSmrg		    echo
9201549e21daSmrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
9202549e21daSmrg		    echo "*** I have the capability to make that library automatically link in when"
9203549e21daSmrg		    echo "*** you link to this library.  But I can only do this if you have a"
9204549e21daSmrg		    echo "*** shared version of the library, which I believe you do not have"
9205549e21daSmrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
9206549e21daSmrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
9207549e21daSmrg		  fi
9208549e21daSmrg		fi
9209549e21daSmrg		;;
9210549e21daSmrg	      *)
92111bedbe3fSmrg		func_append newdeplibs " $i"
9212549e21daSmrg		;;
9213549e21daSmrg	      esac
9214549e21daSmrg	    done
9215549e21daSmrg	  else
9216549e21daSmrg	    # Error occurred in the first compile.  Let's try to salvage
9217549e21daSmrg	    # the situation: Compile a separate program for each library.
9218549e21daSmrg	    for i in $deplibs; do
9219549e21daSmrg	      case $i in
9220549e21daSmrg	      -l*)
9221549e21daSmrg		func_stripname -l '' "$i"
9222549e21daSmrg		name=$func_stripname_result
9223549e21daSmrg		$opt_dry_run || $RM conftest
9224549e21daSmrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
9225549e21daSmrg		  ldd_output=`ldd conftest`
9226fe4c343aSmrg		  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9227549e21daSmrg		    case " $predeps $postdeps " in
9228549e21daSmrg		    *" $i "*)
92291bedbe3fSmrg		      func_append newdeplibs " $i"
9230fe4c343aSmrg		      i=
9231549e21daSmrg		      ;;
9232549e21daSmrg		    esac
9233549e21daSmrg		  fi
9234fe4c343aSmrg		  if test -n "$i"; then
9235549e21daSmrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
9236549e21daSmrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9237549e21daSmrg		    set dummy $deplib_matches; shift
9238549e21daSmrg		    deplib_match=$1
9239fe4c343aSmrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
92401bedbe3fSmrg		      func_append newdeplibs " $i"
9241549e21daSmrg		    else
9242549e21daSmrg		      droppeddeps=yes
9243549e21daSmrg		      echo
9244549e21daSmrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
9245549e21daSmrg		      echo "*** I have the capability to make that library automatically link in when"
9246549e21daSmrg		      echo "*** you link to this library.  But I can only do this if you have a"
9247549e21daSmrg		      echo "*** shared version of the library, which you do not appear to have"
9248549e21daSmrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
9249549e21daSmrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
9250549e21daSmrg		    fi
9251549e21daSmrg		  fi
9252549e21daSmrg		else
9253549e21daSmrg		  droppeddeps=yes
9254549e21daSmrg		  echo
9255549e21daSmrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
9256549e21daSmrg		  echo "*** make it link in!  You will probably need to install it or some"
9257549e21daSmrg		  echo "*** library that it depends on before this library will be fully"
9258549e21daSmrg		  echo "*** functional.  Installing it before continuing would be even better."
9259549e21daSmrg		fi
9260549e21daSmrg		;;
9261549e21daSmrg	      *)
92621bedbe3fSmrg		func_append newdeplibs " $i"
9263549e21daSmrg		;;
9264549e21daSmrg	      esac
9265549e21daSmrg	    done
9266549e21daSmrg	  fi
9267549e21daSmrg	  ;;
9268549e21daSmrg	file_magic*)
9269549e21daSmrg	  set dummy $deplibs_check_method; shift
9270549e21daSmrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9271549e21daSmrg	  for a_deplib in $deplibs; do
9272549e21daSmrg	    case $a_deplib in
9273549e21daSmrg	    -l*)
9274549e21daSmrg	      func_stripname -l '' "$a_deplib"
9275549e21daSmrg	      name=$func_stripname_result
9276fe4c343aSmrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9277549e21daSmrg		case " $predeps $postdeps " in
9278549e21daSmrg		*" $a_deplib "*)
92791bedbe3fSmrg		  func_append newdeplibs " $a_deplib"
9280fe4c343aSmrg		  a_deplib=
9281549e21daSmrg		  ;;
9282549e21daSmrg		esac
9283549e21daSmrg	      fi
9284fe4c343aSmrg	      if test -n "$a_deplib"; then
9285549e21daSmrg		libname=`eval "\\$ECHO \"$libname_spec\""`
92861bedbe3fSmrg		if test -n "$file_magic_glob"; then
92871bedbe3fSmrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
92881bedbe3fSmrg		else
92891bedbe3fSmrg		  libnameglob=$libname
92901bedbe3fSmrg		fi
9291fe4c343aSmrg		test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
9292549e21daSmrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9293fe4c343aSmrg		  if test yes = "$want_nocaseglob"; then
92941bedbe3fSmrg		    shopt -s nocaseglob
92951bedbe3fSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
92961bedbe3fSmrg		    $nocaseglob
92971bedbe3fSmrg		  else
92981bedbe3fSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
92991bedbe3fSmrg		  fi
9300549e21daSmrg		  for potent_lib in $potential_libs; do
9301549e21daSmrg		      # Follow soft links.
9302549e21daSmrg		      if ls -lLd "$potent_lib" 2>/dev/null |
9303549e21daSmrg			 $GREP " -> " >/dev/null; then
9304549e21daSmrg			continue
9305549e21daSmrg		      fi
9306549e21daSmrg		      # The statement above tries to avoid entering an
9307549e21daSmrg		      # endless loop below, in case of cyclic links.
9308549e21daSmrg		      # We might still enter an endless loop, since a link
9309549e21daSmrg		      # loop can be closed while we follow links,
9310549e21daSmrg		      # but so what?
9311fe4c343aSmrg		      potlib=$potent_lib
9312549e21daSmrg		      while test -h "$potlib" 2>/dev/null; do
9313fe4c343aSmrg			potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
9314549e21daSmrg			case $potliblink in
9315fe4c343aSmrg			[\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
9316fe4c343aSmrg			*) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
9317549e21daSmrg			esac
9318549e21daSmrg		      done
9319549e21daSmrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
9320549e21daSmrg			 $SED -e 10q |
9321549e21daSmrg			 $EGREP "$file_magic_regex" > /dev/null; then
93221bedbe3fSmrg			func_append newdeplibs " $a_deplib"
9323fe4c343aSmrg			a_deplib=
9324549e21daSmrg			break 2
9325549e21daSmrg		      fi
9326549e21daSmrg		  done
9327549e21daSmrg		done
9328549e21daSmrg	      fi
9329fe4c343aSmrg	      if test -n "$a_deplib"; then
9330549e21daSmrg		droppeddeps=yes
9331549e21daSmrg		echo
9332549e21daSmrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
9333549e21daSmrg		echo "*** I have the capability to make that library automatically link in when"
9334549e21daSmrg		echo "*** you link to this library.  But I can only do this if you have a"
9335549e21daSmrg		echo "*** shared version of the library, which you do not appear to have"
9336549e21daSmrg		echo "*** because I did check the linker path looking for a file starting"
9337fe4c343aSmrg		if test -z "$potlib"; then
9338549e21daSmrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
9339549e21daSmrg		else
9340549e21daSmrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
9341549e21daSmrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
9342549e21daSmrg		fi
9343549e21daSmrg	      fi
9344549e21daSmrg	      ;;
9345549e21daSmrg	    *)
9346549e21daSmrg	      # Add a -L argument.
93471bedbe3fSmrg	      func_append newdeplibs " $a_deplib"
9348549e21daSmrg	      ;;
9349549e21daSmrg	    esac
9350549e21daSmrg	  done # Gone through all deplibs.
9351549e21daSmrg	  ;;
9352549e21daSmrg	match_pattern*)
9353549e21daSmrg	  set dummy $deplibs_check_method; shift
9354549e21daSmrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9355549e21daSmrg	  for a_deplib in $deplibs; do
9356549e21daSmrg	    case $a_deplib in
9357549e21daSmrg	    -l*)
9358549e21daSmrg	      func_stripname -l '' "$a_deplib"
9359549e21daSmrg	      name=$func_stripname_result
9360fe4c343aSmrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9361549e21daSmrg		case " $predeps $postdeps " in
9362549e21daSmrg		*" $a_deplib "*)
93631bedbe3fSmrg		  func_append newdeplibs " $a_deplib"
9364fe4c343aSmrg		  a_deplib=
9365549e21daSmrg		  ;;
9366549e21daSmrg		esac
9367549e21daSmrg	      fi
9368fe4c343aSmrg	      if test -n "$a_deplib"; then
9369549e21daSmrg		libname=`eval "\\$ECHO \"$libname_spec\""`
9370549e21daSmrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9371549e21daSmrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
9372549e21daSmrg		  for potent_lib in $potential_libs; do
9373fe4c343aSmrg		    potlib=$potent_lib # see symlink-check above in file_magic test
9374549e21daSmrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
9375549e21daSmrg		       $EGREP "$match_pattern_regex" > /dev/null; then
93761bedbe3fSmrg		      func_append newdeplibs " $a_deplib"
9377fe4c343aSmrg		      a_deplib=
9378549e21daSmrg		      break 2
9379549e21daSmrg		    fi
9380549e21daSmrg		  done
9381549e21daSmrg		done
9382549e21daSmrg	      fi
9383fe4c343aSmrg	      if test -n "$a_deplib"; then
9384549e21daSmrg		droppeddeps=yes
9385549e21daSmrg		echo
9386549e21daSmrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
9387549e21daSmrg		echo "*** I have the capability to make that library automatically link in when"
9388549e21daSmrg		echo "*** you link to this library.  But I can only do this if you have a"
9389549e21daSmrg		echo "*** shared version of the library, which you do not appear to have"
9390549e21daSmrg		echo "*** because I did check the linker path looking for a file starting"
9391fe4c343aSmrg		if test -z "$potlib"; then
9392549e21daSmrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
9393549e21daSmrg		else
9394549e21daSmrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
9395549e21daSmrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
9396549e21daSmrg		fi
9397549e21daSmrg	      fi
9398549e21daSmrg	      ;;
9399549e21daSmrg	    *)
9400549e21daSmrg	      # Add a -L argument.
94011bedbe3fSmrg	      func_append newdeplibs " $a_deplib"
9402549e21daSmrg	      ;;
9403549e21daSmrg	    esac
9404549e21daSmrg	  done # Gone through all deplibs.
9405549e21daSmrg	  ;;
9406549e21daSmrg	none | unknown | *)
9407fe4c343aSmrg	  newdeplibs=
9408549e21daSmrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
9409fe4c343aSmrg	  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9410fe4c343aSmrg	    for i in $predeps $postdeps; do
9411549e21daSmrg	      # can't use Xsed below, because $i might contain '/'
9412fe4c343aSmrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
9413549e21daSmrg	    done
9414549e21daSmrg	  fi
9415549e21daSmrg	  case $tmp_deplibs in
9416549e21daSmrg	  *[!\	\ ]*)
9417549e21daSmrg	    echo
9418fe4c343aSmrg	    if test none = "$deplibs_check_method"; then
9419549e21daSmrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
9420549e21daSmrg	    else
9421549e21daSmrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
9422549e21daSmrg	    fi
9423549e21daSmrg	    echo "*** All declared inter-library dependencies are being dropped."
9424549e21daSmrg	    droppeddeps=yes
9425549e21daSmrg	    ;;
9426549e21daSmrg	  esac
9427549e21daSmrg	  ;;
9428549e21daSmrg	esac
9429549e21daSmrg	versuffix=$versuffix_save
9430549e21daSmrg	major=$major_save
9431549e21daSmrg	release=$release_save
9432549e21daSmrg	libname=$libname_save
9433549e21daSmrg	name=$name_save
9434549e21daSmrg
9435549e21daSmrg	case $host in
9436549e21daSmrg	*-*-rhapsody* | *-*-darwin1.[012])
9437549e21daSmrg	  # On Rhapsody replace the C library with the System framework
9438549e21daSmrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
9439549e21daSmrg	  ;;
9440549e21daSmrg	esac
9441549e21daSmrg
9442fe4c343aSmrg	if test yes = "$droppeddeps"; then
9443fe4c343aSmrg	  if test yes = "$module"; then
9444549e21daSmrg	    echo
9445549e21daSmrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
9446549e21daSmrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
9447549e21daSmrg	    echo "*** a static module, that should work as long as the dlopening"
9448549e21daSmrg	    echo "*** application is linked with the -dlopen flag."
9449549e21daSmrg	    if test -z "$global_symbol_pipe"; then
9450549e21daSmrg	      echo
9451549e21daSmrg	      echo "*** However, this would only work if libtool was able to extract symbol"
9452fe4c343aSmrg	      echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
9453549e21daSmrg	      echo "*** not find such a program.  So, this module is probably useless."
9454fe4c343aSmrg	      echo "*** 'nm' from GNU binutils and a full rebuild may help."
9455549e21daSmrg	    fi
9456fe4c343aSmrg	    if test no = "$build_old_libs"; then
9457fe4c343aSmrg	      oldlibs=$output_objdir/$libname.$libext
9458549e21daSmrg	      build_libtool_libs=module
9459549e21daSmrg	      build_old_libs=yes
9460549e21daSmrg	    else
9461549e21daSmrg	      build_libtool_libs=no
9462549e21daSmrg	    fi
9463549e21daSmrg	  else
9464549e21daSmrg	    echo "*** The inter-library dependencies that have been dropped here will be"
9465549e21daSmrg	    echo "*** automatically added whenever a program is linked with this library"
9466549e21daSmrg	    echo "*** or is declared to -dlopen it."
9467549e21daSmrg
9468fe4c343aSmrg	    if test no = "$allow_undefined"; then
9469549e21daSmrg	      echo
9470549e21daSmrg	      echo "*** Since this library must not contain undefined symbols,"
9471549e21daSmrg	      echo "*** because either the platform does not support them or"
9472549e21daSmrg	      echo "*** it was explicitly requested with -no-undefined,"
9473549e21daSmrg	      echo "*** libtool will only create a static version of it."
9474fe4c343aSmrg	      if test no = "$build_old_libs"; then
9475fe4c343aSmrg		oldlibs=$output_objdir/$libname.$libext
9476549e21daSmrg		build_libtool_libs=module
9477549e21daSmrg		build_old_libs=yes
9478549e21daSmrg	      else
9479549e21daSmrg		build_libtool_libs=no
9480549e21daSmrg	      fi
9481549e21daSmrg	    fi
9482549e21daSmrg	  fi
9483549e21daSmrg	fi
9484549e21daSmrg	# Done checking deplibs!
9485549e21daSmrg	deplibs=$newdeplibs
9486549e21daSmrg      fi
9487549e21daSmrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
9488549e21daSmrg      case $host in
9489549e21daSmrg	*-*-darwin*)
9490549e21daSmrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9491549e21daSmrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9492549e21daSmrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9493549e21daSmrg	  ;;
9494549e21daSmrg      esac
9495549e21daSmrg
9496549e21daSmrg      # move library search paths that coincide with paths to not yet
9497549e21daSmrg      # installed libraries to the beginning of the library search list
9498549e21daSmrg      new_libs=
9499549e21daSmrg      for path in $notinst_path; do
9500549e21daSmrg	case " $new_libs " in
9501549e21daSmrg	*" -L$path/$objdir "*) ;;
9502549e21daSmrg	*)
9503549e21daSmrg	  case " $deplibs " in
9504549e21daSmrg	  *" -L$path/$objdir "*)
95051bedbe3fSmrg	    func_append new_libs " -L$path/$objdir" ;;
9506549e21daSmrg	  esac
9507549e21daSmrg	  ;;
9508549e21daSmrg	esac
9509549e21daSmrg      done
9510549e21daSmrg      for deplib in $deplibs; do
9511549e21daSmrg	case $deplib in
9512549e21daSmrg	-L*)
9513549e21daSmrg	  case " $new_libs " in
9514549e21daSmrg	  *" $deplib "*) ;;
95151bedbe3fSmrg	  *) func_append new_libs " $deplib" ;;
9516549e21daSmrg	  esac
9517549e21daSmrg	  ;;
95181bedbe3fSmrg	*) func_append new_libs " $deplib" ;;
9519549e21daSmrg	esac
9520549e21daSmrg      done
9521fe4c343aSmrg      deplibs=$new_libs
9522549e21daSmrg
9523549e21daSmrg      # All the library-specific variables (install_libdir is set above).
9524549e21daSmrg      library_names=
9525549e21daSmrg      old_library=
9526549e21daSmrg      dlname=
9527ba6a1819Smrg
9528549e21daSmrg      # Test again, we may have decided not to build it any more
9529fe4c343aSmrg      if test yes = "$build_libtool_libs"; then
9530fe4c343aSmrg	# Remove $wl instances when linking with ld.
95311bedbe3fSmrg	# FIXME: should test the right _cmds variable.
95321bedbe3fSmrg	case $archive_cmds in
95331bedbe3fSmrg	  *\$LD\ *) wl= ;;
95341bedbe3fSmrg        esac
9535fe4c343aSmrg	if test yes = "$hardcode_into_libs"; then
9536549e21daSmrg	  # Hardcode the library paths
9537549e21daSmrg	  hardcode_libdirs=
9538549e21daSmrg	  dep_rpath=
9539fe4c343aSmrg	  rpath=$finalize_rpath
9540fe4c343aSmrg	  test relink = "$opt_mode" || rpath=$compile_rpath$rpath
9541549e21daSmrg	  for libdir in $rpath; do
9542549e21daSmrg	    if test -n "$hardcode_libdir_flag_spec"; then
9543549e21daSmrg	      if test -n "$hardcode_libdir_separator"; then
95441bedbe3fSmrg		func_replace_sysroot "$libdir"
95451bedbe3fSmrg		libdir=$func_replace_sysroot_result
9546549e21daSmrg		if test -z "$hardcode_libdirs"; then
9547fe4c343aSmrg		  hardcode_libdirs=$libdir
9548549e21daSmrg		else
9549549e21daSmrg		  # Just accumulate the unique libdirs.
9550549e21daSmrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
9551549e21daSmrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
9552549e21daSmrg		    ;;
9553549e21daSmrg		  *)
95541bedbe3fSmrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
9555549e21daSmrg		    ;;
9556549e21daSmrg		  esac
9557549e21daSmrg		fi
9558549e21daSmrg	      else
9559549e21daSmrg		eval flag=\"$hardcode_libdir_flag_spec\"
95601bedbe3fSmrg		func_append dep_rpath " $flag"
9561549e21daSmrg	      fi
9562549e21daSmrg	    elif test -n "$runpath_var"; then
9563549e21daSmrg	      case "$perm_rpath " in
9564549e21daSmrg	      *" $libdir "*) ;;
95651bedbe3fSmrg	      *) func_append perm_rpath " $libdir" ;;
9566549e21daSmrg	      esac
9567549e21daSmrg	    fi
9568549e21daSmrg	  done
9569549e21daSmrg	  # Substitute the hardcoded libdirs into the rpath.
9570549e21daSmrg	  if test -n "$hardcode_libdir_separator" &&
9571549e21daSmrg	     test -n "$hardcode_libdirs"; then
9572fe4c343aSmrg	    libdir=$hardcode_libdirs
95731bedbe3fSmrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
9574549e21daSmrg	  fi
9575549e21daSmrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
9576549e21daSmrg	    # We should set the runpath_var.
9577549e21daSmrg	    rpath=
9578549e21daSmrg	    for dir in $perm_rpath; do
95791bedbe3fSmrg	      func_append rpath "$dir:"
9580549e21daSmrg	    done
9581549e21daSmrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
9582549e21daSmrg	  fi
9583549e21daSmrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
9584549e21daSmrg	fi
9585ba6a1819Smrg
9586fe4c343aSmrg	shlibpath=$finalize_shlibpath
9587fe4c343aSmrg	test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
9588549e21daSmrg	if test -n "$shlibpath"; then
9589549e21daSmrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
9590549e21daSmrg	fi
9591ba6a1819Smrg
9592549e21daSmrg	# Get the real and link names of the library.
9593549e21daSmrg	eval shared_ext=\"$shrext_cmds\"
9594549e21daSmrg	eval library_names=\"$library_names_spec\"
9595549e21daSmrg	set dummy $library_names
9596549e21daSmrg	shift
9597fe4c343aSmrg	realname=$1
9598549e21daSmrg	shift
9599ba6a1819Smrg
9600549e21daSmrg	if test -n "$soname_spec"; then
9601549e21daSmrg	  eval soname=\"$soname_spec\"
9602549e21daSmrg	else
9603fe4c343aSmrg	  soname=$realname
9604549e21daSmrg	fi
9605549e21daSmrg	if test -z "$dlname"; then
9606549e21daSmrg	  dlname=$soname
9607549e21daSmrg	fi
9608ba6a1819Smrg
9609fe4c343aSmrg	lib=$output_objdir/$realname
9610549e21daSmrg	linknames=
9611549e21daSmrg	for link
9612549e21daSmrg	do
96131bedbe3fSmrg	  func_append linknames " $link"
9614549e21daSmrg	done
9615ba6a1819Smrg
9616549e21daSmrg	# Use standard objects if they are pic
9617549e21daSmrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
9618549e21daSmrg	test "X$libobjs" = "X " && libobjs=
9619ba6a1819Smrg
9620549e21daSmrg	delfiles=
9621549e21daSmrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
9622549e21daSmrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
9623fe4c343aSmrg	  export_symbols=$output_objdir/$libname.uexp
96241bedbe3fSmrg	  func_append delfiles " $export_symbols"
9625549e21daSmrg	fi
9626ba6a1819Smrg
9627549e21daSmrg	orig_export_symbols=
9628549e21daSmrg	case $host_os in
9629549e21daSmrg	cygwin* | mingw* | cegcc*)
9630549e21daSmrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
9631549e21daSmrg	    # exporting using user supplied symfile
9632fe4c343aSmrg	    func_dll_def_p "$export_symbols" || {
9633549e21daSmrg	      # and it's NOT already a .def file. Must figure out
9634549e21daSmrg	      # which of the given symbols are data symbols and tag
9635549e21daSmrg	      # them as such. So, trigger use of export_symbols_cmds.
9636549e21daSmrg	      # export_symbols gets reassigned inside the "prepare
9637549e21daSmrg	      # the list of exported symbols" if statement, so the
9638549e21daSmrg	      # include_expsyms logic still works.
9639fe4c343aSmrg	      orig_export_symbols=$export_symbols
9640549e21daSmrg	      export_symbols=
9641549e21daSmrg	      always_export_symbols=yes
9642fe4c343aSmrg	    }
9643549e21daSmrg	  fi
9644549e21daSmrg	  ;;
9645549e21daSmrg	esac
9646ba6a1819Smrg
9647549e21daSmrg	# Prepare the list of exported symbols
9648549e21daSmrg	if test -z "$export_symbols"; then
9649fe4c343aSmrg	  if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
9650fe4c343aSmrg	    func_verbose "generating symbol list for '$libname.la'"
9651fe4c343aSmrg	    export_symbols=$output_objdir/$libname.exp
9652549e21daSmrg	    $opt_dry_run || $RM $export_symbols
9653549e21daSmrg	    cmds=$export_symbols_cmds
9654fe4c343aSmrg	    save_ifs=$IFS; IFS='~'
96551bedbe3fSmrg	    for cmd1 in $cmds; do
9656fe4c343aSmrg	      IFS=$save_ifs
96571bedbe3fSmrg	      # Take the normal branch if the nm_file_list_spec branch
96581bedbe3fSmrg	      # doesn't work or if tool conversion is not needed.
96591bedbe3fSmrg	      case $nm_file_list_spec~$to_tool_file_cmd in
96601bedbe3fSmrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
96611bedbe3fSmrg		  try_normal_branch=yes
96621bedbe3fSmrg		  eval cmd=\"$cmd1\"
96631bedbe3fSmrg		  func_len " $cmd"
96641bedbe3fSmrg		  len=$func_len_result
96651bedbe3fSmrg		  ;;
96661bedbe3fSmrg		*)
96671bedbe3fSmrg		  try_normal_branch=no
96681bedbe3fSmrg		  ;;
96691bedbe3fSmrg	      esac
9670fe4c343aSmrg	      if test yes = "$try_normal_branch" \
96711bedbe3fSmrg		 && { test "$len" -lt "$max_cmd_len" \
96721bedbe3fSmrg		      || test "$max_cmd_len" -le -1; }
96731bedbe3fSmrg	      then
96741bedbe3fSmrg		func_show_eval "$cmd" 'exit $?'
96751bedbe3fSmrg		skipped_export=false
96761bedbe3fSmrg	      elif test -n "$nm_file_list_spec"; then
96771bedbe3fSmrg		func_basename "$output"
96781bedbe3fSmrg		output_la=$func_basename_result
96791bedbe3fSmrg		save_libobjs=$libobjs
96801bedbe3fSmrg		save_output=$output
9681fe4c343aSmrg		output=$output_objdir/$output_la.nm
96821bedbe3fSmrg		func_to_tool_file "$output"
96831bedbe3fSmrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
96841bedbe3fSmrg		func_append delfiles " $output"
96851bedbe3fSmrg		func_verbose "creating $NM input file list: $output"
96861bedbe3fSmrg		for obj in $save_libobjs; do
96871bedbe3fSmrg		  func_to_tool_file "$obj"
96881bedbe3fSmrg		  $ECHO "$func_to_tool_file_result"
96891bedbe3fSmrg		done > "$output"
96901bedbe3fSmrg		eval cmd=\"$cmd1\"
9691549e21daSmrg		func_show_eval "$cmd" 'exit $?'
96921bedbe3fSmrg		output=$save_output
96931bedbe3fSmrg		libobjs=$save_libobjs
9694549e21daSmrg		skipped_export=false
9695549e21daSmrg	      else
9696549e21daSmrg		# The command line is too long to execute in one step.
9697549e21daSmrg		func_verbose "using reloadable object file for export list..."
9698549e21daSmrg		skipped_export=:
9699549e21daSmrg		# Break out early, otherwise skipped_export may be
9700549e21daSmrg		# set to false by a later but shorter cmd.
9701549e21daSmrg		break
9702549e21daSmrg	      fi
9703549e21daSmrg	    done
9704fe4c343aSmrg	    IFS=$save_ifs
9705fe4c343aSmrg	    if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
9706549e21daSmrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
9707549e21daSmrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
9708549e21daSmrg	    fi
9709549e21daSmrg	  fi
9710549e21daSmrg	fi
9711ba6a1819Smrg
9712549e21daSmrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
9713fe4c343aSmrg	  tmp_export_symbols=$export_symbols
9714fe4c343aSmrg	  test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
9715549e21daSmrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
9716549e21daSmrg	fi
9717ba6a1819Smrg
9718fe4c343aSmrg	if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
9719549e21daSmrg	  # The given exports_symbols file has to be filtered, so filter it.
9720fe4c343aSmrg	  func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
9721549e21daSmrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
9722fe4c343aSmrg	  # 's' commands, which not all seds can handle. GNU sed should be fine
9723549e21daSmrg	  # though. Also, the filter scales superlinearly with the number of
9724549e21daSmrg	  # global variables. join(1) would be nice here, but unfortunately
9725549e21daSmrg	  # isn't a blessed tool.
9726549e21daSmrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
97271bedbe3fSmrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
9728549e21daSmrg	  export_symbols=$output_objdir/$libname.def
9729549e21daSmrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
9730ba6a1819Smrg	fi
9731ba6a1819Smrg
9732549e21daSmrg	tmp_deplibs=
9733549e21daSmrg	for test_deplib in $deplibs; do
9734549e21daSmrg	  case " $convenience " in
9735549e21daSmrg	  *" $test_deplib "*) ;;
9736549e21daSmrg	  *)
97371bedbe3fSmrg	    func_append tmp_deplibs " $test_deplib"
9738549e21daSmrg	    ;;
9739549e21daSmrg	  esac
9740549e21daSmrg	done
9741fe4c343aSmrg	deplibs=$tmp_deplibs
9742ba6a1819Smrg
9743549e21daSmrg	if test -n "$convenience"; then
9744549e21daSmrg	  if test -n "$whole_archive_flag_spec" &&
9745fe4c343aSmrg	    test yes = "$compiler_needs_object" &&
9746549e21daSmrg	    test -z "$libobjs"; then
9747549e21daSmrg	    # extract the archives, so we have objects to list.
9748549e21daSmrg	    # TODO: could optimize this to just extract one archive.
9749549e21daSmrg	    whole_archive_flag_spec=
9750549e21daSmrg	  fi
9751549e21daSmrg	  if test -n "$whole_archive_flag_spec"; then
9752549e21daSmrg	    save_libobjs=$libobjs
9753549e21daSmrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
9754549e21daSmrg	    test "X$libobjs" = "X " && libobjs=
9755549e21daSmrg	  else
9756fe4c343aSmrg	    gentop=$output_objdir/${outputname}x
97571bedbe3fSmrg	    func_append generated " $gentop"
9758ba6a1819Smrg
9759549e21daSmrg	    func_extract_archives $gentop $convenience
97601bedbe3fSmrg	    func_append libobjs " $func_extract_archives_result"
9761549e21daSmrg	    test "X$libobjs" = "X " && libobjs=
9762549e21daSmrg	  fi
9763549e21daSmrg	fi
9764ba6a1819Smrg
9765fe4c343aSmrg	if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
9766549e21daSmrg	  eval flag=\"$thread_safe_flag_spec\"
97671bedbe3fSmrg	  func_append linker_flags " $flag"
9768549e21daSmrg	fi
9769ba6a1819Smrg
9770549e21daSmrg	# Make a backup of the uninstalled library when relinking
9771fe4c343aSmrg	if test relink = "$opt_mode"; then
9772549e21daSmrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
9773ba6a1819Smrg	fi
9774ba6a1819Smrg
9775549e21daSmrg	# Do each of the archive commands.
9776fe4c343aSmrg	if test yes = "$module" && test -n "$module_cmds"; then
9777549e21daSmrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
9778549e21daSmrg	    eval test_cmds=\"$module_expsym_cmds\"
9779549e21daSmrg	    cmds=$module_expsym_cmds
9780549e21daSmrg	  else
9781549e21daSmrg	    eval test_cmds=\"$module_cmds\"
9782549e21daSmrg	    cmds=$module_cmds
9783549e21daSmrg	  fi
9784549e21daSmrg	else
9785549e21daSmrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
9786549e21daSmrg	    eval test_cmds=\"$archive_expsym_cmds\"
9787549e21daSmrg	    cmds=$archive_expsym_cmds
9788549e21daSmrg	  else
9789549e21daSmrg	    eval test_cmds=\"$archive_cmds\"
9790549e21daSmrg	    cmds=$archive_cmds
9791549e21daSmrg	  fi
9792ba6a1819Smrg	fi
9793ba6a1819Smrg
9794fe4c343aSmrg	if test : != "$skipped_export" &&
9795549e21daSmrg	   func_len " $test_cmds" &&
9796549e21daSmrg	   len=$func_len_result &&
9797549e21daSmrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9798549e21daSmrg	  :
9799549e21daSmrg	else
9800549e21daSmrg	  # The command line is too long to link in one step, link piecewise
9801549e21daSmrg	  # or, if using GNU ld and skipped_export is not :, use a linker
9802549e21daSmrg	  # script.
9803ba6a1819Smrg
9804549e21daSmrg	  # Save the value of $output and $libobjs because we want to
9805549e21daSmrg	  # use them later.  If we have whole_archive_flag_spec, we
9806549e21daSmrg	  # want to use save_libobjs as it was before
9807549e21daSmrg	  # whole_archive_flag_spec was expanded, because we can't
9808549e21daSmrg	  # assume the linker understands whole_archive_flag_spec.
9809549e21daSmrg	  # This may have to be revisited, in case too many
9810549e21daSmrg	  # convenience libraries get linked in and end up exceeding
9811549e21daSmrg	  # the spec.
9812549e21daSmrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
9813549e21daSmrg	    save_libobjs=$libobjs
9814549e21daSmrg	  fi
9815549e21daSmrg	  save_output=$output
9816549e21daSmrg	  func_basename "$output"
9817549e21daSmrg	  output_la=$func_basename_result
9818ba6a1819Smrg
9819549e21daSmrg	  # Clear the reloadable object creation command queue and
9820549e21daSmrg	  # initialize k to one.
9821549e21daSmrg	  test_cmds=
9822549e21daSmrg	  concat_cmds=
9823549e21daSmrg	  objlist=
9824549e21daSmrg	  last_robj=
9825549e21daSmrg	  k=1
9826549e21daSmrg
9827fe4c343aSmrg	  if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
9828fe4c343aSmrg	    output=$output_objdir/$output_la.lnkscript
9829549e21daSmrg	    func_verbose "creating GNU ld script: $output"
9830549e21daSmrg	    echo 'INPUT (' > $output
9831549e21daSmrg	    for obj in $save_libobjs
9832549e21daSmrg	    do
98331bedbe3fSmrg	      func_to_tool_file "$obj"
98341bedbe3fSmrg	      $ECHO "$func_to_tool_file_result" >> $output
9835549e21daSmrg	    done
9836549e21daSmrg	    echo ')' >> $output
98371bedbe3fSmrg	    func_append delfiles " $output"
98381bedbe3fSmrg	    func_to_tool_file "$output"
98391bedbe3fSmrg	    output=$func_to_tool_file_result
9840fe4c343aSmrg	  elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
9841fe4c343aSmrg	    output=$output_objdir/$output_la.lnk
9842549e21daSmrg	    func_verbose "creating linker input file list: $output"
9843549e21daSmrg	    : > $output
9844549e21daSmrg	    set x $save_libobjs
9845549e21daSmrg	    shift
9846549e21daSmrg	    firstobj=
9847fe4c343aSmrg	    if test yes = "$compiler_needs_object"; then
9848549e21daSmrg	      firstobj="$1 "
9849549e21daSmrg	      shift
9850549e21daSmrg	    fi
9851549e21daSmrg	    for obj
9852549e21daSmrg	    do
98531bedbe3fSmrg	      func_to_tool_file "$obj"
98541bedbe3fSmrg	      $ECHO "$func_to_tool_file_result" >> $output
9855549e21daSmrg	    done
98561bedbe3fSmrg	    func_append delfiles " $output"
98571bedbe3fSmrg	    func_to_tool_file "$output"
98581bedbe3fSmrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
9859549e21daSmrg	  else
9860549e21daSmrg	    if test -n "$save_libobjs"; then
9861549e21daSmrg	      func_verbose "creating reloadable object files..."
9862fe4c343aSmrg	      output=$output_objdir/$output_la-$k.$objext
9863549e21daSmrg	      eval test_cmds=\"$reload_cmds\"
9864549e21daSmrg	      func_len " $test_cmds"
9865549e21daSmrg	      len0=$func_len_result
9866549e21daSmrg	      len=$len0
9867549e21daSmrg
9868549e21daSmrg	      # Loop over the list of objects to be linked.
9869549e21daSmrg	      for obj in $save_libobjs
9870549e21daSmrg	      do
9871549e21daSmrg		func_len " $obj"
9872549e21daSmrg		func_arith $len + $func_len_result
9873549e21daSmrg		len=$func_arith_result
9874fe4c343aSmrg		if test -z "$objlist" ||
9875549e21daSmrg		   test "$len" -lt "$max_cmd_len"; then
9876549e21daSmrg		  func_append objlist " $obj"
9877549e21daSmrg		else
9878549e21daSmrg		  # The command $test_cmds is almost too long, add a
9879549e21daSmrg		  # command to the queue.
9880fe4c343aSmrg		  if test 1 -eq "$k"; then
9881549e21daSmrg		    # The first file doesn't have a previous command to add.
9882549e21daSmrg		    reload_objs=$objlist
9883549e21daSmrg		    eval concat_cmds=\"$reload_cmds\"
9884549e21daSmrg		  else
9885549e21daSmrg		    # All subsequent reloadable object files will link in
9886549e21daSmrg		    # the last one created.
9887549e21daSmrg		    reload_objs="$objlist $last_robj"
9888549e21daSmrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
9889549e21daSmrg		  fi
9890fe4c343aSmrg		  last_robj=$output_objdir/$output_la-$k.$objext
9891549e21daSmrg		  func_arith $k + 1
9892549e21daSmrg		  k=$func_arith_result
9893fe4c343aSmrg		  output=$output_objdir/$output_la-$k.$objext
9894549e21daSmrg		  objlist=" $obj"
9895549e21daSmrg		  func_len " $last_robj"
9896549e21daSmrg		  func_arith $len0 + $func_len_result
9897549e21daSmrg		  len=$func_arith_result
9898549e21daSmrg		fi
9899549e21daSmrg	      done
9900549e21daSmrg	      # Handle the remaining objects by creating one last
9901549e21daSmrg	      # reloadable object file.  All subsequent reloadable object
9902549e21daSmrg	      # files will link in the last one created.
9903549e21daSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9904549e21daSmrg	      reload_objs="$objlist $last_robj"
9905fe4c343aSmrg	      eval concat_cmds=\"\$concat_cmds$reload_cmds\"
9906549e21daSmrg	      if test -n "$last_robj"; then
9907fe4c343aSmrg	        eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
9908549e21daSmrg	      fi
99091bedbe3fSmrg	      func_append delfiles " $output"
9910ba6a1819Smrg
9911549e21daSmrg	    else
9912549e21daSmrg	      output=
9913549e21daSmrg	    fi
9914ba6a1819Smrg
9915fe4c343aSmrg	    ${skipped_export-false} && {
9916fe4c343aSmrg	      func_verbose "generating symbol list for '$libname.la'"
9917fe4c343aSmrg	      export_symbols=$output_objdir/$libname.exp
9918549e21daSmrg	      $opt_dry_run || $RM $export_symbols
9919549e21daSmrg	      libobjs=$output
9920549e21daSmrg	      # Append the command to create the export file.
9921549e21daSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9922549e21daSmrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
9923549e21daSmrg	      if test -n "$last_robj"; then
9924549e21daSmrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
9925549e21daSmrg	      fi
9926fe4c343aSmrg	    }
9927ba6a1819Smrg
9928549e21daSmrg	    test -n "$save_libobjs" &&
9929549e21daSmrg	      func_verbose "creating a temporary reloadable object file: $output"
9930ba6a1819Smrg
9931549e21daSmrg	    # Loop through the commands generated above and execute them.
9932fe4c343aSmrg	    save_ifs=$IFS; IFS='~'
9933549e21daSmrg	    for cmd in $concat_cmds; do
9934fe4c343aSmrg	      IFS=$save_ifs
9935fe4c343aSmrg	      $opt_quiet || {
9936549e21daSmrg		  func_quote_for_expand "$cmd"
9937549e21daSmrg		  eval "func_echo $func_quote_for_expand_result"
9938549e21daSmrg	      }
9939549e21daSmrg	      $opt_dry_run || eval "$cmd" || {
9940549e21daSmrg		lt_exit=$?
9941549e21daSmrg
9942549e21daSmrg		# Restore the uninstalled library and exit
9943fe4c343aSmrg		if test relink = "$opt_mode"; then
9944549e21daSmrg		  ( cd "$output_objdir" && \
9945549e21daSmrg		    $RM "${realname}T" && \
9946549e21daSmrg		    $MV "${realname}U" "$realname" )
9947549e21daSmrg		fi
9948ba6a1819Smrg
9949549e21daSmrg		exit $lt_exit
9950549e21daSmrg	      }
9951549e21daSmrg	    done
9952fe4c343aSmrg	    IFS=$save_ifs
9953ba6a1819Smrg
9954549e21daSmrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
9955549e21daSmrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
9956549e21daSmrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
9957ba6a1819Smrg	    fi
9958ba6a1819Smrg	  fi
9959ba6a1819Smrg
9960fe4c343aSmrg          ${skipped_export-false} && {
9961549e21daSmrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
9962fe4c343aSmrg	      tmp_export_symbols=$export_symbols
9963fe4c343aSmrg	      test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
9964549e21daSmrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
9965549e21daSmrg	    fi
9966ba6a1819Smrg
9967549e21daSmrg	    if test -n "$orig_export_symbols"; then
9968549e21daSmrg	      # The given exports_symbols file has to be filtered, so filter it.
9969fe4c343aSmrg	      func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
9970549e21daSmrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
9971fe4c343aSmrg	      # 's' commands, which not all seds can handle. GNU sed should be fine
9972549e21daSmrg	      # though. Also, the filter scales superlinearly with the number of
9973549e21daSmrg	      # global variables. join(1) would be nice here, but unfortunately
9974549e21daSmrg	      # isn't a blessed tool.
9975549e21daSmrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
99761bedbe3fSmrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
9977549e21daSmrg	      export_symbols=$output_objdir/$libname.def
9978549e21daSmrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
9979549e21daSmrg	    fi
9980fe4c343aSmrg	  }
9981ba6a1819Smrg
9982549e21daSmrg	  libobjs=$output
9983549e21daSmrg	  # Restore the value of output.
9984549e21daSmrg	  output=$save_output
9985ba6a1819Smrg
9986549e21daSmrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
9987549e21daSmrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
9988549e21daSmrg	    test "X$libobjs" = "X " && libobjs=
9989549e21daSmrg	  fi
9990549e21daSmrg	  # Expand the library linking commands again to reset the
9991549e21daSmrg	  # value of $libobjs for piecewise linking.
9992549e21daSmrg
9993549e21daSmrg	  # Do each of the archive commands.
9994fe4c343aSmrg	  if test yes = "$module" && test -n "$module_cmds"; then
9995549e21daSmrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
9996549e21daSmrg	      cmds=$module_expsym_cmds
9997ba6a1819Smrg	    else
9998549e21daSmrg	      cmds=$module_cmds
9999ba6a1819Smrg	    fi
10000ba6a1819Smrg	  else
10001549e21daSmrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10002549e21daSmrg	      cmds=$archive_expsym_cmds
10003549e21daSmrg	    else
10004549e21daSmrg	      cmds=$archive_cmds
10005549e21daSmrg	    fi
10006ba6a1819Smrg	  fi
10007ba6a1819Smrg	fi
10008ba6a1819Smrg
10009549e21daSmrg	if test -n "$delfiles"; then
10010549e21daSmrg	  # Append the command to remove temporary files to $cmds.
10011549e21daSmrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
10012549e21daSmrg	fi
10013ba6a1819Smrg
10014549e21daSmrg	# Add any objects from preloaded convenience libraries
10015549e21daSmrg	if test -n "$dlprefiles"; then
10016fe4c343aSmrg	  gentop=$output_objdir/${outputname}x
100171bedbe3fSmrg	  func_append generated " $gentop"
10018ba6a1819Smrg
10019549e21daSmrg	  func_extract_archives $gentop $dlprefiles
100201bedbe3fSmrg	  func_append libobjs " $func_extract_archives_result"
10021549e21daSmrg	  test "X$libobjs" = "X " && libobjs=
10022ba6a1819Smrg	fi
10023ba6a1819Smrg
10024fe4c343aSmrg	save_ifs=$IFS; IFS='~'
10025549e21daSmrg	for cmd in $cmds; do
10026fe4c343aSmrg	  IFS=$sp$nl
10027549e21daSmrg	  eval cmd=\"$cmd\"
10028fe4c343aSmrg	  IFS=$save_ifs
10029fe4c343aSmrg	  $opt_quiet || {
10030549e21daSmrg	    func_quote_for_expand "$cmd"
10031549e21daSmrg	    eval "func_echo $func_quote_for_expand_result"
10032549e21daSmrg	  }
10033549e21daSmrg	  $opt_dry_run || eval "$cmd" || {
10034549e21daSmrg	    lt_exit=$?
10035ba6a1819Smrg
10036549e21daSmrg	    # Restore the uninstalled library and exit
10037fe4c343aSmrg	    if test relink = "$opt_mode"; then
10038549e21daSmrg	      ( cd "$output_objdir" && \
10039549e21daSmrg	        $RM "${realname}T" && \
10040549e21daSmrg		$MV "${realname}U" "$realname" )
10041ba6a1819Smrg	    fi
10042ba6a1819Smrg
10043549e21daSmrg	    exit $lt_exit
10044549e21daSmrg	  }
10045549e21daSmrg	done
10046fe4c343aSmrg	IFS=$save_ifs
10047ba6a1819Smrg
10048549e21daSmrg	# Restore the uninstalled library and exit
10049fe4c343aSmrg	if test relink = "$opt_mode"; then
10050549e21daSmrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
10051ba6a1819Smrg
10052549e21daSmrg	  if test -n "$convenience"; then
10053549e21daSmrg	    if test -z "$whole_archive_flag_spec"; then
10054549e21daSmrg	      func_show_eval '${RM}r "$gentop"'
10055549e21daSmrg	    fi
10056549e21daSmrg	  fi
10057ba6a1819Smrg
10058549e21daSmrg	  exit $EXIT_SUCCESS
10059549e21daSmrg	fi
10060ba6a1819Smrg
10061549e21daSmrg	# Create links to the real library.
10062549e21daSmrg	for linkname in $linknames; do
10063549e21daSmrg	  if test "$realname" != "$linkname"; then
10064549e21daSmrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
10065ba6a1819Smrg	  fi
10066ba6a1819Smrg	done
10067549e21daSmrg
10068549e21daSmrg	# If -module or -export-dynamic was specified, set the dlname.
10069fe4c343aSmrg	if test yes = "$module" || test yes = "$export_dynamic"; then
10070549e21daSmrg	  # On all known operating systems, these are identical.
10071fe4c343aSmrg	  dlname=$soname
10072549e21daSmrg	fi
10073ba6a1819Smrg      fi
10074ba6a1819Smrg      ;;
10075ba6a1819Smrg
10076549e21daSmrg    obj)
10077fe4c343aSmrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
10078fe4c343aSmrg	func_warning "'-dlopen' is ignored for objects"
10079549e21daSmrg      fi
10080ba6a1819Smrg
10081549e21daSmrg      case " $deplibs" in
10082549e21daSmrg      *\ -l* | *\ -L*)
10083fe4c343aSmrg	func_warning "'-l' and '-L' are ignored for objects" ;;
10084ba6a1819Smrg      esac
10085ba6a1819Smrg
10086549e21daSmrg      test -n "$rpath" && \
10087fe4c343aSmrg	func_warning "'-rpath' is ignored for objects"
10088ba6a1819Smrg
10089549e21daSmrg      test -n "$xrpath" && \
10090fe4c343aSmrg	func_warning "'-R' is ignored for objects"
10091ba6a1819Smrg
10092549e21daSmrg      test -n "$vinfo" && \
10093fe4c343aSmrg	func_warning "'-version-info' is ignored for objects"
10094549e21daSmrg
10095549e21daSmrg      test -n "$release" && \
10096fe4c343aSmrg	func_warning "'-release' is ignored for objects"
10097549e21daSmrg
10098549e21daSmrg      case $output in
10099549e21daSmrg      *.lo)
10100549e21daSmrg	test -n "$objs$old_deplibs" && \
10101fe4c343aSmrg	  func_fatal_error "cannot build library object '$output' from non-libtool objects"
10102549e21daSmrg
10103549e21daSmrg	libobj=$output
10104549e21daSmrg	func_lo2o "$libobj"
10105549e21daSmrg	obj=$func_lo2o_result
10106ba6a1819Smrg	;;
10107ba6a1819Smrg      *)
10108549e21daSmrg	libobj=
10109fe4c343aSmrg	obj=$output
10110ba6a1819Smrg	;;
10111ba6a1819Smrg      esac
10112ba6a1819Smrg
10113549e21daSmrg      # Delete the old objects.
10114549e21daSmrg      $opt_dry_run || $RM $obj $libobj
10115ba6a1819Smrg
10116549e21daSmrg      # Objects from convenience libraries.  This assumes
10117549e21daSmrg      # single-version convenience libraries.  Whenever we create
10118549e21daSmrg      # different ones for PIC/non-PIC, this we'll have to duplicate
10119549e21daSmrg      # the extraction.
10120549e21daSmrg      reload_conv_objs=
10121549e21daSmrg      gentop=
10122fe4c343aSmrg      # if reload_cmds runs $LD directly, get rid of -Wl from
10123fe4c343aSmrg      # whole_archive_flag_spec and hope we can get by with turning comma
10124fe4c343aSmrg      # into space.
10125fe4c343aSmrg      case $reload_cmds in
10126fe4c343aSmrg        *\$LD[\ \$]*) wl= ;;
10127fe4c343aSmrg      esac
10128549e21daSmrg      if test -n "$convenience"; then
10129549e21daSmrg	if test -n "$whole_archive_flag_spec"; then
10130549e21daSmrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
10131fe4c343aSmrg	  test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
10132fe4c343aSmrg	  reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
10133549e21daSmrg	else
10134fe4c343aSmrg	  gentop=$output_objdir/${obj}x
101351bedbe3fSmrg	  func_append generated " $gentop"
10136ba6a1819Smrg
10137549e21daSmrg	  func_extract_archives $gentop $convenience
10138549e21daSmrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
10139549e21daSmrg	fi
10140ba6a1819Smrg      fi
10141ba6a1819Smrg
101421bedbe3fSmrg      # If we're not building shared, we need to use non_pic_objs
10143fe4c343aSmrg      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
101441bedbe3fSmrg
10145549e21daSmrg      # Create the old-style object.
10146fe4c343aSmrg      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
10147ba6a1819Smrg
10148fe4c343aSmrg      output=$obj
10149549e21daSmrg      func_execute_cmds "$reload_cmds" 'exit $?'
10150ba6a1819Smrg
10151549e21daSmrg      # Exit if we aren't doing a library object file.
10152549e21daSmrg      if test -z "$libobj"; then
10153549e21daSmrg	if test -n "$gentop"; then
10154549e21daSmrg	  func_show_eval '${RM}r "$gentop"'
10155549e21daSmrg	fi
10156549e21daSmrg
10157549e21daSmrg	exit $EXIT_SUCCESS
10158ba6a1819Smrg      fi
10159549e21daSmrg
10160fe4c343aSmrg      test yes = "$build_libtool_libs" || {
10161549e21daSmrg	if test -n "$gentop"; then
10162549e21daSmrg	  func_show_eval '${RM}r "$gentop"'
10163549e21daSmrg	fi
10164549e21daSmrg
10165549e21daSmrg	# Create an invalid libtool object if no PIC, so that we don't
10166549e21daSmrg	# accidentally link it into a program.
10167549e21daSmrg	# $show "echo timestamp > $libobj"
10168549e21daSmrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
10169549e21daSmrg	exit $EXIT_SUCCESS
10170fe4c343aSmrg      }
10171549e21daSmrg
10172fe4c343aSmrg      if test -n "$pic_flag" || test default != "$pic_mode"; then
10173549e21daSmrg	# Only do commands if we really have different PIC objects.
10174549e21daSmrg	reload_objs="$libobjs $reload_conv_objs"
10175fe4c343aSmrg	output=$libobj
10176549e21daSmrg	func_execute_cmds "$reload_cmds" 'exit $?'
10177549e21daSmrg      fi
10178549e21daSmrg
10179549e21daSmrg      if test -n "$gentop"; then
10180549e21daSmrg	func_show_eval '${RM}r "$gentop"'
10181549e21daSmrg      fi
10182549e21daSmrg
10183549e21daSmrg      exit $EXIT_SUCCESS
10184ba6a1819Smrg      ;;
10185ba6a1819Smrg
10186549e21daSmrg    prog)
10187549e21daSmrg      case $host in
10188549e21daSmrg	*cygwin*) func_stripname '' '.exe' "$output"
10189549e21daSmrg	          output=$func_stripname_result.exe;;
10190549e21daSmrg      esac
10191549e21daSmrg      test -n "$vinfo" && \
10192fe4c343aSmrg	func_warning "'-version-info' is ignored for programs"
10193ba6a1819Smrg
10194549e21daSmrg      test -n "$release" && \
10195fe4c343aSmrg	func_warning "'-release' is ignored for programs"
10196ba6a1819Smrg
10197fe4c343aSmrg      $preload \
10198fe4c343aSmrg	&& test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
10199fe4c343aSmrg	&& func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
10200549e21daSmrg
10201549e21daSmrg      case $host in
10202549e21daSmrg      *-*-rhapsody* | *-*-darwin1.[012])
10203549e21daSmrg	# On Rhapsody replace the C library is the System framework
10204549e21daSmrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
10205549e21daSmrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
10206ba6a1819Smrg	;;
10207549e21daSmrg      esac
10208ba6a1819Smrg
10209549e21daSmrg      case $host in
10210549e21daSmrg      *-*-darwin*)
10211549e21daSmrg	# Don't allow lazy linking, it breaks C++ global constructors
10212549e21daSmrg	# But is supposedly fixed on 10.4 or later (yay!).
10213fe4c343aSmrg	if test CXX = "$tagname"; then
10214549e21daSmrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
10215549e21daSmrg	    10.[0123])
10216fe4c343aSmrg	      func_append compile_command " $wl-bind_at_load"
10217fe4c343aSmrg	      func_append finalize_command " $wl-bind_at_load"
10218549e21daSmrg	    ;;
10219549e21daSmrg	  esac
10220ba6a1819Smrg	fi
10221549e21daSmrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
10222549e21daSmrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10223549e21daSmrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10224549e21daSmrg	;;
10225549e21daSmrg      esac
10226ba6a1819Smrg
10227ba6a1819Smrg
10228549e21daSmrg      # move library search paths that coincide with paths to not yet
10229549e21daSmrg      # installed libraries to the beginning of the library search list
10230549e21daSmrg      new_libs=
10231549e21daSmrg      for path in $notinst_path; do
10232549e21daSmrg	case " $new_libs " in
10233549e21daSmrg	*" -L$path/$objdir "*) ;;
10234549e21daSmrg	*)
10235549e21daSmrg	  case " $compile_deplibs " in
10236549e21daSmrg	  *" -L$path/$objdir "*)
102371bedbe3fSmrg	    func_append new_libs " -L$path/$objdir" ;;
10238ba6a1819Smrg	  esac
10239549e21daSmrg	  ;;
10240549e21daSmrg	esac
10241549e21daSmrg      done
10242549e21daSmrg      for deplib in $compile_deplibs; do
10243549e21daSmrg	case $deplib in
10244549e21daSmrg	-L*)
10245549e21daSmrg	  case " $new_libs " in
10246549e21daSmrg	  *" $deplib "*) ;;
102471bedbe3fSmrg	  *) func_append new_libs " $deplib" ;;
10248ba6a1819Smrg	  esac
10249549e21daSmrg	  ;;
102501bedbe3fSmrg	*) func_append new_libs " $deplib" ;;
10251549e21daSmrg	esac
10252549e21daSmrg      done
10253fe4c343aSmrg      compile_deplibs=$new_libs
10254ba6a1819Smrg
10255ba6a1819Smrg
102561bedbe3fSmrg      func_append compile_command " $compile_deplibs"
102571bedbe3fSmrg      func_append finalize_command " $finalize_deplibs"
10258ba6a1819Smrg
10259549e21daSmrg      if test -n "$rpath$xrpath"; then
10260549e21daSmrg	# If the user specified any rpath flags, then add them.
10261549e21daSmrg	for libdir in $rpath $xrpath; do
10262549e21daSmrg	  # This is the magic to use -rpath.
10263549e21daSmrg	  case "$finalize_rpath " in
10264549e21daSmrg	  *" $libdir "*) ;;
102651bedbe3fSmrg	  *) func_append finalize_rpath " $libdir" ;;
10266549e21daSmrg	  esac
10267549e21daSmrg	done
10268549e21daSmrg      fi
10269ba6a1819Smrg
10270549e21daSmrg      # Now hardcode the library paths
10271549e21daSmrg      rpath=
10272549e21daSmrg      hardcode_libdirs=
10273549e21daSmrg      for libdir in $compile_rpath $finalize_rpath; do
10274549e21daSmrg	if test -n "$hardcode_libdir_flag_spec"; then
10275549e21daSmrg	  if test -n "$hardcode_libdir_separator"; then
10276549e21daSmrg	    if test -z "$hardcode_libdirs"; then
10277fe4c343aSmrg	      hardcode_libdirs=$libdir
10278549e21daSmrg	    else
10279549e21daSmrg	      # Just accumulate the unique libdirs.
10280549e21daSmrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10281549e21daSmrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10282549e21daSmrg		;;
10283549e21daSmrg	      *)
102841bedbe3fSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10285549e21daSmrg		;;
10286549e21daSmrg	      esac
10287549e21daSmrg	    fi
10288ba6a1819Smrg	  else
10289549e21daSmrg	    eval flag=\"$hardcode_libdir_flag_spec\"
102901bedbe3fSmrg	    func_append rpath " $flag"
10291ba6a1819Smrg	  fi
10292549e21daSmrg	elif test -n "$runpath_var"; then
10293549e21daSmrg	  case "$perm_rpath " in
10294549e21daSmrg	  *" $libdir "*) ;;
102951bedbe3fSmrg	  *) func_append perm_rpath " $libdir" ;;
10296549e21daSmrg	  esac
10297549e21daSmrg	fi
10298549e21daSmrg	case $host in
10299549e21daSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
10300fe4c343aSmrg	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
10301549e21daSmrg	  case :$dllsearchpath: in
10302549e21daSmrg	  *":$libdir:"*) ;;
10303549e21daSmrg	  ::) dllsearchpath=$libdir;;
103041bedbe3fSmrg	  *) func_append dllsearchpath ":$libdir";;
10305549e21daSmrg	  esac
10306549e21daSmrg	  case :$dllsearchpath: in
10307549e21daSmrg	  *":$testbindir:"*) ;;
10308549e21daSmrg	  ::) dllsearchpath=$testbindir;;
103091bedbe3fSmrg	  *) func_append dllsearchpath ":$testbindir";;
10310549e21daSmrg	  esac
10311549e21daSmrg	  ;;
10312549e21daSmrg	esac
10313549e21daSmrg      done
10314549e21daSmrg      # Substitute the hardcoded libdirs into the rpath.
10315549e21daSmrg      if test -n "$hardcode_libdir_separator" &&
10316549e21daSmrg	 test -n "$hardcode_libdirs"; then
10317fe4c343aSmrg	libdir=$hardcode_libdirs
10318549e21daSmrg	eval rpath=\" $hardcode_libdir_flag_spec\"
10319549e21daSmrg      fi
10320fe4c343aSmrg      compile_rpath=$rpath
10321ba6a1819Smrg
10322549e21daSmrg      rpath=
10323549e21daSmrg      hardcode_libdirs=
10324549e21daSmrg      for libdir in $finalize_rpath; do
10325549e21daSmrg	if test -n "$hardcode_libdir_flag_spec"; then
10326549e21daSmrg	  if test -n "$hardcode_libdir_separator"; then
10327549e21daSmrg	    if test -z "$hardcode_libdirs"; then
10328fe4c343aSmrg	      hardcode_libdirs=$libdir
10329549e21daSmrg	    else
10330549e21daSmrg	      # Just accumulate the unique libdirs.
10331549e21daSmrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10332549e21daSmrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10333549e21daSmrg		;;
10334549e21daSmrg	      *)
103351bedbe3fSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10336549e21daSmrg		;;
10337549e21daSmrg	      esac
10338549e21daSmrg	    fi
10339ba6a1819Smrg	  else
10340549e21daSmrg	    eval flag=\"$hardcode_libdir_flag_spec\"
103411bedbe3fSmrg	    func_append rpath " $flag"
10342ba6a1819Smrg	  fi
10343549e21daSmrg	elif test -n "$runpath_var"; then
10344549e21daSmrg	  case "$finalize_perm_rpath " in
10345549e21daSmrg	  *" $libdir "*) ;;
103461bedbe3fSmrg	  *) func_append finalize_perm_rpath " $libdir" ;;
10347549e21daSmrg	  esac
10348ba6a1819Smrg	fi
10349549e21daSmrg      done
10350549e21daSmrg      # Substitute the hardcoded libdirs into the rpath.
10351549e21daSmrg      if test -n "$hardcode_libdir_separator" &&
10352549e21daSmrg	 test -n "$hardcode_libdirs"; then
10353fe4c343aSmrg	libdir=$hardcode_libdirs
10354549e21daSmrg	eval rpath=\" $hardcode_libdir_flag_spec\"
10355549e21daSmrg      fi
10356fe4c343aSmrg      finalize_rpath=$rpath
10357ba6a1819Smrg
10358fe4c343aSmrg      if test -n "$libobjs" && test yes = "$build_old_libs"; then
10359549e21daSmrg	# Transform all the library objects into standard objects.
10360549e21daSmrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10361549e21daSmrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10362549e21daSmrg      fi
10363ba6a1819Smrg
10364fe4c343aSmrg      func_generate_dlsyms "$outputname" "@PROGRAM@" false
10365ba6a1819Smrg
10366549e21daSmrg      # template prelinking step
10367549e21daSmrg      if test -n "$prelink_cmds"; then
10368549e21daSmrg	func_execute_cmds "$prelink_cmds" 'exit $?'
10369549e21daSmrg      fi
10370ba6a1819Smrg
10371fe4c343aSmrg      wrappers_required=:
10372549e21daSmrg      case $host in
10373549e21daSmrg      *cegcc* | *mingw32ce*)
10374549e21daSmrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
10375fe4c343aSmrg        wrappers_required=false
10376549e21daSmrg        ;;
10377549e21daSmrg      *cygwin* | *mingw* )
10378fe4c343aSmrg        test yes = "$build_libtool_libs" || wrappers_required=false
10379549e21daSmrg        ;;
10380549e21daSmrg      *)
10381fe4c343aSmrg        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
10382fe4c343aSmrg          wrappers_required=false
10383549e21daSmrg        fi
10384549e21daSmrg        ;;
10385549e21daSmrg      esac
10386fe4c343aSmrg      $wrappers_required || {
10387549e21daSmrg	# Replace the output file specification.
10388549e21daSmrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10389fe4c343aSmrg	link_command=$compile_command$compile_rpath
10390ba6a1819Smrg
10391549e21daSmrg	# We have no uninstalled library dependencies, so finalize right now.
10392549e21daSmrg	exit_status=0
10393549e21daSmrg	func_show_eval "$link_command" 'exit_status=$?'
10394ba6a1819Smrg
103951bedbe3fSmrg	if test -n "$postlink_cmds"; then
103961bedbe3fSmrg	  func_to_tool_file "$output"
103971bedbe3fSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
103981bedbe3fSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
103991bedbe3fSmrg	fi
104001bedbe3fSmrg
10401549e21daSmrg	# Delete the generated files.
10402fe4c343aSmrg	if test -f "$output_objdir/${outputname}S.$objext"; then
10403fe4c343aSmrg	  func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
10404ba6a1819Smrg	fi
10405ba6a1819Smrg
10406549e21daSmrg	exit $exit_status
10407fe4c343aSmrg      }
10408ba6a1819Smrg
10409549e21daSmrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
10410549e21daSmrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
10411549e21daSmrg      fi
10412549e21daSmrg      if test -n "$finalize_shlibpath"; then
10413549e21daSmrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
10414549e21daSmrg      fi
10415ba6a1819Smrg
10416549e21daSmrg      compile_var=
10417549e21daSmrg      finalize_var=
10418549e21daSmrg      if test -n "$runpath_var"; then
10419549e21daSmrg	if test -n "$perm_rpath"; then
10420549e21daSmrg	  # We should set the runpath_var.
10421549e21daSmrg	  rpath=
10422549e21daSmrg	  for dir in $perm_rpath; do
104231bedbe3fSmrg	    func_append rpath "$dir:"
10424549e21daSmrg	  done
10425549e21daSmrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
10426ba6a1819Smrg	fi
10427549e21daSmrg	if test -n "$finalize_perm_rpath"; then
10428549e21daSmrg	  # We should set the runpath_var.
10429549e21daSmrg	  rpath=
10430549e21daSmrg	  for dir in $finalize_perm_rpath; do
104311bedbe3fSmrg	    func_append rpath "$dir:"
10432549e21daSmrg	  done
10433549e21daSmrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
10434ba6a1819Smrg	fi
10435549e21daSmrg      fi
10436ba6a1819Smrg
10437fe4c343aSmrg      if test yes = "$no_install"; then
10438549e21daSmrg	# We don't need to create a wrapper script.
10439fe4c343aSmrg	link_command=$compile_var$compile_command$compile_rpath
10440549e21daSmrg	# Replace the output file specification.
10441549e21daSmrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10442549e21daSmrg	# Delete the old output file.
10443549e21daSmrg	$opt_dry_run || $RM $output
10444549e21daSmrg	# Link the executable and exit
10445549e21daSmrg	func_show_eval "$link_command" 'exit $?'
104461bedbe3fSmrg
104471bedbe3fSmrg	if test -n "$postlink_cmds"; then
104481bedbe3fSmrg	  func_to_tool_file "$output"
104491bedbe3fSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
104501bedbe3fSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
104511bedbe3fSmrg	fi
104521bedbe3fSmrg
10453ba6a1819Smrg	exit $EXIT_SUCCESS
10454549e21daSmrg      fi
10455ba6a1819Smrg
10456fe4c343aSmrg      case $hardcode_action,$fast_install in
10457fe4c343aSmrg        relink,*)
10458fe4c343aSmrg	  # Fast installation is not supported
10459fe4c343aSmrg	  link_command=$compile_var$compile_command$compile_rpath
10460fe4c343aSmrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
10461549e21daSmrg
10462fe4c343aSmrg	  func_warning "this platform does not like uninstalled shared libraries"
10463fe4c343aSmrg	  func_warning "'$output' will be relinked during installation"
10464fe4c343aSmrg	  ;;
10465fe4c343aSmrg        *,yes)
10466fe4c343aSmrg	  link_command=$finalize_var$compile_command$finalize_rpath
10467fe4c343aSmrg	  relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
10468fe4c343aSmrg          ;;
10469fe4c343aSmrg	*,no)
10470fe4c343aSmrg	  link_command=$compile_var$compile_command$compile_rpath
10471fe4c343aSmrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
10472fe4c343aSmrg          ;;
10473fe4c343aSmrg	*,needless)
10474fe4c343aSmrg	  link_command=$finalize_var$compile_command$finalize_rpath
10475fe4c343aSmrg	  relink_command=
10476fe4c343aSmrg          ;;
10477fe4c343aSmrg      esac
10478ba6a1819Smrg
10479549e21daSmrg      # Replace the output file specification.
10480549e21daSmrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
10481ba6a1819Smrg
10482549e21daSmrg      # Delete the old output files.
10483549e21daSmrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
10484ba6a1819Smrg
10485549e21daSmrg      func_show_eval "$link_command" 'exit $?'
10486ba6a1819Smrg
104871bedbe3fSmrg      if test -n "$postlink_cmds"; then
104881bedbe3fSmrg	func_to_tool_file "$output_objdir/$outputname"
104891bedbe3fSmrg	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'`
104901bedbe3fSmrg	func_execute_cmds "$postlink_cmds" 'exit $?'
104911bedbe3fSmrg      fi
104921bedbe3fSmrg
10493549e21daSmrg      # Now create the wrapper script.
10494549e21daSmrg      func_verbose "creating $output"
10495ba6a1819Smrg
10496549e21daSmrg      # Quote the relink command for shipping.
10497549e21daSmrg      if test -n "$relink_command"; then
10498549e21daSmrg	# Preserve any variables that may affect compiler behavior
10499549e21daSmrg	for var in $variables_saved_for_relink; do
10500549e21daSmrg	  if eval test -z \"\${$var+set}\"; then
10501549e21daSmrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10502549e21daSmrg	  elif eval var_value=\$$var; test -z "$var_value"; then
10503549e21daSmrg	    relink_command="$var=; export $var; $relink_command"
10504549e21daSmrg	  else
10505549e21daSmrg	    func_quote_for_eval "$var_value"
10506549e21daSmrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
10507549e21daSmrg	  fi
10508549e21daSmrg	done
10509549e21daSmrg	relink_command="(cd `pwd`; $relink_command)"
10510549e21daSmrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
10511549e21daSmrg      fi
10512ba6a1819Smrg
10513549e21daSmrg      # Only actually do things if not in dry run mode.
10514549e21daSmrg      $opt_dry_run || {
10515549e21daSmrg	# win32 will think the script is a binary if it has
10516549e21daSmrg	# a .exe suffix, so we strip it off here.
10517549e21daSmrg	case $output in
10518549e21daSmrg	  *.exe) func_stripname '' '.exe' "$output"
10519549e21daSmrg	         output=$func_stripname_result ;;
10520549e21daSmrg	esac
10521549e21daSmrg	# test for cygwin because mv fails w/o .exe extensions
10522549e21daSmrg	case $host in
10523549e21daSmrg	  *cygwin*)
10524549e21daSmrg	    exeext=.exe
10525549e21daSmrg	    func_stripname '' '.exe' "$outputname"
10526549e21daSmrg	    outputname=$func_stripname_result ;;
10527549e21daSmrg	  *) exeext= ;;
10528549e21daSmrg	esac
10529549e21daSmrg	case $host in
10530549e21daSmrg	  *cygwin* | *mingw* )
10531549e21daSmrg	    func_dirname_and_basename "$output" "" "."
10532549e21daSmrg	    output_name=$func_basename_result
10533549e21daSmrg	    output_path=$func_dirname_result
10534fe4c343aSmrg	    cwrappersource=$output_path/$objdir/lt-$output_name.c
10535fe4c343aSmrg	    cwrapper=$output_path/$output_name.exe
10536549e21daSmrg	    $RM $cwrappersource $cwrapper
10537549e21daSmrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
10538549e21daSmrg
10539549e21daSmrg	    func_emit_cwrapperexe_src > $cwrappersource
10540549e21daSmrg
10541549e21daSmrg	    # The wrapper executable is built using the $host compiler,
10542549e21daSmrg	    # because it contains $host paths and files. If cross-
10543549e21daSmrg	    # compiling, it, like the target executable, must be
10544549e21daSmrg	    # executed on the $host or under an emulation environment.
10545549e21daSmrg	    $opt_dry_run || {
10546549e21daSmrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
10547549e21daSmrg	      $STRIP $cwrapper
10548549e21daSmrg	    }
10549549e21daSmrg
10550549e21daSmrg	    # Now, create the wrapper script for func_source use:
10551549e21daSmrg	    func_ltwrapper_scriptname $cwrapper
10552549e21daSmrg	    $RM $func_ltwrapper_scriptname_result
10553549e21daSmrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
10554549e21daSmrg	    $opt_dry_run || {
10555549e21daSmrg	      # note: this script will not be executed, so do not chmod.
10556fe4c343aSmrg	      if test "x$build" = "x$host"; then
10557549e21daSmrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
10558ba6a1819Smrg	      else
10559549e21daSmrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
10560ba6a1819Smrg	      fi
10561549e21daSmrg	    }
10562549e21daSmrg	  ;;
10563549e21daSmrg	  * )
10564549e21daSmrg	    $RM $output
10565549e21daSmrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
10566ba6a1819Smrg
10567549e21daSmrg	    func_emit_wrapper no > $output
10568549e21daSmrg	    chmod +x $output
10569ba6a1819Smrg	  ;;
10570ba6a1819Smrg	esac
10571549e21daSmrg      }
10572549e21daSmrg      exit $EXIT_SUCCESS
10573549e21daSmrg      ;;
10574549e21daSmrg    esac
10575ba6a1819Smrg
10576549e21daSmrg    # See if we need to build an old-fashioned archive.
10577549e21daSmrg    for oldlib in $oldlibs; do
10578ba6a1819Smrg
10579fe4c343aSmrg      case $build_libtool_libs in
10580fe4c343aSmrg        convenience)
10581fe4c343aSmrg	  oldobjs="$libobjs_save $symfileobj"
10582fe4c343aSmrg	  addlibs=$convenience
10583549e21daSmrg	  build_libtool_libs=no
10584fe4c343aSmrg	  ;;
10585fe4c343aSmrg	module)
10586fe4c343aSmrg	  oldobjs=$libobjs_save
10587fe4c343aSmrg	  addlibs=$old_convenience
10588fe4c343aSmrg	  build_libtool_libs=no
10589fe4c343aSmrg          ;;
10590fe4c343aSmrg	*)
10591549e21daSmrg	  oldobjs="$old_deplibs $non_pic_objects"
10592fe4c343aSmrg	  $preload && test -f "$symfileobj" \
10593fe4c343aSmrg	    && func_append oldobjs " $symfileobj"
10594fe4c343aSmrg	  addlibs=$old_convenience
10595fe4c343aSmrg	  ;;
10596fe4c343aSmrg      esac
10597ba6a1819Smrg
10598549e21daSmrg      if test -n "$addlibs"; then
10599fe4c343aSmrg	gentop=$output_objdir/${outputname}x
106001bedbe3fSmrg	func_append generated " $gentop"
10601ba6a1819Smrg
10602549e21daSmrg	func_extract_archives $gentop $addlibs
106031bedbe3fSmrg	func_append oldobjs " $func_extract_archives_result"
10604549e21daSmrg      fi
10605ba6a1819Smrg
10606549e21daSmrg      # Do each command in the archive commands.
10607fe4c343aSmrg      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
10608549e21daSmrg	cmds=$old_archive_from_new_cmds
10609549e21daSmrg      else
10610ba6a1819Smrg
10611549e21daSmrg	# Add any objects from preloaded convenience libraries
10612549e21daSmrg	if test -n "$dlprefiles"; then
10613fe4c343aSmrg	  gentop=$output_objdir/${outputname}x
106141bedbe3fSmrg	  func_append generated " $gentop"
10615ba6a1819Smrg
10616549e21daSmrg	  func_extract_archives $gentop $dlprefiles
106171bedbe3fSmrg	  func_append oldobjs " $func_extract_archives_result"
10618549e21daSmrg	fi
10619ba6a1819Smrg
10620549e21daSmrg	# POSIX demands no paths to be encoded in archives.  We have
10621549e21daSmrg	# to avoid creating archives with duplicate basenames if we
10622549e21daSmrg	# might have to extract them afterwards, e.g., when creating a
10623549e21daSmrg	# static archive out of a convenience library, or when linking
10624549e21daSmrg	# the entirety of a libtool archive into another (currently
10625549e21daSmrg	# not supported by libtool).
10626549e21daSmrg	if (for obj in $oldobjs
10627549e21daSmrg	    do
10628549e21daSmrg	      func_basename "$obj"
10629549e21daSmrg	      $ECHO "$func_basename_result"
10630549e21daSmrg	    done | sort | sort -uc >/dev/null 2>&1); then
10631549e21daSmrg	  :
10632549e21daSmrg	else
10633549e21daSmrg	  echo "copying selected object files to avoid basename conflicts..."
10634fe4c343aSmrg	  gentop=$output_objdir/${outputname}x
106351bedbe3fSmrg	  func_append generated " $gentop"
10636549e21daSmrg	  func_mkdir_p "$gentop"
10637549e21daSmrg	  save_oldobjs=$oldobjs
10638549e21daSmrg	  oldobjs=
10639549e21daSmrg	  counter=1
10640549e21daSmrg	  for obj in $save_oldobjs
10641549e21daSmrg	  do
10642549e21daSmrg	    func_basename "$obj"
10643fe4c343aSmrg	    objbase=$func_basename_result
10644549e21daSmrg	    case " $oldobjs " in
10645549e21daSmrg	    " ") oldobjs=$obj ;;
10646549e21daSmrg	    *[\ /]"$objbase "*)
10647549e21daSmrg	      while :; do
10648549e21daSmrg		# Make sure we don't pick an alternate name that also
10649549e21daSmrg		# overlaps.
10650549e21daSmrg		newobj=lt$counter-$objbase
10651549e21daSmrg		func_arith $counter + 1
10652549e21daSmrg		counter=$func_arith_result
10653549e21daSmrg		case " $oldobjs " in
10654549e21daSmrg		*[\ /]"$newobj "*) ;;
10655549e21daSmrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
10656549e21daSmrg		esac
10657549e21daSmrg	      done
10658549e21daSmrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
106591bedbe3fSmrg	      func_append oldobjs " $gentop/$newobj"
10660549e21daSmrg	      ;;
106611bedbe3fSmrg	    *) func_append oldobjs " $obj" ;;
10662549e21daSmrg	    esac
10663ba6a1819Smrg	  done
10664ba6a1819Smrg	fi
106651bedbe3fSmrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
106661bedbe3fSmrg	tool_oldlib=$func_to_tool_file_result
10667549e21daSmrg	eval cmds=\"$old_archive_cmds\"
10668ba6a1819Smrg
10669549e21daSmrg	func_len " $cmds"
10670549e21daSmrg	len=$func_len_result
10671549e21daSmrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
10672549e21daSmrg	  cmds=$old_archive_cmds
106731bedbe3fSmrg	elif test -n "$archiver_list_spec"; then
106741bedbe3fSmrg	  func_verbose "using command file archive linking..."
106751bedbe3fSmrg	  for obj in $oldobjs
106761bedbe3fSmrg	  do
106771bedbe3fSmrg	    func_to_tool_file "$obj"
106781bedbe3fSmrg	    $ECHO "$func_to_tool_file_result"
106791bedbe3fSmrg	  done > $output_objdir/$libname.libcmd
106801bedbe3fSmrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
106811bedbe3fSmrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
106821bedbe3fSmrg	  cmds=$old_archive_cmds
10683549e21daSmrg	else
10684549e21daSmrg	  # the command line is too long to link in one step, link in parts
10685549e21daSmrg	  func_verbose "using piecewise archive linking..."
10686549e21daSmrg	  save_RANLIB=$RANLIB
10687549e21daSmrg	  RANLIB=:
10688549e21daSmrg	  objlist=
10689549e21daSmrg	  concat_cmds=
10690549e21daSmrg	  save_oldobjs=$oldobjs
10691549e21daSmrg	  oldobjs=
10692549e21daSmrg	  # Is there a better way of finding the last object in the list?
10693549e21daSmrg	  for obj in $save_oldobjs
10694549e21daSmrg	  do
10695549e21daSmrg	    last_oldobj=$obj
10696549e21daSmrg	  done
10697549e21daSmrg	  eval test_cmds=\"$old_archive_cmds\"
10698549e21daSmrg	  func_len " $test_cmds"
10699549e21daSmrg	  len0=$func_len_result
10700549e21daSmrg	  len=$len0
10701549e21daSmrg	  for obj in $save_oldobjs
10702549e21daSmrg	  do
10703549e21daSmrg	    func_len " $obj"
10704549e21daSmrg	    func_arith $len + $func_len_result
10705549e21daSmrg	    len=$func_arith_result
10706549e21daSmrg	    func_append objlist " $obj"
10707549e21daSmrg	    if test "$len" -lt "$max_cmd_len"; then
10708549e21daSmrg	      :
10709549e21daSmrg	    else
10710549e21daSmrg	      # the above command should be used before it gets too long
10711549e21daSmrg	      oldobjs=$objlist
10712fe4c343aSmrg	      if test "$obj" = "$last_oldobj"; then
10713549e21daSmrg		RANLIB=$save_RANLIB
10714549e21daSmrg	      fi
10715549e21daSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
10716fe4c343aSmrg	      eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
10717549e21daSmrg	      objlist=
10718549e21daSmrg	      len=$len0
10719549e21daSmrg	    fi
10720549e21daSmrg	  done
10721549e21daSmrg	  RANLIB=$save_RANLIB
10722549e21daSmrg	  oldobjs=$objlist
10723fe4c343aSmrg	  if test -z "$oldobjs"; then
10724549e21daSmrg	    eval cmds=\"\$concat_cmds\"
10725549e21daSmrg	  else
10726549e21daSmrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
10727549e21daSmrg	  fi
10728549e21daSmrg	fi
10729549e21daSmrg      fi
10730549e21daSmrg      func_execute_cmds "$cmds" 'exit $?'
10731ba6a1819Smrg    done
10732ba6a1819Smrg
10733549e21daSmrg    test -n "$generated" && \
10734549e21daSmrg      func_show_eval "${RM}r$generated"
10735ba6a1819Smrg
10736549e21daSmrg    # Now create the libtool archive.
10737549e21daSmrg    case $output in
10738549e21daSmrg    *.la)
10739549e21daSmrg      old_library=
10740fe4c343aSmrg      test yes = "$build_old_libs" && old_library=$libname.$libext
10741549e21daSmrg      func_verbose "creating $output"
10742ba6a1819Smrg
10743549e21daSmrg      # Preserve any variables that may affect compiler behavior
10744549e21daSmrg      for var in $variables_saved_for_relink; do
10745549e21daSmrg	if eval test -z \"\${$var+set}\"; then
10746549e21daSmrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10747549e21daSmrg	elif eval var_value=\$$var; test -z "$var_value"; then
10748549e21daSmrg	  relink_command="$var=; export $var; $relink_command"
10749ba6a1819Smrg	else
10750549e21daSmrg	  func_quote_for_eval "$var_value"
10751549e21daSmrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
10752ba6a1819Smrg	fi
10753549e21daSmrg      done
10754549e21daSmrg      # Quote the link command for shipping.
10755fe4c343aSmrg      relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
10756549e21daSmrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
10757fe4c343aSmrg      if test yes = "$hardcode_automatic"; then
10758549e21daSmrg	relink_command=
10759549e21daSmrg      fi
10760ba6a1819Smrg
10761549e21daSmrg      # Only create the output if not a dry run.
10762549e21daSmrg      $opt_dry_run || {
10763549e21daSmrg	for installed in no yes; do
10764fe4c343aSmrg	  if test yes = "$installed"; then
10765549e21daSmrg	    if test -z "$install_libdir"; then
10766549e21daSmrg	      break
10767549e21daSmrg	    fi
10768fe4c343aSmrg	    output=$output_objdir/${outputname}i
10769549e21daSmrg	    # Replace all uninstalled libtool libraries with the installed ones
10770549e21daSmrg	    newdependency_libs=
10771549e21daSmrg	    for deplib in $dependency_libs; do
10772549e21daSmrg	      case $deplib in
10773549e21daSmrg	      *.la)
10774549e21daSmrg		func_basename "$deplib"
10775fe4c343aSmrg		name=$func_basename_result
107761bedbe3fSmrg		func_resolve_sysroot "$deplib"
10777fe4c343aSmrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
10778549e21daSmrg		test -z "$libdir" && \
10779fe4c343aSmrg		  func_fatal_error "'$deplib' is not a valid libtool archive"
107801bedbe3fSmrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
107811bedbe3fSmrg		;;
107821bedbe3fSmrg	      -L*)
107831bedbe3fSmrg		func_stripname -L '' "$deplib"
107841bedbe3fSmrg		func_replace_sysroot "$func_stripname_result"
107851bedbe3fSmrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
107861bedbe3fSmrg		;;
107871bedbe3fSmrg	      -R*)
107881bedbe3fSmrg		func_stripname -R '' "$deplib"
107891bedbe3fSmrg		func_replace_sysroot "$func_stripname_result"
107901bedbe3fSmrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
10791549e21daSmrg		;;
107921bedbe3fSmrg	      *) func_append newdependency_libs " $deplib" ;;
10793549e21daSmrg	      esac
10794549e21daSmrg	    done
10795fe4c343aSmrg	    dependency_libs=$newdependency_libs
10796549e21daSmrg	    newdlfiles=
10797549e21daSmrg
10798549e21daSmrg	    for lib in $dlfiles; do
10799549e21daSmrg	      case $lib in
10800549e21daSmrg	      *.la)
10801549e21daSmrg	        func_basename "$lib"
10802fe4c343aSmrg		name=$func_basename_result
10803fe4c343aSmrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
10804549e21daSmrg		test -z "$libdir" && \
10805fe4c343aSmrg		  func_fatal_error "'$lib' is not a valid libtool archive"
108061bedbe3fSmrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
10807549e21daSmrg		;;
108081bedbe3fSmrg	      *) func_append newdlfiles " $lib" ;;
10809549e21daSmrg	      esac
10810549e21daSmrg	    done
10811fe4c343aSmrg	    dlfiles=$newdlfiles
10812549e21daSmrg	    newdlprefiles=
10813549e21daSmrg	    for lib in $dlprefiles; do
10814549e21daSmrg	      case $lib in
10815549e21daSmrg	      *.la)
10816549e21daSmrg		# Only pass preopened files to the pseudo-archive (for
10817549e21daSmrg		# eventual linking with the app. that links it) if we
10818549e21daSmrg		# didn't already link the preopened objects directly into
10819549e21daSmrg		# the library:
10820549e21daSmrg		func_basename "$lib"
10821fe4c343aSmrg		name=$func_basename_result
10822fe4c343aSmrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
10823549e21daSmrg		test -z "$libdir" && \
10824fe4c343aSmrg		  func_fatal_error "'$lib' is not a valid libtool archive"
108251bedbe3fSmrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
10826549e21daSmrg		;;
10827549e21daSmrg	      esac
10828549e21daSmrg	    done
10829fe4c343aSmrg	    dlprefiles=$newdlprefiles
10830549e21daSmrg	  else
10831549e21daSmrg	    newdlfiles=
10832549e21daSmrg	    for lib in $dlfiles; do
10833549e21daSmrg	      case $lib in
10834fe4c343aSmrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
10835549e21daSmrg		*) abs=`pwd`"/$lib" ;;
10836549e21daSmrg	      esac
108371bedbe3fSmrg	      func_append newdlfiles " $abs"
10838549e21daSmrg	    done
10839fe4c343aSmrg	    dlfiles=$newdlfiles
10840549e21daSmrg	    newdlprefiles=
10841549e21daSmrg	    for lib in $dlprefiles; do
10842549e21daSmrg	      case $lib in
10843fe4c343aSmrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
10844549e21daSmrg		*) abs=`pwd`"/$lib" ;;
10845549e21daSmrg	      esac
108461bedbe3fSmrg	      func_append newdlprefiles " $abs"
10847549e21daSmrg	    done
10848fe4c343aSmrg	    dlprefiles=$newdlprefiles
10849549e21daSmrg	  fi
10850549e21daSmrg	  $RM $output
10851549e21daSmrg	  # place dlname in correct position for cygwin
10852549e21daSmrg	  # In fact, it would be nice if we could use this code for all target
10853549e21daSmrg	  # systems that can't hard-code library paths into their executables
10854549e21daSmrg	  # and that have no shared library path variable independent of PATH,
10855549e21daSmrg	  # but it turns out we can't easily determine that from inspecting
10856549e21daSmrg	  # libtool variables, so we have to hard-code the OSs to which it
10857549e21daSmrg	  # applies here; at the moment, that means platforms that use the PE
10858549e21daSmrg	  # object format with DLL files.  See the long comment at the top of
10859549e21daSmrg	  # tests/bindir.at for full details.
10860549e21daSmrg	  tdlname=$dlname
10861549e21daSmrg	  case $host,$output,$installed,$module,$dlname in
10862549e21daSmrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
10863549e21daSmrg	      # If a -bindir argument was supplied, place the dll there.
10864fe4c343aSmrg	      if test -n "$bindir"; then
10865549e21daSmrg		func_relative_path "$install_libdir" "$bindir"
10866fe4c343aSmrg		tdlname=$func_relative_path_result/$dlname
10867549e21daSmrg	      else
10868549e21daSmrg		# Otherwise fall back on heuristic.
10869549e21daSmrg		tdlname=../bin/$dlname
10870549e21daSmrg	      fi
10871549e21daSmrg	      ;;
10872549e21daSmrg	  esac
10873549e21daSmrg	  $ECHO > $output "\
10874549e21daSmrg# $outputname - a libtool library file
10875fe4c343aSmrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
10876549e21daSmrg#
10877549e21daSmrg# Please DO NOT delete this file!
10878549e21daSmrg# It is necessary for linking the library.
10879ba6a1819Smrg
10880549e21daSmrg# The name that we can dlopen(3).
10881549e21daSmrgdlname='$tdlname'
10882ba6a1819Smrg
10883549e21daSmrg# Names of this library.
10884549e21daSmrglibrary_names='$library_names'
10885ba6a1819Smrg
10886549e21daSmrg# The name of the static archive.
10887549e21daSmrgold_library='$old_library'
10888ba6a1819Smrg
10889fe4c343aSmrg# Linker flags that cannot go in dependency_libs.
10890549e21daSmrginherited_linker_flags='$new_inherited_linker_flags'
10891ba6a1819Smrg
10892549e21daSmrg# Libraries that this one depends upon.
10893549e21daSmrgdependency_libs='$dependency_libs'
10894ba6a1819Smrg
10895549e21daSmrg# Names of additional weak libraries provided by this library
10896549e21daSmrgweak_library_names='$weak_libs'
10897ba6a1819Smrg
10898549e21daSmrg# Version information for $libname.
10899549e21daSmrgcurrent=$current
10900549e21daSmrgage=$age
10901549e21daSmrgrevision=$revision
10902ba6a1819Smrg
10903549e21daSmrg# Is this an already installed library?
10904549e21daSmrginstalled=$installed
10905ba6a1819Smrg
10906549e21daSmrg# Should we warn about portability when linking against -modules?
10907549e21daSmrgshouldnotlink=$module
10908ba6a1819Smrg
10909549e21daSmrg# Files to dlopen/dlpreopen
10910549e21daSmrgdlopen='$dlfiles'
10911549e21daSmrgdlpreopen='$dlprefiles'
10912ba6a1819Smrg
10913549e21daSmrg# Directory that this library needs to be installed in:
10914549e21daSmrglibdir='$install_libdir'"
10915fe4c343aSmrg	  if test no,yes = "$installed,$need_relink"; then
10916549e21daSmrg	    $ECHO >> $output "\
10917549e21daSmrgrelink_command=\"$relink_command\""
10918549e21daSmrg	  fi
10919549e21daSmrg	done
10920549e21daSmrg      }
10921ba6a1819Smrg
10922549e21daSmrg      # Do a symbolic link so that the libtool archive can be found in
10923549e21daSmrg      # LD_LIBRARY_PATH before the program is installed.
10924549e21daSmrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
10925549e21daSmrg      ;;
10926549e21daSmrg    esac
10927549e21daSmrg    exit $EXIT_SUCCESS
10928549e21daSmrg}
10929ba6a1819Smrg
10930fe4c343aSmrgif test link = "$opt_mode" || test relink = "$opt_mode"; then
10931fe4c343aSmrg  func_mode_link ${1+"$@"}
10932fe4c343aSmrgfi
10933ba6a1819Smrg
10934ba6a1819Smrg
10935549e21daSmrg# func_mode_uninstall arg...
10936549e21daSmrgfunc_mode_uninstall ()
10937549e21daSmrg{
10938fe4c343aSmrg    $debug_cmd
10939fe4c343aSmrg
10940fe4c343aSmrg    RM=$nonopt
10941ba6a1819Smrg    files=
10942fe4c343aSmrg    rmforce=false
10943ba6a1819Smrg    exit_status=0
10944ba6a1819Smrg
10945ba6a1819Smrg    # This variable tells wrapper scripts just to set variables rather
10946ba6a1819Smrg    # than running their programs.
10947fe4c343aSmrg    libtool_install_magic=$magic
10948ba6a1819Smrg
10949ba6a1819Smrg    for arg
10950ba6a1819Smrg    do
10951ba6a1819Smrg      case $arg in
10952fe4c343aSmrg      -f) func_append RM " $arg"; rmforce=: ;;
109531bedbe3fSmrg      -*) func_append RM " $arg" ;;
109541bedbe3fSmrg      *) func_append files " $arg" ;;
10955ba6a1819Smrg      esac
10956ba6a1819Smrg    done
10957ba6a1819Smrg
10958549e21daSmrg    test -z "$RM" && \
10959549e21daSmrg      func_fatal_help "you must specify an RM program"
10960ba6a1819Smrg
10961ba6a1819Smrg    rmdirs=
10962ba6a1819Smrg
10963ba6a1819Smrg    for file in $files; do
10964549e21daSmrg      func_dirname "$file" "" "."
10965fe4c343aSmrg      dir=$func_dirname_result
10966fe4c343aSmrg      if test . = "$dir"; then
10967fe4c343aSmrg	odir=$objdir
10968ba6a1819Smrg      else
10969fe4c343aSmrg	odir=$dir/$objdir
10970ba6a1819Smrg      fi
10971549e21daSmrg      func_basename "$file"
10972fe4c343aSmrg      name=$func_basename_result
10973fe4c343aSmrg      test uninstall = "$opt_mode" && odir=$dir
10974ba6a1819Smrg
109751bedbe3fSmrg      # Remember odir for removal later, being careful to avoid duplicates
10976fe4c343aSmrg      if test clean = "$opt_mode"; then
10977ba6a1819Smrg	case " $rmdirs " in
109781bedbe3fSmrg	  *" $odir "*) ;;
109791bedbe3fSmrg	  *) func_append rmdirs " $odir" ;;
10980ba6a1819Smrg	esac
10981ba6a1819Smrg      fi
10982ba6a1819Smrg
10983ba6a1819Smrg      # Don't error if the file doesn't exist and rm -f was used.
10984549e21daSmrg      if { test -L "$file"; } >/dev/null 2>&1 ||
10985549e21daSmrg	 { test -h "$file"; } >/dev/null 2>&1 ||
10986549e21daSmrg	 test -f "$file"; then
10987ba6a1819Smrg	:
10988ba6a1819Smrg      elif test -d "$file"; then
10989ba6a1819Smrg	exit_status=1
10990ba6a1819Smrg	continue
10991fe4c343aSmrg      elif $rmforce; then
10992ba6a1819Smrg	continue
10993ba6a1819Smrg      fi
10994ba6a1819Smrg
10995fe4c343aSmrg      rmfiles=$file
10996ba6a1819Smrg
10997ba6a1819Smrg      case $name in
10998ba6a1819Smrg      *.la)
10999ba6a1819Smrg	# Possibly a libtool archive, so verify it.
11000549e21daSmrg	if func_lalib_p "$file"; then
11001549e21daSmrg	  func_source $dir/$name
11002ba6a1819Smrg
11003ba6a1819Smrg	  # Delete the libtool libraries and symlinks.
11004ba6a1819Smrg	  for n in $library_names; do
110051bedbe3fSmrg	    func_append rmfiles " $odir/$n"
11006ba6a1819Smrg	  done
110071bedbe3fSmrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
11008ba6a1819Smrg
11009fe4c343aSmrg	  case $opt_mode in
11010ba6a1819Smrg	  clean)
110111bedbe3fSmrg	    case " $library_names " in
11012ba6a1819Smrg	    *" $dlname "*) ;;
110131bedbe3fSmrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
11014ba6a1819Smrg	    esac
110151bedbe3fSmrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
11016ba6a1819Smrg	    ;;
11017ba6a1819Smrg	  uninstall)
11018ba6a1819Smrg	    if test -n "$library_names"; then
11019ba6a1819Smrg	      # Do each command in the postuninstall commands.
11020fe4c343aSmrg	      func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
11021ba6a1819Smrg	    fi
11022ba6a1819Smrg
11023ba6a1819Smrg	    if test -n "$old_library"; then
11024ba6a1819Smrg	      # Do each command in the old_postuninstall commands.
11025fe4c343aSmrg	      func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
11026ba6a1819Smrg	    fi
11027ba6a1819Smrg	    # FIXME: should reinstall the best remaining shared library.
11028ba6a1819Smrg	    ;;
11029ba6a1819Smrg	  esac
11030ba6a1819Smrg	fi
11031ba6a1819Smrg	;;
11032ba6a1819Smrg
11033ba6a1819Smrg      *.lo)
11034ba6a1819Smrg	# Possibly a libtool object, so verify it.
11035549e21daSmrg	if func_lalib_p "$file"; then
11036ba6a1819Smrg
11037ba6a1819Smrg	  # Read the .lo file
11038549e21daSmrg	  func_source $dir/$name
11039ba6a1819Smrg
11040ba6a1819Smrg	  # Add PIC object to the list of files to remove.
11041fe4c343aSmrg	  if test -n "$pic_object" && test none != "$pic_object"; then
110421bedbe3fSmrg	    func_append rmfiles " $dir/$pic_object"
11043ba6a1819Smrg	  fi
11044ba6a1819Smrg
11045ba6a1819Smrg	  # Add non-PIC object to the list of files to remove.
11046fe4c343aSmrg	  if test -n "$non_pic_object" && test none != "$non_pic_object"; then
110471bedbe3fSmrg	    func_append rmfiles " $dir/$non_pic_object"
11048ba6a1819Smrg	  fi
11049ba6a1819Smrg	fi
11050ba6a1819Smrg	;;
11051ba6a1819Smrg
11052ba6a1819Smrg      *)
11053fe4c343aSmrg	if test clean = "$opt_mode"; then
11054ba6a1819Smrg	  noexename=$name
11055ba6a1819Smrg	  case $file in
11056ba6a1819Smrg	  *.exe)
11057549e21daSmrg	    func_stripname '' '.exe' "$file"
11058549e21daSmrg	    file=$func_stripname_result
11059549e21daSmrg	    func_stripname '' '.exe' "$name"
11060549e21daSmrg	    noexename=$func_stripname_result
11061ba6a1819Smrg	    # $file with .exe has already been added to rmfiles,
11062ba6a1819Smrg	    # add $file without .exe
110631bedbe3fSmrg	    func_append rmfiles " $file"
11064ba6a1819Smrg	    ;;
11065ba6a1819Smrg	  esac
11066ba6a1819Smrg	  # Do a test to see if this is a libtool program.
11067549e21daSmrg	  if func_ltwrapper_p "$file"; then
11068549e21daSmrg	    if func_ltwrapper_executable_p "$file"; then
11069549e21daSmrg	      func_ltwrapper_scriptname "$file"
11070549e21daSmrg	      relink_command=
11071549e21daSmrg	      func_source $func_ltwrapper_scriptname_result
110721bedbe3fSmrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
11073549e21daSmrg	    else
11074549e21daSmrg	      relink_command=
11075549e21daSmrg	      func_source $dir/$noexename
11076549e21daSmrg	    fi
11077ba6a1819Smrg
11078ba6a1819Smrg	    # note $name still contains .exe if it was in $file originally
11079ba6a1819Smrg	    # as does the version of $file that was added into $rmfiles
11080fe4c343aSmrg	    func_append rmfiles " $odir/$name $odir/${name}S.$objext"
11081fe4c343aSmrg	    if test yes = "$fast_install" && test -n "$relink_command"; then
110821bedbe3fSmrg	      func_append rmfiles " $odir/lt-$name"
11083ba6a1819Smrg	    fi
11084fe4c343aSmrg	    if test "X$noexename" != "X$name"; then
11085fe4c343aSmrg	      func_append rmfiles " $odir/lt-$noexename.c"
11086ba6a1819Smrg	    fi
11087ba6a1819Smrg	  fi
11088ba6a1819Smrg	fi
11089ba6a1819Smrg	;;
11090ba6a1819Smrg      esac
11091549e21daSmrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
11092ba6a1819Smrg    done
11093ba6a1819Smrg
11094fe4c343aSmrg    # Try to remove the $objdir's in the directories where we deleted files
11095ba6a1819Smrg    for dir in $rmdirs; do
11096ba6a1819Smrg      if test -d "$dir"; then
11097549e21daSmrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
11098ba6a1819Smrg      fi
11099ba6a1819Smrg    done
11100ba6a1819Smrg
11101ba6a1819Smrg    exit $exit_status
11102549e21daSmrg}
11103ba6a1819Smrg
11104fe4c343aSmrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
11105fe4c343aSmrg  func_mode_uninstall ${1+"$@"}
11106fe4c343aSmrgfi
11107ba6a1819Smrg
111081bedbe3fSmrgtest -z "$opt_mode" && {
11109fe4c343aSmrg  help=$generic_help
11110549e21daSmrg  func_fatal_help "you must specify a MODE"
11111549e21daSmrg}
11112549e21daSmrg
11113549e21daSmrgtest -z "$exec_cmd" && \
11114fe4c343aSmrg  func_fatal_help "invalid operation mode '$opt_mode'"
11115ba6a1819Smrg
11116ba6a1819Smrgif test -n "$exec_cmd"; then
11117549e21daSmrg  eval exec "$exec_cmd"
11118ba6a1819Smrg  exit $EXIT_FAILURE
11119ba6a1819Smrgfi
11120ba6a1819Smrg
11121549e21daSmrgexit $exit_status
11122ba6a1819Smrg
11123ba6a1819Smrg
11124ba6a1819Smrg# The TAGs below are defined such that we never get into a situation
11125fe4c343aSmrg# where we disable both kinds of libraries.  Given conflicting
11126ba6a1819Smrg# choices, we go for a static library, that is the most portable,
11127ba6a1819Smrg# since we can't tell whether shared libraries were disabled because
11128ba6a1819Smrg# the user asked for that or because the platform doesn't support
11129ba6a1819Smrg# them.  This is particularly important on AIX, because we don't
11130ba6a1819Smrg# support having both static and shared libraries enabled at the same
11131ba6a1819Smrg# time on that platform, so we default to a shared-only configuration.
11132ba6a1819Smrg# If a disable-shared tag is given, we'll fallback to a static-only
11133ba6a1819Smrg# configuration.  But we'll never go from static-only to shared-only.
11134ba6a1819Smrg
11135ba6a1819Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
11136549e21daSmrgbuild_libtool_libs=no
11137549e21daSmrgbuild_old_libs=yes
11138ba6a1819Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
11139ba6a1819Smrg
11140ba6a1819Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
11141549e21daSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
11142ba6a1819Smrg# ### END LIBTOOL TAG CONFIG: disable-static
11143ba6a1819Smrg
11144ba6a1819Smrg# Local Variables:
11145ba6a1819Smrg# mode:shell-script
11146ba6a1819Smrg# sh-indentation:2
11147ba6a1819Smrg# End:
11148