1289166Speter
2289166Speter# libtool (GNU libtool) 2.4.2
3289166Speter# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
4289166Speter
5251883Speter# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
6289166Speter# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
7289166Speter# This is free software; see the source for copying conditions.  There is NO
8289166Speter# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9289166Speter
10289166Speter# GNU Libtool is free software; you can redistribute it and/or modify
11251883Speter# it under the terms of the GNU General Public License as published by
12251883Speter# the Free Software Foundation; either version 2 of the License, or
13251883Speter# (at your option) any later version.
14251883Speter#
15289166Speter# As a special exception to the GNU General Public License,
16289166Speter# if you distribute this file as part of a program or library that
17289166Speter# is built using GNU Libtool, you may include this file under the
18289166Speter# same distribution terms that you use for the rest of that program.
19289166Speter#
20289166Speter# GNU Libtool is distributed in the hope that it will be useful, but
21251883Speter# WITHOUT ANY WARRANTY; without even the implied warranty of
22251883Speter# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23251883Speter# General Public License for more details.
24251883Speter#
25251883Speter# You should have received a copy of the GNU General Public License
26289166Speter# along with GNU Libtool; see the file COPYING.  If not, a copy
27289166Speter# can be downloaded from http://www.gnu.org/licenses/gpl.html,
28289166Speter# or obtained by writing to the Free Software Foundation, Inc.,
29289166Speter# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
30289166Speter
31289166Speter# Usage: $progname [OPTION]... [MODE-ARG]...
32251883Speter#
33289166Speter# Provide generalized library-building support services.
34289166Speter#
35289166Speter#       --config             show all configuration variables
36289166Speter#       --debug              enable verbose shell tracing
37289166Speter#   -n, --dry-run            display commands without modifying any files
38289166Speter#       --features           display basic configuration information and exit
39289166Speter#       --mode=MODE          use operation mode MODE
40289166Speter#       --preserve-dup-deps  don't remove duplicate dependency libraries
41289166Speter#       --quiet, --silent    don't print informational messages
42289166Speter#       --no-quiet, --no-silent
43289166Speter#                            print informational messages (default)
44289166Speter#       --no-warn            don't display warning messages
45289166Speter#       --tag=TAG            use configuration variables from tag TAG
46289166Speter#   -v, --verbose            print more informational messages than default
47289166Speter#       --no-verbose         don't print the extra informational messages
48289166Speter#       --version            print version information
49289166Speter#   -h, --help, --help-all   print short, long, or detailed help message
50289166Speter#
51289166Speter# MODE must be one of the following:
52289166Speter#
53289166Speter#         clean              remove files from the build directory
54289166Speter#         compile            compile a source file into a libtool object
55289166Speter#         execute            automatically set library path, then run a program
56289166Speter#         finish             complete the installation of libtool libraries
57289166Speter#         install            install libraries or executables
58289166Speter#         link               create a library or an executable
59289166Speter#         uninstall          remove libraries from an installed directory
60289166Speter#
61289166Speter# MODE-ARGS vary depending on the MODE.  When passed as first option,
62289166Speter# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
63289166Speter# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
64289166Speter#
65289166Speter# When reporting a bug, please describe a test case to reproduce it and
66289166Speter# include the following information:
67289166Speter#
68289166Speter#         host-triplet:	$host
69289166Speter#         shell:		$SHELL
70289166Speter#         compiler:		$LTCC
71289166Speter#         compiler flags:		$LTCFLAGS
72289166Speter#         linker:		$LD (gnu? $with_gnu_ld)
73289166Speter#         $progname:	(GNU libtool) 2.4.2
74289166Speter#         automake:	$automake_version
75289166Speter#         autoconf:	$autoconf_version
76289166Speter#
77289166Speter# Report bugs to <bug-libtool@gnu.org>.
78289166Speter# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
79289166Speter# General help using GNU software: <http://www.gnu.org/gethelp/>.
80251883Speter
81289166SpeterPROGRAM=libtool
82251883SpeterPACKAGE=libtool
83289166SpeterVERSION=2.4.2
84289166SpeterTIMESTAMP=""
85289166Speterpackage_revision=1.3337
86251883Speter
87289166Speter# Be Bourne compatible
88251883Speterif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
89251883Speter  emulate sh
90251883Speter  NULLCMD=:
91251883Speter  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
92251883Speter  # is contrary to our usage.  Disable this feature.
93251883Speter  alias -g '${1+"$@"}'='"$@"'
94251883Speter  setopt NO_GLOB_SUBST
95251883Speterelse
96251883Speter  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
97251883Speterfi
98251883SpeterBIN_SH=xpg4; export BIN_SH # for Tru64
99251883SpeterDUALCASE=1; export DUALCASE # for MKS sh
100251883Speter
101289166Speter# A function that is used when there is no print builtin or printf.
102289166Speterfunc_fallback_echo ()
103289166Speter{
104289166Speter  eval 'cat <<_LTECHO_EOF
105289166Speter$1
106289166Speter_LTECHO_EOF'
107289166Speter}
108251883Speter
109289166Speter# NLS nuisances: We save the old values to restore during execute mode.
110289166Speterlt_user_locale=
111289166Speterlt_safe_locale=
112289166Speterfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
113251883Speterdo
114251883Speter  eval "if test \"\${$lt_var+set}\" = set; then
115289166Speter          save_$lt_var=\$$lt_var
116289166Speter          $lt_var=C
117251883Speter	  export $lt_var
118289166Speter	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
119289166Speter	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
120251883Speter	fi"
121251883Speterdone
122289166SpeterLC_ALL=C
123289166SpeterLANGUAGE=C
124289166Speterexport LANGUAGE LC_ALL
125251883Speter
126289166Speter$lt_unset CDPATH
127289166Speter
128289166Speter
129289166Speter# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
130289166Speter# is ksh but when the shell is invoked as "sh" and the current value of
131289166Speter# the _XPG environment variable is not equal to 1 (one), the special
132289166Speter# positional parameter $0, within a function call, is the name of the
133289166Speter# function.
134289166Speterprogpath="$0"
135289166Speter
136289166Speter
137289166Speter
138289166Speter: ${CP="cp -f"}
139289166Spetertest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
140289166Speter: ${MAKE="make"}
141289166Speter: ${MKDIR="mkdir"}
142289166Speter: ${MV="mv -f"}
143289166Speter: ${RM="rm -f"}
144289166Speter: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
145289166Speter: ${Xsed="$SED -e 1s/^X//"}
146289166Speter
147289166Speter# Global variables:
148289166SpeterEXIT_SUCCESS=0
149289166SpeterEXIT_FAILURE=1
150289166SpeterEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
151289166SpeterEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
152289166Speter
153289166Speterexit_status=$EXIT_SUCCESS
154289166Speter
155251883Speter# Make sure IFS has a sensible default
156251883Speterlt_nl='
157251883Speter'
158251883SpeterIFS=" 	$lt_nl"
159251883Speter
160289166Speterdirname="s,/[^/]*$,,"
161289166Speterbasename="s,^.*/,,"
162251883Speter
163289166Speter# func_dirname file append nondir_replacement
164289166Speter# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
165289166Speter# otherwise set result to NONDIR_REPLACEMENT.
166289166Speterfunc_dirname ()
167289166Speter{
168289166Speter    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
169289166Speter    if test "X$func_dirname_result" = "X${1}"; then
170289166Speter      func_dirname_result="${3}"
171289166Speter    else
172289166Speter      func_dirname_result="$func_dirname_result${2}"
173289166Speter    fi
174289166Speter} # func_dirname may be replaced by extended shell implementation
175251883Speter
176251883Speter
177289166Speter# func_basename file
178289166Speterfunc_basename ()
179289166Speter{
180289166Speter    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
181289166Speter} # func_basename may be replaced by extended shell implementation
182289166Speter
183289166Speter
184289166Speter# func_dirname_and_basename file append nondir_replacement
185289166Speter# perform func_basename and func_dirname in a single function
186289166Speter# call:
187289166Speter#   dirname:  Compute the dirname of FILE.  If nonempty,
188289166Speter#             add APPEND to the result, otherwise set result
189289166Speter#             to NONDIR_REPLACEMENT.
190289166Speter#             value returned in "$func_dirname_result"
191289166Speter#   basename: Compute filename of FILE.
192289166Speter#             value retuned in "$func_basename_result"
193289166Speter# Implementation must be kept synchronized with func_dirname
194289166Speter# and func_basename. For efficiency, we do not delegate to
195289166Speter# those functions but instead duplicate the functionality here.
196289166Speterfunc_dirname_and_basename ()
197289166Speter{
198289166Speter    # Extract subdirectory from the argument.
199289166Speter    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
200289166Speter    if test "X$func_dirname_result" = "X${1}"; then
201289166Speter      func_dirname_result="${3}"
202289166Speter    else
203289166Speter      func_dirname_result="$func_dirname_result${2}"
204289166Speter    fi
205289166Speter    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
206289166Speter} # func_dirname_and_basename may be replaced by extended shell implementation
207289166Speter
208289166Speter
209289166Speter# func_stripname prefix suffix name
210289166Speter# strip PREFIX and SUFFIX off of NAME.
211289166Speter# PREFIX and SUFFIX must not contain globbing or regex special
212289166Speter# characters, hashes, percent signs, but SUFFIX may contain a leading
213289166Speter# dot (in which case that matches only a dot).
214289166Speter# func_strip_suffix prefix name
215289166Speterfunc_stripname ()
216289166Speter{
217289166Speter    case ${2} in
218289166Speter      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
219289166Speter      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
220289166Speter    esac
221289166Speter} # func_stripname may be replaced by extended shell implementation
222289166Speter
223289166Speter
224289166Speter# These SED scripts presuppose an absolute path with a trailing slash.
225289166Speterpathcar='s,^/\([^/]*\).*$,\1,'
226289166Speterpathcdr='s,^/[^/]*,,'
227289166Speterremovedotparts=':dotsl
228289166Speter		s@/\./@/@g
229289166Speter		t dotsl
230289166Speter		s,/\.$,/,'
231289166Spetercollapseslashes='s@/\{1,\}@/@g'
232289166Speterfinalslash='s,/*$,/,'
233289166Speter
234289166Speter# func_normal_abspath PATH
235289166Speter# Remove doubled-up and trailing slashes, "." path components,
236289166Speter# and cancel out any ".." path components in PATH after making
237289166Speter# it an absolute path.
238289166Speter#             value returned in "$func_normal_abspath_result"
239289166Speterfunc_normal_abspath ()
240289166Speter{
241289166Speter  # Start from root dir and reassemble the path.
242289166Speter  func_normal_abspath_result=
243289166Speter  func_normal_abspath_tpath=$1
244289166Speter  func_normal_abspath_altnamespace=
245289166Speter  case $func_normal_abspath_tpath in
246289166Speter    "")
247289166Speter      # Empty path, that just means $cwd.
248289166Speter      func_stripname '' '/' "`pwd`"
249289166Speter      func_normal_abspath_result=$func_stripname_result
250289166Speter      return
251289166Speter    ;;
252289166Speter    # The next three entries are used to spot a run of precisely
253289166Speter    # two leading slashes without using negated character classes;
254289166Speter    # we take advantage of case's first-match behaviour.
255289166Speter    ///*)
256289166Speter      # Unusual form of absolute path, do nothing.
257289166Speter    ;;
258289166Speter    //*)
259289166Speter      # Not necessarily an ordinary path; POSIX reserves leading '//'
260289166Speter      # and for example Cygwin uses it to access remote file shares
261289166Speter      # over CIFS/SMB, so we conserve a leading double slash if found.
262289166Speter      func_normal_abspath_altnamespace=/
263289166Speter    ;;
264289166Speter    /*)
265289166Speter      # Absolute path, do nothing.
266289166Speter    ;;
267289166Speter    *)
268289166Speter      # Relative path, prepend $cwd.
269289166Speter      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
270289166Speter    ;;
271289166Speter  esac
272289166Speter  # Cancel out all the simple stuff to save iterations.  We also want
273289166Speter  # the path to end with a slash for ease of parsing, so make sure
274289166Speter  # there is one (and only one) here.
275289166Speter  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
276289166Speter        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
277289166Speter  while :; do
278289166Speter    # Processed it all yet?
279289166Speter    if test "$func_normal_abspath_tpath" = / ; then
280289166Speter      # If we ascended to the root using ".." the result may be empty now.
281289166Speter      if test -z "$func_normal_abspath_result" ; then
282289166Speter        func_normal_abspath_result=/
283289166Speter      fi
284289166Speter      break
285289166Speter    fi
286289166Speter    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
287289166Speter        -e "$pathcar"`
288289166Speter    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
289289166Speter        -e "$pathcdr"`
290289166Speter    # Figure out what to do with it
291289166Speter    case $func_normal_abspath_tcomponent in
292289166Speter      "")
293289166Speter        # Trailing empty path component, ignore it.
294289166Speter      ;;
295289166Speter      ..)
296289166Speter        # Parent dir; strip last assembled component from result.
297289166Speter        func_dirname "$func_normal_abspath_result"
298289166Speter        func_normal_abspath_result=$func_dirname_result
299289166Speter      ;;
300289166Speter      *)
301289166Speter        # Actual path component, append it.
302289166Speter        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
303289166Speter      ;;
304289166Speter    esac
305289166Speter  done
306289166Speter  # Restore leading double-slash if one was found on entry.
307289166Speter  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
308289166Speter}
309289166Speter
310289166Speter# func_relative_path SRCDIR DSTDIR
311289166Speter# generates a relative path from SRCDIR to DSTDIR, with a trailing
312289166Speter# slash if non-empty, suitable for immediately appending a filename
313289166Speter# without needing to append a separator.
314289166Speter#             value returned in "$func_relative_path_result"
315289166Speterfunc_relative_path ()
316289166Speter{
317289166Speter  func_relative_path_result=
318289166Speter  func_normal_abspath "$1"
319289166Speter  func_relative_path_tlibdir=$func_normal_abspath_result
320289166Speter  func_normal_abspath "$2"
321289166Speter  func_relative_path_tbindir=$func_normal_abspath_result
322289166Speter
323289166Speter  # Ascend the tree starting from libdir
324289166Speter  while :; do
325289166Speter    # check if we have found a prefix of bindir
326289166Speter    case $func_relative_path_tbindir in
327289166Speter      $func_relative_path_tlibdir)
328289166Speter        # found an exact match
329289166Speter        func_relative_path_tcancelled=
330289166Speter        break
331289166Speter        ;;
332289166Speter      $func_relative_path_tlibdir*)
333289166Speter        # found a matching prefix
334289166Speter        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
335289166Speter        func_relative_path_tcancelled=$func_stripname_result
336289166Speter        if test -z "$func_relative_path_result"; then
337289166Speter          func_relative_path_result=.
338289166Speter        fi
339289166Speter        break
340289166Speter        ;;
341289166Speter      *)
342289166Speter        func_dirname $func_relative_path_tlibdir
343289166Speter        func_relative_path_tlibdir=${func_dirname_result}
344289166Speter        if test "x$func_relative_path_tlibdir" = x ; then
345289166Speter          # Have to descend all the way to the root!
346289166Speter          func_relative_path_result=../$func_relative_path_result
347289166Speter          func_relative_path_tcancelled=$func_relative_path_tbindir
348289166Speter          break
349289166Speter        fi
350289166Speter        func_relative_path_result=../$func_relative_path_result
351289166Speter        ;;
352289166Speter    esac
353289166Speter  done
354289166Speter
355289166Speter  # Now calculate path; take care to avoid doubling-up slashes.
356289166Speter  func_stripname '' '/' "$func_relative_path_result"
357289166Speter  func_relative_path_result=$func_stripname_result
358289166Speter  func_stripname '/' '/' "$func_relative_path_tcancelled"
359289166Speter  if test "x$func_stripname_result" != x ; then
360289166Speter    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
361289166Speter  fi
362289166Speter
363289166Speter  # Normalisation. If bindir is libdir, return empty string,
364289166Speter  # else relative path ending with a slash; either way, target
365289166Speter  # file name can be directly appended.
366289166Speter  if test ! -z "$func_relative_path_result"; then
367289166Speter    func_stripname './' '' "$func_relative_path_result/"
368289166Speter    func_relative_path_result=$func_stripname_result
369289166Speter  fi
370289166Speter}
371289166Speter
372289166Speter# The name of this program:
373289166Speterfunc_dirname_and_basename "$progpath"
374289166Speterprogname=$func_basename_result
375289166Speter
376289166Speter# Make sure we have an absolute path for reexecution:
377289166Spetercase $progpath in
378289166Speter  [\\/]*|[A-Za-z]:\\*) ;;
379289166Speter  *[\\/]*)
380289166Speter     progdir=$func_dirname_result
381289166Speter     progdir=`cd "$progdir" && pwd`
382289166Speter     progpath="$progdir/$progname"
383289166Speter     ;;
384289166Speter  *)
385289166Speter     save_IFS="$IFS"
386289166Speter     IFS=${PATH_SEPARATOR-:}
387289166Speter     for progdir in $PATH; do
388289166Speter       IFS="$save_IFS"
389289166Speter       test -x "$progdir/$progname" && break
390289166Speter     done
391289166Speter     IFS="$save_IFS"
392289166Speter     test -n "$progdir" || progdir=`pwd`
393289166Speter     progpath="$progdir/$progname"
394289166Speter     ;;
395289166Speteresac
396289166Speter
397289166Speter# Sed substitution that helps us do robust quoting.  It backslashifies
398289166Speter# metacharacters that are still active within double-quoted strings.
399289166SpeterXsed="${SED}"' -e 1s/^X//'
400289166Spetersed_quote_subst='s/\([`"$\\]\)/\\\1/g'
401289166Speter
402289166Speter# Same as above, but do not quote variable references.
403289166Speterdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
404289166Speter
405289166Speter# Sed substitution that turns a string into a regex matching for the
406289166Speter# string literally.
407289166Spetersed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
408289166Speter
409289166Speter# Sed substitution that converts a w32 file name or path
410289166Speter# which contains forward slashes, into one that contains
411289166Speter# (escaped) backslashes.  A very naive implementation.
412289166Speterlt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
413289166Speter
414289166Speter# Re-`\' parameter expansions in output of double_quote_subst that were
415289166Speter# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
416289166Speter# in input to double_quote_subst, that '$' was protected from expansion.
417289166Speter# Since each input `\' is now two `\'s, look for any number of runs of
418289166Speter# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
419289166Speterbs='\\'
420289166Speterbs2='\\\\'
421289166Speterbs4='\\\\\\\\'
422289166Speterdollar='\$'
423289166Spetersed_double_backslash="\
424289166Speter  s/$bs4/&\\
425289166Speter/g
426289166Speter  s/^$bs2$dollar/$bs&/
427289166Speter  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
428289166Speter  s/\n//g"
429289166Speter
430289166Speter# Standard options:
431289166Speteropt_dry_run=false
432289166Speteropt_help=false
433289166Speteropt_quiet=false
434289166Speteropt_verbose=false
435289166Speteropt_warning=:
436289166Speter
437289166Speter# func_echo arg...
438289166Speter# Echo program name prefixed message, along with the current mode
439289166Speter# name if it has been set yet.
440289166Speterfunc_echo ()
441289166Speter{
442289166Speter    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
443289166Speter}
444289166Speter
445289166Speter# func_verbose arg...
446289166Speter# Echo program name prefixed message in verbose mode only.
447289166Speterfunc_verbose ()
448289166Speter{
449289166Speter    $opt_verbose && func_echo ${1+"$@"}
450289166Speter
451289166Speter    # A bug in bash halts the script if the last line of a function
452289166Speter    # fails when set -e is in force, so we need another command to
453289166Speter    # work around that:
454289166Speter    :
455289166Speter}
456289166Speter
457289166Speter# func_echo_all arg...
458289166Speter# Invoke $ECHO with all args, space-separated.
459289166Speterfunc_echo_all ()
460289166Speter{
461289166Speter    $ECHO "$*"
462289166Speter}
463289166Speter
464289166Speter# func_error arg...
465289166Speter# Echo program name prefixed message to standard error.
466289166Speterfunc_error ()
467289166Speter{
468289166Speter    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
469289166Speter}
470289166Speter
471289166Speter# func_warning arg...
472289166Speter# Echo program name prefixed warning message to standard error.
473289166Speterfunc_warning ()
474289166Speter{
475289166Speter    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
476289166Speter
477289166Speter    # bash bug again:
478289166Speter    :
479289166Speter}
480289166Speter
481289166Speter# func_fatal_error arg...
482289166Speter# Echo program name prefixed message to standard error, and exit.
483289166Speterfunc_fatal_error ()
484289166Speter{
485289166Speter    func_error ${1+"$@"}
486289166Speter    exit $EXIT_FAILURE
487289166Speter}
488289166Speter
489289166Speter# func_fatal_help arg...
490289166Speter# Echo program name prefixed message to standard error, followed by
491289166Speter# a help hint, and exit.
492289166Speterfunc_fatal_help ()
493289166Speter{
494289166Speter    func_error ${1+"$@"}
495289166Speter    func_fatal_error "$help"
496289166Speter}
497289166Speterhelp="Try \`$progname --help' for more information."  ## default
498289166Speter
499289166Speter
500289166Speter# func_grep expression filename
501289166Speter# Check whether EXPRESSION matches any line of FILENAME, without output.
502289166Speterfunc_grep ()
503289166Speter{
504289166Speter    $GREP "$1" "$2" >/dev/null 2>&1
505289166Speter}
506289166Speter
507289166Speter
508289166Speter# func_mkdir_p directory-path
509289166Speter# Make sure the entire path to DIRECTORY-PATH is available.
510289166Speterfunc_mkdir_p ()
511289166Speter{
512289166Speter    my_directory_path="$1"
513289166Speter    my_dir_list=
514289166Speter
515289166Speter    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
516289166Speter
517289166Speter      # Protect directory names starting with `-'
518289166Speter      case $my_directory_path in
519289166Speter        -*) my_directory_path="./$my_directory_path" ;;
520289166Speter      esac
521289166Speter
522289166Speter      # While some portion of DIR does not yet exist...
523289166Speter      while test ! -d "$my_directory_path"; do
524289166Speter        # ...make a list in topmost first order.  Use a colon delimited
525289166Speter	# list incase some portion of path contains whitespace.
526289166Speter        my_dir_list="$my_directory_path:$my_dir_list"
527289166Speter
528289166Speter        # If the last portion added has no slash in it, the list is done
529289166Speter        case $my_directory_path in */*) ;; *) break ;; esac
530289166Speter
531289166Speter        # ...otherwise throw away the child directory and loop
532289166Speter        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
533289166Speter      done
534289166Speter      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
535289166Speter
536289166Speter      save_mkdir_p_IFS="$IFS"; IFS=':'
537289166Speter      for my_dir in $my_dir_list; do
538289166Speter	IFS="$save_mkdir_p_IFS"
539289166Speter        # mkdir can fail with a `File exist' error if two processes
540289166Speter        # try to create one of the directories concurrently.  Don't
541289166Speter        # stop in that case!
542289166Speter        $MKDIR "$my_dir" 2>/dev/null || :
543289166Speter      done
544289166Speter      IFS="$save_mkdir_p_IFS"
545289166Speter
546289166Speter      # Bail out if we (or some other process) failed to create a directory.
547289166Speter      test -d "$my_directory_path" || \
548289166Speter        func_fatal_error "Failed to create \`$1'"
549289166Speter    fi
550289166Speter}
551289166Speter
552289166Speter
553251883Speter# func_mktempdir [string]
554251883Speter# Make a temporary directory that won't clash with other running
555251883Speter# libtool processes, and avoids race conditions if possible.  If
556251883Speter# given, STRING is the basename for that directory.
557251883Speterfunc_mktempdir ()
558251883Speter{
559251883Speter    my_template="${TMPDIR-/tmp}/${1-$progname}"
560251883Speter
561289166Speter    if test "$opt_dry_run" = ":"; then
562251883Speter      # Return a directory name, but don't create it in dry-run mode
563251883Speter      my_tmpdir="${my_template}-$$"
564251883Speter    else
565251883Speter
566251883Speter      # If mktemp works, use that first and foremost
567251883Speter      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
568251883Speter
569251883Speter      if test ! -d "$my_tmpdir"; then
570289166Speter        # Failing that, at least try and use $RANDOM to avoid a race
571289166Speter        my_tmpdir="${my_template}-${RANDOM-0}$$"
572251883Speter
573289166Speter        save_mktempdir_umask=`umask`
574289166Speter        umask 0077
575289166Speter        $MKDIR "$my_tmpdir"
576289166Speter        umask $save_mktempdir_umask
577251883Speter      fi
578251883Speter
579251883Speter      # If we're not in dry-run mode, bomb out on failure
580289166Speter      test -d "$my_tmpdir" || \
581289166Speter        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
582251883Speter    fi
583251883Speter
584289166Speter    $ECHO "$my_tmpdir"
585251883Speter}
586251883Speter
587251883Speter
588289166Speter# func_quote_for_eval arg
589289166Speter# Aesthetically quote ARG to be evaled later.
590289166Speter# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
591289166Speter# is double-quoted, suitable for a subsequent eval, whereas
592289166Speter# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
593289166Speter# which are still active within double quotes backslashified.
594289166Speterfunc_quote_for_eval ()
595251883Speter{
596289166Speter    case $1 in
597289166Speter      *[\\\`\"\$]*)
598289166Speter	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
599289166Speter      *)
600289166Speter        func_quote_for_eval_unquoted_result="$1" ;;
601289166Speter    esac
602289166Speter
603289166Speter    case $func_quote_for_eval_unquoted_result in
604289166Speter      # Double-quote args containing shell metacharacters to delay
605289166Speter      # word splitting, command substitution and and variable
606289166Speter      # expansion for a subsequent eval.
607289166Speter      # Many Bourne shells cannot handle close brackets correctly
608289166Speter      # in scan sets, so we specify it separately.
609289166Speter      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
610289166Speter        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
611289166Speter        ;;
612289166Speter      *)
613289166Speter        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
614289166Speter    esac
615289166Speter}
616289166Speter
617289166Speter
618289166Speter# func_quote_for_expand arg
619289166Speter# Aesthetically quote ARG to be evaled later; same as above,
620289166Speter# but do not quote variable references.
621289166Speterfunc_quote_for_expand ()
622289166Speter{
623289166Speter    case $1 in
624289166Speter      *[\\\`\"]*)
625289166Speter	my_arg=`$ECHO "$1" | $SED \
626289166Speter	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
627289166Speter      *)
628289166Speter        my_arg="$1" ;;
629289166Speter    esac
630289166Speter
631289166Speter    case $my_arg in
632289166Speter      # Double-quote args containing shell metacharacters to delay
633289166Speter      # word splitting and command substitution for a subsequent eval.
634289166Speter      # Many Bourne shells cannot handle close brackets correctly
635289166Speter      # in scan sets, so we specify it separately.
636289166Speter      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
637289166Speter        my_arg="\"$my_arg\""
638289166Speter        ;;
639289166Speter    esac
640289166Speter
641289166Speter    func_quote_for_expand_result="$my_arg"
642289166Speter}
643289166Speter
644289166Speter
645289166Speter# func_show_eval cmd [fail_exp]
646289166Speter# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
647289166Speter# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
648289166Speter# is given, then evaluate it.
649289166Speterfunc_show_eval ()
650289166Speter{
651289166Speter    my_cmd="$1"
652289166Speter    my_fail_exp="${2-:}"
653289166Speter
654289166Speter    ${opt_silent-false} || {
655289166Speter      func_quote_for_expand "$my_cmd"
656289166Speter      eval "func_echo $func_quote_for_expand_result"
657289166Speter    }
658289166Speter
659289166Speter    if ${opt_dry_run-false}; then :; else
660289166Speter      eval "$my_cmd"
661289166Speter      my_status=$?
662289166Speter      if test "$my_status" -eq 0; then :; else
663289166Speter	eval "(exit $my_status); $my_fail_exp"
664289166Speter      fi
665251883Speter    fi
666289166Speter}
667289166Speter
668289166Speter
669289166Speter# func_show_eval_locale cmd [fail_exp]
670289166Speter# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
671289166Speter# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
672289166Speter# is given, then evaluate it.  Use the saved locale for evaluation.
673289166Speterfunc_show_eval_locale ()
674289166Speter{
675289166Speter    my_cmd="$1"
676289166Speter    my_fail_exp="${2-:}"
677289166Speter
678289166Speter    ${opt_silent-false} || {
679289166Speter      func_quote_for_expand "$my_cmd"
680289166Speter      eval "func_echo $func_quote_for_expand_result"
681289166Speter    }
682289166Speter
683289166Speter    if ${opt_dry_run-false}; then :; else
684289166Speter      eval "$lt_user_locale
685289166Speter	    $my_cmd"
686289166Speter      my_status=$?
687289166Speter      eval "$lt_safe_locale"
688289166Speter      if test "$my_status" -eq 0; then :; else
689289166Speter	eval "(exit $my_status); $my_fail_exp"
690289166Speter      fi
691289166Speter    fi
692289166Speter}
693289166Speter
694289166Speter# func_tr_sh
695289166Speter# Turn $1 into a string suitable for a shell variable name.
696289166Speter# Result is stored in $func_tr_sh_result.  All characters
697289166Speter# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
698289166Speter# if $1 begins with a digit, a '_' is prepended as well.
699289166Speterfunc_tr_sh ()
700289166Speter{
701289166Speter  case $1 in
702289166Speter  [0-9]* | *[!a-zA-Z0-9_]*)
703289166Speter    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
704251883Speter    ;;
705289166Speter  * )
706289166Speter    func_tr_sh_result=$1
707251883Speter    ;;
708289166Speter  esac
709289166Speter}
710289166Speter
711289166Speter
712289166Speter# func_version
713289166Speter# Echo version message to standard output and exit.
714289166Speterfunc_version ()
715289166Speter{
716289166Speter    $opt_debug
717289166Speter
718289166Speter    $SED -n '/(C)/!b go
719289166Speter	:more
720289166Speter	/\./!{
721289166Speter	  N
722289166Speter	  s/\n# / /
723289166Speter	  b more
724289166Speter	}
725289166Speter	:go
726289166Speter	/^# '$PROGRAM' (GNU /,/# warranty; / {
727289166Speter        s/^# //
728289166Speter	s/^# *$//
729289166Speter        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
730289166Speter        p
731289166Speter     }' < "$progpath"
732289166Speter     exit $?
733289166Speter}
734289166Speter
735289166Speter# func_usage
736289166Speter# Echo short help message to standard output and exit.
737289166Speterfunc_usage ()
738289166Speter{
739289166Speter    $opt_debug
740289166Speter
741289166Speter    $SED -n '/^# Usage:/,/^#  *.*--help/ {
742289166Speter        s/^# //
743289166Speter	s/^# *$//
744289166Speter	s/\$progname/'$progname'/
745289166Speter	p
746289166Speter    }' < "$progpath"
747289166Speter    echo
748289166Speter    $ECHO "run \`$progname --help | more' for full usage"
749289166Speter    exit $?
750289166Speter}
751289166Speter
752289166Speter# func_help [NOEXIT]
753289166Speter# Echo long help message to standard output and exit,
754289166Speter# unless 'noexit' is passed as argument.
755289166Speterfunc_help ()
756289166Speter{
757289166Speter    $opt_debug
758289166Speter
759289166Speter    $SED -n '/^# Usage:/,/# Report bugs to/ {
760289166Speter	:print
761289166Speter        s/^# //
762289166Speter	s/^# *$//
763289166Speter	s*\$progname*'$progname'*
764289166Speter	s*\$host*'"$host"'*
765289166Speter	s*\$SHELL*'"$SHELL"'*
766289166Speter	s*\$LTCC*'"$LTCC"'*
767289166Speter	s*\$LTCFLAGS*'"$LTCFLAGS"'*
768289166Speter	s*\$LD*'"$LD"'*
769289166Speter	s/\$with_gnu_ld/'"$with_gnu_ld"'/
770289166Speter	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
771289166Speter	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
772289166Speter	p
773289166Speter	d
774289166Speter     }
775289166Speter     /^# .* home page:/b print
776289166Speter     /^# General help using/b print
777289166Speter     ' < "$progpath"
778289166Speter    ret=$?
779289166Speter    if test -z "$1"; then
780289166Speter      exit $ret
781289166Speter    fi
782289166Speter}
783289166Speter
784289166Speter# func_missing_arg argname
785289166Speter# Echo program name prefixed message to standard error and set global
786289166Speter# exit_cmd.
787289166Speterfunc_missing_arg ()
788289166Speter{
789289166Speter    $opt_debug
790289166Speter
791289166Speter    func_error "missing argument for $1."
792289166Speter    exit_cmd=exit
793289166Speter}
794289166Speter
795289166Speter
796289166Speter# func_split_short_opt shortopt
797289166Speter# Set func_split_short_opt_name and func_split_short_opt_arg shell
798289166Speter# variables after splitting SHORTOPT after the 2nd character.
799289166Speterfunc_split_short_opt ()
800289166Speter{
801289166Speter    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
802289166Speter    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
803289166Speter
804289166Speter    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
805289166Speter    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
806289166Speter} # func_split_short_opt may be replaced by extended shell implementation
807289166Speter
808289166Speter
809289166Speter# func_split_long_opt longopt
810289166Speter# Set func_split_long_opt_name and func_split_long_opt_arg shell
811289166Speter# variables after splitting LONGOPT at the `=' sign.
812289166Speterfunc_split_long_opt ()
813289166Speter{
814289166Speter    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
815289166Speter    my_sed_long_arg='1s/^--[^=]*=//'
816289166Speter
817289166Speter    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
818289166Speter    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
819289166Speter} # func_split_long_opt may be replaced by extended shell implementation
820289166Speter
821289166Speterexit_cmd=:
822289166Speter
823289166Speter
824289166Speter
825289166Speter
826289166Speter
827289166Spetermagic="%%%MAGIC variable%%%"
828289166Spetermagic_exe="%%%MAGIC EXE variable%%%"
829289166Speter
830289166Speter# Global variables.
831289166Speternonopt=
832289166Speterpreserve_args=
833289166Speterlo2o="s/\\.lo\$/.${objext}/"
834289166Spetero2lo="s/\\.${objext}\$/.lo/"
835289166Speterextracted_archives=
836289166Speterextracted_serial=0
837289166Speter
838289166Speter# If this variable is set in any of the actions, the command in it
839289166Speter# will be execed at the end.  This prevents here-documents from being
840289166Speter# left over by shells.
841289166Speterexec_cmd=
842289166Speter
843289166Speter# func_append var value
844289166Speter# Append VALUE to the end of shell variable VAR.
845289166Speterfunc_append ()
846289166Speter{
847289166Speter    eval "${1}=\$${1}\${2}"
848289166Speter} # func_append may be replaced by extended shell implementation
849289166Speter
850289166Speter# func_append_quoted var value
851289166Speter# Quote VALUE and append to the end of shell variable VAR, separated
852289166Speter# by a space.
853289166Speterfunc_append_quoted ()
854289166Speter{
855289166Speter    func_quote_for_eval "${2}"
856289166Speter    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
857289166Speter} # func_append_quoted may be replaced by extended shell implementation
858289166Speter
859289166Speter
860289166Speter# func_arith arithmetic-term...
861289166Speterfunc_arith ()
862289166Speter{
863289166Speter    func_arith_result=`expr "${@}"`
864289166Speter} # func_arith may be replaced by extended shell implementation
865289166Speter
866289166Speter
867289166Speter# func_len string
868289166Speter# STRING may not start with a hyphen.
869289166Speterfunc_len ()
870289166Speter{
871289166Speter    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
872289166Speter} # func_len may be replaced by extended shell implementation
873289166Speter
874289166Speter
875289166Speter# func_lo2o object
876289166Speterfunc_lo2o ()
877289166Speter{
878289166Speter    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
879289166Speter} # func_lo2o may be replaced by extended shell implementation
880289166Speter
881289166Speter
882289166Speter# func_xform libobj-or-source
883289166Speterfunc_xform ()
884289166Speter{
885289166Speter    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
886289166Speter} # func_xform may be replaced by extended shell implementation
887289166Speter
888289166Speter
889289166Speter# func_fatal_configuration arg...
890289166Speter# Echo program name prefixed message to standard error, followed by
891289166Speter# a configuration failure hint, and exit.
892289166Speterfunc_fatal_configuration ()
893289166Speter{
894289166Speter    func_error ${1+"$@"}
895289166Speter    func_error "See the $PACKAGE documentation for more information."
896289166Speter    func_fatal_error "Fatal configuration error."
897289166Speter}
898289166Speter
899289166Speter
900289166Speter# func_config
901289166Speter# Display the configuration for all the tags in this script.
902289166Speterfunc_config ()
903289166Speter{
904289166Speter    re_begincf='^# ### BEGIN LIBTOOL'
905289166Speter    re_endcf='^# ### END LIBTOOL'
906289166Speter
907289166Speter    # Default configuration.
908289166Speter    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
909289166Speter
910289166Speter    # Now print the configurations for the tags.
911289166Speter    for tagname in $taglist; do
912289166Speter      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
913289166Speter    done
914289166Speter
915289166Speter    exit $?
916289166Speter}
917289166Speter
918289166Speter# func_features
919289166Speter# Display the features supported by this script.
920289166Speterfunc_features ()
921289166Speter{
922289166Speter    echo "host: $host"
923289166Speter    if test "$build_libtool_libs" = yes; then
924289166Speter      echo "enable shared libraries"
925289166Speter    else
926289166Speter      echo "disable shared libraries"
927289166Speter    fi
928289166Speter    if test "$build_old_libs" = yes; then
929289166Speter      echo "enable static libraries"
930289166Speter    else
931289166Speter      echo "disable static libraries"
932289166Speter    fi
933289166Speter
934289166Speter    exit $?
935289166Speter}
936289166Speter
937289166Speter# func_enable_tag tagname
938289166Speter# Verify that TAGNAME is valid, and either flag an error and exit, or
939289166Speter# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
940289166Speter# variable here.
941289166Speterfunc_enable_tag ()
942289166Speter{
943289166Speter  # Global variable:
944289166Speter  tagname="$1"
945289166Speter
946289166Speter  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
947289166Speter  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
948289166Speter  sed_extractcf="/$re_begincf/,/$re_endcf/p"
949289166Speter
950289166Speter  # Validate tagname.
951289166Speter  case $tagname in
952289166Speter    *[!-_A-Za-z0-9,/]*)
953289166Speter      func_fatal_error "invalid tag name: $tagname"
954251883Speter      ;;
955289166Speter  esac
956289166Speter
957289166Speter  # Don't test for the "default" C tag, as we know it's
958289166Speter  # there but not specially marked.
959289166Speter  case $tagname in
960289166Speter    CC) ;;
961289166Speter    *)
962289166Speter      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
963289166Speter	taglist="$taglist $tagname"
964289166Speter
965289166Speter	# Evaluate the configuration.  Be careful to quote the path
966289166Speter	# and the sed script, to avoid splitting on whitespace, but
967289166Speter	# also don't use non-portable quotes within backquotes within
968289166Speter	# quotes we have to do it in 2 steps:
969289166Speter	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
970289166Speter	eval "$extractedcf"
971289166Speter      else
972289166Speter	func_error "ignoring unknown tag $tagname"
973289166Speter      fi
974289166Speter      ;;
975289166Speter  esac
976289166Speter}
977289166Speter
978289166Speter# func_check_version_match
979289166Speter# Ensure that we are using m4 macros, and libtool script from the same
980289166Speter# release of libtool.
981289166Speterfunc_check_version_match ()
982289166Speter{
983289166Speter  if test "$package_revision" != "$macro_revision"; then
984289166Speter    if test "$VERSION" != "$macro_version"; then
985289166Speter      if test -z "$macro_version"; then
986289166Speter        cat >&2 <<_LT_EOF
987289166Speter$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
988289166Speter$progname: definition of this LT_INIT comes from an older release.
989289166Speter$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
990289166Speter$progname: and run autoconf again.
991289166Speter_LT_EOF
992289166Speter      else
993289166Speter        cat >&2 <<_LT_EOF
994289166Speter$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
995289166Speter$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
996289166Speter$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
997289166Speter$progname: and run autoconf again.
998289166Speter_LT_EOF
999289166Speter      fi
1000289166Speter    else
1001289166Speter      cat >&2 <<_LT_EOF
1002289166Speter$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
1003289166Speter$progname: but the definition of this LT_INIT comes from revision $macro_revision.
1004289166Speter$progname: You should recreate aclocal.m4 with macros from revision $package_revision
1005289166Speter$progname: of $PACKAGE $VERSION and run autoconf again.
1006289166Speter_LT_EOF
1007289166Speter    fi
1008289166Speter
1009289166Speter    exit $EXIT_MISMATCH
1010289166Speter  fi
1011289166Speter}
1012289166Speter
1013289166Speter
1014289166Speter# Shorthand for --mode=foo, only valid as the first argument
1015289166Spetercase $1 in
1016289166Speterclean|clea|cle|cl)
1017289166Speter  shift; set dummy --mode clean ${1+"$@"}; shift
1018289166Speter  ;;
1019289166Spetercompile|compil|compi|comp|com|co|c)
1020289166Speter  shift; set dummy --mode compile ${1+"$@"}; shift
1021289166Speter  ;;
1022289166Speterexecute|execut|execu|exec|exe|ex|e)
1023289166Speter  shift; set dummy --mode execute ${1+"$@"}; shift
1024289166Speter  ;;
1025289166Speterfinish|finis|fini|fin|fi|f)
1026289166Speter  shift; set dummy --mode finish ${1+"$@"}; shift
1027289166Speter  ;;
1028289166Speterinstall|instal|insta|inst|ins|in|i)
1029289166Speter  shift; set dummy --mode install ${1+"$@"}; shift
1030289166Speter  ;;
1031289166Speterlink|lin|li|l)
1032289166Speter  shift; set dummy --mode link ${1+"$@"}; shift
1033289166Speter  ;;
1034289166Speteruninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
1035289166Speter  shift; set dummy --mode uninstall ${1+"$@"}; shift
1036289166Speter  ;;
1037289166Speteresac
1038289166Speter
1039289166Speter
1040289166Speter
1041289166Speter# Option defaults:
1042289166Speteropt_debug=:
1043289166Speteropt_dry_run=false
1044289166Speteropt_config=false
1045289166Speteropt_preserve_dup_deps=false
1046289166Speteropt_features=false
1047289166Speteropt_finish=false
1048289166Speteropt_help=false
1049289166Speteropt_help_all=false
1050289166Speteropt_silent=:
1051289166Speteropt_warning=:
1052289166Speteropt_verbose=:
1053289166Speteropt_silent=false
1054289166Speteropt_verbose=false
1055289166Speter
1056289166Speter
1057289166Speter# Parse options once, thoroughly.  This comes as soon as possible in the
1058289166Speter# script to make things like `--version' happen as quickly as we can.
1059289166Speter{
1060289166Speter  # this just eases exit handling
1061289166Speter  while test $# -gt 0; do
1062289166Speter    opt="$1"
1063289166Speter    shift
1064289166Speter    case $opt in
1065289166Speter      --debug|-x)	opt_debug='set -x'
1066289166Speter			func_echo "enabling shell trace mode"
1067289166Speter			$opt_debug
1068289166Speter			;;
1069289166Speter      --dry-run|--dryrun|-n)
1070289166Speter			opt_dry_run=:
1071289166Speter			;;
1072289166Speter      --config)
1073289166Speter			opt_config=:
1074289166Speterfunc_config
1075289166Speter			;;
1076289166Speter      --dlopen|-dlopen)
1077289166Speter			optarg="$1"
1078289166Speter			opt_dlopen="${opt_dlopen+$opt_dlopen
1079289166Speter}$optarg"
1080289166Speter			shift
1081289166Speter			;;
1082289166Speter      --preserve-dup-deps)
1083289166Speter			opt_preserve_dup_deps=:
1084289166Speter			;;
1085289166Speter      --features)
1086289166Speter			opt_features=:
1087289166Speterfunc_features
1088289166Speter			;;
1089289166Speter      --finish)
1090289166Speter			opt_finish=:
1091289166Speterset dummy --mode finish ${1+"$@"}; shift
1092289166Speter			;;
1093289166Speter      --help)
1094289166Speter			opt_help=:
1095289166Speter			;;
1096289166Speter      --help-all)
1097289166Speter			opt_help_all=:
1098289166Speteropt_help=': help-all'
1099289166Speter			;;
1100289166Speter      --mode)
1101289166Speter			test $# = 0 && func_missing_arg $opt && break
1102289166Speter			optarg="$1"
1103289166Speter			opt_mode="$optarg"
1104289166Spetercase $optarg in
1105289166Speter  # Valid mode arguments:
1106289166Speter  clean|compile|execute|finish|install|link|relink|uninstall) ;;
1107289166Speter
1108289166Speter  # Catch anything else as an error
1109289166Speter  *) func_error "invalid argument for $opt"
1110289166Speter     exit_cmd=exit
1111289166Speter     break
1112289166Speter     ;;
1113289166Speteresac
1114289166Speter			shift
1115289166Speter			;;
1116289166Speter      --no-silent|--no-quiet)
1117289166Speter			opt_silent=false
1118289166Speterfunc_append preserve_args " $opt"
1119289166Speter			;;
1120289166Speter      --no-warning|--no-warn)
1121289166Speter			opt_warning=false
1122289166Speterfunc_append preserve_args " $opt"
1123289166Speter			;;
1124289166Speter      --no-verbose)
1125289166Speter			opt_verbose=false
1126289166Speterfunc_append preserve_args " $opt"
1127289166Speter			;;
1128289166Speter      --silent|--quiet)
1129289166Speter			opt_silent=:
1130289166Speterfunc_append preserve_args " $opt"
1131289166Speter        opt_verbose=false
1132289166Speter			;;
1133289166Speter      --verbose|-v)
1134289166Speter			opt_verbose=:
1135289166Speterfunc_append preserve_args " $opt"
1136289166Speteropt_silent=false
1137289166Speter			;;
1138289166Speter      --tag)
1139289166Speter			test $# = 0 && func_missing_arg $opt && break
1140289166Speter			optarg="$1"
1141289166Speter			opt_tag="$optarg"
1142289166Speterfunc_append preserve_args " $opt $optarg"
1143289166Speterfunc_enable_tag "$optarg"
1144289166Speter			shift
1145289166Speter			;;
1146289166Speter
1147289166Speter      -\?|-h)		func_usage				;;
1148289166Speter      --help)		func_help				;;
1149289166Speter      --version)	func_version				;;
1150289166Speter
1151289166Speter      # Separate optargs to long options:
1152289166Speter      --*=*)
1153289166Speter			func_split_long_opt "$opt"
1154289166Speter			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
1155289166Speter			shift
1156289166Speter			;;
1157289166Speter
1158289166Speter      # Separate non-argument short options:
1159289166Speter      -\?*|-h*|-n*|-v*)
1160289166Speter			func_split_short_opt "$opt"
1161289166Speter			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
1162289166Speter			shift
1163289166Speter			;;
1164289166Speter
1165289166Speter      --)		break					;;
1166289166Speter      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
1167289166Speter      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
1168251883Speter    esac
1169289166Speter  done
1170289166Speter
1171289166Speter  # Validate options:
1172289166Speter
1173289166Speter  # save first non-option argument
1174289166Speter  if test "$#" -gt 0; then
1175289166Speter    nonopt="$opt"
1176289166Speter    shift
1177289166Speter  fi
1178289166Speter
1179289166Speter  # preserve --debug
1180289166Speter  test "$opt_debug" = : || func_append preserve_args " --debug"
1181289166Speter
1182289166Speter  case $host in
1183289166Speter    *cygwin* | *mingw* | *pw32* | *cegcc*)
1184289166Speter      # don't eliminate duplications in $postdeps and $predeps
1185289166Speter      opt_duplicate_compiler_generated_deps=:
1186289166Speter      ;;
1187289166Speter    *)
1188289166Speter      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
1189289166Speter      ;;
1190289166Speter  esac
1191289166Speter
1192289166Speter  $opt_help || {
1193289166Speter    # Sanity checks first:
1194289166Speter    func_check_version_match
1195289166Speter
1196289166Speter    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
1197289166Speter      func_fatal_configuration "not configured to build any kind of library"
1198289166Speter    fi
1199289166Speter
1200289166Speter    # Darwin sucks
1201289166Speter    eval std_shrext=\"$shrext_cmds\"
1202289166Speter
1203289166Speter    # Only execute mode is allowed to have -dlopen flags.
1204289166Speter    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
1205289166Speter      func_error "unrecognized option \`-dlopen'"
1206289166Speter      $ECHO "$help" 1>&2
1207289166Speter      exit $EXIT_FAILURE
1208289166Speter    fi
1209289166Speter
1210289166Speter    # Change the help message to a mode-specific one.
1211289166Speter    generic_help="$help"
1212289166Speter    help="Try \`$progname --help --mode=$opt_mode' for more information."
1213289166Speter  }
1214289166Speter
1215289166Speter
1216289166Speter  # Bail if the options were screwed
1217289166Speter  $exit_cmd $EXIT_FAILURE
1218289166Speter}
1219289166Speter
1220289166Speter
1221289166Speter
1222289166Speter
1223289166Speter## ----------- ##
1224289166Speter##    Main.    ##
1225289166Speter## ----------- ##
1226289166Speter
1227289166Speter# func_lalib_p file
1228289166Speter# True iff FILE is a libtool `.la' library or `.lo' object file.
1229289166Speter# This function is only a basic sanity check; it will hardly flush out
1230289166Speter# determined imposters.
1231289166Speterfunc_lalib_p ()
1232289166Speter{
1233289166Speter    test -f "$1" &&
1234289166Speter      $SED -e 4q "$1" 2>/dev/null \
1235289166Speter        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
1236289166Speter}
1237289166Speter
1238289166Speter# func_lalib_unsafe_p file
1239289166Speter# True iff FILE is a libtool `.la' library or `.lo' object file.
1240289166Speter# This function implements the same check as func_lalib_p without
1241289166Speter# resorting to external programs.  To this end, it redirects stdin and
1242289166Speter# closes it afterwards, without saving the original file descriptor.
1243289166Speter# As a safety measure, use it only where a negative result would be
1244289166Speter# fatal anyway.  Works if `file' does not exist.
1245289166Speterfunc_lalib_unsafe_p ()
1246289166Speter{
1247289166Speter    lalib_p=no
1248289166Speter    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
1249289166Speter	for lalib_p_l in 1 2 3 4
1250289166Speter	do
1251289166Speter	    read lalib_p_line
1252289166Speter	    case "$lalib_p_line" in
1253289166Speter		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
1254289166Speter	    esac
1255289166Speter	done
1256289166Speter	exec 0<&5 5<&-
1257289166Speter    fi
1258289166Speter    test "$lalib_p" = yes
1259289166Speter}
1260289166Speter
1261289166Speter# func_ltwrapper_script_p file
1262289166Speter# True iff FILE is a libtool wrapper script
1263289166Speter# This function is only a basic sanity check; it will hardly flush out
1264289166Speter# determined imposters.
1265289166Speterfunc_ltwrapper_script_p ()
1266289166Speter{
1267289166Speter    func_lalib_p "$1"
1268289166Speter}
1269289166Speter
1270289166Speter# func_ltwrapper_executable_p file
1271289166Speter# True iff FILE is a libtool wrapper executable
1272289166Speter# This function is only a basic sanity check; it will hardly flush out
1273289166Speter# determined imposters.
1274289166Speterfunc_ltwrapper_executable_p ()
1275289166Speter{
1276289166Speter    func_ltwrapper_exec_suffix=
1277289166Speter    case $1 in
1278289166Speter    *.exe) ;;
1279289166Speter    *) func_ltwrapper_exec_suffix=.exe ;;
1280289166Speter    esac
1281289166Speter    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
1282289166Speter}
1283289166Speter
1284289166Speter# func_ltwrapper_scriptname file
1285289166Speter# Assumes file is an ltwrapper_executable
1286289166Speter# uses $file to determine the appropriate filename for a
1287289166Speter# temporary ltwrapper_script.
1288289166Speterfunc_ltwrapper_scriptname ()
1289289166Speter{
1290289166Speter    func_dirname_and_basename "$1" "" "."
1291289166Speter    func_stripname '' '.exe' "$func_basename_result"
1292289166Speter    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
1293289166Speter}
1294289166Speter
1295289166Speter# func_ltwrapper_p file
1296289166Speter# True iff FILE is a libtool wrapper script or wrapper executable
1297289166Speter# This function is only a basic sanity check; it will hardly flush out
1298289166Speter# determined imposters.
1299289166Speterfunc_ltwrapper_p ()
1300289166Speter{
1301289166Speter    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
1302289166Speter}
1303289166Speter
1304289166Speter
1305289166Speter# func_execute_cmds commands fail_cmd
1306289166Speter# Execute tilde-delimited COMMANDS.
1307289166Speter# If FAIL_CMD is given, eval that upon failure.
1308289166Speter# FAIL_CMD may read-access the current command in variable CMD!
1309289166Speterfunc_execute_cmds ()
1310289166Speter{
1311289166Speter    $opt_debug
1312289166Speter    save_ifs=$IFS; IFS='~'
1313289166Speter    for cmd in $1; do
1314289166Speter      IFS=$save_ifs
1315289166Speter      eval cmd=\"$cmd\"
1316289166Speter      func_show_eval "$cmd" "${2-:}"
1317289166Speter    done
1318289166Speter    IFS=$save_ifs
1319289166Speter}
1320289166Speter
1321289166Speter
1322289166Speter# func_source file
1323289166Speter# Source FILE, adding directory component if necessary.
1324289166Speter# Note that it is not necessary on cygwin/mingw to append a dot to
1325289166Speter# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
1326289166Speter# behavior happens only for exec(3), not for open(2)!  Also, sourcing
1327289166Speter# `FILE.' does not work on cygwin managed mounts.
1328289166Speterfunc_source ()
1329289166Speter{
1330289166Speter    $opt_debug
1331289166Speter    case $1 in
1332289166Speter    */* | *\\*)	. "$1" ;;
1333289166Speter    *)		. "./$1" ;;
1334289166Speter    esac
1335289166Speter}
1336289166Speter
1337289166Speter
1338289166Speter# func_resolve_sysroot PATH
1339289166Speter# Replace a leading = in PATH with a sysroot.  Store the result into
1340289166Speter# func_resolve_sysroot_result
1341289166Speterfunc_resolve_sysroot ()
1342289166Speter{
1343289166Speter  func_resolve_sysroot_result=$1
1344289166Speter  case $func_resolve_sysroot_result in
1345289166Speter  =*)
1346289166Speter    func_stripname '=' '' "$func_resolve_sysroot_result"
1347289166Speter    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
1348251883Speter    ;;
1349251883Speter  esac
1350251883Speter}
1351251883Speter
1352289166Speter# func_replace_sysroot PATH
1353289166Speter# If PATH begins with the sysroot, replace it with = and
1354289166Speter# store the result into func_replace_sysroot_result.
1355289166Speterfunc_replace_sysroot ()
1356289166Speter{
1357289166Speter  case "$lt_sysroot:$1" in
1358289166Speter  ?*:"$lt_sysroot"*)
1359289166Speter    func_stripname "$lt_sysroot" '' "$1"
1360289166Speter    func_replace_sysroot_result="=$func_stripname_result"
1361289166Speter    ;;
1362289166Speter  *)
1363289166Speter    # Including no sysroot.
1364289166Speter    func_replace_sysroot_result=$1
1365289166Speter    ;;
1366289166Speter  esac
1367289166Speter}
1368251883Speter
1369251883Speter# func_infer_tag arg
1370251883Speter# Infer tagged configuration to use if any are available and
1371251883Speter# if one wasn't chosen via the "--tag" command line option.
1372251883Speter# Only attempt this if the compiler in the base compile
1373251883Speter# command doesn't match the default compiler.
1374251883Speter# arg is usually of the form 'gcc ...'
1375251883Speterfunc_infer_tag ()
1376251883Speter{
1377289166Speter    $opt_debug
1378251883Speter    if test -n "$available_tags" && test -z "$tagname"; then
1379251883Speter      CC_quoted=
1380251883Speter      for arg in $CC; do
1381289166Speter	func_append_quoted CC_quoted "$arg"
1382251883Speter      done
1383289166Speter      CC_expanded=`func_echo_all $CC`
1384289166Speter      CC_quoted_expanded=`func_echo_all $CC_quoted`
1385251883Speter      case $@ in
1386251883Speter      # Blanks in the command may have been stripped by the calling shell,
1387251883Speter      # but not from the CC environment variable when configure was run.
1388289166Speter      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
1389289166Speter      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
1390251883Speter      # Blanks at the start of $base_compile will cause this to fail
1391251883Speter      # if we don't check for them as well.
1392251883Speter      *)
1393251883Speter	for z in $available_tags; do
1394289166Speter	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
1395251883Speter	    # Evaluate the configuration.
1396251883Speter	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
1397251883Speter	    CC_quoted=
1398251883Speter	    for arg in $CC; do
1399289166Speter	      # Double-quote args containing other shell metacharacters.
1400289166Speter	      func_append_quoted CC_quoted "$arg"
1401289166Speter	    done
1402289166Speter	    CC_expanded=`func_echo_all $CC`
1403289166Speter	    CC_quoted_expanded=`func_echo_all $CC_quoted`
1404251883Speter	    case "$@ " in
1405289166Speter	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
1406289166Speter	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
1407251883Speter	      # The compiler in the base compile command matches
1408251883Speter	      # the one in the tagged configuration.
1409251883Speter	      # Assume this is the tagged configuration we want.
1410251883Speter	      tagname=$z
1411251883Speter	      break
1412251883Speter	      ;;
1413251883Speter	    esac
1414251883Speter	  fi
1415251883Speter	done
1416251883Speter	# If $tagname still isn't set, then no tagged configuration
1417251883Speter	# was found and let the user know that the "--tag" command
1418251883Speter	# line option must be used.
1419251883Speter	if test -z "$tagname"; then
1420289166Speter	  func_echo "unable to infer tagged configuration"
1421289166Speter	  func_fatal_error "specify a tag with \`--tag'"
1422289166Speter#	else
1423289166Speter#	  func_verbose "using $tagname tagged configuration"
1424251883Speter	fi
1425251883Speter	;;
1426251883Speter      esac
1427251883Speter    fi
1428251883Speter}
1429251883Speter
1430251883Speter
1431289166Speter
1432289166Speter# func_write_libtool_object output_name pic_name nonpic_name
1433289166Speter# Create a libtool object file (analogous to a ".la" file),
1434289166Speter# but don't create it if we're doing a dry run.
1435289166Speterfunc_write_libtool_object ()
1436251883Speter{
1437289166Speter    write_libobj=${1}
1438289166Speter    if test "$build_libtool_libs" = yes; then
1439289166Speter      write_lobj=\'${2}\'
1440289166Speter    else
1441289166Speter      write_lobj=none
1442289166Speter    fi
1443251883Speter
1444289166Speter    if test "$build_old_libs" = yes; then
1445289166Speter      write_oldobj=\'${3}\'
1446251883Speter    else
1447289166Speter      write_oldobj=none
1448251883Speter    fi
1449289166Speter
1450289166Speter    $opt_dry_run || {
1451289166Speter      cat >${write_libobj}T <<EOF
1452289166Speter# $write_libobj - a libtool object file
1453289166Speter# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
1454289166Speter#
1455289166Speter# Please DO NOT delete this file!
1456289166Speter# It is necessary for linking the library.
1457289166Speter
1458289166Speter# Name of the PIC object.
1459289166Speterpic_object=$write_lobj
1460289166Speter
1461289166Speter# Name of the non-PIC object
1462289166Speternon_pic_object=$write_oldobj
1463289166Speter
1464289166SpeterEOF
1465289166Speter      $MV "${write_libobj}T" "${write_libobj}"
1466289166Speter    }
1467251883Speter}
1468251883Speter
1469289166Speter
1470289166Speter##################################################
1471289166Speter# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
1472289166Speter##################################################
1473289166Speter
1474289166Speter# func_convert_core_file_wine_to_w32 ARG
1475289166Speter# Helper function used by file name conversion functions when $build is *nix,
1476289166Speter# and $host is mingw, cygwin, or some other w32 environment. Relies on a
1477289166Speter# correctly configured wine environment available, with the winepath program
1478289166Speter# in $build's $PATH.
1479289166Speter#
1480289166Speter# ARG is the $build file name to be converted to w32 format.
1481289166Speter# Result is available in $func_convert_core_file_wine_to_w32_result, and will
1482289166Speter# be empty on error (or when ARG is empty)
1483289166Speterfunc_convert_core_file_wine_to_w32 ()
1484251883Speter{
1485289166Speter  $opt_debug
1486289166Speter  func_convert_core_file_wine_to_w32_result="$1"
1487289166Speter  if test -n "$1"; then
1488289166Speter    # Unfortunately, winepath does not exit with a non-zero error code, so we
1489289166Speter    # are forced to check the contents of stdout. On the other hand, if the
1490289166Speter    # command is not found, the shell will set an exit code of 127 and print
1491289166Speter    # *an error message* to stdout. So we must check for both error code of
1492289166Speter    # zero AND non-empty stdout, which explains the odd construction:
1493289166Speter    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
1494289166Speter    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
1495289166Speter      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
1496289166Speter        $SED -e "$lt_sed_naive_backslashify"`
1497289166Speter    else
1498289166Speter      func_convert_core_file_wine_to_w32_result=
1499251883Speter    fi
1500289166Speter  fi
1501289166Speter}
1502289166Speter# end: func_convert_core_file_wine_to_w32
1503251883Speter
1504251883Speter
1505289166Speter# func_convert_core_path_wine_to_w32 ARG
1506289166Speter# Helper function used by path conversion functions when $build is *nix, and
1507289166Speter# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
1508289166Speter# configured wine environment available, with the winepath program in $build's
1509289166Speter# $PATH. Assumes ARG has no leading or trailing path separator characters.
1510289166Speter#
1511289166Speter# ARG is path to be converted from $build format to win32.
1512289166Speter# Result is available in $func_convert_core_path_wine_to_w32_result.
1513289166Speter# Unconvertible file (directory) names in ARG are skipped; if no directory names
1514289166Speter# are convertible, then the result may be empty.
1515289166Speterfunc_convert_core_path_wine_to_w32 ()
1516289166Speter{
1517289166Speter  $opt_debug
1518289166Speter  # unfortunately, winepath doesn't convert paths, only file names
1519289166Speter  func_convert_core_path_wine_to_w32_result=""
1520289166Speter  if test -n "$1"; then
1521289166Speter    oldIFS=$IFS
1522289166Speter    IFS=:
1523289166Speter    for func_convert_core_path_wine_to_w32_f in $1; do
1524289166Speter      IFS=$oldIFS
1525289166Speter      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
1526289166Speter      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
1527289166Speter        if test -z "$func_convert_core_path_wine_to_w32_result"; then
1528289166Speter          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
1529289166Speter        else
1530289166Speter          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
1531289166Speter        fi
1532251883Speter      fi
1533251883Speter    done
1534289166Speter    IFS=$oldIFS
1535289166Speter  fi
1536251883Speter}
1537289166Speter# end: func_convert_core_path_wine_to_w32
1538251883Speter
1539251883Speter
1540289166Speter# func_cygpath ARGS...
1541289166Speter# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
1542289166Speter# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
1543289166Speter# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
1544289166Speter# (2), returns the Cygwin file name or path in func_cygpath_result (input
1545289166Speter# file name or path is assumed to be in w32 format, as previously converted
1546289166Speter# from $build's *nix or MSYS format). In case (3), returns the w32 file name
1547289166Speter# or path in func_cygpath_result (input file name or path is assumed to be in
1548289166Speter# Cygwin format). Returns an empty string on error.
1549289166Speter#
1550289166Speter# ARGS are passed to cygpath, with the last one being the file name or path to
1551289166Speter# be converted.
1552289166Speter#
1553289166Speter# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
1554289166Speter# environment variable; do not put it in $PATH.
1555289166Speterfunc_cygpath ()
1556289166Speter{
1557289166Speter  $opt_debug
1558289166Speter  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
1559289166Speter    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
1560289166Speter    if test "$?" -ne 0; then
1561289166Speter      # on failure, ensure result is empty
1562289166Speter      func_cygpath_result=
1563289166Speter    fi
1564289166Speter  else
1565289166Speter    func_cygpath_result=
1566289166Speter    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
1567289166Speter  fi
1568289166Speter}
1569289166Speter#end: func_cygpath
1570251883Speter
1571251883Speter
1572289166Speter# func_convert_core_msys_to_w32 ARG
1573289166Speter# Convert file name or path ARG from MSYS format to w32 format.  Return
1574289166Speter# result in func_convert_core_msys_to_w32_result.
1575289166Speterfunc_convert_core_msys_to_w32 ()
1576289166Speter{
1577289166Speter  $opt_debug
1578289166Speter  # awkward: cmd appends spaces to result
1579289166Speter  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
1580289166Speter    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
1581289166Speter}
1582289166Speter#end: func_convert_core_msys_to_w32
1583289166Speter
1584289166Speter
1585289166Speter# func_convert_file_check ARG1 ARG2
1586289166Speter# Verify that ARG1 (a file name in $build format) was converted to $host
1587289166Speter# format in ARG2. Otherwise, emit an error message, but continue (resetting
1588289166Speter# func_to_host_file_result to ARG1).
1589289166Speterfunc_convert_file_check ()
1590289166Speter{
1591289166Speter  $opt_debug
1592289166Speter  if test -z "$2" && test -n "$1" ; then
1593289166Speter    func_error "Could not determine host file name corresponding to"
1594289166Speter    func_error "  \`$1'"
1595289166Speter    func_error "Continuing, but uninstalled executables may not work."
1596289166Speter    # Fallback:
1597289166Speter    func_to_host_file_result="$1"
1598289166Speter  fi
1599289166Speter}
1600289166Speter# end func_convert_file_check
1601289166Speter
1602289166Speter
1603289166Speter# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
1604289166Speter# Verify that FROM_PATH (a path in $build format) was converted to $host
1605289166Speter# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
1606289166Speter# func_to_host_file_result to a simplistic fallback value (see below).
1607289166Speterfunc_convert_path_check ()
1608289166Speter{
1609289166Speter  $opt_debug
1610289166Speter  if test -z "$4" && test -n "$3"; then
1611289166Speter    func_error "Could not determine the host path corresponding to"
1612289166Speter    func_error "  \`$3'"
1613289166Speter    func_error "Continuing, but uninstalled executables may not work."
1614289166Speter    # Fallback.  This is a deliberately simplistic "conversion" and
1615289166Speter    # should not be "improved".  See libtool.info.
1616289166Speter    if test "x$1" != "x$2"; then
1617289166Speter      lt_replace_pathsep_chars="s|$1|$2|g"
1618289166Speter      func_to_host_path_result=`echo "$3" |
1619289166Speter        $SED -e "$lt_replace_pathsep_chars"`
1620289166Speter    else
1621289166Speter      func_to_host_path_result="$3"
1622289166Speter    fi
1623289166Speter  fi
1624289166Speter}
1625289166Speter# end func_convert_path_check
1626289166Speter
1627289166Speter
1628289166Speter# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
1629289166Speter# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
1630289166Speter# and appending REPL if ORIG matches BACKPAT.
1631289166Speterfunc_convert_path_front_back_pathsep ()
1632289166Speter{
1633289166Speter  $opt_debug
1634289166Speter  case $4 in
1635289166Speter  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
1636289166Speter    ;;
1637251883Speter  esac
1638289166Speter  case $4 in
1639289166Speter  $2 ) func_append func_to_host_path_result "$3"
1640289166Speter    ;;
1641289166Speter  esac
1642289166Speter}
1643289166Speter# end func_convert_path_front_back_pathsep
1644251883Speter
1645251883Speter
1646289166Speter##################################################
1647289166Speter# $build to $host FILE NAME CONVERSION FUNCTIONS #
1648289166Speter##################################################
1649289166Speter# invoked via `$to_host_file_cmd ARG'
1650289166Speter#
1651289166Speter# In each case, ARG is the path to be converted from $build to $host format.
1652289166Speter# Result will be available in $func_to_host_file_result.
1653251883Speter
1654289166Speter
1655289166Speter# func_to_host_file ARG
1656289166Speter# Converts the file name ARG from $build format to $host format. Return result
1657289166Speter# in func_to_host_file_result.
1658289166Speterfunc_to_host_file ()
1659289166Speter{
1660289166Speter  $opt_debug
1661289166Speter  $to_host_file_cmd "$1"
1662289166Speter}
1663289166Speter# end func_to_host_file
1664289166Speter
1665289166Speter
1666289166Speter# func_to_tool_file ARG LAZY
1667289166Speter# converts the file name ARG from $build format to toolchain format. Return
1668289166Speter# result in func_to_tool_file_result.  If the conversion in use is listed
1669289166Speter# in (the comma separated) LAZY, no conversion takes place.
1670289166Speterfunc_to_tool_file ()
1671289166Speter{
1672289166Speter  $opt_debug
1673289166Speter  case ,$2, in
1674289166Speter    *,"$to_tool_file_cmd",*)
1675289166Speter      func_to_tool_file_result=$1
1676251883Speter      ;;
1677251883Speter    *)
1678289166Speter      $to_tool_file_cmd "$1"
1679289166Speter      func_to_tool_file_result=$func_to_host_file_result
1680251883Speter      ;;
1681289166Speter  esac
1682289166Speter}
1683289166Speter# end func_to_tool_file
1684251883Speter
1685289166Speter
1686289166Speter# func_convert_file_noop ARG
1687289166Speter# Copy ARG to func_to_host_file_result.
1688289166Speterfunc_convert_file_noop ()
1689289166Speter{
1690289166Speter  func_to_host_file_result="$1"
1691289166Speter}
1692289166Speter# end func_convert_file_noop
1693289166Speter
1694289166Speter
1695289166Speter# func_convert_file_msys_to_w32 ARG
1696289166Speter# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
1697289166Speter# conversion to w32 is not available inside the cwrapper.  Returns result in
1698289166Speter# func_to_host_file_result.
1699289166Speterfunc_convert_file_msys_to_w32 ()
1700289166Speter{
1701289166Speter  $opt_debug
1702289166Speter  func_to_host_file_result="$1"
1703289166Speter  if test -n "$1"; then
1704289166Speter    func_convert_core_msys_to_w32 "$1"
1705289166Speter    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
1706251883Speter  fi
1707289166Speter  func_convert_file_check "$1" "$func_to_host_file_result"
1708289166Speter}
1709289166Speter# end func_convert_file_msys_to_w32
1710251883Speter
1711251883Speter
1712289166Speter# func_convert_file_cygwin_to_w32 ARG
1713289166Speter# Convert file name ARG from Cygwin to w32 format.  Returns result in
1714289166Speter# func_to_host_file_result.
1715289166Speterfunc_convert_file_cygwin_to_w32 ()
1716289166Speter{
1717289166Speter  $opt_debug
1718289166Speter  func_to_host_file_result="$1"
1719289166Speter  if test -n "$1"; then
1720289166Speter    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
1721289166Speter    # LT_CYGPATH in this case.
1722289166Speter    func_to_host_file_result=`cygpath -m "$1"`
1723289166Speter  fi
1724289166Speter  func_convert_file_check "$1" "$func_to_host_file_result"
1725289166Speter}
1726289166Speter# end func_convert_file_cygwin_to_w32
1727251883Speter
1728251883Speter
1729289166Speter# func_convert_file_nix_to_w32 ARG
1730289166Speter# Convert file name ARG from *nix to w32 format.  Requires a wine environment
1731289166Speter# and a working winepath. Returns result in func_to_host_file_result.
1732289166Speterfunc_convert_file_nix_to_w32 ()
1733289166Speter{
1734289166Speter  $opt_debug
1735289166Speter  func_to_host_file_result="$1"
1736289166Speter  if test -n "$1"; then
1737289166Speter    func_convert_core_file_wine_to_w32 "$1"
1738289166Speter    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
1739289166Speter  fi
1740289166Speter  func_convert_file_check "$1" "$func_to_host_file_result"
1741289166Speter}
1742289166Speter# end func_convert_file_nix_to_w32
1743251883Speter
1744251883Speter
1745289166Speter# func_convert_file_msys_to_cygwin ARG
1746289166Speter# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
1747289166Speter# Returns result in func_to_host_file_result.
1748289166Speterfunc_convert_file_msys_to_cygwin ()
1749289166Speter{
1750289166Speter  $opt_debug
1751289166Speter  func_to_host_file_result="$1"
1752289166Speter  if test -n "$1"; then
1753289166Speter    func_convert_core_msys_to_w32 "$1"
1754289166Speter    func_cygpath -u "$func_convert_core_msys_to_w32_result"
1755289166Speter    func_to_host_file_result="$func_cygpath_result"
1756289166Speter  fi
1757289166Speter  func_convert_file_check "$1" "$func_to_host_file_result"
1758289166Speter}
1759289166Speter# end func_convert_file_msys_to_cygwin
1760251883Speter
1761251883Speter
1762289166Speter# func_convert_file_nix_to_cygwin ARG
1763289166Speter# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
1764289166Speter# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
1765289166Speter# in func_to_host_file_result.
1766289166Speterfunc_convert_file_nix_to_cygwin ()
1767289166Speter{
1768289166Speter  $opt_debug
1769289166Speter  func_to_host_file_result="$1"
1770289166Speter  if test -n "$1"; then
1771289166Speter    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
1772289166Speter    func_convert_core_file_wine_to_w32 "$1"
1773289166Speter    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
1774289166Speter    func_to_host_file_result="$func_cygpath_result"
1775289166Speter  fi
1776289166Speter  func_convert_file_check "$1" "$func_to_host_file_result"
1777289166Speter}
1778289166Speter# end func_convert_file_nix_to_cygwin
1779251883Speter
1780251883Speter
1781289166Speter#############################################
1782289166Speter# $build to $host PATH CONVERSION FUNCTIONS #
1783289166Speter#############################################
1784289166Speter# invoked via `$to_host_path_cmd ARG'
1785289166Speter#
1786289166Speter# In each case, ARG is the path to be converted from $build to $host format.
1787289166Speter# The result will be available in $func_to_host_path_result.
1788289166Speter#
1789289166Speter# Path separators are also converted from $build format to $host format.  If
1790289166Speter# ARG begins or ends with a path separator character, it is preserved (but
1791289166Speter# converted to $host format) on output.
1792289166Speter#
1793289166Speter# All path conversion functions are named using the following convention:
1794289166Speter#   file name conversion function    : func_convert_file_X_to_Y ()
1795289166Speter#   path conversion function         : func_convert_path_X_to_Y ()
1796289166Speter# where, for any given $build/$host combination the 'X_to_Y' value is the
1797289166Speter# same.  If conversion functions are added for new $build/$host combinations,
1798289166Speter# the two new functions must follow this pattern, or func_init_to_host_path_cmd
1799289166Speter# will break.
1800251883Speter
1801251883Speter
1802289166Speter# func_init_to_host_path_cmd
1803289166Speter# Ensures that function "pointer" variable $to_host_path_cmd is set to the
1804289166Speter# appropriate value, based on the value of $to_host_file_cmd.
1805289166Speterto_host_path_cmd=
1806289166Speterfunc_init_to_host_path_cmd ()
1807289166Speter{
1808289166Speter  $opt_debug
1809289166Speter  if test -z "$to_host_path_cmd"; then
1810289166Speter    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
1811289166Speter    to_host_path_cmd="func_convert_path_${func_stripname_result}"
1812289166Speter  fi
1813289166Speter}
1814251883Speter
1815251883Speter
1816289166Speter# func_to_host_path ARG
1817289166Speter# Converts the path ARG from $build format to $host format. Return result
1818289166Speter# in func_to_host_path_result.
1819289166Speterfunc_to_host_path ()
1820289166Speter{
1821289166Speter  $opt_debug
1822289166Speter  func_init_to_host_path_cmd
1823289166Speter  $to_host_path_cmd "$1"
1824289166Speter}
1825289166Speter# end func_to_host_path
1826251883Speter
1827251883Speter
1828289166Speter# func_convert_path_noop ARG
1829289166Speter# Copy ARG to func_to_host_path_result.
1830289166Speterfunc_convert_path_noop ()
1831289166Speter{
1832289166Speter  func_to_host_path_result="$1"
1833289166Speter}
1834289166Speter# end func_convert_path_noop
1835251883Speter
1836251883Speter
1837289166Speter# func_convert_path_msys_to_w32 ARG
1838289166Speter# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
1839289166Speter# conversion to w32 is not available inside the cwrapper.  Returns result in
1840289166Speter# func_to_host_path_result.
1841289166Speterfunc_convert_path_msys_to_w32 ()
1842289166Speter{
1843289166Speter  $opt_debug
1844289166Speter  func_to_host_path_result="$1"
1845289166Speter  if test -n "$1"; then
1846289166Speter    # Remove leading and trailing path separator characters from ARG.  MSYS
1847289166Speter    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
1848289166Speter    # and winepath ignores them completely.
1849289166Speter    func_stripname : : "$1"
1850289166Speter    func_to_host_path_tmp1=$func_stripname_result
1851289166Speter    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
1852289166Speter    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
1853289166Speter    func_convert_path_check : ";" \
1854289166Speter      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1855289166Speter    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1856289166Speter  fi
1857289166Speter}
1858289166Speter# end func_convert_path_msys_to_w32
1859251883Speter
1860251883Speter
1861289166Speter# func_convert_path_cygwin_to_w32 ARG
1862289166Speter# Convert path ARG from Cygwin to w32 format.  Returns result in
1863289166Speter# func_to_host_file_result.
1864289166Speterfunc_convert_path_cygwin_to_w32 ()
1865289166Speter{
1866289166Speter  $opt_debug
1867289166Speter  func_to_host_path_result="$1"
1868289166Speter  if test -n "$1"; then
1869289166Speter    # See func_convert_path_msys_to_w32:
1870289166Speter    func_stripname : : "$1"
1871289166Speter    func_to_host_path_tmp1=$func_stripname_result
1872289166Speter    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
1873289166Speter    func_convert_path_check : ";" \
1874289166Speter      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1875289166Speter    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1876289166Speter  fi
1877289166Speter}
1878289166Speter# end func_convert_path_cygwin_to_w32
1879251883Speter
1880289166Speter
1881289166Speter# func_convert_path_nix_to_w32 ARG
1882289166Speter# Convert path ARG from *nix to w32 format.  Requires a wine environment and
1883289166Speter# a working winepath.  Returns result in func_to_host_file_result.
1884289166Speterfunc_convert_path_nix_to_w32 ()
1885289166Speter{
1886289166Speter  $opt_debug
1887289166Speter  func_to_host_path_result="$1"
1888289166Speter  if test -n "$1"; then
1889289166Speter    # See func_convert_path_msys_to_w32:
1890289166Speter    func_stripname : : "$1"
1891289166Speter    func_to_host_path_tmp1=$func_stripname_result
1892289166Speter    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
1893289166Speter    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
1894289166Speter    func_convert_path_check : ";" \
1895289166Speter      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1896289166Speter    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1897251883Speter  fi
1898289166Speter}
1899289166Speter# end func_convert_path_nix_to_w32
1900251883Speter
1901289166Speter
1902289166Speter# func_convert_path_msys_to_cygwin ARG
1903289166Speter# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
1904289166Speter# Returns result in func_to_host_file_result.
1905289166Speterfunc_convert_path_msys_to_cygwin ()
1906289166Speter{
1907289166Speter  $opt_debug
1908289166Speter  func_to_host_path_result="$1"
1909289166Speter  if test -n "$1"; then
1910289166Speter    # See func_convert_path_msys_to_w32:
1911289166Speter    func_stripname : : "$1"
1912289166Speter    func_to_host_path_tmp1=$func_stripname_result
1913289166Speter    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
1914289166Speter    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
1915289166Speter    func_to_host_path_result="$func_cygpath_result"
1916289166Speter    func_convert_path_check : : \
1917289166Speter      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1918289166Speter    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
1919251883Speter  fi
1920289166Speter}
1921289166Speter# end func_convert_path_msys_to_cygwin
1922251883Speter
1923251883Speter
1924289166Speter# func_convert_path_nix_to_cygwin ARG
1925289166Speter# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
1926289166Speter# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
1927289166Speter# func_to_host_file_result.
1928289166Speterfunc_convert_path_nix_to_cygwin ()
1929289166Speter{
1930289166Speter  $opt_debug
1931289166Speter  func_to_host_path_result="$1"
1932289166Speter  if test -n "$1"; then
1933289166Speter    # Remove leading and trailing path separator characters from
1934289166Speter    # ARG. msys behavior is inconsistent here, cygpath turns them
1935289166Speter    # into '.;' and ';.', and winepath ignores them completely.
1936289166Speter    func_stripname : : "$1"
1937289166Speter    func_to_host_path_tmp1=$func_stripname_result
1938289166Speter    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
1939289166Speter    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
1940289166Speter    func_to_host_path_result="$func_cygpath_result"
1941289166Speter    func_convert_path_check : : \
1942289166Speter      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1943289166Speter    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
1944289166Speter  fi
1945289166Speter}
1946289166Speter# end func_convert_path_nix_to_cygwin
1947289166Speter
1948289166Speter
1949289166Speter# func_mode_compile arg...
1950289166Speterfunc_mode_compile ()
1951289166Speter{
1952289166Speter    $opt_debug
1953251883Speter    # Get the compilation command and the source file.
1954251883Speter    base_compile=
1955251883Speter    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
1956251883Speter    suppress_opt=yes
1957251883Speter    suppress_output=
1958251883Speter    arg_mode=normal
1959251883Speter    libobj=
1960251883Speter    later=
1961289166Speter    pie_flag=
1962251883Speter
1963251883Speter    for arg
1964251883Speter    do
1965251883Speter      case $arg_mode in
1966251883Speter      arg  )
1967251883Speter	# do not "continue".  Instead, add this to base_compile
1968251883Speter	lastarg="$arg"
1969251883Speter	arg_mode=normal
1970251883Speter	;;
1971251883Speter
1972251883Speter      target )
1973251883Speter	libobj="$arg"
1974251883Speter	arg_mode=normal
1975251883Speter	continue
1976251883Speter	;;
1977251883Speter
1978251883Speter      normal )
1979251883Speter	# Accept any command-line options.
1980251883Speter	case $arg in
1981251883Speter	-o)
1982289166Speter	  test -n "$libobj" && \
1983289166Speter	    func_fatal_error "you cannot specify \`-o' more than once"
1984251883Speter	  arg_mode=target
1985251883Speter	  continue
1986251883Speter	  ;;
1987251883Speter
1988289166Speter	-pie | -fpie | -fPIE)
1989289166Speter          func_append pie_flag " $arg"
1990251883Speter	  continue
1991251883Speter	  ;;
1992251883Speter
1993289166Speter	-shared | -static | -prefer-pic | -prefer-non-pic)
1994289166Speter	  func_append later " $arg"
1995289166Speter	  continue
1996289166Speter	  ;;
1997289166Speter
1998251883Speter	-no-suppress)
1999251883Speter	  suppress_opt=no
2000251883Speter	  continue
2001251883Speter	  ;;
2002251883Speter
2003251883Speter	-Xcompiler)
2004251883Speter	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
2005251883Speter	  continue      #  The current "srcfile" will either be retained or
2006251883Speter	  ;;            #  replaced later.  I would guess that would be a bug.
2007251883Speter
2008251883Speter	-Wc,*)
2009289166Speter	  func_stripname '-Wc,' '' "$arg"
2010289166Speter	  args=$func_stripname_result
2011251883Speter	  lastarg=
2012251883Speter	  save_ifs="$IFS"; IFS=','
2013289166Speter	  for arg in $args; do
2014251883Speter	    IFS="$save_ifs"
2015289166Speter	    func_append_quoted lastarg "$arg"
2016251883Speter	  done
2017251883Speter	  IFS="$save_ifs"
2018289166Speter	  func_stripname ' ' '' "$lastarg"
2019289166Speter	  lastarg=$func_stripname_result
2020251883Speter
2021251883Speter	  # Add the arguments to base_compile.
2022289166Speter	  func_append base_compile " $lastarg"
2023251883Speter	  continue
2024251883Speter	  ;;
2025251883Speter
2026289166Speter	*)
2027251883Speter	  # Accept the current argument as the source file.
2028251883Speter	  # The previous "srcfile" becomes the current argument.
2029251883Speter	  #
2030251883Speter	  lastarg="$srcfile"
2031251883Speter	  srcfile="$arg"
2032251883Speter	  ;;
2033251883Speter	esac  #  case $arg
2034251883Speter	;;
2035251883Speter      esac    #  case $arg_mode
2036251883Speter
2037251883Speter      # Aesthetically quote the previous argument.
2038289166Speter      func_append_quoted base_compile "$lastarg"
2039251883Speter    done # for arg
2040251883Speter
2041251883Speter    case $arg_mode in
2042251883Speter    arg)
2043289166Speter      func_fatal_error "you must specify an argument for -Xcompile"
2044251883Speter      ;;
2045251883Speter    target)
2046289166Speter      func_fatal_error "you must specify a target with \`-o'"
2047251883Speter      ;;
2048251883Speter    *)
2049251883Speter      # Get the name of the library object.
2050289166Speter      test -z "$libobj" && {
2051289166Speter	func_basename "$srcfile"
2052289166Speter	libobj="$func_basename_result"
2053289166Speter      }
2054251883Speter      ;;
2055251883Speter    esac
2056251883Speter
2057251883Speter    # Recognize several different file suffixes.
2058251883Speter    # If the user specifies -o file.o, it is replaced with file.lo
2059251883Speter    case $libobj in
2060289166Speter    *.[cCFSifmso] | \
2061289166Speter    *.ada | *.adb | *.ads | *.asm | \
2062289166Speter    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
2063289166Speter    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
2064289166Speter      func_xform "$libobj"
2065289166Speter      libobj=$func_xform_result
2066289166Speter      ;;
2067251883Speter    esac
2068251883Speter
2069251883Speter    case $libobj in
2070289166Speter    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
2071251883Speter    *)
2072289166Speter      func_fatal_error "cannot determine name of library object from \`$libobj'"
2073251883Speter      ;;
2074251883Speter    esac
2075251883Speter
2076251883Speter    func_infer_tag $base_compile
2077251883Speter
2078251883Speter    for arg in $later; do
2079251883Speter      case $arg in
2080289166Speter      -shared)
2081289166Speter	test "$build_libtool_libs" != yes && \
2082289166Speter	  func_fatal_configuration "can not build a shared library"
2083289166Speter	build_old_libs=no
2084289166Speter	continue
2085289166Speter	;;
2086289166Speter
2087251883Speter      -static)
2088289166Speter	build_libtool_libs=no
2089251883Speter	build_old_libs=yes
2090251883Speter	continue
2091251883Speter	;;
2092251883Speter
2093251883Speter      -prefer-pic)
2094251883Speter	pic_mode=yes
2095251883Speter	continue
2096251883Speter	;;
2097251883Speter
2098251883Speter      -prefer-non-pic)
2099251883Speter	pic_mode=no
2100251883Speter	continue
2101251883Speter	;;
2102251883Speter      esac
2103251883Speter    done
2104251883Speter
2105289166Speter    func_quote_for_eval "$libobj"
2106289166Speter    test "X$libobj" != "X$func_quote_for_eval_result" \
2107289166Speter      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
2108289166Speter      && func_warning "libobj name \`$libobj' may not contain shell special characters."
2109289166Speter    func_dirname_and_basename "$obj" "/" ""
2110289166Speter    objname="$func_basename_result"
2111289166Speter    xdir="$func_dirname_result"
2112251883Speter    lobj=${xdir}$objdir/$objname
2113251883Speter
2114289166Speter    test -z "$base_compile" && \
2115289166Speter      func_fatal_help "you must specify a compilation command"
2116251883Speter
2117251883Speter    # Delete any leftover library objects.
2118251883Speter    if test "$build_old_libs" = yes; then
2119251883Speter      removelist="$obj $lobj $libobj ${libobj}T"
2120251883Speter    else
2121251883Speter      removelist="$lobj $libobj ${libobj}T"
2122251883Speter    fi
2123251883Speter
2124251883Speter    # On Cygwin there's no "real" PIC flag so we must build both object types
2125251883Speter    case $host_os in
2126289166Speter    cygwin* | mingw* | pw32* | os2* | cegcc*)
2127251883Speter      pic_mode=default
2128251883Speter      ;;
2129251883Speter    esac
2130251883Speter    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
2131251883Speter      # non-PIC code in shared libraries is not supported
2132251883Speter      pic_mode=default
2133251883Speter    fi
2134251883Speter
2135251883Speter    # Calculate the filename of the output object if compiler does
2136251883Speter    # not support -o with -c
2137251883Speter    if test "$compiler_c_o" = no; then
2138289166Speter      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
2139251883Speter      lockfile="$output_obj.lock"
2140251883Speter    else
2141251883Speter      output_obj=
2142251883Speter      need_locks=no
2143251883Speter      lockfile=
2144251883Speter    fi
2145251883Speter
2146251883Speter    # Lock this critical section if it is needed
2147251883Speter    # We use this script file to make the link, it avoids creating a new file
2148251883Speter    if test "$need_locks" = yes; then
2149289166Speter      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
2150289166Speter	func_echo "Waiting for $lockfile to be removed"
2151251883Speter	sleep 2
2152251883Speter      done
2153251883Speter    elif test "$need_locks" = warn; then
2154251883Speter      if test -f "$lockfile"; then
2155289166Speter	$ECHO "\
2156251883Speter*** ERROR, $lockfile exists and contains:
2157251883Speter`cat $lockfile 2>/dev/null`
2158251883Speter
2159251883SpeterThis indicates that another process is trying to use the same
2160251883Spetertemporary object file, and libtool could not work around it because
2161251883Speteryour compiler does not support \`-c' and \`-o' together.  If you
2162251883Speterrepeat this compilation, it may succeed, by chance, but you had better
2163251883Speteravoid parallel builds (make -j) in this platform, or get a better
2164251883Spetercompiler."
2165251883Speter
2166289166Speter	$opt_dry_run || $RM $removelist
2167251883Speter	exit $EXIT_FAILURE
2168251883Speter      fi
2169289166Speter      func_append removelist " $output_obj"
2170289166Speter      $ECHO "$srcfile" > "$lockfile"
2171251883Speter    fi
2172251883Speter
2173289166Speter    $opt_dry_run || $RM $removelist
2174289166Speter    func_append removelist " $lockfile"
2175289166Speter    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
2176251883Speter
2177289166Speter    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
2178289166Speter    srcfile=$func_to_tool_file_result
2179289166Speter    func_quote_for_eval "$srcfile"
2180289166Speter    qsrcfile=$func_quote_for_eval_result
2181251883Speter
2182251883Speter    # Only build a PIC object if we are building libtool libraries.
2183251883Speter    if test "$build_libtool_libs" = yes; then
2184251883Speter      # Without this assignment, base_compile gets emptied.
2185251883Speter      fbsd_hideous_sh_bug=$base_compile
2186251883Speter
2187251883Speter      if test "$pic_mode" != no; then
2188251883Speter	command="$base_compile $qsrcfile $pic_flag"
2189251883Speter      else
2190251883Speter	# Don't build PIC code
2191251883Speter	command="$base_compile $qsrcfile"
2192251883Speter      fi
2193251883Speter
2194289166Speter      func_mkdir_p "$xdir$objdir"
2195251883Speter
2196251883Speter      if test -z "$output_obj"; then
2197251883Speter	# Place PIC objects in $objdir
2198289166Speter	func_append command " -o $lobj"
2199251883Speter      fi
2200251883Speter
2201289166Speter      func_show_eval_locale "$command"	\
2202289166Speter          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
2203251883Speter
2204251883Speter      if test "$need_locks" = warn &&
2205251883Speter	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2206289166Speter	$ECHO "\
2207251883Speter*** ERROR, $lockfile contains:
2208251883Speter`cat $lockfile 2>/dev/null`
2209251883Speter
2210251883Speterbut it should contain:
2211251883Speter$srcfile
2212251883Speter
2213251883SpeterThis indicates that another process is trying to use the same
2214251883Spetertemporary object file, and libtool could not work around it because
2215251883Speteryour compiler does not support \`-c' and \`-o' together.  If you
2216251883Speterrepeat this compilation, it may succeed, by chance, but you had better
2217251883Speteravoid parallel builds (make -j) in this platform, or get a better
2218251883Spetercompiler."
2219251883Speter
2220289166Speter	$opt_dry_run || $RM $removelist
2221251883Speter	exit $EXIT_FAILURE
2222251883Speter      fi
2223251883Speter
2224251883Speter      # Just move the object if needed, then go on to compile the next one
2225251883Speter      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
2226289166Speter	func_show_eval '$MV "$output_obj" "$lobj"' \
2227289166Speter	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2228251883Speter      fi
2229251883Speter
2230251883Speter      # Allow error messages only from the first compilation.
2231251883Speter      if test "$suppress_opt" = yes; then
2232289166Speter	suppress_output=' >/dev/null 2>&1'
2233251883Speter      fi
2234251883Speter    fi
2235251883Speter
2236251883Speter    # Only build a position-dependent object if we build old libraries.
2237251883Speter    if test "$build_old_libs" = yes; then
2238251883Speter      if test "$pic_mode" != yes; then
2239251883Speter	# Don't build PIC code
2240289166Speter	command="$base_compile $qsrcfile$pie_flag"
2241251883Speter      else
2242251883Speter	command="$base_compile $qsrcfile $pic_flag"
2243251883Speter      fi
2244251883Speter      if test "$compiler_c_o" = yes; then
2245289166Speter	func_append command " -o $obj"
2246251883Speter      fi
2247251883Speter
2248251883Speter      # Suppress compiler output if we already did a PIC compilation.
2249289166Speter      func_append command "$suppress_output"
2250289166Speter      func_show_eval_locale "$command" \
2251289166Speter        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
2252251883Speter
2253251883Speter      if test "$need_locks" = warn &&
2254251883Speter	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2255289166Speter	$ECHO "\
2256251883Speter*** ERROR, $lockfile contains:
2257251883Speter`cat $lockfile 2>/dev/null`
2258251883Speter
2259251883Speterbut it should contain:
2260251883Speter$srcfile
2261251883Speter
2262251883SpeterThis indicates that another process is trying to use the same
2263251883Spetertemporary object file, and libtool could not work around it because
2264251883Speteryour compiler does not support \`-c' and \`-o' together.  If you
2265251883Speterrepeat this compilation, it may succeed, by chance, but you had better
2266251883Speteravoid parallel builds (make -j) in this platform, or get a better
2267251883Spetercompiler."
2268251883Speter
2269289166Speter	$opt_dry_run || $RM $removelist
2270251883Speter	exit $EXIT_FAILURE
2271251883Speter      fi
2272251883Speter
2273251883Speter      # Just move the object if needed
2274251883Speter      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
2275289166Speter	func_show_eval '$MV "$output_obj" "$obj"' \
2276289166Speter	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2277289166Speter      fi
2278289166Speter    fi
2279289166Speter
2280289166Speter    $opt_dry_run || {
2281289166Speter      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
2282289166Speter
2283289166Speter      # Unlock the critical section if it was locked
2284289166Speter      if test "$need_locks" != no; then
2285289166Speter	removelist=$lockfile
2286289166Speter        $RM "$lockfile"
2287289166Speter      fi
2288289166Speter    }
2289289166Speter
2290289166Speter    exit $EXIT_SUCCESS
2291289166Speter}
2292289166Speter
2293289166Speter$opt_help || {
2294289166Speter  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
2295289166Speter}
2296289166Speter
2297289166Speterfunc_mode_help ()
2298289166Speter{
2299289166Speter    # We need to display help for each of the modes.
2300289166Speter    case $opt_mode in
2301289166Speter      "")
2302289166Speter        # Generic help is extracted from the usage comments
2303289166Speter        # at the start of this file.
2304289166Speter        func_help
2305289166Speter        ;;
2306289166Speter
2307289166Speter      clean)
2308289166Speter        $ECHO \
2309289166Speter"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
2310289166Speter
2311289166SpeterRemove files from the build directory.
2312289166Speter
2313289166SpeterRM is the name of the program to use to delete files associated with each FILE
2314289166Speter(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2315289166Speterto RM.
2316289166Speter
2317289166SpeterIf FILE is a libtool library, object or program, all the files associated
2318289166Speterwith it are deleted. Otherwise, only FILE itself is deleted using RM."
2319289166Speter        ;;
2320289166Speter
2321289166Speter      compile)
2322289166Speter      $ECHO \
2323289166Speter"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
2324289166Speter
2325289166SpeterCompile a source file into a libtool library object.
2326289166Speter
2327289166SpeterThis mode accepts the following additional options:
2328289166Speter
2329289166Speter  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
2330289166Speter  -no-suppress      do not suppress compiler output for multiple passes
2331289166Speter  -prefer-pic       try to build PIC objects only
2332289166Speter  -prefer-non-pic   try to build non-PIC objects only
2333289166Speter  -shared           do not build a \`.o' file suitable for static linking
2334289166Speter  -static           only build a \`.o' file suitable for static linking
2335289166Speter  -Wc,FLAG          pass FLAG directly to the compiler
2336289166Speter
2337289166SpeterCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
2338289166Speterfrom the given SOURCEFILE.
2339289166Speter
2340289166SpeterThe output file name is determined by removing the directory component from
2341289166SpeterSOURCEFILE, then substituting the C source code suffix \`.c' with the
2342289166Speterlibrary object suffix, \`.lo'."
2343289166Speter        ;;
2344289166Speter
2345289166Speter      execute)
2346289166Speter        $ECHO \
2347289166Speter"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
2348289166Speter
2349289166SpeterAutomatically set library path, then run a program.
2350289166Speter
2351289166SpeterThis mode accepts the following additional options:
2352289166Speter
2353289166Speter  -dlopen FILE      add the directory containing FILE to the library path
2354289166Speter
2355289166SpeterThis mode sets the library path environment variable according to \`-dlopen'
2356289166Speterflags.
2357289166Speter
2358289166SpeterIf any of the ARGS are libtool executable wrappers, then they are translated
2359289166Speterinto their corresponding uninstalled binary, and any of their required library
2360289166Speterdirectories are added to the library path.
2361289166Speter
2362289166SpeterThen, COMMAND is executed, with ARGS as arguments."
2363289166Speter        ;;
2364289166Speter
2365289166Speter      finish)
2366289166Speter        $ECHO \
2367289166Speter"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
2368289166Speter
2369289166SpeterComplete the installation of libtool libraries.
2370289166Speter
2371289166SpeterEach LIBDIR is a directory that contains libtool libraries.
2372289166Speter
2373289166SpeterThe commands that this mode executes may require superuser privileges.  Use
2374289166Speterthe \`--dry-run' option if you just want to see what would be executed."
2375289166Speter        ;;
2376289166Speter
2377289166Speter      install)
2378289166Speter        $ECHO \
2379289166Speter"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
2380289166Speter
2381289166SpeterInstall executables or libraries.
2382289166Speter
2383289166SpeterINSTALL-COMMAND is the installation command.  The first component should be
2384289166Spetereither the \`install' or \`cp' program.
2385289166Speter
2386289166SpeterThe following components of INSTALL-COMMAND are treated specially:
2387289166Speter
2388289166Speter  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
2389289166Speter
2390289166SpeterThe rest of the components are interpreted as arguments to that command (only
2391289166SpeterBSD-compatible install options are recognized)."
2392289166Speter        ;;
2393289166Speter
2394289166Speter      link)
2395289166Speter        $ECHO \
2396289166Speter"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
2397289166Speter
2398289166SpeterLink object files or libraries together to form another library, or to
2399289166Spetercreate an executable program.
2400289166Speter
2401289166SpeterLINK-COMMAND is a command using the C compiler that you would use to create
2402289166Spetera program from several object files.
2403289166Speter
2404289166SpeterThe following components of LINK-COMMAND are treated specially:
2405289166Speter
2406289166Speter  -all-static       do not do any dynamic linking at all
2407289166Speter  -avoid-version    do not add a version suffix if possible
2408289166Speter  -bindir BINDIR    specify path to binaries directory (for systems where
2409289166Speter                    libraries must be found in the PATH setting at runtime)
2410289166Speter  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
2411289166Speter  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
2412289166Speter  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
2413289166Speter  -export-symbols SYMFILE
2414289166Speter                    try to export only the symbols listed in SYMFILE
2415289166Speter  -export-symbols-regex REGEX
2416289166Speter                    try to export only the symbols matching REGEX
2417289166Speter  -LLIBDIR          search LIBDIR for required installed libraries
2418289166Speter  -lNAME            OUTPUT-FILE requires the installed library libNAME
2419289166Speter  -module           build a library that can dlopened
2420289166Speter  -no-fast-install  disable the fast-install mode
2421289166Speter  -no-install       link a not-installable executable
2422289166Speter  -no-undefined     declare that a library does not refer to external symbols
2423289166Speter  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
2424289166Speter  -objectlist FILE  Use a list of object files found in FILE to specify objects
2425289166Speter  -precious-files-regex REGEX
2426289166Speter                    don't remove output files matching REGEX
2427289166Speter  -release RELEASE  specify package release information
2428289166Speter  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
2429289166Speter  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
2430289166Speter  -shared           only do dynamic linking of libtool libraries
2431289166Speter  -shrext SUFFIX    override the standard shared library file extension
2432289166Speter  -static           do not do any dynamic linking of uninstalled libtool libraries
2433289166Speter  -static-libtool-libs
2434289166Speter                    do not do any dynamic linking of libtool libraries
2435289166Speter  -version-info CURRENT[:REVISION[:AGE]]
2436289166Speter                    specify library version info [each variable defaults to 0]
2437289166Speter  -weak LIBNAME     declare that the target provides the LIBNAME interface
2438289166Speter  -Wc,FLAG
2439289166Speter  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
2440289166Speter  -Wl,FLAG
2441289166Speter  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
2442289166Speter  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
2443289166Speter
2444289166SpeterAll other options (arguments beginning with \`-') are ignored.
2445289166Speter
2446289166SpeterEvery other argument is treated as a filename.  Files ending in \`.la' are
2447289166Spetertreated as uninstalled libtool libraries, other files are standard or library
2448289166Speterobject files.
2449289166Speter
2450289166SpeterIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
2451289166Speteronly library objects (\`.lo' files) may be specified, and \`-rpath' is
2452289166Speterrequired, except when creating a convenience library.
2453289166Speter
2454289166SpeterIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
2455289166Speterusing \`ar' and \`ranlib', or on Windows using \`lib'.
2456289166Speter
2457289166SpeterIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
2458289166Speteris created, otherwise an executable program is created."
2459289166Speter        ;;
2460289166Speter
2461289166Speter      uninstall)
2462289166Speter        $ECHO \
2463289166Speter"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
2464289166Speter
2465289166SpeterRemove libraries from an installation directory.
2466289166Speter
2467289166SpeterRM is the name of the program to use to delete files associated with each FILE
2468289166Speter(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2469289166Speterto RM.
2470289166Speter
2471289166SpeterIf FILE is a libtool library, all the files associated with it are deleted.
2472289166SpeterOtherwise, only FILE itself is deleted using RM."
2473289166Speter        ;;
2474289166Speter
2475289166Speter      *)
2476289166Speter        func_fatal_help "invalid operation mode \`$opt_mode'"
2477289166Speter        ;;
2478289166Speter    esac
2479289166Speter
2480289166Speter    echo
2481289166Speter    $ECHO "Try \`$progname --help' for more information about other modes."
2482289166Speter}
2483289166Speter
2484289166Speter# Now that we've collected a possible --mode arg, show help if necessary
2485289166Speterif $opt_help; then
2486289166Speter  if test "$opt_help" = :; then
2487289166Speter    func_mode_help
2488289166Speter  else
2489289166Speter    {
2490289166Speter      func_help noexit
2491289166Speter      for opt_mode in compile link execute install finish uninstall clean; do
2492289166Speter	func_mode_help
2493289166Speter      done
2494289166Speter    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
2495289166Speter    {
2496289166Speter      func_help noexit
2497289166Speter      for opt_mode in compile link execute install finish uninstall clean; do
2498289166Speter	echo
2499289166Speter	func_mode_help
2500289166Speter      done
2501289166Speter    } |
2502289166Speter    sed '1d
2503289166Speter      /^When reporting/,/^Report/{
2504289166Speter	H
2505289166Speter	d
2506289166Speter      }
2507289166Speter      $x
2508289166Speter      /information about other modes/d
2509289166Speter      /more detailed .*MODE/d
2510289166Speter      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
2511289166Speter  fi
2512289166Speter  exit $?
2513289166Speterfi
2514289166Speter
2515289166Speter
2516289166Speter# func_mode_execute arg...
2517289166Speterfunc_mode_execute ()
2518289166Speter{
2519289166Speter    $opt_debug
2520289166Speter    # The first argument is the command name.
2521289166Speter    cmd="$nonopt"
2522289166Speter    test -z "$cmd" && \
2523289166Speter      func_fatal_help "you must specify a COMMAND"
2524289166Speter
2525289166Speter    # Handle -dlopen flags immediately.
2526289166Speter    for file in $opt_dlopen; do
2527289166Speter      test -f "$file" \
2528289166Speter	|| func_fatal_help "\`$file' is not a file"
2529289166Speter
2530289166Speter      dir=
2531289166Speter      case $file in
2532289166Speter      *.la)
2533289166Speter	func_resolve_sysroot "$file"
2534289166Speter	file=$func_resolve_sysroot_result
2535289166Speter
2536289166Speter	# Check to see that this really is a libtool archive.
2537289166Speter	func_lalib_unsafe_p "$file" \
2538289166Speter	  || func_fatal_help "\`$lib' is not a valid libtool archive"
2539289166Speter
2540289166Speter	# Read the libtool library.
2541289166Speter	dlname=
2542289166Speter	library_names=
2543289166Speter	func_source "$file"
2544289166Speter
2545289166Speter	# Skip this library if it cannot be dlopened.
2546289166Speter	if test -z "$dlname"; then
2547289166Speter	  # Warn if it was a shared library.
2548289166Speter	  test -n "$library_names" && \
2549289166Speter	    func_warning "\`$file' was not linked with \`-export-dynamic'"
2550289166Speter	  continue
2551289166Speter	fi
2552289166Speter
2553289166Speter	func_dirname "$file" "" "."
2554289166Speter	dir="$func_dirname_result"
2555289166Speter
2556289166Speter	if test -f "$dir/$objdir/$dlname"; then
2557289166Speter	  func_append dir "/$objdir"
2558251883Speter	else
2559289166Speter	  if test ! -f "$dir/$dlname"; then
2560289166Speter	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
2561289166Speter	  fi
2562251883Speter	fi
2563289166Speter	;;
2564289166Speter
2565289166Speter      *.lo)
2566289166Speter	# Just add the directory containing the .lo file.
2567289166Speter	func_dirname "$file" "" "."
2568289166Speter	dir="$func_dirname_result"
2569289166Speter	;;
2570289166Speter
2571289166Speter      *)
2572289166Speter	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
2573289166Speter	continue
2574289166Speter	;;
2575289166Speter      esac
2576289166Speter
2577289166Speter      # Get the absolute pathname.
2578289166Speter      absdir=`cd "$dir" && pwd`
2579289166Speter      test -n "$absdir" && dir="$absdir"
2580289166Speter
2581289166Speter      # Now add the directory to shlibpath_var.
2582289166Speter      if eval "test -z \"\$$shlibpath_var\""; then
2583289166Speter	eval "$shlibpath_var=\"\$dir\""
2584289166Speter      else
2585289166Speter	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
2586251883Speter      fi
2587289166Speter    done
2588251883Speter
2589289166Speter    # This variable tells wrapper scripts just to set shlibpath_var
2590289166Speter    # rather than running their programs.
2591289166Speter    libtool_execute_magic="$magic"
2592251883Speter
2593289166Speter    # Check if any of the arguments is a wrapper script.
2594289166Speter    args=
2595289166Speter    for file
2596289166Speter    do
2597289166Speter      case $file in
2598289166Speter      -* | *.la | *.lo ) ;;
2599289166Speter      *)
2600289166Speter	# Do a test to see if this is really a libtool program.
2601289166Speter	if func_ltwrapper_script_p "$file"; then
2602289166Speter	  func_source "$file"
2603289166Speter	  # Transform arg to wrapped name.
2604289166Speter	  file="$progdir/$program"
2605289166Speter	elif func_ltwrapper_executable_p "$file"; then
2606289166Speter	  func_ltwrapper_scriptname "$file"
2607289166Speter	  func_source "$func_ltwrapper_scriptname_result"
2608289166Speter	  # Transform arg to wrapped name.
2609289166Speter	  file="$progdir/$program"
2610289166Speter	fi
2611289166Speter	;;
2612289166Speter      esac
2613289166Speter      # Quote arguments (to preserve shell metacharacters).
2614289166Speter      func_append_quoted args "$file"
2615289166Speter    done
2616289166Speter
2617289166Speter    if test "X$opt_dry_run" = Xfalse; then
2618289166Speter      if test -n "$shlibpath_var"; then
2619289166Speter	# Export the shlibpath_var.
2620289166Speter	eval "export $shlibpath_var"
2621289166Speter      fi
2622289166Speter
2623289166Speter      # Restore saved environment variables
2624289166Speter      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
2625289166Speter      do
2626289166Speter	eval "if test \"\${save_$lt_var+set}\" = set; then
2627289166Speter                $lt_var=\$save_$lt_var; export $lt_var
2628289166Speter	      else
2629289166Speter		$lt_unset $lt_var
2630289166Speter	      fi"
2631289166Speter      done
2632289166Speter
2633289166Speter      # Now prepare to actually exec the command.
2634289166Speter      exec_cmd="\$cmd$args"
2635251883Speter    else
2636289166Speter      # Display what would be done.
2637289166Speter      if test -n "$shlibpath_var"; then
2638289166Speter	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
2639289166Speter	echo "export $shlibpath_var"
2640289166Speter      fi
2641289166Speter      $ECHO "$cmd$args"
2642289166Speter      exit $EXIT_SUCCESS
2643289166Speter    fi
2644289166Speter}
2645251883Speter
2646289166Spetertest "$opt_mode" = execute && func_mode_execute ${1+"$@"}
2647289166Speter
2648289166Speter
2649289166Speter# func_mode_finish arg...
2650289166Speterfunc_mode_finish ()
2651289166Speter{
2652289166Speter    $opt_debug
2653289166Speter    libs=
2654289166Speter    libdirs=
2655289166Speter    admincmds=
2656289166Speter
2657289166Speter    for opt in "$nonopt" ${1+"$@"}
2658289166Speter    do
2659289166Speter      if test -d "$opt"; then
2660289166Speter	func_append libdirs " $opt"
2661289166Speter
2662289166Speter      elif test -f "$opt"; then
2663289166Speter	if func_lalib_unsafe_p "$opt"; then
2664289166Speter	  func_append libs " $opt"
2665289166Speter	else
2666289166Speter	  func_warning "\`$opt' is not a valid libtool archive"
2667289166Speter	fi
2668289166Speter
2669289166Speter      else
2670289166Speter	func_fatal_error "invalid argument \`$opt'"
2671289166Speter      fi
2672289166Speter    done
2673289166Speter
2674289166Speter    if test -n "$libs"; then
2675289166Speter      if test -n "$lt_sysroot"; then
2676289166Speter        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
2677289166Speter        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
2678289166Speter      else
2679289166Speter        sysroot_cmd=
2680289166Speter      fi
2681289166Speter
2682289166Speter      # Remove sysroot references
2683289166Speter      if $opt_dry_run; then
2684289166Speter        for lib in $libs; do
2685289166Speter          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
2686289166Speter        done
2687289166Speter      else
2688289166Speter        tmpdir=`func_mktempdir`
2689289166Speter        for lib in $libs; do
2690289166Speter	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
2691289166Speter	    > $tmpdir/tmp-la
2692289166Speter	  mv -f $tmpdir/tmp-la $lib
2693289166Speter	done
2694289166Speter        ${RM}r "$tmpdir"
2695289166Speter      fi
2696251883Speter    fi
2697251883Speter
2698289166Speter    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2699289166Speter      for libdir in $libdirs; do
2700289166Speter	if test -n "$finish_cmds"; then
2701289166Speter	  # Do each command in the finish commands.
2702289166Speter	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
2703289166Speter'"$cmd"'"'
2704289166Speter	fi
2705289166Speter	if test -n "$finish_eval"; then
2706289166Speter	  # Do the single finish_eval.
2707289166Speter	  eval cmds=\"$finish_eval\"
2708289166Speter	  $opt_dry_run || eval "$cmds" || func_append admincmds "
2709289166Speter       $cmds"
2710289166Speter	fi
2711289166Speter      done
2712289166Speter    fi
2713251883Speter
2714289166Speter    # Exit here if they wanted silent mode.
2715289166Speter    $opt_silent && exit $EXIT_SUCCESS
2716289166Speter
2717289166Speter    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2718289166Speter      echo "----------------------------------------------------------------------"
2719289166Speter      echo "Libraries have been installed in:"
2720289166Speter      for libdir in $libdirs; do
2721289166Speter	$ECHO "   $libdir"
2722289166Speter      done
2723289166Speter      echo
2724289166Speter      echo "If you ever happen to want to link against installed libraries"
2725289166Speter      echo "in a given directory, LIBDIR, you must either use libtool, and"
2726289166Speter      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
2727289166Speter      echo "flag during linking and do at least one of the following:"
2728289166Speter      if test -n "$shlibpath_var"; then
2729289166Speter	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
2730289166Speter	echo "     during execution"
2731289166Speter      fi
2732289166Speter      if test -n "$runpath_var"; then
2733289166Speter	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
2734289166Speter	echo "     during linking"
2735289166Speter      fi
2736289166Speter      if test -n "$hardcode_libdir_flag_spec"; then
2737289166Speter	libdir=LIBDIR
2738289166Speter	eval flag=\"$hardcode_libdir_flag_spec\"
2739289166Speter
2740289166Speter	$ECHO "   - use the \`$flag' linker flag"
2741289166Speter      fi
2742289166Speter      if test -n "$admincmds"; then
2743289166Speter	$ECHO "   - have your system administrator run these commands:$admincmds"
2744289166Speter      fi
2745289166Speter      if test -f /etc/ld.so.conf; then
2746289166Speter	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
2747289166Speter      fi
2748289166Speter      echo
2749289166Speter
2750289166Speter      echo "See any operating system documentation about shared libraries for"
2751289166Speter      case $host in
2752289166Speter	solaris2.[6789]|solaris2.1[0-9])
2753289166Speter	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
2754289166Speter	  echo "pages."
2755289166Speter	  ;;
2756289166Speter	*)
2757289166Speter	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
2758289166Speter	  ;;
2759289166Speter      esac
2760289166Speter      echo "----------------------------------------------------------------------"
2761251883Speter    fi
2762289166Speter    exit $EXIT_SUCCESS
2763289166Speter}
2764251883Speter
2765289166Spetertest "$opt_mode" = finish && func_mode_finish ${1+"$@"}
2766289166Speter
2767289166Speter
2768289166Speter# func_mode_install arg...
2769289166Speterfunc_mode_install ()
2770289166Speter{
2771289166Speter    $opt_debug
2772289166Speter    # There may be an optional sh(1) argument at the beginning of
2773289166Speter    # install_prog (especially on Windows NT).
2774289166Speter    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
2775289166Speter       # Allow the use of GNU shtool's install command.
2776289166Speter       case $nonopt in *shtool*) :;; *) false;; esac; then
2777289166Speter      # Aesthetically quote it.
2778289166Speter      func_quote_for_eval "$nonopt"
2779289166Speter      install_prog="$func_quote_for_eval_result "
2780289166Speter      arg=$1
2781289166Speter      shift
2782289166Speter    else
2783289166Speter      install_prog=
2784289166Speter      arg=$nonopt
2785289166Speter    fi
2786289166Speter
2787289166Speter    # The real first argument should be the name of the installation program.
2788289166Speter    # Aesthetically quote it.
2789289166Speter    func_quote_for_eval "$arg"
2790289166Speter    func_append install_prog "$func_quote_for_eval_result"
2791289166Speter    install_shared_prog=$install_prog
2792289166Speter    case " $install_prog " in
2793289166Speter      *[\\\ /]cp\ *) install_cp=: ;;
2794289166Speter      *) install_cp=false ;;
2795289166Speter    esac
2796289166Speter
2797289166Speter    # We need to accept at least all the BSD install flags.
2798289166Speter    dest=
2799289166Speter    files=
2800289166Speter    opts=
2801289166Speter    prev=
2802289166Speter    install_type=
2803289166Speter    isdir=no
2804289166Speter    stripme=
2805289166Speter    no_mode=:
2806289166Speter    for arg
2807289166Speter    do
2808289166Speter      arg2=
2809289166Speter      if test -n "$dest"; then
2810289166Speter	func_append files " $dest"
2811289166Speter	dest=$arg
2812289166Speter	continue
2813289166Speter      fi
2814289166Speter
2815289166Speter      case $arg in
2816289166Speter      -d) isdir=yes ;;
2817289166Speter      -f)
2818289166Speter	if $install_cp; then :; else
2819289166Speter	  prev=$arg
2820289166Speter	fi
2821289166Speter	;;
2822289166Speter      -g | -m | -o)
2823289166Speter	prev=$arg
2824289166Speter	;;
2825289166Speter      -s)
2826289166Speter	stripme=" -s"
2827289166Speter	continue
2828289166Speter	;;
2829289166Speter      -*)
2830289166Speter	;;
2831289166Speter      *)
2832289166Speter	# If the previous option needed an argument, then skip it.
2833289166Speter	if test -n "$prev"; then
2834289166Speter	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
2835289166Speter	    arg2=$install_override_mode
2836289166Speter	    no_mode=false
2837289166Speter	  fi
2838289166Speter	  prev=
2839289166Speter	else
2840289166Speter	  dest=$arg
2841289166Speter	  continue
2842289166Speter	fi
2843289166Speter	;;
2844289166Speter      esac
2845289166Speter
2846289166Speter      # Aesthetically quote the argument.
2847289166Speter      func_quote_for_eval "$arg"
2848289166Speter      func_append install_prog " $func_quote_for_eval_result"
2849289166Speter      if test -n "$arg2"; then
2850289166Speter	func_quote_for_eval "$arg2"
2851289166Speter      fi
2852289166Speter      func_append install_shared_prog " $func_quote_for_eval_result"
2853289166Speter    done
2854289166Speter
2855289166Speter    test -z "$install_prog" && \
2856289166Speter      func_fatal_help "you must specify an install program"
2857289166Speter
2858289166Speter    test -n "$prev" && \
2859289166Speter      func_fatal_help "the \`$prev' option requires an argument"
2860289166Speter
2861289166Speter    if test -n "$install_override_mode" && $no_mode; then
2862289166Speter      if $install_cp; then :; else
2863289166Speter	func_quote_for_eval "$install_override_mode"
2864289166Speter	func_append install_shared_prog " -m $func_quote_for_eval_result"
2865289166Speter      fi
2866289166Speter    fi
2867289166Speter
2868289166Speter    if test -z "$files"; then
2869289166Speter      if test -z "$dest"; then
2870289166Speter	func_fatal_help "no file or destination specified"
2871289166Speter      else
2872289166Speter	func_fatal_help "you must specify a destination"
2873289166Speter      fi
2874289166Speter    fi
2875289166Speter
2876289166Speter    # Strip any trailing slash from the destination.
2877289166Speter    func_stripname '' '/' "$dest"
2878289166Speter    dest=$func_stripname_result
2879289166Speter
2880289166Speter    # Check to see that the destination is a directory.
2881289166Speter    test -d "$dest" && isdir=yes
2882289166Speter    if test "$isdir" = yes; then
2883289166Speter      destdir="$dest"
2884289166Speter      destname=
2885289166Speter    else
2886289166Speter      func_dirname_and_basename "$dest" "" "."
2887289166Speter      destdir="$func_dirname_result"
2888289166Speter      destname="$func_basename_result"
2889289166Speter
2890289166Speter      # Not a directory, so check to see that there is only one file specified.
2891289166Speter      set dummy $files; shift
2892289166Speter      test "$#" -gt 1 && \
2893289166Speter	func_fatal_help "\`$dest' is not a directory"
2894289166Speter    fi
2895289166Speter    case $destdir in
2896289166Speter    [\\/]* | [A-Za-z]:[\\/]*) ;;
2897289166Speter    *)
2898289166Speter      for file in $files; do
2899289166Speter	case $file in
2900289166Speter	*.lo) ;;
2901289166Speter	*)
2902289166Speter	  func_fatal_help "\`$destdir' must be an absolute directory name"
2903289166Speter	  ;;
2904289166Speter	esac
2905289166Speter      done
2906289166Speter      ;;
2907289166Speter    esac
2908289166Speter
2909289166Speter    # This variable tells wrapper scripts just to set variables rather
2910289166Speter    # than running their programs.
2911289166Speter    libtool_install_magic="$magic"
2912289166Speter
2913289166Speter    staticlibs=
2914289166Speter    future_libdirs=
2915289166Speter    current_libdirs=
2916289166Speter    for file in $files; do
2917289166Speter
2918289166Speter      # Do each installation.
2919289166Speter      case $file in
2920289166Speter      *.$libext)
2921289166Speter	# Do the static libraries later.
2922289166Speter	func_append staticlibs " $file"
2923289166Speter	;;
2924289166Speter
2925289166Speter      *.la)
2926289166Speter	func_resolve_sysroot "$file"
2927289166Speter	file=$func_resolve_sysroot_result
2928289166Speter
2929289166Speter	# Check to see that this really is a libtool archive.
2930289166Speter	func_lalib_unsafe_p "$file" \
2931289166Speter	  || func_fatal_help "\`$file' is not a valid libtool archive"
2932289166Speter
2933289166Speter	library_names=
2934289166Speter	old_library=
2935289166Speter	relink_command=
2936289166Speter	func_source "$file"
2937289166Speter
2938289166Speter	# Add the libdir to current_libdirs if it is the destination.
2939289166Speter	if test "X$destdir" = "X$libdir"; then
2940289166Speter	  case "$current_libdirs " in
2941289166Speter	  *" $libdir "*) ;;
2942289166Speter	  *) func_append current_libdirs " $libdir" ;;
2943289166Speter	  esac
2944289166Speter	else
2945289166Speter	  # Note the libdir as a future libdir.
2946289166Speter	  case "$future_libdirs " in
2947289166Speter	  *" $libdir "*) ;;
2948289166Speter	  *) func_append future_libdirs " $libdir" ;;
2949289166Speter	  esac
2950289166Speter	fi
2951289166Speter
2952289166Speter	func_dirname "$file" "/" ""
2953289166Speter	dir="$func_dirname_result"
2954289166Speter	func_append dir "$objdir"
2955289166Speter
2956289166Speter	if test -n "$relink_command"; then
2957289166Speter	  # Determine the prefix the user has applied to our future dir.
2958289166Speter	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
2959289166Speter
2960289166Speter	  # Don't allow the user to place us outside of our expected
2961289166Speter	  # location b/c this prevents finding dependent libraries that
2962289166Speter	  # are installed to the same prefix.
2963289166Speter	  # At present, this check doesn't affect windows .dll's that
2964289166Speter	  # are installed into $libdir/../bin (currently, that works fine)
2965289166Speter	  # but it's something to keep an eye on.
2966289166Speter	  test "$inst_prefix_dir" = "$destdir" && \
2967289166Speter	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
2968289166Speter
2969289166Speter	  if test -n "$inst_prefix_dir"; then
2970289166Speter	    # Stick the inst_prefix_dir data into the link command.
2971289166Speter	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
2972289166Speter	  else
2973289166Speter	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
2974289166Speter	  fi
2975289166Speter
2976289166Speter	  func_warning "relinking \`$file'"
2977289166Speter	  func_show_eval "$relink_command" \
2978289166Speter	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
2979289166Speter	fi
2980289166Speter
2981289166Speter	# See the names of the shared library.
2982289166Speter	set dummy $library_names; shift
2983289166Speter	if test -n "$1"; then
2984289166Speter	  realname="$1"
2985289166Speter	  shift
2986289166Speter
2987289166Speter	  srcname="$realname"
2988289166Speter	  test -n "$relink_command" && srcname="$realname"T
2989289166Speter
2990289166Speter	  # Install the shared library and build the symlinks.
2991289166Speter	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
2992289166Speter	      'exit $?'
2993289166Speter	  tstripme="$stripme"
2994289166Speter	  case $host_os in
2995289166Speter	  cygwin* | mingw* | pw32* | cegcc*)
2996289166Speter	    case $realname in
2997289166Speter	    *.dll.a)
2998289166Speter	      tstripme=""
2999289166Speter	      ;;
3000289166Speter	    esac
3001289166Speter	    ;;
3002289166Speter	  esac
3003289166Speter	  if test -n "$tstripme" && test -n "$striplib"; then
3004289166Speter	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
3005289166Speter	  fi
3006289166Speter
3007289166Speter	  if test "$#" -gt 0; then
3008289166Speter	    # Delete the old symlinks, and create new ones.
3009289166Speter	    # Try `ln -sf' first, because the `ln' binary might depend on
3010289166Speter	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
3011289166Speter	    # so we also need to try rm && ln -s.
3012289166Speter	    for linkname
3013289166Speter	    do
3014289166Speter	      test "$linkname" != "$realname" \
3015289166Speter		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
3016289166Speter	    done
3017289166Speter	  fi
3018289166Speter
3019289166Speter	  # Do each command in the postinstall commands.
3020289166Speter	  lib="$destdir/$realname"
3021289166Speter	  func_execute_cmds "$postinstall_cmds" 'exit $?'
3022289166Speter	fi
3023289166Speter
3024289166Speter	# Install the pseudo-library for information purposes.
3025289166Speter	func_basename "$file"
3026289166Speter	name="$func_basename_result"
3027289166Speter	instname="$dir/$name"i
3028289166Speter	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
3029289166Speter
3030289166Speter	# Maybe install the static library, too.
3031289166Speter	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
3032289166Speter	;;
3033289166Speter
3034289166Speter      *.lo)
3035289166Speter	# Install (i.e. copy) a libtool object.
3036289166Speter
3037289166Speter	# Figure out destination file name, if it wasn't already specified.
3038289166Speter	if test -n "$destname"; then
3039289166Speter	  destfile="$destdir/$destname"
3040289166Speter	else
3041289166Speter	  func_basename "$file"
3042289166Speter	  destfile="$func_basename_result"
3043289166Speter	  destfile="$destdir/$destfile"
3044289166Speter	fi
3045289166Speter
3046289166Speter	# Deduce the name of the destination old-style object file.
3047289166Speter	case $destfile in
3048289166Speter	*.lo)
3049289166Speter	  func_lo2o "$destfile"
3050289166Speter	  staticdest=$func_lo2o_result
3051289166Speter	  ;;
3052289166Speter	*.$objext)
3053289166Speter	  staticdest="$destfile"
3054289166Speter	  destfile=
3055289166Speter	  ;;
3056289166Speter	*)
3057289166Speter	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
3058289166Speter	  ;;
3059289166Speter	esac
3060289166Speter
3061289166Speter	# Install the libtool object if requested.
3062289166Speter	test -n "$destfile" && \
3063289166Speter	  func_show_eval "$install_prog $file $destfile" 'exit $?'
3064289166Speter
3065289166Speter	# Install the old object if enabled.
3066289166Speter	if test "$build_old_libs" = yes; then
3067289166Speter	  # Deduce the name of the old-style object file.
3068289166Speter	  func_lo2o "$file"
3069289166Speter	  staticobj=$func_lo2o_result
3070289166Speter	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
3071289166Speter	fi
3072289166Speter	exit $EXIT_SUCCESS
3073289166Speter	;;
3074289166Speter
3075289166Speter      *)
3076289166Speter	# Figure out destination file name, if it wasn't already specified.
3077289166Speter	if test -n "$destname"; then
3078289166Speter	  destfile="$destdir/$destname"
3079289166Speter	else
3080289166Speter	  func_basename "$file"
3081289166Speter	  destfile="$func_basename_result"
3082289166Speter	  destfile="$destdir/$destfile"
3083289166Speter	fi
3084289166Speter
3085289166Speter	# If the file is missing, and there is a .exe on the end, strip it
3086289166Speter	# because it is most likely a libtool script we actually want to
3087289166Speter	# install
3088289166Speter	stripped_ext=""
3089289166Speter	case $file in
3090289166Speter	  *.exe)
3091289166Speter	    if test ! -f "$file"; then
3092289166Speter	      func_stripname '' '.exe' "$file"
3093289166Speter	      file=$func_stripname_result
3094289166Speter	      stripped_ext=".exe"
3095289166Speter	    fi
3096289166Speter	    ;;
3097289166Speter	esac
3098289166Speter
3099289166Speter	# Do a test to see if this is really a libtool program.
3100289166Speter	case $host in
3101289166Speter	*cygwin* | *mingw*)
3102289166Speter	    if func_ltwrapper_executable_p "$file"; then
3103289166Speter	      func_ltwrapper_scriptname "$file"
3104289166Speter	      wrapper=$func_ltwrapper_scriptname_result
3105289166Speter	    else
3106289166Speter	      func_stripname '' '.exe' "$file"
3107289166Speter	      wrapper=$func_stripname_result
3108289166Speter	    fi
3109289166Speter	    ;;
3110289166Speter	*)
3111289166Speter	    wrapper=$file
3112289166Speter	    ;;
3113289166Speter	esac
3114289166Speter	if func_ltwrapper_script_p "$wrapper"; then
3115289166Speter	  notinst_deplibs=
3116289166Speter	  relink_command=
3117289166Speter
3118289166Speter	  func_source "$wrapper"
3119289166Speter
3120289166Speter	  # Check the variables that should have been set.
3121289166Speter	  test -z "$generated_by_libtool_version" && \
3122289166Speter	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
3123289166Speter
3124289166Speter	  finalize=yes
3125289166Speter	  for lib in $notinst_deplibs; do
3126289166Speter	    # Check to see that each library is installed.
3127289166Speter	    libdir=
3128289166Speter	    if test -f "$lib"; then
3129289166Speter	      func_source "$lib"
3130289166Speter	    fi
3131289166Speter	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
3132289166Speter	    if test -n "$libdir" && test ! -f "$libfile"; then
3133289166Speter	      func_warning "\`$lib' has not been installed in \`$libdir'"
3134289166Speter	      finalize=no
3135289166Speter	    fi
3136289166Speter	  done
3137289166Speter
3138289166Speter	  relink_command=
3139289166Speter	  func_source "$wrapper"
3140289166Speter
3141289166Speter	  outputname=
3142289166Speter	  if test "$fast_install" = no && test -n "$relink_command"; then
3143289166Speter	    $opt_dry_run || {
3144289166Speter	      if test "$finalize" = yes; then
3145289166Speter	        tmpdir=`func_mktempdir`
3146289166Speter		func_basename "$file$stripped_ext"
3147289166Speter		file="$func_basename_result"
3148289166Speter	        outputname="$tmpdir/$file"
3149289166Speter	        # Replace the output file specification.
3150289166Speter	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
3151289166Speter
3152289166Speter	        $opt_silent || {
3153289166Speter	          func_quote_for_expand "$relink_command"
3154289166Speter		  eval "func_echo $func_quote_for_expand_result"
3155289166Speter	        }
3156289166Speter	        if eval "$relink_command"; then :
3157289166Speter	          else
3158289166Speter		  func_error "error: relink \`$file' with the above command before installing it"
3159289166Speter		  $opt_dry_run || ${RM}r "$tmpdir"
3160289166Speter		  continue
3161289166Speter	        fi
3162289166Speter	        file="$outputname"
3163289166Speter	      else
3164289166Speter	        func_warning "cannot relink \`$file'"
3165289166Speter	      fi
3166289166Speter	    }
3167289166Speter	  else
3168289166Speter	    # Install the binary that we compiled earlier.
3169289166Speter	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
3170289166Speter	  fi
3171289166Speter	fi
3172289166Speter
3173289166Speter	# remove .exe since cygwin /usr/bin/install will append another
3174289166Speter	# one anyway
3175289166Speter	case $install_prog,$host in
3176289166Speter	*/usr/bin/install*,*cygwin*)
3177289166Speter	  case $file:$destfile in
3178289166Speter	  *.exe:*.exe)
3179289166Speter	    # this is ok
3180289166Speter	    ;;
3181289166Speter	  *.exe:*)
3182289166Speter	    destfile=$destfile.exe
3183289166Speter	    ;;
3184289166Speter	  *:*.exe)
3185289166Speter	    func_stripname '' '.exe' "$destfile"
3186289166Speter	    destfile=$func_stripname_result
3187289166Speter	    ;;
3188289166Speter	  esac
3189289166Speter	  ;;
3190289166Speter	esac
3191289166Speter	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
3192289166Speter	$opt_dry_run || if test -n "$outputname"; then
3193289166Speter	  ${RM}r "$tmpdir"
3194289166Speter	fi
3195289166Speter	;;
3196289166Speter      esac
3197289166Speter    done
3198289166Speter
3199289166Speter    for file in $staticlibs; do
3200289166Speter      func_basename "$file"
3201289166Speter      name="$func_basename_result"
3202289166Speter
3203289166Speter      # Set up the ranlib parameters.
3204289166Speter      oldlib="$destdir/$name"
3205289166Speter      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
3206289166Speter      tool_oldlib=$func_to_tool_file_result
3207289166Speter
3208289166Speter      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
3209289166Speter
3210289166Speter      if test -n "$stripme" && test -n "$old_striplib"; then
3211289166Speter	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
3212289166Speter      fi
3213289166Speter
3214289166Speter      # Do each command in the postinstall commands.
3215289166Speter      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
3216289166Speter    done
3217289166Speter
3218289166Speter    test -n "$future_libdirs" && \
3219289166Speter      func_warning "remember to run \`$progname --finish$future_libdirs'"
3220289166Speter
3221289166Speter    if test -n "$current_libdirs"; then
3222289166Speter      # Maybe just do a dry run.
3223289166Speter      $opt_dry_run && current_libdirs=" -n$current_libdirs"
3224289166Speter      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
3225289166Speter    else
3226289166Speter      exit $EXIT_SUCCESS
3227289166Speter    fi
3228289166Speter}
3229289166Speter
3230289166Spetertest "$opt_mode" = install && func_mode_install ${1+"$@"}
3231289166Speter
3232289166Speter
3233289166Speter# func_generate_dlsyms outputname originator pic_p
3234289166Speter# Extract symbols from dlprefiles and create ${outputname}S.o with
3235289166Speter# a dlpreopen symbol table.
3236289166Speterfunc_generate_dlsyms ()
3237289166Speter{
3238289166Speter    $opt_debug
3239289166Speter    my_outputname="$1"
3240289166Speter    my_originator="$2"
3241289166Speter    my_pic_p="${3-no}"
3242289166Speter    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
3243289166Speter    my_dlsyms=
3244289166Speter
3245289166Speter    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
3246289166Speter      if test -n "$NM" && test -n "$global_symbol_pipe"; then
3247289166Speter	my_dlsyms="${my_outputname}S.c"
3248289166Speter      else
3249289166Speter	func_error "not configured to extract global symbols from dlpreopened files"
3250289166Speter      fi
3251289166Speter    fi
3252289166Speter
3253289166Speter    if test -n "$my_dlsyms"; then
3254289166Speter      case $my_dlsyms in
3255289166Speter      "") ;;
3256289166Speter      *.c)
3257289166Speter	# Discover the nlist of each of the dlfiles.
3258289166Speter	nlist="$output_objdir/${my_outputname}.nm"
3259289166Speter
3260289166Speter	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
3261289166Speter
3262289166Speter	# Parse the name list into a source file.
3263289166Speter	func_verbose "creating $output_objdir/$my_dlsyms"
3264289166Speter
3265289166Speter	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
3266289166Speter/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
3267289166Speter/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
3268289166Speter
3269289166Speter#ifdef __cplusplus
3270289166Speterextern \"C\" {
3271289166Speter#endif
3272289166Speter
3273289166Speter#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
3274289166Speter#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
3275289166Speter#endif
3276289166Speter
3277289166Speter/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
3278289166Speter#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
3279289166Speter/* DATA imports from DLLs on WIN32 con't be const, because runtime
3280289166Speter   relocations are performed -- see ld's documentation on pseudo-relocs.  */
3281289166Speter# define LT_DLSYM_CONST
3282289166Speter#elif defined(__osf__)
3283289166Speter/* This system does not cope well with relocations in const data.  */
3284289166Speter# define LT_DLSYM_CONST
3285289166Speter#else
3286289166Speter# define LT_DLSYM_CONST const
3287289166Speter#endif
3288289166Speter
3289289166Speter/* External symbol declarations for the compiler. */\
3290289166Speter"
3291289166Speter
3292289166Speter	if test "$dlself" = yes; then
3293289166Speter	  func_verbose "generating symbol list for \`$output'"
3294289166Speter
3295289166Speter	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
3296289166Speter
3297289166Speter	  # Add our own program objects to the symbol list.
3298289166Speter	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
3299289166Speter	  for progfile in $progfiles; do
3300289166Speter	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
3301289166Speter	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
3302289166Speter	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
3303289166Speter	  done
3304289166Speter
3305289166Speter	  if test -n "$exclude_expsyms"; then
3306289166Speter	    $opt_dry_run || {
3307289166Speter	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
3308289166Speter	      eval '$MV "$nlist"T "$nlist"'
3309289166Speter	    }
3310289166Speter	  fi
3311289166Speter
3312289166Speter	  if test -n "$export_symbols_regex"; then
3313289166Speter	    $opt_dry_run || {
3314289166Speter	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
3315289166Speter	      eval '$MV "$nlist"T "$nlist"'
3316289166Speter	    }
3317289166Speter	  fi
3318289166Speter
3319289166Speter	  # Prepare the list of exported symbols
3320289166Speter	  if test -z "$export_symbols"; then
3321289166Speter	    export_symbols="$output_objdir/$outputname.exp"
3322289166Speter	    $opt_dry_run || {
3323289166Speter	      $RM $export_symbols
3324289166Speter	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
3325289166Speter	      case $host in
3326289166Speter	      *cygwin* | *mingw* | *cegcc* )
3327289166Speter                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3328289166Speter                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
3329289166Speter	        ;;
3330289166Speter	      esac
3331289166Speter	    }
3332289166Speter	  else
3333289166Speter	    $opt_dry_run || {
3334289166Speter	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
3335289166Speter	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
3336289166Speter	      eval '$MV "$nlist"T "$nlist"'
3337289166Speter	      case $host in
3338289166Speter	        *cygwin* | *mingw* | *cegcc* )
3339289166Speter	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3340289166Speter	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
3341289166Speter	          ;;
3342289166Speter	      esac
3343289166Speter	    }
3344289166Speter	  fi
3345289166Speter	fi
3346289166Speter
3347289166Speter	for dlprefile in $dlprefiles; do
3348289166Speter	  func_verbose "extracting global C symbols from \`$dlprefile'"
3349289166Speter	  func_basename "$dlprefile"
3350289166Speter	  name="$func_basename_result"
3351289166Speter          case $host in
3352289166Speter	    *cygwin* | *mingw* | *cegcc* )
3353289166Speter	      # if an import library, we need to obtain dlname
3354289166Speter	      if func_win32_import_lib_p "$dlprefile"; then
3355289166Speter	        func_tr_sh "$dlprefile"
3356289166Speter	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
3357289166Speter	        dlprefile_dlbasename=""
3358289166Speter	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
3359289166Speter	          # Use subshell, to avoid clobbering current variable values
3360289166Speter	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
3361289166Speter	          if test -n "$dlprefile_dlname" ; then
3362289166Speter	            func_basename "$dlprefile_dlname"
3363289166Speter	            dlprefile_dlbasename="$func_basename_result"
3364289166Speter	          else
3365289166Speter	            # no lafile. user explicitly requested -dlpreopen <import library>.
3366289166Speter	            $sharedlib_from_linklib_cmd "$dlprefile"
3367289166Speter	            dlprefile_dlbasename=$sharedlib_from_linklib_result
3368289166Speter	          fi
3369289166Speter	        fi
3370289166Speter	        $opt_dry_run || {
3371289166Speter	          if test -n "$dlprefile_dlbasename" ; then
3372289166Speter	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
3373289166Speter	          else
3374289166Speter	            func_warning "Could not compute DLL name from $name"
3375289166Speter	            eval '$ECHO ": $name " >> "$nlist"'
3376289166Speter	          fi
3377289166Speter	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3378289166Speter	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
3379289166Speter	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
3380289166Speter	        }
3381289166Speter	      else # not an import lib
3382289166Speter	        $opt_dry_run || {
3383289166Speter	          eval '$ECHO ": $name " >> "$nlist"'
3384289166Speter	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3385289166Speter	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
3386289166Speter	        }
3387289166Speter	      fi
3388289166Speter	    ;;
3389289166Speter	    *)
3390289166Speter	      $opt_dry_run || {
3391289166Speter	        eval '$ECHO ": $name " >> "$nlist"'
3392289166Speter	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3393289166Speter	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
3394289166Speter	      }
3395289166Speter	    ;;
3396289166Speter          esac
3397289166Speter	done
3398289166Speter
3399289166Speter	$opt_dry_run || {
3400289166Speter	  # Make sure we have at least an empty file.
3401289166Speter	  test -f "$nlist" || : > "$nlist"
3402289166Speter
3403289166Speter	  if test -n "$exclude_expsyms"; then
3404289166Speter	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
3405289166Speter	    $MV "$nlist"T "$nlist"
3406289166Speter	  fi
3407289166Speter
3408289166Speter	  # Try sorting and uniquifying the output.
3409289166Speter	  if $GREP -v "^: " < "$nlist" |
3410289166Speter	      if sort -k 3 </dev/null >/dev/null 2>&1; then
3411289166Speter		sort -k 3
3412289166Speter	      else
3413289166Speter		sort +2
3414289166Speter	      fi |
3415289166Speter	      uniq > "$nlist"S; then
3416289166Speter	    :
3417289166Speter	  else
3418289166Speter	    $GREP -v "^: " < "$nlist" > "$nlist"S
3419289166Speter	  fi
3420289166Speter
3421289166Speter	  if test -f "$nlist"S; then
3422289166Speter	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
3423289166Speter	  else
3424289166Speter	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
3425289166Speter	  fi
3426289166Speter
3427289166Speter	  echo >> "$output_objdir/$my_dlsyms" "\
3428289166Speter
3429289166Speter/* The mapping between symbol names and symbols.  */
3430289166Spetertypedef struct {
3431289166Speter  const char *name;
3432289166Speter  void *address;
3433289166Speter} lt_dlsymlist;
3434289166Speterextern LT_DLSYM_CONST lt_dlsymlist
3435289166Speterlt_${my_prefix}_LTX_preloaded_symbols[];
3436289166SpeterLT_DLSYM_CONST lt_dlsymlist
3437289166Speterlt_${my_prefix}_LTX_preloaded_symbols[] =
3438289166Speter{\
3439289166Speter  { \"$my_originator\", (void *) 0 },"
3440289166Speter
3441289166Speter	  case $need_lib_prefix in
3442289166Speter	  no)
3443289166Speter	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
3444289166Speter	    ;;
3445289166Speter	  *)
3446289166Speter	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
3447289166Speter	    ;;
3448289166Speter	  esac
3449289166Speter	  echo >> "$output_objdir/$my_dlsyms" "\
3450289166Speter  {0, (void *) 0}
3451289166Speter};
3452289166Speter
3453289166Speter/* This works around a problem in FreeBSD linker */
3454289166Speter#ifdef FREEBSD_WORKAROUND
3455289166Speterstatic const void *lt_preloaded_setup() {
3456289166Speter  return lt_${my_prefix}_LTX_preloaded_symbols;
3457289166Speter}
3458289166Speter#endif
3459289166Speter
3460289166Speter#ifdef __cplusplus
3461289166Speter}
3462289166Speter#endif\
3463289166Speter"
3464289166Speter	} # !$opt_dry_run
3465289166Speter
3466289166Speter	pic_flag_for_symtable=
3467289166Speter	case "$compile_command " in
3468289166Speter	*" -static "*) ;;
3469289166Speter	*)
3470289166Speter	  case $host in
3471289166Speter	  # compiling the symbol table file with pic_flag works around
3472289166Speter	  # a FreeBSD bug that causes programs to crash when -lm is
3473289166Speter	  # linked before any other PIC object.  But we must not use
3474289166Speter	  # pic_flag when linking with -static.  The problem exists in
3475289166Speter	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
3476289166Speter	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
3477289166Speter	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
3478289166Speter	  *-*-hpux*)
3479289166Speter	    pic_flag_for_symtable=" $pic_flag"  ;;
3480289166Speter	  *)
3481289166Speter	    if test "X$my_pic_p" != Xno; then
3482289166Speter	      pic_flag_for_symtable=" $pic_flag"
3483289166Speter	    fi
3484289166Speter	    ;;
3485289166Speter	  esac
3486289166Speter	  ;;
3487289166Speter	esac
3488289166Speter	symtab_cflags=
3489289166Speter	for arg in $LTCFLAGS; do
3490289166Speter	  case $arg in
3491289166Speter	  -pie | -fpie | -fPIE) ;;
3492289166Speter	  *) func_append symtab_cflags " $arg" ;;
3493289166Speter	  esac
3494289166Speter	done
3495289166Speter
3496289166Speter	# Now compile the dynamic symbol file.
3497289166Speter	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
3498289166Speter
3499289166Speter	# Clean up the generated files.
3500289166Speter	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
3501289166Speter
3502289166Speter	# Transform the symbol file into the correct name.
3503289166Speter	symfileobj="$output_objdir/${my_outputname}S.$objext"
3504289166Speter	case $host in
3505289166Speter	*cygwin* | *mingw* | *cegcc* )
3506289166Speter	  if test -f "$output_objdir/$my_outputname.def"; then
3507289166Speter	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3508289166Speter	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3509289166Speter	  else
3510289166Speter	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3511289166Speter	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3512289166Speter	  fi
3513289166Speter	  ;;
3514289166Speter	*)
3515289166Speter	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3516289166Speter	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3517289166Speter	  ;;
3518289166Speter	esac
3519289166Speter	;;
3520289166Speter      *)
3521289166Speter	func_fatal_error "unknown suffix for \`$my_dlsyms'"
3522289166Speter	;;
3523289166Speter      esac
3524289166Speter    else
3525289166Speter      # We keep going just in case the user didn't refer to
3526289166Speter      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
3527289166Speter      # really was required.
3528289166Speter
3529289166Speter      # Nullify the symbol file.
3530289166Speter      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
3531289166Speter      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
3532289166Speter    fi
3533289166Speter}
3534289166Speter
3535289166Speter# func_win32_libid arg
3536289166Speter# return the library type of file 'arg'
3537289166Speter#
3538289166Speter# Need a lot of goo to handle *both* DLLs and import libs
3539289166Speter# Has to be a shell function in order to 'eat' the argument
3540289166Speter# that is supplied when $file_magic_command is called.
3541289166Speter# Despite the name, also deal with 64 bit binaries.
3542289166Speterfunc_win32_libid ()
3543289166Speter{
3544289166Speter  $opt_debug
3545289166Speter  win32_libid_type="unknown"
3546289166Speter  win32_fileres=`file -L $1 2>/dev/null`
3547289166Speter  case $win32_fileres in
3548289166Speter  *ar\ archive\ import\ library*) # definitely import
3549289166Speter    win32_libid_type="x86 archive import"
3550251883Speter    ;;
3551289166Speter  *ar\ archive*) # could be an import, or static
3552289166Speter    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
3553289166Speter    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
3554289166Speter       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
3555289166Speter      func_to_tool_file "$1" func_convert_file_msys_to_w32
3556289166Speter      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
3557289166Speter	$SED -n -e '
3558289166Speter	    1,100{
3559289166Speter		/ I /{
3560289166Speter		    s,.*,import,
3561289166Speter		    p
3562289166Speter		    q
3563289166Speter		}
3564289166Speter	    }'`
3565289166Speter      case $win32_nmres in
3566289166Speter      import*)  win32_libid_type="x86 archive import";;
3567289166Speter      *)        win32_libid_type="x86 archive static";;
3568289166Speter      esac
3569289166Speter    fi
3570289166Speter    ;;
3571289166Speter  *DLL*)
3572289166Speter    win32_libid_type="x86 DLL"
3573289166Speter    ;;
3574289166Speter  *executable*) # but shell scripts are "executable" too...
3575289166Speter    case $win32_fileres in
3576289166Speter    *MS\ Windows\ PE\ Intel*)
3577289166Speter      win32_libid_type="x86 DLL"
3578289166Speter      ;;
3579289166Speter    esac
3580289166Speter    ;;
3581289166Speter  esac
3582289166Speter  $ECHO "$win32_libid_type"
3583289166Speter}
3584251883Speter
3585289166Speter# func_cygming_dll_for_implib ARG
3586289166Speter#
3587289166Speter# Platform-specific function to extract the
3588289166Speter# name of the DLL associated with the specified
3589289166Speter# import library ARG.
3590289166Speter# Invoked by eval'ing the libtool variable
3591289166Speter#    $sharedlib_from_linklib_cmd
3592289166Speter# Result is available in the variable
3593289166Speter#    $sharedlib_from_linklib_result
3594289166Speterfunc_cygming_dll_for_implib ()
3595289166Speter{
3596289166Speter  $opt_debug
3597289166Speter  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
3598289166Speter}
3599289166Speter
3600289166Speter# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
3601289166Speter#
3602289166Speter# The is the core of a fallback implementation of a
3603289166Speter# platform-specific function to extract the name of the
3604289166Speter# DLL associated with the specified import library LIBNAME.
3605289166Speter#
3606289166Speter# SECTION_NAME is either .idata$6 or .idata$7, depending
3607289166Speter# on the platform and compiler that created the implib.
3608289166Speter#
3609289166Speter# Echos the name of the DLL associated with the
3610289166Speter# specified import library.
3611289166Speterfunc_cygming_dll_for_implib_fallback_core ()
3612289166Speter{
3613289166Speter  $opt_debug
3614289166Speter  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
3615289166Speter  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
3616289166Speter    $SED '/^Contents of section '"$match_literal"':/{
3617289166Speter      # Place marker at beginning of archive member dllname section
3618289166Speter      s/.*/====MARK====/
3619289166Speter      p
3620289166Speter      d
3621289166Speter    }
3622289166Speter    # These lines can sometimes be longer than 43 characters, but
3623289166Speter    # are always uninteresting
3624289166Speter    /:[	 ]*file format pe[i]\{,1\}-/d
3625289166Speter    /^In archive [^:]*:/d
3626289166Speter    # Ensure marker is printed
3627289166Speter    /^====MARK====/p
3628289166Speter    # Remove all lines with less than 43 characters
3629289166Speter    /^.\{43\}/!d
3630289166Speter    # From remaining lines, remove first 43 characters
3631289166Speter    s/^.\{43\}//' |
3632289166Speter    $SED -n '
3633289166Speter      # Join marker and all lines until next marker into a single line
3634289166Speter      /^====MARK====/ b para
3635289166Speter      H
3636289166Speter      $ b para
3637289166Speter      b
3638289166Speter      :para
3639289166Speter      x
3640289166Speter      s/\n//g
3641289166Speter      # Remove the marker
3642289166Speter      s/^====MARK====//
3643289166Speter      # Remove trailing dots and whitespace
3644289166Speter      s/[\. \t]*$//
3645289166Speter      # Print
3646289166Speter      /./p' |
3647289166Speter    # we now have a list, one entry per line, of the stringified
3648289166Speter    # contents of the appropriate section of all members of the
3649289166Speter    # archive which possess that section. Heuristic: eliminate
3650289166Speter    # all those which have a first or second character that is
3651289166Speter    # a '.' (that is, objdump's representation of an unprintable
3652289166Speter    # character.) This should work for all archives with less than
3653289166Speter    # 0x302f exports -- but will fail for DLLs whose name actually
3654289166Speter    # begins with a literal '.' or a single character followed by
3655289166Speter    # a '.'.
3656289166Speter    #
3657289166Speter    # Of those that remain, print the first one.
3658289166Speter    $SED -e '/^\./d;/^.\./d;q'
3659289166Speter}
3660289166Speter
3661289166Speter# func_cygming_gnu_implib_p ARG
3662289166Speter# This predicate returns with zero status (TRUE) if
3663289166Speter# ARG is a GNU/binutils-style import library. Returns
3664289166Speter# with nonzero status (FALSE) otherwise.
3665289166Speterfunc_cygming_gnu_implib_p ()
3666289166Speter{
3667289166Speter  $opt_debug
3668289166Speter  func_to_tool_file "$1" func_convert_file_msys_to_w32
3669289166Speter  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)$'`
3670289166Speter  test -n "$func_cygming_gnu_implib_tmp"
3671289166Speter}
3672289166Speter
3673289166Speter# func_cygming_ms_implib_p ARG
3674289166Speter# This predicate returns with zero status (TRUE) if
3675289166Speter# ARG is an MS-style import library. Returns
3676289166Speter# with nonzero status (FALSE) otherwise.
3677289166Speterfunc_cygming_ms_implib_p ()
3678289166Speter{
3679289166Speter  $opt_debug
3680289166Speter  func_to_tool_file "$1" func_convert_file_msys_to_w32
3681289166Speter  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
3682289166Speter  test -n "$func_cygming_ms_implib_tmp"
3683289166Speter}
3684289166Speter
3685289166Speter# func_cygming_dll_for_implib_fallback ARG
3686289166Speter# Platform-specific function to extract the
3687289166Speter# name of the DLL associated with the specified
3688289166Speter# import library ARG.
3689289166Speter#
3690289166Speter# This fallback implementation is for use when $DLLTOOL
3691289166Speter# does not support the --identify-strict option.
3692289166Speter# Invoked by eval'ing the libtool variable
3693289166Speter#    $sharedlib_from_linklib_cmd
3694289166Speter# Result is available in the variable
3695289166Speter#    $sharedlib_from_linklib_result
3696289166Speterfunc_cygming_dll_for_implib_fallback ()
3697289166Speter{
3698289166Speter  $opt_debug
3699289166Speter  if func_cygming_gnu_implib_p "$1" ; then
3700289166Speter    # binutils import library
3701289166Speter    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
3702289166Speter  elif func_cygming_ms_implib_p "$1" ; then
3703289166Speter    # ms-generated import library
3704289166Speter    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
3705289166Speter  else
3706289166Speter    # unknown
3707289166Speter    sharedlib_from_linklib_result=""
3708289166Speter  fi
3709289166Speter}
3710289166Speter
3711289166Speter
3712289166Speter# func_extract_an_archive dir oldlib
3713289166Speterfunc_extract_an_archive ()
3714289166Speter{
3715289166Speter    $opt_debug
3716289166Speter    f_ex_an_ar_dir="$1"; shift
3717289166Speter    f_ex_an_ar_oldlib="$1"
3718289166Speter    if test "$lock_old_archive_extraction" = yes; then
3719289166Speter      lockfile=$f_ex_an_ar_oldlib.lock
3720289166Speter      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3721289166Speter	func_echo "Waiting for $lockfile to be removed"
3722289166Speter	sleep 2
3723289166Speter      done
3724289166Speter    fi
3725289166Speter    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
3726289166Speter		   'stat=$?; rm -f "$lockfile"; exit $stat'
3727289166Speter    if test "$lock_old_archive_extraction" = yes; then
3728289166Speter      $opt_dry_run || rm -f "$lockfile"
3729289166Speter    fi
3730289166Speter    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
3731289166Speter     :
3732289166Speter    else
3733289166Speter      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
3734289166Speter    fi
3735289166Speter}
3736289166Speter
3737289166Speter
3738289166Speter# func_extract_archives gentop oldlib ...
3739289166Speterfunc_extract_archives ()
3740289166Speter{
3741289166Speter    $opt_debug
3742289166Speter    my_gentop="$1"; shift
3743289166Speter    my_oldlibs=${1+"$@"}
3744289166Speter    my_oldobjs=""
3745289166Speter    my_xlib=""
3746289166Speter    my_xabs=""
3747289166Speter    my_xdir=""
3748289166Speter
3749289166Speter    for my_xlib in $my_oldlibs; do
3750289166Speter      # Extract the objects.
3751289166Speter      case $my_xlib in
3752289166Speter	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
3753289166Speter	*) my_xabs=`pwd`"/$my_xlib" ;;
3754289166Speter      esac
3755289166Speter      func_basename "$my_xlib"
3756289166Speter      my_xlib="$func_basename_result"
3757289166Speter      my_xlib_u=$my_xlib
3758289166Speter      while :; do
3759289166Speter        case " $extracted_archives " in
3760289166Speter	*" $my_xlib_u "*)
3761289166Speter	  func_arith $extracted_serial + 1
3762289166Speter	  extracted_serial=$func_arith_result
3763289166Speter	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
3764289166Speter	*) break ;;
3765289166Speter	esac
3766289166Speter      done
3767289166Speter      extracted_archives="$extracted_archives $my_xlib_u"
3768289166Speter      my_xdir="$my_gentop/$my_xlib_u"
3769289166Speter
3770289166Speter      func_mkdir_p "$my_xdir"
3771289166Speter
3772289166Speter      case $host in
3773289166Speter      *-darwin*)
3774289166Speter	func_verbose "Extracting $my_xabs"
3775289166Speter	# Do not bother doing anything if just a dry run
3776289166Speter	$opt_dry_run || {
3777289166Speter	  darwin_orig_dir=`pwd`
3778289166Speter	  cd $my_xdir || exit $?
3779289166Speter	  darwin_archive=$my_xabs
3780289166Speter	  darwin_curdir=`pwd`
3781289166Speter	  darwin_base_archive=`basename "$darwin_archive"`
3782289166Speter	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
3783289166Speter	  if test -n "$darwin_arches"; then
3784289166Speter	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
3785289166Speter	    darwin_arch=
3786289166Speter	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
3787289166Speter	    for darwin_arch in  $darwin_arches ; do
3788289166Speter	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3789289166Speter	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
3790289166Speter	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3791289166Speter	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
3792289166Speter	      cd "$darwin_curdir"
3793289166Speter	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
3794289166Speter	    done # $darwin_arches
3795289166Speter            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
3796289166Speter	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
3797289166Speter	    darwin_file=
3798289166Speter	    darwin_files=
3799289166Speter	    for darwin_file in $darwin_filelist; do
3800289166Speter	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
3801289166Speter	      $LIPO -create -output "$darwin_file" $darwin_files
3802289166Speter	    done # $darwin_filelist
3803289166Speter	    $RM -rf unfat-$$
3804289166Speter	    cd "$darwin_orig_dir"
3805289166Speter	  else
3806289166Speter	    cd $darwin_orig_dir
3807289166Speter	    func_extract_an_archive "$my_xdir" "$my_xabs"
3808289166Speter	  fi # $darwin_arches
3809289166Speter	} # !$opt_dry_run
3810289166Speter	;;
3811289166Speter      *)
3812289166Speter        func_extract_an_archive "$my_xdir" "$my_xabs"
3813289166Speter	;;
3814289166Speter      esac
3815289166Speter      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
3816289166Speter    done
3817289166Speter
3818289166Speter    func_extract_archives_result="$my_oldobjs"
3819289166Speter}
3820289166Speter
3821289166Speter
3822289166Speter# func_emit_wrapper [arg=no]
3823289166Speter#
3824289166Speter# Emit a libtool wrapper script on stdout.
3825289166Speter# Don't directly open a file because we may want to
3826289166Speter# incorporate the script contents within a cygwin/mingw
3827289166Speter# wrapper executable.  Must ONLY be called from within
3828289166Speter# func_mode_link because it depends on a number of variables
3829289166Speter# set therein.
3830289166Speter#
3831289166Speter# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
3832289166Speter# variable will take.  If 'yes', then the emitted script
3833289166Speter# will assume that the directory in which it is stored is
3834289166Speter# the $objdir directory.  This is a cygwin/mingw-specific
3835289166Speter# behavior.
3836289166Speterfunc_emit_wrapper ()
3837289166Speter{
3838289166Speter	func_emit_wrapper_arg1=${1-no}
3839289166Speter
3840289166Speter	$ECHO "\
3841289166Speter#! $SHELL
3842289166Speter
3843289166Speter# $output - temporary wrapper script for $objdir/$outputname
3844289166Speter# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
3845289166Speter#
3846289166Speter# The $output program cannot be directly executed until all the libtool
3847289166Speter# libraries that it depends on are installed.
3848289166Speter#
3849289166Speter# This wrapper script should never be moved out of the build directory.
3850289166Speter# If it is, it will not operate correctly.
3851289166Speter
3852289166Speter# Sed substitution that helps us do robust quoting.  It backslashifies
3853289166Speter# metacharacters that are still active within double-quoted strings.
3854289166Spetersed_quote_subst='$sed_quote_subst'
3855289166Speter
3856289166Speter# Be Bourne compatible
3857289166Speterif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
3858289166Speter  emulate sh
3859289166Speter  NULLCMD=:
3860289166Speter  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
3861289166Speter  # is contrary to our usage.  Disable this feature.
3862289166Speter  alias -g '\${1+\"\$@\"}'='\"\$@\"'
3863289166Speter  setopt NO_GLOB_SUBST
3864289166Speterelse
3865289166Speter  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
3866289166Speterfi
3867289166SpeterBIN_SH=xpg4; export BIN_SH # for Tru64
3868289166SpeterDUALCASE=1; export DUALCASE # for MKS sh
3869289166Speter
3870289166Speter# The HP-UX ksh and POSIX shell print the target directory to stdout
3871289166Speter# if CDPATH is set.
3872289166Speter(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
3873289166Speter
3874289166Speterrelink_command=\"$relink_command\"
3875289166Speter
3876289166Speter# This environment variable determines our operation mode.
3877289166Speterif test \"\$libtool_install_magic\" = \"$magic\"; then
3878289166Speter  # install mode needs the following variables:
3879289166Speter  generated_by_libtool_version='$macro_version'
3880289166Speter  notinst_deplibs='$notinst_deplibs'
3881289166Speterelse
3882289166Speter  # When we are sourced in execute mode, \$file and \$ECHO are already set.
3883289166Speter  if test \"\$libtool_execute_magic\" != \"$magic\"; then
3884289166Speter    file=\"\$0\""
3885289166Speter
3886289166Speter    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
3887289166Speter    $ECHO "\
3888289166Speter
3889289166Speter# A function that is used when there is no print builtin or printf.
3890289166Speterfunc_fallback_echo ()
3891289166Speter{
3892289166Speter  eval 'cat <<_LTECHO_EOF
3893289166Speter\$1
3894289166Speter_LTECHO_EOF'
3895289166Speter}
3896289166Speter    ECHO=\"$qECHO\"
3897289166Speter  fi
3898289166Speter
3899289166Speter# Very basic option parsing. These options are (a) specific to
3900289166Speter# the libtool wrapper, (b) are identical between the wrapper
3901289166Speter# /script/ and the wrapper /executable/ which is used only on
3902289166Speter# windows platforms, and (c) all begin with the string "--lt-"
3903289166Speter# (application programs are unlikely to have options which match
3904289166Speter# this pattern).
3905289166Speter#
3906289166Speter# There are only two supported options: --lt-debug and
3907289166Speter# --lt-dump-script. There is, deliberately, no --lt-help.
3908289166Speter#
3909289166Speter# The first argument to this parsing function should be the
3910289166Speter# script's $0 value, followed by "$@".
3911289166Speterlt_option_debug=
3912289166Speterfunc_parse_lt_options ()
3913289166Speter{
3914289166Speter  lt_script_arg0=\$0
3915289166Speter  shift
3916289166Speter  for lt_opt
3917289166Speter  do
3918289166Speter    case \"\$lt_opt\" in
3919289166Speter    --lt-debug) lt_option_debug=1 ;;
3920289166Speter    --lt-dump-script)
3921289166Speter        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
3922289166Speter        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
3923289166Speter        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
3924289166Speter        cat \"\$lt_dump_D/\$lt_dump_F\"
3925289166Speter        exit 0
3926289166Speter      ;;
3927289166Speter    --lt-*)
3928289166Speter        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
3929289166Speter        exit 1
3930289166Speter      ;;
3931289166Speter    esac
3932289166Speter  done
3933289166Speter
3934289166Speter  # Print the debug banner immediately:
3935289166Speter  if test -n \"\$lt_option_debug\"; then
3936289166Speter    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
3937289166Speter  fi
3938289166Speter}
3939289166Speter
3940289166Speter# Used when --lt-debug. Prints its arguments to stdout
3941289166Speter# (redirection is the responsibility of the caller)
3942289166Speterfunc_lt_dump_args ()
3943289166Speter{
3944289166Speter  lt_dump_args_N=1;
3945289166Speter  for lt_arg
3946289166Speter  do
3947289166Speter    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
3948289166Speter    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
3949289166Speter  done
3950289166Speter}
3951289166Speter
3952289166Speter# Core function for launching the target application
3953289166Speterfunc_exec_program_core ()
3954289166Speter{
3955289166Speter"
3956289166Speter  case $host in
3957289166Speter  # Backslashes separate directories on plain windows
3958289166Speter  *-*-mingw | *-*-os2* | *-cegcc*)
3959289166Speter    $ECHO "\
3960289166Speter      if test -n \"\$lt_option_debug\"; then
3961289166Speter        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
3962289166Speter        func_lt_dump_args \${1+\"\$@\"} 1>&2
3963289166Speter      fi
3964289166Speter      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
3965289166Speter"
3966289166Speter    ;;
3967289166Speter
3968289166Speter  *)
3969289166Speter    $ECHO "\
3970289166Speter      if test -n \"\$lt_option_debug\"; then
3971289166Speter        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
3972289166Speter        func_lt_dump_args \${1+\"\$@\"} 1>&2
3973289166Speter      fi
3974289166Speter      exec \"\$progdir/\$program\" \${1+\"\$@\"}
3975289166Speter"
3976289166Speter    ;;
3977289166Speter  esac
3978289166Speter  $ECHO "\
3979289166Speter      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
3980289166Speter      exit 1
3981289166Speter}
3982289166Speter
3983289166Speter# A function to encapsulate launching the target application
3984289166Speter# Strips options in the --lt-* namespace from \$@ and
3985289166Speter# launches target application with the remaining arguments.
3986289166Speterfunc_exec_program ()
3987289166Speter{
3988289166Speter  case \" \$* \" in
3989289166Speter  *\\ --lt-*)
3990289166Speter    for lt_wr_arg
3991289166Speter    do
3992289166Speter      case \$lt_wr_arg in
3993289166Speter      --lt-*) ;;
3994289166Speter      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
3995289166Speter      esac
3996289166Speter      shift
3997289166Speter    done ;;
3998289166Speter  esac
3999289166Speter  func_exec_program_core \${1+\"\$@\"}
4000289166Speter}
4001289166Speter
4002289166Speter  # Parse options
4003289166Speter  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
4004289166Speter
4005289166Speter  # Find the directory that this script lives in.
4006289166Speter  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
4007289166Speter  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
4008289166Speter
4009289166Speter  # Follow symbolic links until we get to the real thisdir.
4010289166Speter  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
4011289166Speter  while test -n \"\$file\"; do
4012289166Speter    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
4013289166Speter
4014289166Speter    # If there was a directory component, then change thisdir.
4015289166Speter    if test \"x\$destdir\" != \"x\$file\"; then
4016289166Speter      case \"\$destdir\" in
4017289166Speter      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
4018289166Speter      *) thisdir=\"\$thisdir/\$destdir\" ;;
4019289166Speter      esac
4020289166Speter    fi
4021289166Speter
4022289166Speter    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
4023289166Speter    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
4024289166Speter  done
4025289166Speter
4026289166Speter  # Usually 'no', except on cygwin/mingw when embedded into
4027289166Speter  # the cwrapper.
4028289166Speter  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
4029289166Speter  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
4030289166Speter    # special case for '.'
4031289166Speter    if test \"\$thisdir\" = \".\"; then
4032289166Speter      thisdir=\`pwd\`
4033289166Speter    fi
4034289166Speter    # remove .libs from thisdir
4035289166Speter    case \"\$thisdir\" in
4036289166Speter    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
4037289166Speter    $objdir )   thisdir=. ;;
4038289166Speter    esac
4039289166Speter  fi
4040289166Speter
4041289166Speter  # Try to get the absolute directory name.
4042289166Speter  absdir=\`cd \"\$thisdir\" && pwd\`
4043289166Speter  test -n \"\$absdir\" && thisdir=\"\$absdir\"
4044289166Speter"
4045289166Speter
4046289166Speter	if test "$fast_install" = yes; then
4047289166Speter	  $ECHO "\
4048289166Speter  program=lt-'$outputname'$exeext
4049289166Speter  progdir=\"\$thisdir/$objdir\"
4050289166Speter
4051289166Speter  if test ! -f \"\$progdir/\$program\" ||
4052289166Speter     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
4053289166Speter       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
4054289166Speter
4055289166Speter    file=\"\$\$-\$program\"
4056289166Speter
4057289166Speter    if test ! -d \"\$progdir\"; then
4058289166Speter      $MKDIR \"\$progdir\"
4059289166Speter    else
4060289166Speter      $RM \"\$progdir/\$file\"
4061289166Speter    fi"
4062289166Speter
4063289166Speter	  $ECHO "\
4064289166Speter
4065289166Speter    # relink executable if necessary
4066289166Speter    if test -n \"\$relink_command\"; then
4067289166Speter      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
4068289166Speter      else
4069289166Speter	$ECHO \"\$relink_command_output\" >&2
4070289166Speter	$RM \"\$progdir/\$file\"
4071289166Speter	exit 1
4072289166Speter      fi
4073289166Speter    fi
4074289166Speter
4075289166Speter    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
4076289166Speter    { $RM \"\$progdir/\$program\";
4077289166Speter      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
4078289166Speter    $RM \"\$progdir/\$file\"
4079289166Speter  fi"
4080289166Speter	else
4081289166Speter	  $ECHO "\
4082289166Speter  program='$outputname'
4083289166Speter  progdir=\"\$thisdir/$objdir\"
4084289166Speter"
4085289166Speter	fi
4086289166Speter
4087289166Speter	$ECHO "\
4088289166Speter
4089289166Speter  if test -f \"\$progdir/\$program\"; then"
4090289166Speter
4091289166Speter	# fixup the dll searchpath if we need to.
4092289166Speter	#
4093289166Speter	# Fix the DLL searchpath if we need to.  Do this before prepending
4094289166Speter	# to shlibpath, because on Windows, both are PATH and uninstalled
4095289166Speter	# libraries must come first.
4096289166Speter	if test -n "$dllsearchpath"; then
4097289166Speter	  $ECHO "\
4098289166Speter    # Add the dll search path components to the executable PATH
4099289166Speter    PATH=$dllsearchpath:\$PATH
4100289166Speter"
4101289166Speter	fi
4102289166Speter
4103289166Speter	# Export our shlibpath_var if we have one.
4104289166Speter	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4105289166Speter	  $ECHO "\
4106289166Speter    # Add our own library path to $shlibpath_var
4107289166Speter    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
4108289166Speter
4109289166Speter    # Some systems cannot cope with colon-terminated $shlibpath_var
4110289166Speter    # The second colon is a workaround for a bug in BeOS R4 sed
4111289166Speter    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
4112289166Speter
4113289166Speter    export $shlibpath_var
4114289166Speter"
4115289166Speter	fi
4116289166Speter
4117289166Speter	$ECHO "\
4118289166Speter    if test \"\$libtool_execute_magic\" != \"$magic\"; then
4119289166Speter      # Run the actual program with our arguments.
4120289166Speter      func_exec_program \${1+\"\$@\"}
4121289166Speter    fi
4122289166Speter  else
4123289166Speter    # The program doesn't exist.
4124289166Speter    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
4125289166Speter    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
4126289166Speter    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
4127289166Speter    exit 1
4128289166Speter  fi
4129289166Speterfi\
4130289166Speter"
4131289166Speter}
4132289166Speter
4133289166Speter
4134289166Speter# func_emit_cwrapperexe_src
4135289166Speter# emit the source code for a wrapper executable on stdout
4136289166Speter# Must ONLY be called from within func_mode_link because
4137289166Speter# it depends on a number of variable set therein.
4138289166Speterfunc_emit_cwrapperexe_src ()
4139289166Speter{
4140289166Speter	cat <<EOF
4141289166Speter
4142289166Speter/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
4143289166Speter   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
4144289166Speter
4145289166Speter   The $output program cannot be directly executed until all the libtool
4146289166Speter   libraries that it depends on are installed.
4147289166Speter
4148289166Speter   This wrapper executable should never be moved out of the build directory.
4149289166Speter   If it is, it will not operate correctly.
4150289166Speter*/
4151289166SpeterEOF
4152289166Speter	    cat <<"EOF"
4153289166Speter#ifdef _MSC_VER
4154289166Speter# define _CRT_SECURE_NO_DEPRECATE 1
4155289166Speter#endif
4156289166Speter#include <stdio.h>
4157289166Speter#include <stdlib.h>
4158289166Speter#ifdef _MSC_VER
4159289166Speter# include <direct.h>
4160289166Speter# include <process.h>
4161289166Speter# include <io.h>
4162289166Speter#else
4163289166Speter# include <unistd.h>
4164289166Speter# include <stdint.h>
4165289166Speter# ifdef __CYGWIN__
4166289166Speter#  include <io.h>
4167289166Speter# endif
4168289166Speter#endif
4169289166Speter#include <malloc.h>
4170289166Speter#include <stdarg.h>
4171289166Speter#include <assert.h>
4172289166Speter#include <string.h>
4173289166Speter#include <ctype.h>
4174289166Speter#include <errno.h>
4175289166Speter#include <fcntl.h>
4176289166Speter#include <sys/stat.h>
4177289166Speter
4178289166Speter/* declarations of non-ANSI functions */
4179289166Speter#if defined(__MINGW32__)
4180289166Speter# ifdef __STRICT_ANSI__
4181289166Speterint _putenv (const char *);
4182289166Speter# endif
4183289166Speter#elif defined(__CYGWIN__)
4184289166Speter# ifdef __STRICT_ANSI__
4185289166Speterchar *realpath (const char *, char *);
4186289166Speterint putenv (char *);
4187289166Speterint setenv (const char *, const char *, int);
4188289166Speter# endif
4189289166Speter/* #elif defined (other platforms) ... */
4190289166Speter#endif
4191289166Speter
4192289166Speter/* portability defines, excluding path handling macros */
4193289166Speter#if defined(_MSC_VER)
4194289166Speter# define setmode _setmode
4195289166Speter# define stat    _stat
4196289166Speter# define chmod   _chmod
4197289166Speter# define getcwd  _getcwd
4198289166Speter# define putenv  _putenv
4199289166Speter# define S_IXUSR _S_IEXEC
4200289166Speter# ifndef _INTPTR_T_DEFINED
4201289166Speter#  define _INTPTR_T_DEFINED
4202289166Speter#  define intptr_t int
4203289166Speter# endif
4204289166Speter#elif defined(__MINGW32__)
4205289166Speter# define setmode _setmode
4206289166Speter# define stat    _stat
4207289166Speter# define chmod   _chmod
4208289166Speter# define getcwd  _getcwd
4209289166Speter# define putenv  _putenv
4210289166Speter#elif defined(__CYGWIN__)
4211289166Speter# define HAVE_SETENV
4212289166Speter# define FOPEN_WB "wb"
4213289166Speter/* #elif defined (other platforms) ... */
4214289166Speter#endif
4215289166Speter
4216289166Speter#if defined(PATH_MAX)
4217289166Speter# define LT_PATHMAX PATH_MAX
4218289166Speter#elif defined(MAXPATHLEN)
4219289166Speter# define LT_PATHMAX MAXPATHLEN
4220289166Speter#else
4221289166Speter# define LT_PATHMAX 1024
4222289166Speter#endif
4223289166Speter
4224289166Speter#ifndef S_IXOTH
4225289166Speter# define S_IXOTH 0
4226289166Speter#endif
4227289166Speter#ifndef S_IXGRP
4228289166Speter# define S_IXGRP 0
4229289166Speter#endif
4230289166Speter
4231289166Speter/* path handling portability macros */
4232289166Speter#ifndef DIR_SEPARATOR
4233289166Speter# define DIR_SEPARATOR '/'
4234289166Speter# define PATH_SEPARATOR ':'
4235289166Speter#endif
4236289166Speter
4237289166Speter#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
4238289166Speter  defined (__OS2__)
4239289166Speter# define HAVE_DOS_BASED_FILE_SYSTEM
4240289166Speter# define FOPEN_WB "wb"
4241289166Speter# ifndef DIR_SEPARATOR_2
4242289166Speter#  define DIR_SEPARATOR_2 '\\'
4243289166Speter# endif
4244289166Speter# ifndef PATH_SEPARATOR_2
4245289166Speter#  define PATH_SEPARATOR_2 ';'
4246289166Speter# endif
4247289166Speter#endif
4248289166Speter
4249289166Speter#ifndef DIR_SEPARATOR_2
4250289166Speter# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
4251289166Speter#else /* DIR_SEPARATOR_2 */
4252289166Speter# define IS_DIR_SEPARATOR(ch) \
4253289166Speter	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
4254289166Speter#endif /* DIR_SEPARATOR_2 */
4255289166Speter
4256289166Speter#ifndef PATH_SEPARATOR_2
4257289166Speter# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
4258289166Speter#else /* PATH_SEPARATOR_2 */
4259289166Speter# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
4260289166Speter#endif /* PATH_SEPARATOR_2 */
4261289166Speter
4262289166Speter#ifndef FOPEN_WB
4263289166Speter# define FOPEN_WB "w"
4264289166Speter#endif
4265289166Speter#ifndef _O_BINARY
4266289166Speter# define _O_BINARY 0
4267289166Speter#endif
4268289166Speter
4269289166Speter#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
4270289166Speter#define XFREE(stale) do { \
4271289166Speter  if (stale) { free ((void *) stale); stale = 0; } \
4272289166Speter} while (0)
4273289166Speter
4274289166Speter#if defined(LT_DEBUGWRAPPER)
4275289166Speterstatic int lt_debug = 1;
4276289166Speter#else
4277289166Speterstatic int lt_debug = 0;
4278289166Speter#endif
4279289166Speter
4280289166Speterconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
4281289166Speter
4282289166Spetervoid *xmalloc (size_t num);
4283289166Speterchar *xstrdup (const char *string);
4284289166Speterconst char *base_name (const char *name);
4285289166Speterchar *find_executable (const char *wrapper);
4286289166Speterchar *chase_symlinks (const char *pathspec);
4287289166Speterint make_executable (const char *path);
4288289166Speterint check_executable (const char *path);
4289289166Speterchar *strendzap (char *str, const char *pat);
4290289166Spetervoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
4291289166Spetervoid lt_fatal (const char *file, int line, const char *message, ...);
4292289166Speterstatic const char *nonnull (const char *s);
4293289166Speterstatic const char *nonempty (const char *s);
4294289166Spetervoid lt_setenv (const char *name, const char *value);
4295289166Speterchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
4296289166Spetervoid lt_update_exe_path (const char *name, const char *value);
4297289166Spetervoid lt_update_lib_path (const char *name, const char *value);
4298289166Speterchar **prepare_spawn (char **argv);
4299289166Spetervoid lt_dump_script (FILE *f);
4300289166SpeterEOF
4301289166Speter
4302289166Speter	    cat <<EOF
4303289166Spetervolatile const char * MAGIC_EXE = "$magic_exe";
4304289166Speterconst char * LIB_PATH_VARNAME = "$shlibpath_var";
4305289166SpeterEOF
4306289166Speter
4307289166Speter	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4308289166Speter              func_to_host_path "$temp_rpath"
4309289166Speter	      cat <<EOF
4310289166Speterconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
4311289166SpeterEOF
4312289166Speter	    else
4313289166Speter	      cat <<"EOF"
4314289166Speterconst char * LIB_PATH_VALUE   = "";
4315289166SpeterEOF
4316289166Speter	    fi
4317289166Speter
4318289166Speter	    if test -n "$dllsearchpath"; then
4319289166Speter              func_to_host_path "$dllsearchpath:"
4320289166Speter	      cat <<EOF
4321289166Speterconst char * EXE_PATH_VARNAME = "PATH";
4322289166Speterconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
4323289166SpeterEOF
4324289166Speter	    else
4325289166Speter	      cat <<"EOF"
4326289166Speterconst char * EXE_PATH_VARNAME = "";
4327289166Speterconst char * EXE_PATH_VALUE   = "";
4328289166SpeterEOF
4329289166Speter	    fi
4330289166Speter
4331289166Speter	    if test "$fast_install" = yes; then
4332289166Speter	      cat <<EOF
4333289166Speterconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
4334289166SpeterEOF
4335289166Speter	    else
4336289166Speter	      cat <<EOF
4337289166Speterconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
4338289166SpeterEOF
4339289166Speter	    fi
4340289166Speter
4341289166Speter
4342289166Speter	    cat <<"EOF"
4343289166Speter
4344289166Speter#define LTWRAPPER_OPTION_PREFIX         "--lt-"
4345289166Speter
4346289166Speterstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
4347289166Speterstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
4348289166Speterstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
4349289166Speter
4350289166Speterint
4351289166Spetermain (int argc, char *argv[])
4352289166Speter{
4353289166Speter  char **newargz;
4354289166Speter  int  newargc;
4355289166Speter  char *tmp_pathspec;
4356289166Speter  char *actual_cwrapper_path;
4357289166Speter  char *actual_cwrapper_name;
4358289166Speter  char *target_name;
4359289166Speter  char *lt_argv_zero;
4360289166Speter  intptr_t rval = 127;
4361289166Speter
4362289166Speter  int i;
4363289166Speter
4364289166Speter  program_name = (char *) xstrdup (base_name (argv[0]));
4365289166Speter  newargz = XMALLOC (char *, argc + 1);
4366289166Speter
4367289166Speter  /* very simple arg parsing; don't want to rely on getopt
4368289166Speter   * also, copy all non cwrapper options to newargz, except
4369289166Speter   * argz[0], which is handled differently
4370289166Speter   */
4371289166Speter  newargc=0;
4372289166Speter  for (i = 1; i < argc; i++)
4373289166Speter    {
4374289166Speter      if (strcmp (argv[i], dumpscript_opt) == 0)
4375289166Speter	{
4376289166SpeterEOF
4377289166Speter	    case "$host" in
4378289166Speter	      *mingw* | *cygwin* )
4379289166Speter		# make stdout use "unix" line endings
4380289166Speter		echo "          setmode(1,_O_BINARY);"
4381289166Speter		;;
4382289166Speter	      esac
4383289166Speter
4384289166Speter	    cat <<"EOF"
4385289166Speter	  lt_dump_script (stdout);
4386289166Speter	  return 0;
4387289166Speter	}
4388289166Speter      if (strcmp (argv[i], debug_opt) == 0)
4389289166Speter	{
4390289166Speter          lt_debug = 1;
4391289166Speter          continue;
4392289166Speter	}
4393289166Speter      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
4394289166Speter        {
4395289166Speter          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
4396289166Speter             namespace, but it is not one of the ones we know about and
4397289166Speter             have already dealt with, above (inluding dump-script), then
4398289166Speter             report an error. Otherwise, targets might begin to believe
4399289166Speter             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
4400289166Speter             namespace. The first time any user complains about this, we'll
4401289166Speter             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
4402289166Speter             or a configure.ac-settable value.
4403289166Speter           */
4404289166Speter          lt_fatal (__FILE__, __LINE__,
4405289166Speter		    "unrecognized %s option: '%s'",
4406289166Speter                    ltwrapper_option_prefix, argv[i]);
4407289166Speter        }
4408289166Speter      /* otherwise ... */
4409289166Speter      newargz[++newargc] = xstrdup (argv[i]);
4410289166Speter    }
4411289166Speter  newargz[++newargc] = NULL;
4412289166Speter
4413289166SpeterEOF
4414289166Speter	    cat <<EOF
4415289166Speter  /* The GNU banner must be the first non-error debug message */
4416289166Speter  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
4417289166SpeterEOF
4418289166Speter	    cat <<"EOF"
4419289166Speter  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
4420289166Speter  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
4421289166Speter
4422289166Speter  tmp_pathspec = find_executable (argv[0]);
4423289166Speter  if (tmp_pathspec == NULL)
4424289166Speter    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
4425289166Speter  lt_debugprintf (__FILE__, __LINE__,
4426289166Speter                  "(main) found exe (before symlink chase) at: %s\n",
4427289166Speter		  tmp_pathspec);
4428289166Speter
4429289166Speter  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
4430289166Speter  lt_debugprintf (__FILE__, __LINE__,
4431289166Speter                  "(main) found exe (after symlink chase) at: %s\n",
4432289166Speter		  actual_cwrapper_path);
4433289166Speter  XFREE (tmp_pathspec);
4434289166Speter
4435289166Speter  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
4436289166Speter  strendzap (actual_cwrapper_path, actual_cwrapper_name);
4437289166Speter
4438289166Speter  /* wrapper name transforms */
4439289166Speter  strendzap (actual_cwrapper_name, ".exe");
4440289166Speter  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
4441289166Speter  XFREE (actual_cwrapper_name);
4442289166Speter  actual_cwrapper_name = tmp_pathspec;
4443289166Speter  tmp_pathspec = 0;
4444289166Speter
4445289166Speter  /* target_name transforms -- use actual target program name; might have lt- prefix */
4446289166Speter  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
4447289166Speter  strendzap (target_name, ".exe");
4448289166Speter  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
4449289166Speter  XFREE (target_name);
4450289166Speter  target_name = tmp_pathspec;
4451289166Speter  tmp_pathspec = 0;
4452289166Speter
4453289166Speter  lt_debugprintf (__FILE__, __LINE__,
4454289166Speter		  "(main) libtool target name: %s\n",
4455289166Speter		  target_name);
4456289166SpeterEOF
4457289166Speter
4458289166Speter	    cat <<EOF
4459289166Speter  newargz[0] =
4460289166Speter    XMALLOC (char, (strlen (actual_cwrapper_path) +
4461289166Speter		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
4462289166Speter  strcpy (newargz[0], actual_cwrapper_path);
4463289166Speter  strcat (newargz[0], "$objdir");
4464289166Speter  strcat (newargz[0], "/");
4465289166SpeterEOF
4466289166Speter
4467289166Speter	    cat <<"EOF"
4468289166Speter  /* stop here, and copy so we don't have to do this twice */
4469289166Speter  tmp_pathspec = xstrdup (newargz[0]);
4470289166Speter
4471289166Speter  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
4472289166Speter  strcat (newargz[0], actual_cwrapper_name);
4473289166Speter
4474289166Speter  /* DO want the lt- prefix here if it exists, so use target_name */
4475289166Speter  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
4476289166Speter  XFREE (tmp_pathspec);
4477289166Speter  tmp_pathspec = NULL;
4478289166SpeterEOF
4479289166Speter
4480289166Speter	    case $host_os in
4481289166Speter	      mingw*)
4482289166Speter	    cat <<"EOF"
4483289166Speter  {
4484289166Speter    char* p;
4485289166Speter    while ((p = strchr (newargz[0], '\\')) != NULL)
4486289166Speter      {
4487289166Speter	*p = '/';
4488289166Speter      }
4489289166Speter    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
4490289166Speter      {
4491289166Speter	*p = '/';
4492289166Speter      }
4493289166Speter  }
4494289166SpeterEOF
4495289166Speter	    ;;
4496289166Speter	    esac
4497289166Speter
4498289166Speter	    cat <<"EOF"
4499289166Speter  XFREE (target_name);
4500289166Speter  XFREE (actual_cwrapper_path);
4501289166Speter  XFREE (actual_cwrapper_name);
4502289166Speter
4503289166Speter  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
4504289166Speter  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
4505289166Speter  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
4506289166Speter     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
4507289166Speter     because on Windows, both *_VARNAMEs are PATH but uninstalled
4508289166Speter     libraries must come first. */
4509289166Speter  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
4510289166Speter  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
4511289166Speter
4512289166Speter  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
4513289166Speter		  nonnull (lt_argv_zero));
4514289166Speter  for (i = 0; i < newargc; i++)
4515289166Speter    {
4516289166Speter      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
4517289166Speter		      i, nonnull (newargz[i]));
4518289166Speter    }
4519289166Speter
4520289166SpeterEOF
4521289166Speter
4522289166Speter	    case $host_os in
4523289166Speter	      mingw*)
4524289166Speter		cat <<"EOF"
4525289166Speter  /* execv doesn't actually work on mingw as expected on unix */
4526289166Speter  newargz = prepare_spawn (newargz);
4527289166Speter  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
4528289166Speter  if (rval == -1)
4529289166Speter    {
4530289166Speter      /* failed to start process */
4531289166Speter      lt_debugprintf (__FILE__, __LINE__,
4532289166Speter		      "(main) failed to launch target \"%s\": %s\n",
4533289166Speter		      lt_argv_zero, nonnull (strerror (errno)));
4534289166Speter      return 127;
4535289166Speter    }
4536289166Speter  return rval;
4537289166SpeterEOF
4538289166Speter		;;
4539289166Speter	      *)
4540289166Speter		cat <<"EOF"
4541289166Speter  execv (lt_argv_zero, newargz);
4542289166Speter  return rval; /* =127, but avoids unused variable warning */
4543289166SpeterEOF
4544289166Speter		;;
4545289166Speter	    esac
4546289166Speter
4547289166Speter	    cat <<"EOF"
4548289166Speter}
4549289166Speter
4550289166Spetervoid *
4551289166Speterxmalloc (size_t num)
4552289166Speter{
4553289166Speter  void *p = (void *) malloc (num);
4554289166Speter  if (!p)
4555289166Speter    lt_fatal (__FILE__, __LINE__, "memory exhausted");
4556289166Speter
4557289166Speter  return p;
4558289166Speter}
4559289166Speter
4560289166Speterchar *
4561289166Speterxstrdup (const char *string)
4562289166Speter{
4563289166Speter  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
4564289166Speter			  string) : NULL;
4565289166Speter}
4566289166Speter
4567289166Speterconst char *
4568289166Speterbase_name (const char *name)
4569289166Speter{
4570289166Speter  const char *base;
4571289166Speter
4572289166Speter#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4573289166Speter  /* Skip over the disk name in MSDOS pathnames. */
4574289166Speter  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
4575289166Speter    name += 2;
4576289166Speter#endif
4577289166Speter
4578289166Speter  for (base = name; *name; name++)
4579289166Speter    if (IS_DIR_SEPARATOR (*name))
4580289166Speter      base = name + 1;
4581289166Speter  return base;
4582289166Speter}
4583289166Speter
4584289166Speterint
4585289166Spetercheck_executable (const char *path)
4586289166Speter{
4587289166Speter  struct stat st;
4588289166Speter
4589289166Speter  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
4590289166Speter                  nonempty (path));
4591289166Speter  if ((!path) || (!*path))
4592289166Speter    return 0;
4593289166Speter
4594289166Speter  if ((stat (path, &st) >= 0)
4595289166Speter      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
4596289166Speter    return 1;
4597289166Speter  else
4598289166Speter    return 0;
4599289166Speter}
4600289166Speter
4601289166Speterint
4602289166Spetermake_executable (const char *path)
4603289166Speter{
4604289166Speter  int rval = 0;
4605289166Speter  struct stat st;
4606289166Speter
4607289166Speter  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
4608289166Speter                  nonempty (path));
4609289166Speter  if ((!path) || (!*path))
4610289166Speter    return 0;
4611289166Speter
4612289166Speter  if (stat (path, &st) >= 0)
4613289166Speter    {
4614289166Speter      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
4615289166Speter    }
4616289166Speter  return rval;
4617289166Speter}
4618289166Speter
4619289166Speter/* Searches for the full path of the wrapper.  Returns
4620289166Speter   newly allocated full path name if found, NULL otherwise
4621289166Speter   Does not chase symlinks, even on platforms that support them.
4622289166Speter*/
4623289166Speterchar *
4624289166Speterfind_executable (const char *wrapper)
4625289166Speter{
4626289166Speter  int has_slash = 0;
4627289166Speter  const char *p;
4628289166Speter  const char *p_next;
4629289166Speter  /* static buffer for getcwd */
4630289166Speter  char tmp[LT_PATHMAX + 1];
4631289166Speter  int tmp_len;
4632289166Speter  char *concat_name;
4633289166Speter
4634289166Speter  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
4635289166Speter                  nonempty (wrapper));
4636289166Speter
4637289166Speter  if ((wrapper == NULL) || (*wrapper == '\0'))
4638289166Speter    return NULL;
4639289166Speter
4640289166Speter  /* Absolute path? */
4641289166Speter#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4642289166Speter  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
4643289166Speter    {
4644289166Speter      concat_name = xstrdup (wrapper);
4645289166Speter      if (check_executable (concat_name))
4646289166Speter	return concat_name;
4647289166Speter      XFREE (concat_name);
4648289166Speter    }
4649289166Speter  else
4650289166Speter    {
4651289166Speter#endif
4652289166Speter      if (IS_DIR_SEPARATOR (wrapper[0]))
4653289166Speter	{
4654289166Speter	  concat_name = xstrdup (wrapper);
4655289166Speter	  if (check_executable (concat_name))
4656289166Speter	    return concat_name;
4657289166Speter	  XFREE (concat_name);
4658289166Speter	}
4659289166Speter#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4660289166Speter    }
4661289166Speter#endif
4662289166Speter
4663289166Speter  for (p = wrapper; *p; p++)
4664289166Speter    if (*p == '/')
4665289166Speter      {
4666289166Speter	has_slash = 1;
4667289166Speter	break;
4668289166Speter      }
4669289166Speter  if (!has_slash)
4670289166Speter    {
4671289166Speter      /* no slashes; search PATH */
4672289166Speter      const char *path = getenv ("PATH");
4673289166Speter      if (path != NULL)
4674289166Speter	{
4675289166Speter	  for (p = path; *p; p = p_next)
4676289166Speter	    {
4677289166Speter	      const char *q;
4678289166Speter	      size_t p_len;
4679289166Speter	      for (q = p; *q; q++)
4680289166Speter		if (IS_PATH_SEPARATOR (*q))
4681289166Speter		  break;
4682289166Speter	      p_len = q - p;
4683289166Speter	      p_next = (*q == '\0' ? q : q + 1);
4684289166Speter	      if (p_len == 0)
4685289166Speter		{
4686289166Speter		  /* empty path: current directory */
4687289166Speter		  if (getcwd (tmp, LT_PATHMAX) == NULL)
4688289166Speter		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
4689289166Speter                              nonnull (strerror (errno)));
4690289166Speter		  tmp_len = strlen (tmp);
4691289166Speter		  concat_name =
4692289166Speter		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4693289166Speter		  memcpy (concat_name, tmp, tmp_len);
4694289166Speter		  concat_name[tmp_len] = '/';
4695289166Speter		  strcpy (concat_name + tmp_len + 1, wrapper);
4696289166Speter		}
4697289166Speter	      else
4698289166Speter		{
4699289166Speter		  concat_name =
4700289166Speter		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
4701289166Speter		  memcpy (concat_name, p, p_len);
4702289166Speter		  concat_name[p_len] = '/';
4703289166Speter		  strcpy (concat_name + p_len + 1, wrapper);
4704289166Speter		}
4705289166Speter	      if (check_executable (concat_name))
4706289166Speter		return concat_name;
4707289166Speter	      XFREE (concat_name);
4708289166Speter	    }
4709289166Speter	}
4710289166Speter      /* not found in PATH; assume curdir */
4711289166Speter    }
4712289166Speter  /* Relative path | not found in path: prepend cwd */
4713289166Speter  if (getcwd (tmp, LT_PATHMAX) == NULL)
4714289166Speter    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
4715289166Speter              nonnull (strerror (errno)));
4716289166Speter  tmp_len = strlen (tmp);
4717289166Speter  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4718289166Speter  memcpy (concat_name, tmp, tmp_len);
4719289166Speter  concat_name[tmp_len] = '/';
4720289166Speter  strcpy (concat_name + tmp_len + 1, wrapper);
4721289166Speter
4722289166Speter  if (check_executable (concat_name))
4723289166Speter    return concat_name;
4724289166Speter  XFREE (concat_name);
4725289166Speter  return NULL;
4726289166Speter}
4727289166Speter
4728289166Speterchar *
4729289166Speterchase_symlinks (const char *pathspec)
4730289166Speter{
4731289166Speter#ifndef S_ISLNK
4732289166Speter  return xstrdup (pathspec);
4733289166Speter#else
4734289166Speter  char buf[LT_PATHMAX];
4735289166Speter  struct stat s;
4736289166Speter  char *tmp_pathspec = xstrdup (pathspec);
4737289166Speter  char *p;
4738289166Speter  int has_symlinks = 0;
4739289166Speter  while (strlen (tmp_pathspec) && !has_symlinks)
4740289166Speter    {
4741289166Speter      lt_debugprintf (__FILE__, __LINE__,
4742289166Speter		      "checking path component for symlinks: %s\n",
4743289166Speter		      tmp_pathspec);
4744289166Speter      if (lstat (tmp_pathspec, &s) == 0)
4745289166Speter	{
4746289166Speter	  if (S_ISLNK (s.st_mode) != 0)
4747289166Speter	    {
4748289166Speter	      has_symlinks = 1;
4749289166Speter	      break;
4750289166Speter	    }
4751289166Speter
4752289166Speter	  /* search backwards for last DIR_SEPARATOR */
4753289166Speter	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
4754289166Speter	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4755289166Speter	    p--;
4756289166Speter	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4757289166Speter	    {
4758289166Speter	      /* no more DIR_SEPARATORS left */
4759289166Speter	      break;
4760289166Speter	    }
4761289166Speter	  *p = '\0';
4762289166Speter	}
4763289166Speter      else
4764289166Speter	{
4765289166Speter	  lt_fatal (__FILE__, __LINE__,
4766289166Speter		    "error accessing file \"%s\": %s",
4767289166Speter		    tmp_pathspec, nonnull (strerror (errno)));
4768289166Speter	}
4769289166Speter    }
4770289166Speter  XFREE (tmp_pathspec);
4771289166Speter
4772289166Speter  if (!has_symlinks)
4773289166Speter    {
4774289166Speter      return xstrdup (pathspec);
4775289166Speter    }
4776289166Speter
4777289166Speter  tmp_pathspec = realpath (pathspec, buf);
4778289166Speter  if (tmp_pathspec == 0)
4779289166Speter    {
4780289166Speter      lt_fatal (__FILE__, __LINE__,
4781289166Speter		"could not follow symlinks for %s", pathspec);
4782289166Speter    }
4783289166Speter  return xstrdup (tmp_pathspec);
4784289166Speter#endif
4785289166Speter}
4786289166Speter
4787289166Speterchar *
4788289166Speterstrendzap (char *str, const char *pat)
4789289166Speter{
4790289166Speter  size_t len, patlen;
4791289166Speter
4792289166Speter  assert (str != NULL);
4793289166Speter  assert (pat != NULL);
4794289166Speter
4795289166Speter  len = strlen (str);
4796289166Speter  patlen = strlen (pat);
4797289166Speter
4798289166Speter  if (patlen <= len)
4799289166Speter    {
4800289166Speter      str += len - patlen;
4801289166Speter      if (strcmp (str, pat) == 0)
4802289166Speter	*str = '\0';
4803289166Speter    }
4804289166Speter  return str;
4805289166Speter}
4806289166Speter
4807289166Spetervoid
4808289166Speterlt_debugprintf (const char *file, int line, const char *fmt, ...)
4809289166Speter{
4810289166Speter  va_list args;
4811289166Speter  if (lt_debug)
4812289166Speter    {
4813289166Speter      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
4814289166Speter      va_start (args, fmt);
4815289166Speter      (void) vfprintf (stderr, fmt, args);
4816289166Speter      va_end (args);
4817289166Speter    }
4818289166Speter}
4819289166Speter
4820289166Speterstatic void
4821289166Speterlt_error_core (int exit_status, const char *file,
4822289166Speter	       int line, const char *mode,
4823289166Speter	       const char *message, va_list ap)
4824289166Speter{
4825289166Speter  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
4826289166Speter  vfprintf (stderr, message, ap);
4827289166Speter  fprintf (stderr, ".\n");
4828289166Speter
4829289166Speter  if (exit_status >= 0)
4830289166Speter    exit (exit_status);
4831289166Speter}
4832289166Speter
4833289166Spetervoid
4834289166Speterlt_fatal (const char *file, int line, const char *message, ...)
4835289166Speter{
4836289166Speter  va_list ap;
4837289166Speter  va_start (ap, message);
4838289166Speter  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
4839289166Speter  va_end (ap);
4840289166Speter}
4841289166Speter
4842289166Speterstatic const char *
4843289166Speternonnull (const char *s)
4844289166Speter{
4845289166Speter  return s ? s : "(null)";
4846289166Speter}
4847289166Speter
4848289166Speterstatic const char *
4849289166Speternonempty (const char *s)
4850289166Speter{
4851289166Speter  return (s && !*s) ? "(empty)" : nonnull (s);
4852289166Speter}
4853289166Speter
4854289166Spetervoid
4855289166Speterlt_setenv (const char *name, const char *value)
4856289166Speter{
4857289166Speter  lt_debugprintf (__FILE__, __LINE__,
4858289166Speter		  "(lt_setenv) setting '%s' to '%s'\n",
4859289166Speter                  nonnull (name), nonnull (value));
4860289166Speter  {
4861289166Speter#ifdef HAVE_SETENV
4862289166Speter    /* always make a copy, for consistency with !HAVE_SETENV */
4863289166Speter    char *str = xstrdup (value);
4864289166Speter    setenv (name, str, 1);
4865289166Speter#else
4866289166Speter    int len = strlen (name) + 1 + strlen (value) + 1;
4867289166Speter    char *str = XMALLOC (char, len);
4868289166Speter    sprintf (str, "%s=%s", name, value);
4869289166Speter    if (putenv (str) != EXIT_SUCCESS)
4870289166Speter      {
4871289166Speter        XFREE (str);
4872289166Speter      }
4873289166Speter#endif
4874289166Speter  }
4875289166Speter}
4876289166Speter
4877289166Speterchar *
4878289166Speterlt_extend_str (const char *orig_value, const char *add, int to_end)
4879289166Speter{
4880289166Speter  char *new_value;
4881289166Speter  if (orig_value && *orig_value)
4882289166Speter    {
4883289166Speter      int orig_value_len = strlen (orig_value);
4884289166Speter      int add_len = strlen (add);
4885289166Speter      new_value = XMALLOC (char, add_len + orig_value_len + 1);
4886289166Speter      if (to_end)
4887289166Speter        {
4888289166Speter          strcpy (new_value, orig_value);
4889289166Speter          strcpy (new_value + orig_value_len, add);
4890289166Speter        }
4891289166Speter      else
4892289166Speter        {
4893289166Speter          strcpy (new_value, add);
4894289166Speter          strcpy (new_value + add_len, orig_value);
4895289166Speter        }
4896289166Speter    }
4897289166Speter  else
4898289166Speter    {
4899289166Speter      new_value = xstrdup (add);
4900289166Speter    }
4901289166Speter  return new_value;
4902289166Speter}
4903289166Speter
4904289166Spetervoid
4905289166Speterlt_update_exe_path (const char *name, const char *value)
4906289166Speter{
4907289166Speter  lt_debugprintf (__FILE__, __LINE__,
4908289166Speter		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
4909289166Speter                  nonnull (name), nonnull (value));
4910289166Speter
4911289166Speter  if (name && *name && value && *value)
4912289166Speter    {
4913289166Speter      char *new_value = lt_extend_str (getenv (name), value, 0);
4914289166Speter      /* some systems can't cope with a ':'-terminated path #' */
4915289166Speter      int len = strlen (new_value);
4916289166Speter      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
4917289166Speter        {
4918289166Speter          new_value[len-1] = '\0';
4919289166Speter        }
4920289166Speter      lt_setenv (name, new_value);
4921289166Speter      XFREE (new_value);
4922289166Speter    }
4923289166Speter}
4924289166Speter
4925289166Spetervoid
4926289166Speterlt_update_lib_path (const char *name, const char *value)
4927289166Speter{
4928289166Speter  lt_debugprintf (__FILE__, __LINE__,
4929289166Speter		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
4930289166Speter                  nonnull (name), nonnull (value));
4931289166Speter
4932289166Speter  if (name && *name && value && *value)
4933289166Speter    {
4934289166Speter      char *new_value = lt_extend_str (getenv (name), value, 0);
4935289166Speter      lt_setenv (name, new_value);
4936289166Speter      XFREE (new_value);
4937289166Speter    }
4938289166Speter}
4939289166Speter
4940289166SpeterEOF
4941289166Speter	    case $host_os in
4942289166Speter	      mingw*)
4943289166Speter		cat <<"EOF"
4944289166Speter
4945289166Speter/* Prepares an argument vector before calling spawn().
4946289166Speter   Note that spawn() does not by itself call the command interpreter
4947289166Speter     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
4948289166Speter      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
4949289166Speter         GetVersionEx(&v);
4950289166Speter         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
4951289166Speter      }) ? "cmd.exe" : "command.com").
4952289166Speter   Instead it simply concatenates the arguments, separated by ' ', and calls
4953289166Speter   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
4954289166Speter   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
4955289166Speter   special way:
4956289166Speter   - Space and tab are interpreted as delimiters. They are not treated as
4957289166Speter     delimiters if they are surrounded by double quotes: "...".
4958289166Speter   - Unescaped double quotes are removed from the input. Their only effect is
4959289166Speter     that within double quotes, space and tab are treated like normal
4960289166Speter     characters.
4961289166Speter   - Backslashes not followed by double quotes are not special.
4962289166Speter   - But 2*n+1 backslashes followed by a double quote become
4963289166Speter     n backslashes followed by a double quote (n >= 0):
4964289166Speter       \" -> "
4965289166Speter       \\\" -> \"
4966289166Speter       \\\\\" -> \\"
4967289166Speter */
4968289166Speter#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"
4969289166Speter#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"
4970289166Speterchar **
4971289166Speterprepare_spawn (char **argv)
4972289166Speter{
4973289166Speter  size_t argc;
4974289166Speter  char **new_argv;
4975289166Speter  size_t i;
4976289166Speter
4977289166Speter  /* Count number of arguments.  */
4978289166Speter  for (argc = 0; argv[argc] != NULL; argc++)
4979289166Speter    ;
4980289166Speter
4981289166Speter  /* Allocate new argument vector.  */
4982289166Speter  new_argv = XMALLOC (char *, argc + 1);
4983289166Speter
4984289166Speter  /* Put quoted arguments into the new argument vector.  */
4985289166Speter  for (i = 0; i < argc; i++)
4986289166Speter    {
4987289166Speter      const char *string = argv[i];
4988289166Speter
4989289166Speter      if (string[0] == '\0')
4990289166Speter	new_argv[i] = xstrdup ("\"\"");
4991289166Speter      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
4992289166Speter	{
4993289166Speter	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
4994289166Speter	  size_t length;
4995289166Speter	  unsigned int backslashes;
4996289166Speter	  const char *s;
4997289166Speter	  char *quoted_string;
4998289166Speter	  char *p;
4999289166Speter
5000289166Speter	  length = 0;
5001289166Speter	  backslashes = 0;
5002289166Speter	  if (quote_around)
5003289166Speter	    length++;
5004289166Speter	  for (s = string; *s != '\0'; s++)
5005289166Speter	    {
5006289166Speter	      char c = *s;
5007289166Speter	      if (c == '"')
5008289166Speter		length += backslashes + 1;
5009289166Speter	      length++;
5010289166Speter	      if (c == '\\')
5011289166Speter		backslashes++;
5012289166Speter	      else
5013289166Speter		backslashes = 0;
5014289166Speter	    }
5015289166Speter	  if (quote_around)
5016289166Speter	    length += backslashes + 1;
5017289166Speter
5018289166Speter	  quoted_string = XMALLOC (char, length + 1);
5019289166Speter
5020289166Speter	  p = quoted_string;
5021289166Speter	  backslashes = 0;
5022289166Speter	  if (quote_around)
5023289166Speter	    *p++ = '"';
5024289166Speter	  for (s = string; *s != '\0'; s++)
5025289166Speter	    {
5026289166Speter	      char c = *s;
5027289166Speter	      if (c == '"')
5028289166Speter		{
5029289166Speter		  unsigned int j;
5030289166Speter		  for (j = backslashes + 1; j > 0; j--)
5031289166Speter		    *p++ = '\\';
5032289166Speter		}
5033289166Speter	      *p++ = c;
5034289166Speter	      if (c == '\\')
5035289166Speter		backslashes++;
5036289166Speter	      else
5037289166Speter		backslashes = 0;
5038289166Speter	    }
5039289166Speter	  if (quote_around)
5040289166Speter	    {
5041289166Speter	      unsigned int j;
5042289166Speter	      for (j = backslashes; j > 0; j--)
5043289166Speter		*p++ = '\\';
5044289166Speter	      *p++ = '"';
5045289166Speter	    }
5046289166Speter	  *p = '\0';
5047289166Speter
5048289166Speter	  new_argv[i] = quoted_string;
5049289166Speter	}
5050289166Speter      else
5051289166Speter	new_argv[i] = (char *) string;
5052289166Speter    }
5053289166Speter  new_argv[argc] = NULL;
5054289166Speter
5055289166Speter  return new_argv;
5056289166Speter}
5057289166SpeterEOF
5058289166Speter		;;
5059289166Speter	    esac
5060289166Speter
5061289166Speter            cat <<"EOF"
5062289166Spetervoid lt_dump_script (FILE* f)
5063289166Speter{
5064289166SpeterEOF
5065289166Speter	    func_emit_wrapper yes |
5066289166Speter	      $SED -n -e '
5067289166Speters/^\(.\{79\}\)\(..*\)/\1\
5068289166Speter\2/
5069289166Speterh
5070289166Speters/\([\\"]\)/\\\1/g
5071289166Speters/$/\\n/
5072289166Speters/\([^\n]*\).*/  fputs ("\1", f);/p
5073289166Speterg
5074289166SpeterD'
5075289166Speter            cat <<"EOF"
5076289166Speter}
5077289166SpeterEOF
5078289166Speter}
5079289166Speter# end: func_emit_cwrapperexe_src
5080289166Speter
5081289166Speter# func_win32_import_lib_p ARG
5082289166Speter# True if ARG is an import lib, as indicated by $file_magic_cmd
5083289166Speterfunc_win32_import_lib_p ()
5084289166Speter{
5085289166Speter    $opt_debug
5086289166Speter    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
5087289166Speter    *import*) : ;;
5088289166Speter    *) false ;;
5089289166Speter    esac
5090289166Speter}
5091289166Speter
5092289166Speter# func_mode_link arg...
5093289166Speterfunc_mode_link ()
5094289166Speter{
5095289166Speter    $opt_debug
5096251883Speter    case $host in
5097289166Speter    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5098251883Speter      # It is impossible to link a dll without this setting, and
5099251883Speter      # we shouldn't force the makefile maintainer to figure out
5100251883Speter      # which system we are compiling for in order to pass an extra
5101251883Speter      # flag for every libtool invocation.
5102251883Speter      # allow_undefined=no
5103251883Speter
5104251883Speter      # FIXME: Unfortunately, there are problems with the above when trying
5105251883Speter      # to make a dll which has undefined symbols, in which case not
5106251883Speter      # even a static library is built.  For now, we need to specify
5107251883Speter      # -no-undefined on the libtool link line when we can be certain
5108251883Speter      # that all symbols are satisfied, otherwise we get a static library.
5109251883Speter      allow_undefined=yes
5110251883Speter      ;;
5111251883Speter    *)
5112251883Speter      allow_undefined=yes
5113251883Speter      ;;
5114251883Speter    esac
5115289166Speter    libtool_args=$nonopt
5116251883Speter    base_compile="$nonopt $@"
5117289166Speter    compile_command=$nonopt
5118289166Speter    finalize_command=$nonopt
5119251883Speter
5120251883Speter    compile_rpath=
5121251883Speter    finalize_rpath=
5122251883Speter    compile_shlibpath=
5123251883Speter    finalize_shlibpath=
5124251883Speter    convenience=
5125251883Speter    old_convenience=
5126251883Speter    deplibs=
5127251883Speter    old_deplibs=
5128251883Speter    compiler_flags=
5129251883Speter    linker_flags=
5130251883Speter    dllsearchpath=
5131251883Speter    lib_search_path=`pwd`
5132251883Speter    inst_prefix_dir=
5133289166Speter    new_inherited_linker_flags=
5134251883Speter
5135251883Speter    avoid_version=no
5136289166Speter    bindir=
5137251883Speter    dlfiles=
5138251883Speter    dlprefiles=
5139251883Speter    dlself=no
5140251883Speter    export_dynamic=no
5141251883Speter    export_symbols=
5142251883Speter    export_symbols_regex=
5143251883Speter    generated=
5144251883Speter    libobjs=
5145251883Speter    ltlibs=
5146251883Speter    module=no
5147251883Speter    no_install=no
5148251883Speter    objs=
5149251883Speter    non_pic_objects=
5150251883Speter    precious_files_regex=
5151251883Speter    prefer_static_libs=no
5152251883Speter    preload=no
5153251883Speter    prev=
5154251883Speter    prevarg=
5155251883Speter    release=
5156251883Speter    rpath=
5157251883Speter    xrpath=
5158251883Speter    perm_rpath=
5159251883Speter    temp_rpath=
5160251883Speter    thread_safe=no
5161251883Speter    vinfo=
5162251883Speter    vinfo_number=no
5163289166Speter    weak_libs=
5164289166Speter    single_module="${wl}-single_module"
5165251883Speter    func_infer_tag $base_compile
5166251883Speter
5167251883Speter    # We need to know -static, to get the right output filenames.
5168251883Speter    for arg
5169251883Speter    do
5170251883Speter      case $arg in
5171289166Speter      -shared)
5172289166Speter	test "$build_libtool_libs" != yes && \
5173289166Speter	  func_fatal_configuration "can not build a shared library"
5174289166Speter	build_old_libs=no
5175289166Speter	break
5176289166Speter	;;
5177251883Speter      -all-static | -static | -static-libtool-libs)
5178251883Speter	case $arg in
5179251883Speter	-all-static)
5180251883Speter	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
5181289166Speter	    func_warning "complete static linking is impossible in this configuration"
5182251883Speter	  fi
5183251883Speter	  if test -n "$link_static_flag"; then
5184251883Speter	    dlopen_self=$dlopen_self_static
5185251883Speter	  fi
5186251883Speter	  prefer_static_libs=yes
5187251883Speter	  ;;
5188251883Speter	-static)
5189251883Speter	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5190251883Speter	    dlopen_self=$dlopen_self_static
5191251883Speter	  fi
5192251883Speter	  prefer_static_libs=built
5193251883Speter	  ;;
5194251883Speter	-static-libtool-libs)
5195251883Speter	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5196251883Speter	    dlopen_self=$dlopen_self_static
5197251883Speter	  fi
5198251883Speter	  prefer_static_libs=yes
5199251883Speter	  ;;
5200251883Speter	esac
5201251883Speter	build_libtool_libs=no
5202251883Speter	build_old_libs=yes
5203251883Speter	break
5204251883Speter	;;
5205251883Speter      esac
5206251883Speter    done
5207251883Speter
5208251883Speter    # See if our shared archives depend on static archives.
5209251883Speter    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
5210251883Speter
5211251883Speter    # Go through the arguments, transforming them on the way.
5212251883Speter    while test "$#" -gt 0; do
5213251883Speter      arg="$1"
5214251883Speter      shift
5215289166Speter      func_quote_for_eval "$arg"
5216289166Speter      qarg=$func_quote_for_eval_unquoted_result
5217289166Speter      func_append libtool_args " $func_quote_for_eval_result"
5218251883Speter
5219251883Speter      # If the previous option needs an argument, assign it.
5220251883Speter      if test -n "$prev"; then
5221251883Speter	case $prev in
5222251883Speter	output)
5223289166Speter	  func_append compile_command " @OUTPUT@"
5224289166Speter	  func_append finalize_command " @OUTPUT@"
5225251883Speter	  ;;
5226251883Speter	esac
5227251883Speter
5228251883Speter	case $prev in
5229289166Speter	bindir)
5230289166Speter	  bindir="$arg"
5231289166Speter	  prev=
5232289166Speter	  continue
5233289166Speter	  ;;
5234251883Speter	dlfiles|dlprefiles)
5235251883Speter	  if test "$preload" = no; then
5236251883Speter	    # Add the symbol object into the linking commands.
5237289166Speter	    func_append compile_command " @SYMFILE@"
5238289166Speter	    func_append finalize_command " @SYMFILE@"
5239251883Speter	    preload=yes
5240251883Speter	  fi
5241251883Speter	  case $arg in
5242251883Speter	  *.la | *.lo) ;;  # We handle these cases below.
5243251883Speter	  force)
5244251883Speter	    if test "$dlself" = no; then
5245251883Speter	      dlself=needless
5246251883Speter	      export_dynamic=yes
5247251883Speter	    fi
5248251883Speter	    prev=
5249251883Speter	    continue
5250251883Speter	    ;;
5251251883Speter	  self)
5252251883Speter	    if test "$prev" = dlprefiles; then
5253251883Speter	      dlself=yes
5254251883Speter	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
5255251883Speter	      dlself=yes
5256251883Speter	    else
5257251883Speter	      dlself=needless
5258251883Speter	      export_dynamic=yes
5259251883Speter	    fi
5260251883Speter	    prev=
5261251883Speter	    continue
5262251883Speter	    ;;
5263251883Speter	  *)
5264251883Speter	    if test "$prev" = dlfiles; then
5265289166Speter	      func_append dlfiles " $arg"
5266251883Speter	    else
5267289166Speter	      func_append dlprefiles " $arg"
5268251883Speter	    fi
5269251883Speter	    prev=
5270251883Speter	    continue
5271251883Speter	    ;;
5272251883Speter	  esac
5273251883Speter	  ;;
5274251883Speter	expsyms)
5275251883Speter	  export_symbols="$arg"
5276289166Speter	  test -f "$arg" \
5277289166Speter	    || func_fatal_error "symbol file \`$arg' does not exist"
5278251883Speter	  prev=
5279251883Speter	  continue
5280251883Speter	  ;;
5281251883Speter	expsyms_regex)
5282251883Speter	  export_symbols_regex="$arg"
5283251883Speter	  prev=
5284251883Speter	  continue
5285251883Speter	  ;;
5286289166Speter	framework)
5287289166Speter	  case $host in
5288289166Speter	    *-*-darwin*)
5289289166Speter	      case "$deplibs " in
5290289166Speter		*" $qarg.ltframework "*) ;;
5291289166Speter		*) func_append deplibs " $qarg.ltframework" # this is fixed later
5292289166Speter		   ;;
5293289166Speter	      esac
5294289166Speter	      ;;
5295289166Speter	  esac
5296251883Speter	  prev=
5297251883Speter	  continue
5298251883Speter	  ;;
5299289166Speter	inst_prefix)
5300289166Speter	  inst_prefix_dir="$arg"
5301251883Speter	  prev=
5302251883Speter	  continue
5303251883Speter	  ;;
5304251883Speter	objectlist)
5305251883Speter	  if test -f "$arg"; then
5306251883Speter	    save_arg=$arg
5307251883Speter	    moreargs=
5308289166Speter	    for fil in `cat "$save_arg"`
5309251883Speter	    do
5310289166Speter#	      func_append moreargs " $fil"
5311251883Speter	      arg=$fil
5312251883Speter	      # A libtool-controlled object.
5313251883Speter
5314251883Speter	      # Check to see that this really is a libtool object.
5315289166Speter	      if func_lalib_unsafe_p "$arg"; then
5316251883Speter		pic_object=
5317251883Speter		non_pic_object=
5318251883Speter
5319251883Speter		# Read the .lo file
5320289166Speter		func_source "$arg"
5321251883Speter
5322289166Speter		if test -z "$pic_object" ||
5323251883Speter		   test -z "$non_pic_object" ||
5324289166Speter		   test "$pic_object" = none &&
5325251883Speter		   test "$non_pic_object" = none; then
5326289166Speter		  func_fatal_error "cannot find name of object for \`$arg'"
5327251883Speter		fi
5328251883Speter
5329251883Speter		# Extract subdirectory from the argument.
5330289166Speter		func_dirname "$arg" "/" ""
5331289166Speter		xdir="$func_dirname_result"
5332251883Speter
5333251883Speter		if test "$pic_object" != none; then
5334251883Speter		  # Prepend the subdirectory the object is found in.
5335251883Speter		  pic_object="$xdir$pic_object"
5336251883Speter
5337251883Speter		  if test "$prev" = dlfiles; then
5338251883Speter		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5339289166Speter		      func_append dlfiles " $pic_object"
5340251883Speter		      prev=
5341251883Speter		      continue
5342251883Speter		    else
5343251883Speter		      # If libtool objects are unsupported, then we need to preload.
5344251883Speter		      prev=dlprefiles
5345251883Speter		    fi
5346251883Speter		  fi
5347251883Speter
5348251883Speter		  # CHECK ME:  I think I busted this.  -Ossama
5349251883Speter		  if test "$prev" = dlprefiles; then
5350251883Speter		    # Preload the old-style object.
5351289166Speter		    func_append dlprefiles " $pic_object"
5352251883Speter		    prev=
5353251883Speter		  fi
5354251883Speter
5355251883Speter		  # A PIC object.
5356289166Speter		  func_append libobjs " $pic_object"
5357251883Speter		  arg="$pic_object"
5358251883Speter		fi
5359251883Speter
5360251883Speter		# Non-PIC object.
5361251883Speter		if test "$non_pic_object" != none; then
5362251883Speter		  # Prepend the subdirectory the object is found in.
5363251883Speter		  non_pic_object="$xdir$non_pic_object"
5364251883Speter
5365251883Speter		  # A standard non-PIC object
5366289166Speter		  func_append non_pic_objects " $non_pic_object"
5367251883Speter		  if test -z "$pic_object" || test "$pic_object" = none ; then
5368251883Speter		    arg="$non_pic_object"
5369251883Speter		  fi
5370251883Speter		else
5371251883Speter		  # If the PIC object exists, use it instead.
5372251883Speter		  # $xdir was prepended to $pic_object above.
5373251883Speter		  non_pic_object="$pic_object"
5374289166Speter		  func_append non_pic_objects " $non_pic_object"
5375251883Speter		fi
5376251883Speter	      else
5377251883Speter		# Only an error if not doing a dry-run.
5378289166Speter		if $opt_dry_run; then
5379251883Speter		  # Extract subdirectory from the argument.
5380289166Speter		  func_dirname "$arg" "/" ""
5381289166Speter		  xdir="$func_dirname_result"
5382251883Speter
5383289166Speter		  func_lo2o "$arg"
5384289166Speter		  pic_object=$xdir$objdir/$func_lo2o_result
5385289166Speter		  non_pic_object=$xdir$func_lo2o_result
5386289166Speter		  func_append libobjs " $pic_object"
5387289166Speter		  func_append non_pic_objects " $non_pic_object"
5388289166Speter	        else
5389289166Speter		  func_fatal_error "\`$arg' is not a valid libtool object"
5390251883Speter		fi
5391251883Speter	      fi
5392251883Speter	    done
5393251883Speter	  else
5394289166Speter	    func_fatal_error "link input file \`$arg' does not exist"
5395251883Speter	  fi
5396251883Speter	  arg=$save_arg
5397251883Speter	  prev=
5398251883Speter	  continue
5399251883Speter	  ;;
5400289166Speter	precious_regex)
5401289166Speter	  precious_files_regex="$arg"
5402289166Speter	  prev=
5403289166Speter	  continue
5404289166Speter	  ;;
5405289166Speter	release)
5406289166Speter	  release="-$arg"
5407289166Speter	  prev=
5408289166Speter	  continue
5409289166Speter	  ;;
5410251883Speter	rpath | xrpath)
5411251883Speter	  # We need an absolute path.
5412251883Speter	  case $arg in
5413251883Speter	  [\\/]* | [A-Za-z]:[\\/]*) ;;
5414251883Speter	  *)
5415289166Speter	    func_fatal_error "only absolute run-paths are allowed"
5416251883Speter	    ;;
5417251883Speter	  esac
5418251883Speter	  if test "$prev" = rpath; then
5419251883Speter	    case "$rpath " in
5420251883Speter	    *" $arg "*) ;;
5421289166Speter	    *) func_append rpath " $arg" ;;
5422251883Speter	    esac
5423251883Speter	  else
5424251883Speter	    case "$xrpath " in
5425251883Speter	    *" $arg "*) ;;
5426289166Speter	    *) func_append xrpath " $arg" ;;
5427251883Speter	    esac
5428251883Speter	  fi
5429251883Speter	  prev=
5430251883Speter	  continue
5431251883Speter	  ;;
5432289166Speter	shrext)
5433289166Speter	  shrext_cmds="$arg"
5434251883Speter	  prev=
5435251883Speter	  continue
5436251883Speter	  ;;
5437289166Speter	weak)
5438289166Speter	  func_append weak_libs " $arg"
5439251883Speter	  prev=
5440251883Speter	  continue
5441251883Speter	  ;;
5442251883Speter	xcclinker)
5443289166Speter	  func_append linker_flags " $qarg"
5444289166Speter	  func_append compiler_flags " $qarg"
5445251883Speter	  prev=
5446289166Speter	  func_append compile_command " $qarg"
5447289166Speter	  func_append finalize_command " $qarg"
5448251883Speter	  continue
5449251883Speter	  ;;
5450289166Speter	xcompiler)
5451289166Speter	  func_append compiler_flags " $qarg"
5452251883Speter	  prev=
5453289166Speter	  func_append compile_command " $qarg"
5454289166Speter	  func_append finalize_command " $qarg"
5455251883Speter	  continue
5456251883Speter	  ;;
5457289166Speter	xlinker)
5458289166Speter	  func_append linker_flags " $qarg"
5459289166Speter	  func_append compiler_flags " $wl$qarg"
5460251883Speter	  prev=
5461289166Speter	  func_append compile_command " $wl$qarg"
5462289166Speter	  func_append finalize_command " $wl$qarg"
5463251883Speter	  continue
5464251883Speter	  ;;
5465251883Speter	*)
5466251883Speter	  eval "$prev=\"\$arg\""
5467251883Speter	  prev=
5468251883Speter	  continue
5469251883Speter	  ;;
5470251883Speter	esac
5471251883Speter      fi # test -n "$prev"
5472251883Speter
5473251883Speter      prevarg="$arg"
5474251883Speter
5475251883Speter      case $arg in
5476251883Speter      -all-static)
5477251883Speter	if test -n "$link_static_flag"; then
5478289166Speter	  # See comment for -static flag below, for more details.
5479289166Speter	  func_append compile_command " $link_static_flag"
5480289166Speter	  func_append finalize_command " $link_static_flag"
5481251883Speter	fi
5482251883Speter	continue
5483251883Speter	;;
5484251883Speter
5485251883Speter      -allow-undefined)
5486251883Speter	# FIXME: remove this flag sometime in the future.
5487289166Speter	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
5488251883Speter	;;
5489251883Speter
5490251883Speter      -avoid-version)
5491251883Speter	avoid_version=yes
5492251883Speter	continue
5493251883Speter	;;
5494251883Speter
5495289166Speter      -bindir)
5496289166Speter	prev=bindir
5497289166Speter	continue
5498289166Speter	;;
5499289166Speter
5500251883Speter      -dlopen)
5501251883Speter	prev=dlfiles
5502251883Speter	continue
5503251883Speter	;;
5504251883Speter
5505251883Speter      -dlpreopen)
5506251883Speter	prev=dlprefiles
5507251883Speter	continue
5508251883Speter	;;
5509251883Speter
5510251883Speter      -export-dynamic)
5511251883Speter	export_dynamic=yes
5512251883Speter	continue
5513251883Speter	;;
5514251883Speter
5515251883Speter      -export-symbols | -export-symbols-regex)
5516251883Speter	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
5517289166Speter	  func_fatal_error "more than one -exported-symbols argument is not allowed"
5518251883Speter	fi
5519251883Speter	if test "X$arg" = "X-export-symbols"; then
5520251883Speter	  prev=expsyms
5521251883Speter	else
5522251883Speter	  prev=expsyms_regex
5523251883Speter	fi
5524251883Speter	continue
5525251883Speter	;;
5526251883Speter
5527289166Speter      -framework)
5528289166Speter	prev=framework
5529251883Speter	continue
5530251883Speter	;;
5531251883Speter
5532251883Speter      -inst-prefix-dir)
5533251883Speter	prev=inst_prefix
5534251883Speter	continue
5535251883Speter	;;
5536251883Speter
5537251883Speter      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
5538251883Speter      # so, if we see these flags be careful not to treat them like -L
5539251883Speter      -L[A-Z][A-Z]*:*)
5540251883Speter	case $with_gcc/$host in
5541251883Speter	no/*-*-irix* | /*-*-irix*)
5542289166Speter	  func_append compile_command " $arg"
5543289166Speter	  func_append finalize_command " $arg"
5544251883Speter	  ;;
5545251883Speter	esac
5546251883Speter	continue
5547251883Speter	;;
5548251883Speter
5549251883Speter      -L*)
5550289166Speter	func_stripname "-L" '' "$arg"
5551289166Speter	if test -z "$func_stripname_result"; then
5552289166Speter	  if test "$#" -gt 0; then
5553289166Speter	    func_fatal_error "require no space between \`-L' and \`$1'"
5554289166Speter	  else
5555289166Speter	    func_fatal_error "need path for \`-L' option"
5556289166Speter	  fi
5557289166Speter	fi
5558289166Speter	func_resolve_sysroot "$func_stripname_result"
5559289166Speter	dir=$func_resolve_sysroot_result
5560251883Speter	# We need an absolute path.
5561251883Speter	case $dir in
5562251883Speter	[\\/]* | [A-Za-z]:[\\/]*) ;;
5563251883Speter	*)
5564251883Speter	  absdir=`cd "$dir" && pwd`
5565289166Speter	  test -z "$absdir" && \
5566289166Speter	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
5567251883Speter	  dir="$absdir"
5568251883Speter	  ;;
5569251883Speter	esac
5570251883Speter	case "$deplibs " in
5571289166Speter	*" -L$dir "* | *" $arg "*)
5572289166Speter	  # Will only happen for absolute or sysroot arguments
5573289166Speter	  ;;
5574251883Speter	*)
5575289166Speter	  # Preserve sysroot, but never include relative directories
5576289166Speter	  case $dir in
5577289166Speter	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
5578289166Speter	    *) func_append deplibs " -L$dir" ;;
5579289166Speter	  esac
5580289166Speter	  func_append lib_search_path " $dir"
5581251883Speter	  ;;
5582251883Speter	esac
5583251883Speter	case $host in
5584289166Speter	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5585289166Speter	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
5586251883Speter	  case :$dllsearchpath: in
5587251883Speter	  *":$dir:"*) ;;
5588289166Speter	  ::) dllsearchpath=$dir;;
5589289166Speter	  *) func_append dllsearchpath ":$dir";;
5590251883Speter	  esac
5591251883Speter	  case :$dllsearchpath: in
5592251883Speter	  *":$testbindir:"*) ;;
5593289166Speter	  ::) dllsearchpath=$testbindir;;
5594289166Speter	  *) func_append dllsearchpath ":$testbindir";;
5595251883Speter	  esac
5596251883Speter	  ;;
5597251883Speter	esac
5598251883Speter	continue
5599251883Speter	;;
5600251883Speter
5601251883Speter      -l*)
5602251883Speter	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
5603251883Speter	  case $host in
5604289166Speter	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
5605251883Speter	    # These systems don't actually have a C or math library (as such)
5606251883Speter	    continue
5607251883Speter	    ;;
5608251883Speter	  *-*-os2*)
5609251883Speter	    # These systems don't actually have a C library (as such)
5610251883Speter	    test "X$arg" = "X-lc" && continue
5611251883Speter	    ;;
5612251883Speter	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5613251883Speter	    # Do not include libc due to us having libc/libc_r.
5614251883Speter	    test "X$arg" = "X-lc" && continue
5615251883Speter	    ;;
5616251883Speter	  *-*-rhapsody* | *-*-darwin1.[012])
5617251883Speter	    # Rhapsody C and math libraries are in the System framework
5618289166Speter	    func_append deplibs " System.ltframework"
5619251883Speter	    continue
5620251883Speter	    ;;
5621251883Speter	  *-*-sco3.2v5* | *-*-sco5v6*)
5622251883Speter	    # Causes problems with __ctype
5623251883Speter	    test "X$arg" = "X-lc" && continue
5624251883Speter	    ;;
5625251883Speter	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
5626251883Speter	    # Compiler inserts libc in the correct place for threads to work
5627251883Speter	    test "X$arg" = "X-lc" && continue
5628251883Speter	    ;;
5629251883Speter	  esac
5630251883Speter	elif test "X$arg" = "X-lc_r"; then
5631251883Speter	 case $host in
5632251883Speter	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5633251883Speter	   # Do not include libc_r directly, use -pthread flag.
5634251883Speter	   continue
5635251883Speter	   ;;
5636251883Speter	 esac
5637251883Speter	fi
5638289166Speter	func_append deplibs " $arg"
5639251883Speter	continue
5640251883Speter	;;
5641251883Speter
5642289166Speter      -module)
5643289166Speter	module=yes
5644289166Speter	continue
5645289166Speter	;;
5646289166Speter
5647251883Speter      # Tru64 UNIX uses -model [arg] to determine the layout of C++
5648251883Speter      # classes, name mangling, and exception handling.
5649289166Speter      # Darwin uses the -arch flag to determine output architecture.
5650289166Speter      -model|-arch|-isysroot|--sysroot)
5651289166Speter	func_append compiler_flags " $arg"
5652289166Speter	func_append compile_command " $arg"
5653289166Speter	func_append finalize_command " $arg"
5654251883Speter	prev=xcompiler
5655251883Speter	continue
5656251883Speter	;;
5657251883Speter
5658289166Speter      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
5659289166Speter      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
5660289166Speter	func_append compiler_flags " $arg"
5661289166Speter	func_append compile_command " $arg"
5662289166Speter	func_append finalize_command " $arg"
5663289166Speter	case "$new_inherited_linker_flags " in
5664289166Speter	    *" $arg "*) ;;
5665289166Speter	    * ) func_append new_inherited_linker_flags " $arg" ;;
5666289166Speter	esac
5667251883Speter	continue
5668251883Speter	;;
5669251883Speter
5670289166Speter      -multi_module)
5671289166Speter	single_module="${wl}-multi_module"
5672251883Speter	continue
5673251883Speter	;;
5674251883Speter
5675251883Speter      -no-fast-install)
5676251883Speter	fast_install=no
5677251883Speter	continue
5678251883Speter	;;
5679251883Speter
5680251883Speter      -no-install)
5681251883Speter	case $host in
5682289166Speter	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
5683251883Speter	  # The PATH hackery in wrapper scripts is required on Windows
5684251883Speter	  # and Darwin in order for the loader to find any dlls it needs.
5685289166Speter	  func_warning "\`-no-install' is ignored for $host"
5686289166Speter	  func_warning "assuming \`-no-fast-install' instead"
5687251883Speter	  fast_install=no
5688251883Speter	  ;;
5689251883Speter	*) no_install=yes ;;
5690251883Speter	esac
5691251883Speter	continue
5692251883Speter	;;
5693251883Speter
5694251883Speter      -no-undefined)
5695251883Speter	allow_undefined=no
5696251883Speter	continue
5697251883Speter	;;
5698251883Speter
5699251883Speter      -objectlist)
5700251883Speter	prev=objectlist
5701251883Speter	continue
5702251883Speter	;;
5703251883Speter
5704251883Speter      -o) prev=output ;;
5705251883Speter
5706251883Speter      -precious-files-regex)
5707251883Speter	prev=precious_regex
5708251883Speter	continue
5709251883Speter	;;
5710251883Speter
5711251883Speter      -release)
5712251883Speter	prev=release
5713251883Speter	continue
5714251883Speter	;;
5715251883Speter
5716251883Speter      -rpath)
5717251883Speter	prev=rpath
5718251883Speter	continue
5719251883Speter	;;
5720251883Speter
5721251883Speter      -R)
5722251883Speter	prev=xrpath
5723251883Speter	continue
5724251883Speter	;;
5725251883Speter
5726251883Speter      -R*)
5727289166Speter	func_stripname '-R' '' "$arg"
5728289166Speter	dir=$func_stripname_result
5729251883Speter	# We need an absolute path.
5730251883Speter	case $dir in
5731251883Speter	[\\/]* | [A-Za-z]:[\\/]*) ;;
5732289166Speter	=*)
5733289166Speter	  func_stripname '=' '' "$dir"
5734289166Speter	  dir=$lt_sysroot$func_stripname_result
5735289166Speter	  ;;
5736251883Speter	*)
5737289166Speter	  func_fatal_error "only absolute run-paths are allowed"
5738251883Speter	  ;;
5739251883Speter	esac
5740251883Speter	case "$xrpath " in
5741251883Speter	*" $dir "*) ;;
5742289166Speter	*) func_append xrpath " $dir" ;;
5743251883Speter	esac
5744251883Speter	continue
5745251883Speter	;;
5746251883Speter
5747289166Speter      -shared)
5748289166Speter	# The effects of -shared are defined in a previous loop.
5749289166Speter	continue
5750289166Speter	;;
5751289166Speter
5752289166Speter      -shrext)
5753289166Speter	prev=shrext
5754289166Speter	continue
5755289166Speter	;;
5756289166Speter
5757251883Speter      -static | -static-libtool-libs)
5758251883Speter	# The effects of -static are defined in a previous loop.
5759251883Speter	# We used to do the same as -all-static on platforms that
5760251883Speter	# didn't have a PIC flag, but the assumption that the effects
5761251883Speter	# would be equivalent was wrong.  It would break on at least
5762251883Speter	# Digital Unix and AIX.
5763251883Speter	continue
5764251883Speter	;;
5765251883Speter
5766251883Speter      -thread-safe)
5767251883Speter	thread_safe=yes
5768251883Speter	continue
5769251883Speter	;;
5770251883Speter
5771251883Speter      -version-info)
5772251883Speter	prev=vinfo
5773251883Speter	continue
5774251883Speter	;;
5775289166Speter
5776251883Speter      -version-number)
5777251883Speter	prev=vinfo
5778251883Speter	vinfo_number=yes
5779251883Speter	continue
5780251883Speter	;;
5781251883Speter
5782289166Speter      -weak)
5783289166Speter        prev=weak
5784289166Speter	continue
5785289166Speter	;;
5786289166Speter
5787251883Speter      -Wc,*)
5788289166Speter	func_stripname '-Wc,' '' "$arg"
5789289166Speter	args=$func_stripname_result
5790251883Speter	arg=
5791251883Speter	save_ifs="$IFS"; IFS=','
5792251883Speter	for flag in $args; do
5793251883Speter	  IFS="$save_ifs"
5794289166Speter          func_quote_for_eval "$flag"
5795289166Speter	  func_append arg " $func_quote_for_eval_result"
5796289166Speter	  func_append compiler_flags " $func_quote_for_eval_result"
5797251883Speter	done
5798251883Speter	IFS="$save_ifs"
5799289166Speter	func_stripname ' ' '' "$arg"
5800289166Speter	arg=$func_stripname_result
5801251883Speter	;;
5802251883Speter
5803251883Speter      -Wl,*)
5804289166Speter	func_stripname '-Wl,' '' "$arg"
5805289166Speter	args=$func_stripname_result
5806251883Speter	arg=
5807251883Speter	save_ifs="$IFS"; IFS=','
5808251883Speter	for flag in $args; do
5809251883Speter	  IFS="$save_ifs"
5810289166Speter          func_quote_for_eval "$flag"
5811289166Speter	  func_append arg " $wl$func_quote_for_eval_result"
5812289166Speter	  func_append compiler_flags " $wl$func_quote_for_eval_result"
5813289166Speter	  func_append linker_flags " $func_quote_for_eval_result"
5814251883Speter	done
5815251883Speter	IFS="$save_ifs"
5816289166Speter	func_stripname ' ' '' "$arg"
5817289166Speter	arg=$func_stripname_result
5818251883Speter	;;
5819251883Speter
5820251883Speter      -Xcompiler)
5821251883Speter	prev=xcompiler
5822251883Speter	continue
5823251883Speter	;;
5824251883Speter
5825251883Speter      -Xlinker)
5826251883Speter	prev=xlinker
5827251883Speter	continue
5828251883Speter	;;
5829251883Speter
5830251883Speter      -XCClinker)
5831251883Speter	prev=xcclinker
5832251883Speter	continue
5833251883Speter	;;
5834251883Speter
5835289166Speter      # -msg_* for osf cc
5836289166Speter      -msg_*)
5837289166Speter	func_quote_for_eval "$arg"
5838289166Speter	arg="$func_quote_for_eval_result"
5839289166Speter	;;
5840289166Speter
5841289166Speter      # Flags to be passed through unchanged, with rationale:
5842289166Speter      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
5843289166Speter      # -r[0-9][0-9]*        specify processor for the SGI compiler
5844289166Speter      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
5845289166Speter      # +DA*, +DD*           enable 64-bit mode for the HP compiler
5846289166Speter      # -q*                  compiler args for the IBM compiler
5847289166Speter      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
5848289166Speter      # -F/path              path to uninstalled frameworks, gcc on darwin
5849289166Speter      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
5850289166Speter      # @file                GCC response files
5851289166Speter      # -tp=*                Portland pgcc target processor selection
5852289166Speter      # --sysroot=*          for sysroot support
5853289166Speter      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
5854289166Speter      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
5855289166Speter      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
5856289166Speter      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
5857289166Speter        func_quote_for_eval "$arg"
5858289166Speter	arg="$func_quote_for_eval_result"
5859289166Speter        func_append compile_command " $arg"
5860289166Speter        func_append finalize_command " $arg"
5861289166Speter        func_append compiler_flags " $arg"
5862289166Speter        continue
5863289166Speter        ;;
5864289166Speter
5865251883Speter      # Some other compiler flag.
5866251883Speter      -* | +*)
5867289166Speter        func_quote_for_eval "$arg"
5868289166Speter	arg="$func_quote_for_eval_result"
5869251883Speter	;;
5870251883Speter
5871251883Speter      *.$objext)
5872251883Speter	# A standard object.
5873289166Speter	func_append objs " $arg"
5874251883Speter	;;
5875251883Speter
5876251883Speter      *.lo)
5877251883Speter	# A libtool-controlled object.
5878251883Speter
5879251883Speter	# Check to see that this really is a libtool object.
5880289166Speter	if func_lalib_unsafe_p "$arg"; then
5881251883Speter	  pic_object=
5882251883Speter	  non_pic_object=
5883251883Speter
5884251883Speter	  # Read the .lo file
5885289166Speter	  func_source "$arg"
5886251883Speter
5887289166Speter	  if test -z "$pic_object" ||
5888251883Speter	     test -z "$non_pic_object" ||
5889289166Speter	     test "$pic_object" = none &&
5890251883Speter	     test "$non_pic_object" = none; then
5891289166Speter	    func_fatal_error "cannot find name of object for \`$arg'"
5892251883Speter	  fi
5893251883Speter
5894251883Speter	  # Extract subdirectory from the argument.
5895289166Speter	  func_dirname "$arg" "/" ""
5896289166Speter	  xdir="$func_dirname_result"
5897251883Speter
5898251883Speter	  if test "$pic_object" != none; then
5899251883Speter	    # Prepend the subdirectory the object is found in.
5900251883Speter	    pic_object="$xdir$pic_object"
5901251883Speter
5902251883Speter	    if test "$prev" = dlfiles; then
5903251883Speter	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5904289166Speter		func_append dlfiles " $pic_object"
5905251883Speter		prev=
5906251883Speter		continue
5907251883Speter	      else
5908251883Speter		# If libtool objects are unsupported, then we need to preload.
5909251883Speter		prev=dlprefiles
5910251883Speter	      fi
5911251883Speter	    fi
5912251883Speter
5913251883Speter	    # CHECK ME:  I think I busted this.  -Ossama
5914251883Speter	    if test "$prev" = dlprefiles; then
5915251883Speter	      # Preload the old-style object.
5916289166Speter	      func_append dlprefiles " $pic_object"
5917251883Speter	      prev=
5918251883Speter	    fi
5919251883Speter
5920251883Speter	    # A PIC object.
5921289166Speter	    func_append libobjs " $pic_object"
5922251883Speter	    arg="$pic_object"
5923251883Speter	  fi
5924251883Speter
5925251883Speter	  # Non-PIC object.
5926251883Speter	  if test "$non_pic_object" != none; then
5927251883Speter	    # Prepend the subdirectory the object is found in.
5928251883Speter	    non_pic_object="$xdir$non_pic_object"
5929251883Speter
5930251883Speter	    # A standard non-PIC object
5931289166Speter	    func_append non_pic_objects " $non_pic_object"
5932251883Speter	    if test -z "$pic_object" || test "$pic_object" = none ; then
5933251883Speter	      arg="$non_pic_object"
5934251883Speter	    fi
5935251883Speter	  else
5936251883Speter	    # If the PIC object exists, use it instead.
5937251883Speter	    # $xdir was prepended to $pic_object above.
5938251883Speter	    non_pic_object="$pic_object"
5939289166Speter	    func_append non_pic_objects " $non_pic_object"
5940251883Speter	  fi
5941251883Speter	else
5942251883Speter	  # Only an error if not doing a dry-run.
5943289166Speter	  if $opt_dry_run; then
5944251883Speter	    # Extract subdirectory from the argument.
5945289166Speter	    func_dirname "$arg" "/" ""
5946289166Speter	    xdir="$func_dirname_result"
5947251883Speter
5948289166Speter	    func_lo2o "$arg"
5949289166Speter	    pic_object=$xdir$objdir/$func_lo2o_result
5950289166Speter	    non_pic_object=$xdir$func_lo2o_result
5951289166Speter	    func_append libobjs " $pic_object"
5952289166Speter	    func_append non_pic_objects " $non_pic_object"
5953289166Speter	  else
5954289166Speter	    func_fatal_error "\`$arg' is not a valid libtool object"
5955251883Speter	  fi
5956251883Speter	fi
5957251883Speter	;;
5958251883Speter
5959251883Speter      *.$libext)
5960251883Speter	# An archive.
5961289166Speter	func_append deplibs " $arg"
5962289166Speter	func_append old_deplibs " $arg"
5963251883Speter	continue
5964251883Speter	;;
5965251883Speter
5966251883Speter      *.la)
5967251883Speter	# A libtool-controlled library.
5968251883Speter
5969289166Speter	func_resolve_sysroot "$arg"
5970251883Speter	if test "$prev" = dlfiles; then
5971251883Speter	  # This library was specified with -dlopen.
5972289166Speter	  func_append dlfiles " $func_resolve_sysroot_result"
5973251883Speter	  prev=
5974251883Speter	elif test "$prev" = dlprefiles; then
5975251883Speter	  # The library was specified with -dlpreopen.
5976289166Speter	  func_append dlprefiles " $func_resolve_sysroot_result"
5977251883Speter	  prev=
5978251883Speter	else
5979289166Speter	  func_append deplibs " $func_resolve_sysroot_result"
5980251883Speter	fi
5981251883Speter	continue
5982251883Speter	;;
5983251883Speter
5984251883Speter      # Some other compiler argument.
5985251883Speter      *)
5986251883Speter	# Unknown arguments in both finalize_command and compile_command need
5987251883Speter	# to be aesthetically quoted because they are evaled later.
5988289166Speter	func_quote_for_eval "$arg"
5989289166Speter	arg="$func_quote_for_eval_result"
5990251883Speter	;;
5991251883Speter      esac # arg
5992251883Speter
5993251883Speter      # Now actually substitute the argument into the commands.
5994251883Speter      if test -n "$arg"; then
5995289166Speter	func_append compile_command " $arg"
5996289166Speter	func_append finalize_command " $arg"
5997251883Speter      fi
5998251883Speter    done # argument parsing loop
5999251883Speter
6000289166Speter    test -n "$prev" && \
6001289166Speter      func_fatal_help "the \`$prevarg' option requires an argument"
6002251883Speter
6003251883Speter    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
6004251883Speter      eval arg=\"$export_dynamic_flag_spec\"
6005289166Speter      func_append compile_command " $arg"
6006289166Speter      func_append finalize_command " $arg"
6007251883Speter    fi
6008251883Speter
6009251883Speter    oldlibs=
6010251883Speter    # calculate the name of the file, without its directory
6011289166Speter    func_basename "$output"
6012289166Speter    outputname="$func_basename_result"
6013251883Speter    libobjs_save="$libobjs"
6014251883Speter
6015251883Speter    if test -n "$shlibpath_var"; then
6016251883Speter      # get the directories listed in $shlibpath_var
6017289166Speter      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
6018251883Speter    else
6019251883Speter      shlib_search_path=
6020251883Speter    fi
6021251883Speter    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
6022251883Speter    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
6023251883Speter
6024289166Speter    func_dirname "$output" "/" ""
6025289166Speter    output_objdir="$func_dirname_result$objdir"
6026289166Speter    func_to_tool_file "$output_objdir/"
6027289166Speter    tool_output_objdir=$func_to_tool_file_result
6028251883Speter    # Create the object directory.
6029289166Speter    func_mkdir_p "$output_objdir"
6030251883Speter
6031251883Speter    # Determine the type of output
6032251883Speter    case $output in
6033251883Speter    "")
6034289166Speter      func_fatal_help "you must specify an output file"
6035251883Speter      ;;
6036251883Speter    *.$libext) linkmode=oldlib ;;
6037251883Speter    *.lo | *.$objext) linkmode=obj ;;
6038251883Speter    *.la) linkmode=lib ;;
6039251883Speter    *) linkmode=prog ;; # Anything else should be a program.
6040251883Speter    esac
6041251883Speter
6042251883Speter    specialdeplibs=
6043251883Speter
6044251883Speter    libs=
6045251883Speter    # Find all interdependent deplibs by searching for libraries
6046251883Speter    # that are linked more than once (e.g. -la -lb -la)
6047251883Speter    for deplib in $deplibs; do
6048289166Speter      if $opt_preserve_dup_deps ; then
6049251883Speter	case "$libs " in
6050289166Speter	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
6051251883Speter	esac
6052251883Speter      fi
6053289166Speter      func_append libs " $deplib"
6054251883Speter    done
6055251883Speter
6056251883Speter    if test "$linkmode" = lib; then
6057251883Speter      libs="$predeps $libs $compiler_lib_search_path $postdeps"
6058251883Speter
6059251883Speter      # Compute libraries that are listed more than once in $predeps
6060251883Speter      # $postdeps and mark them as special (i.e., whose duplicates are
6061251883Speter      # not to be eliminated).
6062251883Speter      pre_post_deps=
6063289166Speter      if $opt_duplicate_compiler_generated_deps; then
6064251883Speter	for pre_post_dep in $predeps $postdeps; do
6065251883Speter	  case "$pre_post_deps " in
6066289166Speter	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
6067251883Speter	  esac
6068289166Speter	  func_append pre_post_deps " $pre_post_dep"
6069251883Speter	done
6070251883Speter      fi
6071251883Speter      pre_post_deps=
6072251883Speter    fi
6073251883Speter
6074251883Speter    deplibs=
6075251883Speter    newdependency_libs=
6076251883Speter    newlib_search_path=
6077251883Speter    need_relink=no # whether we're linking any uninstalled libtool libraries
6078251883Speter    notinst_deplibs= # not-installed libtool libraries
6079289166Speter    notinst_path= # paths that contain not-installed libtool libraries
6080289166Speter
6081251883Speter    case $linkmode in
6082251883Speter    lib)
6083289166Speter	passes="conv dlpreopen link"
6084251883Speter	for file in $dlfiles $dlprefiles; do
6085251883Speter	  case $file in
6086251883Speter	  *.la) ;;
6087251883Speter	  *)
6088289166Speter	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
6089251883Speter	    ;;
6090251883Speter	  esac
6091251883Speter	done
6092251883Speter	;;
6093251883Speter    prog)
6094251883Speter	compile_deplibs=
6095251883Speter	finalize_deplibs=
6096251883Speter	alldeplibs=no
6097251883Speter	newdlfiles=
6098251883Speter	newdlprefiles=
6099251883Speter	passes="conv scan dlopen dlpreopen link"
6100251883Speter	;;
6101251883Speter    *)  passes="conv"
6102251883Speter	;;
6103251883Speter    esac
6104289166Speter
6105251883Speter    for pass in $passes; do
6106289166Speter      # The preopen pass in lib mode reverses $deplibs; put it back here
6107289166Speter      # so that -L comes before libs that need it for instance...
6108289166Speter      if test "$linkmode,$pass" = "lib,link"; then
6109289166Speter	## FIXME: Find the place where the list is rebuilt in the wrong
6110289166Speter	##        order, and fix it there properly
6111289166Speter        tmp_deplibs=
6112289166Speter	for deplib in $deplibs; do
6113289166Speter	  tmp_deplibs="$deplib $tmp_deplibs"
6114289166Speter	done
6115289166Speter	deplibs="$tmp_deplibs"
6116289166Speter      fi
6117289166Speter
6118251883Speter      if test "$linkmode,$pass" = "lib,link" ||
6119251883Speter	 test "$linkmode,$pass" = "prog,scan"; then
6120251883Speter	libs="$deplibs"
6121251883Speter	deplibs=
6122251883Speter      fi
6123251883Speter      if test "$linkmode" = prog; then
6124251883Speter	case $pass in
6125251883Speter	dlopen) libs="$dlfiles" ;;
6126251883Speter	dlpreopen) libs="$dlprefiles" ;;
6127251883Speter	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
6128251883Speter	esac
6129251883Speter      fi
6130289166Speter      if test "$linkmode,$pass" = "lib,dlpreopen"; then
6131289166Speter	# Collect and forward deplibs of preopened libtool libs
6132289166Speter	for lib in $dlprefiles; do
6133289166Speter	  # Ignore non-libtool-libs
6134289166Speter	  dependency_libs=
6135289166Speter	  func_resolve_sysroot "$lib"
6136289166Speter	  case $lib in
6137289166Speter	  *.la)	func_source "$func_resolve_sysroot_result" ;;
6138289166Speter	  esac
6139289166Speter
6140289166Speter	  # Collect preopened libtool deplibs, except any this library
6141289166Speter	  # has declared as weak libs
6142289166Speter	  for deplib in $dependency_libs; do
6143289166Speter	    func_basename "$deplib"
6144289166Speter            deplib_base=$func_basename_result
6145289166Speter	    case " $weak_libs " in
6146289166Speter	    *" $deplib_base "*) ;;
6147289166Speter	    *) func_append deplibs " $deplib" ;;
6148289166Speter	    esac
6149289166Speter	  done
6150289166Speter	done
6151289166Speter	libs="$dlprefiles"
6152289166Speter      fi
6153251883Speter      if test "$pass" = dlopen; then
6154251883Speter	# Collect dlpreopened libraries
6155251883Speter	save_deplibs="$deplibs"
6156251883Speter	deplibs=
6157251883Speter      fi
6158289166Speter
6159251883Speter      for deplib in $libs; do
6160251883Speter	lib=
6161251883Speter	found=no
6162251883Speter	case $deplib in
6163289166Speter	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
6164289166Speter        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
6165251883Speter	  if test "$linkmode,$pass" = "prog,link"; then
6166251883Speter	    compile_deplibs="$deplib $compile_deplibs"
6167251883Speter	    finalize_deplibs="$deplib $finalize_deplibs"
6168251883Speter	  else
6169289166Speter	    func_append compiler_flags " $deplib"
6170289166Speter	    if test "$linkmode" = lib ; then
6171289166Speter		case "$new_inherited_linker_flags " in
6172289166Speter		    *" $deplib "*) ;;
6173289166Speter		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6174289166Speter		esac
6175289166Speter	    fi
6176251883Speter	  fi
6177251883Speter	  continue
6178251883Speter	  ;;
6179251883Speter	-l*)
6180251883Speter	  if test "$linkmode" != lib && test "$linkmode" != prog; then
6181289166Speter	    func_warning "\`-l' is ignored for archives/objects"
6182251883Speter	    continue
6183251883Speter	  fi
6184289166Speter	  func_stripname '-l' '' "$deplib"
6185289166Speter	  name=$func_stripname_result
6186289166Speter	  if test "$linkmode" = lib; then
6187289166Speter	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
6188289166Speter	  else
6189289166Speter	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
6190289166Speter	  fi
6191289166Speter	  for searchdir in $searchdirs; do
6192251883Speter	    for search_ext in .la $std_shrext .so .a; do
6193251883Speter	      # Search the libtool library
6194251883Speter	      lib="$searchdir/lib${name}${search_ext}"
6195251883Speter	      if test -f "$lib"; then
6196251883Speter		if test "$search_ext" = ".la"; then
6197251883Speter		  found=yes
6198251883Speter		else
6199251883Speter		  found=no
6200251883Speter		fi
6201251883Speter		break 2
6202251883Speter	      fi
6203251883Speter	    done
6204251883Speter	  done
6205251883Speter	  if test "$found" != yes; then
6206251883Speter	    # deplib doesn't seem to be a libtool library
6207251883Speter	    if test "$linkmode,$pass" = "prog,link"; then
6208251883Speter	      compile_deplibs="$deplib $compile_deplibs"
6209251883Speter	      finalize_deplibs="$deplib $finalize_deplibs"
6210251883Speter	    else
6211251883Speter	      deplibs="$deplib $deplibs"
6212251883Speter	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6213251883Speter	    fi
6214251883Speter	    continue
6215251883Speter	  else # deplib is a libtool library
6216251883Speter	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
6217251883Speter	    # We need to do some special things here, and not later.
6218251883Speter	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6219251883Speter	      case " $predeps $postdeps " in
6220251883Speter	      *" $deplib "*)
6221289166Speter		if func_lalib_p "$lib"; then
6222251883Speter		  library_names=
6223251883Speter		  old_library=
6224289166Speter		  func_source "$lib"
6225251883Speter		  for l in $old_library $library_names; do
6226251883Speter		    ll="$l"
6227251883Speter		  done
6228251883Speter		  if test "X$ll" = "X$old_library" ; then # only static version available
6229251883Speter		    found=no
6230289166Speter		    func_dirname "$lib" "" "."
6231289166Speter		    ladir="$func_dirname_result"
6232251883Speter		    lib=$ladir/$old_library
6233251883Speter		    if test "$linkmode,$pass" = "prog,link"; then
6234251883Speter		      compile_deplibs="$deplib $compile_deplibs"
6235251883Speter		      finalize_deplibs="$deplib $finalize_deplibs"
6236251883Speter		    else
6237251883Speter		      deplibs="$deplib $deplibs"
6238251883Speter		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6239251883Speter		    fi
6240251883Speter		    continue
6241251883Speter		  fi
6242251883Speter		fi
6243289166Speter		;;
6244251883Speter	      *) ;;
6245251883Speter	      esac
6246251883Speter	    fi
6247251883Speter	  fi
6248251883Speter	  ;; # -l
6249289166Speter	*.ltframework)
6250289166Speter	  if test "$linkmode,$pass" = "prog,link"; then
6251289166Speter	    compile_deplibs="$deplib $compile_deplibs"
6252289166Speter	    finalize_deplibs="$deplib $finalize_deplibs"
6253289166Speter	  else
6254289166Speter	    deplibs="$deplib $deplibs"
6255289166Speter	    if test "$linkmode" = lib ; then
6256289166Speter		case "$new_inherited_linker_flags " in
6257289166Speter		    *" $deplib "*) ;;
6258289166Speter		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6259289166Speter		esac
6260289166Speter	    fi
6261289166Speter	  fi
6262289166Speter	  continue
6263289166Speter	  ;;
6264251883Speter	-L*)
6265251883Speter	  case $linkmode in
6266251883Speter	  lib)
6267251883Speter	    deplibs="$deplib $deplibs"
6268251883Speter	    test "$pass" = conv && continue
6269251883Speter	    newdependency_libs="$deplib $newdependency_libs"
6270289166Speter	    func_stripname '-L' '' "$deplib"
6271289166Speter	    func_resolve_sysroot "$func_stripname_result"
6272289166Speter	    func_append newlib_search_path " $func_resolve_sysroot_result"
6273251883Speter	    ;;
6274251883Speter	  prog)
6275251883Speter	    if test "$pass" = conv; then
6276251883Speter	      deplibs="$deplib $deplibs"
6277251883Speter	      continue
6278251883Speter	    fi
6279251883Speter	    if test "$pass" = scan; then
6280251883Speter	      deplibs="$deplib $deplibs"
6281251883Speter	    else
6282251883Speter	      compile_deplibs="$deplib $compile_deplibs"
6283251883Speter	      finalize_deplibs="$deplib $finalize_deplibs"
6284251883Speter	    fi
6285289166Speter	    func_stripname '-L' '' "$deplib"
6286289166Speter	    func_resolve_sysroot "$func_stripname_result"
6287289166Speter	    func_append newlib_search_path " $func_resolve_sysroot_result"
6288251883Speter	    ;;
6289251883Speter	  *)
6290289166Speter	    func_warning "\`-L' is ignored for archives/objects"
6291251883Speter	    ;;
6292251883Speter	  esac # linkmode
6293251883Speter	  continue
6294251883Speter	  ;; # -L
6295251883Speter	-R*)
6296251883Speter	  if test "$pass" = link; then
6297289166Speter	    func_stripname '-R' '' "$deplib"
6298289166Speter	    func_resolve_sysroot "$func_stripname_result"
6299289166Speter	    dir=$func_resolve_sysroot_result
6300251883Speter	    # Make sure the xrpath contains only unique directories.
6301251883Speter	    case "$xrpath " in
6302251883Speter	    *" $dir "*) ;;
6303289166Speter	    *) func_append xrpath " $dir" ;;
6304251883Speter	    esac
6305251883Speter	  fi
6306251883Speter	  deplibs="$deplib $deplibs"
6307251883Speter	  continue
6308251883Speter	  ;;
6309289166Speter	*.la)
6310289166Speter	  func_resolve_sysroot "$deplib"
6311289166Speter	  lib=$func_resolve_sysroot_result
6312289166Speter	  ;;
6313251883Speter	*.$libext)
6314251883Speter	  if test "$pass" = conv; then
6315251883Speter	    deplibs="$deplib $deplibs"
6316251883Speter	    continue
6317251883Speter	  fi
6318251883Speter	  case $linkmode in
6319251883Speter	  lib)
6320289166Speter	    # Linking convenience modules into shared libraries is allowed,
6321289166Speter	    # but linking other static libraries is non-portable.
6322289166Speter	    case " $dlpreconveniencelibs " in
6323289166Speter	    *" $deplib "*) ;;
6324289166Speter	    *)
6325289166Speter	      valid_a_lib=no
6326289166Speter	      case $deplibs_check_method in
6327289166Speter		match_pattern*)
6328289166Speter		  set dummy $deplibs_check_method; shift
6329289166Speter		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
6330289166Speter		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
6331251883Speter		    | $EGREP "$match_pattern_regex" > /dev/null; then
6332289166Speter		    valid_a_lib=yes
6333289166Speter		  fi
6334289166Speter		;;
6335289166Speter		pass_all)
6336251883Speter		  valid_a_lib=yes
6337251883Speter		;;
6338289166Speter	      esac
6339289166Speter	      if test "$valid_a_lib" != yes; then
6340289166Speter		echo
6341289166Speter		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
6342289166Speter		echo "*** I have the capability to make that library automatically link in when"
6343289166Speter		echo "*** you link to this library.  But I can only do this if you have a"
6344289166Speter		echo "*** shared version of the library, which you do not appear to have"
6345289166Speter		echo "*** because the file extensions .$libext of this argument makes me believe"
6346289166Speter		echo "*** that it is just a static archive that I should not use here."
6347289166Speter	      else
6348289166Speter		echo
6349289166Speter		$ECHO "*** Warning: Linking the shared library $output against the"
6350289166Speter		$ECHO "*** static library $deplib is not portable!"
6351289166Speter		deplibs="$deplib $deplibs"
6352289166Speter	      fi
6353289166Speter	      ;;
6354289166Speter	    esac
6355251883Speter	    continue
6356251883Speter	    ;;
6357251883Speter	  prog)
6358251883Speter	    if test "$pass" != link; then
6359251883Speter	      deplibs="$deplib $deplibs"
6360251883Speter	    else
6361251883Speter	      compile_deplibs="$deplib $compile_deplibs"
6362251883Speter	      finalize_deplibs="$deplib $finalize_deplibs"
6363251883Speter	    fi
6364251883Speter	    continue
6365251883Speter	    ;;
6366251883Speter	  esac # linkmode
6367251883Speter	  ;; # *.$libext
6368251883Speter	*.lo | *.$objext)
6369251883Speter	  if test "$pass" = conv; then
6370251883Speter	    deplibs="$deplib $deplibs"
6371251883Speter	  elif test "$linkmode" = prog; then
6372251883Speter	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
6373251883Speter	      # If there is no dlopen support or we're linking statically,
6374251883Speter	      # we need to preload.
6375289166Speter	      func_append newdlprefiles " $deplib"
6376251883Speter	      compile_deplibs="$deplib $compile_deplibs"
6377251883Speter	      finalize_deplibs="$deplib $finalize_deplibs"
6378251883Speter	    else
6379289166Speter	      func_append newdlfiles " $deplib"
6380251883Speter	    fi
6381251883Speter	  fi
6382251883Speter	  continue
6383251883Speter	  ;;
6384251883Speter	%DEPLIBS%)
6385251883Speter	  alldeplibs=yes
6386251883Speter	  continue
6387251883Speter	  ;;
6388251883Speter	esac # case $deplib
6389289166Speter
6390251883Speter	if test "$found" = yes || test -f "$lib"; then :
6391251883Speter	else
6392289166Speter	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
6393251883Speter	fi
6394251883Speter
6395251883Speter	# Check to see that this really is a libtool archive.
6396289166Speter	func_lalib_unsafe_p "$lib" \
6397289166Speter	  || func_fatal_error "\`$lib' is not a valid libtool archive"
6398251883Speter
6399289166Speter	func_dirname "$lib" "" "."
6400289166Speter	ladir="$func_dirname_result"
6401251883Speter
6402251883Speter	dlname=
6403251883Speter	dlopen=
6404251883Speter	dlpreopen=
6405251883Speter	libdir=
6406251883Speter	library_names=
6407251883Speter	old_library=
6408289166Speter	inherited_linker_flags=
6409251883Speter	# If the library was installed with an old release of libtool,
6410251883Speter	# it will not redefine variables installed, or shouldnotlink
6411251883Speter	installed=yes
6412251883Speter	shouldnotlink=no
6413251883Speter	avoidtemprpath=
6414251883Speter
6415251883Speter
6416251883Speter	# Read the .la file
6417289166Speter	func_source "$lib"
6418251883Speter
6419289166Speter	# Convert "-framework foo" to "foo.ltframework"
6420289166Speter	if test -n "$inherited_linker_flags"; then
6421289166Speter	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
6422289166Speter	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
6423289166Speter	    case " $new_inherited_linker_flags " in
6424289166Speter	      *" $tmp_inherited_linker_flag "*) ;;
6425289166Speter	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
6426289166Speter	    esac
6427289166Speter	  done
6428289166Speter	fi
6429289166Speter	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
6430251883Speter	if test "$linkmode,$pass" = "lib,link" ||
6431251883Speter	   test "$linkmode,$pass" = "prog,scan" ||
6432251883Speter	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
6433289166Speter	  test -n "$dlopen" && func_append dlfiles " $dlopen"
6434289166Speter	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
6435251883Speter	fi
6436251883Speter
6437251883Speter	if test "$pass" = conv; then
6438251883Speter	  # Only check for convenience libraries
6439251883Speter	  deplibs="$lib $deplibs"
6440251883Speter	  if test -z "$libdir"; then
6441251883Speter	    if test -z "$old_library"; then
6442289166Speter	      func_fatal_error "cannot find name of link library for \`$lib'"
6443251883Speter	    fi
6444251883Speter	    # It is a libtool convenience library, so add in its objects.
6445289166Speter	    func_append convenience " $ladir/$objdir/$old_library"
6446289166Speter	    func_append old_convenience " $ladir/$objdir/$old_library"
6447251883Speter	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
6448289166Speter	    func_fatal_error "\`$lib' is not a convenience library"
6449251883Speter	  fi
6450289166Speter	  tmp_libs=
6451289166Speter	  for deplib in $dependency_libs; do
6452289166Speter	    deplibs="$deplib $deplibs"
6453289166Speter	    if $opt_preserve_dup_deps ; then
6454289166Speter	      case "$tmp_libs " in
6455289166Speter	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6456289166Speter	      esac
6457289166Speter	    fi
6458289166Speter	    func_append tmp_libs " $deplib"
6459289166Speter	  done
6460251883Speter	  continue
6461251883Speter	fi # $pass = conv
6462251883Speter
6463251883Speter
6464251883Speter	# Get the name of the library we link against.
6465251883Speter	linklib=
6466289166Speter	if test -n "$old_library" &&
6467289166Speter	   { test "$prefer_static_libs" = yes ||
6468289166Speter	     test "$prefer_static_libs,$installed" = "built,no"; }; then
6469289166Speter	  linklib=$old_library
6470289166Speter	else
6471289166Speter	  for l in $old_library $library_names; do
6472289166Speter	    linklib="$l"
6473289166Speter	  done
6474289166Speter	fi
6475251883Speter	if test -z "$linklib"; then
6476289166Speter	  func_fatal_error "cannot find name of link library for \`$lib'"
6477251883Speter	fi
6478251883Speter
6479251883Speter	# This library was specified with -dlopen.
6480251883Speter	if test "$pass" = dlopen; then
6481251883Speter	  if test -z "$libdir"; then
6482289166Speter	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
6483251883Speter	  fi
6484251883Speter	  if test -z "$dlname" ||
6485251883Speter	     test "$dlopen_support" != yes ||
6486251883Speter	     test "$build_libtool_libs" = no; then
6487251883Speter	    # If there is no dlname, no dlopen support or we're linking
6488251883Speter	    # statically, we need to preload.  We also need to preload any
6489251883Speter	    # dependent libraries so libltdl's deplib preloader doesn't
6490251883Speter	    # bomb out in the load deplibs phase.
6491289166Speter	    func_append dlprefiles " $lib $dependency_libs"
6492251883Speter	  else
6493289166Speter	    func_append newdlfiles " $lib"
6494251883Speter	  fi
6495251883Speter	  continue
6496251883Speter	fi # $pass = dlopen
6497251883Speter
6498251883Speter	# We need an absolute path.
6499251883Speter	case $ladir in
6500251883Speter	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
6501251883Speter	*)
6502251883Speter	  abs_ladir=`cd "$ladir" && pwd`
6503251883Speter	  if test -z "$abs_ladir"; then
6504289166Speter	    func_warning "cannot determine absolute directory name of \`$ladir'"
6505289166Speter	    func_warning "passing it literally to the linker, although it might fail"
6506251883Speter	    abs_ladir="$ladir"
6507251883Speter	  fi
6508251883Speter	  ;;
6509251883Speter	esac
6510289166Speter	func_basename "$lib"
6511289166Speter	laname="$func_basename_result"
6512251883Speter
6513251883Speter	# Find the relevant object directory and library name.
6514251883Speter	if test "X$installed" = Xyes; then
6515289166Speter	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6516289166Speter	    #func_warning "library \`$lib' was moved."
6517251883Speter	    dir="$ladir"
6518251883Speter	    absdir="$abs_ladir"
6519251883Speter	    libdir="$abs_ladir"
6520251883Speter	  else
6521289166Speter	    dir="$lt_sysroot$libdir"
6522289166Speter	    absdir="$lt_sysroot$libdir"
6523251883Speter	  fi
6524251883Speter	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
6525251883Speter	else
6526251883Speter	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6527251883Speter	    dir="$ladir"
6528251883Speter	    absdir="$abs_ladir"
6529251883Speter	    # Remove this search path later
6530289166Speter	    func_append notinst_path " $abs_ladir"
6531251883Speter	  else
6532251883Speter	    dir="$ladir/$objdir"
6533251883Speter	    absdir="$abs_ladir/$objdir"
6534251883Speter	    # Remove this search path later
6535289166Speter	    func_append notinst_path " $abs_ladir"
6536251883Speter	  fi
6537251883Speter	fi # $installed = yes
6538289166Speter	func_stripname 'lib' '.la' "$laname"
6539289166Speter	name=$func_stripname_result
6540251883Speter
6541251883Speter	# This library was specified with -dlpreopen.
6542251883Speter	if test "$pass" = dlpreopen; then
6543289166Speter	  if test -z "$libdir" && test "$linkmode" = prog; then
6544289166Speter	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
6545251883Speter	  fi
6546289166Speter	  case "$host" in
6547289166Speter	    # special handling for platforms with PE-DLLs.
6548289166Speter	    *cygwin* | *mingw* | *cegcc* )
6549289166Speter	      # Linker will automatically link against shared library if both
6550289166Speter	      # static and shared are present.  Therefore, ensure we extract
6551289166Speter	      # symbols from the import library if a shared library is present
6552289166Speter	      # (otherwise, the dlopen module name will be incorrect).  We do
6553289166Speter	      # this by putting the import library name into $newdlprefiles.
6554289166Speter	      # We recover the dlopen module name by 'saving' the la file
6555289166Speter	      # name in a special purpose variable, and (later) extracting the
6556289166Speter	      # dlname from the la file.
6557289166Speter	      if test -n "$dlname"; then
6558289166Speter	        func_tr_sh "$dir/$linklib"
6559289166Speter	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
6560289166Speter	        func_append newdlprefiles " $dir/$linklib"
6561289166Speter	      else
6562289166Speter	        func_append newdlprefiles " $dir/$old_library"
6563289166Speter	        # Keep a list of preopened convenience libraries to check
6564289166Speter	        # that they are being used correctly in the link pass.
6565289166Speter	        test -z "$libdir" && \
6566289166Speter	          func_append dlpreconveniencelibs " $dir/$old_library"
6567289166Speter	      fi
6568289166Speter	    ;;
6569289166Speter	    * )
6570289166Speter	      # Prefer using a static library (so that no silly _DYNAMIC symbols
6571289166Speter	      # are required to link).
6572289166Speter	      if test -n "$old_library"; then
6573289166Speter	        func_append newdlprefiles " $dir/$old_library"
6574289166Speter	        # Keep a list of preopened convenience libraries to check
6575289166Speter	        # that they are being used correctly in the link pass.
6576289166Speter	        test -z "$libdir" && \
6577289166Speter	          func_append dlpreconveniencelibs " $dir/$old_library"
6578289166Speter	      # Otherwise, use the dlname, so that lt_dlopen finds it.
6579289166Speter	      elif test -n "$dlname"; then
6580289166Speter	        func_append newdlprefiles " $dir/$dlname"
6581289166Speter	      else
6582289166Speter	        func_append newdlprefiles " $dir/$linklib"
6583289166Speter	      fi
6584289166Speter	    ;;
6585289166Speter	  esac
6586251883Speter	fi # $pass = dlpreopen
6587251883Speter
6588251883Speter	if test -z "$libdir"; then
6589251883Speter	  # Link the convenience library
6590251883Speter	  if test "$linkmode" = lib; then
6591251883Speter	    deplibs="$dir/$old_library $deplibs"
6592251883Speter	  elif test "$linkmode,$pass" = "prog,link"; then
6593251883Speter	    compile_deplibs="$dir/$old_library $compile_deplibs"
6594251883Speter	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
6595251883Speter	  else
6596251883Speter	    deplibs="$lib $deplibs" # used for prog,scan pass
6597251883Speter	  fi
6598251883Speter	  continue
6599251883Speter	fi
6600251883Speter
6601251883Speter
6602251883Speter	if test "$linkmode" = prog && test "$pass" != link; then
6603289166Speter	  func_append newlib_search_path " $ladir"
6604251883Speter	  deplibs="$lib $deplibs"
6605251883Speter
6606251883Speter	  linkalldeplibs=no
6607251883Speter	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
6608251883Speter	     test "$build_libtool_libs" = no; then
6609251883Speter	    linkalldeplibs=yes
6610251883Speter	  fi
6611251883Speter
6612251883Speter	  tmp_libs=
6613251883Speter	  for deplib in $dependency_libs; do
6614251883Speter	    case $deplib in
6615289166Speter	    -L*) func_stripname '-L' '' "$deplib"
6616289166Speter	         func_resolve_sysroot "$func_stripname_result"
6617289166Speter	         func_append newlib_search_path " $func_resolve_sysroot_result"
6618289166Speter		 ;;
6619251883Speter	    esac
6620251883Speter	    # Need to link against all dependency_libs?
6621251883Speter	    if test "$linkalldeplibs" = yes; then
6622251883Speter	      deplibs="$deplib $deplibs"
6623251883Speter	    else
6624251883Speter	      # Need to hardcode shared library paths
6625251883Speter	      # or/and link against static libraries
6626251883Speter	      newdependency_libs="$deplib $newdependency_libs"
6627251883Speter	    fi
6628289166Speter	    if $opt_preserve_dup_deps ; then
6629251883Speter	      case "$tmp_libs " in
6630289166Speter	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6631251883Speter	      esac
6632251883Speter	    fi
6633289166Speter	    func_append tmp_libs " $deplib"
6634251883Speter	  done # for deplib
6635251883Speter	  continue
6636251883Speter	fi # $linkmode = prog...
6637251883Speter
6638251883Speter	if test "$linkmode,$pass" = "prog,link"; then
6639251883Speter	  if test -n "$library_names" &&
6640251883Speter	     { { test "$prefer_static_libs" = no ||
6641289166Speter	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
6642251883Speter	       test -z "$old_library"; }; then
6643251883Speter	    # We need to hardcode the library path
6644251883Speter	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
6645251883Speter	      # Make sure the rpath contains only unique directories.
6646289166Speter	      case "$temp_rpath:" in
6647289166Speter	      *"$absdir:"*) ;;
6648289166Speter	      *) func_append temp_rpath "$absdir:" ;;
6649251883Speter	      esac
6650251883Speter	    fi
6651251883Speter
6652251883Speter	    # Hardcode the library path.
6653251883Speter	    # Skip directories that are in the system default run-time
6654251883Speter	    # search path.
6655251883Speter	    case " $sys_lib_dlsearch_path " in
6656251883Speter	    *" $absdir "*) ;;
6657251883Speter	    *)
6658251883Speter	      case "$compile_rpath " in
6659251883Speter	      *" $absdir "*) ;;
6660289166Speter	      *) func_append compile_rpath " $absdir" ;;
6661251883Speter	      esac
6662251883Speter	      ;;
6663251883Speter	    esac
6664251883Speter	    case " $sys_lib_dlsearch_path " in
6665251883Speter	    *" $libdir "*) ;;
6666251883Speter	    *)
6667251883Speter	      case "$finalize_rpath " in
6668251883Speter	      *" $libdir "*) ;;
6669289166Speter	      *) func_append finalize_rpath " $libdir" ;;
6670251883Speter	      esac
6671251883Speter	      ;;
6672251883Speter	    esac
6673251883Speter	  fi # $linkmode,$pass = prog,link...
6674251883Speter
6675251883Speter	  if test "$alldeplibs" = yes &&
6676251883Speter	     { test "$deplibs_check_method" = pass_all ||
6677251883Speter	       { test "$build_libtool_libs" = yes &&
6678251883Speter		 test -n "$library_names"; }; }; then
6679251883Speter	    # We only need to search for static libraries
6680251883Speter	    continue
6681251883Speter	  fi
6682251883Speter	fi
6683251883Speter
6684251883Speter	link_static=no # Whether the deplib will be linked statically
6685251883Speter	use_static_libs=$prefer_static_libs
6686289166Speter	if test "$use_static_libs" = built && test "$installed" = yes; then
6687251883Speter	  use_static_libs=no
6688251883Speter	fi
6689251883Speter	if test -n "$library_names" &&
6690251883Speter	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
6691289166Speter	  case $host in
6692289166Speter	  *cygwin* | *mingw* | *cegcc*)
6693289166Speter	      # No point in relinking DLLs because paths are not encoded
6694289166Speter	      func_append notinst_deplibs " $lib"
6695289166Speter	      need_relink=no
6696289166Speter	    ;;
6697289166Speter	  *)
6698289166Speter	    if test "$installed" = no; then
6699289166Speter	      func_append notinst_deplibs " $lib"
6700289166Speter	      need_relink=yes
6701289166Speter	    fi
6702289166Speter	    ;;
6703289166Speter	  esac
6704251883Speter	  # This is a shared library
6705251883Speter
6706289166Speter	  # Warn about portability, can't link against -module's on some
6707289166Speter	  # systems (darwin).  Don't bleat about dlopened modules though!
6708289166Speter	  dlopenmodule=""
6709289166Speter	  for dlpremoduletest in $dlprefiles; do
6710289166Speter	    if test "X$dlpremoduletest" = "X$lib"; then
6711289166Speter	      dlopenmodule="$dlpremoduletest"
6712289166Speter	      break
6713289166Speter	    fi
6714289166Speter	  done
6715289166Speter	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
6716289166Speter	    echo
6717251883Speter	    if test "$linkmode" = prog; then
6718289166Speter	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
6719251883Speter	    else
6720289166Speter	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
6721251883Speter	    fi
6722289166Speter	    $ECHO "*** $linklib is not portable!"
6723251883Speter	  fi
6724251883Speter	  if test "$linkmode" = lib &&
6725251883Speter	     test "$hardcode_into_libs" = yes; then
6726251883Speter	    # Hardcode the library path.
6727251883Speter	    # Skip directories that are in the system default run-time
6728251883Speter	    # search path.
6729251883Speter	    case " $sys_lib_dlsearch_path " in
6730251883Speter	    *" $absdir "*) ;;
6731251883Speter	    *)
6732251883Speter	      case "$compile_rpath " in
6733251883Speter	      *" $absdir "*) ;;
6734289166Speter	      *) func_append compile_rpath " $absdir" ;;
6735251883Speter	      esac
6736251883Speter	      ;;
6737251883Speter	    esac
6738251883Speter	    case " $sys_lib_dlsearch_path " in
6739251883Speter	    *" $libdir "*) ;;
6740251883Speter	    *)
6741251883Speter	      case "$finalize_rpath " in
6742251883Speter	      *" $libdir "*) ;;
6743289166Speter	      *) func_append finalize_rpath " $libdir" ;;
6744251883Speter	      esac
6745251883Speter	      ;;
6746251883Speter	    esac
6747251883Speter	  fi
6748251883Speter
6749251883Speter	  if test -n "$old_archive_from_expsyms_cmds"; then
6750251883Speter	    # figure out the soname
6751251883Speter	    set dummy $library_names
6752289166Speter	    shift
6753289166Speter	    realname="$1"
6754289166Speter	    shift
6755289166Speter	    libname=`eval "\\$ECHO \"$libname_spec\""`
6756251883Speter	    # use dlname if we got it. it's perfectly good, no?
6757251883Speter	    if test -n "$dlname"; then
6758251883Speter	      soname="$dlname"
6759251883Speter	    elif test -n "$soname_spec"; then
6760251883Speter	      # bleh windows
6761251883Speter	      case $host in
6762289166Speter	      *cygwin* | mingw* | *cegcc*)
6763289166Speter	        func_arith $current - $age
6764289166Speter		major=$func_arith_result
6765251883Speter		versuffix="-$major"
6766251883Speter		;;
6767251883Speter	      esac
6768251883Speter	      eval soname=\"$soname_spec\"
6769251883Speter	    else
6770251883Speter	      soname="$realname"
6771251883Speter	    fi
6772251883Speter
6773251883Speter	    # Make a new name for the extract_expsyms_cmds to use
6774251883Speter	    soroot="$soname"
6775289166Speter	    func_basename "$soroot"
6776289166Speter	    soname="$func_basename_result"
6777289166Speter	    func_stripname 'lib' '.dll' "$soname"
6778289166Speter	    newlib=libimp-$func_stripname_result.a
6779251883Speter
6780251883Speter	    # If the library has no export list, then create one now
6781251883Speter	    if test -f "$output_objdir/$soname-def"; then :
6782251883Speter	    else
6783289166Speter	      func_verbose "extracting exported symbol list from \`$soname'"
6784289166Speter	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
6785251883Speter	    fi
6786251883Speter
6787251883Speter	    # Create $newlib
6788251883Speter	    if test -f "$output_objdir/$newlib"; then :; else
6789289166Speter	      func_verbose "generating import library for \`$soname'"
6790289166Speter	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
6791251883Speter	    fi
6792251883Speter	    # make sure the library variables are pointing to the new library
6793251883Speter	    dir=$output_objdir
6794251883Speter	    linklib=$newlib
6795251883Speter	  fi # test -n "$old_archive_from_expsyms_cmds"
6796251883Speter
6797289166Speter	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
6798251883Speter	    add_shlibpath=
6799251883Speter	    add_dir=
6800251883Speter	    add=
6801251883Speter	    lib_linked=yes
6802251883Speter	    case $hardcode_action in
6803251883Speter	    immediate | unsupported)
6804251883Speter	      if test "$hardcode_direct" = no; then
6805251883Speter		add="$dir/$linklib"
6806251883Speter		case $host in
6807251883Speter		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
6808251883Speter		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
6809251883Speter		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
6810251883Speter		    *-*-unixware7*) add_dir="-L$dir" ;;
6811251883Speter		  *-*-darwin* )
6812289166Speter		    # if the lib is a (non-dlopened) module then we can not
6813289166Speter		    # link against it, someone is ignoring the earlier warnings
6814251883Speter		    if /usr/bin/file -L $add 2> /dev/null |
6815289166Speter			 $GREP ": [^:]* bundle" >/dev/null ; then
6816289166Speter		      if test "X$dlopenmodule" != "X$lib"; then
6817289166Speter			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
6818289166Speter			if test -z "$old_library" ; then
6819289166Speter			  echo
6820289166Speter			  echo "*** And there doesn't seem to be a static archive available"
6821289166Speter			  echo "*** The link will probably fail, sorry"
6822289166Speter			else
6823289166Speter			  add="$dir/$old_library"
6824289166Speter			fi
6825289166Speter		      elif test -n "$old_library"; then
6826289166Speter			add="$dir/$old_library"
6827251883Speter		      fi
6828251883Speter		    fi
6829251883Speter		esac
6830251883Speter	      elif test "$hardcode_minus_L" = no; then
6831251883Speter		case $host in
6832251883Speter		*-*-sunos*) add_shlibpath="$dir" ;;
6833251883Speter		esac
6834251883Speter		add_dir="-L$dir"
6835251883Speter		add="-l$name"
6836251883Speter	      elif test "$hardcode_shlibpath_var" = no; then
6837251883Speter		add_shlibpath="$dir"
6838251883Speter		add="-l$name"
6839251883Speter	      else
6840251883Speter		lib_linked=no
6841251883Speter	      fi
6842251883Speter	      ;;
6843251883Speter	    relink)
6844289166Speter	      if test "$hardcode_direct" = yes &&
6845289166Speter	         test "$hardcode_direct_absolute" = no; then
6846251883Speter		add="$dir/$linklib"
6847251883Speter	      elif test "$hardcode_minus_L" = yes; then
6848289166Speter		add_dir="-L$absdir"
6849251883Speter		# Try looking first in the location we're being installed to.
6850251883Speter		if test -n "$inst_prefix_dir"; then
6851251883Speter		  case $libdir in
6852251883Speter		    [\\/]*)
6853289166Speter		      func_append add_dir " -L$inst_prefix_dir$libdir"
6854251883Speter		      ;;
6855251883Speter		  esac
6856251883Speter		fi
6857251883Speter		add="-l$name"
6858251883Speter	      elif test "$hardcode_shlibpath_var" = yes; then
6859251883Speter		add_shlibpath="$dir"
6860251883Speter		add="-l$name"
6861251883Speter	      else
6862251883Speter		lib_linked=no
6863251883Speter	      fi
6864251883Speter	      ;;
6865251883Speter	    *) lib_linked=no ;;
6866251883Speter	    esac
6867251883Speter
6868251883Speter	    if test "$lib_linked" != yes; then
6869289166Speter	      func_fatal_configuration "unsupported hardcode properties"
6870251883Speter	    fi
6871251883Speter
6872251883Speter	    if test -n "$add_shlibpath"; then
6873251883Speter	      case :$compile_shlibpath: in
6874251883Speter	      *":$add_shlibpath:"*) ;;
6875289166Speter	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
6876251883Speter	      esac
6877251883Speter	    fi
6878251883Speter	    if test "$linkmode" = prog; then
6879251883Speter	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
6880251883Speter	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
6881251883Speter	    else
6882251883Speter	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6883251883Speter	      test -n "$add" && deplibs="$add $deplibs"
6884289166Speter	      if test "$hardcode_direct" != yes &&
6885289166Speter		 test "$hardcode_minus_L" != yes &&
6886251883Speter		 test "$hardcode_shlibpath_var" = yes; then
6887251883Speter		case :$finalize_shlibpath: in
6888251883Speter		*":$libdir:"*) ;;
6889289166Speter		*) func_append finalize_shlibpath "$libdir:" ;;
6890251883Speter		esac
6891251883Speter	      fi
6892251883Speter	    fi
6893251883Speter	  fi
6894251883Speter
6895289166Speter	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
6896251883Speter	    add_shlibpath=
6897251883Speter	    add_dir=
6898251883Speter	    add=
6899251883Speter	    # Finalize command for both is simple: just hardcode it.
6900289166Speter	    if test "$hardcode_direct" = yes &&
6901289166Speter	       test "$hardcode_direct_absolute" = no; then
6902251883Speter	      add="$libdir/$linklib"
6903251883Speter	    elif test "$hardcode_minus_L" = yes; then
6904251883Speter	      add_dir="-L$libdir"
6905251883Speter	      add="-l$name"
6906251883Speter	    elif test "$hardcode_shlibpath_var" = yes; then
6907251883Speter	      case :$finalize_shlibpath: in
6908251883Speter	      *":$libdir:"*) ;;
6909289166Speter	      *) func_append finalize_shlibpath "$libdir:" ;;
6910251883Speter	      esac
6911251883Speter	      add="-l$name"
6912251883Speter	    elif test "$hardcode_automatic" = yes; then
6913251883Speter	      if test -n "$inst_prefix_dir" &&
6914251883Speter		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
6915289166Speter		add="$inst_prefix_dir$libdir/$linklib"
6916251883Speter	      else
6917289166Speter		add="$libdir/$linklib"
6918251883Speter	      fi
6919251883Speter	    else
6920251883Speter	      # We cannot seem to hardcode it, guess we'll fake it.
6921251883Speter	      add_dir="-L$libdir"
6922251883Speter	      # Try looking first in the location we're being installed to.
6923251883Speter	      if test -n "$inst_prefix_dir"; then
6924251883Speter		case $libdir in
6925251883Speter		  [\\/]*)
6926289166Speter		    func_append add_dir " -L$inst_prefix_dir$libdir"
6927251883Speter		    ;;
6928251883Speter		esac
6929251883Speter	      fi
6930251883Speter	      add="-l$name"
6931251883Speter	    fi
6932251883Speter
6933251883Speter	    if test "$linkmode" = prog; then
6934251883Speter	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
6935251883Speter	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
6936251883Speter	    else
6937251883Speter	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6938251883Speter	      test -n "$add" && deplibs="$add $deplibs"
6939251883Speter	    fi
6940251883Speter	  fi
6941251883Speter	elif test "$linkmode" = prog; then
6942251883Speter	  # Here we assume that one of hardcode_direct or hardcode_minus_L
6943251883Speter	  # is not unsupported.  This is valid on all known static and
6944251883Speter	  # shared platforms.
6945251883Speter	  if test "$hardcode_direct" != unsupported; then
6946251883Speter	    test -n "$old_library" && linklib="$old_library"
6947251883Speter	    compile_deplibs="$dir/$linklib $compile_deplibs"
6948251883Speter	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
6949251883Speter	  else
6950251883Speter	    compile_deplibs="-l$name -L$dir $compile_deplibs"
6951251883Speter	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
6952251883Speter	  fi
6953251883Speter	elif test "$build_libtool_libs" = yes; then
6954251883Speter	  # Not a shared library
6955251883Speter	  if test "$deplibs_check_method" != pass_all; then
6956251883Speter	    # We're trying link a shared library against a static one
6957251883Speter	    # but the system doesn't support it.
6958251883Speter
6959251883Speter	    # Just print a warning and add the library to dependency_libs so
6960251883Speter	    # that the program can be linked against the static library.
6961289166Speter	    echo
6962289166Speter	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
6963289166Speter	    echo "*** I have the capability to make that library automatically link in when"
6964289166Speter	    echo "*** you link to this library.  But I can only do this if you have a"
6965289166Speter	    echo "*** shared version of the library, which you do not appear to have."
6966251883Speter	    if test "$module" = yes; then
6967289166Speter	      echo "*** But as you try to build a module library, libtool will still create "
6968289166Speter	      echo "*** a static module, that should work as long as the dlopening application"
6969289166Speter	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
6970251883Speter	      if test -z "$global_symbol_pipe"; then
6971289166Speter		echo
6972289166Speter		echo "*** However, this would only work if libtool was able to extract symbol"
6973289166Speter		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
6974289166Speter		echo "*** not find such a program.  So, this module is probably useless."
6975289166Speter		echo "*** \`nm' from GNU binutils and a full rebuild may help."
6976251883Speter	      fi
6977251883Speter	      if test "$build_old_libs" = no; then
6978251883Speter		build_libtool_libs=module
6979251883Speter		build_old_libs=yes
6980251883Speter	      else
6981251883Speter		build_libtool_libs=no
6982251883Speter	      fi
6983251883Speter	    fi
6984251883Speter	  else
6985251883Speter	    deplibs="$dir/$old_library $deplibs"
6986251883Speter	    link_static=yes
6987251883Speter	  fi
6988251883Speter	fi # link shared/static library?
6989251883Speter
6990251883Speter	if test "$linkmode" = lib; then
6991251883Speter	  if test -n "$dependency_libs" &&
6992251883Speter	     { test "$hardcode_into_libs" != yes ||
6993251883Speter	       test "$build_old_libs" = yes ||
6994251883Speter	       test "$link_static" = yes; }; then
6995251883Speter	    # Extract -R from dependency_libs
6996251883Speter	    temp_deplibs=
6997251883Speter	    for libdir in $dependency_libs; do
6998251883Speter	      case $libdir in
6999289166Speter	      -R*) func_stripname '-R' '' "$libdir"
7000289166Speter	           temp_xrpath=$func_stripname_result
7001251883Speter		   case " $xrpath " in
7002251883Speter		   *" $temp_xrpath "*) ;;
7003289166Speter		   *) func_append xrpath " $temp_xrpath";;
7004251883Speter		   esac;;
7005289166Speter	      *) func_append temp_deplibs " $libdir";;
7006251883Speter	      esac
7007251883Speter	    done
7008251883Speter	    dependency_libs="$temp_deplibs"
7009251883Speter	  fi
7010251883Speter
7011289166Speter	  func_append newlib_search_path " $absdir"
7012251883Speter	  # Link against this library
7013251883Speter	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
7014251883Speter	  # ... and its dependency_libs
7015251883Speter	  tmp_libs=
7016251883Speter	  for deplib in $dependency_libs; do
7017251883Speter	    newdependency_libs="$deplib $newdependency_libs"
7018289166Speter	    case $deplib in
7019289166Speter              -L*) func_stripname '-L' '' "$deplib"
7020289166Speter                   func_resolve_sysroot "$func_stripname_result";;
7021289166Speter              *) func_resolve_sysroot "$deplib" ;;
7022289166Speter            esac
7023289166Speter	    if $opt_preserve_dup_deps ; then
7024251883Speter	      case "$tmp_libs " in
7025289166Speter	      *" $func_resolve_sysroot_result "*)
7026289166Speter                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
7027251883Speter	      esac
7028251883Speter	    fi
7029289166Speter	    func_append tmp_libs " $func_resolve_sysroot_result"
7030251883Speter	  done
7031251883Speter
7032251883Speter	  if test "$link_all_deplibs" != no; then
7033251883Speter	    # Add the search paths of all dependency libraries
7034251883Speter	    for deplib in $dependency_libs; do
7035289166Speter	      path=
7036251883Speter	      case $deplib in
7037251883Speter	      -L*) path="$deplib" ;;
7038251883Speter	      *.la)
7039289166Speter	        func_resolve_sysroot "$deplib"
7040289166Speter	        deplib=$func_resolve_sysroot_result
7041289166Speter	        func_dirname "$deplib" "" "."
7042289166Speter		dir=$func_dirname_result
7043251883Speter		# We need an absolute path.
7044251883Speter		case $dir in
7045251883Speter		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
7046251883Speter		*)
7047251883Speter		  absdir=`cd "$dir" && pwd`
7048251883Speter		  if test -z "$absdir"; then
7049289166Speter		    func_warning "cannot determine absolute directory name of \`$dir'"
7050251883Speter		    absdir="$dir"
7051251883Speter		  fi
7052251883Speter		  ;;
7053251883Speter		esac
7054289166Speter		if $GREP "^installed=no" $deplib > /dev/null; then
7055251883Speter		case $host in
7056251883Speter		*-*-darwin*)
7057289166Speter		  depdepl=
7058251883Speter		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
7059251883Speter		  if test -n "$deplibrary_names" ; then
7060251883Speter		    for tmp in $deplibrary_names ; do
7061251883Speter		      depdepl=$tmp
7062251883Speter		    done
7063289166Speter		    if test -f "$absdir/$objdir/$depdepl" ; then
7064289166Speter		      depdepl="$absdir/$objdir/$depdepl"
7065289166Speter		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
7066289166Speter                      if test -z "$darwin_install_name"; then
7067289166Speter                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
7068289166Speter                      fi
7069289166Speter		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
7070289166Speter		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
7071289166Speter		      path=
7072251883Speter		    fi
7073251883Speter		  fi
7074251883Speter		  ;;
7075251883Speter		*)
7076289166Speter		  path="-L$absdir/$objdir"
7077251883Speter		  ;;
7078251883Speter		esac
7079289166Speter		else
7080289166Speter		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
7081289166Speter		  test -z "$libdir" && \
7082289166Speter		    func_fatal_error "\`$deplib' is not a valid libtool archive"
7083289166Speter		  #test "$absdir" != "$libdir" && \
7084289166Speter		  #  func_warning "\`$deplib' seems to be moved"
7085289166Speter
7086289166Speter		  path="-L$absdir"
7087289166Speter		fi
7088251883Speter		;;
7089251883Speter	      esac
7090251883Speter	      case " $deplibs " in
7091251883Speter	      *" $path "*) ;;
7092251883Speter	      *) deplibs="$path $deplibs" ;;
7093251883Speter	      esac
7094251883Speter	    done
7095251883Speter	  fi # link_all_deplibs != no
7096251883Speter	fi # linkmode = lib
7097251883Speter      done # for deplib in $libs
7098289166Speter      if test "$pass" = link; then
7099289166Speter	if test "$linkmode" = "prog"; then
7100289166Speter	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
7101289166Speter	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
7102289166Speter	else
7103289166Speter	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7104289166Speter	fi
7105289166Speter      fi
7106251883Speter      dependency_libs="$newdependency_libs"
7107251883Speter      if test "$pass" = dlpreopen; then
7108251883Speter	# Link the dlpreopened libraries before other libraries
7109251883Speter	for deplib in $save_deplibs; do
7110251883Speter	  deplibs="$deplib $deplibs"
7111251883Speter	done
7112251883Speter      fi
7113251883Speter      if test "$pass" != dlopen; then
7114251883Speter	if test "$pass" != conv; then
7115251883Speter	  # Make sure lib_search_path contains only unique directories.
7116251883Speter	  lib_search_path=
7117251883Speter	  for dir in $newlib_search_path; do
7118251883Speter	    case "$lib_search_path " in
7119251883Speter	    *" $dir "*) ;;
7120289166Speter	    *) func_append lib_search_path " $dir" ;;
7121251883Speter	    esac
7122251883Speter	  done
7123251883Speter	  newlib_search_path=
7124251883Speter	fi
7125251883Speter
7126251883Speter	if test "$linkmode,$pass" != "prog,link"; then
7127251883Speter	  vars="deplibs"
7128251883Speter	else
7129251883Speter	  vars="compile_deplibs finalize_deplibs"
7130251883Speter	fi
7131251883Speter	for var in $vars dependency_libs; do
7132251883Speter	  # Add libraries to $var in reverse order
7133251883Speter	  eval tmp_libs=\"\$$var\"
7134251883Speter	  new_libs=
7135251883Speter	  for deplib in $tmp_libs; do
7136251883Speter	    # FIXME: Pedantically, this is the right thing to do, so
7137251883Speter	    #        that some nasty dependency loop isn't accidentally
7138251883Speter	    #        broken:
7139251883Speter	    #new_libs="$deplib $new_libs"
7140251883Speter	    # Pragmatically, this seems to cause very few problems in
7141251883Speter	    # practice:
7142251883Speter	    case $deplib in
7143251883Speter	    -L*) new_libs="$deplib $new_libs" ;;
7144251883Speter	    -R*) ;;
7145251883Speter	    *)
7146251883Speter	      # And here is the reason: when a library appears more
7147251883Speter	      # than once as an explicit dependence of a library, or
7148251883Speter	      # is implicitly linked in more than once by the
7149251883Speter	      # compiler, it is considered special, and multiple
7150251883Speter	      # occurrences thereof are not removed.  Compare this
7151251883Speter	      # with having the same library being listed as a
7152251883Speter	      # dependency of multiple other libraries: in this case,
7153251883Speter	      # we know (pedantically, we assume) the library does not
7154251883Speter	      # need to be listed more than once, so we keep only the
7155251883Speter	      # last copy.  This is not always right, but it is rare
7156251883Speter	      # enough that we require users that really mean to play
7157251883Speter	      # such unportable linking tricks to link the library
7158251883Speter	      # using -Wl,-lname, so that libtool does not consider it
7159251883Speter	      # for duplicate removal.
7160251883Speter	      case " $specialdeplibs " in
7161251883Speter	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
7162251883Speter	      *)
7163251883Speter		case " $new_libs " in
7164251883Speter		*" $deplib "*) ;;
7165251883Speter		*) new_libs="$deplib $new_libs" ;;
7166251883Speter		esac
7167251883Speter		;;
7168251883Speter	      esac
7169251883Speter	      ;;
7170251883Speter	    esac
7171251883Speter	  done
7172251883Speter	  tmp_libs=
7173251883Speter	  for deplib in $new_libs; do
7174251883Speter	    case $deplib in
7175251883Speter	    -L*)
7176251883Speter	      case " $tmp_libs " in
7177251883Speter	      *" $deplib "*) ;;
7178289166Speter	      *) func_append tmp_libs " $deplib" ;;
7179251883Speter	      esac
7180251883Speter	      ;;
7181289166Speter	    *) func_append tmp_libs " $deplib" ;;
7182251883Speter	    esac
7183251883Speter	  done
7184251883Speter	  eval $var=\"$tmp_libs\"
7185251883Speter	done # for var
7186251883Speter      fi
7187251883Speter      # Last step: remove runtime libs from dependency_libs
7188251883Speter      # (they stay in deplibs)
7189251883Speter      tmp_libs=
7190251883Speter      for i in $dependency_libs ; do
7191251883Speter	case " $predeps $postdeps $compiler_lib_search_path " in
7192251883Speter	*" $i "*)
7193251883Speter	  i=""
7194251883Speter	  ;;
7195251883Speter	esac
7196251883Speter	if test -n "$i" ; then
7197289166Speter	  func_append tmp_libs " $i"
7198251883Speter	fi
7199251883Speter      done
7200251883Speter      dependency_libs=$tmp_libs
7201251883Speter    done # for pass
7202251883Speter    if test "$linkmode" = prog; then
7203251883Speter      dlfiles="$newdlfiles"
7204289166Speter    fi
7205289166Speter    if test "$linkmode" = prog || test "$linkmode" = lib; then
7206251883Speter      dlprefiles="$newdlprefiles"
7207251883Speter    fi
7208251883Speter
7209251883Speter    case $linkmode in
7210251883Speter    oldlib)
7211251883Speter      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
7212289166Speter	func_warning "\`-dlopen' is ignored for archives"
7213251883Speter      fi
7214251883Speter
7215289166Speter      case " $deplibs" in
7216289166Speter      *\ -l* | *\ -L*)
7217289166Speter	func_warning "\`-l' and \`-L' are ignored for archives" ;;
7218289166Speter      esac
7219251883Speter
7220289166Speter      test -n "$rpath" && \
7221289166Speter	func_warning "\`-rpath' is ignored for archives"
7222251883Speter
7223289166Speter      test -n "$xrpath" && \
7224289166Speter	func_warning "\`-R' is ignored for archives"
7225251883Speter
7226289166Speter      test -n "$vinfo" && \
7227289166Speter	func_warning "\`-version-info/-version-number' is ignored for archives"
7228251883Speter
7229289166Speter      test -n "$release" && \
7230289166Speter	func_warning "\`-release' is ignored for archives"
7231251883Speter
7232289166Speter      test -n "$export_symbols$export_symbols_regex" && \
7233289166Speter	func_warning "\`-export-symbols' is ignored for archives"
7234289166Speter
7235251883Speter      # Now set the variables for building old libraries.
7236251883Speter      build_libtool_libs=no
7237251883Speter      oldlibs="$output"
7238289166Speter      func_append objs "$old_deplibs"
7239251883Speter      ;;
7240251883Speter
7241251883Speter    lib)
7242251883Speter      # Make sure we only generate libraries of the form `libNAME.la'.
7243251883Speter      case $outputname in
7244251883Speter      lib*)
7245289166Speter	func_stripname 'lib' '.la' "$outputname"
7246289166Speter	name=$func_stripname_result
7247251883Speter	eval shared_ext=\"$shrext_cmds\"
7248251883Speter	eval libname=\"$libname_spec\"
7249251883Speter	;;
7250251883Speter      *)
7251289166Speter	test "$module" = no && \
7252289166Speter	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
7253289166Speter
7254251883Speter	if test "$need_lib_prefix" != no; then
7255251883Speter	  # Add the "lib" prefix for modules if required
7256289166Speter	  func_stripname '' '.la' "$outputname"
7257289166Speter	  name=$func_stripname_result
7258251883Speter	  eval shared_ext=\"$shrext_cmds\"
7259251883Speter	  eval libname=\"$libname_spec\"
7260251883Speter	else
7261289166Speter	  func_stripname '' '.la' "$outputname"
7262289166Speter	  libname=$func_stripname_result
7263251883Speter	fi
7264251883Speter	;;
7265251883Speter      esac
7266251883Speter
7267251883Speter      if test -n "$objs"; then
7268251883Speter	if test "$deplibs_check_method" != pass_all; then
7269289166Speter	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
7270251883Speter	else
7271289166Speter	  echo
7272289166Speter	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
7273289166Speter	  $ECHO "*** objects $objs is not portable!"
7274289166Speter	  func_append libobjs " $objs"
7275251883Speter	fi
7276251883Speter      fi
7277251883Speter
7278289166Speter      test "$dlself" != no && \
7279289166Speter	func_warning "\`-dlopen self' is ignored for libtool libraries"
7280251883Speter
7281251883Speter      set dummy $rpath
7282289166Speter      shift
7283289166Speter      test "$#" -gt 1 && \
7284289166Speter	func_warning "ignoring multiple \`-rpath's for a libtool library"
7285251883Speter
7286289166Speter      install_libdir="$1"
7287289166Speter
7288251883Speter      oldlibs=
7289251883Speter      if test -z "$rpath"; then
7290251883Speter	if test "$build_libtool_libs" = yes; then
7291251883Speter	  # Building a libtool convenience library.
7292251883Speter	  # Some compilers have problems with a `.al' extension so
7293251883Speter	  # convenience libraries should have the same extension an
7294251883Speter	  # archive normally would.
7295251883Speter	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
7296251883Speter	  build_libtool_libs=convenience
7297251883Speter	  build_old_libs=yes
7298251883Speter	fi
7299251883Speter
7300289166Speter	test -n "$vinfo" && \
7301289166Speter	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
7302251883Speter
7303289166Speter	test -n "$release" && \
7304289166Speter	  func_warning "\`-release' is ignored for convenience libraries"
7305251883Speter      else
7306251883Speter
7307251883Speter	# Parse the version information argument.
7308251883Speter	save_ifs="$IFS"; IFS=':'
7309251883Speter	set dummy $vinfo 0 0 0
7310289166Speter	shift
7311251883Speter	IFS="$save_ifs"
7312251883Speter
7313289166Speter	test -n "$7" && \
7314289166Speter	  func_fatal_help "too many parameters to \`-version-info'"
7315251883Speter
7316251883Speter	# convert absolute version numbers to libtool ages
7317251883Speter	# this retains compatibility with .la files and attempts
7318251883Speter	# to make the code below a bit more comprehensible
7319251883Speter
7320251883Speter	case $vinfo_number in
7321251883Speter	yes)
7322289166Speter	  number_major="$1"
7323289166Speter	  number_minor="$2"
7324289166Speter	  number_revision="$3"
7325251883Speter	  #
7326251883Speter	  # There are really only two kinds -- those that
7327251883Speter	  # use the current revision as the major version
7328251883Speter	  # and those that subtract age and use age as
7329251883Speter	  # a minor version.  But, then there is irix
7330251883Speter	  # which has an extra 1 added just for fun
7331251883Speter	  #
7332251883Speter	  case $version_type in
7333289166Speter	  # correct linux to gnu/linux during the next big refactor
7334251883Speter	  darwin|linux|osf|windows|none)
7335289166Speter	    func_arith $number_major + $number_minor
7336289166Speter	    current=$func_arith_result
7337251883Speter	    age="$number_minor"
7338251883Speter	    revision="$number_revision"
7339251883Speter	    ;;
7340289166Speter	  freebsd-aout|freebsd-elf|qnx|sunos)
7341251883Speter	    current="$number_major"
7342251883Speter	    revision="$number_minor"
7343251883Speter	    age="0"
7344251883Speter	    ;;
7345251883Speter	  irix|nonstopux)
7346289166Speter	    func_arith $number_major + $number_minor
7347289166Speter	    current=$func_arith_result
7348251883Speter	    age="$number_minor"
7349251883Speter	    revision="$number_minor"
7350251883Speter	    lt_irix_increment=no
7351251883Speter	    ;;
7352251883Speter	  esac
7353251883Speter	  ;;
7354251883Speter	no)
7355289166Speter	  current="$1"
7356289166Speter	  revision="$2"
7357289166Speter	  age="$3"
7358251883Speter	  ;;
7359251883Speter	esac
7360251883Speter
7361251883Speter	# Check that each of the things are valid numbers.
7362251883Speter	case $current in
7363251883Speter	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]) ;;
7364251883Speter	*)
7365289166Speter	  func_error "CURRENT \`$current' must be a nonnegative integer"
7366289166Speter	  func_fatal_error "\`$vinfo' is not valid version information"
7367251883Speter	  ;;
7368251883Speter	esac
7369251883Speter
7370251883Speter	case $revision in
7371251883Speter	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]) ;;
7372251883Speter	*)
7373289166Speter	  func_error "REVISION \`$revision' must be a nonnegative integer"
7374289166Speter	  func_fatal_error "\`$vinfo' is not valid version information"
7375251883Speter	  ;;
7376251883Speter	esac
7377251883Speter
7378251883Speter	case $age in
7379251883Speter	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]) ;;
7380251883Speter	*)
7381289166Speter	  func_error "AGE \`$age' must be a nonnegative integer"
7382289166Speter	  func_fatal_error "\`$vinfo' is not valid version information"
7383251883Speter	  ;;
7384251883Speter	esac
7385251883Speter
7386251883Speter	if test "$age" -gt "$current"; then
7387289166Speter	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
7388289166Speter	  func_fatal_error "\`$vinfo' is not valid version information"
7389251883Speter	fi
7390251883Speter
7391251883Speter	# Calculate the version variables.
7392251883Speter	major=
7393251883Speter	versuffix=
7394251883Speter	verstring=
7395251883Speter	case $version_type in
7396251883Speter	none) ;;
7397251883Speter
7398251883Speter	darwin)
7399251883Speter	  # Like Linux, but with the current version available in
7400251883Speter	  # verstring for coding it into the library header
7401289166Speter	  func_arith $current - $age
7402289166Speter	  major=.$func_arith_result
7403251883Speter	  versuffix="$major.$age.$revision"
7404251883Speter	  # Darwin ld doesn't like 0 for these options...
7405289166Speter	  func_arith $current + 1
7406289166Speter	  minor_current=$func_arith_result
7407251883Speter	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
7408251883Speter	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
7409251883Speter	  ;;
7410251883Speter
7411251883Speter	freebsd-aout)
7412251883Speter	  major=".$current"
7413251883Speter	  versuffix=".$current.$revision";
7414251883Speter	  ;;
7415251883Speter
7416251883Speter	freebsd-elf)
7417251883Speter	  major=".$current"
7418289166Speter	  versuffix=".$current"
7419251883Speter	  ;;
7420251883Speter
7421251883Speter	irix | nonstopux)
7422251883Speter	  if test "X$lt_irix_increment" = "Xno"; then
7423289166Speter	    func_arith $current - $age
7424251883Speter	  else
7425289166Speter	    func_arith $current - $age + 1
7426251883Speter	  fi
7427289166Speter	  major=$func_arith_result
7428289166Speter
7429251883Speter	  case $version_type in
7430251883Speter	    nonstopux) verstring_prefix=nonstopux ;;
7431251883Speter	    *)         verstring_prefix=sgi ;;
7432251883Speter	  esac
7433251883Speter	  verstring="$verstring_prefix$major.$revision"
7434251883Speter
7435251883Speter	  # Add in all the interfaces that we are compatible with.
7436251883Speter	  loop=$revision
7437251883Speter	  while test "$loop" -ne 0; do
7438289166Speter	    func_arith $revision - $loop
7439289166Speter	    iface=$func_arith_result
7440289166Speter	    func_arith $loop - 1
7441289166Speter	    loop=$func_arith_result
7442251883Speter	    verstring="$verstring_prefix$major.$iface:$verstring"
7443251883Speter	  done
7444251883Speter
7445251883Speter	  # Before this point, $major must not contain `.'.
7446251883Speter	  major=.$major
7447251883Speter	  versuffix="$major.$revision"
7448251883Speter	  ;;
7449251883Speter
7450289166Speter	linux) # correct to gnu/linux during the next big refactor
7451289166Speter	  func_arith $current - $age
7452289166Speter	  major=.$func_arith_result
7453251883Speter	  versuffix="$major.$age.$revision"
7454251883Speter	  ;;
7455251883Speter
7456251883Speter	osf)
7457289166Speter	  func_arith $current - $age
7458289166Speter	  major=.$func_arith_result
7459251883Speter	  versuffix=".$current.$age.$revision"
7460251883Speter	  verstring="$current.$age.$revision"
7461251883Speter
7462251883Speter	  # Add in all the interfaces that we are compatible with.
7463251883Speter	  loop=$age
7464251883Speter	  while test "$loop" -ne 0; do
7465289166Speter	    func_arith $current - $loop
7466289166Speter	    iface=$func_arith_result
7467289166Speter	    func_arith $loop - 1
7468289166Speter	    loop=$func_arith_result
7469251883Speter	    verstring="$verstring:${iface}.0"
7470251883Speter	  done
7471251883Speter
7472251883Speter	  # Make executables depend on our current version.
7473289166Speter	  func_append verstring ":${current}.0"
7474251883Speter	  ;;
7475251883Speter
7476289166Speter	qnx)
7477289166Speter	  major=".$current"
7478289166Speter	  versuffix=".$current"
7479289166Speter	  ;;
7480289166Speter
7481251883Speter	sunos)
7482251883Speter	  major=".$current"
7483251883Speter	  versuffix=".$current.$revision"
7484251883Speter	  ;;
7485251883Speter
7486251883Speter	windows)
7487251883Speter	  # Use '-' rather than '.', since we only want one
7488251883Speter	  # extension on DOS 8.3 filesystems.
7489289166Speter	  func_arith $current - $age
7490289166Speter	  major=$func_arith_result
7491251883Speter	  versuffix="-$major"
7492251883Speter	  ;;
7493251883Speter
7494251883Speter	*)
7495289166Speter	  func_fatal_configuration "unknown library version type \`$version_type'"
7496251883Speter	  ;;
7497251883Speter	esac
7498251883Speter
7499251883Speter	# Clear the version info if we defaulted, and they specified a release.
7500251883Speter	if test -z "$vinfo" && test -n "$release"; then
7501251883Speter	  major=
7502251883Speter	  case $version_type in
7503251883Speter	  darwin)
7504251883Speter	    # we can't check for "0.0" in archive_cmds due to quoting
7505251883Speter	    # problems, so we reset it completely
7506251883Speter	    verstring=
7507251883Speter	    ;;
7508251883Speter	  *)
7509251883Speter	    verstring="0.0"
7510251883Speter	    ;;
7511251883Speter	  esac
7512251883Speter	  if test "$need_version" = no; then
7513251883Speter	    versuffix=
7514251883Speter	  else
7515251883Speter	    versuffix=".0.0"
7516251883Speter	  fi
7517251883Speter	fi
7518251883Speter
7519251883Speter	# Remove version info from name if versioning should be avoided
7520251883Speter	if test "$avoid_version" = yes && test "$need_version" = no; then
7521251883Speter	  major=
7522251883Speter	  versuffix=
7523251883Speter	  verstring=""
7524251883Speter	fi
7525251883Speter
7526251883Speter	# Check to see if the archive will have undefined symbols.
7527251883Speter	if test "$allow_undefined" = yes; then
7528251883Speter	  if test "$allow_undefined_flag" = unsupported; then
7529289166Speter	    func_warning "undefined symbols not allowed in $host shared libraries"
7530251883Speter	    build_libtool_libs=no
7531251883Speter	    build_old_libs=yes
7532251883Speter	  fi
7533251883Speter	else
7534251883Speter	  # Don't allow undefined symbols.
7535251883Speter	  allow_undefined_flag="$no_undefined_flag"
7536251883Speter	fi
7537289166Speter
7538251883Speter      fi
7539251883Speter
7540289166Speter      func_generate_dlsyms "$libname" "$libname" "yes"
7541289166Speter      func_append libobjs " $symfileobj"
7542289166Speter      test "X$libobjs" = "X " && libobjs=
7543289166Speter
7544289166Speter      if test "$opt_mode" != relink; then
7545251883Speter	# Remove our outputs, but don't remove object files since they
7546251883Speter	# may have been created when compiling PIC objects.
7547251883Speter	removelist=
7548289166Speter	tempremovelist=`$ECHO "$output_objdir/*"`
7549251883Speter	for p in $tempremovelist; do
7550251883Speter	  case $p in
7551289166Speter	    *.$objext | *.gcno)
7552251883Speter	       ;;
7553251883Speter	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
7554251883Speter	       if test "X$precious_files_regex" != "X"; then
7555289166Speter		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
7556289166Speter		 then
7557251883Speter		   continue
7558251883Speter		 fi
7559251883Speter	       fi
7560289166Speter	       func_append removelist " $p"
7561251883Speter	       ;;
7562251883Speter	    *) ;;
7563251883Speter	  esac
7564251883Speter	done
7565289166Speter	test -n "$removelist" && \
7566289166Speter	  func_show_eval "${RM}r \$removelist"
7567251883Speter      fi
7568251883Speter
7569251883Speter      # Now set the variables for building old libraries.
7570251883Speter      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
7571289166Speter	func_append oldlibs " $output_objdir/$libname.$libext"
7572251883Speter
7573251883Speter	# Transform .lo files to .o files.
7574289166Speter	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
7575251883Speter      fi
7576251883Speter
7577251883Speter      # Eliminate all temporary directories.
7578251883Speter      #for path in $notinst_path; do
7579289166Speter      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
7580289166Speter      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
7581289166Speter      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
7582251883Speter      #done
7583251883Speter
7584251883Speter      if test -n "$xrpath"; then
7585251883Speter	# If the user specified any rpath flags, then add them.
7586251883Speter	temp_xrpath=
7587251883Speter	for libdir in $xrpath; do
7588289166Speter	  func_replace_sysroot "$libdir"
7589289166Speter	  func_append temp_xrpath " -R$func_replace_sysroot_result"
7590251883Speter	  case "$finalize_rpath " in
7591251883Speter	  *" $libdir "*) ;;
7592289166Speter	  *) func_append finalize_rpath " $libdir" ;;
7593251883Speter	  esac
7594251883Speter	done
7595251883Speter	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
7596251883Speter	  dependency_libs="$temp_xrpath $dependency_libs"
7597251883Speter	fi
7598251883Speter      fi
7599251883Speter
7600251883Speter      # Make sure dlfiles contains only unique files that won't be dlpreopened
7601251883Speter      old_dlfiles="$dlfiles"
7602251883Speter      dlfiles=
7603251883Speter      for lib in $old_dlfiles; do
7604251883Speter	case " $dlprefiles $dlfiles " in
7605251883Speter	*" $lib "*) ;;
7606289166Speter	*) func_append dlfiles " $lib" ;;
7607251883Speter	esac
7608251883Speter      done
7609251883Speter
7610251883Speter      # Make sure dlprefiles contains only unique files
7611251883Speter      old_dlprefiles="$dlprefiles"
7612251883Speter      dlprefiles=
7613251883Speter      for lib in $old_dlprefiles; do
7614251883Speter	case "$dlprefiles " in
7615251883Speter	*" $lib "*) ;;
7616289166Speter	*) func_append dlprefiles " $lib" ;;
7617251883Speter	esac
7618251883Speter      done
7619251883Speter
7620251883Speter      if test "$build_libtool_libs" = yes; then
7621251883Speter	if test -n "$rpath"; then
7622251883Speter	  case $host in
7623289166Speter	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
7624251883Speter	    # these systems don't actually have a c library (as such)!
7625251883Speter	    ;;
7626251883Speter	  *-*-rhapsody* | *-*-darwin1.[012])
7627251883Speter	    # Rhapsody C library is in the System framework
7628289166Speter	    func_append deplibs " System.ltframework"
7629251883Speter	    ;;
7630251883Speter	  *-*-netbsd*)
7631251883Speter	    # Don't link with libc until the a.out ld.so is fixed.
7632251883Speter	    ;;
7633251883Speter	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
7634251883Speter	    # Do not include libc due to us having libc/libc_r.
7635251883Speter	    ;;
7636251883Speter	  *-*-sco3.2v5* | *-*-sco5v6*)
7637251883Speter	    # Causes problems with __ctype
7638251883Speter	    ;;
7639251883Speter	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7640251883Speter	    # Compiler inserts libc in the correct place for threads to work
7641251883Speter	    ;;
7642289166Speter	  *)
7643251883Speter	    # Add libc to deplibs on all other systems if necessary.
7644251883Speter	    if test "$build_libtool_need_lc" = "yes"; then
7645289166Speter	      func_append deplibs " -lc"
7646251883Speter	    fi
7647251883Speter	    ;;
7648251883Speter	  esac
7649251883Speter	fi
7650251883Speter
7651251883Speter	# Transform deplibs into only deplibs that can be linked in shared.
7652251883Speter	name_save=$name
7653251883Speter	libname_save=$libname
7654251883Speter	release_save=$release
7655251883Speter	versuffix_save=$versuffix
7656251883Speter	major_save=$major
7657251883Speter	# I'm not sure if I'm treating the release correctly.  I think
7658251883Speter	# release should show up in the -l (ie -lgmp5) so we don't want to
7659251883Speter	# add it in twice.  Is that correct?
7660251883Speter	release=""
7661251883Speter	versuffix=""
7662251883Speter	major=""
7663251883Speter	newdeplibs=
7664251883Speter	droppeddeps=no
7665251883Speter	case $deplibs_check_method in
7666251883Speter	pass_all)
7667251883Speter	  # Don't check for shared/static.  Everything works.
7668251883Speter	  # This might be a little naive.  We might want to check
7669251883Speter	  # whether the library exists or not.  But this is on
7670251883Speter	  # osf3 & osf4 and I'm not really sure... Just
7671251883Speter	  # implementing what was already the behavior.
7672251883Speter	  newdeplibs=$deplibs
7673251883Speter	  ;;
7674251883Speter	test_compile)
7675251883Speter	  # This code stresses the "libraries are programs" paradigm to its
7676251883Speter	  # limits. Maybe even breaks it.  We compile a program, linking it
7677251883Speter	  # against the deplibs as a proxy for the library.  Then we can check
7678251883Speter	  # whether they linked in statically or dynamically with ldd.
7679289166Speter	  $opt_dry_run || $RM conftest.c
7680251883Speter	  cat > conftest.c <<EOF
7681251883Speter	  int main() { return 0; }
7682251883SpeterEOF
7683289166Speter	  $opt_dry_run || $RM conftest
7684251883Speter	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
7685251883Speter	    ldd_output=`ldd conftest`
7686251883Speter	    for i in $deplibs; do
7687289166Speter	      case $i in
7688289166Speter	      -l*)
7689289166Speter		func_stripname -l '' "$i"
7690289166Speter		name=$func_stripname_result
7691251883Speter		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7692251883Speter		  case " $predeps $postdeps " in
7693251883Speter		  *" $i "*)
7694289166Speter		    func_append newdeplibs " $i"
7695251883Speter		    i=""
7696251883Speter		    ;;
7697251883Speter		  esac
7698289166Speter		fi
7699251883Speter		if test -n "$i" ; then
7700289166Speter		  libname=`eval "\\$ECHO \"$libname_spec\""`
7701289166Speter		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7702289166Speter		  set dummy $deplib_matches; shift
7703289166Speter		  deplib_match=$1
7704251883Speter		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
7705289166Speter		    func_append newdeplibs " $i"
7706251883Speter		  else
7707251883Speter		    droppeddeps=yes
7708289166Speter		    echo
7709289166Speter		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
7710289166Speter		    echo "*** I have the capability to make that library automatically link in when"
7711289166Speter		    echo "*** you link to this library.  But I can only do this if you have a"
7712289166Speter		    echo "*** shared version of the library, which I believe you do not have"
7713289166Speter		    echo "*** because a test_compile did reveal that the linker did not use it for"
7714289166Speter		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
7715251883Speter		  fi
7716251883Speter		fi
7717289166Speter		;;
7718289166Speter	      *)
7719289166Speter		func_append newdeplibs " $i"
7720289166Speter		;;
7721289166Speter	      esac
7722251883Speter	    done
7723251883Speter	  else
7724251883Speter	    # Error occurred in the first compile.  Let's try to salvage
7725251883Speter	    # the situation: Compile a separate program for each library.
7726251883Speter	    for i in $deplibs; do
7727289166Speter	      case $i in
7728289166Speter	      -l*)
7729289166Speter		func_stripname -l '' "$i"
7730289166Speter		name=$func_stripname_result
7731289166Speter		$opt_dry_run || $RM conftest
7732251883Speter		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
7733251883Speter		  ldd_output=`ldd conftest`
7734251883Speter		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7735251883Speter		    case " $predeps $postdeps " in
7736251883Speter		    *" $i "*)
7737289166Speter		      func_append newdeplibs " $i"
7738251883Speter		      i=""
7739251883Speter		      ;;
7740251883Speter		    esac
7741251883Speter		  fi
7742251883Speter		  if test -n "$i" ; then
7743289166Speter		    libname=`eval "\\$ECHO \"$libname_spec\""`
7744289166Speter		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7745289166Speter		    set dummy $deplib_matches; shift
7746289166Speter		    deplib_match=$1
7747251883Speter		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
7748289166Speter		      func_append newdeplibs " $i"
7749251883Speter		    else
7750251883Speter		      droppeddeps=yes
7751289166Speter		      echo
7752289166Speter		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
7753289166Speter		      echo "*** I have the capability to make that library automatically link in when"
7754289166Speter		      echo "*** you link to this library.  But I can only do this if you have a"
7755289166Speter		      echo "*** shared version of the library, which you do not appear to have"
7756289166Speter		      echo "*** because a test_compile did reveal that the linker did not use this one"
7757289166Speter		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
7758251883Speter		    fi
7759251883Speter		  fi
7760251883Speter		else
7761251883Speter		  droppeddeps=yes
7762289166Speter		  echo
7763289166Speter		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
7764289166Speter		  echo "*** make it link in!  You will probably need to install it or some"
7765289166Speter		  echo "*** library that it depends on before this library will be fully"
7766289166Speter		  echo "*** functional.  Installing it before continuing would be even better."
7767251883Speter		fi
7768289166Speter		;;
7769289166Speter	      *)
7770289166Speter		func_append newdeplibs " $i"
7771289166Speter		;;
7772289166Speter	      esac
7773251883Speter	    done
7774251883Speter	  fi
7775251883Speter	  ;;
7776251883Speter	file_magic*)
7777289166Speter	  set dummy $deplibs_check_method; shift
7778289166Speter	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7779251883Speter	  for a_deplib in $deplibs; do
7780289166Speter	    case $a_deplib in
7781289166Speter	    -l*)
7782289166Speter	      func_stripname -l '' "$a_deplib"
7783289166Speter	      name=$func_stripname_result
7784251883Speter	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7785251883Speter		case " $predeps $postdeps " in
7786251883Speter		*" $a_deplib "*)
7787289166Speter		  func_append newdeplibs " $a_deplib"
7788251883Speter		  a_deplib=""
7789251883Speter		  ;;
7790251883Speter		esac
7791251883Speter	      fi
7792251883Speter	      if test -n "$a_deplib" ; then
7793289166Speter		libname=`eval "\\$ECHO \"$libname_spec\""`
7794289166Speter		if test -n "$file_magic_glob"; then
7795289166Speter		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
7796289166Speter		else
7797289166Speter		  libnameglob=$libname
7798289166Speter		fi
7799289166Speter		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
7800251883Speter		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7801289166Speter		  if test "$want_nocaseglob" = yes; then
7802289166Speter		    shopt -s nocaseglob
7803289166Speter		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
7804289166Speter		    $nocaseglob
7805289166Speter		  else
7806289166Speter		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
7807289166Speter		  fi
7808251883Speter		  for potent_lib in $potential_libs; do
7809251883Speter		      # Follow soft links.
7810289166Speter		      if ls -lLd "$potent_lib" 2>/dev/null |
7811289166Speter			 $GREP " -> " >/dev/null; then
7812251883Speter			continue
7813251883Speter		      fi
7814251883Speter		      # The statement above tries to avoid entering an
7815251883Speter		      # endless loop below, in case of cyclic links.
7816251883Speter		      # We might still enter an endless loop, since a link
7817251883Speter		      # loop can be closed while we follow links,
7818251883Speter		      # but so what?
7819251883Speter		      potlib="$potent_lib"
7820251883Speter		      while test -h "$potlib" 2>/dev/null; do
7821251883Speter			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
7822251883Speter			case $potliblink in
7823251883Speter			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
7824289166Speter			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
7825251883Speter			esac
7826251883Speter		      done
7827289166Speter		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
7828289166Speter			 $SED -e 10q |
7829289166Speter			 $EGREP "$file_magic_regex" > /dev/null; then
7830289166Speter			func_append newdeplibs " $a_deplib"
7831251883Speter			a_deplib=""
7832251883Speter			break 2
7833251883Speter		      fi
7834251883Speter		  done
7835251883Speter		done
7836251883Speter	      fi
7837251883Speter	      if test -n "$a_deplib" ; then
7838251883Speter		droppeddeps=yes
7839289166Speter		echo
7840289166Speter		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
7841289166Speter		echo "*** I have the capability to make that library automatically link in when"
7842289166Speter		echo "*** you link to this library.  But I can only do this if you have a"
7843289166Speter		echo "*** shared version of the library, which you do not appear to have"
7844289166Speter		echo "*** because I did check the linker path looking for a file starting"
7845251883Speter		if test -z "$potlib" ; then
7846289166Speter		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
7847251883Speter		else
7848289166Speter		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7849289166Speter		  $ECHO "*** using a file magic. Last file checked: $potlib"
7850251883Speter		fi
7851251883Speter	      fi
7852289166Speter	      ;;
7853289166Speter	    *)
7854251883Speter	      # Add a -L argument.
7855289166Speter	      func_append newdeplibs " $a_deplib"
7856289166Speter	      ;;
7857289166Speter	    esac
7858251883Speter	  done # Gone through all deplibs.
7859251883Speter	  ;;
7860251883Speter	match_pattern*)
7861289166Speter	  set dummy $deplibs_check_method; shift
7862289166Speter	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7863251883Speter	  for a_deplib in $deplibs; do
7864289166Speter	    case $a_deplib in
7865289166Speter	    -l*)
7866289166Speter	      func_stripname -l '' "$a_deplib"
7867289166Speter	      name=$func_stripname_result
7868251883Speter	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7869251883Speter		case " $predeps $postdeps " in
7870251883Speter		*" $a_deplib "*)
7871289166Speter		  func_append newdeplibs " $a_deplib"
7872251883Speter		  a_deplib=""
7873251883Speter		  ;;
7874251883Speter		esac
7875251883Speter	      fi
7876251883Speter	      if test -n "$a_deplib" ; then
7877289166Speter		libname=`eval "\\$ECHO \"$libname_spec\""`
7878251883Speter		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7879251883Speter		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
7880251883Speter		  for potent_lib in $potential_libs; do
7881251883Speter		    potlib="$potent_lib" # see symlink-check above in file_magic test
7882289166Speter		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
7883289166Speter		       $EGREP "$match_pattern_regex" > /dev/null; then
7884289166Speter		      func_append newdeplibs " $a_deplib"
7885251883Speter		      a_deplib=""
7886251883Speter		      break 2
7887251883Speter		    fi
7888251883Speter		  done
7889251883Speter		done
7890251883Speter	      fi
7891251883Speter	      if test -n "$a_deplib" ; then
7892251883Speter		droppeddeps=yes
7893289166Speter		echo
7894289166Speter		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
7895289166Speter		echo "*** I have the capability to make that library automatically link in when"
7896289166Speter		echo "*** you link to this library.  But I can only do this if you have a"
7897289166Speter		echo "*** shared version of the library, which you do not appear to have"
7898289166Speter		echo "*** because I did check the linker path looking for a file starting"
7899251883Speter		if test -z "$potlib" ; then
7900289166Speter		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
7901251883Speter		else
7902289166Speter		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7903289166Speter		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
7904251883Speter		fi
7905251883Speter	      fi
7906289166Speter	      ;;
7907289166Speter	    *)
7908251883Speter	      # Add a -L argument.
7909289166Speter	      func_append newdeplibs " $a_deplib"
7910289166Speter	      ;;
7911289166Speter	    esac
7912251883Speter	  done # Gone through all deplibs.
7913251883Speter	  ;;
7914251883Speter	none | unknown | *)
7915251883Speter	  newdeplibs=""
7916289166Speter	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
7917251883Speter	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7918251883Speter	    for i in $predeps $postdeps ; do
7919251883Speter	      # can't use Xsed below, because $i might contain '/'
7920289166Speter	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
7921251883Speter	    done
7922251883Speter	  fi
7923289166Speter	  case $tmp_deplibs in
7924289166Speter	  *[!\	\ ]*)
7925289166Speter	    echo
7926251883Speter	    if test "X$deplibs_check_method" = "Xnone"; then
7927289166Speter	      echo "*** Warning: inter-library dependencies are not supported in this platform."
7928251883Speter	    else
7929289166Speter	      echo "*** Warning: inter-library dependencies are not known to be supported."
7930251883Speter	    fi
7931289166Speter	    echo "*** All declared inter-library dependencies are being dropped."
7932251883Speter	    droppeddeps=yes
7933289166Speter	    ;;
7934289166Speter	  esac
7935251883Speter	  ;;
7936251883Speter	esac
7937251883Speter	versuffix=$versuffix_save
7938251883Speter	major=$major_save
7939251883Speter	release=$release_save
7940251883Speter	libname=$libname_save
7941251883Speter	name=$name_save
7942251883Speter
7943251883Speter	case $host in
7944251883Speter	*-*-rhapsody* | *-*-darwin1.[012])
7945289166Speter	  # On Rhapsody replace the C library with the System framework
7946289166Speter	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
7947251883Speter	  ;;
7948251883Speter	esac
7949251883Speter
7950251883Speter	if test "$droppeddeps" = yes; then
7951251883Speter	  if test "$module" = yes; then
7952289166Speter	    echo
7953289166Speter	    echo "*** Warning: libtool could not satisfy all declared inter-library"
7954289166Speter	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
7955289166Speter	    echo "*** a static module, that should work as long as the dlopening"
7956289166Speter	    echo "*** application is linked with the -dlopen flag."
7957251883Speter	    if test -z "$global_symbol_pipe"; then
7958289166Speter	      echo
7959289166Speter	      echo "*** However, this would only work if libtool was able to extract symbol"
7960289166Speter	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
7961289166Speter	      echo "*** not find such a program.  So, this module is probably useless."
7962289166Speter	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
7963251883Speter	    fi
7964251883Speter	    if test "$build_old_libs" = no; then
7965251883Speter	      oldlibs="$output_objdir/$libname.$libext"
7966251883Speter	      build_libtool_libs=module
7967251883Speter	      build_old_libs=yes
7968251883Speter	    else
7969251883Speter	      build_libtool_libs=no
7970251883Speter	    fi
7971251883Speter	  else
7972289166Speter	    echo "*** The inter-library dependencies that have been dropped here will be"
7973289166Speter	    echo "*** automatically added whenever a program is linked with this library"
7974289166Speter	    echo "*** or is declared to -dlopen it."
7975251883Speter
7976251883Speter	    if test "$allow_undefined" = no; then
7977289166Speter	      echo
7978289166Speter	      echo "*** Since this library must not contain undefined symbols,"
7979289166Speter	      echo "*** because either the platform does not support them or"
7980289166Speter	      echo "*** it was explicitly requested with -no-undefined,"
7981289166Speter	      echo "*** libtool will only create a static version of it."
7982251883Speter	      if test "$build_old_libs" = no; then
7983251883Speter		oldlibs="$output_objdir/$libname.$libext"
7984251883Speter		build_libtool_libs=module
7985251883Speter		build_old_libs=yes
7986251883Speter	      else
7987251883Speter		build_libtool_libs=no
7988251883Speter	      fi
7989251883Speter	    fi
7990251883Speter	  fi
7991251883Speter	fi
7992251883Speter	# Done checking deplibs!
7993251883Speter	deplibs=$newdeplibs
7994251883Speter      fi
7995289166Speter      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
7996289166Speter      case $host in
7997289166Speter	*-*-darwin*)
7998289166Speter	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7999289166Speter	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8000289166Speter	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8001289166Speter	  ;;
8002289166Speter      esac
8003251883Speter
8004251883Speter      # move library search paths that coincide with paths to not yet
8005251883Speter      # installed libraries to the beginning of the library search list
8006251883Speter      new_libs=
8007251883Speter      for path in $notinst_path; do
8008251883Speter	case " $new_libs " in
8009251883Speter	*" -L$path/$objdir "*) ;;
8010251883Speter	*)
8011251883Speter	  case " $deplibs " in
8012251883Speter	  *" -L$path/$objdir "*)
8013289166Speter	    func_append new_libs " -L$path/$objdir" ;;
8014251883Speter	  esac
8015251883Speter	  ;;
8016251883Speter	esac
8017251883Speter      done
8018251883Speter      for deplib in $deplibs; do
8019251883Speter	case $deplib in
8020251883Speter	-L*)
8021251883Speter	  case " $new_libs " in
8022251883Speter	  *" $deplib "*) ;;
8023289166Speter	  *) func_append new_libs " $deplib" ;;
8024251883Speter	  esac
8025251883Speter	  ;;
8026289166Speter	*) func_append new_libs " $deplib" ;;
8027251883Speter	esac
8028251883Speter      done
8029251883Speter      deplibs="$new_libs"
8030251883Speter
8031251883Speter      # All the library-specific variables (install_libdir is set above).
8032251883Speter      library_names=
8033251883Speter      old_library=
8034251883Speter      dlname=
8035251883Speter
8036251883Speter      # Test again, we may have decided not to build it any more
8037251883Speter      if test "$build_libtool_libs" = yes; then
8038289166Speter	# Remove ${wl} instances when linking with ld.
8039289166Speter	# FIXME: should test the right _cmds variable.
8040289166Speter	case $archive_cmds in
8041289166Speter	  *\$LD\ *) wl= ;;
8042289166Speter        esac
8043251883Speter	if test "$hardcode_into_libs" = yes; then
8044251883Speter	  # Hardcode the library paths
8045251883Speter	  hardcode_libdirs=
8046251883Speter	  dep_rpath=
8047251883Speter	  rpath="$finalize_rpath"
8048289166Speter	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
8049251883Speter	  for libdir in $rpath; do
8050251883Speter	    if test -n "$hardcode_libdir_flag_spec"; then
8051251883Speter	      if test -n "$hardcode_libdir_separator"; then
8052289166Speter		func_replace_sysroot "$libdir"
8053289166Speter		libdir=$func_replace_sysroot_result
8054251883Speter		if test -z "$hardcode_libdirs"; then
8055251883Speter		  hardcode_libdirs="$libdir"
8056251883Speter		else
8057251883Speter		  # Just accumulate the unique libdirs.
8058251883Speter		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8059251883Speter		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8060251883Speter		    ;;
8061251883Speter		  *)
8062289166Speter		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8063251883Speter		    ;;
8064251883Speter		  esac
8065251883Speter		fi
8066251883Speter	      else
8067251883Speter		eval flag=\"$hardcode_libdir_flag_spec\"
8068289166Speter		func_append dep_rpath " $flag"
8069251883Speter	      fi
8070251883Speter	    elif test -n "$runpath_var"; then
8071251883Speter	      case "$perm_rpath " in
8072251883Speter	      *" $libdir "*) ;;
8073289166Speter	      *) func_append perm_rpath " $libdir" ;;
8074251883Speter	      esac
8075251883Speter	    fi
8076251883Speter	  done
8077251883Speter	  # Substitute the hardcoded libdirs into the rpath.
8078251883Speter	  if test -n "$hardcode_libdir_separator" &&
8079251883Speter	     test -n "$hardcode_libdirs"; then
8080251883Speter	    libdir="$hardcode_libdirs"
8081289166Speter	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
8082251883Speter	  fi
8083251883Speter	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
8084251883Speter	    # We should set the runpath_var.
8085251883Speter	    rpath=
8086251883Speter	    for dir in $perm_rpath; do
8087289166Speter	      func_append rpath "$dir:"
8088251883Speter	    done
8089251883Speter	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
8090251883Speter	  fi
8091251883Speter	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
8092251883Speter	fi
8093251883Speter
8094251883Speter	shlibpath="$finalize_shlibpath"
8095289166Speter	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
8096251883Speter	if test -n "$shlibpath"; then
8097251883Speter	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
8098251883Speter	fi
8099251883Speter
8100251883Speter	# Get the real and link names of the library.
8101251883Speter	eval shared_ext=\"$shrext_cmds\"
8102251883Speter	eval library_names=\"$library_names_spec\"
8103251883Speter	set dummy $library_names
8104289166Speter	shift
8105289166Speter	realname="$1"
8106289166Speter	shift
8107251883Speter
8108251883Speter	if test -n "$soname_spec"; then
8109251883Speter	  eval soname=\"$soname_spec\"
8110251883Speter	else
8111251883Speter	  soname="$realname"
8112251883Speter	fi
8113251883Speter	if test -z "$dlname"; then
8114251883Speter	  dlname=$soname
8115251883Speter	fi
8116251883Speter
8117251883Speter	lib="$output_objdir/$realname"
8118251883Speter	linknames=
8119251883Speter	for link
8120251883Speter	do
8121289166Speter	  func_append linknames " $link"
8122251883Speter	done
8123251883Speter
8124251883Speter	# Use standard objects if they are pic
8125289166Speter	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
8126289166Speter	test "X$libobjs" = "X " && libobjs=
8127251883Speter
8128289166Speter	delfiles=
8129289166Speter	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8130289166Speter	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
8131289166Speter	  export_symbols="$output_objdir/$libname.uexp"
8132289166Speter	  func_append delfiles " $export_symbols"
8133289166Speter	fi
8134289166Speter
8135289166Speter	orig_export_symbols=
8136289166Speter	case $host_os in
8137289166Speter	cygwin* | mingw* | cegcc*)
8138289166Speter	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
8139289166Speter	    # exporting using user supplied symfile
8140289166Speter	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
8141289166Speter	      # and it's NOT already a .def file. Must figure out
8142289166Speter	      # which of the given symbols are data symbols and tag
8143289166Speter	      # them as such. So, trigger use of export_symbols_cmds.
8144289166Speter	      # export_symbols gets reassigned inside the "prepare
8145289166Speter	      # the list of exported symbols" if statement, so the
8146289166Speter	      # include_expsyms logic still works.
8147289166Speter	      orig_export_symbols="$export_symbols"
8148289166Speter	      export_symbols=
8149289166Speter	      always_export_symbols=yes
8150289166Speter	    fi
8151289166Speter	  fi
8152289166Speter	  ;;
8153289166Speter	esac
8154289166Speter
8155251883Speter	# Prepare the list of exported symbols
8156251883Speter	if test -z "$export_symbols"; then
8157251883Speter	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
8158289166Speter	    func_verbose "generating symbol list for \`$libname.la'"
8159251883Speter	    export_symbols="$output_objdir/$libname.exp"
8160289166Speter	    $opt_dry_run || $RM $export_symbols
8161251883Speter	    cmds=$export_symbols_cmds
8162251883Speter	    save_ifs="$IFS"; IFS='~'
8163289166Speter	    for cmd1 in $cmds; do
8164251883Speter	      IFS="$save_ifs"
8165289166Speter	      # Take the normal branch if the nm_file_list_spec branch
8166289166Speter	      # doesn't work or if tool conversion is not needed.
8167289166Speter	      case $nm_file_list_spec~$to_tool_file_cmd in
8168289166Speter		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
8169289166Speter		  try_normal_branch=yes
8170289166Speter		  eval cmd=\"$cmd1\"
8171289166Speter		  func_len " $cmd"
8172289166Speter		  len=$func_len_result
8173289166Speter		  ;;
8174289166Speter		*)
8175289166Speter		  try_normal_branch=no
8176289166Speter		  ;;
8177289166Speter	      esac
8178289166Speter	      if test "$try_normal_branch" = yes \
8179289166Speter		 && { test "$len" -lt "$max_cmd_len" \
8180289166Speter		      || test "$max_cmd_len" -le -1; }
8181289166Speter	      then
8182289166Speter		func_show_eval "$cmd" 'exit $?'
8183289166Speter		skipped_export=false
8184289166Speter	      elif test -n "$nm_file_list_spec"; then
8185289166Speter		func_basename "$output"
8186289166Speter		output_la=$func_basename_result
8187289166Speter		save_libobjs=$libobjs
8188289166Speter		save_output=$output
8189289166Speter		output=${output_objdir}/${output_la}.nm
8190289166Speter		func_to_tool_file "$output"
8191289166Speter		libobjs=$nm_file_list_spec$func_to_tool_file_result
8192289166Speter		func_append delfiles " $output"
8193289166Speter		func_verbose "creating $NM input file list: $output"
8194289166Speter		for obj in $save_libobjs; do
8195289166Speter		  func_to_tool_file "$obj"
8196289166Speter		  $ECHO "$func_to_tool_file_result"
8197289166Speter		done > "$output"
8198289166Speter		eval cmd=\"$cmd1\"
8199289166Speter		func_show_eval "$cmd" 'exit $?'
8200289166Speter		output=$save_output
8201289166Speter		libobjs=$save_libobjs
8202289166Speter		skipped_export=false
8203251883Speter	      else
8204289166Speter		# The command line is too long to execute in one step.
8205289166Speter		func_verbose "using reloadable object file for export list..."
8206289166Speter		skipped_export=:
8207251883Speter		# Break out early, otherwise skipped_export may be
8208251883Speter		# set to false by a later but shorter cmd.
8209251883Speter		break
8210251883Speter	      fi
8211251883Speter	    done
8212251883Speter	    IFS="$save_ifs"
8213289166Speter	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
8214289166Speter	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8215289166Speter	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8216251883Speter	    fi
8217251883Speter	  fi
8218251883Speter	fi
8219251883Speter
8220251883Speter	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8221289166Speter	  tmp_export_symbols="$export_symbols"
8222289166Speter	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
8223289166Speter	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8224251883Speter	fi
8225251883Speter
8226289166Speter	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
8227289166Speter	  # The given exports_symbols file has to be filtered, so filter it.
8228289166Speter	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8229289166Speter	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
8230289166Speter	  # 's' commands which not all seds can handle. GNU sed should be fine
8231289166Speter	  # though. Also, the filter scales superlinearly with the number of
8232289166Speter	  # global variables. join(1) would be nice here, but unfortunately
8233289166Speter	  # isn't a blessed tool.
8234289166Speter	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
8235289166Speter	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8236289166Speter	  export_symbols=$output_objdir/$libname.def
8237289166Speter	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8238289166Speter	fi
8239289166Speter
8240251883Speter	tmp_deplibs=
8241251883Speter	for test_deplib in $deplibs; do
8242289166Speter	  case " $convenience " in
8243289166Speter	  *" $test_deplib "*) ;;
8244289166Speter	  *)
8245289166Speter	    func_append tmp_deplibs " $test_deplib"
8246289166Speter	    ;;
8247289166Speter	  esac
8248251883Speter	done
8249251883Speter	deplibs="$tmp_deplibs"
8250251883Speter
8251251883Speter	if test -n "$convenience"; then
8252289166Speter	  if test -n "$whole_archive_flag_spec" &&
8253289166Speter	    test "$compiler_needs_object" = yes &&
8254289166Speter	    test -z "$libobjs"; then
8255289166Speter	    # extract the archives, so we have objects to list.
8256289166Speter	    # TODO: could optimize this to just extract one archive.
8257289166Speter	    whole_archive_flag_spec=
8258289166Speter	  fi
8259251883Speter	  if test -n "$whole_archive_flag_spec"; then
8260251883Speter	    save_libobjs=$libobjs
8261251883Speter	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8262289166Speter	    test "X$libobjs" = "X " && libobjs=
8263251883Speter	  else
8264251883Speter	    gentop="$output_objdir/${outputname}x"
8265289166Speter	    func_append generated " $gentop"
8266251883Speter
8267251883Speter	    func_extract_archives $gentop $convenience
8268289166Speter	    func_append libobjs " $func_extract_archives_result"
8269289166Speter	    test "X$libobjs" = "X " && libobjs=
8270251883Speter	  fi
8271251883Speter	fi
8272289166Speter
8273251883Speter	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
8274251883Speter	  eval flag=\"$thread_safe_flag_spec\"
8275289166Speter	  func_append linker_flags " $flag"
8276251883Speter	fi
8277251883Speter
8278251883Speter	# Make a backup of the uninstalled library when relinking
8279289166Speter	if test "$opt_mode" = relink; then
8280289166Speter	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
8281251883Speter	fi
8282251883Speter
8283251883Speter	# Do each of the archive commands.
8284251883Speter	if test "$module" = yes && test -n "$module_cmds" ; then
8285251883Speter	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8286251883Speter	    eval test_cmds=\"$module_expsym_cmds\"
8287251883Speter	    cmds=$module_expsym_cmds
8288251883Speter	  else
8289251883Speter	    eval test_cmds=\"$module_cmds\"
8290251883Speter	    cmds=$module_cmds
8291251883Speter	  fi
8292251883Speter	else
8293289166Speter	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8294289166Speter	    eval test_cmds=\"$archive_expsym_cmds\"
8295289166Speter	    cmds=$archive_expsym_cmds
8296289166Speter	  else
8297289166Speter	    eval test_cmds=\"$archive_cmds\"
8298289166Speter	    cmds=$archive_cmds
8299251883Speter	  fi
8300251883Speter	fi
8301251883Speter
8302251883Speter	if test "X$skipped_export" != "X:" &&
8303289166Speter	   func_len " $test_cmds" &&
8304289166Speter	   len=$func_len_result &&
8305289166Speter	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
8306251883Speter	  :
8307251883Speter	else
8308289166Speter	  # The command line is too long to link in one step, link piecewise
8309289166Speter	  # or, if using GNU ld and skipped_export is not :, use a linker
8310289166Speter	  # script.
8311251883Speter
8312251883Speter	  # Save the value of $output and $libobjs because we want to
8313251883Speter	  # use them later.  If we have whole_archive_flag_spec, we
8314251883Speter	  # want to use save_libobjs as it was before
8315251883Speter	  # whole_archive_flag_spec was expanded, because we can't
8316251883Speter	  # assume the linker understands whole_archive_flag_spec.
8317251883Speter	  # This may have to be revisited, in case too many
8318251883Speter	  # convenience libraries get linked in and end up exceeding
8319251883Speter	  # the spec.
8320251883Speter	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
8321251883Speter	    save_libobjs=$libobjs
8322251883Speter	  fi
8323251883Speter	  save_output=$output
8324289166Speter	  func_basename "$output"
8325289166Speter	  output_la=$func_basename_result
8326251883Speter
8327251883Speter	  # Clear the reloadable object creation command queue and
8328251883Speter	  # initialize k to one.
8329251883Speter	  test_cmds=
8330251883Speter	  concat_cmds=
8331251883Speter	  objlist=
8332251883Speter	  last_robj=
8333251883Speter	  k=1
8334289166Speter
8335289166Speter	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
8336289166Speter	    output=${output_objdir}/${output_la}.lnkscript
8337289166Speter	    func_verbose "creating GNU ld script: $output"
8338289166Speter	    echo 'INPUT (' > $output
8339289166Speter	    for obj in $save_libobjs
8340289166Speter	    do
8341289166Speter	      func_to_tool_file "$obj"
8342289166Speter	      $ECHO "$func_to_tool_file_result" >> $output
8343289166Speter	    done
8344289166Speter	    echo ')' >> $output
8345289166Speter	    func_append delfiles " $output"
8346289166Speter	    func_to_tool_file "$output"
8347289166Speter	    output=$func_to_tool_file_result
8348289166Speter	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
8349289166Speter	    output=${output_objdir}/${output_la}.lnk
8350289166Speter	    func_verbose "creating linker input file list: $output"
8351289166Speter	    : > $output
8352289166Speter	    set x $save_libobjs
8353289166Speter	    shift
8354289166Speter	    firstobj=
8355289166Speter	    if test "$compiler_needs_object" = yes; then
8356289166Speter	      firstobj="$1 "
8357289166Speter	      shift
8358289166Speter	    fi
8359289166Speter	    for obj
8360289166Speter	    do
8361289166Speter	      func_to_tool_file "$obj"
8362289166Speter	      $ECHO "$func_to_tool_file_result" >> $output
8363289166Speter	    done
8364289166Speter	    func_append delfiles " $output"
8365289166Speter	    func_to_tool_file "$output"
8366289166Speter	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
8367289166Speter	  else
8368289166Speter	    if test -n "$save_libobjs"; then
8369289166Speter	      func_verbose "creating reloadable object files..."
8370289166Speter	      output=$output_objdir/$output_la-${k}.$objext
8371289166Speter	      eval test_cmds=\"$reload_cmds\"
8372289166Speter	      func_len " $test_cmds"
8373289166Speter	      len0=$func_len_result
8374289166Speter	      len=$len0
8375289166Speter
8376289166Speter	      # Loop over the list of objects to be linked.
8377289166Speter	      for obj in $save_libobjs
8378289166Speter	      do
8379289166Speter		func_len " $obj"
8380289166Speter		func_arith $len + $func_len_result
8381289166Speter		len=$func_arith_result
8382289166Speter		if test "X$objlist" = X ||
8383289166Speter		   test "$len" -lt "$max_cmd_len"; then
8384289166Speter		  func_append objlist " $obj"
8385289166Speter		else
8386289166Speter		  # The command $test_cmds is almost too long, add a
8387289166Speter		  # command to the queue.
8388289166Speter		  if test "$k" -eq 1 ; then
8389289166Speter		    # The first file doesn't have a previous command to add.
8390289166Speter		    reload_objs=$objlist
8391289166Speter		    eval concat_cmds=\"$reload_cmds\"
8392289166Speter		  else
8393289166Speter		    # All subsequent reloadable object files will link in
8394289166Speter		    # the last one created.
8395289166Speter		    reload_objs="$objlist $last_robj"
8396289166Speter		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
8397289166Speter		  fi
8398289166Speter		  last_robj=$output_objdir/$output_la-${k}.$objext
8399289166Speter		  func_arith $k + 1
8400289166Speter		  k=$func_arith_result
8401289166Speter		  output=$output_objdir/$output_la-${k}.$objext
8402289166Speter		  objlist=" $obj"
8403289166Speter		  func_len " $last_robj"
8404289166Speter		  func_arith $len0 + $func_len_result
8405289166Speter		  len=$func_arith_result
8406289166Speter		fi
8407289166Speter	      done
8408289166Speter	      # Handle the remaining objects by creating one last
8409289166Speter	      # reloadable object file.  All subsequent reloadable object
8410289166Speter	      # files will link in the last one created.
8411289166Speter	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8412289166Speter	      reload_objs="$objlist $last_robj"
8413289166Speter	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
8414289166Speter	      if test -n "$last_robj"; then
8415289166Speter	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
8416289166Speter	      fi
8417289166Speter	      func_append delfiles " $output"
8418289166Speter
8419251883Speter	    else
8420289166Speter	      output=
8421289166Speter	    fi
8422289166Speter
8423289166Speter	    if ${skipped_export-false}; then
8424289166Speter	      func_verbose "generating symbol list for \`$libname.la'"
8425289166Speter	      export_symbols="$output_objdir/$libname.exp"
8426289166Speter	      $opt_dry_run || $RM $export_symbols
8427289166Speter	      libobjs=$output
8428289166Speter	      # Append the command to create the export file.
8429289166Speter	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8430289166Speter	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
8431289166Speter	      if test -n "$last_robj"; then
8432289166Speter		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
8433251883Speter	      fi
8434251883Speter	    fi
8435251883Speter
8436289166Speter	    test -n "$save_libobjs" &&
8437289166Speter	      func_verbose "creating a temporary reloadable object file: $output"
8438251883Speter
8439289166Speter	    # Loop through the commands generated above and execute them.
8440289166Speter	    save_ifs="$IFS"; IFS='~'
8441289166Speter	    for cmd in $concat_cmds; do
8442289166Speter	      IFS="$save_ifs"
8443289166Speter	      $opt_silent || {
8444289166Speter		  func_quote_for_expand "$cmd"
8445289166Speter		  eval "func_echo $func_quote_for_expand_result"
8446289166Speter	      }
8447289166Speter	      $opt_dry_run || eval "$cmd" || {
8448289166Speter		lt_exit=$?
8449251883Speter
8450289166Speter		# Restore the uninstalled library and exit
8451289166Speter		if test "$opt_mode" = relink; then
8452289166Speter		  ( cd "$output_objdir" && \
8453289166Speter		    $RM "${realname}T" && \
8454289166Speter		    $MV "${realname}U" "$realname" )
8455289166Speter		fi
8456251883Speter
8457289166Speter		exit $lt_exit
8458289166Speter	      }
8459289166Speter	    done
8460251883Speter	    IFS="$save_ifs"
8461251883Speter
8462289166Speter	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
8463289166Speter	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8464289166Speter	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8465289166Speter	    fi
8466289166Speter	  fi
8467289166Speter
8468289166Speter          if ${skipped_export-false}; then
8469289166Speter	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
8470289166Speter	      tmp_export_symbols="$export_symbols"
8471289166Speter	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
8472289166Speter	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8473289166Speter	    fi
8474289166Speter
8475289166Speter	    if test -n "$orig_export_symbols"; then
8476289166Speter	      # The given exports_symbols file has to be filtered, so filter it.
8477289166Speter	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8478289166Speter	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
8479289166Speter	      # 's' commands which not all seds can handle. GNU sed should be fine
8480289166Speter	      # though. Also, the filter scales superlinearly with the number of
8481289166Speter	      # global variables. join(1) would be nice here, but unfortunately
8482289166Speter	      # isn't a blessed tool.
8483289166Speter	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
8484289166Speter	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8485289166Speter	      export_symbols=$output_objdir/$libname.def
8486289166Speter	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8487289166Speter	    fi
8488289166Speter	  fi
8489289166Speter
8490251883Speter	  libobjs=$output
8491251883Speter	  # Restore the value of output.
8492251883Speter	  output=$save_output
8493251883Speter
8494251883Speter	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
8495251883Speter	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8496289166Speter	    test "X$libobjs" = "X " && libobjs=
8497251883Speter	  fi
8498251883Speter	  # Expand the library linking commands again to reset the
8499251883Speter	  # value of $libobjs for piecewise linking.
8500251883Speter
8501251883Speter	  # Do each of the archive commands.
8502251883Speter	  if test "$module" = yes && test -n "$module_cmds" ; then
8503251883Speter	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8504251883Speter	      cmds=$module_expsym_cmds
8505251883Speter	    else
8506251883Speter	      cmds=$module_cmds
8507251883Speter	    fi
8508251883Speter	  else
8509289166Speter	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8510289166Speter	      cmds=$archive_expsym_cmds
8511289166Speter	    else
8512289166Speter	      cmds=$archive_cmds
8513251883Speter	    fi
8514251883Speter	  fi
8515289166Speter	fi
8516251883Speter
8517289166Speter	if test -n "$delfiles"; then
8518289166Speter	  # Append the command to remove temporary files to $cmds.
8519289166Speter	  eval cmds=\"\$cmds~\$RM $delfiles\"
8520251883Speter	fi
8521289166Speter
8522289166Speter	# Add any objects from preloaded convenience libraries
8523289166Speter	if test -n "$dlprefiles"; then
8524289166Speter	  gentop="$output_objdir/${outputname}x"
8525289166Speter	  func_append generated " $gentop"
8526289166Speter
8527289166Speter	  func_extract_archives $gentop $dlprefiles
8528289166Speter	  func_append libobjs " $func_extract_archives_result"
8529289166Speter	  test "X$libobjs" = "X " && libobjs=
8530289166Speter	fi
8531289166Speter
8532251883Speter	save_ifs="$IFS"; IFS='~'
8533251883Speter	for cmd in $cmds; do
8534251883Speter	  IFS="$save_ifs"
8535251883Speter	  eval cmd=\"$cmd\"
8536289166Speter	  $opt_silent || {
8537289166Speter	    func_quote_for_expand "$cmd"
8538289166Speter	    eval "func_echo $func_quote_for_expand_result"
8539289166Speter	  }
8540289166Speter	  $opt_dry_run || eval "$cmd" || {
8541251883Speter	    lt_exit=$?
8542251883Speter
8543251883Speter	    # Restore the uninstalled library and exit
8544289166Speter	    if test "$opt_mode" = relink; then
8545289166Speter	      ( cd "$output_objdir" && \
8546289166Speter	        $RM "${realname}T" && \
8547289166Speter		$MV "${realname}U" "$realname" )
8548251883Speter	    fi
8549251883Speter
8550251883Speter	    exit $lt_exit
8551251883Speter	  }
8552251883Speter	done
8553251883Speter	IFS="$save_ifs"
8554251883Speter
8555251883Speter	# Restore the uninstalled library and exit
8556289166Speter	if test "$opt_mode" = relink; then
8557289166Speter	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
8558251883Speter
8559251883Speter	  if test -n "$convenience"; then
8560251883Speter	    if test -z "$whole_archive_flag_spec"; then
8561289166Speter	      func_show_eval '${RM}r "$gentop"'
8562251883Speter	    fi
8563251883Speter	  fi
8564251883Speter
8565251883Speter	  exit $EXIT_SUCCESS
8566251883Speter	fi
8567251883Speter
8568251883Speter	# Create links to the real library.
8569251883Speter	for linkname in $linknames; do
8570251883Speter	  if test "$realname" != "$linkname"; then
8571289166Speter	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
8572251883Speter	  fi
8573251883Speter	done
8574251883Speter
8575251883Speter	# If -module or -export-dynamic was specified, set the dlname.
8576251883Speter	if test "$module" = yes || test "$export_dynamic" = yes; then
8577251883Speter	  # On all known operating systems, these are identical.
8578251883Speter	  dlname="$soname"
8579251883Speter	fi
8580251883Speter      fi
8581251883Speter      ;;
8582251883Speter
8583251883Speter    obj)
8584251883Speter      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
8585289166Speter	func_warning "\`-dlopen' is ignored for objects"
8586251883Speter      fi
8587251883Speter
8588289166Speter      case " $deplibs" in
8589289166Speter      *\ -l* | *\ -L*)
8590289166Speter	func_warning "\`-l' and \`-L' are ignored for objects" ;;
8591289166Speter      esac
8592251883Speter
8593289166Speter      test -n "$rpath" && \
8594289166Speter	func_warning "\`-rpath' is ignored for objects"
8595251883Speter
8596289166Speter      test -n "$xrpath" && \
8597289166Speter	func_warning "\`-R' is ignored for objects"
8598251883Speter
8599289166Speter      test -n "$vinfo" && \
8600289166Speter	func_warning "\`-version-info' is ignored for objects"
8601251883Speter
8602289166Speter      test -n "$release" && \
8603289166Speter	func_warning "\`-release' is ignored for objects"
8604289166Speter
8605251883Speter      case $output in
8606251883Speter      *.lo)
8607289166Speter	test -n "$objs$old_deplibs" && \
8608289166Speter	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
8609289166Speter
8610289166Speter	libobj=$output
8611289166Speter	func_lo2o "$libobj"
8612289166Speter	obj=$func_lo2o_result
8613251883Speter	;;
8614251883Speter      *)
8615251883Speter	libobj=
8616251883Speter	obj="$output"
8617251883Speter	;;
8618251883Speter      esac
8619251883Speter
8620251883Speter      # Delete the old objects.
8621289166Speter      $opt_dry_run || $RM $obj $libobj
8622251883Speter
8623251883Speter      # Objects from convenience libraries.  This assumes
8624251883Speter      # single-version convenience libraries.  Whenever we create
8625251883Speter      # different ones for PIC/non-PIC, this we'll have to duplicate
8626251883Speter      # the extraction.
8627251883Speter      reload_conv_objs=
8628251883Speter      gentop=
8629251883Speter      # reload_cmds runs $LD directly, so let us get rid of
8630251883Speter      # -Wl from whole_archive_flag_spec and hope we can get by with
8631251883Speter      # turning comma into space..
8632251883Speter      wl=
8633251883Speter
8634251883Speter      if test -n "$convenience"; then
8635251883Speter	if test -n "$whole_archive_flag_spec"; then
8636251883Speter	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
8637289166Speter	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
8638251883Speter	else
8639251883Speter	  gentop="$output_objdir/${obj}x"
8640289166Speter	  func_append generated " $gentop"
8641251883Speter
8642251883Speter	  func_extract_archives $gentop $convenience
8643251883Speter	  reload_conv_objs="$reload_objs $func_extract_archives_result"
8644251883Speter	fi
8645251883Speter      fi
8646251883Speter
8647289166Speter      # If we're not building shared, we need to use non_pic_objs
8648289166Speter      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
8649289166Speter
8650251883Speter      # Create the old-style object.
8651289166Speter      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
8652251883Speter
8653251883Speter      output="$obj"
8654289166Speter      func_execute_cmds "$reload_cmds" 'exit $?'
8655251883Speter
8656251883Speter      # Exit if we aren't doing a library object file.
8657251883Speter      if test -z "$libobj"; then
8658251883Speter	if test -n "$gentop"; then
8659289166Speter	  func_show_eval '${RM}r "$gentop"'
8660251883Speter	fi
8661251883Speter
8662251883Speter	exit $EXIT_SUCCESS
8663251883Speter      fi
8664251883Speter
8665251883Speter      if test "$build_libtool_libs" != yes; then
8666251883Speter	if test -n "$gentop"; then
8667289166Speter	  func_show_eval '${RM}r "$gentop"'
8668251883Speter	fi
8669251883Speter
8670251883Speter	# Create an invalid libtool object if no PIC, so that we don't
8671251883Speter	# accidentally link it into a program.
8672251883Speter	# $show "echo timestamp > $libobj"
8673289166Speter	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
8674251883Speter	exit $EXIT_SUCCESS
8675251883Speter      fi
8676251883Speter
8677251883Speter      if test -n "$pic_flag" || test "$pic_mode" != default; then
8678251883Speter	# Only do commands if we really have different PIC objects.
8679251883Speter	reload_objs="$libobjs $reload_conv_objs"
8680251883Speter	output="$libobj"
8681289166Speter	func_execute_cmds "$reload_cmds" 'exit $?'
8682251883Speter      fi
8683251883Speter
8684251883Speter      if test -n "$gentop"; then
8685289166Speter	func_show_eval '${RM}r "$gentop"'
8686251883Speter      fi
8687251883Speter
8688251883Speter      exit $EXIT_SUCCESS
8689251883Speter      ;;
8690251883Speter
8691251883Speter    prog)
8692251883Speter      case $host in
8693289166Speter	*cygwin*) func_stripname '' '.exe' "$output"
8694289166Speter	          output=$func_stripname_result.exe;;
8695251883Speter      esac
8696289166Speter      test -n "$vinfo" && \
8697289166Speter	func_warning "\`-version-info' is ignored for programs"
8698251883Speter
8699289166Speter      test -n "$release" && \
8700289166Speter	func_warning "\`-release' is ignored for programs"
8701251883Speter
8702289166Speter      test "$preload" = yes \
8703289166Speter        && test "$dlopen_support" = unknown \
8704289166Speter	&& test "$dlopen_self" = unknown \
8705289166Speter	&& test "$dlopen_self_static" = unknown && \
8706289166Speter	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
8707251883Speter
8708251883Speter      case $host in
8709251883Speter      *-*-rhapsody* | *-*-darwin1.[012])
8710251883Speter	# On Rhapsody replace the C library is the System framework
8711289166Speter	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
8712289166Speter	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
8713251883Speter	;;
8714251883Speter      esac
8715251883Speter
8716251883Speter      case $host in
8717289166Speter      *-*-darwin*)
8718289166Speter	# Don't allow lazy linking, it breaks C++ global constructors
8719289166Speter	# But is supposedly fixed on 10.4 or later (yay!).
8720289166Speter	if test "$tagname" = CXX ; then
8721289166Speter	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
8722289166Speter	    10.[0123])
8723289166Speter	      func_append compile_command " ${wl}-bind_at_load"
8724289166Speter	      func_append finalize_command " ${wl}-bind_at_load"
8725289166Speter	    ;;
8726289166Speter	  esac
8727289166Speter	fi
8728289166Speter	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
8729289166Speter	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8730289166Speter	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8731289166Speter	;;
8732251883Speter      esac
8733251883Speter
8734251883Speter
8735251883Speter      # move library search paths that coincide with paths to not yet
8736251883Speter      # installed libraries to the beginning of the library search list
8737251883Speter      new_libs=
8738251883Speter      for path in $notinst_path; do
8739251883Speter	case " $new_libs " in
8740251883Speter	*" -L$path/$objdir "*) ;;
8741251883Speter	*)
8742251883Speter	  case " $compile_deplibs " in
8743251883Speter	  *" -L$path/$objdir "*)
8744289166Speter	    func_append new_libs " -L$path/$objdir" ;;
8745251883Speter	  esac
8746251883Speter	  ;;
8747251883Speter	esac
8748251883Speter      done
8749251883Speter      for deplib in $compile_deplibs; do
8750251883Speter	case $deplib in
8751251883Speter	-L*)
8752251883Speter	  case " $new_libs " in
8753251883Speter	  *" $deplib "*) ;;
8754289166Speter	  *) func_append new_libs " $deplib" ;;
8755251883Speter	  esac
8756251883Speter	  ;;
8757289166Speter	*) func_append new_libs " $deplib" ;;
8758251883Speter	esac
8759251883Speter      done
8760251883Speter      compile_deplibs="$new_libs"
8761251883Speter
8762251883Speter
8763289166Speter      func_append compile_command " $compile_deplibs"
8764289166Speter      func_append finalize_command " $finalize_deplibs"
8765251883Speter
8766251883Speter      if test -n "$rpath$xrpath"; then
8767251883Speter	# If the user specified any rpath flags, then add them.
8768251883Speter	for libdir in $rpath $xrpath; do
8769251883Speter	  # This is the magic to use -rpath.
8770251883Speter	  case "$finalize_rpath " in
8771251883Speter	  *" $libdir "*) ;;
8772289166Speter	  *) func_append finalize_rpath " $libdir" ;;
8773251883Speter	  esac
8774251883Speter	done
8775251883Speter      fi
8776251883Speter
8777251883Speter      # Now hardcode the library paths
8778251883Speter      rpath=
8779251883Speter      hardcode_libdirs=
8780251883Speter      for libdir in $compile_rpath $finalize_rpath; do
8781251883Speter	if test -n "$hardcode_libdir_flag_spec"; then
8782251883Speter	  if test -n "$hardcode_libdir_separator"; then
8783251883Speter	    if test -z "$hardcode_libdirs"; then
8784251883Speter	      hardcode_libdirs="$libdir"
8785251883Speter	    else
8786251883Speter	      # Just accumulate the unique libdirs.
8787251883Speter	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8788251883Speter	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8789251883Speter		;;
8790251883Speter	      *)
8791289166Speter		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8792251883Speter		;;
8793251883Speter	      esac
8794251883Speter	    fi
8795251883Speter	  else
8796251883Speter	    eval flag=\"$hardcode_libdir_flag_spec\"
8797289166Speter	    func_append rpath " $flag"
8798251883Speter	  fi
8799251883Speter	elif test -n "$runpath_var"; then
8800251883Speter	  case "$perm_rpath " in
8801251883Speter	  *" $libdir "*) ;;
8802289166Speter	  *) func_append perm_rpath " $libdir" ;;
8803251883Speter	  esac
8804251883Speter	fi
8805251883Speter	case $host in
8806289166Speter	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
8807289166Speter	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
8808251883Speter	  case :$dllsearchpath: in
8809251883Speter	  *":$libdir:"*) ;;
8810289166Speter	  ::) dllsearchpath=$libdir;;
8811289166Speter	  *) func_append dllsearchpath ":$libdir";;
8812251883Speter	  esac
8813251883Speter	  case :$dllsearchpath: in
8814251883Speter	  *":$testbindir:"*) ;;
8815289166Speter	  ::) dllsearchpath=$testbindir;;
8816289166Speter	  *) func_append dllsearchpath ":$testbindir";;
8817251883Speter	  esac
8818251883Speter	  ;;
8819251883Speter	esac
8820251883Speter      done
8821251883Speter      # Substitute the hardcoded libdirs into the rpath.
8822251883Speter      if test -n "$hardcode_libdir_separator" &&
8823251883Speter	 test -n "$hardcode_libdirs"; then
8824251883Speter	libdir="$hardcode_libdirs"
8825251883Speter	eval rpath=\" $hardcode_libdir_flag_spec\"
8826251883Speter      fi
8827251883Speter      compile_rpath="$rpath"
8828251883Speter
8829251883Speter      rpath=
8830251883Speter      hardcode_libdirs=
8831251883Speter      for libdir in $finalize_rpath; do
8832251883Speter	if test -n "$hardcode_libdir_flag_spec"; then
8833251883Speter	  if test -n "$hardcode_libdir_separator"; then
8834251883Speter	    if test -z "$hardcode_libdirs"; then
8835251883Speter	      hardcode_libdirs="$libdir"
8836251883Speter	    else
8837251883Speter	      # Just accumulate the unique libdirs.
8838251883Speter	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8839251883Speter	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8840251883Speter		;;
8841251883Speter	      *)
8842289166Speter		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8843251883Speter		;;
8844251883Speter	      esac
8845251883Speter	    fi
8846251883Speter	  else
8847251883Speter	    eval flag=\"$hardcode_libdir_flag_spec\"
8848289166Speter	    func_append rpath " $flag"
8849251883Speter	  fi
8850251883Speter	elif test -n "$runpath_var"; then
8851251883Speter	  case "$finalize_perm_rpath " in
8852251883Speter	  *" $libdir "*) ;;
8853289166Speter	  *) func_append finalize_perm_rpath " $libdir" ;;
8854251883Speter	  esac
8855251883Speter	fi
8856251883Speter      done
8857251883Speter      # Substitute the hardcoded libdirs into the rpath.
8858251883Speter      if test -n "$hardcode_libdir_separator" &&
8859251883Speter	 test -n "$hardcode_libdirs"; then
8860251883Speter	libdir="$hardcode_libdirs"
8861251883Speter	eval rpath=\" $hardcode_libdir_flag_spec\"
8862251883Speter      fi
8863251883Speter      finalize_rpath="$rpath"
8864251883Speter
8865251883Speter      if test -n "$libobjs" && test "$build_old_libs" = yes; then
8866251883Speter	# Transform all the library objects into standard objects.
8867289166Speter	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8868289166Speter	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8869251883Speter      fi
8870251883Speter
8871289166Speter      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
8872251883Speter
8873289166Speter      # template prelinking step
8874289166Speter      if test -n "$prelink_cmds"; then
8875289166Speter	func_execute_cmds "$prelink_cmds" 'exit $?'
8876251883Speter      fi
8877251883Speter
8878289166Speter      wrappers_required=yes
8879289166Speter      case $host in
8880289166Speter      *cegcc* | *mingw32ce*)
8881289166Speter        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
8882289166Speter        wrappers_required=no
8883289166Speter        ;;
8884289166Speter      *cygwin* | *mingw* )
8885289166Speter        if test "$build_libtool_libs" != yes; then
8886289166Speter          wrappers_required=no
8887289166Speter        fi
8888289166Speter        ;;
8889289166Speter      *)
8890289166Speter        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
8891289166Speter          wrappers_required=no
8892289166Speter        fi
8893289166Speter        ;;
8894289166Speter      esac
8895289166Speter      if test "$wrappers_required" = no; then
8896251883Speter	# Replace the output file specification.
8897289166Speter	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8898251883Speter	link_command="$compile_command$compile_rpath"
8899251883Speter
8900251883Speter	# We have no uninstalled library dependencies, so finalize right now.
8901289166Speter	exit_status=0
8902289166Speter	func_show_eval "$link_command" 'exit_status=$?'
8903251883Speter
8904289166Speter	if test -n "$postlink_cmds"; then
8905289166Speter	  func_to_tool_file "$output"
8906289166Speter	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8907289166Speter	  func_execute_cmds "$postlink_cmds" 'exit $?'
8908289166Speter	fi
8909289166Speter
8910251883Speter	# Delete the generated files.
8911289166Speter	if test -f "$output_objdir/${outputname}S.${objext}"; then
8912289166Speter	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
8913251883Speter	fi
8914251883Speter
8915251883Speter	exit $exit_status
8916251883Speter      fi
8917251883Speter
8918251883Speter      if test -n "$compile_shlibpath$finalize_shlibpath"; then
8919251883Speter	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
8920251883Speter      fi
8921251883Speter      if test -n "$finalize_shlibpath"; then
8922251883Speter	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
8923251883Speter      fi
8924251883Speter
8925251883Speter      compile_var=
8926251883Speter      finalize_var=
8927251883Speter      if test -n "$runpath_var"; then
8928251883Speter	if test -n "$perm_rpath"; then
8929251883Speter	  # We should set the runpath_var.
8930251883Speter	  rpath=
8931251883Speter	  for dir in $perm_rpath; do
8932289166Speter	    func_append rpath "$dir:"
8933251883Speter	  done
8934251883Speter	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
8935251883Speter	fi
8936251883Speter	if test -n "$finalize_perm_rpath"; then
8937251883Speter	  # We should set the runpath_var.
8938251883Speter	  rpath=
8939251883Speter	  for dir in $finalize_perm_rpath; do
8940289166Speter	    func_append rpath "$dir:"
8941251883Speter	  done
8942251883Speter	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
8943251883Speter	fi
8944251883Speter      fi
8945251883Speter
8946251883Speter      if test "$no_install" = yes; then
8947251883Speter	# We don't need to create a wrapper script.
8948251883Speter	link_command="$compile_var$compile_command$compile_rpath"
8949251883Speter	# Replace the output file specification.
8950289166Speter	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8951251883Speter	# Delete the old output file.
8952289166Speter	$opt_dry_run || $RM $output
8953251883Speter	# Link the executable and exit
8954289166Speter	func_show_eval "$link_command" 'exit $?'
8955289166Speter
8956289166Speter	if test -n "$postlink_cmds"; then
8957289166Speter	  func_to_tool_file "$output"
8958289166Speter	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8959289166Speter	  func_execute_cmds "$postlink_cmds" 'exit $?'
8960289166Speter	fi
8961289166Speter
8962251883Speter	exit $EXIT_SUCCESS
8963251883Speter      fi
8964251883Speter
8965251883Speter      if test "$hardcode_action" = relink; then
8966251883Speter	# Fast installation is not supported
8967251883Speter	link_command="$compile_var$compile_command$compile_rpath"
8968251883Speter	relink_command="$finalize_var$finalize_command$finalize_rpath"
8969251883Speter
8970289166Speter	func_warning "this platform does not like uninstalled shared libraries"
8971289166Speter	func_warning "\`$output' will be relinked during installation"
8972251883Speter      else
8973251883Speter	if test "$fast_install" != no; then
8974251883Speter	  link_command="$finalize_var$compile_command$finalize_rpath"
8975251883Speter	  if test "$fast_install" = yes; then
8976289166Speter	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
8977251883Speter	  else
8978251883Speter	    # fast_install is set to needless
8979251883Speter	    relink_command=
8980251883Speter	  fi
8981251883Speter	else
8982251883Speter	  link_command="$compile_var$compile_command$compile_rpath"
8983251883Speter	  relink_command="$finalize_var$finalize_command$finalize_rpath"
8984251883Speter	fi
8985251883Speter      fi
8986251883Speter
8987251883Speter      # Replace the output file specification.
8988289166Speter      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
8989251883Speter
8990251883Speter      # Delete the old output files.
8991289166Speter      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
8992251883Speter
8993289166Speter      func_show_eval "$link_command" 'exit $?'
8994251883Speter
8995289166Speter      if test -n "$postlink_cmds"; then
8996289166Speter	func_to_tool_file "$output_objdir/$outputname"
8997289166Speter	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'`
8998289166Speter	func_execute_cmds "$postlink_cmds" 'exit $?'
8999289166Speter      fi
9000289166Speter
9001251883Speter      # Now create the wrapper script.
9002289166Speter      func_verbose "creating $output"
9003251883Speter
9004251883Speter      # Quote the relink command for shipping.
9005251883Speter      if test -n "$relink_command"; then
9006251883Speter	# Preserve any variables that may affect compiler behavior
9007251883Speter	for var in $variables_saved_for_relink; do
9008251883Speter	  if eval test -z \"\${$var+set}\"; then
9009289166Speter	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9010251883Speter	  elif eval var_value=\$$var; test -z "$var_value"; then
9011251883Speter	    relink_command="$var=; export $var; $relink_command"
9012251883Speter	  else
9013289166Speter	    func_quote_for_eval "$var_value"
9014289166Speter	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9015251883Speter	  fi
9016251883Speter	done
9017251883Speter	relink_command="(cd `pwd`; $relink_command)"
9018289166Speter	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9019251883Speter      fi
9020251883Speter
9021289166Speter      # Only actually do things if not in dry run mode.
9022289166Speter      $opt_dry_run || {
9023251883Speter	# win32 will think the script is a binary if it has
9024251883Speter	# a .exe suffix, so we strip it off here.
9025251883Speter	case $output in
9026289166Speter	  *.exe) func_stripname '' '.exe' "$output"
9027289166Speter	         output=$func_stripname_result ;;
9028251883Speter	esac
9029251883Speter	# test for cygwin because mv fails w/o .exe extensions
9030251883Speter	case $host in
9031251883Speter	  *cygwin*)
9032251883Speter	    exeext=.exe
9033289166Speter	    func_stripname '' '.exe' "$outputname"
9034289166Speter	    outputname=$func_stripname_result ;;
9035251883Speter	  *) exeext= ;;
9036251883Speter	esac
9037251883Speter	case $host in
9038251883Speter	  *cygwin* | *mingw* )
9039289166Speter	    func_dirname_and_basename "$output" "" "."
9040289166Speter	    output_name=$func_basename_result
9041289166Speter	    output_path=$func_dirname_result
9042289166Speter	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
9043289166Speter	    cwrapper="$output_path/$output_name.exe"
9044289166Speter	    $RM $cwrappersource $cwrapper
9045289166Speter	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
9046251883Speter
9047289166Speter	    func_emit_cwrapperexe_src > $cwrappersource
9048251883Speter
9049289166Speter	    # The wrapper executable is built using the $host compiler,
9050289166Speter	    # because it contains $host paths and files. If cross-
9051289166Speter	    # compiling, it, like the target executable, must be
9052289166Speter	    # executed on the $host or under an emulation environment.
9053289166Speter	    $opt_dry_run || {
9054289166Speter	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
9055289166Speter	      $STRIP $cwrapper
9056289166Speter	    }
9057251883Speter
9058289166Speter	    # Now, create the wrapper script for func_source use:
9059289166Speter	    func_ltwrapper_scriptname $cwrapper
9060289166Speter	    $RM $func_ltwrapper_scriptname_result
9061289166Speter	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
9062289166Speter	    $opt_dry_run || {
9063289166Speter	      # note: this script will not be executed, so do not chmod.
9064289166Speter	      if test "x$build" = "x$host" ; then
9065289166Speter		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
9066289166Speter	      else
9067289166Speter		func_emit_wrapper no > $func_ltwrapper_scriptname_result
9068289166Speter	      fi
9069289166Speter	    }
9070251883Speter	  ;;
9071289166Speter	  * )
9072289166Speter	    $RM $output
9073289166Speter	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
9074251883Speter
9075289166Speter	    func_emit_wrapper no > $output
9076289166Speter	    chmod +x $output
9077251883Speter	  ;;
9078251883Speter	esac
9079289166Speter      }
9080251883Speter      exit $EXIT_SUCCESS
9081251883Speter      ;;
9082251883Speter    esac
9083251883Speter
9084251883Speter    # See if we need to build an old-fashioned archive.
9085251883Speter    for oldlib in $oldlibs; do
9086251883Speter
9087251883Speter      if test "$build_libtool_libs" = convenience; then
9088289166Speter	oldobjs="$libobjs_save $symfileobj"
9089251883Speter	addlibs="$convenience"
9090251883Speter	build_libtool_libs=no
9091251883Speter      else
9092251883Speter	if test "$build_libtool_libs" = module; then
9093251883Speter	  oldobjs="$libobjs_save"
9094251883Speter	  build_libtool_libs=no
9095251883Speter	else
9096251883Speter	  oldobjs="$old_deplibs $non_pic_objects"
9097289166Speter	  if test "$preload" = yes && test -f "$symfileobj"; then
9098289166Speter	    func_append oldobjs " $symfileobj"
9099289166Speter	  fi
9100251883Speter	fi
9101251883Speter	addlibs="$old_convenience"
9102251883Speter      fi
9103251883Speter
9104251883Speter      if test -n "$addlibs"; then
9105251883Speter	gentop="$output_objdir/${outputname}x"
9106289166Speter	func_append generated " $gentop"
9107251883Speter
9108251883Speter	func_extract_archives $gentop $addlibs
9109289166Speter	func_append oldobjs " $func_extract_archives_result"
9110251883Speter      fi
9111251883Speter
9112251883Speter      # Do each command in the archive commands.
9113251883Speter      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
9114289166Speter	cmds=$old_archive_from_new_cmds
9115251883Speter      else
9116289166Speter
9117289166Speter	# Add any objects from preloaded convenience libraries
9118289166Speter	if test -n "$dlprefiles"; then
9119289166Speter	  gentop="$output_objdir/${outputname}x"
9120289166Speter	  func_append generated " $gentop"
9121289166Speter
9122289166Speter	  func_extract_archives $gentop $dlprefiles
9123289166Speter	  func_append oldobjs " $func_extract_archives_result"
9124289166Speter	fi
9125289166Speter
9126251883Speter	# POSIX demands no paths to be encoded in archives.  We have
9127251883Speter	# to avoid creating archives with duplicate basenames if we
9128251883Speter	# might have to extract them afterwards, e.g., when creating a
9129251883Speter	# static archive out of a convenience library, or when linking
9130251883Speter	# the entirety of a libtool archive into another (currently
9131251883Speter	# not supported by libtool).
9132251883Speter	if (for obj in $oldobjs
9133251883Speter	    do
9134289166Speter	      func_basename "$obj"
9135289166Speter	      $ECHO "$func_basename_result"
9136251883Speter	    done | sort | sort -uc >/dev/null 2>&1); then
9137251883Speter	  :
9138251883Speter	else
9139289166Speter	  echo "copying selected object files to avoid basename conflicts..."
9140289166Speter	  gentop="$output_objdir/${outputname}x"
9141289166Speter	  func_append generated " $gentop"
9142289166Speter	  func_mkdir_p "$gentop"
9143251883Speter	  save_oldobjs=$oldobjs
9144251883Speter	  oldobjs=
9145251883Speter	  counter=1
9146251883Speter	  for obj in $save_oldobjs
9147251883Speter	  do
9148289166Speter	    func_basename "$obj"
9149289166Speter	    objbase="$func_basename_result"
9150251883Speter	    case " $oldobjs " in
9151251883Speter	    " ") oldobjs=$obj ;;
9152251883Speter	    *[\ /]"$objbase "*)
9153251883Speter	      while :; do
9154251883Speter		# Make sure we don't pick an alternate name that also
9155251883Speter		# overlaps.
9156251883Speter		newobj=lt$counter-$objbase
9157289166Speter		func_arith $counter + 1
9158289166Speter		counter=$func_arith_result
9159251883Speter		case " $oldobjs " in
9160251883Speter		*[\ /]"$newobj "*) ;;
9161251883Speter		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
9162251883Speter		esac
9163251883Speter	      done
9164289166Speter	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
9165289166Speter	      func_append oldobjs " $gentop/$newobj"
9166251883Speter	      ;;
9167289166Speter	    *) func_append oldobjs " $obj" ;;
9168251883Speter	    esac
9169251883Speter	  done
9170251883Speter	fi
9171289166Speter	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
9172289166Speter	tool_oldlib=$func_to_tool_file_result
9173251883Speter	eval cmds=\"$old_archive_cmds\"
9174251883Speter
9175289166Speter	func_len " $cmds"
9176289166Speter	len=$func_len_result
9177289166Speter	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9178251883Speter	  cmds=$old_archive_cmds
9179289166Speter	elif test -n "$archiver_list_spec"; then
9180289166Speter	  func_verbose "using command file archive linking..."
9181289166Speter	  for obj in $oldobjs
9182289166Speter	  do
9183289166Speter	    func_to_tool_file "$obj"
9184289166Speter	    $ECHO "$func_to_tool_file_result"
9185289166Speter	  done > $output_objdir/$libname.libcmd
9186289166Speter	  func_to_tool_file "$output_objdir/$libname.libcmd"
9187289166Speter	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
9188289166Speter	  cmds=$old_archive_cmds
9189251883Speter	else
9190251883Speter	  # the command line is too long to link in one step, link in parts
9191289166Speter	  func_verbose "using piecewise archive linking..."
9192251883Speter	  save_RANLIB=$RANLIB
9193251883Speter	  RANLIB=:
9194251883Speter	  objlist=
9195251883Speter	  concat_cmds=
9196251883Speter	  save_oldobjs=$oldobjs
9197289166Speter	  oldobjs=
9198251883Speter	  # Is there a better way of finding the last object in the list?
9199251883Speter	  for obj in $save_oldobjs
9200251883Speter	  do
9201251883Speter	    last_oldobj=$obj
9202251883Speter	  done
9203289166Speter	  eval test_cmds=\"$old_archive_cmds\"
9204289166Speter	  func_len " $test_cmds"
9205289166Speter	  len0=$func_len_result
9206289166Speter	  len=$len0
9207251883Speter	  for obj in $save_oldobjs
9208251883Speter	  do
9209289166Speter	    func_len " $obj"
9210289166Speter	    func_arith $len + $func_len_result
9211289166Speter	    len=$func_arith_result
9212289166Speter	    func_append objlist " $obj"
9213289166Speter	    if test "$len" -lt "$max_cmd_len"; then
9214251883Speter	      :
9215251883Speter	    else
9216251883Speter	      # the above command should be used before it gets too long
9217251883Speter	      oldobjs=$objlist
9218251883Speter	      if test "$obj" = "$last_oldobj" ; then
9219289166Speter		RANLIB=$save_RANLIB
9220251883Speter	      fi
9221251883Speter	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9222251883Speter	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
9223251883Speter	      objlist=
9224289166Speter	      len=$len0
9225251883Speter	    fi
9226251883Speter	  done
9227251883Speter	  RANLIB=$save_RANLIB
9228251883Speter	  oldobjs=$objlist
9229251883Speter	  if test "X$oldobjs" = "X" ; then
9230251883Speter	    eval cmds=\"\$concat_cmds\"
9231251883Speter	  else
9232251883Speter	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
9233251883Speter	  fi
9234251883Speter	fi
9235251883Speter      fi
9236289166Speter      func_execute_cmds "$cmds" 'exit $?'
9237251883Speter    done
9238251883Speter
9239289166Speter    test -n "$generated" && \
9240289166Speter      func_show_eval "${RM}r$generated"
9241251883Speter
9242251883Speter    # Now create the libtool archive.
9243251883Speter    case $output in
9244251883Speter    *.la)
9245251883Speter      old_library=
9246251883Speter      test "$build_old_libs" = yes && old_library="$libname.$libext"
9247289166Speter      func_verbose "creating $output"
9248251883Speter
9249251883Speter      # Preserve any variables that may affect compiler behavior
9250251883Speter      for var in $variables_saved_for_relink; do
9251251883Speter	if eval test -z \"\${$var+set}\"; then
9252289166Speter	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9253251883Speter	elif eval var_value=\$$var; test -z "$var_value"; then
9254251883Speter	  relink_command="$var=; export $var; $relink_command"
9255251883Speter	else
9256289166Speter	  func_quote_for_eval "$var_value"
9257289166Speter	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9258251883Speter	fi
9259251883Speter      done
9260251883Speter      # Quote the link command for shipping.
9261251883Speter      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
9262289166Speter      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9263251883Speter      if test "$hardcode_automatic" = yes ; then
9264251883Speter	relink_command=
9265251883Speter      fi
9266251883Speter
9267251883Speter      # Only create the output if not a dry run.
9268289166Speter      $opt_dry_run || {
9269251883Speter	for installed in no yes; do
9270251883Speter	  if test "$installed" = yes; then
9271251883Speter	    if test -z "$install_libdir"; then
9272251883Speter	      break
9273251883Speter	    fi
9274251883Speter	    output="$output_objdir/$outputname"i
9275251883Speter	    # Replace all uninstalled libtool libraries with the installed ones
9276251883Speter	    newdependency_libs=
9277251883Speter	    for deplib in $dependency_libs; do
9278251883Speter	      case $deplib in
9279251883Speter	      *.la)
9280289166Speter		func_basename "$deplib"
9281289166Speter		name="$func_basename_result"
9282289166Speter		func_resolve_sysroot "$deplib"
9283289166Speter		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
9284289166Speter		test -z "$libdir" && \
9285289166Speter		  func_fatal_error "\`$deplib' is not a valid libtool archive"
9286289166Speter		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
9287251883Speter		;;
9288289166Speter	      -L*)
9289289166Speter		func_stripname -L '' "$deplib"
9290289166Speter		func_replace_sysroot "$func_stripname_result"
9291289166Speter		func_append newdependency_libs " -L$func_replace_sysroot_result"
9292289166Speter		;;
9293289166Speter	      -R*)
9294289166Speter		func_stripname -R '' "$deplib"
9295289166Speter		func_replace_sysroot "$func_stripname_result"
9296289166Speter		func_append newdependency_libs " -R$func_replace_sysroot_result"
9297289166Speter		;;
9298289166Speter	      *) func_append newdependency_libs " $deplib" ;;
9299251883Speter	      esac
9300251883Speter	    done
9301251883Speter	    dependency_libs="$newdependency_libs"
9302251883Speter	    newdlfiles=
9303289166Speter
9304251883Speter	    for lib in $dlfiles; do
9305289166Speter	      case $lib in
9306289166Speter	      *.la)
9307289166Speter	        func_basename "$lib"
9308289166Speter		name="$func_basename_result"
9309289166Speter		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9310289166Speter		test -z "$libdir" && \
9311289166Speter		  func_fatal_error "\`$lib' is not a valid libtool archive"
9312289166Speter		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
9313289166Speter		;;
9314289166Speter	      *) func_append newdlfiles " $lib" ;;
9315289166Speter	      esac
9316251883Speter	    done
9317251883Speter	    dlfiles="$newdlfiles"
9318251883Speter	    newdlprefiles=
9319251883Speter	    for lib in $dlprefiles; do
9320289166Speter	      case $lib in
9321289166Speter	      *.la)
9322289166Speter		# Only pass preopened files to the pseudo-archive (for
9323289166Speter		# eventual linking with the app. that links it) if we
9324289166Speter		# didn't already link the preopened objects directly into
9325289166Speter		# the library:
9326289166Speter		func_basename "$lib"
9327289166Speter		name="$func_basename_result"
9328289166Speter		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9329289166Speter		test -z "$libdir" && \
9330289166Speter		  func_fatal_error "\`$lib' is not a valid libtool archive"
9331289166Speter		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
9332289166Speter		;;
9333289166Speter	      esac
9334251883Speter	    done
9335251883Speter	    dlprefiles="$newdlprefiles"
9336251883Speter	  else
9337251883Speter	    newdlfiles=
9338251883Speter	    for lib in $dlfiles; do
9339251883Speter	      case $lib in
9340251883Speter		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9341251883Speter		*) abs=`pwd`"/$lib" ;;
9342251883Speter	      esac
9343289166Speter	      func_append newdlfiles " $abs"
9344251883Speter	    done
9345251883Speter	    dlfiles="$newdlfiles"
9346251883Speter	    newdlprefiles=
9347251883Speter	    for lib in $dlprefiles; do
9348251883Speter	      case $lib in
9349251883Speter		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9350251883Speter		*) abs=`pwd`"/$lib" ;;
9351251883Speter	      esac
9352289166Speter	      func_append newdlprefiles " $abs"
9353251883Speter	    done
9354251883Speter	    dlprefiles="$newdlprefiles"
9355251883Speter	  fi
9356289166Speter	  $RM $output
9357251883Speter	  # place dlname in correct position for cygwin
9358289166Speter	  # In fact, it would be nice if we could use this code for all target
9359289166Speter	  # systems that can't hard-code library paths into their executables
9360289166Speter	  # and that have no shared library path variable independent of PATH,
9361289166Speter	  # but it turns out we can't easily determine that from inspecting
9362289166Speter	  # libtool variables, so we have to hard-code the OSs to which it
9363289166Speter	  # applies here; at the moment, that means platforms that use the PE
9364289166Speter	  # object format with DLL files.  See the long comment at the top of
9365289166Speter	  # tests/bindir.at for full details.
9366251883Speter	  tdlname=$dlname
9367251883Speter	  case $host,$output,$installed,$module,$dlname in
9368289166Speter	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
9369289166Speter	      # If a -bindir argument was supplied, place the dll there.
9370289166Speter	      if test "x$bindir" != x ;
9371289166Speter	      then
9372289166Speter		func_relative_path "$install_libdir" "$bindir"
9373289166Speter		tdlname=$func_relative_path_result$dlname
9374289166Speter	      else
9375289166Speter		# Otherwise fall back on heuristic.
9376289166Speter		tdlname=../bin/$dlname
9377289166Speter	      fi
9378289166Speter	      ;;
9379251883Speter	  esac
9380289166Speter	  $ECHO > $output "\
9381251883Speter# $outputname - a libtool library file
9382289166Speter# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
9383251883Speter#
9384251883Speter# Please DO NOT delete this file!
9385251883Speter# It is necessary for linking the library.
9386251883Speter
9387251883Speter# The name that we can dlopen(3).
9388251883Speterdlname='$tdlname'
9389251883Speter
9390251883Speter# Names of this library.
9391251883Speterlibrary_names='$library_names'
9392251883Speter
9393251883Speter# The name of the static archive.
9394251883Speterold_library='$old_library'
9395251883Speter
9396289166Speter# Linker flags that can not go in dependency_libs.
9397289166Speterinherited_linker_flags='$new_inherited_linker_flags'
9398289166Speter
9399251883Speter# Libraries that this one depends upon.
9400251883Speterdependency_libs='$dependency_libs'
9401251883Speter
9402289166Speter# Names of additional weak libraries provided by this library
9403289166Speterweak_library_names='$weak_libs'
9404289166Speter
9405251883Speter# Version information for $libname.
9406251883Spetercurrent=$current
9407251883Speterage=$age
9408251883Speterrevision=$revision
9409251883Speter
9410251883Speter# Is this an already installed library?
9411251883Speterinstalled=$installed
9412251883Speter
9413251883Speter# Should we warn about portability when linking against -modules?
9414251883Spetershouldnotlink=$module
9415251883Speter
9416251883Speter# Files to dlopen/dlpreopen
9417251883Speterdlopen='$dlfiles'
9418251883Speterdlpreopen='$dlprefiles'
9419251883Speter
9420251883Speter# Directory that this library needs to be installed in:
9421251883Speterlibdir='$install_libdir'"
9422251883Speter	  if test "$installed" = no && test "$need_relink" = yes; then
9423289166Speter	    $ECHO >> $output "\
9424251883Speterrelink_command=\"$relink_command\""
9425251883Speter	  fi
9426251883Speter	done
9427289166Speter      }
9428251883Speter
9429251883Speter      # Do a symbolic link so that the libtool archive can be found in
9430251883Speter      # LD_LIBRARY_PATH before the program is installed.
9431289166Speter      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
9432251883Speter      ;;
9433251883Speter    esac
9434251883Speter    exit $EXIT_SUCCESS
9435289166Speter}
9436251883Speter
9437289166Speter{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
9438289166Speter    func_mode_link ${1+"$@"}
9439251883Speter
9440251883Speter
9441289166Speter# func_mode_uninstall arg...
9442289166Speterfunc_mode_uninstall ()
9443289166Speter{
9444289166Speter    $opt_debug
9445289166Speter    RM="$nonopt"
9446251883Speter    files=
9447251883Speter    rmforce=
9448251883Speter    exit_status=0
9449251883Speter
9450251883Speter    # This variable tells wrapper scripts just to set variables rather
9451251883Speter    # than running their programs.
9452251883Speter    libtool_install_magic="$magic"
9453251883Speter
9454251883Speter    for arg
9455251883Speter    do
9456251883Speter      case $arg in
9457289166Speter      -f) func_append RM " $arg"; rmforce=yes ;;
9458289166Speter      -*) func_append RM " $arg" ;;
9459289166Speter      *) func_append files " $arg" ;;
9460251883Speter      esac
9461251883Speter    done
9462251883Speter
9463289166Speter    test -z "$RM" && \
9464289166Speter      func_fatal_help "you must specify an RM program"
9465251883Speter
9466251883Speter    rmdirs=
9467251883Speter
9468251883Speter    for file in $files; do
9469289166Speter      func_dirname "$file" "" "."
9470289166Speter      dir="$func_dirname_result"
9471289166Speter      if test "X$dir" = X.; then
9472289166Speter	odir="$objdir"
9473251883Speter      else
9474289166Speter	odir="$dir/$objdir"
9475251883Speter      fi
9476289166Speter      func_basename "$file"
9477289166Speter      name="$func_basename_result"
9478289166Speter      test "$opt_mode" = uninstall && odir="$dir"
9479251883Speter
9480289166Speter      # Remember odir for removal later, being careful to avoid duplicates
9481289166Speter      if test "$opt_mode" = clean; then
9482251883Speter	case " $rmdirs " in
9483289166Speter	  *" $odir "*) ;;
9484289166Speter	  *) func_append rmdirs " $odir" ;;
9485251883Speter	esac
9486251883Speter      fi
9487251883Speter
9488251883Speter      # Don't error if the file doesn't exist and rm -f was used.
9489289166Speter      if { test -L "$file"; } >/dev/null 2>&1 ||
9490289166Speter	 { test -h "$file"; } >/dev/null 2>&1 ||
9491289166Speter	 test -f "$file"; then
9492251883Speter	:
9493251883Speter      elif test -d "$file"; then
9494251883Speter	exit_status=1
9495251883Speter	continue
9496251883Speter      elif test "$rmforce" = yes; then
9497251883Speter	continue
9498251883Speter      fi
9499251883Speter
9500251883Speter      rmfiles="$file"
9501251883Speter
9502251883Speter      case $name in
9503251883Speter      *.la)
9504251883Speter	# Possibly a libtool archive, so verify it.
9505289166Speter	if func_lalib_p "$file"; then
9506289166Speter	  func_source $dir/$name
9507251883Speter
9508251883Speter	  # Delete the libtool libraries and symlinks.
9509251883Speter	  for n in $library_names; do
9510289166Speter	    func_append rmfiles " $odir/$n"
9511251883Speter	  done
9512289166Speter	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
9513251883Speter
9514289166Speter	  case "$opt_mode" in
9515251883Speter	  clean)
9516289166Speter	    case " $library_names " in
9517251883Speter	    *" $dlname "*) ;;
9518289166Speter	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
9519251883Speter	    esac
9520289166Speter	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
9521251883Speter	    ;;
9522251883Speter	  uninstall)
9523251883Speter	    if test -n "$library_names"; then
9524251883Speter	      # Do each command in the postuninstall commands.
9525289166Speter	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9526251883Speter	    fi
9527251883Speter
9528251883Speter	    if test -n "$old_library"; then
9529251883Speter	      # Do each command in the old_postuninstall commands.
9530289166Speter	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9531251883Speter	    fi
9532251883Speter	    # FIXME: should reinstall the best remaining shared library.
9533251883Speter	    ;;
9534251883Speter	  esac
9535251883Speter	fi
9536251883Speter	;;
9537251883Speter
9538251883Speter      *.lo)
9539251883Speter	# Possibly a libtool object, so verify it.
9540289166Speter	if func_lalib_p "$file"; then
9541251883Speter
9542251883Speter	  # Read the .lo file
9543289166Speter	  func_source $dir/$name
9544251883Speter
9545251883Speter	  # Add PIC object to the list of files to remove.
9546289166Speter	  if test -n "$pic_object" &&
9547289166Speter	     test "$pic_object" != none; then
9548289166Speter	    func_append rmfiles " $dir/$pic_object"
9549251883Speter	  fi
9550251883Speter
9551251883Speter	  # Add non-PIC object to the list of files to remove.
9552289166Speter	  if test -n "$non_pic_object" &&
9553289166Speter	     test "$non_pic_object" != none; then
9554289166Speter	    func_append rmfiles " $dir/$non_pic_object"
9555251883Speter	  fi
9556251883Speter	fi
9557251883Speter	;;
9558251883Speter
9559251883Speter      *)
9560289166Speter	if test "$opt_mode" = clean ; then
9561251883Speter	  noexename=$name
9562251883Speter	  case $file in
9563251883Speter	  *.exe)
9564289166Speter	    func_stripname '' '.exe' "$file"
9565289166Speter	    file=$func_stripname_result
9566289166Speter	    func_stripname '' '.exe' "$name"
9567289166Speter	    noexename=$func_stripname_result
9568251883Speter	    # $file with .exe has already been added to rmfiles,
9569251883Speter	    # add $file without .exe
9570289166Speter	    func_append rmfiles " $file"
9571251883Speter	    ;;
9572251883Speter	  esac
9573251883Speter	  # Do a test to see if this is a libtool program.
9574289166Speter	  if func_ltwrapper_p "$file"; then
9575289166Speter	    if func_ltwrapper_executable_p "$file"; then
9576289166Speter	      func_ltwrapper_scriptname "$file"
9577289166Speter	      relink_command=
9578289166Speter	      func_source $func_ltwrapper_scriptname_result
9579289166Speter	      func_append rmfiles " $func_ltwrapper_scriptname_result"
9580289166Speter	    else
9581289166Speter	      relink_command=
9582289166Speter	      func_source $dir/$noexename
9583289166Speter	    fi
9584251883Speter
9585251883Speter	    # note $name still contains .exe if it was in $file originally
9586251883Speter	    # as does the version of $file that was added into $rmfiles
9587289166Speter	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
9588251883Speter	    if test "$fast_install" = yes && test -n "$relink_command"; then
9589289166Speter	      func_append rmfiles " $odir/lt-$name"
9590251883Speter	    fi
9591251883Speter	    if test "X$noexename" != "X$name" ; then
9592289166Speter	      func_append rmfiles " $odir/lt-${noexename}.c"
9593251883Speter	    fi
9594251883Speter	  fi
9595251883Speter	fi
9596251883Speter	;;
9597251883Speter      esac
9598289166Speter      func_show_eval "$RM $rmfiles" 'exit_status=1'
9599251883Speter    done
9600251883Speter
9601251883Speter    # Try to remove the ${objdir}s in the directories where we deleted files
9602251883Speter    for dir in $rmdirs; do
9603251883Speter      if test -d "$dir"; then
9604289166Speter	func_show_eval "rmdir $dir >/dev/null 2>&1"
9605251883Speter      fi
9606251883Speter    done
9607251883Speter
9608251883Speter    exit $exit_status
9609289166Speter}
9610251883Speter
9611289166Speter{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
9612289166Speter    func_mode_uninstall ${1+"$@"}
9613251883Speter
9614289166Spetertest -z "$opt_mode" && {
9615289166Speter  help="$generic_help"
9616289166Speter  func_fatal_help "you must specify a MODE"
9617289166Speter}
9618251883Speter
9619289166Spetertest -z "$exec_cmd" && \
9620289166Speter  func_fatal_help "invalid operation mode \`$opt_mode'"
9621289166Speter
9622251883Speterif test -n "$exec_cmd"; then
9623289166Speter  eval exec "$exec_cmd"
9624251883Speter  exit $EXIT_FAILURE
9625251883Speterfi
9626251883Speter
9627289166Speterexit $exit_status
9628251883Speter
9629251883Speter
9630251883Speter# The TAGs below are defined such that we never get into a situation
9631251883Speter# in which we disable both kinds of libraries.  Given conflicting
9632251883Speter# choices, we go for a static library, that is the most portable,
9633251883Speter# since we can't tell whether shared libraries were disabled because
9634251883Speter# the user asked for that or because the platform doesn't support
9635251883Speter# them.  This is particularly important on AIX, because we don't
9636251883Speter# support having both static and shared libraries enabled at the same
9637251883Speter# time on that platform, so we default to a shared-only configuration.
9638251883Speter# If a disable-shared tag is given, we'll fallback to a static-only
9639251883Speter# configuration.  But we'll never go from static-only to shared-only.
9640251883Speter
9641251883Speter# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
9642289166Speterbuild_libtool_libs=no
9643289166Speterbuild_old_libs=yes
9644251883Speter# ### END LIBTOOL TAG CONFIG: disable-shared
9645251883Speter
9646251883Speter# ### BEGIN LIBTOOL TAG CONFIG: disable-static
9647289166Speterbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
9648251883Speter# ### END LIBTOOL TAG CONFIG: disable-static
9649251883Speter
9650251883Speter# Local Variables:
9651251883Speter# mode:shell-script
9652251883Speter# sh-indentation:2
9653251883Speter# End:
9654289166Speter# vi:sw=2
9655289166Speter
9656