ltmain.sh revision 1.1.1.1 1 1.1 joerg #! /bin/sh
2 1.1 joerg ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
3 1.1 joerg ## by inline-source v2016-02-21.11
4 1.1 joerg
5 1.1 joerg # libtool (GNU libtool) 2.4.6.40-6ca5-dirty
6 1.1 joerg # Provide generalized library-building support services.
7 1.1 joerg # Written by Gordon Matzigkeit <gord (at] gnu.ai.mit.edu>, 1996
8 1.1 joerg
9 1.1 joerg # Copyright (C) 1996-2017 Free Software Foundation, Inc.
10 1.1 joerg # This is free software; see the source for copying conditions. There is NO
11 1.1 joerg # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 1.1 joerg
13 1.1 joerg # GNU Libtool is free software; you can redistribute it and/or modify
14 1.1 joerg # it under the terms of the GNU General Public License as published by
15 1.1 joerg # the Free Software Foundation; either version 2 of the License, or
16 1.1 joerg # (at your option) any later version.
17 1.1 joerg #
18 1.1 joerg # As a special exception to the GNU General Public License,
19 1.1 joerg # if you distribute this file as part of a program or library that
20 1.1 joerg # is built using GNU Libtool, you may include this file under the
21 1.1 joerg # same distribution terms that you use for the rest of that program.
22 1.1 joerg #
23 1.1 joerg # GNU Libtool is distributed in the hope that it will be useful, but
24 1.1 joerg # WITHOUT ANY WARRANTY; without even the implied warranty of
25 1.1 joerg # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
26 1.1 joerg # General Public License for more details.
27 1.1 joerg #
28 1.1 joerg # You should have received a copy of the GNU General Public License
29 1.1 joerg # along with this program. If not, see <http://www.gnu.org/licenses/>.
30 1.1 joerg
31 1.1 joerg
32 1.1 joerg PROGRAM=libtool
33 1.1 joerg PACKAGE=libtool
34 1.1 joerg VERSION=2.4.6.40-6ca5-dirty
35 1.1 joerg package_revision=2.4.6.40
36 1.1 joerg
37 1.1 joerg
38 1.1 joerg ## ------ ##
39 1.1 joerg ## Usage. ##
40 1.1 joerg ## ------ ##
41 1.1 joerg
42 1.1 joerg # Run './libtool --help' for help with using this script from the
43 1.1 joerg # command line.
44 1.1 joerg
45 1.1 joerg
46 1.1 joerg ## ------------------------------- ##
47 1.1 joerg ## User overridable command paths. ##
48 1.1 joerg ## ------------------------------- ##
49 1.1 joerg
50 1.1 joerg # After configure completes, it has a better idea of some of the
51 1.1 joerg # shell tools we need than the defaults used by the functions shared
52 1.1 joerg # with bootstrap, so set those here where they can still be over-
53 1.1 joerg # ridden by the user, but otherwise take precedence.
54 1.1 joerg
55 1.1 joerg : ${AUTOCONF="autoconf"}
56 1.1 joerg : ${AUTOMAKE="automake"}
57 1.1 joerg
58 1.1 joerg
59 1.1 joerg ## -------------------------- ##
60 1.1 joerg ## Source external libraries. ##
61 1.1 joerg ## -------------------------- ##
62 1.1 joerg
63 1.1 joerg # Much of our low-level functionality needs to be sourced from external
64 1.1 joerg # libraries, which are installed to $pkgauxdir.
65 1.1 joerg
66 1.1 joerg # Set a version string for this script.
67 1.1 joerg scriptversion=2017-04-19.12; # UTC
68 1.1 joerg
69 1.1 joerg # General shell script boiler plate, and helper functions.
70 1.1 joerg # Written by Gary V. Vaughan, 2004
71 1.1 joerg
72 1.1 joerg # This is free software. There is NO warranty; not even for
73 1.1 joerg # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
74 1.1 joerg #
75 1.1 joerg # Copyright (C) 2004-2017 Bootstrap Authors
76 1.1 joerg #
77 1.1 joerg # This file is dual licensed under the terms of the MIT license
78 1.1 joerg # <https://opensource.org/license/MIT>, and GPL version 3 or later
79 1.1 joerg # <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
80 1.1 joerg # these licenses when using or redistributing this software or any of
81 1.1 joerg # the files within it. See the URLs above, or the file `LICENSE`
82 1.1 joerg # included in the Bootstrap distribution for the full license texts.
83 1.1 joerg
84 1.1 joerg # Please report bugs or propose patches to:
85 1.1 joerg # <https://github.com/gnulib-modules/bootstrap/issues>
86 1.1 joerg
87 1.1 joerg
88 1.1 joerg ## ------ ##
89 1.1 joerg ## Usage. ##
90 1.1 joerg ## ------ ##
91 1.1 joerg
92 1.1 joerg # Evaluate this file near the top of your script to gain access to
93 1.1 joerg # the functions and variables defined here:
94 1.1 joerg #
95 1.1 joerg # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
96 1.1 joerg #
97 1.1 joerg # If you need to override any of the default environment variable
98 1.1 joerg # settings, do that before evaluating this file.
99 1.1 joerg
100 1.1 joerg
101 1.1 joerg ## -------------------- ##
102 1.1 joerg ## Shell normalisation. ##
103 1.1 joerg ## -------------------- ##
104 1.1 joerg
105 1.1 joerg # Some shells need a little help to be as Bourne compatible as possible.
106 1.1 joerg # Before doing anything else, make sure all that help has been provided!
107 1.1 joerg
108 1.1 joerg DUALCASE=1; export DUALCASE # for MKS sh
109 1.1 joerg if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
110 1.1 joerg emulate sh
111 1.1 joerg NULLCMD=:
112 1.1 joerg # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
113 1.1 joerg # is contrary to our usage. Disable this feature.
114 1.1 joerg alias -g '${1+"$@"}'='"$@"'
115 1.1 joerg setopt NO_GLOB_SUBST
116 1.1 joerg else
117 1.1 joerg case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
118 1.1 joerg fi
119 1.1 joerg
120 1.1 joerg # NLS nuisances: We save the old values in case they are required later.
121 1.1 joerg _G_user_locale=
122 1.1 joerg _G_safe_locale=
123 1.1 joerg for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
124 1.1 joerg do
125 1.1 joerg eval "if test set = \"\${$_G_var+set}\"; then
126 1.1 joerg save_$_G_var=\$$_G_var
127 1.1 joerg $_G_var=C
128 1.1 joerg export $_G_var
129 1.1 joerg _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
130 1.1 joerg _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
131 1.1 joerg fi"
132 1.1 joerg done
133 1.1 joerg
134 1.1 joerg # Make sure IFS has a sensible default
135 1.1 joerg sp=' '
136 1.1 joerg nl='
137 1.1 joerg '
138 1.1 joerg IFS="$sp $nl"
139 1.1 joerg
140 1.1 joerg # There are apparently some retarded systems that use ';' as a PATH separator!
141 1.1 joerg if test "${PATH_SEPARATOR+set}" != set; then
142 1.1 joerg PATH_SEPARATOR=:
143 1.1 joerg (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
144 1.1 joerg (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
145 1.1 joerg PATH_SEPARATOR=';'
146 1.1 joerg }
147 1.1 joerg fi
148 1.1 joerg
149 1.1 joerg
150 1.1 joerg # func_unset VAR
151 1.1 joerg # --------------
152 1.1 joerg # Portably unset VAR.
153 1.1 joerg # In some shells, an 'unset VAR' statement leaves a non-zero return
154 1.1 joerg # status if VAR is already unset, which might be problematic if the
155 1.1 joerg # statement is used at the end of a function (thus poisoning its return
156 1.1 joerg # value) or when 'set -e' is active (causing even a spurious abort of
157 1.1 joerg # the script in this case).
158 1.1 joerg func_unset ()
159 1.1 joerg {
160 1.1 joerg { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; }
161 1.1 joerg }
162 1.1 joerg
163 1.1 joerg
164 1.1 joerg # Make sure CDPATH doesn't cause `cd` commands to output the target dir.
165 1.1 joerg func_unset CDPATH
166 1.1 joerg
167 1.1 joerg # Make sure ${,E,F}GREP behave sanely.
168 1.1 joerg func_unset GREP_OPTIONS
169 1.1 joerg
170 1.1 joerg
171 1.1 joerg ## ------------------------- ##
172 1.1 joerg ## Locate command utilities. ##
173 1.1 joerg ## ------------------------- ##
174 1.1 joerg
175 1.1 joerg
176 1.1 joerg # func_executable_p FILE
177 1.1 joerg # ----------------------
178 1.1 joerg # Check that FILE is an executable regular file.
179 1.1 joerg func_executable_p ()
180 1.1 joerg {
181 1.1 joerg test -f "$1" && test -x "$1"
182 1.1 joerg }
183 1.1 joerg
184 1.1 joerg
185 1.1 joerg # func_path_progs PROGS_LIST CHECK_FUNC [PATH]
186 1.1 joerg # --------------------------------------------
187 1.1 joerg # Search for either a program that responds to --version with output
188 1.1 joerg # containing "GNU", or else returned by CHECK_FUNC otherwise, by
189 1.1 joerg # trying all the directories in PATH with each of the elements of
190 1.1 joerg # PROGS_LIST.
191 1.1 joerg #
192 1.1 joerg # CHECK_FUNC should accept the path to a candidate program, and
193 1.1 joerg # set $func_check_prog_result if it truncates its output less than
194 1.1 joerg # $_G_path_prog_max characters.
195 1.1 joerg func_path_progs ()
196 1.1 joerg {
197 1.1 joerg _G_progs_list=$1
198 1.1 joerg _G_check_func=$2
199 1.1 joerg _G_PATH=${3-"$PATH"}
200 1.1 joerg
201 1.1 joerg _G_path_prog_max=0
202 1.1 joerg _G_path_prog_found=false
203 1.1 joerg _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
204 1.1 joerg for _G_dir in $_G_PATH; do
205 1.1 joerg IFS=$_G_save_IFS
206 1.1 joerg test -z "$_G_dir" && _G_dir=.
207 1.1 joerg for _G_prog_name in $_G_progs_list; do
208 1.1 joerg for _exeext in '' .EXE; do
209 1.1 joerg _G_path_prog=$_G_dir/$_G_prog_name$_exeext
210 1.1 joerg func_executable_p "$_G_path_prog" || continue
211 1.1 joerg case `"$_G_path_prog" --version 2>&1` in
212 1.1 joerg *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
213 1.1 joerg *) $_G_check_func $_G_path_prog
214 1.1 joerg func_path_progs_result=$func_check_prog_result
215 1.1 joerg ;;
216 1.1 joerg esac
217 1.1 joerg $_G_path_prog_found && break 3
218 1.1 joerg done
219 1.1 joerg done
220 1.1 joerg done
221 1.1 joerg IFS=$_G_save_IFS
222 1.1 joerg test -z "$func_path_progs_result" && {
223 1.1 joerg echo "no acceptable sed could be found in \$PATH" >&2
224 1.1 joerg exit 1
225 1.1 joerg }
226 1.1 joerg }
227 1.1 joerg
228 1.1 joerg
229 1.1 joerg # We want to be able to use the functions in this file before configure
230 1.1 joerg # has figured out where the best binaries are kept, which means we have
231 1.1 joerg # to search for them ourselves - except when the results are already set
232 1.1 joerg # where we skip the searches.
233 1.1 joerg
234 1.1 joerg # Unless the user overrides by setting SED, search the path for either GNU
235 1.1 joerg # sed, or the sed that truncates its output the least.
236 1.1 joerg test -z "$SED" && {
237 1.1 joerg _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
238 1.1 joerg for _G_i in 1 2 3 4 5 6 7; do
239 1.1 joerg _G_sed_script=$_G_sed_script$nl$_G_sed_script
240 1.1 joerg done
241 1.1 joerg echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
242 1.1 joerg _G_sed_script=
243 1.1 joerg
244 1.1 joerg func_check_prog_sed ()
245 1.1 joerg {
246 1.1 joerg _G_path_prog=$1
247 1.1 joerg
248 1.1 joerg _G_count=0
249 1.1 joerg printf 0123456789 >conftest.in
250 1.1 joerg while :
251 1.1 joerg do
252 1.1 joerg cat conftest.in conftest.in >conftest.tmp
253 1.1 joerg mv conftest.tmp conftest.in
254 1.1 joerg cp conftest.in conftest.nl
255 1.1 joerg echo '' >> conftest.nl
256 1.1 joerg "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
257 1.1 joerg diff conftest.out conftest.nl >/dev/null 2>&1 || break
258 1.1 joerg _G_count=`expr $_G_count + 1`
259 1.1 joerg if test "$_G_count" -gt "$_G_path_prog_max"; then
260 1.1 joerg # Best one so far, save it but keep looking for a better one
261 1.1 joerg func_check_prog_result=$_G_path_prog
262 1.1 joerg _G_path_prog_max=$_G_count
263 1.1 joerg fi
264 1.1 joerg # 10*(2^10) chars as input seems more than enough
265 1.1 joerg test 10 -lt "$_G_count" && break
266 1.1 joerg done
267 1.1 joerg rm -f conftest.in conftest.tmp conftest.nl conftest.out
268 1.1 joerg }
269 1.1 joerg
270 1.1 joerg func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin"
271 1.1 joerg rm -f conftest.sed
272 1.1 joerg SED=$func_path_progs_result
273 1.1 joerg }
274 1.1 joerg
275 1.1 joerg
276 1.1 joerg # Unless the user overrides by setting GREP, search the path for either GNU
277 1.1 joerg # grep, or the grep that truncates its output the least.
278 1.1 joerg test -z "$GREP" && {
279 1.1 joerg func_check_prog_grep ()
280 1.1 joerg {
281 1.1 joerg _G_path_prog=$1
282 1.1 joerg
283 1.1 joerg _G_count=0
284 1.1 joerg _G_path_prog_max=0
285 1.1 joerg printf 0123456789 >conftest.in
286 1.1 joerg while :
287 1.1 joerg do
288 1.1 joerg cat conftest.in conftest.in >conftest.tmp
289 1.1 joerg mv conftest.tmp conftest.in
290 1.1 joerg cp conftest.in conftest.nl
291 1.1 joerg echo 'GREP' >> conftest.nl
292 1.1 joerg "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
293 1.1 joerg diff conftest.out conftest.nl >/dev/null 2>&1 || break
294 1.1 joerg _G_count=`expr $_G_count + 1`
295 1.1 joerg if test "$_G_count" -gt "$_G_path_prog_max"; then
296 1.1 joerg # Best one so far, save it but keep looking for a better one
297 1.1 joerg func_check_prog_result=$_G_path_prog
298 1.1 joerg _G_path_prog_max=$_G_count
299 1.1 joerg fi
300 1.1 joerg # 10*(2^10) chars as input seems more than enough
301 1.1 joerg test 10 -lt "$_G_count" && break
302 1.1 joerg done
303 1.1 joerg rm -f conftest.in conftest.tmp conftest.nl conftest.out
304 1.1 joerg }
305 1.1 joerg
306 1.1 joerg func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin"
307 1.1 joerg GREP=$func_path_progs_result
308 1.1 joerg }
309 1.1 joerg
310 1.1 joerg
311 1.1 joerg ## ------------------------------- ##
312 1.1 joerg ## User overridable command paths. ##
313 1.1 joerg ## ------------------------------- ##
314 1.1 joerg
315 1.1 joerg # All uppercase variable names are used for environment variables. These
316 1.1 joerg # variables can be overridden by the user before calling a script that
317 1.1 joerg # uses them if a suitable command of that name is not already available
318 1.1 joerg # in the command search PATH.
319 1.1 joerg
320 1.1 joerg : ${CP="cp -f"}
321 1.1 joerg : ${ECHO="printf %s\n"}
322 1.1 joerg : ${EGREP="$GREP -E"}
323 1.1 joerg : ${FGREP="$GREP -F"}
324 1.1 joerg : ${LN_S="ln -s"}
325 1.1 joerg : ${MAKE="make"}
326 1.1 joerg : ${MKDIR="mkdir"}
327 1.1 joerg : ${MV="mv -f"}
328 1.1 joerg : ${RM="rm -f"}
329 1.1 joerg : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
330 1.1 joerg
331 1.1 joerg
332 1.1 joerg ## -------------------- ##
333 1.1 joerg ## Useful sed snippets. ##
334 1.1 joerg ## -------------------- ##
335 1.1 joerg
336 1.1 joerg sed_dirname='s|/[^/]*$||'
337 1.1 joerg sed_basename='s|^.*/||'
338 1.1 joerg
339 1.1 joerg # Sed substitution that helps us do robust quoting. It backslashifies
340 1.1 joerg # metacharacters that are still active within double-quoted strings.
341 1.1 joerg sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
342 1.1 joerg
343 1.1 joerg # Same as above, but do not quote variable references.
344 1.1 joerg sed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
345 1.1 joerg
346 1.1 joerg # Sed substitution that turns a string into a regex matching for the
347 1.1 joerg # string literally.
348 1.1 joerg sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
349 1.1 joerg
350 1.1 joerg # Sed substitution that converts a w32 file name or path
351 1.1 joerg # that contains forward slashes, into one that contains
352 1.1 joerg # (escaped) backslashes. A very naive implementation.
353 1.1 joerg sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
354 1.1 joerg
355 1.1 joerg # Re-'\' parameter expansions in output of sed_double_quote_subst that
356 1.1 joerg # were '\'-ed in input to the same. If an odd number of '\' preceded a
357 1.1 joerg # '$' in input to sed_double_quote_subst, that '$' was protected from
358 1.1 joerg # expansion. Since each input '\' is now two '\'s, look for any number
359 1.1 joerg # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'.
360 1.1 joerg _G_bs='\\'
361 1.1 joerg _G_bs2='\\\\'
362 1.1 joerg _G_bs4='\\\\\\\\'
363 1.1 joerg _G_dollar='\$'
364 1.1 joerg sed_double_backslash="\
365 1.1 joerg s/$_G_bs4/&\\
366 1.1 joerg /g
367 1.1 joerg s/^$_G_bs2$_G_dollar/$_G_bs&/
368 1.1 joerg s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
369 1.1 joerg s/\n//g"
370 1.1 joerg
371 1.1 joerg
372 1.1 joerg ## ----------------- ##
373 1.1 joerg ## Global variables. ##
374 1.1 joerg ## ----------------- ##
375 1.1 joerg
376 1.1 joerg # Except for the global variables explicitly listed below, the following
377 1.1 joerg # functions in the '^func_' namespace, and the '^require_' namespace
378 1.1 joerg # variables initialised in the 'Resource management' section, sourcing
379 1.1 joerg # this file will not pollute your global namespace with anything
380 1.1 joerg # else. There's no portable way to scope variables in Bourne shell
381 1.1 joerg # though, so actually running these functions will sometimes place
382 1.1 joerg # results into a variable named after the function, and often use
383 1.1 joerg # temporary variables in the '^_G_' namespace. If you are careful to
384 1.1 joerg # avoid using those namespaces casually in your sourcing script, things
385 1.1 joerg # should continue to work as you expect. And, of course, you can freely
386 1.1 joerg # overwrite any of the functions or variables defined here before
387 1.1 joerg # calling anything to customize them.
388 1.1 joerg
389 1.1 joerg EXIT_SUCCESS=0
390 1.1 joerg EXIT_FAILURE=1
391 1.1 joerg EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
392 1.1 joerg EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
393 1.1 joerg
394 1.1 joerg # Allow overriding, eg assuming that you follow the convention of
395 1.1 joerg # putting '$debug_cmd' at the start of all your functions, you can get
396 1.1 joerg # bash to show function call trace with:
397 1.1 joerg #
398 1.1 joerg # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
399 1.1 joerg debug_cmd=${debug_cmd-":"}
400 1.1 joerg exit_cmd=:
401 1.1 joerg
402 1.1 joerg # By convention, finish your script with:
403 1.1 joerg #
404 1.1 joerg # exit $exit_status
405 1.1 joerg #
406 1.1 joerg # so that you can set exit_status to non-zero if you want to indicate
407 1.1 joerg # something went wrong during execution without actually bailing out at
408 1.1 joerg # the point of failure.
409 1.1 joerg exit_status=$EXIT_SUCCESS
410 1.1 joerg
411 1.1 joerg # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
412 1.1 joerg # is ksh but when the shell is invoked as "sh" and the current value of
413 1.1 joerg # the _XPG environment variable is not equal to 1 (one), the special
414 1.1 joerg # positional parameter $0, within a function call, is the name of the
415 1.1 joerg # function.
416 1.1 joerg progpath=$0
417 1.1 joerg
418 1.1 joerg # The name of this program.
419 1.1 joerg progname=`$ECHO "$progpath" |$SED "$sed_basename"`
420 1.1 joerg
421 1.1 joerg # Make sure we have an absolute progpath for reexecution:
422 1.1 joerg case $progpath in
423 1.1 joerg [\\/]*|[A-Za-z]:\\*) ;;
424 1.1 joerg *[\\/]*)
425 1.1 joerg progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
426 1.1 joerg progdir=`cd "$progdir" && pwd`
427 1.1 joerg progpath=$progdir/$progname
428 1.1 joerg ;;
429 1.1 joerg *)
430 1.1 joerg _G_IFS=$IFS
431 1.1 joerg IFS=${PATH_SEPARATOR-:}
432 1.1 joerg for progdir in $PATH; do
433 1.1 joerg IFS=$_G_IFS
434 1.1 joerg test -x "$progdir/$progname" && break
435 1.1 joerg done
436 1.1 joerg IFS=$_G_IFS
437 1.1 joerg test -n "$progdir" || progdir=`pwd`
438 1.1 joerg progpath=$progdir/$progname
439 1.1 joerg ;;
440 1.1 joerg esac
441 1.1 joerg
442 1.1 joerg
443 1.1 joerg ## ----------------- ##
444 1.1 joerg ## Standard options. ##
445 1.1 joerg ## ----------------- ##
446 1.1 joerg
447 1.1 joerg # The following options affect the operation of the functions defined
448 1.1 joerg # below, and should be set appropriately depending on run-time para-
449 1.1 joerg # meters passed on the command line.
450 1.1 joerg
451 1.1 joerg opt_dry_run=false
452 1.1 joerg opt_quiet=false
453 1.1 joerg opt_verbose=false
454 1.1 joerg
455 1.1 joerg # Categories 'all' and 'none' are always available. Append any others
456 1.1 joerg # you will pass as the first argument to func_warning from your own
457 1.1 joerg # code.
458 1.1 joerg warning_categories=
459 1.1 joerg
460 1.1 joerg # By default, display warnings according to 'opt_warning_types'. Set
461 1.1 joerg # 'warning_func' to ':' to elide all warnings, or func_fatal_error to
462 1.1 joerg # treat the next displayed warning as a fatal error.
463 1.1 joerg warning_func=func_warn_and_continue
464 1.1 joerg
465 1.1 joerg # Set to 'all' to display all warnings, 'none' to suppress all
466 1.1 joerg # warnings, or a space delimited list of some subset of
467 1.1 joerg # 'warning_categories' to display only the listed warnings.
468 1.1 joerg opt_warning_types=all
469 1.1 joerg
470 1.1 joerg
471 1.1 joerg ## -------------------- ##
472 1.1 joerg ## Resource management. ##
473 1.1 joerg ## -------------------- ##
474 1.1 joerg
475 1.1 joerg # This section contains definitions for functions that each ensure a
476 1.1 joerg # particular resource (a file, or a non-empty configuration variable for
477 1.1 joerg # example) is available, and if appropriate to extract default values
478 1.1 joerg # from pertinent package files. Call them using their associated
479 1.1 joerg # 'require_*' variable to ensure that they are executed, at most, once.
480 1.1 joerg #
481 1.1 joerg # It's entirely deliberate that calling these functions can set
482 1.1 joerg # variables that don't obey the namespace limitations obeyed by the rest
483 1.1 joerg # of this file, in order that that they be as useful as possible to
484 1.1 joerg # callers.
485 1.1 joerg
486 1.1 joerg
487 1.1 joerg # require_term_colors
488 1.1 joerg # -------------------
489 1.1 joerg # Allow display of bold text on terminals that support it.
490 1.1 joerg require_term_colors=func_require_term_colors
491 1.1 joerg func_require_term_colors ()
492 1.1 joerg {
493 1.1 joerg $debug_cmd
494 1.1 joerg
495 1.1 joerg test -t 1 && {
496 1.1 joerg # COLORTERM and USE_ANSI_COLORS environment variables take
497 1.1 joerg # precedence, because most terminfo databases neglect to describe
498 1.1 joerg # whether color sequences are supported.
499 1.1 joerg test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
500 1.1 joerg
501 1.1 joerg if test 1 = "$USE_ANSI_COLORS"; then
502 1.1 joerg # Standard ANSI escape sequences
503 1.1 joerg tc_reset='[0m'
504 1.1 joerg tc_bold='[1m'; tc_standout='[7m'
505 1.1 joerg tc_red='[31m'; tc_green='[32m'
506 1.1 joerg tc_blue='[34m'; tc_cyan='[36m'
507 1.1 joerg else
508 1.1 joerg # Otherwise trust the terminfo database after all.
509 1.1 joerg test -n "`tput sgr0 2>/dev/null`" && {
510 1.1 joerg tc_reset=`tput sgr0`
511 1.1 joerg test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
512 1.1 joerg tc_standout=$tc_bold
513 1.1 joerg test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
514 1.1 joerg test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
515 1.1 joerg test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
516 1.1 joerg test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
517 1.1 joerg test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
518 1.1 joerg }
519 1.1 joerg fi
520 1.1 joerg }
521 1.1 joerg
522 1.1 joerg require_term_colors=:
523 1.1 joerg }
524 1.1 joerg
525 1.1 joerg
526 1.1 joerg ## ----------------- ##
527 1.1 joerg ## Function library. ##
528 1.1 joerg ## ----------------- ##
529 1.1 joerg
530 1.1 joerg # This section contains a variety of useful functions to call in your
531 1.1 joerg # scripts. Take note of the portable wrappers for features provided by
532 1.1 joerg # some modern shells, which will fall back to slower equivalents on
533 1.1 joerg # less featureful shells.
534 1.1 joerg
535 1.1 joerg
536 1.1 joerg # func_append VAR VALUE
537 1.1 joerg # ---------------------
538 1.1 joerg # Append VALUE onto the existing contents of VAR.
539 1.1 joerg
540 1.1 joerg # We should try to minimise forks, especially on Windows where they are
541 1.1 joerg # unreasonably slow, so skip the feature probes when bash or zsh are
542 1.1 joerg # being used:
543 1.1 joerg if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
544 1.1 joerg : ${_G_HAVE_ARITH_OP="yes"}
545 1.1 joerg : ${_G_HAVE_XSI_OPS="yes"}
546 1.1 joerg # The += operator was introduced in bash 3.1
547 1.1 joerg case $BASH_VERSION in
548 1.1 joerg [12].* | 3.0 | 3.0*) ;;
549 1.1 joerg *)
550 1.1 joerg : ${_G_HAVE_PLUSEQ_OP="yes"}
551 1.1 joerg ;;
552 1.1 joerg esac
553 1.1 joerg fi
554 1.1 joerg
555 1.1 joerg # _G_HAVE_PLUSEQ_OP
556 1.1 joerg # Can be empty, in which case the shell is probed, "yes" if += is
557 1.1 joerg # useable or anything else if it does not work.
558 1.1 joerg test -z "$_G_HAVE_PLUSEQ_OP" \
559 1.1 joerg && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
560 1.1 joerg && _G_HAVE_PLUSEQ_OP=yes
561 1.1 joerg
562 1.1 joerg if test yes = "$_G_HAVE_PLUSEQ_OP"
563 1.1 joerg then
564 1.1 joerg # This is an XSI compatible shell, allowing a faster implementation...
565 1.1 joerg eval 'func_append ()
566 1.1 joerg {
567 1.1 joerg $debug_cmd
568 1.1 joerg
569 1.1 joerg eval "$1+=\$2"
570 1.1 joerg }'
571 1.1 joerg else
572 1.1 joerg # ...otherwise fall back to using expr, which is often a shell builtin.
573 1.1 joerg func_append ()
574 1.1 joerg {
575 1.1 joerg $debug_cmd
576 1.1 joerg
577 1.1 joerg eval "$1=\$$1\$2"
578 1.1 joerg }
579 1.1 joerg fi
580 1.1 joerg
581 1.1 joerg
582 1.1 joerg # func_append_quoted VAR VALUE
583 1.1 joerg # ----------------------------
584 1.1 joerg # Quote VALUE and append to the end of shell variable VAR, separated
585 1.1 joerg # by a space.
586 1.1 joerg if test yes = "$_G_HAVE_PLUSEQ_OP"; then
587 1.1 joerg eval 'func_append_quoted ()
588 1.1 joerg {
589 1.1 joerg $debug_cmd
590 1.1 joerg
591 1.1 joerg func_quote_arg pretty "$2"
592 1.1 joerg eval "$1+=\\ \$func_quote_arg_result"
593 1.1 joerg }'
594 1.1 joerg else
595 1.1 joerg func_append_quoted ()
596 1.1 joerg {
597 1.1 joerg $debug_cmd
598 1.1 joerg
599 1.1 joerg func_quote_arg pretty "$2"
600 1.1 joerg eval "$1=\$$1\\ \$func_quote_arg_result"
601 1.1 joerg }
602 1.1 joerg fi
603 1.1 joerg
604 1.1 joerg
605 1.1 joerg # func_append_uniq VAR VALUE
606 1.1 joerg # --------------------------
607 1.1 joerg # Append unique VALUE onto the existing contents of VAR, assuming
608 1.1 joerg # entries are delimited by the first character of VALUE. For example:
609 1.1 joerg #
610 1.1 joerg # func_append_uniq options " --another-option option-argument"
611 1.1 joerg #
612 1.1 joerg # will only append to $options if " --another-option option-argument "
613 1.1 joerg # is not already present somewhere in $options already (note spaces at
614 1.1 joerg # each end implied by leading space in second argument).
615 1.1 joerg func_append_uniq ()
616 1.1 joerg {
617 1.1 joerg $debug_cmd
618 1.1 joerg
619 1.1 joerg eval _G_current_value='`$ECHO $'$1'`'
620 1.1 joerg _G_delim=`expr "$2" : '\(.\)'`
621 1.1 joerg
622 1.1 joerg case $_G_delim$_G_current_value$_G_delim in
623 1.1 joerg *"$2$_G_delim"*) ;;
624 1.1 joerg *) func_append "$@" ;;
625 1.1 joerg esac
626 1.1 joerg }
627 1.1 joerg
628 1.1 joerg
629 1.1 joerg # func_arith TERM...
630 1.1 joerg # ------------------
631 1.1 joerg # Set func_arith_result to the result of evaluating TERMs.
632 1.1 joerg test -z "$_G_HAVE_ARITH_OP" \
633 1.1 joerg && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
634 1.1 joerg && _G_HAVE_ARITH_OP=yes
635 1.1 joerg
636 1.1 joerg if test yes = "$_G_HAVE_ARITH_OP"; then
637 1.1 joerg eval 'func_arith ()
638 1.1 joerg {
639 1.1 joerg $debug_cmd
640 1.1 joerg
641 1.1 joerg func_arith_result=$(( $* ))
642 1.1 joerg }'
643 1.1 joerg else
644 1.1 joerg func_arith ()
645 1.1 joerg {
646 1.1 joerg $debug_cmd
647 1.1 joerg
648 1.1 joerg func_arith_result=`expr "$@"`
649 1.1 joerg }
650 1.1 joerg fi
651 1.1 joerg
652 1.1 joerg
653 1.1 joerg # func_basename FILE
654 1.1 joerg # ------------------
655 1.1 joerg # Set func_basename_result to FILE with everything up to and including
656 1.1 joerg # the last / stripped.
657 1.1 joerg if test yes = "$_G_HAVE_XSI_OPS"; then
658 1.1 joerg # If this shell supports suffix pattern removal, then use it to avoid
659 1.1 joerg # forking. Hide the definitions single quotes in case the shell chokes
660 1.1 joerg # on unsupported syntax...
661 1.1 joerg _b='func_basename_result=${1##*/}'
662 1.1 joerg _d='case $1 in
663 1.1 joerg */*) func_dirname_result=${1%/*}$2 ;;
664 1.1 joerg * ) func_dirname_result=$3 ;;
665 1.1 joerg esac'
666 1.1 joerg
667 1.1 joerg else
668 1.1 joerg # ...otherwise fall back to using sed.
669 1.1 joerg _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
670 1.1 joerg _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"`
671 1.1 joerg if test "X$func_dirname_result" = "X$1"; then
672 1.1 joerg func_dirname_result=$3
673 1.1 joerg else
674 1.1 joerg func_append func_dirname_result "$2"
675 1.1 joerg fi'
676 1.1 joerg fi
677 1.1 joerg
678 1.1 joerg eval 'func_basename ()
679 1.1 joerg {
680 1.1 joerg $debug_cmd
681 1.1 joerg
682 1.1 joerg '"$_b"'
683 1.1 joerg }'
684 1.1 joerg
685 1.1 joerg
686 1.1 joerg # func_dirname FILE APPEND NONDIR_REPLACEMENT
687 1.1 joerg # -------------------------------------------
688 1.1 joerg # Compute the dirname of FILE. If nonempty, add APPEND to the result,
689 1.1 joerg # otherwise set result to NONDIR_REPLACEMENT.
690 1.1 joerg eval 'func_dirname ()
691 1.1 joerg {
692 1.1 joerg $debug_cmd
693 1.1 joerg
694 1.1 joerg '"$_d"'
695 1.1 joerg }'
696 1.1 joerg
697 1.1 joerg
698 1.1 joerg # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
699 1.1 joerg # --------------------------------------------------------
700 1.1 joerg # Perform func_basename and func_dirname in a single function
701 1.1 joerg # call:
702 1.1 joerg # dirname: Compute the dirname of FILE. If nonempty,
703 1.1 joerg # add APPEND to the result, otherwise set result
704 1.1 joerg # to NONDIR_REPLACEMENT.
705 1.1 joerg # value returned in "$func_dirname_result"
706 1.1 joerg # basename: Compute filename of FILE.
707 1.1 joerg # value retuned in "$func_basename_result"
708 1.1 joerg # For efficiency, we do not delegate to the functions above but instead
709 1.1 joerg # duplicate the functionality here.
710 1.1 joerg eval 'func_dirname_and_basename ()
711 1.1 joerg {
712 1.1 joerg $debug_cmd
713 1.1 joerg
714 1.1 joerg '"$_b"'
715 1.1 joerg '"$_d"'
716 1.1 joerg }'
717 1.1 joerg
718 1.1 joerg
719 1.1 joerg # func_echo ARG...
720 1.1 joerg # ----------------
721 1.1 joerg # Echo program name prefixed message.
722 1.1 joerg func_echo ()
723 1.1 joerg {
724 1.1 joerg $debug_cmd
725 1.1 joerg
726 1.1 joerg _G_message=$*
727 1.1 joerg
728 1.1 joerg func_echo_IFS=$IFS
729 1.1 joerg IFS=$nl
730 1.1 joerg for _G_line in $_G_message; do
731 1.1 joerg IFS=$func_echo_IFS
732 1.1 joerg $ECHO "$progname: $_G_line"
733 1.1 joerg done
734 1.1 joerg IFS=$func_echo_IFS
735 1.1 joerg }
736 1.1 joerg
737 1.1 joerg
738 1.1 joerg # func_echo_all ARG...
739 1.1 joerg # --------------------
740 1.1 joerg # Invoke $ECHO with all args, space-separated.
741 1.1 joerg func_echo_all ()
742 1.1 joerg {
743 1.1 joerg $ECHO "$*"
744 1.1 joerg }
745 1.1 joerg
746 1.1 joerg
747 1.1 joerg # func_echo_infix_1 INFIX ARG...
748 1.1 joerg # ------------------------------
749 1.1 joerg # Echo program name, followed by INFIX on the first line, with any
750 1.1 joerg # additional lines not showing INFIX.
751 1.1 joerg func_echo_infix_1 ()
752 1.1 joerg {
753 1.1 joerg $debug_cmd
754 1.1 joerg
755 1.1 joerg $require_term_colors
756 1.1 joerg
757 1.1 joerg _G_infix=$1; shift
758 1.1 joerg _G_indent=$_G_infix
759 1.1 joerg _G_prefix="$progname: $_G_infix: "
760 1.1 joerg _G_message=$*
761 1.1 joerg
762 1.1 joerg # Strip color escape sequences before counting printable length
763 1.1 joerg for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
764 1.1 joerg do
765 1.1 joerg test -n "$_G_tc" && {
766 1.1 joerg _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
767 1.1 joerg _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
768 1.1 joerg }
769 1.1 joerg done
770 1.1 joerg _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes
771 1.1 joerg
772 1.1 joerg func_echo_infix_1_IFS=$IFS
773 1.1 joerg IFS=$nl
774 1.1 joerg for _G_line in $_G_message; do
775 1.1 joerg IFS=$func_echo_infix_1_IFS
776 1.1 joerg $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
777 1.1 joerg _G_prefix=$_G_indent
778 1.1 joerg done
779 1.1 joerg IFS=$func_echo_infix_1_IFS
780 1.1 joerg }
781 1.1 joerg
782 1.1 joerg
783 1.1 joerg # func_error ARG...
784 1.1 joerg # -----------------
785 1.1 joerg # Echo program name prefixed message to standard error.
786 1.1 joerg func_error ()
787 1.1 joerg {
788 1.1 joerg $debug_cmd
789 1.1 joerg
790 1.1 joerg $require_term_colors
791 1.1 joerg
792 1.1 joerg func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2
793 1.1 joerg }
794 1.1 joerg
795 1.1 joerg
796 1.1 joerg # func_fatal_error ARG...
797 1.1 joerg # -----------------------
798 1.1 joerg # Echo program name prefixed message to standard error, and exit.
799 1.1 joerg func_fatal_error ()
800 1.1 joerg {
801 1.1 joerg $debug_cmd
802 1.1 joerg
803 1.1 joerg func_error "$*"
804 1.1 joerg exit $EXIT_FAILURE
805 1.1 joerg }
806 1.1 joerg
807 1.1 joerg
808 1.1 joerg # func_grep EXPRESSION FILENAME
809 1.1 joerg # -----------------------------
810 1.1 joerg # Check whether EXPRESSION matches any line of FILENAME, without output.
811 1.1 joerg func_grep ()
812 1.1 joerg {
813 1.1 joerg $debug_cmd
814 1.1 joerg
815 1.1 joerg $GREP "$1" "$2" >/dev/null 2>&1
816 1.1 joerg }
817 1.1 joerg
818 1.1 joerg
819 1.1 joerg # func_len STRING
820 1.1 joerg # ---------------
821 1.1 joerg # Set func_len_result to the length of STRING. STRING may not
822 1.1 joerg # start with a hyphen.
823 1.1 joerg test -z "$_G_HAVE_XSI_OPS" \
824 1.1 joerg && (eval 'x=a/b/c;
825 1.1 joerg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
826 1.1 joerg && _G_HAVE_XSI_OPS=yes
827 1.1 joerg
828 1.1 joerg if test yes = "$_G_HAVE_XSI_OPS"; then
829 1.1 joerg eval 'func_len ()
830 1.1 joerg {
831 1.1 joerg $debug_cmd
832 1.1 joerg
833 1.1 joerg func_len_result=${#1}
834 1.1 joerg }'
835 1.1 joerg else
836 1.1 joerg func_len ()
837 1.1 joerg {
838 1.1 joerg $debug_cmd
839 1.1 joerg
840 1.1 joerg func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
841 1.1 joerg }
842 1.1 joerg fi
843 1.1 joerg
844 1.1 joerg
845 1.1 joerg # func_mkdir_p DIRECTORY-PATH
846 1.1 joerg # ---------------------------
847 1.1 joerg # Make sure the entire path to DIRECTORY-PATH is available.
848 1.1 joerg func_mkdir_p ()
849 1.1 joerg {
850 1.1 joerg $debug_cmd
851 1.1 joerg
852 1.1 joerg _G_directory_path=$1
853 1.1 joerg _G_dir_list=
854 1.1 joerg
855 1.1 joerg if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
856 1.1 joerg
857 1.1 joerg # Protect directory names starting with '-'
858 1.1 joerg case $_G_directory_path in
859 1.1 joerg -*) _G_directory_path=./$_G_directory_path ;;
860 1.1 joerg esac
861 1.1 joerg
862 1.1 joerg # While some portion of DIR does not yet exist...
863 1.1 joerg while test ! -d "$_G_directory_path"; do
864 1.1 joerg # ...make a list in topmost first order. Use a colon delimited
865 1.1 joerg # list incase some portion of path contains whitespace.
866 1.1 joerg _G_dir_list=$_G_directory_path:$_G_dir_list
867 1.1 joerg
868 1.1 joerg # If the last portion added has no slash in it, the list is done
869 1.1 joerg case $_G_directory_path in */*) ;; *) break ;; esac
870 1.1 joerg
871 1.1 joerg # ...otherwise throw away the child directory and loop
872 1.1 joerg _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
873 1.1 joerg done
874 1.1 joerg _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
875 1.1 joerg
876 1.1 joerg func_mkdir_p_IFS=$IFS; IFS=:
877 1.1 joerg for _G_dir in $_G_dir_list; do
878 1.1 joerg IFS=$func_mkdir_p_IFS
879 1.1 joerg # mkdir can fail with a 'File exist' error if two processes
880 1.1 joerg # try to create one of the directories concurrently. Don't
881 1.1 joerg # stop in that case!
882 1.1 joerg $MKDIR "$_G_dir" 2>/dev/null || :
883 1.1 joerg done
884 1.1 joerg IFS=$func_mkdir_p_IFS
885 1.1 joerg
886 1.1 joerg # Bail out if we (or some other process) failed to create a directory.
887 1.1 joerg test -d "$_G_directory_path" || \
888 1.1 joerg func_fatal_error "Failed to create '$1'"
889 1.1 joerg fi
890 1.1 joerg }
891 1.1 joerg
892 1.1 joerg
893 1.1 joerg # func_mktempdir [BASENAME]
894 1.1 joerg # -------------------------
895 1.1 joerg # Make a temporary directory that won't clash with other running
896 1.1 joerg # libtool processes, and avoids race conditions if possible. If
897 1.1 joerg # given, BASENAME is the basename for that directory.
898 1.1 joerg func_mktempdir ()
899 1.1 joerg {
900 1.1 joerg $debug_cmd
901 1.1 joerg
902 1.1 joerg _G_template=${TMPDIR-/tmp}/${1-$progname}
903 1.1 joerg
904 1.1 joerg if test : = "$opt_dry_run"; then
905 1.1 joerg # Return a directory name, but don't create it in dry-run mode
906 1.1 joerg _G_tmpdir=$_G_template-$$
907 1.1 joerg else
908 1.1 joerg
909 1.1 joerg # If mktemp works, use that first and foremost
910 1.1 joerg _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
911 1.1 joerg
912 1.1 joerg if test ! -d "$_G_tmpdir"; then
913 1.1 joerg # Failing that, at least try and use $RANDOM to avoid a race
914 1.1 joerg _G_tmpdir=$_G_template-${RANDOM-0}$$
915 1.1 joerg
916 1.1 joerg func_mktempdir_umask=`umask`
917 1.1 joerg umask 0077
918 1.1 joerg $MKDIR "$_G_tmpdir"
919 1.1 joerg umask $func_mktempdir_umask
920 1.1 joerg fi
921 1.1 joerg
922 1.1 joerg # If we're not in dry-run mode, bomb out on failure
923 1.1 joerg test -d "$_G_tmpdir" || \
924 1.1 joerg func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
925 1.1 joerg fi
926 1.1 joerg
927 1.1 joerg $ECHO "$_G_tmpdir"
928 1.1 joerg }
929 1.1 joerg
930 1.1 joerg
931 1.1 joerg # func_normal_abspath PATH
932 1.1 joerg # ------------------------
933 1.1 joerg # Remove doubled-up and trailing slashes, "." path components,
934 1.1 joerg # and cancel out any ".." path components in PATH after making
935 1.1 joerg # it an absolute path.
936 1.1 joerg func_normal_abspath ()
937 1.1 joerg {
938 1.1 joerg $debug_cmd
939 1.1 joerg
940 1.1 joerg # These SED scripts presuppose an absolute path with a trailing slash.
941 1.1 joerg _G_pathcar='s|^/\([^/]*\).*$|\1|'
942 1.1 joerg _G_pathcdr='s|^/[^/]*||'
943 1.1 joerg _G_removedotparts=':dotsl
944 1.1 joerg s|/\./|/|g
945 1.1 joerg t dotsl
946 1.1 joerg s|/\.$|/|'
947 1.1 joerg _G_collapseslashes='s|/\{1,\}|/|g'
948 1.1 joerg _G_finalslash='s|/*$|/|'
949 1.1 joerg
950 1.1 joerg # Start from root dir and reassemble the path.
951 1.1 joerg func_normal_abspath_result=
952 1.1 joerg func_normal_abspath_tpath=$1
953 1.1 joerg func_normal_abspath_altnamespace=
954 1.1 joerg case $func_normal_abspath_tpath in
955 1.1 joerg "")
956 1.1 joerg # Empty path, that just means $cwd.
957 1.1 joerg func_stripname '' '/' "`pwd`"
958 1.1 joerg func_normal_abspath_result=$func_stripname_result
959 1.1 joerg return
960 1.1 joerg ;;
961 1.1 joerg # The next three entries are used to spot a run of precisely
962 1.1 joerg # two leading slashes without using negated character classes;
963 1.1 joerg # we take advantage of case's first-match behaviour.
964 1.1 joerg ///*)
965 1.1 joerg # Unusual form of absolute path, do nothing.
966 1.1 joerg ;;
967 1.1 joerg //*)
968 1.1 joerg # Not necessarily an ordinary path; POSIX reserves leading '//'
969 1.1 joerg # and for example Cygwin uses it to access remote file shares
970 1.1 joerg # over CIFS/SMB, so we conserve a leading double slash if found.
971 1.1 joerg func_normal_abspath_altnamespace=/
972 1.1 joerg ;;
973 1.1 joerg /*)
974 1.1 joerg # Absolute path, do nothing.
975 1.1 joerg ;;
976 1.1 joerg *)
977 1.1 joerg # Relative path, prepend $cwd.
978 1.1 joerg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
979 1.1 joerg ;;
980 1.1 joerg esac
981 1.1 joerg
982 1.1 joerg # Cancel out all the simple stuff to save iterations. We also want
983 1.1 joerg # the path to end with a slash for ease of parsing, so make sure
984 1.1 joerg # there is one (and only one) here.
985 1.1 joerg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
986 1.1 joerg -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
987 1.1 joerg while :; do
988 1.1 joerg # Processed it all yet?
989 1.1 joerg if test / = "$func_normal_abspath_tpath"; then
990 1.1 joerg # If we ascended to the root using ".." the result may be empty now.
991 1.1 joerg if test -z "$func_normal_abspath_result"; then
992 1.1 joerg func_normal_abspath_result=/
993 1.1 joerg fi
994 1.1 joerg break
995 1.1 joerg fi
996 1.1 joerg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
997 1.1 joerg -e "$_G_pathcar"`
998 1.1 joerg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
999 1.1 joerg -e "$_G_pathcdr"`
1000 1.1 joerg # Figure out what to do with it
1001 1.1 joerg case $func_normal_abspath_tcomponent in
1002 1.1 joerg "")
1003 1.1 joerg # Trailing empty path component, ignore it.
1004 1.1 joerg ;;
1005 1.1 joerg ..)
1006 1.1 joerg # Parent dir; strip last assembled component from result.
1007 1.1 joerg func_dirname "$func_normal_abspath_result"
1008 1.1 joerg func_normal_abspath_result=$func_dirname_result
1009 1.1 joerg ;;
1010 1.1 joerg *)
1011 1.1 joerg # Actual path component, append it.
1012 1.1 joerg func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
1013 1.1 joerg ;;
1014 1.1 joerg esac
1015 1.1 joerg done
1016 1.1 joerg # Restore leading double-slash if one was found on entry.
1017 1.1 joerg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
1018 1.1 joerg }
1019 1.1 joerg
1020 1.1 joerg
1021 1.1 joerg # func_notquiet ARG...
1022 1.1 joerg # --------------------
1023 1.1 joerg # Echo program name prefixed message only when not in quiet mode.
1024 1.1 joerg func_notquiet ()
1025 1.1 joerg {
1026 1.1 joerg $debug_cmd
1027 1.1 joerg
1028 1.1 joerg $opt_quiet || func_echo ${1+"$@"}
1029 1.1 joerg
1030 1.1 joerg # A bug in bash halts the script if the last line of a function
1031 1.1 joerg # fails when set -e is in force, so we need another command to
1032 1.1 joerg # work around that:
1033 1.1 joerg :
1034 1.1 joerg }
1035 1.1 joerg
1036 1.1 joerg
1037 1.1 joerg # func_relative_path SRCDIR DSTDIR
1038 1.1 joerg # --------------------------------
1039 1.1 joerg # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
1040 1.1 joerg func_relative_path ()
1041 1.1 joerg {
1042 1.1 joerg $debug_cmd
1043 1.1 joerg
1044 1.1 joerg func_relative_path_result=
1045 1.1 joerg func_normal_abspath "$1"
1046 1.1 joerg func_relative_path_tlibdir=$func_normal_abspath_result
1047 1.1 joerg func_normal_abspath "$2"
1048 1.1 joerg func_relative_path_tbindir=$func_normal_abspath_result
1049 1.1 joerg
1050 1.1 joerg # Ascend the tree starting from libdir
1051 1.1 joerg while :; do
1052 1.1 joerg # check if we have found a prefix of bindir
1053 1.1 joerg case $func_relative_path_tbindir in
1054 1.1 joerg $func_relative_path_tlibdir)
1055 1.1 joerg # found an exact match
1056 1.1 joerg func_relative_path_tcancelled=
1057 1.1 joerg break
1058 1.1 joerg ;;
1059 1.1 joerg $func_relative_path_tlibdir*)
1060 1.1 joerg # found a matching prefix
1061 1.1 joerg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
1062 1.1 joerg func_relative_path_tcancelled=$func_stripname_result
1063 1.1 joerg if test -z "$func_relative_path_result"; then
1064 1.1 joerg func_relative_path_result=.
1065 1.1 joerg fi
1066 1.1 joerg break
1067 1.1 joerg ;;
1068 1.1 joerg *)
1069 1.1 joerg func_dirname $func_relative_path_tlibdir
1070 1.1 joerg func_relative_path_tlibdir=$func_dirname_result
1071 1.1 joerg if test -z "$func_relative_path_tlibdir"; then
1072 1.1 joerg # Have to descend all the way to the root!
1073 1.1 joerg func_relative_path_result=../$func_relative_path_result
1074 1.1 joerg func_relative_path_tcancelled=$func_relative_path_tbindir
1075 1.1 joerg break
1076 1.1 joerg fi
1077 1.1 joerg func_relative_path_result=../$func_relative_path_result
1078 1.1 joerg ;;
1079 1.1 joerg esac
1080 1.1 joerg done
1081 1.1 joerg
1082 1.1 joerg # Now calculate path; take care to avoid doubling-up slashes.
1083 1.1 joerg func_stripname '' '/' "$func_relative_path_result"
1084 1.1 joerg func_relative_path_result=$func_stripname_result
1085 1.1 joerg func_stripname '/' '/' "$func_relative_path_tcancelled"
1086 1.1 joerg if test -n "$func_stripname_result"; then
1087 1.1 joerg func_append func_relative_path_result "/$func_stripname_result"
1088 1.1 joerg fi
1089 1.1 joerg
1090 1.1 joerg # Normalisation. If bindir is libdir, return '.' else relative path.
1091 1.1 joerg if test -n "$func_relative_path_result"; then
1092 1.1 joerg func_stripname './' '' "$func_relative_path_result"
1093 1.1 joerg func_relative_path_result=$func_stripname_result
1094 1.1 joerg fi
1095 1.1 joerg
1096 1.1 joerg test -n "$func_relative_path_result" || func_relative_path_result=.
1097 1.1 joerg
1098 1.1 joerg :
1099 1.1 joerg }
1100 1.1 joerg
1101 1.1 joerg
1102 1.1 joerg # func_quote_portable EVAL ARG
1103 1.1 joerg # ----------------------------
1104 1.1 joerg # Internal function to portably implement func_quote_arg. Note that we still
1105 1.1 joerg # keep attention to performance here so we as much as possible try to avoid
1106 1.1 joerg # calling sed binary (so far O(N) complexity as long as func_append is O(1)).
1107 1.1 joerg func_quote_portable ()
1108 1.1 joerg {
1109 1.1 joerg $debug_cmd
1110 1.1 joerg
1111 1.1 joerg func_quote_portable_result=$2
1112 1.1 joerg
1113 1.1 joerg # one-time-loop (easy break)
1114 1.1 joerg while true
1115 1.1 joerg do
1116 1.1 joerg if $1; then
1117 1.1 joerg func_quote_portable_result=`$ECHO "$2" | $SED \
1118 1.1 joerg -e "$sed_double_quote_subst" -e "$sed_double_backslash"`
1119 1.1 joerg break
1120 1.1 joerg fi
1121 1.1 joerg
1122 1.1 joerg # Quote for eval.
1123 1.1 joerg case $func_quote_portable_result in
1124 1.1 joerg *[\\\`\"\$]*)
1125 1.1 joerg case $func_quote_portable_result in
1126 1.1 joerg *[\[\*\?]*)
1127 1.1 joerg func_quote_portable_result=`$ECHO "$func_quote_portable_result" \
1128 1.1 joerg | $SED "$sed_quote_subst"`
1129 1.1 joerg break
1130 1.1 joerg ;;
1131 1.1 joerg esac
1132 1.1 joerg
1133 1.1 joerg func_quote_portable_old_IFS=$IFS
1134 1.1 joerg for _G_char in '\' '`' '"' '$'
1135 1.1 joerg do
1136 1.1 joerg # STATE($1) PREV($2) SEPARATOR($3)
1137 1.1 joerg set start "" ""
1138 1.1 joerg func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy
1139 1.1 joerg IFS=$_G_char
1140 1.1 joerg for _G_part in $func_quote_portable_result
1141 1.1 joerg do
1142 1.1 joerg case $1 in
1143 1.1 joerg quote)
1144 1.1 joerg func_append func_quote_portable_result "$3$2"
1145 1.1 joerg set quote "$_G_part" "\\$_G_char"
1146 1.1 joerg ;;
1147 1.1 joerg start)
1148 1.1 joerg set first "" ""
1149 1.1 joerg func_quote_portable_result=
1150 1.1 joerg ;;
1151 1.1 joerg first)
1152 1.1 joerg set quote "$_G_part" ""
1153 1.1 joerg ;;
1154 1.1 joerg esac
1155 1.1 joerg done
1156 1.1 joerg done
1157 1.1 joerg IFS=$func_quote_portable_old_IFS
1158 1.1 joerg ;;
1159 1.1 joerg *) ;;
1160 1.1 joerg esac
1161 1.1 joerg break
1162 1.1 joerg done
1163 1.1 joerg
1164 1.1 joerg func_quote_portable_unquoted_result=$func_quote_portable_result
1165 1.1 joerg case $func_quote_portable_result in
1166 1.1 joerg # double-quote args containing shell metacharacters to delay
1167 1.1 joerg # word splitting, command substitution and variable expansion
1168 1.1 joerg # for a subsequent eval.
1169 1.1 joerg # many bourne shells cannot handle close brackets correctly
1170 1.1 joerg # in scan sets, so we specify it separately.
1171 1.1 joerg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
1172 1.1 joerg func_quote_portable_result=\"$func_quote_portable_result\"
1173 1.1 joerg ;;
1174 1.1 joerg esac
1175 1.1 joerg }
1176 1.1 joerg
1177 1.1 joerg
1178 1.1 joerg # func_quotefast_eval ARG
1179 1.1 joerg # -----------------------
1180 1.1 joerg # Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG',
1181 1.1 joerg # but optimized for speed. Result is stored in $func_quotefast_eval.
1182 1.1 joerg if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then
1183 1.1 joerg printf -v _GL_test_printf_tilde %q '~'
1184 1.1 joerg if test '\~' = "$_GL_test_printf_tilde"; then
1185 1.1 joerg func_quotefast_eval ()
1186 1.1 joerg {
1187 1.1 joerg printf -v func_quotefast_eval_result %q "$1"
1188 1.1 joerg }
1189 1.1 joerg else
1190 1.1 joerg # Broken older Bash implementations. Make those faster too if possible.
1191 1.1 joerg func_quotefast_eval ()
1192 1.1 joerg {
1193 1.1 joerg case $1 in
1194 1.1 joerg '~'*)
1195 1.1 joerg func_quote_portable false "$1"
1196 1.1 joerg func_quotefast_eval_result=$func_quote_portable_result
1197 1.1 joerg ;;
1198 1.1 joerg *)
1199 1.1 joerg printf -v func_quotefast_eval_result %q "$1"
1200 1.1 joerg ;;
1201 1.1 joerg esac
1202 1.1 joerg }
1203 1.1 joerg fi
1204 1.1 joerg else
1205 1.1 joerg func_quotefast_eval ()
1206 1.1 joerg {
1207 1.1 joerg func_quote_portable false "$1"
1208 1.1 joerg func_quotefast_eval_result=$func_quote_portable_result
1209 1.1 joerg }
1210 1.1 joerg fi
1211 1.1 joerg
1212 1.1 joerg
1213 1.1 joerg # func_quote_arg MODEs ARG
1214 1.1 joerg # ------------------------
1215 1.1 joerg # Quote one ARG to be evaled later. MODEs argument may contain zero or more
1216 1.1 joerg # specifiers listed below separated by ',' character. This function returns two
1217 1.1 joerg # values:
1218 1.1 joerg # i) func_quote_arg_result
1219 1.1 joerg # double-quoted (when needed), suitable for a subsequent eval
1220 1.1 joerg # ii) func_quote_arg_unquoted_result
1221 1.1 joerg # has all characters that are still active within double
1222 1.1 joerg # quotes backslashified. Available only if 'unquoted' is specified.
1223 1.1 joerg #
1224 1.1 joerg # Available modes:
1225 1.1 joerg # ----------------
1226 1.1 joerg # 'eval' (default)
1227 1.1 joerg # - escape shell special characters
1228 1.1 joerg # 'expand'
1229 1.1 joerg # - the same as 'eval'; but do not quote variable references
1230 1.1 joerg # 'pretty'
1231 1.1 joerg # - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might
1232 1.1 joerg # be used later in func_quote to get output like: 'echo "a b"' instead
1233 1.1 joerg # of 'echo a\ b'. This is slower than default on some shells.
1234 1.1 joerg # 'unquoted'
1235 1.1 joerg # - produce also $func_quote_arg_unquoted_result which does not contain
1236 1.1 joerg # wrapping double-quotes.
1237 1.1 joerg #
1238 1.1 joerg # Examples for 'func_quote_arg pretty,unquoted string':
1239 1.1 joerg #
1240 1.1 joerg # string | *_result | *_unquoted_result
1241 1.1 joerg # ------------+-----------------------+-------------------
1242 1.1 joerg # " | \" | \"
1243 1.1 joerg # a b | "a b" | a b
1244 1.1 joerg # "a b" | "\"a b\"" | \"a b\"
1245 1.1 joerg # * | "*" | *
1246 1.1 joerg # z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\"
1247 1.1 joerg #
1248 1.1 joerg # Examples for 'func_quote_arg pretty,unquoted,expand string':
1249 1.1 joerg #
1250 1.1 joerg # string | *_result | *_unquoted_result
1251 1.1 joerg # --------------+---------------------+--------------------
1252 1.1 joerg # z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\"
1253 1.1 joerg func_quote_arg ()
1254 1.1 joerg {
1255 1.1 joerg _G_quote_expand=false
1256 1.1 joerg case ,$1, in
1257 1.1 joerg *,expand,*)
1258 1.1 joerg _G_quote_expand=:
1259 1.1 joerg ;;
1260 1.1 joerg esac
1261 1.1 joerg
1262 1.1 joerg case ,$1, in
1263 1.1 joerg *,pretty,*|*,expand,*|*,unquoted,*)
1264 1.1 joerg func_quote_portable $_G_quote_expand "$2"
1265 1.1 joerg func_quote_arg_result=$func_quote_portable_result
1266 1.1 joerg func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result
1267 1.1 joerg ;;
1268 1.1 joerg *)
1269 1.1 joerg # Faster quote-for-eval for some shells.
1270 1.1 joerg func_quotefast_eval "$2"
1271 1.1 joerg func_quote_arg_result=$func_quotefast_eval_result
1272 1.1 joerg ;;
1273 1.1 joerg esac
1274 1.1 joerg }
1275 1.1 joerg
1276 1.1 joerg
1277 1.1 joerg # func_quote MODEs ARGs...
1278 1.1 joerg # ------------------------
1279 1.1 joerg # Quote all ARGs to be evaled later and join them into single command. See
1280 1.1 joerg # func_quote_arg's description for more info.
1281 1.1 joerg func_quote ()
1282 1.1 joerg {
1283 1.1 joerg $debug_cmd
1284 1.1 joerg _G_func_quote_mode=$1 ; shift
1285 1.1 joerg func_quote_result=
1286 1.1 joerg while test 0 -lt $#; do
1287 1.1 joerg func_quote_arg "$_G_func_quote_mode" "$1"
1288 1.1 joerg if test -n "$func_quote_result"; then
1289 1.1 joerg func_append func_quote_result " $func_quote_arg_result"
1290 1.1 joerg else
1291 1.1 joerg func_append func_quote_result "$func_quote_arg_result"
1292 1.1 joerg fi
1293 1.1 joerg shift
1294 1.1 joerg done
1295 1.1 joerg }
1296 1.1 joerg
1297 1.1 joerg
1298 1.1 joerg # func_stripname PREFIX SUFFIX NAME
1299 1.1 joerg # ---------------------------------
1300 1.1 joerg # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
1301 1.1 joerg # PREFIX and SUFFIX must not contain globbing or regex special
1302 1.1 joerg # characters, hashes, percent signs, but SUFFIX may contain a leading
1303 1.1 joerg # dot (in which case that matches only a dot).
1304 1.1 joerg if test yes = "$_G_HAVE_XSI_OPS"; then
1305 1.1 joerg eval 'func_stripname ()
1306 1.1 joerg {
1307 1.1 joerg $debug_cmd
1308 1.1 joerg
1309 1.1 joerg # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
1310 1.1 joerg # positional parameters, so assign one to ordinary variable first.
1311 1.1 joerg func_stripname_result=$3
1312 1.1 joerg func_stripname_result=${func_stripname_result#"$1"}
1313 1.1 joerg func_stripname_result=${func_stripname_result%"$2"}
1314 1.1 joerg }'
1315 1.1 joerg else
1316 1.1 joerg func_stripname ()
1317 1.1 joerg {
1318 1.1 joerg $debug_cmd
1319 1.1 joerg
1320 1.1 joerg case $2 in
1321 1.1 joerg .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
1322 1.1 joerg *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
1323 1.1 joerg esac
1324 1.1 joerg }
1325 1.1 joerg fi
1326 1.1 joerg
1327 1.1 joerg
1328 1.1 joerg # func_show_eval CMD [FAIL_EXP]
1329 1.1 joerg # -----------------------------
1330 1.1 joerg # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
1331 1.1 joerg # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
1332 1.1 joerg # is given, then evaluate it.
1333 1.1 joerg func_show_eval ()
1334 1.1 joerg {
1335 1.1 joerg $debug_cmd
1336 1.1 joerg
1337 1.1 joerg _G_cmd=$1
1338 1.1 joerg _G_fail_exp=${2-':'}
1339 1.1 joerg
1340 1.1 joerg func_quote_arg pretty,expand "$_G_cmd"
1341 1.1 joerg eval "func_notquiet $func_quote_arg_result"
1342 1.1 joerg
1343 1.1 joerg $opt_dry_run || {
1344 1.1 joerg eval "$_G_cmd"
1345 1.1 joerg _G_status=$?
1346 1.1 joerg if test 0 -ne "$_G_status"; then
1347 1.1 joerg eval "(exit $_G_status); $_G_fail_exp"
1348 1.1 joerg fi
1349 1.1 joerg }
1350 1.1 joerg }
1351 1.1 joerg
1352 1.1 joerg
1353 1.1 joerg # func_show_eval_locale CMD [FAIL_EXP]
1354 1.1 joerg # ------------------------------------
1355 1.1 joerg # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
1356 1.1 joerg # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
1357 1.1 joerg # is given, then evaluate it. Use the saved locale for evaluation.
1358 1.1 joerg func_show_eval_locale ()
1359 1.1 joerg {
1360 1.1 joerg $debug_cmd
1361 1.1 joerg
1362 1.1 joerg _G_cmd=$1
1363 1.1 joerg _G_fail_exp=${2-':'}
1364 1.1 joerg
1365 1.1 joerg $opt_quiet || {
1366 1.1 joerg func_quote_arg expand,pretty "$_G_cmd"
1367 1.1 joerg eval "func_echo $func_quote_arg_result"
1368 1.1 joerg }
1369 1.1 joerg
1370 1.1 joerg $opt_dry_run || {
1371 1.1 joerg eval "$_G_user_locale
1372 1.1 joerg $_G_cmd"
1373 1.1 joerg _G_status=$?
1374 1.1 joerg eval "$_G_safe_locale"
1375 1.1 joerg if test 0 -ne "$_G_status"; then
1376 1.1 joerg eval "(exit $_G_status); $_G_fail_exp"
1377 1.1 joerg fi
1378 1.1 joerg }
1379 1.1 joerg }
1380 1.1 joerg
1381 1.1 joerg
1382 1.1 joerg # func_tr_sh
1383 1.1 joerg # ----------
1384 1.1 joerg # Turn $1 into a string suitable for a shell variable name.
1385 1.1 joerg # Result is stored in $func_tr_sh_result. All characters
1386 1.1 joerg # not in the set a-zA-Z0-9_ are replaced with '_'. Further,
1387 1.1 joerg # if $1 begins with a digit, a '_' is prepended as well.
1388 1.1 joerg func_tr_sh ()
1389 1.1 joerg {
1390 1.1 joerg $debug_cmd
1391 1.1 joerg
1392 1.1 joerg case $1 in
1393 1.1 joerg [0-9]* | *[!a-zA-Z0-9_]*)
1394 1.1 joerg func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
1395 1.1 joerg ;;
1396 1.1 joerg * )
1397 1.1 joerg func_tr_sh_result=$1
1398 1.1 joerg ;;
1399 1.1 joerg esac
1400 1.1 joerg }
1401 1.1 joerg
1402 1.1 joerg
1403 1.1 joerg # func_verbose ARG...
1404 1.1 joerg # -------------------
1405 1.1 joerg # Echo program name prefixed message in verbose mode only.
1406 1.1 joerg func_verbose ()
1407 1.1 joerg {
1408 1.1 joerg $debug_cmd
1409 1.1 joerg
1410 1.1 joerg $opt_verbose && func_echo "$*"
1411 1.1 joerg
1412 1.1 joerg :
1413 1.1 joerg }
1414 1.1 joerg
1415 1.1 joerg
1416 1.1 joerg # func_warn_and_continue ARG...
1417 1.1 joerg # -----------------------------
1418 1.1 joerg # Echo program name prefixed warning message to standard error.
1419 1.1 joerg func_warn_and_continue ()
1420 1.1 joerg {
1421 1.1 joerg $debug_cmd
1422 1.1 joerg
1423 1.1 joerg $require_term_colors
1424 1.1 joerg
1425 1.1 joerg func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
1426 1.1 joerg }
1427 1.1 joerg
1428 1.1 joerg
1429 1.1 joerg # func_warning CATEGORY ARG...
1430 1.1 joerg # ----------------------------
1431 1.1 joerg # Echo program name prefixed warning message to standard error. Warning
1432 1.1 joerg # messages can be filtered according to CATEGORY, where this function
1433 1.1 joerg # elides messages where CATEGORY is not listed in the global variable
1434 1.1 joerg # 'opt_warning_types'.
1435 1.1 joerg func_warning ()
1436 1.1 joerg {
1437 1.1 joerg $debug_cmd
1438 1.1 joerg
1439 1.1 joerg # CATEGORY must be in the warning_categories list!
1440 1.1 joerg case " $warning_categories " in
1441 1.1 joerg *" $1 "*) ;;
1442 1.1 joerg *) func_internal_error "invalid warning category '$1'" ;;
1443 1.1 joerg esac
1444 1.1 joerg
1445 1.1 joerg _G_category=$1
1446 1.1 joerg shift
1447 1.1 joerg
1448 1.1 joerg case " $opt_warning_types " in
1449 1.1 joerg *" $_G_category "*) $warning_func ${1+"$@"} ;;
1450 1.1 joerg esac
1451 1.1 joerg }
1452 1.1 joerg
1453 1.1 joerg
1454 1.1 joerg # func_sort_ver VER1 VER2
1455 1.1 joerg # -----------------------
1456 1.1 joerg # 'sort -V' is not generally available.
1457 1.1 joerg # Note this deviates from the version comparison in automake
1458 1.1 joerg # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
1459 1.1 joerg # but this should suffice as we won't be specifying old
1460 1.1 joerg # version formats or redundant trailing .0 in bootstrap.conf.
1461 1.1 joerg # If we did want full compatibility then we should probably
1462 1.1 joerg # use m4_version_compare from autoconf.
1463 1.1 joerg func_sort_ver ()
1464 1.1 joerg {
1465 1.1 joerg $debug_cmd
1466 1.1 joerg
1467 1.1 joerg printf '%s\n%s\n' "$1" "$2" \
1468 1.1 joerg | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n
1469 1.1 joerg }
1470 1.1 joerg
1471 1.1 joerg # func_lt_ver PREV CURR
1472 1.1 joerg # ---------------------
1473 1.1 joerg # Return true if PREV and CURR are in the correct order according to
1474 1.1 joerg # func_sort_ver, otherwise false. Use it like this:
1475 1.1 joerg #
1476 1.1 joerg # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
1477 1.1 joerg func_lt_ver ()
1478 1.1 joerg {
1479 1.1 joerg $debug_cmd
1480 1.1 joerg
1481 1.1 joerg test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
1482 1.1 joerg }
1483 1.1 joerg
1484 1.1 joerg
1485 1.1 joerg # Local variables:
1486 1.1 joerg # mode: shell-script
1487 1.1 joerg # sh-indentation: 2
1488 1.1 joerg # eval: (add-hook 'before-save-hook 'time-stamp)
1489 1.1 joerg # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
1490 1.1 joerg # time-stamp-time-zone: "UTC"
1491 1.1 joerg # End:
1492 1.1 joerg #! /bin/sh
1493 1.1 joerg
1494 1.1 joerg # A portable, pluggable option parser for Bourne shell.
1495 1.1 joerg # Written by Gary V. Vaughan, 2010
1496 1.1 joerg
1497 1.1 joerg # This is free software. There is NO warranty; not even for
1498 1.1 joerg # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1499 1.1 joerg #
1500 1.1 joerg # Copyright (C) 2010-2017 Bootstrap Authors
1501 1.1 joerg #
1502 1.1 joerg # This file is dual licensed under the terms of the MIT license
1503 1.1 joerg # <https://opensource.org/license/MIT>, and GPL version 3 or later
1504 1.1 joerg # <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
1505 1.1 joerg # these licenses when using or redistributing this software or any of
1506 1.1 joerg # the files within it. See the URLs above, or the file `LICENSE`
1507 1.1 joerg # included in the Bootstrap distribution for the full license texts.
1508 1.1 joerg
1509 1.1 joerg # Please report bugs or propose patches to:
1510 1.1 joerg # <https://github.com/gnulib-modules/bootstrap/issues>
1511 1.1 joerg
1512 1.1 joerg # Set a version string for this script.
1513 1.1 joerg scriptversion=2016-03-06.01; # UTC
1514 1.1 joerg
1515 1.1 joerg
1516 1.1 joerg ## ------ ##
1517 1.1 joerg ## Usage. ##
1518 1.1 joerg ## ------ ##
1519 1.1 joerg
1520 1.1 joerg # This file is a library for parsing options in your shell scripts along
1521 1.1 joerg # with assorted other useful supporting features that you can make use
1522 1.1 joerg # of too.
1523 1.1 joerg #
1524 1.1 joerg # For the simplest scripts you might need only:
1525 1.1 joerg #
1526 1.1 joerg # #!/bin/sh
1527 1.1 joerg # . relative/path/to/funclib.sh
1528 1.1 joerg # . relative/path/to/options-parser
1529 1.1 joerg # scriptversion=1.0
1530 1.1 joerg # func_options ${1+"$@"}
1531 1.1 joerg # eval set dummy "$func_options_result"; shift
1532 1.1 joerg # ...rest of your script...
1533 1.1 joerg #
1534 1.1 joerg # In order for the '--version' option to work, you will need to have a
1535 1.1 joerg # suitably formatted comment like the one at the top of this file
1536 1.1 joerg # starting with '# Written by ' and ending with '# Copyright'.
1537 1.1 joerg #
1538 1.1 joerg # For '-h' and '--help' to work, you will also need a one line
1539 1.1 joerg # description of your script's purpose in a comment directly above the
1540 1.1 joerg # '# Written by ' line, like the one at the top of this file.
1541 1.1 joerg #
1542 1.1 joerg # The default options also support '--debug', which will turn on shell
1543 1.1 joerg # execution tracing (see the comment above debug_cmd below for another
1544 1.1 joerg # use), and '--verbose' and the func_verbose function to allow your script
1545 1.1 joerg # to display verbose messages only when your user has specified
1546 1.1 joerg # '--verbose'.
1547 1.1 joerg #
1548 1.1 joerg # After sourcing this file, you can plug in processing for additional
1549 1.1 joerg # options by amending the variables from the 'Configuration' section
1550 1.1 joerg # below, and following the instructions in the 'Option parsing'
1551 1.1 joerg # section further down.
1552 1.1 joerg
1553 1.1 joerg ## -------------- ##
1554 1.1 joerg ## Configuration. ##
1555 1.1 joerg ## -------------- ##
1556 1.1 joerg
1557 1.1 joerg # You should override these variables in your script after sourcing this
1558 1.1 joerg # file so that they reflect the customisations you have added to the
1559 1.1 joerg # option parser.
1560 1.1 joerg
1561 1.1 joerg # The usage line for option parsing errors and the start of '-h' and
1562 1.1 joerg # '--help' output messages. You can embed shell variables for delayed
1563 1.1 joerg # expansion at the time the message is displayed, but you will need to
1564 1.1 joerg # quote other shell meta-characters carefully to prevent them being
1565 1.1 joerg # expanded when the contents are evaled.
1566 1.1 joerg usage='$progpath [OPTION]...'
1567 1.1 joerg
1568 1.1 joerg # Short help message in response to '-h' and '--help'. Add to this or
1569 1.1 joerg # override it after sourcing this library to reflect the full set of
1570 1.1 joerg # options your script accepts.
1571 1.1 joerg usage_message="\
1572 1.1 joerg --debug enable verbose shell tracing
1573 1.1 joerg -W, --warnings=CATEGORY
1574 1.1 joerg report the warnings falling in CATEGORY [all]
1575 1.1 joerg -v, --verbose verbosely report processing
1576 1.1 joerg --version print version information and exit
1577 1.1 joerg -h, --help print short or long help message and exit
1578 1.1 joerg "
1579 1.1 joerg
1580 1.1 joerg # Additional text appended to 'usage_message' in response to '--help'.
1581 1.1 joerg long_help_message="
1582 1.1 joerg Warning categories include:
1583 1.1 joerg 'all' show all warnings
1584 1.1 joerg 'none' turn off all the warnings
1585 1.1 joerg 'error' warnings are treated as fatal errors"
1586 1.1 joerg
1587 1.1 joerg # Help message printed before fatal option parsing errors.
1588 1.1 joerg fatal_help="Try '\$progname --help' for more information."
1589 1.1 joerg
1590 1.1 joerg
1591 1.1 joerg
1592 1.1 joerg ## ------------------------- ##
1593 1.1 joerg ## Hook function management. ##
1594 1.1 joerg ## ------------------------- ##
1595 1.1 joerg
1596 1.1 joerg # This section contains functions for adding, removing, and running hooks
1597 1.1 joerg # in the main code. A hook is just a list of function names that can be
1598 1.1 joerg # run in order later on.
1599 1.1 joerg
1600 1.1 joerg # func_hookable FUNC_NAME
1601 1.1 joerg # -----------------------
1602 1.1 joerg # Declare that FUNC_NAME will run hooks added with
1603 1.1 joerg # 'func_add_hook FUNC_NAME ...'.
1604 1.1 joerg func_hookable ()
1605 1.1 joerg {
1606 1.1 joerg $debug_cmd
1607 1.1 joerg
1608 1.1 joerg func_append hookable_fns " $1"
1609 1.1 joerg }
1610 1.1 joerg
1611 1.1 joerg
1612 1.1 joerg # func_add_hook FUNC_NAME HOOK_FUNC
1613 1.1 joerg # ---------------------------------
1614 1.1 joerg # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must
1615 1.1 joerg # first have been declared "hookable" by a call to 'func_hookable'.
1616 1.1 joerg func_add_hook ()
1617 1.1 joerg {
1618 1.1 joerg $debug_cmd
1619 1.1 joerg
1620 1.1 joerg case " $hookable_fns " in
1621 1.1 joerg *" $1 "*) ;;
1622 1.1 joerg *) func_fatal_error "'$1' does not accept hook functions." ;;
1623 1.1 joerg esac
1624 1.1 joerg
1625 1.1 joerg eval func_append ${1}_hooks '" $2"'
1626 1.1 joerg }
1627 1.1 joerg
1628 1.1 joerg
1629 1.1 joerg # func_remove_hook FUNC_NAME HOOK_FUNC
1630 1.1 joerg # ------------------------------------
1631 1.1 joerg # Remove HOOK_FUNC from the list of hook functions to be called by
1632 1.1 joerg # FUNC_NAME.
1633 1.1 joerg func_remove_hook ()
1634 1.1 joerg {
1635 1.1 joerg $debug_cmd
1636 1.1 joerg
1637 1.1 joerg eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
1638 1.1 joerg }
1639 1.1 joerg
1640 1.1 joerg
1641 1.1 joerg # func_propagate_result FUNC_NAME_A FUNC_NAME_B
1642 1.1 joerg # ---------------------------------------------
1643 1.1 joerg # If the *_result variable of FUNC_NAME_A _is set_, assign its value to
1644 1.1 joerg # *_result variable of FUNC_NAME_B.
1645 1.1 joerg func_propagate_result ()
1646 1.1 joerg {
1647 1.1 joerg $debug_cmd
1648 1.1 joerg
1649 1.1 joerg func_propagate_result_result=:
1650 1.1 joerg if eval "test \"\${${1}_result+set}\" = set"
1651 1.1 joerg then
1652 1.1 joerg eval "${2}_result=\$${1}_result"
1653 1.1 joerg else
1654 1.1 joerg func_propagate_result_result=false
1655 1.1 joerg fi
1656 1.1 joerg }
1657 1.1 joerg
1658 1.1 joerg
1659 1.1 joerg # func_run_hooks FUNC_NAME [ARG]...
1660 1.1 joerg # ---------------------------------
1661 1.1 joerg # Run all hook functions registered to FUNC_NAME.
1662 1.1 joerg # It's assumed that the list of hook functions contains nothing more
1663 1.1 joerg # than a whitespace-delimited list of legal shell function names, and
1664 1.1 joerg # no effort is wasted trying to catch shell meta-characters or preserve
1665 1.1 joerg # whitespace.
1666 1.1 joerg func_run_hooks ()
1667 1.1 joerg {
1668 1.1 joerg $debug_cmd
1669 1.1 joerg
1670 1.1 joerg case " $hookable_fns " in
1671 1.1 joerg *" $1 "*) ;;
1672 1.1 joerg *) func_fatal_error "'$1' does not support hook functions." ;;
1673 1.1 joerg esac
1674 1.1 joerg
1675 1.1 joerg eval _G_hook_fns=\$$1_hooks; shift
1676 1.1 joerg
1677 1.1 joerg for _G_hook in $_G_hook_fns; do
1678 1.1 joerg func_unset "${_G_hook}_result"
1679 1.1 joerg eval $_G_hook '${1+"$@"}'
1680 1.1 joerg func_propagate_result $_G_hook func_run_hooks
1681 1.1 joerg if $func_propagate_result_result; then
1682 1.1 joerg eval set dummy "$func_run_hooks_result"; shift
1683 1.1 joerg fi
1684 1.1 joerg done
1685 1.1 joerg }
1686 1.1 joerg
1687 1.1 joerg
1688 1.1 joerg
1689 1.1 joerg ## --------------- ##
1690 1.1 joerg ## Option parsing. ##
1691 1.1 joerg ## --------------- ##
1692 1.1 joerg
1693 1.1 joerg # In order to add your own option parsing hooks, you must accept the
1694 1.1 joerg # full positional parameter list from your hook function. You may remove
1695 1.1 joerg # or edit any options that you action, and then pass back the remaining
1696 1.1 joerg # unprocessed options in '<hooked_function_name>_result', escaped
1697 1.1 joerg # suitably for 'eval'.
1698 1.1 joerg #
1699 1.1 joerg # The '<hooked_function_name>_result' variable is automatically unset
1700 1.1 joerg # before your hook gets called; for best performance, only set the
1701 1.1 joerg # *_result variable when necessary (i.e. don't call the 'func_quote'
1702 1.1 joerg # function unnecessarily because it can be an expensive operation on some
1703 1.1 joerg # machines).
1704 1.1 joerg #
1705 1.1 joerg # Like this:
1706 1.1 joerg #
1707 1.1 joerg # my_options_prep ()
1708 1.1 joerg # {
1709 1.1 joerg # $debug_cmd
1710 1.1 joerg #
1711 1.1 joerg # # Extend the existing usage message.
1712 1.1 joerg # usage_message=$usage_message'
1713 1.1 joerg # -s, --silent don'\''t print informational messages
1714 1.1 joerg # '
1715 1.1 joerg # # No change in '$@' (ignored completely by this hook). Leave
1716 1.1 joerg # # my_options_prep_result variable intact.
1717 1.1 joerg # }
1718 1.1 joerg # func_add_hook func_options_prep my_options_prep
1719 1.1 joerg #
1720 1.1 joerg #
1721 1.1 joerg # my_silent_option ()
1722 1.1 joerg # {
1723 1.1 joerg # $debug_cmd
1724 1.1 joerg #
1725 1.1 joerg # args_changed=false
1726 1.1 joerg #
1727 1.1 joerg # # Note that, for efficiency, we parse as many options as we can
1728 1.1 joerg # # recognise in a loop before passing the remainder back to the
1729 1.1 joerg # # caller on the first unrecognised argument we encounter.
1730 1.1 joerg # while test $# -gt 0; do
1731 1.1 joerg # opt=$1; shift
1732 1.1 joerg # case $opt in
1733 1.1 joerg # --silent|-s) opt_silent=:
1734 1.1 joerg # args_changed=:
1735 1.1 joerg # ;;
1736 1.1 joerg # # Separate non-argument short options:
1737 1.1 joerg # -s*) func_split_short_opt "$_G_opt"
1738 1.1 joerg # set dummy "$func_split_short_opt_name" \
1739 1.1 joerg # "-$func_split_short_opt_arg" ${1+"$@"}
1740 1.1 joerg # shift
1741 1.1 joerg # args_changed=:
1742 1.1 joerg # ;;
1743 1.1 joerg # *) # Make sure the first unrecognised option "$_G_opt"
1744 1.1 joerg # # is added back to "$@" in case we need it later,
1745 1.1 joerg # # if $args_changed was set to 'true'.
1746 1.1 joerg # set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
1747 1.1 joerg # esac
1748 1.1 joerg # done
1749 1.1 joerg #
1750 1.1 joerg # # Only call 'func_quote' here if we processed at least one argument.
1751 1.1 joerg # if $args_changed; then
1752 1.1 joerg # func_quote eval ${1+"$@"}
1753 1.1 joerg # my_silent_option_result=$func_quote_result
1754 1.1 joerg # fi
1755 1.1 joerg # }
1756 1.1 joerg # func_add_hook func_parse_options my_silent_option
1757 1.1 joerg #
1758 1.1 joerg #
1759 1.1 joerg # my_option_validation ()
1760 1.1 joerg # {
1761 1.1 joerg # $debug_cmd
1762 1.1 joerg #
1763 1.1 joerg # $opt_silent && $opt_verbose && func_fatal_help "\
1764 1.1 joerg # '--silent' and '--verbose' options are mutually exclusive."
1765 1.1 joerg # }
1766 1.1 joerg # func_add_hook func_validate_options my_option_validation
1767 1.1 joerg #
1768 1.1 joerg # You'll also need to manually amend $usage_message to reflect the extra
1769 1.1 joerg # options you parse. It's preferable to append if you can, so that
1770 1.1 joerg # multiple option parsing hooks can be added safely.
1771 1.1 joerg
1772 1.1 joerg
1773 1.1 joerg # func_options_finish [ARG]...
1774 1.1 joerg # ----------------------------
1775 1.1 joerg # Finishing the option parse loop (call 'func_options' hooks ATM).
1776 1.1 joerg func_options_finish ()
1777 1.1 joerg {
1778 1.1 joerg $debug_cmd
1779 1.1 joerg
1780 1.1 joerg func_run_hooks func_options ${1+"$@"}
1781 1.1 joerg func_propagate_result func_run_hooks func_options_finish
1782 1.1 joerg }
1783 1.1 joerg
1784 1.1 joerg
1785 1.1 joerg # func_options [ARG]...
1786 1.1 joerg # ---------------------
1787 1.1 joerg # All the functions called inside func_options are hookable. See the
1788 1.1 joerg # individual implementations for details.
1789 1.1 joerg func_hookable func_options
1790 1.1 joerg func_options ()
1791 1.1 joerg {
1792 1.1 joerg $debug_cmd
1793 1.1 joerg
1794 1.1 joerg _G_options_quoted=false
1795 1.1 joerg
1796 1.1 joerg for my_func in options_prep parse_options validate_options options_finish
1797 1.1 joerg do
1798 1.1 joerg func_unset func_${my_func}_result
1799 1.1 joerg func_unset func_run_hooks_result
1800 1.1 joerg eval func_$my_func '${1+"$@"}'
1801 1.1 joerg func_propagate_result func_$my_func func_options
1802 1.1 joerg if $func_propagate_result_result; then
1803 1.1 joerg eval set dummy "$func_options_result"; shift
1804 1.1 joerg _G_options_quoted=:
1805 1.1 joerg fi
1806 1.1 joerg done
1807 1.1 joerg
1808 1.1 joerg $_G_options_quoted || {
1809 1.1 joerg # As we (func_options) are top-level options-parser function and
1810 1.1 joerg # nobody quoted "$@" for us yet, we need to do it explicitly for
1811 1.1 joerg # caller.
1812 1.1 joerg func_quote eval ${1+"$@"}
1813 1.1 joerg func_options_result=$func_quote_result
1814 1.1 joerg }
1815 1.1 joerg }
1816 1.1 joerg
1817 1.1 joerg
1818 1.1 joerg # func_options_prep [ARG]...
1819 1.1 joerg # --------------------------
1820 1.1 joerg # All initialisations required before starting the option parse loop.
1821 1.1 joerg # Note that when calling hook functions, we pass through the list of
1822 1.1 joerg # positional parameters. If a hook function modifies that list, and
1823 1.1 joerg # needs to propagate that back to rest of this script, then the complete
1824 1.1 joerg # modified list must be put in 'func_run_hooks_result' before returning.
1825 1.1 joerg func_hookable func_options_prep
1826 1.1 joerg func_options_prep ()
1827 1.1 joerg {
1828 1.1 joerg $debug_cmd
1829 1.1 joerg
1830 1.1 joerg # Option defaults:
1831 1.1 joerg opt_verbose=false
1832 1.1 joerg opt_warning_types=
1833 1.1 joerg
1834 1.1 joerg func_run_hooks func_options_prep ${1+"$@"}
1835 1.1 joerg func_propagate_result func_run_hooks func_options_prep
1836 1.1 joerg }
1837 1.1 joerg
1838 1.1 joerg
1839 1.1 joerg # func_parse_options [ARG]...
1840 1.1 joerg # ---------------------------
1841 1.1 joerg # The main option parsing loop.
1842 1.1 joerg func_hookable func_parse_options
1843 1.1 joerg func_parse_options ()
1844 1.1 joerg {
1845 1.1 joerg $debug_cmd
1846 1.1 joerg
1847 1.1 joerg _G_parse_options_requote=false
1848 1.1 joerg # this just eases exit handling
1849 1.1 joerg while test $# -gt 0; do
1850 1.1 joerg # Defer to hook functions for initial option parsing, so they
1851 1.1 joerg # get priority in the event of reusing an option name.
1852 1.1 joerg func_run_hooks func_parse_options ${1+"$@"}
1853 1.1 joerg func_propagate_result func_run_hooks func_parse_options
1854 1.1 joerg if $func_propagate_result_result; then
1855 1.1 joerg eval set dummy "$func_parse_options_result"; shift
1856 1.1 joerg # Even though we may have changed "$@", we passed the "$@" array
1857 1.1 joerg # down into the hook and it quoted it for us (because we are in
1858 1.1 joerg # this if-branch). No need to quote it again.
1859 1.1 joerg _G_parse_options_requote=false
1860 1.1 joerg fi
1861 1.1 joerg
1862 1.1 joerg # Break out of the loop if we already parsed every option.
1863 1.1 joerg test $# -gt 0 || break
1864 1.1 joerg
1865 1.1 joerg # We expect that one of the options parsed in this function matches
1866 1.1 joerg # and thus we remove _G_opt from "$@" and need to re-quote.
1867 1.1 joerg _G_match_parse_options=:
1868 1.1 joerg _G_opt=$1
1869 1.1 joerg shift
1870 1.1 joerg case $_G_opt in
1871 1.1 joerg --debug|-x) debug_cmd='set -x'
1872 1.1 joerg func_echo "enabling shell trace mode" >&2
1873 1.1 joerg $debug_cmd
1874 1.1 joerg ;;
1875 1.1 joerg
1876 1.1 joerg --no-warnings|--no-warning|--no-warn)
1877 1.1 joerg set dummy --warnings none ${1+"$@"}
1878 1.1 joerg shift
1879 1.1 joerg ;;
1880 1.1 joerg
1881 1.1 joerg --warnings|--warning|-W)
1882 1.1 joerg if test $# = 0 && func_missing_arg $_G_opt; then
1883 1.1 joerg _G_parse_options_requote=:
1884 1.1 joerg break
1885 1.1 joerg fi
1886 1.1 joerg case " $warning_categories $1" in
1887 1.1 joerg *" $1 "*)
1888 1.1 joerg # trailing space prevents matching last $1 above
1889 1.1 joerg func_append_uniq opt_warning_types " $1"
1890 1.1 joerg ;;
1891 1.1 joerg *all)
1892 1.1 joerg opt_warning_types=$warning_categories
1893 1.1 joerg ;;
1894 1.1 joerg *none)
1895 1.1 joerg opt_warning_types=none
1896 1.1 joerg warning_func=:
1897 1.1 joerg ;;
1898 1.1 joerg *error)
1899 1.1 joerg opt_warning_types=$warning_categories
1900 1.1 joerg warning_func=func_fatal_error
1901 1.1 joerg ;;
1902 1.1 joerg *)
1903 1.1 joerg func_fatal_error \
1904 1.1 joerg "unsupported warning category: '$1'"
1905 1.1 joerg ;;
1906 1.1 joerg esac
1907 1.1 joerg shift
1908 1.1 joerg ;;
1909 1.1 joerg
1910 1.1 joerg --verbose|-v) opt_verbose=: ;;
1911 1.1 joerg --version) func_version ;;
1912 1.1 joerg -\?|-h) func_usage ;;
1913 1.1 joerg --help) func_help ;;
1914 1.1 joerg
1915 1.1 joerg # Separate optargs to long options (plugins may need this):
1916 1.1 joerg --*=*) func_split_equals "$_G_opt"
1917 1.1 joerg set dummy "$func_split_equals_lhs" \
1918 1.1 joerg "$func_split_equals_rhs" ${1+"$@"}
1919 1.1 joerg shift
1920 1.1 joerg ;;
1921 1.1 joerg
1922 1.1 joerg # Separate optargs to short options:
1923 1.1 joerg -W*)
1924 1.1 joerg func_split_short_opt "$_G_opt"
1925 1.1 joerg set dummy "$func_split_short_opt_name" \
1926 1.1 joerg "$func_split_short_opt_arg" ${1+"$@"}
1927 1.1 joerg shift
1928 1.1 joerg ;;
1929 1.1 joerg
1930 1.1 joerg # Separate non-argument short options:
1931 1.1 joerg -\?*|-h*|-v*|-x*)
1932 1.1 joerg func_split_short_opt "$_G_opt"
1933 1.1 joerg set dummy "$func_split_short_opt_name" \
1934 1.1 joerg "-$func_split_short_opt_arg" ${1+"$@"}
1935 1.1 joerg shift
1936 1.1 joerg ;;
1937 1.1 joerg
1938 1.1 joerg --) _G_parse_options_requote=: ; break ;;
1939 1.1 joerg -*) func_fatal_help "unrecognised option: '$_G_opt'" ;;
1940 1.1 joerg *) set dummy "$_G_opt" ${1+"$@"}; shift
1941 1.1 joerg _G_match_parse_options=false
1942 1.1 joerg break
1943 1.1 joerg ;;
1944 1.1 joerg esac
1945 1.1 joerg
1946 1.1 joerg if $_G_match_parse_options; then
1947 1.1 joerg _G_parse_options_requote=:
1948 1.1 joerg fi
1949 1.1 joerg done
1950 1.1 joerg
1951 1.1 joerg if $_G_parse_options_requote; then
1952 1.1 joerg # save modified positional parameters for caller
1953 1.1 joerg func_quote eval ${1+"$@"}
1954 1.1 joerg func_parse_options_result=$func_quote_result
1955 1.1 joerg fi
1956 1.1 joerg }
1957 1.1 joerg
1958 1.1 joerg
1959 1.1 joerg # func_validate_options [ARG]...
1960 1.1 joerg # ------------------------------
1961 1.1 joerg # Perform any sanity checks on option settings and/or unconsumed
1962 1.1 joerg # arguments.
1963 1.1 joerg func_hookable func_validate_options
1964 1.1 joerg func_validate_options ()
1965 1.1 joerg {
1966 1.1 joerg $debug_cmd
1967 1.1 joerg
1968 1.1 joerg # Display all warnings if -W was not given.
1969 1.1 joerg test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
1970 1.1 joerg
1971 1.1 joerg func_run_hooks func_validate_options ${1+"$@"}
1972 1.1 joerg func_propagate_result func_run_hooks func_validate_options
1973 1.1 joerg
1974 1.1 joerg # Bail if the options were screwed!
1975 1.1 joerg $exit_cmd $EXIT_FAILURE
1976 1.1 joerg }
1977 1.1 joerg
1978 1.1 joerg
1979 1.1 joerg
1980 1.1 joerg ## ----------------- ##
1981 1.1 joerg ## Helper functions. ##
1982 1.1 joerg ## ----------------- ##
1983 1.1 joerg
1984 1.1 joerg # This section contains the helper functions used by the rest of the
1985 1.1 joerg # hookable option parser framework in ascii-betical order.
1986 1.1 joerg
1987 1.1 joerg
1988 1.1 joerg # func_fatal_help ARG...
1989 1.1 joerg # ----------------------
1990 1.1 joerg # Echo program name prefixed message to standard error, followed by
1991 1.1 joerg # a help hint, and exit.
1992 1.1 joerg func_fatal_help ()
1993 1.1 joerg {
1994 1.1 joerg $debug_cmd
1995 1.1 joerg
1996 1.1 joerg eval \$ECHO \""Usage: $usage"\"
1997 1.1 joerg eval \$ECHO \""$fatal_help"\"
1998 1.1 joerg func_error ${1+"$@"}
1999 1.1 joerg exit $EXIT_FAILURE
2000 1.1 joerg }
2001 1.1 joerg
2002 1.1 joerg
2003 1.1 joerg # func_help
2004 1.1 joerg # ---------
2005 1.1 joerg # Echo long help message to standard output and exit.
2006 1.1 joerg func_help ()
2007 1.1 joerg {
2008 1.1 joerg $debug_cmd
2009 1.1 joerg
2010 1.1 joerg func_usage_message
2011 1.1 joerg $ECHO "$long_help_message"
2012 1.1 joerg exit 0
2013 1.1 joerg }
2014 1.1 joerg
2015 1.1 joerg
2016 1.1 joerg # func_missing_arg ARGNAME
2017 1.1 joerg # ------------------------
2018 1.1 joerg # Echo program name prefixed message to standard error and set global
2019 1.1 joerg # exit_cmd.
2020 1.1 joerg func_missing_arg ()
2021 1.1 joerg {
2022 1.1 joerg $debug_cmd
2023 1.1 joerg
2024 1.1 joerg func_error "Missing argument for '$1'."
2025 1.1 joerg exit_cmd=exit
2026 1.1 joerg }
2027 1.1 joerg
2028 1.1 joerg
2029 1.1 joerg # func_split_equals STRING
2030 1.1 joerg # ------------------------
2031 1.1 joerg # Set func_split_equals_lhs and func_split_equals_rhs shell variables
2032 1.1 joerg # after splitting STRING at the '=' sign.
2033 1.1 joerg test -z "$_G_HAVE_XSI_OPS" \
2034 1.1 joerg && (eval 'x=a/b/c;
2035 1.1 joerg test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
2036 1.1 joerg && _G_HAVE_XSI_OPS=yes
2037 1.1 joerg
2038 1.1 joerg if test yes = "$_G_HAVE_XSI_OPS"
2039 1.1 joerg then
2040 1.1 joerg # This is an XSI compatible shell, allowing a faster implementation...
2041 1.1 joerg eval 'func_split_equals ()
2042 1.1 joerg {
2043 1.1 joerg $debug_cmd
2044 1.1 joerg
2045 1.1 joerg func_split_equals_lhs=${1%%=*}
2046 1.1 joerg func_split_equals_rhs=${1#*=}
2047 1.1 joerg if test "x$func_split_equals_lhs" = "x$1"; then
2048 1.1 joerg func_split_equals_rhs=
2049 1.1 joerg fi
2050 1.1 joerg }'
2051 1.1 joerg else
2052 1.1 joerg # ...otherwise fall back to using expr, which is often a shell builtin.
2053 1.1 joerg func_split_equals ()
2054 1.1 joerg {
2055 1.1 joerg $debug_cmd
2056 1.1 joerg
2057 1.1 joerg func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
2058 1.1 joerg func_split_equals_rhs=
2059 1.1 joerg test "x$func_split_equals_lhs" = "x$1" \
2060 1.1 joerg || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
2061 1.1 joerg }
2062 1.1 joerg fi #func_split_equals
2063 1.1 joerg
2064 1.1 joerg
2065 1.1 joerg # func_split_short_opt SHORTOPT
2066 1.1 joerg # -----------------------------
2067 1.1 joerg # Set func_split_short_opt_name and func_split_short_opt_arg shell
2068 1.1 joerg # variables after splitting SHORTOPT after the 2nd character.
2069 1.1 joerg if test yes = "$_G_HAVE_XSI_OPS"
2070 1.1 joerg then
2071 1.1 joerg # This is an XSI compatible shell, allowing a faster implementation...
2072 1.1 joerg eval 'func_split_short_opt ()
2073 1.1 joerg {
2074 1.1 joerg $debug_cmd
2075 1.1 joerg
2076 1.1 joerg func_split_short_opt_arg=${1#??}
2077 1.1 joerg func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
2078 1.1 joerg }'
2079 1.1 joerg else
2080 1.1 joerg # ...otherwise fall back to using expr, which is often a shell builtin.
2081 1.1 joerg func_split_short_opt ()
2082 1.1 joerg {
2083 1.1 joerg $debug_cmd
2084 1.1 joerg
2085 1.1 joerg func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
2086 1.1 joerg func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
2087 1.1 joerg }
2088 1.1 joerg fi #func_split_short_opt
2089 1.1 joerg
2090 1.1 joerg
2091 1.1 joerg # func_usage
2092 1.1 joerg # ----------
2093 1.1 joerg # Echo short help message to standard output and exit.
2094 1.1 joerg func_usage ()
2095 1.1 joerg {
2096 1.1 joerg $debug_cmd
2097 1.1 joerg
2098 1.1 joerg func_usage_message
2099 1.1 joerg $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
2100 1.1 joerg exit 0
2101 1.1 joerg }
2102 1.1 joerg
2103 1.1 joerg
2104 1.1 joerg # func_usage_message
2105 1.1 joerg # ------------------
2106 1.1 joerg # Echo short help message to standard output.
2107 1.1 joerg func_usage_message ()
2108 1.1 joerg {
2109 1.1 joerg $debug_cmd
2110 1.1 joerg
2111 1.1 joerg eval \$ECHO \""Usage: $usage"\"
2112 1.1 joerg echo
2113 1.1 joerg $SED -n 's|^# ||
2114 1.1 joerg /^Written by/{
2115 1.1 joerg x;p;x
2116 1.1 joerg }
2117 1.1 joerg h
2118 1.1 joerg /^Written by/q' < "$progpath"
2119 1.1 joerg echo
2120 1.1 joerg eval \$ECHO \""$usage_message"\"
2121 1.1 joerg }
2122 1.1 joerg
2123 1.1 joerg
2124 1.1 joerg # func_version
2125 1.1 joerg # ------------
2126 1.1 joerg # Echo version message to standard output and exit.
2127 1.1 joerg # The version message is extracted from the calling file's header
2128 1.1 joerg # comments, with leading '# ' stripped:
2129 1.1 joerg # 1. First display the progname and version
2130 1.1 joerg # 2. Followed by the header comment line matching /^# Written by /
2131 1.1 joerg # 3. Then a blank line followed by the first following line matching
2132 1.1 joerg # /^# Copyright /
2133 1.1 joerg # 4. Immediately followed by any lines between the previous matches,
2134 1.1 joerg # except lines preceding the intervening completely blank line.
2135 1.1 joerg # For example, see the header comments of this file.
2136 1.1 joerg func_version ()
2137 1.1 joerg {
2138 1.1 joerg $debug_cmd
2139 1.1 joerg
2140 1.1 joerg printf '%s\n' "$progname $scriptversion"
2141 1.1 joerg $SED -n '
2142 1.1 joerg /^# Written by /!b
2143 1.1 joerg s|^# ||; p; n
2144 1.1 joerg
2145 1.1 joerg :fwd2blnk
2146 1.1 joerg /./ {
2147 1.1 joerg n
2148 1.1 joerg b fwd2blnk
2149 1.1 joerg }
2150 1.1 joerg p; n
2151 1.1 joerg
2152 1.1 joerg :holdwrnt
2153 1.1 joerg s|^# ||
2154 1.1 joerg s|^# *$||
2155 1.1 joerg /^Copyright /!{
2156 1.1 joerg /./H
2157 1.1 joerg n
2158 1.1 joerg b holdwrnt
2159 1.1 joerg }
2160 1.1 joerg
2161 1.1 joerg s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
2162 1.1 joerg G
2163 1.1 joerg s|\(\n\)\n*|\1|g
2164 1.1 joerg p; q' < "$progpath"
2165 1.1 joerg
2166 1.1 joerg exit $?
2167 1.1 joerg }
2168 1.1 joerg
2169 1.1 joerg
2170 1.1 joerg # Local variables:
2171 1.1 joerg # mode: shell-script
2172 1.1 joerg # sh-indentation: 2
2173 1.1 joerg # eval: (add-hook 'before-save-hook 'time-stamp)
2174 1.1 joerg # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
2175 1.1 joerg # time-stamp-time-zone: "UTC"
2176 1.1 joerg # End:
2177 1.1 joerg
2178 1.1 joerg # Set a version string.
2179 1.1 joerg scriptversion='(GNU libtool) 2.4.6.40-6ca5-dirty'
2180 1.1 joerg
2181 1.1 joerg
2182 1.1 joerg # func_echo ARG...
2183 1.1 joerg # ----------------
2184 1.1 joerg # Libtool also displays the current mode in messages, so override
2185 1.1 joerg # funclib.sh func_echo with this custom definition.
2186 1.1 joerg func_echo ()
2187 1.1 joerg {
2188 1.1 joerg $debug_cmd
2189 1.1 joerg
2190 1.1 joerg _G_message=$*
2191 1.1 joerg
2192 1.1 joerg func_echo_IFS=$IFS
2193 1.1 joerg IFS=$nl
2194 1.1 joerg for _G_line in $_G_message; do
2195 1.1 joerg IFS=$func_echo_IFS
2196 1.1 joerg $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
2197 1.1 joerg done
2198 1.1 joerg IFS=$func_echo_IFS
2199 1.1 joerg }
2200 1.1 joerg
2201 1.1 joerg
2202 1.1 joerg # func_warning ARG...
2203 1.1 joerg # -------------------
2204 1.1 joerg # Libtool warnings are not categorized, so override funclib.sh
2205 1.1 joerg # func_warning with this simpler definition.
2206 1.1 joerg func_warning ()
2207 1.1 joerg {
2208 1.1 joerg $debug_cmd
2209 1.1 joerg
2210 1.1 joerg $warning_func ${1+"$@"}
2211 1.1 joerg }
2212 1.1 joerg
2213 1.1 joerg
2214 1.1 joerg ## ---------------- ##
2215 1.1 joerg ## Options parsing. ##
2216 1.1 joerg ## ---------------- ##
2217 1.1 joerg
2218 1.1 joerg # Hook in the functions to make sure our own options are parsed during
2219 1.1 joerg # the option parsing loop.
2220 1.1 joerg
2221 1.1 joerg usage='$progpath [OPTION]... [MODE-ARG]...'
2222 1.1 joerg
2223 1.1 joerg # Short help message in response to '-h'.
2224 1.1 joerg usage_message="Options:
2225 1.1 joerg --config show all configuration variables
2226 1.1 joerg --debug enable verbose shell tracing
2227 1.1 joerg -n, --dry-run display commands without modifying any files
2228 1.1 joerg --features display basic configuration information and exit
2229 1.1 joerg --mode=MODE use operation mode MODE
2230 1.1 joerg --no-warnings equivalent to '-Wnone'
2231 1.1 joerg --preserve-dup-deps don't remove duplicate dependency libraries
2232 1.1 joerg --quiet, --silent don't print informational messages
2233 1.1 joerg --tag=TAG use configuration variables from tag TAG
2234 1.1 joerg -v, --verbose print more informational messages than default
2235 1.1 joerg --version print version information
2236 1.1 joerg -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all]
2237 1.1 joerg -h, --help, --help-all print short, long, or detailed help message
2238 1.1 joerg "
2239 1.1 joerg
2240 1.1 joerg # Additional text appended to 'usage_message' in response to '--help'.
2241 1.1 joerg func_help ()
2242 1.1 joerg {
2243 1.1 joerg $debug_cmd
2244 1.1 joerg
2245 1.1 joerg func_usage_message
2246 1.1 joerg $ECHO "$long_help_message
2247 1.1 joerg
2248 1.1 joerg MODE must be one of the following:
2249 1.1 joerg
2250 1.1 joerg clean remove files from the build directory
2251 1.1 joerg compile compile a source file into a libtool object
2252 1.1 joerg execute automatically set library path, then run a program
2253 1.1 joerg finish complete the installation of libtool libraries
2254 1.1 joerg install install libraries or executables
2255 1.1 joerg link create a library or an executable
2256 1.1 joerg uninstall remove libraries from an installed directory
2257 1.1 joerg
2258 1.1 joerg MODE-ARGS vary depending on the MODE. When passed as first option,
2259 1.1 joerg '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
2260 1.1 joerg Try '$progname --help --mode=MODE' for a more detailed description of MODE.
2261 1.1 joerg
2262 1.1 joerg When reporting a bug, please describe a test case to reproduce it and
2263 1.1 joerg include the following information:
2264 1.1 joerg
2265 1.1 joerg host-triplet: $host
2266 1.1 joerg shell: $SHELL
2267 1.1 joerg compiler: $LTCC
2268 1.1 joerg compiler flags: $LTCFLAGS
2269 1.1 joerg linker: $LD (gnu? $with_gnu_ld)
2270 1.1 joerg version: $progname (GNU libtool) 2.4.6.40-6ca5-dirty
2271 1.1 joerg automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
2272 1.1 joerg autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
2273 1.1 joerg
2274 1.1 joerg Report bugs to <bug-libtool (at] gnu.org>.
2275 1.1 joerg GNU libtool home page: <http://www.gnu.org/s/libtool/>.
2276 1.1 joerg General help using GNU software: <http://www.gnu.org/gethelp/>."
2277 1.1 joerg exit 0
2278 1.1 joerg }
2279 1.1 joerg
2280 1.1 joerg
2281 1.1 joerg # func_lo2o OBJECT-NAME
2282 1.1 joerg # ---------------------
2283 1.1 joerg # Transform OBJECT-NAME from a '.lo' suffix to the platform specific
2284 1.1 joerg # object suffix.
2285 1.1 joerg
2286 1.1 joerg lo2o=s/\\.lo\$/.$objext/
2287 1.1 joerg o2lo=s/\\.$objext\$/.lo/
2288 1.1 joerg
2289 1.1 joerg if test yes = "$_G_HAVE_XSI_OPS"; then
2290 1.1 joerg eval 'func_lo2o ()
2291 1.1 joerg {
2292 1.1 joerg case $1 in
2293 1.1 joerg *.lo) func_lo2o_result=${1%.lo}.$objext ;;
2294 1.1 joerg * ) func_lo2o_result=$1 ;;
2295 1.1 joerg esac
2296 1.1 joerg }'
2297 1.1 joerg
2298 1.1 joerg # func_xform LIBOBJ-OR-SOURCE
2299 1.1 joerg # ---------------------------
2300 1.1 joerg # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
2301 1.1 joerg # suffix to a '.lo' libtool-object suffix.
2302 1.1 joerg eval 'func_xform ()
2303 1.1 joerg {
2304 1.1 joerg func_xform_result=${1%.*}.lo
2305 1.1 joerg }'
2306 1.1 joerg else
2307 1.1 joerg # ...otherwise fall back to using sed.
2308 1.1 joerg func_lo2o ()
2309 1.1 joerg {
2310 1.1 joerg func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
2311 1.1 joerg }
2312 1.1 joerg
2313 1.1 joerg func_xform ()
2314 1.1 joerg {
2315 1.1 joerg func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
2316 1.1 joerg }
2317 1.1 joerg fi
2318 1.1 joerg
2319 1.1 joerg
2320 1.1 joerg # func_fatal_configuration ARG...
2321 1.1 joerg # -------------------------------
2322 1.1 joerg # Echo program name prefixed message to standard error, followed by
2323 1.1 joerg # a configuration failure hint, and exit.
2324 1.1 joerg func_fatal_configuration ()
2325 1.1 joerg {
2326 1.1 joerg func_fatal_error ${1+"$@"} \
2327 1.1 joerg "See the $PACKAGE documentation for more information." \
2328 1.1 joerg "Fatal configuration error."
2329 1.1 joerg }
2330 1.1 joerg
2331 1.1 joerg
2332 1.1 joerg # func_config
2333 1.1 joerg # -----------
2334 1.1 joerg # Display the configuration for all the tags in this script.
2335 1.1 joerg func_config ()
2336 1.1 joerg {
2337 1.1 joerg re_begincf='^# ### BEGIN LIBTOOL'
2338 1.1 joerg re_endcf='^# ### END LIBTOOL'
2339 1.1 joerg
2340 1.1 joerg # Default configuration.
2341 1.1 joerg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
2342 1.1 joerg
2343 1.1 joerg # Now print the configurations for the tags.
2344 1.1 joerg for tagname in $taglist; do
2345 1.1 joerg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
2346 1.1 joerg done
2347 1.1 joerg
2348 1.1 joerg exit $?
2349 1.1 joerg }
2350 1.1 joerg
2351 1.1 joerg
2352 1.1 joerg # func_features
2353 1.1 joerg # -------------
2354 1.1 joerg # Display the features supported by this script.
2355 1.1 joerg func_features ()
2356 1.1 joerg {
2357 1.1 joerg echo "host: $host"
2358 1.1 joerg if test yes = "$build_libtool_libs"; then
2359 1.1 joerg echo "enable shared libraries"
2360 1.1 joerg else
2361 1.1 joerg echo "disable shared libraries"
2362 1.1 joerg fi
2363 1.1 joerg if test yes = "$build_old_libs"; then
2364 1.1 joerg echo "enable static libraries"
2365 1.1 joerg else
2366 1.1 joerg echo "disable static libraries"
2367 1.1 joerg fi
2368 1.1 joerg
2369 1.1 joerg exit $?
2370 1.1 joerg }
2371 1.1 joerg
2372 1.1 joerg
2373 1.1 joerg # func_enable_tag TAGNAME
2374 1.1 joerg # -----------------------
2375 1.1 joerg # Verify that TAGNAME is valid, and either flag an error and exit, or
2376 1.1 joerg # enable the TAGNAME tag. We also add TAGNAME to the global $taglist
2377 1.1 joerg # variable here.
2378 1.1 joerg func_enable_tag ()
2379 1.1 joerg {
2380 1.1 joerg # Global variable:
2381 1.1 joerg tagname=$1
2382 1.1 joerg
2383 1.1 joerg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
2384 1.1 joerg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
2385 1.1 joerg sed_extractcf=/$re_begincf/,/$re_endcf/p
2386 1.1 joerg
2387 1.1 joerg # Validate tagname.
2388 1.1 joerg case $tagname in
2389 1.1 joerg *[!-_A-Za-z0-9,/]*)
2390 1.1 joerg func_fatal_error "invalid tag name: $tagname"
2391 1.1 joerg ;;
2392 1.1 joerg esac
2393 1.1 joerg
2394 1.1 joerg # Don't test for the "default" C tag, as we know it's
2395 1.1 joerg # there but not specially marked.
2396 1.1 joerg case $tagname in
2397 1.1 joerg CC) ;;
2398 1.1 joerg *)
2399 1.1 joerg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
2400 1.1 joerg taglist="$taglist $tagname"
2401 1.1 joerg
2402 1.1 joerg # Evaluate the configuration. Be careful to quote the path
2403 1.1 joerg # and the sed script, to avoid splitting on whitespace, but
2404 1.1 joerg # also don't use non-portable quotes within backquotes within
2405 1.1 joerg # quotes we have to do it in 2 steps:
2406 1.1 joerg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
2407 1.1 joerg eval "$extractedcf"
2408 1.1 joerg else
2409 1.1 joerg func_error "ignoring unknown tag $tagname"
2410 1.1 joerg fi
2411 1.1 joerg ;;
2412 1.1 joerg esac
2413 1.1 joerg }
2414 1.1 joerg
2415 1.1 joerg
2416 1.1 joerg # func_check_version_match
2417 1.1 joerg # ------------------------
2418 1.1 joerg # Ensure that we are using m4 macros, and libtool script from the same
2419 1.1 joerg # release of libtool.
2420 1.1 joerg func_check_version_match ()
2421 1.1 joerg {
2422 1.1 joerg if test "$package_revision" != "$macro_revision"; then
2423 1.1 joerg if test "$VERSION" != "$macro_version"; then
2424 1.1 joerg if test -z "$macro_version"; then
2425 1.1 joerg cat >&2 <<_LT_EOF
2426 1.1 joerg $progname: Version mismatch error. This is $PACKAGE $VERSION, but the
2427 1.1 joerg $progname: definition of this LT_INIT comes from an older release.
2428 1.1 joerg $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2429 1.1 joerg $progname: and run autoconf again.
2430 1.1 joerg _LT_EOF
2431 1.1 joerg else
2432 1.1 joerg cat >&2 <<_LT_EOF
2433 1.1 joerg $progname: Version mismatch error. This is $PACKAGE $VERSION, but the
2434 1.1 joerg $progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
2435 1.1 joerg $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2436 1.1 joerg $progname: and run autoconf again.
2437 1.1 joerg _LT_EOF
2438 1.1 joerg fi
2439 1.1 joerg else
2440 1.1 joerg cat >&2 <<_LT_EOF
2441 1.1 joerg $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
2442 1.1 joerg $progname: but the definition of this LT_INIT comes from revision $macro_revision.
2443 1.1 joerg $progname: You should recreate aclocal.m4 with macros from revision $package_revision
2444 1.1 joerg $progname: of $PACKAGE $VERSION and run autoconf again.
2445 1.1 joerg _LT_EOF
2446 1.1 joerg fi
2447 1.1 joerg
2448 1.1 joerg exit $EXIT_MISMATCH
2449 1.1 joerg fi
2450 1.1 joerg }
2451 1.1 joerg
2452 1.1 joerg
2453 1.1 joerg # libtool_options_prep [ARG]...
2454 1.1 joerg # -----------------------------
2455 1.1 joerg # Preparation for options parsed by libtool.
2456 1.1 joerg libtool_options_prep ()
2457 1.1 joerg {
2458 1.1 joerg $debug_mode
2459 1.1 joerg
2460 1.1 joerg # Option defaults:
2461 1.1 joerg opt_config=false
2462 1.1 joerg opt_dlopen=
2463 1.1 joerg opt_dry_run=false
2464 1.1 joerg opt_help=false
2465 1.1 joerg opt_mode=
2466 1.1 joerg opt_preserve_dup_deps=false
2467 1.1 joerg opt_quiet=false
2468 1.1 joerg
2469 1.1 joerg nonopt=
2470 1.1 joerg preserve_args=
2471 1.1 joerg
2472 1.1 joerg _G_rc_lt_options_prep=:
2473 1.1 joerg
2474 1.1 joerg # Shorthand for --mode=foo, only valid as the first argument
2475 1.1 joerg case $1 in
2476 1.1 joerg clean|clea|cle|cl)
2477 1.1 joerg shift; set dummy --mode clean ${1+"$@"}; shift
2478 1.1 joerg ;;
2479 1.1 joerg compile|compil|compi|comp|com|co|c)
2480 1.1 joerg shift; set dummy --mode compile ${1+"$@"}; shift
2481 1.1 joerg ;;
2482 1.1 joerg execute|execut|execu|exec|exe|ex|e)
2483 1.1 joerg shift; set dummy --mode execute ${1+"$@"}; shift
2484 1.1 joerg ;;
2485 1.1 joerg finish|finis|fini|fin|fi|f)
2486 1.1 joerg shift; set dummy --mode finish ${1+"$@"}; shift
2487 1.1 joerg ;;
2488 1.1 joerg install|instal|insta|inst|ins|in|i)
2489 1.1 joerg shift; set dummy --mode install ${1+"$@"}; shift
2490 1.1 joerg ;;
2491 1.1 joerg link|lin|li|l)
2492 1.1 joerg shift; set dummy --mode link ${1+"$@"}; shift
2493 1.1 joerg ;;
2494 1.1 joerg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
2495 1.1 joerg shift; set dummy --mode uninstall ${1+"$@"}; shift
2496 1.1 joerg ;;
2497 1.1 joerg *)
2498 1.1 joerg _G_rc_lt_options_prep=false
2499 1.1 joerg ;;
2500 1.1 joerg esac
2501 1.1 joerg
2502 1.1 joerg if $_G_rc_lt_options_prep; then
2503 1.1 joerg # Pass back the list of options.
2504 1.1 joerg func_quote eval ${1+"$@"}
2505 1.1 joerg libtool_options_prep_result=$func_quote_result
2506 1.1 joerg fi
2507 1.1 joerg }
2508 1.1 joerg func_add_hook func_options_prep libtool_options_prep
2509 1.1 joerg
2510 1.1 joerg
2511 1.1 joerg # libtool_parse_options [ARG]...
2512 1.1 joerg # ---------------------------------
2513 1.1 joerg # Provide handling for libtool specific options.
2514 1.1 joerg libtool_parse_options ()
2515 1.1 joerg {
2516 1.1 joerg $debug_cmd
2517 1.1 joerg
2518 1.1 joerg _G_rc_lt_parse_options=false
2519 1.1 joerg
2520 1.1 joerg # Perform our own loop to consume as many options as possible in
2521 1.1 joerg # each iteration.
2522 1.1 joerg while test $# -gt 0; do
2523 1.1 joerg _G_match_lt_parse_options=:
2524 1.1 joerg _G_opt=$1
2525 1.1 joerg shift
2526 1.1 joerg case $_G_opt in
2527 1.1 joerg --dry-run|--dryrun|-n)
2528 1.1 joerg opt_dry_run=:
2529 1.1 joerg ;;
2530 1.1 joerg
2531 1.1 joerg --config) func_config ;;
2532 1.1 joerg
2533 1.1 joerg --dlopen|-dlopen)
2534 1.1 joerg opt_dlopen="${opt_dlopen+$opt_dlopen
2535 1.1 joerg }$1"
2536 1.1 joerg shift
2537 1.1 joerg ;;
2538 1.1 joerg
2539 1.1 joerg --preserve-dup-deps)
2540 1.1 joerg opt_preserve_dup_deps=: ;;
2541 1.1 joerg
2542 1.1 joerg --features) func_features ;;
2543 1.1 joerg
2544 1.1 joerg --finish) set dummy --mode finish ${1+"$@"}; shift ;;
2545 1.1 joerg
2546 1.1 joerg --help) opt_help=: ;;
2547 1.1 joerg
2548 1.1 joerg --help-all) opt_help=': help-all' ;;
2549 1.1 joerg
2550 1.1 joerg --mode) test $# = 0 && func_missing_arg $_G_opt && break
2551 1.1 joerg opt_mode=$1
2552 1.1 joerg case $1 in
2553 1.1 joerg # Valid mode arguments:
2554 1.1 joerg clean|compile|execute|finish|install|link|relink|uninstall) ;;
2555 1.1 joerg
2556 1.1 joerg # Catch anything else as an error
2557 1.1 joerg *) func_error "invalid argument for $_G_opt"
2558 1.1 joerg exit_cmd=exit
2559 1.1 joerg break
2560 1.1 joerg ;;
2561 1.1 joerg esac
2562 1.1 joerg shift
2563 1.1 joerg ;;
2564 1.1 joerg
2565 1.1 joerg --no-silent|--no-quiet)
2566 1.1 joerg opt_quiet=false
2567 1.1 joerg func_append preserve_args " $_G_opt"
2568 1.1 joerg ;;
2569 1.1 joerg
2570 1.1 joerg --no-warnings|--no-warning|--no-warn)
2571 1.1 joerg opt_warning=false
2572 1.1 joerg func_append preserve_args " $_G_opt"
2573 1.1 joerg ;;
2574 1.1 joerg
2575 1.1 joerg --no-verbose)
2576 1.1 joerg opt_verbose=false
2577 1.1 joerg func_append preserve_args " $_G_opt"
2578 1.1 joerg ;;
2579 1.1 joerg
2580 1.1 joerg --silent|--quiet)
2581 1.1 joerg opt_quiet=:
2582 1.1 joerg opt_verbose=false
2583 1.1 joerg func_append preserve_args " $_G_opt"
2584 1.1 joerg ;;
2585 1.1 joerg
2586 1.1 joerg --tag) test $# = 0 && func_missing_arg $_G_opt && break
2587 1.1 joerg opt_tag=$1
2588 1.1 joerg func_append preserve_args " $_G_opt $1"
2589 1.1 joerg func_enable_tag "$1"
2590 1.1 joerg shift
2591 1.1 joerg ;;
2592 1.1 joerg
2593 1.1 joerg --verbose|-v) opt_quiet=false
2594 1.1 joerg opt_verbose=:
2595 1.1 joerg func_append preserve_args " $_G_opt"
2596 1.1 joerg ;;
2597 1.1 joerg
2598 1.1 joerg # An option not handled by this hook function:
2599 1.1 joerg *) set dummy "$_G_opt" ${1+"$@"} ; shift
2600 1.1 joerg _G_match_lt_parse_options=false
2601 1.1 joerg break
2602 1.1 joerg ;;
2603 1.1 joerg esac
2604 1.1 joerg $_G_match_lt_parse_options && _G_rc_lt_parse_options=:
2605 1.1 joerg done
2606 1.1 joerg
2607 1.1 joerg if $_G_rc_lt_parse_options; then
2608 1.1 joerg # save modified positional parameters for caller
2609 1.1 joerg func_quote eval ${1+"$@"}
2610 1.1 joerg libtool_parse_options_result=$func_quote_result
2611 1.1 joerg fi
2612 1.1 joerg }
2613 1.1 joerg func_add_hook func_parse_options libtool_parse_options
2614 1.1 joerg
2615 1.1 joerg
2616 1.1 joerg
2617 1.1 joerg # libtool_validate_options [ARG]...
2618 1.1 joerg # ---------------------------------
2619 1.1 joerg # Perform any sanity checks on option settings and/or unconsumed
2620 1.1 joerg # arguments.
2621 1.1 joerg libtool_validate_options ()
2622 1.1 joerg {
2623 1.1 joerg # save first non-option argument
2624 1.1 joerg if test 0 -lt $#; then
2625 1.1 joerg nonopt=$1
2626 1.1 joerg shift
2627 1.1 joerg fi
2628 1.1 joerg
2629 1.1 joerg # preserve --debug
2630 1.1 joerg test : = "$debug_cmd" || func_append preserve_args " --debug"
2631 1.1 joerg
2632 1.1 joerg case $host in
2633 1.1 joerg # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
2634 1.1 joerg # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
2635 1.1 joerg *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
2636 1.1 joerg # don't eliminate duplications in $postdeps and $predeps
2637 1.1 joerg opt_duplicate_compiler_generated_deps=:
2638 1.1 joerg ;;
2639 1.1 joerg *)
2640 1.1 joerg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
2641 1.1 joerg ;;
2642 1.1 joerg esac
2643 1.1 joerg
2644 1.1 joerg $opt_help || {
2645 1.1 joerg # Sanity checks first:
2646 1.1 joerg func_check_version_match
2647 1.1 joerg
2648 1.1 joerg test yes != "$build_libtool_libs" \
2649 1.1 joerg && test yes != "$build_old_libs" \
2650 1.1 joerg && func_fatal_configuration "not configured to build any kind of library"
2651 1.1 joerg
2652 1.1 joerg # Darwin sucks
2653 1.1 joerg eval std_shrext=\"$shrext_cmds\"
2654 1.1 joerg
2655 1.1 joerg # Only execute mode is allowed to have -dlopen flags.
2656 1.1 joerg if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
2657 1.1 joerg func_error "unrecognized option '-dlopen'"
2658 1.1 joerg $ECHO "$help" 1>&2
2659 1.1 joerg exit $EXIT_FAILURE
2660 1.1 joerg fi
2661 1.1 joerg
2662 1.1 joerg # Change the help message to a mode-specific one.
2663 1.1 joerg generic_help=$help
2664 1.1 joerg help="Try '$progname --help --mode=$opt_mode' for more information."
2665 1.1 joerg }
2666 1.1 joerg
2667 1.1 joerg # Pass back the unparsed argument list
2668 1.1 joerg func_quote eval ${1+"$@"}
2669 1.1 joerg libtool_validate_options_result=$func_quote_result
2670 1.1 joerg }
2671 1.1 joerg func_add_hook func_validate_options libtool_validate_options
2672 1.1 joerg
2673 1.1 joerg
2674 1.1 joerg # Process options as early as possible so that --help and --version
2675 1.1 joerg # can return quickly.
2676 1.1 joerg func_options ${1+"$@"}
2677 1.1 joerg eval set dummy "$func_options_result"; shift
2678 1.1 joerg
2679 1.1 joerg
2680 1.1 joerg
2681 1.1 joerg ## ----------- ##
2682 1.1 joerg ## Main. ##
2683 1.1 joerg ## ----------- ##
2684 1.1 joerg
2685 1.1 joerg magic='%%%MAGIC variable%%%'
2686 1.1 joerg magic_exe='%%%MAGIC EXE variable%%%'
2687 1.1 joerg
2688 1.1 joerg # Global variables.
2689 1.1 joerg extracted_archives=
2690 1.1 joerg extracted_serial=0
2691 1.1 joerg
2692 1.1 joerg # If this variable is set in any of the actions, the command in it
2693 1.1 joerg # will be execed at the end. This prevents here-documents from being
2694 1.1 joerg # left over by shells.
2695 1.1 joerg exec_cmd=
2696 1.1 joerg
2697 1.1 joerg
2698 1.1 joerg # A function that is used when there is no print builtin or printf.
2699 1.1 joerg func_fallback_echo ()
2700 1.1 joerg {
2701 1.1 joerg eval 'cat <<_LTECHO_EOF
2702 1.1 joerg $1
2703 1.1 joerg _LTECHO_EOF'
2704 1.1 joerg }
2705 1.1 joerg
2706 1.1 joerg # func_generated_by_libtool
2707 1.1 joerg # True iff stdin has been generated by Libtool. This function is only
2708 1.1 joerg # a basic sanity check; it will hardly flush out determined imposters.
2709 1.1 joerg func_generated_by_libtool_p ()
2710 1.1 joerg {
2711 1.1 joerg $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
2712 1.1 joerg }
2713 1.1 joerg
2714 1.1 joerg # func_lalib_p file
2715 1.1 joerg # True iff FILE is a libtool '.la' library or '.lo' object file.
2716 1.1 joerg # This function is only a basic sanity check; it will hardly flush out
2717 1.1 joerg # determined imposters.
2718 1.1 joerg func_lalib_p ()
2719 1.1 joerg {
2720 1.1 joerg test -f "$1" &&
2721 1.1 joerg $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
2722 1.1 joerg }
2723 1.1 joerg
2724 1.1 joerg # func_lalib_unsafe_p file
2725 1.1 joerg # True iff FILE is a libtool '.la' library or '.lo' object file.
2726 1.1 joerg # This function implements the same check as func_lalib_p without
2727 1.1 joerg # resorting to external programs. To this end, it redirects stdin and
2728 1.1 joerg # closes it afterwards, without saving the original file descriptor.
2729 1.1 joerg # As a safety measure, use it only where a negative result would be
2730 1.1 joerg # fatal anyway. Works if 'file' does not exist.
2731 1.1 joerg func_lalib_unsafe_p ()
2732 1.1 joerg {
2733 1.1 joerg lalib_p=no
2734 1.1 joerg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
2735 1.1 joerg for lalib_p_l in 1 2 3 4
2736 1.1 joerg do
2737 1.1 joerg read lalib_p_line
2738 1.1 joerg case $lalib_p_line in
2739 1.1 joerg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
2740 1.1 joerg esac
2741 1.1 joerg done
2742 1.1 joerg exec 0<&5 5<&-
2743 1.1 joerg fi
2744 1.1 joerg test yes = "$lalib_p"
2745 1.1 joerg }
2746 1.1 joerg
2747 1.1 joerg # func_ltwrapper_script_p file
2748 1.1 joerg # True iff FILE is a libtool wrapper script
2749 1.1 joerg # This function is only a basic sanity check; it will hardly flush out
2750 1.1 joerg # determined imposters.
2751 1.1 joerg func_ltwrapper_script_p ()
2752 1.1 joerg {
2753 1.1 joerg test -f "$1" &&
2754 1.1 joerg $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
2755 1.1 joerg }
2756 1.1 joerg
2757 1.1 joerg # func_ltwrapper_executable_p file
2758 1.1 joerg # True iff FILE is a libtool wrapper executable
2759 1.1 joerg # This function is only a basic sanity check; it will hardly flush out
2760 1.1 joerg # determined imposters.
2761 1.1 joerg func_ltwrapper_executable_p ()
2762 1.1 joerg {
2763 1.1 joerg func_ltwrapper_exec_suffix=
2764 1.1 joerg case $1 in
2765 1.1 joerg *.exe) ;;
2766 1.1 joerg *) func_ltwrapper_exec_suffix=.exe ;;
2767 1.1 joerg esac
2768 1.1 joerg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
2769 1.1 joerg }
2770 1.1 joerg
2771 1.1 joerg # func_ltwrapper_scriptname file
2772 1.1 joerg # Assumes file is an ltwrapper_executable
2773 1.1 joerg # uses $file to determine the appropriate filename for a
2774 1.1 joerg # temporary ltwrapper_script.
2775 1.1 joerg func_ltwrapper_scriptname ()
2776 1.1 joerg {
2777 1.1 joerg func_dirname_and_basename "$1" "" "."
2778 1.1 joerg func_stripname '' '.exe' "$func_basename_result"
2779 1.1 joerg func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
2780 1.1 joerg }
2781 1.1 joerg
2782 1.1 joerg # func_ltwrapper_p file
2783 1.1 joerg # True iff FILE is a libtool wrapper script or wrapper executable
2784 1.1 joerg # This function is only a basic sanity check; it will hardly flush out
2785 1.1 joerg # determined imposters.
2786 1.1 joerg func_ltwrapper_p ()
2787 1.1 joerg {
2788 1.1 joerg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
2789 1.1 joerg }
2790 1.1 joerg
2791 1.1 joerg
2792 1.1 joerg # func_execute_cmds commands fail_cmd
2793 1.1 joerg # Execute tilde-delimited COMMANDS.
2794 1.1 joerg # If FAIL_CMD is given, eval that upon failure.
2795 1.1 joerg # FAIL_CMD may read-access the current command in variable CMD!
2796 1.1 joerg func_execute_cmds ()
2797 1.1 joerg {
2798 1.1 joerg $debug_cmd
2799 1.1 joerg
2800 1.1 joerg save_ifs=$IFS; IFS='~'
2801 1.1 joerg for cmd in $1; do
2802 1.1 joerg IFS=$sp$nl
2803 1.1 joerg eval cmd=\"$cmd\"
2804 1.1 joerg IFS=$save_ifs
2805 1.1 joerg func_show_eval "$cmd" "${2-:}"
2806 1.1 joerg done
2807 1.1 joerg IFS=$save_ifs
2808 1.1 joerg }
2809 1.1 joerg
2810 1.1 joerg
2811 1.1 joerg # func_source file
2812 1.1 joerg # Source FILE, adding directory component if necessary.
2813 1.1 joerg # Note that it is not necessary on cygwin/mingw to append a dot to
2814 1.1 joerg # FILE even if both FILE and FILE.exe exist: automatic-append-.exe
2815 1.1 joerg # behavior happens only for exec(3), not for open(2)! Also, sourcing
2816 1.1 joerg # 'FILE.' does not work on cygwin managed mounts.
2817 1.1 joerg func_source ()
2818 1.1 joerg {
2819 1.1 joerg $debug_cmd
2820 1.1 joerg
2821 1.1 joerg case $1 in
2822 1.1 joerg */* | *\\*) . "$1" ;;
2823 1.1 joerg *) . "./$1" ;;
2824 1.1 joerg esac
2825 1.1 joerg }
2826 1.1 joerg
2827 1.1 joerg
2828 1.1 joerg # func_resolve_sysroot PATH
2829 1.1 joerg # Replace a leading = in PATH with a sysroot. Store the result into
2830 1.1 joerg # func_resolve_sysroot_result
2831 1.1 joerg func_resolve_sysroot ()
2832 1.1 joerg {
2833 1.1 joerg func_resolve_sysroot_result=$1
2834 1.1 joerg case $func_resolve_sysroot_result in
2835 1.1 joerg =*)
2836 1.1 joerg func_stripname '=' '' "$func_resolve_sysroot_result"
2837 1.1 joerg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
2838 1.1 joerg ;;
2839 1.1 joerg esac
2840 1.1 joerg }
2841 1.1 joerg
2842 1.1 joerg # func_replace_sysroot PATH
2843 1.1 joerg # If PATH begins with the sysroot, replace it with = and
2844 1.1 joerg # store the result into func_replace_sysroot_result.
2845 1.1 joerg func_replace_sysroot ()
2846 1.1 joerg {
2847 1.1 joerg case $lt_sysroot:$1 in
2848 1.1 joerg ?*:"$lt_sysroot"*)
2849 1.1 joerg func_stripname "$lt_sysroot" '' "$1"
2850 1.1 joerg func_replace_sysroot_result='='$func_stripname_result
2851 1.1 joerg ;;
2852 1.1 joerg *)
2853 1.1 joerg # Including no sysroot.
2854 1.1 joerg func_replace_sysroot_result=$1
2855 1.1 joerg ;;
2856 1.1 joerg esac
2857 1.1 joerg }
2858 1.1 joerg
2859 1.1 joerg # func_infer_tag arg
2860 1.1 joerg # Infer tagged configuration to use if any are available and
2861 1.1 joerg # if one wasn't chosen via the "--tag" command line option.
2862 1.1 joerg # Only attempt this if the compiler in the base compile
2863 1.1 joerg # command doesn't match the default compiler.
2864 1.1 joerg # arg is usually of the form 'gcc ...'
2865 1.1 joerg func_infer_tag ()
2866 1.1 joerg {
2867 1.1 joerg $debug_cmd
2868 1.1 joerg
2869 1.1 joerg if test -n "$available_tags" && test -z "$tagname"; then
2870 1.1 joerg CC_quoted=
2871 1.1 joerg for arg in $CC; do
2872 1.1 joerg func_append_quoted CC_quoted "$arg"
2873 1.1 joerg done
2874 1.1 joerg CC_expanded=`func_echo_all $CC`
2875 1.1 joerg CC_quoted_expanded=`func_echo_all $CC_quoted`
2876 1.1 joerg case $@ in
2877 1.1 joerg # Blanks in the command may have been stripped by the calling shell,
2878 1.1 joerg # but not from the CC environment variable when configure was run.
2879 1.1 joerg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2880 1.1 joerg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
2881 1.1 joerg # Blanks at the start of $base_compile will cause this to fail
2882 1.1 joerg # if we don't check for them as well.
2883 1.1 joerg *)
2884 1.1 joerg for z in $available_tags; do
2885 1.1 joerg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
2886 1.1 joerg # Evaluate the configuration.
2887 1.1 joerg eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
2888 1.1 joerg CC_quoted=
2889 1.1 joerg for arg in $CC; do
2890 1.1 joerg # Double-quote args containing other shell metacharacters.
2891 1.1 joerg func_append_quoted CC_quoted "$arg"
2892 1.1 joerg done
2893 1.1 joerg CC_expanded=`func_echo_all $CC`
2894 1.1 joerg CC_quoted_expanded=`func_echo_all $CC_quoted`
2895 1.1 joerg case "$@ " in
2896 1.1 joerg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2897 1.1 joerg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
2898 1.1 joerg # The compiler in the base compile command matches
2899 1.1 joerg # the one in the tagged configuration.
2900 1.1 joerg # Assume this is the tagged configuration we want.
2901 1.1 joerg tagname=$z
2902 1.1 joerg break
2903 1.1 joerg ;;
2904 1.1 joerg esac
2905 1.1 joerg fi
2906 1.1 joerg done
2907 1.1 joerg # If $tagname still isn't set, then no tagged configuration
2908 1.1 joerg # was found and let the user know that the "--tag" command
2909 1.1 joerg # line option must be used.
2910 1.1 joerg if test -z "$tagname"; then
2911 1.1 joerg func_echo "unable to infer tagged configuration"
2912 1.1 joerg func_fatal_error "specify a tag with '--tag'"
2913 1.1 joerg # else
2914 1.1 joerg # func_verbose "using $tagname tagged configuration"
2915 1.1 joerg fi
2916 1.1 joerg ;;
2917 1.1 joerg esac
2918 1.1 joerg fi
2919 1.1 joerg }
2920 1.1 joerg
2921 1.1 joerg
2922 1.1 joerg
2923 1.1 joerg # func_write_libtool_object output_name pic_name nonpic_name
2924 1.1 joerg # Create a libtool object file (analogous to a ".la" file),
2925 1.1 joerg # but don't create it if we're doing a dry run.
2926 1.1 joerg func_write_libtool_object ()
2927 1.1 joerg {
2928 1.1 joerg write_libobj=$1
2929 1.1 joerg if test yes = "$build_libtool_libs"; then
2930 1.1 joerg write_lobj=\'$2\'
2931 1.1 joerg else
2932 1.1 joerg write_lobj=none
2933 1.1 joerg fi
2934 1.1 joerg
2935 1.1 joerg if test yes = "$build_old_libs"; then
2936 1.1 joerg write_oldobj=\'$3\'
2937 1.1 joerg else
2938 1.1 joerg write_oldobj=none
2939 1.1 joerg fi
2940 1.1 joerg
2941 1.1 joerg $opt_dry_run || {
2942 1.1 joerg cat >${write_libobj}T <<EOF
2943 1.1 joerg # $write_libobj - a libtool object file
2944 1.1 joerg # Generated by $PROGRAM (GNU $PACKAGE) $VERSION
2945 1.1 joerg #
2946 1.1 joerg # Please DO NOT delete this file!
2947 1.1 joerg # It is necessary for linking the library.
2948 1.1 joerg
2949 1.1 joerg # Name of the PIC object.
2950 1.1 joerg pic_object=$write_lobj
2951 1.1 joerg
2952 1.1 joerg # Name of the non-PIC object
2953 1.1 joerg non_pic_object=$write_oldobj
2954 1.1 joerg
2955 1.1 joerg EOF
2956 1.1 joerg $MV "${write_libobj}T" "$write_libobj"
2957 1.1 joerg }
2958 1.1 joerg }
2959 1.1 joerg
2960 1.1 joerg
2961 1.1 joerg ##################################################
2962 1.1 joerg # FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
2963 1.1 joerg ##################################################
2964 1.1 joerg
2965 1.1 joerg # func_convert_core_file_wine_to_w32 ARG
2966 1.1 joerg # Helper function used by file name conversion functions when $build is *nix,
2967 1.1 joerg # and $host is mingw, cygwin, or some other w32 environment. Relies on a
2968 1.1 joerg # correctly configured wine environment available, with the winepath program
2969 1.1 joerg # in $build's $PATH.
2970 1.1 joerg #
2971 1.1 joerg # ARG is the $build file name to be converted to w32 format.
2972 1.1 joerg # Result is available in $func_convert_core_file_wine_to_w32_result, and will
2973 1.1 joerg # be empty on error (or when ARG is empty)
2974 1.1 joerg func_convert_core_file_wine_to_w32 ()
2975 1.1 joerg {
2976 1.1 joerg $debug_cmd
2977 1.1 joerg
2978 1.1 joerg func_convert_core_file_wine_to_w32_result=$1
2979 1.1 joerg if test -n "$1"; then
2980 1.1 joerg # Unfortunately, winepath does not exit with a non-zero error code, so we
2981 1.1 joerg # are forced to check the contents of stdout. On the other hand, if the
2982 1.1 joerg # command is not found, the shell will set an exit code of 127 and print
2983 1.1 joerg # *an error message* to stdout. So we must check for both error code of
2984 1.1 joerg # zero AND non-empty stdout, which explains the odd construction:
2985 1.1 joerg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
2986 1.1 joerg if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
2987 1.1 joerg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
2988 1.1 joerg $SED -e "$sed_naive_backslashify"`
2989 1.1 joerg else
2990 1.1 joerg func_convert_core_file_wine_to_w32_result=
2991 1.1 joerg fi
2992 1.1 joerg fi
2993 1.1 joerg }
2994 1.1 joerg # end: func_convert_core_file_wine_to_w32
2995 1.1 joerg
2996 1.1 joerg
2997 1.1 joerg # func_convert_core_path_wine_to_w32 ARG
2998 1.1 joerg # Helper function used by path conversion functions when $build is *nix, and
2999 1.1 joerg # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
3000 1.1 joerg # configured wine environment available, with the winepath program in $build's
3001 1.1 joerg # $PATH. Assumes ARG has no leading or trailing path separator characters.
3002 1.1 joerg #
3003 1.1 joerg # ARG is path to be converted from $build format to win32.
3004 1.1 joerg # Result is available in $func_convert_core_path_wine_to_w32_result.
3005 1.1 joerg # Unconvertible file (directory) names in ARG are skipped; if no directory names
3006 1.1 joerg # are convertible, then the result may be empty.
3007 1.1 joerg func_convert_core_path_wine_to_w32 ()
3008 1.1 joerg {
3009 1.1 joerg $debug_cmd
3010 1.1 joerg
3011 1.1 joerg # unfortunately, winepath doesn't convert paths, only file names
3012 1.1 joerg func_convert_core_path_wine_to_w32_result=
3013 1.1 joerg if test -n "$1"; then
3014 1.1 joerg oldIFS=$IFS
3015 1.1 joerg IFS=:
3016 1.1 joerg for func_convert_core_path_wine_to_w32_f in $1; do
3017 1.1 joerg IFS=$oldIFS
3018 1.1 joerg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
3019 1.1 joerg if test -n "$func_convert_core_file_wine_to_w32_result"; then
3020 1.1 joerg if test -z "$func_convert_core_path_wine_to_w32_result"; then
3021 1.1 joerg func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
3022 1.1 joerg else
3023 1.1 joerg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
3024 1.1 joerg fi
3025 1.1 joerg fi
3026 1.1 joerg done
3027 1.1 joerg IFS=$oldIFS
3028 1.1 joerg fi
3029 1.1 joerg }
3030 1.1 joerg # end: func_convert_core_path_wine_to_w32
3031 1.1 joerg
3032 1.1 joerg
3033 1.1 joerg # func_cygpath ARGS...
3034 1.1 joerg # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
3035 1.1 joerg # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
3036 1.1 joerg # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
3037 1.1 joerg # (2), returns the Cygwin file name or path in func_cygpath_result (input
3038 1.1 joerg # file name or path is assumed to be in w32 format, as previously converted
3039 1.1 joerg # from $build's *nix or MSYS format). In case (3), returns the w32 file name
3040 1.1 joerg # or path in func_cygpath_result (input file name or path is assumed to be in
3041 1.1 joerg # Cygwin format). Returns an empty string on error.
3042 1.1 joerg #
3043 1.1 joerg # ARGS are passed to cygpath, with the last one being the file name or path to
3044 1.1 joerg # be converted.
3045 1.1 joerg #
3046 1.1 joerg # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
3047 1.1 joerg # environment variable; do not put it in $PATH.
3048 1.1 joerg func_cygpath ()
3049 1.1 joerg {
3050 1.1 joerg $debug_cmd
3051 1.1 joerg
3052 1.1 joerg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
3053 1.1 joerg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
3054 1.1 joerg if test "$?" -ne 0; then
3055 1.1 joerg # on failure, ensure result is empty
3056 1.1 joerg func_cygpath_result=
3057 1.1 joerg fi
3058 1.1 joerg else
3059 1.1 joerg func_cygpath_result=
3060 1.1 joerg func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
3061 1.1 joerg fi
3062 1.1 joerg }
3063 1.1 joerg #end: func_cygpath
3064 1.1 joerg
3065 1.1 joerg
3066 1.1 joerg # func_convert_core_msys_to_w32 ARG
3067 1.1 joerg # Convert file name or path ARG from MSYS format to w32 format. Return
3068 1.1 joerg # result in func_convert_core_msys_to_w32_result.
3069 1.1 joerg func_convert_core_msys_to_w32 ()
3070 1.1 joerg {
3071 1.1 joerg $debug_cmd
3072 1.1 joerg
3073 1.1 joerg # awkward: cmd appends spaces to result
3074 1.1 joerg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
3075 1.1 joerg $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
3076 1.1 joerg }
3077 1.1 joerg #end: func_convert_core_msys_to_w32
3078 1.1 joerg
3079 1.1 joerg
3080 1.1 joerg # func_convert_file_check ARG1 ARG2
3081 1.1 joerg # Verify that ARG1 (a file name in $build format) was converted to $host
3082 1.1 joerg # format in ARG2. Otherwise, emit an error message, but continue (resetting
3083 1.1 joerg # func_to_host_file_result to ARG1).
3084 1.1 joerg func_convert_file_check ()
3085 1.1 joerg {
3086 1.1 joerg $debug_cmd
3087 1.1 joerg
3088 1.1 joerg if test -z "$2" && test -n "$1"; then
3089 1.1 joerg func_error "Could not determine host file name corresponding to"
3090 1.1 joerg func_error " '$1'"
3091 1.1 joerg func_error "Continuing, but uninstalled executables may not work."
3092 1.1 joerg # Fallback:
3093 1.1 joerg func_to_host_file_result=$1
3094 1.1 joerg fi
3095 1.1 joerg }
3096 1.1 joerg # end func_convert_file_check
3097 1.1 joerg
3098 1.1 joerg
3099 1.1 joerg # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
3100 1.1 joerg # Verify that FROM_PATH (a path in $build format) was converted to $host
3101 1.1 joerg # format in TO_PATH. Otherwise, emit an error message, but continue, resetting
3102 1.1 joerg # func_to_host_file_result to a simplistic fallback value (see below).
3103 1.1 joerg func_convert_path_check ()
3104 1.1 joerg {
3105 1.1 joerg $debug_cmd
3106 1.1 joerg
3107 1.1 joerg if test -z "$4" && test -n "$3"; then
3108 1.1 joerg func_error "Could not determine the host path corresponding to"
3109 1.1 joerg func_error " '$3'"
3110 1.1 joerg func_error "Continuing, but uninstalled executables may not work."
3111 1.1 joerg # Fallback. This is a deliberately simplistic "conversion" and
3112 1.1 joerg # should not be "improved". See libtool.info.
3113 1.1 joerg if test "x$1" != "x$2"; then
3114 1.1 joerg lt_replace_pathsep_chars="s|$1|$2|g"
3115 1.1 joerg func_to_host_path_result=`echo "$3" |
3116 1.1 joerg $SED -e "$lt_replace_pathsep_chars"`
3117 1.1 joerg else
3118 1.1 joerg func_to_host_path_result=$3
3119 1.1 joerg fi
3120 1.1 joerg fi
3121 1.1 joerg }
3122 1.1 joerg # end func_convert_path_check
3123 1.1 joerg
3124 1.1 joerg
3125 1.1 joerg # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
3126 1.1 joerg # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
3127 1.1 joerg # and appending REPL if ORIG matches BACKPAT.
3128 1.1 joerg func_convert_path_front_back_pathsep ()
3129 1.1 joerg {
3130 1.1 joerg $debug_cmd
3131 1.1 joerg
3132 1.1 joerg case $4 in
3133 1.1 joerg $1 ) func_to_host_path_result=$3$func_to_host_path_result
3134 1.1 joerg ;;
3135 1.1 joerg esac
3136 1.1 joerg case $4 in
3137 1.1 joerg $2 ) func_append func_to_host_path_result "$3"
3138 1.1 joerg ;;
3139 1.1 joerg esac
3140 1.1 joerg }
3141 1.1 joerg # end func_convert_path_front_back_pathsep
3142 1.1 joerg
3143 1.1 joerg
3144 1.1 joerg ##################################################
3145 1.1 joerg # $build to $host FILE NAME CONVERSION FUNCTIONS #
3146 1.1 joerg ##################################################
3147 1.1 joerg # invoked via '$to_host_file_cmd ARG'
3148 1.1 joerg #
3149 1.1 joerg # In each case, ARG is the path to be converted from $build to $host format.
3150 1.1 joerg # Result will be available in $func_to_host_file_result.
3151 1.1 joerg
3152 1.1 joerg
3153 1.1 joerg # func_to_host_file ARG
3154 1.1 joerg # Converts the file name ARG from $build format to $host format. Return result
3155 1.1 joerg # in func_to_host_file_result.
3156 1.1 joerg func_to_host_file ()
3157 1.1 joerg {
3158 1.1 joerg $debug_cmd
3159 1.1 joerg
3160 1.1 joerg $to_host_file_cmd "$1"
3161 1.1 joerg }
3162 1.1 joerg # end func_to_host_file
3163 1.1 joerg
3164 1.1 joerg
3165 1.1 joerg # func_to_tool_file ARG LAZY
3166 1.1 joerg # converts the file name ARG from $build format to toolchain format. Return
3167 1.1 joerg # result in func_to_tool_file_result. If the conversion in use is listed
3168 1.1 joerg # in (the comma separated) LAZY, no conversion takes place.
3169 1.1 joerg func_to_tool_file ()
3170 1.1 joerg {
3171 1.1 joerg $debug_cmd
3172 1.1 joerg
3173 1.1 joerg case ,$2, in
3174 1.1 joerg *,"$to_tool_file_cmd",*)
3175 1.1 joerg func_to_tool_file_result=$1
3176 1.1 joerg ;;
3177 1.1 joerg *)
3178 1.1 joerg $to_tool_file_cmd "$1"
3179 1.1 joerg func_to_tool_file_result=$func_to_host_file_result
3180 1.1 joerg ;;
3181 1.1 joerg esac
3182 1.1 joerg }
3183 1.1 joerg # end func_to_tool_file
3184 1.1 joerg
3185 1.1 joerg
3186 1.1 joerg # func_convert_file_noop ARG
3187 1.1 joerg # Copy ARG to func_to_host_file_result.
3188 1.1 joerg func_convert_file_noop ()
3189 1.1 joerg {
3190 1.1 joerg func_to_host_file_result=$1
3191 1.1 joerg }
3192 1.1 joerg # end func_convert_file_noop
3193 1.1 joerg
3194 1.1 joerg
3195 1.1 joerg # func_convert_file_msys_to_w32 ARG
3196 1.1 joerg # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
3197 1.1 joerg # conversion to w32 is not available inside the cwrapper. Returns result in
3198 1.1 joerg # func_to_host_file_result.
3199 1.1 joerg func_convert_file_msys_to_w32 ()
3200 1.1 joerg {
3201 1.1 joerg $debug_cmd
3202 1.1 joerg
3203 1.1 joerg func_to_host_file_result=$1
3204 1.1 joerg if test -n "$1"; then
3205 1.1 joerg func_convert_core_msys_to_w32 "$1"
3206 1.1 joerg func_to_host_file_result=$func_convert_core_msys_to_w32_result
3207 1.1 joerg fi
3208 1.1 joerg func_convert_file_check "$1" "$func_to_host_file_result"
3209 1.1 joerg }
3210 1.1 joerg # end func_convert_file_msys_to_w32
3211 1.1 joerg
3212 1.1 joerg
3213 1.1 joerg # func_convert_file_cygwin_to_w32 ARG
3214 1.1 joerg # Convert file name ARG from Cygwin to w32 format. Returns result in
3215 1.1 joerg # func_to_host_file_result.
3216 1.1 joerg func_convert_file_cygwin_to_w32 ()
3217 1.1 joerg {
3218 1.1 joerg $debug_cmd
3219 1.1 joerg
3220 1.1 joerg func_to_host_file_result=$1
3221 1.1 joerg if test -n "$1"; then
3222 1.1 joerg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
3223 1.1 joerg # LT_CYGPATH in this case.
3224 1.1 joerg func_to_host_file_result=`cygpath -m "$1"`
3225 1.1 joerg fi
3226 1.1 joerg func_convert_file_check "$1" "$func_to_host_file_result"
3227 1.1 joerg }
3228 1.1 joerg # end func_convert_file_cygwin_to_w32
3229 1.1 joerg
3230 1.1 joerg
3231 1.1 joerg # func_convert_file_nix_to_w32 ARG
3232 1.1 joerg # Convert file name ARG from *nix to w32 format. Requires a wine environment
3233 1.1 joerg # and a working winepath. Returns result in func_to_host_file_result.
3234 1.1 joerg func_convert_file_nix_to_w32 ()
3235 1.1 joerg {
3236 1.1 joerg $debug_cmd
3237 1.1 joerg
3238 1.1 joerg func_to_host_file_result=$1
3239 1.1 joerg if test -n "$1"; then
3240 1.1 joerg func_convert_core_file_wine_to_w32 "$1"
3241 1.1 joerg func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
3242 1.1 joerg fi
3243 1.1 joerg func_convert_file_check "$1" "$func_to_host_file_result"
3244 1.1 joerg }
3245 1.1 joerg # end func_convert_file_nix_to_w32
3246 1.1 joerg
3247 1.1 joerg
3248 1.1 joerg # func_convert_file_msys_to_cygwin ARG
3249 1.1 joerg # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
3250 1.1 joerg # Returns result in func_to_host_file_result.
3251 1.1 joerg func_convert_file_msys_to_cygwin ()
3252 1.1 joerg {
3253 1.1 joerg $debug_cmd
3254 1.1 joerg
3255 1.1 joerg func_to_host_file_result=$1
3256 1.1 joerg if test -n "$1"; then
3257 1.1 joerg func_convert_core_msys_to_w32 "$1"
3258 1.1 joerg func_cygpath -u "$func_convert_core_msys_to_w32_result"
3259 1.1 joerg func_to_host_file_result=$func_cygpath_result
3260 1.1 joerg fi
3261 1.1 joerg func_convert_file_check "$1" "$func_to_host_file_result"
3262 1.1 joerg }
3263 1.1 joerg # end func_convert_file_msys_to_cygwin
3264 1.1 joerg
3265 1.1 joerg
3266 1.1 joerg # func_convert_file_nix_to_cygwin ARG
3267 1.1 joerg # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed
3268 1.1 joerg # in a wine environment, working winepath, and LT_CYGPATH set. Returns result
3269 1.1 joerg # in func_to_host_file_result.
3270 1.1 joerg func_convert_file_nix_to_cygwin ()
3271 1.1 joerg {
3272 1.1 joerg $debug_cmd
3273 1.1 joerg
3274 1.1 joerg func_to_host_file_result=$1
3275 1.1 joerg if test -n "$1"; then
3276 1.1 joerg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
3277 1.1 joerg func_convert_core_file_wine_to_w32 "$1"
3278 1.1 joerg func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
3279 1.1 joerg func_to_host_file_result=$func_cygpath_result
3280 1.1 joerg fi
3281 1.1 joerg func_convert_file_check "$1" "$func_to_host_file_result"
3282 1.1 joerg }
3283 1.1 joerg # end func_convert_file_nix_to_cygwin
3284 1.1 joerg
3285 1.1 joerg
3286 1.1 joerg #############################################
3287 1.1 joerg # $build to $host PATH CONVERSION FUNCTIONS #
3288 1.1 joerg #############################################
3289 1.1 joerg # invoked via '$to_host_path_cmd ARG'
3290 1.1 joerg #
3291 1.1 joerg # In each case, ARG is the path to be converted from $build to $host format.
3292 1.1 joerg # The result will be available in $func_to_host_path_result.
3293 1.1 joerg #
3294 1.1 joerg # Path separators are also converted from $build format to $host format. If
3295 1.1 joerg # ARG begins or ends with a path separator character, it is preserved (but
3296 1.1 joerg # converted to $host format) on output.
3297 1.1 joerg #
3298 1.1 joerg # All path conversion functions are named using the following convention:
3299 1.1 joerg # file name conversion function : func_convert_file_X_to_Y ()
3300 1.1 joerg # path conversion function : func_convert_path_X_to_Y ()
3301 1.1 joerg # where, for any given $build/$host combination the 'X_to_Y' value is the
3302 1.1 joerg # same. If conversion functions are added for new $build/$host combinations,
3303 1.1 joerg # the two new functions must follow this pattern, or func_init_to_host_path_cmd
3304 1.1 joerg # will break.
3305 1.1 joerg
3306 1.1 joerg
3307 1.1 joerg # func_init_to_host_path_cmd
3308 1.1 joerg # Ensures that function "pointer" variable $to_host_path_cmd is set to the
3309 1.1 joerg # appropriate value, based on the value of $to_host_file_cmd.
3310 1.1 joerg to_host_path_cmd=
3311 1.1 joerg func_init_to_host_path_cmd ()
3312 1.1 joerg {
3313 1.1 joerg $debug_cmd
3314 1.1 joerg
3315 1.1 joerg if test -z "$to_host_path_cmd"; then
3316 1.1 joerg func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
3317 1.1 joerg to_host_path_cmd=func_convert_path_$func_stripname_result
3318 1.1 joerg fi
3319 1.1 joerg }
3320 1.1 joerg
3321 1.1 joerg
3322 1.1 joerg # func_to_host_path ARG
3323 1.1 joerg # Converts the path ARG from $build format to $host format. Return result
3324 1.1 joerg # in func_to_host_path_result.
3325 1.1 joerg func_to_host_path ()
3326 1.1 joerg {
3327 1.1 joerg $debug_cmd
3328 1.1 joerg
3329 1.1 joerg func_init_to_host_path_cmd
3330 1.1 joerg $to_host_path_cmd "$1"
3331 1.1 joerg }
3332 1.1 joerg # end func_to_host_path
3333 1.1 joerg
3334 1.1 joerg
3335 1.1 joerg # func_convert_path_noop ARG
3336 1.1 joerg # Copy ARG to func_to_host_path_result.
3337 1.1 joerg func_convert_path_noop ()
3338 1.1 joerg {
3339 1.1 joerg func_to_host_path_result=$1
3340 1.1 joerg }
3341 1.1 joerg # end func_convert_path_noop
3342 1.1 joerg
3343 1.1 joerg
3344 1.1 joerg # func_convert_path_msys_to_w32 ARG
3345 1.1 joerg # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
3346 1.1 joerg # conversion to w32 is not available inside the cwrapper. Returns result in
3347 1.1 joerg # func_to_host_path_result.
3348 1.1 joerg func_convert_path_msys_to_w32 ()
3349 1.1 joerg {
3350 1.1 joerg $debug_cmd
3351 1.1 joerg
3352 1.1 joerg func_to_host_path_result=$1
3353 1.1 joerg if test -n "$1"; then
3354 1.1 joerg # Remove leading and trailing path separator characters from ARG. MSYS
3355 1.1 joerg # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
3356 1.1 joerg # and winepath ignores them completely.
3357 1.1 joerg func_stripname : : "$1"
3358 1.1 joerg func_to_host_path_tmp1=$func_stripname_result
3359 1.1 joerg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3360 1.1 joerg func_to_host_path_result=$func_convert_core_msys_to_w32_result
3361 1.1 joerg func_convert_path_check : ";" \
3362 1.1 joerg "$func_to_host_path_tmp1" "$func_to_host_path_result"
3363 1.1 joerg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3364 1.1 joerg fi
3365 1.1 joerg }
3366 1.1 joerg # end func_convert_path_msys_to_w32
3367 1.1 joerg
3368 1.1 joerg
3369 1.1 joerg # func_convert_path_cygwin_to_w32 ARG
3370 1.1 joerg # Convert path ARG from Cygwin to w32 format. Returns result in
3371 1.1 joerg # func_to_host_file_result.
3372 1.1 joerg func_convert_path_cygwin_to_w32 ()
3373 1.1 joerg {
3374 1.1 joerg $debug_cmd
3375 1.1 joerg
3376 1.1 joerg func_to_host_path_result=$1
3377 1.1 joerg if test -n "$1"; then
3378 1.1 joerg # See func_convert_path_msys_to_w32:
3379 1.1 joerg func_stripname : : "$1"
3380 1.1 joerg func_to_host_path_tmp1=$func_stripname_result
3381 1.1 joerg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
3382 1.1 joerg func_convert_path_check : ";" \
3383 1.1 joerg "$func_to_host_path_tmp1" "$func_to_host_path_result"
3384 1.1 joerg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3385 1.1 joerg fi
3386 1.1 joerg }
3387 1.1 joerg # end func_convert_path_cygwin_to_w32
3388 1.1 joerg
3389 1.1 joerg
3390 1.1 joerg # func_convert_path_nix_to_w32 ARG
3391 1.1 joerg # Convert path ARG from *nix to w32 format. Requires a wine environment and
3392 1.1 joerg # a working winepath. Returns result in func_to_host_file_result.
3393 1.1 joerg func_convert_path_nix_to_w32 ()
3394 1.1 joerg {
3395 1.1 joerg $debug_cmd
3396 1.1 joerg
3397 1.1 joerg func_to_host_path_result=$1
3398 1.1 joerg if test -n "$1"; then
3399 1.1 joerg # See func_convert_path_msys_to_w32:
3400 1.1 joerg func_stripname : : "$1"
3401 1.1 joerg func_to_host_path_tmp1=$func_stripname_result
3402 1.1 joerg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3403 1.1 joerg func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
3404 1.1 joerg func_convert_path_check : ";" \
3405 1.1 joerg "$func_to_host_path_tmp1" "$func_to_host_path_result"
3406 1.1 joerg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3407 1.1 joerg fi
3408 1.1 joerg }
3409 1.1 joerg # end func_convert_path_nix_to_w32
3410 1.1 joerg
3411 1.1 joerg
3412 1.1 joerg # func_convert_path_msys_to_cygwin ARG
3413 1.1 joerg # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
3414 1.1 joerg # Returns result in func_to_host_file_result.
3415 1.1 joerg func_convert_path_msys_to_cygwin ()
3416 1.1 joerg {
3417 1.1 joerg $debug_cmd
3418 1.1 joerg
3419 1.1 joerg func_to_host_path_result=$1
3420 1.1 joerg if test -n "$1"; then
3421 1.1 joerg # See func_convert_path_msys_to_w32:
3422 1.1 joerg func_stripname : : "$1"
3423 1.1 joerg func_to_host_path_tmp1=$func_stripname_result
3424 1.1 joerg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3425 1.1 joerg func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
3426 1.1 joerg func_to_host_path_result=$func_cygpath_result
3427 1.1 joerg func_convert_path_check : : \
3428 1.1 joerg "$func_to_host_path_tmp1" "$func_to_host_path_result"
3429 1.1 joerg func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3430 1.1 joerg fi
3431 1.1 joerg }
3432 1.1 joerg # end func_convert_path_msys_to_cygwin
3433 1.1 joerg
3434 1.1 joerg
3435 1.1 joerg # func_convert_path_nix_to_cygwin ARG
3436 1.1 joerg # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a
3437 1.1 joerg # a wine environment, working winepath, and LT_CYGPATH set. Returns result in
3438 1.1 joerg # func_to_host_file_result.
3439 1.1 joerg func_convert_path_nix_to_cygwin ()
3440 1.1 joerg {
3441 1.1 joerg $debug_cmd
3442 1.1 joerg
3443 1.1 joerg func_to_host_path_result=$1
3444 1.1 joerg if test -n "$1"; then
3445 1.1 joerg # Remove leading and trailing path separator characters from
3446 1.1 joerg # ARG. msys behavior is inconsistent here, cygpath turns them
3447 1.1 joerg # into '.;' and ';.', and winepath ignores them completely.
3448 1.1 joerg func_stripname : : "$1"
3449 1.1 joerg func_to_host_path_tmp1=$func_stripname_result
3450 1.1 joerg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3451 1.1 joerg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
3452 1.1 joerg func_to_host_path_result=$func_cygpath_result
3453 1.1 joerg func_convert_path_check : : \
3454 1.1 joerg "$func_to_host_path_tmp1" "$func_to_host_path_result"
3455 1.1 joerg func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3456 1.1 joerg fi
3457 1.1 joerg }
3458 1.1 joerg # end func_convert_path_nix_to_cygwin
3459 1.1 joerg
3460 1.1 joerg
3461 1.1 joerg # func_dll_def_p FILE
3462 1.1 joerg # True iff FILE is a Windows DLL '.def' file.
3463 1.1 joerg # Keep in sync with _LT_DLL_DEF_P in libtool.m4
3464 1.1 joerg func_dll_def_p ()
3465 1.1 joerg {
3466 1.1 joerg $debug_cmd
3467 1.1 joerg
3468 1.1 joerg func_dll_def_p_tmp=`$SED -n \
3469 1.1 joerg -e 's/^[ ]*//' \
3470 1.1 joerg -e '/^\(;.*\)*$/d' \
3471 1.1 joerg -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \
3472 1.1 joerg -e q \
3473 1.1 joerg "$1"`
3474 1.1 joerg test DEF = "$func_dll_def_p_tmp"
3475 1.1 joerg }
3476 1.1 joerg
3477 1.1 joerg
3478 1.1 joerg # func_mode_compile arg...
3479 1.1 joerg func_mode_compile ()
3480 1.1 joerg {
3481 1.1 joerg $debug_cmd
3482 1.1 joerg
3483 1.1 joerg # Get the compilation command and the source file.
3484 1.1 joerg base_compile=
3485 1.1 joerg srcfile=$nonopt # always keep a non-empty value in "srcfile"
3486 1.1 joerg suppress_opt=yes
3487 1.1 joerg suppress_output=
3488 1.1 joerg arg_mode=normal
3489 1.1 joerg libobj=
3490 1.1 joerg later=
3491 1.1 joerg pie_flag=
3492 1.1 joerg
3493 1.1 joerg for arg
3494 1.1 joerg do
3495 1.1 joerg case $arg_mode in
3496 1.1 joerg arg )
3497 1.1 joerg # do not "continue". Instead, add this to base_compile
3498 1.1 joerg lastarg=$arg
3499 1.1 joerg arg_mode=normal
3500 1.1 joerg ;;
3501 1.1 joerg
3502 1.1 joerg target )
3503 1.1 joerg libobj=$arg
3504 1.1 joerg arg_mode=normal
3505 1.1 joerg continue
3506 1.1 joerg ;;
3507 1.1 joerg
3508 1.1 joerg normal )
3509 1.1 joerg # Accept any command-line options.
3510 1.1 joerg case $arg in
3511 1.1 joerg -o)
3512 1.1 joerg test -n "$libobj" && \
3513 1.1 joerg func_fatal_error "you cannot specify '-o' more than once"
3514 1.1 joerg arg_mode=target
3515 1.1 joerg continue
3516 1.1 joerg ;;
3517 1.1 joerg
3518 1.1 joerg -pie | -fpie | -fPIE)
3519 1.1 joerg func_append pie_flag " $arg"
3520 1.1 joerg continue
3521 1.1 joerg ;;
3522 1.1 joerg
3523 1.1 joerg -shared | -static | -prefer-pic | -prefer-non-pic)
3524 1.1 joerg func_append later " $arg"
3525 1.1 joerg continue
3526 1.1 joerg ;;
3527 1.1 joerg
3528 1.1 joerg -no-suppress)
3529 1.1 joerg suppress_opt=no
3530 1.1 joerg continue
3531 1.1 joerg ;;
3532 1.1 joerg
3533 1.1 joerg -Xcompiler)
3534 1.1 joerg arg_mode=arg # the next one goes into the "base_compile" arg list
3535 1.1 joerg continue # The current "srcfile" will either be retained or
3536 1.1 joerg ;; # replaced later. I would guess that would be a bug.
3537 1.1 joerg
3538 1.1 joerg -Wc,*)
3539 1.1 joerg func_stripname '-Wc,' '' "$arg"
3540 1.1 joerg args=$func_stripname_result
3541 1.1 joerg lastarg=
3542 1.1 joerg save_ifs=$IFS; IFS=,
3543 1.1 joerg for arg in $args; do
3544 1.1 joerg IFS=$save_ifs
3545 1.1 joerg func_append_quoted lastarg "$arg"
3546 1.1 joerg done
3547 1.1 joerg IFS=$save_ifs
3548 1.1 joerg func_stripname ' ' '' "$lastarg"
3549 1.1 joerg lastarg=$func_stripname_result
3550 1.1 joerg
3551 1.1 joerg # Add the arguments to base_compile.
3552 1.1 joerg func_append base_compile " $lastarg"
3553 1.1 joerg continue
3554 1.1 joerg ;;
3555 1.1 joerg
3556 1.1 joerg *)
3557 1.1 joerg # Accept the current argument as the source file.
3558 1.1 joerg # The previous "srcfile" becomes the current argument.
3559 1.1 joerg #
3560 1.1 joerg lastarg=$srcfile
3561 1.1 joerg srcfile=$arg
3562 1.1 joerg ;;
3563 1.1 joerg esac # case $arg
3564 1.1 joerg ;;
3565 1.1 joerg esac # case $arg_mode
3566 1.1 joerg
3567 1.1 joerg # Aesthetically quote the previous argument.
3568 1.1 joerg func_append_quoted base_compile "$lastarg"
3569 1.1 joerg done # for arg
3570 1.1 joerg
3571 1.1 joerg case $arg_mode in
3572 1.1 joerg arg)
3573 1.1 joerg func_fatal_error "you must specify an argument for -Xcompile"
3574 1.1 joerg ;;
3575 1.1 joerg target)
3576 1.1 joerg func_fatal_error "you must specify a target with '-o'"
3577 1.1 joerg ;;
3578 1.1 joerg *)
3579 1.1 joerg # Get the name of the library object.
3580 1.1 joerg test -z "$libobj" && {
3581 1.1 joerg func_basename "$srcfile"
3582 1.1 joerg libobj=$func_basename_result
3583 1.1 joerg }
3584 1.1 joerg ;;
3585 1.1 joerg esac
3586 1.1 joerg
3587 1.1 joerg # Recognize several different file suffixes.
3588 1.1 joerg # If the user specifies -o file.o, it is replaced with file.lo
3589 1.1 joerg case $libobj in
3590 1.1 joerg *.[cCFSifmso] | \
3591 1.1 joerg *.ada | *.adb | *.ads | *.asm | \
3592 1.1 joerg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
3593 1.1 joerg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
3594 1.1 joerg func_xform "$libobj"
3595 1.1 joerg libobj=$func_xform_result
3596 1.1 joerg ;;
3597 1.1 joerg esac
3598 1.1 joerg
3599 1.1 joerg case $libobj in
3600 1.1 joerg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
3601 1.1 joerg *)
3602 1.1 joerg func_fatal_error "cannot determine name of library object from '$libobj'"
3603 1.1 joerg ;;
3604 1.1 joerg esac
3605 1.1 joerg
3606 1.1 joerg func_infer_tag $base_compile
3607 1.1 joerg
3608 1.1 joerg for arg in $later; do
3609 1.1 joerg case $arg in
3610 1.1 joerg -shared)
3611 1.1 joerg test yes = "$build_libtool_libs" \
3612 1.1 joerg || func_fatal_configuration "cannot build a shared library"
3613 1.1 joerg build_old_libs=no
3614 1.1 joerg continue
3615 1.1 joerg ;;
3616 1.1 joerg
3617 1.1 joerg -static)
3618 1.1 joerg build_libtool_libs=no
3619 1.1 joerg build_old_libs=yes
3620 1.1 joerg continue
3621 1.1 joerg ;;
3622 1.1 joerg
3623 1.1 joerg -prefer-pic)
3624 1.1 joerg pic_mode=yes
3625 1.1 joerg continue
3626 1.1 joerg ;;
3627 1.1 joerg
3628 1.1 joerg -prefer-non-pic)
3629 1.1 joerg pic_mode=no
3630 1.1 joerg continue
3631 1.1 joerg ;;
3632 1.1 joerg esac
3633 1.1 joerg done
3634 1.1 joerg
3635 1.1 joerg func_quote_arg pretty "$libobj"
3636 1.1 joerg test "X$libobj" != "X$func_quote_arg_result" \
3637 1.1 joerg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
3638 1.1 joerg && func_warning "libobj name '$libobj' may not contain shell special characters."
3639 1.1 joerg func_dirname_and_basename "$obj" "/" ""
3640 1.1 joerg objname=$func_basename_result
3641 1.1 joerg xdir=$func_dirname_result
3642 1.1 joerg lobj=$xdir$objdir/$objname
3643 1.1 joerg
3644 1.1 joerg test -z "$base_compile" && \
3645 1.1 joerg func_fatal_help "you must specify a compilation command"
3646 1.1 joerg
3647 1.1 joerg # Delete any leftover library objects.
3648 1.1 joerg if test yes = "$build_old_libs"; then
3649 1.1 joerg removelist="$obj $lobj $libobj ${libobj}T"
3650 1.1 joerg else
3651 1.1 joerg removelist="$lobj $libobj ${libobj}T"
3652 1.1 joerg fi
3653 1.1 joerg
3654 1.1 joerg # On Cygwin there's no "real" PIC flag so we must build both object types
3655 1.1 joerg case $host_os in
3656 1.1 joerg cygwin* | mingw* | pw32* | os2* | cegcc*)
3657 1.1 joerg pic_mode=default
3658 1.1 joerg ;;
3659 1.1 joerg esac
3660 1.1 joerg if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
3661 1.1 joerg # non-PIC code in shared libraries is not supported
3662 1.1 joerg pic_mode=default
3663 1.1 joerg fi
3664 1.1 joerg
3665 1.1 joerg # Calculate the filename of the output object if compiler does
3666 1.1 joerg # not support -o with -c
3667 1.1 joerg if test no = "$compiler_c_o"; then
3668 1.1 joerg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
3669 1.1 joerg lockfile=$output_obj.lock
3670 1.1 joerg else
3671 1.1 joerg output_obj=
3672 1.1 joerg need_locks=no
3673 1.1 joerg lockfile=
3674 1.1 joerg fi
3675 1.1 joerg
3676 1.1 joerg # Lock this critical section if it is needed
3677 1.1 joerg # We use this script file to make the link, it avoids creating a new file
3678 1.1 joerg if test yes = "$need_locks"; then
3679 1.1 joerg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3680 1.1 joerg func_echo "Waiting for $lockfile to be removed"
3681 1.1 joerg sleep 2
3682 1.1 joerg done
3683 1.1 joerg elif test warn = "$need_locks"; then
3684 1.1 joerg if test -f "$lockfile"; then
3685 1.1 joerg $ECHO "\
3686 1.1 joerg *** ERROR, $lockfile exists and contains:
3687 1.1 joerg `cat $lockfile 2>/dev/null`
3688 1.1 joerg
3689 1.1 joerg This indicates that another process is trying to use the same
3690 1.1 joerg temporary object file, and libtool could not work around it because
3691 1.1 joerg your compiler does not support '-c' and '-o' together. If you
3692 1.1 joerg repeat this compilation, it may succeed, by chance, but you had better
3693 1.1 joerg avoid parallel builds (make -j) in this platform, or get a better
3694 1.1 joerg compiler."
3695 1.1 joerg
3696 1.1 joerg $opt_dry_run || $RM $removelist
3697 1.1 joerg exit $EXIT_FAILURE
3698 1.1 joerg fi
3699 1.1 joerg func_append removelist " $output_obj"
3700 1.1 joerg $ECHO "$srcfile" > "$lockfile"
3701 1.1 joerg fi
3702 1.1 joerg
3703 1.1 joerg $opt_dry_run || $RM $removelist
3704 1.1 joerg func_append removelist " $lockfile"
3705 1.1 joerg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
3706 1.1 joerg
3707 1.1 joerg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
3708 1.1 joerg srcfile=$func_to_tool_file_result
3709 1.1 joerg func_quote_arg pretty "$srcfile"
3710 1.1 joerg qsrcfile=$func_quote_arg_result
3711 1.1 joerg
3712 1.1 joerg # Only build a PIC object if we are building libtool libraries.
3713 1.1 joerg if test yes = "$build_libtool_libs"; then
3714 1.1 joerg # Without this assignment, base_compile gets emptied.
3715 1.1 joerg fbsd_hideous_sh_bug=$base_compile
3716 1.1 joerg
3717 1.1 joerg if test no != "$pic_mode"; then
3718 1.1 joerg command="$base_compile $qsrcfile $pic_flag"
3719 1.1 joerg else
3720 1.1 joerg # Don't build PIC code
3721 1.1 joerg command="$base_compile $qsrcfile"
3722 1.1 joerg fi
3723 1.1 joerg
3724 1.1 joerg func_mkdir_p "$xdir$objdir"
3725 1.1 joerg
3726 1.1 joerg if test -z "$output_obj"; then
3727 1.1 joerg # Place PIC objects in $objdir
3728 1.1 joerg func_append command " -o $lobj"
3729 1.1 joerg fi
3730 1.1 joerg
3731 1.1 joerg func_show_eval_locale "$command" \
3732 1.1 joerg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
3733 1.1 joerg
3734 1.1 joerg if test warn = "$need_locks" &&
3735 1.1 joerg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3736 1.1 joerg $ECHO "\
3737 1.1 joerg *** ERROR, $lockfile contains:
3738 1.1 joerg `cat $lockfile 2>/dev/null`
3739 1.1 joerg
3740 1.1 joerg but it should contain:
3741 1.1 joerg $srcfile
3742 1.1 joerg
3743 1.1 joerg This indicates that another process is trying to use the same
3744 1.1 joerg temporary object file, and libtool could not work around it because
3745 1.1 joerg your compiler does not support '-c' and '-o' together. If you
3746 1.1 joerg repeat this compilation, it may succeed, by chance, but you had better
3747 1.1 joerg avoid parallel builds (make -j) in this platform, or get a better
3748 1.1 joerg compiler."
3749 1.1 joerg
3750 1.1 joerg $opt_dry_run || $RM $removelist
3751 1.1 joerg exit $EXIT_FAILURE
3752 1.1 joerg fi
3753 1.1 joerg
3754 1.1 joerg # Just move the object if needed, then go on to compile the next one
3755 1.1 joerg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
3756 1.1 joerg func_show_eval '$MV "$output_obj" "$lobj"' \
3757 1.1 joerg 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3758 1.1 joerg fi
3759 1.1 joerg
3760 1.1 joerg # Allow error messages only from the first compilation.
3761 1.1 joerg if test yes = "$suppress_opt"; then
3762 1.1 joerg suppress_output=' >/dev/null 2>&1'
3763 1.1 joerg fi
3764 1.1 joerg fi
3765 1.1 joerg
3766 1.1 joerg # Only build a position-dependent object if we build old libraries.
3767 1.1 joerg if test yes = "$build_old_libs"; then
3768 1.1 joerg if test yes != "$pic_mode"; then
3769 1.1 joerg # Don't build PIC code
3770 1.1 joerg command="$base_compile $qsrcfile$pie_flag"
3771 1.1 joerg else
3772 1.1 joerg command="$base_compile $qsrcfile $pic_flag"
3773 1.1 joerg fi
3774 1.1 joerg if test yes = "$compiler_c_o"; then
3775 1.1 joerg func_append command " -o $obj"
3776 1.1 joerg fi
3777 1.1 joerg
3778 1.1 joerg # Suppress compiler output if we already did a PIC compilation.
3779 1.1 joerg func_append command "$suppress_output"
3780 1.1 joerg func_show_eval_locale "$command" \
3781 1.1 joerg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
3782 1.1 joerg
3783 1.1 joerg if test warn = "$need_locks" &&
3784 1.1 joerg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3785 1.1 joerg $ECHO "\
3786 1.1 joerg *** ERROR, $lockfile contains:
3787 1.1 joerg `cat $lockfile 2>/dev/null`
3788 1.1 joerg
3789 1.1 joerg but it should contain:
3790 1.1 joerg $srcfile
3791 1.1 joerg
3792 1.1 joerg This indicates that another process is trying to use the same
3793 1.1 joerg temporary object file, and libtool could not work around it because
3794 1.1 joerg your compiler does not support '-c' and '-o' together. If you
3795 1.1 joerg repeat this compilation, it may succeed, by chance, but you had better
3796 1.1 joerg avoid parallel builds (make -j) in this platform, or get a better
3797 1.1 joerg compiler."
3798 1.1 joerg
3799 1.1 joerg $opt_dry_run || $RM $removelist
3800 1.1 joerg exit $EXIT_FAILURE
3801 1.1 joerg fi
3802 1.1 joerg
3803 1.1 joerg # Just move the object if needed
3804 1.1 joerg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
3805 1.1 joerg func_show_eval '$MV "$output_obj" "$obj"' \
3806 1.1 joerg 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3807 1.1 joerg fi
3808 1.1 joerg fi
3809 1.1 joerg
3810 1.1 joerg $opt_dry_run || {
3811 1.1 joerg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
3812 1.1 joerg
3813 1.1 joerg # Unlock the critical section if it was locked
3814 1.1 joerg if test no != "$need_locks"; then
3815 1.1 joerg removelist=$lockfile
3816 1.1 joerg $RM "$lockfile"
3817 1.1 joerg fi
3818 1.1 joerg }
3819 1.1 joerg
3820 1.1 joerg exit $EXIT_SUCCESS
3821 1.1 joerg }
3822 1.1 joerg
3823 1.1 joerg $opt_help || {
3824 1.1 joerg test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
3825 1.1 joerg }
3826 1.1 joerg
3827 1.1 joerg func_mode_help ()
3828 1.1 joerg {
3829 1.1 joerg # We need to display help for each of the modes.
3830 1.1 joerg case $opt_mode in
3831 1.1 joerg "")
3832 1.1 joerg # Generic help is extracted from the usage comments
3833 1.1 joerg # at the start of this file.
3834 1.1 joerg func_help
3835 1.1 joerg ;;
3836 1.1 joerg
3837 1.1 joerg clean)
3838 1.1 joerg $ECHO \
3839 1.1 joerg "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
3840 1.1 joerg
3841 1.1 joerg Remove files from the build directory.
3842 1.1 joerg
3843 1.1 joerg RM is the name of the program to use to delete files associated with each FILE
3844 1.1 joerg (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
3845 1.1 joerg to RM.
3846 1.1 joerg
3847 1.1 joerg If FILE is a libtool library, object or program, all the files associated
3848 1.1 joerg with it are deleted. Otherwise, only FILE itself is deleted using RM."
3849 1.1 joerg ;;
3850 1.1 joerg
3851 1.1 joerg compile)
3852 1.1 joerg $ECHO \
3853 1.1 joerg "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
3854 1.1 joerg
3855 1.1 joerg Compile a source file into a libtool library object.
3856 1.1 joerg
3857 1.1 joerg This mode accepts the following additional options:
3858 1.1 joerg
3859 1.1 joerg -o OUTPUT-FILE set the output file name to OUTPUT-FILE
3860 1.1 joerg -no-suppress do not suppress compiler output for multiple passes
3861 1.1 joerg -prefer-pic try to build PIC objects only
3862 1.1 joerg -prefer-non-pic try to build non-PIC objects only
3863 1.1 joerg -shared do not build a '.o' file suitable for static linking
3864 1.1 joerg -static only build a '.o' file suitable for static linking
3865 1.1 joerg -Wc,FLAG pass FLAG directly to the compiler
3866 1.1 joerg
3867 1.1 joerg COMPILE-COMMAND is a command to be used in creating a 'standard' object file
3868 1.1 joerg from the given SOURCEFILE.
3869 1.1 joerg
3870 1.1 joerg The output file name is determined by removing the directory component from
3871 1.1 joerg SOURCEFILE, then substituting the C source code suffix '.c' with the
3872 1.1 joerg library object suffix, '.lo'."
3873 1.1 joerg ;;
3874 1.1 joerg
3875 1.1 joerg execute)
3876 1.1 joerg $ECHO \
3877 1.1 joerg "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
3878 1.1 joerg
3879 1.1 joerg Automatically set library path, then run a program.
3880 1.1 joerg
3881 1.1 joerg This mode accepts the following additional options:
3882 1.1 joerg
3883 1.1 joerg -dlopen FILE add the directory containing FILE to the library path
3884 1.1 joerg
3885 1.1 joerg This mode sets the library path environment variable according to '-dlopen'
3886 1.1 joerg flags.
3887 1.1 joerg
3888 1.1 joerg If any of the ARGS are libtool executable wrappers, then they are translated
3889 1.1 joerg into their corresponding uninstalled binary, and any of their required library
3890 1.1 joerg directories are added to the library path.
3891 1.1 joerg
3892 1.1 joerg Then, COMMAND is executed, with ARGS as arguments."
3893 1.1 joerg ;;
3894 1.1 joerg
3895 1.1 joerg finish)
3896 1.1 joerg $ECHO \
3897 1.1 joerg "Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
3898 1.1 joerg
3899 1.1 joerg Complete the installation of libtool libraries.
3900 1.1 joerg
3901 1.1 joerg Each LIBDIR is a directory that contains libtool libraries.
3902 1.1 joerg
3903 1.1 joerg The commands that this mode executes may require superuser privileges. Use
3904 1.1 joerg the '--dry-run' option if you just want to see what would be executed."
3905 1.1 joerg ;;
3906 1.1 joerg
3907 1.1 joerg install)
3908 1.1 joerg $ECHO \
3909 1.1 joerg "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
3910 1.1 joerg
3911 1.1 joerg Install executables or libraries.
3912 1.1 joerg
3913 1.1 joerg INSTALL-COMMAND is the installation command. The first component should be
3914 1.1 joerg either the 'install' or 'cp' program.
3915 1.1 joerg
3916 1.1 joerg The following components of INSTALL-COMMAND are treated specially:
3917 1.1 joerg
3918 1.1 joerg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation
3919 1.1 joerg
3920 1.1 joerg The rest of the components are interpreted as arguments to that command (only
3921 1.1 joerg BSD-compatible install options are recognized)."
3922 1.1 joerg ;;
3923 1.1 joerg
3924 1.1 joerg link)
3925 1.1 joerg $ECHO \
3926 1.1 joerg "Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
3927 1.1 joerg
3928 1.1 joerg Link object files or libraries together to form another library, or to
3929 1.1 joerg create an executable program.
3930 1.1 joerg
3931 1.1 joerg LINK-COMMAND is a command using the C compiler that you would use to create
3932 1.1 joerg a program from several object files.
3933 1.1 joerg
3934 1.1 joerg The following components of LINK-COMMAND are treated specially:
3935 1.1 joerg
3936 1.1 joerg -all-static do not do any dynamic linking at all
3937 1.1 joerg -avoid-version do not add a version suffix if possible
3938 1.1 joerg -bindir BINDIR specify path to binaries directory (for systems where
3939 1.1 joerg libraries must be found in the PATH setting at runtime)
3940 1.1 joerg -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime
3941 1.1 joerg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
3942 1.1 joerg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
3943 1.1 joerg -export-symbols SYMFILE
3944 1.1 joerg try to export only the symbols listed in SYMFILE
3945 1.1 joerg -export-symbols-regex REGEX
3946 1.1 joerg try to export only the symbols matching REGEX
3947 1.1 joerg -LLIBDIR search LIBDIR for required installed libraries
3948 1.1 joerg -lNAME OUTPUT-FILE requires the installed library libNAME
3949 1.1 joerg -module build a library that can dlopened
3950 1.1 joerg -no-fast-install disable the fast-install mode
3951 1.1 joerg -no-install link a not-installable executable
3952 1.1 joerg -no-undefined declare that a library does not refer to external symbols
3953 1.1 joerg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
3954 1.1 joerg -objectlist FILE use a list of object files found in FILE to specify objects
3955 1.1 joerg -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes)
3956 1.1 joerg -precious-files-regex REGEX
3957 1.1 joerg don't remove output files matching REGEX
3958 1.1 joerg -release RELEASE specify package release information
3959 1.1 joerg -rpath LIBDIR the created library will eventually be installed in LIBDIR
3960 1.1 joerg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
3961 1.1 joerg -shared only do dynamic linking of libtool libraries
3962 1.1 joerg -shrext SUFFIX override the standard shared library file extension
3963 1.1 joerg -static do not do any dynamic linking of uninstalled libtool libraries
3964 1.1 joerg -static-libtool-libs
3965 1.1 joerg do not do any dynamic linking of libtool libraries
3966 1.1 joerg -version-info CURRENT[:REVISION[:AGE]]
3967 1.1 joerg specify library version info [each variable defaults to 0]
3968 1.1 joerg -weak LIBNAME declare that the target provides the LIBNAME interface
3969 1.1 joerg -Wc,FLAG
3970 1.1 joerg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler
3971 1.1 joerg -Wl,FLAG
3972 1.1 joerg -Xlinker FLAG pass linker-specific FLAG directly to the linker
3973 1.1 joerg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
3974 1.1 joerg
3975 1.1 joerg All other options (arguments beginning with '-') are ignored.
3976 1.1 joerg
3977 1.1 joerg Every other argument is treated as a filename. Files ending in '.la' are
3978 1.1 joerg treated as uninstalled libtool libraries, other files are standard or library
3979 1.1 joerg object files.
3980 1.1 joerg
3981 1.1 joerg If the OUTPUT-FILE ends in '.la', then a libtool library is created,
3982 1.1 joerg only library objects ('.lo' files) may be specified, and '-rpath' is
3983 1.1 joerg required, except when creating a convenience library.
3984 1.1 joerg
3985 1.1 joerg If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
3986 1.1 joerg using 'ar' and 'ranlib', or on Windows using 'lib'.
3987 1.1 joerg
3988 1.1 joerg If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
3989 1.1 joerg is created, otherwise an executable program is created."
3990 1.1 joerg ;;
3991 1.1 joerg
3992 1.1 joerg uninstall)
3993 1.1 joerg $ECHO \
3994 1.1 joerg "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
3995 1.1 joerg
3996 1.1 joerg Remove libraries from an installation directory.
3997 1.1 joerg
3998 1.1 joerg RM is the name of the program to use to delete files associated with each FILE
3999 1.1 joerg (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
4000 1.1 joerg to RM.
4001 1.1 joerg
4002 1.1 joerg If FILE is a libtool library, all the files associated with it are deleted.
4003 1.1 joerg Otherwise, only FILE itself is deleted using RM."
4004 1.1 joerg ;;
4005 1.1 joerg
4006 1.1 joerg *)
4007 1.1 joerg func_fatal_help "invalid operation mode '$opt_mode'"
4008 1.1 joerg ;;
4009 1.1 joerg esac
4010 1.1 joerg
4011 1.1 joerg echo
4012 1.1 joerg $ECHO "Try '$progname --help' for more information about other modes."
4013 1.1 joerg }
4014 1.1 joerg
4015 1.1 joerg # Now that we've collected a possible --mode arg, show help if necessary
4016 1.1 joerg if $opt_help; then
4017 1.1 joerg if test : = "$opt_help"; then
4018 1.1 joerg func_mode_help
4019 1.1 joerg else
4020 1.1 joerg {
4021 1.1 joerg func_help noexit
4022 1.1 joerg for opt_mode in compile link execute install finish uninstall clean; do
4023 1.1 joerg func_mode_help
4024 1.1 joerg done
4025 1.1 joerg } | $SED -n '1p; 2,$s/^Usage:/ or: /p'
4026 1.1 joerg {
4027 1.1 joerg func_help noexit
4028 1.1 joerg for opt_mode in compile link execute install finish uninstall clean; do
4029 1.1 joerg echo
4030 1.1 joerg func_mode_help
4031 1.1 joerg done
4032 1.1 joerg } |
4033 1.1 joerg $SED '1d
4034 1.1 joerg /^When reporting/,/^Report/{
4035 1.1 joerg H
4036 1.1 joerg d
4037 1.1 joerg }
4038 1.1 joerg $x
4039 1.1 joerg /information about other modes/d
4040 1.1 joerg /more detailed .*MODE/d
4041 1.1 joerg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
4042 1.1 joerg fi
4043 1.1 joerg exit $?
4044 1.1 joerg fi
4045 1.1 joerg
4046 1.1 joerg
4047 1.1 joerg # func_mode_execute arg...
4048 1.1 joerg func_mode_execute ()
4049 1.1 joerg {
4050 1.1 joerg $debug_cmd
4051 1.1 joerg
4052 1.1 joerg # The first argument is the command name.
4053 1.1 joerg cmd=$nonopt
4054 1.1 joerg test -z "$cmd" && \
4055 1.1 joerg func_fatal_help "you must specify a COMMAND"
4056 1.1 joerg
4057 1.1 joerg # Handle -dlopen flags immediately.
4058 1.1 joerg for file in $opt_dlopen; do
4059 1.1 joerg test -f "$file" \
4060 1.1 joerg || func_fatal_help "'$file' is not a file"
4061 1.1 joerg
4062 1.1 joerg dir=
4063 1.1 joerg case $file in
4064 1.1 joerg *.la)
4065 1.1 joerg func_resolve_sysroot "$file"
4066 1.1 joerg file=$func_resolve_sysroot_result
4067 1.1 joerg
4068 1.1 joerg # Check to see that this really is a libtool archive.
4069 1.1 joerg func_lalib_unsafe_p "$file" \
4070 1.1 joerg || func_fatal_help "'$lib' is not a valid libtool archive"
4071 1.1 joerg
4072 1.1 joerg # Read the libtool library.
4073 1.1 joerg dlname=
4074 1.1 joerg library_names=
4075 1.1 joerg func_source "$file"
4076 1.1 joerg
4077 1.1 joerg # Skip this library if it cannot be dlopened.
4078 1.1 joerg if test -z "$dlname"; then
4079 1.1 joerg # Warn if it was a shared library.
4080 1.1 joerg test -n "$library_names" && \
4081 1.1 joerg func_warning "'$file' was not linked with '-export-dynamic'"
4082 1.1 joerg continue
4083 1.1 joerg fi
4084 1.1 joerg
4085 1.1 joerg func_dirname "$file" "" "."
4086 1.1 joerg dir=$func_dirname_result
4087 1.1 joerg
4088 1.1 joerg if test -f "$dir/$objdir/$dlname"; then
4089 1.1 joerg func_append dir "/$objdir"
4090 1.1 joerg else
4091 1.1 joerg if test ! -f "$dir/$dlname"; then
4092 1.1 joerg func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
4093 1.1 joerg fi
4094 1.1 joerg fi
4095 1.1 joerg ;;
4096 1.1 joerg
4097 1.1 joerg *.lo)
4098 1.1 joerg # Just add the directory containing the .lo file.
4099 1.1 joerg func_dirname "$file" "" "."
4100 1.1 joerg dir=$func_dirname_result
4101 1.1 joerg ;;
4102 1.1 joerg
4103 1.1 joerg *)
4104 1.1 joerg func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
4105 1.1 joerg continue
4106 1.1 joerg ;;
4107 1.1 joerg esac
4108 1.1 joerg
4109 1.1 joerg # Get the absolute pathname.
4110 1.1 joerg absdir=`cd "$dir" && pwd`
4111 1.1 joerg test -n "$absdir" && dir=$absdir
4112 1.1 joerg
4113 1.1 joerg # Now add the directory to shlibpath_var.
4114 1.1 joerg if eval "test -z \"\$$shlibpath_var\""; then
4115 1.1 joerg eval "$shlibpath_var=\"\$dir\""
4116 1.1 joerg else
4117 1.1 joerg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
4118 1.1 joerg fi
4119 1.1 joerg done
4120 1.1 joerg
4121 1.1 joerg # This variable tells wrapper scripts just to set shlibpath_var
4122 1.1 joerg # rather than running their programs.
4123 1.1 joerg libtool_execute_magic=$magic
4124 1.1 joerg
4125 1.1 joerg # Check if any of the arguments is a wrapper script.
4126 1.1 joerg args=
4127 1.1 joerg for file
4128 1.1 joerg do
4129 1.1 joerg case $file in
4130 1.1 joerg -* | *.la | *.lo ) ;;
4131 1.1 joerg *)
4132 1.1 joerg # Do a test to see if this is really a libtool program.
4133 1.1 joerg if func_ltwrapper_script_p "$file"; then
4134 1.1 joerg func_source "$file"
4135 1.1 joerg # Transform arg to wrapped name.
4136 1.1 joerg file=$progdir/$program
4137 1.1 joerg elif func_ltwrapper_executable_p "$file"; then
4138 1.1 joerg func_ltwrapper_scriptname "$file"
4139 1.1 joerg func_source "$func_ltwrapper_scriptname_result"
4140 1.1 joerg # Transform arg to wrapped name.
4141 1.1 joerg file=$progdir/$program
4142 1.1 joerg fi
4143 1.1 joerg ;;
4144 1.1 joerg esac
4145 1.1 joerg # Quote arguments (to preserve shell metacharacters).
4146 1.1 joerg func_append_quoted args "$file"
4147 1.1 joerg done
4148 1.1 joerg
4149 1.1 joerg if $opt_dry_run; then
4150 1.1 joerg # Display what would be done.
4151 1.1 joerg if test -n "$shlibpath_var"; then
4152 1.1 joerg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
4153 1.1 joerg echo "export $shlibpath_var"
4154 1.1 joerg fi
4155 1.1 joerg $ECHO "$cmd$args"
4156 1.1 joerg exit $EXIT_SUCCESS
4157 1.1 joerg else
4158 1.1 joerg if test -n "$shlibpath_var"; then
4159 1.1 joerg # Export the shlibpath_var.
4160 1.1 joerg eval "export $shlibpath_var"
4161 1.1 joerg fi
4162 1.1 joerg
4163 1.1 joerg # Restore saved environment variables
4164 1.1 joerg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
4165 1.1 joerg do
4166 1.1 joerg eval "if test \"\${save_$lt_var+set}\" = set; then
4167 1.1 joerg $lt_var=\$save_$lt_var; export $lt_var
4168 1.1 joerg else
4169 1.1 joerg $lt_unset $lt_var
4170 1.1 joerg fi"
4171 1.1 joerg done
4172 1.1 joerg
4173 1.1 joerg # Now prepare to actually exec the command.
4174 1.1 joerg exec_cmd=\$cmd$args
4175 1.1 joerg fi
4176 1.1 joerg }
4177 1.1 joerg
4178 1.1 joerg test execute = "$opt_mode" && func_mode_execute ${1+"$@"}
4179 1.1 joerg
4180 1.1 joerg
4181 1.1 joerg # func_mode_finish arg...
4182 1.1 joerg func_mode_finish ()
4183 1.1 joerg {
4184 1.1 joerg $debug_cmd
4185 1.1 joerg
4186 1.1 joerg libs=
4187 1.1 joerg libdirs=
4188 1.1 joerg admincmds=
4189 1.1 joerg
4190 1.1 joerg for opt in "$nonopt" ${1+"$@"}
4191 1.1 joerg do
4192 1.1 joerg if test -d "$opt"; then
4193 1.1 joerg func_append libdirs " $opt"
4194 1.1 joerg
4195 1.1 joerg elif test -f "$opt"; then
4196 1.1 joerg if func_lalib_unsafe_p "$opt"; then
4197 1.1 joerg func_append libs " $opt"
4198 1.1 joerg else
4199 1.1 joerg func_warning "'$opt' is not a valid libtool archive"
4200 1.1 joerg fi
4201 1.1 joerg
4202 1.1 joerg else
4203 1.1 joerg func_fatal_error "invalid argument '$opt'"
4204 1.1 joerg fi
4205 1.1 joerg done
4206 1.1 joerg
4207 1.1 joerg if test -n "$libs"; then
4208 1.1 joerg if test -n "$lt_sysroot"; then
4209 1.1 joerg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
4210 1.1 joerg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
4211 1.1 joerg else
4212 1.1 joerg sysroot_cmd=
4213 1.1 joerg fi
4214 1.1 joerg
4215 1.1 joerg # Remove sysroot references
4216 1.1 joerg if $opt_dry_run; then
4217 1.1 joerg for lib in $libs; do
4218 1.1 joerg echo "removing references to $lt_sysroot and '=' prefixes from $lib"
4219 1.1 joerg done
4220 1.1 joerg else
4221 1.1 joerg tmpdir=`func_mktempdir`
4222 1.1 joerg for lib in $libs; do
4223 1.1 joerg $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
4224 1.1 joerg > $tmpdir/tmp-la
4225 1.1 joerg mv -f $tmpdir/tmp-la $lib
4226 1.1 joerg done
4227 1.1 joerg ${RM}r "$tmpdir"
4228 1.1 joerg fi
4229 1.1 joerg fi
4230 1.1 joerg
4231 1.1 joerg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4232 1.1 joerg for libdir in $libdirs; do
4233 1.1 joerg if test -n "$finish_cmds"; then
4234 1.1 joerg # Do each command in the finish commands.
4235 1.1 joerg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
4236 1.1 joerg '"$cmd"'"'
4237 1.1 joerg fi
4238 1.1 joerg if test -n "$finish_eval"; then
4239 1.1 joerg # Do the single finish_eval.
4240 1.1 joerg eval cmds=\"$finish_eval\"
4241 1.1 joerg $opt_dry_run || eval "$cmds" || func_append admincmds "
4242 1.1 joerg $cmds"
4243 1.1 joerg fi
4244 1.1 joerg done
4245 1.1 joerg fi
4246 1.1 joerg
4247 1.1 joerg # Exit here if they wanted silent mode.
4248 1.1 joerg $opt_quiet && exit $EXIT_SUCCESS
4249 1.1 joerg
4250 1.1 joerg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4251 1.1 joerg echo "----------------------------------------------------------------------"
4252 1.1 joerg echo "Libraries have been installed in:"
4253 1.1 joerg for libdir in $libdirs; do
4254 1.1 joerg $ECHO " $libdir"
4255 1.1 joerg done
4256 1.1 joerg echo
4257 1.1 joerg echo "If you ever happen to want to link against installed libraries"
4258 1.1 joerg echo "in a given directory, LIBDIR, you must either use libtool, and"
4259 1.1 joerg echo "specify the full pathname of the library, or use the '-LLIBDIR'"
4260 1.1 joerg echo "flag during linking and do at least one of the following:"
4261 1.1 joerg if test -n "$shlibpath_var"; then
4262 1.1 joerg echo " - add LIBDIR to the '$shlibpath_var' environment variable"
4263 1.1 joerg echo " during execution"
4264 1.1 joerg fi
4265 1.1 joerg if test -n "$runpath_var"; then
4266 1.1 joerg echo " - add LIBDIR to the '$runpath_var' environment variable"
4267 1.1 joerg echo " during linking"
4268 1.1 joerg fi
4269 1.1 joerg if test -n "$hardcode_libdir_flag_spec"; then
4270 1.1 joerg libdir=LIBDIR
4271 1.1 joerg eval flag=\"$hardcode_libdir_flag_spec\"
4272 1.1 joerg
4273 1.1 joerg $ECHO " - use the '$flag' linker flag"
4274 1.1 joerg fi
4275 1.1 joerg if test -n "$admincmds"; then
4276 1.1 joerg $ECHO " - have your system administrator run these commands:$admincmds"
4277 1.1 joerg fi
4278 1.1 joerg if test -f /etc/ld.so.conf; then
4279 1.1 joerg echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
4280 1.1 joerg fi
4281 1.1 joerg echo
4282 1.1 joerg
4283 1.1 joerg echo "See any operating system documentation about shared libraries for"
4284 1.1 joerg case $host in
4285 1.1 joerg solaris2.[6789]|solaris2.1[0-9])
4286 1.1 joerg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
4287 1.1 joerg echo "pages."
4288 1.1 joerg ;;
4289 1.1 joerg *)
4290 1.1 joerg echo "more information, such as the ld(1) and ld.so(8) manual pages."
4291 1.1 joerg ;;
4292 1.1 joerg esac
4293 1.1 joerg echo "----------------------------------------------------------------------"
4294 1.1 joerg fi
4295 1.1 joerg exit $EXIT_SUCCESS
4296 1.1 joerg }
4297 1.1 joerg
4298 1.1 joerg test finish = "$opt_mode" && func_mode_finish ${1+"$@"}
4299 1.1 joerg
4300 1.1 joerg
4301 1.1 joerg # func_mode_install arg...
4302 1.1 joerg func_mode_install ()
4303 1.1 joerg {
4304 1.1 joerg $debug_cmd
4305 1.1 joerg
4306 1.1 joerg # There may be an optional sh(1) argument at the beginning of
4307 1.1 joerg # install_prog (especially on Windows NT).
4308 1.1 joerg if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
4309 1.1 joerg # Allow the use of GNU shtool's install command.
4310 1.1 joerg case $nonopt in *shtool*) :;; *) false;; esac
4311 1.1 joerg then
4312 1.1 joerg # Aesthetically quote it.
4313 1.1 joerg func_quote_arg pretty "$nonopt"
4314 1.1 joerg install_prog="$func_quote_arg_result "
4315 1.1 joerg arg=$1
4316 1.1 joerg shift
4317 1.1 joerg else
4318 1.1 joerg install_prog=
4319 1.1 joerg arg=$nonopt
4320 1.1 joerg fi
4321 1.1 joerg
4322 1.1 joerg # The real first argument should be the name of the installation program.
4323 1.1 joerg # Aesthetically quote it.
4324 1.1 joerg func_quote_arg pretty "$arg"
4325 1.1 joerg func_append install_prog "$func_quote_arg_result"
4326 1.1 joerg install_shared_prog=$install_prog
4327 1.1 joerg case " $install_prog " in
4328 1.1 joerg *[\\\ /]cp\ *) install_cp=: ;;
4329 1.1 joerg *) install_cp=false ;;
4330 1.1 joerg esac
4331 1.1 joerg
4332 1.1 joerg # We need to accept at least all the BSD install flags.
4333 1.1 joerg dest=
4334 1.1 joerg files=
4335 1.1 joerg opts=
4336 1.1 joerg prev=
4337 1.1 joerg install_type=
4338 1.1 joerg isdir=false
4339 1.1 joerg stripme=
4340 1.1 joerg no_mode=:
4341 1.1 joerg for arg
4342 1.1 joerg do
4343 1.1 joerg arg2=
4344 1.1 joerg if test -n "$dest"; then
4345 1.1 joerg func_append files " $dest"
4346 1.1 joerg dest=$arg
4347 1.1 joerg continue
4348 1.1 joerg fi
4349 1.1 joerg
4350 1.1 joerg case $arg in
4351 1.1 joerg -d) isdir=: ;;
4352 1.1 joerg -f)
4353 1.1 joerg if $install_cp; then :; else
4354 1.1 joerg prev=$arg
4355 1.1 joerg fi
4356 1.1 joerg ;;
4357 1.1 joerg -g | -m | -o)
4358 1.1 joerg prev=$arg
4359 1.1 joerg ;;
4360 1.1 joerg -s)
4361 1.1 joerg stripme=" -s"
4362 1.1 joerg continue
4363 1.1 joerg ;;
4364 1.1 joerg -*)
4365 1.1 joerg ;;
4366 1.1 joerg *)
4367 1.1 joerg # If the previous option needed an argument, then skip it.
4368 1.1 joerg if test -n "$prev"; then
4369 1.1 joerg if test X-m = "X$prev" && test -n "$install_override_mode"; then
4370 1.1 joerg arg2=$install_override_mode
4371 1.1 joerg no_mode=false
4372 1.1 joerg fi
4373 1.1 joerg prev=
4374 1.1 joerg else
4375 1.1 joerg dest=$arg
4376 1.1 joerg continue
4377 1.1 joerg fi
4378 1.1 joerg ;;
4379 1.1 joerg esac
4380 1.1 joerg
4381 1.1 joerg # Aesthetically quote the argument.
4382 1.1 joerg func_quote_arg pretty "$arg"
4383 1.1 joerg func_append install_prog " $func_quote_arg_result"
4384 1.1 joerg if test -n "$arg2"; then
4385 1.1 joerg func_quote_arg pretty "$arg2"
4386 1.1 joerg fi
4387 1.1 joerg func_append install_shared_prog " $func_quote_arg_result"
4388 1.1 joerg done
4389 1.1 joerg
4390 1.1 joerg test -z "$install_prog" && \
4391 1.1 joerg func_fatal_help "you must specify an install program"
4392 1.1 joerg
4393 1.1 joerg test -n "$prev" && \
4394 1.1 joerg func_fatal_help "the '$prev' option requires an argument"
4395 1.1 joerg
4396 1.1 joerg if test -n "$install_override_mode" && $no_mode; then
4397 1.1 joerg if $install_cp; then :; else
4398 1.1 joerg func_quote_arg pretty "$install_override_mode"
4399 1.1 joerg func_append install_shared_prog " -m $func_quote_arg_result"
4400 1.1 joerg fi
4401 1.1 joerg fi
4402 1.1 joerg
4403 1.1 joerg if test -z "$files"; then
4404 1.1 joerg if test -z "$dest"; then
4405 1.1 joerg func_fatal_help "no file or destination specified"
4406 1.1 joerg else
4407 1.1 joerg func_fatal_help "you must specify a destination"
4408 1.1 joerg fi
4409 1.1 joerg fi
4410 1.1 joerg
4411 1.1 joerg # Strip any trailing slash from the destination.
4412 1.1 joerg func_stripname '' '/' "$dest"
4413 1.1 joerg dest=$func_stripname_result
4414 1.1 joerg
4415 1.1 joerg # Check to see that the destination is a directory.
4416 1.1 joerg test -d "$dest" && isdir=:
4417 1.1 joerg if $isdir; then
4418 1.1 joerg destdir=$dest
4419 1.1 joerg destname=
4420 1.1 joerg else
4421 1.1 joerg func_dirname_and_basename "$dest" "" "."
4422 1.1 joerg destdir=$func_dirname_result
4423 1.1 joerg destname=$func_basename_result
4424 1.1 joerg
4425 1.1 joerg # Not a directory, so check to see that there is only one file specified.
4426 1.1 joerg set dummy $files; shift
4427 1.1 joerg test "$#" -gt 1 && \
4428 1.1 joerg func_fatal_help "'$dest' is not a directory"
4429 1.1 joerg fi
4430 1.1 joerg case $destdir in
4431 1.1 joerg [\\/]* | [A-Za-z]:[\\/]*) ;;
4432 1.1 joerg *)
4433 1.1 joerg for file in $files; do
4434 1.1 joerg case $file in
4435 1.1 joerg *.lo) ;;
4436 1.1 joerg *)
4437 1.1 joerg func_fatal_help "'$destdir' must be an absolute directory name"
4438 1.1 joerg ;;
4439 1.1 joerg esac
4440 1.1 joerg done
4441 1.1 joerg ;;
4442 1.1 joerg esac
4443 1.1 joerg
4444 1.1 joerg # This variable tells wrapper scripts just to set variables rather
4445 1.1 joerg # than running their programs.
4446 1.1 joerg libtool_install_magic=$magic
4447 1.1 joerg
4448 1.1 joerg staticlibs=
4449 1.1 joerg future_libdirs=
4450 1.1 joerg current_libdirs=
4451 1.1 joerg for file in $files; do
4452 1.1 joerg
4453 1.1 joerg # Do each installation.
4454 1.1 joerg case $file in
4455 1.1 joerg *.$libext)
4456 1.1 joerg # Do the static libraries later.
4457 1.1 joerg func_append staticlibs " $file"
4458 1.1 joerg ;;
4459 1.1 joerg
4460 1.1 joerg *.la)
4461 1.1 joerg func_resolve_sysroot "$file"
4462 1.1 joerg file=$func_resolve_sysroot_result
4463 1.1 joerg
4464 1.1 joerg # Check to see that this really is a libtool archive.
4465 1.1 joerg func_lalib_unsafe_p "$file" \
4466 1.1 joerg || func_fatal_help "'$file' is not a valid libtool archive"
4467 1.1 joerg
4468 1.1 joerg library_names=
4469 1.1 joerg old_library=
4470 1.1 joerg relink_command=
4471 1.1 joerg func_source "$file"
4472 1.1 joerg
4473 1.1 joerg # Add the libdir to current_libdirs if it is the destination.
4474 1.1 joerg if test "X$destdir" = "X$libdir"; then
4475 1.1 joerg case "$current_libdirs " in
4476 1.1 joerg *" $libdir "*) ;;
4477 1.1 joerg *) func_append current_libdirs " $libdir" ;;
4478 1.1 joerg esac
4479 1.1 joerg else
4480 1.1 joerg # Note the libdir as a future libdir.
4481 1.1 joerg case "$future_libdirs " in
4482 1.1 joerg *" $libdir "*) ;;
4483 1.1 joerg *) func_append future_libdirs " $libdir" ;;
4484 1.1 joerg esac
4485 1.1 joerg fi
4486 1.1 joerg
4487 1.1 joerg func_dirname "$file" "/" ""
4488 1.1 joerg dir=$func_dirname_result
4489 1.1 joerg func_append dir "$objdir"
4490 1.1 joerg
4491 1.1 joerg if test -n "$relink_command"; then
4492 1.1 joerg # Determine the prefix the user has applied to our future dir.
4493 1.1 joerg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
4494 1.1 joerg
4495 1.1 joerg # Don't allow the user to place us outside of our expected
4496 1.1 joerg # location b/c this prevents finding dependent libraries that
4497 1.1 joerg # are installed to the same prefix.
4498 1.1 joerg # At present, this check doesn't affect windows .dll's that
4499 1.1 joerg # are installed into $libdir/../bin (currently, that works fine)
4500 1.1 joerg # but it's something to keep an eye on.
4501 1.1 joerg test "$inst_prefix_dir" = "$destdir" && \
4502 1.1 joerg func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
4503 1.1 joerg
4504 1.1 joerg if test -n "$inst_prefix_dir"; then
4505 1.1 joerg # Stick the inst_prefix_dir data into the link command.
4506 1.1 joerg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
4507 1.1 joerg else
4508 1.1 joerg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
4509 1.1 joerg fi
4510 1.1 joerg
4511 1.1 joerg func_warning "relinking '$file'"
4512 1.1 joerg func_show_eval "$relink_command" \
4513 1.1 joerg 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
4514 1.1 joerg fi
4515 1.1 joerg
4516 1.1 joerg # See the names of the shared library.
4517 1.1 joerg set dummy $library_names; shift
4518 1.1 joerg if test -n "$1"; then
4519 1.1 joerg realname=$1
4520 1.1 joerg shift
4521 1.1 joerg
4522 1.1 joerg srcname=$realname
4523 1.1 joerg test -n "$relink_command" && srcname=${realname}T
4524 1.1 joerg
4525 1.1 joerg # Install the shared library and build the symlinks.
4526 1.1 joerg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
4527 1.1 joerg 'exit $?'
4528 1.1 joerg tstripme=$stripme
4529 1.1 joerg case $host_os in
4530 1.1 joerg cygwin* | mingw* | pw32* | cegcc*)
4531 1.1 joerg case $realname in
4532 1.1 joerg *.dll.a)
4533 1.1 joerg tstripme=
4534 1.1 joerg ;;
4535 1.1 joerg esac
4536 1.1 joerg ;;
4537 1.1 joerg os2*)
4538 1.1 joerg case $realname in
4539 1.1 joerg *_dll.a)
4540 1.1 joerg tstripme=
4541 1.1 joerg ;;
4542 1.1 joerg esac
4543 1.1 joerg ;;
4544 1.1 joerg esac
4545 1.1 joerg if test -n "$tstripme" && test -n "$striplib"; then
4546 1.1 joerg func_show_eval "$striplib $destdir/$realname" 'exit $?'
4547 1.1 joerg fi
4548 1.1 joerg
4549 1.1 joerg if test "$#" -gt 0; then
4550 1.1 joerg # Delete the old symlinks, and create new ones.
4551 1.1 joerg # Try 'ln -sf' first, because the 'ln' binary might depend on
4552 1.1 joerg # the symlink we replace! Solaris /bin/ln does not understand -f,
4553 1.1 joerg # so we also need to try rm && ln -s.
4554 1.1 joerg for linkname
4555 1.1 joerg do
4556 1.1 joerg test "$linkname" != "$realname" \
4557 1.1 joerg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
4558 1.1 joerg done
4559 1.1 joerg fi
4560 1.1 joerg
4561 1.1 joerg # Do each command in the postinstall commands.
4562 1.1 joerg lib=$destdir/$realname
4563 1.1 joerg func_execute_cmds "$postinstall_cmds" 'exit $?'
4564 1.1 joerg fi
4565 1.1 joerg
4566 1.1 joerg # Install the pseudo-library for information purposes.
4567 1.1 joerg func_basename "$file"
4568 1.1 joerg name=$func_basename_result
4569 1.1 joerg instname=$dir/${name}i
4570 1.1 joerg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
4571 1.1 joerg
4572 1.1 joerg # Maybe install the static library, too.
4573 1.1 joerg test -n "$old_library" && func_append staticlibs " $dir/$old_library"
4574 1.1 joerg ;;
4575 1.1 joerg
4576 1.1 joerg *.lo)
4577 1.1 joerg # Install (i.e. copy) a libtool object.
4578 1.1 joerg
4579 1.1 joerg # Figure out destination file name, if it wasn't already specified.
4580 1.1 joerg if test -n "$destname"; then
4581 1.1 joerg destfile=$destdir/$destname
4582 1.1 joerg else
4583 1.1 joerg func_basename "$file"
4584 1.1 joerg destfile=$func_basename_result
4585 1.1 joerg destfile=$destdir/$destfile
4586 1.1 joerg fi
4587 1.1 joerg
4588 1.1 joerg # Deduce the name of the destination old-style object file.
4589 1.1 joerg case $destfile in
4590 1.1 joerg *.lo)
4591 1.1 joerg func_lo2o "$destfile"
4592 1.1 joerg staticdest=$func_lo2o_result
4593 1.1 joerg ;;
4594 1.1 joerg *.$objext)
4595 1.1 joerg staticdest=$destfile
4596 1.1 joerg destfile=
4597 1.1 joerg ;;
4598 1.1 joerg *)
4599 1.1 joerg func_fatal_help "cannot copy a libtool object to '$destfile'"
4600 1.1 joerg ;;
4601 1.1 joerg esac
4602 1.1 joerg
4603 1.1 joerg # Install the libtool object if requested.
4604 1.1 joerg test -n "$destfile" && \
4605 1.1 joerg func_show_eval "$install_prog $file $destfile" 'exit $?'
4606 1.1 joerg
4607 1.1 joerg # Install the old object if enabled.
4608 1.1 joerg if test yes = "$build_old_libs"; then
4609 1.1 joerg # Deduce the name of the old-style object file.
4610 1.1 joerg func_lo2o "$file"
4611 1.1 joerg staticobj=$func_lo2o_result
4612 1.1 joerg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
4613 1.1 joerg fi
4614 1.1 joerg exit $EXIT_SUCCESS
4615 1.1 joerg ;;
4616 1.1 joerg
4617 1.1 joerg *)
4618 1.1 joerg # Figure out destination file name, if it wasn't already specified.
4619 1.1 joerg if test -n "$destname"; then
4620 1.1 joerg destfile=$destdir/$destname
4621 1.1 joerg else
4622 1.1 joerg func_basename "$file"
4623 1.1 joerg destfile=$func_basename_result
4624 1.1 joerg destfile=$destdir/$destfile
4625 1.1 joerg fi
4626 1.1 joerg
4627 1.1 joerg # If the file is missing, and there is a .exe on the end, strip it
4628 1.1 joerg # because it is most likely a libtool script we actually want to
4629 1.1 joerg # install
4630 1.1 joerg stripped_ext=
4631 1.1 joerg case $file in
4632 1.1 joerg *.exe)
4633 1.1 joerg if test ! -f "$file"; then
4634 1.1 joerg func_stripname '' '.exe' "$file"
4635 1.1 joerg file=$func_stripname_result
4636 1.1 joerg stripped_ext=.exe
4637 1.1 joerg fi
4638 1.1 joerg ;;
4639 1.1 joerg esac
4640 1.1 joerg
4641 1.1 joerg # Do a test to see if this is really a libtool program.
4642 1.1 joerg case $host in
4643 1.1 joerg *cygwin* | *mingw*)
4644 1.1 joerg if func_ltwrapper_executable_p "$file"; then
4645 1.1 joerg func_ltwrapper_scriptname "$file"
4646 1.1 joerg wrapper=$func_ltwrapper_scriptname_result
4647 1.1 joerg else
4648 1.1 joerg func_stripname '' '.exe' "$file"
4649 1.1 joerg wrapper=$func_stripname_result
4650 1.1 joerg fi
4651 1.1 joerg ;;
4652 1.1 joerg *)
4653 1.1 joerg wrapper=$file
4654 1.1 joerg ;;
4655 1.1 joerg esac
4656 1.1 joerg if func_ltwrapper_script_p "$wrapper"; then
4657 1.1 joerg notinst_deplibs=
4658 1.1 joerg relink_command=
4659 1.1 joerg
4660 1.1 joerg func_source "$wrapper"
4661 1.1 joerg
4662 1.1 joerg # Check the variables that should have been set.
4663 1.1 joerg test -z "$generated_by_libtool_version" && \
4664 1.1 joerg func_fatal_error "invalid libtool wrapper script '$wrapper'"
4665 1.1 joerg
4666 1.1 joerg finalize=:
4667 1.1 joerg for lib in $notinst_deplibs; do
4668 1.1 joerg # Check to see that each library is installed.
4669 1.1 joerg libdir=
4670 1.1 joerg if test -f "$lib"; then
4671 1.1 joerg func_source "$lib"
4672 1.1 joerg fi
4673 1.1 joerg libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
4674 1.1 joerg if test -n "$libdir" && test ! -f "$libfile"; then
4675 1.1 joerg func_warning "'$lib' has not been installed in '$libdir'"
4676 1.1 joerg finalize=false
4677 1.1 joerg fi
4678 1.1 joerg done
4679 1.1 joerg
4680 1.1 joerg relink_command=
4681 1.1 joerg func_source "$wrapper"
4682 1.1 joerg
4683 1.1 joerg outputname=
4684 1.1 joerg if test no = "$fast_install" && test -n "$relink_command"; then
4685 1.1 joerg $opt_dry_run || {
4686 1.1 joerg if $finalize; then
4687 1.1 joerg tmpdir=`func_mktempdir`
4688 1.1 joerg func_basename "$file$stripped_ext"
4689 1.1 joerg file=$func_basename_result
4690 1.1 joerg outputname=$tmpdir/$file
4691 1.1 joerg # Replace the output file specification.
4692 1.1 joerg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
4693 1.1 joerg
4694 1.1 joerg $opt_quiet || {
4695 1.1 joerg func_quote_arg expand,pretty "$relink_command"
4696 1.1 joerg eval "func_echo $func_quote_arg_result"
4697 1.1 joerg }
4698 1.1 joerg if eval "$relink_command"; then :
4699 1.1 joerg else
4700 1.1 joerg func_error "error: relink '$file' with the above command before installing it"
4701 1.1 joerg $opt_dry_run || ${RM}r "$tmpdir"
4702 1.1 joerg continue
4703 1.1 joerg fi
4704 1.1 joerg file=$outputname
4705 1.1 joerg else
4706 1.1 joerg func_warning "cannot relink '$file'"
4707 1.1 joerg fi
4708 1.1 joerg }
4709 1.1 joerg else
4710 1.1 joerg # Install the binary that we compiled earlier.
4711 1.1 joerg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
4712 1.1 joerg fi
4713 1.1 joerg fi
4714 1.1 joerg
4715 1.1 joerg # remove .exe since cygwin /usr/bin/install will append another
4716 1.1 joerg # one anyway
4717 1.1 joerg case $install_prog,$host in
4718 1.1 joerg */usr/bin/install*,*cygwin*)
4719 1.1 joerg case $file:$destfile in
4720 1.1 joerg *.exe:*.exe)
4721 1.1 joerg # this is ok
4722 1.1 joerg ;;
4723 1.1 joerg *.exe:*)
4724 1.1 joerg destfile=$destfile.exe
4725 1.1 joerg ;;
4726 1.1 joerg *:*.exe)
4727 1.1 joerg func_stripname '' '.exe' "$destfile"
4728 1.1 joerg destfile=$func_stripname_result
4729 1.1 joerg ;;
4730 1.1 joerg esac
4731 1.1 joerg ;;
4732 1.1 joerg esac
4733 1.1 joerg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
4734 1.1 joerg $opt_dry_run || if test -n "$outputname"; then
4735 1.1 joerg ${RM}r "$tmpdir"
4736 1.1 joerg fi
4737 1.1 joerg ;;
4738 1.1 joerg esac
4739 1.1 joerg done
4740 1.1 joerg
4741 1.1 joerg for file in $staticlibs; do
4742 1.1 joerg func_basename "$file"
4743 1.1 joerg name=$func_basename_result
4744 1.1 joerg
4745 1.1 joerg # Set up the ranlib parameters.
4746 1.1 joerg oldlib=$destdir/$name
4747 1.1 joerg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
4748 1.1 joerg tool_oldlib=$func_to_tool_file_result
4749 1.1 joerg
4750 1.1 joerg func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
4751 1.1 joerg
4752 1.1 joerg if test -n "$stripme" && test -n "$old_striplib"; then
4753 1.1 joerg func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
4754 1.1 joerg fi
4755 1.1 joerg
4756 1.1 joerg # Do each command in the postinstall commands.
4757 1.1 joerg func_execute_cmds "$old_postinstall_cmds" 'exit $?'
4758 1.1 joerg done
4759 1.1 joerg
4760 1.1 joerg test -n "$future_libdirs" && \
4761 1.1 joerg func_warning "remember to run '$progname --finish$future_libdirs'"
4762 1.1 joerg
4763 1.1 joerg if test -n "$current_libdirs"; then
4764 1.1 joerg # Maybe just do a dry run.
4765 1.1 joerg $opt_dry_run && current_libdirs=" -n$current_libdirs"
4766 1.1 joerg exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
4767 1.1 joerg else
4768 1.1 joerg exit $EXIT_SUCCESS
4769 1.1 joerg fi
4770 1.1 joerg }
4771 1.1 joerg
4772 1.1 joerg test install = "$opt_mode" && func_mode_install ${1+"$@"}
4773 1.1 joerg
4774 1.1 joerg
4775 1.1 joerg # func_generate_dlsyms outputname originator pic_p
4776 1.1 joerg # Extract symbols from dlprefiles and create ${outputname}S.o with
4777 1.1 joerg # a dlpreopen symbol table.
4778 1.1 joerg func_generate_dlsyms ()
4779 1.1 joerg {
4780 1.1 joerg $debug_cmd
4781 1.1 joerg
4782 1.1 joerg my_outputname=$1
4783 1.1 joerg my_originator=$2
4784 1.1 joerg my_pic_p=${3-false}
4785 1.1 joerg my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
4786 1.1 joerg my_dlsyms=
4787 1.1 joerg
4788 1.1 joerg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
4789 1.1 joerg if test -n "$NM" && test -n "$global_symbol_pipe"; then
4790 1.1 joerg my_dlsyms=${my_outputname}S.c
4791 1.1 joerg else
4792 1.1 joerg func_error "not configured to extract global symbols from dlpreopened files"
4793 1.1 joerg fi
4794 1.1 joerg fi
4795 1.1 joerg
4796 1.1 joerg if test -n "$my_dlsyms"; then
4797 1.1 joerg case $my_dlsyms in
4798 1.1 joerg "") ;;
4799 1.1 joerg *.c)
4800 1.1 joerg # Discover the nlist of each of the dlfiles.
4801 1.1 joerg nlist=$output_objdir/$my_outputname.nm
4802 1.1 joerg
4803 1.1 joerg func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
4804 1.1 joerg
4805 1.1 joerg # Parse the name list into a source file.
4806 1.1 joerg func_verbose "creating $output_objdir/$my_dlsyms"
4807 1.1 joerg
4808 1.1 joerg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
4809 1.1 joerg /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
4810 1.1 joerg /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
4811 1.1 joerg
4812 1.1 joerg #ifdef __cplusplus
4813 1.1 joerg extern \"C\" {
4814 1.1 joerg #endif
4815 1.1 joerg
4816 1.1 joerg #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
4817 1.1 joerg #pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
4818 1.1 joerg #endif
4819 1.1 joerg
4820 1.1 joerg /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
4821 1.1 joerg #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
4822 1.1 joerg /* DATA imports from DLLs on WIN32 can't be const, because runtime
4823 1.1 joerg relocations are performed -- see ld's documentation on pseudo-relocs. */
4824 1.1 joerg # define LT_DLSYM_CONST
4825 1.1 joerg #elif defined __osf__
4826 1.1 joerg /* This system does not cope well with relocations in const data. */
4827 1.1 joerg # define LT_DLSYM_CONST
4828 1.1 joerg #else
4829 1.1 joerg # define LT_DLSYM_CONST const
4830 1.1 joerg #endif
4831 1.1 joerg
4832 1.1 joerg #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
4833 1.1 joerg
4834 1.1 joerg /* External symbol declarations for the compiler. */\
4835 1.1 joerg "
4836 1.1 joerg
4837 1.1 joerg if test yes = "$dlself"; then
4838 1.1 joerg func_verbose "generating symbol list for '$output'"
4839 1.1 joerg
4840 1.1 joerg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
4841 1.1 joerg
4842 1.1 joerg # Add our own program objects to the symbol list.
4843 1.1 joerg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
4844 1.1 joerg for progfile in $progfiles; do
4845 1.1 joerg func_to_tool_file "$progfile" func_convert_file_msys_to_w32
4846 1.1 joerg func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
4847 1.1 joerg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
4848 1.1 joerg done
4849 1.1 joerg
4850 1.1 joerg if test -n "$exclude_expsyms"; then
4851 1.1 joerg $opt_dry_run || {
4852 1.1 joerg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
4853 1.1 joerg eval '$MV "$nlist"T "$nlist"'
4854 1.1 joerg }
4855 1.1 joerg fi
4856 1.1 joerg
4857 1.1 joerg if test -n "$export_symbols_regex"; then
4858 1.1 joerg $opt_dry_run || {
4859 1.1 joerg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
4860 1.1 joerg eval '$MV "$nlist"T "$nlist"'
4861 1.1 joerg }
4862 1.1 joerg fi
4863 1.1 joerg
4864 1.1 joerg # Prepare the list of exported symbols
4865 1.1 joerg if test -z "$export_symbols"; then
4866 1.1 joerg export_symbols=$output_objdir/$outputname.exp
4867 1.1 joerg $opt_dry_run || {
4868 1.1 joerg $RM $export_symbols
4869 1.1 joerg eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
4870 1.1 joerg case $host in
4871 1.1 joerg *cygwin* | *mingw* | *cegcc* )
4872 1.1 joerg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4873 1.1 joerg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
4874 1.1 joerg ;;
4875 1.1 joerg esac
4876 1.1 joerg }
4877 1.1 joerg else
4878 1.1 joerg $opt_dry_run || {
4879 1.1 joerg eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
4880 1.1 joerg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
4881 1.1 joerg eval '$MV "$nlist"T "$nlist"'
4882 1.1 joerg case $host in
4883 1.1 joerg *cygwin* | *mingw* | *cegcc* )
4884 1.1 joerg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4885 1.1 joerg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
4886 1.1 joerg ;;
4887 1.1 joerg esac
4888 1.1 joerg }
4889 1.1 joerg fi
4890 1.1 joerg fi
4891 1.1 joerg
4892 1.1 joerg for dlprefile in $dlprefiles; do
4893 1.1 joerg func_verbose "extracting global C symbols from '$dlprefile'"
4894 1.1 joerg func_basename "$dlprefile"
4895 1.1 joerg name=$func_basename_result
4896 1.1 joerg case $host in
4897 1.1 joerg *cygwin* | *mingw* | *cegcc* )
4898 1.1 joerg # if an import library, we need to obtain dlname
4899 1.1 joerg if func_win32_import_lib_p "$dlprefile"; then
4900 1.1 joerg func_tr_sh "$dlprefile"
4901 1.1 joerg eval "curr_lafile=\$libfile_$func_tr_sh_result"
4902 1.1 joerg dlprefile_dlbasename=
4903 1.1 joerg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
4904 1.1 joerg # Use subshell, to avoid clobbering current variable values
4905 1.1 joerg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
4906 1.1 joerg if test -n "$dlprefile_dlname"; then
4907 1.1 joerg func_basename "$dlprefile_dlname"
4908 1.1 joerg dlprefile_dlbasename=$func_basename_result
4909 1.1 joerg else
4910 1.1 joerg # no lafile. user explicitly requested -dlpreopen <import library>.
4911 1.1 joerg $sharedlib_from_linklib_cmd "$dlprefile"
4912 1.1 joerg dlprefile_dlbasename=$sharedlib_from_linklib_result
4913 1.1 joerg fi
4914 1.1 joerg fi
4915 1.1 joerg $opt_dry_run || {
4916 1.1 joerg if test -n "$dlprefile_dlbasename"; then
4917 1.1 joerg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
4918 1.1 joerg else
4919 1.1 joerg func_warning "Could not compute DLL name from $name"
4920 1.1 joerg eval '$ECHO ": $name " >> "$nlist"'
4921 1.1 joerg fi
4922 1.1 joerg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4923 1.1 joerg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
4924 1.1 joerg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
4925 1.1 joerg }
4926 1.1 joerg else # not an import lib
4927 1.1 joerg $opt_dry_run || {
4928 1.1 joerg eval '$ECHO ": $name " >> "$nlist"'
4929 1.1 joerg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4930 1.1 joerg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
4931 1.1 joerg }
4932 1.1 joerg fi
4933 1.1 joerg ;;
4934 1.1 joerg *)
4935 1.1 joerg $opt_dry_run || {
4936 1.1 joerg eval '$ECHO ": $name " >> "$nlist"'
4937 1.1 joerg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4938 1.1 joerg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
4939 1.1 joerg }
4940 1.1 joerg ;;
4941 1.1 joerg esac
4942 1.1 joerg done
4943 1.1 joerg
4944 1.1 joerg $opt_dry_run || {
4945 1.1 joerg # Make sure we have at least an empty file.
4946 1.1 joerg test -f "$nlist" || : > "$nlist"
4947 1.1 joerg
4948 1.1 joerg if test -n "$exclude_expsyms"; then
4949 1.1 joerg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
4950 1.1 joerg $MV "$nlist"T "$nlist"
4951 1.1 joerg fi
4952 1.1 joerg
4953 1.1 joerg # Try sorting and uniquifying the output.
4954 1.1 joerg if $GREP -v "^: " < "$nlist" |
4955 1.1 joerg if sort -k 3 </dev/null >/dev/null 2>&1; then
4956 1.1 joerg sort -k 3
4957 1.1 joerg else
4958 1.1 joerg sort +2
4959 1.1 joerg fi |
4960 1.1 joerg uniq > "$nlist"S; then
4961 1.1 joerg :
4962 1.1 joerg else
4963 1.1 joerg $GREP -v "^: " < "$nlist" > "$nlist"S
4964 1.1 joerg fi
4965 1.1 joerg
4966 1.1 joerg if test -f "$nlist"S; then
4967 1.1 joerg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
4968 1.1 joerg else
4969 1.1 joerg echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
4970 1.1 joerg fi
4971 1.1 joerg
4972 1.1 joerg func_show_eval '$RM "${nlist}I"'
4973 1.1 joerg if test -n "$global_symbol_to_import"; then
4974 1.1 joerg eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
4975 1.1 joerg fi
4976 1.1 joerg
4977 1.1 joerg echo >> "$output_objdir/$my_dlsyms" "\
4978 1.1 joerg
4979 1.1 joerg /* The mapping between symbol names and symbols. */
4980 1.1 joerg typedef struct {
4981 1.1 joerg const char *name;
4982 1.1 joerg void *address;
4983 1.1 joerg } lt_dlsymlist;
4984 1.1 joerg extern LT_DLSYM_CONST lt_dlsymlist
4985 1.1 joerg lt_${my_prefix}_LTX_preloaded_symbols[];\
4986 1.1 joerg "
4987 1.1 joerg
4988 1.1 joerg if test -s "$nlist"I; then
4989 1.1 joerg echo >> "$output_objdir/$my_dlsyms" "\
4990 1.1 joerg static void lt_syminit(void)
4991 1.1 joerg {
4992 1.1 joerg LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
4993 1.1 joerg for (; symbol->name; ++symbol)
4994 1.1 joerg {"
4995 1.1 joerg $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
4996 1.1 joerg echo >> "$output_objdir/$my_dlsyms" "\
4997 1.1 joerg }
4998 1.1 joerg }"
4999 1.1 joerg fi
5000 1.1 joerg echo >> "$output_objdir/$my_dlsyms" "\
5001 1.1 joerg LT_DLSYM_CONST lt_dlsymlist
5002 1.1 joerg lt_${my_prefix}_LTX_preloaded_symbols[] =
5003 1.1 joerg { {\"$my_originator\", (void *) 0},"
5004 1.1 joerg
5005 1.1 joerg if test -s "$nlist"I; then
5006 1.1 joerg echo >> "$output_objdir/$my_dlsyms" "\
5007 1.1 joerg {\"@INIT@\", (void *) <_syminit},"
5008 1.1 joerg fi
5009 1.1 joerg
5010 1.1 joerg case $need_lib_prefix in
5011 1.1 joerg no)
5012 1.1 joerg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
5013 1.1 joerg ;;
5014 1.1 joerg *)
5015 1.1 joerg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
5016 1.1 joerg ;;
5017 1.1 joerg esac
5018 1.1 joerg echo >> "$output_objdir/$my_dlsyms" "\
5019 1.1 joerg {0, (void *) 0}
5020 1.1 joerg };
5021 1.1 joerg
5022 1.1 joerg /* This works around a problem in FreeBSD linker */
5023 1.1 joerg #ifdef FREEBSD_WORKAROUND
5024 1.1 joerg static const void *lt_preloaded_setup() {
5025 1.1 joerg return lt_${my_prefix}_LTX_preloaded_symbols;
5026 1.1 joerg }
5027 1.1 joerg #endif
5028 1.1 joerg
5029 1.1 joerg #ifdef __cplusplus
5030 1.1 joerg }
5031 1.1 joerg #endif\
5032 1.1 joerg "
5033 1.1 joerg } # !$opt_dry_run
5034 1.1 joerg
5035 1.1 joerg pic_flag_for_symtable=
5036 1.1 joerg case "$compile_command " in
5037 1.1 joerg *" -static "*) ;;
5038 1.1 joerg *)
5039 1.1 joerg case $host in
5040 1.1 joerg # compiling the symbol table file with pic_flag works around
5041 1.1 joerg # a FreeBSD bug that causes programs to crash when -lm is
5042 1.1 joerg # linked before any other PIC object. But we must not use
5043 1.1 joerg # pic_flag when linking with -static. The problem exists in
5044 1.1 joerg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
5045 1.1 joerg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
5046 1.1 joerg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
5047 1.1 joerg *-*-hpux*)
5048 1.1 joerg pic_flag_for_symtable=" $pic_flag" ;;
5049 1.1 joerg *)
5050 1.1 joerg $my_pic_p && pic_flag_for_symtable=" $pic_flag"
5051 1.1 joerg ;;
5052 1.1 joerg esac
5053 1.1 joerg ;;
5054 1.1 joerg esac
5055 1.1 joerg symtab_cflags=
5056 1.1 joerg for arg in $LTCFLAGS; do
5057 1.1 joerg case $arg in
5058 1.1 joerg -pie | -fpie | -fPIE) ;;
5059 1.1 joerg *) func_append symtab_cflags " $arg" ;;
5060 1.1 joerg esac
5061 1.1 joerg done
5062 1.1 joerg
5063 1.1 joerg # Now compile the dynamic symbol file.
5064 1.1 joerg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
5065 1.1 joerg
5066 1.1 joerg # Clean up the generated files.
5067 1.1 joerg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
5068 1.1 joerg
5069 1.1 joerg # Transform the symbol file into the correct name.
5070 1.1 joerg symfileobj=$output_objdir/${my_outputname}S.$objext
5071 1.1 joerg case $host in
5072 1.1 joerg *cygwin* | *mingw* | *cegcc* )
5073 1.1 joerg if test -f "$output_objdir/$my_outputname.def"; then
5074 1.1 joerg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
5075 1.1 joerg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
5076 1.1 joerg else
5077 1.1 joerg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5078 1.1 joerg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5079 1.1 joerg fi
5080 1.1 joerg ;;
5081 1.1 joerg *)
5082 1.1 joerg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5083 1.1 joerg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5084 1.1 joerg ;;
5085 1.1 joerg esac
5086 1.1 joerg ;;
5087 1.1 joerg *)
5088 1.1 joerg func_fatal_error "unknown suffix for '$my_dlsyms'"
5089 1.1 joerg ;;
5090 1.1 joerg esac
5091 1.1 joerg else
5092 1.1 joerg # We keep going just in case the user didn't refer to
5093 1.1 joerg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
5094 1.1 joerg # really was required.
5095 1.1 joerg
5096 1.1 joerg # Nullify the symbol file.
5097 1.1 joerg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
5098 1.1 joerg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
5099 1.1 joerg fi
5100 1.1 joerg }
5101 1.1 joerg
5102 1.1 joerg # func_cygming_gnu_implib_p ARG
5103 1.1 joerg # This predicate returns with zero status (TRUE) if
5104 1.1 joerg # ARG is a GNU/binutils-style import library. Returns
5105 1.1 joerg # with nonzero status (FALSE) otherwise.
5106 1.1 joerg func_cygming_gnu_implib_p ()
5107 1.1 joerg {
5108 1.1 joerg $debug_cmd
5109 1.1 joerg
5110 1.1 joerg func_to_tool_file "$1" func_convert_file_msys_to_w32
5111 1.1 joerg 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)$'`
5112 1.1 joerg test -n "$func_cygming_gnu_implib_tmp"
5113 1.1 joerg }
5114 1.1 joerg
5115 1.1 joerg # func_cygming_ms_implib_p ARG
5116 1.1 joerg # This predicate returns with zero status (TRUE) if
5117 1.1 joerg # ARG is an MS-style import library. Returns
5118 1.1 joerg # with nonzero status (FALSE) otherwise.
5119 1.1 joerg func_cygming_ms_implib_p ()
5120 1.1 joerg {
5121 1.1 joerg $debug_cmd
5122 1.1 joerg
5123 1.1 joerg func_to_tool_file "$1" func_convert_file_msys_to_w32
5124 1.1 joerg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
5125 1.1 joerg test -n "$func_cygming_ms_implib_tmp"
5126 1.1 joerg }
5127 1.1 joerg
5128 1.1 joerg # func_win32_libid arg
5129 1.1 joerg # return the library type of file 'arg'
5130 1.1 joerg #
5131 1.1 joerg # Need a lot of goo to handle *both* DLLs and import libs
5132 1.1 joerg # Has to be a shell function in order to 'eat' the argument
5133 1.1 joerg # that is supplied when $file_magic_command is called.
5134 1.1 joerg # Despite the name, also deal with 64 bit binaries.
5135 1.1 joerg func_win32_libid ()
5136 1.1 joerg {
5137 1.1 joerg $debug_cmd
5138 1.1 joerg
5139 1.1 joerg win32_libid_type=unknown
5140 1.1 joerg win32_fileres=`file -L $1 2>/dev/null`
5141 1.1 joerg case $win32_fileres in
5142 1.1 joerg *ar\ archive\ import\ library*) # definitely import
5143 1.1 joerg win32_libid_type="x86 archive import"
5144 1.1 joerg ;;
5145 1.1 joerg *ar\ archive*) # could be an import, or static
5146 1.1 joerg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
5147 1.1 joerg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
5148 1.1 joerg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
5149 1.1 joerg case $nm_interface in
5150 1.1 joerg "MS dumpbin")
5151 1.1 joerg if func_cygming_ms_implib_p "$1" ||
5152 1.1 joerg func_cygming_gnu_implib_p "$1"
5153 1.1 joerg then
5154 1.1 joerg win32_nmres=import
5155 1.1 joerg else
5156 1.1 joerg win32_nmres=
5157 1.1 joerg fi
5158 1.1 joerg ;;
5159 1.1 joerg *)
5160 1.1 joerg func_to_tool_file "$1" func_convert_file_msys_to_w32
5161 1.1 joerg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
5162 1.1 joerg $SED -n -e '
5163 1.1 joerg 1,100{
5164 1.1 joerg / I /{
5165 1.1 joerg s|.*|import|
5166 1.1 joerg p
5167 1.1 joerg q
5168 1.1 joerg }
5169 1.1 joerg }'`
5170 1.1 joerg ;;
5171 1.1 joerg esac
5172 1.1 joerg case $win32_nmres in
5173 1.1 joerg import*) win32_libid_type="x86 archive import";;
5174 1.1 joerg *) win32_libid_type="x86 archive static";;
5175 1.1 joerg esac
5176 1.1 joerg fi
5177 1.1 joerg ;;
5178 1.1 joerg *DLL*)
5179 1.1 joerg win32_libid_type="x86 DLL"
5180 1.1 joerg ;;
5181 1.1 joerg *executable*) # but shell scripts are "executable" too...
5182 1.1 joerg case $win32_fileres in
5183 1.1 joerg *MS\ Windows\ PE\ Intel*)
5184 1.1 joerg win32_libid_type="x86 DLL"
5185 1.1 joerg ;;
5186 1.1 joerg esac
5187 1.1 joerg ;;
5188 1.1 joerg esac
5189 1.1 joerg $ECHO "$win32_libid_type"
5190 1.1 joerg }
5191 1.1 joerg
5192 1.1 joerg # func_cygming_dll_for_implib ARG
5193 1.1 joerg #
5194 1.1 joerg # Platform-specific function to extract the
5195 1.1 joerg # name of the DLL associated with the specified
5196 1.1 joerg # import library ARG.
5197 1.1 joerg # Invoked by eval'ing the libtool variable
5198 1.1 joerg # $sharedlib_from_linklib_cmd
5199 1.1 joerg # Result is available in the variable
5200 1.1 joerg # $sharedlib_from_linklib_result
5201 1.1 joerg func_cygming_dll_for_implib ()
5202 1.1 joerg {
5203 1.1 joerg $debug_cmd
5204 1.1 joerg
5205 1.1 joerg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
5206 1.1 joerg }
5207 1.1 joerg
5208 1.1 joerg # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
5209 1.1 joerg #
5210 1.1 joerg # The is the core of a fallback implementation of a
5211 1.1 joerg # platform-specific function to extract the name of the
5212 1.1 joerg # DLL associated with the specified import library LIBNAME.
5213 1.1 joerg #
5214 1.1 joerg # SECTION_NAME is either .idata$6 or .idata$7, depending
5215 1.1 joerg # on the platform and compiler that created the implib.
5216 1.1 joerg #
5217 1.1 joerg # Echos the name of the DLL associated with the
5218 1.1 joerg # specified import library.
5219 1.1 joerg func_cygming_dll_for_implib_fallback_core ()
5220 1.1 joerg {
5221 1.1 joerg $debug_cmd
5222 1.1 joerg
5223 1.1 joerg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
5224 1.1 joerg $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
5225 1.1 joerg $SED '/^Contents of section '"$match_literal"':/{
5226 1.1 joerg # Place marker at beginning of archive member dllname section
5227 1.1 joerg s/.*/====MARK====/
5228 1.1 joerg p
5229 1.1 joerg d
5230 1.1 joerg }
5231 1.1 joerg # These lines can sometimes be longer than 43 characters, but
5232 1.1 joerg # are always uninteresting
5233 1.1 joerg /:[ ]*file format pe[i]\{,1\}-/d
5234 1.1 joerg /^In archive [^:]*:/d
5235 1.1 joerg # Ensure marker is printed
5236 1.1 joerg /^====MARK====/p
5237 1.1 joerg # Remove all lines with less than 43 characters
5238 1.1 joerg /^.\{43\}/!d
5239 1.1 joerg # From remaining lines, remove first 43 characters
5240 1.1 joerg s/^.\{43\}//' |
5241 1.1 joerg $SED -n '
5242 1.1 joerg # Join marker and all lines until next marker into a single line
5243 1.1 joerg /^====MARK====/ b para
5244 1.1 joerg H
5245 1.1 joerg $ b para
5246 1.1 joerg b
5247 1.1 joerg :para
5248 1.1 joerg x
5249 1.1 joerg s/\n//g
5250 1.1 joerg # Remove the marker
5251 1.1 joerg s/^====MARK====//
5252 1.1 joerg # Remove trailing dots and whitespace
5253 1.1 joerg s/[\. \t]*$//
5254 1.1 joerg # Print
5255 1.1 joerg /./p' |
5256 1.1 joerg # we now have a list, one entry per line, of the stringified
5257 1.1 joerg # contents of the appropriate section of all members of the
5258 1.1 joerg # archive that possess that section. Heuristic: eliminate
5259 1.1 joerg # all those that have a first or second character that is
5260 1.1 joerg # a '.' (that is, objdump's representation of an unprintable
5261 1.1 joerg # character.) This should work for all archives with less than
5262 1.1 joerg # 0x302f exports -- but will fail for DLLs whose name actually
5263 1.1 joerg # begins with a literal '.' or a single character followed by
5264 1.1 joerg # a '.'.
5265 1.1 joerg #
5266 1.1 joerg # Of those that remain, print the first one.
5267 1.1 joerg $SED -e '/^\./d;/^.\./d;q'
5268 1.1 joerg }
5269 1.1 joerg
5270 1.1 joerg # func_cygming_dll_for_implib_fallback ARG
5271 1.1 joerg # Platform-specific function to extract the
5272 1.1 joerg # name of the DLL associated with the specified
5273 1.1 joerg # import library ARG.
5274 1.1 joerg #
5275 1.1 joerg # This fallback implementation is for use when $DLLTOOL
5276 1.1 joerg # does not support the --identify-strict option.
5277 1.1 joerg # Invoked by eval'ing the libtool variable
5278 1.1 joerg # $sharedlib_from_linklib_cmd
5279 1.1 joerg # Result is available in the variable
5280 1.1 joerg # $sharedlib_from_linklib_result
5281 1.1 joerg func_cygming_dll_for_implib_fallback ()
5282 1.1 joerg {
5283 1.1 joerg $debug_cmd
5284 1.1 joerg
5285 1.1 joerg if func_cygming_gnu_implib_p "$1"; then
5286 1.1 joerg # binutils import library
5287 1.1 joerg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
5288 1.1 joerg elif func_cygming_ms_implib_p "$1"; then
5289 1.1 joerg # ms-generated import library
5290 1.1 joerg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
5291 1.1 joerg else
5292 1.1 joerg # unknown
5293 1.1 joerg sharedlib_from_linklib_result=
5294 1.1 joerg fi
5295 1.1 joerg }
5296 1.1 joerg
5297 1.1 joerg
5298 1.1 joerg # func_extract_an_archive dir oldlib
5299 1.1 joerg func_extract_an_archive ()
5300 1.1 joerg {
5301 1.1 joerg $debug_cmd
5302 1.1 joerg
5303 1.1 joerg f_ex_an_ar_dir=$1; shift
5304 1.1 joerg f_ex_an_ar_oldlib=$1
5305 1.1 joerg if test yes = "$lock_old_archive_extraction"; then
5306 1.1 joerg lockfile=$f_ex_an_ar_oldlib.lock
5307 1.1 joerg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
5308 1.1 joerg func_echo "Waiting for $lockfile to be removed"
5309 1.1 joerg sleep 2
5310 1.1 joerg done
5311 1.1 joerg fi
5312 1.1 joerg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
5313 1.1 joerg 'stat=$?; rm -f "$lockfile"; exit $stat'
5314 1.1 joerg if test yes = "$lock_old_archive_extraction"; then
5315 1.1 joerg $opt_dry_run || rm -f "$lockfile"
5316 1.1 joerg fi
5317 1.1 joerg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
5318 1.1 joerg :
5319 1.1 joerg else
5320 1.1 joerg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
5321 1.1 joerg fi
5322 1.1 joerg }
5323 1.1 joerg
5324 1.1 joerg
5325 1.1 joerg # func_extract_archives gentop oldlib ...
5326 1.1 joerg func_extract_archives ()
5327 1.1 joerg {
5328 1.1 joerg $debug_cmd
5329 1.1 joerg
5330 1.1 joerg my_gentop=$1; shift
5331 1.1 joerg my_oldlibs=${1+"$@"}
5332 1.1 joerg my_oldobjs=
5333 1.1 joerg my_xlib=
5334 1.1 joerg my_xabs=
5335 1.1 joerg my_xdir=
5336 1.1 joerg
5337 1.1 joerg for my_xlib in $my_oldlibs; do
5338 1.1 joerg # Extract the objects.
5339 1.1 joerg case $my_xlib in
5340 1.1 joerg [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
5341 1.1 joerg *) my_xabs=`pwd`"/$my_xlib" ;;
5342 1.1 joerg esac
5343 1.1 joerg func_basename "$my_xlib"
5344 1.1 joerg my_xlib=$func_basename_result
5345 1.1 joerg my_xlib_u=$my_xlib
5346 1.1 joerg while :; do
5347 1.1 joerg case " $extracted_archives " in
5348 1.1 joerg *" $my_xlib_u "*)
5349 1.1 joerg func_arith $extracted_serial + 1
5350 1.1 joerg extracted_serial=$func_arith_result
5351 1.1 joerg my_xlib_u=lt$extracted_serial-$my_xlib ;;
5352 1.1 joerg *) break ;;
5353 1.1 joerg esac
5354 1.1 joerg done
5355 1.1 joerg extracted_archives="$extracted_archives $my_xlib_u"
5356 1.1 joerg my_xdir=$my_gentop/$my_xlib_u
5357 1.1 joerg
5358 1.1 joerg func_mkdir_p "$my_xdir"
5359 1.1 joerg
5360 1.1 joerg case $host in
5361 1.1 joerg *-darwin*)
5362 1.1 joerg func_verbose "Extracting $my_xabs"
5363 1.1 joerg # Do not bother doing anything if just a dry run
5364 1.1 joerg $opt_dry_run || {
5365 1.1 joerg darwin_orig_dir=`pwd`
5366 1.1 joerg cd $my_xdir || exit $?
5367 1.1 joerg darwin_archive=$my_xabs
5368 1.1 joerg darwin_curdir=`pwd`
5369 1.1 joerg func_basename "$darwin_archive"
5370 1.1 joerg darwin_base_archive=$func_basename_result
5371 1.1 joerg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
5372 1.1 joerg if test -n "$darwin_arches"; then
5373 1.1 joerg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
5374 1.1 joerg darwin_arch=
5375 1.1 joerg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
5376 1.1 joerg for darwin_arch in $darwin_arches; do
5377 1.1 joerg func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
5378 1.1 joerg $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
5379 1.1 joerg cd "unfat-$$/$darwin_base_archive-$darwin_arch"
5380 1.1 joerg func_extract_an_archive "`pwd`" "$darwin_base_archive"
5381 1.1 joerg cd "$darwin_curdir"
5382 1.1 joerg $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
5383 1.1 joerg done # $darwin_arches
5384 1.1 joerg ## Okay now we've a bunch of thin objects, gotta fatten them up :)
5385 1.1 joerg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
5386 1.1 joerg darwin_file=
5387 1.1 joerg darwin_files=
5388 1.1 joerg for darwin_file in $darwin_filelist; do
5389 1.1 joerg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
5390 1.1 joerg $LIPO -create -output "$darwin_file" $darwin_files
5391 1.1 joerg done # $darwin_filelist
5392 1.1 joerg $RM -rf unfat-$$
5393 1.1 joerg cd "$darwin_orig_dir"
5394 1.1 joerg else
5395 1.1 joerg cd $darwin_orig_dir
5396 1.1 joerg func_extract_an_archive "$my_xdir" "$my_xabs"
5397 1.1 joerg fi # $darwin_arches
5398 1.1 joerg } # !$opt_dry_run
5399 1.1 joerg ;;
5400 1.1 joerg *)
5401 1.1 joerg func_extract_an_archive "$my_xdir" "$my_xabs"
5402 1.1 joerg ;;
5403 1.1 joerg esac
5404 1.1 joerg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
5405 1.1 joerg done
5406 1.1 joerg
5407 1.1 joerg func_extract_archives_result=$my_oldobjs
5408 1.1 joerg }
5409 1.1 joerg
5410 1.1 joerg
5411 1.1 joerg # func_emit_wrapper [arg=no]
5412 1.1 joerg #
5413 1.1 joerg # Emit a libtool wrapper script on stdout.
5414 1.1 joerg # Don't directly open a file because we may want to
5415 1.1 joerg # incorporate the script contents within a cygwin/mingw
5416 1.1 joerg # wrapper executable. Must ONLY be called from within
5417 1.1 joerg # func_mode_link because it depends on a number of variables
5418 1.1 joerg # set therein.
5419 1.1 joerg #
5420 1.1 joerg # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
5421 1.1 joerg # variable will take. If 'yes', then the emitted script
5422 1.1 joerg # will assume that the directory where it is stored is
5423 1.1 joerg # the $objdir directory. This is a cygwin/mingw-specific
5424 1.1 joerg # behavior.
5425 1.1 joerg func_emit_wrapper ()
5426 1.1 joerg {
5427 1.1 joerg func_emit_wrapper_arg1=${1-no}
5428 1.1 joerg
5429 1.1 joerg $ECHO "\
5430 1.1 joerg #! $SHELL
5431 1.1 joerg
5432 1.1 joerg # $output - temporary wrapper script for $objdir/$outputname
5433 1.1 joerg # Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5434 1.1 joerg #
5435 1.1 joerg # The $output program cannot be directly executed until all the libtool
5436 1.1 joerg # libraries that it depends on are installed.
5437 1.1 joerg #
5438 1.1 joerg # This wrapper script should never be moved out of the build directory.
5439 1.1 joerg # If it is, it will not operate correctly.
5440 1.1 joerg
5441 1.1 joerg # Sed substitution that helps us do robust quoting. It backslashifies
5442 1.1 joerg # metacharacters that are still active within double-quoted strings.
5443 1.1 joerg sed_quote_subst='$sed_quote_subst'
5444 1.1 joerg
5445 1.1 joerg # Be Bourne compatible
5446 1.1 joerg if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
5447 1.1 joerg emulate sh
5448 1.1 joerg NULLCMD=:
5449 1.1 joerg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
5450 1.1 joerg # is contrary to our usage. Disable this feature.
5451 1.1 joerg alias -g '\${1+\"\$@\"}'='\"\$@\"'
5452 1.1 joerg setopt NO_GLOB_SUBST
5453 1.1 joerg else
5454 1.1 joerg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
5455 1.1 joerg fi
5456 1.1 joerg BIN_SH=xpg4; export BIN_SH # for Tru64
5457 1.1 joerg DUALCASE=1; export DUALCASE # for MKS sh
5458 1.1 joerg
5459 1.1 joerg # The HP-UX ksh and POSIX shell print the target directory to stdout
5460 1.1 joerg # if CDPATH is set.
5461 1.1 joerg (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
5462 1.1 joerg
5463 1.1 joerg relink_command=\"$relink_command\"
5464 1.1 joerg
5465 1.1 joerg # This environment variable determines our operation mode.
5466 1.1 joerg if test \"\$libtool_install_magic\" = \"$magic\"; then
5467 1.1 joerg # install mode needs the following variables:
5468 1.1 joerg generated_by_libtool_version='$macro_version'
5469 1.1 joerg notinst_deplibs='$notinst_deplibs'
5470 1.1 joerg else
5471 1.1 joerg # When we are sourced in execute mode, \$file and \$ECHO are already set.
5472 1.1 joerg if test \"\$libtool_execute_magic\" != \"$magic\"; then
5473 1.1 joerg file=\"\$0\""
5474 1.1 joerg
5475 1.1 joerg func_quote_arg pretty "$ECHO"
5476 1.1 joerg qECHO=$func_quote_arg_result
5477 1.1 joerg $ECHO "\
5478 1.1 joerg
5479 1.1 joerg # A function that is used when there is no print builtin or printf.
5480 1.1 joerg func_fallback_echo ()
5481 1.1 joerg {
5482 1.1 joerg eval 'cat <<_LTECHO_EOF
5483 1.1 joerg \$1
5484 1.1 joerg _LTECHO_EOF'
5485 1.1 joerg }
5486 1.1 joerg ECHO=$qECHO
5487 1.1 joerg fi
5488 1.1 joerg
5489 1.1 joerg # Very basic option parsing. These options are (a) specific to
5490 1.1 joerg # the libtool wrapper, (b) are identical between the wrapper
5491 1.1 joerg # /script/ and the wrapper /executable/ that is used only on
5492 1.1 joerg # windows platforms, and (c) all begin with the string "--lt-"
5493 1.1 joerg # (application programs are unlikely to have options that match
5494 1.1 joerg # this pattern).
5495 1.1 joerg #
5496 1.1 joerg # There are only two supported options: --lt-debug and
5497 1.1 joerg # --lt-dump-script. There is, deliberately, no --lt-help.
5498 1.1 joerg #
5499 1.1 joerg # The first argument to this parsing function should be the
5500 1.1 joerg # script's $0 value, followed by "$@".
5501 1.1 joerg lt_option_debug=
5502 1.1 joerg func_parse_lt_options ()
5503 1.1 joerg {
5504 1.1 joerg lt_script_arg0=\$0
5505 1.1 joerg shift
5506 1.1 joerg for lt_opt
5507 1.1 joerg do
5508 1.1 joerg case \"\$lt_opt\" in
5509 1.1 joerg --lt-debug) lt_option_debug=1 ;;
5510 1.1 joerg --lt-dump-script)
5511 1.1 joerg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
5512 1.1 joerg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
5513 1.1 joerg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
5514 1.1 joerg cat \"\$lt_dump_D/\$lt_dump_F\"
5515 1.1 joerg exit 0
5516 1.1 joerg ;;
5517 1.1 joerg --lt-*)
5518 1.1 joerg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
5519 1.1 joerg exit 1
5520 1.1 joerg ;;
5521 1.1 joerg esac
5522 1.1 joerg done
5523 1.1 joerg
5524 1.1 joerg # Print the debug banner immediately:
5525 1.1 joerg if test -n \"\$lt_option_debug\"; then
5526 1.1 joerg echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
5527 1.1 joerg fi
5528 1.1 joerg }
5529 1.1 joerg
5530 1.1 joerg # Used when --lt-debug. Prints its arguments to stdout
5531 1.1 joerg # (redirection is the responsibility of the caller)
5532 1.1 joerg func_lt_dump_args ()
5533 1.1 joerg {
5534 1.1 joerg lt_dump_args_N=1;
5535 1.1 joerg for lt_arg
5536 1.1 joerg do
5537 1.1 joerg \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
5538 1.1 joerg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
5539 1.1 joerg done
5540 1.1 joerg }
5541 1.1 joerg
5542 1.1 joerg # Core function for launching the target application
5543 1.1 joerg func_exec_program_core ()
5544 1.1 joerg {
5545 1.1 joerg "
5546 1.1 joerg case $host in
5547 1.1 joerg # Backslashes separate directories on plain windows
5548 1.1 joerg *-*-mingw | *-*-os2* | *-cegcc*)
5549 1.1 joerg $ECHO "\
5550 1.1 joerg if test -n \"\$lt_option_debug\"; then
5551 1.1 joerg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
5552 1.1 joerg func_lt_dump_args \${1+\"\$@\"} 1>&2
5553 1.1 joerg fi
5554 1.1 joerg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
5555 1.1 joerg "
5556 1.1 joerg ;;
5557 1.1 joerg
5558 1.1 joerg *)
5559 1.1 joerg $ECHO "\
5560 1.1 joerg if test -n \"\$lt_option_debug\"; then
5561 1.1 joerg \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
5562 1.1 joerg func_lt_dump_args \${1+\"\$@\"} 1>&2
5563 1.1 joerg fi
5564 1.1 joerg exec \"\$progdir/\$program\" \${1+\"\$@\"}
5565 1.1 joerg "
5566 1.1 joerg ;;
5567 1.1 joerg esac
5568 1.1 joerg $ECHO "\
5569 1.1 joerg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
5570 1.1 joerg exit 1
5571 1.1 joerg }
5572 1.1 joerg
5573 1.1 joerg # A function to encapsulate launching the target application
5574 1.1 joerg # Strips options in the --lt-* namespace from \$@ and
5575 1.1 joerg # launches target application with the remaining arguments.
5576 1.1 joerg func_exec_program ()
5577 1.1 joerg {
5578 1.1 joerg case \" \$* \" in
5579 1.1 joerg *\\ --lt-*)
5580 1.1 joerg for lt_wr_arg
5581 1.1 joerg do
5582 1.1 joerg case \$lt_wr_arg in
5583 1.1 joerg --lt-*) ;;
5584 1.1 joerg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
5585 1.1 joerg esac
5586 1.1 joerg shift
5587 1.1 joerg done ;;
5588 1.1 joerg esac
5589 1.1 joerg func_exec_program_core \${1+\"\$@\"}
5590 1.1 joerg }
5591 1.1 joerg
5592 1.1 joerg # Parse options
5593 1.1 joerg func_parse_lt_options \"\$0\" \${1+\"\$@\"}
5594 1.1 joerg
5595 1.1 joerg # Find the directory that this script lives in.
5596 1.1 joerg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
5597 1.1 joerg test \"x\$thisdir\" = \"x\$file\" && thisdir=.
5598 1.1 joerg
5599 1.1 joerg # Follow symbolic links until we get to the real thisdir.
5600 1.1 joerg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
5601 1.1 joerg while test -n \"\$file\"; do
5602 1.1 joerg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
5603 1.1 joerg
5604 1.1 joerg # If there was a directory component, then change thisdir.
5605 1.1 joerg if test \"x\$destdir\" != \"x\$file\"; then
5606 1.1 joerg case \"\$destdir\" in
5607 1.1 joerg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
5608 1.1 joerg *) thisdir=\"\$thisdir/\$destdir\" ;;
5609 1.1 joerg esac
5610 1.1 joerg fi
5611 1.1 joerg
5612 1.1 joerg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
5613 1.1 joerg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
5614 1.1 joerg done
5615 1.1 joerg
5616 1.1 joerg # Usually 'no', except on cygwin/mingw when embedded into
5617 1.1 joerg # the cwrapper.
5618 1.1 joerg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
5619 1.1 joerg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
5620 1.1 joerg # special case for '.'
5621 1.1 joerg if test \"\$thisdir\" = \".\"; then
5622 1.1 joerg thisdir=\`pwd\`
5623 1.1 joerg fi
5624 1.1 joerg # remove .libs from thisdir
5625 1.1 joerg case \"\$thisdir\" in
5626 1.1 joerg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
5627 1.1 joerg $objdir ) thisdir=. ;;
5628 1.1 joerg esac
5629 1.1 joerg fi
5630 1.1 joerg
5631 1.1 joerg # Try to get the absolute directory name.
5632 1.1 joerg absdir=\`cd \"\$thisdir\" && pwd\`
5633 1.1 joerg test -n \"\$absdir\" && thisdir=\"\$absdir\"
5634 1.1 joerg "
5635 1.1 joerg
5636 1.1 joerg if test yes = "$fast_install"; then
5637 1.1 joerg $ECHO "\
5638 1.1 joerg program=lt-'$outputname'$exeext
5639 1.1 joerg progdir=\"\$thisdir/$objdir\"
5640 1.1 joerg
5641 1.1 joerg if test ! -f \"\$progdir/\$program\" ||
5642 1.1 joerg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
5643 1.1 joerg test \"X\$file\" != \"X\$progdir/\$program\"; }; then
5644 1.1 joerg
5645 1.1 joerg file=\"\$\$-\$program\"
5646 1.1 joerg
5647 1.1 joerg if test ! -d \"\$progdir\"; then
5648 1.1 joerg $MKDIR \"\$progdir\"
5649 1.1 joerg else
5650 1.1 joerg $RM \"\$progdir/\$file\"
5651 1.1 joerg fi"
5652 1.1 joerg
5653 1.1 joerg $ECHO "\
5654 1.1 joerg
5655 1.1 joerg # relink executable if necessary
5656 1.1 joerg if test -n \"\$relink_command\"; then
5657 1.1 joerg if relink_command_output=\`eval \$relink_command 2>&1\`; then :
5658 1.1 joerg else
5659 1.1 joerg \$ECHO \"\$relink_command_output\" >&2
5660 1.1 joerg $RM \"\$progdir/\$file\"
5661 1.1 joerg exit 1
5662 1.1 joerg fi
5663 1.1 joerg fi
5664 1.1 joerg
5665 1.1 joerg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
5666 1.1 joerg { $RM \"\$progdir/\$program\";
5667 1.1 joerg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
5668 1.1 joerg $RM \"\$progdir/\$file\"
5669 1.1 joerg fi"
5670 1.1 joerg else
5671 1.1 joerg $ECHO "\
5672 1.1 joerg program='$outputname'
5673 1.1 joerg progdir=\"\$thisdir/$objdir\"
5674 1.1 joerg "
5675 1.1 joerg fi
5676 1.1 joerg
5677 1.1 joerg $ECHO "\
5678 1.1 joerg
5679 1.1 joerg if test -f \"\$progdir/\$program\"; then"
5680 1.1 joerg
5681 1.1 joerg # fixup the dll searchpath if we need to.
5682 1.1 joerg #
5683 1.1 joerg # Fix the DLL searchpath if we need to. Do this before prepending
5684 1.1 joerg # to shlibpath, because on Windows, both are PATH and uninstalled
5685 1.1 joerg # libraries must come first.
5686 1.1 joerg if test -n "$dllsearchpath"; then
5687 1.1 joerg $ECHO "\
5688 1.1 joerg # Add the dll search path components to the executable PATH
5689 1.1 joerg PATH=$dllsearchpath:\$PATH
5690 1.1 joerg "
5691 1.1 joerg fi
5692 1.1 joerg
5693 1.1 joerg # Export our shlibpath_var if we have one.
5694 1.1 joerg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5695 1.1 joerg $ECHO "\
5696 1.1 joerg # Add our own library path to $shlibpath_var
5697 1.1 joerg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
5698 1.1 joerg
5699 1.1 joerg # Some systems cannot cope with colon-terminated $shlibpath_var
5700 1.1 joerg # The second colon is a workaround for a bug in BeOS R4 sed
5701 1.1 joerg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
5702 1.1 joerg
5703 1.1 joerg export $shlibpath_var
5704 1.1 joerg "
5705 1.1 joerg fi
5706 1.1 joerg
5707 1.1 joerg $ECHO "\
5708 1.1 joerg if test \"\$libtool_execute_magic\" != \"$magic\"; then
5709 1.1 joerg # Run the actual program with our arguments.
5710 1.1 joerg func_exec_program \${1+\"\$@\"}
5711 1.1 joerg fi
5712 1.1 joerg else
5713 1.1 joerg # The program doesn't exist.
5714 1.1 joerg \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
5715 1.1 joerg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
5716 1.1 joerg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
5717 1.1 joerg exit 1
5718 1.1 joerg fi
5719 1.1 joerg fi\
5720 1.1 joerg "
5721 1.1 joerg }
5722 1.1 joerg
5723 1.1 joerg
5724 1.1 joerg # func_emit_cwrapperexe_src
5725 1.1 joerg # emit the source code for a wrapper executable on stdout
5726 1.1 joerg # Must ONLY be called from within func_mode_link because
5727 1.1 joerg # it depends on a number of variable set therein.
5728 1.1 joerg func_emit_cwrapperexe_src ()
5729 1.1 joerg {
5730 1.1 joerg cat <<EOF
5731 1.1 joerg
5732 1.1 joerg /* $cwrappersource - temporary wrapper executable for $objdir/$outputname
5733 1.1 joerg Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5734 1.1 joerg
5735 1.1 joerg The $output program cannot be directly executed until all the libtool
5736 1.1 joerg libraries that it depends on are installed.
5737 1.1 joerg
5738 1.1 joerg This wrapper executable should never be moved out of the build directory.
5739 1.1 joerg If it is, it will not operate correctly.
5740 1.1 joerg */
5741 1.1 joerg EOF
5742 1.1 joerg cat <<"EOF"
5743 1.1 joerg #ifdef _MSC_VER
5744 1.1 joerg # define _CRT_SECURE_NO_DEPRECATE 1
5745 1.1 joerg #endif
5746 1.1 joerg #include <stdio.h>
5747 1.1 joerg #include <stdlib.h>
5748 1.1 joerg #ifdef _MSC_VER
5749 1.1 joerg # include <direct.h>
5750 1.1 joerg # include <process.h>
5751 1.1 joerg # include <io.h>
5752 1.1 joerg #else
5753 1.1 joerg # include <unistd.h>
5754 1.1 joerg # include <stdint.h>
5755 1.1 joerg # ifdef __CYGWIN__
5756 1.1 joerg # include <io.h>
5757 1.1 joerg # endif
5758 1.1 joerg #endif
5759 1.1 joerg #include <malloc.h>
5760 1.1 joerg #include <stdarg.h>
5761 1.1 joerg #include <assert.h>
5762 1.1 joerg #include <string.h>
5763 1.1 joerg #include <ctype.h>
5764 1.1 joerg #include <errno.h>
5765 1.1 joerg #include <fcntl.h>
5766 1.1 joerg #include <sys/stat.h>
5767 1.1 joerg
5768 1.1 joerg #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
5769 1.1 joerg
5770 1.1 joerg /* declarations of non-ANSI functions */
5771 1.1 joerg #if defined __MINGW32__
5772 1.1 joerg # ifdef __STRICT_ANSI__
5773 1.1 joerg int _putenv (const char *);
5774 1.1 joerg # endif
5775 1.1 joerg #elif defined __CYGWIN__
5776 1.1 joerg # ifdef __STRICT_ANSI__
5777 1.1 joerg char *realpath (const char *, char *);
5778 1.1 joerg int putenv (char *);
5779 1.1 joerg int setenv (const char *, const char *, int);
5780 1.1 joerg # endif
5781 1.1 joerg /* #elif defined other_platform || defined ... */
5782 1.1 joerg #endif
5783 1.1 joerg
5784 1.1 joerg /* portability defines, excluding path handling macros */
5785 1.1 joerg #if defined _MSC_VER
5786 1.1 joerg # define setmode _setmode
5787 1.1 joerg # define stat _stat
5788 1.1 joerg # define chmod _chmod
5789 1.1 joerg # define getcwd _getcwd
5790 1.1 joerg # define putenv _putenv
5791 1.1 joerg # define S_IXUSR _S_IEXEC
5792 1.1 joerg #elif defined __MINGW32__
5793 1.1 joerg # define setmode _setmode
5794 1.1 joerg # define stat _stat
5795 1.1 joerg # define chmod _chmod
5796 1.1 joerg # define getcwd _getcwd
5797 1.1 joerg # define putenv _putenv
5798 1.1 joerg #elif defined __CYGWIN__
5799 1.1 joerg # define HAVE_SETENV
5800 1.1 joerg # define FOPEN_WB "wb"
5801 1.1 joerg /* #elif defined other platforms ... */
5802 1.1 joerg #endif
5803 1.1 joerg
5804 1.1 joerg #if defined PATH_MAX
5805 1.1 joerg # define LT_PATHMAX PATH_MAX
5806 1.1 joerg #elif defined MAXPATHLEN
5807 1.1 joerg # define LT_PATHMAX MAXPATHLEN
5808 1.1 joerg #else
5809 1.1 joerg # define LT_PATHMAX 1024
5810 1.1 joerg #endif
5811 1.1 joerg
5812 1.1 joerg #ifndef S_IXOTH
5813 1.1 joerg # define S_IXOTH 0
5814 1.1 joerg #endif
5815 1.1 joerg #ifndef S_IXGRP
5816 1.1 joerg # define S_IXGRP 0
5817 1.1 joerg #endif
5818 1.1 joerg
5819 1.1 joerg /* path handling portability macros */
5820 1.1 joerg #ifndef DIR_SEPARATOR
5821 1.1 joerg # define DIR_SEPARATOR '/'
5822 1.1 joerg # define PATH_SEPARATOR ':'
5823 1.1 joerg #endif
5824 1.1 joerg
5825 1.1 joerg #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
5826 1.1 joerg defined __OS2__
5827 1.1 joerg # define HAVE_DOS_BASED_FILE_SYSTEM
5828 1.1 joerg # define FOPEN_WB "wb"
5829 1.1 joerg # ifndef DIR_SEPARATOR_2
5830 1.1 joerg # define DIR_SEPARATOR_2 '\\'
5831 1.1 joerg # endif
5832 1.1 joerg # ifndef PATH_SEPARATOR_2
5833 1.1 joerg # define PATH_SEPARATOR_2 ';'
5834 1.1 joerg # endif
5835 1.1 joerg #endif
5836 1.1 joerg
5837 1.1 joerg #ifndef DIR_SEPARATOR_2
5838 1.1 joerg # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
5839 1.1 joerg #else /* DIR_SEPARATOR_2 */
5840 1.1 joerg # define IS_DIR_SEPARATOR(ch) \
5841 1.1 joerg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
5842 1.1 joerg #endif /* DIR_SEPARATOR_2 */
5843 1.1 joerg
5844 1.1 joerg #ifndef PATH_SEPARATOR_2
5845 1.1 joerg # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
5846 1.1 joerg #else /* PATH_SEPARATOR_2 */
5847 1.1 joerg # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
5848 1.1 joerg #endif /* PATH_SEPARATOR_2 */
5849 1.1 joerg
5850 1.1 joerg #ifndef FOPEN_WB
5851 1.1 joerg # define FOPEN_WB "w"
5852 1.1 joerg #endif
5853 1.1 joerg #ifndef _O_BINARY
5854 1.1 joerg # define _O_BINARY 0
5855 1.1 joerg #endif
5856 1.1 joerg
5857 1.1 joerg #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
5858 1.1 joerg #define XFREE(stale) do { \
5859 1.1 joerg if (stale) { free (stale); stale = 0; } \
5860 1.1 joerg } while (0)
5861 1.1 joerg
5862 1.1 joerg #if defined LT_DEBUGWRAPPER
5863 1.1 joerg static int lt_debug = 1;
5864 1.1 joerg #else
5865 1.1 joerg static int lt_debug = 0;
5866 1.1 joerg #endif
5867 1.1 joerg
5868 1.1 joerg const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
5869 1.1 joerg
5870 1.1 joerg void *xmalloc (size_t num);
5871 1.1 joerg char *xstrdup (const char *string);
5872 1.1 joerg const char *base_name (const char *name);
5873 1.1 joerg char *find_executable (const char *wrapper);
5874 1.1 joerg char *chase_symlinks (const char *pathspec);
5875 1.1 joerg int make_executable (const char *path);
5876 1.1 joerg int check_executable (const char *path);
5877 1.1 joerg char *strendzap (char *str, const char *pat);
5878 1.1 joerg void lt_debugprintf (const char *file, int line, const char *fmt, ...);
5879 1.1 joerg void lt_fatal (const char *file, int line, const char *message, ...);
5880 1.1 joerg static const char *nonnull (const char *s);
5881 1.1 joerg static const char *nonempty (const char *s);
5882 1.1 joerg void lt_setenv (const char *name, const char *value);
5883 1.1 joerg char *lt_extend_str (const char *orig_value, const char *add, int to_end);
5884 1.1 joerg void lt_update_exe_path (const char *name, const char *value);
5885 1.1 joerg void lt_update_lib_path (const char *name, const char *value);
5886 1.1 joerg char **prepare_spawn (char **argv);
5887 1.1 joerg void lt_dump_script (FILE *f);
5888 1.1 joerg EOF
5889 1.1 joerg
5890 1.1 joerg cat <<EOF
5891 1.1 joerg #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
5892 1.1 joerg # define externally_visible volatile
5893 1.1 joerg #else
5894 1.1 joerg # define externally_visible __attribute__((externally_visible)) volatile
5895 1.1 joerg #endif
5896 1.1 joerg externally_visible const char * MAGIC_EXE = "$magic_exe";
5897 1.1 joerg const char * LIB_PATH_VARNAME = "$shlibpath_var";
5898 1.1 joerg EOF
5899 1.1 joerg
5900 1.1 joerg if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5901 1.1 joerg func_to_host_path "$temp_rpath"
5902 1.1 joerg cat <<EOF
5903 1.1 joerg const char * LIB_PATH_VALUE = "$func_to_host_path_result";
5904 1.1 joerg EOF
5905 1.1 joerg else
5906 1.1 joerg cat <<"EOF"
5907 1.1 joerg const char * LIB_PATH_VALUE = "";
5908 1.1 joerg EOF
5909 1.1 joerg fi
5910 1.1 joerg
5911 1.1 joerg if test -n "$dllsearchpath"; then
5912 1.1 joerg func_to_host_path "$dllsearchpath:"
5913 1.1 joerg cat <<EOF
5914 1.1 joerg const char * EXE_PATH_VARNAME = "PATH";
5915 1.1 joerg const char * EXE_PATH_VALUE = "$func_to_host_path_result";
5916 1.1 joerg EOF
5917 1.1 joerg else
5918 1.1 joerg cat <<"EOF"
5919 1.1 joerg const char * EXE_PATH_VARNAME = "";
5920 1.1 joerg const char * EXE_PATH_VALUE = "";
5921 1.1 joerg EOF
5922 1.1 joerg fi
5923 1.1 joerg
5924 1.1 joerg if test yes = "$fast_install"; then
5925 1.1 joerg cat <<EOF
5926 1.1 joerg const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
5927 1.1 joerg EOF
5928 1.1 joerg else
5929 1.1 joerg cat <<EOF
5930 1.1 joerg const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
5931 1.1 joerg EOF
5932 1.1 joerg fi
5933 1.1 joerg
5934 1.1 joerg
5935 1.1 joerg cat <<"EOF"
5936 1.1 joerg
5937 1.1 joerg #define LTWRAPPER_OPTION_PREFIX "--lt-"
5938 1.1 joerg
5939 1.1 joerg static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
5940 1.1 joerg static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
5941 1.1 joerg static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
5942 1.1 joerg
5943 1.1 joerg int
5944 1.1 joerg main (int argc, char *argv[])
5945 1.1 joerg {
5946 1.1 joerg char **newargz;
5947 1.1 joerg int newargc;
5948 1.1 joerg char *tmp_pathspec;
5949 1.1 joerg char *actual_cwrapper_path;
5950 1.1 joerg char *actual_cwrapper_name;
5951 1.1 joerg char *target_name;
5952 1.1 joerg char *lt_argv_zero;
5953 1.1 joerg int rval = 127;
5954 1.1 joerg
5955 1.1 joerg int i;
5956 1.1 joerg
5957 1.1 joerg program_name = (char *) xstrdup (base_name (argv[0]));
5958 1.1 joerg newargz = XMALLOC (char *, (size_t) argc + 1);
5959 1.1 joerg
5960 1.1 joerg /* very simple arg parsing; don't want to rely on getopt
5961 1.1 joerg * also, copy all non cwrapper options to newargz, except
5962 1.1 joerg * argz[0], which is handled differently
5963 1.1 joerg */
5964 1.1 joerg newargc=0;
5965 1.1 joerg for (i = 1; i < argc; i++)
5966 1.1 joerg {
5967 1.1 joerg if (STREQ (argv[i], dumpscript_opt))
5968 1.1 joerg {
5969 1.1 joerg EOF
5970 1.1 joerg case $host in
5971 1.1 joerg *mingw* | *cygwin* )
5972 1.1 joerg # make stdout use "unix" line endings
5973 1.1 joerg echo " setmode(1,_O_BINARY);"
5974 1.1 joerg ;;
5975 1.1 joerg esac
5976 1.1 joerg
5977 1.1 joerg cat <<"EOF"
5978 1.1 joerg lt_dump_script (stdout);
5979 1.1 joerg return 0;
5980 1.1 joerg }
5981 1.1 joerg if (STREQ (argv[i], debug_opt))
5982 1.1 joerg {
5983 1.1 joerg lt_debug = 1;
5984 1.1 joerg continue;
5985 1.1 joerg }
5986 1.1 joerg if (STREQ (argv[i], ltwrapper_option_prefix))
5987 1.1 joerg {
5988 1.1 joerg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
5989 1.1 joerg namespace, but it is not one of the ones we know about and
5990 1.1 joerg have already dealt with, above (inluding dump-script), then
5991 1.1 joerg report an error. Otherwise, targets might begin to believe
5992 1.1 joerg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
5993 1.1 joerg namespace. The first time any user complains about this, we'll
5994 1.1 joerg need to make LTWRAPPER_OPTION_PREFIX a configure-time option
5995 1.1 joerg or a configure.ac-settable value.
5996 1.1 joerg */
5997 1.1 joerg lt_fatal (__FILE__, __LINE__,
5998 1.1 joerg "unrecognized %s option: '%s'",
5999 1.1 joerg ltwrapper_option_prefix, argv[i]);
6000 1.1 joerg }
6001 1.1 joerg /* otherwise ... */
6002 1.1 joerg newargz[++newargc] = xstrdup (argv[i]);
6003 1.1 joerg }
6004 1.1 joerg newargz[++newargc] = NULL;
6005 1.1 joerg
6006 1.1 joerg EOF
6007 1.1 joerg cat <<EOF
6008 1.1 joerg /* The GNU banner must be the first non-error debug message */
6009 1.1 joerg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
6010 1.1 joerg EOF
6011 1.1 joerg cat <<"EOF"
6012 1.1 joerg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
6013 1.1 joerg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
6014 1.1 joerg
6015 1.1 joerg tmp_pathspec = find_executable (argv[0]);
6016 1.1 joerg if (tmp_pathspec == NULL)
6017 1.1 joerg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
6018 1.1 joerg lt_debugprintf (__FILE__, __LINE__,
6019 1.1 joerg "(main) found exe (before symlink chase) at: %s\n",
6020 1.1 joerg tmp_pathspec);
6021 1.1 joerg
6022 1.1 joerg actual_cwrapper_path = chase_symlinks (tmp_pathspec);
6023 1.1 joerg lt_debugprintf (__FILE__, __LINE__,
6024 1.1 joerg "(main) found exe (after symlink chase) at: %s\n",
6025 1.1 joerg actual_cwrapper_path);
6026 1.1 joerg XFREE (tmp_pathspec);
6027 1.1 joerg
6028 1.1 joerg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
6029 1.1 joerg strendzap (actual_cwrapper_path, actual_cwrapper_name);
6030 1.1 joerg
6031 1.1 joerg /* wrapper name transforms */
6032 1.1 joerg strendzap (actual_cwrapper_name, ".exe");
6033 1.1 joerg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
6034 1.1 joerg XFREE (actual_cwrapper_name);
6035 1.1 joerg actual_cwrapper_name = tmp_pathspec;
6036 1.1 joerg tmp_pathspec = 0;
6037 1.1 joerg
6038 1.1 joerg /* target_name transforms -- use actual target program name; might have lt- prefix */
6039 1.1 joerg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
6040 1.1 joerg strendzap (target_name, ".exe");
6041 1.1 joerg tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
6042 1.1 joerg XFREE (target_name);
6043 1.1 joerg target_name = tmp_pathspec;
6044 1.1 joerg tmp_pathspec = 0;
6045 1.1 joerg
6046 1.1 joerg lt_debugprintf (__FILE__, __LINE__,
6047 1.1 joerg "(main) libtool target name: %s\n",
6048 1.1 joerg target_name);
6049 1.1 joerg EOF
6050 1.1 joerg
6051 1.1 joerg cat <<EOF
6052 1.1 joerg newargz[0] =
6053 1.1 joerg XMALLOC (char, (strlen (actual_cwrapper_path) +
6054 1.1 joerg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
6055 1.1 joerg strcpy (newargz[0], actual_cwrapper_path);
6056 1.1 joerg strcat (newargz[0], "$objdir");
6057 1.1 joerg strcat (newargz[0], "/");
6058 1.1 joerg EOF
6059 1.1 joerg
6060 1.1 joerg cat <<"EOF"
6061 1.1 joerg /* stop here, and copy so we don't have to do this twice */
6062 1.1 joerg tmp_pathspec = xstrdup (newargz[0]);
6063 1.1 joerg
6064 1.1 joerg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
6065 1.1 joerg strcat (newargz[0], actual_cwrapper_name);
6066 1.1 joerg
6067 1.1 joerg /* DO want the lt- prefix here if it exists, so use target_name */
6068 1.1 joerg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
6069 1.1 joerg XFREE (tmp_pathspec);
6070 1.1 joerg tmp_pathspec = NULL;
6071 1.1 joerg EOF
6072 1.1 joerg
6073 1.1 joerg case $host_os in
6074 1.1 joerg mingw*)
6075 1.1 joerg cat <<"EOF"
6076 1.1 joerg {
6077 1.1 joerg char* p;
6078 1.1 joerg while ((p = strchr (newargz[0], '\\')) != NULL)
6079 1.1 joerg {
6080 1.1 joerg *p = '/';
6081 1.1 joerg }
6082 1.1 joerg while ((p = strchr (lt_argv_zero, '\\')) != NULL)
6083 1.1 joerg {
6084 1.1 joerg *p = '/';
6085 1.1 joerg }
6086 1.1 joerg }
6087 1.1 joerg EOF
6088 1.1 joerg ;;
6089 1.1 joerg esac
6090 1.1 joerg
6091 1.1 joerg cat <<"EOF"
6092 1.1 joerg XFREE (target_name);
6093 1.1 joerg XFREE (actual_cwrapper_path);
6094 1.1 joerg XFREE (actual_cwrapper_name);
6095 1.1 joerg
6096 1.1 joerg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
6097 1.1 joerg lt_setenv ("DUALCASE", "1"); /* for MSK sh */
6098 1.1 joerg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must
6099 1.1 joerg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
6100 1.1 joerg because on Windows, both *_VARNAMEs are PATH but uninstalled
6101 1.1 joerg libraries must come first. */
6102 1.1 joerg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
6103 1.1 joerg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
6104 1.1 joerg
6105 1.1 joerg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
6106 1.1 joerg nonnull (lt_argv_zero));
6107 1.1 joerg for (i = 0; i < newargc; i++)
6108 1.1 joerg {
6109 1.1 joerg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
6110 1.1 joerg i, nonnull (newargz[i]));
6111 1.1 joerg }
6112 1.1 joerg
6113 1.1 joerg EOF
6114 1.1 joerg
6115 1.1 joerg case $host_os in
6116 1.1 joerg mingw*)
6117 1.1 joerg cat <<"EOF"
6118 1.1 joerg /* execv doesn't actually work on mingw as expected on unix */
6119 1.1 joerg newargz = prepare_spawn (newargz);
6120 1.1 joerg rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
6121 1.1 joerg if (rval == -1)
6122 1.1 joerg {
6123 1.1 joerg /* failed to start process */
6124 1.1 joerg lt_debugprintf (__FILE__, __LINE__,
6125 1.1 joerg "(main) failed to launch target \"%s\": %s\n",
6126 1.1 joerg lt_argv_zero, nonnull (strerror (errno)));
6127 1.1 joerg return 127;
6128 1.1 joerg }
6129 1.1 joerg return rval;
6130 1.1 joerg EOF
6131 1.1 joerg ;;
6132 1.1 joerg *)
6133 1.1 joerg cat <<"EOF"
6134 1.1 joerg execv (lt_argv_zero, newargz);
6135 1.1 joerg return rval; /* =127, but avoids unused variable warning */
6136 1.1 joerg EOF
6137 1.1 joerg ;;
6138 1.1 joerg esac
6139 1.1 joerg
6140 1.1 joerg cat <<"EOF"
6141 1.1 joerg }
6142 1.1 joerg
6143 1.1 joerg void *
6144 1.1 joerg xmalloc (size_t num)
6145 1.1 joerg {
6146 1.1 joerg void *p = (void *) malloc (num);
6147 1.1 joerg if (!p)
6148 1.1 joerg lt_fatal (__FILE__, __LINE__, "memory exhausted");
6149 1.1 joerg
6150 1.1 joerg return p;
6151 1.1 joerg }
6152 1.1 joerg
6153 1.1 joerg char *
6154 1.1 joerg xstrdup (const char *string)
6155 1.1 joerg {
6156 1.1 joerg return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
6157 1.1 joerg string) : NULL;
6158 1.1 joerg }
6159 1.1 joerg
6160 1.1 joerg const char *
6161 1.1 joerg base_name (const char *name)
6162 1.1 joerg {
6163 1.1 joerg const char *base;
6164 1.1 joerg
6165 1.1 joerg #if defined HAVE_DOS_BASED_FILE_SYSTEM
6166 1.1 joerg /* Skip over the disk name in MSDOS pathnames. */
6167 1.1 joerg if (isalpha ((unsigned char) name[0]) && name[1] == ':')
6168 1.1 joerg name += 2;
6169 1.1 joerg #endif
6170 1.1 joerg
6171 1.1 joerg for (base = name; *name; name++)
6172 1.1 joerg if (IS_DIR_SEPARATOR (*name))
6173 1.1 joerg base = name + 1;
6174 1.1 joerg return base;
6175 1.1 joerg }
6176 1.1 joerg
6177 1.1 joerg int
6178 1.1 joerg check_executable (const char *path)
6179 1.1 joerg {
6180 1.1 joerg struct stat st;
6181 1.1 joerg
6182 1.1 joerg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
6183 1.1 joerg nonempty (path));
6184 1.1 joerg if ((!path) || (!*path))
6185 1.1 joerg return 0;
6186 1.1 joerg
6187 1.1 joerg if ((stat (path, &st) >= 0)
6188 1.1 joerg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
6189 1.1 joerg return 1;
6190 1.1 joerg else
6191 1.1 joerg return 0;
6192 1.1 joerg }
6193 1.1 joerg
6194 1.1 joerg int
6195 1.1 joerg make_executable (const char *path)
6196 1.1 joerg {
6197 1.1 joerg int rval = 0;
6198 1.1 joerg struct stat st;
6199 1.1 joerg
6200 1.1 joerg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
6201 1.1 joerg nonempty (path));
6202 1.1 joerg if ((!path) || (!*path))
6203 1.1 joerg return 0;
6204 1.1 joerg
6205 1.1 joerg if (stat (path, &st) >= 0)
6206 1.1 joerg {
6207 1.1 joerg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
6208 1.1 joerg }
6209 1.1 joerg return rval;
6210 1.1 joerg }
6211 1.1 joerg
6212 1.1 joerg /* Searches for the full path of the wrapper. Returns
6213 1.1 joerg newly allocated full path name if found, NULL otherwise
6214 1.1 joerg Does not chase symlinks, even on platforms that support them.
6215 1.1 joerg */
6216 1.1 joerg char *
6217 1.1 joerg find_executable (const char *wrapper)
6218 1.1 joerg {
6219 1.1 joerg int has_slash = 0;
6220 1.1 joerg const char *p;
6221 1.1 joerg const char *p_next;
6222 1.1 joerg /* static buffer for getcwd */
6223 1.1 joerg char tmp[LT_PATHMAX + 1];
6224 1.1 joerg size_t tmp_len;
6225 1.1 joerg char *concat_name;
6226 1.1 joerg
6227 1.1 joerg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
6228 1.1 joerg nonempty (wrapper));
6229 1.1 joerg
6230 1.1 joerg if ((wrapper == NULL) || (*wrapper == '\0'))
6231 1.1 joerg return NULL;
6232 1.1 joerg
6233 1.1 joerg /* Absolute path? */
6234 1.1 joerg #if defined HAVE_DOS_BASED_FILE_SYSTEM
6235 1.1 joerg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
6236 1.1 joerg {
6237 1.1 joerg concat_name = xstrdup (wrapper);
6238 1.1 joerg if (check_executable (concat_name))
6239 1.1 joerg return concat_name;
6240 1.1 joerg XFREE (concat_name);
6241 1.1 joerg }
6242 1.1 joerg else
6243 1.1 joerg {
6244 1.1 joerg #endif
6245 1.1 joerg if (IS_DIR_SEPARATOR (wrapper[0]))
6246 1.1 joerg {
6247 1.1 joerg concat_name = xstrdup (wrapper);
6248 1.1 joerg if (check_executable (concat_name))
6249 1.1 joerg return concat_name;
6250 1.1 joerg XFREE (concat_name);
6251 1.1 joerg }
6252 1.1 joerg #if defined HAVE_DOS_BASED_FILE_SYSTEM
6253 1.1 joerg }
6254 1.1 joerg #endif
6255 1.1 joerg
6256 1.1 joerg for (p = wrapper; *p; p++)
6257 1.1 joerg if (*p == '/')
6258 1.1 joerg {
6259 1.1 joerg has_slash = 1;
6260 1.1 joerg break;
6261 1.1 joerg }
6262 1.1 joerg if (!has_slash)
6263 1.1 joerg {
6264 1.1 joerg /* no slashes; search PATH */
6265 1.1 joerg const char *path = getenv ("PATH");
6266 1.1 joerg if (path != NULL)
6267 1.1 joerg {
6268 1.1 joerg for (p = path; *p; p = p_next)
6269 1.1 joerg {
6270 1.1 joerg const char *q;
6271 1.1 joerg size_t p_len;
6272 1.1 joerg for (q = p; *q; q++)
6273 1.1 joerg if (IS_PATH_SEPARATOR (*q))
6274 1.1 joerg break;
6275 1.1 joerg p_len = (size_t) (q - p);
6276 1.1 joerg p_next = (*q == '\0' ? q : q + 1);
6277 1.1 joerg if (p_len == 0)
6278 1.1 joerg {
6279 1.1 joerg /* empty path: current directory */
6280 1.1 joerg if (getcwd (tmp, LT_PATHMAX) == NULL)
6281 1.1 joerg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6282 1.1 joerg nonnull (strerror (errno)));
6283 1.1 joerg tmp_len = strlen (tmp);
6284 1.1 joerg concat_name =
6285 1.1 joerg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6286 1.1 joerg memcpy (concat_name, tmp, tmp_len);
6287 1.1 joerg concat_name[tmp_len] = '/';
6288 1.1 joerg strcpy (concat_name + tmp_len + 1, wrapper);
6289 1.1 joerg }
6290 1.1 joerg else
6291 1.1 joerg {
6292 1.1 joerg concat_name =
6293 1.1 joerg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
6294 1.1 joerg memcpy (concat_name, p, p_len);
6295 1.1 joerg concat_name[p_len] = '/';
6296 1.1 joerg strcpy (concat_name + p_len + 1, wrapper);
6297 1.1 joerg }
6298 1.1 joerg if (check_executable (concat_name))
6299 1.1 joerg return concat_name;
6300 1.1 joerg XFREE (concat_name);
6301 1.1 joerg }
6302 1.1 joerg }
6303 1.1 joerg /* not found in PATH; assume curdir */
6304 1.1 joerg }
6305 1.1 joerg /* Relative path | not found in path: prepend cwd */
6306 1.1 joerg if (getcwd (tmp, LT_PATHMAX) == NULL)
6307 1.1 joerg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6308 1.1 joerg nonnull (strerror (errno)));
6309 1.1 joerg tmp_len = strlen (tmp);
6310 1.1 joerg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6311 1.1 joerg memcpy (concat_name, tmp, tmp_len);
6312 1.1 joerg concat_name[tmp_len] = '/';
6313 1.1 joerg strcpy (concat_name + tmp_len + 1, wrapper);
6314 1.1 joerg
6315 1.1 joerg if (check_executable (concat_name))
6316 1.1 joerg return concat_name;
6317 1.1 joerg XFREE (concat_name);
6318 1.1 joerg return NULL;
6319 1.1 joerg }
6320 1.1 joerg
6321 1.1 joerg char *
6322 1.1 joerg chase_symlinks (const char *pathspec)
6323 1.1 joerg {
6324 1.1 joerg #ifndef S_ISLNK
6325 1.1 joerg return xstrdup (pathspec);
6326 1.1 joerg #else
6327 1.1 joerg char buf[LT_PATHMAX];
6328 1.1 joerg struct stat s;
6329 1.1 joerg char *tmp_pathspec = xstrdup (pathspec);
6330 1.1 joerg char *p;
6331 1.1 joerg int has_symlinks = 0;
6332 1.1 joerg while (strlen (tmp_pathspec) && !has_symlinks)
6333 1.1 joerg {
6334 1.1 joerg lt_debugprintf (__FILE__, __LINE__,
6335 1.1 joerg "checking path component for symlinks: %s\n",
6336 1.1 joerg tmp_pathspec);
6337 1.1 joerg if (lstat (tmp_pathspec, &s) == 0)
6338 1.1 joerg {
6339 1.1 joerg if (S_ISLNK (s.st_mode) != 0)
6340 1.1 joerg {
6341 1.1 joerg has_symlinks = 1;
6342 1.1 joerg break;
6343 1.1 joerg }
6344 1.1 joerg
6345 1.1 joerg /* search backwards for last DIR_SEPARATOR */
6346 1.1 joerg p = tmp_pathspec + strlen (tmp_pathspec) - 1;
6347 1.1 joerg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6348 1.1 joerg p--;
6349 1.1 joerg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6350 1.1 joerg {
6351 1.1 joerg /* no more DIR_SEPARATORS left */
6352 1.1 joerg break;
6353 1.1 joerg }
6354 1.1 joerg *p = '\0';
6355 1.1 joerg }
6356 1.1 joerg else
6357 1.1 joerg {
6358 1.1 joerg lt_fatal (__FILE__, __LINE__,
6359 1.1 joerg "error accessing file \"%s\": %s",
6360 1.1 joerg tmp_pathspec, nonnull (strerror (errno)));
6361 1.1 joerg }
6362 1.1 joerg }
6363 1.1 joerg XFREE (tmp_pathspec);
6364 1.1 joerg
6365 1.1 joerg if (!has_symlinks)
6366 1.1 joerg {
6367 1.1 joerg return xstrdup (pathspec);
6368 1.1 joerg }
6369 1.1 joerg
6370 1.1 joerg tmp_pathspec = realpath (pathspec, buf);
6371 1.1 joerg if (tmp_pathspec == 0)
6372 1.1 joerg {
6373 1.1 joerg lt_fatal (__FILE__, __LINE__,
6374 1.1 joerg "could not follow symlinks for %s", pathspec);
6375 1.1 joerg }
6376 1.1 joerg return xstrdup (tmp_pathspec);
6377 1.1 joerg #endif
6378 1.1 joerg }
6379 1.1 joerg
6380 1.1 joerg char *
6381 1.1 joerg strendzap (char *str, const char *pat)
6382 1.1 joerg {
6383 1.1 joerg size_t len, patlen;
6384 1.1 joerg
6385 1.1 joerg assert (str != NULL);
6386 1.1 joerg assert (pat != NULL);
6387 1.1 joerg
6388 1.1 joerg len = strlen (str);
6389 1.1 joerg patlen = strlen (pat);
6390 1.1 joerg
6391 1.1 joerg if (patlen <= len)
6392 1.1 joerg {
6393 1.1 joerg str += len - patlen;
6394 1.1 joerg if (STREQ (str, pat))
6395 1.1 joerg *str = '\0';
6396 1.1 joerg }
6397 1.1 joerg return str;
6398 1.1 joerg }
6399 1.1 joerg
6400 1.1 joerg void
6401 1.1 joerg lt_debugprintf (const char *file, int line, const char *fmt, ...)
6402 1.1 joerg {
6403 1.1 joerg va_list args;
6404 1.1 joerg if (lt_debug)
6405 1.1 joerg {
6406 1.1 joerg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
6407 1.1 joerg va_start (args, fmt);
6408 1.1 joerg (void) vfprintf (stderr, fmt, args);
6409 1.1 joerg va_end (args);
6410 1.1 joerg }
6411 1.1 joerg }
6412 1.1 joerg
6413 1.1 joerg static void
6414 1.1 joerg lt_error_core (int exit_status, const char *file,
6415 1.1 joerg int line, const char *mode,
6416 1.1 joerg const char *message, va_list ap)
6417 1.1 joerg {
6418 1.1 joerg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
6419 1.1 joerg vfprintf (stderr, message, ap);
6420 1.1 joerg fprintf (stderr, ".\n");
6421 1.1 joerg
6422 1.1 joerg if (exit_status >= 0)
6423 1.1 joerg exit (exit_status);
6424 1.1 joerg }
6425 1.1 joerg
6426 1.1 joerg void
6427 1.1 joerg lt_fatal (const char *file, int line, const char *message, ...)
6428 1.1 joerg {
6429 1.1 joerg va_list ap;
6430 1.1 joerg va_start (ap, message);
6431 1.1 joerg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
6432 1.1 joerg va_end (ap);
6433 1.1 joerg }
6434 1.1 joerg
6435 1.1 joerg static const char *
6436 1.1 joerg nonnull (const char *s)
6437 1.1 joerg {
6438 1.1 joerg return s ? s : "(null)";
6439 1.1 joerg }
6440 1.1 joerg
6441 1.1 joerg static const char *
6442 1.1 joerg nonempty (const char *s)
6443 1.1 joerg {
6444 1.1 joerg return (s && !*s) ? "(empty)" : nonnull (s);
6445 1.1 joerg }
6446 1.1 joerg
6447 1.1 joerg void
6448 1.1 joerg lt_setenv (const char *name, const char *value)
6449 1.1 joerg {
6450 1.1 joerg lt_debugprintf (__FILE__, __LINE__,
6451 1.1 joerg "(lt_setenv) setting '%s' to '%s'\n",
6452 1.1 joerg nonnull (name), nonnull (value));
6453 1.1 joerg {
6454 1.1 joerg #ifdef HAVE_SETENV
6455 1.1 joerg /* always make a copy, for consistency with !HAVE_SETENV */
6456 1.1 joerg char *str = xstrdup (value);
6457 1.1 joerg setenv (name, str, 1);
6458 1.1 joerg #else
6459 1.1 joerg size_t len = strlen (name) + 1 + strlen (value) + 1;
6460 1.1 joerg char *str = XMALLOC (char, len);
6461 1.1 joerg sprintf (str, "%s=%s", name, value);
6462 1.1 joerg if (putenv (str) != EXIT_SUCCESS)
6463 1.1 joerg {
6464 1.1 joerg XFREE (str);
6465 1.1 joerg }
6466 1.1 joerg #endif
6467 1.1 joerg }
6468 1.1 joerg }
6469 1.1 joerg
6470 1.1 joerg char *
6471 1.1 joerg lt_extend_str (const char *orig_value, const char *add, int to_end)
6472 1.1 joerg {
6473 1.1 joerg char *new_value;
6474 1.1 joerg if (orig_value && *orig_value)
6475 1.1 joerg {
6476 1.1 joerg size_t orig_value_len = strlen (orig_value);
6477 1.1 joerg size_t add_len = strlen (add);
6478 1.1 joerg new_value = XMALLOC (char, add_len + orig_value_len + 1);
6479 1.1 joerg if (to_end)
6480 1.1 joerg {
6481 1.1 joerg strcpy (new_value, orig_value);
6482 1.1 joerg strcpy (new_value + orig_value_len, add);
6483 1.1 joerg }
6484 1.1 joerg else
6485 1.1 joerg {
6486 1.1 joerg strcpy (new_value, add);
6487 1.1 joerg strcpy (new_value + add_len, orig_value);
6488 1.1 joerg }
6489 1.1 joerg }
6490 1.1 joerg else
6491 1.1 joerg {
6492 1.1 joerg new_value = xstrdup (add);
6493 1.1 joerg }
6494 1.1 joerg return new_value;
6495 1.1 joerg }
6496 1.1 joerg
6497 1.1 joerg void
6498 1.1 joerg lt_update_exe_path (const char *name, const char *value)
6499 1.1 joerg {
6500 1.1 joerg lt_debugprintf (__FILE__, __LINE__,
6501 1.1 joerg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
6502 1.1 joerg nonnull (name), nonnull (value));
6503 1.1 joerg
6504 1.1 joerg if (name && *name && value && *value)
6505 1.1 joerg {
6506 1.1 joerg char *new_value = lt_extend_str (getenv (name), value, 0);
6507 1.1 joerg /* some systems can't cope with a ':'-terminated path #' */
6508 1.1 joerg size_t len = strlen (new_value);
6509 1.1 joerg while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
6510 1.1 joerg {
6511 1.1 joerg new_value[--len] = '\0';
6512 1.1 joerg }
6513 1.1 joerg lt_setenv (name, new_value);
6514 1.1 joerg XFREE (new_value);
6515 1.1 joerg }
6516 1.1 joerg }
6517 1.1 joerg
6518 1.1 joerg void
6519 1.1 joerg lt_update_lib_path (const char *name, const char *value)
6520 1.1 joerg {
6521 1.1 joerg lt_debugprintf (__FILE__, __LINE__,
6522 1.1 joerg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
6523 1.1 joerg nonnull (name), nonnull (value));
6524 1.1 joerg
6525 1.1 joerg if (name && *name && value && *value)
6526 1.1 joerg {
6527 1.1 joerg char *new_value = lt_extend_str (getenv (name), value, 0);
6528 1.1 joerg lt_setenv (name, new_value);
6529 1.1 joerg XFREE (new_value);
6530 1.1 joerg }
6531 1.1 joerg }
6532 1.1 joerg
6533 1.1 joerg EOF
6534 1.1 joerg case $host_os in
6535 1.1 joerg mingw*)
6536 1.1 joerg cat <<"EOF"
6537 1.1 joerg
6538 1.1 joerg /* Prepares an argument vector before calling spawn().
6539 1.1 joerg Note that spawn() does not by itself call the command interpreter
6540 1.1 joerg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
6541 1.1 joerg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
6542 1.1 joerg GetVersionEx(&v);
6543 1.1 joerg v.dwPlatformId == VER_PLATFORM_WIN32_NT;
6544 1.1 joerg }) ? "cmd.exe" : "command.com").
6545 1.1 joerg Instead it simply concatenates the arguments, separated by ' ', and calls
6546 1.1 joerg CreateProcess(). We must quote the arguments since Win32 CreateProcess()
6547 1.1 joerg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
6548 1.1 joerg special way:
6549 1.1 joerg - Space and tab are interpreted as delimiters. They are not treated as
6550 1.1 joerg delimiters if they are surrounded by double quotes: "...".
6551 1.1 joerg - Unescaped double quotes are removed from the input. Their only effect is
6552 1.1 joerg that within double quotes, space and tab are treated like normal
6553 1.1 joerg characters.
6554 1.1 joerg - Backslashes not followed by double quotes are not special.
6555 1.1 joerg - But 2*n+1 backslashes followed by a double quote become
6556 1.1 joerg n backslashes followed by a double quote (n >= 0):
6557 1.1 joerg \" -> "
6558 1.1 joerg \\\" -> \"
6559 1.1 joerg \\\\\" -> \\"
6560 1.1 joerg */
6561 1.1 joerg #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"
6562 1.1 joerg #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"
6563 1.1 joerg char **
6564 1.1 joerg prepare_spawn (char **argv)
6565 1.1 joerg {
6566 1.1 joerg size_t argc;
6567 1.1 joerg char **new_argv;
6568 1.1 joerg size_t i;
6569 1.1 joerg
6570 1.1 joerg /* Count number of arguments. */
6571 1.1 joerg for (argc = 0; argv[argc] != NULL; argc++)
6572 1.1 joerg ;
6573 1.1 joerg
6574 1.1 joerg /* Allocate new argument vector. */
6575 1.1 joerg new_argv = XMALLOC (char *, argc + 1);
6576 1.1 joerg
6577 1.1 joerg /* Put quoted arguments into the new argument vector. */
6578 1.1 joerg for (i = 0; i < argc; i++)
6579 1.1 joerg {
6580 1.1 joerg const char *string = argv[i];
6581 1.1 joerg
6582 1.1 joerg if (string[0] == '\0')
6583 1.1 joerg new_argv[i] = xstrdup ("\"\"");
6584 1.1 joerg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
6585 1.1 joerg {
6586 1.1 joerg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
6587 1.1 joerg size_t length;
6588 1.1 joerg unsigned int backslashes;
6589 1.1 joerg const char *s;
6590 1.1 joerg char *quoted_string;
6591 1.1 joerg char *p;
6592 1.1 joerg
6593 1.1 joerg length = 0;
6594 1.1 joerg backslashes = 0;
6595 1.1 joerg if (quote_around)
6596 1.1 joerg length++;
6597 1.1 joerg for (s = string; *s != '\0'; s++)
6598 1.1 joerg {
6599 1.1 joerg char c = *s;
6600 1.1 joerg if (c == '"')
6601 1.1 joerg length += backslashes + 1;
6602 1.1 joerg length++;
6603 1.1 joerg if (c == '\\')
6604 1.1 joerg backslashes++;
6605 1.1 joerg else
6606 1.1 joerg backslashes = 0;
6607 1.1 joerg }
6608 1.1 joerg if (quote_around)
6609 1.1 joerg length += backslashes + 1;
6610 1.1 joerg
6611 1.1 joerg quoted_string = XMALLOC (char, length + 1);
6612 1.1 joerg
6613 1.1 joerg p = quoted_string;
6614 1.1 joerg backslashes = 0;
6615 1.1 joerg if (quote_around)
6616 1.1 joerg *p++ = '"';
6617 1.1 joerg for (s = string; *s != '\0'; s++)
6618 1.1 joerg {
6619 1.1 joerg char c = *s;
6620 1.1 joerg if (c == '"')
6621 1.1 joerg {
6622 1.1 joerg unsigned int j;
6623 1.1 joerg for (j = backslashes + 1; j > 0; j--)
6624 1.1 joerg *p++ = '\\';
6625 1.1 joerg }
6626 1.1 joerg *p++ = c;
6627 1.1 joerg if (c == '\\')
6628 1.1 joerg backslashes++;
6629 1.1 joerg else
6630 1.1 joerg backslashes = 0;
6631 1.1 joerg }
6632 1.1 joerg if (quote_around)
6633 1.1 joerg {
6634 1.1 joerg unsigned int j;
6635 1.1 joerg for (j = backslashes; j > 0; j--)
6636 1.1 joerg *p++ = '\\';
6637 1.1 joerg *p++ = '"';
6638 1.1 joerg }
6639 1.1 joerg *p = '\0';
6640 1.1 joerg
6641 1.1 joerg new_argv[i] = quoted_string;
6642 1.1 joerg }
6643 1.1 joerg else
6644 1.1 joerg new_argv[i] = (char *) string;
6645 1.1 joerg }
6646 1.1 joerg new_argv[argc] = NULL;
6647 1.1 joerg
6648 1.1 joerg return new_argv;
6649 1.1 joerg }
6650 1.1 joerg EOF
6651 1.1 joerg ;;
6652 1.1 joerg esac
6653 1.1 joerg
6654 1.1 joerg cat <<"EOF"
6655 1.1 joerg void lt_dump_script (FILE* f)
6656 1.1 joerg {
6657 1.1 joerg EOF
6658 1.1 joerg func_emit_wrapper yes |
6659 1.1 joerg $SED -n -e '
6660 1.1 joerg s/^\(.\{79\}\)\(..*\)/\1\
6661 1.1 joerg \2/
6662 1.1 joerg h
6663 1.1 joerg s/\([\\"]\)/\\\1/g
6664 1.1 joerg s/$/\\n/
6665 1.1 joerg s/\([^\n]*\).*/ fputs ("\1", f);/p
6666 1.1 joerg g
6667 1.1 joerg D'
6668 1.1 joerg cat <<"EOF"
6669 1.1 joerg }
6670 1.1 joerg EOF
6671 1.1 joerg }
6672 1.1 joerg # end: func_emit_cwrapperexe_src
6673 1.1 joerg
6674 1.1 joerg # func_win32_import_lib_p ARG
6675 1.1 joerg # True if ARG is an import lib, as indicated by $file_magic_cmd
6676 1.1 joerg func_win32_import_lib_p ()
6677 1.1 joerg {
6678 1.1 joerg $debug_cmd
6679 1.1 joerg
6680 1.1 joerg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
6681 1.1 joerg *import*) : ;;
6682 1.1 joerg *) false ;;
6683 1.1 joerg esac
6684 1.1 joerg }
6685 1.1 joerg
6686 1.1 joerg # func_suncc_cstd_abi
6687 1.1 joerg # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
6688 1.1 joerg # Several compiler flags select an ABI that is incompatible with the
6689 1.1 joerg # Cstd library. Avoid specifying it if any are in CXXFLAGS.
6690 1.1 joerg func_suncc_cstd_abi ()
6691 1.1 joerg {
6692 1.1 joerg $debug_cmd
6693 1.1 joerg
6694 1.1 joerg case " $compile_command " in
6695 1.1 joerg *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
6696 1.1 joerg suncc_use_cstd_abi=no
6697 1.1 joerg ;;
6698 1.1 joerg *)
6699 1.1 joerg suncc_use_cstd_abi=yes
6700 1.1 joerg ;;
6701 1.1 joerg esac
6702 1.1 joerg }
6703 1.1 joerg
6704 1.1 joerg # func_mode_link arg...
6705 1.1 joerg func_mode_link ()
6706 1.1 joerg {
6707 1.1 joerg $debug_cmd
6708 1.1 joerg
6709 1.1 joerg case $host in
6710 1.1 joerg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
6711 1.1 joerg # It is impossible to link a dll without this setting, and
6712 1.1 joerg # we shouldn't force the makefile maintainer to figure out
6713 1.1 joerg # what system we are compiling for in order to pass an extra
6714 1.1 joerg # flag for every libtool invocation.
6715 1.1 joerg # allow_undefined=no
6716 1.1 joerg
6717 1.1 joerg # FIXME: Unfortunately, there are problems with the above when trying
6718 1.1 joerg # to make a dll that has undefined symbols, in which case not
6719 1.1 joerg # even a static library is built. For now, we need to specify
6720 1.1 joerg # -no-undefined on the libtool link line when we can be certain
6721 1.1 joerg # that all symbols are satisfied, otherwise we get a static library.
6722 1.1 joerg allow_undefined=yes
6723 1.1 joerg ;;
6724 1.1 joerg *)
6725 1.1 joerg allow_undefined=yes
6726 1.1 joerg ;;
6727 1.1 joerg esac
6728 1.1 joerg libtool_args=$nonopt
6729 1.1 joerg base_compile="$nonopt $@"
6730 1.1 joerg compile_command=$nonopt
6731 1.1 joerg finalize_command=$nonopt
6732 1.1 joerg
6733 1.1 joerg compile_rpath=
6734 1.1 joerg finalize_rpath=
6735 1.1 joerg compile_shlibpath=
6736 1.1 joerg finalize_shlibpath=
6737 1.1 joerg convenience=
6738 1.1 joerg old_convenience=
6739 1.1 joerg deplibs=
6740 1.1 joerg old_deplibs=
6741 1.1 joerg compiler_flags=
6742 1.1 joerg linker_flags=
6743 1.1 joerg dllsearchpath=
6744 1.1 joerg lib_search_path=`pwd`
6745 1.1 joerg inst_prefix_dir=
6746 1.1 joerg new_inherited_linker_flags=
6747 1.1 joerg
6748 1.1 joerg avoid_version=no
6749 1.1 joerg bindir=
6750 1.1 joerg dlfiles=
6751 1.1 joerg dlprefiles=
6752 1.1 joerg dlself=no
6753 1.1 joerg export_dynamic=no
6754 1.1 joerg export_symbols=
6755 1.1 joerg export_symbols_regex=
6756 1.1 joerg generated=
6757 1.1 joerg libobjs=
6758 1.1 joerg ltlibs=
6759 1.1 joerg module=no
6760 1.1 joerg no_install=no
6761 1.1 joerg objs=
6762 1.1 joerg os2dllname=
6763 1.1 joerg non_pic_objects=
6764 1.1 joerg precious_files_regex=
6765 1.1 joerg prefer_static_libs=no
6766 1.1 joerg preload=false
6767 1.1 joerg prev=
6768 1.1 joerg prevarg=
6769 1.1 joerg release=
6770 1.1 joerg rpath=
6771 1.1 joerg xrpath=
6772 1.1 joerg perm_rpath=
6773 1.1 joerg temp_rpath=
6774 1.1 joerg thread_safe=no
6775 1.1 joerg vinfo=
6776 1.1 joerg vinfo_number=no
6777 1.1 joerg weak_libs=
6778 1.1 joerg single_module=$wl-single_module
6779 1.1 joerg func_infer_tag $base_compile
6780 1.1 joerg
6781 1.1 joerg # We need to know -static, to get the right output filenames.
6782 1.1 joerg for arg
6783 1.1 joerg do
6784 1.1 joerg case $arg in
6785 1.1 joerg -shared)
6786 1.1 joerg test yes != "$build_libtool_libs" \
6787 1.1 joerg && func_fatal_configuration "cannot build a shared library"
6788 1.1 joerg build_old_libs=no
6789 1.1 joerg break
6790 1.1 joerg ;;
6791 1.1 joerg -all-static | -static | -static-libtool-libs)
6792 1.1 joerg case $arg in
6793 1.1 joerg -all-static)
6794 1.1 joerg if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
6795 1.1 joerg func_warning "complete static linking is impossible in this configuration"
6796 1.1 joerg fi
6797 1.1 joerg if test -n "$link_static_flag"; then
6798 1.1 joerg dlopen_self=$dlopen_self_static
6799 1.1 joerg fi
6800 1.1 joerg prefer_static_libs=yes
6801 1.1 joerg ;;
6802 1.1 joerg -static)
6803 1.1 joerg if test -z "$pic_flag" && test -n "$link_static_flag"; then
6804 1.1 joerg dlopen_self=$dlopen_self_static
6805 1.1 joerg fi
6806 1.1 joerg prefer_static_libs=built
6807 1.1 joerg ;;
6808 1.1 joerg -static-libtool-libs)
6809 1.1 joerg if test -z "$pic_flag" && test -n "$link_static_flag"; then
6810 1.1 joerg dlopen_self=$dlopen_self_static
6811 1.1 joerg fi
6812 1.1 joerg prefer_static_libs=yes
6813 1.1 joerg ;;
6814 1.1 joerg esac
6815 1.1 joerg build_libtool_libs=no
6816 1.1 joerg build_old_libs=yes
6817 1.1 joerg break
6818 1.1 joerg ;;
6819 1.1 joerg esac
6820 1.1 joerg done
6821 1.1 joerg
6822 1.1 joerg # See if our shared archives depend on static archives.
6823 1.1 joerg test -n "$old_archive_from_new_cmds" && build_old_libs=yes
6824 1.1 joerg
6825 1.1 joerg # Go through the arguments, transforming them on the way.
6826 1.1 joerg while test "$#" -gt 0; do
6827 1.1 joerg arg=$1
6828 1.1 joerg shift
6829 1.1 joerg func_quote_arg pretty,unquoted "$arg"
6830 1.1 joerg qarg=$func_quote_arg_unquoted_result
6831 1.1 joerg func_append libtool_args " $func_quote_arg_result"
6832 1.1 joerg
6833 1.1 joerg # If the previous option needs an argument, assign it.
6834 1.1 joerg if test -n "$prev"; then
6835 1.1 joerg case $prev in
6836 1.1 joerg output)
6837 1.1 joerg func_append compile_command " @OUTPUT@"
6838 1.1 joerg func_append finalize_command " @OUTPUT@"
6839 1.1 joerg ;;
6840 1.1 joerg esac
6841 1.1 joerg
6842 1.1 joerg case $prev in
6843 1.1 joerg bindir)
6844 1.1 joerg bindir=$arg
6845 1.1 joerg prev=
6846 1.1 joerg continue
6847 1.1 joerg ;;
6848 1.1 joerg dlfiles|dlprefiles)
6849 1.1 joerg $preload || {
6850 1.1 joerg # Add the symbol object into the linking commands.
6851 1.1 joerg func_append compile_command " @SYMFILE@"
6852 1.1 joerg func_append finalize_command " @SYMFILE@"
6853 1.1 joerg preload=:
6854 1.1 joerg }
6855 1.1 joerg case $arg in
6856 1.1 joerg *.la | *.lo) ;; # We handle these cases below.
6857 1.1 joerg force)
6858 1.1 joerg if test no = "$dlself"; then
6859 1.1 joerg dlself=needless
6860 1.1 joerg export_dynamic=yes
6861 1.1 joerg fi
6862 1.1 joerg prev=
6863 1.1 joerg continue
6864 1.1 joerg ;;
6865 1.1 joerg self)
6866 1.1 joerg if test dlprefiles = "$prev"; then
6867 1.1 joerg dlself=yes
6868 1.1 joerg elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
6869 1.1 joerg dlself=yes
6870 1.1 joerg else
6871 1.1 joerg dlself=needless
6872 1.1 joerg export_dynamic=yes
6873 1.1 joerg fi
6874 1.1 joerg prev=
6875 1.1 joerg continue
6876 1.1 joerg ;;
6877 1.1 joerg *)
6878 1.1 joerg if test dlfiles = "$prev"; then
6879 1.1 joerg func_append dlfiles " $arg"
6880 1.1 joerg else
6881 1.1 joerg func_append dlprefiles " $arg"
6882 1.1 joerg fi
6883 1.1 joerg prev=
6884 1.1 joerg continue
6885 1.1 joerg ;;
6886 1.1 joerg esac
6887 1.1 joerg ;;
6888 1.1 joerg expsyms)
6889 1.1 joerg export_symbols=$arg
6890 1.1 joerg test -f "$arg" \
6891 1.1 joerg || func_fatal_error "symbol file '$arg' does not exist"
6892 1.1 joerg prev=
6893 1.1 joerg continue
6894 1.1 joerg ;;
6895 1.1 joerg expsyms_regex)
6896 1.1 joerg export_symbols_regex=$arg
6897 1.1 joerg prev=
6898 1.1 joerg continue
6899 1.1 joerg ;;
6900 1.1 joerg framework)
6901 1.1 joerg case $host in
6902 1.1 joerg *-*-darwin*)
6903 1.1 joerg case "$deplibs " in
6904 1.1 joerg *" $qarg.ltframework "*) ;;
6905 1.1 joerg *) func_append deplibs " $qarg.ltframework" # this is fixed later
6906 1.1 joerg ;;
6907 1.1 joerg esac
6908 1.1 joerg ;;
6909 1.1 joerg esac
6910 1.1 joerg prev=
6911 1.1 joerg continue
6912 1.1 joerg ;;
6913 1.1 joerg inst_prefix)
6914 1.1 joerg inst_prefix_dir=$arg
6915 1.1 joerg prev=
6916 1.1 joerg continue
6917 1.1 joerg ;;
6918 1.1 joerg mllvm)
6919 1.1 joerg # Clang does not use LLVM to link, so we can simply discard any
6920 1.1 joerg # '-mllvm $arg' options when doing the link step.
6921 1.1 joerg prev=
6922 1.1 joerg continue
6923 1.1 joerg ;;
6924 1.1 joerg objectlist)
6925 1.1 joerg if test -f "$arg"; then
6926 1.1 joerg save_arg=$arg
6927 1.1 joerg moreargs=
6928 1.1 joerg for fil in `cat "$save_arg"`
6929 1.1 joerg do
6930 1.1 joerg # func_append moreargs " $fil"
6931 1.1 joerg arg=$fil
6932 1.1 joerg # A libtool-controlled object.
6933 1.1 joerg
6934 1.1 joerg # Check to see that this really is a libtool object.
6935 1.1 joerg if func_lalib_unsafe_p "$arg"; then
6936 1.1 joerg pic_object=
6937 1.1 joerg non_pic_object=
6938 1.1 joerg
6939 1.1 joerg # Read the .lo file
6940 1.1 joerg func_source "$arg"
6941 1.1 joerg
6942 1.1 joerg if test -z "$pic_object" ||
6943 1.1 joerg test -z "$non_pic_object" ||
6944 1.1 joerg test none = "$pic_object" &&
6945 1.1 joerg test none = "$non_pic_object"; then
6946 1.1 joerg func_fatal_error "cannot find name of object for '$arg'"
6947 1.1 joerg fi
6948 1.1 joerg
6949 1.1 joerg # Extract subdirectory from the argument.
6950 1.1 joerg func_dirname "$arg" "/" ""
6951 1.1 joerg xdir=$func_dirname_result
6952 1.1 joerg
6953 1.1 joerg if test none != "$pic_object"; then
6954 1.1 joerg # Prepend the subdirectory the object is found in.
6955 1.1 joerg pic_object=$xdir$pic_object
6956 1.1 joerg
6957 1.1 joerg if test dlfiles = "$prev"; then
6958 1.1 joerg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
6959 1.1 joerg func_append dlfiles " $pic_object"
6960 1.1 joerg prev=
6961 1.1 joerg continue
6962 1.1 joerg else
6963 1.1 joerg # If libtool objects are unsupported, then we need to preload.
6964 1.1 joerg prev=dlprefiles
6965 1.1 joerg fi
6966 1.1 joerg fi
6967 1.1 joerg
6968 1.1 joerg # CHECK ME: I think I busted this. -Ossama
6969 1.1 joerg if test dlprefiles = "$prev"; then
6970 1.1 joerg # Preload the old-style object.
6971 1.1 joerg func_append dlprefiles " $pic_object"
6972 1.1 joerg prev=
6973 1.1 joerg fi
6974 1.1 joerg
6975 1.1 joerg # A PIC object.
6976 1.1 joerg func_append libobjs " $pic_object"
6977 1.1 joerg arg=$pic_object
6978 1.1 joerg fi
6979 1.1 joerg
6980 1.1 joerg # Non-PIC object.
6981 1.1 joerg if test none != "$non_pic_object"; then
6982 1.1 joerg # Prepend the subdirectory the object is found in.
6983 1.1 joerg non_pic_object=$xdir$non_pic_object
6984 1.1 joerg
6985 1.1 joerg # A standard non-PIC object
6986 1.1 joerg func_append non_pic_objects " $non_pic_object"
6987 1.1 joerg if test -z "$pic_object" || test none = "$pic_object"; then
6988 1.1 joerg arg=$non_pic_object
6989 1.1 joerg fi
6990 1.1 joerg else
6991 1.1 joerg # If the PIC object exists, use it instead.
6992 1.1 joerg # $xdir was prepended to $pic_object above.
6993 1.1 joerg non_pic_object=$pic_object
6994 1.1 joerg func_append non_pic_objects " $non_pic_object"
6995 1.1 joerg fi
6996 1.1 joerg else
6997 1.1 joerg # Only an error if not doing a dry-run.
6998 1.1 joerg if $opt_dry_run; then
6999 1.1 joerg # Extract subdirectory from the argument.
7000 1.1 joerg func_dirname "$arg" "/" ""
7001 1.1 joerg xdir=$func_dirname_result
7002 1.1 joerg
7003 1.1 joerg func_lo2o "$arg"
7004 1.1 joerg pic_object=$xdir$objdir/$func_lo2o_result
7005 1.1 joerg non_pic_object=$xdir$func_lo2o_result
7006 1.1 joerg func_append libobjs " $pic_object"
7007 1.1 joerg func_append non_pic_objects " $non_pic_object"
7008 1.1 joerg else
7009 1.1 joerg func_fatal_error "'$arg' is not a valid libtool object"
7010 1.1 joerg fi
7011 1.1 joerg fi
7012 1.1 joerg done
7013 1.1 joerg else
7014 1.1 joerg func_fatal_error "link input file '$arg' does not exist"
7015 1.1 joerg fi
7016 1.1 joerg arg=$save_arg
7017 1.1 joerg prev=
7018 1.1 joerg continue
7019 1.1 joerg ;;
7020 1.1 joerg os2dllname)
7021 1.1 joerg os2dllname=$arg
7022 1.1 joerg prev=
7023 1.1 joerg continue
7024 1.1 joerg ;;
7025 1.1 joerg precious_regex)
7026 1.1 joerg precious_files_regex=$arg
7027 1.1 joerg prev=
7028 1.1 joerg continue
7029 1.1 joerg ;;
7030 1.1 joerg release)
7031 1.1 joerg release=-$arg
7032 1.1 joerg prev=
7033 1.1 joerg continue
7034 1.1 joerg ;;
7035 1.1 joerg rpath | xrpath)
7036 1.1 joerg # We need an absolute path.
7037 1.1 joerg case $arg in
7038 1.1 joerg [\\/]* | [A-Za-z]:[\\/]*) ;;
7039 1.1 joerg *)
7040 1.1 joerg func_fatal_error "only absolute run-paths are allowed"
7041 1.1 joerg ;;
7042 1.1 joerg esac
7043 1.1 joerg if test rpath = "$prev"; then
7044 1.1 joerg case "$rpath " in
7045 1.1 joerg *" $arg "*) ;;
7046 1.1 joerg *) func_append rpath " $arg" ;;
7047 1.1 joerg esac
7048 1.1 joerg else
7049 1.1 joerg case "$xrpath " in
7050 1.1 joerg *" $arg "*) ;;
7051 1.1 joerg *) func_append xrpath " $arg" ;;
7052 1.1 joerg esac
7053 1.1 joerg fi
7054 1.1 joerg prev=
7055 1.1 joerg continue
7056 1.1 joerg ;;
7057 1.1 joerg shrext)
7058 1.1 joerg shrext_cmds=$arg
7059 1.1 joerg prev=
7060 1.1 joerg continue
7061 1.1 joerg ;;
7062 1.1 joerg weak)
7063 1.1 joerg func_append weak_libs " $arg"
7064 1.1 joerg prev=
7065 1.1 joerg continue
7066 1.1 joerg ;;
7067 1.1 joerg xcclinker)
7068 1.1 joerg func_append linker_flags " $qarg"
7069 1.1 joerg func_append compiler_flags " $qarg"
7070 1.1 joerg prev=
7071 1.1 joerg func_append compile_command " $qarg"
7072 1.1 joerg func_append finalize_command " $qarg"
7073 1.1 joerg continue
7074 1.1 joerg ;;
7075 1.1 joerg xcompiler)
7076 1.1 joerg func_append compiler_flags " $qarg"
7077 1.1 joerg prev=
7078 1.1 joerg func_append compile_command " $qarg"
7079 1.1 joerg func_append finalize_command " $qarg"
7080 1.1 joerg continue
7081 1.1 joerg ;;
7082 1.1 joerg xlinker)
7083 1.1 joerg func_append linker_flags " $qarg"
7084 1.1 joerg func_append compiler_flags " $wl$qarg"
7085 1.1 joerg prev=
7086 1.1 joerg func_append compile_command " $wl$qarg"
7087 1.1 joerg func_append finalize_command " $wl$qarg"
7088 1.1 joerg continue
7089 1.1 joerg ;;
7090 1.1 joerg *)
7091 1.1 joerg eval "$prev=\"\$arg\""
7092 1.1 joerg prev=
7093 1.1 joerg continue
7094 1.1 joerg ;;
7095 1.1 joerg esac
7096 1.1 joerg fi # test -n "$prev"
7097 1.1 joerg
7098 1.1 joerg prevarg=$arg
7099 1.1 joerg
7100 1.1 joerg case $arg in
7101 1.1 joerg -all-static)
7102 1.1 joerg if test -n "$link_static_flag"; then
7103 1.1 joerg # See comment for -static flag below, for more details.
7104 1.1 joerg func_append compile_command " $link_static_flag"
7105 1.1 joerg func_append finalize_command " $link_static_flag"
7106 1.1 joerg fi
7107 1.1 joerg continue
7108 1.1 joerg ;;
7109 1.1 joerg
7110 1.1 joerg -allow-undefined)
7111 1.1 joerg # FIXME: remove this flag sometime in the future.
7112 1.1 joerg func_fatal_error "'-allow-undefined' must not be used because it is the default"
7113 1.1 joerg ;;
7114 1.1 joerg
7115 1.1 joerg -avoid-version)
7116 1.1 joerg avoid_version=yes
7117 1.1 joerg continue
7118 1.1 joerg ;;
7119 1.1 joerg
7120 1.1 joerg -bindir)
7121 1.1 joerg prev=bindir
7122 1.1 joerg continue
7123 1.1 joerg ;;
7124 1.1 joerg
7125 1.1 joerg -dlopen)
7126 1.1 joerg prev=dlfiles
7127 1.1 joerg continue
7128 1.1 joerg ;;
7129 1.1 joerg
7130 1.1 joerg -dlpreopen)
7131 1.1 joerg prev=dlprefiles
7132 1.1 joerg continue
7133 1.1 joerg ;;
7134 1.1 joerg
7135 1.1 joerg -export-dynamic)
7136 1.1 joerg export_dynamic=yes
7137 1.1 joerg continue
7138 1.1 joerg ;;
7139 1.1 joerg
7140 1.1 joerg -export-symbols | -export-symbols-regex)
7141 1.1 joerg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
7142 1.1 joerg func_fatal_error "more than one -exported-symbols argument is not allowed"
7143 1.1 joerg fi
7144 1.1 joerg if test X-export-symbols = "X$arg"; then
7145 1.1 joerg prev=expsyms
7146 1.1 joerg else
7147 1.1 joerg prev=expsyms_regex
7148 1.1 joerg fi
7149 1.1 joerg continue
7150 1.1 joerg ;;
7151 1.1 joerg
7152 1.1 joerg -framework)
7153 1.1 joerg prev=framework
7154 1.1 joerg continue
7155 1.1 joerg ;;
7156 1.1 joerg
7157 1.1 joerg -inst-prefix-dir)
7158 1.1 joerg prev=inst_prefix
7159 1.1 joerg continue
7160 1.1 joerg ;;
7161 1.1 joerg
7162 1.1 joerg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
7163 1.1 joerg # so, if we see these flags be careful not to treat them like -L
7164 1.1 joerg -L[A-Z][A-Z]*:*)
7165 1.1 joerg case $with_gcc/$host in
7166 1.1 joerg no/*-*-irix* | /*-*-irix*)
7167 1.1 joerg func_append compile_command " $arg"
7168 1.1 joerg func_append finalize_command " $arg"
7169 1.1 joerg ;;
7170 1.1 joerg esac
7171 1.1 joerg continue
7172 1.1 joerg ;;
7173 1.1 joerg
7174 1.1 joerg -L*)
7175 1.1 joerg func_stripname "-L" '' "$arg"
7176 1.1 joerg if test -z "$func_stripname_result"; then
7177 1.1 joerg if test "$#" -gt 0; then
7178 1.1 joerg func_fatal_error "require no space between '-L' and '$1'"
7179 1.1 joerg else
7180 1.1 joerg func_fatal_error "need path for '-L' option"
7181 1.1 joerg fi
7182 1.1 joerg fi
7183 1.1 joerg func_resolve_sysroot "$func_stripname_result"
7184 1.1 joerg dir=$func_resolve_sysroot_result
7185 1.1 joerg # We need an absolute path.
7186 1.1 joerg case $dir in
7187 1.1 joerg [\\/]* | [A-Za-z]:[\\/]*) ;;
7188 1.1 joerg *)
7189 1.1 joerg absdir=`cd "$dir" && pwd`
7190 1.1 joerg test -z "$absdir" && \
7191 1.1 joerg func_fatal_error "cannot determine absolute directory name of '$dir'"
7192 1.1 joerg dir=$absdir
7193 1.1 joerg ;;
7194 1.1 joerg esac
7195 1.1 joerg case "$deplibs " in
7196 1.1 joerg *" -L$dir "* | *" $arg "*)
7197 1.1 joerg # Will only happen for absolute or sysroot arguments
7198 1.1 joerg ;;
7199 1.1 joerg *)
7200 1.1 joerg # Preserve sysroot, but never include relative directories
7201 1.1 joerg case $dir in
7202 1.1 joerg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
7203 1.1 joerg *) func_append deplibs " -L$dir" ;;
7204 1.1 joerg esac
7205 1.1 joerg func_append lib_search_path " $dir"
7206 1.1 joerg ;;
7207 1.1 joerg esac
7208 1.1 joerg case $host in
7209 1.1 joerg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
7210 1.1 joerg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
7211 1.1 joerg case :$dllsearchpath: in
7212 1.1 joerg *":$dir:"*) ;;
7213 1.1 joerg ::) dllsearchpath=$dir;;
7214 1.1 joerg *) func_append dllsearchpath ":$dir";;
7215 1.1 joerg esac
7216 1.1 joerg case :$dllsearchpath: in
7217 1.1 joerg *":$testbindir:"*) ;;
7218 1.1 joerg ::) dllsearchpath=$testbindir;;
7219 1.1 joerg *) func_append dllsearchpath ":$testbindir";;
7220 1.1 joerg esac
7221 1.1 joerg ;;
7222 1.1 joerg esac
7223 1.1 joerg continue
7224 1.1 joerg ;;
7225 1.1 joerg
7226 1.1 joerg -l*)
7227 1.1 joerg if test X-lc = "X$arg" || test X-lm = "X$arg"; then
7228 1.1 joerg case $host in
7229 1.1 joerg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
7230 1.1 joerg # These systems don't actually have a C or math library (as such)
7231 1.1 joerg continue
7232 1.1 joerg ;;
7233 1.1 joerg *-*-os2*)
7234 1.1 joerg # These systems don't actually have a C library (as such)
7235 1.1 joerg test X-lc = "X$arg" && continue
7236 1.1 joerg ;;
7237 1.1 joerg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
7238 1.1 joerg # Do not include libc due to us having libc/libc_r.
7239 1.1 joerg test X-lc = "X$arg" && continue
7240 1.1 joerg ;;
7241 1.1 joerg *-*-rhapsody* | *-*-darwin1.[012])
7242 1.1 joerg # Rhapsody C and math libraries are in the System framework
7243 1.1 joerg func_append deplibs " System.ltframework"
7244 1.1 joerg continue
7245 1.1 joerg ;;
7246 1.1 joerg *-*-sco3.2v5* | *-*-sco5v6*)
7247 1.1 joerg # Causes problems with __ctype
7248 1.1 joerg test X-lc = "X$arg" && continue
7249 1.1 joerg ;;
7250 1.1 joerg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7251 1.1 joerg # Compiler inserts libc in the correct place for threads to work
7252 1.1 joerg test X-lc = "X$arg" && continue
7253 1.1 joerg ;;
7254 1.1 joerg esac
7255 1.1 joerg elif test X-lc_r = "X$arg"; then
7256 1.1 joerg case $host in
7257 1.1 joerg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
7258 1.1 joerg # Do not include libc_r directly, use -pthread flag.
7259 1.1 joerg continue
7260 1.1 joerg ;;
7261 1.1 joerg esac
7262 1.1 joerg fi
7263 1.1 joerg func_append deplibs " $arg"
7264 1.1 joerg continue
7265 1.1 joerg ;;
7266 1.1 joerg
7267 1.1 joerg -mllvm)
7268 1.1 joerg prev=mllvm
7269 1.1 joerg continue
7270 1.1 joerg ;;
7271 1.1 joerg
7272 1.1 joerg -module)
7273 1.1 joerg module=yes
7274 1.1 joerg continue
7275 1.1 joerg ;;
7276 1.1 joerg
7277 1.1 joerg # Tru64 UNIX uses -model [arg] to determine the layout of C++
7278 1.1 joerg # classes, name mangling, and exception handling.
7279 1.1 joerg # Darwin uses the -arch flag to determine output architecture.
7280 1.1 joerg -model|-arch|-isysroot|--sysroot)
7281 1.1 joerg func_append compiler_flags " $arg"
7282 1.1 joerg func_append compile_command " $arg"
7283 1.1 joerg func_append finalize_command " $arg"
7284 1.1 joerg prev=xcompiler
7285 1.1 joerg continue
7286 1.1 joerg ;;
7287 1.1 joerg
7288 1.1 joerg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7289 1.1 joerg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7290 1.1 joerg func_append compiler_flags " $arg"
7291 1.1 joerg func_append compile_command " $arg"
7292 1.1 joerg func_append finalize_command " $arg"
7293 1.1 joerg case "$new_inherited_linker_flags " in
7294 1.1 joerg *" $arg "*) ;;
7295 1.1 joerg * ) func_append new_inherited_linker_flags " $arg" ;;
7296 1.1 joerg esac
7297 1.1 joerg continue
7298 1.1 joerg ;;
7299 1.1 joerg
7300 1.1 joerg -multi_module)
7301 1.1 joerg single_module=$wl-multi_module
7302 1.1 joerg continue
7303 1.1 joerg ;;
7304 1.1 joerg
7305 1.1 joerg -no-fast-install)
7306 1.1 joerg fast_install=no
7307 1.1 joerg continue
7308 1.1 joerg ;;
7309 1.1 joerg
7310 1.1 joerg -no-install)
7311 1.1 joerg case $host in
7312 1.1 joerg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
7313 1.1 joerg # The PATH hackery in wrapper scripts is required on Windows
7314 1.1 joerg # and Darwin in order for the loader to find any dlls it needs.
7315 1.1 joerg func_warning "'-no-install' is ignored for $host"
7316 1.1 joerg func_warning "assuming '-no-fast-install' instead"
7317 1.1 joerg fast_install=no
7318 1.1 joerg ;;
7319 1.1 joerg *) no_install=yes ;;
7320 1.1 joerg esac
7321 1.1 joerg continue
7322 1.1 joerg ;;
7323 1.1 joerg
7324 1.1 joerg -no-undefined)
7325 1.1 joerg allow_undefined=no
7326 1.1 joerg continue
7327 1.1 joerg ;;
7328 1.1 joerg
7329 1.1 joerg -objectlist)
7330 1.1 joerg prev=objectlist
7331 1.1 joerg continue
7332 1.1 joerg ;;
7333 1.1 joerg
7334 1.1 joerg -os2dllname)
7335 1.1 joerg prev=os2dllname
7336 1.1 joerg continue
7337 1.1 joerg ;;
7338 1.1 joerg
7339 1.1 joerg -o) prev=output ;;
7340 1.1 joerg
7341 1.1 joerg -precious-files-regex)
7342 1.1 joerg prev=precious_regex
7343 1.1 joerg continue
7344 1.1 joerg ;;
7345 1.1 joerg
7346 1.1 joerg -release)
7347 1.1 joerg prev=release
7348 1.1 joerg continue
7349 1.1 joerg ;;
7350 1.1 joerg
7351 1.1 joerg -rpath)
7352 1.1 joerg prev=rpath
7353 1.1 joerg continue
7354 1.1 joerg ;;
7355 1.1 joerg
7356 1.1 joerg -R)
7357 1.1 joerg prev=xrpath
7358 1.1 joerg continue
7359 1.1 joerg ;;
7360 1.1 joerg
7361 1.1 joerg -R*)
7362 1.1 joerg func_stripname '-R' '' "$arg"
7363 1.1 joerg dir=$func_stripname_result
7364 1.1 joerg # We need an absolute path.
7365 1.1 joerg case $dir in
7366 1.1 joerg [\\/]* | [A-Za-z]:[\\/]*) ;;
7367 1.1 joerg =*)
7368 1.1 joerg func_stripname '=' '' "$dir"
7369 1.1 joerg dir=$lt_sysroot$func_stripname_result
7370 1.1 joerg ;;
7371 1.1 joerg *)
7372 1.1 joerg func_fatal_error "only absolute run-paths are allowed"
7373 1.1 joerg ;;
7374 1.1 joerg esac
7375 1.1 joerg case "$xrpath " in
7376 1.1 joerg *" $dir "*) ;;
7377 1.1 joerg *) func_append xrpath " $dir" ;;
7378 1.1 joerg esac
7379 1.1 joerg continue
7380 1.1 joerg ;;
7381 1.1 joerg
7382 1.1 joerg -shared)
7383 1.1 joerg # The effects of -shared are defined in a previous loop.
7384 1.1 joerg continue
7385 1.1 joerg ;;
7386 1.1 joerg
7387 1.1 joerg -shrext)
7388 1.1 joerg prev=shrext
7389 1.1 joerg continue
7390 1.1 joerg ;;
7391 1.1 joerg
7392 1.1 joerg -static | -static-libtool-libs)
7393 1.1 joerg # The effects of -static are defined in a previous loop.
7394 1.1 joerg # We used to do the same as -all-static on platforms that
7395 1.1 joerg # didn't have a PIC flag, but the assumption that the effects
7396 1.1 joerg # would be equivalent was wrong. It would break on at least
7397 1.1 joerg # Digital Unix and AIX.
7398 1.1 joerg continue
7399 1.1 joerg ;;
7400 1.1 joerg
7401 1.1 joerg -thread-safe)
7402 1.1 joerg thread_safe=yes
7403 1.1 joerg continue
7404 1.1 joerg ;;
7405 1.1 joerg
7406 1.1 joerg -version-info)
7407 1.1 joerg prev=vinfo
7408 1.1 joerg continue
7409 1.1 joerg ;;
7410 1.1 joerg
7411 1.1 joerg -version-number)
7412 1.1 joerg prev=vinfo
7413 1.1 joerg vinfo_number=yes
7414 1.1 joerg continue
7415 1.1 joerg ;;
7416 1.1 joerg
7417 1.1 joerg -weak)
7418 1.1 joerg prev=weak
7419 1.1 joerg continue
7420 1.1 joerg ;;
7421 1.1 joerg
7422 1.1 joerg -Wc,*)
7423 1.1 joerg func_stripname '-Wc,' '' "$arg"
7424 1.1 joerg args=$func_stripname_result
7425 1.1 joerg arg=
7426 1.1 joerg save_ifs=$IFS; IFS=,
7427 1.1 joerg for flag in $args; do
7428 1.1 joerg IFS=$save_ifs
7429 1.1 joerg func_quote_arg pretty "$flag"
7430 1.1 joerg func_append arg " $func_quote_arg_result"
7431 1.1 joerg func_append compiler_flags " $func_quote_arg_result"
7432 1.1 joerg done
7433 1.1 joerg IFS=$save_ifs
7434 1.1 joerg func_stripname ' ' '' "$arg"
7435 1.1 joerg arg=$func_stripname_result
7436 1.1 joerg ;;
7437 1.1 joerg
7438 1.1 joerg -Wl,*)
7439 1.1 joerg func_stripname '-Wl,' '' "$arg"
7440 1.1 joerg args=$func_stripname_result
7441 1.1 joerg arg=
7442 1.1 joerg save_ifs=$IFS; IFS=,
7443 1.1 joerg for flag in $args; do
7444 1.1 joerg IFS=$save_ifs
7445 1.1 joerg func_quote_arg pretty "$flag"
7446 1.1 joerg func_append arg " $wl$func_quote_arg_result"
7447 1.1 joerg func_append compiler_flags " $wl$func_quote_arg_result"
7448 1.1 joerg func_append linker_flags " $func_quote_arg_result"
7449 1.1 joerg done
7450 1.1 joerg IFS=$save_ifs
7451 1.1 joerg func_stripname ' ' '' "$arg"
7452 1.1 joerg arg=$func_stripname_result
7453 1.1 joerg ;;
7454 1.1 joerg
7455 1.1 joerg -Xcompiler)
7456 1.1 joerg prev=xcompiler
7457 1.1 joerg continue
7458 1.1 joerg ;;
7459 1.1 joerg
7460 1.1 joerg -Xlinker)
7461 1.1 joerg prev=xlinker
7462 1.1 joerg continue
7463 1.1 joerg ;;
7464 1.1 joerg
7465 1.1 joerg -XCClinker)
7466 1.1 joerg prev=xcclinker
7467 1.1 joerg continue
7468 1.1 joerg ;;
7469 1.1 joerg
7470 1.1 joerg # -msg_* for osf cc
7471 1.1 joerg -msg_*)
7472 1.1 joerg func_quote_arg pretty "$arg"
7473 1.1 joerg arg=$func_quote_arg_result
7474 1.1 joerg ;;
7475 1.1 joerg
7476 1.1 joerg # Flags to be passed through unchanged, with rationale:
7477 1.1 joerg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler
7478 1.1 joerg # -r[0-9][0-9]* specify processor for the SGI compiler
7479 1.1 joerg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
7480 1.1 joerg # +DA*, +DD* enable 64-bit mode for the HP compiler
7481 1.1 joerg # -q* compiler args for the IBM compiler
7482 1.1 joerg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
7483 1.1 joerg # -F/path path to uninstalled frameworks, gcc on darwin
7484 1.1 joerg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC
7485 1.1 joerg # -fstack-protector* stack protector flags for GCC
7486 1.1 joerg # @file GCC response files
7487 1.1 joerg # -tp=* Portland pgcc target processor selection
7488 1.1 joerg # --sysroot=* for sysroot support
7489 1.1 joerg # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
7490 1.1 joerg # -specs=* GCC specs files
7491 1.1 joerg # -stdlib=* select c++ std lib with clang
7492 1.1 joerg # -fsanitize=* Clang/GCC memory and address sanitizer
7493 1.1 joerg # -fuse-ld=* Linker select flags for GCC
7494 1.1 joerg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
7495 1.1 joerg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
7496 1.1 joerg -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
7497 1.1 joerg -specs=*|-fsanitize=*|-fuse-ld=*)
7498 1.1 joerg func_quote_arg pretty "$arg"
7499 1.1 joerg arg=$func_quote_arg_result
7500 1.1 joerg func_append compile_command " $arg"
7501 1.1 joerg func_append finalize_command " $arg"
7502 1.1 joerg func_append compiler_flags " $arg"
7503 1.1 joerg continue
7504 1.1 joerg ;;
7505 1.1 joerg
7506 1.1 joerg -Z*)
7507 1.1 joerg if test os2 = "`expr $host : '.*\(os2\)'`"; then
7508 1.1 joerg # OS/2 uses -Zxxx to specify OS/2-specific options
7509 1.1 joerg compiler_flags="$compiler_flags $arg"
7510 1.1 joerg func_append compile_command " $arg"
7511 1.1 joerg func_append finalize_command " $arg"
7512 1.1 joerg case $arg in
7513 1.1 joerg -Zlinker | -Zstack)
7514 1.1 joerg prev=xcompiler
7515 1.1 joerg ;;
7516 1.1 joerg esac
7517 1.1 joerg continue
7518 1.1 joerg else
7519 1.1 joerg # Otherwise treat like 'Some other compiler flag' below
7520 1.1 joerg func_quote_arg pretty "$arg"
7521 1.1 joerg arg=$func_quote_arg_result
7522 1.1 joerg fi
7523 1.1 joerg ;;
7524 1.1 joerg
7525 1.1 joerg # Some other compiler flag.
7526 1.1 joerg -* | +*)
7527 1.1 joerg func_quote_arg pretty "$arg"
7528 1.1 joerg arg=$func_quote_arg_result
7529 1.1 joerg ;;
7530 1.1 joerg
7531 1.1 joerg *.$objext)
7532 1.1 joerg # A standard object.
7533 1.1 joerg func_append objs " $arg"
7534 1.1 joerg ;;
7535 1.1 joerg
7536 1.1 joerg *.lo)
7537 1.1 joerg # A libtool-controlled object.
7538 1.1 joerg
7539 1.1 joerg # Check to see that this really is a libtool object.
7540 1.1 joerg if func_lalib_unsafe_p "$arg"; then
7541 1.1 joerg pic_object=
7542 1.1 joerg non_pic_object=
7543 1.1 joerg
7544 1.1 joerg # Read the .lo file
7545 1.1 joerg func_source "$arg"
7546 1.1 joerg
7547 1.1 joerg if test -z "$pic_object" ||
7548 1.1 joerg test -z "$non_pic_object" ||
7549 1.1 joerg test none = "$pic_object" &&
7550 1.1 joerg test none = "$non_pic_object"; then
7551 1.1 joerg func_fatal_error "cannot find name of object for '$arg'"
7552 1.1 joerg fi
7553 1.1 joerg
7554 1.1 joerg # Extract subdirectory from the argument.
7555 1.1 joerg func_dirname "$arg" "/" ""
7556 1.1 joerg xdir=$func_dirname_result
7557 1.1 joerg
7558 1.1 joerg test none = "$pic_object" || {
7559 1.1 joerg # Prepend the subdirectory the object is found in.
7560 1.1 joerg pic_object=$xdir$pic_object
7561 1.1 joerg
7562 1.1 joerg if test dlfiles = "$prev"; then
7563 1.1 joerg if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
7564 1.1 joerg func_append dlfiles " $pic_object"
7565 1.1 joerg prev=
7566 1.1 joerg continue
7567 1.1 joerg else
7568 1.1 joerg # If libtool objects are unsupported, then we need to preload.
7569 1.1 joerg prev=dlprefiles
7570 1.1 joerg fi
7571 1.1 joerg fi
7572 1.1 joerg
7573 1.1 joerg # CHECK ME: I think I busted this. -Ossama
7574 1.1 joerg if test dlprefiles = "$prev"; then
7575 1.1 joerg # Preload the old-style object.
7576 1.1 joerg func_append dlprefiles " $pic_object"
7577 1.1 joerg prev=
7578 1.1 joerg fi
7579 1.1 joerg
7580 1.1 joerg # A PIC object.
7581 1.1 joerg func_append libobjs " $pic_object"
7582 1.1 joerg arg=$pic_object
7583 1.1 joerg }
7584 1.1 joerg
7585 1.1 joerg # Non-PIC object.
7586 1.1 joerg if test none != "$non_pic_object"; then
7587 1.1 joerg # Prepend the subdirectory the object is found in.
7588 1.1 joerg non_pic_object=$xdir$non_pic_object
7589 1.1 joerg
7590 1.1 joerg # A standard non-PIC object
7591 1.1 joerg func_append non_pic_objects " $non_pic_object"
7592 1.1 joerg if test -z "$pic_object" || test none = "$pic_object"; then
7593 1.1 joerg arg=$non_pic_object
7594 1.1 joerg fi
7595 1.1 joerg else
7596 1.1 joerg # If the PIC object exists, use it instead.
7597 1.1 joerg # $xdir was prepended to $pic_object above.
7598 1.1 joerg non_pic_object=$pic_object
7599 1.1 joerg func_append non_pic_objects " $non_pic_object"
7600 1.1 joerg fi
7601 1.1 joerg else
7602 1.1 joerg # Only an error if not doing a dry-run.
7603 1.1 joerg if $opt_dry_run; then
7604 1.1 joerg # Extract subdirectory from the argument.
7605 1.1 joerg func_dirname "$arg" "/" ""
7606 1.1 joerg xdir=$func_dirname_result
7607 1.1 joerg
7608 1.1 joerg func_lo2o "$arg"
7609 1.1 joerg pic_object=$xdir$objdir/$func_lo2o_result
7610 1.1 joerg non_pic_object=$xdir$func_lo2o_result
7611 1.1 joerg func_append libobjs " $pic_object"
7612 1.1 joerg func_append non_pic_objects " $non_pic_object"
7613 1.1 joerg else
7614 1.1 joerg func_fatal_error "'$arg' is not a valid libtool object"
7615 1.1 joerg fi
7616 1.1 joerg fi
7617 1.1 joerg ;;
7618 1.1 joerg
7619 1.1 joerg *.$libext)
7620 1.1 joerg # An archive.
7621 1.1 joerg func_append deplibs " $arg"
7622 1.1 joerg func_append old_deplibs " $arg"
7623 1.1 joerg continue
7624 1.1 joerg ;;
7625 1.1 joerg
7626 1.1 joerg *.la)
7627 1.1 joerg # A libtool-controlled library.
7628 1.1 joerg
7629 1.1 joerg func_resolve_sysroot "$arg"
7630 1.1 joerg if test dlfiles = "$prev"; then
7631 1.1 joerg # This library was specified with -dlopen.
7632 1.1 joerg func_append dlfiles " $func_resolve_sysroot_result"
7633 1.1 joerg prev=
7634 1.1 joerg elif test dlprefiles = "$prev"; then
7635 1.1 joerg # The library was specified with -dlpreopen.
7636 1.1 joerg func_append dlprefiles " $func_resolve_sysroot_result"
7637 1.1 joerg prev=
7638 1.1 joerg else
7639 1.1 joerg func_append deplibs " $func_resolve_sysroot_result"
7640 1.1 joerg fi
7641 1.1 joerg continue
7642 1.1 joerg ;;
7643 1.1 joerg
7644 1.1 joerg # Some other compiler argument.
7645 1.1 joerg *)
7646 1.1 joerg # Unknown arguments in both finalize_command and compile_command need
7647 1.1 joerg # to be aesthetically quoted because they are evaled later.
7648 1.1 joerg func_quote_arg pretty "$arg"
7649 1.1 joerg arg=$func_quote_arg_result
7650 1.1 joerg ;;
7651 1.1 joerg esac # arg
7652 1.1 joerg
7653 1.1 joerg # Now actually substitute the argument into the commands.
7654 1.1 joerg if test -n "$arg"; then
7655 1.1 joerg func_append compile_command " $arg"
7656 1.1 joerg func_append finalize_command " $arg"
7657 1.1 joerg fi
7658 1.1 joerg done # argument parsing loop
7659 1.1 joerg
7660 1.1 joerg test -n "$prev" && \
7661 1.1 joerg func_fatal_help "the '$prevarg' option requires an argument"
7662 1.1 joerg
7663 1.1 joerg if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
7664 1.1 joerg eval arg=\"$export_dynamic_flag_spec\"
7665 1.1 joerg func_append compile_command " $arg"
7666 1.1 joerg func_append finalize_command " $arg"
7667 1.1 joerg fi
7668 1.1 joerg
7669 1.1 joerg oldlibs=
7670 1.1 joerg # calculate the name of the file, without its directory
7671 1.1 joerg func_basename "$output"
7672 1.1 joerg outputname=$func_basename_result
7673 1.1 joerg libobjs_save=$libobjs
7674 1.1 joerg
7675 1.1 joerg if test -n "$shlibpath_var"; then
7676 1.1 joerg # get the directories listed in $shlibpath_var
7677 1.1 joerg eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
7678 1.1 joerg else
7679 1.1 joerg shlib_search_path=
7680 1.1 joerg fi
7681 1.1 joerg eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
7682 1.1 joerg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
7683 1.1 joerg
7684 1.1 joerg # Definition is injected by LT_CONFIG during libtool generation.
7685 1.1 joerg func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
7686 1.1 joerg
7687 1.1 joerg func_dirname "$output" "/" ""
7688 1.1 joerg output_objdir=$func_dirname_result$objdir
7689 1.1 joerg func_to_tool_file "$output_objdir/"
7690 1.1 joerg tool_output_objdir=$func_to_tool_file_result
7691 1.1 joerg # Create the object directory.
7692 1.1 joerg func_mkdir_p "$output_objdir"
7693 1.1 joerg
7694 1.1 joerg # Determine the type of output
7695 1.1 joerg case $output in
7696 1.1 joerg "")
7697 1.1 joerg func_fatal_help "you must specify an output file"
7698 1.1 joerg ;;
7699 1.1 joerg *.$libext) linkmode=oldlib ;;
7700 1.1 joerg *.lo | *.$objext) linkmode=obj ;;
7701 1.1 joerg *.la) linkmode=lib ;;
7702 1.1 joerg *) linkmode=prog ;; # Anything else should be a program.
7703 1.1 joerg esac
7704 1.1 joerg
7705 1.1 joerg specialdeplibs=
7706 1.1 joerg
7707 1.1 joerg libs=
7708 1.1 joerg # Find all interdependent deplibs by searching for libraries
7709 1.1 joerg # that are linked more than once (e.g. -la -lb -la)
7710 1.1 joerg for deplib in $deplibs; do
7711 1.1 joerg if $opt_preserve_dup_deps; then
7712 1.1 joerg case "$libs " in
7713 1.1 joerg *" $deplib "*) func_append specialdeplibs " $deplib" ;;
7714 1.1 joerg esac
7715 1.1 joerg fi
7716 1.1 joerg func_append libs " $deplib"
7717 1.1 joerg done
7718 1.1 joerg
7719 1.1 joerg if test lib = "$linkmode"; then
7720 1.1 joerg libs="$predeps $libs $compiler_lib_search_path $postdeps"
7721 1.1 joerg
7722 1.1 joerg # Compute libraries that are listed more than once in $predeps
7723 1.1 joerg # $postdeps and mark them as special (i.e., whose duplicates are
7724 1.1 joerg # not to be eliminated).
7725 1.1 joerg pre_post_deps=
7726 1.1 joerg if $opt_duplicate_compiler_generated_deps; then
7727 1.1 joerg for pre_post_dep in $predeps $postdeps; do
7728 1.1 joerg case "$pre_post_deps " in
7729 1.1 joerg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
7730 1.1 joerg esac
7731 1.1 joerg func_append pre_post_deps " $pre_post_dep"
7732 1.1 joerg done
7733 1.1 joerg fi
7734 1.1 joerg pre_post_deps=
7735 1.1 joerg fi
7736 1.1 joerg
7737 1.1 joerg deplibs=
7738 1.1 joerg newdependency_libs=
7739 1.1 joerg newlib_search_path=
7740 1.1 joerg need_relink=no # whether we're linking any uninstalled libtool libraries
7741 1.1 joerg notinst_deplibs= # not-installed libtool libraries
7742 1.1 joerg notinst_path= # paths that contain not-installed libtool libraries
7743 1.1 joerg
7744 1.1 joerg case $linkmode in
7745 1.1 joerg lib)
7746 1.1 joerg passes="conv dlpreopen link"
7747 1.1 joerg for file in $dlfiles $dlprefiles; do
7748 1.1 joerg case $file in
7749 1.1 joerg *.la) ;;
7750 1.1 joerg *)
7751 1.1 joerg func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
7752 1.1 joerg ;;
7753 1.1 joerg esac
7754 1.1 joerg done
7755 1.1 joerg ;;
7756 1.1 joerg prog)
7757 1.1 joerg compile_deplibs=
7758 1.1 joerg finalize_deplibs=
7759 1.1 joerg alldeplibs=false
7760 1.1 joerg newdlfiles=
7761 1.1 joerg newdlprefiles=
7762 1.1 joerg passes="conv scan dlopen dlpreopen link"
7763 1.1 joerg ;;
7764 1.1 joerg *) passes="conv"
7765 1.1 joerg ;;
7766 1.1 joerg esac
7767 1.1 joerg
7768 1.1 joerg for pass in $passes; do
7769 1.1 joerg # The preopen pass in lib mode reverses $deplibs; put it back here
7770 1.1 joerg # so that -L comes before libs that need it for instance...
7771 1.1 joerg if test lib,link = "$linkmode,$pass"; then
7772 1.1 joerg ## FIXME: Find the place where the list is rebuilt in the wrong
7773 1.1 joerg ## order, and fix it there properly
7774 1.1 joerg tmp_deplibs=
7775 1.1 joerg for deplib in $deplibs; do
7776 1.1 joerg tmp_deplibs="$deplib $tmp_deplibs"
7777 1.1 joerg done
7778 1.1 joerg deplibs=$tmp_deplibs
7779 1.1 joerg fi
7780 1.1 joerg
7781 1.1 joerg if test lib,link = "$linkmode,$pass" ||
7782 1.1 joerg test prog,scan = "$linkmode,$pass"; then
7783 1.1 joerg libs=$deplibs
7784 1.1 joerg deplibs=
7785 1.1 joerg fi
7786 1.1 joerg if test prog = "$linkmode"; then
7787 1.1 joerg case $pass in
7788 1.1 joerg dlopen) libs=$dlfiles ;;
7789 1.1 joerg dlpreopen) libs=$dlprefiles ;;
7790 1.1 joerg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
7791 1.1 joerg esac
7792 1.1 joerg fi
7793 1.1 joerg if test lib,dlpreopen = "$linkmode,$pass"; then
7794 1.1 joerg # Collect and forward deplibs of preopened libtool libs
7795 1.1 joerg for lib in $dlprefiles; do
7796 1.1 joerg # Ignore non-libtool-libs
7797 1.1 joerg dependency_libs=
7798 1.1 joerg func_resolve_sysroot "$lib"
7799 1.1 joerg case $lib in
7800 1.1 joerg *.la) func_source "$func_resolve_sysroot_result" ;;
7801 1.1 joerg esac
7802 1.1 joerg
7803 1.1 joerg # Collect preopened libtool deplibs, except any this library
7804 1.1 joerg # has declared as weak libs
7805 1.1 joerg for deplib in $dependency_libs; do
7806 1.1 joerg func_basename "$deplib"
7807 1.1 joerg deplib_base=$func_basename_result
7808 1.1 joerg case " $weak_libs " in
7809 1.1 joerg *" $deplib_base "*) ;;
7810 1.1 joerg *) func_append deplibs " $deplib" ;;
7811 1.1 joerg esac
7812 1.1 joerg done
7813 1.1 joerg done
7814 1.1 joerg libs=$dlprefiles
7815 1.1 joerg fi
7816 1.1 joerg if test dlopen = "$pass"; then
7817 1.1 joerg # Collect dlpreopened libraries
7818 1.1 joerg save_deplibs=$deplibs
7819 1.1 joerg deplibs=
7820 1.1 joerg fi
7821 1.1 joerg
7822 1.1 joerg for deplib in $libs; do
7823 1.1 joerg lib=
7824 1.1 joerg found=false
7825 1.1 joerg case $deplib in
7826 1.1 joerg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7827 1.1 joerg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7828 1.1 joerg if test prog,link = "$linkmode,$pass"; then
7829 1.1 joerg compile_deplibs="$deplib $compile_deplibs"
7830 1.1 joerg finalize_deplibs="$deplib $finalize_deplibs"
7831 1.1 joerg else
7832 1.1 joerg func_append compiler_flags " $deplib"
7833 1.1 joerg if test lib = "$linkmode"; then
7834 1.1 joerg case "$new_inherited_linker_flags " in
7835 1.1 joerg *" $deplib "*) ;;
7836 1.1 joerg * ) func_append new_inherited_linker_flags " $deplib" ;;
7837 1.1 joerg esac
7838 1.1 joerg fi
7839 1.1 joerg fi
7840 1.1 joerg continue
7841 1.1 joerg ;;
7842 1.1 joerg -l*)
7843 1.1 joerg if test lib != "$linkmode" && test prog != "$linkmode"; then
7844 1.1 joerg func_warning "'-l' is ignored for archives/objects"
7845 1.1 joerg continue
7846 1.1 joerg fi
7847 1.1 joerg func_stripname '-l' '' "$deplib"
7848 1.1 joerg name=$func_stripname_result
7849 1.1 joerg if test lib = "$linkmode"; then
7850 1.1 joerg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
7851 1.1 joerg else
7852 1.1 joerg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
7853 1.1 joerg fi
7854 1.1 joerg for searchdir in $searchdirs; do
7855 1.1 joerg for search_ext in .la $std_shrext .so .a; do
7856 1.1 joerg # Search the libtool library
7857 1.1 joerg lib=$searchdir/lib$name$search_ext
7858 1.1 joerg if test -f "$lib"; then
7859 1.1 joerg if test .la = "$search_ext"; then
7860 1.1 joerg found=:
7861 1.1 joerg else
7862 1.1 joerg found=false
7863 1.1 joerg fi
7864 1.1 joerg break 2
7865 1.1 joerg fi
7866 1.1 joerg done
7867 1.1 joerg done
7868 1.1 joerg if $found; then
7869 1.1 joerg # deplib is a libtool library
7870 1.1 joerg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
7871 1.1 joerg # We need to do some special things here, and not later.
7872 1.1 joerg if test yes = "$allow_libtool_libs_with_static_runtimes"; then
7873 1.1 joerg case " $predeps $postdeps " in
7874 1.1 joerg *" $deplib "*)
7875 1.1 joerg if func_lalib_p "$lib"; then
7876 1.1 joerg library_names=
7877 1.1 joerg old_library=
7878 1.1 joerg func_source "$lib"
7879 1.1 joerg for l in $old_library $library_names; do
7880 1.1 joerg ll=$l
7881 1.1 joerg done
7882 1.1 joerg if test "X$ll" = "X$old_library"; then # only static version available
7883 1.1 joerg found=false
7884 1.1 joerg func_dirname "$lib" "" "."
7885 1.1 joerg ladir=$func_dirname_result
7886 1.1 joerg lib=$ladir/$old_library
7887 1.1 joerg if test prog,link = "$linkmode,$pass"; then
7888 1.1 joerg compile_deplibs="$deplib $compile_deplibs"
7889 1.1 joerg finalize_deplibs="$deplib $finalize_deplibs"
7890 1.1 joerg else
7891 1.1 joerg deplibs="$deplib $deplibs"
7892 1.1 joerg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
7893 1.1 joerg fi
7894 1.1 joerg continue
7895 1.1 joerg fi
7896 1.1 joerg fi
7897 1.1 joerg ;;
7898 1.1 joerg *) ;;
7899 1.1 joerg esac
7900 1.1 joerg fi
7901 1.1 joerg else
7902 1.1 joerg # deplib doesn't seem to be a libtool library
7903 1.1 joerg if test prog,link = "$linkmode,$pass"; then
7904 1.1 joerg compile_deplibs="$deplib $compile_deplibs"
7905 1.1 joerg finalize_deplibs="$deplib $finalize_deplibs"
7906 1.1 joerg else
7907 1.1 joerg deplibs="$deplib $deplibs"
7908 1.1 joerg test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
7909 1.1 joerg fi
7910 1.1 joerg continue
7911 1.1 joerg fi
7912 1.1 joerg ;; # -l
7913 1.1 joerg *.ltframework)
7914 1.1 joerg if test prog,link = "$linkmode,$pass"; then
7915 1.1 joerg compile_deplibs="$deplib $compile_deplibs"
7916 1.1 joerg finalize_deplibs="$deplib $finalize_deplibs"
7917 1.1 joerg else
7918 1.1 joerg deplibs="$deplib $deplibs"
7919 1.1 joerg if test lib = "$linkmode"; then
7920 1.1 joerg case "$new_inherited_linker_flags " in
7921 1.1 joerg *" $deplib "*) ;;
7922 1.1 joerg * ) func_append new_inherited_linker_flags " $deplib" ;;
7923 1.1 joerg esac
7924 1.1 joerg fi
7925 1.1 joerg fi
7926 1.1 joerg continue
7927 1.1 joerg ;;
7928 1.1 joerg -L*)
7929 1.1 joerg case $linkmode in
7930 1.1 joerg lib)
7931 1.1 joerg deplibs="$deplib $deplibs"
7932 1.1 joerg test conv = "$pass" && continue
7933 1.1 joerg newdependency_libs="$deplib $newdependency_libs"
7934 1.1 joerg func_stripname '-L' '' "$deplib"
7935 1.1 joerg func_resolve_sysroot "$func_stripname_result"
7936 1.1 joerg func_append newlib_search_path " $func_resolve_sysroot_result"
7937 1.1 joerg ;;
7938 1.1 joerg prog)
7939 1.1 joerg if test conv = "$pass"; then
7940 1.1 joerg deplibs="$deplib $deplibs"
7941 1.1 joerg continue
7942 1.1 joerg fi
7943 1.1 joerg if test scan = "$pass"; then
7944 1.1 joerg deplibs="$deplib $deplibs"
7945 1.1 joerg else
7946 1.1 joerg compile_deplibs="$deplib $compile_deplibs"
7947 1.1 joerg finalize_deplibs="$deplib $finalize_deplibs"
7948 1.1 joerg fi
7949 1.1 joerg func_stripname '-L' '' "$deplib"
7950 1.1 joerg func_resolve_sysroot "$func_stripname_result"
7951 1.1 joerg func_append newlib_search_path " $func_resolve_sysroot_result"
7952 1.1 joerg ;;
7953 1.1 joerg *)
7954 1.1 joerg func_warning "'-L' is ignored for archives/objects"
7955 1.1 joerg ;;
7956 1.1 joerg esac # linkmode
7957 1.1 joerg continue
7958 1.1 joerg ;; # -L
7959 1.1 joerg -R*)
7960 1.1 joerg if test link = "$pass"; then
7961 1.1 joerg func_stripname '-R' '' "$deplib"
7962 1.1 joerg func_resolve_sysroot "$func_stripname_result"
7963 1.1 joerg dir=$func_resolve_sysroot_result
7964 1.1 joerg # Make sure the xrpath contains only unique directories.
7965 1.1 joerg case "$xrpath " in
7966 1.1 joerg *" $dir "*) ;;
7967 1.1 joerg *) func_append xrpath " $dir" ;;
7968 1.1 joerg esac
7969 1.1 joerg fi
7970 1.1 joerg deplibs="$deplib $deplibs"
7971 1.1 joerg continue
7972 1.1 joerg ;;
7973 1.1 joerg *.la)
7974 1.1 joerg func_resolve_sysroot "$deplib"
7975 1.1 joerg lib=$func_resolve_sysroot_result
7976 1.1 joerg ;;
7977 1.1 joerg *.$libext)
7978 1.1 joerg if test conv = "$pass"; then
7979 1.1 joerg deplibs="$deplib $deplibs"
7980 1.1 joerg continue
7981 1.1 joerg fi
7982 1.1 joerg case $linkmode in
7983 1.1 joerg lib)
7984 1.1 joerg # Linking convenience modules into shared libraries is allowed,
7985 1.1 joerg # but linking other static libraries is non-portable.
7986 1.1 joerg case " $dlpreconveniencelibs " in
7987 1.1 joerg *" $deplib "*) ;;
7988 1.1 joerg *)
7989 1.1 joerg valid_a_lib=false
7990 1.1 joerg case $deplibs_check_method in
7991 1.1 joerg match_pattern*)
7992 1.1 joerg set dummy $deplibs_check_method; shift
7993 1.1 joerg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7994 1.1 joerg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
7995 1.1 joerg | $EGREP "$match_pattern_regex" > /dev/null; then
7996 1.1 joerg valid_a_lib=:
7997 1.1 joerg fi
7998 1.1 joerg ;;
7999 1.1 joerg pass_all)
8000 1.1 joerg valid_a_lib=:
8001 1.1 joerg ;;
8002 1.1 joerg esac
8003 1.1 joerg if $valid_a_lib; then
8004 1.1 joerg echo
8005 1.1 joerg $ECHO "*** Warning: Linking the shared library $output against the"
8006 1.1 joerg $ECHO "*** static library $deplib is not portable!"
8007 1.1 joerg deplibs="$deplib $deplibs"
8008 1.1 joerg else
8009 1.1 joerg echo
8010 1.1 joerg $ECHO "*** Warning: Trying to link with static lib archive $deplib."
8011 1.1 joerg echo "*** I have the capability to make that library automatically link in when"
8012 1.1 joerg echo "*** you link to this library. But I can only do this if you have a"
8013 1.1 joerg echo "*** shared version of the library, which you do not appear to have"
8014 1.1 joerg echo "*** because the file extensions .$libext of this argument makes me believe"
8015 1.1 joerg echo "*** that it is just a static archive that I should not use here."
8016 1.1 joerg fi
8017 1.1 joerg ;;
8018 1.1 joerg esac
8019 1.1 joerg continue
8020 1.1 joerg ;;
8021 1.1 joerg prog)
8022 1.1 joerg if test link != "$pass"; then
8023 1.1 joerg deplibs="$deplib $deplibs"
8024 1.1 joerg else
8025 1.1 joerg compile_deplibs="$deplib $compile_deplibs"
8026 1.1 joerg finalize_deplibs="$deplib $finalize_deplibs"
8027 1.1 joerg fi
8028 1.1 joerg continue
8029 1.1 joerg ;;
8030 1.1 joerg esac # linkmode
8031 1.1 joerg ;; # *.$libext
8032 1.1 joerg *.lo | *.$objext)
8033 1.1 joerg if test conv = "$pass"; then
8034 1.1 joerg deplibs="$deplib $deplibs"
8035 1.1 joerg elif test prog = "$linkmode"; then
8036 1.1 joerg if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
8037 1.1 joerg # If there is no dlopen support or we're linking statically,
8038 1.1 joerg # we need to preload.
8039 1.1 joerg func_append newdlprefiles " $deplib"
8040 1.1 joerg compile_deplibs="$deplib $compile_deplibs"
8041 1.1 joerg finalize_deplibs="$deplib $finalize_deplibs"
8042 1.1 joerg else
8043 1.1 joerg func_append newdlfiles " $deplib"
8044 1.1 joerg fi
8045 1.1 joerg fi
8046 1.1 joerg continue
8047 1.1 joerg ;;
8048 1.1 joerg %DEPLIBS%)
8049 1.1 joerg alldeplibs=:
8050 1.1 joerg continue
8051 1.1 joerg ;;
8052 1.1 joerg esac # case $deplib
8053 1.1 joerg
8054 1.1 joerg $found || test -f "$lib" \
8055 1.1 joerg || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
8056 1.1 joerg
8057 1.1 joerg # Check to see that this really is a libtool archive.
8058 1.1 joerg func_lalib_unsafe_p "$lib" \
8059 1.1 joerg || func_fatal_error "'$lib' is not a valid libtool archive"
8060 1.1 joerg
8061 1.1 joerg func_dirname "$lib" "" "."
8062 1.1 joerg ladir=$func_dirname_result
8063 1.1 joerg
8064 1.1 joerg dlname=
8065 1.1 joerg dlopen=
8066 1.1 joerg dlpreopen=
8067 1.1 joerg libdir=
8068 1.1 joerg library_names=
8069 1.1 joerg old_library=
8070 1.1 joerg inherited_linker_flags=
8071 1.1 joerg # If the library was installed with an old release of libtool,
8072 1.1 joerg # it will not redefine variables installed, or shouldnotlink
8073 1.1 joerg installed=yes
8074 1.1 joerg shouldnotlink=no
8075 1.1 joerg avoidtemprpath=
8076 1.1 joerg
8077 1.1 joerg
8078 1.1 joerg # Read the .la file
8079 1.1 joerg func_source "$lib"
8080 1.1 joerg
8081 1.1 joerg # Convert "-framework foo" to "foo.ltframework"
8082 1.1 joerg if test -n "$inherited_linker_flags"; then
8083 1.1 joerg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
8084 1.1 joerg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
8085 1.1 joerg case " $new_inherited_linker_flags " in
8086 1.1 joerg *" $tmp_inherited_linker_flag "*) ;;
8087 1.1 joerg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
8088 1.1 joerg esac
8089 1.1 joerg done
8090 1.1 joerg fi
8091 1.1 joerg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8092 1.1 joerg if test lib,link = "$linkmode,$pass" ||
8093 1.1 joerg test prog,scan = "$linkmode,$pass" ||
8094 1.1 joerg { test prog != "$linkmode" && test lib != "$linkmode"; }; then
8095 1.1 joerg test -n "$dlopen" && func_append dlfiles " $dlopen"
8096 1.1 joerg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
8097 1.1 joerg fi
8098 1.1 joerg
8099 1.1 joerg if test conv = "$pass"; then
8100 1.1 joerg # Only check for convenience libraries
8101 1.1 joerg deplibs="$lib $deplibs"
8102 1.1 joerg if test -z "$libdir"; then
8103 1.1 joerg if test -z "$old_library"; then
8104 1.1 joerg func_fatal_error "cannot find name of link library for '$lib'"
8105 1.1 joerg fi
8106 1.1 joerg # It is a libtool convenience library, so add in its objects.
8107 1.1 joerg func_append convenience " $ladir/$objdir/$old_library"
8108 1.1 joerg func_append old_convenience " $ladir/$objdir/$old_library"
8109 1.1 joerg elif test prog != "$linkmode" && test lib != "$linkmode"; then
8110 1.1 joerg func_fatal_error "'$lib' is not a convenience library"
8111 1.1 joerg fi
8112 1.1 joerg tmp_libs=
8113 1.1 joerg for deplib in $dependency_libs; do
8114 1.1 joerg deplibs="$deplib $deplibs"
8115 1.1 joerg if $opt_preserve_dup_deps; then
8116 1.1 joerg case "$tmp_libs " in
8117 1.1 joerg *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8118 1.1 joerg esac
8119 1.1 joerg fi
8120 1.1 joerg func_append tmp_libs " $deplib"
8121 1.1 joerg done
8122 1.1 joerg continue
8123 1.1 joerg fi # $pass = conv
8124 1.1 joerg
8125 1.1 joerg
8126 1.1 joerg # Get the name of the library we link against.
8127 1.1 joerg linklib=
8128 1.1 joerg if test -n "$old_library" &&
8129 1.1 joerg { test yes = "$prefer_static_libs" ||
8130 1.1 joerg test built,no = "$prefer_static_libs,$installed"; }; then
8131 1.1 joerg linklib=$old_library
8132 1.1 joerg else
8133 1.1 joerg for l in $old_library $library_names; do
8134 1.1 joerg linklib=$l
8135 1.1 joerg done
8136 1.1 joerg fi
8137 1.1 joerg if test -z "$linklib"; then
8138 1.1 joerg func_fatal_error "cannot find name of link library for '$lib'"
8139 1.1 joerg fi
8140 1.1 joerg
8141 1.1 joerg # This library was specified with -dlopen.
8142 1.1 joerg if test dlopen = "$pass"; then
8143 1.1 joerg test -z "$libdir" \
8144 1.1 joerg && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
8145 1.1 joerg if test -z "$dlname" ||
8146 1.1 joerg test yes != "$dlopen_support" ||
8147 1.1 joerg test no = "$build_libtool_libs"
8148 1.1 joerg then
8149 1.1 joerg # If there is no dlname, no dlopen support or we're linking
8150 1.1 joerg # statically, we need to preload. We also need to preload any
8151 1.1 joerg # dependent libraries so libltdl's deplib preloader doesn't
8152 1.1 joerg # bomb out in the load deplibs phase.
8153 1.1 joerg func_append dlprefiles " $lib $dependency_libs"
8154 1.1 joerg else
8155 1.1 joerg func_append newdlfiles " $lib"
8156 1.1 joerg fi
8157 1.1 joerg continue
8158 1.1 joerg fi # $pass = dlopen
8159 1.1 joerg
8160 1.1 joerg # We need an absolute path.
8161 1.1 joerg case $ladir in
8162 1.1 joerg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
8163 1.1 joerg *)
8164 1.1 joerg abs_ladir=`cd "$ladir" && pwd`
8165 1.1 joerg if test -z "$abs_ladir"; then
8166 1.1 joerg func_warning "cannot determine absolute directory name of '$ladir'"
8167 1.1 joerg func_warning "passing it literally to the linker, although it might fail"
8168 1.1 joerg abs_ladir=$ladir
8169 1.1 joerg fi
8170 1.1 joerg ;;
8171 1.1 joerg esac
8172 1.1 joerg func_basename "$lib"
8173 1.1 joerg laname=$func_basename_result
8174 1.1 joerg
8175 1.1 joerg # Find the relevant object directory and library name.
8176 1.1 joerg if test yes = "$installed"; then
8177 1.1 joerg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
8178 1.1 joerg func_warning "library '$lib' was moved."
8179 1.1 joerg dir=$ladir
8180 1.1 joerg absdir=$abs_ladir
8181 1.1 joerg libdir=$abs_ladir
8182 1.1 joerg else
8183 1.1 joerg dir=$lt_sysroot$libdir
8184 1.1 joerg absdir=$lt_sysroot$libdir
8185 1.1 joerg fi
8186 1.1 joerg test yes = "$hardcode_automatic" && avoidtemprpath=yes
8187 1.1 joerg else
8188 1.1 joerg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
8189 1.1 joerg dir=$ladir
8190 1.1 joerg absdir=$abs_ladir
8191 1.1 joerg # Remove this search path later
8192 1.1 joerg func_append notinst_path " $abs_ladir"
8193 1.1 joerg else
8194 1.1 joerg dir=$ladir/$objdir
8195 1.1 joerg absdir=$abs_ladir/$objdir
8196 1.1 joerg # Remove this search path later
8197 1.1 joerg func_append notinst_path " $abs_ladir"
8198 1.1 joerg fi
8199 1.1 joerg fi # $installed = yes
8200 1.1 joerg func_stripname 'lib' '.la' "$laname"
8201 1.1 joerg name=$func_stripname_result
8202 1.1 joerg
8203 1.1 joerg # This library was specified with -dlpreopen.
8204 1.1 joerg if test dlpreopen = "$pass"; then
8205 1.1 joerg if test -z "$libdir" && test prog = "$linkmode"; then
8206 1.1 joerg func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
8207 1.1 joerg fi
8208 1.1 joerg case $host in
8209 1.1 joerg # special handling for platforms with PE-DLLs.
8210 1.1 joerg *cygwin* | *mingw* | *cegcc* )
8211 1.1 joerg # Linker will automatically link against shared library if both
8212 1.1 joerg # static and shared are present. Therefore, ensure we extract
8213 1.1 joerg # symbols from the import library if a shared library is present
8214 1.1 joerg # (otherwise, the dlopen module name will be incorrect). We do
8215 1.1 joerg # this by putting the import library name into $newdlprefiles.
8216 1.1 joerg # We recover the dlopen module name by 'saving' the la file
8217 1.1 joerg # name in a special purpose variable, and (later) extracting the
8218 1.1 joerg # dlname from the la file.
8219 1.1 joerg if test -n "$dlname"; then
8220 1.1 joerg func_tr_sh "$dir/$linklib"
8221 1.1 joerg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
8222 1.1 joerg func_append newdlprefiles " $dir/$linklib"
8223 1.1 joerg else
8224 1.1 joerg func_append newdlprefiles " $dir/$old_library"
8225 1.1 joerg # Keep a list of preopened convenience libraries to check
8226 1.1 joerg # that they are being used correctly in the link pass.
8227 1.1 joerg test -z "$libdir" && \
8228 1.1 joerg func_append dlpreconveniencelibs " $dir/$old_library"
8229 1.1 joerg fi
8230 1.1 joerg ;;
8231 1.1 joerg * )
8232 1.1 joerg # Prefer using a static library (so that no silly _DYNAMIC symbols
8233 1.1 joerg # are required to link).
8234 1.1 joerg if test -n "$old_library"; then
8235 1.1 joerg func_append newdlprefiles " $dir/$old_library"
8236 1.1 joerg # Keep a list of preopened convenience libraries to check
8237 1.1 joerg # that they are being used correctly in the link pass.
8238 1.1 joerg test -z "$libdir" && \
8239 1.1 joerg func_append dlpreconveniencelibs " $dir/$old_library"
8240 1.1 joerg # Otherwise, use the dlname, so that lt_dlopen finds it.
8241 1.1 joerg elif test -n "$dlname"; then
8242 1.1 joerg func_append newdlprefiles " $dir/$dlname"
8243 1.1 joerg else
8244 1.1 joerg func_append newdlprefiles " $dir/$linklib"
8245 1.1 joerg fi
8246 1.1 joerg ;;
8247 1.1 joerg esac
8248 1.1 joerg fi # $pass = dlpreopen
8249 1.1 joerg
8250 1.1 joerg if test -z "$libdir"; then
8251 1.1 joerg # Link the convenience library
8252 1.1 joerg if test lib = "$linkmode"; then
8253 1.1 joerg deplibs="$dir/$old_library $deplibs"
8254 1.1 joerg elif test prog,link = "$linkmode,$pass"; then
8255 1.1 joerg compile_deplibs="$dir/$old_library $compile_deplibs"
8256 1.1 joerg finalize_deplibs="$dir/$old_library $finalize_deplibs"
8257 1.1 joerg else
8258 1.1 joerg deplibs="$lib $deplibs" # used for prog,scan pass
8259 1.1 joerg fi
8260 1.1 joerg continue
8261 1.1 joerg fi
8262 1.1 joerg
8263 1.1 joerg
8264 1.1 joerg if test prog = "$linkmode" && test link != "$pass"; then
8265 1.1 joerg func_append newlib_search_path " $ladir"
8266 1.1 joerg deplibs="$lib $deplibs"
8267 1.1 joerg
8268 1.1 joerg linkalldeplibs=false
8269 1.1 joerg if test no != "$link_all_deplibs" || test -z "$library_names" ||
8270 1.1 joerg test no = "$build_libtool_libs"; then
8271 1.1 joerg linkalldeplibs=:
8272 1.1 joerg fi
8273 1.1 joerg
8274 1.1 joerg tmp_libs=
8275 1.1 joerg for deplib in $dependency_libs; do
8276 1.1 joerg case $deplib in
8277 1.1 joerg -L*) func_stripname '-L' '' "$deplib"
8278 1.1 joerg func_resolve_sysroot "$func_stripname_result"
8279 1.1 joerg func_append newlib_search_path " $func_resolve_sysroot_result"
8280 1.1 joerg ;;
8281 1.1 joerg esac
8282 1.1 joerg # Need to link against all dependency_libs?
8283 1.1 joerg if $linkalldeplibs; then
8284 1.1 joerg deplibs="$deplib $deplibs"
8285 1.1 joerg else
8286 1.1 joerg # Need to hardcode shared library paths
8287 1.1 joerg # or/and link against static libraries
8288 1.1 joerg newdependency_libs="$deplib $newdependency_libs"
8289 1.1 joerg fi
8290 1.1 joerg if $opt_preserve_dup_deps; then
8291 1.1 joerg case "$tmp_libs " in
8292 1.1 joerg *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8293 1.1 joerg esac
8294 1.1 joerg fi
8295 1.1 joerg func_append tmp_libs " $deplib"
8296 1.1 joerg done # for deplib
8297 1.1 joerg continue
8298 1.1 joerg fi # $linkmode = prog...
8299 1.1 joerg
8300 1.1 joerg if test prog,link = "$linkmode,$pass"; then
8301 1.1 joerg if test -n "$library_names" &&
8302 1.1 joerg { { test no = "$prefer_static_libs" ||
8303 1.1 joerg test built,yes = "$prefer_static_libs,$installed"; } ||
8304 1.1 joerg test -z "$old_library"; }; then
8305 1.1 joerg # We need to hardcode the library path
8306 1.1 joerg if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
8307 1.1 joerg # Make sure the rpath contains only unique directories.
8308 1.1 joerg case $temp_rpath: in
8309 1.1 joerg *"$absdir:"*) ;;
8310 1.1 joerg *) func_append temp_rpath "$absdir:" ;;
8311 1.1 joerg esac
8312 1.1 joerg fi
8313 1.1 joerg
8314 1.1 joerg # Hardcode the library path.
8315 1.1 joerg # Skip directories that are in the system default run-time
8316 1.1 joerg # search path.
8317 1.1 joerg case " $sys_lib_dlsearch_path " in
8318 1.1 joerg *" $absdir "*) ;;
8319 1.1 joerg *)
8320 1.1 joerg case "$compile_rpath " in
8321 1.1 joerg *" $absdir "*) ;;
8322 1.1 joerg *) func_append compile_rpath " $absdir" ;;
8323 1.1 joerg esac
8324 1.1 joerg ;;
8325 1.1 joerg esac
8326 1.1 joerg case " $sys_lib_dlsearch_path " in
8327 1.1 joerg *" $libdir "*) ;;
8328 1.1 joerg *)
8329 1.1 joerg case "$finalize_rpath " in
8330 1.1 joerg *" $libdir "*) ;;
8331 1.1 joerg *) func_append finalize_rpath " $libdir" ;;
8332 1.1 joerg esac
8333 1.1 joerg ;;
8334 1.1 joerg esac
8335 1.1 joerg fi # $linkmode,$pass = prog,link...
8336 1.1 joerg
8337 1.1 joerg if $alldeplibs &&
8338 1.1 joerg { test pass_all = "$deplibs_check_method" ||
8339 1.1 joerg { test yes = "$build_libtool_libs" &&
8340 1.1 joerg test -n "$library_names"; }; }; then
8341 1.1 joerg # We only need to search for static libraries
8342 1.1 joerg continue
8343 1.1 joerg fi
8344 1.1 joerg fi
8345 1.1 joerg
8346 1.1 joerg link_static=no # Whether the deplib will be linked statically
8347 1.1 joerg use_static_libs=$prefer_static_libs
8348 1.1 joerg if test built = "$use_static_libs" && test yes = "$installed"; then
8349 1.1 joerg use_static_libs=no
8350 1.1 joerg fi
8351 1.1 joerg if test -n "$library_names" &&
8352 1.1 joerg { test no = "$use_static_libs" || test -z "$old_library"; }; then
8353 1.1 joerg case $host in
8354 1.1 joerg *cygwin* | *mingw* | *cegcc* | *os2*)
8355 1.1 joerg # No point in relinking DLLs because paths are not encoded
8356 1.1 joerg func_append notinst_deplibs " $lib"
8357 1.1 joerg need_relink=no
8358 1.1 joerg ;;
8359 1.1 joerg *)
8360 1.1 joerg if test no = "$installed"; then
8361 1.1 joerg func_append notinst_deplibs " $lib"
8362 1.1 joerg need_relink=yes
8363 1.1 joerg fi
8364 1.1 joerg ;;
8365 1.1 joerg esac
8366 1.1 joerg # This is a shared library
8367 1.1 joerg
8368 1.1 joerg # Warn about portability, can't link against -module's on some
8369 1.1 joerg # systems (darwin). Don't bleat about dlopened modules though!
8370 1.1 joerg dlopenmodule=
8371 1.1 joerg for dlpremoduletest in $dlprefiles; do
8372 1.1 joerg if test "X$dlpremoduletest" = "X$lib"; then
8373 1.1 joerg dlopenmodule=$dlpremoduletest
8374 1.1 joerg break
8375 1.1 joerg fi
8376 1.1 joerg done
8377 1.1 joerg if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
8378 1.1 joerg echo
8379 1.1 joerg if test prog = "$linkmode"; then
8380 1.1 joerg $ECHO "*** Warning: Linking the executable $output against the loadable module"
8381 1.1 joerg else
8382 1.1 joerg $ECHO "*** Warning: Linking the shared library $output against the loadable module"
8383 1.1 joerg fi
8384 1.1 joerg $ECHO "*** $linklib is not portable!"
8385 1.1 joerg fi
8386 1.1 joerg if test lib = "$linkmode" &&
8387 1.1 joerg test yes = "$hardcode_into_libs"; then
8388 1.1 joerg # Hardcode the library path.
8389 1.1 joerg # Skip directories that are in the system default run-time
8390 1.1 joerg # search path.
8391 1.1 joerg case " $sys_lib_dlsearch_path " in
8392 1.1 joerg *" $absdir "*) ;;
8393 1.1 joerg *)
8394 1.1 joerg case "$compile_rpath " in
8395 1.1 joerg *" $absdir "*) ;;
8396 1.1 joerg *) func_append compile_rpath " $absdir" ;;
8397 1.1 joerg esac
8398 1.1 joerg ;;
8399 1.1 joerg esac
8400 1.1 joerg case " $sys_lib_dlsearch_path " in
8401 1.1 joerg *" $libdir "*) ;;
8402 1.1 joerg *)
8403 1.1 joerg case "$finalize_rpath " in
8404 1.1 joerg *" $libdir "*) ;;
8405 1.1 joerg *) func_append finalize_rpath " $libdir" ;;
8406 1.1 joerg esac
8407 1.1 joerg ;;
8408 1.1 joerg esac
8409 1.1 joerg fi
8410 1.1 joerg
8411 1.1 joerg if test -n "$old_archive_from_expsyms_cmds"; then
8412 1.1 joerg # figure out the soname
8413 1.1 joerg set dummy $library_names
8414 1.1 joerg shift
8415 1.1 joerg realname=$1
8416 1.1 joerg shift
8417 1.1 joerg libname=`eval "\\$ECHO \"$libname_spec\""`
8418 1.1 joerg # use dlname if we got it. it's perfectly good, no?
8419 1.1 joerg if test -n "$dlname"; then
8420 1.1 joerg soname=$dlname
8421 1.1 joerg elif test -n "$soname_spec"; then
8422 1.1 joerg # bleh windows
8423 1.1 joerg case $host in
8424 1.1 joerg *cygwin* | mingw* | *cegcc* | *os2*)
8425 1.1 joerg func_arith $current - $age
8426 1.1 joerg major=$func_arith_result
8427 1.1 joerg versuffix=-$major
8428 1.1 joerg ;;
8429 1.1 joerg esac
8430 1.1 joerg eval soname=\"$soname_spec\"
8431 1.1 joerg else
8432 1.1 joerg soname=$realname
8433 1.1 joerg fi
8434 1.1 joerg
8435 1.1 joerg # Make a new name for the extract_expsyms_cmds to use
8436 1.1 joerg soroot=$soname
8437 1.1 joerg func_basename "$soroot"
8438 1.1 joerg soname=$func_basename_result
8439 1.1 joerg func_stripname 'lib' '.dll' "$soname"
8440 1.1 joerg newlib=libimp-$func_stripname_result.a
8441 1.1 joerg
8442 1.1 joerg # If the library has no export list, then create one now
8443 1.1 joerg if test -f "$output_objdir/$soname-def"; then :
8444 1.1 joerg else
8445 1.1 joerg func_verbose "extracting exported symbol list from '$soname'"
8446 1.1 joerg func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
8447 1.1 joerg fi
8448 1.1 joerg
8449 1.1 joerg # Create $newlib
8450 1.1 joerg if test -f "$output_objdir/$newlib"; then :; else
8451 1.1 joerg func_verbose "generating import library for '$soname'"
8452 1.1 joerg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
8453 1.1 joerg fi
8454 1.1 joerg # make sure the library variables are pointing to the new library
8455 1.1 joerg dir=$output_objdir
8456 1.1 joerg linklib=$newlib
8457 1.1 joerg fi # test -n "$old_archive_from_expsyms_cmds"
8458 1.1 joerg
8459 1.1 joerg if test prog = "$linkmode" || test relink != "$opt_mode"; then
8460 1.1 joerg add_shlibpath=
8461 1.1 joerg add_dir=
8462 1.1 joerg add=
8463 1.1 joerg lib_linked=yes
8464 1.1 joerg case $hardcode_action in
8465 1.1 joerg immediate | unsupported)
8466 1.1 joerg if test no = "$hardcode_direct"; then
8467 1.1 joerg add=$dir/$linklib
8468 1.1 joerg case $host in
8469 1.1 joerg *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
8470 1.1 joerg *-*-sysv4*uw2*) add_dir=-L$dir ;;
8471 1.1 joerg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
8472 1.1 joerg *-*-unixware7*) add_dir=-L$dir ;;
8473 1.1 joerg *-*-darwin* )
8474 1.1 joerg # if the lib is a (non-dlopened) module then we cannot
8475 1.1 joerg # link against it, someone is ignoring the earlier warnings
8476 1.1 joerg if /usr/bin/file -L $add 2> /dev/null |
8477 1.1 joerg $GREP ": [^:]* bundle" >/dev/null; then
8478 1.1 joerg if test "X$dlopenmodule" != "X$lib"; then
8479 1.1 joerg $ECHO "*** Warning: lib $linklib is a module, not a shared library"
8480 1.1 joerg if test -z "$old_library"; then
8481 1.1 joerg echo
8482 1.1 joerg echo "*** And there doesn't seem to be a static archive available"
8483 1.1 joerg echo "*** The link will probably fail, sorry"
8484 1.1 joerg else
8485 1.1 joerg add=$dir/$old_library
8486 1.1 joerg fi
8487 1.1 joerg elif test -n "$old_library"; then
8488 1.1 joerg add=$dir/$old_library
8489 1.1 joerg fi
8490 1.1 joerg fi
8491 1.1 joerg esac
8492 1.1 joerg elif test no = "$hardcode_minus_L"; then
8493 1.1 joerg case $host in
8494 1.1 joerg *-*-sunos*) add_shlibpath=$dir ;;
8495 1.1 joerg esac
8496 1.1 joerg add_dir=-L$dir
8497 1.1 joerg add=-l$name
8498 1.1 joerg elif test no = "$hardcode_shlibpath_var"; then
8499 1.1 joerg add_shlibpath=$dir
8500 1.1 joerg add=-l$name
8501 1.1 joerg else
8502 1.1 joerg lib_linked=no
8503 1.1 joerg fi
8504 1.1 joerg ;;
8505 1.1 joerg relink)
8506 1.1 joerg if test yes = "$hardcode_direct" &&
8507 1.1 joerg test no = "$hardcode_direct_absolute"; then
8508 1.1 joerg add=$dir/$linklib
8509 1.1 joerg elif test yes = "$hardcode_minus_L"; then
8510 1.1 joerg add_dir=-L$absdir
8511 1.1 joerg # Try looking first in the location we're being installed to.
8512 1.1 joerg if test -n "$inst_prefix_dir"; then
8513 1.1 joerg case $libdir in
8514 1.1 joerg [\\/]*)
8515 1.1 joerg func_append add_dir " -L$inst_prefix_dir$libdir"
8516 1.1 joerg ;;
8517 1.1 joerg esac
8518 1.1 joerg fi
8519 1.1 joerg add=-l$name
8520 1.1 joerg elif test yes = "$hardcode_shlibpath_var"; then
8521 1.1 joerg add_shlibpath=$dir
8522 1.1 joerg add=-l$name
8523 1.1 joerg else
8524 1.1 joerg lib_linked=no
8525 1.1 joerg fi
8526 1.1 joerg ;;
8527 1.1 joerg *) lib_linked=no ;;
8528 1.1 joerg esac
8529 1.1 joerg
8530 1.1 joerg if test yes != "$lib_linked"; then
8531 1.1 joerg func_fatal_configuration "unsupported hardcode properties"
8532 1.1 joerg fi
8533 1.1 joerg
8534 1.1 joerg if test -n "$add_shlibpath"; then
8535 1.1 joerg case :$compile_shlibpath: in
8536 1.1 joerg *":$add_shlibpath:"*) ;;
8537 1.1 joerg *) func_append compile_shlibpath "$add_shlibpath:" ;;
8538 1.1 joerg esac
8539 1.1 joerg fi
8540 1.1 joerg if test prog = "$linkmode"; then
8541 1.1 joerg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
8542 1.1 joerg test -n "$add" && compile_deplibs="$add $compile_deplibs"
8543 1.1 joerg else
8544 1.1 joerg test -n "$add_dir" && deplibs="$add_dir $deplibs"
8545 1.1 joerg test -n "$add" && deplibs="$add $deplibs"
8546 1.1 joerg if test yes != "$hardcode_direct" &&
8547 1.1 joerg test yes != "$hardcode_minus_L" &&
8548 1.1 joerg test yes = "$hardcode_shlibpath_var"; then
8549 1.1 joerg case :$finalize_shlibpath: in
8550 1.1 joerg *":$libdir:"*) ;;
8551 1.1 joerg *) func_append finalize_shlibpath "$libdir:" ;;
8552 1.1 joerg esac
8553 1.1 joerg fi
8554 1.1 joerg fi
8555 1.1 joerg fi
8556 1.1 joerg
8557 1.1 joerg if test prog = "$linkmode" || test relink = "$opt_mode"; then
8558 1.1 joerg add_shlibpath=
8559 1.1 joerg add_dir=
8560 1.1 joerg add=
8561 1.1 joerg # Finalize command for both is simple: just hardcode it.
8562 1.1 joerg if test yes = "$hardcode_direct" &&
8563 1.1 joerg test no = "$hardcode_direct_absolute"; then
8564 1.1 joerg add=$libdir/$linklib
8565 1.1 joerg elif test yes = "$hardcode_minus_L"; then
8566 1.1 joerg add_dir=-L$libdir
8567 1.1 joerg add=-l$name
8568 1.1 joerg elif test yes = "$hardcode_shlibpath_var"; then
8569 1.1 joerg case :$finalize_shlibpath: in
8570 1.1 joerg *":$libdir:"*) ;;
8571 1.1 joerg *) func_append finalize_shlibpath "$libdir:" ;;
8572 1.1 joerg esac
8573 1.1 joerg add=-l$name
8574 1.1 joerg elif test yes = "$hardcode_automatic"; then
8575 1.1 joerg if test -n "$inst_prefix_dir" &&
8576 1.1 joerg test -f "$inst_prefix_dir$libdir/$linklib"; then
8577 1.1 joerg add=$inst_prefix_dir$libdir/$linklib
8578 1.1 joerg else
8579 1.1 joerg add=$libdir/$linklib
8580 1.1 joerg fi
8581 1.1 joerg else
8582 1.1 joerg # We cannot seem to hardcode it, guess we'll fake it.
8583 1.1 joerg add_dir=-L$libdir
8584 1.1 joerg # Try looking first in the location we're being installed to.
8585 1.1 joerg if test -n "$inst_prefix_dir"; then
8586 1.1 joerg case $libdir in
8587 1.1 joerg [\\/]*)
8588 1.1 joerg func_append add_dir " -L$inst_prefix_dir$libdir"
8589 1.1 joerg ;;
8590 1.1 joerg esac
8591 1.1 joerg fi
8592 1.1 joerg add=-l$name
8593 1.1 joerg fi
8594 1.1 joerg
8595 1.1 joerg if test prog = "$linkmode"; then
8596 1.1 joerg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
8597 1.1 joerg test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
8598 1.1 joerg else
8599 1.1 joerg test -n "$add_dir" && deplibs="$add_dir $deplibs"
8600 1.1 joerg test -n "$add" && deplibs="$add $deplibs"
8601 1.1 joerg fi
8602 1.1 joerg fi
8603 1.1 joerg elif test prog = "$linkmode"; then
8604 1.1 joerg # Here we assume that one of hardcode_direct or hardcode_minus_L
8605 1.1 joerg # is not unsupported. This is valid on all known static and
8606 1.1 joerg # shared platforms.
8607 1.1 joerg if test unsupported != "$hardcode_direct"; then
8608 1.1 joerg test -n "$old_library" && linklib=$old_library
8609 1.1 joerg compile_deplibs="$dir/$linklib $compile_deplibs"
8610 1.1 joerg finalize_deplibs="$dir/$linklib $finalize_deplibs"
8611 1.1 joerg else
8612 1.1 joerg compile_deplibs="-l$name -L$dir $compile_deplibs"
8613 1.1 joerg finalize_deplibs="-l$name -L$dir $finalize_deplibs"
8614 1.1 joerg fi
8615 1.1 joerg elif test yes = "$build_libtool_libs"; then
8616 1.1 joerg # Not a shared library
8617 1.1 joerg if test pass_all != "$deplibs_check_method"; then
8618 1.1 joerg # We're trying link a shared library against a static one
8619 1.1 joerg # but the system doesn't support it.
8620 1.1 joerg
8621 1.1 joerg # Just print a warning and add the library to dependency_libs so
8622 1.1 joerg # that the program can be linked against the static library.
8623 1.1 joerg echo
8624 1.1 joerg $ECHO "*** Warning: This system cannot link to static lib archive $lib."
8625 1.1 joerg echo "*** I have the capability to make that library automatically link in when"
8626 1.1 joerg echo "*** you link to this library. But I can only do this if you have a"
8627 1.1 joerg echo "*** shared version of the library, which you do not appear to have."
8628 1.1 joerg if test yes = "$module"; then
8629 1.1 joerg echo "*** But as you try to build a module library, libtool will still create "
8630 1.1 joerg echo "*** a static module, that should work as long as the dlopening application"
8631 1.1 joerg echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
8632 1.1 joerg if test -z "$global_symbol_pipe"; then
8633 1.1 joerg echo
8634 1.1 joerg echo "*** However, this would only work if libtool was able to extract symbol"
8635 1.1 joerg echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
8636 1.1 joerg echo "*** not find such a program. So, this module is probably useless."
8637 1.1 joerg echo "*** 'nm' from GNU binutils and a full rebuild may help."
8638 1.1 joerg fi
8639 1.1 joerg if test no = "$build_old_libs"; then
8640 1.1 joerg build_libtool_libs=module
8641 1.1 joerg build_old_libs=yes
8642 1.1 joerg else
8643 1.1 joerg build_libtool_libs=no
8644 1.1 joerg fi
8645 1.1 joerg fi
8646 1.1 joerg else
8647 1.1 joerg deplibs="$dir/$old_library $deplibs"
8648 1.1 joerg link_static=yes
8649 1.1 joerg fi
8650 1.1 joerg fi # link shared/static library?
8651 1.1 joerg
8652 1.1 joerg if test lib = "$linkmode"; then
8653 1.1 joerg if test -n "$dependency_libs" &&
8654 1.1 joerg { test yes != "$hardcode_into_libs" ||
8655 1.1 joerg test yes = "$build_old_libs" ||
8656 1.1 joerg test yes = "$link_static"; }; then
8657 1.1 joerg # Extract -R from dependency_libs
8658 1.1 joerg temp_deplibs=
8659 1.1 joerg for libdir in $dependency_libs; do
8660 1.1 joerg case $libdir in
8661 1.1 joerg -R*) func_stripname '-R' '' "$libdir"
8662 1.1 joerg temp_xrpath=$func_stripname_result
8663 1.1 joerg case " $xrpath " in
8664 1.1 joerg *" $temp_xrpath "*) ;;
8665 1.1 joerg *) func_append xrpath " $temp_xrpath";;
8666 1.1 joerg esac;;
8667 1.1 joerg *) func_append temp_deplibs " $libdir";;
8668 1.1 joerg esac
8669 1.1 joerg done
8670 1.1 joerg dependency_libs=$temp_deplibs
8671 1.1 joerg fi
8672 1.1 joerg
8673 1.1 joerg func_append newlib_search_path " $absdir"
8674 1.1 joerg # Link against this library
8675 1.1 joerg test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
8676 1.1 joerg # ... and its dependency_libs
8677 1.1 joerg tmp_libs=
8678 1.1 joerg for deplib in $dependency_libs; do
8679 1.1 joerg newdependency_libs="$deplib $newdependency_libs"
8680 1.1 joerg case $deplib in
8681 1.1 joerg -L*) func_stripname '-L' '' "$deplib"
8682 1.1 joerg func_resolve_sysroot "$func_stripname_result";;
8683 1.1 joerg *) func_resolve_sysroot "$deplib" ;;
8684 1.1 joerg esac
8685 1.1 joerg if $opt_preserve_dup_deps; then
8686 1.1 joerg case "$tmp_libs " in
8687 1.1 joerg *" $func_resolve_sysroot_result "*)
8688 1.1 joerg func_append specialdeplibs " $func_resolve_sysroot_result" ;;
8689 1.1 joerg esac
8690 1.1 joerg fi
8691 1.1 joerg func_append tmp_libs " $func_resolve_sysroot_result"
8692 1.1 joerg done
8693 1.1 joerg
8694 1.1 joerg if test no != "$link_all_deplibs"; then
8695 1.1 joerg # Add the search paths of all dependency libraries
8696 1.1 joerg for deplib in $dependency_libs; do
8697 1.1 joerg path=
8698 1.1 joerg case $deplib in
8699 1.1 joerg -L*) path=$deplib ;;
8700 1.1 joerg *.la)
8701 1.1 joerg func_resolve_sysroot "$deplib"
8702 1.1 joerg deplib=$func_resolve_sysroot_result
8703 1.1 joerg func_dirname "$deplib" "" "."
8704 1.1 joerg dir=$func_dirname_result
8705 1.1 joerg # We need an absolute path.
8706 1.1 joerg case $dir in
8707 1.1 joerg [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
8708 1.1 joerg *)
8709 1.1 joerg absdir=`cd "$dir" && pwd`
8710 1.1 joerg if test -z "$absdir"; then
8711 1.1 joerg func_warning "cannot determine absolute directory name of '$dir'"
8712 1.1 joerg absdir=$dir
8713 1.1 joerg fi
8714 1.1 joerg ;;
8715 1.1 joerg esac
8716 1.1 joerg if $GREP "^installed=no" $deplib > /dev/null; then
8717 1.1 joerg case $host in
8718 1.1 joerg *-*-darwin*)
8719 1.1 joerg depdepl=
8720 1.1 joerg eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
8721 1.1 joerg if test -n "$deplibrary_names"; then
8722 1.1 joerg for tmp in $deplibrary_names; do
8723 1.1 joerg depdepl=$tmp
8724 1.1 joerg done
8725 1.1 joerg if test -f "$absdir/$objdir/$depdepl"; then
8726 1.1 joerg depdepl=$absdir/$objdir/$depdepl
8727 1.1 joerg darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
8728 1.1 joerg if test -z "$darwin_install_name"; then
8729 1.1 joerg darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
8730 1.1 joerg fi
8731 1.1 joerg func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
8732 1.1 joerg func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
8733 1.1 joerg path=
8734 1.1 joerg fi
8735 1.1 joerg fi
8736 1.1 joerg ;;
8737 1.1 joerg *)
8738 1.1 joerg path=-L$absdir/$objdir
8739 1.1 joerg ;;
8740 1.1 joerg esac
8741 1.1 joerg else
8742 1.1 joerg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
8743 1.1 joerg test -z "$libdir" && \
8744 1.1 joerg func_fatal_error "'$deplib' is not a valid libtool archive"
8745 1.1 joerg test "$absdir" != "$libdir" && \
8746 1.1 joerg func_warning "'$deplib' seems to be moved"
8747 1.1 joerg
8748 1.1 joerg path=-L$absdir
8749 1.1 joerg fi
8750 1.1 joerg ;;
8751 1.1 joerg esac
8752 1.1 joerg case " $deplibs " in
8753 1.1 joerg *" $path "*) ;;
8754 1.1 joerg *) deplibs="$path $deplibs" ;;
8755 1.1 joerg esac
8756 1.1 joerg done
8757 1.1 joerg fi # link_all_deplibs != no
8758 1.1 joerg fi # linkmode = lib
8759 1.1 joerg done # for deplib in $libs
8760 1.1 joerg if test link = "$pass"; then
8761 1.1 joerg if test prog = "$linkmode"; then
8762 1.1 joerg compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
8763 1.1 joerg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
8764 1.1 joerg else
8765 1.1 joerg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8766 1.1 joerg fi
8767 1.1 joerg fi
8768 1.1 joerg dependency_libs=$newdependency_libs
8769 1.1 joerg if test dlpreopen = "$pass"; then
8770 1.1 joerg # Link the dlpreopened libraries before other libraries
8771 1.1 joerg for deplib in $save_deplibs; do
8772 1.1 joerg deplibs="$deplib $deplibs"
8773 1.1 joerg done
8774 1.1 joerg fi
8775 1.1 joerg if test dlopen != "$pass"; then
8776 1.1 joerg test conv = "$pass" || {
8777 1.1 joerg # Make sure lib_search_path contains only unique directories.
8778 1.1 joerg lib_search_path=
8779 1.1 joerg for dir in $newlib_search_path; do
8780 1.1 joerg case "$lib_search_path " in
8781 1.1 joerg *" $dir "*) ;;
8782 1.1 joerg *) func_append lib_search_path " $dir" ;;
8783 1.1 joerg esac
8784 1.1 joerg done
8785 1.1 joerg newlib_search_path=
8786 1.1 joerg }
8787 1.1 joerg
8788 1.1 joerg if test prog,link = "$linkmode,$pass"; then
8789 1.1 joerg vars="compile_deplibs finalize_deplibs"
8790 1.1 joerg else
8791 1.1 joerg vars=deplibs
8792 1.1 joerg fi
8793 1.1 joerg for var in $vars dependency_libs; do
8794 1.1 joerg # Add libraries to $var in reverse order
8795 1.1 joerg eval tmp_libs=\"\$$var\"
8796 1.1 joerg new_libs=
8797 1.1 joerg for deplib in $tmp_libs; do
8798 1.1 joerg # FIXME: Pedantically, this is the right thing to do, so
8799 1.1 joerg # that some nasty dependency loop isn't accidentally
8800 1.1 joerg # broken:
8801 1.1 joerg #new_libs="$deplib $new_libs"
8802 1.1 joerg # Pragmatically, this seems to cause very few problems in
8803 1.1 joerg # practice:
8804 1.1 joerg case $deplib in
8805 1.1 joerg -L*) new_libs="$deplib $new_libs" ;;
8806 1.1 joerg -R*) ;;
8807 1.1 joerg *)
8808 1.1 joerg # And here is the reason: when a library appears more
8809 1.1 joerg # than once as an explicit dependence of a library, or
8810 1.1 joerg # is implicitly linked in more than once by the
8811 1.1 joerg # compiler, it is considered special, and multiple
8812 1.1 joerg # occurrences thereof are not removed. Compare this
8813 1.1 joerg # with having the same library being listed as a
8814 1.1 joerg # dependency of multiple other libraries: in this case,
8815 1.1 joerg # we know (pedantically, we assume) the library does not
8816 1.1 joerg # need to be listed more than once, so we keep only the
8817 1.1 joerg # last copy. This is not always right, but it is rare
8818 1.1 joerg # enough that we require users that really mean to play
8819 1.1 joerg # such unportable linking tricks to link the library
8820 1.1 joerg # using -Wl,-lname, so that libtool does not consider it
8821 1.1 joerg # for duplicate removal.
8822 1.1 joerg case " $specialdeplibs " in
8823 1.1 joerg *" $deplib "*) new_libs="$deplib $new_libs" ;;
8824 1.1 joerg *)
8825 1.1 joerg case " $new_libs " in
8826 1.1 joerg *" $deplib "*) ;;
8827 1.1 joerg *) new_libs="$deplib $new_libs" ;;
8828 1.1 joerg esac
8829 1.1 joerg ;;
8830 1.1 joerg esac
8831 1.1 joerg ;;
8832 1.1 joerg esac
8833 1.1 joerg done
8834 1.1 joerg tmp_libs=
8835 1.1 joerg for deplib in $new_libs; do
8836 1.1 joerg case $deplib in
8837 1.1 joerg -L*)
8838 1.1 joerg case " $tmp_libs " in
8839 1.1 joerg *" $deplib "*) ;;
8840 1.1 joerg *) func_append tmp_libs " $deplib" ;;
8841 1.1 joerg esac
8842 1.1 joerg ;;
8843 1.1 joerg *) func_append tmp_libs " $deplib" ;;
8844 1.1 joerg esac
8845 1.1 joerg done
8846 1.1 joerg eval $var=\"$tmp_libs\"
8847 1.1 joerg done # for var
8848 1.1 joerg fi
8849 1.1 joerg
8850 1.1 joerg # Add Sun CC postdeps if required:
8851 1.1 joerg test CXX = "$tagname" && {
8852 1.1 joerg case $host_os in
8853 1.1 joerg linux*)
8854 1.1 joerg case `$CC -V 2>&1 | sed 5q` in
8855 1.1 joerg *Sun\ C*) # Sun C++ 5.9
8856 1.1 joerg func_suncc_cstd_abi
8857 1.1 joerg
8858 1.1 joerg if test no != "$suncc_use_cstd_abi"; then
8859 1.1 joerg func_append postdeps ' -library=Cstd -library=Crun'
8860 1.1 joerg fi
8861 1.1 joerg ;;
8862 1.1 joerg esac
8863 1.1 joerg ;;
8864 1.1 joerg
8865 1.1 joerg solaris*)
8866 1.1 joerg func_cc_basename "$CC"
8867 1.1 joerg case $func_cc_basename_result in
8868 1.1 joerg CC* | sunCC*)
8869 1.1 joerg func_suncc_cstd_abi
8870 1.1 joerg
8871 1.1 joerg if test no != "$suncc_use_cstd_abi"; then
8872 1.1 joerg func_append postdeps ' -library=Cstd -library=Crun'
8873 1.1 joerg fi
8874 1.1 joerg ;;
8875 1.1 joerg esac
8876 1.1 joerg ;;
8877 1.1 joerg esac
8878 1.1 joerg }
8879 1.1 joerg
8880 1.1 joerg # Last step: remove runtime libs from dependency_libs
8881 1.1 joerg # (they stay in deplibs)
8882 1.1 joerg tmp_libs=
8883 1.1 joerg for i in $dependency_libs; do
8884 1.1 joerg case " $predeps $postdeps $compiler_lib_search_path " in
8885 1.1 joerg *" $i "*)
8886 1.1 joerg i=
8887 1.1 joerg ;;
8888 1.1 joerg esac
8889 1.1 joerg if test -n "$i"; then
8890 1.1 joerg func_append tmp_libs " $i"
8891 1.1 joerg fi
8892 1.1 joerg done
8893 1.1 joerg dependency_libs=$tmp_libs
8894 1.1 joerg done # for pass
8895 1.1 joerg if test prog = "$linkmode"; then
8896 1.1 joerg dlfiles=$newdlfiles
8897 1.1 joerg fi
8898 1.1 joerg if test prog = "$linkmode" || test lib = "$linkmode"; then
8899 1.1 joerg dlprefiles=$newdlprefiles
8900 1.1 joerg fi
8901 1.1 joerg
8902 1.1 joerg case $linkmode in
8903 1.1 joerg oldlib)
8904 1.1 joerg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
8905 1.1 joerg func_warning "'-dlopen' is ignored for archives"
8906 1.1 joerg fi
8907 1.1 joerg
8908 1.1 joerg case " $deplibs" in
8909 1.1 joerg *\ -l* | *\ -L*)
8910 1.1 joerg func_warning "'-l' and '-L' are ignored for archives" ;;
8911 1.1 joerg esac
8912 1.1 joerg
8913 1.1 joerg test -n "$rpath" && \
8914 1.1 joerg func_warning "'-rpath' is ignored for archives"
8915 1.1 joerg
8916 1.1 joerg test -n "$xrpath" && \
8917 1.1 joerg func_warning "'-R' is ignored for archives"
8918 1.1 joerg
8919 1.1 joerg test -n "$vinfo" && \
8920 1.1 joerg func_warning "'-version-info/-version-number' is ignored for archives"
8921 1.1 joerg
8922 1.1 joerg test -n "$release" && \
8923 1.1 joerg func_warning "'-release' is ignored for archives"
8924 1.1 joerg
8925 1.1 joerg test -n "$export_symbols$export_symbols_regex" && \
8926 1.1 joerg func_warning "'-export-symbols' is ignored for archives"
8927 1.1 joerg
8928 1.1 joerg # Now set the variables for building old libraries.
8929 1.1 joerg build_libtool_libs=no
8930 1.1 joerg oldlibs=$output
8931 1.1 joerg func_append objs "$old_deplibs"
8932 1.1 joerg ;;
8933 1.1 joerg
8934 1.1 joerg lib)
8935 1.1 joerg # Make sure we only generate libraries of the form 'libNAME.la'.
8936 1.1 joerg case $outputname in
8937 1.1 joerg lib*)
8938 1.1 joerg func_stripname 'lib' '.la' "$outputname"
8939 1.1 joerg name=$func_stripname_result
8940 1.1 joerg eval shared_ext=\"$shrext_cmds\"
8941 1.1 joerg eval libname=\"$libname_spec\"
8942 1.1 joerg ;;
8943 1.1 joerg *)
8944 1.1 joerg test no = "$module" \
8945 1.1 joerg && func_fatal_help "libtool library '$output' must begin with 'lib'"
8946 1.1 joerg
8947 1.1 joerg if test no != "$need_lib_prefix"; then
8948 1.1 joerg # Add the "lib" prefix for modules if required
8949 1.1 joerg func_stripname '' '.la' "$outputname"
8950 1.1 joerg name=$func_stripname_result
8951 1.1 joerg eval shared_ext=\"$shrext_cmds\"
8952 1.1 joerg eval libname=\"$libname_spec\"
8953 1.1 joerg else
8954 1.1 joerg func_stripname '' '.la' "$outputname"
8955 1.1 joerg libname=$func_stripname_result
8956 1.1 joerg fi
8957 1.1 joerg ;;
8958 1.1 joerg esac
8959 1.1 joerg
8960 1.1 joerg if test -n "$objs"; then
8961 1.1 joerg if test pass_all != "$deplibs_check_method"; then
8962 1.1 joerg func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
8963 1.1 joerg else
8964 1.1 joerg echo
8965 1.1 joerg $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
8966 1.1 joerg $ECHO "*** objects $objs is not portable!"
8967 1.1 joerg func_append libobjs " $objs"
8968 1.1 joerg fi
8969 1.1 joerg fi
8970 1.1 joerg
8971 1.1 joerg test no = "$dlself" \
8972 1.1 joerg || func_warning "'-dlopen self' is ignored for libtool libraries"
8973 1.1 joerg
8974 1.1 joerg set dummy $rpath
8975 1.1 joerg shift
8976 1.1 joerg test 1 -lt "$#" \
8977 1.1 joerg && func_warning "ignoring multiple '-rpath's for a libtool library"
8978 1.1 joerg
8979 1.1 joerg install_libdir=$1
8980 1.1 joerg
8981 1.1 joerg oldlibs=
8982 1.1 joerg if test -z "$rpath"; then
8983 1.1 joerg if test yes = "$build_libtool_libs"; then
8984 1.1 joerg # Building a libtool convenience library.
8985 1.1 joerg # Some compilers have problems with a '.al' extension so
8986 1.1 joerg # convenience libraries should have the same extension an
8987 1.1 joerg # archive normally would.
8988 1.1 joerg oldlibs="$output_objdir/$libname.$libext $oldlibs"
8989 1.1 joerg build_libtool_libs=convenience
8990 1.1 joerg build_old_libs=yes
8991 1.1 joerg fi
8992 1.1 joerg
8993 1.1 joerg test -n "$vinfo" && \
8994 1.1 joerg func_warning "'-version-info/-version-number' is ignored for convenience libraries"
8995 1.1 joerg
8996 1.1 joerg test -n "$release" && \
8997 1.1 joerg func_warning "'-release' is ignored for convenience libraries"
8998 1.1 joerg else
8999 1.1 joerg
9000 1.1 joerg # Parse the version information argument.
9001 1.1 joerg save_ifs=$IFS; IFS=:
9002 1.1 joerg set dummy $vinfo 0 0 0
9003 1.1 joerg shift
9004 1.1 joerg IFS=$save_ifs
9005 1.1 joerg
9006 1.1 joerg test -n "$7" && \
9007 1.1 joerg func_fatal_help "too many parameters to '-version-info'"
9008 1.1 joerg
9009 1.1 joerg # convert absolute version numbers to libtool ages
9010 1.1 joerg # this retains compatibility with .la files and attempts
9011 1.1 joerg # to make the code below a bit more comprehensible
9012 1.1 joerg
9013 1.1 joerg case $vinfo_number in
9014 1.1 joerg yes)
9015 1.1 joerg number_major=$1
9016 1.1 joerg number_minor=$2
9017 1.1 joerg number_revision=$3
9018 1.1 joerg #
9019 1.1 joerg # There are really only two kinds -- those that
9020 1.1 joerg # use the current revision as the major version
9021 1.1 joerg # and those that subtract age and use age as
9022 1.1 joerg # a minor version. But, then there is irix
9023 1.1 joerg # that has an extra 1 added just for fun
9024 1.1 joerg #
9025 1.1 joerg case $version_type in
9026 1.1 joerg # correct linux to gnu/linux during the next big refactor
9027 1.1 joerg darwin|freebsd-elf|linux|osf|windows|none)
9028 1.1 joerg func_arith $number_major + $number_minor
9029 1.1 joerg current=$func_arith_result
9030 1.1 joerg age=$number_minor
9031 1.1 joerg revision=$number_revision
9032 1.1 joerg ;;
9033 1.1 joerg freebsd-aout|qnx|sunos)
9034 1.1 joerg current=$number_major
9035 1.1 joerg revision=$number_minor
9036 1.1 joerg age=0
9037 1.1 joerg ;;
9038 1.1 joerg irix|nonstopux)
9039 1.1 joerg func_arith $number_major + $number_minor
9040 1.1 joerg current=$func_arith_result
9041 1.1 joerg age=$number_minor
9042 1.1 joerg revision=$number_minor
9043 1.1 joerg lt_irix_increment=no
9044 1.1 joerg ;;
9045 1.1 joerg esac
9046 1.1 joerg ;;
9047 1.1 joerg no)
9048 1.1 joerg current=$1
9049 1.1 joerg revision=$2
9050 1.1 joerg age=$3
9051 1.1 joerg ;;
9052 1.1 joerg esac
9053 1.1 joerg
9054 1.1 joerg # Check that each of the things are valid numbers.
9055 1.1 joerg case $current in
9056 1.1 joerg 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]) ;;
9057 1.1 joerg *)
9058 1.1 joerg func_error "CURRENT '$current' must be a nonnegative integer"
9059 1.1 joerg func_fatal_error "'$vinfo' is not valid version information"
9060 1.1 joerg ;;
9061 1.1 joerg esac
9062 1.1 joerg
9063 1.1 joerg case $revision in
9064 1.1 joerg 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]) ;;
9065 1.1 joerg *)
9066 1.1 joerg func_error "REVISION '$revision' must be a nonnegative integer"
9067 1.1 joerg func_fatal_error "'$vinfo' is not valid version information"
9068 1.1 joerg ;;
9069 1.1 joerg esac
9070 1.1 joerg
9071 1.1 joerg case $age in
9072 1.1 joerg 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]) ;;
9073 1.1 joerg *)
9074 1.1 joerg func_error "AGE '$age' must be a nonnegative integer"
9075 1.1 joerg func_fatal_error "'$vinfo' is not valid version information"
9076 1.1 joerg ;;
9077 1.1 joerg esac
9078 1.1 joerg
9079 1.1 joerg if test "$age" -gt "$current"; then
9080 1.1 joerg func_error "AGE '$age' is greater than the current interface number '$current'"
9081 1.1 joerg func_fatal_error "'$vinfo' is not valid version information"
9082 1.1 joerg fi
9083 1.1 joerg
9084 1.1 joerg # Calculate the version variables.
9085 1.1 joerg major=
9086 1.1 joerg versuffix=
9087 1.1 joerg verstring=
9088 1.1 joerg case $version_type in
9089 1.1 joerg none) ;;
9090 1.1 joerg
9091 1.1 joerg darwin)
9092 1.1 joerg # Like Linux, but with the current version available in
9093 1.1 joerg # verstring for coding it into the library header
9094 1.1 joerg func_arith $current - $age
9095 1.1 joerg major=.$func_arith_result
9096 1.1 joerg versuffix=$major.$age.$revision
9097 1.1 joerg # Darwin ld doesn't like 0 for these options...
9098 1.1 joerg func_arith $current + 1
9099 1.1 joerg minor_current=$func_arith_result
9100 1.1 joerg xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
9101 1.1 joerg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
9102 1.1 joerg # On Darwin other compilers
9103 1.1 joerg case $CC in
9104 1.1 joerg nagfor*)
9105 1.1 joerg verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
9106 1.1 joerg ;;
9107 1.1 joerg *)
9108 1.1 joerg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
9109 1.1 joerg ;;
9110 1.1 joerg esac
9111 1.1 joerg ;;
9112 1.1 joerg
9113 1.1 joerg freebsd-aout)
9114 1.1 joerg major=.$current
9115 1.1 joerg versuffix=.$current.$revision
9116 1.1 joerg ;;
9117 1.1 joerg
9118 1.1 joerg freebsd-elf)
9119 1.1 joerg func_arith $current - $age
9120 1.1 joerg major=.$func_arith_result
9121 1.1 joerg versuffix=$major.$age.$revision
9122 1.1 joerg ;;
9123 1.1 joerg
9124 1.1 joerg irix | nonstopux)
9125 1.1 joerg if test no = "$lt_irix_increment"; then
9126 1.1 joerg func_arith $current - $age
9127 1.1 joerg else
9128 1.1 joerg func_arith $current - $age + 1
9129 1.1 joerg fi
9130 1.1 joerg major=$func_arith_result
9131 1.1 joerg
9132 1.1 joerg case $version_type in
9133 1.1 joerg nonstopux) verstring_prefix=nonstopux ;;
9134 1.1 joerg *) verstring_prefix=sgi ;;
9135 1.1 joerg esac
9136 1.1 joerg verstring=$verstring_prefix$major.$revision
9137 1.1 joerg
9138 1.1 joerg # Add in all the interfaces that we are compatible with.
9139 1.1 joerg loop=$revision
9140 1.1 joerg while test 0 -ne "$loop"; do
9141 1.1 joerg func_arith $revision - $loop
9142 1.1 joerg iface=$func_arith_result
9143 1.1 joerg func_arith $loop - 1
9144 1.1 joerg loop=$func_arith_result
9145 1.1 joerg verstring=$verstring_prefix$major.$iface:$verstring
9146 1.1 joerg done
9147 1.1 joerg
9148 1.1 joerg # Before this point, $major must not contain '.'.
9149 1.1 joerg major=.$major
9150 1.1 joerg versuffix=$major.$revision
9151 1.1 joerg ;;
9152 1.1 joerg
9153 1.1 joerg linux) # correct to gnu/linux during the next big refactor
9154 1.1 joerg func_arith $current - $age
9155 1.1 joerg major=.$func_arith_result
9156 1.1 joerg versuffix=$major.$age.$revision
9157 1.1 joerg ;;
9158 1.1 joerg
9159 1.1 joerg osf)
9160 1.1 joerg func_arith $current - $age
9161 1.1 joerg major=.$func_arith_result
9162 1.1 joerg versuffix=.$current.$age.$revision
9163 1.1 joerg verstring=$current.$age.$revision
9164 1.1 joerg
9165 1.1 joerg # Add in all the interfaces that we are compatible with.
9166 1.1 joerg loop=$age
9167 1.1 joerg while test 0 -ne "$loop"; do
9168 1.1 joerg func_arith $current - $loop
9169 1.1 joerg iface=$func_arith_result
9170 1.1 joerg func_arith $loop - 1
9171 1.1 joerg loop=$func_arith_result
9172 1.1 joerg verstring=$verstring:$iface.0
9173 1.1 joerg done
9174 1.1 joerg
9175 1.1 joerg # Make executables depend on our current version.
9176 1.1 joerg func_append verstring ":$current.0"
9177 1.1 joerg ;;
9178 1.1 joerg
9179 1.1 joerg qnx)
9180 1.1 joerg major=.$current
9181 1.1 joerg versuffix=.$current
9182 1.1 joerg ;;
9183 1.1 joerg
9184 1.1 joerg sco)
9185 1.1 joerg major=.$current
9186 1.1 joerg versuffix=.$current
9187 1.1 joerg ;;
9188 1.1 joerg
9189 1.1 joerg sunos)
9190 1.1 joerg major=.$current
9191 1.1 joerg versuffix=.$current.$revision
9192 1.1 joerg ;;
9193 1.1 joerg
9194 1.1 joerg windows)
9195 1.1 joerg # Use '-' rather than '.', since we only want one
9196 1.1 joerg # extension on DOS 8.3 file systems.
9197 1.1 joerg func_arith $current - $age
9198 1.1 joerg major=$func_arith_result
9199 1.1 joerg versuffix=-$major
9200 1.1 joerg ;;
9201 1.1 joerg
9202 1.1 joerg *)
9203 1.1 joerg func_fatal_configuration "unknown library version type '$version_type'"
9204 1.1 joerg ;;
9205 1.1 joerg esac
9206 1.1 joerg
9207 1.1 joerg # Clear the version info if we defaulted, and they specified a release.
9208 1.1 joerg if test -z "$vinfo" && test -n "$release"; then
9209 1.1 joerg major=
9210 1.1 joerg case $version_type in
9211 1.1 joerg darwin)
9212 1.1 joerg # we can't check for "0.0" in archive_cmds due to quoting
9213 1.1 joerg # problems, so we reset it completely
9214 1.1 joerg verstring=
9215 1.1 joerg ;;
9216 1.1 joerg *)
9217 1.1 joerg verstring=0.0
9218 1.1 joerg ;;
9219 1.1 joerg esac
9220 1.1 joerg if test no = "$need_version"; then
9221 1.1 joerg versuffix=
9222 1.1 joerg else
9223 1.1 joerg versuffix=.0.0
9224 1.1 joerg fi
9225 1.1 joerg fi
9226 1.1 joerg
9227 1.1 joerg # Remove version info from name if versioning should be avoided
9228 1.1 joerg if test yes,no = "$avoid_version,$need_version"; then
9229 1.1 joerg major=
9230 1.1 joerg versuffix=
9231 1.1 joerg verstring=
9232 1.1 joerg fi
9233 1.1 joerg
9234 1.1 joerg # Check to see if the archive will have undefined symbols.
9235 1.1 joerg if test yes = "$allow_undefined"; then
9236 1.1 joerg if test unsupported = "$allow_undefined_flag"; then
9237 1.1 joerg if test yes = "$build_old_libs"; then
9238 1.1 joerg func_warning "undefined symbols not allowed in $host shared libraries; building static only"
9239 1.1 joerg build_libtool_libs=no
9240 1.1 joerg else
9241 1.1 joerg func_fatal_error "can't build $host shared library unless -no-undefined is specified"
9242 1.1 joerg fi
9243 1.1 joerg fi
9244 1.1 joerg else
9245 1.1 joerg # Don't allow undefined symbols.
9246 1.1 joerg allow_undefined_flag=$no_undefined_flag
9247 1.1 joerg fi
9248 1.1 joerg
9249 1.1 joerg fi
9250 1.1 joerg
9251 1.1 joerg func_generate_dlsyms "$libname" "$libname" :
9252 1.1 joerg func_append libobjs " $symfileobj"
9253 1.1 joerg test " " = "$libobjs" && libobjs=
9254 1.1 joerg
9255 1.1 joerg if test relink != "$opt_mode"; then
9256 1.1 joerg # Remove our outputs, but don't remove object files since they
9257 1.1 joerg # may have been created when compiling PIC objects.
9258 1.1 joerg removelist=
9259 1.1 joerg tempremovelist=`$ECHO "$output_objdir/*"`
9260 1.1 joerg for p in $tempremovelist; do
9261 1.1 joerg case $p in
9262 1.1 joerg *.$objext | *.gcno)
9263 1.1 joerg ;;
9264 1.1 joerg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
9265 1.1 joerg if test -n "$precious_files_regex"; then
9266 1.1 joerg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
9267 1.1 joerg then
9268 1.1 joerg continue
9269 1.1 joerg fi
9270 1.1 joerg fi
9271 1.1 joerg func_append removelist " $p"
9272 1.1 joerg ;;
9273 1.1 joerg *) ;;
9274 1.1 joerg esac
9275 1.1 joerg done
9276 1.1 joerg test -n "$removelist" && \
9277 1.1 joerg func_show_eval "${RM}r \$removelist"
9278 1.1 joerg fi
9279 1.1 joerg
9280 1.1 joerg # Now set the variables for building old libraries.
9281 1.1 joerg if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
9282 1.1 joerg func_append oldlibs " $output_objdir/$libname.$libext"
9283 1.1 joerg
9284 1.1 joerg # Transform .lo files to .o files.
9285 1.1 joerg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
9286 1.1 joerg fi
9287 1.1 joerg
9288 1.1 joerg # Eliminate all temporary directories.
9289 1.1 joerg #for path in $notinst_path; do
9290 1.1 joerg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
9291 1.1 joerg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
9292 1.1 joerg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
9293 1.1 joerg #done
9294 1.1 joerg
9295 1.1 joerg if test -n "$xrpath"; then
9296 1.1 joerg # If the user specified any rpath flags, then add them.
9297 1.1 joerg temp_xrpath=
9298 1.1 joerg for libdir in $xrpath; do
9299 1.1 joerg func_replace_sysroot "$libdir"
9300 1.1 joerg func_append temp_xrpath " -R$func_replace_sysroot_result"
9301 1.1 joerg case "$finalize_rpath " in
9302 1.1 joerg *" $libdir "*) ;;
9303 1.1 joerg *) func_append finalize_rpath " $libdir" ;;
9304 1.1 joerg esac
9305 1.1 joerg done
9306 1.1 joerg if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
9307 1.1 joerg dependency_libs="$temp_xrpath $dependency_libs"
9308 1.1 joerg fi
9309 1.1 joerg fi
9310 1.1 joerg
9311 1.1 joerg # Make sure dlfiles contains only unique files that won't be dlpreopened
9312 1.1 joerg old_dlfiles=$dlfiles
9313 1.1 joerg dlfiles=
9314 1.1 joerg for lib in $old_dlfiles; do
9315 1.1 joerg case " $dlprefiles $dlfiles " in
9316 1.1 joerg *" $lib "*) ;;
9317 1.1 joerg *) func_append dlfiles " $lib" ;;
9318 1.1 joerg esac
9319 1.1 joerg done
9320 1.1 joerg
9321 1.1 joerg # Make sure dlprefiles contains only unique files
9322 1.1 joerg old_dlprefiles=$dlprefiles
9323 1.1 joerg dlprefiles=
9324 1.1 joerg for lib in $old_dlprefiles; do
9325 1.1 joerg case "$dlprefiles " in
9326 1.1 joerg *" $lib "*) ;;
9327 1.1 joerg *) func_append dlprefiles " $lib" ;;
9328 1.1 joerg esac
9329 1.1 joerg done
9330 1.1 joerg
9331 1.1 joerg if test yes = "$build_libtool_libs"; then
9332 1.1 joerg if test -n "$rpath"; then
9333 1.1 joerg case $host in
9334 1.1 joerg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
9335 1.1 joerg # these systems don't actually have a c library (as such)!
9336 1.1 joerg ;;
9337 1.1 joerg *-*-rhapsody* | *-*-darwin1.[012])
9338 1.1 joerg # Rhapsody C library is in the System framework
9339 1.1 joerg func_append deplibs " System.ltframework"
9340 1.1 joerg ;;
9341 1.1 joerg *-*-netbsd*)
9342 1.1 joerg # Don't link with libc until the a.out ld.so is fixed.
9343 1.1 joerg ;;
9344 1.1 joerg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
9345 1.1 joerg # Do not include libc due to us having libc/libc_r.
9346 1.1 joerg ;;
9347 1.1 joerg *-*-sco3.2v5* | *-*-sco5v6*)
9348 1.1 joerg # Causes problems with __ctype
9349 1.1 joerg ;;
9350 1.1 joerg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
9351 1.1 joerg # Compiler inserts libc in the correct place for threads to work
9352 1.1 joerg ;;
9353 1.1 joerg *)
9354 1.1 joerg # Add libc to deplibs on all other systems if necessary.
9355 1.1 joerg if test yes = "$build_libtool_need_lc"; then
9356 1.1 joerg func_append deplibs " -lc"
9357 1.1 joerg fi
9358 1.1 joerg ;;
9359 1.1 joerg esac
9360 1.1 joerg fi
9361 1.1 joerg
9362 1.1 joerg # Transform deplibs into only deplibs that can be linked in shared.
9363 1.1 joerg name_save=$name
9364 1.1 joerg libname_save=$libname
9365 1.1 joerg release_save=$release
9366 1.1 joerg versuffix_save=$versuffix
9367 1.1 joerg major_save=$major
9368 1.1 joerg # I'm not sure if I'm treating the release correctly. I think
9369 1.1 joerg # release should show up in the -l (ie -lgmp5) so we don't want to
9370 1.1 joerg # add it in twice. Is that correct?
9371 1.1 joerg release=
9372 1.1 joerg versuffix=
9373 1.1 joerg major=
9374 1.1 joerg newdeplibs=
9375 1.1 joerg droppeddeps=no
9376 1.1 joerg case $deplibs_check_method in
9377 1.1 joerg pass_all)
9378 1.1 joerg # Don't check for shared/static. Everything works.
9379 1.1 joerg # This might be a little naive. We might want to check
9380 1.1 joerg # whether the library exists or not. But this is on
9381 1.1 joerg # osf3 & osf4 and I'm not really sure... Just
9382 1.1 joerg # implementing what was already the behavior.
9383 1.1 joerg newdeplibs=$deplibs
9384 1.1 joerg ;;
9385 1.1 joerg test_compile)
9386 1.1 joerg # This code stresses the "libraries are programs" paradigm to its
9387 1.1 joerg # limits. Maybe even breaks it. We compile a program, linking it
9388 1.1 joerg # against the deplibs as a proxy for the library. Then we can check
9389 1.1 joerg # whether they linked in statically or dynamically with ldd.
9390 1.1 joerg $opt_dry_run || $RM conftest.c
9391 1.1 joerg cat > conftest.c <<EOF
9392 1.1 joerg int main() { return 0; }
9393 1.1 joerg EOF
9394 1.1 joerg $opt_dry_run || $RM conftest
9395 1.1 joerg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
9396 1.1 joerg ldd_output=`ldd conftest`
9397 1.1 joerg for i in $deplibs; do
9398 1.1 joerg case $i in
9399 1.1 joerg -l*)
9400 1.1 joerg func_stripname -l '' "$i"
9401 1.1 joerg name=$func_stripname_result
9402 1.1 joerg if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9403 1.1 joerg case " $predeps $postdeps " in
9404 1.1 joerg *" $i "*)
9405 1.1 joerg func_append newdeplibs " $i"
9406 1.1 joerg i=
9407 1.1 joerg ;;
9408 1.1 joerg esac
9409 1.1 joerg fi
9410 1.1 joerg if test -n "$i"; then
9411 1.1 joerg libname=`eval "\\$ECHO \"$libname_spec\""`
9412 1.1 joerg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9413 1.1 joerg set dummy $deplib_matches; shift
9414 1.1 joerg deplib_match=$1
9415 1.1 joerg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9416 1.1 joerg func_append newdeplibs " $i"
9417 1.1 joerg else
9418 1.1 joerg droppeddeps=yes
9419 1.1 joerg echo
9420 1.1 joerg $ECHO "*** Warning: dynamic linker does not accept needed library $i."
9421 1.1 joerg echo "*** I have the capability to make that library automatically link in when"
9422 1.1 joerg echo "*** you link to this library. But I can only do this if you have a"
9423 1.1 joerg echo "*** shared version of the library, which I believe you do not have"
9424 1.1 joerg echo "*** because a test_compile did reveal that the linker did not use it for"
9425 1.1 joerg echo "*** its dynamic dependency list that programs get resolved with at runtime."
9426 1.1 joerg fi
9427 1.1 joerg fi
9428 1.1 joerg ;;
9429 1.1 joerg *)
9430 1.1 joerg func_append newdeplibs " $i"
9431 1.1 joerg ;;
9432 1.1 joerg esac
9433 1.1 joerg done
9434 1.1 joerg else
9435 1.1 joerg # Error occurred in the first compile. Let's try to salvage
9436 1.1 joerg # the situation: Compile a separate program for each library.
9437 1.1 joerg for i in $deplibs; do
9438 1.1 joerg case $i in
9439 1.1 joerg -l*)
9440 1.1 joerg func_stripname -l '' "$i"
9441 1.1 joerg name=$func_stripname_result
9442 1.1 joerg $opt_dry_run || $RM conftest
9443 1.1 joerg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
9444 1.1 joerg ldd_output=`ldd conftest`
9445 1.1 joerg if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9446 1.1 joerg case " $predeps $postdeps " in
9447 1.1 joerg *" $i "*)
9448 1.1 joerg func_append newdeplibs " $i"
9449 1.1 joerg i=
9450 1.1 joerg ;;
9451 1.1 joerg esac
9452 1.1 joerg fi
9453 1.1 joerg if test -n "$i"; then
9454 1.1 joerg libname=`eval "\\$ECHO \"$libname_spec\""`
9455 1.1 joerg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9456 1.1 joerg set dummy $deplib_matches; shift
9457 1.1 joerg deplib_match=$1
9458 1.1 joerg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9459 1.1 joerg func_append newdeplibs " $i"
9460 1.1 joerg else
9461 1.1 joerg droppeddeps=yes
9462 1.1 joerg echo
9463 1.1 joerg $ECHO "*** Warning: dynamic linker does not accept needed library $i."
9464 1.1 joerg echo "*** I have the capability to make that library automatically link in when"
9465 1.1 joerg echo "*** you link to this library. But I can only do this if you have a"
9466 1.1 joerg echo "*** shared version of the library, which you do not appear to have"
9467 1.1 joerg echo "*** because a test_compile did reveal that the linker did not use this one"
9468 1.1 joerg echo "*** as a dynamic dependency that programs can get resolved with at runtime."
9469 1.1 joerg fi
9470 1.1 joerg fi
9471 1.1 joerg else
9472 1.1 joerg droppeddeps=yes
9473 1.1 joerg echo
9474 1.1 joerg $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
9475 1.1 joerg echo "*** make it link in! You will probably need to install it or some"
9476 1.1 joerg echo "*** library that it depends on before this library will be fully"
9477 1.1 joerg echo "*** functional. Installing it before continuing would be even better."
9478 1.1 joerg fi
9479 1.1 joerg ;;
9480 1.1 joerg *)
9481 1.1 joerg func_append newdeplibs " $i"
9482 1.1 joerg ;;
9483 1.1 joerg esac
9484 1.1 joerg done
9485 1.1 joerg fi
9486 1.1 joerg ;;
9487 1.1 joerg file_magic*)
9488 1.1 joerg set dummy $deplibs_check_method; shift
9489 1.1 joerg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9490 1.1 joerg for a_deplib in $deplibs; do
9491 1.1 joerg case $a_deplib in
9492 1.1 joerg -l*)
9493 1.1 joerg func_stripname -l '' "$a_deplib"
9494 1.1 joerg name=$func_stripname_result
9495 1.1 joerg if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9496 1.1 joerg case " $predeps $postdeps " in
9497 1.1 joerg *" $a_deplib "*)
9498 1.1 joerg func_append newdeplibs " $a_deplib"
9499 1.1 joerg a_deplib=
9500 1.1 joerg ;;
9501 1.1 joerg esac
9502 1.1 joerg fi
9503 1.1 joerg if test -n "$a_deplib"; then
9504 1.1 joerg libname=`eval "\\$ECHO \"$libname_spec\""`
9505 1.1 joerg if test -n "$file_magic_glob"; then
9506 1.1 joerg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
9507 1.1 joerg else
9508 1.1 joerg libnameglob=$libname
9509 1.1 joerg fi
9510 1.1 joerg test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
9511 1.1 joerg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9512 1.1 joerg if test yes = "$want_nocaseglob"; then
9513 1.1 joerg shopt -s nocaseglob
9514 1.1 joerg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9515 1.1 joerg $nocaseglob
9516 1.1 joerg else
9517 1.1 joerg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9518 1.1 joerg fi
9519 1.1 joerg for potent_lib in $potential_libs; do
9520 1.1 joerg # Follow soft links.
9521 1.1 joerg if ls -lLd "$potent_lib" 2>/dev/null |
9522 1.1 joerg $GREP " -> " >/dev/null; then
9523 1.1 joerg continue
9524 1.1 joerg fi
9525 1.1 joerg # The statement above tries to avoid entering an
9526 1.1 joerg # endless loop below, in case of cyclic links.
9527 1.1 joerg # We might still enter an endless loop, since a link
9528 1.1 joerg # loop can be closed while we follow links,
9529 1.1 joerg # but so what?
9530 1.1 joerg potlib=$potent_lib
9531 1.1 joerg while test -h "$potlib" 2>/dev/null; do
9532 1.1 joerg potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
9533 1.1 joerg case $potliblink in
9534 1.1 joerg [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
9535 1.1 joerg *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
9536 1.1 joerg esac
9537 1.1 joerg done
9538 1.1 joerg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
9539 1.1 joerg $SED -e 10q |
9540 1.1 joerg $EGREP "$file_magic_regex" > /dev/null; then
9541 1.1 joerg func_append newdeplibs " $a_deplib"
9542 1.1 joerg a_deplib=
9543 1.1 joerg break 2
9544 1.1 joerg fi
9545 1.1 joerg done
9546 1.1 joerg done
9547 1.1 joerg fi
9548 1.1 joerg if test -n "$a_deplib"; then
9549 1.1 joerg droppeddeps=yes
9550 1.1 joerg echo
9551 1.1 joerg $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
9552 1.1 joerg echo "*** I have the capability to make that library automatically link in when"
9553 1.1 joerg echo "*** you link to this library. But I can only do this if you have a"
9554 1.1 joerg echo "*** shared version of the library, which you do not appear to have"
9555 1.1 joerg echo "*** because I did check the linker path looking for a file starting"
9556 1.1 joerg if test -z "$potlib"; then
9557 1.1 joerg $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
9558 1.1 joerg else
9559 1.1 joerg $ECHO "*** with $libname and none of the candidates passed a file format test"
9560 1.1 joerg $ECHO "*** using a file magic. Last file checked: $potlib"
9561 1.1 joerg fi
9562 1.1 joerg fi
9563 1.1 joerg ;;
9564 1.1 joerg *)
9565 1.1 joerg # Add a -L argument.
9566 1.1 joerg func_append newdeplibs " $a_deplib"
9567 1.1 joerg ;;
9568 1.1 joerg esac
9569 1.1 joerg done # Gone through all deplibs.
9570 1.1 joerg ;;
9571 1.1 joerg match_pattern*)
9572 1.1 joerg set dummy $deplibs_check_method; shift
9573 1.1 joerg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9574 1.1 joerg for a_deplib in $deplibs; do
9575 1.1 joerg case $a_deplib in
9576 1.1 joerg -l*)
9577 1.1 joerg func_stripname -l '' "$a_deplib"
9578 1.1 joerg name=$func_stripname_result
9579 1.1 joerg if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9580 1.1 joerg case " $predeps $postdeps " in
9581 1.1 joerg *" $a_deplib "*)
9582 1.1 joerg func_append newdeplibs " $a_deplib"
9583 1.1 joerg a_deplib=
9584 1.1 joerg ;;
9585 1.1 joerg esac
9586 1.1 joerg fi
9587 1.1 joerg if test -n "$a_deplib"; then
9588 1.1 joerg libname=`eval "\\$ECHO \"$libname_spec\""`
9589 1.1 joerg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9590 1.1 joerg potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
9591 1.1 joerg for potent_lib in $potential_libs; do
9592 1.1 joerg potlib=$potent_lib # see symlink-check above in file_magic test
9593 1.1 joerg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
9594 1.1 joerg $EGREP "$match_pattern_regex" > /dev/null; then
9595 1.1 joerg func_append newdeplibs " $a_deplib"
9596 1.1 joerg a_deplib=
9597 1.1 joerg break 2
9598 1.1 joerg fi
9599 1.1 joerg done
9600 1.1 joerg done
9601 1.1 joerg fi
9602 1.1 joerg if test -n "$a_deplib"; then
9603 1.1 joerg droppeddeps=yes
9604 1.1 joerg echo
9605 1.1 joerg $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
9606 1.1 joerg echo "*** I have the capability to make that library automatically link in when"
9607 1.1 joerg echo "*** you link to this library. But I can only do this if you have a"
9608 1.1 joerg echo "*** shared version of the library, which you do not appear to have"
9609 1.1 joerg echo "*** because I did check the linker path looking for a file starting"
9610 1.1 joerg if test -z "$potlib"; then
9611 1.1 joerg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
9612 1.1 joerg else
9613 1.1 joerg $ECHO "*** with $libname and none of the candidates passed a file format test"
9614 1.1 joerg $ECHO "*** using a regex pattern. Last file checked: $potlib"
9615 1.1 joerg fi
9616 1.1 joerg fi
9617 1.1 joerg ;;
9618 1.1 joerg *)
9619 1.1 joerg # Add a -L argument.
9620 1.1 joerg func_append newdeplibs " $a_deplib"
9621 1.1 joerg ;;
9622 1.1 joerg esac
9623 1.1 joerg done # Gone through all deplibs.
9624 1.1 joerg ;;
9625 1.1 joerg none | unknown | *)
9626 1.1 joerg newdeplibs=
9627 1.1 joerg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
9628 1.1 joerg if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9629 1.1 joerg for i in $predeps $postdeps; do
9630 1.1 joerg # can't use Xsed below, because $i might contain '/'
9631 1.1 joerg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
9632 1.1 joerg done
9633 1.1 joerg fi
9634 1.1 joerg case $tmp_deplibs in
9635 1.1 joerg *[!\ \ ]*)
9636 1.1 joerg echo
9637 1.1 joerg if test none = "$deplibs_check_method"; then
9638 1.1 joerg echo "*** Warning: inter-library dependencies are not supported in this platform."
9639 1.1 joerg else
9640 1.1 joerg echo "*** Warning: inter-library dependencies are not known to be supported."
9641 1.1 joerg fi
9642 1.1 joerg echo "*** All declared inter-library dependencies are being dropped."
9643 1.1 joerg droppeddeps=yes
9644 1.1 joerg ;;
9645 1.1 joerg esac
9646 1.1 joerg ;;
9647 1.1 joerg esac
9648 1.1 joerg versuffix=$versuffix_save
9649 1.1 joerg major=$major_save
9650 1.1 joerg release=$release_save
9651 1.1 joerg libname=$libname_save
9652 1.1 joerg name=$name_save
9653 1.1 joerg
9654 1.1 joerg case $host in
9655 1.1 joerg *-*-rhapsody* | *-*-darwin1.[012])
9656 1.1 joerg # On Rhapsody replace the C library with the System framework
9657 1.1 joerg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
9658 1.1 joerg ;;
9659 1.1 joerg esac
9660 1.1 joerg
9661 1.1 joerg if test yes = "$droppeddeps"; then
9662 1.1 joerg if test yes = "$module"; then
9663 1.1 joerg echo
9664 1.1 joerg echo "*** Warning: libtool could not satisfy all declared inter-library"
9665 1.1 joerg $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
9666 1.1 joerg echo "*** a static module, that should work as long as the dlopening"
9667 1.1 joerg echo "*** application is linked with the -dlopen flag."
9668 1.1 joerg if test -z "$global_symbol_pipe"; then
9669 1.1 joerg echo
9670 1.1 joerg echo "*** However, this would only work if libtool was able to extract symbol"
9671 1.1 joerg echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
9672 1.1 joerg echo "*** not find such a program. So, this module is probably useless."
9673 1.1 joerg echo "*** 'nm' from GNU binutils and a full rebuild may help."
9674 1.1 joerg fi
9675 1.1 joerg if test no = "$build_old_libs"; then
9676 1.1 joerg oldlibs=$output_objdir/$libname.$libext
9677 1.1 joerg build_libtool_libs=module
9678 1.1 joerg build_old_libs=yes
9679 1.1 joerg else
9680 1.1 joerg build_libtool_libs=no
9681 1.1 joerg fi
9682 1.1 joerg else
9683 1.1 joerg echo "*** The inter-library dependencies that have been dropped here will be"
9684 1.1 joerg echo "*** automatically added whenever a program is linked with this library"
9685 1.1 joerg echo "*** or is declared to -dlopen it."
9686 1.1 joerg
9687 1.1 joerg if test no = "$allow_undefined"; then
9688 1.1 joerg echo
9689 1.1 joerg echo "*** Since this library must not contain undefined symbols,"
9690 1.1 joerg echo "*** because either the platform does not support them or"
9691 1.1 joerg echo "*** it was explicitly requested with -no-undefined,"
9692 1.1 joerg echo "*** libtool will only create a static version of it."
9693 1.1 joerg if test no = "$build_old_libs"; then
9694 1.1 joerg oldlibs=$output_objdir/$libname.$libext
9695 1.1 joerg build_libtool_libs=module
9696 1.1 joerg build_old_libs=yes
9697 1.1 joerg else
9698 1.1 joerg build_libtool_libs=no
9699 1.1 joerg fi
9700 1.1 joerg fi
9701 1.1 joerg fi
9702 1.1 joerg fi
9703 1.1 joerg # Done checking deplibs!
9704 1.1 joerg deplibs=$newdeplibs
9705 1.1 joerg fi
9706 1.1 joerg # Time to change all our "foo.ltframework" stuff back to "-framework foo"
9707 1.1 joerg case $host in
9708 1.1 joerg *-*-darwin*)
9709 1.1 joerg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9710 1.1 joerg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9711 1.1 joerg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9712 1.1 joerg ;;
9713 1.1 joerg esac
9714 1.1 joerg
9715 1.1 joerg # move library search paths that coincide with paths to not yet
9716 1.1 joerg # installed libraries to the beginning of the library search list
9717 1.1 joerg new_libs=
9718 1.1 joerg for path in $notinst_path; do
9719 1.1 joerg case " $new_libs " in
9720 1.1 joerg *" -L$path/$objdir "*) ;;
9721 1.1 joerg *)
9722 1.1 joerg case " $deplibs " in
9723 1.1 joerg *" -L$path/$objdir "*)
9724 1.1 joerg func_append new_libs " -L$path/$objdir" ;;
9725 1.1 joerg esac
9726 1.1 joerg ;;
9727 1.1 joerg esac
9728 1.1 joerg done
9729 1.1 joerg for deplib in $deplibs; do
9730 1.1 joerg case $deplib in
9731 1.1 joerg -L*)
9732 1.1 joerg case " $new_libs " in
9733 1.1 joerg *" $deplib "*) ;;
9734 1.1 joerg *) func_append new_libs " $deplib" ;;
9735 1.1 joerg esac
9736 1.1 joerg ;;
9737 1.1 joerg *) func_append new_libs " $deplib" ;;
9738 1.1 joerg esac
9739 1.1 joerg done
9740 1.1 joerg deplibs=$new_libs
9741 1.1 joerg
9742 1.1 joerg # All the library-specific variables (install_libdir is set above).
9743 1.1 joerg library_names=
9744 1.1 joerg old_library=
9745 1.1 joerg dlname=
9746 1.1 joerg
9747 1.1 joerg # Test again, we may have decided not to build it any more
9748 1.1 joerg if test yes = "$build_libtool_libs"; then
9749 1.1 joerg # Remove $wl instances when linking with ld.
9750 1.1 joerg # FIXME: should test the right _cmds variable.
9751 1.1 joerg case $archive_cmds in
9752 1.1 joerg *\$LD\ *) wl= ;;
9753 1.1 joerg esac
9754 1.1 joerg if test yes = "$hardcode_into_libs"; then
9755 1.1 joerg # Hardcode the library paths
9756 1.1 joerg hardcode_libdirs=
9757 1.1 joerg dep_rpath=
9758 1.1 joerg rpath=$finalize_rpath
9759 1.1 joerg test relink = "$opt_mode" || rpath=$compile_rpath$rpath
9760 1.1 joerg for libdir in $rpath; do
9761 1.1 joerg if test -n "$hardcode_libdir_flag_spec"; then
9762 1.1 joerg if test -n "$hardcode_libdir_separator"; then
9763 1.1 joerg func_replace_sysroot "$libdir"
9764 1.1 joerg libdir=$func_replace_sysroot_result
9765 1.1 joerg if test -z "$hardcode_libdirs"; then
9766 1.1 joerg hardcode_libdirs=$libdir
9767 1.1 joerg else
9768 1.1 joerg # Just accumulate the unique libdirs.
9769 1.1 joerg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
9770 1.1 joerg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
9771 1.1 joerg ;;
9772 1.1 joerg *)
9773 1.1 joerg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
9774 1.1 joerg ;;
9775 1.1 joerg esac
9776 1.1 joerg fi
9777 1.1 joerg else
9778 1.1 joerg eval flag=\"$hardcode_libdir_flag_spec\"
9779 1.1 joerg func_append dep_rpath " $flag"
9780 1.1 joerg fi
9781 1.1 joerg elif test -n "$runpath_var"; then
9782 1.1 joerg case "$perm_rpath " in
9783 1.1 joerg *" $libdir "*) ;;
9784 1.1 joerg *) func_append perm_rpath " $libdir" ;;
9785 1.1 joerg esac
9786 1.1 joerg fi
9787 1.1 joerg done
9788 1.1 joerg # Substitute the hardcoded libdirs into the rpath.
9789 1.1 joerg if test -n "$hardcode_libdir_separator" &&
9790 1.1 joerg test -n "$hardcode_libdirs"; then
9791 1.1 joerg libdir=$hardcode_libdirs
9792 1.1 joerg eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
9793 1.1 joerg fi
9794 1.1 joerg if test -n "$runpath_var" && test -n "$perm_rpath"; then
9795 1.1 joerg # We should set the runpath_var.
9796 1.1 joerg rpath=
9797 1.1 joerg for dir in $perm_rpath; do
9798 1.1 joerg func_append rpath "$dir:"
9799 1.1 joerg done
9800 1.1 joerg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
9801 1.1 joerg fi
9802 1.1 joerg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
9803 1.1 joerg fi
9804 1.1 joerg
9805 1.1 joerg shlibpath=$finalize_shlibpath
9806 1.1 joerg test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
9807 1.1 joerg if test -n "$shlibpath"; then
9808 1.1 joerg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
9809 1.1 joerg fi
9810 1.1 joerg
9811 1.1 joerg # Get the real and link names of the library.
9812 1.1 joerg eval shared_ext=\"$shrext_cmds\"
9813 1.1 joerg eval library_names=\"$library_names_spec\"
9814 1.1 joerg set dummy $library_names
9815 1.1 joerg shift
9816 1.1 joerg realname=$1
9817 1.1 joerg shift
9818 1.1 joerg
9819 1.1 joerg if test -n "$soname_spec"; then
9820 1.1 joerg eval soname=\"$soname_spec\"
9821 1.1 joerg else
9822 1.1 joerg soname=$realname
9823 1.1 joerg fi
9824 1.1 joerg if test -z "$dlname"; then
9825 1.1 joerg dlname=$soname
9826 1.1 joerg fi
9827 1.1 joerg
9828 1.1 joerg lib=$output_objdir/$realname
9829 1.1 joerg linknames=
9830 1.1 joerg for link
9831 1.1 joerg do
9832 1.1 joerg func_append linknames " $link"
9833 1.1 joerg done
9834 1.1 joerg
9835 1.1 joerg # Use standard objects if they are pic
9836 1.1 joerg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
9837 1.1 joerg test "X$libobjs" = "X " && libobjs=
9838 1.1 joerg
9839 1.1 joerg delfiles=
9840 1.1 joerg if test -n "$export_symbols" && test -n "$include_expsyms"; then
9841 1.1 joerg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
9842 1.1 joerg export_symbols=$output_objdir/$libname.uexp
9843 1.1 joerg func_append delfiles " $export_symbols"
9844 1.1 joerg fi
9845 1.1 joerg
9846 1.1 joerg orig_export_symbols=
9847 1.1 joerg case $host_os in
9848 1.1 joerg cygwin* | mingw* | cegcc*)
9849 1.1 joerg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
9850 1.1 joerg # exporting using user supplied symfile
9851 1.1 joerg func_dll_def_p "$export_symbols" || {
9852 1.1 joerg # and it's NOT already a .def file. Must figure out
9853 1.1 joerg # which of the given symbols are data symbols and tag
9854 1.1 joerg # them as such. So, trigger use of export_symbols_cmds.
9855 1.1 joerg # export_symbols gets reassigned inside the "prepare
9856 1.1 joerg # the list of exported symbols" if statement, so the
9857 1.1 joerg # include_expsyms logic still works.
9858 1.1 joerg orig_export_symbols=$export_symbols
9859 1.1 joerg export_symbols=
9860 1.1 joerg always_export_symbols=yes
9861 1.1 joerg }
9862 1.1 joerg fi
9863 1.1 joerg ;;
9864 1.1 joerg esac
9865 1.1 joerg
9866 1.1 joerg # Prepare the list of exported symbols
9867 1.1 joerg if test -z "$export_symbols"; then
9868 1.1 joerg if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
9869 1.1 joerg func_verbose "generating symbol list for '$libname.la'"
9870 1.1 joerg export_symbols=$output_objdir/$libname.exp
9871 1.1 joerg $opt_dry_run || $RM $export_symbols
9872 1.1 joerg cmds=$export_symbols_cmds
9873 1.1 joerg save_ifs=$IFS; IFS='~'
9874 1.1 joerg for cmd1 in $cmds; do
9875 1.1 joerg IFS=$save_ifs
9876 1.1 joerg # Take the normal branch if the nm_file_list_spec branch
9877 1.1 joerg # doesn't work or if tool conversion is not needed.
9878 1.1 joerg case $nm_file_list_spec~$to_tool_file_cmd in
9879 1.1 joerg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
9880 1.1 joerg try_normal_branch=yes
9881 1.1 joerg eval cmd=\"$cmd1\"
9882 1.1 joerg func_len " $cmd"
9883 1.1 joerg len=$func_len_result
9884 1.1 joerg ;;
9885 1.1 joerg *)
9886 1.1 joerg try_normal_branch=no
9887 1.1 joerg ;;
9888 1.1 joerg esac
9889 1.1 joerg if test yes = "$try_normal_branch" \
9890 1.1 joerg && { test "$len" -lt "$max_cmd_len" \
9891 1.1 joerg || test "$max_cmd_len" -le -1; }
9892 1.1 joerg then
9893 1.1 joerg func_show_eval "$cmd" 'exit $?'
9894 1.1 joerg skipped_export=false
9895 1.1 joerg elif test -n "$nm_file_list_spec"; then
9896 1.1 joerg func_basename "$output"
9897 1.1 joerg output_la=$func_basename_result
9898 1.1 joerg save_libobjs=$libobjs
9899 1.1 joerg save_output=$output
9900 1.1 joerg output=$output_objdir/$output_la.nm
9901 1.1 joerg func_to_tool_file "$output"
9902 1.1 joerg libobjs=$nm_file_list_spec$func_to_tool_file_result
9903 1.1 joerg func_append delfiles " $output"
9904 1.1 joerg func_verbose "creating $NM input file list: $output"
9905 1.1 joerg for obj in $save_libobjs; do
9906 1.1 joerg func_to_tool_file "$obj"
9907 1.1 joerg $ECHO "$func_to_tool_file_result"
9908 1.1 joerg done > "$output"
9909 1.1 joerg eval cmd=\"$cmd1\"
9910 1.1 joerg func_show_eval "$cmd" 'exit $?'
9911 1.1 joerg output=$save_output
9912 1.1 joerg libobjs=$save_libobjs
9913 1.1 joerg skipped_export=false
9914 1.1 joerg else
9915 1.1 joerg # The command line is too long to execute in one step.
9916 1.1 joerg func_verbose "using reloadable object file for export list..."
9917 1.1 joerg skipped_export=:
9918 1.1 joerg # Break out early, otherwise skipped_export may be
9919 1.1 joerg # set to false by a later but shorter cmd.
9920 1.1 joerg break
9921 1.1 joerg fi
9922 1.1 joerg done
9923 1.1 joerg IFS=$save_ifs
9924 1.1 joerg if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
9925 1.1 joerg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
9926 1.1 joerg func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
9927 1.1 joerg fi
9928 1.1 joerg fi
9929 1.1 joerg fi
9930 1.1 joerg
9931 1.1 joerg if test -n "$export_symbols" && test -n "$include_expsyms"; then
9932 1.1 joerg tmp_export_symbols=$export_symbols
9933 1.1 joerg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
9934 1.1 joerg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
9935 1.1 joerg fi
9936 1.1 joerg
9937 1.1 joerg if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
9938 1.1 joerg # The given exports_symbols file has to be filtered, so filter it.
9939 1.1 joerg func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
9940 1.1 joerg # FIXME: $output_objdir/$libname.filter potentially contains lots of
9941 1.1 joerg # 's' commands, which not all seds can handle. GNU sed should be fine
9942 1.1 joerg # though. Also, the filter scales superlinearly with the number of
9943 1.1 joerg # global variables. join(1) would be nice here, but unfortunately
9944 1.1 joerg # isn't a blessed tool.
9945 1.1 joerg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
9946 1.1 joerg func_append delfiles " $export_symbols $output_objdir/$libname.filter"
9947 1.1 joerg export_symbols=$output_objdir/$libname.def
9948 1.1 joerg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
9949 1.1 joerg fi
9950 1.1 joerg
9951 1.1 joerg tmp_deplibs=
9952 1.1 joerg for test_deplib in $deplibs; do
9953 1.1 joerg case " $convenience " in
9954 1.1 joerg *" $test_deplib "*) ;;
9955 1.1 joerg *)
9956 1.1 joerg func_append tmp_deplibs " $test_deplib"
9957 1.1 joerg ;;
9958 1.1 joerg esac
9959 1.1 joerg done
9960 1.1 joerg deplibs=$tmp_deplibs
9961 1.1 joerg
9962 1.1 joerg if test -n "$convenience"; then
9963 1.1 joerg if test -n "$whole_archive_flag_spec" &&
9964 1.1 joerg test yes = "$compiler_needs_object" &&
9965 1.1 joerg test -z "$libobjs"; then
9966 1.1 joerg # extract the archives, so we have objects to list.
9967 1.1 joerg # TODO: could optimize this to just extract one archive.
9968 1.1 joerg whole_archive_flag_spec=
9969 1.1 joerg fi
9970 1.1 joerg if test -n "$whole_archive_flag_spec"; then
9971 1.1 joerg save_libobjs=$libobjs
9972 1.1 joerg eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
9973 1.1 joerg test "X$libobjs" = "X " && libobjs=
9974 1.1 joerg else
9975 1.1 joerg gentop=$output_objdir/${outputname}x
9976 1.1 joerg func_append generated " $gentop"
9977 1.1 joerg
9978 1.1 joerg func_extract_archives $gentop $convenience
9979 1.1 joerg func_append libobjs " $func_extract_archives_result"
9980 1.1 joerg test "X$libobjs" = "X " && libobjs=
9981 1.1 joerg fi
9982 1.1 joerg fi
9983 1.1 joerg
9984 1.1 joerg if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
9985 1.1 joerg eval flag=\"$thread_safe_flag_spec\"
9986 1.1 joerg func_append linker_flags " $flag"
9987 1.1 joerg fi
9988 1.1 joerg
9989 1.1 joerg # Make a backup of the uninstalled library when relinking
9990 1.1 joerg if test relink = "$opt_mode"; then
9991 1.1 joerg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
9992 1.1 joerg fi
9993 1.1 joerg
9994 1.1 joerg # Do each of the archive commands.
9995 1.1 joerg if test yes = "$module" && test -n "$module_cmds"; then
9996 1.1 joerg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
9997 1.1 joerg eval test_cmds=\"$module_expsym_cmds\"
9998 1.1 joerg cmds=$module_expsym_cmds
9999 1.1 joerg else
10000 1.1 joerg eval test_cmds=\"$module_cmds\"
10001 1.1 joerg cmds=$module_cmds
10002 1.1 joerg fi
10003 1.1 joerg else
10004 1.1 joerg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10005 1.1 joerg eval test_cmds=\"$archive_expsym_cmds\"
10006 1.1 joerg cmds=$archive_expsym_cmds
10007 1.1 joerg else
10008 1.1 joerg eval test_cmds=\"$archive_cmds\"
10009 1.1 joerg cmds=$archive_cmds
10010 1.1 joerg fi
10011 1.1 joerg fi
10012 1.1 joerg
10013 1.1 joerg if test : != "$skipped_export" &&
10014 1.1 joerg func_len " $test_cmds" &&
10015 1.1 joerg len=$func_len_result &&
10016 1.1 joerg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
10017 1.1 joerg :
10018 1.1 joerg else
10019 1.1 joerg # The command line is too long to link in one step, link piecewise
10020 1.1 joerg # or, if using GNU ld and skipped_export is not :, use a linker
10021 1.1 joerg # script.
10022 1.1 joerg
10023 1.1 joerg # Save the value of $output and $libobjs because we want to
10024 1.1 joerg # use them later. If we have whole_archive_flag_spec, we
10025 1.1 joerg # want to use save_libobjs as it was before
10026 1.1 joerg # whole_archive_flag_spec was expanded, because we can't
10027 1.1 joerg # assume the linker understands whole_archive_flag_spec.
10028 1.1 joerg # This may have to be revisited, in case too many
10029 1.1 joerg # convenience libraries get linked in and end up exceeding
10030 1.1 joerg # the spec.
10031 1.1 joerg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
10032 1.1 joerg save_libobjs=$libobjs
10033 1.1 joerg fi
10034 1.1 joerg save_output=$output
10035 1.1 joerg func_basename "$output"
10036 1.1 joerg output_la=$func_basename_result
10037 1.1 joerg
10038 1.1 joerg # Clear the reloadable object creation command queue and
10039 1.1 joerg # initialize k to one.
10040 1.1 joerg test_cmds=
10041 1.1 joerg concat_cmds=
10042 1.1 joerg objlist=
10043 1.1 joerg last_robj=
10044 1.1 joerg k=1
10045 1.1 joerg
10046 1.1 joerg if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
10047 1.1 joerg output=$output_objdir/$output_la.lnkscript
10048 1.1 joerg func_verbose "creating GNU ld script: $output"
10049 1.1 joerg echo 'INPUT (' > $output
10050 1.1 joerg for obj in $save_libobjs
10051 1.1 joerg do
10052 1.1 joerg func_to_tool_file "$obj"
10053 1.1 joerg $ECHO "$func_to_tool_file_result" >> $output
10054 1.1 joerg done
10055 1.1 joerg echo ')' >> $output
10056 1.1 joerg func_append delfiles " $output"
10057 1.1 joerg func_to_tool_file "$output"
10058 1.1 joerg output=$func_to_tool_file_result
10059 1.1 joerg elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
10060 1.1 joerg output=$output_objdir/$output_la.lnk
10061 1.1 joerg func_verbose "creating linker input file list: $output"
10062 1.1 joerg : > $output
10063 1.1 joerg set x $save_libobjs
10064 1.1 joerg shift
10065 1.1 joerg firstobj=
10066 1.1 joerg if test yes = "$compiler_needs_object"; then
10067 1.1 joerg firstobj="$1 "
10068 1.1 joerg shift
10069 1.1 joerg fi
10070 1.1 joerg for obj
10071 1.1 joerg do
10072 1.1 joerg func_to_tool_file "$obj"
10073 1.1 joerg $ECHO "$func_to_tool_file_result" >> $output
10074 1.1 joerg done
10075 1.1 joerg func_append delfiles " $output"
10076 1.1 joerg func_to_tool_file "$output"
10077 1.1 joerg output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
10078 1.1 joerg else
10079 1.1 joerg if test -n "$save_libobjs"; then
10080 1.1 joerg func_verbose "creating reloadable object files..."
10081 1.1 joerg output=$output_objdir/$output_la-$k.$objext
10082 1.1 joerg eval test_cmds=\"$reload_cmds\"
10083 1.1 joerg func_len " $test_cmds"
10084 1.1 joerg len0=$func_len_result
10085 1.1 joerg len=$len0
10086 1.1 joerg
10087 1.1 joerg # Loop over the list of objects to be linked.
10088 1.1 joerg for obj in $save_libobjs
10089 1.1 joerg do
10090 1.1 joerg func_len " $obj"
10091 1.1 joerg func_arith $len + $func_len_result
10092 1.1 joerg len=$func_arith_result
10093 1.1 joerg if test -z "$objlist" ||
10094 1.1 joerg test "$len" -lt "$max_cmd_len"; then
10095 1.1 joerg func_append objlist " $obj"
10096 1.1 joerg else
10097 1.1 joerg # The command $test_cmds is almost too long, add a
10098 1.1 joerg # command to the queue.
10099 1.1 joerg if test 1 -eq "$k"; then
10100 1.1 joerg # The first file doesn't have a previous command to add.
10101 1.1 joerg reload_objs=$objlist
10102 1.1 joerg eval concat_cmds=\"$reload_cmds\"
10103 1.1 joerg else
10104 1.1 joerg # All subsequent reloadable object files will link in
10105 1.1 joerg # the last one created.
10106 1.1 joerg reload_objs="$objlist $last_robj"
10107 1.1 joerg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
10108 1.1 joerg fi
10109 1.1 joerg last_robj=$output_objdir/$output_la-$k.$objext
10110 1.1 joerg func_arith $k + 1
10111 1.1 joerg k=$func_arith_result
10112 1.1 joerg output=$output_objdir/$output_la-$k.$objext
10113 1.1 joerg objlist=" $obj"
10114 1.1 joerg func_len " $last_robj"
10115 1.1 joerg func_arith $len0 + $func_len_result
10116 1.1 joerg len=$func_arith_result
10117 1.1 joerg fi
10118 1.1 joerg done
10119 1.1 joerg # Handle the remaining objects by creating one last
10120 1.1 joerg # reloadable object file. All subsequent reloadable object
10121 1.1 joerg # files will link in the last one created.
10122 1.1 joerg test -z "$concat_cmds" || concat_cmds=$concat_cmds~
10123 1.1 joerg reload_objs="$objlist $last_robj"
10124 1.1 joerg eval concat_cmds=\"\$concat_cmds$reload_cmds\"
10125 1.1 joerg if test -n "$last_robj"; then
10126 1.1 joerg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
10127 1.1 joerg fi
10128 1.1 joerg func_append delfiles " $output"
10129 1.1 joerg
10130 1.1 joerg else
10131 1.1 joerg output=
10132 1.1 joerg fi
10133 1.1 joerg
10134 1.1 joerg ${skipped_export-false} && {
10135 1.1 joerg func_verbose "generating symbol list for '$libname.la'"
10136 1.1 joerg export_symbols=$output_objdir/$libname.exp
10137 1.1 joerg $opt_dry_run || $RM $export_symbols
10138 1.1 joerg libobjs=$output
10139 1.1 joerg # Append the command to create the export file.
10140 1.1 joerg test -z "$concat_cmds" || concat_cmds=$concat_cmds~
10141 1.1 joerg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
10142 1.1 joerg if test -n "$last_robj"; then
10143 1.1 joerg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
10144 1.1 joerg fi
10145 1.1 joerg }
10146 1.1 joerg
10147 1.1 joerg test -n "$save_libobjs" &&
10148 1.1 joerg func_verbose "creating a temporary reloadable object file: $output"
10149 1.1 joerg
10150 1.1 joerg # Loop through the commands generated above and execute them.
10151 1.1 joerg save_ifs=$IFS; IFS='~'
10152 1.1 joerg for cmd in $concat_cmds; do
10153 1.1 joerg IFS=$save_ifs
10154 1.1 joerg $opt_quiet || {
10155 1.1 joerg func_quote_arg expand,pretty "$cmd"
10156 1.1 joerg eval "func_echo $func_quote_arg_result"
10157 1.1 joerg }
10158 1.1 joerg $opt_dry_run || eval "$cmd" || {
10159 1.1 joerg lt_exit=$?
10160 1.1 joerg
10161 1.1 joerg # Restore the uninstalled library and exit
10162 1.1 joerg if test relink = "$opt_mode"; then
10163 1.1 joerg ( cd "$output_objdir" && \
10164 1.1 joerg $RM "${realname}T" && \
10165 1.1 joerg $MV "${realname}U" "$realname" )
10166 1.1 joerg fi
10167 1.1 joerg
10168 1.1 joerg exit $lt_exit
10169 1.1 joerg }
10170 1.1 joerg done
10171 1.1 joerg IFS=$save_ifs
10172 1.1 joerg
10173 1.1 joerg if test -n "$export_symbols_regex" && ${skipped_export-false}; then
10174 1.1 joerg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
10175 1.1 joerg func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
10176 1.1 joerg fi
10177 1.1 joerg fi
10178 1.1 joerg
10179 1.1 joerg ${skipped_export-false} && {
10180 1.1 joerg if test -n "$export_symbols" && test -n "$include_expsyms"; then
10181 1.1 joerg tmp_export_symbols=$export_symbols
10182 1.1 joerg test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
10183 1.1 joerg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
10184 1.1 joerg fi
10185 1.1 joerg
10186 1.1 joerg if test -n "$orig_export_symbols"; then
10187 1.1 joerg # The given exports_symbols file has to be filtered, so filter it.
10188 1.1 joerg func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
10189 1.1 joerg # FIXME: $output_objdir/$libname.filter potentially contains lots of
10190 1.1 joerg # 's' commands, which not all seds can handle. GNU sed should be fine
10191 1.1 joerg # though. Also, the filter scales superlinearly with the number of
10192 1.1 joerg # global variables. join(1) would be nice here, but unfortunately
10193 1.1 joerg # isn't a blessed tool.
10194 1.1 joerg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
10195 1.1 joerg func_append delfiles " $export_symbols $output_objdir/$libname.filter"
10196 1.1 joerg export_symbols=$output_objdir/$libname.def
10197 1.1 joerg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
10198 1.1 joerg fi
10199 1.1 joerg }
10200 1.1 joerg
10201 1.1 joerg libobjs=$output
10202 1.1 joerg # Restore the value of output.
10203 1.1 joerg output=$save_output
10204 1.1 joerg
10205 1.1 joerg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
10206 1.1 joerg eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
10207 1.1 joerg test "X$libobjs" = "X " && libobjs=
10208 1.1 joerg fi
10209 1.1 joerg # Expand the library linking commands again to reset the
10210 1.1 joerg # value of $libobjs for piecewise linking.
10211 1.1 joerg
10212 1.1 joerg # Do each of the archive commands.
10213 1.1 joerg if test yes = "$module" && test -n "$module_cmds"; then
10214 1.1 joerg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
10215 1.1 joerg cmds=$module_expsym_cmds
10216 1.1 joerg else
10217 1.1 joerg cmds=$module_cmds
10218 1.1 joerg fi
10219 1.1 joerg else
10220 1.1 joerg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10221 1.1 joerg cmds=$archive_expsym_cmds
10222 1.1 joerg else
10223 1.1 joerg cmds=$archive_cmds
10224 1.1 joerg fi
10225 1.1 joerg fi
10226 1.1 joerg fi
10227 1.1 joerg
10228 1.1 joerg if test -n "$delfiles"; then
10229 1.1 joerg # Append the command to remove temporary files to $cmds.
10230 1.1 joerg eval cmds=\"\$cmds~\$RM $delfiles\"
10231 1.1 joerg fi
10232 1.1 joerg
10233 1.1 joerg # Add any objects from preloaded convenience libraries
10234 1.1 joerg if test -n "$dlprefiles"; then
10235 1.1 joerg gentop=$output_objdir/${outputname}x
10236 1.1 joerg func_append generated " $gentop"
10237 1.1 joerg
10238 1.1 joerg func_extract_archives $gentop $dlprefiles
10239 1.1 joerg func_append libobjs " $func_extract_archives_result"
10240 1.1 joerg test "X$libobjs" = "X " && libobjs=
10241 1.1 joerg fi
10242 1.1 joerg
10243 1.1 joerg save_ifs=$IFS; IFS='~'
10244 1.1 joerg for cmd in $cmds; do
10245 1.1 joerg IFS=$sp$nl
10246 1.1 joerg eval cmd=\"$cmd\"
10247 1.1 joerg IFS=$save_ifs
10248 1.1 joerg $opt_quiet || {
10249 1.1 joerg func_quote_arg expand,pretty "$cmd"
10250 1.1 joerg eval "func_echo $func_quote_arg_result"
10251 1.1 joerg }
10252 1.1 joerg $opt_dry_run || eval "$cmd" || {
10253 1.1 joerg lt_exit=$?
10254 1.1 joerg
10255 1.1 joerg # Restore the uninstalled library and exit
10256 1.1 joerg if test relink = "$opt_mode"; then
10257 1.1 joerg ( cd "$output_objdir" && \
10258 1.1 joerg $RM "${realname}T" && \
10259 1.1 joerg $MV "${realname}U" "$realname" )
10260 1.1 joerg fi
10261 1.1 joerg
10262 1.1 joerg exit $lt_exit
10263 1.1 joerg }
10264 1.1 joerg done
10265 1.1 joerg IFS=$save_ifs
10266 1.1 joerg
10267 1.1 joerg # Restore the uninstalled library and exit
10268 1.1 joerg if test relink = "$opt_mode"; then
10269 1.1 joerg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
10270 1.1 joerg
10271 1.1 joerg if test -n "$convenience"; then
10272 1.1 joerg if test -z "$whole_archive_flag_spec"; then
10273 1.1 joerg func_show_eval '${RM}r "$gentop"'
10274 1.1 joerg fi
10275 1.1 joerg fi
10276 1.1 joerg
10277 1.1 joerg exit $EXIT_SUCCESS
10278 1.1 joerg fi
10279 1.1 joerg
10280 1.1 joerg # Create links to the real library.
10281 1.1 joerg for linkname in $linknames; do
10282 1.1 joerg if test "$realname" != "$linkname"; then
10283 1.1 joerg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
10284 1.1 joerg fi
10285 1.1 joerg done
10286 1.1 joerg
10287 1.1 joerg # If -module or -export-dynamic was specified, set the dlname.
10288 1.1 joerg if test yes = "$module" || test yes = "$export_dynamic"; then
10289 1.1 joerg # On all known operating systems, these are identical.
10290 1.1 joerg dlname=$soname
10291 1.1 joerg fi
10292 1.1 joerg fi
10293 1.1 joerg ;;
10294 1.1 joerg
10295 1.1 joerg obj)
10296 1.1 joerg if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
10297 1.1 joerg func_warning "'-dlopen' is ignored for objects"
10298 1.1 joerg fi
10299 1.1 joerg
10300 1.1 joerg case " $deplibs" in
10301 1.1 joerg *\ -l* | *\ -L*)
10302 1.1 joerg func_warning "'-l' and '-L' are ignored for objects" ;;
10303 1.1 joerg esac
10304 1.1 joerg
10305 1.1 joerg test -n "$rpath" && \
10306 1.1 joerg func_warning "'-rpath' is ignored for objects"
10307 1.1 joerg
10308 1.1 joerg test -n "$xrpath" && \
10309 1.1 joerg func_warning "'-R' is ignored for objects"
10310 1.1 joerg
10311 1.1 joerg test -n "$vinfo" && \
10312 1.1 joerg func_warning "'-version-info' is ignored for objects"
10313 1.1 joerg
10314 1.1 joerg test -n "$release" && \
10315 1.1 joerg func_warning "'-release' is ignored for objects"
10316 1.1 joerg
10317 1.1 joerg case $output in
10318 1.1 joerg *.lo)
10319 1.1 joerg test -n "$objs$old_deplibs" && \
10320 1.1 joerg func_fatal_error "cannot build library object '$output' from non-libtool objects"
10321 1.1 joerg
10322 1.1 joerg libobj=$output
10323 1.1 joerg func_lo2o "$libobj"
10324 1.1 joerg obj=$func_lo2o_result
10325 1.1 joerg ;;
10326 1.1 joerg *)
10327 1.1 joerg libobj=
10328 1.1 joerg obj=$output
10329 1.1 joerg ;;
10330 1.1 joerg esac
10331 1.1 joerg
10332 1.1 joerg # Delete the old objects.
10333 1.1 joerg $opt_dry_run || $RM $obj $libobj
10334 1.1 joerg
10335 1.1 joerg # Objects from convenience libraries. This assumes
10336 1.1 joerg # single-version convenience libraries. Whenever we create
10337 1.1 joerg # different ones for PIC/non-PIC, this we'll have to duplicate
10338 1.1 joerg # the extraction.
10339 1.1 joerg reload_conv_objs=
10340 1.1 joerg gentop=
10341 1.1 joerg # if reload_cmds runs $LD directly, get rid of -Wl from
10342 1.1 joerg # whole_archive_flag_spec and hope we can get by with turning comma
10343 1.1 joerg # into space.
10344 1.1 joerg case $reload_cmds in
10345 1.1 joerg *\$LD[\ \$]*) wl= ;;
10346 1.1 joerg esac
10347 1.1 joerg if test -n "$convenience"; then
10348 1.1 joerg if test -n "$whole_archive_flag_spec"; then
10349 1.1 joerg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
10350 1.1 joerg test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
10351 1.1 joerg reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
10352 1.1 joerg else
10353 1.1 joerg gentop=$output_objdir/${obj}x
10354 1.1 joerg func_append generated " $gentop"
10355 1.1 joerg
10356 1.1 joerg func_extract_archives $gentop $convenience
10357 1.1 joerg reload_conv_objs="$reload_objs $func_extract_archives_result"
10358 1.1 joerg fi
10359 1.1 joerg fi
10360 1.1 joerg
10361 1.1 joerg # If we're not building shared, we need to use non_pic_objs
10362 1.1 joerg test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
10363 1.1 joerg
10364 1.1 joerg # Create the old-style object.
10365 1.1 joerg reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
10366 1.1 joerg
10367 1.1 joerg output=$obj
10368 1.1 joerg func_execute_cmds "$reload_cmds" 'exit $?'
10369 1.1 joerg
10370 1.1 joerg # Exit if we aren't doing a library object file.
10371 1.1 joerg if test -z "$libobj"; then
10372 1.1 joerg if test -n "$gentop"; then
10373 1.1 joerg func_show_eval '${RM}r "$gentop"'
10374 1.1 joerg fi
10375 1.1 joerg
10376 1.1 joerg exit $EXIT_SUCCESS
10377 1.1 joerg fi
10378 1.1 joerg
10379 1.1 joerg test yes = "$build_libtool_libs" || {
10380 1.1 joerg if test -n "$gentop"; then
10381 1.1 joerg func_show_eval '${RM}r "$gentop"'
10382 1.1 joerg fi
10383 1.1 joerg
10384 1.1 joerg # Create an invalid libtool object if no PIC, so that we don't
10385 1.1 joerg # accidentally link it into a program.
10386 1.1 joerg # $show "echo timestamp > $libobj"
10387 1.1 joerg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
10388 1.1 joerg exit $EXIT_SUCCESS
10389 1.1 joerg }
10390 1.1 joerg
10391 1.1 joerg if test -n "$pic_flag" || test default != "$pic_mode"; then
10392 1.1 joerg # Only do commands if we really have different PIC objects.
10393 1.1 joerg reload_objs="$libobjs $reload_conv_objs"
10394 1.1 joerg output=$libobj
10395 1.1 joerg func_execute_cmds "$reload_cmds" 'exit $?'
10396 1.1 joerg fi
10397 1.1 joerg
10398 1.1 joerg if test -n "$gentop"; then
10399 1.1 joerg func_show_eval '${RM}r "$gentop"'
10400 1.1 joerg fi
10401 1.1 joerg
10402 1.1 joerg exit $EXIT_SUCCESS
10403 1.1 joerg ;;
10404 1.1 joerg
10405 1.1 joerg prog)
10406 1.1 joerg case $host in
10407 1.1 joerg *cygwin*) func_stripname '' '.exe' "$output"
10408 1.1 joerg output=$func_stripname_result.exe;;
10409 1.1 joerg esac
10410 1.1 joerg test -n "$vinfo" && \
10411 1.1 joerg func_warning "'-version-info' is ignored for programs"
10412 1.1 joerg
10413 1.1 joerg test -n "$release" && \
10414 1.1 joerg func_warning "'-release' is ignored for programs"
10415 1.1 joerg
10416 1.1 joerg $preload \
10417 1.1 joerg && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
10418 1.1 joerg && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
10419 1.1 joerg
10420 1.1 joerg case $host in
10421 1.1 joerg *-*-rhapsody* | *-*-darwin1.[012])
10422 1.1 joerg # On Rhapsody replace the C library is the System framework
10423 1.1 joerg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
10424 1.1 joerg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
10425 1.1 joerg ;;
10426 1.1 joerg esac
10427 1.1 joerg
10428 1.1 joerg case $host in
10429 1.1 joerg *-*-darwin*)
10430 1.1 joerg # Don't allow lazy linking, it breaks C++ global constructors
10431 1.1 joerg # But is supposedly fixed on 10.4 or later (yay!).
10432 1.1 joerg if test CXX = "$tagname"; then
10433 1.1 joerg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
10434 1.1 joerg 10.[0123])
10435 1.1 joerg func_append compile_command " $wl-bind_at_load"
10436 1.1 joerg func_append finalize_command " $wl-bind_at_load"
10437 1.1 joerg ;;
10438 1.1 joerg esac
10439 1.1 joerg fi
10440 1.1 joerg # Time to change all our "foo.ltframework" stuff back to "-framework foo"
10441 1.1 joerg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10442 1.1 joerg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10443 1.1 joerg ;;
10444 1.1 joerg esac
10445 1.1 joerg
10446 1.1 joerg
10447 1.1 joerg # move library search paths that coincide with paths to not yet
10448 1.1 joerg # installed libraries to the beginning of the library search list
10449 1.1 joerg new_libs=
10450 1.1 joerg for path in $notinst_path; do
10451 1.1 joerg case " $new_libs " in
10452 1.1 joerg *" -L$path/$objdir "*) ;;
10453 1.1 joerg *)
10454 1.1 joerg case " $compile_deplibs " in
10455 1.1 joerg *" -L$path/$objdir "*)
10456 1.1 joerg func_append new_libs " -L$path/$objdir" ;;
10457 1.1 joerg esac
10458 1.1 joerg ;;
10459 1.1 joerg esac
10460 1.1 joerg done
10461 1.1 joerg for deplib in $compile_deplibs; do
10462 1.1 joerg case $deplib in
10463 1.1 joerg -L*)
10464 1.1 joerg case " $new_libs " in
10465 1.1 joerg *" $deplib "*) ;;
10466 1.1 joerg *) func_append new_libs " $deplib" ;;
10467 1.1 joerg esac
10468 1.1 joerg ;;
10469 1.1 joerg *) func_append new_libs " $deplib" ;;
10470 1.1 joerg esac
10471 1.1 joerg done
10472 1.1 joerg compile_deplibs=$new_libs
10473 1.1 joerg
10474 1.1 joerg
10475 1.1 joerg func_append compile_command " $compile_deplibs"
10476 1.1 joerg func_append finalize_command " $finalize_deplibs"
10477 1.1 joerg
10478 1.1 joerg if test -n "$rpath$xrpath"; then
10479 1.1 joerg # If the user specified any rpath flags, then add them.
10480 1.1 joerg for libdir in $rpath $xrpath; do
10481 1.1 joerg # This is the magic to use -rpath.
10482 1.1 joerg case "$finalize_rpath " in
10483 1.1 joerg *" $libdir "*) ;;
10484 1.1 joerg *) func_append finalize_rpath " $libdir" ;;
10485 1.1 joerg esac
10486 1.1 joerg done
10487 1.1 joerg fi
10488 1.1 joerg
10489 1.1 joerg # Now hardcode the library paths
10490 1.1 joerg rpath=
10491 1.1 joerg hardcode_libdirs=
10492 1.1 joerg for libdir in $compile_rpath $finalize_rpath; do
10493 1.1 joerg if test -n "$hardcode_libdir_flag_spec"; then
10494 1.1 joerg if test -n "$hardcode_libdir_separator"; then
10495 1.1 joerg if test -z "$hardcode_libdirs"; then
10496 1.1 joerg hardcode_libdirs=$libdir
10497 1.1 joerg else
10498 1.1 joerg # Just accumulate the unique libdirs.
10499 1.1 joerg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10500 1.1 joerg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10501 1.1 joerg ;;
10502 1.1 joerg *)
10503 1.1 joerg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10504 1.1 joerg ;;
10505 1.1 joerg esac
10506 1.1 joerg fi
10507 1.1 joerg else
10508 1.1 joerg eval flag=\"$hardcode_libdir_flag_spec\"
10509 1.1 joerg func_append rpath " $flag"
10510 1.1 joerg fi
10511 1.1 joerg elif test -n "$runpath_var"; then
10512 1.1 joerg case "$perm_rpath " in
10513 1.1 joerg *" $libdir "*) ;;
10514 1.1 joerg *) func_append perm_rpath " $libdir" ;;
10515 1.1 joerg esac
10516 1.1 joerg fi
10517 1.1 joerg case $host in
10518 1.1 joerg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
10519 1.1 joerg testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
10520 1.1 joerg case :$dllsearchpath: in
10521 1.1 joerg *":$libdir:"*) ;;
10522 1.1 joerg ::) dllsearchpath=$libdir;;
10523 1.1 joerg *) func_append dllsearchpath ":$libdir";;
10524 1.1 joerg esac
10525 1.1 joerg case :$dllsearchpath: in
10526 1.1 joerg *":$testbindir:"*) ;;
10527 1.1 joerg ::) dllsearchpath=$testbindir;;
10528 1.1 joerg *) func_append dllsearchpath ":$testbindir";;
10529 1.1 joerg esac
10530 1.1 joerg ;;
10531 1.1 joerg esac
10532 1.1 joerg done
10533 1.1 joerg # Substitute the hardcoded libdirs into the rpath.
10534 1.1 joerg if test -n "$hardcode_libdir_separator" &&
10535 1.1 joerg test -n "$hardcode_libdirs"; then
10536 1.1 joerg libdir=$hardcode_libdirs
10537 1.1 joerg eval rpath=\" $hardcode_libdir_flag_spec\"
10538 1.1 joerg fi
10539 1.1 joerg compile_rpath=$rpath
10540 1.1 joerg
10541 1.1 joerg rpath=
10542 1.1 joerg hardcode_libdirs=
10543 1.1 joerg for libdir in $finalize_rpath; do
10544 1.1 joerg if test -n "$hardcode_libdir_flag_spec"; then
10545 1.1 joerg if test -n "$hardcode_libdir_separator"; then
10546 1.1 joerg if test -z "$hardcode_libdirs"; then
10547 1.1 joerg hardcode_libdirs=$libdir
10548 1.1 joerg else
10549 1.1 joerg # Just accumulate the unique libdirs.
10550 1.1 joerg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10551 1.1 joerg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10552 1.1 joerg ;;
10553 1.1 joerg *)
10554 1.1 joerg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10555 1.1 joerg ;;
10556 1.1 joerg esac
10557 1.1 joerg fi
10558 1.1 joerg else
10559 1.1 joerg eval flag=\"$hardcode_libdir_flag_spec\"
10560 1.1 joerg func_append rpath " $flag"
10561 1.1 joerg fi
10562 1.1 joerg elif test -n "$runpath_var"; then
10563 1.1 joerg case "$finalize_perm_rpath " in
10564 1.1 joerg *" $libdir "*) ;;
10565 1.1 joerg *) func_append finalize_perm_rpath " $libdir" ;;
10566 1.1 joerg esac
10567 1.1 joerg fi
10568 1.1 joerg done
10569 1.1 joerg # Substitute the hardcoded libdirs into the rpath.
10570 1.1 joerg if test -n "$hardcode_libdir_separator" &&
10571 1.1 joerg test -n "$hardcode_libdirs"; then
10572 1.1 joerg libdir=$hardcode_libdirs
10573 1.1 joerg eval rpath=\" $hardcode_libdir_flag_spec\"
10574 1.1 joerg fi
10575 1.1 joerg finalize_rpath=$rpath
10576 1.1 joerg
10577 1.1 joerg if test -n "$libobjs" && test yes = "$build_old_libs"; then
10578 1.1 joerg # Transform all the library objects into standard objects.
10579 1.1 joerg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10580 1.1 joerg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10581 1.1 joerg fi
10582 1.1 joerg
10583 1.1 joerg func_generate_dlsyms "$outputname" "@PROGRAM@" false
10584 1.1 joerg
10585 1.1 joerg # template prelinking step
10586 1.1 joerg if test -n "$prelink_cmds"; then
10587 1.1 joerg func_execute_cmds "$prelink_cmds" 'exit $?'
10588 1.1 joerg fi
10589 1.1 joerg
10590 1.1 joerg wrappers_required=:
10591 1.1 joerg case $host in
10592 1.1 joerg *cegcc* | *mingw32ce*)
10593 1.1 joerg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
10594 1.1 joerg wrappers_required=false
10595 1.1 joerg ;;
10596 1.1 joerg *cygwin* | *mingw* )
10597 1.1 joerg test yes = "$build_libtool_libs" || wrappers_required=false
10598 1.1 joerg ;;
10599 1.1 joerg *)
10600 1.1 joerg if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
10601 1.1 joerg wrappers_required=false
10602 1.1 joerg fi
10603 1.1 joerg ;;
10604 1.1 joerg esac
10605 1.1 joerg $wrappers_required || {
10606 1.1 joerg # Replace the output file specification.
10607 1.1 joerg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10608 1.1 joerg link_command=$compile_command$compile_rpath
10609 1.1 joerg
10610 1.1 joerg # We have no uninstalled library dependencies, so finalize right now.
10611 1.1 joerg exit_status=0
10612 1.1 joerg func_show_eval "$link_command" 'exit_status=$?'
10613 1.1 joerg
10614 1.1 joerg if test -n "$postlink_cmds"; then
10615 1.1 joerg func_to_tool_file "$output"
10616 1.1 joerg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10617 1.1 joerg func_execute_cmds "$postlink_cmds" 'exit $?'
10618 1.1 joerg fi
10619 1.1 joerg
10620 1.1 joerg # Delete the generated files.
10621 1.1 joerg if test -f "$output_objdir/${outputname}S.$objext"; then
10622 1.1 joerg func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
10623 1.1 joerg fi
10624 1.1 joerg
10625 1.1 joerg exit $exit_status
10626 1.1 joerg }
10627 1.1 joerg
10628 1.1 joerg if test -n "$compile_shlibpath$finalize_shlibpath"; then
10629 1.1 joerg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
10630 1.1 joerg fi
10631 1.1 joerg if test -n "$finalize_shlibpath"; then
10632 1.1 joerg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
10633 1.1 joerg fi
10634 1.1 joerg
10635 1.1 joerg compile_var=
10636 1.1 joerg finalize_var=
10637 1.1 joerg if test -n "$runpath_var"; then
10638 1.1 joerg if test -n "$perm_rpath"; then
10639 1.1 joerg # We should set the runpath_var.
10640 1.1 joerg rpath=
10641 1.1 joerg for dir in $perm_rpath; do
10642 1.1 joerg func_append rpath "$dir:"
10643 1.1 joerg done
10644 1.1 joerg compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
10645 1.1 joerg fi
10646 1.1 joerg if test -n "$finalize_perm_rpath"; then
10647 1.1 joerg # We should set the runpath_var.
10648 1.1 joerg rpath=
10649 1.1 joerg for dir in $finalize_perm_rpath; do
10650 1.1 joerg func_append rpath "$dir:"
10651 1.1 joerg done
10652 1.1 joerg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
10653 1.1 joerg fi
10654 1.1 joerg fi
10655 1.1 joerg
10656 1.1 joerg if test yes = "$no_install"; then
10657 1.1 joerg # We don't need to create a wrapper script.
10658 1.1 joerg link_command=$compile_var$compile_command$compile_rpath
10659 1.1 joerg # Replace the output file specification.
10660 1.1 joerg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10661 1.1 joerg # Delete the old output file.
10662 1.1 joerg $opt_dry_run || $RM $output
10663 1.1 joerg # Link the executable and exit
10664 1.1 joerg func_show_eval "$link_command" 'exit $?'
10665 1.1 joerg
10666 1.1 joerg if test -n "$postlink_cmds"; then
10667 1.1 joerg func_to_tool_file "$output"
10668 1.1 joerg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10669 1.1 joerg func_execute_cmds "$postlink_cmds" 'exit $?'
10670 1.1 joerg fi
10671 1.1 joerg
10672 1.1 joerg exit $EXIT_SUCCESS
10673 1.1 joerg fi
10674 1.1 joerg
10675 1.1 joerg case $hardcode_action,$fast_install in
10676 1.1 joerg relink,*)
10677 1.1 joerg # Fast installation is not supported
10678 1.1 joerg link_command=$compile_var$compile_command$compile_rpath
10679 1.1 joerg relink_command=$finalize_var$finalize_command$finalize_rpath
10680 1.1 joerg
10681 1.1 joerg func_warning "this platform does not like uninstalled shared libraries"
10682 1.1 joerg func_warning "'$output' will be relinked during installation"
10683 1.1 joerg ;;
10684 1.1 joerg *,yes)
10685 1.1 joerg link_command=$finalize_var$compile_command$finalize_rpath
10686 1.1 joerg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
10687 1.1 joerg ;;
10688 1.1 joerg *,no)
10689 1.1 joerg link_command=$compile_var$compile_command$compile_rpath
10690 1.1 joerg relink_command=$finalize_var$finalize_command$finalize_rpath
10691 1.1 joerg ;;
10692 1.1 joerg *,needless)
10693 1.1 joerg link_command=$finalize_var$compile_command$finalize_rpath
10694 1.1 joerg relink_command=
10695 1.1 joerg ;;
10696 1.1 joerg esac
10697 1.1 joerg
10698 1.1 joerg # Replace the output file specification.
10699 1.1 joerg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
10700 1.1 joerg
10701 1.1 joerg # Delete the old output files.
10702 1.1 joerg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
10703 1.1 joerg
10704 1.1 joerg func_show_eval "$link_command" 'exit $?'
10705 1.1 joerg
10706 1.1 joerg if test -n "$postlink_cmds"; then
10707 1.1 joerg func_to_tool_file "$output_objdir/$outputname"
10708 1.1 joerg 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'`
10709 1.1 joerg func_execute_cmds "$postlink_cmds" 'exit $?'
10710 1.1 joerg fi
10711 1.1 joerg
10712 1.1 joerg # Now create the wrapper script.
10713 1.1 joerg func_verbose "creating $output"
10714 1.1 joerg
10715 1.1 joerg # Quote the relink command for shipping.
10716 1.1 joerg if test -n "$relink_command"; then
10717 1.1 joerg # Preserve any variables that may affect compiler behavior
10718 1.1 joerg for var in $variables_saved_for_relink; do
10719 1.1 joerg if eval test -z \"\${$var+set}\"; then
10720 1.1 joerg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10721 1.1 joerg elif eval var_value=\$$var; test -z "$var_value"; then
10722 1.1 joerg relink_command="$var=; export $var; $relink_command"
10723 1.1 joerg else
10724 1.1 joerg func_quote_arg pretty "$var_value"
10725 1.1 joerg relink_command="$var=$func_quote_arg_result; export $var; $relink_command"
10726 1.1 joerg fi
10727 1.1 joerg done
10728 1.1 joerg func_quote eval cd "`pwd`"
10729 1.1 joerg func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)"
10730 1.1 joerg relink_command=$func_quote_arg_unquoted_result
10731 1.1 joerg fi
10732 1.1 joerg
10733 1.1 joerg # Only actually do things if not in dry run mode.
10734 1.1 joerg $opt_dry_run || {
10735 1.1 joerg # win32 will think the script is a binary if it has
10736 1.1 joerg # a .exe suffix, so we strip it off here.
10737 1.1 joerg case $output in
10738 1.1 joerg *.exe) func_stripname '' '.exe' "$output"
10739 1.1 joerg output=$func_stripname_result ;;
10740 1.1 joerg esac
10741 1.1 joerg # test for cygwin because mv fails w/o .exe extensions
10742 1.1 joerg case $host in
10743 1.1 joerg *cygwin*)
10744 1.1 joerg exeext=.exe
10745 1.1 joerg func_stripname '' '.exe' "$outputname"
10746 1.1 joerg outputname=$func_stripname_result ;;
10747 1.1 joerg *) exeext= ;;
10748 1.1 joerg esac
10749 1.1 joerg case $host in
10750 1.1 joerg *cygwin* | *mingw* )
10751 1.1 joerg func_dirname_and_basename "$output" "" "."
10752 1.1 joerg output_name=$func_basename_result
10753 1.1 joerg output_path=$func_dirname_result
10754 1.1 joerg cwrappersource=$output_path/$objdir/lt-$output_name.c
10755 1.1 joerg cwrapper=$output_path/$output_name.exe
10756 1.1 joerg $RM $cwrappersource $cwrapper
10757 1.1 joerg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
10758 1.1 joerg
10759 1.1 joerg func_emit_cwrapperexe_src > $cwrappersource
10760 1.1 joerg
10761 1.1 joerg # The wrapper executable is built using the $host compiler,
10762 1.1 joerg # because it contains $host paths and files. If cross-
10763 1.1 joerg # compiling, it, like the target executable, must be
10764 1.1 joerg # executed on the $host or under an emulation environment.
10765 1.1 joerg $opt_dry_run || {
10766 1.1 joerg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
10767 1.1 joerg $STRIP $cwrapper
10768 1.1 joerg }
10769 1.1 joerg
10770 1.1 joerg # Now, create the wrapper script for func_source use:
10771 1.1 joerg func_ltwrapper_scriptname $cwrapper
10772 1.1 joerg $RM $func_ltwrapper_scriptname_result
10773 1.1 joerg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
10774 1.1 joerg $opt_dry_run || {
10775 1.1 joerg # note: this script will not be executed, so do not chmod.
10776 1.1 joerg if test "x$build" = "x$host"; then
10777 1.1 joerg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
10778 1.1 joerg else
10779 1.1 joerg func_emit_wrapper no > $func_ltwrapper_scriptname_result
10780 1.1 joerg fi
10781 1.1 joerg }
10782 1.1 joerg ;;
10783 1.1 joerg * )
10784 1.1 joerg $RM $output
10785 1.1 joerg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
10786 1.1 joerg
10787 1.1 joerg func_emit_wrapper no > $output
10788 1.1 joerg chmod +x $output
10789 1.1 joerg ;;
10790 1.1 joerg esac
10791 1.1 joerg }
10792 1.1 joerg exit $EXIT_SUCCESS
10793 1.1 joerg ;;
10794 1.1 joerg esac
10795 1.1 joerg
10796 1.1 joerg # See if we need to build an old-fashioned archive.
10797 1.1 joerg for oldlib in $oldlibs; do
10798 1.1 joerg
10799 1.1 joerg case $build_libtool_libs in
10800 1.1 joerg convenience)
10801 1.1 joerg oldobjs="$libobjs_save $symfileobj"
10802 1.1 joerg addlibs=$convenience
10803 1.1 joerg build_libtool_libs=no
10804 1.1 joerg ;;
10805 1.1 joerg module)
10806 1.1 joerg oldobjs=$libobjs_save
10807 1.1 joerg addlibs=$old_convenience
10808 1.1 joerg build_libtool_libs=no
10809 1.1 joerg ;;
10810 1.1 joerg *)
10811 1.1 joerg oldobjs="$old_deplibs $non_pic_objects"
10812 1.1 joerg $preload && test -f "$symfileobj" \
10813 1.1 joerg && func_append oldobjs " $symfileobj"
10814 1.1 joerg addlibs=$old_convenience
10815 1.1 joerg ;;
10816 1.1 joerg esac
10817 1.1 joerg
10818 1.1 joerg if test -n "$addlibs"; then
10819 1.1 joerg gentop=$output_objdir/${outputname}x
10820 1.1 joerg func_append generated " $gentop"
10821 1.1 joerg
10822 1.1 joerg func_extract_archives $gentop $addlibs
10823 1.1 joerg func_append oldobjs " $func_extract_archives_result"
10824 1.1 joerg fi
10825 1.1 joerg
10826 1.1 joerg # Do each command in the archive commands.
10827 1.1 joerg if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
10828 1.1 joerg cmds=$old_archive_from_new_cmds
10829 1.1 joerg else
10830 1.1 joerg
10831 1.1 joerg # Add any objects from preloaded convenience libraries
10832 1.1 joerg if test -n "$dlprefiles"; then
10833 1.1 joerg gentop=$output_objdir/${outputname}x
10834 1.1 joerg func_append generated " $gentop"
10835 1.1 joerg
10836 1.1 joerg func_extract_archives $gentop $dlprefiles
10837 1.1 joerg func_append oldobjs " $func_extract_archives_result"
10838 1.1 joerg fi
10839 1.1 joerg
10840 1.1 joerg # POSIX demands no paths to be encoded in archives. We have
10841 1.1 joerg # to avoid creating archives with duplicate basenames if we
10842 1.1 joerg # might have to extract them afterwards, e.g., when creating a
10843 1.1 joerg # static archive out of a convenience library, or when linking
10844 1.1 joerg # the entirety of a libtool archive into another (currently
10845 1.1 joerg # not supported by libtool).
10846 1.1 joerg if (for obj in $oldobjs
10847 1.1 joerg do
10848 1.1 joerg func_basename "$obj"
10849 1.1 joerg $ECHO "$func_basename_result"
10850 1.1 joerg done | sort | sort -uc >/dev/null 2>&1); then
10851 1.1 joerg :
10852 1.1 joerg else
10853 1.1 joerg echo "copying selected object files to avoid basename conflicts..."
10854 1.1 joerg gentop=$output_objdir/${outputname}x
10855 1.1 joerg func_append generated " $gentop"
10856 1.1 joerg func_mkdir_p "$gentop"
10857 1.1 joerg save_oldobjs=$oldobjs
10858 1.1 joerg oldobjs=
10859 1.1 joerg counter=1
10860 1.1 joerg for obj in $save_oldobjs
10861 1.1 joerg do
10862 1.1 joerg func_basename "$obj"
10863 1.1 joerg objbase=$func_basename_result
10864 1.1 joerg case " $oldobjs " in
10865 1.1 joerg " ") oldobjs=$obj ;;
10866 1.1 joerg *[\ /]"$objbase "*)
10867 1.1 joerg while :; do
10868 1.1 joerg # Make sure we don't pick an alternate name that also
10869 1.1 joerg # overlaps.
10870 1.1 joerg newobj=lt$counter-$objbase
10871 1.1 joerg func_arith $counter + 1
10872 1.1 joerg counter=$func_arith_result
10873 1.1 joerg case " $oldobjs " in
10874 1.1 joerg *[\ /]"$newobj "*) ;;
10875 1.1 joerg *) if test ! -f "$gentop/$newobj"; then break; fi ;;
10876 1.1 joerg esac
10877 1.1 joerg done
10878 1.1 joerg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
10879 1.1 joerg func_append oldobjs " $gentop/$newobj"
10880 1.1 joerg ;;
10881 1.1 joerg *) func_append oldobjs " $obj" ;;
10882 1.1 joerg esac
10883 1.1 joerg done
10884 1.1 joerg fi
10885 1.1 joerg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
10886 1.1 joerg tool_oldlib=$func_to_tool_file_result
10887 1.1 joerg eval cmds=\"$old_archive_cmds\"
10888 1.1 joerg
10889 1.1 joerg func_len " $cmds"
10890 1.1 joerg len=$func_len_result
10891 1.1 joerg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
10892 1.1 joerg cmds=$old_archive_cmds
10893 1.1 joerg elif test -n "$archiver_list_spec"; then
10894 1.1 joerg func_verbose "using command file archive linking..."
10895 1.1 joerg for obj in $oldobjs
10896 1.1 joerg do
10897 1.1 joerg func_to_tool_file "$obj"
10898 1.1 joerg $ECHO "$func_to_tool_file_result"
10899 1.1 joerg done > $output_objdir/$libname.libcmd
10900 1.1 joerg func_to_tool_file "$output_objdir/$libname.libcmd"
10901 1.1 joerg oldobjs=" $archiver_list_spec$func_to_tool_file_result"
10902 1.1 joerg cmds=$old_archive_cmds
10903 1.1 joerg else
10904 1.1 joerg # the command line is too long to link in one step, link in parts
10905 1.1 joerg func_verbose "using piecewise archive linking..."
10906 1.1 joerg save_RANLIB=$RANLIB
10907 1.1 joerg RANLIB=:
10908 1.1 joerg objlist=
10909 1.1 joerg concat_cmds=
10910 1.1 joerg save_oldobjs=$oldobjs
10911 1.1 joerg oldobjs=
10912 1.1 joerg # Is there a better way of finding the last object in the list?
10913 1.1 joerg for obj in $save_oldobjs
10914 1.1 joerg do
10915 1.1 joerg last_oldobj=$obj
10916 1.1 joerg done
10917 1.1 joerg eval test_cmds=\"$old_archive_cmds\"
10918 1.1 joerg func_len " $test_cmds"
10919 1.1 joerg len0=$func_len_result
10920 1.1 joerg len=$len0
10921 1.1 joerg for obj in $save_oldobjs
10922 1.1 joerg do
10923 1.1 joerg func_len " $obj"
10924 1.1 joerg func_arith $len + $func_len_result
10925 1.1 joerg len=$func_arith_result
10926 1.1 joerg func_append objlist " $obj"
10927 1.1 joerg if test "$len" -lt "$max_cmd_len"; then
10928 1.1 joerg :
10929 1.1 joerg else
10930 1.1 joerg # the above command should be used before it gets too long
10931 1.1 joerg oldobjs=$objlist
10932 1.1 joerg if test "$obj" = "$last_oldobj"; then
10933 1.1 joerg RANLIB=$save_RANLIB
10934 1.1 joerg fi
10935 1.1 joerg test -z "$concat_cmds" || concat_cmds=$concat_cmds~
10936 1.1 joerg eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
10937 1.1 joerg objlist=
10938 1.1 joerg len=$len0
10939 1.1 joerg fi
10940 1.1 joerg done
10941 1.1 joerg RANLIB=$save_RANLIB
10942 1.1 joerg oldobjs=$objlist
10943 1.1 joerg if test -z "$oldobjs"; then
10944 1.1 joerg eval cmds=\"\$concat_cmds\"
10945 1.1 joerg else
10946 1.1 joerg eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
10947 1.1 joerg fi
10948 1.1 joerg fi
10949 1.1 joerg fi
10950 1.1 joerg func_execute_cmds "$cmds" 'exit $?'
10951 1.1 joerg done
10952 1.1 joerg
10953 1.1 joerg test -n "$generated" && \
10954 1.1 joerg func_show_eval "${RM}r$generated"
10955 1.1 joerg
10956 1.1 joerg # Now create the libtool archive.
10957 1.1 joerg case $output in
10958 1.1 joerg *.la)
10959 1.1 joerg old_library=
10960 1.1 joerg test yes = "$build_old_libs" && old_library=$libname.$libext
10961 1.1 joerg func_verbose "creating $output"
10962 1.1 joerg
10963 1.1 joerg # Preserve any variables that may affect compiler behavior
10964 1.1 joerg for var in $variables_saved_for_relink; do
10965 1.1 joerg if eval test -z \"\${$var+set}\"; then
10966 1.1 joerg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10967 1.1 joerg elif eval var_value=\$$var; test -z "$var_value"; then
10968 1.1 joerg relink_command="$var=; export $var; $relink_command"
10969 1.1 joerg else
10970 1.1 joerg func_quote_arg pretty,unquoted "$var_value"
10971 1.1 joerg relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command"
10972 1.1 joerg fi
10973 1.1 joerg done
10974 1.1 joerg # Quote the link command for shipping.
10975 1.1 joerg func_quote eval cd "`pwd`"
10976 1.1 joerg relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
10977 1.1 joerg func_quote_arg pretty,unquoted "$relink_command"
10978 1.1 joerg relink_command=$func_quote_arg_unquoted_result
10979 1.1 joerg if test yes = "$hardcode_automatic"; then
10980 1.1 joerg relink_command=
10981 1.1 joerg fi
10982 1.1 joerg
10983 1.1 joerg # Only create the output if not a dry run.
10984 1.1 joerg $opt_dry_run || {
10985 1.1 joerg for installed in no yes; do
10986 1.1 joerg if test yes = "$installed"; then
10987 1.1 joerg if test -z "$install_libdir"; then
10988 1.1 joerg break
10989 1.1 joerg fi
10990 1.1 joerg output=$output_objdir/${outputname}i
10991 1.1 joerg # Replace all uninstalled libtool libraries with the installed ones
10992 1.1 joerg newdependency_libs=
10993 1.1 joerg for deplib in $dependency_libs; do
10994 1.1 joerg case $deplib in
10995 1.1 joerg *.la)
10996 1.1 joerg func_basename "$deplib"
10997 1.1 joerg name=$func_basename_result
10998 1.1 joerg func_resolve_sysroot "$deplib"
10999 1.1 joerg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
11000 1.1 joerg test -z "$libdir" && \
11001 1.1 joerg func_fatal_error "'$deplib' is not a valid libtool archive"
11002 1.1 joerg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
11003 1.1 joerg ;;
11004 1.1 joerg -L*)
11005 1.1 joerg func_stripname -L '' "$deplib"
11006 1.1 joerg func_replace_sysroot "$func_stripname_result"
11007 1.1 joerg func_append newdependency_libs " -L$func_replace_sysroot_result"
11008 1.1 joerg ;;
11009 1.1 joerg -R*)
11010 1.1 joerg func_stripname -R '' "$deplib"
11011 1.1 joerg func_replace_sysroot "$func_stripname_result"
11012 1.1 joerg func_append newdependency_libs " -R$func_replace_sysroot_result"
11013 1.1 joerg ;;
11014 1.1 joerg *) func_append newdependency_libs " $deplib" ;;
11015 1.1 joerg esac
11016 1.1 joerg done
11017 1.1 joerg dependency_libs=$newdependency_libs
11018 1.1 joerg newdlfiles=
11019 1.1 joerg
11020 1.1 joerg for lib in $dlfiles; do
11021 1.1 joerg case $lib in
11022 1.1 joerg *.la)
11023 1.1 joerg func_basename "$lib"
11024 1.1 joerg name=$func_basename_result
11025 1.1 joerg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
11026 1.1 joerg test -z "$libdir" && \
11027 1.1 joerg func_fatal_error "'$lib' is not a valid libtool archive"
11028 1.1 joerg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
11029 1.1 joerg ;;
11030 1.1 joerg *) func_append newdlfiles " $lib" ;;
11031 1.1 joerg esac
11032 1.1 joerg done
11033 1.1 joerg dlfiles=$newdlfiles
11034 1.1 joerg newdlprefiles=
11035 1.1 joerg for lib in $dlprefiles; do
11036 1.1 joerg case $lib in
11037 1.1 joerg *.la)
11038 1.1 joerg # Only pass preopened files to the pseudo-archive (for
11039 1.1 joerg # eventual linking with the app. that links it) if we
11040 1.1 joerg # didn't already link the preopened objects directly into
11041 1.1 joerg # the library:
11042 1.1 joerg func_basename "$lib"
11043 1.1 joerg name=$func_basename_result
11044 1.1 joerg eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
11045 1.1 joerg test -z "$libdir" && \
11046 1.1 joerg func_fatal_error "'$lib' is not a valid libtool archive"
11047 1.1 joerg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
11048 1.1 joerg ;;
11049 1.1 joerg esac
11050 1.1 joerg done
11051 1.1 joerg dlprefiles=$newdlprefiles
11052 1.1 joerg else
11053 1.1 joerg newdlfiles=
11054 1.1 joerg for lib in $dlfiles; do
11055 1.1 joerg case $lib in
11056 1.1 joerg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
11057 1.1 joerg *) abs=`pwd`"/$lib" ;;
11058 1.1 joerg esac
11059 1.1 joerg func_append newdlfiles " $abs"
11060 1.1 joerg done
11061 1.1 joerg dlfiles=$newdlfiles
11062 1.1 joerg newdlprefiles=
11063 1.1 joerg for lib in $dlprefiles; do
11064 1.1 joerg case $lib in
11065 1.1 joerg [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
11066 1.1 joerg *) abs=`pwd`"/$lib" ;;
11067 1.1 joerg esac
11068 1.1 joerg func_append newdlprefiles " $abs"
11069 1.1 joerg done
11070 1.1 joerg dlprefiles=$newdlprefiles
11071 1.1 joerg fi
11072 1.1 joerg $RM $output
11073 1.1 joerg # place dlname in correct position for cygwin
11074 1.1 joerg # In fact, it would be nice if we could use this code for all target
11075 1.1 joerg # systems that can't hard-code library paths into their executables
11076 1.1 joerg # and that have no shared library path variable independent of PATH,
11077 1.1 joerg # but it turns out we can't easily determine that from inspecting
11078 1.1 joerg # libtool variables, so we have to hard-code the OSs to which it
11079 1.1 joerg # applies here; at the moment, that means platforms that use the PE
11080 1.1 joerg # object format with DLL files. See the long comment at the top of
11081 1.1 joerg # tests/bindir.at for full details.
11082 1.1 joerg tdlname=$dlname
11083 1.1 joerg case $host,$output,$installed,$module,$dlname in
11084 1.1 joerg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
11085 1.1 joerg # If a -bindir argument was supplied, place the dll there.
11086 1.1 joerg if test -n "$bindir"; then
11087 1.1 joerg func_relative_path "$install_libdir" "$bindir"
11088 1.1 joerg tdlname=$func_relative_path_result/$dlname
11089 1.1 joerg else
11090 1.1 joerg # Otherwise fall back on heuristic.
11091 1.1 joerg tdlname=../bin/$dlname
11092 1.1 joerg fi
11093 1.1 joerg ;;
11094 1.1 joerg esac
11095 1.1 joerg $ECHO > $output "\
11096 1.1 joerg # $outputname - a libtool library file
11097 1.1 joerg # Generated by $PROGRAM (GNU $PACKAGE) $VERSION
11098 1.1 joerg #
11099 1.1 joerg # Please DO NOT delete this file!
11100 1.1 joerg # It is necessary for linking the library.
11101 1.1 joerg
11102 1.1 joerg # The name that we can dlopen(3).
11103 1.1 joerg dlname='$tdlname'
11104 1.1 joerg
11105 1.1 joerg # Names of this library.
11106 1.1 joerg library_names='$library_names'
11107 1.1 joerg
11108 1.1 joerg # The name of the static archive.
11109 1.1 joerg old_library='$old_library'
11110 1.1 joerg
11111 1.1 joerg # Linker flags that cannot go in dependency_libs.
11112 1.1 joerg inherited_linker_flags='$new_inherited_linker_flags'
11113 1.1 joerg
11114 1.1 joerg # Libraries that this one depends upon.
11115 1.1 joerg dependency_libs='$dependency_libs'
11116 1.1 joerg
11117 1.1 joerg # Names of additional weak libraries provided by this library
11118 1.1 joerg weak_library_names='$weak_libs'
11119 1.1 joerg
11120 1.1 joerg # Version information for $libname.
11121 1.1 joerg current=$current
11122 1.1 joerg age=$age
11123 1.1 joerg revision=$revision
11124 1.1 joerg
11125 1.1 joerg # Is this an already installed library?
11126 1.1 joerg installed=$installed
11127 1.1 joerg
11128 1.1 joerg # Should we warn about portability when linking against -modules?
11129 1.1 joerg shouldnotlink=$module
11130 1.1 joerg
11131 1.1 joerg # Files to dlopen/dlpreopen
11132 1.1 joerg dlopen='$dlfiles'
11133 1.1 joerg dlpreopen='$dlprefiles'
11134 1.1 joerg
11135 1.1 joerg # Directory that this library needs to be installed in:
11136 1.1 joerg libdir='$install_libdir'"
11137 1.1 joerg if test no,yes = "$installed,$need_relink"; then
11138 1.1 joerg $ECHO >> $output "\
11139 1.1 joerg relink_command=\"$relink_command\""
11140 1.1 joerg fi
11141 1.1 joerg done
11142 1.1 joerg }
11143 1.1 joerg
11144 1.1 joerg # Do a symbolic link so that the libtool archive can be found in
11145 1.1 joerg # LD_LIBRARY_PATH before the program is installed.
11146 1.1 joerg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
11147 1.1 joerg ;;
11148 1.1 joerg esac
11149 1.1 joerg exit $EXIT_SUCCESS
11150 1.1 joerg }
11151 1.1 joerg
11152 1.1 joerg if test link = "$opt_mode" || test relink = "$opt_mode"; then
11153 1.1 joerg func_mode_link ${1+"$@"}
11154 1.1 joerg fi
11155 1.1 joerg
11156 1.1 joerg
11157 1.1 joerg # func_mode_uninstall arg...
11158 1.1 joerg func_mode_uninstall ()
11159 1.1 joerg {
11160 1.1 joerg $debug_cmd
11161 1.1 joerg
11162 1.1 joerg RM=$nonopt
11163 1.1 joerg files=
11164 1.1 joerg rmforce=false
11165 1.1 joerg exit_status=0
11166 1.1 joerg
11167 1.1 joerg # This variable tells wrapper scripts just to set variables rather
11168 1.1 joerg # than running their programs.
11169 1.1 joerg libtool_install_magic=$magic
11170 1.1 joerg
11171 1.1 joerg for arg
11172 1.1 joerg do
11173 1.1 joerg case $arg in
11174 1.1 joerg -f) func_append RM " $arg"; rmforce=: ;;
11175 1.1 joerg -*) func_append RM " $arg" ;;
11176 1.1 joerg *) func_append files " $arg" ;;
11177 1.1 joerg esac
11178 1.1 joerg done
11179 1.1 joerg
11180 1.1 joerg test -z "$RM" && \
11181 1.1 joerg func_fatal_help "you must specify an RM program"
11182 1.1 joerg
11183 1.1 joerg rmdirs=
11184 1.1 joerg
11185 1.1 joerg for file in $files; do
11186 1.1 joerg func_dirname "$file" "" "."
11187 1.1 joerg dir=$func_dirname_result
11188 1.1 joerg if test . = "$dir"; then
11189 1.1 joerg odir=$objdir
11190 1.1 joerg else
11191 1.1 joerg odir=$dir/$objdir
11192 1.1 joerg fi
11193 1.1 joerg func_basename "$file"
11194 1.1 joerg name=$func_basename_result
11195 1.1 joerg test uninstall = "$opt_mode" && odir=$dir
11196 1.1 joerg
11197 1.1 joerg # Remember odir for removal later, being careful to avoid duplicates
11198 1.1 joerg if test clean = "$opt_mode"; then
11199 1.1 joerg case " $rmdirs " in
11200 1.1 joerg *" $odir "*) ;;
11201 1.1 joerg *) func_append rmdirs " $odir" ;;
11202 1.1 joerg esac
11203 1.1 joerg fi
11204 1.1 joerg
11205 1.1 joerg # Don't error if the file doesn't exist and rm -f was used.
11206 1.1 joerg if { test -L "$file"; } >/dev/null 2>&1 ||
11207 1.1 joerg { test -h "$file"; } >/dev/null 2>&1 ||
11208 1.1 joerg test -f "$file"; then
11209 1.1 joerg :
11210 1.1 joerg elif test -d "$file"; then
11211 1.1 joerg exit_status=1
11212 1.1 joerg continue
11213 1.1 joerg elif $rmforce; then
11214 1.1 joerg continue
11215 1.1 joerg fi
11216 1.1 joerg
11217 1.1 joerg rmfiles=$file
11218 1.1 joerg
11219 1.1 joerg case $name in
11220 1.1 joerg *.la)
11221 1.1 joerg # Possibly a libtool archive, so verify it.
11222 1.1 joerg if func_lalib_p "$file"; then
11223 1.1 joerg func_source $dir/$name
11224 1.1 joerg
11225 1.1 joerg # Delete the libtool libraries and symlinks.
11226 1.1 joerg for n in $library_names; do
11227 1.1 joerg func_append rmfiles " $odir/$n"
11228 1.1 joerg done
11229 1.1 joerg test -n "$old_library" && func_append rmfiles " $odir/$old_library"
11230 1.1 joerg
11231 1.1 joerg case $opt_mode in
11232 1.1 joerg clean)
11233 1.1 joerg case " $library_names " in
11234 1.1 joerg *" $dlname "*) ;;
11235 1.1 joerg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
11236 1.1 joerg esac
11237 1.1 joerg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
11238 1.1 joerg ;;
11239 1.1 joerg uninstall)
11240 1.1 joerg if test -n "$library_names"; then
11241 1.1 joerg # Do each command in the postuninstall commands.
11242 1.1 joerg func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
11243 1.1 joerg fi
11244 1.1 joerg
11245 1.1 joerg if test -n "$old_library"; then
11246 1.1 joerg # Do each command in the old_postuninstall commands.
11247 1.1 joerg func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
11248 1.1 joerg fi
11249 1.1 joerg # FIXME: should reinstall the best remaining shared library.
11250 1.1 joerg ;;
11251 1.1 joerg esac
11252 1.1 joerg fi
11253 1.1 joerg ;;
11254 1.1 joerg
11255 1.1 joerg *.lo)
11256 1.1 joerg # Possibly a libtool object, so verify it.
11257 1.1 joerg if func_lalib_p "$file"; then
11258 1.1 joerg
11259 1.1 joerg # Read the .lo file
11260 1.1 joerg func_source $dir/$name
11261 1.1 joerg
11262 1.1 joerg # Add PIC object to the list of files to remove.
11263 1.1 joerg if test -n "$pic_object" && test none != "$pic_object"; then
11264 1.1 joerg func_append rmfiles " $dir/$pic_object"
11265 1.1 joerg fi
11266 1.1 joerg
11267 1.1 joerg # Add non-PIC object to the list of files to remove.
11268 1.1 joerg if test -n "$non_pic_object" && test none != "$non_pic_object"; then
11269 1.1 joerg func_append rmfiles " $dir/$non_pic_object"
11270 1.1 joerg fi
11271 1.1 joerg fi
11272 1.1 joerg ;;
11273 1.1 joerg
11274 1.1 joerg *)
11275 1.1 joerg if test clean = "$opt_mode"; then
11276 1.1 joerg noexename=$name
11277 1.1 joerg case $file in
11278 1.1 joerg *.exe)
11279 1.1 joerg func_stripname '' '.exe' "$file"
11280 1.1 joerg file=$func_stripname_result
11281 1.1 joerg func_stripname '' '.exe' "$name"
11282 1.1 joerg noexename=$func_stripname_result
11283 1.1 joerg # $file with .exe has already been added to rmfiles,
11284 1.1 joerg # add $file without .exe
11285 1.1 joerg func_append rmfiles " $file"
11286 1.1 joerg ;;
11287 1.1 joerg esac
11288 1.1 joerg # Do a test to see if this is a libtool program.
11289 1.1 joerg if func_ltwrapper_p "$file"; then
11290 1.1 joerg if func_ltwrapper_executable_p "$file"; then
11291 1.1 joerg func_ltwrapper_scriptname "$file"
11292 1.1 joerg relink_command=
11293 1.1 joerg func_source $func_ltwrapper_scriptname_result
11294 1.1 joerg func_append rmfiles " $func_ltwrapper_scriptname_result"
11295 1.1 joerg else
11296 1.1 joerg relink_command=
11297 1.1 joerg func_source $dir/$noexename
11298 1.1 joerg fi
11299 1.1 joerg
11300 1.1 joerg # note $name still contains .exe if it was in $file originally
11301 1.1 joerg # as does the version of $file that was added into $rmfiles
11302 1.1 joerg func_append rmfiles " $odir/$name $odir/${name}S.$objext"
11303 1.1 joerg if test yes = "$fast_install" && test -n "$relink_command"; then
11304 1.1 joerg func_append rmfiles " $odir/lt-$name"
11305 1.1 joerg fi
11306 1.1 joerg if test "X$noexename" != "X$name"; then
11307 1.1 joerg func_append rmfiles " $odir/lt-$noexename.c"
11308 1.1 joerg fi
11309 1.1 joerg fi
11310 1.1 joerg fi
11311 1.1 joerg ;;
11312 1.1 joerg esac
11313 1.1 joerg func_show_eval "$RM $rmfiles" 'exit_status=1'
11314 1.1 joerg done
11315 1.1 joerg
11316 1.1 joerg # Try to remove the $objdir's in the directories where we deleted files
11317 1.1 joerg for dir in $rmdirs; do
11318 1.1 joerg if test -d "$dir"; then
11319 1.1 joerg func_show_eval "rmdir $dir >/dev/null 2>&1"
11320 1.1 joerg fi
11321 1.1 joerg done
11322 1.1 joerg
11323 1.1 joerg exit $exit_status
11324 1.1 joerg }
11325 1.1 joerg
11326 1.1 joerg if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
11327 1.1 joerg func_mode_uninstall ${1+"$@"}
11328 1.1 joerg fi
11329 1.1 joerg
11330 1.1 joerg test -z "$opt_mode" && {
11331 1.1 joerg help=$generic_help
11332 1.1 joerg func_fatal_help "you must specify a MODE"
11333 1.1 joerg }
11334 1.1 joerg
11335 1.1 joerg test -z "$exec_cmd" && \
11336 1.1 joerg func_fatal_help "invalid operation mode '$opt_mode'"
11337 1.1 joerg
11338 1.1 joerg if test -n "$exec_cmd"; then
11339 1.1 joerg eval exec "$exec_cmd"
11340 1.1 joerg exit $EXIT_FAILURE
11341 1.1 joerg fi
11342 1.1 joerg
11343 1.1 joerg exit $exit_status
11344 1.1 joerg
11345 1.1 joerg
11346 1.1 joerg # The TAGs below are defined such that we never get into a situation
11347 1.1 joerg # where we disable both kinds of libraries. Given conflicting
11348 1.1 joerg # choices, we go for a static library, that is the most portable,
11349 1.1 joerg # since we can't tell whether shared libraries were disabled because
11350 1.1 joerg # the user asked for that or because the platform doesn't support
11351 1.1 joerg # them. This is particularly important on AIX, because we don't
11352 1.1 joerg # support having both static and shared libraries enabled at the same
11353 1.1 joerg # time on that platform, so we default to a shared-only configuration.
11354 1.1 joerg # If a disable-shared tag is given, we'll fallback to a static-only
11355 1.1 joerg # configuration. But we'll never go from static-only to shared-only.
11356 1.1 joerg
11357 1.1 joerg # ### BEGIN LIBTOOL TAG CONFIG: disable-shared
11358 1.1 joerg build_libtool_libs=no
11359 1.1 joerg build_old_libs=yes
11360 1.1 joerg # ### END LIBTOOL TAG CONFIG: disable-shared
11361 1.1 joerg
11362 1.1 joerg # ### BEGIN LIBTOOL TAG CONFIG: disable-static
11363 1.1 joerg build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
11364 1.1 joerg # ### END LIBTOOL TAG CONFIG: disable-static
11365 1.1 joerg
11366 1.1 joerg # Local Variables:
11367 1.1 joerg # mode:shell-script
11368 1.1 joerg # sh-indentation:2
11369 1.1 joerg # End:
11370