1289166Speter 2289166Speter# libtool (GNU libtool) 2.4.2 3289166Speter# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 4289166Speter 5251883Speter# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 6289166Speter# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 7289166Speter# This is free software; see the source for copying conditions. There is NO 8289166Speter# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9289166Speter 10289166Speter# GNU Libtool is free software; you can redistribute it and/or modify 11251883Speter# it under the terms of the GNU General Public License as published by 12251883Speter# the Free Software Foundation; either version 2 of the License, or 13251883Speter# (at your option) any later version. 14251883Speter# 15289166Speter# As a special exception to the GNU General Public License, 16289166Speter# if you distribute this file as part of a program or library that 17289166Speter# is built using GNU Libtool, you may include this file under the 18289166Speter# same distribution terms that you use for the rest of that program. 19289166Speter# 20289166Speter# GNU Libtool is distributed in the hope that it will be useful, but 21251883Speter# WITHOUT ANY WARRANTY; without even the implied warranty of 22251883Speter# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23251883Speter# General Public License for more details. 24251883Speter# 25251883Speter# You should have received a copy of the GNU General Public License 26289166Speter# along with GNU Libtool; see the file COPYING. If not, a copy 27289166Speter# can be downloaded from http://www.gnu.org/licenses/gpl.html, 28289166Speter# or obtained by writing to the Free Software Foundation, Inc., 29289166Speter# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 30289166Speter 31289166Speter# Usage: $progname [OPTION]... [MODE-ARG]... 32251883Speter# 33289166Speter# Provide generalized library-building support services. 34289166Speter# 35289166Speter# --config show all configuration variables 36289166Speter# --debug enable verbose shell tracing 37289166Speter# -n, --dry-run display commands without modifying any files 38289166Speter# --features display basic configuration information and exit 39289166Speter# --mode=MODE use operation mode MODE 40289166Speter# --preserve-dup-deps don't remove duplicate dependency libraries 41289166Speter# --quiet, --silent don't print informational messages 42289166Speter# --no-quiet, --no-silent 43289166Speter# print informational messages (default) 44289166Speter# --no-warn don't display warning messages 45289166Speter# --tag=TAG use configuration variables from tag TAG 46289166Speter# -v, --verbose print more informational messages than default 47289166Speter# --no-verbose don't print the extra informational messages 48289166Speter# --version print version information 49289166Speter# -h, --help, --help-all print short, long, or detailed help message 50289166Speter# 51289166Speter# MODE must be one of the following: 52289166Speter# 53289166Speter# clean remove files from the build directory 54289166Speter# compile compile a source file into a libtool object 55289166Speter# execute automatically set library path, then run a program 56289166Speter# finish complete the installation of libtool libraries 57289166Speter# install install libraries or executables 58289166Speter# link create a library or an executable 59289166Speter# uninstall remove libraries from an installed directory 60289166Speter# 61289166Speter# MODE-ARGS vary depending on the MODE. When passed as first option, 62289166Speter# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 63289166Speter# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 64289166Speter# 65289166Speter# When reporting a bug, please describe a test case to reproduce it and 66289166Speter# include the following information: 67289166Speter# 68289166Speter# host-triplet: $host 69289166Speter# shell: $SHELL 70289166Speter# compiler: $LTCC 71289166Speter# compiler flags: $LTCFLAGS 72289166Speter# linker: $LD (gnu? $with_gnu_ld) 73289166Speter# $progname: (GNU libtool) 2.4.2 74289166Speter# automake: $automake_version 75289166Speter# autoconf: $autoconf_version 76289166Speter# 77289166Speter# Report bugs to <bug-libtool@gnu.org>. 78289166Speter# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 79289166Speter# General help using GNU software: <http://www.gnu.org/gethelp/>. 80251883Speter 81289166SpeterPROGRAM=libtool 82251883SpeterPACKAGE=libtool 83289166SpeterVERSION=2.4.2 84289166SpeterTIMESTAMP="" 85289166Speterpackage_revision=1.3337 86251883Speter 87289166Speter# Be Bourne compatible 88251883Speterif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 89251883Speter emulate sh 90251883Speter NULLCMD=: 91251883Speter # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 92251883Speter # is contrary to our usage. Disable this feature. 93251883Speter alias -g '${1+"$@"}'='"$@"' 94251883Speter setopt NO_GLOB_SUBST 95251883Speterelse 96251883Speter case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 97251883Speterfi 98251883SpeterBIN_SH=xpg4; export BIN_SH # for Tru64 99251883SpeterDUALCASE=1; export DUALCASE # for MKS sh 100251883Speter 101289166Speter# A function that is used when there is no print builtin or printf. 102289166Speterfunc_fallback_echo () 103289166Speter{ 104289166Speter eval 'cat <<_LTECHO_EOF 105289166Speter$1 106289166Speter_LTECHO_EOF' 107289166Speter} 108251883Speter 109289166Speter# NLS nuisances: We save the old values to restore during execute mode. 110289166Speterlt_user_locale= 111289166Speterlt_safe_locale= 112289166Speterfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 113251883Speterdo 114251883Speter eval "if test \"\${$lt_var+set}\" = set; then 115289166Speter save_$lt_var=\$$lt_var 116289166Speter $lt_var=C 117251883Speter export $lt_var 118289166Speter lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 119289166Speter lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 120251883Speter fi" 121251883Speterdone 122289166SpeterLC_ALL=C 123289166SpeterLANGUAGE=C 124289166Speterexport LANGUAGE LC_ALL 125251883Speter 126289166Speter$lt_unset CDPATH 127289166Speter 128289166Speter 129289166Speter# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 130289166Speter# is ksh but when the shell is invoked as "sh" and the current value of 131289166Speter# the _XPG environment variable is not equal to 1 (one), the special 132289166Speter# positional parameter $0, within a function call, is the name of the 133289166Speter# function. 134289166Speterprogpath="$0" 135289166Speter 136289166Speter 137289166Speter 138289166Speter: ${CP="cp -f"} 139289166Spetertest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 140289166Speter: ${MAKE="make"} 141289166Speter: ${MKDIR="mkdir"} 142289166Speter: ${MV="mv -f"} 143289166Speter: ${RM="rm -f"} 144289166Speter: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 145289166Speter: ${Xsed="$SED -e 1s/^X//"} 146289166Speter 147289166Speter# Global variables: 148289166SpeterEXIT_SUCCESS=0 149289166SpeterEXIT_FAILURE=1 150289166SpeterEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 151289166SpeterEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 152289166Speter 153289166Speterexit_status=$EXIT_SUCCESS 154289166Speter 155251883Speter# Make sure IFS has a sensible default 156251883Speterlt_nl=' 157251883Speter' 158251883SpeterIFS=" $lt_nl" 159251883Speter 160289166Speterdirname="s,/[^/]*$,," 161289166Speterbasename="s,^.*/,," 162251883Speter 163289166Speter# func_dirname file append nondir_replacement 164289166Speter# Compute the dirname of FILE. If nonempty, add APPEND to the result, 165289166Speter# otherwise set result to NONDIR_REPLACEMENT. 166289166Speterfunc_dirname () 167289166Speter{ 168289166Speter func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 169289166Speter if test "X$func_dirname_result" = "X${1}"; then 170289166Speter func_dirname_result="${3}" 171289166Speter else 172289166Speter func_dirname_result="$func_dirname_result${2}" 173289166Speter fi 174289166Speter} # func_dirname may be replaced by extended shell implementation 175251883Speter 176251883Speter 177289166Speter# func_basename file 178289166Speterfunc_basename () 179289166Speter{ 180289166Speter func_basename_result=`$ECHO "${1}" | $SED "$basename"` 181289166Speter} # func_basename may be replaced by extended shell implementation 182289166Speter 183289166Speter 184289166Speter# func_dirname_and_basename file append nondir_replacement 185289166Speter# perform func_basename and func_dirname in a single function 186289166Speter# call: 187289166Speter# dirname: Compute the dirname of FILE. If nonempty, 188289166Speter# add APPEND to the result, otherwise set result 189289166Speter# to NONDIR_REPLACEMENT. 190289166Speter# value returned in "$func_dirname_result" 191289166Speter# basename: Compute filename of FILE. 192289166Speter# value retuned in "$func_basename_result" 193289166Speter# Implementation must be kept synchronized with func_dirname 194289166Speter# and func_basename. For efficiency, we do not delegate to 195289166Speter# those functions but instead duplicate the functionality here. 196289166Speterfunc_dirname_and_basename () 197289166Speter{ 198289166Speter # Extract subdirectory from the argument. 199289166Speter func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 200289166Speter if test "X$func_dirname_result" = "X${1}"; then 201289166Speter func_dirname_result="${3}" 202289166Speter else 203289166Speter func_dirname_result="$func_dirname_result${2}" 204289166Speter fi 205289166Speter func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 206289166Speter} # func_dirname_and_basename may be replaced by extended shell implementation 207289166Speter 208289166Speter 209289166Speter# func_stripname prefix suffix name 210289166Speter# strip PREFIX and SUFFIX off of NAME. 211289166Speter# PREFIX and SUFFIX must not contain globbing or regex special 212289166Speter# characters, hashes, percent signs, but SUFFIX may contain a leading 213289166Speter# dot (in which case that matches only a dot). 214289166Speter# func_strip_suffix prefix name 215289166Speterfunc_stripname () 216289166Speter{ 217289166Speter case ${2} in 218289166Speter .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 219289166Speter *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 220289166Speter esac 221289166Speter} # func_stripname may be replaced by extended shell implementation 222289166Speter 223289166Speter 224289166Speter# These SED scripts presuppose an absolute path with a trailing slash. 225289166Speterpathcar='s,^/\([^/]*\).*$,\1,' 226289166Speterpathcdr='s,^/[^/]*,,' 227289166Speterremovedotparts=':dotsl 228289166Speter s@/\./@/@g 229289166Speter t dotsl 230289166Speter s,/\.$,/,' 231289166Spetercollapseslashes='s@/\{1,\}@/@g' 232289166Speterfinalslash='s,/*$,/,' 233289166Speter 234289166Speter# func_normal_abspath PATH 235289166Speter# Remove doubled-up and trailing slashes, "." path components, 236289166Speter# and cancel out any ".." path components in PATH after making 237289166Speter# it an absolute path. 238289166Speter# value returned in "$func_normal_abspath_result" 239289166Speterfunc_normal_abspath () 240289166Speter{ 241289166Speter # Start from root dir and reassemble the path. 242289166Speter func_normal_abspath_result= 243289166Speter func_normal_abspath_tpath=$1 244289166Speter func_normal_abspath_altnamespace= 245289166Speter case $func_normal_abspath_tpath in 246289166Speter "") 247289166Speter # Empty path, that just means $cwd. 248289166Speter func_stripname '' '/' "`pwd`" 249289166Speter func_normal_abspath_result=$func_stripname_result 250289166Speter return 251289166Speter ;; 252289166Speter # The next three entries are used to spot a run of precisely 253289166Speter # two leading slashes without using negated character classes; 254289166Speter # we take advantage of case's first-match behaviour. 255289166Speter ///*) 256289166Speter # Unusual form of absolute path, do nothing. 257289166Speter ;; 258289166Speter //*) 259289166Speter # Not necessarily an ordinary path; POSIX reserves leading '//' 260289166Speter # and for example Cygwin uses it to access remote file shares 261289166Speter # over CIFS/SMB, so we conserve a leading double slash if found. 262289166Speter func_normal_abspath_altnamespace=/ 263289166Speter ;; 264289166Speter /*) 265289166Speter # Absolute path, do nothing. 266289166Speter ;; 267289166Speter *) 268289166Speter # Relative path, prepend $cwd. 269289166Speter func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 270289166Speter ;; 271289166Speter esac 272289166Speter # Cancel out all the simple stuff to save iterations. We also want 273289166Speter # the path to end with a slash for ease of parsing, so make sure 274289166Speter # there is one (and only one) here. 275289166Speter func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 276289166Speter -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 277289166Speter while :; do 278289166Speter # Processed it all yet? 279289166Speter if test "$func_normal_abspath_tpath" = / ; then 280289166Speter # If we ascended to the root using ".." the result may be empty now. 281289166Speter if test -z "$func_normal_abspath_result" ; then 282289166Speter func_normal_abspath_result=/ 283289166Speter fi 284289166Speter break 285289166Speter fi 286289166Speter func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 287289166Speter -e "$pathcar"` 288289166Speter func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 289289166Speter -e "$pathcdr"` 290289166Speter # Figure out what to do with it 291289166Speter case $func_normal_abspath_tcomponent in 292289166Speter "") 293289166Speter # Trailing empty path component, ignore it. 294289166Speter ;; 295289166Speter ..) 296289166Speter # Parent dir; strip last assembled component from result. 297289166Speter func_dirname "$func_normal_abspath_result" 298289166Speter func_normal_abspath_result=$func_dirname_result 299289166Speter ;; 300289166Speter *) 301289166Speter # Actual path component, append it. 302289166Speter func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 303289166Speter ;; 304289166Speter esac 305289166Speter done 306289166Speter # Restore leading double-slash if one was found on entry. 307289166Speter func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 308289166Speter} 309289166Speter 310289166Speter# func_relative_path SRCDIR DSTDIR 311289166Speter# generates a relative path from SRCDIR to DSTDIR, with a trailing 312289166Speter# slash if non-empty, suitable for immediately appending a filename 313289166Speter# without needing to append a separator. 314289166Speter# value returned in "$func_relative_path_result" 315289166Speterfunc_relative_path () 316289166Speter{ 317289166Speter func_relative_path_result= 318289166Speter func_normal_abspath "$1" 319289166Speter func_relative_path_tlibdir=$func_normal_abspath_result 320289166Speter func_normal_abspath "$2" 321289166Speter func_relative_path_tbindir=$func_normal_abspath_result 322289166Speter 323289166Speter # Ascend the tree starting from libdir 324289166Speter while :; do 325289166Speter # check if we have found a prefix of bindir 326289166Speter case $func_relative_path_tbindir in 327289166Speter $func_relative_path_tlibdir) 328289166Speter # found an exact match 329289166Speter func_relative_path_tcancelled= 330289166Speter break 331289166Speter ;; 332289166Speter $func_relative_path_tlibdir*) 333289166Speter # found a matching prefix 334289166Speter func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 335289166Speter func_relative_path_tcancelled=$func_stripname_result 336289166Speter if test -z "$func_relative_path_result"; then 337289166Speter func_relative_path_result=. 338289166Speter fi 339289166Speter break 340289166Speter ;; 341289166Speter *) 342289166Speter func_dirname $func_relative_path_tlibdir 343289166Speter func_relative_path_tlibdir=${func_dirname_result} 344289166Speter if test "x$func_relative_path_tlibdir" = x ; then 345289166Speter # Have to descend all the way to the root! 346289166Speter func_relative_path_result=../$func_relative_path_result 347289166Speter func_relative_path_tcancelled=$func_relative_path_tbindir 348289166Speter break 349289166Speter fi 350289166Speter func_relative_path_result=../$func_relative_path_result 351289166Speter ;; 352289166Speter esac 353289166Speter done 354289166Speter 355289166Speter # Now calculate path; take care to avoid doubling-up slashes. 356289166Speter func_stripname '' '/' "$func_relative_path_result" 357289166Speter func_relative_path_result=$func_stripname_result 358289166Speter func_stripname '/' '/' "$func_relative_path_tcancelled" 359289166Speter if test "x$func_stripname_result" != x ; then 360289166Speter func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 361289166Speter fi 362289166Speter 363289166Speter # Normalisation. If bindir is libdir, return empty string, 364289166Speter # else relative path ending with a slash; either way, target 365289166Speter # file name can be directly appended. 366289166Speter if test ! -z "$func_relative_path_result"; then 367289166Speter func_stripname './' '' "$func_relative_path_result/" 368289166Speter func_relative_path_result=$func_stripname_result 369289166Speter fi 370289166Speter} 371289166Speter 372289166Speter# The name of this program: 373289166Speterfunc_dirname_and_basename "$progpath" 374289166Speterprogname=$func_basename_result 375289166Speter 376289166Speter# Make sure we have an absolute path for reexecution: 377289166Spetercase $progpath in 378289166Speter [\\/]*|[A-Za-z]:\\*) ;; 379289166Speter *[\\/]*) 380289166Speter progdir=$func_dirname_result 381289166Speter progdir=`cd "$progdir" && pwd` 382289166Speter progpath="$progdir/$progname" 383289166Speter ;; 384289166Speter *) 385289166Speter save_IFS="$IFS" 386289166Speter IFS=${PATH_SEPARATOR-:} 387289166Speter for progdir in $PATH; do 388289166Speter IFS="$save_IFS" 389289166Speter test -x "$progdir/$progname" && break 390289166Speter done 391289166Speter IFS="$save_IFS" 392289166Speter test -n "$progdir" || progdir=`pwd` 393289166Speter progpath="$progdir/$progname" 394289166Speter ;; 395289166Speteresac 396289166Speter 397289166Speter# Sed substitution that helps us do robust quoting. It backslashifies 398289166Speter# metacharacters that are still active within double-quoted strings. 399289166SpeterXsed="${SED}"' -e 1s/^X//' 400289166Spetersed_quote_subst='s/\([`"$\\]\)/\\\1/g' 401289166Speter 402289166Speter# Same as above, but do not quote variable references. 403289166Speterdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 404289166Speter 405289166Speter# Sed substitution that turns a string into a regex matching for the 406289166Speter# string literally. 407289166Spetersed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 408289166Speter 409289166Speter# Sed substitution that converts a w32 file name or path 410289166Speter# which contains forward slashes, into one that contains 411289166Speter# (escaped) backslashes. A very naive implementation. 412289166Speterlt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 413289166Speter 414289166Speter# Re-`\' parameter expansions in output of double_quote_subst that were 415289166Speter# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 416289166Speter# in input to double_quote_subst, that '$' was protected from expansion. 417289166Speter# Since each input `\' is now two `\'s, look for any number of runs of 418289166Speter# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 419289166Speterbs='\\' 420289166Speterbs2='\\\\' 421289166Speterbs4='\\\\\\\\' 422289166Speterdollar='\$' 423289166Spetersed_double_backslash="\ 424289166Speter s/$bs4/&\\ 425289166Speter/g 426289166Speter s/^$bs2$dollar/$bs&/ 427289166Speter s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 428289166Speter s/\n//g" 429289166Speter 430289166Speter# Standard options: 431289166Speteropt_dry_run=false 432289166Speteropt_help=false 433289166Speteropt_quiet=false 434289166Speteropt_verbose=false 435289166Speteropt_warning=: 436289166Speter 437289166Speter# func_echo arg... 438289166Speter# Echo program name prefixed message, along with the current mode 439289166Speter# name if it has been set yet. 440289166Speterfunc_echo () 441289166Speter{ 442289166Speter $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 443289166Speter} 444289166Speter 445289166Speter# func_verbose arg... 446289166Speter# Echo program name prefixed message in verbose mode only. 447289166Speterfunc_verbose () 448289166Speter{ 449289166Speter $opt_verbose && func_echo ${1+"$@"} 450289166Speter 451289166Speter # A bug in bash halts the script if the last line of a function 452289166Speter # fails when set -e is in force, so we need another command to 453289166Speter # work around that: 454289166Speter : 455289166Speter} 456289166Speter 457289166Speter# func_echo_all arg... 458289166Speter# Invoke $ECHO with all args, space-separated. 459289166Speterfunc_echo_all () 460289166Speter{ 461289166Speter $ECHO "$*" 462289166Speter} 463289166Speter 464289166Speter# func_error arg... 465289166Speter# Echo program name prefixed message to standard error. 466289166Speterfunc_error () 467289166Speter{ 468289166Speter $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 469289166Speter} 470289166Speter 471289166Speter# func_warning arg... 472289166Speter# Echo program name prefixed warning message to standard error. 473289166Speterfunc_warning () 474289166Speter{ 475289166Speter $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 476289166Speter 477289166Speter # bash bug again: 478289166Speter : 479289166Speter} 480289166Speter 481289166Speter# func_fatal_error arg... 482289166Speter# Echo program name prefixed message to standard error, and exit. 483289166Speterfunc_fatal_error () 484289166Speter{ 485289166Speter func_error ${1+"$@"} 486289166Speter exit $EXIT_FAILURE 487289166Speter} 488289166Speter 489289166Speter# func_fatal_help arg... 490289166Speter# Echo program name prefixed message to standard error, followed by 491289166Speter# a help hint, and exit. 492289166Speterfunc_fatal_help () 493289166Speter{ 494289166Speter func_error ${1+"$@"} 495289166Speter func_fatal_error "$help" 496289166Speter} 497289166Speterhelp="Try \`$progname --help' for more information." ## default 498289166Speter 499289166Speter 500289166Speter# func_grep expression filename 501289166Speter# Check whether EXPRESSION matches any line of FILENAME, without output. 502289166Speterfunc_grep () 503289166Speter{ 504289166Speter $GREP "$1" "$2" >/dev/null 2>&1 505289166Speter} 506289166Speter 507289166Speter 508289166Speter# func_mkdir_p directory-path 509289166Speter# Make sure the entire path to DIRECTORY-PATH is available. 510289166Speterfunc_mkdir_p () 511289166Speter{ 512289166Speter my_directory_path="$1" 513289166Speter my_dir_list= 514289166Speter 515289166Speter if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 516289166Speter 517289166Speter # Protect directory names starting with `-' 518289166Speter case $my_directory_path in 519289166Speter -*) my_directory_path="./$my_directory_path" ;; 520289166Speter esac 521289166Speter 522289166Speter # While some portion of DIR does not yet exist... 523289166Speter while test ! -d "$my_directory_path"; do 524289166Speter # ...make a list in topmost first order. Use a colon delimited 525289166Speter # list incase some portion of path contains whitespace. 526289166Speter my_dir_list="$my_directory_path:$my_dir_list" 527289166Speter 528289166Speter # If the last portion added has no slash in it, the list is done 529289166Speter case $my_directory_path in */*) ;; *) break ;; esac 530289166Speter 531289166Speter # ...otherwise throw away the child directory and loop 532289166Speter my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 533289166Speter done 534289166Speter my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 535289166Speter 536289166Speter save_mkdir_p_IFS="$IFS"; IFS=':' 537289166Speter for my_dir in $my_dir_list; do 538289166Speter IFS="$save_mkdir_p_IFS" 539289166Speter # mkdir can fail with a `File exist' error if two processes 540289166Speter # try to create one of the directories concurrently. Don't 541289166Speter # stop in that case! 542289166Speter $MKDIR "$my_dir" 2>/dev/null || : 543289166Speter done 544289166Speter IFS="$save_mkdir_p_IFS" 545289166Speter 546289166Speter # Bail out if we (or some other process) failed to create a directory. 547289166Speter test -d "$my_directory_path" || \ 548289166Speter func_fatal_error "Failed to create \`$1'" 549289166Speter fi 550289166Speter} 551289166Speter 552289166Speter 553251883Speter# func_mktempdir [string] 554251883Speter# Make a temporary directory that won't clash with other running 555251883Speter# libtool processes, and avoids race conditions if possible. If 556251883Speter# given, STRING is the basename for that directory. 557251883Speterfunc_mktempdir () 558251883Speter{ 559251883Speter my_template="${TMPDIR-/tmp}/${1-$progname}" 560251883Speter 561289166Speter if test "$opt_dry_run" = ":"; then 562251883Speter # Return a directory name, but don't create it in dry-run mode 563251883Speter my_tmpdir="${my_template}-$$" 564251883Speter else 565251883Speter 566251883Speter # If mktemp works, use that first and foremost 567251883Speter my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 568251883Speter 569251883Speter if test ! -d "$my_tmpdir"; then 570289166Speter # Failing that, at least try and use $RANDOM to avoid a race 571289166Speter my_tmpdir="${my_template}-${RANDOM-0}$$" 572251883Speter 573289166Speter save_mktempdir_umask=`umask` 574289166Speter umask 0077 575289166Speter $MKDIR "$my_tmpdir" 576289166Speter umask $save_mktempdir_umask 577251883Speter fi 578251883Speter 579251883Speter # If we're not in dry-run mode, bomb out on failure 580289166Speter test -d "$my_tmpdir" || \ 581289166Speter func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 582251883Speter fi 583251883Speter 584289166Speter $ECHO "$my_tmpdir" 585251883Speter} 586251883Speter 587251883Speter 588289166Speter# func_quote_for_eval arg 589289166Speter# Aesthetically quote ARG to be evaled later. 590289166Speter# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 591289166Speter# is double-quoted, suitable for a subsequent eval, whereas 592289166Speter# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 593289166Speter# which are still active within double quotes backslashified. 594289166Speterfunc_quote_for_eval () 595251883Speter{ 596289166Speter case $1 in 597289166Speter *[\\\`\"\$]*) 598289166Speter func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 599289166Speter *) 600289166Speter func_quote_for_eval_unquoted_result="$1" ;; 601289166Speter esac 602289166Speter 603289166Speter case $func_quote_for_eval_unquoted_result in 604289166Speter # Double-quote args containing shell metacharacters to delay 605289166Speter # word splitting, command substitution and and variable 606289166Speter # expansion for a subsequent eval. 607289166Speter # Many Bourne shells cannot handle close brackets correctly 608289166Speter # in scan sets, so we specify it separately. 609289166Speter *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 610289166Speter func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 611289166Speter ;; 612289166Speter *) 613289166Speter func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 614289166Speter esac 615289166Speter} 616289166Speter 617289166Speter 618289166Speter# func_quote_for_expand arg 619289166Speter# Aesthetically quote ARG to be evaled later; same as above, 620289166Speter# but do not quote variable references. 621289166Speterfunc_quote_for_expand () 622289166Speter{ 623289166Speter case $1 in 624289166Speter *[\\\`\"]*) 625289166Speter my_arg=`$ECHO "$1" | $SED \ 626289166Speter -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 627289166Speter *) 628289166Speter my_arg="$1" ;; 629289166Speter esac 630289166Speter 631289166Speter case $my_arg in 632289166Speter # Double-quote args containing shell metacharacters to delay 633289166Speter # word splitting and command substitution for a subsequent eval. 634289166Speter # Many Bourne shells cannot handle close brackets correctly 635289166Speter # in scan sets, so we specify it separately. 636289166Speter *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 637289166Speter my_arg="\"$my_arg\"" 638289166Speter ;; 639289166Speter esac 640289166Speter 641289166Speter func_quote_for_expand_result="$my_arg" 642289166Speter} 643289166Speter 644289166Speter 645289166Speter# func_show_eval cmd [fail_exp] 646289166Speter# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 647289166Speter# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 648289166Speter# is given, then evaluate it. 649289166Speterfunc_show_eval () 650289166Speter{ 651289166Speter my_cmd="$1" 652289166Speter my_fail_exp="${2-:}" 653289166Speter 654289166Speter ${opt_silent-false} || { 655289166Speter func_quote_for_expand "$my_cmd" 656289166Speter eval "func_echo $func_quote_for_expand_result" 657289166Speter } 658289166Speter 659289166Speter if ${opt_dry_run-false}; then :; else 660289166Speter eval "$my_cmd" 661289166Speter my_status=$? 662289166Speter if test "$my_status" -eq 0; then :; else 663289166Speter eval "(exit $my_status); $my_fail_exp" 664289166Speter fi 665251883Speter fi 666289166Speter} 667289166Speter 668289166Speter 669289166Speter# func_show_eval_locale cmd [fail_exp] 670289166Speter# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 671289166Speter# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 672289166Speter# is given, then evaluate it. Use the saved locale for evaluation. 673289166Speterfunc_show_eval_locale () 674289166Speter{ 675289166Speter my_cmd="$1" 676289166Speter my_fail_exp="${2-:}" 677289166Speter 678289166Speter ${opt_silent-false} || { 679289166Speter func_quote_for_expand "$my_cmd" 680289166Speter eval "func_echo $func_quote_for_expand_result" 681289166Speter } 682289166Speter 683289166Speter if ${opt_dry_run-false}; then :; else 684289166Speter eval "$lt_user_locale 685289166Speter $my_cmd" 686289166Speter my_status=$? 687289166Speter eval "$lt_safe_locale" 688289166Speter if test "$my_status" -eq 0; then :; else 689289166Speter eval "(exit $my_status); $my_fail_exp" 690289166Speter fi 691289166Speter fi 692289166Speter} 693289166Speter 694289166Speter# func_tr_sh 695289166Speter# Turn $1 into a string suitable for a shell variable name. 696289166Speter# Result is stored in $func_tr_sh_result. All characters 697289166Speter# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 698289166Speter# if $1 begins with a digit, a '_' is prepended as well. 699289166Speterfunc_tr_sh () 700289166Speter{ 701289166Speter case $1 in 702289166Speter [0-9]* | *[!a-zA-Z0-9_]*) 703289166Speter func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 704251883Speter ;; 705289166Speter * ) 706289166Speter func_tr_sh_result=$1 707251883Speter ;; 708289166Speter esac 709289166Speter} 710289166Speter 711289166Speter 712289166Speter# func_version 713289166Speter# Echo version message to standard output and exit. 714289166Speterfunc_version () 715289166Speter{ 716289166Speter $opt_debug 717289166Speter 718289166Speter $SED -n '/(C)/!b go 719289166Speter :more 720289166Speter /\./!{ 721289166Speter N 722289166Speter s/\n# / / 723289166Speter b more 724289166Speter } 725289166Speter :go 726289166Speter /^# '$PROGRAM' (GNU /,/# warranty; / { 727289166Speter s/^# // 728289166Speter s/^# *$// 729289166Speter s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 730289166Speter p 731289166Speter }' < "$progpath" 732289166Speter exit $? 733289166Speter} 734289166Speter 735289166Speter# func_usage 736289166Speter# Echo short help message to standard output and exit. 737289166Speterfunc_usage () 738289166Speter{ 739289166Speter $opt_debug 740289166Speter 741289166Speter $SED -n '/^# Usage:/,/^# *.*--help/ { 742289166Speter s/^# // 743289166Speter s/^# *$// 744289166Speter s/\$progname/'$progname'/ 745289166Speter p 746289166Speter }' < "$progpath" 747289166Speter echo 748289166Speter $ECHO "run \`$progname --help | more' for full usage" 749289166Speter exit $? 750289166Speter} 751289166Speter 752289166Speter# func_help [NOEXIT] 753289166Speter# Echo long help message to standard output and exit, 754289166Speter# unless 'noexit' is passed as argument. 755289166Speterfunc_help () 756289166Speter{ 757289166Speter $opt_debug 758289166Speter 759289166Speter $SED -n '/^# Usage:/,/# Report bugs to/ { 760289166Speter :print 761289166Speter s/^# // 762289166Speter s/^# *$// 763289166Speter s*\$progname*'$progname'* 764289166Speter s*\$host*'"$host"'* 765289166Speter s*\$SHELL*'"$SHELL"'* 766289166Speter s*\$LTCC*'"$LTCC"'* 767289166Speter s*\$LTCFLAGS*'"$LTCFLAGS"'* 768289166Speter s*\$LD*'"$LD"'* 769289166Speter s/\$with_gnu_ld/'"$with_gnu_ld"'/ 770289166Speter s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ 771289166Speter s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ 772289166Speter p 773289166Speter d 774289166Speter } 775289166Speter /^# .* home page:/b print 776289166Speter /^# General help using/b print 777289166Speter ' < "$progpath" 778289166Speter ret=$? 779289166Speter if test -z "$1"; then 780289166Speter exit $ret 781289166Speter fi 782289166Speter} 783289166Speter 784289166Speter# func_missing_arg argname 785289166Speter# Echo program name prefixed message to standard error and set global 786289166Speter# exit_cmd. 787289166Speterfunc_missing_arg () 788289166Speter{ 789289166Speter $opt_debug 790289166Speter 791289166Speter func_error "missing argument for $1." 792289166Speter exit_cmd=exit 793289166Speter} 794289166Speter 795289166Speter 796289166Speter# func_split_short_opt shortopt 797289166Speter# Set func_split_short_opt_name and func_split_short_opt_arg shell 798289166Speter# variables after splitting SHORTOPT after the 2nd character. 799289166Speterfunc_split_short_opt () 800289166Speter{ 801289166Speter my_sed_short_opt='1s/^\(..\).*$/\1/;q' 802289166Speter my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 803289166Speter 804289166Speter func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 805289166Speter func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 806289166Speter} # func_split_short_opt may be replaced by extended shell implementation 807289166Speter 808289166Speter 809289166Speter# func_split_long_opt longopt 810289166Speter# Set func_split_long_opt_name and func_split_long_opt_arg shell 811289166Speter# variables after splitting LONGOPT at the `=' sign. 812289166Speterfunc_split_long_opt () 813289166Speter{ 814289166Speter my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 815289166Speter my_sed_long_arg='1s/^--[^=]*=//' 816289166Speter 817289166Speter func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 818289166Speter func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 819289166Speter} # func_split_long_opt may be replaced by extended shell implementation 820289166Speter 821289166Speterexit_cmd=: 822289166Speter 823289166Speter 824289166Speter 825289166Speter 826289166Speter 827289166Spetermagic="%%%MAGIC variable%%%" 828289166Spetermagic_exe="%%%MAGIC EXE variable%%%" 829289166Speter 830289166Speter# Global variables. 831289166Speternonopt= 832289166Speterpreserve_args= 833289166Speterlo2o="s/\\.lo\$/.${objext}/" 834289166Spetero2lo="s/\\.${objext}\$/.lo/" 835289166Speterextracted_archives= 836289166Speterextracted_serial=0 837289166Speter 838289166Speter# If this variable is set in any of the actions, the command in it 839289166Speter# will be execed at the end. This prevents here-documents from being 840289166Speter# left over by shells. 841289166Speterexec_cmd= 842289166Speter 843289166Speter# func_append var value 844289166Speter# Append VALUE to the end of shell variable VAR. 845289166Speterfunc_append () 846289166Speter{ 847289166Speter eval "${1}=\$${1}\${2}" 848289166Speter} # func_append may be replaced by extended shell implementation 849289166Speter 850289166Speter# func_append_quoted var value 851289166Speter# Quote VALUE and append to the end of shell variable VAR, separated 852289166Speter# by a space. 853289166Speterfunc_append_quoted () 854289166Speter{ 855289166Speter func_quote_for_eval "${2}" 856289166Speter eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 857289166Speter} # func_append_quoted may be replaced by extended shell implementation 858289166Speter 859289166Speter 860289166Speter# func_arith arithmetic-term... 861289166Speterfunc_arith () 862289166Speter{ 863289166Speter func_arith_result=`expr "${@}"` 864289166Speter} # func_arith may be replaced by extended shell implementation 865289166Speter 866289166Speter 867289166Speter# func_len string 868289166Speter# STRING may not start with a hyphen. 869289166Speterfunc_len () 870289166Speter{ 871289166Speter func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 872289166Speter} # func_len may be replaced by extended shell implementation 873289166Speter 874289166Speter 875289166Speter# func_lo2o object 876289166Speterfunc_lo2o () 877289166Speter{ 878289166Speter func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 879289166Speter} # func_lo2o may be replaced by extended shell implementation 880289166Speter 881289166Speter 882289166Speter# func_xform libobj-or-source 883289166Speterfunc_xform () 884289166Speter{ 885289166Speter func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 886289166Speter} # func_xform may be replaced by extended shell implementation 887289166Speter 888289166Speter 889289166Speter# func_fatal_configuration arg... 890289166Speter# Echo program name prefixed message to standard error, followed by 891289166Speter# a configuration failure hint, and exit. 892289166Speterfunc_fatal_configuration () 893289166Speter{ 894289166Speter func_error ${1+"$@"} 895289166Speter func_error "See the $PACKAGE documentation for more information." 896289166Speter func_fatal_error "Fatal configuration error." 897289166Speter} 898289166Speter 899289166Speter 900289166Speter# func_config 901289166Speter# Display the configuration for all the tags in this script. 902289166Speterfunc_config () 903289166Speter{ 904289166Speter re_begincf='^# ### BEGIN LIBTOOL' 905289166Speter re_endcf='^# ### END LIBTOOL' 906289166Speter 907289166Speter # Default configuration. 908289166Speter $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 909289166Speter 910289166Speter # Now print the configurations for the tags. 911289166Speter for tagname in $taglist; do 912289166Speter $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 913289166Speter done 914289166Speter 915289166Speter exit $? 916289166Speter} 917289166Speter 918289166Speter# func_features 919289166Speter# Display the features supported by this script. 920289166Speterfunc_features () 921289166Speter{ 922289166Speter echo "host: $host" 923289166Speter if test "$build_libtool_libs" = yes; then 924289166Speter echo "enable shared libraries" 925289166Speter else 926289166Speter echo "disable shared libraries" 927289166Speter fi 928289166Speter if test "$build_old_libs" = yes; then 929289166Speter echo "enable static libraries" 930289166Speter else 931289166Speter echo "disable static libraries" 932289166Speter fi 933289166Speter 934289166Speter exit $? 935289166Speter} 936289166Speter 937289166Speter# func_enable_tag tagname 938289166Speter# Verify that TAGNAME is valid, and either flag an error and exit, or 939289166Speter# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 940289166Speter# variable here. 941289166Speterfunc_enable_tag () 942289166Speter{ 943289166Speter # Global variable: 944289166Speter tagname="$1" 945289166Speter 946289166Speter re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 947289166Speter re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 948289166Speter sed_extractcf="/$re_begincf/,/$re_endcf/p" 949289166Speter 950289166Speter # Validate tagname. 951289166Speter case $tagname in 952289166Speter *[!-_A-Za-z0-9,/]*) 953289166Speter func_fatal_error "invalid tag name: $tagname" 954251883Speter ;; 955289166Speter esac 956289166Speter 957289166Speter # Don't test for the "default" C tag, as we know it's 958289166Speter # there but not specially marked. 959289166Speter case $tagname in 960289166Speter CC) ;; 961289166Speter *) 962289166Speter if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 963289166Speter taglist="$taglist $tagname" 964289166Speter 965289166Speter # Evaluate the configuration. Be careful to quote the path 966289166Speter # and the sed script, to avoid splitting on whitespace, but 967289166Speter # also don't use non-portable quotes within backquotes within 968289166Speter # quotes we have to do it in 2 steps: 969289166Speter extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 970289166Speter eval "$extractedcf" 971289166Speter else 972289166Speter func_error "ignoring unknown tag $tagname" 973289166Speter fi 974289166Speter ;; 975289166Speter esac 976289166Speter} 977289166Speter 978289166Speter# func_check_version_match 979289166Speter# Ensure that we are using m4 macros, and libtool script from the same 980289166Speter# release of libtool. 981289166Speterfunc_check_version_match () 982289166Speter{ 983289166Speter if test "$package_revision" != "$macro_revision"; then 984289166Speter if test "$VERSION" != "$macro_version"; then 985289166Speter if test -z "$macro_version"; then 986289166Speter cat >&2 <<_LT_EOF 987289166Speter$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 988289166Speter$progname: definition of this LT_INIT comes from an older release. 989289166Speter$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 990289166Speter$progname: and run autoconf again. 991289166Speter_LT_EOF 992289166Speter else 993289166Speter cat >&2 <<_LT_EOF 994289166Speter$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 995289166Speter$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 996289166Speter$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 997289166Speter$progname: and run autoconf again. 998289166Speter_LT_EOF 999289166Speter fi 1000289166Speter else 1001289166Speter cat >&2 <<_LT_EOF 1002289166Speter$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 1003289166Speter$progname: but the definition of this LT_INIT comes from revision $macro_revision. 1004289166Speter$progname: You should recreate aclocal.m4 with macros from revision $package_revision 1005289166Speter$progname: of $PACKAGE $VERSION and run autoconf again. 1006289166Speter_LT_EOF 1007289166Speter fi 1008289166Speter 1009289166Speter exit $EXIT_MISMATCH 1010289166Speter fi 1011289166Speter} 1012289166Speter 1013289166Speter 1014289166Speter# Shorthand for --mode=foo, only valid as the first argument 1015289166Spetercase $1 in 1016289166Speterclean|clea|cle|cl) 1017289166Speter shift; set dummy --mode clean ${1+"$@"}; shift 1018289166Speter ;; 1019289166Spetercompile|compil|compi|comp|com|co|c) 1020289166Speter shift; set dummy --mode compile ${1+"$@"}; shift 1021289166Speter ;; 1022289166Speterexecute|execut|execu|exec|exe|ex|e) 1023289166Speter shift; set dummy --mode execute ${1+"$@"}; shift 1024289166Speter ;; 1025289166Speterfinish|finis|fini|fin|fi|f) 1026289166Speter shift; set dummy --mode finish ${1+"$@"}; shift 1027289166Speter ;; 1028289166Speterinstall|instal|insta|inst|ins|in|i) 1029289166Speter shift; set dummy --mode install ${1+"$@"}; shift 1030289166Speter ;; 1031289166Speterlink|lin|li|l) 1032289166Speter shift; set dummy --mode link ${1+"$@"}; shift 1033289166Speter ;; 1034289166Speteruninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 1035289166Speter shift; set dummy --mode uninstall ${1+"$@"}; shift 1036289166Speter ;; 1037289166Speteresac 1038289166Speter 1039289166Speter 1040289166Speter 1041289166Speter# Option defaults: 1042289166Speteropt_debug=: 1043289166Speteropt_dry_run=false 1044289166Speteropt_config=false 1045289166Speteropt_preserve_dup_deps=false 1046289166Speteropt_features=false 1047289166Speteropt_finish=false 1048289166Speteropt_help=false 1049289166Speteropt_help_all=false 1050289166Speteropt_silent=: 1051289166Speteropt_warning=: 1052289166Speteropt_verbose=: 1053289166Speteropt_silent=false 1054289166Speteropt_verbose=false 1055289166Speter 1056289166Speter 1057289166Speter# Parse options once, thoroughly. This comes as soon as possible in the 1058289166Speter# script to make things like `--version' happen as quickly as we can. 1059289166Speter{ 1060289166Speter # this just eases exit handling 1061289166Speter while test $# -gt 0; do 1062289166Speter opt="$1" 1063289166Speter shift 1064289166Speter case $opt in 1065289166Speter --debug|-x) opt_debug='set -x' 1066289166Speter func_echo "enabling shell trace mode" 1067289166Speter $opt_debug 1068289166Speter ;; 1069289166Speter --dry-run|--dryrun|-n) 1070289166Speter opt_dry_run=: 1071289166Speter ;; 1072289166Speter --config) 1073289166Speter opt_config=: 1074289166Speterfunc_config 1075289166Speter ;; 1076289166Speter --dlopen|-dlopen) 1077289166Speter optarg="$1" 1078289166Speter opt_dlopen="${opt_dlopen+$opt_dlopen 1079289166Speter}$optarg" 1080289166Speter shift 1081289166Speter ;; 1082289166Speter --preserve-dup-deps) 1083289166Speter opt_preserve_dup_deps=: 1084289166Speter ;; 1085289166Speter --features) 1086289166Speter opt_features=: 1087289166Speterfunc_features 1088289166Speter ;; 1089289166Speter --finish) 1090289166Speter opt_finish=: 1091289166Speterset dummy --mode finish ${1+"$@"}; shift 1092289166Speter ;; 1093289166Speter --help) 1094289166Speter opt_help=: 1095289166Speter ;; 1096289166Speter --help-all) 1097289166Speter opt_help_all=: 1098289166Speteropt_help=': help-all' 1099289166Speter ;; 1100289166Speter --mode) 1101289166Speter test $# = 0 && func_missing_arg $opt && break 1102289166Speter optarg="$1" 1103289166Speter opt_mode="$optarg" 1104289166Spetercase $optarg in 1105289166Speter # Valid mode arguments: 1106289166Speter clean|compile|execute|finish|install|link|relink|uninstall) ;; 1107289166Speter 1108289166Speter # Catch anything else as an error 1109289166Speter *) func_error "invalid argument for $opt" 1110289166Speter exit_cmd=exit 1111289166Speter break 1112289166Speter ;; 1113289166Speteresac 1114289166Speter shift 1115289166Speter ;; 1116289166Speter --no-silent|--no-quiet) 1117289166Speter opt_silent=false 1118289166Speterfunc_append preserve_args " $opt" 1119289166Speter ;; 1120289166Speter --no-warning|--no-warn) 1121289166Speter opt_warning=false 1122289166Speterfunc_append preserve_args " $opt" 1123289166Speter ;; 1124289166Speter --no-verbose) 1125289166Speter opt_verbose=false 1126289166Speterfunc_append preserve_args " $opt" 1127289166Speter ;; 1128289166Speter --silent|--quiet) 1129289166Speter opt_silent=: 1130289166Speterfunc_append preserve_args " $opt" 1131289166Speter opt_verbose=false 1132289166Speter ;; 1133289166Speter --verbose|-v) 1134289166Speter opt_verbose=: 1135289166Speterfunc_append preserve_args " $opt" 1136289166Speteropt_silent=false 1137289166Speter ;; 1138289166Speter --tag) 1139289166Speter test $# = 0 && func_missing_arg $opt && break 1140289166Speter optarg="$1" 1141289166Speter opt_tag="$optarg" 1142289166Speterfunc_append preserve_args " $opt $optarg" 1143289166Speterfunc_enable_tag "$optarg" 1144289166Speter shift 1145289166Speter ;; 1146289166Speter 1147289166Speter -\?|-h) func_usage ;; 1148289166Speter --help) func_help ;; 1149289166Speter --version) func_version ;; 1150289166Speter 1151289166Speter # Separate optargs to long options: 1152289166Speter --*=*) 1153289166Speter func_split_long_opt "$opt" 1154289166Speter set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 1155289166Speter shift 1156289166Speter ;; 1157289166Speter 1158289166Speter # Separate non-argument short options: 1159289166Speter -\?*|-h*|-n*|-v*) 1160289166Speter func_split_short_opt "$opt" 1161289166Speter set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 1162289166Speter shift 1163289166Speter ;; 1164289166Speter 1165289166Speter --) break ;; 1166289166Speter -*) func_fatal_help "unrecognized option \`$opt'" ;; 1167289166Speter *) set dummy "$opt" ${1+"$@"}; shift; break ;; 1168251883Speter esac 1169289166Speter done 1170289166Speter 1171289166Speter # Validate options: 1172289166Speter 1173289166Speter # save first non-option argument 1174289166Speter if test "$#" -gt 0; then 1175289166Speter nonopt="$opt" 1176289166Speter shift 1177289166Speter fi 1178289166Speter 1179289166Speter # preserve --debug 1180289166Speter test "$opt_debug" = : || func_append preserve_args " --debug" 1181289166Speter 1182289166Speter case $host in 1183289166Speter *cygwin* | *mingw* | *pw32* | *cegcc*) 1184289166Speter # don't eliminate duplications in $postdeps and $predeps 1185289166Speter opt_duplicate_compiler_generated_deps=: 1186289166Speter ;; 1187289166Speter *) 1188289166Speter opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 1189289166Speter ;; 1190289166Speter esac 1191289166Speter 1192289166Speter $opt_help || { 1193289166Speter # Sanity checks first: 1194289166Speter func_check_version_match 1195289166Speter 1196289166Speter if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 1197289166Speter func_fatal_configuration "not configured to build any kind of library" 1198289166Speter fi 1199289166Speter 1200289166Speter # Darwin sucks 1201289166Speter eval std_shrext=\"$shrext_cmds\" 1202289166Speter 1203289166Speter # Only execute mode is allowed to have -dlopen flags. 1204289166Speter if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 1205289166Speter func_error "unrecognized option \`-dlopen'" 1206289166Speter $ECHO "$help" 1>&2 1207289166Speter exit $EXIT_FAILURE 1208289166Speter fi 1209289166Speter 1210289166Speter # Change the help message to a mode-specific one. 1211289166Speter generic_help="$help" 1212289166Speter help="Try \`$progname --help --mode=$opt_mode' for more information." 1213289166Speter } 1214289166Speter 1215289166Speter 1216289166Speter # Bail if the options were screwed 1217289166Speter $exit_cmd $EXIT_FAILURE 1218289166Speter} 1219289166Speter 1220289166Speter 1221289166Speter 1222289166Speter 1223289166Speter## ----------- ## 1224289166Speter## Main. ## 1225289166Speter## ----------- ## 1226289166Speter 1227289166Speter# func_lalib_p file 1228289166Speter# True iff FILE is a libtool `.la' library or `.lo' object file. 1229289166Speter# This function is only a basic sanity check; it will hardly flush out 1230289166Speter# determined imposters. 1231289166Speterfunc_lalib_p () 1232289166Speter{ 1233289166Speter test -f "$1" && 1234289166Speter $SED -e 4q "$1" 2>/dev/null \ 1235289166Speter | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1236289166Speter} 1237289166Speter 1238289166Speter# func_lalib_unsafe_p file 1239289166Speter# True iff FILE is a libtool `.la' library or `.lo' object file. 1240289166Speter# This function implements the same check as func_lalib_p without 1241289166Speter# resorting to external programs. To this end, it redirects stdin and 1242289166Speter# closes it afterwards, without saving the original file descriptor. 1243289166Speter# As a safety measure, use it only where a negative result would be 1244289166Speter# fatal anyway. Works if `file' does not exist. 1245289166Speterfunc_lalib_unsafe_p () 1246289166Speter{ 1247289166Speter lalib_p=no 1248289166Speter if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1249289166Speter for lalib_p_l in 1 2 3 4 1250289166Speter do 1251289166Speter read lalib_p_line 1252289166Speter case "$lalib_p_line" in 1253289166Speter \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1254289166Speter esac 1255289166Speter done 1256289166Speter exec 0<&5 5<&- 1257289166Speter fi 1258289166Speter test "$lalib_p" = yes 1259289166Speter} 1260289166Speter 1261289166Speter# func_ltwrapper_script_p file 1262289166Speter# True iff FILE is a libtool wrapper script 1263289166Speter# This function is only a basic sanity check; it will hardly flush out 1264289166Speter# determined imposters. 1265289166Speterfunc_ltwrapper_script_p () 1266289166Speter{ 1267289166Speter func_lalib_p "$1" 1268289166Speter} 1269289166Speter 1270289166Speter# func_ltwrapper_executable_p file 1271289166Speter# True iff FILE is a libtool wrapper executable 1272289166Speter# This function is only a basic sanity check; it will hardly flush out 1273289166Speter# determined imposters. 1274289166Speterfunc_ltwrapper_executable_p () 1275289166Speter{ 1276289166Speter func_ltwrapper_exec_suffix= 1277289166Speter case $1 in 1278289166Speter *.exe) ;; 1279289166Speter *) func_ltwrapper_exec_suffix=.exe ;; 1280289166Speter esac 1281289166Speter $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1282289166Speter} 1283289166Speter 1284289166Speter# func_ltwrapper_scriptname file 1285289166Speter# Assumes file is an ltwrapper_executable 1286289166Speter# uses $file to determine the appropriate filename for a 1287289166Speter# temporary ltwrapper_script. 1288289166Speterfunc_ltwrapper_scriptname () 1289289166Speter{ 1290289166Speter func_dirname_and_basename "$1" "" "." 1291289166Speter func_stripname '' '.exe' "$func_basename_result" 1292289166Speter func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1293289166Speter} 1294289166Speter 1295289166Speter# func_ltwrapper_p file 1296289166Speter# True iff FILE is a libtool wrapper script or wrapper executable 1297289166Speter# This function is only a basic sanity check; it will hardly flush out 1298289166Speter# determined imposters. 1299289166Speterfunc_ltwrapper_p () 1300289166Speter{ 1301289166Speter func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1302289166Speter} 1303289166Speter 1304289166Speter 1305289166Speter# func_execute_cmds commands fail_cmd 1306289166Speter# Execute tilde-delimited COMMANDS. 1307289166Speter# If FAIL_CMD is given, eval that upon failure. 1308289166Speter# FAIL_CMD may read-access the current command in variable CMD! 1309289166Speterfunc_execute_cmds () 1310289166Speter{ 1311289166Speter $opt_debug 1312289166Speter save_ifs=$IFS; IFS='~' 1313289166Speter for cmd in $1; do 1314289166Speter IFS=$save_ifs 1315289166Speter eval cmd=\"$cmd\" 1316289166Speter func_show_eval "$cmd" "${2-:}" 1317289166Speter done 1318289166Speter IFS=$save_ifs 1319289166Speter} 1320289166Speter 1321289166Speter 1322289166Speter# func_source file 1323289166Speter# Source FILE, adding directory component if necessary. 1324289166Speter# Note that it is not necessary on cygwin/mingw to append a dot to 1325289166Speter# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1326289166Speter# behavior happens only for exec(3), not for open(2)! Also, sourcing 1327289166Speter# `FILE.' does not work on cygwin managed mounts. 1328289166Speterfunc_source () 1329289166Speter{ 1330289166Speter $opt_debug 1331289166Speter case $1 in 1332289166Speter */* | *\\*) . "$1" ;; 1333289166Speter *) . "./$1" ;; 1334289166Speter esac 1335289166Speter} 1336289166Speter 1337289166Speter 1338289166Speter# func_resolve_sysroot PATH 1339289166Speter# Replace a leading = in PATH with a sysroot. Store the result into 1340289166Speter# func_resolve_sysroot_result 1341289166Speterfunc_resolve_sysroot () 1342289166Speter{ 1343289166Speter func_resolve_sysroot_result=$1 1344289166Speter case $func_resolve_sysroot_result in 1345289166Speter =*) 1346289166Speter func_stripname '=' '' "$func_resolve_sysroot_result" 1347289166Speter func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 1348251883Speter ;; 1349251883Speter esac 1350251883Speter} 1351251883Speter 1352289166Speter# func_replace_sysroot PATH 1353289166Speter# If PATH begins with the sysroot, replace it with = and 1354289166Speter# store the result into func_replace_sysroot_result. 1355289166Speterfunc_replace_sysroot () 1356289166Speter{ 1357289166Speter case "$lt_sysroot:$1" in 1358289166Speter ?*:"$lt_sysroot"*) 1359289166Speter func_stripname "$lt_sysroot" '' "$1" 1360289166Speter func_replace_sysroot_result="=$func_stripname_result" 1361289166Speter ;; 1362289166Speter *) 1363289166Speter # Including no sysroot. 1364289166Speter func_replace_sysroot_result=$1 1365289166Speter ;; 1366289166Speter esac 1367289166Speter} 1368251883Speter 1369251883Speter# func_infer_tag arg 1370251883Speter# Infer tagged configuration to use if any are available and 1371251883Speter# if one wasn't chosen via the "--tag" command line option. 1372251883Speter# Only attempt this if the compiler in the base compile 1373251883Speter# command doesn't match the default compiler. 1374251883Speter# arg is usually of the form 'gcc ...' 1375251883Speterfunc_infer_tag () 1376251883Speter{ 1377289166Speter $opt_debug 1378251883Speter if test -n "$available_tags" && test -z "$tagname"; then 1379251883Speter CC_quoted= 1380251883Speter for arg in $CC; do 1381289166Speter func_append_quoted CC_quoted "$arg" 1382251883Speter done 1383289166Speter CC_expanded=`func_echo_all $CC` 1384289166Speter CC_quoted_expanded=`func_echo_all $CC_quoted` 1385251883Speter case $@ in 1386251883Speter # Blanks in the command may have been stripped by the calling shell, 1387251883Speter # but not from the CC environment variable when configure was run. 1388289166Speter " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1389289166Speter " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1390251883Speter # Blanks at the start of $base_compile will cause this to fail 1391251883Speter # if we don't check for them as well. 1392251883Speter *) 1393251883Speter for z in $available_tags; do 1394289166Speter if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1395251883Speter # Evaluate the configuration. 1396251883Speter eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1397251883Speter CC_quoted= 1398251883Speter for arg in $CC; do 1399289166Speter # Double-quote args containing other shell metacharacters. 1400289166Speter func_append_quoted CC_quoted "$arg" 1401289166Speter done 1402289166Speter CC_expanded=`func_echo_all $CC` 1403289166Speter CC_quoted_expanded=`func_echo_all $CC_quoted` 1404251883Speter case "$@ " in 1405289166Speter " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1406289166Speter " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1407251883Speter # The compiler in the base compile command matches 1408251883Speter # the one in the tagged configuration. 1409251883Speter # Assume this is the tagged configuration we want. 1410251883Speter tagname=$z 1411251883Speter break 1412251883Speter ;; 1413251883Speter esac 1414251883Speter fi 1415251883Speter done 1416251883Speter # If $tagname still isn't set, then no tagged configuration 1417251883Speter # was found and let the user know that the "--tag" command 1418251883Speter # line option must be used. 1419251883Speter if test -z "$tagname"; then 1420289166Speter func_echo "unable to infer tagged configuration" 1421289166Speter func_fatal_error "specify a tag with \`--tag'" 1422289166Speter# else 1423289166Speter# func_verbose "using $tagname tagged configuration" 1424251883Speter fi 1425251883Speter ;; 1426251883Speter esac 1427251883Speter fi 1428251883Speter} 1429251883Speter 1430251883Speter 1431289166Speter 1432289166Speter# func_write_libtool_object output_name pic_name nonpic_name 1433289166Speter# Create a libtool object file (analogous to a ".la" file), 1434289166Speter# but don't create it if we're doing a dry run. 1435289166Speterfunc_write_libtool_object () 1436251883Speter{ 1437289166Speter write_libobj=${1} 1438289166Speter if test "$build_libtool_libs" = yes; then 1439289166Speter write_lobj=\'${2}\' 1440289166Speter else 1441289166Speter write_lobj=none 1442289166Speter fi 1443251883Speter 1444289166Speter if test "$build_old_libs" = yes; then 1445289166Speter write_oldobj=\'${3}\' 1446251883Speter else 1447289166Speter write_oldobj=none 1448251883Speter fi 1449289166Speter 1450289166Speter $opt_dry_run || { 1451289166Speter cat >${write_libobj}T <<EOF 1452289166Speter# $write_libobj - a libtool object file 1453289166Speter# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1454289166Speter# 1455289166Speter# Please DO NOT delete this file! 1456289166Speter# It is necessary for linking the library. 1457289166Speter 1458289166Speter# Name of the PIC object. 1459289166Speterpic_object=$write_lobj 1460289166Speter 1461289166Speter# Name of the non-PIC object 1462289166Speternon_pic_object=$write_oldobj 1463289166Speter 1464289166SpeterEOF 1465289166Speter $MV "${write_libobj}T" "${write_libobj}" 1466289166Speter } 1467251883Speter} 1468251883Speter 1469289166Speter 1470289166Speter################################################## 1471289166Speter# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 1472289166Speter################################################## 1473289166Speter 1474289166Speter# func_convert_core_file_wine_to_w32 ARG 1475289166Speter# Helper function used by file name conversion functions when $build is *nix, 1476289166Speter# and $host is mingw, cygwin, or some other w32 environment. Relies on a 1477289166Speter# correctly configured wine environment available, with the winepath program 1478289166Speter# in $build's $PATH. 1479289166Speter# 1480289166Speter# ARG is the $build file name to be converted to w32 format. 1481289166Speter# Result is available in $func_convert_core_file_wine_to_w32_result, and will 1482289166Speter# be empty on error (or when ARG is empty) 1483289166Speterfunc_convert_core_file_wine_to_w32 () 1484251883Speter{ 1485289166Speter $opt_debug 1486289166Speter func_convert_core_file_wine_to_w32_result="$1" 1487289166Speter if test -n "$1"; then 1488289166Speter # Unfortunately, winepath does not exit with a non-zero error code, so we 1489289166Speter # are forced to check the contents of stdout. On the other hand, if the 1490289166Speter # command is not found, the shell will set an exit code of 127 and print 1491289166Speter # *an error message* to stdout. So we must check for both error code of 1492289166Speter # zero AND non-empty stdout, which explains the odd construction: 1493289166Speter func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 1494289166Speter if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 1495289166Speter func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 1496289166Speter $SED -e "$lt_sed_naive_backslashify"` 1497289166Speter else 1498289166Speter func_convert_core_file_wine_to_w32_result= 1499251883Speter fi 1500289166Speter fi 1501289166Speter} 1502289166Speter# end: func_convert_core_file_wine_to_w32 1503251883Speter 1504251883Speter 1505289166Speter# func_convert_core_path_wine_to_w32 ARG 1506289166Speter# Helper function used by path conversion functions when $build is *nix, and 1507289166Speter# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 1508289166Speter# configured wine environment available, with the winepath program in $build's 1509289166Speter# $PATH. Assumes ARG has no leading or trailing path separator characters. 1510289166Speter# 1511289166Speter# ARG is path to be converted from $build format to win32. 1512289166Speter# Result is available in $func_convert_core_path_wine_to_w32_result. 1513289166Speter# Unconvertible file (directory) names in ARG are skipped; if no directory names 1514289166Speter# are convertible, then the result may be empty. 1515289166Speterfunc_convert_core_path_wine_to_w32 () 1516289166Speter{ 1517289166Speter $opt_debug 1518289166Speter # unfortunately, winepath doesn't convert paths, only file names 1519289166Speter func_convert_core_path_wine_to_w32_result="" 1520289166Speter if test -n "$1"; then 1521289166Speter oldIFS=$IFS 1522289166Speter IFS=: 1523289166Speter for func_convert_core_path_wine_to_w32_f in $1; do 1524289166Speter IFS=$oldIFS 1525289166Speter func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 1526289166Speter if test -n "$func_convert_core_file_wine_to_w32_result" ; then 1527289166Speter if test -z "$func_convert_core_path_wine_to_w32_result"; then 1528289166Speter func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 1529289166Speter else 1530289166Speter func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 1531289166Speter fi 1532251883Speter fi 1533251883Speter done 1534289166Speter IFS=$oldIFS 1535289166Speter fi 1536251883Speter} 1537289166Speter# end: func_convert_core_path_wine_to_w32 1538251883Speter 1539251883Speter 1540289166Speter# func_cygpath ARGS... 1541289166Speter# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 1542289166Speter# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 1543289166Speter# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 1544289166Speter# (2), returns the Cygwin file name or path in func_cygpath_result (input 1545289166Speter# file name or path is assumed to be in w32 format, as previously converted 1546289166Speter# from $build's *nix or MSYS format). In case (3), returns the w32 file name 1547289166Speter# or path in func_cygpath_result (input file name or path is assumed to be in 1548289166Speter# Cygwin format). Returns an empty string on error. 1549289166Speter# 1550289166Speter# ARGS are passed to cygpath, with the last one being the file name or path to 1551289166Speter# be converted. 1552289166Speter# 1553289166Speter# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 1554289166Speter# environment variable; do not put it in $PATH. 1555289166Speterfunc_cygpath () 1556289166Speter{ 1557289166Speter $opt_debug 1558289166Speter if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 1559289166Speter func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 1560289166Speter if test "$?" -ne 0; then 1561289166Speter # on failure, ensure result is empty 1562289166Speter func_cygpath_result= 1563289166Speter fi 1564289166Speter else 1565289166Speter func_cygpath_result= 1566289166Speter func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 1567289166Speter fi 1568289166Speter} 1569289166Speter#end: func_cygpath 1570251883Speter 1571251883Speter 1572289166Speter# func_convert_core_msys_to_w32 ARG 1573289166Speter# Convert file name or path ARG from MSYS format to w32 format. Return 1574289166Speter# result in func_convert_core_msys_to_w32_result. 1575289166Speterfunc_convert_core_msys_to_w32 () 1576289166Speter{ 1577289166Speter $opt_debug 1578289166Speter # awkward: cmd appends spaces to result 1579289166Speter func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 1580289166Speter $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 1581289166Speter} 1582289166Speter#end: func_convert_core_msys_to_w32 1583289166Speter 1584289166Speter 1585289166Speter# func_convert_file_check ARG1 ARG2 1586289166Speter# Verify that ARG1 (a file name in $build format) was converted to $host 1587289166Speter# format in ARG2. Otherwise, emit an error message, but continue (resetting 1588289166Speter# func_to_host_file_result to ARG1). 1589289166Speterfunc_convert_file_check () 1590289166Speter{ 1591289166Speter $opt_debug 1592289166Speter if test -z "$2" && test -n "$1" ; then 1593289166Speter func_error "Could not determine host file name corresponding to" 1594289166Speter func_error " \`$1'" 1595289166Speter func_error "Continuing, but uninstalled executables may not work." 1596289166Speter # Fallback: 1597289166Speter func_to_host_file_result="$1" 1598289166Speter fi 1599289166Speter} 1600289166Speter# end func_convert_file_check 1601289166Speter 1602289166Speter 1603289166Speter# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 1604289166Speter# Verify that FROM_PATH (a path in $build format) was converted to $host 1605289166Speter# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 1606289166Speter# func_to_host_file_result to a simplistic fallback value (see below). 1607289166Speterfunc_convert_path_check () 1608289166Speter{ 1609289166Speter $opt_debug 1610289166Speter if test -z "$4" && test -n "$3"; then 1611289166Speter func_error "Could not determine the host path corresponding to" 1612289166Speter func_error " \`$3'" 1613289166Speter func_error "Continuing, but uninstalled executables may not work." 1614289166Speter # Fallback. This is a deliberately simplistic "conversion" and 1615289166Speter # should not be "improved". See libtool.info. 1616289166Speter if test "x$1" != "x$2"; then 1617289166Speter lt_replace_pathsep_chars="s|$1|$2|g" 1618289166Speter func_to_host_path_result=`echo "$3" | 1619289166Speter $SED -e "$lt_replace_pathsep_chars"` 1620289166Speter else 1621289166Speter func_to_host_path_result="$3" 1622289166Speter fi 1623289166Speter fi 1624289166Speter} 1625289166Speter# end func_convert_path_check 1626289166Speter 1627289166Speter 1628289166Speter# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 1629289166Speter# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 1630289166Speter# and appending REPL if ORIG matches BACKPAT. 1631289166Speterfunc_convert_path_front_back_pathsep () 1632289166Speter{ 1633289166Speter $opt_debug 1634289166Speter case $4 in 1635289166Speter $1 ) func_to_host_path_result="$3$func_to_host_path_result" 1636289166Speter ;; 1637251883Speter esac 1638289166Speter case $4 in 1639289166Speter $2 ) func_append func_to_host_path_result "$3" 1640289166Speter ;; 1641289166Speter esac 1642289166Speter} 1643289166Speter# end func_convert_path_front_back_pathsep 1644251883Speter 1645251883Speter 1646289166Speter################################################## 1647289166Speter# $build to $host FILE NAME CONVERSION FUNCTIONS # 1648289166Speter################################################## 1649289166Speter# invoked via `$to_host_file_cmd ARG' 1650289166Speter# 1651289166Speter# In each case, ARG is the path to be converted from $build to $host format. 1652289166Speter# Result will be available in $func_to_host_file_result. 1653251883Speter 1654289166Speter 1655289166Speter# func_to_host_file ARG 1656289166Speter# Converts the file name ARG from $build format to $host format. Return result 1657289166Speter# in func_to_host_file_result. 1658289166Speterfunc_to_host_file () 1659289166Speter{ 1660289166Speter $opt_debug 1661289166Speter $to_host_file_cmd "$1" 1662289166Speter} 1663289166Speter# end func_to_host_file 1664289166Speter 1665289166Speter 1666289166Speter# func_to_tool_file ARG LAZY 1667289166Speter# converts the file name ARG from $build format to toolchain format. Return 1668289166Speter# result in func_to_tool_file_result. If the conversion in use is listed 1669289166Speter# in (the comma separated) LAZY, no conversion takes place. 1670289166Speterfunc_to_tool_file () 1671289166Speter{ 1672289166Speter $opt_debug 1673289166Speter case ,$2, in 1674289166Speter *,"$to_tool_file_cmd",*) 1675289166Speter func_to_tool_file_result=$1 1676251883Speter ;; 1677251883Speter *) 1678289166Speter $to_tool_file_cmd "$1" 1679289166Speter func_to_tool_file_result=$func_to_host_file_result 1680251883Speter ;; 1681289166Speter esac 1682289166Speter} 1683289166Speter# end func_to_tool_file 1684251883Speter 1685289166Speter 1686289166Speter# func_convert_file_noop ARG 1687289166Speter# Copy ARG to func_to_host_file_result. 1688289166Speterfunc_convert_file_noop () 1689289166Speter{ 1690289166Speter func_to_host_file_result="$1" 1691289166Speter} 1692289166Speter# end func_convert_file_noop 1693289166Speter 1694289166Speter 1695289166Speter# func_convert_file_msys_to_w32 ARG 1696289166Speter# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 1697289166Speter# conversion to w32 is not available inside the cwrapper. Returns result in 1698289166Speter# func_to_host_file_result. 1699289166Speterfunc_convert_file_msys_to_w32 () 1700289166Speter{ 1701289166Speter $opt_debug 1702289166Speter func_to_host_file_result="$1" 1703289166Speter if test -n "$1"; then 1704289166Speter func_convert_core_msys_to_w32 "$1" 1705289166Speter func_to_host_file_result="$func_convert_core_msys_to_w32_result" 1706251883Speter fi 1707289166Speter func_convert_file_check "$1" "$func_to_host_file_result" 1708289166Speter} 1709289166Speter# end func_convert_file_msys_to_w32 1710251883Speter 1711251883Speter 1712289166Speter# func_convert_file_cygwin_to_w32 ARG 1713289166Speter# Convert file name ARG from Cygwin to w32 format. Returns result in 1714289166Speter# func_to_host_file_result. 1715289166Speterfunc_convert_file_cygwin_to_w32 () 1716289166Speter{ 1717289166Speter $opt_debug 1718289166Speter func_to_host_file_result="$1" 1719289166Speter if test -n "$1"; then 1720289166Speter # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 1721289166Speter # LT_CYGPATH in this case. 1722289166Speter func_to_host_file_result=`cygpath -m "$1"` 1723289166Speter fi 1724289166Speter func_convert_file_check "$1" "$func_to_host_file_result" 1725289166Speter} 1726289166Speter# end func_convert_file_cygwin_to_w32 1727251883Speter 1728251883Speter 1729289166Speter# func_convert_file_nix_to_w32 ARG 1730289166Speter# Convert file name ARG from *nix to w32 format. Requires a wine environment 1731289166Speter# and a working winepath. Returns result in func_to_host_file_result. 1732289166Speterfunc_convert_file_nix_to_w32 () 1733289166Speter{ 1734289166Speter $opt_debug 1735289166Speter func_to_host_file_result="$1" 1736289166Speter if test -n "$1"; then 1737289166Speter func_convert_core_file_wine_to_w32 "$1" 1738289166Speter func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 1739289166Speter fi 1740289166Speter func_convert_file_check "$1" "$func_to_host_file_result" 1741289166Speter} 1742289166Speter# end func_convert_file_nix_to_w32 1743251883Speter 1744251883Speter 1745289166Speter# func_convert_file_msys_to_cygwin ARG 1746289166Speter# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1747289166Speter# Returns result in func_to_host_file_result. 1748289166Speterfunc_convert_file_msys_to_cygwin () 1749289166Speter{ 1750289166Speter $opt_debug 1751289166Speter func_to_host_file_result="$1" 1752289166Speter if test -n "$1"; then 1753289166Speter func_convert_core_msys_to_w32 "$1" 1754289166Speter func_cygpath -u "$func_convert_core_msys_to_w32_result" 1755289166Speter func_to_host_file_result="$func_cygpath_result" 1756289166Speter fi 1757289166Speter func_convert_file_check "$1" "$func_to_host_file_result" 1758289166Speter} 1759289166Speter# end func_convert_file_msys_to_cygwin 1760251883Speter 1761251883Speter 1762289166Speter# func_convert_file_nix_to_cygwin ARG 1763289166Speter# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 1764289166Speter# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 1765289166Speter# in func_to_host_file_result. 1766289166Speterfunc_convert_file_nix_to_cygwin () 1767289166Speter{ 1768289166Speter $opt_debug 1769289166Speter func_to_host_file_result="$1" 1770289166Speter if test -n "$1"; then 1771289166Speter # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 1772289166Speter func_convert_core_file_wine_to_w32 "$1" 1773289166Speter func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 1774289166Speter func_to_host_file_result="$func_cygpath_result" 1775289166Speter fi 1776289166Speter func_convert_file_check "$1" "$func_to_host_file_result" 1777289166Speter} 1778289166Speter# end func_convert_file_nix_to_cygwin 1779251883Speter 1780251883Speter 1781289166Speter############################################# 1782289166Speter# $build to $host PATH CONVERSION FUNCTIONS # 1783289166Speter############################################# 1784289166Speter# invoked via `$to_host_path_cmd ARG' 1785289166Speter# 1786289166Speter# In each case, ARG is the path to be converted from $build to $host format. 1787289166Speter# The result will be available in $func_to_host_path_result. 1788289166Speter# 1789289166Speter# Path separators are also converted from $build format to $host format. If 1790289166Speter# ARG begins or ends with a path separator character, it is preserved (but 1791289166Speter# converted to $host format) on output. 1792289166Speter# 1793289166Speter# All path conversion functions are named using the following convention: 1794289166Speter# file name conversion function : func_convert_file_X_to_Y () 1795289166Speter# path conversion function : func_convert_path_X_to_Y () 1796289166Speter# where, for any given $build/$host combination the 'X_to_Y' value is the 1797289166Speter# same. If conversion functions are added for new $build/$host combinations, 1798289166Speter# the two new functions must follow this pattern, or func_init_to_host_path_cmd 1799289166Speter# will break. 1800251883Speter 1801251883Speter 1802289166Speter# func_init_to_host_path_cmd 1803289166Speter# Ensures that function "pointer" variable $to_host_path_cmd is set to the 1804289166Speter# appropriate value, based on the value of $to_host_file_cmd. 1805289166Speterto_host_path_cmd= 1806289166Speterfunc_init_to_host_path_cmd () 1807289166Speter{ 1808289166Speter $opt_debug 1809289166Speter if test -z "$to_host_path_cmd"; then 1810289166Speter func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 1811289166Speter to_host_path_cmd="func_convert_path_${func_stripname_result}" 1812289166Speter fi 1813289166Speter} 1814251883Speter 1815251883Speter 1816289166Speter# func_to_host_path ARG 1817289166Speter# Converts the path ARG from $build format to $host format. Return result 1818289166Speter# in func_to_host_path_result. 1819289166Speterfunc_to_host_path () 1820289166Speter{ 1821289166Speter $opt_debug 1822289166Speter func_init_to_host_path_cmd 1823289166Speter $to_host_path_cmd "$1" 1824289166Speter} 1825289166Speter# end func_to_host_path 1826251883Speter 1827251883Speter 1828289166Speter# func_convert_path_noop ARG 1829289166Speter# Copy ARG to func_to_host_path_result. 1830289166Speterfunc_convert_path_noop () 1831289166Speter{ 1832289166Speter func_to_host_path_result="$1" 1833289166Speter} 1834289166Speter# end func_convert_path_noop 1835251883Speter 1836251883Speter 1837289166Speter# func_convert_path_msys_to_w32 ARG 1838289166Speter# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 1839289166Speter# conversion to w32 is not available inside the cwrapper. Returns result in 1840289166Speter# func_to_host_path_result. 1841289166Speterfunc_convert_path_msys_to_w32 () 1842289166Speter{ 1843289166Speter $opt_debug 1844289166Speter func_to_host_path_result="$1" 1845289166Speter if test -n "$1"; then 1846289166Speter # Remove leading and trailing path separator characters from ARG. MSYS 1847289166Speter # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 1848289166Speter # and winepath ignores them completely. 1849289166Speter func_stripname : : "$1" 1850289166Speter func_to_host_path_tmp1=$func_stripname_result 1851289166Speter func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1852289166Speter func_to_host_path_result="$func_convert_core_msys_to_w32_result" 1853289166Speter func_convert_path_check : ";" \ 1854289166Speter "$func_to_host_path_tmp1" "$func_to_host_path_result" 1855289166Speter func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1856289166Speter fi 1857289166Speter} 1858289166Speter# end func_convert_path_msys_to_w32 1859251883Speter 1860251883Speter 1861289166Speter# func_convert_path_cygwin_to_w32 ARG 1862289166Speter# Convert path ARG from Cygwin to w32 format. Returns result in 1863289166Speter# func_to_host_file_result. 1864289166Speterfunc_convert_path_cygwin_to_w32 () 1865289166Speter{ 1866289166Speter $opt_debug 1867289166Speter func_to_host_path_result="$1" 1868289166Speter if test -n "$1"; then 1869289166Speter # See func_convert_path_msys_to_w32: 1870289166Speter func_stripname : : "$1" 1871289166Speter func_to_host_path_tmp1=$func_stripname_result 1872289166Speter func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 1873289166Speter func_convert_path_check : ";" \ 1874289166Speter "$func_to_host_path_tmp1" "$func_to_host_path_result" 1875289166Speter func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1876289166Speter fi 1877289166Speter} 1878289166Speter# end func_convert_path_cygwin_to_w32 1879251883Speter 1880289166Speter 1881289166Speter# func_convert_path_nix_to_w32 ARG 1882289166Speter# Convert path ARG from *nix to w32 format. Requires a wine environment and 1883289166Speter# a working winepath. Returns result in func_to_host_file_result. 1884289166Speterfunc_convert_path_nix_to_w32 () 1885289166Speter{ 1886289166Speter $opt_debug 1887289166Speter func_to_host_path_result="$1" 1888289166Speter if test -n "$1"; then 1889289166Speter # See func_convert_path_msys_to_w32: 1890289166Speter func_stripname : : "$1" 1891289166Speter func_to_host_path_tmp1=$func_stripname_result 1892289166Speter func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1893289166Speter func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 1894289166Speter func_convert_path_check : ";" \ 1895289166Speter "$func_to_host_path_tmp1" "$func_to_host_path_result" 1896289166Speter func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 1897251883Speter fi 1898289166Speter} 1899289166Speter# end func_convert_path_nix_to_w32 1900251883Speter 1901289166Speter 1902289166Speter# func_convert_path_msys_to_cygwin ARG 1903289166Speter# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 1904289166Speter# Returns result in func_to_host_file_result. 1905289166Speterfunc_convert_path_msys_to_cygwin () 1906289166Speter{ 1907289166Speter $opt_debug 1908289166Speter func_to_host_path_result="$1" 1909289166Speter if test -n "$1"; then 1910289166Speter # See func_convert_path_msys_to_w32: 1911289166Speter func_stripname : : "$1" 1912289166Speter func_to_host_path_tmp1=$func_stripname_result 1913289166Speter func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 1914289166Speter func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 1915289166Speter func_to_host_path_result="$func_cygpath_result" 1916289166Speter func_convert_path_check : : \ 1917289166Speter "$func_to_host_path_tmp1" "$func_to_host_path_result" 1918289166Speter func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1919251883Speter fi 1920289166Speter} 1921289166Speter# end func_convert_path_msys_to_cygwin 1922251883Speter 1923251883Speter 1924289166Speter# func_convert_path_nix_to_cygwin ARG 1925289166Speter# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 1926289166Speter# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 1927289166Speter# func_to_host_file_result. 1928289166Speterfunc_convert_path_nix_to_cygwin () 1929289166Speter{ 1930289166Speter $opt_debug 1931289166Speter func_to_host_path_result="$1" 1932289166Speter if test -n "$1"; then 1933289166Speter # Remove leading and trailing path separator characters from 1934289166Speter # ARG. msys behavior is inconsistent here, cygpath turns them 1935289166Speter # into '.;' and ';.', and winepath ignores them completely. 1936289166Speter func_stripname : : "$1" 1937289166Speter func_to_host_path_tmp1=$func_stripname_result 1938289166Speter func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 1939289166Speter func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 1940289166Speter func_to_host_path_result="$func_cygpath_result" 1941289166Speter func_convert_path_check : : \ 1942289166Speter "$func_to_host_path_tmp1" "$func_to_host_path_result" 1943289166Speter func_convert_path_front_back_pathsep ":*" "*:" : "$1" 1944289166Speter fi 1945289166Speter} 1946289166Speter# end func_convert_path_nix_to_cygwin 1947289166Speter 1948289166Speter 1949289166Speter# func_mode_compile arg... 1950289166Speterfunc_mode_compile () 1951289166Speter{ 1952289166Speter $opt_debug 1953251883Speter # Get the compilation command and the source file. 1954251883Speter base_compile= 1955251883Speter srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1956251883Speter suppress_opt=yes 1957251883Speter suppress_output= 1958251883Speter arg_mode=normal 1959251883Speter libobj= 1960251883Speter later= 1961289166Speter pie_flag= 1962251883Speter 1963251883Speter for arg 1964251883Speter do 1965251883Speter case $arg_mode in 1966251883Speter arg ) 1967251883Speter # do not "continue". Instead, add this to base_compile 1968251883Speter lastarg="$arg" 1969251883Speter arg_mode=normal 1970251883Speter ;; 1971251883Speter 1972251883Speter target ) 1973251883Speter libobj="$arg" 1974251883Speter arg_mode=normal 1975251883Speter continue 1976251883Speter ;; 1977251883Speter 1978251883Speter normal ) 1979251883Speter # Accept any command-line options. 1980251883Speter case $arg in 1981251883Speter -o) 1982289166Speter test -n "$libobj" && \ 1983289166Speter func_fatal_error "you cannot specify \`-o' more than once" 1984251883Speter arg_mode=target 1985251883Speter continue 1986251883Speter ;; 1987251883Speter 1988289166Speter -pie | -fpie | -fPIE) 1989289166Speter func_append pie_flag " $arg" 1990251883Speter continue 1991251883Speter ;; 1992251883Speter 1993289166Speter -shared | -static | -prefer-pic | -prefer-non-pic) 1994289166Speter func_append later " $arg" 1995289166Speter continue 1996289166Speter ;; 1997289166Speter 1998251883Speter -no-suppress) 1999251883Speter suppress_opt=no 2000251883Speter continue 2001251883Speter ;; 2002251883Speter 2003251883Speter -Xcompiler) 2004251883Speter arg_mode=arg # the next one goes into the "base_compile" arg list 2005251883Speter continue # The current "srcfile" will either be retained or 2006251883Speter ;; # replaced later. I would guess that would be a bug. 2007251883Speter 2008251883Speter -Wc,*) 2009289166Speter func_stripname '-Wc,' '' "$arg" 2010289166Speter args=$func_stripname_result 2011251883Speter lastarg= 2012251883Speter save_ifs="$IFS"; IFS=',' 2013289166Speter for arg in $args; do 2014251883Speter IFS="$save_ifs" 2015289166Speter func_append_quoted lastarg "$arg" 2016251883Speter done 2017251883Speter IFS="$save_ifs" 2018289166Speter func_stripname ' ' '' "$lastarg" 2019289166Speter lastarg=$func_stripname_result 2020251883Speter 2021251883Speter # Add the arguments to base_compile. 2022289166Speter func_append base_compile " $lastarg" 2023251883Speter continue 2024251883Speter ;; 2025251883Speter 2026289166Speter *) 2027251883Speter # Accept the current argument as the source file. 2028251883Speter # The previous "srcfile" becomes the current argument. 2029251883Speter # 2030251883Speter lastarg="$srcfile" 2031251883Speter srcfile="$arg" 2032251883Speter ;; 2033251883Speter esac # case $arg 2034251883Speter ;; 2035251883Speter esac # case $arg_mode 2036251883Speter 2037251883Speter # Aesthetically quote the previous argument. 2038289166Speter func_append_quoted base_compile "$lastarg" 2039251883Speter done # for arg 2040251883Speter 2041251883Speter case $arg_mode in 2042251883Speter arg) 2043289166Speter func_fatal_error "you must specify an argument for -Xcompile" 2044251883Speter ;; 2045251883Speter target) 2046289166Speter func_fatal_error "you must specify a target with \`-o'" 2047251883Speter ;; 2048251883Speter *) 2049251883Speter # Get the name of the library object. 2050289166Speter test -z "$libobj" && { 2051289166Speter func_basename "$srcfile" 2052289166Speter libobj="$func_basename_result" 2053289166Speter } 2054251883Speter ;; 2055251883Speter esac 2056251883Speter 2057251883Speter # Recognize several different file suffixes. 2058251883Speter # If the user specifies -o file.o, it is replaced with file.lo 2059251883Speter case $libobj in 2060289166Speter *.[cCFSifmso] | \ 2061289166Speter *.ada | *.adb | *.ads | *.asm | \ 2062289166Speter *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 2063289166Speter *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 2064289166Speter func_xform "$libobj" 2065289166Speter libobj=$func_xform_result 2066289166Speter ;; 2067251883Speter esac 2068251883Speter 2069251883Speter case $libobj in 2070289166Speter *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 2071251883Speter *) 2072289166Speter func_fatal_error "cannot determine name of library object from \`$libobj'" 2073251883Speter ;; 2074251883Speter esac 2075251883Speter 2076251883Speter func_infer_tag $base_compile 2077251883Speter 2078251883Speter for arg in $later; do 2079251883Speter case $arg in 2080289166Speter -shared) 2081289166Speter test "$build_libtool_libs" != yes && \ 2082289166Speter func_fatal_configuration "can not build a shared library" 2083289166Speter build_old_libs=no 2084289166Speter continue 2085289166Speter ;; 2086289166Speter 2087251883Speter -static) 2088289166Speter build_libtool_libs=no 2089251883Speter build_old_libs=yes 2090251883Speter continue 2091251883Speter ;; 2092251883Speter 2093251883Speter -prefer-pic) 2094251883Speter pic_mode=yes 2095251883Speter continue 2096251883Speter ;; 2097251883Speter 2098251883Speter -prefer-non-pic) 2099251883Speter pic_mode=no 2100251883Speter continue 2101251883Speter ;; 2102251883Speter esac 2103251883Speter done 2104251883Speter 2105289166Speter func_quote_for_eval "$libobj" 2106289166Speter test "X$libobj" != "X$func_quote_for_eval_result" \ 2107289166Speter && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 2108289166Speter && func_warning "libobj name \`$libobj' may not contain shell special characters." 2109289166Speter func_dirname_and_basename "$obj" "/" "" 2110289166Speter objname="$func_basename_result" 2111289166Speter xdir="$func_dirname_result" 2112251883Speter lobj=${xdir}$objdir/$objname 2113251883Speter 2114289166Speter test -z "$base_compile" && \ 2115289166Speter func_fatal_help "you must specify a compilation command" 2116251883Speter 2117251883Speter # Delete any leftover library objects. 2118251883Speter if test "$build_old_libs" = yes; then 2119251883Speter removelist="$obj $lobj $libobj ${libobj}T" 2120251883Speter else 2121251883Speter removelist="$lobj $libobj ${libobj}T" 2122251883Speter fi 2123251883Speter 2124251883Speter # On Cygwin there's no "real" PIC flag so we must build both object types 2125251883Speter case $host_os in 2126289166Speter cygwin* | mingw* | pw32* | os2* | cegcc*) 2127251883Speter pic_mode=default 2128251883Speter ;; 2129251883Speter esac 2130251883Speter if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 2131251883Speter # non-PIC code in shared libraries is not supported 2132251883Speter pic_mode=default 2133251883Speter fi 2134251883Speter 2135251883Speter # Calculate the filename of the output object if compiler does 2136251883Speter # not support -o with -c 2137251883Speter if test "$compiler_c_o" = no; then 2138289166Speter output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 2139251883Speter lockfile="$output_obj.lock" 2140251883Speter else 2141251883Speter output_obj= 2142251883Speter need_locks=no 2143251883Speter lockfile= 2144251883Speter fi 2145251883Speter 2146251883Speter # Lock this critical section if it is needed 2147251883Speter # We use this script file to make the link, it avoids creating a new file 2148251883Speter if test "$need_locks" = yes; then 2149289166Speter until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 2150289166Speter func_echo "Waiting for $lockfile to be removed" 2151251883Speter sleep 2 2152251883Speter done 2153251883Speter elif test "$need_locks" = warn; then 2154251883Speter if test -f "$lockfile"; then 2155289166Speter $ECHO "\ 2156251883Speter*** ERROR, $lockfile exists and contains: 2157251883Speter`cat $lockfile 2>/dev/null` 2158251883Speter 2159251883SpeterThis indicates that another process is trying to use the same 2160251883Spetertemporary object file, and libtool could not work around it because 2161251883Speteryour compiler does not support \`-c' and \`-o' together. If you 2162251883Speterrepeat this compilation, it may succeed, by chance, but you had better 2163251883Speteravoid parallel builds (make -j) in this platform, or get a better 2164251883Spetercompiler." 2165251883Speter 2166289166Speter $opt_dry_run || $RM $removelist 2167251883Speter exit $EXIT_FAILURE 2168251883Speter fi 2169289166Speter func_append removelist " $output_obj" 2170289166Speter $ECHO "$srcfile" > "$lockfile" 2171251883Speter fi 2172251883Speter 2173289166Speter $opt_dry_run || $RM $removelist 2174289166Speter func_append removelist " $lockfile" 2175289166Speter trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 2176251883Speter 2177289166Speter func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 2178289166Speter srcfile=$func_to_tool_file_result 2179289166Speter func_quote_for_eval "$srcfile" 2180289166Speter qsrcfile=$func_quote_for_eval_result 2181251883Speter 2182251883Speter # Only build a PIC object if we are building libtool libraries. 2183251883Speter if test "$build_libtool_libs" = yes; then 2184251883Speter # Without this assignment, base_compile gets emptied. 2185251883Speter fbsd_hideous_sh_bug=$base_compile 2186251883Speter 2187251883Speter if test "$pic_mode" != no; then 2188251883Speter command="$base_compile $qsrcfile $pic_flag" 2189251883Speter else 2190251883Speter # Don't build PIC code 2191251883Speter command="$base_compile $qsrcfile" 2192251883Speter fi 2193251883Speter 2194289166Speter func_mkdir_p "$xdir$objdir" 2195251883Speter 2196251883Speter if test -z "$output_obj"; then 2197251883Speter # Place PIC objects in $objdir 2198289166Speter func_append command " -o $lobj" 2199251883Speter fi 2200251883Speter 2201289166Speter func_show_eval_locale "$command" \ 2202289166Speter 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 2203251883Speter 2204251883Speter if test "$need_locks" = warn && 2205251883Speter test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2206289166Speter $ECHO "\ 2207251883Speter*** ERROR, $lockfile contains: 2208251883Speter`cat $lockfile 2>/dev/null` 2209251883Speter 2210251883Speterbut it should contain: 2211251883Speter$srcfile 2212251883Speter 2213251883SpeterThis indicates that another process is trying to use the same 2214251883Spetertemporary object file, and libtool could not work around it because 2215251883Speteryour compiler does not support \`-c' and \`-o' together. If you 2216251883Speterrepeat this compilation, it may succeed, by chance, but you had better 2217251883Speteravoid parallel builds (make -j) in this platform, or get a better 2218251883Spetercompiler." 2219251883Speter 2220289166Speter $opt_dry_run || $RM $removelist 2221251883Speter exit $EXIT_FAILURE 2222251883Speter fi 2223251883Speter 2224251883Speter # Just move the object if needed, then go on to compile the next one 2225251883Speter if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 2226289166Speter func_show_eval '$MV "$output_obj" "$lobj"' \ 2227289166Speter 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2228251883Speter fi 2229251883Speter 2230251883Speter # Allow error messages only from the first compilation. 2231251883Speter if test "$suppress_opt" = yes; then 2232289166Speter suppress_output=' >/dev/null 2>&1' 2233251883Speter fi 2234251883Speter fi 2235251883Speter 2236251883Speter # Only build a position-dependent object if we build old libraries. 2237251883Speter if test "$build_old_libs" = yes; then 2238251883Speter if test "$pic_mode" != yes; then 2239251883Speter # Don't build PIC code 2240289166Speter command="$base_compile $qsrcfile$pie_flag" 2241251883Speter else 2242251883Speter command="$base_compile $qsrcfile $pic_flag" 2243251883Speter fi 2244251883Speter if test "$compiler_c_o" = yes; then 2245289166Speter func_append command " -o $obj" 2246251883Speter fi 2247251883Speter 2248251883Speter # Suppress compiler output if we already did a PIC compilation. 2249289166Speter func_append command "$suppress_output" 2250289166Speter func_show_eval_locale "$command" \ 2251289166Speter '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 2252251883Speter 2253251883Speter if test "$need_locks" = warn && 2254251883Speter test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2255289166Speter $ECHO "\ 2256251883Speter*** ERROR, $lockfile contains: 2257251883Speter`cat $lockfile 2>/dev/null` 2258251883Speter 2259251883Speterbut it should contain: 2260251883Speter$srcfile 2261251883Speter 2262251883SpeterThis indicates that another process is trying to use the same 2263251883Spetertemporary object file, and libtool could not work around it because 2264251883Speteryour compiler does not support \`-c' and \`-o' together. If you 2265251883Speterrepeat this compilation, it may succeed, by chance, but you had better 2266251883Speteravoid parallel builds (make -j) in this platform, or get a better 2267251883Spetercompiler." 2268251883Speter 2269289166Speter $opt_dry_run || $RM $removelist 2270251883Speter exit $EXIT_FAILURE 2271251883Speter fi 2272251883Speter 2273251883Speter # Just move the object if needed 2274251883Speter if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 2275289166Speter func_show_eval '$MV "$output_obj" "$obj"' \ 2276289166Speter 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2277289166Speter fi 2278289166Speter fi 2279289166Speter 2280289166Speter $opt_dry_run || { 2281289166Speter func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 2282289166Speter 2283289166Speter # Unlock the critical section if it was locked 2284289166Speter if test "$need_locks" != no; then 2285289166Speter removelist=$lockfile 2286289166Speter $RM "$lockfile" 2287289166Speter fi 2288289166Speter } 2289289166Speter 2290289166Speter exit $EXIT_SUCCESS 2291289166Speter} 2292289166Speter 2293289166Speter$opt_help || { 2294289166Speter test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 2295289166Speter} 2296289166Speter 2297289166Speterfunc_mode_help () 2298289166Speter{ 2299289166Speter # We need to display help for each of the modes. 2300289166Speter case $opt_mode in 2301289166Speter "") 2302289166Speter # Generic help is extracted from the usage comments 2303289166Speter # at the start of this file. 2304289166Speter func_help 2305289166Speter ;; 2306289166Speter 2307289166Speter clean) 2308289166Speter $ECHO \ 2309289166Speter"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 2310289166Speter 2311289166SpeterRemove files from the build directory. 2312289166Speter 2313289166SpeterRM is the name of the program to use to delete files associated with each FILE 2314289166Speter(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2315289166Speterto RM. 2316289166Speter 2317289166SpeterIf FILE is a libtool library, object or program, all the files associated 2318289166Speterwith it are deleted. Otherwise, only FILE itself is deleted using RM." 2319289166Speter ;; 2320289166Speter 2321289166Speter compile) 2322289166Speter $ECHO \ 2323289166Speter"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 2324289166Speter 2325289166SpeterCompile a source file into a libtool library object. 2326289166Speter 2327289166SpeterThis mode accepts the following additional options: 2328289166Speter 2329289166Speter -o OUTPUT-FILE set the output file name to OUTPUT-FILE 2330289166Speter -no-suppress do not suppress compiler output for multiple passes 2331289166Speter -prefer-pic try to build PIC objects only 2332289166Speter -prefer-non-pic try to build non-PIC objects only 2333289166Speter -shared do not build a \`.o' file suitable for static linking 2334289166Speter -static only build a \`.o' file suitable for static linking 2335289166Speter -Wc,FLAG pass FLAG directly to the compiler 2336289166Speter 2337289166SpeterCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 2338289166Speterfrom the given SOURCEFILE. 2339289166Speter 2340289166SpeterThe output file name is determined by removing the directory component from 2341289166SpeterSOURCEFILE, then substituting the C source code suffix \`.c' with the 2342289166Speterlibrary object suffix, \`.lo'." 2343289166Speter ;; 2344289166Speter 2345289166Speter execute) 2346289166Speter $ECHO \ 2347289166Speter"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 2348289166Speter 2349289166SpeterAutomatically set library path, then run a program. 2350289166Speter 2351289166SpeterThis mode accepts the following additional options: 2352289166Speter 2353289166Speter -dlopen FILE add the directory containing FILE to the library path 2354289166Speter 2355289166SpeterThis mode sets the library path environment variable according to \`-dlopen' 2356289166Speterflags. 2357289166Speter 2358289166SpeterIf any of the ARGS are libtool executable wrappers, then they are translated 2359289166Speterinto their corresponding uninstalled binary, and any of their required library 2360289166Speterdirectories are added to the library path. 2361289166Speter 2362289166SpeterThen, COMMAND is executed, with ARGS as arguments." 2363289166Speter ;; 2364289166Speter 2365289166Speter finish) 2366289166Speter $ECHO \ 2367289166Speter"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 2368289166Speter 2369289166SpeterComplete the installation of libtool libraries. 2370289166Speter 2371289166SpeterEach LIBDIR is a directory that contains libtool libraries. 2372289166Speter 2373289166SpeterThe commands that this mode executes may require superuser privileges. Use 2374289166Speterthe \`--dry-run' option if you just want to see what would be executed." 2375289166Speter ;; 2376289166Speter 2377289166Speter install) 2378289166Speter $ECHO \ 2379289166Speter"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 2380289166Speter 2381289166SpeterInstall executables or libraries. 2382289166Speter 2383289166SpeterINSTALL-COMMAND is the installation command. The first component should be 2384289166Spetereither the \`install' or \`cp' program. 2385289166Speter 2386289166SpeterThe following components of INSTALL-COMMAND are treated specially: 2387289166Speter 2388289166Speter -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 2389289166Speter 2390289166SpeterThe rest of the components are interpreted as arguments to that command (only 2391289166SpeterBSD-compatible install options are recognized)." 2392289166Speter ;; 2393289166Speter 2394289166Speter link) 2395289166Speter $ECHO \ 2396289166Speter"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 2397289166Speter 2398289166SpeterLink object files or libraries together to form another library, or to 2399289166Spetercreate an executable program. 2400289166Speter 2401289166SpeterLINK-COMMAND is a command using the C compiler that you would use to create 2402289166Spetera program from several object files. 2403289166Speter 2404289166SpeterThe following components of LINK-COMMAND are treated specially: 2405289166Speter 2406289166Speter -all-static do not do any dynamic linking at all 2407289166Speter -avoid-version do not add a version suffix if possible 2408289166Speter -bindir BINDIR specify path to binaries directory (for systems where 2409289166Speter libraries must be found in the PATH setting at runtime) 2410289166Speter -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 2411289166Speter -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 2412289166Speter -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 2413289166Speter -export-symbols SYMFILE 2414289166Speter try to export only the symbols listed in SYMFILE 2415289166Speter -export-symbols-regex REGEX 2416289166Speter try to export only the symbols matching REGEX 2417289166Speter -LLIBDIR search LIBDIR for required installed libraries 2418289166Speter -lNAME OUTPUT-FILE requires the installed library libNAME 2419289166Speter -module build a library that can dlopened 2420289166Speter -no-fast-install disable the fast-install mode 2421289166Speter -no-install link a not-installable executable 2422289166Speter -no-undefined declare that a library does not refer to external symbols 2423289166Speter -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 2424289166Speter -objectlist FILE Use a list of object files found in FILE to specify objects 2425289166Speter -precious-files-regex REGEX 2426289166Speter don't remove output files matching REGEX 2427289166Speter -release RELEASE specify package release information 2428289166Speter -rpath LIBDIR the created library will eventually be installed in LIBDIR 2429289166Speter -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 2430289166Speter -shared only do dynamic linking of libtool libraries 2431289166Speter -shrext SUFFIX override the standard shared library file extension 2432289166Speter -static do not do any dynamic linking of uninstalled libtool libraries 2433289166Speter -static-libtool-libs 2434289166Speter do not do any dynamic linking of libtool libraries 2435289166Speter -version-info CURRENT[:REVISION[:AGE]] 2436289166Speter specify library version info [each variable defaults to 0] 2437289166Speter -weak LIBNAME declare that the target provides the LIBNAME interface 2438289166Speter -Wc,FLAG 2439289166Speter -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 2440289166Speter -Wl,FLAG 2441289166Speter -Xlinker FLAG pass linker-specific FLAG directly to the linker 2442289166Speter -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 2443289166Speter 2444289166SpeterAll other options (arguments beginning with \`-') are ignored. 2445289166Speter 2446289166SpeterEvery other argument is treated as a filename. Files ending in \`.la' are 2447289166Spetertreated as uninstalled libtool libraries, other files are standard or library 2448289166Speterobject files. 2449289166Speter 2450289166SpeterIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 2451289166Speteronly library objects (\`.lo' files) may be specified, and \`-rpath' is 2452289166Speterrequired, except when creating a convenience library. 2453289166Speter 2454289166SpeterIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 2455289166Speterusing \`ar' and \`ranlib', or on Windows using \`lib'. 2456289166Speter 2457289166SpeterIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 2458289166Speteris created, otherwise an executable program is created." 2459289166Speter ;; 2460289166Speter 2461289166Speter uninstall) 2462289166Speter $ECHO \ 2463289166Speter"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 2464289166Speter 2465289166SpeterRemove libraries from an installation directory. 2466289166Speter 2467289166SpeterRM is the name of the program to use to delete files associated with each FILE 2468289166Speter(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2469289166Speterto RM. 2470289166Speter 2471289166SpeterIf FILE is a libtool library, all the files associated with it are deleted. 2472289166SpeterOtherwise, only FILE itself is deleted using RM." 2473289166Speter ;; 2474289166Speter 2475289166Speter *) 2476289166Speter func_fatal_help "invalid operation mode \`$opt_mode'" 2477289166Speter ;; 2478289166Speter esac 2479289166Speter 2480289166Speter echo 2481289166Speter $ECHO "Try \`$progname --help' for more information about other modes." 2482289166Speter} 2483289166Speter 2484289166Speter# Now that we've collected a possible --mode arg, show help if necessary 2485289166Speterif $opt_help; then 2486289166Speter if test "$opt_help" = :; then 2487289166Speter func_mode_help 2488289166Speter else 2489289166Speter { 2490289166Speter func_help noexit 2491289166Speter for opt_mode in compile link execute install finish uninstall clean; do 2492289166Speter func_mode_help 2493289166Speter done 2494289166Speter } | sed -n '1p; 2,$s/^Usage:/ or: /p' 2495289166Speter { 2496289166Speter func_help noexit 2497289166Speter for opt_mode in compile link execute install finish uninstall clean; do 2498289166Speter echo 2499289166Speter func_mode_help 2500289166Speter done 2501289166Speter } | 2502289166Speter sed '1d 2503289166Speter /^When reporting/,/^Report/{ 2504289166Speter H 2505289166Speter d 2506289166Speter } 2507289166Speter $x 2508289166Speter /information about other modes/d 2509289166Speter /more detailed .*MODE/d 2510289166Speter s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 2511289166Speter fi 2512289166Speter exit $? 2513289166Speterfi 2514289166Speter 2515289166Speter 2516289166Speter# func_mode_execute arg... 2517289166Speterfunc_mode_execute () 2518289166Speter{ 2519289166Speter $opt_debug 2520289166Speter # The first argument is the command name. 2521289166Speter cmd="$nonopt" 2522289166Speter test -z "$cmd" && \ 2523289166Speter func_fatal_help "you must specify a COMMAND" 2524289166Speter 2525289166Speter # Handle -dlopen flags immediately. 2526289166Speter for file in $opt_dlopen; do 2527289166Speter test -f "$file" \ 2528289166Speter || func_fatal_help "\`$file' is not a file" 2529289166Speter 2530289166Speter dir= 2531289166Speter case $file in 2532289166Speter *.la) 2533289166Speter func_resolve_sysroot "$file" 2534289166Speter file=$func_resolve_sysroot_result 2535289166Speter 2536289166Speter # Check to see that this really is a libtool archive. 2537289166Speter func_lalib_unsafe_p "$file" \ 2538289166Speter || func_fatal_help "\`$lib' is not a valid libtool archive" 2539289166Speter 2540289166Speter # Read the libtool library. 2541289166Speter dlname= 2542289166Speter library_names= 2543289166Speter func_source "$file" 2544289166Speter 2545289166Speter # Skip this library if it cannot be dlopened. 2546289166Speter if test -z "$dlname"; then 2547289166Speter # Warn if it was a shared library. 2548289166Speter test -n "$library_names" && \ 2549289166Speter func_warning "\`$file' was not linked with \`-export-dynamic'" 2550289166Speter continue 2551289166Speter fi 2552289166Speter 2553289166Speter func_dirname "$file" "" "." 2554289166Speter dir="$func_dirname_result" 2555289166Speter 2556289166Speter if test -f "$dir/$objdir/$dlname"; then 2557289166Speter func_append dir "/$objdir" 2558251883Speter else 2559289166Speter if test ! -f "$dir/$dlname"; then 2560289166Speter func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 2561289166Speter fi 2562251883Speter fi 2563289166Speter ;; 2564289166Speter 2565289166Speter *.lo) 2566289166Speter # Just add the directory containing the .lo file. 2567289166Speter func_dirname "$file" "" "." 2568289166Speter dir="$func_dirname_result" 2569289166Speter ;; 2570289166Speter 2571289166Speter *) 2572289166Speter func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 2573289166Speter continue 2574289166Speter ;; 2575289166Speter esac 2576289166Speter 2577289166Speter # Get the absolute pathname. 2578289166Speter absdir=`cd "$dir" && pwd` 2579289166Speter test -n "$absdir" && dir="$absdir" 2580289166Speter 2581289166Speter # Now add the directory to shlibpath_var. 2582289166Speter if eval "test -z \"\$$shlibpath_var\""; then 2583289166Speter eval "$shlibpath_var=\"\$dir\"" 2584289166Speter else 2585289166Speter eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 2586251883Speter fi 2587289166Speter done 2588251883Speter 2589289166Speter # This variable tells wrapper scripts just to set shlibpath_var 2590289166Speter # rather than running their programs. 2591289166Speter libtool_execute_magic="$magic" 2592251883Speter 2593289166Speter # Check if any of the arguments is a wrapper script. 2594289166Speter args= 2595289166Speter for file 2596289166Speter do 2597289166Speter case $file in 2598289166Speter -* | *.la | *.lo ) ;; 2599289166Speter *) 2600289166Speter # Do a test to see if this is really a libtool program. 2601289166Speter if func_ltwrapper_script_p "$file"; then 2602289166Speter func_source "$file" 2603289166Speter # Transform arg to wrapped name. 2604289166Speter file="$progdir/$program" 2605289166Speter elif func_ltwrapper_executable_p "$file"; then 2606289166Speter func_ltwrapper_scriptname "$file" 2607289166Speter func_source "$func_ltwrapper_scriptname_result" 2608289166Speter # Transform arg to wrapped name. 2609289166Speter file="$progdir/$program" 2610289166Speter fi 2611289166Speter ;; 2612289166Speter esac 2613289166Speter # Quote arguments (to preserve shell metacharacters). 2614289166Speter func_append_quoted args "$file" 2615289166Speter done 2616289166Speter 2617289166Speter if test "X$opt_dry_run" = Xfalse; then 2618289166Speter if test -n "$shlibpath_var"; then 2619289166Speter # Export the shlibpath_var. 2620289166Speter eval "export $shlibpath_var" 2621289166Speter fi 2622289166Speter 2623289166Speter # Restore saved environment variables 2624289166Speter for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 2625289166Speter do 2626289166Speter eval "if test \"\${save_$lt_var+set}\" = set; then 2627289166Speter $lt_var=\$save_$lt_var; export $lt_var 2628289166Speter else 2629289166Speter $lt_unset $lt_var 2630289166Speter fi" 2631289166Speter done 2632289166Speter 2633289166Speter # Now prepare to actually exec the command. 2634289166Speter exec_cmd="\$cmd$args" 2635251883Speter else 2636289166Speter # Display what would be done. 2637289166Speter if test -n "$shlibpath_var"; then 2638289166Speter eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 2639289166Speter echo "export $shlibpath_var" 2640289166Speter fi 2641289166Speter $ECHO "$cmd$args" 2642289166Speter exit $EXIT_SUCCESS 2643289166Speter fi 2644289166Speter} 2645251883Speter 2646289166Spetertest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 2647289166Speter 2648289166Speter 2649289166Speter# func_mode_finish arg... 2650289166Speterfunc_mode_finish () 2651289166Speter{ 2652289166Speter $opt_debug 2653289166Speter libs= 2654289166Speter libdirs= 2655289166Speter admincmds= 2656289166Speter 2657289166Speter for opt in "$nonopt" ${1+"$@"} 2658289166Speter do 2659289166Speter if test -d "$opt"; then 2660289166Speter func_append libdirs " $opt" 2661289166Speter 2662289166Speter elif test -f "$opt"; then 2663289166Speter if func_lalib_unsafe_p "$opt"; then 2664289166Speter func_append libs " $opt" 2665289166Speter else 2666289166Speter func_warning "\`$opt' is not a valid libtool archive" 2667289166Speter fi 2668289166Speter 2669289166Speter else 2670289166Speter func_fatal_error "invalid argument \`$opt'" 2671289166Speter fi 2672289166Speter done 2673289166Speter 2674289166Speter if test -n "$libs"; then 2675289166Speter if test -n "$lt_sysroot"; then 2676289166Speter sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 2677289166Speter sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 2678289166Speter else 2679289166Speter sysroot_cmd= 2680289166Speter fi 2681289166Speter 2682289166Speter # Remove sysroot references 2683289166Speter if $opt_dry_run; then 2684289166Speter for lib in $libs; do 2685289166Speter echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 2686289166Speter done 2687289166Speter else 2688289166Speter tmpdir=`func_mktempdir` 2689289166Speter for lib in $libs; do 2690289166Speter sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 2691289166Speter > $tmpdir/tmp-la 2692289166Speter mv -f $tmpdir/tmp-la $lib 2693289166Speter done 2694289166Speter ${RM}r "$tmpdir" 2695289166Speter fi 2696251883Speter fi 2697251883Speter 2698289166Speter if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2699289166Speter for libdir in $libdirs; do 2700289166Speter if test -n "$finish_cmds"; then 2701289166Speter # Do each command in the finish commands. 2702289166Speter func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 2703289166Speter'"$cmd"'"' 2704289166Speter fi 2705289166Speter if test -n "$finish_eval"; then 2706289166Speter # Do the single finish_eval. 2707289166Speter eval cmds=\"$finish_eval\" 2708289166Speter $opt_dry_run || eval "$cmds" || func_append admincmds " 2709289166Speter $cmds" 2710289166Speter fi 2711289166Speter done 2712289166Speter fi 2713251883Speter 2714289166Speter # Exit here if they wanted silent mode. 2715289166Speter $opt_silent && exit $EXIT_SUCCESS 2716289166Speter 2717289166Speter if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2718289166Speter echo "----------------------------------------------------------------------" 2719289166Speter echo "Libraries have been installed in:" 2720289166Speter for libdir in $libdirs; do 2721289166Speter $ECHO " $libdir" 2722289166Speter done 2723289166Speter echo 2724289166Speter echo "If you ever happen to want to link against installed libraries" 2725289166Speter echo "in a given directory, LIBDIR, you must either use libtool, and" 2726289166Speter echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 2727289166Speter echo "flag during linking and do at least one of the following:" 2728289166Speter if test -n "$shlibpath_var"; then 2729289166Speter echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 2730289166Speter echo " during execution" 2731289166Speter fi 2732289166Speter if test -n "$runpath_var"; then 2733289166Speter echo " - add LIBDIR to the \`$runpath_var' environment variable" 2734289166Speter echo " during linking" 2735289166Speter fi 2736289166Speter if test -n "$hardcode_libdir_flag_spec"; then 2737289166Speter libdir=LIBDIR 2738289166Speter eval flag=\"$hardcode_libdir_flag_spec\" 2739289166Speter 2740289166Speter $ECHO " - use the \`$flag' linker flag" 2741289166Speter fi 2742289166Speter if test -n "$admincmds"; then 2743289166Speter $ECHO " - have your system administrator run these commands:$admincmds" 2744289166Speter fi 2745289166Speter if test -f /etc/ld.so.conf; then 2746289166Speter echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 2747289166Speter fi 2748289166Speter echo 2749289166Speter 2750289166Speter echo "See any operating system documentation about shared libraries for" 2751289166Speter case $host in 2752289166Speter solaris2.[6789]|solaris2.1[0-9]) 2753289166Speter echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 2754289166Speter echo "pages." 2755289166Speter ;; 2756289166Speter *) 2757289166Speter echo "more information, such as the ld(1) and ld.so(8) manual pages." 2758289166Speter ;; 2759289166Speter esac 2760289166Speter echo "----------------------------------------------------------------------" 2761251883Speter fi 2762289166Speter exit $EXIT_SUCCESS 2763289166Speter} 2764251883Speter 2765289166Spetertest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 2766289166Speter 2767289166Speter 2768289166Speter# func_mode_install arg... 2769289166Speterfunc_mode_install () 2770289166Speter{ 2771289166Speter $opt_debug 2772289166Speter # There may be an optional sh(1) argument at the beginning of 2773289166Speter # install_prog (especially on Windows NT). 2774289166Speter if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2775289166Speter # Allow the use of GNU shtool's install command. 2776289166Speter case $nonopt in *shtool*) :;; *) false;; esac; then 2777289166Speter # Aesthetically quote it. 2778289166Speter func_quote_for_eval "$nonopt" 2779289166Speter install_prog="$func_quote_for_eval_result " 2780289166Speter arg=$1 2781289166Speter shift 2782289166Speter else 2783289166Speter install_prog= 2784289166Speter arg=$nonopt 2785289166Speter fi 2786289166Speter 2787289166Speter # The real first argument should be the name of the installation program. 2788289166Speter # Aesthetically quote it. 2789289166Speter func_quote_for_eval "$arg" 2790289166Speter func_append install_prog "$func_quote_for_eval_result" 2791289166Speter install_shared_prog=$install_prog 2792289166Speter case " $install_prog " in 2793289166Speter *[\\\ /]cp\ *) install_cp=: ;; 2794289166Speter *) install_cp=false ;; 2795289166Speter esac 2796289166Speter 2797289166Speter # We need to accept at least all the BSD install flags. 2798289166Speter dest= 2799289166Speter files= 2800289166Speter opts= 2801289166Speter prev= 2802289166Speter install_type= 2803289166Speter isdir=no 2804289166Speter stripme= 2805289166Speter no_mode=: 2806289166Speter for arg 2807289166Speter do 2808289166Speter arg2= 2809289166Speter if test -n "$dest"; then 2810289166Speter func_append files " $dest" 2811289166Speter dest=$arg 2812289166Speter continue 2813289166Speter fi 2814289166Speter 2815289166Speter case $arg in 2816289166Speter -d) isdir=yes ;; 2817289166Speter -f) 2818289166Speter if $install_cp; then :; else 2819289166Speter prev=$arg 2820289166Speter fi 2821289166Speter ;; 2822289166Speter -g | -m | -o) 2823289166Speter prev=$arg 2824289166Speter ;; 2825289166Speter -s) 2826289166Speter stripme=" -s" 2827289166Speter continue 2828289166Speter ;; 2829289166Speter -*) 2830289166Speter ;; 2831289166Speter *) 2832289166Speter # If the previous option needed an argument, then skip it. 2833289166Speter if test -n "$prev"; then 2834289166Speter if test "x$prev" = x-m && test -n "$install_override_mode"; then 2835289166Speter arg2=$install_override_mode 2836289166Speter no_mode=false 2837289166Speter fi 2838289166Speter prev= 2839289166Speter else 2840289166Speter dest=$arg 2841289166Speter continue 2842289166Speter fi 2843289166Speter ;; 2844289166Speter esac 2845289166Speter 2846289166Speter # Aesthetically quote the argument. 2847289166Speter func_quote_for_eval "$arg" 2848289166Speter func_append install_prog " $func_quote_for_eval_result" 2849289166Speter if test -n "$arg2"; then 2850289166Speter func_quote_for_eval "$arg2" 2851289166Speter fi 2852289166Speter func_append install_shared_prog " $func_quote_for_eval_result" 2853289166Speter done 2854289166Speter 2855289166Speter test -z "$install_prog" && \ 2856289166Speter func_fatal_help "you must specify an install program" 2857289166Speter 2858289166Speter test -n "$prev" && \ 2859289166Speter func_fatal_help "the \`$prev' option requires an argument" 2860289166Speter 2861289166Speter if test -n "$install_override_mode" && $no_mode; then 2862289166Speter if $install_cp; then :; else 2863289166Speter func_quote_for_eval "$install_override_mode" 2864289166Speter func_append install_shared_prog " -m $func_quote_for_eval_result" 2865289166Speter fi 2866289166Speter fi 2867289166Speter 2868289166Speter if test -z "$files"; then 2869289166Speter if test -z "$dest"; then 2870289166Speter func_fatal_help "no file or destination specified" 2871289166Speter else 2872289166Speter func_fatal_help "you must specify a destination" 2873289166Speter fi 2874289166Speter fi 2875289166Speter 2876289166Speter # Strip any trailing slash from the destination. 2877289166Speter func_stripname '' '/' "$dest" 2878289166Speter dest=$func_stripname_result 2879289166Speter 2880289166Speter # Check to see that the destination is a directory. 2881289166Speter test -d "$dest" && isdir=yes 2882289166Speter if test "$isdir" = yes; then 2883289166Speter destdir="$dest" 2884289166Speter destname= 2885289166Speter else 2886289166Speter func_dirname_and_basename "$dest" "" "." 2887289166Speter destdir="$func_dirname_result" 2888289166Speter destname="$func_basename_result" 2889289166Speter 2890289166Speter # Not a directory, so check to see that there is only one file specified. 2891289166Speter set dummy $files; shift 2892289166Speter test "$#" -gt 1 && \ 2893289166Speter func_fatal_help "\`$dest' is not a directory" 2894289166Speter fi 2895289166Speter case $destdir in 2896289166Speter [\\/]* | [A-Za-z]:[\\/]*) ;; 2897289166Speter *) 2898289166Speter for file in $files; do 2899289166Speter case $file in 2900289166Speter *.lo) ;; 2901289166Speter *) 2902289166Speter func_fatal_help "\`$destdir' must be an absolute directory name" 2903289166Speter ;; 2904289166Speter esac 2905289166Speter done 2906289166Speter ;; 2907289166Speter esac 2908289166Speter 2909289166Speter # This variable tells wrapper scripts just to set variables rather 2910289166Speter # than running their programs. 2911289166Speter libtool_install_magic="$magic" 2912289166Speter 2913289166Speter staticlibs= 2914289166Speter future_libdirs= 2915289166Speter current_libdirs= 2916289166Speter for file in $files; do 2917289166Speter 2918289166Speter # Do each installation. 2919289166Speter case $file in 2920289166Speter *.$libext) 2921289166Speter # Do the static libraries later. 2922289166Speter func_append staticlibs " $file" 2923289166Speter ;; 2924289166Speter 2925289166Speter *.la) 2926289166Speter func_resolve_sysroot "$file" 2927289166Speter file=$func_resolve_sysroot_result 2928289166Speter 2929289166Speter # Check to see that this really is a libtool archive. 2930289166Speter func_lalib_unsafe_p "$file" \ 2931289166Speter || func_fatal_help "\`$file' is not a valid libtool archive" 2932289166Speter 2933289166Speter library_names= 2934289166Speter old_library= 2935289166Speter relink_command= 2936289166Speter func_source "$file" 2937289166Speter 2938289166Speter # Add the libdir to current_libdirs if it is the destination. 2939289166Speter if test "X$destdir" = "X$libdir"; then 2940289166Speter case "$current_libdirs " in 2941289166Speter *" $libdir "*) ;; 2942289166Speter *) func_append current_libdirs " $libdir" ;; 2943289166Speter esac 2944289166Speter else 2945289166Speter # Note the libdir as a future libdir. 2946289166Speter case "$future_libdirs " in 2947289166Speter *" $libdir "*) ;; 2948289166Speter *) func_append future_libdirs " $libdir" ;; 2949289166Speter esac 2950289166Speter fi 2951289166Speter 2952289166Speter func_dirname "$file" "/" "" 2953289166Speter dir="$func_dirname_result" 2954289166Speter func_append dir "$objdir" 2955289166Speter 2956289166Speter if test -n "$relink_command"; then 2957289166Speter # Determine the prefix the user has applied to our future dir. 2958289166Speter inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2959289166Speter 2960289166Speter # Don't allow the user to place us outside of our expected 2961289166Speter # location b/c this prevents finding dependent libraries that 2962289166Speter # are installed to the same prefix. 2963289166Speter # At present, this check doesn't affect windows .dll's that 2964289166Speter # are installed into $libdir/../bin (currently, that works fine) 2965289166Speter # but it's something to keep an eye on. 2966289166Speter test "$inst_prefix_dir" = "$destdir" && \ 2967289166Speter func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2968289166Speter 2969289166Speter if test -n "$inst_prefix_dir"; then 2970289166Speter # Stick the inst_prefix_dir data into the link command. 2971289166Speter relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2972289166Speter else 2973289166Speter relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2974289166Speter fi 2975289166Speter 2976289166Speter func_warning "relinking \`$file'" 2977289166Speter func_show_eval "$relink_command" \ 2978289166Speter 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2979289166Speter fi 2980289166Speter 2981289166Speter # See the names of the shared library. 2982289166Speter set dummy $library_names; shift 2983289166Speter if test -n "$1"; then 2984289166Speter realname="$1" 2985289166Speter shift 2986289166Speter 2987289166Speter srcname="$realname" 2988289166Speter test -n "$relink_command" && srcname="$realname"T 2989289166Speter 2990289166Speter # Install the shared library and build the symlinks. 2991289166Speter func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2992289166Speter 'exit $?' 2993289166Speter tstripme="$stripme" 2994289166Speter case $host_os in 2995289166Speter cygwin* | mingw* | pw32* | cegcc*) 2996289166Speter case $realname in 2997289166Speter *.dll.a) 2998289166Speter tstripme="" 2999289166Speter ;; 3000289166Speter esac 3001289166Speter ;; 3002289166Speter esac 3003289166Speter if test -n "$tstripme" && test -n "$striplib"; then 3004289166Speter func_show_eval "$striplib $destdir/$realname" 'exit $?' 3005289166Speter fi 3006289166Speter 3007289166Speter if test "$#" -gt 0; then 3008289166Speter # Delete the old symlinks, and create new ones. 3009289166Speter # Try `ln -sf' first, because the `ln' binary might depend on 3010289166Speter # the symlink we replace! Solaris /bin/ln does not understand -f, 3011289166Speter # so we also need to try rm && ln -s. 3012289166Speter for linkname 3013289166Speter do 3014289166Speter test "$linkname" != "$realname" \ 3015289166Speter && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 3016289166Speter done 3017289166Speter fi 3018289166Speter 3019289166Speter # Do each command in the postinstall commands. 3020289166Speter lib="$destdir/$realname" 3021289166Speter func_execute_cmds "$postinstall_cmds" 'exit $?' 3022289166Speter fi 3023289166Speter 3024289166Speter # Install the pseudo-library for information purposes. 3025289166Speter func_basename "$file" 3026289166Speter name="$func_basename_result" 3027289166Speter instname="$dir/$name"i 3028289166Speter func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 3029289166Speter 3030289166Speter # Maybe install the static library, too. 3031289166Speter test -n "$old_library" && func_append staticlibs " $dir/$old_library" 3032289166Speter ;; 3033289166Speter 3034289166Speter *.lo) 3035289166Speter # Install (i.e. copy) a libtool object. 3036289166Speter 3037289166Speter # Figure out destination file name, if it wasn't already specified. 3038289166Speter if test -n "$destname"; then 3039289166Speter destfile="$destdir/$destname" 3040289166Speter else 3041289166Speter func_basename "$file" 3042289166Speter destfile="$func_basename_result" 3043289166Speter destfile="$destdir/$destfile" 3044289166Speter fi 3045289166Speter 3046289166Speter # Deduce the name of the destination old-style object file. 3047289166Speter case $destfile in 3048289166Speter *.lo) 3049289166Speter func_lo2o "$destfile" 3050289166Speter staticdest=$func_lo2o_result 3051289166Speter ;; 3052289166Speter *.$objext) 3053289166Speter staticdest="$destfile" 3054289166Speter destfile= 3055289166Speter ;; 3056289166Speter *) 3057289166Speter func_fatal_help "cannot copy a libtool object to \`$destfile'" 3058289166Speter ;; 3059289166Speter esac 3060289166Speter 3061289166Speter # Install the libtool object if requested. 3062289166Speter test -n "$destfile" && \ 3063289166Speter func_show_eval "$install_prog $file $destfile" 'exit $?' 3064289166Speter 3065289166Speter # Install the old object if enabled. 3066289166Speter if test "$build_old_libs" = yes; then 3067289166Speter # Deduce the name of the old-style object file. 3068289166Speter func_lo2o "$file" 3069289166Speter staticobj=$func_lo2o_result 3070289166Speter func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 3071289166Speter fi 3072289166Speter exit $EXIT_SUCCESS 3073289166Speter ;; 3074289166Speter 3075289166Speter *) 3076289166Speter # Figure out destination file name, if it wasn't already specified. 3077289166Speter if test -n "$destname"; then 3078289166Speter destfile="$destdir/$destname" 3079289166Speter else 3080289166Speter func_basename "$file" 3081289166Speter destfile="$func_basename_result" 3082289166Speter destfile="$destdir/$destfile" 3083289166Speter fi 3084289166Speter 3085289166Speter # If the file is missing, and there is a .exe on the end, strip it 3086289166Speter # because it is most likely a libtool script we actually want to 3087289166Speter # install 3088289166Speter stripped_ext="" 3089289166Speter case $file in 3090289166Speter *.exe) 3091289166Speter if test ! -f "$file"; then 3092289166Speter func_stripname '' '.exe' "$file" 3093289166Speter file=$func_stripname_result 3094289166Speter stripped_ext=".exe" 3095289166Speter fi 3096289166Speter ;; 3097289166Speter esac 3098289166Speter 3099289166Speter # Do a test to see if this is really a libtool program. 3100289166Speter case $host in 3101289166Speter *cygwin* | *mingw*) 3102289166Speter if func_ltwrapper_executable_p "$file"; then 3103289166Speter func_ltwrapper_scriptname "$file" 3104289166Speter wrapper=$func_ltwrapper_scriptname_result 3105289166Speter else 3106289166Speter func_stripname '' '.exe' "$file" 3107289166Speter wrapper=$func_stripname_result 3108289166Speter fi 3109289166Speter ;; 3110289166Speter *) 3111289166Speter wrapper=$file 3112289166Speter ;; 3113289166Speter esac 3114289166Speter if func_ltwrapper_script_p "$wrapper"; then 3115289166Speter notinst_deplibs= 3116289166Speter relink_command= 3117289166Speter 3118289166Speter func_source "$wrapper" 3119289166Speter 3120289166Speter # Check the variables that should have been set. 3121289166Speter test -z "$generated_by_libtool_version" && \ 3122289166Speter func_fatal_error "invalid libtool wrapper script \`$wrapper'" 3123289166Speter 3124289166Speter finalize=yes 3125289166Speter for lib in $notinst_deplibs; do 3126289166Speter # Check to see that each library is installed. 3127289166Speter libdir= 3128289166Speter if test -f "$lib"; then 3129289166Speter func_source "$lib" 3130289166Speter fi 3131289166Speter libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 3132289166Speter if test -n "$libdir" && test ! -f "$libfile"; then 3133289166Speter func_warning "\`$lib' has not been installed in \`$libdir'" 3134289166Speter finalize=no 3135289166Speter fi 3136289166Speter done 3137289166Speter 3138289166Speter relink_command= 3139289166Speter func_source "$wrapper" 3140289166Speter 3141289166Speter outputname= 3142289166Speter if test "$fast_install" = no && test -n "$relink_command"; then 3143289166Speter $opt_dry_run || { 3144289166Speter if test "$finalize" = yes; then 3145289166Speter tmpdir=`func_mktempdir` 3146289166Speter func_basename "$file$stripped_ext" 3147289166Speter file="$func_basename_result" 3148289166Speter outputname="$tmpdir/$file" 3149289166Speter # Replace the output file specification. 3150289166Speter relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 3151289166Speter 3152289166Speter $opt_silent || { 3153289166Speter func_quote_for_expand "$relink_command" 3154289166Speter eval "func_echo $func_quote_for_expand_result" 3155289166Speter } 3156289166Speter if eval "$relink_command"; then : 3157289166Speter else 3158289166Speter func_error "error: relink \`$file' with the above command before installing it" 3159289166Speter $opt_dry_run || ${RM}r "$tmpdir" 3160289166Speter continue 3161289166Speter fi 3162289166Speter file="$outputname" 3163289166Speter else 3164289166Speter func_warning "cannot relink \`$file'" 3165289166Speter fi 3166289166Speter } 3167289166Speter else 3168289166Speter # Install the binary that we compiled earlier. 3169289166Speter file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 3170289166Speter fi 3171289166Speter fi 3172289166Speter 3173289166Speter # remove .exe since cygwin /usr/bin/install will append another 3174289166Speter # one anyway 3175289166Speter case $install_prog,$host in 3176289166Speter */usr/bin/install*,*cygwin*) 3177289166Speter case $file:$destfile in 3178289166Speter *.exe:*.exe) 3179289166Speter # this is ok 3180289166Speter ;; 3181289166Speter *.exe:*) 3182289166Speter destfile=$destfile.exe 3183289166Speter ;; 3184289166Speter *:*.exe) 3185289166Speter func_stripname '' '.exe' "$destfile" 3186289166Speter destfile=$func_stripname_result 3187289166Speter ;; 3188289166Speter esac 3189289166Speter ;; 3190289166Speter esac 3191289166Speter func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 3192289166Speter $opt_dry_run || if test -n "$outputname"; then 3193289166Speter ${RM}r "$tmpdir" 3194289166Speter fi 3195289166Speter ;; 3196289166Speter esac 3197289166Speter done 3198289166Speter 3199289166Speter for file in $staticlibs; do 3200289166Speter func_basename "$file" 3201289166Speter name="$func_basename_result" 3202289166Speter 3203289166Speter # Set up the ranlib parameters. 3204289166Speter oldlib="$destdir/$name" 3205289166Speter func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 3206289166Speter tool_oldlib=$func_to_tool_file_result 3207289166Speter 3208289166Speter func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 3209289166Speter 3210289166Speter if test -n "$stripme" && test -n "$old_striplib"; then 3211289166Speter func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 3212289166Speter fi 3213289166Speter 3214289166Speter # Do each command in the postinstall commands. 3215289166Speter func_execute_cmds "$old_postinstall_cmds" 'exit $?' 3216289166Speter done 3217289166Speter 3218289166Speter test -n "$future_libdirs" && \ 3219289166Speter func_warning "remember to run \`$progname --finish$future_libdirs'" 3220289166Speter 3221289166Speter if test -n "$current_libdirs"; then 3222289166Speter # Maybe just do a dry run. 3223289166Speter $opt_dry_run && current_libdirs=" -n$current_libdirs" 3224289166Speter exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 3225289166Speter else 3226289166Speter exit $EXIT_SUCCESS 3227289166Speter fi 3228289166Speter} 3229289166Speter 3230289166Spetertest "$opt_mode" = install && func_mode_install ${1+"$@"} 3231289166Speter 3232289166Speter 3233289166Speter# func_generate_dlsyms outputname originator pic_p 3234289166Speter# Extract symbols from dlprefiles and create ${outputname}S.o with 3235289166Speter# a dlpreopen symbol table. 3236289166Speterfunc_generate_dlsyms () 3237289166Speter{ 3238289166Speter $opt_debug 3239289166Speter my_outputname="$1" 3240289166Speter my_originator="$2" 3241289166Speter my_pic_p="${3-no}" 3242289166Speter my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 3243289166Speter my_dlsyms= 3244289166Speter 3245289166Speter if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 3246289166Speter if test -n "$NM" && test -n "$global_symbol_pipe"; then 3247289166Speter my_dlsyms="${my_outputname}S.c" 3248289166Speter else 3249289166Speter func_error "not configured to extract global symbols from dlpreopened files" 3250289166Speter fi 3251289166Speter fi 3252289166Speter 3253289166Speter if test -n "$my_dlsyms"; then 3254289166Speter case $my_dlsyms in 3255289166Speter "") ;; 3256289166Speter *.c) 3257289166Speter # Discover the nlist of each of the dlfiles. 3258289166Speter nlist="$output_objdir/${my_outputname}.nm" 3259289166Speter 3260289166Speter func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 3261289166Speter 3262289166Speter # Parse the name list into a source file. 3263289166Speter func_verbose "creating $output_objdir/$my_dlsyms" 3264289166Speter 3265289166Speter $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 3266289166Speter/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 3267289166Speter/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 3268289166Speter 3269289166Speter#ifdef __cplusplus 3270289166Speterextern \"C\" { 3271289166Speter#endif 3272289166Speter 3273289166Speter#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 3274289166Speter#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 3275289166Speter#endif 3276289166Speter 3277289166Speter/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 3278289166Speter#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 3279289166Speter/* DATA imports from DLLs on WIN32 con't be const, because runtime 3280289166Speter relocations are performed -- see ld's documentation on pseudo-relocs. */ 3281289166Speter# define LT_DLSYM_CONST 3282289166Speter#elif defined(__osf__) 3283289166Speter/* This system does not cope well with relocations in const data. */ 3284289166Speter# define LT_DLSYM_CONST 3285289166Speter#else 3286289166Speter# define LT_DLSYM_CONST const 3287289166Speter#endif 3288289166Speter 3289289166Speter/* External symbol declarations for the compiler. */\ 3290289166Speter" 3291289166Speter 3292289166Speter if test "$dlself" = yes; then 3293289166Speter func_verbose "generating symbol list for \`$output'" 3294289166Speter 3295289166Speter $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 3296289166Speter 3297289166Speter # Add our own program objects to the symbol list. 3298289166Speter progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 3299289166Speter for progfile in $progfiles; do 3300289166Speter func_to_tool_file "$progfile" func_convert_file_msys_to_w32 3301289166Speter func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 3302289166Speter $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 3303289166Speter done 3304289166Speter 3305289166Speter if test -n "$exclude_expsyms"; then 3306289166Speter $opt_dry_run || { 3307289166Speter eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 3308289166Speter eval '$MV "$nlist"T "$nlist"' 3309289166Speter } 3310289166Speter fi 3311289166Speter 3312289166Speter if test -n "$export_symbols_regex"; then 3313289166Speter $opt_dry_run || { 3314289166Speter eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 3315289166Speter eval '$MV "$nlist"T "$nlist"' 3316289166Speter } 3317289166Speter fi 3318289166Speter 3319289166Speter # Prepare the list of exported symbols 3320289166Speter if test -z "$export_symbols"; then 3321289166Speter export_symbols="$output_objdir/$outputname.exp" 3322289166Speter $opt_dry_run || { 3323289166Speter $RM $export_symbols 3324289166Speter eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 3325289166Speter case $host in 3326289166Speter *cygwin* | *mingw* | *cegcc* ) 3327289166Speter eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3328289166Speter eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 3329289166Speter ;; 3330289166Speter esac 3331289166Speter } 3332289166Speter else 3333289166Speter $opt_dry_run || { 3334289166Speter eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 3335289166Speter eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 3336289166Speter eval '$MV "$nlist"T "$nlist"' 3337289166Speter case $host in 3338289166Speter *cygwin* | *mingw* | *cegcc* ) 3339289166Speter eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3340289166Speter eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 3341289166Speter ;; 3342289166Speter esac 3343289166Speter } 3344289166Speter fi 3345289166Speter fi 3346289166Speter 3347289166Speter for dlprefile in $dlprefiles; do 3348289166Speter func_verbose "extracting global C symbols from \`$dlprefile'" 3349289166Speter func_basename "$dlprefile" 3350289166Speter name="$func_basename_result" 3351289166Speter case $host in 3352289166Speter *cygwin* | *mingw* | *cegcc* ) 3353289166Speter # if an import library, we need to obtain dlname 3354289166Speter if func_win32_import_lib_p "$dlprefile"; then 3355289166Speter func_tr_sh "$dlprefile" 3356289166Speter eval "curr_lafile=\$libfile_$func_tr_sh_result" 3357289166Speter dlprefile_dlbasename="" 3358289166Speter if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 3359289166Speter # Use subshell, to avoid clobbering current variable values 3360289166Speter dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 3361289166Speter if test -n "$dlprefile_dlname" ; then 3362289166Speter func_basename "$dlprefile_dlname" 3363289166Speter dlprefile_dlbasename="$func_basename_result" 3364289166Speter else 3365289166Speter # no lafile. user explicitly requested -dlpreopen <import library>. 3366289166Speter $sharedlib_from_linklib_cmd "$dlprefile" 3367289166Speter dlprefile_dlbasename=$sharedlib_from_linklib_result 3368289166Speter fi 3369289166Speter fi 3370289166Speter $opt_dry_run || { 3371289166Speter if test -n "$dlprefile_dlbasename" ; then 3372289166Speter eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 3373289166Speter else 3374289166Speter func_warning "Could not compute DLL name from $name" 3375289166Speter eval '$ECHO ": $name " >> "$nlist"' 3376289166Speter fi 3377289166Speter func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3378289166Speter eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 3379289166Speter $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 3380289166Speter } 3381289166Speter else # not an import lib 3382289166Speter $opt_dry_run || { 3383289166Speter eval '$ECHO ": $name " >> "$nlist"' 3384289166Speter func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3385289166Speter eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3386289166Speter } 3387289166Speter fi 3388289166Speter ;; 3389289166Speter *) 3390289166Speter $opt_dry_run || { 3391289166Speter eval '$ECHO ": $name " >> "$nlist"' 3392289166Speter func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 3393289166Speter eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 3394289166Speter } 3395289166Speter ;; 3396289166Speter esac 3397289166Speter done 3398289166Speter 3399289166Speter $opt_dry_run || { 3400289166Speter # Make sure we have at least an empty file. 3401289166Speter test -f "$nlist" || : > "$nlist" 3402289166Speter 3403289166Speter if test -n "$exclude_expsyms"; then 3404289166Speter $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 3405289166Speter $MV "$nlist"T "$nlist" 3406289166Speter fi 3407289166Speter 3408289166Speter # Try sorting and uniquifying the output. 3409289166Speter if $GREP -v "^: " < "$nlist" | 3410289166Speter if sort -k 3 </dev/null >/dev/null 2>&1; then 3411289166Speter sort -k 3 3412289166Speter else 3413289166Speter sort +2 3414289166Speter fi | 3415289166Speter uniq > "$nlist"S; then 3416289166Speter : 3417289166Speter else 3418289166Speter $GREP -v "^: " < "$nlist" > "$nlist"S 3419289166Speter fi 3420289166Speter 3421289166Speter if test -f "$nlist"S; then 3422289166Speter eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 3423289166Speter else 3424289166Speter echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 3425289166Speter fi 3426289166Speter 3427289166Speter echo >> "$output_objdir/$my_dlsyms" "\ 3428289166Speter 3429289166Speter/* The mapping between symbol names and symbols. */ 3430289166Spetertypedef struct { 3431289166Speter const char *name; 3432289166Speter void *address; 3433289166Speter} lt_dlsymlist; 3434289166Speterextern LT_DLSYM_CONST lt_dlsymlist 3435289166Speterlt_${my_prefix}_LTX_preloaded_symbols[]; 3436289166SpeterLT_DLSYM_CONST lt_dlsymlist 3437289166Speterlt_${my_prefix}_LTX_preloaded_symbols[] = 3438289166Speter{\ 3439289166Speter { \"$my_originator\", (void *) 0 }," 3440289166Speter 3441289166Speter case $need_lib_prefix in 3442289166Speter no) 3443289166Speter eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 3444289166Speter ;; 3445289166Speter *) 3446289166Speter eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 3447289166Speter ;; 3448289166Speter esac 3449289166Speter echo >> "$output_objdir/$my_dlsyms" "\ 3450289166Speter {0, (void *) 0} 3451289166Speter}; 3452289166Speter 3453289166Speter/* This works around a problem in FreeBSD linker */ 3454289166Speter#ifdef FREEBSD_WORKAROUND 3455289166Speterstatic const void *lt_preloaded_setup() { 3456289166Speter return lt_${my_prefix}_LTX_preloaded_symbols; 3457289166Speter} 3458289166Speter#endif 3459289166Speter 3460289166Speter#ifdef __cplusplus 3461289166Speter} 3462289166Speter#endif\ 3463289166Speter" 3464289166Speter } # !$opt_dry_run 3465289166Speter 3466289166Speter pic_flag_for_symtable= 3467289166Speter case "$compile_command " in 3468289166Speter *" -static "*) ;; 3469289166Speter *) 3470289166Speter case $host in 3471289166Speter # compiling the symbol table file with pic_flag works around 3472289166Speter # a FreeBSD bug that causes programs to crash when -lm is 3473289166Speter # linked before any other PIC object. But we must not use 3474289166Speter # pic_flag when linking with -static. The problem exists in 3475289166Speter # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 3476289166Speter *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 3477289166Speter pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 3478289166Speter *-*-hpux*) 3479289166Speter pic_flag_for_symtable=" $pic_flag" ;; 3480289166Speter *) 3481289166Speter if test "X$my_pic_p" != Xno; then 3482289166Speter pic_flag_for_symtable=" $pic_flag" 3483289166Speter fi 3484289166Speter ;; 3485289166Speter esac 3486289166Speter ;; 3487289166Speter esac 3488289166Speter symtab_cflags= 3489289166Speter for arg in $LTCFLAGS; do 3490289166Speter case $arg in 3491289166Speter -pie | -fpie | -fPIE) ;; 3492289166Speter *) func_append symtab_cflags " $arg" ;; 3493289166Speter esac 3494289166Speter done 3495289166Speter 3496289166Speter # Now compile the dynamic symbol file. 3497289166Speter func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 3498289166Speter 3499289166Speter # Clean up the generated files. 3500289166Speter func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 3501289166Speter 3502289166Speter # Transform the symbol file into the correct name. 3503289166Speter symfileobj="$output_objdir/${my_outputname}S.$objext" 3504289166Speter case $host in 3505289166Speter *cygwin* | *mingw* | *cegcc* ) 3506289166Speter if test -f "$output_objdir/$my_outputname.def"; then 3507289166Speter compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3508289166Speter finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3509289166Speter else 3510289166Speter compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3511289166Speter finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3512289166Speter fi 3513289166Speter ;; 3514289166Speter *) 3515289166Speter compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3516289166Speter finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3517289166Speter ;; 3518289166Speter esac 3519289166Speter ;; 3520289166Speter *) 3521289166Speter func_fatal_error "unknown suffix for \`$my_dlsyms'" 3522289166Speter ;; 3523289166Speter esac 3524289166Speter else 3525289166Speter # We keep going just in case the user didn't refer to 3526289166Speter # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 3527289166Speter # really was required. 3528289166Speter 3529289166Speter # Nullify the symbol file. 3530289166Speter compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 3531289166Speter finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 3532289166Speter fi 3533289166Speter} 3534289166Speter 3535289166Speter# func_win32_libid arg 3536289166Speter# return the library type of file 'arg' 3537289166Speter# 3538289166Speter# Need a lot of goo to handle *both* DLLs and import libs 3539289166Speter# Has to be a shell function in order to 'eat' the argument 3540289166Speter# that is supplied when $file_magic_command is called. 3541289166Speter# Despite the name, also deal with 64 bit binaries. 3542289166Speterfunc_win32_libid () 3543289166Speter{ 3544289166Speter $opt_debug 3545289166Speter win32_libid_type="unknown" 3546289166Speter win32_fileres=`file -L $1 2>/dev/null` 3547289166Speter case $win32_fileres in 3548289166Speter *ar\ archive\ import\ library*) # definitely import 3549289166Speter win32_libid_type="x86 archive import" 3550251883Speter ;; 3551289166Speter *ar\ archive*) # could be an import, or static 3552289166Speter # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 3553289166Speter if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 3554289166Speter $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 3555289166Speter func_to_tool_file "$1" func_convert_file_msys_to_w32 3556289166Speter win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 3557289166Speter $SED -n -e ' 3558289166Speter 1,100{ 3559289166Speter / I /{ 3560289166Speter s,.*,import, 3561289166Speter p 3562289166Speter q 3563289166Speter } 3564289166Speter }'` 3565289166Speter case $win32_nmres in 3566289166Speter import*) win32_libid_type="x86 archive import";; 3567289166Speter *) win32_libid_type="x86 archive static";; 3568289166Speter esac 3569289166Speter fi 3570289166Speter ;; 3571289166Speter *DLL*) 3572289166Speter win32_libid_type="x86 DLL" 3573289166Speter ;; 3574289166Speter *executable*) # but shell scripts are "executable" too... 3575289166Speter case $win32_fileres in 3576289166Speter *MS\ Windows\ PE\ Intel*) 3577289166Speter win32_libid_type="x86 DLL" 3578289166Speter ;; 3579289166Speter esac 3580289166Speter ;; 3581289166Speter esac 3582289166Speter $ECHO "$win32_libid_type" 3583289166Speter} 3584251883Speter 3585289166Speter# func_cygming_dll_for_implib ARG 3586289166Speter# 3587289166Speter# Platform-specific function to extract the 3588289166Speter# name of the DLL associated with the specified 3589289166Speter# import library ARG. 3590289166Speter# Invoked by eval'ing the libtool variable 3591289166Speter# $sharedlib_from_linklib_cmd 3592289166Speter# Result is available in the variable 3593289166Speter# $sharedlib_from_linklib_result 3594289166Speterfunc_cygming_dll_for_implib () 3595289166Speter{ 3596289166Speter $opt_debug 3597289166Speter sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 3598289166Speter} 3599289166Speter 3600289166Speter# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 3601289166Speter# 3602289166Speter# The is the core of a fallback implementation of a 3603289166Speter# platform-specific function to extract the name of the 3604289166Speter# DLL associated with the specified import library LIBNAME. 3605289166Speter# 3606289166Speter# SECTION_NAME is either .idata$6 or .idata$7, depending 3607289166Speter# on the platform and compiler that created the implib. 3608289166Speter# 3609289166Speter# Echos the name of the DLL associated with the 3610289166Speter# specified import library. 3611289166Speterfunc_cygming_dll_for_implib_fallback_core () 3612289166Speter{ 3613289166Speter $opt_debug 3614289166Speter match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 3615289166Speter $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 3616289166Speter $SED '/^Contents of section '"$match_literal"':/{ 3617289166Speter # Place marker at beginning of archive member dllname section 3618289166Speter s/.*/====MARK====/ 3619289166Speter p 3620289166Speter d 3621289166Speter } 3622289166Speter # These lines can sometimes be longer than 43 characters, but 3623289166Speter # are always uninteresting 3624289166Speter /:[ ]*file format pe[i]\{,1\}-/d 3625289166Speter /^In archive [^:]*:/d 3626289166Speter # Ensure marker is printed 3627289166Speter /^====MARK====/p 3628289166Speter # Remove all lines with less than 43 characters 3629289166Speter /^.\{43\}/!d 3630289166Speter # From remaining lines, remove first 43 characters 3631289166Speter s/^.\{43\}//' | 3632289166Speter $SED -n ' 3633289166Speter # Join marker and all lines until next marker into a single line 3634289166Speter /^====MARK====/ b para 3635289166Speter H 3636289166Speter $ b para 3637289166Speter b 3638289166Speter :para 3639289166Speter x 3640289166Speter s/\n//g 3641289166Speter # Remove the marker 3642289166Speter s/^====MARK====// 3643289166Speter # Remove trailing dots and whitespace 3644289166Speter s/[\. \t]*$// 3645289166Speter # Print 3646289166Speter /./p' | 3647289166Speter # we now have a list, one entry per line, of the stringified 3648289166Speter # contents of the appropriate section of all members of the 3649289166Speter # archive which possess that section. Heuristic: eliminate 3650289166Speter # all those which have a first or second character that is 3651289166Speter # a '.' (that is, objdump's representation of an unprintable 3652289166Speter # character.) This should work for all archives with less than 3653289166Speter # 0x302f exports -- but will fail for DLLs whose name actually 3654289166Speter # begins with a literal '.' or a single character followed by 3655289166Speter # a '.'. 3656289166Speter # 3657289166Speter # Of those that remain, print the first one. 3658289166Speter $SED -e '/^\./d;/^.\./d;q' 3659289166Speter} 3660289166Speter 3661289166Speter# func_cygming_gnu_implib_p ARG 3662289166Speter# This predicate returns with zero status (TRUE) if 3663289166Speter# ARG is a GNU/binutils-style import library. Returns 3664289166Speter# with nonzero status (FALSE) otherwise. 3665289166Speterfunc_cygming_gnu_implib_p () 3666289166Speter{ 3667289166Speter $opt_debug 3668289166Speter func_to_tool_file "$1" func_convert_file_msys_to_w32 3669289166Speter 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)$'` 3670289166Speter test -n "$func_cygming_gnu_implib_tmp" 3671289166Speter} 3672289166Speter 3673289166Speter# func_cygming_ms_implib_p ARG 3674289166Speter# This predicate returns with zero status (TRUE) if 3675289166Speter# ARG is an MS-style import library. Returns 3676289166Speter# with nonzero status (FALSE) otherwise. 3677289166Speterfunc_cygming_ms_implib_p () 3678289166Speter{ 3679289166Speter $opt_debug 3680289166Speter func_to_tool_file "$1" func_convert_file_msys_to_w32 3681289166Speter func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 3682289166Speter test -n "$func_cygming_ms_implib_tmp" 3683289166Speter} 3684289166Speter 3685289166Speter# func_cygming_dll_for_implib_fallback ARG 3686289166Speter# Platform-specific function to extract the 3687289166Speter# name of the DLL associated with the specified 3688289166Speter# import library ARG. 3689289166Speter# 3690289166Speter# This fallback implementation is for use when $DLLTOOL 3691289166Speter# does not support the --identify-strict option. 3692289166Speter# Invoked by eval'ing the libtool variable 3693289166Speter# $sharedlib_from_linklib_cmd 3694289166Speter# Result is available in the variable 3695289166Speter# $sharedlib_from_linklib_result 3696289166Speterfunc_cygming_dll_for_implib_fallback () 3697289166Speter{ 3698289166Speter $opt_debug 3699289166Speter if func_cygming_gnu_implib_p "$1" ; then 3700289166Speter # binutils import library 3701289166Speter sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 3702289166Speter elif func_cygming_ms_implib_p "$1" ; then 3703289166Speter # ms-generated import library 3704289166Speter sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 3705289166Speter else 3706289166Speter # unknown 3707289166Speter sharedlib_from_linklib_result="" 3708289166Speter fi 3709289166Speter} 3710289166Speter 3711289166Speter 3712289166Speter# func_extract_an_archive dir oldlib 3713289166Speterfunc_extract_an_archive () 3714289166Speter{ 3715289166Speter $opt_debug 3716289166Speter f_ex_an_ar_dir="$1"; shift 3717289166Speter f_ex_an_ar_oldlib="$1" 3718289166Speter if test "$lock_old_archive_extraction" = yes; then 3719289166Speter lockfile=$f_ex_an_ar_oldlib.lock 3720289166Speter until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 3721289166Speter func_echo "Waiting for $lockfile to be removed" 3722289166Speter sleep 2 3723289166Speter done 3724289166Speter fi 3725289166Speter func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 3726289166Speter 'stat=$?; rm -f "$lockfile"; exit $stat' 3727289166Speter if test "$lock_old_archive_extraction" = yes; then 3728289166Speter $opt_dry_run || rm -f "$lockfile" 3729289166Speter fi 3730289166Speter if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 3731289166Speter : 3732289166Speter else 3733289166Speter func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 3734289166Speter fi 3735289166Speter} 3736289166Speter 3737289166Speter 3738289166Speter# func_extract_archives gentop oldlib ... 3739289166Speterfunc_extract_archives () 3740289166Speter{ 3741289166Speter $opt_debug 3742289166Speter my_gentop="$1"; shift 3743289166Speter my_oldlibs=${1+"$@"} 3744289166Speter my_oldobjs="" 3745289166Speter my_xlib="" 3746289166Speter my_xabs="" 3747289166Speter my_xdir="" 3748289166Speter 3749289166Speter for my_xlib in $my_oldlibs; do 3750289166Speter # Extract the objects. 3751289166Speter case $my_xlib in 3752289166Speter [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 3753289166Speter *) my_xabs=`pwd`"/$my_xlib" ;; 3754289166Speter esac 3755289166Speter func_basename "$my_xlib" 3756289166Speter my_xlib="$func_basename_result" 3757289166Speter my_xlib_u=$my_xlib 3758289166Speter while :; do 3759289166Speter case " $extracted_archives " in 3760289166Speter *" $my_xlib_u "*) 3761289166Speter func_arith $extracted_serial + 1 3762289166Speter extracted_serial=$func_arith_result 3763289166Speter my_xlib_u=lt$extracted_serial-$my_xlib ;; 3764289166Speter *) break ;; 3765289166Speter esac 3766289166Speter done 3767289166Speter extracted_archives="$extracted_archives $my_xlib_u" 3768289166Speter my_xdir="$my_gentop/$my_xlib_u" 3769289166Speter 3770289166Speter func_mkdir_p "$my_xdir" 3771289166Speter 3772289166Speter case $host in 3773289166Speter *-darwin*) 3774289166Speter func_verbose "Extracting $my_xabs" 3775289166Speter # Do not bother doing anything if just a dry run 3776289166Speter $opt_dry_run || { 3777289166Speter darwin_orig_dir=`pwd` 3778289166Speter cd $my_xdir || exit $? 3779289166Speter darwin_archive=$my_xabs 3780289166Speter darwin_curdir=`pwd` 3781289166Speter darwin_base_archive=`basename "$darwin_archive"` 3782289166Speter darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 3783289166Speter if test -n "$darwin_arches"; then 3784289166Speter darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 3785289166Speter darwin_arch= 3786289166Speter func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 3787289166Speter for darwin_arch in $darwin_arches ; do 3788289166Speter func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3789289166Speter $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 3790289166Speter cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3791289166Speter func_extract_an_archive "`pwd`" "${darwin_base_archive}" 3792289166Speter cd "$darwin_curdir" 3793289166Speter $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 3794289166Speter done # $darwin_arches 3795289166Speter ## Okay now we've a bunch of thin objects, gotta fatten them up :) 3796289166Speter darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 3797289166Speter darwin_file= 3798289166Speter darwin_files= 3799289166Speter for darwin_file in $darwin_filelist; do 3800289166Speter darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 3801289166Speter $LIPO -create -output "$darwin_file" $darwin_files 3802289166Speter done # $darwin_filelist 3803289166Speter $RM -rf unfat-$$ 3804289166Speter cd "$darwin_orig_dir" 3805289166Speter else 3806289166Speter cd $darwin_orig_dir 3807289166Speter func_extract_an_archive "$my_xdir" "$my_xabs" 3808289166Speter fi # $darwin_arches 3809289166Speter } # !$opt_dry_run 3810289166Speter ;; 3811289166Speter *) 3812289166Speter func_extract_an_archive "$my_xdir" "$my_xabs" 3813289166Speter ;; 3814289166Speter esac 3815289166Speter my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 3816289166Speter done 3817289166Speter 3818289166Speter func_extract_archives_result="$my_oldobjs" 3819289166Speter} 3820289166Speter 3821289166Speter 3822289166Speter# func_emit_wrapper [arg=no] 3823289166Speter# 3824289166Speter# Emit a libtool wrapper script on stdout. 3825289166Speter# Don't directly open a file because we may want to 3826289166Speter# incorporate the script contents within a cygwin/mingw 3827289166Speter# wrapper executable. Must ONLY be called from within 3828289166Speter# func_mode_link because it depends on a number of variables 3829289166Speter# set therein. 3830289166Speter# 3831289166Speter# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 3832289166Speter# variable will take. If 'yes', then the emitted script 3833289166Speter# will assume that the directory in which it is stored is 3834289166Speter# the $objdir directory. This is a cygwin/mingw-specific 3835289166Speter# behavior. 3836289166Speterfunc_emit_wrapper () 3837289166Speter{ 3838289166Speter func_emit_wrapper_arg1=${1-no} 3839289166Speter 3840289166Speter $ECHO "\ 3841289166Speter#! $SHELL 3842289166Speter 3843289166Speter# $output - temporary wrapper script for $objdir/$outputname 3844289166Speter# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3845289166Speter# 3846289166Speter# The $output program cannot be directly executed until all the libtool 3847289166Speter# libraries that it depends on are installed. 3848289166Speter# 3849289166Speter# This wrapper script should never be moved out of the build directory. 3850289166Speter# If it is, it will not operate correctly. 3851289166Speter 3852289166Speter# Sed substitution that helps us do robust quoting. It backslashifies 3853289166Speter# metacharacters that are still active within double-quoted strings. 3854289166Spetersed_quote_subst='$sed_quote_subst' 3855289166Speter 3856289166Speter# Be Bourne compatible 3857289166Speterif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 3858289166Speter emulate sh 3859289166Speter NULLCMD=: 3860289166Speter # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 3861289166Speter # is contrary to our usage. Disable this feature. 3862289166Speter alias -g '\${1+\"\$@\"}'='\"\$@\"' 3863289166Speter setopt NO_GLOB_SUBST 3864289166Speterelse 3865289166Speter case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 3866289166Speterfi 3867289166SpeterBIN_SH=xpg4; export BIN_SH # for Tru64 3868289166SpeterDUALCASE=1; export DUALCASE # for MKS sh 3869289166Speter 3870289166Speter# The HP-UX ksh and POSIX shell print the target directory to stdout 3871289166Speter# if CDPATH is set. 3872289166Speter(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 3873289166Speter 3874289166Speterrelink_command=\"$relink_command\" 3875289166Speter 3876289166Speter# This environment variable determines our operation mode. 3877289166Speterif test \"\$libtool_install_magic\" = \"$magic\"; then 3878289166Speter # install mode needs the following variables: 3879289166Speter generated_by_libtool_version='$macro_version' 3880289166Speter notinst_deplibs='$notinst_deplibs' 3881289166Speterelse 3882289166Speter # When we are sourced in execute mode, \$file and \$ECHO are already set. 3883289166Speter if test \"\$libtool_execute_magic\" != \"$magic\"; then 3884289166Speter file=\"\$0\"" 3885289166Speter 3886289166Speter qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 3887289166Speter $ECHO "\ 3888289166Speter 3889289166Speter# A function that is used when there is no print builtin or printf. 3890289166Speterfunc_fallback_echo () 3891289166Speter{ 3892289166Speter eval 'cat <<_LTECHO_EOF 3893289166Speter\$1 3894289166Speter_LTECHO_EOF' 3895289166Speter} 3896289166Speter ECHO=\"$qECHO\" 3897289166Speter fi 3898289166Speter 3899289166Speter# Very basic option parsing. These options are (a) specific to 3900289166Speter# the libtool wrapper, (b) are identical between the wrapper 3901289166Speter# /script/ and the wrapper /executable/ which is used only on 3902289166Speter# windows platforms, and (c) all begin with the string "--lt-" 3903289166Speter# (application programs are unlikely to have options which match 3904289166Speter# this pattern). 3905289166Speter# 3906289166Speter# There are only two supported options: --lt-debug and 3907289166Speter# --lt-dump-script. There is, deliberately, no --lt-help. 3908289166Speter# 3909289166Speter# The first argument to this parsing function should be the 3910289166Speter# script's $0 value, followed by "$@". 3911289166Speterlt_option_debug= 3912289166Speterfunc_parse_lt_options () 3913289166Speter{ 3914289166Speter lt_script_arg0=\$0 3915289166Speter shift 3916289166Speter for lt_opt 3917289166Speter do 3918289166Speter case \"\$lt_opt\" in 3919289166Speter --lt-debug) lt_option_debug=1 ;; 3920289166Speter --lt-dump-script) 3921289166Speter lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 3922289166Speter test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 3923289166Speter lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 3924289166Speter cat \"\$lt_dump_D/\$lt_dump_F\" 3925289166Speter exit 0 3926289166Speter ;; 3927289166Speter --lt-*) 3928289166Speter \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 3929289166Speter exit 1 3930289166Speter ;; 3931289166Speter esac 3932289166Speter done 3933289166Speter 3934289166Speter # Print the debug banner immediately: 3935289166Speter if test -n \"\$lt_option_debug\"; then 3936289166Speter echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 3937289166Speter fi 3938289166Speter} 3939289166Speter 3940289166Speter# Used when --lt-debug. Prints its arguments to stdout 3941289166Speter# (redirection is the responsibility of the caller) 3942289166Speterfunc_lt_dump_args () 3943289166Speter{ 3944289166Speter lt_dump_args_N=1; 3945289166Speter for lt_arg 3946289166Speter do 3947289166Speter \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 3948289166Speter lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 3949289166Speter done 3950289166Speter} 3951289166Speter 3952289166Speter# Core function for launching the target application 3953289166Speterfunc_exec_program_core () 3954289166Speter{ 3955289166Speter" 3956289166Speter case $host in 3957289166Speter # Backslashes separate directories on plain windows 3958289166Speter *-*-mingw | *-*-os2* | *-cegcc*) 3959289166Speter $ECHO "\ 3960289166Speter if test -n \"\$lt_option_debug\"; then 3961289166Speter \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 3962289166Speter func_lt_dump_args \${1+\"\$@\"} 1>&2 3963289166Speter fi 3964289166Speter exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 3965289166Speter" 3966289166Speter ;; 3967289166Speter 3968289166Speter *) 3969289166Speter $ECHO "\ 3970289166Speter if test -n \"\$lt_option_debug\"; then 3971289166Speter \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 3972289166Speter func_lt_dump_args \${1+\"\$@\"} 1>&2 3973289166Speter fi 3974289166Speter exec \"\$progdir/\$program\" \${1+\"\$@\"} 3975289166Speter" 3976289166Speter ;; 3977289166Speter esac 3978289166Speter $ECHO "\ 3979289166Speter \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 3980289166Speter exit 1 3981289166Speter} 3982289166Speter 3983289166Speter# A function to encapsulate launching the target application 3984289166Speter# Strips options in the --lt-* namespace from \$@ and 3985289166Speter# launches target application with the remaining arguments. 3986289166Speterfunc_exec_program () 3987289166Speter{ 3988289166Speter case \" \$* \" in 3989289166Speter *\\ --lt-*) 3990289166Speter for lt_wr_arg 3991289166Speter do 3992289166Speter case \$lt_wr_arg in 3993289166Speter --lt-*) ;; 3994289166Speter *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 3995289166Speter esac 3996289166Speter shift 3997289166Speter done ;; 3998289166Speter esac 3999289166Speter func_exec_program_core \${1+\"\$@\"} 4000289166Speter} 4001289166Speter 4002289166Speter # Parse options 4003289166Speter func_parse_lt_options \"\$0\" \${1+\"\$@\"} 4004289166Speter 4005289166Speter # Find the directory that this script lives in. 4006289166Speter thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 4007289166Speter test \"x\$thisdir\" = \"x\$file\" && thisdir=. 4008289166Speter 4009289166Speter # Follow symbolic links until we get to the real thisdir. 4010289166Speter file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 4011289166Speter while test -n \"\$file\"; do 4012289166Speter destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 4013289166Speter 4014289166Speter # If there was a directory component, then change thisdir. 4015289166Speter if test \"x\$destdir\" != \"x\$file\"; then 4016289166Speter case \"\$destdir\" in 4017289166Speter [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 4018289166Speter *) thisdir=\"\$thisdir/\$destdir\" ;; 4019289166Speter esac 4020289166Speter fi 4021289166Speter 4022289166Speter file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 4023289166Speter file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 4024289166Speter done 4025289166Speter 4026289166Speter # Usually 'no', except on cygwin/mingw when embedded into 4027289166Speter # the cwrapper. 4028289166Speter WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 4029289166Speter if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 4030289166Speter # special case for '.' 4031289166Speter if test \"\$thisdir\" = \".\"; then 4032289166Speter thisdir=\`pwd\` 4033289166Speter fi 4034289166Speter # remove .libs from thisdir 4035289166Speter case \"\$thisdir\" in 4036289166Speter *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 4037289166Speter $objdir ) thisdir=. ;; 4038289166Speter esac 4039289166Speter fi 4040289166Speter 4041289166Speter # Try to get the absolute directory name. 4042289166Speter absdir=\`cd \"\$thisdir\" && pwd\` 4043289166Speter test -n \"\$absdir\" && thisdir=\"\$absdir\" 4044289166Speter" 4045289166Speter 4046289166Speter if test "$fast_install" = yes; then 4047289166Speter $ECHO "\ 4048289166Speter program=lt-'$outputname'$exeext 4049289166Speter progdir=\"\$thisdir/$objdir\" 4050289166Speter 4051289166Speter if test ! -f \"\$progdir/\$program\" || 4052289166Speter { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 4053289166Speter test \"X\$file\" != \"X\$progdir/\$program\"; }; then 4054289166Speter 4055289166Speter file=\"\$\$-\$program\" 4056289166Speter 4057289166Speter if test ! -d \"\$progdir\"; then 4058289166Speter $MKDIR \"\$progdir\" 4059289166Speter else 4060289166Speter $RM \"\$progdir/\$file\" 4061289166Speter fi" 4062289166Speter 4063289166Speter $ECHO "\ 4064289166Speter 4065289166Speter # relink executable if necessary 4066289166Speter if test -n \"\$relink_command\"; then 4067289166Speter if relink_command_output=\`eval \$relink_command 2>&1\`; then : 4068289166Speter else 4069289166Speter $ECHO \"\$relink_command_output\" >&2 4070289166Speter $RM \"\$progdir/\$file\" 4071289166Speter exit 1 4072289166Speter fi 4073289166Speter fi 4074289166Speter 4075289166Speter $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 4076289166Speter { $RM \"\$progdir/\$program\"; 4077289166Speter $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 4078289166Speter $RM \"\$progdir/\$file\" 4079289166Speter fi" 4080289166Speter else 4081289166Speter $ECHO "\ 4082289166Speter program='$outputname' 4083289166Speter progdir=\"\$thisdir/$objdir\" 4084289166Speter" 4085289166Speter fi 4086289166Speter 4087289166Speter $ECHO "\ 4088289166Speter 4089289166Speter if test -f \"\$progdir/\$program\"; then" 4090289166Speter 4091289166Speter # fixup the dll searchpath if we need to. 4092289166Speter # 4093289166Speter # Fix the DLL searchpath if we need to. Do this before prepending 4094289166Speter # to shlibpath, because on Windows, both are PATH and uninstalled 4095289166Speter # libraries must come first. 4096289166Speter if test -n "$dllsearchpath"; then 4097289166Speter $ECHO "\ 4098289166Speter # Add the dll search path components to the executable PATH 4099289166Speter PATH=$dllsearchpath:\$PATH 4100289166Speter" 4101289166Speter fi 4102289166Speter 4103289166Speter # Export our shlibpath_var if we have one. 4104289166Speter if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4105289166Speter $ECHO "\ 4106289166Speter # Add our own library path to $shlibpath_var 4107289166Speter $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 4108289166Speter 4109289166Speter # Some systems cannot cope with colon-terminated $shlibpath_var 4110289166Speter # The second colon is a workaround for a bug in BeOS R4 sed 4111289166Speter $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 4112289166Speter 4113289166Speter export $shlibpath_var 4114289166Speter" 4115289166Speter fi 4116289166Speter 4117289166Speter $ECHO "\ 4118289166Speter if test \"\$libtool_execute_magic\" != \"$magic\"; then 4119289166Speter # Run the actual program with our arguments. 4120289166Speter func_exec_program \${1+\"\$@\"} 4121289166Speter fi 4122289166Speter else 4123289166Speter # The program doesn't exist. 4124289166Speter \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 4125289166Speter \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 4126289166Speter \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 4127289166Speter exit 1 4128289166Speter fi 4129289166Speterfi\ 4130289166Speter" 4131289166Speter} 4132289166Speter 4133289166Speter 4134289166Speter# func_emit_cwrapperexe_src 4135289166Speter# emit the source code for a wrapper executable on stdout 4136289166Speter# Must ONLY be called from within func_mode_link because 4137289166Speter# it depends on a number of variable set therein. 4138289166Speterfunc_emit_cwrapperexe_src () 4139289166Speter{ 4140289166Speter cat <<EOF 4141289166Speter 4142289166Speter/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 4143289166Speter Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 4144289166Speter 4145289166Speter The $output program cannot be directly executed until all the libtool 4146289166Speter libraries that it depends on are installed. 4147289166Speter 4148289166Speter This wrapper executable should never be moved out of the build directory. 4149289166Speter If it is, it will not operate correctly. 4150289166Speter*/ 4151289166SpeterEOF 4152289166Speter cat <<"EOF" 4153289166Speter#ifdef _MSC_VER 4154289166Speter# define _CRT_SECURE_NO_DEPRECATE 1 4155289166Speter#endif 4156289166Speter#include <stdio.h> 4157289166Speter#include <stdlib.h> 4158289166Speter#ifdef _MSC_VER 4159289166Speter# include <direct.h> 4160289166Speter# include <process.h> 4161289166Speter# include <io.h> 4162289166Speter#else 4163289166Speter# include <unistd.h> 4164289166Speter# include <stdint.h> 4165289166Speter# ifdef __CYGWIN__ 4166289166Speter# include <io.h> 4167289166Speter# endif 4168289166Speter#endif 4169289166Speter#include <malloc.h> 4170289166Speter#include <stdarg.h> 4171289166Speter#include <assert.h> 4172289166Speter#include <string.h> 4173289166Speter#include <ctype.h> 4174289166Speter#include <errno.h> 4175289166Speter#include <fcntl.h> 4176289166Speter#include <sys/stat.h> 4177289166Speter 4178289166Speter/* declarations of non-ANSI functions */ 4179289166Speter#if defined(__MINGW32__) 4180289166Speter# ifdef __STRICT_ANSI__ 4181289166Speterint _putenv (const char *); 4182289166Speter# endif 4183289166Speter#elif defined(__CYGWIN__) 4184289166Speter# ifdef __STRICT_ANSI__ 4185289166Speterchar *realpath (const char *, char *); 4186289166Speterint putenv (char *); 4187289166Speterint setenv (const char *, const char *, int); 4188289166Speter# endif 4189289166Speter/* #elif defined (other platforms) ... */ 4190289166Speter#endif 4191289166Speter 4192289166Speter/* portability defines, excluding path handling macros */ 4193289166Speter#if defined(_MSC_VER) 4194289166Speter# define setmode _setmode 4195289166Speter# define stat _stat 4196289166Speter# define chmod _chmod 4197289166Speter# define getcwd _getcwd 4198289166Speter# define putenv _putenv 4199289166Speter# define S_IXUSR _S_IEXEC 4200289166Speter# ifndef _INTPTR_T_DEFINED 4201289166Speter# define _INTPTR_T_DEFINED 4202289166Speter# define intptr_t int 4203289166Speter# endif 4204289166Speter#elif defined(__MINGW32__) 4205289166Speter# define setmode _setmode 4206289166Speter# define stat _stat 4207289166Speter# define chmod _chmod 4208289166Speter# define getcwd _getcwd 4209289166Speter# define putenv _putenv 4210289166Speter#elif defined(__CYGWIN__) 4211289166Speter# define HAVE_SETENV 4212289166Speter# define FOPEN_WB "wb" 4213289166Speter/* #elif defined (other platforms) ... */ 4214289166Speter#endif 4215289166Speter 4216289166Speter#if defined(PATH_MAX) 4217289166Speter# define LT_PATHMAX PATH_MAX 4218289166Speter#elif defined(MAXPATHLEN) 4219289166Speter# define LT_PATHMAX MAXPATHLEN 4220289166Speter#else 4221289166Speter# define LT_PATHMAX 1024 4222289166Speter#endif 4223289166Speter 4224289166Speter#ifndef S_IXOTH 4225289166Speter# define S_IXOTH 0 4226289166Speter#endif 4227289166Speter#ifndef S_IXGRP 4228289166Speter# define S_IXGRP 0 4229289166Speter#endif 4230289166Speter 4231289166Speter/* path handling portability macros */ 4232289166Speter#ifndef DIR_SEPARATOR 4233289166Speter# define DIR_SEPARATOR '/' 4234289166Speter# define PATH_SEPARATOR ':' 4235289166Speter#endif 4236289166Speter 4237289166Speter#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 4238289166Speter defined (__OS2__) 4239289166Speter# define HAVE_DOS_BASED_FILE_SYSTEM 4240289166Speter# define FOPEN_WB "wb" 4241289166Speter# ifndef DIR_SEPARATOR_2 4242289166Speter# define DIR_SEPARATOR_2 '\\' 4243289166Speter# endif 4244289166Speter# ifndef PATH_SEPARATOR_2 4245289166Speter# define PATH_SEPARATOR_2 ';' 4246289166Speter# endif 4247289166Speter#endif 4248289166Speter 4249289166Speter#ifndef DIR_SEPARATOR_2 4250289166Speter# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 4251289166Speter#else /* DIR_SEPARATOR_2 */ 4252289166Speter# define IS_DIR_SEPARATOR(ch) \ 4253289166Speter (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 4254289166Speter#endif /* DIR_SEPARATOR_2 */ 4255289166Speter 4256289166Speter#ifndef PATH_SEPARATOR_2 4257289166Speter# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 4258289166Speter#else /* PATH_SEPARATOR_2 */ 4259289166Speter# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 4260289166Speter#endif /* PATH_SEPARATOR_2 */ 4261289166Speter 4262289166Speter#ifndef FOPEN_WB 4263289166Speter# define FOPEN_WB "w" 4264289166Speter#endif 4265289166Speter#ifndef _O_BINARY 4266289166Speter# define _O_BINARY 0 4267289166Speter#endif 4268289166Speter 4269289166Speter#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 4270289166Speter#define XFREE(stale) do { \ 4271289166Speter if (stale) { free ((void *) stale); stale = 0; } \ 4272289166Speter} while (0) 4273289166Speter 4274289166Speter#if defined(LT_DEBUGWRAPPER) 4275289166Speterstatic int lt_debug = 1; 4276289166Speter#else 4277289166Speterstatic int lt_debug = 0; 4278289166Speter#endif 4279289166Speter 4280289166Speterconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 4281289166Speter 4282289166Spetervoid *xmalloc (size_t num); 4283289166Speterchar *xstrdup (const char *string); 4284289166Speterconst char *base_name (const char *name); 4285289166Speterchar *find_executable (const char *wrapper); 4286289166Speterchar *chase_symlinks (const char *pathspec); 4287289166Speterint make_executable (const char *path); 4288289166Speterint check_executable (const char *path); 4289289166Speterchar *strendzap (char *str, const char *pat); 4290289166Spetervoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 4291289166Spetervoid lt_fatal (const char *file, int line, const char *message, ...); 4292289166Speterstatic const char *nonnull (const char *s); 4293289166Speterstatic const char *nonempty (const char *s); 4294289166Spetervoid lt_setenv (const char *name, const char *value); 4295289166Speterchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 4296289166Spetervoid lt_update_exe_path (const char *name, const char *value); 4297289166Spetervoid lt_update_lib_path (const char *name, const char *value); 4298289166Speterchar **prepare_spawn (char **argv); 4299289166Spetervoid lt_dump_script (FILE *f); 4300289166SpeterEOF 4301289166Speter 4302289166Speter cat <<EOF 4303289166Spetervolatile const char * MAGIC_EXE = "$magic_exe"; 4304289166Speterconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 4305289166SpeterEOF 4306289166Speter 4307289166Speter if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4308289166Speter func_to_host_path "$temp_rpath" 4309289166Speter cat <<EOF 4310289166Speterconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 4311289166SpeterEOF 4312289166Speter else 4313289166Speter cat <<"EOF" 4314289166Speterconst char * LIB_PATH_VALUE = ""; 4315289166SpeterEOF 4316289166Speter fi 4317289166Speter 4318289166Speter if test -n "$dllsearchpath"; then 4319289166Speter func_to_host_path "$dllsearchpath:" 4320289166Speter cat <<EOF 4321289166Speterconst char * EXE_PATH_VARNAME = "PATH"; 4322289166Speterconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 4323289166SpeterEOF 4324289166Speter else 4325289166Speter cat <<"EOF" 4326289166Speterconst char * EXE_PATH_VARNAME = ""; 4327289166Speterconst char * EXE_PATH_VALUE = ""; 4328289166SpeterEOF 4329289166Speter fi 4330289166Speter 4331289166Speter if test "$fast_install" = yes; then 4332289166Speter cat <<EOF 4333289166Speterconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 4334289166SpeterEOF 4335289166Speter else 4336289166Speter cat <<EOF 4337289166Speterconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 4338289166SpeterEOF 4339289166Speter fi 4340289166Speter 4341289166Speter 4342289166Speter cat <<"EOF" 4343289166Speter 4344289166Speter#define LTWRAPPER_OPTION_PREFIX "--lt-" 4345289166Speter 4346289166Speterstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 4347289166Speterstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 4348289166Speterstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 4349289166Speter 4350289166Speterint 4351289166Spetermain (int argc, char *argv[]) 4352289166Speter{ 4353289166Speter char **newargz; 4354289166Speter int newargc; 4355289166Speter char *tmp_pathspec; 4356289166Speter char *actual_cwrapper_path; 4357289166Speter char *actual_cwrapper_name; 4358289166Speter char *target_name; 4359289166Speter char *lt_argv_zero; 4360289166Speter intptr_t rval = 127; 4361289166Speter 4362289166Speter int i; 4363289166Speter 4364289166Speter program_name = (char *) xstrdup (base_name (argv[0])); 4365289166Speter newargz = XMALLOC (char *, argc + 1); 4366289166Speter 4367289166Speter /* very simple arg parsing; don't want to rely on getopt 4368289166Speter * also, copy all non cwrapper options to newargz, except 4369289166Speter * argz[0], which is handled differently 4370289166Speter */ 4371289166Speter newargc=0; 4372289166Speter for (i = 1; i < argc; i++) 4373289166Speter { 4374289166Speter if (strcmp (argv[i], dumpscript_opt) == 0) 4375289166Speter { 4376289166SpeterEOF 4377289166Speter case "$host" in 4378289166Speter *mingw* | *cygwin* ) 4379289166Speter # make stdout use "unix" line endings 4380289166Speter echo " setmode(1,_O_BINARY);" 4381289166Speter ;; 4382289166Speter esac 4383289166Speter 4384289166Speter cat <<"EOF" 4385289166Speter lt_dump_script (stdout); 4386289166Speter return 0; 4387289166Speter } 4388289166Speter if (strcmp (argv[i], debug_opt) == 0) 4389289166Speter { 4390289166Speter lt_debug = 1; 4391289166Speter continue; 4392289166Speter } 4393289166Speter if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 4394289166Speter { 4395289166Speter /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 4396289166Speter namespace, but it is not one of the ones we know about and 4397289166Speter have already dealt with, above (inluding dump-script), then 4398289166Speter report an error. Otherwise, targets might begin to believe 4399289166Speter they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 4400289166Speter namespace. The first time any user complains about this, we'll 4401289166Speter need to make LTWRAPPER_OPTION_PREFIX a configure-time option 4402289166Speter or a configure.ac-settable value. 4403289166Speter */ 4404289166Speter lt_fatal (__FILE__, __LINE__, 4405289166Speter "unrecognized %s option: '%s'", 4406289166Speter ltwrapper_option_prefix, argv[i]); 4407289166Speter } 4408289166Speter /* otherwise ... */ 4409289166Speter newargz[++newargc] = xstrdup (argv[i]); 4410289166Speter } 4411289166Speter newargz[++newargc] = NULL; 4412289166Speter 4413289166SpeterEOF 4414289166Speter cat <<EOF 4415289166Speter /* The GNU banner must be the first non-error debug message */ 4416289166Speter lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 4417289166SpeterEOF 4418289166Speter cat <<"EOF" 4419289166Speter lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 4420289166Speter lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 4421289166Speter 4422289166Speter tmp_pathspec = find_executable (argv[0]); 4423289166Speter if (tmp_pathspec == NULL) 4424289166Speter lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 4425289166Speter lt_debugprintf (__FILE__, __LINE__, 4426289166Speter "(main) found exe (before symlink chase) at: %s\n", 4427289166Speter tmp_pathspec); 4428289166Speter 4429289166Speter actual_cwrapper_path = chase_symlinks (tmp_pathspec); 4430289166Speter lt_debugprintf (__FILE__, __LINE__, 4431289166Speter "(main) found exe (after symlink chase) at: %s\n", 4432289166Speter actual_cwrapper_path); 4433289166Speter XFREE (tmp_pathspec); 4434289166Speter 4435289166Speter actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 4436289166Speter strendzap (actual_cwrapper_path, actual_cwrapper_name); 4437289166Speter 4438289166Speter /* wrapper name transforms */ 4439289166Speter strendzap (actual_cwrapper_name, ".exe"); 4440289166Speter tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 4441289166Speter XFREE (actual_cwrapper_name); 4442289166Speter actual_cwrapper_name = tmp_pathspec; 4443289166Speter tmp_pathspec = 0; 4444289166Speter 4445289166Speter /* target_name transforms -- use actual target program name; might have lt- prefix */ 4446289166Speter target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 4447289166Speter strendzap (target_name, ".exe"); 4448289166Speter tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 4449289166Speter XFREE (target_name); 4450289166Speter target_name = tmp_pathspec; 4451289166Speter tmp_pathspec = 0; 4452289166Speter 4453289166Speter lt_debugprintf (__FILE__, __LINE__, 4454289166Speter "(main) libtool target name: %s\n", 4455289166Speter target_name); 4456289166SpeterEOF 4457289166Speter 4458289166Speter cat <<EOF 4459289166Speter newargz[0] = 4460289166Speter XMALLOC (char, (strlen (actual_cwrapper_path) + 4461289166Speter strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 4462289166Speter strcpy (newargz[0], actual_cwrapper_path); 4463289166Speter strcat (newargz[0], "$objdir"); 4464289166Speter strcat (newargz[0], "/"); 4465289166SpeterEOF 4466289166Speter 4467289166Speter cat <<"EOF" 4468289166Speter /* stop here, and copy so we don't have to do this twice */ 4469289166Speter tmp_pathspec = xstrdup (newargz[0]); 4470289166Speter 4471289166Speter /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 4472289166Speter strcat (newargz[0], actual_cwrapper_name); 4473289166Speter 4474289166Speter /* DO want the lt- prefix here if it exists, so use target_name */ 4475289166Speter lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 4476289166Speter XFREE (tmp_pathspec); 4477289166Speter tmp_pathspec = NULL; 4478289166SpeterEOF 4479289166Speter 4480289166Speter case $host_os in 4481289166Speter mingw*) 4482289166Speter cat <<"EOF" 4483289166Speter { 4484289166Speter char* p; 4485289166Speter while ((p = strchr (newargz[0], '\\')) != NULL) 4486289166Speter { 4487289166Speter *p = '/'; 4488289166Speter } 4489289166Speter while ((p = strchr (lt_argv_zero, '\\')) != NULL) 4490289166Speter { 4491289166Speter *p = '/'; 4492289166Speter } 4493289166Speter } 4494289166SpeterEOF 4495289166Speter ;; 4496289166Speter esac 4497289166Speter 4498289166Speter cat <<"EOF" 4499289166Speter XFREE (target_name); 4500289166Speter XFREE (actual_cwrapper_path); 4501289166Speter XFREE (actual_cwrapper_name); 4502289166Speter 4503289166Speter lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 4504289166Speter lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 4505289166Speter /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 4506289166Speter be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 4507289166Speter because on Windows, both *_VARNAMEs are PATH but uninstalled 4508289166Speter libraries must come first. */ 4509289166Speter lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 4510289166Speter lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 4511289166Speter 4512289166Speter lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 4513289166Speter nonnull (lt_argv_zero)); 4514289166Speter for (i = 0; i < newargc; i++) 4515289166Speter { 4516289166Speter lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 4517289166Speter i, nonnull (newargz[i])); 4518289166Speter } 4519289166Speter 4520289166SpeterEOF 4521289166Speter 4522289166Speter case $host_os in 4523289166Speter mingw*) 4524289166Speter cat <<"EOF" 4525289166Speter /* execv doesn't actually work on mingw as expected on unix */ 4526289166Speter newargz = prepare_spawn (newargz); 4527289166Speter rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 4528289166Speter if (rval == -1) 4529289166Speter { 4530289166Speter /* failed to start process */ 4531289166Speter lt_debugprintf (__FILE__, __LINE__, 4532289166Speter "(main) failed to launch target \"%s\": %s\n", 4533289166Speter lt_argv_zero, nonnull (strerror (errno))); 4534289166Speter return 127; 4535289166Speter } 4536289166Speter return rval; 4537289166SpeterEOF 4538289166Speter ;; 4539289166Speter *) 4540289166Speter cat <<"EOF" 4541289166Speter execv (lt_argv_zero, newargz); 4542289166Speter return rval; /* =127, but avoids unused variable warning */ 4543289166SpeterEOF 4544289166Speter ;; 4545289166Speter esac 4546289166Speter 4547289166Speter cat <<"EOF" 4548289166Speter} 4549289166Speter 4550289166Spetervoid * 4551289166Speterxmalloc (size_t num) 4552289166Speter{ 4553289166Speter void *p = (void *) malloc (num); 4554289166Speter if (!p) 4555289166Speter lt_fatal (__FILE__, __LINE__, "memory exhausted"); 4556289166Speter 4557289166Speter return p; 4558289166Speter} 4559289166Speter 4560289166Speterchar * 4561289166Speterxstrdup (const char *string) 4562289166Speter{ 4563289166Speter return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 4564289166Speter string) : NULL; 4565289166Speter} 4566289166Speter 4567289166Speterconst char * 4568289166Speterbase_name (const char *name) 4569289166Speter{ 4570289166Speter const char *base; 4571289166Speter 4572289166Speter#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4573289166Speter /* Skip over the disk name in MSDOS pathnames. */ 4574289166Speter if (isalpha ((unsigned char) name[0]) && name[1] == ':') 4575289166Speter name += 2; 4576289166Speter#endif 4577289166Speter 4578289166Speter for (base = name; *name; name++) 4579289166Speter if (IS_DIR_SEPARATOR (*name)) 4580289166Speter base = name + 1; 4581289166Speter return base; 4582289166Speter} 4583289166Speter 4584289166Speterint 4585289166Spetercheck_executable (const char *path) 4586289166Speter{ 4587289166Speter struct stat st; 4588289166Speter 4589289166Speter lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 4590289166Speter nonempty (path)); 4591289166Speter if ((!path) || (!*path)) 4592289166Speter return 0; 4593289166Speter 4594289166Speter if ((stat (path, &st) >= 0) 4595289166Speter && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 4596289166Speter return 1; 4597289166Speter else 4598289166Speter return 0; 4599289166Speter} 4600289166Speter 4601289166Speterint 4602289166Spetermake_executable (const char *path) 4603289166Speter{ 4604289166Speter int rval = 0; 4605289166Speter struct stat st; 4606289166Speter 4607289166Speter lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 4608289166Speter nonempty (path)); 4609289166Speter if ((!path) || (!*path)) 4610289166Speter return 0; 4611289166Speter 4612289166Speter if (stat (path, &st) >= 0) 4613289166Speter { 4614289166Speter rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 4615289166Speter } 4616289166Speter return rval; 4617289166Speter} 4618289166Speter 4619289166Speter/* Searches for the full path of the wrapper. Returns 4620289166Speter newly allocated full path name if found, NULL otherwise 4621289166Speter Does not chase symlinks, even on platforms that support them. 4622289166Speter*/ 4623289166Speterchar * 4624289166Speterfind_executable (const char *wrapper) 4625289166Speter{ 4626289166Speter int has_slash = 0; 4627289166Speter const char *p; 4628289166Speter const char *p_next; 4629289166Speter /* static buffer for getcwd */ 4630289166Speter char tmp[LT_PATHMAX + 1]; 4631289166Speter int tmp_len; 4632289166Speter char *concat_name; 4633289166Speter 4634289166Speter lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 4635289166Speter nonempty (wrapper)); 4636289166Speter 4637289166Speter if ((wrapper == NULL) || (*wrapper == '\0')) 4638289166Speter return NULL; 4639289166Speter 4640289166Speter /* Absolute path? */ 4641289166Speter#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4642289166Speter if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 4643289166Speter { 4644289166Speter concat_name = xstrdup (wrapper); 4645289166Speter if (check_executable (concat_name)) 4646289166Speter return concat_name; 4647289166Speter XFREE (concat_name); 4648289166Speter } 4649289166Speter else 4650289166Speter { 4651289166Speter#endif 4652289166Speter if (IS_DIR_SEPARATOR (wrapper[0])) 4653289166Speter { 4654289166Speter concat_name = xstrdup (wrapper); 4655289166Speter if (check_executable (concat_name)) 4656289166Speter return concat_name; 4657289166Speter XFREE (concat_name); 4658289166Speter } 4659289166Speter#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4660289166Speter } 4661289166Speter#endif 4662289166Speter 4663289166Speter for (p = wrapper; *p; p++) 4664289166Speter if (*p == '/') 4665289166Speter { 4666289166Speter has_slash = 1; 4667289166Speter break; 4668289166Speter } 4669289166Speter if (!has_slash) 4670289166Speter { 4671289166Speter /* no slashes; search PATH */ 4672289166Speter const char *path = getenv ("PATH"); 4673289166Speter if (path != NULL) 4674289166Speter { 4675289166Speter for (p = path; *p; p = p_next) 4676289166Speter { 4677289166Speter const char *q; 4678289166Speter size_t p_len; 4679289166Speter for (q = p; *q; q++) 4680289166Speter if (IS_PATH_SEPARATOR (*q)) 4681289166Speter break; 4682289166Speter p_len = q - p; 4683289166Speter p_next = (*q == '\0' ? q : q + 1); 4684289166Speter if (p_len == 0) 4685289166Speter { 4686289166Speter /* empty path: current directory */ 4687289166Speter if (getcwd (tmp, LT_PATHMAX) == NULL) 4688289166Speter lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4689289166Speter nonnull (strerror (errno))); 4690289166Speter tmp_len = strlen (tmp); 4691289166Speter concat_name = 4692289166Speter XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4693289166Speter memcpy (concat_name, tmp, tmp_len); 4694289166Speter concat_name[tmp_len] = '/'; 4695289166Speter strcpy (concat_name + tmp_len + 1, wrapper); 4696289166Speter } 4697289166Speter else 4698289166Speter { 4699289166Speter concat_name = 4700289166Speter XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 4701289166Speter memcpy (concat_name, p, p_len); 4702289166Speter concat_name[p_len] = '/'; 4703289166Speter strcpy (concat_name + p_len + 1, wrapper); 4704289166Speter } 4705289166Speter if (check_executable (concat_name)) 4706289166Speter return concat_name; 4707289166Speter XFREE (concat_name); 4708289166Speter } 4709289166Speter } 4710289166Speter /* not found in PATH; assume curdir */ 4711289166Speter } 4712289166Speter /* Relative path | not found in path: prepend cwd */ 4713289166Speter if (getcwd (tmp, LT_PATHMAX) == NULL) 4714289166Speter lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 4715289166Speter nonnull (strerror (errno))); 4716289166Speter tmp_len = strlen (tmp); 4717289166Speter concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4718289166Speter memcpy (concat_name, tmp, tmp_len); 4719289166Speter concat_name[tmp_len] = '/'; 4720289166Speter strcpy (concat_name + tmp_len + 1, wrapper); 4721289166Speter 4722289166Speter if (check_executable (concat_name)) 4723289166Speter return concat_name; 4724289166Speter XFREE (concat_name); 4725289166Speter return NULL; 4726289166Speter} 4727289166Speter 4728289166Speterchar * 4729289166Speterchase_symlinks (const char *pathspec) 4730289166Speter{ 4731289166Speter#ifndef S_ISLNK 4732289166Speter return xstrdup (pathspec); 4733289166Speter#else 4734289166Speter char buf[LT_PATHMAX]; 4735289166Speter struct stat s; 4736289166Speter char *tmp_pathspec = xstrdup (pathspec); 4737289166Speter char *p; 4738289166Speter int has_symlinks = 0; 4739289166Speter while (strlen (tmp_pathspec) && !has_symlinks) 4740289166Speter { 4741289166Speter lt_debugprintf (__FILE__, __LINE__, 4742289166Speter "checking path component for symlinks: %s\n", 4743289166Speter tmp_pathspec); 4744289166Speter if (lstat (tmp_pathspec, &s) == 0) 4745289166Speter { 4746289166Speter if (S_ISLNK (s.st_mode) != 0) 4747289166Speter { 4748289166Speter has_symlinks = 1; 4749289166Speter break; 4750289166Speter } 4751289166Speter 4752289166Speter /* search backwards for last DIR_SEPARATOR */ 4753289166Speter p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4754289166Speter while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4755289166Speter p--; 4756289166Speter if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4757289166Speter { 4758289166Speter /* no more DIR_SEPARATORS left */ 4759289166Speter break; 4760289166Speter } 4761289166Speter *p = '\0'; 4762289166Speter } 4763289166Speter else 4764289166Speter { 4765289166Speter lt_fatal (__FILE__, __LINE__, 4766289166Speter "error accessing file \"%s\": %s", 4767289166Speter tmp_pathspec, nonnull (strerror (errno))); 4768289166Speter } 4769289166Speter } 4770289166Speter XFREE (tmp_pathspec); 4771289166Speter 4772289166Speter if (!has_symlinks) 4773289166Speter { 4774289166Speter return xstrdup (pathspec); 4775289166Speter } 4776289166Speter 4777289166Speter tmp_pathspec = realpath (pathspec, buf); 4778289166Speter if (tmp_pathspec == 0) 4779289166Speter { 4780289166Speter lt_fatal (__FILE__, __LINE__, 4781289166Speter "could not follow symlinks for %s", pathspec); 4782289166Speter } 4783289166Speter return xstrdup (tmp_pathspec); 4784289166Speter#endif 4785289166Speter} 4786289166Speter 4787289166Speterchar * 4788289166Speterstrendzap (char *str, const char *pat) 4789289166Speter{ 4790289166Speter size_t len, patlen; 4791289166Speter 4792289166Speter assert (str != NULL); 4793289166Speter assert (pat != NULL); 4794289166Speter 4795289166Speter len = strlen (str); 4796289166Speter patlen = strlen (pat); 4797289166Speter 4798289166Speter if (patlen <= len) 4799289166Speter { 4800289166Speter str += len - patlen; 4801289166Speter if (strcmp (str, pat) == 0) 4802289166Speter *str = '\0'; 4803289166Speter } 4804289166Speter return str; 4805289166Speter} 4806289166Speter 4807289166Spetervoid 4808289166Speterlt_debugprintf (const char *file, int line, const char *fmt, ...) 4809289166Speter{ 4810289166Speter va_list args; 4811289166Speter if (lt_debug) 4812289166Speter { 4813289166Speter (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 4814289166Speter va_start (args, fmt); 4815289166Speter (void) vfprintf (stderr, fmt, args); 4816289166Speter va_end (args); 4817289166Speter } 4818289166Speter} 4819289166Speter 4820289166Speterstatic void 4821289166Speterlt_error_core (int exit_status, const char *file, 4822289166Speter int line, const char *mode, 4823289166Speter const char *message, va_list ap) 4824289166Speter{ 4825289166Speter fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4826289166Speter vfprintf (stderr, message, ap); 4827289166Speter fprintf (stderr, ".\n"); 4828289166Speter 4829289166Speter if (exit_status >= 0) 4830289166Speter exit (exit_status); 4831289166Speter} 4832289166Speter 4833289166Spetervoid 4834289166Speterlt_fatal (const char *file, int line, const char *message, ...) 4835289166Speter{ 4836289166Speter va_list ap; 4837289166Speter va_start (ap, message); 4838289166Speter lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4839289166Speter va_end (ap); 4840289166Speter} 4841289166Speter 4842289166Speterstatic const char * 4843289166Speternonnull (const char *s) 4844289166Speter{ 4845289166Speter return s ? s : "(null)"; 4846289166Speter} 4847289166Speter 4848289166Speterstatic const char * 4849289166Speternonempty (const char *s) 4850289166Speter{ 4851289166Speter return (s && !*s) ? "(empty)" : nonnull (s); 4852289166Speter} 4853289166Speter 4854289166Spetervoid 4855289166Speterlt_setenv (const char *name, const char *value) 4856289166Speter{ 4857289166Speter lt_debugprintf (__FILE__, __LINE__, 4858289166Speter "(lt_setenv) setting '%s' to '%s'\n", 4859289166Speter nonnull (name), nonnull (value)); 4860289166Speter { 4861289166Speter#ifdef HAVE_SETENV 4862289166Speter /* always make a copy, for consistency with !HAVE_SETENV */ 4863289166Speter char *str = xstrdup (value); 4864289166Speter setenv (name, str, 1); 4865289166Speter#else 4866289166Speter int len = strlen (name) + 1 + strlen (value) + 1; 4867289166Speter char *str = XMALLOC (char, len); 4868289166Speter sprintf (str, "%s=%s", name, value); 4869289166Speter if (putenv (str) != EXIT_SUCCESS) 4870289166Speter { 4871289166Speter XFREE (str); 4872289166Speter } 4873289166Speter#endif 4874289166Speter } 4875289166Speter} 4876289166Speter 4877289166Speterchar * 4878289166Speterlt_extend_str (const char *orig_value, const char *add, int to_end) 4879289166Speter{ 4880289166Speter char *new_value; 4881289166Speter if (orig_value && *orig_value) 4882289166Speter { 4883289166Speter int orig_value_len = strlen (orig_value); 4884289166Speter int add_len = strlen (add); 4885289166Speter new_value = XMALLOC (char, add_len + orig_value_len + 1); 4886289166Speter if (to_end) 4887289166Speter { 4888289166Speter strcpy (new_value, orig_value); 4889289166Speter strcpy (new_value + orig_value_len, add); 4890289166Speter } 4891289166Speter else 4892289166Speter { 4893289166Speter strcpy (new_value, add); 4894289166Speter strcpy (new_value + add_len, orig_value); 4895289166Speter } 4896289166Speter } 4897289166Speter else 4898289166Speter { 4899289166Speter new_value = xstrdup (add); 4900289166Speter } 4901289166Speter return new_value; 4902289166Speter} 4903289166Speter 4904289166Spetervoid 4905289166Speterlt_update_exe_path (const char *name, const char *value) 4906289166Speter{ 4907289166Speter lt_debugprintf (__FILE__, __LINE__, 4908289166Speter "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 4909289166Speter nonnull (name), nonnull (value)); 4910289166Speter 4911289166Speter if (name && *name && value && *value) 4912289166Speter { 4913289166Speter char *new_value = lt_extend_str (getenv (name), value, 0); 4914289166Speter /* some systems can't cope with a ':'-terminated path #' */ 4915289166Speter int len = strlen (new_value); 4916289166Speter while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4917289166Speter { 4918289166Speter new_value[len-1] = '\0'; 4919289166Speter } 4920289166Speter lt_setenv (name, new_value); 4921289166Speter XFREE (new_value); 4922289166Speter } 4923289166Speter} 4924289166Speter 4925289166Spetervoid 4926289166Speterlt_update_lib_path (const char *name, const char *value) 4927289166Speter{ 4928289166Speter lt_debugprintf (__FILE__, __LINE__, 4929289166Speter "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 4930289166Speter nonnull (name), nonnull (value)); 4931289166Speter 4932289166Speter if (name && *name && value && *value) 4933289166Speter { 4934289166Speter char *new_value = lt_extend_str (getenv (name), value, 0); 4935289166Speter lt_setenv (name, new_value); 4936289166Speter XFREE (new_value); 4937289166Speter } 4938289166Speter} 4939289166Speter 4940289166SpeterEOF 4941289166Speter case $host_os in 4942289166Speter mingw*) 4943289166Speter cat <<"EOF" 4944289166Speter 4945289166Speter/* Prepares an argument vector before calling spawn(). 4946289166Speter Note that spawn() does not by itself call the command interpreter 4947289166Speter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 4948289166Speter ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 4949289166Speter GetVersionEx(&v); 4950289166Speter v.dwPlatformId == VER_PLATFORM_WIN32_NT; 4951289166Speter }) ? "cmd.exe" : "command.com"). 4952289166Speter Instead it simply concatenates the arguments, separated by ' ', and calls 4953289166Speter CreateProcess(). We must quote the arguments since Win32 CreateProcess() 4954289166Speter interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 4955289166Speter special way: 4956289166Speter - Space and tab are interpreted as delimiters. They are not treated as 4957289166Speter delimiters if they are surrounded by double quotes: "...". 4958289166Speter - Unescaped double quotes are removed from the input. Their only effect is 4959289166Speter that within double quotes, space and tab are treated like normal 4960289166Speter characters. 4961289166Speter - Backslashes not followed by double quotes are not special. 4962289166Speter - But 2*n+1 backslashes followed by a double quote become 4963289166Speter n backslashes followed by a double quote (n >= 0): 4964289166Speter \" -> " 4965289166Speter \\\" -> \" 4966289166Speter \\\\\" -> \\" 4967289166Speter */ 4968289166Speter#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" 4969289166Speter#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" 4970289166Speterchar ** 4971289166Speterprepare_spawn (char **argv) 4972289166Speter{ 4973289166Speter size_t argc; 4974289166Speter char **new_argv; 4975289166Speter size_t i; 4976289166Speter 4977289166Speter /* Count number of arguments. */ 4978289166Speter for (argc = 0; argv[argc] != NULL; argc++) 4979289166Speter ; 4980289166Speter 4981289166Speter /* Allocate new argument vector. */ 4982289166Speter new_argv = XMALLOC (char *, argc + 1); 4983289166Speter 4984289166Speter /* Put quoted arguments into the new argument vector. */ 4985289166Speter for (i = 0; i < argc; i++) 4986289166Speter { 4987289166Speter const char *string = argv[i]; 4988289166Speter 4989289166Speter if (string[0] == '\0') 4990289166Speter new_argv[i] = xstrdup ("\"\""); 4991289166Speter else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 4992289166Speter { 4993289166Speter int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 4994289166Speter size_t length; 4995289166Speter unsigned int backslashes; 4996289166Speter const char *s; 4997289166Speter char *quoted_string; 4998289166Speter char *p; 4999289166Speter 5000289166Speter length = 0; 5001289166Speter backslashes = 0; 5002289166Speter if (quote_around) 5003289166Speter length++; 5004289166Speter for (s = string; *s != '\0'; s++) 5005289166Speter { 5006289166Speter char c = *s; 5007289166Speter if (c == '"') 5008289166Speter length += backslashes + 1; 5009289166Speter length++; 5010289166Speter if (c == '\\') 5011289166Speter backslashes++; 5012289166Speter else 5013289166Speter backslashes = 0; 5014289166Speter } 5015289166Speter if (quote_around) 5016289166Speter length += backslashes + 1; 5017289166Speter 5018289166Speter quoted_string = XMALLOC (char, length + 1); 5019289166Speter 5020289166Speter p = quoted_string; 5021289166Speter backslashes = 0; 5022289166Speter if (quote_around) 5023289166Speter *p++ = '"'; 5024289166Speter for (s = string; *s != '\0'; s++) 5025289166Speter { 5026289166Speter char c = *s; 5027289166Speter if (c == '"') 5028289166Speter { 5029289166Speter unsigned int j; 5030289166Speter for (j = backslashes + 1; j > 0; j--) 5031289166Speter *p++ = '\\'; 5032289166Speter } 5033289166Speter *p++ = c; 5034289166Speter if (c == '\\') 5035289166Speter backslashes++; 5036289166Speter else 5037289166Speter backslashes = 0; 5038289166Speter } 5039289166Speter if (quote_around) 5040289166Speter { 5041289166Speter unsigned int j; 5042289166Speter for (j = backslashes; j > 0; j--) 5043289166Speter *p++ = '\\'; 5044289166Speter *p++ = '"'; 5045289166Speter } 5046289166Speter *p = '\0'; 5047289166Speter 5048289166Speter new_argv[i] = quoted_string; 5049289166Speter } 5050289166Speter else 5051289166Speter new_argv[i] = (char *) string; 5052289166Speter } 5053289166Speter new_argv[argc] = NULL; 5054289166Speter 5055289166Speter return new_argv; 5056289166Speter} 5057289166SpeterEOF 5058289166Speter ;; 5059289166Speter esac 5060289166Speter 5061289166Speter cat <<"EOF" 5062289166Spetervoid lt_dump_script (FILE* f) 5063289166Speter{ 5064289166SpeterEOF 5065289166Speter func_emit_wrapper yes | 5066289166Speter $SED -n -e ' 5067289166Speters/^\(.\{79\}\)\(..*\)/\1\ 5068289166Speter\2/ 5069289166Speterh 5070289166Speters/\([\\"]\)/\\\1/g 5071289166Speters/$/\\n/ 5072289166Speters/\([^\n]*\).*/ fputs ("\1", f);/p 5073289166Speterg 5074289166SpeterD' 5075289166Speter cat <<"EOF" 5076289166Speter} 5077289166SpeterEOF 5078289166Speter} 5079289166Speter# end: func_emit_cwrapperexe_src 5080289166Speter 5081289166Speter# func_win32_import_lib_p ARG 5082289166Speter# True if ARG is an import lib, as indicated by $file_magic_cmd 5083289166Speterfunc_win32_import_lib_p () 5084289166Speter{ 5085289166Speter $opt_debug 5086289166Speter case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 5087289166Speter *import*) : ;; 5088289166Speter *) false ;; 5089289166Speter esac 5090289166Speter} 5091289166Speter 5092289166Speter# func_mode_link arg... 5093289166Speterfunc_mode_link () 5094289166Speter{ 5095289166Speter $opt_debug 5096251883Speter case $host in 5097289166Speter *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5098251883Speter # It is impossible to link a dll without this setting, and 5099251883Speter # we shouldn't force the makefile maintainer to figure out 5100251883Speter # which system we are compiling for in order to pass an extra 5101251883Speter # flag for every libtool invocation. 5102251883Speter # allow_undefined=no 5103251883Speter 5104251883Speter # FIXME: Unfortunately, there are problems with the above when trying 5105251883Speter # to make a dll which has undefined symbols, in which case not 5106251883Speter # even a static library is built. For now, we need to specify 5107251883Speter # -no-undefined on the libtool link line when we can be certain 5108251883Speter # that all symbols are satisfied, otherwise we get a static library. 5109251883Speter allow_undefined=yes 5110251883Speter ;; 5111251883Speter *) 5112251883Speter allow_undefined=yes 5113251883Speter ;; 5114251883Speter esac 5115289166Speter libtool_args=$nonopt 5116251883Speter base_compile="$nonopt $@" 5117289166Speter compile_command=$nonopt 5118289166Speter finalize_command=$nonopt 5119251883Speter 5120251883Speter compile_rpath= 5121251883Speter finalize_rpath= 5122251883Speter compile_shlibpath= 5123251883Speter finalize_shlibpath= 5124251883Speter convenience= 5125251883Speter old_convenience= 5126251883Speter deplibs= 5127251883Speter old_deplibs= 5128251883Speter compiler_flags= 5129251883Speter linker_flags= 5130251883Speter dllsearchpath= 5131251883Speter lib_search_path=`pwd` 5132251883Speter inst_prefix_dir= 5133289166Speter new_inherited_linker_flags= 5134251883Speter 5135251883Speter avoid_version=no 5136289166Speter bindir= 5137251883Speter dlfiles= 5138251883Speter dlprefiles= 5139251883Speter dlself=no 5140251883Speter export_dynamic=no 5141251883Speter export_symbols= 5142251883Speter export_symbols_regex= 5143251883Speter generated= 5144251883Speter libobjs= 5145251883Speter ltlibs= 5146251883Speter module=no 5147251883Speter no_install=no 5148251883Speter objs= 5149251883Speter non_pic_objects= 5150251883Speter precious_files_regex= 5151251883Speter prefer_static_libs=no 5152251883Speter preload=no 5153251883Speter prev= 5154251883Speter prevarg= 5155251883Speter release= 5156251883Speter rpath= 5157251883Speter xrpath= 5158251883Speter perm_rpath= 5159251883Speter temp_rpath= 5160251883Speter thread_safe=no 5161251883Speter vinfo= 5162251883Speter vinfo_number=no 5163289166Speter weak_libs= 5164289166Speter single_module="${wl}-single_module" 5165251883Speter func_infer_tag $base_compile 5166251883Speter 5167251883Speter # We need to know -static, to get the right output filenames. 5168251883Speter for arg 5169251883Speter do 5170251883Speter case $arg in 5171289166Speter -shared) 5172289166Speter test "$build_libtool_libs" != yes && \ 5173289166Speter func_fatal_configuration "can not build a shared library" 5174289166Speter build_old_libs=no 5175289166Speter break 5176289166Speter ;; 5177251883Speter -all-static | -static | -static-libtool-libs) 5178251883Speter case $arg in 5179251883Speter -all-static) 5180251883Speter if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 5181289166Speter func_warning "complete static linking is impossible in this configuration" 5182251883Speter fi 5183251883Speter if test -n "$link_static_flag"; then 5184251883Speter dlopen_self=$dlopen_self_static 5185251883Speter fi 5186251883Speter prefer_static_libs=yes 5187251883Speter ;; 5188251883Speter -static) 5189251883Speter if test -z "$pic_flag" && test -n "$link_static_flag"; then 5190251883Speter dlopen_self=$dlopen_self_static 5191251883Speter fi 5192251883Speter prefer_static_libs=built 5193251883Speter ;; 5194251883Speter -static-libtool-libs) 5195251883Speter if test -z "$pic_flag" && test -n "$link_static_flag"; then 5196251883Speter dlopen_self=$dlopen_self_static 5197251883Speter fi 5198251883Speter prefer_static_libs=yes 5199251883Speter ;; 5200251883Speter esac 5201251883Speter build_libtool_libs=no 5202251883Speter build_old_libs=yes 5203251883Speter break 5204251883Speter ;; 5205251883Speter esac 5206251883Speter done 5207251883Speter 5208251883Speter # See if our shared archives depend on static archives. 5209251883Speter test -n "$old_archive_from_new_cmds" && build_old_libs=yes 5210251883Speter 5211251883Speter # Go through the arguments, transforming them on the way. 5212251883Speter while test "$#" -gt 0; do 5213251883Speter arg="$1" 5214251883Speter shift 5215289166Speter func_quote_for_eval "$arg" 5216289166Speter qarg=$func_quote_for_eval_unquoted_result 5217289166Speter func_append libtool_args " $func_quote_for_eval_result" 5218251883Speter 5219251883Speter # If the previous option needs an argument, assign it. 5220251883Speter if test -n "$prev"; then 5221251883Speter case $prev in 5222251883Speter output) 5223289166Speter func_append compile_command " @OUTPUT@" 5224289166Speter func_append finalize_command " @OUTPUT@" 5225251883Speter ;; 5226251883Speter esac 5227251883Speter 5228251883Speter case $prev in 5229289166Speter bindir) 5230289166Speter bindir="$arg" 5231289166Speter prev= 5232289166Speter continue 5233289166Speter ;; 5234251883Speter dlfiles|dlprefiles) 5235251883Speter if test "$preload" = no; then 5236251883Speter # Add the symbol object into the linking commands. 5237289166Speter func_append compile_command " @SYMFILE@" 5238289166Speter func_append finalize_command " @SYMFILE@" 5239251883Speter preload=yes 5240251883Speter fi 5241251883Speter case $arg in 5242251883Speter *.la | *.lo) ;; # We handle these cases below. 5243251883Speter force) 5244251883Speter if test "$dlself" = no; then 5245251883Speter dlself=needless 5246251883Speter export_dynamic=yes 5247251883Speter fi 5248251883Speter prev= 5249251883Speter continue 5250251883Speter ;; 5251251883Speter self) 5252251883Speter if test "$prev" = dlprefiles; then 5253251883Speter dlself=yes 5254251883Speter elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 5255251883Speter dlself=yes 5256251883Speter else 5257251883Speter dlself=needless 5258251883Speter export_dynamic=yes 5259251883Speter fi 5260251883Speter prev= 5261251883Speter continue 5262251883Speter ;; 5263251883Speter *) 5264251883Speter if test "$prev" = dlfiles; then 5265289166Speter func_append dlfiles " $arg" 5266251883Speter else 5267289166Speter func_append dlprefiles " $arg" 5268251883Speter fi 5269251883Speter prev= 5270251883Speter continue 5271251883Speter ;; 5272251883Speter esac 5273251883Speter ;; 5274251883Speter expsyms) 5275251883Speter export_symbols="$arg" 5276289166Speter test -f "$arg" \ 5277289166Speter || func_fatal_error "symbol file \`$arg' does not exist" 5278251883Speter prev= 5279251883Speter continue 5280251883Speter ;; 5281251883Speter expsyms_regex) 5282251883Speter export_symbols_regex="$arg" 5283251883Speter prev= 5284251883Speter continue 5285251883Speter ;; 5286289166Speter framework) 5287289166Speter case $host in 5288289166Speter *-*-darwin*) 5289289166Speter case "$deplibs " in 5290289166Speter *" $qarg.ltframework "*) ;; 5291289166Speter *) func_append deplibs " $qarg.ltframework" # this is fixed later 5292289166Speter ;; 5293289166Speter esac 5294289166Speter ;; 5295289166Speter esac 5296251883Speter prev= 5297251883Speter continue 5298251883Speter ;; 5299289166Speter inst_prefix) 5300289166Speter inst_prefix_dir="$arg" 5301251883Speter prev= 5302251883Speter continue 5303251883Speter ;; 5304251883Speter objectlist) 5305251883Speter if test -f "$arg"; then 5306251883Speter save_arg=$arg 5307251883Speter moreargs= 5308289166Speter for fil in `cat "$save_arg"` 5309251883Speter do 5310289166Speter# func_append moreargs " $fil" 5311251883Speter arg=$fil 5312251883Speter # A libtool-controlled object. 5313251883Speter 5314251883Speter # Check to see that this really is a libtool object. 5315289166Speter if func_lalib_unsafe_p "$arg"; then 5316251883Speter pic_object= 5317251883Speter non_pic_object= 5318251883Speter 5319251883Speter # Read the .lo file 5320289166Speter func_source "$arg" 5321251883Speter 5322289166Speter if test -z "$pic_object" || 5323251883Speter test -z "$non_pic_object" || 5324289166Speter test "$pic_object" = none && 5325251883Speter test "$non_pic_object" = none; then 5326289166Speter func_fatal_error "cannot find name of object for \`$arg'" 5327251883Speter fi 5328251883Speter 5329251883Speter # Extract subdirectory from the argument. 5330289166Speter func_dirname "$arg" "/" "" 5331289166Speter xdir="$func_dirname_result" 5332251883Speter 5333251883Speter if test "$pic_object" != none; then 5334251883Speter # Prepend the subdirectory the object is found in. 5335251883Speter pic_object="$xdir$pic_object" 5336251883Speter 5337251883Speter if test "$prev" = dlfiles; then 5338251883Speter if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5339289166Speter func_append dlfiles " $pic_object" 5340251883Speter prev= 5341251883Speter continue 5342251883Speter else 5343251883Speter # If libtool objects are unsupported, then we need to preload. 5344251883Speter prev=dlprefiles 5345251883Speter fi 5346251883Speter fi 5347251883Speter 5348251883Speter # CHECK ME: I think I busted this. -Ossama 5349251883Speter if test "$prev" = dlprefiles; then 5350251883Speter # Preload the old-style object. 5351289166Speter func_append dlprefiles " $pic_object" 5352251883Speter prev= 5353251883Speter fi 5354251883Speter 5355251883Speter # A PIC object. 5356289166Speter func_append libobjs " $pic_object" 5357251883Speter arg="$pic_object" 5358251883Speter fi 5359251883Speter 5360251883Speter # Non-PIC object. 5361251883Speter if test "$non_pic_object" != none; then 5362251883Speter # Prepend the subdirectory the object is found in. 5363251883Speter non_pic_object="$xdir$non_pic_object" 5364251883Speter 5365251883Speter # A standard non-PIC object 5366289166Speter func_append non_pic_objects " $non_pic_object" 5367251883Speter if test -z "$pic_object" || test "$pic_object" = none ; then 5368251883Speter arg="$non_pic_object" 5369251883Speter fi 5370251883Speter else 5371251883Speter # If the PIC object exists, use it instead. 5372251883Speter # $xdir was prepended to $pic_object above. 5373251883Speter non_pic_object="$pic_object" 5374289166Speter func_append non_pic_objects " $non_pic_object" 5375251883Speter fi 5376251883Speter else 5377251883Speter # Only an error if not doing a dry-run. 5378289166Speter if $opt_dry_run; then 5379251883Speter # Extract subdirectory from the argument. 5380289166Speter func_dirname "$arg" "/" "" 5381289166Speter xdir="$func_dirname_result" 5382251883Speter 5383289166Speter func_lo2o "$arg" 5384289166Speter pic_object=$xdir$objdir/$func_lo2o_result 5385289166Speter non_pic_object=$xdir$func_lo2o_result 5386289166Speter func_append libobjs " $pic_object" 5387289166Speter func_append non_pic_objects " $non_pic_object" 5388289166Speter else 5389289166Speter func_fatal_error "\`$arg' is not a valid libtool object" 5390251883Speter fi 5391251883Speter fi 5392251883Speter done 5393251883Speter else 5394289166Speter func_fatal_error "link input file \`$arg' does not exist" 5395251883Speter fi 5396251883Speter arg=$save_arg 5397251883Speter prev= 5398251883Speter continue 5399251883Speter ;; 5400289166Speter precious_regex) 5401289166Speter precious_files_regex="$arg" 5402289166Speter prev= 5403289166Speter continue 5404289166Speter ;; 5405289166Speter release) 5406289166Speter release="-$arg" 5407289166Speter prev= 5408289166Speter continue 5409289166Speter ;; 5410251883Speter rpath | xrpath) 5411251883Speter # We need an absolute path. 5412251883Speter case $arg in 5413251883Speter [\\/]* | [A-Za-z]:[\\/]*) ;; 5414251883Speter *) 5415289166Speter func_fatal_error "only absolute run-paths are allowed" 5416251883Speter ;; 5417251883Speter esac 5418251883Speter if test "$prev" = rpath; then 5419251883Speter case "$rpath " in 5420251883Speter *" $arg "*) ;; 5421289166Speter *) func_append rpath " $arg" ;; 5422251883Speter esac 5423251883Speter else 5424251883Speter case "$xrpath " in 5425251883Speter *" $arg "*) ;; 5426289166Speter *) func_append xrpath " $arg" ;; 5427251883Speter esac 5428251883Speter fi 5429251883Speter prev= 5430251883Speter continue 5431251883Speter ;; 5432289166Speter shrext) 5433289166Speter shrext_cmds="$arg" 5434251883Speter prev= 5435251883Speter continue 5436251883Speter ;; 5437289166Speter weak) 5438289166Speter func_append weak_libs " $arg" 5439251883Speter prev= 5440251883Speter continue 5441251883Speter ;; 5442251883Speter xcclinker) 5443289166Speter func_append linker_flags " $qarg" 5444289166Speter func_append compiler_flags " $qarg" 5445251883Speter prev= 5446289166Speter func_append compile_command " $qarg" 5447289166Speter func_append finalize_command " $qarg" 5448251883Speter continue 5449251883Speter ;; 5450289166Speter xcompiler) 5451289166Speter func_append compiler_flags " $qarg" 5452251883Speter prev= 5453289166Speter func_append compile_command " $qarg" 5454289166Speter func_append finalize_command " $qarg" 5455251883Speter continue 5456251883Speter ;; 5457289166Speter xlinker) 5458289166Speter func_append linker_flags " $qarg" 5459289166Speter func_append compiler_flags " $wl$qarg" 5460251883Speter prev= 5461289166Speter func_append compile_command " $wl$qarg" 5462289166Speter func_append finalize_command " $wl$qarg" 5463251883Speter continue 5464251883Speter ;; 5465251883Speter *) 5466251883Speter eval "$prev=\"\$arg\"" 5467251883Speter prev= 5468251883Speter continue 5469251883Speter ;; 5470251883Speter esac 5471251883Speter fi # test -n "$prev" 5472251883Speter 5473251883Speter prevarg="$arg" 5474251883Speter 5475251883Speter case $arg in 5476251883Speter -all-static) 5477251883Speter if test -n "$link_static_flag"; then 5478289166Speter # See comment for -static flag below, for more details. 5479289166Speter func_append compile_command " $link_static_flag" 5480289166Speter func_append finalize_command " $link_static_flag" 5481251883Speter fi 5482251883Speter continue 5483251883Speter ;; 5484251883Speter 5485251883Speter -allow-undefined) 5486251883Speter # FIXME: remove this flag sometime in the future. 5487289166Speter func_fatal_error "\`-allow-undefined' must not be used because it is the default" 5488251883Speter ;; 5489251883Speter 5490251883Speter -avoid-version) 5491251883Speter avoid_version=yes 5492251883Speter continue 5493251883Speter ;; 5494251883Speter 5495289166Speter -bindir) 5496289166Speter prev=bindir 5497289166Speter continue 5498289166Speter ;; 5499289166Speter 5500251883Speter -dlopen) 5501251883Speter prev=dlfiles 5502251883Speter continue 5503251883Speter ;; 5504251883Speter 5505251883Speter -dlpreopen) 5506251883Speter prev=dlprefiles 5507251883Speter continue 5508251883Speter ;; 5509251883Speter 5510251883Speter -export-dynamic) 5511251883Speter export_dynamic=yes 5512251883Speter continue 5513251883Speter ;; 5514251883Speter 5515251883Speter -export-symbols | -export-symbols-regex) 5516251883Speter if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 5517289166Speter func_fatal_error "more than one -exported-symbols argument is not allowed" 5518251883Speter fi 5519251883Speter if test "X$arg" = "X-export-symbols"; then 5520251883Speter prev=expsyms 5521251883Speter else 5522251883Speter prev=expsyms_regex 5523251883Speter fi 5524251883Speter continue 5525251883Speter ;; 5526251883Speter 5527289166Speter -framework) 5528289166Speter prev=framework 5529251883Speter continue 5530251883Speter ;; 5531251883Speter 5532251883Speter -inst-prefix-dir) 5533251883Speter prev=inst_prefix 5534251883Speter continue 5535251883Speter ;; 5536251883Speter 5537251883Speter # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 5538251883Speter # so, if we see these flags be careful not to treat them like -L 5539251883Speter -L[A-Z][A-Z]*:*) 5540251883Speter case $with_gcc/$host in 5541251883Speter no/*-*-irix* | /*-*-irix*) 5542289166Speter func_append compile_command " $arg" 5543289166Speter func_append finalize_command " $arg" 5544251883Speter ;; 5545251883Speter esac 5546251883Speter continue 5547251883Speter ;; 5548251883Speter 5549251883Speter -L*) 5550289166Speter func_stripname "-L" '' "$arg" 5551289166Speter if test -z "$func_stripname_result"; then 5552289166Speter if test "$#" -gt 0; then 5553289166Speter func_fatal_error "require no space between \`-L' and \`$1'" 5554289166Speter else 5555289166Speter func_fatal_error "need path for \`-L' option" 5556289166Speter fi 5557289166Speter fi 5558289166Speter func_resolve_sysroot "$func_stripname_result" 5559289166Speter dir=$func_resolve_sysroot_result 5560251883Speter # We need an absolute path. 5561251883Speter case $dir in 5562251883Speter [\\/]* | [A-Za-z]:[\\/]*) ;; 5563251883Speter *) 5564251883Speter absdir=`cd "$dir" && pwd` 5565289166Speter test -z "$absdir" && \ 5566289166Speter func_fatal_error "cannot determine absolute directory name of \`$dir'" 5567251883Speter dir="$absdir" 5568251883Speter ;; 5569251883Speter esac 5570251883Speter case "$deplibs " in 5571289166Speter *" -L$dir "* | *" $arg "*) 5572289166Speter # Will only happen for absolute or sysroot arguments 5573289166Speter ;; 5574251883Speter *) 5575289166Speter # Preserve sysroot, but never include relative directories 5576289166Speter case $dir in 5577289166Speter [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 5578289166Speter *) func_append deplibs " -L$dir" ;; 5579289166Speter esac 5580289166Speter func_append lib_search_path " $dir" 5581251883Speter ;; 5582251883Speter esac 5583251883Speter case $host in 5584289166Speter *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5585289166Speter testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 5586251883Speter case :$dllsearchpath: in 5587251883Speter *":$dir:"*) ;; 5588289166Speter ::) dllsearchpath=$dir;; 5589289166Speter *) func_append dllsearchpath ":$dir";; 5590251883Speter esac 5591251883Speter case :$dllsearchpath: in 5592251883Speter *":$testbindir:"*) ;; 5593289166Speter ::) dllsearchpath=$testbindir;; 5594289166Speter *) func_append dllsearchpath ":$testbindir";; 5595251883Speter esac 5596251883Speter ;; 5597251883Speter esac 5598251883Speter continue 5599251883Speter ;; 5600251883Speter 5601251883Speter -l*) 5602251883Speter if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 5603251883Speter case $host in 5604289166Speter *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 5605251883Speter # These systems don't actually have a C or math library (as such) 5606251883Speter continue 5607251883Speter ;; 5608251883Speter *-*-os2*) 5609251883Speter # These systems don't actually have a C library (as such) 5610251883Speter test "X$arg" = "X-lc" && continue 5611251883Speter ;; 5612251883Speter *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5613251883Speter # Do not include libc due to us having libc/libc_r. 5614251883Speter test "X$arg" = "X-lc" && continue 5615251883Speter ;; 5616251883Speter *-*-rhapsody* | *-*-darwin1.[012]) 5617251883Speter # Rhapsody C and math libraries are in the System framework 5618289166Speter func_append deplibs " System.ltframework" 5619251883Speter continue 5620251883Speter ;; 5621251883Speter *-*-sco3.2v5* | *-*-sco5v6*) 5622251883Speter # Causes problems with __ctype 5623251883Speter test "X$arg" = "X-lc" && continue 5624251883Speter ;; 5625251883Speter *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 5626251883Speter # Compiler inserts libc in the correct place for threads to work 5627251883Speter test "X$arg" = "X-lc" && continue 5628251883Speter ;; 5629251883Speter esac 5630251883Speter elif test "X$arg" = "X-lc_r"; then 5631251883Speter case $host in 5632251883Speter *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5633251883Speter # Do not include libc_r directly, use -pthread flag. 5634251883Speter continue 5635251883Speter ;; 5636251883Speter esac 5637251883Speter fi 5638289166Speter func_append deplibs " $arg" 5639251883Speter continue 5640251883Speter ;; 5641251883Speter 5642289166Speter -module) 5643289166Speter module=yes 5644289166Speter continue 5645289166Speter ;; 5646289166Speter 5647251883Speter # Tru64 UNIX uses -model [arg] to determine the layout of C++ 5648251883Speter # classes, name mangling, and exception handling. 5649289166Speter # Darwin uses the -arch flag to determine output architecture. 5650289166Speter -model|-arch|-isysroot|--sysroot) 5651289166Speter func_append compiler_flags " $arg" 5652289166Speter func_append compile_command " $arg" 5653289166Speter func_append finalize_command " $arg" 5654251883Speter prev=xcompiler 5655251883Speter continue 5656251883Speter ;; 5657251883Speter 5658289166Speter -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 5659289166Speter |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 5660289166Speter func_append compiler_flags " $arg" 5661289166Speter func_append compile_command " $arg" 5662289166Speter func_append finalize_command " $arg" 5663289166Speter case "$new_inherited_linker_flags " in 5664289166Speter *" $arg "*) ;; 5665289166Speter * ) func_append new_inherited_linker_flags " $arg" ;; 5666289166Speter esac 5667251883Speter continue 5668251883Speter ;; 5669251883Speter 5670289166Speter -multi_module) 5671289166Speter single_module="${wl}-multi_module" 5672251883Speter continue 5673251883Speter ;; 5674251883Speter 5675251883Speter -no-fast-install) 5676251883Speter fast_install=no 5677251883Speter continue 5678251883Speter ;; 5679251883Speter 5680251883Speter -no-install) 5681251883Speter case $host in 5682289166Speter *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 5683251883Speter # The PATH hackery in wrapper scripts is required on Windows 5684251883Speter # and Darwin in order for the loader to find any dlls it needs. 5685289166Speter func_warning "\`-no-install' is ignored for $host" 5686289166Speter func_warning "assuming \`-no-fast-install' instead" 5687251883Speter fast_install=no 5688251883Speter ;; 5689251883Speter *) no_install=yes ;; 5690251883Speter esac 5691251883Speter continue 5692251883Speter ;; 5693251883Speter 5694251883Speter -no-undefined) 5695251883Speter allow_undefined=no 5696251883Speter continue 5697251883Speter ;; 5698251883Speter 5699251883Speter -objectlist) 5700251883Speter prev=objectlist 5701251883Speter continue 5702251883Speter ;; 5703251883Speter 5704251883Speter -o) prev=output ;; 5705251883Speter 5706251883Speter -precious-files-regex) 5707251883Speter prev=precious_regex 5708251883Speter continue 5709251883Speter ;; 5710251883Speter 5711251883Speter -release) 5712251883Speter prev=release 5713251883Speter continue 5714251883Speter ;; 5715251883Speter 5716251883Speter -rpath) 5717251883Speter prev=rpath 5718251883Speter continue 5719251883Speter ;; 5720251883Speter 5721251883Speter -R) 5722251883Speter prev=xrpath 5723251883Speter continue 5724251883Speter ;; 5725251883Speter 5726251883Speter -R*) 5727289166Speter func_stripname '-R' '' "$arg" 5728289166Speter dir=$func_stripname_result 5729251883Speter # We need an absolute path. 5730251883Speter case $dir in 5731251883Speter [\\/]* | [A-Za-z]:[\\/]*) ;; 5732289166Speter =*) 5733289166Speter func_stripname '=' '' "$dir" 5734289166Speter dir=$lt_sysroot$func_stripname_result 5735289166Speter ;; 5736251883Speter *) 5737289166Speter func_fatal_error "only absolute run-paths are allowed" 5738251883Speter ;; 5739251883Speter esac 5740251883Speter case "$xrpath " in 5741251883Speter *" $dir "*) ;; 5742289166Speter *) func_append xrpath " $dir" ;; 5743251883Speter esac 5744251883Speter continue 5745251883Speter ;; 5746251883Speter 5747289166Speter -shared) 5748289166Speter # The effects of -shared are defined in a previous loop. 5749289166Speter continue 5750289166Speter ;; 5751289166Speter 5752289166Speter -shrext) 5753289166Speter prev=shrext 5754289166Speter continue 5755289166Speter ;; 5756289166Speter 5757251883Speter -static | -static-libtool-libs) 5758251883Speter # The effects of -static are defined in a previous loop. 5759251883Speter # We used to do the same as -all-static on platforms that 5760251883Speter # didn't have a PIC flag, but the assumption that the effects 5761251883Speter # would be equivalent was wrong. It would break on at least 5762251883Speter # Digital Unix and AIX. 5763251883Speter continue 5764251883Speter ;; 5765251883Speter 5766251883Speter -thread-safe) 5767251883Speter thread_safe=yes 5768251883Speter continue 5769251883Speter ;; 5770251883Speter 5771251883Speter -version-info) 5772251883Speter prev=vinfo 5773251883Speter continue 5774251883Speter ;; 5775289166Speter 5776251883Speter -version-number) 5777251883Speter prev=vinfo 5778251883Speter vinfo_number=yes 5779251883Speter continue 5780251883Speter ;; 5781251883Speter 5782289166Speter -weak) 5783289166Speter prev=weak 5784289166Speter continue 5785289166Speter ;; 5786289166Speter 5787251883Speter -Wc,*) 5788289166Speter func_stripname '-Wc,' '' "$arg" 5789289166Speter args=$func_stripname_result 5790251883Speter arg= 5791251883Speter save_ifs="$IFS"; IFS=',' 5792251883Speter for flag in $args; do 5793251883Speter IFS="$save_ifs" 5794289166Speter func_quote_for_eval "$flag" 5795289166Speter func_append arg " $func_quote_for_eval_result" 5796289166Speter func_append compiler_flags " $func_quote_for_eval_result" 5797251883Speter done 5798251883Speter IFS="$save_ifs" 5799289166Speter func_stripname ' ' '' "$arg" 5800289166Speter arg=$func_stripname_result 5801251883Speter ;; 5802251883Speter 5803251883Speter -Wl,*) 5804289166Speter func_stripname '-Wl,' '' "$arg" 5805289166Speter args=$func_stripname_result 5806251883Speter arg= 5807251883Speter save_ifs="$IFS"; IFS=',' 5808251883Speter for flag in $args; do 5809251883Speter IFS="$save_ifs" 5810289166Speter func_quote_for_eval "$flag" 5811289166Speter func_append arg " $wl$func_quote_for_eval_result" 5812289166Speter func_append compiler_flags " $wl$func_quote_for_eval_result" 5813289166Speter func_append linker_flags " $func_quote_for_eval_result" 5814251883Speter done 5815251883Speter IFS="$save_ifs" 5816289166Speter func_stripname ' ' '' "$arg" 5817289166Speter arg=$func_stripname_result 5818251883Speter ;; 5819251883Speter 5820251883Speter -Xcompiler) 5821251883Speter prev=xcompiler 5822251883Speter continue 5823251883Speter ;; 5824251883Speter 5825251883Speter -Xlinker) 5826251883Speter prev=xlinker 5827251883Speter continue 5828251883Speter ;; 5829251883Speter 5830251883Speter -XCClinker) 5831251883Speter prev=xcclinker 5832251883Speter continue 5833251883Speter ;; 5834251883Speter 5835289166Speter # -msg_* for osf cc 5836289166Speter -msg_*) 5837289166Speter func_quote_for_eval "$arg" 5838289166Speter arg="$func_quote_for_eval_result" 5839289166Speter ;; 5840289166Speter 5841289166Speter # Flags to be passed through unchanged, with rationale: 5842289166Speter # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 5843289166Speter # -r[0-9][0-9]* specify processor for the SGI compiler 5844289166Speter # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 5845289166Speter # +DA*, +DD* enable 64-bit mode for the HP compiler 5846289166Speter # -q* compiler args for the IBM compiler 5847289166Speter # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 5848289166Speter # -F/path path to uninstalled frameworks, gcc on darwin 5849289166Speter # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 5850289166Speter # @file GCC response files 5851289166Speter # -tp=* Portland pgcc target processor selection 5852289166Speter # --sysroot=* for sysroot support 5853289166Speter # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 5854289166Speter -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 5855289166Speter -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 5856289166Speter -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 5857289166Speter func_quote_for_eval "$arg" 5858289166Speter arg="$func_quote_for_eval_result" 5859289166Speter func_append compile_command " $arg" 5860289166Speter func_append finalize_command " $arg" 5861289166Speter func_append compiler_flags " $arg" 5862289166Speter continue 5863289166Speter ;; 5864289166Speter 5865251883Speter # Some other compiler flag. 5866251883Speter -* | +*) 5867289166Speter func_quote_for_eval "$arg" 5868289166Speter arg="$func_quote_for_eval_result" 5869251883Speter ;; 5870251883Speter 5871251883Speter *.$objext) 5872251883Speter # A standard object. 5873289166Speter func_append objs " $arg" 5874251883Speter ;; 5875251883Speter 5876251883Speter *.lo) 5877251883Speter # A libtool-controlled object. 5878251883Speter 5879251883Speter # Check to see that this really is a libtool object. 5880289166Speter if func_lalib_unsafe_p "$arg"; then 5881251883Speter pic_object= 5882251883Speter non_pic_object= 5883251883Speter 5884251883Speter # Read the .lo file 5885289166Speter func_source "$arg" 5886251883Speter 5887289166Speter if test -z "$pic_object" || 5888251883Speter test -z "$non_pic_object" || 5889289166Speter test "$pic_object" = none && 5890251883Speter test "$non_pic_object" = none; then 5891289166Speter func_fatal_error "cannot find name of object for \`$arg'" 5892251883Speter fi 5893251883Speter 5894251883Speter # Extract subdirectory from the argument. 5895289166Speter func_dirname "$arg" "/" "" 5896289166Speter xdir="$func_dirname_result" 5897251883Speter 5898251883Speter if test "$pic_object" != none; then 5899251883Speter # Prepend the subdirectory the object is found in. 5900251883Speter pic_object="$xdir$pic_object" 5901251883Speter 5902251883Speter if test "$prev" = dlfiles; then 5903251883Speter if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5904289166Speter func_append dlfiles " $pic_object" 5905251883Speter prev= 5906251883Speter continue 5907251883Speter else 5908251883Speter # If libtool objects are unsupported, then we need to preload. 5909251883Speter prev=dlprefiles 5910251883Speter fi 5911251883Speter fi 5912251883Speter 5913251883Speter # CHECK ME: I think I busted this. -Ossama 5914251883Speter if test "$prev" = dlprefiles; then 5915251883Speter # Preload the old-style object. 5916289166Speter func_append dlprefiles " $pic_object" 5917251883Speter prev= 5918251883Speter fi 5919251883Speter 5920251883Speter # A PIC object. 5921289166Speter func_append libobjs " $pic_object" 5922251883Speter arg="$pic_object" 5923251883Speter fi 5924251883Speter 5925251883Speter # Non-PIC object. 5926251883Speter if test "$non_pic_object" != none; then 5927251883Speter # Prepend the subdirectory the object is found in. 5928251883Speter non_pic_object="$xdir$non_pic_object" 5929251883Speter 5930251883Speter # A standard non-PIC object 5931289166Speter func_append non_pic_objects " $non_pic_object" 5932251883Speter if test -z "$pic_object" || test "$pic_object" = none ; then 5933251883Speter arg="$non_pic_object" 5934251883Speter fi 5935251883Speter else 5936251883Speter # If the PIC object exists, use it instead. 5937251883Speter # $xdir was prepended to $pic_object above. 5938251883Speter non_pic_object="$pic_object" 5939289166Speter func_append non_pic_objects " $non_pic_object" 5940251883Speter fi 5941251883Speter else 5942251883Speter # Only an error if not doing a dry-run. 5943289166Speter if $opt_dry_run; then 5944251883Speter # Extract subdirectory from the argument. 5945289166Speter func_dirname "$arg" "/" "" 5946289166Speter xdir="$func_dirname_result" 5947251883Speter 5948289166Speter func_lo2o "$arg" 5949289166Speter pic_object=$xdir$objdir/$func_lo2o_result 5950289166Speter non_pic_object=$xdir$func_lo2o_result 5951289166Speter func_append libobjs " $pic_object" 5952289166Speter func_append non_pic_objects " $non_pic_object" 5953289166Speter else 5954289166Speter func_fatal_error "\`$arg' is not a valid libtool object" 5955251883Speter fi 5956251883Speter fi 5957251883Speter ;; 5958251883Speter 5959251883Speter *.$libext) 5960251883Speter # An archive. 5961289166Speter func_append deplibs " $arg" 5962289166Speter func_append old_deplibs " $arg" 5963251883Speter continue 5964251883Speter ;; 5965251883Speter 5966251883Speter *.la) 5967251883Speter # A libtool-controlled library. 5968251883Speter 5969289166Speter func_resolve_sysroot "$arg" 5970251883Speter if test "$prev" = dlfiles; then 5971251883Speter # This library was specified with -dlopen. 5972289166Speter func_append dlfiles " $func_resolve_sysroot_result" 5973251883Speter prev= 5974251883Speter elif test "$prev" = dlprefiles; then 5975251883Speter # The library was specified with -dlpreopen. 5976289166Speter func_append dlprefiles " $func_resolve_sysroot_result" 5977251883Speter prev= 5978251883Speter else 5979289166Speter func_append deplibs " $func_resolve_sysroot_result" 5980251883Speter fi 5981251883Speter continue 5982251883Speter ;; 5983251883Speter 5984251883Speter # Some other compiler argument. 5985251883Speter *) 5986251883Speter # Unknown arguments in both finalize_command and compile_command need 5987251883Speter # to be aesthetically quoted because they are evaled later. 5988289166Speter func_quote_for_eval "$arg" 5989289166Speter arg="$func_quote_for_eval_result" 5990251883Speter ;; 5991251883Speter esac # arg 5992251883Speter 5993251883Speter # Now actually substitute the argument into the commands. 5994251883Speter if test -n "$arg"; then 5995289166Speter func_append compile_command " $arg" 5996289166Speter func_append finalize_command " $arg" 5997251883Speter fi 5998251883Speter done # argument parsing loop 5999251883Speter 6000289166Speter test -n "$prev" && \ 6001289166Speter func_fatal_help "the \`$prevarg' option requires an argument" 6002251883Speter 6003251883Speter if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 6004251883Speter eval arg=\"$export_dynamic_flag_spec\" 6005289166Speter func_append compile_command " $arg" 6006289166Speter func_append finalize_command " $arg" 6007251883Speter fi 6008251883Speter 6009251883Speter oldlibs= 6010251883Speter # calculate the name of the file, without its directory 6011289166Speter func_basename "$output" 6012289166Speter outputname="$func_basename_result" 6013251883Speter libobjs_save="$libobjs" 6014251883Speter 6015251883Speter if test -n "$shlibpath_var"; then 6016251883Speter # get the directories listed in $shlibpath_var 6017289166Speter eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 6018251883Speter else 6019251883Speter shlib_search_path= 6020251883Speter fi 6021251883Speter eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 6022251883Speter eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 6023251883Speter 6024289166Speter func_dirname "$output" "/" "" 6025289166Speter output_objdir="$func_dirname_result$objdir" 6026289166Speter func_to_tool_file "$output_objdir/" 6027289166Speter tool_output_objdir=$func_to_tool_file_result 6028251883Speter # Create the object directory. 6029289166Speter func_mkdir_p "$output_objdir" 6030251883Speter 6031251883Speter # Determine the type of output 6032251883Speter case $output in 6033251883Speter "") 6034289166Speter func_fatal_help "you must specify an output file" 6035251883Speter ;; 6036251883Speter *.$libext) linkmode=oldlib ;; 6037251883Speter *.lo | *.$objext) linkmode=obj ;; 6038251883Speter *.la) linkmode=lib ;; 6039251883Speter *) linkmode=prog ;; # Anything else should be a program. 6040251883Speter esac 6041251883Speter 6042251883Speter specialdeplibs= 6043251883Speter 6044251883Speter libs= 6045251883Speter # Find all interdependent deplibs by searching for libraries 6046251883Speter # that are linked more than once (e.g. -la -lb -la) 6047251883Speter for deplib in $deplibs; do 6048289166Speter if $opt_preserve_dup_deps ; then 6049251883Speter case "$libs " in 6050289166Speter *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6051251883Speter esac 6052251883Speter fi 6053289166Speter func_append libs " $deplib" 6054251883Speter done 6055251883Speter 6056251883Speter if test "$linkmode" = lib; then 6057251883Speter libs="$predeps $libs $compiler_lib_search_path $postdeps" 6058251883Speter 6059251883Speter # Compute libraries that are listed more than once in $predeps 6060251883Speter # $postdeps and mark them as special (i.e., whose duplicates are 6061251883Speter # not to be eliminated). 6062251883Speter pre_post_deps= 6063289166Speter if $opt_duplicate_compiler_generated_deps; then 6064251883Speter for pre_post_dep in $predeps $postdeps; do 6065251883Speter case "$pre_post_deps " in 6066289166Speter *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 6067251883Speter esac 6068289166Speter func_append pre_post_deps " $pre_post_dep" 6069251883Speter done 6070251883Speter fi 6071251883Speter pre_post_deps= 6072251883Speter fi 6073251883Speter 6074251883Speter deplibs= 6075251883Speter newdependency_libs= 6076251883Speter newlib_search_path= 6077251883Speter need_relink=no # whether we're linking any uninstalled libtool libraries 6078251883Speter notinst_deplibs= # not-installed libtool libraries 6079289166Speter notinst_path= # paths that contain not-installed libtool libraries 6080289166Speter 6081251883Speter case $linkmode in 6082251883Speter lib) 6083289166Speter passes="conv dlpreopen link" 6084251883Speter for file in $dlfiles $dlprefiles; do 6085251883Speter case $file in 6086251883Speter *.la) ;; 6087251883Speter *) 6088289166Speter func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 6089251883Speter ;; 6090251883Speter esac 6091251883Speter done 6092251883Speter ;; 6093251883Speter prog) 6094251883Speter compile_deplibs= 6095251883Speter finalize_deplibs= 6096251883Speter alldeplibs=no 6097251883Speter newdlfiles= 6098251883Speter newdlprefiles= 6099251883Speter passes="conv scan dlopen dlpreopen link" 6100251883Speter ;; 6101251883Speter *) passes="conv" 6102251883Speter ;; 6103251883Speter esac 6104289166Speter 6105251883Speter for pass in $passes; do 6106289166Speter # The preopen pass in lib mode reverses $deplibs; put it back here 6107289166Speter # so that -L comes before libs that need it for instance... 6108289166Speter if test "$linkmode,$pass" = "lib,link"; then 6109289166Speter ## FIXME: Find the place where the list is rebuilt in the wrong 6110289166Speter ## order, and fix it there properly 6111289166Speter tmp_deplibs= 6112289166Speter for deplib in $deplibs; do 6113289166Speter tmp_deplibs="$deplib $tmp_deplibs" 6114289166Speter done 6115289166Speter deplibs="$tmp_deplibs" 6116289166Speter fi 6117289166Speter 6118251883Speter if test "$linkmode,$pass" = "lib,link" || 6119251883Speter test "$linkmode,$pass" = "prog,scan"; then 6120251883Speter libs="$deplibs" 6121251883Speter deplibs= 6122251883Speter fi 6123251883Speter if test "$linkmode" = prog; then 6124251883Speter case $pass in 6125251883Speter dlopen) libs="$dlfiles" ;; 6126251883Speter dlpreopen) libs="$dlprefiles" ;; 6127251883Speter link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 6128251883Speter esac 6129251883Speter fi 6130289166Speter if test "$linkmode,$pass" = "lib,dlpreopen"; then 6131289166Speter # Collect and forward deplibs of preopened libtool libs 6132289166Speter for lib in $dlprefiles; do 6133289166Speter # Ignore non-libtool-libs 6134289166Speter dependency_libs= 6135289166Speter func_resolve_sysroot "$lib" 6136289166Speter case $lib in 6137289166Speter *.la) func_source "$func_resolve_sysroot_result" ;; 6138289166Speter esac 6139289166Speter 6140289166Speter # Collect preopened libtool deplibs, except any this library 6141289166Speter # has declared as weak libs 6142289166Speter for deplib in $dependency_libs; do 6143289166Speter func_basename "$deplib" 6144289166Speter deplib_base=$func_basename_result 6145289166Speter case " $weak_libs " in 6146289166Speter *" $deplib_base "*) ;; 6147289166Speter *) func_append deplibs " $deplib" ;; 6148289166Speter esac 6149289166Speter done 6150289166Speter done 6151289166Speter libs="$dlprefiles" 6152289166Speter fi 6153251883Speter if test "$pass" = dlopen; then 6154251883Speter # Collect dlpreopened libraries 6155251883Speter save_deplibs="$deplibs" 6156251883Speter deplibs= 6157251883Speter fi 6158289166Speter 6159251883Speter for deplib in $libs; do 6160251883Speter lib= 6161251883Speter found=no 6162251883Speter case $deplib in 6163289166Speter -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 6164289166Speter |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 6165251883Speter if test "$linkmode,$pass" = "prog,link"; then 6166251883Speter compile_deplibs="$deplib $compile_deplibs" 6167251883Speter finalize_deplibs="$deplib $finalize_deplibs" 6168251883Speter else 6169289166Speter func_append compiler_flags " $deplib" 6170289166Speter if test "$linkmode" = lib ; then 6171289166Speter case "$new_inherited_linker_flags " in 6172289166Speter *" $deplib "*) ;; 6173289166Speter * ) func_append new_inherited_linker_flags " $deplib" ;; 6174289166Speter esac 6175289166Speter fi 6176251883Speter fi 6177251883Speter continue 6178251883Speter ;; 6179251883Speter -l*) 6180251883Speter if test "$linkmode" != lib && test "$linkmode" != prog; then 6181289166Speter func_warning "\`-l' is ignored for archives/objects" 6182251883Speter continue 6183251883Speter fi 6184289166Speter func_stripname '-l' '' "$deplib" 6185289166Speter name=$func_stripname_result 6186289166Speter if test "$linkmode" = lib; then 6187289166Speter searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 6188289166Speter else 6189289166Speter searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 6190289166Speter fi 6191289166Speter for searchdir in $searchdirs; do 6192251883Speter for search_ext in .la $std_shrext .so .a; do 6193251883Speter # Search the libtool library 6194251883Speter lib="$searchdir/lib${name}${search_ext}" 6195251883Speter if test -f "$lib"; then 6196251883Speter if test "$search_ext" = ".la"; then 6197251883Speter found=yes 6198251883Speter else 6199251883Speter found=no 6200251883Speter fi 6201251883Speter break 2 6202251883Speter fi 6203251883Speter done 6204251883Speter done 6205251883Speter if test "$found" != yes; then 6206251883Speter # deplib doesn't seem to be a libtool library 6207251883Speter if test "$linkmode,$pass" = "prog,link"; then 6208251883Speter compile_deplibs="$deplib $compile_deplibs" 6209251883Speter finalize_deplibs="$deplib $finalize_deplibs" 6210251883Speter else 6211251883Speter deplibs="$deplib $deplibs" 6212251883Speter test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6213251883Speter fi 6214251883Speter continue 6215251883Speter else # deplib is a libtool library 6216251883Speter # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 6217251883Speter # We need to do some special things here, and not later. 6218251883Speter if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6219251883Speter case " $predeps $postdeps " in 6220251883Speter *" $deplib "*) 6221289166Speter if func_lalib_p "$lib"; then 6222251883Speter library_names= 6223251883Speter old_library= 6224289166Speter func_source "$lib" 6225251883Speter for l in $old_library $library_names; do 6226251883Speter ll="$l" 6227251883Speter done 6228251883Speter if test "X$ll" = "X$old_library" ; then # only static version available 6229251883Speter found=no 6230289166Speter func_dirname "$lib" "" "." 6231289166Speter ladir="$func_dirname_result" 6232251883Speter lib=$ladir/$old_library 6233251883Speter if test "$linkmode,$pass" = "prog,link"; then 6234251883Speter compile_deplibs="$deplib $compile_deplibs" 6235251883Speter finalize_deplibs="$deplib $finalize_deplibs" 6236251883Speter else 6237251883Speter deplibs="$deplib $deplibs" 6238251883Speter test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6239251883Speter fi 6240251883Speter continue 6241251883Speter fi 6242251883Speter fi 6243289166Speter ;; 6244251883Speter *) ;; 6245251883Speter esac 6246251883Speter fi 6247251883Speter fi 6248251883Speter ;; # -l 6249289166Speter *.ltframework) 6250289166Speter if test "$linkmode,$pass" = "prog,link"; then 6251289166Speter compile_deplibs="$deplib $compile_deplibs" 6252289166Speter finalize_deplibs="$deplib $finalize_deplibs" 6253289166Speter else 6254289166Speter deplibs="$deplib $deplibs" 6255289166Speter if test "$linkmode" = lib ; then 6256289166Speter case "$new_inherited_linker_flags " in 6257289166Speter *" $deplib "*) ;; 6258289166Speter * ) func_append new_inherited_linker_flags " $deplib" ;; 6259289166Speter esac 6260289166Speter fi 6261289166Speter fi 6262289166Speter continue 6263289166Speter ;; 6264251883Speter -L*) 6265251883Speter case $linkmode in 6266251883Speter lib) 6267251883Speter deplibs="$deplib $deplibs" 6268251883Speter test "$pass" = conv && continue 6269251883Speter newdependency_libs="$deplib $newdependency_libs" 6270289166Speter func_stripname '-L' '' "$deplib" 6271289166Speter func_resolve_sysroot "$func_stripname_result" 6272289166Speter func_append newlib_search_path " $func_resolve_sysroot_result" 6273251883Speter ;; 6274251883Speter prog) 6275251883Speter if test "$pass" = conv; then 6276251883Speter deplibs="$deplib $deplibs" 6277251883Speter continue 6278251883Speter fi 6279251883Speter if test "$pass" = scan; then 6280251883Speter deplibs="$deplib $deplibs" 6281251883Speter else 6282251883Speter compile_deplibs="$deplib $compile_deplibs" 6283251883Speter finalize_deplibs="$deplib $finalize_deplibs" 6284251883Speter fi 6285289166Speter func_stripname '-L' '' "$deplib" 6286289166Speter func_resolve_sysroot "$func_stripname_result" 6287289166Speter func_append newlib_search_path " $func_resolve_sysroot_result" 6288251883Speter ;; 6289251883Speter *) 6290289166Speter func_warning "\`-L' is ignored for archives/objects" 6291251883Speter ;; 6292251883Speter esac # linkmode 6293251883Speter continue 6294251883Speter ;; # -L 6295251883Speter -R*) 6296251883Speter if test "$pass" = link; then 6297289166Speter func_stripname '-R' '' "$deplib" 6298289166Speter func_resolve_sysroot "$func_stripname_result" 6299289166Speter dir=$func_resolve_sysroot_result 6300251883Speter # Make sure the xrpath contains only unique directories. 6301251883Speter case "$xrpath " in 6302251883Speter *" $dir "*) ;; 6303289166Speter *) func_append xrpath " $dir" ;; 6304251883Speter esac 6305251883Speter fi 6306251883Speter deplibs="$deplib $deplibs" 6307251883Speter continue 6308251883Speter ;; 6309289166Speter *.la) 6310289166Speter func_resolve_sysroot "$deplib" 6311289166Speter lib=$func_resolve_sysroot_result 6312289166Speter ;; 6313251883Speter *.$libext) 6314251883Speter if test "$pass" = conv; then 6315251883Speter deplibs="$deplib $deplibs" 6316251883Speter continue 6317251883Speter fi 6318251883Speter case $linkmode in 6319251883Speter lib) 6320289166Speter # Linking convenience modules into shared libraries is allowed, 6321289166Speter # but linking other static libraries is non-portable. 6322289166Speter case " $dlpreconveniencelibs " in 6323289166Speter *" $deplib "*) ;; 6324289166Speter *) 6325289166Speter valid_a_lib=no 6326289166Speter case $deplibs_check_method in 6327289166Speter match_pattern*) 6328289166Speter set dummy $deplibs_check_method; shift 6329289166Speter match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6330289166Speter if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 6331251883Speter | $EGREP "$match_pattern_regex" > /dev/null; then 6332289166Speter valid_a_lib=yes 6333289166Speter fi 6334289166Speter ;; 6335289166Speter pass_all) 6336251883Speter valid_a_lib=yes 6337251883Speter ;; 6338289166Speter esac 6339289166Speter if test "$valid_a_lib" != yes; then 6340289166Speter echo 6341289166Speter $ECHO "*** Warning: Trying to link with static lib archive $deplib." 6342289166Speter echo "*** I have the capability to make that library automatically link in when" 6343289166Speter echo "*** you link to this library. But I can only do this if you have a" 6344289166Speter echo "*** shared version of the library, which you do not appear to have" 6345289166Speter echo "*** because the file extensions .$libext of this argument makes me believe" 6346289166Speter echo "*** that it is just a static archive that I should not use here." 6347289166Speter else 6348289166Speter echo 6349289166Speter $ECHO "*** Warning: Linking the shared library $output against the" 6350289166Speter $ECHO "*** static library $deplib is not portable!" 6351289166Speter deplibs="$deplib $deplibs" 6352289166Speter fi 6353289166Speter ;; 6354289166Speter esac 6355251883Speter continue 6356251883Speter ;; 6357251883Speter prog) 6358251883Speter if test "$pass" != link; then 6359251883Speter deplibs="$deplib $deplibs" 6360251883Speter else 6361251883Speter compile_deplibs="$deplib $compile_deplibs" 6362251883Speter finalize_deplibs="$deplib $finalize_deplibs" 6363251883Speter fi 6364251883Speter continue 6365251883Speter ;; 6366251883Speter esac # linkmode 6367251883Speter ;; # *.$libext 6368251883Speter *.lo | *.$objext) 6369251883Speter if test "$pass" = conv; then 6370251883Speter deplibs="$deplib $deplibs" 6371251883Speter elif test "$linkmode" = prog; then 6372251883Speter if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 6373251883Speter # If there is no dlopen support or we're linking statically, 6374251883Speter # we need to preload. 6375289166Speter func_append newdlprefiles " $deplib" 6376251883Speter compile_deplibs="$deplib $compile_deplibs" 6377251883Speter finalize_deplibs="$deplib $finalize_deplibs" 6378251883Speter else 6379289166Speter func_append newdlfiles " $deplib" 6380251883Speter fi 6381251883Speter fi 6382251883Speter continue 6383251883Speter ;; 6384251883Speter %DEPLIBS%) 6385251883Speter alldeplibs=yes 6386251883Speter continue 6387251883Speter ;; 6388251883Speter esac # case $deplib 6389289166Speter 6390251883Speter if test "$found" = yes || test -f "$lib"; then : 6391251883Speter else 6392289166Speter func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 6393251883Speter fi 6394251883Speter 6395251883Speter # Check to see that this really is a libtool archive. 6396289166Speter func_lalib_unsafe_p "$lib" \ 6397289166Speter || func_fatal_error "\`$lib' is not a valid libtool archive" 6398251883Speter 6399289166Speter func_dirname "$lib" "" "." 6400289166Speter ladir="$func_dirname_result" 6401251883Speter 6402251883Speter dlname= 6403251883Speter dlopen= 6404251883Speter dlpreopen= 6405251883Speter libdir= 6406251883Speter library_names= 6407251883Speter old_library= 6408289166Speter inherited_linker_flags= 6409251883Speter # If the library was installed with an old release of libtool, 6410251883Speter # it will not redefine variables installed, or shouldnotlink 6411251883Speter installed=yes 6412251883Speter shouldnotlink=no 6413251883Speter avoidtemprpath= 6414251883Speter 6415251883Speter 6416251883Speter # Read the .la file 6417289166Speter func_source "$lib" 6418251883Speter 6419289166Speter # Convert "-framework foo" to "foo.ltframework" 6420289166Speter if test -n "$inherited_linker_flags"; then 6421289166Speter tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 6422289166Speter for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 6423289166Speter case " $new_inherited_linker_flags " in 6424289166Speter *" $tmp_inherited_linker_flag "*) ;; 6425289166Speter *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 6426289166Speter esac 6427289166Speter done 6428289166Speter fi 6429289166Speter dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 6430251883Speter if test "$linkmode,$pass" = "lib,link" || 6431251883Speter test "$linkmode,$pass" = "prog,scan" || 6432251883Speter { test "$linkmode" != prog && test "$linkmode" != lib; }; then 6433289166Speter test -n "$dlopen" && func_append dlfiles " $dlopen" 6434289166Speter test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 6435251883Speter fi 6436251883Speter 6437251883Speter if test "$pass" = conv; then 6438251883Speter # Only check for convenience libraries 6439251883Speter deplibs="$lib $deplibs" 6440251883Speter if test -z "$libdir"; then 6441251883Speter if test -z "$old_library"; then 6442289166Speter func_fatal_error "cannot find name of link library for \`$lib'" 6443251883Speter fi 6444251883Speter # It is a libtool convenience library, so add in its objects. 6445289166Speter func_append convenience " $ladir/$objdir/$old_library" 6446289166Speter func_append old_convenience " $ladir/$objdir/$old_library" 6447251883Speter elif test "$linkmode" != prog && test "$linkmode" != lib; then 6448289166Speter func_fatal_error "\`$lib' is not a convenience library" 6449251883Speter fi 6450289166Speter tmp_libs= 6451289166Speter for deplib in $dependency_libs; do 6452289166Speter deplibs="$deplib $deplibs" 6453289166Speter if $opt_preserve_dup_deps ; then 6454289166Speter case "$tmp_libs " in 6455289166Speter *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6456289166Speter esac 6457289166Speter fi 6458289166Speter func_append tmp_libs " $deplib" 6459289166Speter done 6460251883Speter continue 6461251883Speter fi # $pass = conv 6462251883Speter 6463251883Speter 6464251883Speter # Get the name of the library we link against. 6465251883Speter linklib= 6466289166Speter if test -n "$old_library" && 6467289166Speter { test "$prefer_static_libs" = yes || 6468289166Speter test "$prefer_static_libs,$installed" = "built,no"; }; then 6469289166Speter linklib=$old_library 6470289166Speter else 6471289166Speter for l in $old_library $library_names; do 6472289166Speter linklib="$l" 6473289166Speter done 6474289166Speter fi 6475251883Speter if test -z "$linklib"; then 6476289166Speter func_fatal_error "cannot find name of link library for \`$lib'" 6477251883Speter fi 6478251883Speter 6479251883Speter # This library was specified with -dlopen. 6480251883Speter if test "$pass" = dlopen; then 6481251883Speter if test -z "$libdir"; then 6482289166Speter func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 6483251883Speter fi 6484251883Speter if test -z "$dlname" || 6485251883Speter test "$dlopen_support" != yes || 6486251883Speter test "$build_libtool_libs" = no; then 6487251883Speter # If there is no dlname, no dlopen support or we're linking 6488251883Speter # statically, we need to preload. We also need to preload any 6489251883Speter # dependent libraries so libltdl's deplib preloader doesn't 6490251883Speter # bomb out in the load deplibs phase. 6491289166Speter func_append dlprefiles " $lib $dependency_libs" 6492251883Speter else 6493289166Speter func_append newdlfiles " $lib" 6494251883Speter fi 6495251883Speter continue 6496251883Speter fi # $pass = dlopen 6497251883Speter 6498251883Speter # We need an absolute path. 6499251883Speter case $ladir in 6500251883Speter [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 6501251883Speter *) 6502251883Speter abs_ladir=`cd "$ladir" && pwd` 6503251883Speter if test -z "$abs_ladir"; then 6504289166Speter func_warning "cannot determine absolute directory name of \`$ladir'" 6505289166Speter func_warning "passing it literally to the linker, although it might fail" 6506251883Speter abs_ladir="$ladir" 6507251883Speter fi 6508251883Speter ;; 6509251883Speter esac 6510289166Speter func_basename "$lib" 6511289166Speter laname="$func_basename_result" 6512251883Speter 6513251883Speter # Find the relevant object directory and library name. 6514251883Speter if test "X$installed" = Xyes; then 6515289166Speter if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6516289166Speter #func_warning "library \`$lib' was moved." 6517251883Speter dir="$ladir" 6518251883Speter absdir="$abs_ladir" 6519251883Speter libdir="$abs_ladir" 6520251883Speter else 6521289166Speter dir="$lt_sysroot$libdir" 6522289166Speter absdir="$lt_sysroot$libdir" 6523251883Speter fi 6524251883Speter test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 6525251883Speter else 6526251883Speter if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6527251883Speter dir="$ladir" 6528251883Speter absdir="$abs_ladir" 6529251883Speter # Remove this search path later 6530289166Speter func_append notinst_path " $abs_ladir" 6531251883Speter else 6532251883Speter dir="$ladir/$objdir" 6533251883Speter absdir="$abs_ladir/$objdir" 6534251883Speter # Remove this search path later 6535289166Speter func_append notinst_path " $abs_ladir" 6536251883Speter fi 6537251883Speter fi # $installed = yes 6538289166Speter func_stripname 'lib' '.la' "$laname" 6539289166Speter name=$func_stripname_result 6540251883Speter 6541251883Speter # This library was specified with -dlpreopen. 6542251883Speter if test "$pass" = dlpreopen; then 6543289166Speter if test -z "$libdir" && test "$linkmode" = prog; then 6544289166Speter func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 6545251883Speter fi 6546289166Speter case "$host" in 6547289166Speter # special handling for platforms with PE-DLLs. 6548289166Speter *cygwin* | *mingw* | *cegcc* ) 6549289166Speter # Linker will automatically link against shared library if both 6550289166Speter # static and shared are present. Therefore, ensure we extract 6551289166Speter # symbols from the import library if a shared library is present 6552289166Speter # (otherwise, the dlopen module name will be incorrect). We do 6553289166Speter # this by putting the import library name into $newdlprefiles. 6554289166Speter # We recover the dlopen module name by 'saving' the la file 6555289166Speter # name in a special purpose variable, and (later) extracting the 6556289166Speter # dlname from the la file. 6557289166Speter if test -n "$dlname"; then 6558289166Speter func_tr_sh "$dir/$linklib" 6559289166Speter eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 6560289166Speter func_append newdlprefiles " $dir/$linklib" 6561289166Speter else 6562289166Speter func_append newdlprefiles " $dir/$old_library" 6563289166Speter # Keep a list of preopened convenience libraries to check 6564289166Speter # that they are being used correctly in the link pass. 6565289166Speter test -z "$libdir" && \ 6566289166Speter func_append dlpreconveniencelibs " $dir/$old_library" 6567289166Speter fi 6568289166Speter ;; 6569289166Speter * ) 6570289166Speter # Prefer using a static library (so that no silly _DYNAMIC symbols 6571289166Speter # are required to link). 6572289166Speter if test -n "$old_library"; then 6573289166Speter func_append newdlprefiles " $dir/$old_library" 6574289166Speter # Keep a list of preopened convenience libraries to check 6575289166Speter # that they are being used correctly in the link pass. 6576289166Speter test -z "$libdir" && \ 6577289166Speter func_append dlpreconveniencelibs " $dir/$old_library" 6578289166Speter # Otherwise, use the dlname, so that lt_dlopen finds it. 6579289166Speter elif test -n "$dlname"; then 6580289166Speter func_append newdlprefiles " $dir/$dlname" 6581289166Speter else 6582289166Speter func_append newdlprefiles " $dir/$linklib" 6583289166Speter fi 6584289166Speter ;; 6585289166Speter esac 6586251883Speter fi # $pass = dlpreopen 6587251883Speter 6588251883Speter if test -z "$libdir"; then 6589251883Speter # Link the convenience library 6590251883Speter if test "$linkmode" = lib; then 6591251883Speter deplibs="$dir/$old_library $deplibs" 6592251883Speter elif test "$linkmode,$pass" = "prog,link"; then 6593251883Speter compile_deplibs="$dir/$old_library $compile_deplibs" 6594251883Speter finalize_deplibs="$dir/$old_library $finalize_deplibs" 6595251883Speter else 6596251883Speter deplibs="$lib $deplibs" # used for prog,scan pass 6597251883Speter fi 6598251883Speter continue 6599251883Speter fi 6600251883Speter 6601251883Speter 6602251883Speter if test "$linkmode" = prog && test "$pass" != link; then 6603289166Speter func_append newlib_search_path " $ladir" 6604251883Speter deplibs="$lib $deplibs" 6605251883Speter 6606251883Speter linkalldeplibs=no 6607251883Speter if test "$link_all_deplibs" != no || test -z "$library_names" || 6608251883Speter test "$build_libtool_libs" = no; then 6609251883Speter linkalldeplibs=yes 6610251883Speter fi 6611251883Speter 6612251883Speter tmp_libs= 6613251883Speter for deplib in $dependency_libs; do 6614251883Speter case $deplib in 6615289166Speter -L*) func_stripname '-L' '' "$deplib" 6616289166Speter func_resolve_sysroot "$func_stripname_result" 6617289166Speter func_append newlib_search_path " $func_resolve_sysroot_result" 6618289166Speter ;; 6619251883Speter esac 6620251883Speter # Need to link against all dependency_libs? 6621251883Speter if test "$linkalldeplibs" = yes; then 6622251883Speter deplibs="$deplib $deplibs" 6623251883Speter else 6624251883Speter # Need to hardcode shared library paths 6625251883Speter # or/and link against static libraries 6626251883Speter newdependency_libs="$deplib $newdependency_libs" 6627251883Speter fi 6628289166Speter if $opt_preserve_dup_deps ; then 6629251883Speter case "$tmp_libs " in 6630289166Speter *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6631251883Speter esac 6632251883Speter fi 6633289166Speter func_append tmp_libs " $deplib" 6634251883Speter done # for deplib 6635251883Speter continue 6636251883Speter fi # $linkmode = prog... 6637251883Speter 6638251883Speter if test "$linkmode,$pass" = "prog,link"; then 6639251883Speter if test -n "$library_names" && 6640251883Speter { { test "$prefer_static_libs" = no || 6641289166Speter test "$prefer_static_libs,$installed" = "built,yes"; } || 6642251883Speter test -z "$old_library"; }; then 6643251883Speter # We need to hardcode the library path 6644251883Speter if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 6645251883Speter # Make sure the rpath contains only unique directories. 6646289166Speter case "$temp_rpath:" in 6647289166Speter *"$absdir:"*) ;; 6648289166Speter *) func_append temp_rpath "$absdir:" ;; 6649251883Speter esac 6650251883Speter fi 6651251883Speter 6652251883Speter # Hardcode the library path. 6653251883Speter # Skip directories that are in the system default run-time 6654251883Speter # search path. 6655251883Speter case " $sys_lib_dlsearch_path " in 6656251883Speter *" $absdir "*) ;; 6657251883Speter *) 6658251883Speter case "$compile_rpath " in 6659251883Speter *" $absdir "*) ;; 6660289166Speter *) func_append compile_rpath " $absdir" ;; 6661251883Speter esac 6662251883Speter ;; 6663251883Speter esac 6664251883Speter case " $sys_lib_dlsearch_path " in 6665251883Speter *" $libdir "*) ;; 6666251883Speter *) 6667251883Speter case "$finalize_rpath " in 6668251883Speter *" $libdir "*) ;; 6669289166Speter *) func_append finalize_rpath " $libdir" ;; 6670251883Speter esac 6671251883Speter ;; 6672251883Speter esac 6673251883Speter fi # $linkmode,$pass = prog,link... 6674251883Speter 6675251883Speter if test "$alldeplibs" = yes && 6676251883Speter { test "$deplibs_check_method" = pass_all || 6677251883Speter { test "$build_libtool_libs" = yes && 6678251883Speter test -n "$library_names"; }; }; then 6679251883Speter # We only need to search for static libraries 6680251883Speter continue 6681251883Speter fi 6682251883Speter fi 6683251883Speter 6684251883Speter link_static=no # Whether the deplib will be linked statically 6685251883Speter use_static_libs=$prefer_static_libs 6686289166Speter if test "$use_static_libs" = built && test "$installed" = yes; then 6687251883Speter use_static_libs=no 6688251883Speter fi 6689251883Speter if test -n "$library_names" && 6690251883Speter { test "$use_static_libs" = no || test -z "$old_library"; }; then 6691289166Speter case $host in 6692289166Speter *cygwin* | *mingw* | *cegcc*) 6693289166Speter # No point in relinking DLLs because paths are not encoded 6694289166Speter func_append notinst_deplibs " $lib" 6695289166Speter need_relink=no 6696289166Speter ;; 6697289166Speter *) 6698289166Speter if test "$installed" = no; then 6699289166Speter func_append notinst_deplibs " $lib" 6700289166Speter need_relink=yes 6701289166Speter fi 6702289166Speter ;; 6703289166Speter esac 6704251883Speter # This is a shared library 6705251883Speter 6706289166Speter # Warn about portability, can't link against -module's on some 6707289166Speter # systems (darwin). Don't bleat about dlopened modules though! 6708289166Speter dlopenmodule="" 6709289166Speter for dlpremoduletest in $dlprefiles; do 6710289166Speter if test "X$dlpremoduletest" = "X$lib"; then 6711289166Speter dlopenmodule="$dlpremoduletest" 6712289166Speter break 6713289166Speter fi 6714289166Speter done 6715289166Speter if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 6716289166Speter echo 6717251883Speter if test "$linkmode" = prog; then 6718289166Speter $ECHO "*** Warning: Linking the executable $output against the loadable module" 6719251883Speter else 6720289166Speter $ECHO "*** Warning: Linking the shared library $output against the loadable module" 6721251883Speter fi 6722289166Speter $ECHO "*** $linklib is not portable!" 6723251883Speter fi 6724251883Speter if test "$linkmode" = lib && 6725251883Speter test "$hardcode_into_libs" = yes; then 6726251883Speter # Hardcode the library path. 6727251883Speter # Skip directories that are in the system default run-time 6728251883Speter # search path. 6729251883Speter case " $sys_lib_dlsearch_path " in 6730251883Speter *" $absdir "*) ;; 6731251883Speter *) 6732251883Speter case "$compile_rpath " in 6733251883Speter *" $absdir "*) ;; 6734289166Speter *) func_append compile_rpath " $absdir" ;; 6735251883Speter esac 6736251883Speter ;; 6737251883Speter esac 6738251883Speter case " $sys_lib_dlsearch_path " in 6739251883Speter *" $libdir "*) ;; 6740251883Speter *) 6741251883Speter case "$finalize_rpath " in 6742251883Speter *" $libdir "*) ;; 6743289166Speter *) func_append finalize_rpath " $libdir" ;; 6744251883Speter esac 6745251883Speter ;; 6746251883Speter esac 6747251883Speter fi 6748251883Speter 6749251883Speter if test -n "$old_archive_from_expsyms_cmds"; then 6750251883Speter # figure out the soname 6751251883Speter set dummy $library_names 6752289166Speter shift 6753289166Speter realname="$1" 6754289166Speter shift 6755289166Speter libname=`eval "\\$ECHO \"$libname_spec\""` 6756251883Speter # use dlname if we got it. it's perfectly good, no? 6757251883Speter if test -n "$dlname"; then 6758251883Speter soname="$dlname" 6759251883Speter elif test -n "$soname_spec"; then 6760251883Speter # bleh windows 6761251883Speter case $host in 6762289166Speter *cygwin* | mingw* | *cegcc*) 6763289166Speter func_arith $current - $age 6764289166Speter major=$func_arith_result 6765251883Speter versuffix="-$major" 6766251883Speter ;; 6767251883Speter esac 6768251883Speter eval soname=\"$soname_spec\" 6769251883Speter else 6770251883Speter soname="$realname" 6771251883Speter fi 6772251883Speter 6773251883Speter # Make a new name for the extract_expsyms_cmds to use 6774251883Speter soroot="$soname" 6775289166Speter func_basename "$soroot" 6776289166Speter soname="$func_basename_result" 6777289166Speter func_stripname 'lib' '.dll' "$soname" 6778289166Speter newlib=libimp-$func_stripname_result.a 6779251883Speter 6780251883Speter # If the library has no export list, then create one now 6781251883Speter if test -f "$output_objdir/$soname-def"; then : 6782251883Speter else 6783289166Speter func_verbose "extracting exported symbol list from \`$soname'" 6784289166Speter func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 6785251883Speter fi 6786251883Speter 6787251883Speter # Create $newlib 6788251883Speter if test -f "$output_objdir/$newlib"; then :; else 6789289166Speter func_verbose "generating import library for \`$soname'" 6790289166Speter func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 6791251883Speter fi 6792251883Speter # make sure the library variables are pointing to the new library 6793251883Speter dir=$output_objdir 6794251883Speter linklib=$newlib 6795251883Speter fi # test -n "$old_archive_from_expsyms_cmds" 6796251883Speter 6797289166Speter if test "$linkmode" = prog || test "$opt_mode" != relink; then 6798251883Speter add_shlibpath= 6799251883Speter add_dir= 6800251883Speter add= 6801251883Speter lib_linked=yes 6802251883Speter case $hardcode_action in 6803251883Speter immediate | unsupported) 6804251883Speter if test "$hardcode_direct" = no; then 6805251883Speter add="$dir/$linklib" 6806251883Speter case $host in 6807251883Speter *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 6808251883Speter *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6809251883Speter *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 6810251883Speter *-*-unixware7*) add_dir="-L$dir" ;; 6811251883Speter *-*-darwin* ) 6812289166Speter # if the lib is a (non-dlopened) module then we can not 6813289166Speter # link against it, someone is ignoring the earlier warnings 6814251883Speter if /usr/bin/file -L $add 2> /dev/null | 6815289166Speter $GREP ": [^:]* bundle" >/dev/null ; then 6816289166Speter if test "X$dlopenmodule" != "X$lib"; then 6817289166Speter $ECHO "*** Warning: lib $linklib is a module, not a shared library" 6818289166Speter if test -z "$old_library" ; then 6819289166Speter echo 6820289166Speter echo "*** And there doesn't seem to be a static archive available" 6821289166Speter echo "*** The link will probably fail, sorry" 6822289166Speter else 6823289166Speter add="$dir/$old_library" 6824289166Speter fi 6825289166Speter elif test -n "$old_library"; then 6826289166Speter add="$dir/$old_library" 6827251883Speter fi 6828251883Speter fi 6829251883Speter esac 6830251883Speter elif test "$hardcode_minus_L" = no; then 6831251883Speter case $host in 6832251883Speter *-*-sunos*) add_shlibpath="$dir" ;; 6833251883Speter esac 6834251883Speter add_dir="-L$dir" 6835251883Speter add="-l$name" 6836251883Speter elif test "$hardcode_shlibpath_var" = no; then 6837251883Speter add_shlibpath="$dir" 6838251883Speter add="-l$name" 6839251883Speter else 6840251883Speter lib_linked=no 6841251883Speter fi 6842251883Speter ;; 6843251883Speter relink) 6844289166Speter if test "$hardcode_direct" = yes && 6845289166Speter test "$hardcode_direct_absolute" = no; then 6846251883Speter add="$dir/$linklib" 6847251883Speter elif test "$hardcode_minus_L" = yes; then 6848289166Speter add_dir="-L$absdir" 6849251883Speter # Try looking first in the location we're being installed to. 6850251883Speter if test -n "$inst_prefix_dir"; then 6851251883Speter case $libdir in 6852251883Speter [\\/]*) 6853289166Speter func_append add_dir " -L$inst_prefix_dir$libdir" 6854251883Speter ;; 6855251883Speter esac 6856251883Speter fi 6857251883Speter add="-l$name" 6858251883Speter elif test "$hardcode_shlibpath_var" = yes; then 6859251883Speter add_shlibpath="$dir" 6860251883Speter add="-l$name" 6861251883Speter else 6862251883Speter lib_linked=no 6863251883Speter fi 6864251883Speter ;; 6865251883Speter *) lib_linked=no ;; 6866251883Speter esac 6867251883Speter 6868251883Speter if test "$lib_linked" != yes; then 6869289166Speter func_fatal_configuration "unsupported hardcode properties" 6870251883Speter fi 6871251883Speter 6872251883Speter if test -n "$add_shlibpath"; then 6873251883Speter case :$compile_shlibpath: in 6874251883Speter *":$add_shlibpath:"*) ;; 6875289166Speter *) func_append compile_shlibpath "$add_shlibpath:" ;; 6876251883Speter esac 6877251883Speter fi 6878251883Speter if test "$linkmode" = prog; then 6879251883Speter test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 6880251883Speter test -n "$add" && compile_deplibs="$add $compile_deplibs" 6881251883Speter else 6882251883Speter test -n "$add_dir" && deplibs="$add_dir $deplibs" 6883251883Speter test -n "$add" && deplibs="$add $deplibs" 6884289166Speter if test "$hardcode_direct" != yes && 6885289166Speter test "$hardcode_minus_L" != yes && 6886251883Speter test "$hardcode_shlibpath_var" = yes; then 6887251883Speter case :$finalize_shlibpath: in 6888251883Speter *":$libdir:"*) ;; 6889289166Speter *) func_append finalize_shlibpath "$libdir:" ;; 6890251883Speter esac 6891251883Speter fi 6892251883Speter fi 6893251883Speter fi 6894251883Speter 6895289166Speter if test "$linkmode" = prog || test "$opt_mode" = relink; then 6896251883Speter add_shlibpath= 6897251883Speter add_dir= 6898251883Speter add= 6899251883Speter # Finalize command for both is simple: just hardcode it. 6900289166Speter if test "$hardcode_direct" = yes && 6901289166Speter test "$hardcode_direct_absolute" = no; then 6902251883Speter add="$libdir/$linklib" 6903251883Speter elif test "$hardcode_minus_L" = yes; then 6904251883Speter add_dir="-L$libdir" 6905251883Speter add="-l$name" 6906251883Speter elif test "$hardcode_shlibpath_var" = yes; then 6907251883Speter case :$finalize_shlibpath: in 6908251883Speter *":$libdir:"*) ;; 6909289166Speter *) func_append finalize_shlibpath "$libdir:" ;; 6910251883Speter esac 6911251883Speter add="-l$name" 6912251883Speter elif test "$hardcode_automatic" = yes; then 6913251883Speter if test -n "$inst_prefix_dir" && 6914251883Speter test -f "$inst_prefix_dir$libdir/$linklib" ; then 6915289166Speter add="$inst_prefix_dir$libdir/$linklib" 6916251883Speter else 6917289166Speter add="$libdir/$linklib" 6918251883Speter fi 6919251883Speter else 6920251883Speter # We cannot seem to hardcode it, guess we'll fake it. 6921251883Speter add_dir="-L$libdir" 6922251883Speter # Try looking first in the location we're being installed to. 6923251883Speter if test -n "$inst_prefix_dir"; then 6924251883Speter case $libdir in 6925251883Speter [\\/]*) 6926289166Speter func_append add_dir " -L$inst_prefix_dir$libdir" 6927251883Speter ;; 6928251883Speter esac 6929251883Speter fi 6930251883Speter add="-l$name" 6931251883Speter fi 6932251883Speter 6933251883Speter if test "$linkmode" = prog; then 6934251883Speter test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 6935251883Speter test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 6936251883Speter else 6937251883Speter test -n "$add_dir" && deplibs="$add_dir $deplibs" 6938251883Speter test -n "$add" && deplibs="$add $deplibs" 6939251883Speter fi 6940251883Speter fi 6941251883Speter elif test "$linkmode" = prog; then 6942251883Speter # Here we assume that one of hardcode_direct or hardcode_minus_L 6943251883Speter # is not unsupported. This is valid on all known static and 6944251883Speter # shared platforms. 6945251883Speter if test "$hardcode_direct" != unsupported; then 6946251883Speter test -n "$old_library" && linklib="$old_library" 6947251883Speter compile_deplibs="$dir/$linklib $compile_deplibs" 6948251883Speter finalize_deplibs="$dir/$linklib $finalize_deplibs" 6949251883Speter else 6950251883Speter compile_deplibs="-l$name -L$dir $compile_deplibs" 6951251883Speter finalize_deplibs="-l$name -L$dir $finalize_deplibs" 6952251883Speter fi 6953251883Speter elif test "$build_libtool_libs" = yes; then 6954251883Speter # Not a shared library 6955251883Speter if test "$deplibs_check_method" != pass_all; then 6956251883Speter # We're trying link a shared library against a static one 6957251883Speter # but the system doesn't support it. 6958251883Speter 6959251883Speter # Just print a warning and add the library to dependency_libs so 6960251883Speter # that the program can be linked against the static library. 6961289166Speter echo 6962289166Speter $ECHO "*** Warning: This system can not link to static lib archive $lib." 6963289166Speter echo "*** I have the capability to make that library automatically link in when" 6964289166Speter echo "*** you link to this library. But I can only do this if you have a" 6965289166Speter echo "*** shared version of the library, which you do not appear to have." 6966251883Speter if test "$module" = yes; then 6967289166Speter echo "*** But as you try to build a module library, libtool will still create " 6968289166Speter echo "*** a static module, that should work as long as the dlopening application" 6969289166Speter echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 6970251883Speter if test -z "$global_symbol_pipe"; then 6971289166Speter echo 6972289166Speter echo "*** However, this would only work if libtool was able to extract symbol" 6973289166Speter echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 6974289166Speter echo "*** not find such a program. So, this module is probably useless." 6975289166Speter echo "*** \`nm' from GNU binutils and a full rebuild may help." 6976251883Speter fi 6977251883Speter if test "$build_old_libs" = no; then 6978251883Speter build_libtool_libs=module 6979251883Speter build_old_libs=yes 6980251883Speter else 6981251883Speter build_libtool_libs=no 6982251883Speter fi 6983251883Speter fi 6984251883Speter else 6985251883Speter deplibs="$dir/$old_library $deplibs" 6986251883Speter link_static=yes 6987251883Speter fi 6988251883Speter fi # link shared/static library? 6989251883Speter 6990251883Speter if test "$linkmode" = lib; then 6991251883Speter if test -n "$dependency_libs" && 6992251883Speter { test "$hardcode_into_libs" != yes || 6993251883Speter test "$build_old_libs" = yes || 6994251883Speter test "$link_static" = yes; }; then 6995251883Speter # Extract -R from dependency_libs 6996251883Speter temp_deplibs= 6997251883Speter for libdir in $dependency_libs; do 6998251883Speter case $libdir in 6999289166Speter -R*) func_stripname '-R' '' "$libdir" 7000289166Speter temp_xrpath=$func_stripname_result 7001251883Speter case " $xrpath " in 7002251883Speter *" $temp_xrpath "*) ;; 7003289166Speter *) func_append xrpath " $temp_xrpath";; 7004251883Speter esac;; 7005289166Speter *) func_append temp_deplibs " $libdir";; 7006251883Speter esac 7007251883Speter done 7008251883Speter dependency_libs="$temp_deplibs" 7009251883Speter fi 7010251883Speter 7011289166Speter func_append newlib_search_path " $absdir" 7012251883Speter # Link against this library 7013251883Speter test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 7014251883Speter # ... and its dependency_libs 7015251883Speter tmp_libs= 7016251883Speter for deplib in $dependency_libs; do 7017251883Speter newdependency_libs="$deplib $newdependency_libs" 7018289166Speter case $deplib in 7019289166Speter -L*) func_stripname '-L' '' "$deplib" 7020289166Speter func_resolve_sysroot "$func_stripname_result";; 7021289166Speter *) func_resolve_sysroot "$deplib" ;; 7022289166Speter esac 7023289166Speter if $opt_preserve_dup_deps ; then 7024251883Speter case "$tmp_libs " in 7025289166Speter *" $func_resolve_sysroot_result "*) 7026289166Speter func_append specialdeplibs " $func_resolve_sysroot_result" ;; 7027251883Speter esac 7028251883Speter fi 7029289166Speter func_append tmp_libs " $func_resolve_sysroot_result" 7030251883Speter done 7031251883Speter 7032251883Speter if test "$link_all_deplibs" != no; then 7033251883Speter # Add the search paths of all dependency libraries 7034251883Speter for deplib in $dependency_libs; do 7035289166Speter path= 7036251883Speter case $deplib in 7037251883Speter -L*) path="$deplib" ;; 7038251883Speter *.la) 7039289166Speter func_resolve_sysroot "$deplib" 7040289166Speter deplib=$func_resolve_sysroot_result 7041289166Speter func_dirname "$deplib" "" "." 7042289166Speter dir=$func_dirname_result 7043251883Speter # We need an absolute path. 7044251883Speter case $dir in 7045251883Speter [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 7046251883Speter *) 7047251883Speter absdir=`cd "$dir" && pwd` 7048251883Speter if test -z "$absdir"; then 7049289166Speter func_warning "cannot determine absolute directory name of \`$dir'" 7050251883Speter absdir="$dir" 7051251883Speter fi 7052251883Speter ;; 7053251883Speter esac 7054289166Speter if $GREP "^installed=no" $deplib > /dev/null; then 7055251883Speter case $host in 7056251883Speter *-*-darwin*) 7057289166Speter depdepl= 7058251883Speter eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 7059251883Speter if test -n "$deplibrary_names" ; then 7060251883Speter for tmp in $deplibrary_names ; do 7061251883Speter depdepl=$tmp 7062251883Speter done 7063289166Speter if test -f "$absdir/$objdir/$depdepl" ; then 7064289166Speter depdepl="$absdir/$objdir/$depdepl" 7065289166Speter darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7066289166Speter if test -z "$darwin_install_name"; then 7067289166Speter darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7068289166Speter fi 7069289166Speter func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 7070289166Speter func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 7071289166Speter path= 7072251883Speter fi 7073251883Speter fi 7074251883Speter ;; 7075251883Speter *) 7076289166Speter path="-L$absdir/$objdir" 7077251883Speter ;; 7078251883Speter esac 7079289166Speter else 7080289166Speter eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 7081289166Speter test -z "$libdir" && \ 7082289166Speter func_fatal_error "\`$deplib' is not a valid libtool archive" 7083289166Speter #test "$absdir" != "$libdir" && \ 7084289166Speter # func_warning "\`$deplib' seems to be moved" 7085289166Speter 7086289166Speter path="-L$absdir" 7087289166Speter fi 7088251883Speter ;; 7089251883Speter esac 7090251883Speter case " $deplibs " in 7091251883Speter *" $path "*) ;; 7092251883Speter *) deplibs="$path $deplibs" ;; 7093251883Speter esac 7094251883Speter done 7095251883Speter fi # link_all_deplibs != no 7096251883Speter fi # linkmode = lib 7097251883Speter done # for deplib in $libs 7098289166Speter if test "$pass" = link; then 7099289166Speter if test "$linkmode" = "prog"; then 7100289166Speter compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 7101289166Speter finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 7102289166Speter else 7103289166Speter compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7104289166Speter fi 7105289166Speter fi 7106251883Speter dependency_libs="$newdependency_libs" 7107251883Speter if test "$pass" = dlpreopen; then 7108251883Speter # Link the dlpreopened libraries before other libraries 7109251883Speter for deplib in $save_deplibs; do 7110251883Speter deplibs="$deplib $deplibs" 7111251883Speter done 7112251883Speter fi 7113251883Speter if test "$pass" != dlopen; then 7114251883Speter if test "$pass" != conv; then 7115251883Speter # Make sure lib_search_path contains only unique directories. 7116251883Speter lib_search_path= 7117251883Speter for dir in $newlib_search_path; do 7118251883Speter case "$lib_search_path " in 7119251883Speter *" $dir "*) ;; 7120289166Speter *) func_append lib_search_path " $dir" ;; 7121251883Speter esac 7122251883Speter done 7123251883Speter newlib_search_path= 7124251883Speter fi 7125251883Speter 7126251883Speter if test "$linkmode,$pass" != "prog,link"; then 7127251883Speter vars="deplibs" 7128251883Speter else 7129251883Speter vars="compile_deplibs finalize_deplibs" 7130251883Speter fi 7131251883Speter for var in $vars dependency_libs; do 7132251883Speter # Add libraries to $var in reverse order 7133251883Speter eval tmp_libs=\"\$$var\" 7134251883Speter new_libs= 7135251883Speter for deplib in $tmp_libs; do 7136251883Speter # FIXME: Pedantically, this is the right thing to do, so 7137251883Speter # that some nasty dependency loop isn't accidentally 7138251883Speter # broken: 7139251883Speter #new_libs="$deplib $new_libs" 7140251883Speter # Pragmatically, this seems to cause very few problems in 7141251883Speter # practice: 7142251883Speter case $deplib in 7143251883Speter -L*) new_libs="$deplib $new_libs" ;; 7144251883Speter -R*) ;; 7145251883Speter *) 7146251883Speter # And here is the reason: when a library appears more 7147251883Speter # than once as an explicit dependence of a library, or 7148251883Speter # is implicitly linked in more than once by the 7149251883Speter # compiler, it is considered special, and multiple 7150251883Speter # occurrences thereof are not removed. Compare this 7151251883Speter # with having the same library being listed as a 7152251883Speter # dependency of multiple other libraries: in this case, 7153251883Speter # we know (pedantically, we assume) the library does not 7154251883Speter # need to be listed more than once, so we keep only the 7155251883Speter # last copy. This is not always right, but it is rare 7156251883Speter # enough that we require users that really mean to play 7157251883Speter # such unportable linking tricks to link the library 7158251883Speter # using -Wl,-lname, so that libtool does not consider it 7159251883Speter # for duplicate removal. 7160251883Speter case " $specialdeplibs " in 7161251883Speter *" $deplib "*) new_libs="$deplib $new_libs" ;; 7162251883Speter *) 7163251883Speter case " $new_libs " in 7164251883Speter *" $deplib "*) ;; 7165251883Speter *) new_libs="$deplib $new_libs" ;; 7166251883Speter esac 7167251883Speter ;; 7168251883Speter esac 7169251883Speter ;; 7170251883Speter esac 7171251883Speter done 7172251883Speter tmp_libs= 7173251883Speter for deplib in $new_libs; do 7174251883Speter case $deplib in 7175251883Speter -L*) 7176251883Speter case " $tmp_libs " in 7177251883Speter *" $deplib "*) ;; 7178289166Speter *) func_append tmp_libs " $deplib" ;; 7179251883Speter esac 7180251883Speter ;; 7181289166Speter *) func_append tmp_libs " $deplib" ;; 7182251883Speter esac 7183251883Speter done 7184251883Speter eval $var=\"$tmp_libs\" 7185251883Speter done # for var 7186251883Speter fi 7187251883Speter # Last step: remove runtime libs from dependency_libs 7188251883Speter # (they stay in deplibs) 7189251883Speter tmp_libs= 7190251883Speter for i in $dependency_libs ; do 7191251883Speter case " $predeps $postdeps $compiler_lib_search_path " in 7192251883Speter *" $i "*) 7193251883Speter i="" 7194251883Speter ;; 7195251883Speter esac 7196251883Speter if test -n "$i" ; then 7197289166Speter func_append tmp_libs " $i" 7198251883Speter fi 7199251883Speter done 7200251883Speter dependency_libs=$tmp_libs 7201251883Speter done # for pass 7202251883Speter if test "$linkmode" = prog; then 7203251883Speter dlfiles="$newdlfiles" 7204289166Speter fi 7205289166Speter if test "$linkmode" = prog || test "$linkmode" = lib; then 7206251883Speter dlprefiles="$newdlprefiles" 7207251883Speter fi 7208251883Speter 7209251883Speter case $linkmode in 7210251883Speter oldlib) 7211251883Speter if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7212289166Speter func_warning "\`-dlopen' is ignored for archives" 7213251883Speter fi 7214251883Speter 7215289166Speter case " $deplibs" in 7216289166Speter *\ -l* | *\ -L*) 7217289166Speter func_warning "\`-l' and \`-L' are ignored for archives" ;; 7218289166Speter esac 7219251883Speter 7220289166Speter test -n "$rpath" && \ 7221289166Speter func_warning "\`-rpath' is ignored for archives" 7222251883Speter 7223289166Speter test -n "$xrpath" && \ 7224289166Speter func_warning "\`-R' is ignored for archives" 7225251883Speter 7226289166Speter test -n "$vinfo" && \ 7227289166Speter func_warning "\`-version-info/-version-number' is ignored for archives" 7228251883Speter 7229289166Speter test -n "$release" && \ 7230289166Speter func_warning "\`-release' is ignored for archives" 7231251883Speter 7232289166Speter test -n "$export_symbols$export_symbols_regex" && \ 7233289166Speter func_warning "\`-export-symbols' is ignored for archives" 7234289166Speter 7235251883Speter # Now set the variables for building old libraries. 7236251883Speter build_libtool_libs=no 7237251883Speter oldlibs="$output" 7238289166Speter func_append objs "$old_deplibs" 7239251883Speter ;; 7240251883Speter 7241251883Speter lib) 7242251883Speter # Make sure we only generate libraries of the form `libNAME.la'. 7243251883Speter case $outputname in 7244251883Speter lib*) 7245289166Speter func_stripname 'lib' '.la' "$outputname" 7246289166Speter name=$func_stripname_result 7247251883Speter eval shared_ext=\"$shrext_cmds\" 7248251883Speter eval libname=\"$libname_spec\" 7249251883Speter ;; 7250251883Speter *) 7251289166Speter test "$module" = no && \ 7252289166Speter func_fatal_help "libtool library \`$output' must begin with \`lib'" 7253289166Speter 7254251883Speter if test "$need_lib_prefix" != no; then 7255251883Speter # Add the "lib" prefix for modules if required 7256289166Speter func_stripname '' '.la' "$outputname" 7257289166Speter name=$func_stripname_result 7258251883Speter eval shared_ext=\"$shrext_cmds\" 7259251883Speter eval libname=\"$libname_spec\" 7260251883Speter else 7261289166Speter func_stripname '' '.la' "$outputname" 7262289166Speter libname=$func_stripname_result 7263251883Speter fi 7264251883Speter ;; 7265251883Speter esac 7266251883Speter 7267251883Speter if test -n "$objs"; then 7268251883Speter if test "$deplibs_check_method" != pass_all; then 7269289166Speter func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 7270251883Speter else 7271289166Speter echo 7272289166Speter $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 7273289166Speter $ECHO "*** objects $objs is not portable!" 7274289166Speter func_append libobjs " $objs" 7275251883Speter fi 7276251883Speter fi 7277251883Speter 7278289166Speter test "$dlself" != no && \ 7279289166Speter func_warning "\`-dlopen self' is ignored for libtool libraries" 7280251883Speter 7281251883Speter set dummy $rpath 7282289166Speter shift 7283289166Speter test "$#" -gt 1 && \ 7284289166Speter func_warning "ignoring multiple \`-rpath's for a libtool library" 7285251883Speter 7286289166Speter install_libdir="$1" 7287289166Speter 7288251883Speter oldlibs= 7289251883Speter if test -z "$rpath"; then 7290251883Speter if test "$build_libtool_libs" = yes; then 7291251883Speter # Building a libtool convenience library. 7292251883Speter # Some compilers have problems with a `.al' extension so 7293251883Speter # convenience libraries should have the same extension an 7294251883Speter # archive normally would. 7295251883Speter oldlibs="$output_objdir/$libname.$libext $oldlibs" 7296251883Speter build_libtool_libs=convenience 7297251883Speter build_old_libs=yes 7298251883Speter fi 7299251883Speter 7300289166Speter test -n "$vinfo" && \ 7301289166Speter func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 7302251883Speter 7303289166Speter test -n "$release" && \ 7304289166Speter func_warning "\`-release' is ignored for convenience libraries" 7305251883Speter else 7306251883Speter 7307251883Speter # Parse the version information argument. 7308251883Speter save_ifs="$IFS"; IFS=':' 7309251883Speter set dummy $vinfo 0 0 0 7310289166Speter shift 7311251883Speter IFS="$save_ifs" 7312251883Speter 7313289166Speter test -n "$7" && \ 7314289166Speter func_fatal_help "too many parameters to \`-version-info'" 7315251883Speter 7316251883Speter # convert absolute version numbers to libtool ages 7317251883Speter # this retains compatibility with .la files and attempts 7318251883Speter # to make the code below a bit more comprehensible 7319251883Speter 7320251883Speter case $vinfo_number in 7321251883Speter yes) 7322289166Speter number_major="$1" 7323289166Speter number_minor="$2" 7324289166Speter number_revision="$3" 7325251883Speter # 7326251883Speter # There are really only two kinds -- those that 7327251883Speter # use the current revision as the major version 7328251883Speter # and those that subtract age and use age as 7329251883Speter # a minor version. But, then there is irix 7330251883Speter # which has an extra 1 added just for fun 7331251883Speter # 7332251883Speter case $version_type in 7333289166Speter # correct linux to gnu/linux during the next big refactor 7334251883Speter darwin|linux|osf|windows|none) 7335289166Speter func_arith $number_major + $number_minor 7336289166Speter current=$func_arith_result 7337251883Speter age="$number_minor" 7338251883Speter revision="$number_revision" 7339251883Speter ;; 7340289166Speter freebsd-aout|freebsd-elf|qnx|sunos) 7341251883Speter current="$number_major" 7342251883Speter revision="$number_minor" 7343251883Speter age="0" 7344251883Speter ;; 7345251883Speter irix|nonstopux) 7346289166Speter func_arith $number_major + $number_minor 7347289166Speter current=$func_arith_result 7348251883Speter age="$number_minor" 7349251883Speter revision="$number_minor" 7350251883Speter lt_irix_increment=no 7351251883Speter ;; 7352251883Speter esac 7353251883Speter ;; 7354251883Speter no) 7355289166Speter current="$1" 7356289166Speter revision="$2" 7357289166Speter age="$3" 7358251883Speter ;; 7359251883Speter esac 7360251883Speter 7361251883Speter # Check that each of the things are valid numbers. 7362251883Speter case $current in 7363251883Speter 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]) ;; 7364251883Speter *) 7365289166Speter func_error "CURRENT \`$current' must be a nonnegative integer" 7366289166Speter func_fatal_error "\`$vinfo' is not valid version information" 7367251883Speter ;; 7368251883Speter esac 7369251883Speter 7370251883Speter case $revision in 7371251883Speter 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]) ;; 7372251883Speter *) 7373289166Speter func_error "REVISION \`$revision' must be a nonnegative integer" 7374289166Speter func_fatal_error "\`$vinfo' is not valid version information" 7375251883Speter ;; 7376251883Speter esac 7377251883Speter 7378251883Speter case $age in 7379251883Speter 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]) ;; 7380251883Speter *) 7381289166Speter func_error "AGE \`$age' must be a nonnegative integer" 7382289166Speter func_fatal_error "\`$vinfo' is not valid version information" 7383251883Speter ;; 7384251883Speter esac 7385251883Speter 7386251883Speter if test "$age" -gt "$current"; then 7387289166Speter func_error "AGE \`$age' is greater than the current interface number \`$current'" 7388289166Speter func_fatal_error "\`$vinfo' is not valid version information" 7389251883Speter fi 7390251883Speter 7391251883Speter # Calculate the version variables. 7392251883Speter major= 7393251883Speter versuffix= 7394251883Speter verstring= 7395251883Speter case $version_type in 7396251883Speter none) ;; 7397251883Speter 7398251883Speter darwin) 7399251883Speter # Like Linux, but with the current version available in 7400251883Speter # verstring for coding it into the library header 7401289166Speter func_arith $current - $age 7402289166Speter major=.$func_arith_result 7403251883Speter versuffix="$major.$age.$revision" 7404251883Speter # Darwin ld doesn't like 0 for these options... 7405289166Speter func_arith $current + 1 7406289166Speter minor_current=$func_arith_result 7407251883Speter xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 7408251883Speter verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 7409251883Speter ;; 7410251883Speter 7411251883Speter freebsd-aout) 7412251883Speter major=".$current" 7413251883Speter versuffix=".$current.$revision"; 7414251883Speter ;; 7415251883Speter 7416251883Speter freebsd-elf) 7417251883Speter major=".$current" 7418289166Speter versuffix=".$current" 7419251883Speter ;; 7420251883Speter 7421251883Speter irix | nonstopux) 7422251883Speter if test "X$lt_irix_increment" = "Xno"; then 7423289166Speter func_arith $current - $age 7424251883Speter else 7425289166Speter func_arith $current - $age + 1 7426251883Speter fi 7427289166Speter major=$func_arith_result 7428289166Speter 7429251883Speter case $version_type in 7430251883Speter nonstopux) verstring_prefix=nonstopux ;; 7431251883Speter *) verstring_prefix=sgi ;; 7432251883Speter esac 7433251883Speter verstring="$verstring_prefix$major.$revision" 7434251883Speter 7435251883Speter # Add in all the interfaces that we are compatible with. 7436251883Speter loop=$revision 7437251883Speter while test "$loop" -ne 0; do 7438289166Speter func_arith $revision - $loop 7439289166Speter iface=$func_arith_result 7440289166Speter func_arith $loop - 1 7441289166Speter loop=$func_arith_result 7442251883Speter verstring="$verstring_prefix$major.$iface:$verstring" 7443251883Speter done 7444251883Speter 7445251883Speter # Before this point, $major must not contain `.'. 7446251883Speter major=.$major 7447251883Speter versuffix="$major.$revision" 7448251883Speter ;; 7449251883Speter 7450289166Speter linux) # correct to gnu/linux during the next big refactor 7451289166Speter func_arith $current - $age 7452289166Speter major=.$func_arith_result 7453251883Speter versuffix="$major.$age.$revision" 7454251883Speter ;; 7455251883Speter 7456251883Speter osf) 7457289166Speter func_arith $current - $age 7458289166Speter major=.$func_arith_result 7459251883Speter versuffix=".$current.$age.$revision" 7460251883Speter verstring="$current.$age.$revision" 7461251883Speter 7462251883Speter # Add in all the interfaces that we are compatible with. 7463251883Speter loop=$age 7464251883Speter while test "$loop" -ne 0; do 7465289166Speter func_arith $current - $loop 7466289166Speter iface=$func_arith_result 7467289166Speter func_arith $loop - 1 7468289166Speter loop=$func_arith_result 7469251883Speter verstring="$verstring:${iface}.0" 7470251883Speter done 7471251883Speter 7472251883Speter # Make executables depend on our current version. 7473289166Speter func_append verstring ":${current}.0" 7474251883Speter ;; 7475251883Speter 7476289166Speter qnx) 7477289166Speter major=".$current" 7478289166Speter versuffix=".$current" 7479289166Speter ;; 7480289166Speter 7481251883Speter sunos) 7482251883Speter major=".$current" 7483251883Speter versuffix=".$current.$revision" 7484251883Speter ;; 7485251883Speter 7486251883Speter windows) 7487251883Speter # Use '-' rather than '.', since we only want one 7488251883Speter # extension on DOS 8.3 filesystems. 7489289166Speter func_arith $current - $age 7490289166Speter major=$func_arith_result 7491251883Speter versuffix="-$major" 7492251883Speter ;; 7493251883Speter 7494251883Speter *) 7495289166Speter func_fatal_configuration "unknown library version type \`$version_type'" 7496251883Speter ;; 7497251883Speter esac 7498251883Speter 7499251883Speter # Clear the version info if we defaulted, and they specified a release. 7500251883Speter if test -z "$vinfo" && test -n "$release"; then 7501251883Speter major= 7502251883Speter case $version_type in 7503251883Speter darwin) 7504251883Speter # we can't check for "0.0" in archive_cmds due to quoting 7505251883Speter # problems, so we reset it completely 7506251883Speter verstring= 7507251883Speter ;; 7508251883Speter *) 7509251883Speter verstring="0.0" 7510251883Speter ;; 7511251883Speter esac 7512251883Speter if test "$need_version" = no; then 7513251883Speter versuffix= 7514251883Speter else 7515251883Speter versuffix=".0.0" 7516251883Speter fi 7517251883Speter fi 7518251883Speter 7519251883Speter # Remove version info from name if versioning should be avoided 7520251883Speter if test "$avoid_version" = yes && test "$need_version" = no; then 7521251883Speter major= 7522251883Speter versuffix= 7523251883Speter verstring="" 7524251883Speter fi 7525251883Speter 7526251883Speter # Check to see if the archive will have undefined symbols. 7527251883Speter if test "$allow_undefined" = yes; then 7528251883Speter if test "$allow_undefined_flag" = unsupported; then 7529289166Speter func_warning "undefined symbols not allowed in $host shared libraries" 7530251883Speter build_libtool_libs=no 7531251883Speter build_old_libs=yes 7532251883Speter fi 7533251883Speter else 7534251883Speter # Don't allow undefined symbols. 7535251883Speter allow_undefined_flag="$no_undefined_flag" 7536251883Speter fi 7537289166Speter 7538251883Speter fi 7539251883Speter 7540289166Speter func_generate_dlsyms "$libname" "$libname" "yes" 7541289166Speter func_append libobjs " $symfileobj" 7542289166Speter test "X$libobjs" = "X " && libobjs= 7543289166Speter 7544289166Speter if test "$opt_mode" != relink; then 7545251883Speter # Remove our outputs, but don't remove object files since they 7546251883Speter # may have been created when compiling PIC objects. 7547251883Speter removelist= 7548289166Speter tempremovelist=`$ECHO "$output_objdir/*"` 7549251883Speter for p in $tempremovelist; do 7550251883Speter case $p in 7551289166Speter *.$objext | *.gcno) 7552251883Speter ;; 7553251883Speter $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 7554251883Speter if test "X$precious_files_regex" != "X"; then 7555289166Speter if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 7556289166Speter then 7557251883Speter continue 7558251883Speter fi 7559251883Speter fi 7560289166Speter func_append removelist " $p" 7561251883Speter ;; 7562251883Speter *) ;; 7563251883Speter esac 7564251883Speter done 7565289166Speter test -n "$removelist" && \ 7566289166Speter func_show_eval "${RM}r \$removelist" 7567251883Speter fi 7568251883Speter 7569251883Speter # Now set the variables for building old libraries. 7570251883Speter if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 7571289166Speter func_append oldlibs " $output_objdir/$libname.$libext" 7572251883Speter 7573251883Speter # Transform .lo files to .o files. 7574289166Speter oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 7575251883Speter fi 7576251883Speter 7577251883Speter # Eliminate all temporary directories. 7578251883Speter #for path in $notinst_path; do 7579289166Speter # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 7580289166Speter # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 7581289166Speter # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 7582251883Speter #done 7583251883Speter 7584251883Speter if test -n "$xrpath"; then 7585251883Speter # If the user specified any rpath flags, then add them. 7586251883Speter temp_xrpath= 7587251883Speter for libdir in $xrpath; do 7588289166Speter func_replace_sysroot "$libdir" 7589289166Speter func_append temp_xrpath " -R$func_replace_sysroot_result" 7590251883Speter case "$finalize_rpath " in 7591251883Speter *" $libdir "*) ;; 7592289166Speter *) func_append finalize_rpath " $libdir" ;; 7593251883Speter esac 7594251883Speter done 7595251883Speter if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 7596251883Speter dependency_libs="$temp_xrpath $dependency_libs" 7597251883Speter fi 7598251883Speter fi 7599251883Speter 7600251883Speter # Make sure dlfiles contains only unique files that won't be dlpreopened 7601251883Speter old_dlfiles="$dlfiles" 7602251883Speter dlfiles= 7603251883Speter for lib in $old_dlfiles; do 7604251883Speter case " $dlprefiles $dlfiles " in 7605251883Speter *" $lib "*) ;; 7606289166Speter *) func_append dlfiles " $lib" ;; 7607251883Speter esac 7608251883Speter done 7609251883Speter 7610251883Speter # Make sure dlprefiles contains only unique files 7611251883Speter old_dlprefiles="$dlprefiles" 7612251883Speter dlprefiles= 7613251883Speter for lib in $old_dlprefiles; do 7614251883Speter case "$dlprefiles " in 7615251883Speter *" $lib "*) ;; 7616289166Speter *) func_append dlprefiles " $lib" ;; 7617251883Speter esac 7618251883Speter done 7619251883Speter 7620251883Speter if test "$build_libtool_libs" = yes; then 7621251883Speter if test -n "$rpath"; then 7622251883Speter case $host in 7623289166Speter *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 7624251883Speter # these systems don't actually have a c library (as such)! 7625251883Speter ;; 7626251883Speter *-*-rhapsody* | *-*-darwin1.[012]) 7627251883Speter # Rhapsody C library is in the System framework 7628289166Speter func_append deplibs " System.ltframework" 7629251883Speter ;; 7630251883Speter *-*-netbsd*) 7631251883Speter # Don't link with libc until the a.out ld.so is fixed. 7632251883Speter ;; 7633251883Speter *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 7634251883Speter # Do not include libc due to us having libc/libc_r. 7635251883Speter ;; 7636251883Speter *-*-sco3.2v5* | *-*-sco5v6*) 7637251883Speter # Causes problems with __ctype 7638251883Speter ;; 7639251883Speter *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7640251883Speter # Compiler inserts libc in the correct place for threads to work 7641251883Speter ;; 7642289166Speter *) 7643251883Speter # Add libc to deplibs on all other systems if necessary. 7644251883Speter if test "$build_libtool_need_lc" = "yes"; then 7645289166Speter func_append deplibs " -lc" 7646251883Speter fi 7647251883Speter ;; 7648251883Speter esac 7649251883Speter fi 7650251883Speter 7651251883Speter # Transform deplibs into only deplibs that can be linked in shared. 7652251883Speter name_save=$name 7653251883Speter libname_save=$libname 7654251883Speter release_save=$release 7655251883Speter versuffix_save=$versuffix 7656251883Speter major_save=$major 7657251883Speter # I'm not sure if I'm treating the release correctly. I think 7658251883Speter # release should show up in the -l (ie -lgmp5) so we don't want to 7659251883Speter # add it in twice. Is that correct? 7660251883Speter release="" 7661251883Speter versuffix="" 7662251883Speter major="" 7663251883Speter newdeplibs= 7664251883Speter droppeddeps=no 7665251883Speter case $deplibs_check_method in 7666251883Speter pass_all) 7667251883Speter # Don't check for shared/static. Everything works. 7668251883Speter # This might be a little naive. We might want to check 7669251883Speter # whether the library exists or not. But this is on 7670251883Speter # osf3 & osf4 and I'm not really sure... Just 7671251883Speter # implementing what was already the behavior. 7672251883Speter newdeplibs=$deplibs 7673251883Speter ;; 7674251883Speter test_compile) 7675251883Speter # This code stresses the "libraries are programs" paradigm to its 7676251883Speter # limits. Maybe even breaks it. We compile a program, linking it 7677251883Speter # against the deplibs as a proxy for the library. Then we can check 7678251883Speter # whether they linked in statically or dynamically with ldd. 7679289166Speter $opt_dry_run || $RM conftest.c 7680251883Speter cat > conftest.c <<EOF 7681251883Speter int main() { return 0; } 7682251883SpeterEOF 7683289166Speter $opt_dry_run || $RM conftest 7684251883Speter if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 7685251883Speter ldd_output=`ldd conftest` 7686251883Speter for i in $deplibs; do 7687289166Speter case $i in 7688289166Speter -l*) 7689289166Speter func_stripname -l '' "$i" 7690289166Speter name=$func_stripname_result 7691251883Speter if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7692251883Speter case " $predeps $postdeps " in 7693251883Speter *" $i "*) 7694289166Speter func_append newdeplibs " $i" 7695251883Speter i="" 7696251883Speter ;; 7697251883Speter esac 7698289166Speter fi 7699251883Speter if test -n "$i" ; then 7700289166Speter libname=`eval "\\$ECHO \"$libname_spec\""` 7701289166Speter deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7702289166Speter set dummy $deplib_matches; shift 7703289166Speter deplib_match=$1 7704251883Speter if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7705289166Speter func_append newdeplibs " $i" 7706251883Speter else 7707251883Speter droppeddeps=yes 7708289166Speter echo 7709289166Speter $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7710289166Speter echo "*** I have the capability to make that library automatically link in when" 7711289166Speter echo "*** you link to this library. But I can only do this if you have a" 7712289166Speter echo "*** shared version of the library, which I believe you do not have" 7713289166Speter echo "*** because a test_compile did reveal that the linker did not use it for" 7714289166Speter echo "*** its dynamic dependency list that programs get resolved with at runtime." 7715251883Speter fi 7716251883Speter fi 7717289166Speter ;; 7718289166Speter *) 7719289166Speter func_append newdeplibs " $i" 7720289166Speter ;; 7721289166Speter esac 7722251883Speter done 7723251883Speter else 7724251883Speter # Error occurred in the first compile. Let's try to salvage 7725251883Speter # the situation: Compile a separate program for each library. 7726251883Speter for i in $deplibs; do 7727289166Speter case $i in 7728289166Speter -l*) 7729289166Speter func_stripname -l '' "$i" 7730289166Speter name=$func_stripname_result 7731289166Speter $opt_dry_run || $RM conftest 7732251883Speter if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 7733251883Speter ldd_output=`ldd conftest` 7734251883Speter if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7735251883Speter case " $predeps $postdeps " in 7736251883Speter *" $i "*) 7737289166Speter func_append newdeplibs " $i" 7738251883Speter i="" 7739251883Speter ;; 7740251883Speter esac 7741251883Speter fi 7742251883Speter if test -n "$i" ; then 7743289166Speter libname=`eval "\\$ECHO \"$libname_spec\""` 7744289166Speter deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7745289166Speter set dummy $deplib_matches; shift 7746289166Speter deplib_match=$1 7747251883Speter if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 7748289166Speter func_append newdeplibs " $i" 7749251883Speter else 7750251883Speter droppeddeps=yes 7751289166Speter echo 7752289166Speter $ECHO "*** Warning: dynamic linker does not accept needed library $i." 7753289166Speter echo "*** I have the capability to make that library automatically link in when" 7754289166Speter echo "*** you link to this library. But I can only do this if you have a" 7755289166Speter echo "*** shared version of the library, which you do not appear to have" 7756289166Speter echo "*** because a test_compile did reveal that the linker did not use this one" 7757289166Speter echo "*** as a dynamic dependency that programs can get resolved with at runtime." 7758251883Speter fi 7759251883Speter fi 7760251883Speter else 7761251883Speter droppeddeps=yes 7762289166Speter echo 7763289166Speter $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 7764289166Speter echo "*** make it link in! You will probably need to install it or some" 7765289166Speter echo "*** library that it depends on before this library will be fully" 7766289166Speter echo "*** functional. Installing it before continuing would be even better." 7767251883Speter fi 7768289166Speter ;; 7769289166Speter *) 7770289166Speter func_append newdeplibs " $i" 7771289166Speter ;; 7772289166Speter esac 7773251883Speter done 7774251883Speter fi 7775251883Speter ;; 7776251883Speter file_magic*) 7777289166Speter set dummy $deplibs_check_method; shift 7778289166Speter file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7779251883Speter for a_deplib in $deplibs; do 7780289166Speter case $a_deplib in 7781289166Speter -l*) 7782289166Speter func_stripname -l '' "$a_deplib" 7783289166Speter name=$func_stripname_result 7784251883Speter if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7785251883Speter case " $predeps $postdeps " in 7786251883Speter *" $a_deplib "*) 7787289166Speter func_append newdeplibs " $a_deplib" 7788251883Speter a_deplib="" 7789251883Speter ;; 7790251883Speter esac 7791251883Speter fi 7792251883Speter if test -n "$a_deplib" ; then 7793289166Speter libname=`eval "\\$ECHO \"$libname_spec\""` 7794289166Speter if test -n "$file_magic_glob"; then 7795289166Speter libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 7796289166Speter else 7797289166Speter libnameglob=$libname 7798289166Speter fi 7799289166Speter test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 7800251883Speter for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7801289166Speter if test "$want_nocaseglob" = yes; then 7802289166Speter shopt -s nocaseglob 7803289166Speter potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7804289166Speter $nocaseglob 7805289166Speter else 7806289166Speter potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 7807289166Speter fi 7808251883Speter for potent_lib in $potential_libs; do 7809251883Speter # Follow soft links. 7810289166Speter if ls -lLd "$potent_lib" 2>/dev/null | 7811289166Speter $GREP " -> " >/dev/null; then 7812251883Speter continue 7813251883Speter fi 7814251883Speter # The statement above tries to avoid entering an 7815251883Speter # endless loop below, in case of cyclic links. 7816251883Speter # We might still enter an endless loop, since a link 7817251883Speter # loop can be closed while we follow links, 7818251883Speter # but so what? 7819251883Speter potlib="$potent_lib" 7820251883Speter while test -h "$potlib" 2>/dev/null; do 7821251883Speter potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 7822251883Speter case $potliblink in 7823251883Speter [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 7824289166Speter *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 7825251883Speter esac 7826251883Speter done 7827289166Speter if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7828289166Speter $SED -e 10q | 7829289166Speter $EGREP "$file_magic_regex" > /dev/null; then 7830289166Speter func_append newdeplibs " $a_deplib" 7831251883Speter a_deplib="" 7832251883Speter break 2 7833251883Speter fi 7834251883Speter done 7835251883Speter done 7836251883Speter fi 7837251883Speter if test -n "$a_deplib" ; then 7838251883Speter droppeddeps=yes 7839289166Speter echo 7840289166Speter $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7841289166Speter echo "*** I have the capability to make that library automatically link in when" 7842289166Speter echo "*** you link to this library. But I can only do this if you have a" 7843289166Speter echo "*** shared version of the library, which you do not appear to have" 7844289166Speter echo "*** because I did check the linker path looking for a file starting" 7845251883Speter if test -z "$potlib" ; then 7846289166Speter $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 7847251883Speter else 7848289166Speter $ECHO "*** with $libname and none of the candidates passed a file format test" 7849289166Speter $ECHO "*** using a file magic. Last file checked: $potlib" 7850251883Speter fi 7851251883Speter fi 7852289166Speter ;; 7853289166Speter *) 7854251883Speter # Add a -L argument. 7855289166Speter func_append newdeplibs " $a_deplib" 7856289166Speter ;; 7857289166Speter esac 7858251883Speter done # Gone through all deplibs. 7859251883Speter ;; 7860251883Speter match_pattern*) 7861289166Speter set dummy $deplibs_check_method; shift 7862289166Speter match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7863251883Speter for a_deplib in $deplibs; do 7864289166Speter case $a_deplib in 7865289166Speter -l*) 7866289166Speter func_stripname -l '' "$a_deplib" 7867289166Speter name=$func_stripname_result 7868251883Speter if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7869251883Speter case " $predeps $postdeps " in 7870251883Speter *" $a_deplib "*) 7871289166Speter func_append newdeplibs " $a_deplib" 7872251883Speter a_deplib="" 7873251883Speter ;; 7874251883Speter esac 7875251883Speter fi 7876251883Speter if test -n "$a_deplib" ; then 7877289166Speter libname=`eval "\\$ECHO \"$libname_spec\""` 7878251883Speter for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7879251883Speter potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 7880251883Speter for potent_lib in $potential_libs; do 7881251883Speter potlib="$potent_lib" # see symlink-check above in file_magic test 7882289166Speter if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7883289166Speter $EGREP "$match_pattern_regex" > /dev/null; then 7884289166Speter func_append newdeplibs " $a_deplib" 7885251883Speter a_deplib="" 7886251883Speter break 2 7887251883Speter fi 7888251883Speter done 7889251883Speter done 7890251883Speter fi 7891251883Speter if test -n "$a_deplib" ; then 7892251883Speter droppeddeps=yes 7893289166Speter echo 7894289166Speter $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7895289166Speter echo "*** I have the capability to make that library automatically link in when" 7896289166Speter echo "*** you link to this library. But I can only do this if you have a" 7897289166Speter echo "*** shared version of the library, which you do not appear to have" 7898289166Speter echo "*** because I did check the linker path looking for a file starting" 7899251883Speter if test -z "$potlib" ; then 7900289166Speter $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 7901251883Speter else 7902289166Speter $ECHO "*** with $libname and none of the candidates passed a file format test" 7903289166Speter $ECHO "*** using a regex pattern. Last file checked: $potlib" 7904251883Speter fi 7905251883Speter fi 7906289166Speter ;; 7907289166Speter *) 7908251883Speter # Add a -L argument. 7909289166Speter func_append newdeplibs " $a_deplib" 7910289166Speter ;; 7911289166Speter esac 7912251883Speter done # Gone through all deplibs. 7913251883Speter ;; 7914251883Speter none | unknown | *) 7915251883Speter newdeplibs="" 7916289166Speter tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 7917251883Speter if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7918251883Speter for i in $predeps $postdeps ; do 7919251883Speter # can't use Xsed below, because $i might contain '/' 7920289166Speter tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 7921251883Speter done 7922251883Speter fi 7923289166Speter case $tmp_deplibs in 7924289166Speter *[!\ \ ]*) 7925289166Speter echo 7926251883Speter if test "X$deplibs_check_method" = "Xnone"; then 7927289166Speter echo "*** Warning: inter-library dependencies are not supported in this platform." 7928251883Speter else 7929289166Speter echo "*** Warning: inter-library dependencies are not known to be supported." 7930251883Speter fi 7931289166Speter echo "*** All declared inter-library dependencies are being dropped." 7932251883Speter droppeddeps=yes 7933289166Speter ;; 7934289166Speter esac 7935251883Speter ;; 7936251883Speter esac 7937251883Speter versuffix=$versuffix_save 7938251883Speter major=$major_save 7939251883Speter release=$release_save 7940251883Speter libname=$libname_save 7941251883Speter name=$name_save 7942251883Speter 7943251883Speter case $host in 7944251883Speter *-*-rhapsody* | *-*-darwin1.[012]) 7945289166Speter # On Rhapsody replace the C library with the System framework 7946289166Speter newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 7947251883Speter ;; 7948251883Speter esac 7949251883Speter 7950251883Speter if test "$droppeddeps" = yes; then 7951251883Speter if test "$module" = yes; then 7952289166Speter echo 7953289166Speter echo "*** Warning: libtool could not satisfy all declared inter-library" 7954289166Speter $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 7955289166Speter echo "*** a static module, that should work as long as the dlopening" 7956289166Speter echo "*** application is linked with the -dlopen flag." 7957251883Speter if test -z "$global_symbol_pipe"; then 7958289166Speter echo 7959289166Speter echo "*** However, this would only work if libtool was able to extract symbol" 7960289166Speter echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 7961289166Speter echo "*** not find such a program. So, this module is probably useless." 7962289166Speter echo "*** \`nm' from GNU binutils and a full rebuild may help." 7963251883Speter fi 7964251883Speter if test "$build_old_libs" = no; then 7965251883Speter oldlibs="$output_objdir/$libname.$libext" 7966251883Speter build_libtool_libs=module 7967251883Speter build_old_libs=yes 7968251883Speter else 7969251883Speter build_libtool_libs=no 7970251883Speter fi 7971251883Speter else 7972289166Speter echo "*** The inter-library dependencies that have been dropped here will be" 7973289166Speter echo "*** automatically added whenever a program is linked with this library" 7974289166Speter echo "*** or is declared to -dlopen it." 7975251883Speter 7976251883Speter if test "$allow_undefined" = no; then 7977289166Speter echo 7978289166Speter echo "*** Since this library must not contain undefined symbols," 7979289166Speter echo "*** because either the platform does not support them or" 7980289166Speter echo "*** it was explicitly requested with -no-undefined," 7981289166Speter echo "*** libtool will only create a static version of it." 7982251883Speter if test "$build_old_libs" = no; then 7983251883Speter oldlibs="$output_objdir/$libname.$libext" 7984251883Speter build_libtool_libs=module 7985251883Speter build_old_libs=yes 7986251883Speter else 7987251883Speter build_libtool_libs=no 7988251883Speter fi 7989251883Speter fi 7990251883Speter fi 7991251883Speter fi 7992251883Speter # Done checking deplibs! 7993251883Speter deplibs=$newdeplibs 7994251883Speter fi 7995289166Speter # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7996289166Speter case $host in 7997289166Speter *-*-darwin*) 7998289166Speter newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7999289166Speter new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8000289166Speter deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8001289166Speter ;; 8002289166Speter esac 8003251883Speter 8004251883Speter # move library search paths that coincide with paths to not yet 8005251883Speter # installed libraries to the beginning of the library search list 8006251883Speter new_libs= 8007251883Speter for path in $notinst_path; do 8008251883Speter case " $new_libs " in 8009251883Speter *" -L$path/$objdir "*) ;; 8010251883Speter *) 8011251883Speter case " $deplibs " in 8012251883Speter *" -L$path/$objdir "*) 8013289166Speter func_append new_libs " -L$path/$objdir" ;; 8014251883Speter esac 8015251883Speter ;; 8016251883Speter esac 8017251883Speter done 8018251883Speter for deplib in $deplibs; do 8019251883Speter case $deplib in 8020251883Speter -L*) 8021251883Speter case " $new_libs " in 8022251883Speter *" $deplib "*) ;; 8023289166Speter *) func_append new_libs " $deplib" ;; 8024251883Speter esac 8025251883Speter ;; 8026289166Speter *) func_append new_libs " $deplib" ;; 8027251883Speter esac 8028251883Speter done 8029251883Speter deplibs="$new_libs" 8030251883Speter 8031251883Speter # All the library-specific variables (install_libdir is set above). 8032251883Speter library_names= 8033251883Speter old_library= 8034251883Speter dlname= 8035251883Speter 8036251883Speter # Test again, we may have decided not to build it any more 8037251883Speter if test "$build_libtool_libs" = yes; then 8038289166Speter # Remove ${wl} instances when linking with ld. 8039289166Speter # FIXME: should test the right _cmds variable. 8040289166Speter case $archive_cmds in 8041289166Speter *\$LD\ *) wl= ;; 8042289166Speter esac 8043251883Speter if test "$hardcode_into_libs" = yes; then 8044251883Speter # Hardcode the library paths 8045251883Speter hardcode_libdirs= 8046251883Speter dep_rpath= 8047251883Speter rpath="$finalize_rpath" 8048289166Speter test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 8049251883Speter for libdir in $rpath; do 8050251883Speter if test -n "$hardcode_libdir_flag_spec"; then 8051251883Speter if test -n "$hardcode_libdir_separator"; then 8052289166Speter func_replace_sysroot "$libdir" 8053289166Speter libdir=$func_replace_sysroot_result 8054251883Speter if test -z "$hardcode_libdirs"; then 8055251883Speter hardcode_libdirs="$libdir" 8056251883Speter else 8057251883Speter # Just accumulate the unique libdirs. 8058251883Speter case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8059251883Speter *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8060251883Speter ;; 8061251883Speter *) 8062289166Speter func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8063251883Speter ;; 8064251883Speter esac 8065251883Speter fi 8066251883Speter else 8067251883Speter eval flag=\"$hardcode_libdir_flag_spec\" 8068289166Speter func_append dep_rpath " $flag" 8069251883Speter fi 8070251883Speter elif test -n "$runpath_var"; then 8071251883Speter case "$perm_rpath " in 8072251883Speter *" $libdir "*) ;; 8073289166Speter *) func_append perm_rpath " $libdir" ;; 8074251883Speter esac 8075251883Speter fi 8076251883Speter done 8077251883Speter # Substitute the hardcoded libdirs into the rpath. 8078251883Speter if test -n "$hardcode_libdir_separator" && 8079251883Speter test -n "$hardcode_libdirs"; then 8080251883Speter libdir="$hardcode_libdirs" 8081289166Speter eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 8082251883Speter fi 8083251883Speter if test -n "$runpath_var" && test -n "$perm_rpath"; then 8084251883Speter # We should set the runpath_var. 8085251883Speter rpath= 8086251883Speter for dir in $perm_rpath; do 8087289166Speter func_append rpath "$dir:" 8088251883Speter done 8089251883Speter eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 8090251883Speter fi 8091251883Speter test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 8092251883Speter fi 8093251883Speter 8094251883Speter shlibpath="$finalize_shlibpath" 8095289166Speter test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 8096251883Speter if test -n "$shlibpath"; then 8097251883Speter eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 8098251883Speter fi 8099251883Speter 8100251883Speter # Get the real and link names of the library. 8101251883Speter eval shared_ext=\"$shrext_cmds\" 8102251883Speter eval library_names=\"$library_names_spec\" 8103251883Speter set dummy $library_names 8104289166Speter shift 8105289166Speter realname="$1" 8106289166Speter shift 8107251883Speter 8108251883Speter if test -n "$soname_spec"; then 8109251883Speter eval soname=\"$soname_spec\" 8110251883Speter else 8111251883Speter soname="$realname" 8112251883Speter fi 8113251883Speter if test -z "$dlname"; then 8114251883Speter dlname=$soname 8115251883Speter fi 8116251883Speter 8117251883Speter lib="$output_objdir/$realname" 8118251883Speter linknames= 8119251883Speter for link 8120251883Speter do 8121289166Speter func_append linknames " $link" 8122251883Speter done 8123251883Speter 8124251883Speter # Use standard objects if they are pic 8125289166Speter test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 8126289166Speter test "X$libobjs" = "X " && libobjs= 8127251883Speter 8128289166Speter delfiles= 8129289166Speter if test -n "$export_symbols" && test -n "$include_expsyms"; then 8130289166Speter $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 8131289166Speter export_symbols="$output_objdir/$libname.uexp" 8132289166Speter func_append delfiles " $export_symbols" 8133289166Speter fi 8134289166Speter 8135289166Speter orig_export_symbols= 8136289166Speter case $host_os in 8137289166Speter cygwin* | mingw* | cegcc*) 8138289166Speter if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 8139289166Speter # exporting using user supplied symfile 8140289166Speter if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 8141289166Speter # and it's NOT already a .def file. Must figure out 8142289166Speter # which of the given symbols are data symbols and tag 8143289166Speter # them as such. So, trigger use of export_symbols_cmds. 8144289166Speter # export_symbols gets reassigned inside the "prepare 8145289166Speter # the list of exported symbols" if statement, so the 8146289166Speter # include_expsyms logic still works. 8147289166Speter orig_export_symbols="$export_symbols" 8148289166Speter export_symbols= 8149289166Speter always_export_symbols=yes 8150289166Speter fi 8151289166Speter fi 8152289166Speter ;; 8153289166Speter esac 8154289166Speter 8155251883Speter # Prepare the list of exported symbols 8156251883Speter if test -z "$export_symbols"; then 8157251883Speter if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 8158289166Speter func_verbose "generating symbol list for \`$libname.la'" 8159251883Speter export_symbols="$output_objdir/$libname.exp" 8160289166Speter $opt_dry_run || $RM $export_symbols 8161251883Speter cmds=$export_symbols_cmds 8162251883Speter save_ifs="$IFS"; IFS='~' 8163289166Speter for cmd1 in $cmds; do 8164251883Speter IFS="$save_ifs" 8165289166Speter # Take the normal branch if the nm_file_list_spec branch 8166289166Speter # doesn't work or if tool conversion is not needed. 8167289166Speter case $nm_file_list_spec~$to_tool_file_cmd in 8168289166Speter *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 8169289166Speter try_normal_branch=yes 8170289166Speter eval cmd=\"$cmd1\" 8171289166Speter func_len " $cmd" 8172289166Speter len=$func_len_result 8173289166Speter ;; 8174289166Speter *) 8175289166Speter try_normal_branch=no 8176289166Speter ;; 8177289166Speter esac 8178289166Speter if test "$try_normal_branch" = yes \ 8179289166Speter && { test "$len" -lt "$max_cmd_len" \ 8180289166Speter || test "$max_cmd_len" -le -1; } 8181289166Speter then 8182289166Speter func_show_eval "$cmd" 'exit $?' 8183289166Speter skipped_export=false 8184289166Speter elif test -n "$nm_file_list_spec"; then 8185289166Speter func_basename "$output" 8186289166Speter output_la=$func_basename_result 8187289166Speter save_libobjs=$libobjs 8188289166Speter save_output=$output 8189289166Speter output=${output_objdir}/${output_la}.nm 8190289166Speter func_to_tool_file "$output" 8191289166Speter libobjs=$nm_file_list_spec$func_to_tool_file_result 8192289166Speter func_append delfiles " $output" 8193289166Speter func_verbose "creating $NM input file list: $output" 8194289166Speter for obj in $save_libobjs; do 8195289166Speter func_to_tool_file "$obj" 8196289166Speter $ECHO "$func_to_tool_file_result" 8197289166Speter done > "$output" 8198289166Speter eval cmd=\"$cmd1\" 8199289166Speter func_show_eval "$cmd" 'exit $?' 8200289166Speter output=$save_output 8201289166Speter libobjs=$save_libobjs 8202289166Speter skipped_export=false 8203251883Speter else 8204289166Speter # The command line is too long to execute in one step. 8205289166Speter func_verbose "using reloadable object file for export list..." 8206289166Speter skipped_export=: 8207251883Speter # Break out early, otherwise skipped_export may be 8208251883Speter # set to false by a later but shorter cmd. 8209251883Speter break 8210251883Speter fi 8211251883Speter done 8212251883Speter IFS="$save_ifs" 8213289166Speter if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 8214289166Speter func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8215289166Speter func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8216251883Speter fi 8217251883Speter fi 8218251883Speter fi 8219251883Speter 8220251883Speter if test -n "$export_symbols" && test -n "$include_expsyms"; then 8221289166Speter tmp_export_symbols="$export_symbols" 8222289166Speter test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8223289166Speter $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8224251883Speter fi 8225251883Speter 8226289166Speter if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 8227289166Speter # The given exports_symbols file has to be filtered, so filter it. 8228289166Speter func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8229289166Speter # FIXME: $output_objdir/$libname.filter potentially contains lots of 8230289166Speter # 's' commands which not all seds can handle. GNU sed should be fine 8231289166Speter # though. Also, the filter scales superlinearly with the number of 8232289166Speter # global variables. join(1) would be nice here, but unfortunately 8233289166Speter # isn't a blessed tool. 8234289166Speter $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8235289166Speter func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8236289166Speter export_symbols=$output_objdir/$libname.def 8237289166Speter $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8238289166Speter fi 8239289166Speter 8240251883Speter tmp_deplibs= 8241251883Speter for test_deplib in $deplibs; do 8242289166Speter case " $convenience " in 8243289166Speter *" $test_deplib "*) ;; 8244289166Speter *) 8245289166Speter func_append tmp_deplibs " $test_deplib" 8246289166Speter ;; 8247289166Speter esac 8248251883Speter done 8249251883Speter deplibs="$tmp_deplibs" 8250251883Speter 8251251883Speter if test -n "$convenience"; then 8252289166Speter if test -n "$whole_archive_flag_spec" && 8253289166Speter test "$compiler_needs_object" = yes && 8254289166Speter test -z "$libobjs"; then 8255289166Speter # extract the archives, so we have objects to list. 8256289166Speter # TODO: could optimize this to just extract one archive. 8257289166Speter whole_archive_flag_spec= 8258289166Speter fi 8259251883Speter if test -n "$whole_archive_flag_spec"; then 8260251883Speter save_libobjs=$libobjs 8261251883Speter eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8262289166Speter test "X$libobjs" = "X " && libobjs= 8263251883Speter else 8264251883Speter gentop="$output_objdir/${outputname}x" 8265289166Speter func_append generated " $gentop" 8266251883Speter 8267251883Speter func_extract_archives $gentop $convenience 8268289166Speter func_append libobjs " $func_extract_archives_result" 8269289166Speter test "X$libobjs" = "X " && libobjs= 8270251883Speter fi 8271251883Speter fi 8272289166Speter 8273251883Speter if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 8274251883Speter eval flag=\"$thread_safe_flag_spec\" 8275289166Speter func_append linker_flags " $flag" 8276251883Speter fi 8277251883Speter 8278251883Speter # Make a backup of the uninstalled library when relinking 8279289166Speter if test "$opt_mode" = relink; then 8280289166Speter $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 8281251883Speter fi 8282251883Speter 8283251883Speter # Do each of the archive commands. 8284251883Speter if test "$module" = yes && test -n "$module_cmds" ; then 8285251883Speter if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8286251883Speter eval test_cmds=\"$module_expsym_cmds\" 8287251883Speter cmds=$module_expsym_cmds 8288251883Speter else 8289251883Speter eval test_cmds=\"$module_cmds\" 8290251883Speter cmds=$module_cmds 8291251883Speter fi 8292251883Speter else 8293289166Speter if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8294289166Speter eval test_cmds=\"$archive_expsym_cmds\" 8295289166Speter cmds=$archive_expsym_cmds 8296289166Speter else 8297289166Speter eval test_cmds=\"$archive_cmds\" 8298289166Speter cmds=$archive_cmds 8299251883Speter fi 8300251883Speter fi 8301251883Speter 8302251883Speter if test "X$skipped_export" != "X:" && 8303289166Speter func_len " $test_cmds" && 8304289166Speter len=$func_len_result && 8305289166Speter test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 8306251883Speter : 8307251883Speter else 8308289166Speter # The command line is too long to link in one step, link piecewise 8309289166Speter # or, if using GNU ld and skipped_export is not :, use a linker 8310289166Speter # script. 8311251883Speter 8312251883Speter # Save the value of $output and $libobjs because we want to 8313251883Speter # use them later. If we have whole_archive_flag_spec, we 8314251883Speter # want to use save_libobjs as it was before 8315251883Speter # whole_archive_flag_spec was expanded, because we can't 8316251883Speter # assume the linker understands whole_archive_flag_spec. 8317251883Speter # This may have to be revisited, in case too many 8318251883Speter # convenience libraries get linked in and end up exceeding 8319251883Speter # the spec. 8320251883Speter if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 8321251883Speter save_libobjs=$libobjs 8322251883Speter fi 8323251883Speter save_output=$output 8324289166Speter func_basename "$output" 8325289166Speter output_la=$func_basename_result 8326251883Speter 8327251883Speter # Clear the reloadable object creation command queue and 8328251883Speter # initialize k to one. 8329251883Speter test_cmds= 8330251883Speter concat_cmds= 8331251883Speter objlist= 8332251883Speter last_robj= 8333251883Speter k=1 8334289166Speter 8335289166Speter if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 8336289166Speter output=${output_objdir}/${output_la}.lnkscript 8337289166Speter func_verbose "creating GNU ld script: $output" 8338289166Speter echo 'INPUT (' > $output 8339289166Speter for obj in $save_libobjs 8340289166Speter do 8341289166Speter func_to_tool_file "$obj" 8342289166Speter $ECHO "$func_to_tool_file_result" >> $output 8343289166Speter done 8344289166Speter echo ')' >> $output 8345289166Speter func_append delfiles " $output" 8346289166Speter func_to_tool_file "$output" 8347289166Speter output=$func_to_tool_file_result 8348289166Speter elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 8349289166Speter output=${output_objdir}/${output_la}.lnk 8350289166Speter func_verbose "creating linker input file list: $output" 8351289166Speter : > $output 8352289166Speter set x $save_libobjs 8353289166Speter shift 8354289166Speter firstobj= 8355289166Speter if test "$compiler_needs_object" = yes; then 8356289166Speter firstobj="$1 " 8357289166Speter shift 8358289166Speter fi 8359289166Speter for obj 8360289166Speter do 8361289166Speter func_to_tool_file "$obj" 8362289166Speter $ECHO "$func_to_tool_file_result" >> $output 8363289166Speter done 8364289166Speter func_append delfiles " $output" 8365289166Speter func_to_tool_file "$output" 8366289166Speter output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 8367289166Speter else 8368289166Speter if test -n "$save_libobjs"; then 8369289166Speter func_verbose "creating reloadable object files..." 8370289166Speter output=$output_objdir/$output_la-${k}.$objext 8371289166Speter eval test_cmds=\"$reload_cmds\" 8372289166Speter func_len " $test_cmds" 8373289166Speter len0=$func_len_result 8374289166Speter len=$len0 8375289166Speter 8376289166Speter # Loop over the list of objects to be linked. 8377289166Speter for obj in $save_libobjs 8378289166Speter do 8379289166Speter func_len " $obj" 8380289166Speter func_arith $len + $func_len_result 8381289166Speter len=$func_arith_result 8382289166Speter if test "X$objlist" = X || 8383289166Speter test "$len" -lt "$max_cmd_len"; then 8384289166Speter func_append objlist " $obj" 8385289166Speter else 8386289166Speter # The command $test_cmds is almost too long, add a 8387289166Speter # command to the queue. 8388289166Speter if test "$k" -eq 1 ; then 8389289166Speter # The first file doesn't have a previous command to add. 8390289166Speter reload_objs=$objlist 8391289166Speter eval concat_cmds=\"$reload_cmds\" 8392289166Speter else 8393289166Speter # All subsequent reloadable object files will link in 8394289166Speter # the last one created. 8395289166Speter reload_objs="$objlist $last_robj" 8396289166Speter eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 8397289166Speter fi 8398289166Speter last_robj=$output_objdir/$output_la-${k}.$objext 8399289166Speter func_arith $k + 1 8400289166Speter k=$func_arith_result 8401289166Speter output=$output_objdir/$output_la-${k}.$objext 8402289166Speter objlist=" $obj" 8403289166Speter func_len " $last_robj" 8404289166Speter func_arith $len0 + $func_len_result 8405289166Speter len=$func_arith_result 8406289166Speter fi 8407289166Speter done 8408289166Speter # Handle the remaining objects by creating one last 8409289166Speter # reloadable object file. All subsequent reloadable object 8410289166Speter # files will link in the last one created. 8411289166Speter test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8412289166Speter reload_objs="$objlist $last_robj" 8413289166Speter eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 8414289166Speter if test -n "$last_robj"; then 8415289166Speter eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 8416289166Speter fi 8417289166Speter func_append delfiles " $output" 8418289166Speter 8419251883Speter else 8420289166Speter output= 8421289166Speter fi 8422289166Speter 8423289166Speter if ${skipped_export-false}; then 8424289166Speter func_verbose "generating symbol list for \`$libname.la'" 8425289166Speter export_symbols="$output_objdir/$libname.exp" 8426289166Speter $opt_dry_run || $RM $export_symbols 8427289166Speter libobjs=$output 8428289166Speter # Append the command to create the export file. 8429289166Speter test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8430289166Speter eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 8431289166Speter if test -n "$last_robj"; then 8432289166Speter eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 8433251883Speter fi 8434251883Speter fi 8435251883Speter 8436289166Speter test -n "$save_libobjs" && 8437289166Speter func_verbose "creating a temporary reloadable object file: $output" 8438251883Speter 8439289166Speter # Loop through the commands generated above and execute them. 8440289166Speter save_ifs="$IFS"; IFS='~' 8441289166Speter for cmd in $concat_cmds; do 8442289166Speter IFS="$save_ifs" 8443289166Speter $opt_silent || { 8444289166Speter func_quote_for_expand "$cmd" 8445289166Speter eval "func_echo $func_quote_for_expand_result" 8446289166Speter } 8447289166Speter $opt_dry_run || eval "$cmd" || { 8448289166Speter lt_exit=$? 8449251883Speter 8450289166Speter # Restore the uninstalled library and exit 8451289166Speter if test "$opt_mode" = relink; then 8452289166Speter ( cd "$output_objdir" && \ 8453289166Speter $RM "${realname}T" && \ 8454289166Speter $MV "${realname}U" "$realname" ) 8455289166Speter fi 8456251883Speter 8457289166Speter exit $lt_exit 8458289166Speter } 8459289166Speter done 8460251883Speter IFS="$save_ifs" 8461251883Speter 8462289166Speter if test -n "$export_symbols_regex" && ${skipped_export-false}; then 8463289166Speter func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8464289166Speter func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8465289166Speter fi 8466289166Speter fi 8467289166Speter 8468289166Speter if ${skipped_export-false}; then 8469289166Speter if test -n "$export_symbols" && test -n "$include_expsyms"; then 8470289166Speter tmp_export_symbols="$export_symbols" 8471289166Speter test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 8472289166Speter $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8473289166Speter fi 8474289166Speter 8475289166Speter if test -n "$orig_export_symbols"; then 8476289166Speter # The given exports_symbols file has to be filtered, so filter it. 8477289166Speter func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8478289166Speter # FIXME: $output_objdir/$libname.filter potentially contains lots of 8479289166Speter # 's' commands which not all seds can handle. GNU sed should be fine 8480289166Speter # though. Also, the filter scales superlinearly with the number of 8481289166Speter # global variables. join(1) would be nice here, but unfortunately 8482289166Speter # isn't a blessed tool. 8483289166Speter $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 8484289166Speter func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8485289166Speter export_symbols=$output_objdir/$libname.def 8486289166Speter $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8487289166Speter fi 8488289166Speter fi 8489289166Speter 8490251883Speter libobjs=$output 8491251883Speter # Restore the value of output. 8492251883Speter output=$save_output 8493251883Speter 8494251883Speter if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 8495251883Speter eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8496289166Speter test "X$libobjs" = "X " && libobjs= 8497251883Speter fi 8498251883Speter # Expand the library linking commands again to reset the 8499251883Speter # value of $libobjs for piecewise linking. 8500251883Speter 8501251883Speter # Do each of the archive commands. 8502251883Speter if test "$module" = yes && test -n "$module_cmds" ; then 8503251883Speter if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8504251883Speter cmds=$module_expsym_cmds 8505251883Speter else 8506251883Speter cmds=$module_cmds 8507251883Speter fi 8508251883Speter else 8509289166Speter if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8510289166Speter cmds=$archive_expsym_cmds 8511289166Speter else 8512289166Speter cmds=$archive_cmds 8513251883Speter fi 8514251883Speter fi 8515289166Speter fi 8516251883Speter 8517289166Speter if test -n "$delfiles"; then 8518289166Speter # Append the command to remove temporary files to $cmds. 8519289166Speter eval cmds=\"\$cmds~\$RM $delfiles\" 8520251883Speter fi 8521289166Speter 8522289166Speter # Add any objects from preloaded convenience libraries 8523289166Speter if test -n "$dlprefiles"; then 8524289166Speter gentop="$output_objdir/${outputname}x" 8525289166Speter func_append generated " $gentop" 8526289166Speter 8527289166Speter func_extract_archives $gentop $dlprefiles 8528289166Speter func_append libobjs " $func_extract_archives_result" 8529289166Speter test "X$libobjs" = "X " && libobjs= 8530289166Speter fi 8531289166Speter 8532251883Speter save_ifs="$IFS"; IFS='~' 8533251883Speter for cmd in $cmds; do 8534251883Speter IFS="$save_ifs" 8535251883Speter eval cmd=\"$cmd\" 8536289166Speter $opt_silent || { 8537289166Speter func_quote_for_expand "$cmd" 8538289166Speter eval "func_echo $func_quote_for_expand_result" 8539289166Speter } 8540289166Speter $opt_dry_run || eval "$cmd" || { 8541251883Speter lt_exit=$? 8542251883Speter 8543251883Speter # Restore the uninstalled library and exit 8544289166Speter if test "$opt_mode" = relink; then 8545289166Speter ( cd "$output_objdir" && \ 8546289166Speter $RM "${realname}T" && \ 8547289166Speter $MV "${realname}U" "$realname" ) 8548251883Speter fi 8549251883Speter 8550251883Speter exit $lt_exit 8551251883Speter } 8552251883Speter done 8553251883Speter IFS="$save_ifs" 8554251883Speter 8555251883Speter # Restore the uninstalled library and exit 8556289166Speter if test "$opt_mode" = relink; then 8557289166Speter $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 8558251883Speter 8559251883Speter if test -n "$convenience"; then 8560251883Speter if test -z "$whole_archive_flag_spec"; then 8561289166Speter func_show_eval '${RM}r "$gentop"' 8562251883Speter fi 8563251883Speter fi 8564251883Speter 8565251883Speter exit $EXIT_SUCCESS 8566251883Speter fi 8567251883Speter 8568251883Speter # Create links to the real library. 8569251883Speter for linkname in $linknames; do 8570251883Speter if test "$realname" != "$linkname"; then 8571289166Speter func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 8572251883Speter fi 8573251883Speter done 8574251883Speter 8575251883Speter # If -module or -export-dynamic was specified, set the dlname. 8576251883Speter if test "$module" = yes || test "$export_dynamic" = yes; then 8577251883Speter # On all known operating systems, these are identical. 8578251883Speter dlname="$soname" 8579251883Speter fi 8580251883Speter fi 8581251883Speter ;; 8582251883Speter 8583251883Speter obj) 8584251883Speter if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 8585289166Speter func_warning "\`-dlopen' is ignored for objects" 8586251883Speter fi 8587251883Speter 8588289166Speter case " $deplibs" in 8589289166Speter *\ -l* | *\ -L*) 8590289166Speter func_warning "\`-l' and \`-L' are ignored for objects" ;; 8591289166Speter esac 8592251883Speter 8593289166Speter test -n "$rpath" && \ 8594289166Speter func_warning "\`-rpath' is ignored for objects" 8595251883Speter 8596289166Speter test -n "$xrpath" && \ 8597289166Speter func_warning "\`-R' is ignored for objects" 8598251883Speter 8599289166Speter test -n "$vinfo" && \ 8600289166Speter func_warning "\`-version-info' is ignored for objects" 8601251883Speter 8602289166Speter test -n "$release" && \ 8603289166Speter func_warning "\`-release' is ignored for objects" 8604289166Speter 8605251883Speter case $output in 8606251883Speter *.lo) 8607289166Speter test -n "$objs$old_deplibs" && \ 8608289166Speter func_fatal_error "cannot build library object \`$output' from non-libtool objects" 8609289166Speter 8610289166Speter libobj=$output 8611289166Speter func_lo2o "$libobj" 8612289166Speter obj=$func_lo2o_result 8613251883Speter ;; 8614251883Speter *) 8615251883Speter libobj= 8616251883Speter obj="$output" 8617251883Speter ;; 8618251883Speter esac 8619251883Speter 8620251883Speter # Delete the old objects. 8621289166Speter $opt_dry_run || $RM $obj $libobj 8622251883Speter 8623251883Speter # Objects from convenience libraries. This assumes 8624251883Speter # single-version convenience libraries. Whenever we create 8625251883Speter # different ones for PIC/non-PIC, this we'll have to duplicate 8626251883Speter # the extraction. 8627251883Speter reload_conv_objs= 8628251883Speter gentop= 8629251883Speter # reload_cmds runs $LD directly, so let us get rid of 8630251883Speter # -Wl from whole_archive_flag_spec and hope we can get by with 8631251883Speter # turning comma into space.. 8632251883Speter wl= 8633251883Speter 8634251883Speter if test -n "$convenience"; then 8635251883Speter if test -n "$whole_archive_flag_spec"; then 8636251883Speter eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 8637289166Speter reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 8638251883Speter else 8639251883Speter gentop="$output_objdir/${obj}x" 8640289166Speter func_append generated " $gentop" 8641251883Speter 8642251883Speter func_extract_archives $gentop $convenience 8643251883Speter reload_conv_objs="$reload_objs $func_extract_archives_result" 8644251883Speter fi 8645251883Speter fi 8646251883Speter 8647289166Speter # If we're not building shared, we need to use non_pic_objs 8648289166Speter test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 8649289166Speter 8650251883Speter # Create the old-style object. 8651289166Speter reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 8652251883Speter 8653251883Speter output="$obj" 8654289166Speter func_execute_cmds "$reload_cmds" 'exit $?' 8655251883Speter 8656251883Speter # Exit if we aren't doing a library object file. 8657251883Speter if test -z "$libobj"; then 8658251883Speter if test -n "$gentop"; then 8659289166Speter func_show_eval '${RM}r "$gentop"' 8660251883Speter fi 8661251883Speter 8662251883Speter exit $EXIT_SUCCESS 8663251883Speter fi 8664251883Speter 8665251883Speter if test "$build_libtool_libs" != yes; then 8666251883Speter if test -n "$gentop"; then 8667289166Speter func_show_eval '${RM}r "$gentop"' 8668251883Speter fi 8669251883Speter 8670251883Speter # Create an invalid libtool object if no PIC, so that we don't 8671251883Speter # accidentally link it into a program. 8672251883Speter # $show "echo timestamp > $libobj" 8673289166Speter # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 8674251883Speter exit $EXIT_SUCCESS 8675251883Speter fi 8676251883Speter 8677251883Speter if test -n "$pic_flag" || test "$pic_mode" != default; then 8678251883Speter # Only do commands if we really have different PIC objects. 8679251883Speter reload_objs="$libobjs $reload_conv_objs" 8680251883Speter output="$libobj" 8681289166Speter func_execute_cmds "$reload_cmds" 'exit $?' 8682251883Speter fi 8683251883Speter 8684251883Speter if test -n "$gentop"; then 8685289166Speter func_show_eval '${RM}r "$gentop"' 8686251883Speter fi 8687251883Speter 8688251883Speter exit $EXIT_SUCCESS 8689251883Speter ;; 8690251883Speter 8691251883Speter prog) 8692251883Speter case $host in 8693289166Speter *cygwin*) func_stripname '' '.exe' "$output" 8694289166Speter output=$func_stripname_result.exe;; 8695251883Speter esac 8696289166Speter test -n "$vinfo" && \ 8697289166Speter func_warning "\`-version-info' is ignored for programs" 8698251883Speter 8699289166Speter test -n "$release" && \ 8700289166Speter func_warning "\`-release' is ignored for programs" 8701251883Speter 8702289166Speter test "$preload" = yes \ 8703289166Speter && test "$dlopen_support" = unknown \ 8704289166Speter && test "$dlopen_self" = unknown \ 8705289166Speter && test "$dlopen_self_static" = unknown && \ 8706289166Speter func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 8707251883Speter 8708251883Speter case $host in 8709251883Speter *-*-rhapsody* | *-*-darwin1.[012]) 8710251883Speter # On Rhapsody replace the C library is the System framework 8711289166Speter compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 8712289166Speter finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 8713251883Speter ;; 8714251883Speter esac 8715251883Speter 8716251883Speter case $host in 8717289166Speter *-*-darwin*) 8718289166Speter # Don't allow lazy linking, it breaks C++ global constructors 8719289166Speter # But is supposedly fixed on 10.4 or later (yay!). 8720289166Speter if test "$tagname" = CXX ; then 8721289166Speter case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 8722289166Speter 10.[0123]) 8723289166Speter func_append compile_command " ${wl}-bind_at_load" 8724289166Speter func_append finalize_command " ${wl}-bind_at_load" 8725289166Speter ;; 8726289166Speter esac 8727289166Speter fi 8728289166Speter # Time to change all our "foo.ltframework" stuff back to "-framework foo" 8729289166Speter compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8730289166Speter finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8731289166Speter ;; 8732251883Speter esac 8733251883Speter 8734251883Speter 8735251883Speter # move library search paths that coincide with paths to not yet 8736251883Speter # installed libraries to the beginning of the library search list 8737251883Speter new_libs= 8738251883Speter for path in $notinst_path; do 8739251883Speter case " $new_libs " in 8740251883Speter *" -L$path/$objdir "*) ;; 8741251883Speter *) 8742251883Speter case " $compile_deplibs " in 8743251883Speter *" -L$path/$objdir "*) 8744289166Speter func_append new_libs " -L$path/$objdir" ;; 8745251883Speter esac 8746251883Speter ;; 8747251883Speter esac 8748251883Speter done 8749251883Speter for deplib in $compile_deplibs; do 8750251883Speter case $deplib in 8751251883Speter -L*) 8752251883Speter case " $new_libs " in 8753251883Speter *" $deplib "*) ;; 8754289166Speter *) func_append new_libs " $deplib" ;; 8755251883Speter esac 8756251883Speter ;; 8757289166Speter *) func_append new_libs " $deplib" ;; 8758251883Speter esac 8759251883Speter done 8760251883Speter compile_deplibs="$new_libs" 8761251883Speter 8762251883Speter 8763289166Speter func_append compile_command " $compile_deplibs" 8764289166Speter func_append finalize_command " $finalize_deplibs" 8765251883Speter 8766251883Speter if test -n "$rpath$xrpath"; then 8767251883Speter # If the user specified any rpath flags, then add them. 8768251883Speter for libdir in $rpath $xrpath; do 8769251883Speter # This is the magic to use -rpath. 8770251883Speter case "$finalize_rpath " in 8771251883Speter *" $libdir "*) ;; 8772289166Speter *) func_append finalize_rpath " $libdir" ;; 8773251883Speter esac 8774251883Speter done 8775251883Speter fi 8776251883Speter 8777251883Speter # Now hardcode the library paths 8778251883Speter rpath= 8779251883Speter hardcode_libdirs= 8780251883Speter for libdir in $compile_rpath $finalize_rpath; do 8781251883Speter if test -n "$hardcode_libdir_flag_spec"; then 8782251883Speter if test -n "$hardcode_libdir_separator"; then 8783251883Speter if test -z "$hardcode_libdirs"; then 8784251883Speter hardcode_libdirs="$libdir" 8785251883Speter else 8786251883Speter # Just accumulate the unique libdirs. 8787251883Speter case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8788251883Speter *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8789251883Speter ;; 8790251883Speter *) 8791289166Speter func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8792251883Speter ;; 8793251883Speter esac 8794251883Speter fi 8795251883Speter else 8796251883Speter eval flag=\"$hardcode_libdir_flag_spec\" 8797289166Speter func_append rpath " $flag" 8798251883Speter fi 8799251883Speter elif test -n "$runpath_var"; then 8800251883Speter case "$perm_rpath " in 8801251883Speter *" $libdir "*) ;; 8802289166Speter *) func_append perm_rpath " $libdir" ;; 8803251883Speter esac 8804251883Speter fi 8805251883Speter case $host in 8806289166Speter *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 8807289166Speter testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 8808251883Speter case :$dllsearchpath: in 8809251883Speter *":$libdir:"*) ;; 8810289166Speter ::) dllsearchpath=$libdir;; 8811289166Speter *) func_append dllsearchpath ":$libdir";; 8812251883Speter esac 8813251883Speter case :$dllsearchpath: in 8814251883Speter *":$testbindir:"*) ;; 8815289166Speter ::) dllsearchpath=$testbindir;; 8816289166Speter *) func_append dllsearchpath ":$testbindir";; 8817251883Speter esac 8818251883Speter ;; 8819251883Speter esac 8820251883Speter done 8821251883Speter # Substitute the hardcoded libdirs into the rpath. 8822251883Speter if test -n "$hardcode_libdir_separator" && 8823251883Speter test -n "$hardcode_libdirs"; then 8824251883Speter libdir="$hardcode_libdirs" 8825251883Speter eval rpath=\" $hardcode_libdir_flag_spec\" 8826251883Speter fi 8827251883Speter compile_rpath="$rpath" 8828251883Speter 8829251883Speter rpath= 8830251883Speter hardcode_libdirs= 8831251883Speter for libdir in $finalize_rpath; do 8832251883Speter if test -n "$hardcode_libdir_flag_spec"; then 8833251883Speter if test -n "$hardcode_libdir_separator"; then 8834251883Speter if test -z "$hardcode_libdirs"; then 8835251883Speter hardcode_libdirs="$libdir" 8836251883Speter else 8837251883Speter # Just accumulate the unique libdirs. 8838251883Speter case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8839251883Speter *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8840251883Speter ;; 8841251883Speter *) 8842289166Speter func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8843251883Speter ;; 8844251883Speter esac 8845251883Speter fi 8846251883Speter else 8847251883Speter eval flag=\"$hardcode_libdir_flag_spec\" 8848289166Speter func_append rpath " $flag" 8849251883Speter fi 8850251883Speter elif test -n "$runpath_var"; then 8851251883Speter case "$finalize_perm_rpath " in 8852251883Speter *" $libdir "*) ;; 8853289166Speter *) func_append finalize_perm_rpath " $libdir" ;; 8854251883Speter esac 8855251883Speter fi 8856251883Speter done 8857251883Speter # Substitute the hardcoded libdirs into the rpath. 8858251883Speter if test -n "$hardcode_libdir_separator" && 8859251883Speter test -n "$hardcode_libdirs"; then 8860251883Speter libdir="$hardcode_libdirs" 8861251883Speter eval rpath=\" $hardcode_libdir_flag_spec\" 8862251883Speter fi 8863251883Speter finalize_rpath="$rpath" 8864251883Speter 8865251883Speter if test -n "$libobjs" && test "$build_old_libs" = yes; then 8866251883Speter # Transform all the library objects into standard objects. 8867289166Speter compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8868289166Speter finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8869251883Speter fi 8870251883Speter 8871289166Speter func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8872251883Speter 8873289166Speter # template prelinking step 8874289166Speter if test -n "$prelink_cmds"; then 8875289166Speter func_execute_cmds "$prelink_cmds" 'exit $?' 8876251883Speter fi 8877251883Speter 8878289166Speter wrappers_required=yes 8879289166Speter case $host in 8880289166Speter *cegcc* | *mingw32ce*) 8881289166Speter # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 8882289166Speter wrappers_required=no 8883289166Speter ;; 8884289166Speter *cygwin* | *mingw* ) 8885289166Speter if test "$build_libtool_libs" != yes; then 8886289166Speter wrappers_required=no 8887289166Speter fi 8888289166Speter ;; 8889289166Speter *) 8890289166Speter if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 8891289166Speter wrappers_required=no 8892289166Speter fi 8893289166Speter ;; 8894289166Speter esac 8895289166Speter if test "$wrappers_required" = no; then 8896251883Speter # Replace the output file specification. 8897289166Speter compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8898251883Speter link_command="$compile_command$compile_rpath" 8899251883Speter 8900251883Speter # We have no uninstalled library dependencies, so finalize right now. 8901289166Speter exit_status=0 8902289166Speter func_show_eval "$link_command" 'exit_status=$?' 8903251883Speter 8904289166Speter if test -n "$postlink_cmds"; then 8905289166Speter func_to_tool_file "$output" 8906289166Speter postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8907289166Speter func_execute_cmds "$postlink_cmds" 'exit $?' 8908289166Speter fi 8909289166Speter 8910251883Speter # Delete the generated files. 8911289166Speter if test -f "$output_objdir/${outputname}S.${objext}"; then 8912289166Speter func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8913251883Speter fi 8914251883Speter 8915251883Speter exit $exit_status 8916251883Speter fi 8917251883Speter 8918251883Speter if test -n "$compile_shlibpath$finalize_shlibpath"; then 8919251883Speter compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8920251883Speter fi 8921251883Speter if test -n "$finalize_shlibpath"; then 8922251883Speter finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8923251883Speter fi 8924251883Speter 8925251883Speter compile_var= 8926251883Speter finalize_var= 8927251883Speter if test -n "$runpath_var"; then 8928251883Speter if test -n "$perm_rpath"; then 8929251883Speter # We should set the runpath_var. 8930251883Speter rpath= 8931251883Speter for dir in $perm_rpath; do 8932289166Speter func_append rpath "$dir:" 8933251883Speter done 8934251883Speter compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 8935251883Speter fi 8936251883Speter if test -n "$finalize_perm_rpath"; then 8937251883Speter # We should set the runpath_var. 8938251883Speter rpath= 8939251883Speter for dir in $finalize_perm_rpath; do 8940289166Speter func_append rpath "$dir:" 8941251883Speter done 8942251883Speter finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8943251883Speter fi 8944251883Speter fi 8945251883Speter 8946251883Speter if test "$no_install" = yes; then 8947251883Speter # We don't need to create a wrapper script. 8948251883Speter link_command="$compile_var$compile_command$compile_rpath" 8949251883Speter # Replace the output file specification. 8950289166Speter link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8951251883Speter # Delete the old output file. 8952289166Speter $opt_dry_run || $RM $output 8953251883Speter # Link the executable and exit 8954289166Speter func_show_eval "$link_command" 'exit $?' 8955289166Speter 8956289166Speter if test -n "$postlink_cmds"; then 8957289166Speter func_to_tool_file "$output" 8958289166Speter postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 8959289166Speter func_execute_cmds "$postlink_cmds" 'exit $?' 8960289166Speter fi 8961289166Speter 8962251883Speter exit $EXIT_SUCCESS 8963251883Speter fi 8964251883Speter 8965251883Speter if test "$hardcode_action" = relink; then 8966251883Speter # Fast installation is not supported 8967251883Speter link_command="$compile_var$compile_command$compile_rpath" 8968251883Speter relink_command="$finalize_var$finalize_command$finalize_rpath" 8969251883Speter 8970289166Speter func_warning "this platform does not like uninstalled shared libraries" 8971289166Speter func_warning "\`$output' will be relinked during installation" 8972251883Speter else 8973251883Speter if test "$fast_install" != no; then 8974251883Speter link_command="$finalize_var$compile_command$finalize_rpath" 8975251883Speter if test "$fast_install" = yes; then 8976289166Speter relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 8977251883Speter else 8978251883Speter # fast_install is set to needless 8979251883Speter relink_command= 8980251883Speter fi 8981251883Speter else 8982251883Speter link_command="$compile_var$compile_command$compile_rpath" 8983251883Speter relink_command="$finalize_var$finalize_command$finalize_rpath" 8984251883Speter fi 8985251883Speter fi 8986251883Speter 8987251883Speter # Replace the output file specification. 8988289166Speter link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 8989251883Speter 8990251883Speter # Delete the old output files. 8991289166Speter $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 8992251883Speter 8993289166Speter func_show_eval "$link_command" 'exit $?' 8994251883Speter 8995289166Speter if test -n "$postlink_cmds"; then 8996289166Speter func_to_tool_file "$output_objdir/$outputname" 8997289166Speter 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'` 8998289166Speter func_execute_cmds "$postlink_cmds" 'exit $?' 8999289166Speter fi 9000289166Speter 9001251883Speter # Now create the wrapper script. 9002289166Speter func_verbose "creating $output" 9003251883Speter 9004251883Speter # Quote the relink command for shipping. 9005251883Speter if test -n "$relink_command"; then 9006251883Speter # Preserve any variables that may affect compiler behavior 9007251883Speter for var in $variables_saved_for_relink; do 9008251883Speter if eval test -z \"\${$var+set}\"; then 9009289166Speter relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9010251883Speter elif eval var_value=\$$var; test -z "$var_value"; then 9011251883Speter relink_command="$var=; export $var; $relink_command" 9012251883Speter else 9013289166Speter func_quote_for_eval "$var_value" 9014289166Speter relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9015251883Speter fi 9016251883Speter done 9017251883Speter relink_command="(cd `pwd`; $relink_command)" 9018289166Speter relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9019251883Speter fi 9020251883Speter 9021289166Speter # Only actually do things if not in dry run mode. 9022289166Speter $opt_dry_run || { 9023251883Speter # win32 will think the script is a binary if it has 9024251883Speter # a .exe suffix, so we strip it off here. 9025251883Speter case $output in 9026289166Speter *.exe) func_stripname '' '.exe' "$output" 9027289166Speter output=$func_stripname_result ;; 9028251883Speter esac 9029251883Speter # test for cygwin because mv fails w/o .exe extensions 9030251883Speter case $host in 9031251883Speter *cygwin*) 9032251883Speter exeext=.exe 9033289166Speter func_stripname '' '.exe' "$outputname" 9034289166Speter outputname=$func_stripname_result ;; 9035251883Speter *) exeext= ;; 9036251883Speter esac 9037251883Speter case $host in 9038251883Speter *cygwin* | *mingw* ) 9039289166Speter func_dirname_and_basename "$output" "" "." 9040289166Speter output_name=$func_basename_result 9041289166Speter output_path=$func_dirname_result 9042289166Speter cwrappersource="$output_path/$objdir/lt-$output_name.c" 9043289166Speter cwrapper="$output_path/$output_name.exe" 9044289166Speter $RM $cwrappersource $cwrapper 9045289166Speter trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 9046251883Speter 9047289166Speter func_emit_cwrapperexe_src > $cwrappersource 9048251883Speter 9049289166Speter # The wrapper executable is built using the $host compiler, 9050289166Speter # because it contains $host paths and files. If cross- 9051289166Speter # compiling, it, like the target executable, must be 9052289166Speter # executed on the $host or under an emulation environment. 9053289166Speter $opt_dry_run || { 9054289166Speter $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 9055289166Speter $STRIP $cwrapper 9056289166Speter } 9057251883Speter 9058289166Speter # Now, create the wrapper script for func_source use: 9059289166Speter func_ltwrapper_scriptname $cwrapper 9060289166Speter $RM $func_ltwrapper_scriptname_result 9061289166Speter trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 9062289166Speter $opt_dry_run || { 9063289166Speter # note: this script will not be executed, so do not chmod. 9064289166Speter if test "x$build" = "x$host" ; then 9065289166Speter $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 9066289166Speter else 9067289166Speter func_emit_wrapper no > $func_ltwrapper_scriptname_result 9068289166Speter fi 9069289166Speter } 9070251883Speter ;; 9071289166Speter * ) 9072289166Speter $RM $output 9073289166Speter trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 9074251883Speter 9075289166Speter func_emit_wrapper no > $output 9076289166Speter chmod +x $output 9077251883Speter ;; 9078251883Speter esac 9079289166Speter } 9080251883Speter exit $EXIT_SUCCESS 9081251883Speter ;; 9082251883Speter esac 9083251883Speter 9084251883Speter # See if we need to build an old-fashioned archive. 9085251883Speter for oldlib in $oldlibs; do 9086251883Speter 9087251883Speter if test "$build_libtool_libs" = convenience; then 9088289166Speter oldobjs="$libobjs_save $symfileobj" 9089251883Speter addlibs="$convenience" 9090251883Speter build_libtool_libs=no 9091251883Speter else 9092251883Speter if test "$build_libtool_libs" = module; then 9093251883Speter oldobjs="$libobjs_save" 9094251883Speter build_libtool_libs=no 9095251883Speter else 9096251883Speter oldobjs="$old_deplibs $non_pic_objects" 9097289166Speter if test "$preload" = yes && test -f "$symfileobj"; then 9098289166Speter func_append oldobjs " $symfileobj" 9099289166Speter fi 9100251883Speter fi 9101251883Speter addlibs="$old_convenience" 9102251883Speter fi 9103251883Speter 9104251883Speter if test -n "$addlibs"; then 9105251883Speter gentop="$output_objdir/${outputname}x" 9106289166Speter func_append generated " $gentop" 9107251883Speter 9108251883Speter func_extract_archives $gentop $addlibs 9109289166Speter func_append oldobjs " $func_extract_archives_result" 9110251883Speter fi 9111251883Speter 9112251883Speter # Do each command in the archive commands. 9113251883Speter if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 9114289166Speter cmds=$old_archive_from_new_cmds 9115251883Speter else 9116289166Speter 9117289166Speter # Add any objects from preloaded convenience libraries 9118289166Speter if test -n "$dlprefiles"; then 9119289166Speter gentop="$output_objdir/${outputname}x" 9120289166Speter func_append generated " $gentop" 9121289166Speter 9122289166Speter func_extract_archives $gentop $dlprefiles 9123289166Speter func_append oldobjs " $func_extract_archives_result" 9124289166Speter fi 9125289166Speter 9126251883Speter # POSIX demands no paths to be encoded in archives. We have 9127251883Speter # to avoid creating archives with duplicate basenames if we 9128251883Speter # might have to extract them afterwards, e.g., when creating a 9129251883Speter # static archive out of a convenience library, or when linking 9130251883Speter # the entirety of a libtool archive into another (currently 9131251883Speter # not supported by libtool). 9132251883Speter if (for obj in $oldobjs 9133251883Speter do 9134289166Speter func_basename "$obj" 9135289166Speter $ECHO "$func_basename_result" 9136251883Speter done | sort | sort -uc >/dev/null 2>&1); then 9137251883Speter : 9138251883Speter else 9139289166Speter echo "copying selected object files to avoid basename conflicts..." 9140289166Speter gentop="$output_objdir/${outputname}x" 9141289166Speter func_append generated " $gentop" 9142289166Speter func_mkdir_p "$gentop" 9143251883Speter save_oldobjs=$oldobjs 9144251883Speter oldobjs= 9145251883Speter counter=1 9146251883Speter for obj in $save_oldobjs 9147251883Speter do 9148289166Speter func_basename "$obj" 9149289166Speter objbase="$func_basename_result" 9150251883Speter case " $oldobjs " in 9151251883Speter " ") oldobjs=$obj ;; 9152251883Speter *[\ /]"$objbase "*) 9153251883Speter while :; do 9154251883Speter # Make sure we don't pick an alternate name that also 9155251883Speter # overlaps. 9156251883Speter newobj=lt$counter-$objbase 9157289166Speter func_arith $counter + 1 9158289166Speter counter=$func_arith_result 9159251883Speter case " $oldobjs " in 9160251883Speter *[\ /]"$newobj "*) ;; 9161251883Speter *) if test ! -f "$gentop/$newobj"; then break; fi ;; 9162251883Speter esac 9163251883Speter done 9164289166Speter func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 9165289166Speter func_append oldobjs " $gentop/$newobj" 9166251883Speter ;; 9167289166Speter *) func_append oldobjs " $obj" ;; 9168251883Speter esac 9169251883Speter done 9170251883Speter fi 9171289166Speter func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 9172289166Speter tool_oldlib=$func_to_tool_file_result 9173251883Speter eval cmds=\"$old_archive_cmds\" 9174251883Speter 9175289166Speter func_len " $cmds" 9176289166Speter len=$func_len_result 9177289166Speter if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9178251883Speter cmds=$old_archive_cmds 9179289166Speter elif test -n "$archiver_list_spec"; then 9180289166Speter func_verbose "using command file archive linking..." 9181289166Speter for obj in $oldobjs 9182289166Speter do 9183289166Speter func_to_tool_file "$obj" 9184289166Speter $ECHO "$func_to_tool_file_result" 9185289166Speter done > $output_objdir/$libname.libcmd 9186289166Speter func_to_tool_file "$output_objdir/$libname.libcmd" 9187289166Speter oldobjs=" $archiver_list_spec$func_to_tool_file_result" 9188289166Speter cmds=$old_archive_cmds 9189251883Speter else 9190251883Speter # the command line is too long to link in one step, link in parts 9191289166Speter func_verbose "using piecewise archive linking..." 9192251883Speter save_RANLIB=$RANLIB 9193251883Speter RANLIB=: 9194251883Speter objlist= 9195251883Speter concat_cmds= 9196251883Speter save_oldobjs=$oldobjs 9197289166Speter oldobjs= 9198251883Speter # Is there a better way of finding the last object in the list? 9199251883Speter for obj in $save_oldobjs 9200251883Speter do 9201251883Speter last_oldobj=$obj 9202251883Speter done 9203289166Speter eval test_cmds=\"$old_archive_cmds\" 9204289166Speter func_len " $test_cmds" 9205289166Speter len0=$func_len_result 9206289166Speter len=$len0 9207251883Speter for obj in $save_oldobjs 9208251883Speter do 9209289166Speter func_len " $obj" 9210289166Speter func_arith $len + $func_len_result 9211289166Speter len=$func_arith_result 9212289166Speter func_append objlist " $obj" 9213289166Speter if test "$len" -lt "$max_cmd_len"; then 9214251883Speter : 9215251883Speter else 9216251883Speter # the above command should be used before it gets too long 9217251883Speter oldobjs=$objlist 9218251883Speter if test "$obj" = "$last_oldobj" ; then 9219289166Speter RANLIB=$save_RANLIB 9220251883Speter fi 9221251883Speter test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9222251883Speter eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 9223251883Speter objlist= 9224289166Speter len=$len0 9225251883Speter fi 9226251883Speter done 9227251883Speter RANLIB=$save_RANLIB 9228251883Speter oldobjs=$objlist 9229251883Speter if test "X$oldobjs" = "X" ; then 9230251883Speter eval cmds=\"\$concat_cmds\" 9231251883Speter else 9232251883Speter eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 9233251883Speter fi 9234251883Speter fi 9235251883Speter fi 9236289166Speter func_execute_cmds "$cmds" 'exit $?' 9237251883Speter done 9238251883Speter 9239289166Speter test -n "$generated" && \ 9240289166Speter func_show_eval "${RM}r$generated" 9241251883Speter 9242251883Speter # Now create the libtool archive. 9243251883Speter case $output in 9244251883Speter *.la) 9245251883Speter old_library= 9246251883Speter test "$build_old_libs" = yes && old_library="$libname.$libext" 9247289166Speter func_verbose "creating $output" 9248251883Speter 9249251883Speter # Preserve any variables that may affect compiler behavior 9250251883Speter for var in $variables_saved_for_relink; do 9251251883Speter if eval test -z \"\${$var+set}\"; then 9252289166Speter relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9253251883Speter elif eval var_value=\$$var; test -z "$var_value"; then 9254251883Speter relink_command="$var=; export $var; $relink_command" 9255251883Speter else 9256289166Speter func_quote_for_eval "$var_value" 9257289166Speter relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9258251883Speter fi 9259251883Speter done 9260251883Speter # Quote the link command for shipping. 9261251883Speter relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 9262289166Speter relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9263251883Speter if test "$hardcode_automatic" = yes ; then 9264251883Speter relink_command= 9265251883Speter fi 9266251883Speter 9267251883Speter # Only create the output if not a dry run. 9268289166Speter $opt_dry_run || { 9269251883Speter for installed in no yes; do 9270251883Speter if test "$installed" = yes; then 9271251883Speter if test -z "$install_libdir"; then 9272251883Speter break 9273251883Speter fi 9274251883Speter output="$output_objdir/$outputname"i 9275251883Speter # Replace all uninstalled libtool libraries with the installed ones 9276251883Speter newdependency_libs= 9277251883Speter for deplib in $dependency_libs; do 9278251883Speter case $deplib in 9279251883Speter *.la) 9280289166Speter func_basename "$deplib" 9281289166Speter name="$func_basename_result" 9282289166Speter func_resolve_sysroot "$deplib" 9283289166Speter eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 9284289166Speter test -z "$libdir" && \ 9285289166Speter func_fatal_error "\`$deplib' is not a valid libtool archive" 9286289166Speter func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 9287251883Speter ;; 9288289166Speter -L*) 9289289166Speter func_stripname -L '' "$deplib" 9290289166Speter func_replace_sysroot "$func_stripname_result" 9291289166Speter func_append newdependency_libs " -L$func_replace_sysroot_result" 9292289166Speter ;; 9293289166Speter -R*) 9294289166Speter func_stripname -R '' "$deplib" 9295289166Speter func_replace_sysroot "$func_stripname_result" 9296289166Speter func_append newdependency_libs " -R$func_replace_sysroot_result" 9297289166Speter ;; 9298289166Speter *) func_append newdependency_libs " $deplib" ;; 9299251883Speter esac 9300251883Speter done 9301251883Speter dependency_libs="$newdependency_libs" 9302251883Speter newdlfiles= 9303289166Speter 9304251883Speter for lib in $dlfiles; do 9305289166Speter case $lib in 9306289166Speter *.la) 9307289166Speter func_basename "$lib" 9308289166Speter name="$func_basename_result" 9309289166Speter eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9310289166Speter test -z "$libdir" && \ 9311289166Speter func_fatal_error "\`$lib' is not a valid libtool archive" 9312289166Speter func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 9313289166Speter ;; 9314289166Speter *) func_append newdlfiles " $lib" ;; 9315289166Speter esac 9316251883Speter done 9317251883Speter dlfiles="$newdlfiles" 9318251883Speter newdlprefiles= 9319251883Speter for lib in $dlprefiles; do 9320289166Speter case $lib in 9321289166Speter *.la) 9322289166Speter # Only pass preopened files to the pseudo-archive (for 9323289166Speter # eventual linking with the app. that links it) if we 9324289166Speter # didn't already link the preopened objects directly into 9325289166Speter # the library: 9326289166Speter func_basename "$lib" 9327289166Speter name="$func_basename_result" 9328289166Speter eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9329289166Speter test -z "$libdir" && \ 9330289166Speter func_fatal_error "\`$lib' is not a valid libtool archive" 9331289166Speter func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 9332289166Speter ;; 9333289166Speter esac 9334251883Speter done 9335251883Speter dlprefiles="$newdlprefiles" 9336251883Speter else 9337251883Speter newdlfiles= 9338251883Speter for lib in $dlfiles; do 9339251883Speter case $lib in 9340251883Speter [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9341251883Speter *) abs=`pwd`"/$lib" ;; 9342251883Speter esac 9343289166Speter func_append newdlfiles " $abs" 9344251883Speter done 9345251883Speter dlfiles="$newdlfiles" 9346251883Speter newdlprefiles= 9347251883Speter for lib in $dlprefiles; do 9348251883Speter case $lib in 9349251883Speter [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9350251883Speter *) abs=`pwd`"/$lib" ;; 9351251883Speter esac 9352289166Speter func_append newdlprefiles " $abs" 9353251883Speter done 9354251883Speter dlprefiles="$newdlprefiles" 9355251883Speter fi 9356289166Speter $RM $output 9357251883Speter # place dlname in correct position for cygwin 9358289166Speter # In fact, it would be nice if we could use this code for all target 9359289166Speter # systems that can't hard-code library paths into their executables 9360289166Speter # and that have no shared library path variable independent of PATH, 9361289166Speter # but it turns out we can't easily determine that from inspecting 9362289166Speter # libtool variables, so we have to hard-code the OSs to which it 9363289166Speter # applies here; at the moment, that means platforms that use the PE 9364289166Speter # object format with DLL files. See the long comment at the top of 9365289166Speter # tests/bindir.at for full details. 9366251883Speter tdlname=$dlname 9367251883Speter case $host,$output,$installed,$module,$dlname in 9368289166Speter *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 9369289166Speter # If a -bindir argument was supplied, place the dll there. 9370289166Speter if test "x$bindir" != x ; 9371289166Speter then 9372289166Speter func_relative_path "$install_libdir" "$bindir" 9373289166Speter tdlname=$func_relative_path_result$dlname 9374289166Speter else 9375289166Speter # Otherwise fall back on heuristic. 9376289166Speter tdlname=../bin/$dlname 9377289166Speter fi 9378289166Speter ;; 9379251883Speter esac 9380289166Speter $ECHO > $output "\ 9381251883Speter# $outputname - a libtool library file 9382289166Speter# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 9383251883Speter# 9384251883Speter# Please DO NOT delete this file! 9385251883Speter# It is necessary for linking the library. 9386251883Speter 9387251883Speter# The name that we can dlopen(3). 9388251883Speterdlname='$tdlname' 9389251883Speter 9390251883Speter# Names of this library. 9391251883Speterlibrary_names='$library_names' 9392251883Speter 9393251883Speter# The name of the static archive. 9394251883Speterold_library='$old_library' 9395251883Speter 9396289166Speter# Linker flags that can not go in dependency_libs. 9397289166Speterinherited_linker_flags='$new_inherited_linker_flags' 9398289166Speter 9399251883Speter# Libraries that this one depends upon. 9400251883Speterdependency_libs='$dependency_libs' 9401251883Speter 9402289166Speter# Names of additional weak libraries provided by this library 9403289166Speterweak_library_names='$weak_libs' 9404289166Speter 9405251883Speter# Version information for $libname. 9406251883Spetercurrent=$current 9407251883Speterage=$age 9408251883Speterrevision=$revision 9409251883Speter 9410251883Speter# Is this an already installed library? 9411251883Speterinstalled=$installed 9412251883Speter 9413251883Speter# Should we warn about portability when linking against -modules? 9414251883Spetershouldnotlink=$module 9415251883Speter 9416251883Speter# Files to dlopen/dlpreopen 9417251883Speterdlopen='$dlfiles' 9418251883Speterdlpreopen='$dlprefiles' 9419251883Speter 9420251883Speter# Directory that this library needs to be installed in: 9421251883Speterlibdir='$install_libdir'" 9422251883Speter if test "$installed" = no && test "$need_relink" = yes; then 9423289166Speter $ECHO >> $output "\ 9424251883Speterrelink_command=\"$relink_command\"" 9425251883Speter fi 9426251883Speter done 9427289166Speter } 9428251883Speter 9429251883Speter # Do a symbolic link so that the libtool archive can be found in 9430251883Speter # LD_LIBRARY_PATH before the program is installed. 9431289166Speter func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 9432251883Speter ;; 9433251883Speter esac 9434251883Speter exit $EXIT_SUCCESS 9435289166Speter} 9436251883Speter 9437289166Speter{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 9438289166Speter func_mode_link ${1+"$@"} 9439251883Speter 9440251883Speter 9441289166Speter# func_mode_uninstall arg... 9442289166Speterfunc_mode_uninstall () 9443289166Speter{ 9444289166Speter $opt_debug 9445289166Speter RM="$nonopt" 9446251883Speter files= 9447251883Speter rmforce= 9448251883Speter exit_status=0 9449251883Speter 9450251883Speter # This variable tells wrapper scripts just to set variables rather 9451251883Speter # than running their programs. 9452251883Speter libtool_install_magic="$magic" 9453251883Speter 9454251883Speter for arg 9455251883Speter do 9456251883Speter case $arg in 9457289166Speter -f) func_append RM " $arg"; rmforce=yes ;; 9458289166Speter -*) func_append RM " $arg" ;; 9459289166Speter *) func_append files " $arg" ;; 9460251883Speter esac 9461251883Speter done 9462251883Speter 9463289166Speter test -z "$RM" && \ 9464289166Speter func_fatal_help "you must specify an RM program" 9465251883Speter 9466251883Speter rmdirs= 9467251883Speter 9468251883Speter for file in $files; do 9469289166Speter func_dirname "$file" "" "." 9470289166Speter dir="$func_dirname_result" 9471289166Speter if test "X$dir" = X.; then 9472289166Speter odir="$objdir" 9473251883Speter else 9474289166Speter odir="$dir/$objdir" 9475251883Speter fi 9476289166Speter func_basename "$file" 9477289166Speter name="$func_basename_result" 9478289166Speter test "$opt_mode" = uninstall && odir="$dir" 9479251883Speter 9480289166Speter # Remember odir for removal later, being careful to avoid duplicates 9481289166Speter if test "$opt_mode" = clean; then 9482251883Speter case " $rmdirs " in 9483289166Speter *" $odir "*) ;; 9484289166Speter *) func_append rmdirs " $odir" ;; 9485251883Speter esac 9486251883Speter fi 9487251883Speter 9488251883Speter # Don't error if the file doesn't exist and rm -f was used. 9489289166Speter if { test -L "$file"; } >/dev/null 2>&1 || 9490289166Speter { test -h "$file"; } >/dev/null 2>&1 || 9491289166Speter test -f "$file"; then 9492251883Speter : 9493251883Speter elif test -d "$file"; then 9494251883Speter exit_status=1 9495251883Speter continue 9496251883Speter elif test "$rmforce" = yes; then 9497251883Speter continue 9498251883Speter fi 9499251883Speter 9500251883Speter rmfiles="$file" 9501251883Speter 9502251883Speter case $name in 9503251883Speter *.la) 9504251883Speter # Possibly a libtool archive, so verify it. 9505289166Speter if func_lalib_p "$file"; then 9506289166Speter func_source $dir/$name 9507251883Speter 9508251883Speter # Delete the libtool libraries and symlinks. 9509251883Speter for n in $library_names; do 9510289166Speter func_append rmfiles " $odir/$n" 9511251883Speter done 9512289166Speter test -n "$old_library" && func_append rmfiles " $odir/$old_library" 9513251883Speter 9514289166Speter case "$opt_mode" in 9515251883Speter clean) 9516289166Speter case " $library_names " in 9517251883Speter *" $dlname "*) ;; 9518289166Speter *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 9519251883Speter esac 9520289166Speter test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 9521251883Speter ;; 9522251883Speter uninstall) 9523251883Speter if test -n "$library_names"; then 9524251883Speter # Do each command in the postuninstall commands. 9525289166Speter func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9526251883Speter fi 9527251883Speter 9528251883Speter if test -n "$old_library"; then 9529251883Speter # Do each command in the old_postuninstall commands. 9530289166Speter func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9531251883Speter fi 9532251883Speter # FIXME: should reinstall the best remaining shared library. 9533251883Speter ;; 9534251883Speter esac 9535251883Speter fi 9536251883Speter ;; 9537251883Speter 9538251883Speter *.lo) 9539251883Speter # Possibly a libtool object, so verify it. 9540289166Speter if func_lalib_p "$file"; then 9541251883Speter 9542251883Speter # Read the .lo file 9543289166Speter func_source $dir/$name 9544251883Speter 9545251883Speter # Add PIC object to the list of files to remove. 9546289166Speter if test -n "$pic_object" && 9547289166Speter test "$pic_object" != none; then 9548289166Speter func_append rmfiles " $dir/$pic_object" 9549251883Speter fi 9550251883Speter 9551251883Speter # Add non-PIC object to the list of files to remove. 9552289166Speter if test -n "$non_pic_object" && 9553289166Speter test "$non_pic_object" != none; then 9554289166Speter func_append rmfiles " $dir/$non_pic_object" 9555251883Speter fi 9556251883Speter fi 9557251883Speter ;; 9558251883Speter 9559251883Speter *) 9560289166Speter if test "$opt_mode" = clean ; then 9561251883Speter noexename=$name 9562251883Speter case $file in 9563251883Speter *.exe) 9564289166Speter func_stripname '' '.exe' "$file" 9565289166Speter file=$func_stripname_result 9566289166Speter func_stripname '' '.exe' "$name" 9567289166Speter noexename=$func_stripname_result 9568251883Speter # $file with .exe has already been added to rmfiles, 9569251883Speter # add $file without .exe 9570289166Speter func_append rmfiles " $file" 9571251883Speter ;; 9572251883Speter esac 9573251883Speter # Do a test to see if this is a libtool program. 9574289166Speter if func_ltwrapper_p "$file"; then 9575289166Speter if func_ltwrapper_executable_p "$file"; then 9576289166Speter func_ltwrapper_scriptname "$file" 9577289166Speter relink_command= 9578289166Speter func_source $func_ltwrapper_scriptname_result 9579289166Speter func_append rmfiles " $func_ltwrapper_scriptname_result" 9580289166Speter else 9581289166Speter relink_command= 9582289166Speter func_source $dir/$noexename 9583289166Speter fi 9584251883Speter 9585251883Speter # note $name still contains .exe if it was in $file originally 9586251883Speter # as does the version of $file that was added into $rmfiles 9587289166Speter func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 9588251883Speter if test "$fast_install" = yes && test -n "$relink_command"; then 9589289166Speter func_append rmfiles " $odir/lt-$name" 9590251883Speter fi 9591251883Speter if test "X$noexename" != "X$name" ; then 9592289166Speter func_append rmfiles " $odir/lt-${noexename}.c" 9593251883Speter fi 9594251883Speter fi 9595251883Speter fi 9596251883Speter ;; 9597251883Speter esac 9598289166Speter func_show_eval "$RM $rmfiles" 'exit_status=1' 9599251883Speter done 9600251883Speter 9601251883Speter # Try to remove the ${objdir}s in the directories where we deleted files 9602251883Speter for dir in $rmdirs; do 9603251883Speter if test -d "$dir"; then 9604289166Speter func_show_eval "rmdir $dir >/dev/null 2>&1" 9605251883Speter fi 9606251883Speter done 9607251883Speter 9608251883Speter exit $exit_status 9609289166Speter} 9610251883Speter 9611289166Speter{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 9612289166Speter func_mode_uninstall ${1+"$@"} 9613251883Speter 9614289166Spetertest -z "$opt_mode" && { 9615289166Speter help="$generic_help" 9616289166Speter func_fatal_help "you must specify a MODE" 9617289166Speter} 9618251883Speter 9619289166Spetertest -z "$exec_cmd" && \ 9620289166Speter func_fatal_help "invalid operation mode \`$opt_mode'" 9621289166Speter 9622251883Speterif test -n "$exec_cmd"; then 9623289166Speter eval exec "$exec_cmd" 9624251883Speter exit $EXIT_FAILURE 9625251883Speterfi 9626251883Speter 9627289166Speterexit $exit_status 9628251883Speter 9629251883Speter 9630251883Speter# The TAGs below are defined such that we never get into a situation 9631251883Speter# in which we disable both kinds of libraries. Given conflicting 9632251883Speter# choices, we go for a static library, that is the most portable, 9633251883Speter# since we can't tell whether shared libraries were disabled because 9634251883Speter# the user asked for that or because the platform doesn't support 9635251883Speter# them. This is particularly important on AIX, because we don't 9636251883Speter# support having both static and shared libraries enabled at the same 9637251883Speter# time on that platform, so we default to a shared-only configuration. 9638251883Speter# If a disable-shared tag is given, we'll fallback to a static-only 9639251883Speter# configuration. But we'll never go from static-only to shared-only. 9640251883Speter 9641251883Speter# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 9642289166Speterbuild_libtool_libs=no 9643289166Speterbuild_old_libs=yes 9644251883Speter# ### END LIBTOOL TAG CONFIG: disable-shared 9645251883Speter 9646251883Speter# ### BEGIN LIBTOOL TAG CONFIG: disable-static 9647289166Speterbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 9648251883Speter# ### END LIBTOOL TAG CONFIG: disable-static 9649251883Speter 9650251883Speter# Local Variables: 9651251883Speter# mode:shell-script 9652251883Speter# sh-indentation:2 9653251883Speter# End: 9654289166Speter# vi:sw=2 9655289166Speter 9656