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