Updates to Tomato RAF including NGINX && PHP
[tomato.git] / release / src / router / lzo / autoconf / ltmain.sh
blob04eaea408c49beabbfbb92001a78f694c1d65522
1 # Generated from ltmain.m4sh.
3 # libtool (GNU libtool) 2.2.10
4 # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
6 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
7 # 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
8 # This is free software; see the source for copying conditions. There is NO
9 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11 # GNU Libtool is free software; you can redistribute it and/or modify
12 # it under the terms of the GNU General Public License as published by
13 # the Free Software Foundation; either version 2 of the License, or
14 # (at your option) any later version.
16 # As a special exception to the GNU General Public License,
17 # if you distribute this file as part of a program or library that
18 # is built using GNU Libtool, you may include this file under the
19 # same distribution terms that you use for the rest of that program.
21 # GNU Libtool is distributed in the hope that it will be useful, but
22 # WITHOUT ANY WARRANTY; without even the implied warranty of
23 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 # General Public License for more details.
26 # You should have received a copy of the GNU General Public License
27 # along with GNU Libtool; see the file COPYING. If not, a copy
28 # can be downloaded from http://www.gnu.org/licenses/gpl.html,
29 # or obtained by writing to the Free Software Foundation, Inc.,
30 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
32 # Usage: $progname [OPTION]... [MODE-ARG]...
34 # Provide generalized library-building support services.
36 # --config show all configuration variables
37 # --debug enable verbose shell tracing
38 # -n, --dry-run display commands without modifying any files
39 # --features display basic configuration information and exit
40 # --mode=MODE use operation mode MODE
41 # --preserve-dup-deps don't remove duplicate dependency libraries
42 # --quiet, --silent don't print informational messages
43 # --no-quiet, --no-silent
44 # print informational messages (default)
45 # --tag=TAG use configuration variables from tag TAG
46 # -v, --verbose print more informational messages than default
47 # --no-verbose don't print the extra informational messages
48 # --version print version information
49 # -h, --help, --help-all print short, long, or detailed help message
51 # MODE must be one of the following:
53 # clean remove files from the build directory
54 # compile compile a source file into a libtool object
55 # execute automatically set library path, then run a program
56 # finish complete the installation of libtool libraries
57 # install install libraries or executables
58 # link create a library or an executable
59 # uninstall remove libraries from an installed directory
61 # MODE-ARGS vary depending on the MODE. When passed as first option,
62 # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
63 # Try `$progname --help --mode=MODE' for a more detailed description of MODE.
65 # When reporting a bug, please describe a test case to reproduce it and
66 # include the following information:
68 # host-triplet: $host
69 # shell: $SHELL
70 # compiler: $LTCC
71 # compiler flags: $LTCFLAGS
72 # linker: $LD (gnu? $with_gnu_ld)
73 # $progname: (GNU libtool) 2.2.10
74 # automake: $automake_version
75 # autoconf: $autoconf_version
77 # Report bugs to <bug-libtool@gnu.org>.
79 PROGRAM=libtool
80 PACKAGE=libtool
81 VERSION=2.2.10
82 TIMESTAMP=""
83 package_revision=1.3175
85 # Be Bourne compatible
86 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
87 emulate sh
88 NULLCMD=:
89 # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
90 # is contrary to our usage. Disable this feature.
91 alias -g '${1+"$@"}'='"$@"'
92 setopt NO_GLOB_SUBST
93 else
94 case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
96 BIN_SH=xpg4; export BIN_SH # for Tru64
97 DUALCASE=1; export DUALCASE # for MKS sh
99 # A function that is used when there is no print builtin or printf.
100 func_fallback_echo ()
102 eval 'cat <<_LTECHO_EOF
104 _LTECHO_EOF'
107 # NLS nuisances: We save the old values to restore during execute mode.
108 lt_user_locale=
109 lt_safe_locale=
110 for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
112 eval "if test \"\${$lt_var+set}\" = set; then
113 save_$lt_var=\$$lt_var
114 $lt_var=C
115 export $lt_var
116 lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
117 lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
119 done
120 LC_ALL=C
121 LANGUAGE=C
122 export LANGUAGE LC_ALL
124 $lt_unset CDPATH
127 # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
128 # is ksh but when the shell is invoked as "sh" and the current value of
129 # the _XPG environment variable is not equal to 1 (one), the special
130 # positional parameter $0, within a function call, is the name of the
131 # function.
132 progpath="$0"
136 : ${CP="cp -f"}
137 test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
138 : ${EGREP="grep -E"}
139 : ${FGREP="grep -F"}
140 : ${GREP="grep"}
141 : ${LN_S="ln -s"}
142 : ${MAKE="make"}
143 : ${MKDIR="mkdir"}
144 : ${MV="mv -f"}
145 : ${RM="rm -f"}
146 : ${SED="sed"}
147 : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
148 : ${Xsed="$SED -e 1s/^X//"}
150 # Global variables:
151 EXIT_SUCCESS=0
152 EXIT_FAILURE=1
153 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
154 EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
156 exit_status=$EXIT_SUCCESS
158 # Make sure IFS has a sensible default
159 lt_nl='
161 IFS=" $lt_nl"
163 dirname="s,/[^/]*$,,"
164 basename="s,^.*/,,"
166 # func_dirname_and_basename file append nondir_replacement
167 # perform func_basename and func_dirname in a single function
168 # call:
169 # dirname: Compute the dirname of FILE. If nonempty,
170 # add APPEND to the result, otherwise set result
171 # to NONDIR_REPLACEMENT.
172 # value returned in "$func_dirname_result"
173 # basename: Compute filename of FILE.
174 # value retuned in "$func_basename_result"
175 # Implementation must be kept synchronized with func_dirname
176 # and func_basename. For efficiency, we do not delegate to
177 # those functions but instead duplicate the functionality here.
178 func_dirname_and_basename ()
180 # Extract subdirectory from the argument.
181 func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
182 if test "X$func_dirname_result" = "X${1}"; then
183 func_dirname_result="${3}"
184 else
185 func_dirname_result="$func_dirname_result${2}"
187 func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
190 # Generated shell functions inserted here.
192 # These SED scripts presuppose an absolute path with a trailing slash.
193 pathcar='s,^/\([^/]*\).*$,\1,'
194 pathcdr='s,^/[^/]*,,'
195 removedotparts=':dotsl
196 s@/\./@/@g
197 t dotsl
198 s,/\.$,/,'
199 collapseslashes='s@/\{1,\}@/@g'
200 finalslash='s,/*$,/,'
202 # func_normal_abspath PATH
203 # Remove doubled-up and trailing slashes, "." path components,
204 # and cancel out any ".." path components in PATH after making
205 # it an absolute path.
206 # value returned in "$func_normal_abspath_result"
207 func_normal_abspath ()
209 # Start from root dir and reassemble the path.
210 func_normal_abspath_result=
211 func_normal_abspath_tpath=$1
212 func_normal_abspath_altnamespace=
213 case $func_normal_abspath_tpath in
215 # Empty path, that just means $cwd.
216 func_stripname '' '/' "`pwd`"
217 func_normal_abspath_result=$func_stripname_result
218 return
220 # The next three entries are used to spot a run of precisely
221 # two leading slashes without using negated character classes;
222 # we take advantage of case's first-match behaviour.
223 ///*)
224 # Unusual form of absolute path, do nothing.
226 //*)
227 # Not necessarily an ordinary path; POSIX reserves leading '//'
228 # and for example Cygwin uses it to access remote file shares
229 # over CIFS/SMB, so we conserve a leading double slash if found.
230 func_normal_abspath_altnamespace=/
233 # Absolute path, do nothing.
236 # Relative path, prepend $cwd.
237 func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
239 esac
240 # Cancel out all the simple stuff to save iterations. We also want
241 # the path to end with a slash for ease of parsing, so make sure
242 # there is one (and only one) here.
243 func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
244 -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
245 while :; do
246 # Processed it all yet?
247 if test "$func_normal_abspath_tpath" = / ; then
248 # If we ascended to the root using ".." the result may be empty now.
249 if test -z "$func_normal_abspath_result" ; then
250 func_normal_abspath_result=/
252 break
254 func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
255 -e "$pathcar"`
256 func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
257 -e "$pathcdr"`
258 # Figure out what to do with it
259 case $func_normal_abspath_tcomponent in
261 # Trailing empty path component, ignore it.
264 # Parent dir; strip last assembled component from result.
265 func_dirname "$func_normal_abspath_result"
266 func_normal_abspath_result=$func_dirname_result
269 # Actual path component, append it.
270 func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
272 esac
273 done
274 # Restore leading double-slash if one was found on entry.
275 func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
278 # func_relative_path SRCDIR DSTDIR
279 # generates a relative path from SRCDIR to DSTDIR, with a trailing
280 # slash if non-empty, suitable for immediately appending a filename
281 # without needing to append a separator.
282 # value returned in "$func_relative_path_result"
283 func_relative_path ()
285 func_relative_path_result=
286 func_normal_abspath "$1"
287 func_relative_path_tlibdir=$func_normal_abspath_result
288 func_normal_abspath "$2"
289 func_relative_path_tbindir=$func_normal_abspath_result
291 # Ascend the tree starting from libdir
292 while :; do
293 # check if we have found a prefix of bindir
294 case $func_relative_path_tbindir in
295 $func_relative_path_tlibdir)
296 # found an exact match
297 func_relative_path_tcancelled=
298 break
300 $func_relative_path_tlibdir*)
301 # found a matching prefix
302 func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
303 func_relative_path_tcancelled=$func_stripname_result
304 if test -z "$func_relative_path_result"; then
305 func_relative_path_result=.
307 break
310 func_dirname $func_relative_path_tlibdir
311 func_relative_path_tlibdir=${func_dirname_result}
312 if test "x$func_relative_path_tlibdir" = x ; then
313 # Have to descend all the way to the root!
314 func_relative_path_result=../$func_relative_path_result
315 func_relative_path_tcancelled=$func_relative_path_tbindir
316 break
318 func_relative_path_result=../$func_relative_path_result
320 esac
321 done
323 # Now calculate path; take care to avoid doubling-up slashes.
324 func_stripname '' '/' "$func_relative_path_result"
325 func_relative_path_result=$func_stripname_result
326 func_stripname '/' '/' "$func_relative_path_tcancelled"
327 if test "x$func_stripname_result" != x ; then
328 func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
331 # Normalisation. If bindir is libdir, return empty string,
332 # else relative path ending with a slash; either way, target
333 # file name can be directly appended.
334 if test ! -z "$func_relative_path_result"; then
335 func_stripname './' '' "$func_relative_path_result/"
336 func_relative_path_result=$func_stripname_result
340 # The name of this program:
341 func_dirname_and_basename "$progpath"
342 progname=$func_basename_result
344 # Make sure we have an absolute path for reexecution:
345 case $progpath in
346 [\\/]*|[A-Za-z]:\\*) ;;
347 *[\\/]*)
348 progdir=$func_dirname_result
349 progdir=`cd "$progdir" && pwd`
350 progpath="$progdir/$progname"
353 save_IFS="$IFS"
354 IFS=:
355 for progdir in $PATH; do
356 IFS="$save_IFS"
357 test -x "$progdir/$progname" && break
358 done
359 IFS="$save_IFS"
360 test -n "$progdir" || progdir=`pwd`
361 progpath="$progdir/$progname"
363 esac
365 # Sed substitution that helps us do robust quoting. It backslashifies
366 # metacharacters that are still active within double-quoted strings.
367 Xsed="${SED}"' -e 1s/^X//'
368 sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
370 # Same as above, but do not quote variable references.
371 double_quote_subst='s/\(["`\\]\)/\\\1/g'
373 # Re-`\' parameter expansions in output of double_quote_subst that were
374 # `\'-ed in input to the same. If an odd number of `\' preceded a '$'
375 # in input to double_quote_subst, that '$' was protected from expansion.
376 # Since each input `\' is now two `\'s, look for any number of runs of
377 # four `\'s followed by two `\'s and then a '$'. `\' that '$'.
378 bs='\\'
379 bs2='\\\\'
380 bs4='\\\\\\\\'
381 dollar='\$'
382 sed_double_backslash="\
383 s/$bs4/&\\
385 s/^$bs2$dollar/$bs&/
386 s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
387 s/\n//g"
389 # Standard options:
390 opt_dry_run=false
391 opt_help=false
392 opt_quiet=false
393 opt_verbose=false
394 opt_warning=:
396 # func_echo arg...
397 # Echo program name prefixed message, along with the current mode
398 # name if it has been set yet.
399 func_echo ()
401 $ECHO "$progname${mode+: }$mode: $*"
404 # func_verbose arg...
405 # Echo program name prefixed message in verbose mode only.
406 func_verbose ()
408 $opt_verbose && func_echo ${1+"$@"}
410 # A bug in bash halts the script if the last line of a function
411 # fails when set -e is in force, so we need another command to
412 # work around that:
416 # func_echo_all arg...
417 # Invoke $ECHO with all args, space-separated.
418 func_echo_all ()
420 $ECHO "$*"
423 # func_error arg...
424 # Echo program name prefixed message to standard error.
425 func_error ()
427 $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
430 # func_warning arg...
431 # Echo program name prefixed warning message to standard error.
432 func_warning ()
434 $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
436 # bash bug again:
440 # func_fatal_error arg...
441 # Echo program name prefixed message to standard error, and exit.
442 func_fatal_error ()
444 func_error ${1+"$@"}
445 exit $EXIT_FAILURE
448 # func_fatal_help arg...
449 # Echo program name prefixed message to standard error, followed by
450 # a help hint, and exit.
451 func_fatal_help ()
453 func_error ${1+"$@"}
454 func_fatal_error "$help"
456 help="Try \`$progname --help' for more information." ## default
459 # func_grep expression filename
460 # Check whether EXPRESSION matches any line of FILENAME, without output.
461 func_grep ()
463 $GREP "$1" "$2" >/dev/null 2>&1
467 # func_mkdir_p directory-path
468 # Make sure the entire path to DIRECTORY-PATH is available.
469 func_mkdir_p ()
471 my_directory_path="$1"
472 my_dir_list=
474 if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
476 # Protect directory names starting with `-'
477 case $my_directory_path in
478 -*) my_directory_path="./$my_directory_path" ;;
479 esac
481 # While some portion of DIR does not yet exist...
482 while test ! -d "$my_directory_path"; do
483 # ...make a list in topmost first order. Use a colon delimited
484 # list incase some portion of path contains whitespace.
485 my_dir_list="$my_directory_path:$my_dir_list"
487 # If the last portion added has no slash in it, the list is done
488 case $my_directory_path in */*) ;; *) break ;; esac
490 # ...otherwise throw away the child directory and loop
491 my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
492 done
493 my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
495 save_mkdir_p_IFS="$IFS"; IFS=':'
496 for my_dir in $my_dir_list; do
497 IFS="$save_mkdir_p_IFS"
498 # mkdir can fail with a `File exist' error if two processes
499 # try to create one of the directories concurrently. Don't
500 # stop in that case!
501 $MKDIR "$my_dir" 2>/dev/null || :
502 done
503 IFS="$save_mkdir_p_IFS"
505 # Bail out if we (or some other process) failed to create a directory.
506 test -d "$my_directory_path" || \
507 func_fatal_error "Failed to create \`$1'"
512 # func_mktempdir [string]
513 # Make a temporary directory that won't clash with other running
514 # libtool processes, and avoids race conditions if possible. If
515 # given, STRING is the basename for that directory.
516 func_mktempdir ()
518 my_template="${TMPDIR-/tmp}/${1-$progname}"
520 if test "$opt_dry_run" = ":"; then
521 # Return a directory name, but don't create it in dry-run mode
522 my_tmpdir="${my_template}-$$"
523 else
525 # If mktemp works, use that first and foremost
526 my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
528 if test ! -d "$my_tmpdir"; then
529 # Failing that, at least try and use $RANDOM to avoid a race
530 my_tmpdir="${my_template}-${RANDOM-0}$$"
532 save_mktempdir_umask=`umask`
533 umask 0077
534 $MKDIR "$my_tmpdir"
535 umask $save_mktempdir_umask
538 # If we're not in dry-run mode, bomb out on failure
539 test -d "$my_tmpdir" || \
540 func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
543 $ECHO "$my_tmpdir"
547 # func_quote_for_eval arg
548 # Aesthetically quote ARG to be evaled later.
549 # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
550 # is double-quoted, suitable for a subsequent eval, whereas
551 # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
552 # which are still active within double quotes backslashified.
553 func_quote_for_eval ()
555 case $1 in
556 *[\\\`\"\$]*)
557 func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
559 func_quote_for_eval_unquoted_result="$1" ;;
560 esac
562 case $func_quote_for_eval_unquoted_result in
563 # Double-quote args containing shell metacharacters to delay
564 # word splitting, command substitution and and variable
565 # expansion for a subsequent eval.
566 # Many Bourne shells cannot handle close brackets correctly
567 # in scan sets, so we specify it separately.
568 *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
569 func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
572 func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
573 esac
577 # func_quote_for_expand arg
578 # Aesthetically quote ARG to be evaled later; same as above,
579 # but do not quote variable references.
580 func_quote_for_expand ()
582 case $1 in
583 *[\\\`\"]*)
584 my_arg=`$ECHO "$1" | $SED \
585 -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
587 my_arg="$1" ;;
588 esac
590 case $my_arg in
591 # Double-quote args containing shell metacharacters to delay
592 # word splitting and command substitution for a subsequent eval.
593 # Many Bourne shells cannot handle close brackets correctly
594 # in scan sets, so we specify it separately.
595 *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
596 my_arg="\"$my_arg\""
598 esac
600 func_quote_for_expand_result="$my_arg"
604 # func_show_eval cmd [fail_exp]
605 # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
606 # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
607 # is given, then evaluate it.
608 func_show_eval ()
610 my_cmd="$1"
611 my_fail_exp="${2-:}"
613 ${opt_silent-false} || {
614 func_quote_for_expand "$my_cmd"
615 eval "func_echo $func_quote_for_expand_result"
618 if ${opt_dry_run-false}; then :; else
619 eval "$my_cmd"
620 my_status=$?
621 if test "$my_status" -eq 0; then :; else
622 eval "(exit $my_status); $my_fail_exp"
628 # func_show_eval_locale cmd [fail_exp]
629 # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
630 # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
631 # is given, then evaluate it. Use the saved locale for evaluation.
632 func_show_eval_locale ()
634 my_cmd="$1"
635 my_fail_exp="${2-:}"
637 ${opt_silent-false} || {
638 func_quote_for_expand "$my_cmd"
639 eval "func_echo $func_quote_for_expand_result"
642 if ${opt_dry_run-false}; then :; else
643 eval "$lt_user_locale
644 $my_cmd"
645 my_status=$?
646 eval "$lt_safe_locale"
647 if test "$my_status" -eq 0; then :; else
648 eval "(exit $my_status); $my_fail_exp"
654 # func_version
655 # Echo version message to standard output and exit.
656 func_version ()
658 $SED -n '/(C)/!b go
659 :more
660 /\./!{
662 s/\n# / /
663 b more
666 /^# '$PROGRAM' (GNU /,/# warranty; / {
667 s/^# //
668 s/^# *$//
669 s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
671 }' < "$progpath"
672 exit $?
675 # func_usage
676 # Echo short help message to standard output and exit.
677 func_usage ()
679 $SED -n '/^# Usage:/,/^# *.*--help/ {
680 s/^# //
681 s/^# *$//
682 s/\$progname/'$progname'/
684 }' < "$progpath"
685 echo
686 $ECHO "run \`$progname --help | more' for full usage"
687 exit $?
690 # func_help [NOEXIT]
691 # Echo long help message to standard output and exit,
692 # unless 'noexit' is passed as argument.
693 func_help ()
695 $SED -n '/^# Usage:/,/# Report bugs to/ {
696 s/^# //
697 s/^# *$//
698 s*\$progname*'$progname'*
699 s*\$host*'"$host"'*
700 s*\$SHELL*'"$SHELL"'*
701 s*\$LTCC*'"$LTCC"'*
702 s*\$LTCFLAGS*'"$LTCFLAGS"'*
703 s*\$LD*'"$LD"'*
704 s/\$with_gnu_ld/'"$with_gnu_ld"'/
705 s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
706 s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
708 }' < "$progpath"
709 ret=$?
710 if test -z "$1"; then
711 exit $ret
715 # func_missing_arg argname
716 # Echo program name prefixed message to standard error and set global
717 # exit_cmd.
718 func_missing_arg ()
720 func_error "missing argument for $1."
721 exit_cmd=exit
724 exit_cmd=:
731 magic="%%%MAGIC variable%%%"
732 magic_exe="%%%MAGIC EXE variable%%%"
734 # Global variables.
735 # $mode is unset
736 nonopt=
737 execute_dlfiles=
738 preserve_args=
739 lo2o="s/\\.lo\$/.${objext}/"
740 o2lo="s/\\.${objext}\$/.lo/"
741 extracted_archives=
742 extracted_serial=0
744 opt_dry_run=false
745 opt_duplicate_deps=false
746 opt_silent=false
747 opt_debug=:
749 # If this variable is set in any of the actions, the command in it
750 # will be execed at the end. This prevents here-documents from being
751 # left over by shells.
752 exec_cmd=
754 # func_fatal_configuration arg...
755 # Echo program name prefixed message to standard error, followed by
756 # a configuration failure hint, and exit.
757 func_fatal_configuration ()
759 func_error ${1+"$@"}
760 func_error "See the $PACKAGE documentation for more information."
761 func_fatal_error "Fatal configuration error."
765 # func_config
766 # Display the configuration for all the tags in this script.
767 func_config ()
769 re_begincf='^# ### BEGIN LIBTOOL'
770 re_endcf='^# ### END LIBTOOL'
772 # Default configuration.
773 $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
775 # Now print the configurations for the tags.
776 for tagname in $taglist; do
777 $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
778 done
780 exit $?
783 # func_features
784 # Display the features supported by this script.
785 func_features ()
787 echo "host: $host"
788 if test "$build_libtool_libs" = yes; then
789 echo "enable shared libraries"
790 else
791 echo "disable shared libraries"
793 if test "$build_old_libs" = yes; then
794 echo "enable static libraries"
795 else
796 echo "disable static libraries"
799 exit $?
802 # func_enable_tag tagname
803 # Verify that TAGNAME is valid, and either flag an error and exit, or
804 # enable the TAGNAME tag. We also add TAGNAME to the global $taglist
805 # variable here.
806 func_enable_tag ()
808 # Global variable:
809 tagname="$1"
811 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
812 re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
813 sed_extractcf="/$re_begincf/,/$re_endcf/p"
815 # Validate tagname.
816 case $tagname in
817 *[!-_A-Za-z0-9,/]*)
818 func_fatal_error "invalid tag name: $tagname"
820 esac
822 # Don't test for the "default" C tag, as we know it's
823 # there but not specially marked.
824 case $tagname in
825 CC) ;;
827 if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
828 taglist="$taglist $tagname"
830 # Evaluate the configuration. Be careful to quote the path
831 # and the sed script, to avoid splitting on whitespace, but
832 # also don't use non-portable quotes within backquotes within
833 # quotes we have to do it in 2 steps:
834 extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
835 eval "$extractedcf"
836 else
837 func_error "ignoring unknown tag $tagname"
840 esac
843 # Parse options once, thoroughly. This comes as soon as possible in
844 # the script to make things like `libtool --version' happen quickly.
847 # Shorthand for --mode=foo, only valid as the first argument
848 case $1 in
849 clean|clea|cle|cl)
850 shift; set dummy --mode clean ${1+"$@"}; shift
852 compile|compil|compi|comp|com|co|c)
853 shift; set dummy --mode compile ${1+"$@"}; shift
855 execute|execut|execu|exec|exe|ex|e)
856 shift; set dummy --mode execute ${1+"$@"}; shift
858 finish|finis|fini|fin|fi|f)
859 shift; set dummy --mode finish ${1+"$@"}; shift
861 install|instal|insta|inst|ins|in|i)
862 shift; set dummy --mode install ${1+"$@"}; shift
864 link|lin|li|l)
865 shift; set dummy --mode link ${1+"$@"}; shift
867 uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
868 shift; set dummy --mode uninstall ${1+"$@"}; shift
870 esac
872 # Parse non-mode specific arguments:
873 while test "$#" -gt 0; do
874 opt="$1"
875 shift
877 case $opt in
878 --config) func_config ;;
880 --debug) preserve_args="$preserve_args $opt"
881 func_echo "enabling shell trace mode"
882 opt_debug='set -x'
883 $opt_debug
886 -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break
887 execute_dlfiles="$execute_dlfiles $1"
888 shift
891 --dry-run | -n) opt_dry_run=: ;;
892 --features) func_features ;;
893 --finish) mode="finish" ;;
895 --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break
896 case $1 in
897 # Valid mode arguments:
898 clean) ;;
899 compile) ;;
900 execute) ;;
901 finish) ;;
902 install) ;;
903 link) ;;
904 relink) ;;
905 uninstall) ;;
907 # Catch anything else as an error
908 *) func_error "invalid argument for $opt"
909 exit_cmd=exit
910 break
912 esac
914 mode="$1"
915 shift
918 --preserve-dup-deps)
919 opt_duplicate_deps=: ;;
921 --quiet|--silent) preserve_args="$preserve_args $opt"
922 opt_silent=:
923 opt_verbose=false
926 --no-quiet|--no-silent)
927 preserve_args="$preserve_args $opt"
928 opt_silent=false
931 --verbose| -v) preserve_args="$preserve_args $opt"
932 opt_silent=false
933 opt_verbose=:
936 --no-verbose) preserve_args="$preserve_args $opt"
937 opt_verbose=false
940 --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break
941 preserve_args="$preserve_args $opt $1"
942 func_enable_tag "$1" # tagname is set here
943 shift
946 # Separate optargs to long options:
947 -dlopen=*|--mode=*|--tag=*)
948 func_opt_split "$opt"
949 set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
950 shift
953 -\?|-h) func_usage ;;
954 --help) opt_help=: ;;
955 --help-all) opt_help=': help-all' ;;
956 --version) func_version ;;
958 -*) func_fatal_help "unrecognized option \`$opt'" ;;
960 *) nonopt="$opt"
961 break
963 esac
964 done
967 case $host in
968 *cygwin* | *mingw* | *pw32* | *cegcc*)
969 # don't eliminate duplications in $postdeps and $predeps
970 opt_duplicate_compiler_generated_deps=:
973 opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
975 esac
977 # Having warned about all mis-specified options, bail out if
978 # anything was wrong.
979 $exit_cmd $EXIT_FAILURE
982 # func_check_version_match
983 # Ensure that we are using m4 macros, and libtool script from the same
984 # release of libtool.
985 func_check_version_match ()
987 if test "$package_revision" != "$macro_revision"; then
988 if test "$VERSION" != "$macro_version"; then
989 if test -z "$macro_version"; then
990 cat >&2 <<_LT_EOF
991 $progname: Version mismatch error. This is $PACKAGE $VERSION, but the
992 $progname: definition of this LT_INIT comes from an older release.
993 $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
994 $progname: and run autoconf again.
995 _LT_EOF
996 else
997 cat >&2 <<_LT_EOF
998 $progname: Version mismatch error. This is $PACKAGE $VERSION, but the
999 $progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
1000 $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
1001 $progname: and run autoconf again.
1002 _LT_EOF
1004 else
1005 cat >&2 <<_LT_EOF
1006 $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
1007 $progname: but the definition of this LT_INIT comes from revision $macro_revision.
1008 $progname: You should recreate aclocal.m4 with macros from revision $package_revision
1009 $progname: of $PACKAGE $VERSION and run autoconf again.
1010 _LT_EOF
1013 exit $EXIT_MISMATCH
1018 ## ----------- ##
1019 ## Main. ##
1020 ## ----------- ##
1022 $opt_help || {
1023 # Sanity checks first:
1024 func_check_version_match
1026 if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
1027 func_fatal_configuration "not configured to build any kind of library"
1030 test -z "$mode" && func_fatal_error "error: you must specify a MODE."
1033 # Darwin sucks
1034 eval std_shrext=\"$shrext_cmds\"
1037 # Only execute mode is allowed to have -dlopen flags.
1038 if test -n "$execute_dlfiles" && test "$mode" != execute; then
1039 func_error "unrecognized option \`-dlopen'"
1040 $ECHO "$help" 1>&2
1041 exit $EXIT_FAILURE
1044 # Change the help message to a mode-specific one.
1045 generic_help="$help"
1046 help="Try \`$progname --help --mode=$mode' for more information."
1050 # func_lalib_p file
1051 # True iff FILE is a libtool `.la' library or `.lo' object file.
1052 # This function is only a basic sanity check; it will hardly flush out
1053 # determined imposters.
1054 func_lalib_p ()
1056 test -f "$1" &&
1057 $SED -e 4q "$1" 2>/dev/null \
1058 | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
1061 # func_lalib_unsafe_p file
1062 # True iff FILE is a libtool `.la' library or `.lo' object file.
1063 # This function implements the same check as func_lalib_p without
1064 # resorting to external programs. To this end, it redirects stdin and
1065 # closes it afterwards, without saving the original file descriptor.
1066 # As a safety measure, use it only where a negative result would be
1067 # fatal anyway. Works if `file' does not exist.
1068 func_lalib_unsafe_p ()
1070 lalib_p=no
1071 if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
1072 for lalib_p_l in 1 2 3 4
1074 read lalib_p_line
1075 case "$lalib_p_line" in
1076 \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
1077 esac
1078 done
1079 exec 0<&5 5<&-
1081 test "$lalib_p" = yes
1084 # func_ltwrapper_script_p file
1085 # True iff FILE is a libtool wrapper script
1086 # This function is only a basic sanity check; it will hardly flush out
1087 # determined imposters.
1088 func_ltwrapper_script_p ()
1090 func_lalib_p "$1"
1093 # func_ltwrapper_executable_p file
1094 # True iff FILE is a libtool wrapper executable
1095 # This function is only a basic sanity check; it will hardly flush out
1096 # determined imposters.
1097 func_ltwrapper_executable_p ()
1099 func_ltwrapper_exec_suffix=
1100 case $1 in
1101 *.exe) ;;
1102 *) func_ltwrapper_exec_suffix=.exe ;;
1103 esac
1104 $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
1107 # func_ltwrapper_scriptname file
1108 # Assumes file is an ltwrapper_executable
1109 # uses $file to determine the appropriate filename for a
1110 # temporary ltwrapper_script.
1111 func_ltwrapper_scriptname ()
1113 func_ltwrapper_scriptname_result=""
1114 if func_ltwrapper_executable_p "$1"; then
1115 func_dirname_and_basename "$1" "" "."
1116 func_stripname '' '.exe' "$func_basename_result"
1117 func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
1121 # func_ltwrapper_p file
1122 # True iff FILE is a libtool wrapper script or wrapper executable
1123 # This function is only a basic sanity check; it will hardly flush out
1124 # determined imposters.
1125 func_ltwrapper_p ()
1127 func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
1131 # func_execute_cmds commands fail_cmd
1132 # Execute tilde-delimited COMMANDS.
1133 # If FAIL_CMD is given, eval that upon failure.
1134 # FAIL_CMD may read-access the current command in variable CMD!
1135 func_execute_cmds ()
1137 $opt_debug
1138 save_ifs=$IFS; IFS='~'
1139 for cmd in $1; do
1140 IFS=$save_ifs
1141 eval cmd=\"$cmd\"
1142 func_show_eval "$cmd" "${2-:}"
1143 done
1144 IFS=$save_ifs
1148 # func_source file
1149 # Source FILE, adding directory component if necessary.
1150 # Note that it is not necessary on cygwin/mingw to append a dot to
1151 # FILE even if both FILE and FILE.exe exist: automatic-append-.exe
1152 # behavior happens only for exec(3), not for open(2)! Also, sourcing
1153 # `FILE.' does not work on cygwin managed mounts.
1154 func_source ()
1156 $opt_debug
1157 case $1 in
1158 */* | *\\*) . "$1" ;;
1159 *) . "./$1" ;;
1160 esac
1164 # func_infer_tag arg
1165 # Infer tagged configuration to use if any are available and
1166 # if one wasn't chosen via the "--tag" command line option.
1167 # Only attempt this if the compiler in the base compile
1168 # command doesn't match the default compiler.
1169 # arg is usually of the form 'gcc ...'
1170 func_infer_tag ()
1172 $opt_debug
1173 if test -n "$available_tags" && test -z "$tagname"; then
1174 CC_quoted=
1175 for arg in $CC; do
1176 func_quote_for_eval "$arg"
1177 CC_quoted="$CC_quoted $func_quote_for_eval_result"
1178 done
1179 CC_expanded=`func_echo_all $CC`
1180 CC_quoted_expanded=`func_echo_all $CC_quoted`
1181 case $@ in
1182 # Blanks in the command may have been stripped by the calling shell,
1183 # but not from the CC environment variable when configure was run.
1184 " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
1185 " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
1186 # Blanks at the start of $base_compile will cause this to fail
1187 # if we don't check for them as well.
1189 for z in $available_tags; do
1190 if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
1191 # Evaluate the configuration.
1192 eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
1193 CC_quoted=
1194 for arg in $CC; do
1195 # Double-quote args containing other shell metacharacters.
1196 func_quote_for_eval "$arg"
1197 CC_quoted="$CC_quoted $func_quote_for_eval_result"
1198 done
1199 CC_expanded=`func_echo_all $CC`
1200 CC_quoted_expanded=`func_echo_all $CC_quoted`
1201 case "$@ " in
1202 " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
1203 " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
1204 # The compiler in the base compile command matches
1205 # the one in the tagged configuration.
1206 # Assume this is the tagged configuration we want.
1207 tagname=$z
1208 break
1210 esac
1212 done
1213 # If $tagname still isn't set, then no tagged configuration
1214 # was found and let the user know that the "--tag" command
1215 # line option must be used.
1216 if test -z "$tagname"; then
1217 func_echo "unable to infer tagged configuration"
1218 func_fatal_error "specify a tag with \`--tag'"
1219 # else
1220 # func_verbose "using $tagname tagged configuration"
1223 esac
1229 # func_write_libtool_object output_name pic_name nonpic_name
1230 # Create a libtool object file (analogous to a ".la" file),
1231 # but don't create it if we're doing a dry run.
1232 func_write_libtool_object ()
1234 write_libobj=${1}
1235 if test "$build_libtool_libs" = yes; then
1236 write_lobj=\'${2}\'
1237 else
1238 write_lobj=none
1241 if test "$build_old_libs" = yes; then
1242 write_oldobj=\'${3}\'
1243 else
1244 write_oldobj=none
1247 $opt_dry_run || {
1248 cat >${write_libobj}T <<EOF
1249 # $write_libobj - a libtool object file
1250 # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
1252 # Please DO NOT delete this file!
1253 # It is necessary for linking the library.
1255 # Name of the PIC object.
1256 pic_object=$write_lobj
1258 # Name of the non-PIC object
1259 non_pic_object=$write_oldobj
1262 $MV "${write_libobj}T" "${write_libobj}"
1266 # func_mode_compile arg...
1267 func_mode_compile ()
1269 $opt_debug
1270 # Get the compilation command and the source file.
1271 base_compile=
1272 srcfile="$nonopt" # always keep a non-empty value in "srcfile"
1273 suppress_opt=yes
1274 suppress_output=
1275 arg_mode=normal
1276 libobj=
1277 later=
1278 pie_flag=
1280 for arg
1282 case $arg_mode in
1283 arg )
1284 # do not "continue". Instead, add this to base_compile
1285 lastarg="$arg"
1286 arg_mode=normal
1289 target )
1290 libobj="$arg"
1291 arg_mode=normal
1292 continue
1295 normal )
1296 # Accept any command-line options.
1297 case $arg in
1299 test -n "$libobj" && \
1300 func_fatal_error "you cannot specify \`-o' more than once"
1301 arg_mode=target
1302 continue
1305 -pie | -fpie | -fPIE)
1306 pie_flag="$pie_flag $arg"
1307 continue
1310 -shared | -static | -prefer-pic | -prefer-non-pic)
1311 later="$later $arg"
1312 continue
1315 -no-suppress)
1316 suppress_opt=no
1317 continue
1320 -Xcompiler)
1321 arg_mode=arg # the next one goes into the "base_compile" arg list
1322 continue # The current "srcfile" will either be retained or
1323 ;; # replaced later. I would guess that would be a bug.
1325 -Wc,*)
1326 func_stripname '-Wc,' '' "$arg"
1327 args=$func_stripname_result
1328 lastarg=
1329 save_ifs="$IFS"; IFS=','
1330 for arg in $args; do
1331 IFS="$save_ifs"
1332 func_quote_for_eval "$arg"
1333 lastarg="$lastarg $func_quote_for_eval_result"
1334 done
1335 IFS="$save_ifs"
1336 func_stripname ' ' '' "$lastarg"
1337 lastarg=$func_stripname_result
1339 # Add the arguments to base_compile.
1340 base_compile="$base_compile $lastarg"
1341 continue
1345 # Accept the current argument as the source file.
1346 # The previous "srcfile" becomes the current argument.
1348 lastarg="$srcfile"
1349 srcfile="$arg"
1351 esac # case $arg
1353 esac # case $arg_mode
1355 # Aesthetically quote the previous argument.
1356 func_quote_for_eval "$lastarg"
1357 base_compile="$base_compile $func_quote_for_eval_result"
1358 done # for arg
1360 case $arg_mode in
1361 arg)
1362 func_fatal_error "you must specify an argument for -Xcompile"
1364 target)
1365 func_fatal_error "you must specify a target with \`-o'"
1368 # Get the name of the library object.
1369 test -z "$libobj" && {
1370 func_basename "$srcfile"
1371 libobj="$func_basename_result"
1374 esac
1376 # Recognize several different file suffixes.
1377 # If the user specifies -o file.o, it is replaced with file.lo
1378 case $libobj in
1379 *.[cCFSifmso] | \
1380 *.ada | *.adb | *.ads | *.asm | \
1381 *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
1382 *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
1383 func_xform "$libobj"
1384 libobj=$func_xform_result
1386 esac
1388 case $libobj in
1389 *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
1391 func_fatal_error "cannot determine name of library object from \`$libobj'"
1393 esac
1395 func_infer_tag $base_compile
1397 for arg in $later; do
1398 case $arg in
1399 -shared)
1400 test "$build_libtool_libs" != yes && \
1401 func_fatal_configuration "can not build a shared library"
1402 build_old_libs=no
1403 continue
1406 -static)
1407 build_libtool_libs=no
1408 build_old_libs=yes
1409 continue
1412 -prefer-pic)
1413 pic_mode=yes
1414 continue
1417 -prefer-non-pic)
1418 pic_mode=no
1419 continue
1421 esac
1422 done
1424 func_quote_for_eval "$libobj"
1425 test "X$libobj" != "X$func_quote_for_eval_result" \
1426 && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
1427 && func_warning "libobj name \`$libobj' may not contain shell special characters."
1428 func_dirname_and_basename "$obj" "/" ""
1429 objname="$func_basename_result"
1430 xdir="$func_dirname_result"
1431 lobj=${xdir}$objdir/$objname
1433 test -z "$base_compile" && \
1434 func_fatal_help "you must specify a compilation command"
1436 # Delete any leftover library objects.
1437 if test "$build_old_libs" = yes; then
1438 removelist="$obj $lobj $libobj ${libobj}T"
1439 else
1440 removelist="$lobj $libobj ${libobj}T"
1443 # On Cygwin there's no "real" PIC flag so we must build both object types
1444 case $host_os in
1445 cygwin* | mingw* | pw32* | os2* | cegcc*)
1446 pic_mode=default
1448 esac
1449 if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
1450 # non-PIC code in shared libraries is not supported
1451 pic_mode=default
1454 # Calculate the filename of the output object if compiler does
1455 # not support -o with -c
1456 if test "$compiler_c_o" = no; then
1457 output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
1458 lockfile="$output_obj.lock"
1459 else
1460 output_obj=
1461 need_locks=no
1462 lockfile=
1465 # Lock this critical section if it is needed
1466 # We use this script file to make the link, it avoids creating a new file
1467 if test "$need_locks" = yes; then
1468 until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
1469 func_echo "Waiting for $lockfile to be removed"
1470 sleep 2
1471 done
1472 elif test "$need_locks" = warn; then
1473 if test -f "$lockfile"; then
1474 $ECHO "\
1475 *** ERROR, $lockfile exists and contains:
1476 `cat $lockfile 2>/dev/null`
1478 This indicates that another process is trying to use the same
1479 temporary object file, and libtool could not work around it because
1480 your compiler does not support \`-c' and \`-o' together. If you
1481 repeat this compilation, it may succeed, by chance, but you had better
1482 avoid parallel builds (make -j) in this platform, or get a better
1483 compiler."
1485 $opt_dry_run || $RM $removelist
1486 exit $EXIT_FAILURE
1488 removelist="$removelist $output_obj"
1489 $ECHO "$srcfile" > "$lockfile"
1492 $opt_dry_run || $RM $removelist
1493 removelist="$removelist $lockfile"
1494 trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
1496 if test -n "$fix_srcfile_path"; then
1497 eval srcfile=\"$fix_srcfile_path\"
1499 func_quote_for_eval "$srcfile"
1500 qsrcfile=$func_quote_for_eval_result
1502 # Only build a PIC object if we are building libtool libraries.
1503 if test "$build_libtool_libs" = yes; then
1504 # Without this assignment, base_compile gets emptied.
1505 fbsd_hideous_sh_bug=$base_compile
1507 if test "$pic_mode" != no; then
1508 command="$base_compile $qsrcfile $pic_flag"
1509 else
1510 # Don't build PIC code
1511 command="$base_compile $qsrcfile"
1514 func_mkdir_p "$xdir$objdir"
1516 if test -z "$output_obj"; then
1517 # Place PIC objects in $objdir
1518 command="$command -o $lobj"
1521 func_show_eval_locale "$command" \
1522 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
1524 if test "$need_locks" = warn &&
1525 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
1526 $ECHO "\
1527 *** ERROR, $lockfile contains:
1528 `cat $lockfile 2>/dev/null`
1530 but it should contain:
1531 $srcfile
1533 This indicates that another process is trying to use the same
1534 temporary object file, and libtool could not work around it because
1535 your compiler does not support \`-c' and \`-o' together. If you
1536 repeat this compilation, it may succeed, by chance, but you had better
1537 avoid parallel builds (make -j) in this platform, or get a better
1538 compiler."
1540 $opt_dry_run || $RM $removelist
1541 exit $EXIT_FAILURE
1544 # Just move the object if needed, then go on to compile the next one
1545 if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
1546 func_show_eval '$MV "$output_obj" "$lobj"' \
1547 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
1550 # Allow error messages only from the first compilation.
1551 if test "$suppress_opt" = yes; then
1552 suppress_output=' >/dev/null 2>&1'
1556 # Only build a position-dependent object if we build old libraries.
1557 if test "$build_old_libs" = yes; then
1558 if test "$pic_mode" != yes; then
1559 # Don't build PIC code
1560 command="$base_compile $qsrcfile$pie_flag"
1561 else
1562 command="$base_compile $qsrcfile $pic_flag"
1564 if test "$compiler_c_o" = yes; then
1565 command="$command -o $obj"
1568 # Suppress compiler output if we already did a PIC compilation.
1569 command="$command$suppress_output"
1570 func_show_eval_locale "$command" \
1571 '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
1573 if test "$need_locks" = warn &&
1574 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
1575 $ECHO "\
1576 *** ERROR, $lockfile contains:
1577 `cat $lockfile 2>/dev/null`
1579 but it should contain:
1580 $srcfile
1582 This indicates that another process is trying to use the same
1583 temporary object file, and libtool could not work around it because
1584 your compiler does not support \`-c' and \`-o' together. If you
1585 repeat this compilation, it may succeed, by chance, but you had better
1586 avoid parallel builds (make -j) in this platform, or get a better
1587 compiler."
1589 $opt_dry_run || $RM $removelist
1590 exit $EXIT_FAILURE
1593 # Just move the object if needed
1594 if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
1595 func_show_eval '$MV "$output_obj" "$obj"' \
1596 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
1600 $opt_dry_run || {
1601 func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
1603 # Unlock the critical section if it was locked
1604 if test "$need_locks" != no; then
1605 removelist=$lockfile
1606 $RM "$lockfile"
1610 exit $EXIT_SUCCESS
1613 $opt_help || {
1614 test "$mode" = compile && func_mode_compile ${1+"$@"}
1617 func_mode_help ()
1619 # We need to display help for each of the modes.
1620 case $mode in
1622 # Generic help is extracted from the usage comments
1623 # at the start of this file.
1624 func_help
1627 clean)
1628 $ECHO \
1629 "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
1631 Remove files from the build directory.
1633 RM is the name of the program to use to delete files associated with each FILE
1634 (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
1635 to RM.
1637 If FILE is a libtool library, object or program, all the files associated
1638 with it are deleted. Otherwise, only FILE itself is deleted using RM."
1641 compile)
1642 $ECHO \
1643 "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
1645 Compile a source file into a libtool library object.
1647 This mode accepts the following additional options:
1649 -o OUTPUT-FILE set the output file name to OUTPUT-FILE
1650 -no-suppress do not suppress compiler output for multiple passes
1651 -prefer-pic try to build PIC objects only
1652 -prefer-non-pic try to build non-PIC objects only
1653 -shared do not build a \`.o' file suitable for static linking
1654 -static only build a \`.o' file suitable for static linking
1655 -Wc,FLAG pass FLAG directly to the compiler
1657 COMPILE-COMMAND is a command to be used in creating a \`standard' object file
1658 from the given SOURCEFILE.
1660 The output file name is determined by removing the directory component from
1661 SOURCEFILE, then substituting the C source code suffix \`.c' with the
1662 library object suffix, \`.lo'."
1665 execute)
1666 $ECHO \
1667 "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
1669 Automatically set library path, then run a program.
1671 This mode accepts the following additional options:
1673 -dlopen FILE add the directory containing FILE to the library path
1675 This mode sets the library path environment variable according to \`-dlopen'
1676 flags.
1678 If any of the ARGS are libtool executable wrappers, then they are translated
1679 into their corresponding uninstalled binary, and any of their required library
1680 directories are added to the library path.
1682 Then, COMMAND is executed, with ARGS as arguments."
1685 finish)
1686 $ECHO \
1687 "Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
1689 Complete the installation of libtool libraries.
1691 Each LIBDIR is a directory that contains libtool libraries.
1693 The commands that this mode executes may require superuser privileges. Use
1694 the \`--dry-run' option if you just want to see what would be executed."
1697 install)
1698 $ECHO \
1699 "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
1701 Install executables or libraries.
1703 INSTALL-COMMAND is the installation command. The first component should be
1704 either the \`install' or \`cp' program.
1706 The following components of INSTALL-COMMAND are treated specially:
1708 -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation
1710 The rest of the components are interpreted as arguments to that command (only
1711 BSD-compatible install options are recognized)."
1714 link)
1715 $ECHO \
1716 "Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
1718 Link object files or libraries together to form another library, or to
1719 create an executable program.
1721 LINK-COMMAND is a command using the C compiler that you would use to create
1722 a program from several object files.
1724 The following components of LINK-COMMAND are treated specially:
1726 -all-static do not do any dynamic linking at all
1727 -avoid-version do not add a version suffix if possible
1728 -bindir BINDIR specify path to binaries directory (for systems where
1729 libraries must be found in the PATH setting at runtime)
1730 -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
1731 -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
1732 -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
1733 -export-symbols SYMFILE
1734 try to export only the symbols listed in SYMFILE
1735 -export-symbols-regex REGEX
1736 try to export only the symbols matching REGEX
1737 -LLIBDIR search LIBDIR for required installed libraries
1738 -lNAME OUTPUT-FILE requires the installed library libNAME
1739 -module build a library that can dlopened
1740 -no-fast-install disable the fast-install mode
1741 -no-install link a not-installable executable
1742 -no-undefined declare that a library does not refer to external symbols
1743 -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
1744 -objectlist FILE Use a list of object files found in FILE to specify objects
1745 -precious-files-regex REGEX
1746 don't remove output files matching REGEX
1747 -release RELEASE specify package release information
1748 -rpath LIBDIR the created library will eventually be installed in LIBDIR
1749 -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
1750 -shared only do dynamic linking of libtool libraries
1751 -shrext SUFFIX override the standard shared library file extension
1752 -static do not do any dynamic linking of uninstalled libtool libraries
1753 -static-libtool-libs
1754 do not do any dynamic linking of libtool libraries
1755 -version-info CURRENT[:REVISION[:AGE]]
1756 specify library version info [each variable defaults to 0]
1757 -weak LIBNAME declare that the target provides the LIBNAME interface
1758 -Wc,FLAG
1759 -Xcompiler FLAG pass linker-specific FLAG directly to the compiler
1760 -Wl,FLAG
1761 -Xlinker FLAG pass linker-specific FLAG directly to the linker
1762 -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
1764 All other options (arguments beginning with \`-') are ignored.
1766 Every other argument is treated as a filename. Files ending in \`.la' are
1767 treated as uninstalled libtool libraries, other files are standard or library
1768 object files.
1770 If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
1771 only library objects (\`.lo' files) may be specified, and \`-rpath' is
1772 required, except when creating a convenience library.
1774 If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
1775 using \`ar' and \`ranlib', or on Windows using \`lib'.
1777 If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
1778 is created, otherwise an executable program is created."
1781 uninstall)
1782 $ECHO \
1783 "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
1785 Remove libraries from an installation directory.
1787 RM is the name of the program to use to delete files associated with each FILE
1788 (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
1789 to RM.
1791 If FILE is a libtool library, all the files associated with it are deleted.
1792 Otherwise, only FILE itself is deleted using RM."
1796 func_fatal_help "invalid operation mode \`$mode'"
1798 esac
1800 echo
1801 $ECHO "Try \`$progname --help' for more information about other modes."
1804 # Now that we've collected a possible --mode arg, show help if necessary
1805 if $opt_help; then
1806 if test "$opt_help" = :; then
1807 func_mode_help
1808 else
1810 func_help noexit
1811 for mode in compile link execute install finish uninstall clean; do
1812 func_mode_help
1813 done
1814 } | sed -n '1p; 2,$s/^Usage:/ or: /p'
1816 func_help noexit
1817 for mode in compile link execute install finish uninstall clean; do
1818 echo
1819 func_mode_help
1820 done
1822 sed '1d
1823 /^When reporting/,/^Report/{
1828 /information about other modes/d
1829 /more detailed .*MODE/d
1830 s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
1832 exit $?
1836 # func_mode_execute arg...
1837 func_mode_execute ()
1839 $opt_debug
1840 # The first argument is the command name.
1841 cmd="$nonopt"
1842 test -z "$cmd" && \
1843 func_fatal_help "you must specify a COMMAND"
1845 # Handle -dlopen flags immediately.
1846 for file in $execute_dlfiles; do
1847 test -f "$file" \
1848 || func_fatal_help "\`$file' is not a file"
1850 dir=
1851 case $file in
1852 *.la)
1853 # Check to see that this really is a libtool archive.
1854 func_lalib_unsafe_p "$file" \
1855 || func_fatal_help "\`$lib' is not a valid libtool archive"
1857 # Read the libtool library.
1858 dlname=
1859 library_names=
1860 func_source "$file"
1862 # Skip this library if it cannot be dlopened.
1863 if test -z "$dlname"; then
1864 # Warn if it was a shared library.
1865 test -n "$library_names" && \
1866 func_warning "\`$file' was not linked with \`-export-dynamic'"
1867 continue
1870 func_dirname "$file" "" "."
1871 dir="$func_dirname_result"
1873 if test -f "$dir/$objdir/$dlname"; then
1874 dir="$dir/$objdir"
1875 else
1876 if test ! -f "$dir/$dlname"; then
1877 func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
1882 *.lo)
1883 # Just add the directory containing the .lo file.
1884 func_dirname "$file" "" "."
1885 dir="$func_dirname_result"
1889 func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
1890 continue
1892 esac
1894 # Get the absolute pathname.
1895 absdir=`cd "$dir" && pwd`
1896 test -n "$absdir" && dir="$absdir"
1898 # Now add the directory to shlibpath_var.
1899 if eval "test -z \"\$$shlibpath_var\""; then
1900 eval "$shlibpath_var=\"\$dir\""
1901 else
1902 eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
1904 done
1906 # This variable tells wrapper scripts just to set shlibpath_var
1907 # rather than running their programs.
1908 libtool_execute_magic="$magic"
1910 # Check if any of the arguments is a wrapper script.
1911 args=
1912 for file
1914 case $file in
1915 -* | *.la | *.lo ) ;;
1917 # Do a test to see if this is really a libtool program.
1918 if func_ltwrapper_script_p "$file"; then
1919 func_source "$file"
1920 # Transform arg to wrapped name.
1921 file="$progdir/$program"
1922 elif func_ltwrapper_executable_p "$file"; then
1923 func_ltwrapper_scriptname "$file"
1924 func_source "$func_ltwrapper_scriptname_result"
1925 # Transform arg to wrapped name.
1926 file="$progdir/$program"
1929 esac
1930 # Quote arguments (to preserve shell metacharacters).
1931 func_quote_for_eval "$file"
1932 args="$args $func_quote_for_eval_result"
1933 done
1935 if test "X$opt_dry_run" = Xfalse; then
1936 if test -n "$shlibpath_var"; then
1937 # Export the shlibpath_var.
1938 eval "export $shlibpath_var"
1941 # Restore saved environment variables
1942 for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
1944 eval "if test \"\${save_$lt_var+set}\" = set; then
1945 $lt_var=\$save_$lt_var; export $lt_var
1946 else
1947 $lt_unset $lt_var
1949 done
1951 # Now prepare to actually exec the command.
1952 exec_cmd="\$cmd$args"
1953 else
1954 # Display what would be done.
1955 if test -n "$shlibpath_var"; then
1956 eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
1957 echo "export $shlibpath_var"
1959 $ECHO "$cmd$args"
1960 exit $EXIT_SUCCESS
1964 test "$mode" = execute && func_mode_execute ${1+"$@"}
1967 # func_mode_finish arg...
1968 func_mode_finish ()
1970 $opt_debug
1971 libdirs="$nonopt"
1972 admincmds=
1974 if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
1975 for dir
1977 libdirs="$libdirs $dir"
1978 done
1980 for libdir in $libdirs; do
1981 if test -n "$finish_cmds"; then
1982 # Do each command in the finish commands.
1983 func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
1984 '"$cmd"'"'
1986 if test -n "$finish_eval"; then
1987 # Do the single finish_eval.
1988 eval cmds=\"$finish_eval\"
1989 $opt_dry_run || eval "$cmds" || admincmds="$admincmds
1990 $cmds"
1992 done
1995 # Exit here if they wanted silent mode.
1996 $opt_silent && exit $EXIT_SUCCESS
1998 echo "----------------------------------------------------------------------"
1999 echo "Libraries have been installed in:"
2000 for libdir in $libdirs; do
2001 $ECHO " $libdir"
2002 done
2003 echo
2004 echo "If you ever happen to want to link against installed libraries"
2005 echo "in a given directory, LIBDIR, you must either use libtool, and"
2006 echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
2007 echo "flag during linking and do at least one of the following:"
2008 if test -n "$shlibpath_var"; then
2009 echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
2010 echo " during execution"
2012 if test -n "$runpath_var"; then
2013 echo " - add LIBDIR to the \`$runpath_var' environment variable"
2014 echo " during linking"
2016 if test -n "$hardcode_libdir_flag_spec"; then
2017 libdir=LIBDIR
2018 eval flag=\"$hardcode_libdir_flag_spec\"
2020 $ECHO " - use the \`$flag' linker flag"
2022 if test -n "$admincmds"; then
2023 $ECHO " - have your system administrator run these commands:$admincmds"
2025 if test -f /etc/ld.so.conf; then
2026 echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
2028 echo
2030 echo "See any operating system documentation about shared libraries for"
2031 case $host in
2032 solaris2.[6789]|solaris2.1[0-9])
2033 echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
2034 echo "pages."
2037 echo "more information, such as the ld(1) and ld.so(8) manual pages."
2039 esac
2040 echo "----------------------------------------------------------------------"
2041 exit $EXIT_SUCCESS
2044 test "$mode" = finish && func_mode_finish ${1+"$@"}
2047 # func_mode_install arg...
2048 func_mode_install ()
2050 $opt_debug
2051 # There may be an optional sh(1) argument at the beginning of
2052 # install_prog (especially on Windows NT).
2053 if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
2054 # Allow the use of GNU shtool's install command.
2055 case $nonopt in *shtool*) :;; *) false;; esac; then
2056 # Aesthetically quote it.
2057 func_quote_for_eval "$nonopt"
2058 install_prog="$func_quote_for_eval_result "
2059 arg=$1
2060 shift
2061 else
2062 install_prog=
2063 arg=$nonopt
2066 # The real first argument should be the name of the installation program.
2067 # Aesthetically quote it.
2068 func_quote_for_eval "$arg"
2069 install_prog="$install_prog$func_quote_for_eval_result"
2070 install_shared_prog=$install_prog
2071 case " $install_prog " in
2072 *[\\\ /]cp\ *) install_cp=: ;;
2073 *) install_cp=false ;;
2074 esac
2076 # We need to accept at least all the BSD install flags.
2077 dest=
2078 files=
2079 opts=
2080 prev=
2081 install_type=
2082 isdir=no
2083 stripme=
2084 no_mode=:
2085 for arg
2087 arg2=
2088 if test -n "$dest"; then
2089 files="$files $dest"
2090 dest=$arg
2091 continue
2094 case $arg in
2095 -d) isdir=yes ;;
2097 if $install_cp; then :; else
2098 prev=$arg
2101 -g | -m | -o)
2102 prev=$arg
2105 stripme=" -s"
2106 continue
2111 # If the previous option needed an argument, then skip it.
2112 if test -n "$prev"; then
2113 if test "x$prev" = x-m && test -n "$install_override_mode"; then
2114 arg2=$install_override_mode
2115 no_mode=false
2117 prev=
2118 else
2119 dest=$arg
2120 continue
2123 esac
2125 # Aesthetically quote the argument.
2126 func_quote_for_eval "$arg"
2127 install_prog="$install_prog $func_quote_for_eval_result"
2128 if test -n "$arg2"; then
2129 func_quote_for_eval "$arg2"
2131 install_shared_prog="$install_shared_prog $func_quote_for_eval_result"
2132 done
2134 test -z "$install_prog" && \
2135 func_fatal_help "you must specify an install program"
2137 test -n "$prev" && \
2138 func_fatal_help "the \`$prev' option requires an argument"
2140 if test -n "$install_override_mode" && $no_mode; then
2141 if $install_cp; then :; else
2142 func_quote_for_eval "$install_override_mode"
2143 install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result"
2147 if test -z "$files"; then
2148 if test -z "$dest"; then
2149 func_fatal_help "no file or destination specified"
2150 else
2151 func_fatal_help "you must specify a destination"
2155 # Strip any trailing slash from the destination.
2156 func_stripname '' '/' "$dest"
2157 dest=$func_stripname_result
2159 # Check to see that the destination is a directory.
2160 test -d "$dest" && isdir=yes
2161 if test "$isdir" = yes; then
2162 destdir="$dest"
2163 destname=
2164 else
2165 func_dirname_and_basename "$dest" "" "."
2166 destdir="$func_dirname_result"
2167 destname="$func_basename_result"
2169 # Not a directory, so check to see that there is only one file specified.
2170 set dummy $files; shift
2171 test "$#" -gt 1 && \
2172 func_fatal_help "\`$dest' is not a directory"
2174 case $destdir in
2175 [\\/]* | [A-Za-z]:[\\/]*) ;;
2177 for file in $files; do
2178 case $file in
2179 *.lo) ;;
2181 func_fatal_help "\`$destdir' must be an absolute directory name"
2183 esac
2184 done
2186 esac
2188 # This variable tells wrapper scripts just to set variables rather
2189 # than running their programs.
2190 libtool_install_magic="$magic"
2192 staticlibs=
2193 future_libdirs=
2194 current_libdirs=
2195 for file in $files; do
2197 # Do each installation.
2198 case $file in
2199 *.$libext)
2200 # Do the static libraries later.
2201 staticlibs="$staticlibs $file"
2204 *.la)
2205 # Check to see that this really is a libtool archive.
2206 func_lalib_unsafe_p "$file" \
2207 || func_fatal_help "\`$file' is not a valid libtool archive"
2209 library_names=
2210 old_library=
2211 relink_command=
2212 func_source "$file"
2214 # Add the libdir to current_libdirs if it is the destination.
2215 if test "X$destdir" = "X$libdir"; then
2216 case "$current_libdirs " in
2217 *" $libdir "*) ;;
2218 *) current_libdirs="$current_libdirs $libdir" ;;
2219 esac
2220 else
2221 # Note the libdir as a future libdir.
2222 case "$future_libdirs " in
2223 *" $libdir "*) ;;
2224 *) future_libdirs="$future_libdirs $libdir" ;;
2225 esac
2228 func_dirname "$file" "/" ""
2229 dir="$func_dirname_result"
2230 dir="$dir$objdir"
2232 if test -n "$relink_command"; then
2233 # Determine the prefix the user has applied to our future dir.
2234 inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
2236 # Don't allow the user to place us outside of our expected
2237 # location b/c this prevents finding dependent libraries that
2238 # are installed to the same prefix.
2239 # At present, this check doesn't affect windows .dll's that
2240 # are installed into $libdir/../bin (currently, that works fine)
2241 # but it's something to keep an eye on.
2242 test "$inst_prefix_dir" = "$destdir" && \
2243 func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
2245 if test -n "$inst_prefix_dir"; then
2246 # Stick the inst_prefix_dir data into the link command.
2247 relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
2248 else
2249 relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
2252 func_warning "relinking \`$file'"
2253 func_show_eval "$relink_command" \
2254 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
2257 # See the names of the shared library.
2258 set dummy $library_names; shift
2259 if test -n "$1"; then
2260 realname="$1"
2261 shift
2263 srcname="$realname"
2264 test -n "$relink_command" && srcname="$realname"T
2266 # Install the shared library and build the symlinks.
2267 func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
2268 'exit $?'
2269 tstripme="$stripme"
2270 case $host_os in
2271 cygwin* | mingw* | pw32* | cegcc*)
2272 case $realname in
2273 *.dll.a)
2274 tstripme=""
2276 esac
2278 esac
2279 if test -n "$tstripme" && test -n "$striplib"; then
2280 func_show_eval "$striplib $destdir/$realname" 'exit $?'
2283 if test "$#" -gt 0; then
2284 # Delete the old symlinks, and create new ones.
2285 # Try `ln -sf' first, because the `ln' binary might depend on
2286 # the symlink we replace! Solaris /bin/ln does not understand -f,
2287 # so we also need to try rm && ln -s.
2288 for linkname
2290 test "$linkname" != "$realname" \
2291 && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
2292 done
2295 # Do each command in the postinstall commands.
2296 lib="$destdir/$realname"
2297 func_execute_cmds "$postinstall_cmds" 'exit $?'
2300 # Install the pseudo-library for information purposes.
2301 func_basename "$file"
2302 name="$func_basename_result"
2303 instname="$dir/$name"i
2304 func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
2306 # Maybe install the static library, too.
2307 test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
2310 *.lo)
2311 # Install (i.e. copy) a libtool object.
2313 # Figure out destination file name, if it wasn't already specified.
2314 if test -n "$destname"; then
2315 destfile="$destdir/$destname"
2316 else
2317 func_basename "$file"
2318 destfile="$func_basename_result"
2319 destfile="$destdir/$destfile"
2322 # Deduce the name of the destination old-style object file.
2323 case $destfile in
2324 *.lo)
2325 func_lo2o "$destfile"
2326 staticdest=$func_lo2o_result
2328 *.$objext)
2329 staticdest="$destfile"
2330 destfile=
2333 func_fatal_help "cannot copy a libtool object to \`$destfile'"
2335 esac
2337 # Install the libtool object if requested.
2338 test -n "$destfile" && \
2339 func_show_eval "$install_prog $file $destfile" 'exit $?'
2341 # Install the old object if enabled.
2342 if test "$build_old_libs" = yes; then
2343 # Deduce the name of the old-style object file.
2344 func_lo2o "$file"
2345 staticobj=$func_lo2o_result
2346 func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
2348 exit $EXIT_SUCCESS
2352 # Figure out destination file name, if it wasn't already specified.
2353 if test -n "$destname"; then
2354 destfile="$destdir/$destname"
2355 else
2356 func_basename "$file"
2357 destfile="$func_basename_result"
2358 destfile="$destdir/$destfile"
2361 # If the file is missing, and there is a .exe on the end, strip it
2362 # because it is most likely a libtool script we actually want to
2363 # install
2364 stripped_ext=""
2365 case $file in
2366 *.exe)
2367 if test ! -f "$file"; then
2368 func_stripname '' '.exe' "$file"
2369 file=$func_stripname_result
2370 stripped_ext=".exe"
2373 esac
2375 # Do a test to see if this is really a libtool program.
2376 case $host in
2377 *cygwin* | *mingw*)
2378 if func_ltwrapper_executable_p "$file"; then
2379 func_ltwrapper_scriptname "$file"
2380 wrapper=$func_ltwrapper_scriptname_result
2381 else
2382 func_stripname '' '.exe' "$file"
2383 wrapper=$func_stripname_result
2387 wrapper=$file
2389 esac
2390 if func_ltwrapper_script_p "$wrapper"; then
2391 notinst_deplibs=
2392 relink_command=
2394 func_source "$wrapper"
2396 # Check the variables that should have been set.
2397 test -z "$generated_by_libtool_version" && \
2398 func_fatal_error "invalid libtool wrapper script \`$wrapper'"
2400 finalize=yes
2401 for lib in $notinst_deplibs; do
2402 # Check to see that each library is installed.
2403 libdir=
2404 if test -f "$lib"; then
2405 func_source "$lib"
2407 libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
2408 if test -n "$libdir" && test ! -f "$libfile"; then
2409 func_warning "\`$lib' has not been installed in \`$libdir'"
2410 finalize=no
2412 done
2414 relink_command=
2415 func_source "$wrapper"
2417 outputname=
2418 if test "$fast_install" = no && test -n "$relink_command"; then
2419 $opt_dry_run || {
2420 if test "$finalize" = yes; then
2421 tmpdir=`func_mktempdir`
2422 func_basename "$file$stripped_ext"
2423 file="$func_basename_result"
2424 outputname="$tmpdir/$file"
2425 # Replace the output file specification.
2426 relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
2428 $opt_silent || {
2429 func_quote_for_expand "$relink_command"
2430 eval "func_echo $func_quote_for_expand_result"
2432 if eval "$relink_command"; then :
2433 else
2434 func_error "error: relink \`$file' with the above command before installing it"
2435 $opt_dry_run || ${RM}r "$tmpdir"
2436 continue
2438 file="$outputname"
2439 else
2440 func_warning "cannot relink \`$file'"
2443 else
2444 # Install the binary that we compiled earlier.
2445 file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
2449 # remove .exe since cygwin /usr/bin/install will append another
2450 # one anyway
2451 case $install_prog,$host in
2452 */usr/bin/install*,*cygwin*)
2453 case $file:$destfile in
2454 *.exe:*.exe)
2455 # this is ok
2457 *.exe:*)
2458 destfile=$destfile.exe
2460 *:*.exe)
2461 func_stripname '' '.exe' "$destfile"
2462 destfile=$func_stripname_result
2464 esac
2466 esac
2467 func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
2468 $opt_dry_run || if test -n "$outputname"; then
2469 ${RM}r "$tmpdir"
2472 esac
2473 done
2475 for file in $staticlibs; do
2476 func_basename "$file"
2477 name="$func_basename_result"
2479 # Set up the ranlib parameters.
2480 oldlib="$destdir/$name"
2482 func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
2484 if test -n "$stripme" && test -n "$old_striplib"; then
2485 func_show_eval "$old_striplib $oldlib" 'exit $?'
2488 # Do each command in the postinstall commands.
2489 func_execute_cmds "$old_postinstall_cmds" 'exit $?'
2490 done
2492 test -n "$future_libdirs" && \
2493 func_warning "remember to run \`$progname --finish$future_libdirs'"
2495 if test -n "$current_libdirs"; then
2496 # Maybe just do a dry run.
2497 $opt_dry_run && current_libdirs=" -n$current_libdirs"
2498 exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
2499 else
2500 exit $EXIT_SUCCESS
2504 test "$mode" = install && func_mode_install ${1+"$@"}
2507 # func_generate_dlsyms outputname originator pic_p
2508 # Extract symbols from dlprefiles and create ${outputname}S.o with
2509 # a dlpreopen symbol table.
2510 func_generate_dlsyms ()
2512 $opt_debug
2513 my_outputname="$1"
2514 my_originator="$2"
2515 my_pic_p="${3-no}"
2516 my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
2517 my_dlsyms=
2519 if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
2520 if test -n "$NM" && test -n "$global_symbol_pipe"; then
2521 my_dlsyms="${my_outputname}S.c"
2522 else
2523 func_error "not configured to extract global symbols from dlpreopened files"
2527 if test -n "$my_dlsyms"; then
2528 case $my_dlsyms in
2529 "") ;;
2530 *.c)
2531 # Discover the nlist of each of the dlfiles.
2532 nlist="$output_objdir/${my_outputname}.nm"
2534 func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
2536 # Parse the name list into a source file.
2537 func_verbose "creating $output_objdir/$my_dlsyms"
2539 $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
2540 /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
2541 /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
2543 #ifdef __cplusplus
2544 extern \"C\" {
2545 #endif
2547 #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
2548 #pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
2549 #endif
2551 /* External symbol declarations for the compiler. */\
2554 if test "$dlself" = yes; then
2555 func_verbose "generating symbol list for \`$output'"
2557 $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
2559 # Add our own program objects to the symbol list.
2560 progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
2561 for progfile in $progfiles; do
2562 func_verbose "extracting global C symbols from \`$progfile'"
2563 $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
2564 done
2566 if test -n "$exclude_expsyms"; then
2567 $opt_dry_run || {
2568 eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
2569 eval '$MV "$nlist"T "$nlist"'
2573 if test -n "$export_symbols_regex"; then
2574 $opt_dry_run || {
2575 eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
2576 eval '$MV "$nlist"T "$nlist"'
2580 # Prepare the list of exported symbols
2581 if test -z "$export_symbols"; then
2582 export_symbols="$output_objdir/$outputname.exp"
2583 $opt_dry_run || {
2584 $RM $export_symbols
2585 eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
2586 case $host in
2587 *cygwin* | *mingw* | *cegcc* )
2588 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
2589 eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
2591 esac
2593 else
2594 $opt_dry_run || {
2595 eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
2596 eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
2597 eval '$MV "$nlist"T "$nlist"'
2598 case $host in
2599 *cygwin* | *mingw* | *cegcc* )
2600 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
2601 eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
2603 esac
2608 for dlprefile in $dlprefiles; do
2609 func_verbose "extracting global C symbols from \`$dlprefile'"
2610 func_basename "$dlprefile"
2611 name="$func_basename_result"
2612 $opt_dry_run || {
2613 eval '$ECHO ": $name " >> "$nlist"'
2614 eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
2616 done
2618 $opt_dry_run || {
2619 # Make sure we have at least an empty file.
2620 test -f "$nlist" || : > "$nlist"
2622 if test -n "$exclude_expsyms"; then
2623 $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
2624 $MV "$nlist"T "$nlist"
2627 # Try sorting and uniquifying the output.
2628 if $GREP -v "^: " < "$nlist" |
2629 if sort -k 3 </dev/null >/dev/null 2>&1; then
2630 sort -k 3
2631 else
2632 sort +2
2633 fi |
2634 uniq > "$nlist"S; then
2636 else
2637 $GREP -v "^: " < "$nlist" > "$nlist"S
2640 if test -f "$nlist"S; then
2641 eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
2642 else
2643 echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
2646 echo >> "$output_objdir/$my_dlsyms" "\
2648 /* The mapping between symbol names and symbols. */
2649 typedef struct {
2650 const char *name;
2651 void *address;
2652 } lt_dlsymlist;
2654 case $host in
2655 *cygwin* | *mingw* | *cegcc* )
2656 echo >> "$output_objdir/$my_dlsyms" "\
2657 /* DATA imports from DLLs on WIN32 con't be const, because
2658 runtime relocations are performed -- see ld's documentation
2659 on pseudo-relocs. */"
2660 lt_dlsym_const= ;;
2661 *osf5*)
2662 echo >> "$output_objdir/$my_dlsyms" "\
2663 /* This system does not cope well with relocations in const data */"
2664 lt_dlsym_const= ;;
2666 lt_dlsym_const=const ;;
2667 esac
2669 echo >> "$output_objdir/$my_dlsyms" "\
2670 extern $lt_dlsym_const lt_dlsymlist
2671 lt_${my_prefix}_LTX_preloaded_symbols[];
2672 $lt_dlsym_const lt_dlsymlist
2673 lt_${my_prefix}_LTX_preloaded_symbols[] =
2675 { \"$my_originator\", (void *) 0 },"
2677 case $need_lib_prefix in
2679 eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
2682 eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
2684 esac
2685 echo >> "$output_objdir/$my_dlsyms" "\
2686 {0, (void *) 0}
2689 /* This works around a problem in FreeBSD linker */
2690 #ifdef FREEBSD_WORKAROUND
2691 static const void *lt_preloaded_setup() {
2692 return lt_${my_prefix}_LTX_preloaded_symbols;
2694 #endif
2696 #ifdef __cplusplus
2698 #endif\
2700 } # !$opt_dry_run
2702 pic_flag_for_symtable=
2703 case "$compile_command " in
2704 *" -static "*) ;;
2706 case $host in
2707 # compiling the symbol table file with pic_flag works around
2708 # a FreeBSD bug that causes programs to crash when -lm is
2709 # linked before any other PIC object. But we must not use
2710 # pic_flag when linking with -static. The problem exists in
2711 # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
2712 *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
2713 pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
2714 *-*-hpux*)
2715 pic_flag_for_symtable=" $pic_flag" ;;
2717 if test "X$my_pic_p" != Xno; then
2718 pic_flag_for_symtable=" $pic_flag"
2721 esac
2723 esac
2724 symtab_cflags=
2725 for arg in $LTCFLAGS; do
2726 case $arg in
2727 -pie | -fpie | -fPIE) ;;
2728 *) symtab_cflags="$symtab_cflags $arg" ;;
2729 esac
2730 done
2732 # Now compile the dynamic symbol file.
2733 func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
2735 # Clean up the generated files.
2736 func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
2738 # Transform the symbol file into the correct name.
2739 symfileobj="$output_objdir/${my_outputname}S.$objext"
2740 case $host in
2741 *cygwin* | *mingw* | *cegcc* )
2742 if test -f "$output_objdir/$my_outputname.def"; then
2743 compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
2744 finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
2745 else
2746 compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
2747 finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
2751 compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
2752 finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
2754 esac
2757 func_fatal_error "unknown suffix for \`$my_dlsyms'"
2759 esac
2760 else
2761 # We keep going just in case the user didn't refer to
2762 # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
2763 # really was required.
2765 # Nullify the symbol file.
2766 compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
2767 finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
2771 # func_win32_libid arg
2772 # return the library type of file 'arg'
2774 # Need a lot of goo to handle *both* DLLs and import libs
2775 # Has to be a shell function in order to 'eat' the argument
2776 # that is supplied when $file_magic_command is called.
2777 # Despite the name, also deal with 64 bit binaries.
2778 func_win32_libid ()
2780 $opt_debug
2781 win32_libid_type="unknown"
2782 win32_fileres=`file -L $1 2>/dev/null`
2783 case $win32_fileres in
2784 *ar\ archive\ import\ library*) # definitely import
2785 win32_libid_type="x86 archive import"
2787 *ar\ archive*) # could be an import, or static
2788 # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
2789 if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
2790 $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
2791 win32_nmres=`eval $NM -f posix -A $1 |
2792 $SED -n -e '
2793 1,100{
2794 / I /{
2795 s,.*,import,
2800 case $win32_nmres in
2801 import*) win32_libid_type="x86 archive import";;
2802 *) win32_libid_type="x86 archive static";;
2803 esac
2806 *DLL*)
2807 win32_libid_type="x86 DLL"
2809 *executable*) # but shell scripts are "executable" too...
2810 case $win32_fileres in
2811 *MS\ Windows\ PE\ Intel*)
2812 win32_libid_type="x86 DLL"
2814 esac
2816 esac
2817 $ECHO "$win32_libid_type"
2822 # func_extract_an_archive dir oldlib
2823 func_extract_an_archive ()
2825 $opt_debug
2826 f_ex_an_ar_dir="$1"; shift
2827 f_ex_an_ar_oldlib="$1"
2828 if test "$lock_old_archive_extraction" = yes; then
2829 lockfile=$f_ex_an_ar_oldlib.lock
2830 until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
2831 func_echo "Waiting for $lockfile to be removed"
2832 sleep 2
2833 done
2835 func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
2836 'stat=$?; rm -f "$lockfile"; exit $stat'
2837 if test "$lock_old_archive_extraction" = yes; then
2838 $opt_dry_run || rm -f "$lockfile"
2840 if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
2842 else
2843 func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
2848 # func_extract_archives gentop oldlib ...
2849 func_extract_archives ()
2851 $opt_debug
2852 my_gentop="$1"; shift
2853 my_oldlibs=${1+"$@"}
2854 my_oldobjs=""
2855 my_xlib=""
2856 my_xabs=""
2857 my_xdir=""
2859 for my_xlib in $my_oldlibs; do
2860 # Extract the objects.
2861 case $my_xlib in
2862 [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
2863 *) my_xabs=`pwd`"/$my_xlib" ;;
2864 esac
2865 func_basename "$my_xlib"
2866 my_xlib="$func_basename_result"
2867 my_xlib_u=$my_xlib
2868 while :; do
2869 case " $extracted_archives " in
2870 *" $my_xlib_u "*)
2871 func_arith $extracted_serial + 1
2872 extracted_serial=$func_arith_result
2873 my_xlib_u=lt$extracted_serial-$my_xlib ;;
2874 *) break ;;
2875 esac
2876 done
2877 extracted_archives="$extracted_archives $my_xlib_u"
2878 my_xdir="$my_gentop/$my_xlib_u"
2880 func_mkdir_p "$my_xdir"
2882 case $host in
2883 *-darwin*)
2884 func_verbose "Extracting $my_xabs"
2885 # Do not bother doing anything if just a dry run
2886 $opt_dry_run || {
2887 darwin_orig_dir=`pwd`
2888 cd $my_xdir || exit $?
2889 darwin_archive=$my_xabs
2890 darwin_curdir=`pwd`
2891 darwin_base_archive=`basename "$darwin_archive"`
2892 darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
2893 if test -n "$darwin_arches"; then
2894 darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
2895 darwin_arch=
2896 func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
2897 for darwin_arch in $darwin_arches ; do
2898 func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
2899 $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
2900 cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
2901 func_extract_an_archive "`pwd`" "${darwin_base_archive}"
2902 cd "$darwin_curdir"
2903 $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
2904 done # $darwin_arches
2905 ## Okay now we've a bunch of thin objects, gotta fatten them up :)
2906 darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
2907 darwin_file=
2908 darwin_files=
2909 for darwin_file in $darwin_filelist; do
2910 darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
2911 $LIPO -create -output "$darwin_file" $darwin_files
2912 done # $darwin_filelist
2913 $RM -rf unfat-$$
2914 cd "$darwin_orig_dir"
2915 else
2916 cd $darwin_orig_dir
2917 func_extract_an_archive "$my_xdir" "$my_xabs"
2918 fi # $darwin_arches
2919 } # !$opt_dry_run
2922 func_extract_an_archive "$my_xdir" "$my_xabs"
2924 esac
2925 my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
2926 done
2928 func_extract_archives_result="$my_oldobjs"
2932 # func_emit_wrapper [arg=no]
2934 # Emit a libtool wrapper script on stdout.
2935 # Don't directly open a file because we may want to
2936 # incorporate the script contents within a cygwin/mingw
2937 # wrapper executable. Must ONLY be called from within
2938 # func_mode_link because it depends on a number of variables
2939 # set therein.
2941 # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
2942 # variable will take. If 'yes', then the emitted script
2943 # will assume that the directory in which it is stored is
2944 # the $objdir directory. This is a cygwin/mingw-specific
2945 # behavior.
2946 func_emit_wrapper ()
2948 func_emit_wrapper_arg1=${1-no}
2950 $ECHO "\
2951 #! $SHELL
2953 # $output - temporary wrapper script for $objdir/$outputname
2954 # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
2956 # The $output program cannot be directly executed until all the libtool
2957 # libraries that it depends on are installed.
2959 # This wrapper script should never be moved out of the build directory.
2960 # If it is, it will not operate correctly.
2962 # Sed substitution that helps us do robust quoting. It backslashifies
2963 # metacharacters that are still active within double-quoted strings.
2964 sed_quote_subst='$sed_quote_subst'
2966 # Be Bourne compatible
2967 if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
2968 emulate sh
2969 NULLCMD=:
2970 # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
2971 # is contrary to our usage. Disable this feature.
2972 alias -g '\${1+\"\$@\"}'='\"\$@\"'
2973 setopt NO_GLOB_SUBST
2974 else
2975 case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
2977 BIN_SH=xpg4; export BIN_SH # for Tru64
2978 DUALCASE=1; export DUALCASE # for MKS sh
2980 # The HP-UX ksh and POSIX shell print the target directory to stdout
2981 # if CDPATH is set.
2982 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
2984 relink_command=\"$relink_command\"
2986 # This environment variable determines our operation mode.
2987 if test \"\$libtool_install_magic\" = \"$magic\"; then
2988 # install mode needs the following variables:
2989 generated_by_libtool_version='$macro_version'
2990 notinst_deplibs='$notinst_deplibs'
2991 else
2992 # When we are sourced in execute mode, \$file and \$ECHO are already set.
2993 if test \"\$libtool_execute_magic\" != \"$magic\"; then
2994 file=\"\$0\""
2996 qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
2997 $ECHO "\
2999 # A function that is used when there is no print builtin or printf.
3000 func_fallback_echo ()
3002 eval 'cat <<_LTECHO_EOF
3004 _LTECHO_EOF'
3006 ECHO=\"$qECHO\"
3009 # Very basic option parsing. These options are (a) specific to
3010 # the libtool wrapper, (b) are identical between the wrapper
3011 # /script/ and the wrapper /executable/ which is used only on
3012 # windows platforms, and (c) all begin with the string "--lt-"
3013 # (application programs are unlikely to have options which match
3014 # this pattern).
3016 # There are only two supported options: --lt-debug and
3017 # --lt-dump-script. There is, deliberately, no --lt-help.
3019 # The first argument to this parsing function should be the
3020 # script's $0 value, followed by "$@".
3021 lt_option_debug=
3022 func_parse_lt_options ()
3024 lt_script_arg0=\$0
3025 shift
3026 for lt_opt
3028 case \"\$lt_opt\" in
3029 --lt-debug) lt_option_debug=1 ;;
3030 --lt-dump-script)
3031 lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
3032 test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
3033 lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
3034 cat \"\$lt_dump_D/\$lt_dump_F\"
3035 exit 0
3037 --lt-*)
3038 \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
3039 exit 1
3041 esac
3042 done
3044 # Print the debug banner immediately:
3045 if test -n \"\$lt_option_debug\"; then
3046 echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
3050 # Used when --lt-debug. Prints its arguments to stdout
3051 # (redirection is the responsibility of the caller)
3052 func_lt_dump_args ()
3054 lt_dump_args_N=1;
3055 for lt_arg
3057 \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
3058 lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
3059 done
3062 # Core function for launching the target application
3063 func_exec_program_core ()
3066 case $host in
3067 # Backslashes separate directories on plain windows
3068 *-*-mingw | *-*-os2* | *-cegcc*)
3069 $ECHO "\
3070 if test -n \"\$lt_option_debug\"; then
3071 \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
3072 func_lt_dump_args \${1+\"\$@\"} 1>&2
3074 exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
3079 $ECHO "\
3080 if test -n \"\$lt_option_debug\"; then
3081 \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
3082 func_lt_dump_args \${1+\"\$@\"} 1>&2
3084 exec \"\$progdir/\$program\" \${1+\"\$@\"}
3087 esac
3088 $ECHO "\
3089 \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
3090 exit 1
3093 # A function to encapsulate launching the target application
3094 # Strips options in the --lt-* namespace from \$@ and
3095 # launches target application with the remaining arguments.
3096 func_exec_program ()
3098 for lt_wr_arg
3100 case \$lt_wr_arg in
3101 --lt-*) ;;
3102 *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
3103 esac
3104 shift
3105 done
3106 func_exec_program_core \${1+\"\$@\"}
3109 # Parse options
3110 func_parse_lt_options \"\$0\" \${1+\"\$@\"}
3112 # Find the directory that this script lives in.
3113 thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
3114 test \"x\$thisdir\" = \"x\$file\" && thisdir=.
3116 # Follow symbolic links until we get to the real thisdir.
3117 file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
3118 while test -n \"\$file\"; do
3119 destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
3121 # If there was a directory component, then change thisdir.
3122 if test \"x\$destdir\" != \"x\$file\"; then
3123 case \"\$destdir\" in
3124 [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
3125 *) thisdir=\"\$thisdir/\$destdir\" ;;
3126 esac
3129 file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
3130 file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
3131 done
3133 # Usually 'no', except on cygwin/mingw when embedded into
3134 # the cwrapper.
3135 WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
3136 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
3137 # special case for '.'
3138 if test \"\$thisdir\" = \".\"; then
3139 thisdir=\`pwd\`
3141 # remove .libs from thisdir
3142 case \"\$thisdir\" in
3143 *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
3144 $objdir ) thisdir=. ;;
3145 esac
3148 # Try to get the absolute directory name.
3149 absdir=\`cd \"\$thisdir\" && pwd\`
3150 test -n \"\$absdir\" && thisdir=\"\$absdir\"
3153 if test "$fast_install" = yes; then
3154 $ECHO "\
3155 program=lt-'$outputname'$exeext
3156 progdir=\"\$thisdir/$objdir\"
3158 if test ! -f \"\$progdir/\$program\" ||
3159 { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
3160 test \"X\$file\" != \"X\$progdir/\$program\"; }; then
3162 file=\"\$\$-\$program\"
3164 if test ! -d \"\$progdir\"; then
3165 $MKDIR \"\$progdir\"
3166 else
3167 $RM \"\$progdir/\$file\"
3170 $ECHO "\
3172 # relink executable if necessary
3173 if test -n \"\$relink_command\"; then
3174 if relink_command_output=\`eval \$relink_command 2>&1\`; then :
3175 else
3176 $ECHO \"\$relink_command_output\" >&2
3177 $RM \"\$progdir/\$file\"
3178 exit 1
3182 $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
3183 { $RM \"\$progdir/\$program\";
3184 $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
3185 $RM \"\$progdir/\$file\"
3187 else
3188 $ECHO "\
3189 program='$outputname'
3190 progdir=\"\$thisdir/$objdir\"
3194 $ECHO "\
3196 if test -f \"\$progdir/\$program\"; then"
3198 # Export our shlibpath_var if we have one.
3199 if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
3200 $ECHO "\
3201 # Add our own library path to $shlibpath_var
3202 $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
3204 # Some systems cannot cope with colon-terminated $shlibpath_var
3205 # The second colon is a workaround for a bug in BeOS R4 sed
3206 $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
3208 export $shlibpath_var
3212 # fixup the dll searchpath if we need to.
3213 if test -n "$dllsearchpath"; then
3214 $ECHO "\
3215 # Add the dll search path components to the executable PATH
3216 PATH=$dllsearchpath:\$PATH
3220 $ECHO "\
3221 if test \"\$libtool_execute_magic\" != \"$magic\"; then
3222 # Run the actual program with our arguments.
3223 func_exec_program \${1+\"\$@\"}
3225 else
3226 # The program doesn't exist.
3227 \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
3228 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
3229 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
3230 exit 1
3237 # func_to_host_path arg
3239 # Convert paths to host format when used with build tools.
3240 # Intended for use with "native" mingw (where libtool itself
3241 # is running under the msys shell), or in the following cross-
3242 # build environments:
3243 # $build $host
3244 # mingw (msys) mingw [e.g. native]
3245 # cygwin mingw
3246 # *nix + wine mingw
3247 # where wine is equipped with the `winepath' executable.
3248 # In the native mingw case, the (msys) shell automatically
3249 # converts paths for any non-msys applications it launches,
3250 # but that facility isn't available from inside the cwrapper.
3251 # Similar accommodations are necessary for $host mingw and
3252 # $build cygwin. Calling this function does no harm for other
3253 # $host/$build combinations not listed above.
3255 # ARG is the path (on $build) that should be converted to
3256 # the proper representation for $host. The result is stored
3257 # in $func_to_host_path_result.
3258 func_to_host_path ()
3260 func_to_host_path_result="$1"
3261 if test -n "$1"; then
3262 case $host in
3263 *mingw* )
3264 lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
3265 case $build in
3266 *mingw* ) # actually, msys
3267 # awkward: cmd appends spaces to result
3268 func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null |
3269 $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
3271 *cygwin* )
3272 func_to_host_path_result=`cygpath -w "$1" |
3273 $SED -e "$lt_sed_naive_backslashify"`
3276 # Unfortunately, winepath does not exit with a non-zero
3277 # error code, so we are forced to check the contents of
3278 # stdout. On the other hand, if the command is not
3279 # found, the shell will set an exit code of 127 and print
3280 # *an error message* to stdout. So we must check for both
3281 # error code of zero AND non-empty stdout, which explains
3282 # the odd construction:
3283 func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
3284 if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
3285 func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" |
3286 $SED -e "$lt_sed_naive_backslashify"`
3287 else
3288 # Allow warning below.
3289 func_to_host_path_result=
3292 esac
3293 if test -z "$func_to_host_path_result" ; then
3294 func_error "Could not determine host path corresponding to"
3295 func_error " \`$1'"
3296 func_error "Continuing, but uninstalled executables may not work."
3297 # Fallback:
3298 func_to_host_path_result="$1"
3301 esac
3304 # end: func_to_host_path
3306 # func_to_host_pathlist arg
3308 # Convert pathlists to host format when used with build tools.
3309 # See func_to_host_path(), above. This function supports the
3310 # following $build/$host combinations (but does no harm for
3311 # combinations not listed here):
3312 # $build $host
3313 # mingw (msys) mingw [e.g. native]
3314 # cygwin mingw
3315 # *nix + wine mingw
3317 # Path separators are also converted from $build format to
3318 # $host format. If ARG begins or ends with a path separator
3319 # character, it is preserved (but converted to $host format)
3320 # on output.
3322 # ARG is a pathlist (on $build) that should be converted to
3323 # the proper representation on $host. The result is stored
3324 # in $func_to_host_pathlist_result.
3325 func_to_host_pathlist ()
3327 func_to_host_pathlist_result="$1"
3328 if test -n "$1"; then
3329 case $host in
3330 *mingw* )
3331 lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
3332 # Remove leading and trailing path separator characters from
3333 # ARG. msys behavior is inconsistent here, cygpath turns them
3334 # into '.;' and ';.', and winepath ignores them completely.
3335 func_stripname : : "$1"
3336 func_to_host_pathlist_tmp1=$func_stripname_result
3337 case $build in
3338 *mingw* ) # Actually, msys.
3339 # Awkward: cmd appends spaces to result.
3340 func_to_host_pathlist_result=`
3341 ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null |
3342 $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
3344 *cygwin* )
3345 func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" |
3346 $SED -e "$lt_sed_naive_backslashify"`
3349 # unfortunately, winepath doesn't convert pathlists
3350 func_to_host_pathlist_result=""
3351 func_to_host_pathlist_oldIFS=$IFS
3352 IFS=:
3353 for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
3354 IFS=$func_to_host_pathlist_oldIFS
3355 if test -n "$func_to_host_pathlist_f" ; then
3356 func_to_host_path "$func_to_host_pathlist_f"
3357 if test -n "$func_to_host_path_result" ; then
3358 if test -z "$func_to_host_pathlist_result" ; then
3359 func_to_host_pathlist_result="$func_to_host_path_result"
3360 else
3361 func_append func_to_host_pathlist_result ";$func_to_host_path_result"
3365 done
3366 IFS=$func_to_host_pathlist_oldIFS
3368 esac
3369 if test -z "$func_to_host_pathlist_result"; then
3370 func_error "Could not determine the host path(s) corresponding to"
3371 func_error " \`$1'"
3372 func_error "Continuing, but uninstalled executables may not work."
3373 # Fallback. This may break if $1 contains DOS-style drive
3374 # specifications. The fix is not to complicate the expression
3375 # below, but for the user to provide a working wine installation
3376 # with winepath so that path translation in the cross-to-mingw
3377 # case works properly.
3378 lt_replace_pathsep_nix_to_dos="s|:|;|g"
3379 func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
3380 $SED -e "$lt_replace_pathsep_nix_to_dos"`
3382 # Now, add the leading and trailing path separators back
3383 case "$1" in
3384 :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
3386 esac
3387 case "$1" in
3388 *: ) func_append func_to_host_pathlist_result ";"
3390 esac
3392 esac
3395 # end: func_to_host_pathlist
3397 # func_emit_cwrapperexe_src
3398 # emit the source code for a wrapper executable on stdout
3399 # Must ONLY be called from within func_mode_link because
3400 # it depends on a number of variable set therein.
3401 func_emit_cwrapperexe_src ()
3403 cat <<EOF
3405 /* $cwrappersource - temporary wrapper executable for $objdir/$outputname
3406 Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
3408 The $output program cannot be directly executed until all the libtool
3409 libraries that it depends on are installed.
3411 This wrapper executable should never be moved out of the build directory.
3412 If it is, it will not operate correctly.
3415 cat <<"EOF"
3416 #ifdef _MSC_VER
3417 # define _CRT_SECURE_NO_DEPRECATE 1
3418 #endif
3419 #include <stdio.h>
3420 #include <stdlib.h>
3421 #ifdef _MSC_VER
3422 # include <direct.h>
3423 # include <process.h>
3424 # include <io.h>
3425 #else
3426 # include <unistd.h>
3427 # include <stdint.h>
3428 # ifdef __CYGWIN__
3429 # include <io.h>
3430 # endif
3431 #endif
3432 #include <malloc.h>
3433 #include <stdarg.h>
3434 #include <assert.h>
3435 #include <string.h>
3436 #include <ctype.h>
3437 #include <errno.h>
3438 #include <fcntl.h>
3439 #include <sys/stat.h>
3441 /* declarations of non-ANSI functions */
3442 #if defined(__MINGW32__)
3443 # ifdef __STRICT_ANSI__
3444 int _putenv (const char *);
3445 # endif
3446 #elif defined(__CYGWIN__)
3447 # ifdef __STRICT_ANSI__
3448 char *realpath (const char *, char *);
3449 int putenv (char *);
3450 int setenv (const char *, const char *, int);
3451 # endif
3452 /* #elif defined (other platforms) ... */
3453 #endif
3455 /* portability defines, excluding path handling macros */
3456 #if defined(_MSC_VER)
3457 # define setmode _setmode
3458 # define stat _stat
3459 # define chmod _chmod
3460 # define getcwd _getcwd
3461 # define putenv _putenv
3462 # define S_IXUSR _S_IEXEC
3463 # ifndef _INTPTR_T_DEFINED
3464 # define _INTPTR_T_DEFINED
3465 # define intptr_t int
3466 # endif
3467 #elif defined(__MINGW32__)
3468 # define setmode _setmode
3469 # define stat _stat
3470 # define chmod _chmod
3471 # define getcwd _getcwd
3472 # define putenv _putenv
3473 #elif defined(__CYGWIN__)
3474 # define HAVE_SETENV
3475 # define FOPEN_WB "wb"
3476 /* #elif defined (other platforms) ... */
3477 #endif
3479 #if defined(PATH_MAX)
3480 # define LT_PATHMAX PATH_MAX
3481 #elif defined(MAXPATHLEN)
3482 # define LT_PATHMAX MAXPATHLEN
3483 #else
3484 # define LT_PATHMAX 1024
3485 #endif
3487 #ifndef S_IXOTH
3488 # define S_IXOTH 0
3489 #endif
3490 #ifndef S_IXGRP
3491 # define S_IXGRP 0
3492 #endif
3494 /* path handling portability macros */
3495 #ifndef DIR_SEPARATOR
3496 # define DIR_SEPARATOR '/'
3497 # define PATH_SEPARATOR ':'
3498 #endif
3500 #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
3501 defined (__OS2__)
3502 # define HAVE_DOS_BASED_FILE_SYSTEM
3503 # define FOPEN_WB "wb"
3504 # ifndef DIR_SEPARATOR_2
3505 # define DIR_SEPARATOR_2 '\\'
3506 # endif
3507 # ifndef PATH_SEPARATOR_2
3508 # define PATH_SEPARATOR_2 ';'
3509 # endif
3510 #endif
3512 #ifndef DIR_SEPARATOR_2
3513 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
3514 #else /* DIR_SEPARATOR_2 */
3515 # define IS_DIR_SEPARATOR(ch) \
3516 (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
3517 #endif /* DIR_SEPARATOR_2 */
3519 #ifndef PATH_SEPARATOR_2
3520 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
3521 #else /* PATH_SEPARATOR_2 */
3522 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
3523 #endif /* PATH_SEPARATOR_2 */
3525 #ifndef FOPEN_WB
3526 # define FOPEN_WB "w"
3527 #endif
3528 #ifndef _O_BINARY
3529 # define _O_BINARY 0
3530 #endif
3532 #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
3533 #define XFREE(stale) do { \
3534 if (stale) { free ((void *) stale); stale = 0; } \
3535 } while (0)
3537 #if defined(LT_DEBUGWRAPPER)
3538 static int lt_debug = 1;
3539 #else
3540 static int lt_debug = 0;
3541 #endif
3543 const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
3545 void *xmalloc (size_t num);
3546 char *xstrdup (const char *string);
3547 const char *base_name (const char *name);
3548 char *find_executable (const char *wrapper);
3549 char *chase_symlinks (const char *pathspec);
3550 int make_executable (const char *path);
3551 int check_executable (const char *path);
3552 char *strendzap (char *str, const char *pat);
3553 void lt_debugprintf (const char *file, int line, const char *fmt, ...);
3554 void lt_fatal (const char *file, int line, const char *message, ...);
3555 static const char *nonnull (const char *s);
3556 static const char *nonempty (const char *s);
3557 void lt_setenv (const char *name, const char *value);
3558 char *lt_extend_str (const char *orig_value, const char *add, int to_end);
3559 void lt_update_exe_path (const char *name, const char *value);
3560 void lt_update_lib_path (const char *name, const char *value);
3561 char **prepare_spawn (char **argv);
3562 void lt_dump_script (FILE *f);
3565 cat <<EOF
3566 const char * MAGIC_EXE = "$magic_exe";
3567 const char * LIB_PATH_VARNAME = "$shlibpath_var";
3570 if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
3571 func_to_host_pathlist "$temp_rpath"
3572 cat <<EOF
3573 const char * LIB_PATH_VALUE = "$func_to_host_pathlist_result";
3575 else
3576 cat <<"EOF"
3577 const char * LIB_PATH_VALUE = "";
3581 if test -n "$dllsearchpath"; then
3582 func_to_host_pathlist "$dllsearchpath:"
3583 cat <<EOF
3584 const char * EXE_PATH_VARNAME = "PATH";
3585 const char * EXE_PATH_VALUE = "$func_to_host_pathlist_result";
3587 else
3588 cat <<"EOF"
3589 const char * EXE_PATH_VARNAME = "";
3590 const char * EXE_PATH_VALUE = "";
3594 if test "$fast_install" = yes; then
3595 cat <<EOF
3596 const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
3598 else
3599 cat <<EOF
3600 const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
3605 cat <<"EOF"
3607 #define LTWRAPPER_OPTION_PREFIX "--lt-"
3609 static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
3610 static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
3611 static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
3614 main (int argc, char *argv[])
3616 char **newargz;
3617 int newargc;
3618 char *tmp_pathspec;
3619 char *actual_cwrapper_path;
3620 char *actual_cwrapper_name;
3621 char *target_name;
3622 char *lt_argv_zero;
3623 intptr_t rval = 127;
3625 int i;
3627 program_name = (char *) xstrdup (base_name (argv[0]));
3628 newargz = XMALLOC (char *, argc + 1);
3630 /* very simple arg parsing; don't want to rely on getopt
3631 * also, copy all non cwrapper options to newargz, except
3632 * argz[0], which is handled differently
3634 newargc=0;
3635 for (i = 1; i < argc; i++)
3637 if (strcmp (argv[i], dumpscript_opt) == 0)
3640 case "$host" in
3641 *mingw* | *cygwin* )
3642 # make stdout use "unix" line endings
3643 echo " setmode(1,_O_BINARY);"
3645 esac
3647 cat <<"EOF"
3648 lt_dump_script (stdout);
3649 return 0;
3651 if (strcmp (argv[i], debug_opt) == 0)
3653 lt_debug = 1;
3654 continue;
3656 if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
3658 /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
3659 namespace, but it is not one of the ones we know about and
3660 have already dealt with, above (inluding dump-script), then
3661 report an error. Otherwise, targets might begin to believe
3662 they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
3663 namespace. The first time any user complains about this, we'll
3664 need to make LTWRAPPER_OPTION_PREFIX a configure-time option
3665 or a configure.ac-settable value.
3667 lt_fatal (__FILE__, __LINE__,
3668 "unrecognized %s option: '%s'",
3669 ltwrapper_option_prefix, argv[i]);
3671 /* otherwise ... */
3672 newargz[++newargc] = xstrdup (argv[i]);
3674 newargz[++newargc] = NULL;
3677 cat <<EOF
3678 /* The GNU banner must be the first non-error debug message */
3679 lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
3681 cat <<"EOF"
3682 lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
3683 lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
3685 tmp_pathspec = find_executable (argv[0]);
3686 if (tmp_pathspec == NULL)
3687 lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
3688 lt_debugprintf (__FILE__, __LINE__,
3689 "(main) found exe (before symlink chase) at: %s\n",
3690 tmp_pathspec);
3692 actual_cwrapper_path = chase_symlinks (tmp_pathspec);
3693 lt_debugprintf (__FILE__, __LINE__,
3694 "(main) found exe (after symlink chase) at: %s\n",
3695 actual_cwrapper_path);
3696 XFREE (tmp_pathspec);
3698 actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
3699 strendzap (actual_cwrapper_path, actual_cwrapper_name);
3701 /* wrapper name transforms */
3702 strendzap (actual_cwrapper_name, ".exe");
3703 tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
3704 XFREE (actual_cwrapper_name);
3705 actual_cwrapper_name = tmp_pathspec;
3706 tmp_pathspec = 0;
3708 /* target_name transforms -- use actual target program name; might have lt- prefix */
3709 target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
3710 strendzap (target_name, ".exe");
3711 tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
3712 XFREE (target_name);
3713 target_name = tmp_pathspec;
3714 tmp_pathspec = 0;
3716 lt_debugprintf (__FILE__, __LINE__,
3717 "(main) libtool target name: %s\n",
3718 target_name);
3721 cat <<EOF
3722 newargz[0] =
3723 XMALLOC (char, (strlen (actual_cwrapper_path) +
3724 strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
3725 strcpy (newargz[0], actual_cwrapper_path);
3726 strcat (newargz[0], "$objdir");
3727 strcat (newargz[0], "/");
3730 cat <<"EOF"
3731 /* stop here, and copy so we don't have to do this twice */
3732 tmp_pathspec = xstrdup (newargz[0]);
3734 /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
3735 strcat (newargz[0], actual_cwrapper_name);
3737 /* DO want the lt- prefix here if it exists, so use target_name */
3738 lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
3739 XFREE (tmp_pathspec);
3740 tmp_pathspec = NULL;
3743 case $host_os in
3744 mingw*)
3745 cat <<"EOF"
3747 char* p;
3748 while ((p = strchr (newargz[0], '\\')) != NULL)
3750 *p = '/';
3752 while ((p = strchr (lt_argv_zero, '\\')) != NULL)
3754 *p = '/';
3759 esac
3761 cat <<"EOF"
3762 XFREE (target_name);
3763 XFREE (actual_cwrapper_path);
3764 XFREE (actual_cwrapper_name);
3766 lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
3767 lt_setenv ("DUALCASE", "1"); /* for MSK sh */
3768 lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
3769 lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
3771 lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
3772 nonnull (lt_argv_zero));
3773 for (i = 0; i < newargc; i++)
3775 lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
3776 i, nonnull (newargz[i]));
3781 case $host_os in
3782 mingw*)
3783 cat <<"EOF"
3784 /* execv doesn't actually work on mingw as expected on unix */
3785 newargz = prepare_spawn (newargz);
3786 rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
3787 if (rval == -1)
3789 /* failed to start process */
3790 lt_debugprintf (__FILE__, __LINE__,
3791 "(main) failed to launch target \"%s\": %s\n",
3792 lt_argv_zero, nonnull (strerror (errno)));
3793 return 127;
3795 return rval;
3799 cat <<"EOF"
3800 execv (lt_argv_zero, newargz);
3801 return rval; /* =127, but avoids unused variable warning */
3804 esac
3806 cat <<"EOF"
3809 void *
3810 xmalloc (size_t num)
3812 void *p = (void *) malloc (num);
3813 if (!p)
3814 lt_fatal (__FILE__, __LINE__, "memory exhausted");
3816 return p;
3819 char *
3820 xstrdup (const char *string)
3822 return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
3823 string) : NULL;
3826 const char *
3827 base_name (const char *name)
3829 const char *base;
3831 #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
3832 /* Skip over the disk name in MSDOS pathnames. */
3833 if (isalpha ((unsigned char) name[0]) && name[1] == ':')
3834 name += 2;
3835 #endif
3837 for (base = name; *name; name++)
3838 if (IS_DIR_SEPARATOR (*name))
3839 base = name + 1;
3840 return base;
3844 check_executable (const char *path)
3846 struct stat st;
3848 lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
3849 nonempty (path));
3850 if ((!path) || (!*path))
3851 return 0;
3853 if ((stat (path, &st) >= 0)
3854 && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
3855 return 1;
3856 else
3857 return 0;
3861 make_executable (const char *path)
3863 int rval = 0;
3864 struct stat st;
3866 lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
3867 nonempty (path));
3868 if ((!path) || (!*path))
3869 return 0;
3871 if (stat (path, &st) >= 0)
3873 rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
3875 return rval;
3878 /* Searches for the full path of the wrapper. Returns
3879 newly allocated full path name if found, NULL otherwise
3880 Does not chase symlinks, even on platforms that support them.
3882 char *
3883 find_executable (const char *wrapper)
3885 int has_slash = 0;
3886 const char *p;
3887 const char *p_next;
3888 /* static buffer for getcwd */
3889 char tmp[LT_PATHMAX + 1];
3890 int tmp_len;
3891 char *concat_name;
3893 lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
3894 nonempty (wrapper));
3896 if ((wrapper == NULL) || (*wrapper == '\0'))
3897 return NULL;
3899 /* Absolute path? */
3900 #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
3901 if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
3903 concat_name = xstrdup (wrapper);
3904 if (check_executable (concat_name))
3905 return concat_name;
3906 XFREE (concat_name);
3908 else
3910 #endif
3911 if (IS_DIR_SEPARATOR (wrapper[0]))
3913 concat_name = xstrdup (wrapper);
3914 if (check_executable (concat_name))
3915 return concat_name;
3916 XFREE (concat_name);
3918 #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
3920 #endif
3922 for (p = wrapper; *p; p++)
3923 if (*p == '/')
3925 has_slash = 1;
3926 break;
3928 if (!has_slash)
3930 /* no slashes; search PATH */
3931 const char *path = getenv ("PATH");
3932 if (path != NULL)
3934 for (p = path; *p; p = p_next)
3936 const char *q;
3937 size_t p_len;
3938 for (q = p; *q; q++)
3939 if (IS_PATH_SEPARATOR (*q))
3940 break;
3941 p_len = q - p;
3942 p_next = (*q == '\0' ? q : q + 1);
3943 if (p_len == 0)
3945 /* empty path: current directory */
3946 if (getcwd (tmp, LT_PATHMAX) == NULL)
3947 lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
3948 nonnull (strerror (errno)));
3949 tmp_len = strlen (tmp);
3950 concat_name =
3951 XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
3952 memcpy (concat_name, tmp, tmp_len);
3953 concat_name[tmp_len] = '/';
3954 strcpy (concat_name + tmp_len + 1, wrapper);
3956 else
3958 concat_name =
3959 XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
3960 memcpy (concat_name, p, p_len);
3961 concat_name[p_len] = '/';
3962 strcpy (concat_name + p_len + 1, wrapper);
3964 if (check_executable (concat_name))
3965 return concat_name;
3966 XFREE (concat_name);
3969 /* not found in PATH; assume curdir */
3971 /* Relative path | not found in path: prepend cwd */
3972 if (getcwd (tmp, LT_PATHMAX) == NULL)
3973 lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
3974 nonnull (strerror (errno)));
3975 tmp_len = strlen (tmp);
3976 concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
3977 memcpy (concat_name, tmp, tmp_len);
3978 concat_name[tmp_len] = '/';
3979 strcpy (concat_name + tmp_len + 1, wrapper);
3981 if (check_executable (concat_name))
3982 return concat_name;
3983 XFREE (concat_name);
3984 return NULL;
3987 char *
3988 chase_symlinks (const char *pathspec)
3990 #ifndef S_ISLNK
3991 return xstrdup (pathspec);
3992 #else
3993 char buf[LT_PATHMAX];
3994 struct stat s;
3995 char *tmp_pathspec = xstrdup (pathspec);
3996 char *p;
3997 int has_symlinks = 0;
3998 while (strlen (tmp_pathspec) && !has_symlinks)
4000 lt_debugprintf (__FILE__, __LINE__,
4001 "checking path component for symlinks: %s\n",
4002 tmp_pathspec);
4003 if (lstat (tmp_pathspec, &s) == 0)
4005 if (S_ISLNK (s.st_mode) != 0)
4007 has_symlinks = 1;
4008 break;
4011 /* search backwards for last DIR_SEPARATOR */
4012 p = tmp_pathspec + strlen (tmp_pathspec) - 1;
4013 while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4014 p--;
4015 if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4017 /* no more DIR_SEPARATORS left */
4018 break;
4020 *p = '\0';
4022 else
4024 lt_fatal (__FILE__, __LINE__,
4025 "error accessing file \"%s\": %s",
4026 tmp_pathspec, nonnull (strerror (errno)));
4029 XFREE (tmp_pathspec);
4031 if (!has_symlinks)
4033 return xstrdup (pathspec);
4036 tmp_pathspec = realpath (pathspec, buf);
4037 if (tmp_pathspec == 0)
4039 lt_fatal (__FILE__, __LINE__,
4040 "could not follow symlinks for %s", pathspec);
4042 return xstrdup (tmp_pathspec);
4043 #endif
4046 char *
4047 strendzap (char *str, const char *pat)
4049 size_t len, patlen;
4051 assert (str != NULL);
4052 assert (pat != NULL);
4054 len = strlen (str);
4055 patlen = strlen (pat);
4057 if (patlen <= len)
4059 str += len - patlen;
4060 if (strcmp (str, pat) == 0)
4061 *str = '\0';
4063 return str;
4066 void
4067 lt_debugprintf (const char *file, int line, const char *fmt, ...)
4069 va_list args;
4070 if (lt_debug)
4072 (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
4073 va_start (args, fmt);
4074 (void) vfprintf (stderr, fmt, args);
4075 va_end (args);
4079 static void
4080 lt_error_core (int exit_status, const char *file,
4081 int line, const char *mode,
4082 const char *message, va_list ap)
4084 fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
4085 vfprintf (stderr, message, ap);
4086 fprintf (stderr, ".\n");
4088 if (exit_status >= 0)
4089 exit (exit_status);
4092 void
4093 lt_fatal (const char *file, int line, const char *message, ...)
4095 va_list ap;
4096 va_start (ap, message);
4097 lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
4098 va_end (ap);
4101 static const char *
4102 nonnull (const char *s)
4104 return s ? s : "(null)";
4107 static const char *
4108 nonempty (const char *s)
4110 return (s && !*s) ? "(empty)" : nonnull (s);
4113 void
4114 lt_setenv (const char *name, const char *value)
4116 lt_debugprintf (__FILE__, __LINE__,
4117 "(lt_setenv) setting '%s' to '%s'\n",
4118 nonnull (name), nonnull (value));
4120 #ifdef HAVE_SETENV
4121 /* always make a copy, for consistency with !HAVE_SETENV */
4122 char *str = xstrdup (value);
4123 setenv (name, str, 1);
4124 #else
4125 int len = strlen (name) + 1 + strlen (value) + 1;
4126 char *str = XMALLOC (char, len);
4127 sprintf (str, "%s=%s", name, value);
4128 if (putenv (str) != EXIT_SUCCESS)
4130 XFREE (str);
4132 #endif
4136 char *
4137 lt_extend_str (const char *orig_value, const char *add, int to_end)
4139 char *new_value;
4140 if (orig_value && *orig_value)
4142 int orig_value_len = strlen (orig_value);
4143 int add_len = strlen (add);
4144 new_value = XMALLOC (char, add_len + orig_value_len + 1);
4145 if (to_end)
4147 strcpy (new_value, orig_value);
4148 strcpy (new_value + orig_value_len, add);
4150 else
4152 strcpy (new_value, add);
4153 strcpy (new_value + add_len, orig_value);
4156 else
4158 new_value = xstrdup (add);
4160 return new_value;
4163 void
4164 lt_update_exe_path (const char *name, const char *value)
4166 lt_debugprintf (__FILE__, __LINE__,
4167 "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
4168 nonnull (name), nonnull (value));
4170 if (name && *name && value && *value)
4172 char *new_value = lt_extend_str (getenv (name), value, 0);
4173 /* some systems can't cope with a ':'-terminated path #' */
4174 int len = strlen (new_value);
4175 while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
4177 new_value[len-1] = '\0';
4179 lt_setenv (name, new_value);
4180 XFREE (new_value);
4184 void
4185 lt_update_lib_path (const char *name, const char *value)
4187 lt_debugprintf (__FILE__, __LINE__,
4188 "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
4189 nonnull (name), nonnull (value));
4191 if (name && *name && value && *value)
4193 char *new_value = lt_extend_str (getenv (name), value, 0);
4194 lt_setenv (name, new_value);
4195 XFREE (new_value);
4200 case $host_os in
4201 mingw*)
4202 cat <<"EOF"
4204 /* Prepares an argument vector before calling spawn().
4205 Note that spawn() does not by itself call the command interpreter
4206 (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
4207 ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
4208 GetVersionEx(&v);
4209 v.dwPlatformId == VER_PLATFORM_WIN32_NT;
4210 }) ? "cmd.exe" : "command.com").
4211 Instead it simply concatenates the arguments, separated by ' ', and calls
4212 CreateProcess(). We must quote the arguments since Win32 CreateProcess()
4213 interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
4214 special way:
4215 - Space and tab are interpreted as delimiters. They are not treated as
4216 delimiters if they are surrounded by double quotes: "...".
4217 - Unescaped double quotes are removed from the input. Their only effect is
4218 that within double quotes, space and tab are treated like normal
4219 characters.
4220 - Backslashes not followed by double quotes are not special.
4221 - But 2*n+1 backslashes followed by a double quote become
4222 n backslashes followed by a double quote (n >= 0):
4223 \" -> "
4224 \\\" -> \"
4225 \\\\\" -> \\"
4227 #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"
4228 #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"
4229 char **
4230 prepare_spawn (char **argv)
4232 size_t argc;
4233 char **new_argv;
4234 size_t i;
4236 /* Count number of arguments. */
4237 for (argc = 0; argv[argc] != NULL; argc++)
4240 /* Allocate new argument vector. */
4241 new_argv = XMALLOC (char *, argc + 1);
4243 /* Put quoted arguments into the new argument vector. */
4244 for (i = 0; i < argc; i++)
4246 const char *string = argv[i];
4248 if (string[0] == '\0')
4249 new_argv[i] = xstrdup ("\"\"");
4250 else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
4252 int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
4253 size_t length;
4254 unsigned int backslashes;
4255 const char *s;
4256 char *quoted_string;
4257 char *p;
4259 length = 0;
4260 backslashes = 0;
4261 if (quote_around)
4262 length++;
4263 for (s = string; *s != '\0'; s++)
4265 char c = *s;
4266 if (c == '"')
4267 length += backslashes + 1;
4268 length++;
4269 if (c == '\\')
4270 backslashes++;
4271 else
4272 backslashes = 0;
4274 if (quote_around)
4275 length += backslashes + 1;
4277 quoted_string = XMALLOC (char, length + 1);
4279 p = quoted_string;
4280 backslashes = 0;
4281 if (quote_around)
4282 *p++ = '"';
4283 for (s = string; *s != '\0'; s++)
4285 char c = *s;
4286 if (c == '"')
4288 unsigned int j;
4289 for (j = backslashes + 1; j > 0; j--)
4290 *p++ = '\\';
4292 *p++ = c;
4293 if (c == '\\')
4294 backslashes++;
4295 else
4296 backslashes = 0;
4298 if (quote_around)
4300 unsigned int j;
4301 for (j = backslashes; j > 0; j--)
4302 *p++ = '\\';
4303 *p++ = '"';
4305 *p = '\0';
4307 new_argv[i] = quoted_string;
4309 else
4310 new_argv[i] = (char *) string;
4312 new_argv[argc] = NULL;
4314 return new_argv;
4318 esac
4320 cat <<"EOF"
4321 void lt_dump_script (FILE* f)
4324 func_emit_wrapper yes |
4325 $SED -e 's/\([\\"]\)/\\\1/g' \
4326 -e 's/^/ fputs ("/' -e 's/$/\\n", f);/'
4328 cat <<"EOF"
4332 # end: func_emit_cwrapperexe_src
4334 # func_win32_import_lib_p ARG
4335 # True if ARG is an import lib, as indicated by $file_magic_cmd
4336 func_win32_import_lib_p ()
4338 $opt_debug
4339 case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
4340 *import*) : ;;
4341 *) false ;;
4342 esac
4345 # func_mode_link arg...
4346 func_mode_link ()
4348 $opt_debug
4349 case $host in
4350 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
4351 # It is impossible to link a dll without this setting, and
4352 # we shouldn't force the makefile maintainer to figure out
4353 # which system we are compiling for in order to pass an extra
4354 # flag for every libtool invocation.
4355 # allow_undefined=no
4357 # FIXME: Unfortunately, there are problems with the above when trying
4358 # to make a dll which has undefined symbols, in which case not
4359 # even a static library is built. For now, we need to specify
4360 # -no-undefined on the libtool link line when we can be certain
4361 # that all symbols are satisfied, otherwise we get a static library.
4362 allow_undefined=yes
4365 allow_undefined=yes
4367 esac
4368 libtool_args=$nonopt
4369 base_compile="$nonopt $@"
4370 compile_command=$nonopt
4371 finalize_command=$nonopt
4373 compile_rpath=
4374 finalize_rpath=
4375 compile_shlibpath=
4376 finalize_shlibpath=
4377 convenience=
4378 old_convenience=
4379 deplibs=
4380 old_deplibs=
4381 compiler_flags=
4382 linker_flags=
4383 dllsearchpath=
4384 lib_search_path=`pwd`
4385 inst_prefix_dir=
4386 new_inherited_linker_flags=
4388 avoid_version=no
4389 bindir=
4390 dlfiles=
4391 dlprefiles=
4392 dlself=no
4393 export_dynamic=no
4394 export_symbols=
4395 export_symbols_regex=
4396 generated=
4397 libobjs=
4398 ltlibs=
4399 module=no
4400 no_install=no
4401 objs=
4402 non_pic_objects=
4403 precious_files_regex=
4404 prefer_static_libs=no
4405 preload=no
4406 prev=
4407 prevarg=
4408 release=
4409 rpath=
4410 xrpath=
4411 perm_rpath=
4412 temp_rpath=
4413 thread_safe=no
4414 vinfo=
4415 vinfo_number=no
4416 weak_libs=
4417 single_module="${wl}-single_module"
4418 func_infer_tag $base_compile
4420 # We need to know -static, to get the right output filenames.
4421 for arg
4423 case $arg in
4424 -shared)
4425 test "$build_libtool_libs" != yes && \
4426 func_fatal_configuration "can not build a shared library"
4427 build_old_libs=no
4428 break
4430 -all-static | -static | -static-libtool-libs)
4431 case $arg in
4432 -all-static)
4433 if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
4434 func_warning "complete static linking is impossible in this configuration"
4436 if test -n "$link_static_flag"; then
4437 dlopen_self=$dlopen_self_static
4439 prefer_static_libs=yes
4441 -static)
4442 if test -z "$pic_flag" && test -n "$link_static_flag"; then
4443 dlopen_self=$dlopen_self_static
4445 prefer_static_libs=built
4447 -static-libtool-libs)
4448 if test -z "$pic_flag" && test -n "$link_static_flag"; then
4449 dlopen_self=$dlopen_self_static
4451 prefer_static_libs=yes
4453 esac
4454 build_libtool_libs=no
4455 build_old_libs=yes
4456 break
4458 esac
4459 done
4461 # See if our shared archives depend on static archives.
4462 test -n "$old_archive_from_new_cmds" && build_old_libs=yes
4464 # Go through the arguments, transforming them on the way.
4465 while test "$#" -gt 0; do
4466 arg="$1"
4467 shift
4468 func_quote_for_eval "$arg"
4469 qarg=$func_quote_for_eval_unquoted_result
4470 func_append libtool_args " $func_quote_for_eval_result"
4472 # If the previous option needs an argument, assign it.
4473 if test -n "$prev"; then
4474 case $prev in
4475 output)
4476 func_append compile_command " @OUTPUT@"
4477 func_append finalize_command " @OUTPUT@"
4479 esac
4481 case $prev in
4482 bindir)
4483 bindir="$arg"
4484 prev=
4485 continue
4487 dlfiles|dlprefiles)
4488 if test "$preload" = no; then
4489 # Add the symbol object into the linking commands.
4490 func_append compile_command " @SYMFILE@"
4491 func_append finalize_command " @SYMFILE@"
4492 preload=yes
4494 case $arg in
4495 *.la | *.lo) ;; # We handle these cases below.
4496 force)
4497 if test "$dlself" = no; then
4498 dlself=needless
4499 export_dynamic=yes
4501 prev=
4502 continue
4504 self)
4505 if test "$prev" = dlprefiles; then
4506 dlself=yes
4507 elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
4508 dlself=yes
4509 else
4510 dlself=needless
4511 export_dynamic=yes
4513 prev=
4514 continue
4517 if test "$prev" = dlfiles; then
4518 dlfiles="$dlfiles $arg"
4519 else
4520 dlprefiles="$dlprefiles $arg"
4522 prev=
4523 continue
4525 esac
4527 expsyms)
4528 export_symbols="$arg"
4529 test -f "$arg" \
4530 || func_fatal_error "symbol file \`$arg' does not exist"
4531 prev=
4532 continue
4534 expsyms_regex)
4535 export_symbols_regex="$arg"
4536 prev=
4537 continue
4539 framework)
4540 case $host in
4541 *-*-darwin*)
4542 case "$deplibs " in
4543 *" $qarg.ltframework "*) ;;
4544 *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
4546 esac
4548 esac
4549 prev=
4550 continue
4552 inst_prefix)
4553 inst_prefix_dir="$arg"
4554 prev=
4555 continue
4557 objectlist)
4558 if test -f "$arg"; then
4559 save_arg=$arg
4560 moreargs=
4561 for fil in `cat "$save_arg"`
4563 # moreargs="$moreargs $fil"
4564 arg=$fil
4565 # A libtool-controlled object.
4567 # Check to see that this really is a libtool object.
4568 if func_lalib_unsafe_p "$arg"; then
4569 pic_object=
4570 non_pic_object=
4572 # Read the .lo file
4573 func_source "$arg"
4575 if test -z "$pic_object" ||
4576 test -z "$non_pic_object" ||
4577 test "$pic_object" = none &&
4578 test "$non_pic_object" = none; then
4579 func_fatal_error "cannot find name of object for \`$arg'"
4582 # Extract subdirectory from the argument.
4583 func_dirname "$arg" "/" ""
4584 xdir="$func_dirname_result"
4586 if test "$pic_object" != none; then
4587 # Prepend the subdirectory the object is found in.
4588 pic_object="$xdir$pic_object"
4590 if test "$prev" = dlfiles; then
4591 if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
4592 dlfiles="$dlfiles $pic_object"
4593 prev=
4594 continue
4595 else
4596 # If libtool objects are unsupported, then we need to preload.
4597 prev=dlprefiles
4601 # CHECK ME: I think I busted this. -Ossama
4602 if test "$prev" = dlprefiles; then
4603 # Preload the old-style object.
4604 dlprefiles="$dlprefiles $pic_object"
4605 prev=
4608 # A PIC object.
4609 func_append libobjs " $pic_object"
4610 arg="$pic_object"
4613 # Non-PIC object.
4614 if test "$non_pic_object" != none; then
4615 # Prepend the subdirectory the object is found in.
4616 non_pic_object="$xdir$non_pic_object"
4618 # A standard non-PIC object
4619 func_append non_pic_objects " $non_pic_object"
4620 if test -z "$pic_object" || test "$pic_object" = none ; then
4621 arg="$non_pic_object"
4623 else
4624 # If the PIC object exists, use it instead.
4625 # $xdir was prepended to $pic_object above.
4626 non_pic_object="$pic_object"
4627 func_append non_pic_objects " $non_pic_object"
4629 else
4630 # Only an error if not doing a dry-run.
4631 if $opt_dry_run; then
4632 # Extract subdirectory from the argument.
4633 func_dirname "$arg" "/" ""
4634 xdir="$func_dirname_result"
4636 func_lo2o "$arg"
4637 pic_object=$xdir$objdir/$func_lo2o_result
4638 non_pic_object=$xdir$func_lo2o_result
4639 func_append libobjs " $pic_object"
4640 func_append non_pic_objects " $non_pic_object"
4641 else
4642 func_fatal_error "\`$arg' is not a valid libtool object"
4645 done
4646 else
4647 func_fatal_error "link input file \`$arg' does not exist"
4649 arg=$save_arg
4650 prev=
4651 continue
4653 precious_regex)
4654 precious_files_regex="$arg"
4655 prev=
4656 continue
4658 release)
4659 release="-$arg"
4660 prev=
4661 continue
4663 rpath | xrpath)
4664 # We need an absolute path.
4665 case $arg in
4666 [\\/]* | [A-Za-z]:[\\/]*) ;;
4668 func_fatal_error "only absolute run-paths are allowed"
4670 esac
4671 if test "$prev" = rpath; then
4672 case "$rpath " in
4673 *" $arg "*) ;;
4674 *) rpath="$rpath $arg" ;;
4675 esac
4676 else
4677 case "$xrpath " in
4678 *" $arg "*) ;;
4679 *) xrpath="$xrpath $arg" ;;
4680 esac
4682 prev=
4683 continue
4685 shrext)
4686 shrext_cmds="$arg"
4687 prev=
4688 continue
4690 weak)
4691 weak_libs="$weak_libs $arg"
4692 prev=
4693 continue
4695 xcclinker)
4696 linker_flags="$linker_flags $qarg"
4697 compiler_flags="$compiler_flags $qarg"
4698 prev=
4699 func_append compile_command " $qarg"
4700 func_append finalize_command " $qarg"
4701 continue
4703 xcompiler)
4704 compiler_flags="$compiler_flags $qarg"
4705 prev=
4706 func_append compile_command " $qarg"
4707 func_append finalize_command " $qarg"
4708 continue
4710 xlinker)
4711 linker_flags="$linker_flags $qarg"
4712 compiler_flags="$compiler_flags $wl$qarg"
4713 prev=
4714 func_append compile_command " $wl$qarg"
4715 func_append finalize_command " $wl$qarg"
4716 continue
4719 eval "$prev=\"\$arg\""
4720 prev=
4721 continue
4723 esac
4724 fi # test -n "$prev"
4726 prevarg="$arg"
4728 case $arg in
4729 -all-static)
4730 if test -n "$link_static_flag"; then
4731 # See comment for -static flag below, for more details.
4732 func_append compile_command " $link_static_flag"
4733 func_append finalize_command " $link_static_flag"
4735 continue
4738 -allow-undefined)
4739 # FIXME: remove this flag sometime in the future.
4740 func_fatal_error "\`-allow-undefined' must not be used because it is the default"
4743 -avoid-version)
4744 avoid_version=yes
4745 continue
4748 -bindir)
4749 prev=bindir
4750 continue
4753 -dlopen)
4754 prev=dlfiles
4755 continue
4758 -dlpreopen)
4759 prev=dlprefiles
4760 continue
4763 -export-dynamic)
4764 export_dynamic=yes
4765 continue
4768 -export-symbols | -export-symbols-regex)
4769 if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
4770 func_fatal_error "more than one -exported-symbols argument is not allowed"
4772 if test "X$arg" = "X-export-symbols"; then
4773 prev=expsyms
4774 else
4775 prev=expsyms_regex
4777 continue
4780 -framework)
4781 prev=framework
4782 continue
4785 -inst-prefix-dir)
4786 prev=inst_prefix
4787 continue
4790 # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
4791 # so, if we see these flags be careful not to treat them like -L
4792 -L[A-Z][A-Z]*:*)
4793 case $with_gcc/$host in
4794 no/*-*-irix* | /*-*-irix*)
4795 func_append compile_command " $arg"
4796 func_append finalize_command " $arg"
4798 esac
4799 continue
4802 -L*)
4803 func_stripname '-L' '' "$arg"
4804 dir=$func_stripname_result
4805 if test -z "$dir"; then
4806 if test "$#" -gt 0; then
4807 func_fatal_error "require no space between \`-L' and \`$1'"
4808 else
4809 func_fatal_error "need path for \`-L' option"
4812 # We need an absolute path.
4813 case $dir in
4814 [\\/]* | [A-Za-z]:[\\/]*) ;;
4816 absdir=`cd "$dir" && pwd`
4817 test -z "$absdir" && \
4818 func_fatal_error "cannot determine absolute directory name of \`$dir'"
4819 dir="$absdir"
4821 esac
4822 case "$deplibs " in
4823 *" -L$dir "*) ;;
4825 deplibs="$deplibs -L$dir"
4826 lib_search_path="$lib_search_path $dir"
4828 esac
4829 case $host in
4830 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
4831 testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
4832 case :$dllsearchpath: in
4833 *":$dir:"*) ;;
4834 ::) dllsearchpath=$dir;;
4835 *) dllsearchpath="$dllsearchpath:$dir";;
4836 esac
4837 case :$dllsearchpath: in
4838 *":$testbindir:"*) ;;
4839 ::) dllsearchpath=$testbindir;;
4840 *) dllsearchpath="$dllsearchpath:$testbindir";;
4841 esac
4843 esac
4844 continue
4847 -l*)
4848 if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
4849 case $host in
4850 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
4851 # These systems don't actually have a C or math library (as such)
4852 continue
4854 *-*-os2*)
4855 # These systems don't actually have a C library (as such)
4856 test "X$arg" = "X-lc" && continue
4858 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
4859 # Do not include libc due to us having libc/libc_r.
4860 test "X$arg" = "X-lc" && continue
4862 *-*-rhapsody* | *-*-darwin1.[012])
4863 # Rhapsody C and math libraries are in the System framework
4864 deplibs="$deplibs System.ltframework"
4865 continue
4867 *-*-sco3.2v5* | *-*-sco5v6*)
4868 # Causes problems with __ctype
4869 test "X$arg" = "X-lc" && continue
4871 *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
4872 # Compiler inserts libc in the correct place for threads to work
4873 test "X$arg" = "X-lc" && continue
4875 esac
4876 elif test "X$arg" = "X-lc_r"; then
4877 case $host in
4878 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
4879 # Do not include libc_r directly, use -pthread flag.
4880 continue
4882 esac
4884 deplibs="$deplibs $arg"
4885 continue
4888 -module)
4889 module=yes
4890 continue
4893 # Tru64 UNIX uses -model [arg] to determine the layout of C++
4894 # classes, name mangling, and exception handling.
4895 # Darwin uses the -arch flag to determine output architecture.
4896 -model|-arch|-isysroot)
4897 compiler_flags="$compiler_flags $arg"
4898 func_append compile_command " $arg"
4899 func_append finalize_command " $arg"
4900 prev=xcompiler
4901 continue
4904 -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
4905 compiler_flags="$compiler_flags $arg"
4906 func_append compile_command " $arg"
4907 func_append finalize_command " $arg"
4908 case "$new_inherited_linker_flags " in
4909 *" $arg "*) ;;
4910 * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
4911 esac
4912 continue
4915 -multi_module)
4916 single_module="${wl}-multi_module"
4917 continue
4920 -no-fast-install)
4921 fast_install=no
4922 continue
4925 -no-install)
4926 case $host in
4927 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
4928 # The PATH hackery in wrapper scripts is required on Windows
4929 # and Darwin in order for the loader to find any dlls it needs.
4930 func_warning "\`-no-install' is ignored for $host"
4931 func_warning "assuming \`-no-fast-install' instead"
4932 fast_install=no
4934 *) no_install=yes ;;
4935 esac
4936 continue
4939 -no-undefined)
4940 allow_undefined=no
4941 continue
4944 -objectlist)
4945 prev=objectlist
4946 continue
4949 -o) prev=output ;;
4951 -precious-files-regex)
4952 prev=precious_regex
4953 continue
4956 -release)
4957 prev=release
4958 continue
4961 -rpath)
4962 prev=rpath
4963 continue
4967 prev=xrpath
4968 continue
4971 -R*)
4972 func_stripname '-R' '' "$arg"
4973 dir=$func_stripname_result
4974 # We need an absolute path.
4975 case $dir in
4976 [\\/]* | [A-Za-z]:[\\/]*) ;;
4978 func_fatal_error "only absolute run-paths are allowed"
4980 esac
4981 case "$xrpath " in
4982 *" $dir "*) ;;
4983 *) xrpath="$xrpath $dir" ;;
4984 esac
4985 continue
4988 -shared)
4989 # The effects of -shared are defined in a previous loop.
4990 continue
4993 -shrext)
4994 prev=shrext
4995 continue
4998 -static | -static-libtool-libs)
4999 # The effects of -static are defined in a previous loop.
5000 # We used to do the same as -all-static on platforms that
5001 # didn't have a PIC flag, but the assumption that the effects
5002 # would be equivalent was wrong. It would break on at least
5003 # Digital Unix and AIX.
5004 continue
5007 -thread-safe)
5008 thread_safe=yes
5009 continue
5012 -version-info)
5013 prev=vinfo
5014 continue
5017 -version-number)
5018 prev=vinfo
5019 vinfo_number=yes
5020 continue
5023 -weak)
5024 prev=weak
5025 continue
5028 -Wc,*)
5029 func_stripname '-Wc,' '' "$arg"
5030 args=$func_stripname_result
5031 arg=
5032 save_ifs="$IFS"; IFS=','
5033 for flag in $args; do
5034 IFS="$save_ifs"
5035 func_quote_for_eval "$flag"
5036 arg="$arg $func_quote_for_eval_result"
5037 compiler_flags="$compiler_flags $func_quote_for_eval_result"
5038 done
5039 IFS="$save_ifs"
5040 func_stripname ' ' '' "$arg"
5041 arg=$func_stripname_result
5044 -Wl,*)
5045 func_stripname '-Wl,' '' "$arg"
5046 args=$func_stripname_result
5047 arg=
5048 save_ifs="$IFS"; IFS=','
5049 for flag in $args; do
5050 IFS="$save_ifs"
5051 func_quote_for_eval "$flag"
5052 arg="$arg $wl$func_quote_for_eval_result"
5053 compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
5054 linker_flags="$linker_flags $func_quote_for_eval_result"
5055 done
5056 IFS="$save_ifs"
5057 func_stripname ' ' '' "$arg"
5058 arg=$func_stripname_result
5061 -Xcompiler)
5062 prev=xcompiler
5063 continue
5066 -Xlinker)
5067 prev=xlinker
5068 continue
5071 -XCClinker)
5072 prev=xcclinker
5073 continue
5076 # -msg_* for osf cc
5077 -msg_*)
5078 func_quote_for_eval "$arg"
5079 arg="$func_quote_for_eval_result"
5082 # Flags to be passed through unchanged, with rationale:
5083 # -64, -mips[0-9] enable 64-bit mode for the SGI compiler
5084 # -r[0-9][0-9]* specify processor for the SGI compiler
5085 # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
5086 # +DA*, +DD* enable 64-bit mode for the HP compiler
5087 # -q* compiler args for the IBM compiler
5088 # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
5089 # -F/path path to uninstalled frameworks, gcc on darwin
5090 # -p, -pg, --coverage, -fprofile-* profiling flags for GCC
5091 # @file GCC response files
5092 # -tp=* Portland pgcc target processor selection
5093 -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
5094 -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*)
5095 func_quote_for_eval "$arg"
5096 arg="$func_quote_for_eval_result"
5097 func_append compile_command " $arg"
5098 func_append finalize_command " $arg"
5099 compiler_flags="$compiler_flags $arg"
5100 continue
5103 # Some other compiler flag.
5104 -* | +*)
5105 func_quote_for_eval "$arg"
5106 arg="$func_quote_for_eval_result"
5109 *.$objext)
5110 # A standard object.
5111 objs="$objs $arg"
5114 *.lo)
5115 # A libtool-controlled object.
5117 # Check to see that this really is a libtool object.
5118 if func_lalib_unsafe_p "$arg"; then
5119 pic_object=
5120 non_pic_object=
5122 # Read the .lo file
5123 func_source "$arg"
5125 if test -z "$pic_object" ||
5126 test -z "$non_pic_object" ||
5127 test "$pic_object" = none &&
5128 test "$non_pic_object" = none; then
5129 func_fatal_error "cannot find name of object for \`$arg'"
5132 # Extract subdirectory from the argument.
5133 func_dirname "$arg" "/" ""
5134 xdir="$func_dirname_result"
5136 if test "$pic_object" != none; then
5137 # Prepend the subdirectory the object is found in.
5138 pic_object="$xdir$pic_object"
5140 if test "$prev" = dlfiles; then
5141 if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5142 dlfiles="$dlfiles $pic_object"
5143 prev=
5144 continue
5145 else
5146 # If libtool objects are unsupported, then we need to preload.
5147 prev=dlprefiles
5151 # CHECK ME: I think I busted this. -Ossama
5152 if test "$prev" = dlprefiles; then
5153 # Preload the old-style object.
5154 dlprefiles="$dlprefiles $pic_object"
5155 prev=
5158 # A PIC object.
5159 func_append libobjs " $pic_object"
5160 arg="$pic_object"
5163 # Non-PIC object.
5164 if test "$non_pic_object" != none; then
5165 # Prepend the subdirectory the object is found in.
5166 non_pic_object="$xdir$non_pic_object"
5168 # A standard non-PIC object
5169 func_append non_pic_objects " $non_pic_object"
5170 if test -z "$pic_object" || test "$pic_object" = none ; then
5171 arg="$non_pic_object"
5173 else
5174 # If the PIC object exists, use it instead.
5175 # $xdir was prepended to $pic_object above.
5176 non_pic_object="$pic_object"
5177 func_append non_pic_objects " $non_pic_object"
5179 else
5180 # Only an error if not doing a dry-run.
5181 if $opt_dry_run; then
5182 # Extract subdirectory from the argument.
5183 func_dirname "$arg" "/" ""
5184 xdir="$func_dirname_result"
5186 func_lo2o "$arg"
5187 pic_object=$xdir$objdir/$func_lo2o_result
5188 non_pic_object=$xdir$func_lo2o_result
5189 func_append libobjs " $pic_object"
5190 func_append non_pic_objects " $non_pic_object"
5191 else
5192 func_fatal_error "\`$arg' is not a valid libtool object"
5197 *.$libext)
5198 # An archive.
5199 deplibs="$deplibs $arg"
5200 old_deplibs="$old_deplibs $arg"
5201 continue
5204 *.la)
5205 # A libtool-controlled library.
5207 if test "$prev" = dlfiles; then
5208 # This library was specified with -dlopen.
5209 dlfiles="$dlfiles $arg"
5210 prev=
5211 elif test "$prev" = dlprefiles; then
5212 # The library was specified with -dlpreopen.
5213 dlprefiles="$dlprefiles $arg"
5214 prev=
5215 else
5216 deplibs="$deplibs $arg"
5218 continue
5221 # Some other compiler argument.
5223 # Unknown arguments in both finalize_command and compile_command need
5224 # to be aesthetically quoted because they are evaled later.
5225 func_quote_for_eval "$arg"
5226 arg="$func_quote_for_eval_result"
5228 esac # arg
5230 # Now actually substitute the argument into the commands.
5231 if test -n "$arg"; then
5232 func_append compile_command " $arg"
5233 func_append finalize_command " $arg"
5235 done # argument parsing loop
5237 test -n "$prev" && \
5238 func_fatal_help "the \`$prevarg' option requires an argument"
5240 if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
5241 eval arg=\"$export_dynamic_flag_spec\"
5242 func_append compile_command " $arg"
5243 func_append finalize_command " $arg"
5246 oldlibs=
5247 # calculate the name of the file, without its directory
5248 func_basename "$output"
5249 outputname="$func_basename_result"
5250 libobjs_save="$libobjs"
5252 if test -n "$shlibpath_var"; then
5253 # get the directories listed in $shlibpath_var
5254 eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
5255 else
5256 shlib_search_path=
5258 eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
5259 eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
5261 func_dirname "$output" "/" ""
5262 output_objdir="$func_dirname_result$objdir"
5263 # Create the object directory.
5264 func_mkdir_p "$output_objdir"
5266 # Determine the type of output
5267 case $output in
5269 func_fatal_help "you must specify an output file"
5271 *.$libext) linkmode=oldlib ;;
5272 *.lo | *.$objext) linkmode=obj ;;
5273 *.la) linkmode=lib ;;
5274 *) linkmode=prog ;; # Anything else should be a program.
5275 esac
5277 specialdeplibs=
5279 libs=
5280 # Find all interdependent deplibs by searching for libraries
5281 # that are linked more than once (e.g. -la -lb -la)
5282 for deplib in $deplibs; do
5283 if $opt_duplicate_deps ; then
5284 case "$libs " in
5285 *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
5286 esac
5288 libs="$libs $deplib"
5289 done
5291 if test "$linkmode" = lib; then
5292 libs="$predeps $libs $compiler_lib_search_path $postdeps"
5294 # Compute libraries that are listed more than once in $predeps
5295 # $postdeps and mark them as special (i.e., whose duplicates are
5296 # not to be eliminated).
5297 pre_post_deps=
5298 if $opt_duplicate_compiler_generated_deps; then
5299 for pre_post_dep in $predeps $postdeps; do
5300 case "$pre_post_deps " in
5301 *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
5302 esac
5303 pre_post_deps="$pre_post_deps $pre_post_dep"
5304 done
5306 pre_post_deps=
5309 deplibs=
5310 newdependency_libs=
5311 newlib_search_path=
5312 need_relink=no # whether we're linking any uninstalled libtool libraries
5313 notinst_deplibs= # not-installed libtool libraries
5314 notinst_path= # paths that contain not-installed libtool libraries
5316 case $linkmode in
5317 lib)
5318 passes="conv dlpreopen link"
5319 for file in $dlfiles $dlprefiles; do
5320 case $file in
5321 *.la) ;;
5323 func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
5325 esac
5326 done
5328 prog)
5329 compile_deplibs=
5330 finalize_deplibs=
5331 alldeplibs=no
5332 newdlfiles=
5333 newdlprefiles=
5334 passes="conv scan dlopen dlpreopen link"
5336 *) passes="conv"
5338 esac
5340 for pass in $passes; do
5341 # The preopen pass in lib mode reverses $deplibs; put it back here
5342 # so that -L comes before libs that need it for instance...
5343 if test "$linkmode,$pass" = "lib,link"; then
5344 ## FIXME: Find the place where the list is rebuilt in the wrong
5345 ## order, and fix it there properly
5346 tmp_deplibs=
5347 for deplib in $deplibs; do
5348 tmp_deplibs="$deplib $tmp_deplibs"
5349 done
5350 deplibs="$tmp_deplibs"
5353 if test "$linkmode,$pass" = "lib,link" ||
5354 test "$linkmode,$pass" = "prog,scan"; then
5355 libs="$deplibs"
5356 deplibs=
5358 if test "$linkmode" = prog; then
5359 case $pass in
5360 dlopen) libs="$dlfiles" ;;
5361 dlpreopen) libs="$dlprefiles" ;;
5362 link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
5363 esac
5365 if test "$linkmode,$pass" = "lib,dlpreopen"; then
5366 # Collect and forward deplibs of preopened libtool libs
5367 for lib in $dlprefiles; do
5368 # Ignore non-libtool-libs
5369 dependency_libs=
5370 case $lib in
5371 *.la) func_source "$lib" ;;
5372 esac
5374 # Collect preopened libtool deplibs, except any this library
5375 # has declared as weak libs
5376 for deplib in $dependency_libs; do
5377 func_basename "$deplib"
5378 deplib_base=$func_basename_result
5379 case " $weak_libs " in
5380 *" $deplib_base "*) ;;
5381 *) deplibs="$deplibs $deplib" ;;
5382 esac
5383 done
5384 done
5385 libs="$dlprefiles"
5387 if test "$pass" = dlopen; then
5388 # Collect dlpreopened libraries
5389 save_deplibs="$deplibs"
5390 deplibs=
5393 for deplib in $libs; do
5394 lib=
5395 found=no
5396 case $deplib in
5397 -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
5398 if test "$linkmode,$pass" = "prog,link"; then
5399 compile_deplibs="$deplib $compile_deplibs"
5400 finalize_deplibs="$deplib $finalize_deplibs"
5401 else
5402 compiler_flags="$compiler_flags $deplib"
5403 if test "$linkmode" = lib ; then
5404 case "$new_inherited_linker_flags " in
5405 *" $deplib "*) ;;
5406 * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
5407 esac
5410 continue
5412 -l*)
5413 if test "$linkmode" != lib && test "$linkmode" != prog; then
5414 func_warning "\`-l' is ignored for archives/objects"
5415 continue
5417 func_stripname '-l' '' "$deplib"
5418 name=$func_stripname_result
5419 if test "$linkmode" = lib; then
5420 searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
5421 else
5422 searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
5424 for searchdir in $searchdirs; do
5425 for search_ext in .la $std_shrext .so .a; do
5426 # Search the libtool library
5427 lib="$searchdir/lib${name}${search_ext}"
5428 if test -f "$lib"; then
5429 if test "$search_ext" = ".la"; then
5430 found=yes
5431 else
5432 found=no
5434 break 2
5436 done
5437 done
5438 if test "$found" != yes; then
5439 # deplib doesn't seem to be a libtool library
5440 if test "$linkmode,$pass" = "prog,link"; then
5441 compile_deplibs="$deplib $compile_deplibs"
5442 finalize_deplibs="$deplib $finalize_deplibs"
5443 else
5444 deplibs="$deplib $deplibs"
5445 test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
5447 continue
5448 else # deplib is a libtool library
5449 # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
5450 # We need to do some special things here, and not later.
5451 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
5452 case " $predeps $postdeps " in
5453 *" $deplib "*)
5454 if func_lalib_p "$lib"; then
5455 library_names=
5456 old_library=
5457 func_source "$lib"
5458 for l in $old_library $library_names; do
5459 ll="$l"
5460 done
5461 if test "X$ll" = "X$old_library" ; then # only static version available
5462 found=no
5463 func_dirname "$lib" "" "."
5464 ladir="$func_dirname_result"
5465 lib=$ladir/$old_library
5466 if test "$linkmode,$pass" = "prog,link"; then
5467 compile_deplibs="$deplib $compile_deplibs"
5468 finalize_deplibs="$deplib $finalize_deplibs"
5469 else
5470 deplibs="$deplib $deplibs"
5471 test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
5473 continue
5477 *) ;;
5478 esac
5481 ;; # -l
5482 *.ltframework)
5483 if test "$linkmode,$pass" = "prog,link"; then
5484 compile_deplibs="$deplib $compile_deplibs"
5485 finalize_deplibs="$deplib $finalize_deplibs"
5486 else
5487 deplibs="$deplib $deplibs"
5488 if test "$linkmode" = lib ; then
5489 case "$new_inherited_linker_flags " in
5490 *" $deplib "*) ;;
5491 * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
5492 esac
5495 continue
5497 -L*)
5498 case $linkmode in
5499 lib)
5500 deplibs="$deplib $deplibs"
5501 test "$pass" = conv && continue
5502 newdependency_libs="$deplib $newdependency_libs"
5503 func_stripname '-L' '' "$deplib"
5504 newlib_search_path="$newlib_search_path $func_stripname_result"
5506 prog)
5507 if test "$pass" = conv; then
5508 deplibs="$deplib $deplibs"
5509 continue
5511 if test "$pass" = scan; then
5512 deplibs="$deplib $deplibs"
5513 else
5514 compile_deplibs="$deplib $compile_deplibs"
5515 finalize_deplibs="$deplib $finalize_deplibs"
5517 func_stripname '-L' '' "$deplib"
5518 newlib_search_path="$newlib_search_path $func_stripname_result"
5521 func_warning "\`-L' is ignored for archives/objects"
5523 esac # linkmode
5524 continue
5525 ;; # -L
5526 -R*)
5527 if test "$pass" = link; then
5528 func_stripname '-R' '' "$deplib"
5529 dir=$func_stripname_result
5530 # Make sure the xrpath contains only unique directories.
5531 case "$xrpath " in
5532 *" $dir "*) ;;
5533 *) xrpath="$xrpath $dir" ;;
5534 esac
5536 deplibs="$deplib $deplibs"
5537 continue
5539 *.la) lib="$deplib" ;;
5540 *.$libext)
5541 if test "$pass" = conv; then
5542 deplibs="$deplib $deplibs"
5543 continue
5545 case $linkmode in
5546 lib)
5547 # Linking convenience modules into shared libraries is allowed,
5548 # but linking other static libraries is non-portable.
5549 case " $dlpreconveniencelibs " in
5550 *" $deplib "*) ;;
5552 valid_a_lib=no
5553 case $deplibs_check_method in
5554 match_pattern*)
5555 set dummy $deplibs_check_method; shift
5556 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
5557 if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
5558 | $EGREP "$match_pattern_regex" > /dev/null; then
5559 valid_a_lib=yes
5562 pass_all)
5563 valid_a_lib=yes
5565 esac
5566 if test "$valid_a_lib" != yes; then
5567 echo
5568 $ECHO "*** Warning: Trying to link with static lib archive $deplib."
5569 echo "*** I have the capability to make that library automatically link in when"
5570 echo "*** you link to this library. But I can only do this if you have a"
5571 echo "*** shared version of the library, which you do not appear to have"
5572 echo "*** because the file extensions .$libext of this argument makes me believe"
5573 echo "*** that it is just a static archive that I should not use here."
5574 else
5575 echo
5576 $ECHO "*** Warning: Linking the shared library $output against the"
5577 $ECHO "*** static library $deplib is not portable!"
5578 deplibs="$deplib $deplibs"
5581 esac
5582 continue
5584 prog)
5585 if test "$pass" != link; then
5586 deplibs="$deplib $deplibs"
5587 else
5588 compile_deplibs="$deplib $compile_deplibs"
5589 finalize_deplibs="$deplib $finalize_deplibs"
5591 continue
5593 esac # linkmode
5594 ;; # *.$libext
5595 *.lo | *.$objext)
5596 if test "$pass" = conv; then
5597 deplibs="$deplib $deplibs"
5598 elif test "$linkmode" = prog; then
5599 if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
5600 # If there is no dlopen support or we're linking statically,
5601 # we need to preload.
5602 newdlprefiles="$newdlprefiles $deplib"
5603 compile_deplibs="$deplib $compile_deplibs"
5604 finalize_deplibs="$deplib $finalize_deplibs"
5605 else
5606 newdlfiles="$newdlfiles $deplib"
5609 continue
5611 %DEPLIBS%)
5612 alldeplibs=yes
5613 continue
5615 esac # case $deplib
5617 if test "$found" = yes || test -f "$lib"; then :
5618 else
5619 func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
5622 # Check to see that this really is a libtool archive.
5623 func_lalib_unsafe_p "$lib" \
5624 || func_fatal_error "\`$lib' is not a valid libtool archive"
5626 func_dirname "$lib" "" "."
5627 ladir="$func_dirname_result"
5629 dlname=
5630 dlopen=
5631 dlpreopen=
5632 libdir=
5633 library_names=
5634 old_library=
5635 inherited_linker_flags=
5636 # If the library was installed with an old release of libtool,
5637 # it will not redefine variables installed, or shouldnotlink
5638 installed=yes
5639 shouldnotlink=no
5640 avoidtemprpath=
5643 # Read the .la file
5644 func_source "$lib"
5646 # Convert "-framework foo" to "foo.ltframework"
5647 if test -n "$inherited_linker_flags"; then
5648 tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
5649 for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
5650 case " $new_inherited_linker_flags " in
5651 *" $tmp_inherited_linker_flag "*) ;;
5652 *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
5653 esac
5654 done
5656 dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
5657 if test "$linkmode,$pass" = "lib,link" ||
5658 test "$linkmode,$pass" = "prog,scan" ||
5659 { test "$linkmode" != prog && test "$linkmode" != lib; }; then
5660 test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
5661 test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
5664 if test "$pass" = conv; then
5665 # Only check for convenience libraries
5666 deplibs="$lib $deplibs"
5667 if test -z "$libdir"; then
5668 if test -z "$old_library"; then
5669 func_fatal_error "cannot find name of link library for \`$lib'"
5671 # It is a libtool convenience library, so add in its objects.
5672 convenience="$convenience $ladir/$objdir/$old_library"
5673 old_convenience="$old_convenience $ladir/$objdir/$old_library"
5674 elif test "$linkmode" != prog && test "$linkmode" != lib; then
5675 func_fatal_error "\`$lib' is not a convenience library"
5677 tmp_libs=
5678 for deplib in $dependency_libs; do
5679 deplibs="$deplib $deplibs"
5680 if $opt_duplicate_deps ; then
5681 case "$tmp_libs " in
5682 *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
5683 esac
5685 tmp_libs="$tmp_libs $deplib"
5686 done
5687 continue
5688 fi # $pass = conv
5691 # Get the name of the library we link against.
5692 linklib=
5693 for l in $old_library $library_names; do
5694 linklib="$l"
5695 done
5696 if test -z "$linklib"; then
5697 func_fatal_error "cannot find name of link library for \`$lib'"
5700 # This library was specified with -dlopen.
5701 if test "$pass" = dlopen; then
5702 if test -z "$libdir"; then
5703 func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
5705 if test -z "$dlname" ||
5706 test "$dlopen_support" != yes ||
5707 test "$build_libtool_libs" = no; then
5708 # If there is no dlname, no dlopen support or we're linking
5709 # statically, we need to preload. We also need to preload any
5710 # dependent libraries so libltdl's deplib preloader doesn't
5711 # bomb out in the load deplibs phase.
5712 dlprefiles="$dlprefiles $lib $dependency_libs"
5713 else
5714 newdlfiles="$newdlfiles $lib"
5716 continue
5717 fi # $pass = dlopen
5719 # We need an absolute path.
5720 case $ladir in
5721 [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
5723 abs_ladir=`cd "$ladir" && pwd`
5724 if test -z "$abs_ladir"; then
5725 func_warning "cannot determine absolute directory name of \`$ladir'"
5726 func_warning "passing it literally to the linker, although it might fail"
5727 abs_ladir="$ladir"
5730 esac
5731 func_basename "$lib"
5732 laname="$func_basename_result"
5734 # Find the relevant object directory and library name.
5735 if test "X$installed" = Xyes; then
5736 if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
5737 func_warning "library \`$lib' was moved."
5738 dir="$ladir"
5739 absdir="$abs_ladir"
5740 libdir="$abs_ladir"
5741 else
5742 dir="$libdir"
5743 absdir="$libdir"
5745 test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
5746 else
5747 if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
5748 dir="$ladir"
5749 absdir="$abs_ladir"
5750 # Remove this search path later
5751 notinst_path="$notinst_path $abs_ladir"
5752 else
5753 dir="$ladir/$objdir"
5754 absdir="$abs_ladir/$objdir"
5755 # Remove this search path later
5756 notinst_path="$notinst_path $abs_ladir"
5758 fi # $installed = yes
5759 func_stripname 'lib' '.la' "$laname"
5760 name=$func_stripname_result
5762 # This library was specified with -dlpreopen.
5763 if test "$pass" = dlpreopen; then
5764 if test -z "$libdir" && test "$linkmode" = prog; then
5765 func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
5767 # Prefer using a static library (so that no silly _DYNAMIC symbols
5768 # are required to link).
5769 if test -n "$old_library"; then
5770 newdlprefiles="$newdlprefiles $dir/$old_library"
5771 # Keep a list of preopened convenience libraries to check
5772 # that they are being used correctly in the link pass.
5773 test -z "$libdir" && \
5774 dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
5775 # Otherwise, use the dlname, so that lt_dlopen finds it.
5776 elif test -n "$dlname"; then
5777 newdlprefiles="$newdlprefiles $dir/$dlname"
5778 else
5779 newdlprefiles="$newdlprefiles $dir/$linklib"
5781 fi # $pass = dlpreopen
5783 if test -z "$libdir"; then
5784 # Link the convenience library
5785 if test "$linkmode" = lib; then
5786 deplibs="$dir/$old_library $deplibs"
5787 elif test "$linkmode,$pass" = "prog,link"; then
5788 compile_deplibs="$dir/$old_library $compile_deplibs"
5789 finalize_deplibs="$dir/$old_library $finalize_deplibs"
5790 else
5791 deplibs="$lib $deplibs" # used for prog,scan pass
5793 continue
5797 if test "$linkmode" = prog && test "$pass" != link; then
5798 newlib_search_path="$newlib_search_path $ladir"
5799 deplibs="$lib $deplibs"
5801 linkalldeplibs=no
5802 if test "$link_all_deplibs" != no || test -z "$library_names" ||
5803 test "$build_libtool_libs" = no; then
5804 linkalldeplibs=yes
5807 tmp_libs=
5808 for deplib in $dependency_libs; do
5809 case $deplib in
5810 -L*) func_stripname '-L' '' "$deplib"
5811 newlib_search_path="$newlib_search_path $func_stripname_result"
5813 esac
5814 # Need to link against all dependency_libs?
5815 if test "$linkalldeplibs" = yes; then
5816 deplibs="$deplib $deplibs"
5817 else
5818 # Need to hardcode shared library paths
5819 # or/and link against static libraries
5820 newdependency_libs="$deplib $newdependency_libs"
5822 if $opt_duplicate_deps ; then
5823 case "$tmp_libs " in
5824 *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
5825 esac
5827 tmp_libs="$tmp_libs $deplib"
5828 done # for deplib
5829 continue
5830 fi # $linkmode = prog...
5832 if test "$linkmode,$pass" = "prog,link"; then
5833 if test -n "$library_names" &&
5834 { { test "$prefer_static_libs" = no ||
5835 test "$prefer_static_libs,$installed" = "built,yes"; } ||
5836 test -z "$old_library"; }; then
5837 # We need to hardcode the library path
5838 if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
5839 # Make sure the rpath contains only unique directories.
5840 case "$temp_rpath:" in
5841 *"$absdir:"*) ;;
5842 *) temp_rpath="$temp_rpath$absdir:" ;;
5843 esac
5846 # Hardcode the library path.
5847 # Skip directories that are in the system default run-time
5848 # search path.
5849 case " $sys_lib_dlsearch_path " in
5850 *" $absdir "*) ;;
5852 case "$compile_rpath " in
5853 *" $absdir "*) ;;
5854 *) compile_rpath="$compile_rpath $absdir"
5855 esac
5857 esac
5858 case " $sys_lib_dlsearch_path " in
5859 *" $libdir "*) ;;
5861 case "$finalize_rpath " in
5862 *" $libdir "*) ;;
5863 *) finalize_rpath="$finalize_rpath $libdir"
5864 esac
5866 esac
5867 fi # $linkmode,$pass = prog,link...
5869 if test "$alldeplibs" = yes &&
5870 { test "$deplibs_check_method" = pass_all ||
5871 { test "$build_libtool_libs" = yes &&
5872 test -n "$library_names"; }; }; then
5873 # We only need to search for static libraries
5874 continue
5878 link_static=no # Whether the deplib will be linked statically
5879 use_static_libs=$prefer_static_libs
5880 if test "$use_static_libs" = built && test "$installed" = yes; then
5881 use_static_libs=no
5883 if test -n "$library_names" &&
5884 { test "$use_static_libs" = no || test -z "$old_library"; }; then
5885 case $host in
5886 *cygwin* | *mingw* | *cegcc*)
5887 # No point in relinking DLLs because paths are not encoded
5888 notinst_deplibs="$notinst_deplibs $lib"
5889 need_relink=no
5892 if test "$installed" = no; then
5893 notinst_deplibs="$notinst_deplibs $lib"
5894 need_relink=yes
5897 esac
5898 # This is a shared library
5900 # Warn about portability, can't link against -module's on some
5901 # systems (darwin). Don't bleat about dlopened modules though!
5902 dlopenmodule=""
5903 for dlpremoduletest in $dlprefiles; do
5904 if test "X$dlpremoduletest" = "X$lib"; then
5905 dlopenmodule="$dlpremoduletest"
5906 break
5908 done
5909 if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
5910 echo
5911 if test "$linkmode" = prog; then
5912 $ECHO "*** Warning: Linking the executable $output against the loadable module"
5913 else
5914 $ECHO "*** Warning: Linking the shared library $output against the loadable module"
5916 $ECHO "*** $linklib is not portable!"
5918 if test "$linkmode" = lib &&
5919 test "$hardcode_into_libs" = yes; then
5920 # Hardcode the library path.
5921 # Skip directories that are in the system default run-time
5922 # search path.
5923 case " $sys_lib_dlsearch_path " in
5924 *" $absdir "*) ;;
5926 case "$compile_rpath " in
5927 *" $absdir "*) ;;
5928 *) compile_rpath="$compile_rpath $absdir"
5929 esac
5931 esac
5932 case " $sys_lib_dlsearch_path " in
5933 *" $libdir "*) ;;
5935 case "$finalize_rpath " in
5936 *" $libdir "*) ;;
5937 *) finalize_rpath="$finalize_rpath $libdir"
5938 esac
5940 esac
5943 if test -n "$old_archive_from_expsyms_cmds"; then
5944 # figure out the soname
5945 set dummy $library_names
5946 shift
5947 realname="$1"
5948 shift
5949 libname=`eval "\\$ECHO \"$libname_spec\""`
5950 # use dlname if we got it. it's perfectly good, no?
5951 if test -n "$dlname"; then
5952 soname="$dlname"
5953 elif test -n "$soname_spec"; then
5954 # bleh windows
5955 case $host in
5956 *cygwin* | mingw* | *cegcc*)
5957 func_arith $current - $age
5958 major=$func_arith_result
5959 versuffix="-$major"
5961 esac
5962 eval soname=\"$soname_spec\"
5963 else
5964 soname="$realname"
5967 # Make a new name for the extract_expsyms_cmds to use
5968 soroot="$soname"
5969 func_basename "$soroot"
5970 soname="$func_basename_result"
5971 func_stripname 'lib' '.dll' "$soname"
5972 newlib=libimp-$func_stripname_result.a
5974 # If the library has no export list, then create one now
5975 if test -f "$output_objdir/$soname-def"; then :
5976 else
5977 func_verbose "extracting exported symbol list from \`$soname'"
5978 func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
5981 # Create $newlib
5982 if test -f "$output_objdir/$newlib"; then :; else
5983 func_verbose "generating import library for \`$soname'"
5984 func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
5986 # make sure the library variables are pointing to the new library
5987 dir=$output_objdir
5988 linklib=$newlib
5989 fi # test -n "$old_archive_from_expsyms_cmds"
5991 if test "$linkmode" = prog || test "$mode" != relink; then
5992 add_shlibpath=
5993 add_dir=
5994 add=
5995 lib_linked=yes
5996 case $hardcode_action in
5997 immediate | unsupported)
5998 if test "$hardcode_direct" = no; then
5999 add="$dir/$linklib"
6000 case $host in
6001 *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
6002 *-*-sysv4*uw2*) add_dir="-L$dir" ;;
6003 *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
6004 *-*-unixware7*) add_dir="-L$dir" ;;
6005 *-*-darwin* )
6006 # if the lib is a (non-dlopened) module then we can not
6007 # link against it, someone is ignoring the earlier warnings
6008 if /usr/bin/file -L $add 2> /dev/null |
6009 $GREP ": [^:]* bundle" >/dev/null ; then
6010 if test "X$dlopenmodule" != "X$lib"; then
6011 $ECHO "*** Warning: lib $linklib is a module, not a shared library"
6012 if test -z "$old_library" ; then
6013 echo
6014 echo "*** And there doesn't seem to be a static archive available"
6015 echo "*** The link will probably fail, sorry"
6016 else
6017 add="$dir/$old_library"
6019 elif test -n "$old_library"; then
6020 add="$dir/$old_library"
6023 esac
6024 elif test "$hardcode_minus_L" = no; then
6025 case $host in
6026 *-*-sunos*) add_shlibpath="$dir" ;;
6027 esac
6028 add_dir="-L$dir"
6029 add="-l$name"
6030 elif test "$hardcode_shlibpath_var" = no; then
6031 add_shlibpath="$dir"
6032 add="-l$name"
6033 else
6034 lib_linked=no
6037 relink)
6038 if test "$hardcode_direct" = yes &&
6039 test "$hardcode_direct_absolute" = no; then
6040 add="$dir/$linklib"
6041 elif test "$hardcode_minus_L" = yes; then
6042 add_dir="-L$dir"
6043 # Try looking first in the location we're being installed to.
6044 if test -n "$inst_prefix_dir"; then
6045 case $libdir in
6046 [\\/]*)
6047 add_dir="$add_dir -L$inst_prefix_dir$libdir"
6049 esac
6051 add="-l$name"
6052 elif test "$hardcode_shlibpath_var" = yes; then
6053 add_shlibpath="$dir"
6054 add="-l$name"
6055 else
6056 lib_linked=no
6059 *) lib_linked=no ;;
6060 esac
6062 if test "$lib_linked" != yes; then
6063 func_fatal_configuration "unsupported hardcode properties"
6066 if test -n "$add_shlibpath"; then
6067 case :$compile_shlibpath: in
6068 *":$add_shlibpath:"*) ;;
6069 *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
6070 esac
6072 if test "$linkmode" = prog; then
6073 test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
6074 test -n "$add" && compile_deplibs="$add $compile_deplibs"
6075 else
6076 test -n "$add_dir" && deplibs="$add_dir $deplibs"
6077 test -n "$add" && deplibs="$add $deplibs"
6078 if test "$hardcode_direct" != yes &&
6079 test "$hardcode_minus_L" != yes &&
6080 test "$hardcode_shlibpath_var" = yes; then
6081 case :$finalize_shlibpath: in
6082 *":$libdir:"*) ;;
6083 *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
6084 esac
6089 if test "$linkmode" = prog || test "$mode" = relink; then
6090 add_shlibpath=
6091 add_dir=
6092 add=
6093 # Finalize command for both is simple: just hardcode it.
6094 if test "$hardcode_direct" = yes &&
6095 test "$hardcode_direct_absolute" = no; then
6096 add="$libdir/$linklib"
6097 elif test "$hardcode_minus_L" = yes; then
6098 add_dir="-L$libdir"
6099 add="-l$name"
6100 elif test "$hardcode_shlibpath_var" = yes; then
6101 case :$finalize_shlibpath: in
6102 *":$libdir:"*) ;;
6103 *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
6104 esac
6105 add="-l$name"
6106 elif test "$hardcode_automatic" = yes; then
6107 if test -n "$inst_prefix_dir" &&
6108 test -f "$inst_prefix_dir$libdir/$linklib" ; then
6109 add="$inst_prefix_dir$libdir/$linklib"
6110 else
6111 add="$libdir/$linklib"
6113 else
6114 # We cannot seem to hardcode it, guess we'll fake it.
6115 add_dir="-L$libdir"
6116 # Try looking first in the location we're being installed to.
6117 if test -n "$inst_prefix_dir"; then
6118 case $libdir in
6119 [\\/]*)
6120 add_dir="$add_dir -L$inst_prefix_dir$libdir"
6122 esac
6124 add="-l$name"
6127 if test "$linkmode" = prog; then
6128 test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
6129 test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
6130 else
6131 test -n "$add_dir" && deplibs="$add_dir $deplibs"
6132 test -n "$add" && deplibs="$add $deplibs"
6135 elif test "$linkmode" = prog; then
6136 # Here we assume that one of hardcode_direct or hardcode_minus_L
6137 # is not unsupported. This is valid on all known static and
6138 # shared platforms.
6139 if test "$hardcode_direct" != unsupported; then
6140 test -n "$old_library" && linklib="$old_library"
6141 compile_deplibs="$dir/$linklib $compile_deplibs"
6142 finalize_deplibs="$dir/$linklib $finalize_deplibs"
6143 else
6144 compile_deplibs="-l$name -L$dir $compile_deplibs"
6145 finalize_deplibs="-l$name -L$dir $finalize_deplibs"
6147 elif test "$build_libtool_libs" = yes; then
6148 # Not a shared library
6149 if test "$deplibs_check_method" != pass_all; then
6150 # We're trying link a shared library against a static one
6151 # but the system doesn't support it.
6153 # Just print a warning and add the library to dependency_libs so
6154 # that the program can be linked against the static library.
6155 echo
6156 $ECHO "*** Warning: This system can not link to static lib archive $lib."
6157 echo "*** I have the capability to make that library automatically link in when"
6158 echo "*** you link to this library. But I can only do this if you have a"
6159 echo "*** shared version of the library, which you do not appear to have."
6160 if test "$module" = yes; then
6161 echo "*** But as you try to build a module library, libtool will still create "
6162 echo "*** a static module, that should work as long as the dlopening application"
6163 echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
6164 if test -z "$global_symbol_pipe"; then
6165 echo
6166 echo "*** However, this would only work if libtool was able to extract symbol"
6167 echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
6168 echo "*** not find such a program. So, this module is probably useless."
6169 echo "*** \`nm' from GNU binutils and a full rebuild may help."
6171 if test "$build_old_libs" = no; then
6172 build_libtool_libs=module
6173 build_old_libs=yes
6174 else
6175 build_libtool_libs=no
6178 else
6179 deplibs="$dir/$old_library $deplibs"
6180 link_static=yes
6182 fi # link shared/static library?
6184 if test "$linkmode" = lib; then
6185 if test -n "$dependency_libs" &&
6186 { test "$hardcode_into_libs" != yes ||
6187 test "$build_old_libs" = yes ||
6188 test "$link_static" = yes; }; then
6189 # Extract -R from dependency_libs
6190 temp_deplibs=
6191 for libdir in $dependency_libs; do
6192 case $libdir in
6193 -R*) func_stripname '-R' '' "$libdir"
6194 temp_xrpath=$func_stripname_result
6195 case " $xrpath " in
6196 *" $temp_xrpath "*) ;;
6197 *) xrpath="$xrpath $temp_xrpath";;
6198 esac;;
6199 *) temp_deplibs="$temp_deplibs $libdir";;
6200 esac
6201 done
6202 dependency_libs="$temp_deplibs"
6205 newlib_search_path="$newlib_search_path $absdir"
6206 # Link against this library
6207 test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
6208 # ... and its dependency_libs
6209 tmp_libs=
6210 for deplib in $dependency_libs; do
6211 newdependency_libs="$deplib $newdependency_libs"
6212 if $opt_duplicate_deps ; then
6213 case "$tmp_libs " in
6214 *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
6215 esac
6217 tmp_libs="$tmp_libs $deplib"
6218 done
6220 if test "$link_all_deplibs" != no; then
6221 # Add the search paths of all dependency libraries
6222 for deplib in $dependency_libs; do
6223 path=
6224 case $deplib in
6225 -L*) path="$deplib" ;;
6226 *.la)
6227 func_dirname "$deplib" "" "."
6228 dir="$func_dirname_result"
6229 # We need an absolute path.
6230 case $dir in
6231 [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
6233 absdir=`cd "$dir" && pwd`
6234 if test -z "$absdir"; then
6235 func_warning "cannot determine absolute directory name of \`$dir'"
6236 absdir="$dir"
6239 esac
6240 if $GREP "^installed=no" $deplib > /dev/null; then
6241 case $host in
6242 *-*-darwin*)
6243 depdepl=
6244 eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
6245 if test -n "$deplibrary_names" ; then
6246 for tmp in $deplibrary_names ; do
6247 depdepl=$tmp
6248 done
6249 if test -f "$absdir/$objdir/$depdepl" ; then
6250 depdepl="$absdir/$objdir/$depdepl"
6251 darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
6252 if test -z "$darwin_install_name"; then
6253 darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
6255 compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
6256 linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
6257 path=
6262 path="-L$absdir/$objdir"
6264 esac
6265 else
6266 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
6267 test -z "$libdir" && \
6268 func_fatal_error "\`$deplib' is not a valid libtool archive"
6269 test "$absdir" != "$libdir" && \
6270 func_warning "\`$deplib' seems to be moved"
6272 path="-L$absdir"
6275 esac
6276 case " $deplibs " in
6277 *" $path "*) ;;
6278 *) deplibs="$path $deplibs" ;;
6279 esac
6280 done
6281 fi # link_all_deplibs != no
6282 fi # linkmode = lib
6283 done # for deplib in $libs
6284 if test "$pass" = link; then
6285 if test "$linkmode" = "prog"; then
6286 compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
6287 finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
6288 else
6289 compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
6292 dependency_libs="$newdependency_libs"
6293 if test "$pass" = dlpreopen; then
6294 # Link the dlpreopened libraries before other libraries
6295 for deplib in $save_deplibs; do
6296 deplibs="$deplib $deplibs"
6297 done
6299 if test "$pass" != dlopen; then
6300 if test "$pass" != conv; then
6301 # Make sure lib_search_path contains only unique directories.
6302 lib_search_path=
6303 for dir in $newlib_search_path; do
6304 case "$lib_search_path " in
6305 *" $dir "*) ;;
6306 *) lib_search_path="$lib_search_path $dir" ;;
6307 esac
6308 done
6309 newlib_search_path=
6312 if test "$linkmode,$pass" != "prog,link"; then
6313 vars="deplibs"
6314 else
6315 vars="compile_deplibs finalize_deplibs"
6317 for var in $vars dependency_libs; do
6318 # Add libraries to $var in reverse order
6319 eval tmp_libs=\"\$$var\"
6320 new_libs=
6321 for deplib in $tmp_libs; do
6322 # FIXME: Pedantically, this is the right thing to do, so
6323 # that some nasty dependency loop isn't accidentally
6324 # broken:
6325 #new_libs="$deplib $new_libs"
6326 # Pragmatically, this seems to cause very few problems in
6327 # practice:
6328 case $deplib in
6329 -L*) new_libs="$deplib $new_libs" ;;
6330 -R*) ;;
6332 # And here is the reason: when a library appears more
6333 # than once as an explicit dependence of a library, or
6334 # is implicitly linked in more than once by the
6335 # compiler, it is considered special, and multiple
6336 # occurrences thereof are not removed. Compare this
6337 # with having the same library being listed as a
6338 # dependency of multiple other libraries: in this case,
6339 # we know (pedantically, we assume) the library does not
6340 # need to be listed more than once, so we keep only the
6341 # last copy. This is not always right, but it is rare
6342 # enough that we require users that really mean to play
6343 # such unportable linking tricks to link the library
6344 # using -Wl,-lname, so that libtool does not consider it
6345 # for duplicate removal.
6346 case " $specialdeplibs " in
6347 *" $deplib "*) new_libs="$deplib $new_libs" ;;
6349 case " $new_libs " in
6350 *" $deplib "*) ;;
6351 *) new_libs="$deplib $new_libs" ;;
6352 esac
6354 esac
6356 esac
6357 done
6358 tmp_libs=
6359 for deplib in $new_libs; do
6360 case $deplib in
6361 -L*)
6362 case " $tmp_libs " in
6363 *" $deplib "*) ;;
6364 *) tmp_libs="$tmp_libs $deplib" ;;
6365 esac
6367 *) tmp_libs="$tmp_libs $deplib" ;;
6368 esac
6369 done
6370 eval $var=\"$tmp_libs\"
6371 done # for var
6373 # Last step: remove runtime libs from dependency_libs
6374 # (they stay in deplibs)
6375 tmp_libs=
6376 for i in $dependency_libs ; do
6377 case " $predeps $postdeps $compiler_lib_search_path " in
6378 *" $i "*)
6379 i=""
6381 esac
6382 if test -n "$i" ; then
6383 tmp_libs="$tmp_libs $i"
6385 done
6386 dependency_libs=$tmp_libs
6387 done # for pass
6388 if test "$linkmode" = prog; then
6389 dlfiles="$newdlfiles"
6391 if test "$linkmode" = prog || test "$linkmode" = lib; then
6392 dlprefiles="$newdlprefiles"
6395 case $linkmode in
6396 oldlib)
6397 if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
6398 func_warning "\`-dlopen' is ignored for archives"
6401 case " $deplibs" in
6402 *\ -l* | *\ -L*)
6403 func_warning "\`-l' and \`-L' are ignored for archives" ;;
6404 esac
6406 test -n "$rpath" && \
6407 func_warning "\`-rpath' is ignored for archives"
6409 test -n "$xrpath" && \
6410 func_warning "\`-R' is ignored for archives"
6412 test -n "$vinfo" && \
6413 func_warning "\`-version-info/-version-number' is ignored for archives"
6415 test -n "$release" && \
6416 func_warning "\`-release' is ignored for archives"
6418 test -n "$export_symbols$export_symbols_regex" && \
6419 func_warning "\`-export-symbols' is ignored for archives"
6421 # Now set the variables for building old libraries.
6422 build_libtool_libs=no
6423 oldlibs="$output"
6424 objs="$objs$old_deplibs"
6427 lib)
6428 # Make sure we only generate libraries of the form `libNAME.la'.
6429 case $outputname in
6430 lib*)
6431 func_stripname 'lib' '.la' "$outputname"
6432 name=$func_stripname_result
6433 eval shared_ext=\"$shrext_cmds\"
6434 eval libname=\"$libname_spec\"
6437 test "$module" = no && \
6438 func_fatal_help "libtool library \`$output' must begin with \`lib'"
6440 if test "$need_lib_prefix" != no; then
6441 # Add the "lib" prefix for modules if required
6442 func_stripname '' '.la' "$outputname"
6443 name=$func_stripname_result
6444 eval shared_ext=\"$shrext_cmds\"
6445 eval libname=\"$libname_spec\"
6446 else
6447 func_stripname '' '.la' "$outputname"
6448 libname=$func_stripname_result
6451 esac
6453 if test -n "$objs"; then
6454 if test "$deplibs_check_method" != pass_all; then
6455 func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
6456 else
6457 echo
6458 $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
6459 $ECHO "*** objects $objs is not portable!"
6460 libobjs="$libobjs $objs"
6464 test "$dlself" != no && \
6465 func_warning "\`-dlopen self' is ignored for libtool libraries"
6467 set dummy $rpath
6468 shift
6469 test "$#" -gt 1 && \
6470 func_warning "ignoring multiple \`-rpath's for a libtool library"
6472 install_libdir="$1"
6474 oldlibs=
6475 if test -z "$rpath"; then
6476 if test "$build_libtool_libs" = yes; then
6477 # Building a libtool convenience library.
6478 # Some compilers have problems with a `.al' extension so
6479 # convenience libraries should have the same extension an
6480 # archive normally would.
6481 oldlibs="$output_objdir/$libname.$libext $oldlibs"
6482 build_libtool_libs=convenience
6483 build_old_libs=yes
6486 test -n "$vinfo" && \
6487 func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
6489 test -n "$release" && \
6490 func_warning "\`-release' is ignored for convenience libraries"
6491 else
6493 # Parse the version information argument.
6494 save_ifs="$IFS"; IFS=':'
6495 set dummy $vinfo 0 0 0
6496 shift
6497 IFS="$save_ifs"
6499 test -n "$7" && \
6500 func_fatal_help "too many parameters to \`-version-info'"
6502 # convert absolute version numbers to libtool ages
6503 # this retains compatibility with .la files and attempts
6504 # to make the code below a bit more comprehensible
6506 case $vinfo_number in
6507 yes)
6508 number_major="$1"
6509 number_minor="$2"
6510 number_revision="$3"
6512 # There are really only two kinds -- those that
6513 # use the current revision as the major version
6514 # and those that subtract age and use age as
6515 # a minor version. But, then there is irix
6516 # which has an extra 1 added just for fun
6518 case $version_type in
6519 darwin|linux|osf|windows|none)
6520 func_arith $number_major + $number_minor
6521 current=$func_arith_result
6522 age="$number_minor"
6523 revision="$number_revision"
6525 freebsd-aout|freebsd-elf|qnx|sunos)
6526 current="$number_major"
6527 revision="$number_minor"
6528 age="0"
6530 irix|nonstopux)
6531 func_arith $number_major + $number_minor
6532 current=$func_arith_result
6533 age="$number_minor"
6534 revision="$number_minor"
6535 lt_irix_increment=no
6537 esac
6540 current="$1"
6541 revision="$2"
6542 age="$3"
6544 esac
6546 # Check that each of the things are valid numbers.
6547 case $current in
6548 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]) ;;
6550 func_error "CURRENT \`$current' must be a nonnegative integer"
6551 func_fatal_error "\`$vinfo' is not valid version information"
6553 esac
6555 case $revision in
6556 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]) ;;
6558 func_error "REVISION \`$revision' must be a nonnegative integer"
6559 func_fatal_error "\`$vinfo' is not valid version information"
6561 esac
6563 case $age in
6564 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]) ;;
6566 func_error "AGE \`$age' must be a nonnegative integer"
6567 func_fatal_error "\`$vinfo' is not valid version information"
6569 esac
6571 if test "$age" -gt "$current"; then
6572 func_error "AGE \`$age' is greater than the current interface number \`$current'"
6573 func_fatal_error "\`$vinfo' is not valid version information"
6576 # Calculate the version variables.
6577 major=
6578 versuffix=
6579 verstring=
6580 case $version_type in
6581 none) ;;
6583 darwin)
6584 # Like Linux, but with the current version available in
6585 # verstring for coding it into the library header
6586 func_arith $current - $age
6587 major=.$func_arith_result
6588 versuffix="$major.$age.$revision"
6589 # Darwin ld doesn't like 0 for these options...
6590 func_arith $current + 1
6591 minor_current=$func_arith_result
6592 xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
6593 verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
6596 freebsd-aout)
6597 major=".$current"
6598 versuffix=".$current.$revision";
6601 freebsd-elf)
6602 major=".$current"
6603 versuffix=".$current"
6606 irix | nonstopux)
6607 if test "X$lt_irix_increment" = "Xno"; then
6608 func_arith $current - $age
6609 else
6610 func_arith $current - $age + 1
6612 major=$func_arith_result
6614 case $version_type in
6615 nonstopux) verstring_prefix=nonstopux ;;
6616 *) verstring_prefix=sgi ;;
6617 esac
6618 verstring="$verstring_prefix$major.$revision"
6620 # Add in all the interfaces that we are compatible with.
6621 loop=$revision
6622 while test "$loop" -ne 0; do
6623 func_arith $revision - $loop
6624 iface=$func_arith_result
6625 func_arith $loop - 1
6626 loop=$func_arith_result
6627 verstring="$verstring_prefix$major.$iface:$verstring"
6628 done
6630 # Before this point, $major must not contain `.'.
6631 major=.$major
6632 versuffix="$major.$revision"
6635 linux)
6636 func_arith $current - $age
6637 major=.$func_arith_result
6638 versuffix="$major.$age.$revision"
6641 osf)
6642 func_arith $current - $age
6643 major=.$func_arith_result
6644 versuffix=".$current.$age.$revision"
6645 verstring="$current.$age.$revision"
6647 # Add in all the interfaces that we are compatible with.
6648 loop=$age
6649 while test "$loop" -ne 0; do
6650 func_arith $current - $loop
6651 iface=$func_arith_result
6652 func_arith $loop - 1
6653 loop=$func_arith_result
6654 verstring="$verstring:${iface}.0"
6655 done
6657 # Make executables depend on our current version.
6658 verstring="$verstring:${current}.0"
6661 qnx)
6662 major=".$current"
6663 versuffix=".$current"
6666 sunos)
6667 major=".$current"
6668 versuffix=".$current.$revision"
6671 windows)
6672 # Use '-' rather than '.', since we only want one
6673 # extension on DOS 8.3 filesystems.
6674 func_arith $current - $age
6675 major=$func_arith_result
6676 versuffix="-$major"
6680 func_fatal_configuration "unknown library version type \`$version_type'"
6682 esac
6684 # Clear the version info if we defaulted, and they specified a release.
6685 if test -z "$vinfo" && test -n "$release"; then
6686 major=
6687 case $version_type in
6688 darwin)
6689 # we can't check for "0.0" in archive_cmds due to quoting
6690 # problems, so we reset it completely
6691 verstring=
6694 verstring="0.0"
6696 esac
6697 if test "$need_version" = no; then
6698 versuffix=
6699 else
6700 versuffix=".0.0"
6704 # Remove version info from name if versioning should be avoided
6705 if test "$avoid_version" = yes && test "$need_version" = no; then
6706 major=
6707 versuffix=
6708 verstring=""
6711 # Check to see if the archive will have undefined symbols.
6712 if test "$allow_undefined" = yes; then
6713 if test "$allow_undefined_flag" = unsupported; then
6714 func_warning "undefined symbols not allowed in $host shared libraries"
6715 build_libtool_libs=no
6716 build_old_libs=yes
6718 else
6719 # Don't allow undefined symbols.
6720 allow_undefined_flag="$no_undefined_flag"
6725 func_generate_dlsyms "$libname" "$libname" "yes"
6726 libobjs="$libobjs $symfileobj"
6727 test "X$libobjs" = "X " && libobjs=
6729 if test "$mode" != relink; then
6730 # Remove our outputs, but don't remove object files since they
6731 # may have been created when compiling PIC objects.
6732 removelist=
6733 tempremovelist=`$ECHO "$output_objdir/*"`
6734 for p in $tempremovelist; do
6735 case $p in
6736 *.$objext | *.gcno)
6738 $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
6739 if test "X$precious_files_regex" != "X"; then
6740 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
6741 then
6742 continue
6745 removelist="$removelist $p"
6747 *) ;;
6748 esac
6749 done
6750 test -n "$removelist" && \
6751 func_show_eval "${RM}r \$removelist"
6754 # Now set the variables for building old libraries.
6755 if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
6756 oldlibs="$oldlibs $output_objdir/$libname.$libext"
6758 # Transform .lo files to .o files.
6759 oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
6762 # Eliminate all temporary directories.
6763 #for path in $notinst_path; do
6764 # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
6765 # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
6766 # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
6767 #done
6769 if test -n "$xrpath"; then
6770 # If the user specified any rpath flags, then add them.
6771 temp_xrpath=
6772 for libdir in $xrpath; do
6773 temp_xrpath="$temp_xrpath -R$libdir"
6774 case "$finalize_rpath " in
6775 *" $libdir "*) ;;
6776 *) finalize_rpath="$finalize_rpath $libdir" ;;
6777 esac
6778 done
6779 if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
6780 dependency_libs="$temp_xrpath $dependency_libs"
6784 # Make sure dlfiles contains only unique files that won't be dlpreopened
6785 old_dlfiles="$dlfiles"
6786 dlfiles=
6787 for lib in $old_dlfiles; do
6788 case " $dlprefiles $dlfiles " in
6789 *" $lib "*) ;;
6790 *) dlfiles="$dlfiles $lib" ;;
6791 esac
6792 done
6794 # Make sure dlprefiles contains only unique files
6795 old_dlprefiles="$dlprefiles"
6796 dlprefiles=
6797 for lib in $old_dlprefiles; do
6798 case "$dlprefiles " in
6799 *" $lib "*) ;;
6800 *) dlprefiles="$dlprefiles $lib" ;;
6801 esac
6802 done
6804 if test "$build_libtool_libs" = yes; then
6805 if test -n "$rpath"; then
6806 case $host in
6807 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
6808 # these systems don't actually have a c library (as such)!
6810 *-*-rhapsody* | *-*-darwin1.[012])
6811 # Rhapsody C library is in the System framework
6812 deplibs="$deplibs System.ltframework"
6814 *-*-netbsd*)
6815 # Don't link with libc until the a.out ld.so is fixed.
6817 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
6818 # Do not include libc due to us having libc/libc_r.
6820 *-*-sco3.2v5* | *-*-sco5v6*)
6821 # Causes problems with __ctype
6823 *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
6824 # Compiler inserts libc in the correct place for threads to work
6827 # Add libc to deplibs on all other systems if necessary.
6828 if test "$build_libtool_need_lc" = "yes"; then
6829 deplibs="$deplibs -lc"
6832 esac
6835 # Transform deplibs into only deplibs that can be linked in shared.
6836 name_save=$name
6837 libname_save=$libname
6838 release_save=$release
6839 versuffix_save=$versuffix
6840 major_save=$major
6841 # I'm not sure if I'm treating the release correctly. I think
6842 # release should show up in the -l (ie -lgmp5) so we don't want to
6843 # add it in twice. Is that correct?
6844 release=""
6845 versuffix=""
6846 major=""
6847 newdeplibs=
6848 droppeddeps=no
6849 case $deplibs_check_method in
6850 pass_all)
6851 # Don't check for shared/static. Everything works.
6852 # This might be a little naive. We might want to check
6853 # whether the library exists or not. But this is on
6854 # osf3 & osf4 and I'm not really sure... Just
6855 # implementing what was already the behavior.
6856 newdeplibs=$deplibs
6858 test_compile)
6859 # This code stresses the "libraries are programs" paradigm to its
6860 # limits. Maybe even breaks it. We compile a program, linking it
6861 # against the deplibs as a proxy for the library. Then we can check
6862 # whether they linked in statically or dynamically with ldd.
6863 $opt_dry_run || $RM conftest.c
6864 cat > conftest.c <<EOF
6865 int main() { return 0; }
6867 $opt_dry_run || $RM conftest
6868 if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
6869 ldd_output=`ldd conftest`
6870 for i in $deplibs; do
6871 case $i in
6872 -l*)
6873 func_stripname -l '' "$i"
6874 name=$func_stripname_result
6875 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6876 case " $predeps $postdeps " in
6877 *" $i "*)
6878 newdeplibs="$newdeplibs $i"
6879 i=""
6881 esac
6883 if test -n "$i" ; then
6884 libname=`eval "\\$ECHO \"$libname_spec\""`
6885 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
6886 set dummy $deplib_matches; shift
6887 deplib_match=$1
6888 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
6889 newdeplibs="$newdeplibs $i"
6890 else
6891 droppeddeps=yes
6892 echo
6893 $ECHO "*** Warning: dynamic linker does not accept needed library $i."
6894 echo "*** I have the capability to make that library automatically link in when"
6895 echo "*** you link to this library. But I can only do this if you have a"
6896 echo "*** shared version of the library, which I believe you do not have"
6897 echo "*** because a test_compile did reveal that the linker did not use it for"
6898 echo "*** its dynamic dependency list that programs get resolved with at runtime."
6903 newdeplibs="$newdeplibs $i"
6905 esac
6906 done
6907 else
6908 # Error occurred in the first compile. Let's try to salvage
6909 # the situation: Compile a separate program for each library.
6910 for i in $deplibs; do
6911 case $i in
6912 -l*)
6913 func_stripname -l '' "$i"
6914 name=$func_stripname_result
6915 $opt_dry_run || $RM conftest
6916 if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
6917 ldd_output=`ldd conftest`
6918 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6919 case " $predeps $postdeps " in
6920 *" $i "*)
6921 newdeplibs="$newdeplibs $i"
6922 i=""
6924 esac
6926 if test -n "$i" ; then
6927 libname=`eval "\\$ECHO \"$libname_spec\""`
6928 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
6929 set dummy $deplib_matches; shift
6930 deplib_match=$1
6931 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
6932 newdeplibs="$newdeplibs $i"
6933 else
6934 droppeddeps=yes
6935 echo
6936 $ECHO "*** Warning: dynamic linker does not accept needed library $i."
6937 echo "*** I have the capability to make that library automatically link in when"
6938 echo "*** you link to this library. But I can only do this if you have a"
6939 echo "*** shared version of the library, which you do not appear to have"
6940 echo "*** because a test_compile did reveal that the linker did not use this one"
6941 echo "*** as a dynamic dependency that programs can get resolved with at runtime."
6944 else
6945 droppeddeps=yes
6946 echo
6947 $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
6948 echo "*** make it link in! You will probably need to install it or some"
6949 echo "*** library that it depends on before this library will be fully"
6950 echo "*** functional. Installing it before continuing would be even better."
6954 newdeplibs="$newdeplibs $i"
6956 esac
6957 done
6960 file_magic*)
6961 set dummy $deplibs_check_method; shift
6962 file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
6963 for a_deplib in $deplibs; do
6964 case $a_deplib in
6965 -l*)
6966 func_stripname -l '' "$a_deplib"
6967 name=$func_stripname_result
6968 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6969 case " $predeps $postdeps " in
6970 *" $a_deplib "*)
6971 newdeplibs="$newdeplibs $a_deplib"
6972 a_deplib=""
6974 esac
6976 if test -n "$a_deplib" ; then
6977 libname=`eval "\\$ECHO \"$libname_spec\""`
6978 for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
6979 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
6980 for potent_lib in $potential_libs; do
6981 # Follow soft links.
6982 if ls -lLd "$potent_lib" 2>/dev/null |
6983 $GREP " -> " >/dev/null; then
6984 continue
6986 # The statement above tries to avoid entering an
6987 # endless loop below, in case of cyclic links.
6988 # We might still enter an endless loop, since a link
6989 # loop can be closed while we follow links,
6990 # but so what?
6991 potlib="$potent_lib"
6992 while test -h "$potlib" 2>/dev/null; do
6993 potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
6994 case $potliblink in
6995 [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
6996 *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
6997 esac
6998 done
6999 if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
7000 $SED -e 10q |
7001 $EGREP "$file_magic_regex" > /dev/null; then
7002 newdeplibs="$newdeplibs $a_deplib"
7003 a_deplib=""
7004 break 2
7006 done
7007 done
7009 if test -n "$a_deplib" ; then
7010 droppeddeps=yes
7011 echo
7012 $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
7013 echo "*** I have the capability to make that library automatically link in when"
7014 echo "*** you link to this library. But I can only do this if you have a"
7015 echo "*** shared version of the library, which you do not appear to have"
7016 echo "*** because I did check the linker path looking for a file starting"
7017 if test -z "$potlib" ; then
7018 $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
7019 else
7020 $ECHO "*** with $libname and none of the candidates passed a file format test"
7021 $ECHO "*** using a file magic. Last file checked: $potlib"
7026 # Add a -L argument.
7027 newdeplibs="$newdeplibs $a_deplib"
7029 esac
7030 done # Gone through all deplibs.
7032 match_pattern*)
7033 set dummy $deplibs_check_method; shift
7034 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7035 for a_deplib in $deplibs; do
7036 case $a_deplib in
7037 -l*)
7038 func_stripname -l '' "$a_deplib"
7039 name=$func_stripname_result
7040 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7041 case " $predeps $postdeps " in
7042 *" $a_deplib "*)
7043 newdeplibs="$newdeplibs $a_deplib"
7044 a_deplib=""
7046 esac
7048 if test -n "$a_deplib" ; then
7049 libname=`eval "\\$ECHO \"$libname_spec\""`
7050 for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7051 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
7052 for potent_lib in $potential_libs; do
7053 potlib="$potent_lib" # see symlink-check above in file_magic test
7054 if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
7055 $EGREP "$match_pattern_regex" > /dev/null; then
7056 newdeplibs="$newdeplibs $a_deplib"
7057 a_deplib=""
7058 break 2
7060 done
7061 done
7063 if test -n "$a_deplib" ; then
7064 droppeddeps=yes
7065 echo
7066 $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
7067 echo "*** I have the capability to make that library automatically link in when"
7068 echo "*** you link to this library. But I can only do this if you have a"
7069 echo "*** shared version of the library, which you do not appear to have"
7070 echo "*** because I did check the linker path looking for a file starting"
7071 if test -z "$potlib" ; then
7072 $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
7073 else
7074 $ECHO "*** with $libname and none of the candidates passed a file format test"
7075 $ECHO "*** using a regex pattern. Last file checked: $potlib"
7080 # Add a -L argument.
7081 newdeplibs="$newdeplibs $a_deplib"
7083 esac
7084 done # Gone through all deplibs.
7086 none | unknown | *)
7087 newdeplibs=""
7088 tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
7089 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7090 for i in $predeps $postdeps ; do
7091 # can't use Xsed below, because $i might contain '/'
7092 tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
7093 done
7095 case $tmp_deplibs in
7096 *[!\ \ ]*)
7097 echo
7098 if test "X$deplibs_check_method" = "Xnone"; then
7099 echo "*** Warning: inter-library dependencies are not supported in this platform."
7100 else
7101 echo "*** Warning: inter-library dependencies are not known to be supported."
7103 echo "*** All declared inter-library dependencies are being dropped."
7104 droppeddeps=yes
7106 esac
7108 esac
7109 versuffix=$versuffix_save
7110 major=$major_save
7111 release=$release_save
7112 libname=$libname_save
7113 name=$name_save
7115 case $host in
7116 *-*-rhapsody* | *-*-darwin1.[012])
7117 # On Rhapsody replace the C library with the System framework
7118 newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
7120 esac
7122 if test "$droppeddeps" = yes; then
7123 if test "$module" = yes; then
7124 echo
7125 echo "*** Warning: libtool could not satisfy all declared inter-library"
7126 $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
7127 echo "*** a static module, that should work as long as the dlopening"
7128 echo "*** application is linked with the -dlopen flag."
7129 if test -z "$global_symbol_pipe"; then
7130 echo
7131 echo "*** However, this would only work if libtool was able to extract symbol"
7132 echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
7133 echo "*** not find such a program. So, this module is probably useless."
7134 echo "*** \`nm' from GNU binutils and a full rebuild may help."
7136 if test "$build_old_libs" = no; then
7137 oldlibs="$output_objdir/$libname.$libext"
7138 build_libtool_libs=module
7139 build_old_libs=yes
7140 else
7141 build_libtool_libs=no
7143 else
7144 echo "*** The inter-library dependencies that have been dropped here will be"
7145 echo "*** automatically added whenever a program is linked with this library"
7146 echo "*** or is declared to -dlopen it."
7148 if test "$allow_undefined" = no; then
7149 echo
7150 echo "*** Since this library must not contain undefined symbols,"
7151 echo "*** because either the platform does not support them or"
7152 echo "*** it was explicitly requested with -no-undefined,"
7153 echo "*** libtool will only create a static version of it."
7154 if test "$build_old_libs" = no; then
7155 oldlibs="$output_objdir/$libname.$libext"
7156 build_libtool_libs=module
7157 build_old_libs=yes
7158 else
7159 build_libtool_libs=no
7164 # Done checking deplibs!
7165 deplibs=$newdeplibs
7167 # Time to change all our "foo.ltframework" stuff back to "-framework foo"
7168 case $host in
7169 *-*-darwin*)
7170 newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7171 new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7172 deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7174 esac
7176 # move library search paths that coincide with paths to not yet
7177 # installed libraries to the beginning of the library search list
7178 new_libs=
7179 for path in $notinst_path; do
7180 case " $new_libs " in
7181 *" -L$path/$objdir "*) ;;
7183 case " $deplibs " in
7184 *" -L$path/$objdir "*)
7185 new_libs="$new_libs -L$path/$objdir" ;;
7186 esac
7188 esac
7189 done
7190 for deplib in $deplibs; do
7191 case $deplib in
7192 -L*)
7193 case " $new_libs " in
7194 *" $deplib "*) ;;
7195 *) new_libs="$new_libs $deplib" ;;
7196 esac
7198 *) new_libs="$new_libs $deplib" ;;
7199 esac
7200 done
7201 deplibs="$new_libs"
7203 # All the library-specific variables (install_libdir is set above).
7204 library_names=
7205 old_library=
7206 dlname=
7208 # Test again, we may have decided not to build it any more
7209 if test "$build_libtool_libs" = yes; then
7210 if test "$hardcode_into_libs" = yes; then
7211 # Hardcode the library paths
7212 hardcode_libdirs=
7213 dep_rpath=
7214 rpath="$finalize_rpath"
7215 test "$mode" != relink && rpath="$compile_rpath$rpath"
7216 for libdir in $rpath; do
7217 if test -n "$hardcode_libdir_flag_spec"; then
7218 if test -n "$hardcode_libdir_separator"; then
7219 if test -z "$hardcode_libdirs"; then
7220 hardcode_libdirs="$libdir"
7221 else
7222 # Just accumulate the unique libdirs.
7223 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
7224 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
7227 hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
7229 esac
7231 else
7232 eval flag=\"$hardcode_libdir_flag_spec\"
7233 dep_rpath="$dep_rpath $flag"
7235 elif test -n "$runpath_var"; then
7236 case "$perm_rpath " in
7237 *" $libdir "*) ;;
7238 *) perm_rpath="$perm_rpath $libdir" ;;
7239 esac
7241 done
7242 # Substitute the hardcoded libdirs into the rpath.
7243 if test -n "$hardcode_libdir_separator" &&
7244 test -n "$hardcode_libdirs"; then
7245 libdir="$hardcode_libdirs"
7246 if test -n "$hardcode_libdir_flag_spec_ld"; then
7247 eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
7248 else
7249 eval dep_rpath=\"$hardcode_libdir_flag_spec\"
7252 if test -n "$runpath_var" && test -n "$perm_rpath"; then
7253 # We should set the runpath_var.
7254 rpath=
7255 for dir in $perm_rpath; do
7256 rpath="$rpath$dir:"
7257 done
7258 eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
7260 test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
7263 shlibpath="$finalize_shlibpath"
7264 test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
7265 if test -n "$shlibpath"; then
7266 eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
7269 # Get the real and link names of the library.
7270 eval shared_ext=\"$shrext_cmds\"
7271 eval library_names=\"$library_names_spec\"
7272 set dummy $library_names
7273 shift
7274 realname="$1"
7275 shift
7277 if test -n "$soname_spec"; then
7278 eval soname=\"$soname_spec\"
7279 else
7280 soname="$realname"
7282 if test -z "$dlname"; then
7283 dlname=$soname
7286 lib="$output_objdir/$realname"
7287 linknames=
7288 for link
7290 linknames="$linknames $link"
7291 done
7293 # Use standard objects if they are pic
7294 test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
7295 test "X$libobjs" = "X " && libobjs=
7297 delfiles=
7298 if test -n "$export_symbols" && test -n "$include_expsyms"; then
7299 $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
7300 export_symbols="$output_objdir/$libname.uexp"
7301 delfiles="$delfiles $export_symbols"
7304 orig_export_symbols=
7305 case $host_os in
7306 cygwin* | mingw* | cegcc*)
7307 if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
7308 # exporting using user supplied symfile
7309 if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
7310 # and it's NOT already a .def file. Must figure out
7311 # which of the given symbols are data symbols and tag
7312 # them as such. So, trigger use of export_symbols_cmds.
7313 # export_symbols gets reassigned inside the "prepare
7314 # the list of exported symbols" if statement, so the
7315 # include_expsyms logic still works.
7316 orig_export_symbols="$export_symbols"
7317 export_symbols=
7318 always_export_symbols=yes
7322 esac
7324 # Prepare the list of exported symbols
7325 if test -z "$export_symbols"; then
7326 if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
7327 func_verbose "generating symbol list for \`$libname.la'"
7328 export_symbols="$output_objdir/$libname.exp"
7329 $opt_dry_run || $RM $export_symbols
7330 cmds=$export_symbols_cmds
7331 save_ifs="$IFS"; IFS='~'
7332 for cmd in $cmds; do
7333 IFS="$save_ifs"
7334 eval cmd=\"$cmd\"
7335 func_len " $cmd"
7336 len=$func_len_result
7337 if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
7338 func_show_eval "$cmd" 'exit $?'
7339 skipped_export=false
7340 else
7341 # The command line is too long to execute in one step.
7342 func_verbose "using reloadable object file for export list..."
7343 skipped_export=:
7344 # Break out early, otherwise skipped_export may be
7345 # set to false by a later but shorter cmd.
7346 break
7348 done
7349 IFS="$save_ifs"
7350 if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
7351 func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
7352 func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
7357 if test -n "$export_symbols" && test -n "$include_expsyms"; then
7358 tmp_export_symbols="$export_symbols"
7359 test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
7360 $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
7363 if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
7364 # The given exports_symbols file has to be filtered, so filter it.
7365 func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
7366 # FIXME: $output_objdir/$libname.filter potentially contains lots of
7367 # 's' commands which not all seds can handle. GNU sed should be fine
7368 # though. Also, the filter scales superlinearly with the number of
7369 # global variables. join(1) would be nice here, but unfortunately
7370 # isn't a blessed tool.
7371 $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
7372 delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
7373 export_symbols=$output_objdir/$libname.def
7374 $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
7377 tmp_deplibs=
7378 for test_deplib in $deplibs; do
7379 case " $convenience " in
7380 *" $test_deplib "*) ;;
7382 tmp_deplibs="$tmp_deplibs $test_deplib"
7384 esac
7385 done
7386 deplibs="$tmp_deplibs"
7388 if test -n "$convenience"; then
7389 if test -n "$whole_archive_flag_spec" &&
7390 test "$compiler_needs_object" = yes &&
7391 test -z "$libobjs"; then
7392 # extract the archives, so we have objects to list.
7393 # TODO: could optimize this to just extract one archive.
7394 whole_archive_flag_spec=
7396 if test -n "$whole_archive_flag_spec"; then
7397 save_libobjs=$libobjs
7398 eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
7399 test "X$libobjs" = "X " && libobjs=
7400 else
7401 gentop="$output_objdir/${outputname}x"
7402 generated="$generated $gentop"
7404 func_extract_archives $gentop $convenience
7405 libobjs="$libobjs $func_extract_archives_result"
7406 test "X$libobjs" = "X " && libobjs=
7410 if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
7411 eval flag=\"$thread_safe_flag_spec\"
7412 linker_flags="$linker_flags $flag"
7415 # Make a backup of the uninstalled library when relinking
7416 if test "$mode" = relink; then
7417 $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
7420 # Do each of the archive commands.
7421 if test "$module" = yes && test -n "$module_cmds" ; then
7422 if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
7423 eval test_cmds=\"$module_expsym_cmds\"
7424 cmds=$module_expsym_cmds
7425 else
7426 eval test_cmds=\"$module_cmds\"
7427 cmds=$module_cmds
7429 else
7430 if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
7431 eval test_cmds=\"$archive_expsym_cmds\"
7432 cmds=$archive_expsym_cmds
7433 else
7434 eval test_cmds=\"$archive_cmds\"
7435 cmds=$archive_cmds
7439 if test "X$skipped_export" != "X:" &&
7440 func_len " $test_cmds" &&
7441 len=$func_len_result &&
7442 test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
7444 else
7445 # The command line is too long to link in one step, link piecewise
7446 # or, if using GNU ld and skipped_export is not :, use a linker
7447 # script.
7449 # Save the value of $output and $libobjs because we want to
7450 # use them later. If we have whole_archive_flag_spec, we
7451 # want to use save_libobjs as it was before
7452 # whole_archive_flag_spec was expanded, because we can't
7453 # assume the linker understands whole_archive_flag_spec.
7454 # This may have to be revisited, in case too many
7455 # convenience libraries get linked in and end up exceeding
7456 # the spec.
7457 if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
7458 save_libobjs=$libobjs
7460 save_output=$output
7461 func_basename "$output"
7462 output_la=$func_basename_result
7464 # Clear the reloadable object creation command queue and
7465 # initialize k to one.
7466 test_cmds=
7467 concat_cmds=
7468 objlist=
7469 last_robj=
7472 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
7473 output=${output_objdir}/${output_la}.lnkscript
7474 func_verbose "creating GNU ld script: $output"
7475 echo 'INPUT (' > $output
7476 for obj in $save_libobjs
7478 $ECHO "$obj" >> $output
7479 done
7480 echo ')' >> $output
7481 delfiles="$delfiles $output"
7482 elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
7483 output=${output_objdir}/${output_la}.lnk
7484 func_verbose "creating linker input file list: $output"
7485 : > $output
7486 set x $save_libobjs
7487 shift
7488 firstobj=
7489 if test "$compiler_needs_object" = yes; then
7490 firstobj="$1 "
7491 shift
7493 for obj
7495 $ECHO "$obj" >> $output
7496 done
7497 delfiles="$delfiles $output"
7498 output=$firstobj\"$file_list_spec$output\"
7499 else
7500 if test -n "$save_libobjs"; then
7501 func_verbose "creating reloadable object files..."
7502 output=$output_objdir/$output_la-${k}.$objext
7503 eval test_cmds=\"$reload_cmds\"
7504 func_len " $test_cmds"
7505 len0=$func_len_result
7506 len=$len0
7508 # Loop over the list of objects to be linked.
7509 for obj in $save_libobjs
7511 func_len " $obj"
7512 func_arith $len + $func_len_result
7513 len=$func_arith_result
7514 if test "X$objlist" = X ||
7515 test "$len" -lt "$max_cmd_len"; then
7516 func_append objlist " $obj"
7517 else
7518 # The command $test_cmds is almost too long, add a
7519 # command to the queue.
7520 if test "$k" -eq 1 ; then
7521 # The first file doesn't have a previous command to add.
7522 reload_objs=$objlist
7523 eval concat_cmds=\"$reload_cmds\"
7524 else
7525 # All subsequent reloadable object files will link in
7526 # the last one created.
7527 reload_objs="$objlist $last_robj"
7528 eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
7530 last_robj=$output_objdir/$output_la-${k}.$objext
7531 func_arith $k + 1
7532 k=$func_arith_result
7533 output=$output_objdir/$output_la-${k}.$objext
7534 objlist=" $obj"
7535 func_len " $last_robj"
7536 func_arith $len0 + $func_len_result
7537 len=$func_arith_result
7539 done
7540 # Handle the remaining objects by creating one last
7541 # reloadable object file. All subsequent reloadable object
7542 # files will link in the last one created.
7543 test -z "$concat_cmds" || concat_cmds=$concat_cmds~
7544 reload_objs="$objlist $last_robj"
7545 eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
7546 if test -n "$last_robj"; then
7547 eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
7549 delfiles="$delfiles $output"
7551 else
7552 output=
7555 if ${skipped_export-false}; then
7556 func_verbose "generating symbol list for \`$libname.la'"
7557 export_symbols="$output_objdir/$libname.exp"
7558 $opt_dry_run || $RM $export_symbols
7559 libobjs=$output
7560 # Append the command to create the export file.
7561 test -z "$concat_cmds" || concat_cmds=$concat_cmds~
7562 eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
7563 if test -n "$last_robj"; then
7564 eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
7568 test -n "$save_libobjs" &&
7569 func_verbose "creating a temporary reloadable object file: $output"
7571 # Loop through the commands generated above and execute them.
7572 save_ifs="$IFS"; IFS='~'
7573 for cmd in $concat_cmds; do
7574 IFS="$save_ifs"
7575 $opt_silent || {
7576 func_quote_for_expand "$cmd"
7577 eval "func_echo $func_quote_for_expand_result"
7579 $opt_dry_run || eval "$cmd" || {
7580 lt_exit=$?
7582 # Restore the uninstalled library and exit
7583 if test "$mode" = relink; then
7584 ( cd "$output_objdir" && \
7585 $RM "${realname}T" && \
7586 $MV "${realname}U" "$realname" )
7589 exit $lt_exit
7591 done
7592 IFS="$save_ifs"
7594 if test -n "$export_symbols_regex" && ${skipped_export-false}; then
7595 func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
7596 func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
7600 if ${skipped_export-false}; then
7601 if test -n "$export_symbols" && test -n "$include_expsyms"; then
7602 tmp_export_symbols="$export_symbols"
7603 test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
7604 $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
7607 if test -n "$orig_export_symbols"; then
7608 # The given exports_symbols file has to be filtered, so filter it.
7609 func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
7610 # FIXME: $output_objdir/$libname.filter potentially contains lots of
7611 # 's' commands which not all seds can handle. GNU sed should be fine
7612 # though. Also, the filter scales superlinearly with the number of
7613 # global variables. join(1) would be nice here, but unfortunately
7614 # isn't a blessed tool.
7615 $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
7616 delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
7617 export_symbols=$output_objdir/$libname.def
7618 $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
7622 libobjs=$output
7623 # Restore the value of output.
7624 output=$save_output
7626 if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
7627 eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
7628 test "X$libobjs" = "X " && libobjs=
7630 # Expand the library linking commands again to reset the
7631 # value of $libobjs for piecewise linking.
7633 # Do each of the archive commands.
7634 if test "$module" = yes && test -n "$module_cmds" ; then
7635 if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
7636 cmds=$module_expsym_cmds
7637 else
7638 cmds=$module_cmds
7640 else
7641 if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
7642 cmds=$archive_expsym_cmds
7643 else
7644 cmds=$archive_cmds
7649 if test -n "$delfiles"; then
7650 # Append the command to remove temporary files to $cmds.
7651 eval cmds=\"\$cmds~\$RM $delfiles\"
7654 # Add any objects from preloaded convenience libraries
7655 if test -n "$dlprefiles"; then
7656 gentop="$output_objdir/${outputname}x"
7657 generated="$generated $gentop"
7659 func_extract_archives $gentop $dlprefiles
7660 libobjs="$libobjs $func_extract_archives_result"
7661 test "X$libobjs" = "X " && libobjs=
7664 save_ifs="$IFS"; IFS='~'
7665 for cmd in $cmds; do
7666 IFS="$save_ifs"
7667 eval cmd=\"$cmd\"
7668 $opt_silent || {
7669 func_quote_for_expand "$cmd"
7670 eval "func_echo $func_quote_for_expand_result"
7672 $opt_dry_run || eval "$cmd" || {
7673 lt_exit=$?
7675 # Restore the uninstalled library and exit
7676 if test "$mode" = relink; then
7677 ( cd "$output_objdir" && \
7678 $RM "${realname}T" && \
7679 $MV "${realname}U" "$realname" )
7682 exit $lt_exit
7684 done
7685 IFS="$save_ifs"
7687 # Restore the uninstalled library and exit
7688 if test "$mode" = relink; then
7689 $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
7691 if test -n "$convenience"; then
7692 if test -z "$whole_archive_flag_spec"; then
7693 func_show_eval '${RM}r "$gentop"'
7697 exit $EXIT_SUCCESS
7700 # Create links to the real library.
7701 for linkname in $linknames; do
7702 if test "$realname" != "$linkname"; then
7703 func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
7705 done
7707 # If -module or -export-dynamic was specified, set the dlname.
7708 if test "$module" = yes || test "$export_dynamic" = yes; then
7709 # On all known operating systems, these are identical.
7710 dlname="$soname"
7715 obj)
7716 if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
7717 func_warning "\`-dlopen' is ignored for objects"
7720 case " $deplibs" in
7721 *\ -l* | *\ -L*)
7722 func_warning "\`-l' and \`-L' are ignored for objects" ;;
7723 esac
7725 test -n "$rpath" && \
7726 func_warning "\`-rpath' is ignored for objects"
7728 test -n "$xrpath" && \
7729 func_warning "\`-R' is ignored for objects"
7731 test -n "$vinfo" && \
7732 func_warning "\`-version-info' is ignored for objects"
7734 test -n "$release" && \
7735 func_warning "\`-release' is ignored for objects"
7737 case $output in
7738 *.lo)
7739 test -n "$objs$old_deplibs" && \
7740 func_fatal_error "cannot build library object \`$output' from non-libtool objects"
7742 libobj=$output
7743 func_lo2o "$libobj"
7744 obj=$func_lo2o_result
7747 libobj=
7748 obj="$output"
7750 esac
7752 # Delete the old objects.
7753 $opt_dry_run || $RM $obj $libobj
7755 # Objects from convenience libraries. This assumes
7756 # single-version convenience libraries. Whenever we create
7757 # different ones for PIC/non-PIC, this we'll have to duplicate
7758 # the extraction.
7759 reload_conv_objs=
7760 gentop=
7761 # reload_cmds runs $LD directly, so let us get rid of
7762 # -Wl from whole_archive_flag_spec and hope we can get by with
7763 # turning comma into space..
7766 if test -n "$convenience"; then
7767 if test -n "$whole_archive_flag_spec"; then
7768 eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
7769 reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
7770 else
7771 gentop="$output_objdir/${obj}x"
7772 generated="$generated $gentop"
7774 func_extract_archives $gentop $convenience
7775 reload_conv_objs="$reload_objs $func_extract_archives_result"
7779 # Create the old-style object.
7780 reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
7782 output="$obj"
7783 func_execute_cmds "$reload_cmds" 'exit $?'
7785 # Exit if we aren't doing a library object file.
7786 if test -z "$libobj"; then
7787 if test -n "$gentop"; then
7788 func_show_eval '${RM}r "$gentop"'
7791 exit $EXIT_SUCCESS
7794 if test "$build_libtool_libs" != yes; then
7795 if test -n "$gentop"; then
7796 func_show_eval '${RM}r "$gentop"'
7799 # Create an invalid libtool object if no PIC, so that we don't
7800 # accidentally link it into a program.
7801 # $show "echo timestamp > $libobj"
7802 # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
7803 exit $EXIT_SUCCESS
7806 if test -n "$pic_flag" || test "$pic_mode" != default; then
7807 # Only do commands if we really have different PIC objects.
7808 reload_objs="$libobjs $reload_conv_objs"
7809 output="$libobj"
7810 func_execute_cmds "$reload_cmds" 'exit $?'
7813 if test -n "$gentop"; then
7814 func_show_eval '${RM}r "$gentop"'
7817 exit $EXIT_SUCCESS
7820 prog)
7821 case $host in
7822 *cygwin*) func_stripname '' '.exe' "$output"
7823 output=$func_stripname_result.exe;;
7824 esac
7825 test -n "$vinfo" && \
7826 func_warning "\`-version-info' is ignored for programs"
7828 test -n "$release" && \
7829 func_warning "\`-release' is ignored for programs"
7831 test "$preload" = yes \
7832 && test "$dlopen_support" = unknown \
7833 && test "$dlopen_self" = unknown \
7834 && test "$dlopen_self_static" = unknown && \
7835 func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
7837 case $host in
7838 *-*-rhapsody* | *-*-darwin1.[012])
7839 # On Rhapsody replace the C library is the System framework
7840 compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
7841 finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
7843 esac
7845 case $host in
7846 *-*-darwin*)
7847 # Don't allow lazy linking, it breaks C++ global constructors
7848 # But is supposedly fixed on 10.4 or later (yay!).
7849 if test "$tagname" = CXX ; then
7850 case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
7851 10.[0123])
7852 compile_command="$compile_command ${wl}-bind_at_load"
7853 finalize_command="$finalize_command ${wl}-bind_at_load"
7855 esac
7857 # Time to change all our "foo.ltframework" stuff back to "-framework foo"
7858 compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7859 finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7861 esac
7864 # move library search paths that coincide with paths to not yet
7865 # installed libraries to the beginning of the library search list
7866 new_libs=
7867 for path in $notinst_path; do
7868 case " $new_libs " in
7869 *" -L$path/$objdir "*) ;;
7871 case " $compile_deplibs " in
7872 *" -L$path/$objdir "*)
7873 new_libs="$new_libs -L$path/$objdir" ;;
7874 esac
7876 esac
7877 done
7878 for deplib in $compile_deplibs; do
7879 case $deplib in
7880 -L*)
7881 case " $new_libs " in
7882 *" $deplib "*) ;;
7883 *) new_libs="$new_libs $deplib" ;;
7884 esac
7886 *) new_libs="$new_libs $deplib" ;;
7887 esac
7888 done
7889 compile_deplibs="$new_libs"
7892 compile_command="$compile_command $compile_deplibs"
7893 finalize_command="$finalize_command $finalize_deplibs"
7895 if test -n "$rpath$xrpath"; then
7896 # If the user specified any rpath flags, then add them.
7897 for libdir in $rpath $xrpath; do
7898 # This is the magic to use -rpath.
7899 case "$finalize_rpath " in
7900 *" $libdir "*) ;;
7901 *) finalize_rpath="$finalize_rpath $libdir" ;;
7902 esac
7903 done
7906 # Now hardcode the library paths
7907 rpath=
7908 hardcode_libdirs=
7909 for libdir in $compile_rpath $finalize_rpath; do
7910 if test -n "$hardcode_libdir_flag_spec"; then
7911 if test -n "$hardcode_libdir_separator"; then
7912 if test -z "$hardcode_libdirs"; then
7913 hardcode_libdirs="$libdir"
7914 else
7915 # Just accumulate the unique libdirs.
7916 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
7917 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
7920 hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
7922 esac
7924 else
7925 eval flag=\"$hardcode_libdir_flag_spec\"
7926 rpath="$rpath $flag"
7928 elif test -n "$runpath_var"; then
7929 case "$perm_rpath " in
7930 *" $libdir "*) ;;
7931 *) perm_rpath="$perm_rpath $libdir" ;;
7932 esac
7934 case $host in
7935 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
7936 testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
7937 case :$dllsearchpath: in
7938 *":$libdir:"*) ;;
7939 ::) dllsearchpath=$libdir;;
7940 *) dllsearchpath="$dllsearchpath:$libdir";;
7941 esac
7942 case :$dllsearchpath: in
7943 *":$testbindir:"*) ;;
7944 ::) dllsearchpath=$testbindir;;
7945 *) dllsearchpath="$dllsearchpath:$testbindir";;
7946 esac
7948 esac
7949 done
7950 # Substitute the hardcoded libdirs into the rpath.
7951 if test -n "$hardcode_libdir_separator" &&
7952 test -n "$hardcode_libdirs"; then
7953 libdir="$hardcode_libdirs"
7954 eval rpath=\" $hardcode_libdir_flag_spec\"
7956 compile_rpath="$rpath"
7958 rpath=
7959 hardcode_libdirs=
7960 for libdir in $finalize_rpath; do
7961 if test -n "$hardcode_libdir_flag_spec"; then
7962 if test -n "$hardcode_libdir_separator"; then
7963 if test -z "$hardcode_libdirs"; then
7964 hardcode_libdirs="$libdir"
7965 else
7966 # Just accumulate the unique libdirs.
7967 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
7968 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
7971 hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
7973 esac
7975 else
7976 eval flag=\"$hardcode_libdir_flag_spec\"
7977 rpath="$rpath $flag"
7979 elif test -n "$runpath_var"; then
7980 case "$finalize_perm_rpath " in
7981 *" $libdir "*) ;;
7982 *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
7983 esac
7985 done
7986 # Substitute the hardcoded libdirs into the rpath.
7987 if test -n "$hardcode_libdir_separator" &&
7988 test -n "$hardcode_libdirs"; then
7989 libdir="$hardcode_libdirs"
7990 eval rpath=\" $hardcode_libdir_flag_spec\"
7992 finalize_rpath="$rpath"
7994 if test -n "$libobjs" && test "$build_old_libs" = yes; then
7995 # Transform all the library objects into standard objects.
7996 compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
7997 finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8000 func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
8002 # template prelinking step
8003 if test -n "$prelink_cmds"; then
8004 func_execute_cmds "$prelink_cmds" 'exit $?'
8007 wrappers_required=yes
8008 case $host in
8009 *cegcc* | *mingw32ce*)
8010 # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
8011 wrappers_required=no
8013 *cygwin* | *mingw* )
8014 if test "$build_libtool_libs" != yes; then
8015 wrappers_required=no
8019 if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
8020 wrappers_required=no
8023 esac
8024 if test "$wrappers_required" = no; then
8025 # Replace the output file specification.
8026 compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8027 link_command="$compile_command$compile_rpath"
8029 # We have no uninstalled library dependencies, so finalize right now.
8030 exit_status=0
8031 func_show_eval "$link_command" 'exit_status=$?'
8033 # Delete the generated files.
8034 if test -f "$output_objdir/${outputname}S.${objext}"; then
8035 func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
8038 exit $exit_status
8041 if test -n "$compile_shlibpath$finalize_shlibpath"; then
8042 compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
8044 if test -n "$finalize_shlibpath"; then
8045 finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
8048 compile_var=
8049 finalize_var=
8050 if test -n "$runpath_var"; then
8051 if test -n "$perm_rpath"; then
8052 # We should set the runpath_var.
8053 rpath=
8054 for dir in $perm_rpath; do
8055 rpath="$rpath$dir:"
8056 done
8057 compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
8059 if test -n "$finalize_perm_rpath"; then
8060 # We should set the runpath_var.
8061 rpath=
8062 for dir in $finalize_perm_rpath; do
8063 rpath="$rpath$dir:"
8064 done
8065 finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
8069 if test "$no_install" = yes; then
8070 # We don't need to create a wrapper script.
8071 link_command="$compile_var$compile_command$compile_rpath"
8072 # Replace the output file specification.
8073 link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8074 # Delete the old output file.
8075 $opt_dry_run || $RM $output
8076 # Link the executable and exit
8077 func_show_eval "$link_command" 'exit $?'
8078 exit $EXIT_SUCCESS
8081 if test "$hardcode_action" = relink; then
8082 # Fast installation is not supported
8083 link_command="$compile_var$compile_command$compile_rpath"
8084 relink_command="$finalize_var$finalize_command$finalize_rpath"
8086 func_warning "this platform does not like uninstalled shared libraries"
8087 func_warning "\`$output' will be relinked during installation"
8088 else
8089 if test "$fast_install" != no; then
8090 link_command="$finalize_var$compile_command$finalize_rpath"
8091 if test "$fast_install" = yes; then
8092 relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
8093 else
8094 # fast_install is set to needless
8095 relink_command=
8097 else
8098 link_command="$compile_var$compile_command$compile_rpath"
8099 relink_command="$finalize_var$finalize_command$finalize_rpath"
8103 # Replace the output file specification.
8104 link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
8106 # Delete the old output files.
8107 $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
8109 func_show_eval "$link_command" 'exit $?'
8111 # Now create the wrapper script.
8112 func_verbose "creating $output"
8114 # Quote the relink command for shipping.
8115 if test -n "$relink_command"; then
8116 # Preserve any variables that may affect compiler behavior
8117 for var in $variables_saved_for_relink; do
8118 if eval test -z \"\${$var+set}\"; then
8119 relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
8120 elif eval var_value=\$$var; test -z "$var_value"; then
8121 relink_command="$var=; export $var; $relink_command"
8122 else
8123 func_quote_for_eval "$var_value"
8124 relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
8126 done
8127 relink_command="(cd `pwd`; $relink_command)"
8128 relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
8131 # Only actually do things if not in dry run mode.
8132 $opt_dry_run || {
8133 # win32 will think the script is a binary if it has
8134 # a .exe suffix, so we strip it off here.
8135 case $output in
8136 *.exe) func_stripname '' '.exe' "$output"
8137 output=$func_stripname_result ;;
8138 esac
8139 # test for cygwin because mv fails w/o .exe extensions
8140 case $host in
8141 *cygwin*)
8142 exeext=.exe
8143 func_stripname '' '.exe' "$outputname"
8144 outputname=$func_stripname_result ;;
8145 *) exeext= ;;
8146 esac
8147 case $host in
8148 *cygwin* | *mingw* )
8149 func_dirname_and_basename "$output" "" "."
8150 output_name=$func_basename_result
8151 output_path=$func_dirname_result
8152 cwrappersource="$output_path/$objdir/lt-$output_name.c"
8153 cwrapper="$output_path/$output_name.exe"
8154 $RM $cwrappersource $cwrapper
8155 trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
8157 func_emit_cwrapperexe_src > $cwrappersource
8159 # The wrapper executable is built using the $host compiler,
8160 # because it contains $host paths and files. If cross-
8161 # compiling, it, like the target executable, must be
8162 # executed on the $host or under an emulation environment.
8163 $opt_dry_run || {
8164 $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
8165 $STRIP $cwrapper
8168 # Now, create the wrapper script for func_source use:
8169 func_ltwrapper_scriptname $cwrapper
8170 $RM $func_ltwrapper_scriptname_result
8171 trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
8172 $opt_dry_run || {
8173 # note: this script will not be executed, so do not chmod.
8174 if test "x$build" = "x$host" ; then
8175 $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
8176 else
8177 func_emit_wrapper no > $func_ltwrapper_scriptname_result
8182 $RM $output
8183 trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
8185 func_emit_wrapper no > $output
8186 chmod +x $output
8188 esac
8190 exit $EXIT_SUCCESS
8192 esac
8194 # See if we need to build an old-fashioned archive.
8195 for oldlib in $oldlibs; do
8197 if test "$build_libtool_libs" = convenience; then
8198 oldobjs="$libobjs_save $symfileobj"
8199 addlibs="$convenience"
8200 build_libtool_libs=no
8201 else
8202 if test "$build_libtool_libs" = module; then
8203 oldobjs="$libobjs_save"
8204 build_libtool_libs=no
8205 else
8206 oldobjs="$old_deplibs $non_pic_objects"
8207 if test "$preload" = yes && test -f "$symfileobj"; then
8208 oldobjs="$oldobjs $symfileobj"
8211 addlibs="$old_convenience"
8214 if test -n "$addlibs"; then
8215 gentop="$output_objdir/${outputname}x"
8216 generated="$generated $gentop"
8218 func_extract_archives $gentop $addlibs
8219 oldobjs="$oldobjs $func_extract_archives_result"
8222 # Do each command in the archive commands.
8223 if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
8224 cmds=$old_archive_from_new_cmds
8225 else
8227 # Add any objects from preloaded convenience libraries
8228 if test -n "$dlprefiles"; then
8229 gentop="$output_objdir/${outputname}x"
8230 generated="$generated $gentop"
8232 func_extract_archives $gentop $dlprefiles
8233 oldobjs="$oldobjs $func_extract_archives_result"
8236 # POSIX demands no paths to be encoded in archives. We have
8237 # to avoid creating archives with duplicate basenames if we
8238 # might have to extract them afterwards, e.g., when creating a
8239 # static archive out of a convenience library, or when linking
8240 # the entirety of a libtool archive into another (currently
8241 # not supported by libtool).
8242 if (for obj in $oldobjs
8244 func_basename "$obj"
8245 $ECHO "$func_basename_result"
8246 done | sort | sort -uc >/dev/null 2>&1); then
8248 else
8249 echo "copying selected object files to avoid basename conflicts..."
8250 gentop="$output_objdir/${outputname}x"
8251 generated="$generated $gentop"
8252 func_mkdir_p "$gentop"
8253 save_oldobjs=$oldobjs
8254 oldobjs=
8255 counter=1
8256 for obj in $save_oldobjs
8258 func_basename "$obj"
8259 objbase="$func_basename_result"
8260 case " $oldobjs " in
8261 " ") oldobjs=$obj ;;
8262 *[\ /]"$objbase "*)
8263 while :; do
8264 # Make sure we don't pick an alternate name that also
8265 # overlaps.
8266 newobj=lt$counter-$objbase
8267 func_arith $counter + 1
8268 counter=$func_arith_result
8269 case " $oldobjs " in
8270 *[\ /]"$newobj "*) ;;
8271 *) if test ! -f "$gentop/$newobj"; then break; fi ;;
8272 esac
8273 done
8274 func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
8275 oldobjs="$oldobjs $gentop/$newobj"
8277 *) oldobjs="$oldobjs $obj" ;;
8278 esac
8279 done
8281 eval cmds=\"$old_archive_cmds\"
8283 func_len " $cmds"
8284 len=$func_len_result
8285 if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
8286 cmds=$old_archive_cmds
8287 else
8288 # the command line is too long to link in one step, link in parts
8289 func_verbose "using piecewise archive linking..."
8290 save_RANLIB=$RANLIB
8291 RANLIB=:
8292 objlist=
8293 concat_cmds=
8294 save_oldobjs=$oldobjs
8295 oldobjs=
8296 # Is there a better way of finding the last object in the list?
8297 for obj in $save_oldobjs
8299 last_oldobj=$obj
8300 done
8301 eval test_cmds=\"$old_archive_cmds\"
8302 func_len " $test_cmds"
8303 len0=$func_len_result
8304 len=$len0
8305 for obj in $save_oldobjs
8307 func_len " $obj"
8308 func_arith $len + $func_len_result
8309 len=$func_arith_result
8310 func_append objlist " $obj"
8311 if test "$len" -lt "$max_cmd_len"; then
8313 else
8314 # the above command should be used before it gets too long
8315 oldobjs=$objlist
8316 if test "$obj" = "$last_oldobj" ; then
8317 RANLIB=$save_RANLIB
8319 test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8320 eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
8321 objlist=
8322 len=$len0
8324 done
8325 RANLIB=$save_RANLIB
8326 oldobjs=$objlist
8327 if test "X$oldobjs" = "X" ; then
8328 eval cmds=\"\$concat_cmds\"
8329 else
8330 eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
8334 func_execute_cmds "$cmds" 'exit $?'
8335 done
8337 test -n "$generated" && \
8338 func_show_eval "${RM}r$generated"
8340 # Now create the libtool archive.
8341 case $output in
8342 *.la)
8343 old_library=
8344 test "$build_old_libs" = yes && old_library="$libname.$libext"
8345 func_verbose "creating $output"
8347 # Preserve any variables that may affect compiler behavior
8348 for var in $variables_saved_for_relink; do
8349 if eval test -z \"\${$var+set}\"; then
8350 relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
8351 elif eval var_value=\$$var; test -z "$var_value"; then
8352 relink_command="$var=; export $var; $relink_command"
8353 else
8354 func_quote_for_eval "$var_value"
8355 relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
8357 done
8358 # Quote the link command for shipping.
8359 relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
8360 relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
8361 if test "$hardcode_automatic" = yes ; then
8362 relink_command=
8365 # Only create the output if not a dry run.
8366 $opt_dry_run || {
8367 for installed in no yes; do
8368 if test "$installed" = yes; then
8369 if test -z "$install_libdir"; then
8370 break
8372 output="$output_objdir/$outputname"i
8373 # Replace all uninstalled libtool libraries with the installed ones
8374 newdependency_libs=
8375 for deplib in $dependency_libs; do
8376 case $deplib in
8377 *.la)
8378 func_basename "$deplib"
8379 name="$func_basename_result"
8380 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
8381 test -z "$libdir" && \
8382 func_fatal_error "\`$deplib' is not a valid libtool archive"
8383 newdependency_libs="$newdependency_libs $libdir/$name"
8385 *) newdependency_libs="$newdependency_libs $deplib" ;;
8386 esac
8387 done
8388 dependency_libs="$newdependency_libs"
8389 newdlfiles=
8391 for lib in $dlfiles; do
8392 case $lib in
8393 *.la)
8394 func_basename "$lib"
8395 name="$func_basename_result"
8396 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
8397 test -z "$libdir" && \
8398 func_fatal_error "\`$lib' is not a valid libtool archive"
8399 newdlfiles="$newdlfiles $libdir/$name"
8401 *) newdlfiles="$newdlfiles $lib" ;;
8402 esac
8403 done
8404 dlfiles="$newdlfiles"
8405 newdlprefiles=
8406 for lib in $dlprefiles; do
8407 case $lib in
8408 *.la)
8409 # Only pass preopened files to the pseudo-archive (for
8410 # eventual linking with the app. that links it) if we
8411 # didn't already link the preopened objects directly into
8412 # the library:
8413 func_basename "$lib"
8414 name="$func_basename_result"
8415 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
8416 test -z "$libdir" && \
8417 func_fatal_error "\`$lib' is not a valid libtool archive"
8418 newdlprefiles="$newdlprefiles $libdir/$name"
8420 esac
8421 done
8422 dlprefiles="$newdlprefiles"
8423 else
8424 newdlfiles=
8425 for lib in $dlfiles; do
8426 case $lib in
8427 [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
8428 *) abs=`pwd`"/$lib" ;;
8429 esac
8430 newdlfiles="$newdlfiles $abs"
8431 done
8432 dlfiles="$newdlfiles"
8433 newdlprefiles=
8434 for lib in $dlprefiles; do
8435 case $lib in
8436 [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
8437 *) abs=`pwd`"/$lib" ;;
8438 esac
8439 newdlprefiles="$newdlprefiles $abs"
8440 done
8441 dlprefiles="$newdlprefiles"
8443 $RM $output
8444 # place dlname in correct position for cygwin
8445 # In fact, it would be nice if we could use this code for all target
8446 # systems that can't hard-code library paths into their executables
8447 # and that have no shared library path variable independent of PATH,
8448 # but it turns out we can't easily determine that from inspecting
8449 # libtool variables, so we have to hard-code the OSs to which it
8450 # applies here; at the moment, that means platforms that use the PE
8451 # object format with DLL files. See the long comment at the top of
8452 # tests/bindir.at for full details.
8453 tdlname=$dlname
8454 case $host,$output,$installed,$module,$dlname in
8455 *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
8456 # If a -bindir argument was supplied, place the dll there.
8457 if test "x$bindir" != x ;
8458 then
8459 func_relative_path "$install_libdir" "$bindir"
8460 tdlname=$func_relative_path_result$dlname
8461 else
8462 # Otherwise fall back on heuristic.
8463 tdlname=../bin/$dlname
8466 esac
8467 $ECHO > $output "\
8468 # $outputname - a libtool library file
8469 # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
8471 # Please DO NOT delete this file!
8472 # It is necessary for linking the library.
8474 # The name that we can dlopen(3).
8475 dlname='$tdlname'
8477 # Names of this library.
8478 library_names='$library_names'
8480 # The name of the static archive.
8481 old_library='$old_library'
8483 # Linker flags that can not go in dependency_libs.
8484 inherited_linker_flags='$new_inherited_linker_flags'
8486 # Libraries that this one depends upon.
8487 dependency_libs='$dependency_libs'
8489 # Names of additional weak libraries provided by this library
8490 weak_library_names='$weak_libs'
8492 # Version information for $libname.
8493 current=$current
8494 age=$age
8495 revision=$revision
8497 # Is this an already installed library?
8498 installed=$installed
8500 # Should we warn about portability when linking against -modules?
8501 shouldnotlink=$module
8503 # Files to dlopen/dlpreopen
8504 dlopen='$dlfiles'
8505 dlpreopen='$dlprefiles'
8507 # Directory that this library needs to be installed in:
8508 libdir='$install_libdir'"
8509 if test "$installed" = no && test "$need_relink" = yes; then
8510 $ECHO >> $output "\
8511 relink_command=\"$relink_command\""
8513 done
8516 # Do a symbolic link so that the libtool archive can be found in
8517 # LD_LIBRARY_PATH before the program is installed.
8518 func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
8520 esac
8521 exit $EXIT_SUCCESS
8524 { test "$mode" = link || test "$mode" = relink; } &&
8525 func_mode_link ${1+"$@"}
8528 # func_mode_uninstall arg...
8529 func_mode_uninstall ()
8531 $opt_debug
8532 RM="$nonopt"
8533 files=
8534 rmforce=
8535 exit_status=0
8537 # This variable tells wrapper scripts just to set variables rather
8538 # than running their programs.
8539 libtool_install_magic="$magic"
8541 for arg
8543 case $arg in
8544 -f) RM="$RM $arg"; rmforce=yes ;;
8545 -*) RM="$RM $arg" ;;
8546 *) files="$files $arg" ;;
8547 esac
8548 done
8550 test -z "$RM" && \
8551 func_fatal_help "you must specify an RM program"
8553 rmdirs=
8555 origobjdir="$objdir"
8556 for file in $files; do
8557 func_dirname "$file" "" "."
8558 dir="$func_dirname_result"
8559 if test "X$dir" = X.; then
8560 objdir="$origobjdir"
8561 else
8562 objdir="$dir/$origobjdir"
8564 func_basename "$file"
8565 name="$func_basename_result"
8566 test "$mode" = uninstall && objdir="$dir"
8568 # Remember objdir for removal later, being careful to avoid duplicates
8569 if test "$mode" = clean; then
8570 case " $rmdirs " in
8571 *" $objdir "*) ;;
8572 *) rmdirs="$rmdirs $objdir" ;;
8573 esac
8576 # Don't error if the file doesn't exist and rm -f was used.
8577 if { test -L "$file"; } >/dev/null 2>&1 ||
8578 { test -h "$file"; } >/dev/null 2>&1 ||
8579 test -f "$file"; then
8581 elif test -d "$file"; then
8582 exit_status=1
8583 continue
8584 elif test "$rmforce" = yes; then
8585 continue
8588 rmfiles="$file"
8590 case $name in
8591 *.la)
8592 # Possibly a libtool archive, so verify it.
8593 if func_lalib_p "$file"; then
8594 func_source $dir/$name
8596 # Delete the libtool libraries and symlinks.
8597 for n in $library_names; do
8598 rmfiles="$rmfiles $objdir/$n"
8599 done
8600 test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
8602 case "$mode" in
8603 clean)
8604 case " $library_names " in
8605 # " " in the beginning catches empty $dlname
8606 *" $dlname "*) ;;
8607 *) rmfiles="$rmfiles $objdir/$dlname" ;;
8608 esac
8609 test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
8611 uninstall)
8612 if test -n "$library_names"; then
8613 # Do each command in the postuninstall commands.
8614 func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
8617 if test -n "$old_library"; then
8618 # Do each command in the old_postuninstall commands.
8619 func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
8621 # FIXME: should reinstall the best remaining shared library.
8623 esac
8627 *.lo)
8628 # Possibly a libtool object, so verify it.
8629 if func_lalib_p "$file"; then
8631 # Read the .lo file
8632 func_source $dir/$name
8634 # Add PIC object to the list of files to remove.
8635 if test -n "$pic_object" &&
8636 test "$pic_object" != none; then
8637 rmfiles="$rmfiles $dir/$pic_object"
8640 # Add non-PIC object to the list of files to remove.
8641 if test -n "$non_pic_object" &&
8642 test "$non_pic_object" != none; then
8643 rmfiles="$rmfiles $dir/$non_pic_object"
8649 if test "$mode" = clean ; then
8650 noexename=$name
8651 case $file in
8652 *.exe)
8653 func_stripname '' '.exe' "$file"
8654 file=$func_stripname_result
8655 func_stripname '' '.exe' "$name"
8656 noexename=$func_stripname_result
8657 # $file with .exe has already been added to rmfiles,
8658 # add $file without .exe
8659 rmfiles="$rmfiles $file"
8661 esac
8662 # Do a test to see if this is a libtool program.
8663 if func_ltwrapper_p "$file"; then
8664 if func_ltwrapper_executable_p "$file"; then
8665 func_ltwrapper_scriptname "$file"
8666 relink_command=
8667 func_source $func_ltwrapper_scriptname_result
8668 rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
8669 else
8670 relink_command=
8671 func_source $dir/$noexename
8674 # note $name still contains .exe if it was in $file originally
8675 # as does the version of $file that was added into $rmfiles
8676 rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
8677 if test "$fast_install" = yes && test -n "$relink_command"; then
8678 rmfiles="$rmfiles $objdir/lt-$name"
8680 if test "X$noexename" != "X$name" ; then
8681 rmfiles="$rmfiles $objdir/lt-${noexename}.c"
8686 esac
8687 func_show_eval "$RM $rmfiles" 'exit_status=1'
8688 done
8689 objdir="$origobjdir"
8691 # Try to remove the ${objdir}s in the directories where we deleted files
8692 for dir in $rmdirs; do
8693 if test -d "$dir"; then
8694 func_show_eval "rmdir $dir >/dev/null 2>&1"
8696 done
8698 exit $exit_status
8701 { test "$mode" = uninstall || test "$mode" = clean; } &&
8702 func_mode_uninstall ${1+"$@"}
8704 test -z "$mode" && {
8705 help="$generic_help"
8706 func_fatal_help "you must specify a MODE"
8709 test -z "$exec_cmd" && \
8710 func_fatal_help "invalid operation mode \`$mode'"
8712 if test -n "$exec_cmd"; then
8713 eval exec "$exec_cmd"
8714 exit $EXIT_FAILURE
8717 exit $exit_status
8720 # The TAGs below are defined such that we never get into a situation
8721 # in which we disable both kinds of libraries. Given conflicting
8722 # choices, we go for a static library, that is the most portable,
8723 # since we can't tell whether shared libraries were disabled because
8724 # the user asked for that or because the platform doesn't support
8725 # them. This is particularly important on AIX, because we don't
8726 # support having both static and shared libraries enabled at the same
8727 # time on that platform, so we default to a shared-only configuration.
8728 # If a disable-shared tag is given, we'll fallback to a static-only
8729 # configuration. But we'll never go from static-only to shared-only.
8731 # ### BEGIN LIBTOOL TAG CONFIG: disable-shared
8732 build_libtool_libs=no
8733 build_old_libs=yes
8734 # ### END LIBTOOL TAG CONFIG: disable-shared
8736 # ### BEGIN LIBTOOL TAG CONFIG: disable-static
8737 build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
8738 # ### END LIBTOOL TAG CONFIG: disable-static
8740 # Local Variables:
8741 # mode:shell-script
8742 # sh-indentation:2
8743 # End:
8744 # vi:sw=2