annotate src/liblo-0.26/ltmain.sh @ 23:619f715526df sv_v2.1

Update Vamp plugin SDK to 2.5
author Chris Cannam
date Thu, 09 May 2013 10:52:46 +0100
parents e13257ea84a4
children
rev   line source
Chris@4 1 # Generated from ltmain.m4sh.
Chris@4 2
Chris@4 3 # ltmain.sh (GNU libtool) 2.2.4
Chris@4 4 # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
Chris@4 5
Chris@4 6 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
Chris@4 7 # This is free software; see the source for copying conditions. There is NO
Chris@4 8 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Chris@4 9
Chris@4 10 # GNU Libtool is free software; you can redistribute it and/or modify
Chris@4 11 # it under the terms of the GNU General Public License as published by
Chris@4 12 # the Free Software Foundation; either version 2 of the License, or
Chris@4 13 # (at your option) any later version.
Chris@4 14 #
Chris@4 15 # As a special exception to the GNU General Public License,
Chris@4 16 # if you distribute this file as part of a program or library that
Chris@4 17 # is built using GNU Libtool, you may include this file under the
Chris@4 18 # same distribution terms that you use for the rest of that program.
Chris@4 19 #
Chris@4 20 # GNU Libtool is distributed in the hope that it will be useful, but
Chris@4 21 # WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@4 22 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Chris@4 23 # General Public License for more details.
Chris@4 24 #
Chris@4 25 # You should have received a copy of the GNU General Public License
Chris@4 26 # along with GNU Libtool; see the file COPYING. If not, a copy
Chris@4 27 # can be downloaded from http://www.gnu.org/licenses/gpl.html,
Chris@4 28 # or obtained by writing to the Free Software Foundation, Inc.,
Chris@4 29 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@4 30
Chris@4 31 # Usage: $progname [OPTION]... [MODE-ARG]...
Chris@4 32 #
Chris@4 33 # Provide generalized library-building support services.
Chris@4 34 #
Chris@4 35 # --config show all configuration variables
Chris@4 36 # --debug enable verbose shell tracing
Chris@4 37 # -n, --dry-run display commands without modifying any files
Chris@4 38 # --features display basic configuration information and exit
Chris@4 39 # --mode=MODE use operation mode MODE
Chris@4 40 # --preserve-dup-deps don't remove duplicate dependency libraries
Chris@4 41 # --quiet, --silent don't print informational messages
Chris@4 42 # --tag=TAG use configuration variables from tag TAG
Chris@4 43 # -v, --verbose print informational messages (default)
Chris@4 44 # --version print version information
Chris@4 45 # -h, --help print short or long help message
Chris@4 46 #
Chris@4 47 # MODE must be one of the following:
Chris@4 48 #
Chris@4 49 # clean remove files from the build directory
Chris@4 50 # compile compile a source file into a libtool object
Chris@4 51 # execute automatically set library path, then run a program
Chris@4 52 # finish complete the installation of libtool libraries
Chris@4 53 # install install libraries or executables
Chris@4 54 # link create a library or an executable
Chris@4 55 # uninstall remove libraries from an installed directory
Chris@4 56 #
Chris@4 57 # MODE-ARGS vary depending on the MODE.
Chris@4 58 # Try `$progname --help --mode=MODE' for a more detailed description of MODE.
Chris@4 59 #
Chris@4 60 # When reporting a bug, please describe a test case to reproduce it and
Chris@4 61 # include the following information:
Chris@4 62 #
Chris@4 63 # host-triplet: $host
Chris@4 64 # shell: $SHELL
Chris@4 65 # compiler: $LTCC
Chris@4 66 # compiler flags: $LTCFLAGS
Chris@4 67 # linker: $LD (gnu? $with_gnu_ld)
Chris@4 68 # $progname: (GNU libtool) 2.2.4 Debian-2.2.4-0ubuntu4
Chris@4 69 # automake: $automake_version
Chris@4 70 # autoconf: $autoconf_version
Chris@4 71 #
Chris@4 72 # Report bugs to <bug-libtool@gnu.org>.
Chris@4 73
Chris@4 74 PROGRAM=ltmain.sh
Chris@4 75 PACKAGE=libtool
Chris@4 76 VERSION="2.2.4 Debian-2.2.4-0ubuntu4"
Chris@4 77 TIMESTAMP=""
Chris@4 78 package_revision=1.2976
Chris@4 79
Chris@4 80 # Be Bourne compatible
Chris@4 81 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
Chris@4 82 emulate sh
Chris@4 83 NULLCMD=:
Chris@4 84 # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
Chris@4 85 # is contrary to our usage. Disable this feature.
Chris@4 86 alias -g '${1+"$@"}'='"$@"'
Chris@4 87 setopt NO_GLOB_SUBST
Chris@4 88 else
Chris@4 89 case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
Chris@4 90 fi
Chris@4 91 BIN_SH=xpg4; export BIN_SH # for Tru64
Chris@4 92 DUALCASE=1; export DUALCASE # for MKS sh
Chris@4 93
Chris@4 94 # NLS nuisances: We save the old values to restore during execute mode.
Chris@4 95 # Only set LANG and LC_ALL to C if already set.
Chris@4 96 # These must not be set unconditionally because not all systems understand
Chris@4 97 # e.g. LANG=C (notably SCO).
Chris@4 98 lt_user_locale=
Chris@4 99 lt_safe_locale=
Chris@4 100 for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
Chris@4 101 do
Chris@4 102 eval "if test \"\${$lt_var+set}\" = set; then
Chris@4 103 save_$lt_var=\$$lt_var
Chris@4 104 $lt_var=C
Chris@4 105 export $lt_var
Chris@4 106 lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
Chris@4 107 lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
Chris@4 108 fi"
Chris@4 109 done
Chris@4 110
Chris@4 111 $lt_unset CDPATH
Chris@4 112
Chris@4 113
Chris@4 114
Chris@4 115
Chris@4 116
Chris@4 117 : ${CP="cp -f"}
Chris@4 118 : ${ECHO="echo"}
Chris@4 119 : ${EGREP="/bin/grep -E"}
Chris@4 120 : ${FGREP="/bin/grep -F"}
Chris@4 121 : ${GREP="/bin/grep"}
Chris@4 122 : ${LN_S="ln -s"}
Chris@4 123 : ${MAKE="make"}
Chris@4 124 : ${MKDIR="mkdir"}
Chris@4 125 : ${MV="mv -f"}
Chris@4 126 : ${RM="rm -f"}
Chris@4 127 : ${SED="/bin/sed"}
Chris@4 128 : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
Chris@4 129 : ${Xsed="$SED -e 1s/^X//"}
Chris@4 130
Chris@4 131 # Global variables:
Chris@4 132 EXIT_SUCCESS=0
Chris@4 133 EXIT_FAILURE=1
Chris@4 134 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
Chris@4 135 EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
Chris@4 136
Chris@4 137 exit_status=$EXIT_SUCCESS
Chris@4 138
Chris@4 139 # Make sure IFS has a sensible default
Chris@4 140 lt_nl='
Chris@4 141 '
Chris@4 142 IFS=" $lt_nl"
Chris@4 143
Chris@4 144 dirname="s,/[^/]*$,,"
Chris@4 145 basename="s,^.*/,,"
Chris@4 146
Chris@4 147 # func_dirname_and_basename file append nondir_replacement
Chris@4 148 # perform func_basename and func_dirname in a single function
Chris@4 149 # call:
Chris@4 150 # dirname: Compute the dirname of FILE. If nonempty,
Chris@4 151 # add APPEND to the result, otherwise set result
Chris@4 152 # to NONDIR_REPLACEMENT.
Chris@4 153 # value returned in "$func_dirname_result"
Chris@4 154 # basename: Compute filename of FILE.
Chris@4 155 # value retuned in "$func_basename_result"
Chris@4 156 # Implementation must be kept synchronized with func_dirname
Chris@4 157 # and func_basename. For efficiency, we do not delegate to
Chris@4 158 # those functions but instead duplicate the functionality here.
Chris@4 159 func_dirname_and_basename ()
Chris@4 160 {
Chris@4 161 # Extract subdirectory from the argument.
Chris@4 162 func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
Chris@4 163 if test "X$func_dirname_result" = "X${1}"; then
Chris@4 164 func_dirname_result="${3}"
Chris@4 165 else
Chris@4 166 func_dirname_result="$func_dirname_result${2}"
Chris@4 167 fi
Chris@4 168 func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
Chris@4 169 }
Chris@4 170
Chris@4 171 # Generated shell functions inserted here.
Chris@4 172
Chris@4 173 # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
Chris@4 174 # is ksh but when the shell is invoked as "sh" and the current value of
Chris@4 175 # the _XPG environment variable is not equal to 1 (one), the special
Chris@4 176 # positional parameter $0, within a function call, is the name of the
Chris@4 177 # function.
Chris@4 178 progpath="$0"
Chris@4 179
Chris@4 180 # The name of this program:
Chris@4 181 # In the unlikely event $progname began with a '-', it would play havoc with
Chris@4 182 # func_echo (imagine progname=-n), so we prepend ./ in that case:
Chris@4 183 func_dirname_and_basename "$progpath"
Chris@4 184 progname=$func_basename_result
Chris@4 185 case $progname in
Chris@4 186 -*) progname=./$progname ;;
Chris@4 187 esac
Chris@4 188
Chris@4 189 # Make sure we have an absolute path for reexecution:
Chris@4 190 case $progpath in
Chris@4 191 [\\/]*|[A-Za-z]:\\*) ;;
Chris@4 192 *[\\/]*)
Chris@4 193 progdir=$func_dirname_result
Chris@4 194 progdir=`cd "$progdir" && pwd`
Chris@4 195 progpath="$progdir/$progname"
Chris@4 196 ;;
Chris@4 197 *)
Chris@4 198 save_IFS="$IFS"
Chris@4 199 IFS=:
Chris@4 200 for progdir in $PATH; do
Chris@4 201 IFS="$save_IFS"
Chris@4 202 test -x "$progdir/$progname" && break
Chris@4 203 done
Chris@4 204 IFS="$save_IFS"
Chris@4 205 test -n "$progdir" || progdir=`pwd`
Chris@4 206 progpath="$progdir/$progname"
Chris@4 207 ;;
Chris@4 208 esac
Chris@4 209
Chris@4 210 # Sed substitution that helps us do robust quoting. It backslashifies
Chris@4 211 # metacharacters that are still active within double-quoted strings.
Chris@4 212 Xsed="${SED}"' -e 1s/^X//'
Chris@4 213 sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
Chris@4 214
Chris@4 215 # Same as above, but do not quote variable references.
Chris@4 216 double_quote_subst='s/\(["`\\]\)/\\\1/g'
Chris@4 217
Chris@4 218 # Re-`\' parameter expansions in output of double_quote_subst that were
Chris@4 219 # `\'-ed in input to the same. If an odd number of `\' preceded a '$'
Chris@4 220 # in input to double_quote_subst, that '$' was protected from expansion.
Chris@4 221 # Since each input `\' is now two `\'s, look for any number of runs of
Chris@4 222 # four `\'s followed by two `\'s and then a '$'. `\' that '$'.
Chris@4 223 bs='\\'
Chris@4 224 bs2='\\\\'
Chris@4 225 bs4='\\\\\\\\'
Chris@4 226 dollar='\$'
Chris@4 227 sed_double_backslash="\
Chris@4 228 s/$bs4/&\\
Chris@4 229 /g
Chris@4 230 s/^$bs2$dollar/$bs&/
Chris@4 231 s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
Chris@4 232 s/\n//g"
Chris@4 233
Chris@4 234 # Standard options:
Chris@4 235 opt_dry_run=false
Chris@4 236 opt_help=false
Chris@4 237 opt_quiet=false
Chris@4 238 opt_verbose=false
Chris@4 239 opt_warning=:
Chris@4 240
Chris@4 241 # func_echo arg...
Chris@4 242 # Echo program name prefixed message, along with the current mode
Chris@4 243 # name if it has been set yet.
Chris@4 244 func_echo ()
Chris@4 245 {
Chris@4 246 $ECHO "$progname${mode+: }$mode: $*"
Chris@4 247 }
Chris@4 248
Chris@4 249 # func_verbose arg...
Chris@4 250 # Echo program name prefixed message in verbose mode only.
Chris@4 251 func_verbose ()
Chris@4 252 {
Chris@4 253 $opt_verbose && func_echo ${1+"$@"}
Chris@4 254
Chris@4 255 # A bug in bash halts the script if the last line of a function
Chris@4 256 # fails when set -e is in force, so we need another command to
Chris@4 257 # work around that:
Chris@4 258 :
Chris@4 259 }
Chris@4 260
Chris@4 261 # func_error arg...
Chris@4 262 # Echo program name prefixed message to standard error.
Chris@4 263 func_error ()
Chris@4 264 {
Chris@4 265 $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
Chris@4 266 }
Chris@4 267
Chris@4 268 # func_warning arg...
Chris@4 269 # Echo program name prefixed warning message to standard error.
Chris@4 270 func_warning ()
Chris@4 271 {
Chris@4 272 $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
Chris@4 273
Chris@4 274 # bash bug again:
Chris@4 275 :
Chris@4 276 }
Chris@4 277
Chris@4 278 # func_fatal_error arg...
Chris@4 279 # Echo program name prefixed message to standard error, and exit.
Chris@4 280 func_fatal_error ()
Chris@4 281 {
Chris@4 282 func_error ${1+"$@"}
Chris@4 283 exit $EXIT_FAILURE
Chris@4 284 }
Chris@4 285
Chris@4 286 # func_fatal_help arg...
Chris@4 287 # Echo program name prefixed message to standard error, followed by
Chris@4 288 # a help hint, and exit.
Chris@4 289 func_fatal_help ()
Chris@4 290 {
Chris@4 291 func_error ${1+"$@"}
Chris@4 292 func_fatal_error "$help"
Chris@4 293 }
Chris@4 294 help="Try \`$progname --help' for more information." ## default
Chris@4 295
Chris@4 296
Chris@4 297 # func_grep expression filename
Chris@4 298 # Check whether EXPRESSION matches any line of FILENAME, without output.
Chris@4 299 func_grep ()
Chris@4 300 {
Chris@4 301 $GREP "$1" "$2" >/dev/null 2>&1
Chris@4 302 }
Chris@4 303
Chris@4 304
Chris@4 305 # func_mkdir_p directory-path
Chris@4 306 # Make sure the entire path to DIRECTORY-PATH is available.
Chris@4 307 func_mkdir_p ()
Chris@4 308 {
Chris@4 309 my_directory_path="$1"
Chris@4 310 my_dir_list=
Chris@4 311
Chris@4 312 if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
Chris@4 313
Chris@4 314 # Protect directory names starting with `-'
Chris@4 315 case $my_directory_path in
Chris@4 316 -*) my_directory_path="./$my_directory_path" ;;
Chris@4 317 esac
Chris@4 318
Chris@4 319 # While some portion of DIR does not yet exist...
Chris@4 320 while test ! -d "$my_directory_path"; do
Chris@4 321 # ...make a list in topmost first order. Use a colon delimited
Chris@4 322 # list incase some portion of path contains whitespace.
Chris@4 323 my_dir_list="$my_directory_path:$my_dir_list"
Chris@4 324
Chris@4 325 # If the last portion added has no slash in it, the list is done
Chris@4 326 case $my_directory_path in */*) ;; *) break ;; esac
Chris@4 327
Chris@4 328 # ...otherwise throw away the child directory and loop
Chris@4 329 my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
Chris@4 330 done
Chris@4 331 my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
Chris@4 332
Chris@4 333 save_mkdir_p_IFS="$IFS"; IFS=':'
Chris@4 334 for my_dir in $my_dir_list; do
Chris@4 335 IFS="$save_mkdir_p_IFS"
Chris@4 336 # mkdir can fail with a `File exist' error if two processes
Chris@4 337 # try to create one of the directories concurrently. Don't
Chris@4 338 # stop in that case!
Chris@4 339 $MKDIR "$my_dir" 2>/dev/null || :
Chris@4 340 done
Chris@4 341 IFS="$save_mkdir_p_IFS"
Chris@4 342
Chris@4 343 # Bail out if we (or some other process) failed to create a directory.
Chris@4 344 test -d "$my_directory_path" || \
Chris@4 345 func_fatal_error "Failed to create \`$1'"
Chris@4 346 fi
Chris@4 347 }
Chris@4 348
Chris@4 349
Chris@4 350 # func_mktempdir [string]
Chris@4 351 # Make a temporary directory that won't clash with other running
Chris@4 352 # libtool processes, and avoids race conditions if possible. If
Chris@4 353 # given, STRING is the basename for that directory.
Chris@4 354 func_mktempdir ()
Chris@4 355 {
Chris@4 356 my_template="${TMPDIR-/tmp}/${1-$progname}"
Chris@4 357
Chris@4 358 if test "$opt_dry_run" = ":"; then
Chris@4 359 # Return a directory name, but don't create it in dry-run mode
Chris@4 360 my_tmpdir="${my_template}-$$"
Chris@4 361 else
Chris@4 362
Chris@4 363 # If mktemp works, use that first and foremost
Chris@4 364 my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
Chris@4 365
Chris@4 366 if test ! -d "$my_tmpdir"; then
Chris@4 367 # Failing that, at least try and use $RANDOM to avoid a race
Chris@4 368 my_tmpdir="${my_template}-${RANDOM-0}$$"
Chris@4 369
Chris@4 370 save_mktempdir_umask=`umask`
Chris@4 371 umask 0077
Chris@4 372 $MKDIR "$my_tmpdir"
Chris@4 373 umask $save_mktempdir_umask
Chris@4 374 fi
Chris@4 375
Chris@4 376 # If we're not in dry-run mode, bomb out on failure
Chris@4 377 test -d "$my_tmpdir" || \
Chris@4 378 func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
Chris@4 379 fi
Chris@4 380
Chris@4 381 $ECHO "X$my_tmpdir" | $Xsed
Chris@4 382 }
Chris@4 383
Chris@4 384
Chris@4 385 # func_quote_for_eval arg
Chris@4 386 # Aesthetically quote ARG to be evaled later.
Chris@4 387 # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
Chris@4 388 # is double-quoted, suitable for a subsequent eval, whereas
Chris@4 389 # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
Chris@4 390 # which are still active within double quotes backslashified.
Chris@4 391 func_quote_for_eval ()
Chris@4 392 {
Chris@4 393 case $1 in
Chris@4 394 *[\\\`\"\$]*)
Chris@4 395 func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
Chris@4 396 *)
Chris@4 397 func_quote_for_eval_unquoted_result="$1" ;;
Chris@4 398 esac
Chris@4 399
Chris@4 400 case $func_quote_for_eval_unquoted_result in
Chris@4 401 # Double-quote args containing shell metacharacters to delay
Chris@4 402 # word splitting, command substitution and and variable
Chris@4 403 # expansion for a subsequent eval.
Chris@4 404 # Many Bourne shells cannot handle close brackets correctly
Chris@4 405 # in scan sets, so we specify it separately.
Chris@4 406 *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
Chris@4 407 func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
Chris@4 408 ;;
Chris@4 409 *)
Chris@4 410 func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
Chris@4 411 esac
Chris@4 412 }
Chris@4 413
Chris@4 414
Chris@4 415 # func_quote_for_expand arg
Chris@4 416 # Aesthetically quote ARG to be evaled later; same as above,
Chris@4 417 # but do not quote variable references.
Chris@4 418 func_quote_for_expand ()
Chris@4 419 {
Chris@4 420 case $1 in
Chris@4 421 *[\\\`\"]*)
Chris@4 422 my_arg=`$ECHO "X$1" | $Xsed \
Chris@4 423 -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
Chris@4 424 *)
Chris@4 425 my_arg="$1" ;;
Chris@4 426 esac
Chris@4 427
Chris@4 428 case $my_arg in
Chris@4 429 # Double-quote args containing shell metacharacters to delay
Chris@4 430 # word splitting and command substitution for a subsequent eval.
Chris@4 431 # Many Bourne shells cannot handle close brackets correctly
Chris@4 432 # in scan sets, so we specify it separately.
Chris@4 433 *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
Chris@4 434 my_arg="\"$my_arg\""
Chris@4 435 ;;
Chris@4 436 esac
Chris@4 437
Chris@4 438 func_quote_for_expand_result="$my_arg"
Chris@4 439 }
Chris@4 440
Chris@4 441
Chris@4 442 # func_show_eval cmd [fail_exp]
Chris@4 443 # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
Chris@4 444 # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
Chris@4 445 # is given, then evaluate it.
Chris@4 446 func_show_eval ()
Chris@4 447 {
Chris@4 448 my_cmd="$1"
Chris@4 449 my_fail_exp="${2-:}"
Chris@4 450
Chris@4 451 ${opt_silent-false} || {
Chris@4 452 func_quote_for_expand "$my_cmd"
Chris@4 453 eval "func_echo $func_quote_for_expand_result"
Chris@4 454 }
Chris@4 455
Chris@4 456 if ${opt_dry_run-false}; then :; else
Chris@4 457 eval "$my_cmd"
Chris@4 458 my_status=$?
Chris@4 459 if test "$my_status" -eq 0; then :; else
Chris@4 460 eval "(exit $my_status); $my_fail_exp"
Chris@4 461 fi
Chris@4 462 fi
Chris@4 463 }
Chris@4 464
Chris@4 465
Chris@4 466 # func_show_eval_locale cmd [fail_exp]
Chris@4 467 # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
Chris@4 468 # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
Chris@4 469 # is given, then evaluate it. Use the saved locale for evaluation.
Chris@4 470 func_show_eval_locale ()
Chris@4 471 {
Chris@4 472 my_cmd="$1"
Chris@4 473 my_fail_exp="${2-:}"
Chris@4 474
Chris@4 475 ${opt_silent-false} || {
Chris@4 476 func_quote_for_expand "$my_cmd"
Chris@4 477 eval "func_echo $func_quote_for_expand_result"
Chris@4 478 }
Chris@4 479
Chris@4 480 if ${opt_dry_run-false}; then :; else
Chris@4 481 eval "$lt_user_locale
Chris@4 482 $my_cmd"
Chris@4 483 my_status=$?
Chris@4 484 eval "$lt_safe_locale"
Chris@4 485 if test "$my_status" -eq 0; then :; else
Chris@4 486 eval "(exit $my_status); $my_fail_exp"
Chris@4 487 fi
Chris@4 488 fi
Chris@4 489 }
Chris@4 490
Chris@4 491
Chris@4 492
Chris@4 493
Chris@4 494
Chris@4 495 # func_version
Chris@4 496 # Echo version message to standard output and exit.
Chris@4 497 func_version ()
Chris@4 498 {
Chris@4 499 $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
Chris@4 500 s/^# //
Chris@4 501 s/^# *$//
Chris@4 502 s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
Chris@4 503 p
Chris@4 504 }' < "$progpath"
Chris@4 505 exit $?
Chris@4 506 }
Chris@4 507
Chris@4 508 # func_usage
Chris@4 509 # Echo short help message to standard output and exit.
Chris@4 510 func_usage ()
Chris@4 511 {
Chris@4 512 $SED -n '/^# Usage:/,/# -h/ {
Chris@4 513 s/^# //
Chris@4 514 s/^# *$//
Chris@4 515 s/\$progname/'$progname'/
Chris@4 516 p
Chris@4 517 }' < "$progpath"
Chris@4 518 $ECHO
Chris@4 519 $ECHO "run \`$progname --help | more' for full usage"
Chris@4 520 exit $?
Chris@4 521 }
Chris@4 522
Chris@4 523 # func_help
Chris@4 524 # Echo long help message to standard output and exit.
Chris@4 525 func_help ()
Chris@4 526 {
Chris@4 527 $SED -n '/^# Usage:/,/# Report bugs to/ {
Chris@4 528 s/^# //
Chris@4 529 s/^# *$//
Chris@4 530 s*\$progname*'$progname'*
Chris@4 531 s*\$host*'"$host"'*
Chris@4 532 s*\$SHELL*'"$SHELL"'*
Chris@4 533 s*\$LTCC*'"$LTCC"'*
Chris@4 534 s*\$LTCFLAGS*'"$LTCFLAGS"'*
Chris@4 535 s*\$LD*'"$LD"'*
Chris@4 536 s/\$with_gnu_ld/'"$with_gnu_ld"'/
Chris@4 537 s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
Chris@4 538 s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
Chris@4 539 p
Chris@4 540 }' < "$progpath"
Chris@4 541 exit $?
Chris@4 542 }
Chris@4 543
Chris@4 544 # func_missing_arg argname
Chris@4 545 # Echo program name prefixed message to standard error and set global
Chris@4 546 # exit_cmd.
Chris@4 547 func_missing_arg ()
Chris@4 548 {
Chris@4 549 func_error "missing argument for $1"
Chris@4 550 exit_cmd=exit
Chris@4 551 }
Chris@4 552
Chris@4 553 exit_cmd=:
Chris@4 554
Chris@4 555
Chris@4 556
Chris@4 557
Chris@4 558
Chris@4 559 # Check that we have a working $ECHO.
Chris@4 560 if test "X$1" = X--no-reexec; then
Chris@4 561 # Discard the --no-reexec flag, and continue.
Chris@4 562 shift
Chris@4 563 elif test "X$1" = X--fallback-echo; then
Chris@4 564 # Avoid inline document here, it may be left over
Chris@4 565 :
Chris@4 566 elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
Chris@4 567 # Yippee, $ECHO works!
Chris@4 568 :
Chris@4 569 else
Chris@4 570 # Restart under the correct shell, and then maybe $ECHO will work.
Chris@4 571 exec $SHELL "$progpath" --no-reexec ${1+"$@"}
Chris@4 572 fi
Chris@4 573
Chris@4 574 if test "X$1" = X--fallback-echo; then
Chris@4 575 # used as fallback echo
Chris@4 576 shift
Chris@4 577 cat <<EOF
Chris@4 578 $*
Chris@4 579 EOF
Chris@4 580 exit $EXIT_SUCCESS
Chris@4 581 fi
Chris@4 582
Chris@4 583 magic="%%%MAGIC variable%%%"
Chris@4 584 magic_exe="%%%MAGIC EXE variable%%%"
Chris@4 585
Chris@4 586 # Global variables.
Chris@4 587 # $mode is unset
Chris@4 588 nonopt=
Chris@4 589 execute_dlfiles=
Chris@4 590 preserve_args=
Chris@4 591 lo2o="s/\\.lo\$/.${objext}/"
Chris@4 592 o2lo="s/\\.${objext}\$/.lo/"
Chris@4 593 extracted_archives=
Chris@4 594 extracted_serial=0
Chris@4 595
Chris@4 596 opt_dry_run=false
Chris@4 597 opt_duplicate_deps=false
Chris@4 598 opt_silent=false
Chris@4 599 opt_debug=:
Chris@4 600
Chris@4 601 # If this variable is set in any of the actions, the command in it
Chris@4 602 # will be execed at the end. This prevents here-documents from being
Chris@4 603 # left over by shells.
Chris@4 604 exec_cmd=
Chris@4 605
Chris@4 606 # func_fatal_configuration arg...
Chris@4 607 # Echo program name prefixed message to standard error, followed by
Chris@4 608 # a configuration failure hint, and exit.
Chris@4 609 func_fatal_configuration ()
Chris@4 610 {
Chris@4 611 func_error ${1+"$@"}
Chris@4 612 func_error "See the $PACKAGE documentation for more information."
Chris@4 613 func_fatal_error "Fatal configuration error."
Chris@4 614 }
Chris@4 615
Chris@4 616
Chris@4 617 # func_config
Chris@4 618 # Display the configuration for all the tags in this script.
Chris@4 619 func_config ()
Chris@4 620 {
Chris@4 621 re_begincf='^# ### BEGIN LIBTOOL'
Chris@4 622 re_endcf='^# ### END LIBTOOL'
Chris@4 623
Chris@4 624 # Default configuration.
Chris@4 625 $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
Chris@4 626
Chris@4 627 # Now print the configurations for the tags.
Chris@4 628 for tagname in $taglist; do
Chris@4 629 $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
Chris@4 630 done
Chris@4 631
Chris@4 632 exit $?
Chris@4 633 }
Chris@4 634
Chris@4 635 # func_features
Chris@4 636 # Display the features supported by this script.
Chris@4 637 func_features ()
Chris@4 638 {
Chris@4 639 $ECHO "host: $host"
Chris@4 640 if test "$build_libtool_libs" = yes; then
Chris@4 641 $ECHO "enable shared libraries"
Chris@4 642 else
Chris@4 643 $ECHO "disable shared libraries"
Chris@4 644 fi
Chris@4 645 if test "$build_old_libs" = yes; then
Chris@4 646 $ECHO "enable static libraries"
Chris@4 647 else
Chris@4 648 $ECHO "disable static libraries"
Chris@4 649 fi
Chris@4 650
Chris@4 651 exit $?
Chris@4 652 }
Chris@4 653
Chris@4 654 # func_enable_tag tagname
Chris@4 655 # Verify that TAGNAME is valid, and either flag an error and exit, or
Chris@4 656 # enable the TAGNAME tag. We also add TAGNAME to the global $taglist
Chris@4 657 # variable here.
Chris@4 658 func_enable_tag ()
Chris@4 659 {
Chris@4 660 # Global variable:
Chris@4 661 tagname="$1"
Chris@4 662
Chris@4 663 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
Chris@4 664 re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
Chris@4 665 sed_extractcf="/$re_begincf/,/$re_endcf/p"
Chris@4 666
Chris@4 667 # Validate tagname.
Chris@4 668 case $tagname in
Chris@4 669 *[!-_A-Za-z0-9,/]*)
Chris@4 670 func_fatal_error "invalid tag name: $tagname"
Chris@4 671 ;;
Chris@4 672 esac
Chris@4 673
Chris@4 674 # Don't test for the "default" C tag, as we know it's
Chris@4 675 # there but not specially marked.
Chris@4 676 case $tagname in
Chris@4 677 CC) ;;
Chris@4 678 *)
Chris@4 679 if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
Chris@4 680 taglist="$taglist $tagname"
Chris@4 681
Chris@4 682 # Evaluate the configuration. Be careful to quote the path
Chris@4 683 # and the sed script, to avoid splitting on whitespace, but
Chris@4 684 # also don't use non-portable quotes within backquotes within
Chris@4 685 # quotes we have to do it in 2 steps:
Chris@4 686 extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
Chris@4 687 eval "$extractedcf"
Chris@4 688 else
Chris@4 689 func_error "ignoring unknown tag $tagname"
Chris@4 690 fi
Chris@4 691 ;;
Chris@4 692 esac
Chris@4 693 }
Chris@4 694
Chris@4 695 # Parse options once, thoroughly. This comes as soon as possible in
Chris@4 696 # the script to make things like `libtool --version' happen quickly.
Chris@4 697 {
Chris@4 698
Chris@4 699 # Shorthand for --mode=foo, only valid as the first argument
Chris@4 700 case $1 in
Chris@4 701 clean|clea|cle|cl)
Chris@4 702 shift; set dummy --mode clean ${1+"$@"}; shift
Chris@4 703 ;;
Chris@4 704 compile|compil|compi|comp|com|co|c)
Chris@4 705 shift; set dummy --mode compile ${1+"$@"}; shift
Chris@4 706 ;;
Chris@4 707 execute|execut|execu|exec|exe|ex|e)
Chris@4 708 shift; set dummy --mode execute ${1+"$@"}; shift
Chris@4 709 ;;
Chris@4 710 finish|finis|fini|fin|fi|f)
Chris@4 711 shift; set dummy --mode finish ${1+"$@"}; shift
Chris@4 712 ;;
Chris@4 713 install|instal|insta|inst|ins|in|i)
Chris@4 714 shift; set dummy --mode install ${1+"$@"}; shift
Chris@4 715 ;;
Chris@4 716 link|lin|li|l)
Chris@4 717 shift; set dummy --mode link ${1+"$@"}; shift
Chris@4 718 ;;
Chris@4 719 uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
Chris@4 720 shift; set dummy --mode uninstall ${1+"$@"}; shift
Chris@4 721 ;;
Chris@4 722 esac
Chris@4 723
Chris@4 724 # Parse non-mode specific arguments:
Chris@4 725 while test "$#" -gt 0; do
Chris@4 726 opt="$1"
Chris@4 727 shift
Chris@4 728
Chris@4 729 case $opt in
Chris@4 730 --config) func_config ;;
Chris@4 731
Chris@4 732 --debug) preserve_args="$preserve_args $opt"
Chris@4 733 func_echo "enabling shell trace mode"
Chris@4 734 opt_debug='set -x'
Chris@4 735 $opt_debug
Chris@4 736 ;;
Chris@4 737
Chris@4 738 -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break
Chris@4 739 execute_dlfiles="$execute_dlfiles $1"
Chris@4 740 shift
Chris@4 741 ;;
Chris@4 742
Chris@4 743 --dry-run | -n) opt_dry_run=: ;;
Chris@4 744 --features) func_features ;;
Chris@4 745 --finish) mode="finish" ;;
Chris@4 746
Chris@4 747 --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break
Chris@4 748 case $1 in
Chris@4 749 # Valid mode arguments:
Chris@4 750 clean) ;;
Chris@4 751 compile) ;;
Chris@4 752 execute) ;;
Chris@4 753 finish) ;;
Chris@4 754 install) ;;
Chris@4 755 link) ;;
Chris@4 756 relink) ;;
Chris@4 757 uninstall) ;;
Chris@4 758
Chris@4 759 # Catch anything else as an error
Chris@4 760 *) func_error "invalid argument for $opt"
Chris@4 761 exit_cmd=exit
Chris@4 762 break
Chris@4 763 ;;
Chris@4 764 esac
Chris@4 765
Chris@4 766 mode="$1"
Chris@4 767 shift
Chris@4 768 ;;
Chris@4 769
Chris@4 770 --preserve-dup-deps)
Chris@4 771 opt_duplicate_deps=: ;;
Chris@4 772
Chris@4 773 --quiet|--silent) preserve_args="$preserve_args $opt"
Chris@4 774 opt_silent=:
Chris@4 775 ;;
Chris@4 776
Chris@4 777 --verbose| -v) preserve_args="$preserve_args $opt"
Chris@4 778 opt_silent=false
Chris@4 779 ;;
Chris@4 780
Chris@4 781 --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break
Chris@4 782 preserve_args="$preserve_args $opt $1"
Chris@4 783 func_enable_tag "$1" # tagname is set here
Chris@4 784 shift
Chris@4 785 ;;
Chris@4 786
Chris@4 787 # Separate optargs to long options:
Chris@4 788 -dlopen=*|--mode=*|--tag=*)
Chris@4 789 func_opt_split "$opt"
Chris@4 790 set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
Chris@4 791 shift
Chris@4 792 ;;
Chris@4 793
Chris@4 794 -\?|-h) func_usage ;;
Chris@4 795 --help) opt_help=: ;;
Chris@4 796 --version) func_version ;;
Chris@4 797
Chris@4 798 -*) func_fatal_help "unrecognized option \`$opt'" ;;
Chris@4 799
Chris@4 800 *) nonopt="$opt"
Chris@4 801 break
Chris@4 802 ;;
Chris@4 803 esac
Chris@4 804 done
Chris@4 805
Chris@4 806
Chris@4 807 case $host in
Chris@4 808 *cygwin* | *mingw* | *pw32*)
Chris@4 809 # don't eliminate duplications in $postdeps and $predeps
Chris@4 810 opt_duplicate_compiler_generated_deps=:
Chris@4 811 ;;
Chris@4 812 *)
Chris@4 813 opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
Chris@4 814 ;;
Chris@4 815 esac
Chris@4 816
Chris@4 817 # Having warned about all mis-specified options, bail out if
Chris@4 818 # anything was wrong.
Chris@4 819 $exit_cmd $EXIT_FAILURE
Chris@4 820 }
Chris@4 821
Chris@4 822 # func_check_version_match
Chris@4 823 # Ensure that we are using m4 macros, and libtool script from the same
Chris@4 824 # release of libtool.
Chris@4 825 func_check_version_match ()
Chris@4 826 {
Chris@4 827 if test "$package_revision" != "$macro_revision"; then
Chris@4 828 if test "$VERSION" != "$macro_version"; then
Chris@4 829 if test -z "$macro_version"; then
Chris@4 830 cat >&2 <<_LT_EOF
Chris@4 831 $progname: Version mismatch error. This is $PACKAGE $VERSION, but the
Chris@4 832 $progname: definition of this LT_INIT comes from an older release.
Chris@4 833 $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
Chris@4 834 $progname: and run autoconf again.
Chris@4 835 _LT_EOF
Chris@4 836 else
Chris@4 837 cat >&2 <<_LT_EOF
Chris@4 838 $progname: Version mismatch error. This is $PACKAGE $VERSION, but the
Chris@4 839 $progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
Chris@4 840 $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
Chris@4 841 $progname: and run autoconf again.
Chris@4 842 _LT_EOF
Chris@4 843 fi
Chris@4 844 else
Chris@4 845 cat >&2 <<_LT_EOF
Chris@4 846 $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
Chris@4 847 $progname: but the definition of this LT_INIT comes from revision $macro_revision.
Chris@4 848 $progname: You should recreate aclocal.m4 with macros from revision $package_revision
Chris@4 849 $progname: of $PACKAGE $VERSION and run autoconf again.
Chris@4 850 _LT_EOF
Chris@4 851 fi
Chris@4 852
Chris@4 853 exit $EXIT_MISMATCH
Chris@4 854 fi
Chris@4 855 }
Chris@4 856
Chris@4 857
Chris@4 858 ## ----------- ##
Chris@4 859 ## Main. ##
Chris@4 860 ## ----------- ##
Chris@4 861
Chris@4 862 $opt_help || {
Chris@4 863 # Sanity checks first:
Chris@4 864 func_check_version_match
Chris@4 865
Chris@4 866 if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
Chris@4 867 func_fatal_configuration "not configured to build any kind of library"
Chris@4 868 fi
Chris@4 869
Chris@4 870 test -z "$mode" && func_fatal_error "error: you must specify a MODE."
Chris@4 871
Chris@4 872
Chris@4 873 # Darwin sucks
Chris@4 874 eval std_shrext=\"$shrext_cmds\"
Chris@4 875
Chris@4 876
Chris@4 877 # Only execute mode is allowed to have -dlopen flags.
Chris@4 878 if test -n "$execute_dlfiles" && test "$mode" != execute; then
Chris@4 879 func_error "unrecognized option \`-dlopen'"
Chris@4 880 $ECHO "$help" 1>&2
Chris@4 881 exit $EXIT_FAILURE
Chris@4 882 fi
Chris@4 883
Chris@4 884 # Change the help message to a mode-specific one.
Chris@4 885 generic_help="$help"
Chris@4 886 help="Try \`$progname --help --mode=$mode' for more information."
Chris@4 887 }
Chris@4 888
Chris@4 889
Chris@4 890 # func_lalib_p file
Chris@4 891 # True iff FILE is a libtool `.la' library or `.lo' object file.
Chris@4 892 # This function is only a basic sanity check; it will hardly flush out
Chris@4 893 # determined imposters.
Chris@4 894 func_lalib_p ()
Chris@4 895 {
Chris@4 896 $SED -e 4q "$1" 2>/dev/null \
Chris@4 897 | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
Chris@4 898 }
Chris@4 899
Chris@4 900 # func_lalib_unsafe_p file
Chris@4 901 # True iff FILE is a libtool `.la' library or `.lo' object file.
Chris@4 902 # This function implements the same check as func_lalib_p without
Chris@4 903 # resorting to external programs. To this end, it redirects stdin and
Chris@4 904 # closes it afterwards, without saving the original file descriptor.
Chris@4 905 # As a safety measure, use it only where a negative result would be
Chris@4 906 # fatal anyway. Works if `file' does not exist.
Chris@4 907 func_lalib_unsafe_p ()
Chris@4 908 {
Chris@4 909 lalib_p=no
Chris@4 910 if test -r "$1" && exec 5<&0 <"$1"; then
Chris@4 911 for lalib_p_l in 1 2 3 4
Chris@4 912 do
Chris@4 913 read lalib_p_line
Chris@4 914 case "$lalib_p_line" in
Chris@4 915 \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
Chris@4 916 esac
Chris@4 917 done
Chris@4 918 exec 0<&5 5<&-
Chris@4 919 fi
Chris@4 920 test "$lalib_p" = yes
Chris@4 921 }
Chris@4 922
Chris@4 923 # func_ltwrapper_script_p file
Chris@4 924 # True iff FILE is a libtool wrapper script
Chris@4 925 # This function is only a basic sanity check; it will hardly flush out
Chris@4 926 # determined imposters.
Chris@4 927 func_ltwrapper_script_p ()
Chris@4 928 {
Chris@4 929 func_lalib_p "$1"
Chris@4 930 }
Chris@4 931
Chris@4 932 # func_ltwrapper_executable_p file
Chris@4 933 # True iff FILE is a libtool wrapper executable
Chris@4 934 # This function is only a basic sanity check; it will hardly flush out
Chris@4 935 # determined imposters.
Chris@4 936 func_ltwrapper_executable_p ()
Chris@4 937 {
Chris@4 938 func_ltwrapper_exec_suffix=
Chris@4 939 case $1 in
Chris@4 940 *.exe) ;;
Chris@4 941 *) func_ltwrapper_exec_suffix=.exe ;;
Chris@4 942 esac
Chris@4 943 $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
Chris@4 944 }
Chris@4 945
Chris@4 946 # func_ltwrapper_scriptname file
Chris@4 947 # Assumes file is an ltwrapper_executable
Chris@4 948 # uses $file to determine the appropriate filename for a
Chris@4 949 # temporary ltwrapper_script.
Chris@4 950 func_ltwrapper_scriptname ()
Chris@4 951 {
Chris@4 952 func_ltwrapper_scriptname_result=""
Chris@4 953 if func_ltwrapper_executable_p "$1"; then
Chris@4 954 func_dirname_and_basename "$1" "" "."
Chris@4 955 func_stripname '' '.exe' "$func_basename_result"
Chris@4 956 func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
Chris@4 957 fi
Chris@4 958 }
Chris@4 959
Chris@4 960 # func_ltwrapper_p file
Chris@4 961 # True iff FILE is a libtool wrapper script or wrapper executable
Chris@4 962 # This function is only a basic sanity check; it will hardly flush out
Chris@4 963 # determined imposters.
Chris@4 964 func_ltwrapper_p ()
Chris@4 965 {
Chris@4 966 func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
Chris@4 967 }
Chris@4 968
Chris@4 969
Chris@4 970 # func_execute_cmds commands fail_cmd
Chris@4 971 # Execute tilde-delimited COMMANDS.
Chris@4 972 # If FAIL_CMD is given, eval that upon failure.
Chris@4 973 # FAIL_CMD may read-access the current command in variable CMD!
Chris@4 974 func_execute_cmds ()
Chris@4 975 {
Chris@4 976 $opt_debug
Chris@4 977 save_ifs=$IFS; IFS='~'
Chris@4 978 for cmd in $1; do
Chris@4 979 IFS=$save_ifs
Chris@4 980 eval cmd=\"$cmd\"
Chris@4 981 func_show_eval "$cmd" "${2-:}"
Chris@4 982 done
Chris@4 983 IFS=$save_ifs
Chris@4 984 }
Chris@4 985
Chris@4 986
Chris@4 987 # func_source file
Chris@4 988 # Source FILE, adding directory component if necessary.
Chris@4 989 # Note that it is not necessary on cygwin/mingw to append a dot to
Chris@4 990 # FILE even if both FILE and FILE.exe exist: automatic-append-.exe
Chris@4 991 # behavior happens only for exec(3), not for open(2)! Also, sourcing
Chris@4 992 # `FILE.' does not work on cygwin managed mounts.
Chris@4 993 func_source ()
Chris@4 994 {
Chris@4 995 $opt_debug
Chris@4 996 case $1 in
Chris@4 997 */* | *\\*) . "$1" ;;
Chris@4 998 *) . "./$1" ;;
Chris@4 999 esac
Chris@4 1000 }
Chris@4 1001
Chris@4 1002
Chris@4 1003 # func_infer_tag arg
Chris@4 1004 # Infer tagged configuration to use if any are available and
Chris@4 1005 # if one wasn't chosen via the "--tag" command line option.
Chris@4 1006 # Only attempt this if the compiler in the base compile
Chris@4 1007 # command doesn't match the default compiler.
Chris@4 1008 # arg is usually of the form 'gcc ...'
Chris@4 1009 func_infer_tag ()
Chris@4 1010 {
Chris@4 1011 $opt_debug
Chris@4 1012 if test -n "$available_tags" && test -z "$tagname"; then
Chris@4 1013 CC_quoted=
Chris@4 1014 for arg in $CC; do
Chris@4 1015 func_quote_for_eval "$arg"
Chris@4 1016 CC_quoted="$CC_quoted $func_quote_for_eval_result"
Chris@4 1017 done
Chris@4 1018 case $@ in
Chris@4 1019 # Blanks in the command may have been stripped by the calling shell,
Chris@4 1020 # but not from the CC environment variable when configure was run.
Chris@4 1021 " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
Chris@4 1022 # Blanks at the start of $base_compile will cause this to fail
Chris@4 1023 # if we don't check for them as well.
Chris@4 1024 *)
Chris@4 1025 for z in $available_tags; do
Chris@4 1026 if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
Chris@4 1027 # Evaluate the configuration.
Chris@4 1028 eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
Chris@4 1029 CC_quoted=
Chris@4 1030 for arg in $CC; do
Chris@4 1031 # Double-quote args containing other shell metacharacters.
Chris@4 1032 func_quote_for_eval "$arg"
Chris@4 1033 CC_quoted="$CC_quoted $func_quote_for_eval_result"
Chris@4 1034 done
Chris@4 1035 case "$@ " in
Chris@4 1036 " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
Chris@4 1037 # The compiler in the base compile command matches
Chris@4 1038 # the one in the tagged configuration.
Chris@4 1039 # Assume this is the tagged configuration we want.
Chris@4 1040 tagname=$z
Chris@4 1041 break
Chris@4 1042 ;;
Chris@4 1043 esac
Chris@4 1044 fi
Chris@4 1045 done
Chris@4 1046 # If $tagname still isn't set, then no tagged configuration
Chris@4 1047 # was found and let the user know that the "--tag" command
Chris@4 1048 # line option must be used.
Chris@4 1049 if test -z "$tagname"; then
Chris@4 1050 func_echo "unable to infer tagged configuration"
Chris@4 1051 func_fatal_error "specify a tag with \`--tag'"
Chris@4 1052 # else
Chris@4 1053 # func_verbose "using $tagname tagged configuration"
Chris@4 1054 fi
Chris@4 1055 ;;
Chris@4 1056 esac
Chris@4 1057 fi
Chris@4 1058 }
Chris@4 1059
Chris@4 1060
Chris@4 1061
Chris@4 1062 # func_write_libtool_object output_name pic_name nonpic_name
Chris@4 1063 # Create a libtool object file (analogous to a ".la" file),
Chris@4 1064 # but don't create it if we're doing a dry run.
Chris@4 1065 func_write_libtool_object ()
Chris@4 1066 {
Chris@4 1067 write_libobj=${1}
Chris@4 1068 if test "$build_libtool_libs" = yes; then
Chris@4 1069 write_lobj=\'${2}\'
Chris@4 1070 else
Chris@4 1071 write_lobj=none
Chris@4 1072 fi
Chris@4 1073
Chris@4 1074 if test "$build_old_libs" = yes; then
Chris@4 1075 write_oldobj=\'${3}\'
Chris@4 1076 else
Chris@4 1077 write_oldobj=none
Chris@4 1078 fi
Chris@4 1079
Chris@4 1080 $opt_dry_run || {
Chris@4 1081 cat >${write_libobj}T <<EOF
Chris@4 1082 # $write_libobj - a libtool object file
Chris@4 1083 # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
Chris@4 1084 #
Chris@4 1085 # Please DO NOT delete this file!
Chris@4 1086 # It is necessary for linking the library.
Chris@4 1087
Chris@4 1088 # Name of the PIC object.
Chris@4 1089 pic_object=$write_lobj
Chris@4 1090
Chris@4 1091 # Name of the non-PIC object
Chris@4 1092 non_pic_object=$write_oldobj
Chris@4 1093
Chris@4 1094 EOF
Chris@4 1095 $MV "${write_libobj}T" "${write_libobj}"
Chris@4 1096 }
Chris@4 1097 }
Chris@4 1098
Chris@4 1099 # func_mode_compile arg...
Chris@4 1100 func_mode_compile ()
Chris@4 1101 {
Chris@4 1102 $opt_debug
Chris@4 1103 # Get the compilation command and the source file.
Chris@4 1104 base_compile=
Chris@4 1105 srcfile="$nonopt" # always keep a non-empty value in "srcfile"
Chris@4 1106 suppress_opt=yes
Chris@4 1107 suppress_output=
Chris@4 1108 arg_mode=normal
Chris@4 1109 libobj=
Chris@4 1110 later=
Chris@4 1111 pie_flag=
Chris@4 1112
Chris@4 1113 for arg
Chris@4 1114 do
Chris@4 1115 case $arg_mode in
Chris@4 1116 arg )
Chris@4 1117 # do not "continue". Instead, add this to base_compile
Chris@4 1118 lastarg="$arg"
Chris@4 1119 arg_mode=normal
Chris@4 1120 ;;
Chris@4 1121
Chris@4 1122 target )
Chris@4 1123 libobj="$arg"
Chris@4 1124 arg_mode=normal
Chris@4 1125 continue
Chris@4 1126 ;;
Chris@4 1127
Chris@4 1128 normal )
Chris@4 1129 # Accept any command-line options.
Chris@4 1130 case $arg in
Chris@4 1131 -o)
Chris@4 1132 test -n "$libobj" && \
Chris@4 1133 func_fatal_error "you cannot specify \`-o' more than once"
Chris@4 1134 arg_mode=target
Chris@4 1135 continue
Chris@4 1136 ;;
Chris@4 1137
Chris@4 1138 -pie | -fpie | -fPIE)
Chris@4 1139 pie_flag="$pie_flag $arg"
Chris@4 1140 continue
Chris@4 1141 ;;
Chris@4 1142
Chris@4 1143 -shared | -static | -prefer-pic | -prefer-non-pic)
Chris@4 1144 later="$later $arg"
Chris@4 1145 continue
Chris@4 1146 ;;
Chris@4 1147
Chris@4 1148 -no-suppress)
Chris@4 1149 suppress_opt=no
Chris@4 1150 continue
Chris@4 1151 ;;
Chris@4 1152
Chris@4 1153 -Xcompiler)
Chris@4 1154 arg_mode=arg # the next one goes into the "base_compile" arg list
Chris@4 1155 continue # The current "srcfile" will either be retained or
Chris@4 1156 ;; # replaced later. I would guess that would be a bug.
Chris@4 1157
Chris@4 1158 -Wc,*)
Chris@4 1159 func_stripname '-Wc,' '' "$arg"
Chris@4 1160 args=$func_stripname_result
Chris@4 1161 lastarg=
Chris@4 1162 save_ifs="$IFS"; IFS=','
Chris@4 1163 for arg in $args; do
Chris@4 1164 IFS="$save_ifs"
Chris@4 1165 func_quote_for_eval "$arg"
Chris@4 1166 lastarg="$lastarg $func_quote_for_eval_result"
Chris@4 1167 done
Chris@4 1168 IFS="$save_ifs"
Chris@4 1169 func_stripname ' ' '' "$lastarg"
Chris@4 1170 lastarg=$func_stripname_result
Chris@4 1171
Chris@4 1172 # Add the arguments to base_compile.
Chris@4 1173 base_compile="$base_compile $lastarg"
Chris@4 1174 continue
Chris@4 1175 ;;
Chris@4 1176
Chris@4 1177 *)
Chris@4 1178 # Accept the current argument as the source file.
Chris@4 1179 # The previous "srcfile" becomes the current argument.
Chris@4 1180 #
Chris@4 1181 lastarg="$srcfile"
Chris@4 1182 srcfile="$arg"
Chris@4 1183 ;;
Chris@4 1184 esac # case $arg
Chris@4 1185 ;;
Chris@4 1186 esac # case $arg_mode
Chris@4 1187
Chris@4 1188 # Aesthetically quote the previous argument.
Chris@4 1189 func_quote_for_eval "$lastarg"
Chris@4 1190 base_compile="$base_compile $func_quote_for_eval_result"
Chris@4 1191 done # for arg
Chris@4 1192
Chris@4 1193 case $arg_mode in
Chris@4 1194 arg)
Chris@4 1195 func_fatal_error "you must specify an argument for -Xcompile"
Chris@4 1196 ;;
Chris@4 1197 target)
Chris@4 1198 func_fatal_error "you must specify a target with \`-o'"
Chris@4 1199 ;;
Chris@4 1200 *)
Chris@4 1201 # Get the name of the library object.
Chris@4 1202 test -z "$libobj" && {
Chris@4 1203 func_basename "$srcfile"
Chris@4 1204 libobj="$func_basename_result"
Chris@4 1205 }
Chris@4 1206 ;;
Chris@4 1207 esac
Chris@4 1208
Chris@4 1209 # Recognize several different file suffixes.
Chris@4 1210 # If the user specifies -o file.o, it is replaced with file.lo
Chris@4 1211 case $libobj in
Chris@4 1212 *.[cCFSifmso] | \
Chris@4 1213 *.ada | *.adb | *.ads | *.asm | \
Chris@4 1214 *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
Chris@4 1215 *.[fF][09]? | *.for | *.java | *.obj | *.sx)
Chris@4 1216 func_xform "$libobj"
Chris@4 1217 libobj=$func_xform_result
Chris@4 1218 ;;
Chris@4 1219 esac
Chris@4 1220
Chris@4 1221 case $libobj in
Chris@4 1222 *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
Chris@4 1223 *)
Chris@4 1224 func_fatal_error "cannot determine name of library object from \`$libobj'"
Chris@4 1225 ;;
Chris@4 1226 esac
Chris@4 1227
Chris@4 1228 func_infer_tag $base_compile
Chris@4 1229
Chris@4 1230 for arg in $later; do
Chris@4 1231 case $arg in
Chris@4 1232 -shared)
Chris@4 1233 test "$build_libtool_libs" != yes && \
Chris@4 1234 func_fatal_configuration "can not build a shared library"
Chris@4 1235 build_old_libs=no
Chris@4 1236 continue
Chris@4 1237 ;;
Chris@4 1238
Chris@4 1239 -static)
Chris@4 1240 build_libtool_libs=no
Chris@4 1241 build_old_libs=yes
Chris@4 1242 continue
Chris@4 1243 ;;
Chris@4 1244
Chris@4 1245 -prefer-pic)
Chris@4 1246 pic_mode=yes
Chris@4 1247 continue
Chris@4 1248 ;;
Chris@4 1249
Chris@4 1250 -prefer-non-pic)
Chris@4 1251 pic_mode=no
Chris@4 1252 continue
Chris@4 1253 ;;
Chris@4 1254 esac
Chris@4 1255 done
Chris@4 1256
Chris@4 1257 func_quote_for_eval "$libobj"
Chris@4 1258 test "X$libobj" != "X$func_quote_for_eval_result" \
Chris@4 1259 && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
Chris@4 1260 && func_warning "libobj name \`$libobj' may not contain shell special characters."
Chris@4 1261 func_dirname_and_basename "$obj" "/" ""
Chris@4 1262 objname="$func_basename_result"
Chris@4 1263 xdir="$func_dirname_result"
Chris@4 1264 lobj=${xdir}$objdir/$objname
Chris@4 1265
Chris@4 1266 test -z "$base_compile" && \
Chris@4 1267 func_fatal_help "you must specify a compilation command"
Chris@4 1268
Chris@4 1269 # Delete any leftover library objects.
Chris@4 1270 if test "$build_old_libs" = yes; then
Chris@4 1271 removelist="$obj $lobj $libobj ${libobj}T"
Chris@4 1272 else
Chris@4 1273 removelist="$lobj $libobj ${libobj}T"
Chris@4 1274 fi
Chris@4 1275
Chris@4 1276 # On Cygwin there's no "real" PIC flag so we must build both object types
Chris@4 1277 case $host_os in
Chris@4 1278 cygwin* | mingw* | pw32* | os2*)
Chris@4 1279 pic_mode=default
Chris@4 1280 ;;
Chris@4 1281 esac
Chris@4 1282 if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
Chris@4 1283 # non-PIC code in shared libraries is not supported
Chris@4 1284 pic_mode=default
Chris@4 1285 fi
Chris@4 1286
Chris@4 1287 # Calculate the filename of the output object if compiler does
Chris@4 1288 # not support -o with -c
Chris@4 1289 if test "$compiler_c_o" = no; then
Chris@4 1290 output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
Chris@4 1291 lockfile="$output_obj.lock"
Chris@4 1292 else
Chris@4 1293 output_obj=
Chris@4 1294 need_locks=no
Chris@4 1295 lockfile=
Chris@4 1296 fi
Chris@4 1297
Chris@4 1298 # Lock this critical section if it is needed
Chris@4 1299 # We use this script file to make the link, it avoids creating a new file
Chris@4 1300 if test "$need_locks" = yes; then
Chris@4 1301 until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
Chris@4 1302 func_echo "Waiting for $lockfile to be removed"
Chris@4 1303 sleep 2
Chris@4 1304 done
Chris@4 1305 elif test "$need_locks" = warn; then
Chris@4 1306 if test -f "$lockfile"; then
Chris@4 1307 $ECHO "\
Chris@4 1308 *** ERROR, $lockfile exists and contains:
Chris@4 1309 `cat $lockfile 2>/dev/null`
Chris@4 1310
Chris@4 1311 This indicates that another process is trying to use the same
Chris@4 1312 temporary object file, and libtool could not work around it because
Chris@4 1313 your compiler does not support \`-c' and \`-o' together. If you
Chris@4 1314 repeat this compilation, it may succeed, by chance, but you had better
Chris@4 1315 avoid parallel builds (make -j) in this platform, or get a better
Chris@4 1316 compiler."
Chris@4 1317
Chris@4 1318 $opt_dry_run || $RM $removelist
Chris@4 1319 exit $EXIT_FAILURE
Chris@4 1320 fi
Chris@4 1321 removelist="$removelist $output_obj"
Chris@4 1322 $ECHO "$srcfile" > "$lockfile"
Chris@4 1323 fi
Chris@4 1324
Chris@4 1325 $opt_dry_run || $RM $removelist
Chris@4 1326 removelist="$removelist $lockfile"
Chris@4 1327 trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
Chris@4 1328
Chris@4 1329 if test -n "$fix_srcfile_path"; then
Chris@4 1330 eval srcfile=\"$fix_srcfile_path\"
Chris@4 1331 fi
Chris@4 1332 func_quote_for_eval "$srcfile"
Chris@4 1333 qsrcfile=$func_quote_for_eval_result
Chris@4 1334
Chris@4 1335 # Only build a PIC object if we are building libtool libraries.
Chris@4 1336 if test "$build_libtool_libs" = yes; then
Chris@4 1337 # Without this assignment, base_compile gets emptied.
Chris@4 1338 fbsd_hideous_sh_bug=$base_compile
Chris@4 1339
Chris@4 1340 if test "$pic_mode" != no; then
Chris@4 1341 command="$base_compile $qsrcfile $pic_flag"
Chris@4 1342 else
Chris@4 1343 # Don't build PIC code
Chris@4 1344 command="$base_compile $qsrcfile"
Chris@4 1345 fi
Chris@4 1346
Chris@4 1347 func_mkdir_p "$xdir$objdir"
Chris@4 1348
Chris@4 1349 if test -z "$output_obj"; then
Chris@4 1350 # Place PIC objects in $objdir
Chris@4 1351 command="$command -o $lobj"
Chris@4 1352 fi
Chris@4 1353
Chris@4 1354 func_show_eval_locale "$command" \
Chris@4 1355 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
Chris@4 1356
Chris@4 1357 if test "$need_locks" = warn &&
Chris@4 1358 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
Chris@4 1359 $ECHO "\
Chris@4 1360 *** ERROR, $lockfile contains:
Chris@4 1361 `cat $lockfile 2>/dev/null`
Chris@4 1362
Chris@4 1363 but it should contain:
Chris@4 1364 $srcfile
Chris@4 1365
Chris@4 1366 This indicates that another process is trying to use the same
Chris@4 1367 temporary object file, and libtool could not work around it because
Chris@4 1368 your compiler does not support \`-c' and \`-o' together. If you
Chris@4 1369 repeat this compilation, it may succeed, by chance, but you had better
Chris@4 1370 avoid parallel builds (make -j) in this platform, or get a better
Chris@4 1371 compiler."
Chris@4 1372
Chris@4 1373 $opt_dry_run || $RM $removelist
Chris@4 1374 exit $EXIT_FAILURE
Chris@4 1375 fi
Chris@4 1376
Chris@4 1377 # Just move the object if needed, then go on to compile the next one
Chris@4 1378 if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
Chris@4 1379 func_show_eval '$MV "$output_obj" "$lobj"' \
Chris@4 1380 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
Chris@4 1381 fi
Chris@4 1382
Chris@4 1383 # Allow error messages only from the first compilation.
Chris@4 1384 if test "$suppress_opt" = yes; then
Chris@4 1385 suppress_output=' >/dev/null 2>&1'
Chris@4 1386 fi
Chris@4 1387 fi
Chris@4 1388
Chris@4 1389 # Only build a position-dependent object if we build old libraries.
Chris@4 1390 if test "$build_old_libs" = yes; then
Chris@4 1391 if test "$pic_mode" != yes; then
Chris@4 1392 # Don't build PIC code
Chris@4 1393 command="$base_compile $qsrcfile$pie_flag"
Chris@4 1394 else
Chris@4 1395 command="$base_compile $qsrcfile $pic_flag"
Chris@4 1396 fi
Chris@4 1397 if test "$compiler_c_o" = yes; then
Chris@4 1398 command="$command -o $obj"
Chris@4 1399 fi
Chris@4 1400
Chris@4 1401 # Suppress compiler output if we already did a PIC compilation.
Chris@4 1402 command="$command$suppress_output"
Chris@4 1403 func_show_eval_locale "$command" \
Chris@4 1404 '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
Chris@4 1405
Chris@4 1406 if test "$need_locks" = warn &&
Chris@4 1407 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
Chris@4 1408 $ECHO "\
Chris@4 1409 *** ERROR, $lockfile contains:
Chris@4 1410 `cat $lockfile 2>/dev/null`
Chris@4 1411
Chris@4 1412 but it should contain:
Chris@4 1413 $srcfile
Chris@4 1414
Chris@4 1415 This indicates that another process is trying to use the same
Chris@4 1416 temporary object file, and libtool could not work around it because
Chris@4 1417 your compiler does not support \`-c' and \`-o' together. If you
Chris@4 1418 repeat this compilation, it may succeed, by chance, but you had better
Chris@4 1419 avoid parallel builds (make -j) in this platform, or get a better
Chris@4 1420 compiler."
Chris@4 1421
Chris@4 1422 $opt_dry_run || $RM $removelist
Chris@4 1423 exit $EXIT_FAILURE
Chris@4 1424 fi
Chris@4 1425
Chris@4 1426 # Just move the object if needed
Chris@4 1427 if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
Chris@4 1428 func_show_eval '$MV "$output_obj" "$obj"' \
Chris@4 1429 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
Chris@4 1430 fi
Chris@4 1431 fi
Chris@4 1432
Chris@4 1433 $opt_dry_run || {
Chris@4 1434 func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
Chris@4 1435
Chris@4 1436 # Unlock the critical section if it was locked
Chris@4 1437 if test "$need_locks" != no; then
Chris@4 1438 removelist=$lockfile
Chris@4 1439 $RM "$lockfile"
Chris@4 1440 fi
Chris@4 1441 }
Chris@4 1442
Chris@4 1443 exit $EXIT_SUCCESS
Chris@4 1444 }
Chris@4 1445
Chris@4 1446 $opt_help || {
Chris@4 1447 test "$mode" = compile && func_mode_compile ${1+"$@"}
Chris@4 1448 }
Chris@4 1449
Chris@4 1450 func_mode_help ()
Chris@4 1451 {
Chris@4 1452 # We need to display help for each of the modes.
Chris@4 1453 case $mode in
Chris@4 1454 "")
Chris@4 1455 # Generic help is extracted from the usage comments
Chris@4 1456 # at the start of this file.
Chris@4 1457 func_help
Chris@4 1458 ;;
Chris@4 1459
Chris@4 1460 clean)
Chris@4 1461 $ECHO \
Chris@4 1462 "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
Chris@4 1463
Chris@4 1464 Remove files from the build directory.
Chris@4 1465
Chris@4 1466 RM is the name of the program to use to delete files associated with each FILE
Chris@4 1467 (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
Chris@4 1468 to RM.
Chris@4 1469
Chris@4 1470 If FILE is a libtool library, object or program, all the files associated
Chris@4 1471 with it are deleted. Otherwise, only FILE itself is deleted using RM."
Chris@4 1472 ;;
Chris@4 1473
Chris@4 1474 compile)
Chris@4 1475 $ECHO \
Chris@4 1476 "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
Chris@4 1477
Chris@4 1478 Compile a source file into a libtool library object.
Chris@4 1479
Chris@4 1480 This mode accepts the following additional options:
Chris@4 1481
Chris@4 1482 -o OUTPUT-FILE set the output file name to OUTPUT-FILE
Chris@4 1483 -no-suppress do not suppress compiler output for multiple passes
Chris@4 1484 -prefer-pic try to building PIC objects only
Chris@4 1485 -prefer-non-pic try to building non-PIC objects only
Chris@4 1486 -shared do not build a \`.o' file suitable for static linking
Chris@4 1487 -static only build a \`.o' file suitable for static linking
Chris@4 1488
Chris@4 1489 COMPILE-COMMAND is a command to be used in creating a \`standard' object file
Chris@4 1490 from the given SOURCEFILE.
Chris@4 1491
Chris@4 1492 The output file name is determined by removing the directory component from
Chris@4 1493 SOURCEFILE, then substituting the C source code suffix \`.c' with the
Chris@4 1494 library object suffix, \`.lo'."
Chris@4 1495 ;;
Chris@4 1496
Chris@4 1497 execute)
Chris@4 1498 $ECHO \
Chris@4 1499 "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
Chris@4 1500
Chris@4 1501 Automatically set library path, then run a program.
Chris@4 1502
Chris@4 1503 This mode accepts the following additional options:
Chris@4 1504
Chris@4 1505 -dlopen FILE add the directory containing FILE to the library path
Chris@4 1506
Chris@4 1507 This mode sets the library path environment variable according to \`-dlopen'
Chris@4 1508 flags.
Chris@4 1509
Chris@4 1510 If any of the ARGS are libtool executable wrappers, then they are translated
Chris@4 1511 into their corresponding uninstalled binary, and any of their required library
Chris@4 1512 directories are added to the library path.
Chris@4 1513
Chris@4 1514 Then, COMMAND is executed, with ARGS as arguments."
Chris@4 1515 ;;
Chris@4 1516
Chris@4 1517 finish)
Chris@4 1518 $ECHO \
Chris@4 1519 "Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
Chris@4 1520
Chris@4 1521 Complete the installation of libtool libraries.
Chris@4 1522
Chris@4 1523 Each LIBDIR is a directory that contains libtool libraries.
Chris@4 1524
Chris@4 1525 The commands that this mode executes may require superuser privileges. Use
Chris@4 1526 the \`--dry-run' option if you just want to see what would be executed."
Chris@4 1527 ;;
Chris@4 1528
Chris@4 1529 install)
Chris@4 1530 $ECHO \
Chris@4 1531 "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
Chris@4 1532
Chris@4 1533 Install executables or libraries.
Chris@4 1534
Chris@4 1535 INSTALL-COMMAND is the installation command. The first component should be
Chris@4 1536 either the \`install' or \`cp' program.
Chris@4 1537
Chris@4 1538 The following components of INSTALL-COMMAND are treated specially:
Chris@4 1539
Chris@4 1540 -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation
Chris@4 1541
Chris@4 1542 The rest of the components are interpreted as arguments to that command (only
Chris@4 1543 BSD-compatible install options are recognized)."
Chris@4 1544 ;;
Chris@4 1545
Chris@4 1546 link)
Chris@4 1547 $ECHO \
Chris@4 1548 "Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
Chris@4 1549
Chris@4 1550 Link object files or libraries together to form another library, or to
Chris@4 1551 create an executable program.
Chris@4 1552
Chris@4 1553 LINK-COMMAND is a command using the C compiler that you would use to create
Chris@4 1554 a program from several object files.
Chris@4 1555
Chris@4 1556 The following components of LINK-COMMAND are treated specially:
Chris@4 1557
Chris@4 1558 -all-static do not do any dynamic linking at all
Chris@4 1559 -avoid-version do not add a version suffix if possible
Chris@4 1560 -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
Chris@4 1561 -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
Chris@4 1562 -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
Chris@4 1563 -export-symbols SYMFILE
Chris@4 1564 try to export only the symbols listed in SYMFILE
Chris@4 1565 -export-symbols-regex REGEX
Chris@4 1566 try to export only the symbols matching REGEX
Chris@4 1567 -LLIBDIR search LIBDIR for required installed libraries
Chris@4 1568 -lNAME OUTPUT-FILE requires the installed library libNAME
Chris@4 1569 -module build a library that can dlopened
Chris@4 1570 -no-fast-install disable the fast-install mode
Chris@4 1571 -no-install link a not-installable executable
Chris@4 1572 -no-undefined declare that a library does not refer to external symbols
Chris@4 1573 -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
Chris@4 1574 -objectlist FILE Use a list of object files found in FILE to specify objects
Chris@4 1575 -precious-files-regex REGEX
Chris@4 1576 don't remove output files matching REGEX
Chris@4 1577 -release RELEASE specify package release information
Chris@4 1578 -rpath LIBDIR the created library will eventually be installed in LIBDIR
Chris@4 1579 -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
Chris@4 1580 -shared only do dynamic linking of libtool libraries
Chris@4 1581 -shrext SUFFIX override the standard shared library file extension
Chris@4 1582 -static do not do any dynamic linking of uninstalled libtool libraries
Chris@4 1583 -static-libtool-libs
Chris@4 1584 do not do any dynamic linking of libtool libraries
Chris@4 1585 -version-info CURRENT[:REVISION[:AGE]]
Chris@4 1586 specify library version info [each variable defaults to 0]
Chris@4 1587 -weak LIBNAME declare that the target provides the LIBNAME interface
Chris@4 1588
Chris@4 1589 All other options (arguments beginning with \`-') are ignored.
Chris@4 1590
Chris@4 1591 Every other argument is treated as a filename. Files ending in \`.la' are
Chris@4 1592 treated as uninstalled libtool libraries, other files are standard or library
Chris@4 1593 object files.
Chris@4 1594
Chris@4 1595 If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
Chris@4 1596 only library objects (\`.lo' files) may be specified, and \`-rpath' is
Chris@4 1597 required, except when creating a convenience library.
Chris@4 1598
Chris@4 1599 If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
Chris@4 1600 using \`ar' and \`ranlib', or on Windows using \`lib'.
Chris@4 1601
Chris@4 1602 If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
Chris@4 1603 is created, otherwise an executable program is created."
Chris@4 1604 ;;
Chris@4 1605
Chris@4 1606 uninstall)
Chris@4 1607 $ECHO \
Chris@4 1608 "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
Chris@4 1609
Chris@4 1610 Remove libraries from an installation directory.
Chris@4 1611
Chris@4 1612 RM is the name of the program to use to delete files associated with each FILE
Chris@4 1613 (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
Chris@4 1614 to RM.
Chris@4 1615
Chris@4 1616 If FILE is a libtool library, all the files associated with it are deleted.
Chris@4 1617 Otherwise, only FILE itself is deleted using RM."
Chris@4 1618 ;;
Chris@4 1619
Chris@4 1620 *)
Chris@4 1621 func_fatal_help "invalid operation mode \`$mode'"
Chris@4 1622 ;;
Chris@4 1623 esac
Chris@4 1624
Chris@4 1625 $ECHO
Chris@4 1626 $ECHO "Try \`$progname --help' for more information about other modes."
Chris@4 1627
Chris@4 1628 exit $?
Chris@4 1629 }
Chris@4 1630
Chris@4 1631 # Now that we've collected a possible --mode arg, show help if necessary
Chris@4 1632 $opt_help && func_mode_help
Chris@4 1633
Chris@4 1634
Chris@4 1635 # func_mode_execute arg...
Chris@4 1636 func_mode_execute ()
Chris@4 1637 {
Chris@4 1638 $opt_debug
Chris@4 1639 # The first argument is the command name.
Chris@4 1640 cmd="$nonopt"
Chris@4 1641 test -z "$cmd" && \
Chris@4 1642 func_fatal_help "you must specify a COMMAND"
Chris@4 1643
Chris@4 1644 # Handle -dlopen flags immediately.
Chris@4 1645 for file in $execute_dlfiles; do
Chris@4 1646 test -f "$file" \
Chris@4 1647 || func_fatal_help "\`$file' is not a file"
Chris@4 1648
Chris@4 1649 dir=
Chris@4 1650 case $file in
Chris@4 1651 *.la)
Chris@4 1652 # Check to see that this really is a libtool archive.
Chris@4 1653 func_lalib_unsafe_p "$file" \
Chris@4 1654 || func_fatal_help "\`$lib' is not a valid libtool archive"
Chris@4 1655
Chris@4 1656 # Read the libtool library.
Chris@4 1657 dlname=
Chris@4 1658 library_names=
Chris@4 1659 func_source "$file"
Chris@4 1660
Chris@4 1661 # Skip this library if it cannot be dlopened.
Chris@4 1662 if test -z "$dlname"; then
Chris@4 1663 # Warn if it was a shared library.
Chris@4 1664 test -n "$library_names" && \
Chris@4 1665 func_warning "\`$file' was not linked with \`-export-dynamic'"
Chris@4 1666 continue
Chris@4 1667 fi
Chris@4 1668
Chris@4 1669 func_dirname "$file" "" "."
Chris@4 1670 dir="$func_dirname_result"
Chris@4 1671
Chris@4 1672 if test -f "$dir/$objdir/$dlname"; then
Chris@4 1673 dir="$dir/$objdir"
Chris@4 1674 else
Chris@4 1675 if test ! -f "$dir/$dlname"; then
Chris@4 1676 func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
Chris@4 1677 fi
Chris@4 1678 fi
Chris@4 1679 ;;
Chris@4 1680
Chris@4 1681 *.lo)
Chris@4 1682 # Just add the directory containing the .lo file.
Chris@4 1683 func_dirname "$file" "" "."
Chris@4 1684 dir="$func_dirname_result"
Chris@4 1685 ;;
Chris@4 1686
Chris@4 1687 *)
Chris@4 1688 func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
Chris@4 1689 continue
Chris@4 1690 ;;
Chris@4 1691 esac
Chris@4 1692
Chris@4 1693 # Get the absolute pathname.
Chris@4 1694 absdir=`cd "$dir" && pwd`
Chris@4 1695 test -n "$absdir" && dir="$absdir"
Chris@4 1696
Chris@4 1697 # Now add the directory to shlibpath_var.
Chris@4 1698 if eval "test -z \"\$$shlibpath_var\""; then
Chris@4 1699 eval "$shlibpath_var=\"\$dir\""
Chris@4 1700 else
Chris@4 1701 eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
Chris@4 1702 fi
Chris@4 1703 done
Chris@4 1704
Chris@4 1705 # This variable tells wrapper scripts just to set shlibpath_var
Chris@4 1706 # rather than running their programs.
Chris@4 1707 libtool_execute_magic="$magic"
Chris@4 1708
Chris@4 1709 # Check if any of the arguments is a wrapper script.
Chris@4 1710 args=
Chris@4 1711 for file
Chris@4 1712 do
Chris@4 1713 case $file in
Chris@4 1714 -*) ;;
Chris@4 1715 *)
Chris@4 1716 # Do a test to see if this is really a libtool program.
Chris@4 1717 if func_ltwrapper_script_p "$file"; then
Chris@4 1718 func_source "$file"
Chris@4 1719 # Transform arg to wrapped name.
Chris@4 1720 file="$progdir/$program"
Chris@4 1721 elif func_ltwrapper_executable_p "$file"; then
Chris@4 1722 func_ltwrapper_scriptname "$file"
Chris@4 1723 func_source "$func_ltwrapper_scriptname_result"
Chris@4 1724 # Transform arg to wrapped name.
Chris@4 1725 file="$progdir/$program"
Chris@4 1726 fi
Chris@4 1727 ;;
Chris@4 1728 esac
Chris@4 1729 # Quote arguments (to preserve shell metacharacters).
Chris@4 1730 func_quote_for_eval "$file"
Chris@4 1731 args="$args $func_quote_for_eval_result"
Chris@4 1732 done
Chris@4 1733
Chris@4 1734 if test "X$opt_dry_run" = Xfalse; then
Chris@4 1735 if test -n "$shlibpath_var"; then
Chris@4 1736 # Export the shlibpath_var.
Chris@4 1737 eval "export $shlibpath_var"
Chris@4 1738 fi
Chris@4 1739
Chris@4 1740 # Restore saved environment variables
Chris@4 1741 for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
Chris@4 1742 do
Chris@4 1743 eval "if test \"\${save_$lt_var+set}\" = set; then
Chris@4 1744 $lt_var=\$save_$lt_var; export $lt_var
Chris@4 1745 else
Chris@4 1746 $lt_unset $lt_var
Chris@4 1747 fi"
Chris@4 1748 done
Chris@4 1749
Chris@4 1750 # Now prepare to actually exec the command.
Chris@4 1751 exec_cmd="\$cmd$args"
Chris@4 1752 else
Chris@4 1753 # Display what would be done.
Chris@4 1754 if test -n "$shlibpath_var"; then
Chris@4 1755 eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
Chris@4 1756 $ECHO "export $shlibpath_var"
Chris@4 1757 fi
Chris@4 1758 $ECHO "$cmd$args"
Chris@4 1759 exit $EXIT_SUCCESS
Chris@4 1760 fi
Chris@4 1761 }
Chris@4 1762
Chris@4 1763 test "$mode" = execute && func_mode_execute ${1+"$@"}
Chris@4 1764
Chris@4 1765
Chris@4 1766 # func_mode_finish arg...
Chris@4 1767 func_mode_finish ()
Chris@4 1768 {
Chris@4 1769 $opt_debug
Chris@4 1770 libdirs="$nonopt"
Chris@4 1771 admincmds=
Chris@4 1772
Chris@4 1773 if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
Chris@4 1774 for dir
Chris@4 1775 do
Chris@4 1776 libdirs="$libdirs $dir"
Chris@4 1777 done
Chris@4 1778
Chris@4 1779 for libdir in $libdirs; do
Chris@4 1780 if test -n "$finish_cmds"; then
Chris@4 1781 # Do each command in the finish commands.
Chris@4 1782 func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
Chris@4 1783 '"$cmd"'"'
Chris@4 1784 fi
Chris@4 1785 if test -n "$finish_eval"; then
Chris@4 1786 # Do the single finish_eval.
Chris@4 1787 eval cmds=\"$finish_eval\"
Chris@4 1788 $opt_dry_run || eval "$cmds" || admincmds="$admincmds
Chris@4 1789 $cmds"
Chris@4 1790 fi
Chris@4 1791 done
Chris@4 1792 fi
Chris@4 1793
Chris@4 1794 # Exit here if they wanted silent mode.
Chris@4 1795 $opt_silent && exit $EXIT_SUCCESS
Chris@4 1796
Chris@4 1797 $ECHO "X----------------------------------------------------------------------" | $Xsed
Chris@4 1798 $ECHO "Libraries have been installed in:"
Chris@4 1799 for libdir in $libdirs; do
Chris@4 1800 $ECHO " $libdir"
Chris@4 1801 done
Chris@4 1802 $ECHO
Chris@4 1803 $ECHO "If you ever happen to want to link against installed libraries"
Chris@4 1804 $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
Chris@4 1805 $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
Chris@4 1806 $ECHO "flag during linking and do at least one of the following:"
Chris@4 1807 if test -n "$shlibpath_var"; then
Chris@4 1808 $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable"
Chris@4 1809 $ECHO " during execution"
Chris@4 1810 fi
Chris@4 1811 if test -n "$runpath_var"; then
Chris@4 1812 $ECHO " - add LIBDIR to the \`$runpath_var' environment variable"
Chris@4 1813 $ECHO " during linking"
Chris@4 1814 fi
Chris@4 1815 if test -n "$hardcode_libdir_flag_spec"; then
Chris@4 1816 libdir=LIBDIR
Chris@4 1817 eval flag=\"$hardcode_libdir_flag_spec\"
Chris@4 1818
Chris@4 1819 $ECHO " - use the \`$flag' linker flag"
Chris@4 1820 fi
Chris@4 1821 if test -n "$admincmds"; then
Chris@4 1822 $ECHO " - have your system administrator run these commands:$admincmds"
Chris@4 1823 fi
Chris@4 1824 if test -f /etc/ld.so.conf; then
Chris@4 1825 $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
Chris@4 1826 fi
Chris@4 1827 $ECHO
Chris@4 1828
Chris@4 1829 $ECHO "See any operating system documentation about shared libraries for"
Chris@4 1830 case $host in
Chris@4 1831 solaris2.[6789]|solaris2.1[0-9])
Chris@4 1832 $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
Chris@4 1833 $ECHO "pages."
Chris@4 1834 ;;
Chris@4 1835 *)
Chris@4 1836 $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
Chris@4 1837 ;;
Chris@4 1838 esac
Chris@4 1839 $ECHO "X----------------------------------------------------------------------" | $Xsed
Chris@4 1840 exit $EXIT_SUCCESS
Chris@4 1841 }
Chris@4 1842
Chris@4 1843 test "$mode" = finish && func_mode_finish ${1+"$@"}
Chris@4 1844
Chris@4 1845
Chris@4 1846 # func_mode_install arg...
Chris@4 1847 func_mode_install ()
Chris@4 1848 {
Chris@4 1849 $opt_debug
Chris@4 1850 # There may be an optional sh(1) argument at the beginning of
Chris@4 1851 # install_prog (especially on Windows NT).
Chris@4 1852 if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
Chris@4 1853 # Allow the use of GNU shtool's install command.
Chris@4 1854 $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
Chris@4 1855 # Aesthetically quote it.
Chris@4 1856 func_quote_for_eval "$nonopt"
Chris@4 1857 install_prog="$func_quote_for_eval_result "
Chris@4 1858 arg=$1
Chris@4 1859 shift
Chris@4 1860 else
Chris@4 1861 install_prog=
Chris@4 1862 arg=$nonopt
Chris@4 1863 fi
Chris@4 1864
Chris@4 1865 # The real first argument should be the name of the installation program.
Chris@4 1866 # Aesthetically quote it.
Chris@4 1867 func_quote_for_eval "$arg"
Chris@4 1868 install_prog="$install_prog$func_quote_for_eval_result"
Chris@4 1869
Chris@4 1870 # We need to accept at least all the BSD install flags.
Chris@4 1871 dest=
Chris@4 1872 files=
Chris@4 1873 opts=
Chris@4 1874 prev=
Chris@4 1875 install_type=
Chris@4 1876 isdir=no
Chris@4 1877 stripme=
Chris@4 1878 for arg
Chris@4 1879 do
Chris@4 1880 if test -n "$dest"; then
Chris@4 1881 files="$files $dest"
Chris@4 1882 dest=$arg
Chris@4 1883 continue
Chris@4 1884 fi
Chris@4 1885
Chris@4 1886 case $arg in
Chris@4 1887 -d) isdir=yes ;;
Chris@4 1888 -f)
Chris@4 1889 case " $install_prog " in
Chris@4 1890 *[\\\ /]cp\ *) ;;
Chris@4 1891 *) prev=$arg ;;
Chris@4 1892 esac
Chris@4 1893 ;;
Chris@4 1894 -g | -m | -o)
Chris@4 1895 prev=$arg
Chris@4 1896 ;;
Chris@4 1897 -s)
Chris@4 1898 stripme=" -s"
Chris@4 1899 continue
Chris@4 1900 ;;
Chris@4 1901 -*)
Chris@4 1902 ;;
Chris@4 1903 *)
Chris@4 1904 # If the previous option needed an argument, then skip it.
Chris@4 1905 if test -n "$prev"; then
Chris@4 1906 prev=
Chris@4 1907 else
Chris@4 1908 dest=$arg
Chris@4 1909 continue
Chris@4 1910 fi
Chris@4 1911 ;;
Chris@4 1912 esac
Chris@4 1913
Chris@4 1914 # Aesthetically quote the argument.
Chris@4 1915 func_quote_for_eval "$arg"
Chris@4 1916 install_prog="$install_prog $func_quote_for_eval_result"
Chris@4 1917 done
Chris@4 1918
Chris@4 1919 test -z "$install_prog" && \
Chris@4 1920 func_fatal_help "you must specify an install program"
Chris@4 1921
Chris@4 1922 test -n "$prev" && \
Chris@4 1923 func_fatal_help "the \`$prev' option requires an argument"
Chris@4 1924
Chris@4 1925 if test -z "$files"; then
Chris@4 1926 if test -z "$dest"; then
Chris@4 1927 func_fatal_help "no file or destination specified"
Chris@4 1928 else
Chris@4 1929 func_fatal_help "you must specify a destination"
Chris@4 1930 fi
Chris@4 1931 fi
Chris@4 1932
Chris@4 1933 # Strip any trailing slash from the destination.
Chris@4 1934 func_stripname '' '/' "$dest"
Chris@4 1935 dest=$func_stripname_result
Chris@4 1936
Chris@4 1937 # Check to see that the destination is a directory.
Chris@4 1938 test -d "$dest" && isdir=yes
Chris@4 1939 if test "$isdir" = yes; then
Chris@4 1940 destdir="$dest"
Chris@4 1941 destname=
Chris@4 1942 else
Chris@4 1943 func_dirname_and_basename "$dest" "" "."
Chris@4 1944 destdir="$func_dirname_result"
Chris@4 1945 destname="$func_basename_result"
Chris@4 1946
Chris@4 1947 # Not a directory, so check to see that there is only one file specified.
Chris@4 1948 set dummy $files; shift
Chris@4 1949 test "$#" -gt 1 && \
Chris@4 1950 func_fatal_help "\`$dest' is not a directory"
Chris@4 1951 fi
Chris@4 1952 case $destdir in
Chris@4 1953 [\\/]* | [A-Za-z]:[\\/]*) ;;
Chris@4 1954 *)
Chris@4 1955 for file in $files; do
Chris@4 1956 case $file in
Chris@4 1957 *.lo) ;;
Chris@4 1958 *)
Chris@4 1959 func_fatal_help "\`$destdir' must be an absolute directory name"
Chris@4 1960 ;;
Chris@4 1961 esac
Chris@4 1962 done
Chris@4 1963 ;;
Chris@4 1964 esac
Chris@4 1965
Chris@4 1966 # This variable tells wrapper scripts just to set variables rather
Chris@4 1967 # than running their programs.
Chris@4 1968 libtool_install_magic="$magic"
Chris@4 1969
Chris@4 1970 staticlibs=
Chris@4 1971 future_libdirs=
Chris@4 1972 current_libdirs=
Chris@4 1973 for file in $files; do
Chris@4 1974
Chris@4 1975 # Do each installation.
Chris@4 1976 case $file in
Chris@4 1977 *.$libext)
Chris@4 1978 # Do the static libraries later.
Chris@4 1979 staticlibs="$staticlibs $file"
Chris@4 1980 ;;
Chris@4 1981
Chris@4 1982 *.la)
Chris@4 1983 # Check to see that this really is a libtool archive.
Chris@4 1984 func_lalib_unsafe_p "$file" \
Chris@4 1985 || func_fatal_help "\`$file' is not a valid libtool archive"
Chris@4 1986
Chris@4 1987 library_names=
Chris@4 1988 old_library=
Chris@4 1989 relink_command=
Chris@4 1990 func_source "$file"
Chris@4 1991
Chris@4 1992 # Add the libdir to current_libdirs if it is the destination.
Chris@4 1993 if test "X$destdir" = "X$libdir"; then
Chris@4 1994 case "$current_libdirs " in
Chris@4 1995 *" $libdir "*) ;;
Chris@4 1996 *) current_libdirs="$current_libdirs $libdir" ;;
Chris@4 1997 esac
Chris@4 1998 else
Chris@4 1999 # Note the libdir as a future libdir.
Chris@4 2000 case "$future_libdirs " in
Chris@4 2001 *" $libdir "*) ;;
Chris@4 2002 *) future_libdirs="$future_libdirs $libdir" ;;
Chris@4 2003 esac
Chris@4 2004 fi
Chris@4 2005
Chris@4 2006 func_dirname "$file" "/" ""
Chris@4 2007 dir="$func_dirname_result"
Chris@4 2008 dir="$dir$objdir"
Chris@4 2009
Chris@4 2010 if test -n "$relink_command"; then
Chris@4 2011 # Determine the prefix the user has applied to our future dir.
Chris@4 2012 inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
Chris@4 2013
Chris@4 2014 # Don't allow the user to place us outside of our expected
Chris@4 2015 # location b/c this prevents finding dependent libraries that
Chris@4 2016 # are installed to the same prefix.
Chris@4 2017 # At present, this check doesn't affect windows .dll's that
Chris@4 2018 # are installed into $libdir/../bin (currently, that works fine)
Chris@4 2019 # but it's something to keep an eye on.
Chris@4 2020 test "$inst_prefix_dir" = "$destdir" && \
Chris@4 2021 func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
Chris@4 2022
Chris@4 2023 if test -n "$inst_prefix_dir"; then
Chris@4 2024 # Stick the inst_prefix_dir data into the link command.
Chris@4 2025 relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
Chris@4 2026 else
Chris@4 2027 relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
Chris@4 2028 fi
Chris@4 2029
Chris@4 2030 func_warning "relinking \`$file'"
Chris@4 2031 func_show_eval "$relink_command" \
Chris@4 2032 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
Chris@4 2033 fi
Chris@4 2034
Chris@4 2035 # See the names of the shared library.
Chris@4 2036 set dummy $library_names; shift
Chris@4 2037 if test -n "$1"; then
Chris@4 2038 realname="$1"
Chris@4 2039 shift
Chris@4 2040
Chris@4 2041 srcname="$realname"
Chris@4 2042 test -n "$relink_command" && srcname="$realname"T
Chris@4 2043
Chris@4 2044 # Install the shared library and build the symlinks.
Chris@4 2045 func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
Chris@4 2046 'exit $?'
Chris@4 2047 tstripme="$stripme"
Chris@4 2048 case $host_os in
Chris@4 2049 cygwin* | mingw* | pw32*)
Chris@4 2050 case $realname in
Chris@4 2051 *.dll.a)
Chris@4 2052 tstripme=""
Chris@4 2053 ;;
Chris@4 2054 esac
Chris@4 2055 ;;
Chris@4 2056 esac
Chris@4 2057 if test -n "$tstripme" && test -n "$striplib"; then
Chris@4 2058 func_show_eval "$striplib $destdir/$realname" 'exit $?'
Chris@4 2059 fi
Chris@4 2060
Chris@4 2061 if test "$#" -gt 0; then
Chris@4 2062 # Delete the old symlinks, and create new ones.
Chris@4 2063 # Try `ln -sf' first, because the `ln' binary might depend on
Chris@4 2064 # the symlink we replace! Solaris /bin/ln does not understand -f,
Chris@4 2065 # so we also need to try rm && ln -s.
Chris@4 2066 for linkname
Chris@4 2067 do
Chris@4 2068 test "$linkname" != "$realname" \
Chris@4 2069 && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
Chris@4 2070 done
Chris@4 2071 fi
Chris@4 2072
Chris@4 2073 # Do each command in the postinstall commands.
Chris@4 2074 lib="$destdir/$realname"
Chris@4 2075 func_execute_cmds "$postinstall_cmds" 'exit $?'
Chris@4 2076 fi
Chris@4 2077
Chris@4 2078 # Install the pseudo-library for information purposes.
Chris@4 2079 func_basename "$file"
Chris@4 2080 name="$func_basename_result"
Chris@4 2081 instname="$dir/$name"i
Chris@4 2082 func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
Chris@4 2083
Chris@4 2084 # Maybe install the static library, too.
Chris@4 2085 test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
Chris@4 2086 ;;
Chris@4 2087
Chris@4 2088 *.lo)
Chris@4 2089 # Install (i.e. copy) a libtool object.
Chris@4 2090
Chris@4 2091 # Figure out destination file name, if it wasn't already specified.
Chris@4 2092 if test -n "$destname"; then
Chris@4 2093 destfile="$destdir/$destname"
Chris@4 2094 else
Chris@4 2095 func_basename "$file"
Chris@4 2096 destfile="$func_basename_result"
Chris@4 2097 destfile="$destdir/$destfile"
Chris@4 2098 fi
Chris@4 2099
Chris@4 2100 # Deduce the name of the destination old-style object file.
Chris@4 2101 case $destfile in
Chris@4 2102 *.lo)
Chris@4 2103 func_lo2o "$destfile"
Chris@4 2104 staticdest=$func_lo2o_result
Chris@4 2105 ;;
Chris@4 2106 *.$objext)
Chris@4 2107 staticdest="$destfile"
Chris@4 2108 destfile=
Chris@4 2109 ;;
Chris@4 2110 *)
Chris@4 2111 func_fatal_help "cannot copy a libtool object to \`$destfile'"
Chris@4 2112 ;;
Chris@4 2113 esac
Chris@4 2114
Chris@4 2115 # Install the libtool object if requested.
Chris@4 2116 test -n "$destfile" && \
Chris@4 2117 func_show_eval "$install_prog $file $destfile" 'exit $?'
Chris@4 2118
Chris@4 2119 # Install the old object if enabled.
Chris@4 2120 if test "$build_old_libs" = yes; then
Chris@4 2121 # Deduce the name of the old-style object file.
Chris@4 2122 func_lo2o "$file"
Chris@4 2123 staticobj=$func_lo2o_result
Chris@4 2124 func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
Chris@4 2125 fi
Chris@4 2126 exit $EXIT_SUCCESS
Chris@4 2127 ;;
Chris@4 2128
Chris@4 2129 *)
Chris@4 2130 # Figure out destination file name, if it wasn't already specified.
Chris@4 2131 if test -n "$destname"; then
Chris@4 2132 destfile="$destdir/$destname"
Chris@4 2133 else
Chris@4 2134 func_basename "$file"
Chris@4 2135 destfile="$func_basename_result"
Chris@4 2136 destfile="$destdir/$destfile"
Chris@4 2137 fi
Chris@4 2138
Chris@4 2139 # If the file is missing, and there is a .exe on the end, strip it
Chris@4 2140 # because it is most likely a libtool script we actually want to
Chris@4 2141 # install
Chris@4 2142 stripped_ext=""
Chris@4 2143 case $file in
Chris@4 2144 *.exe)
Chris@4 2145 if test ! -f "$file"; then
Chris@4 2146 func_stripname '' '.exe' "$file"
Chris@4 2147 file=$func_stripname_result
Chris@4 2148 stripped_ext=".exe"
Chris@4 2149 fi
Chris@4 2150 ;;
Chris@4 2151 esac
Chris@4 2152
Chris@4 2153 # Do a test to see if this is really a libtool program.
Chris@4 2154 case $host in
Chris@4 2155 *cygwin*|*mingw*)
Chris@4 2156 if func_ltwrapper_executable_p "$file"; then
Chris@4 2157 func_ltwrapper_scriptname "$file"
Chris@4 2158 wrapper=$func_ltwrapper_scriptname_result
Chris@4 2159 else
Chris@4 2160 func_stripname '' '.exe' "$file"
Chris@4 2161 wrapper=$func_stripname_result
Chris@4 2162 fi
Chris@4 2163 ;;
Chris@4 2164 *)
Chris@4 2165 wrapper=$file
Chris@4 2166 ;;
Chris@4 2167 esac
Chris@4 2168 if func_ltwrapper_script_p "$wrapper"; then
Chris@4 2169 notinst_deplibs=
Chris@4 2170 relink_command=
Chris@4 2171
Chris@4 2172 func_source "$wrapper"
Chris@4 2173
Chris@4 2174 # Check the variables that should have been set.
Chris@4 2175 test -z "$generated_by_libtool_version" && \
Chris@4 2176 func_fatal_error "invalid libtool wrapper script \`$wrapper'"
Chris@4 2177
Chris@4 2178 finalize=yes
Chris@4 2179 for lib in $notinst_deplibs; do
Chris@4 2180 # Check to see that each library is installed.
Chris@4 2181 libdir=
Chris@4 2182 if test -f "$lib"; then
Chris@4 2183 func_source "$lib"
Chris@4 2184 fi
Chris@4 2185 libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
Chris@4 2186 if test -n "$libdir" && test ! -f "$libfile"; then
Chris@4 2187 func_warning "\`$lib' has not been installed in \`$libdir'"
Chris@4 2188 finalize=no
Chris@4 2189 fi
Chris@4 2190 done
Chris@4 2191
Chris@4 2192 relink_command=
Chris@4 2193 func_source "$wrapper"
Chris@4 2194
Chris@4 2195 outputname=
Chris@4 2196 if test "$fast_install" = no && test -n "$relink_command"; then
Chris@4 2197 $opt_dry_run || {
Chris@4 2198 if test "$finalize" = yes; then
Chris@4 2199 tmpdir=`func_mktempdir`
Chris@4 2200 func_basename "$file$stripped_ext"
Chris@4 2201 file="$func_basename_result"
Chris@4 2202 outputname="$tmpdir/$file"
Chris@4 2203 # Replace the output file specification.
Chris@4 2204 relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
Chris@4 2205
Chris@4 2206 $opt_silent || {
Chris@4 2207 func_quote_for_expand "$relink_command"
Chris@4 2208 eval "func_echo $func_quote_for_expand_result"
Chris@4 2209 }
Chris@4 2210 if eval "$relink_command"; then :
Chris@4 2211 else
Chris@4 2212 func_error "error: relink \`$file' with the above command before installing it"
Chris@4 2213 $opt_dry_run || ${RM}r "$tmpdir"
Chris@4 2214 continue
Chris@4 2215 fi
Chris@4 2216 file="$outputname"
Chris@4 2217 else
Chris@4 2218 func_warning "cannot relink \`$file'"
Chris@4 2219 fi
Chris@4 2220 }
Chris@4 2221 else
Chris@4 2222 # Install the binary that we compiled earlier.
Chris@4 2223 file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
Chris@4 2224 fi
Chris@4 2225 fi
Chris@4 2226
Chris@4 2227 # remove .exe since cygwin /usr/bin/install will append another
Chris@4 2228 # one anyway
Chris@4 2229 case $install_prog,$host in
Chris@4 2230 */usr/bin/install*,*cygwin*)
Chris@4 2231 case $file:$destfile in
Chris@4 2232 *.exe:*.exe)
Chris@4 2233 # this is ok
Chris@4 2234 ;;
Chris@4 2235 *.exe:*)
Chris@4 2236 destfile=$destfile.exe
Chris@4 2237 ;;
Chris@4 2238 *:*.exe)
Chris@4 2239 func_stripname '' '.exe' "$destfile"
Chris@4 2240 destfile=$func_stripname_result
Chris@4 2241 ;;
Chris@4 2242 esac
Chris@4 2243 ;;
Chris@4 2244 esac
Chris@4 2245 func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
Chris@4 2246 $opt_dry_run || if test -n "$outputname"; then
Chris@4 2247 ${RM}r "$tmpdir"
Chris@4 2248 fi
Chris@4 2249 ;;
Chris@4 2250 esac
Chris@4 2251 done
Chris@4 2252
Chris@4 2253 for file in $staticlibs; do
Chris@4 2254 func_basename "$file"
Chris@4 2255 name="$func_basename_result"
Chris@4 2256
Chris@4 2257 # Set up the ranlib parameters.
Chris@4 2258 oldlib="$destdir/$name"
Chris@4 2259
Chris@4 2260 func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
Chris@4 2261
Chris@4 2262 if test -n "$stripme" && test -n "$old_striplib"; then
Chris@4 2263 func_show_eval "$old_striplib $oldlib" 'exit $?'
Chris@4 2264 fi
Chris@4 2265
Chris@4 2266 # Do each command in the postinstall commands.
Chris@4 2267 func_execute_cmds "$old_postinstall_cmds" 'exit $?'
Chris@4 2268 done
Chris@4 2269
Chris@4 2270 test -n "$future_libdirs" && \
Chris@4 2271 func_warning "remember to run \`$progname --finish$future_libdirs'"
Chris@4 2272
Chris@4 2273 if test -n "$current_libdirs"; then
Chris@4 2274 # Maybe just do a dry run.
Chris@4 2275 $opt_dry_run && current_libdirs=" -n$current_libdirs"
Chris@4 2276 exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
Chris@4 2277 else
Chris@4 2278 exit $EXIT_SUCCESS
Chris@4 2279 fi
Chris@4 2280 }
Chris@4 2281
Chris@4 2282 test "$mode" = install && func_mode_install ${1+"$@"}
Chris@4 2283
Chris@4 2284
Chris@4 2285 # func_generate_dlsyms outputname originator pic_p
Chris@4 2286 # Extract symbols from dlprefiles and create ${outputname}S.o with
Chris@4 2287 # a dlpreopen symbol table.
Chris@4 2288 func_generate_dlsyms ()
Chris@4 2289 {
Chris@4 2290 $opt_debug
Chris@4 2291 my_outputname="$1"
Chris@4 2292 my_originator="$2"
Chris@4 2293 my_pic_p="${3-no}"
Chris@4 2294 my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
Chris@4 2295 my_dlsyms=
Chris@4 2296
Chris@4 2297 if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
Chris@4 2298 if test -n "$NM" && test -n "$global_symbol_pipe"; then
Chris@4 2299 my_dlsyms="${my_outputname}S.c"
Chris@4 2300 else
Chris@4 2301 func_error "not configured to extract global symbols from dlpreopened files"
Chris@4 2302 fi
Chris@4 2303 fi
Chris@4 2304
Chris@4 2305 if test -n "$my_dlsyms"; then
Chris@4 2306 case $my_dlsyms in
Chris@4 2307 "") ;;
Chris@4 2308 *.c)
Chris@4 2309 # Discover the nlist of each of the dlfiles.
Chris@4 2310 nlist="$output_objdir/${my_outputname}.nm"
Chris@4 2311
Chris@4 2312 func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
Chris@4 2313
Chris@4 2314 # Parse the name list into a source file.
Chris@4 2315 func_verbose "creating $output_objdir/$my_dlsyms"
Chris@4 2316
Chris@4 2317 $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
Chris@4 2318 /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
Chris@4 2319 /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
Chris@4 2320
Chris@4 2321 #ifdef __cplusplus
Chris@4 2322 extern \"C\" {
Chris@4 2323 #endif
Chris@4 2324
Chris@4 2325 /* External symbol declarations for the compiler. */\
Chris@4 2326 "
Chris@4 2327
Chris@4 2328 if test "$dlself" = yes; then
Chris@4 2329 func_verbose "generating symbol list for \`$output'"
Chris@4 2330
Chris@4 2331 $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
Chris@4 2332
Chris@4 2333 # Add our own program objects to the symbol list.
Chris@4 2334 progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
Chris@4 2335 for progfile in $progfiles; do
Chris@4 2336 func_verbose "extracting global C symbols from \`$progfile'"
Chris@4 2337 $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
Chris@4 2338 done
Chris@4 2339
Chris@4 2340 if test -n "$exclude_expsyms"; then
Chris@4 2341 $opt_dry_run || {
Chris@4 2342 eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
Chris@4 2343 eval '$MV "$nlist"T "$nlist"'
Chris@4 2344 }
Chris@4 2345 fi
Chris@4 2346
Chris@4 2347 if test -n "$export_symbols_regex"; then
Chris@4 2348 $opt_dry_run || {
Chris@4 2349 eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
Chris@4 2350 eval '$MV "$nlist"T "$nlist"'
Chris@4 2351 }
Chris@4 2352 fi
Chris@4 2353
Chris@4 2354 # Prepare the list of exported symbols
Chris@4 2355 if test -z "$export_symbols"; then
Chris@4 2356 export_symbols="$output_objdir/$outputname.exp"
Chris@4 2357 $opt_dry_run || {
Chris@4 2358 $RM $export_symbols
Chris@4 2359 eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
Chris@4 2360 case $host in
Chris@4 2361 *cygwin* | *mingw* )
Chris@4 2362 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
Chris@4 2363 eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
Chris@4 2364 ;;
Chris@4 2365 esac
Chris@4 2366 }
Chris@4 2367 else
Chris@4 2368 $opt_dry_run || {
Chris@4 2369 eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
Chris@4 2370 eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
Chris@4 2371 eval '$MV "$nlist"T "$nlist"'
Chris@4 2372 case $host in
Chris@4 2373 *cygwin | *mingw* )
Chris@4 2374 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
Chris@4 2375 eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
Chris@4 2376 ;;
Chris@4 2377 esac
Chris@4 2378 }
Chris@4 2379 fi
Chris@4 2380 fi
Chris@4 2381
Chris@4 2382 for dlprefile in $dlprefiles; do
Chris@4 2383 func_verbose "extracting global C symbols from \`$dlprefile'"
Chris@4 2384 func_basename "$dlprefile"
Chris@4 2385 name="$func_basename_result"
Chris@4 2386 $opt_dry_run || {
Chris@4 2387 eval '$ECHO ": $name " >> "$nlist"'
Chris@4 2388 eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
Chris@4 2389 }
Chris@4 2390 done
Chris@4 2391
Chris@4 2392 $opt_dry_run || {
Chris@4 2393 # Make sure we have at least an empty file.
Chris@4 2394 test -f "$nlist" || : > "$nlist"
Chris@4 2395
Chris@4 2396 if test -n "$exclude_expsyms"; then
Chris@4 2397 $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
Chris@4 2398 $MV "$nlist"T "$nlist"
Chris@4 2399 fi
Chris@4 2400
Chris@4 2401 # Try sorting and uniquifying the output.
Chris@4 2402 if $GREP -v "^: " < "$nlist" |
Chris@4 2403 if sort -k 3 </dev/null >/dev/null 2>&1; then
Chris@4 2404 sort -k 3
Chris@4 2405 else
Chris@4 2406 sort +2
Chris@4 2407 fi |
Chris@4 2408 uniq > "$nlist"S; then
Chris@4 2409 :
Chris@4 2410 else
Chris@4 2411 $GREP -v "^: " < "$nlist" > "$nlist"S
Chris@4 2412 fi
Chris@4 2413
Chris@4 2414 if test -f "$nlist"S; then
Chris@4 2415 eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
Chris@4 2416 else
Chris@4 2417 $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
Chris@4 2418 fi
Chris@4 2419
Chris@4 2420 $ECHO >> "$output_objdir/$my_dlsyms" "\
Chris@4 2421
Chris@4 2422 /* The mapping between symbol names and symbols. */
Chris@4 2423 typedef struct {
Chris@4 2424 const char *name;
Chris@4 2425 void *address;
Chris@4 2426 } lt_dlsymlist;
Chris@4 2427 "
Chris@4 2428 case $host in
Chris@4 2429 *cygwin* | *mingw* )
Chris@4 2430 $ECHO >> "$output_objdir/$my_dlsyms" "\
Chris@4 2431 /* DATA imports from DLLs on WIN32 con't be const, because
Chris@4 2432 runtime relocations are performed -- see ld's documentation
Chris@4 2433 on pseudo-relocs. */"
Chris@4 2434 lt_dlsym_const= ;;
Chris@4 2435 *osf5*)
Chris@4 2436 echo >> "$output_objdir/$my_dlsyms" "\
Chris@4 2437 /* This system does not cope well with relocations in const data */"
Chris@4 2438 lt_dlsym_const= ;;
Chris@4 2439 *)
Chris@4 2440 lt_dlsym_const=const ;;
Chris@4 2441 esac
Chris@4 2442
Chris@4 2443 $ECHO >> "$output_objdir/$my_dlsyms" "\
Chris@4 2444 extern $lt_dlsym_const lt_dlsymlist
Chris@4 2445 lt_${my_prefix}_LTX_preloaded_symbols[];
Chris@4 2446 $lt_dlsym_const lt_dlsymlist
Chris@4 2447 lt_${my_prefix}_LTX_preloaded_symbols[] =
Chris@4 2448 {\
Chris@4 2449 { \"$my_originator\", (void *) 0 },"
Chris@4 2450
Chris@4 2451 case $need_lib_prefix in
Chris@4 2452 no)
Chris@4 2453 eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
Chris@4 2454 ;;
Chris@4 2455 *)
Chris@4 2456 eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
Chris@4 2457 ;;
Chris@4 2458 esac
Chris@4 2459 $ECHO >> "$output_objdir/$my_dlsyms" "\
Chris@4 2460 {0, (void *) 0}
Chris@4 2461 };
Chris@4 2462
Chris@4 2463 /* This works around a problem in FreeBSD linker */
Chris@4 2464 #ifdef FREEBSD_WORKAROUND
Chris@4 2465 static const void *lt_preloaded_setup() {
Chris@4 2466 return lt_${my_prefix}_LTX_preloaded_symbols;
Chris@4 2467 }
Chris@4 2468 #endif
Chris@4 2469
Chris@4 2470 #ifdef __cplusplus
Chris@4 2471 }
Chris@4 2472 #endif\
Chris@4 2473 "
Chris@4 2474 } # !$opt_dry_run
Chris@4 2475
Chris@4 2476 pic_flag_for_symtable=
Chris@4 2477 case "$compile_command " in
Chris@4 2478 *" -static "*) ;;
Chris@4 2479 *)
Chris@4 2480 case $host in
Chris@4 2481 # compiling the symbol table file with pic_flag works around
Chris@4 2482 # a FreeBSD bug that causes programs to crash when -lm is
Chris@4 2483 # linked before any other PIC object. But we must not use
Chris@4 2484 # pic_flag when linking with -static. The problem exists in
Chris@4 2485 # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
Chris@4 2486 *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
Chris@4 2487 pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
Chris@4 2488 *-*-hpux*)
Chris@4 2489 pic_flag_for_symtable=" $pic_flag" ;;
Chris@4 2490 *)
Chris@4 2491 if test "X$my_pic_p" != Xno; then
Chris@4 2492 pic_flag_for_symtable=" $pic_flag"
Chris@4 2493 fi
Chris@4 2494 ;;
Chris@4 2495 esac
Chris@4 2496 ;;
Chris@4 2497 esac
Chris@4 2498 symtab_cflags=
Chris@4 2499 for arg in $LTCFLAGS; do
Chris@4 2500 case $arg in
Chris@4 2501 -pie | -fpie | -fPIE) ;;
Chris@4 2502 *) symtab_cflags="$symtab_cflags $arg" ;;
Chris@4 2503 esac
Chris@4 2504 done
Chris@4 2505
Chris@4 2506 # Now compile the dynamic symbol file.
Chris@4 2507 func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
Chris@4 2508
Chris@4 2509 # Clean up the generated files.
Chris@4 2510 func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
Chris@4 2511
Chris@4 2512 # Transform the symbol file into the correct name.
Chris@4 2513 symfileobj="$output_objdir/${my_outputname}S.$objext"
Chris@4 2514 case $host in
Chris@4 2515 *cygwin* | *mingw* )
Chris@4 2516 if test -f "$output_objdir/$my_outputname.def"; then
Chris@4 2517 compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
Chris@4 2518 finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
Chris@4 2519 else
Chris@4 2520 compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
Chris@4 2521 finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
Chris@4 2522 fi
Chris@4 2523 ;;
Chris@4 2524 *)
Chris@4 2525 compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
Chris@4 2526 finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
Chris@4 2527 ;;
Chris@4 2528 esac
Chris@4 2529 ;;
Chris@4 2530 *)
Chris@4 2531 func_fatal_error "unknown suffix for \`$my_dlsyms'"
Chris@4 2532 ;;
Chris@4 2533 esac
Chris@4 2534 else
Chris@4 2535 # We keep going just in case the user didn't refer to
Chris@4 2536 # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
Chris@4 2537 # really was required.
Chris@4 2538
Chris@4 2539 # Nullify the symbol file.
Chris@4 2540 compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
Chris@4 2541 finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
Chris@4 2542 fi
Chris@4 2543 }
Chris@4 2544
Chris@4 2545 # func_win32_libid arg
Chris@4 2546 # return the library type of file 'arg'
Chris@4 2547 #
Chris@4 2548 # Need a lot of goo to handle *both* DLLs and import libs
Chris@4 2549 # Has to be a shell function in order to 'eat' the argument
Chris@4 2550 # that is supplied when $file_magic_command is called.
Chris@4 2551 func_win32_libid ()
Chris@4 2552 {
Chris@4 2553 $opt_debug
Chris@4 2554 win32_libid_type="unknown"
Chris@4 2555 win32_fileres=`file -L $1 2>/dev/null`
Chris@4 2556 case $win32_fileres in
Chris@4 2557 *ar\ archive\ import\ library*) # definitely import
Chris@4 2558 win32_libid_type="x86 archive import"
Chris@4 2559 ;;
Chris@4 2560 *ar\ archive*) # could be an import, or static
Chris@4 2561 if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
Chris@4 2562 $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
Chris@4 2563 win32_nmres=`eval $NM -f posix -A $1 |
Chris@4 2564 $SED -n -e '
Chris@4 2565 1,100{
Chris@4 2566 / I /{
Chris@4 2567 s,.*,import,
Chris@4 2568 p
Chris@4 2569 q
Chris@4 2570 }
Chris@4 2571 }'`
Chris@4 2572 case $win32_nmres in
Chris@4 2573 import*) win32_libid_type="x86 archive import";;
Chris@4 2574 *) win32_libid_type="x86 archive static";;
Chris@4 2575 esac
Chris@4 2576 fi
Chris@4 2577 ;;
Chris@4 2578 *DLL*)
Chris@4 2579 win32_libid_type="x86 DLL"
Chris@4 2580 ;;
Chris@4 2581 *executable*) # but shell scripts are "executable" too...
Chris@4 2582 case $win32_fileres in
Chris@4 2583 *MS\ Windows\ PE\ Intel*)
Chris@4 2584 win32_libid_type="x86 DLL"
Chris@4 2585 ;;
Chris@4 2586 esac
Chris@4 2587 ;;
Chris@4 2588 esac
Chris@4 2589 $ECHO "$win32_libid_type"
Chris@4 2590 }
Chris@4 2591
Chris@4 2592
Chris@4 2593
Chris@4 2594 # func_extract_an_archive dir oldlib
Chris@4 2595 func_extract_an_archive ()
Chris@4 2596 {
Chris@4 2597 $opt_debug
Chris@4 2598 f_ex_an_ar_dir="$1"; shift
Chris@4 2599 f_ex_an_ar_oldlib="$1"
Chris@4 2600 func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
Chris@4 2601 if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
Chris@4 2602 :
Chris@4 2603 else
Chris@4 2604 func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
Chris@4 2605 fi
Chris@4 2606 }
Chris@4 2607
Chris@4 2608
Chris@4 2609 # func_extract_archives gentop oldlib ...
Chris@4 2610 func_extract_archives ()
Chris@4 2611 {
Chris@4 2612 $opt_debug
Chris@4 2613 my_gentop="$1"; shift
Chris@4 2614 my_oldlibs=${1+"$@"}
Chris@4 2615 my_oldobjs=""
Chris@4 2616 my_xlib=""
Chris@4 2617 my_xabs=""
Chris@4 2618 my_xdir=""
Chris@4 2619
Chris@4 2620 for my_xlib in $my_oldlibs; do
Chris@4 2621 # Extract the objects.
Chris@4 2622 case $my_xlib in
Chris@4 2623 [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
Chris@4 2624 *) my_xabs=`pwd`"/$my_xlib" ;;
Chris@4 2625 esac
Chris@4 2626 func_basename "$my_xlib"
Chris@4 2627 my_xlib="$func_basename_result"
Chris@4 2628 my_xlib_u=$my_xlib
Chris@4 2629 while :; do
Chris@4 2630 case " $extracted_archives " in
Chris@4 2631 *" $my_xlib_u "*)
Chris@4 2632 func_arith $extracted_serial + 1
Chris@4 2633 extracted_serial=$func_arith_result
Chris@4 2634 my_xlib_u=lt$extracted_serial-$my_xlib ;;
Chris@4 2635 *) break ;;
Chris@4 2636 esac
Chris@4 2637 done
Chris@4 2638 extracted_archives="$extracted_archives $my_xlib_u"
Chris@4 2639 my_xdir="$my_gentop/$my_xlib_u"
Chris@4 2640
Chris@4 2641 func_mkdir_p "$my_xdir"
Chris@4 2642
Chris@4 2643 case $host in
Chris@4 2644 *-darwin*)
Chris@4 2645 func_verbose "Extracting $my_xabs"
Chris@4 2646 # Do not bother doing anything if just a dry run
Chris@4 2647 $opt_dry_run || {
Chris@4 2648 darwin_orig_dir=`pwd`
Chris@4 2649 cd $my_xdir || exit $?
Chris@4 2650 darwin_archive=$my_xabs
Chris@4 2651 darwin_curdir=`pwd`
Chris@4 2652 darwin_base_archive=`basename "$darwin_archive"`
Chris@4 2653 darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
Chris@4 2654 if test -n "$darwin_arches"; then
Chris@4 2655 darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
Chris@4 2656 darwin_arch=
Chris@4 2657 func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
Chris@4 2658 for darwin_arch in $darwin_arches ; do
Chris@4 2659 func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
Chris@4 2660 $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
Chris@4 2661 cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
Chris@4 2662 func_extract_an_archive "`pwd`" "${darwin_base_archive}"
Chris@4 2663 cd "$darwin_curdir"
Chris@4 2664 $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
Chris@4 2665 done # $darwin_arches
Chris@4 2666 ## Okay now we've a bunch of thin objects, gotta fatten them up :)
Chris@4 2667 darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
Chris@4 2668 darwin_file=
Chris@4 2669 darwin_files=
Chris@4 2670 for darwin_file in $darwin_filelist; do
Chris@4 2671 darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
Chris@4 2672 $LIPO -create -output "$darwin_file" $darwin_files
Chris@4 2673 done # $darwin_filelist
Chris@4 2674 $RM -rf unfat-$$
Chris@4 2675 cd "$darwin_orig_dir"
Chris@4 2676 else
Chris@4 2677 cd $darwin_orig_dir
Chris@4 2678 func_extract_an_archive "$my_xdir" "$my_xabs"
Chris@4 2679 fi # $darwin_arches
Chris@4 2680 } # !$opt_dry_run
Chris@4 2681 ;;
Chris@4 2682 *)
Chris@4 2683 func_extract_an_archive "$my_xdir" "$my_xabs"
Chris@4 2684 ;;
Chris@4 2685 esac
Chris@4 2686 my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
Chris@4 2687 done
Chris@4 2688
Chris@4 2689 func_extract_archives_result="$my_oldobjs"
Chris@4 2690 }
Chris@4 2691
Chris@4 2692
Chris@4 2693
Chris@4 2694 # func_emit_wrapper arg
Chris@4 2695 #
Chris@4 2696 # emit a libtool wrapper script on stdout
Chris@4 2697 # don't directly open a file because we may want to
Chris@4 2698 # incorporate the script contents within a cygwin/mingw
Chris@4 2699 # wrapper executable. Must ONLY be called from within
Chris@4 2700 # func_mode_link because it depends on a number of variable
Chris@4 2701 # set therein.
Chris@4 2702 #
Chris@4 2703 # arg is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
Chris@4 2704 # variable will take. If 'yes', then the emitted script
Chris@4 2705 # will assume that the directory in which it is stored is
Chris@4 2706 # the '.lib' directory. This is a cygwin/mingw-specific
Chris@4 2707 # behavior.
Chris@4 2708 func_emit_wrapper ()
Chris@4 2709 {
Chris@4 2710 func_emit_wrapper_arg1=no
Chris@4 2711 if test -n "$1" ; then
Chris@4 2712 func_emit_wrapper_arg1=$1
Chris@4 2713 fi
Chris@4 2714
Chris@4 2715 $ECHO "\
Chris@4 2716 #! $SHELL
Chris@4 2717
Chris@4 2718 # $output - temporary wrapper script for $objdir/$outputname
Chris@4 2719 # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
Chris@4 2720 #
Chris@4 2721 # The $output program cannot be directly executed until all the libtool
Chris@4 2722 # libraries that it depends on are installed.
Chris@4 2723 #
Chris@4 2724 # This wrapper script should never be moved out of the build directory.
Chris@4 2725 # If it is, it will not operate correctly.
Chris@4 2726
Chris@4 2727 # Sed substitution that helps us do robust quoting. It backslashifies
Chris@4 2728 # metacharacters that are still active within double-quoted strings.
Chris@4 2729 Xsed='${SED} -e 1s/^X//'
Chris@4 2730 sed_quote_subst='$sed_quote_subst'
Chris@4 2731
Chris@4 2732 # Be Bourne compatible
Chris@4 2733 if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
Chris@4 2734 emulate sh
Chris@4 2735 NULLCMD=:
Chris@4 2736 # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
Chris@4 2737 # is contrary to our usage. Disable this feature.
Chris@4 2738 alias -g '\${1+\"\$@\"}'='\"\$@\"'
Chris@4 2739 setopt NO_GLOB_SUBST
Chris@4 2740 else
Chris@4 2741 case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
Chris@4 2742 fi
Chris@4 2743 BIN_SH=xpg4; export BIN_SH # for Tru64
Chris@4 2744 DUALCASE=1; export DUALCASE # for MKS sh
Chris@4 2745
Chris@4 2746 # The HP-UX ksh and POSIX shell print the target directory to stdout
Chris@4 2747 # if CDPATH is set.
Chris@4 2748 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
Chris@4 2749
Chris@4 2750 relink_command=\"$relink_command\"
Chris@4 2751
Chris@4 2752 # This environment variable determines our operation mode.
Chris@4 2753 if test \"\$libtool_install_magic\" = \"$magic\"; then
Chris@4 2754 # install mode needs the following variables:
Chris@4 2755 generated_by_libtool_version='$macro_version'
Chris@4 2756 notinst_deplibs='$notinst_deplibs'
Chris@4 2757 else
Chris@4 2758 # When we are sourced in execute mode, \$file and \$ECHO are already set.
Chris@4 2759 if test \"\$libtool_execute_magic\" != \"$magic\"; then
Chris@4 2760 ECHO=\"$qecho\"
Chris@4 2761 file=\"\$0\"
Chris@4 2762 # Make sure echo works.
Chris@4 2763 if test \"X\$1\" = X--no-reexec; then
Chris@4 2764 # Discard the --no-reexec flag, and continue.
Chris@4 2765 shift
Chris@4 2766 elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
Chris@4 2767 # Yippee, \$ECHO works!
Chris@4 2768 :
Chris@4 2769 else
Chris@4 2770 # Restart under the correct shell, and then maybe \$ECHO will work.
Chris@4 2771 exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
Chris@4 2772 fi
Chris@4 2773 fi\
Chris@4 2774 "
Chris@4 2775 $ECHO "\
Chris@4 2776
Chris@4 2777 # Find the directory that this script lives in.
Chris@4 2778 thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
Chris@4 2779 test \"x\$thisdir\" = \"x\$file\" && thisdir=.
Chris@4 2780
Chris@4 2781 # Follow symbolic links until we get to the real thisdir.
Chris@4 2782 file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
Chris@4 2783 while test -n \"\$file\"; do
Chris@4 2784 destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
Chris@4 2785
Chris@4 2786 # If there was a directory component, then change thisdir.
Chris@4 2787 if test \"x\$destdir\" != \"x\$file\"; then
Chris@4 2788 case \"\$destdir\" in
Chris@4 2789 [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
Chris@4 2790 *) thisdir=\"\$thisdir/\$destdir\" ;;
Chris@4 2791 esac
Chris@4 2792 fi
Chris@4 2793
Chris@4 2794 file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
Chris@4 2795 file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
Chris@4 2796 done
Chris@4 2797
Chris@4 2798 # Usually 'no', except on cygwin/mingw when embedded into
Chris@4 2799 # the cwrapper.
Chris@4 2800 WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
Chris@4 2801 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
Chris@4 2802 # special case for '.'
Chris@4 2803 if test \"\$thisdir\" = \".\"; then
Chris@4 2804 thisdir=\`pwd\`
Chris@4 2805 fi
Chris@4 2806 # remove .libs from thisdir
Chris@4 2807 case \"\$thisdir\" in
Chris@4 2808 *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
Chris@4 2809 $objdir ) thisdir=. ;;
Chris@4 2810 esac
Chris@4 2811 fi
Chris@4 2812
Chris@4 2813 # Try to get the absolute directory name.
Chris@4 2814 absdir=\`cd \"\$thisdir\" && pwd\`
Chris@4 2815 test -n \"\$absdir\" && thisdir=\"\$absdir\"
Chris@4 2816 "
Chris@4 2817
Chris@4 2818 if test "$fast_install" = yes; then
Chris@4 2819 $ECHO "\
Chris@4 2820 program=lt-'$outputname'$exeext
Chris@4 2821 progdir=\"\$thisdir/$objdir\"
Chris@4 2822
Chris@4 2823 if test ! -f \"\$progdir/\$program\" ||
Chris@4 2824 { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
Chris@4 2825 test \"X\$file\" != \"X\$progdir/\$program\"; }; then
Chris@4 2826
Chris@4 2827 file=\"\$\$-\$program\"
Chris@4 2828
Chris@4 2829 if test ! -d \"\$progdir\"; then
Chris@4 2830 $MKDIR \"\$progdir\"
Chris@4 2831 else
Chris@4 2832 $RM \"\$progdir/\$file\"
Chris@4 2833 fi"
Chris@4 2834
Chris@4 2835 $ECHO "\
Chris@4 2836
Chris@4 2837 # relink executable if necessary
Chris@4 2838 if test -n \"\$relink_command\"; then
Chris@4 2839 if relink_command_output=\`eval \$relink_command 2>&1\`; then :
Chris@4 2840 else
Chris@4 2841 $ECHO \"\$relink_command_output\" >&2
Chris@4 2842 $RM \"\$progdir/\$file\"
Chris@4 2843 exit 1
Chris@4 2844 fi
Chris@4 2845 fi
Chris@4 2846
Chris@4 2847 $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
Chris@4 2848 { $RM \"\$progdir/\$program\";
Chris@4 2849 $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
Chris@4 2850 $RM \"\$progdir/\$file\"
Chris@4 2851 fi"
Chris@4 2852 else
Chris@4 2853 $ECHO "\
Chris@4 2854 program='$outputname'
Chris@4 2855 progdir=\"\$thisdir/$objdir\"
Chris@4 2856 "
Chris@4 2857 fi
Chris@4 2858
Chris@4 2859 $ECHO "\
Chris@4 2860
Chris@4 2861 if test -f \"\$progdir/\$program\"; then"
Chris@4 2862
Chris@4 2863 # Export our shlibpath_var if we have one.
Chris@4 2864 if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
Chris@4 2865 $ECHO "\
Chris@4 2866 # Add our own library path to $shlibpath_var
Chris@4 2867 $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
Chris@4 2868
Chris@4 2869 # Some systems cannot cope with colon-terminated $shlibpath_var
Chris@4 2870 # The second colon is a workaround for a bug in BeOS R4 sed
Chris@4 2871 $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
Chris@4 2872
Chris@4 2873 export $shlibpath_var
Chris@4 2874 "
Chris@4 2875 fi
Chris@4 2876
Chris@4 2877 # fixup the dll searchpath if we need to.
Chris@4 2878 if test -n "$dllsearchpath"; then
Chris@4 2879 $ECHO "\
Chris@4 2880 # Add the dll search path components to the executable PATH
Chris@4 2881 PATH=$dllsearchpath:\$PATH
Chris@4 2882 "
Chris@4 2883 fi
Chris@4 2884
Chris@4 2885 $ECHO "\
Chris@4 2886 if test \"\$libtool_execute_magic\" != \"$magic\"; then
Chris@4 2887 # Run the actual program with our arguments.
Chris@4 2888 "
Chris@4 2889 case $host in
Chris@4 2890 # Backslashes separate directories on plain windows
Chris@4 2891 *-*-mingw | *-*-os2*)
Chris@4 2892 $ECHO "\
Chris@4 2893 exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
Chris@4 2894 "
Chris@4 2895 ;;
Chris@4 2896
Chris@4 2897 *)
Chris@4 2898 $ECHO "\
Chris@4 2899 exec \"\$progdir/\$program\" \${1+\"\$@\"}
Chris@4 2900 "
Chris@4 2901 ;;
Chris@4 2902 esac
Chris@4 2903 $ECHO "\
Chris@4 2904 \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
Chris@4 2905 exit 1
Chris@4 2906 fi
Chris@4 2907 else
Chris@4 2908 # The program doesn't exist.
Chris@4 2909 \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
Chris@4 2910 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
Chris@4 2911 $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
Chris@4 2912 exit 1
Chris@4 2913 fi
Chris@4 2914 fi\
Chris@4 2915 "
Chris@4 2916 }
Chris@4 2917 # end: func_emit_wrapper
Chris@4 2918
Chris@4 2919 # func_emit_cwrapperexe_src
Chris@4 2920 # emit the source code for a wrapper executable on stdout
Chris@4 2921 # Must ONLY be called from within func_mode_link because
Chris@4 2922 # it depends on a number of variable set therein.
Chris@4 2923 func_emit_cwrapperexe_src ()
Chris@4 2924 {
Chris@4 2925 cat <<EOF
Chris@4 2926
Chris@4 2927 /* $cwrappersource - temporary wrapper executable for $objdir/$outputname
Chris@4 2928 Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
Chris@4 2929
Chris@4 2930 The $output program cannot be directly executed until all the libtool
Chris@4 2931 libraries that it depends on are installed.
Chris@4 2932
Chris@4 2933 This wrapper executable should never be moved out of the build directory.
Chris@4 2934 If it is, it will not operate correctly.
Chris@4 2935
Chris@4 2936 Currently, it simply execs the wrapper *script* "$SHELL $output",
Chris@4 2937 but could eventually absorb all of the scripts functionality and
Chris@4 2938 exec $objdir/$outputname directly.
Chris@4 2939 */
Chris@4 2940 EOF
Chris@4 2941 cat <<"EOF"
Chris@4 2942 #include <stdio.h>
Chris@4 2943 #include <stdlib.h>
Chris@4 2944 #ifdef _MSC_VER
Chris@4 2945 # include <direct.h>
Chris@4 2946 # include <process.h>
Chris@4 2947 # include <io.h>
Chris@4 2948 # define setmode _setmode
Chris@4 2949 #else
Chris@4 2950 # include <unistd.h>
Chris@4 2951 # include <stdint.h>
Chris@4 2952 # ifdef __CYGWIN__
Chris@4 2953 # include <io.h>
Chris@4 2954 # endif
Chris@4 2955 #endif
Chris@4 2956 #include <malloc.h>
Chris@4 2957 #include <stdarg.h>
Chris@4 2958 #include <assert.h>
Chris@4 2959 #include <string.h>
Chris@4 2960 #include <ctype.h>
Chris@4 2961 #include <errno.h>
Chris@4 2962 #include <fcntl.h>
Chris@4 2963 #include <sys/stat.h>
Chris@4 2964
Chris@4 2965 #if defined(PATH_MAX)
Chris@4 2966 # define LT_PATHMAX PATH_MAX
Chris@4 2967 #elif defined(MAXPATHLEN)
Chris@4 2968 # define LT_PATHMAX MAXPATHLEN
Chris@4 2969 #else
Chris@4 2970 # define LT_PATHMAX 1024
Chris@4 2971 #endif
Chris@4 2972
Chris@4 2973 #ifndef S_IXOTH
Chris@4 2974 # define S_IXOTH 0
Chris@4 2975 #endif
Chris@4 2976 #ifndef S_IXGRP
Chris@4 2977 # define S_IXGRP 0
Chris@4 2978 #endif
Chris@4 2979
Chris@4 2980 #ifdef _MSC_VER
Chris@4 2981 # define S_IXUSR _S_IEXEC
Chris@4 2982 # define stat _stat
Chris@4 2983 # ifndef _INTPTR_T_DEFINED
Chris@4 2984 # define intptr_t int
Chris@4 2985 # endif
Chris@4 2986 #endif
Chris@4 2987
Chris@4 2988 #ifndef DIR_SEPARATOR
Chris@4 2989 # define DIR_SEPARATOR '/'
Chris@4 2990 # define PATH_SEPARATOR ':'
Chris@4 2991 #endif
Chris@4 2992
Chris@4 2993 #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
Chris@4 2994 defined (__OS2__)
Chris@4 2995 # define HAVE_DOS_BASED_FILE_SYSTEM
Chris@4 2996 # define FOPEN_WB "wb"
Chris@4 2997 # ifndef DIR_SEPARATOR_2
Chris@4 2998 # define DIR_SEPARATOR_2 '\\'
Chris@4 2999 # endif
Chris@4 3000 # ifndef PATH_SEPARATOR_2
Chris@4 3001 # define PATH_SEPARATOR_2 ';'
Chris@4 3002 # endif
Chris@4 3003 #endif
Chris@4 3004
Chris@4 3005 #ifndef DIR_SEPARATOR_2
Chris@4 3006 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
Chris@4 3007 #else /* DIR_SEPARATOR_2 */
Chris@4 3008 # define IS_DIR_SEPARATOR(ch) \
Chris@4 3009 (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
Chris@4 3010 #endif /* DIR_SEPARATOR_2 */
Chris@4 3011
Chris@4 3012 #ifndef PATH_SEPARATOR_2
Chris@4 3013 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
Chris@4 3014 #else /* PATH_SEPARATOR_2 */
Chris@4 3015 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
Chris@4 3016 #endif /* PATH_SEPARATOR_2 */
Chris@4 3017
Chris@4 3018 #ifdef __CYGWIN__
Chris@4 3019 # define FOPEN_WB "wb"
Chris@4 3020 #endif
Chris@4 3021
Chris@4 3022 #ifndef FOPEN_WB
Chris@4 3023 # define FOPEN_WB "w"
Chris@4 3024 #endif
Chris@4 3025 #ifndef _O_BINARY
Chris@4 3026 # define _O_BINARY 0
Chris@4 3027 #endif
Chris@4 3028
Chris@4 3029 #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
Chris@4 3030 #define XFREE(stale) do { \
Chris@4 3031 if (stale) { free ((void *) stale); stale = 0; } \
Chris@4 3032 } while (0)
Chris@4 3033
Chris@4 3034 #undef LTWRAPPER_DEBUGPRINTF
Chris@4 3035 #if defined DEBUGWRAPPER
Chris@4 3036 # define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
Chris@4 3037 static void
Chris@4 3038 ltwrapper_debugprintf (const char *fmt, ...)
Chris@4 3039 {
Chris@4 3040 va_list args;
Chris@4 3041 va_start (args, fmt);
Chris@4 3042 (void) vfprintf (stderr, fmt, args);
Chris@4 3043 va_end (args);
Chris@4 3044 }
Chris@4 3045 #else
Chris@4 3046 # define LTWRAPPER_DEBUGPRINTF(args)
Chris@4 3047 #endif
Chris@4 3048
Chris@4 3049 const char *program_name = NULL;
Chris@4 3050
Chris@4 3051 void *xmalloc (size_t num);
Chris@4 3052 char *xstrdup (const char *string);
Chris@4 3053 const char *base_name (const char *name);
Chris@4 3054 char *find_executable (const char *wrapper);
Chris@4 3055 char *chase_symlinks (const char *pathspec);
Chris@4 3056 int make_executable (const char *path);
Chris@4 3057 int check_executable (const char *path);
Chris@4 3058 char *strendzap (char *str, const char *pat);
Chris@4 3059 void lt_fatal (const char *message, ...);
Chris@4 3060
Chris@4 3061 static const char *script_text =
Chris@4 3062 EOF
Chris@4 3063
Chris@4 3064 func_emit_wrapper yes |
Chris@4 3065 $SED -e 's/\([\\"]\)/\\\1/g' \
Chris@4 3066 -e 's/^/ "/' -e 's/$/\\n"/'
Chris@4 3067 echo ";"
Chris@4 3068
Chris@4 3069 cat <<EOF
Chris@4 3070 const char * MAGIC_EXE = "$magic_exe";
Chris@4 3071
Chris@4 3072 int
Chris@4 3073 main (int argc, char *argv[])
Chris@4 3074 {
Chris@4 3075 char **newargz;
Chris@4 3076 char *tmp_pathspec;
Chris@4 3077 char *actual_cwrapper_path;
Chris@4 3078 char *shwrapper_name;
Chris@4 3079 intptr_t rval = 127;
Chris@4 3080 FILE *shwrapper;
Chris@4 3081
Chris@4 3082 const char *dumpscript_opt = "--lt-dump-script";
Chris@4 3083 int i;
Chris@4 3084
Chris@4 3085 program_name = (char *) xstrdup (base_name (argv[0]));
Chris@4 3086 LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0]));
Chris@4 3087 LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
Chris@4 3088
Chris@4 3089 /* very simple arg parsing; don't want to rely on getopt */
Chris@4 3090 for (i = 1; i < argc; i++)
Chris@4 3091 {
Chris@4 3092 if (strcmp (argv[i], dumpscript_opt) == 0)
Chris@4 3093 {
Chris@4 3094 EOF
Chris@4 3095 case "$host" in
Chris@4 3096 *mingw* | *cygwin* )
Chris@4 3097 # make stdout use "unix" line endings
Chris@4 3098 echo " setmode(1,_O_BINARY);"
Chris@4 3099 ;;
Chris@4 3100 esac
Chris@4 3101
Chris@4 3102 cat <<EOF
Chris@4 3103 printf ("%s", script_text);
Chris@4 3104 return 0;
Chris@4 3105 }
Chris@4 3106 }
Chris@4 3107
Chris@4 3108 newargz = XMALLOC (char *, argc + 2);
Chris@4 3109 EOF
Chris@4 3110
Chris@4 3111 if test -n "$TARGETSHELL" ; then
Chris@4 3112 # no path translation at all
Chris@4 3113 lt_newargv0=$TARGETSHELL
Chris@4 3114 else
Chris@4 3115 case "$host" in
Chris@4 3116 *mingw* )
Chris@4 3117 # awkward: cmd appends spaces to result
Chris@4 3118 lt_sed_strip_trailing_spaces="s/[ ]*\$//"
Chris@4 3119 lt_newargv0=`( cmd //c echo $SHELL | $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo $SHELL`
Chris@4 3120 case $lt_newargv0 in
Chris@4 3121 *.exe | *.EXE) ;;
Chris@4 3122 *) lt_newargv0=$lt_newargv0.exe ;;
Chris@4 3123 esac
Chris@4 3124 ;;
Chris@4 3125 * ) lt_newargv0=$SHELL ;;
Chris@4 3126 esac
Chris@4 3127 fi
Chris@4 3128
Chris@4 3129 cat <<EOF
Chris@4 3130 newargz[0] = (char *) xstrdup ("$lt_newargv0");
Chris@4 3131 EOF
Chris@4 3132
Chris@4 3133 cat <<"EOF"
Chris@4 3134 tmp_pathspec = find_executable (argv[0]);
Chris@4 3135 if (tmp_pathspec == NULL)
Chris@4 3136 lt_fatal ("Couldn't find %s", argv[0]);
Chris@4 3137 LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
Chris@4 3138 tmp_pathspec));
Chris@4 3139
Chris@4 3140 actual_cwrapper_path = chase_symlinks (tmp_pathspec);
Chris@4 3141 LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
Chris@4 3142 actual_cwrapper_path));
Chris@4 3143 XFREE (tmp_pathspec);
Chris@4 3144
Chris@4 3145 shwrapper_name = (char *) xstrdup (base_name (actual_cwrapper_path));
Chris@4 3146 strendzap (actual_cwrapper_path, shwrapper_name);
Chris@4 3147
Chris@4 3148 /* shwrapper_name transforms */
Chris@4 3149 strendzap (shwrapper_name, ".exe");
Chris@4 3150 tmp_pathspec = XMALLOC (char, (strlen (shwrapper_name) +
Chris@4 3151 strlen ("_ltshwrapperTMP") + 1));
Chris@4 3152 strcpy (tmp_pathspec, shwrapper_name);
Chris@4 3153 strcat (tmp_pathspec, "_ltshwrapperTMP");
Chris@4 3154 XFREE (shwrapper_name);
Chris@4 3155 shwrapper_name = tmp_pathspec;
Chris@4 3156 tmp_pathspec = 0;
Chris@4 3157 LTWRAPPER_DEBUGPRINTF (("(main) libtool shell wrapper name: %s\n",
Chris@4 3158 shwrapper_name));
Chris@4 3159 EOF
Chris@4 3160
Chris@4 3161 cat <<EOF
Chris@4 3162 newargz[1] =
Chris@4 3163 XMALLOC (char, (strlen (actual_cwrapper_path) +
Chris@4 3164 strlen ("$objdir") + 1 + strlen (shwrapper_name) + 1));
Chris@4 3165 strcpy (newargz[1], actual_cwrapper_path);
Chris@4 3166 strcat (newargz[1], "$objdir");
Chris@4 3167 strcat (newargz[1], "/");
Chris@4 3168 strcat (newargz[1], shwrapper_name);
Chris@4 3169 EOF
Chris@4 3170
Chris@4 3171
Chris@4 3172 case $host_os in
Chris@4 3173 mingw*)
Chris@4 3174 cat <<"EOF"
Chris@4 3175 {
Chris@4 3176 char* p;
Chris@4 3177 while ((p = strchr (newargz[1], '\\')) != NULL)
Chris@4 3178 {
Chris@4 3179 *p = '/';
Chris@4 3180 }
Chris@4 3181 }
Chris@4 3182 EOF
Chris@4 3183 ;;
Chris@4 3184 esac
Chris@4 3185
Chris@4 3186 cat <<"EOF"
Chris@4 3187 XFREE (shwrapper_name);
Chris@4 3188 XFREE (actual_cwrapper_path);
Chris@4 3189
Chris@4 3190 /* always write in binary mode */
Chris@4 3191 if ((shwrapper = fopen (newargz[1], FOPEN_WB)) == 0)
Chris@4 3192 {
Chris@4 3193 lt_fatal ("Could not open %s for writing", newargz[1]);
Chris@4 3194 }
Chris@4 3195 fprintf (shwrapper, "%s", script_text);
Chris@4 3196 fclose (shwrapper);
Chris@4 3197
Chris@4 3198 make_executable (newargz[1]);
Chris@4 3199
Chris@4 3200 for (i = 1; i < argc; i++)
Chris@4 3201 newargz[i + 1] = xstrdup (argv[i]);
Chris@4 3202 newargz[argc + 1] = NULL;
Chris@4 3203
Chris@4 3204 for (i = 0; i < argc + 1; i++)
Chris@4 3205 {
Chris@4 3206 LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, newargz[i]));
Chris@4 3207 }
Chris@4 3208
Chris@4 3209 EOF
Chris@4 3210
Chris@4 3211 case $host_os in
Chris@4 3212 mingw*)
Chris@4 3213 cat <<EOF
Chris@4 3214 /* execv doesn't actually work on mingw as expected on unix */
Chris@4 3215 rval = _spawnv (_P_WAIT, "$lt_newargv0", (const char * const *) newargz);
Chris@4 3216 if (rval == -1)
Chris@4 3217 {
Chris@4 3218 /* failed to start process */
Chris@4 3219 LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"$lt_newargv0\": errno = %d\n", errno));
Chris@4 3220 return 127;
Chris@4 3221 }
Chris@4 3222 return rval;
Chris@4 3223 }
Chris@4 3224 EOF
Chris@4 3225 ;;
Chris@4 3226 *)
Chris@4 3227 cat <<EOF
Chris@4 3228 execv ("$lt_newargv0", newargz);
Chris@4 3229 return rval; /* =127, but avoids unused variable warning */
Chris@4 3230 }
Chris@4 3231 EOF
Chris@4 3232 ;;
Chris@4 3233 esac
Chris@4 3234
Chris@4 3235 cat <<"EOF"
Chris@4 3236
Chris@4 3237 void *
Chris@4 3238 xmalloc (size_t num)
Chris@4 3239 {
Chris@4 3240 void *p = (void *) malloc (num);
Chris@4 3241 if (!p)
Chris@4 3242 lt_fatal ("Memory exhausted");
Chris@4 3243
Chris@4 3244 return p;
Chris@4 3245 }
Chris@4 3246
Chris@4 3247 char *
Chris@4 3248 xstrdup (const char *string)
Chris@4 3249 {
Chris@4 3250 return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
Chris@4 3251 string) : NULL;
Chris@4 3252 }
Chris@4 3253
Chris@4 3254 const char *
Chris@4 3255 base_name (const char *name)
Chris@4 3256 {
Chris@4 3257 const char *base;
Chris@4 3258
Chris@4 3259 #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
Chris@4 3260 /* Skip over the disk name in MSDOS pathnames. */
Chris@4 3261 if (isalpha ((unsigned char) name[0]) && name[1] == ':')
Chris@4 3262 name += 2;
Chris@4 3263 #endif
Chris@4 3264
Chris@4 3265 for (base = name; *name; name++)
Chris@4 3266 if (IS_DIR_SEPARATOR (*name))
Chris@4 3267 base = name + 1;
Chris@4 3268 return base;
Chris@4 3269 }
Chris@4 3270
Chris@4 3271 int
Chris@4 3272 check_executable (const char *path)
Chris@4 3273 {
Chris@4 3274 struct stat st;
Chris@4 3275
Chris@4 3276 LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n",
Chris@4 3277 path ? (*path ? path : "EMPTY!") : "NULL!"));
Chris@4 3278 if ((!path) || (!*path))
Chris@4 3279 return 0;
Chris@4 3280
Chris@4 3281 if ((stat (path, &st) >= 0)
Chris@4 3282 && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
Chris@4 3283 return 1;
Chris@4 3284 else
Chris@4 3285 return 0;
Chris@4 3286 }
Chris@4 3287
Chris@4 3288 int
Chris@4 3289 make_executable (const char *path)
Chris@4 3290 {
Chris@4 3291 int rval = 0;
Chris@4 3292 struct stat st;
Chris@4 3293
Chris@4 3294 LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n",
Chris@4 3295 path ? (*path ? path : "EMPTY!") : "NULL!"));
Chris@4 3296 if ((!path) || (!*path))
Chris@4 3297 return 0;
Chris@4 3298
Chris@4 3299 if (stat (path, &st) >= 0)
Chris@4 3300 {
Chris@4 3301 rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
Chris@4 3302 }
Chris@4 3303 return rval;
Chris@4 3304 }
Chris@4 3305
Chris@4 3306 /* Searches for the full path of the wrapper. Returns
Chris@4 3307 newly allocated full path name if found, NULL otherwise
Chris@4 3308 Does not chase symlinks, even on platforms that support them.
Chris@4 3309 */
Chris@4 3310 char *
Chris@4 3311 find_executable (const char *wrapper)
Chris@4 3312 {
Chris@4 3313 int has_slash = 0;
Chris@4 3314 const char *p;
Chris@4 3315 const char *p_next;
Chris@4 3316 /* static buffer for getcwd */
Chris@4 3317 char tmp[LT_PATHMAX + 1];
Chris@4 3318 int tmp_len;
Chris@4 3319 char *concat_name;
Chris@4 3320
Chris@4 3321 LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n",
Chris@4 3322 wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
Chris@4 3323
Chris@4 3324 if ((wrapper == NULL) || (*wrapper == '\0'))
Chris@4 3325 return NULL;
Chris@4 3326
Chris@4 3327 /* Absolute path? */
Chris@4 3328 #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
Chris@4 3329 if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
Chris@4 3330 {
Chris@4 3331 concat_name = xstrdup (wrapper);
Chris@4 3332 if (check_executable (concat_name))
Chris@4 3333 return concat_name;
Chris@4 3334 XFREE (concat_name);
Chris@4 3335 }
Chris@4 3336 else
Chris@4 3337 {
Chris@4 3338 #endif
Chris@4 3339 if (IS_DIR_SEPARATOR (wrapper[0]))
Chris@4 3340 {
Chris@4 3341 concat_name = xstrdup (wrapper);
Chris@4 3342 if (check_executable (concat_name))
Chris@4 3343 return concat_name;
Chris@4 3344 XFREE (concat_name);
Chris@4 3345 }
Chris@4 3346 #if defined (HAVE_DOS_BASED_FILE_SYSTEM)
Chris@4 3347 }
Chris@4 3348 #endif
Chris@4 3349
Chris@4 3350 for (p = wrapper; *p; p++)
Chris@4 3351 if (*p == '/')
Chris@4 3352 {
Chris@4 3353 has_slash = 1;
Chris@4 3354 break;
Chris@4 3355 }
Chris@4 3356 if (!has_slash)
Chris@4 3357 {
Chris@4 3358 /* no slashes; search PATH */
Chris@4 3359 const char *path = getenv ("PATH");
Chris@4 3360 if (path != NULL)
Chris@4 3361 {
Chris@4 3362 for (p = path; *p; p = p_next)
Chris@4 3363 {
Chris@4 3364 const char *q;
Chris@4 3365 size_t p_len;
Chris@4 3366 for (q = p; *q; q++)
Chris@4 3367 if (IS_PATH_SEPARATOR (*q))
Chris@4 3368 break;
Chris@4 3369 p_len = q - p;
Chris@4 3370 p_next = (*q == '\0' ? q : q + 1);
Chris@4 3371 if (p_len == 0)
Chris@4 3372 {
Chris@4 3373 /* empty path: current directory */
Chris@4 3374 if (getcwd (tmp, LT_PATHMAX) == NULL)
Chris@4 3375 lt_fatal ("getcwd failed");
Chris@4 3376 tmp_len = strlen (tmp);
Chris@4 3377 concat_name =
Chris@4 3378 XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
Chris@4 3379 memcpy (concat_name, tmp, tmp_len);
Chris@4 3380 concat_name[tmp_len] = '/';
Chris@4 3381 strcpy (concat_name + tmp_len + 1, wrapper);
Chris@4 3382 }
Chris@4 3383 else
Chris@4 3384 {
Chris@4 3385 concat_name =
Chris@4 3386 XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
Chris@4 3387 memcpy (concat_name, p, p_len);
Chris@4 3388 concat_name[p_len] = '/';
Chris@4 3389 strcpy (concat_name + p_len + 1, wrapper);
Chris@4 3390 }
Chris@4 3391 if (check_executable (concat_name))
Chris@4 3392 return concat_name;
Chris@4 3393 XFREE (concat_name);
Chris@4 3394 }
Chris@4 3395 }
Chris@4 3396 /* not found in PATH; assume curdir */
Chris@4 3397 }
Chris@4 3398 /* Relative path | not found in path: prepend cwd */
Chris@4 3399 if (getcwd (tmp, LT_PATHMAX) == NULL)
Chris@4 3400 lt_fatal ("getcwd failed");
Chris@4 3401 tmp_len = strlen (tmp);
Chris@4 3402 concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
Chris@4 3403 memcpy (concat_name, tmp, tmp_len);
Chris@4 3404 concat_name[tmp_len] = '/';
Chris@4 3405 strcpy (concat_name + tmp_len + 1, wrapper);
Chris@4 3406
Chris@4 3407 if (check_executable (concat_name))
Chris@4 3408 return concat_name;
Chris@4 3409 XFREE (concat_name);
Chris@4 3410 return NULL;
Chris@4 3411 }
Chris@4 3412
Chris@4 3413 char *
Chris@4 3414 chase_symlinks (const char *pathspec)
Chris@4 3415 {
Chris@4 3416 #ifndef S_ISLNK
Chris@4 3417 return xstrdup (pathspec);
Chris@4 3418 #else
Chris@4 3419 char buf[LT_PATHMAX];
Chris@4 3420 struct stat s;
Chris@4 3421 char *tmp_pathspec = xstrdup (pathspec);
Chris@4 3422 char *p;
Chris@4 3423 int has_symlinks = 0;
Chris@4 3424 while (strlen (tmp_pathspec) && !has_symlinks)
Chris@4 3425 {
Chris@4 3426 LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
Chris@4 3427 tmp_pathspec));
Chris@4 3428 if (lstat (tmp_pathspec, &s) == 0)
Chris@4 3429 {
Chris@4 3430 if (S_ISLNK (s.st_mode) != 0)
Chris@4 3431 {
Chris@4 3432 has_symlinks = 1;
Chris@4 3433 break;
Chris@4 3434 }
Chris@4 3435
Chris@4 3436 /* search backwards for last DIR_SEPARATOR */
Chris@4 3437 p = tmp_pathspec + strlen (tmp_pathspec) - 1;
Chris@4 3438 while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
Chris@4 3439 p--;
Chris@4 3440 if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
Chris@4 3441 {
Chris@4 3442 /* no more DIR_SEPARATORS left */
Chris@4 3443 break;
Chris@4 3444 }
Chris@4 3445 *p = '\0';
Chris@4 3446 }
Chris@4 3447 else
Chris@4 3448 {
Chris@4 3449 char *errstr = strerror (errno);
Chris@4 3450 lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
Chris@4 3451 }
Chris@4 3452 }
Chris@4 3453 XFREE (tmp_pathspec);
Chris@4 3454
Chris@4 3455 if (!has_symlinks)
Chris@4 3456 {
Chris@4 3457 return xstrdup (pathspec);
Chris@4 3458 }
Chris@4 3459
Chris@4 3460 tmp_pathspec = realpath (pathspec, buf);
Chris@4 3461 if (tmp_pathspec == 0)
Chris@4 3462 {
Chris@4 3463 lt_fatal ("Could not follow symlinks for %s", pathspec);
Chris@4 3464 }
Chris@4 3465 return xstrdup (tmp_pathspec);
Chris@4 3466 #endif
Chris@4 3467 }
Chris@4 3468
Chris@4 3469 char *
Chris@4 3470 strendzap (char *str, const char *pat)
Chris@4 3471 {
Chris@4 3472 size_t len, patlen;
Chris@4 3473
Chris@4 3474 assert (str != NULL);
Chris@4 3475 assert (pat != NULL);
Chris@4 3476
Chris@4 3477 len = strlen (str);
Chris@4 3478 patlen = strlen (pat);
Chris@4 3479
Chris@4 3480 if (patlen <= len)
Chris@4 3481 {
Chris@4 3482 str += len - patlen;
Chris@4 3483 if (strcmp (str, pat) == 0)
Chris@4 3484 *str = '\0';
Chris@4 3485 }
Chris@4 3486 return str;
Chris@4 3487 }
Chris@4 3488
Chris@4 3489 static void
Chris@4 3490 lt_error_core (int exit_status, const char *mode,
Chris@4 3491 const char *message, va_list ap)
Chris@4 3492 {
Chris@4 3493 fprintf (stderr, "%s: %s: ", program_name, mode);
Chris@4 3494 vfprintf (stderr, message, ap);
Chris@4 3495 fprintf (stderr, ".\n");
Chris@4 3496
Chris@4 3497 if (exit_status >= 0)
Chris@4 3498 exit (exit_status);
Chris@4 3499 }
Chris@4 3500
Chris@4 3501 void
Chris@4 3502 lt_fatal (const char *message, ...)
Chris@4 3503 {
Chris@4 3504 va_list ap;
Chris@4 3505 va_start (ap, message);
Chris@4 3506 lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
Chris@4 3507 va_end (ap);
Chris@4 3508 }
Chris@4 3509 EOF
Chris@4 3510 }
Chris@4 3511 # end: func_emit_cwrapperexe_src
Chris@4 3512
Chris@4 3513 # func_mode_link arg...
Chris@4 3514 func_mode_link ()
Chris@4 3515 {
Chris@4 3516 $opt_debug
Chris@4 3517 case $host in
Chris@4 3518 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
Chris@4 3519 # It is impossible to link a dll without this setting, and
Chris@4 3520 # we shouldn't force the makefile maintainer to figure out
Chris@4 3521 # which system we are compiling for in order to pass an extra
Chris@4 3522 # flag for every libtool invocation.
Chris@4 3523 # allow_undefined=no
Chris@4 3524
Chris@4 3525 # FIXME: Unfortunately, there are problems with the above when trying
Chris@4 3526 # to make a dll which has undefined symbols, in which case not
Chris@4 3527 # even a static library is built. For now, we need to specify
Chris@4 3528 # -no-undefined on the libtool link line when we can be certain
Chris@4 3529 # that all symbols are satisfied, otherwise we get a static library.
Chris@4 3530 allow_undefined=yes
Chris@4 3531 ;;
Chris@4 3532 *)
Chris@4 3533 allow_undefined=yes
Chris@4 3534 ;;
Chris@4 3535 esac
Chris@4 3536 libtool_args=$nonopt
Chris@4 3537 base_compile="$nonopt $@"
Chris@4 3538 compile_command=$nonopt
Chris@4 3539 finalize_command=$nonopt
Chris@4 3540
Chris@4 3541 compile_rpath=
Chris@4 3542 finalize_rpath=
Chris@4 3543 compile_shlibpath=
Chris@4 3544 finalize_shlibpath=
Chris@4 3545 convenience=
Chris@4 3546 old_convenience=
Chris@4 3547 deplibs=
Chris@4 3548 old_deplibs=
Chris@4 3549 compiler_flags=
Chris@4 3550 linker_flags=
Chris@4 3551 dllsearchpath=
Chris@4 3552 lib_search_path=`pwd`
Chris@4 3553 inst_prefix_dir=
Chris@4 3554 new_inherited_linker_flags=
Chris@4 3555
Chris@4 3556 avoid_version=no
Chris@4 3557 dlfiles=
Chris@4 3558 dlprefiles=
Chris@4 3559 dlself=no
Chris@4 3560 export_dynamic=no
Chris@4 3561 export_symbols=
Chris@4 3562 export_symbols_regex=
Chris@4 3563 generated=
Chris@4 3564 libobjs=
Chris@4 3565 ltlibs=
Chris@4 3566 module=no
Chris@4 3567 no_install=no
Chris@4 3568 objs=
Chris@4 3569 non_pic_objects=
Chris@4 3570 precious_files_regex=
Chris@4 3571 prefer_static_libs=no
Chris@4 3572 preload=no
Chris@4 3573 prev=
Chris@4 3574 prevarg=
Chris@4 3575 release=
Chris@4 3576 rpath=
Chris@4 3577 xrpath=
Chris@4 3578 perm_rpath=
Chris@4 3579 temp_rpath=
Chris@4 3580 thread_safe=no
Chris@4 3581 vinfo=
Chris@4 3582 vinfo_number=no
Chris@4 3583 weak_libs=
Chris@4 3584 single_module="${wl}-single_module"
Chris@4 3585 func_infer_tag $base_compile
Chris@4 3586
Chris@4 3587 # We need to know -static, to get the right output filenames.
Chris@4 3588 for arg
Chris@4 3589 do
Chris@4 3590 case $arg in
Chris@4 3591 -shared)
Chris@4 3592 test "$build_libtool_libs" != yes && \
Chris@4 3593 func_fatal_configuration "can not build a shared library"
Chris@4 3594 build_old_libs=no
Chris@4 3595 break
Chris@4 3596 ;;
Chris@4 3597 -all-static | -static | -static-libtool-libs)
Chris@4 3598 case $arg in
Chris@4 3599 -all-static)
Chris@4 3600 if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
Chris@4 3601 func_warning "complete static linking is impossible in this configuration"
Chris@4 3602 fi
Chris@4 3603 if test -n "$link_static_flag"; then
Chris@4 3604 dlopen_self=$dlopen_self_static
Chris@4 3605 fi
Chris@4 3606 prefer_static_libs=yes
Chris@4 3607 ;;
Chris@4 3608 -static)
Chris@4 3609 if test -z "$pic_flag" && test -n "$link_static_flag"; then
Chris@4 3610 dlopen_self=$dlopen_self_static
Chris@4 3611 fi
Chris@4 3612 prefer_static_libs=built
Chris@4 3613 ;;
Chris@4 3614 -static-libtool-libs)
Chris@4 3615 if test -z "$pic_flag" && test -n "$link_static_flag"; then
Chris@4 3616 dlopen_self=$dlopen_self_static
Chris@4 3617 fi
Chris@4 3618 prefer_static_libs=yes
Chris@4 3619 ;;
Chris@4 3620 esac
Chris@4 3621 build_libtool_libs=no
Chris@4 3622 build_old_libs=yes
Chris@4 3623 break
Chris@4 3624 ;;
Chris@4 3625 esac
Chris@4 3626 done
Chris@4 3627
Chris@4 3628 # See if our shared archives depend on static archives.
Chris@4 3629 test -n "$old_archive_from_new_cmds" && build_old_libs=yes
Chris@4 3630
Chris@4 3631 # Go through the arguments, transforming them on the way.
Chris@4 3632 while test "$#" -gt 0; do
Chris@4 3633 arg="$1"
Chris@4 3634 shift
Chris@4 3635 func_quote_for_eval "$arg"
Chris@4 3636 qarg=$func_quote_for_eval_unquoted_result
Chris@4 3637 func_append libtool_args " $func_quote_for_eval_result"
Chris@4 3638
Chris@4 3639 # If the previous option needs an argument, assign it.
Chris@4 3640 if test -n "$prev"; then
Chris@4 3641 case $prev in
Chris@4 3642 output)
Chris@4 3643 func_append compile_command " @OUTPUT@"
Chris@4 3644 func_append finalize_command " @OUTPUT@"
Chris@4 3645 ;;
Chris@4 3646 esac
Chris@4 3647
Chris@4 3648 case $prev in
Chris@4 3649 dlfiles|dlprefiles)
Chris@4 3650 if test "$preload" = no; then
Chris@4 3651 # Add the symbol object into the linking commands.
Chris@4 3652 func_append compile_command " @SYMFILE@"
Chris@4 3653 func_append finalize_command " @SYMFILE@"
Chris@4 3654 preload=yes
Chris@4 3655 fi
Chris@4 3656 case $arg in
Chris@4 3657 *.la | *.lo) ;; # We handle these cases below.
Chris@4 3658 force)
Chris@4 3659 if test "$dlself" = no; then
Chris@4 3660 dlself=needless
Chris@4 3661 export_dynamic=yes
Chris@4 3662 fi
Chris@4 3663 prev=
Chris@4 3664 continue
Chris@4 3665 ;;
Chris@4 3666 self)
Chris@4 3667 if test "$prev" = dlprefiles; then
Chris@4 3668 dlself=yes
Chris@4 3669 elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
Chris@4 3670 dlself=yes
Chris@4 3671 else
Chris@4 3672 dlself=needless
Chris@4 3673 export_dynamic=yes
Chris@4 3674 fi
Chris@4 3675 prev=
Chris@4 3676 continue
Chris@4 3677 ;;
Chris@4 3678 *)
Chris@4 3679 if test "$prev" = dlfiles; then
Chris@4 3680 dlfiles="$dlfiles $arg"
Chris@4 3681 else
Chris@4 3682 dlprefiles="$dlprefiles $arg"
Chris@4 3683 fi
Chris@4 3684 prev=
Chris@4 3685 continue
Chris@4 3686 ;;
Chris@4 3687 esac
Chris@4 3688 ;;
Chris@4 3689 expsyms)
Chris@4 3690 export_symbols="$arg"
Chris@4 3691 test -f "$arg" \
Chris@4 3692 || func_fatal_error "symbol file \`$arg' does not exist"
Chris@4 3693 prev=
Chris@4 3694 continue
Chris@4 3695 ;;
Chris@4 3696 expsyms_regex)
Chris@4 3697 export_symbols_regex="$arg"
Chris@4 3698 prev=
Chris@4 3699 continue
Chris@4 3700 ;;
Chris@4 3701 framework)
Chris@4 3702 case $host in
Chris@4 3703 *-*-darwin*)
Chris@4 3704 case "$deplibs " in
Chris@4 3705 *" $qarg.ltframework "*) ;;
Chris@4 3706 *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
Chris@4 3707 ;;
Chris@4 3708 esac
Chris@4 3709 ;;
Chris@4 3710 esac
Chris@4 3711 prev=
Chris@4 3712 continue
Chris@4 3713 ;;
Chris@4 3714 inst_prefix)
Chris@4 3715 inst_prefix_dir="$arg"
Chris@4 3716 prev=
Chris@4 3717 continue
Chris@4 3718 ;;
Chris@4 3719 objectlist)
Chris@4 3720 if test -f "$arg"; then
Chris@4 3721 save_arg=$arg
Chris@4 3722 moreargs=
Chris@4 3723 for fil in `cat "$save_arg"`
Chris@4 3724 do
Chris@4 3725 # moreargs="$moreargs $fil"
Chris@4 3726 arg=$fil
Chris@4 3727 # A libtool-controlled object.
Chris@4 3728
Chris@4 3729 # Check to see that this really is a libtool object.
Chris@4 3730 if func_lalib_unsafe_p "$arg"; then
Chris@4 3731 pic_object=
Chris@4 3732 non_pic_object=
Chris@4 3733
Chris@4 3734 # Read the .lo file
Chris@4 3735 func_source "$arg"
Chris@4 3736
Chris@4 3737 if test -z "$pic_object" ||
Chris@4 3738 test -z "$non_pic_object" ||
Chris@4 3739 test "$pic_object" = none &&
Chris@4 3740 test "$non_pic_object" = none; then
Chris@4 3741 func_fatal_error "cannot find name of object for \`$arg'"
Chris@4 3742 fi
Chris@4 3743
Chris@4 3744 # Extract subdirectory from the argument.
Chris@4 3745 func_dirname "$arg" "/" ""
Chris@4 3746 xdir="$func_dirname_result"
Chris@4 3747
Chris@4 3748 if test "$pic_object" != none; then
Chris@4 3749 # Prepend the subdirectory the object is found in.
Chris@4 3750 pic_object="$xdir$pic_object"
Chris@4 3751
Chris@4 3752 if test "$prev" = dlfiles; then
Chris@4 3753 if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
Chris@4 3754 dlfiles="$dlfiles $pic_object"
Chris@4 3755 prev=
Chris@4 3756 continue
Chris@4 3757 else
Chris@4 3758 # If libtool objects are unsupported, then we need to preload.
Chris@4 3759 prev=dlprefiles
Chris@4 3760 fi
Chris@4 3761 fi
Chris@4 3762
Chris@4 3763 # CHECK ME: I think I busted this. -Ossama
Chris@4 3764 if test "$prev" = dlprefiles; then
Chris@4 3765 # Preload the old-style object.
Chris@4 3766 dlprefiles="$dlprefiles $pic_object"
Chris@4 3767 prev=
Chris@4 3768 fi
Chris@4 3769
Chris@4 3770 # A PIC object.
Chris@4 3771 func_append libobjs " $pic_object"
Chris@4 3772 arg="$pic_object"
Chris@4 3773 fi
Chris@4 3774
Chris@4 3775 # Non-PIC object.
Chris@4 3776 if test "$non_pic_object" != none; then
Chris@4 3777 # Prepend the subdirectory the object is found in.
Chris@4 3778 non_pic_object="$xdir$non_pic_object"
Chris@4 3779
Chris@4 3780 # A standard non-PIC object
Chris@4 3781 func_append non_pic_objects " $non_pic_object"
Chris@4 3782 if test -z "$pic_object" || test "$pic_object" = none ; then
Chris@4 3783 arg="$non_pic_object"
Chris@4 3784 fi
Chris@4 3785 else
Chris@4 3786 # If the PIC object exists, use it instead.
Chris@4 3787 # $xdir was prepended to $pic_object above.
Chris@4 3788 non_pic_object="$pic_object"
Chris@4 3789 func_append non_pic_objects " $non_pic_object"
Chris@4 3790 fi
Chris@4 3791 else
Chris@4 3792 # Only an error if not doing a dry-run.
Chris@4 3793 if $opt_dry_run; then
Chris@4 3794 # Extract subdirectory from the argument.
Chris@4 3795 func_dirname "$arg" "/" ""
Chris@4 3796 xdir="$func_dirname_result"
Chris@4 3797
Chris@4 3798 func_lo2o "$arg"
Chris@4 3799 pic_object=$xdir$objdir/$func_lo2o_result
Chris@4 3800 non_pic_object=$xdir$func_lo2o_result
Chris@4 3801 func_append libobjs " $pic_object"
Chris@4 3802 func_append non_pic_objects " $non_pic_object"
Chris@4 3803 else
Chris@4 3804 func_fatal_error "\`$arg' is not a valid libtool object"
Chris@4 3805 fi
Chris@4 3806 fi
Chris@4 3807 done
Chris@4 3808 else
Chris@4 3809 func_fatal_error "link input file \`$arg' does not exist"
Chris@4 3810 fi
Chris@4 3811 arg=$save_arg
Chris@4 3812 prev=
Chris@4 3813 continue
Chris@4 3814 ;;
Chris@4 3815 precious_regex)
Chris@4 3816 precious_files_regex="$arg"
Chris@4 3817 prev=
Chris@4 3818 continue
Chris@4 3819 ;;
Chris@4 3820 release)
Chris@4 3821 release="-$arg"
Chris@4 3822 prev=
Chris@4 3823 continue
Chris@4 3824 ;;
Chris@4 3825 rpath | xrpath)
Chris@4 3826 # We need an absolute path.
Chris@4 3827 case $arg in
Chris@4 3828 [\\/]* | [A-Za-z]:[\\/]*) ;;
Chris@4 3829 *)
Chris@4 3830 func_fatal_error "only absolute run-paths are allowed"
Chris@4 3831 ;;
Chris@4 3832 esac
Chris@4 3833 if test "$prev" = rpath; then
Chris@4 3834 case "$rpath " in
Chris@4 3835 *" $arg "*) ;;
Chris@4 3836 *) rpath="$rpath $arg" ;;
Chris@4 3837 esac
Chris@4 3838 else
Chris@4 3839 case "$xrpath " in
Chris@4 3840 *" $arg "*) ;;
Chris@4 3841 *) xrpath="$xrpath $arg" ;;
Chris@4 3842 esac
Chris@4 3843 fi
Chris@4 3844 prev=
Chris@4 3845 continue
Chris@4 3846 ;;
Chris@4 3847 shrext)
Chris@4 3848 shrext_cmds="$arg"
Chris@4 3849 prev=
Chris@4 3850 continue
Chris@4 3851 ;;
Chris@4 3852 weak)
Chris@4 3853 weak_libs="$weak_libs $arg"
Chris@4 3854 prev=
Chris@4 3855 continue
Chris@4 3856 ;;
Chris@4 3857 xcclinker)
Chris@4 3858 linker_flags="$linker_flags $qarg"
Chris@4 3859 compiler_flags="$compiler_flags $qarg"
Chris@4 3860 prev=
Chris@4 3861 func_append compile_command " $qarg"
Chris@4 3862 func_append finalize_command " $qarg"
Chris@4 3863 continue
Chris@4 3864 ;;
Chris@4 3865 xcompiler)
Chris@4 3866 compiler_flags="$compiler_flags $qarg"
Chris@4 3867 prev=
Chris@4 3868 func_append compile_command " $qarg"
Chris@4 3869 func_append finalize_command " $qarg"
Chris@4 3870 continue
Chris@4 3871 ;;
Chris@4 3872 xlinker)
Chris@4 3873 linker_flags="$linker_flags $qarg"
Chris@4 3874 compiler_flags="$compiler_flags $wl$qarg"
Chris@4 3875 prev=
Chris@4 3876 func_append compile_command " $wl$qarg"
Chris@4 3877 func_append finalize_command " $wl$qarg"
Chris@4 3878 continue
Chris@4 3879 ;;
Chris@4 3880 *)
Chris@4 3881 eval "$prev=\"\$arg\""
Chris@4 3882 prev=
Chris@4 3883 continue
Chris@4 3884 ;;
Chris@4 3885 esac
Chris@4 3886 fi # test -n "$prev"
Chris@4 3887
Chris@4 3888 prevarg="$arg"
Chris@4 3889
Chris@4 3890 case $arg in
Chris@4 3891 -all-static)
Chris@4 3892 if test -n "$link_static_flag"; then
Chris@4 3893 # See comment for -static flag below, for more details.
Chris@4 3894 func_append compile_command " $link_static_flag"
Chris@4 3895 func_append finalize_command " $link_static_flag"
Chris@4 3896 fi
Chris@4 3897 continue
Chris@4 3898 ;;
Chris@4 3899
Chris@4 3900 -allow-undefined)
Chris@4 3901 # FIXME: remove this flag sometime in the future.
Chris@4 3902 func_fatal_error "\`-allow-undefined' must not be used because it is the default"
Chris@4 3903 ;;
Chris@4 3904
Chris@4 3905 -avoid-version)
Chris@4 3906 avoid_version=yes
Chris@4 3907 continue
Chris@4 3908 ;;
Chris@4 3909
Chris@4 3910 -dlopen)
Chris@4 3911 prev=dlfiles
Chris@4 3912 continue
Chris@4 3913 ;;
Chris@4 3914
Chris@4 3915 -dlpreopen)
Chris@4 3916 prev=dlprefiles
Chris@4 3917 continue
Chris@4 3918 ;;
Chris@4 3919
Chris@4 3920 -export-dynamic)
Chris@4 3921 export_dynamic=yes
Chris@4 3922 continue
Chris@4 3923 ;;
Chris@4 3924
Chris@4 3925 -export-symbols | -export-symbols-regex)
Chris@4 3926 if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
Chris@4 3927 func_fatal_error "more than one -exported-symbols argument is not allowed"
Chris@4 3928 fi
Chris@4 3929 if test "X$arg" = "X-export-symbols"; then
Chris@4 3930 prev=expsyms
Chris@4 3931 else
Chris@4 3932 prev=expsyms_regex
Chris@4 3933 fi
Chris@4 3934 continue
Chris@4 3935 ;;
Chris@4 3936
Chris@4 3937 -framework)
Chris@4 3938 prev=framework
Chris@4 3939 continue
Chris@4 3940 ;;
Chris@4 3941
Chris@4 3942 -inst-prefix-dir)
Chris@4 3943 prev=inst_prefix
Chris@4 3944 continue
Chris@4 3945 ;;
Chris@4 3946
Chris@4 3947 # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
Chris@4 3948 # so, if we see these flags be careful not to treat them like -L
Chris@4 3949 -L[A-Z][A-Z]*:*)
Chris@4 3950 case $with_gcc/$host in
Chris@4 3951 no/*-*-irix* | /*-*-irix*)
Chris@4 3952 func_append compile_command " $arg"
Chris@4 3953 func_append finalize_command " $arg"
Chris@4 3954 ;;
Chris@4 3955 esac
Chris@4 3956 continue
Chris@4 3957 ;;
Chris@4 3958
Chris@4 3959 -L*)
Chris@4 3960 func_stripname '-L' '' "$arg"
Chris@4 3961 dir=$func_stripname_result
Chris@4 3962 # We need an absolute path.
Chris@4 3963 case $dir in
Chris@4 3964 [\\/]* | [A-Za-z]:[\\/]*) ;;
Chris@4 3965 *)
Chris@4 3966 absdir=`cd "$dir" && pwd`
Chris@4 3967 test -z "$absdir" && \
Chris@4 3968 func_fatal_error "cannot determine absolute directory name of \`$dir'"
Chris@4 3969 dir="$absdir"
Chris@4 3970 ;;
Chris@4 3971 esac
Chris@4 3972 case "$deplibs " in
Chris@4 3973 *" -L$dir "*) ;;
Chris@4 3974 *)
Chris@4 3975 deplibs="$deplibs -L$dir"
Chris@4 3976 lib_search_path="$lib_search_path $dir"
Chris@4 3977 ;;
Chris@4 3978 esac
Chris@4 3979 case $host in
Chris@4 3980 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
Chris@4 3981 testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
Chris@4 3982 case :$dllsearchpath: in
Chris@4 3983 *":$dir:"*) ;;
Chris@4 3984 *) dllsearchpath="$dllsearchpath:$dir";;
Chris@4 3985 esac
Chris@4 3986 case :$dllsearchpath: in
Chris@4 3987 *":$testbindir:"*) ;;
Chris@4 3988 *) dllsearchpath="$dllsearchpath:$testbindir";;
Chris@4 3989 esac
Chris@4 3990 ;;
Chris@4 3991 esac
Chris@4 3992 continue
Chris@4 3993 ;;
Chris@4 3994
Chris@4 3995 -l*)
Chris@4 3996 if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
Chris@4 3997 case $host in
Chris@4 3998 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*)
Chris@4 3999 # These systems don't actually have a C or math library (as such)
Chris@4 4000 continue
Chris@4 4001 ;;
Chris@4 4002 *-*-os2*)
Chris@4 4003 # These systems don't actually have a C library (as such)
Chris@4 4004 test "X$arg" = "X-lc" && continue
Chris@4 4005 ;;
Chris@4 4006 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
Chris@4 4007 # Do not include libc due to us having libc/libc_r.
Chris@4 4008 test "X$arg" = "X-lc" && continue
Chris@4 4009 ;;
Chris@4 4010 *-*-rhapsody* | *-*-darwin1.[012])
Chris@4 4011 # Rhapsody C and math libraries are in the System framework
Chris@4 4012 deplibs="$deplibs System.ltframework"
Chris@4 4013 continue
Chris@4 4014 ;;
Chris@4 4015 *-*-sco3.2v5* | *-*-sco5v6*)
Chris@4 4016 # Causes problems with __ctype
Chris@4 4017 test "X$arg" = "X-lc" && continue
Chris@4 4018 ;;
Chris@4 4019 *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
Chris@4 4020 # Compiler inserts libc in the correct place for threads to work
Chris@4 4021 test "X$arg" = "X-lc" && continue
Chris@4 4022 ;;
Chris@4 4023 esac
Chris@4 4024 elif test "X$arg" = "X-lc_r"; then
Chris@4 4025 case $host in
Chris@4 4026 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
Chris@4 4027 # Do not include libc_r directly, use -pthread flag.
Chris@4 4028 continue
Chris@4 4029 ;;
Chris@4 4030 esac
Chris@4 4031 fi
Chris@4 4032 deplibs="$deplibs $arg"
Chris@4 4033 continue
Chris@4 4034 ;;
Chris@4 4035
Chris@4 4036 -module)
Chris@4 4037 module=yes
Chris@4 4038 continue
Chris@4 4039 ;;
Chris@4 4040
Chris@4 4041 # Tru64 UNIX uses -model [arg] to determine the layout of C++
Chris@4 4042 # classes, name mangling, and exception handling.
Chris@4 4043 # Darwin uses the -arch flag to determine output architecture.
Chris@4 4044 -model|-arch|-isysroot)
Chris@4 4045 compiler_flags="$compiler_flags $arg"
Chris@4 4046 func_append compile_command " $arg"
Chris@4 4047 func_append finalize_command " $arg"
Chris@4 4048 prev=xcompiler
Chris@4 4049 continue
Chris@4 4050 ;;
Chris@4 4051
Chris@4 4052 -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
Chris@4 4053 compiler_flags="$compiler_flags $arg"
Chris@4 4054 func_append compile_command " $arg"
Chris@4 4055 func_append finalize_command " $arg"
Chris@4 4056 case "$new_inherited_linker_flags " in
Chris@4 4057 *" $arg "*) ;;
Chris@4 4058 * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
Chris@4 4059 esac
Chris@4 4060 continue
Chris@4 4061 ;;
Chris@4 4062
Chris@4 4063 -multi_module)
Chris@4 4064 single_module="${wl}-multi_module"
Chris@4 4065 continue
Chris@4 4066 ;;
Chris@4 4067
Chris@4 4068 -no-fast-install)
Chris@4 4069 fast_install=no
Chris@4 4070 continue
Chris@4 4071 ;;
Chris@4 4072
Chris@4 4073 -no-install)
Chris@4 4074 case $host in
Chris@4 4075 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*)
Chris@4 4076 # The PATH hackery in wrapper scripts is required on Windows
Chris@4 4077 # and Darwin in order for the loader to find any dlls it needs.
Chris@4 4078 func_warning "\`-no-install' is ignored for $host"
Chris@4 4079 func_warning "assuming \`-no-fast-install' instead"
Chris@4 4080 fast_install=no
Chris@4 4081 ;;
Chris@4 4082 *) no_install=yes ;;
Chris@4 4083 esac
Chris@4 4084 continue
Chris@4 4085 ;;
Chris@4 4086
Chris@4 4087 -no-undefined)
Chris@4 4088 allow_undefined=no
Chris@4 4089 continue
Chris@4 4090 ;;
Chris@4 4091
Chris@4 4092 -objectlist)
Chris@4 4093 prev=objectlist
Chris@4 4094 continue
Chris@4 4095 ;;
Chris@4 4096
Chris@4 4097 -o) prev=output ;;
Chris@4 4098
Chris@4 4099 -precious-files-regex)
Chris@4 4100 prev=precious_regex
Chris@4 4101 continue
Chris@4 4102 ;;
Chris@4 4103
Chris@4 4104 -release)
Chris@4 4105 prev=release
Chris@4 4106 continue
Chris@4 4107 ;;
Chris@4 4108
Chris@4 4109 -rpath)
Chris@4 4110 prev=rpath
Chris@4 4111 continue
Chris@4 4112 ;;
Chris@4 4113
Chris@4 4114 -R)
Chris@4 4115 prev=xrpath
Chris@4 4116 continue
Chris@4 4117 ;;
Chris@4 4118
Chris@4 4119 -R*)
Chris@4 4120 func_stripname '-R' '' "$arg"
Chris@4 4121 dir=$func_stripname_result
Chris@4 4122 # We need an absolute path.
Chris@4 4123 case $dir in
Chris@4 4124 [\\/]* | [A-Za-z]:[\\/]*) ;;
Chris@4 4125 *)
Chris@4 4126 func_fatal_error "only absolute run-paths are allowed"
Chris@4 4127 ;;
Chris@4 4128 esac
Chris@4 4129 case "$xrpath " in
Chris@4 4130 *" $dir "*) ;;
Chris@4 4131 *) xrpath="$xrpath $dir" ;;
Chris@4 4132 esac
Chris@4 4133 continue
Chris@4 4134 ;;
Chris@4 4135
Chris@4 4136 -shared)
Chris@4 4137 # The effects of -shared are defined in a previous loop.
Chris@4 4138 continue
Chris@4 4139 ;;
Chris@4 4140
Chris@4 4141 -shrext)
Chris@4 4142 prev=shrext
Chris@4 4143 continue
Chris@4 4144 ;;
Chris@4 4145
Chris@4 4146 -static | -static-libtool-libs)
Chris@4 4147 # The effects of -static are defined in a previous loop.
Chris@4 4148 # We used to do the same as -all-static on platforms that
Chris@4 4149 # didn't have a PIC flag, but the assumption that the effects
Chris@4 4150 # would be equivalent was wrong. It would break on at least
Chris@4 4151 # Digital Unix and AIX.
Chris@4 4152 continue
Chris@4 4153 ;;
Chris@4 4154
Chris@4 4155 -thread-safe)
Chris@4 4156 thread_safe=yes
Chris@4 4157 continue
Chris@4 4158 ;;
Chris@4 4159
Chris@4 4160 -version-info)
Chris@4 4161 prev=vinfo
Chris@4 4162 continue
Chris@4 4163 ;;
Chris@4 4164
Chris@4 4165 -version-number)
Chris@4 4166 prev=vinfo
Chris@4 4167 vinfo_number=yes
Chris@4 4168 continue
Chris@4 4169 ;;
Chris@4 4170
Chris@4 4171 -weak)
Chris@4 4172 prev=weak
Chris@4 4173 continue
Chris@4 4174 ;;
Chris@4 4175
Chris@4 4176 -Wc,*)
Chris@4 4177 func_stripname '-Wc,' '' "$arg"
Chris@4 4178 args=$func_stripname_result
Chris@4 4179 arg=
Chris@4 4180 save_ifs="$IFS"; IFS=','
Chris@4 4181 for flag in $args; do
Chris@4 4182 IFS="$save_ifs"
Chris@4 4183 func_quote_for_eval "$flag"
Chris@4 4184 arg="$arg $wl$func_quote_for_eval_result"
Chris@4 4185 compiler_flags="$compiler_flags $func_quote_for_eval_result"
Chris@4 4186 done
Chris@4 4187 IFS="$save_ifs"
Chris@4 4188 func_stripname ' ' '' "$arg"
Chris@4 4189 arg=$func_stripname_result
Chris@4 4190 ;;
Chris@4 4191
Chris@4 4192 -Wl,*)
Chris@4 4193 func_stripname '-Wl,' '' "$arg"
Chris@4 4194 args=$func_stripname_result
Chris@4 4195 arg=
Chris@4 4196 save_ifs="$IFS"; IFS=','
Chris@4 4197 for flag in $args; do
Chris@4 4198 IFS="$save_ifs"
Chris@4 4199 func_quote_for_eval "$flag"
Chris@4 4200 arg="$arg $wl$func_quote_for_eval_result"
Chris@4 4201 compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
Chris@4 4202 linker_flags="$linker_flags $func_quote_for_eval_result"
Chris@4 4203 done
Chris@4 4204 IFS="$save_ifs"
Chris@4 4205 func_stripname ' ' '' "$arg"
Chris@4 4206 arg=$func_stripname_result
Chris@4 4207 ;;
Chris@4 4208
Chris@4 4209 -Xcompiler)
Chris@4 4210 prev=xcompiler
Chris@4 4211 continue
Chris@4 4212 ;;
Chris@4 4213
Chris@4 4214 -Xlinker)
Chris@4 4215 prev=xlinker
Chris@4 4216 continue
Chris@4 4217 ;;
Chris@4 4218
Chris@4 4219 -XCClinker)
Chris@4 4220 prev=xcclinker
Chris@4 4221 continue
Chris@4 4222 ;;
Chris@4 4223
Chris@4 4224 # -msg_* for osf cc
Chris@4 4225 -msg_*)
Chris@4 4226 func_quote_for_eval "$arg"
Chris@4 4227 arg="$func_quote_for_eval_result"
Chris@4 4228 ;;
Chris@4 4229
Chris@4 4230 # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
Chris@4 4231 # -r[0-9][0-9]* specifies the processor on the SGI compiler
Chris@4 4232 # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
Chris@4 4233 # +DA*, +DD* enable 64-bit mode on the HP compiler
Chris@4 4234 # -q* pass through compiler args for the IBM compiler
Chris@4 4235 # -m*, -t[45]*, -txscale* pass through architecture-specific
Chris@4 4236 # compiler args for GCC
Chris@4 4237 # -F/path gives path to uninstalled frameworks, gcc on darwin
Chris@4 4238 # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
Chris@4 4239 # @file GCC response files
Chris@4 4240 -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
Chris@4 4241 -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
Chris@4 4242 func_quote_for_eval "$arg"
Chris@4 4243 arg="$func_quote_for_eval_result"
Chris@4 4244 func_append compile_command " $arg"
Chris@4 4245 func_append finalize_command " $arg"
Chris@4 4246 compiler_flags="$compiler_flags $arg"
Chris@4 4247 continue
Chris@4 4248 ;;
Chris@4 4249
Chris@4 4250 # Some other compiler flag.
Chris@4 4251 -* | +*)
Chris@4 4252 func_quote_for_eval "$arg"
Chris@4 4253 arg="$func_quote_for_eval_result"
Chris@4 4254 ;;
Chris@4 4255
Chris@4 4256 *.$objext)
Chris@4 4257 # A standard object.
Chris@4 4258 objs="$objs $arg"
Chris@4 4259 ;;
Chris@4 4260
Chris@4 4261 *.lo)
Chris@4 4262 # A libtool-controlled object.
Chris@4 4263
Chris@4 4264 # Check to see that this really is a libtool object.
Chris@4 4265 if func_lalib_unsafe_p "$arg"; then
Chris@4 4266 pic_object=
Chris@4 4267 non_pic_object=
Chris@4 4268
Chris@4 4269 # Read the .lo file
Chris@4 4270 func_source "$arg"
Chris@4 4271
Chris@4 4272 if test -z "$pic_object" ||
Chris@4 4273 test -z "$non_pic_object" ||
Chris@4 4274 test "$pic_object" = none &&
Chris@4 4275 test "$non_pic_object" = none; then
Chris@4 4276 func_fatal_error "cannot find name of object for \`$arg'"
Chris@4 4277 fi
Chris@4 4278
Chris@4 4279 # Extract subdirectory from the argument.
Chris@4 4280 func_dirname "$arg" "/" ""
Chris@4 4281 xdir="$func_dirname_result"
Chris@4 4282
Chris@4 4283 if test "$pic_object" != none; then
Chris@4 4284 # Prepend the subdirectory the object is found in.
Chris@4 4285 pic_object="$xdir$pic_object"
Chris@4 4286
Chris@4 4287 if test "$prev" = dlfiles; then
Chris@4 4288 if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
Chris@4 4289 dlfiles="$dlfiles $pic_object"
Chris@4 4290 prev=
Chris@4 4291 continue
Chris@4 4292 else
Chris@4 4293 # If libtool objects are unsupported, then we need to preload.
Chris@4 4294 prev=dlprefiles
Chris@4 4295 fi
Chris@4 4296 fi
Chris@4 4297
Chris@4 4298 # CHECK ME: I think I busted this. -Ossama
Chris@4 4299 if test "$prev" = dlprefiles; then
Chris@4 4300 # Preload the old-style object.
Chris@4 4301 dlprefiles="$dlprefiles $pic_object"
Chris@4 4302 prev=
Chris@4 4303 fi
Chris@4 4304
Chris@4 4305 # A PIC object.
Chris@4 4306 func_append libobjs " $pic_object"
Chris@4 4307 arg="$pic_object"
Chris@4 4308 fi
Chris@4 4309
Chris@4 4310 # Non-PIC object.
Chris@4 4311 if test "$non_pic_object" != none; then
Chris@4 4312 # Prepend the subdirectory the object is found in.
Chris@4 4313 non_pic_object="$xdir$non_pic_object"
Chris@4 4314
Chris@4 4315 # A standard non-PIC object
Chris@4 4316 func_append non_pic_objects " $non_pic_object"
Chris@4 4317 if test -z "$pic_object" || test "$pic_object" = none ; then
Chris@4 4318 arg="$non_pic_object"
Chris@4 4319 fi
Chris@4 4320 else
Chris@4 4321 # If the PIC object exists, use it instead.
Chris@4 4322 # $xdir was prepended to $pic_object above.
Chris@4 4323 non_pic_object="$pic_object"
Chris@4 4324 func_append non_pic_objects " $non_pic_object"
Chris@4 4325 fi
Chris@4 4326 else
Chris@4 4327 # Only an error if not doing a dry-run.
Chris@4 4328 if $opt_dry_run; then
Chris@4 4329 # Extract subdirectory from the argument.
Chris@4 4330 func_dirname "$arg" "/" ""
Chris@4 4331 xdir="$func_dirname_result"
Chris@4 4332
Chris@4 4333 func_lo2o "$arg"
Chris@4 4334 pic_object=$xdir$objdir/$func_lo2o_result
Chris@4 4335 non_pic_object=$xdir$func_lo2o_result
Chris@4 4336 func_append libobjs " $pic_object"
Chris@4 4337 func_append non_pic_objects " $non_pic_object"
Chris@4 4338 else
Chris@4 4339 func_fatal_error "\`$arg' is not a valid libtool object"
Chris@4 4340 fi
Chris@4 4341 fi
Chris@4 4342 ;;
Chris@4 4343
Chris@4 4344 *.$libext)
Chris@4 4345 # An archive.
Chris@4 4346 deplibs="$deplibs $arg"
Chris@4 4347 old_deplibs="$old_deplibs $arg"
Chris@4 4348 continue
Chris@4 4349 ;;
Chris@4 4350
Chris@4 4351 *.la)
Chris@4 4352 # A libtool-controlled library.
Chris@4 4353
Chris@4 4354 if test "$prev" = dlfiles; then
Chris@4 4355 # This library was specified with -dlopen.
Chris@4 4356 dlfiles="$dlfiles $arg"
Chris@4 4357 prev=
Chris@4 4358 elif test "$prev" = dlprefiles; then
Chris@4 4359 # The library was specified with -dlpreopen.
Chris@4 4360 dlprefiles="$dlprefiles $arg"
Chris@4 4361 prev=
Chris@4 4362 else
Chris@4 4363 deplibs="$deplibs $arg"
Chris@4 4364 fi
Chris@4 4365 continue
Chris@4 4366 ;;
Chris@4 4367
Chris@4 4368 # Some other compiler argument.
Chris@4 4369 *)
Chris@4 4370 # Unknown arguments in both finalize_command and compile_command need
Chris@4 4371 # to be aesthetically quoted because they are evaled later.
Chris@4 4372 func_quote_for_eval "$arg"
Chris@4 4373 arg="$func_quote_for_eval_result"
Chris@4 4374 ;;
Chris@4 4375 esac # arg
Chris@4 4376
Chris@4 4377 # Now actually substitute the argument into the commands.
Chris@4 4378 if test -n "$arg"; then
Chris@4 4379 func_append compile_command " $arg"
Chris@4 4380 func_append finalize_command " $arg"
Chris@4 4381 fi
Chris@4 4382 done # argument parsing loop
Chris@4 4383
Chris@4 4384 test -n "$prev" && \
Chris@4 4385 func_fatal_help "the \`$prevarg' option requires an argument"
Chris@4 4386
Chris@4 4387 if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
Chris@4 4388 eval arg=\"$export_dynamic_flag_spec\"
Chris@4 4389 func_append compile_command " $arg"
Chris@4 4390 func_append finalize_command " $arg"
Chris@4 4391 fi
Chris@4 4392
Chris@4 4393 oldlibs=
Chris@4 4394 # calculate the name of the file, without its directory
Chris@4 4395 func_basename "$output"
Chris@4 4396 outputname="$func_basename_result"
Chris@4 4397 libobjs_save="$libobjs"
Chris@4 4398
Chris@4 4399 if test -n "$shlibpath_var"; then
Chris@4 4400 # get the directories listed in $shlibpath_var
Chris@4 4401 eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
Chris@4 4402 else
Chris@4 4403 shlib_search_path=
Chris@4 4404 fi
Chris@4 4405 eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
Chris@4 4406 eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
Chris@4 4407
Chris@4 4408 func_dirname "$output" "/" ""
Chris@4 4409 output_objdir="$func_dirname_result$objdir"
Chris@4 4410 # Create the object directory.
Chris@4 4411 func_mkdir_p "$output_objdir"
Chris@4 4412
Chris@4 4413 # Determine the type of output
Chris@4 4414 case $output in
Chris@4 4415 "")
Chris@4 4416 func_fatal_help "you must specify an output file"
Chris@4 4417 ;;
Chris@4 4418 *.$libext) linkmode=oldlib ;;
Chris@4 4419 *.lo | *.$objext) linkmode=obj ;;
Chris@4 4420 *.la) linkmode=lib ;;
Chris@4 4421 *) linkmode=prog ;; # Anything else should be a program.
Chris@4 4422 esac
Chris@4 4423
Chris@4 4424 specialdeplibs=
Chris@4 4425
Chris@4 4426 libs=
Chris@4 4427 # Find all interdependent deplibs by searching for libraries
Chris@4 4428 # that are linked more than once (e.g. -la -lb -la)
Chris@4 4429 for deplib in $deplibs; do
Chris@4 4430 if $opt_duplicate_deps ; then
Chris@4 4431 case "$libs " in
Chris@4 4432 *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
Chris@4 4433 esac
Chris@4 4434 fi
Chris@4 4435 libs="$libs $deplib"
Chris@4 4436 done
Chris@4 4437
Chris@4 4438 if test "$linkmode" = lib; then
Chris@4 4439 libs="$predeps $libs $compiler_lib_search_path $postdeps"
Chris@4 4440
Chris@4 4441 # Compute libraries that are listed more than once in $predeps
Chris@4 4442 # $postdeps and mark them as special (i.e., whose duplicates are
Chris@4 4443 # not to be eliminated).
Chris@4 4444 pre_post_deps=
Chris@4 4445 if $opt_duplicate_compiler_generated_deps; then
Chris@4 4446 for pre_post_dep in $predeps $postdeps; do
Chris@4 4447 case "$pre_post_deps " in
Chris@4 4448 *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
Chris@4 4449 esac
Chris@4 4450 pre_post_deps="$pre_post_deps $pre_post_dep"
Chris@4 4451 done
Chris@4 4452 fi
Chris@4 4453 pre_post_deps=
Chris@4 4454 fi
Chris@4 4455
Chris@4 4456 deplibs=
Chris@4 4457 newdependency_libs=
Chris@4 4458 newlib_search_path=
Chris@4 4459 need_relink=no # whether we're linking any uninstalled libtool libraries
Chris@4 4460 notinst_deplibs= # not-installed libtool libraries
Chris@4 4461 notinst_path= # paths that contain not-installed libtool libraries
Chris@4 4462
Chris@4 4463 case $linkmode in
Chris@4 4464 lib)
Chris@4 4465 passes="conv dlpreopen link"
Chris@4 4466 for file in $dlfiles $dlprefiles; do
Chris@4 4467 case $file in
Chris@4 4468 *.la) ;;
Chris@4 4469 *)
Chris@4 4470 func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
Chris@4 4471 ;;
Chris@4 4472 esac
Chris@4 4473 done
Chris@4 4474 ;;
Chris@4 4475 prog)
Chris@4 4476 compile_deplibs=
Chris@4 4477 finalize_deplibs=
Chris@4 4478 alldeplibs=no
Chris@4 4479 newdlfiles=
Chris@4 4480 newdlprefiles=
Chris@4 4481 passes="conv scan dlopen dlpreopen link"
Chris@4 4482 ;;
Chris@4 4483 *) passes="conv"
Chris@4 4484 ;;
Chris@4 4485 esac
Chris@4 4486
Chris@4 4487 for pass in $passes; do
Chris@4 4488 # The preopen pass in lib mode reverses $deplibs; put it back here
Chris@4 4489 # so that -L comes before libs that need it for instance...
Chris@4 4490 if test "$linkmode,$pass" = "lib,link"; then
Chris@4 4491 ## FIXME: Find the place where the list is rebuilt in the wrong
Chris@4 4492 ## order, and fix it there properly
Chris@4 4493 tmp_deplibs=
Chris@4 4494 for deplib in $deplibs; do
Chris@4 4495 tmp_deplibs="$deplib $tmp_deplibs"
Chris@4 4496 done
Chris@4 4497 deplibs="$tmp_deplibs"
Chris@4 4498 fi
Chris@4 4499
Chris@4 4500 if test "$linkmode,$pass" = "lib,link" ||
Chris@4 4501 test "$linkmode,$pass" = "prog,scan"; then
Chris@4 4502 libs="$deplibs"
Chris@4 4503 deplibs=
Chris@4 4504 fi
Chris@4 4505 if test "$linkmode" = prog; then
Chris@4 4506 case $pass in
Chris@4 4507 dlopen) libs="$dlfiles" ;;
Chris@4 4508 dlpreopen) libs="$dlprefiles" ;;
Chris@4 4509 link)
Chris@4 4510 libs="$deplibs %DEPLIBS%"
Chris@4 4511 test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
Chris@4 4512 ;;
Chris@4 4513 esac
Chris@4 4514 fi
Chris@4 4515 if test "$linkmode,$pass" = "lib,dlpreopen"; then
Chris@4 4516 # Collect and forward deplibs of preopened libtool libs
Chris@4 4517 for lib in $dlprefiles; do
Chris@4 4518 # Ignore non-libtool-libs
Chris@4 4519 dependency_libs=
Chris@4 4520 case $lib in
Chris@4 4521 *.la) func_source "$lib" ;;
Chris@4 4522 esac
Chris@4 4523
Chris@4 4524 # Collect preopened libtool deplibs, except any this library
Chris@4 4525 # has declared as weak libs
Chris@4 4526 for deplib in $dependency_libs; do
Chris@4 4527 deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
Chris@4 4528 case " $weak_libs " in
Chris@4 4529 *" $deplib_base "*) ;;
Chris@4 4530 *) deplibs="$deplibs $deplib" ;;
Chris@4 4531 esac
Chris@4 4532 done
Chris@4 4533 done
Chris@4 4534 libs="$dlprefiles"
Chris@4 4535 fi
Chris@4 4536 if test "$pass" = dlopen; then
Chris@4 4537 # Collect dlpreopened libraries
Chris@4 4538 save_deplibs="$deplibs"
Chris@4 4539 deplibs=
Chris@4 4540 fi
Chris@4 4541
Chris@4 4542 for deplib in $libs; do
Chris@4 4543 lib=
Chris@4 4544 found=no
Chris@4 4545 case $deplib in
Chris@4 4546 -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
Chris@4 4547 if test "$linkmode,$pass" = "prog,link"; then
Chris@4 4548 compile_deplibs="$deplib $compile_deplibs"
Chris@4 4549 finalize_deplibs="$deplib $finalize_deplibs"
Chris@4 4550 else
Chris@4 4551 compiler_flags="$compiler_flags $deplib"
Chris@4 4552 if test "$linkmode" = lib ; then
Chris@4 4553 case "$new_inherited_linker_flags " in
Chris@4 4554 *" $deplib "*) ;;
Chris@4 4555 * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
Chris@4 4556 esac
Chris@4 4557 fi
Chris@4 4558 fi
Chris@4 4559 continue
Chris@4 4560 ;;
Chris@4 4561 -l*)
Chris@4 4562 if test "$linkmode" != lib && test "$linkmode" != prog; then
Chris@4 4563 func_warning "\`-l' is ignored for archives/objects"
Chris@4 4564 continue
Chris@4 4565 fi
Chris@4 4566 func_stripname '-l' '' "$deplib"
Chris@4 4567 name=$func_stripname_result
Chris@4 4568 if test "$linkmode" = lib; then
Chris@4 4569 searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
Chris@4 4570 else
Chris@4 4571 searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
Chris@4 4572 fi
Chris@4 4573 for searchdir in $searchdirs; do
Chris@4 4574 for search_ext in .la $std_shrext .so .a; do
Chris@4 4575 # Search the libtool library
Chris@4 4576 lib="$searchdir/lib${name}${search_ext}"
Chris@4 4577 if test -f "$lib"; then
Chris@4 4578 if test "$search_ext" = ".la"; then
Chris@4 4579 found=yes
Chris@4 4580 else
Chris@4 4581 found=no
Chris@4 4582 fi
Chris@4 4583 break 2
Chris@4 4584 fi
Chris@4 4585 done
Chris@4 4586 done
Chris@4 4587 if test "$found" != yes; then
Chris@4 4588 # deplib doesn't seem to be a libtool library
Chris@4 4589 if test "$linkmode,$pass" = "prog,link"; then
Chris@4 4590 compile_deplibs="$deplib $compile_deplibs"
Chris@4 4591 finalize_deplibs="$deplib $finalize_deplibs"
Chris@4 4592 else
Chris@4 4593 deplibs="$deplib $deplibs"
Chris@4 4594 test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
Chris@4 4595 fi
Chris@4 4596 continue
Chris@4 4597 else # deplib is a libtool library
Chris@4 4598 # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
Chris@4 4599 # We need to do some special things here, and not later.
Chris@4 4600 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
Chris@4 4601 case " $predeps $postdeps " in
Chris@4 4602 *" $deplib "*)
Chris@4 4603 if func_lalib_p "$lib"; then
Chris@4 4604 library_names=
Chris@4 4605 old_library=
Chris@4 4606 func_source "$lib"
Chris@4 4607 for l in $old_library $library_names; do
Chris@4 4608 ll="$l"
Chris@4 4609 done
Chris@4 4610 if test "X$ll" = "X$old_library" ; then # only static version available
Chris@4 4611 found=no
Chris@4 4612 func_dirname "$lib" "" "."
Chris@4 4613 ladir="$func_dirname_result"
Chris@4 4614 lib=$ladir/$old_library
Chris@4 4615 if test "$linkmode,$pass" = "prog,link"; then
Chris@4 4616 compile_deplibs="$deplib $compile_deplibs"
Chris@4 4617 finalize_deplibs="$deplib $finalize_deplibs"
Chris@4 4618 else
Chris@4 4619 deplibs="$deplib $deplibs"
Chris@4 4620 test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
Chris@4 4621 fi
Chris@4 4622 continue
Chris@4 4623 fi
Chris@4 4624 fi
Chris@4 4625 ;;
Chris@4 4626 *) ;;
Chris@4 4627 esac
Chris@4 4628 fi
Chris@4 4629 fi
Chris@4 4630 ;; # -l
Chris@4 4631 *.ltframework)
Chris@4 4632 if test "$linkmode,$pass" = "prog,link"; then
Chris@4 4633 compile_deplibs="$deplib $compile_deplibs"
Chris@4 4634 finalize_deplibs="$deplib $finalize_deplibs"
Chris@4 4635 else
Chris@4 4636 deplibs="$deplib $deplibs"
Chris@4 4637 if test "$linkmode" = lib ; then
Chris@4 4638 case "$new_inherited_linker_flags " in
Chris@4 4639 *" $deplib "*) ;;
Chris@4 4640 * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
Chris@4 4641 esac
Chris@4 4642 fi
Chris@4 4643 fi
Chris@4 4644 continue
Chris@4 4645 ;;
Chris@4 4646 -L*)
Chris@4 4647 case $linkmode in
Chris@4 4648 lib)
Chris@4 4649 deplibs="$deplib $deplibs"
Chris@4 4650 test "$pass" = conv && continue
Chris@4 4651 newdependency_libs="$deplib $newdependency_libs"
Chris@4 4652 func_stripname '-L' '' "$deplib"
Chris@4 4653 newlib_search_path="$newlib_search_path $func_stripname_result"
Chris@4 4654 ;;
Chris@4 4655 prog)
Chris@4 4656 if test "$pass" = conv; then
Chris@4 4657 deplibs="$deplib $deplibs"
Chris@4 4658 continue
Chris@4 4659 fi
Chris@4 4660 if test "$pass" = scan; then
Chris@4 4661 deplibs="$deplib $deplibs"
Chris@4 4662 else
Chris@4 4663 compile_deplibs="$deplib $compile_deplibs"
Chris@4 4664 finalize_deplibs="$deplib $finalize_deplibs"
Chris@4 4665 fi
Chris@4 4666 func_stripname '-L' '' "$deplib"
Chris@4 4667 newlib_search_path="$newlib_search_path $func_stripname_result"
Chris@4 4668 ;;
Chris@4 4669 *)
Chris@4 4670 func_warning "\`-L' is ignored for archives/objects"
Chris@4 4671 ;;
Chris@4 4672 esac # linkmode
Chris@4 4673 continue
Chris@4 4674 ;; # -L
Chris@4 4675 -R*)
Chris@4 4676 if test "$pass" = link; then
Chris@4 4677 func_stripname '-R' '' "$deplib"
Chris@4 4678 dir=$func_stripname_result
Chris@4 4679 # Make sure the xrpath contains only unique directories.
Chris@4 4680 case "$xrpath " in
Chris@4 4681 *" $dir "*) ;;
Chris@4 4682 *) xrpath="$xrpath $dir" ;;
Chris@4 4683 esac
Chris@4 4684 fi
Chris@4 4685 deplibs="$deplib $deplibs"
Chris@4 4686 continue
Chris@4 4687 ;;
Chris@4 4688 *.la) lib="$deplib" ;;
Chris@4 4689 *.$libext)
Chris@4 4690 if test "$pass" = conv; then
Chris@4 4691 deplibs="$deplib $deplibs"
Chris@4 4692 continue
Chris@4 4693 fi
Chris@4 4694 case $linkmode in
Chris@4 4695 lib)
Chris@4 4696 # Linking convenience modules into shared libraries is allowed,
Chris@4 4697 # but linking other static libraries is non-portable.
Chris@4 4698 case " $dlpreconveniencelibs " in
Chris@4 4699 *" $deplib "*) ;;
Chris@4 4700 *)
Chris@4 4701 valid_a_lib=no
Chris@4 4702 case $deplibs_check_method in
Chris@4 4703 match_pattern*)
Chris@4 4704 set dummy $deplibs_check_method; shift
Chris@4 4705 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
Chris@4 4706 if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
Chris@4 4707 | $EGREP "$match_pattern_regex" > /dev/null; then
Chris@4 4708 valid_a_lib=yes
Chris@4 4709 fi
Chris@4 4710 ;;
Chris@4 4711 pass_all)
Chris@4 4712 valid_a_lib=yes
Chris@4 4713 ;;
Chris@4 4714 esac
Chris@4 4715 if test "$valid_a_lib" != yes; then
Chris@4 4716 $ECHO
Chris@4 4717 $ECHO "*** Warning: Trying to link with static lib archive $deplib."
Chris@4 4718 $ECHO "*** I have the capability to make that library automatically link in when"
Chris@4 4719 $ECHO "*** you link to this library. But I can only do this if you have a"
Chris@4 4720 $ECHO "*** shared version of the library, which you do not appear to have"
Chris@4 4721 $ECHO "*** because the file extensions .$libext of this argument makes me believe"
Chris@4 4722 $ECHO "*** that it is just a static archive that I should not use here."
Chris@4 4723 else
Chris@4 4724 $ECHO
Chris@4 4725 $ECHO "*** Warning: Linking the shared library $output against the"
Chris@4 4726 $ECHO "*** static library $deplib is not portable!"
Chris@4 4727 deplibs="$deplib $deplibs"
Chris@4 4728 fi
Chris@4 4729 ;;
Chris@4 4730 esac
Chris@4 4731 continue
Chris@4 4732 ;;
Chris@4 4733 prog)
Chris@4 4734 if test "$pass" != link; then
Chris@4 4735 deplibs="$deplib $deplibs"
Chris@4 4736 else
Chris@4 4737 compile_deplibs="$deplib $compile_deplibs"
Chris@4 4738 finalize_deplibs="$deplib $finalize_deplibs"
Chris@4 4739 fi
Chris@4 4740 continue
Chris@4 4741 ;;
Chris@4 4742 esac # linkmode
Chris@4 4743 ;; # *.$libext
Chris@4 4744 *.lo | *.$objext)
Chris@4 4745 if test "$pass" = conv; then
Chris@4 4746 deplibs="$deplib $deplibs"
Chris@4 4747 elif test "$linkmode" = prog; then
Chris@4 4748 if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
Chris@4 4749 # If there is no dlopen support or we're linking statically,
Chris@4 4750 # we need to preload.
Chris@4 4751 newdlprefiles="$newdlprefiles $deplib"
Chris@4 4752 compile_deplibs="$deplib $compile_deplibs"
Chris@4 4753 finalize_deplibs="$deplib $finalize_deplibs"
Chris@4 4754 else
Chris@4 4755 newdlfiles="$newdlfiles $deplib"
Chris@4 4756 fi
Chris@4 4757 fi
Chris@4 4758 continue
Chris@4 4759 ;;
Chris@4 4760 %DEPLIBS%)
Chris@4 4761 alldeplibs=yes
Chris@4 4762 continue
Chris@4 4763 ;;
Chris@4 4764 esac # case $deplib
Chris@4 4765
Chris@4 4766 if test "$found" = yes || test -f "$lib"; then :
Chris@4 4767 else
Chris@4 4768 func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
Chris@4 4769 fi
Chris@4 4770
Chris@4 4771 # Check to see that this really is a libtool archive.
Chris@4 4772 func_lalib_unsafe_p "$lib" \
Chris@4 4773 || func_fatal_error "\`$lib' is not a valid libtool archive"
Chris@4 4774
Chris@4 4775 func_dirname "$lib" "" "."
Chris@4 4776 ladir="$func_dirname_result"
Chris@4 4777
Chris@4 4778 dlname=
Chris@4 4779 dlopen=
Chris@4 4780 dlpreopen=
Chris@4 4781 libdir=
Chris@4 4782 library_names=
Chris@4 4783 old_library=
Chris@4 4784 inherited_linker_flags=
Chris@4 4785 # If the library was installed with an old release of libtool,
Chris@4 4786 # it will not redefine variables installed, or shouldnotlink
Chris@4 4787 installed=yes
Chris@4 4788 shouldnotlink=no
Chris@4 4789 avoidtemprpath=
Chris@4 4790
Chris@4 4791
Chris@4 4792 # Read the .la file
Chris@4 4793 func_source "$lib"
Chris@4 4794
Chris@4 4795 # Convert "-framework foo" to "foo.ltframework"
Chris@4 4796 if test -n "$inherited_linker_flags"; then
Chris@4 4797 tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
Chris@4 4798 for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
Chris@4 4799 case " $new_inherited_linker_flags " in
Chris@4 4800 *" $tmp_inherited_linker_flag "*) ;;
Chris@4 4801 *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
Chris@4 4802 esac
Chris@4 4803 done
Chris@4 4804 fi
Chris@4 4805 dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
Chris@4 4806 if test "$linkmode,$pass" = "lib,link" ||
Chris@4 4807 test "$linkmode,$pass" = "prog,scan" ||
Chris@4 4808 { test "$linkmode" != prog && test "$linkmode" != lib; }; then
Chris@4 4809 test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
Chris@4 4810 test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
Chris@4 4811 fi
Chris@4 4812
Chris@4 4813 if test "$pass" = conv; then
Chris@4 4814 # Only check for convenience libraries
Chris@4 4815 deplibs="$lib $deplibs"
Chris@4 4816 if test -z "$libdir"; then
Chris@4 4817 if test -z "$old_library"; then
Chris@4 4818 func_fatal_error "cannot find name of link library for \`$lib'"
Chris@4 4819 fi
Chris@4 4820 # It is a libtool convenience library, so add in its objects.
Chris@4 4821 convenience="$convenience $ladir/$objdir/$old_library"
Chris@4 4822 old_convenience="$old_convenience $ladir/$objdir/$old_library"
Chris@4 4823 elif test "$linkmode" != prog && test "$linkmode" != lib; then
Chris@4 4824 func_fatal_error "\`$lib' is not a convenience library"
Chris@4 4825 fi
Chris@4 4826 tmp_libs=
Chris@4 4827 for deplib in $dependency_libs; do
Chris@4 4828 deplibs="$deplib $deplibs"
Chris@4 4829 if $opt_duplicate_deps ; then
Chris@4 4830 case "$tmp_libs " in
Chris@4 4831 *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
Chris@4 4832 esac
Chris@4 4833 fi
Chris@4 4834 tmp_libs="$tmp_libs $deplib"
Chris@4 4835 done
Chris@4 4836 continue
Chris@4 4837 fi # $pass = conv
Chris@4 4838
Chris@4 4839
Chris@4 4840 # Get the name of the library we link against.
Chris@4 4841 linklib=
Chris@4 4842 for l in $old_library $library_names; do
Chris@4 4843 linklib="$l"
Chris@4 4844 done
Chris@4 4845 if test -z "$linklib"; then
Chris@4 4846 func_fatal_error "cannot find name of link library for \`$lib'"
Chris@4 4847 fi
Chris@4 4848
Chris@4 4849 # This library was specified with -dlopen.
Chris@4 4850 if test "$pass" = dlopen; then
Chris@4 4851 if test -z "$libdir"; then
Chris@4 4852 func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
Chris@4 4853 fi
Chris@4 4854 if test -z "$dlname" ||
Chris@4 4855 test "$dlopen_support" != yes ||
Chris@4 4856 test "$build_libtool_libs" = no; then
Chris@4 4857 # If there is no dlname, no dlopen support or we're linking
Chris@4 4858 # statically, we need to preload. We also need to preload any
Chris@4 4859 # dependent libraries so libltdl's deplib preloader doesn't
Chris@4 4860 # bomb out in the load deplibs phase.
Chris@4 4861 dlprefiles="$dlprefiles $lib $dependency_libs"
Chris@4 4862 else
Chris@4 4863 newdlfiles="$newdlfiles $lib"
Chris@4 4864 fi
Chris@4 4865 continue
Chris@4 4866 fi # $pass = dlopen
Chris@4 4867
Chris@4 4868 # We need an absolute path.
Chris@4 4869 case $ladir in
Chris@4 4870 [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
Chris@4 4871 *)
Chris@4 4872 abs_ladir=`cd "$ladir" && pwd`
Chris@4 4873 if test -z "$abs_ladir"; then
Chris@4 4874 func_warning "cannot determine absolute directory name of \`$ladir'"
Chris@4 4875 func_warning "passing it literally to the linker, although it might fail"
Chris@4 4876 abs_ladir="$ladir"
Chris@4 4877 fi
Chris@4 4878 ;;
Chris@4 4879 esac
Chris@4 4880 func_basename "$lib"
Chris@4 4881 laname="$func_basename_result"
Chris@4 4882
Chris@4 4883 # Find the relevant object directory and library name.
Chris@4 4884 if test "X$installed" = Xyes; then
Chris@4 4885 if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
Chris@4 4886 func_warning "library \`$lib' was moved."
Chris@4 4887 dir="$ladir"
Chris@4 4888 absdir="$abs_ladir"
Chris@4 4889 libdir="$abs_ladir"
Chris@4 4890 else
Chris@4 4891 dir="$libdir"
Chris@4 4892 absdir="$libdir"
Chris@4 4893 fi
Chris@4 4894 test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
Chris@4 4895 else
Chris@4 4896 if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
Chris@4 4897 dir="$ladir"
Chris@4 4898 absdir="$abs_ladir"
Chris@4 4899 # Remove this search path later
Chris@4 4900 notinst_path="$notinst_path $abs_ladir"
Chris@4 4901 else
Chris@4 4902 dir="$ladir/$objdir"
Chris@4 4903 absdir="$abs_ladir/$objdir"
Chris@4 4904 # Remove this search path later
Chris@4 4905 notinst_path="$notinst_path $abs_ladir"
Chris@4 4906 fi
Chris@4 4907 fi # $installed = yes
Chris@4 4908 func_stripname 'lib' '.la' "$laname"
Chris@4 4909 name=$func_stripname_result
Chris@4 4910
Chris@4 4911 # This library was specified with -dlpreopen.
Chris@4 4912 if test "$pass" = dlpreopen; then
Chris@4 4913 if test -z "$libdir" && test "$linkmode" = prog; then
Chris@4 4914 func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
Chris@4 4915 fi
Chris@4 4916 # Prefer using a static library (so that no silly _DYNAMIC symbols
Chris@4 4917 # are required to link).
Chris@4 4918 if test -n "$old_library"; then
Chris@4 4919 newdlprefiles="$newdlprefiles $dir/$old_library"
Chris@4 4920 # Keep a list of preopened convenience libraries to check
Chris@4 4921 # that they are being used correctly in the link pass.
Chris@4 4922 test -z "$libdir" && \
Chris@4 4923 dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
Chris@4 4924 # Otherwise, use the dlname, so that lt_dlopen finds it.
Chris@4 4925 elif test -n "$dlname"; then
Chris@4 4926 newdlprefiles="$newdlprefiles $dir/$dlname"
Chris@4 4927 else
Chris@4 4928 newdlprefiles="$newdlprefiles $dir/$linklib"
Chris@4 4929 fi
Chris@4 4930 fi # $pass = dlpreopen
Chris@4 4931
Chris@4 4932 if test -z "$libdir"; then
Chris@4 4933 # Link the convenience library
Chris@4 4934 if test "$linkmode" = lib; then
Chris@4 4935 deplibs="$dir/$old_library $deplibs"
Chris@4 4936 elif test "$linkmode,$pass" = "prog,link"; then
Chris@4 4937 compile_deplibs="$dir/$old_library $compile_deplibs"
Chris@4 4938 finalize_deplibs="$dir/$old_library $finalize_deplibs"
Chris@4 4939 else
Chris@4 4940 deplibs="$lib $deplibs" # used for prog,scan pass
Chris@4 4941 fi
Chris@4 4942 continue
Chris@4 4943 fi
Chris@4 4944
Chris@4 4945
Chris@4 4946 if test "$linkmode" = prog && test "$pass" != link; then
Chris@4 4947 newlib_search_path="$newlib_search_path $ladir"
Chris@4 4948 deplibs="$lib $deplibs"
Chris@4 4949
Chris@4 4950 linkalldeplibs=no
Chris@4 4951 if test "$link_all_deplibs" != no || test -z "$library_names" ||
Chris@4 4952 test "$build_libtool_libs" = no; then
Chris@4 4953 linkalldeplibs=yes
Chris@4 4954 fi
Chris@4 4955
Chris@4 4956 tmp_libs=
Chris@4 4957 for deplib in $dependency_libs; do
Chris@4 4958 case $deplib in
Chris@4 4959 -L*) func_stripname '-L' '' "$deplib"
Chris@4 4960 newlib_search_path="$newlib_search_path $func_stripname_result"
Chris@4 4961 ;;
Chris@4 4962 esac
Chris@4 4963 # Need to link against all dependency_libs?
Chris@4 4964 if test "$linkalldeplibs" = yes; then
Chris@4 4965 deplibs="$deplib $deplibs"
Chris@4 4966 else
Chris@4 4967 # Need to hardcode shared library paths
Chris@4 4968 # or/and link against static libraries
Chris@4 4969 newdependency_libs="$deplib $newdependency_libs"
Chris@4 4970 fi
Chris@4 4971 if $opt_duplicate_deps ; then
Chris@4 4972 case "$tmp_libs " in
Chris@4 4973 *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
Chris@4 4974 esac
Chris@4 4975 fi
Chris@4 4976 tmp_libs="$tmp_libs $deplib"
Chris@4 4977 done # for deplib
Chris@4 4978 continue
Chris@4 4979 fi # $linkmode = prog...
Chris@4 4980
Chris@4 4981 if test "$linkmode,$pass" = "prog,link"; then
Chris@4 4982 if test -n "$library_names" &&
Chris@4 4983 { { test "$prefer_static_libs" = no ||
Chris@4 4984 test "$prefer_static_libs,$installed" = "built,yes"; } ||
Chris@4 4985 test -z "$old_library"; }; then
Chris@4 4986 # We need to hardcode the library path
Chris@4 4987 if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
Chris@4 4988 # Make sure the rpath contains only unique directories.
Chris@4 4989 case "$temp_rpath:" in
Chris@4 4990 *"$absdir:"*) ;;
Chris@4 4991 *) temp_rpath="$temp_rpath$absdir:" ;;
Chris@4 4992 esac
Chris@4 4993 fi
Chris@4 4994
Chris@4 4995 # Hardcode the library path.
Chris@4 4996 # Skip directories that are in the system default run-time
Chris@4 4997 # search path.
Chris@4 4998 case " $sys_lib_dlsearch_path " in
Chris@4 4999 *" $absdir "*) ;;
Chris@4 5000 *)
Chris@4 5001 case "$compile_rpath " in
Chris@4 5002 *" $absdir "*) ;;
Chris@4 5003 *) compile_rpath="$compile_rpath $absdir"
Chris@4 5004 esac
Chris@4 5005 ;;
Chris@4 5006 esac
Chris@4 5007 case " $sys_lib_dlsearch_path " in
Chris@4 5008 *" $libdir "*) ;;
Chris@4 5009 *)
Chris@4 5010 case "$finalize_rpath " in
Chris@4 5011 *" $libdir "*) ;;
Chris@4 5012 *) finalize_rpath="$finalize_rpath $libdir"
Chris@4 5013 esac
Chris@4 5014 ;;
Chris@4 5015 esac
Chris@4 5016 fi # $linkmode,$pass = prog,link...
Chris@4 5017
Chris@4 5018 if test "$alldeplibs" = yes &&
Chris@4 5019 { test "$deplibs_check_method" = pass_all ||
Chris@4 5020 { test "$build_libtool_libs" = yes &&
Chris@4 5021 test -n "$library_names"; }; }; then
Chris@4 5022 # We only need to search for static libraries
Chris@4 5023 continue
Chris@4 5024 fi
Chris@4 5025 fi
Chris@4 5026
Chris@4 5027 link_static=no # Whether the deplib will be linked statically
Chris@4 5028 use_static_libs=$prefer_static_libs
Chris@4 5029 if test "$use_static_libs" = built && test "$installed" = yes; then
Chris@4 5030 use_static_libs=no
Chris@4 5031 fi
Chris@4 5032 if test -n "$library_names" &&
Chris@4 5033 { test "$use_static_libs" = no || test -z "$old_library"; }; then
Chris@4 5034 case $host in
Chris@4 5035 *cygwin* | *mingw*)
Chris@4 5036 # No point in relinking DLLs because paths are not encoded
Chris@4 5037 notinst_deplibs="$notinst_deplibs $lib"
Chris@4 5038 need_relink=no
Chris@4 5039 ;;
Chris@4 5040 *)
Chris@4 5041 if test "$installed" = no; then
Chris@4 5042 notinst_deplibs="$notinst_deplibs $lib"
Chris@4 5043 need_relink=yes
Chris@4 5044 fi
Chris@4 5045 ;;
Chris@4 5046 esac
Chris@4 5047 # This is a shared library
Chris@4 5048
Chris@4 5049 # Warn about portability, can't link against -module's on some
Chris@4 5050 # systems (darwin). Don't bleat about dlopened modules though!
Chris@4 5051 dlopenmodule=""
Chris@4 5052 for dlpremoduletest in $dlprefiles; do
Chris@4 5053 if test "X$dlpremoduletest" = "X$lib"; then
Chris@4 5054 dlopenmodule="$dlpremoduletest"
Chris@4 5055 break
Chris@4 5056 fi
Chris@4 5057 done
Chris@4 5058 if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
Chris@4 5059 $ECHO
Chris@4 5060 if test "$linkmode" = prog; then
Chris@4 5061 $ECHO "*** Warning: Linking the executable $output against the loadable module"
Chris@4 5062 else
Chris@4 5063 $ECHO "*** Warning: Linking the shared library $output against the loadable module"
Chris@4 5064 fi
Chris@4 5065 $ECHO "*** $linklib is not portable!"
Chris@4 5066 fi
Chris@4 5067 if test "$linkmode" = lib &&
Chris@4 5068 test "$hardcode_into_libs" = yes; then
Chris@4 5069 # Hardcode the library path.
Chris@4 5070 # Skip directories that are in the system default run-time
Chris@4 5071 # search path.
Chris@4 5072 case " $sys_lib_dlsearch_path " in
Chris@4 5073 *" $absdir "*) ;;
Chris@4 5074 *)
Chris@4 5075 case "$compile_rpath " in
Chris@4 5076 *" $absdir "*) ;;
Chris@4 5077 *) compile_rpath="$compile_rpath $absdir"
Chris@4 5078 esac
Chris@4 5079 ;;
Chris@4 5080 esac
Chris@4 5081 case " $sys_lib_dlsearch_path " in
Chris@4 5082 *" $libdir "*) ;;
Chris@4 5083 *)
Chris@4 5084 case "$finalize_rpath " in
Chris@4 5085 *" $libdir "*) ;;
Chris@4 5086 *) finalize_rpath="$finalize_rpath $libdir"
Chris@4 5087 esac
Chris@4 5088 ;;
Chris@4 5089 esac
Chris@4 5090 fi
Chris@4 5091
Chris@4 5092 if test -n "$old_archive_from_expsyms_cmds"; then
Chris@4 5093 # figure out the soname
Chris@4 5094 set dummy $library_names
Chris@4 5095 shift
Chris@4 5096 realname="$1"
Chris@4 5097 shift
Chris@4 5098 libname=`eval "\\$ECHO \"$libname_spec\""`
Chris@4 5099 # use dlname if we got it. it's perfectly good, no?
Chris@4 5100 if test -n "$dlname"; then
Chris@4 5101 soname="$dlname"
Chris@4 5102 elif test -n "$soname_spec"; then
Chris@4 5103 # bleh windows
Chris@4 5104 case $host in
Chris@4 5105 *cygwin* | mingw*)
Chris@4 5106 func_arith $current - $age
Chris@4 5107 major=$func_arith_result
Chris@4 5108 versuffix="-$major"
Chris@4 5109 ;;
Chris@4 5110 esac
Chris@4 5111 eval soname=\"$soname_spec\"
Chris@4 5112 else
Chris@4 5113 soname="$realname"
Chris@4 5114 fi
Chris@4 5115
Chris@4 5116 # Make a new name for the extract_expsyms_cmds to use
Chris@4 5117 soroot="$soname"
Chris@4 5118 func_basename "$soroot"
Chris@4 5119 soname="$func_basename_result"
Chris@4 5120 func_stripname 'lib' '.dll' "$soname"
Chris@4 5121 newlib=libimp-$func_stripname_result.a
Chris@4 5122
Chris@4 5123 # If the library has no export list, then create one now
Chris@4 5124 if test -f "$output_objdir/$soname-def"; then :
Chris@4 5125 else
Chris@4 5126 func_verbose "extracting exported symbol list from \`$soname'"
Chris@4 5127 func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
Chris@4 5128 fi
Chris@4 5129
Chris@4 5130 # Create $newlib
Chris@4 5131 if test -f "$output_objdir/$newlib"; then :; else
Chris@4 5132 func_verbose "generating import library for \`$soname'"
Chris@4 5133 func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
Chris@4 5134 fi
Chris@4 5135 # make sure the library variables are pointing to the new library
Chris@4 5136 dir=$output_objdir
Chris@4 5137 linklib=$newlib
Chris@4 5138 fi # test -n "$old_archive_from_expsyms_cmds"
Chris@4 5139
Chris@4 5140 if test "$linkmode" = prog || test "$mode" != relink; then
Chris@4 5141 add_shlibpath=
Chris@4 5142 add_dir=
Chris@4 5143 add=
Chris@4 5144 lib_linked=yes
Chris@4 5145 case $hardcode_action in
Chris@4 5146 immediate | unsupported)
Chris@4 5147 if test "$hardcode_direct" = no; then
Chris@4 5148 add="$dir/$linklib"
Chris@4 5149 case $host in
Chris@4 5150 *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
Chris@4 5151 *-*-sysv4*uw2*) add_dir="-L$dir" ;;
Chris@4 5152 *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
Chris@4 5153 *-*-unixware7*) add_dir="-L$dir" ;;
Chris@4 5154 *-*-darwin* )
Chris@4 5155 # if the lib is a (non-dlopened) module then we can not
Chris@4 5156 # link against it, someone is ignoring the earlier warnings
Chris@4 5157 if /usr/bin/file -L $add 2> /dev/null |
Chris@4 5158 $GREP ": [^:]* bundle" >/dev/null ; then
Chris@4 5159 if test "X$dlopenmodule" != "X$lib"; then
Chris@4 5160 $ECHO "*** Warning: lib $linklib is a module, not a shared library"
Chris@4 5161 if test -z "$old_library" ; then
Chris@4 5162 $ECHO
Chris@4 5163 $ECHO "*** And there doesn't seem to be a static archive available"
Chris@4 5164 $ECHO "*** The link will probably fail, sorry"
Chris@4 5165 else
Chris@4 5166 add="$dir/$old_library"
Chris@4 5167 fi
Chris@4 5168 elif test -n "$old_library"; then
Chris@4 5169 add="$dir/$old_library"
Chris@4 5170 fi
Chris@4 5171 fi
Chris@4 5172 esac
Chris@4 5173 elif test "$hardcode_minus_L" = no; then
Chris@4 5174 case $host in
Chris@4 5175 *-*-sunos*) add_shlibpath="$dir" ;;
Chris@4 5176 esac
Chris@4 5177 add_dir="-L$dir"
Chris@4 5178 add="-l$name"
Chris@4 5179 elif test "$hardcode_shlibpath_var" = no; then
Chris@4 5180 add_shlibpath="$dir"
Chris@4 5181 add="-l$name"
Chris@4 5182 else
Chris@4 5183 lib_linked=no
Chris@4 5184 fi
Chris@4 5185 ;;
Chris@4 5186 relink)
Chris@4 5187 if test "$hardcode_direct" = yes &&
Chris@4 5188 test "$hardcode_direct_absolute" = no; then
Chris@4 5189 add="$dir/$linklib"
Chris@4 5190 elif test "$hardcode_minus_L" = yes; then
Chris@4 5191 add_dir="-L$dir"
Chris@4 5192 # Try looking first in the location we're being installed to.
Chris@4 5193 if test -n "$inst_prefix_dir"; then
Chris@4 5194 case $libdir in
Chris@4 5195 [\\/]*)
Chris@4 5196 add_dir="$add_dir -L$inst_prefix_dir$libdir"
Chris@4 5197 ;;
Chris@4 5198 esac
Chris@4 5199 fi
Chris@4 5200 add="-l$name"
Chris@4 5201 elif test "$hardcode_shlibpath_var" = yes; then
Chris@4 5202 add_shlibpath="$dir"
Chris@4 5203 add="-l$name"
Chris@4 5204 else
Chris@4 5205 lib_linked=no
Chris@4 5206 fi
Chris@4 5207 ;;
Chris@4 5208 *) lib_linked=no ;;
Chris@4 5209 esac
Chris@4 5210
Chris@4 5211 if test "$lib_linked" != yes; then
Chris@4 5212 func_fatal_configuration "unsupported hardcode properties"
Chris@4 5213 fi
Chris@4 5214
Chris@4 5215 if test -n "$add_shlibpath"; then
Chris@4 5216 case :$compile_shlibpath: in
Chris@4 5217 *":$add_shlibpath:"*) ;;
Chris@4 5218 *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
Chris@4 5219 esac
Chris@4 5220 fi
Chris@4 5221 if test "$linkmode" = prog; then
Chris@4 5222 test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
Chris@4 5223 test -n "$add" && compile_deplibs="$add $compile_deplibs"
Chris@4 5224 else
Chris@4 5225 test -n "$add_dir" && deplibs="$add_dir $deplibs"
Chris@4 5226 test -n "$add" && deplibs="$add $deplibs"
Chris@4 5227 if test "$hardcode_direct" != yes &&
Chris@4 5228 test "$hardcode_minus_L" != yes &&
Chris@4 5229 test "$hardcode_shlibpath_var" = yes; then
Chris@4 5230 case :$finalize_shlibpath: in
Chris@4 5231 *":$libdir:"*) ;;
Chris@4 5232 *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
Chris@4 5233 esac
Chris@4 5234 fi
Chris@4 5235 fi
Chris@4 5236 fi
Chris@4 5237
Chris@4 5238 if test "$linkmode" = prog || test "$mode" = relink; then
Chris@4 5239 add_shlibpath=
Chris@4 5240 add_dir=
Chris@4 5241 add=
Chris@4 5242 # Finalize command for both is simple: just hardcode it.
Chris@4 5243 if test "$hardcode_direct" = yes &&
Chris@4 5244 test "$hardcode_direct_absolute" = no; then
Chris@4 5245 add="$libdir/$linklib"
Chris@4 5246 elif test "$hardcode_minus_L" = yes; then
Chris@4 5247 add_dir="-L$libdir"
Chris@4 5248 add="-l$name"
Chris@4 5249 elif test "$hardcode_shlibpath_var" = yes; then
Chris@4 5250 case :$finalize_shlibpath: in
Chris@4 5251 *":$libdir:"*) ;;
Chris@4 5252 *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
Chris@4 5253 esac
Chris@4 5254 add="-l$name"
Chris@4 5255 elif test "$hardcode_automatic" = yes; then
Chris@4 5256 if test -n "$inst_prefix_dir" &&
Chris@4 5257 test -f "$inst_prefix_dir$libdir/$linklib" ; then
Chris@4 5258 add="$inst_prefix_dir$libdir/$linklib"
Chris@4 5259 else
Chris@4 5260 add="$libdir/$linklib"
Chris@4 5261 fi
Chris@4 5262 else
Chris@4 5263 # We cannot seem to hardcode it, guess we'll fake it.
Chris@4 5264 add_dir="-L$libdir"
Chris@4 5265 # Try looking first in the location we're being installed to.
Chris@4 5266 if test -n "$inst_prefix_dir"; then
Chris@4 5267 case $libdir in
Chris@4 5268 [\\/]*)
Chris@4 5269 add_dir="$add_dir -L$inst_prefix_dir$libdir"
Chris@4 5270 ;;
Chris@4 5271 esac
Chris@4 5272 fi
Chris@4 5273 add="-l$name"
Chris@4 5274 fi
Chris@4 5275
Chris@4 5276 if test "$linkmode" = prog; then
Chris@4 5277 test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
Chris@4 5278 test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
Chris@4 5279 else
Chris@4 5280 test -n "$add_dir" && deplibs="$add_dir $deplibs"
Chris@4 5281 test -n "$add" && deplibs="$add $deplibs"
Chris@4 5282 fi
Chris@4 5283 fi
Chris@4 5284 elif test "$linkmode" = prog; then
Chris@4 5285 # Here we assume that one of hardcode_direct or hardcode_minus_L
Chris@4 5286 # is not unsupported. This is valid on all known static and
Chris@4 5287 # shared platforms.
Chris@4 5288 if test "$hardcode_direct" != unsupported; then
Chris@4 5289 test -n "$old_library" && linklib="$old_library"
Chris@4 5290 compile_deplibs="$dir/$linklib $compile_deplibs"
Chris@4 5291 finalize_deplibs="$dir/$linklib $finalize_deplibs"
Chris@4 5292 else
Chris@4 5293 compile_deplibs="-l$name -L$dir $compile_deplibs"
Chris@4 5294 finalize_deplibs="-l$name -L$dir $finalize_deplibs"
Chris@4 5295 fi
Chris@4 5296 elif test "$build_libtool_libs" = yes; then
Chris@4 5297 # Not a shared library
Chris@4 5298 if test "$deplibs_check_method" != pass_all; then
Chris@4 5299 # We're trying link a shared library against a static one
Chris@4 5300 # but the system doesn't support it.
Chris@4 5301
Chris@4 5302 # Just print a warning and add the library to dependency_libs so
Chris@4 5303 # that the program can be linked against the static library.
Chris@4 5304 $ECHO
Chris@4 5305 $ECHO "*** Warning: This system can not link to static lib archive $lib."
Chris@4 5306 $ECHO "*** I have the capability to make that library automatically link in when"
Chris@4 5307 $ECHO "*** you link to this library. But I can only do this if you have a"
Chris@4 5308 $ECHO "*** shared version of the library, which you do not appear to have."
Chris@4 5309 if test "$module" = yes; then
Chris@4 5310 $ECHO "*** But as you try to build a module library, libtool will still create "
Chris@4 5311 $ECHO "*** a static module, that should work as long as the dlopening application"
Chris@4 5312 $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
Chris@4 5313 if test -z "$global_symbol_pipe"; then
Chris@4 5314 $ECHO
Chris@4 5315 $ECHO "*** However, this would only work if libtool was able to extract symbol"
Chris@4 5316 $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
Chris@4 5317 $ECHO "*** not find such a program. So, this module is probably useless."
Chris@4 5318 $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
Chris@4 5319 fi
Chris@4 5320 if test "$build_old_libs" = no; then
Chris@4 5321 build_libtool_libs=module
Chris@4 5322 build_old_libs=yes
Chris@4 5323 else
Chris@4 5324 build_libtool_libs=no
Chris@4 5325 fi
Chris@4 5326 fi
Chris@4 5327 else
Chris@4 5328 deplibs="$dir/$old_library $deplibs"
Chris@4 5329 link_static=yes
Chris@4 5330 fi
Chris@4 5331 fi # link shared/static library?
Chris@4 5332
Chris@4 5333 if test "$linkmode" = lib; then
Chris@4 5334 if test -n "$dependency_libs" &&
Chris@4 5335 { test "$hardcode_into_libs" != yes ||
Chris@4 5336 test "$build_old_libs" = yes ||
Chris@4 5337 test "$link_static" = yes; }; then
Chris@4 5338 # Extract -R from dependency_libs
Chris@4 5339 temp_deplibs=
Chris@4 5340 for libdir in $dependency_libs; do
Chris@4 5341 case $libdir in
Chris@4 5342 -R*) func_stripname '-R' '' "$libdir"
Chris@4 5343 temp_xrpath=$func_stripname_result
Chris@4 5344 case " $xrpath " in
Chris@4 5345 *" $temp_xrpath "*) ;;
Chris@4 5346 *) xrpath="$xrpath $temp_xrpath";;
Chris@4 5347 esac;;
Chris@4 5348 *) temp_deplibs="$temp_deplibs $libdir";;
Chris@4 5349 esac
Chris@4 5350 done
Chris@4 5351 dependency_libs="$temp_deplibs"
Chris@4 5352 fi
Chris@4 5353
Chris@4 5354 newlib_search_path="$newlib_search_path $absdir"
Chris@4 5355 # Link against this library
Chris@4 5356 test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
Chris@4 5357 # ... and its dependency_libs
Chris@4 5358 tmp_libs=
Chris@4 5359 for deplib in $dependency_libs; do
Chris@4 5360 newdependency_libs="$deplib $newdependency_libs"
Chris@4 5361 if $opt_duplicate_deps ; then
Chris@4 5362 case "$tmp_libs " in
Chris@4 5363 *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
Chris@4 5364 esac
Chris@4 5365 fi
Chris@4 5366 tmp_libs="$tmp_libs $deplib"
Chris@4 5367 done
Chris@4 5368
Chris@4 5369 if test "$link_all_deplibs" != no; then
Chris@4 5370 # Add the search paths of all dependency libraries
Chris@4 5371 for deplib in $dependency_libs; do
Chris@4 5372 case $deplib in
Chris@4 5373 -L*) path="$deplib" ;;
Chris@4 5374 *.la)
Chris@4 5375 func_dirname "$deplib" "" "."
Chris@4 5376 dir="$func_dirname_result"
Chris@4 5377 # We need an absolute path.
Chris@4 5378 case $dir in
Chris@4 5379 [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
Chris@4 5380 *)
Chris@4 5381 absdir=`cd "$dir" && pwd`
Chris@4 5382 if test -z "$absdir"; then
Chris@4 5383 func_warning "cannot determine absolute directory name of \`$dir'"
Chris@4 5384 absdir="$dir"
Chris@4 5385 fi
Chris@4 5386 ;;
Chris@4 5387 esac
Chris@4 5388 if $GREP "^installed=no" $deplib > /dev/null; then
Chris@4 5389 case $host in
Chris@4 5390 *-*-darwin*)
Chris@4 5391 depdepl=
Chris@4 5392 eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
Chris@4 5393 if test -n "$deplibrary_names" ; then
Chris@4 5394 for tmp in $deplibrary_names ; do
Chris@4 5395 depdepl=$tmp
Chris@4 5396 done
Chris@4 5397 if test -f "$absdir/$objdir/$depdepl" ; then
Chris@4 5398 depdepl="$absdir/$objdir/$depdepl"
Chris@4 5399 darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
Chris@4 5400 if test -z "$darwin_install_name"; then
Chris@4 5401 darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
Chris@4 5402 fi
Chris@4 5403 compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
Chris@4 5404 linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
Chris@4 5405 path=
Chris@4 5406 fi
Chris@4 5407 fi
Chris@4 5408 ;;
Chris@4 5409 *)
Chris@4 5410 path="-L$absdir/$objdir"
Chris@4 5411 ;;
Chris@4 5412 esac
Chris@4 5413 else
Chris@4 5414 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
Chris@4 5415 test -z "$libdir" && \
Chris@4 5416 func_fatal_error "\`$deplib' is not a valid libtool archive"
Chris@4 5417 test "$absdir" != "$libdir" && \
Chris@4 5418 func_warning "\`$deplib' seems to be moved"
Chris@4 5419
Chris@4 5420 path="-L$absdir"
Chris@4 5421 fi
Chris@4 5422 ;;
Chris@4 5423 esac
Chris@4 5424 case " $deplibs " in
Chris@4 5425 *" $path "*) ;;
Chris@4 5426 *) deplibs="$path $deplibs" ;;
Chris@4 5427 esac
Chris@4 5428 done
Chris@4 5429 fi # link_all_deplibs != no
Chris@4 5430 fi # linkmode = lib
Chris@4 5431 done # for deplib in $libs
Chris@4 5432 if test "$pass" = link; then
Chris@4 5433 if test "$linkmode" = "prog"; then
Chris@4 5434 compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
Chris@4 5435 finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
Chris@4 5436 else
Chris@4 5437 compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
Chris@4 5438 fi
Chris@4 5439 fi
Chris@4 5440 dependency_libs="$newdependency_libs"
Chris@4 5441 if test "$pass" = dlpreopen; then
Chris@4 5442 # Link the dlpreopened libraries before other libraries
Chris@4 5443 for deplib in $save_deplibs; do
Chris@4 5444 deplibs="$deplib $deplibs"
Chris@4 5445 done
Chris@4 5446 fi
Chris@4 5447 if test "$pass" != dlopen; then
Chris@4 5448 if test "$pass" != conv; then
Chris@4 5449 # Make sure lib_search_path contains only unique directories.
Chris@4 5450 lib_search_path=
Chris@4 5451 for dir in $newlib_search_path; do
Chris@4 5452 case "$lib_search_path " in
Chris@4 5453 *" $dir "*) ;;
Chris@4 5454 *) lib_search_path="$lib_search_path $dir" ;;
Chris@4 5455 esac
Chris@4 5456 done
Chris@4 5457 newlib_search_path=
Chris@4 5458 fi
Chris@4 5459
Chris@4 5460 if test "$linkmode,$pass" != "prog,link"; then
Chris@4 5461 vars="deplibs"
Chris@4 5462 else
Chris@4 5463 vars="compile_deplibs finalize_deplibs"
Chris@4 5464 fi
Chris@4 5465 for var in $vars dependency_libs; do
Chris@4 5466 # Add libraries to $var in reverse order
Chris@4 5467 eval tmp_libs=\"\$$var\"
Chris@4 5468 new_libs=
Chris@4 5469 for deplib in $tmp_libs; do
Chris@4 5470 # FIXME: Pedantically, this is the right thing to do, so
Chris@4 5471 # that some nasty dependency loop isn't accidentally
Chris@4 5472 # broken:
Chris@4 5473 #new_libs="$deplib $new_libs"
Chris@4 5474 # Pragmatically, this seems to cause very few problems in
Chris@4 5475 # practice:
Chris@4 5476 case $deplib in
Chris@4 5477 -L*) new_libs="$deplib $new_libs" ;;
Chris@4 5478 -R*) ;;
Chris@4 5479 *)
Chris@4 5480 # And here is the reason: when a library appears more
Chris@4 5481 # than once as an explicit dependence of a library, or
Chris@4 5482 # is implicitly linked in more than once by the
Chris@4 5483 # compiler, it is considered special, and multiple
Chris@4 5484 # occurrences thereof are not removed. Compare this
Chris@4 5485 # with having the same library being listed as a
Chris@4 5486 # dependency of multiple other libraries: in this case,
Chris@4 5487 # we know (pedantically, we assume) the library does not
Chris@4 5488 # need to be listed more than once, so we keep only the
Chris@4 5489 # last copy. This is not always right, but it is rare
Chris@4 5490 # enough that we require users that really mean to play
Chris@4 5491 # such unportable linking tricks to link the library
Chris@4 5492 # using -Wl,-lname, so that libtool does not consider it
Chris@4 5493 # for duplicate removal.
Chris@4 5494 case " $specialdeplibs " in
Chris@4 5495 *" $deplib "*) new_libs="$deplib $new_libs" ;;
Chris@4 5496 *)
Chris@4 5497 case " $new_libs " in
Chris@4 5498 *" $deplib "*) ;;
Chris@4 5499 *) new_libs="$deplib $new_libs" ;;
Chris@4 5500 esac
Chris@4 5501 ;;
Chris@4 5502 esac
Chris@4 5503 ;;
Chris@4 5504 esac
Chris@4 5505 done
Chris@4 5506 tmp_libs=
Chris@4 5507 for deplib in $new_libs; do
Chris@4 5508 case $deplib in
Chris@4 5509 -L*)
Chris@4 5510 case " $tmp_libs " in
Chris@4 5511 *" $deplib "*) ;;
Chris@4 5512 *) tmp_libs="$tmp_libs $deplib" ;;
Chris@4 5513 esac
Chris@4 5514 ;;
Chris@4 5515 *) tmp_libs="$tmp_libs $deplib" ;;
Chris@4 5516 esac
Chris@4 5517 done
Chris@4 5518 eval $var=\"$tmp_libs\"
Chris@4 5519 done # for var
Chris@4 5520 fi
Chris@4 5521 # Last step: remove runtime libs from dependency_libs
Chris@4 5522 # (they stay in deplibs)
Chris@4 5523 tmp_libs=
Chris@4 5524 for i in $dependency_libs ; do
Chris@4 5525 case " $predeps $postdeps $compiler_lib_search_path " in
Chris@4 5526 *" $i "*)
Chris@4 5527 i=""
Chris@4 5528 ;;
Chris@4 5529 esac
Chris@4 5530 if test -n "$i" ; then
Chris@4 5531 tmp_libs="$tmp_libs $i"
Chris@4 5532 fi
Chris@4 5533 done
Chris@4 5534 dependency_libs=$tmp_libs
Chris@4 5535 done # for pass
Chris@4 5536 if test "$linkmode" = prog; then
Chris@4 5537 dlfiles="$newdlfiles"
Chris@4 5538 fi
Chris@4 5539 if test "$linkmode" = prog || test "$linkmode" = lib; then
Chris@4 5540 dlprefiles="$newdlprefiles"
Chris@4 5541 fi
Chris@4 5542
Chris@4 5543 case $linkmode in
Chris@4 5544 oldlib)
Chris@4 5545 if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
Chris@4 5546 func_warning "\`-dlopen' is ignored for archives"
Chris@4 5547 fi
Chris@4 5548
Chris@4 5549 case " $deplibs" in
Chris@4 5550 *\ -l* | *\ -L*)
Chris@4 5551 func_warning "\`-l' and \`-L' are ignored for archives" ;;
Chris@4 5552 esac
Chris@4 5553
Chris@4 5554 test -n "$rpath" && \
Chris@4 5555 func_warning "\`-rpath' is ignored for archives"
Chris@4 5556
Chris@4 5557 test -n "$xrpath" && \
Chris@4 5558 func_warning "\`-R' is ignored for archives"
Chris@4 5559
Chris@4 5560 test -n "$vinfo" && \
Chris@4 5561 func_warning "\`-version-info/-version-number' is ignored for archives"
Chris@4 5562
Chris@4 5563 test -n "$release" && \
Chris@4 5564 func_warning "\`-release' is ignored for archives"
Chris@4 5565
Chris@4 5566 test -n "$export_symbols$export_symbols_regex" && \
Chris@4 5567 func_warning "\`-export-symbols' is ignored for archives"
Chris@4 5568
Chris@4 5569 # Now set the variables for building old libraries.
Chris@4 5570 build_libtool_libs=no
Chris@4 5571 oldlibs="$output"
Chris@4 5572 objs="$objs$old_deplibs"
Chris@4 5573 ;;
Chris@4 5574
Chris@4 5575 lib)
Chris@4 5576 # Make sure we only generate libraries of the form `libNAME.la'.
Chris@4 5577 case $outputname in
Chris@4 5578 lib*)
Chris@4 5579 func_stripname 'lib' '.la' "$outputname"
Chris@4 5580 name=$func_stripname_result
Chris@4 5581 eval shared_ext=\"$shrext_cmds\"
Chris@4 5582 eval libname=\"$libname_spec\"
Chris@4 5583 ;;
Chris@4 5584 *)
Chris@4 5585 test "$module" = no && \
Chris@4 5586 func_fatal_help "libtool library \`$output' must begin with \`lib'"
Chris@4 5587
Chris@4 5588 if test "$need_lib_prefix" != no; then
Chris@4 5589 # Add the "lib" prefix for modules if required
Chris@4 5590 func_stripname '' '.la' "$outputname"
Chris@4 5591 name=$func_stripname_result
Chris@4 5592 eval shared_ext=\"$shrext_cmds\"
Chris@4 5593 eval libname=\"$libname_spec\"
Chris@4 5594 else
Chris@4 5595 func_stripname '' '.la' "$outputname"
Chris@4 5596 libname=$func_stripname_result
Chris@4 5597 fi
Chris@4 5598 ;;
Chris@4 5599 esac
Chris@4 5600
Chris@4 5601 if test -n "$objs"; then
Chris@4 5602 if test "$deplibs_check_method" != pass_all; then
Chris@4 5603 func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
Chris@4 5604 else
Chris@4 5605 $ECHO
Chris@4 5606 $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
Chris@4 5607 $ECHO "*** objects $objs is not portable!"
Chris@4 5608 libobjs="$libobjs $objs"
Chris@4 5609 fi
Chris@4 5610 fi
Chris@4 5611
Chris@4 5612 test "$dlself" != no && \
Chris@4 5613 func_warning "\`-dlopen self' is ignored for libtool libraries"
Chris@4 5614
Chris@4 5615 set dummy $rpath
Chris@4 5616 shift
Chris@4 5617 test "$#" -gt 1 && \
Chris@4 5618 func_warning "ignoring multiple \`-rpath's for a libtool library"
Chris@4 5619
Chris@4 5620 install_libdir="$1"
Chris@4 5621
Chris@4 5622 oldlibs=
Chris@4 5623 if test -z "$rpath"; then
Chris@4 5624 if test "$build_libtool_libs" = yes; then
Chris@4 5625 # Building a libtool convenience library.
Chris@4 5626 # Some compilers have problems with a `.al' extension so
Chris@4 5627 # convenience libraries should have the same extension an
Chris@4 5628 # archive normally would.
Chris@4 5629 oldlibs="$output_objdir/$libname.$libext $oldlibs"
Chris@4 5630 build_libtool_libs=convenience
Chris@4 5631 build_old_libs=yes
Chris@4 5632 fi
Chris@4 5633
Chris@4 5634 test -n "$vinfo" && \
Chris@4 5635 func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
Chris@4 5636
Chris@4 5637 test -n "$release" && \
Chris@4 5638 func_warning "\`-release' is ignored for convenience libraries"
Chris@4 5639 else
Chris@4 5640
Chris@4 5641 # Parse the version information argument.
Chris@4 5642 save_ifs="$IFS"; IFS=':'
Chris@4 5643 set dummy $vinfo 0 0 0
Chris@4 5644 shift
Chris@4 5645 IFS="$save_ifs"
Chris@4 5646
Chris@4 5647 test -n "$7" && \
Chris@4 5648 func_fatal_help "too many parameters to \`-version-info'"
Chris@4 5649
Chris@4 5650 # convert absolute version numbers to libtool ages
Chris@4 5651 # this retains compatibility with .la files and attempts
Chris@4 5652 # to make the code below a bit more comprehensible
Chris@4 5653
Chris@4 5654 case $vinfo_number in
Chris@4 5655 yes)
Chris@4 5656 number_major="$1"
Chris@4 5657 number_minor="$2"
Chris@4 5658 number_revision="$3"
Chris@4 5659 #
Chris@4 5660 # There are really only two kinds -- those that
Chris@4 5661 # use the current revision as the major version
Chris@4 5662 # and those that subtract age and use age as
Chris@4 5663 # a minor version. But, then there is irix
Chris@4 5664 # which has an extra 1 added just for fun
Chris@4 5665 #
Chris@4 5666 case $version_type in
Chris@4 5667 darwin|linux|osf|windows|none)
Chris@4 5668 func_arith $number_major + $number_minor
Chris@4 5669 current=$func_arith_result
Chris@4 5670 age="$number_minor"
Chris@4 5671 revision="$number_revision"
Chris@4 5672 ;;
Chris@4 5673 freebsd-aout|freebsd-elf|sunos)
Chris@4 5674 current="$number_major"
Chris@4 5675 revision="$number_minor"
Chris@4 5676 age="0"
Chris@4 5677 ;;
Chris@4 5678 irix|nonstopux)
Chris@4 5679 func_arith $number_major + $number_minor
Chris@4 5680 current=$func_arith_result
Chris@4 5681 age="$number_minor"
Chris@4 5682 revision="$number_minor"
Chris@4 5683 lt_irix_increment=no
Chris@4 5684 ;;
Chris@4 5685 *)
Chris@4 5686 func_fatal_configuration "$modename: unknown library version type \`$version_type'"
Chris@4 5687 ;;
Chris@4 5688 esac
Chris@4 5689 ;;
Chris@4 5690 no)
Chris@4 5691 current="$1"
Chris@4 5692 revision="$2"
Chris@4 5693 age="$3"
Chris@4 5694 ;;
Chris@4 5695 esac
Chris@4 5696
Chris@4 5697 # Check that each of the things are valid numbers.
Chris@4 5698 case $current in
Chris@4 5699 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]) ;;
Chris@4 5700 *)
Chris@4 5701 func_error "CURRENT \`$current' must be a nonnegative integer"
Chris@4 5702 func_fatal_error "\`$vinfo' is not valid version information"
Chris@4 5703 ;;
Chris@4 5704 esac
Chris@4 5705
Chris@4 5706 case $revision in
Chris@4 5707 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]) ;;
Chris@4 5708 *)
Chris@4 5709 func_error "REVISION \`$revision' must be a nonnegative integer"
Chris@4 5710 func_fatal_error "\`$vinfo' is not valid version information"
Chris@4 5711 ;;
Chris@4 5712 esac
Chris@4 5713
Chris@4 5714 case $age in
Chris@4 5715 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]) ;;
Chris@4 5716 *)
Chris@4 5717 func_error "AGE \`$age' must be a nonnegative integer"
Chris@4 5718 func_fatal_error "\`$vinfo' is not valid version information"
Chris@4 5719 ;;
Chris@4 5720 esac
Chris@4 5721
Chris@4 5722 if test "$age" -gt "$current"; then
Chris@4 5723 func_error "AGE \`$age' is greater than the current interface number \`$current'"
Chris@4 5724 func_fatal_error "\`$vinfo' is not valid version information"
Chris@4 5725 fi
Chris@4 5726
Chris@4 5727 # Calculate the version variables.
Chris@4 5728 major=
Chris@4 5729 versuffix=
Chris@4 5730 verstring=
Chris@4 5731 case $version_type in
Chris@4 5732 none) ;;
Chris@4 5733
Chris@4 5734 darwin)
Chris@4 5735 # Like Linux, but with the current version available in
Chris@4 5736 # verstring for coding it into the library header
Chris@4 5737 func_arith $current - $age
Chris@4 5738 major=.$func_arith_result
Chris@4 5739 versuffix="$major.$age.$revision"
Chris@4 5740 # Darwin ld doesn't like 0 for these options...
Chris@4 5741 func_arith $current + 1
Chris@4 5742 minor_current=$func_arith_result
Chris@4 5743 xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
Chris@4 5744 verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
Chris@4 5745 ;;
Chris@4 5746
Chris@4 5747 freebsd-aout)
Chris@4 5748 major=".$current"
Chris@4 5749 versuffix=".$current.$revision";
Chris@4 5750 ;;
Chris@4 5751
Chris@4 5752 freebsd-elf)
Chris@4 5753 major=".$current"
Chris@4 5754 versuffix=".$current"
Chris@4 5755 ;;
Chris@4 5756
Chris@4 5757 irix | nonstopux)
Chris@4 5758 if test "X$lt_irix_increment" = "Xno"; then
Chris@4 5759 func_arith $current - $age
Chris@4 5760 else
Chris@4 5761 func_arith $current - $age + 1
Chris@4 5762 fi
Chris@4 5763 major=$func_arith_result
Chris@4 5764
Chris@4 5765 case $version_type in
Chris@4 5766 nonstopux) verstring_prefix=nonstopux ;;
Chris@4 5767 *) verstring_prefix=sgi ;;
Chris@4 5768 esac
Chris@4 5769 verstring="$verstring_prefix$major.$revision"
Chris@4 5770
Chris@4 5771 # Add in all the interfaces that we are compatible with.
Chris@4 5772 loop=$revision
Chris@4 5773 while test "$loop" -ne 0; do
Chris@4 5774 func_arith $revision - $loop
Chris@4 5775 iface=$func_arith_result
Chris@4 5776 func_arith $loop - 1
Chris@4 5777 loop=$func_arith_result
Chris@4 5778 verstring="$verstring_prefix$major.$iface:$verstring"
Chris@4 5779 done
Chris@4 5780
Chris@4 5781 # Before this point, $major must not contain `.'.
Chris@4 5782 major=.$major
Chris@4 5783 versuffix="$major.$revision"
Chris@4 5784 ;;
Chris@4 5785
Chris@4 5786 linux)
Chris@4 5787 func_arith $current - $age
Chris@4 5788 major=.$func_arith_result
Chris@4 5789 versuffix="$major.$age.$revision"
Chris@4 5790 ;;
Chris@4 5791
Chris@4 5792 osf)
Chris@4 5793 func_arith $current - $age
Chris@4 5794 major=.$func_arith_result
Chris@4 5795 versuffix=".$current.$age.$revision"
Chris@4 5796 verstring="$current.$age.$revision"
Chris@4 5797
Chris@4 5798 # Add in all the interfaces that we are compatible with.
Chris@4 5799 loop=$age
Chris@4 5800 while test "$loop" -ne 0; do
Chris@4 5801 func_arith $current - $loop
Chris@4 5802 iface=$func_arith_result
Chris@4 5803 func_arith $loop - 1
Chris@4 5804 loop=$func_arith_result
Chris@4 5805 verstring="$verstring:${iface}.0"
Chris@4 5806 done
Chris@4 5807
Chris@4 5808 # Make executables depend on our current version.
Chris@4 5809 verstring="$verstring:${current}.0"
Chris@4 5810 ;;
Chris@4 5811
Chris@4 5812 qnx)
Chris@4 5813 major=".$current"
Chris@4 5814 versuffix=".$current"
Chris@4 5815 ;;
Chris@4 5816
Chris@4 5817 sunos)
Chris@4 5818 major=".$current"
Chris@4 5819 versuffix=".$current.$revision"
Chris@4 5820 ;;
Chris@4 5821
Chris@4 5822 windows)
Chris@4 5823 # Use '-' rather than '.', since we only want one
Chris@4 5824 # extension on DOS 8.3 filesystems.
Chris@4 5825 func_arith $current - $age
Chris@4 5826 major=$func_arith_result
Chris@4 5827 versuffix="-$major"
Chris@4 5828 ;;
Chris@4 5829
Chris@4 5830 *)
Chris@4 5831 func_fatal_configuration "unknown library version type \`$version_type'"
Chris@4 5832 ;;
Chris@4 5833 esac
Chris@4 5834
Chris@4 5835 # Clear the version info if we defaulted, and they specified a release.
Chris@4 5836 if test -z "$vinfo" && test -n "$release"; then
Chris@4 5837 major=
Chris@4 5838 case $version_type in
Chris@4 5839 darwin)
Chris@4 5840 # we can't check for "0.0" in archive_cmds due to quoting
Chris@4 5841 # problems, so we reset it completely
Chris@4 5842 verstring=
Chris@4 5843 ;;
Chris@4 5844 *)
Chris@4 5845 verstring="0.0"
Chris@4 5846 ;;
Chris@4 5847 esac
Chris@4 5848 if test "$need_version" = no; then
Chris@4 5849 versuffix=
Chris@4 5850 else
Chris@4 5851 versuffix=".0.0"
Chris@4 5852 fi
Chris@4 5853 fi
Chris@4 5854
Chris@4 5855 # Remove version info from name if versioning should be avoided
Chris@4 5856 if test "$avoid_version" = yes && test "$need_version" = no; then
Chris@4 5857 major=
Chris@4 5858 versuffix=
Chris@4 5859 verstring=""
Chris@4 5860 fi
Chris@4 5861
Chris@4 5862 # Check to see if the archive will have undefined symbols.
Chris@4 5863 if test "$allow_undefined" = yes; then
Chris@4 5864 if test "$allow_undefined_flag" = unsupported; then
Chris@4 5865 func_warning "undefined symbols not allowed in $host shared libraries"
Chris@4 5866 build_libtool_libs=no
Chris@4 5867 build_old_libs=yes
Chris@4 5868 fi
Chris@4 5869 else
Chris@4 5870 # Don't allow undefined symbols.
Chris@4 5871 allow_undefined_flag="$no_undefined_flag"
Chris@4 5872 fi
Chris@4 5873
Chris@4 5874 fi
Chris@4 5875
Chris@4 5876 func_generate_dlsyms "$libname" "$libname" "yes"
Chris@4 5877 libobjs="$libobjs $symfileobj"
Chris@4 5878 test "X$libobjs" = "X " && libobjs=
Chris@4 5879
Chris@4 5880 if test "$mode" != relink; then
Chris@4 5881 # Remove our outputs, but don't remove object files since they
Chris@4 5882 # may have been created when compiling PIC objects.
Chris@4 5883 removelist=
Chris@4 5884 tempremovelist=`$ECHO "$output_objdir/*"`
Chris@4 5885 for p in $tempremovelist; do
Chris@4 5886 case $p in
Chris@4 5887 *.$objext)
Chris@4 5888 ;;
Chris@4 5889 $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
Chris@4 5890 if test "X$precious_files_regex" != "X"; then
Chris@4 5891 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
Chris@4 5892 then
Chris@4 5893 continue
Chris@4 5894 fi
Chris@4 5895 fi
Chris@4 5896 removelist="$removelist $p"
Chris@4 5897 ;;
Chris@4 5898 *) ;;
Chris@4 5899 esac
Chris@4 5900 done
Chris@4 5901 test -n "$removelist" && \
Chris@4 5902 func_show_eval "${RM}r \$removelist"
Chris@4 5903 fi
Chris@4 5904
Chris@4 5905 # Now set the variables for building old libraries.
Chris@4 5906 if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
Chris@4 5907 oldlibs="$oldlibs $output_objdir/$libname.$libext"
Chris@4 5908
Chris@4 5909 # Transform .lo files to .o files.
Chris@4 5910 oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
Chris@4 5911 fi
Chris@4 5912
Chris@4 5913 # Eliminate all temporary directories.
Chris@4 5914 #for path in $notinst_path; do
Chris@4 5915 # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
Chris@4 5916 # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
Chris@4 5917 # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
Chris@4 5918 #done
Chris@4 5919
Chris@4 5920 if test -n "$xrpath"; then
Chris@4 5921 # If the user specified any rpath flags, then add them.
Chris@4 5922 temp_xrpath=
Chris@4 5923 for libdir in $xrpath; do
Chris@4 5924 temp_xrpath="$temp_xrpath -R$libdir"
Chris@4 5925 case "$finalize_rpath " in
Chris@4 5926 *" $libdir "*) ;;
Chris@4 5927 *) finalize_rpath="$finalize_rpath $libdir" ;;
Chris@4 5928 esac
Chris@4 5929 done
Chris@4 5930 if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
Chris@4 5931 dependency_libs="$temp_xrpath $dependency_libs"
Chris@4 5932 fi
Chris@4 5933 fi
Chris@4 5934
Chris@4 5935 # Make sure dlfiles contains only unique files that won't be dlpreopened
Chris@4 5936 old_dlfiles="$dlfiles"
Chris@4 5937 dlfiles=
Chris@4 5938 for lib in $old_dlfiles; do
Chris@4 5939 case " $dlprefiles $dlfiles " in
Chris@4 5940 *" $lib "*) ;;
Chris@4 5941 *) dlfiles="$dlfiles $lib" ;;
Chris@4 5942 esac
Chris@4 5943 done
Chris@4 5944
Chris@4 5945 # Make sure dlprefiles contains only unique files
Chris@4 5946 old_dlprefiles="$dlprefiles"
Chris@4 5947 dlprefiles=
Chris@4 5948 for lib in $old_dlprefiles; do
Chris@4 5949 case "$dlprefiles " in
Chris@4 5950 *" $lib "*) ;;
Chris@4 5951 *) dlprefiles="$dlprefiles $lib" ;;
Chris@4 5952 esac
Chris@4 5953 done
Chris@4 5954
Chris@4 5955 if test "$build_libtool_libs" = yes; then
Chris@4 5956 if test -n "$rpath"; then
Chris@4 5957 case $host in
Chris@4 5958 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
Chris@4 5959 # these systems don't actually have a c library (as such)!
Chris@4 5960 ;;
Chris@4 5961 *-*-rhapsody* | *-*-darwin1.[012])
Chris@4 5962 # Rhapsody C library is in the System framework
Chris@4 5963 deplibs="$deplibs System.ltframework"
Chris@4 5964 ;;
Chris@4 5965 *-*-netbsd*)
Chris@4 5966 # Don't link with libc until the a.out ld.so is fixed.
Chris@4 5967 ;;
Chris@4 5968 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
Chris@4 5969 # Do not include libc due to us having libc/libc_r.
Chris@4 5970 ;;
Chris@4 5971 *-*-sco3.2v5* | *-*-sco5v6*)
Chris@4 5972 # Causes problems with __ctype
Chris@4 5973 ;;
Chris@4 5974 *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
Chris@4 5975 # Compiler inserts libc in the correct place for threads to work
Chris@4 5976 ;;
Chris@4 5977 *)
Chris@4 5978 # Add libc to deplibs on all other systems if necessary.
Chris@4 5979 if test "$build_libtool_need_lc" = "yes"; then
Chris@4 5980 deplibs="$deplibs -lc"
Chris@4 5981 fi
Chris@4 5982 ;;
Chris@4 5983 esac
Chris@4 5984 fi
Chris@4 5985
Chris@4 5986 # Transform deplibs into only deplibs that can be linked in shared.
Chris@4 5987 name_save=$name
Chris@4 5988 libname_save=$libname
Chris@4 5989 release_save=$release
Chris@4 5990 versuffix_save=$versuffix
Chris@4 5991 major_save=$major
Chris@4 5992 # I'm not sure if I'm treating the release correctly. I think
Chris@4 5993 # release should show up in the -l (ie -lgmp5) so we don't want to
Chris@4 5994 # add it in twice. Is that correct?
Chris@4 5995 release=""
Chris@4 5996 versuffix=""
Chris@4 5997 major=""
Chris@4 5998 newdeplibs=
Chris@4 5999 droppeddeps=no
Chris@4 6000 case $deplibs_check_method in
Chris@4 6001 pass_all)
Chris@4 6002 # Don't check for shared/static. Everything works.
Chris@4 6003 # This might be a little naive. We might want to check
Chris@4 6004 # whether the library exists or not. But this is on
Chris@4 6005 # osf3 & osf4 and I'm not really sure... Just
Chris@4 6006 # implementing what was already the behavior.
Chris@4 6007 newdeplibs=$deplibs
Chris@4 6008 ;;
Chris@4 6009 test_compile)
Chris@4 6010 # This code stresses the "libraries are programs" paradigm to its
Chris@4 6011 # limits. Maybe even breaks it. We compile a program, linking it
Chris@4 6012 # against the deplibs as a proxy for the library. Then we can check
Chris@4 6013 # whether they linked in statically or dynamically with ldd.
Chris@4 6014 $opt_dry_run || $RM conftest.c
Chris@4 6015 cat > conftest.c <<EOF
Chris@4 6016 int main() { return 0; }
Chris@4 6017 EOF
Chris@4 6018 $opt_dry_run || $RM conftest
Chris@4 6019 if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
Chris@4 6020 ldd_output=`ldd conftest`
Chris@4 6021 for i in $deplibs; do
Chris@4 6022 case $i in
Chris@4 6023 -l*)
Chris@4 6024 func_stripname -l '' "$i"
Chris@4 6025 name=$func_stripname_result
Chris@4 6026 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
Chris@4 6027 case " $predeps $postdeps " in
Chris@4 6028 *" $i "*)
Chris@4 6029 newdeplibs="$newdeplibs $i"
Chris@4 6030 i=""
Chris@4 6031 ;;
Chris@4 6032 esac
Chris@4 6033 fi
Chris@4 6034 if test -n "$i" ; then
Chris@4 6035 libname=`eval "\\$ECHO \"$libname_spec\""`
Chris@4 6036 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
Chris@4 6037 set dummy $deplib_matches; shift
Chris@4 6038 deplib_match=$1
Chris@4 6039 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
Chris@4 6040 newdeplibs="$newdeplibs $i"
Chris@4 6041 else
Chris@4 6042 droppeddeps=yes
Chris@4 6043 $ECHO
Chris@4 6044 $ECHO "*** Warning: dynamic linker does not accept needed library $i."
Chris@4 6045 $ECHO "*** I have the capability to make that library automatically link in when"
Chris@4 6046 $ECHO "*** you link to this library. But I can only do this if you have a"
Chris@4 6047 $ECHO "*** shared version of the library, which I believe you do not have"
Chris@4 6048 $ECHO "*** because a test_compile did reveal that the linker did not use it for"
Chris@4 6049 $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
Chris@4 6050 fi
Chris@4 6051 fi
Chris@4 6052 ;;
Chris@4 6053 *)
Chris@4 6054 newdeplibs="$newdeplibs $i"
Chris@4 6055 ;;
Chris@4 6056 esac
Chris@4 6057 done
Chris@4 6058 else
Chris@4 6059 # Error occurred in the first compile. Let's try to salvage
Chris@4 6060 # the situation: Compile a separate program for each library.
Chris@4 6061 for i in $deplibs; do
Chris@4 6062 case $i in
Chris@4 6063 -l*)
Chris@4 6064 func_stripname -l '' "$i"
Chris@4 6065 name=$func_stripname_result
Chris@4 6066 $opt_dry_run || $RM conftest
Chris@4 6067 if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
Chris@4 6068 ldd_output=`ldd conftest`
Chris@4 6069 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
Chris@4 6070 case " $predeps $postdeps " in
Chris@4 6071 *" $i "*)
Chris@4 6072 newdeplibs="$newdeplibs $i"
Chris@4 6073 i=""
Chris@4 6074 ;;
Chris@4 6075 esac
Chris@4 6076 fi
Chris@4 6077 if test -n "$i" ; then
Chris@4 6078 libname=`eval "\\$ECHO \"$libname_spec\""`
Chris@4 6079 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
Chris@4 6080 set dummy $deplib_matches; shift
Chris@4 6081 deplib_match=$1
Chris@4 6082 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
Chris@4 6083 newdeplibs="$newdeplibs $i"
Chris@4 6084 else
Chris@4 6085 droppeddeps=yes
Chris@4 6086 $ECHO
Chris@4 6087 $ECHO "*** Warning: dynamic linker does not accept needed library $i."
Chris@4 6088 $ECHO "*** I have the capability to make that library automatically link in when"
Chris@4 6089 $ECHO "*** you link to this library. But I can only do this if you have a"
Chris@4 6090 $ECHO "*** shared version of the library, which you do not appear to have"
Chris@4 6091 $ECHO "*** because a test_compile did reveal that the linker did not use this one"
Chris@4 6092 $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
Chris@4 6093 fi
Chris@4 6094 fi
Chris@4 6095 else
Chris@4 6096 droppeddeps=yes
Chris@4 6097 $ECHO
Chris@4 6098 $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
Chris@4 6099 $ECHO "*** make it link in! You will probably need to install it or some"
Chris@4 6100 $ECHO "*** library that it depends on before this library will be fully"
Chris@4 6101 $ECHO "*** functional. Installing it before continuing would be even better."
Chris@4 6102 fi
Chris@4 6103 ;;
Chris@4 6104 *)
Chris@4 6105 newdeplibs="$newdeplibs $i"
Chris@4 6106 ;;
Chris@4 6107 esac
Chris@4 6108 done
Chris@4 6109 fi
Chris@4 6110 ;;
Chris@4 6111 file_magic*)
Chris@4 6112 set dummy $deplibs_check_method; shift
Chris@4 6113 file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
Chris@4 6114 for a_deplib in $deplibs; do
Chris@4 6115 case $a_deplib in
Chris@4 6116 -l*)
Chris@4 6117 func_stripname -l '' "$a_deplib"
Chris@4 6118 name=$func_stripname_result
Chris@4 6119 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
Chris@4 6120 case " $predeps $postdeps " in
Chris@4 6121 *" $a_deplib "*)
Chris@4 6122 newdeplibs="$newdeplibs $a_deplib"
Chris@4 6123 a_deplib=""
Chris@4 6124 ;;
Chris@4 6125 esac
Chris@4 6126 fi
Chris@4 6127 if test -n "$a_deplib" ; then
Chris@4 6128 libname=`eval "\\$ECHO \"$libname_spec\""`
Chris@4 6129 for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
Chris@4 6130 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
Chris@4 6131 for potent_lib in $potential_libs; do
Chris@4 6132 # Follow soft links.
Chris@4 6133 if ls -lLd "$potent_lib" 2>/dev/null |
Chris@4 6134 $GREP " -> " >/dev/null; then
Chris@4 6135 continue
Chris@4 6136 fi
Chris@4 6137 # The statement above tries to avoid entering an
Chris@4 6138 # endless loop below, in case of cyclic links.
Chris@4 6139 # We might still enter an endless loop, since a link
Chris@4 6140 # loop can be closed while we follow links,
Chris@4 6141 # but so what?
Chris@4 6142 potlib="$potent_lib"
Chris@4 6143 while test -h "$potlib" 2>/dev/null; do
Chris@4 6144 potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
Chris@4 6145 case $potliblink in
Chris@4 6146 [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
Chris@4 6147 *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
Chris@4 6148 esac
Chris@4 6149 done
Chris@4 6150 if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
Chris@4 6151 $SED -e 10q |
Chris@4 6152 $EGREP "$file_magic_regex" > /dev/null; then
Chris@4 6153 newdeplibs="$newdeplibs $a_deplib"
Chris@4 6154 a_deplib=""
Chris@4 6155 break 2
Chris@4 6156 fi
Chris@4 6157 done
Chris@4 6158 done
Chris@4 6159 fi
Chris@4 6160 if test -n "$a_deplib" ; then
Chris@4 6161 droppeddeps=yes
Chris@4 6162 $ECHO
Chris@4 6163 $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
Chris@4 6164 $ECHO "*** I have the capability to make that library automatically link in when"
Chris@4 6165 $ECHO "*** you link to this library. But I can only do this if you have a"
Chris@4 6166 $ECHO "*** shared version of the library, which you do not appear to have"
Chris@4 6167 $ECHO "*** because I did check the linker path looking for a file starting"
Chris@4 6168 if test -z "$potlib" ; then
Chris@4 6169 $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
Chris@4 6170 else
Chris@4 6171 $ECHO "*** with $libname and none of the candidates passed a file format test"
Chris@4 6172 $ECHO "*** using a file magic. Last file checked: $potlib"
Chris@4 6173 fi
Chris@4 6174 fi
Chris@4 6175 ;;
Chris@4 6176 *)
Chris@4 6177 # Add a -L argument.
Chris@4 6178 newdeplibs="$newdeplibs $a_deplib"
Chris@4 6179 ;;
Chris@4 6180 esac
Chris@4 6181 done # Gone through all deplibs.
Chris@4 6182 ;;
Chris@4 6183 match_pattern*)
Chris@4 6184 set dummy $deplibs_check_method; shift
Chris@4 6185 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
Chris@4 6186 for a_deplib in $deplibs; do
Chris@4 6187 case $a_deplib in
Chris@4 6188 -l*)
Chris@4 6189 func_stripname -l '' "$a_deplib"
Chris@4 6190 name=$func_stripname_result
Chris@4 6191 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
Chris@4 6192 case " $predeps $postdeps " in
Chris@4 6193 *" $a_deplib "*)
Chris@4 6194 newdeplibs="$newdeplibs $a_deplib"
Chris@4 6195 a_deplib=""
Chris@4 6196 ;;
Chris@4 6197 esac
Chris@4 6198 fi
Chris@4 6199 if test -n "$a_deplib" ; then
Chris@4 6200 libname=`eval "\\$ECHO \"$libname_spec\""`
Chris@4 6201 for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
Chris@4 6202 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
Chris@4 6203 for potent_lib in $potential_libs; do
Chris@4 6204 potlib="$potent_lib" # see symlink-check above in file_magic test
Chris@4 6205 if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
Chris@4 6206 $EGREP "$match_pattern_regex" > /dev/null; then
Chris@4 6207 newdeplibs="$newdeplibs $a_deplib"
Chris@4 6208 a_deplib=""
Chris@4 6209 break 2
Chris@4 6210 fi
Chris@4 6211 done
Chris@4 6212 done
Chris@4 6213 fi
Chris@4 6214 if test -n "$a_deplib" ; then
Chris@4 6215 droppeddeps=yes
Chris@4 6216 $ECHO
Chris@4 6217 $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
Chris@4 6218 $ECHO "*** I have the capability to make that library automatically link in when"
Chris@4 6219 $ECHO "*** you link to this library. But I can only do this if you have a"
Chris@4 6220 $ECHO "*** shared version of the library, which you do not appear to have"
Chris@4 6221 $ECHO "*** because I did check the linker path looking for a file starting"
Chris@4 6222 if test -z "$potlib" ; then
Chris@4 6223 $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
Chris@4 6224 else
Chris@4 6225 $ECHO "*** with $libname and none of the candidates passed a file format test"
Chris@4 6226 $ECHO "*** using a regex pattern. Last file checked: $potlib"
Chris@4 6227 fi
Chris@4 6228 fi
Chris@4 6229 ;;
Chris@4 6230 *)
Chris@4 6231 # Add a -L argument.
Chris@4 6232 newdeplibs="$newdeplibs $a_deplib"
Chris@4 6233 ;;
Chris@4 6234 esac
Chris@4 6235 done # Gone through all deplibs.
Chris@4 6236 ;;
Chris@4 6237 none | unknown | *)
Chris@4 6238 newdeplibs=""
Chris@4 6239 tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
Chris@4 6240 -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
Chris@4 6241 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
Chris@4 6242 for i in $predeps $postdeps ; do
Chris@4 6243 # can't use Xsed below, because $i might contain '/'
Chris@4 6244 tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
Chris@4 6245 done
Chris@4 6246 fi
Chris@4 6247 if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' |
Chris@4 6248 $GREP . >/dev/null; then
Chris@4 6249 $ECHO
Chris@4 6250 if test "X$deplibs_check_method" = "Xnone"; then
Chris@4 6251 $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
Chris@4 6252 else
Chris@4 6253 $ECHO "*** Warning: inter-library dependencies are not known to be supported."
Chris@4 6254 fi
Chris@4 6255 $ECHO "*** All declared inter-library dependencies are being dropped."
Chris@4 6256 droppeddeps=yes
Chris@4 6257 fi
Chris@4 6258 ;;
Chris@4 6259 esac
Chris@4 6260 versuffix=$versuffix_save
Chris@4 6261 major=$major_save
Chris@4 6262 release=$release_save
Chris@4 6263 libname=$libname_save
Chris@4 6264 name=$name_save
Chris@4 6265
Chris@4 6266 case $host in
Chris@4 6267 *-*-rhapsody* | *-*-darwin1.[012])
Chris@4 6268 # On Rhapsody replace the C library with the System framework
Chris@4 6269 newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
Chris@4 6270 ;;
Chris@4 6271 esac
Chris@4 6272
Chris@4 6273 if test "$droppeddeps" = yes; then
Chris@4 6274 if test "$module" = yes; then
Chris@4 6275 $ECHO
Chris@4 6276 $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
Chris@4 6277 $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
Chris@4 6278 $ECHO "*** a static module, that should work as long as the dlopening"
Chris@4 6279 $ECHO "*** application is linked with the -dlopen flag."
Chris@4 6280 if test -z "$global_symbol_pipe"; then
Chris@4 6281 $ECHO
Chris@4 6282 $ECHO "*** However, this would only work if libtool was able to extract symbol"
Chris@4 6283 $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
Chris@4 6284 $ECHO "*** not find such a program. So, this module is probably useless."
Chris@4 6285 $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
Chris@4 6286 fi
Chris@4 6287 if test "$build_old_libs" = no; then
Chris@4 6288 oldlibs="$output_objdir/$libname.$libext"
Chris@4 6289 build_libtool_libs=module
Chris@4 6290 build_old_libs=yes
Chris@4 6291 else
Chris@4 6292 build_libtool_libs=no
Chris@4 6293 fi
Chris@4 6294 else
Chris@4 6295 $ECHO "*** The inter-library dependencies that have been dropped here will be"
Chris@4 6296 $ECHO "*** automatically added whenever a program is linked with this library"
Chris@4 6297 $ECHO "*** or is declared to -dlopen it."
Chris@4 6298
Chris@4 6299 if test "$allow_undefined" = no; then
Chris@4 6300 $ECHO
Chris@4 6301 $ECHO "*** Since this library must not contain undefined symbols,"
Chris@4 6302 $ECHO "*** because either the platform does not support them or"
Chris@4 6303 $ECHO "*** it was explicitly requested with -no-undefined,"
Chris@4 6304 $ECHO "*** libtool will only create a static version of it."
Chris@4 6305 if test "$build_old_libs" = no; then
Chris@4 6306 oldlibs="$output_objdir/$libname.$libext"
Chris@4 6307 build_libtool_libs=module
Chris@4 6308 build_old_libs=yes
Chris@4 6309 else
Chris@4 6310 build_libtool_libs=no
Chris@4 6311 fi
Chris@4 6312 fi
Chris@4 6313 fi
Chris@4 6314 fi
Chris@4 6315 # Done checking deplibs!
Chris@4 6316 deplibs=$newdeplibs
Chris@4 6317 fi
Chris@4 6318 # Time to change all our "foo.ltframework" stuff back to "-framework foo"
Chris@4 6319 case $host in
Chris@4 6320 *-*-darwin*)
Chris@4 6321 newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
Chris@4 6322 new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
Chris@4 6323 deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
Chris@4 6324 ;;
Chris@4 6325 esac
Chris@4 6326
Chris@4 6327 # move library search paths that coincide with paths to not yet
Chris@4 6328 # installed libraries to the beginning of the library search list
Chris@4 6329 new_libs=
Chris@4 6330 for path in $notinst_path; do
Chris@4 6331 case " $new_libs " in
Chris@4 6332 *" -L$path/$objdir "*) ;;
Chris@4 6333 *)
Chris@4 6334 case " $deplibs " in
Chris@4 6335 *" -L$path/$objdir "*)
Chris@4 6336 new_libs="$new_libs -L$path/$objdir" ;;
Chris@4 6337 esac
Chris@4 6338 ;;
Chris@4 6339 esac
Chris@4 6340 done
Chris@4 6341 for deplib in $deplibs; do
Chris@4 6342 case $deplib in
Chris@4 6343 -L*)
Chris@4 6344 case " $new_libs " in
Chris@4 6345 *" $deplib "*) ;;
Chris@4 6346 *) new_libs="$new_libs $deplib" ;;
Chris@4 6347 esac
Chris@4 6348 ;;
Chris@4 6349 *) new_libs="$new_libs $deplib" ;;
Chris@4 6350 esac
Chris@4 6351 done
Chris@4 6352 deplibs="$new_libs"
Chris@4 6353
Chris@4 6354 # All the library-specific variables (install_libdir is set above).
Chris@4 6355 library_names=
Chris@4 6356 old_library=
Chris@4 6357 dlname=
Chris@4 6358
Chris@4 6359 # Test again, we may have decided not to build it any more
Chris@4 6360 if test "$build_libtool_libs" = yes; then
Chris@4 6361 if test "$hardcode_into_libs" = yes; then
Chris@4 6362 # Hardcode the library paths
Chris@4 6363 hardcode_libdirs=
Chris@4 6364 dep_rpath=
Chris@4 6365 rpath="$finalize_rpath"
Chris@4 6366 test "$mode" != relink && rpath="$compile_rpath$rpath"
Chris@4 6367 for libdir in $rpath; do
Chris@4 6368 if test -n "$hardcode_libdir_flag_spec"; then
Chris@4 6369 if test -n "$hardcode_libdir_separator"; then
Chris@4 6370 if test -z "$hardcode_libdirs"; then
Chris@4 6371 hardcode_libdirs="$libdir"
Chris@4 6372 else
Chris@4 6373 # Just accumulate the unique libdirs.
Chris@4 6374 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
Chris@4 6375 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
Chris@4 6376 ;;
Chris@4 6377 *)
Chris@4 6378 hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
Chris@4 6379 ;;
Chris@4 6380 esac
Chris@4 6381 fi
Chris@4 6382 else
Chris@4 6383 eval flag=\"$hardcode_libdir_flag_spec\"
Chris@4 6384 dep_rpath="$dep_rpath $flag"
Chris@4 6385 fi
Chris@4 6386 elif test -n "$runpath_var"; then
Chris@4 6387 case "$perm_rpath " in
Chris@4 6388 *" $libdir "*) ;;
Chris@4 6389 *) perm_rpath="$perm_rpath $libdir" ;;
Chris@4 6390 esac
Chris@4 6391 fi
Chris@4 6392 done
Chris@4 6393 # Substitute the hardcoded libdirs into the rpath.
Chris@4 6394 if test -n "$hardcode_libdir_separator" &&
Chris@4 6395 test -n "$hardcode_libdirs"; then
Chris@4 6396 libdir="$hardcode_libdirs"
Chris@4 6397 if test -n "$hardcode_libdir_flag_spec_ld"; then
Chris@4 6398 eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
Chris@4 6399 else
Chris@4 6400 eval dep_rpath=\"$hardcode_libdir_flag_spec\"
Chris@4 6401 fi
Chris@4 6402 fi
Chris@4 6403 if test -n "$runpath_var" && test -n "$perm_rpath"; then
Chris@4 6404 # We should set the runpath_var.
Chris@4 6405 rpath=
Chris@4 6406 for dir in $perm_rpath; do
Chris@4 6407 rpath="$rpath$dir:"
Chris@4 6408 done
Chris@4 6409 eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
Chris@4 6410 fi
Chris@4 6411 test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
Chris@4 6412 fi
Chris@4 6413
Chris@4 6414 shlibpath="$finalize_shlibpath"
Chris@4 6415 test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
Chris@4 6416 if test -n "$shlibpath"; then
Chris@4 6417 eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
Chris@4 6418 fi
Chris@4 6419
Chris@4 6420 # Get the real and link names of the library.
Chris@4 6421 eval shared_ext=\"$shrext_cmds\"
Chris@4 6422 eval library_names=\"$library_names_spec\"
Chris@4 6423 set dummy $library_names
Chris@4 6424 shift
Chris@4 6425 realname="$1"
Chris@4 6426 shift
Chris@4 6427
Chris@4 6428 if test -n "$soname_spec"; then
Chris@4 6429 eval soname=\"$soname_spec\"
Chris@4 6430 else
Chris@4 6431 soname="$realname"
Chris@4 6432 fi
Chris@4 6433 if test -z "$dlname"; then
Chris@4 6434 dlname=$soname
Chris@4 6435 fi
Chris@4 6436
Chris@4 6437 lib="$output_objdir/$realname"
Chris@4 6438 linknames=
Chris@4 6439 for link
Chris@4 6440 do
Chris@4 6441 linknames="$linknames $link"
Chris@4 6442 done
Chris@4 6443
Chris@4 6444 # Use standard objects if they are pic
Chris@4 6445 test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
Chris@4 6446 test "X$libobjs" = "X " && libobjs=
Chris@4 6447
Chris@4 6448 delfiles=
Chris@4 6449 if test -n "$export_symbols" && test -n "$include_expsyms"; then
Chris@4 6450 $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
Chris@4 6451 export_symbols="$output_objdir/$libname.uexp"
Chris@4 6452 delfiles="$delfiles $export_symbols"
Chris@4 6453 fi
Chris@4 6454
Chris@4 6455 orig_export_symbols=
Chris@4 6456 case $host_os in
Chris@4 6457 cygwin* | mingw*)
Chris@4 6458 if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
Chris@4 6459 # exporting using user supplied symfile
Chris@4 6460 if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
Chris@4 6461 # and it's NOT already a .def file. Must figure out
Chris@4 6462 # which of the given symbols are data symbols and tag
Chris@4 6463 # them as such. So, trigger use of export_symbols_cmds.
Chris@4 6464 # export_symbols gets reassigned inside the "prepare
Chris@4 6465 # the list of exported symbols" if statement, so the
Chris@4 6466 # include_expsyms logic still works.
Chris@4 6467 orig_export_symbols="$export_symbols"
Chris@4 6468 export_symbols=
Chris@4 6469 always_export_symbols=yes
Chris@4 6470 fi
Chris@4 6471 fi
Chris@4 6472 ;;
Chris@4 6473 esac
Chris@4 6474
Chris@4 6475 # Prepare the list of exported symbols
Chris@4 6476 if test -z "$export_symbols"; then
Chris@4 6477 if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
Chris@4 6478 func_verbose "generating symbol list for \`$libname.la'"
Chris@4 6479 export_symbols="$output_objdir/$libname.exp"
Chris@4 6480 $opt_dry_run || $RM $export_symbols
Chris@4 6481 cmds=$export_symbols_cmds
Chris@4 6482 save_ifs="$IFS"; IFS='~'
Chris@4 6483 for cmd in $cmds; do
Chris@4 6484 IFS="$save_ifs"
Chris@4 6485 eval cmd=\"$cmd\"
Chris@4 6486 func_len " $cmd"
Chris@4 6487 len=$func_len_result
Chris@4 6488 if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
Chris@4 6489 func_show_eval "$cmd" 'exit $?'
Chris@4 6490 skipped_export=false
Chris@4 6491 else
Chris@4 6492 # The command line is too long to execute in one step.
Chris@4 6493 func_verbose "using reloadable object file for export list..."
Chris@4 6494 skipped_export=:
Chris@4 6495 # Break out early, otherwise skipped_export may be
Chris@4 6496 # set to false by a later but shorter cmd.
Chris@4 6497 break
Chris@4 6498 fi
Chris@4 6499 done
Chris@4 6500 IFS="$save_ifs"
Chris@4 6501 if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
Chris@4 6502 func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
Chris@4 6503 func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
Chris@4 6504 fi
Chris@4 6505 fi
Chris@4 6506 fi
Chris@4 6507
Chris@4 6508 if test -n "$export_symbols" && test -n "$include_expsyms"; then
Chris@4 6509 tmp_export_symbols="$export_symbols"
Chris@4 6510 test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
Chris@4 6511 $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
Chris@4 6512 fi
Chris@4 6513
Chris@4 6514 if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
Chris@4 6515 # The given exports_symbols file has to be filtered, so filter it.
Chris@4 6516 func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
Chris@4 6517 # FIXME: $output_objdir/$libname.filter potentially contains lots of
Chris@4 6518 # 's' commands which not all seds can handle. GNU sed should be fine
Chris@4 6519 # though. Also, the filter scales superlinearly with the number of
Chris@4 6520 # global variables. join(1) would be nice here, but unfortunately
Chris@4 6521 # isn't a blessed tool.
Chris@4 6522 $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
Chris@4 6523 delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
Chris@4 6524 export_symbols=$output_objdir/$libname.def
Chris@4 6525 $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
Chris@4 6526 fi
Chris@4 6527
Chris@4 6528 tmp_deplibs=
Chris@4 6529 for test_deplib in $deplibs; do
Chris@4 6530 case " $convenience " in
Chris@4 6531 *" $test_deplib "*) ;;
Chris@4 6532 *)
Chris@4 6533 tmp_deplibs="$tmp_deplibs $test_deplib"
Chris@4 6534 ;;
Chris@4 6535 esac
Chris@4 6536 done
Chris@4 6537 deplibs="$tmp_deplibs"
Chris@4 6538
Chris@4 6539 if test -n "$convenience"; then
Chris@4 6540 if test -n "$whole_archive_flag_spec" &&
Chris@4 6541 test "$compiler_needs_object" = yes &&
Chris@4 6542 test -z "$libobjs"; then
Chris@4 6543 # extract the archives, so we have objects to list.
Chris@4 6544 # TODO: could optimize this to just extract one archive.
Chris@4 6545 whole_archive_flag_spec=
Chris@4 6546 fi
Chris@4 6547 if test -n "$whole_archive_flag_spec"; then
Chris@4 6548 save_libobjs=$libobjs
Chris@4 6549 eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
Chris@4 6550 test "X$libobjs" = "X " && libobjs=
Chris@4 6551 else
Chris@4 6552 gentop="$output_objdir/${outputname}x"
Chris@4 6553 generated="$generated $gentop"
Chris@4 6554
Chris@4 6555 func_extract_archives $gentop $convenience
Chris@4 6556 libobjs="$libobjs $func_extract_archives_result"
Chris@4 6557 test "X$libobjs" = "X " && libobjs=
Chris@4 6558 fi
Chris@4 6559 fi
Chris@4 6560
Chris@4 6561 if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
Chris@4 6562 eval flag=\"$thread_safe_flag_spec\"
Chris@4 6563 linker_flags="$linker_flags $flag"
Chris@4 6564 fi
Chris@4 6565
Chris@4 6566 # Make a backup of the uninstalled library when relinking
Chris@4 6567 if test "$mode" = relink; then
Chris@4 6568 $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
Chris@4 6569 fi
Chris@4 6570
Chris@4 6571 # Do each of the archive commands.
Chris@4 6572 if test "$module" = yes && test -n "$module_cmds" ; then
Chris@4 6573 if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
Chris@4 6574 eval test_cmds=\"$module_expsym_cmds\"
Chris@4 6575 cmds=$module_expsym_cmds
Chris@4 6576 else
Chris@4 6577 eval test_cmds=\"$module_cmds\"
Chris@4 6578 cmds=$module_cmds
Chris@4 6579 fi
Chris@4 6580 else
Chris@4 6581 if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
Chris@4 6582 eval test_cmds=\"$archive_expsym_cmds\"
Chris@4 6583 cmds=$archive_expsym_cmds
Chris@4 6584 else
Chris@4 6585 eval test_cmds=\"$archive_cmds\"
Chris@4 6586 cmds=$archive_cmds
Chris@4 6587 fi
Chris@4 6588 fi
Chris@4 6589
Chris@4 6590 if test "X$skipped_export" != "X:" &&
Chris@4 6591 func_len " $test_cmds" &&
Chris@4 6592 len=$func_len_result &&
Chris@4 6593 test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
Chris@4 6594 :
Chris@4 6595 else
Chris@4 6596 # The command line is too long to link in one step, link piecewise
Chris@4 6597 # or, if using GNU ld and skipped_export is not :, use a linker
Chris@4 6598 # script.
Chris@4 6599
Chris@4 6600 # Save the value of $output and $libobjs because we want to
Chris@4 6601 # use them later. If we have whole_archive_flag_spec, we
Chris@4 6602 # want to use save_libobjs as it was before
Chris@4 6603 # whole_archive_flag_spec was expanded, because we can't
Chris@4 6604 # assume the linker understands whole_archive_flag_spec.
Chris@4 6605 # This may have to be revisited, in case too many
Chris@4 6606 # convenience libraries get linked in and end up exceeding
Chris@4 6607 # the spec.
Chris@4 6608 if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
Chris@4 6609 save_libobjs=$libobjs
Chris@4 6610 fi
Chris@4 6611 save_output=$output
Chris@4 6612 output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
Chris@4 6613
Chris@4 6614 # Clear the reloadable object creation command queue and
Chris@4 6615 # initialize k to one.
Chris@4 6616 test_cmds=
Chris@4 6617 concat_cmds=
Chris@4 6618 objlist=
Chris@4 6619 last_robj=
Chris@4 6620 k=1
Chris@4 6621
Chris@4 6622 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
Chris@4 6623 output=${output_objdir}/${output_la}.lnkscript
Chris@4 6624 func_verbose "creating GNU ld script: $output"
Chris@4 6625 $ECHO 'INPUT (' > $output
Chris@4 6626 for obj in $save_libobjs
Chris@4 6627 do
Chris@4 6628 $ECHO "$obj" >> $output
Chris@4 6629 done
Chris@4 6630 $ECHO ')' >> $output
Chris@4 6631 delfiles="$delfiles $output"
Chris@4 6632 elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
Chris@4 6633 output=${output_objdir}/${output_la}.lnk
Chris@4 6634 func_verbose "creating linker input file list: $output"
Chris@4 6635 : > $output
Chris@4 6636 set x $save_libobjs
Chris@4 6637 shift
Chris@4 6638 firstobj=
Chris@4 6639 if test "$compiler_needs_object" = yes; then
Chris@4 6640 firstobj="$1 "
Chris@4 6641 shift
Chris@4 6642 fi
Chris@4 6643 for obj
Chris@4 6644 do
Chris@4 6645 $ECHO "$obj" >> $output
Chris@4 6646 done
Chris@4 6647 delfiles="$delfiles $output"
Chris@4 6648 output=$firstobj\"$file_list_spec$output\"
Chris@4 6649 else
Chris@4 6650 if test -n "$save_libobjs"; then
Chris@4 6651 func_verbose "creating reloadable object files..."
Chris@4 6652 output=$output_objdir/$output_la-${k}.$objext
Chris@4 6653 eval test_cmds=\"$reload_cmds\"
Chris@4 6654 func_len " $test_cmds"
Chris@4 6655 len0=$func_len_result
Chris@4 6656 len=$len0
Chris@4 6657
Chris@4 6658 # Loop over the list of objects to be linked.
Chris@4 6659 for obj in $save_libobjs
Chris@4 6660 do
Chris@4 6661 func_len " $obj"
Chris@4 6662 func_arith $len + $func_len_result
Chris@4 6663 len=$func_arith_result
Chris@4 6664 if test "X$objlist" = X ||
Chris@4 6665 test "$len" -lt "$max_cmd_len"; then
Chris@4 6666 func_append objlist " $obj"
Chris@4 6667 else
Chris@4 6668 # The command $test_cmds is almost too long, add a
Chris@4 6669 # command to the queue.
Chris@4 6670 if test "$k" -eq 1 ; then
Chris@4 6671 # The first file doesn't have a previous command to add.
Chris@4 6672 eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
Chris@4 6673 else
Chris@4 6674 # All subsequent reloadable object files will link in
Chris@4 6675 # the last one created.
Chris@4 6676 eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
Chris@4 6677 fi
Chris@4 6678 last_robj=$output_objdir/$output_la-${k}.$objext
Chris@4 6679 func_arith $k + 1
Chris@4 6680 k=$func_arith_result
Chris@4 6681 output=$output_objdir/$output_la-${k}.$objext
Chris@4 6682 objlist=$obj
Chris@4 6683 func_len " $last_robj"
Chris@4 6684 func_arith $len0 + $func_len_result
Chris@4 6685 len=$func_arith_result
Chris@4 6686 fi
Chris@4 6687 done
Chris@4 6688 # Handle the remaining objects by creating one last
Chris@4 6689 # reloadable object file. All subsequent reloadable object
Chris@4 6690 # files will link in the last one created.
Chris@4 6691 test -z "$concat_cmds" || concat_cmds=$concat_cmds~
Chris@4 6692 eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
Chris@4 6693 if test -n "$last_robj"; then
Chris@4 6694 eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
Chris@4 6695 fi
Chris@4 6696 delfiles="$delfiles $output"
Chris@4 6697
Chris@4 6698 else
Chris@4 6699 output=
Chris@4 6700 fi
Chris@4 6701
Chris@4 6702 if ${skipped_export-false}; then
Chris@4 6703 func_verbose "generating symbol list for \`$libname.la'"
Chris@4 6704 export_symbols="$output_objdir/$libname.exp"
Chris@4 6705 $opt_dry_run || $RM $export_symbols
Chris@4 6706 libobjs=$output
Chris@4 6707 # Append the command to create the export file.
Chris@4 6708 test -z "$concat_cmds" || concat_cmds=$concat_cmds~
Chris@4 6709 eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
Chris@4 6710 if test -n "$last_robj"; then
Chris@4 6711 eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
Chris@4 6712 fi
Chris@4 6713 fi
Chris@4 6714
Chris@4 6715 test -n "$save_libobjs" &&
Chris@4 6716 func_verbose "creating a temporary reloadable object file: $output"
Chris@4 6717
Chris@4 6718 # Loop through the commands generated above and execute them.
Chris@4 6719 save_ifs="$IFS"; IFS='~'
Chris@4 6720 for cmd in $concat_cmds; do
Chris@4 6721 IFS="$save_ifs"
Chris@4 6722 $opt_silent || {
Chris@4 6723 func_quote_for_expand "$cmd"
Chris@4 6724 eval "func_echo $func_quote_for_expand_result"
Chris@4 6725 }
Chris@4 6726 $opt_dry_run || eval "$cmd" || {
Chris@4 6727 lt_exit=$?
Chris@4 6728
Chris@4 6729 # Restore the uninstalled library and exit
Chris@4 6730 if test "$mode" = relink; then
Chris@4 6731 ( cd "$output_objdir" && \
Chris@4 6732 $RM "${realname}T" && \
Chris@4 6733 $MV "${realname}U" "$realname" )
Chris@4 6734 fi
Chris@4 6735
Chris@4 6736 exit $lt_exit
Chris@4 6737 }
Chris@4 6738 done
Chris@4 6739 IFS="$save_ifs"
Chris@4 6740
Chris@4 6741 if test -n "$export_symbols_regex" && ${skipped_export-false}; then
Chris@4 6742 func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
Chris@4 6743 func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
Chris@4 6744 fi
Chris@4 6745 fi
Chris@4 6746
Chris@4 6747 if ${skipped_export-false}; then
Chris@4 6748 if test -n "$export_symbols" && test -n "$include_expsyms"; then
Chris@4 6749 tmp_export_symbols="$export_symbols"
Chris@4 6750 test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
Chris@4 6751 $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
Chris@4 6752 fi
Chris@4 6753
Chris@4 6754 if test -n "$orig_export_symbols"; then
Chris@4 6755 # The given exports_symbols file has to be filtered, so filter it.
Chris@4 6756 func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
Chris@4 6757 # FIXME: $output_objdir/$libname.filter potentially contains lots of
Chris@4 6758 # 's' commands which not all seds can handle. GNU sed should be fine
Chris@4 6759 # though. Also, the filter scales superlinearly with the number of
Chris@4 6760 # global variables. join(1) would be nice here, but unfortunately
Chris@4 6761 # isn't a blessed tool.
Chris@4 6762 $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
Chris@4 6763 delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
Chris@4 6764 export_symbols=$output_objdir/$libname.def
Chris@4 6765 $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
Chris@4 6766 fi
Chris@4 6767 fi
Chris@4 6768
Chris@4 6769 libobjs=$output
Chris@4 6770 # Restore the value of output.
Chris@4 6771 output=$save_output
Chris@4 6772
Chris@4 6773 if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
Chris@4 6774 eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
Chris@4 6775 test "X$libobjs" = "X " && libobjs=
Chris@4 6776 fi
Chris@4 6777 # Expand the library linking commands again to reset the
Chris@4 6778 # value of $libobjs for piecewise linking.
Chris@4 6779
Chris@4 6780 # Do each of the archive commands.
Chris@4 6781 if test "$module" = yes && test -n "$module_cmds" ; then
Chris@4 6782 if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
Chris@4 6783 cmds=$module_expsym_cmds
Chris@4 6784 else
Chris@4 6785 cmds=$module_cmds
Chris@4 6786 fi
Chris@4 6787 else
Chris@4 6788 if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
Chris@4 6789 cmds=$archive_expsym_cmds
Chris@4 6790 else
Chris@4 6791 cmds=$archive_cmds
Chris@4 6792 fi
Chris@4 6793 fi
Chris@4 6794 fi
Chris@4 6795
Chris@4 6796 if test -n "$delfiles"; then
Chris@4 6797 # Append the command to remove temporary files to $cmds.
Chris@4 6798 eval cmds=\"\$cmds~\$RM $delfiles\"
Chris@4 6799 fi
Chris@4 6800
Chris@4 6801 # Add any objects from preloaded convenience libraries
Chris@4 6802 if test -n "$dlprefiles"; then
Chris@4 6803 gentop="$output_objdir/${outputname}x"
Chris@4 6804 generated="$generated $gentop"
Chris@4 6805
Chris@4 6806 func_extract_archives $gentop $dlprefiles
Chris@4 6807 libobjs="$libobjs $func_extract_archives_result"
Chris@4 6808 test "X$libobjs" = "X " && libobjs=
Chris@4 6809 fi
Chris@4 6810
Chris@4 6811 save_ifs="$IFS"; IFS='~'
Chris@4 6812 for cmd in $cmds; do
Chris@4 6813 IFS="$save_ifs"
Chris@4 6814 eval cmd=\"$cmd\"
Chris@4 6815 $opt_silent || {
Chris@4 6816 func_quote_for_expand "$cmd"
Chris@4 6817 eval "func_echo $func_quote_for_expand_result"
Chris@4 6818 }
Chris@4 6819 $opt_dry_run || eval "$cmd" || {
Chris@4 6820 lt_exit=$?
Chris@4 6821
Chris@4 6822 # Restore the uninstalled library and exit
Chris@4 6823 if test "$mode" = relink; then
Chris@4 6824 ( cd "$output_objdir" && \
Chris@4 6825 $RM "${realname}T" && \
Chris@4 6826 $MV "${realname}U" "$realname" )
Chris@4 6827 fi
Chris@4 6828
Chris@4 6829 exit $lt_exit
Chris@4 6830 }
Chris@4 6831 done
Chris@4 6832 IFS="$save_ifs"
Chris@4 6833
Chris@4 6834 # Restore the uninstalled library and exit
Chris@4 6835 if test "$mode" = relink; then
Chris@4 6836 $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
Chris@4 6837
Chris@4 6838 if test -n "$convenience"; then
Chris@4 6839 if test -z "$whole_archive_flag_spec"; then
Chris@4 6840 func_show_eval '${RM}r "$gentop"'
Chris@4 6841 fi
Chris@4 6842 fi
Chris@4 6843
Chris@4 6844 exit $EXIT_SUCCESS
Chris@4 6845 fi
Chris@4 6846
Chris@4 6847 # Create links to the real library.
Chris@4 6848 for linkname in $linknames; do
Chris@4 6849 if test "$realname" != "$linkname"; then
Chris@4 6850 func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
Chris@4 6851 fi
Chris@4 6852 done
Chris@4 6853
Chris@4 6854 # If -module or -export-dynamic was specified, set the dlname.
Chris@4 6855 if test "$module" = yes || test "$export_dynamic" = yes; then
Chris@4 6856 # On all known operating systems, these are identical.
Chris@4 6857 dlname="$soname"
Chris@4 6858 fi
Chris@4 6859 fi
Chris@4 6860 ;;
Chris@4 6861
Chris@4 6862 obj)
Chris@4 6863 if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
Chris@4 6864 func_warning "\`-dlopen' is ignored for objects"
Chris@4 6865 fi
Chris@4 6866
Chris@4 6867 case " $deplibs" in
Chris@4 6868 *\ -l* | *\ -L*)
Chris@4 6869 func_warning "\`-l' and \`-L' are ignored for objects" ;;
Chris@4 6870 esac
Chris@4 6871
Chris@4 6872 test -n "$rpath" && \
Chris@4 6873 func_warning "\`-rpath' is ignored for objects"
Chris@4 6874
Chris@4 6875 test -n "$xrpath" && \
Chris@4 6876 func_warning "\`-R' is ignored for objects"
Chris@4 6877
Chris@4 6878 test -n "$vinfo" && \
Chris@4 6879 func_warning "\`-version-info' is ignored for objects"
Chris@4 6880
Chris@4 6881 test -n "$release" && \
Chris@4 6882 func_warning "\`-release' is ignored for objects"
Chris@4 6883
Chris@4 6884 case $output in
Chris@4 6885 *.lo)
Chris@4 6886 test -n "$objs$old_deplibs" && \
Chris@4 6887 func_fatal_error "cannot build library object \`$output' from non-libtool objects"
Chris@4 6888
Chris@4 6889 libobj=$output
Chris@4 6890 func_lo2o "$libobj"
Chris@4 6891 obj=$func_lo2o_result
Chris@4 6892 ;;
Chris@4 6893 *)
Chris@4 6894 libobj=
Chris@4 6895 obj="$output"
Chris@4 6896 ;;
Chris@4 6897 esac
Chris@4 6898
Chris@4 6899 # Delete the old objects.
Chris@4 6900 $opt_dry_run || $RM $obj $libobj
Chris@4 6901
Chris@4 6902 # Objects from convenience libraries. This assumes
Chris@4 6903 # single-version convenience libraries. Whenever we create
Chris@4 6904 # different ones for PIC/non-PIC, this we'll have to duplicate
Chris@4 6905 # the extraction.
Chris@4 6906 reload_conv_objs=
Chris@4 6907 gentop=
Chris@4 6908 # reload_cmds runs $LD directly, so let us get rid of
Chris@4 6909 # -Wl from whole_archive_flag_spec and hope we can get by with
Chris@4 6910 # turning comma into space..
Chris@4 6911 wl=
Chris@4 6912
Chris@4 6913 if test -n "$convenience"; then
Chris@4 6914 if test -n "$whole_archive_flag_spec"; then
Chris@4 6915 eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
Chris@4 6916 reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
Chris@4 6917 else
Chris@4 6918 gentop="$output_objdir/${obj}x"
Chris@4 6919 generated="$generated $gentop"
Chris@4 6920
Chris@4 6921 func_extract_archives $gentop $convenience
Chris@4 6922 reload_conv_objs="$reload_objs $func_extract_archives_result"
Chris@4 6923 fi
Chris@4 6924 fi
Chris@4 6925
Chris@4 6926 # Create the old-style object.
Chris@4 6927 reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
Chris@4 6928
Chris@4 6929 output="$obj"
Chris@4 6930 func_execute_cmds "$reload_cmds" 'exit $?'
Chris@4 6931
Chris@4 6932 # Exit if we aren't doing a library object file.
Chris@4 6933 if test -z "$libobj"; then
Chris@4 6934 if test -n "$gentop"; then
Chris@4 6935 func_show_eval '${RM}r "$gentop"'
Chris@4 6936 fi
Chris@4 6937
Chris@4 6938 exit $EXIT_SUCCESS
Chris@4 6939 fi
Chris@4 6940
Chris@4 6941 if test "$build_libtool_libs" != yes; then
Chris@4 6942 if test -n "$gentop"; then
Chris@4 6943 func_show_eval '${RM}r "$gentop"'
Chris@4 6944 fi
Chris@4 6945
Chris@4 6946 # Create an invalid libtool object if no PIC, so that we don't
Chris@4 6947 # accidentally link it into a program.
Chris@4 6948 # $show "echo timestamp > $libobj"
Chris@4 6949 # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
Chris@4 6950 exit $EXIT_SUCCESS
Chris@4 6951 fi
Chris@4 6952
Chris@4 6953 if test -n "$pic_flag" || test "$pic_mode" != default; then
Chris@4 6954 # Only do commands if we really have different PIC objects.
Chris@4 6955 reload_objs="$libobjs $reload_conv_objs"
Chris@4 6956 output="$libobj"
Chris@4 6957 func_execute_cmds "$reload_cmds" 'exit $?'
Chris@4 6958 fi
Chris@4 6959
Chris@4 6960 if test -n "$gentop"; then
Chris@4 6961 func_show_eval '${RM}r "$gentop"'
Chris@4 6962 fi
Chris@4 6963
Chris@4 6964 exit $EXIT_SUCCESS
Chris@4 6965 ;;
Chris@4 6966
Chris@4 6967 prog)
Chris@4 6968 case $host in
Chris@4 6969 *cygwin*) func_stripname '' '.exe' "$output"
Chris@4 6970 output=$func_stripname_result.exe;;
Chris@4 6971 esac
Chris@4 6972 test -n "$vinfo" && \
Chris@4 6973 func_warning "\`-version-info' is ignored for programs"
Chris@4 6974
Chris@4 6975 test -n "$release" && \
Chris@4 6976 func_warning "\`-release' is ignored for programs"
Chris@4 6977
Chris@4 6978 test "$preload" = yes \
Chris@4 6979 && test "$dlopen_support" = unknown \
Chris@4 6980 && test "$dlopen_self" = unknown \
Chris@4 6981 && test "$dlopen_self_static" = unknown && \
Chris@4 6982 func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
Chris@4 6983
Chris@4 6984 case $host in
Chris@4 6985 *-*-rhapsody* | *-*-darwin1.[012])
Chris@4 6986 # On Rhapsody replace the C library is the System framework
Chris@4 6987 compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
Chris@4 6988 finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
Chris@4 6989 ;;
Chris@4 6990 esac
Chris@4 6991
Chris@4 6992 case $host in
Chris@4 6993 *-*-darwin*)
Chris@4 6994 # Don't allow lazy linking, it breaks C++ global constructors
Chris@4 6995 # But is supposedly fixed on 10.4 or later (yay!).
Chris@4 6996 if test "$tagname" = CXX ; then
Chris@4 6997 case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
Chris@4 6998 10.[0123])
Chris@4 6999 compile_command="$compile_command ${wl}-bind_at_load"
Chris@4 7000 finalize_command="$finalize_command ${wl}-bind_at_load"
Chris@4 7001 ;;
Chris@4 7002 esac
Chris@4 7003 fi
Chris@4 7004 # Time to change all our "foo.ltframework" stuff back to "-framework foo"
Chris@4 7005 compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
Chris@4 7006 finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
Chris@4 7007 ;;
Chris@4 7008 esac
Chris@4 7009
Chris@4 7010
Chris@4 7011 # move library search paths that coincide with paths to not yet
Chris@4 7012 # installed libraries to the beginning of the library search list
Chris@4 7013 new_libs=
Chris@4 7014 for path in $notinst_path; do
Chris@4 7015 case " $new_libs " in
Chris@4 7016 *" -L$path/$objdir "*) ;;
Chris@4 7017 *)
Chris@4 7018 case " $compile_deplibs " in
Chris@4 7019 *" -L$path/$objdir "*)
Chris@4 7020 new_libs="$new_libs -L$path/$objdir" ;;
Chris@4 7021 esac
Chris@4 7022 ;;
Chris@4 7023 esac
Chris@4 7024 done
Chris@4 7025 for deplib in $compile_deplibs; do
Chris@4 7026 case $deplib in
Chris@4 7027 -L*)
Chris@4 7028 case " $new_libs " in
Chris@4 7029 *" $deplib "*) ;;
Chris@4 7030 *) new_libs="$new_libs $deplib" ;;
Chris@4 7031 esac
Chris@4 7032 ;;
Chris@4 7033 *) new_libs="$new_libs $deplib" ;;
Chris@4 7034 esac
Chris@4 7035 done
Chris@4 7036 compile_deplibs="$new_libs"
Chris@4 7037
Chris@4 7038
Chris@4 7039 compile_command="$compile_command $compile_deplibs"
Chris@4 7040 finalize_command="$finalize_command $finalize_deplibs"
Chris@4 7041
Chris@4 7042 if test -n "$rpath$xrpath"; then
Chris@4 7043 # If the user specified any rpath flags, then add them.
Chris@4 7044 for libdir in $rpath $xrpath; do
Chris@4 7045 # This is the magic to use -rpath.
Chris@4 7046 case "$finalize_rpath " in
Chris@4 7047 *" $libdir "*) ;;
Chris@4 7048 *) finalize_rpath="$finalize_rpath $libdir" ;;
Chris@4 7049 esac
Chris@4 7050 done
Chris@4 7051 fi
Chris@4 7052
Chris@4 7053 # Now hardcode the library paths
Chris@4 7054 rpath=
Chris@4 7055 hardcode_libdirs=
Chris@4 7056 for libdir in $compile_rpath $finalize_rpath; do
Chris@4 7057 if test -n "$hardcode_libdir_flag_spec"; then
Chris@4 7058 if test -n "$hardcode_libdir_separator"; then
Chris@4 7059 if test -z "$hardcode_libdirs"; then
Chris@4 7060 hardcode_libdirs="$libdir"
Chris@4 7061 else
Chris@4 7062 # Just accumulate the unique libdirs.
Chris@4 7063 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
Chris@4 7064 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
Chris@4 7065 ;;
Chris@4 7066 *)
Chris@4 7067 hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
Chris@4 7068 ;;
Chris@4 7069 esac
Chris@4 7070 fi
Chris@4 7071 else
Chris@4 7072 eval flag=\"$hardcode_libdir_flag_spec\"
Chris@4 7073 rpath="$rpath $flag"
Chris@4 7074 fi
Chris@4 7075 elif test -n "$runpath_var"; then
Chris@4 7076 case "$perm_rpath " in
Chris@4 7077 *" $libdir "*) ;;
Chris@4 7078 *) perm_rpath="$perm_rpath $libdir" ;;
Chris@4 7079 esac
Chris@4 7080 fi
Chris@4 7081 case $host in
Chris@4 7082 *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
Chris@4 7083 testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
Chris@4 7084 case :$dllsearchpath: in
Chris@4 7085 *":$libdir:"*) ;;
Chris@4 7086 *) dllsearchpath="$dllsearchpath:$libdir";;
Chris@4 7087 esac
Chris@4 7088 case :$dllsearchpath: in
Chris@4 7089 *":$testbindir:"*) ;;
Chris@4 7090 *) dllsearchpath="$dllsearchpath:$testbindir";;
Chris@4 7091 esac
Chris@4 7092 ;;
Chris@4 7093 esac
Chris@4 7094 done
Chris@4 7095 # Substitute the hardcoded libdirs into the rpath.
Chris@4 7096 if test -n "$hardcode_libdir_separator" &&
Chris@4 7097 test -n "$hardcode_libdirs"; then
Chris@4 7098 libdir="$hardcode_libdirs"
Chris@4 7099 eval rpath=\" $hardcode_libdir_flag_spec\"
Chris@4 7100 fi
Chris@4 7101 compile_rpath="$rpath"
Chris@4 7102
Chris@4 7103 rpath=
Chris@4 7104 hardcode_libdirs=
Chris@4 7105 for libdir in $finalize_rpath; do
Chris@4 7106 if test -n "$hardcode_libdir_flag_spec"; then
Chris@4 7107 if test -n "$hardcode_libdir_separator"; then
Chris@4 7108 if test -z "$hardcode_libdirs"; then
Chris@4 7109 hardcode_libdirs="$libdir"
Chris@4 7110 else
Chris@4 7111 # Just accumulate the unique libdirs.
Chris@4 7112 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
Chris@4 7113 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
Chris@4 7114 ;;
Chris@4 7115 *)
Chris@4 7116 hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
Chris@4 7117 ;;
Chris@4 7118 esac
Chris@4 7119 fi
Chris@4 7120 else
Chris@4 7121 eval flag=\"$hardcode_libdir_flag_spec\"
Chris@4 7122 rpath="$rpath $flag"
Chris@4 7123 fi
Chris@4 7124 elif test -n "$runpath_var"; then
Chris@4 7125 case "$finalize_perm_rpath " in
Chris@4 7126 *" $libdir "*) ;;
Chris@4 7127 *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
Chris@4 7128 esac
Chris@4 7129 fi
Chris@4 7130 done
Chris@4 7131 # Substitute the hardcoded libdirs into the rpath.
Chris@4 7132 if test -n "$hardcode_libdir_separator" &&
Chris@4 7133 test -n "$hardcode_libdirs"; then
Chris@4 7134 libdir="$hardcode_libdirs"
Chris@4 7135 eval rpath=\" $hardcode_libdir_flag_spec\"
Chris@4 7136 fi
Chris@4 7137 finalize_rpath="$rpath"
Chris@4 7138
Chris@4 7139 if test -n "$libobjs" && test "$build_old_libs" = yes; then
Chris@4 7140 # Transform all the library objects into standard objects.
Chris@4 7141 compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
Chris@4 7142 finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
Chris@4 7143 fi
Chris@4 7144
Chris@4 7145 func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
Chris@4 7146
Chris@4 7147 # template prelinking step
Chris@4 7148 if test -n "$prelink_cmds"; then
Chris@4 7149 func_execute_cmds "$prelink_cmds" 'exit $?'
Chris@4 7150 fi
Chris@4 7151
Chris@4 7152 wrappers_required=yes
Chris@4 7153 case $host in
Chris@4 7154 *cygwin* | *mingw* )
Chris@4 7155 if test "$build_libtool_libs" != yes; then
Chris@4 7156 wrappers_required=no
Chris@4 7157 fi
Chris@4 7158 ;;
Chris@4 7159 *)
Chris@4 7160 if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
Chris@4 7161 wrappers_required=no
Chris@4 7162 fi
Chris@4 7163 ;;
Chris@4 7164 esac
Chris@4 7165 if test "$wrappers_required" = no; then
Chris@4 7166 # Replace the output file specification.
Chris@4 7167 compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
Chris@4 7168 link_command="$compile_command$compile_rpath"
Chris@4 7169
Chris@4 7170 # We have no uninstalled library dependencies, so finalize right now.
Chris@4 7171 exit_status=0
Chris@4 7172 func_show_eval "$link_command" 'exit_status=$?'
Chris@4 7173
Chris@4 7174 # Delete the generated files.
Chris@4 7175 if test -f "$output_objdir/${outputname}S.${objext}"; then
Chris@4 7176 func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
Chris@4 7177 fi
Chris@4 7178
Chris@4 7179 exit $exit_status
Chris@4 7180 fi
Chris@4 7181
Chris@4 7182 if test -n "$compile_shlibpath$finalize_shlibpath"; then
Chris@4 7183 compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
Chris@4 7184 fi
Chris@4 7185 if test -n "$finalize_shlibpath"; then
Chris@4 7186 finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
Chris@4 7187 fi
Chris@4 7188
Chris@4 7189 compile_var=
Chris@4 7190 finalize_var=
Chris@4 7191 if test -n "$runpath_var"; then
Chris@4 7192 if test -n "$perm_rpath"; then
Chris@4 7193 # We should set the runpath_var.
Chris@4 7194 rpath=
Chris@4 7195 for dir in $perm_rpath; do
Chris@4 7196 rpath="$rpath$dir:"
Chris@4 7197 done
Chris@4 7198 compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
Chris@4 7199 fi
Chris@4 7200 if test -n "$finalize_perm_rpath"; then
Chris@4 7201 # We should set the runpath_var.
Chris@4 7202 rpath=
Chris@4 7203 for dir in $finalize_perm_rpath; do
Chris@4 7204 rpath="$rpath$dir:"
Chris@4 7205 done
Chris@4 7206 finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
Chris@4 7207 fi
Chris@4 7208 fi
Chris@4 7209
Chris@4 7210 if test "$no_install" = yes; then
Chris@4 7211 # We don't need to create a wrapper script.
Chris@4 7212 link_command="$compile_var$compile_command$compile_rpath"
Chris@4 7213 # Replace the output file specification.
Chris@4 7214 link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
Chris@4 7215 # Delete the old output file.
Chris@4 7216 $opt_dry_run || $RM $output
Chris@4 7217 # Link the executable and exit
Chris@4 7218 func_show_eval "$link_command" 'exit $?'
Chris@4 7219 exit $EXIT_SUCCESS
Chris@4 7220 fi
Chris@4 7221
Chris@4 7222 if test "$hardcode_action" = relink; then
Chris@4 7223 # Fast installation is not supported
Chris@4 7224 link_command="$compile_var$compile_command$compile_rpath"
Chris@4 7225 relink_command="$finalize_var$finalize_command$finalize_rpath"
Chris@4 7226
Chris@4 7227 func_warning "this platform does not like uninstalled shared libraries"
Chris@4 7228 func_warning "\`$output' will be relinked during installation"
Chris@4 7229 else
Chris@4 7230 if test "$fast_install" != no; then
Chris@4 7231 link_command="$finalize_var$compile_command$finalize_rpath"
Chris@4 7232 if test "$fast_install" = yes; then
Chris@4 7233 relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
Chris@4 7234 else
Chris@4 7235 # fast_install is set to needless
Chris@4 7236 relink_command=
Chris@4 7237 fi
Chris@4 7238 else
Chris@4 7239 link_command="$compile_var$compile_command$compile_rpath"
Chris@4 7240 relink_command="$finalize_var$finalize_command$finalize_rpath"
Chris@4 7241 fi
Chris@4 7242 fi
Chris@4 7243
Chris@4 7244 # Replace the output file specification.
Chris@4 7245 link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
Chris@4 7246
Chris@4 7247 # Delete the old output files.
Chris@4 7248 $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
Chris@4 7249
Chris@4 7250 func_show_eval "$link_command" 'exit $?'
Chris@4 7251
Chris@4 7252 # Now create the wrapper script.
Chris@4 7253 func_verbose "creating $output"
Chris@4 7254
Chris@4 7255 # Quote the relink command for shipping.
Chris@4 7256 if test -n "$relink_command"; then
Chris@4 7257 # Preserve any variables that may affect compiler behavior
Chris@4 7258 for var in $variables_saved_for_relink; do
Chris@4 7259 if eval test -z \"\${$var+set}\"; then
Chris@4 7260 relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
Chris@4 7261 elif eval var_value=\$$var; test -z "$var_value"; then
Chris@4 7262 relink_command="$var=; export $var; $relink_command"
Chris@4 7263 else
Chris@4 7264 func_quote_for_eval "$var_value"
Chris@4 7265 relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
Chris@4 7266 fi
Chris@4 7267 done
Chris@4 7268 relink_command="(cd `pwd`; $relink_command)"
Chris@4 7269 relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
Chris@4 7270 fi
Chris@4 7271
Chris@4 7272 # Quote $ECHO for shipping.
Chris@4 7273 if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
Chris@4 7274 case $progpath in
Chris@4 7275 [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
Chris@4 7276 *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
Chris@4 7277 esac
Chris@4 7278 qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
Chris@4 7279 else
Chris@4 7280 qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
Chris@4 7281 fi
Chris@4 7282
Chris@4 7283 # Only actually do things if not in dry run mode.
Chris@4 7284 $opt_dry_run || {
Chris@4 7285 # win32 will think the script is a binary if it has
Chris@4 7286 # a .exe suffix, so we strip it off here.
Chris@4 7287 case $output in
Chris@4 7288 *.exe) func_stripname '' '.exe' "$output"
Chris@4 7289 output=$func_stripname_result ;;
Chris@4 7290 esac
Chris@4 7291 # test for cygwin because mv fails w/o .exe extensions
Chris@4 7292 case $host in
Chris@4 7293 *cygwin*)
Chris@4 7294 exeext=.exe
Chris@4 7295 func_stripname '' '.exe' "$outputname"
Chris@4 7296 outputname=$func_stripname_result ;;
Chris@4 7297 *) exeext= ;;
Chris@4 7298 esac
Chris@4 7299 case $host in
Chris@4 7300 *cygwin* | *mingw* )
Chris@4 7301 func_dirname_and_basename "$output" "" "."
Chris@4 7302 output_name=$func_basename_result
Chris@4 7303 output_path=$func_dirname_result
Chris@4 7304 cwrappersource="$output_path/$objdir/lt-$output_name.c"
Chris@4 7305 cwrapper="$output_path/$output_name.exe"
Chris@4 7306 $RM $cwrappersource $cwrapper
Chris@4 7307 trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
Chris@4 7308
Chris@4 7309 func_emit_cwrapperexe_src > $cwrappersource
Chris@4 7310
Chris@4 7311 # we should really use a build-platform specific compiler
Chris@4 7312 # here, but OTOH, the wrappers (shell script and this C one)
Chris@4 7313 # are only useful if you want to execute the "real" binary.
Chris@4 7314 # Since the "real" binary is built for $host, then this
Chris@4 7315 # wrapper might as well be built for $host, too.
Chris@4 7316 $opt_dry_run || {
Chris@4 7317 $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
Chris@4 7318 $STRIP $cwrapper
Chris@4 7319 }
Chris@4 7320
Chris@4 7321 # Now, create the wrapper script for func_source use:
Chris@4 7322 func_ltwrapper_scriptname $cwrapper
Chris@4 7323 $RM $func_ltwrapper_scriptname_result
Chris@4 7324 trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
Chris@4 7325 $opt_dry_run || {
Chris@4 7326 # note: this script will not be executed, so do not chmod.
Chris@4 7327 if test "x$build" = "x$host" ; then
Chris@4 7328 $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
Chris@4 7329 else
Chris@4 7330 func_emit_wrapper no > $func_ltwrapper_scriptname_result
Chris@4 7331 fi
Chris@4 7332 }
Chris@4 7333 ;;
Chris@4 7334 * )
Chris@4 7335 $RM $output
Chris@4 7336 trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
Chris@4 7337
Chris@4 7338 func_emit_wrapper no > $output
Chris@4 7339 chmod +x $output
Chris@4 7340 ;;
Chris@4 7341 esac
Chris@4 7342 }
Chris@4 7343 exit $EXIT_SUCCESS
Chris@4 7344 ;;
Chris@4 7345 esac
Chris@4 7346
Chris@4 7347 # See if we need to build an old-fashioned archive.
Chris@4 7348 for oldlib in $oldlibs; do
Chris@4 7349
Chris@4 7350 if test "$build_libtool_libs" = convenience; then
Chris@4 7351 oldobjs="$libobjs_save $symfileobj"
Chris@4 7352 addlibs="$convenience"
Chris@4 7353 build_libtool_libs=no
Chris@4 7354 else
Chris@4 7355 if test "$build_libtool_libs" = module; then
Chris@4 7356 oldobjs="$libobjs_save"
Chris@4 7357 build_libtool_libs=no
Chris@4 7358 else
Chris@4 7359 oldobjs="$old_deplibs $non_pic_objects"
Chris@4 7360 if test "$preload" = yes && test -f "$symfileobj"; then
Chris@4 7361 oldobjs="$oldobjs $symfileobj"
Chris@4 7362 fi
Chris@4 7363 fi
Chris@4 7364 addlibs="$old_convenience"
Chris@4 7365 fi
Chris@4 7366
Chris@4 7367 if test -n "$addlibs"; then
Chris@4 7368 gentop="$output_objdir/${outputname}x"
Chris@4 7369 generated="$generated $gentop"
Chris@4 7370
Chris@4 7371 func_extract_archives $gentop $addlibs
Chris@4 7372 oldobjs="$oldobjs $func_extract_archives_result"
Chris@4 7373 fi
Chris@4 7374
Chris@4 7375 # Do each command in the archive commands.
Chris@4 7376 if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
Chris@4 7377 cmds=$old_archive_from_new_cmds
Chris@4 7378 else
Chris@4 7379
Chris@4 7380 # Add any objects from preloaded convenience libraries
Chris@4 7381 if test -n "$dlprefiles"; then
Chris@4 7382 gentop="$output_objdir/${outputname}x"
Chris@4 7383 generated="$generated $gentop"
Chris@4 7384
Chris@4 7385 func_extract_archives $gentop $dlprefiles
Chris@4 7386 oldobjs="$oldobjs $func_extract_archives_result"
Chris@4 7387 fi
Chris@4 7388
Chris@4 7389 # POSIX demands no paths to be encoded in archives. We have
Chris@4 7390 # to avoid creating archives with duplicate basenames if we
Chris@4 7391 # might have to extract them afterwards, e.g., when creating a
Chris@4 7392 # static archive out of a convenience library, or when linking
Chris@4 7393 # the entirety of a libtool archive into another (currently
Chris@4 7394 # not supported by libtool).
Chris@4 7395 if (for obj in $oldobjs
Chris@4 7396 do
Chris@4 7397 func_basename "$obj"
Chris@4 7398 $ECHO "$func_basename_result"
Chris@4 7399 done | sort | sort -uc >/dev/null 2>&1); then
Chris@4 7400 :
Chris@4 7401 else
Chris@4 7402 $ECHO "copying selected object files to avoid basename conflicts..."
Chris@4 7403 gentop="$output_objdir/${outputname}x"
Chris@4 7404 generated="$generated $gentop"
Chris@4 7405 func_mkdir_p "$gentop"
Chris@4 7406 save_oldobjs=$oldobjs
Chris@4 7407 oldobjs=
Chris@4 7408 counter=1
Chris@4 7409 for obj in $save_oldobjs
Chris@4 7410 do
Chris@4 7411 func_basename "$obj"
Chris@4 7412 objbase="$func_basename_result"
Chris@4 7413 case " $oldobjs " in
Chris@4 7414 " ") oldobjs=$obj ;;
Chris@4 7415 *[\ /]"$objbase "*)
Chris@4 7416 while :; do
Chris@4 7417 # Make sure we don't pick an alternate name that also
Chris@4 7418 # overlaps.
Chris@4 7419 newobj=lt$counter-$objbase
Chris@4 7420 func_arith $counter + 1
Chris@4 7421 counter=$func_arith_result
Chris@4 7422 case " $oldobjs " in
Chris@4 7423 *[\ /]"$newobj "*) ;;
Chris@4 7424 *) if test ! -f "$gentop/$newobj"; then break; fi ;;
Chris@4 7425 esac
Chris@4 7426 done
Chris@4 7427 func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
Chris@4 7428 oldobjs="$oldobjs $gentop/$newobj"
Chris@4 7429 ;;
Chris@4 7430 *) oldobjs="$oldobjs $obj" ;;
Chris@4 7431 esac
Chris@4 7432 done
Chris@4 7433 fi
Chris@4 7434 eval cmds=\"$old_archive_cmds\"
Chris@4 7435
Chris@4 7436 func_len " $cmds"
Chris@4 7437 len=$func_len_result
Chris@4 7438 if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
Chris@4 7439 cmds=$old_archive_cmds
Chris@4 7440 else
Chris@4 7441 # the command line is too long to link in one step, link in parts
Chris@4 7442 func_verbose "using piecewise archive linking..."
Chris@4 7443 save_RANLIB=$RANLIB
Chris@4 7444 RANLIB=:
Chris@4 7445 objlist=
Chris@4 7446 concat_cmds=
Chris@4 7447 save_oldobjs=$oldobjs
Chris@4 7448 oldobjs=
Chris@4 7449 # Is there a better way of finding the last object in the list?
Chris@4 7450 for obj in $save_oldobjs
Chris@4 7451 do
Chris@4 7452 last_oldobj=$obj
Chris@4 7453 done
Chris@4 7454 eval test_cmds=\"$old_archive_cmds\"
Chris@4 7455 func_len " $test_cmds"
Chris@4 7456 len0=$func_len_result
Chris@4 7457 len=$len0
Chris@4 7458 for obj in $save_oldobjs
Chris@4 7459 do
Chris@4 7460 func_len " $obj"
Chris@4 7461 func_arith $len + $func_len_result
Chris@4 7462 len=$func_arith_result
Chris@4 7463 func_append objlist " $obj"
Chris@4 7464 if test "$len" -lt "$max_cmd_len"; then
Chris@4 7465 :
Chris@4 7466 else
Chris@4 7467 # the above command should be used before it gets too long
Chris@4 7468 oldobjs=$objlist
Chris@4 7469 if test "$obj" = "$last_oldobj" ; then
Chris@4 7470 RANLIB=$save_RANLIB
Chris@4 7471 fi
Chris@4 7472 test -z "$concat_cmds" || concat_cmds=$concat_cmds~
Chris@4 7473 eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
Chris@4 7474 objlist=
Chris@4 7475 len=$len0
Chris@4 7476 fi
Chris@4 7477 done
Chris@4 7478 RANLIB=$save_RANLIB
Chris@4 7479 oldobjs=$objlist
Chris@4 7480 if test "X$oldobjs" = "X" ; then
Chris@4 7481 eval cmds=\"\$concat_cmds\"
Chris@4 7482 else
Chris@4 7483 eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
Chris@4 7484 fi
Chris@4 7485 fi
Chris@4 7486 fi
Chris@4 7487 func_execute_cmds "$cmds" 'exit $?'
Chris@4 7488 done
Chris@4 7489
Chris@4 7490 test -n "$generated" && \
Chris@4 7491 func_show_eval "${RM}r$generated"
Chris@4 7492
Chris@4 7493 # Now create the libtool archive.
Chris@4 7494 case $output in
Chris@4 7495 *.la)
Chris@4 7496 old_library=
Chris@4 7497 test "$build_old_libs" = yes && old_library="$libname.$libext"
Chris@4 7498 func_verbose "creating $output"
Chris@4 7499
Chris@4 7500 # Preserve any variables that may affect compiler behavior
Chris@4 7501 for var in $variables_saved_for_relink; do
Chris@4 7502 if eval test -z \"\${$var+set}\"; then
Chris@4 7503 relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
Chris@4 7504 elif eval var_value=\$$var; test -z "$var_value"; then
Chris@4 7505 relink_command="$var=; export $var; $relink_command"
Chris@4 7506 else
Chris@4 7507 func_quote_for_eval "$var_value"
Chris@4 7508 relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
Chris@4 7509 fi
Chris@4 7510 done
Chris@4 7511 # Quote the link command for shipping.
Chris@4 7512 relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
Chris@4 7513 relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
Chris@4 7514 if test "$hardcode_automatic" = yes ; then
Chris@4 7515 relink_command=
Chris@4 7516 fi
Chris@4 7517
Chris@4 7518 # Only create the output if not a dry run.
Chris@4 7519 $opt_dry_run || {
Chris@4 7520 for installed in no yes; do
Chris@4 7521 if test "$installed" = yes; then
Chris@4 7522 if test -z "$install_libdir"; then
Chris@4 7523 break
Chris@4 7524 fi
Chris@4 7525 output="$output_objdir/$outputname"i
Chris@4 7526 # Replace all uninstalled libtool libraries with the installed ones
Chris@4 7527 newdependency_libs=
Chris@4 7528 for deplib in $dependency_libs; do
Chris@4 7529 case $deplib in
Chris@4 7530 *.la)
Chris@4 7531 func_basename "$deplib"
Chris@4 7532 name="$func_basename_result"
Chris@4 7533 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
Chris@4 7534 test -z "$libdir" && \
Chris@4 7535 func_fatal_error "\`$deplib' is not a valid libtool archive"
Chris@4 7536 newdependency_libs="$newdependency_libs $libdir/$name"
Chris@4 7537 ;;
Chris@4 7538 *) newdependency_libs="$newdependency_libs $deplib" ;;
Chris@4 7539 esac
Chris@4 7540 done
Chris@4 7541 dependency_libs="$newdependency_libs"
Chris@4 7542 newdlfiles=
Chris@4 7543
Chris@4 7544 for lib in $dlfiles; do
Chris@4 7545 case $lib in
Chris@4 7546 *.la)
Chris@4 7547 func_basename "$lib"
Chris@4 7548 name="$func_basename_result"
Chris@4 7549 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
Chris@4 7550 test -z "$libdir" && \
Chris@4 7551 func_fatal_error "\`$lib' is not a valid libtool archive"
Chris@4 7552 newdlfiles="$newdlfiles $libdir/$name"
Chris@4 7553 ;;
Chris@4 7554 *) newdlfiles="$newdlfiles $lib" ;;
Chris@4 7555 esac
Chris@4 7556 done
Chris@4 7557 dlfiles="$newdlfiles"
Chris@4 7558 newdlprefiles=
Chris@4 7559 for lib in $dlprefiles; do
Chris@4 7560 case $lib in
Chris@4 7561 *.la)
Chris@4 7562 # Only pass preopened files to the pseudo-archive (for
Chris@4 7563 # eventual linking with the app. that links it) if we
Chris@4 7564 # didn't already link the preopened objects directly into
Chris@4 7565 # the library:
Chris@4 7566 func_basename "$lib"
Chris@4 7567 name="$func_basename_result"
Chris@4 7568 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
Chris@4 7569 test -z "$libdir" && \
Chris@4 7570 func_fatal_error "\`$lib' is not a valid libtool archive"
Chris@4 7571 newdlprefiles="$newdlprefiles $libdir/$name"
Chris@4 7572 ;;
Chris@4 7573 esac
Chris@4 7574 done
Chris@4 7575 dlprefiles="$newdlprefiles"
Chris@4 7576 else
Chris@4 7577 newdlfiles=
Chris@4 7578 for lib in $dlfiles; do
Chris@4 7579 case $lib in
Chris@4 7580 [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
Chris@4 7581 *) abs=`pwd`"/$lib" ;;
Chris@4 7582 esac
Chris@4 7583 newdlfiles="$newdlfiles $abs"
Chris@4 7584 done
Chris@4 7585 dlfiles="$newdlfiles"
Chris@4 7586 newdlprefiles=
Chris@4 7587 for lib in $dlprefiles; do
Chris@4 7588 case $lib in
Chris@4 7589 [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
Chris@4 7590 *) abs=`pwd`"/$lib" ;;
Chris@4 7591 esac
Chris@4 7592 newdlprefiles="$newdlprefiles $abs"
Chris@4 7593 done
Chris@4 7594 dlprefiles="$newdlprefiles"
Chris@4 7595 fi
Chris@4 7596 $RM $output
Chris@4 7597 # place dlname in correct position for cygwin
Chris@4 7598 tdlname=$dlname
Chris@4 7599 case $host,$output,$installed,$module,$dlname in
Chris@4 7600 *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
Chris@4 7601 esac
Chris@4 7602 $ECHO > $output "\
Chris@4 7603 # $outputname - a libtool library file
Chris@4 7604 # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
Chris@4 7605 #
Chris@4 7606 # Please DO NOT delete this file!
Chris@4 7607 # It is necessary for linking the library.
Chris@4 7608
Chris@4 7609 # The name that we can dlopen(3).
Chris@4 7610 dlname='$tdlname'
Chris@4 7611
Chris@4 7612 # Names of this library.
Chris@4 7613 library_names='$library_names'
Chris@4 7614
Chris@4 7615 # The name of the static archive.
Chris@4 7616 old_library='$old_library'
Chris@4 7617
Chris@4 7618 # Linker flags that can not go in dependency_libs.
Chris@4 7619 inherited_linker_flags='$new_inherited_linker_flags'
Chris@4 7620
Chris@4 7621 # Libraries that this one depends upon.
Chris@4 7622 dependency_libs='$dependency_libs'
Chris@4 7623
Chris@4 7624 # Names of additional weak libraries provided by this library
Chris@4 7625 weak_library_names='$weak_libs'
Chris@4 7626
Chris@4 7627 # Version information for $libname.
Chris@4 7628 current=$current
Chris@4 7629 age=$age
Chris@4 7630 revision=$revision
Chris@4 7631
Chris@4 7632 # Is this an already installed library?
Chris@4 7633 installed=$installed
Chris@4 7634
Chris@4 7635 # Should we warn about portability when linking against -modules?
Chris@4 7636 shouldnotlink=$module
Chris@4 7637
Chris@4 7638 # Files to dlopen/dlpreopen
Chris@4 7639 dlopen='$dlfiles'
Chris@4 7640 dlpreopen='$dlprefiles'
Chris@4 7641
Chris@4 7642 # Directory that this library needs to be installed in:
Chris@4 7643 libdir='$install_libdir'"
Chris@4 7644 if test "$installed" = no && test "$need_relink" = yes; then
Chris@4 7645 $ECHO >> $output "\
Chris@4 7646 relink_command=\"$relink_command\""
Chris@4 7647 fi
Chris@4 7648 done
Chris@4 7649 }
Chris@4 7650
Chris@4 7651 # Do a symbolic link so that the libtool archive can be found in
Chris@4 7652 # LD_LIBRARY_PATH before the program is installed.
Chris@4 7653 func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
Chris@4 7654 ;;
Chris@4 7655 esac
Chris@4 7656 exit $EXIT_SUCCESS
Chris@4 7657 }
Chris@4 7658
Chris@4 7659 { test "$mode" = link || test "$mode" = relink; } &&
Chris@4 7660 func_mode_link ${1+"$@"}
Chris@4 7661
Chris@4 7662
Chris@4 7663 # func_mode_uninstall arg...
Chris@4 7664 func_mode_uninstall ()
Chris@4 7665 {
Chris@4 7666 $opt_debug
Chris@4 7667 RM="$nonopt"
Chris@4 7668 files=
Chris@4 7669 rmforce=
Chris@4 7670 exit_status=0
Chris@4 7671
Chris@4 7672 # This variable tells wrapper scripts just to set variables rather
Chris@4 7673 # than running their programs.
Chris@4 7674 libtool_install_magic="$magic"
Chris@4 7675
Chris@4 7676 for arg
Chris@4 7677 do
Chris@4 7678 case $arg in
Chris@4 7679 -f) RM="$RM $arg"; rmforce=yes ;;
Chris@4 7680 -*) RM="$RM $arg" ;;
Chris@4 7681 *) files="$files $arg" ;;
Chris@4 7682 esac
Chris@4 7683 done
Chris@4 7684
Chris@4 7685 test -z "$RM" && \
Chris@4 7686 func_fatal_help "you must specify an RM program"
Chris@4 7687
Chris@4 7688 rmdirs=
Chris@4 7689
Chris@4 7690 origobjdir="$objdir"
Chris@4 7691 for file in $files; do
Chris@4 7692 func_dirname "$file" "" "."
Chris@4 7693 dir="$func_dirname_result"
Chris@4 7694 if test "X$dir" = X.; then
Chris@4 7695 objdir="$origobjdir"
Chris@4 7696 else
Chris@4 7697 objdir="$dir/$origobjdir"
Chris@4 7698 fi
Chris@4 7699 func_basename "$file"
Chris@4 7700 name="$func_basename_result"
Chris@4 7701 test "$mode" = uninstall && objdir="$dir"
Chris@4 7702
Chris@4 7703 # Remember objdir for removal later, being careful to avoid duplicates
Chris@4 7704 if test "$mode" = clean; then
Chris@4 7705 case " $rmdirs " in
Chris@4 7706 *" $objdir "*) ;;
Chris@4 7707 *) rmdirs="$rmdirs $objdir" ;;
Chris@4 7708 esac
Chris@4 7709 fi
Chris@4 7710
Chris@4 7711 # Don't error if the file doesn't exist and rm -f was used.
Chris@4 7712 if { test -L "$file"; } >/dev/null 2>&1 ||
Chris@4 7713 { test -h "$file"; } >/dev/null 2>&1 ||
Chris@4 7714 test -f "$file"; then
Chris@4 7715 :
Chris@4 7716 elif test -d "$file"; then
Chris@4 7717 exit_status=1
Chris@4 7718 continue
Chris@4 7719 elif test "$rmforce" = yes; then
Chris@4 7720 continue
Chris@4 7721 fi
Chris@4 7722
Chris@4 7723 rmfiles="$file"
Chris@4 7724
Chris@4 7725 case $name in
Chris@4 7726 *.la)
Chris@4 7727 # Possibly a libtool archive, so verify it.
Chris@4 7728 if func_lalib_p "$file"; then
Chris@4 7729 func_source $dir/$name
Chris@4 7730
Chris@4 7731 # Delete the libtool libraries and symlinks.
Chris@4 7732 for n in $library_names; do
Chris@4 7733 rmfiles="$rmfiles $objdir/$n"
Chris@4 7734 done
Chris@4 7735 test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
Chris@4 7736
Chris@4 7737 case "$mode" in
Chris@4 7738 clean)
Chris@4 7739 case " $library_names " in
Chris@4 7740 # " " in the beginning catches empty $dlname
Chris@4 7741 *" $dlname "*) ;;
Chris@4 7742 *) rmfiles="$rmfiles $objdir/$dlname" ;;
Chris@4 7743 esac
Chris@4 7744 test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
Chris@4 7745 ;;
Chris@4 7746 uninstall)
Chris@4 7747 if test -n "$library_names"; then
Chris@4 7748 # Do each command in the postuninstall commands.
Chris@4 7749 func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
Chris@4 7750 fi
Chris@4 7751
Chris@4 7752 if test -n "$old_library"; then
Chris@4 7753 # Do each command in the old_postuninstall commands.
Chris@4 7754 func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
Chris@4 7755 fi
Chris@4 7756 # FIXME: should reinstall the best remaining shared library.
Chris@4 7757 ;;
Chris@4 7758 esac
Chris@4 7759 fi
Chris@4 7760 ;;
Chris@4 7761
Chris@4 7762 *.lo)
Chris@4 7763 # Possibly a libtool object, so verify it.
Chris@4 7764 if func_lalib_p "$file"; then
Chris@4 7765
Chris@4 7766 # Read the .lo file
Chris@4 7767 func_source $dir/$name
Chris@4 7768
Chris@4 7769 # Add PIC object to the list of files to remove.
Chris@4 7770 if test -n "$pic_object" &&
Chris@4 7771 test "$pic_object" != none; then
Chris@4 7772 rmfiles="$rmfiles $dir/$pic_object"
Chris@4 7773 fi
Chris@4 7774
Chris@4 7775 # Add non-PIC object to the list of files to remove.
Chris@4 7776 if test -n "$non_pic_object" &&
Chris@4 7777 test "$non_pic_object" != none; then
Chris@4 7778 rmfiles="$rmfiles $dir/$non_pic_object"
Chris@4 7779 fi
Chris@4 7780 fi
Chris@4 7781 ;;
Chris@4 7782
Chris@4 7783 *)
Chris@4 7784 if test "$mode" = clean ; then
Chris@4 7785 noexename=$name
Chris@4 7786 case $file in
Chris@4 7787 *.exe)
Chris@4 7788 func_stripname '' '.exe' "$file"
Chris@4 7789 file=$func_stripname_result
Chris@4 7790 func_stripname '' '.exe' "$name"
Chris@4 7791 noexename=$func_stripname_result
Chris@4 7792 # $file with .exe has already been added to rmfiles,
Chris@4 7793 # add $file without .exe
Chris@4 7794 rmfiles="$rmfiles $file"
Chris@4 7795 ;;
Chris@4 7796 esac
Chris@4 7797 # Do a test to see if this is a libtool program.
Chris@4 7798 if func_ltwrapper_p "$file"; then
Chris@4 7799 if func_ltwrapper_executable_p "$file"; then
Chris@4 7800 func_ltwrapper_scriptname "$file"
Chris@4 7801 relink_command=
Chris@4 7802 func_source $func_ltwrapper_scriptname_result
Chris@4 7803 rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
Chris@4 7804 else
Chris@4 7805 relink_command=
Chris@4 7806 func_source $dir/$noexename
Chris@4 7807 fi
Chris@4 7808
Chris@4 7809 # note $name still contains .exe if it was in $file originally
Chris@4 7810 # as does the version of $file that was added into $rmfiles
Chris@4 7811 rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
Chris@4 7812 if test "$fast_install" = yes && test -n "$relink_command"; then
Chris@4 7813 rmfiles="$rmfiles $objdir/lt-$name"
Chris@4 7814 fi
Chris@4 7815 if test "X$noexename" != "X$name" ; then
Chris@4 7816 rmfiles="$rmfiles $objdir/lt-${noexename}.c"
Chris@4 7817 fi
Chris@4 7818 fi
Chris@4 7819 fi
Chris@4 7820 ;;
Chris@4 7821 esac
Chris@4 7822 func_show_eval "$RM $rmfiles" 'exit_status=1'
Chris@4 7823 done
Chris@4 7824 objdir="$origobjdir"
Chris@4 7825
Chris@4 7826 # Try to remove the ${objdir}s in the directories where we deleted files
Chris@4 7827 for dir in $rmdirs; do
Chris@4 7828 if test -d "$dir"; then
Chris@4 7829 func_show_eval "rmdir $dir >/dev/null 2>&1"
Chris@4 7830 fi
Chris@4 7831 done
Chris@4 7832
Chris@4 7833 exit $exit_status
Chris@4 7834 }
Chris@4 7835
Chris@4 7836 { test "$mode" = uninstall || test "$mode" = clean; } &&
Chris@4 7837 func_mode_uninstall ${1+"$@"}
Chris@4 7838
Chris@4 7839 test -z "$mode" && {
Chris@4 7840 help="$generic_help"
Chris@4 7841 func_fatal_help "you must specify a MODE"
Chris@4 7842 }
Chris@4 7843
Chris@4 7844 test -z "$exec_cmd" && \
Chris@4 7845 func_fatal_help "invalid operation mode \`$mode'"
Chris@4 7846
Chris@4 7847 if test -n "$exec_cmd"; then
Chris@4 7848 eval exec "$exec_cmd"
Chris@4 7849 exit $EXIT_FAILURE
Chris@4 7850 fi
Chris@4 7851
Chris@4 7852 exit $exit_status
Chris@4 7853
Chris@4 7854
Chris@4 7855 # The TAGs below are defined such that we never get into a situation
Chris@4 7856 # in which we disable both kinds of libraries. Given conflicting
Chris@4 7857 # choices, we go for a static library, that is the most portable,
Chris@4 7858 # since we can't tell whether shared libraries were disabled because
Chris@4 7859 # the user asked for that or because the platform doesn't support
Chris@4 7860 # them. This is particularly important on AIX, because we don't
Chris@4 7861 # support having both static and shared libraries enabled at the same
Chris@4 7862 # time on that platform, so we default to a shared-only configuration.
Chris@4 7863 # If a disable-shared tag is given, we'll fallback to a static-only
Chris@4 7864 # configuration. But we'll never go from static-only to shared-only.
Chris@4 7865
Chris@4 7866 # ### BEGIN LIBTOOL TAG CONFIG: disable-shared
Chris@4 7867 build_libtool_libs=no
Chris@4 7868 build_old_libs=yes
Chris@4 7869 # ### END LIBTOOL TAG CONFIG: disable-shared
Chris@4 7870
Chris@4 7871 # ### BEGIN LIBTOOL TAG CONFIG: disable-static
Chris@4 7872 build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
Chris@4 7873 # ### END LIBTOOL TAG CONFIG: disable-static
Chris@4 7874
Chris@4 7875 # Local Variables:
Chris@4 7876 # mode:shell-script
Chris@4 7877 # sh-indentation:2
Chris@4 7878 # End:
Chris@4 7879 # vi:sw=2
Chris@4 7880