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