ltmain.sh revision c3c9db83
1c3c9db83Smrg# Generated from ltmain.m4sh.
2c3c9db83Smrg
3c3c9db83Smrg# ltmain.sh (GNU libtool) 2.2.6b
4c3c9db83Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
5c3c9db83Smrg
6c3c9db83Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
7c3c9db83Smrg# This is free software; see the source for copying conditions.  There is NO
8c3c9db83Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9c3c9db83Smrg
10c3c9db83Smrg# GNU Libtool is free software; you can redistribute it and/or modify
11692f60a7Smrg# it under the terms of the GNU General Public License as published by
12692f60a7Smrg# the Free Software Foundation; either version 2 of the License, or
13692f60a7Smrg# (at your option) any later version.
14692f60a7Smrg#
15c3c9db83Smrg# As a special exception to the GNU General Public License,
16c3c9db83Smrg# if you distribute this file as part of a program or library that
17c3c9db83Smrg# is built using GNU Libtool, you may include this file under the
18c3c9db83Smrg# same distribution terms that you use for the rest of that program.
19c3c9db83Smrg#
20c3c9db83Smrg# GNU Libtool is distributed in the hope that it will be useful, but
21692f60a7Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
22692f60a7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23692f60a7Smrg# General Public License for more details.
24692f60a7Smrg#
25692f60a7Smrg# You should have received a copy of the GNU General Public License
26c3c9db83Smrg# along with GNU Libtool; see the file COPYING.  If not, a copy
27c3c9db83Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
28c3c9db83Smrg# or obtained by writing to the Free Software Foundation, Inc.,
29c3c9db83Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
302e71ea71Smrg
31c3c9db83Smrg# Usage: $progname [OPTION]... [MODE-ARG]...
32c3c9db83Smrg#
33c3c9db83Smrg# Provide generalized library-building support services.
34c3c9db83Smrg#
35c3c9db83Smrg#     --config             show all configuration variables
36c3c9db83Smrg#     --debug              enable verbose shell tracing
37c3c9db83Smrg# -n, --dry-run            display commands without modifying any files
38c3c9db83Smrg#     --features           display basic configuration information and exit
39c3c9db83Smrg#     --mode=MODE          use operation mode MODE
40c3c9db83Smrg#     --preserve-dup-deps  don't remove duplicate dependency libraries
41c3c9db83Smrg#     --quiet, --silent    don't print informational messages
42c3c9db83Smrg#     --tag=TAG            use configuration variables from tag TAG
43c3c9db83Smrg# -v, --verbose            print informational messages (default)
44c3c9db83Smrg#     --version            print version information
45c3c9db83Smrg# -h, --help               print short or long help message
46c3c9db83Smrg#
47c3c9db83Smrg# MODE must be one of the following:
48c3c9db83Smrg#
49c3c9db83Smrg#       clean              remove files from the build directory
50c3c9db83Smrg#       compile            compile a source file into a libtool object
51c3c9db83Smrg#       execute            automatically set library path, then run a program
52c3c9db83Smrg#       finish             complete the installation of libtool libraries
53c3c9db83Smrg#       install            install libraries or executables
54c3c9db83Smrg#       link               create a library or an executable
55c3c9db83Smrg#       uninstall          remove libraries from an installed directory
56c3c9db83Smrg#
57c3c9db83Smrg# MODE-ARGS vary depending on the MODE.
58c3c9db83Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
59c3c9db83Smrg#
60c3c9db83Smrg# When reporting a bug, please describe a test case to reproduce it and
61c3c9db83Smrg# include the following information:
62c3c9db83Smrg#
63c3c9db83Smrg#       host-triplet:	$host
64c3c9db83Smrg#       shell:		$SHELL
65c3c9db83Smrg#       compiler:		$LTCC
66c3c9db83Smrg#       compiler flags:		$LTCFLAGS
67c3c9db83Smrg#       linker:		$LD (gnu? $with_gnu_ld)
68c3c9db83Smrg#       $progname:		(GNU libtool) 2.2.6b
69c3c9db83Smrg#       automake:		$automake_version
70c3c9db83Smrg#       autoconf:		$autoconf_version
71c3c9db83Smrg#
72c3c9db83Smrg# Report bugs to <bug-libtool@gnu.org>.
73692f60a7Smrg
74692f60a7SmrgPROGRAM=ltmain.sh
75692f60a7SmrgPACKAGE=libtool
76c3c9db83SmrgVERSION=2.2.6b
77c3c9db83SmrgTIMESTAMP=""
78c3c9db83Smrgpackage_revision=1.3017
7954569438Smrg
80c3c9db83Smrg# Be Bourne compatible
8154569438Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
8254569438Smrg  emulate sh
8354569438Smrg  NULLCMD=:
8454569438Smrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
8554569438Smrg  # is contrary to our usage.  Disable this feature.
8654569438Smrg  alias -g '${1+"$@"}'='"$@"'
87692f60a7Smrg  setopt NO_GLOB_SUBST
8854569438Smrgelse
8954569438Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
90692f60a7Smrgfi
9154569438SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
9254569438SmrgDUALCASE=1; export DUALCASE # for MKS sh
93692f60a7Smrg
94c3c9db83Smrg# NLS nuisances: We save the old values to restore during execute mode.
95692f60a7Smrg# Only set LANG and LC_ALL to C if already set.
96692f60a7Smrg# These must not be set unconditionally because not all systems understand
97692f60a7Smrg# e.g. LANG=C (notably SCO).
98c3c9db83Smrglt_user_locale=
99c3c9db83Smrglt_safe_locale=
10054569438Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
10154569438Smrgdo
10254569438Smrg  eval "if test \"\${$lt_var+set}\" = set; then
103c3c9db83Smrg          save_$lt_var=\$$lt_var
104c3c9db83Smrg          $lt_var=C
10554569438Smrg	  export $lt_var
106c3c9db83Smrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
107c3c9db83Smrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
10854569438Smrg	fi"
10954569438Smrgdone
11054569438Smrg
111c3c9db83Smrg$lt_unset CDPATH
112c3c9db83Smrg
113c3c9db83Smrg
114c3c9db83Smrg
115c3c9db83Smrg
116c3c9db83Smrg
117c3c9db83Smrg: ${CP="cp -f"}
118c3c9db83Smrg: ${ECHO="echo"}
119c3c9db83Smrg: ${EGREP="/bin/grep -E"}
120c3c9db83Smrg: ${FGREP="/bin/grep -F"}
121c3c9db83Smrg: ${GREP="/bin/grep"}
122c3c9db83Smrg: ${LN_S="ln -s"}
123c3c9db83Smrg: ${MAKE="make"}
124c3c9db83Smrg: ${MKDIR="mkdir"}
125c3c9db83Smrg: ${MV="mv -f"}
126c3c9db83Smrg: ${RM="rm -f"}
127c3c9db83Smrg: ${SED="/bin/sed"}
128c3c9db83Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
129c3c9db83Smrg: ${Xsed="$SED -e 1s/^X//"}
130c3c9db83Smrg
131c3c9db83Smrg# Global variables:
132c3c9db83SmrgEXIT_SUCCESS=0
133c3c9db83SmrgEXIT_FAILURE=1
134c3c9db83SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
135c3c9db83SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
136c3c9db83Smrg
137c3c9db83Smrgexit_status=$EXIT_SUCCESS
138692f60a7Smrg
139692f60a7Smrg# Make sure IFS has a sensible default
140692f60a7Smrglt_nl='
141692f60a7Smrg'
142692f60a7SmrgIFS=" 	$lt_nl"
143692f60a7Smrg
144c3c9db83Smrgdirname="s,/[^/]*$,,"
145c3c9db83Smrgbasename="s,^.*/,,"
146c3c9db83Smrg
147c3c9db83Smrg# func_dirname_and_basename file append nondir_replacement
148c3c9db83Smrg# perform func_basename and func_dirname in a single function
149c3c9db83Smrg# call:
150c3c9db83Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
151c3c9db83Smrg#             add APPEND to the result, otherwise set result
152c3c9db83Smrg#             to NONDIR_REPLACEMENT.
153c3c9db83Smrg#             value returned in "$func_dirname_result"
154c3c9db83Smrg#   basename: Compute filename of FILE.
155c3c9db83Smrg#             value retuned in "$func_basename_result"
156c3c9db83Smrg# Implementation must be kept synchronized with func_dirname
157c3c9db83Smrg# and func_basename. For efficiency, we do not delegate to
158c3c9db83Smrg# those functions but instead duplicate the functionality here.
159c3c9db83Smrgfunc_dirname_and_basename ()
160c3c9db83Smrg{
161c3c9db83Smrg  # Extract subdirectory from the argument.
162c3c9db83Smrg  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
163c3c9db83Smrg  if test "X$func_dirname_result" = "X${1}"; then
164c3c9db83Smrg    func_dirname_result="${3}"
165c3c9db83Smrg  else
166c3c9db83Smrg    func_dirname_result="$func_dirname_result${2}"
167c3c9db83Smrg  fi
168c3c9db83Smrg  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
169c3c9db83Smrg}
17085ee4c00Smrg
171c3c9db83Smrg# Generated shell functions inserted here.
172c3c9db83Smrg
173c3c9db83Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
174c3c9db83Smrg# is ksh but when the shell is invoked as "sh" and the current value of
175c3c9db83Smrg# the _XPG environment variable is not equal to 1 (one), the special
176c3c9db83Smrg# positional parameter $0, within a function call, is the name of the
177c3c9db83Smrg# function.
178c3c9db83Smrgprogpath="$0"
179c3c9db83Smrg
180c3c9db83Smrg# The name of this program:
181c3c9db83Smrg# In the unlikely event $progname began with a '-', it would play havoc with
182c3c9db83Smrg# func_echo (imagine progname=-n), so we prepend ./ in that case:
183c3c9db83Smrgfunc_dirname_and_basename "$progpath"
184c3c9db83Smrgprogname=$func_basename_result
185c3c9db83Smrgcase $progname in
186c3c9db83Smrg  -*) progname=./$progname ;;
187c3c9db83Smrgesac
188c3c9db83Smrg
189c3c9db83Smrg# Make sure we have an absolute path for reexecution:
190c3c9db83Smrgcase $progpath in
191c3c9db83Smrg  [\\/]*|[A-Za-z]:\\*) ;;
192c3c9db83Smrg  *[\\/]*)
193c3c9db83Smrg     progdir=$func_dirname_result
194c3c9db83Smrg     progdir=`cd "$progdir" && pwd`
195c3c9db83Smrg     progpath="$progdir/$progname"
196c3c9db83Smrg     ;;
197c3c9db83Smrg  *)
198c3c9db83Smrg     save_IFS="$IFS"
199c3c9db83Smrg     IFS=:
200c3c9db83Smrg     for progdir in $PATH; do
201c3c9db83Smrg       IFS="$save_IFS"
202c3c9db83Smrg       test -x "$progdir/$progname" && break
203c3c9db83Smrg     done
204c3c9db83Smrg     IFS="$save_IFS"
205c3c9db83Smrg     test -n "$progdir" || progdir=`pwd`
206c3c9db83Smrg     progpath="$progdir/$progname"
207c3c9db83Smrg     ;;
208c3c9db83Smrgesac
209c3c9db83Smrg
210c3c9db83Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
211c3c9db83Smrg# metacharacters that are still active within double-quoted strings.
212c3c9db83SmrgXsed="${SED}"' -e 1s/^X//'
213c3c9db83Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
214c3c9db83Smrg
215c3c9db83Smrg# Same as above, but do not quote variable references.
216c3c9db83Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
217c3c9db83Smrg
218c3c9db83Smrg# Re-`\' parameter expansions in output of double_quote_subst that were
219c3c9db83Smrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
220c3c9db83Smrg# in input to double_quote_subst, that '$' was protected from expansion.
221c3c9db83Smrg# Since each input `\' is now two `\'s, look for any number of runs of
222c3c9db83Smrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
223c3c9db83Smrgbs='\\'
224c3c9db83Smrgbs2='\\\\'
225c3c9db83Smrgbs4='\\\\\\\\'
226c3c9db83Smrgdollar='\$'
227c3c9db83Smrgsed_double_backslash="\
228c3c9db83Smrg  s/$bs4/&\\
229c3c9db83Smrg/g
230c3c9db83Smrg  s/^$bs2$dollar/$bs&/
231c3c9db83Smrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
232c3c9db83Smrg  s/\n//g"
233c3c9db83Smrg
234c3c9db83Smrg# Standard options:
235c3c9db83Smrgopt_dry_run=false
236c3c9db83Smrgopt_help=false
237c3c9db83Smrgopt_quiet=false
238c3c9db83Smrgopt_verbose=false
239c3c9db83Smrgopt_warning=:
240c3c9db83Smrg
241c3c9db83Smrg# func_echo arg...
242c3c9db83Smrg# Echo program name prefixed message, along with the current mode
243c3c9db83Smrg# name if it has been set yet.
244c3c9db83Smrgfunc_echo ()
245c3c9db83Smrg{
246c3c9db83Smrg    $ECHO "$progname${mode+: }$mode: $*"
247c3c9db83Smrg}
248c3c9db83Smrg
249c3c9db83Smrg# func_verbose arg...
250c3c9db83Smrg# Echo program name prefixed message in verbose mode only.
251c3c9db83Smrgfunc_verbose ()
252c3c9db83Smrg{
253c3c9db83Smrg    $opt_verbose && func_echo ${1+"$@"}
254c3c9db83Smrg
255c3c9db83Smrg    # A bug in bash halts the script if the last line of a function
256c3c9db83Smrg    # fails when set -e is in force, so we need another command to
257c3c9db83Smrg    # work around that:
258c3c9db83Smrg    :
259c3c9db83Smrg}
260c3c9db83Smrg
261c3c9db83Smrg# func_error arg...
262c3c9db83Smrg# Echo program name prefixed message to standard error.
263c3c9db83Smrgfunc_error ()
264c3c9db83Smrg{
265c3c9db83Smrg    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
266c3c9db83Smrg}
267c3c9db83Smrg
268c3c9db83Smrg# func_warning arg...
269c3c9db83Smrg# Echo program name prefixed warning message to standard error.
270c3c9db83Smrgfunc_warning ()
271c3c9db83Smrg{
272c3c9db83Smrg    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
273c3c9db83Smrg
274c3c9db83Smrg    # bash bug again:
275c3c9db83Smrg    :
276c3c9db83Smrg}
277c3c9db83Smrg
278c3c9db83Smrg# func_fatal_error arg...
279c3c9db83Smrg# Echo program name prefixed message to standard error, and exit.
280c3c9db83Smrgfunc_fatal_error ()
281c3c9db83Smrg{
282c3c9db83Smrg    func_error ${1+"$@"}
283c3c9db83Smrg    exit $EXIT_FAILURE
284c3c9db83Smrg}
285c3c9db83Smrg
286c3c9db83Smrg# func_fatal_help arg...
287c3c9db83Smrg# Echo program name prefixed message to standard error, followed by
288c3c9db83Smrg# a help hint, and exit.
289c3c9db83Smrgfunc_fatal_help ()
290c3c9db83Smrg{
291c3c9db83Smrg    func_error ${1+"$@"}
292c3c9db83Smrg    func_fatal_error "$help"
293c3c9db83Smrg}
294c3c9db83Smrghelp="Try \`$progname --help' for more information."  ## default
295c3c9db83Smrg
296c3c9db83Smrg
297c3c9db83Smrg# func_grep expression filename
298c3c9db83Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
299c3c9db83Smrgfunc_grep ()
300c3c9db83Smrg{
301c3c9db83Smrg    $GREP "$1" "$2" >/dev/null 2>&1
302c3c9db83Smrg}
303c3c9db83Smrg
304c3c9db83Smrg
305c3c9db83Smrg# func_mkdir_p directory-path
306c3c9db83Smrg# Make sure the entire path to DIRECTORY-PATH is available.
307c3c9db83Smrgfunc_mkdir_p ()
308c3c9db83Smrg{
309c3c9db83Smrg    my_directory_path="$1"
310c3c9db83Smrg    my_dir_list=
311c3c9db83Smrg
312c3c9db83Smrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
313c3c9db83Smrg
314c3c9db83Smrg      # Protect directory names starting with `-'
315c3c9db83Smrg      case $my_directory_path in
316c3c9db83Smrg        -*) my_directory_path="./$my_directory_path" ;;
317c3c9db83Smrg      esac
318c3c9db83Smrg
319c3c9db83Smrg      # While some portion of DIR does not yet exist...
320c3c9db83Smrg      while test ! -d "$my_directory_path"; do
321c3c9db83Smrg        # ...make a list in topmost first order.  Use a colon delimited
322c3c9db83Smrg	# list incase some portion of path contains whitespace.
323c3c9db83Smrg        my_dir_list="$my_directory_path:$my_dir_list"
324c3c9db83Smrg
325c3c9db83Smrg        # If the last portion added has no slash in it, the list is done
326c3c9db83Smrg        case $my_directory_path in */*) ;; *) break ;; esac
327c3c9db83Smrg
328c3c9db83Smrg        # ...otherwise throw away the child directory and loop
329c3c9db83Smrg        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
330c3c9db83Smrg      done
331c3c9db83Smrg      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
332c3c9db83Smrg
333c3c9db83Smrg      save_mkdir_p_IFS="$IFS"; IFS=':'
334c3c9db83Smrg      for my_dir in $my_dir_list; do
335c3c9db83Smrg	IFS="$save_mkdir_p_IFS"
336c3c9db83Smrg        # mkdir can fail with a `File exist' error if two processes
337c3c9db83Smrg        # try to create one of the directories concurrently.  Don't
338c3c9db83Smrg        # stop in that case!
339c3c9db83Smrg        $MKDIR "$my_dir" 2>/dev/null || :
340c3c9db83Smrg      done
341c3c9db83Smrg      IFS="$save_mkdir_p_IFS"
342c3c9db83Smrg
343c3c9db83Smrg      # Bail out if we (or some other process) failed to create a directory.
344c3c9db83Smrg      test -d "$my_directory_path" || \
345c3c9db83Smrg        func_fatal_error "Failed to create \`$1'"
346c3c9db83Smrg    fi
347c3c9db83Smrg}
348692f60a7Smrg
349692f60a7Smrg
350692f60a7Smrg# func_mktempdir [string]
351692f60a7Smrg# Make a temporary directory that won't clash with other running
352692f60a7Smrg# libtool processes, and avoids race conditions if possible.  If
353692f60a7Smrg# given, STRING is the basename for that directory.
354692f60a7Smrgfunc_mktempdir ()
355692f60a7Smrg{
356692f60a7Smrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
357692f60a7Smrg
358c3c9db83Smrg    if test "$opt_dry_run" = ":"; then
359692f60a7Smrg      # Return a directory name, but don't create it in dry-run mode
360692f60a7Smrg      my_tmpdir="${my_template}-$$"
361692f60a7Smrg    else
362692f60a7Smrg
363692f60a7Smrg      # If mktemp works, use that first and foremost
364692f60a7Smrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
365692f60a7Smrg
366692f60a7Smrg      if test ! -d "$my_tmpdir"; then
367c3c9db83Smrg        # Failing that, at least try and use $RANDOM to avoid a race
368c3c9db83Smrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
369692f60a7Smrg
370c3c9db83Smrg        save_mktempdir_umask=`umask`
371c3c9db83Smrg        umask 0077
372c3c9db83Smrg        $MKDIR "$my_tmpdir"
373c3c9db83Smrg        umask $save_mktempdir_umask
374692f60a7Smrg      fi
375692f60a7Smrg
376692f60a7Smrg      # If we're not in dry-run mode, bomb out on failure
377c3c9db83Smrg      test -d "$my_tmpdir" || \
378c3c9db83Smrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
379692f60a7Smrg    fi
380692f60a7Smrg
381c3c9db83Smrg    $ECHO "X$my_tmpdir" | $Xsed
382692f60a7Smrg}
383692f60a7Smrg
384692f60a7Smrg
385c3c9db83Smrg# func_quote_for_eval arg
386c3c9db83Smrg# Aesthetically quote ARG to be evaled later.
387c3c9db83Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
388c3c9db83Smrg# is double-quoted, suitable for a subsequent eval, whereas
389c3c9db83Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
390c3c9db83Smrg# which are still active within double quotes backslashified.
391c3c9db83Smrgfunc_quote_for_eval ()
392692f60a7Smrg{
393c3c9db83Smrg    case $1 in
394c3c9db83Smrg      *[\\\`\"\$]*)
395c3c9db83Smrg	func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
396c3c9db83Smrg      *)
397c3c9db83Smrg        func_quote_for_eval_unquoted_result="$1" ;;
398c3c9db83Smrg    esac
399c3c9db83Smrg
400c3c9db83Smrg    case $func_quote_for_eval_unquoted_result in
401c3c9db83Smrg      # Double-quote args containing shell metacharacters to delay
402c3c9db83Smrg      # word splitting, command substitution and and variable
403c3c9db83Smrg      # expansion for a subsequent eval.
404c3c9db83Smrg      # Many Bourne shells cannot handle close brackets correctly
405c3c9db83Smrg      # in scan sets, so we specify it separately.
406c3c9db83Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
407c3c9db83Smrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
408c3c9db83Smrg        ;;
409c3c9db83Smrg      *)
410c3c9db83Smrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
411692f60a7Smrg    esac
412692f60a7Smrg}
413692f60a7Smrg
414692f60a7Smrg
415c3c9db83Smrg# func_quote_for_expand arg
416c3c9db83Smrg# Aesthetically quote ARG to be evaled later; same as above,
417c3c9db83Smrg# but do not quote variable references.
418c3c9db83Smrgfunc_quote_for_expand ()
419692f60a7Smrg{
420c3c9db83Smrg    case $1 in
421c3c9db83Smrg      *[\\\`\"]*)
422c3c9db83Smrg	my_arg=`$ECHO "X$1" | $Xsed \
423c3c9db83Smrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
424692f60a7Smrg      *)
425c3c9db83Smrg        my_arg="$1" ;;
426c3c9db83Smrg    esac
427c3c9db83Smrg
428c3c9db83Smrg    case $my_arg in
429c3c9db83Smrg      # Double-quote args containing shell metacharacters to delay
430c3c9db83Smrg      # word splitting and command substitution for a subsequent eval.
431c3c9db83Smrg      # Many Bourne shells cannot handle close brackets correctly
432c3c9db83Smrg      # in scan sets, so we specify it separately.
433c3c9db83Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
434c3c9db83Smrg        my_arg="\"$my_arg\""
435c3c9db83Smrg        ;;
436c3c9db83Smrg    esac
437c3c9db83Smrg
438c3c9db83Smrg    func_quote_for_expand_result="$my_arg"
439692f60a7Smrg}
440692f60a7Smrg
441692f60a7Smrg
442c3c9db83Smrg# func_show_eval cmd [fail_exp]
443c3c9db83Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
444c3c9db83Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
445c3c9db83Smrg# is given, then evaluate it.
446c3c9db83Smrgfunc_show_eval ()
447692f60a7Smrg{
448c3c9db83Smrg    my_cmd="$1"
449c3c9db83Smrg    my_fail_exp="${2-:}"
45085ee4c00Smrg
451c3c9db83Smrg    ${opt_silent-false} || {
452c3c9db83Smrg      func_quote_for_expand "$my_cmd"
453c3c9db83Smrg      eval "func_echo $func_quote_for_expand_result"
454c3c9db83Smrg    }
455c3c9db83Smrg
456c3c9db83Smrg    if ${opt_dry_run-false}; then :; else
457c3c9db83Smrg      eval "$my_cmd"
458c3c9db83Smrg      my_status=$?
459c3c9db83Smrg      if test "$my_status" -eq 0; then :; else
460c3c9db83Smrg	eval "(exit $my_status); $my_fail_exp"
461c3c9db83Smrg      fi
462692f60a7Smrg    fi
463692f60a7Smrg}
464692f60a7Smrg
465c3c9db83Smrg
466c3c9db83Smrg# func_show_eval_locale cmd [fail_exp]
467c3c9db83Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
468c3c9db83Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
469c3c9db83Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
470c3c9db83Smrgfunc_show_eval_locale ()
471692f60a7Smrg{
472c3c9db83Smrg    my_cmd="$1"
473c3c9db83Smrg    my_fail_exp="${2-:}"
474c3c9db83Smrg
475c3c9db83Smrg    ${opt_silent-false} || {
476c3c9db83Smrg      func_quote_for_expand "$my_cmd"
477c3c9db83Smrg      eval "func_echo $func_quote_for_expand_result"
478c3c9db83Smrg    }
479c3c9db83Smrg
480c3c9db83Smrg    if ${opt_dry_run-false}; then :; else
481c3c9db83Smrg      eval "$lt_user_locale
482c3c9db83Smrg	    $my_cmd"
483c3c9db83Smrg      my_status=$?
484c3c9db83Smrg      eval "$lt_safe_locale"
485c3c9db83Smrg      if test "$my_status" -eq 0; then :; else
486c3c9db83Smrg	eval "(exit $my_status); $my_fail_exp"
487c3c9db83Smrg      fi
488692f60a7Smrg    fi
489c3c9db83Smrg}
490692f60a7Smrg
49185ee4c00Smrg
492c3c9db83Smrg
493c3c9db83Smrg
494c3c9db83Smrg
495c3c9db83Smrg# func_version
496c3c9db83Smrg# Echo version message to standard output and exit.
497c3c9db83Smrgfunc_version ()
498c3c9db83Smrg{
499c3c9db83Smrg    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
500c3c9db83Smrg        s/^# //
501c3c9db83Smrg	s/^# *$//
502c3c9db83Smrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
503c3c9db83Smrg        p
504c3c9db83Smrg     }' < "$progpath"
505c3c9db83Smrg     exit $?
506c3c9db83Smrg}
507c3c9db83Smrg
508c3c9db83Smrg# func_usage
509c3c9db83Smrg# Echo short help message to standard output and exit.
510c3c9db83Smrgfunc_usage ()
511c3c9db83Smrg{
512c3c9db83Smrg    $SED -n '/^# Usage:/,/# -h/ {
513c3c9db83Smrg        s/^# //
514c3c9db83Smrg	s/^# *$//
515c3c9db83Smrg	s/\$progname/'$progname'/
516c3c9db83Smrg	p
517c3c9db83Smrg    }' < "$progpath"
518c3c9db83Smrg    $ECHO
519c3c9db83Smrg    $ECHO "run \`$progname --help | more' for full usage"
520c3c9db83Smrg    exit $?
521c3c9db83Smrg}
522c3c9db83Smrg
523c3c9db83Smrg# func_help
524c3c9db83Smrg# Echo long help message to standard output and exit.
525c3c9db83Smrgfunc_help ()
526c3c9db83Smrg{
527c3c9db83Smrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
528c3c9db83Smrg        s/^# //
529c3c9db83Smrg	s/^# *$//
530c3c9db83Smrg	s*\$progname*'$progname'*
531c3c9db83Smrg	s*\$host*'"$host"'*
532c3c9db83Smrg	s*\$SHELL*'"$SHELL"'*
533c3c9db83Smrg	s*\$LTCC*'"$LTCC"'*
534c3c9db83Smrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
535c3c9db83Smrg	s*\$LD*'"$LD"'*
536c3c9db83Smrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
537c3c9db83Smrg	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
538c3c9db83Smrg	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
539c3c9db83Smrg	p
540c3c9db83Smrg     }' < "$progpath"
541c3c9db83Smrg    exit $?
542c3c9db83Smrg}
543c3c9db83Smrg
544c3c9db83Smrg# func_missing_arg argname
545c3c9db83Smrg# Echo program name prefixed message to standard error and set global
546c3c9db83Smrg# exit_cmd.
547c3c9db83Smrgfunc_missing_arg ()
548c3c9db83Smrg{
549c3c9db83Smrg    func_error "missing argument for $1"
550c3c9db83Smrg    exit_cmd=exit
551692f60a7Smrg}
552692f60a7Smrg
553c3c9db83Smrgexit_cmd=:
55485ee4c00Smrg
55585ee4c00Smrg
556c3c9db83Smrg
557c3c9db83Smrg
558c3c9db83Smrg
559c3c9db83Smrg# Check that we have a working $ECHO.
560c3c9db83Smrgif test "X$1" = X--no-reexec; then
561c3c9db83Smrg  # Discard the --no-reexec flag, and continue.
56285ee4c00Smrg  shift
563c3c9db83Smrgelif test "X$1" = X--fallback-echo; then
564c3c9db83Smrg  # Avoid inline document here, it may be left over
565c3c9db83Smrg  :
566c3c9db83Smrgelif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
567c3c9db83Smrg  # Yippee, $ECHO works!
568c3c9db83Smrg  :
569c3c9db83Smrgelse
570c3c9db83Smrg  # Restart under the correct shell, and then maybe $ECHO will work.
571c3c9db83Smrg  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
572c3c9db83Smrgfi
573692f60a7Smrg
574c3c9db83Smrgif test "X$1" = X--fallback-echo; then
575c3c9db83Smrg  # used as fallback echo
576c3c9db83Smrg  shift
577c3c9db83Smrg  cat <<EOF
578c3c9db83Smrg$*
579c3c9db83SmrgEOF
580c3c9db83Smrg  exit $EXIT_SUCCESS
581c3c9db83Smrgfi
582692f60a7Smrg
583c3c9db83Smrgmagic="%%%MAGIC variable%%%"
584c3c9db83Smrgmagic_exe="%%%MAGIC EXE variable%%%"
585692f60a7Smrg
586c3c9db83Smrg# Global variables.
587c3c9db83Smrg# $mode is unset
588c3c9db83Smrgnonopt=
589c3c9db83Smrgexecute_dlfiles=
590c3c9db83Smrgpreserve_args=
591c3c9db83Smrglo2o="s/\\.lo\$/.${objext}/"
592c3c9db83Smrgo2lo="s/\\.${objext}\$/.lo/"
593c3c9db83Smrgextracted_archives=
594c3c9db83Smrgextracted_serial=0
59585ee4c00Smrg
596c3c9db83Smrgopt_dry_run=false
597c3c9db83Smrgopt_duplicate_deps=false
598c3c9db83Smrgopt_silent=false
599c3c9db83Smrgopt_debug=:
600692f60a7Smrg
601c3c9db83Smrg# If this variable is set in any of the actions, the command in it
602c3c9db83Smrg# will be execed at the end.  This prevents here-documents from being
603c3c9db83Smrg# left over by shells.
604c3c9db83Smrgexec_cmd=
605c3c9db83Smrg
606c3c9db83Smrg# func_fatal_configuration arg...
607c3c9db83Smrg# Echo program name prefixed message to standard error, followed by
608c3c9db83Smrg# a configuration failure hint, and exit.
609c3c9db83Smrgfunc_fatal_configuration ()
610c3c9db83Smrg{
611c3c9db83Smrg    func_error ${1+"$@"}
612c3c9db83Smrg    func_error "See the $PACKAGE documentation for more information."
613c3c9db83Smrg    func_fatal_error "Fatal configuration error."
614c3c9db83Smrg}
61554569438Smrg
61685ee4c00Smrg
617c3c9db83Smrg# func_config
618c3c9db83Smrg# Display the configuration for all the tags in this script.
619c3c9db83Smrgfunc_config ()
620c3c9db83Smrg{
621c3c9db83Smrg    re_begincf='^# ### BEGIN LIBTOOL'
622c3c9db83Smrg    re_endcf='^# ### END LIBTOOL'
623c3c9db83Smrg
624c3c9db83Smrg    # Default configuration.
625c3c9db83Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
626692f60a7Smrg
627692f60a7Smrg    # Now print the configurations for the tags.
628692f60a7Smrg    for tagname in $taglist; do
629c3c9db83Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
630692f60a7Smrg    done
6312e71ea71Smrg
632c3c9db83Smrg    exit $?
633c3c9db83Smrg}
6342e71ea71Smrg
635c3c9db83Smrg# func_features
636c3c9db83Smrg# Display the features supported by this script.
637c3c9db83Smrgfunc_features ()
638c3c9db83Smrg{
639c3c9db83Smrg    $ECHO "host: $host"
640692f60a7Smrg    if test "$build_libtool_libs" = yes; then
641c3c9db83Smrg      $ECHO "enable shared libraries"
642692f60a7Smrg    else
643c3c9db83Smrg      $ECHO "disable shared libraries"
644692f60a7Smrg    fi
645692f60a7Smrg    if test "$build_old_libs" = yes; then
646c3c9db83Smrg      $ECHO "enable static libraries"
647692f60a7Smrg    else
648c3c9db83Smrg      $ECHO "disable static libraries"
649692f60a7Smrg    fi
650c3c9db83Smrg
651692f60a7Smrg    exit $?
652c3c9db83Smrg}
653692f60a7Smrg
654c3c9db83Smrg# func_enable_tag tagname
655c3c9db83Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
656c3c9db83Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
657c3c9db83Smrg# variable here.
658c3c9db83Smrgfunc_enable_tag ()
659c3c9db83Smrg{
660c3c9db83Smrg  # Global variable:
661c3c9db83Smrg  tagname="$1"
662692f60a7Smrg
663c3c9db83Smrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
664c3c9db83Smrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
665c3c9db83Smrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
66685ee4c00Smrg
667c3c9db83Smrg  # Validate tagname.
668c3c9db83Smrg  case $tagname in
669c3c9db83Smrg    *[!-_A-Za-z0-9,/]*)
670c3c9db83Smrg      func_fatal_error "invalid tag name: $tagname"
671c3c9db83Smrg      ;;
672c3c9db83Smrg  esac
673692f60a7Smrg
674c3c9db83Smrg  # Don't test for the "default" C tag, as we know it's
675c3c9db83Smrg  # there but not specially marked.
676c3c9db83Smrg  case $tagname in
677c3c9db83Smrg    CC) ;;
678c3c9db83Smrg    *)
679c3c9db83Smrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
680c3c9db83Smrg	taglist="$taglist $tagname"
681c3c9db83Smrg
682c3c9db83Smrg	# Evaluate the configuration.  Be careful to quote the path
683c3c9db83Smrg	# and the sed script, to avoid splitting on whitespace, but
684c3c9db83Smrg	# also don't use non-portable quotes within backquotes within
685c3c9db83Smrg	# quotes we have to do it in 2 steps:
686c3c9db83Smrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
687c3c9db83Smrg	eval "$extractedcf"
688c3c9db83Smrg      else
689c3c9db83Smrg	func_error "ignoring unknown tag $tagname"
690c3c9db83Smrg      fi
691c3c9db83Smrg      ;;
692c3c9db83Smrg  esac
693c3c9db83Smrg}
694c3c9db83Smrg
695c3c9db83Smrg# Parse options once, thoroughly.  This comes as soon as possible in
696c3c9db83Smrg# the script to make things like `libtool --version' happen quickly.
697c3c9db83Smrg{
6982e71ea71Smrg
699c3c9db83Smrg  # Shorthand for --mode=foo, only valid as the first argument
700c3c9db83Smrg  case $1 in
701c3c9db83Smrg  clean|clea|cle|cl)
702c3c9db83Smrg    shift; set dummy --mode clean ${1+"$@"}; shift
703692f60a7Smrg    ;;
704c3c9db83Smrg  compile|compil|compi|comp|com|co|c)
705c3c9db83Smrg    shift; set dummy --mode compile ${1+"$@"}; shift
706692f60a7Smrg    ;;
707c3c9db83Smrg  execute|execut|execu|exec|exe|ex|e)
708c3c9db83Smrg    shift; set dummy --mode execute ${1+"$@"}; shift
70985ee4c00Smrg    ;;
710c3c9db83Smrg  finish|finis|fini|fin|fi|f)
711c3c9db83Smrg    shift; set dummy --mode finish ${1+"$@"}; shift
71285ee4c00Smrg    ;;
713c3c9db83Smrg  install|instal|insta|inst|ins|in|i)
714c3c9db83Smrg    shift; set dummy --mode install ${1+"$@"}; shift
715c3c9db83Smrg    ;;
716c3c9db83Smrg  link|lin|li|l)
717c3c9db83Smrg    shift; set dummy --mode link ${1+"$@"}; shift
718c3c9db83Smrg    ;;
719c3c9db83Smrg  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
720c3c9db83Smrg    shift; set dummy --mode uninstall ${1+"$@"}; shift
721692f60a7Smrg    ;;
722692f60a7Smrg  esac
723692f60a7Smrg
724c3c9db83Smrg  # Parse non-mode specific arguments:
725c3c9db83Smrg  while test "$#" -gt 0; do
726c3c9db83Smrg    opt="$1"
727c3c9db83Smrg    shift
72885ee4c00Smrg
729c3c9db83Smrg    case $opt in
730c3c9db83Smrg      --config)		func_config					;;
73185ee4c00Smrg
732c3c9db83Smrg      --debug)		preserve_args="$preserve_args $opt"
733c3c9db83Smrg			func_echo "enabling shell trace mode"
734c3c9db83Smrg			opt_debug='set -x'
735c3c9db83Smrg			$opt_debug
736c3c9db83Smrg			;;
73785ee4c00Smrg
738c3c9db83Smrg      -dlopen)		test "$#" -eq 0 && func_missing_arg "$opt" && break
739c3c9db83Smrg			execute_dlfiles="$execute_dlfiles $1"
740c3c9db83Smrg			shift
741c3c9db83Smrg			;;
74285ee4c00Smrg
743c3c9db83Smrg      --dry-run | -n)	opt_dry_run=:					;;
744c3c9db83Smrg      --features)       func_features					;;
745c3c9db83Smrg      --finish)		mode="finish"					;;
746c3c9db83Smrg
747c3c9db83Smrg      --mode)		test "$#" -eq 0 && func_missing_arg "$opt" && break
748c3c9db83Smrg			case $1 in
749c3c9db83Smrg			  # Valid mode arguments:
750c3c9db83Smrg			  clean)	;;
751c3c9db83Smrg			  compile)	;;
752c3c9db83Smrg			  execute)	;;
753c3c9db83Smrg			  finish)	;;
754c3c9db83Smrg			  install)	;;
755c3c9db83Smrg			  link)		;;
756c3c9db83Smrg			  relink)	;;
757c3c9db83Smrg			  uninstall)	;;
758c3c9db83Smrg
759c3c9db83Smrg			  # Catch anything else as an error
760c3c9db83Smrg			  *) func_error "invalid argument for $opt"
761c3c9db83Smrg			     exit_cmd=exit
762c3c9db83Smrg			     break
763c3c9db83Smrg			     ;;
764c3c9db83Smrg		        esac
765c3c9db83Smrg
766c3c9db83Smrg			mode="$1"
767c3c9db83Smrg			shift
768c3c9db83Smrg			;;
769c3c9db83Smrg
770c3c9db83Smrg      --preserve-dup-deps)
771c3c9db83Smrg			opt_duplicate_deps=:				;;
772c3c9db83Smrg
773c3c9db83Smrg      --quiet|--silent)	preserve_args="$preserve_args $opt"
774c3c9db83Smrg			opt_silent=:
775c3c9db83Smrg			;;
776c3c9db83Smrg
777c3c9db83Smrg      --verbose| -v)	preserve_args="$preserve_args $opt"
778c3c9db83Smrg			opt_silent=false
779c3c9db83Smrg			;;
780c3c9db83Smrg
781c3c9db83Smrg      --tag)		test "$#" -eq 0 && func_missing_arg "$opt" && break
782c3c9db83Smrg			preserve_args="$preserve_args $opt $1"
783c3c9db83Smrg			func_enable_tag "$1"	# tagname is set here
784c3c9db83Smrg			shift
785c3c9db83Smrg			;;
786c3c9db83Smrg
787c3c9db83Smrg      # Separate optargs to long options:
788c3c9db83Smrg      -dlopen=*|--mode=*|--tag=*)
789c3c9db83Smrg			func_opt_split "$opt"
790c3c9db83Smrg			set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
791c3c9db83Smrg			shift
792c3c9db83Smrg			;;
793c3c9db83Smrg
794c3c9db83Smrg      -\?|-h)		func_usage					;;
795c3c9db83Smrg      --help)		opt_help=:					;;
796c3c9db83Smrg      --version)	func_version					;;
797c3c9db83Smrg
798c3c9db83Smrg      -*)		func_fatal_help "unrecognized option \`$opt'"	;;
799c3c9db83Smrg
800c3c9db83Smrg      *)		nonopt="$opt"
801c3c9db83Smrg			break
802c3c9db83Smrg			;;
803c3c9db83Smrg    esac
804c3c9db83Smrg  done
805c3c9db83Smrg
806c3c9db83Smrg
807c3c9db83Smrg  case $host in
808c3c9db83Smrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
809c3c9db83Smrg      # don't eliminate duplications in $postdeps and $predeps
810c3c9db83Smrg      opt_duplicate_compiler_generated_deps=:
8112e71ea71Smrg      ;;
8122e71ea71Smrg    *)
813c3c9db83Smrg      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
814c3c9db83Smrg      ;;
815c3c9db83Smrg  esac
81685ee4c00Smrg
817c3c9db83Smrg  # Having warned about all mis-specified options, bail out if
818c3c9db83Smrg  # anything was wrong.
819c3c9db83Smrg  $exit_cmd $EXIT_FAILURE
820c3c9db83Smrg}
821c3c9db83Smrg
822c3c9db83Smrg# func_check_version_match
823c3c9db83Smrg# Ensure that we are using m4 macros, and libtool script from the same
824c3c9db83Smrg# release of libtool.
825c3c9db83Smrgfunc_check_version_match ()
826c3c9db83Smrg{
827c3c9db83Smrg  if test "$package_revision" != "$macro_revision"; then
828c3c9db83Smrg    if test "$VERSION" != "$macro_version"; then
829c3c9db83Smrg      if test -z "$macro_version"; then
830c3c9db83Smrg        cat >&2 <<_LT_EOF
831c3c9db83Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
832c3c9db83Smrg$progname: definition of this LT_INIT comes from an older release.
833c3c9db83Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
834c3c9db83Smrg$progname: and run autoconf again.
835c3c9db83Smrg_LT_EOF
836c3c9db83Smrg      else
837c3c9db83Smrg        cat >&2 <<_LT_EOF
838c3c9db83Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
839c3c9db83Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
840c3c9db83Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
841c3c9db83Smrg$progname: and run autoconf again.
842c3c9db83Smrg_LT_EOF
843692f60a7Smrg      fi
844c3c9db83Smrg    else
845c3c9db83Smrg      cat >&2 <<_LT_EOF
846c3c9db83Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
847c3c9db83Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
848c3c9db83Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
849c3c9db83Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
850c3c9db83Smrg_LT_EOF
851c3c9db83Smrg    fi
852c3c9db83Smrg
853c3c9db83Smrg    exit $EXIT_MISMATCH
854c3c9db83Smrg  fi
855c3c9db83Smrg}
856c3c9db83Smrg
857c3c9db83Smrg
858c3c9db83Smrg## ----------- ##
859c3c9db83Smrg##    Main.    ##
860c3c9db83Smrg## ----------- ##
861c3c9db83Smrg
862c3c9db83Smrg$opt_help || {
863c3c9db83Smrg  # Sanity checks first:
864c3c9db83Smrg  func_check_version_match
865c3c9db83Smrg
866c3c9db83Smrg  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
867c3c9db83Smrg    func_fatal_configuration "not configured to build any kind of library"
868692f60a7Smrg  fi
869692f60a7Smrg
870c3c9db83Smrg  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
871c3c9db83Smrg
872c3c9db83Smrg
873c3c9db83Smrg  # Darwin sucks
874c3c9db83Smrg  eval std_shrext=\"$shrext_cmds\"
875c3c9db83Smrg
876c3c9db83Smrg
877692f60a7Smrg  # Only execute mode is allowed to have -dlopen flags.
878692f60a7Smrg  if test -n "$execute_dlfiles" && test "$mode" != execute; then
879c3c9db83Smrg    func_error "unrecognized option \`-dlopen'"
880c3c9db83Smrg    $ECHO "$help" 1>&2
881692f60a7Smrg    exit $EXIT_FAILURE
882692f60a7Smrg  fi
883692f60a7Smrg
884692f60a7Smrg  # Change the help message to a mode-specific one.
885692f60a7Smrg  generic_help="$help"
886c3c9db83Smrg  help="Try \`$progname --help --mode=$mode' for more information."
887c3c9db83Smrg}
888692f60a7Smrg
889692f60a7Smrg
890c3c9db83Smrg# func_lalib_p file
891c3c9db83Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
892c3c9db83Smrg# This function is only a basic sanity check; it will hardly flush out
893c3c9db83Smrg# determined imposters.
894c3c9db83Smrgfunc_lalib_p ()
895c3c9db83Smrg{
896c3c9db83Smrg    test -f "$1" &&
897c3c9db83Smrg      $SED -e 4q "$1" 2>/dev/null \
898c3c9db83Smrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
899c3c9db83Smrg}
900692f60a7Smrg
901c3c9db83Smrg# func_lalib_unsafe_p file
902c3c9db83Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
903c3c9db83Smrg# This function implements the same check as func_lalib_p without
904c3c9db83Smrg# resorting to external programs.  To this end, it redirects stdin and
905c3c9db83Smrg# closes it afterwards, without saving the original file descriptor.
906c3c9db83Smrg# As a safety measure, use it only where a negative result would be
907c3c9db83Smrg# fatal anyway.  Works if `file' does not exist.
908c3c9db83Smrgfunc_lalib_unsafe_p ()
909c3c9db83Smrg{
910c3c9db83Smrg    lalib_p=no
911c3c9db83Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
912c3c9db83Smrg	for lalib_p_l in 1 2 3 4
913c3c9db83Smrg	do
914c3c9db83Smrg	    read lalib_p_line
915c3c9db83Smrg	    case "$lalib_p_line" in
916c3c9db83Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
917c3c9db83Smrg	    esac
918c3c9db83Smrg	done
919c3c9db83Smrg	exec 0<&5 5<&-
920c3c9db83Smrg    fi
921c3c9db83Smrg    test "$lalib_p" = yes
922c3c9db83Smrg}
923692f60a7Smrg
924c3c9db83Smrg# func_ltwrapper_script_p file
925c3c9db83Smrg# True iff FILE is a libtool wrapper script
926c3c9db83Smrg# This function is only a basic sanity check; it will hardly flush out
927c3c9db83Smrg# determined imposters.
928c3c9db83Smrgfunc_ltwrapper_script_p ()
929c3c9db83Smrg{
930c3c9db83Smrg    func_lalib_p "$1"
931c3c9db83Smrg}
932692f60a7Smrg
933c3c9db83Smrg# func_ltwrapper_executable_p file
934c3c9db83Smrg# True iff FILE is a libtool wrapper executable
935c3c9db83Smrg# This function is only a basic sanity check; it will hardly flush out
936c3c9db83Smrg# determined imposters.
937c3c9db83Smrgfunc_ltwrapper_executable_p ()
938c3c9db83Smrg{
939c3c9db83Smrg    func_ltwrapper_exec_suffix=
940c3c9db83Smrg    case $1 in
941c3c9db83Smrg    *.exe) ;;
942c3c9db83Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
943c3c9db83Smrg    esac
944c3c9db83Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
945c3c9db83Smrg}
94685ee4c00Smrg
947c3c9db83Smrg# func_ltwrapper_scriptname file
948c3c9db83Smrg# Assumes file is an ltwrapper_executable
949c3c9db83Smrg# uses $file to determine the appropriate filename for a
950c3c9db83Smrg# temporary ltwrapper_script.
951c3c9db83Smrgfunc_ltwrapper_scriptname ()
952c3c9db83Smrg{
953c3c9db83Smrg    func_ltwrapper_scriptname_result=""
954c3c9db83Smrg    if func_ltwrapper_executable_p "$1"; then
955c3c9db83Smrg	func_dirname_and_basename "$1" "" "."
956c3c9db83Smrg	func_stripname '' '.exe' "$func_basename_result"
957c3c9db83Smrg	func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
958c3c9db83Smrg    fi
959c3c9db83Smrg}
960c3c9db83Smrg
961c3c9db83Smrg# func_ltwrapper_p file
962c3c9db83Smrg# True iff FILE is a libtool wrapper script or wrapper executable
963c3c9db83Smrg# This function is only a basic sanity check; it will hardly flush out
964c3c9db83Smrg# determined imposters.
965c3c9db83Smrgfunc_ltwrapper_p ()
966c3c9db83Smrg{
967c3c9db83Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
968c3c9db83Smrg}
969c3c9db83Smrg
970c3c9db83Smrg
971c3c9db83Smrg# func_execute_cmds commands fail_cmd
972c3c9db83Smrg# Execute tilde-delimited COMMANDS.
973c3c9db83Smrg# If FAIL_CMD is given, eval that upon failure.
974c3c9db83Smrg# FAIL_CMD may read-access the current command in variable CMD!
975c3c9db83Smrgfunc_execute_cmds ()
976c3c9db83Smrg{
977c3c9db83Smrg    $opt_debug
978c3c9db83Smrg    save_ifs=$IFS; IFS='~'
979c3c9db83Smrg    for cmd in $1; do
980c3c9db83Smrg      IFS=$save_ifs
981c3c9db83Smrg      eval cmd=\"$cmd\"
982c3c9db83Smrg      func_show_eval "$cmd" "${2-:}"
983c3c9db83Smrg    done
984c3c9db83Smrg    IFS=$save_ifs
985c3c9db83Smrg}
986c3c9db83Smrg
987c3c9db83Smrg
988c3c9db83Smrg# func_source file
989c3c9db83Smrg# Source FILE, adding directory component if necessary.
990c3c9db83Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
991c3c9db83Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
992c3c9db83Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
993c3c9db83Smrg# `FILE.' does not work on cygwin managed mounts.
994c3c9db83Smrgfunc_source ()
995c3c9db83Smrg{
996c3c9db83Smrg    $opt_debug
997c3c9db83Smrg    case $1 in
998c3c9db83Smrg    */* | *\\*)	. "$1" ;;
999c3c9db83Smrg    *)		. "./$1" ;;
1000c3c9db83Smrg    esac
1001c3c9db83Smrg}
1002c3c9db83Smrg
1003c3c9db83Smrg
1004c3c9db83Smrg# func_infer_tag arg
1005c3c9db83Smrg# Infer tagged configuration to use if any are available and
1006c3c9db83Smrg# if one wasn't chosen via the "--tag" command line option.
1007c3c9db83Smrg# Only attempt this if the compiler in the base compile
1008c3c9db83Smrg# command doesn't match the default compiler.
1009c3c9db83Smrg# arg is usually of the form 'gcc ...'
1010c3c9db83Smrgfunc_infer_tag ()
1011c3c9db83Smrg{
1012c3c9db83Smrg    $opt_debug
1013c3c9db83Smrg    if test -n "$available_tags" && test -z "$tagname"; then
1014c3c9db83Smrg      CC_quoted=
1015c3c9db83Smrg      for arg in $CC; do
1016c3c9db83Smrg        func_quote_for_eval "$arg"
1017c3c9db83Smrg	CC_quoted="$CC_quoted $func_quote_for_eval_result"
1018c3c9db83Smrg      done
1019c3c9db83Smrg      case $@ in
1020c3c9db83Smrg      # Blanks in the command may have been stripped by the calling shell,
1021c3c9db83Smrg      # but not from the CC environment variable when configure was run.
1022c3c9db83Smrg      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
1023c3c9db83Smrg      # Blanks at the start of $base_compile will cause this to fail
1024c3c9db83Smrg      # if we don't check for them as well.
1025c3c9db83Smrg      *)
1026c3c9db83Smrg	for z in $available_tags; do
1027c3c9db83Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
1028c3c9db83Smrg	    # Evaluate the configuration.
1029c3c9db83Smrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
1030c3c9db83Smrg	    CC_quoted=
1031c3c9db83Smrg	    for arg in $CC; do
1032c3c9db83Smrg	      # Double-quote args containing other shell metacharacters.
1033c3c9db83Smrg	      func_quote_for_eval "$arg"
1034c3c9db83Smrg	      CC_quoted="$CC_quoted $func_quote_for_eval_result"
1035c3c9db83Smrg	    done
1036c3c9db83Smrg	    case "$@ " in
1037c3c9db83Smrg	      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
1038c3c9db83Smrg	      # The compiler in the base compile command matches
1039c3c9db83Smrg	      # the one in the tagged configuration.
1040c3c9db83Smrg	      # Assume this is the tagged configuration we want.
1041c3c9db83Smrg	      tagname=$z
1042c3c9db83Smrg	      break
1043c3c9db83Smrg	      ;;
1044c3c9db83Smrg	    esac
1045c3c9db83Smrg	  fi
1046c3c9db83Smrg	done
1047c3c9db83Smrg	# If $tagname still isn't set, then no tagged configuration
1048c3c9db83Smrg	# was found and let the user know that the "--tag" command
1049c3c9db83Smrg	# line option must be used.
1050c3c9db83Smrg	if test -z "$tagname"; then
1051c3c9db83Smrg	  func_echo "unable to infer tagged configuration"
1052c3c9db83Smrg	  func_fatal_error "specify a tag with \`--tag'"
1053c3c9db83Smrg#	else
1054c3c9db83Smrg#	  func_verbose "using $tagname tagged configuration"
1055c3c9db83Smrg	fi
1056c3c9db83Smrg	;;
1057c3c9db83Smrg      esac
1058c3c9db83Smrg    fi
1059c3c9db83Smrg}
1060c3c9db83Smrg
1061c3c9db83Smrg
1062c3c9db83Smrg
1063c3c9db83Smrg# func_write_libtool_object output_name pic_name nonpic_name
1064c3c9db83Smrg# Create a libtool object file (analogous to a ".la" file),
1065c3c9db83Smrg# but don't create it if we're doing a dry run.
1066c3c9db83Smrgfunc_write_libtool_object ()
1067c3c9db83Smrg{
1068c3c9db83Smrg    write_libobj=${1}
1069c3c9db83Smrg    if test "$build_libtool_libs" = yes; then
1070c3c9db83Smrg      write_lobj=\'${2}\'
1071c3c9db83Smrg    else
1072c3c9db83Smrg      write_lobj=none
1073c3c9db83Smrg    fi
1074c3c9db83Smrg
1075c3c9db83Smrg    if test "$build_old_libs" = yes; then
1076c3c9db83Smrg      write_oldobj=\'${3}\'
1077c3c9db83Smrg    else
1078c3c9db83Smrg      write_oldobj=none
1079c3c9db83Smrg    fi
1080c3c9db83Smrg
1081c3c9db83Smrg    $opt_dry_run || {
1082c3c9db83Smrg      cat >${write_libobj}T <<EOF
1083c3c9db83Smrg# $write_libobj - a libtool object file
1084c3c9db83Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
1085c3c9db83Smrg#
1086c3c9db83Smrg# Please DO NOT delete this file!
1087c3c9db83Smrg# It is necessary for linking the library.
1088c3c9db83Smrg
1089c3c9db83Smrg# Name of the PIC object.
1090c3c9db83Smrgpic_object=$write_lobj
1091c3c9db83Smrg
1092c3c9db83Smrg# Name of the non-PIC object
1093c3c9db83Smrgnon_pic_object=$write_oldobj
1094c3c9db83Smrg
1095c3c9db83SmrgEOF
1096c3c9db83Smrg      $MV "${write_libobj}T" "${write_libobj}"
1097c3c9db83Smrg    }
1098c3c9db83Smrg}
1099c3c9db83Smrg
1100c3c9db83Smrg# func_mode_compile arg...
1101c3c9db83Smrgfunc_mode_compile ()
1102c3c9db83Smrg{
1103c3c9db83Smrg    $opt_debug
1104c3c9db83Smrg    # Get the compilation command and the source file.
1105c3c9db83Smrg    base_compile=
1106c3c9db83Smrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
1107c3c9db83Smrg    suppress_opt=yes
1108c3c9db83Smrg    suppress_output=
1109c3c9db83Smrg    arg_mode=normal
1110c3c9db83Smrg    libobj=
1111c3c9db83Smrg    later=
1112c3c9db83Smrg    pie_flag=
1113c3c9db83Smrg
1114c3c9db83Smrg    for arg
1115c3c9db83Smrg    do
1116c3c9db83Smrg      case $arg_mode in
1117c3c9db83Smrg      arg  )
1118c3c9db83Smrg	# do not "continue".  Instead, add this to base_compile
1119c3c9db83Smrg	lastarg="$arg"
1120c3c9db83Smrg	arg_mode=normal
1121c3c9db83Smrg	;;
1122c3c9db83Smrg
1123c3c9db83Smrg      target )
1124c3c9db83Smrg	libobj="$arg"
1125c3c9db83Smrg	arg_mode=normal
1126c3c9db83Smrg	continue
1127c3c9db83Smrg	;;
1128c3c9db83Smrg
1129c3c9db83Smrg      normal )
1130c3c9db83Smrg	# Accept any command-line options.
1131c3c9db83Smrg	case $arg in
1132c3c9db83Smrg	-o)
1133c3c9db83Smrg	  test -n "$libobj" && \
1134c3c9db83Smrg	    func_fatal_error "you cannot specify \`-o' more than once"
1135c3c9db83Smrg	  arg_mode=target
1136c3c9db83Smrg	  continue
1137c3c9db83Smrg	  ;;
1138c3c9db83Smrg
1139c3c9db83Smrg	-pie | -fpie | -fPIE)
1140c3c9db83Smrg          pie_flag="$pie_flag $arg"
1141c3c9db83Smrg	  continue
1142c3c9db83Smrg	  ;;
1143c3c9db83Smrg
1144c3c9db83Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
1145c3c9db83Smrg	  later="$later $arg"
1146c3c9db83Smrg	  continue
1147c3c9db83Smrg	  ;;
1148c3c9db83Smrg
1149c3c9db83Smrg	-no-suppress)
1150692f60a7Smrg	  suppress_opt=no
1151692f60a7Smrg	  continue
1152692f60a7Smrg	  ;;
1153692f60a7Smrg
1154692f60a7Smrg	-Xcompiler)
1155692f60a7Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
1156692f60a7Smrg	  continue      #  The current "srcfile" will either be retained or
1157692f60a7Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
1158692f60a7Smrg
1159692f60a7Smrg	-Wc,*)
1160c3c9db83Smrg	  func_stripname '-Wc,' '' "$arg"
1161c3c9db83Smrg	  args=$func_stripname_result
1162692f60a7Smrg	  lastarg=
1163692f60a7Smrg	  save_ifs="$IFS"; IFS=','
1164c3c9db83Smrg	  for arg in $args; do
1165692f60a7Smrg	    IFS="$save_ifs"
1166c3c9db83Smrg	    func_quote_for_eval "$arg"
1167c3c9db83Smrg	    lastarg="$lastarg $func_quote_for_eval_result"
1168692f60a7Smrg	  done
1169692f60a7Smrg	  IFS="$save_ifs"
1170c3c9db83Smrg	  func_stripname ' ' '' "$lastarg"
1171c3c9db83Smrg	  lastarg=$func_stripname_result
1172692f60a7Smrg
1173692f60a7Smrg	  # Add the arguments to base_compile.
1174692f60a7Smrg	  base_compile="$base_compile $lastarg"
1175692f60a7Smrg	  continue
1176692f60a7Smrg	  ;;
1177692f60a7Smrg
1178c3c9db83Smrg	*)
1179692f60a7Smrg	  # Accept the current argument as the source file.
1180692f60a7Smrg	  # The previous "srcfile" becomes the current argument.
1181692f60a7Smrg	  #
1182692f60a7Smrg	  lastarg="$srcfile"
1183692f60a7Smrg	  srcfile="$arg"
1184692f60a7Smrg	  ;;
1185692f60a7Smrg	esac  #  case $arg
1186692f60a7Smrg	;;
1187692f60a7Smrg      esac    #  case $arg_mode
1188692f60a7Smrg
1189692f60a7Smrg      # Aesthetically quote the previous argument.
1190c3c9db83Smrg      func_quote_for_eval "$lastarg"
1191c3c9db83Smrg      base_compile="$base_compile $func_quote_for_eval_result"
1192692f60a7Smrg    done # for arg
1193692f60a7Smrg
1194692f60a7Smrg    case $arg_mode in
1195692f60a7Smrg    arg)
1196c3c9db83Smrg      func_fatal_error "you must specify an argument for -Xcompile"
1197692f60a7Smrg      ;;
1198692f60a7Smrg    target)
1199c3c9db83Smrg      func_fatal_error "you must specify a target with \`-o'"
1200692f60a7Smrg      ;;
1201692f60a7Smrg    *)
1202692f60a7Smrg      # Get the name of the library object.
1203c3c9db83Smrg      test -z "$libobj" && {
1204c3c9db83Smrg	func_basename "$srcfile"
1205c3c9db83Smrg	libobj="$func_basename_result"
1206c3c9db83Smrg      }
1207692f60a7Smrg      ;;
1208692f60a7Smrg    esac
1209692f60a7Smrg
1210692f60a7Smrg    # Recognize several different file suffixes.
1211692f60a7Smrg    # If the user specifies -o file.o, it is replaced with file.lo
1212692f60a7Smrg    case $libobj in
1213c3c9db83Smrg    *.[cCFSifmso] | \
1214c3c9db83Smrg    *.ada | *.adb | *.ads | *.asm | \
1215c3c9db83Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
1216c3c9db83Smrg    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
1217c3c9db83Smrg      func_xform "$libobj"
1218c3c9db83Smrg      libobj=$func_xform_result
1219c3c9db83Smrg      ;;
1220692f60a7Smrg    esac
1221692f60a7Smrg
1222692f60a7Smrg    case $libobj in
1223c3c9db83Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
1224692f60a7Smrg    *)
1225c3c9db83Smrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
1226692f60a7Smrg      ;;
1227692f60a7Smrg    esac
1228692f60a7Smrg
1229692f60a7Smrg    func_infer_tag $base_compile
1230692f60a7Smrg
1231692f60a7Smrg    for arg in $later; do
1232692f60a7Smrg      case $arg in
1233c3c9db83Smrg      -shared)
1234c3c9db83Smrg	test "$build_libtool_libs" != yes && \
1235c3c9db83Smrg	  func_fatal_configuration "can not build a shared library"
1236c3c9db83Smrg	build_old_libs=no
1237c3c9db83Smrg	continue
1238c3c9db83Smrg	;;
1239c3c9db83Smrg
1240692f60a7Smrg      -static)
1241c3c9db83Smrg	build_libtool_libs=no
1242692f60a7Smrg	build_old_libs=yes
1243692f60a7Smrg	continue
1244692f60a7Smrg	;;
1245692f60a7Smrg
1246692f60a7Smrg      -prefer-pic)
1247692f60a7Smrg	pic_mode=yes
1248692f60a7Smrg	continue
1249692f60a7Smrg	;;
1250692f60a7Smrg
1251692f60a7Smrg      -prefer-non-pic)
1252692f60a7Smrg	pic_mode=no
1253692f60a7Smrg	continue
1254692f60a7Smrg	;;
1255692f60a7Smrg      esac
1256692f60a7Smrg    done
1257692f60a7Smrg
1258c3c9db83Smrg    func_quote_for_eval "$libobj"
1259c3c9db83Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
1260c3c9db83Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
1261c3c9db83Smrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
1262c3c9db83Smrg    func_dirname_and_basename "$obj" "/" ""
1263c3c9db83Smrg    objname="$func_basename_result"
1264c3c9db83Smrg    xdir="$func_dirname_result"
1265692f60a7Smrg    lobj=${xdir}$objdir/$objname
1266692f60a7Smrg
1267c3c9db83Smrg    test -z "$base_compile" && \
1268c3c9db83Smrg      func_fatal_help "you must specify a compilation command"
1269692f60a7Smrg
1270692f60a7Smrg    # Delete any leftover library objects.
1271692f60a7Smrg    if test "$build_old_libs" = yes; then
1272692f60a7Smrg      removelist="$obj $lobj $libobj ${libobj}T"
1273692f60a7Smrg    else
1274692f60a7Smrg      removelist="$lobj $libobj ${libobj}T"
1275692f60a7Smrg    fi
1276692f60a7Smrg
1277692f60a7Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
1278692f60a7Smrg    case $host_os in
1279c3c9db83Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
1280692f60a7Smrg      pic_mode=default
1281692f60a7Smrg      ;;
1282692f60a7Smrg    esac
1283692f60a7Smrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
1284692f60a7Smrg      # non-PIC code in shared libraries is not supported
1285692f60a7Smrg      pic_mode=default
1286692f60a7Smrg    fi
1287692f60a7Smrg
1288692f60a7Smrg    # Calculate the filename of the output object if compiler does
1289692f60a7Smrg    # not support -o with -c
1290692f60a7Smrg    if test "$compiler_c_o" = no; then
1291c3c9db83Smrg      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
1292692f60a7Smrg      lockfile="$output_obj.lock"
1293692f60a7Smrg    else
1294692f60a7Smrg      output_obj=
1295692f60a7Smrg      need_locks=no
1296692f60a7Smrg      lockfile=
1297692f60a7Smrg    fi
1298692f60a7Smrg
1299692f60a7Smrg    # Lock this critical section if it is needed
1300692f60a7Smrg    # We use this script file to make the link, it avoids creating a new file
1301692f60a7Smrg    if test "$need_locks" = yes; then
1302c3c9db83Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
1303c3c9db83Smrg	func_echo "Waiting for $lockfile to be removed"
1304692f60a7Smrg	sleep 2
1305692f60a7Smrg      done
1306692f60a7Smrg    elif test "$need_locks" = warn; then
1307692f60a7Smrg      if test -f "$lockfile"; then
1308c3c9db83Smrg	$ECHO "\
1309692f60a7Smrg*** ERROR, $lockfile exists and contains:
1310692f60a7Smrg`cat $lockfile 2>/dev/null`
1311692f60a7Smrg
1312692f60a7SmrgThis indicates that another process is trying to use the same
1313692f60a7Smrgtemporary object file, and libtool could not work around it because
1314692f60a7Smrgyour compiler does not support \`-c' and \`-o' together.  If you
1315692f60a7Smrgrepeat this compilation, it may succeed, by chance, but you had better
1316692f60a7Smrgavoid parallel builds (make -j) in this platform, or get a better
1317692f60a7Smrgcompiler."
1318692f60a7Smrg
1319c3c9db83Smrg	$opt_dry_run || $RM $removelist
1320692f60a7Smrg	exit $EXIT_FAILURE
1321692f60a7Smrg      fi
1322c3c9db83Smrg      removelist="$removelist $output_obj"
1323c3c9db83Smrg      $ECHO "$srcfile" > "$lockfile"
1324692f60a7Smrg    fi
1325692f60a7Smrg
1326c3c9db83Smrg    $opt_dry_run || $RM $removelist
1327c3c9db83Smrg    removelist="$removelist $lockfile"
1328c3c9db83Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
1329c3c9db83Smrg
1330692f60a7Smrg    if test -n "$fix_srcfile_path"; then
1331692f60a7Smrg      eval srcfile=\"$fix_srcfile_path\"
1332692f60a7Smrg    fi
1333c3c9db83Smrg    func_quote_for_eval "$srcfile"
1334c3c9db83Smrg    qsrcfile=$func_quote_for_eval_result
1335692f60a7Smrg
1336692f60a7Smrg    # Only build a PIC object if we are building libtool libraries.
1337692f60a7Smrg    if test "$build_libtool_libs" = yes; then
1338692f60a7Smrg      # Without this assignment, base_compile gets emptied.
1339692f60a7Smrg      fbsd_hideous_sh_bug=$base_compile
1340692f60a7Smrg
1341692f60a7Smrg      if test "$pic_mode" != no; then
1342692f60a7Smrg	command="$base_compile $qsrcfile $pic_flag"
1343692f60a7Smrg      else
1344692f60a7Smrg	# Don't build PIC code
1345692f60a7Smrg	command="$base_compile $qsrcfile"
1346692f60a7Smrg      fi
1347692f60a7Smrg
1348c3c9db83Smrg      func_mkdir_p "$xdir$objdir"
1349692f60a7Smrg
1350692f60a7Smrg      if test -z "$output_obj"; then
1351692f60a7Smrg	# Place PIC objects in $objdir
1352692f60a7Smrg	command="$command -o $lobj"
1353692f60a7Smrg      fi
1354692f60a7Smrg
1355c3c9db83Smrg      func_show_eval_locale "$command"	\
1356c3c9db83Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
1357692f60a7Smrg
1358692f60a7Smrg      if test "$need_locks" = warn &&
1359692f60a7Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
1360c3c9db83Smrg	$ECHO "\
1361692f60a7Smrg*** ERROR, $lockfile contains:
1362692f60a7Smrg`cat $lockfile 2>/dev/null`
1363692f60a7Smrg
1364692f60a7Smrgbut it should contain:
1365692f60a7Smrg$srcfile
1366692f60a7Smrg
1367692f60a7SmrgThis indicates that another process is trying to use the same
1368692f60a7Smrgtemporary object file, and libtool could not work around it because
1369692f60a7Smrgyour compiler does not support \`-c' and \`-o' together.  If you
1370692f60a7Smrgrepeat this compilation, it may succeed, by chance, but you had better
1371692f60a7Smrgavoid parallel builds (make -j) in this platform, or get a better
1372692f60a7Smrgcompiler."
1373692f60a7Smrg
1374c3c9db83Smrg	$opt_dry_run || $RM $removelist
1375692f60a7Smrg	exit $EXIT_FAILURE
1376692f60a7Smrg      fi
1377692f60a7Smrg
1378692f60a7Smrg      # Just move the object if needed, then go on to compile the next one
1379692f60a7Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
1380c3c9db83Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
1381c3c9db83Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
1382692f60a7Smrg      fi
1383692f60a7Smrg
1384692f60a7Smrg      # Allow error messages only from the first compilation.
1385692f60a7Smrg      if test "$suppress_opt" = yes; then
1386c3c9db83Smrg	suppress_output=' >/dev/null 2>&1'
1387692f60a7Smrg      fi
1388692f60a7Smrg    fi
1389692f60a7Smrg
1390692f60a7Smrg    # Only build a position-dependent object if we build old libraries.
1391692f60a7Smrg    if test "$build_old_libs" = yes; then
1392692f60a7Smrg      if test "$pic_mode" != yes; then
1393692f60a7Smrg	# Don't build PIC code
1394c3c9db83Smrg	command="$base_compile $qsrcfile$pie_flag"
1395692f60a7Smrg      else
1396692f60a7Smrg	command="$base_compile $qsrcfile $pic_flag"
1397692f60a7Smrg      fi
1398692f60a7Smrg      if test "$compiler_c_o" = yes; then
1399692f60a7Smrg	command="$command -o $obj"
1400692f60a7Smrg      fi
1401692f60a7Smrg
1402692f60a7Smrg      # Suppress compiler output if we already did a PIC compilation.
1403692f60a7Smrg      command="$command$suppress_output"
1404c3c9db83Smrg      func_show_eval_locale "$command" \
1405c3c9db83Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
1406692f60a7Smrg
1407692f60a7Smrg      if test "$need_locks" = warn &&
1408692f60a7Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
1409c3c9db83Smrg	$ECHO "\
1410692f60a7Smrg*** ERROR, $lockfile contains:
1411692f60a7Smrg`cat $lockfile 2>/dev/null`
1412692f60a7Smrg
1413692f60a7Smrgbut it should contain:
1414692f60a7Smrg$srcfile
1415692f60a7Smrg
1416692f60a7SmrgThis indicates that another process is trying to use the same
1417692f60a7Smrgtemporary object file, and libtool could not work around it because
1418692f60a7Smrgyour compiler does not support \`-c' and \`-o' together.  If you
1419692f60a7Smrgrepeat this compilation, it may succeed, by chance, but you had better
1420692f60a7Smrgavoid parallel builds (make -j) in this platform, or get a better
1421692f60a7Smrgcompiler."
1422692f60a7Smrg
1423c3c9db83Smrg	$opt_dry_run || $RM $removelist
1424692f60a7Smrg	exit $EXIT_FAILURE
1425692f60a7Smrg      fi
1426692f60a7Smrg
1427692f60a7Smrg      # Just move the object if needed
1428692f60a7Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
1429c3c9db83Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
1430c3c9db83Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
1431692f60a7Smrg      fi
1432692f60a7Smrg    fi
1433692f60a7Smrg
1434c3c9db83Smrg    $opt_dry_run || {
1435c3c9db83Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
1436692f60a7Smrg
1437c3c9db83Smrg      # Unlock the critical section if it was locked
1438c3c9db83Smrg      if test "$need_locks" != no; then
1439c3c9db83Smrg	removelist=$lockfile
1440c3c9db83Smrg        $RM "$lockfile"
1441c3c9db83Smrg      fi
1442c3c9db83Smrg    }
1443692f60a7Smrg
1444692f60a7Smrg    exit $EXIT_SUCCESS
1445c3c9db83Smrg}
1446692f60a7Smrg
1447c3c9db83Smrg$opt_help || {
1448c3c9db83Smrgtest "$mode" = compile && func_mode_compile ${1+"$@"}
1449c3c9db83Smrg}
1450692f60a7Smrg
1451c3c9db83Smrgfunc_mode_help ()
1452c3c9db83Smrg{
1453c3c9db83Smrg    # We need to display help for each of the modes.
1454c3c9db83Smrg    case $mode in
1455c3c9db83Smrg      "")
1456c3c9db83Smrg        # Generic help is extracted from the usage comments
1457c3c9db83Smrg        # at the start of this file.
1458c3c9db83Smrg        func_help
1459c3c9db83Smrg        ;;
1460692f60a7Smrg
1461c3c9db83Smrg      clean)
1462c3c9db83Smrg        $ECHO \
1463c3c9db83Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
1464692f60a7Smrg
1465c3c9db83SmrgRemove files from the build directory.
1466692f60a7Smrg
1467c3c9db83SmrgRM is the name of the program to use to delete files associated with each FILE
1468c3c9db83Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
1469c3c9db83Smrgto RM.
1470692f60a7Smrg
1471c3c9db83SmrgIf FILE is a libtool library, object or program, all the files associated
1472c3c9db83Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
1473c3c9db83Smrg        ;;
1474692f60a7Smrg
1475c3c9db83Smrg      compile)
1476c3c9db83Smrg      $ECHO \
1477c3c9db83Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
1478692f60a7Smrg
1479c3c9db83SmrgCompile a source file into a libtool library object.
1480692f60a7Smrg
1481c3c9db83SmrgThis mode accepts the following additional options:
1482692f60a7Smrg
1483c3c9db83Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
1484c3c9db83Smrg  -no-suppress      do not suppress compiler output for multiple passes
1485c3c9db83Smrg  -prefer-pic       try to building PIC objects only
1486c3c9db83Smrg  -prefer-non-pic   try to building non-PIC objects only
1487c3c9db83Smrg  -shared           do not build a \`.o' file suitable for static linking
1488c3c9db83Smrg  -static           only build a \`.o' file suitable for static linking
1489692f60a7Smrg
1490c3c9db83SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
1491c3c9db83Smrgfrom the given SOURCEFILE.
1492692f60a7Smrg
1493c3c9db83SmrgThe output file name is determined by removing the directory component from
1494c3c9db83SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
1495c3c9db83Smrglibrary object suffix, \`.lo'."
1496c3c9db83Smrg        ;;
1497692f60a7Smrg
1498c3c9db83Smrg      execute)
1499c3c9db83Smrg        $ECHO \
1500c3c9db83Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
1501692f60a7Smrg
1502c3c9db83SmrgAutomatically set library path, then run a program.
1503692f60a7Smrg
1504c3c9db83SmrgThis mode accepts the following additional options:
1505692f60a7Smrg
1506c3c9db83Smrg  -dlopen FILE      add the directory containing FILE to the library path
1507692f60a7Smrg
1508c3c9db83SmrgThis mode sets the library path environment variable according to \`-dlopen'
1509c3c9db83Smrgflags.
1510692f60a7Smrg
1511c3c9db83SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
1512c3c9db83Smrginto their corresponding uninstalled binary, and any of their required library
1513c3c9db83Smrgdirectories are added to the library path.
1514692f60a7Smrg
1515c3c9db83SmrgThen, COMMAND is executed, with ARGS as arguments."
1516c3c9db83Smrg        ;;
1517692f60a7Smrg
1518c3c9db83Smrg      finish)
1519c3c9db83Smrg        $ECHO \
1520c3c9db83Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
1521692f60a7Smrg
1522c3c9db83SmrgComplete the installation of libtool libraries.
1523692f60a7Smrg
1524c3c9db83SmrgEach LIBDIR is a directory that contains libtool libraries.
1525692f60a7Smrg
1526c3c9db83SmrgThe commands that this mode executes may require superuser privileges.  Use
1527c3c9db83Smrgthe \`--dry-run' option if you just want to see what would be executed."
1528c3c9db83Smrg        ;;
1529692f60a7Smrg
1530c3c9db83Smrg      install)
1531c3c9db83Smrg        $ECHO \
1532c3c9db83Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
1533692f60a7Smrg
1534c3c9db83SmrgInstall executables or libraries.
1535692f60a7Smrg
1536c3c9db83SmrgINSTALL-COMMAND is the installation command.  The first component should be
1537c3c9db83Smrgeither the \`install' or \`cp' program.
1538692f60a7Smrg
1539c3c9db83SmrgThe following components of INSTALL-COMMAND are treated specially:
1540692f60a7Smrg
1541c3c9db83Smrg  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
1542692f60a7Smrg
1543c3c9db83SmrgThe rest of the components are interpreted as arguments to that command (only
1544c3c9db83SmrgBSD-compatible install options are recognized)."
1545c3c9db83Smrg        ;;
1546692f60a7Smrg
1547c3c9db83Smrg      link)
1548c3c9db83Smrg        $ECHO \
1549c3c9db83Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
1550692f60a7Smrg
1551c3c9db83SmrgLink object files or libraries together to form another library, or to
1552c3c9db83Smrgcreate an executable program.
1553692f60a7Smrg
1554c3c9db83SmrgLINK-COMMAND is a command using the C compiler that you would use to create
1555c3c9db83Smrga program from several object files.
1556692f60a7Smrg
1557c3c9db83SmrgThe following components of LINK-COMMAND are treated specially:
1558692f60a7Smrg
1559c3c9db83Smrg  -all-static       do not do any dynamic linking at all
1560c3c9db83Smrg  -avoid-version    do not add a version suffix if possible
1561c3c9db83Smrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
1562c3c9db83Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
1563c3c9db83Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
1564c3c9db83Smrg  -export-symbols SYMFILE
1565c3c9db83Smrg                    try to export only the symbols listed in SYMFILE
1566c3c9db83Smrg  -export-symbols-regex REGEX
1567c3c9db83Smrg                    try to export only the symbols matching REGEX
1568c3c9db83Smrg  -LLIBDIR          search LIBDIR for required installed libraries
1569c3c9db83Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
1570c3c9db83Smrg  -module           build a library that can dlopened
1571c3c9db83Smrg  -no-fast-install  disable the fast-install mode
1572c3c9db83Smrg  -no-install       link a not-installable executable
1573c3c9db83Smrg  -no-undefined     declare that a library does not refer to external symbols
1574c3c9db83Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
1575c3c9db83Smrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
1576c3c9db83Smrg  -precious-files-regex REGEX
1577c3c9db83Smrg                    don't remove output files matching REGEX
1578c3c9db83Smrg  -release RELEASE  specify package release information
1579c3c9db83Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
1580c3c9db83Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
1581c3c9db83Smrg  -shared           only do dynamic linking of libtool libraries
1582c3c9db83Smrg  -shrext SUFFIX    override the standard shared library file extension
1583c3c9db83Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
1584c3c9db83Smrg  -static-libtool-libs
1585c3c9db83Smrg                    do not do any dynamic linking of libtool libraries
1586c3c9db83Smrg  -version-info CURRENT[:REVISION[:AGE]]
1587c3c9db83Smrg                    specify library version info [each variable defaults to 0]
1588c3c9db83Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
1589692f60a7Smrg
1590c3c9db83SmrgAll other options (arguments beginning with \`-') are ignored.
1591692f60a7Smrg
1592c3c9db83SmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
1593c3c9db83Smrgtreated as uninstalled libtool libraries, other files are standard or library
1594c3c9db83Smrgobject files.
1595692f60a7Smrg
1596c3c9db83SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
1597c3c9db83Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
1598c3c9db83Smrgrequired, except when creating a convenience library.
1599692f60a7Smrg
1600c3c9db83SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
1601c3c9db83Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
1602692f60a7Smrg
1603c3c9db83SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
1604c3c9db83Smrgis created, otherwise an executable program is created."
16052e71ea71Smrg        ;;
1606692f60a7Smrg
1607c3c9db83Smrg      uninstall)
1608c3c9db83Smrg        $ECHO \
1609c3c9db83Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
1610692f60a7Smrg
1611c3c9db83SmrgRemove libraries from an installation directory.
1612692f60a7Smrg
1613c3c9db83SmrgRM is the name of the program to use to delete files associated with each FILE
1614c3c9db83Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
1615c3c9db83Smrgto RM.
161685ee4c00Smrg
1617c3c9db83SmrgIf FILE is a libtool library, all the files associated with it are deleted.
1618c3c9db83SmrgOtherwise, only FILE itself is deleted using RM."
1619c3c9db83Smrg        ;;
162085ee4c00Smrg
1621c3c9db83Smrg      *)
1622c3c9db83Smrg        func_fatal_help "invalid operation mode \`$mode'"
1623c3c9db83Smrg        ;;
1624c3c9db83Smrg    esac
162585ee4c00Smrg
1626c3c9db83Smrg    $ECHO
1627c3c9db83Smrg    $ECHO "Try \`$progname --help' for more information about other modes."
162885ee4c00Smrg
1629c3c9db83Smrg    exit $?
1630c3c9db83Smrg}
163185ee4c00Smrg
1632c3c9db83Smrg  # Now that we've collected a possible --mode arg, show help if necessary
1633c3c9db83Smrg  $opt_help && func_mode_help
163485ee4c00Smrg
163585ee4c00Smrg
1636c3c9db83Smrg# func_mode_execute arg...
1637c3c9db83Smrgfunc_mode_execute ()
1638c3c9db83Smrg{
1639c3c9db83Smrg    $opt_debug
1640c3c9db83Smrg    # The first argument is the command name.
1641c3c9db83Smrg    cmd="$nonopt"
1642c3c9db83Smrg    test -z "$cmd" && \
1643c3c9db83Smrg      func_fatal_help "you must specify a COMMAND"
16442e71ea71Smrg
1645c3c9db83Smrg    # Handle -dlopen flags immediately.
1646c3c9db83Smrg    for file in $execute_dlfiles; do
1647c3c9db83Smrg      test -f "$file" \
1648c3c9db83Smrg	|| func_fatal_help "\`$file' is not a file"
16492e71ea71Smrg
1650c3c9db83Smrg      dir=
1651c3c9db83Smrg      case $file in
1652c3c9db83Smrg      *.la)
1653c3c9db83Smrg	# Check to see that this really is a libtool archive.
1654c3c9db83Smrg	func_lalib_unsafe_p "$file" \
1655c3c9db83Smrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
16562e71ea71Smrg
1657c3c9db83Smrg	# Read the libtool library.
1658c3c9db83Smrg	dlname=
1659c3c9db83Smrg	library_names=
1660c3c9db83Smrg	func_source "$file"
1661692f60a7Smrg
1662c3c9db83Smrg	# Skip this library if it cannot be dlopened.
1663c3c9db83Smrg	if test -z "$dlname"; then
1664c3c9db83Smrg	  # Warn if it was a shared library.
1665c3c9db83Smrg	  test -n "$library_names" && \
1666c3c9db83Smrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
1667c3c9db83Smrg	  continue
1668c3c9db83Smrg	fi
1669692f60a7Smrg
1670c3c9db83Smrg	func_dirname "$file" "" "."
1671c3c9db83Smrg	dir="$func_dirname_result"
1672692f60a7Smrg
1673c3c9db83Smrg	if test -f "$dir/$objdir/$dlname"; then
1674c3c9db83Smrg	  dir="$dir/$objdir"
1675c3c9db83Smrg	else
1676c3c9db83Smrg	  if test ! -f "$dir/$dlname"; then
1677c3c9db83Smrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
1678c3c9db83Smrg	  fi
1679c3c9db83Smrg	fi
16802e71ea71Smrg	;;
1681692f60a7Smrg
1682c3c9db83Smrg      *.lo)
1683c3c9db83Smrg	# Just add the directory containing the .lo file.
1684c3c9db83Smrg	func_dirname "$file" "" "."
1685c3c9db83Smrg	dir="$func_dirname_result"
16862e71ea71Smrg	;;
1687692f60a7Smrg
1688c3c9db83Smrg      *)
1689c3c9db83Smrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
16902e71ea71Smrg	continue
16912e71ea71Smrg	;;
1692c3c9db83Smrg      esac
1693692f60a7Smrg
1694c3c9db83Smrg      # Get the absolute pathname.
1695c3c9db83Smrg      absdir=`cd "$dir" && pwd`
1696c3c9db83Smrg      test -n "$absdir" && dir="$absdir"
169785ee4c00Smrg
1698c3c9db83Smrg      # Now add the directory to shlibpath_var.
1699c3c9db83Smrg      if eval "test -z \"\$$shlibpath_var\""; then
1700c3c9db83Smrg	eval "$shlibpath_var=\"\$dir\""
1701c3c9db83Smrg      else
1702c3c9db83Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
1703c3c9db83Smrg      fi
1704c3c9db83Smrg    done
170585ee4c00Smrg
1706c3c9db83Smrg    # This variable tells wrapper scripts just to set shlibpath_var
1707c3c9db83Smrg    # rather than running their programs.
1708c3c9db83Smrg    libtool_execute_magic="$magic"
170985ee4c00Smrg
1710c3c9db83Smrg    # Check if any of the arguments is a wrapper script.
1711c3c9db83Smrg    args=
1712c3c9db83Smrg    for file
1713c3c9db83Smrg    do
1714c3c9db83Smrg      case $file in
1715c3c9db83Smrg      -*) ;;
1716c3c9db83Smrg      *)
1717c3c9db83Smrg	# Do a test to see if this is really a libtool program.
1718c3c9db83Smrg	if func_ltwrapper_script_p "$file"; then
1719c3c9db83Smrg	  func_source "$file"
1720c3c9db83Smrg	  # Transform arg to wrapped name.
1721c3c9db83Smrg	  file="$progdir/$program"
1722c3c9db83Smrg	elif func_ltwrapper_executable_p "$file"; then
1723c3c9db83Smrg	  func_ltwrapper_scriptname "$file"
1724c3c9db83Smrg	  func_source "$func_ltwrapper_scriptname_result"
1725c3c9db83Smrg	  # Transform arg to wrapped name.
1726c3c9db83Smrg	  file="$progdir/$program"
1727c3c9db83Smrg	fi
1728c3c9db83Smrg	;;
1729c3c9db83Smrg      esac
1730c3c9db83Smrg      # Quote arguments (to preserve shell metacharacters).
1731c3c9db83Smrg      func_quote_for_eval "$file"
1732c3c9db83Smrg      args="$args $func_quote_for_eval_result"
1733c3c9db83Smrg    done
173485ee4c00Smrg
1735c3c9db83Smrg    if test "X$opt_dry_run" = Xfalse; then
1736c3c9db83Smrg      if test -n "$shlibpath_var"; then
1737c3c9db83Smrg	# Export the shlibpath_var.
1738c3c9db83Smrg	eval "export $shlibpath_var"
1739c3c9db83Smrg      fi
174085ee4c00Smrg
1741c3c9db83Smrg      # Restore saved environment variables
1742c3c9db83Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
1743c3c9db83Smrg      do
1744c3c9db83Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
1745c3c9db83Smrg                $lt_var=\$save_$lt_var; export $lt_var
17462e71ea71Smrg	      else
1747c3c9db83Smrg		$lt_unset $lt_var
1748c3c9db83Smrg	      fi"
1749c3c9db83Smrg      done
175085ee4c00Smrg
1751c3c9db83Smrg      # Now prepare to actually exec the command.
1752c3c9db83Smrg      exec_cmd="\$cmd$args"
1753c3c9db83Smrg    else
1754c3c9db83Smrg      # Display what would be done.
1755c3c9db83Smrg      if test -n "$shlibpath_var"; then
1756c3c9db83Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
1757c3c9db83Smrg	$ECHO "export $shlibpath_var"
1758c3c9db83Smrg      fi
1759c3c9db83Smrg      $ECHO "$cmd$args"
1760c3c9db83Smrg      exit $EXIT_SUCCESS
1761c3c9db83Smrg    fi
1762c3c9db83Smrg}
176385ee4c00Smrg
1764c3c9db83Smrgtest "$mode" = execute && func_mode_execute ${1+"$@"}
176585ee4c00Smrg
17662e71ea71Smrg
1767c3c9db83Smrg# func_mode_finish arg...
1768c3c9db83Smrgfunc_mode_finish ()
1769c3c9db83Smrg{
1770c3c9db83Smrg    $opt_debug
1771c3c9db83Smrg    libdirs="$nonopt"
1772c3c9db83Smrg    admincmds=
1773692f60a7Smrg
1774c3c9db83Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
1775c3c9db83Smrg      for dir
1776c3c9db83Smrg      do
1777c3c9db83Smrg	libdirs="$libdirs $dir"
1778c3c9db83Smrg      done
1779692f60a7Smrg
1780c3c9db83Smrg      for libdir in $libdirs; do
1781c3c9db83Smrg	if test -n "$finish_cmds"; then
1782c3c9db83Smrg	  # Do each command in the finish commands.
1783c3c9db83Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
1784c3c9db83Smrg'"$cmd"'"'
17852e71ea71Smrg	fi
1786c3c9db83Smrg	if test -n "$finish_eval"; then
1787c3c9db83Smrg	  # Do the single finish_eval.
1788c3c9db83Smrg	  eval cmds=\"$finish_eval\"
1789c3c9db83Smrg	  $opt_dry_run || eval "$cmds" || admincmds="$admincmds
1790c3c9db83Smrg       $cmds"
1791c3c9db83Smrg	fi
1792c3c9db83Smrg      done
1793c3c9db83Smrg    fi
1794692f60a7Smrg
1795c3c9db83Smrg    # Exit here if they wanted silent mode.
1796c3c9db83Smrg    $opt_silent && exit $EXIT_SUCCESS
1797692f60a7Smrg
1798c3c9db83Smrg    $ECHO "X----------------------------------------------------------------------" | $Xsed
1799c3c9db83Smrg    $ECHO "Libraries have been installed in:"
1800c3c9db83Smrg    for libdir in $libdirs; do
1801c3c9db83Smrg      $ECHO "   $libdir"
1802c3c9db83Smrg    done
1803c3c9db83Smrg    $ECHO
1804c3c9db83Smrg    $ECHO "If you ever happen to want to link against installed libraries"
1805c3c9db83Smrg    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
1806c3c9db83Smrg    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
1807c3c9db83Smrg    $ECHO "flag during linking and do at least one of the following:"
1808c3c9db83Smrg    if test -n "$shlibpath_var"; then
1809c3c9db83Smrg      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
1810c3c9db83Smrg      $ECHO "     during execution"
1811c3c9db83Smrg    fi
1812c3c9db83Smrg    if test -n "$runpath_var"; then
1813c3c9db83Smrg      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
1814c3c9db83Smrg      $ECHO "     during linking"
1815c3c9db83Smrg    fi
1816c3c9db83Smrg    if test -n "$hardcode_libdir_flag_spec"; then
1817c3c9db83Smrg      libdir=LIBDIR
1818c3c9db83Smrg      eval flag=\"$hardcode_libdir_flag_spec\"
1819c3c9db83Smrg
1820c3c9db83Smrg      $ECHO "   - use the \`$flag' linker flag"
1821c3c9db83Smrg    fi
1822c3c9db83Smrg    if test -n "$admincmds"; then
1823c3c9db83Smrg      $ECHO "   - have your system administrator run these commands:$admincmds"
1824c3c9db83Smrg    fi
1825c3c9db83Smrg    if test -f /etc/ld.so.conf; then
1826c3c9db83Smrg      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
1827c3c9db83Smrg    fi
1828c3c9db83Smrg    $ECHO
1829c3c9db83Smrg
1830c3c9db83Smrg    $ECHO "See any operating system documentation about shared libraries for"
1831c3c9db83Smrg    case $host in
1832c3c9db83Smrg      solaris2.[6789]|solaris2.1[0-9])
1833c3c9db83Smrg        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
1834c3c9db83Smrg	$ECHO "pages."
1835c3c9db83Smrg	;;
1836c3c9db83Smrg      *)
1837c3c9db83Smrg        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
1838c3c9db83Smrg        ;;
1839c3c9db83Smrg    esac
1840c3c9db83Smrg    $ECHO "X----------------------------------------------------------------------" | $Xsed
1841c3c9db83Smrg    exit $EXIT_SUCCESS
1842c3c9db83Smrg}
1843c3c9db83Smrg
1844c3c9db83Smrgtest "$mode" = finish && func_mode_finish ${1+"$@"}
1845c3c9db83Smrg
1846c3c9db83Smrg
1847c3c9db83Smrg# func_mode_install arg...
1848c3c9db83Smrgfunc_mode_install ()
1849c3c9db83Smrg{
1850c3c9db83Smrg    $opt_debug
1851c3c9db83Smrg    # There may be an optional sh(1) argument at the beginning of
1852c3c9db83Smrg    # install_prog (especially on Windows NT).
1853c3c9db83Smrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
1854c3c9db83Smrg       # Allow the use of GNU shtool's install command.
1855c3c9db83Smrg       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
1856c3c9db83Smrg      # Aesthetically quote it.
1857c3c9db83Smrg      func_quote_for_eval "$nonopt"
1858c3c9db83Smrg      install_prog="$func_quote_for_eval_result "
1859c3c9db83Smrg      arg=$1
1860c3c9db83Smrg      shift
1861c3c9db83Smrg    else
1862c3c9db83Smrg      install_prog=
1863c3c9db83Smrg      arg=$nonopt
1864c3c9db83Smrg    fi
1865c3c9db83Smrg
1866c3c9db83Smrg    # The real first argument should be the name of the installation program.
1867c3c9db83Smrg    # Aesthetically quote it.
1868c3c9db83Smrg    func_quote_for_eval "$arg"
1869c3c9db83Smrg    install_prog="$install_prog$func_quote_for_eval_result"
1870c3c9db83Smrg
1871c3c9db83Smrg    # We need to accept at least all the BSD install flags.
1872c3c9db83Smrg    dest=
1873c3c9db83Smrg    files=
1874c3c9db83Smrg    opts=
1875c3c9db83Smrg    prev=
1876c3c9db83Smrg    install_type=
1877c3c9db83Smrg    isdir=no
1878c3c9db83Smrg    stripme=
1879c3c9db83Smrg    for arg
1880c3c9db83Smrg    do
1881c3c9db83Smrg      if test -n "$dest"; then
1882c3c9db83Smrg	files="$files $dest"
1883c3c9db83Smrg	dest=$arg
1884c3c9db83Smrg	continue
1885c3c9db83Smrg      fi
1886c3c9db83Smrg
1887c3c9db83Smrg      case $arg in
1888c3c9db83Smrg      -d) isdir=yes ;;
1889c3c9db83Smrg      -f)
1890c3c9db83Smrg	case " $install_prog " in
1891c3c9db83Smrg	*[\\\ /]cp\ *) ;;
1892c3c9db83Smrg	*) prev=$arg ;;
1893c3c9db83Smrg	esac
1894c3c9db83Smrg	;;
1895c3c9db83Smrg      -g | -m | -o)
1896c3c9db83Smrg	prev=$arg
1897c3c9db83Smrg	;;
1898c3c9db83Smrg      -s)
1899c3c9db83Smrg	stripme=" -s"
1900c3c9db83Smrg	continue
1901c3c9db83Smrg	;;
1902c3c9db83Smrg      -*)
1903c3c9db83Smrg	;;
1904c3c9db83Smrg      *)
1905c3c9db83Smrg	# If the previous option needed an argument, then skip it.
1906c3c9db83Smrg	if test -n "$prev"; then
19072e71ea71Smrg	  prev=
190885ee4c00Smrg	else
1909c3c9db83Smrg	  dest=$arg
1910c3c9db83Smrg	  continue
1911692f60a7Smrg	fi
19122e71ea71Smrg	;;
1913c3c9db83Smrg      esac
1914692f60a7Smrg
1915c3c9db83Smrg      # Aesthetically quote the argument.
1916c3c9db83Smrg      func_quote_for_eval "$arg"
1917c3c9db83Smrg      install_prog="$install_prog $func_quote_for_eval_result"
1918c3c9db83Smrg    done
1919692f60a7Smrg
1920c3c9db83Smrg    test -z "$install_prog" && \
1921c3c9db83Smrg      func_fatal_help "you must specify an install program"
1922692f60a7Smrg
1923c3c9db83Smrg    test -n "$prev" && \
1924c3c9db83Smrg      func_fatal_help "the \`$prev' option requires an argument"
192585ee4c00Smrg
1926c3c9db83Smrg    if test -z "$files"; then
1927c3c9db83Smrg      if test -z "$dest"; then
1928c3c9db83Smrg	func_fatal_help "no file or destination specified"
1929c3c9db83Smrg      else
1930c3c9db83Smrg	func_fatal_help "you must specify a destination"
1931c3c9db83Smrg      fi
19322e71ea71Smrg    fi
193385ee4c00Smrg
1934c3c9db83Smrg    # Strip any trailing slash from the destination.
1935c3c9db83Smrg    func_stripname '' '/' "$dest"
1936c3c9db83Smrg    dest=$func_stripname_result
193785ee4c00Smrg
1938c3c9db83Smrg    # Check to see that the destination is a directory.
1939c3c9db83Smrg    test -d "$dest" && isdir=yes
1940c3c9db83Smrg    if test "$isdir" = yes; then
1941c3c9db83Smrg      destdir="$dest"
1942c3c9db83Smrg      destname=
19432e71ea71Smrg    else
1944c3c9db83Smrg      func_dirname_and_basename "$dest" "" "."
1945c3c9db83Smrg      destdir="$func_dirname_result"
1946c3c9db83Smrg      destname="$func_basename_result"
194785ee4c00Smrg
1948c3c9db83Smrg      # Not a directory, so check to see that there is only one file specified.
1949c3c9db83Smrg      set dummy $files; shift
1950c3c9db83Smrg      test "$#" -gt 1 && \
1951c3c9db83Smrg	func_fatal_help "\`$dest' is not a directory"
195285ee4c00Smrg    fi
1953c3c9db83Smrg    case $destdir in
1954c3c9db83Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
19552e71ea71Smrg    *)
1956c3c9db83Smrg      for file in $files; do
1957c3c9db83Smrg	case $file in
1958c3c9db83Smrg	*.lo) ;;
1959c3c9db83Smrg	*)
1960c3c9db83Smrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
1961c3c9db83Smrg	  ;;
1962c3c9db83Smrg	esac
1963c3c9db83Smrg      done
19642e71ea71Smrg      ;;
19652e71ea71Smrg    esac
1966692f60a7Smrg
1967c3c9db83Smrg    # This variable tells wrapper scripts just to set variables rather
1968c3c9db83Smrg    # than running their programs.
1969c3c9db83Smrg    libtool_install_magic="$magic"
1970692f60a7Smrg
1971c3c9db83Smrg    staticlibs=
1972c3c9db83Smrg    future_libdirs=
1973c3c9db83Smrg    current_libdirs=
1974c3c9db83Smrg    for file in $files; do
1975692f60a7Smrg
1976c3c9db83Smrg      # Do each installation.
1977c3c9db83Smrg      case $file in
1978c3c9db83Smrg      *.$libext)
1979c3c9db83Smrg	# Do the static libraries later.
1980c3c9db83Smrg	staticlibs="$staticlibs $file"
1981c3c9db83Smrg	;;
1982c3c9db83Smrg
1983c3c9db83Smrg      *.la)
1984c3c9db83Smrg	# Check to see that this really is a libtool archive.
1985c3c9db83Smrg	func_lalib_unsafe_p "$file" \
1986c3c9db83Smrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
1987c3c9db83Smrg
1988c3c9db83Smrg	library_names=
1989c3c9db83Smrg	old_library=
1990c3c9db83Smrg	relink_command=
1991c3c9db83Smrg	func_source "$file"
1992c3c9db83Smrg
1993c3c9db83Smrg	# Add the libdir to current_libdirs if it is the destination.
1994c3c9db83Smrg	if test "X$destdir" = "X$libdir"; then
1995c3c9db83Smrg	  case "$current_libdirs " in
1996c3c9db83Smrg	  *" $libdir "*) ;;
1997c3c9db83Smrg	  *) current_libdirs="$current_libdirs $libdir" ;;
199885ee4c00Smrg	  esac
1999c3c9db83Smrg	else
2000c3c9db83Smrg	  # Note the libdir as a future libdir.
2001c3c9db83Smrg	  case "$future_libdirs " in
2002c3c9db83Smrg	  *" $libdir "*) ;;
2003c3c9db83Smrg	  *) future_libdirs="$future_libdirs $libdir" ;;
2004c3c9db83Smrg	  esac
2005c3c9db83Smrg	fi
200685ee4c00Smrg
2007c3c9db83Smrg	func_dirname "$file" "/" ""
2008c3c9db83Smrg	dir="$func_dirname_result"
2009c3c9db83Smrg	dir="$dir$objdir"
2010c3c9db83Smrg
2011c3c9db83Smrg	if test -n "$relink_command"; then
2012c3c9db83Smrg	  # Determine the prefix the user has applied to our future dir.
2013c3c9db83Smrg	  inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
2014c3c9db83Smrg
2015c3c9db83Smrg	  # Don't allow the user to place us outside of our expected
2016c3c9db83Smrg	  # location b/c this prevents finding dependent libraries that
2017c3c9db83Smrg	  # are installed to the same prefix.
2018c3c9db83Smrg	  # At present, this check doesn't affect windows .dll's that
2019c3c9db83Smrg	  # are installed into $libdir/../bin (currently, that works fine)
2020c3c9db83Smrg	  # but it's something to keep an eye on.
2021c3c9db83Smrg	  test "$inst_prefix_dir" = "$destdir" && \
2022c3c9db83Smrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
2023c3c9db83Smrg
2024c3c9db83Smrg	  if test -n "$inst_prefix_dir"; then
2025c3c9db83Smrg	    # Stick the inst_prefix_dir data into the link command.
2026c3c9db83Smrg	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
2027c3c9db83Smrg	  else
2028c3c9db83Smrg	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
2029c3c9db83Smrg	  fi
2030c3c9db83Smrg
2031c3c9db83Smrg	  func_warning "relinking \`$file'"
2032c3c9db83Smrg	  func_show_eval "$relink_command" \
2033c3c9db83Smrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
2034c3c9db83Smrg	fi
2035c3c9db83Smrg
2036c3c9db83Smrg	# See the names of the shared library.
2037c3c9db83Smrg	set dummy $library_names; shift
2038c3c9db83Smrg	if test -n "$1"; then
2039c3c9db83Smrg	  realname="$1"
2040c3c9db83Smrg	  shift
2041c3c9db83Smrg
2042c3c9db83Smrg	  srcname="$realname"
2043c3c9db83Smrg	  test -n "$relink_command" && srcname="$realname"T
2044c3c9db83Smrg
2045c3c9db83Smrg	  # Install the shared library and build the symlinks.
2046c3c9db83Smrg	  func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
2047c3c9db83Smrg	      'exit $?'
2048c3c9db83Smrg	  tstripme="$stripme"
2049c3c9db83Smrg	  case $host_os in
2050c3c9db83Smrg	  cygwin* | mingw* | pw32* | cegcc*)
2051c3c9db83Smrg	    case $realname in
2052c3c9db83Smrg	    *.dll.a)
2053c3c9db83Smrg	      tstripme=""
2054c3c9db83Smrg	      ;;
2055c3c9db83Smrg	    esac
205685ee4c00Smrg	    ;;
205785ee4c00Smrg	  esac
2058c3c9db83Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
2059c3c9db83Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
20602e71ea71Smrg	  fi
2061c3c9db83Smrg
2062c3c9db83Smrg	  if test "$#" -gt 0; then
2063c3c9db83Smrg	    # Delete the old symlinks, and create new ones.
2064c3c9db83Smrg	    # Try `ln -sf' first, because the `ln' binary might depend on
2065c3c9db83Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
2066c3c9db83Smrg	    # so we also need to try rm && ln -s.
2067c3c9db83Smrg	    for linkname
2068c3c9db83Smrg	    do
2069c3c9db83Smrg	      test "$linkname" != "$realname" \
2070c3c9db83Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
20712e71ea71Smrg	    done
20722e71ea71Smrg	  fi
2073692f60a7Smrg
2074c3c9db83Smrg	  # Do each command in the postinstall commands.
2075c3c9db83Smrg	  lib="$destdir/$realname"
2076c3c9db83Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
20772e71ea71Smrg	fi
2078692f60a7Smrg
2079c3c9db83Smrg	# Install the pseudo-library for information purposes.
2080c3c9db83Smrg	func_basename "$file"
2081c3c9db83Smrg	name="$func_basename_result"
2082c3c9db83Smrg	instname="$dir/$name"i
2083c3c9db83Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
2084692f60a7Smrg
2085c3c9db83Smrg	# Maybe install the static library, too.
2086c3c9db83Smrg	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
2087c3c9db83Smrg	;;
2088692f60a7Smrg
2089c3c9db83Smrg      *.lo)
2090c3c9db83Smrg	# Install (i.e. copy) a libtool object.
2091692f60a7Smrg
2092c3c9db83Smrg	# Figure out destination file name, if it wasn't already specified.
2093c3c9db83Smrg	if test -n "$destname"; then
2094c3c9db83Smrg	  destfile="$destdir/$destname"
2095c3c9db83Smrg	else
2096c3c9db83Smrg	  func_basename "$file"
2097c3c9db83Smrg	  destfile="$func_basename_result"
2098c3c9db83Smrg	  destfile="$destdir/$destfile"
20992e71ea71Smrg	fi
2100692f60a7Smrg
2101c3c9db83Smrg	# Deduce the name of the destination old-style object file.
2102c3c9db83Smrg	case $destfile in
2103c3c9db83Smrg	*.lo)
2104c3c9db83Smrg	  func_lo2o "$destfile"
2105c3c9db83Smrg	  staticdest=$func_lo2o_result
2106c3c9db83Smrg	  ;;
2107c3c9db83Smrg	*.$objext)
2108c3c9db83Smrg	  staticdest="$destfile"
2109c3c9db83Smrg	  destfile=
2110c3c9db83Smrg	  ;;
2111c3c9db83Smrg	*)
2112c3c9db83Smrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
2113c3c9db83Smrg	  ;;
2114c3c9db83Smrg	esac
2115692f60a7Smrg
2116c3c9db83Smrg	# Install the libtool object if requested.
2117c3c9db83Smrg	test -n "$destfile" && \
2118c3c9db83Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
2119692f60a7Smrg
2120c3c9db83Smrg	# Install the old object if enabled.
2121c3c9db83Smrg	if test "$build_old_libs" = yes; then
2122c3c9db83Smrg	  # Deduce the name of the old-style object file.
2123c3c9db83Smrg	  func_lo2o "$file"
2124c3c9db83Smrg	  staticobj=$func_lo2o_result
2125c3c9db83Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
2126692f60a7Smrg	fi
2127c3c9db83Smrg	exit $EXIT_SUCCESS
2128c3c9db83Smrg	;;
2129692f60a7Smrg
2130c3c9db83Smrg      *)
2131c3c9db83Smrg	# Figure out destination file name, if it wasn't already specified.
2132c3c9db83Smrg	if test -n "$destname"; then
2133c3c9db83Smrg	  destfile="$destdir/$destname"
2134c3c9db83Smrg	else
2135c3c9db83Smrg	  func_basename "$file"
2136c3c9db83Smrg	  destfile="$func_basename_result"
2137c3c9db83Smrg	  destfile="$destdir/$destfile"
2138c3c9db83Smrg	fi
2139692f60a7Smrg
2140c3c9db83Smrg	# If the file is missing, and there is a .exe on the end, strip it
2141c3c9db83Smrg	# because it is most likely a libtool script we actually want to
2142c3c9db83Smrg	# install
2143c3c9db83Smrg	stripped_ext=""
2144c3c9db83Smrg	case $file in
2145c3c9db83Smrg	  *.exe)
2146c3c9db83Smrg	    if test ! -f "$file"; then
2147c3c9db83Smrg	      func_stripname '' '.exe' "$file"
2148c3c9db83Smrg	      file=$func_stripname_result
2149c3c9db83Smrg	      stripped_ext=".exe"
2150c3c9db83Smrg	    fi
2151c3c9db83Smrg	    ;;
2152c3c9db83Smrg	esac
2153c3c9db83Smrg
2154c3c9db83Smrg	# Do a test to see if this is really a libtool program.
2155c3c9db83Smrg	case $host in
2156c3c9db83Smrg	*cygwin* | *mingw*)
2157c3c9db83Smrg	    if func_ltwrapper_executable_p "$file"; then
2158c3c9db83Smrg	      func_ltwrapper_scriptname "$file"
2159c3c9db83Smrg	      wrapper=$func_ltwrapper_scriptname_result
2160c3c9db83Smrg	    else
2161c3c9db83Smrg	      func_stripname '' '.exe' "$file"
2162c3c9db83Smrg	      wrapper=$func_stripname_result
2163c3c9db83Smrg	    fi
2164c3c9db83Smrg	    ;;
21652e71ea71Smrg	*)
2166c3c9db83Smrg	    wrapper=$file
2167c3c9db83Smrg	    ;;
2168c3c9db83Smrg	esac
2169c3c9db83Smrg	if func_ltwrapper_script_p "$wrapper"; then
2170c3c9db83Smrg	  notinst_deplibs=
2171c3c9db83Smrg	  relink_command=
2172c3c9db83Smrg
2173c3c9db83Smrg	  func_source "$wrapper"
2174c3c9db83Smrg
2175c3c9db83Smrg	  # Check the variables that should have been set.
2176c3c9db83Smrg	  test -z "$generated_by_libtool_version" && \
2177c3c9db83Smrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
2178c3c9db83Smrg
2179c3c9db83Smrg	  finalize=yes
2180c3c9db83Smrg	  for lib in $notinst_deplibs; do
2181c3c9db83Smrg	    # Check to see that each library is installed.
2182c3c9db83Smrg	    libdir=
2183c3c9db83Smrg	    if test -f "$lib"; then
2184c3c9db83Smrg	      func_source "$lib"
2185c3c9db83Smrg	    fi
2186c3c9db83Smrg	    libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
2187c3c9db83Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
2188c3c9db83Smrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
2189c3c9db83Smrg	      finalize=no
2190c3c9db83Smrg	    fi
2191c3c9db83Smrg	  done
2192c3c9db83Smrg
2193c3c9db83Smrg	  relink_command=
2194c3c9db83Smrg	  func_source "$wrapper"
2195c3c9db83Smrg
2196c3c9db83Smrg	  outputname=
2197c3c9db83Smrg	  if test "$fast_install" = no && test -n "$relink_command"; then
2198c3c9db83Smrg	    $opt_dry_run || {
2199c3c9db83Smrg	      if test "$finalize" = yes; then
2200c3c9db83Smrg	        tmpdir=`func_mktempdir`
2201c3c9db83Smrg		func_basename "$file$stripped_ext"
2202c3c9db83Smrg		file="$func_basename_result"
2203c3c9db83Smrg	        outputname="$tmpdir/$file"
2204c3c9db83Smrg	        # Replace the output file specification.
2205c3c9db83Smrg	        relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
2206c3c9db83Smrg
2207c3c9db83Smrg	        $opt_silent || {
2208c3c9db83Smrg	          func_quote_for_expand "$relink_command"
2209c3c9db83Smrg		  eval "func_echo $func_quote_for_expand_result"
2210c3c9db83Smrg	        }
2211c3c9db83Smrg	        if eval "$relink_command"; then :
2212c3c9db83Smrg	          else
2213c3c9db83Smrg		  func_error "error: relink \`$file' with the above command before installing it"
2214c3c9db83Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
2215c3c9db83Smrg		  continue
2216c3c9db83Smrg	        fi
2217c3c9db83Smrg	        file="$outputname"
2218c3c9db83Smrg	      else
2219c3c9db83Smrg	        func_warning "cannot relink \`$file'"
2220c3c9db83Smrg	      fi
2221c3c9db83Smrg	    }
2222c3c9db83Smrg	  else
2223c3c9db83Smrg	    # Install the binary that we compiled earlier.
2224c3c9db83Smrg	    file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
22252e71ea71Smrg	  fi
2226c3c9db83Smrg	fi
2227c3c9db83Smrg
2228c3c9db83Smrg	# remove .exe since cygwin /usr/bin/install will append another
2229c3c9db83Smrg	# one anyway
2230c3c9db83Smrg	case $install_prog,$host in
2231c3c9db83Smrg	*/usr/bin/install*,*cygwin*)
2232c3c9db83Smrg	  case $file:$destfile in
2233c3c9db83Smrg	  *.exe:*.exe)
2234c3c9db83Smrg	    # this is ok
2235c3c9db83Smrg	    ;;
2236c3c9db83Smrg	  *.exe:*)
2237c3c9db83Smrg	    destfile=$destfile.exe
2238c3c9db83Smrg	    ;;
2239c3c9db83Smrg	  *:*.exe)
2240c3c9db83Smrg	    func_stripname '' '.exe' "$destfile"
2241c3c9db83Smrg	    destfile=$func_stripname_result
2242c3c9db83Smrg	    ;;
2243c3c9db83Smrg	  esac
22442e71ea71Smrg	  ;;
22452e71ea71Smrg	esac
2246c3c9db83Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
2247c3c9db83Smrg	$opt_dry_run || if test -n "$outputname"; then
2248c3c9db83Smrg	  ${RM}r "$tmpdir"
2249c3c9db83Smrg	fi
2250c3c9db83Smrg	;;
2251c3c9db83Smrg      esac
2252c3c9db83Smrg    done
2253692f60a7Smrg
2254c3c9db83Smrg    for file in $staticlibs; do
2255c3c9db83Smrg      func_basename "$file"
2256c3c9db83Smrg      name="$func_basename_result"
2257c3c9db83Smrg
2258c3c9db83Smrg      # Set up the ranlib parameters.
2259c3c9db83Smrg      oldlib="$destdir/$name"
2260c3c9db83Smrg
2261c3c9db83Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
2262c3c9db83Smrg
2263c3c9db83Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
2264c3c9db83Smrg	func_show_eval "$old_striplib $oldlib" 'exit $?'
2265c3c9db83Smrg      fi
2266c3c9db83Smrg
2267c3c9db83Smrg      # Do each command in the postinstall commands.
2268c3c9db83Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
2269c3c9db83Smrg    done
2270c3c9db83Smrg
2271c3c9db83Smrg    test -n "$future_libdirs" && \
2272c3c9db83Smrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
2273c3c9db83Smrg
2274c3c9db83Smrg    if test -n "$current_libdirs"; then
2275c3c9db83Smrg      # Maybe just do a dry run.
2276c3c9db83Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
2277c3c9db83Smrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
2278c3c9db83Smrg    else
2279c3c9db83Smrg      exit $EXIT_SUCCESS
2280c3c9db83Smrg    fi
2281c3c9db83Smrg}
2282c3c9db83Smrg
2283c3c9db83Smrgtest "$mode" = install && func_mode_install ${1+"$@"}
2284c3c9db83Smrg
2285c3c9db83Smrg
2286c3c9db83Smrg# func_generate_dlsyms outputname originator pic_p
2287c3c9db83Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
2288c3c9db83Smrg# a dlpreopen symbol table.
2289c3c9db83Smrgfunc_generate_dlsyms ()
2290c3c9db83Smrg{
2291c3c9db83Smrg    $opt_debug
2292c3c9db83Smrg    my_outputname="$1"
2293c3c9db83Smrg    my_originator="$2"
2294c3c9db83Smrg    my_pic_p="${3-no}"
2295c3c9db83Smrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
2296c3c9db83Smrg    my_dlsyms=
2297c3c9db83Smrg
2298c3c9db83Smrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
2299c3c9db83Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
2300c3c9db83Smrg	my_dlsyms="${my_outputname}S.c"
2301c3c9db83Smrg      else
2302c3c9db83Smrg	func_error "not configured to extract global symbols from dlpreopened files"
2303c3c9db83Smrg      fi
2304c3c9db83Smrg    fi
2305c3c9db83Smrg
2306c3c9db83Smrg    if test -n "$my_dlsyms"; then
2307c3c9db83Smrg      case $my_dlsyms in
2308c3c9db83Smrg      "") ;;
2309c3c9db83Smrg      *.c)
2310c3c9db83Smrg	# Discover the nlist of each of the dlfiles.
2311c3c9db83Smrg	nlist="$output_objdir/${my_outputname}.nm"
2312c3c9db83Smrg
2313c3c9db83Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
2314c3c9db83Smrg
2315c3c9db83Smrg	# Parse the name list into a source file.
2316c3c9db83Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
2317c3c9db83Smrg
2318c3c9db83Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
2319c3c9db83Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
2320c3c9db83Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
2321c3c9db83Smrg
2322c3c9db83Smrg#ifdef __cplusplus
2323c3c9db83Smrgextern \"C\" {
2324c3c9db83Smrg#endif
2325c3c9db83Smrg
2326c3c9db83Smrg/* External symbol declarations for the compiler. */\
2327c3c9db83Smrg"
2328c3c9db83Smrg
2329c3c9db83Smrg	if test "$dlself" = yes; then
2330c3c9db83Smrg	  func_verbose "generating symbol list for \`$output'"
2331c3c9db83Smrg
2332c3c9db83Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
2333c3c9db83Smrg
2334c3c9db83Smrg	  # Add our own program objects to the symbol list.
2335c3c9db83Smrg	  progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
2336c3c9db83Smrg	  for progfile in $progfiles; do
2337c3c9db83Smrg	    func_verbose "extracting global C symbols from \`$progfile'"
2338c3c9db83Smrg	    $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
2339c3c9db83Smrg	  done
2340c3c9db83Smrg
2341c3c9db83Smrg	  if test -n "$exclude_expsyms"; then
2342c3c9db83Smrg	    $opt_dry_run || {
2343c3c9db83Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
2344c3c9db83Smrg	      eval '$MV "$nlist"T "$nlist"'
2345c3c9db83Smrg	    }
23462e71ea71Smrg	  fi
2347c3c9db83Smrg
2348c3c9db83Smrg	  if test -n "$export_symbols_regex"; then
2349c3c9db83Smrg	    $opt_dry_run || {
2350c3c9db83Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
2351c3c9db83Smrg	      eval '$MV "$nlist"T "$nlist"'
2352c3c9db83Smrg	    }
2353c3c9db83Smrg	  fi
2354c3c9db83Smrg
2355c3c9db83Smrg	  # Prepare the list of exported symbols
2356c3c9db83Smrg	  if test -z "$export_symbols"; then
2357c3c9db83Smrg	    export_symbols="$output_objdir/$outputname.exp"
2358c3c9db83Smrg	    $opt_dry_run || {
2359c3c9db83Smrg	      $RM $export_symbols
2360c3c9db83Smrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
2361c3c9db83Smrg	      case $host in
2362c3c9db83Smrg	      *cygwin* | *mingw* | *cegcc* )
2363c3c9db83Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
2364c3c9db83Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
2365c3c9db83Smrg	        ;;
2366c3c9db83Smrg	      esac
2367c3c9db83Smrg	    }
23682e71ea71Smrg	  else
2369c3c9db83Smrg	    $opt_dry_run || {
2370c3c9db83Smrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
2371c3c9db83Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
2372c3c9db83Smrg	      eval '$MV "$nlist"T "$nlist"'
2373c3c9db83Smrg	      case $host in
2374c3c9db83Smrg	        *cygwin | *mingw* | *cegcc* )
2375c3c9db83Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
2376c3c9db83Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
2377c3c9db83Smrg	          ;;
2378c3c9db83Smrg	      esac
2379c3c9db83Smrg	    }
23802e71ea71Smrg	  fi
2381c3c9db83Smrg	fi
2382692f60a7Smrg
2383c3c9db83Smrg	for dlprefile in $dlprefiles; do
2384c3c9db83Smrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
2385c3c9db83Smrg	  func_basename "$dlprefile"
2386c3c9db83Smrg	  name="$func_basename_result"
2387c3c9db83Smrg	  $opt_dry_run || {
2388c3c9db83Smrg	    eval '$ECHO ": $name " >> "$nlist"'
2389c3c9db83Smrg	    eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
2390c3c9db83Smrg	  }
2391c3c9db83Smrg	done
2392c3c9db83Smrg
2393c3c9db83Smrg	$opt_dry_run || {
2394c3c9db83Smrg	  # Make sure we have at least an empty file.
2395c3c9db83Smrg	  test -f "$nlist" || : > "$nlist"
2396c3c9db83Smrg
2397c3c9db83Smrg	  if test -n "$exclude_expsyms"; then
2398c3c9db83Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
2399c3c9db83Smrg	    $MV "$nlist"T "$nlist"
24002e71ea71Smrg	  fi
2401c3c9db83Smrg
2402c3c9db83Smrg	  # Try sorting and uniquifying the output.
2403c3c9db83Smrg	  if $GREP -v "^: " < "$nlist" |
2404c3c9db83Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
2405c3c9db83Smrg		sort -k 3
2406c3c9db83Smrg	      else
2407c3c9db83Smrg		sort +2
2408c3c9db83Smrg	      fi |
2409c3c9db83Smrg	      uniq > "$nlist"S; then
2410c3c9db83Smrg	    :
24112e71ea71Smrg	  else
2412c3c9db83Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
24132e71ea71Smrg	  fi
2414692f60a7Smrg
2415c3c9db83Smrg	  if test -f "$nlist"S; then
2416c3c9db83Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
24172e71ea71Smrg	  else
2418c3c9db83Smrg	    $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
24192e71ea71Smrg	  fi
2420692f60a7Smrg
2421c3c9db83Smrg	  $ECHO >> "$output_objdir/$my_dlsyms" "\
2422692f60a7Smrg
2423c3c9db83Smrg/* The mapping between symbol names and symbols.  */
2424c3c9db83Smrgtypedef struct {
2425c3c9db83Smrg  const char *name;
2426c3c9db83Smrg  void *address;
2427c3c9db83Smrg} lt_dlsymlist;
2428c3c9db83Smrg"
2429c3c9db83Smrg	  case $host in
2430c3c9db83Smrg	  *cygwin* | *mingw* | *cegcc* )
2431c3c9db83Smrg	    $ECHO >> "$output_objdir/$my_dlsyms" "\
2432c3c9db83Smrg/* DATA imports from DLLs on WIN32 con't be const, because
2433c3c9db83Smrg   runtime relocations are performed -- see ld's documentation
2434c3c9db83Smrg   on pseudo-relocs.  */"
2435c3c9db83Smrg	    lt_dlsym_const= ;;
2436c3c9db83Smrg	  *osf5*)
2437c3c9db83Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
2438c3c9db83Smrg/* This system does not cope well with relocations in const data */"
2439c3c9db83Smrg	    lt_dlsym_const= ;;
2440c3c9db83Smrg	  *)
2441c3c9db83Smrg	    lt_dlsym_const=const ;;
2442c3c9db83Smrg	  esac
2443692f60a7Smrg
2444c3c9db83Smrg	  $ECHO >> "$output_objdir/$my_dlsyms" "\
2445c3c9db83Smrgextern $lt_dlsym_const lt_dlsymlist
2446c3c9db83Smrglt_${my_prefix}_LTX_preloaded_symbols[];
2447c3c9db83Smrg$lt_dlsym_const lt_dlsymlist
2448c3c9db83Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
2449c3c9db83Smrg{\
2450c3c9db83Smrg  { \"$my_originator\", (void *) 0 },"
2451692f60a7Smrg
2452c3c9db83Smrg	  case $need_lib_prefix in
2453c3c9db83Smrg	  no)
2454c3c9db83Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
2455c3c9db83Smrg	    ;;
2456c3c9db83Smrg	  *)
2457c3c9db83Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
2458c3c9db83Smrg	    ;;
2459c3c9db83Smrg	  esac
2460c3c9db83Smrg	  $ECHO >> "$output_objdir/$my_dlsyms" "\
2461c3c9db83Smrg  {0, (void *) 0}
2462c3c9db83Smrg};
2463692f60a7Smrg
2464c3c9db83Smrg/* This works around a problem in FreeBSD linker */
2465c3c9db83Smrg#ifdef FREEBSD_WORKAROUND
2466c3c9db83Smrgstatic const void *lt_preloaded_setup() {
2467c3c9db83Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
2468c3c9db83Smrg}
2469c3c9db83Smrg#endif
2470c3c9db83Smrg
2471c3c9db83Smrg#ifdef __cplusplus
2472c3c9db83Smrg}
2473c3c9db83Smrg#endif\
2474c3c9db83Smrg"
2475c3c9db83Smrg	} # !$opt_dry_run
2476c3c9db83Smrg
2477c3c9db83Smrg	pic_flag_for_symtable=
2478c3c9db83Smrg	case "$compile_command " in
2479c3c9db83Smrg	*" -static "*) ;;
2480c3c9db83Smrg	*)
2481c3c9db83Smrg	  case $host in
2482c3c9db83Smrg	  # compiling the symbol table file with pic_flag works around
2483c3c9db83Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
2484c3c9db83Smrg	  # linked before any other PIC object.  But we must not use
2485c3c9db83Smrg	  # pic_flag when linking with -static.  The problem exists in
2486c3c9db83Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
2487c3c9db83Smrg	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
2488c3c9db83Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
2489c3c9db83Smrg	  *-*-hpux*)
2490c3c9db83Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
2491c3c9db83Smrg	  *)
2492c3c9db83Smrg	    if test "X$my_pic_p" != Xno; then
2493c3c9db83Smrg	      pic_flag_for_symtable=" $pic_flag"
24942e71ea71Smrg	    fi
2495c3c9db83Smrg	    ;;
2496c3c9db83Smrg	  esac
2497c3c9db83Smrg	  ;;
2498c3c9db83Smrg	esac
2499c3c9db83Smrg	symtab_cflags=
2500c3c9db83Smrg	for arg in $LTCFLAGS; do
2501c3c9db83Smrg	  case $arg in
2502c3c9db83Smrg	  -pie | -fpie | -fPIE) ;;
2503c3c9db83Smrg	  *) symtab_cflags="$symtab_cflags $arg" ;;
2504c3c9db83Smrg	  esac
2505c3c9db83Smrg	done
2506692f60a7Smrg
2507c3c9db83Smrg	# Now compile the dynamic symbol file.
2508c3c9db83Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
250985ee4c00Smrg
2510c3c9db83Smrg	# Clean up the generated files.
2511c3c9db83Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
2512692f60a7Smrg
2513c3c9db83Smrg	# Transform the symbol file into the correct name.
2514c3c9db83Smrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
2515c3c9db83Smrg	case $host in
2516c3c9db83Smrg	*cygwin* | *mingw* | *cegcc* )
2517c3c9db83Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
2518c3c9db83Smrg	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
2519c3c9db83Smrg	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
2520c3c9db83Smrg	  else
2521c3c9db83Smrg	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
2522c3c9db83Smrg	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
25232e71ea71Smrg	  fi
2524c3c9db83Smrg	  ;;
2525c3c9db83Smrg	*)
2526c3c9db83Smrg	  compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
2527c3c9db83Smrg	  finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
2528c3c9db83Smrg	  ;;
2529c3c9db83Smrg	esac
2530c3c9db83Smrg	;;
2531c3c9db83Smrg      *)
2532c3c9db83Smrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
2533c3c9db83Smrg	;;
2534c3c9db83Smrg      esac
2535c3c9db83Smrg    else
2536c3c9db83Smrg      # We keep going just in case the user didn't refer to
2537c3c9db83Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
2538c3c9db83Smrg      # really was required.
2539692f60a7Smrg
2540c3c9db83Smrg      # Nullify the symbol file.
2541c3c9db83Smrg      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
2542c3c9db83Smrg      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
2543c3c9db83Smrg    fi
2544c3c9db83Smrg}
254585ee4c00Smrg
2546c3c9db83Smrg# func_win32_libid arg
2547c3c9db83Smrg# return the library type of file 'arg'
2548c3c9db83Smrg#
2549c3c9db83Smrg# Need a lot of goo to handle *both* DLLs and import libs
2550c3c9db83Smrg# Has to be a shell function in order to 'eat' the argument
2551c3c9db83Smrg# that is supplied when $file_magic_command is called.
2552c3c9db83Smrgfunc_win32_libid ()
2553c3c9db83Smrg{
2554c3c9db83Smrg  $opt_debug
2555c3c9db83Smrg  win32_libid_type="unknown"
2556c3c9db83Smrg  win32_fileres=`file -L $1 2>/dev/null`
2557c3c9db83Smrg  case $win32_fileres in
2558c3c9db83Smrg  *ar\ archive\ import\ library*) # definitely import
2559c3c9db83Smrg    win32_libid_type="x86 archive import"
2560c3c9db83Smrg    ;;
2561c3c9db83Smrg  *ar\ archive*) # could be an import, or static
2562c3c9db83Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
2563c3c9db83Smrg       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
2564c3c9db83Smrg      win32_nmres=`eval $NM -f posix -A $1 |
2565c3c9db83Smrg	$SED -n -e '
2566c3c9db83Smrg	    1,100{
2567c3c9db83Smrg		/ I /{
2568c3c9db83Smrg		    s,.*,import,
2569c3c9db83Smrg		    p
2570c3c9db83Smrg		    q
2571c3c9db83Smrg		}
2572c3c9db83Smrg	    }'`
2573c3c9db83Smrg      case $win32_nmres in
2574c3c9db83Smrg      import*)  win32_libid_type="x86 archive import";;
2575c3c9db83Smrg      *)        win32_libid_type="x86 archive static";;
2576c3c9db83Smrg      esac
2577c3c9db83Smrg    fi
2578c3c9db83Smrg    ;;
2579c3c9db83Smrg  *DLL*)
2580c3c9db83Smrg    win32_libid_type="x86 DLL"
2581c3c9db83Smrg    ;;
2582c3c9db83Smrg  *executable*) # but shell scripts are "executable" too...
2583c3c9db83Smrg    case $win32_fileres in
2584c3c9db83Smrg    *MS\ Windows\ PE\ Intel*)
2585c3c9db83Smrg      win32_libid_type="x86 DLL"
2586c3c9db83Smrg      ;;
2587c3c9db83Smrg    esac
2588c3c9db83Smrg    ;;
2589c3c9db83Smrg  esac
2590c3c9db83Smrg  $ECHO "$win32_libid_type"
2591c3c9db83Smrg}
259285ee4c00Smrg
259385ee4c00Smrg
259485ee4c00Smrg
2595c3c9db83Smrg# func_extract_an_archive dir oldlib
2596c3c9db83Smrgfunc_extract_an_archive ()
2597c3c9db83Smrg{
2598c3c9db83Smrg    $opt_debug
2599c3c9db83Smrg    f_ex_an_ar_dir="$1"; shift
2600c3c9db83Smrg    f_ex_an_ar_oldlib="$1"
2601c3c9db83Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
2602c3c9db83Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
2603c3c9db83Smrg     :
2604c3c9db83Smrg    else
2605c3c9db83Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
2606c3c9db83Smrg    fi
2607c3c9db83Smrg}
2608692f60a7Smrg
2609692f60a7Smrg
2610c3c9db83Smrg# func_extract_archives gentop oldlib ...
2611c3c9db83Smrgfunc_extract_archives ()
2612c3c9db83Smrg{
2613c3c9db83Smrg    $opt_debug
2614c3c9db83Smrg    my_gentop="$1"; shift
2615c3c9db83Smrg    my_oldlibs=${1+"$@"}
2616c3c9db83Smrg    my_oldobjs=""
2617c3c9db83Smrg    my_xlib=""
2618c3c9db83Smrg    my_xabs=""
2619c3c9db83Smrg    my_xdir=""
2620692f60a7Smrg
2621c3c9db83Smrg    for my_xlib in $my_oldlibs; do
2622c3c9db83Smrg      # Extract the objects.
2623c3c9db83Smrg      case $my_xlib in
2624c3c9db83Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
2625c3c9db83Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
2626c3c9db83Smrg      esac
2627c3c9db83Smrg      func_basename "$my_xlib"
2628c3c9db83Smrg      my_xlib="$func_basename_result"
2629c3c9db83Smrg      my_xlib_u=$my_xlib
2630c3c9db83Smrg      while :; do
2631c3c9db83Smrg        case " $extracted_archives " in
2632c3c9db83Smrg	*" $my_xlib_u "*)
2633c3c9db83Smrg	  func_arith $extracted_serial + 1
2634c3c9db83Smrg	  extracted_serial=$func_arith_result
2635c3c9db83Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
2636c3c9db83Smrg	*) break ;;
2637c3c9db83Smrg	esac
2638c3c9db83Smrg      done
2639c3c9db83Smrg      extracted_archives="$extracted_archives $my_xlib_u"
2640c3c9db83Smrg      my_xdir="$my_gentop/$my_xlib_u"
2641692f60a7Smrg
2642c3c9db83Smrg      func_mkdir_p "$my_xdir"
264385ee4c00Smrg
2644c3c9db83Smrg      case $host in
2645c3c9db83Smrg      *-darwin*)
2646c3c9db83Smrg	func_verbose "Extracting $my_xabs"
2647c3c9db83Smrg	# Do not bother doing anything if just a dry run
2648c3c9db83Smrg	$opt_dry_run || {
2649c3c9db83Smrg	  darwin_orig_dir=`pwd`
2650c3c9db83Smrg	  cd $my_xdir || exit $?
2651c3c9db83Smrg	  darwin_archive=$my_xabs
2652c3c9db83Smrg	  darwin_curdir=`pwd`
2653c3c9db83Smrg	  darwin_base_archive=`basename "$darwin_archive"`
2654c3c9db83Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
2655c3c9db83Smrg	  if test -n "$darwin_arches"; then
2656c3c9db83Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
2657c3c9db83Smrg	    darwin_arch=
2658c3c9db83Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
2659c3c9db83Smrg	    for darwin_arch in  $darwin_arches ; do
2660c3c9db83Smrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
2661c3c9db83Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
2662c3c9db83Smrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
2663c3c9db83Smrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
2664c3c9db83Smrg	      cd "$darwin_curdir"
2665c3c9db83Smrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
2666c3c9db83Smrg	    done # $darwin_arches
2667c3c9db83Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
2668c3c9db83Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
2669c3c9db83Smrg	    darwin_file=
2670c3c9db83Smrg	    darwin_files=
2671c3c9db83Smrg	    for darwin_file in $darwin_filelist; do
2672c3c9db83Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
2673c3c9db83Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
2674c3c9db83Smrg	    done # $darwin_filelist
2675c3c9db83Smrg	    $RM -rf unfat-$$
2676c3c9db83Smrg	    cd "$darwin_orig_dir"
26772e71ea71Smrg	  else
2678c3c9db83Smrg	    cd $darwin_orig_dir
2679c3c9db83Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
2680c3c9db83Smrg	  fi # $darwin_arches
2681c3c9db83Smrg	} # !$opt_dry_run
2682c3c9db83Smrg	;;
2683c3c9db83Smrg      *)
2684c3c9db83Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
2685c3c9db83Smrg	;;
2686c3c9db83Smrg      esac
2687c3c9db83Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
2688c3c9db83Smrg    done
2689692f60a7Smrg
2690c3c9db83Smrg    func_extract_archives_result="$my_oldobjs"
2691c3c9db83Smrg}
2692692f60a7Smrg
2693692f60a7Smrg
2694692f60a7Smrg
2695c3c9db83Smrg# func_emit_wrapper_part1 [arg=no]
2696c3c9db83Smrg#
2697c3c9db83Smrg# Emit the first part of a libtool wrapper script on stdout.
2698c3c9db83Smrg# For more information, see the description associated with
2699c3c9db83Smrg# func_emit_wrapper(), below.
2700c3c9db83Smrgfunc_emit_wrapper_part1 ()
2701c3c9db83Smrg{
2702c3c9db83Smrg	func_emit_wrapper_part1_arg1=no
2703c3c9db83Smrg	if test -n "$1" ; then
2704c3c9db83Smrg	  func_emit_wrapper_part1_arg1=$1
27052e71ea71Smrg	fi
27062e71ea71Smrg
2707c3c9db83Smrg	$ECHO "\
2708c3c9db83Smrg#! $SHELL
2709692f60a7Smrg
2710c3c9db83Smrg# $output - temporary wrapper script for $objdir/$outputname
2711c3c9db83Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
2712c3c9db83Smrg#
2713c3c9db83Smrg# The $output program cannot be directly executed until all the libtool
2714c3c9db83Smrg# libraries that it depends on are installed.
2715c3c9db83Smrg#
2716c3c9db83Smrg# This wrapper script should never be moved out of the build directory.
2717c3c9db83Smrg# If it is, it will not operate correctly.
2718692f60a7Smrg
2719c3c9db83Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
2720c3c9db83Smrg# metacharacters that are still active within double-quoted strings.
2721c3c9db83SmrgXsed='${SED} -e 1s/^X//'
2722c3c9db83Smrgsed_quote_subst='$sed_quote_subst'
2723692f60a7Smrg
2724c3c9db83Smrg# Be Bourne compatible
2725c3c9db83Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
2726c3c9db83Smrg  emulate sh
2727c3c9db83Smrg  NULLCMD=:
2728c3c9db83Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
2729c3c9db83Smrg  # is contrary to our usage.  Disable this feature.
2730c3c9db83Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
2731c3c9db83Smrg  setopt NO_GLOB_SUBST
2732c3c9db83Smrgelse
2733c3c9db83Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
2734c3c9db83Smrgfi
2735c3c9db83SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
2736c3c9db83SmrgDUALCASE=1; export DUALCASE # for MKS sh
2737692f60a7Smrg
2738c3c9db83Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
2739c3c9db83Smrg# if CDPATH is set.
2740c3c9db83Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
2741692f60a7Smrg
2742c3c9db83Smrgrelink_command=\"$relink_command\"
2743692f60a7Smrg
2744c3c9db83Smrg# This environment variable determines our operation mode.
2745c3c9db83Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
2746c3c9db83Smrg  # install mode needs the following variables:
2747c3c9db83Smrg  generated_by_libtool_version='$macro_version'
2748c3c9db83Smrg  notinst_deplibs='$notinst_deplibs'
2749c3c9db83Smrgelse
2750c3c9db83Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
2751c3c9db83Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
2752c3c9db83Smrg    ECHO=\"$qecho\"
2753c3c9db83Smrg    file=\"\$0\"
2754c3c9db83Smrg    # Make sure echo works.
2755c3c9db83Smrg    if test \"X\$1\" = X--no-reexec; then
2756c3c9db83Smrg      # Discard the --no-reexec flag, and continue.
2757c3c9db83Smrg      shift
2758c3c9db83Smrg    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
2759c3c9db83Smrg      # Yippee, \$ECHO works!
2760c3c9db83Smrg      :
2761c3c9db83Smrg    else
2762c3c9db83Smrg      # Restart under the correct shell, and then maybe \$ECHO will work.
2763c3c9db83Smrg      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
2764c3c9db83Smrg    fi
2765c3c9db83Smrg  fi\
2766c3c9db83Smrg"
2767c3c9db83Smrg	$ECHO "\
2768692f60a7Smrg
2769c3c9db83Smrg  # Find the directory that this script lives in.
2770c3c9db83Smrg  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
2771c3c9db83Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
2772692f60a7Smrg
2773c3c9db83Smrg  # Follow symbolic links until we get to the real thisdir.
2774c3c9db83Smrg  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
2775c3c9db83Smrg  while test -n \"\$file\"; do
2776c3c9db83Smrg    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
2777692f60a7Smrg
2778c3c9db83Smrg    # If there was a directory component, then change thisdir.
2779c3c9db83Smrg    if test \"x\$destdir\" != \"x\$file\"; then
2780c3c9db83Smrg      case \"\$destdir\" in
2781c3c9db83Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
2782c3c9db83Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
27832e71ea71Smrg      esac
2784c3c9db83Smrg    fi
2785692f60a7Smrg
2786c3c9db83Smrg    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
2787c3c9db83Smrg    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
2788c3c9db83Smrg  done
2789c3c9db83Smrg"
2790c3c9db83Smrg}
2791c3c9db83Smrg# end: func_emit_wrapper_part1
2792c3c9db83Smrg
2793c3c9db83Smrg# func_emit_wrapper_part2 [arg=no]
2794c3c9db83Smrg#
2795c3c9db83Smrg# Emit the second part of a libtool wrapper script on stdout.
2796c3c9db83Smrg# For more information, see the description associated with
2797c3c9db83Smrg# func_emit_wrapper(), below.
2798c3c9db83Smrgfunc_emit_wrapper_part2 ()
2799c3c9db83Smrg{
2800c3c9db83Smrg	func_emit_wrapper_part2_arg1=no
2801c3c9db83Smrg	if test -n "$1" ; then
2802c3c9db83Smrg	  func_emit_wrapper_part2_arg1=$1
28032e71ea71Smrg	fi
2804692f60a7Smrg
2805c3c9db83Smrg	$ECHO "\
2806692f60a7Smrg
2807c3c9db83Smrg  # Usually 'no', except on cygwin/mingw when embedded into
2808c3c9db83Smrg  # the cwrapper.
2809c3c9db83Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
2810c3c9db83Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
2811c3c9db83Smrg    # special case for '.'
2812c3c9db83Smrg    if test \"\$thisdir\" = \".\"; then
2813c3c9db83Smrg      thisdir=\`pwd\`
2814c3c9db83Smrg    fi
2815c3c9db83Smrg    # remove .libs from thisdir
2816c3c9db83Smrg    case \"\$thisdir\" in
2817c3c9db83Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
2818c3c9db83Smrg    $objdir )   thisdir=. ;;
2819c3c9db83Smrg    esac
2820c3c9db83Smrg  fi
2821c3c9db83Smrg
2822c3c9db83Smrg  # Try to get the absolute directory name.
2823c3c9db83Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
2824c3c9db83Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
2825c3c9db83Smrg"
2826c3c9db83Smrg
2827c3c9db83Smrg	if test "$fast_install" = yes; then
2828c3c9db83Smrg	  $ECHO "\
2829c3c9db83Smrg  program=lt-'$outputname'$exeext
2830c3c9db83Smrg  progdir=\"\$thisdir/$objdir\"
2831c3c9db83Smrg
2832c3c9db83Smrg  if test ! -f \"\$progdir/\$program\" ||
2833c3c9db83Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
2834c3c9db83Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
2835c3c9db83Smrg
2836c3c9db83Smrg    file=\"\$\$-\$program\"
2837c3c9db83Smrg
2838c3c9db83Smrg    if test ! -d \"\$progdir\"; then
2839c3c9db83Smrg      $MKDIR \"\$progdir\"
2840c3c9db83Smrg    else
2841c3c9db83Smrg      $RM \"\$progdir/\$file\"
2842c3c9db83Smrg    fi"
2843c3c9db83Smrg
2844c3c9db83Smrg	  $ECHO "\
2845c3c9db83Smrg
2846c3c9db83Smrg    # relink executable if necessary
2847c3c9db83Smrg    if test -n \"\$relink_command\"; then
2848c3c9db83Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
2849c3c9db83Smrg      else
2850c3c9db83Smrg	$ECHO \"\$relink_command_output\" >&2
2851c3c9db83Smrg	$RM \"\$progdir/\$file\"
2852c3c9db83Smrg	exit 1
28532e71ea71Smrg      fi
2854c3c9db83Smrg    fi
2855692f60a7Smrg
2856c3c9db83Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
2857c3c9db83Smrg    { $RM \"\$progdir/\$program\";
2858c3c9db83Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
2859c3c9db83Smrg    $RM \"\$progdir/\$file\"
2860c3c9db83Smrg  fi"
2861c3c9db83Smrg	else
2862c3c9db83Smrg	  $ECHO "\
2863c3c9db83Smrg  program='$outputname'
2864c3c9db83Smrg  progdir=\"\$thisdir/$objdir\"
2865c3c9db83Smrg"
28662e71ea71Smrg	fi
2867692f60a7Smrg
2868c3c9db83Smrg	$ECHO "\
2869692f60a7Smrg
2870c3c9db83Smrg  if test -f \"\$progdir/\$program\"; then"
2871692f60a7Smrg
2872c3c9db83Smrg	# Export our shlibpath_var if we have one.
2873c3c9db83Smrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
2874c3c9db83Smrg	  $ECHO "\
2875c3c9db83Smrg    # Add our own library path to $shlibpath_var
2876c3c9db83Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
2877c3c9db83Smrg
2878c3c9db83Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
2879c3c9db83Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
2880c3c9db83Smrg    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
2881692f60a7Smrg
2882c3c9db83Smrg    export $shlibpath_var
2883c3c9db83Smrg"
28842e71ea71Smrg	fi
2885692f60a7Smrg
2886c3c9db83Smrg	# fixup the dll searchpath if we need to.
2887c3c9db83Smrg	if test -n "$dllsearchpath"; then
2888c3c9db83Smrg	  $ECHO "\
2889c3c9db83Smrg    # Add the dll search path components to the executable PATH
2890c3c9db83Smrg    PATH=$dllsearchpath:\$PATH
2891c3c9db83Smrg"
2892c3c9db83Smrg	fi
2893692f60a7Smrg
2894c3c9db83Smrg	$ECHO "\
2895c3c9db83Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
2896c3c9db83Smrg      # Run the actual program with our arguments.
2897c3c9db83Smrg"
2898c3c9db83Smrg	case $host in
2899c3c9db83Smrg	# Backslashes separate directories on plain windows
2900c3c9db83Smrg	*-*-mingw | *-*-os2* | *-cegcc*)
2901c3c9db83Smrg	  $ECHO "\
2902c3c9db83Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
2903c3c9db83Smrg"
29042e71ea71Smrg	  ;;
2905692f60a7Smrg
29062e71ea71Smrg	*)
2907c3c9db83Smrg	  $ECHO "\
2908c3c9db83Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
2909c3c9db83Smrg"
29102e71ea71Smrg	  ;;
29112e71ea71Smrg	esac
2912c3c9db83Smrg	$ECHO "\
2913c3c9db83Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
2914c3c9db83Smrg      exit 1
2915c3c9db83Smrg    fi
2916c3c9db83Smrg  else
2917c3c9db83Smrg    # The program doesn't exist.
2918c3c9db83Smrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
2919c3c9db83Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
2920c3c9db83Smrg    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
2921c3c9db83Smrg    exit 1
2922c3c9db83Smrg  fi
2923c3c9db83Smrgfi\
2924c3c9db83Smrg"
2925c3c9db83Smrg}
2926c3c9db83Smrg# end: func_emit_wrapper_part2
2927692f60a7Smrg
2928692f60a7Smrg
2929c3c9db83Smrg# func_emit_wrapper [arg=no]
2930c3c9db83Smrg#
2931c3c9db83Smrg# Emit a libtool wrapper script on stdout.
2932c3c9db83Smrg# Don't directly open a file because we may want to
2933c3c9db83Smrg# incorporate the script contents within a cygwin/mingw
2934c3c9db83Smrg# wrapper executable.  Must ONLY be called from within
2935c3c9db83Smrg# func_mode_link because it depends on a number of variables
2936c3c9db83Smrg# set therein.
2937c3c9db83Smrg#
2938c3c9db83Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
2939c3c9db83Smrg# variable will take.  If 'yes', then the emitted script
2940c3c9db83Smrg# will assume that the directory in which it is stored is
2941c3c9db83Smrg# the $objdir directory.  This is a cygwin/mingw-specific
2942c3c9db83Smrg# behavior.
2943c3c9db83Smrgfunc_emit_wrapper ()
2944c3c9db83Smrg{
2945c3c9db83Smrg	func_emit_wrapper_arg1=no
2946c3c9db83Smrg	if test -n "$1" ; then
2947c3c9db83Smrg	  func_emit_wrapper_arg1=$1
29482e71ea71Smrg	fi
2949692f60a7Smrg
2950c3c9db83Smrg	# split this up so that func_emit_cwrapperexe_src
2951c3c9db83Smrg	# can call each part independently.
2952c3c9db83Smrg	func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
2953c3c9db83Smrg	func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
2954c3c9db83Smrg}
2955692f60a7Smrg
2956692f60a7Smrg
2957c3c9db83Smrg# func_to_host_path arg
2958c3c9db83Smrg#
2959c3c9db83Smrg# Convert paths to host format when used with build tools.
2960c3c9db83Smrg# Intended for use with "native" mingw (where libtool itself
2961c3c9db83Smrg# is running under the msys shell), or in the following cross-
2962c3c9db83Smrg# build environments:
2963c3c9db83Smrg#    $build          $host
2964c3c9db83Smrg#    mingw (msys)    mingw  [e.g. native]
2965c3c9db83Smrg#    cygwin          mingw
2966c3c9db83Smrg#    *nix + wine     mingw
2967c3c9db83Smrg# where wine is equipped with the `winepath' executable.
2968c3c9db83Smrg# In the native mingw case, the (msys) shell automatically
2969c3c9db83Smrg# converts paths for any non-msys applications it launches,
2970c3c9db83Smrg# but that facility isn't available from inside the cwrapper.
2971c3c9db83Smrg# Similar accommodations are necessary for $host mingw and
2972c3c9db83Smrg# $build cygwin.  Calling this function does no harm for other
2973c3c9db83Smrg# $host/$build combinations not listed above.
2974c3c9db83Smrg#
2975c3c9db83Smrg# ARG is the path (on $build) that should be converted to
2976c3c9db83Smrg# the proper representation for $host. The result is stored
2977c3c9db83Smrg# in $func_to_host_path_result.
2978c3c9db83Smrgfunc_to_host_path ()
2979c3c9db83Smrg{
2980c3c9db83Smrg  func_to_host_path_result="$1"
2981c3c9db83Smrg  if test -n "$1" ; then
2982c3c9db83Smrg    case $host in
2983c3c9db83Smrg      *mingw* )
2984c3c9db83Smrg        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
2985c3c9db83Smrg        case $build in
2986c3c9db83Smrg          *mingw* ) # actually, msys
2987c3c9db83Smrg            # awkward: cmd appends spaces to result
2988c3c9db83Smrg            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
2989c3c9db83Smrg            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
2990c3c9db83Smrg              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
2991c3c9db83Smrg            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
2992c3c9db83Smrg              $SED -e "$lt_sed_naive_backslashify"`
2993c3c9db83Smrg            ;;
2994c3c9db83Smrg          *cygwin* )
2995c3c9db83Smrg            func_to_host_path_tmp1=`cygpath -w "$1"`
2996c3c9db83Smrg            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
2997c3c9db83Smrg              $SED -e "$lt_sed_naive_backslashify"`
2998c3c9db83Smrg            ;;
2999c3c9db83Smrg          * )
3000c3c9db83Smrg            # Unfortunately, winepath does not exit with a non-zero
3001c3c9db83Smrg            # error code, so we are forced to check the contents of
3002c3c9db83Smrg            # stdout. On the other hand, if the command is not
3003c3c9db83Smrg            # found, the shell will set an exit code of 127 and print
3004c3c9db83Smrg            # *an error message* to stdout. So we must check for both
3005c3c9db83Smrg            # error code of zero AND non-empty stdout, which explains
3006c3c9db83Smrg            # the odd construction:
3007c3c9db83Smrg            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
3008c3c9db83Smrg            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
3009c3c9db83Smrg              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
3010c3c9db83Smrg                $SED -e "$lt_sed_naive_backslashify"`
3011c3c9db83Smrg            else
3012c3c9db83Smrg              # Allow warning below.
3013c3c9db83Smrg              func_to_host_path_result=""
3014c3c9db83Smrg            fi
3015c3c9db83Smrg            ;;
3016c3c9db83Smrg        esac
3017c3c9db83Smrg        if test -z "$func_to_host_path_result" ; then
3018c3c9db83Smrg          func_error "Could not determine host path corresponding to"
3019c3c9db83Smrg          func_error "  '$1'"
3020c3c9db83Smrg          func_error "Continuing, but uninstalled executables may not work."
3021c3c9db83Smrg          # Fallback:
3022c3c9db83Smrg          func_to_host_path_result="$1"
3023c3c9db83Smrg        fi
3024c3c9db83Smrg        ;;
3025c3c9db83Smrg    esac
3026c3c9db83Smrg  fi
3027c3c9db83Smrg}
3028c3c9db83Smrg# end: func_to_host_path
3029692f60a7Smrg
3030c3c9db83Smrg# func_to_host_pathlist arg
3031c3c9db83Smrg#
3032c3c9db83Smrg# Convert pathlists to host format when used with build tools.
3033c3c9db83Smrg# See func_to_host_path(), above. This function supports the
3034c3c9db83Smrg# following $build/$host combinations (but does no harm for
3035c3c9db83Smrg# combinations not listed here):
3036c3c9db83Smrg#    $build          $host
3037c3c9db83Smrg#    mingw (msys)    mingw  [e.g. native]
3038c3c9db83Smrg#    cygwin          mingw
3039c3c9db83Smrg#    *nix + wine     mingw
3040c3c9db83Smrg#
3041c3c9db83Smrg# Path separators are also converted from $build format to
3042c3c9db83Smrg# $host format. If ARG begins or ends with a path separator
3043c3c9db83Smrg# character, it is preserved (but converted to $host format)
3044c3c9db83Smrg# on output.
3045c3c9db83Smrg#
3046c3c9db83Smrg# ARG is a pathlist (on $build) that should be converted to
3047c3c9db83Smrg# the proper representation on $host. The result is stored
3048c3c9db83Smrg# in $func_to_host_pathlist_result.
3049c3c9db83Smrgfunc_to_host_pathlist ()
3050c3c9db83Smrg{
3051c3c9db83Smrg  func_to_host_pathlist_result="$1"
3052c3c9db83Smrg  if test -n "$1" ; then
3053c3c9db83Smrg    case $host in
3054c3c9db83Smrg      *mingw* )
3055c3c9db83Smrg        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
3056c3c9db83Smrg        # Remove leading and trailing path separator characters from
3057c3c9db83Smrg        # ARG. msys behavior is inconsistent here, cygpath turns them
3058c3c9db83Smrg        # into '.;' and ';.', and winepath ignores them completely.
3059c3c9db83Smrg        func_to_host_pathlist_tmp2="$1"
3060c3c9db83Smrg        # Once set for this call, this variable should not be
3061c3c9db83Smrg        # reassigned. It is used in tha fallback case.
3062c3c9db83Smrg        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
3063c3c9db83Smrg          $SED -e 's|^:*||' -e 's|:*$||'`
3064c3c9db83Smrg        case $build in
3065c3c9db83Smrg          *mingw* ) # Actually, msys.
3066c3c9db83Smrg            # Awkward: cmd appends spaces to result.
3067c3c9db83Smrg            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
3068c3c9db83Smrg            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
3069c3c9db83Smrg              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
3070c3c9db83Smrg            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
3071c3c9db83Smrg              $SED -e "$lt_sed_naive_backslashify"`
3072c3c9db83Smrg            ;;
3073c3c9db83Smrg          *cygwin* )
3074c3c9db83Smrg            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
3075c3c9db83Smrg            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
3076c3c9db83Smrg              $SED -e "$lt_sed_naive_backslashify"`
3077c3c9db83Smrg            ;;
3078c3c9db83Smrg          * )
3079c3c9db83Smrg            # unfortunately, winepath doesn't convert pathlists
3080c3c9db83Smrg            func_to_host_pathlist_result=""
3081c3c9db83Smrg            func_to_host_pathlist_oldIFS=$IFS
3082c3c9db83Smrg            IFS=:
3083c3c9db83Smrg            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
3084c3c9db83Smrg              IFS=$func_to_host_pathlist_oldIFS
3085c3c9db83Smrg              if test -n "$func_to_host_pathlist_f" ; then
3086c3c9db83Smrg                func_to_host_path "$func_to_host_pathlist_f"
3087c3c9db83Smrg                if test -n "$func_to_host_path_result" ; then
3088c3c9db83Smrg                  if test -z "$func_to_host_pathlist_result" ; then
3089c3c9db83Smrg                    func_to_host_pathlist_result="$func_to_host_path_result"
3090c3c9db83Smrg                  else
3091c3c9db83Smrg                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
3092c3c9db83Smrg                  fi
3093c3c9db83Smrg                fi
3094c3c9db83Smrg              fi
3095c3c9db83Smrg              IFS=:
3096c3c9db83Smrg            done
3097c3c9db83Smrg            IFS=$func_to_host_pathlist_oldIFS
3098c3c9db83Smrg            ;;
3099c3c9db83Smrg        esac
3100c3c9db83Smrg        if test -z "$func_to_host_pathlist_result" ; then
3101c3c9db83Smrg          func_error "Could not determine the host path(s) corresponding to"
3102c3c9db83Smrg          func_error "  '$1'"
3103c3c9db83Smrg          func_error "Continuing, but uninstalled executables may not work."
3104c3c9db83Smrg          # Fallback. This may break if $1 contains DOS-style drive
3105c3c9db83Smrg          # specifications. The fix is not to complicate the expression
3106c3c9db83Smrg          # below, but for the user to provide a working wine installation
3107c3c9db83Smrg          # with winepath so that path translation in the cross-to-mingw
3108c3c9db83Smrg          # case works properly.
3109c3c9db83Smrg          lt_replace_pathsep_nix_to_dos="s|:|;|g"
3110c3c9db83Smrg          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
3111c3c9db83Smrg            $SED -e "$lt_replace_pathsep_nix_to_dos"`
3112c3c9db83Smrg        fi
3113c3c9db83Smrg        # Now, add the leading and trailing path separators back
3114c3c9db83Smrg        case "$1" in
3115c3c9db83Smrg          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
3116c3c9db83Smrg            ;;
3117c3c9db83Smrg        esac
3118c3c9db83Smrg        case "$1" in
3119c3c9db83Smrg          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
3120c3c9db83Smrg            ;;
3121c3c9db83Smrg        esac
3122c3c9db83Smrg        ;;
3123c3c9db83Smrg    esac
3124c3c9db83Smrg  fi
3125c3c9db83Smrg}
3126c3c9db83Smrg# end: func_to_host_pathlist
312785ee4c00Smrg
3128c3c9db83Smrg# func_emit_cwrapperexe_src
3129c3c9db83Smrg# emit the source code for a wrapper executable on stdout
3130c3c9db83Smrg# Must ONLY be called from within func_mode_link because
3131c3c9db83Smrg# it depends on a number of variable set therein.
3132c3c9db83Smrgfunc_emit_cwrapperexe_src ()
3133c3c9db83Smrg{
3134c3c9db83Smrg	cat <<EOF
3135692f60a7Smrg
3136c3c9db83Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
3137c3c9db83Smrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
3138692f60a7Smrg
3139c3c9db83Smrg   The $output program cannot be directly executed until all the libtool
3140c3c9db83Smrg   libraries that it depends on are installed.
3141692f60a7Smrg
3142c3c9db83Smrg   This wrapper executable should never be moved out of the build directory.
3143c3c9db83Smrg   If it is, it will not operate correctly.
3144692f60a7Smrg
3145c3c9db83Smrg   Currently, it simply execs the wrapper *script* "$SHELL $output",
3146c3c9db83Smrg   but could eventually absorb all of the scripts functionality and
3147c3c9db83Smrg   exec $objdir/$outputname directly.
3148c3c9db83Smrg*/
3149c3c9db83SmrgEOF
3150c3c9db83Smrg	    cat <<"EOF"
3151c3c9db83Smrg#include <stdio.h>
3152c3c9db83Smrg#include <stdlib.h>
3153c3c9db83Smrg#ifdef _MSC_VER
3154c3c9db83Smrg# include <direct.h>
3155c3c9db83Smrg# include <process.h>
3156c3c9db83Smrg# include <io.h>
3157c3c9db83Smrg# define setmode _setmode
3158c3c9db83Smrg#else
3159c3c9db83Smrg# include <unistd.h>
3160c3c9db83Smrg# include <stdint.h>
3161c3c9db83Smrg# ifdef __CYGWIN__
3162c3c9db83Smrg#  include <io.h>
3163c3c9db83Smrg#  define HAVE_SETENV
3164c3c9db83Smrg#  ifdef __STRICT_ANSI__
3165c3c9db83Smrgchar *realpath (const char *, char *);
3166c3c9db83Smrgint putenv (char *);
3167c3c9db83Smrgint setenv (const char *, const char *, int);
3168c3c9db83Smrg#  endif
3169c3c9db83Smrg# endif
3170c3c9db83Smrg#endif
3171c3c9db83Smrg#include <malloc.h>
3172c3c9db83Smrg#include <stdarg.h>
3173c3c9db83Smrg#include <assert.h>
3174c3c9db83Smrg#include <string.h>
3175c3c9db83Smrg#include <ctype.h>
3176c3c9db83Smrg#include <errno.h>
3177c3c9db83Smrg#include <fcntl.h>
3178c3c9db83Smrg#include <sys/stat.h>
3179692f60a7Smrg
3180c3c9db83Smrg#if defined(PATH_MAX)
3181c3c9db83Smrg# define LT_PATHMAX PATH_MAX
3182c3c9db83Smrg#elif defined(MAXPATHLEN)
3183c3c9db83Smrg# define LT_PATHMAX MAXPATHLEN
3184c3c9db83Smrg#else
3185c3c9db83Smrg# define LT_PATHMAX 1024
3186c3c9db83Smrg#endif
3187692f60a7Smrg
3188c3c9db83Smrg#ifndef S_IXOTH
3189c3c9db83Smrg# define S_IXOTH 0
3190c3c9db83Smrg#endif
3191c3c9db83Smrg#ifndef S_IXGRP
3192c3c9db83Smrg# define S_IXGRP 0
3193c3c9db83Smrg#endif
3194692f60a7Smrg
3195c3c9db83Smrg#ifdef _MSC_VER
3196c3c9db83Smrg# define S_IXUSR _S_IEXEC
3197c3c9db83Smrg# define stat _stat
3198c3c9db83Smrg# ifndef _INTPTR_T_DEFINED
3199c3c9db83Smrg#  define intptr_t int
3200c3c9db83Smrg# endif
3201c3c9db83Smrg#endif
3202692f60a7Smrg
3203c3c9db83Smrg#ifndef DIR_SEPARATOR
3204c3c9db83Smrg# define DIR_SEPARATOR '/'
3205c3c9db83Smrg# define PATH_SEPARATOR ':'
3206c3c9db83Smrg#endif
3207692f60a7Smrg
3208c3c9db83Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
3209c3c9db83Smrg  defined (__OS2__)
3210c3c9db83Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
3211c3c9db83Smrg# define FOPEN_WB "wb"
3212c3c9db83Smrg# ifndef DIR_SEPARATOR_2
3213c3c9db83Smrg#  define DIR_SEPARATOR_2 '\\'
3214c3c9db83Smrg# endif
3215c3c9db83Smrg# ifndef PATH_SEPARATOR_2
3216c3c9db83Smrg#  define PATH_SEPARATOR_2 ';'
3217c3c9db83Smrg# endif
3218c3c9db83Smrg#endif
3219692f60a7Smrg
3220c3c9db83Smrg#ifndef DIR_SEPARATOR_2
3221c3c9db83Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
3222c3c9db83Smrg#else /* DIR_SEPARATOR_2 */
3223c3c9db83Smrg# define IS_DIR_SEPARATOR(ch) \
3224c3c9db83Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
3225c3c9db83Smrg#endif /* DIR_SEPARATOR_2 */
3226692f60a7Smrg
3227c3c9db83Smrg#ifndef PATH_SEPARATOR_2
3228c3c9db83Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
3229c3c9db83Smrg#else /* PATH_SEPARATOR_2 */
3230c3c9db83Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
3231c3c9db83Smrg#endif /* PATH_SEPARATOR_2 */
3232692f60a7Smrg
3233c3c9db83Smrg#ifdef __CYGWIN__
3234c3c9db83Smrg# define FOPEN_WB "wb"
3235c3c9db83Smrg#endif
3236692f60a7Smrg
3237c3c9db83Smrg#ifndef FOPEN_WB
3238c3c9db83Smrg# define FOPEN_WB "w"
3239c3c9db83Smrg#endif
3240c3c9db83Smrg#ifndef _O_BINARY
3241c3c9db83Smrg# define _O_BINARY 0
3242c3c9db83Smrg#endif
3243692f60a7Smrg
3244c3c9db83Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
3245c3c9db83Smrg#define XFREE(stale) do { \
3246c3c9db83Smrg  if (stale) { free ((void *) stale); stale = 0; } \
3247c3c9db83Smrg} while (0)
3248692f60a7Smrg
3249c3c9db83Smrg#undef LTWRAPPER_DEBUGPRINTF
3250c3c9db83Smrg#if defined DEBUGWRAPPER
3251c3c9db83Smrg# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
3252c3c9db83Smrgstatic void
3253c3c9db83Smrgltwrapper_debugprintf (const char *fmt, ...)
3254c3c9db83Smrg{
3255c3c9db83Smrg    va_list args;
3256c3c9db83Smrg    va_start (args, fmt);
3257c3c9db83Smrg    (void) vfprintf (stderr, fmt, args);
3258c3c9db83Smrg    va_end (args);
3259c3c9db83Smrg}
3260c3c9db83Smrg#else
3261c3c9db83Smrg# define LTWRAPPER_DEBUGPRINTF(args)
3262c3c9db83Smrg#endif
3263692f60a7Smrg
3264c3c9db83Smrgconst char *program_name = NULL;
3265692f60a7Smrg
3266c3c9db83Smrgvoid *xmalloc (size_t num);
3267c3c9db83Smrgchar *xstrdup (const char *string);
3268c3c9db83Smrgconst char *base_name (const char *name);
3269c3c9db83Smrgchar *find_executable (const char *wrapper);
3270c3c9db83Smrgchar *chase_symlinks (const char *pathspec);
3271c3c9db83Smrgint make_executable (const char *path);
3272c3c9db83Smrgint check_executable (const char *path);
3273c3c9db83Smrgchar *strendzap (char *str, const char *pat);
3274c3c9db83Smrgvoid lt_fatal (const char *message, ...);
3275c3c9db83Smrgvoid lt_setenv (const char *name, const char *value);
3276c3c9db83Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
3277c3c9db83Smrgvoid lt_opt_process_env_set (const char *arg);
3278c3c9db83Smrgvoid lt_opt_process_env_prepend (const char *arg);
3279c3c9db83Smrgvoid lt_opt_process_env_append (const char *arg);
3280c3c9db83Smrgint lt_split_name_value (const char *arg, char** name, char** value);
3281c3c9db83Smrgvoid lt_update_exe_path (const char *name, const char *value);
3282c3c9db83Smrgvoid lt_update_lib_path (const char *name, const char *value);
3283c3c9db83Smrg
3284c3c9db83Smrgstatic const char *script_text_part1 =
3285c3c9db83SmrgEOF
3286692f60a7Smrg
3287c3c9db83Smrg	    func_emit_wrapper_part1 yes |
3288c3c9db83Smrg	        $SED -e 's/\([\\"]\)/\\\1/g' \
3289c3c9db83Smrg	             -e 's/^/  "/' -e 's/$/\\n"/'
3290c3c9db83Smrg	    echo ";"
3291c3c9db83Smrg	    cat <<EOF
3292692f60a7Smrg
3293c3c9db83Smrgstatic const char *script_text_part2 =
3294c3c9db83SmrgEOF
3295c3c9db83Smrg	    func_emit_wrapper_part2 yes |
3296c3c9db83Smrg	        $SED -e 's/\([\\"]\)/\\\1/g' \
3297c3c9db83Smrg	             -e 's/^/  "/' -e 's/$/\\n"/'
3298c3c9db83Smrg	    echo ";"
3299c3c9db83Smrg
3300c3c9db83Smrg	    cat <<EOF
3301c3c9db83Smrgconst char * MAGIC_EXE = "$magic_exe";
3302c3c9db83Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
3303c3c9db83SmrgEOF
3304692f60a7Smrg
3305c3c9db83Smrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
3306c3c9db83Smrg              func_to_host_pathlist "$temp_rpath"
3307c3c9db83Smrg	      cat <<EOF
3308c3c9db83Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
3309c3c9db83SmrgEOF
3310c3c9db83Smrg	    else
3311c3c9db83Smrg	      cat <<"EOF"
3312c3c9db83Smrgconst char * LIB_PATH_VALUE   = "";
3313c3c9db83SmrgEOF
33142e71ea71Smrg	    fi
3315692f60a7Smrg
3316c3c9db83Smrg	    if test -n "$dllsearchpath"; then
3317c3c9db83Smrg              func_to_host_pathlist "$dllsearchpath:"
3318c3c9db83Smrg	      cat <<EOF
3319c3c9db83Smrgconst char * EXE_PATH_VARNAME = "PATH";
3320c3c9db83Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
33212e71ea71SmrgEOF
33222e71ea71Smrg	    else
3323c3c9db83Smrg	      cat <<"EOF"
3324c3c9db83Smrgconst char * EXE_PATH_VARNAME = "";
3325c3c9db83Smrgconst char * EXE_PATH_VALUE   = "";
3326c3c9db83SmrgEOF
33272e71ea71Smrg	    fi
3328c3c9db83Smrg
3329c3c9db83Smrg	    if test "$fast_install" = yes; then
3330c3c9db83Smrg	      cat <<EOF
3331c3c9db83Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
3332c3c9db83SmrgEOF
33332e71ea71Smrg	    else
3334c3c9db83Smrg	      cat <<EOF
3335c3c9db83Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
3336c3c9db83SmrgEOF
33372e71ea71Smrg	    fi
3338692f60a7Smrg
3339692f60a7Smrg
3340c3c9db83Smrg	    cat <<"EOF"
3341692f60a7Smrg
3342c3c9db83Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
3343c3c9db83Smrg#define LTWRAPPER_OPTION_PREFIX_LENGTH  5
3344692f60a7Smrg
3345c3c9db83Smrgstatic const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
3346c3c9db83Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
3347692f60a7Smrg
3348c3c9db83Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
3349692f60a7Smrg
3350c3c9db83Smrgstatic const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
3351c3c9db83Smrgstatic const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
3352c3c9db83Smrg  /* argument is putenv-style "foo=bar", value of foo is set to bar */
3353692f60a7Smrg
3354c3c9db83Smrgstatic const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
3355c3c9db83Smrgstatic const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
3356c3c9db83Smrg  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
3357692f60a7Smrg
3358c3c9db83Smrgstatic const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
3359c3c9db83Smrgstatic const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
3360c3c9db83Smrg  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
3361692f60a7Smrg
3362c3c9db83Smrgint
3363c3c9db83Smrgmain (int argc, char *argv[])
3364c3c9db83Smrg{
3365c3c9db83Smrg  char **newargz;
3366c3c9db83Smrg  int  newargc;
3367c3c9db83Smrg  char *tmp_pathspec;
3368c3c9db83Smrg  char *actual_cwrapper_path;
3369c3c9db83Smrg  char *actual_cwrapper_name;
3370c3c9db83Smrg  char *target_name;
3371c3c9db83Smrg  char *lt_argv_zero;
3372c3c9db83Smrg  intptr_t rval = 127;
3373692f60a7Smrg
3374c3c9db83Smrg  int i;
3375692f60a7Smrg
3376c3c9db83Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
3377c3c9db83Smrg  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
3378c3c9db83Smrg  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
3379692f60a7Smrg
3380c3c9db83Smrg  /* very simple arg parsing; don't want to rely on getopt */
3381c3c9db83Smrg  for (i = 1; i < argc; i++)
3382c3c9db83Smrg    {
3383c3c9db83Smrg      if (strcmp (argv[i], dumpscript_opt) == 0)
3384c3c9db83Smrg	{
3385c3c9db83SmrgEOF
3386c3c9db83Smrg	    case "$host" in
3387c3c9db83Smrg	      *mingw* | *cygwin* )
3388c3c9db83Smrg		# make stdout use "unix" line endings
3389c3c9db83Smrg		echo "          setmode(1,_O_BINARY);"
3390c3c9db83Smrg		;;
3391c3c9db83Smrg	      esac
3392692f60a7Smrg
3393c3c9db83Smrg	    cat <<"EOF"
3394c3c9db83Smrg	  printf ("%s", script_text_part1);
3395c3c9db83Smrg	  printf ("%s", script_text_part2);
3396c3c9db83Smrg	  return 0;
3397c3c9db83Smrg	}
3398c3c9db83Smrg    }
3399692f60a7Smrg
3400c3c9db83Smrg  newargz = XMALLOC (char *, argc + 1);
3401c3c9db83Smrg  tmp_pathspec = find_executable (argv[0]);
3402c3c9db83Smrg  if (tmp_pathspec == NULL)
3403c3c9db83Smrg    lt_fatal ("Couldn't find %s", argv[0]);
3404c3c9db83Smrg  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
3405c3c9db83Smrg			  tmp_pathspec));
3406c3c9db83Smrg
3407c3c9db83Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
3408c3c9db83Smrg  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
3409c3c9db83Smrg			  actual_cwrapper_path));
3410c3c9db83Smrg  XFREE (tmp_pathspec);
3411c3c9db83Smrg
3412c3c9db83Smrg  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
3413c3c9db83Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
3414c3c9db83Smrg
3415c3c9db83Smrg  /* wrapper name transforms */
3416c3c9db83Smrg  strendzap (actual_cwrapper_name, ".exe");
3417c3c9db83Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
3418c3c9db83Smrg  XFREE (actual_cwrapper_name);
3419c3c9db83Smrg  actual_cwrapper_name = tmp_pathspec;
3420c3c9db83Smrg  tmp_pathspec = 0;
3421c3c9db83Smrg
3422c3c9db83Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
3423c3c9db83Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
3424c3c9db83Smrg  strendzap (target_name, ".exe");
3425c3c9db83Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
3426c3c9db83Smrg  XFREE (target_name);
3427c3c9db83Smrg  target_name = tmp_pathspec;
3428c3c9db83Smrg  tmp_pathspec = 0;
3429c3c9db83Smrg
3430c3c9db83Smrg  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
3431c3c9db83Smrg			  target_name));
3432c3c9db83SmrgEOF
3433692f60a7Smrg
3434c3c9db83Smrg	    cat <<EOF
3435c3c9db83Smrg  newargz[0] =
3436c3c9db83Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
3437c3c9db83Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
3438c3c9db83Smrg  strcpy (newargz[0], actual_cwrapper_path);
3439c3c9db83Smrg  strcat (newargz[0], "$objdir");
3440c3c9db83Smrg  strcat (newargz[0], "/");
3441c3c9db83SmrgEOF
3442692f60a7Smrg
3443c3c9db83Smrg	    cat <<"EOF"
3444c3c9db83Smrg  /* stop here, and copy so we don't have to do this twice */
3445c3c9db83Smrg  tmp_pathspec = xstrdup (newargz[0]);
3446692f60a7Smrg
3447c3c9db83Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
3448c3c9db83Smrg  strcat (newargz[0], actual_cwrapper_name);
3449692f60a7Smrg
3450c3c9db83Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
3451c3c9db83Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
3452c3c9db83Smrg  XFREE (tmp_pathspec);
3453c3c9db83Smrg  tmp_pathspec = NULL;
3454c3c9db83SmrgEOF
3455692f60a7Smrg
3456c3c9db83Smrg	    case $host_os in
3457c3c9db83Smrg	      mingw*)
3458c3c9db83Smrg	    cat <<"EOF"
3459c3c9db83Smrg  {
3460c3c9db83Smrg    char* p;
3461c3c9db83Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
3462c3c9db83Smrg      {
3463c3c9db83Smrg	*p = '/';
3464c3c9db83Smrg      }
3465c3c9db83Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
3466c3c9db83Smrg      {
3467c3c9db83Smrg	*p = '/';
3468c3c9db83Smrg      }
3469c3c9db83Smrg  }
3470c3c9db83SmrgEOF
3471c3c9db83Smrg	    ;;
3472c3c9db83Smrg	    esac
3473692f60a7Smrg
3474c3c9db83Smrg	    cat <<"EOF"
3475c3c9db83Smrg  XFREE (target_name);
3476c3c9db83Smrg  XFREE (actual_cwrapper_path);
3477c3c9db83Smrg  XFREE (actual_cwrapper_name);
3478692f60a7Smrg
3479c3c9db83Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
3480c3c9db83Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
3481c3c9db83Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
3482c3c9db83Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
3483692f60a7Smrg
3484c3c9db83Smrg  newargc=0;
3485c3c9db83Smrg  for (i = 1; i < argc; i++)
3486c3c9db83Smrg    {
3487c3c9db83Smrg      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
3488c3c9db83Smrg        {
3489c3c9db83Smrg          if (argv[i][env_set_opt_len] == '=')
3490c3c9db83Smrg            {
3491c3c9db83Smrg              const char *p = argv[i] + env_set_opt_len + 1;
3492c3c9db83Smrg              lt_opt_process_env_set (p);
3493c3c9db83Smrg            }
3494c3c9db83Smrg          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
3495c3c9db83Smrg            {
3496c3c9db83Smrg              lt_opt_process_env_set (argv[++i]); /* don't copy */
3497c3c9db83Smrg            }
3498c3c9db83Smrg          else
3499c3c9db83Smrg            lt_fatal ("%s missing required argument", env_set_opt);
3500c3c9db83Smrg          continue;
3501c3c9db83Smrg        }
3502c3c9db83Smrg      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
3503c3c9db83Smrg        {
3504c3c9db83Smrg          if (argv[i][env_prepend_opt_len] == '=')
3505c3c9db83Smrg            {
3506c3c9db83Smrg              const char *p = argv[i] + env_prepend_opt_len + 1;
3507c3c9db83Smrg              lt_opt_process_env_prepend (p);
3508c3c9db83Smrg            }
3509c3c9db83Smrg          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
3510c3c9db83Smrg            {
3511c3c9db83Smrg              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
3512c3c9db83Smrg            }
3513c3c9db83Smrg          else
3514c3c9db83Smrg            lt_fatal ("%s missing required argument", env_prepend_opt);
3515c3c9db83Smrg          continue;
3516c3c9db83Smrg        }
3517c3c9db83Smrg      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
3518c3c9db83Smrg        {
3519c3c9db83Smrg          if (argv[i][env_append_opt_len] == '=')
3520c3c9db83Smrg            {
3521c3c9db83Smrg              const char *p = argv[i] + env_append_opt_len + 1;
3522c3c9db83Smrg              lt_opt_process_env_append (p);
3523c3c9db83Smrg            }
3524c3c9db83Smrg          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
3525c3c9db83Smrg            {
3526c3c9db83Smrg              lt_opt_process_env_append (argv[++i]); /* don't copy */
3527c3c9db83Smrg            }
3528c3c9db83Smrg          else
3529c3c9db83Smrg            lt_fatal ("%s missing required argument", env_append_opt);
3530c3c9db83Smrg          continue;
3531c3c9db83Smrg        }
3532c3c9db83Smrg      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
3533c3c9db83Smrg        {
3534c3c9db83Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
3535c3c9db83Smrg             namespace, but it is not one of the ones we know about and
3536c3c9db83Smrg             have already dealt with, above (inluding dump-script), then
3537c3c9db83Smrg             report an error. Otherwise, targets might begin to believe
3538c3c9db83Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
3539c3c9db83Smrg             namespace. The first time any user complains about this, we'll
3540c3c9db83Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
3541c3c9db83Smrg             or a configure.ac-settable value.
3542c3c9db83Smrg           */
3543c3c9db83Smrg          lt_fatal ("Unrecognized option in %s namespace: '%s'",
3544c3c9db83Smrg                    ltwrapper_option_prefix, argv[i]);
3545c3c9db83Smrg        }
3546c3c9db83Smrg      /* otherwise ... */
3547c3c9db83Smrg      newargz[++newargc] = xstrdup (argv[i]);
3548c3c9db83Smrg    }
3549c3c9db83Smrg  newargz[++newargc] = NULL;
3550692f60a7Smrg
3551c3c9db83Smrg  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
3552c3c9db83Smrg  for (i = 0; i < newargc; i++)
3553c3c9db83Smrg    {
3554c3c9db83Smrg      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
3555c3c9db83Smrg    }
3556692f60a7Smrg
3557c3c9db83SmrgEOF
3558692f60a7Smrg
3559c3c9db83Smrg	    case $host_os in
3560c3c9db83Smrg	      mingw*)
3561c3c9db83Smrg		cat <<"EOF"
3562c3c9db83Smrg  /* execv doesn't actually work on mingw as expected on unix */
3563c3c9db83Smrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
3564c3c9db83Smrg  if (rval == -1)
3565c3c9db83Smrg    {
3566c3c9db83Smrg      /* failed to start process */
3567c3c9db83Smrg      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
3568c3c9db83Smrg      return 127;
3569c3c9db83Smrg    }
3570c3c9db83Smrg  return rval;
3571c3c9db83SmrgEOF
3572c3c9db83Smrg		;;
3573c3c9db83Smrg	      *)
3574c3c9db83Smrg		cat <<"EOF"
3575c3c9db83Smrg  execv (lt_argv_zero, newargz);
3576c3c9db83Smrg  return rval; /* =127, but avoids unused variable warning */
3577c3c9db83SmrgEOF
3578c3c9db83Smrg		;;
3579c3c9db83Smrg	    esac
3580692f60a7Smrg
3581c3c9db83Smrg	    cat <<"EOF"
3582c3c9db83Smrg}
3583692f60a7Smrg
3584c3c9db83Smrgvoid *
3585c3c9db83Smrgxmalloc (size_t num)
3586c3c9db83Smrg{
3587c3c9db83Smrg  void *p = (void *) malloc (num);
3588c3c9db83Smrg  if (!p)
3589c3c9db83Smrg    lt_fatal ("Memory exhausted");
3590692f60a7Smrg
3591c3c9db83Smrg  return p;
3592c3c9db83Smrg}
3593692f60a7Smrg
3594c3c9db83Smrgchar *
3595c3c9db83Smrgxstrdup (const char *string)
3596c3c9db83Smrg{
3597c3c9db83Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
3598c3c9db83Smrg			  string) : NULL;
3599c3c9db83Smrg}
3600692f60a7Smrg
3601c3c9db83Smrgconst char *
3602c3c9db83Smrgbase_name (const char *name)
3603c3c9db83Smrg{
3604c3c9db83Smrg  const char *base;
36052e71ea71Smrg
3606c3c9db83Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
3607c3c9db83Smrg  /* Skip over the disk name in MSDOS pathnames. */
3608c3c9db83Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
3609c3c9db83Smrg    name += 2;
3610c3c9db83Smrg#endif
36112e71ea71Smrg
3612c3c9db83Smrg  for (base = name; *name; name++)
3613c3c9db83Smrg    if (IS_DIR_SEPARATOR (*name))
3614c3c9db83Smrg      base = name + 1;
3615c3c9db83Smrg  return base;
3616c3c9db83Smrg}
36172e71ea71Smrg
3618c3c9db83Smrgint
3619c3c9db83Smrgcheck_executable (const char *path)
3620c3c9db83Smrg{
3621c3c9db83Smrg  struct stat st;
36222e71ea71Smrg
3623c3c9db83Smrg  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
3624c3c9db83Smrg			  path ? (*path ? path : "EMPTY!") : "NULL!"));
3625c3c9db83Smrg  if ((!path) || (!*path))
3626c3c9db83Smrg    return 0;
36272e71ea71Smrg
3628c3c9db83Smrg  if ((stat (path, &st) >= 0)
3629c3c9db83Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
3630c3c9db83Smrg    return 1;
3631c3c9db83Smrg  else
3632c3c9db83Smrg    return 0;
3633c3c9db83Smrg}
3634692f60a7Smrg
3635c3c9db83Smrgint
3636c3c9db83Smrgmake_executable (const char *path)
3637c3c9db83Smrg{
3638c3c9db83Smrg  int rval = 0;
3639c3c9db83Smrg  struct stat st;
3640692f60a7Smrg
3641c3c9db83Smrg  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
3642c3c9db83Smrg			  path ? (*path ? path : "EMPTY!") : "NULL!"));
3643c3c9db83Smrg  if ((!path) || (!*path))
3644c3c9db83Smrg    return 0;
364585ee4c00Smrg
3646c3c9db83Smrg  if (stat (path, &st) >= 0)
3647c3c9db83Smrg    {
3648c3c9db83Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
3649c3c9db83Smrg    }
3650c3c9db83Smrg  return rval;
3651c3c9db83Smrg}
36522e71ea71Smrg
3653c3c9db83Smrg/* Searches for the full path of the wrapper.  Returns
3654c3c9db83Smrg   newly allocated full path name if found, NULL otherwise
3655c3c9db83Smrg   Does not chase symlinks, even on platforms that support them.
3656c3c9db83Smrg*/
3657c3c9db83Smrgchar *
3658c3c9db83Smrgfind_executable (const char *wrapper)
3659c3c9db83Smrg{
3660c3c9db83Smrg  int has_slash = 0;
3661c3c9db83Smrg  const char *p;
3662c3c9db83Smrg  const char *p_next;
3663c3c9db83Smrg  /* static buffer for getcwd */
3664c3c9db83Smrg  char tmp[LT_PATHMAX + 1];
3665c3c9db83Smrg  int tmp_len;
3666c3c9db83Smrg  char *concat_name;
36672e71ea71Smrg
3668c3c9db83Smrg  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
3669c3c9db83Smrg			  wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
36702e71ea71Smrg
3671c3c9db83Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
3672c3c9db83Smrg    return NULL;
36732e71ea71Smrg
3674c3c9db83Smrg  /* Absolute path? */
3675c3c9db83Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
3676c3c9db83Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
3677c3c9db83Smrg    {
3678c3c9db83Smrg      concat_name = xstrdup (wrapper);
3679c3c9db83Smrg      if (check_executable (concat_name))
3680c3c9db83Smrg	return concat_name;
3681c3c9db83Smrg      XFREE (concat_name);
3682c3c9db83Smrg    }
3683c3c9db83Smrg  else
3684c3c9db83Smrg    {
3685c3c9db83Smrg#endif
3686c3c9db83Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
3687c3c9db83Smrg	{
3688c3c9db83Smrg	  concat_name = xstrdup (wrapper);
3689c3c9db83Smrg	  if (check_executable (concat_name))
3690c3c9db83Smrg	    return concat_name;
3691c3c9db83Smrg	  XFREE (concat_name);
3692c3c9db83Smrg	}
3693c3c9db83Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
3694c3c9db83Smrg    }
3695c3c9db83Smrg#endif
3696692f60a7Smrg
3697c3c9db83Smrg  for (p = wrapper; *p; p++)
3698c3c9db83Smrg    if (*p == '/')
3699c3c9db83Smrg      {
3700c3c9db83Smrg	has_slash = 1;
3701c3c9db83Smrg	break;
3702c3c9db83Smrg      }
3703c3c9db83Smrg  if (!has_slash)
3704c3c9db83Smrg    {
3705c3c9db83Smrg      /* no slashes; search PATH */
3706c3c9db83Smrg      const char *path = getenv ("PATH");
3707c3c9db83Smrg      if (path != NULL)
3708c3c9db83Smrg	{
3709c3c9db83Smrg	  for (p = path; *p; p = p_next)
3710c3c9db83Smrg	    {
3711c3c9db83Smrg	      const char *q;
3712c3c9db83Smrg	      size_t p_len;
3713c3c9db83Smrg	      for (q = p; *q; q++)
3714c3c9db83Smrg		if (IS_PATH_SEPARATOR (*q))
3715c3c9db83Smrg		  break;
3716c3c9db83Smrg	      p_len = q - p;
3717c3c9db83Smrg	      p_next = (*q == '\0' ? q : q + 1);
3718c3c9db83Smrg	      if (p_len == 0)
3719c3c9db83Smrg		{
3720c3c9db83Smrg		  /* empty path: current directory */
3721c3c9db83Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
3722c3c9db83Smrg		    lt_fatal ("getcwd failed");
3723c3c9db83Smrg		  tmp_len = strlen (tmp);
3724c3c9db83Smrg		  concat_name =
3725c3c9db83Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
3726c3c9db83Smrg		  memcpy (concat_name, tmp, tmp_len);
3727c3c9db83Smrg		  concat_name[tmp_len] = '/';
3728c3c9db83Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
3729c3c9db83Smrg		}
3730c3c9db83Smrg	      else
3731c3c9db83Smrg		{
3732c3c9db83Smrg		  concat_name =
3733c3c9db83Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
3734c3c9db83Smrg		  memcpy (concat_name, p, p_len);
3735c3c9db83Smrg		  concat_name[p_len] = '/';
3736c3c9db83Smrg		  strcpy (concat_name + p_len + 1, wrapper);
3737c3c9db83Smrg		}
3738c3c9db83Smrg	      if (check_executable (concat_name))
3739c3c9db83Smrg		return concat_name;
3740c3c9db83Smrg	      XFREE (concat_name);
3741c3c9db83Smrg	    }
3742c3c9db83Smrg	}
3743c3c9db83Smrg      /* not found in PATH; assume curdir */
3744c3c9db83Smrg    }
3745c3c9db83Smrg  /* Relative path | not found in path: prepend cwd */
3746c3c9db83Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
3747c3c9db83Smrg    lt_fatal ("getcwd failed");
3748c3c9db83Smrg  tmp_len = strlen (tmp);
3749c3c9db83Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
3750c3c9db83Smrg  memcpy (concat_name, tmp, tmp_len);
3751c3c9db83Smrg  concat_name[tmp_len] = '/';
3752c3c9db83Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
3753692f60a7Smrg
3754c3c9db83Smrg  if (check_executable (concat_name))
3755c3c9db83Smrg    return concat_name;
3756c3c9db83Smrg  XFREE (concat_name);
3757c3c9db83Smrg  return NULL;
3758c3c9db83Smrg}
3759692f60a7Smrg
3760c3c9db83Smrgchar *
3761c3c9db83Smrgchase_symlinks (const char *pathspec)
3762c3c9db83Smrg{
3763c3c9db83Smrg#ifndef S_ISLNK
3764c3c9db83Smrg  return xstrdup (pathspec);
3765c3c9db83Smrg#else
3766c3c9db83Smrg  char buf[LT_PATHMAX];
3767c3c9db83Smrg  struct stat s;
3768c3c9db83Smrg  char *tmp_pathspec = xstrdup (pathspec);
3769c3c9db83Smrg  char *p;
3770c3c9db83Smrg  int has_symlinks = 0;
3771c3c9db83Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
3772c3c9db83Smrg    {
3773c3c9db83Smrg      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
3774c3c9db83Smrg			      tmp_pathspec));
3775c3c9db83Smrg      if (lstat (tmp_pathspec, &s) == 0)
3776c3c9db83Smrg	{
3777c3c9db83Smrg	  if (S_ISLNK (s.st_mode) != 0)
3778c3c9db83Smrg	    {
3779c3c9db83Smrg	      has_symlinks = 1;
3780c3c9db83Smrg	      break;
3781c3c9db83Smrg	    }
3782692f60a7Smrg
3783c3c9db83Smrg	  /* search backwards for last DIR_SEPARATOR */
3784c3c9db83Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
3785c3c9db83Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
3786c3c9db83Smrg	    p--;
3787c3c9db83Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
3788c3c9db83Smrg	    {
3789c3c9db83Smrg	      /* no more DIR_SEPARATORS left */
3790c3c9db83Smrg	      break;
3791c3c9db83Smrg	    }
3792c3c9db83Smrg	  *p = '\0';
3793c3c9db83Smrg	}
3794c3c9db83Smrg      else
3795c3c9db83Smrg	{
3796c3c9db83Smrg	  char *errstr = strerror (errno);
3797c3c9db83Smrg	  lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
3798c3c9db83Smrg	}
3799c3c9db83Smrg    }
3800c3c9db83Smrg  XFREE (tmp_pathspec);
3801692f60a7Smrg
3802c3c9db83Smrg  if (!has_symlinks)
3803c3c9db83Smrg    {
3804c3c9db83Smrg      return xstrdup (pathspec);
3805c3c9db83Smrg    }
3806692f60a7Smrg
3807c3c9db83Smrg  tmp_pathspec = realpath (pathspec, buf);
3808c3c9db83Smrg  if (tmp_pathspec == 0)
3809c3c9db83Smrg    {
3810c3c9db83Smrg      lt_fatal ("Could not follow symlinks for %s", pathspec);
3811c3c9db83Smrg    }
3812c3c9db83Smrg  return xstrdup (tmp_pathspec);
3813c3c9db83Smrg#endif
3814c3c9db83Smrg}
3815692f60a7Smrg
3816c3c9db83Smrgchar *
3817c3c9db83Smrgstrendzap (char *str, const char *pat)
3818c3c9db83Smrg{
3819c3c9db83Smrg  size_t len, patlen;
3820692f60a7Smrg
3821c3c9db83Smrg  assert (str != NULL);
3822c3c9db83Smrg  assert (pat != NULL);
3823692f60a7Smrg
3824c3c9db83Smrg  len = strlen (str);
3825c3c9db83Smrg  patlen = strlen (pat);
3826692f60a7Smrg
3827c3c9db83Smrg  if (patlen <= len)
3828c3c9db83Smrg    {
3829c3c9db83Smrg      str += len - patlen;
3830c3c9db83Smrg      if (strcmp (str, pat) == 0)
3831c3c9db83Smrg	*str = '\0';
3832c3c9db83Smrg    }
3833c3c9db83Smrg  return str;
3834c3c9db83Smrg}
3835692f60a7Smrg
3836c3c9db83Smrgstatic void
3837c3c9db83Smrglt_error_core (int exit_status, const char *mode,
3838c3c9db83Smrg	       const char *message, va_list ap)
3839c3c9db83Smrg{
3840c3c9db83Smrg  fprintf (stderr, "%s: %s: ", program_name, mode);
3841c3c9db83Smrg  vfprintf (stderr, message, ap);
3842c3c9db83Smrg  fprintf (stderr, ".\n");
3843692f60a7Smrg
3844c3c9db83Smrg  if (exit_status >= 0)
3845c3c9db83Smrg    exit (exit_status);
3846c3c9db83Smrg}
3847692f60a7Smrg
3848c3c9db83Smrgvoid
3849c3c9db83Smrglt_fatal (const char *message, ...)
3850c3c9db83Smrg{
3851c3c9db83Smrg  va_list ap;
3852c3c9db83Smrg  va_start (ap, message);
3853c3c9db83Smrg  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
3854c3c9db83Smrg  va_end (ap);
3855c3c9db83Smrg}
3856692f60a7Smrg
3857c3c9db83Smrgvoid
3858c3c9db83Smrglt_setenv (const char *name, const char *value)
3859c3c9db83Smrg{
3860c3c9db83Smrg  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
3861c3c9db83Smrg                          (name ? name : "<NULL>"),
3862c3c9db83Smrg                          (value ? value : "<NULL>")));
3863c3c9db83Smrg  {
3864c3c9db83Smrg#ifdef HAVE_SETENV
3865c3c9db83Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
3866c3c9db83Smrg    char *str = xstrdup (value);
3867c3c9db83Smrg    setenv (name, str, 1);
3868c3c9db83Smrg#else
3869c3c9db83Smrg    int len = strlen (name) + 1 + strlen (value) + 1;
3870c3c9db83Smrg    char *str = XMALLOC (char, len);
3871c3c9db83Smrg    sprintf (str, "%s=%s", name, value);
3872c3c9db83Smrg    if (putenv (str) != EXIT_SUCCESS)
3873c3c9db83Smrg      {
3874c3c9db83Smrg        XFREE (str);
3875c3c9db83Smrg      }
3876c3c9db83Smrg#endif
3877c3c9db83Smrg  }
3878c3c9db83Smrg}
3879692f60a7Smrg
3880c3c9db83Smrgchar *
3881c3c9db83Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
3882c3c9db83Smrg{
3883c3c9db83Smrg  char *new_value;
3884c3c9db83Smrg  if (orig_value && *orig_value)
3885c3c9db83Smrg    {
3886c3c9db83Smrg      int orig_value_len = strlen (orig_value);
3887c3c9db83Smrg      int add_len = strlen (add);
3888c3c9db83Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
3889c3c9db83Smrg      if (to_end)
3890c3c9db83Smrg        {
3891c3c9db83Smrg          strcpy (new_value, orig_value);
3892c3c9db83Smrg          strcpy (new_value + orig_value_len, add);
3893c3c9db83Smrg        }
3894c3c9db83Smrg      else
3895c3c9db83Smrg        {
3896c3c9db83Smrg          strcpy (new_value, add);
3897c3c9db83Smrg          strcpy (new_value + add_len, orig_value);
3898c3c9db83Smrg        }
3899c3c9db83Smrg    }
3900c3c9db83Smrg  else
3901c3c9db83Smrg    {
3902c3c9db83Smrg      new_value = xstrdup (add);
3903c3c9db83Smrg    }
3904c3c9db83Smrg  return new_value;
3905c3c9db83Smrg}
3906692f60a7Smrg
3907c3c9db83Smrgint
3908c3c9db83Smrglt_split_name_value (const char *arg, char** name, char** value)
3909c3c9db83Smrg{
3910c3c9db83Smrg  const char *p;
3911c3c9db83Smrg  int len;
3912c3c9db83Smrg  if (!arg || !*arg)
3913c3c9db83Smrg    return 1;
3914692f60a7Smrg
3915c3c9db83Smrg  p = strchr (arg, (int)'=');
3916692f60a7Smrg
3917c3c9db83Smrg  if (!p)
3918c3c9db83Smrg    return 1;
3919692f60a7Smrg
3920c3c9db83Smrg  *value = xstrdup (++p);
3921692f60a7Smrg
3922c3c9db83Smrg  len = strlen (arg) - strlen (*value);
3923c3c9db83Smrg  *name = XMALLOC (char, len);
3924c3c9db83Smrg  strncpy (*name, arg, len-1);
3925c3c9db83Smrg  (*name)[len - 1] = '\0';
3926692f60a7Smrg
3927c3c9db83Smrg  return 0;
3928c3c9db83Smrg}
3929692f60a7Smrg
3930c3c9db83Smrgvoid
3931c3c9db83Smrglt_opt_process_env_set (const char *arg)
3932c3c9db83Smrg{
3933c3c9db83Smrg  char *name = NULL;
3934c3c9db83Smrg  char *value = NULL;
3935692f60a7Smrg
3936c3c9db83Smrg  if (lt_split_name_value (arg, &name, &value) != 0)
3937c3c9db83Smrg    {
3938c3c9db83Smrg      XFREE (name);
3939c3c9db83Smrg      XFREE (value);
3940c3c9db83Smrg      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
3941c3c9db83Smrg    }
3942692f60a7Smrg
3943c3c9db83Smrg  lt_setenv (name, value);
3944c3c9db83Smrg  XFREE (name);
3945c3c9db83Smrg  XFREE (value);
3946c3c9db83Smrg}
3947692f60a7Smrg
3948c3c9db83Smrgvoid
3949c3c9db83Smrglt_opt_process_env_prepend (const char *arg)
3950c3c9db83Smrg{
3951c3c9db83Smrg  char *name = NULL;
3952c3c9db83Smrg  char *value = NULL;
3953c3c9db83Smrg  char *new_value = NULL;
3954692f60a7Smrg
3955c3c9db83Smrg  if (lt_split_name_value (arg, &name, &value) != 0)
3956c3c9db83Smrg    {
3957c3c9db83Smrg      XFREE (name);
3958c3c9db83Smrg      XFREE (value);
3959c3c9db83Smrg      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
3960c3c9db83Smrg    }
3961692f60a7Smrg
3962c3c9db83Smrg  new_value = lt_extend_str (getenv (name), value, 0);
3963c3c9db83Smrg  lt_setenv (name, new_value);
3964c3c9db83Smrg  XFREE (new_value);
3965c3c9db83Smrg  XFREE (name);
3966c3c9db83Smrg  XFREE (value);
3967c3c9db83Smrg}
3968692f60a7Smrg
3969c3c9db83Smrgvoid
3970c3c9db83Smrglt_opt_process_env_append (const char *arg)
3971c3c9db83Smrg{
3972c3c9db83Smrg  char *name = NULL;
3973c3c9db83Smrg  char *value = NULL;
3974c3c9db83Smrg  char *new_value = NULL;
3975692f60a7Smrg
3976c3c9db83Smrg  if (lt_split_name_value (arg, &name, &value) != 0)
3977c3c9db83Smrg    {
3978c3c9db83Smrg      XFREE (name);
3979c3c9db83Smrg      XFREE (value);
3980c3c9db83Smrg      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
3981c3c9db83Smrg    }
3982692f60a7Smrg
3983c3c9db83Smrg  new_value = lt_extend_str (getenv (name), value, 1);
3984c3c9db83Smrg  lt_setenv (name, new_value);
3985c3c9db83Smrg  XFREE (new_value);
3986c3c9db83Smrg  XFREE (name);
3987c3c9db83Smrg  XFREE (value);
3988c3c9db83Smrg}
3989692f60a7Smrg
3990c3c9db83Smrgvoid
3991c3c9db83Smrglt_update_exe_path (const char *name, const char *value)
3992c3c9db83Smrg{
3993c3c9db83Smrg  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
3994c3c9db83Smrg                          (name ? name : "<NULL>"),
3995c3c9db83Smrg                          (value ? value : "<NULL>")));
3996692f60a7Smrg
3997c3c9db83Smrg  if (name && *name && value && *value)
3998c3c9db83Smrg    {
3999c3c9db83Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4000c3c9db83Smrg      /* some systems can't cope with a ':'-terminated path #' */
4001c3c9db83Smrg      int len = strlen (new_value);
4002c3c9db83Smrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
4003c3c9db83Smrg        {
4004c3c9db83Smrg          new_value[len-1] = '\0';
4005c3c9db83Smrg        }
4006c3c9db83Smrg      lt_setenv (name, new_value);
4007c3c9db83Smrg      XFREE (new_value);
4008c3c9db83Smrg    }
4009c3c9db83Smrg}
4010692f60a7Smrg
4011c3c9db83Smrgvoid
4012c3c9db83Smrglt_update_lib_path (const char *name, const char *value)
4013c3c9db83Smrg{
4014c3c9db83Smrg  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
4015c3c9db83Smrg                          (name ? name : "<NULL>"),
4016c3c9db83Smrg                          (value ? value : "<NULL>")));
4017692f60a7Smrg
4018c3c9db83Smrg  if (name && *name && value && *value)
4019c3c9db83Smrg    {
4020c3c9db83Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4021c3c9db83Smrg      lt_setenv (name, new_value);
4022c3c9db83Smrg      XFREE (new_value);
4023c3c9db83Smrg    }
4024c3c9db83Smrg}
4025692f60a7Smrg
4026692f60a7Smrg
4027c3c9db83SmrgEOF
4028c3c9db83Smrg}
4029c3c9db83Smrg# end: func_emit_cwrapperexe_src
4030692f60a7Smrg
4031c3c9db83Smrg# func_mode_link arg...
4032c3c9db83Smrgfunc_mode_link ()
4033c3c9db83Smrg{
4034c3c9db83Smrg    $opt_debug
4035c3c9db83Smrg    case $host in
4036c3c9db83Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
4037c3c9db83Smrg      # It is impossible to link a dll without this setting, and
4038c3c9db83Smrg      # we shouldn't force the makefile maintainer to figure out
4039c3c9db83Smrg      # which system we are compiling for in order to pass an extra
4040c3c9db83Smrg      # flag for every libtool invocation.
4041c3c9db83Smrg      # allow_undefined=no
4042692f60a7Smrg
4043c3c9db83Smrg      # FIXME: Unfortunately, there are problems with the above when trying
4044c3c9db83Smrg      # to make a dll which has undefined symbols, in which case not
4045c3c9db83Smrg      # even a static library is built.  For now, we need to specify
4046c3c9db83Smrg      # -no-undefined on the libtool link line when we can be certain
4047c3c9db83Smrg      # that all symbols are satisfied, otherwise we get a static library.
4048c3c9db83Smrg      allow_undefined=yes
4049c3c9db83Smrg      ;;
4050c3c9db83Smrg    *)
4051c3c9db83Smrg      allow_undefined=yes
4052c3c9db83Smrg      ;;
4053c3c9db83Smrg    esac
4054c3c9db83Smrg    libtool_args=$nonopt
4055c3c9db83Smrg    base_compile="$nonopt $@"
4056c3c9db83Smrg    compile_command=$nonopt
4057c3c9db83Smrg    finalize_command=$nonopt
4058692f60a7Smrg
4059c3c9db83Smrg    compile_rpath=
4060c3c9db83Smrg    finalize_rpath=
4061c3c9db83Smrg    compile_shlibpath=
4062c3c9db83Smrg    finalize_shlibpath=
4063c3c9db83Smrg    convenience=
4064c3c9db83Smrg    old_convenience=
4065c3c9db83Smrg    deplibs=
4066c3c9db83Smrg    old_deplibs=
4067c3c9db83Smrg    compiler_flags=
4068c3c9db83Smrg    linker_flags=
4069c3c9db83Smrg    dllsearchpath=
4070c3c9db83Smrg    lib_search_path=`pwd`
4071c3c9db83Smrg    inst_prefix_dir=
4072c3c9db83Smrg    new_inherited_linker_flags=
4073692f60a7Smrg
4074c3c9db83Smrg    avoid_version=no
4075c3c9db83Smrg    dlfiles=
4076c3c9db83Smrg    dlprefiles=
4077c3c9db83Smrg    dlself=no
4078c3c9db83Smrg    export_dynamic=no
4079c3c9db83Smrg    export_symbols=
4080c3c9db83Smrg    export_symbols_regex=
4081c3c9db83Smrg    generated=
4082c3c9db83Smrg    libobjs=
4083c3c9db83Smrg    ltlibs=
4084c3c9db83Smrg    module=no
4085c3c9db83Smrg    no_install=no
4086c3c9db83Smrg    objs=
4087c3c9db83Smrg    non_pic_objects=
4088c3c9db83Smrg    precious_files_regex=
4089c3c9db83Smrg    prefer_static_libs=no
4090c3c9db83Smrg    preload=no
4091c3c9db83Smrg    prev=
4092c3c9db83Smrg    prevarg=
4093c3c9db83Smrg    release=
4094c3c9db83Smrg    rpath=
4095c3c9db83Smrg    xrpath=
4096c3c9db83Smrg    perm_rpath=
4097c3c9db83Smrg    temp_rpath=
4098c3c9db83Smrg    thread_safe=no
4099c3c9db83Smrg    vinfo=
4100c3c9db83Smrg    vinfo_number=no
4101c3c9db83Smrg    weak_libs=
4102c3c9db83Smrg    single_module="${wl}-single_module"
4103c3c9db83Smrg    func_infer_tag $base_compile
4104c3c9db83Smrg
4105c3c9db83Smrg    # We need to know -static, to get the right output filenames.
4106c3c9db83Smrg    for arg
4107c3c9db83Smrg    do
4108c3c9db83Smrg      case $arg in
4109c3c9db83Smrg      -shared)
4110c3c9db83Smrg	test "$build_libtool_libs" != yes && \
4111c3c9db83Smrg	  func_fatal_configuration "can not build a shared library"
4112c3c9db83Smrg	build_old_libs=no
4113c3c9db83Smrg	break
4114c3c9db83Smrg	;;
4115c3c9db83Smrg      -all-static | -static | -static-libtool-libs)
4116c3c9db83Smrg	case $arg in
4117c3c9db83Smrg	-all-static)
4118c3c9db83Smrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
4119c3c9db83Smrg	    func_warning "complete static linking is impossible in this configuration"
4120c3c9db83Smrg	  fi
4121c3c9db83Smrg	  if test -n "$link_static_flag"; then
4122c3c9db83Smrg	    dlopen_self=$dlopen_self_static
4123c3c9db83Smrg	  fi
4124c3c9db83Smrg	  prefer_static_libs=yes
4125c3c9db83Smrg	  ;;
4126c3c9db83Smrg	-static)
4127c3c9db83Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
4128c3c9db83Smrg	    dlopen_self=$dlopen_self_static
4129c3c9db83Smrg	  fi
4130c3c9db83Smrg	  prefer_static_libs=built
4131c3c9db83Smrg	  ;;
4132c3c9db83Smrg	-static-libtool-libs)
4133c3c9db83Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
4134c3c9db83Smrg	    dlopen_self=$dlopen_self_static
41352e71ea71Smrg	  fi
4136c3c9db83Smrg	  prefer_static_libs=yes
4137c3c9db83Smrg	  ;;
4138c3c9db83Smrg	esac
4139c3c9db83Smrg	build_libtool_libs=no
4140c3c9db83Smrg	build_old_libs=yes
4141c3c9db83Smrg	break
4142c3c9db83Smrg	;;
4143c3c9db83Smrg      esac
4144c3c9db83Smrg    done
4145692f60a7Smrg
4146c3c9db83Smrg    # See if our shared archives depend on static archives.
4147c3c9db83Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
4148692f60a7Smrg
4149c3c9db83Smrg    # Go through the arguments, transforming them on the way.
4150c3c9db83Smrg    while test "$#" -gt 0; do
4151c3c9db83Smrg      arg="$1"
4152c3c9db83Smrg      shift
4153c3c9db83Smrg      func_quote_for_eval "$arg"
4154c3c9db83Smrg      qarg=$func_quote_for_eval_unquoted_result
4155c3c9db83Smrg      func_append libtool_args " $func_quote_for_eval_result"
4156692f60a7Smrg
4157c3c9db83Smrg      # If the previous option needs an argument, assign it.
4158c3c9db83Smrg      if test -n "$prev"; then
4159c3c9db83Smrg	case $prev in
4160c3c9db83Smrg	output)
4161c3c9db83Smrg	  func_append compile_command " @OUTPUT@"
4162c3c9db83Smrg	  func_append finalize_command " @OUTPUT@"
4163c3c9db83Smrg	  ;;
4164c3c9db83Smrg	esac
4165692f60a7Smrg
4166c3c9db83Smrg	case $prev in
4167c3c9db83Smrg	dlfiles|dlprefiles)
4168c3c9db83Smrg	  if test "$preload" = no; then
4169c3c9db83Smrg	    # Add the symbol object into the linking commands.
4170c3c9db83Smrg	    func_append compile_command " @SYMFILE@"
4171c3c9db83Smrg	    func_append finalize_command " @SYMFILE@"
4172c3c9db83Smrg	    preload=yes
4173c3c9db83Smrg	  fi
4174c3c9db83Smrg	  case $arg in
4175c3c9db83Smrg	  *.la | *.lo) ;;  # We handle these cases below.
4176c3c9db83Smrg	  force)
4177c3c9db83Smrg	    if test "$dlself" = no; then
4178c3c9db83Smrg	      dlself=needless
4179c3c9db83Smrg	      export_dynamic=yes
4180c3c9db83Smrg	    fi
4181c3c9db83Smrg	    prev=
4182c3c9db83Smrg	    continue
4183c3c9db83Smrg	    ;;
4184c3c9db83Smrg	  self)
4185c3c9db83Smrg	    if test "$prev" = dlprefiles; then
4186c3c9db83Smrg	      dlself=yes
4187c3c9db83Smrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
4188c3c9db83Smrg	      dlself=yes
41892e71ea71Smrg	    else
4190c3c9db83Smrg	      dlself=needless
4191c3c9db83Smrg	      export_dynamic=yes
41922e71ea71Smrg	    fi
4193c3c9db83Smrg	    prev=
4194c3c9db83Smrg	    continue
4195c3c9db83Smrg	    ;;
4196c3c9db83Smrg	  *)
4197c3c9db83Smrg	    if test "$prev" = dlfiles; then
4198c3c9db83Smrg	      dlfiles="$dlfiles $arg"
41992e71ea71Smrg	    else
4200c3c9db83Smrg	      dlprefiles="$dlprefiles $arg"
42012e71ea71Smrg	    fi
4202c3c9db83Smrg	    prev=
4203c3c9db83Smrg	    continue
4204c3c9db83Smrg	    ;;
4205c3c9db83Smrg	  esac
4206c3c9db83Smrg	  ;;
4207c3c9db83Smrg	expsyms)
4208c3c9db83Smrg	  export_symbols="$arg"
4209c3c9db83Smrg	  test -f "$arg" \
4210c3c9db83Smrg	    || func_fatal_error "symbol file \`$arg' does not exist"
4211c3c9db83Smrg	  prev=
4212c3c9db83Smrg	  continue
4213c3c9db83Smrg	  ;;
4214c3c9db83Smrg	expsyms_regex)
4215c3c9db83Smrg	  export_symbols_regex="$arg"
4216c3c9db83Smrg	  prev=
4217c3c9db83Smrg	  continue
4218c3c9db83Smrg	  ;;
4219c3c9db83Smrg	framework)
42202e71ea71Smrg	  case $host in
4221c3c9db83Smrg	    *-*-darwin*)
4222c3c9db83Smrg	      case "$deplibs " in
4223c3c9db83Smrg		*" $qarg.ltframework "*) ;;
4224c3c9db83Smrg		*) deplibs="$deplibs $qarg.ltframework" # this is fixed later
4225c3c9db83Smrg		   ;;
4226c3c9db83Smrg	      esac
4227c3c9db83Smrg	      ;;
42282e71ea71Smrg	  esac
4229c3c9db83Smrg	  prev=
4230c3c9db83Smrg	  continue
42312e71ea71Smrg	  ;;
4232c3c9db83Smrg	inst_prefix)
4233c3c9db83Smrg	  inst_prefix_dir="$arg"
4234c3c9db83Smrg	  prev=
4235c3c9db83Smrg	  continue
42362e71ea71Smrg	  ;;
4237c3c9db83Smrg	objectlist)
4238c3c9db83Smrg	  if test -f "$arg"; then
4239c3c9db83Smrg	    save_arg=$arg
4240c3c9db83Smrg	    moreargs=
4241c3c9db83Smrg	    for fil in `cat "$save_arg"`
4242c3c9db83Smrg	    do
4243c3c9db83Smrg#	      moreargs="$moreargs $fil"
4244c3c9db83Smrg	      arg=$fil
4245c3c9db83Smrg	      # A libtool-controlled object.
4246692f60a7Smrg
4247c3c9db83Smrg	      # Check to see that this really is a libtool object.
4248c3c9db83Smrg	      if func_lalib_unsafe_p "$arg"; then
4249c3c9db83Smrg		pic_object=
4250c3c9db83Smrg		non_pic_object=
425185ee4c00Smrg
4252c3c9db83Smrg		# Read the .lo file
4253c3c9db83Smrg		func_source "$arg"
425485ee4c00Smrg
4255c3c9db83Smrg		if test -z "$pic_object" ||
4256c3c9db83Smrg		   test -z "$non_pic_object" ||
4257c3c9db83Smrg		   test "$pic_object" = none &&
4258c3c9db83Smrg		   test "$non_pic_object" = none; then
4259c3c9db83Smrg		  func_fatal_error "cannot find name of object for \`$arg'"
4260c3c9db83Smrg		fi
426185ee4c00Smrg
4262c3c9db83Smrg		# Extract subdirectory from the argument.
4263c3c9db83Smrg		func_dirname "$arg" "/" ""
4264c3c9db83Smrg		xdir="$func_dirname_result"
426585ee4c00Smrg
4266c3c9db83Smrg		if test "$pic_object" != none; then
4267c3c9db83Smrg		  # Prepend the subdirectory the object is found in.
4268c3c9db83Smrg		  pic_object="$xdir$pic_object"
426985ee4c00Smrg
4270c3c9db83Smrg		  if test "$prev" = dlfiles; then
4271c3c9db83Smrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
4272c3c9db83Smrg		      dlfiles="$dlfiles $pic_object"
4273c3c9db83Smrg		      prev=
4274c3c9db83Smrg		      continue
4275c3c9db83Smrg		    else
4276c3c9db83Smrg		      # If libtool objects are unsupported, then we need to preload.
4277c3c9db83Smrg		      prev=dlprefiles
4278c3c9db83Smrg		    fi
4279c3c9db83Smrg		  fi
428085ee4c00Smrg
4281c3c9db83Smrg		  # CHECK ME:  I think I busted this.  -Ossama
4282c3c9db83Smrg		  if test "$prev" = dlprefiles; then
4283c3c9db83Smrg		    # Preload the old-style object.
4284c3c9db83Smrg		    dlprefiles="$dlprefiles $pic_object"
4285c3c9db83Smrg		    prev=
4286c3c9db83Smrg		  fi
428785ee4c00Smrg
4288c3c9db83Smrg		  # A PIC object.
4289c3c9db83Smrg		  func_append libobjs " $pic_object"
4290c3c9db83Smrg		  arg="$pic_object"
4291c3c9db83Smrg		fi
429285ee4c00Smrg
4293c3c9db83Smrg		# Non-PIC object.
4294c3c9db83Smrg		if test "$non_pic_object" != none; then
4295c3c9db83Smrg		  # Prepend the subdirectory the object is found in.
4296c3c9db83Smrg		  non_pic_object="$xdir$non_pic_object"
429785ee4c00Smrg
4298c3c9db83Smrg		  # A standard non-PIC object
4299c3c9db83Smrg		  func_append non_pic_objects " $non_pic_object"
4300c3c9db83Smrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
4301c3c9db83Smrg		    arg="$non_pic_object"
4302c3c9db83Smrg		  fi
4303c3c9db83Smrg		else
4304c3c9db83Smrg		  # If the PIC object exists, use it instead.
4305c3c9db83Smrg		  # $xdir was prepended to $pic_object above.
4306c3c9db83Smrg		  non_pic_object="$pic_object"
4307c3c9db83Smrg		  func_append non_pic_objects " $non_pic_object"
4308c3c9db83Smrg		fi
4309c3c9db83Smrg	      else
4310c3c9db83Smrg		# Only an error if not doing a dry-run.
4311c3c9db83Smrg		if $opt_dry_run; then
4312c3c9db83Smrg		  # Extract subdirectory from the argument.
4313c3c9db83Smrg		  func_dirname "$arg" "/" ""
4314c3c9db83Smrg		  xdir="$func_dirname_result"
4315c3c9db83Smrg
4316c3c9db83Smrg		  func_lo2o "$arg"
4317c3c9db83Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
4318c3c9db83Smrg		  non_pic_object=$xdir$func_lo2o_result
4319c3c9db83Smrg		  func_append libobjs " $pic_object"
4320c3c9db83Smrg		  func_append non_pic_objects " $non_pic_object"
4321c3c9db83Smrg	        else
4322c3c9db83Smrg		  func_fatal_error "\`$arg' is not a valid libtool object"
4323c3c9db83Smrg		fi
4324c3c9db83Smrg	      fi
4325c3c9db83Smrg	    done
43262e71ea71Smrg	  else
4327c3c9db83Smrg	    func_fatal_error "link input file \`$arg' does not exist"
43282e71ea71Smrg	  fi
4329c3c9db83Smrg	  arg=$save_arg
4330c3c9db83Smrg	  prev=
4331c3c9db83Smrg	  continue
4332c3c9db83Smrg	  ;;
4333c3c9db83Smrg	precious_regex)
4334c3c9db83Smrg	  precious_files_regex="$arg"
4335c3c9db83Smrg	  prev=
4336c3c9db83Smrg	  continue
4337c3c9db83Smrg	  ;;
4338c3c9db83Smrg	release)
4339c3c9db83Smrg	  release="-$arg"
4340c3c9db83Smrg	  prev=
4341c3c9db83Smrg	  continue
4342c3c9db83Smrg	  ;;
4343c3c9db83Smrg	rpath | xrpath)
4344c3c9db83Smrg	  # We need an absolute path.
4345c3c9db83Smrg	  case $arg in
4346c3c9db83Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
4347c3c9db83Smrg	  *)
4348c3c9db83Smrg	    func_fatal_error "only absolute run-paths are allowed"
4349c3c9db83Smrg	    ;;
4350c3c9db83Smrg	  esac
4351c3c9db83Smrg	  if test "$prev" = rpath; then
4352c3c9db83Smrg	    case "$rpath " in
4353c3c9db83Smrg	    *" $arg "*) ;;
4354c3c9db83Smrg	    *) rpath="$rpath $arg" ;;
4355c3c9db83Smrg	    esac
43562e71ea71Smrg	  else
4357c3c9db83Smrg	    case "$xrpath " in
4358c3c9db83Smrg	    *" $arg "*) ;;
4359c3c9db83Smrg	    *) xrpath="$xrpath $arg" ;;
4360c3c9db83Smrg	    esac
43612e71ea71Smrg	  fi
4362c3c9db83Smrg	  prev=
4363c3c9db83Smrg	  continue
4364c3c9db83Smrg	  ;;
4365c3c9db83Smrg	shrext)
4366c3c9db83Smrg	  shrext_cmds="$arg"
4367c3c9db83Smrg	  prev=
4368c3c9db83Smrg	  continue
4369c3c9db83Smrg	  ;;
4370c3c9db83Smrg	weak)
4371c3c9db83Smrg	  weak_libs="$weak_libs $arg"
4372c3c9db83Smrg	  prev=
4373c3c9db83Smrg	  continue
4374c3c9db83Smrg	  ;;
4375c3c9db83Smrg	xcclinker)
4376c3c9db83Smrg	  linker_flags="$linker_flags $qarg"
4377c3c9db83Smrg	  compiler_flags="$compiler_flags $qarg"
4378c3c9db83Smrg	  prev=
4379c3c9db83Smrg	  func_append compile_command " $qarg"
4380c3c9db83Smrg	  func_append finalize_command " $qarg"
4381c3c9db83Smrg	  continue
4382c3c9db83Smrg	  ;;
4383c3c9db83Smrg	xcompiler)
4384c3c9db83Smrg	  compiler_flags="$compiler_flags $qarg"
4385c3c9db83Smrg	  prev=
4386c3c9db83Smrg	  func_append compile_command " $qarg"
4387c3c9db83Smrg	  func_append finalize_command " $qarg"
4388c3c9db83Smrg	  continue
4389c3c9db83Smrg	  ;;
4390c3c9db83Smrg	xlinker)
4391c3c9db83Smrg	  linker_flags="$linker_flags $qarg"
4392c3c9db83Smrg	  compiler_flags="$compiler_flags $wl$qarg"
4393c3c9db83Smrg	  prev=
4394c3c9db83Smrg	  func_append compile_command " $wl$qarg"
4395c3c9db83Smrg	  func_append finalize_command " $wl$qarg"
4396c3c9db83Smrg	  continue
4397c3c9db83Smrg	  ;;
4398c3c9db83Smrg	*)
4399c3c9db83Smrg	  eval "$prev=\"\$arg\""
4400c3c9db83Smrg	  prev=
4401c3c9db83Smrg	  continue
4402c3c9db83Smrg	  ;;
440385ee4c00Smrg	esac
4404c3c9db83Smrg      fi # test -n "$prev"
440585ee4c00Smrg
4406c3c9db83Smrg      prevarg="$arg"
440785ee4c00Smrg
4408c3c9db83Smrg      case $arg in
4409c3c9db83Smrg      -all-static)
4410c3c9db83Smrg	if test -n "$link_static_flag"; then
4411c3c9db83Smrg	  # See comment for -static flag below, for more details.
4412c3c9db83Smrg	  func_append compile_command " $link_static_flag"
4413c3c9db83Smrg	  func_append finalize_command " $link_static_flag"
4414c3c9db83Smrg	fi
4415c3c9db83Smrg	continue
4416c3c9db83Smrg	;;
441785ee4c00Smrg
4418c3c9db83Smrg      -allow-undefined)
4419c3c9db83Smrg	# FIXME: remove this flag sometime in the future.
4420c3c9db83Smrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
4421c3c9db83Smrg	;;
442285ee4c00Smrg
4423c3c9db83Smrg      -avoid-version)
4424c3c9db83Smrg	avoid_version=yes
4425c3c9db83Smrg	continue
4426c3c9db83Smrg	;;
442785ee4c00Smrg
4428c3c9db83Smrg      -dlopen)
4429c3c9db83Smrg	prev=dlfiles
4430c3c9db83Smrg	continue
4431c3c9db83Smrg	;;
443285ee4c00Smrg
4433c3c9db83Smrg      -dlpreopen)
4434c3c9db83Smrg	prev=dlprefiles
4435c3c9db83Smrg	continue
4436c3c9db83Smrg	;;
443785ee4c00Smrg
4438c3c9db83Smrg      -export-dynamic)
4439c3c9db83Smrg	export_dynamic=yes
4440c3c9db83Smrg	continue
4441c3c9db83Smrg	;;
444285ee4c00Smrg
4443c3c9db83Smrg      -export-symbols | -export-symbols-regex)
4444c3c9db83Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
4445c3c9db83Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
4446c3c9db83Smrg	fi
4447c3c9db83Smrg	if test "X$arg" = "X-export-symbols"; then
4448c3c9db83Smrg	  prev=expsyms
4449c3c9db83Smrg	else
4450c3c9db83Smrg	  prev=expsyms_regex
4451c3c9db83Smrg	fi
4452c3c9db83Smrg	continue
4453c3c9db83Smrg	;;
445485ee4c00Smrg
4455c3c9db83Smrg      -framework)
4456c3c9db83Smrg	prev=framework
4457c3c9db83Smrg	continue
4458c3c9db83Smrg	;;
445985ee4c00Smrg
4460c3c9db83Smrg      -inst-prefix-dir)
4461c3c9db83Smrg	prev=inst_prefix
4462c3c9db83Smrg	continue
4463c3c9db83Smrg	;;
446485ee4c00Smrg
4465c3c9db83Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
4466c3c9db83Smrg      # so, if we see these flags be careful not to treat them like -L
4467c3c9db83Smrg      -L[A-Z][A-Z]*:*)
4468c3c9db83Smrg	case $with_gcc/$host in
4469c3c9db83Smrg	no/*-*-irix* | /*-*-irix*)
4470c3c9db83Smrg	  func_append compile_command " $arg"
4471c3c9db83Smrg	  func_append finalize_command " $arg"
4472c3c9db83Smrg	  ;;
4473c3c9db83Smrg	esac
4474c3c9db83Smrg	continue
4475c3c9db83Smrg	;;
447685ee4c00Smrg
4477c3c9db83Smrg      -L*)
4478c3c9db83Smrg	func_stripname '-L' '' "$arg"
4479c3c9db83Smrg	dir=$func_stripname_result
4480c3c9db83Smrg	if test -z "$dir"; then
4481c3c9db83Smrg	  if test "$#" -gt 0; then
4482c3c9db83Smrg	    func_fatal_error "require no space between \`-L' and \`$1'"
4483c3c9db83Smrg	  else
4484c3c9db83Smrg	    func_fatal_error "need path for \`-L' option"
4485c3c9db83Smrg	  fi
4486c3c9db83Smrg	fi
4487c3c9db83Smrg	# We need an absolute path.
4488c3c9db83Smrg	case $dir in
4489c3c9db83Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
4490c3c9db83Smrg	*)
4491c3c9db83Smrg	  absdir=`cd "$dir" && pwd`
4492c3c9db83Smrg	  test -z "$absdir" && \
4493c3c9db83Smrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
4494c3c9db83Smrg	  dir="$absdir"
4495c3c9db83Smrg	  ;;
4496c3c9db83Smrg	esac
4497c3c9db83Smrg	case "$deplibs " in
4498c3c9db83Smrg	*" -L$dir "*) ;;
4499c3c9db83Smrg	*)
4500c3c9db83Smrg	  deplibs="$deplibs -L$dir"
4501c3c9db83Smrg	  lib_search_path="$lib_search_path $dir"
4502c3c9db83Smrg	  ;;
4503c3c9db83Smrg	esac
4504c3c9db83Smrg	case $host in
4505c3c9db83Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
4506c3c9db83Smrg	  testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
4507c3c9db83Smrg	  case :$dllsearchpath: in
4508c3c9db83Smrg	  *":$dir:"*) ;;
4509c3c9db83Smrg	  ::) dllsearchpath=$dir;;
4510c3c9db83Smrg	  *) dllsearchpath="$dllsearchpath:$dir";;
4511c3c9db83Smrg	  esac
4512c3c9db83Smrg	  case :$dllsearchpath: in
4513c3c9db83Smrg	  *":$testbindir:"*) ;;
4514c3c9db83Smrg	  ::) dllsearchpath=$testbindir;;
4515c3c9db83Smrg	  *) dllsearchpath="$dllsearchpath:$testbindir";;
4516c3c9db83Smrg	  esac
4517c3c9db83Smrg	  ;;
4518c3c9db83Smrg	esac
4519c3c9db83Smrg	continue
4520c3c9db83Smrg	;;
452185ee4c00Smrg
4522c3c9db83Smrg      -l*)
4523c3c9db83Smrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
4524c3c9db83Smrg	  case $host in
4525c3c9db83Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
4526c3c9db83Smrg	    # These systems don't actually have a C or math library (as such)
4527c3c9db83Smrg	    continue
4528c3c9db83Smrg	    ;;
4529c3c9db83Smrg	  *-*-os2*)
4530c3c9db83Smrg	    # These systems don't actually have a C library (as such)
4531c3c9db83Smrg	    test "X$arg" = "X-lc" && continue
4532c3c9db83Smrg	    ;;
4533c3c9db83Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
4534c3c9db83Smrg	    # Do not include libc due to us having libc/libc_r.
4535c3c9db83Smrg	    test "X$arg" = "X-lc" && continue
4536c3c9db83Smrg	    ;;
4537c3c9db83Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
4538c3c9db83Smrg	    # Rhapsody C and math libraries are in the System framework
4539c3c9db83Smrg	    deplibs="$deplibs System.ltframework"
4540c3c9db83Smrg	    continue
4541c3c9db83Smrg	    ;;
4542c3c9db83Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
4543c3c9db83Smrg	    # Causes problems with __ctype
4544c3c9db83Smrg	    test "X$arg" = "X-lc" && continue
4545c3c9db83Smrg	    ;;
4546c3c9db83Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
4547c3c9db83Smrg	    # Compiler inserts libc in the correct place for threads to work
4548c3c9db83Smrg	    test "X$arg" = "X-lc" && continue
4549c3c9db83Smrg	    ;;
4550c3c9db83Smrg	  esac
4551c3c9db83Smrg	elif test "X$arg" = "X-lc_r"; then
4552c3c9db83Smrg	 case $host in
4553c3c9db83Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
4554c3c9db83Smrg	   # Do not include libc_r directly, use -pthread flag.
4555c3c9db83Smrg	   continue
4556c3c9db83Smrg	   ;;
4557c3c9db83Smrg	 esac
4558c3c9db83Smrg	fi
4559c3c9db83Smrg	deplibs="$deplibs $arg"
4560c3c9db83Smrg	continue
4561c3c9db83Smrg	;;
456285ee4c00Smrg
4563c3c9db83Smrg      -module)
4564c3c9db83Smrg	module=yes
4565c3c9db83Smrg	continue
4566c3c9db83Smrg	;;
456785ee4c00Smrg
4568c3c9db83Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
4569c3c9db83Smrg      # classes, name mangling, and exception handling.
4570c3c9db83Smrg      # Darwin uses the -arch flag to determine output architecture.
4571c3c9db83Smrg      -model|-arch|-isysroot)
4572c3c9db83Smrg	compiler_flags="$compiler_flags $arg"
4573c3c9db83Smrg	func_append compile_command " $arg"
4574c3c9db83Smrg	func_append finalize_command " $arg"
4575c3c9db83Smrg	prev=xcompiler
4576c3c9db83Smrg	continue
4577c3c9db83Smrg	;;
457885ee4c00Smrg
4579c3c9db83Smrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
4580c3c9db83Smrg	compiler_flags="$compiler_flags $arg"
4581c3c9db83Smrg	func_append compile_command " $arg"
4582c3c9db83Smrg	func_append finalize_command " $arg"
4583c3c9db83Smrg	case "$new_inherited_linker_flags " in
4584c3c9db83Smrg	    *" $arg "*) ;;
4585c3c9db83Smrg	    * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
4586c3c9db83Smrg	esac
4587c3c9db83Smrg	continue
4588c3c9db83Smrg	;;
458985ee4c00Smrg
4590c3c9db83Smrg      -multi_module)
4591c3c9db83Smrg	single_module="${wl}-multi_module"
4592c3c9db83Smrg	continue
4593c3c9db83Smrg	;;
459485ee4c00Smrg
4595c3c9db83Smrg      -no-fast-install)
4596c3c9db83Smrg	fast_install=no
4597c3c9db83Smrg	continue
4598c3c9db83Smrg	;;
459985ee4c00Smrg
4600c3c9db83Smrg      -no-install)
4601c3c9db83Smrg	case $host in
4602c3c9db83Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
4603c3c9db83Smrg	  # The PATH hackery in wrapper scripts is required on Windows
4604c3c9db83Smrg	  # and Darwin in order for the loader to find any dlls it needs.
4605c3c9db83Smrg	  func_warning "\`-no-install' is ignored for $host"
4606c3c9db83Smrg	  func_warning "assuming \`-no-fast-install' instead"
4607c3c9db83Smrg	  fast_install=no
4608c3c9db83Smrg	  ;;
4609c3c9db83Smrg	*) no_install=yes ;;
4610c3c9db83Smrg	esac
4611c3c9db83Smrg	continue
4612c3c9db83Smrg	;;
461385ee4c00Smrg
4614c3c9db83Smrg      -no-undefined)
4615c3c9db83Smrg	allow_undefined=no
4616c3c9db83Smrg	continue
4617c3c9db83Smrg	;;
461885ee4c00Smrg
4619c3c9db83Smrg      -objectlist)
4620c3c9db83Smrg	prev=objectlist
4621c3c9db83Smrg	continue
4622c3c9db83Smrg	;;
462385ee4c00Smrg
4624c3c9db83Smrg      -o) prev=output ;;
462585ee4c00Smrg
4626c3c9db83Smrg      -precious-files-regex)
4627c3c9db83Smrg	prev=precious_regex
4628c3c9db83Smrg	continue
4629c3c9db83Smrg	;;
463085ee4c00Smrg
4631c3c9db83Smrg      -release)
4632c3c9db83Smrg	prev=release
4633c3c9db83Smrg	continue
4634c3c9db83Smrg	;;
463585ee4c00Smrg
4636c3c9db83Smrg      -rpath)
4637c3c9db83Smrg	prev=rpath
4638c3c9db83Smrg	continue
4639c3c9db83Smrg	;;
464085ee4c00Smrg
4641c3c9db83Smrg      -R)
4642c3c9db83Smrg	prev=xrpath
4643c3c9db83Smrg	continue
4644c3c9db83Smrg	;;
464585ee4c00Smrg
4646c3c9db83Smrg      -R*)
4647c3c9db83Smrg	func_stripname '-R' '' "$arg"
4648c3c9db83Smrg	dir=$func_stripname_result
4649c3c9db83Smrg	# We need an absolute path.
4650c3c9db83Smrg	case $dir in
4651c3c9db83Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
4652c3c9db83Smrg	*)
4653c3c9db83Smrg	  func_fatal_error "only absolute run-paths are allowed"
4654c3c9db83Smrg	  ;;
4655c3c9db83Smrg	esac
4656c3c9db83Smrg	case "$xrpath " in
4657c3c9db83Smrg	*" $dir "*) ;;
4658c3c9db83Smrg	*) xrpath="$xrpath $dir" ;;
4659c3c9db83Smrg	esac
4660c3c9db83Smrg	continue
4661c3c9db83Smrg	;;
466285ee4c00Smrg
4663c3c9db83Smrg      -shared)
4664c3c9db83Smrg	# The effects of -shared are defined in a previous loop.
4665c3c9db83Smrg	continue
4666c3c9db83Smrg	;;
466785ee4c00Smrg
4668c3c9db83Smrg      -shrext)
4669c3c9db83Smrg	prev=shrext
4670c3c9db83Smrg	continue
4671c3c9db83Smrg	;;
467285ee4c00Smrg
4673c3c9db83Smrg      -static | -static-libtool-libs)
4674c3c9db83Smrg	# The effects of -static are defined in a previous loop.
4675c3c9db83Smrg	# We used to do the same as -all-static on platforms that
4676c3c9db83Smrg	# didn't have a PIC flag, but the assumption that the effects
4677c3c9db83Smrg	# would be equivalent was wrong.  It would break on at least
4678c3c9db83Smrg	# Digital Unix and AIX.
4679c3c9db83Smrg	continue
4680c3c9db83Smrg	;;
468185ee4c00Smrg
4682c3c9db83Smrg      -thread-safe)
4683c3c9db83Smrg	thread_safe=yes
4684c3c9db83Smrg	continue
4685c3c9db83Smrg	;;
468685ee4c00Smrg
4687c3c9db83Smrg      -version-info)
4688c3c9db83Smrg	prev=vinfo
4689c3c9db83Smrg	continue
4690c3c9db83Smrg	;;
469185ee4c00Smrg
4692c3c9db83Smrg      -version-number)
4693c3c9db83Smrg	prev=vinfo
4694c3c9db83Smrg	vinfo_number=yes
4695c3c9db83Smrg	continue
4696c3c9db83Smrg	;;
469785ee4c00Smrg
4698c3c9db83Smrg      -weak)
4699c3c9db83Smrg        prev=weak
4700c3c9db83Smrg	continue
4701c3c9db83Smrg	;;
4702692f60a7Smrg
4703c3c9db83Smrg      -Wc,*)
4704c3c9db83Smrg	func_stripname '-Wc,' '' "$arg"
4705c3c9db83Smrg	args=$func_stripname_result
4706c3c9db83Smrg	arg=
4707c3c9db83Smrg	save_ifs="$IFS"; IFS=','
4708c3c9db83Smrg	for flag in $args; do
4709c3c9db83Smrg	  IFS="$save_ifs"
4710c3c9db83Smrg          func_quote_for_eval "$flag"
4711c3c9db83Smrg	  arg="$arg $wl$func_quote_for_eval_result"
4712c3c9db83Smrg	  compiler_flags="$compiler_flags $func_quote_for_eval_result"
4713c3c9db83Smrg	done
4714c3c9db83Smrg	IFS="$save_ifs"
4715c3c9db83Smrg	func_stripname ' ' '' "$arg"
4716c3c9db83Smrg	arg=$func_stripname_result
4717c3c9db83Smrg	;;
47182e71ea71Smrg
4719c3c9db83Smrg      -Wl,*)
4720c3c9db83Smrg	func_stripname '-Wl,' '' "$arg"
4721c3c9db83Smrg	args=$func_stripname_result
4722c3c9db83Smrg	arg=
4723c3c9db83Smrg	save_ifs="$IFS"; IFS=','
4724c3c9db83Smrg	for flag in $args; do
4725c3c9db83Smrg	  IFS="$save_ifs"
4726c3c9db83Smrg          func_quote_for_eval "$flag"
4727c3c9db83Smrg	  arg="$arg $wl$func_quote_for_eval_result"
4728c3c9db83Smrg	  compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
4729c3c9db83Smrg	  linker_flags="$linker_flags $func_quote_for_eval_result"
4730c3c9db83Smrg	done
4731c3c9db83Smrg	IFS="$save_ifs"
4732c3c9db83Smrg	func_stripname ' ' '' "$arg"
4733c3c9db83Smrg	arg=$func_stripname_result
4734c3c9db83Smrg	;;
47352e71ea71Smrg
4736c3c9db83Smrg      -Xcompiler)
4737c3c9db83Smrg	prev=xcompiler
4738c3c9db83Smrg	continue
4739c3c9db83Smrg	;;
47402e71ea71Smrg
4741c3c9db83Smrg      -Xlinker)
4742c3c9db83Smrg	prev=xlinker
4743c3c9db83Smrg	continue
4744c3c9db83Smrg	;;
47452e71ea71Smrg
4746c3c9db83Smrg      -XCClinker)
4747c3c9db83Smrg	prev=xcclinker
4748c3c9db83Smrg	continue
4749c3c9db83Smrg	;;
47502e71ea71Smrg
4751c3c9db83Smrg      # -msg_* for osf cc
4752c3c9db83Smrg      -msg_*)
4753c3c9db83Smrg	func_quote_for_eval "$arg"
4754c3c9db83Smrg	arg="$func_quote_for_eval_result"
4755c3c9db83Smrg	;;
47562e71ea71Smrg
4757c3c9db83Smrg      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
4758c3c9db83Smrg      # -r[0-9][0-9]* specifies the processor on the SGI compiler
4759c3c9db83Smrg      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
4760c3c9db83Smrg      # +DA*, +DD* enable 64-bit mode on the HP compiler
4761c3c9db83Smrg      # -q* pass through compiler args for the IBM compiler
4762c3c9db83Smrg      # -m*, -t[45]*, -txscale* pass through architecture-specific
4763c3c9db83Smrg      # compiler args for GCC
4764c3c9db83Smrg      # -F/path gives path to uninstalled frameworks, gcc on darwin
4765c3c9db83Smrg      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
4766c3c9db83Smrg      # @file GCC response files
4767c3c9db83Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
4768c3c9db83Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
4769c3c9db83Smrg        func_quote_for_eval "$arg"
4770c3c9db83Smrg	arg="$func_quote_for_eval_result"
4771c3c9db83Smrg        func_append compile_command " $arg"
4772c3c9db83Smrg        func_append finalize_command " $arg"
4773c3c9db83Smrg        compiler_flags="$compiler_flags $arg"
4774c3c9db83Smrg        continue
4775c3c9db83Smrg        ;;
47762e71ea71Smrg
4777c3c9db83Smrg      # Some other compiler flag.
4778c3c9db83Smrg      -* | +*)
4779c3c9db83Smrg        func_quote_for_eval "$arg"
4780c3c9db83Smrg	arg="$func_quote_for_eval_result"
4781c3c9db83Smrg	;;
47822e71ea71Smrg
4783c3c9db83Smrg      *.$objext)
4784c3c9db83Smrg	# A standard object.
4785c3c9db83Smrg	objs="$objs $arg"
4786c3c9db83Smrg	;;
47872e71ea71Smrg
4788c3c9db83Smrg      *.lo)
4789c3c9db83Smrg	# A libtool-controlled object.
47902e71ea71Smrg
4791c3c9db83Smrg	# Check to see that this really is a libtool object.
4792c3c9db83Smrg	if func_lalib_unsafe_p "$arg"; then
4793c3c9db83Smrg	  pic_object=
4794c3c9db83Smrg	  non_pic_object=
47952e71ea71Smrg
4796c3c9db83Smrg	  # Read the .lo file
4797c3c9db83Smrg	  func_source "$arg"
47982e71ea71Smrg
4799c3c9db83Smrg	  if test -z "$pic_object" ||
4800c3c9db83Smrg	     test -z "$non_pic_object" ||
4801c3c9db83Smrg	     test "$pic_object" = none &&
4802c3c9db83Smrg	     test "$non_pic_object" = none; then
4803c3c9db83Smrg	    func_fatal_error "cannot find name of object for \`$arg'"
4804c3c9db83Smrg	  fi
48052e71ea71Smrg
4806c3c9db83Smrg	  # Extract subdirectory from the argument.
4807c3c9db83Smrg	  func_dirname "$arg" "/" ""
4808c3c9db83Smrg	  xdir="$func_dirname_result"
48092e71ea71Smrg
4810c3c9db83Smrg	  if test "$pic_object" != none; then
4811c3c9db83Smrg	    # Prepend the subdirectory the object is found in.
4812c3c9db83Smrg	    pic_object="$xdir$pic_object"
48132e71ea71Smrg
4814c3c9db83Smrg	    if test "$prev" = dlfiles; then
4815c3c9db83Smrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
4816c3c9db83Smrg		dlfiles="$dlfiles $pic_object"
4817c3c9db83Smrg		prev=
4818c3c9db83Smrg		continue
4819c3c9db83Smrg	      else
4820c3c9db83Smrg		# If libtool objects are unsupported, then we need to preload.
4821c3c9db83Smrg		prev=dlprefiles
4822c3c9db83Smrg	      fi
4823c3c9db83Smrg	    fi
48242e71ea71Smrg
4825c3c9db83Smrg	    # CHECK ME:  I think I busted this.  -Ossama
4826c3c9db83Smrg	    if test "$prev" = dlprefiles; then
4827c3c9db83Smrg	      # Preload the old-style object.
4828c3c9db83Smrg	      dlprefiles="$dlprefiles $pic_object"
4829c3c9db83Smrg	      prev=
4830c3c9db83Smrg	    fi
4831692f60a7Smrg
4832c3c9db83Smrg	    # A PIC object.
4833c3c9db83Smrg	    func_append libobjs " $pic_object"
4834c3c9db83Smrg	    arg="$pic_object"
4835c3c9db83Smrg	  fi
4836692f60a7Smrg
4837c3c9db83Smrg	  # Non-PIC object.
4838c3c9db83Smrg	  if test "$non_pic_object" != none; then
4839c3c9db83Smrg	    # Prepend the subdirectory the object is found in.
4840c3c9db83Smrg	    non_pic_object="$xdir$non_pic_object"
4841692f60a7Smrg
4842c3c9db83Smrg	    # A standard non-PIC object
4843c3c9db83Smrg	    func_append non_pic_objects " $non_pic_object"
4844c3c9db83Smrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
4845c3c9db83Smrg	      arg="$non_pic_object"
4846c3c9db83Smrg	    fi
4847c3c9db83Smrg	  else
4848c3c9db83Smrg	    # If the PIC object exists, use it instead.
4849c3c9db83Smrg	    # $xdir was prepended to $pic_object above.
4850c3c9db83Smrg	    non_pic_object="$pic_object"
4851c3c9db83Smrg	    func_append non_pic_objects " $non_pic_object"
4852c3c9db83Smrg	  fi
4853c3c9db83Smrg	else
4854c3c9db83Smrg	  # Only an error if not doing a dry-run.
4855c3c9db83Smrg	  if $opt_dry_run; then
4856c3c9db83Smrg	    # Extract subdirectory from the argument.
4857c3c9db83Smrg	    func_dirname "$arg" "/" ""
4858c3c9db83Smrg	    xdir="$func_dirname_result"
4859c3c9db83Smrg
4860c3c9db83Smrg	    func_lo2o "$arg"
4861c3c9db83Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
4862c3c9db83Smrg	    non_pic_object=$xdir$func_lo2o_result
4863c3c9db83Smrg	    func_append libobjs " $pic_object"
4864c3c9db83Smrg	    func_append non_pic_objects " $non_pic_object"
4865c3c9db83Smrg	  else
4866c3c9db83Smrg	    func_fatal_error "\`$arg' is not a valid libtool object"
4867c3c9db83Smrg	  fi
4868c3c9db83Smrg	fi
4869c3c9db83Smrg	;;
4870692f60a7Smrg
4871c3c9db83Smrg      *.$libext)
4872c3c9db83Smrg	# An archive.
4873c3c9db83Smrg	deplibs="$deplibs $arg"
4874c3c9db83Smrg	old_deplibs="$old_deplibs $arg"
4875c3c9db83Smrg	continue
4876c3c9db83Smrg	;;
4877c3c9db83Smrg
4878c3c9db83Smrg      *.la)
4879c3c9db83Smrg	# A libtool-controlled library.
4880c3c9db83Smrg
4881c3c9db83Smrg	if test "$prev" = dlfiles; then
4882c3c9db83Smrg	  # This library was specified with -dlopen.
4883c3c9db83Smrg	  dlfiles="$dlfiles $arg"
4884c3c9db83Smrg	  prev=
4885c3c9db83Smrg	elif test "$prev" = dlprefiles; then
4886c3c9db83Smrg	  # The library was specified with -dlpreopen.
4887c3c9db83Smrg	  dlprefiles="$dlprefiles $arg"
4888c3c9db83Smrg	  prev=
4889c3c9db83Smrg	else
4890c3c9db83Smrg	  deplibs="$deplibs $arg"
4891c3c9db83Smrg	fi
4892c3c9db83Smrg	continue
4893c3c9db83Smrg	;;
4894c3c9db83Smrg
4895c3c9db83Smrg      # Some other compiler argument.
4896c3c9db83Smrg      *)
4897c3c9db83Smrg	# Unknown arguments in both finalize_command and compile_command need
4898c3c9db83Smrg	# to be aesthetically quoted because they are evaled later.
4899c3c9db83Smrg	func_quote_for_eval "$arg"
4900c3c9db83Smrg	arg="$func_quote_for_eval_result"
4901c3c9db83Smrg	;;
4902c3c9db83Smrg      esac # arg
4903c3c9db83Smrg
4904c3c9db83Smrg      # Now actually substitute the argument into the commands.
4905c3c9db83Smrg      if test -n "$arg"; then
4906c3c9db83Smrg	func_append compile_command " $arg"
4907c3c9db83Smrg	func_append finalize_command " $arg"
4908c3c9db83Smrg      fi
4909c3c9db83Smrg    done # argument parsing loop
4910c3c9db83Smrg
4911c3c9db83Smrg    test -n "$prev" && \
4912c3c9db83Smrg      func_fatal_help "the \`$prevarg' option requires an argument"
4913c3c9db83Smrg
4914c3c9db83Smrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
4915c3c9db83Smrg      eval arg=\"$export_dynamic_flag_spec\"
4916c3c9db83Smrg      func_append compile_command " $arg"
4917c3c9db83Smrg      func_append finalize_command " $arg"
4918c3c9db83Smrg    fi
4919c3c9db83Smrg
4920c3c9db83Smrg    oldlibs=
4921c3c9db83Smrg    # calculate the name of the file, without its directory
4922c3c9db83Smrg    func_basename "$output"
4923c3c9db83Smrg    outputname="$func_basename_result"
4924c3c9db83Smrg    libobjs_save="$libobjs"
4925c3c9db83Smrg
4926c3c9db83Smrg    if test -n "$shlibpath_var"; then
4927c3c9db83Smrg      # get the directories listed in $shlibpath_var
4928c3c9db83Smrg      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
4929c3c9db83Smrg    else
4930c3c9db83Smrg      shlib_search_path=
4931c3c9db83Smrg    fi
4932c3c9db83Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
4933c3c9db83Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
4934c3c9db83Smrg
4935c3c9db83Smrg    func_dirname "$output" "/" ""
4936c3c9db83Smrg    output_objdir="$func_dirname_result$objdir"
4937c3c9db83Smrg    # Create the object directory.
4938c3c9db83Smrg    func_mkdir_p "$output_objdir"
4939c3c9db83Smrg
4940c3c9db83Smrg    # Determine the type of output
4941c3c9db83Smrg    case $output in
4942c3c9db83Smrg    "")
4943c3c9db83Smrg      func_fatal_help "you must specify an output file"
4944c3c9db83Smrg      ;;
4945c3c9db83Smrg    *.$libext) linkmode=oldlib ;;
4946c3c9db83Smrg    *.lo | *.$objext) linkmode=obj ;;
4947c3c9db83Smrg    *.la) linkmode=lib ;;
4948c3c9db83Smrg    *) linkmode=prog ;; # Anything else should be a program.
4949c3c9db83Smrg    esac
4950c3c9db83Smrg
4951c3c9db83Smrg    specialdeplibs=
4952c3c9db83Smrg
4953c3c9db83Smrg    libs=
4954c3c9db83Smrg    # Find all interdependent deplibs by searching for libraries
4955c3c9db83Smrg    # that are linked more than once (e.g. -la -lb -la)
4956c3c9db83Smrg    for deplib in $deplibs; do
4957c3c9db83Smrg      if $opt_duplicate_deps ; then
4958c3c9db83Smrg	case "$libs " in
4959c3c9db83Smrg	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
4960c3c9db83Smrg	esac
4961c3c9db83Smrg      fi
4962c3c9db83Smrg      libs="$libs $deplib"
4963c3c9db83Smrg    done
4964c3c9db83Smrg
4965c3c9db83Smrg    if test "$linkmode" = lib; then
4966c3c9db83Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
4967c3c9db83Smrg
4968c3c9db83Smrg      # Compute libraries that are listed more than once in $predeps
4969c3c9db83Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
4970c3c9db83Smrg      # not to be eliminated).
4971c3c9db83Smrg      pre_post_deps=
4972c3c9db83Smrg      if $opt_duplicate_compiler_generated_deps; then
4973c3c9db83Smrg	for pre_post_dep in $predeps $postdeps; do
4974c3c9db83Smrg	  case "$pre_post_deps " in
4975c3c9db83Smrg	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
4976c3c9db83Smrg	  esac
4977c3c9db83Smrg	  pre_post_deps="$pre_post_deps $pre_post_dep"
4978c3c9db83Smrg	done
4979c3c9db83Smrg      fi
4980c3c9db83Smrg      pre_post_deps=
4981c3c9db83Smrg    fi
4982c3c9db83Smrg
4983c3c9db83Smrg    deplibs=
4984c3c9db83Smrg    newdependency_libs=
4985c3c9db83Smrg    newlib_search_path=
4986c3c9db83Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
4987c3c9db83Smrg    notinst_deplibs= # not-installed libtool libraries
4988c3c9db83Smrg    notinst_path= # paths that contain not-installed libtool libraries
4989c3c9db83Smrg
4990c3c9db83Smrg    case $linkmode in
4991c3c9db83Smrg    lib)
4992c3c9db83Smrg	passes="conv dlpreopen link"
4993c3c9db83Smrg	for file in $dlfiles $dlprefiles; do
4994c3c9db83Smrg	  case $file in
4995c3c9db83Smrg	  *.la) ;;
4996c3c9db83Smrg	  *)
4997c3c9db83Smrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
4998c3c9db83Smrg	    ;;
4999c3c9db83Smrg	  esac
5000c3c9db83Smrg	done
5001c3c9db83Smrg	;;
5002c3c9db83Smrg    prog)
5003c3c9db83Smrg	compile_deplibs=
5004c3c9db83Smrg	finalize_deplibs=
5005c3c9db83Smrg	alldeplibs=no
5006c3c9db83Smrg	newdlfiles=
5007c3c9db83Smrg	newdlprefiles=
5008c3c9db83Smrg	passes="conv scan dlopen dlpreopen link"
5009c3c9db83Smrg	;;
5010c3c9db83Smrg    *)  passes="conv"
5011c3c9db83Smrg	;;
5012c3c9db83Smrg    esac
5013c3c9db83Smrg
5014c3c9db83Smrg    for pass in $passes; do
5015c3c9db83Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
5016c3c9db83Smrg      # so that -L comes before libs that need it for instance...
5017c3c9db83Smrg      if test "$linkmode,$pass" = "lib,link"; then
5018c3c9db83Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
5019c3c9db83Smrg	##        order, and fix it there properly
5020c3c9db83Smrg        tmp_deplibs=
5021c3c9db83Smrg	for deplib in $deplibs; do
5022c3c9db83Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
5023c3c9db83Smrg	done
5024c3c9db83Smrg	deplibs="$tmp_deplibs"
5025c3c9db83Smrg      fi
5026c3c9db83Smrg
5027c3c9db83Smrg      if test "$linkmode,$pass" = "lib,link" ||
5028c3c9db83Smrg	 test "$linkmode,$pass" = "prog,scan"; then
5029c3c9db83Smrg	libs="$deplibs"
5030c3c9db83Smrg	deplibs=
5031c3c9db83Smrg      fi
5032c3c9db83Smrg      if test "$linkmode" = prog; then
5033c3c9db83Smrg	case $pass in
5034c3c9db83Smrg	dlopen) libs="$dlfiles" ;;
5035c3c9db83Smrg	dlpreopen) libs="$dlprefiles" ;;
5036c3c9db83Smrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
5037c3c9db83Smrg	esac
5038c3c9db83Smrg      fi
5039c3c9db83Smrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
5040c3c9db83Smrg	# Collect and forward deplibs of preopened libtool libs
5041c3c9db83Smrg	for lib in $dlprefiles; do
5042c3c9db83Smrg	  # Ignore non-libtool-libs
5043c3c9db83Smrg	  dependency_libs=
5044c3c9db83Smrg	  case $lib in
5045c3c9db83Smrg	  *.la)	func_source "$lib" ;;
5046c3c9db83Smrg	  esac
5047c3c9db83Smrg
5048c3c9db83Smrg	  # Collect preopened libtool deplibs, except any this library
5049c3c9db83Smrg	  # has declared as weak libs
5050c3c9db83Smrg	  for deplib in $dependency_libs; do
5051c3c9db83Smrg            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
5052c3c9db83Smrg	    case " $weak_libs " in
5053c3c9db83Smrg	    *" $deplib_base "*) ;;
5054c3c9db83Smrg	    *) deplibs="$deplibs $deplib" ;;
5055c3c9db83Smrg	    esac
5056c3c9db83Smrg	  done
5057c3c9db83Smrg	done
5058c3c9db83Smrg	libs="$dlprefiles"
5059c3c9db83Smrg      fi
5060c3c9db83Smrg      if test "$pass" = dlopen; then
5061c3c9db83Smrg	# Collect dlpreopened libraries
5062c3c9db83Smrg	save_deplibs="$deplibs"
5063c3c9db83Smrg	deplibs=
5064c3c9db83Smrg      fi
5065c3c9db83Smrg
5066c3c9db83Smrg      for deplib in $libs; do
5067c3c9db83Smrg	lib=
5068c3c9db83Smrg	found=no
5069c3c9db83Smrg	case $deplib in
5070c3c9db83Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
5071c3c9db83Smrg	  if test "$linkmode,$pass" = "prog,link"; then
5072c3c9db83Smrg	    compile_deplibs="$deplib $compile_deplibs"
5073c3c9db83Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
5074c3c9db83Smrg	  else
5075c3c9db83Smrg	    compiler_flags="$compiler_flags $deplib"
5076c3c9db83Smrg	    if test "$linkmode" = lib ; then
5077c3c9db83Smrg		case "$new_inherited_linker_flags " in
5078c3c9db83Smrg		    *" $deplib "*) ;;
5079c3c9db83Smrg		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
5080c3c9db83Smrg		esac
5081c3c9db83Smrg	    fi
5082c3c9db83Smrg	  fi
5083c3c9db83Smrg	  continue
5084c3c9db83Smrg	  ;;
5085c3c9db83Smrg	-l*)
5086c3c9db83Smrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
5087c3c9db83Smrg	    func_warning "\`-l' is ignored for archives/objects"
5088c3c9db83Smrg	    continue
5089c3c9db83Smrg	  fi
5090c3c9db83Smrg	  func_stripname '-l' '' "$deplib"
5091c3c9db83Smrg	  name=$func_stripname_result
5092c3c9db83Smrg	  if test "$linkmode" = lib; then
5093c3c9db83Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
5094c3c9db83Smrg	  else
5095c3c9db83Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
5096c3c9db83Smrg	  fi
5097c3c9db83Smrg	  for searchdir in $searchdirs; do
5098c3c9db83Smrg	    for search_ext in .la $std_shrext .so .a; do
5099c3c9db83Smrg	      # Search the libtool library
5100c3c9db83Smrg	      lib="$searchdir/lib${name}${search_ext}"
5101c3c9db83Smrg	      if test -f "$lib"; then
5102c3c9db83Smrg		if test "$search_ext" = ".la"; then
5103c3c9db83Smrg		  found=yes
5104c3c9db83Smrg		else
5105c3c9db83Smrg		  found=no
5106c3c9db83Smrg		fi
5107c3c9db83Smrg		break 2
5108c3c9db83Smrg	      fi
5109c3c9db83Smrg	    done
5110c3c9db83Smrg	  done
5111c3c9db83Smrg	  if test "$found" != yes; then
5112c3c9db83Smrg	    # deplib doesn't seem to be a libtool library
5113c3c9db83Smrg	    if test "$linkmode,$pass" = "prog,link"; then
5114c3c9db83Smrg	      compile_deplibs="$deplib $compile_deplibs"
5115c3c9db83Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
5116c3c9db83Smrg	    else
5117c3c9db83Smrg	      deplibs="$deplib $deplibs"
5118c3c9db83Smrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
5119c3c9db83Smrg	    fi
5120c3c9db83Smrg	    continue
5121c3c9db83Smrg	  else # deplib is a libtool library
5122c3c9db83Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
5123c3c9db83Smrg	    # We need to do some special things here, and not later.
5124c3c9db83Smrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
5125c3c9db83Smrg	      case " $predeps $postdeps " in
5126c3c9db83Smrg	      *" $deplib "*)
5127c3c9db83Smrg		if func_lalib_p "$lib"; then
5128c3c9db83Smrg		  library_names=
5129c3c9db83Smrg		  old_library=
5130c3c9db83Smrg		  func_source "$lib"
5131c3c9db83Smrg		  for l in $old_library $library_names; do
5132c3c9db83Smrg		    ll="$l"
5133c3c9db83Smrg		  done
5134c3c9db83Smrg		  if test "X$ll" = "X$old_library" ; then # only static version available
5135c3c9db83Smrg		    found=no
5136c3c9db83Smrg		    func_dirname "$lib" "" "."
5137c3c9db83Smrg		    ladir="$func_dirname_result"
5138c3c9db83Smrg		    lib=$ladir/$old_library
5139c3c9db83Smrg		    if test "$linkmode,$pass" = "prog,link"; then
5140c3c9db83Smrg		      compile_deplibs="$deplib $compile_deplibs"
5141c3c9db83Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
5142c3c9db83Smrg		    else
5143c3c9db83Smrg		      deplibs="$deplib $deplibs"
5144c3c9db83Smrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
5145c3c9db83Smrg		    fi
5146c3c9db83Smrg		    continue
5147c3c9db83Smrg		  fi
5148c3c9db83Smrg		fi
5149c3c9db83Smrg		;;
5150c3c9db83Smrg	      *) ;;
5151c3c9db83Smrg	      esac
5152c3c9db83Smrg	    fi
5153c3c9db83Smrg	  fi
5154c3c9db83Smrg	  ;; # -l
5155c3c9db83Smrg	*.ltframework)
5156c3c9db83Smrg	  if test "$linkmode,$pass" = "prog,link"; then
5157c3c9db83Smrg	    compile_deplibs="$deplib $compile_deplibs"
5158c3c9db83Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
5159c3c9db83Smrg	  else
5160c3c9db83Smrg	    deplibs="$deplib $deplibs"
5161c3c9db83Smrg	    if test "$linkmode" = lib ; then
5162c3c9db83Smrg		case "$new_inherited_linker_flags " in
5163c3c9db83Smrg		    *" $deplib "*) ;;
5164c3c9db83Smrg		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
5165c3c9db83Smrg		esac
5166c3c9db83Smrg	    fi
5167c3c9db83Smrg	  fi
5168c3c9db83Smrg	  continue
5169c3c9db83Smrg	  ;;
5170c3c9db83Smrg	-L*)
5171c3c9db83Smrg	  case $linkmode in
5172c3c9db83Smrg	  lib)
5173c3c9db83Smrg	    deplibs="$deplib $deplibs"
5174c3c9db83Smrg	    test "$pass" = conv && continue
5175c3c9db83Smrg	    newdependency_libs="$deplib $newdependency_libs"
5176c3c9db83Smrg	    func_stripname '-L' '' "$deplib"
5177c3c9db83Smrg	    newlib_search_path="$newlib_search_path $func_stripname_result"
5178c3c9db83Smrg	    ;;
5179c3c9db83Smrg	  prog)
5180c3c9db83Smrg	    if test "$pass" = conv; then
5181c3c9db83Smrg	      deplibs="$deplib $deplibs"
5182c3c9db83Smrg	      continue
5183c3c9db83Smrg	    fi
5184c3c9db83Smrg	    if test "$pass" = scan; then
5185c3c9db83Smrg	      deplibs="$deplib $deplibs"
5186c3c9db83Smrg	    else
5187c3c9db83Smrg	      compile_deplibs="$deplib $compile_deplibs"
5188c3c9db83Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
5189c3c9db83Smrg	    fi
5190c3c9db83Smrg	    func_stripname '-L' '' "$deplib"
5191c3c9db83Smrg	    newlib_search_path="$newlib_search_path $func_stripname_result"
5192c3c9db83Smrg	    ;;
5193c3c9db83Smrg	  *)
5194c3c9db83Smrg	    func_warning "\`-L' is ignored for archives/objects"
5195c3c9db83Smrg	    ;;
5196c3c9db83Smrg	  esac # linkmode
5197c3c9db83Smrg	  continue
5198c3c9db83Smrg	  ;; # -L
5199c3c9db83Smrg	-R*)
5200c3c9db83Smrg	  if test "$pass" = link; then
5201c3c9db83Smrg	    func_stripname '-R' '' "$deplib"
5202c3c9db83Smrg	    dir=$func_stripname_result
5203c3c9db83Smrg	    # Make sure the xrpath contains only unique directories.
5204c3c9db83Smrg	    case "$xrpath " in
5205c3c9db83Smrg	    *" $dir "*) ;;
5206c3c9db83Smrg	    *) xrpath="$xrpath $dir" ;;
5207c3c9db83Smrg	    esac
5208c3c9db83Smrg	  fi
5209c3c9db83Smrg	  deplibs="$deplib $deplibs"
5210c3c9db83Smrg	  continue
5211c3c9db83Smrg	  ;;
5212c3c9db83Smrg	*.la) lib="$deplib" ;;
5213c3c9db83Smrg	*.$libext)
5214c3c9db83Smrg	  if test "$pass" = conv; then
5215c3c9db83Smrg	    deplibs="$deplib $deplibs"
5216c3c9db83Smrg	    continue
5217c3c9db83Smrg	  fi
5218c3c9db83Smrg	  case $linkmode in
5219c3c9db83Smrg	  lib)
5220c3c9db83Smrg	    # Linking convenience modules into shared libraries is allowed,
5221c3c9db83Smrg	    # but linking other static libraries is non-portable.
5222c3c9db83Smrg	    case " $dlpreconveniencelibs " in
5223c3c9db83Smrg	    *" $deplib "*) ;;
5224c3c9db83Smrg	    *)
5225c3c9db83Smrg	      valid_a_lib=no
5226c3c9db83Smrg	      case $deplibs_check_method in
5227c3c9db83Smrg		match_pattern*)
5228c3c9db83Smrg		  set dummy $deplibs_check_method; shift
5229c3c9db83Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
5230c3c9db83Smrg		  if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
5231c3c9db83Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
5232c3c9db83Smrg		    valid_a_lib=yes
5233c3c9db83Smrg		  fi
5234c3c9db83Smrg		;;
5235c3c9db83Smrg		pass_all)
5236c3c9db83Smrg		  valid_a_lib=yes
5237c3c9db83Smrg		;;
5238c3c9db83Smrg	      esac
5239c3c9db83Smrg	      if test "$valid_a_lib" != yes; then
5240c3c9db83Smrg		$ECHO
5241c3c9db83Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
5242c3c9db83Smrg		$ECHO "*** I have the capability to make that library automatically link in when"
5243c3c9db83Smrg		$ECHO "*** you link to this library.  But I can only do this if you have a"
5244c3c9db83Smrg		$ECHO "*** shared version of the library, which you do not appear to have"
5245c3c9db83Smrg		$ECHO "*** because the file extensions .$libext of this argument makes me believe"
5246c3c9db83Smrg		$ECHO "*** that it is just a static archive that I should not use here."
5247c3c9db83Smrg	      else
5248c3c9db83Smrg		$ECHO
5249c3c9db83Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
5250c3c9db83Smrg		$ECHO "*** static library $deplib is not portable!"
5251c3c9db83Smrg		deplibs="$deplib $deplibs"
5252c3c9db83Smrg	      fi
5253c3c9db83Smrg	      ;;
5254c3c9db83Smrg	    esac
5255c3c9db83Smrg	    continue
5256c3c9db83Smrg	    ;;
5257c3c9db83Smrg	  prog)
5258c3c9db83Smrg	    if test "$pass" != link; then
5259c3c9db83Smrg	      deplibs="$deplib $deplibs"
5260c3c9db83Smrg	    else
5261c3c9db83Smrg	      compile_deplibs="$deplib $compile_deplibs"
5262c3c9db83Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
5263c3c9db83Smrg	    fi
5264c3c9db83Smrg	    continue
5265c3c9db83Smrg	    ;;
5266c3c9db83Smrg	  esac # linkmode
5267c3c9db83Smrg	  ;; # *.$libext
5268c3c9db83Smrg	*.lo | *.$objext)
5269c3c9db83Smrg	  if test "$pass" = conv; then
5270c3c9db83Smrg	    deplibs="$deplib $deplibs"
5271c3c9db83Smrg	  elif test "$linkmode" = prog; then
5272c3c9db83Smrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
5273c3c9db83Smrg	      # If there is no dlopen support or we're linking statically,
5274c3c9db83Smrg	      # we need to preload.
5275c3c9db83Smrg	      newdlprefiles="$newdlprefiles $deplib"
5276c3c9db83Smrg	      compile_deplibs="$deplib $compile_deplibs"
5277c3c9db83Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
5278c3c9db83Smrg	    else
5279c3c9db83Smrg	      newdlfiles="$newdlfiles $deplib"
5280c3c9db83Smrg	    fi
5281c3c9db83Smrg	  fi
5282c3c9db83Smrg	  continue
5283c3c9db83Smrg	  ;;
5284c3c9db83Smrg	%DEPLIBS%)
5285c3c9db83Smrg	  alldeplibs=yes
5286c3c9db83Smrg	  continue
5287c3c9db83Smrg	  ;;
5288c3c9db83Smrg	esac # case $deplib
5289c3c9db83Smrg
5290c3c9db83Smrg	if test "$found" = yes || test -f "$lib"; then :
5291c3c9db83Smrg	else
5292c3c9db83Smrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
5293c3c9db83Smrg	fi
5294c3c9db83Smrg
5295c3c9db83Smrg	# Check to see that this really is a libtool archive.
5296c3c9db83Smrg	func_lalib_unsafe_p "$lib" \
5297c3c9db83Smrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
5298c3c9db83Smrg
5299c3c9db83Smrg	func_dirname "$lib" "" "."
5300c3c9db83Smrg	ladir="$func_dirname_result"
5301c3c9db83Smrg
5302c3c9db83Smrg	dlname=
5303c3c9db83Smrg	dlopen=
5304c3c9db83Smrg	dlpreopen=
5305c3c9db83Smrg	libdir=
5306c3c9db83Smrg	library_names=
5307c3c9db83Smrg	old_library=
5308c3c9db83Smrg	inherited_linker_flags=
5309c3c9db83Smrg	# If the library was installed with an old release of libtool,
5310c3c9db83Smrg	# it will not redefine variables installed, or shouldnotlink
5311c3c9db83Smrg	installed=yes
5312c3c9db83Smrg	shouldnotlink=no
5313c3c9db83Smrg	avoidtemprpath=
5314c3c9db83Smrg
5315c3c9db83Smrg
5316c3c9db83Smrg	# Read the .la file
5317c3c9db83Smrg	func_source "$lib"
5318c3c9db83Smrg
5319c3c9db83Smrg	# Convert "-framework foo" to "foo.ltframework"
5320c3c9db83Smrg	if test -n "$inherited_linker_flags"; then
5321c3c9db83Smrg	  tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
5322c3c9db83Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
5323c3c9db83Smrg	    case " $new_inherited_linker_flags " in
5324c3c9db83Smrg	      *" $tmp_inherited_linker_flag "*) ;;
5325c3c9db83Smrg	      *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
5326c3c9db83Smrg	    esac
5327c3c9db83Smrg	  done
5328c3c9db83Smrg	fi
5329c3c9db83Smrg	dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
5330c3c9db83Smrg	if test "$linkmode,$pass" = "lib,link" ||
5331c3c9db83Smrg	   test "$linkmode,$pass" = "prog,scan" ||
5332c3c9db83Smrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
5333c3c9db83Smrg	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
5334c3c9db83Smrg	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
5335c3c9db83Smrg	fi
5336c3c9db83Smrg
5337c3c9db83Smrg	if test "$pass" = conv; then
5338c3c9db83Smrg	  # Only check for convenience libraries
5339c3c9db83Smrg	  deplibs="$lib $deplibs"
5340c3c9db83Smrg	  if test -z "$libdir"; then
5341c3c9db83Smrg	    if test -z "$old_library"; then
5342c3c9db83Smrg	      func_fatal_error "cannot find name of link library for \`$lib'"
5343c3c9db83Smrg	    fi
5344c3c9db83Smrg	    # It is a libtool convenience library, so add in its objects.
5345c3c9db83Smrg	    convenience="$convenience $ladir/$objdir/$old_library"
5346c3c9db83Smrg	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
5347c3c9db83Smrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
5348c3c9db83Smrg	    func_fatal_error "\`$lib' is not a convenience library"
5349c3c9db83Smrg	  fi
5350c3c9db83Smrg	  tmp_libs=
5351c3c9db83Smrg	  for deplib in $dependency_libs; do
5352c3c9db83Smrg	    deplibs="$deplib $deplibs"
5353c3c9db83Smrg	    if $opt_duplicate_deps ; then
5354c3c9db83Smrg	      case "$tmp_libs " in
5355c3c9db83Smrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
5356c3c9db83Smrg	      esac
5357c3c9db83Smrg	    fi
5358c3c9db83Smrg	    tmp_libs="$tmp_libs $deplib"
5359c3c9db83Smrg	  done
5360c3c9db83Smrg	  continue
5361c3c9db83Smrg	fi # $pass = conv
5362c3c9db83Smrg
5363c3c9db83Smrg
5364c3c9db83Smrg	# Get the name of the library we link against.
5365c3c9db83Smrg	linklib=
5366c3c9db83Smrg	for l in $old_library $library_names; do
5367c3c9db83Smrg	  linklib="$l"
5368c3c9db83Smrg	done
5369c3c9db83Smrg	if test -z "$linklib"; then
5370c3c9db83Smrg	  func_fatal_error "cannot find name of link library for \`$lib'"
5371c3c9db83Smrg	fi
5372c3c9db83Smrg
5373c3c9db83Smrg	# This library was specified with -dlopen.
5374c3c9db83Smrg	if test "$pass" = dlopen; then
5375c3c9db83Smrg	  if test -z "$libdir"; then
5376c3c9db83Smrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
5377c3c9db83Smrg	  fi
5378c3c9db83Smrg	  if test -z "$dlname" ||
5379c3c9db83Smrg	     test "$dlopen_support" != yes ||
5380c3c9db83Smrg	     test "$build_libtool_libs" = no; then
5381c3c9db83Smrg	    # If there is no dlname, no dlopen support or we're linking
5382c3c9db83Smrg	    # statically, we need to preload.  We also need to preload any
5383c3c9db83Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
5384c3c9db83Smrg	    # bomb out in the load deplibs phase.
5385c3c9db83Smrg	    dlprefiles="$dlprefiles $lib $dependency_libs"
5386c3c9db83Smrg	  else
5387c3c9db83Smrg	    newdlfiles="$newdlfiles $lib"
5388c3c9db83Smrg	  fi
5389c3c9db83Smrg	  continue
5390c3c9db83Smrg	fi # $pass = dlopen
5391c3c9db83Smrg
5392c3c9db83Smrg	# We need an absolute path.
5393c3c9db83Smrg	case $ladir in
5394c3c9db83Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
5395c3c9db83Smrg	*)
5396c3c9db83Smrg	  abs_ladir=`cd "$ladir" && pwd`
5397c3c9db83Smrg	  if test -z "$abs_ladir"; then
5398c3c9db83Smrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
5399c3c9db83Smrg	    func_warning "passing it literally to the linker, although it might fail"
5400c3c9db83Smrg	    abs_ladir="$ladir"
5401c3c9db83Smrg	  fi
5402c3c9db83Smrg	  ;;
5403c3c9db83Smrg	esac
5404c3c9db83Smrg	func_basename "$lib"
5405c3c9db83Smrg	laname="$func_basename_result"
5406c3c9db83Smrg
5407c3c9db83Smrg	# Find the relevant object directory and library name.
5408c3c9db83Smrg	if test "X$installed" = Xyes; then
5409c3c9db83Smrg	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
5410c3c9db83Smrg	    func_warning "library \`$lib' was moved."
5411c3c9db83Smrg	    dir="$ladir"
5412c3c9db83Smrg	    absdir="$abs_ladir"
5413c3c9db83Smrg	    libdir="$abs_ladir"
5414c3c9db83Smrg	  else
5415c3c9db83Smrg	    dir="$libdir"
5416c3c9db83Smrg	    absdir="$libdir"
5417c3c9db83Smrg	  fi
5418c3c9db83Smrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
5419c3c9db83Smrg	else
5420c3c9db83Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
5421c3c9db83Smrg	    dir="$ladir"
5422c3c9db83Smrg	    absdir="$abs_ladir"
5423c3c9db83Smrg	    # Remove this search path later
5424c3c9db83Smrg	    notinst_path="$notinst_path $abs_ladir"
5425c3c9db83Smrg	  else
5426c3c9db83Smrg	    dir="$ladir/$objdir"
5427c3c9db83Smrg	    absdir="$abs_ladir/$objdir"
5428c3c9db83Smrg	    # Remove this search path later
5429c3c9db83Smrg	    notinst_path="$notinst_path $abs_ladir"
5430c3c9db83Smrg	  fi
5431c3c9db83Smrg	fi # $installed = yes
5432c3c9db83Smrg	func_stripname 'lib' '.la' "$laname"
5433c3c9db83Smrg	name=$func_stripname_result
5434c3c9db83Smrg
5435c3c9db83Smrg	# This library was specified with -dlpreopen.
5436c3c9db83Smrg	if test "$pass" = dlpreopen; then
5437c3c9db83Smrg	  if test -z "$libdir" && test "$linkmode" = prog; then
5438c3c9db83Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
5439c3c9db83Smrg	  fi
5440c3c9db83Smrg	  # Prefer using a static library (so that no silly _DYNAMIC symbols
5441c3c9db83Smrg	  # are required to link).
5442c3c9db83Smrg	  if test -n "$old_library"; then
5443c3c9db83Smrg	    newdlprefiles="$newdlprefiles $dir/$old_library"
5444c3c9db83Smrg	    # Keep a list of preopened convenience libraries to check
5445c3c9db83Smrg	    # that they are being used correctly in the link pass.
5446c3c9db83Smrg	    test -z "$libdir" && \
5447c3c9db83Smrg		dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
5448c3c9db83Smrg	  # Otherwise, use the dlname, so that lt_dlopen finds it.
5449c3c9db83Smrg	  elif test -n "$dlname"; then
5450c3c9db83Smrg	    newdlprefiles="$newdlprefiles $dir/$dlname"
5451c3c9db83Smrg	  else
5452c3c9db83Smrg	    newdlprefiles="$newdlprefiles $dir/$linklib"
5453c3c9db83Smrg	  fi
5454c3c9db83Smrg	fi # $pass = dlpreopen
5455c3c9db83Smrg
5456c3c9db83Smrg	if test -z "$libdir"; then
5457c3c9db83Smrg	  # Link the convenience library
5458c3c9db83Smrg	  if test "$linkmode" = lib; then
5459c3c9db83Smrg	    deplibs="$dir/$old_library $deplibs"
5460c3c9db83Smrg	  elif test "$linkmode,$pass" = "prog,link"; then
5461c3c9db83Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
5462c3c9db83Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
5463c3c9db83Smrg	  else
5464c3c9db83Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
5465c3c9db83Smrg	  fi
5466c3c9db83Smrg	  continue
5467c3c9db83Smrg	fi
5468c3c9db83Smrg
5469c3c9db83Smrg
5470c3c9db83Smrg	if test "$linkmode" = prog && test "$pass" != link; then
5471c3c9db83Smrg	  newlib_search_path="$newlib_search_path $ladir"
5472c3c9db83Smrg	  deplibs="$lib $deplibs"
5473c3c9db83Smrg
5474c3c9db83Smrg	  linkalldeplibs=no
5475c3c9db83Smrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
5476c3c9db83Smrg	     test "$build_libtool_libs" = no; then
5477c3c9db83Smrg	    linkalldeplibs=yes
5478c3c9db83Smrg	  fi
5479c3c9db83Smrg
5480c3c9db83Smrg	  tmp_libs=
5481c3c9db83Smrg	  for deplib in $dependency_libs; do
5482c3c9db83Smrg	    case $deplib in
5483c3c9db83Smrg	    -L*) func_stripname '-L' '' "$deplib"
5484c3c9db83Smrg	         newlib_search_path="$newlib_search_path $func_stripname_result"
5485c3c9db83Smrg		 ;;
5486c3c9db83Smrg	    esac
5487c3c9db83Smrg	    # Need to link against all dependency_libs?
5488c3c9db83Smrg	    if test "$linkalldeplibs" = yes; then
5489c3c9db83Smrg	      deplibs="$deplib $deplibs"
5490c3c9db83Smrg	    else
5491c3c9db83Smrg	      # Need to hardcode shared library paths
5492c3c9db83Smrg	      # or/and link against static libraries
5493c3c9db83Smrg	      newdependency_libs="$deplib $newdependency_libs"
5494c3c9db83Smrg	    fi
5495c3c9db83Smrg	    if $opt_duplicate_deps ; then
5496c3c9db83Smrg	      case "$tmp_libs " in
5497c3c9db83Smrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
5498c3c9db83Smrg	      esac
5499c3c9db83Smrg	    fi
5500c3c9db83Smrg	    tmp_libs="$tmp_libs $deplib"
5501c3c9db83Smrg	  done # for deplib
5502c3c9db83Smrg	  continue
5503c3c9db83Smrg	fi # $linkmode = prog...
5504c3c9db83Smrg
5505c3c9db83Smrg	if test "$linkmode,$pass" = "prog,link"; then
5506c3c9db83Smrg	  if test -n "$library_names" &&
5507c3c9db83Smrg	     { { test "$prefer_static_libs" = no ||
5508c3c9db83Smrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
5509c3c9db83Smrg	       test -z "$old_library"; }; then
5510c3c9db83Smrg	    # We need to hardcode the library path
5511c3c9db83Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
5512c3c9db83Smrg	      # Make sure the rpath contains only unique directories.
5513c3c9db83Smrg	      case "$temp_rpath:" in
5514c3c9db83Smrg	      *"$absdir:"*) ;;
5515c3c9db83Smrg	      *) temp_rpath="$temp_rpath$absdir:" ;;
5516c3c9db83Smrg	      esac
5517c3c9db83Smrg	    fi
5518c3c9db83Smrg
5519c3c9db83Smrg	    # Hardcode the library path.
5520c3c9db83Smrg	    # Skip directories that are in the system default run-time
5521c3c9db83Smrg	    # search path.
5522c3c9db83Smrg	    case " $sys_lib_dlsearch_path " in
5523c3c9db83Smrg	    *" $absdir "*) ;;
5524c3c9db83Smrg	    *)
5525c3c9db83Smrg	      case "$compile_rpath " in
5526c3c9db83Smrg	      *" $absdir "*) ;;
5527c3c9db83Smrg	      *) compile_rpath="$compile_rpath $absdir"
5528c3c9db83Smrg	      esac
5529c3c9db83Smrg	      ;;
5530c3c9db83Smrg	    esac
5531c3c9db83Smrg	    case " $sys_lib_dlsearch_path " in
5532c3c9db83Smrg	    *" $libdir "*) ;;
5533c3c9db83Smrg	    *)
5534c3c9db83Smrg	      case "$finalize_rpath " in
5535c3c9db83Smrg	      *" $libdir "*) ;;
5536c3c9db83Smrg	      *) finalize_rpath="$finalize_rpath $libdir"
5537c3c9db83Smrg	      esac
5538c3c9db83Smrg	      ;;
5539c3c9db83Smrg	    esac
5540c3c9db83Smrg	  fi # $linkmode,$pass = prog,link...
5541c3c9db83Smrg
5542c3c9db83Smrg	  if test "$alldeplibs" = yes &&
5543c3c9db83Smrg	     { test "$deplibs_check_method" = pass_all ||
5544c3c9db83Smrg	       { test "$build_libtool_libs" = yes &&
5545c3c9db83Smrg		 test -n "$library_names"; }; }; then
5546c3c9db83Smrg	    # We only need to search for static libraries
5547c3c9db83Smrg	    continue
5548c3c9db83Smrg	  fi
5549c3c9db83Smrg	fi
5550c3c9db83Smrg
5551c3c9db83Smrg	link_static=no # Whether the deplib will be linked statically
5552c3c9db83Smrg	use_static_libs=$prefer_static_libs
5553c3c9db83Smrg	if test "$use_static_libs" = built && test "$installed" = yes; then
5554c3c9db83Smrg	  use_static_libs=no
5555c3c9db83Smrg	fi
5556c3c9db83Smrg	if test -n "$library_names" &&
5557c3c9db83Smrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
5558c3c9db83Smrg	  case $host in
5559c3c9db83Smrg	  *cygwin* | *mingw* | *cegcc*)
5560c3c9db83Smrg	      # No point in relinking DLLs because paths are not encoded
5561c3c9db83Smrg	      notinst_deplibs="$notinst_deplibs $lib"
5562c3c9db83Smrg	      need_relink=no
5563c3c9db83Smrg	    ;;
5564c3c9db83Smrg	  *)
5565c3c9db83Smrg	    if test "$installed" = no; then
5566c3c9db83Smrg	      notinst_deplibs="$notinst_deplibs $lib"
5567c3c9db83Smrg	      need_relink=yes
5568c3c9db83Smrg	    fi
5569c3c9db83Smrg	    ;;
5570c3c9db83Smrg	  esac
5571c3c9db83Smrg	  # This is a shared library
5572c3c9db83Smrg
5573c3c9db83Smrg	  # Warn about portability, can't link against -module's on some
5574c3c9db83Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
5575c3c9db83Smrg	  dlopenmodule=""
5576c3c9db83Smrg	  for dlpremoduletest in $dlprefiles; do
5577c3c9db83Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
5578c3c9db83Smrg	      dlopenmodule="$dlpremoduletest"
5579c3c9db83Smrg	      break
5580c3c9db83Smrg	    fi
5581c3c9db83Smrg	  done
5582c3c9db83Smrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
5583c3c9db83Smrg	    $ECHO
5584c3c9db83Smrg	    if test "$linkmode" = prog; then
5585c3c9db83Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
5586c3c9db83Smrg	    else
5587c3c9db83Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
5588c3c9db83Smrg	    fi
5589c3c9db83Smrg	    $ECHO "*** $linklib is not portable!"
5590c3c9db83Smrg	  fi
5591c3c9db83Smrg	  if test "$linkmode" = lib &&
5592c3c9db83Smrg	     test "$hardcode_into_libs" = yes; then
5593c3c9db83Smrg	    # Hardcode the library path.
5594c3c9db83Smrg	    # Skip directories that are in the system default run-time
5595c3c9db83Smrg	    # search path.
5596c3c9db83Smrg	    case " $sys_lib_dlsearch_path " in
5597c3c9db83Smrg	    *" $absdir "*) ;;
5598c3c9db83Smrg	    *)
5599c3c9db83Smrg	      case "$compile_rpath " in
5600c3c9db83Smrg	      *" $absdir "*) ;;
5601c3c9db83Smrg	      *) compile_rpath="$compile_rpath $absdir"
5602c3c9db83Smrg	      esac
5603c3c9db83Smrg	      ;;
5604c3c9db83Smrg	    esac
5605c3c9db83Smrg	    case " $sys_lib_dlsearch_path " in
5606c3c9db83Smrg	    *" $libdir "*) ;;
5607c3c9db83Smrg	    *)
5608c3c9db83Smrg	      case "$finalize_rpath " in
5609c3c9db83Smrg	      *" $libdir "*) ;;
5610c3c9db83Smrg	      *) finalize_rpath="$finalize_rpath $libdir"
5611c3c9db83Smrg	      esac
5612c3c9db83Smrg	      ;;
5613c3c9db83Smrg	    esac
5614c3c9db83Smrg	  fi
5615c3c9db83Smrg
5616c3c9db83Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
5617c3c9db83Smrg	    # figure out the soname
5618c3c9db83Smrg	    set dummy $library_names
5619c3c9db83Smrg	    shift
5620c3c9db83Smrg	    realname="$1"
5621c3c9db83Smrg	    shift
5622c3c9db83Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
5623c3c9db83Smrg	    # use dlname if we got it. it's perfectly good, no?
5624c3c9db83Smrg	    if test -n "$dlname"; then
5625c3c9db83Smrg	      soname="$dlname"
5626c3c9db83Smrg	    elif test -n "$soname_spec"; then
5627c3c9db83Smrg	      # bleh windows
5628c3c9db83Smrg	      case $host in
5629c3c9db83Smrg	      *cygwin* | mingw* | *cegcc*)
5630c3c9db83Smrg	        func_arith $current - $age
5631c3c9db83Smrg		major=$func_arith_result
5632c3c9db83Smrg		versuffix="-$major"
5633c3c9db83Smrg		;;
5634c3c9db83Smrg	      esac
5635c3c9db83Smrg	      eval soname=\"$soname_spec\"
5636c3c9db83Smrg	    else
5637c3c9db83Smrg	      soname="$realname"
5638c3c9db83Smrg	    fi
5639c3c9db83Smrg
5640c3c9db83Smrg	    # Make a new name for the extract_expsyms_cmds to use
5641c3c9db83Smrg	    soroot="$soname"
5642c3c9db83Smrg	    func_basename "$soroot"
5643c3c9db83Smrg	    soname="$func_basename_result"
5644c3c9db83Smrg	    func_stripname 'lib' '.dll' "$soname"
5645c3c9db83Smrg	    newlib=libimp-$func_stripname_result.a
5646c3c9db83Smrg
5647c3c9db83Smrg	    # If the library has no export list, then create one now
5648c3c9db83Smrg	    if test -f "$output_objdir/$soname-def"; then :
5649c3c9db83Smrg	    else
5650c3c9db83Smrg	      func_verbose "extracting exported symbol list from \`$soname'"
5651c3c9db83Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
5652c3c9db83Smrg	    fi
5653c3c9db83Smrg
5654c3c9db83Smrg	    # Create $newlib
5655c3c9db83Smrg	    if test -f "$output_objdir/$newlib"; then :; else
5656c3c9db83Smrg	      func_verbose "generating import library for \`$soname'"
5657c3c9db83Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
5658c3c9db83Smrg	    fi
5659c3c9db83Smrg	    # make sure the library variables are pointing to the new library
5660c3c9db83Smrg	    dir=$output_objdir
5661c3c9db83Smrg	    linklib=$newlib
5662c3c9db83Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
5663c3c9db83Smrg
5664c3c9db83Smrg	  if test "$linkmode" = prog || test "$mode" != relink; then
5665c3c9db83Smrg	    add_shlibpath=
5666c3c9db83Smrg	    add_dir=
5667c3c9db83Smrg	    add=
5668c3c9db83Smrg	    lib_linked=yes
5669c3c9db83Smrg	    case $hardcode_action in
5670c3c9db83Smrg	    immediate | unsupported)
5671c3c9db83Smrg	      if test "$hardcode_direct" = no; then
5672c3c9db83Smrg		add="$dir/$linklib"
5673c3c9db83Smrg		case $host in
5674c3c9db83Smrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
5675c3c9db83Smrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
5676c3c9db83Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
5677c3c9db83Smrg		    *-*-unixware7*) add_dir="-L$dir" ;;
5678c3c9db83Smrg		  *-*-darwin* )
5679c3c9db83Smrg		    # if the lib is a (non-dlopened) module then we can not
5680c3c9db83Smrg		    # link against it, someone is ignoring the earlier warnings
5681c3c9db83Smrg		    if /usr/bin/file -L $add 2> /dev/null |
5682c3c9db83Smrg			 $GREP ": [^:]* bundle" >/dev/null ; then
5683c3c9db83Smrg		      if test "X$dlopenmodule" != "X$lib"; then
5684c3c9db83Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
5685c3c9db83Smrg			if test -z "$old_library" ; then
5686c3c9db83Smrg			  $ECHO
5687c3c9db83Smrg			  $ECHO "*** And there doesn't seem to be a static archive available"
5688c3c9db83Smrg			  $ECHO "*** The link will probably fail, sorry"
5689c3c9db83Smrg			else
5690c3c9db83Smrg			  add="$dir/$old_library"
5691c3c9db83Smrg			fi
5692c3c9db83Smrg		      elif test -n "$old_library"; then
5693c3c9db83Smrg			add="$dir/$old_library"
5694c3c9db83Smrg		      fi
5695c3c9db83Smrg		    fi
5696c3c9db83Smrg		esac
5697c3c9db83Smrg	      elif test "$hardcode_minus_L" = no; then
5698c3c9db83Smrg		case $host in
5699c3c9db83Smrg		*-*-sunos*) add_shlibpath="$dir" ;;
5700c3c9db83Smrg		esac
5701c3c9db83Smrg		add_dir="-L$dir"
5702c3c9db83Smrg		add="-l$name"
5703c3c9db83Smrg	      elif test "$hardcode_shlibpath_var" = no; then
5704c3c9db83Smrg		add_shlibpath="$dir"
5705c3c9db83Smrg		add="-l$name"
5706c3c9db83Smrg	      else
5707c3c9db83Smrg		lib_linked=no
5708c3c9db83Smrg	      fi
5709c3c9db83Smrg	      ;;
5710c3c9db83Smrg	    relink)
5711c3c9db83Smrg	      if test "$hardcode_direct" = yes &&
5712c3c9db83Smrg	         test "$hardcode_direct_absolute" = no; then
5713c3c9db83Smrg		add="$dir/$linklib"
5714c3c9db83Smrg	      elif test "$hardcode_minus_L" = yes; then
5715c3c9db83Smrg		add_dir="-L$dir"
5716c3c9db83Smrg		# Try looking first in the location we're being installed to.
5717c3c9db83Smrg		if test -n "$inst_prefix_dir"; then
5718c3c9db83Smrg		  case $libdir in
5719c3c9db83Smrg		    [\\/]*)
5720c3c9db83Smrg		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
5721c3c9db83Smrg		      ;;
5722c3c9db83Smrg		  esac
5723c3c9db83Smrg		fi
5724c3c9db83Smrg		add="-l$name"
5725c3c9db83Smrg	      elif test "$hardcode_shlibpath_var" = yes; then
5726c3c9db83Smrg		add_shlibpath="$dir"
5727c3c9db83Smrg		add="-l$name"
5728c3c9db83Smrg	      else
5729c3c9db83Smrg		lib_linked=no
5730c3c9db83Smrg	      fi
5731c3c9db83Smrg	      ;;
5732c3c9db83Smrg	    *) lib_linked=no ;;
5733c3c9db83Smrg	    esac
5734c3c9db83Smrg
5735c3c9db83Smrg	    if test "$lib_linked" != yes; then
5736c3c9db83Smrg	      func_fatal_configuration "unsupported hardcode properties"
5737c3c9db83Smrg	    fi
5738c3c9db83Smrg
5739c3c9db83Smrg	    if test -n "$add_shlibpath"; then
5740c3c9db83Smrg	      case :$compile_shlibpath: in
5741c3c9db83Smrg	      *":$add_shlibpath:"*) ;;
5742c3c9db83Smrg	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
5743c3c9db83Smrg	      esac
5744c3c9db83Smrg	    fi
5745c3c9db83Smrg	    if test "$linkmode" = prog; then
5746c3c9db83Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
5747c3c9db83Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
5748c3c9db83Smrg	    else
5749c3c9db83Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
5750c3c9db83Smrg	      test -n "$add" && deplibs="$add $deplibs"
5751c3c9db83Smrg	      if test "$hardcode_direct" != yes &&
5752c3c9db83Smrg		 test "$hardcode_minus_L" != yes &&
5753c3c9db83Smrg		 test "$hardcode_shlibpath_var" = yes; then
5754c3c9db83Smrg		case :$finalize_shlibpath: in
5755c3c9db83Smrg		*":$libdir:"*) ;;
5756c3c9db83Smrg		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
5757c3c9db83Smrg		esac
5758c3c9db83Smrg	      fi
5759c3c9db83Smrg	    fi
5760c3c9db83Smrg	  fi
5761c3c9db83Smrg
5762c3c9db83Smrg	  if test "$linkmode" = prog || test "$mode" = relink; then
5763c3c9db83Smrg	    add_shlibpath=
5764c3c9db83Smrg	    add_dir=
5765c3c9db83Smrg	    add=
5766c3c9db83Smrg	    # Finalize command for both is simple: just hardcode it.
5767c3c9db83Smrg	    if test "$hardcode_direct" = yes &&
5768c3c9db83Smrg	       test "$hardcode_direct_absolute" = no; then
5769c3c9db83Smrg	      add="$libdir/$linklib"
5770c3c9db83Smrg	    elif test "$hardcode_minus_L" = yes; then
5771c3c9db83Smrg	      add_dir="-L$libdir"
5772c3c9db83Smrg	      add="-l$name"
5773c3c9db83Smrg	    elif test "$hardcode_shlibpath_var" = yes; then
5774c3c9db83Smrg	      case :$finalize_shlibpath: in
5775c3c9db83Smrg	      *":$libdir:"*) ;;
5776c3c9db83Smrg	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
5777c3c9db83Smrg	      esac
5778c3c9db83Smrg	      add="-l$name"
5779c3c9db83Smrg	    elif test "$hardcode_automatic" = yes; then
5780c3c9db83Smrg	      if test -n "$inst_prefix_dir" &&
5781c3c9db83Smrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
5782c3c9db83Smrg		add="$inst_prefix_dir$libdir/$linklib"
5783c3c9db83Smrg	      else
5784c3c9db83Smrg		add="$libdir/$linklib"
5785c3c9db83Smrg	      fi
5786c3c9db83Smrg	    else
5787c3c9db83Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
5788c3c9db83Smrg	      add_dir="-L$libdir"
5789c3c9db83Smrg	      # Try looking first in the location we're being installed to.
5790c3c9db83Smrg	      if test -n "$inst_prefix_dir"; then
5791c3c9db83Smrg		case $libdir in
5792c3c9db83Smrg		  [\\/]*)
5793c3c9db83Smrg		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
5794c3c9db83Smrg		    ;;
5795c3c9db83Smrg		esac
5796c3c9db83Smrg	      fi
5797c3c9db83Smrg	      add="-l$name"
5798c3c9db83Smrg	    fi
5799c3c9db83Smrg
5800c3c9db83Smrg	    if test "$linkmode" = prog; then
5801c3c9db83Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
5802c3c9db83Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
5803c3c9db83Smrg	    else
5804c3c9db83Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
5805c3c9db83Smrg	      test -n "$add" && deplibs="$add $deplibs"
5806c3c9db83Smrg	    fi
5807c3c9db83Smrg	  fi
5808c3c9db83Smrg	elif test "$linkmode" = prog; then
5809c3c9db83Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
5810c3c9db83Smrg	  # is not unsupported.  This is valid on all known static and
5811c3c9db83Smrg	  # shared platforms.
5812c3c9db83Smrg	  if test "$hardcode_direct" != unsupported; then
5813c3c9db83Smrg	    test -n "$old_library" && linklib="$old_library"
5814c3c9db83Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
5815c3c9db83Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
5816c3c9db83Smrg	  else
5817c3c9db83Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
5818c3c9db83Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
5819c3c9db83Smrg	  fi
5820c3c9db83Smrg	elif test "$build_libtool_libs" = yes; then
5821c3c9db83Smrg	  # Not a shared library
5822c3c9db83Smrg	  if test "$deplibs_check_method" != pass_all; then
5823c3c9db83Smrg	    # We're trying link a shared library against a static one
5824c3c9db83Smrg	    # but the system doesn't support it.
5825c3c9db83Smrg
5826c3c9db83Smrg	    # Just print a warning and add the library to dependency_libs so
5827c3c9db83Smrg	    # that the program can be linked against the static library.
5828c3c9db83Smrg	    $ECHO
5829c3c9db83Smrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
5830c3c9db83Smrg	    $ECHO "*** I have the capability to make that library automatically link in when"
5831c3c9db83Smrg	    $ECHO "*** you link to this library.  But I can only do this if you have a"
5832c3c9db83Smrg	    $ECHO "*** shared version of the library, which you do not appear to have."
5833c3c9db83Smrg	    if test "$module" = yes; then
5834c3c9db83Smrg	      $ECHO "*** But as you try to build a module library, libtool will still create "
5835c3c9db83Smrg	      $ECHO "*** a static module, that should work as long as the dlopening application"
5836c3c9db83Smrg	      $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
5837c3c9db83Smrg	      if test -z "$global_symbol_pipe"; then
5838c3c9db83Smrg		$ECHO
5839c3c9db83Smrg		$ECHO "*** However, this would only work if libtool was able to extract symbol"
5840c3c9db83Smrg		$ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
5841c3c9db83Smrg		$ECHO "*** not find such a program.  So, this module is probably useless."
5842c3c9db83Smrg		$ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
5843c3c9db83Smrg	      fi
5844c3c9db83Smrg	      if test "$build_old_libs" = no; then
5845c3c9db83Smrg		build_libtool_libs=module
5846c3c9db83Smrg		build_old_libs=yes
5847c3c9db83Smrg	      else
5848c3c9db83Smrg		build_libtool_libs=no
5849c3c9db83Smrg	      fi
5850c3c9db83Smrg	    fi
5851c3c9db83Smrg	  else
5852c3c9db83Smrg	    deplibs="$dir/$old_library $deplibs"
5853c3c9db83Smrg	    link_static=yes
5854c3c9db83Smrg	  fi
5855c3c9db83Smrg	fi # link shared/static library?
5856c3c9db83Smrg
5857c3c9db83Smrg	if test "$linkmode" = lib; then
5858c3c9db83Smrg	  if test -n "$dependency_libs" &&
5859c3c9db83Smrg	     { test "$hardcode_into_libs" != yes ||
5860c3c9db83Smrg	       test "$build_old_libs" = yes ||
5861c3c9db83Smrg	       test "$link_static" = yes; }; then
5862c3c9db83Smrg	    # Extract -R from dependency_libs
5863c3c9db83Smrg	    temp_deplibs=
5864c3c9db83Smrg	    for libdir in $dependency_libs; do
5865c3c9db83Smrg	      case $libdir in
5866c3c9db83Smrg	      -R*) func_stripname '-R' '' "$libdir"
5867c3c9db83Smrg	           temp_xrpath=$func_stripname_result
5868c3c9db83Smrg		   case " $xrpath " in
5869c3c9db83Smrg		   *" $temp_xrpath "*) ;;
5870c3c9db83Smrg		   *) xrpath="$xrpath $temp_xrpath";;
5871c3c9db83Smrg		   esac;;
5872c3c9db83Smrg	      *) temp_deplibs="$temp_deplibs $libdir";;
5873c3c9db83Smrg	      esac
5874c3c9db83Smrg	    done
5875c3c9db83Smrg	    dependency_libs="$temp_deplibs"
5876c3c9db83Smrg	  fi
5877c3c9db83Smrg
5878c3c9db83Smrg	  newlib_search_path="$newlib_search_path $absdir"
5879c3c9db83Smrg	  # Link against this library
5880c3c9db83Smrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
5881c3c9db83Smrg	  # ... and its dependency_libs
5882c3c9db83Smrg	  tmp_libs=
5883c3c9db83Smrg	  for deplib in $dependency_libs; do
5884c3c9db83Smrg	    newdependency_libs="$deplib $newdependency_libs"
5885c3c9db83Smrg	    if $opt_duplicate_deps ; then
5886c3c9db83Smrg	      case "$tmp_libs " in
5887c3c9db83Smrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
5888c3c9db83Smrg	      esac
5889c3c9db83Smrg	    fi
5890c3c9db83Smrg	    tmp_libs="$tmp_libs $deplib"
5891c3c9db83Smrg	  done
5892c3c9db83Smrg
5893c3c9db83Smrg	  if test "$link_all_deplibs" != no; then
5894c3c9db83Smrg	    # Add the search paths of all dependency libraries
5895c3c9db83Smrg	    for deplib in $dependency_libs; do
5896c3c9db83Smrg	      case $deplib in
5897c3c9db83Smrg	      -L*) path="$deplib" ;;
5898c3c9db83Smrg	      *.la)
5899c3c9db83Smrg	        func_dirname "$deplib" "" "."
5900c3c9db83Smrg		dir="$func_dirname_result"
5901c3c9db83Smrg		# We need an absolute path.
5902c3c9db83Smrg		case $dir in
5903c3c9db83Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
5904c3c9db83Smrg		*)
5905c3c9db83Smrg		  absdir=`cd "$dir" && pwd`
5906c3c9db83Smrg		  if test -z "$absdir"; then
5907c3c9db83Smrg		    func_warning "cannot determine absolute directory name of \`$dir'"
5908c3c9db83Smrg		    absdir="$dir"
5909c3c9db83Smrg		  fi
5910c3c9db83Smrg		  ;;
5911c3c9db83Smrg		esac
5912c3c9db83Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
5913c3c9db83Smrg		case $host in
5914c3c9db83Smrg		*-*-darwin*)
5915c3c9db83Smrg		  depdepl=
5916c3c9db83Smrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
5917c3c9db83Smrg		  if test -n "$deplibrary_names" ; then
5918c3c9db83Smrg		    for tmp in $deplibrary_names ; do
5919c3c9db83Smrg		      depdepl=$tmp
5920c3c9db83Smrg		    done
5921c3c9db83Smrg		    if test -f "$absdir/$objdir/$depdepl" ; then
5922c3c9db83Smrg		      depdepl="$absdir/$objdir/$depdepl"
5923c3c9db83Smrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
5924c3c9db83Smrg                      if test -z "$darwin_install_name"; then
5925c3c9db83Smrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
5926c3c9db83Smrg                      fi
5927c3c9db83Smrg		      compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
5928c3c9db83Smrg		      linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
5929c3c9db83Smrg		      path=
5930c3c9db83Smrg		    fi
5931c3c9db83Smrg		  fi
5932c3c9db83Smrg		  ;;
5933c3c9db83Smrg		*)
5934c3c9db83Smrg		  path="-L$absdir/$objdir"
5935c3c9db83Smrg		  ;;
5936c3c9db83Smrg		esac
5937c3c9db83Smrg		else
5938c3c9db83Smrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
5939c3c9db83Smrg		  test -z "$libdir" && \
5940c3c9db83Smrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
5941c3c9db83Smrg		  test "$absdir" != "$libdir" && \
5942c3c9db83Smrg		    func_warning "\`$deplib' seems to be moved"
5943c3c9db83Smrg
5944c3c9db83Smrg		  path="-L$absdir"
5945c3c9db83Smrg		fi
5946c3c9db83Smrg		;;
5947c3c9db83Smrg	      esac
5948c3c9db83Smrg	      case " $deplibs " in
5949c3c9db83Smrg	      *" $path "*) ;;
5950c3c9db83Smrg	      *) deplibs="$path $deplibs" ;;
5951c3c9db83Smrg	      esac
5952c3c9db83Smrg	    done
5953c3c9db83Smrg	  fi # link_all_deplibs != no
5954c3c9db83Smrg	fi # linkmode = lib
5955c3c9db83Smrg      done # for deplib in $libs
5956c3c9db83Smrg      if test "$pass" = link; then
5957c3c9db83Smrg	if test "$linkmode" = "prog"; then
5958c3c9db83Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
5959c3c9db83Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
5960c3c9db83Smrg	else
5961c3c9db83Smrg	  compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
5962c3c9db83Smrg	fi
5963c3c9db83Smrg      fi
5964c3c9db83Smrg      dependency_libs="$newdependency_libs"
5965c3c9db83Smrg      if test "$pass" = dlpreopen; then
5966c3c9db83Smrg	# Link the dlpreopened libraries before other libraries
5967c3c9db83Smrg	for deplib in $save_deplibs; do
5968c3c9db83Smrg	  deplibs="$deplib $deplibs"
5969c3c9db83Smrg	done
5970c3c9db83Smrg      fi
5971c3c9db83Smrg      if test "$pass" != dlopen; then
5972c3c9db83Smrg	if test "$pass" != conv; then
5973c3c9db83Smrg	  # Make sure lib_search_path contains only unique directories.
5974c3c9db83Smrg	  lib_search_path=
5975c3c9db83Smrg	  for dir in $newlib_search_path; do
5976c3c9db83Smrg	    case "$lib_search_path " in
5977c3c9db83Smrg	    *" $dir "*) ;;
5978c3c9db83Smrg	    *) lib_search_path="$lib_search_path $dir" ;;
5979c3c9db83Smrg	    esac
5980c3c9db83Smrg	  done
5981c3c9db83Smrg	  newlib_search_path=
5982c3c9db83Smrg	fi
5983c3c9db83Smrg
5984c3c9db83Smrg	if test "$linkmode,$pass" != "prog,link"; then
5985c3c9db83Smrg	  vars="deplibs"
5986c3c9db83Smrg	else
5987c3c9db83Smrg	  vars="compile_deplibs finalize_deplibs"
5988c3c9db83Smrg	fi
5989c3c9db83Smrg	for var in $vars dependency_libs; do
5990c3c9db83Smrg	  # Add libraries to $var in reverse order
5991c3c9db83Smrg	  eval tmp_libs=\"\$$var\"
5992c3c9db83Smrg	  new_libs=
5993c3c9db83Smrg	  for deplib in $tmp_libs; do
5994c3c9db83Smrg	    # FIXME: Pedantically, this is the right thing to do, so
5995c3c9db83Smrg	    #        that some nasty dependency loop isn't accidentally
5996c3c9db83Smrg	    #        broken:
5997c3c9db83Smrg	    #new_libs="$deplib $new_libs"
5998c3c9db83Smrg	    # Pragmatically, this seems to cause very few problems in
5999c3c9db83Smrg	    # practice:
6000c3c9db83Smrg	    case $deplib in
6001c3c9db83Smrg	    -L*) new_libs="$deplib $new_libs" ;;
6002c3c9db83Smrg	    -R*) ;;
6003c3c9db83Smrg	    *)
6004c3c9db83Smrg	      # And here is the reason: when a library appears more
6005c3c9db83Smrg	      # than once as an explicit dependence of a library, or
6006c3c9db83Smrg	      # is implicitly linked in more than once by the
6007c3c9db83Smrg	      # compiler, it is considered special, and multiple
6008c3c9db83Smrg	      # occurrences thereof are not removed.  Compare this
6009c3c9db83Smrg	      # with having the same library being listed as a
6010c3c9db83Smrg	      # dependency of multiple other libraries: in this case,
6011c3c9db83Smrg	      # we know (pedantically, we assume) the library does not
6012c3c9db83Smrg	      # need to be listed more than once, so we keep only the
6013c3c9db83Smrg	      # last copy.  This is not always right, but it is rare
6014c3c9db83Smrg	      # enough that we require users that really mean to play
6015c3c9db83Smrg	      # such unportable linking tricks to link the library
6016c3c9db83Smrg	      # using -Wl,-lname, so that libtool does not consider it
6017c3c9db83Smrg	      # for duplicate removal.
6018c3c9db83Smrg	      case " $specialdeplibs " in
6019c3c9db83Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
6020c3c9db83Smrg	      *)
6021c3c9db83Smrg		case " $new_libs " in
6022c3c9db83Smrg		*" $deplib "*) ;;
6023c3c9db83Smrg		*) new_libs="$deplib $new_libs" ;;
6024c3c9db83Smrg		esac
6025c3c9db83Smrg		;;
6026c3c9db83Smrg	      esac
6027c3c9db83Smrg	      ;;
6028c3c9db83Smrg	    esac
6029c3c9db83Smrg	  done
6030c3c9db83Smrg	  tmp_libs=
6031c3c9db83Smrg	  for deplib in $new_libs; do
6032c3c9db83Smrg	    case $deplib in
6033c3c9db83Smrg	    -L*)
6034c3c9db83Smrg	      case " $tmp_libs " in
6035c3c9db83Smrg	      *" $deplib "*) ;;
6036c3c9db83Smrg	      *) tmp_libs="$tmp_libs $deplib" ;;
6037c3c9db83Smrg	      esac
6038c3c9db83Smrg	      ;;
6039c3c9db83Smrg	    *) tmp_libs="$tmp_libs $deplib" ;;
6040c3c9db83Smrg	    esac
6041c3c9db83Smrg	  done
6042c3c9db83Smrg	  eval $var=\"$tmp_libs\"
6043c3c9db83Smrg	done # for var
6044c3c9db83Smrg      fi
6045c3c9db83Smrg      # Last step: remove runtime libs from dependency_libs
6046c3c9db83Smrg      # (they stay in deplibs)
6047c3c9db83Smrg      tmp_libs=
6048c3c9db83Smrg      for i in $dependency_libs ; do
6049c3c9db83Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
6050c3c9db83Smrg	*" $i "*)
6051c3c9db83Smrg	  i=""
6052c3c9db83Smrg	  ;;
6053c3c9db83Smrg	esac
6054c3c9db83Smrg	if test -n "$i" ; then
6055c3c9db83Smrg	  tmp_libs="$tmp_libs $i"
6056c3c9db83Smrg	fi
6057c3c9db83Smrg      done
6058c3c9db83Smrg      dependency_libs=$tmp_libs
6059c3c9db83Smrg    done # for pass
6060c3c9db83Smrg    if test "$linkmode" = prog; then
6061c3c9db83Smrg      dlfiles="$newdlfiles"
6062c3c9db83Smrg    fi
6063c3c9db83Smrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
6064c3c9db83Smrg      dlprefiles="$newdlprefiles"
6065c3c9db83Smrg    fi
6066c3c9db83Smrg
6067c3c9db83Smrg    case $linkmode in
6068c3c9db83Smrg    oldlib)
6069c3c9db83Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
6070c3c9db83Smrg	func_warning "\`-dlopen' is ignored for archives"
6071c3c9db83Smrg      fi
6072c3c9db83Smrg
6073c3c9db83Smrg      case " $deplibs" in
6074c3c9db83Smrg      *\ -l* | *\ -L*)
6075c3c9db83Smrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
6076c3c9db83Smrg      esac
6077c3c9db83Smrg
6078c3c9db83Smrg      test -n "$rpath" && \
6079c3c9db83Smrg	func_warning "\`-rpath' is ignored for archives"
6080c3c9db83Smrg
6081c3c9db83Smrg      test -n "$xrpath" && \
6082c3c9db83Smrg	func_warning "\`-R' is ignored for archives"
6083c3c9db83Smrg
6084c3c9db83Smrg      test -n "$vinfo" && \
6085c3c9db83Smrg	func_warning "\`-version-info/-version-number' is ignored for archives"
6086c3c9db83Smrg
6087c3c9db83Smrg      test -n "$release" && \
6088c3c9db83Smrg	func_warning "\`-release' is ignored for archives"
6089c3c9db83Smrg
6090c3c9db83Smrg      test -n "$export_symbols$export_symbols_regex" && \
6091c3c9db83Smrg	func_warning "\`-export-symbols' is ignored for archives"
6092c3c9db83Smrg
6093c3c9db83Smrg      # Now set the variables for building old libraries.
6094c3c9db83Smrg      build_libtool_libs=no
6095c3c9db83Smrg      oldlibs="$output"
6096c3c9db83Smrg      objs="$objs$old_deplibs"
6097c3c9db83Smrg      ;;
6098c3c9db83Smrg
6099c3c9db83Smrg    lib)
6100c3c9db83Smrg      # Make sure we only generate libraries of the form `libNAME.la'.
6101c3c9db83Smrg      case $outputname in
6102c3c9db83Smrg      lib*)
6103c3c9db83Smrg	func_stripname 'lib' '.la' "$outputname"
6104c3c9db83Smrg	name=$func_stripname_result
6105c3c9db83Smrg	eval shared_ext=\"$shrext_cmds\"
6106c3c9db83Smrg	eval libname=\"$libname_spec\"
6107c3c9db83Smrg	;;
6108c3c9db83Smrg      *)
6109c3c9db83Smrg	test "$module" = no && \
6110c3c9db83Smrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
6111c3c9db83Smrg
6112c3c9db83Smrg	if test "$need_lib_prefix" != no; then
6113c3c9db83Smrg	  # Add the "lib" prefix for modules if required
6114c3c9db83Smrg	  func_stripname '' '.la' "$outputname"
6115c3c9db83Smrg	  name=$func_stripname_result
6116c3c9db83Smrg	  eval shared_ext=\"$shrext_cmds\"
6117c3c9db83Smrg	  eval libname=\"$libname_spec\"
6118c3c9db83Smrg	else
6119c3c9db83Smrg	  func_stripname '' '.la' "$outputname"
6120c3c9db83Smrg	  libname=$func_stripname_result
6121c3c9db83Smrg	fi
6122c3c9db83Smrg	;;
6123c3c9db83Smrg      esac
6124c3c9db83Smrg
6125c3c9db83Smrg      if test -n "$objs"; then
6126c3c9db83Smrg	if test "$deplibs_check_method" != pass_all; then
6127c3c9db83Smrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
6128c3c9db83Smrg	else
6129c3c9db83Smrg	  $ECHO
6130c3c9db83Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
6131c3c9db83Smrg	  $ECHO "*** objects $objs is not portable!"
6132c3c9db83Smrg	  libobjs="$libobjs $objs"
6133c3c9db83Smrg	fi
6134c3c9db83Smrg      fi
6135c3c9db83Smrg
6136c3c9db83Smrg      test "$dlself" != no && \
6137c3c9db83Smrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
6138c3c9db83Smrg
6139c3c9db83Smrg      set dummy $rpath
6140c3c9db83Smrg      shift
6141c3c9db83Smrg      test "$#" -gt 1 && \
6142c3c9db83Smrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
6143c3c9db83Smrg
6144c3c9db83Smrg      install_libdir="$1"
6145c3c9db83Smrg
6146c3c9db83Smrg      oldlibs=
6147c3c9db83Smrg      if test -z "$rpath"; then
6148c3c9db83Smrg	if test "$build_libtool_libs" = yes; then
6149c3c9db83Smrg	  # Building a libtool convenience library.
6150c3c9db83Smrg	  # Some compilers have problems with a `.al' extension so
6151c3c9db83Smrg	  # convenience libraries should have the same extension an
6152c3c9db83Smrg	  # archive normally would.
6153c3c9db83Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
6154c3c9db83Smrg	  build_libtool_libs=convenience
6155c3c9db83Smrg	  build_old_libs=yes
6156c3c9db83Smrg	fi
6157c3c9db83Smrg
6158c3c9db83Smrg	test -n "$vinfo" && \
6159c3c9db83Smrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
6160c3c9db83Smrg
6161c3c9db83Smrg	test -n "$release" && \
6162c3c9db83Smrg	  func_warning "\`-release' is ignored for convenience libraries"
6163c3c9db83Smrg      else
6164c3c9db83Smrg
6165c3c9db83Smrg	# Parse the version information argument.
6166c3c9db83Smrg	save_ifs="$IFS"; IFS=':'
6167c3c9db83Smrg	set dummy $vinfo 0 0 0
6168c3c9db83Smrg	shift
6169c3c9db83Smrg	IFS="$save_ifs"
6170c3c9db83Smrg
6171c3c9db83Smrg	test -n "$7" && \
6172c3c9db83Smrg	  func_fatal_help "too many parameters to \`-version-info'"
6173c3c9db83Smrg
6174c3c9db83Smrg	# convert absolute version numbers to libtool ages
6175c3c9db83Smrg	# this retains compatibility with .la files and attempts
6176c3c9db83Smrg	# to make the code below a bit more comprehensible
6177c3c9db83Smrg
6178c3c9db83Smrg	case $vinfo_number in
6179c3c9db83Smrg	yes)
6180c3c9db83Smrg	  number_major="$1"
6181c3c9db83Smrg	  number_minor="$2"
6182c3c9db83Smrg	  number_revision="$3"
6183c3c9db83Smrg	  #
6184c3c9db83Smrg	  # There are really only two kinds -- those that
6185c3c9db83Smrg	  # use the current revision as the major version
6186c3c9db83Smrg	  # and those that subtract age and use age as
6187c3c9db83Smrg	  # a minor version.  But, then there is irix
6188c3c9db83Smrg	  # which has an extra 1 added just for fun
6189c3c9db83Smrg	  #
6190c3c9db83Smrg	  case $version_type in
6191c3c9db83Smrg	  darwin|linux|osf|windows|none)
6192c3c9db83Smrg	    func_arith $number_major + $number_minor
6193c3c9db83Smrg	    current=$func_arith_result
6194c3c9db83Smrg	    age="$number_minor"
6195c3c9db83Smrg	    revision="$number_revision"
6196c3c9db83Smrg	    ;;
6197c3c9db83Smrg	  freebsd-aout|freebsd-elf|sunos)
6198c3c9db83Smrg	    current="$number_major"
6199c3c9db83Smrg	    revision="$number_minor"
6200c3c9db83Smrg	    age="0"
6201c3c9db83Smrg	    ;;
6202c3c9db83Smrg	  irix|nonstopux)
6203c3c9db83Smrg	    func_arith $number_major + $number_minor
6204c3c9db83Smrg	    current=$func_arith_result
6205c3c9db83Smrg	    age="$number_minor"
6206c3c9db83Smrg	    revision="$number_minor"
6207c3c9db83Smrg	    lt_irix_increment=no
6208c3c9db83Smrg	    ;;
6209c3c9db83Smrg	  esac
6210c3c9db83Smrg	  ;;
6211c3c9db83Smrg	no)
6212c3c9db83Smrg	  current="$1"
6213c3c9db83Smrg	  revision="$2"
6214c3c9db83Smrg	  age="$3"
6215c3c9db83Smrg	  ;;
6216c3c9db83Smrg	esac
6217c3c9db83Smrg
6218c3c9db83Smrg	# Check that each of the things are valid numbers.
6219c3c9db83Smrg	case $current in
6220c3c9db83Smrg	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]) ;;
6221c3c9db83Smrg	*)
6222c3c9db83Smrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
6223c3c9db83Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
6224c3c9db83Smrg	  ;;
6225c3c9db83Smrg	esac
6226c3c9db83Smrg
6227c3c9db83Smrg	case $revision in
6228c3c9db83Smrg	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]) ;;
6229c3c9db83Smrg	*)
6230c3c9db83Smrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
6231c3c9db83Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
6232c3c9db83Smrg	  ;;
6233c3c9db83Smrg	esac
6234c3c9db83Smrg
6235c3c9db83Smrg	case $age in
6236c3c9db83Smrg	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]) ;;
6237c3c9db83Smrg	*)
6238c3c9db83Smrg	  func_error "AGE \`$age' must be a nonnegative integer"
6239c3c9db83Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
6240c3c9db83Smrg	  ;;
6241c3c9db83Smrg	esac
6242c3c9db83Smrg
6243c3c9db83Smrg	if test "$age" -gt "$current"; then
6244c3c9db83Smrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
6245c3c9db83Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
6246c3c9db83Smrg	fi
6247c3c9db83Smrg
6248c3c9db83Smrg	# Calculate the version variables.
6249c3c9db83Smrg	major=
6250c3c9db83Smrg	versuffix=
6251c3c9db83Smrg	verstring=
6252c3c9db83Smrg	case $version_type in
6253c3c9db83Smrg	none) ;;
6254c3c9db83Smrg
6255c3c9db83Smrg	darwin)
6256c3c9db83Smrg	  # Like Linux, but with the current version available in
6257c3c9db83Smrg	  # verstring for coding it into the library header
6258c3c9db83Smrg	  func_arith $current - $age
6259c3c9db83Smrg	  major=.$func_arith_result
6260c3c9db83Smrg	  versuffix="$major.$age.$revision"
6261c3c9db83Smrg	  # Darwin ld doesn't like 0 for these options...
6262c3c9db83Smrg	  func_arith $current + 1
6263c3c9db83Smrg	  minor_current=$func_arith_result
6264c3c9db83Smrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
6265c3c9db83Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
6266c3c9db83Smrg	  ;;
6267c3c9db83Smrg
6268c3c9db83Smrg	freebsd-aout)
6269c3c9db83Smrg	  major=".$current"
6270c3c9db83Smrg	  versuffix=".$current.$revision";
6271c3c9db83Smrg	  ;;
6272c3c9db83Smrg
6273c3c9db83Smrg	freebsd-elf)
6274c3c9db83Smrg	  major=".$current"
6275c3c9db83Smrg	  versuffix=".$current"
6276c3c9db83Smrg	  ;;
6277c3c9db83Smrg
6278c3c9db83Smrg	irix | nonstopux)
6279c3c9db83Smrg	  if test "X$lt_irix_increment" = "Xno"; then
6280c3c9db83Smrg	    func_arith $current - $age
6281c3c9db83Smrg	  else
6282c3c9db83Smrg	    func_arith $current - $age + 1
6283c3c9db83Smrg	  fi
6284c3c9db83Smrg	  major=$func_arith_result
6285c3c9db83Smrg
6286c3c9db83Smrg	  case $version_type in
6287c3c9db83Smrg	    nonstopux) verstring_prefix=nonstopux ;;
6288c3c9db83Smrg	    *)         verstring_prefix=sgi ;;
6289c3c9db83Smrg	  esac
6290c3c9db83Smrg	  verstring="$verstring_prefix$major.$revision"
6291c3c9db83Smrg
6292c3c9db83Smrg	  # Add in all the interfaces that we are compatible with.
6293c3c9db83Smrg	  loop=$revision
6294c3c9db83Smrg	  while test "$loop" -ne 0; do
6295c3c9db83Smrg	    func_arith $revision - $loop
6296c3c9db83Smrg	    iface=$func_arith_result
6297c3c9db83Smrg	    func_arith $loop - 1
6298c3c9db83Smrg	    loop=$func_arith_result
6299c3c9db83Smrg	    verstring="$verstring_prefix$major.$iface:$verstring"
6300c3c9db83Smrg	  done
6301c3c9db83Smrg
6302c3c9db83Smrg	  # Before this point, $major must not contain `.'.
6303c3c9db83Smrg	  major=.$major
6304c3c9db83Smrg	  versuffix="$major.$revision"
6305c3c9db83Smrg	  ;;
6306c3c9db83Smrg
6307c3c9db83Smrg	linux)
6308c3c9db83Smrg	  func_arith $current - $age
6309c3c9db83Smrg	  major=.$func_arith_result
6310c3c9db83Smrg	  versuffix="$major.$age.$revision"
6311c3c9db83Smrg	  ;;
6312c3c9db83Smrg
6313c3c9db83Smrg	osf)
6314c3c9db83Smrg	  func_arith $current - $age
6315c3c9db83Smrg	  major=.$func_arith_result
6316c3c9db83Smrg	  versuffix=".$current.$age.$revision"
6317c3c9db83Smrg	  verstring="$current.$age.$revision"
6318c3c9db83Smrg
6319c3c9db83Smrg	  # Add in all the interfaces that we are compatible with.
6320c3c9db83Smrg	  loop=$age
6321c3c9db83Smrg	  while test "$loop" -ne 0; do
6322c3c9db83Smrg	    func_arith $current - $loop
6323c3c9db83Smrg	    iface=$func_arith_result
6324c3c9db83Smrg	    func_arith $loop - 1
6325c3c9db83Smrg	    loop=$func_arith_result
6326c3c9db83Smrg	    verstring="$verstring:${iface}.0"
6327c3c9db83Smrg	  done
6328c3c9db83Smrg
6329c3c9db83Smrg	  # Make executables depend on our current version.
6330c3c9db83Smrg	  verstring="$verstring:${current}.0"
6331c3c9db83Smrg	  ;;
6332c3c9db83Smrg
6333c3c9db83Smrg	qnx)
6334c3c9db83Smrg	  major=".$current"
6335c3c9db83Smrg	  versuffix=".$current"
6336c3c9db83Smrg	  ;;
6337c3c9db83Smrg
6338c3c9db83Smrg	sunos)
6339c3c9db83Smrg	  major=".$current"
6340c3c9db83Smrg	  versuffix=".$current.$revision"
6341c3c9db83Smrg	  ;;
6342c3c9db83Smrg
6343c3c9db83Smrg	windows)
6344c3c9db83Smrg	  # Use '-' rather than '.', since we only want one
6345c3c9db83Smrg	  # extension on DOS 8.3 filesystems.
6346c3c9db83Smrg	  func_arith $current - $age
6347c3c9db83Smrg	  major=$func_arith_result
6348c3c9db83Smrg	  versuffix="-$major"
6349c3c9db83Smrg	  ;;
6350c3c9db83Smrg
6351c3c9db83Smrg	*)
6352c3c9db83Smrg	  func_fatal_configuration "unknown library version type \`$version_type'"
6353c3c9db83Smrg	  ;;
6354c3c9db83Smrg	esac
6355c3c9db83Smrg
6356c3c9db83Smrg	# Clear the version info if we defaulted, and they specified a release.
6357c3c9db83Smrg	if test -z "$vinfo" && test -n "$release"; then
6358c3c9db83Smrg	  major=
6359c3c9db83Smrg	  case $version_type in
6360c3c9db83Smrg	  darwin)
6361c3c9db83Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
6362c3c9db83Smrg	    # problems, so we reset it completely
6363c3c9db83Smrg	    verstring=
6364c3c9db83Smrg	    ;;
6365c3c9db83Smrg	  *)
6366c3c9db83Smrg	    verstring="0.0"
6367c3c9db83Smrg	    ;;
6368c3c9db83Smrg	  esac
6369c3c9db83Smrg	  if test "$need_version" = no; then
6370c3c9db83Smrg	    versuffix=
6371c3c9db83Smrg	  else
6372c3c9db83Smrg	    versuffix=".0.0"
6373c3c9db83Smrg	  fi
6374c3c9db83Smrg	fi
6375c3c9db83Smrg
6376c3c9db83Smrg	# Remove version info from name if versioning should be avoided
6377c3c9db83Smrg	if test "$avoid_version" = yes && test "$need_version" = no; then
6378c3c9db83Smrg	  major=
6379c3c9db83Smrg	  versuffix=
6380c3c9db83Smrg	  verstring=""
6381c3c9db83Smrg	fi
6382c3c9db83Smrg
6383c3c9db83Smrg	# Check to see if the archive will have undefined symbols.
6384c3c9db83Smrg	if test "$allow_undefined" = yes; then
6385c3c9db83Smrg	  if test "$allow_undefined_flag" = unsupported; then
6386c3c9db83Smrg	    func_warning "undefined symbols not allowed in $host shared libraries"
6387c3c9db83Smrg	    build_libtool_libs=no
6388c3c9db83Smrg	    build_old_libs=yes
6389c3c9db83Smrg	  fi
6390c3c9db83Smrg	else
6391c3c9db83Smrg	  # Don't allow undefined symbols.
6392c3c9db83Smrg	  allow_undefined_flag="$no_undefined_flag"
6393c3c9db83Smrg	fi
6394c3c9db83Smrg
6395c3c9db83Smrg      fi
6396c3c9db83Smrg
6397c3c9db83Smrg      func_generate_dlsyms "$libname" "$libname" "yes"
6398c3c9db83Smrg      libobjs="$libobjs $symfileobj"
6399c3c9db83Smrg      test "X$libobjs" = "X " && libobjs=
6400c3c9db83Smrg
6401c3c9db83Smrg      if test "$mode" != relink; then
6402c3c9db83Smrg	# Remove our outputs, but don't remove object files since they
6403c3c9db83Smrg	# may have been created when compiling PIC objects.
6404c3c9db83Smrg	removelist=
6405c3c9db83Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
6406c3c9db83Smrg	for p in $tempremovelist; do
6407c3c9db83Smrg	  case $p in
6408c3c9db83Smrg	    *.$objext | *.gcno)
6409c3c9db83Smrg	       ;;
6410c3c9db83Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
6411c3c9db83Smrg	       if test "X$precious_files_regex" != "X"; then
6412c3c9db83Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
6413c3c9db83Smrg		 then
6414c3c9db83Smrg		   continue
6415c3c9db83Smrg		 fi
6416c3c9db83Smrg	       fi
6417c3c9db83Smrg	       removelist="$removelist $p"
6418c3c9db83Smrg	       ;;
6419c3c9db83Smrg	    *) ;;
6420c3c9db83Smrg	  esac
6421c3c9db83Smrg	done
6422c3c9db83Smrg	test -n "$removelist" && \
6423c3c9db83Smrg	  func_show_eval "${RM}r \$removelist"
6424c3c9db83Smrg      fi
6425c3c9db83Smrg
6426c3c9db83Smrg      # Now set the variables for building old libraries.
6427c3c9db83Smrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
6428c3c9db83Smrg	oldlibs="$oldlibs $output_objdir/$libname.$libext"
6429c3c9db83Smrg
6430c3c9db83Smrg	# Transform .lo files to .o files.
6431c3c9db83Smrg	oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
6432c3c9db83Smrg      fi
6433c3c9db83Smrg
6434c3c9db83Smrg      # Eliminate all temporary directories.
6435c3c9db83Smrg      #for path in $notinst_path; do
6436c3c9db83Smrg      #	lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
6437c3c9db83Smrg      #	deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
6438c3c9db83Smrg      #	dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
6439c3c9db83Smrg      #done
6440c3c9db83Smrg
6441c3c9db83Smrg      if test -n "$xrpath"; then
6442c3c9db83Smrg	# If the user specified any rpath flags, then add them.
6443c3c9db83Smrg	temp_xrpath=
6444c3c9db83Smrg	for libdir in $xrpath; do
6445c3c9db83Smrg	  temp_xrpath="$temp_xrpath -R$libdir"
6446c3c9db83Smrg	  case "$finalize_rpath " in
6447c3c9db83Smrg	  *" $libdir "*) ;;
6448c3c9db83Smrg	  *) finalize_rpath="$finalize_rpath $libdir" ;;
6449c3c9db83Smrg	  esac
6450c3c9db83Smrg	done
6451c3c9db83Smrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
6452c3c9db83Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
6453c3c9db83Smrg	fi
6454c3c9db83Smrg      fi
6455c3c9db83Smrg
6456c3c9db83Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
6457c3c9db83Smrg      old_dlfiles="$dlfiles"
6458c3c9db83Smrg      dlfiles=
6459c3c9db83Smrg      for lib in $old_dlfiles; do
6460c3c9db83Smrg	case " $dlprefiles $dlfiles " in
6461c3c9db83Smrg	*" $lib "*) ;;
6462c3c9db83Smrg	*) dlfiles="$dlfiles $lib" ;;
6463c3c9db83Smrg	esac
6464c3c9db83Smrg      done
6465c3c9db83Smrg
6466c3c9db83Smrg      # Make sure dlprefiles contains only unique files
6467c3c9db83Smrg      old_dlprefiles="$dlprefiles"
6468c3c9db83Smrg      dlprefiles=
6469c3c9db83Smrg      for lib in $old_dlprefiles; do
6470c3c9db83Smrg	case "$dlprefiles " in
6471c3c9db83Smrg	*" $lib "*) ;;
6472c3c9db83Smrg	*) dlprefiles="$dlprefiles $lib" ;;
6473c3c9db83Smrg	esac
6474c3c9db83Smrg      done
6475c3c9db83Smrg
6476c3c9db83Smrg      if test "$build_libtool_libs" = yes; then
6477c3c9db83Smrg	if test -n "$rpath"; then
6478c3c9db83Smrg	  case $host in
6479c3c9db83Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
6480c3c9db83Smrg	    # these systems don't actually have a c library (as such)!
6481c3c9db83Smrg	    ;;
6482c3c9db83Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
6483c3c9db83Smrg	    # Rhapsody C library is in the System framework
6484c3c9db83Smrg	    deplibs="$deplibs System.ltframework"
6485c3c9db83Smrg	    ;;
6486c3c9db83Smrg	  *-*-netbsd*)
6487c3c9db83Smrg	    # Don't link with libc until the a.out ld.so is fixed.
6488c3c9db83Smrg	    ;;
6489c3c9db83Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
6490c3c9db83Smrg	    # Do not include libc due to us having libc/libc_r.
6491c3c9db83Smrg	    ;;
6492c3c9db83Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
6493c3c9db83Smrg	    # Causes problems with __ctype
6494c3c9db83Smrg	    ;;
6495c3c9db83Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
6496c3c9db83Smrg	    # Compiler inserts libc in the correct place for threads to work
6497c3c9db83Smrg	    ;;
6498c3c9db83Smrg	  *)
6499c3c9db83Smrg	    # Add libc to deplibs on all other systems if necessary.
6500c3c9db83Smrg	    if test "$build_libtool_need_lc" = "yes"; then
6501c3c9db83Smrg	      deplibs="$deplibs -lc"
6502c3c9db83Smrg	    fi
6503c3c9db83Smrg	    ;;
6504c3c9db83Smrg	  esac
6505c3c9db83Smrg	fi
6506c3c9db83Smrg
6507c3c9db83Smrg	# Transform deplibs into only deplibs that can be linked in shared.
6508c3c9db83Smrg	name_save=$name
6509c3c9db83Smrg	libname_save=$libname
6510c3c9db83Smrg	release_save=$release
6511c3c9db83Smrg	versuffix_save=$versuffix
6512c3c9db83Smrg	major_save=$major
6513c3c9db83Smrg	# I'm not sure if I'm treating the release correctly.  I think
6514c3c9db83Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
6515c3c9db83Smrg	# add it in twice.  Is that correct?
6516c3c9db83Smrg	release=""
6517c3c9db83Smrg	versuffix=""
6518c3c9db83Smrg	major=""
6519c3c9db83Smrg	newdeplibs=
6520c3c9db83Smrg	droppeddeps=no
6521c3c9db83Smrg	case $deplibs_check_method in
6522c3c9db83Smrg	pass_all)
6523c3c9db83Smrg	  # Don't check for shared/static.  Everything works.
6524c3c9db83Smrg	  # This might be a little naive.  We might want to check
6525c3c9db83Smrg	  # whether the library exists or not.  But this is on
6526c3c9db83Smrg	  # osf3 & osf4 and I'm not really sure... Just
6527c3c9db83Smrg	  # implementing what was already the behavior.
6528c3c9db83Smrg	  newdeplibs=$deplibs
6529c3c9db83Smrg	  ;;
6530c3c9db83Smrg	test_compile)
6531c3c9db83Smrg	  # This code stresses the "libraries are programs" paradigm to its
6532c3c9db83Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
6533c3c9db83Smrg	  # against the deplibs as a proxy for the library.  Then we can check
6534c3c9db83Smrg	  # whether they linked in statically or dynamically with ldd.
6535c3c9db83Smrg	  $opt_dry_run || $RM conftest.c
6536c3c9db83Smrg	  cat > conftest.c <<EOF
6537c3c9db83Smrg	  int main() { return 0; }
6538c3c9db83SmrgEOF
6539c3c9db83Smrg	  $opt_dry_run || $RM conftest
6540c3c9db83Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
6541c3c9db83Smrg	    ldd_output=`ldd conftest`
6542c3c9db83Smrg	    for i in $deplibs; do
6543c3c9db83Smrg	      case $i in
6544c3c9db83Smrg	      -l*)
6545c3c9db83Smrg		func_stripname -l '' "$i"
6546c3c9db83Smrg		name=$func_stripname_result
6547c3c9db83Smrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6548c3c9db83Smrg		  case " $predeps $postdeps " in
6549c3c9db83Smrg		  *" $i "*)
6550c3c9db83Smrg		    newdeplibs="$newdeplibs $i"
6551c3c9db83Smrg		    i=""
6552c3c9db83Smrg		    ;;
6553c3c9db83Smrg		  esac
6554c3c9db83Smrg		fi
6555c3c9db83Smrg		if test -n "$i" ; then
6556c3c9db83Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
6557c3c9db83Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
6558c3c9db83Smrg		  set dummy $deplib_matches; shift
6559c3c9db83Smrg		  deplib_match=$1
6560c3c9db83Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
6561c3c9db83Smrg		    newdeplibs="$newdeplibs $i"
6562c3c9db83Smrg		  else
6563c3c9db83Smrg		    droppeddeps=yes
6564c3c9db83Smrg		    $ECHO
6565c3c9db83Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
6566c3c9db83Smrg		    $ECHO "*** I have the capability to make that library automatically link in when"
6567c3c9db83Smrg		    $ECHO "*** you link to this library.  But I can only do this if you have a"
6568c3c9db83Smrg		    $ECHO "*** shared version of the library, which I believe you do not have"
6569c3c9db83Smrg		    $ECHO "*** because a test_compile did reveal that the linker did not use it for"
6570c3c9db83Smrg		    $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
6571c3c9db83Smrg		  fi
6572c3c9db83Smrg		fi
6573c3c9db83Smrg		;;
6574c3c9db83Smrg	      *)
6575c3c9db83Smrg		newdeplibs="$newdeplibs $i"
6576c3c9db83Smrg		;;
6577c3c9db83Smrg	      esac
6578c3c9db83Smrg	    done
6579c3c9db83Smrg	  else
6580c3c9db83Smrg	    # Error occurred in the first compile.  Let's try to salvage
6581c3c9db83Smrg	    # the situation: Compile a separate program for each library.
6582c3c9db83Smrg	    for i in $deplibs; do
6583c3c9db83Smrg	      case $i in
6584c3c9db83Smrg	      -l*)
6585c3c9db83Smrg		func_stripname -l '' "$i"
6586c3c9db83Smrg		name=$func_stripname_result
6587c3c9db83Smrg		$opt_dry_run || $RM conftest
6588c3c9db83Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
6589c3c9db83Smrg		  ldd_output=`ldd conftest`
6590c3c9db83Smrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6591c3c9db83Smrg		    case " $predeps $postdeps " in
6592c3c9db83Smrg		    *" $i "*)
6593c3c9db83Smrg		      newdeplibs="$newdeplibs $i"
6594c3c9db83Smrg		      i=""
6595c3c9db83Smrg		      ;;
6596c3c9db83Smrg		    esac
6597c3c9db83Smrg		  fi
6598c3c9db83Smrg		  if test -n "$i" ; then
6599c3c9db83Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
6600c3c9db83Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
6601c3c9db83Smrg		    set dummy $deplib_matches; shift
6602c3c9db83Smrg		    deplib_match=$1
6603c3c9db83Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
6604c3c9db83Smrg		      newdeplibs="$newdeplibs $i"
6605c3c9db83Smrg		    else
6606c3c9db83Smrg		      droppeddeps=yes
6607c3c9db83Smrg		      $ECHO
6608c3c9db83Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
6609c3c9db83Smrg		      $ECHO "*** I have the capability to make that library automatically link in when"
6610c3c9db83Smrg		      $ECHO "*** you link to this library.  But I can only do this if you have a"
6611c3c9db83Smrg		      $ECHO "*** shared version of the library, which you do not appear to have"
6612c3c9db83Smrg		      $ECHO "*** because a test_compile did reveal that the linker did not use this one"
6613c3c9db83Smrg		      $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
6614c3c9db83Smrg		    fi
6615c3c9db83Smrg		  fi
6616c3c9db83Smrg		else
6617c3c9db83Smrg		  droppeddeps=yes
6618c3c9db83Smrg		  $ECHO
6619c3c9db83Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
6620c3c9db83Smrg		  $ECHO "*** make it link in!  You will probably need to install it or some"
6621c3c9db83Smrg		  $ECHO "*** library that it depends on before this library will be fully"
6622c3c9db83Smrg		  $ECHO "*** functional.  Installing it before continuing would be even better."
6623c3c9db83Smrg		fi
6624c3c9db83Smrg		;;
6625c3c9db83Smrg	      *)
6626c3c9db83Smrg		newdeplibs="$newdeplibs $i"
6627c3c9db83Smrg		;;
6628c3c9db83Smrg	      esac
6629c3c9db83Smrg	    done
6630c3c9db83Smrg	  fi
6631c3c9db83Smrg	  ;;
6632c3c9db83Smrg	file_magic*)
6633c3c9db83Smrg	  set dummy $deplibs_check_method; shift
6634c3c9db83Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
6635c3c9db83Smrg	  for a_deplib in $deplibs; do
6636c3c9db83Smrg	    case $a_deplib in
6637c3c9db83Smrg	    -l*)
6638c3c9db83Smrg	      func_stripname -l '' "$a_deplib"
6639c3c9db83Smrg	      name=$func_stripname_result
6640c3c9db83Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6641c3c9db83Smrg		case " $predeps $postdeps " in
6642c3c9db83Smrg		*" $a_deplib "*)
6643c3c9db83Smrg		  newdeplibs="$newdeplibs $a_deplib"
6644c3c9db83Smrg		  a_deplib=""
6645c3c9db83Smrg		  ;;
6646c3c9db83Smrg		esac
6647c3c9db83Smrg	      fi
6648c3c9db83Smrg	      if test -n "$a_deplib" ; then
6649c3c9db83Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
6650c3c9db83Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
6651c3c9db83Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
6652c3c9db83Smrg		  for potent_lib in $potential_libs; do
6653c3c9db83Smrg		      # Follow soft links.
6654c3c9db83Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
6655c3c9db83Smrg			 $GREP " -> " >/dev/null; then
6656c3c9db83Smrg			continue
6657c3c9db83Smrg		      fi
6658c3c9db83Smrg		      # The statement above tries to avoid entering an
6659c3c9db83Smrg		      # endless loop below, in case of cyclic links.
6660c3c9db83Smrg		      # We might still enter an endless loop, since a link
6661c3c9db83Smrg		      # loop can be closed while we follow links,
6662c3c9db83Smrg		      # but so what?
6663c3c9db83Smrg		      potlib="$potent_lib"
6664c3c9db83Smrg		      while test -h "$potlib" 2>/dev/null; do
6665c3c9db83Smrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
6666c3c9db83Smrg			case $potliblink in
6667c3c9db83Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
6668c3c9db83Smrg			*) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
6669c3c9db83Smrg			esac
6670c3c9db83Smrg		      done
6671c3c9db83Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
6672c3c9db83Smrg			 $SED -e 10q |
6673c3c9db83Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
6674c3c9db83Smrg			newdeplibs="$newdeplibs $a_deplib"
6675c3c9db83Smrg			a_deplib=""
6676c3c9db83Smrg			break 2
6677c3c9db83Smrg		      fi
6678c3c9db83Smrg		  done
6679c3c9db83Smrg		done
6680c3c9db83Smrg	      fi
6681c3c9db83Smrg	      if test -n "$a_deplib" ; then
6682c3c9db83Smrg		droppeddeps=yes
6683c3c9db83Smrg		$ECHO
6684c3c9db83Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
6685c3c9db83Smrg		$ECHO "*** I have the capability to make that library automatically link in when"
6686c3c9db83Smrg		$ECHO "*** you link to this library.  But I can only do this if you have a"
6687c3c9db83Smrg		$ECHO "*** shared version of the library, which you do not appear to have"
6688c3c9db83Smrg		$ECHO "*** because I did check the linker path looking for a file starting"
6689c3c9db83Smrg		if test -z "$potlib" ; then
6690c3c9db83Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
6691c3c9db83Smrg		else
6692c3c9db83Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
6693c3c9db83Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
6694c3c9db83Smrg		fi
6695c3c9db83Smrg	      fi
6696c3c9db83Smrg	      ;;
6697c3c9db83Smrg	    *)
6698c3c9db83Smrg	      # Add a -L argument.
6699c3c9db83Smrg	      newdeplibs="$newdeplibs $a_deplib"
6700c3c9db83Smrg	      ;;
6701c3c9db83Smrg	    esac
6702c3c9db83Smrg	  done # Gone through all deplibs.
6703c3c9db83Smrg	  ;;
6704c3c9db83Smrg	match_pattern*)
6705c3c9db83Smrg	  set dummy $deplibs_check_method; shift
6706c3c9db83Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
6707c3c9db83Smrg	  for a_deplib in $deplibs; do
6708c3c9db83Smrg	    case $a_deplib in
6709c3c9db83Smrg	    -l*)
6710c3c9db83Smrg	      func_stripname -l '' "$a_deplib"
6711c3c9db83Smrg	      name=$func_stripname_result
6712c3c9db83Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6713c3c9db83Smrg		case " $predeps $postdeps " in
6714c3c9db83Smrg		*" $a_deplib "*)
6715c3c9db83Smrg		  newdeplibs="$newdeplibs $a_deplib"
6716c3c9db83Smrg		  a_deplib=""
6717c3c9db83Smrg		  ;;
6718c3c9db83Smrg		esac
6719c3c9db83Smrg	      fi
6720c3c9db83Smrg	      if test -n "$a_deplib" ; then
6721c3c9db83Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
6722c3c9db83Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
6723c3c9db83Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
6724c3c9db83Smrg		  for potent_lib in $potential_libs; do
6725c3c9db83Smrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
6726c3c9db83Smrg		    if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
6727c3c9db83Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
6728c3c9db83Smrg		      newdeplibs="$newdeplibs $a_deplib"
6729c3c9db83Smrg		      a_deplib=""
6730c3c9db83Smrg		      break 2
6731c3c9db83Smrg		    fi
6732c3c9db83Smrg		  done
6733c3c9db83Smrg		done
6734c3c9db83Smrg	      fi
6735c3c9db83Smrg	      if test -n "$a_deplib" ; then
6736c3c9db83Smrg		droppeddeps=yes
6737c3c9db83Smrg		$ECHO
6738c3c9db83Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
6739c3c9db83Smrg		$ECHO "*** I have the capability to make that library automatically link in when"
6740c3c9db83Smrg		$ECHO "*** you link to this library.  But I can only do this if you have a"
6741c3c9db83Smrg		$ECHO "*** shared version of the library, which you do not appear to have"
6742c3c9db83Smrg		$ECHO "*** because I did check the linker path looking for a file starting"
6743c3c9db83Smrg		if test -z "$potlib" ; then
6744c3c9db83Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
6745c3c9db83Smrg		else
6746c3c9db83Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
6747c3c9db83Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
6748c3c9db83Smrg		fi
6749c3c9db83Smrg	      fi
6750c3c9db83Smrg	      ;;
6751c3c9db83Smrg	    *)
6752c3c9db83Smrg	      # Add a -L argument.
6753c3c9db83Smrg	      newdeplibs="$newdeplibs $a_deplib"
6754c3c9db83Smrg	      ;;
6755c3c9db83Smrg	    esac
6756c3c9db83Smrg	  done # Gone through all deplibs.
6757c3c9db83Smrg	  ;;
6758c3c9db83Smrg	none | unknown | *)
6759c3c9db83Smrg	  newdeplibs=""
6760c3c9db83Smrg	  tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
6761c3c9db83Smrg	      -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
6762c3c9db83Smrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6763c3c9db83Smrg	    for i in $predeps $postdeps ; do
6764c3c9db83Smrg	      # can't use Xsed below, because $i might contain '/'
6765c3c9db83Smrg	      tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
6766c3c9db83Smrg	    done
6767c3c9db83Smrg	  fi
6768c3c9db83Smrg	  if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[	 ]//g' |
6769c3c9db83Smrg	     $GREP . >/dev/null; then
6770c3c9db83Smrg	    $ECHO
6771c3c9db83Smrg	    if test "X$deplibs_check_method" = "Xnone"; then
6772c3c9db83Smrg	      $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
6773c3c9db83Smrg	    else
6774c3c9db83Smrg	      $ECHO "*** Warning: inter-library dependencies are not known to be supported."
6775c3c9db83Smrg	    fi
6776c3c9db83Smrg	    $ECHO "*** All declared inter-library dependencies are being dropped."
6777c3c9db83Smrg	    droppeddeps=yes
6778c3c9db83Smrg	  fi
6779c3c9db83Smrg	  ;;
6780c3c9db83Smrg	esac
6781c3c9db83Smrg	versuffix=$versuffix_save
6782c3c9db83Smrg	major=$major_save
6783c3c9db83Smrg	release=$release_save
6784c3c9db83Smrg	libname=$libname_save
6785c3c9db83Smrg	name=$name_save
6786c3c9db83Smrg
6787c3c9db83Smrg	case $host in
6788c3c9db83Smrg	*-*-rhapsody* | *-*-darwin1.[012])
6789c3c9db83Smrg	  # On Rhapsody replace the C library with the System framework
6790c3c9db83Smrg	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
6791c3c9db83Smrg	  ;;
6792c3c9db83Smrg	esac
6793c3c9db83Smrg
6794c3c9db83Smrg	if test "$droppeddeps" = yes; then
6795c3c9db83Smrg	  if test "$module" = yes; then
6796c3c9db83Smrg	    $ECHO
6797c3c9db83Smrg	    $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
6798c3c9db83Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
6799c3c9db83Smrg	    $ECHO "*** a static module, that should work as long as the dlopening"
6800c3c9db83Smrg	    $ECHO "*** application is linked with the -dlopen flag."
6801c3c9db83Smrg	    if test -z "$global_symbol_pipe"; then
6802c3c9db83Smrg	      $ECHO
6803c3c9db83Smrg	      $ECHO "*** However, this would only work if libtool was able to extract symbol"
6804c3c9db83Smrg	      $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
6805c3c9db83Smrg	      $ECHO "*** not find such a program.  So, this module is probably useless."
6806c3c9db83Smrg	      $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
6807c3c9db83Smrg	    fi
6808c3c9db83Smrg	    if test "$build_old_libs" = no; then
6809c3c9db83Smrg	      oldlibs="$output_objdir/$libname.$libext"
6810c3c9db83Smrg	      build_libtool_libs=module
6811c3c9db83Smrg	      build_old_libs=yes
6812c3c9db83Smrg	    else
6813c3c9db83Smrg	      build_libtool_libs=no
6814c3c9db83Smrg	    fi
6815c3c9db83Smrg	  else
6816c3c9db83Smrg	    $ECHO "*** The inter-library dependencies that have been dropped here will be"
6817c3c9db83Smrg	    $ECHO "*** automatically added whenever a program is linked with this library"
6818c3c9db83Smrg	    $ECHO "*** or is declared to -dlopen it."
6819c3c9db83Smrg
6820c3c9db83Smrg	    if test "$allow_undefined" = no; then
6821c3c9db83Smrg	      $ECHO
6822c3c9db83Smrg	      $ECHO "*** Since this library must not contain undefined symbols,"
6823c3c9db83Smrg	      $ECHO "*** because either the platform does not support them or"
6824c3c9db83Smrg	      $ECHO "*** it was explicitly requested with -no-undefined,"
6825c3c9db83Smrg	      $ECHO "*** libtool will only create a static version of it."
6826c3c9db83Smrg	      if test "$build_old_libs" = no; then
6827c3c9db83Smrg		oldlibs="$output_objdir/$libname.$libext"
6828c3c9db83Smrg		build_libtool_libs=module
6829c3c9db83Smrg		build_old_libs=yes
6830c3c9db83Smrg	      else
6831c3c9db83Smrg		build_libtool_libs=no
6832c3c9db83Smrg	      fi
6833c3c9db83Smrg	    fi
6834c3c9db83Smrg	  fi
6835c3c9db83Smrg	fi
6836c3c9db83Smrg	# Done checking deplibs!
6837c3c9db83Smrg	deplibs=$newdeplibs
6838c3c9db83Smrg      fi
6839c3c9db83Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
6840c3c9db83Smrg      case $host in
6841c3c9db83Smrg	*-*-darwin*)
6842c3c9db83Smrg	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
6843c3c9db83Smrg	  new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
6844c3c9db83Smrg	  deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
6845c3c9db83Smrg	  ;;
6846c3c9db83Smrg      esac
6847c3c9db83Smrg
6848c3c9db83Smrg      # move library search paths that coincide with paths to not yet
6849c3c9db83Smrg      # installed libraries to the beginning of the library search list
6850c3c9db83Smrg      new_libs=
6851c3c9db83Smrg      for path in $notinst_path; do
6852c3c9db83Smrg	case " $new_libs " in
6853c3c9db83Smrg	*" -L$path/$objdir "*) ;;
6854c3c9db83Smrg	*)
6855c3c9db83Smrg	  case " $deplibs " in
6856c3c9db83Smrg	  *" -L$path/$objdir "*)
6857c3c9db83Smrg	    new_libs="$new_libs -L$path/$objdir" ;;
6858c3c9db83Smrg	  esac
6859c3c9db83Smrg	  ;;
6860c3c9db83Smrg	esac
6861c3c9db83Smrg      done
6862c3c9db83Smrg      for deplib in $deplibs; do
6863c3c9db83Smrg	case $deplib in
6864c3c9db83Smrg	-L*)
6865c3c9db83Smrg	  case " $new_libs " in
6866c3c9db83Smrg	  *" $deplib "*) ;;
6867c3c9db83Smrg	  *) new_libs="$new_libs $deplib" ;;
6868c3c9db83Smrg	  esac
6869c3c9db83Smrg	  ;;
6870c3c9db83Smrg	*) new_libs="$new_libs $deplib" ;;
6871c3c9db83Smrg	esac
6872c3c9db83Smrg      done
6873c3c9db83Smrg      deplibs="$new_libs"
6874c3c9db83Smrg
6875c3c9db83Smrg      # All the library-specific variables (install_libdir is set above).
6876c3c9db83Smrg      library_names=
6877c3c9db83Smrg      old_library=
6878c3c9db83Smrg      dlname=
6879c3c9db83Smrg
6880c3c9db83Smrg      # Test again, we may have decided not to build it any more
6881c3c9db83Smrg      if test "$build_libtool_libs" = yes; then
6882c3c9db83Smrg	if test "$hardcode_into_libs" = yes; then
6883c3c9db83Smrg	  # Hardcode the library paths
6884c3c9db83Smrg	  hardcode_libdirs=
6885c3c9db83Smrg	  dep_rpath=
6886c3c9db83Smrg	  rpath="$finalize_rpath"
6887c3c9db83Smrg	  test "$mode" != relink && rpath="$compile_rpath$rpath"
6888c3c9db83Smrg	  for libdir in $rpath; do
6889c3c9db83Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
6890c3c9db83Smrg	      if test -n "$hardcode_libdir_separator"; then
6891c3c9db83Smrg		if test -z "$hardcode_libdirs"; then
6892c3c9db83Smrg		  hardcode_libdirs="$libdir"
6893c3c9db83Smrg		else
6894c3c9db83Smrg		  # Just accumulate the unique libdirs.
6895c3c9db83Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
6896c3c9db83Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
6897c3c9db83Smrg		    ;;
6898c3c9db83Smrg		  *)
6899c3c9db83Smrg		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
6900c3c9db83Smrg		    ;;
6901c3c9db83Smrg		  esac
6902c3c9db83Smrg		fi
6903c3c9db83Smrg	      else
6904c3c9db83Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
6905c3c9db83Smrg		dep_rpath="$dep_rpath $flag"
6906c3c9db83Smrg	      fi
6907c3c9db83Smrg	    elif test -n "$runpath_var"; then
6908c3c9db83Smrg	      case "$perm_rpath " in
6909c3c9db83Smrg	      *" $libdir "*) ;;
6910c3c9db83Smrg	      *) perm_rpath="$perm_rpath $libdir" ;;
6911c3c9db83Smrg	      esac
6912c3c9db83Smrg	    fi
6913c3c9db83Smrg	  done
6914c3c9db83Smrg	  # Substitute the hardcoded libdirs into the rpath.
6915c3c9db83Smrg	  if test -n "$hardcode_libdir_separator" &&
6916c3c9db83Smrg	     test -n "$hardcode_libdirs"; then
6917c3c9db83Smrg	    libdir="$hardcode_libdirs"
6918c3c9db83Smrg	    if test -n "$hardcode_libdir_flag_spec_ld"; then
6919c3c9db83Smrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
6920c3c9db83Smrg	    else
6921c3c9db83Smrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
6922c3c9db83Smrg	    fi
6923c3c9db83Smrg	  fi
6924c3c9db83Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
6925c3c9db83Smrg	    # We should set the runpath_var.
6926c3c9db83Smrg	    rpath=
6927c3c9db83Smrg	    for dir in $perm_rpath; do
6928c3c9db83Smrg	      rpath="$rpath$dir:"
6929c3c9db83Smrg	    done
6930c3c9db83Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
6931c3c9db83Smrg	  fi
6932c3c9db83Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
6933c3c9db83Smrg	fi
6934692f60a7Smrg
6935c3c9db83Smrg	shlibpath="$finalize_shlibpath"
6936c3c9db83Smrg	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
6937c3c9db83Smrg	if test -n "$shlibpath"; then
6938c3c9db83Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
6939c3c9db83Smrg	fi
6940692f60a7Smrg
6941c3c9db83Smrg	# Get the real and link names of the library.
6942c3c9db83Smrg	eval shared_ext=\"$shrext_cmds\"
6943c3c9db83Smrg	eval library_names=\"$library_names_spec\"
6944c3c9db83Smrg	set dummy $library_names
6945c3c9db83Smrg	shift
6946c3c9db83Smrg	realname="$1"
6947c3c9db83Smrg	shift
6948692f60a7Smrg
6949c3c9db83Smrg	if test -n "$soname_spec"; then
6950c3c9db83Smrg	  eval soname=\"$soname_spec\"
6951c3c9db83Smrg	else
6952c3c9db83Smrg	  soname="$realname"
6953c3c9db83Smrg	fi
6954c3c9db83Smrg	if test -z "$dlname"; then
6955c3c9db83Smrg	  dlname=$soname
6956c3c9db83Smrg	fi
6957692f60a7Smrg
6958c3c9db83Smrg	lib="$output_objdir/$realname"
6959c3c9db83Smrg	linknames=
6960c3c9db83Smrg	for link
6961c3c9db83Smrg	do
6962c3c9db83Smrg	  linknames="$linknames $link"
6963c3c9db83Smrg	done
6964692f60a7Smrg
6965c3c9db83Smrg	# Use standard objects if they are pic
6966c3c9db83Smrg	test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
6967c3c9db83Smrg	test "X$libobjs" = "X " && libobjs=
6968692f60a7Smrg
6969c3c9db83Smrg	delfiles=
6970c3c9db83Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
6971c3c9db83Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
6972c3c9db83Smrg	  export_symbols="$output_objdir/$libname.uexp"
6973c3c9db83Smrg	  delfiles="$delfiles $export_symbols"
6974c3c9db83Smrg	fi
6975692f60a7Smrg
6976c3c9db83Smrg	orig_export_symbols=
6977c3c9db83Smrg	case $host_os in
6978c3c9db83Smrg	cygwin* | mingw* | cegcc*)
6979c3c9db83Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
6980c3c9db83Smrg	    # exporting using user supplied symfile
6981c3c9db83Smrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
6982c3c9db83Smrg	      # and it's NOT already a .def file. Must figure out
6983c3c9db83Smrg	      # which of the given symbols are data symbols and tag
6984c3c9db83Smrg	      # them as such. So, trigger use of export_symbols_cmds.
6985c3c9db83Smrg	      # export_symbols gets reassigned inside the "prepare
6986c3c9db83Smrg	      # the list of exported symbols" if statement, so the
6987c3c9db83Smrg	      # include_expsyms logic still works.
6988c3c9db83Smrg	      orig_export_symbols="$export_symbols"
6989c3c9db83Smrg	      export_symbols=
6990c3c9db83Smrg	      always_export_symbols=yes
6991c3c9db83Smrg	    fi
6992c3c9db83Smrg	  fi
6993c3c9db83Smrg	  ;;
6994c3c9db83Smrg	esac
6995692f60a7Smrg
6996c3c9db83Smrg	# Prepare the list of exported symbols
6997c3c9db83Smrg	if test -z "$export_symbols"; then
6998c3c9db83Smrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
6999c3c9db83Smrg	    func_verbose "generating symbol list for \`$libname.la'"
7000c3c9db83Smrg	    export_symbols="$output_objdir/$libname.exp"
7001c3c9db83Smrg	    $opt_dry_run || $RM $export_symbols
7002c3c9db83Smrg	    cmds=$export_symbols_cmds
7003c3c9db83Smrg	    save_ifs="$IFS"; IFS='~'
7004c3c9db83Smrg	    for cmd in $cmds; do
7005c3c9db83Smrg	      IFS="$save_ifs"
7006c3c9db83Smrg	      eval cmd=\"$cmd\"
7007c3c9db83Smrg	      func_len " $cmd"
7008c3c9db83Smrg	      len=$func_len_result
7009c3c9db83Smrg	      if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
7010c3c9db83Smrg		func_show_eval "$cmd" 'exit $?'
7011c3c9db83Smrg		skipped_export=false
7012c3c9db83Smrg	      else
7013c3c9db83Smrg		# The command line is too long to execute in one step.
7014c3c9db83Smrg		func_verbose "using reloadable object file for export list..."
7015c3c9db83Smrg		skipped_export=:
7016c3c9db83Smrg		# Break out early, otherwise skipped_export may be
7017c3c9db83Smrg		# set to false by a later but shorter cmd.
7018c3c9db83Smrg		break
7019c3c9db83Smrg	      fi
7020c3c9db83Smrg	    done
7021c3c9db83Smrg	    IFS="$save_ifs"
7022c3c9db83Smrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
7023c3c9db83Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
7024c3c9db83Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
7025c3c9db83Smrg	    fi
7026c3c9db83Smrg	  fi
7027692f60a7Smrg	fi
7028692f60a7Smrg
7029c3c9db83Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
7030c3c9db83Smrg	  tmp_export_symbols="$export_symbols"
7031c3c9db83Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
7032c3c9db83Smrg	  $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
7033c3c9db83Smrg	fi
7034692f60a7Smrg
7035c3c9db83Smrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
7036c3c9db83Smrg	  # The given exports_symbols file has to be filtered, so filter it.
7037c3c9db83Smrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
7038c3c9db83Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
7039c3c9db83Smrg	  # 's' commands which not all seds can handle. GNU sed should be fine
7040c3c9db83Smrg	  # though. Also, the filter scales superlinearly with the number of
7041c3c9db83Smrg	  # global variables. join(1) would be nice here, but unfortunately
7042c3c9db83Smrg	  # isn't a blessed tool.
7043c3c9db83Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
7044c3c9db83Smrg	  delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
7045c3c9db83Smrg	  export_symbols=$output_objdir/$libname.def
7046c3c9db83Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
7047c3c9db83Smrg	fi
7048692f60a7Smrg
7049c3c9db83Smrg	tmp_deplibs=
7050c3c9db83Smrg	for test_deplib in $deplibs; do
7051c3c9db83Smrg	  case " $convenience " in
7052c3c9db83Smrg	  *" $test_deplib "*) ;;
7053c3c9db83Smrg	  *)
7054c3c9db83Smrg	    tmp_deplibs="$tmp_deplibs $test_deplib"
7055c3c9db83Smrg	    ;;
7056c3c9db83Smrg	  esac
7057c3c9db83Smrg	done
7058c3c9db83Smrg	deplibs="$tmp_deplibs"
7059692f60a7Smrg
7060c3c9db83Smrg	if test -n "$convenience"; then
7061c3c9db83Smrg	  if test -n "$whole_archive_flag_spec" &&
7062c3c9db83Smrg	    test "$compiler_needs_object" = yes &&
7063c3c9db83Smrg	    test -z "$libobjs"; then
7064c3c9db83Smrg	    # extract the archives, so we have objects to list.
7065c3c9db83Smrg	    # TODO: could optimize this to just extract one archive.
7066c3c9db83Smrg	    whole_archive_flag_spec=
7067c3c9db83Smrg	  fi
7068c3c9db83Smrg	  if test -n "$whole_archive_flag_spec"; then
7069c3c9db83Smrg	    save_libobjs=$libobjs
7070c3c9db83Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
7071c3c9db83Smrg	    test "X$libobjs" = "X " && libobjs=
7072c3c9db83Smrg	  else
7073c3c9db83Smrg	    gentop="$output_objdir/${outputname}x"
7074c3c9db83Smrg	    generated="$generated $gentop"
7075692f60a7Smrg
7076c3c9db83Smrg	    func_extract_archives $gentop $convenience
7077c3c9db83Smrg	    libobjs="$libobjs $func_extract_archives_result"
7078c3c9db83Smrg	    test "X$libobjs" = "X " && libobjs=
7079c3c9db83Smrg	  fi
70802e71ea71Smrg	fi
7081692f60a7Smrg
7082c3c9db83Smrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
7083c3c9db83Smrg	  eval flag=\"$thread_safe_flag_spec\"
7084c3c9db83Smrg	  linker_flags="$linker_flags $flag"
70852e71ea71Smrg	fi
708685ee4c00Smrg
7087c3c9db83Smrg	# Make a backup of the uninstalled library when relinking
7088c3c9db83Smrg	if test "$mode" = relink; then
7089c3c9db83Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
7090c3c9db83Smrg	fi
7091692f60a7Smrg
7092c3c9db83Smrg	# Do each of the archive commands.
7093c3c9db83Smrg	if test "$module" = yes && test -n "$module_cmds" ; then
7094c3c9db83Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
7095c3c9db83Smrg	    eval test_cmds=\"$module_expsym_cmds\"
7096c3c9db83Smrg	    cmds=$module_expsym_cmds
7097c3c9db83Smrg	  else
7098c3c9db83Smrg	    eval test_cmds=\"$module_cmds\"
7099c3c9db83Smrg	    cmds=$module_cmds
7100c3c9db83Smrg	  fi
71012e71ea71Smrg	else
7102c3c9db83Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
7103c3c9db83Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
7104c3c9db83Smrg	    cmds=$archive_expsym_cmds
7105c3c9db83Smrg	  else
7106c3c9db83Smrg	    eval test_cmds=\"$archive_cmds\"
7107c3c9db83Smrg	    cmds=$archive_cmds
7108c3c9db83Smrg	  fi
71092e71ea71Smrg	fi
7110692f60a7Smrg
7111c3c9db83Smrg	if test "X$skipped_export" != "X:" &&
7112c3c9db83Smrg	   func_len " $test_cmds" &&
7113c3c9db83Smrg	   len=$func_len_result &&
7114c3c9db83Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
7115c3c9db83Smrg	  :
7116c3c9db83Smrg	else
7117c3c9db83Smrg	  # The command line is too long to link in one step, link piecewise
7118c3c9db83Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
7119c3c9db83Smrg	  # script.
7120692f60a7Smrg
7121c3c9db83Smrg	  # Save the value of $output and $libobjs because we want to
7122c3c9db83Smrg	  # use them later.  If we have whole_archive_flag_spec, we
7123c3c9db83Smrg	  # want to use save_libobjs as it was before
7124c3c9db83Smrg	  # whole_archive_flag_spec was expanded, because we can't
7125c3c9db83Smrg	  # assume the linker understands whole_archive_flag_spec.
7126c3c9db83Smrg	  # This may have to be revisited, in case too many
7127c3c9db83Smrg	  # convenience libraries get linked in and end up exceeding
7128c3c9db83Smrg	  # the spec.
7129c3c9db83Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
7130c3c9db83Smrg	    save_libobjs=$libobjs
7131c3c9db83Smrg	  fi
7132c3c9db83Smrg	  save_output=$output
7133c3c9db83Smrg	  output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
7134692f60a7Smrg
7135c3c9db83Smrg	  # Clear the reloadable object creation command queue and
7136c3c9db83Smrg	  # initialize k to one.
7137c3c9db83Smrg	  test_cmds=
7138c3c9db83Smrg	  concat_cmds=
7139c3c9db83Smrg	  objlist=
7140c3c9db83Smrg	  last_robj=
7141c3c9db83Smrg	  k=1
7142c3c9db83Smrg
7143c3c9db83Smrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
7144c3c9db83Smrg	    output=${output_objdir}/${output_la}.lnkscript
7145c3c9db83Smrg	    func_verbose "creating GNU ld script: $output"
7146c3c9db83Smrg	    $ECHO 'INPUT (' > $output
7147c3c9db83Smrg	    for obj in $save_libobjs
71482e71ea71Smrg	    do
7149c3c9db83Smrg	      $ECHO "$obj" >> $output
7150c3c9db83Smrg	    done
7151c3c9db83Smrg	    $ECHO ')' >> $output
7152c3c9db83Smrg	    delfiles="$delfiles $output"
7153c3c9db83Smrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
7154c3c9db83Smrg	    output=${output_objdir}/${output_la}.lnk
7155c3c9db83Smrg	    func_verbose "creating linker input file list: $output"
7156c3c9db83Smrg	    : > $output
7157c3c9db83Smrg	    set x $save_libobjs
7158c3c9db83Smrg	    shift
7159c3c9db83Smrg	    firstobj=
7160c3c9db83Smrg	    if test "$compiler_needs_object" = yes; then
7161c3c9db83Smrg	      firstobj="$1 "
7162c3c9db83Smrg	      shift
7163c3c9db83Smrg	    fi
7164c3c9db83Smrg	    for obj
7165c3c9db83Smrg	    do
7166c3c9db83Smrg	      $ECHO "$obj" >> $output
7167c3c9db83Smrg	    done
7168c3c9db83Smrg	    delfiles="$delfiles $output"
7169c3c9db83Smrg	    output=$firstobj\"$file_list_spec$output\"
7170c3c9db83Smrg	  else
7171c3c9db83Smrg	    if test -n "$save_libobjs"; then
7172c3c9db83Smrg	      func_verbose "creating reloadable object files..."
7173c3c9db83Smrg	      output=$output_objdir/$output_la-${k}.$objext
7174c3c9db83Smrg	      eval test_cmds=\"$reload_cmds\"
7175c3c9db83Smrg	      func_len " $test_cmds"
7176c3c9db83Smrg	      len0=$func_len_result
7177c3c9db83Smrg	      len=$len0
7178c3c9db83Smrg
7179c3c9db83Smrg	      # Loop over the list of objects to be linked.
7180c3c9db83Smrg	      for obj in $save_libobjs
7181c3c9db83Smrg	      do
7182c3c9db83Smrg		func_len " $obj"
7183c3c9db83Smrg		func_arith $len + $func_len_result
7184c3c9db83Smrg		len=$func_arith_result
7185c3c9db83Smrg		if test "X$objlist" = X ||
7186c3c9db83Smrg		   test "$len" -lt "$max_cmd_len"; then
7187c3c9db83Smrg		  func_append objlist " $obj"
7188c3c9db83Smrg		else
7189c3c9db83Smrg		  # The command $test_cmds is almost too long, add a
7190c3c9db83Smrg		  # command to the queue.
7191c3c9db83Smrg		  if test "$k" -eq 1 ; then
7192c3c9db83Smrg		    # The first file doesn't have a previous command to add.
7193c3c9db83Smrg		    eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
7194c3c9db83Smrg		  else
7195c3c9db83Smrg		    # All subsequent reloadable object files will link in
7196c3c9db83Smrg		    # the last one created.
7197c3c9db83Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
7198c3c9db83Smrg		  fi
7199c3c9db83Smrg		  last_robj=$output_objdir/$output_la-${k}.$objext
7200c3c9db83Smrg		  func_arith $k + 1
7201c3c9db83Smrg		  k=$func_arith_result
7202c3c9db83Smrg		  output=$output_objdir/$output_la-${k}.$objext
7203c3c9db83Smrg		  objlist=$obj
7204c3c9db83Smrg		  func_len " $last_robj"
7205c3c9db83Smrg		  func_arith $len0 + $func_len_result
7206c3c9db83Smrg		  len=$func_arith_result
7207c3c9db83Smrg		fi
7208c3c9db83Smrg	      done
7209c3c9db83Smrg	      # Handle the remaining objects by creating one last
7210c3c9db83Smrg	      # reloadable object file.  All subsequent reloadable object
7211c3c9db83Smrg	      # files will link in the last one created.
7212c3c9db83Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
7213c3c9db83Smrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
7214c3c9db83Smrg	      if test -n "$last_robj"; then
7215c3c9db83Smrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
7216c3c9db83Smrg	      fi
7217c3c9db83Smrg	      delfiles="$delfiles $output"
7218692f60a7Smrg
7219c3c9db83Smrg	    else
7220c3c9db83Smrg	      output=
7221c3c9db83Smrg	    fi
7222692f60a7Smrg
7223c3c9db83Smrg	    if ${skipped_export-false}; then
7224c3c9db83Smrg	      func_verbose "generating symbol list for \`$libname.la'"
7225c3c9db83Smrg	      export_symbols="$output_objdir/$libname.exp"
7226c3c9db83Smrg	      $opt_dry_run || $RM $export_symbols
7227c3c9db83Smrg	      libobjs=$output
7228c3c9db83Smrg	      # Append the command to create the export file.
7229c3c9db83Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
7230c3c9db83Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
7231c3c9db83Smrg	      if test -n "$last_robj"; then
7232c3c9db83Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
7233c3c9db83Smrg	      fi
723485ee4c00Smrg	    fi
7235692f60a7Smrg
7236c3c9db83Smrg	    test -n "$save_libobjs" &&
7237c3c9db83Smrg	      func_verbose "creating a temporary reloadable object file: $output"
7238692f60a7Smrg
7239c3c9db83Smrg	    # Loop through the commands generated above and execute them.
7240c3c9db83Smrg	    save_ifs="$IFS"; IFS='~'
7241c3c9db83Smrg	    for cmd in $concat_cmds; do
7242c3c9db83Smrg	      IFS="$save_ifs"
7243c3c9db83Smrg	      $opt_silent || {
7244c3c9db83Smrg		  func_quote_for_expand "$cmd"
7245c3c9db83Smrg		  eval "func_echo $func_quote_for_expand_result"
7246c3c9db83Smrg	      }
7247c3c9db83Smrg	      $opt_dry_run || eval "$cmd" || {
7248c3c9db83Smrg		lt_exit=$?
7249c3c9db83Smrg
7250c3c9db83Smrg		# Restore the uninstalled library and exit
7251c3c9db83Smrg		if test "$mode" = relink; then
7252c3c9db83Smrg		  ( cd "$output_objdir" && \
7253c3c9db83Smrg		    $RM "${realname}T" && \
7254c3c9db83Smrg		    $MV "${realname}U" "$realname" )
7255c3c9db83Smrg		fi
7256692f60a7Smrg
7257c3c9db83Smrg		exit $lt_exit
7258c3c9db83Smrg	      }
7259c3c9db83Smrg	    done
7260c3c9db83Smrg	    IFS="$save_ifs"
72612e71ea71Smrg
7262c3c9db83Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
7263c3c9db83Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
7264c3c9db83Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
7265692f60a7Smrg	    fi
7266692f60a7Smrg	  fi
7267692f60a7Smrg
7268c3c9db83Smrg          if ${skipped_export-false}; then
7269c3c9db83Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
7270c3c9db83Smrg	      tmp_export_symbols="$export_symbols"
7271c3c9db83Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
7272c3c9db83Smrg	      $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
7273c3c9db83Smrg	    fi
727485ee4c00Smrg
7275c3c9db83Smrg	    if test -n "$orig_export_symbols"; then
7276c3c9db83Smrg	      # The given exports_symbols file has to be filtered, so filter it.
7277c3c9db83Smrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
7278c3c9db83Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
7279c3c9db83Smrg	      # 's' commands which not all seds can handle. GNU sed should be fine
7280c3c9db83Smrg	      # though. Also, the filter scales superlinearly with the number of
7281c3c9db83Smrg	      # global variables. join(1) would be nice here, but unfortunately
7282c3c9db83Smrg	      # isn't a blessed tool.
7283c3c9db83Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
7284c3c9db83Smrg	      delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
7285c3c9db83Smrg	      export_symbols=$output_objdir/$libname.def
7286c3c9db83Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
7287c3c9db83Smrg	    fi
7288c3c9db83Smrg	  fi
7289692f60a7Smrg
7290c3c9db83Smrg	  libobjs=$output
7291c3c9db83Smrg	  # Restore the value of output.
7292c3c9db83Smrg	  output=$save_output
7293692f60a7Smrg
7294c3c9db83Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
7295c3c9db83Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
7296c3c9db83Smrg	    test "X$libobjs" = "X " && libobjs=
7297c3c9db83Smrg	  fi
7298c3c9db83Smrg	  # Expand the library linking commands again to reset the
7299c3c9db83Smrg	  # value of $libobjs for piecewise linking.
7300692f60a7Smrg
7301c3c9db83Smrg	  # Do each of the archive commands.
7302c3c9db83Smrg	  if test "$module" = yes && test -n "$module_cmds" ; then
7303c3c9db83Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
7304c3c9db83Smrg	      cmds=$module_expsym_cmds
7305c3c9db83Smrg	    else
7306c3c9db83Smrg	      cmds=$module_cmds
73072e71ea71Smrg	    fi
73082e71ea71Smrg	  else
7309c3c9db83Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
7310c3c9db83Smrg	      cmds=$archive_expsym_cmds
7311c3c9db83Smrg	    else
7312c3c9db83Smrg	      cmds=$archive_cmds
7313c3c9db83Smrg	    fi
73142e71ea71Smrg	  fi
7315c3c9db83Smrg	fi
7316692f60a7Smrg
7317c3c9db83Smrg	if test -n "$delfiles"; then
7318c3c9db83Smrg	  # Append the command to remove temporary files to $cmds.
7319c3c9db83Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
7320c3c9db83Smrg	fi
7321692f60a7Smrg
7322c3c9db83Smrg	# Add any objects from preloaded convenience libraries
7323c3c9db83Smrg	if test -n "$dlprefiles"; then
7324c3c9db83Smrg	  gentop="$output_objdir/${outputname}x"
7325c3c9db83Smrg	  generated="$generated $gentop"
7326692f60a7Smrg
7327c3c9db83Smrg	  func_extract_archives $gentop $dlprefiles
7328c3c9db83Smrg	  libobjs="$libobjs $func_extract_archives_result"
7329c3c9db83Smrg	  test "X$libobjs" = "X " && libobjs=
7330c3c9db83Smrg	fi
7331692f60a7Smrg
7332c3c9db83Smrg	save_ifs="$IFS"; IFS='~'
7333c3c9db83Smrg	for cmd in $cmds; do
7334c3c9db83Smrg	  IFS="$save_ifs"
7335c3c9db83Smrg	  eval cmd=\"$cmd\"
7336c3c9db83Smrg	  $opt_silent || {
7337c3c9db83Smrg	    func_quote_for_expand "$cmd"
7338c3c9db83Smrg	    eval "func_echo $func_quote_for_expand_result"
7339c3c9db83Smrg	  }
7340c3c9db83Smrg	  $opt_dry_run || eval "$cmd" || {
7341c3c9db83Smrg	    lt_exit=$?
734285ee4c00Smrg
7343c3c9db83Smrg	    # Restore the uninstalled library and exit
7344c3c9db83Smrg	    if test "$mode" = relink; then
7345c3c9db83Smrg	      ( cd "$output_objdir" && \
7346c3c9db83Smrg	        $RM "${realname}T" && \
7347c3c9db83Smrg		$MV "${realname}U" "$realname" )
7348c3c9db83Smrg	    fi
734985ee4c00Smrg
7350c3c9db83Smrg	    exit $lt_exit
7351c3c9db83Smrg	  }
7352c3c9db83Smrg	done
7353c3c9db83Smrg	IFS="$save_ifs"
735485ee4c00Smrg
7355c3c9db83Smrg	# Restore the uninstalled library and exit
7356c3c9db83Smrg	if test "$mode" = relink; then
7357c3c9db83Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
735885ee4c00Smrg
7359c3c9db83Smrg	  if test -n "$convenience"; then
7360c3c9db83Smrg	    if test -z "$whole_archive_flag_spec"; then
7361c3c9db83Smrg	      func_show_eval '${RM}r "$gentop"'
7362c3c9db83Smrg	    fi
7363c3c9db83Smrg	  fi
736485ee4c00Smrg
7365c3c9db83Smrg	  exit $EXIT_SUCCESS
7366c3c9db83Smrg	fi
7367c3c9db83Smrg
7368c3c9db83Smrg	# Create links to the real library.
7369c3c9db83Smrg	for linkname in $linknames; do
7370c3c9db83Smrg	  if test "$realname" != "$linkname"; then
7371c3c9db83Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
73722e71ea71Smrg	  fi
73732e71ea71Smrg	done
737485ee4c00Smrg
7375c3c9db83Smrg	# If -module or -export-dynamic was specified, set the dlname.
7376c3c9db83Smrg	if test "$module" = yes || test "$export_dynamic" = yes; then
7377c3c9db83Smrg	  # On all known operating systems, these are identical.
7378c3c9db83Smrg	  dlname="$soname"
7379c3c9db83Smrg	fi
7380c3c9db83Smrg      fi
7381692f60a7Smrg      ;;
7382692f60a7Smrg
7383c3c9db83Smrg    obj)
7384c3c9db83Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
7385c3c9db83Smrg	func_warning "\`-dlopen' is ignored for objects"
7386c3c9db83Smrg      fi
73872e71ea71Smrg
7388c3c9db83Smrg      case " $deplibs" in
7389c3c9db83Smrg      *\ -l* | *\ -L*)
7390c3c9db83Smrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
739185ee4c00Smrg      esac
7392692f60a7Smrg
7393c3c9db83Smrg      test -n "$rpath" && \
7394c3c9db83Smrg	func_warning "\`-rpath' is ignored for objects"
7395c3c9db83Smrg
7396c3c9db83Smrg      test -n "$xrpath" && \
7397c3c9db83Smrg	func_warning "\`-R' is ignored for objects"
7398692f60a7Smrg
7399c3c9db83Smrg      test -n "$vinfo" && \
7400c3c9db83Smrg	func_warning "\`-version-info' is ignored for objects"
740185ee4c00Smrg
7402c3c9db83Smrg      test -n "$release" && \
7403c3c9db83Smrg	func_warning "\`-release' is ignored for objects"
7404c3c9db83Smrg
7405c3c9db83Smrg      case $output in
7406c3c9db83Smrg      *.lo)
7407c3c9db83Smrg	test -n "$objs$old_deplibs" && \
7408c3c9db83Smrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
7409c3c9db83Smrg
7410c3c9db83Smrg	libobj=$output
7411c3c9db83Smrg	func_lo2o "$libobj"
7412c3c9db83Smrg	obj=$func_lo2o_result
74132e71ea71Smrg	;;
74142e71ea71Smrg      *)
7415c3c9db83Smrg	libobj=
7416c3c9db83Smrg	obj="$output"
7417692f60a7Smrg	;;
741885ee4c00Smrg      esac
7419692f60a7Smrg
7420c3c9db83Smrg      # Delete the old objects.
7421c3c9db83Smrg      $opt_dry_run || $RM $obj $libobj
7422692f60a7Smrg
7423c3c9db83Smrg      # Objects from convenience libraries.  This assumes
7424c3c9db83Smrg      # single-version convenience libraries.  Whenever we create
7425c3c9db83Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
7426c3c9db83Smrg      # the extraction.
7427c3c9db83Smrg      reload_conv_objs=
7428c3c9db83Smrg      gentop=
7429c3c9db83Smrg      # reload_cmds runs $LD directly, so let us get rid of
7430c3c9db83Smrg      # -Wl from whole_archive_flag_spec and hope we can get by with
7431c3c9db83Smrg      # turning comma into space..
7432c3c9db83Smrg      wl=
7433692f60a7Smrg
7434c3c9db83Smrg      if test -n "$convenience"; then
7435c3c9db83Smrg	if test -n "$whole_archive_flag_spec"; then
7436c3c9db83Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
7437c3c9db83Smrg	  reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
7438c3c9db83Smrg	else
7439c3c9db83Smrg	  gentop="$output_objdir/${obj}x"
7440c3c9db83Smrg	  generated="$generated $gentop"
74412e71ea71Smrg
7442c3c9db83Smrg	  func_extract_archives $gentop $convenience
7443c3c9db83Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
7444c3c9db83Smrg	fi
74452e71ea71Smrg      fi
74462e71ea71Smrg
7447c3c9db83Smrg      # Create the old-style object.
7448c3c9db83Smrg      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
74492e71ea71Smrg
7450c3c9db83Smrg      output="$obj"
7451c3c9db83Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
74522e71ea71Smrg
7453c3c9db83Smrg      # Exit if we aren't doing a library object file.
7454c3c9db83Smrg      if test -z "$libobj"; then
7455c3c9db83Smrg	if test -n "$gentop"; then
7456c3c9db83Smrg	  func_show_eval '${RM}r "$gentop"'
7457c3c9db83Smrg	fi
7458c3c9db83Smrg
7459c3c9db83Smrg	exit $EXIT_SUCCESS
74602e71ea71Smrg      fi
7461c3c9db83Smrg
7462c3c9db83Smrg      if test "$build_libtool_libs" != yes; then
7463c3c9db83Smrg	if test -n "$gentop"; then
7464c3c9db83Smrg	  func_show_eval '${RM}r "$gentop"'
7465c3c9db83Smrg	fi
7466c3c9db83Smrg
7467c3c9db83Smrg	# Create an invalid libtool object if no PIC, so that we don't
7468c3c9db83Smrg	# accidentally link it into a program.
7469c3c9db83Smrg	# $show "echo timestamp > $libobj"
7470c3c9db83Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
7471c3c9db83Smrg	exit $EXIT_SUCCESS
7472c3c9db83Smrg      fi
7473c3c9db83Smrg
7474c3c9db83Smrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
7475c3c9db83Smrg	# Only do commands if we really have different PIC objects.
7476c3c9db83Smrg	reload_objs="$libobjs $reload_conv_objs"
7477c3c9db83Smrg	output="$libobj"
7478c3c9db83Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
7479c3c9db83Smrg      fi
7480c3c9db83Smrg
7481c3c9db83Smrg      if test -n "$gentop"; then
7482c3c9db83Smrg	func_show_eval '${RM}r "$gentop"'
7483c3c9db83Smrg      fi
7484c3c9db83Smrg
7485c3c9db83Smrg      exit $EXIT_SUCCESS
74862e71ea71Smrg      ;;
7487692f60a7Smrg
7488c3c9db83Smrg    prog)
7489c3c9db83Smrg      case $host in
7490c3c9db83Smrg	*cygwin*) func_stripname '' '.exe' "$output"
7491c3c9db83Smrg	          output=$func_stripname_result.exe;;
7492c3c9db83Smrg      esac
7493c3c9db83Smrg      test -n "$vinfo" && \
7494c3c9db83Smrg	func_warning "\`-version-info' is ignored for programs"
7495692f60a7Smrg
7496c3c9db83Smrg      test -n "$release" && \
7497c3c9db83Smrg	func_warning "\`-release' is ignored for programs"
7498692f60a7Smrg
7499c3c9db83Smrg      test "$preload" = yes \
7500c3c9db83Smrg        && test "$dlopen_support" = unknown \
7501c3c9db83Smrg	&& test "$dlopen_self" = unknown \
7502c3c9db83Smrg	&& test "$dlopen_self_static" = unknown && \
7503c3c9db83Smrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
7504c3c9db83Smrg
7505c3c9db83Smrg      case $host in
7506c3c9db83Smrg      *-*-rhapsody* | *-*-darwin1.[012])
7507c3c9db83Smrg	# On Rhapsody replace the C library is the System framework
7508c3c9db83Smrg	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
7509c3c9db83Smrg	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
75102e71ea71Smrg	;;
7511c3c9db83Smrg      esac
75122e71ea71Smrg
7513c3c9db83Smrg      case $host in
7514c3c9db83Smrg      *-*-darwin*)
7515c3c9db83Smrg	# Don't allow lazy linking, it breaks C++ global constructors
7516c3c9db83Smrg	# But is supposedly fixed on 10.4 or later (yay!).
7517c3c9db83Smrg	if test "$tagname" = CXX ; then
7518c3c9db83Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
7519c3c9db83Smrg	    10.[0123])
7520c3c9db83Smrg	      compile_command="$compile_command ${wl}-bind_at_load"
7521c3c9db83Smrg	      finalize_command="$finalize_command ${wl}-bind_at_load"
7522c3c9db83Smrg	    ;;
7523c3c9db83Smrg	  esac
75242e71ea71Smrg	fi
7525c3c9db83Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
7526c3c9db83Smrg	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
7527c3c9db83Smrg	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
7528c3c9db83Smrg	;;
7529c3c9db83Smrg      esac
75302e71ea71Smrg
75312e71ea71Smrg
7532c3c9db83Smrg      # move library search paths that coincide with paths to not yet
7533c3c9db83Smrg      # installed libraries to the beginning of the library search list
7534c3c9db83Smrg      new_libs=
7535c3c9db83Smrg      for path in $notinst_path; do
7536c3c9db83Smrg	case " $new_libs " in
7537c3c9db83Smrg	*" -L$path/$objdir "*) ;;
7538c3c9db83Smrg	*)
7539c3c9db83Smrg	  case " $compile_deplibs " in
7540c3c9db83Smrg	  *" -L$path/$objdir "*)
7541c3c9db83Smrg	    new_libs="$new_libs -L$path/$objdir" ;;
754285ee4c00Smrg	  esac
7543c3c9db83Smrg	  ;;
7544c3c9db83Smrg	esac
7545c3c9db83Smrg      done
7546c3c9db83Smrg      for deplib in $compile_deplibs; do
7547c3c9db83Smrg	case $deplib in
7548c3c9db83Smrg	-L*)
7549c3c9db83Smrg	  case " $new_libs " in
7550c3c9db83Smrg	  *" $deplib "*) ;;
7551c3c9db83Smrg	  *) new_libs="$new_libs $deplib" ;;
755285ee4c00Smrg	  esac
7553c3c9db83Smrg	  ;;
7554c3c9db83Smrg	*) new_libs="$new_libs $deplib" ;;
7555c3c9db83Smrg	esac
7556c3c9db83Smrg      done
7557c3c9db83Smrg      compile_deplibs="$new_libs"
7558692f60a7Smrg
75592e71ea71Smrg
7560c3c9db83Smrg      compile_command="$compile_command $compile_deplibs"
7561c3c9db83Smrg      finalize_command="$finalize_command $finalize_deplibs"
75622e71ea71Smrg
7563c3c9db83Smrg      if test -n "$rpath$xrpath"; then
7564c3c9db83Smrg	# If the user specified any rpath flags, then add them.
7565c3c9db83Smrg	for libdir in $rpath $xrpath; do
7566c3c9db83Smrg	  # This is the magic to use -rpath.
7567c3c9db83Smrg	  case "$finalize_rpath " in
7568c3c9db83Smrg	  *" $libdir "*) ;;
7569c3c9db83Smrg	  *) finalize_rpath="$finalize_rpath $libdir" ;;
7570c3c9db83Smrg	  esac
7571c3c9db83Smrg	done
7572c3c9db83Smrg      fi
75732e71ea71Smrg
7574c3c9db83Smrg      # Now hardcode the library paths
7575c3c9db83Smrg      rpath=
7576c3c9db83Smrg      hardcode_libdirs=
7577c3c9db83Smrg      for libdir in $compile_rpath $finalize_rpath; do
7578c3c9db83Smrg	if test -n "$hardcode_libdir_flag_spec"; then
7579c3c9db83Smrg	  if test -n "$hardcode_libdir_separator"; then
7580c3c9db83Smrg	    if test -z "$hardcode_libdirs"; then
7581c3c9db83Smrg	      hardcode_libdirs="$libdir"
7582c3c9db83Smrg	    else
7583c3c9db83Smrg	      # Just accumulate the unique libdirs.
7584c3c9db83Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
7585c3c9db83Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
7586c3c9db83Smrg		;;
7587c3c9db83Smrg	      *)
7588c3c9db83Smrg		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
7589c3c9db83Smrg		;;
7590c3c9db83Smrg	      esac
7591c3c9db83Smrg	    fi
75922e71ea71Smrg	  else
7593c3c9db83Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
7594c3c9db83Smrg	    rpath="$rpath $flag"
75952e71ea71Smrg	  fi
7596c3c9db83Smrg	elif test -n "$runpath_var"; then
7597c3c9db83Smrg	  case "$perm_rpath " in
7598c3c9db83Smrg	  *" $libdir "*) ;;
7599c3c9db83Smrg	  *) perm_rpath="$perm_rpath $libdir" ;;
7600c3c9db83Smrg	  esac
7601c3c9db83Smrg	fi
7602c3c9db83Smrg	case $host in
7603c3c9db83Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
7604c3c9db83Smrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
7605c3c9db83Smrg	  case :$dllsearchpath: in
7606c3c9db83Smrg	  *":$libdir:"*) ;;
7607c3c9db83Smrg	  ::) dllsearchpath=$libdir;;
7608c3c9db83Smrg	  *) dllsearchpath="$dllsearchpath:$libdir";;
7609c3c9db83Smrg	  esac
7610c3c9db83Smrg	  case :$dllsearchpath: in
7611c3c9db83Smrg	  *":$testbindir:"*) ;;
7612c3c9db83Smrg	  ::) dllsearchpath=$testbindir;;
7613c3c9db83Smrg	  *) dllsearchpath="$dllsearchpath:$testbindir";;
7614c3c9db83Smrg	  esac
7615c3c9db83Smrg	  ;;
7616c3c9db83Smrg	esac
7617c3c9db83Smrg      done
7618c3c9db83Smrg      # Substitute the hardcoded libdirs into the rpath.
7619c3c9db83Smrg      if test -n "$hardcode_libdir_separator" &&
7620c3c9db83Smrg	 test -n "$hardcode_libdirs"; then
7621c3c9db83Smrg	libdir="$hardcode_libdirs"
7622c3c9db83Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
7623c3c9db83Smrg      fi
7624c3c9db83Smrg      compile_rpath="$rpath"
76252e71ea71Smrg
7626c3c9db83Smrg      rpath=
7627c3c9db83Smrg      hardcode_libdirs=
7628c3c9db83Smrg      for libdir in $finalize_rpath; do
7629c3c9db83Smrg	if test -n "$hardcode_libdir_flag_spec"; then
7630c3c9db83Smrg	  if test -n "$hardcode_libdir_separator"; then
7631c3c9db83Smrg	    if test -z "$hardcode_libdirs"; then
7632c3c9db83Smrg	      hardcode_libdirs="$libdir"
7633c3c9db83Smrg	    else
7634c3c9db83Smrg	      # Just accumulate the unique libdirs.
7635c3c9db83Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
7636c3c9db83Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
7637c3c9db83Smrg		;;
7638c3c9db83Smrg	      *)
7639c3c9db83Smrg		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
7640c3c9db83Smrg		;;
7641c3c9db83Smrg	      esac
7642c3c9db83Smrg	    fi
7643692f60a7Smrg	  else
7644c3c9db83Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
7645c3c9db83Smrg	    rpath="$rpath $flag"
7646692f60a7Smrg	  fi
7647c3c9db83Smrg	elif test -n "$runpath_var"; then
7648c3c9db83Smrg	  case "$finalize_perm_rpath " in
7649c3c9db83Smrg	  *" $libdir "*) ;;
7650c3c9db83Smrg	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
7651c3c9db83Smrg	  esac
7652692f60a7Smrg	fi
7653c3c9db83Smrg      done
7654c3c9db83Smrg      # Substitute the hardcoded libdirs into the rpath.
7655c3c9db83Smrg      if test -n "$hardcode_libdir_separator" &&
7656c3c9db83Smrg	 test -n "$hardcode_libdirs"; then
7657c3c9db83Smrg	libdir="$hardcode_libdirs"
7658c3c9db83Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
7659c3c9db83Smrg      fi
7660c3c9db83Smrg      finalize_rpath="$rpath"
7661692f60a7Smrg
7662c3c9db83Smrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
7663c3c9db83Smrg	# Transform all the library objects into standard objects.
7664c3c9db83Smrg	compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
7665c3c9db83Smrg	finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
7666c3c9db83Smrg      fi
7667692f60a7Smrg
7668c3c9db83Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
7669692f60a7Smrg
7670c3c9db83Smrg      # template prelinking step
7671c3c9db83Smrg      if test -n "$prelink_cmds"; then
7672c3c9db83Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
7673c3c9db83Smrg      fi
7674692f60a7Smrg
7675c3c9db83Smrg      wrappers_required=yes
7676c3c9db83Smrg      case $host in
7677c3c9db83Smrg      *cygwin* | *mingw* )
7678c3c9db83Smrg        if test "$build_libtool_libs" != yes; then
7679c3c9db83Smrg          wrappers_required=no
7680c3c9db83Smrg        fi
7681c3c9db83Smrg        ;;
7682c3c9db83Smrg      *cegcc)
7683c3c9db83Smrg        # Disable wrappers for cegcc, we are cross compiling anyway.
7684c3c9db83Smrg        wrappers_required=no
7685c3c9db83Smrg        ;;
7686c3c9db83Smrg      *)
7687c3c9db83Smrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
7688c3c9db83Smrg          wrappers_required=no
7689c3c9db83Smrg        fi
7690c3c9db83Smrg        ;;
7691c3c9db83Smrg      esac
7692c3c9db83Smrg      if test "$wrappers_required" = no; then
7693c3c9db83Smrg	# Replace the output file specification.
7694c3c9db83Smrg	compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
7695c3c9db83Smrg	link_command="$compile_command$compile_rpath"
7696692f60a7Smrg
7697c3c9db83Smrg	# We have no uninstalled library dependencies, so finalize right now.
7698c3c9db83Smrg	exit_status=0
7699c3c9db83Smrg	func_show_eval "$link_command" 'exit_status=$?'
7700692f60a7Smrg
7701c3c9db83Smrg	# Delete the generated files.
7702c3c9db83Smrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
7703c3c9db83Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
7704692f60a7Smrg	fi
7705692f60a7Smrg
7706c3c9db83Smrg	exit $exit_status
7707c3c9db83Smrg      fi
7708692f60a7Smrg
7709c3c9db83Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
7710c3c9db83Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
7711c3c9db83Smrg      fi
7712c3c9db83Smrg      if test -n "$finalize_shlibpath"; then
7713c3c9db83Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
7714c3c9db83Smrg      fi
77152e71ea71Smrg
7716c3c9db83Smrg      compile_var=
7717c3c9db83Smrg      finalize_var=
7718c3c9db83Smrg      if test -n "$runpath_var"; then
7719c3c9db83Smrg	if test -n "$perm_rpath"; then
7720c3c9db83Smrg	  # We should set the runpath_var.
7721c3c9db83Smrg	  rpath=
7722c3c9db83Smrg	  for dir in $perm_rpath; do
7723c3c9db83Smrg	    rpath="$rpath$dir:"
7724c3c9db83Smrg	  done
7725c3c9db83Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
7726692f60a7Smrg	fi
7727c3c9db83Smrg	if test -n "$finalize_perm_rpath"; then
7728c3c9db83Smrg	  # We should set the runpath_var.
7729c3c9db83Smrg	  rpath=
7730c3c9db83Smrg	  for dir in $finalize_perm_rpath; do
7731c3c9db83Smrg	    rpath="$rpath$dir:"
7732c3c9db83Smrg	  done
7733c3c9db83Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
7734692f60a7Smrg	fi
7735c3c9db83Smrg      fi
7736692f60a7Smrg
7737c3c9db83Smrg      if test "$no_install" = yes; then
7738c3c9db83Smrg	# We don't need to create a wrapper script.
7739c3c9db83Smrg	link_command="$compile_var$compile_command$compile_rpath"
7740c3c9db83Smrg	# Replace the output file specification.
7741c3c9db83Smrg	link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
7742c3c9db83Smrg	# Delete the old output file.
7743c3c9db83Smrg	$opt_dry_run || $RM $output
7744c3c9db83Smrg	# Link the executable and exit
7745c3c9db83Smrg	func_show_eval "$link_command" 'exit $?'
77462e71ea71Smrg	exit $EXIT_SUCCESS
7747c3c9db83Smrg      fi
774885ee4c00Smrg
7749c3c9db83Smrg      if test "$hardcode_action" = relink; then
7750c3c9db83Smrg	# Fast installation is not supported
7751c3c9db83Smrg	link_command="$compile_var$compile_command$compile_rpath"
7752c3c9db83Smrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
7753c3c9db83Smrg
7754c3c9db83Smrg	func_warning "this platform does not like uninstalled shared libraries"
7755c3c9db83Smrg	func_warning "\`$output' will be relinked during installation"
7756c3c9db83Smrg      else
7757c3c9db83Smrg	if test "$fast_install" != no; then
7758c3c9db83Smrg	  link_command="$finalize_var$compile_command$finalize_rpath"
7759c3c9db83Smrg	  if test "$fast_install" = yes; then
7760c3c9db83Smrg	    relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
7761c3c9db83Smrg	  else
7762c3c9db83Smrg	    # fast_install is set to needless
7763c3c9db83Smrg	    relink_command=
7764c3c9db83Smrg	  fi
7765692f60a7Smrg	else
7766c3c9db83Smrg	  link_command="$compile_var$compile_command$compile_rpath"
7767c3c9db83Smrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
7768692f60a7Smrg	fi
7769c3c9db83Smrg      fi
7770692f60a7Smrg
7771c3c9db83Smrg      # Replace the output file specification.
7772c3c9db83Smrg      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
7773692f60a7Smrg
7774c3c9db83Smrg      # Delete the old output files.
7775c3c9db83Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
7776692f60a7Smrg
7777c3c9db83Smrg      func_show_eval "$link_command" 'exit $?'
77782e71ea71Smrg
7779c3c9db83Smrg      # Now create the wrapper script.
7780c3c9db83Smrg      func_verbose "creating $output"
77812e71ea71Smrg
7782c3c9db83Smrg      # Quote the relink command for shipping.
7783c3c9db83Smrg      if test -n "$relink_command"; then
7784c3c9db83Smrg	# Preserve any variables that may affect compiler behavior
7785c3c9db83Smrg	for var in $variables_saved_for_relink; do
7786c3c9db83Smrg	  if eval test -z \"\${$var+set}\"; then
7787c3c9db83Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
7788c3c9db83Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
7789c3c9db83Smrg	    relink_command="$var=; export $var; $relink_command"
7790692f60a7Smrg	  else
7791c3c9db83Smrg	    func_quote_for_eval "$var_value"
7792c3c9db83Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
7793692f60a7Smrg	  fi
7794c3c9db83Smrg	done
7795c3c9db83Smrg	relink_command="(cd `pwd`; $relink_command)"
7796c3c9db83Smrg	relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
7797c3c9db83Smrg      fi
779885ee4c00Smrg
7799c3c9db83Smrg      # Quote $ECHO for shipping.
7800c3c9db83Smrg      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
7801c3c9db83Smrg	case $progpath in
7802c3c9db83Smrg	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
7803c3c9db83Smrg	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
7804c3c9db83Smrg	esac
7805c3c9db83Smrg	qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
7806c3c9db83Smrg      else
7807c3c9db83Smrg	qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
7808c3c9db83Smrg      fi
7809c3c9db83Smrg
7810c3c9db83Smrg      # Only actually do things if not in dry run mode.
7811c3c9db83Smrg      $opt_dry_run || {
7812c3c9db83Smrg	# win32 will think the script is a binary if it has
7813c3c9db83Smrg	# a .exe suffix, so we strip it off here.
7814c3c9db83Smrg	case $output in
7815c3c9db83Smrg	  *.exe) func_stripname '' '.exe' "$output"
7816c3c9db83Smrg	         output=$func_stripname_result ;;
7817c3c9db83Smrg	esac
7818c3c9db83Smrg	# test for cygwin because mv fails w/o .exe extensions
7819c3c9db83Smrg	case $host in
7820c3c9db83Smrg	  *cygwin*)
7821c3c9db83Smrg	    exeext=.exe
7822c3c9db83Smrg	    func_stripname '' '.exe' "$outputname"
7823c3c9db83Smrg	    outputname=$func_stripname_result ;;
7824c3c9db83Smrg	  *) exeext= ;;
7825692f60a7Smrg	esac
7826c3c9db83Smrg	case $host in
7827c3c9db83Smrg	  *cygwin* | *mingw* )
7828c3c9db83Smrg	    func_dirname_and_basename "$output" "" "."
7829c3c9db83Smrg	    output_name=$func_basename_result
7830c3c9db83Smrg	    output_path=$func_dirname_result
7831c3c9db83Smrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
7832c3c9db83Smrg	    cwrapper="$output_path/$output_name.exe"
7833c3c9db83Smrg	    $RM $cwrappersource $cwrapper
7834c3c9db83Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
7835c3c9db83Smrg
7836c3c9db83Smrg	    func_emit_cwrapperexe_src > $cwrappersource
7837c3c9db83Smrg
7838c3c9db83Smrg	    # The wrapper executable is built using the $host compiler,
7839c3c9db83Smrg	    # because it contains $host paths and files. If cross-
7840c3c9db83Smrg	    # compiling, it, like the target executable, must be
7841c3c9db83Smrg	    # executed on the $host or under an emulation environment.
7842c3c9db83Smrg	    $opt_dry_run || {
7843c3c9db83Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
7844c3c9db83Smrg	      $STRIP $cwrapper
7845c3c9db83Smrg	    }
7846692f60a7Smrg
7847c3c9db83Smrg	    # Now, create the wrapper script for func_source use:
7848c3c9db83Smrg	    func_ltwrapper_scriptname $cwrapper
7849c3c9db83Smrg	    $RM $func_ltwrapper_scriptname_result
7850c3c9db83Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
7851c3c9db83Smrg	    $opt_dry_run || {
7852c3c9db83Smrg	      # note: this script will not be executed, so do not chmod.
7853c3c9db83Smrg	      if test "x$build" = "x$host" ; then
7854c3c9db83Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
7855c3c9db83Smrg	      else
7856c3c9db83Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
7857c3c9db83Smrg	      fi
7858c3c9db83Smrg	    }
7859c3c9db83Smrg	  ;;
7860c3c9db83Smrg	  * )
7861c3c9db83Smrg	    $RM $output
7862c3c9db83Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
7863692f60a7Smrg
7864c3c9db83Smrg	    func_emit_wrapper no > $output
7865c3c9db83Smrg	    chmod +x $output
7866c3c9db83Smrg	  ;;
7867c3c9db83Smrg	esac
7868c3c9db83Smrg      }
7869c3c9db83Smrg      exit $EXIT_SUCCESS
7870c3c9db83Smrg      ;;
7871c3c9db83Smrg    esac
7872692f60a7Smrg
7873c3c9db83Smrg    # See if we need to build an old-fashioned archive.
7874c3c9db83Smrg    for oldlib in $oldlibs; do
7875692f60a7Smrg
7876c3c9db83Smrg      if test "$build_libtool_libs" = convenience; then
7877c3c9db83Smrg	oldobjs="$libobjs_save $symfileobj"
7878c3c9db83Smrg	addlibs="$convenience"
7879c3c9db83Smrg	build_libtool_libs=no
7880c3c9db83Smrg      else
7881c3c9db83Smrg	if test "$build_libtool_libs" = module; then
7882c3c9db83Smrg	  oldobjs="$libobjs_save"
7883c3c9db83Smrg	  build_libtool_libs=no
7884c3c9db83Smrg	else
7885c3c9db83Smrg	  oldobjs="$old_deplibs $non_pic_objects"
7886c3c9db83Smrg	  if test "$preload" = yes && test -f "$symfileobj"; then
7887c3c9db83Smrg	    oldobjs="$oldobjs $symfileobj"
7888c3c9db83Smrg	  fi
7889c3c9db83Smrg	fi
7890c3c9db83Smrg	addlibs="$old_convenience"
7891692f60a7Smrg      fi
7892692f60a7Smrg
7893c3c9db83Smrg      if test -n "$addlibs"; then
7894c3c9db83Smrg	gentop="$output_objdir/${outputname}x"
7895c3c9db83Smrg	generated="$generated $gentop"
7896692f60a7Smrg
7897c3c9db83Smrg	func_extract_archives $gentop $addlibs
7898c3c9db83Smrg	oldobjs="$oldobjs $func_extract_archives_result"
7899c3c9db83Smrg      fi
7900692f60a7Smrg
7901c3c9db83Smrg      # Do each command in the archive commands.
7902c3c9db83Smrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
7903c3c9db83Smrg	cmds=$old_archive_from_new_cmds
7904c3c9db83Smrg      else
7905692f60a7Smrg
7906c3c9db83Smrg	# Add any objects from preloaded convenience libraries
7907c3c9db83Smrg	if test -n "$dlprefiles"; then
7908c3c9db83Smrg	  gentop="$output_objdir/${outputname}x"
7909c3c9db83Smrg	  generated="$generated $gentop"
7910692f60a7Smrg
7911c3c9db83Smrg	  func_extract_archives $gentop $dlprefiles
7912c3c9db83Smrg	  oldobjs="$oldobjs $func_extract_archives_result"
7913c3c9db83Smrg	fi
7914692f60a7Smrg
7915c3c9db83Smrg	# POSIX demands no paths to be encoded in archives.  We have
7916c3c9db83Smrg	# to avoid creating archives with duplicate basenames if we
7917c3c9db83Smrg	# might have to extract them afterwards, e.g., when creating a
7918c3c9db83Smrg	# static archive out of a convenience library, or when linking
7919c3c9db83Smrg	# the entirety of a libtool archive into another (currently
7920c3c9db83Smrg	# not supported by libtool).
7921c3c9db83Smrg	if (for obj in $oldobjs
7922c3c9db83Smrg	    do
7923c3c9db83Smrg	      func_basename "$obj"
7924c3c9db83Smrg	      $ECHO "$func_basename_result"
7925c3c9db83Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
7926c3c9db83Smrg	  :
7927c3c9db83Smrg	else
7928c3c9db83Smrg	  $ECHO "copying selected object files to avoid basename conflicts..."
7929c3c9db83Smrg	  gentop="$output_objdir/${outputname}x"
7930c3c9db83Smrg	  generated="$generated $gentop"
7931c3c9db83Smrg	  func_mkdir_p "$gentop"
7932c3c9db83Smrg	  save_oldobjs=$oldobjs
7933c3c9db83Smrg	  oldobjs=
7934c3c9db83Smrg	  counter=1
7935c3c9db83Smrg	  for obj in $save_oldobjs
7936c3c9db83Smrg	  do
7937c3c9db83Smrg	    func_basename "$obj"
7938c3c9db83Smrg	    objbase="$func_basename_result"
7939c3c9db83Smrg	    case " $oldobjs " in
7940c3c9db83Smrg	    " ") oldobjs=$obj ;;
7941c3c9db83Smrg	    *[\ /]"$objbase "*)
7942c3c9db83Smrg	      while :; do
7943c3c9db83Smrg		# Make sure we don't pick an alternate name that also
7944c3c9db83Smrg		# overlaps.
7945c3c9db83Smrg		newobj=lt$counter-$objbase
7946c3c9db83Smrg		func_arith $counter + 1
7947c3c9db83Smrg		counter=$func_arith_result
7948c3c9db83Smrg		case " $oldobjs " in
7949c3c9db83Smrg		*[\ /]"$newobj "*) ;;
7950c3c9db83Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
7951c3c9db83Smrg		esac
7952c3c9db83Smrg	      done
7953c3c9db83Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
7954c3c9db83Smrg	      oldobjs="$oldobjs $gentop/$newobj"
7955c3c9db83Smrg	      ;;
7956c3c9db83Smrg	    *) oldobjs="$oldobjs $obj" ;;
7957c3c9db83Smrg	    esac
7958692f60a7Smrg	  done
795985ee4c00Smrg	fi
7960c3c9db83Smrg	eval cmds=\"$old_archive_cmds\"
79612e71ea71Smrg
7962c3c9db83Smrg	func_len " $cmds"
7963c3c9db83Smrg	len=$func_len_result
7964c3c9db83Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
7965c3c9db83Smrg	  cmds=$old_archive_cmds
7966c3c9db83Smrg	else
7967c3c9db83Smrg	  # the command line is too long to link in one step, link in parts
7968c3c9db83Smrg	  func_verbose "using piecewise archive linking..."
7969c3c9db83Smrg	  save_RANLIB=$RANLIB
7970c3c9db83Smrg	  RANLIB=:
7971c3c9db83Smrg	  objlist=
7972c3c9db83Smrg	  concat_cmds=
7973c3c9db83Smrg	  save_oldobjs=$oldobjs
7974c3c9db83Smrg	  oldobjs=
7975c3c9db83Smrg	  # Is there a better way of finding the last object in the list?
7976c3c9db83Smrg	  for obj in $save_oldobjs
7977c3c9db83Smrg	  do
7978c3c9db83Smrg	    last_oldobj=$obj
7979c3c9db83Smrg	  done
7980c3c9db83Smrg	  eval test_cmds=\"$old_archive_cmds\"
7981c3c9db83Smrg	  func_len " $test_cmds"
7982c3c9db83Smrg	  len0=$func_len_result
7983c3c9db83Smrg	  len=$len0
7984c3c9db83Smrg	  for obj in $save_oldobjs
7985c3c9db83Smrg	  do
7986c3c9db83Smrg	    func_len " $obj"
7987c3c9db83Smrg	    func_arith $len + $func_len_result
7988c3c9db83Smrg	    len=$func_arith_result
7989c3c9db83Smrg	    func_append objlist " $obj"
7990c3c9db83Smrg	    if test "$len" -lt "$max_cmd_len"; then
7991c3c9db83Smrg	      :
7992c3c9db83Smrg	    else
7993c3c9db83Smrg	      # the above command should be used before it gets too long
7994c3c9db83Smrg	      oldobjs=$objlist
7995c3c9db83Smrg	      if test "$obj" = "$last_oldobj" ; then
7996c3c9db83Smrg		RANLIB=$save_RANLIB
7997c3c9db83Smrg	      fi
7998c3c9db83Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
7999c3c9db83Smrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
8000c3c9db83Smrg	      objlist=
8001c3c9db83Smrg	      len=$len0
8002c3c9db83Smrg	    fi
8003c3c9db83Smrg	  done
8004c3c9db83Smrg	  RANLIB=$save_RANLIB
8005c3c9db83Smrg	  oldobjs=$objlist
8006c3c9db83Smrg	  if test "X$oldobjs" = "X" ; then
8007c3c9db83Smrg	    eval cmds=\"\$concat_cmds\"
8008c3c9db83Smrg	  else
8009c3c9db83Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
8010c3c9db83Smrg	  fi
8011c3c9db83Smrg	fi
8012c3c9db83Smrg      fi
8013c3c9db83Smrg      func_execute_cmds "$cmds" 'exit $?'
8014692f60a7Smrg    done
8015692f60a7Smrg
8016c3c9db83Smrg    test -n "$generated" && \
8017c3c9db83Smrg      func_show_eval "${RM}r$generated"
8018692f60a7Smrg
8019c3c9db83Smrg    # Now create the libtool archive.
8020c3c9db83Smrg    case $output in
8021c3c9db83Smrg    *.la)
8022c3c9db83Smrg      old_library=
8023c3c9db83Smrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
8024c3c9db83Smrg      func_verbose "creating $output"
802585ee4c00Smrg
8026c3c9db83Smrg      # Preserve any variables that may affect compiler behavior
8027c3c9db83Smrg      for var in $variables_saved_for_relink; do
8028c3c9db83Smrg	if eval test -z \"\${$var+set}\"; then
8029c3c9db83Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
8030c3c9db83Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
8031c3c9db83Smrg	  relink_command="$var=; export $var; $relink_command"
80322e71ea71Smrg	else
8033c3c9db83Smrg	  func_quote_for_eval "$var_value"
8034c3c9db83Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
80352e71ea71Smrg	fi
8036c3c9db83Smrg      done
8037c3c9db83Smrg      # Quote the link command for shipping.
8038c3c9db83Smrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
8039c3c9db83Smrg      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
8040c3c9db83Smrg      if test "$hardcode_automatic" = yes ; then
8041c3c9db83Smrg	relink_command=
8042c3c9db83Smrg      fi
8043692f60a7Smrg
8044c3c9db83Smrg      # Only create the output if not a dry run.
8045c3c9db83Smrg      $opt_dry_run || {
8046c3c9db83Smrg	for installed in no yes; do
8047c3c9db83Smrg	  if test "$installed" = yes; then
8048c3c9db83Smrg	    if test -z "$install_libdir"; then
8049c3c9db83Smrg	      break
8050c3c9db83Smrg	    fi
8051c3c9db83Smrg	    output="$output_objdir/$outputname"i
8052c3c9db83Smrg	    # Replace all uninstalled libtool libraries with the installed ones
8053c3c9db83Smrg	    newdependency_libs=
8054c3c9db83Smrg	    for deplib in $dependency_libs; do
8055c3c9db83Smrg	      case $deplib in
8056c3c9db83Smrg	      *.la)
8057c3c9db83Smrg		func_basename "$deplib"
8058c3c9db83Smrg		name="$func_basename_result"
8059c3c9db83Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
8060c3c9db83Smrg		test -z "$libdir" && \
8061c3c9db83Smrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
8062c3c9db83Smrg		newdependency_libs="$newdependency_libs $libdir/$name"
8063c3c9db83Smrg		;;
8064c3c9db83Smrg	      *) newdependency_libs="$newdependency_libs $deplib" ;;
8065c3c9db83Smrg	      esac
8066c3c9db83Smrg	    done
8067c3c9db83Smrg	    dependency_libs="$newdependency_libs"
8068c3c9db83Smrg	    newdlfiles=
8069c3c9db83Smrg
8070c3c9db83Smrg	    for lib in $dlfiles; do
8071c3c9db83Smrg	      case $lib in
8072c3c9db83Smrg	      *.la)
8073c3c9db83Smrg	        func_basename "$lib"
8074c3c9db83Smrg		name="$func_basename_result"
8075c3c9db83Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
8076c3c9db83Smrg		test -z "$libdir" && \
8077c3c9db83Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
8078c3c9db83Smrg		newdlfiles="$newdlfiles $libdir/$name"
8079c3c9db83Smrg		;;
8080c3c9db83Smrg	      *) newdlfiles="$newdlfiles $lib" ;;
8081c3c9db83Smrg	      esac
8082c3c9db83Smrg	    done
8083c3c9db83Smrg	    dlfiles="$newdlfiles"
8084c3c9db83Smrg	    newdlprefiles=
8085c3c9db83Smrg	    for lib in $dlprefiles; do
8086c3c9db83Smrg	      case $lib in
8087c3c9db83Smrg	      *.la)
8088c3c9db83Smrg		# Only pass preopened files to the pseudo-archive (for
8089c3c9db83Smrg		# eventual linking with the app. that links it) if we
8090c3c9db83Smrg		# didn't already link the preopened objects directly into
8091c3c9db83Smrg		# the library:
8092c3c9db83Smrg		func_basename "$lib"
8093c3c9db83Smrg		name="$func_basename_result"
8094c3c9db83Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
8095c3c9db83Smrg		test -z "$libdir" && \
8096c3c9db83Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
8097c3c9db83Smrg		newdlprefiles="$newdlprefiles $libdir/$name"
8098c3c9db83Smrg		;;
8099c3c9db83Smrg	      esac
8100c3c9db83Smrg	    done
8101c3c9db83Smrg	    dlprefiles="$newdlprefiles"
8102c3c9db83Smrg	  else
8103c3c9db83Smrg	    newdlfiles=
8104c3c9db83Smrg	    for lib in $dlfiles; do
8105c3c9db83Smrg	      case $lib in
8106c3c9db83Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
8107c3c9db83Smrg		*) abs=`pwd`"/$lib" ;;
8108c3c9db83Smrg	      esac
8109c3c9db83Smrg	      newdlfiles="$newdlfiles $abs"
8110c3c9db83Smrg	    done
8111c3c9db83Smrg	    dlfiles="$newdlfiles"
8112c3c9db83Smrg	    newdlprefiles=
8113c3c9db83Smrg	    for lib in $dlprefiles; do
8114c3c9db83Smrg	      case $lib in
8115c3c9db83Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
8116c3c9db83Smrg		*) abs=`pwd`"/$lib" ;;
8117c3c9db83Smrg	      esac
8118c3c9db83Smrg	      newdlprefiles="$newdlprefiles $abs"
8119c3c9db83Smrg	    done
8120c3c9db83Smrg	    dlprefiles="$newdlprefiles"
8121c3c9db83Smrg	  fi
8122c3c9db83Smrg	  $RM $output
8123c3c9db83Smrg	  # place dlname in correct position for cygwin
8124c3c9db83Smrg	  tdlname=$dlname
8125c3c9db83Smrg	  case $host,$output,$installed,$module,$dlname in
8126c3c9db83Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
8127c3c9db83Smrg	  esac
8128c3c9db83Smrg	  $ECHO > $output "\
8129c3c9db83Smrg# $outputname - a libtool library file
8130c3c9db83Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
8131c3c9db83Smrg#
8132c3c9db83Smrg# Please DO NOT delete this file!
8133c3c9db83Smrg# It is necessary for linking the library.
8134692f60a7Smrg
8135c3c9db83Smrg# The name that we can dlopen(3).
8136c3c9db83Smrgdlname='$tdlname'
8137692f60a7Smrg
8138c3c9db83Smrg# Names of this library.
8139c3c9db83Smrglibrary_names='$library_names'
8140692f60a7Smrg
8141c3c9db83Smrg# The name of the static archive.
8142c3c9db83Smrgold_library='$old_library'
8143692f60a7Smrg
8144c3c9db83Smrg# Linker flags that can not go in dependency_libs.
8145c3c9db83Smrginherited_linker_flags='$new_inherited_linker_flags'
8146692f60a7Smrg
8147c3c9db83Smrg# Libraries that this one depends upon.
8148c3c9db83Smrgdependency_libs='$dependency_libs'
8149692f60a7Smrg
8150c3c9db83Smrg# Names of additional weak libraries provided by this library
8151c3c9db83Smrgweak_library_names='$weak_libs'
8152692f60a7Smrg
8153c3c9db83Smrg# Version information for $libname.
8154c3c9db83Smrgcurrent=$current
8155c3c9db83Smrgage=$age
8156c3c9db83Smrgrevision=$revision
8157692f60a7Smrg
8158c3c9db83Smrg# Is this an already installed library?
8159c3c9db83Smrginstalled=$installed
8160692f60a7Smrg
8161c3c9db83Smrg# Should we warn about portability when linking against -modules?
8162c3c9db83Smrgshouldnotlink=$module
8163692f60a7Smrg
8164c3c9db83Smrg# Files to dlopen/dlpreopen
8165c3c9db83Smrgdlopen='$dlfiles'
8166c3c9db83Smrgdlpreopen='$dlprefiles'
8167692f60a7Smrg
8168c3c9db83Smrg# Directory that this library needs to be installed in:
8169c3c9db83Smrglibdir='$install_libdir'"
8170c3c9db83Smrg	  if test "$installed" = no && test "$need_relink" = yes; then
8171c3c9db83Smrg	    $ECHO >> $output "\
8172c3c9db83Smrgrelink_command=\"$relink_command\""
8173c3c9db83Smrg	  fi
8174c3c9db83Smrg	done
8175c3c9db83Smrg      }
8176692f60a7Smrg
8177c3c9db83Smrg      # Do a symbolic link so that the libtool archive can be found in
8178c3c9db83Smrg      # LD_LIBRARY_PATH before the program is installed.
8179c3c9db83Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
8180c3c9db83Smrg      ;;
8181c3c9db83Smrg    esac
8182c3c9db83Smrg    exit $EXIT_SUCCESS
8183c3c9db83Smrg}
81842e71ea71Smrg
8185c3c9db83Smrg{ test "$mode" = link || test "$mode" = relink; } &&
8186c3c9db83Smrg    func_mode_link ${1+"$@"}
8187692f60a7Smrg
8188692f60a7Smrg
8189c3c9db83Smrg# func_mode_uninstall arg...
8190c3c9db83Smrgfunc_mode_uninstall ()
8191c3c9db83Smrg{
8192c3c9db83Smrg    $opt_debug
8193c3c9db83Smrg    RM="$nonopt"
8194692f60a7Smrg    files=
8195692f60a7Smrg    rmforce=
8196692f60a7Smrg    exit_status=0
8197692f60a7Smrg
8198692f60a7Smrg    # This variable tells wrapper scripts just to set variables rather
8199692f60a7Smrg    # than running their programs.
8200692f60a7Smrg    libtool_install_magic="$magic"
8201692f60a7Smrg
8202692f60a7Smrg    for arg
8203692f60a7Smrg    do
8204692f60a7Smrg      case $arg in
8205c3c9db83Smrg      -f) RM="$RM $arg"; rmforce=yes ;;
8206c3c9db83Smrg      -*) RM="$RM $arg" ;;
8207692f60a7Smrg      *) files="$files $arg" ;;
8208692f60a7Smrg      esac
8209692f60a7Smrg    done
8210692f60a7Smrg
8211c3c9db83Smrg    test -z "$RM" && \
8212c3c9db83Smrg      func_fatal_help "you must specify an RM program"
8213692f60a7Smrg
8214692f60a7Smrg    rmdirs=
8215692f60a7Smrg
8216692f60a7Smrg    origobjdir="$objdir"
8217692f60a7Smrg    for file in $files; do
8218c3c9db83Smrg      func_dirname "$file" "" "."
8219c3c9db83Smrg      dir="$func_dirname_result"
8220c3c9db83Smrg      if test "X$dir" = X.; then
8221692f60a7Smrg	objdir="$origobjdir"
8222692f60a7Smrg      else
8223692f60a7Smrg	objdir="$dir/$origobjdir"
8224692f60a7Smrg      fi
8225c3c9db83Smrg      func_basename "$file"
8226c3c9db83Smrg      name="$func_basename_result"
8227692f60a7Smrg      test "$mode" = uninstall && objdir="$dir"
8228692f60a7Smrg
8229692f60a7Smrg      # Remember objdir for removal later, being careful to avoid duplicates
8230692f60a7Smrg      if test "$mode" = clean; then
8231692f60a7Smrg	case " $rmdirs " in
8232692f60a7Smrg	  *" $objdir "*) ;;
8233692f60a7Smrg	  *) rmdirs="$rmdirs $objdir" ;;
8234692f60a7Smrg	esac
8235692f60a7Smrg      fi
8236692f60a7Smrg
8237692f60a7Smrg      # Don't error if the file doesn't exist and rm -f was used.
8238c3c9db83Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
8239c3c9db83Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
8240c3c9db83Smrg	 test -f "$file"; then
8241692f60a7Smrg	:
8242692f60a7Smrg      elif test -d "$file"; then
8243692f60a7Smrg	exit_status=1
8244692f60a7Smrg	continue
8245692f60a7Smrg      elif test "$rmforce" = yes; then
8246692f60a7Smrg	continue
8247692f60a7Smrg      fi
8248692f60a7Smrg
8249692f60a7Smrg      rmfiles="$file"
8250692f60a7Smrg
8251692f60a7Smrg      case $name in
8252692f60a7Smrg      *.la)
8253692f60a7Smrg	# Possibly a libtool archive, so verify it.
8254c3c9db83Smrg	if func_lalib_p "$file"; then
8255c3c9db83Smrg	  func_source $dir/$name
8256692f60a7Smrg
8257692f60a7Smrg	  # Delete the libtool libraries and symlinks.
8258692f60a7Smrg	  for n in $library_names; do
8259692f60a7Smrg	    rmfiles="$rmfiles $objdir/$n"
8260692f60a7Smrg	  done
8261692f60a7Smrg	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
8262692f60a7Smrg
8263692f60a7Smrg	  case "$mode" in
8264692f60a7Smrg	  clean)
8265692f60a7Smrg	    case "  $library_names " in
8266692f60a7Smrg	    # "  " in the beginning catches empty $dlname
8267692f60a7Smrg	    *" $dlname "*) ;;
8268692f60a7Smrg	    *) rmfiles="$rmfiles $objdir/$dlname" ;;
8269692f60a7Smrg	    esac
8270c3c9db83Smrg	    test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
8271692f60a7Smrg	    ;;
8272692f60a7Smrg	  uninstall)
8273692f60a7Smrg	    if test -n "$library_names"; then
8274692f60a7Smrg	      # Do each command in the postuninstall commands.
8275c3c9db83Smrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
8276692f60a7Smrg	    fi
8277692f60a7Smrg
8278692f60a7Smrg	    if test -n "$old_library"; then
8279692f60a7Smrg	      # Do each command in the old_postuninstall commands.
8280c3c9db83Smrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
8281692f60a7Smrg	    fi
8282692f60a7Smrg	    # FIXME: should reinstall the best remaining shared library.
8283692f60a7Smrg	    ;;
8284692f60a7Smrg	  esac
8285692f60a7Smrg	fi
8286692f60a7Smrg	;;
8287692f60a7Smrg
8288692f60a7Smrg      *.lo)
8289692f60a7Smrg	# Possibly a libtool object, so verify it.
8290c3c9db83Smrg	if func_lalib_p "$file"; then
8291692f60a7Smrg
8292692f60a7Smrg	  # Read the .lo file
8293c3c9db83Smrg	  func_source $dir/$name
8294692f60a7Smrg
8295692f60a7Smrg	  # Add PIC object to the list of files to remove.
8296c3c9db83Smrg	  if test -n "$pic_object" &&
8297c3c9db83Smrg	     test "$pic_object" != none; then
8298692f60a7Smrg	    rmfiles="$rmfiles $dir/$pic_object"
8299692f60a7Smrg	  fi
8300692f60a7Smrg
8301692f60a7Smrg	  # Add non-PIC object to the list of files to remove.
8302c3c9db83Smrg	  if test -n "$non_pic_object" &&
8303c3c9db83Smrg	     test "$non_pic_object" != none; then
8304692f60a7Smrg	    rmfiles="$rmfiles $dir/$non_pic_object"
8305692f60a7Smrg	  fi
8306692f60a7Smrg	fi
8307692f60a7Smrg	;;
8308692f60a7Smrg
8309692f60a7Smrg      *)
8310692f60a7Smrg	if test "$mode" = clean ; then
8311692f60a7Smrg	  noexename=$name
8312692f60a7Smrg	  case $file in
8313692f60a7Smrg	  *.exe)
8314c3c9db83Smrg	    func_stripname '' '.exe' "$file"
8315c3c9db83Smrg	    file=$func_stripname_result
8316c3c9db83Smrg	    func_stripname '' '.exe' "$name"
8317c3c9db83Smrg	    noexename=$func_stripname_result
8318692f60a7Smrg	    # $file with .exe has already been added to rmfiles,
8319692f60a7Smrg	    # add $file without .exe
8320692f60a7Smrg	    rmfiles="$rmfiles $file"
8321692f60a7Smrg	    ;;
8322692f60a7Smrg	  esac
8323692f60a7Smrg	  # Do a test to see if this is a libtool program.
8324c3c9db83Smrg	  if func_ltwrapper_p "$file"; then
8325c3c9db83Smrg	    if func_ltwrapper_executable_p "$file"; then
8326c3c9db83Smrg	      func_ltwrapper_scriptname "$file"
8327c3c9db83Smrg	      relink_command=
8328c3c9db83Smrg	      func_source $func_ltwrapper_scriptname_result
8329c3c9db83Smrg	      rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
8330c3c9db83Smrg	    else
8331c3c9db83Smrg	      relink_command=
8332c3c9db83Smrg	      func_source $dir/$noexename
8333c3c9db83Smrg	    fi
8334692f60a7Smrg
8335692f60a7Smrg	    # note $name still contains .exe if it was in $file originally
8336692f60a7Smrg	    # as does the version of $file that was added into $rmfiles
8337692f60a7Smrg	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
8338692f60a7Smrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
8339692f60a7Smrg	      rmfiles="$rmfiles $objdir/lt-$name"
8340692f60a7Smrg	    fi
8341692f60a7Smrg	    if test "X$noexename" != "X$name" ; then
8342692f60a7Smrg	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
8343692f60a7Smrg	    fi
8344692f60a7Smrg	  fi
8345692f60a7Smrg	fi
8346692f60a7Smrg	;;
8347692f60a7Smrg      esac
8348c3c9db83Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
8349692f60a7Smrg    done
8350692f60a7Smrg    objdir="$origobjdir"
8351692f60a7Smrg
8352692f60a7Smrg    # Try to remove the ${objdir}s in the directories where we deleted files
8353692f60a7Smrg    for dir in $rmdirs; do
8354692f60a7Smrg      if test -d "$dir"; then
8355c3c9db83Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
8356692f60a7Smrg      fi
8357692f60a7Smrg    done
8358692f60a7Smrg
8359692f60a7Smrg    exit $exit_status
8360c3c9db83Smrg}
8361692f60a7Smrg
8362c3c9db83Smrg{ test "$mode" = uninstall || test "$mode" = clean; } &&
8363c3c9db83Smrg    func_mode_uninstall ${1+"$@"}
836485ee4c00Smrg
8365c3c9db83Smrgtest -z "$mode" && {
8366c3c9db83Smrg  help="$generic_help"
8367c3c9db83Smrg  func_fatal_help "you must specify a MODE"
8368c3c9db83Smrg}
8369c3c9db83Smrg
8370c3c9db83Smrgtest -z "$exec_cmd" && \
8371c3c9db83Smrg  func_fatal_help "invalid operation mode \`$mode'"
8372692f60a7Smrg
8373692f60a7Smrgif test -n "$exec_cmd"; then
8374c3c9db83Smrg  eval exec "$exec_cmd"
8375692f60a7Smrg  exit $EXIT_FAILURE
8376692f60a7Smrgfi
8377692f60a7Smrg
8378c3c9db83Smrgexit $exit_status
8379692f60a7Smrg
8380692f60a7Smrg
8381692f60a7Smrg# The TAGs below are defined such that we never get into a situation
8382692f60a7Smrg# in which we disable both kinds of libraries.  Given conflicting
8383692f60a7Smrg# choices, we go for a static library, that is the most portable,
8384692f60a7Smrg# since we can't tell whether shared libraries were disabled because
8385692f60a7Smrg# the user asked for that or because the platform doesn't support
8386692f60a7Smrg# them.  This is particularly important on AIX, because we don't
8387692f60a7Smrg# support having both static and shared libraries enabled at the same
8388692f60a7Smrg# time on that platform, so we default to a shared-only configuration.
8389692f60a7Smrg# If a disable-shared tag is given, we'll fallback to a static-only
8390692f60a7Smrg# configuration.  But we'll never go from static-only to shared-only.
8391692f60a7Smrg
8392692f60a7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
8393c3c9db83Smrgbuild_libtool_libs=no
8394c3c9db83Smrgbuild_old_libs=yes
8395692f60a7Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
8396692f60a7Smrg
8397692f60a7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
8398c3c9db83Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
8399692f60a7Smrg# ### END LIBTOOL TAG CONFIG: disable-static
8400692f60a7Smrg
8401692f60a7Smrg# Local Variables:
8402692f60a7Smrg# mode:shell-script
8403692f60a7Smrg# sh-indentation:2
8404692f60a7Smrg# End:
8405c3c9db83Smrg# vi:sw=2
8406c3c9db83Smrg
8407