xref: /freebsd/crypto/heimdal/ltmain.sh (revision 6a068746777241722b2b32c5d0bc443a2a64d80b)
1*ae771770SStanislav Sedov
2*ae771770SStanislav Sedov# libtool (GNU libtool) 2.4
3*ae771770SStanislav Sedov# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
4*ae771770SStanislav Sedov
5*ae771770SStanislav Sedov# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
6*ae771770SStanislav Sedov# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
7*ae771770SStanislav Sedov# This is free software; see the source for copying conditions.  There is NO
8*ae771770SStanislav Sedov# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9*ae771770SStanislav Sedov
10*ae771770SStanislav Sedov# GNU Libtool is free software; you can redistribute it and/or modify
11b528cefcSMark Murray# it under the terms of the GNU General Public License as published by
12b528cefcSMark Murray# the Free Software Foundation; either version 2 of the License, or
13b528cefcSMark Murray# (at your option) any later version.
14b528cefcSMark Murray#
15*ae771770SStanislav Sedov# As a special exception to the GNU General Public License,
16*ae771770SStanislav Sedov# if you distribute this file as part of a program or library that
17*ae771770SStanislav Sedov# is built using GNU Libtool, you may include this file under the
18*ae771770SStanislav Sedov# same distribution terms that you use for the rest of that program.
19*ae771770SStanislav Sedov#
20*ae771770SStanislav Sedov# GNU Libtool is distributed in the hope that it will be useful, but
21b528cefcSMark Murray# WITHOUT ANY WARRANTY; without even the implied warranty of
22b528cefcSMark Murray# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23b528cefcSMark Murray# General Public License for more details.
24b528cefcSMark Murray#
25b528cefcSMark Murray# You should have received a copy of the GNU General Public License
26*ae771770SStanislav Sedov# along with GNU Libtool; see the file COPYING.  If not, a copy
27*ae771770SStanislav Sedov# can be downloaded from http://www.gnu.org/licenses/gpl.html,
28*ae771770SStanislav Sedov# or obtained by writing to the Free Software Foundation, Inc.,
29*ae771770SStanislav Sedov# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
30b528cefcSMark Murray
31*ae771770SStanislav Sedov# Usage: $progname [OPTION]... [MODE-ARG]...
32*ae771770SStanislav Sedov#
33*ae771770SStanislav Sedov# Provide generalized library-building support services.
34*ae771770SStanislav Sedov#
35*ae771770SStanislav Sedov#       --config             show all configuration variables
36*ae771770SStanislav Sedov#       --debug              enable verbose shell tracing
37*ae771770SStanislav Sedov#   -n, --dry-run            display commands without modifying any files
38*ae771770SStanislav Sedov#       --features           display basic configuration information and exit
39*ae771770SStanislav Sedov#       --mode=MODE          use operation mode MODE
40*ae771770SStanislav Sedov#       --preserve-dup-deps  don't remove duplicate dependency libraries
41*ae771770SStanislav Sedov#       --quiet, --silent    don't print informational messages
42*ae771770SStanislav Sedov#       --no-quiet, --no-silent
43*ae771770SStanislav Sedov#                            print informational messages (default)
44*ae771770SStanislav Sedov#       --tag=TAG            use configuration variables from tag TAG
45*ae771770SStanislav Sedov#   -v, --verbose            print more informational messages than default
46*ae771770SStanislav Sedov#       --no-verbose         don't print the extra informational messages
47*ae771770SStanislav Sedov#       --version            print version information
48*ae771770SStanislav Sedov#   -h, --help, --help-all   print short, long, or detailed help message
49*ae771770SStanislav Sedov#
50*ae771770SStanislav Sedov# MODE must be one of the following:
51*ae771770SStanislav Sedov#
52*ae771770SStanislav Sedov#         clean              remove files from the build directory
53*ae771770SStanislav Sedov#         compile            compile a source file into a libtool object
54*ae771770SStanislav Sedov#         execute            automatically set library path, then run a program
55*ae771770SStanislav Sedov#         finish             complete the installation of libtool libraries
56*ae771770SStanislav Sedov#         install            install libraries or executables
57*ae771770SStanislav Sedov#         link               create a library or an executable
58*ae771770SStanislav Sedov#         uninstall          remove libraries from an installed directory
59*ae771770SStanislav Sedov#
60*ae771770SStanislav Sedov# MODE-ARGS vary depending on the MODE.  When passed as first option,
61*ae771770SStanislav Sedov# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
62*ae771770SStanislav Sedov# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
63*ae771770SStanislav Sedov#
64*ae771770SStanislav Sedov# When reporting a bug, please describe a test case to reproduce it and
65*ae771770SStanislav Sedov# include the following information:
66*ae771770SStanislav Sedov#
67*ae771770SStanislav Sedov#         host-triplet:	$host
68*ae771770SStanislav Sedov#         shell:		$SHELL
69*ae771770SStanislav Sedov#         compiler:		$LTCC
70*ae771770SStanislav Sedov#         compiler flags:		$LTCFLAGS
71*ae771770SStanislav Sedov#         linker:		$LD (gnu? $with_gnu_ld)
72*ae771770SStanislav Sedov#         $progname:	(GNU libtool) 2.4
73*ae771770SStanislav Sedov#         automake:	$automake_version
74*ae771770SStanislav Sedov#         autoconf:	$autoconf_version
75*ae771770SStanislav Sedov#
76*ae771770SStanislav Sedov# Report bugs to <bug-libtool@gnu.org>.
77*ae771770SStanislav Sedov# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
78*ae771770SStanislav Sedov# General help using GNU software: <http://www.gnu.org/gethelp/>.
79*ae771770SStanislav Sedov
80*ae771770SStanislav SedovPROGRAM=libtool
81*ae771770SStanislav SedovPACKAGE=libtool
82*ae771770SStanislav SedovVERSION=2.4
83*ae771770SStanislav SedovTIMESTAMP=""
84*ae771770SStanislav Sedovpackage_revision=1.3293
85*ae771770SStanislav Sedov
86*ae771770SStanislav Sedov# Be Bourne compatible
87*ae771770SStanislav Sedovif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
88*ae771770SStanislav Sedov  emulate sh
89*ae771770SStanislav Sedov  NULLCMD=:
90*ae771770SStanislav Sedov  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
91*ae771770SStanislav Sedov  # is contrary to our usage.  Disable this feature.
92*ae771770SStanislav Sedov  alias -g '${1+"$@"}'='"$@"'
93*ae771770SStanislav Sedov  setopt NO_GLOB_SUBST
94*ae771770SStanislav Sedovelse
95*ae771770SStanislav Sedov  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
96*ae771770SStanislav Sedovfi
97*ae771770SStanislav SedovBIN_SH=xpg4; export BIN_SH # for Tru64
98*ae771770SStanislav SedovDUALCASE=1; export DUALCASE # for MKS sh
99*ae771770SStanislav Sedov
100*ae771770SStanislav Sedov# A function that is used when there is no print builtin or printf.
101*ae771770SStanislav Sedovfunc_fallback_echo ()
102*ae771770SStanislav Sedov{
103*ae771770SStanislav Sedov  eval 'cat <<_LTECHO_EOF
104*ae771770SStanislav Sedov$1
105*ae771770SStanislav Sedov_LTECHO_EOF'
106*ae771770SStanislav Sedov}
107*ae771770SStanislav Sedov
108*ae771770SStanislav Sedov# NLS nuisances: We save the old values to restore during execute mode.
109*ae771770SStanislav Sedovlt_user_locale=
110*ae771770SStanislav Sedovlt_safe_locale=
111*ae771770SStanislav Sedovfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
112*ae771770SStanislav Sedovdo
113*ae771770SStanislav Sedov  eval "if test \"\${$lt_var+set}\" = set; then
114*ae771770SStanislav Sedov          save_$lt_var=\$$lt_var
115*ae771770SStanislav Sedov          $lt_var=C
116*ae771770SStanislav Sedov	  export $lt_var
117*ae771770SStanislav Sedov	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
118*ae771770SStanislav Sedov	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
119*ae771770SStanislav Sedov	fi"
120*ae771770SStanislav Sedovdone
121*ae771770SStanislav SedovLC_ALL=C
122*ae771770SStanislav SedovLANGUAGE=C
123*ae771770SStanislav Sedovexport LANGUAGE LC_ALL
124*ae771770SStanislav Sedov
125*ae771770SStanislav Sedov$lt_unset CDPATH
126*ae771770SStanislav Sedov
127c19800e8SDoug Rabson
128c19800e8SDoug Rabson# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
129c19800e8SDoug Rabson# is ksh but when the shell is invoked as "sh" and the current value of
130c19800e8SDoug Rabson# the _XPG environment variable is not equal to 1 (one), the special
131c19800e8SDoug Rabson# positional parameter $0, within a function call, is the name of the
132c19800e8SDoug Rabson# function.
133c19800e8SDoug Rabsonprogpath="$0"
134c19800e8SDoug Rabson
135*ae771770SStanislav Sedov
136*ae771770SStanislav Sedov
137*ae771770SStanislav Sedov: ${CP="cp -f"}
138*ae771770SStanislav Sedovtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
139*ae771770SStanislav Sedov: ${EGREP="grep -E"}
140*ae771770SStanislav Sedov: ${FGREP="grep -F"}
141*ae771770SStanislav Sedov: ${GREP="grep"}
142*ae771770SStanislav Sedov: ${LN_S="ln -s"}
143*ae771770SStanislav Sedov: ${MAKE="make"}
144*ae771770SStanislav Sedov: ${MKDIR="mkdir"}
145*ae771770SStanislav Sedov: ${MV="mv -f"}
146*ae771770SStanislav Sedov: ${RM="rm -f"}
147*ae771770SStanislav Sedov: ${SED="sed"}
148*ae771770SStanislav Sedov: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
149*ae771770SStanislav Sedov: ${Xsed="$SED -e 1s/^X//"}
150c19800e8SDoug Rabson
151c19800e8SDoug Rabson# Global variables:
152c19800e8SDoug RabsonEXIT_SUCCESS=0
153c19800e8SDoug RabsonEXIT_FAILURE=1
154*ae771770SStanislav SedovEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
155*ae771770SStanislav SedovEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
156c19800e8SDoug Rabson
157*ae771770SStanislav Sedovexit_status=$EXIT_SUCCESS
158b528cefcSMark Murray
1598373020dSJacques Vidrine# Make sure IFS has a sensible default
160c19800e8SDoug Rabsonlt_nl='
161c19800e8SDoug Rabson'
162c19800e8SDoug RabsonIFS=" 	$lt_nl"
1638373020dSJacques Vidrine
164*ae771770SStanislav Sedovdirname="s,/[^/]*$,,"
165*ae771770SStanislav Sedovbasename="s,^.*/,,"
166*ae771770SStanislav Sedov
167*ae771770SStanislav Sedov# func_dirname file append nondir_replacement
168*ae771770SStanislav Sedov# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
169*ae771770SStanislav Sedov# otherwise set result to NONDIR_REPLACEMENT.
170*ae771770SStanislav Sedovfunc_dirname ()
171*ae771770SStanislav Sedov{
172*ae771770SStanislav Sedov    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
173*ae771770SStanislav Sedov    if test "X$func_dirname_result" = "X${1}"; then
174*ae771770SStanislav Sedov      func_dirname_result="${3}"
175*ae771770SStanislav Sedov    else
176*ae771770SStanislav Sedov      func_dirname_result="$func_dirname_result${2}"
177*ae771770SStanislav Sedov    fi
178*ae771770SStanislav Sedov} # func_dirname may be replaced by extended shell implementation
179*ae771770SStanislav Sedov
180*ae771770SStanislav Sedov
181*ae771770SStanislav Sedov# func_basename file
182*ae771770SStanislav Sedovfunc_basename ()
183*ae771770SStanislav Sedov{
184*ae771770SStanislav Sedov    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
185*ae771770SStanislav Sedov} # func_basename may be replaced by extended shell implementation
186*ae771770SStanislav Sedov
187*ae771770SStanislav Sedov
188*ae771770SStanislav Sedov# func_dirname_and_basename file append nondir_replacement
189*ae771770SStanislav Sedov# perform func_basename and func_dirname in a single function
190*ae771770SStanislav Sedov# call:
191*ae771770SStanislav Sedov#   dirname:  Compute the dirname of FILE.  If nonempty,
192*ae771770SStanislav Sedov#             add APPEND to the result, otherwise set result
193*ae771770SStanislav Sedov#             to NONDIR_REPLACEMENT.
194*ae771770SStanislav Sedov#             value returned in "$func_dirname_result"
195*ae771770SStanislav Sedov#   basename: Compute filename of FILE.
196*ae771770SStanislav Sedov#             value retuned in "$func_basename_result"
197*ae771770SStanislav Sedov# Implementation must be kept synchronized with func_dirname
198*ae771770SStanislav Sedov# and func_basename. For efficiency, we do not delegate to
199*ae771770SStanislav Sedov# those functions but instead duplicate the functionality here.
200*ae771770SStanislav Sedovfunc_dirname_and_basename ()
201*ae771770SStanislav Sedov{
202*ae771770SStanislav Sedov    # Extract subdirectory from the argument.
203*ae771770SStanislav Sedov    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
204*ae771770SStanislav Sedov    if test "X$func_dirname_result" = "X${1}"; then
205*ae771770SStanislav Sedov      func_dirname_result="${3}"
206*ae771770SStanislav Sedov    else
207*ae771770SStanislav Sedov      func_dirname_result="$func_dirname_result${2}"
208*ae771770SStanislav Sedov    fi
209*ae771770SStanislav Sedov    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
210*ae771770SStanislav Sedov} # func_dirname_and_basename may be replaced by extended shell implementation
211*ae771770SStanislav Sedov
212*ae771770SStanislav Sedov
213*ae771770SStanislav Sedov# func_stripname prefix suffix name
214*ae771770SStanislav Sedov# strip PREFIX and SUFFIX off of NAME.
215*ae771770SStanislav Sedov# PREFIX and SUFFIX must not contain globbing or regex special
216*ae771770SStanislav Sedov# characters, hashes, percent signs, but SUFFIX may contain a leading
217*ae771770SStanislav Sedov# dot (in which case that matches only a dot).
218*ae771770SStanislav Sedov# func_strip_suffix prefix name
219*ae771770SStanislav Sedovfunc_stripname ()
220*ae771770SStanislav Sedov{
221*ae771770SStanislav Sedov    case ${2} in
222*ae771770SStanislav Sedov      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
223*ae771770SStanislav Sedov      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
224*ae771770SStanislav Sedov    esac
225*ae771770SStanislav Sedov} # func_stripname may be replaced by extended shell implementation
226*ae771770SStanislav Sedov
227*ae771770SStanislav Sedov
228*ae771770SStanislav Sedov# These SED scripts presuppose an absolute path with a trailing slash.
229*ae771770SStanislav Sedovpathcar='s,^/\([^/]*\).*$,\1,'
230*ae771770SStanislav Sedovpathcdr='s,^/[^/]*,,'
231*ae771770SStanislav Sedovremovedotparts=':dotsl
232*ae771770SStanislav Sedov		s@/\./@/@g
233*ae771770SStanislav Sedov		t dotsl
234*ae771770SStanislav Sedov		s,/\.$,/,'
235*ae771770SStanislav Sedovcollapseslashes='s@/\{1,\}@/@g'
236*ae771770SStanislav Sedovfinalslash='s,/*$,/,'
237*ae771770SStanislav Sedov
238*ae771770SStanislav Sedov# func_normal_abspath PATH
239*ae771770SStanislav Sedov# Remove doubled-up and trailing slashes, "." path components,
240*ae771770SStanislav Sedov# and cancel out any ".." path components in PATH after making
241*ae771770SStanislav Sedov# it an absolute path.
242*ae771770SStanislav Sedov#             value returned in "$func_normal_abspath_result"
243*ae771770SStanislav Sedovfunc_normal_abspath ()
244*ae771770SStanislav Sedov{
245*ae771770SStanislav Sedov  # Start from root dir and reassemble the path.
246*ae771770SStanislav Sedov  func_normal_abspath_result=
247*ae771770SStanislav Sedov  func_normal_abspath_tpath=$1
248*ae771770SStanislav Sedov  func_normal_abspath_altnamespace=
249*ae771770SStanislav Sedov  case $func_normal_abspath_tpath in
250*ae771770SStanislav Sedov    "")
251*ae771770SStanislav Sedov      # Empty path, that just means $cwd.
252*ae771770SStanislav Sedov      func_stripname '' '/' "`pwd`"
253*ae771770SStanislav Sedov      func_normal_abspath_result=$func_stripname_result
254*ae771770SStanislav Sedov      return
255*ae771770SStanislav Sedov    ;;
256*ae771770SStanislav Sedov    # The next three entries are used to spot a run of precisely
257*ae771770SStanislav Sedov    # two leading slashes without using negated character classes;
258*ae771770SStanislav Sedov    # we take advantage of case's first-match behaviour.
259*ae771770SStanislav Sedov    ///*)
260*ae771770SStanislav Sedov      # Unusual form of absolute path, do nothing.
261*ae771770SStanislav Sedov    ;;
262*ae771770SStanislav Sedov    //*)
263*ae771770SStanislav Sedov      # Not necessarily an ordinary path; POSIX reserves leading '//'
264*ae771770SStanislav Sedov      # and for example Cygwin uses it to access remote file shares
265*ae771770SStanislav Sedov      # over CIFS/SMB, so we conserve a leading double slash if found.
266*ae771770SStanislav Sedov      func_normal_abspath_altnamespace=/
267*ae771770SStanislav Sedov    ;;
268*ae771770SStanislav Sedov    /*)
269*ae771770SStanislav Sedov      # Absolute path, do nothing.
270*ae771770SStanislav Sedov    ;;
271*ae771770SStanislav Sedov    *)
272*ae771770SStanislav Sedov      # Relative path, prepend $cwd.
273*ae771770SStanislav Sedov      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
274*ae771770SStanislav Sedov    ;;
275*ae771770SStanislav Sedov  esac
276*ae771770SStanislav Sedov  # Cancel out all the simple stuff to save iterations.  We also want
277*ae771770SStanislav Sedov  # the path to end with a slash for ease of parsing, so make sure
278*ae771770SStanislav Sedov  # there is one (and only one) here.
279*ae771770SStanislav Sedov  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
280*ae771770SStanislav Sedov        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
281*ae771770SStanislav Sedov  while :; do
282*ae771770SStanislav Sedov    # Processed it all yet?
283*ae771770SStanislav Sedov    if test "$func_normal_abspath_tpath" = / ; then
284*ae771770SStanislav Sedov      # If we ascended to the root using ".." the result may be empty now.
285*ae771770SStanislav Sedov      if test -z "$func_normal_abspath_result" ; then
286*ae771770SStanislav Sedov        func_normal_abspath_result=/
287*ae771770SStanislav Sedov      fi
288*ae771770SStanislav Sedov      break
289*ae771770SStanislav Sedov    fi
290*ae771770SStanislav Sedov    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
291*ae771770SStanislav Sedov        -e "$pathcar"`
292*ae771770SStanislav Sedov    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
293*ae771770SStanislav Sedov        -e "$pathcdr"`
294*ae771770SStanislav Sedov    # Figure out what to do with it
295*ae771770SStanislav Sedov    case $func_normal_abspath_tcomponent in
296*ae771770SStanislav Sedov      "")
297*ae771770SStanislav Sedov        # Trailing empty path component, ignore it.
298*ae771770SStanislav Sedov      ;;
299*ae771770SStanislav Sedov      ..)
300*ae771770SStanislav Sedov        # Parent dir; strip last assembled component from result.
301*ae771770SStanislav Sedov        func_dirname "$func_normal_abspath_result"
302*ae771770SStanislav Sedov        func_normal_abspath_result=$func_dirname_result
303*ae771770SStanislav Sedov      ;;
304*ae771770SStanislav Sedov      *)
305*ae771770SStanislav Sedov        # Actual path component, append it.
306*ae771770SStanislav Sedov        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
307*ae771770SStanislav Sedov      ;;
308*ae771770SStanislav Sedov    esac
309*ae771770SStanislav Sedov  done
310*ae771770SStanislav Sedov  # Restore leading double-slash if one was found on entry.
311*ae771770SStanislav Sedov  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
312*ae771770SStanislav Sedov}
313*ae771770SStanislav Sedov
314*ae771770SStanislav Sedov# func_relative_path SRCDIR DSTDIR
315*ae771770SStanislav Sedov# generates a relative path from SRCDIR to DSTDIR, with a trailing
316*ae771770SStanislav Sedov# slash if non-empty, suitable for immediately appending a filename
317*ae771770SStanislav Sedov# without needing to append a separator.
318*ae771770SStanislav Sedov#             value returned in "$func_relative_path_result"
319*ae771770SStanislav Sedovfunc_relative_path ()
320*ae771770SStanislav Sedov{
321*ae771770SStanislav Sedov  func_relative_path_result=
322*ae771770SStanislav Sedov  func_normal_abspath "$1"
323*ae771770SStanislav Sedov  func_relative_path_tlibdir=$func_normal_abspath_result
324*ae771770SStanislav Sedov  func_normal_abspath "$2"
325*ae771770SStanislav Sedov  func_relative_path_tbindir=$func_normal_abspath_result
326*ae771770SStanislav Sedov
327*ae771770SStanislav Sedov  # Ascend the tree starting from libdir
328*ae771770SStanislav Sedov  while :; do
329*ae771770SStanislav Sedov    # check if we have found a prefix of bindir
330*ae771770SStanislav Sedov    case $func_relative_path_tbindir in
331*ae771770SStanislav Sedov      $func_relative_path_tlibdir)
332*ae771770SStanislav Sedov        # found an exact match
333*ae771770SStanislav Sedov        func_relative_path_tcancelled=
334*ae771770SStanislav Sedov        break
335*ae771770SStanislav Sedov        ;;
336*ae771770SStanislav Sedov      $func_relative_path_tlibdir*)
337*ae771770SStanislav Sedov        # found a matching prefix
338*ae771770SStanislav Sedov        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
339*ae771770SStanislav Sedov        func_relative_path_tcancelled=$func_stripname_result
340*ae771770SStanislav Sedov        if test -z "$func_relative_path_result"; then
341*ae771770SStanislav Sedov          func_relative_path_result=.
342*ae771770SStanislav Sedov        fi
343*ae771770SStanislav Sedov        break
344*ae771770SStanislav Sedov        ;;
345*ae771770SStanislav Sedov      *)
346*ae771770SStanislav Sedov        func_dirname $func_relative_path_tlibdir
347*ae771770SStanislav Sedov        func_relative_path_tlibdir=${func_dirname_result}
348*ae771770SStanislav Sedov        if test "x$func_relative_path_tlibdir" = x ; then
349*ae771770SStanislav Sedov          # Have to descend all the way to the root!
350*ae771770SStanislav Sedov          func_relative_path_result=../$func_relative_path_result
351*ae771770SStanislav Sedov          func_relative_path_tcancelled=$func_relative_path_tbindir
352*ae771770SStanislav Sedov          break
353*ae771770SStanislav Sedov        fi
354*ae771770SStanislav Sedov        func_relative_path_result=../$func_relative_path_result
355*ae771770SStanislav Sedov        ;;
356*ae771770SStanislav Sedov    esac
357*ae771770SStanislav Sedov  done
358*ae771770SStanislav Sedov
359*ae771770SStanislav Sedov  # Now calculate path; take care to avoid doubling-up slashes.
360*ae771770SStanislav Sedov  func_stripname '' '/' "$func_relative_path_result"
361*ae771770SStanislav Sedov  func_relative_path_result=$func_stripname_result
362*ae771770SStanislav Sedov  func_stripname '/' '/' "$func_relative_path_tcancelled"
363*ae771770SStanislav Sedov  if test "x$func_stripname_result" != x ; then
364*ae771770SStanislav Sedov    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
365b528cefcSMark Murray  fi
366b528cefcSMark Murray
367*ae771770SStanislav Sedov  # Normalisation. If bindir is libdir, return empty string,
368*ae771770SStanislav Sedov  # else relative path ending with a slash; either way, target
369*ae771770SStanislav Sedov  # file name can be directly appended.
370*ae771770SStanislav Sedov  if test ! -z "$func_relative_path_result"; then
371*ae771770SStanislav Sedov    func_stripname './' '' "$func_relative_path_result/"
372*ae771770SStanislav Sedov    func_relative_path_result=$func_stripname_result
373*ae771770SStanislav Sedov  fi
374*ae771770SStanislav Sedov}
375b528cefcSMark Murray
376*ae771770SStanislav Sedov# The name of this program:
377*ae771770SStanislav Sedovfunc_dirname_and_basename "$progpath"
378*ae771770SStanislav Sedovprogname=$func_basename_result
379*ae771770SStanislav Sedov
380*ae771770SStanislav Sedov# Make sure we have an absolute path for reexecution:
381*ae771770SStanislav Sedovcase $progpath in
382*ae771770SStanislav Sedov  [\\/]*|[A-Za-z]:\\*) ;;
383*ae771770SStanislav Sedov  *[\\/]*)
384*ae771770SStanislav Sedov     progdir=$func_dirname_result
385*ae771770SStanislav Sedov     progdir=`cd "$progdir" && pwd`
386*ae771770SStanislav Sedov     progpath="$progdir/$progname"
387*ae771770SStanislav Sedov     ;;
388*ae771770SStanislav Sedov  *)
389*ae771770SStanislav Sedov     save_IFS="$IFS"
390*ae771770SStanislav Sedov     IFS=:
391*ae771770SStanislav Sedov     for progdir in $PATH; do
392*ae771770SStanislav Sedov       IFS="$save_IFS"
393*ae771770SStanislav Sedov       test -x "$progdir/$progname" && break
394*ae771770SStanislav Sedov     done
395*ae771770SStanislav Sedov     IFS="$save_IFS"
396*ae771770SStanislav Sedov     test -n "$progdir" || progdir=`pwd`
397*ae771770SStanislav Sedov     progpath="$progdir/$progname"
398*ae771770SStanislav Sedov     ;;
399*ae771770SStanislav Sedovesac
400*ae771770SStanislav Sedov
401*ae771770SStanislav Sedov# Sed substitution that helps us do robust quoting.  It backslashifies
402*ae771770SStanislav Sedov# metacharacters that are still active within double-quoted strings.
403*ae771770SStanislav SedovXsed="${SED}"' -e 1s/^X//'
404*ae771770SStanislav Sedovsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
405*ae771770SStanislav Sedov
406*ae771770SStanislav Sedov# Same as above, but do not quote variable references.
407*ae771770SStanislav Sedovdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
408*ae771770SStanislav Sedov
409*ae771770SStanislav Sedov# Sed substitution that turns a string into a regex matching for the
410*ae771770SStanislav Sedov# string literally.
411*ae771770SStanislav Sedovsed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
412*ae771770SStanislav Sedov
413*ae771770SStanislav Sedov# Sed substitution that converts a w32 file name or path
414*ae771770SStanislav Sedov# which contains forward slashes, into one that contains
415*ae771770SStanislav Sedov# (escaped) backslashes.  A very naive implementation.
416*ae771770SStanislav Sedovlt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
417*ae771770SStanislav Sedov
418*ae771770SStanislav Sedov# Re-`\' parameter expansions in output of double_quote_subst that were
419*ae771770SStanislav Sedov# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
420*ae771770SStanislav Sedov# in input to double_quote_subst, that '$' was protected from expansion.
421*ae771770SStanislav Sedov# Since each input `\' is now two `\'s, look for any number of runs of
422*ae771770SStanislav Sedov# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
423*ae771770SStanislav Sedovbs='\\'
424*ae771770SStanislav Sedovbs2='\\\\'
425*ae771770SStanislav Sedovbs4='\\\\\\\\'
426*ae771770SStanislav Sedovdollar='\$'
427*ae771770SStanislav Sedovsed_double_backslash="\
428*ae771770SStanislav Sedov  s/$bs4/&\\
429*ae771770SStanislav Sedov/g
430*ae771770SStanislav Sedov  s/^$bs2$dollar/$bs&/
431*ae771770SStanislav Sedov  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
432*ae771770SStanislav Sedov  s/\n//g"
433*ae771770SStanislav Sedov
434*ae771770SStanislav Sedov# Standard options:
435*ae771770SStanislav Sedovopt_dry_run=false
436*ae771770SStanislav Sedovopt_help=false
437*ae771770SStanislav Sedovopt_quiet=false
438*ae771770SStanislav Sedovopt_verbose=false
439*ae771770SStanislav Sedovopt_warning=:
440*ae771770SStanislav Sedov
441*ae771770SStanislav Sedov# func_echo arg...
442*ae771770SStanislav Sedov# Echo program name prefixed message, along with the current mode
443*ae771770SStanislav Sedov# name if it has been set yet.
444*ae771770SStanislav Sedovfunc_echo ()
445*ae771770SStanislav Sedov{
446*ae771770SStanislav Sedov    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
447*ae771770SStanislav Sedov}
448*ae771770SStanislav Sedov
449*ae771770SStanislav Sedov# func_verbose arg...
450*ae771770SStanislav Sedov# Echo program name prefixed message in verbose mode only.
451*ae771770SStanislav Sedovfunc_verbose ()
452*ae771770SStanislav Sedov{
453*ae771770SStanislav Sedov    $opt_verbose && func_echo ${1+"$@"}
454*ae771770SStanislav Sedov
455*ae771770SStanislav Sedov    # A bug in bash halts the script if the last line of a function
456*ae771770SStanislav Sedov    # fails when set -e is in force, so we need another command to
457*ae771770SStanislav Sedov    # work around that:
458*ae771770SStanislav Sedov    :
459*ae771770SStanislav Sedov}
460*ae771770SStanislav Sedov
461*ae771770SStanislav Sedov# func_echo_all arg...
462*ae771770SStanislav Sedov# Invoke $ECHO with all args, space-separated.
463*ae771770SStanislav Sedovfunc_echo_all ()
464*ae771770SStanislav Sedov{
465*ae771770SStanislav Sedov    $ECHO "$*"
466*ae771770SStanislav Sedov}
467*ae771770SStanislav Sedov
468*ae771770SStanislav Sedov# func_error arg...
469*ae771770SStanislav Sedov# Echo program name prefixed message to standard error.
470*ae771770SStanislav Sedovfunc_error ()
471*ae771770SStanislav Sedov{
472*ae771770SStanislav Sedov    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
473*ae771770SStanislav Sedov}
474*ae771770SStanislav Sedov
475*ae771770SStanislav Sedov# func_warning arg...
476*ae771770SStanislav Sedov# Echo program name prefixed warning message to standard error.
477*ae771770SStanislav Sedovfunc_warning ()
478*ae771770SStanislav Sedov{
479*ae771770SStanislav Sedov    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
480*ae771770SStanislav Sedov
481*ae771770SStanislav Sedov    # bash bug again:
482*ae771770SStanislav Sedov    :
483*ae771770SStanislav Sedov}
484*ae771770SStanislav Sedov
485*ae771770SStanislav Sedov# func_fatal_error arg...
486*ae771770SStanislav Sedov# Echo program name prefixed message to standard error, and exit.
487*ae771770SStanislav Sedovfunc_fatal_error ()
488*ae771770SStanislav Sedov{
489*ae771770SStanislav Sedov    func_error ${1+"$@"}
490*ae771770SStanislav Sedov    exit $EXIT_FAILURE
491*ae771770SStanislav Sedov}
492*ae771770SStanislav Sedov
493*ae771770SStanislav Sedov# func_fatal_help arg...
494*ae771770SStanislav Sedov# Echo program name prefixed message to standard error, followed by
495*ae771770SStanislav Sedov# a help hint, and exit.
496*ae771770SStanislav Sedovfunc_fatal_help ()
497*ae771770SStanislav Sedov{
498*ae771770SStanislav Sedov    func_error ${1+"$@"}
499*ae771770SStanislav Sedov    func_fatal_error "$help"
500*ae771770SStanislav Sedov}
501*ae771770SStanislav Sedovhelp="Try \`$progname --help' for more information."  ## default
502*ae771770SStanislav Sedov
503*ae771770SStanislav Sedov
504*ae771770SStanislav Sedov# func_grep expression filename
505*ae771770SStanislav Sedov# Check whether EXPRESSION matches any line of FILENAME, without output.
506*ae771770SStanislav Sedovfunc_grep ()
507*ae771770SStanislav Sedov{
508*ae771770SStanislav Sedov    $GREP "$1" "$2" >/dev/null 2>&1
509*ae771770SStanislav Sedov}
510*ae771770SStanislav Sedov
511*ae771770SStanislav Sedov
512*ae771770SStanislav Sedov# func_mkdir_p directory-path
513*ae771770SStanislav Sedov# Make sure the entire path to DIRECTORY-PATH is available.
514*ae771770SStanislav Sedovfunc_mkdir_p ()
515*ae771770SStanislav Sedov{
516*ae771770SStanislav Sedov    my_directory_path="$1"
517*ae771770SStanislav Sedov    my_dir_list=
518*ae771770SStanislav Sedov
519*ae771770SStanislav Sedov    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
520*ae771770SStanislav Sedov
521*ae771770SStanislav Sedov      # Protect directory names starting with `-'
522*ae771770SStanislav Sedov      case $my_directory_path in
523*ae771770SStanislav Sedov        -*) my_directory_path="./$my_directory_path" ;;
524*ae771770SStanislav Sedov      esac
525*ae771770SStanislav Sedov
526*ae771770SStanislav Sedov      # While some portion of DIR does not yet exist...
527*ae771770SStanislav Sedov      while test ! -d "$my_directory_path"; do
528*ae771770SStanislav Sedov        # ...make a list in topmost first order.  Use a colon delimited
529*ae771770SStanislav Sedov	# list incase some portion of path contains whitespace.
530*ae771770SStanislav Sedov        my_dir_list="$my_directory_path:$my_dir_list"
531*ae771770SStanislav Sedov
532*ae771770SStanislav Sedov        # If the last portion added has no slash in it, the list is done
533*ae771770SStanislav Sedov        case $my_directory_path in */*) ;; *) break ;; esac
534*ae771770SStanislav Sedov
535*ae771770SStanislav Sedov        # ...otherwise throw away the child directory and loop
536*ae771770SStanislav Sedov        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
537*ae771770SStanislav Sedov      done
538*ae771770SStanislav Sedov      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
539*ae771770SStanislav Sedov
540*ae771770SStanislav Sedov      save_mkdir_p_IFS="$IFS"; IFS=':'
541*ae771770SStanislav Sedov      for my_dir in $my_dir_list; do
542*ae771770SStanislav Sedov	IFS="$save_mkdir_p_IFS"
543*ae771770SStanislav Sedov        # mkdir can fail with a `File exist' error if two processes
544*ae771770SStanislav Sedov        # try to create one of the directories concurrently.  Don't
545*ae771770SStanislav Sedov        # stop in that case!
546*ae771770SStanislav Sedov        $MKDIR "$my_dir" 2>/dev/null || :
547*ae771770SStanislav Sedov      done
548*ae771770SStanislav Sedov      IFS="$save_mkdir_p_IFS"
549*ae771770SStanislav Sedov
550*ae771770SStanislav Sedov      # Bail out if we (or some other process) failed to create a directory.
551*ae771770SStanislav Sedov      test -d "$my_directory_path" || \
552*ae771770SStanislav Sedov        func_fatal_error "Failed to create \`$1'"
553*ae771770SStanislav Sedov    fi
554*ae771770SStanislav Sedov}
555*ae771770SStanislav Sedov
5561c43270aSJacques Vidrine
557c19800e8SDoug Rabson# func_mktempdir [string]
558c19800e8SDoug Rabson# Make a temporary directory that won't clash with other running
559c19800e8SDoug Rabson# libtool processes, and avoids race conditions if possible.  If
560c19800e8SDoug Rabson# given, STRING is the basename for that directory.
561c19800e8SDoug Rabsonfunc_mktempdir ()
562c19800e8SDoug Rabson{
563c19800e8SDoug Rabson    my_template="${TMPDIR-/tmp}/${1-$progname}"
564c19800e8SDoug Rabson
565*ae771770SStanislav Sedov    if test "$opt_dry_run" = ":"; then
566c19800e8SDoug Rabson      # Return a directory name, but don't create it in dry-run mode
567c19800e8SDoug Rabson      my_tmpdir="${my_template}-$$"
568c19800e8SDoug Rabson    else
569c19800e8SDoug Rabson
570c19800e8SDoug Rabson      # If mktemp works, use that first and foremost
571c19800e8SDoug Rabson      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
572c19800e8SDoug Rabson
573c19800e8SDoug Rabson      if test ! -d "$my_tmpdir"; then
574c19800e8SDoug Rabson        # Failing that, at least try and use $RANDOM to avoid a race
575c19800e8SDoug Rabson        my_tmpdir="${my_template}-${RANDOM-0}$$"
576c19800e8SDoug Rabson
577c19800e8SDoug Rabson        save_mktempdir_umask=`umask`
578c19800e8SDoug Rabson        umask 0077
579*ae771770SStanislav Sedov        $MKDIR "$my_tmpdir"
580c19800e8SDoug Rabson        umask $save_mktempdir_umask
581c19800e8SDoug Rabson      fi
582c19800e8SDoug Rabson
583c19800e8SDoug Rabson      # If we're not in dry-run mode, bomb out on failure
584*ae771770SStanislav Sedov      test -d "$my_tmpdir" || \
585*ae771770SStanislav Sedov        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
586c19800e8SDoug Rabson    fi
587c19800e8SDoug Rabson
588*ae771770SStanislav Sedov    $ECHO "$my_tmpdir"
589c19800e8SDoug Rabson}
590c19800e8SDoug Rabson
591c19800e8SDoug Rabson
592*ae771770SStanislav Sedov# func_quote_for_eval arg
593*ae771770SStanislav Sedov# Aesthetically quote ARG to be evaled later.
594*ae771770SStanislav Sedov# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
595*ae771770SStanislav Sedov# is double-quoted, suitable for a subsequent eval, whereas
596*ae771770SStanislav Sedov# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
597*ae771770SStanislav Sedov# which are still active within double quotes backslashified.
598*ae771770SStanislav Sedovfunc_quote_for_eval ()
599c19800e8SDoug Rabson{
600*ae771770SStanislav Sedov    case $1 in
601*ae771770SStanislav Sedov      *[\\\`\"\$]*)
602*ae771770SStanislav Sedov	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
603*ae771770SStanislav Sedov      *)
604*ae771770SStanislav Sedov        func_quote_for_eval_unquoted_result="$1" ;;
605c19800e8SDoug Rabson    esac
606*ae771770SStanislav Sedov
607*ae771770SStanislav Sedov    case $func_quote_for_eval_unquoted_result in
608*ae771770SStanislav Sedov      # Double-quote args containing shell metacharacters to delay
609*ae771770SStanislav Sedov      # word splitting, command substitution and and variable
610*ae771770SStanislav Sedov      # expansion for a subsequent eval.
611*ae771770SStanislav Sedov      # Many Bourne shells cannot handle close brackets correctly
612*ae771770SStanislav Sedov      # in scan sets, so we specify it separately.
613*ae771770SStanislav Sedov      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
614*ae771770SStanislav Sedov        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
6151c43270aSJacques Vidrine        ;;
616*ae771770SStanislav Sedov      *)
617*ae771770SStanislav Sedov        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
6181c43270aSJacques Vidrine    esac
6191c43270aSJacques Vidrine}
6201c43270aSJacques Vidrine
621c19800e8SDoug Rabson
622*ae771770SStanislav Sedov# func_quote_for_expand arg
623*ae771770SStanislav Sedov# Aesthetically quote ARG to be evaled later; same as above,
624*ae771770SStanislav Sedov# but do not quote variable references.
625*ae771770SStanislav Sedovfunc_quote_for_expand ()
626*ae771770SStanislav Sedov{
627*ae771770SStanislav Sedov    case $1 in
628*ae771770SStanislav Sedov      *[\\\`\"]*)
629*ae771770SStanislav Sedov	my_arg=`$ECHO "$1" | $SED \
630*ae771770SStanislav Sedov	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
631*ae771770SStanislav Sedov      *)
632*ae771770SStanislav Sedov        my_arg="$1" ;;
633*ae771770SStanislav Sedov    esac
634*ae771770SStanislav Sedov
635*ae771770SStanislav Sedov    case $my_arg in
636*ae771770SStanislav Sedov      # Double-quote args containing shell metacharacters to delay
637*ae771770SStanislav Sedov      # word splitting and command substitution for a subsequent eval.
638*ae771770SStanislav Sedov      # Many Bourne shells cannot handle close brackets correctly
639*ae771770SStanislav Sedov      # in scan sets, so we specify it separately.
640*ae771770SStanislav Sedov      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
641*ae771770SStanislav Sedov        my_arg="\"$my_arg\""
642*ae771770SStanislav Sedov        ;;
643*ae771770SStanislav Sedov    esac
644*ae771770SStanislav Sedov
645*ae771770SStanislav Sedov    func_quote_for_expand_result="$my_arg"
646*ae771770SStanislav Sedov}
647*ae771770SStanislav Sedov
648*ae771770SStanislav Sedov
649*ae771770SStanislav Sedov# func_show_eval cmd [fail_exp]
650*ae771770SStanislav Sedov# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
651*ae771770SStanislav Sedov# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
652*ae771770SStanislav Sedov# is given, then evaluate it.
653*ae771770SStanislav Sedovfunc_show_eval ()
654*ae771770SStanislav Sedov{
655*ae771770SStanislav Sedov    my_cmd="$1"
656*ae771770SStanislav Sedov    my_fail_exp="${2-:}"
657*ae771770SStanislav Sedov
658*ae771770SStanislav Sedov    ${opt_silent-false} || {
659*ae771770SStanislav Sedov      func_quote_for_expand "$my_cmd"
660*ae771770SStanislav Sedov      eval "func_echo $func_quote_for_expand_result"
661*ae771770SStanislav Sedov    }
662*ae771770SStanislav Sedov
663*ae771770SStanislav Sedov    if ${opt_dry_run-false}; then :; else
664*ae771770SStanislav Sedov      eval "$my_cmd"
665*ae771770SStanislav Sedov      my_status=$?
666*ae771770SStanislav Sedov      if test "$my_status" -eq 0; then :; else
667*ae771770SStanislav Sedov	eval "(exit $my_status); $my_fail_exp"
668*ae771770SStanislav Sedov      fi
669*ae771770SStanislav Sedov    fi
670*ae771770SStanislav Sedov}
671*ae771770SStanislav Sedov
672*ae771770SStanislav Sedov
673*ae771770SStanislav Sedov# func_show_eval_locale cmd [fail_exp]
674*ae771770SStanislav Sedov# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
675*ae771770SStanislav Sedov# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
676*ae771770SStanislav Sedov# is given, then evaluate it.  Use the saved locale for evaluation.
677*ae771770SStanislav Sedovfunc_show_eval_locale ()
678*ae771770SStanislav Sedov{
679*ae771770SStanislav Sedov    my_cmd="$1"
680*ae771770SStanislav Sedov    my_fail_exp="${2-:}"
681*ae771770SStanislav Sedov
682*ae771770SStanislav Sedov    ${opt_silent-false} || {
683*ae771770SStanislav Sedov      func_quote_for_expand "$my_cmd"
684*ae771770SStanislav Sedov      eval "func_echo $func_quote_for_expand_result"
685*ae771770SStanislav Sedov    }
686*ae771770SStanislav Sedov
687*ae771770SStanislav Sedov    if ${opt_dry_run-false}; then :; else
688*ae771770SStanislav Sedov      eval "$lt_user_locale
689*ae771770SStanislav Sedov	    $my_cmd"
690*ae771770SStanislav Sedov      my_status=$?
691*ae771770SStanislav Sedov      eval "$lt_safe_locale"
692*ae771770SStanislav Sedov      if test "$my_status" -eq 0; then :; else
693*ae771770SStanislav Sedov	eval "(exit $my_status); $my_fail_exp"
694*ae771770SStanislav Sedov      fi
695*ae771770SStanislav Sedov    fi
696*ae771770SStanislav Sedov}
697*ae771770SStanislav Sedov
698*ae771770SStanislav Sedov# func_tr_sh
699*ae771770SStanislav Sedov# Turn $1 into a string suitable for a shell variable name.
700*ae771770SStanislav Sedov# Result is stored in $func_tr_sh_result.  All characters
701*ae771770SStanislav Sedov# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
702*ae771770SStanislav Sedov# if $1 begins with a digit, a '_' is prepended as well.
703*ae771770SStanislav Sedovfunc_tr_sh ()
704*ae771770SStanislav Sedov{
705*ae771770SStanislav Sedov  case $1 in
706*ae771770SStanislav Sedov  [0-9]* | *[!a-zA-Z0-9_]*)
707*ae771770SStanislav Sedov    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
708*ae771770SStanislav Sedov    ;;
709*ae771770SStanislav Sedov  * )
710*ae771770SStanislav Sedov    func_tr_sh_result=$1
711*ae771770SStanislav Sedov    ;;
712*ae771770SStanislav Sedov  esac
713*ae771770SStanislav Sedov}
714*ae771770SStanislav Sedov
715*ae771770SStanislav Sedov
716*ae771770SStanislav Sedov# func_version
717*ae771770SStanislav Sedov# Echo version message to standard output and exit.
718*ae771770SStanislav Sedovfunc_version ()
719*ae771770SStanislav Sedov{
720*ae771770SStanislav Sedov    $opt_debug
721*ae771770SStanislav Sedov
722*ae771770SStanislav Sedov    $SED -n '/(C)/!b go
723*ae771770SStanislav Sedov	:more
724*ae771770SStanislav Sedov	/\./!{
725*ae771770SStanislav Sedov	  N
726*ae771770SStanislav Sedov	  s/\n# / /
727*ae771770SStanislav Sedov	  b more
728*ae771770SStanislav Sedov	}
729*ae771770SStanislav Sedov	:go
730*ae771770SStanislav Sedov	/^# '$PROGRAM' (GNU /,/# warranty; / {
731*ae771770SStanislav Sedov        s/^# //
732*ae771770SStanislav Sedov	s/^# *$//
733*ae771770SStanislav Sedov        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
734*ae771770SStanislav Sedov        p
735*ae771770SStanislav Sedov     }' < "$progpath"
736*ae771770SStanislav Sedov     exit $?
737*ae771770SStanislav Sedov}
738*ae771770SStanislav Sedov
739*ae771770SStanislav Sedov# func_usage
740*ae771770SStanislav Sedov# Echo short help message to standard output and exit.
741*ae771770SStanislav Sedovfunc_usage ()
742*ae771770SStanislav Sedov{
743*ae771770SStanislav Sedov    $opt_debug
744*ae771770SStanislav Sedov
745*ae771770SStanislav Sedov    $SED -n '/^# Usage:/,/^#  *.*--help/ {
746*ae771770SStanislav Sedov        s/^# //
747*ae771770SStanislav Sedov	s/^# *$//
748*ae771770SStanislav Sedov	s/\$progname/'$progname'/
749*ae771770SStanislav Sedov	p
750*ae771770SStanislav Sedov    }' < "$progpath"
751*ae771770SStanislav Sedov    echo
752*ae771770SStanislav Sedov    $ECHO "run \`$progname --help | more' for full usage"
753*ae771770SStanislav Sedov    exit $?
754*ae771770SStanislav Sedov}
755*ae771770SStanislav Sedov
756*ae771770SStanislav Sedov# func_help [NOEXIT]
757*ae771770SStanislav Sedov# Echo long help message to standard output and exit,
758*ae771770SStanislav Sedov# unless 'noexit' is passed as argument.
759*ae771770SStanislav Sedovfunc_help ()
760*ae771770SStanislav Sedov{
761*ae771770SStanislav Sedov    $opt_debug
762*ae771770SStanislav Sedov
763*ae771770SStanislav Sedov    $SED -n '/^# Usage:/,/# Report bugs to/ {
764*ae771770SStanislav Sedov	:print
765*ae771770SStanislav Sedov        s/^# //
766*ae771770SStanislav Sedov	s/^# *$//
767*ae771770SStanislav Sedov	s*\$progname*'$progname'*
768*ae771770SStanislav Sedov	s*\$host*'"$host"'*
769*ae771770SStanislav Sedov	s*\$SHELL*'"$SHELL"'*
770*ae771770SStanislav Sedov	s*\$LTCC*'"$LTCC"'*
771*ae771770SStanislav Sedov	s*\$LTCFLAGS*'"$LTCFLAGS"'*
772*ae771770SStanislav Sedov	s*\$LD*'"$LD"'*
773*ae771770SStanislav Sedov	s/\$with_gnu_ld/'"$with_gnu_ld"'/
774*ae771770SStanislav Sedov	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
775*ae771770SStanislav Sedov	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
776*ae771770SStanislav Sedov	p
777*ae771770SStanislav Sedov	d
778*ae771770SStanislav Sedov     }
779*ae771770SStanislav Sedov     /^# .* home page:/b print
780*ae771770SStanislav Sedov     /^# General help using/b print
781*ae771770SStanislav Sedov     ' < "$progpath"
782*ae771770SStanislav Sedov    ret=$?
783*ae771770SStanislav Sedov    if test -z "$1"; then
784*ae771770SStanislav Sedov      exit $ret
785*ae771770SStanislav Sedov    fi
786*ae771770SStanislav Sedov}
787*ae771770SStanislav Sedov
788*ae771770SStanislav Sedov# func_missing_arg argname
789*ae771770SStanislav Sedov# Echo program name prefixed message to standard error and set global
790*ae771770SStanislav Sedov# exit_cmd.
791*ae771770SStanislav Sedovfunc_missing_arg ()
792*ae771770SStanislav Sedov{
793*ae771770SStanislav Sedov    $opt_debug
794*ae771770SStanislav Sedov
795*ae771770SStanislav Sedov    func_error "missing argument for $1."
796*ae771770SStanislav Sedov    exit_cmd=exit
797*ae771770SStanislav Sedov}
798*ae771770SStanislav Sedov
799*ae771770SStanislav Sedov
800*ae771770SStanislav Sedov# func_split_short_opt shortopt
801*ae771770SStanislav Sedov# Set func_split_short_opt_name and func_split_short_opt_arg shell
802*ae771770SStanislav Sedov# variables after splitting SHORTOPT after the 2nd character.
803*ae771770SStanislav Sedovfunc_split_short_opt ()
804*ae771770SStanislav Sedov{
805*ae771770SStanislav Sedov    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
806*ae771770SStanislav Sedov    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
807*ae771770SStanislav Sedov
808*ae771770SStanislav Sedov    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
809*ae771770SStanislav Sedov    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
810*ae771770SStanislav Sedov} # func_split_short_opt may be replaced by extended shell implementation
811*ae771770SStanislav Sedov
812*ae771770SStanislav Sedov
813*ae771770SStanislav Sedov# func_split_long_opt longopt
814*ae771770SStanislav Sedov# Set func_split_long_opt_name and func_split_long_opt_arg shell
815*ae771770SStanislav Sedov# variables after splitting LONGOPT at the `=' sign.
816*ae771770SStanislav Sedovfunc_split_long_opt ()
817*ae771770SStanislav Sedov{
818*ae771770SStanislav Sedov    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
819*ae771770SStanislav Sedov    my_sed_long_arg='1s/^--[^=]*=//'
820*ae771770SStanislav Sedov
821*ae771770SStanislav Sedov    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
822*ae771770SStanislav Sedov    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
823*ae771770SStanislav Sedov} # func_split_long_opt may be replaced by extended shell implementation
824*ae771770SStanislav Sedov
825*ae771770SStanislav Sedovexit_cmd=:
826*ae771770SStanislav Sedov
827*ae771770SStanislav Sedov
828*ae771770SStanislav Sedov
829*ae771770SStanislav Sedov
830*ae771770SStanislav Sedov
831*ae771770SStanislav Sedovmagic="%%%MAGIC variable%%%"
832*ae771770SStanislav Sedovmagic_exe="%%%MAGIC EXE variable%%%"
833*ae771770SStanislav Sedov
834*ae771770SStanislav Sedov# Global variables.
835*ae771770SStanislav Sedovnonopt=
836*ae771770SStanislav Sedovpreserve_args=
837*ae771770SStanislav Sedovlo2o="s/\\.lo\$/.${objext}/"
838*ae771770SStanislav Sedovo2lo="s/\\.${objext}\$/.lo/"
839*ae771770SStanislav Sedovextracted_archives=
840*ae771770SStanislav Sedovextracted_serial=0
841*ae771770SStanislav Sedov
842*ae771770SStanislav Sedov# If this variable is set in any of the actions, the command in it
843*ae771770SStanislav Sedov# will be execed at the end.  This prevents here-documents from being
844*ae771770SStanislav Sedov# left over by shells.
845*ae771770SStanislav Sedovexec_cmd=
846*ae771770SStanislav Sedov
847*ae771770SStanislav Sedov# func_append var value
848*ae771770SStanislav Sedov# Append VALUE to the end of shell variable VAR.
849*ae771770SStanislav Sedovfunc_append ()
850*ae771770SStanislav Sedov{
851*ae771770SStanislav Sedov    eval "${1}=\$${1}\${2}"
852*ae771770SStanislav Sedov} # func_append may be replaced by extended shell implementation
853*ae771770SStanislav Sedov
854*ae771770SStanislav Sedov# func_append_quoted var value
855*ae771770SStanislav Sedov# Quote VALUE and append to the end of shell variable VAR, separated
856*ae771770SStanislav Sedov# by a space.
857*ae771770SStanislav Sedovfunc_append_quoted ()
858*ae771770SStanislav Sedov{
859*ae771770SStanislav Sedov    func_quote_for_eval "${2}"
860*ae771770SStanislav Sedov    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
861*ae771770SStanislav Sedov} # func_append_quoted may be replaced by extended shell implementation
862*ae771770SStanislav Sedov
863*ae771770SStanislav Sedov
864*ae771770SStanislav Sedov# func_arith arithmetic-term...
865*ae771770SStanislav Sedovfunc_arith ()
866*ae771770SStanislav Sedov{
867*ae771770SStanislav Sedov    func_arith_result=`expr "${@}"`
868*ae771770SStanislav Sedov} # func_arith may be replaced by extended shell implementation
869*ae771770SStanislav Sedov
870*ae771770SStanislav Sedov
871*ae771770SStanislav Sedov# func_len string
872*ae771770SStanislav Sedov# STRING may not start with a hyphen.
873*ae771770SStanislav Sedovfunc_len ()
874*ae771770SStanislav Sedov{
875*ae771770SStanislav Sedov    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
876*ae771770SStanislav Sedov} # func_len may be replaced by extended shell implementation
877*ae771770SStanislav Sedov
878*ae771770SStanislav Sedov
879*ae771770SStanislav Sedov# func_lo2o object
880*ae771770SStanislav Sedovfunc_lo2o ()
881*ae771770SStanislav Sedov{
882*ae771770SStanislav Sedov    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
883*ae771770SStanislav Sedov} # func_lo2o may be replaced by extended shell implementation
884*ae771770SStanislav Sedov
885*ae771770SStanislav Sedov
886*ae771770SStanislav Sedov# func_xform libobj-or-source
887*ae771770SStanislav Sedovfunc_xform ()
888*ae771770SStanislav Sedov{
889*ae771770SStanislav Sedov    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
890*ae771770SStanislav Sedov} # func_xform may be replaced by extended shell implementation
891*ae771770SStanislav Sedov
892*ae771770SStanislav Sedov
893*ae771770SStanislav Sedov# func_fatal_configuration arg...
894*ae771770SStanislav Sedov# Echo program name prefixed message to standard error, followed by
895*ae771770SStanislav Sedov# a configuration failure hint, and exit.
896*ae771770SStanislav Sedovfunc_fatal_configuration ()
897*ae771770SStanislav Sedov{
898*ae771770SStanislav Sedov    func_error ${1+"$@"}
899*ae771770SStanislav Sedov    func_error "See the $PACKAGE documentation for more information."
900*ae771770SStanislav Sedov    func_fatal_error "Fatal configuration error."
901*ae771770SStanislav Sedov}
902*ae771770SStanislav Sedov
903*ae771770SStanislav Sedov
904*ae771770SStanislav Sedov# func_config
905*ae771770SStanislav Sedov# Display the configuration for all the tags in this script.
906*ae771770SStanislav Sedovfunc_config ()
907*ae771770SStanislav Sedov{
908*ae771770SStanislav Sedov    re_begincf='^# ### BEGIN LIBTOOL'
909*ae771770SStanislav Sedov    re_endcf='^# ### END LIBTOOL'
910*ae771770SStanislav Sedov
911*ae771770SStanislav Sedov    # Default configuration.
912*ae771770SStanislav Sedov    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
913*ae771770SStanislav Sedov
914*ae771770SStanislav Sedov    # Now print the configurations for the tags.
915*ae771770SStanislav Sedov    for tagname in $taglist; do
916*ae771770SStanislav Sedov      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
917*ae771770SStanislav Sedov    done
918*ae771770SStanislav Sedov
919*ae771770SStanislav Sedov    exit $?
920*ae771770SStanislav Sedov}
921*ae771770SStanislav Sedov
922*ae771770SStanislav Sedov# func_features
923*ae771770SStanislav Sedov# Display the features supported by this script.
924*ae771770SStanislav Sedovfunc_features ()
925*ae771770SStanislav Sedov{
926*ae771770SStanislav Sedov    echo "host: $host"
927*ae771770SStanislav Sedov    if test "$build_libtool_libs" = yes; then
928*ae771770SStanislav Sedov      echo "enable shared libraries"
929*ae771770SStanislav Sedov    else
930*ae771770SStanislav Sedov      echo "disable shared libraries"
931*ae771770SStanislav Sedov    fi
932*ae771770SStanislav Sedov    if test "$build_old_libs" = yes; then
933*ae771770SStanislav Sedov      echo "enable static libraries"
934*ae771770SStanislav Sedov    else
935*ae771770SStanislav Sedov      echo "disable static libraries"
936*ae771770SStanislav Sedov    fi
937*ae771770SStanislav Sedov
938*ae771770SStanislav Sedov    exit $?
939*ae771770SStanislav Sedov}
940*ae771770SStanislav Sedov
941*ae771770SStanislav Sedov# func_enable_tag tagname
942*ae771770SStanislav Sedov# Verify that TAGNAME is valid, and either flag an error and exit, or
943*ae771770SStanislav Sedov# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
944*ae771770SStanislav Sedov# variable here.
945*ae771770SStanislav Sedovfunc_enable_tag ()
946*ae771770SStanislav Sedov{
947*ae771770SStanislav Sedov  # Global variable:
948*ae771770SStanislav Sedov  tagname="$1"
949*ae771770SStanislav Sedov
950*ae771770SStanislav Sedov  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
951*ae771770SStanislav Sedov  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
952*ae771770SStanislav Sedov  sed_extractcf="/$re_begincf/,/$re_endcf/p"
953*ae771770SStanislav Sedov
954*ae771770SStanislav Sedov  # Validate tagname.
955*ae771770SStanislav Sedov  case $tagname in
956*ae771770SStanislav Sedov    *[!-_A-Za-z0-9,/]*)
957*ae771770SStanislav Sedov      func_fatal_error "invalid tag name: $tagname"
958*ae771770SStanislav Sedov      ;;
959*ae771770SStanislav Sedov  esac
960*ae771770SStanislav Sedov
961*ae771770SStanislav Sedov  # Don't test for the "default" C tag, as we know it's
962*ae771770SStanislav Sedov  # there but not specially marked.
963*ae771770SStanislav Sedov  case $tagname in
964*ae771770SStanislav Sedov    CC) ;;
965*ae771770SStanislav Sedov    *)
966*ae771770SStanislav Sedov      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
967*ae771770SStanislav Sedov	taglist="$taglist $tagname"
968*ae771770SStanislav Sedov
969*ae771770SStanislav Sedov	# Evaluate the configuration.  Be careful to quote the path
970*ae771770SStanislav Sedov	# and the sed script, to avoid splitting on whitespace, but
971*ae771770SStanislav Sedov	# also don't use non-portable quotes within backquotes within
972*ae771770SStanislav Sedov	# quotes we have to do it in 2 steps:
973*ae771770SStanislav Sedov	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
974*ae771770SStanislav Sedov	eval "$extractedcf"
975*ae771770SStanislav Sedov      else
976*ae771770SStanislav Sedov	func_error "ignoring unknown tag $tagname"
977*ae771770SStanislav Sedov      fi
978*ae771770SStanislav Sedov      ;;
979*ae771770SStanislav Sedov  esac
980*ae771770SStanislav Sedov}
981*ae771770SStanislav Sedov
982*ae771770SStanislav Sedov# func_check_version_match
983*ae771770SStanislav Sedov# Ensure that we are using m4 macros, and libtool script from the same
984*ae771770SStanislav Sedov# release of libtool.
985*ae771770SStanislav Sedovfunc_check_version_match ()
986*ae771770SStanislav Sedov{
987*ae771770SStanislav Sedov  if test "$package_revision" != "$macro_revision"; then
988*ae771770SStanislav Sedov    if test "$VERSION" != "$macro_version"; then
989*ae771770SStanislav Sedov      if test -z "$macro_version"; then
990*ae771770SStanislav Sedov        cat >&2 <<_LT_EOF
991*ae771770SStanislav Sedov$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
992*ae771770SStanislav Sedov$progname: definition of this LT_INIT comes from an older release.
993*ae771770SStanislav Sedov$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
994*ae771770SStanislav Sedov$progname: and run autoconf again.
995*ae771770SStanislav Sedov_LT_EOF
996*ae771770SStanislav Sedov      else
997*ae771770SStanislav Sedov        cat >&2 <<_LT_EOF
998*ae771770SStanislav Sedov$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
999*ae771770SStanislav Sedov$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
1000*ae771770SStanislav Sedov$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
1001*ae771770SStanislav Sedov$progname: and run autoconf again.
1002*ae771770SStanislav Sedov_LT_EOF
1003*ae771770SStanislav Sedov      fi
1004*ae771770SStanislav Sedov    else
1005*ae771770SStanislav Sedov      cat >&2 <<_LT_EOF
1006*ae771770SStanislav Sedov$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
1007*ae771770SStanislav Sedov$progname: but the definition of this LT_INIT comes from revision $macro_revision.
1008*ae771770SStanislav Sedov$progname: You should recreate aclocal.m4 with macros from revision $package_revision
1009*ae771770SStanislav Sedov$progname: of $PACKAGE $VERSION and run autoconf again.
1010*ae771770SStanislav Sedov_LT_EOF
1011*ae771770SStanislav Sedov    fi
1012*ae771770SStanislav Sedov
1013*ae771770SStanislav Sedov    exit $EXIT_MISMATCH
1014*ae771770SStanislav Sedov  fi
1015*ae771770SStanislav Sedov}
1016*ae771770SStanislav Sedov
1017*ae771770SStanislav Sedov
1018*ae771770SStanislav Sedov# Shorthand for --mode=foo, only valid as the first argument
1019*ae771770SStanislav Sedovcase $1 in
1020*ae771770SStanislav Sedovclean|clea|cle|cl)
1021*ae771770SStanislav Sedov  shift; set dummy --mode clean ${1+"$@"}; shift
1022*ae771770SStanislav Sedov  ;;
1023*ae771770SStanislav Sedovcompile|compil|compi|comp|com|co|c)
1024*ae771770SStanislav Sedov  shift; set dummy --mode compile ${1+"$@"}; shift
1025*ae771770SStanislav Sedov  ;;
1026*ae771770SStanislav Sedovexecute|execut|execu|exec|exe|ex|e)
1027*ae771770SStanislav Sedov  shift; set dummy --mode execute ${1+"$@"}; shift
1028*ae771770SStanislav Sedov  ;;
1029*ae771770SStanislav Sedovfinish|finis|fini|fin|fi|f)
1030*ae771770SStanislav Sedov  shift; set dummy --mode finish ${1+"$@"}; shift
1031*ae771770SStanislav Sedov  ;;
1032*ae771770SStanislav Sedovinstall|instal|insta|inst|ins|in|i)
1033*ae771770SStanislav Sedov  shift; set dummy --mode install ${1+"$@"}; shift
1034*ae771770SStanislav Sedov  ;;
1035*ae771770SStanislav Sedovlink|lin|li|l)
1036*ae771770SStanislav Sedov  shift; set dummy --mode link ${1+"$@"}; shift
1037*ae771770SStanislav Sedov  ;;
1038*ae771770SStanislav Sedovuninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
1039*ae771770SStanislav Sedov  shift; set dummy --mode uninstall ${1+"$@"}; shift
1040*ae771770SStanislav Sedov  ;;
1041*ae771770SStanislav Sedovesac
1042*ae771770SStanislav Sedov
1043*ae771770SStanislav Sedov
1044*ae771770SStanislav Sedov
1045*ae771770SStanislav Sedov# Option defaults:
1046*ae771770SStanislav Sedovopt_debug=:
1047*ae771770SStanislav Sedovopt_dry_run=false
1048*ae771770SStanislav Sedovopt_config=false
1049*ae771770SStanislav Sedovopt_preserve_dup_deps=false
1050*ae771770SStanislav Sedovopt_features=false
1051*ae771770SStanislav Sedovopt_finish=false
1052*ae771770SStanislav Sedovopt_help=false
1053*ae771770SStanislav Sedovopt_help_all=false
1054*ae771770SStanislav Sedovopt_silent=:
1055*ae771770SStanislav Sedovopt_verbose=:
1056*ae771770SStanislav Sedovopt_silent=false
1057*ae771770SStanislav Sedovopt_verbose=false
1058*ae771770SStanislav Sedov
1059*ae771770SStanislav Sedov
1060*ae771770SStanislav Sedov# Parse options once, thoroughly.  This comes as soon as possible in the
1061*ae771770SStanislav Sedov# script to make things like `--version' happen as quickly as we can.
1062*ae771770SStanislav Sedov{
1063*ae771770SStanislav Sedov  # this just eases exit handling
1064*ae771770SStanislav Sedov  while test $# -gt 0; do
1065*ae771770SStanislav Sedov    opt="$1"
1066*ae771770SStanislav Sedov    shift
1067*ae771770SStanislav Sedov    case $opt in
1068*ae771770SStanislav Sedov      --debug|-x)	opt_debug='set -x'
1069*ae771770SStanislav Sedov			func_echo "enabling shell trace mode"
1070*ae771770SStanislav Sedov			$opt_debug
1071*ae771770SStanislav Sedov			;;
1072*ae771770SStanislav Sedov      --dry-run|--dryrun|-n)
1073*ae771770SStanislav Sedov			opt_dry_run=:
1074*ae771770SStanislav Sedov			;;
1075*ae771770SStanislav Sedov      --config)
1076*ae771770SStanislav Sedov			opt_config=:
1077*ae771770SStanislav Sedovfunc_config
1078*ae771770SStanislav Sedov			;;
1079*ae771770SStanislav Sedov      --dlopen|-dlopen)
1080*ae771770SStanislav Sedov			optarg="$1"
1081*ae771770SStanislav Sedov			opt_dlopen="${opt_dlopen+$opt_dlopen
1082*ae771770SStanislav Sedov}$optarg"
1083*ae771770SStanislav Sedov			shift
1084*ae771770SStanislav Sedov			;;
1085*ae771770SStanislav Sedov      --preserve-dup-deps)
1086*ae771770SStanislav Sedov			opt_preserve_dup_deps=:
1087*ae771770SStanislav Sedov			;;
1088*ae771770SStanislav Sedov      --features)
1089*ae771770SStanislav Sedov			opt_features=:
1090*ae771770SStanislav Sedovfunc_features
1091*ae771770SStanislav Sedov			;;
1092*ae771770SStanislav Sedov      --finish)
1093*ae771770SStanislav Sedov			opt_finish=:
1094*ae771770SStanislav Sedovset dummy --mode finish ${1+"$@"}; shift
1095*ae771770SStanislav Sedov			;;
1096*ae771770SStanislav Sedov      --help)
1097*ae771770SStanislav Sedov			opt_help=:
1098*ae771770SStanislav Sedov			;;
1099*ae771770SStanislav Sedov      --help-all)
1100*ae771770SStanislav Sedov			opt_help_all=:
1101*ae771770SStanislav Sedovopt_help=': help-all'
1102*ae771770SStanislav Sedov			;;
1103*ae771770SStanislav Sedov      --mode)
1104*ae771770SStanislav Sedov			test $# = 0 && func_missing_arg $opt && break
1105*ae771770SStanislav Sedov			optarg="$1"
1106*ae771770SStanislav Sedov			opt_mode="$optarg"
1107*ae771770SStanislav Sedovcase $optarg in
1108*ae771770SStanislav Sedov  # Valid mode arguments:
1109*ae771770SStanislav Sedov  clean|compile|execute|finish|install|link|relink|uninstall) ;;
1110*ae771770SStanislav Sedov
1111*ae771770SStanislav Sedov  # Catch anything else as an error
1112*ae771770SStanislav Sedov  *) func_error "invalid argument for $opt"
1113*ae771770SStanislav Sedov     exit_cmd=exit
1114*ae771770SStanislav Sedov     break
1115*ae771770SStanislav Sedov     ;;
1116*ae771770SStanislav Sedovesac
1117*ae771770SStanislav Sedov			shift
1118*ae771770SStanislav Sedov			;;
1119*ae771770SStanislav Sedov      --no-silent|--no-quiet)
1120*ae771770SStanislav Sedov			opt_silent=false
1121*ae771770SStanislav Sedovfunc_append preserve_args " $opt"
1122*ae771770SStanislav Sedov			;;
1123*ae771770SStanislav Sedov      --no-verbose)
1124*ae771770SStanislav Sedov			opt_verbose=false
1125*ae771770SStanislav Sedovfunc_append preserve_args " $opt"
1126*ae771770SStanislav Sedov			;;
1127*ae771770SStanislav Sedov      --silent|--quiet)
1128*ae771770SStanislav Sedov			opt_silent=:
1129*ae771770SStanislav Sedovfunc_append preserve_args " $opt"
1130*ae771770SStanislav Sedov        opt_verbose=false
1131*ae771770SStanislav Sedov			;;
1132*ae771770SStanislav Sedov      --verbose|-v)
1133*ae771770SStanislav Sedov			opt_verbose=:
1134*ae771770SStanislav Sedovfunc_append preserve_args " $opt"
1135*ae771770SStanislav Sedovopt_silent=false
1136*ae771770SStanislav Sedov			;;
1137*ae771770SStanislav Sedov      --tag)
1138*ae771770SStanislav Sedov			test $# = 0 && func_missing_arg $opt && break
1139*ae771770SStanislav Sedov			optarg="$1"
1140*ae771770SStanislav Sedov			opt_tag="$optarg"
1141*ae771770SStanislav Sedovfunc_append preserve_args " $opt $optarg"
1142*ae771770SStanislav Sedovfunc_enable_tag "$optarg"
1143*ae771770SStanislav Sedov			shift
1144*ae771770SStanislav Sedov			;;
1145*ae771770SStanislav Sedov
1146*ae771770SStanislav Sedov      -\?|-h)		func_usage				;;
1147*ae771770SStanislav Sedov      --help)		func_help				;;
1148*ae771770SStanislav Sedov      --version)	func_version				;;
1149*ae771770SStanislav Sedov
1150*ae771770SStanislav Sedov      # Separate optargs to long options:
1151*ae771770SStanislav Sedov      --*=*)
1152*ae771770SStanislav Sedov			func_split_long_opt "$opt"
1153*ae771770SStanislav Sedov			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
1154*ae771770SStanislav Sedov			shift
1155*ae771770SStanislav Sedov			;;
1156*ae771770SStanislav Sedov
1157*ae771770SStanislav Sedov      # Separate non-argument short options:
1158*ae771770SStanislav Sedov      -\?*|-h*|-n*|-v*)
1159*ae771770SStanislav Sedov			func_split_short_opt "$opt"
1160*ae771770SStanislav Sedov			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
1161*ae771770SStanislav Sedov			shift
1162*ae771770SStanislav Sedov			;;
1163*ae771770SStanislav Sedov
1164*ae771770SStanislav Sedov      --)		break					;;
1165*ae771770SStanislav Sedov      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
1166*ae771770SStanislav Sedov      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
1167*ae771770SStanislav Sedov    esac
1168*ae771770SStanislav Sedov  done
1169*ae771770SStanislav Sedov
1170*ae771770SStanislav Sedov  # Validate options:
1171*ae771770SStanislav Sedov
1172*ae771770SStanislav Sedov  # save first non-option argument
1173*ae771770SStanislav Sedov  if test "$#" -gt 0; then
1174*ae771770SStanislav Sedov    nonopt="$opt"
1175*ae771770SStanislav Sedov    shift
1176*ae771770SStanislav Sedov  fi
1177*ae771770SStanislav Sedov
1178*ae771770SStanislav Sedov  # preserve --debug
1179*ae771770SStanislav Sedov  test "$opt_debug" = : || func_append preserve_args " --debug"
1180*ae771770SStanislav Sedov
1181*ae771770SStanislav Sedov  case $host in
1182*ae771770SStanislav Sedov    *cygwin* | *mingw* | *pw32* | *cegcc*)
1183*ae771770SStanislav Sedov      # don't eliminate duplications in $postdeps and $predeps
1184*ae771770SStanislav Sedov      opt_duplicate_compiler_generated_deps=:
1185*ae771770SStanislav Sedov      ;;
1186*ae771770SStanislav Sedov    *)
1187*ae771770SStanislav Sedov      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
1188*ae771770SStanislav Sedov      ;;
1189*ae771770SStanislav Sedov  esac
1190*ae771770SStanislav Sedov
1191*ae771770SStanislav Sedov  $opt_help || {
1192*ae771770SStanislav Sedov    # Sanity checks first:
1193*ae771770SStanislav Sedov    func_check_version_match
1194*ae771770SStanislav Sedov
1195*ae771770SStanislav Sedov    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
1196*ae771770SStanislav Sedov      func_fatal_configuration "not configured to build any kind of library"
1197*ae771770SStanislav Sedov    fi
1198*ae771770SStanislav Sedov
1199*ae771770SStanislav Sedov    # Darwin sucks
1200*ae771770SStanislav Sedov    eval std_shrext=\"$shrext_cmds\"
1201*ae771770SStanislav Sedov
1202*ae771770SStanislav Sedov    # Only execute mode is allowed to have -dlopen flags.
1203*ae771770SStanislav Sedov    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
1204*ae771770SStanislav Sedov      func_error "unrecognized option \`-dlopen'"
1205*ae771770SStanislav Sedov      $ECHO "$help" 1>&2
1206*ae771770SStanislav Sedov      exit $EXIT_FAILURE
1207*ae771770SStanislav Sedov    fi
1208*ae771770SStanislav Sedov
1209*ae771770SStanislav Sedov    # Change the help message to a mode-specific one.
1210*ae771770SStanislav Sedov    generic_help="$help"
1211*ae771770SStanislav Sedov    help="Try \`$progname --help --mode=$opt_mode' for more information."
1212*ae771770SStanislav Sedov  }
1213*ae771770SStanislav Sedov
1214*ae771770SStanislav Sedov
1215*ae771770SStanislav Sedov  # Bail if the options were screwed
1216*ae771770SStanislav Sedov  $exit_cmd $EXIT_FAILURE
1217*ae771770SStanislav Sedov}
1218*ae771770SStanislav Sedov
1219*ae771770SStanislav Sedov
1220*ae771770SStanislav Sedov
1221*ae771770SStanislav Sedov
1222*ae771770SStanislav Sedov## ----------- ##
1223*ae771770SStanislav Sedov##    Main.    ##
1224*ae771770SStanislav Sedov## ----------- ##
1225*ae771770SStanislav Sedov
1226*ae771770SStanislav Sedov# func_lalib_p file
1227*ae771770SStanislav Sedov# True iff FILE is a libtool `.la' library or `.lo' object file.
1228*ae771770SStanislav Sedov# This function is only a basic sanity check; it will hardly flush out
1229*ae771770SStanislav Sedov# determined imposters.
1230*ae771770SStanislav Sedovfunc_lalib_p ()
1231*ae771770SStanislav Sedov{
1232*ae771770SStanislav Sedov    test -f "$1" &&
1233*ae771770SStanislav Sedov      $SED -e 4q "$1" 2>/dev/null \
1234*ae771770SStanislav Sedov        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
1235*ae771770SStanislav Sedov}
1236*ae771770SStanislav Sedov
1237*ae771770SStanislav Sedov# func_lalib_unsafe_p file
1238*ae771770SStanislav Sedov# True iff FILE is a libtool `.la' library or `.lo' object file.
1239*ae771770SStanislav Sedov# This function implements the same check as func_lalib_p without
1240*ae771770SStanislav Sedov# resorting to external programs.  To this end, it redirects stdin and
1241*ae771770SStanislav Sedov# closes it afterwards, without saving the original file descriptor.
1242*ae771770SStanislav Sedov# As a safety measure, use it only where a negative result would be
1243*ae771770SStanislav Sedov# fatal anyway.  Works if `file' does not exist.
1244*ae771770SStanislav Sedovfunc_lalib_unsafe_p ()
1245*ae771770SStanislav Sedov{
1246*ae771770SStanislav Sedov    lalib_p=no
1247*ae771770SStanislav Sedov    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
1248*ae771770SStanislav Sedov	for lalib_p_l in 1 2 3 4
1249*ae771770SStanislav Sedov	do
1250*ae771770SStanislav Sedov	    read lalib_p_line
1251*ae771770SStanislav Sedov	    case "$lalib_p_line" in
1252*ae771770SStanislav Sedov		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
1253*ae771770SStanislav Sedov	    esac
1254*ae771770SStanislav Sedov	done
1255*ae771770SStanislav Sedov	exec 0<&5 5<&-
1256*ae771770SStanislav Sedov    fi
1257*ae771770SStanislav Sedov    test "$lalib_p" = yes
1258*ae771770SStanislav Sedov}
1259*ae771770SStanislav Sedov
1260*ae771770SStanislav Sedov# func_ltwrapper_script_p file
1261*ae771770SStanislav Sedov# True iff FILE is a libtool wrapper script
1262*ae771770SStanislav Sedov# This function is only a basic sanity check; it will hardly flush out
1263*ae771770SStanislav Sedov# determined imposters.
1264*ae771770SStanislav Sedovfunc_ltwrapper_script_p ()
1265*ae771770SStanislav Sedov{
1266*ae771770SStanislav Sedov    func_lalib_p "$1"
1267*ae771770SStanislav Sedov}
1268*ae771770SStanislav Sedov
1269*ae771770SStanislav Sedov# func_ltwrapper_executable_p file
1270*ae771770SStanislav Sedov# True iff FILE is a libtool wrapper executable
1271*ae771770SStanislav Sedov# This function is only a basic sanity check; it will hardly flush out
1272*ae771770SStanislav Sedov# determined imposters.
1273*ae771770SStanislav Sedovfunc_ltwrapper_executable_p ()
1274*ae771770SStanislav Sedov{
1275*ae771770SStanislav Sedov    func_ltwrapper_exec_suffix=
1276*ae771770SStanislav Sedov    case $1 in
1277*ae771770SStanislav Sedov    *.exe) ;;
1278*ae771770SStanislav Sedov    *) func_ltwrapper_exec_suffix=.exe ;;
1279*ae771770SStanislav Sedov    esac
1280*ae771770SStanislav Sedov    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
1281*ae771770SStanislav Sedov}
1282*ae771770SStanislav Sedov
1283*ae771770SStanislav Sedov# func_ltwrapper_scriptname file
1284*ae771770SStanislav Sedov# Assumes file is an ltwrapper_executable
1285*ae771770SStanislav Sedov# uses $file to determine the appropriate filename for a
1286*ae771770SStanislav Sedov# temporary ltwrapper_script.
1287*ae771770SStanislav Sedovfunc_ltwrapper_scriptname ()
1288*ae771770SStanislav Sedov{
1289*ae771770SStanislav Sedov    func_dirname_and_basename "$1" "" "."
1290*ae771770SStanislav Sedov    func_stripname '' '.exe' "$func_basename_result"
1291*ae771770SStanislav Sedov    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
1292*ae771770SStanislav Sedov}
1293*ae771770SStanislav Sedov
1294*ae771770SStanislav Sedov# func_ltwrapper_p file
1295*ae771770SStanislav Sedov# True iff FILE is a libtool wrapper script or wrapper executable
1296*ae771770SStanislav Sedov# This function is only a basic sanity check; it will hardly flush out
1297*ae771770SStanislav Sedov# determined imposters.
1298*ae771770SStanislav Sedovfunc_ltwrapper_p ()
1299*ae771770SStanislav Sedov{
1300*ae771770SStanislav Sedov    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
1301*ae771770SStanislav Sedov}
1302*ae771770SStanislav Sedov
1303*ae771770SStanislav Sedov
1304*ae771770SStanislav Sedov# func_execute_cmds commands fail_cmd
1305*ae771770SStanislav Sedov# Execute tilde-delimited COMMANDS.
1306*ae771770SStanislav Sedov# If FAIL_CMD is given, eval that upon failure.
1307*ae771770SStanislav Sedov# FAIL_CMD may read-access the current command in variable CMD!
1308*ae771770SStanislav Sedovfunc_execute_cmds ()
1309*ae771770SStanislav Sedov{
1310*ae771770SStanislav Sedov    $opt_debug
1311*ae771770SStanislav Sedov    save_ifs=$IFS; IFS='~'
1312*ae771770SStanislav Sedov    for cmd in $1; do
1313*ae771770SStanislav Sedov      IFS=$save_ifs
1314*ae771770SStanislav Sedov      eval cmd=\"$cmd\"
1315*ae771770SStanislav Sedov      func_show_eval "$cmd" "${2-:}"
1316*ae771770SStanislav Sedov    done
1317*ae771770SStanislav Sedov    IFS=$save_ifs
1318*ae771770SStanislav Sedov}
1319*ae771770SStanislav Sedov
1320*ae771770SStanislav Sedov
1321*ae771770SStanislav Sedov# func_source file
1322*ae771770SStanislav Sedov# Source FILE, adding directory component if necessary.
1323*ae771770SStanislav Sedov# Note that it is not necessary on cygwin/mingw to append a dot to
1324*ae771770SStanislav Sedov# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
1325*ae771770SStanislav Sedov# behavior happens only for exec(3), not for open(2)!  Also, sourcing
1326*ae771770SStanislav Sedov# `FILE.' does not work on cygwin managed mounts.
1327*ae771770SStanislav Sedovfunc_source ()
1328*ae771770SStanislav Sedov{
1329*ae771770SStanislav Sedov    $opt_debug
1330*ae771770SStanislav Sedov    case $1 in
1331*ae771770SStanislav Sedov    */* | *\\*)	. "$1" ;;
1332*ae771770SStanislav Sedov    *)		. "./$1" ;;
1333*ae771770SStanislav Sedov    esac
1334*ae771770SStanislav Sedov}
1335*ae771770SStanislav Sedov
1336*ae771770SStanislav Sedov
1337*ae771770SStanislav Sedov# func_resolve_sysroot PATH
1338*ae771770SStanislav Sedov# Replace a leading = in PATH with a sysroot.  Store the result into
1339*ae771770SStanislav Sedov# func_resolve_sysroot_result
1340*ae771770SStanislav Sedovfunc_resolve_sysroot ()
1341*ae771770SStanislav Sedov{
1342*ae771770SStanislav Sedov  func_resolve_sysroot_result=$1
1343*ae771770SStanislav Sedov  case $func_resolve_sysroot_result in
1344*ae771770SStanislav Sedov  =*)
1345*ae771770SStanislav Sedov    func_stripname '=' '' "$func_resolve_sysroot_result"
1346*ae771770SStanislav Sedov    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
1347*ae771770SStanislav Sedov    ;;
1348*ae771770SStanislav Sedov  esac
1349*ae771770SStanislav Sedov}
1350*ae771770SStanislav Sedov
1351*ae771770SStanislav Sedov# func_replace_sysroot PATH
1352*ae771770SStanislav Sedov# If PATH begins with the sysroot, replace it with = and
1353*ae771770SStanislav Sedov# store the result into func_replace_sysroot_result.
1354*ae771770SStanislav Sedovfunc_replace_sysroot ()
1355*ae771770SStanislav Sedov{
1356*ae771770SStanislav Sedov  case "$lt_sysroot:$1" in
1357*ae771770SStanislav Sedov  ?*:"$lt_sysroot"*)
1358*ae771770SStanislav Sedov    func_stripname "$lt_sysroot" '' "$1"
1359*ae771770SStanislav Sedov    func_replace_sysroot_result="=$func_stripname_result"
1360*ae771770SStanislav Sedov    ;;
1361*ae771770SStanislav Sedov  *)
1362*ae771770SStanislav Sedov    # Including no sysroot.
1363*ae771770SStanislav Sedov    func_replace_sysroot_result=$1
1364*ae771770SStanislav Sedov    ;;
1365*ae771770SStanislav Sedov  esac
1366*ae771770SStanislav Sedov}
1367*ae771770SStanislav Sedov
1368c19800e8SDoug Rabson# func_infer_tag arg
1369c19800e8SDoug Rabson# Infer tagged configuration to use if any are available and
1370c19800e8SDoug Rabson# if one wasn't chosen via the "--tag" command line option.
1371c19800e8SDoug Rabson# Only attempt this if the compiler in the base compile
1372c19800e8SDoug Rabson# command doesn't match the default compiler.
1373c19800e8SDoug Rabson# arg is usually of the form 'gcc ...'
1374c19800e8SDoug Rabsonfunc_infer_tag ()
1375c19800e8SDoug Rabson{
1376*ae771770SStanislav Sedov    $opt_debug
1377c19800e8SDoug Rabson    if test -n "$available_tags" && test -z "$tagname"; then
1378c19800e8SDoug Rabson      CC_quoted=
1379c19800e8SDoug Rabson      for arg in $CC; do
1380*ae771770SStanislav Sedov	func_append_quoted CC_quoted "$arg"
1381c19800e8SDoug Rabson      done
1382*ae771770SStanislav Sedov      CC_expanded=`func_echo_all $CC`
1383*ae771770SStanislav Sedov      CC_quoted_expanded=`func_echo_all $CC_quoted`
1384c19800e8SDoug Rabson      case $@ in
1385c19800e8SDoug Rabson      # Blanks in the command may have been stripped by the calling shell,
1386c19800e8SDoug Rabson      # but not from the CC environment variable when configure was run.
1387*ae771770SStanislav Sedov      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
1388*ae771770SStanislav Sedov      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
1389c19800e8SDoug Rabson      # Blanks at the start of $base_compile will cause this to fail
1390c19800e8SDoug Rabson      # if we don't check for them as well.
1391c19800e8SDoug Rabson      *)
1392c19800e8SDoug Rabson	for z in $available_tags; do
1393*ae771770SStanislav Sedov	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
1394c19800e8SDoug Rabson	    # Evaluate the configuration.
1395c19800e8SDoug Rabson	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
1396c19800e8SDoug Rabson	    CC_quoted=
1397c19800e8SDoug Rabson	    for arg in $CC; do
1398c19800e8SDoug Rabson	      # Double-quote args containing other shell metacharacters.
1399*ae771770SStanislav Sedov	      func_append_quoted CC_quoted "$arg"
1400c19800e8SDoug Rabson	    done
1401*ae771770SStanislav Sedov	    CC_expanded=`func_echo_all $CC`
1402*ae771770SStanislav Sedov	    CC_quoted_expanded=`func_echo_all $CC_quoted`
1403c19800e8SDoug Rabson	    case "$@ " in
1404*ae771770SStanislav Sedov	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
1405*ae771770SStanislav Sedov	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
1406c19800e8SDoug Rabson	      # The compiler in the base compile command matches
1407c19800e8SDoug Rabson	      # the one in the tagged configuration.
1408c19800e8SDoug Rabson	      # Assume this is the tagged configuration we want.
1409c19800e8SDoug Rabson	      tagname=$z
1410c19800e8SDoug Rabson	      break
1411c19800e8SDoug Rabson	      ;;
1412c19800e8SDoug Rabson	    esac
1413c19800e8SDoug Rabson	  fi
1414c19800e8SDoug Rabson	done
1415c19800e8SDoug Rabson	# If $tagname still isn't set, then no tagged configuration
1416c19800e8SDoug Rabson	# was found and let the user know that the "--tag" command
1417c19800e8SDoug Rabson	# line option must be used.
1418c19800e8SDoug Rabson	if test -z "$tagname"; then
1419*ae771770SStanislav Sedov	  func_echo "unable to infer tagged configuration"
1420*ae771770SStanislav Sedov	  func_fatal_error "specify a tag with \`--tag'"
1421c19800e8SDoug Rabson#	else
1422*ae771770SStanislav Sedov#	  func_verbose "using $tagname tagged configuration"
1423c19800e8SDoug Rabson	fi
1424c19800e8SDoug Rabson	;;
1425c19800e8SDoug Rabson      esac
1426c19800e8SDoug Rabson    fi
1427c19800e8SDoug Rabson}
1428c19800e8SDoug Rabson
1429c19800e8SDoug Rabson
1430*ae771770SStanislav Sedov
1431*ae771770SStanislav Sedov# func_write_libtool_object output_name pic_name nonpic_name
1432*ae771770SStanislav Sedov# Create a libtool object file (analogous to a ".la" file),
1433*ae771770SStanislav Sedov# but don't create it if we're doing a dry run.
1434*ae771770SStanislav Sedovfunc_write_libtool_object ()
1435c19800e8SDoug Rabson{
1436*ae771770SStanislav Sedov    write_libobj=${1}
1437b528cefcSMark Murray    if test "$build_libtool_libs" = yes; then
1438*ae771770SStanislav Sedov      write_lobj=\'${2}\'
1439b528cefcSMark Murray    else
1440*ae771770SStanislav Sedov      write_lobj=none
1441b528cefcSMark Murray    fi
1442*ae771770SStanislav Sedov
1443b528cefcSMark Murray    if test "$build_old_libs" = yes; then
1444*ae771770SStanislav Sedov      write_oldobj=\'${3}\'
1445b528cefcSMark Murray    else
1446*ae771770SStanislav Sedov      write_oldobj=none
1447b528cefcSMark Murray    fi
1448b528cefcSMark Murray
1449*ae771770SStanislav Sedov    $opt_dry_run || {
1450*ae771770SStanislav Sedov      cat >${write_libobj}T <<EOF
1451*ae771770SStanislav Sedov# $write_libobj - a libtool object file
1452*ae771770SStanislav Sedov# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
1453*ae771770SStanislav Sedov#
1454*ae771770SStanislav Sedov# Please DO NOT delete this file!
1455*ae771770SStanislav Sedov# It is necessary for linking the library.
1456c19800e8SDoug Rabson
1457*ae771770SStanislav Sedov# Name of the PIC object.
1458*ae771770SStanislav Sedovpic_object=$write_lobj
14598373020dSJacques Vidrine
1460*ae771770SStanislav Sedov# Name of the non-PIC object
1461*ae771770SStanislav Sedovnon_pic_object=$write_oldobj
1462b528cefcSMark Murray
1463*ae771770SStanislav SedovEOF
1464*ae771770SStanislav Sedov      $MV "${write_libobj}T" "${write_libobj}"
1465*ae771770SStanislav Sedov    }
1466*ae771770SStanislav Sedov}
1467*ae771770SStanislav Sedov
1468*ae771770SStanislav Sedov
1469*ae771770SStanislav Sedov##################################################
1470*ae771770SStanislav Sedov# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
1471*ae771770SStanislav Sedov##################################################
1472*ae771770SStanislav Sedov
1473*ae771770SStanislav Sedov# func_convert_core_file_wine_to_w32 ARG
1474*ae771770SStanislav Sedov# Helper function used by file name conversion functions when $build is *nix,
1475*ae771770SStanislav Sedov# and $host is mingw, cygwin, or some other w32 environment. Relies on a
1476*ae771770SStanislav Sedov# correctly configured wine environment available, with the winepath program
1477*ae771770SStanislav Sedov# in $build's $PATH.
1478*ae771770SStanislav Sedov#
1479*ae771770SStanislav Sedov# ARG is the $build file name to be converted to w32 format.
1480*ae771770SStanislav Sedov# Result is available in $func_convert_core_file_wine_to_w32_result, and will
1481*ae771770SStanislav Sedov# be empty on error (or when ARG is empty)
1482*ae771770SStanislav Sedovfunc_convert_core_file_wine_to_w32 ()
1483*ae771770SStanislav Sedov{
1484*ae771770SStanislav Sedov  $opt_debug
1485*ae771770SStanislav Sedov  func_convert_core_file_wine_to_w32_result="$1"
1486*ae771770SStanislav Sedov  if test -n "$1"; then
1487*ae771770SStanislav Sedov    # Unfortunately, winepath does not exit with a non-zero error code, so we
1488*ae771770SStanislav Sedov    # are forced to check the contents of stdout. On the other hand, if the
1489*ae771770SStanislav Sedov    # command is not found, the shell will set an exit code of 127 and print
1490*ae771770SStanislav Sedov    # *an error message* to stdout. So we must check for both error code of
1491*ae771770SStanislav Sedov    # zero AND non-empty stdout, which explains the odd construction:
1492*ae771770SStanislav Sedov    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
1493*ae771770SStanislav Sedov    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
1494*ae771770SStanislav Sedov      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
1495*ae771770SStanislav Sedov        $SED -e "$lt_sed_naive_backslashify"`
1496*ae771770SStanislav Sedov    else
1497*ae771770SStanislav Sedov      func_convert_core_file_wine_to_w32_result=
1498*ae771770SStanislav Sedov    fi
1499*ae771770SStanislav Sedov  fi
1500*ae771770SStanislav Sedov}
1501*ae771770SStanislav Sedov# end: func_convert_core_file_wine_to_w32
1502*ae771770SStanislav Sedov
1503*ae771770SStanislav Sedov
1504*ae771770SStanislav Sedov# func_convert_core_path_wine_to_w32 ARG
1505*ae771770SStanislav Sedov# Helper function used by path conversion functions when $build is *nix, and
1506*ae771770SStanislav Sedov# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
1507*ae771770SStanislav Sedov# configured wine environment available, with the winepath program in $build's
1508*ae771770SStanislav Sedov# $PATH. Assumes ARG has no leading or trailing path separator characters.
1509*ae771770SStanislav Sedov#
1510*ae771770SStanislav Sedov# ARG is path to be converted from $build format to win32.
1511*ae771770SStanislav Sedov# Result is available in $func_convert_core_path_wine_to_w32_result.
1512*ae771770SStanislav Sedov# Unconvertible file (directory) names in ARG are skipped; if no directory names
1513*ae771770SStanislav Sedov# are convertible, then the result may be empty.
1514*ae771770SStanislav Sedovfunc_convert_core_path_wine_to_w32 ()
1515*ae771770SStanislav Sedov{
1516*ae771770SStanislav Sedov  $opt_debug
1517*ae771770SStanislav Sedov  # unfortunately, winepath doesn't convert paths, only file names
1518*ae771770SStanislav Sedov  func_convert_core_path_wine_to_w32_result=""
1519*ae771770SStanislav Sedov  if test -n "$1"; then
1520*ae771770SStanislav Sedov    oldIFS=$IFS
1521*ae771770SStanislav Sedov    IFS=:
1522*ae771770SStanislav Sedov    for func_convert_core_path_wine_to_w32_f in $1; do
1523*ae771770SStanislav Sedov      IFS=$oldIFS
1524*ae771770SStanislav Sedov      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
1525*ae771770SStanislav Sedov      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
1526*ae771770SStanislav Sedov        if test -z "$func_convert_core_path_wine_to_w32_result"; then
1527*ae771770SStanislav Sedov          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
1528*ae771770SStanislav Sedov        else
1529*ae771770SStanislav Sedov          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
1530*ae771770SStanislav Sedov        fi
1531*ae771770SStanislav Sedov      fi
1532b528cefcSMark Murray    done
1533*ae771770SStanislav Sedov    IFS=$oldIFS
1534*ae771770SStanislav Sedov  fi
1535*ae771770SStanislav Sedov}
1536*ae771770SStanislav Sedov# end: func_convert_core_path_wine_to_w32
1537*ae771770SStanislav Sedov
1538*ae771770SStanislav Sedov
1539*ae771770SStanislav Sedov# func_cygpath ARGS...
1540*ae771770SStanislav Sedov# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
1541*ae771770SStanislav Sedov# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
1542*ae771770SStanislav Sedov# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
1543*ae771770SStanislav Sedov# (2), returns the Cygwin file name or path in func_cygpath_result (input
1544*ae771770SStanislav Sedov# file name or path is assumed to be in w32 format, as previously converted
1545*ae771770SStanislav Sedov# from $build's *nix or MSYS format). In case (3), returns the w32 file name
1546*ae771770SStanislav Sedov# or path in func_cygpath_result (input file name or path is assumed to be in
1547*ae771770SStanislav Sedov# Cygwin format). Returns an empty string on error.
1548*ae771770SStanislav Sedov#
1549*ae771770SStanislav Sedov# ARGS are passed to cygpath, with the last one being the file name or path to
1550*ae771770SStanislav Sedov# be converted.
1551*ae771770SStanislav Sedov#
1552*ae771770SStanislav Sedov# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
1553*ae771770SStanislav Sedov# environment variable; do not put it in $PATH.
1554*ae771770SStanislav Sedovfunc_cygpath ()
1555*ae771770SStanislav Sedov{
1556*ae771770SStanislav Sedov  $opt_debug
1557*ae771770SStanislav Sedov  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
1558*ae771770SStanislav Sedov    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
1559*ae771770SStanislav Sedov    if test "$?" -ne 0; then
1560*ae771770SStanislav Sedov      # on failure, ensure result is empty
1561*ae771770SStanislav Sedov      func_cygpath_result=
1562*ae771770SStanislav Sedov    fi
1563*ae771770SStanislav Sedov  else
1564*ae771770SStanislav Sedov    func_cygpath_result=
1565*ae771770SStanislav Sedov    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
1566*ae771770SStanislav Sedov  fi
1567*ae771770SStanislav Sedov}
1568*ae771770SStanislav Sedov#end: func_cygpath
1569*ae771770SStanislav Sedov
1570*ae771770SStanislav Sedov
1571*ae771770SStanislav Sedov# func_convert_core_msys_to_w32 ARG
1572*ae771770SStanislav Sedov# Convert file name or path ARG from MSYS format to w32 format.  Return
1573*ae771770SStanislav Sedov# result in func_convert_core_msys_to_w32_result.
1574*ae771770SStanislav Sedovfunc_convert_core_msys_to_w32 ()
1575*ae771770SStanislav Sedov{
1576*ae771770SStanislav Sedov  $opt_debug
1577*ae771770SStanislav Sedov  # awkward: cmd appends spaces to result
1578*ae771770SStanislav Sedov  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
1579*ae771770SStanislav Sedov    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
1580*ae771770SStanislav Sedov}
1581*ae771770SStanislav Sedov#end: func_convert_core_msys_to_w32
1582*ae771770SStanislav Sedov
1583*ae771770SStanislav Sedov
1584*ae771770SStanislav Sedov# func_convert_file_check ARG1 ARG2
1585*ae771770SStanislav Sedov# Verify that ARG1 (a file name in $build format) was converted to $host
1586*ae771770SStanislav Sedov# format in ARG2. Otherwise, emit an error message, but continue (resetting
1587*ae771770SStanislav Sedov# func_to_host_file_result to ARG1).
1588*ae771770SStanislav Sedovfunc_convert_file_check ()
1589*ae771770SStanislav Sedov{
1590*ae771770SStanislav Sedov  $opt_debug
1591*ae771770SStanislav Sedov  if test -z "$2" && test -n "$1" ; then
1592*ae771770SStanislav Sedov    func_error "Could not determine host file name corresponding to"
1593*ae771770SStanislav Sedov    func_error "  \`$1'"
1594*ae771770SStanislav Sedov    func_error "Continuing, but uninstalled executables may not work."
1595*ae771770SStanislav Sedov    # Fallback:
1596*ae771770SStanislav Sedov    func_to_host_file_result="$1"
1597*ae771770SStanislav Sedov  fi
1598*ae771770SStanislav Sedov}
1599*ae771770SStanislav Sedov# end func_convert_file_check
1600*ae771770SStanislav Sedov
1601*ae771770SStanislav Sedov
1602*ae771770SStanislav Sedov# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
1603*ae771770SStanislav Sedov# Verify that FROM_PATH (a path in $build format) was converted to $host
1604*ae771770SStanislav Sedov# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
1605*ae771770SStanislav Sedov# func_to_host_file_result to a simplistic fallback value (see below).
1606*ae771770SStanislav Sedovfunc_convert_path_check ()
1607*ae771770SStanislav Sedov{
1608*ae771770SStanislav Sedov  $opt_debug
1609*ae771770SStanislav Sedov  if test -z "$4" && test -n "$3"; then
1610*ae771770SStanislav Sedov    func_error "Could not determine the host path corresponding to"
1611*ae771770SStanislav Sedov    func_error "  \`$3'"
1612*ae771770SStanislav Sedov    func_error "Continuing, but uninstalled executables may not work."
1613*ae771770SStanislav Sedov    # Fallback.  This is a deliberately simplistic "conversion" and
1614*ae771770SStanislav Sedov    # should not be "improved".  See libtool.info.
1615*ae771770SStanislav Sedov    if test "x$1" != "x$2"; then
1616*ae771770SStanislav Sedov      lt_replace_pathsep_chars="s|$1|$2|g"
1617*ae771770SStanislav Sedov      func_to_host_path_result=`echo "$3" |
1618*ae771770SStanislav Sedov        $SED -e "$lt_replace_pathsep_chars"`
1619*ae771770SStanislav Sedov    else
1620*ae771770SStanislav Sedov      func_to_host_path_result="$3"
1621*ae771770SStanislav Sedov    fi
1622*ae771770SStanislav Sedov  fi
1623*ae771770SStanislav Sedov}
1624*ae771770SStanislav Sedov# end func_convert_path_check
1625*ae771770SStanislav Sedov
1626*ae771770SStanislav Sedov
1627*ae771770SStanislav Sedov# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
1628*ae771770SStanislav Sedov# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
1629*ae771770SStanislav Sedov# and appending REPL if ORIG matches BACKPAT.
1630*ae771770SStanislav Sedovfunc_convert_path_front_back_pathsep ()
1631*ae771770SStanislav Sedov{
1632*ae771770SStanislav Sedov  $opt_debug
1633*ae771770SStanislav Sedov  case $4 in
1634*ae771770SStanislav Sedov  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
1635b528cefcSMark Murray    ;;
1636*ae771770SStanislav Sedov  esac
1637*ae771770SStanislav Sedov  case $4 in
1638*ae771770SStanislav Sedov  $2 ) func_append func_to_host_path_result "$3"
1639b528cefcSMark Murray    ;;
1640*ae771770SStanislav Sedov  esac
1641*ae771770SStanislav Sedov}
1642*ae771770SStanislav Sedov# end func_convert_path_front_back_pathsep
1643*ae771770SStanislav Sedov
1644*ae771770SStanislav Sedov
1645*ae771770SStanislav Sedov##################################################
1646*ae771770SStanislav Sedov# $build to $host FILE NAME CONVERSION FUNCTIONS #
1647*ae771770SStanislav Sedov##################################################
1648*ae771770SStanislav Sedov# invoked via `$to_host_file_cmd ARG'
1649*ae771770SStanislav Sedov#
1650*ae771770SStanislav Sedov# In each case, ARG is the path to be converted from $build to $host format.
1651*ae771770SStanislav Sedov# Result will be available in $func_to_host_file_result.
1652*ae771770SStanislav Sedov
1653*ae771770SStanislav Sedov
1654*ae771770SStanislav Sedov# func_to_host_file ARG
1655*ae771770SStanislav Sedov# Converts the file name ARG from $build format to $host format. Return result
1656*ae771770SStanislav Sedov# in func_to_host_file_result.
1657*ae771770SStanislav Sedovfunc_to_host_file ()
1658*ae771770SStanislav Sedov{
1659*ae771770SStanislav Sedov  $opt_debug
1660*ae771770SStanislav Sedov  $to_host_file_cmd "$1"
1661*ae771770SStanislav Sedov}
1662*ae771770SStanislav Sedov# end func_to_host_file
1663*ae771770SStanislav Sedov
1664*ae771770SStanislav Sedov
1665*ae771770SStanislav Sedov# func_to_tool_file ARG LAZY
1666*ae771770SStanislav Sedov# converts the file name ARG from $build format to toolchain format. Return
1667*ae771770SStanislav Sedov# result in func_to_tool_file_result.  If the conversion in use is listed
1668*ae771770SStanislav Sedov# in (the comma separated) LAZY, no conversion takes place.
1669*ae771770SStanislav Sedovfunc_to_tool_file ()
1670*ae771770SStanislav Sedov{
1671*ae771770SStanislav Sedov  $opt_debug
1672*ae771770SStanislav Sedov  case ,$2, in
1673*ae771770SStanislav Sedov    *,"$to_tool_file_cmd",*)
1674*ae771770SStanislav Sedov      func_to_tool_file_result=$1
1675b528cefcSMark Murray      ;;
1676b528cefcSMark Murray    *)
1677*ae771770SStanislav Sedov      $to_tool_file_cmd "$1"
1678*ae771770SStanislav Sedov      func_to_tool_file_result=$func_to_host_file_result
1679b528cefcSMark Murray      ;;
1680b528cefcSMark Murray  esac
1681*ae771770SStanislav Sedov}
1682*ae771770SStanislav Sedov# end func_to_tool_file
1683*ae771770SStanislav Sedov
1684*ae771770SStanislav Sedov
1685*ae771770SStanislav Sedov# func_convert_file_noop ARG
1686*ae771770SStanislav Sedov# Copy ARG to func_to_host_file_result.
1687*ae771770SStanislav Sedovfunc_convert_file_noop ()
1688*ae771770SStanislav Sedov{
1689*ae771770SStanislav Sedov  func_to_host_file_result="$1"
1690*ae771770SStanislav Sedov}
1691*ae771770SStanislav Sedov# end func_convert_file_noop
1692*ae771770SStanislav Sedov
1693*ae771770SStanislav Sedov
1694*ae771770SStanislav Sedov# func_convert_file_msys_to_w32 ARG
1695*ae771770SStanislav Sedov# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
1696*ae771770SStanislav Sedov# conversion to w32 is not available inside the cwrapper.  Returns result in
1697*ae771770SStanislav Sedov# func_to_host_file_result.
1698*ae771770SStanislav Sedovfunc_convert_file_msys_to_w32 ()
1699*ae771770SStanislav Sedov{
1700*ae771770SStanislav Sedov  $opt_debug
1701*ae771770SStanislav Sedov  func_to_host_file_result="$1"
1702*ae771770SStanislav Sedov  if test -n "$1"; then
1703*ae771770SStanislav Sedov    func_convert_core_msys_to_w32 "$1"
1704*ae771770SStanislav Sedov    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
1705b528cefcSMark Murray  fi
1706*ae771770SStanislav Sedov  func_convert_file_check "$1" "$func_to_host_file_result"
1707*ae771770SStanislav Sedov}
1708*ae771770SStanislav Sedov# end func_convert_file_msys_to_w32
1709b528cefcSMark Murray
1710*ae771770SStanislav Sedov
1711*ae771770SStanislav Sedov# func_convert_file_cygwin_to_w32 ARG
1712*ae771770SStanislav Sedov# Convert file name ARG from Cygwin to w32 format.  Returns result in
1713*ae771770SStanislav Sedov# func_to_host_file_result.
1714*ae771770SStanislav Sedovfunc_convert_file_cygwin_to_w32 ()
1715*ae771770SStanislav Sedov{
1716*ae771770SStanislav Sedov  $opt_debug
1717*ae771770SStanislav Sedov  func_to_host_file_result="$1"
1718*ae771770SStanislav Sedov  if test -n "$1"; then
1719*ae771770SStanislav Sedov    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
1720*ae771770SStanislav Sedov    # LT_CYGPATH in this case.
1721*ae771770SStanislav Sedov    func_to_host_file_result=`cygpath -m "$1"`
1722b528cefcSMark Murray  fi
1723*ae771770SStanislav Sedov  func_convert_file_check "$1" "$func_to_host_file_result"
1724*ae771770SStanislav Sedov}
1725*ae771770SStanislav Sedov# end func_convert_file_cygwin_to_w32
1726b528cefcSMark Murray
1727b528cefcSMark Murray
1728*ae771770SStanislav Sedov# func_convert_file_nix_to_w32 ARG
1729*ae771770SStanislav Sedov# Convert file name ARG from *nix to w32 format.  Requires a wine environment
1730*ae771770SStanislav Sedov# and a working winepath. Returns result in func_to_host_file_result.
1731*ae771770SStanislav Sedovfunc_convert_file_nix_to_w32 ()
1732*ae771770SStanislav Sedov{
1733*ae771770SStanislav Sedov  $opt_debug
1734*ae771770SStanislav Sedov  func_to_host_file_result="$1"
1735*ae771770SStanislav Sedov  if test -n "$1"; then
1736*ae771770SStanislav Sedov    func_convert_core_file_wine_to_w32 "$1"
1737*ae771770SStanislav Sedov    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
1738*ae771770SStanislav Sedov  fi
1739*ae771770SStanislav Sedov  func_convert_file_check "$1" "$func_to_host_file_result"
1740*ae771770SStanislav Sedov}
1741*ae771770SStanislav Sedov# end func_convert_file_nix_to_w32
1742*ae771770SStanislav Sedov
1743*ae771770SStanislav Sedov
1744*ae771770SStanislav Sedov# func_convert_file_msys_to_cygwin ARG
1745*ae771770SStanislav Sedov# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
1746*ae771770SStanislav Sedov# Returns result in func_to_host_file_result.
1747*ae771770SStanislav Sedovfunc_convert_file_msys_to_cygwin ()
1748*ae771770SStanislav Sedov{
1749*ae771770SStanislav Sedov  $opt_debug
1750*ae771770SStanislav Sedov  func_to_host_file_result="$1"
1751*ae771770SStanislav Sedov  if test -n "$1"; then
1752*ae771770SStanislav Sedov    func_convert_core_msys_to_w32 "$1"
1753*ae771770SStanislav Sedov    func_cygpath -u "$func_convert_core_msys_to_w32_result"
1754*ae771770SStanislav Sedov    func_to_host_file_result="$func_cygpath_result"
1755*ae771770SStanislav Sedov  fi
1756*ae771770SStanislav Sedov  func_convert_file_check "$1" "$func_to_host_file_result"
1757*ae771770SStanislav Sedov}
1758*ae771770SStanislav Sedov# end func_convert_file_msys_to_cygwin
1759*ae771770SStanislav Sedov
1760*ae771770SStanislav Sedov
1761*ae771770SStanislav Sedov# func_convert_file_nix_to_cygwin ARG
1762*ae771770SStanislav Sedov# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
1763*ae771770SStanislav Sedov# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
1764*ae771770SStanislav Sedov# in func_to_host_file_result.
1765*ae771770SStanislav Sedovfunc_convert_file_nix_to_cygwin ()
1766*ae771770SStanislav Sedov{
1767*ae771770SStanislav Sedov  $opt_debug
1768*ae771770SStanislav Sedov  func_to_host_file_result="$1"
1769*ae771770SStanislav Sedov  if test -n "$1"; then
1770*ae771770SStanislav Sedov    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
1771*ae771770SStanislav Sedov    func_convert_core_file_wine_to_w32 "$1"
1772*ae771770SStanislav Sedov    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
1773*ae771770SStanislav Sedov    func_to_host_file_result="$func_cygpath_result"
1774*ae771770SStanislav Sedov  fi
1775*ae771770SStanislav Sedov  func_convert_file_check "$1" "$func_to_host_file_result"
1776*ae771770SStanislav Sedov}
1777*ae771770SStanislav Sedov# end func_convert_file_nix_to_cygwin
1778*ae771770SStanislav Sedov
1779*ae771770SStanislav Sedov
1780*ae771770SStanislav Sedov#############################################
1781*ae771770SStanislav Sedov# $build to $host PATH CONVERSION FUNCTIONS #
1782*ae771770SStanislav Sedov#############################################
1783*ae771770SStanislav Sedov# invoked via `$to_host_path_cmd ARG'
1784*ae771770SStanislav Sedov#
1785*ae771770SStanislav Sedov# In each case, ARG is the path to be converted from $build to $host format.
1786*ae771770SStanislav Sedov# The result will be available in $func_to_host_path_result.
1787*ae771770SStanislav Sedov#
1788*ae771770SStanislav Sedov# Path separators are also converted from $build format to $host format.  If
1789*ae771770SStanislav Sedov# ARG begins or ends with a path separator character, it is preserved (but
1790*ae771770SStanislav Sedov# converted to $host format) on output.
1791*ae771770SStanislav Sedov#
1792*ae771770SStanislav Sedov# All path conversion functions are named using the following convention:
1793*ae771770SStanislav Sedov#   file name conversion function    : func_convert_file_X_to_Y ()
1794*ae771770SStanislav Sedov#   path conversion function         : func_convert_path_X_to_Y ()
1795*ae771770SStanislav Sedov# where, for any given $build/$host combination the 'X_to_Y' value is the
1796*ae771770SStanislav Sedov# same.  If conversion functions are added for new $build/$host combinations,
1797*ae771770SStanislav Sedov# the two new functions must follow this pattern, or func_init_to_host_path_cmd
1798*ae771770SStanislav Sedov# will break.
1799*ae771770SStanislav Sedov
1800*ae771770SStanislav Sedov
1801*ae771770SStanislav Sedov# func_init_to_host_path_cmd
1802*ae771770SStanislav Sedov# Ensures that function "pointer" variable $to_host_path_cmd is set to the
1803*ae771770SStanislav Sedov# appropriate value, based on the value of $to_host_file_cmd.
1804*ae771770SStanislav Sedovto_host_path_cmd=
1805*ae771770SStanislav Sedovfunc_init_to_host_path_cmd ()
1806*ae771770SStanislav Sedov{
1807*ae771770SStanislav Sedov  $opt_debug
1808*ae771770SStanislav Sedov  if test -z "$to_host_path_cmd"; then
1809*ae771770SStanislav Sedov    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
1810*ae771770SStanislav Sedov    to_host_path_cmd="func_convert_path_${func_stripname_result}"
1811*ae771770SStanislav Sedov  fi
1812*ae771770SStanislav Sedov}
1813*ae771770SStanislav Sedov
1814*ae771770SStanislav Sedov
1815*ae771770SStanislav Sedov# func_to_host_path ARG
1816*ae771770SStanislav Sedov# Converts the path ARG from $build format to $host format. Return result
1817*ae771770SStanislav Sedov# in func_to_host_path_result.
1818*ae771770SStanislav Sedovfunc_to_host_path ()
1819*ae771770SStanislav Sedov{
1820*ae771770SStanislav Sedov  $opt_debug
1821*ae771770SStanislav Sedov  func_init_to_host_path_cmd
1822*ae771770SStanislav Sedov  $to_host_path_cmd "$1"
1823*ae771770SStanislav Sedov}
1824*ae771770SStanislav Sedov# end func_to_host_path
1825*ae771770SStanislav Sedov
1826*ae771770SStanislav Sedov
1827*ae771770SStanislav Sedov# func_convert_path_noop ARG
1828*ae771770SStanislav Sedov# Copy ARG to func_to_host_path_result.
1829*ae771770SStanislav Sedovfunc_convert_path_noop ()
1830*ae771770SStanislav Sedov{
1831*ae771770SStanislav Sedov  func_to_host_path_result="$1"
1832*ae771770SStanislav Sedov}
1833*ae771770SStanislav Sedov# end func_convert_path_noop
1834*ae771770SStanislav Sedov
1835*ae771770SStanislav Sedov
1836*ae771770SStanislav Sedov# func_convert_path_msys_to_w32 ARG
1837*ae771770SStanislav Sedov# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
1838*ae771770SStanislav Sedov# conversion to w32 is not available inside the cwrapper.  Returns result in
1839*ae771770SStanislav Sedov# func_to_host_path_result.
1840*ae771770SStanislav Sedovfunc_convert_path_msys_to_w32 ()
1841*ae771770SStanislav Sedov{
1842*ae771770SStanislav Sedov  $opt_debug
1843*ae771770SStanislav Sedov  func_to_host_path_result="$1"
1844*ae771770SStanislav Sedov  if test -n "$1"; then
1845*ae771770SStanislav Sedov    # Remove leading and trailing path separator characters from ARG.  MSYS
1846*ae771770SStanislav Sedov    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
1847*ae771770SStanislav Sedov    # and winepath ignores them completely.
1848*ae771770SStanislav Sedov    func_stripname : : "$1"
1849*ae771770SStanislav Sedov    func_to_host_path_tmp1=$func_stripname_result
1850*ae771770SStanislav Sedov    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
1851*ae771770SStanislav Sedov    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
1852*ae771770SStanislav Sedov    func_convert_path_check : ";" \
1853*ae771770SStanislav Sedov      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1854*ae771770SStanislav Sedov    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1855*ae771770SStanislav Sedov  fi
1856*ae771770SStanislav Sedov}
1857*ae771770SStanislav Sedov# end func_convert_path_msys_to_w32
1858*ae771770SStanislav Sedov
1859*ae771770SStanislav Sedov
1860*ae771770SStanislav Sedov# func_convert_path_cygwin_to_w32 ARG
1861*ae771770SStanislav Sedov# Convert path ARG from Cygwin to w32 format.  Returns result in
1862*ae771770SStanislav Sedov# func_to_host_file_result.
1863*ae771770SStanislav Sedovfunc_convert_path_cygwin_to_w32 ()
1864*ae771770SStanislav Sedov{
1865*ae771770SStanislav Sedov  $opt_debug
1866*ae771770SStanislav Sedov  func_to_host_path_result="$1"
1867*ae771770SStanislav Sedov  if test -n "$1"; then
1868*ae771770SStanislav Sedov    # See func_convert_path_msys_to_w32:
1869*ae771770SStanislav Sedov    func_stripname : : "$1"
1870*ae771770SStanislav Sedov    func_to_host_path_tmp1=$func_stripname_result
1871*ae771770SStanislav Sedov    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
1872*ae771770SStanislav Sedov    func_convert_path_check : ";" \
1873*ae771770SStanislav Sedov      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1874*ae771770SStanislav Sedov    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1875*ae771770SStanislav Sedov  fi
1876*ae771770SStanislav Sedov}
1877*ae771770SStanislav Sedov# end func_convert_path_cygwin_to_w32
1878*ae771770SStanislav Sedov
1879*ae771770SStanislav Sedov
1880*ae771770SStanislav Sedov# func_convert_path_nix_to_w32 ARG
1881*ae771770SStanislav Sedov# Convert path ARG from *nix to w32 format.  Requires a wine environment and
1882*ae771770SStanislav Sedov# a working winepath.  Returns result in func_to_host_file_result.
1883*ae771770SStanislav Sedovfunc_convert_path_nix_to_w32 ()
1884*ae771770SStanislav Sedov{
1885*ae771770SStanislav Sedov  $opt_debug
1886*ae771770SStanislav Sedov  func_to_host_path_result="$1"
1887*ae771770SStanislav Sedov  if test -n "$1"; then
1888*ae771770SStanislav Sedov    # See func_convert_path_msys_to_w32:
1889*ae771770SStanislav Sedov    func_stripname : : "$1"
1890*ae771770SStanislav Sedov    func_to_host_path_tmp1=$func_stripname_result
1891*ae771770SStanislav Sedov    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
1892*ae771770SStanislav Sedov    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
1893*ae771770SStanislav Sedov    func_convert_path_check : ";" \
1894*ae771770SStanislav Sedov      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1895*ae771770SStanislav Sedov    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1896*ae771770SStanislav Sedov  fi
1897*ae771770SStanislav Sedov}
1898*ae771770SStanislav Sedov# end func_convert_path_nix_to_w32
1899*ae771770SStanislav Sedov
1900*ae771770SStanislav Sedov
1901*ae771770SStanislav Sedov# func_convert_path_msys_to_cygwin ARG
1902*ae771770SStanislav Sedov# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
1903*ae771770SStanislav Sedov# Returns result in func_to_host_file_result.
1904*ae771770SStanislav Sedovfunc_convert_path_msys_to_cygwin ()
1905*ae771770SStanislav Sedov{
1906*ae771770SStanislav Sedov  $opt_debug
1907*ae771770SStanislav Sedov  func_to_host_path_result="$1"
1908*ae771770SStanislav Sedov  if test -n "$1"; then
1909*ae771770SStanislav Sedov    # See func_convert_path_msys_to_w32:
1910*ae771770SStanislav Sedov    func_stripname : : "$1"
1911*ae771770SStanislav Sedov    func_to_host_path_tmp1=$func_stripname_result
1912*ae771770SStanislav Sedov    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
1913*ae771770SStanislav Sedov    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
1914*ae771770SStanislav Sedov    func_to_host_path_result="$func_cygpath_result"
1915*ae771770SStanislav Sedov    func_convert_path_check : : \
1916*ae771770SStanislav Sedov      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1917*ae771770SStanislav Sedov    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
1918*ae771770SStanislav Sedov  fi
1919*ae771770SStanislav Sedov}
1920*ae771770SStanislav Sedov# end func_convert_path_msys_to_cygwin
1921*ae771770SStanislav Sedov
1922*ae771770SStanislav Sedov
1923*ae771770SStanislav Sedov# func_convert_path_nix_to_cygwin ARG
1924*ae771770SStanislav Sedov# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
1925*ae771770SStanislav Sedov# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
1926*ae771770SStanislav Sedov# func_to_host_file_result.
1927*ae771770SStanislav Sedovfunc_convert_path_nix_to_cygwin ()
1928*ae771770SStanislav Sedov{
1929*ae771770SStanislav Sedov  $opt_debug
1930*ae771770SStanislav Sedov  func_to_host_path_result="$1"
1931*ae771770SStanislav Sedov  if test -n "$1"; then
1932*ae771770SStanislav Sedov    # Remove leading and trailing path separator characters from
1933*ae771770SStanislav Sedov    # ARG. msys behavior is inconsistent here, cygpath turns them
1934*ae771770SStanislav Sedov    # into '.;' and ';.', and winepath ignores them completely.
1935*ae771770SStanislav Sedov    func_stripname : : "$1"
1936*ae771770SStanislav Sedov    func_to_host_path_tmp1=$func_stripname_result
1937*ae771770SStanislav Sedov    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
1938*ae771770SStanislav Sedov    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
1939*ae771770SStanislav Sedov    func_to_host_path_result="$func_cygpath_result"
1940*ae771770SStanislav Sedov    func_convert_path_check : : \
1941*ae771770SStanislav Sedov      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1942*ae771770SStanislav Sedov    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
1943*ae771770SStanislav Sedov  fi
1944*ae771770SStanislav Sedov}
1945*ae771770SStanislav Sedov# end func_convert_path_nix_to_cygwin
1946*ae771770SStanislav Sedov
1947*ae771770SStanislav Sedov
1948*ae771770SStanislav Sedov# func_mode_compile arg...
1949*ae771770SStanislav Sedovfunc_mode_compile ()
1950*ae771770SStanislav Sedov{
1951*ae771770SStanislav Sedov    $opt_debug
1952b528cefcSMark Murray    # Get the compilation command and the source file.
1953b528cefcSMark Murray    base_compile=
19541c43270aSJacques Vidrine    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
19551c43270aSJacques Vidrine    suppress_opt=yes
1956b528cefcSMark Murray    suppress_output=
19571c43270aSJacques Vidrine    arg_mode=normal
19581c43270aSJacques Vidrine    libobj=
19591c43270aSJacques Vidrine    later=
1960*ae771770SStanislav Sedov    pie_flag=
1961b528cefcSMark Murray
1962b528cefcSMark Murray    for arg
1963b528cefcSMark Murray    do
1964c19800e8SDoug Rabson      case $arg_mode in
19651c43270aSJacques Vidrine      arg  )
19661c43270aSJacques Vidrine	# do not "continue".  Instead, add this to base_compile
19671c43270aSJacques Vidrine	lastarg="$arg"
19681c43270aSJacques Vidrine	arg_mode=normal
19695e9cd1aeSAssar Westerlund	;;
19705e9cd1aeSAssar Westerlund
19711c43270aSJacques Vidrine      target )
19721c43270aSJacques Vidrine	libobj="$arg"
19731c43270aSJacques Vidrine	arg_mode=normal
19745e9cd1aeSAssar Westerlund	continue
19755e9cd1aeSAssar Westerlund	;;
19765e9cd1aeSAssar Westerlund
19771c43270aSJacques Vidrine      normal )
1978b528cefcSMark Murray	# Accept any command-line options.
19794137ff4cSJacques Vidrine	case $arg in
1980b528cefcSMark Murray	-o)
1981*ae771770SStanislav Sedov	  test -n "$libobj" && \
1982*ae771770SStanislav Sedov	    func_fatal_error "you cannot specify \`-o' more than once"
19831c43270aSJacques Vidrine	  arg_mode=target
1984b528cefcSMark Murray	  continue
1985b528cefcSMark Murray	  ;;
1986b528cefcSMark Murray
1987*ae771770SStanislav Sedov	-pie | -fpie | -fPIE)
1988*ae771770SStanislav Sedov          func_append pie_flag " $arg"
1989*ae771770SStanislav Sedov	  continue
1990*ae771770SStanislav Sedov	  ;;
1991*ae771770SStanislav Sedov
1992*ae771770SStanislav Sedov	-shared | -static | -prefer-pic | -prefer-non-pic)
1993*ae771770SStanislav Sedov	  func_append later " $arg"
19945e9cd1aeSAssar Westerlund	  continue
19955e9cd1aeSAssar Westerlund	  ;;
19965e9cd1aeSAssar Westerlund
19971c43270aSJacques Vidrine	-no-suppress)
19981c43270aSJacques Vidrine	  suppress_opt=no
19995e9cd1aeSAssar Westerlund	  continue
20005e9cd1aeSAssar Westerlund	  ;;
20015e9cd1aeSAssar Westerlund
20025e9cd1aeSAssar Westerlund	-Xcompiler)
20031c43270aSJacques Vidrine	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
20041c43270aSJacques Vidrine	  continue      #  The current "srcfile" will either be retained or
20051c43270aSJacques Vidrine	  ;;            #  replaced later.  I would guess that would be a bug.
20065e9cd1aeSAssar Westerlund
20075e9cd1aeSAssar Westerlund	-Wc,*)
2008*ae771770SStanislav Sedov	  func_stripname '-Wc,' '' "$arg"
2009*ae771770SStanislav Sedov	  args=$func_stripname_result
20105e9cd1aeSAssar Westerlund	  lastarg=
20118373020dSJacques Vidrine	  save_ifs="$IFS"; IFS=','
20125e9cd1aeSAssar Westerlund	  for arg in $args; do
20135e9cd1aeSAssar Westerlund	    IFS="$save_ifs"
2014*ae771770SStanislav Sedov	    func_append_quoted lastarg "$arg"
20155e9cd1aeSAssar Westerlund	  done
20165e9cd1aeSAssar Westerlund	  IFS="$save_ifs"
2017*ae771770SStanislav Sedov	  func_stripname ' ' '' "$lastarg"
2018*ae771770SStanislav Sedov	  lastarg=$func_stripname_result
20195e9cd1aeSAssar Westerlund
20205e9cd1aeSAssar Westerlund	  # Add the arguments to base_compile.
2021*ae771770SStanislav Sedov	  func_append base_compile " $lastarg"
2022b528cefcSMark Murray	  continue
2023b528cefcSMark Murray	  ;;
2024b528cefcSMark Murray
20251c43270aSJacques Vidrine	*)
2026b528cefcSMark Murray	  # Accept the current argument as the source file.
20271c43270aSJacques Vidrine	  # The previous "srcfile" becomes the current argument.
20281c43270aSJacques Vidrine	  #
2029b528cefcSMark Murray	  lastarg="$srcfile"
2030b528cefcSMark Murray	  srcfile="$arg"
20311c43270aSJacques Vidrine	  ;;
20321c43270aSJacques Vidrine	esac  #  case $arg
20331c43270aSJacques Vidrine	;;
20341c43270aSJacques Vidrine      esac    #  case $arg_mode
2035b528cefcSMark Murray
2036b528cefcSMark Murray      # Aesthetically quote the previous argument.
2037*ae771770SStanislav Sedov      func_append_quoted base_compile "$lastarg"
20381c43270aSJacques Vidrine    done # for arg
2039b528cefcSMark Murray
20401c43270aSJacques Vidrine    case $arg_mode in
20411c43270aSJacques Vidrine    arg)
2042*ae771770SStanislav Sedov      func_fatal_error "you must specify an argument for -Xcompile"
2043b528cefcSMark Murray      ;;
20441c43270aSJacques Vidrine    target)
2045*ae771770SStanislav Sedov      func_fatal_error "you must specify a target with \`-o'"
2046b528cefcSMark Murray      ;;
20471c43270aSJacques Vidrine    *)
20481c43270aSJacques Vidrine      # Get the name of the library object.
2049*ae771770SStanislav Sedov      test -z "$libobj" && {
2050*ae771770SStanislav Sedov	func_basename "$srcfile"
2051*ae771770SStanislav Sedov	libobj="$func_basename_result"
2052*ae771770SStanislav Sedov      }
20531c43270aSJacques Vidrine      ;;
2054b528cefcSMark Murray    esac
2055b528cefcSMark Murray
2056b528cefcSMark Murray    # Recognize several different file suffixes.
2057b528cefcSMark Murray    # If the user specifies -o file.o, it is replaced with file.lo
20584137ff4cSJacques Vidrine    case $libobj in
2059*ae771770SStanislav Sedov    *.[cCFSifmso] | \
2060*ae771770SStanislav Sedov    *.ada | *.adb | *.ads | *.asm | \
2061*ae771770SStanislav Sedov    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
2062*ae771770SStanislav Sedov    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
2063*ae771770SStanislav Sedov      func_xform "$libobj"
2064*ae771770SStanislav Sedov      libobj=$func_xform_result
2065*ae771770SStanislav Sedov      ;;
2066b528cefcSMark Murray    esac
2067b528cefcSMark Murray
20684137ff4cSJacques Vidrine    case $libobj in
2069*ae771770SStanislav Sedov    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
2070b528cefcSMark Murray    *)
2071*ae771770SStanislav Sedov      func_fatal_error "cannot determine name of library object from \`$libobj'"
2072b528cefcSMark Murray      ;;
2073b528cefcSMark Murray    esac
2074b528cefcSMark Murray
2075c19800e8SDoug Rabson    func_infer_tag $base_compile
20761c43270aSJacques Vidrine
20771c43270aSJacques Vidrine    for arg in $later; do
20781c43270aSJacques Vidrine      case $arg in
2079*ae771770SStanislav Sedov      -shared)
2080*ae771770SStanislav Sedov	test "$build_libtool_libs" != yes && \
2081*ae771770SStanislav Sedov	  func_fatal_configuration "can not build a shared library"
2082*ae771770SStanislav Sedov	build_old_libs=no
2083*ae771770SStanislav Sedov	continue
2084*ae771770SStanislav Sedov	;;
2085*ae771770SStanislav Sedov
20861c43270aSJacques Vidrine      -static)
2087*ae771770SStanislav Sedov	build_libtool_libs=no
20881c43270aSJacques Vidrine	build_old_libs=yes
20891c43270aSJacques Vidrine	continue
20901c43270aSJacques Vidrine	;;
20911c43270aSJacques Vidrine
20921c43270aSJacques Vidrine      -prefer-pic)
20931c43270aSJacques Vidrine	pic_mode=yes
20941c43270aSJacques Vidrine	continue
20951c43270aSJacques Vidrine	;;
20961c43270aSJacques Vidrine
20971c43270aSJacques Vidrine      -prefer-non-pic)
20981c43270aSJacques Vidrine	pic_mode=no
20991c43270aSJacques Vidrine	continue
21001c43270aSJacques Vidrine	;;
21011c43270aSJacques Vidrine      esac
21021c43270aSJacques Vidrine    done
21031c43270aSJacques Vidrine
2104*ae771770SStanislav Sedov    func_quote_for_eval "$libobj"
2105*ae771770SStanislav Sedov    test "X$libobj" != "X$func_quote_for_eval_result" \
2106*ae771770SStanislav Sedov      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
2107*ae771770SStanislav Sedov      && func_warning "libobj name \`$libobj' may not contain shell special characters."
2108*ae771770SStanislav Sedov    func_dirname_and_basename "$obj" "/" ""
2109*ae771770SStanislav Sedov    objname="$func_basename_result"
2110*ae771770SStanislav Sedov    xdir="$func_dirname_result"
21111c43270aSJacques Vidrine    lobj=${xdir}$objdir/$objname
21121c43270aSJacques Vidrine
2113*ae771770SStanislav Sedov    test -z "$base_compile" && \
2114*ae771770SStanislav Sedov      func_fatal_help "you must specify a compilation command"
2115b528cefcSMark Murray
2116b528cefcSMark Murray    # Delete any leftover library objects.
2117b528cefcSMark Murray    if test "$build_old_libs" = yes; then
21181c43270aSJacques Vidrine      removelist="$obj $lobj $libobj ${libobj}T"
2119b528cefcSMark Murray    else
21201c43270aSJacques Vidrine      removelist="$lobj $libobj ${libobj}T"
2121b528cefcSMark Murray    fi
2122b528cefcSMark Murray
21235e9cd1aeSAssar Westerlund    # On Cygwin there's no "real" PIC flag so we must build both object types
21244137ff4cSJacques Vidrine    case $host_os in
2125*ae771770SStanislav Sedov    cygwin* | mingw* | pw32* | os2* | cegcc*)
21265e9cd1aeSAssar Westerlund      pic_mode=default
21275e9cd1aeSAssar Westerlund      ;;
21285e9cd1aeSAssar Westerlund    esac
21291c43270aSJacques Vidrine    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
21305e9cd1aeSAssar Westerlund      # non-PIC code in shared libraries is not supported
21315e9cd1aeSAssar Westerlund      pic_mode=default
21325e9cd1aeSAssar Westerlund    fi
21335e9cd1aeSAssar Westerlund
2134b528cefcSMark Murray    # Calculate the filename of the output object if compiler does
2135b528cefcSMark Murray    # not support -o with -c
2136b528cefcSMark Murray    if test "$compiler_c_o" = no; then
2137*ae771770SStanislav Sedov      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
2138b528cefcSMark Murray      lockfile="$output_obj.lock"
2139b528cefcSMark Murray    else
21401c43270aSJacques Vidrine      output_obj=
2141b528cefcSMark Murray      need_locks=no
2142b528cefcSMark Murray      lockfile=
2143b528cefcSMark Murray    fi
2144b528cefcSMark Murray
2145b528cefcSMark Murray    # Lock this critical section if it is needed
2146b528cefcSMark Murray    # We use this script file to make the link, it avoids creating a new file
2147b528cefcSMark Murray    if test "$need_locks" = yes; then
2148*ae771770SStanislav Sedov      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
2149*ae771770SStanislav Sedov	func_echo "Waiting for $lockfile to be removed"
2150b528cefcSMark Murray	sleep 2
2151b528cefcSMark Murray      done
2152b528cefcSMark Murray    elif test "$need_locks" = warn; then
2153b528cefcSMark Murray      if test -f "$lockfile"; then
2154*ae771770SStanislav Sedov	$ECHO "\
2155b528cefcSMark Murray*** ERROR, $lockfile exists and contains:
2156b528cefcSMark Murray`cat $lockfile 2>/dev/null`
2157b528cefcSMark Murray
2158b528cefcSMark MurrayThis indicates that another process is trying to use the same
2159b528cefcSMark Murraytemporary object file, and libtool could not work around it because
2160b528cefcSMark Murrayyour compiler does not support \`-c' and \`-o' together.  If you
2161b528cefcSMark Murrayrepeat this compilation, it may succeed, by chance, but you had better
2162b528cefcSMark Murrayavoid parallel builds (make -j) in this platform, or get a better
2163b528cefcSMark Murraycompiler."
2164b528cefcSMark Murray
2165*ae771770SStanislav Sedov	$opt_dry_run || $RM $removelist
2166c19800e8SDoug Rabson	exit $EXIT_FAILURE
2167b528cefcSMark Murray      fi
2168*ae771770SStanislav Sedov      func_append removelist " $output_obj"
2169*ae771770SStanislav Sedov      $ECHO "$srcfile" > "$lockfile"
2170b528cefcSMark Murray    fi
2171b528cefcSMark Murray
2172*ae771770SStanislav Sedov    $opt_dry_run || $RM $removelist
2173*ae771770SStanislav Sedov    func_append removelist " $lockfile"
2174*ae771770SStanislav Sedov    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
2175b528cefcSMark Murray
2176*ae771770SStanislav Sedov    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
2177*ae771770SStanislav Sedov    srcfile=$func_to_tool_file_result
2178*ae771770SStanislav Sedov    func_quote_for_eval "$srcfile"
2179*ae771770SStanislav Sedov    qsrcfile=$func_quote_for_eval_result
21801c43270aSJacques Vidrine
2181b528cefcSMark Murray    # Only build a PIC object if we are building libtool libraries.
2182b528cefcSMark Murray    if test "$build_libtool_libs" = yes; then
2183b528cefcSMark Murray      # Without this assignment, base_compile gets emptied.
2184b528cefcSMark Murray      fbsd_hideous_sh_bug=$base_compile
2185b528cefcSMark Murray
21865e9cd1aeSAssar Westerlund      if test "$pic_mode" != no; then
2187c19800e8SDoug Rabson	command="$base_compile $qsrcfile $pic_flag"
21885e9cd1aeSAssar Westerlund      else
21895e9cd1aeSAssar Westerlund	# Don't build PIC code
2190c19800e8SDoug Rabson	command="$base_compile $qsrcfile"
21915e9cd1aeSAssar Westerlund      fi
21925e9cd1aeSAssar Westerlund
2193*ae771770SStanislav Sedov      func_mkdir_p "$xdir$objdir"
21941c43270aSJacques Vidrine
21951c43270aSJacques Vidrine      if test -z "$output_obj"; then
21961c43270aSJacques Vidrine	# Place PIC objects in $objdir
2197*ae771770SStanislav Sedov	func_append command " -o $lobj"
2198b528cefcSMark Murray      fi
2199b528cefcSMark Murray
2200*ae771770SStanislav Sedov      func_show_eval_locale "$command"	\
2201*ae771770SStanislav Sedov          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
2202b528cefcSMark Murray
2203b528cefcSMark Murray      if test "$need_locks" = warn &&
22041c43270aSJacques Vidrine	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2205*ae771770SStanislav Sedov	$ECHO "\
2206b528cefcSMark Murray*** ERROR, $lockfile contains:
2207b528cefcSMark Murray`cat $lockfile 2>/dev/null`
2208b528cefcSMark Murray
2209b528cefcSMark Murraybut it should contain:
2210b528cefcSMark Murray$srcfile
2211b528cefcSMark Murray
2212b528cefcSMark MurrayThis indicates that another process is trying to use the same
2213b528cefcSMark Murraytemporary object file, and libtool could not work around it because
2214b528cefcSMark Murrayyour compiler does not support \`-c' and \`-o' together.  If you
2215b528cefcSMark Murrayrepeat this compilation, it may succeed, by chance, but you had better
2216b528cefcSMark Murrayavoid parallel builds (make -j) in this platform, or get a better
2217b528cefcSMark Murraycompiler."
2218b528cefcSMark Murray
2219*ae771770SStanislav Sedov	$opt_dry_run || $RM $removelist
2220c19800e8SDoug Rabson	exit $EXIT_FAILURE
2221b528cefcSMark Murray      fi
2222b528cefcSMark Murray
2223b528cefcSMark Murray      # Just move the object if needed, then go on to compile the next one
22241c43270aSJacques Vidrine      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
2225*ae771770SStanislav Sedov	func_show_eval '$MV "$output_obj" "$lobj"' \
2226*ae771770SStanislav Sedov	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2227b528cefcSMark Murray      fi
2228b528cefcSMark Murray
2229b528cefcSMark Murray      # Allow error messages only from the first compilation.
22301c43270aSJacques Vidrine      if test "$suppress_opt" = yes; then
2231b528cefcSMark Murray	suppress_output=' >/dev/null 2>&1'
2232b528cefcSMark Murray      fi
22331c43270aSJacques Vidrine    fi
2234b528cefcSMark Murray
2235b528cefcSMark Murray    # Only build a position-dependent object if we build old libraries.
2236b528cefcSMark Murray    if test "$build_old_libs" = yes; then
22375e9cd1aeSAssar Westerlund      if test "$pic_mode" != yes; then
22385e9cd1aeSAssar Westerlund	# Don't build PIC code
2239*ae771770SStanislav Sedov	command="$base_compile $qsrcfile$pie_flag"
22405e9cd1aeSAssar Westerlund      else
2241c19800e8SDoug Rabson	command="$base_compile $qsrcfile $pic_flag"
2242b528cefcSMark Murray      fi
2243b528cefcSMark Murray      if test "$compiler_c_o" = yes; then
2244*ae771770SStanislav Sedov	func_append command " -o $obj"
2245b528cefcSMark Murray      fi
2246b528cefcSMark Murray
2247b528cefcSMark Murray      # Suppress compiler output if we already did a PIC compilation.
2248*ae771770SStanislav Sedov      func_append command "$suppress_output"
2249*ae771770SStanislav Sedov      func_show_eval_locale "$command" \
2250*ae771770SStanislav Sedov        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
2251b528cefcSMark Murray
2252b528cefcSMark Murray      if test "$need_locks" = warn &&
22531c43270aSJacques Vidrine	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2254*ae771770SStanislav Sedov	$ECHO "\
2255b528cefcSMark Murray*** ERROR, $lockfile contains:
2256b528cefcSMark Murray`cat $lockfile 2>/dev/null`
2257b528cefcSMark Murray
2258b528cefcSMark Murraybut it should contain:
2259b528cefcSMark Murray$srcfile
2260b528cefcSMark Murray
2261b528cefcSMark MurrayThis indicates that another process is trying to use the same
2262b528cefcSMark Murraytemporary object file, and libtool could not work around it because
2263b528cefcSMark Murrayyour compiler does not support \`-c' and \`-o' together.  If you
2264b528cefcSMark Murrayrepeat this compilation, it may succeed, by chance, but you had better
2265b528cefcSMark Murrayavoid parallel builds (make -j) in this platform, or get a better
2266b528cefcSMark Murraycompiler."
2267b528cefcSMark Murray
2268*ae771770SStanislav Sedov	$opt_dry_run || $RM $removelist
2269c19800e8SDoug Rabson	exit $EXIT_FAILURE
2270b528cefcSMark Murray      fi
2271b528cefcSMark Murray
2272b528cefcSMark Murray      # Just move the object if needed
22731c43270aSJacques Vidrine      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
2274*ae771770SStanislav Sedov	func_show_eval '$MV "$output_obj" "$obj"' \
2275*ae771770SStanislav Sedov	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2276b528cefcSMark Murray      fi
2277b528cefcSMark Murray    fi
22785e9cd1aeSAssar Westerlund
2279*ae771770SStanislav Sedov    $opt_dry_run || {
2280*ae771770SStanislav Sedov      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
2281b528cefcSMark Murray
2282b528cefcSMark Murray      # Unlock the critical section if it was locked
2283b528cefcSMark Murray      if test "$need_locks" != no; then
2284*ae771770SStanislav Sedov	removelist=$lockfile
2285*ae771770SStanislav Sedov        $RM "$lockfile"
2286*ae771770SStanislav Sedov      fi
2287*ae771770SStanislav Sedov    }
2288*ae771770SStanislav Sedov
2289*ae771770SStanislav Sedov    exit $EXIT_SUCCESS
2290*ae771770SStanislav Sedov}
2291*ae771770SStanislav Sedov
2292*ae771770SStanislav Sedov$opt_help || {
2293*ae771770SStanislav Sedov  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
2294*ae771770SStanislav Sedov}
2295*ae771770SStanislav Sedov
2296*ae771770SStanislav Sedovfunc_mode_help ()
2297*ae771770SStanislav Sedov{
2298*ae771770SStanislav Sedov    # We need to display help for each of the modes.
2299*ae771770SStanislav Sedov    case $opt_mode in
2300*ae771770SStanislav Sedov      "")
2301*ae771770SStanislav Sedov        # Generic help is extracted from the usage comments
2302*ae771770SStanislav Sedov        # at the start of this file.
2303*ae771770SStanislav Sedov        func_help
2304*ae771770SStanislav Sedov        ;;
2305*ae771770SStanislav Sedov
2306*ae771770SStanislav Sedov      clean)
2307*ae771770SStanislav Sedov        $ECHO \
2308*ae771770SStanislav Sedov"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
2309*ae771770SStanislav Sedov
2310*ae771770SStanislav SedovRemove files from the build directory.
2311*ae771770SStanislav Sedov
2312*ae771770SStanislav SedovRM is the name of the program to use to delete files associated with each FILE
2313*ae771770SStanislav Sedov(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2314*ae771770SStanislav Sedovto RM.
2315*ae771770SStanislav Sedov
2316*ae771770SStanislav SedovIf FILE is a libtool library, object or program, all the files associated
2317*ae771770SStanislav Sedovwith it are deleted. Otherwise, only FILE itself is deleted using RM."
2318*ae771770SStanislav Sedov        ;;
2319*ae771770SStanislav Sedov
2320*ae771770SStanislav Sedov      compile)
2321*ae771770SStanislav Sedov      $ECHO \
2322*ae771770SStanislav Sedov"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
2323*ae771770SStanislav Sedov
2324*ae771770SStanislav SedovCompile a source file into a libtool library object.
2325*ae771770SStanislav Sedov
2326*ae771770SStanislav SedovThis mode accepts the following additional options:
2327*ae771770SStanislav Sedov
2328*ae771770SStanislav Sedov  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
2329*ae771770SStanislav Sedov  -no-suppress      do not suppress compiler output for multiple passes
2330*ae771770SStanislav Sedov  -prefer-pic       try to build PIC objects only
2331*ae771770SStanislav Sedov  -prefer-non-pic   try to build non-PIC objects only
2332*ae771770SStanislav Sedov  -shared           do not build a \`.o' file suitable for static linking
2333*ae771770SStanislav Sedov  -static           only build a \`.o' file suitable for static linking
2334*ae771770SStanislav Sedov  -Wc,FLAG          pass FLAG directly to the compiler
2335*ae771770SStanislav Sedov
2336*ae771770SStanislav SedovCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
2337*ae771770SStanislav Sedovfrom the given SOURCEFILE.
2338*ae771770SStanislav Sedov
2339*ae771770SStanislav SedovThe output file name is determined by removing the directory component from
2340*ae771770SStanislav SedovSOURCEFILE, then substituting the C source code suffix \`.c' with the
2341*ae771770SStanislav Sedovlibrary object suffix, \`.lo'."
2342*ae771770SStanislav Sedov        ;;
2343*ae771770SStanislav Sedov
2344*ae771770SStanislav Sedov      execute)
2345*ae771770SStanislav Sedov        $ECHO \
2346*ae771770SStanislav Sedov"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
2347*ae771770SStanislav Sedov
2348*ae771770SStanislav SedovAutomatically set library path, then run a program.
2349*ae771770SStanislav Sedov
2350*ae771770SStanislav SedovThis mode accepts the following additional options:
2351*ae771770SStanislav Sedov
2352*ae771770SStanislav Sedov  -dlopen FILE      add the directory containing FILE to the library path
2353*ae771770SStanislav Sedov
2354*ae771770SStanislav SedovThis mode sets the library path environment variable according to \`-dlopen'
2355*ae771770SStanislav Sedovflags.
2356*ae771770SStanislav Sedov
2357*ae771770SStanislav SedovIf any of the ARGS are libtool executable wrappers, then they are translated
2358*ae771770SStanislav Sedovinto their corresponding uninstalled binary, and any of their required library
2359*ae771770SStanislav Sedovdirectories are added to the library path.
2360*ae771770SStanislav Sedov
2361*ae771770SStanislav SedovThen, COMMAND is executed, with ARGS as arguments."
2362*ae771770SStanislav Sedov        ;;
2363*ae771770SStanislav Sedov
2364*ae771770SStanislav Sedov      finish)
2365*ae771770SStanislav Sedov        $ECHO \
2366*ae771770SStanislav Sedov"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
2367*ae771770SStanislav Sedov
2368*ae771770SStanislav SedovComplete the installation of libtool libraries.
2369*ae771770SStanislav Sedov
2370*ae771770SStanislav SedovEach LIBDIR is a directory that contains libtool libraries.
2371*ae771770SStanislav Sedov
2372*ae771770SStanislav SedovThe commands that this mode executes may require superuser privileges.  Use
2373*ae771770SStanislav Sedovthe \`--dry-run' option if you just want to see what would be executed."
2374*ae771770SStanislav Sedov        ;;
2375*ae771770SStanislav Sedov
2376*ae771770SStanislav Sedov      install)
2377*ae771770SStanislav Sedov        $ECHO \
2378*ae771770SStanislav Sedov"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
2379*ae771770SStanislav Sedov
2380*ae771770SStanislav SedovInstall executables or libraries.
2381*ae771770SStanislav Sedov
2382*ae771770SStanislav SedovINSTALL-COMMAND is the installation command.  The first component should be
2383*ae771770SStanislav Sedoveither the \`install' or \`cp' program.
2384*ae771770SStanislav Sedov
2385*ae771770SStanislav SedovThe following components of INSTALL-COMMAND are treated specially:
2386*ae771770SStanislav Sedov
2387*ae771770SStanislav Sedov  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
2388*ae771770SStanislav Sedov
2389*ae771770SStanislav SedovThe rest of the components are interpreted as arguments to that command (only
2390*ae771770SStanislav SedovBSD-compatible install options are recognized)."
2391*ae771770SStanislav Sedov        ;;
2392*ae771770SStanislav Sedov
2393*ae771770SStanislav Sedov      link)
2394*ae771770SStanislav Sedov        $ECHO \
2395*ae771770SStanislav Sedov"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
2396*ae771770SStanislav Sedov
2397*ae771770SStanislav SedovLink object files or libraries together to form another library, or to
2398*ae771770SStanislav Sedovcreate an executable program.
2399*ae771770SStanislav Sedov
2400*ae771770SStanislav SedovLINK-COMMAND is a command using the C compiler that you would use to create
2401*ae771770SStanislav Sedova program from several object files.
2402*ae771770SStanislav Sedov
2403*ae771770SStanislav SedovThe following components of LINK-COMMAND are treated specially:
2404*ae771770SStanislav Sedov
2405*ae771770SStanislav Sedov  -all-static       do not do any dynamic linking at all
2406*ae771770SStanislav Sedov  -avoid-version    do not add a version suffix if possible
2407*ae771770SStanislav Sedov  -bindir BINDIR    specify path to binaries directory (for systems where
2408*ae771770SStanislav Sedov                    libraries must be found in the PATH setting at runtime)
2409*ae771770SStanislav Sedov  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
2410*ae771770SStanislav Sedov  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
2411*ae771770SStanislav Sedov  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
2412*ae771770SStanislav Sedov  -export-symbols SYMFILE
2413*ae771770SStanislav Sedov                    try to export only the symbols listed in SYMFILE
2414*ae771770SStanislav Sedov  -export-symbols-regex REGEX
2415*ae771770SStanislav Sedov                    try to export only the symbols matching REGEX
2416*ae771770SStanislav Sedov  -LLIBDIR          search LIBDIR for required installed libraries
2417*ae771770SStanislav Sedov  -lNAME            OUTPUT-FILE requires the installed library libNAME
2418*ae771770SStanislav Sedov  -module           build a library that can dlopened
2419*ae771770SStanislav Sedov  -no-fast-install  disable the fast-install mode
2420*ae771770SStanislav Sedov  -no-install       link a not-installable executable
2421*ae771770SStanislav Sedov  -no-undefined     declare that a library does not refer to external symbols
2422*ae771770SStanislav Sedov  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
2423*ae771770SStanislav Sedov  -objectlist FILE  Use a list of object files found in FILE to specify objects
2424*ae771770SStanislav Sedov  -precious-files-regex REGEX
2425*ae771770SStanislav Sedov                    don't remove output files matching REGEX
2426*ae771770SStanislav Sedov  -release RELEASE  specify package release information
2427*ae771770SStanislav Sedov  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
2428*ae771770SStanislav Sedov  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
2429*ae771770SStanislav Sedov  -shared           only do dynamic linking of libtool libraries
2430*ae771770SStanislav Sedov  -shrext SUFFIX    override the standard shared library file extension
2431*ae771770SStanislav Sedov  -static           do not do any dynamic linking of uninstalled libtool libraries
2432*ae771770SStanislav Sedov  -static-libtool-libs
2433*ae771770SStanislav Sedov                    do not do any dynamic linking of libtool libraries
2434*ae771770SStanislav Sedov  -version-info CURRENT[:REVISION[:AGE]]
2435*ae771770SStanislav Sedov                    specify library version info [each variable defaults to 0]
2436*ae771770SStanislav Sedov  -weak LIBNAME     declare that the target provides the LIBNAME interface
2437*ae771770SStanislav Sedov  -Wc,FLAG
2438*ae771770SStanislav Sedov  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
2439*ae771770SStanislav Sedov  -Wl,FLAG
2440*ae771770SStanislav Sedov  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
2441*ae771770SStanislav Sedov  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
2442*ae771770SStanislav Sedov
2443*ae771770SStanislav SedovAll other options (arguments beginning with \`-') are ignored.
2444*ae771770SStanislav Sedov
2445*ae771770SStanislav SedovEvery other argument is treated as a filename.  Files ending in \`.la' are
2446*ae771770SStanislav Sedovtreated as uninstalled libtool libraries, other files are standard or library
2447*ae771770SStanislav Sedovobject files.
2448*ae771770SStanislav Sedov
2449*ae771770SStanislav SedovIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
2450*ae771770SStanislav Sedovonly library objects (\`.lo' files) may be specified, and \`-rpath' is
2451*ae771770SStanislav Sedovrequired, except when creating a convenience library.
2452*ae771770SStanislav Sedov
2453*ae771770SStanislav SedovIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
2454*ae771770SStanislav Sedovusing \`ar' and \`ranlib', or on Windows using \`lib'.
2455*ae771770SStanislav Sedov
2456*ae771770SStanislav SedovIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
2457*ae771770SStanislav Sedovis created, otherwise an executable program is created."
2458*ae771770SStanislav Sedov        ;;
2459*ae771770SStanislav Sedov
2460*ae771770SStanislav Sedov      uninstall)
2461*ae771770SStanislav Sedov        $ECHO \
2462*ae771770SStanislav Sedov"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
2463*ae771770SStanislav Sedov
2464*ae771770SStanislav SedovRemove libraries from an installation directory.
2465*ae771770SStanislav Sedov
2466*ae771770SStanislav SedovRM is the name of the program to use to delete files associated with each FILE
2467*ae771770SStanislav Sedov(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2468*ae771770SStanislav Sedovto RM.
2469*ae771770SStanislav Sedov
2470*ae771770SStanislav SedovIf FILE is a libtool library, all the files associated with it are deleted.
2471*ae771770SStanislav SedovOtherwise, only FILE itself is deleted using RM."
2472*ae771770SStanislav Sedov        ;;
2473*ae771770SStanislav Sedov
2474*ae771770SStanislav Sedov      *)
2475*ae771770SStanislav Sedov        func_fatal_help "invalid operation mode \`$opt_mode'"
2476*ae771770SStanislav Sedov        ;;
2477*ae771770SStanislav Sedov    esac
2478*ae771770SStanislav Sedov
2479*ae771770SStanislav Sedov    echo
2480*ae771770SStanislav Sedov    $ECHO "Try \`$progname --help' for more information about other modes."
2481*ae771770SStanislav Sedov}
2482*ae771770SStanislav Sedov
2483*ae771770SStanislav Sedov# Now that we've collected a possible --mode arg, show help if necessary
2484*ae771770SStanislav Sedovif $opt_help; then
2485*ae771770SStanislav Sedov  if test "$opt_help" = :; then
2486*ae771770SStanislav Sedov    func_mode_help
2487*ae771770SStanislav Sedov  else
2488*ae771770SStanislav Sedov    {
2489*ae771770SStanislav Sedov      func_help noexit
2490*ae771770SStanislav Sedov      for opt_mode in compile link execute install finish uninstall clean; do
2491*ae771770SStanislav Sedov	func_mode_help
2492*ae771770SStanislav Sedov      done
2493*ae771770SStanislav Sedov    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
2494*ae771770SStanislav Sedov    {
2495*ae771770SStanislav Sedov      func_help noexit
2496*ae771770SStanislav Sedov      for opt_mode in compile link execute install finish uninstall clean; do
2497*ae771770SStanislav Sedov	echo
2498*ae771770SStanislav Sedov	func_mode_help
2499*ae771770SStanislav Sedov      done
2500*ae771770SStanislav Sedov    } |
2501*ae771770SStanislav Sedov    sed '1d
2502*ae771770SStanislav Sedov      /^When reporting/,/^Report/{
2503*ae771770SStanislav Sedov	H
2504*ae771770SStanislav Sedov	d
2505*ae771770SStanislav Sedov      }
2506*ae771770SStanislav Sedov      $x
2507*ae771770SStanislav Sedov      /information about other modes/d
2508*ae771770SStanislav Sedov      /more detailed .*MODE/d
2509*ae771770SStanislav Sedov      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
2510*ae771770SStanislav Sedov  fi
2511*ae771770SStanislav Sedov  exit $?
2512b528cefcSMark Murrayfi
2513b528cefcSMark Murray
2514*ae771770SStanislav Sedov
2515*ae771770SStanislav Sedov# func_mode_execute arg...
2516*ae771770SStanislav Sedovfunc_mode_execute ()
2517*ae771770SStanislav Sedov{
2518*ae771770SStanislav Sedov    $opt_debug
2519*ae771770SStanislav Sedov    # The first argument is the command name.
2520*ae771770SStanislav Sedov    cmd="$nonopt"
2521*ae771770SStanislav Sedov    test -z "$cmd" && \
2522*ae771770SStanislav Sedov      func_fatal_help "you must specify a COMMAND"
2523*ae771770SStanislav Sedov
2524*ae771770SStanislav Sedov    # Handle -dlopen flags immediately.
2525*ae771770SStanislav Sedov    for file in $opt_dlopen; do
2526*ae771770SStanislav Sedov      test -f "$file" \
2527*ae771770SStanislav Sedov	|| func_fatal_help "\`$file' is not a file"
2528*ae771770SStanislav Sedov
2529*ae771770SStanislav Sedov      dir=
2530*ae771770SStanislav Sedov      case $file in
2531*ae771770SStanislav Sedov      *.la)
2532*ae771770SStanislav Sedov	func_resolve_sysroot "$file"
2533*ae771770SStanislav Sedov	file=$func_resolve_sysroot_result
2534*ae771770SStanislav Sedov
2535*ae771770SStanislav Sedov	# Check to see that this really is a libtool archive.
2536*ae771770SStanislav Sedov	func_lalib_unsafe_p "$file" \
2537*ae771770SStanislav Sedov	  || func_fatal_help "\`$lib' is not a valid libtool archive"
2538*ae771770SStanislav Sedov
2539*ae771770SStanislav Sedov	# Read the libtool library.
2540*ae771770SStanislav Sedov	dlname=
2541*ae771770SStanislav Sedov	library_names=
2542*ae771770SStanislav Sedov	func_source "$file"
2543*ae771770SStanislav Sedov
2544*ae771770SStanislav Sedov	# Skip this library if it cannot be dlopened.
2545*ae771770SStanislav Sedov	if test -z "$dlname"; then
2546*ae771770SStanislav Sedov	  # Warn if it was a shared library.
2547*ae771770SStanislav Sedov	  test -n "$library_names" && \
2548*ae771770SStanislav Sedov	    func_warning "\`$file' was not linked with \`-export-dynamic'"
2549*ae771770SStanislav Sedov	  continue
2550*ae771770SStanislav Sedov	fi
2551*ae771770SStanislav Sedov
2552*ae771770SStanislav Sedov	func_dirname "$file" "" "."
2553*ae771770SStanislav Sedov	dir="$func_dirname_result"
2554*ae771770SStanislav Sedov
2555*ae771770SStanislav Sedov	if test -f "$dir/$objdir/$dlname"; then
2556*ae771770SStanislav Sedov	  func_append dir "/$objdir"
2557*ae771770SStanislav Sedov	else
2558*ae771770SStanislav Sedov	  if test ! -f "$dir/$dlname"; then
2559*ae771770SStanislav Sedov	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
2560*ae771770SStanislav Sedov	  fi
2561*ae771770SStanislav Sedov	fi
2562*ae771770SStanislav Sedov	;;
2563*ae771770SStanislav Sedov
2564*ae771770SStanislav Sedov      *.lo)
2565*ae771770SStanislav Sedov	# Just add the directory containing the .lo file.
2566*ae771770SStanislav Sedov	func_dirname "$file" "" "."
2567*ae771770SStanislav Sedov	dir="$func_dirname_result"
2568*ae771770SStanislav Sedov	;;
2569*ae771770SStanislav Sedov
2570*ae771770SStanislav Sedov      *)
2571*ae771770SStanislav Sedov	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
2572*ae771770SStanislav Sedov	continue
2573*ae771770SStanislav Sedov	;;
2574*ae771770SStanislav Sedov      esac
2575*ae771770SStanislav Sedov
2576*ae771770SStanislav Sedov      # Get the absolute pathname.
2577*ae771770SStanislav Sedov      absdir=`cd "$dir" && pwd`
2578*ae771770SStanislav Sedov      test -n "$absdir" && dir="$absdir"
2579*ae771770SStanislav Sedov
2580*ae771770SStanislav Sedov      # Now add the directory to shlibpath_var.
2581*ae771770SStanislav Sedov      if eval "test -z \"\$$shlibpath_var\""; then
2582*ae771770SStanislav Sedov	eval "$shlibpath_var=\"\$dir\""
2583*ae771770SStanislav Sedov      else
2584*ae771770SStanislav Sedov	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
2585*ae771770SStanislav Sedov      fi
2586*ae771770SStanislav Sedov    done
2587*ae771770SStanislav Sedov
2588*ae771770SStanislav Sedov    # This variable tells wrapper scripts just to set shlibpath_var
2589*ae771770SStanislav Sedov    # rather than running their programs.
2590*ae771770SStanislav Sedov    libtool_execute_magic="$magic"
2591*ae771770SStanislav Sedov
2592*ae771770SStanislav Sedov    # Check if any of the arguments is a wrapper script.
2593*ae771770SStanislav Sedov    args=
2594*ae771770SStanislav Sedov    for file
2595*ae771770SStanislav Sedov    do
2596*ae771770SStanislav Sedov      case $file in
2597*ae771770SStanislav Sedov      -* | *.la | *.lo ) ;;
2598*ae771770SStanislav Sedov      *)
2599*ae771770SStanislav Sedov	# Do a test to see if this is really a libtool program.
2600*ae771770SStanislav Sedov	if func_ltwrapper_script_p "$file"; then
2601*ae771770SStanislav Sedov	  func_source "$file"
2602*ae771770SStanislav Sedov	  # Transform arg to wrapped name.
2603*ae771770SStanislav Sedov	  file="$progdir/$program"
2604*ae771770SStanislav Sedov	elif func_ltwrapper_executable_p "$file"; then
2605*ae771770SStanislav Sedov	  func_ltwrapper_scriptname "$file"
2606*ae771770SStanislav Sedov	  func_source "$func_ltwrapper_scriptname_result"
2607*ae771770SStanislav Sedov	  # Transform arg to wrapped name.
2608*ae771770SStanislav Sedov	  file="$progdir/$program"
2609*ae771770SStanislav Sedov	fi
2610*ae771770SStanislav Sedov	;;
2611*ae771770SStanislav Sedov      esac
2612*ae771770SStanislav Sedov      # Quote arguments (to preserve shell metacharacters).
2613*ae771770SStanislav Sedov      func_append_quoted args "$file"
2614*ae771770SStanislav Sedov    done
2615*ae771770SStanislav Sedov
2616*ae771770SStanislav Sedov    if test "X$opt_dry_run" = Xfalse; then
2617*ae771770SStanislav Sedov      if test -n "$shlibpath_var"; then
2618*ae771770SStanislav Sedov	# Export the shlibpath_var.
2619*ae771770SStanislav Sedov	eval "export $shlibpath_var"
2620*ae771770SStanislav Sedov      fi
2621*ae771770SStanislav Sedov
2622*ae771770SStanislav Sedov      # Restore saved environment variables
2623*ae771770SStanislav Sedov      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
2624*ae771770SStanislav Sedov      do
2625*ae771770SStanislav Sedov	eval "if test \"\${save_$lt_var+set}\" = set; then
2626*ae771770SStanislav Sedov                $lt_var=\$save_$lt_var; export $lt_var
2627*ae771770SStanislav Sedov	      else
2628*ae771770SStanislav Sedov		$lt_unset $lt_var
2629*ae771770SStanislav Sedov	      fi"
2630*ae771770SStanislav Sedov      done
2631*ae771770SStanislav Sedov
2632*ae771770SStanislav Sedov      # Now prepare to actually exec the command.
2633*ae771770SStanislav Sedov      exec_cmd="\$cmd$args"
2634*ae771770SStanislav Sedov    else
2635*ae771770SStanislav Sedov      # Display what would be done.
2636*ae771770SStanislav Sedov      if test -n "$shlibpath_var"; then
2637*ae771770SStanislav Sedov	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
2638*ae771770SStanislav Sedov	echo "export $shlibpath_var"
2639*ae771770SStanislav Sedov      fi
2640*ae771770SStanislav Sedov      $ECHO "$cmd$args"
2641*ae771770SStanislav Sedov      exit $EXIT_SUCCESS
2642*ae771770SStanislav Sedov    fi
2643*ae771770SStanislav Sedov}
2644*ae771770SStanislav Sedov
2645*ae771770SStanislav Sedovtest "$opt_mode" = execute && func_mode_execute ${1+"$@"}
2646*ae771770SStanislav Sedov
2647*ae771770SStanislav Sedov
2648*ae771770SStanislav Sedov# func_mode_finish arg...
2649*ae771770SStanislav Sedovfunc_mode_finish ()
2650*ae771770SStanislav Sedov{
2651*ae771770SStanislav Sedov    $opt_debug
2652*ae771770SStanislav Sedov    libs=
2653*ae771770SStanislav Sedov    libdirs=
2654*ae771770SStanislav Sedov    admincmds=
2655*ae771770SStanislav Sedov
2656*ae771770SStanislav Sedov    for opt in "$nonopt" ${1+"$@"}
2657*ae771770SStanislav Sedov    do
2658*ae771770SStanislav Sedov      if test -d "$opt"; then
2659*ae771770SStanislav Sedov	func_append libdirs " $opt"
2660*ae771770SStanislav Sedov
2661*ae771770SStanislav Sedov      elif test -f "$opt"; then
2662*ae771770SStanislav Sedov	if func_lalib_unsafe_p "$opt"; then
2663*ae771770SStanislav Sedov	  func_append libs " $opt"
2664*ae771770SStanislav Sedov	else
2665*ae771770SStanislav Sedov	  func_warning "\`$opt' is not a valid libtool archive"
2666*ae771770SStanislav Sedov	fi
2667*ae771770SStanislav Sedov
2668*ae771770SStanislav Sedov      else
2669*ae771770SStanislav Sedov	func_fatal_error "invalid argument \`$opt'"
2670*ae771770SStanislav Sedov      fi
2671*ae771770SStanislav Sedov    done
2672*ae771770SStanislav Sedov
2673*ae771770SStanislav Sedov    if test -n "$libs"; then
2674*ae771770SStanislav Sedov      if test -n "$lt_sysroot"; then
2675*ae771770SStanislav Sedov        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
2676*ae771770SStanislav Sedov        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
2677*ae771770SStanislav Sedov      else
2678*ae771770SStanislav Sedov        sysroot_cmd=
2679*ae771770SStanislav Sedov      fi
2680*ae771770SStanislav Sedov
2681*ae771770SStanislav Sedov      # Remove sysroot references
2682*ae771770SStanislav Sedov      if $opt_dry_run; then
2683*ae771770SStanislav Sedov        for lib in $libs; do
2684*ae771770SStanislav Sedov          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
2685*ae771770SStanislav Sedov        done
2686*ae771770SStanislav Sedov      else
2687*ae771770SStanislav Sedov        tmpdir=`func_mktempdir`
2688*ae771770SStanislav Sedov        for lib in $libs; do
2689*ae771770SStanislav Sedov	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
2690*ae771770SStanislav Sedov	    > $tmpdir/tmp-la
2691*ae771770SStanislav Sedov	  mv -f $tmpdir/tmp-la $lib
2692*ae771770SStanislav Sedov	done
2693*ae771770SStanislav Sedov        ${RM}r "$tmpdir"
2694*ae771770SStanislav Sedov      fi
2695*ae771770SStanislav Sedov    fi
2696*ae771770SStanislav Sedov
2697*ae771770SStanislav Sedov    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2698*ae771770SStanislav Sedov      for libdir in $libdirs; do
2699*ae771770SStanislav Sedov	if test -n "$finish_cmds"; then
2700*ae771770SStanislav Sedov	  # Do each command in the finish commands.
2701*ae771770SStanislav Sedov	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
2702*ae771770SStanislav Sedov'"$cmd"'"'
2703*ae771770SStanislav Sedov	fi
2704*ae771770SStanislav Sedov	if test -n "$finish_eval"; then
2705*ae771770SStanislav Sedov	  # Do the single finish_eval.
2706*ae771770SStanislav Sedov	  eval cmds=\"$finish_eval\"
2707*ae771770SStanislav Sedov	  $opt_dry_run || eval "$cmds" || func_append admincmds "
2708*ae771770SStanislav Sedov       $cmds"
2709*ae771770SStanislav Sedov	fi
2710*ae771770SStanislav Sedov      done
2711*ae771770SStanislav Sedov    fi
2712*ae771770SStanislav Sedov
2713*ae771770SStanislav Sedov    # Exit here if they wanted silent mode.
2714*ae771770SStanislav Sedov    $opt_silent && exit $EXIT_SUCCESS
2715*ae771770SStanislav Sedov
2716*ae771770SStanislav Sedov    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2717*ae771770SStanislav Sedov      echo "----------------------------------------------------------------------"
2718*ae771770SStanislav Sedov      echo "Libraries have been installed in:"
2719*ae771770SStanislav Sedov      for libdir in $libdirs; do
2720*ae771770SStanislav Sedov	$ECHO "   $libdir"
2721*ae771770SStanislav Sedov      done
2722*ae771770SStanislav Sedov      echo
2723*ae771770SStanislav Sedov      echo "If you ever happen to want to link against installed libraries"
2724*ae771770SStanislav Sedov      echo "in a given directory, LIBDIR, you must either use libtool, and"
2725*ae771770SStanislav Sedov      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
2726*ae771770SStanislav Sedov      echo "flag during linking and do at least one of the following:"
2727*ae771770SStanislav Sedov      if test -n "$shlibpath_var"; then
2728*ae771770SStanislav Sedov	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
2729*ae771770SStanislav Sedov	echo "     during execution"
2730*ae771770SStanislav Sedov      fi
2731*ae771770SStanislav Sedov      if test -n "$runpath_var"; then
2732*ae771770SStanislav Sedov	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
2733*ae771770SStanislav Sedov	echo "     during linking"
2734*ae771770SStanislav Sedov      fi
2735*ae771770SStanislav Sedov      if test -n "$hardcode_libdir_flag_spec"; then
2736*ae771770SStanislav Sedov	libdir=LIBDIR
2737*ae771770SStanislav Sedov	eval flag=\"$hardcode_libdir_flag_spec\"
2738*ae771770SStanislav Sedov
2739*ae771770SStanislav Sedov	$ECHO "   - use the \`$flag' linker flag"
2740*ae771770SStanislav Sedov      fi
2741*ae771770SStanislav Sedov      if test -n "$admincmds"; then
2742*ae771770SStanislav Sedov	$ECHO "   - have your system administrator run these commands:$admincmds"
2743*ae771770SStanislav Sedov      fi
2744*ae771770SStanislav Sedov      if test -f /etc/ld.so.conf; then
2745*ae771770SStanislav Sedov	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
2746*ae771770SStanislav Sedov      fi
2747*ae771770SStanislav Sedov      echo
2748*ae771770SStanislav Sedov
2749*ae771770SStanislav Sedov      echo "See any operating system documentation about shared libraries for"
2750*ae771770SStanislav Sedov      case $host in
2751*ae771770SStanislav Sedov	solaris2.[6789]|solaris2.1[0-9])
2752*ae771770SStanislav Sedov	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
2753*ae771770SStanislav Sedov	  echo "pages."
2754*ae771770SStanislav Sedov	  ;;
2755*ae771770SStanislav Sedov	*)
2756*ae771770SStanislav Sedov	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
2757*ae771770SStanislav Sedov	  ;;
2758*ae771770SStanislav Sedov      esac
2759*ae771770SStanislav Sedov      echo "----------------------------------------------------------------------"
2760*ae771770SStanislav Sedov    fi
2761*ae771770SStanislav Sedov    exit $EXIT_SUCCESS
2762*ae771770SStanislav Sedov}
2763*ae771770SStanislav Sedov
2764*ae771770SStanislav Sedovtest "$opt_mode" = finish && func_mode_finish ${1+"$@"}
2765*ae771770SStanislav Sedov
2766*ae771770SStanislav Sedov
2767*ae771770SStanislav Sedov# func_mode_install arg...
2768*ae771770SStanislav Sedovfunc_mode_install ()
2769*ae771770SStanislav Sedov{
2770*ae771770SStanislav Sedov    $opt_debug
2771*ae771770SStanislav Sedov    # There may be an optional sh(1) argument at the beginning of
2772*ae771770SStanislav Sedov    # install_prog (especially on Windows NT).
2773*ae771770SStanislav Sedov    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
2774*ae771770SStanislav Sedov       # Allow the use of GNU shtool's install command.
2775*ae771770SStanislav Sedov       case $nonopt in *shtool*) :;; *) false;; esac; then
2776*ae771770SStanislav Sedov      # Aesthetically quote it.
2777*ae771770SStanislav Sedov      func_quote_for_eval "$nonopt"
2778*ae771770SStanislav Sedov      install_prog="$func_quote_for_eval_result "
2779*ae771770SStanislav Sedov      arg=$1
2780*ae771770SStanislav Sedov      shift
2781*ae771770SStanislav Sedov    else
2782*ae771770SStanislav Sedov      install_prog=
2783*ae771770SStanislav Sedov      arg=$nonopt
2784*ae771770SStanislav Sedov    fi
2785*ae771770SStanislav Sedov
2786*ae771770SStanislav Sedov    # The real first argument should be the name of the installation program.
2787*ae771770SStanislav Sedov    # Aesthetically quote it.
2788*ae771770SStanislav Sedov    func_quote_for_eval "$arg"
2789*ae771770SStanislav Sedov    func_append install_prog "$func_quote_for_eval_result"
2790*ae771770SStanislav Sedov    install_shared_prog=$install_prog
2791*ae771770SStanislav Sedov    case " $install_prog " in
2792*ae771770SStanislav Sedov      *[\\\ /]cp\ *) install_cp=: ;;
2793*ae771770SStanislav Sedov      *) install_cp=false ;;
2794*ae771770SStanislav Sedov    esac
2795*ae771770SStanislav Sedov
2796*ae771770SStanislav Sedov    # We need to accept at least all the BSD install flags.
2797*ae771770SStanislav Sedov    dest=
2798*ae771770SStanislav Sedov    files=
2799*ae771770SStanislav Sedov    opts=
2800*ae771770SStanislav Sedov    prev=
2801*ae771770SStanislav Sedov    install_type=
2802*ae771770SStanislav Sedov    isdir=no
2803*ae771770SStanislav Sedov    stripme=
2804*ae771770SStanislav Sedov    no_mode=:
2805*ae771770SStanislav Sedov    for arg
2806*ae771770SStanislav Sedov    do
2807*ae771770SStanislav Sedov      arg2=
2808*ae771770SStanislav Sedov      if test -n "$dest"; then
2809*ae771770SStanislav Sedov	func_append files " $dest"
2810*ae771770SStanislav Sedov	dest=$arg
2811*ae771770SStanislav Sedov	continue
2812*ae771770SStanislav Sedov      fi
2813*ae771770SStanislav Sedov
2814*ae771770SStanislav Sedov      case $arg in
2815*ae771770SStanislav Sedov      -d) isdir=yes ;;
2816*ae771770SStanislav Sedov      -f)
2817*ae771770SStanislav Sedov	if $install_cp; then :; else
2818*ae771770SStanislav Sedov	  prev=$arg
2819*ae771770SStanislav Sedov	fi
2820*ae771770SStanislav Sedov	;;
2821*ae771770SStanislav Sedov      -g | -m | -o)
2822*ae771770SStanislav Sedov	prev=$arg
2823*ae771770SStanislav Sedov	;;
2824*ae771770SStanislav Sedov      -s)
2825*ae771770SStanislav Sedov	stripme=" -s"
2826*ae771770SStanislav Sedov	continue
2827*ae771770SStanislav Sedov	;;
2828*ae771770SStanislav Sedov      -*)
2829*ae771770SStanislav Sedov	;;
2830*ae771770SStanislav Sedov      *)
2831*ae771770SStanislav Sedov	# If the previous option needed an argument, then skip it.
2832*ae771770SStanislav Sedov	if test -n "$prev"; then
2833*ae771770SStanislav Sedov	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
2834*ae771770SStanislav Sedov	    arg2=$install_override_mode
2835*ae771770SStanislav Sedov	    no_mode=false
2836*ae771770SStanislav Sedov	  fi
2837*ae771770SStanislav Sedov	  prev=
2838*ae771770SStanislav Sedov	else
2839*ae771770SStanislav Sedov	  dest=$arg
2840*ae771770SStanislav Sedov	  continue
2841*ae771770SStanislav Sedov	fi
2842*ae771770SStanislav Sedov	;;
2843*ae771770SStanislav Sedov      esac
2844*ae771770SStanislav Sedov
2845*ae771770SStanislav Sedov      # Aesthetically quote the argument.
2846*ae771770SStanislav Sedov      func_quote_for_eval "$arg"
2847*ae771770SStanislav Sedov      func_append install_prog " $func_quote_for_eval_result"
2848*ae771770SStanislav Sedov      if test -n "$arg2"; then
2849*ae771770SStanislav Sedov	func_quote_for_eval "$arg2"
2850*ae771770SStanislav Sedov      fi
2851*ae771770SStanislav Sedov      func_append install_shared_prog " $func_quote_for_eval_result"
2852*ae771770SStanislav Sedov    done
2853*ae771770SStanislav Sedov
2854*ae771770SStanislav Sedov    test -z "$install_prog" && \
2855*ae771770SStanislav Sedov      func_fatal_help "you must specify an install program"
2856*ae771770SStanislav Sedov
2857*ae771770SStanislav Sedov    test -n "$prev" && \
2858*ae771770SStanislav Sedov      func_fatal_help "the \`$prev' option requires an argument"
2859*ae771770SStanislav Sedov
2860*ae771770SStanislav Sedov    if test -n "$install_override_mode" && $no_mode; then
2861*ae771770SStanislav Sedov      if $install_cp; then :; else
2862*ae771770SStanislav Sedov	func_quote_for_eval "$install_override_mode"
2863*ae771770SStanislav Sedov	func_append install_shared_prog " -m $func_quote_for_eval_result"
2864*ae771770SStanislav Sedov      fi
2865*ae771770SStanislav Sedov    fi
2866*ae771770SStanislav Sedov
2867*ae771770SStanislav Sedov    if test -z "$files"; then
2868*ae771770SStanislav Sedov      if test -z "$dest"; then
2869*ae771770SStanislav Sedov	func_fatal_help "no file or destination specified"
2870*ae771770SStanislav Sedov      else
2871*ae771770SStanislav Sedov	func_fatal_help "you must specify a destination"
2872*ae771770SStanislav Sedov      fi
2873*ae771770SStanislav Sedov    fi
2874*ae771770SStanislav Sedov
2875*ae771770SStanislav Sedov    # Strip any trailing slash from the destination.
2876*ae771770SStanislav Sedov    func_stripname '' '/' "$dest"
2877*ae771770SStanislav Sedov    dest=$func_stripname_result
2878*ae771770SStanislav Sedov
2879*ae771770SStanislav Sedov    # Check to see that the destination is a directory.
2880*ae771770SStanislav Sedov    test -d "$dest" && isdir=yes
2881*ae771770SStanislav Sedov    if test "$isdir" = yes; then
2882*ae771770SStanislav Sedov      destdir="$dest"
2883*ae771770SStanislav Sedov      destname=
2884*ae771770SStanislav Sedov    else
2885*ae771770SStanislav Sedov      func_dirname_and_basename "$dest" "" "."
2886*ae771770SStanislav Sedov      destdir="$func_dirname_result"
2887*ae771770SStanislav Sedov      destname="$func_basename_result"
2888*ae771770SStanislav Sedov
2889*ae771770SStanislav Sedov      # Not a directory, so check to see that there is only one file specified.
2890*ae771770SStanislav Sedov      set dummy $files; shift
2891*ae771770SStanislav Sedov      test "$#" -gt 1 && \
2892*ae771770SStanislav Sedov	func_fatal_help "\`$dest' is not a directory"
2893*ae771770SStanislav Sedov    fi
2894*ae771770SStanislav Sedov    case $destdir in
2895*ae771770SStanislav Sedov    [\\/]* | [A-Za-z]:[\\/]*) ;;
2896*ae771770SStanislav Sedov    *)
2897*ae771770SStanislav Sedov      for file in $files; do
2898*ae771770SStanislav Sedov	case $file in
2899*ae771770SStanislav Sedov	*.lo) ;;
2900*ae771770SStanislav Sedov	*)
2901*ae771770SStanislav Sedov	  func_fatal_help "\`$destdir' must be an absolute directory name"
2902*ae771770SStanislav Sedov	  ;;
2903*ae771770SStanislav Sedov	esac
2904*ae771770SStanislav Sedov      done
2905*ae771770SStanislav Sedov      ;;
2906*ae771770SStanislav Sedov    esac
2907*ae771770SStanislav Sedov
2908*ae771770SStanislav Sedov    # This variable tells wrapper scripts just to set variables rather
2909*ae771770SStanislav Sedov    # than running their programs.
2910*ae771770SStanislav Sedov    libtool_install_magic="$magic"
2911*ae771770SStanislav Sedov
2912*ae771770SStanislav Sedov    staticlibs=
2913*ae771770SStanislav Sedov    future_libdirs=
2914*ae771770SStanislav Sedov    current_libdirs=
2915*ae771770SStanislav Sedov    for file in $files; do
2916*ae771770SStanislav Sedov
2917*ae771770SStanislav Sedov      # Do each installation.
2918*ae771770SStanislav Sedov      case $file in
2919*ae771770SStanislav Sedov      *.$libext)
2920*ae771770SStanislav Sedov	# Do the static libraries later.
2921*ae771770SStanislav Sedov	func_append staticlibs " $file"
2922*ae771770SStanislav Sedov	;;
2923*ae771770SStanislav Sedov
2924*ae771770SStanislav Sedov      *.la)
2925*ae771770SStanislav Sedov	func_resolve_sysroot "$file"
2926*ae771770SStanislav Sedov	file=$func_resolve_sysroot_result
2927*ae771770SStanislav Sedov
2928*ae771770SStanislav Sedov	# Check to see that this really is a libtool archive.
2929*ae771770SStanislav Sedov	func_lalib_unsafe_p "$file" \
2930*ae771770SStanislav Sedov	  || func_fatal_help "\`$file' is not a valid libtool archive"
2931*ae771770SStanislav Sedov
2932*ae771770SStanislav Sedov	library_names=
2933*ae771770SStanislav Sedov	old_library=
2934*ae771770SStanislav Sedov	relink_command=
2935*ae771770SStanislav Sedov	func_source "$file"
2936*ae771770SStanislav Sedov
2937*ae771770SStanislav Sedov	# Add the libdir to current_libdirs if it is the destination.
2938*ae771770SStanislav Sedov	if test "X$destdir" = "X$libdir"; then
2939*ae771770SStanislav Sedov	  case "$current_libdirs " in
2940*ae771770SStanislav Sedov	  *" $libdir "*) ;;
2941*ae771770SStanislav Sedov	  *) func_append current_libdirs " $libdir" ;;
2942*ae771770SStanislav Sedov	  esac
2943*ae771770SStanislav Sedov	else
2944*ae771770SStanislav Sedov	  # Note the libdir as a future libdir.
2945*ae771770SStanislav Sedov	  case "$future_libdirs " in
2946*ae771770SStanislav Sedov	  *" $libdir "*) ;;
2947*ae771770SStanislav Sedov	  *) func_append future_libdirs " $libdir" ;;
2948*ae771770SStanislav Sedov	  esac
2949*ae771770SStanislav Sedov	fi
2950*ae771770SStanislav Sedov
2951*ae771770SStanislav Sedov	func_dirname "$file" "/" ""
2952*ae771770SStanislav Sedov	dir="$func_dirname_result"
2953*ae771770SStanislav Sedov	func_append dir "$objdir"
2954*ae771770SStanislav Sedov
2955*ae771770SStanislav Sedov	if test -n "$relink_command"; then
2956*ae771770SStanislav Sedov	  # Determine the prefix the user has applied to our future dir.
2957*ae771770SStanislav Sedov	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
2958*ae771770SStanislav Sedov
2959*ae771770SStanislav Sedov	  # Don't allow the user to place us outside of our expected
2960*ae771770SStanislav Sedov	  # location b/c this prevents finding dependent libraries that
2961*ae771770SStanislav Sedov	  # are installed to the same prefix.
2962*ae771770SStanislav Sedov	  # At present, this check doesn't affect windows .dll's that
2963*ae771770SStanislav Sedov	  # are installed into $libdir/../bin (currently, that works fine)
2964*ae771770SStanislav Sedov	  # but it's something to keep an eye on.
2965*ae771770SStanislav Sedov	  test "$inst_prefix_dir" = "$destdir" && \
2966*ae771770SStanislav Sedov	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
2967*ae771770SStanislav Sedov
2968*ae771770SStanislav Sedov	  if test -n "$inst_prefix_dir"; then
2969*ae771770SStanislav Sedov	    # Stick the inst_prefix_dir data into the link command.
2970*ae771770SStanislav Sedov	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
2971*ae771770SStanislav Sedov	  else
2972*ae771770SStanislav Sedov	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
2973*ae771770SStanislav Sedov	  fi
2974*ae771770SStanislav Sedov
2975*ae771770SStanislav Sedov	  func_warning "relinking \`$file'"
2976*ae771770SStanislav Sedov	  func_show_eval "$relink_command" \
2977*ae771770SStanislav Sedov	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
2978*ae771770SStanislav Sedov	fi
2979*ae771770SStanislav Sedov
2980*ae771770SStanislav Sedov	# See the names of the shared library.
2981*ae771770SStanislav Sedov	set dummy $library_names; shift
2982*ae771770SStanislav Sedov	if test -n "$1"; then
2983*ae771770SStanislav Sedov	  realname="$1"
2984*ae771770SStanislav Sedov	  shift
2985*ae771770SStanislav Sedov
2986*ae771770SStanislav Sedov	  srcname="$realname"
2987*ae771770SStanislav Sedov	  test -n "$relink_command" && srcname="$realname"T
2988*ae771770SStanislav Sedov
2989*ae771770SStanislav Sedov	  # Install the shared library and build the symlinks.
2990*ae771770SStanislav Sedov	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
2991*ae771770SStanislav Sedov	      'exit $?'
2992*ae771770SStanislav Sedov	  tstripme="$stripme"
2993*ae771770SStanislav Sedov	  case $host_os in
2994*ae771770SStanislav Sedov	  cygwin* | mingw* | pw32* | cegcc*)
2995*ae771770SStanislav Sedov	    case $realname in
2996*ae771770SStanislav Sedov	    *.dll.a)
2997*ae771770SStanislav Sedov	      tstripme=""
2998*ae771770SStanislav Sedov	      ;;
2999*ae771770SStanislav Sedov	    esac
3000*ae771770SStanislav Sedov	    ;;
3001*ae771770SStanislav Sedov	  esac
3002*ae771770SStanislav Sedov	  if test -n "$tstripme" && test -n "$striplib"; then
3003*ae771770SStanislav Sedov	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
3004*ae771770SStanislav Sedov	  fi
3005*ae771770SStanislav Sedov
3006*ae771770SStanislav Sedov	  if test "$#" -gt 0; then
3007*ae771770SStanislav Sedov	    # Delete the old symlinks, and create new ones.
3008*ae771770SStanislav Sedov	    # Try `ln -sf' first, because the `ln' binary might depend on
3009*ae771770SStanislav Sedov	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
3010*ae771770SStanislav Sedov	    # so we also need to try rm && ln -s.
3011*ae771770SStanislav Sedov	    for linkname
3012*ae771770SStanislav Sedov	    do
3013*ae771770SStanislav Sedov	      test "$linkname" != "$realname" \
3014*ae771770SStanislav Sedov		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
3015*ae771770SStanislav Sedov	    done
3016*ae771770SStanislav Sedov	  fi
3017*ae771770SStanislav Sedov
3018*ae771770SStanislav Sedov	  # Do each command in the postinstall commands.
3019*ae771770SStanislav Sedov	  lib="$destdir/$realname"
3020*ae771770SStanislav Sedov	  func_execute_cmds "$postinstall_cmds" 'exit $?'
3021*ae771770SStanislav Sedov	fi
3022*ae771770SStanislav Sedov
3023*ae771770SStanislav Sedov	# Install the pseudo-library for information purposes.
3024*ae771770SStanislav Sedov	func_basename "$file"
3025*ae771770SStanislav Sedov	name="$func_basename_result"
3026*ae771770SStanislav Sedov	instname="$dir/$name"i
3027*ae771770SStanislav Sedov	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
3028*ae771770SStanislav Sedov
3029*ae771770SStanislav Sedov	# Maybe install the static library, too.
3030*ae771770SStanislav Sedov	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
3031*ae771770SStanislav Sedov	;;
3032*ae771770SStanislav Sedov
3033*ae771770SStanislav Sedov      *.lo)
3034*ae771770SStanislav Sedov	# Install (i.e. copy) a libtool object.
3035*ae771770SStanislav Sedov
3036*ae771770SStanislav Sedov	# Figure out destination file name, if it wasn't already specified.
3037*ae771770SStanislav Sedov	if test -n "$destname"; then
3038*ae771770SStanislav Sedov	  destfile="$destdir/$destname"
3039*ae771770SStanislav Sedov	else
3040*ae771770SStanislav Sedov	  func_basename "$file"
3041*ae771770SStanislav Sedov	  destfile="$func_basename_result"
3042*ae771770SStanislav Sedov	  destfile="$destdir/$destfile"
3043*ae771770SStanislav Sedov	fi
3044*ae771770SStanislav Sedov
3045*ae771770SStanislav Sedov	# Deduce the name of the destination old-style object file.
3046*ae771770SStanislav Sedov	case $destfile in
3047*ae771770SStanislav Sedov	*.lo)
3048*ae771770SStanislav Sedov	  func_lo2o "$destfile"
3049*ae771770SStanislav Sedov	  staticdest=$func_lo2o_result
3050*ae771770SStanislav Sedov	  ;;
3051*ae771770SStanislav Sedov	*.$objext)
3052*ae771770SStanislav Sedov	  staticdest="$destfile"
3053*ae771770SStanislav Sedov	  destfile=
3054*ae771770SStanislav Sedov	  ;;
3055*ae771770SStanislav Sedov	*)
3056*ae771770SStanislav Sedov	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
3057*ae771770SStanislav Sedov	  ;;
3058*ae771770SStanislav Sedov	esac
3059*ae771770SStanislav Sedov
3060*ae771770SStanislav Sedov	# Install the libtool object if requested.
3061*ae771770SStanislav Sedov	test -n "$destfile" && \
3062*ae771770SStanislav Sedov	  func_show_eval "$install_prog $file $destfile" 'exit $?'
3063*ae771770SStanislav Sedov
3064*ae771770SStanislav Sedov	# Install the old object if enabled.
3065*ae771770SStanislav Sedov	if test "$build_old_libs" = yes; then
3066*ae771770SStanislav Sedov	  # Deduce the name of the old-style object file.
3067*ae771770SStanislav Sedov	  func_lo2o "$file"
3068*ae771770SStanislav Sedov	  staticobj=$func_lo2o_result
3069*ae771770SStanislav Sedov	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
3070*ae771770SStanislav Sedov	fi
3071c19800e8SDoug Rabson	exit $EXIT_SUCCESS
3072b528cefcSMark Murray	;;
3073b528cefcSMark Murray
3074*ae771770SStanislav Sedov      *)
3075*ae771770SStanislav Sedov	# Figure out destination file name, if it wasn't already specified.
3076*ae771770SStanislav Sedov	if test -n "$destname"; then
3077*ae771770SStanislav Sedov	  destfile="$destdir/$destname"
3078*ae771770SStanislav Sedov	else
3079*ae771770SStanislav Sedov	  func_basename "$file"
3080*ae771770SStanislav Sedov	  destfile="$func_basename_result"
3081*ae771770SStanislav Sedov	  destfile="$destdir/$destfile"
3082*ae771770SStanislav Sedov	fi
3083*ae771770SStanislav Sedov
3084*ae771770SStanislav Sedov	# If the file is missing, and there is a .exe on the end, strip it
3085*ae771770SStanislav Sedov	# because it is most likely a libtool script we actually want to
3086*ae771770SStanislav Sedov	# install
3087*ae771770SStanislav Sedov	stripped_ext=""
3088*ae771770SStanislav Sedov	case $file in
3089*ae771770SStanislav Sedov	  *.exe)
3090*ae771770SStanislav Sedov	    if test ! -f "$file"; then
3091*ae771770SStanislav Sedov	      func_stripname '' '.exe' "$file"
3092*ae771770SStanislav Sedov	      file=$func_stripname_result
3093*ae771770SStanislav Sedov	      stripped_ext=".exe"
3094*ae771770SStanislav Sedov	    fi
3095*ae771770SStanislav Sedov	    ;;
3096*ae771770SStanislav Sedov	esac
3097*ae771770SStanislav Sedov
3098*ae771770SStanislav Sedov	# Do a test to see if this is really a libtool program.
30994137ff4cSJacques Vidrine	case $host in
3100*ae771770SStanislav Sedov	*cygwin* | *mingw*)
3101*ae771770SStanislav Sedov	    if func_ltwrapper_executable_p "$file"; then
3102*ae771770SStanislav Sedov	      func_ltwrapper_scriptname "$file"
3103*ae771770SStanislav Sedov	      wrapper=$func_ltwrapper_scriptname_result
3104*ae771770SStanislav Sedov	    else
3105*ae771770SStanislav Sedov	      func_stripname '' '.exe' "$file"
3106*ae771770SStanislav Sedov	      wrapper=$func_stripname_result
3107*ae771770SStanislav Sedov	    fi
3108*ae771770SStanislav Sedov	    ;;
3109*ae771770SStanislav Sedov	*)
3110*ae771770SStanislav Sedov	    wrapper=$file
3111*ae771770SStanislav Sedov	    ;;
3112*ae771770SStanislav Sedov	esac
3113*ae771770SStanislav Sedov	if func_ltwrapper_script_p "$wrapper"; then
3114*ae771770SStanislav Sedov	  notinst_deplibs=
3115*ae771770SStanislav Sedov	  relink_command=
3116*ae771770SStanislav Sedov
3117*ae771770SStanislav Sedov	  func_source "$wrapper"
3118*ae771770SStanislav Sedov
3119*ae771770SStanislav Sedov	  # Check the variables that should have been set.
3120*ae771770SStanislav Sedov	  test -z "$generated_by_libtool_version" && \
3121*ae771770SStanislav Sedov	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
3122*ae771770SStanislav Sedov
3123*ae771770SStanislav Sedov	  finalize=yes
3124*ae771770SStanislav Sedov	  for lib in $notinst_deplibs; do
3125*ae771770SStanislav Sedov	    # Check to see that each library is installed.
3126*ae771770SStanislav Sedov	    libdir=
3127*ae771770SStanislav Sedov	    if test -f "$lib"; then
3128*ae771770SStanislav Sedov	      func_source "$lib"
3129*ae771770SStanislav Sedov	    fi
3130*ae771770SStanislav Sedov	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
3131*ae771770SStanislav Sedov	    if test -n "$libdir" && test ! -f "$libfile"; then
3132*ae771770SStanislav Sedov	      func_warning "\`$lib' has not been installed in \`$libdir'"
3133*ae771770SStanislav Sedov	      finalize=no
3134*ae771770SStanislav Sedov	    fi
3135*ae771770SStanislav Sedov	  done
3136*ae771770SStanislav Sedov
3137*ae771770SStanislav Sedov	  relink_command=
3138*ae771770SStanislav Sedov	  func_source "$wrapper"
3139*ae771770SStanislav Sedov
3140*ae771770SStanislav Sedov	  outputname=
3141*ae771770SStanislav Sedov	  if test "$fast_install" = no && test -n "$relink_command"; then
3142*ae771770SStanislav Sedov	    $opt_dry_run || {
3143*ae771770SStanislav Sedov	      if test "$finalize" = yes; then
3144*ae771770SStanislav Sedov	        tmpdir=`func_mktempdir`
3145*ae771770SStanislav Sedov		func_basename "$file$stripped_ext"
3146*ae771770SStanislav Sedov		file="$func_basename_result"
3147*ae771770SStanislav Sedov	        outputname="$tmpdir/$file"
3148*ae771770SStanislav Sedov	        # Replace the output file specification.
3149*ae771770SStanislav Sedov	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
3150*ae771770SStanislav Sedov
3151*ae771770SStanislav Sedov	        $opt_silent || {
3152*ae771770SStanislav Sedov	          func_quote_for_expand "$relink_command"
3153*ae771770SStanislav Sedov		  eval "func_echo $func_quote_for_expand_result"
3154*ae771770SStanislav Sedov	        }
3155*ae771770SStanislav Sedov	        if eval "$relink_command"; then :
3156*ae771770SStanislav Sedov	          else
3157*ae771770SStanislav Sedov		  func_error "error: relink \`$file' with the above command before installing it"
3158*ae771770SStanislav Sedov		  $opt_dry_run || ${RM}r "$tmpdir"
3159*ae771770SStanislav Sedov		  continue
3160*ae771770SStanislav Sedov	        fi
3161*ae771770SStanislav Sedov	        file="$outputname"
3162*ae771770SStanislav Sedov	      else
3163*ae771770SStanislav Sedov	        func_warning "cannot relink \`$file'"
3164*ae771770SStanislav Sedov	      fi
3165*ae771770SStanislav Sedov	    }
3166*ae771770SStanislav Sedov	  else
3167*ae771770SStanislav Sedov	    # Install the binary that we compiled earlier.
3168*ae771770SStanislav Sedov	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
3169*ae771770SStanislav Sedov	  fi
3170*ae771770SStanislav Sedov	fi
3171*ae771770SStanislav Sedov
3172*ae771770SStanislav Sedov	# remove .exe since cygwin /usr/bin/install will append another
3173*ae771770SStanislav Sedov	# one anyway
3174*ae771770SStanislav Sedov	case $install_prog,$host in
3175*ae771770SStanislav Sedov	*/usr/bin/install*,*cygwin*)
3176*ae771770SStanislav Sedov	  case $file:$destfile in
3177*ae771770SStanislav Sedov	  *.exe:*.exe)
3178*ae771770SStanislav Sedov	    # this is ok
3179*ae771770SStanislav Sedov	    ;;
3180*ae771770SStanislav Sedov	  *.exe:*)
3181*ae771770SStanislav Sedov	    destfile=$destfile.exe
3182*ae771770SStanislav Sedov	    ;;
3183*ae771770SStanislav Sedov	  *:*.exe)
3184*ae771770SStanislav Sedov	    func_stripname '' '.exe' "$destfile"
3185*ae771770SStanislav Sedov	    destfile=$func_stripname_result
3186*ae771770SStanislav Sedov	    ;;
3187*ae771770SStanislav Sedov	  esac
3188*ae771770SStanislav Sedov	  ;;
3189*ae771770SStanislav Sedov	esac
3190*ae771770SStanislav Sedov	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
3191*ae771770SStanislav Sedov	$opt_dry_run || if test -n "$outputname"; then
3192*ae771770SStanislav Sedov	  ${RM}r "$tmpdir"
3193*ae771770SStanislav Sedov	fi
3194*ae771770SStanislav Sedov	;;
3195*ae771770SStanislav Sedov      esac
3196*ae771770SStanislav Sedov    done
3197*ae771770SStanislav Sedov
3198*ae771770SStanislav Sedov    for file in $staticlibs; do
3199*ae771770SStanislav Sedov      func_basename "$file"
3200*ae771770SStanislav Sedov      name="$func_basename_result"
3201*ae771770SStanislav Sedov
3202*ae771770SStanislav Sedov      # Set up the ranlib parameters.
3203*ae771770SStanislav Sedov      oldlib="$destdir/$name"
3204*ae771770SStanislav Sedov
3205*ae771770SStanislav Sedov      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
3206*ae771770SStanislav Sedov
3207*ae771770SStanislav Sedov      if test -n "$stripme" && test -n "$old_striplib"; then
3208*ae771770SStanislav Sedov	func_show_eval "$old_striplib $oldlib" 'exit $?'
3209*ae771770SStanislav Sedov      fi
3210*ae771770SStanislav Sedov
3211*ae771770SStanislav Sedov      # Do each command in the postinstall commands.
3212*ae771770SStanislav Sedov      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
3213*ae771770SStanislav Sedov    done
3214*ae771770SStanislav Sedov
3215*ae771770SStanislav Sedov    test -n "$future_libdirs" && \
3216*ae771770SStanislav Sedov      func_warning "remember to run \`$progname --finish$future_libdirs'"
3217*ae771770SStanislav Sedov
3218*ae771770SStanislav Sedov    if test -n "$current_libdirs"; then
3219*ae771770SStanislav Sedov      # Maybe just do a dry run.
3220*ae771770SStanislav Sedov      $opt_dry_run && current_libdirs=" -n$current_libdirs"
3221*ae771770SStanislav Sedov      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
3222*ae771770SStanislav Sedov    else
3223*ae771770SStanislav Sedov      exit $EXIT_SUCCESS
3224*ae771770SStanislav Sedov    fi
3225*ae771770SStanislav Sedov}
3226*ae771770SStanislav Sedov
3227*ae771770SStanislav Sedovtest "$opt_mode" = install && func_mode_install ${1+"$@"}
3228*ae771770SStanislav Sedov
3229*ae771770SStanislav Sedov
3230*ae771770SStanislav Sedov# func_generate_dlsyms outputname originator pic_p
3231*ae771770SStanislav Sedov# Extract symbols from dlprefiles and create ${outputname}S.o with
3232*ae771770SStanislav Sedov# a dlpreopen symbol table.
3233*ae771770SStanislav Sedovfunc_generate_dlsyms ()
3234*ae771770SStanislav Sedov{
3235*ae771770SStanislav Sedov    $opt_debug
3236*ae771770SStanislav Sedov    my_outputname="$1"
3237*ae771770SStanislav Sedov    my_originator="$2"
3238*ae771770SStanislav Sedov    my_pic_p="${3-no}"
3239*ae771770SStanislav Sedov    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
3240*ae771770SStanislav Sedov    my_dlsyms=
3241*ae771770SStanislav Sedov
3242*ae771770SStanislav Sedov    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
3243*ae771770SStanislav Sedov      if test -n "$NM" && test -n "$global_symbol_pipe"; then
3244*ae771770SStanislav Sedov	my_dlsyms="${my_outputname}S.c"
3245*ae771770SStanislav Sedov      else
3246*ae771770SStanislav Sedov	func_error "not configured to extract global symbols from dlpreopened files"
3247*ae771770SStanislav Sedov      fi
3248*ae771770SStanislav Sedov    fi
3249*ae771770SStanislav Sedov
3250*ae771770SStanislav Sedov    if test -n "$my_dlsyms"; then
3251*ae771770SStanislav Sedov      case $my_dlsyms in
3252*ae771770SStanislav Sedov      "") ;;
3253*ae771770SStanislav Sedov      *.c)
3254*ae771770SStanislav Sedov	# Discover the nlist of each of the dlfiles.
3255*ae771770SStanislav Sedov	nlist="$output_objdir/${my_outputname}.nm"
3256*ae771770SStanislav Sedov
3257*ae771770SStanislav Sedov	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
3258*ae771770SStanislav Sedov
3259*ae771770SStanislav Sedov	# Parse the name list into a source file.
3260*ae771770SStanislav Sedov	func_verbose "creating $output_objdir/$my_dlsyms"
3261*ae771770SStanislav Sedov
3262*ae771770SStanislav Sedov	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
3263*ae771770SStanislav Sedov/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
3264*ae771770SStanislav Sedov/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
3265*ae771770SStanislav Sedov
3266*ae771770SStanislav Sedov#ifdef __cplusplus
3267*ae771770SStanislav Sedovextern \"C\" {
3268*ae771770SStanislav Sedov#endif
3269*ae771770SStanislav Sedov
3270*ae771770SStanislav Sedov#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
3271*ae771770SStanislav Sedov#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
3272*ae771770SStanislav Sedov#endif
3273*ae771770SStanislav Sedov
3274*ae771770SStanislav Sedov/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
3275*ae771770SStanislav Sedov#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
3276*ae771770SStanislav Sedov/* DATA imports from DLLs on WIN32 con't be const, because runtime
3277*ae771770SStanislav Sedov   relocations are performed -- see ld's documentation on pseudo-relocs.  */
3278*ae771770SStanislav Sedov# define LT_DLSYM_CONST
3279*ae771770SStanislav Sedov#elif defined(__osf__)
3280*ae771770SStanislav Sedov/* This system does not cope well with relocations in const data.  */
3281*ae771770SStanislav Sedov# define LT_DLSYM_CONST
3282*ae771770SStanislav Sedov#else
3283*ae771770SStanislav Sedov# define LT_DLSYM_CONST const
3284*ae771770SStanislav Sedov#endif
3285*ae771770SStanislav Sedov
3286*ae771770SStanislav Sedov/* External symbol declarations for the compiler. */\
3287*ae771770SStanislav Sedov"
3288*ae771770SStanislav Sedov
3289*ae771770SStanislav Sedov	if test "$dlself" = yes; then
3290*ae771770SStanislav Sedov	  func_verbose "generating symbol list for \`$output'"
3291*ae771770SStanislav Sedov
3292*ae771770SStanislav Sedov	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
3293*ae771770SStanislav Sedov
3294*ae771770SStanislav Sedov	  # Add our own program objects to the symbol list.
3295*ae771770SStanislav Sedov	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
3296*ae771770SStanislav Sedov	  for progfile in $progfiles; do
3297*ae771770SStanislav Sedov	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
3298*ae771770SStanislav Sedov	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
3299*ae771770SStanislav Sedov	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
3300*ae771770SStanislav Sedov	  done
3301*ae771770SStanislav Sedov
3302*ae771770SStanislav Sedov	  if test -n "$exclude_expsyms"; then
3303*ae771770SStanislav Sedov	    $opt_dry_run || {
3304*ae771770SStanislav Sedov	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
3305*ae771770SStanislav Sedov	      eval '$MV "$nlist"T "$nlist"'
3306*ae771770SStanislav Sedov	    }
3307*ae771770SStanislav Sedov	  fi
3308*ae771770SStanislav Sedov
3309*ae771770SStanislav Sedov	  if test -n "$export_symbols_regex"; then
3310*ae771770SStanislav Sedov	    $opt_dry_run || {
3311*ae771770SStanislav Sedov	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
3312*ae771770SStanislav Sedov	      eval '$MV "$nlist"T "$nlist"'
3313*ae771770SStanislav Sedov	    }
3314*ae771770SStanislav Sedov	  fi
3315*ae771770SStanislav Sedov
3316*ae771770SStanislav Sedov	  # Prepare the list of exported symbols
3317*ae771770SStanislav Sedov	  if test -z "$export_symbols"; then
3318*ae771770SStanislav Sedov	    export_symbols="$output_objdir/$outputname.exp"
3319*ae771770SStanislav Sedov	    $opt_dry_run || {
3320*ae771770SStanislav Sedov	      $RM $export_symbols
3321*ae771770SStanislav Sedov	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
3322*ae771770SStanislav Sedov	      case $host in
3323*ae771770SStanislav Sedov	      *cygwin* | *mingw* | *cegcc* )
3324*ae771770SStanislav Sedov                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3325*ae771770SStanislav Sedov                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
3326*ae771770SStanislav Sedov	        ;;
3327*ae771770SStanislav Sedov	      esac
3328*ae771770SStanislav Sedov	    }
3329*ae771770SStanislav Sedov	  else
3330*ae771770SStanislav Sedov	    $opt_dry_run || {
3331*ae771770SStanislav Sedov	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
3332*ae771770SStanislav Sedov	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
3333*ae771770SStanislav Sedov	      eval '$MV "$nlist"T "$nlist"'
3334*ae771770SStanislav Sedov	      case $host in
3335*ae771770SStanislav Sedov	        *cygwin* | *mingw* | *cegcc* )
3336*ae771770SStanislav Sedov	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3337*ae771770SStanislav Sedov	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
3338*ae771770SStanislav Sedov	          ;;
3339*ae771770SStanislav Sedov	      esac
3340*ae771770SStanislav Sedov	    }
3341*ae771770SStanislav Sedov	  fi
3342*ae771770SStanislav Sedov	fi
3343*ae771770SStanislav Sedov
3344*ae771770SStanislav Sedov	for dlprefile in $dlprefiles; do
3345*ae771770SStanislav Sedov	  func_verbose "extracting global C symbols from \`$dlprefile'"
3346*ae771770SStanislav Sedov	  func_basename "$dlprefile"
3347*ae771770SStanislav Sedov	  name="$func_basename_result"
3348*ae771770SStanislav Sedov          case $host in
3349*ae771770SStanislav Sedov	    *cygwin* | *mingw* | *cegcc* )
3350*ae771770SStanislav Sedov	      # if an import library, we need to obtain dlname
3351*ae771770SStanislav Sedov	      if func_win32_import_lib_p "$dlprefile"; then
3352*ae771770SStanislav Sedov	        func_tr_sh "$dlprefile"
3353*ae771770SStanislav Sedov	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
3354*ae771770SStanislav Sedov	        dlprefile_dlbasename=""
3355*ae771770SStanislav Sedov	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
3356*ae771770SStanislav Sedov	          # Use subshell, to avoid clobbering current variable values
3357*ae771770SStanislav Sedov	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
3358*ae771770SStanislav Sedov	          if test -n "$dlprefile_dlname" ; then
3359*ae771770SStanislav Sedov	            func_basename "$dlprefile_dlname"
3360*ae771770SStanislav Sedov	            dlprefile_dlbasename="$func_basename_result"
3361*ae771770SStanislav Sedov	          else
3362*ae771770SStanislav Sedov	            # no lafile. user explicitly requested -dlpreopen <import library>.
3363*ae771770SStanislav Sedov	            $sharedlib_from_linklib_cmd "$dlprefile"
3364*ae771770SStanislav Sedov	            dlprefile_dlbasename=$sharedlib_from_linklib_result
3365*ae771770SStanislav Sedov	          fi
3366*ae771770SStanislav Sedov	        fi
3367*ae771770SStanislav Sedov	        $opt_dry_run || {
3368*ae771770SStanislav Sedov	          if test -n "$dlprefile_dlbasename" ; then
3369*ae771770SStanislav Sedov	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
3370*ae771770SStanislav Sedov	          else
3371*ae771770SStanislav Sedov	            func_warning "Could not compute DLL name from $name"
3372*ae771770SStanislav Sedov	            eval '$ECHO ": $name " >> "$nlist"'
3373*ae771770SStanislav Sedov	          fi
3374*ae771770SStanislav Sedov	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3375*ae771770SStanislav Sedov	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
3376*ae771770SStanislav Sedov	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
3377*ae771770SStanislav Sedov	        }
3378*ae771770SStanislav Sedov	      else # not an import lib
3379*ae771770SStanislav Sedov	        $opt_dry_run || {
3380*ae771770SStanislav Sedov	          eval '$ECHO ": $name " >> "$nlist"'
3381*ae771770SStanislav Sedov	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3382*ae771770SStanislav Sedov	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
3383*ae771770SStanislav Sedov	        }
3384*ae771770SStanislav Sedov	      fi
3385*ae771770SStanislav Sedov	    ;;
3386*ae771770SStanislav Sedov	    *)
3387*ae771770SStanislav Sedov	      $opt_dry_run || {
3388*ae771770SStanislav Sedov	        eval '$ECHO ": $name " >> "$nlist"'
3389*ae771770SStanislav Sedov	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3390*ae771770SStanislav Sedov	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
3391*ae771770SStanislav Sedov	      }
3392*ae771770SStanislav Sedov	    ;;
3393*ae771770SStanislav Sedov          esac
3394*ae771770SStanislav Sedov	done
3395*ae771770SStanislav Sedov
3396*ae771770SStanislav Sedov	$opt_dry_run || {
3397*ae771770SStanislav Sedov	  # Make sure we have at least an empty file.
3398*ae771770SStanislav Sedov	  test -f "$nlist" || : > "$nlist"
3399*ae771770SStanislav Sedov
3400*ae771770SStanislav Sedov	  if test -n "$exclude_expsyms"; then
3401*ae771770SStanislav Sedov	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
3402*ae771770SStanislav Sedov	    $MV "$nlist"T "$nlist"
3403*ae771770SStanislav Sedov	  fi
3404*ae771770SStanislav Sedov
3405*ae771770SStanislav Sedov	  # Try sorting and uniquifying the output.
3406*ae771770SStanislav Sedov	  if $GREP -v "^: " < "$nlist" |
3407*ae771770SStanislav Sedov	      if sort -k 3 </dev/null >/dev/null 2>&1; then
3408*ae771770SStanislav Sedov		sort -k 3
3409*ae771770SStanislav Sedov	      else
3410*ae771770SStanislav Sedov		sort +2
3411*ae771770SStanislav Sedov	      fi |
3412*ae771770SStanislav Sedov	      uniq > "$nlist"S; then
3413*ae771770SStanislav Sedov	    :
3414*ae771770SStanislav Sedov	  else
3415*ae771770SStanislav Sedov	    $GREP -v "^: " < "$nlist" > "$nlist"S
3416*ae771770SStanislav Sedov	  fi
3417*ae771770SStanislav Sedov
3418*ae771770SStanislav Sedov	  if test -f "$nlist"S; then
3419*ae771770SStanislav Sedov	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
3420*ae771770SStanislav Sedov	  else
3421*ae771770SStanislav Sedov	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
3422*ae771770SStanislav Sedov	  fi
3423*ae771770SStanislav Sedov
3424*ae771770SStanislav Sedov	  echo >> "$output_objdir/$my_dlsyms" "\
3425*ae771770SStanislav Sedov
3426*ae771770SStanislav Sedov/* The mapping between symbol names and symbols.  */
3427*ae771770SStanislav Sedovtypedef struct {
3428*ae771770SStanislav Sedov  const char *name;
3429*ae771770SStanislav Sedov  void *address;
3430*ae771770SStanislav Sedov} lt_dlsymlist;
3431*ae771770SStanislav Sedovextern LT_DLSYM_CONST lt_dlsymlist
3432*ae771770SStanislav Sedovlt_${my_prefix}_LTX_preloaded_symbols[];
3433*ae771770SStanislav SedovLT_DLSYM_CONST lt_dlsymlist
3434*ae771770SStanislav Sedovlt_${my_prefix}_LTX_preloaded_symbols[] =
3435*ae771770SStanislav Sedov{\
3436*ae771770SStanislav Sedov  { \"$my_originator\", (void *) 0 },"
3437*ae771770SStanislav Sedov
3438*ae771770SStanislav Sedov	  case $need_lib_prefix in
3439*ae771770SStanislav Sedov	  no)
3440*ae771770SStanislav Sedov	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
3441*ae771770SStanislav Sedov	    ;;
3442*ae771770SStanislav Sedov	  *)
3443*ae771770SStanislav Sedov	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
3444*ae771770SStanislav Sedov	    ;;
3445*ae771770SStanislav Sedov	  esac
3446*ae771770SStanislav Sedov	  echo >> "$output_objdir/$my_dlsyms" "\
3447*ae771770SStanislav Sedov  {0, (void *) 0}
3448*ae771770SStanislav Sedov};
3449*ae771770SStanislav Sedov
3450*ae771770SStanislav Sedov/* This works around a problem in FreeBSD linker */
3451*ae771770SStanislav Sedov#ifdef FREEBSD_WORKAROUND
3452*ae771770SStanislav Sedovstatic const void *lt_preloaded_setup() {
3453*ae771770SStanislav Sedov  return lt_${my_prefix}_LTX_preloaded_symbols;
3454*ae771770SStanislav Sedov}
3455*ae771770SStanislav Sedov#endif
3456*ae771770SStanislav Sedov
3457*ae771770SStanislav Sedov#ifdef __cplusplus
3458*ae771770SStanislav Sedov}
3459*ae771770SStanislav Sedov#endif\
3460*ae771770SStanislav Sedov"
3461*ae771770SStanislav Sedov	} # !$opt_dry_run
3462*ae771770SStanislav Sedov
3463*ae771770SStanislav Sedov	pic_flag_for_symtable=
3464*ae771770SStanislav Sedov	case "$compile_command " in
3465*ae771770SStanislav Sedov	*" -static "*) ;;
3466*ae771770SStanislav Sedov	*)
3467*ae771770SStanislav Sedov	  case $host in
3468*ae771770SStanislav Sedov	  # compiling the symbol table file with pic_flag works around
3469*ae771770SStanislav Sedov	  # a FreeBSD bug that causes programs to crash when -lm is
3470*ae771770SStanislav Sedov	  # linked before any other PIC object.  But we must not use
3471*ae771770SStanislav Sedov	  # pic_flag when linking with -static.  The problem exists in
3472*ae771770SStanislav Sedov	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
3473*ae771770SStanislav Sedov	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
3474*ae771770SStanislav Sedov	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
3475*ae771770SStanislav Sedov	  *-*-hpux*)
3476*ae771770SStanislav Sedov	    pic_flag_for_symtable=" $pic_flag"  ;;
3477*ae771770SStanislav Sedov	  *)
3478*ae771770SStanislav Sedov	    if test "X$my_pic_p" != Xno; then
3479*ae771770SStanislav Sedov	      pic_flag_for_symtable=" $pic_flag"
3480*ae771770SStanislav Sedov	    fi
3481*ae771770SStanislav Sedov	    ;;
3482*ae771770SStanislav Sedov	  esac
3483*ae771770SStanislav Sedov	  ;;
3484*ae771770SStanislav Sedov	esac
3485*ae771770SStanislav Sedov	symtab_cflags=
3486*ae771770SStanislav Sedov	for arg in $LTCFLAGS; do
3487*ae771770SStanislav Sedov	  case $arg in
3488*ae771770SStanislav Sedov	  -pie | -fpie | -fPIE) ;;
3489*ae771770SStanislav Sedov	  *) func_append symtab_cflags " $arg" ;;
3490*ae771770SStanislav Sedov	  esac
3491*ae771770SStanislav Sedov	done
3492*ae771770SStanislav Sedov
3493*ae771770SStanislav Sedov	# Now compile the dynamic symbol file.
3494*ae771770SStanislav Sedov	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
3495*ae771770SStanislav Sedov
3496*ae771770SStanislav Sedov	# Clean up the generated files.
3497*ae771770SStanislav Sedov	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
3498*ae771770SStanislav Sedov
3499*ae771770SStanislav Sedov	# Transform the symbol file into the correct name.
3500*ae771770SStanislav Sedov	symfileobj="$output_objdir/${my_outputname}S.$objext"
3501*ae771770SStanislav Sedov	case $host in
3502*ae771770SStanislav Sedov	*cygwin* | *mingw* | *cegcc* )
3503*ae771770SStanislav Sedov	  if test -f "$output_objdir/$my_outputname.def"; then
3504*ae771770SStanislav Sedov	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3505*ae771770SStanislav Sedov	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3506*ae771770SStanislav Sedov	  else
3507*ae771770SStanislav Sedov	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3508*ae771770SStanislav Sedov	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3509*ae771770SStanislav Sedov	  fi
3510*ae771770SStanislav Sedov	  ;;
3511*ae771770SStanislav Sedov	*)
3512*ae771770SStanislav Sedov	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3513*ae771770SStanislav Sedov	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3514*ae771770SStanislav Sedov	  ;;
3515*ae771770SStanislav Sedov	esac
3516*ae771770SStanislav Sedov	;;
3517*ae771770SStanislav Sedov      *)
3518*ae771770SStanislav Sedov	func_fatal_error "unknown suffix for \`$my_dlsyms'"
3519*ae771770SStanislav Sedov	;;
3520*ae771770SStanislav Sedov      esac
3521*ae771770SStanislav Sedov    else
3522*ae771770SStanislav Sedov      # We keep going just in case the user didn't refer to
3523*ae771770SStanislav Sedov      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
3524*ae771770SStanislav Sedov      # really was required.
3525*ae771770SStanislav Sedov
3526*ae771770SStanislav Sedov      # Nullify the symbol file.
3527*ae771770SStanislav Sedov      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
3528*ae771770SStanislav Sedov      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
3529*ae771770SStanislav Sedov    fi
3530*ae771770SStanislav Sedov}
3531*ae771770SStanislav Sedov
3532*ae771770SStanislav Sedov# func_win32_libid arg
3533*ae771770SStanislav Sedov# return the library type of file 'arg'
3534*ae771770SStanislav Sedov#
3535*ae771770SStanislav Sedov# Need a lot of goo to handle *both* DLLs and import libs
3536*ae771770SStanislav Sedov# Has to be a shell function in order to 'eat' the argument
3537*ae771770SStanislav Sedov# that is supplied when $file_magic_command is called.
3538*ae771770SStanislav Sedov# Despite the name, also deal with 64 bit binaries.
3539*ae771770SStanislav Sedovfunc_win32_libid ()
3540*ae771770SStanislav Sedov{
3541*ae771770SStanislav Sedov  $opt_debug
3542*ae771770SStanislav Sedov  win32_libid_type="unknown"
3543*ae771770SStanislav Sedov  win32_fileres=`file -L $1 2>/dev/null`
3544*ae771770SStanislav Sedov  case $win32_fileres in
3545*ae771770SStanislav Sedov  *ar\ archive\ import\ library*) # definitely import
3546*ae771770SStanislav Sedov    win32_libid_type="x86 archive import"
3547*ae771770SStanislav Sedov    ;;
3548*ae771770SStanislav Sedov  *ar\ archive*) # could be an import, or static
3549*ae771770SStanislav Sedov    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
3550*ae771770SStanislav Sedov    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
3551*ae771770SStanislav Sedov       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
3552*ae771770SStanislav Sedov      func_to_tool_file "$1" func_convert_file_msys_to_w32
3553*ae771770SStanislav Sedov      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
3554*ae771770SStanislav Sedov	$SED -n -e '
3555*ae771770SStanislav Sedov	    1,100{
3556*ae771770SStanislav Sedov		/ I /{
3557*ae771770SStanislav Sedov		    s,.*,import,
3558*ae771770SStanislav Sedov		    p
3559*ae771770SStanislav Sedov		    q
3560*ae771770SStanislav Sedov		}
3561*ae771770SStanislav Sedov	    }'`
3562*ae771770SStanislav Sedov      case $win32_nmres in
3563*ae771770SStanislav Sedov      import*)  win32_libid_type="x86 archive import";;
3564*ae771770SStanislav Sedov      *)        win32_libid_type="x86 archive static";;
3565*ae771770SStanislav Sedov      esac
3566*ae771770SStanislav Sedov    fi
3567*ae771770SStanislav Sedov    ;;
3568*ae771770SStanislav Sedov  *DLL*)
3569*ae771770SStanislav Sedov    win32_libid_type="x86 DLL"
3570*ae771770SStanislav Sedov    ;;
3571*ae771770SStanislav Sedov  *executable*) # but shell scripts are "executable" too...
3572*ae771770SStanislav Sedov    case $win32_fileres in
3573*ae771770SStanislav Sedov    *MS\ Windows\ PE\ Intel*)
3574*ae771770SStanislav Sedov      win32_libid_type="x86 DLL"
3575*ae771770SStanislav Sedov      ;;
3576*ae771770SStanislav Sedov    esac
3577*ae771770SStanislav Sedov    ;;
3578*ae771770SStanislav Sedov  esac
3579*ae771770SStanislav Sedov  $ECHO "$win32_libid_type"
3580*ae771770SStanislav Sedov}
3581*ae771770SStanislav Sedov
3582*ae771770SStanislav Sedov# func_cygming_dll_for_implib ARG
3583*ae771770SStanislav Sedov#
3584*ae771770SStanislav Sedov# Platform-specific function to extract the
3585*ae771770SStanislav Sedov# name of the DLL associated with the specified
3586*ae771770SStanislav Sedov# import library ARG.
3587*ae771770SStanislav Sedov# Invoked by eval'ing the libtool variable
3588*ae771770SStanislav Sedov#    $sharedlib_from_linklib_cmd
3589*ae771770SStanislav Sedov# Result is available in the variable
3590*ae771770SStanislav Sedov#    $sharedlib_from_linklib_result
3591*ae771770SStanislav Sedovfunc_cygming_dll_for_implib ()
3592*ae771770SStanislav Sedov{
3593*ae771770SStanislav Sedov  $opt_debug
3594*ae771770SStanislav Sedov  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
3595*ae771770SStanislav Sedov}
3596*ae771770SStanislav Sedov
3597*ae771770SStanislav Sedov# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
3598*ae771770SStanislav Sedov#
3599*ae771770SStanislav Sedov# The is the core of a fallback implementation of a
3600*ae771770SStanislav Sedov# platform-specific function to extract the name of the
3601*ae771770SStanislav Sedov# DLL associated with the specified import library LIBNAME.
3602*ae771770SStanislav Sedov#
3603*ae771770SStanislav Sedov# SECTION_NAME is either .idata$6 or .idata$7, depending
3604*ae771770SStanislav Sedov# on the platform and compiler that created the implib.
3605*ae771770SStanislav Sedov#
3606*ae771770SStanislav Sedov# Echos the name of the DLL associated with the
3607*ae771770SStanislav Sedov# specified import library.
3608*ae771770SStanislav Sedovfunc_cygming_dll_for_implib_fallback_core ()
3609*ae771770SStanislav Sedov{
3610*ae771770SStanislav Sedov  $opt_debug
3611*ae771770SStanislav Sedov  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
3612*ae771770SStanislav Sedov  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
3613*ae771770SStanislav Sedov    $SED '/^Contents of section '"$match_literal"':/{
3614*ae771770SStanislav Sedov      # Place marker at beginning of archive member dllname section
3615*ae771770SStanislav Sedov      s/.*/====MARK====/
3616*ae771770SStanislav Sedov      p
3617*ae771770SStanislav Sedov      d
3618*ae771770SStanislav Sedov    }
3619*ae771770SStanislav Sedov    # These lines can sometimes be longer than 43 characters, but
3620*ae771770SStanislav Sedov    # are always uninteresting
3621*ae771770SStanislav Sedov    /:[	 ]*file format pe[i]\{,1\}-/d
3622*ae771770SStanislav Sedov    /^In archive [^:]*:/d
3623*ae771770SStanislav Sedov    # Ensure marker is printed
3624*ae771770SStanislav Sedov    /^====MARK====/p
3625*ae771770SStanislav Sedov    # Remove all lines with less than 43 characters
3626*ae771770SStanislav Sedov    /^.\{43\}/!d
3627*ae771770SStanislav Sedov    # From remaining lines, remove first 43 characters
3628*ae771770SStanislav Sedov    s/^.\{43\}//' |
3629*ae771770SStanislav Sedov    $SED -n '
3630*ae771770SStanislav Sedov      # Join marker and all lines until next marker into a single line
3631*ae771770SStanislav Sedov      /^====MARK====/ b para
3632*ae771770SStanislav Sedov      H
3633*ae771770SStanislav Sedov      $ b para
3634*ae771770SStanislav Sedov      b
3635*ae771770SStanislav Sedov      :para
3636*ae771770SStanislav Sedov      x
3637*ae771770SStanislav Sedov      s/\n//g
3638*ae771770SStanislav Sedov      # Remove the marker
3639*ae771770SStanislav Sedov      s/^====MARK====//
3640*ae771770SStanislav Sedov      # Remove trailing dots and whitespace
3641*ae771770SStanislav Sedov      s/[\. \t]*$//
3642*ae771770SStanislav Sedov      # Print
3643*ae771770SStanislav Sedov      /./p' |
3644*ae771770SStanislav Sedov    # we now have a list, one entry per line, of the stringified
3645*ae771770SStanislav Sedov    # contents of the appropriate section of all members of the
3646*ae771770SStanislav Sedov    # archive which possess that section. Heuristic: eliminate
3647*ae771770SStanislav Sedov    # all those which have a first or second character that is
3648*ae771770SStanislav Sedov    # a '.' (that is, objdump's representation of an unprintable
3649*ae771770SStanislav Sedov    # character.) This should work for all archives with less than
3650*ae771770SStanislav Sedov    # 0x302f exports -- but will fail for DLLs whose name actually
3651*ae771770SStanislav Sedov    # begins with a literal '.' or a single character followed by
3652*ae771770SStanislav Sedov    # a '.'.
3653*ae771770SStanislav Sedov    #
3654*ae771770SStanislav Sedov    # Of those that remain, print the first one.
3655*ae771770SStanislav Sedov    $SED -e '/^\./d;/^.\./d;q'
3656*ae771770SStanislav Sedov}
3657*ae771770SStanislav Sedov
3658*ae771770SStanislav Sedov# func_cygming_gnu_implib_p ARG
3659*ae771770SStanislav Sedov# This predicate returns with zero status (TRUE) if
3660*ae771770SStanislav Sedov# ARG is a GNU/binutils-style import library. Returns
3661*ae771770SStanislav Sedov# with nonzero status (FALSE) otherwise.
3662*ae771770SStanislav Sedovfunc_cygming_gnu_implib_p ()
3663*ae771770SStanislav Sedov{
3664*ae771770SStanislav Sedov  $opt_debug
3665*ae771770SStanislav Sedov  func_to_tool_file "$1" func_convert_file_msys_to_w32
3666*ae771770SStanislav Sedov  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)$'`
3667*ae771770SStanislav Sedov  test -n "$func_cygming_gnu_implib_tmp"
3668*ae771770SStanislav Sedov}
3669*ae771770SStanislav Sedov
3670*ae771770SStanislav Sedov# func_cygming_ms_implib_p ARG
3671*ae771770SStanislav Sedov# This predicate returns with zero status (TRUE) if
3672*ae771770SStanislav Sedov# ARG is an MS-style import library. Returns
3673*ae771770SStanislav Sedov# with nonzero status (FALSE) otherwise.
3674*ae771770SStanislav Sedovfunc_cygming_ms_implib_p ()
3675*ae771770SStanislav Sedov{
3676*ae771770SStanislav Sedov  $opt_debug
3677*ae771770SStanislav Sedov  func_to_tool_file "$1" func_convert_file_msys_to_w32
3678*ae771770SStanislav Sedov  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
3679*ae771770SStanislav Sedov  test -n "$func_cygming_ms_implib_tmp"
3680*ae771770SStanislav Sedov}
3681*ae771770SStanislav Sedov
3682*ae771770SStanislav Sedov# func_cygming_dll_for_implib_fallback ARG
3683*ae771770SStanislav Sedov# Platform-specific function to extract the
3684*ae771770SStanislav Sedov# name of the DLL associated with the specified
3685*ae771770SStanislav Sedov# import library ARG.
3686*ae771770SStanislav Sedov#
3687*ae771770SStanislav Sedov# This fallback implementation is for use when $DLLTOOL
3688*ae771770SStanislav Sedov# does not support the --identify-strict option.
3689*ae771770SStanislav Sedov# Invoked by eval'ing the libtool variable
3690*ae771770SStanislav Sedov#    $sharedlib_from_linklib_cmd
3691*ae771770SStanislav Sedov# Result is available in the variable
3692*ae771770SStanislav Sedov#    $sharedlib_from_linklib_result
3693*ae771770SStanislav Sedovfunc_cygming_dll_for_implib_fallback ()
3694*ae771770SStanislav Sedov{
3695*ae771770SStanislav Sedov  $opt_debug
3696*ae771770SStanislav Sedov  if func_cygming_gnu_implib_p "$1" ; then
3697*ae771770SStanislav Sedov    # binutils import library
3698*ae771770SStanislav Sedov    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
3699*ae771770SStanislav Sedov  elif func_cygming_ms_implib_p "$1" ; then
3700*ae771770SStanislav Sedov    # ms-generated import library
3701*ae771770SStanislav Sedov    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
3702*ae771770SStanislav Sedov  else
3703*ae771770SStanislav Sedov    # unknown
3704*ae771770SStanislav Sedov    sharedlib_from_linklib_result=""
3705*ae771770SStanislav Sedov  fi
3706*ae771770SStanislav Sedov}
3707*ae771770SStanislav Sedov
3708*ae771770SStanislav Sedov
3709*ae771770SStanislav Sedov# func_extract_an_archive dir oldlib
3710*ae771770SStanislav Sedovfunc_extract_an_archive ()
3711*ae771770SStanislav Sedov{
3712*ae771770SStanislav Sedov    $opt_debug
3713*ae771770SStanislav Sedov    f_ex_an_ar_dir="$1"; shift
3714*ae771770SStanislav Sedov    f_ex_an_ar_oldlib="$1"
3715*ae771770SStanislav Sedov    if test "$lock_old_archive_extraction" = yes; then
3716*ae771770SStanislav Sedov      lockfile=$f_ex_an_ar_oldlib.lock
3717*ae771770SStanislav Sedov      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3718*ae771770SStanislav Sedov	func_echo "Waiting for $lockfile to be removed"
3719*ae771770SStanislav Sedov	sleep 2
3720*ae771770SStanislav Sedov      done
3721*ae771770SStanislav Sedov    fi
3722*ae771770SStanislav Sedov    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
3723*ae771770SStanislav Sedov		   'stat=$?; rm -f "$lockfile"; exit $stat'
3724*ae771770SStanislav Sedov    if test "$lock_old_archive_extraction" = yes; then
3725*ae771770SStanislav Sedov      $opt_dry_run || rm -f "$lockfile"
3726*ae771770SStanislav Sedov    fi
3727*ae771770SStanislav Sedov    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
3728*ae771770SStanislav Sedov     :
3729*ae771770SStanislav Sedov    else
3730*ae771770SStanislav Sedov      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
3731*ae771770SStanislav Sedov    fi
3732*ae771770SStanislav Sedov}
3733*ae771770SStanislav Sedov
3734*ae771770SStanislav Sedov
3735*ae771770SStanislav Sedov# func_extract_archives gentop oldlib ...
3736*ae771770SStanislav Sedovfunc_extract_archives ()
3737*ae771770SStanislav Sedov{
3738*ae771770SStanislav Sedov    $opt_debug
3739*ae771770SStanislav Sedov    my_gentop="$1"; shift
3740*ae771770SStanislav Sedov    my_oldlibs=${1+"$@"}
3741*ae771770SStanislav Sedov    my_oldobjs=""
3742*ae771770SStanislav Sedov    my_xlib=""
3743*ae771770SStanislav Sedov    my_xabs=""
3744*ae771770SStanislav Sedov    my_xdir=""
3745*ae771770SStanislav Sedov
3746*ae771770SStanislav Sedov    for my_xlib in $my_oldlibs; do
3747*ae771770SStanislav Sedov      # Extract the objects.
3748*ae771770SStanislav Sedov      case $my_xlib in
3749*ae771770SStanislav Sedov	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
3750*ae771770SStanislav Sedov	*) my_xabs=`pwd`"/$my_xlib" ;;
3751*ae771770SStanislav Sedov      esac
3752*ae771770SStanislav Sedov      func_basename "$my_xlib"
3753*ae771770SStanislav Sedov      my_xlib="$func_basename_result"
3754*ae771770SStanislav Sedov      my_xlib_u=$my_xlib
3755*ae771770SStanislav Sedov      while :; do
3756*ae771770SStanislav Sedov        case " $extracted_archives " in
3757*ae771770SStanislav Sedov	*" $my_xlib_u "*)
3758*ae771770SStanislav Sedov	  func_arith $extracted_serial + 1
3759*ae771770SStanislav Sedov	  extracted_serial=$func_arith_result
3760*ae771770SStanislav Sedov	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
3761*ae771770SStanislav Sedov	*) break ;;
3762*ae771770SStanislav Sedov	esac
3763*ae771770SStanislav Sedov      done
3764*ae771770SStanislav Sedov      extracted_archives="$extracted_archives $my_xlib_u"
3765*ae771770SStanislav Sedov      my_xdir="$my_gentop/$my_xlib_u"
3766*ae771770SStanislav Sedov
3767*ae771770SStanislav Sedov      func_mkdir_p "$my_xdir"
3768*ae771770SStanislav Sedov
3769*ae771770SStanislav Sedov      case $host in
3770*ae771770SStanislav Sedov      *-darwin*)
3771*ae771770SStanislav Sedov	func_verbose "Extracting $my_xabs"
3772*ae771770SStanislav Sedov	# Do not bother doing anything if just a dry run
3773*ae771770SStanislav Sedov	$opt_dry_run || {
3774*ae771770SStanislav Sedov	  darwin_orig_dir=`pwd`
3775*ae771770SStanislav Sedov	  cd $my_xdir || exit $?
3776*ae771770SStanislav Sedov	  darwin_archive=$my_xabs
3777*ae771770SStanislav Sedov	  darwin_curdir=`pwd`
3778*ae771770SStanislav Sedov	  darwin_base_archive=`basename "$darwin_archive"`
3779*ae771770SStanislav Sedov	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
3780*ae771770SStanislav Sedov	  if test -n "$darwin_arches"; then
3781*ae771770SStanislav Sedov	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
3782*ae771770SStanislav Sedov	    darwin_arch=
3783*ae771770SStanislav Sedov	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
3784*ae771770SStanislav Sedov	    for darwin_arch in  $darwin_arches ; do
3785*ae771770SStanislav Sedov	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3786*ae771770SStanislav Sedov	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
3787*ae771770SStanislav Sedov	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3788*ae771770SStanislav Sedov	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
3789*ae771770SStanislav Sedov	      cd "$darwin_curdir"
3790*ae771770SStanislav Sedov	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
3791*ae771770SStanislav Sedov	    done # $darwin_arches
3792*ae771770SStanislav Sedov            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
3793*ae771770SStanislav Sedov	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
3794*ae771770SStanislav Sedov	    darwin_file=
3795*ae771770SStanislav Sedov	    darwin_files=
3796*ae771770SStanislav Sedov	    for darwin_file in $darwin_filelist; do
3797*ae771770SStanislav Sedov	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
3798*ae771770SStanislav Sedov	      $LIPO -create -output "$darwin_file" $darwin_files
3799*ae771770SStanislav Sedov	    done # $darwin_filelist
3800*ae771770SStanislav Sedov	    $RM -rf unfat-$$
3801*ae771770SStanislav Sedov	    cd "$darwin_orig_dir"
3802*ae771770SStanislav Sedov	  else
3803*ae771770SStanislav Sedov	    cd $darwin_orig_dir
3804*ae771770SStanislav Sedov	    func_extract_an_archive "$my_xdir" "$my_xabs"
3805*ae771770SStanislav Sedov	  fi # $darwin_arches
3806*ae771770SStanislav Sedov	} # !$opt_dry_run
3807*ae771770SStanislav Sedov	;;
3808*ae771770SStanislav Sedov      *)
3809*ae771770SStanislav Sedov        func_extract_an_archive "$my_xdir" "$my_xabs"
3810*ae771770SStanislav Sedov	;;
3811*ae771770SStanislav Sedov      esac
3812*ae771770SStanislav Sedov      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
3813*ae771770SStanislav Sedov    done
3814*ae771770SStanislav Sedov
3815*ae771770SStanislav Sedov    func_extract_archives_result="$my_oldobjs"
3816*ae771770SStanislav Sedov}
3817*ae771770SStanislav Sedov
3818*ae771770SStanislav Sedov
3819*ae771770SStanislav Sedov# func_emit_wrapper [arg=no]
3820*ae771770SStanislav Sedov#
3821*ae771770SStanislav Sedov# Emit a libtool wrapper script on stdout.
3822*ae771770SStanislav Sedov# Don't directly open a file because we may want to
3823*ae771770SStanislav Sedov# incorporate the script contents within a cygwin/mingw
3824*ae771770SStanislav Sedov# wrapper executable.  Must ONLY be called from within
3825*ae771770SStanislav Sedov# func_mode_link because it depends on a number of variables
3826*ae771770SStanislav Sedov# set therein.
3827*ae771770SStanislav Sedov#
3828*ae771770SStanislav Sedov# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
3829*ae771770SStanislav Sedov# variable will take.  If 'yes', then the emitted script
3830*ae771770SStanislav Sedov# will assume that the directory in which it is stored is
3831*ae771770SStanislav Sedov# the $objdir directory.  This is a cygwin/mingw-specific
3832*ae771770SStanislav Sedov# behavior.
3833*ae771770SStanislav Sedovfunc_emit_wrapper ()
3834*ae771770SStanislav Sedov{
3835*ae771770SStanislav Sedov	func_emit_wrapper_arg1=${1-no}
3836*ae771770SStanislav Sedov
3837*ae771770SStanislav Sedov	$ECHO "\
3838*ae771770SStanislav Sedov#! $SHELL
3839*ae771770SStanislav Sedov
3840*ae771770SStanislav Sedov# $output - temporary wrapper script for $objdir/$outputname
3841*ae771770SStanislav Sedov# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
3842*ae771770SStanislav Sedov#
3843*ae771770SStanislav Sedov# The $output program cannot be directly executed until all the libtool
3844*ae771770SStanislav Sedov# libraries that it depends on are installed.
3845*ae771770SStanislav Sedov#
3846*ae771770SStanislav Sedov# This wrapper script should never be moved out of the build directory.
3847*ae771770SStanislav Sedov# If it is, it will not operate correctly.
3848*ae771770SStanislav Sedov
3849*ae771770SStanislav Sedov# Sed substitution that helps us do robust quoting.  It backslashifies
3850*ae771770SStanislav Sedov# metacharacters that are still active within double-quoted strings.
3851*ae771770SStanislav Sedovsed_quote_subst='$sed_quote_subst'
3852*ae771770SStanislav Sedov
3853*ae771770SStanislav Sedov# Be Bourne compatible
3854*ae771770SStanislav Sedovif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
3855*ae771770SStanislav Sedov  emulate sh
3856*ae771770SStanislav Sedov  NULLCMD=:
3857*ae771770SStanislav Sedov  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
3858*ae771770SStanislav Sedov  # is contrary to our usage.  Disable this feature.
3859*ae771770SStanislav Sedov  alias -g '\${1+\"\$@\"}'='\"\$@\"'
3860*ae771770SStanislav Sedov  setopt NO_GLOB_SUBST
3861*ae771770SStanislav Sedovelse
3862*ae771770SStanislav Sedov  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
3863*ae771770SStanislav Sedovfi
3864*ae771770SStanislav SedovBIN_SH=xpg4; export BIN_SH # for Tru64
3865*ae771770SStanislav SedovDUALCASE=1; export DUALCASE # for MKS sh
3866*ae771770SStanislav Sedov
3867*ae771770SStanislav Sedov# The HP-UX ksh and POSIX shell print the target directory to stdout
3868*ae771770SStanislav Sedov# if CDPATH is set.
3869*ae771770SStanislav Sedov(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
3870*ae771770SStanislav Sedov
3871*ae771770SStanislav Sedovrelink_command=\"$relink_command\"
3872*ae771770SStanislav Sedov
3873*ae771770SStanislav Sedov# This environment variable determines our operation mode.
3874*ae771770SStanislav Sedovif test \"\$libtool_install_magic\" = \"$magic\"; then
3875*ae771770SStanislav Sedov  # install mode needs the following variables:
3876*ae771770SStanislav Sedov  generated_by_libtool_version='$macro_version'
3877*ae771770SStanislav Sedov  notinst_deplibs='$notinst_deplibs'
3878*ae771770SStanislav Sedovelse
3879*ae771770SStanislav Sedov  # When we are sourced in execute mode, \$file and \$ECHO are already set.
3880*ae771770SStanislav Sedov  if test \"\$libtool_execute_magic\" != \"$magic\"; then
3881*ae771770SStanislav Sedov    file=\"\$0\""
3882*ae771770SStanislav Sedov
3883*ae771770SStanislav Sedov    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
3884*ae771770SStanislav Sedov    $ECHO "\
3885*ae771770SStanislav Sedov
3886*ae771770SStanislav Sedov# A function that is used when there is no print builtin or printf.
3887*ae771770SStanislav Sedovfunc_fallback_echo ()
3888*ae771770SStanislav Sedov{
3889*ae771770SStanislav Sedov  eval 'cat <<_LTECHO_EOF
3890*ae771770SStanislav Sedov\$1
3891*ae771770SStanislav Sedov_LTECHO_EOF'
3892*ae771770SStanislav Sedov}
3893*ae771770SStanislav Sedov    ECHO=\"$qECHO\"
3894*ae771770SStanislav Sedov  fi
3895*ae771770SStanislav Sedov
3896*ae771770SStanislav Sedov# Very basic option parsing. These options are (a) specific to
3897*ae771770SStanislav Sedov# the libtool wrapper, (b) are identical between the wrapper
3898*ae771770SStanislav Sedov# /script/ and the wrapper /executable/ which is used only on
3899*ae771770SStanislav Sedov# windows platforms, and (c) all begin with the string "--lt-"
3900*ae771770SStanislav Sedov# (application programs are unlikely to have options which match
3901*ae771770SStanislav Sedov# this pattern).
3902*ae771770SStanislav Sedov#
3903*ae771770SStanislav Sedov# There are only two supported options: --lt-debug and
3904*ae771770SStanislav Sedov# --lt-dump-script. There is, deliberately, no --lt-help.
3905*ae771770SStanislav Sedov#
3906*ae771770SStanislav Sedov# The first argument to this parsing function should be the
3907*ae771770SStanislav Sedov# script's $0 value, followed by "$@".
3908*ae771770SStanislav Sedovlt_option_debug=
3909*ae771770SStanislav Sedovfunc_parse_lt_options ()
3910*ae771770SStanislav Sedov{
3911*ae771770SStanislav Sedov  lt_script_arg0=\$0
3912*ae771770SStanislav Sedov  shift
3913*ae771770SStanislav Sedov  for lt_opt
3914*ae771770SStanislav Sedov  do
3915*ae771770SStanislav Sedov    case \"\$lt_opt\" in
3916*ae771770SStanislav Sedov    --lt-debug) lt_option_debug=1 ;;
3917*ae771770SStanislav Sedov    --lt-dump-script)
3918*ae771770SStanislav Sedov        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
3919*ae771770SStanislav Sedov        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
3920*ae771770SStanislav Sedov        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
3921*ae771770SStanislav Sedov        cat \"\$lt_dump_D/\$lt_dump_F\"
3922*ae771770SStanislav Sedov        exit 0
3923*ae771770SStanislav Sedov      ;;
3924*ae771770SStanislav Sedov    --lt-*)
3925*ae771770SStanislav Sedov        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
3926*ae771770SStanislav Sedov        exit 1
3927*ae771770SStanislav Sedov      ;;
3928*ae771770SStanislav Sedov    esac
3929*ae771770SStanislav Sedov  done
3930*ae771770SStanislav Sedov
3931*ae771770SStanislav Sedov  # Print the debug banner immediately:
3932*ae771770SStanislav Sedov  if test -n \"\$lt_option_debug\"; then
3933*ae771770SStanislav Sedov    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
3934*ae771770SStanislav Sedov  fi
3935*ae771770SStanislav Sedov}
3936*ae771770SStanislav Sedov
3937*ae771770SStanislav Sedov# Used when --lt-debug. Prints its arguments to stdout
3938*ae771770SStanislav Sedov# (redirection is the responsibility of the caller)
3939*ae771770SStanislav Sedovfunc_lt_dump_args ()
3940*ae771770SStanislav Sedov{
3941*ae771770SStanislav Sedov  lt_dump_args_N=1;
3942*ae771770SStanislav Sedov  for lt_arg
3943*ae771770SStanislav Sedov  do
3944*ae771770SStanislav Sedov    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
3945*ae771770SStanislav Sedov    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
3946*ae771770SStanislav Sedov  done
3947*ae771770SStanislav Sedov}
3948*ae771770SStanislav Sedov
3949*ae771770SStanislav Sedov# Core function for launching the target application
3950*ae771770SStanislav Sedovfunc_exec_program_core ()
3951*ae771770SStanislav Sedov{
3952*ae771770SStanislav Sedov"
3953*ae771770SStanislav Sedov  case $host in
3954*ae771770SStanislav Sedov  # Backslashes separate directories on plain windows
3955*ae771770SStanislav Sedov  *-*-mingw | *-*-os2* | *-cegcc*)
3956*ae771770SStanislav Sedov    $ECHO "\
3957*ae771770SStanislav Sedov      if test -n \"\$lt_option_debug\"; then
3958*ae771770SStanislav Sedov        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
3959*ae771770SStanislav Sedov        func_lt_dump_args \${1+\"\$@\"} 1>&2
3960*ae771770SStanislav Sedov      fi
3961*ae771770SStanislav Sedov      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
3962*ae771770SStanislav Sedov"
3963*ae771770SStanislav Sedov    ;;
3964*ae771770SStanislav Sedov
3965*ae771770SStanislav Sedov  *)
3966*ae771770SStanislav Sedov    $ECHO "\
3967*ae771770SStanislav Sedov      if test -n \"\$lt_option_debug\"; then
3968*ae771770SStanislav Sedov        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
3969*ae771770SStanislav Sedov        func_lt_dump_args \${1+\"\$@\"} 1>&2
3970*ae771770SStanislav Sedov      fi
3971*ae771770SStanislav Sedov      exec \"\$progdir/\$program\" \${1+\"\$@\"}
3972*ae771770SStanislav Sedov"
3973*ae771770SStanislav Sedov    ;;
3974*ae771770SStanislav Sedov  esac
3975*ae771770SStanislav Sedov  $ECHO "\
3976*ae771770SStanislav Sedov      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
3977*ae771770SStanislav Sedov      exit 1
3978*ae771770SStanislav Sedov}
3979*ae771770SStanislav Sedov
3980*ae771770SStanislav Sedov# A function to encapsulate launching the target application
3981*ae771770SStanislav Sedov# Strips options in the --lt-* namespace from \$@ and
3982*ae771770SStanislav Sedov# launches target application with the remaining arguments.
3983*ae771770SStanislav Sedovfunc_exec_program ()
3984*ae771770SStanislav Sedov{
3985*ae771770SStanislav Sedov  for lt_wr_arg
3986*ae771770SStanislav Sedov  do
3987*ae771770SStanislav Sedov    case \$lt_wr_arg in
3988*ae771770SStanislav Sedov    --lt-*) ;;
3989*ae771770SStanislav Sedov    *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
3990*ae771770SStanislav Sedov    esac
3991*ae771770SStanislav Sedov    shift
3992*ae771770SStanislav Sedov  done
3993*ae771770SStanislav Sedov  func_exec_program_core \${1+\"\$@\"}
3994*ae771770SStanislav Sedov}
3995*ae771770SStanislav Sedov
3996*ae771770SStanislav Sedov  # Parse options
3997*ae771770SStanislav Sedov  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
3998*ae771770SStanislav Sedov
3999*ae771770SStanislav Sedov  # Find the directory that this script lives in.
4000*ae771770SStanislav Sedov  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
4001*ae771770SStanislav Sedov  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
4002*ae771770SStanislav Sedov
4003*ae771770SStanislav Sedov  # Follow symbolic links until we get to the real thisdir.
4004*ae771770SStanislav Sedov  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
4005*ae771770SStanislav Sedov  while test -n \"\$file\"; do
4006*ae771770SStanislav Sedov    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
4007*ae771770SStanislav Sedov
4008*ae771770SStanislav Sedov    # If there was a directory component, then change thisdir.
4009*ae771770SStanislav Sedov    if test \"x\$destdir\" != \"x\$file\"; then
4010*ae771770SStanislav Sedov      case \"\$destdir\" in
4011*ae771770SStanislav Sedov      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
4012*ae771770SStanislav Sedov      *) thisdir=\"\$thisdir/\$destdir\" ;;
4013*ae771770SStanislav Sedov      esac
4014*ae771770SStanislav Sedov    fi
4015*ae771770SStanislav Sedov
4016*ae771770SStanislav Sedov    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
4017*ae771770SStanislav Sedov    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
4018*ae771770SStanislav Sedov  done
4019*ae771770SStanislav Sedov
4020*ae771770SStanislav Sedov  # Usually 'no', except on cygwin/mingw when embedded into
4021*ae771770SStanislav Sedov  # the cwrapper.
4022*ae771770SStanislav Sedov  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
4023*ae771770SStanislav Sedov  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
4024*ae771770SStanislav Sedov    # special case for '.'
4025*ae771770SStanislav Sedov    if test \"\$thisdir\" = \".\"; then
4026*ae771770SStanislav Sedov      thisdir=\`pwd\`
4027*ae771770SStanislav Sedov    fi
4028*ae771770SStanislav Sedov    # remove .libs from thisdir
4029*ae771770SStanislav Sedov    case \"\$thisdir\" in
4030*ae771770SStanislav Sedov    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
4031*ae771770SStanislav Sedov    $objdir )   thisdir=. ;;
4032*ae771770SStanislav Sedov    esac
4033*ae771770SStanislav Sedov  fi
4034*ae771770SStanislav Sedov
4035*ae771770SStanislav Sedov  # Try to get the absolute directory name.
4036*ae771770SStanislav Sedov  absdir=\`cd \"\$thisdir\" && pwd\`
4037*ae771770SStanislav Sedov  test -n \"\$absdir\" && thisdir=\"\$absdir\"
4038*ae771770SStanislav Sedov"
4039*ae771770SStanislav Sedov
4040*ae771770SStanislav Sedov	if test "$fast_install" = yes; then
4041*ae771770SStanislav Sedov	  $ECHO "\
4042*ae771770SStanislav Sedov  program=lt-'$outputname'$exeext
4043*ae771770SStanislav Sedov  progdir=\"\$thisdir/$objdir\"
4044*ae771770SStanislav Sedov
4045*ae771770SStanislav Sedov  if test ! -f \"\$progdir/\$program\" ||
4046*ae771770SStanislav Sedov     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
4047*ae771770SStanislav Sedov       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
4048*ae771770SStanislav Sedov
4049*ae771770SStanislav Sedov    file=\"\$\$-\$program\"
4050*ae771770SStanislav Sedov
4051*ae771770SStanislav Sedov    if test ! -d \"\$progdir\"; then
4052*ae771770SStanislav Sedov      $MKDIR \"\$progdir\"
4053*ae771770SStanislav Sedov    else
4054*ae771770SStanislav Sedov      $RM \"\$progdir/\$file\"
4055*ae771770SStanislav Sedov    fi"
4056*ae771770SStanislav Sedov
4057*ae771770SStanislav Sedov	  $ECHO "\
4058*ae771770SStanislav Sedov
4059*ae771770SStanislav Sedov    # relink executable if necessary
4060*ae771770SStanislav Sedov    if test -n \"\$relink_command\"; then
4061*ae771770SStanislav Sedov      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
4062*ae771770SStanislav Sedov      else
4063*ae771770SStanislav Sedov	$ECHO \"\$relink_command_output\" >&2
4064*ae771770SStanislav Sedov	$RM \"\$progdir/\$file\"
4065*ae771770SStanislav Sedov	exit 1
4066*ae771770SStanislav Sedov      fi
4067*ae771770SStanislav Sedov    fi
4068*ae771770SStanislav Sedov
4069*ae771770SStanislav Sedov    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
4070*ae771770SStanislav Sedov    { $RM \"\$progdir/\$program\";
4071*ae771770SStanislav Sedov      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
4072*ae771770SStanislav Sedov    $RM \"\$progdir/\$file\"
4073*ae771770SStanislav Sedov  fi"
4074*ae771770SStanislav Sedov	else
4075*ae771770SStanislav Sedov	  $ECHO "\
4076*ae771770SStanislav Sedov  program='$outputname'
4077*ae771770SStanislav Sedov  progdir=\"\$thisdir/$objdir\"
4078*ae771770SStanislav Sedov"
4079*ae771770SStanislav Sedov	fi
4080*ae771770SStanislav Sedov
4081*ae771770SStanislav Sedov	$ECHO "\
4082*ae771770SStanislav Sedov
4083*ae771770SStanislav Sedov  if test -f \"\$progdir/\$program\"; then"
4084*ae771770SStanislav Sedov
4085*ae771770SStanislav Sedov	# fixup the dll searchpath if we need to.
4086*ae771770SStanislav Sedov	#
4087*ae771770SStanislav Sedov	# Fix the DLL searchpath if we need to.  Do this before prepending
4088*ae771770SStanislav Sedov	# to shlibpath, because on Windows, both are PATH and uninstalled
4089*ae771770SStanislav Sedov	# libraries must come first.
4090*ae771770SStanislav Sedov	if test -n "$dllsearchpath"; then
4091*ae771770SStanislav Sedov	  $ECHO "\
4092*ae771770SStanislav Sedov    # Add the dll search path components to the executable PATH
4093*ae771770SStanislav Sedov    PATH=$dllsearchpath:\$PATH
4094*ae771770SStanislav Sedov"
4095*ae771770SStanislav Sedov	fi
4096*ae771770SStanislav Sedov
4097*ae771770SStanislav Sedov	# Export our shlibpath_var if we have one.
4098*ae771770SStanislav Sedov	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4099*ae771770SStanislav Sedov	  $ECHO "\
4100*ae771770SStanislav Sedov    # Add our own library path to $shlibpath_var
4101*ae771770SStanislav Sedov    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
4102*ae771770SStanislav Sedov
4103*ae771770SStanislav Sedov    # Some systems cannot cope with colon-terminated $shlibpath_var
4104*ae771770SStanislav Sedov    # The second colon is a workaround for a bug in BeOS R4 sed
4105*ae771770SStanislav Sedov    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
4106*ae771770SStanislav Sedov
4107*ae771770SStanislav Sedov    export $shlibpath_var
4108*ae771770SStanislav Sedov"
4109*ae771770SStanislav Sedov	fi
4110*ae771770SStanislav Sedov
4111*ae771770SStanislav Sedov	$ECHO "\
4112*ae771770SStanislav Sedov    if test \"\$libtool_execute_magic\" != \"$magic\"; then
4113*ae771770SStanislav Sedov      # Run the actual program with our arguments.
4114*ae771770SStanislav Sedov      func_exec_program \${1+\"\$@\"}
4115*ae771770SStanislav Sedov    fi
4116*ae771770SStanislav Sedov  else
4117*ae771770SStanislav Sedov    # The program doesn't exist.
4118*ae771770SStanislav Sedov    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
4119*ae771770SStanislav Sedov    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
4120*ae771770SStanislav Sedov    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
4121*ae771770SStanislav Sedov    exit 1
4122*ae771770SStanislav Sedov  fi
4123*ae771770SStanislav Sedovfi\
4124*ae771770SStanislav Sedov"
4125*ae771770SStanislav Sedov}
4126*ae771770SStanislav Sedov
4127*ae771770SStanislav Sedov
4128*ae771770SStanislav Sedov# func_emit_cwrapperexe_src
4129*ae771770SStanislav Sedov# emit the source code for a wrapper executable on stdout
4130*ae771770SStanislav Sedov# Must ONLY be called from within func_mode_link because
4131*ae771770SStanislav Sedov# it depends on a number of variable set therein.
4132*ae771770SStanislav Sedovfunc_emit_cwrapperexe_src ()
4133*ae771770SStanislav Sedov{
4134*ae771770SStanislav Sedov	cat <<EOF
4135*ae771770SStanislav Sedov
4136*ae771770SStanislav Sedov/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
4137*ae771770SStanislav Sedov   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
4138*ae771770SStanislav Sedov
4139*ae771770SStanislav Sedov   The $output program cannot be directly executed until all the libtool
4140*ae771770SStanislav Sedov   libraries that it depends on are installed.
4141*ae771770SStanislav Sedov
4142*ae771770SStanislav Sedov   This wrapper executable should never be moved out of the build directory.
4143*ae771770SStanislav Sedov   If it is, it will not operate correctly.
4144*ae771770SStanislav Sedov*/
4145*ae771770SStanislav SedovEOF
4146*ae771770SStanislav Sedov	    cat <<"EOF"
4147*ae771770SStanislav Sedov#ifdef _MSC_VER
4148*ae771770SStanislav Sedov# define _CRT_SECURE_NO_DEPRECATE 1
4149*ae771770SStanislav Sedov#endif
4150*ae771770SStanislav Sedov#include <stdio.h>
4151*ae771770SStanislav Sedov#include <stdlib.h>
4152*ae771770SStanislav Sedov#ifdef _MSC_VER
4153*ae771770SStanislav Sedov# include <direct.h>
4154*ae771770SStanislav Sedov# include <process.h>
4155*ae771770SStanislav Sedov# include <io.h>
4156*ae771770SStanislav Sedov#else
4157*ae771770SStanislav Sedov# include <unistd.h>
4158*ae771770SStanislav Sedov# include <stdint.h>
4159*ae771770SStanislav Sedov# ifdef __CYGWIN__
4160*ae771770SStanislav Sedov#  include <io.h>
4161*ae771770SStanislav Sedov# endif
4162*ae771770SStanislav Sedov#endif
4163*ae771770SStanislav Sedov#include <malloc.h>
4164*ae771770SStanislav Sedov#include <stdarg.h>
4165*ae771770SStanislav Sedov#include <assert.h>
4166*ae771770SStanislav Sedov#include <string.h>
4167*ae771770SStanislav Sedov#include <ctype.h>
4168*ae771770SStanislav Sedov#include <errno.h>
4169*ae771770SStanislav Sedov#include <fcntl.h>
4170*ae771770SStanislav Sedov#include <sys/stat.h>
4171*ae771770SStanislav Sedov
4172*ae771770SStanislav Sedov/* declarations of non-ANSI functions */
4173*ae771770SStanislav Sedov#if defined(__MINGW32__)
4174*ae771770SStanislav Sedov# ifdef __STRICT_ANSI__
4175*ae771770SStanislav Sedovint _putenv (const char *);
4176*ae771770SStanislav Sedov# endif
4177*ae771770SStanislav Sedov#elif defined(__CYGWIN__)
4178*ae771770SStanislav Sedov# ifdef __STRICT_ANSI__
4179*ae771770SStanislav Sedovchar *realpath (const char *, char *);
4180*ae771770SStanislav Sedovint putenv (char *);
4181*ae771770SStanislav Sedovint setenv (const char *, const char *, int);
4182*ae771770SStanislav Sedov# endif
4183*ae771770SStanislav Sedov/* #elif defined (other platforms) ... */
4184*ae771770SStanislav Sedov#endif
4185*ae771770SStanislav Sedov
4186*ae771770SStanislav Sedov/* portability defines, excluding path handling macros */
4187*ae771770SStanislav Sedov#if defined(_MSC_VER)
4188*ae771770SStanislav Sedov# define setmode _setmode
4189*ae771770SStanislav Sedov# define stat    _stat
4190*ae771770SStanislav Sedov# define chmod   _chmod
4191*ae771770SStanislav Sedov# define getcwd  _getcwd
4192*ae771770SStanislav Sedov# define putenv  _putenv
4193*ae771770SStanislav Sedov# define S_IXUSR _S_IEXEC
4194*ae771770SStanislav Sedov# ifndef _INTPTR_T_DEFINED
4195*ae771770SStanislav Sedov#  define _INTPTR_T_DEFINED
4196*ae771770SStanislav Sedov#  define intptr_t int
4197*ae771770SStanislav Sedov# endif
4198*ae771770SStanislav Sedov#elif defined(__MINGW32__)
4199*ae771770SStanislav Sedov# define setmode _setmode
4200*ae771770SStanislav Sedov# define stat    _stat
4201*ae771770SStanislav Sedov# define chmod   _chmod
4202*ae771770SStanislav Sedov# define getcwd  _getcwd
4203*ae771770SStanislav Sedov# define putenv  _putenv
4204*ae771770SStanislav Sedov#elif defined(__CYGWIN__)
4205*ae771770SStanislav Sedov# define HAVE_SETENV
4206*ae771770SStanislav Sedov# define FOPEN_WB "wb"
4207*ae771770SStanislav Sedov/* #elif defined (other platforms) ... */
4208*ae771770SStanislav Sedov#endif
4209*ae771770SStanislav Sedov
4210*ae771770SStanislav Sedov#if defined(PATH_MAX)
4211*ae771770SStanislav Sedov# define LT_PATHMAX PATH_MAX
4212*ae771770SStanislav Sedov#elif defined(MAXPATHLEN)
4213*ae771770SStanislav Sedov# define LT_PATHMAX MAXPATHLEN
4214*ae771770SStanislav Sedov#else
4215*ae771770SStanislav Sedov# define LT_PATHMAX 1024
4216*ae771770SStanislav Sedov#endif
4217*ae771770SStanislav Sedov
4218*ae771770SStanislav Sedov#ifndef S_IXOTH
4219*ae771770SStanislav Sedov# define S_IXOTH 0
4220*ae771770SStanislav Sedov#endif
4221*ae771770SStanislav Sedov#ifndef S_IXGRP
4222*ae771770SStanislav Sedov# define S_IXGRP 0
4223*ae771770SStanislav Sedov#endif
4224*ae771770SStanislav Sedov
4225*ae771770SStanislav Sedov/* path handling portability macros */
4226*ae771770SStanislav Sedov#ifndef DIR_SEPARATOR
4227*ae771770SStanislav Sedov# define DIR_SEPARATOR '/'
4228*ae771770SStanislav Sedov# define PATH_SEPARATOR ':'
4229*ae771770SStanislav Sedov#endif
4230*ae771770SStanislav Sedov
4231*ae771770SStanislav Sedov#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
4232*ae771770SStanislav Sedov  defined (__OS2__)
4233*ae771770SStanislav Sedov# define HAVE_DOS_BASED_FILE_SYSTEM
4234*ae771770SStanislav Sedov# define FOPEN_WB "wb"
4235*ae771770SStanislav Sedov# ifndef DIR_SEPARATOR_2
4236*ae771770SStanislav Sedov#  define DIR_SEPARATOR_2 '\\'
4237*ae771770SStanislav Sedov# endif
4238*ae771770SStanislav Sedov# ifndef PATH_SEPARATOR_2
4239*ae771770SStanislav Sedov#  define PATH_SEPARATOR_2 ';'
4240*ae771770SStanislav Sedov# endif
4241*ae771770SStanislav Sedov#endif
4242*ae771770SStanislav Sedov
4243*ae771770SStanislav Sedov#ifndef DIR_SEPARATOR_2
4244*ae771770SStanislav Sedov# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
4245*ae771770SStanislav Sedov#else /* DIR_SEPARATOR_2 */
4246*ae771770SStanislav Sedov# define IS_DIR_SEPARATOR(ch) \
4247*ae771770SStanislav Sedov	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
4248*ae771770SStanislav Sedov#endif /* DIR_SEPARATOR_2 */
4249*ae771770SStanislav Sedov
4250*ae771770SStanislav Sedov#ifndef PATH_SEPARATOR_2
4251*ae771770SStanislav Sedov# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
4252*ae771770SStanislav Sedov#else /* PATH_SEPARATOR_2 */
4253*ae771770SStanislav Sedov# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
4254*ae771770SStanislav Sedov#endif /* PATH_SEPARATOR_2 */
4255*ae771770SStanislav Sedov
4256*ae771770SStanislav Sedov#ifndef FOPEN_WB
4257*ae771770SStanislav Sedov# define FOPEN_WB "w"
4258*ae771770SStanislav Sedov#endif
4259*ae771770SStanislav Sedov#ifndef _O_BINARY
4260*ae771770SStanislav Sedov# define _O_BINARY 0
4261*ae771770SStanislav Sedov#endif
4262*ae771770SStanislav Sedov
4263*ae771770SStanislav Sedov#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
4264*ae771770SStanislav Sedov#define XFREE(stale) do { \
4265*ae771770SStanislav Sedov  if (stale) { free ((void *) stale); stale = 0; } \
4266*ae771770SStanislav Sedov} while (0)
4267*ae771770SStanislav Sedov
4268*ae771770SStanislav Sedov#if defined(LT_DEBUGWRAPPER)
4269*ae771770SStanislav Sedovstatic int lt_debug = 1;
4270*ae771770SStanislav Sedov#else
4271*ae771770SStanislav Sedovstatic int lt_debug = 0;
4272*ae771770SStanislav Sedov#endif
4273*ae771770SStanislav Sedov
4274*ae771770SStanislav Sedovconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
4275*ae771770SStanislav Sedov
4276*ae771770SStanislav Sedovvoid *xmalloc (size_t num);
4277*ae771770SStanislav Sedovchar *xstrdup (const char *string);
4278*ae771770SStanislav Sedovconst char *base_name (const char *name);
4279*ae771770SStanislav Sedovchar *find_executable (const char *wrapper);
4280*ae771770SStanislav Sedovchar *chase_symlinks (const char *pathspec);
4281*ae771770SStanislav Sedovint make_executable (const char *path);
4282*ae771770SStanislav Sedovint check_executable (const char *path);
4283*ae771770SStanislav Sedovchar *strendzap (char *str, const char *pat);
4284*ae771770SStanislav Sedovvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
4285*ae771770SStanislav Sedovvoid lt_fatal (const char *file, int line, const char *message, ...);
4286*ae771770SStanislav Sedovstatic const char *nonnull (const char *s);
4287*ae771770SStanislav Sedovstatic const char *nonempty (const char *s);
4288*ae771770SStanislav Sedovvoid lt_setenv (const char *name, const char *value);
4289*ae771770SStanislav Sedovchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
4290*ae771770SStanislav Sedovvoid lt_update_exe_path (const char *name, const char *value);
4291*ae771770SStanislav Sedovvoid lt_update_lib_path (const char *name, const char *value);
4292*ae771770SStanislav Sedovchar **prepare_spawn (char **argv);
4293*ae771770SStanislav Sedovvoid lt_dump_script (FILE *f);
4294*ae771770SStanislav SedovEOF
4295*ae771770SStanislav Sedov
4296*ae771770SStanislav Sedov	    cat <<EOF
4297*ae771770SStanislav Sedovvolatile const char * MAGIC_EXE = "$magic_exe";
4298*ae771770SStanislav Sedovconst char * LIB_PATH_VARNAME = "$shlibpath_var";
4299*ae771770SStanislav SedovEOF
4300*ae771770SStanislav Sedov
4301*ae771770SStanislav Sedov	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4302*ae771770SStanislav Sedov              func_to_host_path "$temp_rpath"
4303*ae771770SStanislav Sedov	      cat <<EOF
4304*ae771770SStanislav Sedovconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
4305*ae771770SStanislav SedovEOF
4306*ae771770SStanislav Sedov	    else
4307*ae771770SStanislav Sedov	      cat <<"EOF"
4308*ae771770SStanislav Sedovconst char * LIB_PATH_VALUE   = "";
4309*ae771770SStanislav SedovEOF
4310*ae771770SStanislav Sedov	    fi
4311*ae771770SStanislav Sedov
4312*ae771770SStanislav Sedov	    if test -n "$dllsearchpath"; then
4313*ae771770SStanislav Sedov              func_to_host_path "$dllsearchpath:"
4314*ae771770SStanislav Sedov	      cat <<EOF
4315*ae771770SStanislav Sedovconst char * EXE_PATH_VARNAME = "PATH";
4316*ae771770SStanislav Sedovconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
4317*ae771770SStanislav SedovEOF
4318*ae771770SStanislav Sedov	    else
4319*ae771770SStanislav Sedov	      cat <<"EOF"
4320*ae771770SStanislav Sedovconst char * EXE_PATH_VARNAME = "";
4321*ae771770SStanislav Sedovconst char * EXE_PATH_VALUE   = "";
4322*ae771770SStanislav SedovEOF
4323*ae771770SStanislav Sedov	    fi
4324*ae771770SStanislav Sedov
4325*ae771770SStanislav Sedov	    if test "$fast_install" = yes; then
4326*ae771770SStanislav Sedov	      cat <<EOF
4327*ae771770SStanislav Sedovconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
4328*ae771770SStanislav SedovEOF
4329*ae771770SStanislav Sedov	    else
4330*ae771770SStanislav Sedov	      cat <<EOF
4331*ae771770SStanislav Sedovconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
4332*ae771770SStanislav SedovEOF
4333*ae771770SStanislav Sedov	    fi
4334*ae771770SStanislav Sedov
4335*ae771770SStanislav Sedov
4336*ae771770SStanislav Sedov	    cat <<"EOF"
4337*ae771770SStanislav Sedov
4338*ae771770SStanislav Sedov#define LTWRAPPER_OPTION_PREFIX         "--lt-"
4339*ae771770SStanislav Sedov
4340*ae771770SStanislav Sedovstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
4341*ae771770SStanislav Sedovstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
4342*ae771770SStanislav Sedovstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
4343*ae771770SStanislav Sedov
4344*ae771770SStanislav Sedovint
4345*ae771770SStanislav Sedovmain (int argc, char *argv[])
4346*ae771770SStanislav Sedov{
4347*ae771770SStanislav Sedov  char **newargz;
4348*ae771770SStanislav Sedov  int  newargc;
4349*ae771770SStanislav Sedov  char *tmp_pathspec;
4350*ae771770SStanislav Sedov  char *actual_cwrapper_path;
4351*ae771770SStanislav Sedov  char *actual_cwrapper_name;
4352*ae771770SStanislav Sedov  char *target_name;
4353*ae771770SStanislav Sedov  char *lt_argv_zero;
4354*ae771770SStanislav Sedov  intptr_t rval = 127;
4355*ae771770SStanislav Sedov
4356*ae771770SStanislav Sedov  int i;
4357*ae771770SStanislav Sedov
4358*ae771770SStanislav Sedov  program_name = (char *) xstrdup (base_name (argv[0]));
4359*ae771770SStanislav Sedov  newargz = XMALLOC (char *, argc + 1);
4360*ae771770SStanislav Sedov
4361*ae771770SStanislav Sedov  /* very simple arg parsing; don't want to rely on getopt
4362*ae771770SStanislav Sedov   * also, copy all non cwrapper options to newargz, except
4363*ae771770SStanislav Sedov   * argz[0], which is handled differently
4364*ae771770SStanislav Sedov   */
4365*ae771770SStanislav Sedov  newargc=0;
4366*ae771770SStanislav Sedov  for (i = 1; i < argc; i++)
4367*ae771770SStanislav Sedov    {
4368*ae771770SStanislav Sedov      if (strcmp (argv[i], dumpscript_opt) == 0)
4369*ae771770SStanislav Sedov	{
4370*ae771770SStanislav SedovEOF
4371*ae771770SStanislav Sedov	    case "$host" in
4372*ae771770SStanislav Sedov	      *mingw* | *cygwin* )
4373*ae771770SStanislav Sedov		# make stdout use "unix" line endings
4374*ae771770SStanislav Sedov		echo "          setmode(1,_O_BINARY);"
4375*ae771770SStanislav Sedov		;;
4376*ae771770SStanislav Sedov	      esac
4377*ae771770SStanislav Sedov
4378*ae771770SStanislav Sedov	    cat <<"EOF"
4379*ae771770SStanislav Sedov	  lt_dump_script (stdout);
4380*ae771770SStanislav Sedov	  return 0;
4381*ae771770SStanislav Sedov	}
4382*ae771770SStanislav Sedov      if (strcmp (argv[i], debug_opt) == 0)
4383*ae771770SStanislav Sedov	{
4384*ae771770SStanislav Sedov          lt_debug = 1;
4385*ae771770SStanislav Sedov          continue;
4386*ae771770SStanislav Sedov	}
4387*ae771770SStanislav Sedov      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
4388*ae771770SStanislav Sedov        {
4389*ae771770SStanislav Sedov          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
4390*ae771770SStanislav Sedov             namespace, but it is not one of the ones we know about and
4391*ae771770SStanislav Sedov             have already dealt with, above (inluding dump-script), then
4392*ae771770SStanislav Sedov             report an error. Otherwise, targets might begin to believe
4393*ae771770SStanislav Sedov             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
4394*ae771770SStanislav Sedov             namespace. The first time any user complains about this, we'll
4395*ae771770SStanislav Sedov             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
4396*ae771770SStanislav Sedov             or a configure.ac-settable value.
4397*ae771770SStanislav Sedov           */
4398*ae771770SStanislav Sedov          lt_fatal (__FILE__, __LINE__,
4399*ae771770SStanislav Sedov		    "unrecognized %s option: '%s'",
4400*ae771770SStanislav Sedov                    ltwrapper_option_prefix, argv[i]);
4401*ae771770SStanislav Sedov        }
4402*ae771770SStanislav Sedov      /* otherwise ... */
4403*ae771770SStanislav Sedov      newargz[++newargc] = xstrdup (argv[i]);
4404*ae771770SStanislav Sedov    }
4405*ae771770SStanislav Sedov  newargz[++newargc] = NULL;
4406*ae771770SStanislav Sedov
4407*ae771770SStanislav SedovEOF
4408*ae771770SStanislav Sedov	    cat <<EOF
4409*ae771770SStanislav Sedov  /* The GNU banner must be the first non-error debug message */
4410*ae771770SStanislav Sedov  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
4411*ae771770SStanislav SedovEOF
4412*ae771770SStanislav Sedov	    cat <<"EOF"
4413*ae771770SStanislav Sedov  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
4414*ae771770SStanislav Sedov  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
4415*ae771770SStanislav Sedov
4416*ae771770SStanislav Sedov  tmp_pathspec = find_executable (argv[0]);
4417*ae771770SStanislav Sedov  if (tmp_pathspec == NULL)
4418*ae771770SStanislav Sedov    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
4419*ae771770SStanislav Sedov  lt_debugprintf (__FILE__, __LINE__,
4420*ae771770SStanislav Sedov                  "(main) found exe (before symlink chase) at: %s\n",
4421*ae771770SStanislav Sedov		  tmp_pathspec);
4422*ae771770SStanislav Sedov
4423*ae771770SStanislav Sedov  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
4424*ae771770SStanislav Sedov  lt_debugprintf (__FILE__, __LINE__,
4425*ae771770SStanislav Sedov                  "(main) found exe (after symlink chase) at: %s\n",
4426*ae771770SStanislav Sedov		  actual_cwrapper_path);
4427*ae771770SStanislav Sedov  XFREE (tmp_pathspec);
4428*ae771770SStanislav Sedov
4429*ae771770SStanislav Sedov  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
4430*ae771770SStanislav Sedov  strendzap (actual_cwrapper_path, actual_cwrapper_name);
4431*ae771770SStanislav Sedov
4432*ae771770SStanislav Sedov  /* wrapper name transforms */
4433*ae771770SStanislav Sedov  strendzap (actual_cwrapper_name, ".exe");
4434*ae771770SStanislav Sedov  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
4435*ae771770SStanislav Sedov  XFREE (actual_cwrapper_name);
4436*ae771770SStanislav Sedov  actual_cwrapper_name = tmp_pathspec;
4437*ae771770SStanislav Sedov  tmp_pathspec = 0;
4438*ae771770SStanislav Sedov
4439*ae771770SStanislav Sedov  /* target_name transforms -- use actual target program name; might have lt- prefix */
4440*ae771770SStanislav Sedov  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
4441*ae771770SStanislav Sedov  strendzap (target_name, ".exe");
4442*ae771770SStanislav Sedov  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
4443*ae771770SStanislav Sedov  XFREE (target_name);
4444*ae771770SStanislav Sedov  target_name = tmp_pathspec;
4445*ae771770SStanislav Sedov  tmp_pathspec = 0;
4446*ae771770SStanislav Sedov
4447*ae771770SStanislav Sedov  lt_debugprintf (__FILE__, __LINE__,
4448*ae771770SStanislav Sedov		  "(main) libtool target name: %s\n",
4449*ae771770SStanislav Sedov		  target_name);
4450*ae771770SStanislav SedovEOF
4451*ae771770SStanislav Sedov
4452*ae771770SStanislav Sedov	    cat <<EOF
4453*ae771770SStanislav Sedov  newargz[0] =
4454*ae771770SStanislav Sedov    XMALLOC (char, (strlen (actual_cwrapper_path) +
4455*ae771770SStanislav Sedov		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
4456*ae771770SStanislav Sedov  strcpy (newargz[0], actual_cwrapper_path);
4457*ae771770SStanislav Sedov  strcat (newargz[0], "$objdir");
4458*ae771770SStanislav Sedov  strcat (newargz[0], "/");
4459*ae771770SStanislav SedovEOF
4460*ae771770SStanislav Sedov
4461*ae771770SStanislav Sedov	    cat <<"EOF"
4462*ae771770SStanislav Sedov  /* stop here, and copy so we don't have to do this twice */
4463*ae771770SStanislav Sedov  tmp_pathspec = xstrdup (newargz[0]);
4464*ae771770SStanislav Sedov
4465*ae771770SStanislav Sedov  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
4466*ae771770SStanislav Sedov  strcat (newargz[0], actual_cwrapper_name);
4467*ae771770SStanislav Sedov
4468*ae771770SStanislav Sedov  /* DO want the lt- prefix here if it exists, so use target_name */
4469*ae771770SStanislav Sedov  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
4470*ae771770SStanislav Sedov  XFREE (tmp_pathspec);
4471*ae771770SStanislav Sedov  tmp_pathspec = NULL;
4472*ae771770SStanislav SedovEOF
4473*ae771770SStanislav Sedov
4474*ae771770SStanislav Sedov	    case $host_os in
4475*ae771770SStanislav Sedov	      mingw*)
4476*ae771770SStanislav Sedov	    cat <<"EOF"
4477*ae771770SStanislav Sedov  {
4478*ae771770SStanislav Sedov    char* p;
4479*ae771770SStanislav Sedov    while ((p = strchr (newargz[0], '\\')) != NULL)
4480*ae771770SStanislav Sedov      {
4481*ae771770SStanislav Sedov	*p = '/';
4482*ae771770SStanislav Sedov      }
4483*ae771770SStanislav Sedov    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
4484*ae771770SStanislav Sedov      {
4485*ae771770SStanislav Sedov	*p = '/';
4486*ae771770SStanislav Sedov      }
4487*ae771770SStanislav Sedov  }
4488*ae771770SStanislav SedovEOF
4489*ae771770SStanislav Sedov	    ;;
4490*ae771770SStanislav Sedov	    esac
4491*ae771770SStanislav Sedov
4492*ae771770SStanislav Sedov	    cat <<"EOF"
4493*ae771770SStanislav Sedov  XFREE (target_name);
4494*ae771770SStanislav Sedov  XFREE (actual_cwrapper_path);
4495*ae771770SStanislav Sedov  XFREE (actual_cwrapper_name);
4496*ae771770SStanislav Sedov
4497*ae771770SStanislav Sedov  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
4498*ae771770SStanislav Sedov  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
4499*ae771770SStanislav Sedov  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
4500*ae771770SStanislav Sedov     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
4501*ae771770SStanislav Sedov     because on Windows, both *_VARNAMEs are PATH but uninstalled
4502*ae771770SStanislav Sedov     libraries must come first. */
4503*ae771770SStanislav Sedov  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
4504*ae771770SStanislav Sedov  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
4505*ae771770SStanislav Sedov
4506*ae771770SStanislav Sedov  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
4507*ae771770SStanislav Sedov		  nonnull (lt_argv_zero));
4508*ae771770SStanislav Sedov  for (i = 0; i < newargc; i++)
4509*ae771770SStanislav Sedov    {
4510*ae771770SStanislav Sedov      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
4511*ae771770SStanislav Sedov		      i, nonnull (newargz[i]));
4512*ae771770SStanislav Sedov    }
4513*ae771770SStanislav Sedov
4514*ae771770SStanislav SedovEOF
4515*ae771770SStanislav Sedov
4516*ae771770SStanislav Sedov	    case $host_os in
4517*ae771770SStanislav Sedov	      mingw*)
4518*ae771770SStanislav Sedov		cat <<"EOF"
4519*ae771770SStanislav Sedov  /* execv doesn't actually work on mingw as expected on unix */
4520*ae771770SStanislav Sedov  newargz = prepare_spawn (newargz);
4521*ae771770SStanislav Sedov  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
4522*ae771770SStanislav Sedov  if (rval == -1)
4523*ae771770SStanislav Sedov    {
4524*ae771770SStanislav Sedov      /* failed to start process */
4525*ae771770SStanislav Sedov      lt_debugprintf (__FILE__, __LINE__,
4526*ae771770SStanislav Sedov		      "(main) failed to launch target \"%s\": %s\n",
4527*ae771770SStanislav Sedov		      lt_argv_zero, nonnull (strerror (errno)));
4528*ae771770SStanislav Sedov      return 127;
4529*ae771770SStanislav Sedov    }
4530*ae771770SStanislav Sedov  return rval;
4531*ae771770SStanislav SedovEOF
4532*ae771770SStanislav Sedov		;;
4533*ae771770SStanislav Sedov	      *)
4534*ae771770SStanislav Sedov		cat <<"EOF"
4535*ae771770SStanislav Sedov  execv (lt_argv_zero, newargz);
4536*ae771770SStanislav Sedov  return rval; /* =127, but avoids unused variable warning */
4537*ae771770SStanislav SedovEOF
4538*ae771770SStanislav Sedov		;;
4539*ae771770SStanislav Sedov	    esac
4540*ae771770SStanislav Sedov
4541*ae771770SStanislav Sedov	    cat <<"EOF"
4542*ae771770SStanislav Sedov}
4543*ae771770SStanislav Sedov
4544*ae771770SStanislav Sedovvoid *
4545*ae771770SStanislav Sedovxmalloc (size_t num)
4546*ae771770SStanislav Sedov{
4547*ae771770SStanislav Sedov  void *p = (void *) malloc (num);
4548*ae771770SStanislav Sedov  if (!p)
4549*ae771770SStanislav Sedov    lt_fatal (__FILE__, __LINE__, "memory exhausted");
4550*ae771770SStanislav Sedov
4551*ae771770SStanislav Sedov  return p;
4552*ae771770SStanislav Sedov}
4553*ae771770SStanislav Sedov
4554*ae771770SStanislav Sedovchar *
4555*ae771770SStanislav Sedovxstrdup (const char *string)
4556*ae771770SStanislav Sedov{
4557*ae771770SStanislav Sedov  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
4558*ae771770SStanislav Sedov			  string) : NULL;
4559*ae771770SStanislav Sedov}
4560*ae771770SStanislav Sedov
4561*ae771770SStanislav Sedovconst char *
4562*ae771770SStanislav Sedovbase_name (const char *name)
4563*ae771770SStanislav Sedov{
4564*ae771770SStanislav Sedov  const char *base;
4565*ae771770SStanislav Sedov
4566*ae771770SStanislav Sedov#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4567*ae771770SStanislav Sedov  /* Skip over the disk name in MSDOS pathnames. */
4568*ae771770SStanislav Sedov  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
4569*ae771770SStanislav Sedov    name += 2;
4570*ae771770SStanislav Sedov#endif
4571*ae771770SStanislav Sedov
4572*ae771770SStanislav Sedov  for (base = name; *name; name++)
4573*ae771770SStanislav Sedov    if (IS_DIR_SEPARATOR (*name))
4574*ae771770SStanislav Sedov      base = name + 1;
4575*ae771770SStanislav Sedov  return base;
4576*ae771770SStanislav Sedov}
4577*ae771770SStanislav Sedov
4578*ae771770SStanislav Sedovint
4579*ae771770SStanislav Sedovcheck_executable (const char *path)
4580*ae771770SStanislav Sedov{
4581*ae771770SStanislav Sedov  struct stat st;
4582*ae771770SStanislav Sedov
4583*ae771770SStanislav Sedov  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
4584*ae771770SStanislav Sedov                  nonempty (path));
4585*ae771770SStanislav Sedov  if ((!path) || (!*path))
4586*ae771770SStanislav Sedov    return 0;
4587*ae771770SStanislav Sedov
4588*ae771770SStanislav Sedov  if ((stat (path, &st) >= 0)
4589*ae771770SStanislav Sedov      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
4590*ae771770SStanislav Sedov    return 1;
4591*ae771770SStanislav Sedov  else
4592*ae771770SStanislav Sedov    return 0;
4593*ae771770SStanislav Sedov}
4594*ae771770SStanislav Sedov
4595*ae771770SStanislav Sedovint
4596*ae771770SStanislav Sedovmake_executable (const char *path)
4597*ae771770SStanislav Sedov{
4598*ae771770SStanislav Sedov  int rval = 0;
4599*ae771770SStanislav Sedov  struct stat st;
4600*ae771770SStanislav Sedov
4601*ae771770SStanislav Sedov  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
4602*ae771770SStanislav Sedov                  nonempty (path));
4603*ae771770SStanislav Sedov  if ((!path) || (!*path))
4604*ae771770SStanislav Sedov    return 0;
4605*ae771770SStanislav Sedov
4606*ae771770SStanislav Sedov  if (stat (path, &st) >= 0)
4607*ae771770SStanislav Sedov    {
4608*ae771770SStanislav Sedov      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
4609*ae771770SStanislav Sedov    }
4610*ae771770SStanislav Sedov  return rval;
4611*ae771770SStanislav Sedov}
4612*ae771770SStanislav Sedov
4613*ae771770SStanislav Sedov/* Searches for the full path of the wrapper.  Returns
4614*ae771770SStanislav Sedov   newly allocated full path name if found, NULL otherwise
4615*ae771770SStanislav Sedov   Does not chase symlinks, even on platforms that support them.
4616*ae771770SStanislav Sedov*/
4617*ae771770SStanislav Sedovchar *
4618*ae771770SStanislav Sedovfind_executable (const char *wrapper)
4619*ae771770SStanislav Sedov{
4620*ae771770SStanislav Sedov  int has_slash = 0;
4621*ae771770SStanislav Sedov  const char *p;
4622*ae771770SStanislav Sedov  const char *p_next;
4623*ae771770SStanislav Sedov  /* static buffer for getcwd */
4624*ae771770SStanislav Sedov  char tmp[LT_PATHMAX + 1];
4625*ae771770SStanislav Sedov  int tmp_len;
4626*ae771770SStanislav Sedov  char *concat_name;
4627*ae771770SStanislav Sedov
4628*ae771770SStanislav Sedov  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
4629*ae771770SStanislav Sedov                  nonempty (wrapper));
4630*ae771770SStanislav Sedov
4631*ae771770SStanislav Sedov  if ((wrapper == NULL) || (*wrapper == '\0'))
4632*ae771770SStanislav Sedov    return NULL;
4633*ae771770SStanislav Sedov
4634*ae771770SStanislav Sedov  /* Absolute path? */
4635*ae771770SStanislav Sedov#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4636*ae771770SStanislav Sedov  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
4637*ae771770SStanislav Sedov    {
4638*ae771770SStanislav Sedov      concat_name = xstrdup (wrapper);
4639*ae771770SStanislav Sedov      if (check_executable (concat_name))
4640*ae771770SStanislav Sedov	return concat_name;
4641*ae771770SStanislav Sedov      XFREE (concat_name);
4642*ae771770SStanislav Sedov    }
4643*ae771770SStanislav Sedov  else
4644*ae771770SStanislav Sedov    {
4645*ae771770SStanislav Sedov#endif
4646*ae771770SStanislav Sedov      if (IS_DIR_SEPARATOR (wrapper[0]))
4647*ae771770SStanislav Sedov	{
4648*ae771770SStanislav Sedov	  concat_name = xstrdup (wrapper);
4649*ae771770SStanislav Sedov	  if (check_executable (concat_name))
4650*ae771770SStanislav Sedov	    return concat_name;
4651*ae771770SStanislav Sedov	  XFREE (concat_name);
4652*ae771770SStanislav Sedov	}
4653*ae771770SStanislav Sedov#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4654*ae771770SStanislav Sedov    }
4655*ae771770SStanislav Sedov#endif
4656*ae771770SStanislav Sedov
4657*ae771770SStanislav Sedov  for (p = wrapper; *p; p++)
4658*ae771770SStanislav Sedov    if (*p == '/')
4659*ae771770SStanislav Sedov      {
4660*ae771770SStanislav Sedov	has_slash = 1;
4661*ae771770SStanislav Sedov	break;
4662*ae771770SStanislav Sedov      }
4663*ae771770SStanislav Sedov  if (!has_slash)
4664*ae771770SStanislav Sedov    {
4665*ae771770SStanislav Sedov      /* no slashes; search PATH */
4666*ae771770SStanislav Sedov      const char *path = getenv ("PATH");
4667*ae771770SStanislav Sedov      if (path != NULL)
4668*ae771770SStanislav Sedov	{
4669*ae771770SStanislav Sedov	  for (p = path; *p; p = p_next)
4670*ae771770SStanislav Sedov	    {
4671*ae771770SStanislav Sedov	      const char *q;
4672*ae771770SStanislav Sedov	      size_t p_len;
4673*ae771770SStanislav Sedov	      for (q = p; *q; q++)
4674*ae771770SStanislav Sedov		if (IS_PATH_SEPARATOR (*q))
4675*ae771770SStanislav Sedov		  break;
4676*ae771770SStanislav Sedov	      p_len = q - p;
4677*ae771770SStanislav Sedov	      p_next = (*q == '\0' ? q : q + 1);
4678*ae771770SStanislav Sedov	      if (p_len == 0)
4679*ae771770SStanislav Sedov		{
4680*ae771770SStanislav Sedov		  /* empty path: current directory */
4681*ae771770SStanislav Sedov		  if (getcwd (tmp, LT_PATHMAX) == NULL)
4682*ae771770SStanislav Sedov		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
4683*ae771770SStanislav Sedov                              nonnull (strerror (errno)));
4684*ae771770SStanislav Sedov		  tmp_len = strlen (tmp);
4685*ae771770SStanislav Sedov		  concat_name =
4686*ae771770SStanislav Sedov		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4687*ae771770SStanislav Sedov		  memcpy (concat_name, tmp, tmp_len);
4688*ae771770SStanislav Sedov		  concat_name[tmp_len] = '/';
4689*ae771770SStanislav Sedov		  strcpy (concat_name + tmp_len + 1, wrapper);
4690*ae771770SStanislav Sedov		}
4691*ae771770SStanislav Sedov	      else
4692*ae771770SStanislav Sedov		{
4693*ae771770SStanislav Sedov		  concat_name =
4694*ae771770SStanislav Sedov		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
4695*ae771770SStanislav Sedov		  memcpy (concat_name, p, p_len);
4696*ae771770SStanislav Sedov		  concat_name[p_len] = '/';
4697*ae771770SStanislav Sedov		  strcpy (concat_name + p_len + 1, wrapper);
4698*ae771770SStanislav Sedov		}
4699*ae771770SStanislav Sedov	      if (check_executable (concat_name))
4700*ae771770SStanislav Sedov		return concat_name;
4701*ae771770SStanislav Sedov	      XFREE (concat_name);
4702*ae771770SStanislav Sedov	    }
4703*ae771770SStanislav Sedov	}
4704*ae771770SStanislav Sedov      /* not found in PATH; assume curdir */
4705*ae771770SStanislav Sedov    }
4706*ae771770SStanislav Sedov  /* Relative path | not found in path: prepend cwd */
4707*ae771770SStanislav Sedov  if (getcwd (tmp, LT_PATHMAX) == NULL)
4708*ae771770SStanislav Sedov    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
4709*ae771770SStanislav Sedov              nonnull (strerror (errno)));
4710*ae771770SStanislav Sedov  tmp_len = strlen (tmp);
4711*ae771770SStanislav Sedov  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4712*ae771770SStanislav Sedov  memcpy (concat_name, tmp, tmp_len);
4713*ae771770SStanislav Sedov  concat_name[tmp_len] = '/';
4714*ae771770SStanislav Sedov  strcpy (concat_name + tmp_len + 1, wrapper);
4715*ae771770SStanislav Sedov
4716*ae771770SStanislav Sedov  if (check_executable (concat_name))
4717*ae771770SStanislav Sedov    return concat_name;
4718*ae771770SStanislav Sedov  XFREE (concat_name);
4719*ae771770SStanislav Sedov  return NULL;
4720*ae771770SStanislav Sedov}
4721*ae771770SStanislav Sedov
4722*ae771770SStanislav Sedovchar *
4723*ae771770SStanislav Sedovchase_symlinks (const char *pathspec)
4724*ae771770SStanislav Sedov{
4725*ae771770SStanislav Sedov#ifndef S_ISLNK
4726*ae771770SStanislav Sedov  return xstrdup (pathspec);
4727*ae771770SStanislav Sedov#else
4728*ae771770SStanislav Sedov  char buf[LT_PATHMAX];
4729*ae771770SStanislav Sedov  struct stat s;
4730*ae771770SStanislav Sedov  char *tmp_pathspec = xstrdup (pathspec);
4731*ae771770SStanislav Sedov  char *p;
4732*ae771770SStanislav Sedov  int has_symlinks = 0;
4733*ae771770SStanislav Sedov  while (strlen (tmp_pathspec) && !has_symlinks)
4734*ae771770SStanislav Sedov    {
4735*ae771770SStanislav Sedov      lt_debugprintf (__FILE__, __LINE__,
4736*ae771770SStanislav Sedov		      "checking path component for symlinks: %s\n",
4737*ae771770SStanislav Sedov		      tmp_pathspec);
4738*ae771770SStanislav Sedov      if (lstat (tmp_pathspec, &s) == 0)
4739*ae771770SStanislav Sedov	{
4740*ae771770SStanislav Sedov	  if (S_ISLNK (s.st_mode) != 0)
4741*ae771770SStanislav Sedov	    {
4742*ae771770SStanislav Sedov	      has_symlinks = 1;
4743*ae771770SStanislav Sedov	      break;
4744*ae771770SStanislav Sedov	    }
4745*ae771770SStanislav Sedov
4746*ae771770SStanislav Sedov	  /* search backwards for last DIR_SEPARATOR */
4747*ae771770SStanislav Sedov	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
4748*ae771770SStanislav Sedov	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4749*ae771770SStanislav Sedov	    p--;
4750*ae771770SStanislav Sedov	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4751*ae771770SStanislav Sedov	    {
4752*ae771770SStanislav Sedov	      /* no more DIR_SEPARATORS left */
4753*ae771770SStanislav Sedov	      break;
4754*ae771770SStanislav Sedov	    }
4755*ae771770SStanislav Sedov	  *p = '\0';
4756*ae771770SStanislav Sedov	}
4757*ae771770SStanislav Sedov      else
4758*ae771770SStanislav Sedov	{
4759*ae771770SStanislav Sedov	  lt_fatal (__FILE__, __LINE__,
4760*ae771770SStanislav Sedov		    "error accessing file \"%s\": %s",
4761*ae771770SStanislav Sedov		    tmp_pathspec, nonnull (strerror (errno)));
4762*ae771770SStanislav Sedov	}
4763*ae771770SStanislav Sedov    }
4764*ae771770SStanislav Sedov  XFREE (tmp_pathspec);
4765*ae771770SStanislav Sedov
4766*ae771770SStanislav Sedov  if (!has_symlinks)
4767*ae771770SStanislav Sedov    {
4768*ae771770SStanislav Sedov      return xstrdup (pathspec);
4769*ae771770SStanislav Sedov    }
4770*ae771770SStanislav Sedov
4771*ae771770SStanislav Sedov  tmp_pathspec = realpath (pathspec, buf);
4772*ae771770SStanislav Sedov  if (tmp_pathspec == 0)
4773*ae771770SStanislav Sedov    {
4774*ae771770SStanislav Sedov      lt_fatal (__FILE__, __LINE__,
4775*ae771770SStanislav Sedov		"could not follow symlinks for %s", pathspec);
4776*ae771770SStanislav Sedov    }
4777*ae771770SStanislav Sedov  return xstrdup (tmp_pathspec);
4778*ae771770SStanislav Sedov#endif
4779*ae771770SStanislav Sedov}
4780*ae771770SStanislav Sedov
4781*ae771770SStanislav Sedovchar *
4782*ae771770SStanislav Sedovstrendzap (char *str, const char *pat)
4783*ae771770SStanislav Sedov{
4784*ae771770SStanislav Sedov  size_t len, patlen;
4785*ae771770SStanislav Sedov
4786*ae771770SStanislav Sedov  assert (str != NULL);
4787*ae771770SStanislav Sedov  assert (pat != NULL);
4788*ae771770SStanislav Sedov
4789*ae771770SStanislav Sedov  len = strlen (str);
4790*ae771770SStanislav Sedov  patlen = strlen (pat);
4791*ae771770SStanislav Sedov
4792*ae771770SStanislav Sedov  if (patlen <= len)
4793*ae771770SStanislav Sedov    {
4794*ae771770SStanislav Sedov      str += len - patlen;
4795*ae771770SStanislav Sedov      if (strcmp (str, pat) == 0)
4796*ae771770SStanislav Sedov	*str = '\0';
4797*ae771770SStanislav Sedov    }
4798*ae771770SStanislav Sedov  return str;
4799*ae771770SStanislav Sedov}
4800*ae771770SStanislav Sedov
4801*ae771770SStanislav Sedovvoid
4802*ae771770SStanislav Sedovlt_debugprintf (const char *file, int line, const char *fmt, ...)
4803*ae771770SStanislav Sedov{
4804*ae771770SStanislav Sedov  va_list args;
4805*ae771770SStanislav Sedov  if (lt_debug)
4806*ae771770SStanislav Sedov    {
4807*ae771770SStanislav Sedov      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
4808*ae771770SStanislav Sedov      va_start (args, fmt);
4809*ae771770SStanislav Sedov      (void) vfprintf (stderr, fmt, args);
4810*ae771770SStanislav Sedov      va_end (args);
4811*ae771770SStanislav Sedov    }
4812*ae771770SStanislav Sedov}
4813*ae771770SStanislav Sedov
4814*ae771770SStanislav Sedovstatic void
4815*ae771770SStanislav Sedovlt_error_core (int exit_status, const char *file,
4816*ae771770SStanislav Sedov	       int line, const char *mode,
4817*ae771770SStanislav Sedov	       const char *message, va_list ap)
4818*ae771770SStanislav Sedov{
4819*ae771770SStanislav Sedov  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
4820*ae771770SStanislav Sedov  vfprintf (stderr, message, ap);
4821*ae771770SStanislav Sedov  fprintf (stderr, ".\n");
4822*ae771770SStanislav Sedov
4823*ae771770SStanislav Sedov  if (exit_status >= 0)
4824*ae771770SStanislav Sedov    exit (exit_status);
4825*ae771770SStanislav Sedov}
4826*ae771770SStanislav Sedov
4827*ae771770SStanislav Sedovvoid
4828*ae771770SStanislav Sedovlt_fatal (const char *file, int line, const char *message, ...)
4829*ae771770SStanislav Sedov{
4830*ae771770SStanislav Sedov  va_list ap;
4831*ae771770SStanislav Sedov  va_start (ap, message);
4832*ae771770SStanislav Sedov  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
4833*ae771770SStanislav Sedov  va_end (ap);
4834*ae771770SStanislav Sedov}
4835*ae771770SStanislav Sedov
4836*ae771770SStanislav Sedovstatic const char *
4837*ae771770SStanislav Sedovnonnull (const char *s)
4838*ae771770SStanislav Sedov{
4839*ae771770SStanislav Sedov  return s ? s : "(null)";
4840*ae771770SStanislav Sedov}
4841*ae771770SStanislav Sedov
4842*ae771770SStanislav Sedovstatic const char *
4843*ae771770SStanislav Sedovnonempty (const char *s)
4844*ae771770SStanislav Sedov{
4845*ae771770SStanislav Sedov  return (s && !*s) ? "(empty)" : nonnull (s);
4846*ae771770SStanislav Sedov}
4847*ae771770SStanislav Sedov
4848*ae771770SStanislav Sedovvoid
4849*ae771770SStanislav Sedovlt_setenv (const char *name, const char *value)
4850*ae771770SStanislav Sedov{
4851*ae771770SStanislav Sedov  lt_debugprintf (__FILE__, __LINE__,
4852*ae771770SStanislav Sedov		  "(lt_setenv) setting '%s' to '%s'\n",
4853*ae771770SStanislav Sedov                  nonnull (name), nonnull (value));
4854*ae771770SStanislav Sedov  {
4855*ae771770SStanislav Sedov#ifdef HAVE_SETENV
4856*ae771770SStanislav Sedov    /* always make a copy, for consistency with !HAVE_SETENV */
4857*ae771770SStanislav Sedov    char *str = xstrdup (value);
4858*ae771770SStanislav Sedov    setenv (name, str, 1);
4859*ae771770SStanislav Sedov#else
4860*ae771770SStanislav Sedov    int len = strlen (name) + 1 + strlen (value) + 1;
4861*ae771770SStanislav Sedov    char *str = XMALLOC (char, len);
4862*ae771770SStanislav Sedov    sprintf (str, "%s=%s", name, value);
4863*ae771770SStanislav Sedov    if (putenv (str) != EXIT_SUCCESS)
4864*ae771770SStanislav Sedov      {
4865*ae771770SStanislav Sedov        XFREE (str);
4866*ae771770SStanislav Sedov      }
4867*ae771770SStanislav Sedov#endif
4868*ae771770SStanislav Sedov  }
4869*ae771770SStanislav Sedov}
4870*ae771770SStanislav Sedov
4871*ae771770SStanislav Sedovchar *
4872*ae771770SStanislav Sedovlt_extend_str (const char *orig_value, const char *add, int to_end)
4873*ae771770SStanislav Sedov{
4874*ae771770SStanislav Sedov  char *new_value;
4875*ae771770SStanislav Sedov  if (orig_value && *orig_value)
4876*ae771770SStanislav Sedov    {
4877*ae771770SStanislav Sedov      int orig_value_len = strlen (orig_value);
4878*ae771770SStanislav Sedov      int add_len = strlen (add);
4879*ae771770SStanislav Sedov      new_value = XMALLOC (char, add_len + orig_value_len + 1);
4880*ae771770SStanislav Sedov      if (to_end)
4881*ae771770SStanislav Sedov        {
4882*ae771770SStanislav Sedov          strcpy (new_value, orig_value);
4883*ae771770SStanislav Sedov          strcpy (new_value + orig_value_len, add);
4884*ae771770SStanislav Sedov        }
4885*ae771770SStanislav Sedov      else
4886*ae771770SStanislav Sedov        {
4887*ae771770SStanislav Sedov          strcpy (new_value, add);
4888*ae771770SStanislav Sedov          strcpy (new_value + add_len, orig_value);
4889*ae771770SStanislav Sedov        }
4890*ae771770SStanislav Sedov    }
4891*ae771770SStanislav Sedov  else
4892*ae771770SStanislav Sedov    {
4893*ae771770SStanislav Sedov      new_value = xstrdup (add);
4894*ae771770SStanislav Sedov    }
4895*ae771770SStanislav Sedov  return new_value;
4896*ae771770SStanislav Sedov}
4897*ae771770SStanislav Sedov
4898*ae771770SStanislav Sedovvoid
4899*ae771770SStanislav Sedovlt_update_exe_path (const char *name, const char *value)
4900*ae771770SStanislav Sedov{
4901*ae771770SStanislav Sedov  lt_debugprintf (__FILE__, __LINE__,
4902*ae771770SStanislav Sedov		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
4903*ae771770SStanislav Sedov                  nonnull (name), nonnull (value));
4904*ae771770SStanislav Sedov
4905*ae771770SStanislav Sedov  if (name && *name && value && *value)
4906*ae771770SStanislav Sedov    {
4907*ae771770SStanislav Sedov      char *new_value = lt_extend_str (getenv (name), value, 0);
4908*ae771770SStanislav Sedov      /* some systems can't cope with a ':'-terminated path #' */
4909*ae771770SStanislav Sedov      int len = strlen (new_value);
4910*ae771770SStanislav Sedov      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
4911*ae771770SStanislav Sedov        {
4912*ae771770SStanislav Sedov          new_value[len-1] = '\0';
4913*ae771770SStanislav Sedov        }
4914*ae771770SStanislav Sedov      lt_setenv (name, new_value);
4915*ae771770SStanislav Sedov      XFREE (new_value);
4916*ae771770SStanislav Sedov    }
4917*ae771770SStanislav Sedov}
4918*ae771770SStanislav Sedov
4919*ae771770SStanislav Sedovvoid
4920*ae771770SStanislav Sedovlt_update_lib_path (const char *name, const char *value)
4921*ae771770SStanislav Sedov{
4922*ae771770SStanislav Sedov  lt_debugprintf (__FILE__, __LINE__,
4923*ae771770SStanislav Sedov		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
4924*ae771770SStanislav Sedov                  nonnull (name), nonnull (value));
4925*ae771770SStanislav Sedov
4926*ae771770SStanislav Sedov  if (name && *name && value && *value)
4927*ae771770SStanislav Sedov    {
4928*ae771770SStanislav Sedov      char *new_value = lt_extend_str (getenv (name), value, 0);
4929*ae771770SStanislav Sedov      lt_setenv (name, new_value);
4930*ae771770SStanislav Sedov      XFREE (new_value);
4931*ae771770SStanislav Sedov    }
4932*ae771770SStanislav Sedov}
4933*ae771770SStanislav Sedov
4934*ae771770SStanislav SedovEOF
4935*ae771770SStanislav Sedov	    case $host_os in
4936*ae771770SStanislav Sedov	      mingw*)
4937*ae771770SStanislav Sedov		cat <<"EOF"
4938*ae771770SStanislav Sedov
4939*ae771770SStanislav Sedov/* Prepares an argument vector before calling spawn().
4940*ae771770SStanislav Sedov   Note that spawn() does not by itself call the command interpreter
4941*ae771770SStanislav Sedov     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
4942*ae771770SStanislav Sedov      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
4943*ae771770SStanislav Sedov         GetVersionEx(&v);
4944*ae771770SStanislav Sedov         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
4945*ae771770SStanislav Sedov      }) ? "cmd.exe" : "command.com").
4946*ae771770SStanislav Sedov   Instead it simply concatenates the arguments, separated by ' ', and calls
4947*ae771770SStanislav Sedov   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
4948*ae771770SStanislav Sedov   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
4949*ae771770SStanislav Sedov   special way:
4950*ae771770SStanislav Sedov   - Space and tab are interpreted as delimiters. They are not treated as
4951*ae771770SStanislav Sedov     delimiters if they are surrounded by double quotes: "...".
4952*ae771770SStanislav Sedov   - Unescaped double quotes are removed from the input. Their only effect is
4953*ae771770SStanislav Sedov     that within double quotes, space and tab are treated like normal
4954*ae771770SStanislav Sedov     characters.
4955*ae771770SStanislav Sedov   - Backslashes not followed by double quotes are not special.
4956*ae771770SStanislav Sedov   - But 2*n+1 backslashes followed by a double quote become
4957*ae771770SStanislav Sedov     n backslashes followed by a double quote (n >= 0):
4958*ae771770SStanislav Sedov       \" -> "
4959*ae771770SStanislav Sedov       \\\" -> \"
4960*ae771770SStanislav Sedov       \\\\\" -> \\"
4961*ae771770SStanislav Sedov */
4962*ae771770SStanislav Sedov#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"
4963*ae771770SStanislav Sedov#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"
4964*ae771770SStanislav Sedovchar **
4965*ae771770SStanislav Sedovprepare_spawn (char **argv)
4966*ae771770SStanislav Sedov{
4967*ae771770SStanislav Sedov  size_t argc;
4968*ae771770SStanislav Sedov  char **new_argv;
4969*ae771770SStanislav Sedov  size_t i;
4970*ae771770SStanislav Sedov
4971*ae771770SStanislav Sedov  /* Count number of arguments.  */
4972*ae771770SStanislav Sedov  for (argc = 0; argv[argc] != NULL; argc++)
4973*ae771770SStanislav Sedov    ;
4974*ae771770SStanislav Sedov
4975*ae771770SStanislav Sedov  /* Allocate new argument vector.  */
4976*ae771770SStanislav Sedov  new_argv = XMALLOC (char *, argc + 1);
4977*ae771770SStanislav Sedov
4978*ae771770SStanislav Sedov  /* Put quoted arguments into the new argument vector.  */
4979*ae771770SStanislav Sedov  for (i = 0; i < argc; i++)
4980*ae771770SStanislav Sedov    {
4981*ae771770SStanislav Sedov      const char *string = argv[i];
4982*ae771770SStanislav Sedov
4983*ae771770SStanislav Sedov      if (string[0] == '\0')
4984*ae771770SStanislav Sedov	new_argv[i] = xstrdup ("\"\"");
4985*ae771770SStanislav Sedov      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
4986*ae771770SStanislav Sedov	{
4987*ae771770SStanislav Sedov	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
4988*ae771770SStanislav Sedov	  size_t length;
4989*ae771770SStanislav Sedov	  unsigned int backslashes;
4990*ae771770SStanislav Sedov	  const char *s;
4991*ae771770SStanislav Sedov	  char *quoted_string;
4992*ae771770SStanislav Sedov	  char *p;
4993*ae771770SStanislav Sedov
4994*ae771770SStanislav Sedov	  length = 0;
4995*ae771770SStanislav Sedov	  backslashes = 0;
4996*ae771770SStanislav Sedov	  if (quote_around)
4997*ae771770SStanislav Sedov	    length++;
4998*ae771770SStanislav Sedov	  for (s = string; *s != '\0'; s++)
4999*ae771770SStanislav Sedov	    {
5000*ae771770SStanislav Sedov	      char c = *s;
5001*ae771770SStanislav Sedov	      if (c == '"')
5002*ae771770SStanislav Sedov		length += backslashes + 1;
5003*ae771770SStanislav Sedov	      length++;
5004*ae771770SStanislav Sedov	      if (c == '\\')
5005*ae771770SStanislav Sedov		backslashes++;
5006*ae771770SStanislav Sedov	      else
5007*ae771770SStanislav Sedov		backslashes = 0;
5008*ae771770SStanislav Sedov	    }
5009*ae771770SStanislav Sedov	  if (quote_around)
5010*ae771770SStanislav Sedov	    length += backslashes + 1;
5011*ae771770SStanislav Sedov
5012*ae771770SStanislav Sedov	  quoted_string = XMALLOC (char, length + 1);
5013*ae771770SStanislav Sedov
5014*ae771770SStanislav Sedov	  p = quoted_string;
5015*ae771770SStanislav Sedov	  backslashes = 0;
5016*ae771770SStanislav Sedov	  if (quote_around)
5017*ae771770SStanislav Sedov	    *p++ = '"';
5018*ae771770SStanislav Sedov	  for (s = string; *s != '\0'; s++)
5019*ae771770SStanislav Sedov	    {
5020*ae771770SStanislav Sedov	      char c = *s;
5021*ae771770SStanislav Sedov	      if (c == '"')
5022*ae771770SStanislav Sedov		{
5023*ae771770SStanislav Sedov		  unsigned int j;
5024*ae771770SStanislav Sedov		  for (j = backslashes + 1; j > 0; j--)
5025*ae771770SStanislav Sedov		    *p++ = '\\';
5026*ae771770SStanislav Sedov		}
5027*ae771770SStanislav Sedov	      *p++ = c;
5028*ae771770SStanislav Sedov	      if (c == '\\')
5029*ae771770SStanislav Sedov		backslashes++;
5030*ae771770SStanislav Sedov	      else
5031*ae771770SStanislav Sedov		backslashes = 0;
5032*ae771770SStanislav Sedov	    }
5033*ae771770SStanislav Sedov	  if (quote_around)
5034*ae771770SStanislav Sedov	    {
5035*ae771770SStanislav Sedov	      unsigned int j;
5036*ae771770SStanislav Sedov	      for (j = backslashes; j > 0; j--)
5037*ae771770SStanislav Sedov		*p++ = '\\';
5038*ae771770SStanislav Sedov	      *p++ = '"';
5039*ae771770SStanislav Sedov	    }
5040*ae771770SStanislav Sedov	  *p = '\0';
5041*ae771770SStanislav Sedov
5042*ae771770SStanislav Sedov	  new_argv[i] = quoted_string;
5043*ae771770SStanislav Sedov	}
5044*ae771770SStanislav Sedov      else
5045*ae771770SStanislav Sedov	new_argv[i] = (char *) string;
5046*ae771770SStanislav Sedov    }
5047*ae771770SStanislav Sedov  new_argv[argc] = NULL;
5048*ae771770SStanislav Sedov
5049*ae771770SStanislav Sedov  return new_argv;
5050*ae771770SStanislav Sedov}
5051*ae771770SStanislav SedovEOF
5052*ae771770SStanislav Sedov		;;
5053*ae771770SStanislav Sedov	    esac
5054*ae771770SStanislav Sedov
5055*ae771770SStanislav Sedov            cat <<"EOF"
5056*ae771770SStanislav Sedovvoid lt_dump_script (FILE* f)
5057*ae771770SStanislav Sedov{
5058*ae771770SStanislav SedovEOF
5059*ae771770SStanislav Sedov	    func_emit_wrapper yes |
5060*ae771770SStanislav Sedov              $SED -e 's/\([\\"]\)/\\\1/g' \
5061*ae771770SStanislav Sedov	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
5062*ae771770SStanislav Sedov
5063*ae771770SStanislav Sedov            cat <<"EOF"
5064*ae771770SStanislav Sedov}
5065*ae771770SStanislav SedovEOF
5066*ae771770SStanislav Sedov}
5067*ae771770SStanislav Sedov# end: func_emit_cwrapperexe_src
5068*ae771770SStanislav Sedov
5069*ae771770SStanislav Sedov# func_win32_import_lib_p ARG
5070*ae771770SStanislav Sedov# True if ARG is an import lib, as indicated by $file_magic_cmd
5071*ae771770SStanislav Sedovfunc_win32_import_lib_p ()
5072*ae771770SStanislav Sedov{
5073*ae771770SStanislav Sedov    $opt_debug
5074*ae771770SStanislav Sedov    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
5075*ae771770SStanislav Sedov    *import*) : ;;
5076*ae771770SStanislav Sedov    *) false ;;
5077*ae771770SStanislav Sedov    esac
5078*ae771770SStanislav Sedov}
5079*ae771770SStanislav Sedov
5080*ae771770SStanislav Sedov# func_mode_link arg...
5081*ae771770SStanislav Sedovfunc_mode_link ()
5082*ae771770SStanislav Sedov{
5083*ae771770SStanislav Sedov    $opt_debug
5084*ae771770SStanislav Sedov    case $host in
5085*ae771770SStanislav Sedov    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
50865e9cd1aeSAssar Westerlund      # It is impossible to link a dll without this setting, and
50875e9cd1aeSAssar Westerlund      # we shouldn't force the makefile maintainer to figure out
50885e9cd1aeSAssar Westerlund      # which system we are compiling for in order to pass an extra
50891c43270aSJacques Vidrine      # flag for every libtool invocation.
50905e9cd1aeSAssar Westerlund      # allow_undefined=no
5091b528cefcSMark Murray
50925e9cd1aeSAssar Westerlund      # FIXME: Unfortunately, there are problems with the above when trying
50935e9cd1aeSAssar Westerlund      # to make a dll which has undefined symbols, in which case not
50945e9cd1aeSAssar Westerlund      # even a static library is built.  For now, we need to specify
50955e9cd1aeSAssar Westerlund      # -no-undefined on the libtool link line when we can be certain
50965e9cd1aeSAssar Westerlund      # that all symbols are satisfied, otherwise we get a static library.
50975e9cd1aeSAssar Westerlund      allow_undefined=yes
50985e9cd1aeSAssar Westerlund      ;;
50995e9cd1aeSAssar Westerlund    *)
51005e9cd1aeSAssar Westerlund      allow_undefined=yes
51015e9cd1aeSAssar Westerlund      ;;
51025e9cd1aeSAssar Westerlund    esac
5103*ae771770SStanislav Sedov    libtool_args=$nonopt
51041c43270aSJacques Vidrine    base_compile="$nonopt $@"
5105*ae771770SStanislav Sedov    compile_command=$nonopt
5106*ae771770SStanislav Sedov    finalize_command=$nonopt
51075e9cd1aeSAssar Westerlund
51085e9cd1aeSAssar Westerlund    compile_rpath=
51095e9cd1aeSAssar Westerlund    finalize_rpath=
5110b528cefcSMark Murray    compile_shlibpath=
5111b528cefcSMark Murray    finalize_shlibpath=
5112b528cefcSMark Murray    convenience=
5113b528cefcSMark Murray    old_convenience=
5114b528cefcSMark Murray    deplibs=
51155e9cd1aeSAssar Westerlund    old_deplibs=
51165e9cd1aeSAssar Westerlund    compiler_flags=
51175e9cd1aeSAssar Westerlund    linker_flags=
51185e9cd1aeSAssar Westerlund    dllsearchpath=
51195e9cd1aeSAssar Westerlund    lib_search_path=`pwd`
51201c43270aSJacques Vidrine    inst_prefix_dir=
5121*ae771770SStanislav Sedov    new_inherited_linker_flags=
5122b528cefcSMark Murray
51235e9cd1aeSAssar Westerlund    avoid_version=no
5124*ae771770SStanislav Sedov    bindir=
5125b528cefcSMark Murray    dlfiles=
5126b528cefcSMark Murray    dlprefiles=
51275e9cd1aeSAssar Westerlund    dlself=no
5128b528cefcSMark Murray    export_dynamic=no
5129b528cefcSMark Murray    export_symbols=
51305e9cd1aeSAssar Westerlund    export_symbols_regex=
5131b528cefcSMark Murray    generated=
5132b528cefcSMark Murray    libobjs=
5133b528cefcSMark Murray    ltlibs=
5134b528cefcSMark Murray    module=no
51355e9cd1aeSAssar Westerlund    no_install=no
5136b528cefcSMark Murray    objs=
51371c43270aSJacques Vidrine    non_pic_objects=
51381c43270aSJacques Vidrine    precious_files_regex=
51395e9cd1aeSAssar Westerlund    prefer_static_libs=no
51405e9cd1aeSAssar Westerlund    preload=no
5141b528cefcSMark Murray    prev=
5142b528cefcSMark Murray    prevarg=
5143b528cefcSMark Murray    release=
5144b528cefcSMark Murray    rpath=
51455e9cd1aeSAssar Westerlund    xrpath=
5146b528cefcSMark Murray    perm_rpath=
5147b528cefcSMark Murray    temp_rpath=
51485e9cd1aeSAssar Westerlund    thread_safe=no
5149b528cefcSMark Murray    vinfo=
51501c43270aSJacques Vidrine    vinfo_number=no
5151*ae771770SStanislav Sedov    weak_libs=
5152*ae771770SStanislav Sedov    single_module="${wl}-single_module"
5153c19800e8SDoug Rabson    func_infer_tag $base_compile
5154b528cefcSMark Murray
5155b528cefcSMark Murray    # We need to know -static, to get the right output filenames.
5156b528cefcSMark Murray    for arg
5157b528cefcSMark Murray    do
51584137ff4cSJacques Vidrine      case $arg in
5159*ae771770SStanislav Sedov      -shared)
5160*ae771770SStanislav Sedov	test "$build_libtool_libs" != yes && \
5161*ae771770SStanislav Sedov	  func_fatal_configuration "can not build a shared library"
5162*ae771770SStanislav Sedov	build_old_libs=no
5163*ae771770SStanislav Sedov	break
5164*ae771770SStanislav Sedov	;;
5165*ae771770SStanislav Sedov      -all-static | -static | -static-libtool-libs)
5166*ae771770SStanislav Sedov	case $arg in
5167*ae771770SStanislav Sedov	-all-static)
51685e9cd1aeSAssar Westerlund	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
5169*ae771770SStanislav Sedov	    func_warning "complete static linking is impossible in this configuration"
5170b528cefcSMark Murray	  fi
51715e9cd1aeSAssar Westerlund	  if test -n "$link_static_flag"; then
51725e9cd1aeSAssar Westerlund	    dlopen_self=$dlopen_self_static
51735e9cd1aeSAssar Westerlund	  fi
5174c19800e8SDoug Rabson	  prefer_static_libs=yes
5175*ae771770SStanislav Sedov	  ;;
5176*ae771770SStanislav Sedov	-static)
51775e9cd1aeSAssar Westerlund	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
51785e9cd1aeSAssar Westerlund	    dlopen_self=$dlopen_self_static
51795e9cd1aeSAssar Westerlund	  fi
5180c19800e8SDoug Rabson	  prefer_static_libs=built
5181*ae771770SStanislav Sedov	  ;;
5182*ae771770SStanislav Sedov	-static-libtool-libs)
5183*ae771770SStanislav Sedov	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5184*ae771770SStanislav Sedov	    dlopen_self=$dlopen_self_static
51855e9cd1aeSAssar Westerlund	  fi
5186*ae771770SStanislav Sedov	  prefer_static_libs=yes
5187*ae771770SStanislav Sedov	  ;;
5188*ae771770SStanislav Sedov	esac
5189b528cefcSMark Murray	build_libtool_libs=no
5190b528cefcSMark Murray	build_old_libs=yes
5191b528cefcSMark Murray	break
5192b528cefcSMark Murray	;;
5193b528cefcSMark Murray      esac
5194b528cefcSMark Murray    done
5195b528cefcSMark Murray
5196b528cefcSMark Murray    # See if our shared archives depend on static archives.
5197b528cefcSMark Murray    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
5198b528cefcSMark Murray
5199b528cefcSMark Murray    # Go through the arguments, transforming them on the way.
52001c43270aSJacques Vidrine    while test "$#" -gt 0; do
5201b528cefcSMark Murray      arg="$1"
5202b528cefcSMark Murray      shift
5203*ae771770SStanislav Sedov      func_quote_for_eval "$arg"
5204*ae771770SStanislav Sedov      qarg=$func_quote_for_eval_unquoted_result
5205*ae771770SStanislav Sedov      func_append libtool_args " $func_quote_for_eval_result"
5206b528cefcSMark Murray
5207b528cefcSMark Murray      # If the previous option needs an argument, assign it.
5208b528cefcSMark Murray      if test -n "$prev"; then
52094137ff4cSJacques Vidrine	case $prev in
5210b528cefcSMark Murray	output)
5211*ae771770SStanislav Sedov	  func_append compile_command " @OUTPUT@"
5212*ae771770SStanislav Sedov	  func_append finalize_command " @OUTPUT@"
5213b528cefcSMark Murray	  ;;
5214b528cefcSMark Murray	esac
5215b528cefcSMark Murray
52164137ff4cSJacques Vidrine	case $prev in
5217*ae771770SStanislav Sedov	bindir)
5218*ae771770SStanislav Sedov	  bindir="$arg"
5219*ae771770SStanislav Sedov	  prev=
5220*ae771770SStanislav Sedov	  continue
5221*ae771770SStanislav Sedov	  ;;
5222b528cefcSMark Murray	dlfiles|dlprefiles)
52235e9cd1aeSAssar Westerlund	  if test "$preload" = no; then
52245e9cd1aeSAssar Westerlund	    # Add the symbol object into the linking commands.
5225*ae771770SStanislav Sedov	    func_append compile_command " @SYMFILE@"
5226*ae771770SStanislav Sedov	    func_append finalize_command " @SYMFILE@"
52275e9cd1aeSAssar Westerlund	    preload=yes
52285e9cd1aeSAssar Westerlund	  fi
52294137ff4cSJacques Vidrine	  case $arg in
5230b528cefcSMark Murray	  *.la | *.lo) ;;  # We handle these cases below.
52315e9cd1aeSAssar Westerlund	  force)
52325e9cd1aeSAssar Westerlund	    if test "$dlself" = no; then
52335e9cd1aeSAssar Westerlund	      dlself=needless
52345e9cd1aeSAssar Westerlund	      export_dynamic=yes
52355e9cd1aeSAssar Westerlund	    fi
5236b528cefcSMark Murray	    prev=
52375e9cd1aeSAssar Westerlund	    continue
52385e9cd1aeSAssar Westerlund	    ;;
52395e9cd1aeSAssar Westerlund	  self)
52405e9cd1aeSAssar Westerlund	    if test "$prev" = dlprefiles; then
52415e9cd1aeSAssar Westerlund	      dlself=yes
52425e9cd1aeSAssar Westerlund	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
52435e9cd1aeSAssar Westerlund	      dlself=yes
52445e9cd1aeSAssar Westerlund	    else
52455e9cd1aeSAssar Westerlund	      dlself=needless
52465e9cd1aeSAssar Westerlund	      export_dynamic=yes
52475e9cd1aeSAssar Westerlund	    fi
52485e9cd1aeSAssar Westerlund	    prev=
52495e9cd1aeSAssar Westerlund	    continue
52505e9cd1aeSAssar Westerlund	    ;;
52515e9cd1aeSAssar Westerlund	  *)
52525e9cd1aeSAssar Westerlund	    if test "$prev" = dlfiles; then
5253*ae771770SStanislav Sedov	      func_append dlfiles " $arg"
52545e9cd1aeSAssar Westerlund	    else
5255*ae771770SStanislav Sedov	      func_append dlprefiles " $arg"
52565e9cd1aeSAssar Westerlund	    fi
52575e9cd1aeSAssar Westerlund	    prev=
52585e9cd1aeSAssar Westerlund	    continue
5259b528cefcSMark Murray	    ;;
5260b528cefcSMark Murray	  esac
5261b528cefcSMark Murray	  ;;
52625e9cd1aeSAssar Westerlund	expsyms)
5263b528cefcSMark Murray	  export_symbols="$arg"
5264*ae771770SStanislav Sedov	  test -f "$arg" \
5265*ae771770SStanislav Sedov	    || func_fatal_error "symbol file \`$arg' does not exist"
5266b528cefcSMark Murray	  prev=
52675e9cd1aeSAssar Westerlund	  continue
52685e9cd1aeSAssar Westerlund	  ;;
52695e9cd1aeSAssar Westerlund	expsyms_regex)
52705e9cd1aeSAssar Westerlund	  export_symbols_regex="$arg"
52715e9cd1aeSAssar Westerlund	  prev=
52725e9cd1aeSAssar Westerlund	  continue
5273b528cefcSMark Murray	  ;;
5274*ae771770SStanislav Sedov	framework)
5275*ae771770SStanislav Sedov	  case $host in
5276*ae771770SStanislav Sedov	    *-*-darwin*)
5277*ae771770SStanislav Sedov	      case "$deplibs " in
5278*ae771770SStanislav Sedov		*" $qarg.ltframework "*) ;;
5279*ae771770SStanislav Sedov		*) func_append deplibs " $qarg.ltframework" # this is fixed later
5280*ae771770SStanislav Sedov		   ;;
5281*ae771770SStanislav Sedov	      esac
5282*ae771770SStanislav Sedov	      ;;
5283*ae771770SStanislav Sedov	  esac
5284*ae771770SStanislav Sedov	  prev=
5285*ae771770SStanislav Sedov	  continue
5286*ae771770SStanislav Sedov	  ;;
52871c43270aSJacques Vidrine	inst_prefix)
52881c43270aSJacques Vidrine	  inst_prefix_dir="$arg"
52891c43270aSJacques Vidrine	  prev=
52901c43270aSJacques Vidrine	  continue
52911c43270aSJacques Vidrine	  ;;
5292*ae771770SStanislav Sedov	objectlist)
5293*ae771770SStanislav Sedov	  if test -f "$arg"; then
5294*ae771770SStanislav Sedov	    save_arg=$arg
5295*ae771770SStanislav Sedov	    moreargs=
5296*ae771770SStanislav Sedov	    for fil in `cat "$save_arg"`
5297*ae771770SStanislav Sedov	    do
5298*ae771770SStanislav Sedov#	      func_append moreargs " $fil"
5299*ae771770SStanislav Sedov	      arg=$fil
5300*ae771770SStanislav Sedov	      # A libtool-controlled object.
5301*ae771770SStanislav Sedov
5302*ae771770SStanislav Sedov	      # Check to see that this really is a libtool object.
5303*ae771770SStanislav Sedov	      if func_lalib_unsafe_p "$arg"; then
5304*ae771770SStanislav Sedov		pic_object=
5305*ae771770SStanislav Sedov		non_pic_object=
5306*ae771770SStanislav Sedov
5307*ae771770SStanislav Sedov		# Read the .lo file
5308*ae771770SStanislav Sedov		func_source "$arg"
5309*ae771770SStanislav Sedov
5310*ae771770SStanislav Sedov		if test -z "$pic_object" ||
5311*ae771770SStanislav Sedov		   test -z "$non_pic_object" ||
5312*ae771770SStanislav Sedov		   test "$pic_object" = none &&
5313*ae771770SStanislav Sedov		   test "$non_pic_object" = none; then
5314*ae771770SStanislav Sedov		  func_fatal_error "cannot find name of object for \`$arg'"
5315*ae771770SStanislav Sedov		fi
5316*ae771770SStanislav Sedov
5317*ae771770SStanislav Sedov		# Extract subdirectory from the argument.
5318*ae771770SStanislav Sedov		func_dirname "$arg" "/" ""
5319*ae771770SStanislav Sedov		xdir="$func_dirname_result"
5320*ae771770SStanislav Sedov
5321*ae771770SStanislav Sedov		if test "$pic_object" != none; then
5322*ae771770SStanislav Sedov		  # Prepend the subdirectory the object is found in.
5323*ae771770SStanislav Sedov		  pic_object="$xdir$pic_object"
5324*ae771770SStanislav Sedov
5325*ae771770SStanislav Sedov		  if test "$prev" = dlfiles; then
5326*ae771770SStanislav Sedov		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5327*ae771770SStanislav Sedov		      func_append dlfiles " $pic_object"
5328*ae771770SStanislav Sedov		      prev=
5329*ae771770SStanislav Sedov		      continue
5330*ae771770SStanislav Sedov		    else
5331*ae771770SStanislav Sedov		      # If libtool objects are unsupported, then we need to preload.
5332*ae771770SStanislav Sedov		      prev=dlprefiles
5333*ae771770SStanislav Sedov		    fi
5334*ae771770SStanislav Sedov		  fi
5335*ae771770SStanislav Sedov
5336*ae771770SStanislav Sedov		  # CHECK ME:  I think I busted this.  -Ossama
5337*ae771770SStanislav Sedov		  if test "$prev" = dlprefiles; then
5338*ae771770SStanislav Sedov		    # Preload the old-style object.
5339*ae771770SStanislav Sedov		    func_append dlprefiles " $pic_object"
5340*ae771770SStanislav Sedov		    prev=
5341*ae771770SStanislav Sedov		  fi
5342*ae771770SStanislav Sedov
5343*ae771770SStanislav Sedov		  # A PIC object.
5344*ae771770SStanislav Sedov		  func_append libobjs " $pic_object"
5345*ae771770SStanislav Sedov		  arg="$pic_object"
5346*ae771770SStanislav Sedov		fi
5347*ae771770SStanislav Sedov
5348*ae771770SStanislav Sedov		# Non-PIC object.
5349*ae771770SStanislav Sedov		if test "$non_pic_object" != none; then
5350*ae771770SStanislav Sedov		  # Prepend the subdirectory the object is found in.
5351*ae771770SStanislav Sedov		  non_pic_object="$xdir$non_pic_object"
5352*ae771770SStanislav Sedov
5353*ae771770SStanislav Sedov		  # A standard non-PIC object
5354*ae771770SStanislav Sedov		  func_append non_pic_objects " $non_pic_object"
5355*ae771770SStanislav Sedov		  if test -z "$pic_object" || test "$pic_object" = none ; then
5356*ae771770SStanislav Sedov		    arg="$non_pic_object"
5357*ae771770SStanislav Sedov		  fi
5358*ae771770SStanislav Sedov		else
5359*ae771770SStanislav Sedov		  # If the PIC object exists, use it instead.
5360*ae771770SStanislav Sedov		  # $xdir was prepended to $pic_object above.
5361*ae771770SStanislav Sedov		  non_pic_object="$pic_object"
5362*ae771770SStanislav Sedov		  func_append non_pic_objects " $non_pic_object"
5363*ae771770SStanislav Sedov		fi
5364*ae771770SStanislav Sedov	      else
5365*ae771770SStanislav Sedov		# Only an error if not doing a dry-run.
5366*ae771770SStanislav Sedov		if $opt_dry_run; then
5367*ae771770SStanislav Sedov		  # Extract subdirectory from the argument.
5368*ae771770SStanislav Sedov		  func_dirname "$arg" "/" ""
5369*ae771770SStanislav Sedov		  xdir="$func_dirname_result"
5370*ae771770SStanislav Sedov
5371*ae771770SStanislav Sedov		  func_lo2o "$arg"
5372*ae771770SStanislav Sedov		  pic_object=$xdir$objdir/$func_lo2o_result
5373*ae771770SStanislav Sedov		  non_pic_object=$xdir$func_lo2o_result
5374*ae771770SStanislav Sedov		  func_append libobjs " $pic_object"
5375*ae771770SStanislav Sedov		  func_append non_pic_objects " $non_pic_object"
5376*ae771770SStanislav Sedov	        else
5377*ae771770SStanislav Sedov		  func_fatal_error "\`$arg' is not a valid libtool object"
5378*ae771770SStanislav Sedov		fi
5379*ae771770SStanislav Sedov	      fi
5380*ae771770SStanislav Sedov	    done
5381*ae771770SStanislav Sedov	  else
5382*ae771770SStanislav Sedov	    func_fatal_error "link input file \`$arg' does not exist"
5383*ae771770SStanislav Sedov	  fi
5384*ae771770SStanislav Sedov	  arg=$save_arg
5385*ae771770SStanislav Sedov	  prev=
5386*ae771770SStanislav Sedov	  continue
5387*ae771770SStanislav Sedov	  ;;
53881c43270aSJacques Vidrine	precious_regex)
53891c43270aSJacques Vidrine	  precious_files_regex="$arg"
53901c43270aSJacques Vidrine	  prev=
53911c43270aSJacques Vidrine	  continue
53921c43270aSJacques Vidrine	  ;;
5393b528cefcSMark Murray	release)
5394b528cefcSMark Murray	  release="-$arg"
5395b528cefcSMark Murray	  prev=
5396b528cefcSMark Murray	  continue
5397b528cefcSMark Murray	  ;;
53985e9cd1aeSAssar Westerlund	rpath | xrpath)
53995e9cd1aeSAssar Westerlund	  # We need an absolute path.
54004137ff4cSJacques Vidrine	  case $arg in
54015e9cd1aeSAssar Westerlund	  [\\/]* | [A-Za-z]:[\\/]*) ;;
54025e9cd1aeSAssar Westerlund	  *)
5403*ae771770SStanislav Sedov	    func_fatal_error "only absolute run-paths are allowed"
54045e9cd1aeSAssar Westerlund	    ;;
54055e9cd1aeSAssar Westerlund	  esac
54065e9cd1aeSAssar Westerlund	  if test "$prev" = rpath; then
54075e9cd1aeSAssar Westerlund	    case "$rpath " in
54085e9cd1aeSAssar Westerlund	    *" $arg "*) ;;
5409*ae771770SStanislav Sedov	    *) func_append rpath " $arg" ;;
54105e9cd1aeSAssar Westerlund	    esac
54115e9cd1aeSAssar Westerlund	  else
54125e9cd1aeSAssar Westerlund	    case "$xrpath " in
54135e9cd1aeSAssar Westerlund	    *" $arg "*) ;;
5414*ae771770SStanislav Sedov	    *) func_append xrpath " $arg" ;;
54155e9cd1aeSAssar Westerlund	    esac
54165e9cd1aeSAssar Westerlund	  fi
5417b528cefcSMark Murray	  prev=
5418b528cefcSMark Murray	  continue
5419b528cefcSMark Murray	  ;;
5420c19800e8SDoug Rabson	shrext)
5421c19800e8SDoug Rabson	  shrext_cmds="$arg"
5422c19800e8SDoug Rabson	  prev=
5423c19800e8SDoug Rabson	  continue
5424c19800e8SDoug Rabson	  ;;
5425*ae771770SStanislav Sedov	weak)
5426*ae771770SStanislav Sedov	  func_append weak_libs " $arg"
5427c19800e8SDoug Rabson	  prev=
5428c19800e8SDoug Rabson	  continue
5429c19800e8SDoug Rabson	  ;;
5430*ae771770SStanislav Sedov	xcclinker)
5431*ae771770SStanislav Sedov	  func_append linker_flags " $qarg"
5432*ae771770SStanislav Sedov	  func_append compiler_flags " $qarg"
5433*ae771770SStanislav Sedov	  prev=
5434*ae771770SStanislav Sedov	  func_append compile_command " $qarg"
5435*ae771770SStanislav Sedov	  func_append finalize_command " $qarg"
5436*ae771770SStanislav Sedov	  continue
5437*ae771770SStanislav Sedov	  ;;
5438*ae771770SStanislav Sedov	xcompiler)
5439*ae771770SStanislav Sedov	  func_append compiler_flags " $qarg"
5440*ae771770SStanislav Sedov	  prev=
5441*ae771770SStanislav Sedov	  func_append compile_command " $qarg"
5442*ae771770SStanislav Sedov	  func_append finalize_command " $qarg"
5443*ae771770SStanislav Sedov	  continue
5444*ae771770SStanislav Sedov	  ;;
5445*ae771770SStanislav Sedov	xlinker)
5446*ae771770SStanislav Sedov	  func_append linker_flags " $qarg"
5447*ae771770SStanislav Sedov	  func_append compiler_flags " $wl$qarg"
5448*ae771770SStanislav Sedov	  prev=
5449*ae771770SStanislav Sedov	  func_append compile_command " $wl$qarg"
5450*ae771770SStanislav Sedov	  func_append finalize_command " $wl$qarg"
5451*ae771770SStanislav Sedov	  continue
5452*ae771770SStanislav Sedov	  ;;
5453b528cefcSMark Murray	*)
5454b528cefcSMark Murray	  eval "$prev=\"\$arg\""
5455b528cefcSMark Murray	  prev=
5456b528cefcSMark Murray	  continue
5457b528cefcSMark Murray	  ;;
5458b528cefcSMark Murray	esac
54591c43270aSJacques Vidrine      fi # test -n "$prev"
5460b528cefcSMark Murray
5461b528cefcSMark Murray      prevarg="$arg"
5462b528cefcSMark Murray
54634137ff4cSJacques Vidrine      case $arg in
5464b528cefcSMark Murray      -all-static)
5465b528cefcSMark Murray	if test -n "$link_static_flag"; then
5466*ae771770SStanislav Sedov	  # See comment for -static flag below, for more details.
5467*ae771770SStanislav Sedov	  func_append compile_command " $link_static_flag"
5468*ae771770SStanislav Sedov	  func_append finalize_command " $link_static_flag"
5469b528cefcSMark Murray	fi
5470b528cefcSMark Murray	continue
5471b528cefcSMark Murray	;;
5472b528cefcSMark Murray
5473b528cefcSMark Murray      -allow-undefined)
5474b528cefcSMark Murray	# FIXME: remove this flag sometime in the future.
5475*ae771770SStanislav Sedov	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
5476b528cefcSMark Murray	;;
5477b528cefcSMark Murray
54785e9cd1aeSAssar Westerlund      -avoid-version)
54795e9cd1aeSAssar Westerlund	avoid_version=yes
54805e9cd1aeSAssar Westerlund	continue
54815e9cd1aeSAssar Westerlund	;;
54825e9cd1aeSAssar Westerlund
5483*ae771770SStanislav Sedov      -bindir)
5484*ae771770SStanislav Sedov	prev=bindir
5485*ae771770SStanislav Sedov	continue
5486*ae771770SStanislav Sedov	;;
5487*ae771770SStanislav Sedov
5488b528cefcSMark Murray      -dlopen)
5489b528cefcSMark Murray	prev=dlfiles
5490b528cefcSMark Murray	continue
5491b528cefcSMark Murray	;;
5492b528cefcSMark Murray
5493b528cefcSMark Murray      -dlpreopen)
5494b528cefcSMark Murray	prev=dlprefiles
5495b528cefcSMark Murray	continue
5496b528cefcSMark Murray	;;
5497b528cefcSMark Murray
5498b528cefcSMark Murray      -export-dynamic)
5499b528cefcSMark Murray	export_dynamic=yes
55005e9cd1aeSAssar Westerlund	continue
5501b528cefcSMark Murray	;;
5502b528cefcSMark Murray
55035e9cd1aeSAssar Westerlund      -export-symbols | -export-symbols-regex)
55045e9cd1aeSAssar Westerlund	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
5505*ae771770SStanislav Sedov	  func_fatal_error "more than one -exported-symbols argument is not allowed"
5506b528cefcSMark Murray	fi
55075e9cd1aeSAssar Westerlund	if test "X$arg" = "X-export-symbols"; then
55085e9cd1aeSAssar Westerlund	  prev=expsyms
55095e9cd1aeSAssar Westerlund	else
55105e9cd1aeSAssar Westerlund	  prev=expsyms_regex
55115e9cd1aeSAssar Westerlund	fi
5512b528cefcSMark Murray	continue
5513b528cefcSMark Murray	;;
5514b528cefcSMark Murray
5515*ae771770SStanislav Sedov      -framework)
5516*ae771770SStanislav Sedov	prev=framework
5517c19800e8SDoug Rabson	continue
5518c19800e8SDoug Rabson	;;
5519c19800e8SDoug Rabson
55201c43270aSJacques Vidrine      -inst-prefix-dir)
55211c43270aSJacques Vidrine	prev=inst_prefix
55221c43270aSJacques Vidrine	continue
55231c43270aSJacques Vidrine	;;
55241c43270aSJacques Vidrine
55254137ff4cSJacques Vidrine      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
55264137ff4cSJacques Vidrine      # so, if we see these flags be careful not to treat them like -L
55274137ff4cSJacques Vidrine      -L[A-Z][A-Z]*:*)
55284137ff4cSJacques Vidrine	case $with_gcc/$host in
55291c43270aSJacques Vidrine	no/*-*-irix* | /*-*-irix*)
5530*ae771770SStanislav Sedov	  func_append compile_command " $arg"
5531*ae771770SStanislav Sedov	  func_append finalize_command " $arg"
55324137ff4cSJacques Vidrine	  ;;
55334137ff4cSJacques Vidrine	esac
55344137ff4cSJacques Vidrine	continue
55354137ff4cSJacques Vidrine	;;
55364137ff4cSJacques Vidrine
5537b528cefcSMark Murray      -L*)
5538*ae771770SStanislav Sedov	func_stripname "-L" '' "$arg"
5539*ae771770SStanislav Sedov	if test -z "$func_stripname_result"; then
5540*ae771770SStanislav Sedov	  if test "$#" -gt 0; then
5541*ae771770SStanislav Sedov	    func_fatal_error "require no space between \`-L' and \`$1'"
5542*ae771770SStanislav Sedov	  else
5543*ae771770SStanislav Sedov	    func_fatal_error "need path for \`-L' option"
5544*ae771770SStanislav Sedov	  fi
5545*ae771770SStanislav Sedov	fi
5546*ae771770SStanislav Sedov	func_resolve_sysroot "$func_stripname_result"
5547*ae771770SStanislav Sedov	dir=$func_resolve_sysroot_result
55485e9cd1aeSAssar Westerlund	# We need an absolute path.
55494137ff4cSJacques Vidrine	case $dir in
55505e9cd1aeSAssar Westerlund	[\\/]* | [A-Za-z]:[\\/]*) ;;
5551b528cefcSMark Murray	*)
55525e9cd1aeSAssar Westerlund	  absdir=`cd "$dir" && pwd`
5553*ae771770SStanislav Sedov	  test -z "$absdir" && \
5554*ae771770SStanislav Sedov	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
55555e9cd1aeSAssar Westerlund	  dir="$absdir"
5556b528cefcSMark Murray	  ;;
5557b528cefcSMark Murray	esac
55585e9cd1aeSAssar Westerlund	case "$deplibs " in
5559*ae771770SStanislav Sedov	*" -L$dir "* | *" $arg "*)
5560*ae771770SStanislav Sedov	  # Will only happen for absolute or sysroot arguments
5561*ae771770SStanislav Sedov	  ;;
55625e9cd1aeSAssar Westerlund	*)
5563*ae771770SStanislav Sedov	  # Preserve sysroot, but never include relative directories
5564*ae771770SStanislav Sedov	  case $dir in
5565*ae771770SStanislav Sedov	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
5566*ae771770SStanislav Sedov	    *) func_append deplibs " -L$dir" ;;
5567*ae771770SStanislav Sedov	  esac
5568*ae771770SStanislav Sedov	  func_append lib_search_path " $dir"
55695e9cd1aeSAssar Westerlund	  ;;
55705e9cd1aeSAssar Westerlund	esac
55714137ff4cSJacques Vidrine	case $host in
5572*ae771770SStanislav Sedov	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5573*ae771770SStanislav Sedov	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
55744137ff4cSJacques Vidrine	  case :$dllsearchpath: in
55755e9cd1aeSAssar Westerlund	  *":$dir:"*) ;;
5576*ae771770SStanislav Sedov	  ::) dllsearchpath=$dir;;
5577*ae771770SStanislav Sedov	  *) func_append dllsearchpath ":$dir";;
55785e9cd1aeSAssar Westerlund	  esac
5579c19800e8SDoug Rabson	  case :$dllsearchpath: in
5580c19800e8SDoug Rabson	  *":$testbindir:"*) ;;
5581*ae771770SStanislav Sedov	  ::) dllsearchpath=$testbindir;;
5582*ae771770SStanislav Sedov	  *) func_append dllsearchpath ":$testbindir";;
5583c19800e8SDoug Rabson	  esac
55845e9cd1aeSAssar Westerlund	  ;;
55855e9cd1aeSAssar Westerlund	esac
55865e9cd1aeSAssar Westerlund	continue
5587b528cefcSMark Murray	;;
5588b528cefcSMark Murray
55895e9cd1aeSAssar Westerlund      -l*)
55904137ff4cSJacques Vidrine	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
55914137ff4cSJacques Vidrine	  case $host in
5592*ae771770SStanislav Sedov	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
55934137ff4cSJacques Vidrine	    # These systems don't actually have a C or math library (as such)
55945e9cd1aeSAssar Westerlund	    continue
55955e9cd1aeSAssar Westerlund	    ;;
5596c19800e8SDoug Rabson	  *-*-os2*)
55974137ff4cSJacques Vidrine	    # These systems don't actually have a C library (as such)
55984137ff4cSJacques Vidrine	    test "X$arg" = "X-lc" && continue
55995e9cd1aeSAssar Westerlund	    ;;
5600c19800e8SDoug Rabson	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
56018373020dSJacques Vidrine	    # Do not include libc due to us having libc/libc_r.
56028373020dSJacques Vidrine	    test "X$arg" = "X-lc" && continue
56038373020dSJacques Vidrine	    ;;
56041c43270aSJacques Vidrine	  *-*-rhapsody* | *-*-darwin1.[012])
56051c43270aSJacques Vidrine	    # Rhapsody C and math libraries are in the System framework
5606*ae771770SStanislav Sedov	    func_append deplibs " System.ltframework"
56071c43270aSJacques Vidrine	    continue
5608c19800e8SDoug Rabson	    ;;
5609c19800e8SDoug Rabson	  *-*-sco3.2v5* | *-*-sco5v6*)
5610c19800e8SDoug Rabson	    # Causes problems with __ctype
5611c19800e8SDoug Rabson	    test "X$arg" = "X-lc" && continue
5612c19800e8SDoug Rabson	    ;;
5613c19800e8SDoug Rabson	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
5614c19800e8SDoug Rabson	    # Compiler inserts libc in the correct place for threads to work
5615c19800e8SDoug Rabson	    test "X$arg" = "X-lc" && continue
5616c19800e8SDoug Rabson	    ;;
56178373020dSJacques Vidrine	  esac
56188373020dSJacques Vidrine	elif test "X$arg" = "X-lc_r"; then
56198373020dSJacques Vidrine	 case $host in
5620c19800e8SDoug Rabson	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
56218373020dSJacques Vidrine	   # Do not include libc_r directly, use -pthread flag.
56228373020dSJacques Vidrine	   continue
56238373020dSJacques Vidrine	   ;;
56245e9cd1aeSAssar Westerlund	 esac
56255e9cd1aeSAssar Westerlund	fi
5626*ae771770SStanislav Sedov	func_append deplibs " $arg"
56271c43270aSJacques Vidrine	continue
56281c43270aSJacques Vidrine	;;
56291c43270aSJacques Vidrine
5630b528cefcSMark Murray      -module)
5631b528cefcSMark Murray	module=yes
56325e9cd1aeSAssar Westerlund	continue
56335e9cd1aeSAssar Westerlund	;;
56345e9cd1aeSAssar Westerlund
5635*ae771770SStanislav Sedov      # Tru64 UNIX uses -model [arg] to determine the layout of C++
5636*ae771770SStanislav Sedov      # classes, name mangling, and exception handling.
5637*ae771770SStanislav Sedov      # Darwin uses the -arch flag to determine output architecture.
5638*ae771770SStanislav Sedov      -model|-arch|-isysroot|--sysroot)
5639*ae771770SStanislav Sedov	func_append compiler_flags " $arg"
5640*ae771770SStanislav Sedov	func_append compile_command " $arg"
5641*ae771770SStanislav Sedov	func_append finalize_command " $arg"
5642*ae771770SStanislav Sedov	prev=xcompiler
56431c43270aSJacques Vidrine	continue
56441c43270aSJacques Vidrine	;;
56451c43270aSJacques Vidrine
5646*ae771770SStanislav Sedov      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
5647*ae771770SStanislav Sedov	func_append compiler_flags " $arg"
5648*ae771770SStanislav Sedov	func_append compile_command " $arg"
5649*ae771770SStanislav Sedov	func_append finalize_command " $arg"
5650*ae771770SStanislav Sedov	case "$new_inherited_linker_flags " in
5651*ae771770SStanislav Sedov	    *" $arg "*) ;;
5652*ae771770SStanislav Sedov	    * ) func_append new_inherited_linker_flags " $arg" ;;
5653*ae771770SStanislav Sedov	esac
5654*ae771770SStanislav Sedov	continue
5655*ae771770SStanislav Sedov	;;
5656*ae771770SStanislav Sedov
5657*ae771770SStanislav Sedov      -multi_module)
5658*ae771770SStanislav Sedov	single_module="${wl}-multi_module"
56591c43270aSJacques Vidrine	continue
56601c43270aSJacques Vidrine	;;
56611c43270aSJacques Vidrine
56625e9cd1aeSAssar Westerlund      -no-fast-install)
56635e9cd1aeSAssar Westerlund	fast_install=no
56645e9cd1aeSAssar Westerlund	continue
56655e9cd1aeSAssar Westerlund	;;
56665e9cd1aeSAssar Westerlund
56675e9cd1aeSAssar Westerlund      -no-install)
56684137ff4cSJacques Vidrine	case $host in
5669*ae771770SStanislav Sedov	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
56705e9cd1aeSAssar Westerlund	  # The PATH hackery in wrapper scripts is required on Windows
5671*ae771770SStanislav Sedov	  # and Darwin in order for the loader to find any dlls it needs.
5672*ae771770SStanislav Sedov	  func_warning "\`-no-install' is ignored for $host"
5673*ae771770SStanislav Sedov	  func_warning "assuming \`-no-fast-install' instead"
56745e9cd1aeSAssar Westerlund	  fast_install=no
56755e9cd1aeSAssar Westerlund	  ;;
56764137ff4cSJacques Vidrine	*) no_install=yes ;;
56775e9cd1aeSAssar Westerlund	esac
56785e9cd1aeSAssar Westerlund	continue
5679b528cefcSMark Murray	;;
5680b528cefcSMark Murray
5681b528cefcSMark Murray      -no-undefined)
5682b528cefcSMark Murray	allow_undefined=no
5683b528cefcSMark Murray	continue
5684b528cefcSMark Murray	;;
5685b528cefcSMark Murray
56861c43270aSJacques Vidrine      -objectlist)
56871c43270aSJacques Vidrine	prev=objectlist
56881c43270aSJacques Vidrine	continue
56891c43270aSJacques Vidrine	;;
56901c43270aSJacques Vidrine
5691b528cefcSMark Murray      -o) prev=output ;;
5692b528cefcSMark Murray
56931c43270aSJacques Vidrine      -precious-files-regex)
56941c43270aSJacques Vidrine	prev=precious_regex
56951c43270aSJacques Vidrine	continue
56961c43270aSJacques Vidrine	;;
56971c43270aSJacques Vidrine
5698b528cefcSMark Murray      -release)
5699b528cefcSMark Murray	prev=release
5700b528cefcSMark Murray	continue
5701b528cefcSMark Murray	;;
5702b528cefcSMark Murray
5703b528cefcSMark Murray      -rpath)
5704b528cefcSMark Murray	prev=rpath
5705b528cefcSMark Murray	continue
5706b528cefcSMark Murray	;;
5707b528cefcSMark Murray
57085e9cd1aeSAssar Westerlund      -R)
57095e9cd1aeSAssar Westerlund	prev=xrpath
57105e9cd1aeSAssar Westerlund	continue
57115e9cd1aeSAssar Westerlund	;;
57125e9cd1aeSAssar Westerlund
57135e9cd1aeSAssar Westerlund      -R*)
5714*ae771770SStanislav Sedov	func_stripname '-R' '' "$arg"
5715*ae771770SStanislav Sedov	dir=$func_stripname_result
57165e9cd1aeSAssar Westerlund	# We need an absolute path.
57174137ff4cSJacques Vidrine	case $dir in
57185e9cd1aeSAssar Westerlund	[\\/]* | [A-Za-z]:[\\/]*) ;;
5719*ae771770SStanislav Sedov	=*)
5720*ae771770SStanislav Sedov	  func_stripname '=' '' "$dir"
5721*ae771770SStanislav Sedov	  dir=$lt_sysroot$func_stripname_result
5722*ae771770SStanislav Sedov	  ;;
57235e9cd1aeSAssar Westerlund	*)
5724*ae771770SStanislav Sedov	  func_fatal_error "only absolute run-paths are allowed"
57255e9cd1aeSAssar Westerlund	  ;;
57265e9cd1aeSAssar Westerlund	esac
57275e9cd1aeSAssar Westerlund	case "$xrpath " in
57285e9cd1aeSAssar Westerlund	*" $dir "*) ;;
5729*ae771770SStanislav Sedov	*) func_append xrpath " $dir" ;;
57305e9cd1aeSAssar Westerlund	esac
57315e9cd1aeSAssar Westerlund	continue
57325e9cd1aeSAssar Westerlund	;;
57335e9cd1aeSAssar Westerlund
5734*ae771770SStanislav Sedov      -shared)
5735*ae771770SStanislav Sedov	# The effects of -shared are defined in a previous loop.
5736*ae771770SStanislav Sedov	continue
5737*ae771770SStanislav Sedov	;;
5738*ae771770SStanislav Sedov
5739*ae771770SStanislav Sedov      -shrext)
5740*ae771770SStanislav Sedov	prev=shrext
5741*ae771770SStanislav Sedov	continue
5742*ae771770SStanislav Sedov	;;
5743*ae771770SStanislav Sedov
5744*ae771770SStanislav Sedov      -static | -static-libtool-libs)
57454137ff4cSJacques Vidrine	# The effects of -static are defined in a previous loop.
57464137ff4cSJacques Vidrine	# We used to do the same as -all-static on platforms that
57474137ff4cSJacques Vidrine	# didn't have a PIC flag, but the assumption that the effects
57484137ff4cSJacques Vidrine	# would be equivalent was wrong.  It would break on at least
57494137ff4cSJacques Vidrine	# Digital Unix and AIX.
5750b528cefcSMark Murray	continue
5751b528cefcSMark Murray	;;
5752b528cefcSMark Murray
57535e9cd1aeSAssar Westerlund      -thread-safe)
57545e9cd1aeSAssar Westerlund	thread_safe=yes
57555e9cd1aeSAssar Westerlund	continue
57565e9cd1aeSAssar Westerlund	;;
57575e9cd1aeSAssar Westerlund
5758b528cefcSMark Murray      -version-info)
5759b528cefcSMark Murray	prev=vinfo
5760b528cefcSMark Murray	continue
5761b528cefcSMark Murray	;;
5762*ae771770SStanislav Sedov
57631c43270aSJacques Vidrine      -version-number)
57641c43270aSJacques Vidrine	prev=vinfo
57651c43270aSJacques Vidrine	vinfo_number=yes
57661c43270aSJacques Vidrine	continue
57671c43270aSJacques Vidrine	;;
5768b528cefcSMark Murray
5769*ae771770SStanislav Sedov      -weak)
5770*ae771770SStanislav Sedov        prev=weak
5771*ae771770SStanislav Sedov	continue
5772*ae771770SStanislav Sedov	;;
5773*ae771770SStanislav Sedov
57745e9cd1aeSAssar Westerlund      -Wc,*)
5775*ae771770SStanislav Sedov	func_stripname '-Wc,' '' "$arg"
5776*ae771770SStanislav Sedov	args=$func_stripname_result
57775e9cd1aeSAssar Westerlund	arg=
57788373020dSJacques Vidrine	save_ifs="$IFS"; IFS=','
57795e9cd1aeSAssar Westerlund	for flag in $args; do
57805e9cd1aeSAssar Westerlund	  IFS="$save_ifs"
5781*ae771770SStanislav Sedov          func_quote_for_eval "$flag"
5782*ae771770SStanislav Sedov	  func_append arg " $func_quote_for_eval_result"
5783*ae771770SStanislav Sedov	  func_append compiler_flags " $func_quote_for_eval_result"
57845e9cd1aeSAssar Westerlund	done
57855e9cd1aeSAssar Westerlund	IFS="$save_ifs"
5786*ae771770SStanislav Sedov	func_stripname ' ' '' "$arg"
5787*ae771770SStanislav Sedov	arg=$func_stripname_result
57885e9cd1aeSAssar Westerlund	;;
57895e9cd1aeSAssar Westerlund
57905e9cd1aeSAssar Westerlund      -Wl,*)
5791*ae771770SStanislav Sedov	func_stripname '-Wl,' '' "$arg"
5792*ae771770SStanislav Sedov	args=$func_stripname_result
57935e9cd1aeSAssar Westerlund	arg=
57948373020dSJacques Vidrine	save_ifs="$IFS"; IFS=','
57955e9cd1aeSAssar Westerlund	for flag in $args; do
57965e9cd1aeSAssar Westerlund	  IFS="$save_ifs"
5797*ae771770SStanislav Sedov          func_quote_for_eval "$flag"
5798*ae771770SStanislav Sedov	  func_append arg " $wl$func_quote_for_eval_result"
5799*ae771770SStanislav Sedov	  func_append compiler_flags " $wl$func_quote_for_eval_result"
5800*ae771770SStanislav Sedov	  func_append linker_flags " $func_quote_for_eval_result"
58015e9cd1aeSAssar Westerlund	done
58025e9cd1aeSAssar Westerlund	IFS="$save_ifs"
5803*ae771770SStanislav Sedov	func_stripname ' ' '' "$arg"
5804*ae771770SStanislav Sedov	arg=$func_stripname_result
58055e9cd1aeSAssar Westerlund	;;
58065e9cd1aeSAssar Westerlund
58075e9cd1aeSAssar Westerlund      -Xcompiler)
58085e9cd1aeSAssar Westerlund	prev=xcompiler
58095e9cd1aeSAssar Westerlund	continue
58105e9cd1aeSAssar Westerlund	;;
58115e9cd1aeSAssar Westerlund
58125e9cd1aeSAssar Westerlund      -Xlinker)
58135e9cd1aeSAssar Westerlund	prev=xlinker
58145e9cd1aeSAssar Westerlund	continue
58155e9cd1aeSAssar Westerlund	;;
58165e9cd1aeSAssar Westerlund
58171c43270aSJacques Vidrine      -XCClinker)
58181c43270aSJacques Vidrine	prev=xcclinker
58191c43270aSJacques Vidrine	continue
58201c43270aSJacques Vidrine	;;
58211c43270aSJacques Vidrine
5822*ae771770SStanislav Sedov      # -msg_* for osf cc
5823*ae771770SStanislav Sedov      -msg_*)
5824*ae771770SStanislav Sedov	func_quote_for_eval "$arg"
5825*ae771770SStanislav Sedov	arg="$func_quote_for_eval_result"
5826*ae771770SStanislav Sedov	;;
5827*ae771770SStanislav Sedov
5828*ae771770SStanislav Sedov      # Flags to be passed through unchanged, with rationale:
5829*ae771770SStanislav Sedov      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
5830*ae771770SStanislav Sedov      # -r[0-9][0-9]*        specify processor for the SGI compiler
5831*ae771770SStanislav Sedov      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
5832*ae771770SStanislav Sedov      # +DA*, +DD*           enable 64-bit mode for the HP compiler
5833*ae771770SStanislav Sedov      # -q*                  compiler args for the IBM compiler
5834*ae771770SStanislav Sedov      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
5835*ae771770SStanislav Sedov      # -F/path              path to uninstalled frameworks, gcc on darwin
5836*ae771770SStanislav Sedov      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
5837*ae771770SStanislav Sedov      # @file                GCC response files
5838*ae771770SStanislav Sedov      # -tp=*                Portland pgcc target processor selection
5839*ae771770SStanislav Sedov      # --sysroot=*          for sysroot support
5840*ae771770SStanislav Sedov      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
5841*ae771770SStanislav Sedov      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
5842*ae771770SStanislav Sedov      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
5843*ae771770SStanislav Sedov      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
5844*ae771770SStanislav Sedov        func_quote_for_eval "$arg"
5845*ae771770SStanislav Sedov	arg="$func_quote_for_eval_result"
5846*ae771770SStanislav Sedov        func_append compile_command " $arg"
5847*ae771770SStanislav Sedov        func_append finalize_command " $arg"
5848*ae771770SStanislav Sedov        func_append compiler_flags " $arg"
5849*ae771770SStanislav Sedov        continue
5850*ae771770SStanislav Sedov        ;;
5851*ae771770SStanislav Sedov
5852b528cefcSMark Murray      # Some other compiler flag.
5853b528cefcSMark Murray      -* | +*)
5854*ae771770SStanislav Sedov        func_quote_for_eval "$arg"
5855*ae771770SStanislav Sedov	arg="$func_quote_for_eval_result"
5856b528cefcSMark Murray	;;
5857b528cefcSMark Murray
58581c43270aSJacques Vidrine      *.$objext)
58591c43270aSJacques Vidrine	# A standard object.
5860*ae771770SStanislav Sedov	func_append objs " $arg"
58611c43270aSJacques Vidrine	;;
58621c43270aSJacques Vidrine
58631c43270aSJacques Vidrine      *.lo)
58641c43270aSJacques Vidrine	# A libtool-controlled object.
58651c43270aSJacques Vidrine
58661c43270aSJacques Vidrine	# Check to see that this really is a libtool object.
5867*ae771770SStanislav Sedov	if func_lalib_unsafe_p "$arg"; then
58681c43270aSJacques Vidrine	  pic_object=
58691c43270aSJacques Vidrine	  non_pic_object=
58701c43270aSJacques Vidrine
58711c43270aSJacques Vidrine	  # Read the .lo file
5872*ae771770SStanislav Sedov	  func_source "$arg"
58731c43270aSJacques Vidrine
5874*ae771770SStanislav Sedov	  if test -z "$pic_object" ||
58751c43270aSJacques Vidrine	     test -z "$non_pic_object" ||
5876*ae771770SStanislav Sedov	     test "$pic_object" = none &&
58771c43270aSJacques Vidrine	     test "$non_pic_object" = none; then
5878*ae771770SStanislav Sedov	    func_fatal_error "cannot find name of object for \`$arg'"
58791c43270aSJacques Vidrine	  fi
58801c43270aSJacques Vidrine
58811c43270aSJacques Vidrine	  # Extract subdirectory from the argument.
5882*ae771770SStanislav Sedov	  func_dirname "$arg" "/" ""
5883*ae771770SStanislav Sedov	  xdir="$func_dirname_result"
58841c43270aSJacques Vidrine
58851c43270aSJacques Vidrine	  if test "$pic_object" != none; then
58861c43270aSJacques Vidrine	    # Prepend the subdirectory the object is found in.
58871c43270aSJacques Vidrine	    pic_object="$xdir$pic_object"
58881c43270aSJacques Vidrine
5889b528cefcSMark Murray	    if test "$prev" = dlfiles; then
58905e9cd1aeSAssar Westerlund	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5891*ae771770SStanislav Sedov		func_append dlfiles " $pic_object"
5892b528cefcSMark Murray		prev=
5893b528cefcSMark Murray		continue
5894b528cefcSMark Murray	      else
5895b528cefcSMark Murray		# If libtool objects are unsupported, then we need to preload.
5896b528cefcSMark Murray		prev=dlprefiles
5897b528cefcSMark Murray	      fi
5898b528cefcSMark Murray	    fi
5899b528cefcSMark Murray
59001c43270aSJacques Vidrine	    # CHECK ME:  I think I busted this.  -Ossama
5901b528cefcSMark Murray	    if test "$prev" = dlprefiles; then
5902b528cefcSMark Murray	      # Preload the old-style object.
5903*ae771770SStanislav Sedov	      func_append dlprefiles " $pic_object"
5904b528cefcSMark Murray	      prev=
59051c43270aSJacques Vidrine	    fi
59061c43270aSJacques Vidrine
59071c43270aSJacques Vidrine	    # A PIC object.
5908*ae771770SStanislav Sedov	    func_append libobjs " $pic_object"
59091c43270aSJacques Vidrine	    arg="$pic_object"
59101c43270aSJacques Vidrine	  fi
59111c43270aSJacques Vidrine
59121c43270aSJacques Vidrine	  # Non-PIC object.
59131c43270aSJacques Vidrine	  if test "$non_pic_object" != none; then
59141c43270aSJacques Vidrine	    # Prepend the subdirectory the object is found in.
59151c43270aSJacques Vidrine	    non_pic_object="$xdir$non_pic_object"
59161c43270aSJacques Vidrine
59171c43270aSJacques Vidrine	    # A standard non-PIC object
5918*ae771770SStanislav Sedov	    func_append non_pic_objects " $non_pic_object"
59191c43270aSJacques Vidrine	    if test -z "$pic_object" || test "$pic_object" = none ; then
59201c43270aSJacques Vidrine	      arg="$non_pic_object"
59211c43270aSJacques Vidrine	    fi
5922c19800e8SDoug Rabson	  else
5923c19800e8SDoug Rabson	    # If the PIC object exists, use it instead.
5924c19800e8SDoug Rabson	    # $xdir was prepended to $pic_object above.
5925c19800e8SDoug Rabson	    non_pic_object="$pic_object"
5926*ae771770SStanislav Sedov	    func_append non_pic_objects " $non_pic_object"
59271c43270aSJacques Vidrine	  fi
59285e9cd1aeSAssar Westerlund	else
59291c43270aSJacques Vidrine	  # Only an error if not doing a dry-run.
5930*ae771770SStanislav Sedov	  if $opt_dry_run; then
59311c43270aSJacques Vidrine	    # Extract subdirectory from the argument.
5932*ae771770SStanislav Sedov	    func_dirname "$arg" "/" ""
5933*ae771770SStanislav Sedov	    xdir="$func_dirname_result"
59341c43270aSJacques Vidrine
5935*ae771770SStanislav Sedov	    func_lo2o "$arg"
5936*ae771770SStanislav Sedov	    pic_object=$xdir$objdir/$func_lo2o_result
5937*ae771770SStanislav Sedov	    non_pic_object=$xdir$func_lo2o_result
5938*ae771770SStanislav Sedov	    func_append libobjs " $pic_object"
5939*ae771770SStanislav Sedov	    func_append non_pic_objects " $non_pic_object"
5940*ae771770SStanislav Sedov	  else
5941*ae771770SStanislav Sedov	    func_fatal_error "\`$arg' is not a valid libtool object"
59421c43270aSJacques Vidrine	  fi
59435e9cd1aeSAssar Westerlund	fi
59445e9cd1aeSAssar Westerlund	;;
59455e9cd1aeSAssar Westerlund
59465e9cd1aeSAssar Westerlund      *.$libext)
59475e9cd1aeSAssar Westerlund	# An archive.
5948*ae771770SStanislav Sedov	func_append deplibs " $arg"
5949*ae771770SStanislav Sedov	func_append old_deplibs " $arg"
59505e9cd1aeSAssar Westerlund	continue
5951b528cefcSMark Murray	;;
5952b528cefcSMark Murray
5953b528cefcSMark Murray      *.la)
5954b528cefcSMark Murray	# A libtool-controlled library.
5955b528cefcSMark Murray
5956*ae771770SStanislav Sedov	func_resolve_sysroot "$arg"
5957b528cefcSMark Murray	if test "$prev" = dlfiles; then
59585e9cd1aeSAssar Westerlund	  # This library was specified with -dlopen.
5959*ae771770SStanislav Sedov	  func_append dlfiles " $func_resolve_sysroot_result"
5960b528cefcSMark Murray	  prev=
59615e9cd1aeSAssar Westerlund	elif test "$prev" = dlprefiles; then
5962b528cefcSMark Murray	  # The library was specified with -dlpreopen.
5963*ae771770SStanislav Sedov	  func_append dlprefiles " $func_resolve_sysroot_result"
5964b528cefcSMark Murray	  prev=
5965b528cefcSMark Murray	else
5966*ae771770SStanislav Sedov	  func_append deplibs " $func_resolve_sysroot_result"
5967b528cefcSMark Murray	fi
5968b528cefcSMark Murray	continue
5969b528cefcSMark Murray	;;
5970b528cefcSMark Murray
5971b528cefcSMark Murray      # Some other compiler argument.
5972b528cefcSMark Murray      *)
5973b528cefcSMark Murray	# Unknown arguments in both finalize_command and compile_command need
5974b528cefcSMark Murray	# to be aesthetically quoted because they are evaled later.
5975*ae771770SStanislav Sedov	func_quote_for_eval "$arg"
5976*ae771770SStanislav Sedov	arg="$func_quote_for_eval_result"
5977b528cefcSMark Murray	;;
59784137ff4cSJacques Vidrine      esac # arg
5979b528cefcSMark Murray
5980b528cefcSMark Murray      # Now actually substitute the argument into the commands.
5981b528cefcSMark Murray      if test -n "$arg"; then
5982*ae771770SStanislav Sedov	func_append compile_command " $arg"
5983*ae771770SStanislav Sedov	func_append finalize_command " $arg"
5984b528cefcSMark Murray      fi
59854137ff4cSJacques Vidrine    done # argument parsing loop
5986b528cefcSMark Murray
5987*ae771770SStanislav Sedov    test -n "$prev" && \
5988*ae771770SStanislav Sedov      func_fatal_help "the \`$prevarg' option requires an argument"
5989b528cefcSMark Murray
59905e9cd1aeSAssar Westerlund    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
59915e9cd1aeSAssar Westerlund      eval arg=\"$export_dynamic_flag_spec\"
5992*ae771770SStanislav Sedov      func_append compile_command " $arg"
5993*ae771770SStanislav Sedov      func_append finalize_command " $arg"
5994b528cefcSMark Murray    fi
5995b528cefcSMark Murray
59961c43270aSJacques Vidrine    oldlibs=
5997b528cefcSMark Murray    # calculate the name of the file, without its directory
5998*ae771770SStanislav Sedov    func_basename "$output"
5999*ae771770SStanislav Sedov    outputname="$func_basename_result"
60005e9cd1aeSAssar Westerlund    libobjs_save="$libobjs"
6001b528cefcSMark Murray
60025e9cd1aeSAssar Westerlund    if test -n "$shlibpath_var"; then
60035e9cd1aeSAssar Westerlund      # get the directories listed in $shlibpath_var
6004*ae771770SStanislav Sedov      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
60055e9cd1aeSAssar Westerlund    else
60065e9cd1aeSAssar Westerlund      shlib_search_path=
60075e9cd1aeSAssar Westerlund    fi
60085e9cd1aeSAssar Westerlund    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
60095e9cd1aeSAssar Westerlund    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
60105e9cd1aeSAssar Westerlund
6011*ae771770SStanislav Sedov    func_dirname "$output" "/" ""
6012*ae771770SStanislav Sedov    output_objdir="$func_dirname_result$objdir"
6013*ae771770SStanislav Sedov    func_to_tool_file "$output_objdir/"
6014*ae771770SStanislav Sedov    tool_output_objdir=$func_to_tool_file_result
60155e9cd1aeSAssar Westerlund    # Create the object directory.
6016*ae771770SStanislav Sedov    func_mkdir_p "$output_objdir"
60175e9cd1aeSAssar Westerlund
60185e9cd1aeSAssar Westerlund    # Determine the type of output
60194137ff4cSJacques Vidrine    case $output in
6020b528cefcSMark Murray    "")
6021*ae771770SStanislav Sedov      func_fatal_help "you must specify an output file"
6022b528cefcSMark Murray      ;;
60235e9cd1aeSAssar Westerlund    *.$libext) linkmode=oldlib ;;
60245e9cd1aeSAssar Westerlund    *.lo | *.$objext) linkmode=obj ;;
60255e9cd1aeSAssar Westerlund    *.la) linkmode=lib ;;
60265e9cd1aeSAssar Westerlund    *) linkmode=prog ;; # Anything else should be a program.
60275e9cd1aeSAssar Westerlund    esac
6028b528cefcSMark Murray
60295e9cd1aeSAssar Westerlund    specialdeplibs=
60301c43270aSJacques Vidrine
60315e9cd1aeSAssar Westerlund    libs=
60325e9cd1aeSAssar Westerlund    # Find all interdependent deplibs by searching for libraries
60335e9cd1aeSAssar Westerlund    # that are linked more than once (e.g. -la -lb -la)
60345e9cd1aeSAssar Westerlund    for deplib in $deplibs; do
6035*ae771770SStanislav Sedov      if $opt_preserve_dup_deps ; then
60365e9cd1aeSAssar Westerlund	case "$libs " in
6037*ae771770SStanislav Sedov	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
60385e9cd1aeSAssar Westerlund	esac
60391c43270aSJacques Vidrine      fi
6040*ae771770SStanislav Sedov      func_append libs " $deplib"
60415e9cd1aeSAssar Westerlund    done
60421c43270aSJacques Vidrine
60431c43270aSJacques Vidrine    if test "$linkmode" = lib; then
60441c43270aSJacques Vidrine      libs="$predeps $libs $compiler_lib_search_path $postdeps"
60451c43270aSJacques Vidrine
60461c43270aSJacques Vidrine      # Compute libraries that are listed more than once in $predeps
60471c43270aSJacques Vidrine      # $postdeps and mark them as special (i.e., whose duplicates are
60481c43270aSJacques Vidrine      # not to be eliminated).
60491c43270aSJacques Vidrine      pre_post_deps=
6050*ae771770SStanislav Sedov      if $opt_duplicate_compiler_generated_deps; then
60511c43270aSJacques Vidrine	for pre_post_dep in $predeps $postdeps; do
60521c43270aSJacques Vidrine	  case "$pre_post_deps " in
6053*ae771770SStanislav Sedov	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
60541c43270aSJacques Vidrine	  esac
6055*ae771770SStanislav Sedov	  func_append pre_post_deps " $pre_post_dep"
60561c43270aSJacques Vidrine	done
60571c43270aSJacques Vidrine      fi
60581c43270aSJacques Vidrine      pre_post_deps=
60591c43270aSJacques Vidrine    fi
60601c43270aSJacques Vidrine
60615e9cd1aeSAssar Westerlund    deplibs=
60625e9cd1aeSAssar Westerlund    newdependency_libs=
60635e9cd1aeSAssar Westerlund    newlib_search_path=
60645e9cd1aeSAssar Westerlund    need_relink=no # whether we're linking any uninstalled libtool libraries
60654137ff4cSJacques Vidrine    notinst_deplibs= # not-installed libtool libraries
6066*ae771770SStanislav Sedov    notinst_path= # paths that contain not-installed libtool libraries
6067*ae771770SStanislav Sedov
60685e9cd1aeSAssar Westerlund    case $linkmode in
60695e9cd1aeSAssar Westerlund    lib)
6070*ae771770SStanislav Sedov	passes="conv dlpreopen link"
60715e9cd1aeSAssar Westerlund	for file in $dlfiles $dlprefiles; do
60724137ff4cSJacques Vidrine	  case $file in
60735e9cd1aeSAssar Westerlund	  *.la) ;;
60745e9cd1aeSAssar Westerlund	  *)
6075*ae771770SStanislav Sedov	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
60765e9cd1aeSAssar Westerlund	    ;;
60775e9cd1aeSAssar Westerlund	  esac
60785e9cd1aeSAssar Westerlund	done
60795e9cd1aeSAssar Westerlund	;;
60805e9cd1aeSAssar Westerlund    prog)
60815e9cd1aeSAssar Westerlund	compile_deplibs=
60825e9cd1aeSAssar Westerlund	finalize_deplibs=
60835e9cd1aeSAssar Westerlund	alldeplibs=no
60845e9cd1aeSAssar Westerlund	newdlfiles=
60855e9cd1aeSAssar Westerlund	newdlprefiles=
60865e9cd1aeSAssar Westerlund	passes="conv scan dlopen dlpreopen link"
60875e9cd1aeSAssar Westerlund	;;
60885e9cd1aeSAssar Westerlund    *)  passes="conv"
60895e9cd1aeSAssar Westerlund	;;
60905e9cd1aeSAssar Westerlund    esac
6091*ae771770SStanislav Sedov
60925e9cd1aeSAssar Westerlund    for pass in $passes; do
6093*ae771770SStanislav Sedov      # The preopen pass in lib mode reverses $deplibs; put it back here
6094*ae771770SStanislav Sedov      # so that -L comes before libs that need it for instance...
6095*ae771770SStanislav Sedov      if test "$linkmode,$pass" = "lib,link"; then
6096*ae771770SStanislav Sedov	## FIXME: Find the place where the list is rebuilt in the wrong
6097*ae771770SStanislav Sedov	##        order, and fix it there properly
6098*ae771770SStanislav Sedov        tmp_deplibs=
6099*ae771770SStanislav Sedov	for deplib in $deplibs; do
6100*ae771770SStanislav Sedov	  tmp_deplibs="$deplib $tmp_deplibs"
6101*ae771770SStanislav Sedov	done
6102*ae771770SStanislav Sedov	deplibs="$tmp_deplibs"
6103*ae771770SStanislav Sedov      fi
6104*ae771770SStanislav Sedov
61051c43270aSJacques Vidrine      if test "$linkmode,$pass" = "lib,link" ||
61061c43270aSJacques Vidrine	 test "$linkmode,$pass" = "prog,scan"; then
61071c43270aSJacques Vidrine	libs="$deplibs"
61084137ff4cSJacques Vidrine	deplibs=
61091c43270aSJacques Vidrine      fi
61101c43270aSJacques Vidrine      if test "$linkmode" = prog; then
61111c43270aSJacques Vidrine	case $pass in
61121c43270aSJacques Vidrine	dlopen) libs="$dlfiles" ;;
61135e9cd1aeSAssar Westerlund	dlpreopen) libs="$dlprefiles" ;;
61145e9cd1aeSAssar Westerlund	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
61155e9cd1aeSAssar Westerlund	esac
61165e9cd1aeSAssar Westerlund      fi
6117*ae771770SStanislav Sedov      if test "$linkmode,$pass" = "lib,dlpreopen"; then
6118*ae771770SStanislav Sedov	# Collect and forward deplibs of preopened libtool libs
6119*ae771770SStanislav Sedov	for lib in $dlprefiles; do
6120*ae771770SStanislav Sedov	  # Ignore non-libtool-libs
6121*ae771770SStanislav Sedov	  dependency_libs=
6122*ae771770SStanislav Sedov	  func_resolve_sysroot "$lib"
6123*ae771770SStanislav Sedov	  case $lib in
6124*ae771770SStanislav Sedov	  *.la)	func_source "$func_resolve_sysroot_result" ;;
6125*ae771770SStanislav Sedov	  esac
6126*ae771770SStanislav Sedov
6127*ae771770SStanislav Sedov	  # Collect preopened libtool deplibs, except any this library
6128*ae771770SStanislav Sedov	  # has declared as weak libs
6129*ae771770SStanislav Sedov	  for deplib in $dependency_libs; do
6130*ae771770SStanislav Sedov	    func_basename "$deplib"
6131*ae771770SStanislav Sedov            deplib_base=$func_basename_result
6132*ae771770SStanislav Sedov	    case " $weak_libs " in
6133*ae771770SStanislav Sedov	    *" $deplib_base "*) ;;
6134*ae771770SStanislav Sedov	    *) func_append deplibs " $deplib" ;;
6135*ae771770SStanislav Sedov	    esac
6136*ae771770SStanislav Sedov	  done
6137*ae771770SStanislav Sedov	done
6138*ae771770SStanislav Sedov	libs="$dlprefiles"
6139*ae771770SStanislav Sedov      fi
61401c43270aSJacques Vidrine      if test "$pass" = dlopen; then
61411c43270aSJacques Vidrine	# Collect dlpreopened libraries
61421c43270aSJacques Vidrine	save_deplibs="$deplibs"
61431c43270aSJacques Vidrine	deplibs=
61441c43270aSJacques Vidrine      fi
6145*ae771770SStanislav Sedov
61465e9cd1aeSAssar Westerlund      for deplib in $libs; do
61475e9cd1aeSAssar Westerlund	lib=
61485e9cd1aeSAssar Westerlund	found=no
61494137ff4cSJacques Vidrine	case $deplib in
6150*ae771770SStanislav Sedov	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
61511c43270aSJacques Vidrine	  if test "$linkmode,$pass" = "prog,link"; then
61521c43270aSJacques Vidrine	    compile_deplibs="$deplib $compile_deplibs"
61531c43270aSJacques Vidrine	    finalize_deplibs="$deplib $finalize_deplibs"
61541c43270aSJacques Vidrine	  else
6155*ae771770SStanislav Sedov	    func_append compiler_flags " $deplib"
6156*ae771770SStanislav Sedov	    if test "$linkmode" = lib ; then
6157*ae771770SStanislav Sedov		case "$new_inherited_linker_flags " in
6158*ae771770SStanislav Sedov		    *" $deplib "*) ;;
6159*ae771770SStanislav Sedov		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6160*ae771770SStanislav Sedov		esac
6161*ae771770SStanislav Sedov	    fi
61621c43270aSJacques Vidrine	  fi
61631c43270aSJacques Vidrine	  continue
61641c43270aSJacques Vidrine	  ;;
61655e9cd1aeSAssar Westerlund	-l*)
61661c43270aSJacques Vidrine	  if test "$linkmode" != lib && test "$linkmode" != prog; then
6167*ae771770SStanislav Sedov	    func_warning "\`-l' is ignored for archives/objects"
61685e9cd1aeSAssar Westerlund	    continue
61695e9cd1aeSAssar Westerlund	  fi
6170*ae771770SStanislav Sedov	  func_stripname '-l' '' "$deplib"
6171*ae771770SStanislav Sedov	  name=$func_stripname_result
6172*ae771770SStanislav Sedov	  if test "$linkmode" = lib; then
6173*ae771770SStanislav Sedov	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
6174*ae771770SStanislav Sedov	  else
6175*ae771770SStanislav Sedov	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
6176*ae771770SStanislav Sedov	  fi
6177*ae771770SStanislav Sedov	  for searchdir in $searchdirs; do
6178c19800e8SDoug Rabson	    for search_ext in .la $std_shrext .so .a; do
61795e9cd1aeSAssar Westerlund	      # Search the libtool library
61801c43270aSJacques Vidrine	      lib="$searchdir/lib${name}${search_ext}"
61815e9cd1aeSAssar Westerlund	      if test -f "$lib"; then
61821c43270aSJacques Vidrine		if test "$search_ext" = ".la"; then
61835e9cd1aeSAssar Westerlund		  found=yes
61841c43270aSJacques Vidrine		else
61851c43270aSJacques Vidrine		  found=no
61865e9cd1aeSAssar Westerlund		fi
61871c43270aSJacques Vidrine		break 2
61881c43270aSJacques Vidrine	      fi
61891c43270aSJacques Vidrine	    done
61905e9cd1aeSAssar Westerlund	  done
61915e9cd1aeSAssar Westerlund	  if test "$found" != yes; then
61924137ff4cSJacques Vidrine	    # deplib doesn't seem to be a libtool library
61935e9cd1aeSAssar Westerlund	    if test "$linkmode,$pass" = "prog,link"; then
61945e9cd1aeSAssar Westerlund	      compile_deplibs="$deplib $compile_deplibs"
61955e9cd1aeSAssar Westerlund	      finalize_deplibs="$deplib $finalize_deplibs"
61965e9cd1aeSAssar Westerlund	    else
61975e9cd1aeSAssar Westerlund	      deplibs="$deplib $deplibs"
61981c43270aSJacques Vidrine	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
61995e9cd1aeSAssar Westerlund	    fi
62005e9cd1aeSAssar Westerlund	    continue
62011c43270aSJacques Vidrine	  else # deplib is a libtool library
62021c43270aSJacques Vidrine	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
62031c43270aSJacques Vidrine	    # We need to do some special things here, and not later.
62041c43270aSJacques Vidrine	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
62051c43270aSJacques Vidrine	      case " $predeps $postdeps " in
62061c43270aSJacques Vidrine	      *" $deplib "*)
6207*ae771770SStanislav Sedov		if func_lalib_p "$lib"; then
62081c43270aSJacques Vidrine		  library_names=
62091c43270aSJacques Vidrine		  old_library=
6210*ae771770SStanislav Sedov		  func_source "$lib"
62111c43270aSJacques Vidrine		  for l in $old_library $library_names; do
62121c43270aSJacques Vidrine		    ll="$l"
62131c43270aSJacques Vidrine		  done
62141c43270aSJacques Vidrine		  if test "X$ll" = "X$old_library" ; then # only static version available
62151c43270aSJacques Vidrine		    found=no
6216*ae771770SStanislav Sedov		    func_dirname "$lib" "" "."
6217*ae771770SStanislav Sedov		    ladir="$func_dirname_result"
62181c43270aSJacques Vidrine		    lib=$ladir/$old_library
62191c43270aSJacques Vidrine		    if test "$linkmode,$pass" = "prog,link"; then
62201c43270aSJacques Vidrine		      compile_deplibs="$deplib $compile_deplibs"
62211c43270aSJacques Vidrine		      finalize_deplibs="$deplib $finalize_deplibs"
62221c43270aSJacques Vidrine		    else
62231c43270aSJacques Vidrine		      deplibs="$deplib $deplibs"
62241c43270aSJacques Vidrine		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
62251c43270aSJacques Vidrine		    fi
62261c43270aSJacques Vidrine		    continue
62271c43270aSJacques Vidrine		  fi
62281c43270aSJacques Vidrine		fi
62291c43270aSJacques Vidrine		;;
62301c43270aSJacques Vidrine	      *) ;;
62311c43270aSJacques Vidrine	      esac
62321c43270aSJacques Vidrine	    fi
62335e9cd1aeSAssar Westerlund	  fi
62344137ff4cSJacques Vidrine	  ;; # -l
6235*ae771770SStanislav Sedov	*.ltframework)
6236*ae771770SStanislav Sedov	  if test "$linkmode,$pass" = "prog,link"; then
6237*ae771770SStanislav Sedov	    compile_deplibs="$deplib $compile_deplibs"
6238*ae771770SStanislav Sedov	    finalize_deplibs="$deplib $finalize_deplibs"
6239*ae771770SStanislav Sedov	  else
6240*ae771770SStanislav Sedov	    deplibs="$deplib $deplibs"
6241*ae771770SStanislav Sedov	    if test "$linkmode" = lib ; then
6242*ae771770SStanislav Sedov		case "$new_inherited_linker_flags " in
6243*ae771770SStanislav Sedov		    *" $deplib "*) ;;
6244*ae771770SStanislav Sedov		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6245*ae771770SStanislav Sedov		esac
6246*ae771770SStanislav Sedov	    fi
6247*ae771770SStanislav Sedov	  fi
6248*ae771770SStanislav Sedov	  continue
6249*ae771770SStanislav Sedov	  ;;
62505e9cd1aeSAssar Westerlund	-L*)
62515e9cd1aeSAssar Westerlund	  case $linkmode in
62525e9cd1aeSAssar Westerlund	  lib)
62535e9cd1aeSAssar Westerlund	    deplibs="$deplib $deplibs"
62541c43270aSJacques Vidrine	    test "$pass" = conv && continue
62555e9cd1aeSAssar Westerlund	    newdependency_libs="$deplib $newdependency_libs"
6256*ae771770SStanislav Sedov	    func_stripname '-L' '' "$deplib"
6257*ae771770SStanislav Sedov	    func_resolve_sysroot "$func_stripname_result"
6258*ae771770SStanislav Sedov	    func_append newlib_search_path " $func_resolve_sysroot_result"
62595e9cd1aeSAssar Westerlund	    ;;
62605e9cd1aeSAssar Westerlund	  prog)
62611c43270aSJacques Vidrine	    if test "$pass" = conv; then
62625e9cd1aeSAssar Westerlund	      deplibs="$deplib $deplibs"
62635e9cd1aeSAssar Westerlund	      continue
62645e9cd1aeSAssar Westerlund	    fi
62651c43270aSJacques Vidrine	    if test "$pass" = scan; then
62665e9cd1aeSAssar Westerlund	      deplibs="$deplib $deplibs"
62675e9cd1aeSAssar Westerlund	    else
62685e9cd1aeSAssar Westerlund	      compile_deplibs="$deplib $compile_deplibs"
62695e9cd1aeSAssar Westerlund	      finalize_deplibs="$deplib $finalize_deplibs"
62705e9cd1aeSAssar Westerlund	    fi
6271*ae771770SStanislav Sedov	    func_stripname '-L' '' "$deplib"
6272*ae771770SStanislav Sedov	    func_resolve_sysroot "$func_stripname_result"
6273*ae771770SStanislav Sedov	    func_append newlib_search_path " $func_resolve_sysroot_result"
62745e9cd1aeSAssar Westerlund	    ;;
62755e9cd1aeSAssar Westerlund	  *)
6276*ae771770SStanislav Sedov	    func_warning "\`-L' is ignored for archives/objects"
62775e9cd1aeSAssar Westerlund	    ;;
62784137ff4cSJacques Vidrine	  esac # linkmode
62795e9cd1aeSAssar Westerlund	  continue
62804137ff4cSJacques Vidrine	  ;; # -L
62815e9cd1aeSAssar Westerlund	-R*)
62821c43270aSJacques Vidrine	  if test "$pass" = link; then
6283*ae771770SStanislav Sedov	    func_stripname '-R' '' "$deplib"
6284*ae771770SStanislav Sedov	    func_resolve_sysroot "$func_stripname_result"
6285*ae771770SStanislav Sedov	    dir=$func_resolve_sysroot_result
62865e9cd1aeSAssar Westerlund	    # Make sure the xrpath contains only unique directories.
62875e9cd1aeSAssar Westerlund	    case "$xrpath " in
62885e9cd1aeSAssar Westerlund	    *" $dir "*) ;;
6289*ae771770SStanislav Sedov	    *) func_append xrpath " $dir" ;;
62905e9cd1aeSAssar Westerlund	    esac
62915e9cd1aeSAssar Westerlund	  fi
62925e9cd1aeSAssar Westerlund	  deplibs="$deplib $deplibs"
62935e9cd1aeSAssar Westerlund	  continue
62945e9cd1aeSAssar Westerlund	  ;;
6295*ae771770SStanislav Sedov	*.la)
6296*ae771770SStanislav Sedov	  func_resolve_sysroot "$deplib"
6297*ae771770SStanislav Sedov	  lib=$func_resolve_sysroot_result
6298*ae771770SStanislav Sedov	  ;;
62995e9cd1aeSAssar Westerlund	*.$libext)
63001c43270aSJacques Vidrine	  if test "$pass" = conv; then
63015e9cd1aeSAssar Westerlund	    deplibs="$deplib $deplibs"
63025e9cd1aeSAssar Westerlund	    continue
63035e9cd1aeSAssar Westerlund	  fi
63045e9cd1aeSAssar Westerlund	  case $linkmode in
63055e9cd1aeSAssar Westerlund	  lib)
6306*ae771770SStanislav Sedov	    # Linking convenience modules into shared libraries is allowed,
6307*ae771770SStanislav Sedov	    # but linking other static libraries is non-portable.
6308*ae771770SStanislav Sedov	    case " $dlpreconveniencelibs " in
6309*ae771770SStanislav Sedov	    *" $deplib "*) ;;
6310*ae771770SStanislav Sedov	    *)
6311c19800e8SDoug Rabson	      valid_a_lib=no
6312c19800e8SDoug Rabson	      case $deplibs_check_method in
6313c19800e8SDoug Rabson		match_pattern*)
6314*ae771770SStanislav Sedov		  set dummy $deplibs_check_method; shift
6315*ae771770SStanislav Sedov		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
6316*ae771770SStanislav Sedov		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
6317c19800e8SDoug Rabson		    | $EGREP "$match_pattern_regex" > /dev/null; then
6318c19800e8SDoug Rabson		    valid_a_lib=yes
6319c19800e8SDoug Rabson		  fi
6320c19800e8SDoug Rabson		;;
6321c19800e8SDoug Rabson		pass_all)
6322c19800e8SDoug Rabson		  valid_a_lib=yes
6323c19800e8SDoug Rabson		;;
6324c19800e8SDoug Rabson	      esac
6325c19800e8SDoug Rabson	      if test "$valid_a_lib" != yes; then
6326*ae771770SStanislav Sedov		echo
6327*ae771770SStanislav Sedov		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
6328*ae771770SStanislav Sedov		echo "*** I have the capability to make that library automatically link in when"
6329*ae771770SStanislav Sedov		echo "*** you link to this library.  But I can only do this if you have a"
6330*ae771770SStanislav Sedov		echo "*** shared version of the library, which you do not appear to have"
6331*ae771770SStanislav Sedov		echo "*** because the file extensions .$libext of this argument makes me believe"
6332*ae771770SStanislav Sedov		echo "*** that it is just a static archive that I should not use here."
63335e9cd1aeSAssar Westerlund	      else
6334*ae771770SStanislav Sedov		echo
6335*ae771770SStanislav Sedov		$ECHO "*** Warning: Linking the shared library $output against the"
6336*ae771770SStanislav Sedov		$ECHO "*** static library $deplib is not portable!"
63375e9cd1aeSAssar Westerlund		deplibs="$deplib $deplibs"
63385e9cd1aeSAssar Westerlund	      fi
6339*ae771770SStanislav Sedov	      ;;
6340*ae771770SStanislav Sedov	    esac
63415e9cd1aeSAssar Westerlund	    continue
63425e9cd1aeSAssar Westerlund	    ;;
63435e9cd1aeSAssar Westerlund	  prog)
63441c43270aSJacques Vidrine	    if test "$pass" != link; then
63455e9cd1aeSAssar Westerlund	      deplibs="$deplib $deplibs"
63465e9cd1aeSAssar Westerlund	    else
63475e9cd1aeSAssar Westerlund	      compile_deplibs="$deplib $compile_deplibs"
63485e9cd1aeSAssar Westerlund	      finalize_deplibs="$deplib $finalize_deplibs"
63495e9cd1aeSAssar Westerlund	    fi
63505e9cd1aeSAssar Westerlund	    continue
63515e9cd1aeSAssar Westerlund	    ;;
63524137ff4cSJacques Vidrine	  esac # linkmode
63534137ff4cSJacques Vidrine	  ;; # *.$libext
63545e9cd1aeSAssar Westerlund	*.lo | *.$objext)
63551c43270aSJacques Vidrine	  if test "$pass" = conv; then
63561c43270aSJacques Vidrine	    deplibs="$deplib $deplibs"
63571c43270aSJacques Vidrine	  elif test "$linkmode" = prog; then
63581c43270aSJacques Vidrine	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
63595e9cd1aeSAssar Westerlund	      # If there is no dlopen support or we're linking statically,
63605e9cd1aeSAssar Westerlund	      # we need to preload.
6361*ae771770SStanislav Sedov	      func_append newdlprefiles " $deplib"
63625e9cd1aeSAssar Westerlund	      compile_deplibs="$deplib $compile_deplibs"
63635e9cd1aeSAssar Westerlund	      finalize_deplibs="$deplib $finalize_deplibs"
63645e9cd1aeSAssar Westerlund	    else
6365*ae771770SStanislav Sedov	      func_append newdlfiles " $deplib"
63665e9cd1aeSAssar Westerlund	    fi
63671c43270aSJacques Vidrine	  fi
63685e9cd1aeSAssar Westerlund	  continue
63695e9cd1aeSAssar Westerlund	  ;;
63705e9cd1aeSAssar Westerlund	%DEPLIBS%)
63715e9cd1aeSAssar Westerlund	  alldeplibs=yes
63725e9cd1aeSAssar Westerlund	  continue
63735e9cd1aeSAssar Westerlund	  ;;
63744137ff4cSJacques Vidrine	esac # case $deplib
6375*ae771770SStanislav Sedov
63761c43270aSJacques Vidrine	if test "$found" = yes || test -f "$lib"; then :
63775e9cd1aeSAssar Westerlund	else
6378*ae771770SStanislav Sedov	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
6379b528cefcSMark Murray	fi
6380b528cefcSMark Murray
63815e9cd1aeSAssar Westerlund	# Check to see that this really is a libtool archive.
6382*ae771770SStanislav Sedov	func_lalib_unsafe_p "$lib" \
6383*ae771770SStanislav Sedov	  || func_fatal_error "\`$lib' is not a valid libtool archive"
63845e9cd1aeSAssar Westerlund
6385*ae771770SStanislav Sedov	func_dirname "$lib" "" "."
6386*ae771770SStanislav Sedov	ladir="$func_dirname_result"
63875e9cd1aeSAssar Westerlund
63885e9cd1aeSAssar Westerlund	dlname=
63895e9cd1aeSAssar Westerlund	dlopen=
63905e9cd1aeSAssar Westerlund	dlpreopen=
63915e9cd1aeSAssar Westerlund	libdir=
63925e9cd1aeSAssar Westerlund	library_names=
63935e9cd1aeSAssar Westerlund	old_library=
6394*ae771770SStanislav Sedov	inherited_linker_flags=
63955e9cd1aeSAssar Westerlund	# If the library was installed with an old release of libtool,
63961c43270aSJacques Vidrine	# it will not redefine variables installed, or shouldnotlink
63975e9cd1aeSAssar Westerlund	installed=yes
63981c43270aSJacques Vidrine	shouldnotlink=no
6399c19800e8SDoug Rabson	avoidtemprpath=
6400c19800e8SDoug Rabson
64015e9cd1aeSAssar Westerlund
64025e9cd1aeSAssar Westerlund	# Read the .la file
6403*ae771770SStanislav Sedov	func_source "$lib"
64045e9cd1aeSAssar Westerlund
6405*ae771770SStanislav Sedov	# Convert "-framework foo" to "foo.ltframework"
6406*ae771770SStanislav Sedov	if test -n "$inherited_linker_flags"; then
6407*ae771770SStanislav Sedov	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
6408*ae771770SStanislav Sedov	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
6409*ae771770SStanislav Sedov	    case " $new_inherited_linker_flags " in
6410*ae771770SStanislav Sedov	      *" $tmp_inherited_linker_flag "*) ;;
6411*ae771770SStanislav Sedov	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
6412*ae771770SStanislav Sedov	    esac
6413*ae771770SStanislav Sedov	  done
6414*ae771770SStanislav Sedov	fi
6415*ae771770SStanislav Sedov	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
64165e9cd1aeSAssar Westerlund	if test "$linkmode,$pass" = "lib,link" ||
64175e9cd1aeSAssar Westerlund	   test "$linkmode,$pass" = "prog,scan" ||
64181c43270aSJacques Vidrine	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
6419*ae771770SStanislav Sedov	  test -n "$dlopen" && func_append dlfiles " $dlopen"
6420*ae771770SStanislav Sedov	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
64215e9cd1aeSAssar Westerlund	fi
64225e9cd1aeSAssar Westerlund
64231c43270aSJacques Vidrine	if test "$pass" = conv; then
64244137ff4cSJacques Vidrine	  # Only check for convenience libraries
64255e9cd1aeSAssar Westerlund	  deplibs="$lib $deplibs"
64265e9cd1aeSAssar Westerlund	  if test -z "$libdir"; then
64275e9cd1aeSAssar Westerlund	    if test -z "$old_library"; then
6428*ae771770SStanislav Sedov	      func_fatal_error "cannot find name of link library for \`$lib'"
64295e9cd1aeSAssar Westerlund	    fi
64305e9cd1aeSAssar Westerlund	    # It is a libtool convenience library, so add in its objects.
6431*ae771770SStanislav Sedov	    func_append convenience " $ladir/$objdir/$old_library"
6432*ae771770SStanislav Sedov	    func_append old_convenience " $ladir/$objdir/$old_library"
6433*ae771770SStanislav Sedov	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
6434*ae771770SStanislav Sedov	    func_fatal_error "\`$lib' is not a convenience library"
6435*ae771770SStanislav Sedov	  fi
64365e9cd1aeSAssar Westerlund	  tmp_libs=
64375e9cd1aeSAssar Westerlund	  for deplib in $dependency_libs; do
64385e9cd1aeSAssar Westerlund	    deplibs="$deplib $deplibs"
6439*ae771770SStanislav Sedov	    if $opt_preserve_dup_deps ; then
64405e9cd1aeSAssar Westerlund	      case "$tmp_libs " in
6441*ae771770SStanislav Sedov	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
64425e9cd1aeSAssar Westerlund	      esac
64431c43270aSJacques Vidrine	    fi
6444*ae771770SStanislav Sedov	    func_append tmp_libs " $deplib"
64455e9cd1aeSAssar Westerlund	  done
64465e9cd1aeSAssar Westerlund	  continue
64474137ff4cSJacques Vidrine	fi # $pass = conv
64485e9cd1aeSAssar Westerlund
64491c43270aSJacques Vidrine
64505e9cd1aeSAssar Westerlund	# Get the name of the library we link against.
64515e9cd1aeSAssar Westerlund	linklib=
6452*ae771770SStanislav Sedov	if test -n "$old_library" &&
6453*ae771770SStanislav Sedov	   { test "$prefer_static_libs" = yes ||
6454*ae771770SStanislav Sedov	     test "$prefer_static_libs,$installed" = "built,no"; }; then
6455*ae771770SStanislav Sedov	  linklib=$old_library
6456*ae771770SStanislav Sedov	else
64575e9cd1aeSAssar Westerlund	  for l in $old_library $library_names; do
64585e9cd1aeSAssar Westerlund	    linklib="$l"
64595e9cd1aeSAssar Westerlund	  done
6460*ae771770SStanislav Sedov	fi
64615e9cd1aeSAssar Westerlund	if test -z "$linklib"; then
6462*ae771770SStanislav Sedov	  func_fatal_error "cannot find name of link library for \`$lib'"
64635e9cd1aeSAssar Westerlund	fi
64645e9cd1aeSAssar Westerlund
64655e9cd1aeSAssar Westerlund	# This library was specified with -dlopen.
64661c43270aSJacques Vidrine	if test "$pass" = dlopen; then
64675e9cd1aeSAssar Westerlund	  if test -z "$libdir"; then
6468*ae771770SStanislav Sedov	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
64695e9cd1aeSAssar Westerlund	  fi
6470c19800e8SDoug Rabson	  if test -z "$dlname" ||
6471c19800e8SDoug Rabson	     test "$dlopen_support" != yes ||
6472c19800e8SDoug Rabson	     test "$build_libtool_libs" = no; then
64734137ff4cSJacques Vidrine	    # If there is no dlname, no dlopen support or we're linking
64741c43270aSJacques Vidrine	    # statically, we need to preload.  We also need to preload any
64751c43270aSJacques Vidrine	    # dependent libraries so libltdl's deplib preloader doesn't
64761c43270aSJacques Vidrine	    # bomb out in the load deplibs phase.
6477*ae771770SStanislav Sedov	    func_append dlprefiles " $lib $dependency_libs"
64785e9cd1aeSAssar Westerlund	  else
6479*ae771770SStanislav Sedov	    func_append newdlfiles " $lib"
64805e9cd1aeSAssar Westerlund	  fi
64815e9cd1aeSAssar Westerlund	  continue
64824137ff4cSJacques Vidrine	fi # $pass = dlopen
64835e9cd1aeSAssar Westerlund
64845e9cd1aeSAssar Westerlund	# We need an absolute path.
64854137ff4cSJacques Vidrine	case $ladir in
64865e9cd1aeSAssar Westerlund	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
64875e9cd1aeSAssar Westerlund	*)
64885e9cd1aeSAssar Westerlund	  abs_ladir=`cd "$ladir" && pwd`
64895e9cd1aeSAssar Westerlund	  if test -z "$abs_ladir"; then
6490*ae771770SStanislav Sedov	    func_warning "cannot determine absolute directory name of \`$ladir'"
6491*ae771770SStanislav Sedov	    func_warning "passing it literally to the linker, although it might fail"
64925e9cd1aeSAssar Westerlund	    abs_ladir="$ladir"
64935e9cd1aeSAssar Westerlund	  fi
64945e9cd1aeSAssar Westerlund	  ;;
64955e9cd1aeSAssar Westerlund	esac
6496*ae771770SStanislav Sedov	func_basename "$lib"
6497*ae771770SStanislav Sedov	laname="$func_basename_result"
64985e9cd1aeSAssar Westerlund
64995e9cd1aeSAssar Westerlund	# Find the relevant object directory and library name.
65005e9cd1aeSAssar Westerlund	if test "X$installed" = Xyes; then
6501*ae771770SStanislav Sedov	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6502*ae771770SStanislav Sedov	    func_warning "library \`$lib' was moved."
65035e9cd1aeSAssar Westerlund	    dir="$ladir"
65045e9cd1aeSAssar Westerlund	    absdir="$abs_ladir"
65055e9cd1aeSAssar Westerlund	    libdir="$abs_ladir"
65065e9cd1aeSAssar Westerlund	  else
6507*ae771770SStanislav Sedov	    dir="$lt_sysroot$libdir"
6508*ae771770SStanislav Sedov	    absdir="$lt_sysroot$libdir"
65095e9cd1aeSAssar Westerlund	  fi
6510c19800e8SDoug Rabson	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
6511c19800e8SDoug Rabson	else
6512c19800e8SDoug Rabson	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6513c19800e8SDoug Rabson	    dir="$ladir"
6514c19800e8SDoug Rabson	    absdir="$abs_ladir"
6515c19800e8SDoug Rabson	    # Remove this search path later
6516*ae771770SStanislav Sedov	    func_append notinst_path " $abs_ladir"
65175e9cd1aeSAssar Westerlund	  else
65185e9cd1aeSAssar Westerlund	    dir="$ladir/$objdir"
65195e9cd1aeSAssar Westerlund	    absdir="$abs_ladir/$objdir"
65205e9cd1aeSAssar Westerlund	    # Remove this search path later
6521*ae771770SStanislav Sedov	    func_append notinst_path " $abs_ladir"
6522c19800e8SDoug Rabson	  fi
65234137ff4cSJacques Vidrine	fi # $installed = yes
6524*ae771770SStanislav Sedov	func_stripname 'lib' '.la' "$laname"
6525*ae771770SStanislav Sedov	name=$func_stripname_result
65265e9cd1aeSAssar Westerlund
65275e9cd1aeSAssar Westerlund	# This library was specified with -dlpreopen.
65281c43270aSJacques Vidrine	if test "$pass" = dlpreopen; then
6529*ae771770SStanislav Sedov	  if test -z "$libdir" && test "$linkmode" = prog; then
6530*ae771770SStanislav Sedov	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
65315e9cd1aeSAssar Westerlund	  fi
6532*ae771770SStanislav Sedov	  case "$host" in
6533*ae771770SStanislav Sedov	    # special handling for platforms with PE-DLLs.
6534*ae771770SStanislav Sedov	    *cygwin* | *mingw* | *cegcc* )
6535*ae771770SStanislav Sedov	      # Linker will automatically link against shared library if both
6536*ae771770SStanislav Sedov	      # static and shared are present.  Therefore, ensure we extract
6537*ae771770SStanislav Sedov	      # symbols from the import library if a shared library is present
6538*ae771770SStanislav Sedov	      # (otherwise, the dlopen module name will be incorrect).  We do
6539*ae771770SStanislav Sedov	      # this by putting the import library name into $newdlprefiles.
6540*ae771770SStanislav Sedov	      # We recover the dlopen module name by 'saving' the la file
6541*ae771770SStanislav Sedov	      # name in a special purpose variable, and (later) extracting the
6542*ae771770SStanislav Sedov	      # dlname from the la file.
6543*ae771770SStanislav Sedov	      if test -n "$dlname"; then
6544*ae771770SStanislav Sedov	        func_tr_sh "$dir/$linklib"
6545*ae771770SStanislav Sedov	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
6546*ae771770SStanislav Sedov	        func_append newdlprefiles " $dir/$linklib"
6547*ae771770SStanislav Sedov	      else
6548*ae771770SStanislav Sedov	        func_append newdlprefiles " $dir/$old_library"
6549*ae771770SStanislav Sedov	        # Keep a list of preopened convenience libraries to check
6550*ae771770SStanislav Sedov	        # that they are being used correctly in the link pass.
6551*ae771770SStanislav Sedov	        test -z "$libdir" && \
6552*ae771770SStanislav Sedov	          func_append dlpreconveniencelibs " $dir/$old_library"
6553*ae771770SStanislav Sedov	      fi
6554*ae771770SStanislav Sedov	    ;;
6555*ae771770SStanislav Sedov	    * )
65565e9cd1aeSAssar Westerlund	      # Prefer using a static library (so that no silly _DYNAMIC symbols
65575e9cd1aeSAssar Westerlund	      # are required to link).
65585e9cd1aeSAssar Westerlund	      if test -n "$old_library"; then
6559*ae771770SStanislav Sedov	        func_append newdlprefiles " $dir/$old_library"
6560*ae771770SStanislav Sedov	        # Keep a list of preopened convenience libraries to check
6561*ae771770SStanislav Sedov	        # that they are being used correctly in the link pass.
6562*ae771770SStanislav Sedov	        test -z "$libdir" && \
6563*ae771770SStanislav Sedov	          func_append dlpreconveniencelibs " $dir/$old_library"
65644137ff4cSJacques Vidrine	      # Otherwise, use the dlname, so that lt_dlopen finds it.
65654137ff4cSJacques Vidrine	      elif test -n "$dlname"; then
6566*ae771770SStanislav Sedov	        func_append newdlprefiles " $dir/$dlname"
65675e9cd1aeSAssar Westerlund	      else
6568*ae771770SStanislav Sedov	        func_append newdlprefiles " $dir/$linklib"
65695e9cd1aeSAssar Westerlund	      fi
6570*ae771770SStanislav Sedov	    ;;
6571*ae771770SStanislav Sedov	  esac
65724137ff4cSJacques Vidrine	fi # $pass = dlpreopen
65735e9cd1aeSAssar Westerlund
65745e9cd1aeSAssar Westerlund	if test -z "$libdir"; then
65754137ff4cSJacques Vidrine	  # Link the convenience library
65761c43270aSJacques Vidrine	  if test "$linkmode" = lib; then
65775e9cd1aeSAssar Westerlund	    deplibs="$dir/$old_library $deplibs"
65785e9cd1aeSAssar Westerlund	  elif test "$linkmode,$pass" = "prog,link"; then
65795e9cd1aeSAssar Westerlund	    compile_deplibs="$dir/$old_library $compile_deplibs"
65805e9cd1aeSAssar Westerlund	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
65815e9cd1aeSAssar Westerlund	  else
65821c43270aSJacques Vidrine	    deplibs="$lib $deplibs" # used for prog,scan pass
65835e9cd1aeSAssar Westerlund	  fi
65845e9cd1aeSAssar Westerlund	  continue
65855e9cd1aeSAssar Westerlund	fi
65865e9cd1aeSAssar Westerlund
65871c43270aSJacques Vidrine
65881c43270aSJacques Vidrine	if test "$linkmode" = prog && test "$pass" != link; then
6589*ae771770SStanislav Sedov	  func_append newlib_search_path " $ladir"
65905e9cd1aeSAssar Westerlund	  deplibs="$lib $deplibs"
65915e9cd1aeSAssar Westerlund
65925e9cd1aeSAssar Westerlund	  linkalldeplibs=no
65935e9cd1aeSAssar Westerlund	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
65945e9cd1aeSAssar Westerlund	     test "$build_libtool_libs" = no; then
65955e9cd1aeSAssar Westerlund	    linkalldeplibs=yes
65965e9cd1aeSAssar Westerlund	  fi
65975e9cd1aeSAssar Westerlund
65985e9cd1aeSAssar Westerlund	  tmp_libs=
65995e9cd1aeSAssar Westerlund	  for deplib in $dependency_libs; do
66004137ff4cSJacques Vidrine	    case $deplib in
6601*ae771770SStanislav Sedov	    -L*) func_stripname '-L' '' "$deplib"
6602*ae771770SStanislav Sedov	         func_resolve_sysroot "$func_stripname_result"
6603*ae771770SStanislav Sedov	         func_append newlib_search_path " $func_resolve_sysroot_result"
6604*ae771770SStanislav Sedov		 ;;
66055e9cd1aeSAssar Westerlund	    esac
66065e9cd1aeSAssar Westerlund	    # Need to link against all dependency_libs?
66071c43270aSJacques Vidrine	    if test "$linkalldeplibs" = yes; then
66085e9cd1aeSAssar Westerlund	      deplibs="$deplib $deplibs"
66095e9cd1aeSAssar Westerlund	    else
66105e9cd1aeSAssar Westerlund	      # Need to hardcode shared library paths
66115e9cd1aeSAssar Westerlund	      # or/and link against static libraries
66125e9cd1aeSAssar Westerlund	      newdependency_libs="$deplib $newdependency_libs"
66135e9cd1aeSAssar Westerlund	    fi
6614*ae771770SStanislav Sedov	    if $opt_preserve_dup_deps ; then
66155e9cd1aeSAssar Westerlund	      case "$tmp_libs " in
6616*ae771770SStanislav Sedov	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
66175e9cd1aeSAssar Westerlund	      esac
66181c43270aSJacques Vidrine	    fi
6619*ae771770SStanislav Sedov	    func_append tmp_libs " $deplib"
66204137ff4cSJacques Vidrine	  done # for deplib
66215e9cd1aeSAssar Westerlund	  continue
66224137ff4cSJacques Vidrine	fi # $linkmode = prog...
66235e9cd1aeSAssar Westerlund
66241c43270aSJacques Vidrine	if test "$linkmode,$pass" = "prog,link"; then
66255e9cd1aeSAssar Westerlund	  if test -n "$library_names" &&
6626*ae771770SStanislav Sedov	     { { test "$prefer_static_libs" = no ||
6627*ae771770SStanislav Sedov	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
6628*ae771770SStanislav Sedov	       test -z "$old_library"; }; then
66291c43270aSJacques Vidrine	    # We need to hardcode the library path
6630c19800e8SDoug Rabson	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
66311c43270aSJacques Vidrine	      # Make sure the rpath contains only unique directories.
6632*ae771770SStanislav Sedov	      case "$temp_rpath:" in
6633*ae771770SStanislav Sedov	      *"$absdir:"*) ;;
6634*ae771770SStanislav Sedov	      *) func_append temp_rpath "$absdir:" ;;
66351c43270aSJacques Vidrine	      esac
66361c43270aSJacques Vidrine	    fi
66374137ff4cSJacques Vidrine
66384137ff4cSJacques Vidrine	    # Hardcode the library path.
66394137ff4cSJacques Vidrine	    # Skip directories that are in the system default run-time
66404137ff4cSJacques Vidrine	    # search path.
66414137ff4cSJacques Vidrine	    case " $sys_lib_dlsearch_path " in
66424137ff4cSJacques Vidrine	    *" $absdir "*) ;;
66434137ff4cSJacques Vidrine	    *)
66444137ff4cSJacques Vidrine	      case "$compile_rpath " in
66454137ff4cSJacques Vidrine	      *" $absdir "*) ;;
6646*ae771770SStanislav Sedov	      *) func_append compile_rpath " $absdir" ;;
66474137ff4cSJacques Vidrine	      esac
66484137ff4cSJacques Vidrine	      ;;
66494137ff4cSJacques Vidrine	    esac
66504137ff4cSJacques Vidrine	    case " $sys_lib_dlsearch_path " in
66514137ff4cSJacques Vidrine	    *" $libdir "*) ;;
66524137ff4cSJacques Vidrine	    *)
66534137ff4cSJacques Vidrine	      case "$finalize_rpath " in
66544137ff4cSJacques Vidrine	      *" $libdir "*) ;;
6655*ae771770SStanislav Sedov	      *) func_append finalize_rpath " $libdir" ;;
66564137ff4cSJacques Vidrine	      esac
66574137ff4cSJacques Vidrine	      ;;
66584137ff4cSJacques Vidrine	    esac
66594137ff4cSJacques Vidrine	  fi # $linkmode,$pass = prog,link...
66605e9cd1aeSAssar Westerlund
66615e9cd1aeSAssar Westerlund	  if test "$alldeplibs" = yes &&
66625e9cd1aeSAssar Westerlund	     { test "$deplibs_check_method" = pass_all ||
66635e9cd1aeSAssar Westerlund	       { test "$build_libtool_libs" = yes &&
66645e9cd1aeSAssar Westerlund		 test -n "$library_names"; }; }; then
66655e9cd1aeSAssar Westerlund	    # We only need to search for static libraries
66665e9cd1aeSAssar Westerlund	    continue
66675e9cd1aeSAssar Westerlund	  fi
66681c43270aSJacques Vidrine	fi
66695e9cd1aeSAssar Westerlund
66701c43270aSJacques Vidrine	link_static=no # Whether the deplib will be linked statically
6671c19800e8SDoug Rabson	use_static_libs=$prefer_static_libs
6672c19800e8SDoug Rabson	if test "$use_static_libs" = built && test "$installed" = yes; then
6673c19800e8SDoug Rabson	  use_static_libs=no
6674c19800e8SDoug Rabson	fi
66751c43270aSJacques Vidrine	if test -n "$library_names" &&
6676c19800e8SDoug Rabson	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
6677*ae771770SStanislav Sedov	  case $host in
6678*ae771770SStanislav Sedov	  *cygwin* | *mingw* | *cegcc*)
6679*ae771770SStanislav Sedov	      # No point in relinking DLLs because paths are not encoded
6680*ae771770SStanislav Sedov	      func_append notinst_deplibs " $lib"
6681*ae771770SStanislav Sedov	      need_relink=no
6682*ae771770SStanislav Sedov	    ;;
6683*ae771770SStanislav Sedov	  *)
66845e9cd1aeSAssar Westerlund	    if test "$installed" = no; then
6685*ae771770SStanislav Sedov	      func_append notinst_deplibs " $lib"
66865e9cd1aeSAssar Westerlund	      need_relink=yes
66875e9cd1aeSAssar Westerlund	    fi
6688*ae771770SStanislav Sedov	    ;;
6689*ae771770SStanislav Sedov	  esac
66901c43270aSJacques Vidrine	  # This is a shared library
66911c43270aSJacques Vidrine
6692*ae771770SStanislav Sedov	  # Warn about portability, can't link against -module's on some
6693*ae771770SStanislav Sedov	  # systems (darwin).  Don't bleat about dlopened modules though!
6694*ae771770SStanislav Sedov	  dlopenmodule=""
6695*ae771770SStanislav Sedov	  for dlpremoduletest in $dlprefiles; do
6696*ae771770SStanislav Sedov	    if test "X$dlpremoduletest" = "X$lib"; then
6697*ae771770SStanislav Sedov	      dlopenmodule="$dlpremoduletest"
6698*ae771770SStanislav Sedov	      break
66991c43270aSJacques Vidrine	    fi
6700*ae771770SStanislav Sedov	  done
6701*ae771770SStanislav Sedov	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
6702*ae771770SStanislav Sedov	    echo
6703*ae771770SStanislav Sedov	    if test "$linkmode" = prog; then
6704*ae771770SStanislav Sedov	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
6705*ae771770SStanislav Sedov	    else
6706*ae771770SStanislav Sedov	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
6707*ae771770SStanislav Sedov	    fi
6708*ae771770SStanislav Sedov	    $ECHO "*** $linklib is not portable!"
67091c43270aSJacques Vidrine	  fi
67101c43270aSJacques Vidrine	  if test "$linkmode" = lib &&
67111c43270aSJacques Vidrine	     test "$hardcode_into_libs" = yes; then
67121c43270aSJacques Vidrine	    # Hardcode the library path.
67131c43270aSJacques Vidrine	    # Skip directories that are in the system default run-time
67141c43270aSJacques Vidrine	    # search path.
67151c43270aSJacques Vidrine	    case " $sys_lib_dlsearch_path " in
67161c43270aSJacques Vidrine	    *" $absdir "*) ;;
67171c43270aSJacques Vidrine	    *)
67181c43270aSJacques Vidrine	      case "$compile_rpath " in
67191c43270aSJacques Vidrine	      *" $absdir "*) ;;
6720*ae771770SStanislav Sedov	      *) func_append compile_rpath " $absdir" ;;
67211c43270aSJacques Vidrine	      esac
67221c43270aSJacques Vidrine	      ;;
67231c43270aSJacques Vidrine	    esac
67241c43270aSJacques Vidrine	    case " $sys_lib_dlsearch_path " in
67251c43270aSJacques Vidrine	    *" $libdir "*) ;;
67261c43270aSJacques Vidrine	    *)
67271c43270aSJacques Vidrine	      case "$finalize_rpath " in
67281c43270aSJacques Vidrine	      *" $libdir "*) ;;
6729*ae771770SStanislav Sedov	      *) func_append finalize_rpath " $libdir" ;;
67301c43270aSJacques Vidrine	      esac
67311c43270aSJacques Vidrine	      ;;
67321c43270aSJacques Vidrine	    esac
67331c43270aSJacques Vidrine	  fi
67345e9cd1aeSAssar Westerlund
67355e9cd1aeSAssar Westerlund	  if test -n "$old_archive_from_expsyms_cmds"; then
67365e9cd1aeSAssar Westerlund	    # figure out the soname
67375e9cd1aeSAssar Westerlund	    set dummy $library_names
6738*ae771770SStanislav Sedov	    shift
6739*ae771770SStanislav Sedov	    realname="$1"
6740*ae771770SStanislav Sedov	    shift
6741*ae771770SStanislav Sedov	    libname=`eval "\\$ECHO \"$libname_spec\""`
67424137ff4cSJacques Vidrine	    # use dlname if we got it. it's perfectly good, no?
67434137ff4cSJacques Vidrine	    if test -n "$dlname"; then
67444137ff4cSJacques Vidrine	      soname="$dlname"
67454137ff4cSJacques Vidrine	    elif test -n "$soname_spec"; then
67464137ff4cSJacques Vidrine	      # bleh windows
67474137ff4cSJacques Vidrine	      case $host in
6748*ae771770SStanislav Sedov	      *cygwin* | mingw* | *cegcc*)
6749*ae771770SStanislav Sedov	        func_arith $current - $age
6750*ae771770SStanislav Sedov		major=$func_arith_result
67514137ff4cSJacques Vidrine		versuffix="-$major"
67524137ff4cSJacques Vidrine		;;
67534137ff4cSJacques Vidrine	      esac
67545e9cd1aeSAssar Westerlund	      eval soname=\"$soname_spec\"
67555e9cd1aeSAssar Westerlund	    else
67565e9cd1aeSAssar Westerlund	      soname="$realname"
67575e9cd1aeSAssar Westerlund	    fi
67585e9cd1aeSAssar Westerlund
67595e9cd1aeSAssar Westerlund	    # Make a new name for the extract_expsyms_cmds to use
67604137ff4cSJacques Vidrine	    soroot="$soname"
6761*ae771770SStanislav Sedov	    func_basename "$soroot"
6762*ae771770SStanislav Sedov	    soname="$func_basename_result"
6763*ae771770SStanislav Sedov	    func_stripname 'lib' '.dll' "$soname"
6764*ae771770SStanislav Sedov	    newlib=libimp-$func_stripname_result.a
67655e9cd1aeSAssar Westerlund
67665e9cd1aeSAssar Westerlund	    # If the library has no export list, then create one now
67675e9cd1aeSAssar Westerlund	    if test -f "$output_objdir/$soname-def"; then :
67685e9cd1aeSAssar Westerlund	    else
6769*ae771770SStanislav Sedov	      func_verbose "extracting exported symbol list from \`$soname'"
6770*ae771770SStanislav Sedov	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
67715e9cd1aeSAssar Westerlund	    fi
67725e9cd1aeSAssar Westerlund
67735e9cd1aeSAssar Westerlund	    # Create $newlib
67745e9cd1aeSAssar Westerlund	    if test -f "$output_objdir/$newlib"; then :; else
6775*ae771770SStanislav Sedov	      func_verbose "generating import library for \`$soname'"
6776*ae771770SStanislav Sedov	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
67775e9cd1aeSAssar Westerlund	    fi
67785e9cd1aeSAssar Westerlund	    # make sure the library variables are pointing to the new library
67795e9cd1aeSAssar Westerlund	    dir=$output_objdir
67805e9cd1aeSAssar Westerlund	    linklib=$newlib
67811c43270aSJacques Vidrine	  fi # test -n "$old_archive_from_expsyms_cmds"
67825e9cd1aeSAssar Westerlund
6783*ae771770SStanislav Sedov	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
67845e9cd1aeSAssar Westerlund	    add_shlibpath=
67855e9cd1aeSAssar Westerlund	    add_dir=
67865e9cd1aeSAssar Westerlund	    add=
67875e9cd1aeSAssar Westerlund	    lib_linked=yes
67884137ff4cSJacques Vidrine	    case $hardcode_action in
67895e9cd1aeSAssar Westerlund	    immediate | unsupported)
67905e9cd1aeSAssar Westerlund	      if test "$hardcode_direct" = no; then
67915e9cd1aeSAssar Westerlund		add="$dir/$linklib"
67921c43270aSJacques Vidrine		case $host in
6793c19800e8SDoug Rabson		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
6794c19800e8SDoug Rabson		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
6795c19800e8SDoug Rabson		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
6796c19800e8SDoug Rabson		    *-*-unixware7*) add_dir="-L$dir" ;;
67971c43270aSJacques Vidrine		  *-*-darwin* )
6798*ae771770SStanislav Sedov		    # if the lib is a (non-dlopened) module then we can not
6799*ae771770SStanislav Sedov		    # link against it, someone is ignoring the earlier warnings
6800c19800e8SDoug Rabson		    if /usr/bin/file -L $add 2> /dev/null |
6801*ae771770SStanislav Sedov			 $GREP ": [^:]* bundle" >/dev/null ; then
6802*ae771770SStanislav Sedov		      if test "X$dlopenmodule" != "X$lib"; then
6803*ae771770SStanislav Sedov			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
68041c43270aSJacques Vidrine			if test -z "$old_library" ; then
6805*ae771770SStanislav Sedov			  echo
6806*ae771770SStanislav Sedov			  echo "*** And there doesn't seem to be a static archive available"
6807*ae771770SStanislav Sedov			  echo "*** The link will probably fail, sorry"
68081c43270aSJacques Vidrine			else
68091c43270aSJacques Vidrine			  add="$dir/$old_library"
68101c43270aSJacques Vidrine			fi
6811*ae771770SStanislav Sedov		      elif test -n "$old_library"; then
6812*ae771770SStanislav Sedov			add="$dir/$old_library"
6813*ae771770SStanislav Sedov		      fi
68141c43270aSJacques Vidrine		    fi
68151c43270aSJacques Vidrine		esac
68165e9cd1aeSAssar Westerlund	      elif test "$hardcode_minus_L" = no; then
68174137ff4cSJacques Vidrine		case $host in
68185e9cd1aeSAssar Westerlund		*-*-sunos*) add_shlibpath="$dir" ;;
68195e9cd1aeSAssar Westerlund		esac
68205e9cd1aeSAssar Westerlund		add_dir="-L$dir"
68215e9cd1aeSAssar Westerlund		add="-l$name"
68225e9cd1aeSAssar Westerlund	      elif test "$hardcode_shlibpath_var" = no; then
68235e9cd1aeSAssar Westerlund		add_shlibpath="$dir"
68245e9cd1aeSAssar Westerlund		add="-l$name"
68255e9cd1aeSAssar Westerlund	      else
68265e9cd1aeSAssar Westerlund		lib_linked=no
68275e9cd1aeSAssar Westerlund	      fi
68285e9cd1aeSAssar Westerlund	      ;;
68295e9cd1aeSAssar Westerlund	    relink)
6830*ae771770SStanislav Sedov	      if test "$hardcode_direct" = yes &&
6831*ae771770SStanislav Sedov	         test "$hardcode_direct_absolute" = no; then
68325e9cd1aeSAssar Westerlund		add="$dir/$linklib"
68335e9cd1aeSAssar Westerlund	      elif test "$hardcode_minus_L" = yes; then
68345e9cd1aeSAssar Westerlund		add_dir="-L$dir"
68351c43270aSJacques Vidrine		# Try looking first in the location we're being installed to.
68361c43270aSJacques Vidrine		if test -n "$inst_prefix_dir"; then
6837c19800e8SDoug Rabson		  case $libdir in
68381c43270aSJacques Vidrine		    [\\/]*)
6839*ae771770SStanislav Sedov		      func_append add_dir " -L$inst_prefix_dir$libdir"
68401c43270aSJacques Vidrine		      ;;
68411c43270aSJacques Vidrine		  esac
68421c43270aSJacques Vidrine		fi
68435e9cd1aeSAssar Westerlund		add="-l$name"
68445e9cd1aeSAssar Westerlund	      elif test "$hardcode_shlibpath_var" = yes; then
68455e9cd1aeSAssar Westerlund		add_shlibpath="$dir"
68465e9cd1aeSAssar Westerlund		add="-l$name"
68475e9cd1aeSAssar Westerlund	      else
68485e9cd1aeSAssar Westerlund		lib_linked=no
68495e9cd1aeSAssar Westerlund	      fi
68505e9cd1aeSAssar Westerlund	      ;;
68515e9cd1aeSAssar Westerlund	    *) lib_linked=no ;;
68525e9cd1aeSAssar Westerlund	    esac
68535e9cd1aeSAssar Westerlund
68545e9cd1aeSAssar Westerlund	    if test "$lib_linked" != yes; then
6855*ae771770SStanislav Sedov	      func_fatal_configuration "unsupported hardcode properties"
68565e9cd1aeSAssar Westerlund	    fi
68575e9cd1aeSAssar Westerlund
68585e9cd1aeSAssar Westerlund	    if test -n "$add_shlibpath"; then
68594137ff4cSJacques Vidrine	      case :$compile_shlibpath: in
68605e9cd1aeSAssar Westerlund	      *":$add_shlibpath:"*) ;;
6861*ae771770SStanislav Sedov	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
68625e9cd1aeSAssar Westerlund	      esac
68635e9cd1aeSAssar Westerlund	    fi
68641c43270aSJacques Vidrine	    if test "$linkmode" = prog; then
68655e9cd1aeSAssar Westerlund	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
68665e9cd1aeSAssar Westerlund	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
68675e9cd1aeSAssar Westerlund	    else
68685e9cd1aeSAssar Westerlund	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
68695e9cd1aeSAssar Westerlund	      test -n "$add" && deplibs="$add $deplibs"
6870*ae771770SStanislav Sedov	      if test "$hardcode_direct" != yes &&
6871*ae771770SStanislav Sedov		 test "$hardcode_minus_L" != yes &&
68725e9cd1aeSAssar Westerlund		 test "$hardcode_shlibpath_var" = yes; then
68734137ff4cSJacques Vidrine		case :$finalize_shlibpath: in
68745e9cd1aeSAssar Westerlund		*":$libdir:"*) ;;
6875*ae771770SStanislav Sedov		*) func_append finalize_shlibpath "$libdir:" ;;
68765e9cd1aeSAssar Westerlund		esac
68775e9cd1aeSAssar Westerlund	      fi
68785e9cd1aeSAssar Westerlund	    fi
68795e9cd1aeSAssar Westerlund	  fi
68805e9cd1aeSAssar Westerlund
6881*ae771770SStanislav Sedov	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
68825e9cd1aeSAssar Westerlund	    add_shlibpath=
68835e9cd1aeSAssar Westerlund	    add_dir=
68845e9cd1aeSAssar Westerlund	    add=
68855e9cd1aeSAssar Westerlund	    # Finalize command for both is simple: just hardcode it.
6886*ae771770SStanislav Sedov	    if test "$hardcode_direct" = yes &&
6887*ae771770SStanislav Sedov	       test "$hardcode_direct_absolute" = no; then
68885e9cd1aeSAssar Westerlund	      add="$libdir/$linklib"
68895e9cd1aeSAssar Westerlund	    elif test "$hardcode_minus_L" = yes; then
68905e9cd1aeSAssar Westerlund	      add_dir="-L$libdir"
68915e9cd1aeSAssar Westerlund	      add="-l$name"
68925e9cd1aeSAssar Westerlund	    elif test "$hardcode_shlibpath_var" = yes; then
68934137ff4cSJacques Vidrine	      case :$finalize_shlibpath: in
68945e9cd1aeSAssar Westerlund	      *":$libdir:"*) ;;
6895*ae771770SStanislav Sedov	      *) func_append finalize_shlibpath "$libdir:" ;;
68965e9cd1aeSAssar Westerlund	      esac
68975e9cd1aeSAssar Westerlund	      add="-l$name"
68981c43270aSJacques Vidrine	    elif test "$hardcode_automatic" = yes; then
6899c19800e8SDoug Rabson	      if test -n "$inst_prefix_dir" &&
6900c19800e8SDoug Rabson		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
69011c43270aSJacques Vidrine		add="$inst_prefix_dir$libdir/$linklib"
69021c43270aSJacques Vidrine	      else
69031c43270aSJacques Vidrine		add="$libdir/$linklib"
69041c43270aSJacques Vidrine	      fi
69055e9cd1aeSAssar Westerlund	    else
69065e9cd1aeSAssar Westerlund	      # We cannot seem to hardcode it, guess we'll fake it.
69075e9cd1aeSAssar Westerlund	      add_dir="-L$libdir"
69081c43270aSJacques Vidrine	      # Try looking first in the location we're being installed to.
69091c43270aSJacques Vidrine	      if test -n "$inst_prefix_dir"; then
6910c19800e8SDoug Rabson		case $libdir in
69111c43270aSJacques Vidrine		  [\\/]*)
6912*ae771770SStanislav Sedov		    func_append add_dir " -L$inst_prefix_dir$libdir"
69131c43270aSJacques Vidrine		    ;;
69141c43270aSJacques Vidrine		esac
69151c43270aSJacques Vidrine	      fi
69165e9cd1aeSAssar Westerlund	      add="-l$name"
69175e9cd1aeSAssar Westerlund	    fi
69185e9cd1aeSAssar Westerlund
69191c43270aSJacques Vidrine	    if test "$linkmode" = prog; then
69205e9cd1aeSAssar Westerlund	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
69215e9cd1aeSAssar Westerlund	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
69225e9cd1aeSAssar Westerlund	    else
69235e9cd1aeSAssar Westerlund	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
69244137ff4cSJacques Vidrine	      test -n "$add" && deplibs="$add $deplibs"
69255e9cd1aeSAssar Westerlund	    fi
69265e9cd1aeSAssar Westerlund	  fi
69271c43270aSJacques Vidrine	elif test "$linkmode" = prog; then
69285e9cd1aeSAssar Westerlund	  # Here we assume that one of hardcode_direct or hardcode_minus_L
69295e9cd1aeSAssar Westerlund	  # is not unsupported.  This is valid on all known static and
69305e9cd1aeSAssar Westerlund	  # shared platforms.
69315e9cd1aeSAssar Westerlund	  if test "$hardcode_direct" != unsupported; then
69325e9cd1aeSAssar Westerlund	    test -n "$old_library" && linklib="$old_library"
69335e9cd1aeSAssar Westerlund	    compile_deplibs="$dir/$linklib $compile_deplibs"
69345e9cd1aeSAssar Westerlund	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
69355e9cd1aeSAssar Westerlund	  else
69365e9cd1aeSAssar Westerlund	    compile_deplibs="-l$name -L$dir $compile_deplibs"
69375e9cd1aeSAssar Westerlund	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
69385e9cd1aeSAssar Westerlund	  fi
69395e9cd1aeSAssar Westerlund	elif test "$build_libtool_libs" = yes; then
69405e9cd1aeSAssar Westerlund	  # Not a shared library
69415e9cd1aeSAssar Westerlund	  if test "$deplibs_check_method" != pass_all; then
69425e9cd1aeSAssar Westerlund	    # We're trying link a shared library against a static one
69435e9cd1aeSAssar Westerlund	    # but the system doesn't support it.
69444137ff4cSJacques Vidrine
69455e9cd1aeSAssar Westerlund	    # Just print a warning and add the library to dependency_libs so
69465e9cd1aeSAssar Westerlund	    # that the program can be linked against the static library.
6947*ae771770SStanislav Sedov	    echo
6948*ae771770SStanislav Sedov	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
6949*ae771770SStanislav Sedov	    echo "*** I have the capability to make that library automatically link in when"
6950*ae771770SStanislav Sedov	    echo "*** you link to this library.  But I can only do this if you have a"
6951*ae771770SStanislav Sedov	    echo "*** shared version of the library, which you do not appear to have."
69524137ff4cSJacques Vidrine	    if test "$module" = yes; then
6953*ae771770SStanislav Sedov	      echo "*** But as you try to build a module library, libtool will still create "
6954*ae771770SStanislav Sedov	      echo "*** a static module, that should work as long as the dlopening application"
6955*ae771770SStanislav Sedov	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
69564137ff4cSJacques Vidrine	      if test -z "$global_symbol_pipe"; then
6957*ae771770SStanislav Sedov		echo
6958*ae771770SStanislav Sedov		echo "*** However, this would only work if libtool was able to extract symbol"
6959*ae771770SStanislav Sedov		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
6960*ae771770SStanislav Sedov		echo "*** not find such a program.  So, this module is probably useless."
6961*ae771770SStanislav Sedov		echo "*** \`nm' from GNU binutils and a full rebuild may help."
69624137ff4cSJacques Vidrine	      fi
69634137ff4cSJacques Vidrine	      if test "$build_old_libs" = no; then
69644137ff4cSJacques Vidrine		build_libtool_libs=module
69654137ff4cSJacques Vidrine		build_old_libs=yes
69664137ff4cSJacques Vidrine	      else
69674137ff4cSJacques Vidrine		build_libtool_libs=no
69684137ff4cSJacques Vidrine	      fi
69694137ff4cSJacques Vidrine	    fi
69705e9cd1aeSAssar Westerlund	  else
69715e9cd1aeSAssar Westerlund	    deplibs="$dir/$old_library $deplibs"
69725e9cd1aeSAssar Westerlund	    link_static=yes
69735e9cd1aeSAssar Westerlund	  fi
69744137ff4cSJacques Vidrine	fi # link shared/static library?
69755e9cd1aeSAssar Westerlund
69761c43270aSJacques Vidrine	if test "$linkmode" = lib; then
69775e9cd1aeSAssar Westerlund	  if test -n "$dependency_libs" &&
6978c19800e8SDoug Rabson	     { test "$hardcode_into_libs" != yes ||
6979c19800e8SDoug Rabson	       test "$build_old_libs" = yes ||
69801c43270aSJacques Vidrine	       test "$link_static" = yes; }; then
69815e9cd1aeSAssar Westerlund	    # Extract -R from dependency_libs
69825e9cd1aeSAssar Westerlund	    temp_deplibs=
69835e9cd1aeSAssar Westerlund	    for libdir in $dependency_libs; do
69844137ff4cSJacques Vidrine	      case $libdir in
6985*ae771770SStanislav Sedov	      -R*) func_stripname '-R' '' "$libdir"
6986*ae771770SStanislav Sedov	           temp_xrpath=$func_stripname_result
69875e9cd1aeSAssar Westerlund		   case " $xrpath " in
69885e9cd1aeSAssar Westerlund		   *" $temp_xrpath "*) ;;
6989*ae771770SStanislav Sedov		   *) func_append xrpath " $temp_xrpath";;
69905e9cd1aeSAssar Westerlund		   esac;;
6991*ae771770SStanislav Sedov	      *) func_append temp_deplibs " $libdir";;
69925e9cd1aeSAssar Westerlund	      esac
69935e9cd1aeSAssar Westerlund	    done
69945e9cd1aeSAssar Westerlund	    dependency_libs="$temp_deplibs"
69955e9cd1aeSAssar Westerlund	  fi
69965e9cd1aeSAssar Westerlund
6997*ae771770SStanislav Sedov	  func_append newlib_search_path " $absdir"
69985e9cd1aeSAssar Westerlund	  # Link against this library
69995e9cd1aeSAssar Westerlund	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
70005e9cd1aeSAssar Westerlund	  # ... and its dependency_libs
70015e9cd1aeSAssar Westerlund	  tmp_libs=
70025e9cd1aeSAssar Westerlund	  for deplib in $dependency_libs; do
70035e9cd1aeSAssar Westerlund	    newdependency_libs="$deplib $newdependency_libs"
7004*ae771770SStanislav Sedov	    case $deplib in
7005*ae771770SStanislav Sedov              -L*) func_stripname '-L' '' "$deplib"
7006*ae771770SStanislav Sedov                   func_resolve_sysroot "$func_stripname_result";;
7007*ae771770SStanislav Sedov              *) func_resolve_sysroot "$deplib" ;;
7008*ae771770SStanislav Sedov            esac
7009*ae771770SStanislav Sedov	    if $opt_preserve_dup_deps ; then
70105e9cd1aeSAssar Westerlund	      case "$tmp_libs " in
7011*ae771770SStanislav Sedov	      *" $func_resolve_sysroot_result "*)
7012*ae771770SStanislav Sedov                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
70135e9cd1aeSAssar Westerlund	      esac
70141c43270aSJacques Vidrine	    fi
7015*ae771770SStanislav Sedov	    func_append tmp_libs " $func_resolve_sysroot_result"
70165e9cd1aeSAssar Westerlund	  done
70175e9cd1aeSAssar Westerlund
70181c43270aSJacques Vidrine	  if test "$link_all_deplibs" != no; then
70195e9cd1aeSAssar Westerlund	    # Add the search paths of all dependency libraries
70205e9cd1aeSAssar Westerlund	    for deplib in $dependency_libs; do
7021*ae771770SStanislav Sedov	      path=
70224137ff4cSJacques Vidrine	      case $deplib in
70235e9cd1aeSAssar Westerlund	      -L*) path="$deplib" ;;
70245e9cd1aeSAssar Westerlund	      *.la)
7025*ae771770SStanislav Sedov	        func_resolve_sysroot "$deplib"
7026*ae771770SStanislav Sedov	        deplib=$func_resolve_sysroot_result
7027*ae771770SStanislav Sedov	        func_dirname "$deplib" "" "."
7028*ae771770SStanislav Sedov		dir=$func_dirname_result
70295e9cd1aeSAssar Westerlund		# We need an absolute path.
70304137ff4cSJacques Vidrine		case $dir in
70315e9cd1aeSAssar Westerlund		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
70325e9cd1aeSAssar Westerlund		*)
70335e9cd1aeSAssar Westerlund		  absdir=`cd "$dir" && pwd`
70345e9cd1aeSAssar Westerlund		  if test -z "$absdir"; then
7035*ae771770SStanislav Sedov		    func_warning "cannot determine absolute directory name of \`$dir'"
70365e9cd1aeSAssar Westerlund		    absdir="$dir"
70375e9cd1aeSAssar Westerlund		  fi
70385e9cd1aeSAssar Westerlund		  ;;
70395e9cd1aeSAssar Westerlund		esac
7040*ae771770SStanislav Sedov		if $GREP "^installed=no" $deplib > /dev/null; then
70411c43270aSJacques Vidrine		case $host in
70421c43270aSJacques Vidrine		*-*-darwin*)
7043*ae771770SStanislav Sedov		  depdepl=
70441c43270aSJacques Vidrine		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
70451c43270aSJacques Vidrine		  if test -n "$deplibrary_names" ; then
70461c43270aSJacques Vidrine		    for tmp in $deplibrary_names ; do
70471c43270aSJacques Vidrine		      depdepl=$tmp
70481c43270aSJacques Vidrine		    done
7049*ae771770SStanislav Sedov		    if test -f "$absdir/$objdir/$depdepl" ; then
7050*ae771770SStanislav Sedov		      depdepl="$absdir/$objdir/$depdepl"
7051*ae771770SStanislav Sedov		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
7052*ae771770SStanislav Sedov                      if test -z "$darwin_install_name"; then
7053*ae771770SStanislav Sedov                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
70541c43270aSJacques Vidrine                      fi
7055*ae771770SStanislav Sedov		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
7056*ae771770SStanislav Sedov		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
7057*ae771770SStanislav Sedov		      path=
70581c43270aSJacques Vidrine		    fi
7059*ae771770SStanislav Sedov		  fi
70601c43270aSJacques Vidrine		  ;;
70611c43270aSJacques Vidrine		*)
7062*ae771770SStanislav Sedov		  path="-L$absdir/$objdir"
70631c43270aSJacques Vidrine		  ;;
70641c43270aSJacques Vidrine		esac
7065*ae771770SStanislav Sedov		else
7066*ae771770SStanislav Sedov		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
7067*ae771770SStanislav Sedov		  test -z "$libdir" && \
7068*ae771770SStanislav Sedov		    func_fatal_error "\`$deplib' is not a valid libtool archive"
7069*ae771770SStanislav Sedov		  test "$absdir" != "$libdir" && \
7070*ae771770SStanislav Sedov		    func_warning "\`$deplib' seems to be moved"
7071*ae771770SStanislav Sedov
7072*ae771770SStanislav Sedov		  path="-L$absdir"
70731c43270aSJacques Vidrine		fi
70745e9cd1aeSAssar Westerlund		;;
70751c43270aSJacques Vidrine	      esac
70761c43270aSJacques Vidrine	      case " $deplibs " in
7077c19800e8SDoug Rabson	      *" $path "*) ;;
7078c19800e8SDoug Rabson	      *) deplibs="$path $deplibs" ;;
70791c43270aSJacques Vidrine	      esac
70805e9cd1aeSAssar Westerlund	    done
70814137ff4cSJacques Vidrine	  fi # link_all_deplibs != no
70824137ff4cSJacques Vidrine	fi # linkmode = lib
70834137ff4cSJacques Vidrine      done # for deplib in $libs
7084*ae771770SStanislav Sedov      if test "$pass" = link; then
7085*ae771770SStanislav Sedov	if test "$linkmode" = "prog"; then
7086*ae771770SStanislav Sedov	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
7087*ae771770SStanislav Sedov	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
7088*ae771770SStanislav Sedov	else
7089*ae771770SStanislav Sedov	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7090*ae771770SStanislav Sedov	fi
7091*ae771770SStanislav Sedov      fi
70921c43270aSJacques Vidrine      dependency_libs="$newdependency_libs"
70931c43270aSJacques Vidrine      if test "$pass" = dlpreopen; then
70945e9cd1aeSAssar Westerlund	# Link the dlpreopened libraries before other libraries
70955e9cd1aeSAssar Westerlund	for deplib in $save_deplibs; do
70965e9cd1aeSAssar Westerlund	  deplibs="$deplib $deplibs"
70975e9cd1aeSAssar Westerlund	done
70985e9cd1aeSAssar Westerlund      fi
70991c43270aSJacques Vidrine      if test "$pass" != dlopen; then
71001c43270aSJacques Vidrine	if test "$pass" != conv; then
71015e9cd1aeSAssar Westerlund	  # Make sure lib_search_path contains only unique directories.
71025e9cd1aeSAssar Westerlund	  lib_search_path=
71035e9cd1aeSAssar Westerlund	  for dir in $newlib_search_path; do
71045e9cd1aeSAssar Westerlund	    case "$lib_search_path " in
71055e9cd1aeSAssar Westerlund	    *" $dir "*) ;;
7106*ae771770SStanislav Sedov	    *) func_append lib_search_path " $dir" ;;
71075e9cd1aeSAssar Westerlund	    esac
71085e9cd1aeSAssar Westerlund	  done
71095e9cd1aeSAssar Westerlund	  newlib_search_path=
71105e9cd1aeSAssar Westerlund	fi
71115e9cd1aeSAssar Westerlund
71125e9cd1aeSAssar Westerlund	if test "$linkmode,$pass" != "prog,link"; then
71135e9cd1aeSAssar Westerlund	  vars="deplibs"
71145e9cd1aeSAssar Westerlund	else
71155e9cd1aeSAssar Westerlund	  vars="compile_deplibs finalize_deplibs"
71165e9cd1aeSAssar Westerlund	fi
71175e9cd1aeSAssar Westerlund	for var in $vars dependency_libs; do
71184137ff4cSJacques Vidrine	  # Add libraries to $var in reverse order
71195e9cd1aeSAssar Westerlund	  eval tmp_libs=\"\$$var\"
71205e9cd1aeSAssar Westerlund	  new_libs=
71215e9cd1aeSAssar Westerlund	  for deplib in $tmp_libs; do
71221c43270aSJacques Vidrine	    # FIXME: Pedantically, this is the right thing to do, so
71231c43270aSJacques Vidrine	    #        that some nasty dependency loop isn't accidentally
71241c43270aSJacques Vidrine	    #        broken:
71251c43270aSJacques Vidrine	    #new_libs="$deplib $new_libs"
71261c43270aSJacques Vidrine	    # Pragmatically, this seems to cause very few problems in
71271c43270aSJacques Vidrine	    # practice:
71284137ff4cSJacques Vidrine	    case $deplib in
71295e9cd1aeSAssar Westerlund	    -L*) new_libs="$deplib $new_libs" ;;
71301c43270aSJacques Vidrine	    -R*) ;;
71315e9cd1aeSAssar Westerlund	    *)
71321c43270aSJacques Vidrine	      # And here is the reason: when a library appears more
71331c43270aSJacques Vidrine	      # than once as an explicit dependence of a library, or
71341c43270aSJacques Vidrine	      # is implicitly linked in more than once by the
71351c43270aSJacques Vidrine	      # compiler, it is considered special, and multiple
71361c43270aSJacques Vidrine	      # occurrences thereof are not removed.  Compare this
71371c43270aSJacques Vidrine	      # with having the same library being listed as a
71381c43270aSJacques Vidrine	      # dependency of multiple other libraries: in this case,
71391c43270aSJacques Vidrine	      # we know (pedantically, we assume) the library does not
71401c43270aSJacques Vidrine	      # need to be listed more than once, so we keep only the
71411c43270aSJacques Vidrine	      # last copy.  This is not always right, but it is rare
71421c43270aSJacques Vidrine	      # enough that we require users that really mean to play
71431c43270aSJacques Vidrine	      # such unportable linking tricks to link the library
71441c43270aSJacques Vidrine	      # using -Wl,-lname, so that libtool does not consider it
71451c43270aSJacques Vidrine	      # for duplicate removal.
71465e9cd1aeSAssar Westerlund	      case " $specialdeplibs " in
71475e9cd1aeSAssar Westerlund	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
71485e9cd1aeSAssar Westerlund	      *)
71495e9cd1aeSAssar Westerlund		case " $new_libs " in
71505e9cd1aeSAssar Westerlund		*" $deplib "*) ;;
71515e9cd1aeSAssar Westerlund		*) new_libs="$deplib $new_libs" ;;
71525e9cd1aeSAssar Westerlund		esac
71535e9cd1aeSAssar Westerlund		;;
71545e9cd1aeSAssar Westerlund	      esac
71555e9cd1aeSAssar Westerlund	      ;;
71565e9cd1aeSAssar Westerlund	    esac
71575e9cd1aeSAssar Westerlund	  done
71585e9cd1aeSAssar Westerlund	  tmp_libs=
71595e9cd1aeSAssar Westerlund	  for deplib in $new_libs; do
71604137ff4cSJacques Vidrine	    case $deplib in
71615e9cd1aeSAssar Westerlund	    -L*)
71625e9cd1aeSAssar Westerlund	      case " $tmp_libs " in
71635e9cd1aeSAssar Westerlund	      *" $deplib "*) ;;
7164*ae771770SStanislav Sedov	      *) func_append tmp_libs " $deplib" ;;
71655e9cd1aeSAssar Westerlund	      esac
71665e9cd1aeSAssar Westerlund	      ;;
7167*ae771770SStanislav Sedov	    *) func_append tmp_libs " $deplib" ;;
71685e9cd1aeSAssar Westerlund	    esac
71695e9cd1aeSAssar Westerlund	  done
71705e9cd1aeSAssar Westerlund	  eval $var=\"$tmp_libs\"
71714137ff4cSJacques Vidrine	done # for var
71725e9cd1aeSAssar Westerlund      fi
7173c19800e8SDoug Rabson      # Last step: remove runtime libs from dependency_libs
7174c19800e8SDoug Rabson      # (they stay in deplibs)
71751c43270aSJacques Vidrine      tmp_libs=
71761c43270aSJacques Vidrine      for i in $dependency_libs ; do
71771c43270aSJacques Vidrine	case " $predeps $postdeps $compiler_lib_search_path " in
71781c43270aSJacques Vidrine	*" $i "*)
71791c43270aSJacques Vidrine	  i=""
71801c43270aSJacques Vidrine	  ;;
71811c43270aSJacques Vidrine	esac
71821c43270aSJacques Vidrine	if test -n "$i" ; then
7183*ae771770SStanislav Sedov	  func_append tmp_libs " $i"
71844137ff4cSJacques Vidrine	fi
71851c43270aSJacques Vidrine      done
71861c43270aSJacques Vidrine      dependency_libs=$tmp_libs
71874137ff4cSJacques Vidrine    done # for pass
71881c43270aSJacques Vidrine    if test "$linkmode" = prog; then
71895e9cd1aeSAssar Westerlund      dlfiles="$newdlfiles"
7190*ae771770SStanislav Sedov    fi
7191*ae771770SStanislav Sedov    if test "$linkmode" = prog || test "$linkmode" = lib; then
71925e9cd1aeSAssar Westerlund      dlprefiles="$newdlprefiles"
71935e9cd1aeSAssar Westerlund    fi
71945e9cd1aeSAssar Westerlund
71955e9cd1aeSAssar Westerlund    case $linkmode in
71965e9cd1aeSAssar Westerlund    oldlib)
71975e9cd1aeSAssar Westerlund      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
7198*ae771770SStanislav Sedov	func_warning "\`-dlopen' is ignored for archives"
7199b528cefcSMark Murray      fi
7200b528cefcSMark Murray
7201*ae771770SStanislav Sedov      case " $deplibs" in
7202*ae771770SStanislav Sedov      *\ -l* | *\ -L*)
7203*ae771770SStanislav Sedov	func_warning "\`-l' and \`-L' are ignored for archives" ;;
7204*ae771770SStanislav Sedov      esac
7205b528cefcSMark Murray
7206*ae771770SStanislav Sedov      test -n "$rpath" && \
7207*ae771770SStanislav Sedov	func_warning "\`-rpath' is ignored for archives"
72085e9cd1aeSAssar Westerlund
7209*ae771770SStanislav Sedov      test -n "$xrpath" && \
7210*ae771770SStanislav Sedov	func_warning "\`-R' is ignored for archives"
7211b528cefcSMark Murray
7212*ae771770SStanislav Sedov      test -n "$vinfo" && \
7213*ae771770SStanislav Sedov	func_warning "\`-version-info/-version-number' is ignored for archives"
7214b528cefcSMark Murray
7215*ae771770SStanislav Sedov      test -n "$release" && \
7216*ae771770SStanislav Sedov	func_warning "\`-release' is ignored for archives"
7217*ae771770SStanislav Sedov
7218*ae771770SStanislav Sedov      test -n "$export_symbols$export_symbols_regex" && \
7219*ae771770SStanislav Sedov	func_warning "\`-export-symbols' is ignored for archives"
7220b528cefcSMark Murray
7221b528cefcSMark Murray      # Now set the variables for building old libraries.
7222b528cefcSMark Murray      build_libtool_libs=no
7223b528cefcSMark Murray      oldlibs="$output"
7224*ae771770SStanislav Sedov      func_append objs "$old_deplibs"
7225b528cefcSMark Murray      ;;
7226b528cefcSMark Murray
72275e9cd1aeSAssar Westerlund    lib)
7228b528cefcSMark Murray      # Make sure we only generate libraries of the form `libNAME.la'.
72294137ff4cSJacques Vidrine      case $outputname in
72305e9cd1aeSAssar Westerlund      lib*)
7231*ae771770SStanislav Sedov	func_stripname 'lib' '.la' "$outputname"
7232*ae771770SStanislav Sedov	name=$func_stripname_result
7233c19800e8SDoug Rabson	eval shared_ext=\"$shrext_cmds\"
72345e9cd1aeSAssar Westerlund	eval libname=\"$libname_spec\"
72355e9cd1aeSAssar Westerlund	;;
7236b528cefcSMark Murray      *)
7237*ae771770SStanislav Sedov	test "$module" = no && \
7238*ae771770SStanislav Sedov	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
7239*ae771770SStanislav Sedov
72405e9cd1aeSAssar Westerlund	if test "$need_lib_prefix" != no; then
72415e9cd1aeSAssar Westerlund	  # Add the "lib" prefix for modules if required
7242*ae771770SStanislav Sedov	  func_stripname '' '.la' "$outputname"
7243*ae771770SStanislav Sedov	  name=$func_stripname_result
7244c19800e8SDoug Rabson	  eval shared_ext=\"$shrext_cmds\"
72455e9cd1aeSAssar Westerlund	  eval libname=\"$libname_spec\"
72465e9cd1aeSAssar Westerlund	else
7247*ae771770SStanislav Sedov	  func_stripname '' '.la' "$outputname"
7248*ae771770SStanislav Sedov	  libname=$func_stripname_result
72495e9cd1aeSAssar Westerlund	fi
7250b528cefcSMark Murray	;;
7251b528cefcSMark Murray      esac
7252b528cefcSMark Murray
7253b528cefcSMark Murray      if test -n "$objs"; then
72545e9cd1aeSAssar Westerlund	if test "$deplibs_check_method" != pass_all; then
7255*ae771770SStanislav Sedov	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
72565e9cd1aeSAssar Westerlund	else
7257*ae771770SStanislav Sedov	  echo
7258*ae771770SStanislav Sedov	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
7259*ae771770SStanislav Sedov	  $ECHO "*** objects $objs is not portable!"
7260*ae771770SStanislav Sedov	  func_append libobjs " $objs"
72615e9cd1aeSAssar Westerlund	fi
7262b528cefcSMark Murray      fi
7263b528cefcSMark Murray
7264*ae771770SStanislav Sedov      test "$dlself" != no && \
7265*ae771770SStanislav Sedov	func_warning "\`-dlopen self' is ignored for libtool libraries"
7266b528cefcSMark Murray
7267b528cefcSMark Murray      set dummy $rpath
7268*ae771770SStanislav Sedov      shift
7269*ae771770SStanislav Sedov      test "$#" -gt 1 && \
7270*ae771770SStanislav Sedov	func_warning "ignoring multiple \`-rpath's for a libtool library"
7271*ae771770SStanislav Sedov
7272*ae771770SStanislav Sedov      install_libdir="$1"
7273b528cefcSMark Murray
7274b528cefcSMark Murray      oldlibs=
7275b528cefcSMark Murray      if test -z "$rpath"; then
72765e9cd1aeSAssar Westerlund	if test "$build_libtool_libs" = yes; then
7277b528cefcSMark Murray	  # Building a libtool convenience library.
72781c43270aSJacques Vidrine	  # Some compilers have problems with a `.al' extension so
72791c43270aSJacques Vidrine	  # convenience libraries should have the same extension an
72801c43270aSJacques Vidrine	  # archive normally would.
7281b528cefcSMark Murray	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
7282b528cefcSMark Murray	  build_libtool_libs=convenience
72835e9cd1aeSAssar Westerlund	  build_old_libs=yes
72845e9cd1aeSAssar Westerlund	fi
7285b528cefcSMark Murray
7286*ae771770SStanislav Sedov	test -n "$vinfo" && \
7287*ae771770SStanislav Sedov	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
7288b528cefcSMark Murray
7289*ae771770SStanislav Sedov	test -n "$release" && \
7290*ae771770SStanislav Sedov	  func_warning "\`-release' is ignored for convenience libraries"
7291b528cefcSMark Murray      else
7292b528cefcSMark Murray
7293b528cefcSMark Murray	# Parse the version information argument.
72948373020dSJacques Vidrine	save_ifs="$IFS"; IFS=':'
7295b528cefcSMark Murray	set dummy $vinfo 0 0 0
7296*ae771770SStanislav Sedov	shift
7297b528cefcSMark Murray	IFS="$save_ifs"
7298b528cefcSMark Murray
7299*ae771770SStanislav Sedov	test -n "$7" && \
7300*ae771770SStanislav Sedov	  func_fatal_help "too many parameters to \`-version-info'"
7301b528cefcSMark Murray
73021c43270aSJacques Vidrine	# convert absolute version numbers to libtool ages
73031c43270aSJacques Vidrine	# this retains compatibility with .la files and attempts
73041c43270aSJacques Vidrine	# to make the code below a bit more comprehensible
73051c43270aSJacques Vidrine
73061c43270aSJacques Vidrine	case $vinfo_number in
73071c43270aSJacques Vidrine	yes)
7308*ae771770SStanislav Sedov	  number_major="$1"
7309*ae771770SStanislav Sedov	  number_minor="$2"
7310*ae771770SStanislav Sedov	  number_revision="$3"
73111c43270aSJacques Vidrine	  #
73121c43270aSJacques Vidrine	  # There are really only two kinds -- those that
73131c43270aSJacques Vidrine	  # use the current revision as the major version
73141c43270aSJacques Vidrine	  # and those that subtract age and use age as
73151c43270aSJacques Vidrine	  # a minor version.  But, then there is irix
73161c43270aSJacques Vidrine	  # which has an extra 1 added just for fun
73171c43270aSJacques Vidrine	  #
73181c43270aSJacques Vidrine	  case $version_type in
7319*ae771770SStanislav Sedov	  darwin|linux|osf|windows|none)
7320*ae771770SStanislav Sedov	    func_arith $number_major + $number_minor
7321*ae771770SStanislav Sedov	    current=$func_arith_result
73221c43270aSJacques Vidrine	    age="$number_minor"
73231c43270aSJacques Vidrine	    revision="$number_revision"
73241c43270aSJacques Vidrine	    ;;
7325*ae771770SStanislav Sedov	  freebsd-aout|freebsd-elf|qnx|sunos)
73261c43270aSJacques Vidrine	    current="$number_major"
73271c43270aSJacques Vidrine	    revision="$number_minor"
73281c43270aSJacques Vidrine	    age="0"
73291c43270aSJacques Vidrine	    ;;
73301c43270aSJacques Vidrine	  irix|nonstopux)
7331*ae771770SStanislav Sedov	    func_arith $number_major + $number_minor
7332*ae771770SStanislav Sedov	    current=$func_arith_result
73331c43270aSJacques Vidrine	    age="$number_minor"
73341c43270aSJacques Vidrine	    revision="$number_minor"
7335*ae771770SStanislav Sedov	    lt_irix_increment=no
73361c43270aSJacques Vidrine	    ;;
73371c43270aSJacques Vidrine	  esac
73381c43270aSJacques Vidrine	  ;;
73391c43270aSJacques Vidrine	no)
7340*ae771770SStanislav Sedov	  current="$1"
7341*ae771770SStanislav Sedov	  revision="$2"
7342*ae771770SStanislav Sedov	  age="$3"
73431c43270aSJacques Vidrine	  ;;
73441c43270aSJacques Vidrine	esac
7345b528cefcSMark Murray
7346b528cefcSMark Murray	# Check that each of the things are valid numbers.
73474137ff4cSJacques Vidrine	case $current in
7348c19800e8SDoug Rabson	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]) ;;
7349b528cefcSMark Murray	*)
7350*ae771770SStanislav Sedov	  func_error "CURRENT \`$current' must be a nonnegative integer"
7351*ae771770SStanislav Sedov	  func_fatal_error "\`$vinfo' is not valid version information"
7352b528cefcSMark Murray	  ;;
7353b528cefcSMark Murray	esac
7354b528cefcSMark Murray
73554137ff4cSJacques Vidrine	case $revision in
7356c19800e8SDoug Rabson	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]) ;;
7357b528cefcSMark Murray	*)
7358*ae771770SStanislav Sedov	  func_error "REVISION \`$revision' must be a nonnegative integer"
7359*ae771770SStanislav Sedov	  func_fatal_error "\`$vinfo' is not valid version information"
7360b528cefcSMark Murray	  ;;
7361b528cefcSMark Murray	esac
7362b528cefcSMark Murray
73634137ff4cSJacques Vidrine	case $age in
7364c19800e8SDoug Rabson	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]) ;;
7365b528cefcSMark Murray	*)
7366*ae771770SStanislav Sedov	  func_error "AGE \`$age' must be a nonnegative integer"
7367*ae771770SStanislav Sedov	  func_fatal_error "\`$vinfo' is not valid version information"
7368b528cefcSMark Murray	  ;;
7369b528cefcSMark Murray	esac
7370b528cefcSMark Murray
73711c43270aSJacques Vidrine	if test "$age" -gt "$current"; then
7372*ae771770SStanislav Sedov	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
7373*ae771770SStanislav Sedov	  func_fatal_error "\`$vinfo' is not valid version information"
7374b528cefcSMark Murray	fi
7375b528cefcSMark Murray
7376b528cefcSMark Murray	# Calculate the version variables.
7377b528cefcSMark Murray	major=
7378b528cefcSMark Murray	versuffix=
7379b528cefcSMark Murray	verstring=
73804137ff4cSJacques Vidrine	case $version_type in
7381b528cefcSMark Murray	none) ;;
7382b528cefcSMark Murray
73834137ff4cSJacques Vidrine	darwin)
73844137ff4cSJacques Vidrine	  # Like Linux, but with the current version available in
73854137ff4cSJacques Vidrine	  # verstring for coding it into the library header
7386*ae771770SStanislav Sedov	  func_arith $current - $age
7387*ae771770SStanislav Sedov	  major=.$func_arith_result
73884137ff4cSJacques Vidrine	  versuffix="$major.$age.$revision"
73894137ff4cSJacques Vidrine	  # Darwin ld doesn't like 0 for these options...
7390*ae771770SStanislav Sedov	  func_arith $current + 1
7391*ae771770SStanislav Sedov	  minor_current=$func_arith_result
7392*ae771770SStanislav Sedov	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
7393*ae771770SStanislav Sedov	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
73944137ff4cSJacques Vidrine	  ;;
73954137ff4cSJacques Vidrine
73964137ff4cSJacques Vidrine	freebsd-aout)
73974137ff4cSJacques Vidrine	  major=".$current"
73984137ff4cSJacques Vidrine	  versuffix=".$current.$revision";
73994137ff4cSJacques Vidrine	  ;;
74004137ff4cSJacques Vidrine
74014137ff4cSJacques Vidrine	freebsd-elf)
74024137ff4cSJacques Vidrine	  major=".$current"
7403*ae771770SStanislav Sedov	  versuffix=".$current"
74044137ff4cSJacques Vidrine	  ;;
74054137ff4cSJacques Vidrine
74061c43270aSJacques Vidrine	irix | nonstopux)
7407*ae771770SStanislav Sedov	  if test "X$lt_irix_increment" = "Xno"; then
7408*ae771770SStanislav Sedov	    func_arith $current - $age
7409*ae771770SStanislav Sedov	  else
7410*ae771770SStanislav Sedov	    func_arith $current - $age + 1
7411*ae771770SStanislav Sedov	  fi
7412*ae771770SStanislav Sedov	  major=$func_arith_result
74131c43270aSJacques Vidrine
74141c43270aSJacques Vidrine	  case $version_type in
74151c43270aSJacques Vidrine	    nonstopux) verstring_prefix=nonstopux ;;
74161c43270aSJacques Vidrine	    *)         verstring_prefix=sgi ;;
74171c43270aSJacques Vidrine	  esac
74181c43270aSJacques Vidrine	  verstring="$verstring_prefix$major.$revision"
74195e9cd1aeSAssar Westerlund
74205e9cd1aeSAssar Westerlund	  # Add in all the interfaces that we are compatible with.
74215e9cd1aeSAssar Westerlund	  loop=$revision
74221c43270aSJacques Vidrine	  while test "$loop" -ne 0; do
7423*ae771770SStanislav Sedov	    func_arith $revision - $loop
7424*ae771770SStanislav Sedov	    iface=$func_arith_result
7425*ae771770SStanislav Sedov	    func_arith $loop - 1
7426*ae771770SStanislav Sedov	    loop=$func_arith_result
74271c43270aSJacques Vidrine	    verstring="$verstring_prefix$major.$iface:$verstring"
74285e9cd1aeSAssar Westerlund	  done
74294137ff4cSJacques Vidrine
74304137ff4cSJacques Vidrine	  # Before this point, $major must not contain `.'.
74314137ff4cSJacques Vidrine	  major=.$major
74324137ff4cSJacques Vidrine	  versuffix="$major.$revision"
74335e9cd1aeSAssar Westerlund	  ;;
74345e9cd1aeSAssar Westerlund
7435b528cefcSMark Murray	linux)
7436*ae771770SStanislav Sedov	  func_arith $current - $age
7437*ae771770SStanislav Sedov	  major=.$func_arith_result
7438b528cefcSMark Murray	  versuffix="$major.$age.$revision"
7439b528cefcSMark Murray	  ;;
7440b528cefcSMark Murray
7441b528cefcSMark Murray	osf)
7442*ae771770SStanislav Sedov	  func_arith $current - $age
7443*ae771770SStanislav Sedov	  major=.$func_arith_result
7444b528cefcSMark Murray	  versuffix=".$current.$age.$revision"
7445b528cefcSMark Murray	  verstring="$current.$age.$revision"
7446b528cefcSMark Murray
7447b528cefcSMark Murray	  # Add in all the interfaces that we are compatible with.
7448b528cefcSMark Murray	  loop=$age
74491c43270aSJacques Vidrine	  while test "$loop" -ne 0; do
7450*ae771770SStanislav Sedov	    func_arith $current - $loop
7451*ae771770SStanislav Sedov	    iface=$func_arith_result
7452*ae771770SStanislav Sedov	    func_arith $loop - 1
7453*ae771770SStanislav Sedov	    loop=$func_arith_result
7454b528cefcSMark Murray	    verstring="$verstring:${iface}.0"
7455b528cefcSMark Murray	  done
7456b528cefcSMark Murray
7457b528cefcSMark Murray	  # Make executables depend on our current version.
7458*ae771770SStanislav Sedov	  func_append verstring ":${current}.0"
7459*ae771770SStanislav Sedov	  ;;
7460*ae771770SStanislav Sedov
7461*ae771770SStanislav Sedov	qnx)
7462*ae771770SStanislav Sedov	  major=".$current"
7463*ae771770SStanislav Sedov	  versuffix=".$current"
7464b528cefcSMark Murray	  ;;
7465b528cefcSMark Murray
7466b528cefcSMark Murray	sunos)
7467b528cefcSMark Murray	  major=".$current"
7468b528cefcSMark Murray	  versuffix=".$current.$revision"
7469b528cefcSMark Murray	  ;;
7470b528cefcSMark Murray
7471b528cefcSMark Murray	windows)
74724137ff4cSJacques Vidrine	  # Use '-' rather than '.', since we only want one
74734137ff4cSJacques Vidrine	  # extension on DOS 8.3 filesystems.
7474*ae771770SStanislav Sedov	  func_arith $current - $age
7475*ae771770SStanislav Sedov	  major=$func_arith_result
74764137ff4cSJacques Vidrine	  versuffix="-$major"
7477b528cefcSMark Murray	  ;;
7478b528cefcSMark Murray
7479b528cefcSMark Murray	*)
7480*ae771770SStanislav Sedov	  func_fatal_configuration "unknown library version type \`$version_type'"
7481b528cefcSMark Murray	  ;;
7482b528cefcSMark Murray	esac
7483b528cefcSMark Murray
7484b528cefcSMark Murray	# Clear the version info if we defaulted, and they specified a release.
7485b528cefcSMark Murray	if test -z "$vinfo" && test -n "$release"; then
7486b528cefcSMark Murray	  major=
74878373020dSJacques Vidrine	  case $version_type in
74888373020dSJacques Vidrine	  darwin)
74898373020dSJacques Vidrine	    # we can't check for "0.0" in archive_cmds due to quoting
74908373020dSJacques Vidrine	    # problems, so we reset it completely
74911c43270aSJacques Vidrine	    verstring=
74928373020dSJacques Vidrine	    ;;
74938373020dSJacques Vidrine	  *)
74948373020dSJacques Vidrine	    verstring="0.0"
74958373020dSJacques Vidrine	    ;;
74968373020dSJacques Vidrine	  esac
74975e9cd1aeSAssar Westerlund	  if test "$need_version" = no; then
74985e9cd1aeSAssar Westerlund	    versuffix=
74995e9cd1aeSAssar Westerlund	  else
7500b528cefcSMark Murray	    versuffix=".0.0"
75015e9cd1aeSAssar Westerlund	  fi
75025e9cd1aeSAssar Westerlund	fi
75035e9cd1aeSAssar Westerlund
75045e9cd1aeSAssar Westerlund	# Remove version info from name if versioning should be avoided
75055e9cd1aeSAssar Westerlund	if test "$avoid_version" = yes && test "$need_version" = no; then
75065e9cd1aeSAssar Westerlund	  major=
75075e9cd1aeSAssar Westerlund	  versuffix=
75085e9cd1aeSAssar Westerlund	  verstring=""
7509b528cefcSMark Murray	fi
7510b528cefcSMark Murray
7511b528cefcSMark Murray	# Check to see if the archive will have undefined symbols.
7512b528cefcSMark Murray	if test "$allow_undefined" = yes; then
7513b528cefcSMark Murray	  if test "$allow_undefined_flag" = unsupported; then
7514*ae771770SStanislav Sedov	    func_warning "undefined symbols not allowed in $host shared libraries"
7515b528cefcSMark Murray	    build_libtool_libs=no
7516b528cefcSMark Murray	    build_old_libs=yes
7517b528cefcSMark Murray	  fi
7518b528cefcSMark Murray	else
7519b528cefcSMark Murray	  # Don't allow undefined symbols.
7520b528cefcSMark Murray	  allow_undefined_flag="$no_undefined_flag"
7521b528cefcSMark Murray	fi
7522*ae771770SStanislav Sedov
7523b528cefcSMark Murray      fi
7524b528cefcSMark Murray
7525*ae771770SStanislav Sedov      func_generate_dlsyms "$libname" "$libname" "yes"
7526*ae771770SStanislav Sedov      func_append libobjs " $symfileobj"
7527*ae771770SStanislav Sedov      test "X$libobjs" = "X " && libobjs=
7528*ae771770SStanislav Sedov
7529*ae771770SStanislav Sedov      if test "$opt_mode" != relink; then
75301c43270aSJacques Vidrine	# Remove our outputs, but don't remove object files since they
75311c43270aSJacques Vidrine	# may have been created when compiling PIC objects.
75321c43270aSJacques Vidrine	removelist=
7533*ae771770SStanislav Sedov	tempremovelist=`$ECHO "$output_objdir/*"`
75341c43270aSJacques Vidrine	for p in $tempremovelist; do
75351c43270aSJacques Vidrine	  case $p in
7536*ae771770SStanislav Sedov	    *.$objext | *.gcno)
75371c43270aSJacques Vidrine	       ;;
75381c43270aSJacques Vidrine	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
7539c19800e8SDoug Rabson	       if test "X$precious_files_regex" != "X"; then
7540*ae771770SStanislav Sedov		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
75411c43270aSJacques Vidrine		 then
75421c43270aSJacques Vidrine		   continue
75431c43270aSJacques Vidrine		 fi
7544c19800e8SDoug Rabson	       fi
7545*ae771770SStanislav Sedov	       func_append removelist " $p"
75461c43270aSJacques Vidrine	       ;;
75471c43270aSJacques Vidrine	    *) ;;
75481c43270aSJacques Vidrine	  esac
75491c43270aSJacques Vidrine	done
7550*ae771770SStanislav Sedov	test -n "$removelist" && \
7551*ae771770SStanislav Sedov	  func_show_eval "${RM}r \$removelist"
7552b528cefcSMark Murray      fi
7553b528cefcSMark Murray
7554b528cefcSMark Murray      # Now set the variables for building old libraries.
7555b528cefcSMark Murray      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
7556*ae771770SStanislav Sedov	func_append oldlibs " $output_objdir/$libname.$libext"
7557b528cefcSMark Murray
7558b528cefcSMark Murray	# Transform .lo files to .o files.
7559*ae771770SStanislav Sedov	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
7560b528cefcSMark Murray      fi
7561b528cefcSMark Murray
75625e9cd1aeSAssar Westerlund      # Eliminate all temporary directories.
7563*ae771770SStanislav Sedov      #for path in $notinst_path; do
7564*ae771770SStanislav Sedov      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
7565*ae771770SStanislav Sedov      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
7566*ae771770SStanislav Sedov      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
7567*ae771770SStanislav Sedov      #done
75685e9cd1aeSAssar Westerlund
75695e9cd1aeSAssar Westerlund      if test -n "$xrpath"; then
75705e9cd1aeSAssar Westerlund	# If the user specified any rpath flags, then add them.
75715e9cd1aeSAssar Westerlund	temp_xrpath=
75725e9cd1aeSAssar Westerlund	for libdir in $xrpath; do
7573*ae771770SStanislav Sedov	  func_replace_sysroot "$libdir"
7574*ae771770SStanislav Sedov	  func_append temp_xrpath " -R$func_replace_sysroot_result"
75755e9cd1aeSAssar Westerlund	  case "$finalize_rpath " in
75765e9cd1aeSAssar Westerlund	  *" $libdir "*) ;;
7577*ae771770SStanislav Sedov	  *) func_append finalize_rpath " $libdir" ;;
75785e9cd1aeSAssar Westerlund	  esac
75795e9cd1aeSAssar Westerlund	done
75801c43270aSJacques Vidrine	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
75815e9cd1aeSAssar Westerlund	  dependency_libs="$temp_xrpath $dependency_libs"
75825e9cd1aeSAssar Westerlund	fi
75835e9cd1aeSAssar Westerlund      fi
75845e9cd1aeSAssar Westerlund
75855e9cd1aeSAssar Westerlund      # Make sure dlfiles contains only unique files that won't be dlpreopened
75865e9cd1aeSAssar Westerlund      old_dlfiles="$dlfiles"
75875e9cd1aeSAssar Westerlund      dlfiles=
75885e9cd1aeSAssar Westerlund      for lib in $old_dlfiles; do
75895e9cd1aeSAssar Westerlund	case " $dlprefiles $dlfiles " in
75905e9cd1aeSAssar Westerlund	*" $lib "*) ;;
7591*ae771770SStanislav Sedov	*) func_append dlfiles " $lib" ;;
75925e9cd1aeSAssar Westerlund	esac
75935e9cd1aeSAssar Westerlund      done
75945e9cd1aeSAssar Westerlund
75955e9cd1aeSAssar Westerlund      # Make sure dlprefiles contains only unique files
75965e9cd1aeSAssar Westerlund      old_dlprefiles="$dlprefiles"
75975e9cd1aeSAssar Westerlund      dlprefiles=
75985e9cd1aeSAssar Westerlund      for lib in $old_dlprefiles; do
75995e9cd1aeSAssar Westerlund	case "$dlprefiles " in
76005e9cd1aeSAssar Westerlund	*" $lib "*) ;;
7601*ae771770SStanislav Sedov	*) func_append dlprefiles " $lib" ;;
76025e9cd1aeSAssar Westerlund	esac
76035e9cd1aeSAssar Westerlund      done
76045e9cd1aeSAssar Westerlund
7605b528cefcSMark Murray      if test "$build_libtool_libs" = yes; then
76065e9cd1aeSAssar Westerlund	if test -n "$rpath"; then
76074137ff4cSJacques Vidrine	  case $host in
7608*ae771770SStanislav Sedov	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
76095e9cd1aeSAssar Westerlund	    # these systems don't actually have a c library (as such)!
76105e9cd1aeSAssar Westerlund	    ;;
76114137ff4cSJacques Vidrine	  *-*-rhapsody* | *-*-darwin1.[012])
76124137ff4cSJacques Vidrine	    # Rhapsody C library is in the System framework
7613*ae771770SStanislav Sedov	    func_append deplibs " System.ltframework"
76144137ff4cSJacques Vidrine	    ;;
76154137ff4cSJacques Vidrine	  *-*-netbsd*)
76164137ff4cSJacques Vidrine	    # Don't link with libc until the a.out ld.so is fixed.
76174137ff4cSJacques Vidrine	    ;;
7618c19800e8SDoug Rabson	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
76198373020dSJacques Vidrine	    # Do not include libc due to us having libc/libc_r.
7620c19800e8SDoug Rabson	    ;;
7621c19800e8SDoug Rabson	  *-*-sco3.2v5* | *-*-sco5v6*)
7622c19800e8SDoug Rabson	    # Causes problems with __ctype
7623c19800e8SDoug Rabson	    ;;
7624c19800e8SDoug Rabson	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7625c19800e8SDoug Rabson	    # Compiler inserts libc in the correct place for threads to work
76268373020dSJacques Vidrine	    ;;
76275e9cd1aeSAssar Westerlund	  *)
76284137ff4cSJacques Vidrine	    # Add libc to deplibs on all other systems if necessary.
76291c43270aSJacques Vidrine	    if test "$build_libtool_need_lc" = "yes"; then
7630*ae771770SStanislav Sedov	      func_append deplibs " -lc"
76314137ff4cSJacques Vidrine	    fi
76325e9cd1aeSAssar Westerlund	    ;;
76335e9cd1aeSAssar Westerlund	  esac
76345e9cd1aeSAssar Westerlund	fi
76355e9cd1aeSAssar Westerlund
7636b528cefcSMark Murray	# Transform deplibs into only deplibs that can be linked in shared.
7637b528cefcSMark Murray	name_save=$name
7638b528cefcSMark Murray	libname_save=$libname
7639b528cefcSMark Murray	release_save=$release
7640b528cefcSMark Murray	versuffix_save=$versuffix
7641b528cefcSMark Murray	major_save=$major
7642b528cefcSMark Murray	# I'm not sure if I'm treating the release correctly.  I think
7643b528cefcSMark Murray	# release should show up in the -l (ie -lgmp5) so we don't want to
7644b528cefcSMark Murray	# add it in twice.  Is that correct?
7645b528cefcSMark Murray	release=""
7646b528cefcSMark Murray	versuffix=""
7647b528cefcSMark Murray	major=""
7648b528cefcSMark Murray	newdeplibs=
76495e9cd1aeSAssar Westerlund	droppeddeps=no
76504137ff4cSJacques Vidrine	case $deplibs_check_method in
7651b528cefcSMark Murray	pass_all)
76525e9cd1aeSAssar Westerlund	  # Don't check for shared/static.  Everything works.
7653b528cefcSMark Murray	  # This might be a little naive.  We might want to check
7654b528cefcSMark Murray	  # whether the library exists or not.  But this is on
7655b528cefcSMark Murray	  # osf3 & osf4 and I'm not really sure... Just
76561c43270aSJacques Vidrine	  # implementing what was already the behavior.
76575e9cd1aeSAssar Westerlund	  newdeplibs=$deplibs
76585e9cd1aeSAssar Westerlund	  ;;
7659b528cefcSMark Murray	test_compile)
7660b528cefcSMark Murray	  # This code stresses the "libraries are programs" paradigm to its
7661b528cefcSMark Murray	  # limits. Maybe even breaks it.  We compile a program, linking it
7662b528cefcSMark Murray	  # against the deplibs as a proxy for the library.  Then we can check
7663b528cefcSMark Murray	  # whether they linked in statically or dynamically with ldd.
7664*ae771770SStanislav Sedov	  $opt_dry_run || $RM conftest.c
7665b528cefcSMark Murray	  cat > conftest.c <<EOF
7666b528cefcSMark Murray	  int main() { return 0; }
7667b528cefcSMark MurrayEOF
7668*ae771770SStanislav Sedov	  $opt_dry_run || $RM conftest
7669*ae771770SStanislav Sedov	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
76705e9cd1aeSAssar Westerlund	    ldd_output=`ldd conftest`
7671b528cefcSMark Murray	    for i in $deplibs; do
7672*ae771770SStanislav Sedov	      case $i in
7673*ae771770SStanislav Sedov	      -l*)
7674*ae771770SStanislav Sedov		func_stripname -l '' "$i"
7675*ae771770SStanislav Sedov		name=$func_stripname_result
76761c43270aSJacques Vidrine		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
76771c43270aSJacques Vidrine		  case " $predeps $postdeps " in
76781c43270aSJacques Vidrine		  *" $i "*)
7679*ae771770SStanislav Sedov		    func_append newdeplibs " $i"
76801c43270aSJacques Vidrine		    i=""
76811c43270aSJacques Vidrine		    ;;
76821c43270aSJacques Vidrine		  esac
76831c43270aSJacques Vidrine		fi
76841c43270aSJacques Vidrine		if test -n "$i" ; then
7685*ae771770SStanislav Sedov		  libname=`eval "\\$ECHO \"$libname_spec\""`
7686*ae771770SStanislav Sedov		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7687*ae771770SStanislav Sedov		  set dummy $deplib_matches; shift
7688*ae771770SStanislav Sedov		  deplib_match=$1
7689b528cefcSMark Murray		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
7690*ae771770SStanislav Sedov		    func_append newdeplibs " $i"
7691b528cefcSMark Murray		  else
76925e9cd1aeSAssar Westerlund		    droppeddeps=yes
7693*ae771770SStanislav Sedov		    echo
7694*ae771770SStanislav Sedov		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
7695*ae771770SStanislav Sedov		    echo "*** I have the capability to make that library automatically link in when"
7696*ae771770SStanislav Sedov		    echo "*** you link to this library.  But I can only do this if you have a"
7697*ae771770SStanislav Sedov		    echo "*** shared version of the library, which I believe you do not have"
7698*ae771770SStanislav Sedov		    echo "*** because a test_compile did reveal that the linker did not use it for"
7699*ae771770SStanislav Sedov		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
77001c43270aSJacques Vidrine		  fi
7701b528cefcSMark Murray		fi
7702*ae771770SStanislav Sedov		;;
7703*ae771770SStanislav Sedov	      *)
7704*ae771770SStanislav Sedov		func_append newdeplibs " $i"
7705*ae771770SStanislav Sedov		;;
7706*ae771770SStanislav Sedov	      esac
7707b528cefcSMark Murray	    done
7708b528cefcSMark Murray	  else
77091c43270aSJacques Vidrine	    # Error occurred in the first compile.  Let's try to salvage
77101c43270aSJacques Vidrine	    # the situation: Compile a separate program for each library.
7711b528cefcSMark Murray	    for i in $deplibs; do
7712*ae771770SStanislav Sedov	      case $i in
7713*ae771770SStanislav Sedov	      -l*)
7714*ae771770SStanislav Sedov		func_stripname -l '' "$i"
7715*ae771770SStanislav Sedov		name=$func_stripname_result
7716*ae771770SStanislav Sedov		$opt_dry_run || $RM conftest
7717*ae771770SStanislav Sedov		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
77185e9cd1aeSAssar Westerlund		  ldd_output=`ldd conftest`
77191c43270aSJacques Vidrine		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
77201c43270aSJacques Vidrine		    case " $predeps $postdeps " in
77211c43270aSJacques Vidrine		    *" $i "*)
7722*ae771770SStanislav Sedov		      func_append newdeplibs " $i"
77231c43270aSJacques Vidrine		      i=""
77241c43270aSJacques Vidrine		      ;;
77251c43270aSJacques Vidrine		    esac
77261c43270aSJacques Vidrine		  fi
77271c43270aSJacques Vidrine		  if test -n "$i" ; then
7728*ae771770SStanislav Sedov		    libname=`eval "\\$ECHO \"$libname_spec\""`
7729*ae771770SStanislav Sedov		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7730*ae771770SStanislav Sedov		    set dummy $deplib_matches; shift
7731*ae771770SStanislav Sedov		    deplib_match=$1
7732b528cefcSMark Murray		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
7733*ae771770SStanislav Sedov		      func_append newdeplibs " $i"
7734b528cefcSMark Murray		    else
77355e9cd1aeSAssar Westerlund		      droppeddeps=yes
7736*ae771770SStanislav Sedov		      echo
7737*ae771770SStanislav Sedov		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
7738*ae771770SStanislav Sedov		      echo "*** I have the capability to make that library automatically link in when"
7739*ae771770SStanislav Sedov		      echo "*** you link to this library.  But I can only do this if you have a"
7740*ae771770SStanislav Sedov		      echo "*** shared version of the library, which you do not appear to have"
7741*ae771770SStanislav Sedov		      echo "*** because a test_compile did reveal that the linker did not use this one"
7742*ae771770SStanislav Sedov		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
77431c43270aSJacques Vidrine		    fi
7744b528cefcSMark Murray		  fi
7745b528cefcSMark Murray		else
77465e9cd1aeSAssar Westerlund		  droppeddeps=yes
7747*ae771770SStanislav Sedov		  echo
7748*ae771770SStanislav Sedov		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
7749*ae771770SStanislav Sedov		  echo "*** make it link in!  You will probably need to install it or some"
7750*ae771770SStanislav Sedov		  echo "*** library that it depends on before this library will be fully"
7751*ae771770SStanislav Sedov		  echo "*** functional.  Installing it before continuing would be even better."
7752b528cefcSMark Murray		fi
7753*ae771770SStanislav Sedov		;;
7754*ae771770SStanislav Sedov	      *)
7755*ae771770SStanislav Sedov		func_append newdeplibs " $i"
7756*ae771770SStanislav Sedov		;;
7757*ae771770SStanislav Sedov	      esac
7758b528cefcSMark Murray	    done
7759b528cefcSMark Murray	  fi
7760b528cefcSMark Murray	  ;;
77615e9cd1aeSAssar Westerlund	file_magic*)
7762*ae771770SStanislav Sedov	  set dummy $deplibs_check_method; shift
7763*ae771770SStanislav Sedov	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7764b528cefcSMark Murray	  for a_deplib in $deplibs; do
7765*ae771770SStanislav Sedov	    case $a_deplib in
7766*ae771770SStanislav Sedov	    -l*)
7767*ae771770SStanislav Sedov	      func_stripname -l '' "$a_deplib"
7768*ae771770SStanislav Sedov	      name=$func_stripname_result
77691c43270aSJacques Vidrine	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
77701c43270aSJacques Vidrine		case " $predeps $postdeps " in
77711c43270aSJacques Vidrine		*" $a_deplib "*)
7772*ae771770SStanislav Sedov		  func_append newdeplibs " $a_deplib"
77731c43270aSJacques Vidrine		  a_deplib=""
77741c43270aSJacques Vidrine		  ;;
77751c43270aSJacques Vidrine		esac
77761c43270aSJacques Vidrine	      fi
77771c43270aSJacques Vidrine	      if test -n "$a_deplib" ; then
7778*ae771770SStanislav Sedov		libname=`eval "\\$ECHO \"$libname_spec\""`
7779*ae771770SStanislav Sedov		if test -n "$file_magic_glob"; then
7780*ae771770SStanislav Sedov		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
7781*ae771770SStanislav Sedov		else
7782*ae771770SStanislav Sedov		  libnameglob=$libname
7783*ae771770SStanislav Sedov		fi
7784*ae771770SStanislav Sedov		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
77855e9cd1aeSAssar Westerlund		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7786*ae771770SStanislav Sedov		  if test "$want_nocaseglob" = yes; then
7787*ae771770SStanislav Sedov		    shopt -s nocaseglob
7788*ae771770SStanislav Sedov		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
7789*ae771770SStanislav Sedov		    $nocaseglob
7790*ae771770SStanislav Sedov		  else
7791*ae771770SStanislav Sedov		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
7792*ae771770SStanislav Sedov		  fi
7793b528cefcSMark Murray		  for potent_lib in $potential_libs; do
77945e9cd1aeSAssar Westerlund		      # Follow soft links.
7795*ae771770SStanislav Sedov		      if ls -lLd "$potent_lib" 2>/dev/null |
7796*ae771770SStanislav Sedov			 $GREP " -> " >/dev/null; then
77975e9cd1aeSAssar Westerlund			continue
77985e9cd1aeSAssar Westerlund		      fi
77995e9cd1aeSAssar Westerlund		      # The statement above tries to avoid entering an
78005e9cd1aeSAssar Westerlund		      # endless loop below, in case of cyclic links.
78015e9cd1aeSAssar Westerlund		      # We might still enter an endless loop, since a link
78025e9cd1aeSAssar Westerlund		      # loop can be closed while we follow links,
78035e9cd1aeSAssar Westerlund		      # but so what?
78045e9cd1aeSAssar Westerlund		      potlib="$potent_lib"
78055e9cd1aeSAssar Westerlund		      while test -h "$potlib" 2>/dev/null; do
78061c43270aSJacques Vidrine			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
78074137ff4cSJacques Vidrine			case $potliblink in
78085e9cd1aeSAssar Westerlund			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
7809*ae771770SStanislav Sedov			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
78105e9cd1aeSAssar Westerlund			esac
78115e9cd1aeSAssar Westerlund		      done
7812*ae771770SStanislav Sedov		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
7813*ae771770SStanislav Sedov			 $SED -e 10q |
7814*ae771770SStanislav Sedov			 $EGREP "$file_magic_regex" > /dev/null; then
7815*ae771770SStanislav Sedov			func_append newdeplibs " $a_deplib"
7816b528cefcSMark Murray			a_deplib=""
7817b528cefcSMark Murray			break 2
7818b528cefcSMark Murray		      fi
7819b528cefcSMark Murray		  done
7820b528cefcSMark Murray		done
78211c43270aSJacques Vidrine	      fi
78225e9cd1aeSAssar Westerlund	      if test -n "$a_deplib" ; then
78235e9cd1aeSAssar Westerlund		droppeddeps=yes
7824*ae771770SStanislav Sedov		echo
7825*ae771770SStanislav Sedov		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
7826*ae771770SStanislav Sedov		echo "*** I have the capability to make that library automatically link in when"
7827*ae771770SStanislav Sedov		echo "*** you link to this library.  But I can only do this if you have a"
7828*ae771770SStanislav Sedov		echo "*** shared version of the library, which you do not appear to have"
7829*ae771770SStanislav Sedov		echo "*** because I did check the linker path looking for a file starting"
78301c43270aSJacques Vidrine		if test -z "$potlib" ; then
7831*ae771770SStanislav Sedov		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
78321c43270aSJacques Vidrine		else
7833*ae771770SStanislav Sedov		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7834*ae771770SStanislav Sedov		  $ECHO "*** using a file magic. Last file checked: $potlib"
78351c43270aSJacques Vidrine		fi
7836b528cefcSMark Murray	      fi
7837*ae771770SStanislav Sedov	      ;;
7838*ae771770SStanislav Sedov	    *)
7839b528cefcSMark Murray	      # Add a -L argument.
7840*ae771770SStanislav Sedov	      func_append newdeplibs " $a_deplib"
7841*ae771770SStanislav Sedov	      ;;
7842*ae771770SStanislav Sedov	    esac
7843b528cefcSMark Murray	  done # Gone through all deplibs.
7844b528cefcSMark Murray	  ;;
78454137ff4cSJacques Vidrine	match_pattern*)
7846*ae771770SStanislav Sedov	  set dummy $deplibs_check_method; shift
7847*ae771770SStanislav Sedov	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
78484137ff4cSJacques Vidrine	  for a_deplib in $deplibs; do
7849*ae771770SStanislav Sedov	    case $a_deplib in
7850*ae771770SStanislav Sedov	    -l*)
7851*ae771770SStanislav Sedov	      func_stripname -l '' "$a_deplib"
7852*ae771770SStanislav Sedov	      name=$func_stripname_result
78531c43270aSJacques Vidrine	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
78541c43270aSJacques Vidrine		case " $predeps $postdeps " in
78551c43270aSJacques Vidrine		*" $a_deplib "*)
7856*ae771770SStanislav Sedov		  func_append newdeplibs " $a_deplib"
78571c43270aSJacques Vidrine		  a_deplib=""
78581c43270aSJacques Vidrine		  ;;
78591c43270aSJacques Vidrine		esac
78601c43270aSJacques Vidrine	      fi
78611c43270aSJacques Vidrine	      if test -n "$a_deplib" ; then
7862*ae771770SStanislav Sedov		libname=`eval "\\$ECHO \"$libname_spec\""`
78634137ff4cSJacques Vidrine		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
78644137ff4cSJacques Vidrine		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
78654137ff4cSJacques Vidrine		  for potent_lib in $potential_libs; do
78661c43270aSJacques Vidrine		    potlib="$potent_lib" # see symlink-check above in file_magic test
7867*ae771770SStanislav Sedov		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
7868*ae771770SStanislav Sedov		       $EGREP "$match_pattern_regex" > /dev/null; then
7869*ae771770SStanislav Sedov		      func_append newdeplibs " $a_deplib"
78704137ff4cSJacques Vidrine		      a_deplib=""
78714137ff4cSJacques Vidrine		      break 2
78724137ff4cSJacques Vidrine		    fi
78734137ff4cSJacques Vidrine		  done
78744137ff4cSJacques Vidrine		done
78751c43270aSJacques Vidrine	      fi
78764137ff4cSJacques Vidrine	      if test -n "$a_deplib" ; then
78774137ff4cSJacques Vidrine		droppeddeps=yes
7878*ae771770SStanislav Sedov		echo
7879*ae771770SStanislav Sedov		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
7880*ae771770SStanislav Sedov		echo "*** I have the capability to make that library automatically link in when"
7881*ae771770SStanislav Sedov		echo "*** you link to this library.  But I can only do this if you have a"
7882*ae771770SStanislav Sedov		echo "*** shared version of the library, which you do not appear to have"
7883*ae771770SStanislav Sedov		echo "*** because I did check the linker path looking for a file starting"
78841c43270aSJacques Vidrine		if test -z "$potlib" ; then
7885*ae771770SStanislav Sedov		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
78861c43270aSJacques Vidrine		else
7887*ae771770SStanislav Sedov		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7888*ae771770SStanislav Sedov		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
78891c43270aSJacques Vidrine		fi
78904137ff4cSJacques Vidrine	      fi
7891*ae771770SStanislav Sedov	      ;;
7892*ae771770SStanislav Sedov	    *)
78934137ff4cSJacques Vidrine	      # Add a -L argument.
7894*ae771770SStanislav Sedov	      func_append newdeplibs " $a_deplib"
7895*ae771770SStanislav Sedov	      ;;
7896*ae771770SStanislav Sedov	    esac
78974137ff4cSJacques Vidrine	  done # Gone through all deplibs.
78984137ff4cSJacques Vidrine	  ;;
78995e9cd1aeSAssar Westerlund	none | unknown | *)
79005e9cd1aeSAssar Westerlund	  newdeplibs=""
7901*ae771770SStanislav Sedov	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
79021c43270aSJacques Vidrine	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
79031c43270aSJacques Vidrine	    for i in $predeps $postdeps ; do
79041c43270aSJacques Vidrine	      # can't use Xsed below, because $i might contain '/'
7905*ae771770SStanislav Sedov	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
79061c43270aSJacques Vidrine	    done
79075e9cd1aeSAssar Westerlund	  fi
7908*ae771770SStanislav Sedov	  case $tmp_deplibs in
7909*ae771770SStanislav Sedov	  *[!\	\ ]*)
7910*ae771770SStanislav Sedov	    echo
79111c43270aSJacques Vidrine	    if test "X$deplibs_check_method" = "Xnone"; then
7912*ae771770SStanislav Sedov	      echo "*** Warning: inter-library dependencies are not supported in this platform."
79131c43270aSJacques Vidrine	    else
7914*ae771770SStanislav Sedov	      echo "*** Warning: inter-library dependencies are not known to be supported."
79151c43270aSJacques Vidrine	    fi
7916*ae771770SStanislav Sedov	    echo "*** All declared inter-library dependencies are being dropped."
79175e9cd1aeSAssar Westerlund	    droppeddeps=yes
7918*ae771770SStanislav Sedov	    ;;
7919*ae771770SStanislav Sedov	  esac
79205e9cd1aeSAssar Westerlund	  ;;
7921b528cefcSMark Murray	esac
7922b528cefcSMark Murray	versuffix=$versuffix_save
7923b528cefcSMark Murray	major=$major_save
7924b528cefcSMark Murray	release=$release_save
7925b528cefcSMark Murray	libname=$libname_save
7926b528cefcSMark Murray	name=$name_save
79275e9cd1aeSAssar Westerlund
79284137ff4cSJacques Vidrine	case $host in
79294137ff4cSJacques Vidrine	*-*-rhapsody* | *-*-darwin1.[012])
7930*ae771770SStanislav Sedov	  # On Rhapsody replace the C library with the System framework
7931*ae771770SStanislav Sedov	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
79324137ff4cSJacques Vidrine	  ;;
79334137ff4cSJacques Vidrine	esac
79344137ff4cSJacques Vidrine
79355e9cd1aeSAssar Westerlund	if test "$droppeddeps" = yes; then
79365e9cd1aeSAssar Westerlund	  if test "$module" = yes; then
7937*ae771770SStanislav Sedov	    echo
7938*ae771770SStanislav Sedov	    echo "*** Warning: libtool could not satisfy all declared inter-library"
7939*ae771770SStanislav Sedov	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
7940*ae771770SStanislav Sedov	    echo "*** a static module, that should work as long as the dlopening"
7941*ae771770SStanislav Sedov	    echo "*** application is linked with the -dlopen flag."
79425e9cd1aeSAssar Westerlund	    if test -z "$global_symbol_pipe"; then
7943*ae771770SStanislav Sedov	      echo
7944*ae771770SStanislav Sedov	      echo "*** However, this would only work if libtool was able to extract symbol"
7945*ae771770SStanislav Sedov	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
7946*ae771770SStanislav Sedov	      echo "*** not find such a program.  So, this module is probably useless."
7947*ae771770SStanislav Sedov	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
79485e9cd1aeSAssar Westerlund	    fi
79495e9cd1aeSAssar Westerlund	    if test "$build_old_libs" = no; then
79505e9cd1aeSAssar Westerlund	      oldlibs="$output_objdir/$libname.$libext"
79515e9cd1aeSAssar Westerlund	      build_libtool_libs=module
79525e9cd1aeSAssar Westerlund	      build_old_libs=yes
79535e9cd1aeSAssar Westerlund	    else
79545e9cd1aeSAssar Westerlund	      build_libtool_libs=no
79555e9cd1aeSAssar Westerlund	    fi
79565e9cd1aeSAssar Westerlund	  else
7957*ae771770SStanislav Sedov	    echo "*** The inter-library dependencies that have been dropped here will be"
7958*ae771770SStanislav Sedov	    echo "*** automatically added whenever a program is linked with this library"
7959*ae771770SStanislav Sedov	    echo "*** or is declared to -dlopen it."
79604137ff4cSJacques Vidrine
79611c43270aSJacques Vidrine	    if test "$allow_undefined" = no; then
7962*ae771770SStanislav Sedov	      echo
7963*ae771770SStanislav Sedov	      echo "*** Since this library must not contain undefined symbols,"
7964*ae771770SStanislav Sedov	      echo "*** because either the platform does not support them or"
7965*ae771770SStanislav Sedov	      echo "*** it was explicitly requested with -no-undefined,"
7966*ae771770SStanislav Sedov	      echo "*** libtool will only create a static version of it."
79674137ff4cSJacques Vidrine	      if test "$build_old_libs" = no; then
79684137ff4cSJacques Vidrine		oldlibs="$output_objdir/$libname.$libext"
79694137ff4cSJacques Vidrine		build_libtool_libs=module
79704137ff4cSJacques Vidrine		build_old_libs=yes
79714137ff4cSJacques Vidrine	      else
79724137ff4cSJacques Vidrine		build_libtool_libs=no
79734137ff4cSJacques Vidrine	      fi
79744137ff4cSJacques Vidrine	    fi
79755e9cd1aeSAssar Westerlund	  fi
79765e9cd1aeSAssar Westerlund	fi
7977b528cefcSMark Murray	# Done checking deplibs!
79785e9cd1aeSAssar Westerlund	deplibs=$newdeplibs
79795e9cd1aeSAssar Westerlund      fi
7980*ae771770SStanislav Sedov      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
7981*ae771770SStanislav Sedov      case $host in
7982*ae771770SStanislav Sedov	*-*-darwin*)
7983*ae771770SStanislav Sedov	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7984*ae771770SStanislav Sedov	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7985*ae771770SStanislav Sedov	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7986*ae771770SStanislav Sedov	  ;;
7987*ae771770SStanislav Sedov      esac
7988c19800e8SDoug Rabson
7989c19800e8SDoug Rabson      # move library search paths that coincide with paths to not yet
7990c19800e8SDoug Rabson      # installed libraries to the beginning of the library search list
7991c19800e8SDoug Rabson      new_libs=
7992c19800e8SDoug Rabson      for path in $notinst_path; do
7993c19800e8SDoug Rabson	case " $new_libs " in
7994c19800e8SDoug Rabson	*" -L$path/$objdir "*) ;;
7995c19800e8SDoug Rabson	*)
7996c19800e8SDoug Rabson	  case " $deplibs " in
7997c19800e8SDoug Rabson	  *" -L$path/$objdir "*)
7998*ae771770SStanislav Sedov	    func_append new_libs " -L$path/$objdir" ;;
7999c19800e8SDoug Rabson	  esac
8000c19800e8SDoug Rabson	  ;;
8001c19800e8SDoug Rabson	esac
8002c19800e8SDoug Rabson      done
8003c19800e8SDoug Rabson      for deplib in $deplibs; do
8004c19800e8SDoug Rabson	case $deplib in
8005c19800e8SDoug Rabson	-L*)
8006c19800e8SDoug Rabson	  case " $new_libs " in
8007c19800e8SDoug Rabson	  *" $deplib "*) ;;
8008*ae771770SStanislav Sedov	  *) func_append new_libs " $deplib" ;;
8009c19800e8SDoug Rabson	  esac
8010c19800e8SDoug Rabson	  ;;
8011*ae771770SStanislav Sedov	*) func_append new_libs " $deplib" ;;
8012c19800e8SDoug Rabson	esac
8013c19800e8SDoug Rabson      done
8014c19800e8SDoug Rabson      deplibs="$new_libs"
8015c19800e8SDoug Rabson
80165e9cd1aeSAssar Westerlund      # All the library-specific variables (install_libdir is set above).
80175e9cd1aeSAssar Westerlund      library_names=
80185e9cd1aeSAssar Westerlund      old_library=
80195e9cd1aeSAssar Westerlund      dlname=
80205e9cd1aeSAssar Westerlund
80215e9cd1aeSAssar Westerlund      # Test again, we may have decided not to build it any more
80225e9cd1aeSAssar Westerlund      if test "$build_libtool_libs" = yes; then
80231c43270aSJacques Vidrine	if test "$hardcode_into_libs" = yes; then
80245e9cd1aeSAssar Westerlund	  # Hardcode the library paths
80255e9cd1aeSAssar Westerlund	  hardcode_libdirs=
80265e9cd1aeSAssar Westerlund	  dep_rpath=
80275e9cd1aeSAssar Westerlund	  rpath="$finalize_rpath"
8028*ae771770SStanislav Sedov	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
80295e9cd1aeSAssar Westerlund	  for libdir in $rpath; do
80305e9cd1aeSAssar Westerlund	    if test -n "$hardcode_libdir_flag_spec"; then
80315e9cd1aeSAssar Westerlund	      if test -n "$hardcode_libdir_separator"; then
8032*ae771770SStanislav Sedov		func_replace_sysroot "$libdir"
8033*ae771770SStanislav Sedov		libdir=$func_replace_sysroot_result
80345e9cd1aeSAssar Westerlund		if test -z "$hardcode_libdirs"; then
80355e9cd1aeSAssar Westerlund		  hardcode_libdirs="$libdir"
80365e9cd1aeSAssar Westerlund		else
80375e9cd1aeSAssar Westerlund		  # Just accumulate the unique libdirs.
80384137ff4cSJacques Vidrine		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
80395e9cd1aeSAssar Westerlund		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
80405e9cd1aeSAssar Westerlund		    ;;
80415e9cd1aeSAssar Westerlund		  *)
8042*ae771770SStanislav Sedov		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
80435e9cd1aeSAssar Westerlund		    ;;
80445e9cd1aeSAssar Westerlund		  esac
80455e9cd1aeSAssar Westerlund		fi
80465e9cd1aeSAssar Westerlund	      else
80475e9cd1aeSAssar Westerlund		eval flag=\"$hardcode_libdir_flag_spec\"
8048*ae771770SStanislav Sedov		func_append dep_rpath " $flag"
80495e9cd1aeSAssar Westerlund	      fi
80505e9cd1aeSAssar Westerlund	    elif test -n "$runpath_var"; then
80515e9cd1aeSAssar Westerlund	      case "$perm_rpath " in
80525e9cd1aeSAssar Westerlund	      *" $libdir "*) ;;
8053*ae771770SStanislav Sedov	      *) func_apped perm_rpath " $libdir" ;;
80545e9cd1aeSAssar Westerlund	      esac
80555e9cd1aeSAssar Westerlund	    fi
80565e9cd1aeSAssar Westerlund	  done
80575e9cd1aeSAssar Westerlund	  # Substitute the hardcoded libdirs into the rpath.
80585e9cd1aeSAssar Westerlund	  if test -n "$hardcode_libdir_separator" &&
80595e9cd1aeSAssar Westerlund	     test -n "$hardcode_libdirs"; then
80605e9cd1aeSAssar Westerlund	    libdir="$hardcode_libdirs"
80611c43270aSJacques Vidrine	    if test -n "$hardcode_libdir_flag_spec_ld"; then
80621c43270aSJacques Vidrine	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
80631c43270aSJacques Vidrine	    else
80645e9cd1aeSAssar Westerlund	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
80655e9cd1aeSAssar Westerlund	    fi
80661c43270aSJacques Vidrine	  fi
80675e9cd1aeSAssar Westerlund	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
80685e9cd1aeSAssar Westerlund	    # We should set the runpath_var.
80695e9cd1aeSAssar Westerlund	    rpath=
80705e9cd1aeSAssar Westerlund	    for dir in $perm_rpath; do
8071*ae771770SStanislav Sedov	      func_append rpath "$dir:"
80725e9cd1aeSAssar Westerlund	    done
80735e9cd1aeSAssar Westerlund	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
80745e9cd1aeSAssar Westerlund	  fi
80755e9cd1aeSAssar Westerlund	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
80765e9cd1aeSAssar Westerlund	fi
80775e9cd1aeSAssar Westerlund
80785e9cd1aeSAssar Westerlund	shlibpath="$finalize_shlibpath"
8079*ae771770SStanislav Sedov	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
80805e9cd1aeSAssar Westerlund	if test -n "$shlibpath"; then
80815e9cd1aeSAssar Westerlund	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
80825e9cd1aeSAssar Westerlund	fi
8083b528cefcSMark Murray
8084b528cefcSMark Murray	# Get the real and link names of the library.
8085c19800e8SDoug Rabson	eval shared_ext=\"$shrext_cmds\"
8086b528cefcSMark Murray	eval library_names=\"$library_names_spec\"
8087b528cefcSMark Murray	set dummy $library_names
8088*ae771770SStanislav Sedov	shift
8089*ae771770SStanislav Sedov	realname="$1"
8090*ae771770SStanislav Sedov	shift
8091b528cefcSMark Murray
8092b528cefcSMark Murray	if test -n "$soname_spec"; then
8093b528cefcSMark Murray	  eval soname=\"$soname_spec\"
8094b528cefcSMark Murray	else
8095b528cefcSMark Murray	  soname="$realname"
8096b528cefcSMark Murray	fi
80971c43270aSJacques Vidrine	if test -z "$dlname"; then
80981c43270aSJacques Vidrine	  dlname=$soname
80991c43270aSJacques Vidrine	fi
8100b528cefcSMark Murray
8101b528cefcSMark Murray	lib="$output_objdir/$realname"
8102c19800e8SDoug Rabson	linknames=
8103b528cefcSMark Murray	for link
8104b528cefcSMark Murray	do
8105*ae771770SStanislav Sedov	  func_append linknames " $link"
8106b528cefcSMark Murray	done
8107b528cefcSMark Murray
81085e9cd1aeSAssar Westerlund	# Use standard objects if they are pic
8109*ae771770SStanislav Sedov	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
8110*ae771770SStanislav Sedov	test "X$libobjs" = "X " && libobjs=
8111*ae771770SStanislav Sedov
8112*ae771770SStanislav Sedov	delfiles=
8113*ae771770SStanislav Sedov	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8114*ae771770SStanislav Sedov	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
8115*ae771770SStanislav Sedov	  export_symbols="$output_objdir/$libname.uexp"
8116*ae771770SStanislav Sedov	  func_append delfiles " $export_symbols"
8117*ae771770SStanislav Sedov	fi
8118*ae771770SStanislav Sedov
8119*ae771770SStanislav Sedov	orig_export_symbols=
8120*ae771770SStanislav Sedov	case $host_os in
8121*ae771770SStanislav Sedov	cygwin* | mingw* | cegcc*)
8122*ae771770SStanislav Sedov	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
8123*ae771770SStanislav Sedov	    # exporting using user supplied symfile
8124*ae771770SStanislav Sedov	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
8125*ae771770SStanislav Sedov	      # and it's NOT already a .def file. Must figure out
8126*ae771770SStanislav Sedov	      # which of the given symbols are data symbols and tag
8127*ae771770SStanislav Sedov	      # them as such. So, trigger use of export_symbols_cmds.
8128*ae771770SStanislav Sedov	      # export_symbols gets reassigned inside the "prepare
8129*ae771770SStanislav Sedov	      # the list of exported symbols" if statement, so the
8130*ae771770SStanislav Sedov	      # include_expsyms logic still works.
8131*ae771770SStanislav Sedov	      orig_export_symbols="$export_symbols"
8132*ae771770SStanislav Sedov	      export_symbols=
8133*ae771770SStanislav Sedov	      always_export_symbols=yes
8134*ae771770SStanislav Sedov	    fi
8135*ae771770SStanislav Sedov	  fi
8136*ae771770SStanislav Sedov	  ;;
8137*ae771770SStanislav Sedov	esac
81385e9cd1aeSAssar Westerlund
81395e9cd1aeSAssar Westerlund	# Prepare the list of exported symbols
81405e9cd1aeSAssar Westerlund	if test -z "$export_symbols"; then
81415e9cd1aeSAssar Westerlund	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
8142*ae771770SStanislav Sedov	    func_verbose "generating symbol list for \`$libname.la'"
81435e9cd1aeSAssar Westerlund	    export_symbols="$output_objdir/$libname.exp"
8144*ae771770SStanislav Sedov	    $opt_dry_run || $RM $export_symbols
81451c43270aSJacques Vidrine	    cmds=$export_symbols_cmds
81468373020dSJacques Vidrine	    save_ifs="$IFS"; IFS='~'
8147*ae771770SStanislav Sedov	    for cmd1 in $cmds; do
81485e9cd1aeSAssar Westerlund	      IFS="$save_ifs"
8149*ae771770SStanislav Sedov	      # Take the normal branch if the nm_file_list_spec branch
8150*ae771770SStanislav Sedov	      # doesn't work or if tool conversion is not needed.
8151*ae771770SStanislav Sedov	      case $nm_file_list_spec~$to_tool_file_cmd in
8152*ae771770SStanislav Sedov		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
8153*ae771770SStanislav Sedov		  try_normal_branch=yes
8154*ae771770SStanislav Sedov		  eval cmd=\"$cmd1\"
8155*ae771770SStanislav Sedov		  func_len " $cmd"
8156*ae771770SStanislav Sedov		  len=$func_len_result
8157*ae771770SStanislav Sedov		  ;;
8158*ae771770SStanislav Sedov		*)
8159*ae771770SStanislav Sedov		  try_normal_branch=no
8160*ae771770SStanislav Sedov		  ;;
8161*ae771770SStanislav Sedov	      esac
8162*ae771770SStanislav Sedov	      if test "$try_normal_branch" = yes \
8163*ae771770SStanislav Sedov		 && { test "$len" -lt "$max_cmd_len" \
8164*ae771770SStanislav Sedov		      || test "$max_cmd_len" -le -1; }
8165*ae771770SStanislav Sedov	      then
8166*ae771770SStanislav Sedov		func_show_eval "$cmd" 'exit $?'
8167*ae771770SStanislav Sedov		skipped_export=false
8168*ae771770SStanislav Sedov	      elif test -n "$nm_file_list_spec"; then
8169*ae771770SStanislav Sedov		func_basename "$output"
8170*ae771770SStanislav Sedov		output_la=$func_basename_result
8171*ae771770SStanislav Sedov		save_libobjs=$libobjs
8172*ae771770SStanislav Sedov		save_output=$output
8173*ae771770SStanislav Sedov		output=${output_objdir}/${output_la}.nm
8174*ae771770SStanislav Sedov		func_to_tool_file "$output"
8175*ae771770SStanislav Sedov		libobjs=$nm_file_list_spec$func_to_tool_file_result
8176*ae771770SStanislav Sedov		func_append delfiles " $output"
8177*ae771770SStanislav Sedov		func_verbose "creating $NM input file list: $output"
8178*ae771770SStanislav Sedov		for obj in $save_libobjs; do
8179*ae771770SStanislav Sedov		  func_to_tool_file "$obj"
8180*ae771770SStanislav Sedov		  $ECHO "$func_to_tool_file_result"
8181*ae771770SStanislav Sedov		done > "$output"
8182*ae771770SStanislav Sedov		eval cmd=\"$cmd1\"
8183*ae771770SStanislav Sedov		func_show_eval "$cmd" 'exit $?'
8184*ae771770SStanislav Sedov		output=$save_output
8185*ae771770SStanislav Sedov		libobjs=$save_libobjs
81861c43270aSJacques Vidrine		skipped_export=false
81871c43270aSJacques Vidrine	      else
81881c43270aSJacques Vidrine		# The command line is too long to execute in one step.
8189*ae771770SStanislav Sedov		func_verbose "using reloadable object file for export list..."
81901c43270aSJacques Vidrine		skipped_export=:
8191c19800e8SDoug Rabson		# Break out early, otherwise skipped_export may be
8192c19800e8SDoug Rabson		# set to false by a later but shorter cmd.
8193c19800e8SDoug Rabson		break
81941c43270aSJacques Vidrine	      fi
81955e9cd1aeSAssar Westerlund	    done
81965e9cd1aeSAssar Westerlund	    IFS="$save_ifs"
8197*ae771770SStanislav Sedov	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
8198*ae771770SStanislav Sedov	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8199*ae771770SStanislav Sedov	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
82005e9cd1aeSAssar Westerlund	    fi
82015e9cd1aeSAssar Westerlund	  fi
82025e9cd1aeSAssar Westerlund	fi
82035e9cd1aeSAssar Westerlund
82045e9cd1aeSAssar Westerlund	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8205*ae771770SStanislav Sedov	  tmp_export_symbols="$export_symbols"
8206*ae771770SStanislav Sedov	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
8207*ae771770SStanislav Sedov	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8208*ae771770SStanislav Sedov	fi
8209*ae771770SStanislav Sedov
8210*ae771770SStanislav Sedov	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
8211*ae771770SStanislav Sedov	  # The given exports_symbols file has to be filtered, so filter it.
8212*ae771770SStanislav Sedov	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8213*ae771770SStanislav Sedov	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
8214*ae771770SStanislav Sedov	  # 's' commands which not all seds can handle. GNU sed should be fine
8215*ae771770SStanislav Sedov	  # though. Also, the filter scales superlinearly with the number of
8216*ae771770SStanislav Sedov	  # global variables. join(1) would be nice here, but unfortunately
8217*ae771770SStanislav Sedov	  # isn't a blessed tool.
8218*ae771770SStanislav Sedov	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
8219*ae771770SStanislav Sedov	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8220*ae771770SStanislav Sedov	  export_symbols=$output_objdir/$libname.def
8221*ae771770SStanislav Sedov	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
82225e9cd1aeSAssar Westerlund	fi
82235e9cd1aeSAssar Westerlund
82241c43270aSJacques Vidrine	tmp_deplibs=
82251c43270aSJacques Vidrine	for test_deplib in $deplibs; do
82261c43270aSJacques Vidrine	  case " $convenience " in
82271c43270aSJacques Vidrine	  *" $test_deplib "*) ;;
82281c43270aSJacques Vidrine	  *)
8229*ae771770SStanislav Sedov	    func_append tmp_deplibs " $test_deplib"
82301c43270aSJacques Vidrine	    ;;
82311c43270aSJacques Vidrine	  esac
82321c43270aSJacques Vidrine	done
82331c43270aSJacques Vidrine	deplibs="$tmp_deplibs"
82341c43270aSJacques Vidrine
82355e9cd1aeSAssar Westerlund	if test -n "$convenience"; then
8236*ae771770SStanislav Sedov	  if test -n "$whole_archive_flag_spec" &&
8237*ae771770SStanislav Sedov	    test "$compiler_needs_object" = yes &&
8238*ae771770SStanislav Sedov	    test -z "$libobjs"; then
8239*ae771770SStanislav Sedov	    # extract the archives, so we have objects to list.
8240*ae771770SStanislav Sedov	    # TODO: could optimize this to just extract one archive.
8241*ae771770SStanislav Sedov	    whole_archive_flag_spec=
8242*ae771770SStanislav Sedov	  fi
82435e9cd1aeSAssar Westerlund	  if test -n "$whole_archive_flag_spec"; then
82441c43270aSJacques Vidrine	    save_libobjs=$libobjs
82455e9cd1aeSAssar Westerlund	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8246*ae771770SStanislav Sedov	    test "X$libobjs" = "X " && libobjs=
82475e9cd1aeSAssar Westerlund	  else
82485e9cd1aeSAssar Westerlund	    gentop="$output_objdir/${outputname}x"
8249*ae771770SStanislav Sedov	    func_append generated " $gentop"
82505e9cd1aeSAssar Westerlund
8251c19800e8SDoug Rabson	    func_extract_archives $gentop $convenience
8252*ae771770SStanislav Sedov	    func_append libobjs " $func_extract_archives_result"
8253*ae771770SStanislav Sedov	    test "X$libobjs" = "X " && libobjs=
8254b528cefcSMark Murray	  fi
82555e9cd1aeSAssar Westerlund	fi
82565e9cd1aeSAssar Westerlund
82575e9cd1aeSAssar Westerlund	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
82585e9cd1aeSAssar Westerlund	  eval flag=\"$thread_safe_flag_spec\"
8259*ae771770SStanislav Sedov	  func_append linker_flags " $flag"
82605e9cd1aeSAssar Westerlund	fi
82615e9cd1aeSAssar Westerlund
82625e9cd1aeSAssar Westerlund	# Make a backup of the uninstalled library when relinking
8263*ae771770SStanislav Sedov	if test "$opt_mode" = relink; then
8264*ae771770SStanislav Sedov	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
82655e9cd1aeSAssar Westerlund	fi
8266b528cefcSMark Murray
8267b528cefcSMark Murray	# Do each of the archive commands.
82681c43270aSJacques Vidrine	if test "$module" = yes && test -n "$module_cmds" ; then
82691c43270aSJacques Vidrine	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
82701c43270aSJacques Vidrine	    eval test_cmds=\"$module_expsym_cmds\"
82711c43270aSJacques Vidrine	    cmds=$module_expsym_cmds
8272b528cefcSMark Murray	  else
82731c43270aSJacques Vidrine	    eval test_cmds=\"$module_cmds\"
82741c43270aSJacques Vidrine	    cmds=$module_cmds
82751c43270aSJacques Vidrine	  fi
82761c43270aSJacques Vidrine	else
82771c43270aSJacques Vidrine	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
82781c43270aSJacques Vidrine	    eval test_cmds=\"$archive_expsym_cmds\"
82791c43270aSJacques Vidrine	    cmds=$archive_expsym_cmds
82801c43270aSJacques Vidrine	  else
82811c43270aSJacques Vidrine	    eval test_cmds=\"$archive_cmds\"
82821c43270aSJacques Vidrine	    cmds=$archive_cmds
82831c43270aSJacques Vidrine	  fi
82841c43270aSJacques Vidrine	fi
82851c43270aSJacques Vidrine
8286c19800e8SDoug Rabson	if test "X$skipped_export" != "X:" &&
8287*ae771770SStanislav Sedov	   func_len " $test_cmds" &&
8288*ae771770SStanislav Sedov	   len=$func_len_result &&
8289*ae771770SStanislav Sedov	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
82901c43270aSJacques Vidrine	  :
82911c43270aSJacques Vidrine	else
8292*ae771770SStanislav Sedov	  # The command line is too long to link in one step, link piecewise
8293*ae771770SStanislav Sedov	  # or, if using GNU ld and skipped_export is not :, use a linker
8294*ae771770SStanislav Sedov	  # script.
82951c43270aSJacques Vidrine
82961c43270aSJacques Vidrine	  # Save the value of $output and $libobjs because we want to
82971c43270aSJacques Vidrine	  # use them later.  If we have whole_archive_flag_spec, we
82981c43270aSJacques Vidrine	  # want to use save_libobjs as it was before
82991c43270aSJacques Vidrine	  # whole_archive_flag_spec was expanded, because we can't
83001c43270aSJacques Vidrine	  # assume the linker understands whole_archive_flag_spec.
83011c43270aSJacques Vidrine	  # This may have to be revisited, in case too many
83021c43270aSJacques Vidrine	  # convenience libraries get linked in and end up exceeding
83031c43270aSJacques Vidrine	  # the spec.
83041c43270aSJacques Vidrine	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
83051c43270aSJacques Vidrine	    save_libobjs=$libobjs
83061c43270aSJacques Vidrine	  fi
83071c43270aSJacques Vidrine	  save_output=$output
8308*ae771770SStanislav Sedov	  func_basename "$output"
8309*ae771770SStanislav Sedov	  output_la=$func_basename_result
83101c43270aSJacques Vidrine
83111c43270aSJacques Vidrine	  # Clear the reloadable object creation command queue and
83121c43270aSJacques Vidrine	  # initialize k to one.
83131c43270aSJacques Vidrine	  test_cmds=
83141c43270aSJacques Vidrine	  concat_cmds=
83151c43270aSJacques Vidrine	  objlist=
83161c43270aSJacques Vidrine	  last_robj=
83171c43270aSJacques Vidrine	  k=1
8318*ae771770SStanislav Sedov
8319*ae771770SStanislav Sedov	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
8320*ae771770SStanislav Sedov	    output=${output_objdir}/${output_la}.lnkscript
8321*ae771770SStanislav Sedov	    func_verbose "creating GNU ld script: $output"
8322*ae771770SStanislav Sedov	    echo 'INPUT (' > $output
8323*ae771770SStanislav Sedov	    for obj in $save_libobjs
8324*ae771770SStanislav Sedov	    do
8325*ae771770SStanislav Sedov	      func_to_tool_file "$obj"
8326*ae771770SStanislav Sedov	      $ECHO "$func_to_tool_file_result" >> $output
8327*ae771770SStanislav Sedov	    done
8328*ae771770SStanislav Sedov	    echo ')' >> $output
8329*ae771770SStanislav Sedov	    func_append delfiles " $output"
8330*ae771770SStanislav Sedov	    func_to_tool_file "$output"
8331*ae771770SStanislav Sedov	    output=$func_to_tool_file_result
8332*ae771770SStanislav Sedov	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
8333*ae771770SStanislav Sedov	    output=${output_objdir}/${output_la}.lnk
8334*ae771770SStanislav Sedov	    func_verbose "creating linker input file list: $output"
8335*ae771770SStanislav Sedov	    : > $output
8336*ae771770SStanislav Sedov	    set x $save_libobjs
8337*ae771770SStanislav Sedov	    shift
8338*ae771770SStanislav Sedov	    firstobj=
8339*ae771770SStanislav Sedov	    if test "$compiler_needs_object" = yes; then
8340*ae771770SStanislav Sedov	      firstobj="$1 "
8341*ae771770SStanislav Sedov	      shift
8342*ae771770SStanislav Sedov	    fi
8343*ae771770SStanislav Sedov	    for obj
8344*ae771770SStanislav Sedov	    do
8345*ae771770SStanislav Sedov	      func_to_tool_file "$obj"
8346*ae771770SStanislav Sedov	      $ECHO "$func_to_tool_file_result" >> $output
8347*ae771770SStanislav Sedov	    done
8348*ae771770SStanislav Sedov	    func_append delfiles " $output"
8349*ae771770SStanislav Sedov	    func_to_tool_file "$output"
8350*ae771770SStanislav Sedov	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
8351*ae771770SStanislav Sedov	  else
8352*ae771770SStanislav Sedov	    if test -n "$save_libobjs"; then
8353*ae771770SStanislav Sedov	      func_verbose "creating reloadable object files..."
8354c19800e8SDoug Rabson	      output=$output_objdir/$output_la-${k}.$objext
8355*ae771770SStanislav Sedov	      eval test_cmds=\"$reload_cmds\"
8356*ae771770SStanislav Sedov	      func_len " $test_cmds"
8357*ae771770SStanislav Sedov	      len0=$func_len_result
8358*ae771770SStanislav Sedov	      len=$len0
8359*ae771770SStanislav Sedov
83601c43270aSJacques Vidrine	      # Loop over the list of objects to be linked.
83611c43270aSJacques Vidrine	      for obj in $save_libobjs
83621c43270aSJacques Vidrine	      do
8363*ae771770SStanislav Sedov		func_len " $obj"
8364*ae771770SStanislav Sedov		func_arith $len + $func_len_result
8365*ae771770SStanislav Sedov		len=$func_arith_result
83661c43270aSJacques Vidrine		if test "X$objlist" = X ||
8367*ae771770SStanislav Sedov		   test "$len" -lt "$max_cmd_len"; then
8368*ae771770SStanislav Sedov		  func_append objlist " $obj"
83691c43270aSJacques Vidrine		else
83701c43270aSJacques Vidrine		  # The command $test_cmds is almost too long, add a
83711c43270aSJacques Vidrine		  # command to the queue.
83721c43270aSJacques Vidrine		  if test "$k" -eq 1 ; then
83731c43270aSJacques Vidrine		    # The first file doesn't have a previous command to add.
8374*ae771770SStanislav Sedov		    reload_objs=$objlist
8375*ae771770SStanislav Sedov		    eval concat_cmds=\"$reload_cmds\"
83761c43270aSJacques Vidrine		  else
83771c43270aSJacques Vidrine		    # All subsequent reloadable object files will link in
83781c43270aSJacques Vidrine		    # the last one created.
8379*ae771770SStanislav Sedov		    reload_objs="$objlist $last_robj"
8380*ae771770SStanislav Sedov		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
83811c43270aSJacques Vidrine		  fi
8382c19800e8SDoug Rabson		  last_robj=$output_objdir/$output_la-${k}.$objext
8383*ae771770SStanislav Sedov		  func_arith $k + 1
8384*ae771770SStanislav Sedov		  k=$func_arith_result
8385c19800e8SDoug Rabson		  output=$output_objdir/$output_la-${k}.$objext
8386*ae771770SStanislav Sedov		  objlist=" $obj"
8387*ae771770SStanislav Sedov		  func_len " $last_robj"
8388*ae771770SStanislav Sedov		  func_arith $len0 + $func_len_result
8389*ae771770SStanislav Sedov		  len=$func_arith_result
83901c43270aSJacques Vidrine		fi
83911c43270aSJacques Vidrine	      done
83921c43270aSJacques Vidrine	      # Handle the remaining objects by creating one last
83931c43270aSJacques Vidrine	      # reloadable object file.  All subsequent reloadable object
83941c43270aSJacques Vidrine	      # files will link in the last one created.
83951c43270aSJacques Vidrine	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8396*ae771770SStanislav Sedov	      reload_objs="$objlist $last_robj"
8397*ae771770SStanislav Sedov	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
8398*ae771770SStanislav Sedov	      if test -n "$last_robj"; then
8399*ae771770SStanislav Sedov	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
8400*ae771770SStanislav Sedov	      fi
8401*ae771770SStanislav Sedov	      func_append delfiles " $output"
84021c43270aSJacques Vidrine
8403*ae771770SStanislav Sedov	    else
8404*ae771770SStanislav Sedov	      output=
84051c43270aSJacques Vidrine	    fi
84061c43270aSJacques Vidrine
8407*ae771770SStanislav Sedov	    if ${skipped_export-false}; then
8408*ae771770SStanislav Sedov	      func_verbose "generating symbol list for \`$libname.la'"
8409*ae771770SStanislav Sedov	      export_symbols="$output_objdir/$libname.exp"
8410*ae771770SStanislav Sedov	      $opt_dry_run || $RM $export_symbols
8411*ae771770SStanislav Sedov	      libobjs=$output
8412*ae771770SStanislav Sedov	      # Append the command to create the export file.
8413*ae771770SStanislav Sedov	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8414*ae771770SStanislav Sedov	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
8415*ae771770SStanislav Sedov	      if test -n "$last_robj"; then
8416*ae771770SStanislav Sedov		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
8417*ae771770SStanislav Sedov	      fi
8418*ae771770SStanislav Sedov	    fi
84191c43270aSJacques Vidrine
8420*ae771770SStanislav Sedov	    test -n "$save_libobjs" &&
8421*ae771770SStanislav Sedov	      func_verbose "creating a temporary reloadable object file: $output"
84221c43270aSJacques Vidrine
84231c43270aSJacques Vidrine	    # Loop through the commands generated above and execute them.
84241c43270aSJacques Vidrine	    save_ifs="$IFS"; IFS='~'
84251c43270aSJacques Vidrine	    for cmd in $concat_cmds; do
84261c43270aSJacques Vidrine	      IFS="$save_ifs"
8427*ae771770SStanislav Sedov	      $opt_silent || {
8428*ae771770SStanislav Sedov		  func_quote_for_expand "$cmd"
8429*ae771770SStanislav Sedov		  eval "func_echo $func_quote_for_expand_result"
8430*ae771770SStanislav Sedov	      }
8431*ae771770SStanislav Sedov	      $opt_dry_run || eval "$cmd" || {
8432*ae771770SStanislav Sedov		lt_exit=$?
8433*ae771770SStanislav Sedov
8434*ae771770SStanislav Sedov		# Restore the uninstalled library and exit
8435*ae771770SStanislav Sedov		if test "$opt_mode" = relink; then
8436*ae771770SStanislav Sedov		  ( cd "$output_objdir" && \
8437*ae771770SStanislav Sedov		    $RM "${realname}T" && \
8438*ae771770SStanislav Sedov		    $MV "${realname}U" "$realname" )
8439*ae771770SStanislav Sedov		fi
8440*ae771770SStanislav Sedov
8441*ae771770SStanislav Sedov		exit $lt_exit
8442*ae771770SStanislav Sedov	      }
84431c43270aSJacques Vidrine	    done
84441c43270aSJacques Vidrine	    IFS="$save_ifs"
84451c43270aSJacques Vidrine
8446*ae771770SStanislav Sedov	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
8447*ae771770SStanislav Sedov	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8448*ae771770SStanislav Sedov	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8449*ae771770SStanislav Sedov	    fi
8450*ae771770SStanislav Sedov	  fi
8451*ae771770SStanislav Sedov
8452*ae771770SStanislav Sedov          if ${skipped_export-false}; then
8453*ae771770SStanislav Sedov	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
8454*ae771770SStanislav Sedov	      tmp_export_symbols="$export_symbols"
8455*ae771770SStanislav Sedov	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
8456*ae771770SStanislav Sedov	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8457*ae771770SStanislav Sedov	    fi
8458*ae771770SStanislav Sedov
8459*ae771770SStanislav Sedov	    if test -n "$orig_export_symbols"; then
8460*ae771770SStanislav Sedov	      # The given exports_symbols file has to be filtered, so filter it.
8461*ae771770SStanislav Sedov	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8462*ae771770SStanislav Sedov	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
8463*ae771770SStanislav Sedov	      # 's' commands which not all seds can handle. GNU sed should be fine
8464*ae771770SStanislav Sedov	      # though. Also, the filter scales superlinearly with the number of
8465*ae771770SStanislav Sedov	      # global variables. join(1) would be nice here, but unfortunately
8466*ae771770SStanislav Sedov	      # isn't a blessed tool.
8467*ae771770SStanislav Sedov	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
8468*ae771770SStanislav Sedov	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8469*ae771770SStanislav Sedov	      export_symbols=$output_objdir/$libname.def
8470*ae771770SStanislav Sedov	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8471*ae771770SStanislav Sedov	    fi
8472*ae771770SStanislav Sedov	  fi
8473*ae771770SStanislav Sedov
84741c43270aSJacques Vidrine	  libobjs=$output
84751c43270aSJacques Vidrine	  # Restore the value of output.
84761c43270aSJacques Vidrine	  output=$save_output
84771c43270aSJacques Vidrine
84781c43270aSJacques Vidrine	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
84791c43270aSJacques Vidrine	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8480*ae771770SStanislav Sedov	    test "X$libobjs" = "X " && libobjs=
84811c43270aSJacques Vidrine	  fi
84821c43270aSJacques Vidrine	  # Expand the library linking commands again to reset the
84831c43270aSJacques Vidrine	  # value of $libobjs for piecewise linking.
84841c43270aSJacques Vidrine
84851c43270aSJacques Vidrine	  # Do each of the archive commands.
84861c43270aSJacques Vidrine	  if test "$module" = yes && test -n "$module_cmds" ; then
84871c43270aSJacques Vidrine	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
84881c43270aSJacques Vidrine	      cmds=$module_expsym_cmds
84891c43270aSJacques Vidrine	    else
84901c43270aSJacques Vidrine	      cmds=$module_cmds
84911c43270aSJacques Vidrine	    fi
84921c43270aSJacques Vidrine	  else
84931c43270aSJacques Vidrine	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
84941c43270aSJacques Vidrine	      cmds=$archive_expsym_cmds
84951c43270aSJacques Vidrine	    else
84961c43270aSJacques Vidrine	      cmds=$archive_cmds
84971c43270aSJacques Vidrine	    fi
84981c43270aSJacques Vidrine	  fi
8499b528cefcSMark Murray	fi
8500*ae771770SStanislav Sedov
8501*ae771770SStanislav Sedov	if test -n "$delfiles"; then
8502*ae771770SStanislav Sedov	  # Append the command to remove temporary files to $cmds.
8503*ae771770SStanislav Sedov	  eval cmds=\"\$cmds~\$RM $delfiles\"
8504*ae771770SStanislav Sedov	fi
8505*ae771770SStanislav Sedov
8506*ae771770SStanislav Sedov	# Add any objects from preloaded convenience libraries
8507*ae771770SStanislav Sedov	if test -n "$dlprefiles"; then
8508*ae771770SStanislav Sedov	  gentop="$output_objdir/${outputname}x"
8509*ae771770SStanislav Sedov	  func_append generated " $gentop"
8510*ae771770SStanislav Sedov
8511*ae771770SStanislav Sedov	  func_extract_archives $gentop $dlprefiles
8512*ae771770SStanislav Sedov	  func_append libobjs " $func_extract_archives_result"
8513*ae771770SStanislav Sedov	  test "X$libobjs" = "X " && libobjs=
8514*ae771770SStanislav Sedov	fi
8515*ae771770SStanislav Sedov
85168373020dSJacques Vidrine	save_ifs="$IFS"; IFS='~'
8517b528cefcSMark Murray	for cmd in $cmds; do
8518b528cefcSMark Murray	  IFS="$save_ifs"
85191c43270aSJacques Vidrine	  eval cmd=\"$cmd\"
8520*ae771770SStanislav Sedov	  $opt_silent || {
8521*ae771770SStanislav Sedov	    func_quote_for_expand "$cmd"
8522*ae771770SStanislav Sedov	    eval "func_echo $func_quote_for_expand_result"
8523*ae771770SStanislav Sedov	  }
8524*ae771770SStanislav Sedov	  $opt_dry_run || eval "$cmd" || {
8525c19800e8SDoug Rabson	    lt_exit=$?
8526c19800e8SDoug Rabson
8527c19800e8SDoug Rabson	    # Restore the uninstalled library and exit
8528*ae771770SStanislav Sedov	    if test "$opt_mode" = relink; then
8529*ae771770SStanislav Sedov	      ( cd "$output_objdir" && \
8530*ae771770SStanislav Sedov	        $RM "${realname}T" && \
8531*ae771770SStanislav Sedov		$MV "${realname}U" "$realname" )
8532c19800e8SDoug Rabson	    fi
8533c19800e8SDoug Rabson
8534c19800e8SDoug Rabson	    exit $lt_exit
8535c19800e8SDoug Rabson	  }
8536b528cefcSMark Murray	done
8537b528cefcSMark Murray	IFS="$save_ifs"
8538b528cefcSMark Murray
85395e9cd1aeSAssar Westerlund	# Restore the uninstalled library and exit
8540*ae771770SStanislav Sedov	if test "$opt_mode" = relink; then
8541*ae771770SStanislav Sedov	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
8542c19800e8SDoug Rabson
8543c19800e8SDoug Rabson	  if test -n "$convenience"; then
8544c19800e8SDoug Rabson	    if test -z "$whole_archive_flag_spec"; then
8545*ae771770SStanislav Sedov	      func_show_eval '${RM}r "$gentop"'
8546c19800e8SDoug Rabson	    fi
8547c19800e8SDoug Rabson	  fi
8548c19800e8SDoug Rabson
8549c19800e8SDoug Rabson	  exit $EXIT_SUCCESS
85505e9cd1aeSAssar Westerlund	fi
85515e9cd1aeSAssar Westerlund
8552b528cefcSMark Murray	# Create links to the real library.
8553b528cefcSMark Murray	for linkname in $linknames; do
8554b528cefcSMark Murray	  if test "$realname" != "$linkname"; then
8555*ae771770SStanislav Sedov	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
8556b528cefcSMark Murray	  fi
8557b528cefcSMark Murray	done
8558b528cefcSMark Murray
8559b528cefcSMark Murray	# If -module or -export-dynamic was specified, set the dlname.
8560b528cefcSMark Murray	if test "$module" = yes || test "$export_dynamic" = yes; then
8561b528cefcSMark Murray	  # On all known operating systems, these are identical.
8562b528cefcSMark Murray	  dlname="$soname"
8563b528cefcSMark Murray	fi
8564b528cefcSMark Murray      fi
8565b528cefcSMark Murray      ;;
8566b528cefcSMark Murray
85675e9cd1aeSAssar Westerlund    obj)
85685e9cd1aeSAssar Westerlund      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
8569*ae771770SStanislav Sedov	func_warning "\`-dlopen' is ignored for objects"
8570b528cefcSMark Murray      fi
8571b528cefcSMark Murray
8572*ae771770SStanislav Sedov      case " $deplibs" in
8573*ae771770SStanislav Sedov      *\ -l* | *\ -L*)
8574*ae771770SStanislav Sedov	func_warning "\`-l' and \`-L' are ignored for objects" ;;
8575*ae771770SStanislav Sedov      esac
8576b528cefcSMark Murray
8577*ae771770SStanislav Sedov      test -n "$rpath" && \
8578*ae771770SStanislav Sedov	func_warning "\`-rpath' is ignored for objects"
85795e9cd1aeSAssar Westerlund
8580*ae771770SStanislav Sedov      test -n "$xrpath" && \
8581*ae771770SStanislav Sedov	func_warning "\`-R' is ignored for objects"
8582b528cefcSMark Murray
8583*ae771770SStanislav Sedov      test -n "$vinfo" && \
8584*ae771770SStanislav Sedov	func_warning "\`-version-info' is ignored for objects"
8585*ae771770SStanislav Sedov
8586*ae771770SStanislav Sedov      test -n "$release" && \
8587*ae771770SStanislav Sedov	func_warning "\`-release' is ignored for objects"
8588b528cefcSMark Murray
85894137ff4cSJacques Vidrine      case $output in
8590b528cefcSMark Murray      *.lo)
8591*ae771770SStanislav Sedov	test -n "$objs$old_deplibs" && \
8592*ae771770SStanislav Sedov	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
8593*ae771770SStanislav Sedov
8594*ae771770SStanislav Sedov	libobj=$output
8595*ae771770SStanislav Sedov	func_lo2o "$libobj"
8596*ae771770SStanislav Sedov	obj=$func_lo2o_result
8597b528cefcSMark Murray	;;
8598b528cefcSMark Murray      *)
8599b528cefcSMark Murray	libobj=
8600b528cefcSMark Murray	obj="$output"
8601b528cefcSMark Murray	;;
8602b528cefcSMark Murray      esac
8603b528cefcSMark Murray
8604b528cefcSMark Murray      # Delete the old objects.
8605*ae771770SStanislav Sedov      $opt_dry_run || $RM $obj $libobj
8606b528cefcSMark Murray
86075e9cd1aeSAssar Westerlund      # Objects from convenience libraries.  This assumes
86085e9cd1aeSAssar Westerlund      # single-version convenience libraries.  Whenever we create
86095e9cd1aeSAssar Westerlund      # different ones for PIC/non-PIC, this we'll have to duplicate
86105e9cd1aeSAssar Westerlund      # the extraction.
86115e9cd1aeSAssar Westerlund      reload_conv_objs=
86125e9cd1aeSAssar Westerlund      gentop=
86135e9cd1aeSAssar Westerlund      # reload_cmds runs $LD directly, so let us get rid of
8614*ae771770SStanislav Sedov      # -Wl from whole_archive_flag_spec and hope we can get by with
8615*ae771770SStanislav Sedov      # turning comma into space..
86165e9cd1aeSAssar Westerlund      wl=
86175e9cd1aeSAssar Westerlund
86185e9cd1aeSAssar Westerlund      if test -n "$convenience"; then
86195e9cd1aeSAssar Westerlund	if test -n "$whole_archive_flag_spec"; then
8620*ae771770SStanislav Sedov	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
8621*ae771770SStanislav Sedov	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
86225e9cd1aeSAssar Westerlund	else
86235e9cd1aeSAssar Westerlund	  gentop="$output_objdir/${obj}x"
8624*ae771770SStanislav Sedov	  func_append generated " $gentop"
86255e9cd1aeSAssar Westerlund
8626c19800e8SDoug Rabson	  func_extract_archives $gentop $convenience
8627c19800e8SDoug Rabson	  reload_conv_objs="$reload_objs $func_extract_archives_result"
86285e9cd1aeSAssar Westerlund	fi
86295e9cd1aeSAssar Westerlund      fi
86305e9cd1aeSAssar Westerlund
8631*ae771770SStanislav Sedov      # If we're not building shared, we need to use non_pic_objs
8632*ae771770SStanislav Sedov      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
8633*ae771770SStanislav Sedov
8634b528cefcSMark Murray      # Create the old-style object.
8635*ae771770SStanislav Sedov      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
8636b528cefcSMark Murray
8637b528cefcSMark Murray      output="$obj"
8638*ae771770SStanislav Sedov      func_execute_cmds "$reload_cmds" 'exit $?'
8639b528cefcSMark Murray
8640b528cefcSMark Murray      # Exit if we aren't doing a library object file.
86415e9cd1aeSAssar Westerlund      if test -z "$libobj"; then
86425e9cd1aeSAssar Westerlund	if test -n "$gentop"; then
8643*ae771770SStanislav Sedov	  func_show_eval '${RM}r "$gentop"'
86445e9cd1aeSAssar Westerlund	fi
86455e9cd1aeSAssar Westerlund
8646c19800e8SDoug Rabson	exit $EXIT_SUCCESS
86475e9cd1aeSAssar Westerlund      fi
8648b528cefcSMark Murray
8649b528cefcSMark Murray      if test "$build_libtool_libs" != yes; then
86505e9cd1aeSAssar Westerlund	if test -n "$gentop"; then
8651*ae771770SStanislav Sedov	  func_show_eval '${RM}r "$gentop"'
86525e9cd1aeSAssar Westerlund	fi
86535e9cd1aeSAssar Westerlund
8654b528cefcSMark Murray	# Create an invalid libtool object if no PIC, so that we don't
8655b528cefcSMark Murray	# accidentally link it into a program.
86561c43270aSJacques Vidrine	# $show "echo timestamp > $libobj"
8657*ae771770SStanislav Sedov	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
8658c19800e8SDoug Rabson	exit $EXIT_SUCCESS
8659b528cefcSMark Murray      fi
8660b528cefcSMark Murray
86615e9cd1aeSAssar Westerlund      if test -n "$pic_flag" || test "$pic_mode" != default; then
8662b528cefcSMark Murray	# Only do commands if we really have different PIC objects.
86635e9cd1aeSAssar Westerlund	reload_objs="$libobjs $reload_conv_objs"
8664b528cefcSMark Murray	output="$libobj"
8665*ae771770SStanislav Sedov	func_execute_cmds "$reload_cmds" 'exit $?'
86665e9cd1aeSAssar Westerlund      fi
86675e9cd1aeSAssar Westerlund
86685e9cd1aeSAssar Westerlund      if test -n "$gentop"; then
8669*ae771770SStanislav Sedov	func_show_eval '${RM}r "$gentop"'
8670b528cefcSMark Murray      fi
8671b528cefcSMark Murray
8672c19800e8SDoug Rabson      exit $EXIT_SUCCESS
8673b528cefcSMark Murray      ;;
8674b528cefcSMark Murray
86755e9cd1aeSAssar Westerlund    prog)
86764137ff4cSJacques Vidrine      case $host in
8677*ae771770SStanislav Sedov	*cygwin*) func_stripname '' '.exe' "$output"
8678*ae771770SStanislav Sedov	          output=$func_stripname_result.exe;;
86794137ff4cSJacques Vidrine      esac
8680*ae771770SStanislav Sedov      test -n "$vinfo" && \
8681*ae771770SStanislav Sedov	func_warning "\`-version-info' is ignored for programs"
8682b528cefcSMark Murray
8683*ae771770SStanislav Sedov      test -n "$release" && \
8684*ae771770SStanislav Sedov	func_warning "\`-release' is ignored for programs"
8685b528cefcSMark Murray
8686*ae771770SStanislav Sedov      test "$preload" = yes \
8687*ae771770SStanislav Sedov        && test "$dlopen_support" = unknown \
8688*ae771770SStanislav Sedov	&& test "$dlopen_self" = unknown \
8689*ae771770SStanislav Sedov	&& test "$dlopen_self_static" = unknown && \
8690*ae771770SStanislav Sedov	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
86915e9cd1aeSAssar Westerlund
86924137ff4cSJacques Vidrine      case $host in
86934137ff4cSJacques Vidrine      *-*-rhapsody* | *-*-darwin1.[012])
86944137ff4cSJacques Vidrine	# On Rhapsody replace the C library is the System framework
8695*ae771770SStanislav Sedov	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
8696*ae771770SStanislav Sedov	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
86974137ff4cSJacques Vidrine	;;
86984137ff4cSJacques Vidrine      esac
86994137ff4cSJacques Vidrine
87001c43270aSJacques Vidrine      case $host in
8701*ae771770SStanislav Sedov      *-*-darwin*)
87021c43270aSJacques Vidrine	# Don't allow lazy linking, it breaks C++ global constructors
8703*ae771770SStanislav Sedov	# But is supposedly fixed on 10.4 or later (yay!).
87041c43270aSJacques Vidrine	if test "$tagname" = CXX ; then
8705*ae771770SStanislav Sedov	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
8706*ae771770SStanislav Sedov	    10.[0123])
8707*ae771770SStanislav Sedov	      func_append compile_command " ${wl}-bind_at_load"
8708*ae771770SStanislav Sedov	      func_append finalize_command " ${wl}-bind_at_load"
8709*ae771770SStanislav Sedov	    ;;
8710*ae771770SStanislav Sedov	  esac
87111c43270aSJacques Vidrine	fi
8712*ae771770SStanislav Sedov	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
8713*ae771770SStanislav Sedov	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8714*ae771770SStanislav Sedov	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
87151c43270aSJacques Vidrine	;;
87161c43270aSJacques Vidrine      esac
87171c43270aSJacques Vidrine
8718c19800e8SDoug Rabson
8719c19800e8SDoug Rabson      # move library search paths that coincide with paths to not yet
8720c19800e8SDoug Rabson      # installed libraries to the beginning of the library search list
8721c19800e8SDoug Rabson      new_libs=
8722c19800e8SDoug Rabson      for path in $notinst_path; do
8723c19800e8SDoug Rabson	case " $new_libs " in
8724c19800e8SDoug Rabson	*" -L$path/$objdir "*) ;;
8725c19800e8SDoug Rabson	*)
8726c19800e8SDoug Rabson	  case " $compile_deplibs " in
8727c19800e8SDoug Rabson	  *" -L$path/$objdir "*)
8728*ae771770SStanislav Sedov	    func_append new_libs " -L$path/$objdir" ;;
8729c19800e8SDoug Rabson	  esac
8730c19800e8SDoug Rabson	  ;;
8731c19800e8SDoug Rabson	esac
8732c19800e8SDoug Rabson      done
8733c19800e8SDoug Rabson      for deplib in $compile_deplibs; do
8734c19800e8SDoug Rabson	case $deplib in
8735c19800e8SDoug Rabson	-L*)
8736c19800e8SDoug Rabson	  case " $new_libs " in
8737c19800e8SDoug Rabson	  *" $deplib "*) ;;
8738*ae771770SStanislav Sedov	  *) func_append new_libs " $deplib" ;;
8739c19800e8SDoug Rabson	  esac
8740c19800e8SDoug Rabson	  ;;
8741*ae771770SStanislav Sedov	*) func_append new_libs " $deplib" ;;
8742c19800e8SDoug Rabson	esac
8743c19800e8SDoug Rabson      done
8744c19800e8SDoug Rabson      compile_deplibs="$new_libs"
8745c19800e8SDoug Rabson
8746c19800e8SDoug Rabson
8747*ae771770SStanislav Sedov      func_append compile_command " $compile_deplibs"
8748*ae771770SStanislav Sedov      func_append finalize_command " $finalize_deplibs"
87495e9cd1aeSAssar Westerlund
87505e9cd1aeSAssar Westerlund      if test -n "$rpath$xrpath"; then
8751b528cefcSMark Murray	# If the user specified any rpath flags, then add them.
87525e9cd1aeSAssar Westerlund	for libdir in $rpath $xrpath; do
87535e9cd1aeSAssar Westerlund	  # This is the magic to use -rpath.
87545e9cd1aeSAssar Westerlund	  case "$finalize_rpath " in
87555e9cd1aeSAssar Westerlund	  *" $libdir "*) ;;
8756*ae771770SStanislav Sedov	  *) func_append finalize_rpath " $libdir" ;;
87575e9cd1aeSAssar Westerlund	  esac
87585e9cd1aeSAssar Westerlund	done
87595e9cd1aeSAssar Westerlund      fi
87605e9cd1aeSAssar Westerlund
87615e9cd1aeSAssar Westerlund      # Now hardcode the library paths
87625e9cd1aeSAssar Westerlund      rpath=
87635e9cd1aeSAssar Westerlund      hardcode_libdirs=
87645e9cd1aeSAssar Westerlund      for libdir in $compile_rpath $finalize_rpath; do
8765b528cefcSMark Murray	if test -n "$hardcode_libdir_flag_spec"; then
8766b528cefcSMark Murray	  if test -n "$hardcode_libdir_separator"; then
8767b528cefcSMark Murray	    if test -z "$hardcode_libdirs"; then
8768b528cefcSMark Murray	      hardcode_libdirs="$libdir"
8769b528cefcSMark Murray	    else
8770b528cefcSMark Murray	      # Just accumulate the unique libdirs.
87714137ff4cSJacques Vidrine	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8772b528cefcSMark Murray	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8773b528cefcSMark Murray		;;
8774b528cefcSMark Murray	      *)
8775*ae771770SStanislav Sedov		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8776b528cefcSMark Murray		;;
8777b528cefcSMark Murray	      esac
8778b528cefcSMark Murray	    fi
87795e9cd1aeSAssar Westerlund	  else
8780b528cefcSMark Murray	    eval flag=\"$hardcode_libdir_flag_spec\"
8781*ae771770SStanislav Sedov	    func_append rpath " $flag"
8782b528cefcSMark Murray	  fi
8783b528cefcSMark Murray	elif test -n "$runpath_var"; then
8784b528cefcSMark Murray	  case "$perm_rpath " in
8785b528cefcSMark Murray	  *" $libdir "*) ;;
8786*ae771770SStanislav Sedov	  *) func_append perm_rpath " $libdir" ;;
8787b528cefcSMark Murray	  esac
8788b528cefcSMark Murray	fi
87894137ff4cSJacques Vidrine	case $host in
8790*ae771770SStanislav Sedov	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
8791*ae771770SStanislav Sedov	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
87924137ff4cSJacques Vidrine	  case :$dllsearchpath: in
87935e9cd1aeSAssar Westerlund	  *":$libdir:"*) ;;
8794*ae771770SStanislav Sedov	  ::) dllsearchpath=$libdir;;
8795*ae771770SStanislav Sedov	  *) func_append dllsearchpath ":$libdir";;
87965e9cd1aeSAssar Westerlund	  esac
8797c19800e8SDoug Rabson	  case :$dllsearchpath: in
8798c19800e8SDoug Rabson	  *":$testbindir:"*) ;;
8799*ae771770SStanislav Sedov	  ::) dllsearchpath=$testbindir;;
8800*ae771770SStanislav Sedov	  *) func_append dllsearchpath ":$testbindir";;
8801c19800e8SDoug Rabson	  esac
88025e9cd1aeSAssar Westerlund	  ;;
88035e9cd1aeSAssar Westerlund	esac
8804b528cefcSMark Murray      done
88055e9cd1aeSAssar Westerlund      # Substitute the hardcoded libdirs into the rpath.
88065e9cd1aeSAssar Westerlund      if test -n "$hardcode_libdir_separator" &&
88075e9cd1aeSAssar Westerlund	 test -n "$hardcode_libdirs"; then
88085e9cd1aeSAssar Westerlund	libdir="$hardcode_libdirs"
88095e9cd1aeSAssar Westerlund	eval rpath=\" $hardcode_libdir_flag_spec\"
8810b528cefcSMark Murray      fi
88115e9cd1aeSAssar Westerlund      compile_rpath="$rpath"
8812b528cefcSMark Murray
88135e9cd1aeSAssar Westerlund      rpath=
88145e9cd1aeSAssar Westerlund      hardcode_libdirs=
88155e9cd1aeSAssar Westerlund      for libdir in $finalize_rpath; do
88165e9cd1aeSAssar Westerlund	if test -n "$hardcode_libdir_flag_spec"; then
8817b528cefcSMark Murray	  if test -n "$hardcode_libdir_separator"; then
88185e9cd1aeSAssar Westerlund	    if test -z "$hardcode_libdirs"; then
88195e9cd1aeSAssar Westerlund	      hardcode_libdirs="$libdir"
8820b528cefcSMark Murray	    else
88215e9cd1aeSAssar Westerlund	      # Just accumulate the unique libdirs.
88224137ff4cSJacques Vidrine	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
88235e9cd1aeSAssar Westerlund	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
88245e9cd1aeSAssar Westerlund		;;
88255e9cd1aeSAssar Westerlund	      *)
8826*ae771770SStanislav Sedov		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
88275e9cd1aeSAssar Westerlund		;;
88285e9cd1aeSAssar Westerlund	      esac
8829b528cefcSMark Murray	    fi
88305e9cd1aeSAssar Westerlund	  else
88315e9cd1aeSAssar Westerlund	    eval flag=\"$hardcode_libdir_flag_spec\"
8832*ae771770SStanislav Sedov	    func_append rpath " $flag"
88335e9cd1aeSAssar Westerlund	  fi
88345e9cd1aeSAssar Westerlund	elif test -n "$runpath_var"; then
88355e9cd1aeSAssar Westerlund	  case "$finalize_perm_rpath " in
88365e9cd1aeSAssar Westerlund	  *" $libdir "*) ;;
8837*ae771770SStanislav Sedov	  *) func_append finalize_perm_rpath " $libdir" ;;
88385e9cd1aeSAssar Westerlund	  esac
88395e9cd1aeSAssar Westerlund	fi
88405e9cd1aeSAssar Westerlund      done
88415e9cd1aeSAssar Westerlund      # Substitute the hardcoded libdirs into the rpath.
88425e9cd1aeSAssar Westerlund      if test -n "$hardcode_libdir_separator" &&
88435e9cd1aeSAssar Westerlund	 test -n "$hardcode_libdirs"; then
88445e9cd1aeSAssar Westerlund	libdir="$hardcode_libdirs"
88455e9cd1aeSAssar Westerlund	eval rpath=\" $hardcode_libdir_flag_spec\"
88465e9cd1aeSAssar Westerlund      fi
88475e9cd1aeSAssar Westerlund      finalize_rpath="$rpath"
8848b528cefcSMark Murray
8849b528cefcSMark Murray      if test -n "$libobjs" && test "$build_old_libs" = yes; then
8850b528cefcSMark Murray	# Transform all the library objects into standard objects.
8851*ae771770SStanislav Sedov	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8852*ae771770SStanislav Sedov	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8853b528cefcSMark Murray      fi
8854b528cefcSMark Murray
8855*ae771770SStanislav Sedov      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
8856*ae771770SStanislav Sedov
8857*ae771770SStanislav Sedov      # template prelinking step
8858*ae771770SStanislav Sedov      if test -n "$prelink_cmds"; then
8859*ae771770SStanislav Sedov	func_execute_cmds "$prelink_cmds" 'exit $?'
8860b528cefcSMark Murray      fi
8861b528cefcSMark Murray
8862*ae771770SStanislav Sedov      wrappers_required=yes
8863c19800e8SDoug Rabson      case $host in
8864*ae771770SStanislav Sedov      *cegcc* | *mingw32ce*)
8865*ae771770SStanislav Sedov        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
8866*ae771770SStanislav Sedov        wrappers_required=no
8867c19800e8SDoug Rabson        ;;
8868c19800e8SDoug Rabson      *cygwin* | *mingw* )
8869*ae771770SStanislav Sedov        if test "$build_libtool_libs" != yes; then
8870*ae771770SStanislav Sedov          wrappers_required=no
8871c19800e8SDoug Rabson        fi
8872c19800e8SDoug Rabson        ;;
8873c19800e8SDoug Rabson      *)
88741c43270aSJacques Vidrine        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
8875*ae771770SStanislav Sedov          wrappers_required=no
8876*ae771770SStanislav Sedov        fi
8877*ae771770SStanislav Sedov        ;;
8878*ae771770SStanislav Sedov      esac
8879*ae771770SStanislav Sedov      if test "$wrappers_required" = no; then
8880b528cefcSMark Murray	# Replace the output file specification.
8881*ae771770SStanislav Sedov	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
88825e9cd1aeSAssar Westerlund	link_command="$compile_command$compile_rpath"
8883b528cefcSMark Murray
8884b528cefcSMark Murray	# We have no uninstalled library dependencies, so finalize right now.
8885*ae771770SStanislav Sedov	exit_status=0
8886*ae771770SStanislav Sedov	func_show_eval "$link_command" 'exit_status=$?'
8887*ae771770SStanislav Sedov
8888*ae771770SStanislav Sedov	if test -n "$postlink_cmds"; then
8889*ae771770SStanislav Sedov	  func_to_tool_file "$output"
8890*ae771770SStanislav Sedov	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8891*ae771770SStanislav Sedov	  func_execute_cmds "$postlink_cmds" 'exit $?'
8892*ae771770SStanislav Sedov	fi
88935e9cd1aeSAssar Westerlund
88945e9cd1aeSAssar Westerlund	# Delete the generated files.
8895*ae771770SStanislav Sedov	if test -f "$output_objdir/${outputname}S.${objext}"; then
8896*ae771770SStanislav Sedov	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
8897b528cefcSMark Murray	fi
88985e9cd1aeSAssar Westerlund
8899c19800e8SDoug Rabson	exit $exit_status
8900b528cefcSMark Murray      fi
8901b528cefcSMark Murray
89025e9cd1aeSAssar Westerlund      if test -n "$compile_shlibpath$finalize_shlibpath"; then
89035e9cd1aeSAssar Westerlund	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
8904b528cefcSMark Murray      fi
8905b528cefcSMark Murray      if test -n "$finalize_shlibpath"; then
8906b528cefcSMark Murray	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
8907b528cefcSMark Murray      fi
8908b528cefcSMark Murray
89095e9cd1aeSAssar Westerlund      compile_var=
89105e9cd1aeSAssar Westerlund      finalize_var=
89115e9cd1aeSAssar Westerlund      if test -n "$runpath_var"; then
89125e9cd1aeSAssar Westerlund	if test -n "$perm_rpath"; then
8913b528cefcSMark Murray	  # We should set the runpath_var.
8914b528cefcSMark Murray	  rpath=
8915b528cefcSMark Murray	  for dir in $perm_rpath; do
8916*ae771770SStanislav Sedov	    func_append rpath "$dir:"
8917b528cefcSMark Murray	  done
89185e9cd1aeSAssar Westerlund	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
89195e9cd1aeSAssar Westerlund	fi
89205e9cd1aeSAssar Westerlund	if test -n "$finalize_perm_rpath"; then
89215e9cd1aeSAssar Westerlund	  # We should set the runpath_var.
89225e9cd1aeSAssar Westerlund	  rpath=
89235e9cd1aeSAssar Westerlund	  for dir in $finalize_perm_rpath; do
8924*ae771770SStanislav Sedov	    func_append rpath "$dir:"
89255e9cd1aeSAssar Westerlund	  done
89265e9cd1aeSAssar Westerlund	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
89275e9cd1aeSAssar Westerlund	fi
8928b528cefcSMark Murray      fi
8929b528cefcSMark Murray
89305e9cd1aeSAssar Westerlund      if test "$no_install" = yes; then
89315e9cd1aeSAssar Westerlund	# We don't need to create a wrapper script.
89325e9cd1aeSAssar Westerlund	link_command="$compile_var$compile_command$compile_rpath"
89335e9cd1aeSAssar Westerlund	# Replace the output file specification.
8934*ae771770SStanislav Sedov	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
89355e9cd1aeSAssar Westerlund	# Delete the old output file.
8936*ae771770SStanislav Sedov	$opt_dry_run || $RM $output
89375e9cd1aeSAssar Westerlund	# Link the executable and exit
8938*ae771770SStanislav Sedov	func_show_eval "$link_command" 'exit $?'
8939*ae771770SStanislav Sedov
8940*ae771770SStanislav Sedov	if test -n "$postlink_cmds"; then
8941*ae771770SStanislav Sedov	  func_to_tool_file "$output"
8942*ae771770SStanislav Sedov	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8943*ae771770SStanislav Sedov	  func_execute_cmds "$postlink_cmds" 'exit $?'
8944*ae771770SStanislav Sedov	fi
8945*ae771770SStanislav Sedov
8946c19800e8SDoug Rabson	exit $EXIT_SUCCESS
89475e9cd1aeSAssar Westerlund      fi
89485e9cd1aeSAssar Westerlund
89494137ff4cSJacques Vidrine      if test "$hardcode_action" = relink; then
89505e9cd1aeSAssar Westerlund	# Fast installation is not supported
89515e9cd1aeSAssar Westerlund	link_command="$compile_var$compile_command$compile_rpath"
89525e9cd1aeSAssar Westerlund	relink_command="$finalize_var$finalize_command$finalize_rpath"
89535e9cd1aeSAssar Westerlund
8954*ae771770SStanislav Sedov	func_warning "this platform does not like uninstalled shared libraries"
8955*ae771770SStanislav Sedov	func_warning "\`$output' will be relinked during installation"
89565e9cd1aeSAssar Westerlund      else
89575e9cd1aeSAssar Westerlund	if test "$fast_install" != no; then
89585e9cd1aeSAssar Westerlund	  link_command="$finalize_var$compile_command$finalize_rpath"
89595e9cd1aeSAssar Westerlund	  if test "$fast_install" = yes; then
8960*ae771770SStanislav Sedov	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
89615e9cd1aeSAssar Westerlund	  else
89625e9cd1aeSAssar Westerlund	    # fast_install is set to needless
89635e9cd1aeSAssar Westerlund	    relink_command=
89645e9cd1aeSAssar Westerlund	  fi
89655e9cd1aeSAssar Westerlund	else
89665e9cd1aeSAssar Westerlund	  link_command="$compile_var$compile_command$compile_rpath"
89675e9cd1aeSAssar Westerlund	  relink_command="$finalize_var$finalize_command$finalize_rpath"
89685e9cd1aeSAssar Westerlund	fi
8969b528cefcSMark Murray      fi
8970b528cefcSMark Murray
89715e9cd1aeSAssar Westerlund      # Replace the output file specification.
8972*ae771770SStanislav Sedov      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
89735e9cd1aeSAssar Westerlund
89745e9cd1aeSAssar Westerlund      # Delete the old output files.
8975*ae771770SStanislav Sedov      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
89765e9cd1aeSAssar Westerlund
8977*ae771770SStanislav Sedov      func_show_eval "$link_command" 'exit $?'
8978*ae771770SStanislav Sedov
8979*ae771770SStanislav Sedov      if test -n "$postlink_cmds"; then
8980*ae771770SStanislav Sedov	func_to_tool_file "$output_objdir/$outputname"
8981*ae771770SStanislav Sedov	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'`
8982*ae771770SStanislav Sedov	func_execute_cmds "$postlink_cmds" 'exit $?'
8983*ae771770SStanislav Sedov      fi
8984b528cefcSMark Murray
8985b528cefcSMark Murray      # Now create the wrapper script.
8986*ae771770SStanislav Sedov      func_verbose "creating $output"
8987b528cefcSMark Murray
89885e9cd1aeSAssar Westerlund      # Quote the relink command for shipping.
89895e9cd1aeSAssar Westerlund      if test -n "$relink_command"; then
89905e9cd1aeSAssar Westerlund	# Preserve any variables that may affect compiler behavior
89915e9cd1aeSAssar Westerlund	for var in $variables_saved_for_relink; do
89924137ff4cSJacques Vidrine	  if eval test -z \"\${$var+set}\"; then
8993*ae771770SStanislav Sedov	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
89944137ff4cSJacques Vidrine	  elif eval var_value=\$$var; test -z "$var_value"; then
89954137ff4cSJacques Vidrine	    relink_command="$var=; export $var; $relink_command"
89964137ff4cSJacques Vidrine	  else
8997*ae771770SStanislav Sedov	    func_quote_for_eval "$var_value"
8998*ae771770SStanislav Sedov	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
89994137ff4cSJacques Vidrine	  fi
90005e9cd1aeSAssar Westerlund	done
90011c43270aSJacques Vidrine	relink_command="(cd `pwd`; $relink_command)"
9002*ae771770SStanislav Sedov	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
90035e9cd1aeSAssar Westerlund      fi
9004b528cefcSMark Murray
9005*ae771770SStanislav Sedov      # Only actually do things if not in dry run mode.
9006*ae771770SStanislav Sedov      $opt_dry_run || {
90075e9cd1aeSAssar Westerlund	# win32 will think the script is a binary if it has
90085e9cd1aeSAssar Westerlund	# a .exe suffix, so we strip it off here.
90095e9cd1aeSAssar Westerlund	case $output in
9010*ae771770SStanislav Sedov	  *.exe) func_stripname '' '.exe' "$output"
9011*ae771770SStanislav Sedov	         output=$func_stripname_result ;;
90125e9cd1aeSAssar Westerlund	esac
90134137ff4cSJacques Vidrine	# test for cygwin because mv fails w/o .exe extensions
90144137ff4cSJacques Vidrine	case $host in
90151c43270aSJacques Vidrine	  *cygwin*)
90161c43270aSJacques Vidrine	    exeext=.exe
9017*ae771770SStanislav Sedov	    func_stripname '' '.exe' "$outputname"
9018*ae771770SStanislav Sedov	    outputname=$func_stripname_result ;;
90194137ff4cSJacques Vidrine	  *) exeext= ;;
90204137ff4cSJacques Vidrine	esac
90211c43270aSJacques Vidrine	case $host in
90221c43270aSJacques Vidrine	  *cygwin* | *mingw* )
9023*ae771770SStanislav Sedov	    func_dirname_and_basename "$output" "" "."
9024*ae771770SStanislav Sedov	    output_name=$func_basename_result
9025*ae771770SStanislav Sedov	    output_path=$func_dirname_result
9026c19800e8SDoug Rabson	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
9027c19800e8SDoug Rabson	    cwrapper="$output_path/$output_name.exe"
9028*ae771770SStanislav Sedov	    $RM $cwrappersource $cwrapper
9029*ae771770SStanislav Sedov	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
90301c43270aSJacques Vidrine
9031*ae771770SStanislav Sedov	    func_emit_cwrapperexe_src > $cwrappersource
90321c43270aSJacques Vidrine
9033*ae771770SStanislav Sedov	    # The wrapper executable is built using the $host compiler,
9034*ae771770SStanislav Sedov	    # because it contains $host paths and files. If cross-
9035*ae771770SStanislav Sedov	    # compiling, it, like the target executable, must be
9036*ae771770SStanislav Sedov	    # executed on the $host or under an emulation environment.
9037*ae771770SStanislav Sedov	    $opt_dry_run || {
9038*ae771770SStanislav Sedov	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
9039*ae771770SStanislav Sedov	      $STRIP $cwrapper
9040c19800e8SDoug Rabson	    }
9041c19800e8SDoug Rabson
9042*ae771770SStanislav Sedov	    # Now, create the wrapper script for func_source use:
9043*ae771770SStanislav Sedov	    func_ltwrapper_scriptname $cwrapper
9044*ae771770SStanislav Sedov	    $RM $func_ltwrapper_scriptname_result
9045*ae771770SStanislav Sedov	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
9046*ae771770SStanislav Sedov	    $opt_dry_run || {
9047*ae771770SStanislav Sedov	      # note: this script will not be executed, so do not chmod.
9048*ae771770SStanislav Sedov	      if test "x$build" = "x$host" ; then
9049*ae771770SStanislav Sedov		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
9050*ae771770SStanislav Sedov	      else
9051*ae771770SStanislav Sedov		func_emit_wrapper no > $func_ltwrapper_scriptname_result
9052*ae771770SStanislav Sedov	      fi
9053*ae771770SStanislav Sedov	    }
9054c19800e8SDoug Rabson	  ;;
9055c19800e8SDoug Rabson	  * )
9056*ae771770SStanislav Sedov	    $RM $output
9057*ae771770SStanislav Sedov	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
90581c43270aSJacques Vidrine
9059*ae771770SStanislav Sedov	    func_emit_wrapper no > $output
9060b528cefcSMark Murray	    chmod +x $output
9061*ae771770SStanislav Sedov	  ;;
9062*ae771770SStanislav Sedov	esac
9063*ae771770SStanislav Sedov      }
9064c19800e8SDoug Rabson      exit $EXIT_SUCCESS
9065b528cefcSMark Murray      ;;
9066b528cefcSMark Murray    esac
9067b528cefcSMark Murray
9068b528cefcSMark Murray    # See if we need to build an old-fashioned archive.
9069b528cefcSMark Murray    for oldlib in $oldlibs; do
9070b528cefcSMark Murray
9071b528cefcSMark Murray      if test "$build_libtool_libs" = convenience; then
9072*ae771770SStanislav Sedov	oldobjs="$libobjs_save $symfileobj"
9073b528cefcSMark Murray	addlibs="$convenience"
9074b528cefcSMark Murray	build_libtool_libs=no
9075b528cefcSMark Murray      else
90765e9cd1aeSAssar Westerlund	if test "$build_libtool_libs" = module; then
90775e9cd1aeSAssar Westerlund	  oldobjs="$libobjs_save"
90785e9cd1aeSAssar Westerlund	  build_libtool_libs=no
90795e9cd1aeSAssar Westerlund	else
90801c43270aSJacques Vidrine	  oldobjs="$old_deplibs $non_pic_objects"
9081*ae771770SStanislav Sedov	  if test "$preload" = yes && test -f "$symfileobj"; then
9082*ae771770SStanislav Sedov	    func_append oldobjs " $symfileobj"
9083*ae771770SStanislav Sedov	  fi
90845e9cd1aeSAssar Westerlund	fi
9085b528cefcSMark Murray	addlibs="$old_convenience"
9086b528cefcSMark Murray      fi
9087b528cefcSMark Murray
90885e9cd1aeSAssar Westerlund      if test -n "$addlibs"; then
90895e9cd1aeSAssar Westerlund	gentop="$output_objdir/${outputname}x"
9090*ae771770SStanislav Sedov	func_append generated " $gentop"
90915e9cd1aeSAssar Westerlund
9092c19800e8SDoug Rabson	func_extract_archives $gentop $addlibs
9093*ae771770SStanislav Sedov	func_append oldobjs " $func_extract_archives_result"
90945e9cd1aeSAssar Westerlund      fi
9095b528cefcSMark Murray
9096b528cefcSMark Murray      # Do each command in the archive commands.
9097b528cefcSMark Murray      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
90981c43270aSJacques Vidrine	cmds=$old_archive_from_new_cmds
9099b528cefcSMark Murray      else
9100*ae771770SStanislav Sedov
9101*ae771770SStanislav Sedov	# Add any objects from preloaded convenience libraries
9102*ae771770SStanislav Sedov	if test -n "$dlprefiles"; then
9103*ae771770SStanislav Sedov	  gentop="$output_objdir/${outputname}x"
9104*ae771770SStanislav Sedov	  func_append generated " $gentop"
9105*ae771770SStanislav Sedov
9106*ae771770SStanislav Sedov	  func_extract_archives $gentop $dlprefiles
9107*ae771770SStanislav Sedov	  func_append oldobjs " $func_extract_archives_result"
9108*ae771770SStanislav Sedov	fi
9109*ae771770SStanislav Sedov
9110c19800e8SDoug Rabson	# POSIX demands no paths to be encoded in archives.  We have
9111c19800e8SDoug Rabson	# to avoid creating archives with duplicate basenames if we
9112c19800e8SDoug Rabson	# might have to extract them afterwards, e.g., when creating a
9113c19800e8SDoug Rabson	# static archive out of a convenience library, or when linking
9114c19800e8SDoug Rabson	# the entirety of a libtool archive into another (currently
9115c19800e8SDoug Rabson	# not supported by libtool).
9116c19800e8SDoug Rabson	if (for obj in $oldobjs
9117c19800e8SDoug Rabson	    do
9118*ae771770SStanislav Sedov	      func_basename "$obj"
9119*ae771770SStanislav Sedov	      $ECHO "$func_basename_result"
9120c19800e8SDoug Rabson	    done | sort | sort -uc >/dev/null 2>&1); then
9121c19800e8SDoug Rabson	  :
9122c19800e8SDoug Rabson	else
9123*ae771770SStanislav Sedov	  echo "copying selected object files to avoid basename conflicts..."
9124c19800e8SDoug Rabson	  gentop="$output_objdir/${outputname}x"
9125*ae771770SStanislav Sedov	  func_append generated " $gentop"
9126*ae771770SStanislav Sedov	  func_mkdir_p "$gentop"
9127c19800e8SDoug Rabson	  save_oldobjs=$oldobjs
9128c19800e8SDoug Rabson	  oldobjs=
9129c19800e8SDoug Rabson	  counter=1
9130c19800e8SDoug Rabson	  for obj in $save_oldobjs
9131c19800e8SDoug Rabson	  do
9132*ae771770SStanislav Sedov	    func_basename "$obj"
9133*ae771770SStanislav Sedov	    objbase="$func_basename_result"
9134c19800e8SDoug Rabson	    case " $oldobjs " in
9135c19800e8SDoug Rabson	    " ") oldobjs=$obj ;;
9136c19800e8SDoug Rabson	    *[\ /]"$objbase "*)
9137c19800e8SDoug Rabson	      while :; do
9138c19800e8SDoug Rabson		# Make sure we don't pick an alternate name that also
9139c19800e8SDoug Rabson		# overlaps.
9140c19800e8SDoug Rabson		newobj=lt$counter-$objbase
9141*ae771770SStanislav Sedov		func_arith $counter + 1
9142*ae771770SStanislav Sedov		counter=$func_arith_result
9143c19800e8SDoug Rabson		case " $oldobjs " in
9144c19800e8SDoug Rabson		*[\ /]"$newobj "*) ;;
9145c19800e8SDoug Rabson		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
9146c19800e8SDoug Rabson		esac
9147c19800e8SDoug Rabson	      done
9148*ae771770SStanislav Sedov	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
9149*ae771770SStanislav Sedov	      func_append oldobjs " $gentop/$newobj"
9150c19800e8SDoug Rabson	      ;;
9151*ae771770SStanislav Sedov	    *) func_append oldobjs " $obj" ;;
9152c19800e8SDoug Rabson	    esac
9153c19800e8SDoug Rabson	  done
9154c19800e8SDoug Rabson	fi
91551c43270aSJacques Vidrine	eval cmds=\"$old_archive_cmds\"
91561c43270aSJacques Vidrine
9157*ae771770SStanislav Sedov	func_len " $cmds"
9158*ae771770SStanislav Sedov	len=$func_len_result
9159*ae771770SStanislav Sedov	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9160*ae771770SStanislav Sedov	  cmds=$old_archive_cmds
9161*ae771770SStanislav Sedov	elif test -n "$archiver_list_spec"; then
9162*ae771770SStanislav Sedov	  func_verbose "using command file archive linking..."
9163*ae771770SStanislav Sedov	  for obj in $oldobjs
9164*ae771770SStanislav Sedov	  do
9165*ae771770SStanislav Sedov	    func_to_tool_file "$obj"
9166*ae771770SStanislav Sedov	    $ECHO "$func_to_tool_file_result"
9167*ae771770SStanislav Sedov	  done > $output_objdir/$libname.libcmd
9168*ae771770SStanislav Sedov	  func_to_tool_file "$output_objdir/$libname.libcmd"
9169*ae771770SStanislav Sedov	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
91701c43270aSJacques Vidrine	  cmds=$old_archive_cmds
91715e9cd1aeSAssar Westerlund	else
91721c43270aSJacques Vidrine	  # the command line is too long to link in one step, link in parts
9173*ae771770SStanislav Sedov	  func_verbose "using piecewise archive linking..."
91741c43270aSJacques Vidrine	  save_RANLIB=$RANLIB
91751c43270aSJacques Vidrine	  RANLIB=:
91761c43270aSJacques Vidrine	  objlist=
91771c43270aSJacques Vidrine	  concat_cmds=
91781c43270aSJacques Vidrine	  save_oldobjs=$oldobjs
9179*ae771770SStanislav Sedov	  oldobjs=
91801c43270aSJacques Vidrine	  # Is there a better way of finding the last object in the list?
91811c43270aSJacques Vidrine	  for obj in $save_oldobjs
91821c43270aSJacques Vidrine	  do
91831c43270aSJacques Vidrine	    last_oldobj=$obj
91841c43270aSJacques Vidrine	  done
9185*ae771770SStanislav Sedov	  eval test_cmds=\"$old_archive_cmds\"
9186*ae771770SStanislav Sedov	  func_len " $test_cmds"
9187*ae771770SStanislav Sedov	  len0=$func_len_result
9188*ae771770SStanislav Sedov	  len=$len0
91891c43270aSJacques Vidrine	  for obj in $save_oldobjs
91901c43270aSJacques Vidrine	  do
9191*ae771770SStanislav Sedov	    func_len " $obj"
9192*ae771770SStanislav Sedov	    func_arith $len + $func_len_result
9193*ae771770SStanislav Sedov	    len=$func_arith_result
9194*ae771770SStanislav Sedov	    func_append objlist " $obj"
9195*ae771770SStanislav Sedov	    if test "$len" -lt "$max_cmd_len"; then
91961c43270aSJacques Vidrine	      :
91971c43270aSJacques Vidrine	    else
91981c43270aSJacques Vidrine	      # the above command should be used before it gets too long
91991c43270aSJacques Vidrine	      oldobjs=$objlist
92001c43270aSJacques Vidrine	      if test "$obj" = "$last_oldobj" ; then
92011c43270aSJacques Vidrine		RANLIB=$save_RANLIB
92021c43270aSJacques Vidrine	      fi
92031c43270aSJacques Vidrine	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
92041c43270aSJacques Vidrine	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
92051c43270aSJacques Vidrine	      objlist=
9206*ae771770SStanislav Sedov	      len=$len0
92075e9cd1aeSAssar Westerlund	    fi
92085e9cd1aeSAssar Westerlund	  done
92091c43270aSJacques Vidrine	  RANLIB=$save_RANLIB
92101c43270aSJacques Vidrine	  oldobjs=$objlist
92111c43270aSJacques Vidrine	  if test "X$oldobjs" = "X" ; then
92121c43270aSJacques Vidrine	    eval cmds=\"\$concat_cmds\"
92131c43270aSJacques Vidrine	  else
92141c43270aSJacques Vidrine	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
92151c43270aSJacques Vidrine	  fi
92161c43270aSJacques Vidrine	fi
9217b528cefcSMark Murray      fi
9218*ae771770SStanislav Sedov      func_execute_cmds "$cmds" 'exit $?'
9219b528cefcSMark Murray    done
9220b528cefcSMark Murray
9221*ae771770SStanislav Sedov    test -n "$generated" && \
9222*ae771770SStanislav Sedov      func_show_eval "${RM}r$generated"
9223b528cefcSMark Murray
9224b528cefcSMark Murray    # Now create the libtool archive.
92254137ff4cSJacques Vidrine    case $output in
9226b528cefcSMark Murray    *.la)
9227b528cefcSMark Murray      old_library=
9228b528cefcSMark Murray      test "$build_old_libs" = yes && old_library="$libname.$libext"
9229*ae771770SStanislav Sedov      func_verbose "creating $output"
9230b528cefcSMark Murray
92315e9cd1aeSAssar Westerlund      # Preserve any variables that may affect compiler behavior
92325e9cd1aeSAssar Westerlund      for var in $variables_saved_for_relink; do
92334137ff4cSJacques Vidrine	if eval test -z \"\${$var+set}\"; then
9234*ae771770SStanislav Sedov	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
92354137ff4cSJacques Vidrine	elif eval var_value=\$$var; test -z "$var_value"; then
92364137ff4cSJacques Vidrine	  relink_command="$var=; export $var; $relink_command"
92374137ff4cSJacques Vidrine	else
9238*ae771770SStanislav Sedov	  func_quote_for_eval "$var_value"
9239*ae771770SStanislav Sedov	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
92404137ff4cSJacques Vidrine	fi
92415e9cd1aeSAssar Westerlund      done
92425e9cd1aeSAssar Westerlund      # Quote the link command for shipping.
9243c19800e8SDoug Rabson      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
9244*ae771770SStanislav Sedov      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
92451c43270aSJacques Vidrine      if test "$hardcode_automatic" = yes ; then
92461c43270aSJacques Vidrine	relink_command=
92471c43270aSJacques Vidrine      fi
9248c19800e8SDoug Rabson
9249b528cefcSMark Murray      # Only create the output if not a dry run.
9250*ae771770SStanislav Sedov      $opt_dry_run || {
92515e9cd1aeSAssar Westerlund	for installed in no yes; do
92525e9cd1aeSAssar Westerlund	  if test "$installed" = yes; then
92535e9cd1aeSAssar Westerlund	    if test -z "$install_libdir"; then
92545e9cd1aeSAssar Westerlund	      break
92555e9cd1aeSAssar Westerlund	    fi
92565e9cd1aeSAssar Westerlund	    output="$output_objdir/$outputname"i
92575e9cd1aeSAssar Westerlund	    # Replace all uninstalled libtool libraries with the installed ones
92585e9cd1aeSAssar Westerlund	    newdependency_libs=
92595e9cd1aeSAssar Westerlund	    for deplib in $dependency_libs; do
92604137ff4cSJacques Vidrine	      case $deplib in
92615e9cd1aeSAssar Westerlund	      *.la)
9262*ae771770SStanislav Sedov		func_basename "$deplib"
9263*ae771770SStanislav Sedov		name="$func_basename_result"
92641c43270aSJacques Vidrine		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
9265*ae771770SStanislav Sedov		test -z "$libdir" && \
9266*ae771770SStanislav Sedov		  func_fatal_error "\`$deplib' is not a valid libtool archive"
9267*ae771770SStanislav Sedov		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
92685e9cd1aeSAssar Westerlund		;;
9269*ae771770SStanislav Sedov	      -L*)
9270*ae771770SStanislav Sedov		func_stripname -L '' "$deplib"
9271*ae771770SStanislav Sedov		func_replace_sysroot "$func_stripname_result"
9272*ae771770SStanislav Sedov		func_append newdependency_libs " -L$func_replace_sysroot_result"
9273*ae771770SStanislav Sedov		;;
9274*ae771770SStanislav Sedov	      -R*)
9275*ae771770SStanislav Sedov		func_stripname -R '' "$deplib"
9276*ae771770SStanislav Sedov		func_replace_sysroot "$func_stripname_result"
9277*ae771770SStanislav Sedov		func_append newdependency_libs " -R$func_replace_sysroot_result"
9278*ae771770SStanislav Sedov		;;
9279*ae771770SStanislav Sedov	      *) func_append newdependency_libs " $deplib" ;;
92805e9cd1aeSAssar Westerlund	      esac
92815e9cd1aeSAssar Westerlund	    done
92825e9cd1aeSAssar Westerlund	    dependency_libs="$newdependency_libs"
92835e9cd1aeSAssar Westerlund	    newdlfiles=
9284*ae771770SStanislav Sedov
92855e9cd1aeSAssar Westerlund	    for lib in $dlfiles; do
9286*ae771770SStanislav Sedov	      case $lib in
9287*ae771770SStanislav Sedov	      *.la)
9288*ae771770SStanislav Sedov	        func_basename "$lib"
9289*ae771770SStanislav Sedov		name="$func_basename_result"
92901c43270aSJacques Vidrine		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9291*ae771770SStanislav Sedov		test -z "$libdir" && \
9292*ae771770SStanislav Sedov		  func_fatal_error "\`$lib' is not a valid libtool archive"
9293*ae771770SStanislav Sedov		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
9294*ae771770SStanislav Sedov		;;
9295*ae771770SStanislav Sedov	      *) func_append newdlfiles " $lib" ;;
9296*ae771770SStanislav Sedov	      esac
92975e9cd1aeSAssar Westerlund	    done
92985e9cd1aeSAssar Westerlund	    dlfiles="$newdlfiles"
92995e9cd1aeSAssar Westerlund	    newdlprefiles=
93005e9cd1aeSAssar Westerlund	    for lib in $dlprefiles; do
9301*ae771770SStanislav Sedov	      case $lib in
9302*ae771770SStanislav Sedov	      *.la)
9303*ae771770SStanislav Sedov		# Only pass preopened files to the pseudo-archive (for
9304*ae771770SStanislav Sedov		# eventual linking with the app. that links it) if we
9305*ae771770SStanislav Sedov		# didn't already link the preopened objects directly into
9306*ae771770SStanislav Sedov		# the library:
9307*ae771770SStanislav Sedov		func_basename "$lib"
9308*ae771770SStanislav Sedov		name="$func_basename_result"
93091c43270aSJacques Vidrine		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9310*ae771770SStanislav Sedov		test -z "$libdir" && \
9311*ae771770SStanislav Sedov		  func_fatal_error "\`$lib' is not a valid libtool archive"
9312*ae771770SStanislav Sedov		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
9313*ae771770SStanislav Sedov		;;
9314*ae771770SStanislav Sedov	      esac
93155e9cd1aeSAssar Westerlund	    done
93165e9cd1aeSAssar Westerlund	    dlprefiles="$newdlprefiles"
93171c43270aSJacques Vidrine	  else
93181c43270aSJacques Vidrine	    newdlfiles=
93191c43270aSJacques Vidrine	    for lib in $dlfiles; do
93201c43270aSJacques Vidrine	      case $lib in
93211c43270aSJacques Vidrine		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
93221c43270aSJacques Vidrine		*) abs=`pwd`"/$lib" ;;
93231c43270aSJacques Vidrine	      esac
9324*ae771770SStanislav Sedov	      func_append newdlfiles " $abs"
93251c43270aSJacques Vidrine	    done
93261c43270aSJacques Vidrine	    dlfiles="$newdlfiles"
93271c43270aSJacques Vidrine	    newdlprefiles=
93281c43270aSJacques Vidrine	    for lib in $dlprefiles; do
93291c43270aSJacques Vidrine	      case $lib in
93301c43270aSJacques Vidrine		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
93311c43270aSJacques Vidrine		*) abs=`pwd`"/$lib" ;;
93321c43270aSJacques Vidrine	      esac
9333*ae771770SStanislav Sedov	      func_append newdlprefiles " $abs"
93341c43270aSJacques Vidrine	    done
93351c43270aSJacques Vidrine	    dlprefiles="$newdlprefiles"
93365e9cd1aeSAssar Westerlund	  fi
9337*ae771770SStanislav Sedov	  $RM $output
93384137ff4cSJacques Vidrine	  # place dlname in correct position for cygwin
9339*ae771770SStanislav Sedov	  # In fact, it would be nice if we could use this code for all target
9340*ae771770SStanislav Sedov	  # systems that can't hard-code library paths into their executables
9341*ae771770SStanislav Sedov	  # and that have no shared library path variable independent of PATH,
9342*ae771770SStanislav Sedov	  # but it turns out we can't easily determine that from inspecting
9343*ae771770SStanislav Sedov	  # libtool variables, so we have to hard-code the OSs to which it
9344*ae771770SStanislav Sedov	  # applies here; at the moment, that means platforms that use the PE
9345*ae771770SStanislav Sedov	  # object format with DLL files.  See the long comment at the top of
9346*ae771770SStanislav Sedov	  # tests/bindir.at for full details.
93474137ff4cSJacques Vidrine	  tdlname=$dlname
93484137ff4cSJacques Vidrine	  case $host,$output,$installed,$module,$dlname in
9349*ae771770SStanislav Sedov	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
9350*ae771770SStanislav Sedov	      # If a -bindir argument was supplied, place the dll there.
9351*ae771770SStanislav Sedov	      if test "x$bindir" != x ;
9352*ae771770SStanislav Sedov	      then
9353*ae771770SStanislav Sedov		func_relative_path "$install_libdir" "$bindir"
9354*ae771770SStanislav Sedov		tdlname=$func_relative_path_result$dlname
9355*ae771770SStanislav Sedov	      else
9356*ae771770SStanislav Sedov		# Otherwise fall back on heuristic.
9357*ae771770SStanislav Sedov		tdlname=../bin/$dlname
9358*ae771770SStanislav Sedov	      fi
9359*ae771770SStanislav Sedov	      ;;
93604137ff4cSJacques Vidrine	  esac
9361*ae771770SStanislav Sedov	  $ECHO > $output "\
93625e9cd1aeSAssar Westerlund# $outputname - a libtool library file
9363*ae771770SStanislav Sedov# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
93645e9cd1aeSAssar Westerlund#
93655e9cd1aeSAssar Westerlund# Please DO NOT delete this file!
93665e9cd1aeSAssar Westerlund# It is necessary for linking the library.
9367b528cefcSMark Murray
9368b528cefcSMark Murray# The name that we can dlopen(3).
93694137ff4cSJacques Vidrinedlname='$tdlname'
9370b528cefcSMark Murray
9371b528cefcSMark Murray# Names of this library.
9372b528cefcSMark Murraylibrary_names='$library_names'
9373b528cefcSMark Murray
9374b528cefcSMark Murray# The name of the static archive.
9375b528cefcSMark Murrayold_library='$old_library'
9376b528cefcSMark Murray
9377*ae771770SStanislav Sedov# Linker flags that can not go in dependency_libs.
9378*ae771770SStanislav Sedovinherited_linker_flags='$new_inherited_linker_flags'
9379*ae771770SStanislav Sedov
9380b528cefcSMark Murray# Libraries that this one depends upon.
9381b528cefcSMark Murraydependency_libs='$dependency_libs'
9382b528cefcSMark Murray
9383*ae771770SStanislav Sedov# Names of additional weak libraries provided by this library
9384*ae771770SStanislav Sedovweak_library_names='$weak_libs'
9385*ae771770SStanislav Sedov
9386b528cefcSMark Murray# Version information for $libname.
9387b528cefcSMark Murraycurrent=$current
9388b528cefcSMark Murrayage=$age
9389b528cefcSMark Murrayrevision=$revision
9390b528cefcSMark Murray
9391b528cefcSMark Murray# Is this an already installed library?
93925e9cd1aeSAssar Westerlundinstalled=$installed
93935e9cd1aeSAssar Westerlund
93941c43270aSJacques Vidrine# Should we warn about portability when linking against -modules?
93951c43270aSJacques Vidrineshouldnotlink=$module
93961c43270aSJacques Vidrine
93975e9cd1aeSAssar Westerlund# Files to dlopen/dlpreopen
93985e9cd1aeSAssar Westerlunddlopen='$dlfiles'
93995e9cd1aeSAssar Westerlunddlpreopen='$dlprefiles'
9400b528cefcSMark Murray
9401b528cefcSMark Murray# Directory that this library needs to be installed in:
94025e9cd1aeSAssar Westerlundlibdir='$install_libdir'"
94031c43270aSJacques Vidrine	  if test "$installed" = no && test "$need_relink" = yes; then
9404*ae771770SStanislav Sedov	    $ECHO >> $output "\
94055e9cd1aeSAssar Westerlundrelink_command=\"$relink_command\""
94065e9cd1aeSAssar Westerlund	  fi
94075e9cd1aeSAssar Westerlund	done
9408*ae771770SStanislav Sedov      }
9409b528cefcSMark Murray
9410b528cefcSMark Murray      # Do a symbolic link so that the libtool archive can be found in
9411b528cefcSMark Murray      # LD_LIBRARY_PATH before the program is installed.
9412*ae771770SStanislav Sedov      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
9413b528cefcSMark Murray      ;;
9414b528cefcSMark Murray    esac
9415c19800e8SDoug Rabson    exit $EXIT_SUCCESS
9416c19800e8SDoug Rabson}
9417b528cefcSMark Murray
9418*ae771770SStanislav Sedov{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
9419*ae771770SStanislav Sedov    func_mode_link ${1+"$@"}
9420b528cefcSMark Murray
9421b528cefcSMark Murray
9422*ae771770SStanislav Sedov# func_mode_uninstall arg...
9423*ae771770SStanislav Sedovfunc_mode_uninstall ()
9424*ae771770SStanislav Sedov{
9425*ae771770SStanislav Sedov    $opt_debug
9426*ae771770SStanislav Sedov    RM="$nonopt"
9427b528cefcSMark Murray    files=
94284137ff4cSJacques Vidrine    rmforce=
94294137ff4cSJacques Vidrine    exit_status=0
9430b528cefcSMark Murray
94315e9cd1aeSAssar Westerlund    # This variable tells wrapper scripts just to set variables rather
94325e9cd1aeSAssar Westerlund    # than running their programs.
94335e9cd1aeSAssar Westerlund    libtool_install_magic="$magic"
94345e9cd1aeSAssar Westerlund
9435b528cefcSMark Murray    for arg
9436b528cefcSMark Murray    do
94374137ff4cSJacques Vidrine      case $arg in
9438*ae771770SStanislav Sedov      -f) func_append RM " $arg"; rmforce=yes ;;
9439*ae771770SStanislav Sedov      -*) func_append RM " $arg" ;;
9440*ae771770SStanislav Sedov      *) func_append files " $arg" ;;
9441b528cefcSMark Murray      esac
9442b528cefcSMark Murray    done
9443b528cefcSMark Murray
9444*ae771770SStanislav Sedov    test -z "$RM" && \
9445*ae771770SStanislav Sedov      func_fatal_help "you must specify an RM program"
9446b528cefcSMark Murray
94474137ff4cSJacques Vidrine    rmdirs=
94484137ff4cSJacques Vidrine
9449b528cefcSMark Murray    for file in $files; do
9450*ae771770SStanislav Sedov      func_dirname "$file" "" "."
9451*ae771770SStanislav Sedov      dir="$func_dirname_result"
9452*ae771770SStanislav Sedov      if test "X$dir" = X.; then
9453*ae771770SStanislav Sedov	odir="$objdir"
94545e9cd1aeSAssar Westerlund      else
9455*ae771770SStanislav Sedov	odir="$dir/$objdir"
94565e9cd1aeSAssar Westerlund      fi
9457*ae771770SStanislav Sedov      func_basename "$file"
9458*ae771770SStanislav Sedov      name="$func_basename_result"
9459*ae771770SStanislav Sedov      test "$opt_mode" = uninstall && odir="$dir"
9460b528cefcSMark Murray
9461*ae771770SStanislav Sedov      # Remember odir for removal later, being careful to avoid duplicates
9462*ae771770SStanislav Sedov      if test "$opt_mode" = clean; then
94634137ff4cSJacques Vidrine	case " $rmdirs " in
9464*ae771770SStanislav Sedov	  *" $odir "*) ;;
9465*ae771770SStanislav Sedov	  *) func_append rmdirs " $odir" ;;
94664137ff4cSJacques Vidrine	esac
94674137ff4cSJacques Vidrine      fi
94684137ff4cSJacques Vidrine
94694137ff4cSJacques Vidrine      # Don't error if the file doesn't exist and rm -f was used.
9470*ae771770SStanislav Sedov      if { test -L "$file"; } >/dev/null 2>&1 ||
9471*ae771770SStanislav Sedov	 { test -h "$file"; } >/dev/null 2>&1 ||
9472*ae771770SStanislav Sedov	 test -f "$file"; then
94734137ff4cSJacques Vidrine	:
94744137ff4cSJacques Vidrine      elif test -d "$file"; then
94754137ff4cSJacques Vidrine	exit_status=1
94764137ff4cSJacques Vidrine	continue
94774137ff4cSJacques Vidrine      elif test "$rmforce" = yes; then
94784137ff4cSJacques Vidrine	continue
94794137ff4cSJacques Vidrine      fi
94804137ff4cSJacques Vidrine
9481b528cefcSMark Murray      rmfiles="$file"
9482b528cefcSMark Murray
94834137ff4cSJacques Vidrine      case $name in
9484b528cefcSMark Murray      *.la)
9485b528cefcSMark Murray	# Possibly a libtool archive, so verify it.
9486*ae771770SStanislav Sedov	if func_lalib_p "$file"; then
9487*ae771770SStanislav Sedov	  func_source $dir/$name
9488b528cefcSMark Murray
9489b528cefcSMark Murray	  # Delete the libtool libraries and symlinks.
9490b528cefcSMark Murray	  for n in $library_names; do
9491*ae771770SStanislav Sedov	    func_append rmfiles " $odir/$n"
9492b528cefcSMark Murray	  done
9493*ae771770SStanislav Sedov	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
9494b528cefcSMark Murray
9495*ae771770SStanislav Sedov	  case "$opt_mode" in
9496c19800e8SDoug Rabson	  clean)
9497c19800e8SDoug Rabson	    case " $library_names " in
9498c19800e8SDoug Rabson	    *" $dlname "*) ;;
9499*ae771770SStanislav Sedov	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
9500c19800e8SDoug Rabson	    esac
9501*ae771770SStanislav Sedov	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
9502c19800e8SDoug Rabson	    ;;
9503c19800e8SDoug Rabson	  uninstall)
9504b528cefcSMark Murray	    if test -n "$library_names"; then
9505b528cefcSMark Murray	      # Do each command in the postuninstall commands.
9506*ae771770SStanislav Sedov	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9507b528cefcSMark Murray	    fi
9508b528cefcSMark Murray
9509b528cefcSMark Murray	    if test -n "$old_library"; then
9510b528cefcSMark Murray	      # Do each command in the old_postuninstall commands.
9511*ae771770SStanislav Sedov	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9512b528cefcSMark Murray	    fi
9513b528cefcSMark Murray	    # FIXME: should reinstall the best remaining shared library.
9514c19800e8SDoug Rabson	    ;;
9515c19800e8SDoug Rabson	  esac
95165e9cd1aeSAssar Westerlund	fi
9517b528cefcSMark Murray	;;
9518b528cefcSMark Murray
9519b528cefcSMark Murray      *.lo)
95201c43270aSJacques Vidrine	# Possibly a libtool object, so verify it.
9521*ae771770SStanislav Sedov	if func_lalib_p "$file"; then
95221c43270aSJacques Vidrine
95231c43270aSJacques Vidrine	  # Read the .lo file
9524*ae771770SStanislav Sedov	  func_source $dir/$name
95251c43270aSJacques Vidrine
95261c43270aSJacques Vidrine	  # Add PIC object to the list of files to remove.
9527*ae771770SStanislav Sedov	  if test -n "$pic_object" &&
9528*ae771770SStanislav Sedov	     test "$pic_object" != none; then
9529*ae771770SStanislav Sedov	    func_append rmfiles " $dir/$pic_object"
95301c43270aSJacques Vidrine	  fi
95311c43270aSJacques Vidrine
95321c43270aSJacques Vidrine	  # Add non-PIC object to the list of files to remove.
9533*ae771770SStanislav Sedov	  if test -n "$non_pic_object" &&
9534*ae771770SStanislav Sedov	     test "$non_pic_object" != none; then
9535*ae771770SStanislav Sedov	    func_append rmfiles " $dir/$non_pic_object"
95361c43270aSJacques Vidrine	  fi
9537b528cefcSMark Murray	fi
9538b528cefcSMark Murray	;;
9539b528cefcSMark Murray
9540b528cefcSMark Murray      *)
9541*ae771770SStanislav Sedov	if test "$opt_mode" = clean ; then
95421c43270aSJacques Vidrine	  noexename=$name
95431c43270aSJacques Vidrine	  case $file in
95441c43270aSJacques Vidrine	  *.exe)
9545*ae771770SStanislav Sedov	    func_stripname '' '.exe' "$file"
9546*ae771770SStanislav Sedov	    file=$func_stripname_result
9547*ae771770SStanislav Sedov	    func_stripname '' '.exe' "$name"
9548*ae771770SStanislav Sedov	    noexename=$func_stripname_result
95491c43270aSJacques Vidrine	    # $file with .exe has already been added to rmfiles,
95501c43270aSJacques Vidrine	    # add $file without .exe
9551*ae771770SStanislav Sedov	    func_append rmfiles " $file"
95521c43270aSJacques Vidrine	    ;;
95531c43270aSJacques Vidrine	  esac
95545e9cd1aeSAssar Westerlund	  # Do a test to see if this is a libtool program.
9555*ae771770SStanislav Sedov	  if func_ltwrapper_p "$file"; then
9556*ae771770SStanislav Sedov	    if func_ltwrapper_executable_p "$file"; then
9557*ae771770SStanislav Sedov	      func_ltwrapper_scriptname "$file"
95585e9cd1aeSAssar Westerlund	      relink_command=
9559*ae771770SStanislav Sedov	      func_source $func_ltwrapper_scriptname_result
9560*ae771770SStanislav Sedov	      func_append rmfiles " $func_ltwrapper_scriptname_result"
9561*ae771770SStanislav Sedov	    else
9562*ae771770SStanislav Sedov	      relink_command=
9563*ae771770SStanislav Sedov	      func_source $dir/$noexename
9564*ae771770SStanislav Sedov	    fi
95655e9cd1aeSAssar Westerlund
95661c43270aSJacques Vidrine	    # note $name still contains .exe if it was in $file originally
95671c43270aSJacques Vidrine	    # as does the version of $file that was added into $rmfiles
9568*ae771770SStanislav Sedov	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
95695e9cd1aeSAssar Westerlund	    if test "$fast_install" = yes && test -n "$relink_command"; then
9570*ae771770SStanislav Sedov	      func_append rmfiles " $odir/lt-$name"
95715e9cd1aeSAssar Westerlund	    fi
95721c43270aSJacques Vidrine	    if test "X$noexename" != "X$name" ; then
9573*ae771770SStanislav Sedov	      func_append rmfiles " $odir/lt-${noexename}.c"
95741c43270aSJacques Vidrine	    fi
95751c43270aSJacques Vidrine	  fi
95765e9cd1aeSAssar Westerlund	fi
9577b528cefcSMark Murray	;;
9578b528cefcSMark Murray      esac
9579*ae771770SStanislav Sedov      func_show_eval "$RM $rmfiles" 'exit_status=1'
9580b528cefcSMark Murray    done
95814137ff4cSJacques Vidrine
95824137ff4cSJacques Vidrine    # Try to remove the ${objdir}s in the directories where we deleted files
95834137ff4cSJacques Vidrine    for dir in $rmdirs; do
95844137ff4cSJacques Vidrine      if test -d "$dir"; then
9585*ae771770SStanislav Sedov	func_show_eval "rmdir $dir >/dev/null 2>&1"
95864137ff4cSJacques Vidrine      fi
95874137ff4cSJacques Vidrine    done
95884137ff4cSJacques Vidrine
95894137ff4cSJacques Vidrine    exit $exit_status
9590*ae771770SStanislav Sedov}
9591b528cefcSMark Murray
9592*ae771770SStanislav Sedov{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
9593*ae771770SStanislav Sedov    func_mode_uninstall ${1+"$@"}
9594b528cefcSMark Murray
9595*ae771770SStanislav Sedovtest -z "$opt_mode" && {
9596*ae771770SStanislav Sedov  help="$generic_help"
9597*ae771770SStanislav Sedov  func_fatal_help "you must specify a MODE"
9598*ae771770SStanislav Sedov}
9599*ae771770SStanislav Sedov
9600*ae771770SStanislav Sedovtest -z "$exec_cmd" && \
9601*ae771770SStanislav Sedov  func_fatal_help "invalid operation mode \`$opt_mode'"
9602b528cefcSMark Murray
96038373020dSJacques Vidrineif test -n "$exec_cmd"; then
9604*ae771770SStanislav Sedov  eval exec "$exec_cmd"
9605c19800e8SDoug Rabson  exit $EXIT_FAILURE
96068373020dSJacques Vidrinefi
96078373020dSJacques Vidrine
9608*ae771770SStanislav Sedovexit $exit_status
9609b528cefcSMark Murray
9610b528cefcSMark Murray
96111c43270aSJacques Vidrine# The TAGs below are defined such that we never get into a situation
96121c43270aSJacques Vidrine# in which we disable both kinds of libraries.  Given conflicting
96131c43270aSJacques Vidrine# choices, we go for a static library, that is the most portable,
96141c43270aSJacques Vidrine# since we can't tell whether shared libraries were disabled because
96151c43270aSJacques Vidrine# the user asked for that or because the platform doesn't support
96161c43270aSJacques Vidrine# them.  This is particularly important on AIX, because we don't
96171c43270aSJacques Vidrine# support having both static and shared libraries enabled at the same
96181c43270aSJacques Vidrine# time on that platform, so we default to a shared-only configuration.
96191c43270aSJacques Vidrine# If a disable-shared tag is given, we'll fallback to a static-only
96201c43270aSJacques Vidrine# configuration.  But we'll never go from static-only to shared-only.
96211c43270aSJacques Vidrine
96221c43270aSJacques Vidrine# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
9623*ae771770SStanislav Sedovbuild_libtool_libs=no
9624*ae771770SStanislav Sedovbuild_old_libs=yes
96251c43270aSJacques Vidrine# ### END LIBTOOL TAG CONFIG: disable-shared
96261c43270aSJacques Vidrine
96271c43270aSJacques Vidrine# ### BEGIN LIBTOOL TAG CONFIG: disable-static
9628*ae771770SStanislav Sedovbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
96291c43270aSJacques Vidrine# ### END LIBTOOL TAG CONFIG: disable-static
96301c43270aSJacques Vidrine
9631b528cefcSMark Murray# Local Variables:
9632b528cefcSMark Murray# mode:shell-script
9633b528cefcSMark Murray# sh-indentation:2
9634b528cefcSMark Murray# End:
9635*ae771770SStanislav Sedov# vi:sw=2
9636*ae771770SStanislav Sedov
9637