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