VirtualBox

source: vbox/trunk/src/libs/libpng-1.6.45/ltmain.sh@ 107935

Last change on this file since 107935 was 107813, checked in by vboxsync, 3 weeks ago

libpng-1.6.45: Applied and adjusted our libpng changes to 1.6.45. bugref:8515

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

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette