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