ltmain.sh revision 549e21da
1549e21daSmrg# Generated from ltmain.m4sh. 2549e21daSmrg 3549e21daSmrg# libtool (GNU libtool) 2.2.10 4549e21daSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 5549e21daSmrg 6549e21daSmrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 7549e21daSmrg# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. 8549e21daSmrg# This is free software; see the source for copying conditions. There is NO 9549e21daSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 10549e21daSmrg 11549e21daSmrg# GNU Libtool is free software; you can redistribute it and/or modify 12ba6a1819Smrg# it under the terms of the GNU General Public License as published by 13ba6a1819Smrg# the Free Software Foundation; either version 2 of the License, or 14ba6a1819Smrg# (at your option) any later version. 15ba6a1819Smrg# 16549e21daSmrg# As a special exception to the GNU General Public License, 17549e21daSmrg# if you distribute this file as part of a program or library that 18549e21daSmrg# is built using GNU Libtool, you may include this file under the 19549e21daSmrg# same distribution terms that you use for the rest of that program. 20549e21daSmrg# 21549e21daSmrg# GNU Libtool is distributed in the hope that it will be useful, but 22ba6a1819Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 23ba6a1819Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 24ba6a1819Smrg# General Public License for more details. 25ba6a1819Smrg# 26ba6a1819Smrg# You should have received a copy of the GNU General Public License 27549e21daSmrg# along with GNU Libtool; see the file COPYING. If not, a copy 28549e21daSmrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 29549e21daSmrg# or obtained by writing to the Free Software Foundation, Inc., 30549e21daSmrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 31549e21daSmrg 32549e21daSmrg# Usage: $progname [OPTION]... [MODE-ARG]... 33549e21daSmrg# 34549e21daSmrg# Provide generalized library-building support services. 35ba6a1819Smrg# 36549e21daSmrg# --config show all configuration variables 37549e21daSmrg# --debug enable verbose shell tracing 38549e21daSmrg# -n, --dry-run display commands without modifying any files 39549e21daSmrg# --features display basic configuration information and exit 40549e21daSmrg# --mode=MODE use operation mode MODE 41549e21daSmrg# --preserve-dup-deps don't remove duplicate dependency libraries 42549e21daSmrg# --quiet, --silent don't print informational messages 43549e21daSmrg# --no-quiet, --no-silent 44549e21daSmrg# print informational messages (default) 45549e21daSmrg# --tag=TAG use configuration variables from tag TAG 46549e21daSmrg# -v, --verbose print more informational messages than default 47549e21daSmrg# --no-verbose don't print the extra informational messages 48549e21daSmrg# --version print version information 49549e21daSmrg# -h, --help, --help-all print short, long, or detailed help message 50549e21daSmrg# 51549e21daSmrg# MODE must be one of the following: 52549e21daSmrg# 53549e21daSmrg# clean remove files from the build directory 54549e21daSmrg# compile compile a source file into a libtool object 55549e21daSmrg# execute automatically set library path, then run a program 56549e21daSmrg# finish complete the installation of libtool libraries 57549e21daSmrg# install install libraries or executables 58549e21daSmrg# link create a library or an executable 59549e21daSmrg# uninstall remove libraries from an installed directory 60549e21daSmrg# 61549e21daSmrg# MODE-ARGS vary depending on the MODE. When passed as first option, 62549e21daSmrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 63549e21daSmrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 64549e21daSmrg# 65549e21daSmrg# When reporting a bug, please describe a test case to reproduce it and 66549e21daSmrg# include the following information: 67549e21daSmrg# 68549e21daSmrg# host-triplet: $host 69549e21daSmrg# shell: $SHELL 70549e21daSmrg# compiler: $LTCC 71549e21daSmrg# compiler flags: $LTCFLAGS 72549e21daSmrg# linker: $LD (gnu? $with_gnu_ld) 73549e21daSmrg# $progname: (GNU libtool) 2.2.10 74549e21daSmrg# automake: $automake_version 75549e21daSmrg# autoconf: $autoconf_version 76549e21daSmrg# 77549e21daSmrg# Report bugs to <bug-libtool@gnu.org>. 78549e21daSmrg 79549e21daSmrgPROGRAM=libtool 80549e21daSmrgPACKAGE=libtool 81549e21daSmrgVERSION=2.2.10 82549e21daSmrgTIMESTAMP="" 83549e21daSmrgpackage_revision=1.3175 84549e21daSmrg 85549e21daSmrg# Be Bourne compatible 86549e21daSmrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 87549e21daSmrg emulate sh 88549e21daSmrg NULLCMD=: 89549e21daSmrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 90549e21daSmrg # is contrary to our usage. Disable this feature. 91549e21daSmrg alias -g '${1+"$@"}'='"$@"' 92549e21daSmrg setopt NO_GLOB_SUBST 93549e21daSmrgelse 94549e21daSmrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 95549e21daSmrgfi 96549e21daSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 97549e21daSmrgDUALCASE=1; export DUALCASE # for MKS sh 98549e21daSmrg 99549e21daSmrg# A function that is used when there is no print builtin or printf. 100549e21daSmrgfunc_fallback_echo () 101549e21daSmrg{ 102549e21daSmrg eval 'cat <<_LTECHO_EOF 103549e21daSmrg$1 104549e21daSmrg_LTECHO_EOF' 105549e21daSmrg} 106549e21daSmrg 107549e21daSmrg# NLS nuisances: We save the old values to restore during execute mode. 108549e21daSmrglt_user_locale= 109549e21daSmrglt_safe_locale= 110549e21daSmrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 111549e21daSmrgdo 112549e21daSmrg eval "if test \"\${$lt_var+set}\" = set; then 113549e21daSmrg save_$lt_var=\$$lt_var 114549e21daSmrg $lt_var=C 115549e21daSmrg export $lt_var 116549e21daSmrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 117549e21daSmrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 118549e21daSmrg fi" 119549e21daSmrgdone 120549e21daSmrgLC_ALL=C 121549e21daSmrgLANGUAGE=C 122549e21daSmrgexport LANGUAGE LC_ALL 123549e21daSmrg 124549e21daSmrg$lt_unset CDPATH 125ba6a1819Smrg 126ba6a1819Smrg 127ba6a1819Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 128ba6a1819Smrg# is ksh but when the shell is invoked as "sh" and the current value of 129ba6a1819Smrg# the _XPG environment variable is not equal to 1 (one), the special 130ba6a1819Smrg# positional parameter $0, within a function call, is the name of the 131ba6a1819Smrg# function. 132ba6a1819Smrgprogpath="$0" 133ba6a1819Smrg 134549e21daSmrg 135549e21daSmrg 136549e21daSmrg: ${CP="cp -f"} 137549e21daSmrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 138549e21daSmrg: ${EGREP="grep -E"} 139549e21daSmrg: ${FGREP="grep -F"} 140549e21daSmrg: ${GREP="grep"} 141549e21daSmrg: ${LN_S="ln -s"} 142549e21daSmrg: ${MAKE="make"} 143549e21daSmrg: ${MKDIR="mkdir"} 144549e21daSmrg: ${MV="mv -f"} 145549e21daSmrg: ${RM="rm -f"} 146549e21daSmrg: ${SED="sed"} 147549e21daSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 148549e21daSmrg: ${Xsed="$SED -e 1s/^X//"} 149ba6a1819Smrg 150ba6a1819Smrg# Global variables: 151ba6a1819SmrgEXIT_SUCCESS=0 152ba6a1819SmrgEXIT_FAILURE=1 153549e21daSmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 154549e21daSmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 155ba6a1819Smrg 156549e21daSmrgexit_status=$EXIT_SUCCESS 157ba6a1819Smrg 158549e21daSmrg# Make sure IFS has a sensible default 159549e21daSmrglt_nl=' 160549e21daSmrg' 161549e21daSmrgIFS=" $lt_nl" 162ba6a1819Smrg 163549e21daSmrgdirname="s,/[^/]*$,," 164549e21daSmrgbasename="s,^.*/,," 165549e21daSmrg 166549e21daSmrg# func_dirname_and_basename file append nondir_replacement 167549e21daSmrg# perform func_basename and func_dirname in a single function 168549e21daSmrg# call: 169549e21daSmrg# dirname: Compute the dirname of FILE. If nonempty, 170549e21daSmrg# add APPEND to the result, otherwise set result 171549e21daSmrg# to NONDIR_REPLACEMENT. 172549e21daSmrg# value returned in "$func_dirname_result" 173549e21daSmrg# basename: Compute filename of FILE. 174549e21daSmrg# value retuned in "$func_basename_result" 175549e21daSmrg# Implementation must be kept synchronized with func_dirname 176549e21daSmrg# and func_basename. For efficiency, we do not delegate to 177549e21daSmrg# those functions but instead duplicate the functionality here. 178549e21daSmrgfunc_dirname_and_basename () 179549e21daSmrg{ 180549e21daSmrg # Extract subdirectory from the argument. 181549e21daSmrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 182549e21daSmrg if test "X$func_dirname_result" = "X${1}"; then 183549e21daSmrg func_dirname_result="${3}" 184549e21daSmrg else 185549e21daSmrg func_dirname_result="$func_dirname_result${2}" 186549e21daSmrg fi 187549e21daSmrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 188549e21daSmrg} 189ba6a1819Smrg 190549e21daSmrg# Generated shell functions inserted here. 191549e21daSmrg 192549e21daSmrg# These SED scripts presuppose an absolute path with a trailing slash. 193549e21daSmrgpathcar='s,^/\([^/]*\).*$,\1,' 194549e21daSmrgpathcdr='s,^/[^/]*,,' 195549e21daSmrgremovedotparts=':dotsl 196549e21daSmrg s@/\./@/@g 197549e21daSmrg t dotsl 198549e21daSmrg s,/\.$,/,' 199549e21daSmrgcollapseslashes='s@/\{1,\}@/@g' 200549e21daSmrgfinalslash='s,/*$,/,' 201549e21daSmrg 202549e21daSmrg# func_normal_abspath PATH 203549e21daSmrg# Remove doubled-up and trailing slashes, "." path components, 204549e21daSmrg# and cancel out any ".." path components in PATH after making 205549e21daSmrg# it an absolute path. 206549e21daSmrg# value returned in "$func_normal_abspath_result" 207549e21daSmrgfunc_normal_abspath () 208549e21daSmrg{ 209549e21daSmrg # Start from root dir and reassemble the path. 210549e21daSmrg func_normal_abspath_result= 211549e21daSmrg func_normal_abspath_tpath=$1 212549e21daSmrg func_normal_abspath_altnamespace= 213549e21daSmrg case $func_normal_abspath_tpath in 214549e21daSmrg "") 215549e21daSmrg # Empty path, that just means $cwd. 216549e21daSmrg func_stripname '' '/' "`pwd`" 217549e21daSmrg func_normal_abspath_result=$func_stripname_result 218549e21daSmrg return 219549e21daSmrg ;; 220549e21daSmrg # The next three entries are used to spot a run of precisely 221549e21daSmrg # two leading slashes without using negated character classes; 222549e21daSmrg # we take advantage of case's first-match behaviour. 223549e21daSmrg ///*) 224549e21daSmrg # Unusual form of absolute path, do nothing. 225549e21daSmrg ;; 226549e21daSmrg //*) 227549e21daSmrg # Not necessarily an ordinary path; POSIX reserves leading '//' 228549e21daSmrg # and for example Cygwin uses it to access remote file shares 229549e21daSmrg # over CIFS/SMB, so we conserve a leading double slash if found. 230549e21daSmrg func_normal_abspath_altnamespace=/ 231549e21daSmrg ;; 232549e21daSmrg /*) 233549e21daSmrg # Absolute path, do nothing. 234549e21daSmrg ;; 235549e21daSmrg *) 236549e21daSmrg # Relative path, prepend $cwd. 237549e21daSmrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 238549e21daSmrg ;; 239549e21daSmrg esac 240549e21daSmrg # Cancel out all the simple stuff to save iterations. We also want 241549e21daSmrg # the path to end with a slash for ease of parsing, so make sure 242549e21daSmrg # there is one (and only one) here. 243549e21daSmrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 244549e21daSmrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 245549e21daSmrg while :; do 246549e21daSmrg # Processed it all yet? 247549e21daSmrg if test "$func_normal_abspath_tpath" = / ; then 248549e21daSmrg # If we ascended to the root using ".." the result may be empty now. 249549e21daSmrg if test -z "$func_normal_abspath_result" ; then 250549e21daSmrg func_normal_abspath_result=/ 251549e21daSmrg fi 252549e21daSmrg break 253549e21daSmrg fi 254549e21daSmrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 255549e21daSmrg -e "$pathcar"` 256549e21daSmrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 257549e21daSmrg -e "$pathcdr"` 258549e21daSmrg # Figure out what to do with it 259549e21daSmrg case $func_normal_abspath_tcomponent in 260549e21daSmrg "") 261549e21daSmrg # Trailing empty path component, ignore it. 262549e21daSmrg ;; 263549e21daSmrg ..) 264549e21daSmrg # Parent dir; strip last assembled component from result. 265549e21daSmrg func_dirname "$func_normal_abspath_result" 266549e21daSmrg func_normal_abspath_result=$func_dirname_result 267549e21daSmrg ;; 268549e21daSmrg *) 269549e21daSmrg # Actual path component, append it. 270549e21daSmrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 271549e21daSmrg ;; 272549e21daSmrg esac 273549e21daSmrg done 274549e21daSmrg # Restore leading double-slash if one was found on entry. 275549e21daSmrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 276549e21daSmrg} 277ba6a1819Smrg 278549e21daSmrg# func_relative_path SRCDIR DSTDIR 279549e21daSmrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 280549e21daSmrg# slash if non-empty, suitable for immediately appending a filename 281549e21daSmrg# without needing to append a separator. 282549e21daSmrg# value returned in "$func_relative_path_result" 283549e21daSmrgfunc_relative_path () 284549e21daSmrg{ 285549e21daSmrg func_relative_path_result= 286549e21daSmrg func_normal_abspath "$1" 287549e21daSmrg func_relative_path_tlibdir=$func_normal_abspath_result 288549e21daSmrg func_normal_abspath "$2" 289549e21daSmrg func_relative_path_tbindir=$func_normal_abspath_result 290549e21daSmrg 291549e21daSmrg # Ascend the tree starting from libdir 292549e21daSmrg while :; do 293549e21daSmrg # check if we have found a prefix of bindir 294549e21daSmrg case $func_relative_path_tbindir in 295549e21daSmrg $func_relative_path_tlibdir) 296549e21daSmrg # found an exact match 297549e21daSmrg func_relative_path_tcancelled= 298549e21daSmrg break 299549e21daSmrg ;; 300549e21daSmrg $func_relative_path_tlibdir*) 301549e21daSmrg # found a matching prefix 302549e21daSmrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 303549e21daSmrg func_relative_path_tcancelled=$func_stripname_result 304549e21daSmrg if test -z "$func_relative_path_result"; then 305549e21daSmrg func_relative_path_result=. 306549e21daSmrg fi 307549e21daSmrg break 308549e21daSmrg ;; 309549e21daSmrg *) 310549e21daSmrg func_dirname $func_relative_path_tlibdir 311549e21daSmrg func_relative_path_tlibdir=${func_dirname_result} 312549e21daSmrg if test "x$func_relative_path_tlibdir" = x ; then 313549e21daSmrg # Have to descend all the way to the root! 314549e21daSmrg func_relative_path_result=../$func_relative_path_result 315549e21daSmrg func_relative_path_tcancelled=$func_relative_path_tbindir 316549e21daSmrg break 317549e21daSmrg fi 318549e21daSmrg func_relative_path_result=../$func_relative_path_result 319549e21daSmrg ;; 320549e21daSmrg esac 321549e21daSmrg done 322549e21daSmrg 323549e21daSmrg # Now calculate path; take care to avoid doubling-up slashes. 324549e21daSmrg func_stripname '' '/' "$func_relative_path_result" 325549e21daSmrg func_relative_path_result=$func_stripname_result 326549e21daSmrg func_stripname '/' '/' "$func_relative_path_tcancelled" 327549e21daSmrg if test "x$func_stripname_result" != x ; then 328549e21daSmrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 329549e21daSmrg fi 330549e21daSmrg 331549e21daSmrg # Normalisation. If bindir is libdir, return empty string, 332549e21daSmrg # else relative path ending with a slash; either way, target 333549e21daSmrg # file name can be directly appended. 334549e21daSmrg if test ! -z "$func_relative_path_result"; then 335549e21daSmrg func_stripname './' '' "$func_relative_path_result/" 336549e21daSmrg func_relative_path_result=$func_stripname_result 337549e21daSmrg fi 338549e21daSmrg} 339549e21daSmrg 340549e21daSmrg# The name of this program: 341549e21daSmrgfunc_dirname_and_basename "$progpath" 342549e21daSmrgprogname=$func_basename_result 343549e21daSmrg 344549e21daSmrg# Make sure we have an absolute path for reexecution: 345549e21daSmrgcase $progpath in 346549e21daSmrg [\\/]*|[A-Za-z]:\\*) ;; 347549e21daSmrg *[\\/]*) 348549e21daSmrg progdir=$func_dirname_result 349549e21daSmrg progdir=`cd "$progdir" && pwd` 350549e21daSmrg progpath="$progdir/$progname" 351549e21daSmrg ;; 352549e21daSmrg *) 353549e21daSmrg save_IFS="$IFS" 354549e21daSmrg IFS=: 355549e21daSmrg for progdir in $PATH; do 356549e21daSmrg IFS="$save_IFS" 357549e21daSmrg test -x "$progdir/$progname" && break 358549e21daSmrg done 359549e21daSmrg IFS="$save_IFS" 360549e21daSmrg test -n "$progdir" || progdir=`pwd` 361549e21daSmrg progpath="$progdir/$progname" 362549e21daSmrg ;; 363549e21daSmrgesac 364ba6a1819Smrg 365ba6a1819Smrg# Sed substitution that helps us do robust quoting. It backslashifies 366ba6a1819Smrg# metacharacters that are still active within double-quoted strings. 367ba6a1819SmrgXsed="${SED}"' -e 1s/^X//' 368549e21daSmrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 369549e21daSmrg 370549e21daSmrg# Same as above, but do not quote variable references. 371549e21daSmrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 372549e21daSmrg 373549e21daSmrg# Re-`\' parameter expansions in output of double_quote_subst that were 374549e21daSmrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 375549e21daSmrg# in input to double_quote_subst, that '$' was protected from expansion. 376549e21daSmrg# Since each input `\' is now two `\'s, look for any number of runs of 377549e21daSmrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 378549e21daSmrgbs='\\' 379549e21daSmrgbs2='\\\\' 380549e21daSmrgbs4='\\\\\\\\' 381549e21daSmrgdollar='\$' 382549e21daSmrgsed_double_backslash="\ 383549e21daSmrg s/$bs4/&\\ 384549e21daSmrg/g 385549e21daSmrg s/^$bs2$dollar/$bs&/ 386549e21daSmrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 387549e21daSmrg s/\n//g" 388549e21daSmrg 389549e21daSmrg# Standard options: 390549e21daSmrgopt_dry_run=false 391549e21daSmrgopt_help=false 392549e21daSmrgopt_quiet=false 393549e21daSmrgopt_verbose=false 394549e21daSmrgopt_warning=: 395549e21daSmrg 396549e21daSmrg# func_echo arg... 397549e21daSmrg# Echo program name prefixed message, along with the current mode 398549e21daSmrg# name if it has been set yet. 399549e21daSmrgfunc_echo () 400549e21daSmrg{ 401549e21daSmrg $ECHO "$progname${mode+: }$mode: $*" 402549e21daSmrg} 403ba6a1819Smrg 404549e21daSmrg# func_verbose arg... 405549e21daSmrg# Echo program name prefixed message in verbose mode only. 406549e21daSmrgfunc_verbose () 407549e21daSmrg{ 408549e21daSmrg $opt_verbose && func_echo ${1+"$@"} 409ba6a1819Smrg 410549e21daSmrg # A bug in bash halts the script if the last line of a function 411549e21daSmrg # fails when set -e is in force, so we need another command to 412549e21daSmrg # work around that: 413549e21daSmrg : 414549e21daSmrg} 415ba6a1819Smrg 416549e21daSmrg# func_echo_all arg... 417549e21daSmrg# Invoke $ECHO with all args, space-separated. 418549e21daSmrgfunc_echo_all () 419549e21daSmrg{ 420549e21daSmrg $ECHO "$*" 421549e21daSmrg} 422ba6a1819Smrg 423549e21daSmrg# func_error arg... 424549e21daSmrg# Echo program name prefixed message to standard error. 425549e21daSmrgfunc_error () 426549e21daSmrg{ 427549e21daSmrg $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 428549e21daSmrg} 429549e21daSmrg 430549e21daSmrg# func_warning arg... 431549e21daSmrg# Echo program name prefixed warning message to standard error. 432549e21daSmrgfunc_warning () 433549e21daSmrg{ 434549e21daSmrg $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 435549e21daSmrg 436549e21daSmrg # bash bug again: 437549e21daSmrg : 438549e21daSmrg} 439549e21daSmrg 440549e21daSmrg# func_fatal_error arg... 441549e21daSmrg# Echo program name prefixed message to standard error, and exit. 442549e21daSmrgfunc_fatal_error () 443549e21daSmrg{ 444549e21daSmrg func_error ${1+"$@"} 445549e21daSmrg exit $EXIT_FAILURE 446549e21daSmrg} 447549e21daSmrg 448549e21daSmrg# func_fatal_help arg... 449549e21daSmrg# Echo program name prefixed message to standard error, followed by 450549e21daSmrg# a help hint, and exit. 451549e21daSmrgfunc_fatal_help () 452549e21daSmrg{ 453549e21daSmrg func_error ${1+"$@"} 454549e21daSmrg func_fatal_error "$help" 455549e21daSmrg} 456549e21daSmrghelp="Try \`$progname --help' for more information." ## default 457549e21daSmrg 458549e21daSmrg 459549e21daSmrg# func_grep expression filename 460549e21daSmrg# Check whether EXPRESSION matches any line of FILENAME, without output. 461549e21daSmrgfunc_grep () 462549e21daSmrg{ 463549e21daSmrg $GREP "$1" "$2" >/dev/null 2>&1 464549e21daSmrg} 465549e21daSmrg 466549e21daSmrg 467549e21daSmrg# func_mkdir_p directory-path 468549e21daSmrg# Make sure the entire path to DIRECTORY-PATH is available. 469549e21daSmrgfunc_mkdir_p () 470549e21daSmrg{ 471549e21daSmrg my_directory_path="$1" 472549e21daSmrg my_dir_list= 473549e21daSmrg 474549e21daSmrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 475549e21daSmrg 476549e21daSmrg # Protect directory names starting with `-' 477549e21daSmrg case $my_directory_path in 478549e21daSmrg -*) my_directory_path="./$my_directory_path" ;; 479549e21daSmrg esac 480549e21daSmrg 481549e21daSmrg # While some portion of DIR does not yet exist... 482549e21daSmrg while test ! -d "$my_directory_path"; do 483549e21daSmrg # ...make a list in topmost first order. Use a colon delimited 484549e21daSmrg # list incase some portion of path contains whitespace. 485549e21daSmrg my_dir_list="$my_directory_path:$my_dir_list" 486549e21daSmrg 487549e21daSmrg # If the last portion added has no slash in it, the list is done 488549e21daSmrg case $my_directory_path in */*) ;; *) break ;; esac 489549e21daSmrg 490549e21daSmrg # ...otherwise throw away the child directory and loop 491549e21daSmrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 492549e21daSmrg done 493549e21daSmrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 494549e21daSmrg 495549e21daSmrg save_mkdir_p_IFS="$IFS"; IFS=':' 496549e21daSmrg for my_dir in $my_dir_list; do 497549e21daSmrg IFS="$save_mkdir_p_IFS" 498549e21daSmrg # mkdir can fail with a `File exist' error if two processes 499549e21daSmrg # try to create one of the directories concurrently. Don't 500549e21daSmrg # stop in that case! 501549e21daSmrg $MKDIR "$my_dir" 2>/dev/null || : 502549e21daSmrg done 503549e21daSmrg IFS="$save_mkdir_p_IFS" 504549e21daSmrg 505549e21daSmrg # Bail out if we (or some other process) failed to create a directory. 506549e21daSmrg test -d "$my_directory_path" || \ 507549e21daSmrg func_fatal_error "Failed to create \`$1'" 508549e21daSmrg fi 509549e21daSmrg} 510ba6a1819Smrg 511ba6a1819Smrg 512ba6a1819Smrg# func_mktempdir [string] 513ba6a1819Smrg# Make a temporary directory that won't clash with other running 514ba6a1819Smrg# libtool processes, and avoids race conditions if possible. If 515ba6a1819Smrg# given, STRING is the basename for that directory. 516ba6a1819Smrgfunc_mktempdir () 517ba6a1819Smrg{ 518ba6a1819Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 519ba6a1819Smrg 520549e21daSmrg if test "$opt_dry_run" = ":"; then 521ba6a1819Smrg # Return a directory name, but don't create it in dry-run mode 522ba6a1819Smrg my_tmpdir="${my_template}-$$" 523ba6a1819Smrg else 524ba6a1819Smrg 525ba6a1819Smrg # If mktemp works, use that first and foremost 526ba6a1819Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 527ba6a1819Smrg 528ba6a1819Smrg if test ! -d "$my_tmpdir"; then 529549e21daSmrg # Failing that, at least try and use $RANDOM to avoid a race 530549e21daSmrg my_tmpdir="${my_template}-${RANDOM-0}$$" 531ba6a1819Smrg 532549e21daSmrg save_mktempdir_umask=`umask` 533549e21daSmrg umask 0077 534549e21daSmrg $MKDIR "$my_tmpdir" 535549e21daSmrg umask $save_mktempdir_umask 536ba6a1819Smrg fi 537ba6a1819Smrg 538ba6a1819Smrg # If we're not in dry-run mode, bomb out on failure 539549e21daSmrg test -d "$my_tmpdir" || \ 540549e21daSmrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 541ba6a1819Smrg fi 542ba6a1819Smrg 543549e21daSmrg $ECHO "$my_tmpdir" 544ba6a1819Smrg} 545ba6a1819Smrg 546ba6a1819Smrg 547549e21daSmrg# func_quote_for_eval arg 548549e21daSmrg# Aesthetically quote ARG to be evaled later. 549549e21daSmrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 550549e21daSmrg# is double-quoted, suitable for a subsequent eval, whereas 551549e21daSmrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 552549e21daSmrg# which are still active within double quotes backslashified. 553549e21daSmrgfunc_quote_for_eval () 554ba6a1819Smrg{ 555549e21daSmrg case $1 in 556549e21daSmrg *[\\\`\"\$]*) 557549e21daSmrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 558549e21daSmrg *) 559549e21daSmrg func_quote_for_eval_unquoted_result="$1" ;; 560549e21daSmrg esac 561549e21daSmrg 562549e21daSmrg case $func_quote_for_eval_unquoted_result in 563549e21daSmrg # Double-quote args containing shell metacharacters to delay 564549e21daSmrg # word splitting, command substitution and and variable 565549e21daSmrg # expansion for a subsequent eval. 566549e21daSmrg # Many Bourne shells cannot handle close brackets correctly 567549e21daSmrg # in scan sets, so we specify it separately. 568549e21daSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 569549e21daSmrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 570549e21daSmrg ;; 571549e21daSmrg *) 572549e21daSmrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 573ba6a1819Smrg esac 574ba6a1819Smrg} 575ba6a1819Smrg 576ba6a1819Smrg 577549e21daSmrg# func_quote_for_expand arg 578549e21daSmrg# Aesthetically quote ARG to be evaled later; same as above, 579549e21daSmrg# but do not quote variable references. 580549e21daSmrgfunc_quote_for_expand () 581ba6a1819Smrg{ 582549e21daSmrg case $1 in 583549e21daSmrg *[\\\`\"]*) 584549e21daSmrg my_arg=`$ECHO "$1" | $SED \ 585549e21daSmrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 586ba6a1819Smrg *) 587549e21daSmrg my_arg="$1" ;; 588549e21daSmrg esac 589549e21daSmrg 590549e21daSmrg case $my_arg in 591549e21daSmrg # Double-quote args containing shell metacharacters to delay 592549e21daSmrg # word splitting and command substitution for a subsequent eval. 593549e21daSmrg # Many Bourne shells cannot handle close brackets correctly 594549e21daSmrg # in scan sets, so we specify it separately. 595549e21daSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 596549e21daSmrg my_arg="\"$my_arg\"" 597549e21daSmrg ;; 598549e21daSmrg esac 599549e21daSmrg 600549e21daSmrg func_quote_for_expand_result="$my_arg" 601ba6a1819Smrg} 602ba6a1819Smrg 603ba6a1819Smrg 604549e21daSmrg# func_show_eval cmd [fail_exp] 605549e21daSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 606549e21daSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 607549e21daSmrg# is given, then evaluate it. 608549e21daSmrgfunc_show_eval () 609ba6a1819Smrg{ 610549e21daSmrg my_cmd="$1" 611549e21daSmrg my_fail_exp="${2-:}" 612ba6a1819Smrg 613549e21daSmrg ${opt_silent-false} || { 614549e21daSmrg func_quote_for_expand "$my_cmd" 615549e21daSmrg eval "func_echo $func_quote_for_expand_result" 616549e21daSmrg } 617549e21daSmrg 618549e21daSmrg if ${opt_dry_run-false}; then :; else 619549e21daSmrg eval "$my_cmd" 620549e21daSmrg my_status=$? 621549e21daSmrg if test "$my_status" -eq 0; then :; else 622549e21daSmrg eval "(exit $my_status); $my_fail_exp" 623549e21daSmrg fi 624ba6a1819Smrg fi 625ba6a1819Smrg} 626ba6a1819Smrg 627549e21daSmrg 628549e21daSmrg# func_show_eval_locale cmd [fail_exp] 629549e21daSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 630549e21daSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 631549e21daSmrg# is given, then evaluate it. Use the saved locale for evaluation. 632549e21daSmrgfunc_show_eval_locale () 633ba6a1819Smrg{ 634549e21daSmrg my_cmd="$1" 635549e21daSmrg my_fail_exp="${2-:}" 636ba6a1819Smrg 637549e21daSmrg ${opt_silent-false} || { 638549e21daSmrg func_quote_for_expand "$my_cmd" 639549e21daSmrg eval "func_echo $func_quote_for_expand_result" 640549e21daSmrg } 641549e21daSmrg 642549e21daSmrg if ${opt_dry_run-false}; then :; else 643549e21daSmrg eval "$lt_user_locale 644549e21daSmrg $my_cmd" 645549e21daSmrg my_status=$? 646549e21daSmrg eval "$lt_safe_locale" 647549e21daSmrg if test "$my_status" -eq 0; then :; else 648549e21daSmrg eval "(exit $my_status); $my_fail_exp" 649ba6a1819Smrg fi 650549e21daSmrg fi 651ba6a1819Smrg} 652ba6a1819Smrg 653ba6a1819Smrg 654549e21daSmrg# func_version 655549e21daSmrg# Echo version message to standard output and exit. 656549e21daSmrgfunc_version () 657549e21daSmrg{ 658549e21daSmrg $SED -n '/(C)/!b go 659549e21daSmrg :more 660549e21daSmrg /\./!{ 661549e21daSmrg N 662549e21daSmrg s/\n# / / 663549e21daSmrg b more 664549e21daSmrg } 665549e21daSmrg :go 666549e21daSmrg /^# '$PROGRAM' (GNU /,/# warranty; / { 667549e21daSmrg s/^# // 668549e21daSmrg s/^# *$// 669549e21daSmrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 670549e21daSmrg p 671549e21daSmrg }' < "$progpath" 672549e21daSmrg exit $? 673549e21daSmrg} 674ba6a1819Smrg 675549e21daSmrg# func_usage 676549e21daSmrg# Echo short help message to standard output and exit. 677549e21daSmrgfunc_usage () 678549e21daSmrg{ 679549e21daSmrg $SED -n '/^# Usage:/,/^# *.*--help/ { 680549e21daSmrg s/^# // 681549e21daSmrg s/^# *$// 682549e21daSmrg s/\$progname/'$progname'/ 683549e21daSmrg p 684549e21daSmrg }' < "$progpath" 685549e21daSmrg echo 686549e21daSmrg $ECHO "run \`$progname --help | more' for full usage" 687549e21daSmrg exit $? 688549e21daSmrg} 689ba6a1819Smrg 690549e21daSmrg# func_help [NOEXIT] 691549e21daSmrg# Echo long help message to standard output and exit, 692549e21daSmrg# unless 'noexit' is passed as argument. 693549e21daSmrgfunc_help () 694549e21daSmrg{ 695549e21daSmrg $SED -n '/^# Usage:/,/# Report bugs to/ { 696549e21daSmrg s/^# // 697549e21daSmrg s/^# *$// 698549e21daSmrg s*\$progname*'$progname'* 699549e21daSmrg s*\$host*'"$host"'* 700549e21daSmrg s*\$SHELL*'"$SHELL"'* 701549e21daSmrg s*\$LTCC*'"$LTCC"'* 702549e21daSmrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 703549e21daSmrg s*\$LD*'"$LD"'* 704549e21daSmrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 705549e21daSmrg s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 706549e21daSmrg s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 707549e21daSmrg p 708549e21daSmrg }' < "$progpath" 709549e21daSmrg ret=$? 710549e21daSmrg if test -z "$1"; then 711549e21daSmrg exit $ret 712549e21daSmrg fi 713549e21daSmrg} 714ba6a1819Smrg 715549e21daSmrg# func_missing_arg argname 716549e21daSmrg# Echo program name prefixed message to standard error and set global 717549e21daSmrg# exit_cmd. 718549e21daSmrgfunc_missing_arg () 719549e21daSmrg{ 720549e21daSmrg func_error "missing argument for $1." 721549e21daSmrg exit_cmd=exit 722549e21daSmrg} 723ba6a1819Smrg 724549e21daSmrgexit_cmd=: 725ba6a1819Smrg 726ba6a1819Smrg 727ba6a1819Smrg 728ba6a1819Smrg 729549e21daSmrg 730549e21daSmrg 731549e21daSmrgmagic="%%%MAGIC variable%%%" 732549e21daSmrgmagic_exe="%%%MAGIC EXE variable%%%" 733549e21daSmrg 734549e21daSmrg# Global variables. 735549e21daSmrg# $mode is unset 736549e21daSmrgnonopt= 737549e21daSmrgexecute_dlfiles= 738549e21daSmrgpreserve_args= 739549e21daSmrglo2o="s/\\.lo\$/.${objext}/" 740549e21daSmrgo2lo="s/\\.${objext}\$/.lo/" 741549e21daSmrgextracted_archives= 742549e21daSmrgextracted_serial=0 743549e21daSmrg 744549e21daSmrgopt_dry_run=false 745549e21daSmrgopt_duplicate_deps=false 746549e21daSmrgopt_silent=false 747549e21daSmrgopt_debug=: 748549e21daSmrg 749549e21daSmrg# If this variable is set in any of the actions, the command in it 750549e21daSmrg# will be execed at the end. This prevents here-documents from being 751549e21daSmrg# left over by shells. 752549e21daSmrgexec_cmd= 753549e21daSmrg 754549e21daSmrg# func_fatal_configuration arg... 755549e21daSmrg# Echo program name prefixed message to standard error, followed by 756549e21daSmrg# a configuration failure hint, and exit. 757549e21daSmrgfunc_fatal_configuration () 758549e21daSmrg{ 759549e21daSmrg func_error ${1+"$@"} 760549e21daSmrg func_error "See the $PACKAGE documentation for more information." 761549e21daSmrg func_fatal_error "Fatal configuration error." 762549e21daSmrg} 763549e21daSmrg 764549e21daSmrg 765549e21daSmrg# func_config 766549e21daSmrg# Display the configuration for all the tags in this script. 767549e21daSmrgfunc_config () 768549e21daSmrg{ 769549e21daSmrg re_begincf='^# ### BEGIN LIBTOOL' 770549e21daSmrg re_endcf='^# ### END LIBTOOL' 771549e21daSmrg 772549e21daSmrg # Default configuration. 773549e21daSmrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 774549e21daSmrg 775ba6a1819Smrg # Now print the configurations for the tags. 776ba6a1819Smrg for tagname in $taglist; do 777549e21daSmrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 778ba6a1819Smrg done 779ba6a1819Smrg 780549e21daSmrg exit $? 781549e21daSmrg} 782ba6a1819Smrg 783549e21daSmrg# func_features 784549e21daSmrg# Display the features supported by this script. 785549e21daSmrgfunc_features () 786549e21daSmrg{ 787549e21daSmrg echo "host: $host" 788ba6a1819Smrg if test "$build_libtool_libs" = yes; then 789549e21daSmrg echo "enable shared libraries" 790ba6a1819Smrg else 791549e21daSmrg echo "disable shared libraries" 792ba6a1819Smrg fi 793ba6a1819Smrg if test "$build_old_libs" = yes; then 794549e21daSmrg echo "enable static libraries" 795ba6a1819Smrg else 796549e21daSmrg echo "disable static libraries" 797ba6a1819Smrg fi 798549e21daSmrg 799ba6a1819Smrg exit $? 800549e21daSmrg} 801549e21daSmrg 802549e21daSmrg# func_enable_tag tagname 803549e21daSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or 804549e21daSmrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 805549e21daSmrg# variable here. 806549e21daSmrgfunc_enable_tag () 807549e21daSmrg{ 808549e21daSmrg # Global variable: 809549e21daSmrg tagname="$1" 810ba6a1819Smrg 811549e21daSmrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 812549e21daSmrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 813549e21daSmrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 814ba6a1819Smrg 815549e21daSmrg # Validate tagname. 816549e21daSmrg case $tagname in 817549e21daSmrg *[!-_A-Za-z0-9,/]*) 818549e21daSmrg func_fatal_error "invalid tag name: $tagname" 819549e21daSmrg ;; 820549e21daSmrg esac 821ba6a1819Smrg 822549e21daSmrg # Don't test for the "default" C tag, as we know it's 823549e21daSmrg # there but not specially marked. 824549e21daSmrg case $tagname in 825549e21daSmrg CC) ;; 826549e21daSmrg *) 827549e21daSmrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 828549e21daSmrg taglist="$taglist $tagname" 829549e21daSmrg 830549e21daSmrg # Evaluate the configuration. Be careful to quote the path 831549e21daSmrg # and the sed script, to avoid splitting on whitespace, but 832549e21daSmrg # also don't use non-portable quotes within backquotes within 833549e21daSmrg # quotes we have to do it in 2 steps: 834549e21daSmrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 835549e21daSmrg eval "$extractedcf" 836549e21daSmrg else 837549e21daSmrg func_error "ignoring unknown tag $tagname" 838549e21daSmrg fi 839549e21daSmrg ;; 840549e21daSmrg esac 841549e21daSmrg} 842ba6a1819Smrg 843549e21daSmrg# Parse options once, thoroughly. This comes as soon as possible in 844549e21daSmrg# the script to make things like `libtool --version' happen quickly. 845549e21daSmrg{ 846ba6a1819Smrg 847549e21daSmrg # Shorthand for --mode=foo, only valid as the first argument 848549e21daSmrg case $1 in 849549e21daSmrg clean|clea|cle|cl) 850549e21daSmrg shift; set dummy --mode clean ${1+"$@"}; shift 851ba6a1819Smrg ;; 852549e21daSmrg compile|compil|compi|comp|com|co|c) 853549e21daSmrg shift; set dummy --mode compile ${1+"$@"}; shift 854ba6a1819Smrg ;; 855549e21daSmrg execute|execut|execu|exec|exe|ex|e) 856549e21daSmrg shift; set dummy --mode execute ${1+"$@"}; shift 857ba6a1819Smrg ;; 858549e21daSmrg finish|finis|fini|fin|fi|f) 859549e21daSmrg shift; set dummy --mode finish ${1+"$@"}; shift 860ba6a1819Smrg ;; 861549e21daSmrg install|instal|insta|inst|ins|in|i) 862549e21daSmrg shift; set dummy --mode install ${1+"$@"}; shift 863549e21daSmrg ;; 864549e21daSmrg link|lin|li|l) 865549e21daSmrg shift; set dummy --mode link ${1+"$@"}; shift 866549e21daSmrg ;; 867549e21daSmrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 868549e21daSmrg shift; set dummy --mode uninstall ${1+"$@"}; shift 869ba6a1819Smrg ;; 870ba6a1819Smrg esac 871ba6a1819Smrg 872549e21daSmrg # Parse non-mode specific arguments: 873549e21daSmrg while test "$#" -gt 0; do 874549e21daSmrg opt="$1" 875549e21daSmrg shift 876ba6a1819Smrg 877549e21daSmrg case $opt in 878549e21daSmrg --config) func_config ;; 879ba6a1819Smrg 880549e21daSmrg --debug) preserve_args="$preserve_args $opt" 881549e21daSmrg func_echo "enabling shell trace mode" 882549e21daSmrg opt_debug='set -x' 883549e21daSmrg $opt_debug 884549e21daSmrg ;; 885ba6a1819Smrg 886549e21daSmrg -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break 887549e21daSmrg execute_dlfiles="$execute_dlfiles $1" 888549e21daSmrg shift 889549e21daSmrg ;; 890ba6a1819Smrg 891549e21daSmrg --dry-run | -n) opt_dry_run=: ;; 892549e21daSmrg --features) func_features ;; 893549e21daSmrg --finish) mode="finish" ;; 894549e21daSmrg 895549e21daSmrg --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break 896549e21daSmrg case $1 in 897549e21daSmrg # Valid mode arguments: 898549e21daSmrg clean) ;; 899549e21daSmrg compile) ;; 900549e21daSmrg execute) ;; 901549e21daSmrg finish) ;; 902549e21daSmrg install) ;; 903549e21daSmrg link) ;; 904549e21daSmrg relink) ;; 905549e21daSmrg uninstall) ;; 906549e21daSmrg 907549e21daSmrg # Catch anything else as an error 908549e21daSmrg *) func_error "invalid argument for $opt" 909549e21daSmrg exit_cmd=exit 910549e21daSmrg break 911549e21daSmrg ;; 912549e21daSmrg esac 913549e21daSmrg 914549e21daSmrg mode="$1" 915549e21daSmrg shift 916549e21daSmrg ;; 917549e21daSmrg 918549e21daSmrg --preserve-dup-deps) 919549e21daSmrg opt_duplicate_deps=: ;; 920549e21daSmrg 921549e21daSmrg --quiet|--silent) preserve_args="$preserve_args $opt" 922549e21daSmrg opt_silent=: 923549e21daSmrg opt_verbose=false 924549e21daSmrg ;; 925549e21daSmrg 926549e21daSmrg --no-quiet|--no-silent) 927549e21daSmrg preserve_args="$preserve_args $opt" 928549e21daSmrg opt_silent=false 929549e21daSmrg ;; 930549e21daSmrg 931549e21daSmrg --verbose| -v) preserve_args="$preserve_args $opt" 932549e21daSmrg opt_silent=false 933549e21daSmrg opt_verbose=: 934549e21daSmrg ;; 935549e21daSmrg 936549e21daSmrg --no-verbose) preserve_args="$preserve_args $opt" 937549e21daSmrg opt_verbose=false 938549e21daSmrg ;; 939549e21daSmrg 940549e21daSmrg --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break 941549e21daSmrg preserve_args="$preserve_args $opt $1" 942549e21daSmrg func_enable_tag "$1" # tagname is set here 943549e21daSmrg shift 944549e21daSmrg ;; 945549e21daSmrg 946549e21daSmrg # Separate optargs to long options: 947549e21daSmrg -dlopen=*|--mode=*|--tag=*) 948549e21daSmrg func_opt_split "$opt" 949549e21daSmrg set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} 950549e21daSmrg shift 951549e21daSmrg ;; 952549e21daSmrg 953549e21daSmrg -\?|-h) func_usage ;; 954549e21daSmrg --help) opt_help=: ;; 955549e21daSmrg --help-all) opt_help=': help-all' ;; 956549e21daSmrg --version) func_version ;; 957549e21daSmrg 958549e21daSmrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 959549e21daSmrg 960549e21daSmrg *) nonopt="$opt" 961549e21daSmrg break 962549e21daSmrg ;; 963549e21daSmrg esac 964549e21daSmrg done 965549e21daSmrg 966549e21daSmrg 967549e21daSmrg case $host in 968549e21daSmrg *cygwin* | *mingw* | *pw32* | *cegcc*) 969549e21daSmrg # don't eliminate duplications in $postdeps and $predeps 970549e21daSmrg opt_duplicate_compiler_generated_deps=: 971ba6a1819Smrg ;; 972ba6a1819Smrg *) 973549e21daSmrg opt_duplicate_compiler_generated_deps=$opt_duplicate_deps 974549e21daSmrg ;; 975549e21daSmrg esac 976ba6a1819Smrg 977549e21daSmrg # Having warned about all mis-specified options, bail out if 978549e21daSmrg # anything was wrong. 979549e21daSmrg $exit_cmd $EXIT_FAILURE 980549e21daSmrg} 981549e21daSmrg 982549e21daSmrg# func_check_version_match 983549e21daSmrg# Ensure that we are using m4 macros, and libtool script from the same 984549e21daSmrg# release of libtool. 985549e21daSmrgfunc_check_version_match () 986549e21daSmrg{ 987549e21daSmrg if test "$package_revision" != "$macro_revision"; then 988549e21daSmrg if test "$VERSION" != "$macro_version"; then 989549e21daSmrg if test -z "$macro_version"; then 990549e21daSmrg cat >&2 <<_LT_EOF 991549e21daSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 992549e21daSmrg$progname: definition of this LT_INIT comes from an older release. 993549e21daSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 994549e21daSmrg$progname: and run autoconf again. 995549e21daSmrg_LT_EOF 996549e21daSmrg else 997549e21daSmrg cat >&2 <<_LT_EOF 998549e21daSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 999549e21daSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 1000549e21daSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 1001549e21daSmrg$progname: and run autoconf again. 1002549e21daSmrg_LT_EOF 1003ba6a1819Smrg fi 1004549e21daSmrg else 1005549e21daSmrg cat >&2 <<_LT_EOF 1006549e21daSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 1007549e21daSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 1008549e21daSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 1009549e21daSmrg$progname: of $PACKAGE $VERSION and run autoconf again. 1010549e21daSmrg_LT_EOF 1011549e21daSmrg fi 1012549e21daSmrg 1013549e21daSmrg exit $EXIT_MISMATCH 1014549e21daSmrg fi 1015549e21daSmrg} 1016549e21daSmrg 1017549e21daSmrg 1018549e21daSmrg## ----------- ## 1019549e21daSmrg## Main. ## 1020549e21daSmrg## ----------- ## 1021549e21daSmrg 1022549e21daSmrg$opt_help || { 1023549e21daSmrg # Sanity checks first: 1024549e21daSmrg func_check_version_match 1025549e21daSmrg 1026549e21daSmrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 1027549e21daSmrg func_fatal_configuration "not configured to build any kind of library" 1028ba6a1819Smrg fi 1029ba6a1819Smrg 1030549e21daSmrg test -z "$mode" && func_fatal_error "error: you must specify a MODE." 1031549e21daSmrg 1032549e21daSmrg 1033549e21daSmrg # Darwin sucks 1034549e21daSmrg eval std_shrext=\"$shrext_cmds\" 1035549e21daSmrg 1036549e21daSmrg 1037ba6a1819Smrg # Only execute mode is allowed to have -dlopen flags. 1038ba6a1819Smrg if test -n "$execute_dlfiles" && test "$mode" != execute; then 1039549e21daSmrg func_error "unrecognized option \`-dlopen'" 1040549e21daSmrg $ECHO "$help" 1>&2 1041ba6a1819Smrg exit $EXIT_FAILURE 1042ba6a1819Smrg fi 1043ba6a1819Smrg 1044ba6a1819Smrg # Change the help message to a mode-specific one. 1045ba6a1819Smrg generic_help="$help" 1046549e21daSmrg help="Try \`$progname --help --mode=$mode' for more information." 1047549e21daSmrg} 1048ba6a1819Smrg 1049ba6a1819Smrg 1050549e21daSmrg# func_lalib_p file 1051549e21daSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1052549e21daSmrg# This function is only a basic sanity check; it will hardly flush out 1053549e21daSmrg# determined imposters. 1054549e21daSmrgfunc_lalib_p () 1055549e21daSmrg{ 1056549e21daSmrg test -f "$1" && 1057549e21daSmrg $SED -e 4q "$1" 2>/dev/null \ 1058549e21daSmrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1059549e21daSmrg} 1060ba6a1819Smrg 1061549e21daSmrg# func_lalib_unsafe_p file 1062549e21daSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1063549e21daSmrg# This function implements the same check as func_lalib_p without 1064549e21daSmrg# resorting to external programs. To this end, it redirects stdin and 1065549e21daSmrg# closes it afterwards, without saving the original file descriptor. 1066549e21daSmrg# As a safety measure, use it only where a negative result would be 1067549e21daSmrg# fatal anyway. Works if `file' does not exist. 1068549e21daSmrgfunc_lalib_unsafe_p () 1069549e21daSmrg{ 1070549e21daSmrg lalib_p=no 1071549e21daSmrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1072549e21daSmrg for lalib_p_l in 1 2 3 4 1073549e21daSmrg do 1074549e21daSmrg read lalib_p_line 1075549e21daSmrg case "$lalib_p_line" in 1076549e21daSmrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1077549e21daSmrg esac 1078549e21daSmrg done 1079549e21daSmrg exec 0<&5 5<&- 1080549e21daSmrg fi 1081549e21daSmrg test "$lalib_p" = yes 1082549e21daSmrg} 1083ba6a1819Smrg 1084549e21daSmrg# func_ltwrapper_script_p file 1085549e21daSmrg# True iff FILE is a libtool wrapper script 1086549e21daSmrg# This function is only a basic sanity check; it will hardly flush out 1087549e21daSmrg# determined imposters. 1088549e21daSmrgfunc_ltwrapper_script_p () 1089549e21daSmrg{ 1090549e21daSmrg func_lalib_p "$1" 1091549e21daSmrg} 1092ba6a1819Smrg 1093549e21daSmrg# func_ltwrapper_executable_p file 1094549e21daSmrg# True iff FILE is a libtool wrapper executable 1095549e21daSmrg# This function is only a basic sanity check; it will hardly flush out 1096549e21daSmrg# determined imposters. 1097549e21daSmrgfunc_ltwrapper_executable_p () 1098549e21daSmrg{ 1099549e21daSmrg func_ltwrapper_exec_suffix= 1100549e21daSmrg case $1 in 1101549e21daSmrg *.exe) ;; 1102549e21daSmrg *) func_ltwrapper_exec_suffix=.exe ;; 1103549e21daSmrg esac 1104549e21daSmrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1105549e21daSmrg} 1106ba6a1819Smrg 1107549e21daSmrg# func_ltwrapper_scriptname file 1108549e21daSmrg# Assumes file is an ltwrapper_executable 1109549e21daSmrg# uses $file to determine the appropriate filename for a 1110549e21daSmrg# temporary ltwrapper_script. 1111549e21daSmrgfunc_ltwrapper_scriptname () 1112549e21daSmrg{ 1113549e21daSmrg func_ltwrapper_scriptname_result="" 1114549e21daSmrg if func_ltwrapper_executable_p "$1"; then 1115549e21daSmrg func_dirname_and_basename "$1" "" "." 1116549e21daSmrg func_stripname '' '.exe' "$func_basename_result" 1117549e21daSmrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1118549e21daSmrg fi 1119549e21daSmrg} 1120ba6a1819Smrg 1121549e21daSmrg# func_ltwrapper_p file 1122549e21daSmrg# True iff FILE is a libtool wrapper script or wrapper executable 1123549e21daSmrg# This function is only a basic sanity check; it will hardly flush out 1124549e21daSmrg# determined imposters. 1125549e21daSmrgfunc_ltwrapper_p () 1126549e21daSmrg{ 1127549e21daSmrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1128549e21daSmrg} 1129ba6a1819Smrg 1130ba6a1819Smrg 1131549e21daSmrg# func_execute_cmds commands fail_cmd 1132549e21daSmrg# Execute tilde-delimited COMMANDS. 1133549e21daSmrg# If FAIL_CMD is given, eval that upon failure. 1134549e21daSmrg# FAIL_CMD may read-access the current command in variable CMD! 1135549e21daSmrgfunc_execute_cmds () 1136549e21daSmrg{ 1137549e21daSmrg $opt_debug 1138549e21daSmrg save_ifs=$IFS; IFS='~' 1139549e21daSmrg for cmd in $1; do 1140549e21daSmrg IFS=$save_ifs 1141549e21daSmrg eval cmd=\"$cmd\" 1142549e21daSmrg func_show_eval "$cmd" "${2-:}" 1143549e21daSmrg done 1144549e21daSmrg IFS=$save_ifs 1145549e21daSmrg} 1146ba6a1819Smrg 1147ba6a1819Smrg 1148549e21daSmrg# func_source file 1149549e21daSmrg# Source FILE, adding directory component if necessary. 1150549e21daSmrg# Note that it is not necessary on cygwin/mingw to append a dot to 1151549e21daSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1152549e21daSmrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 1153549e21daSmrg# `FILE.' does not work on cygwin managed mounts. 1154549e21daSmrgfunc_source () 1155549e21daSmrg{ 1156549e21daSmrg $opt_debug 1157549e21daSmrg case $1 in 1158549e21daSmrg */* | *\\*) . "$1" ;; 1159549e21daSmrg *) . "./$1" ;; 1160549e21daSmrg esac 1161549e21daSmrg} 1162549e21daSmrg 1163549e21daSmrg 1164549e21daSmrg# func_infer_tag arg 1165549e21daSmrg# Infer tagged configuration to use if any are available and 1166549e21daSmrg# if one wasn't chosen via the "--tag" command line option. 1167549e21daSmrg# Only attempt this if the compiler in the base compile 1168549e21daSmrg# command doesn't match the default compiler. 1169549e21daSmrg# arg is usually of the form 'gcc ...' 1170549e21daSmrgfunc_infer_tag () 1171549e21daSmrg{ 1172549e21daSmrg $opt_debug 1173549e21daSmrg if test -n "$available_tags" && test -z "$tagname"; then 1174549e21daSmrg CC_quoted= 1175549e21daSmrg for arg in $CC; do 1176549e21daSmrg func_quote_for_eval "$arg" 1177549e21daSmrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 1178549e21daSmrg done 1179549e21daSmrg CC_expanded=`func_echo_all $CC` 1180549e21daSmrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1181549e21daSmrg case $@ in 1182549e21daSmrg # Blanks in the command may have been stripped by the calling shell, 1183549e21daSmrg # but not from the CC environment variable when configure was run. 1184549e21daSmrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1185549e21daSmrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1186549e21daSmrg # Blanks at the start of $base_compile will cause this to fail 1187549e21daSmrg # if we don't check for them as well. 1188549e21daSmrg *) 1189549e21daSmrg for z in $available_tags; do 1190549e21daSmrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1191549e21daSmrg # Evaluate the configuration. 1192549e21daSmrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1193549e21daSmrg CC_quoted= 1194549e21daSmrg for arg in $CC; do 1195549e21daSmrg # Double-quote args containing other shell metacharacters. 1196549e21daSmrg func_quote_for_eval "$arg" 1197549e21daSmrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 1198549e21daSmrg done 1199549e21daSmrg CC_expanded=`func_echo_all $CC` 1200549e21daSmrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1201549e21daSmrg case "$@ " in 1202549e21daSmrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1203549e21daSmrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1204549e21daSmrg # The compiler in the base compile command matches 1205549e21daSmrg # the one in the tagged configuration. 1206549e21daSmrg # Assume this is the tagged configuration we want. 1207549e21daSmrg tagname=$z 1208549e21daSmrg break 1209549e21daSmrg ;; 1210549e21daSmrg esac 1211549e21daSmrg fi 1212549e21daSmrg done 1213549e21daSmrg # If $tagname still isn't set, then no tagged configuration 1214549e21daSmrg # was found and let the user know that the "--tag" command 1215549e21daSmrg # line option must be used. 1216549e21daSmrg if test -z "$tagname"; then 1217549e21daSmrg func_echo "unable to infer tagged configuration" 1218549e21daSmrg func_fatal_error "specify a tag with \`--tag'" 1219549e21daSmrg# else 1220549e21daSmrg# func_verbose "using $tagname tagged configuration" 1221549e21daSmrg fi 1222549e21daSmrg ;; 1223549e21daSmrg esac 1224549e21daSmrg fi 1225549e21daSmrg} 1226549e21daSmrg 1227549e21daSmrg 1228549e21daSmrg 1229549e21daSmrg# func_write_libtool_object output_name pic_name nonpic_name 1230549e21daSmrg# Create a libtool object file (analogous to a ".la" file), 1231549e21daSmrg# but don't create it if we're doing a dry run. 1232549e21daSmrgfunc_write_libtool_object () 1233549e21daSmrg{ 1234549e21daSmrg write_libobj=${1} 1235549e21daSmrg if test "$build_libtool_libs" = yes; then 1236549e21daSmrg write_lobj=\'${2}\' 1237549e21daSmrg else 1238549e21daSmrg write_lobj=none 1239549e21daSmrg fi 1240549e21daSmrg 1241549e21daSmrg if test "$build_old_libs" = yes; then 1242549e21daSmrg write_oldobj=\'${3}\' 1243549e21daSmrg else 1244549e21daSmrg write_oldobj=none 1245549e21daSmrg fi 1246549e21daSmrg 1247549e21daSmrg $opt_dry_run || { 1248549e21daSmrg cat >${write_libobj}T <<EOF 1249549e21daSmrg# $write_libobj - a libtool object file 1250549e21daSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1251549e21daSmrg# 1252549e21daSmrg# Please DO NOT delete this file! 1253549e21daSmrg# It is necessary for linking the library. 1254549e21daSmrg 1255549e21daSmrg# Name of the PIC object. 1256549e21daSmrgpic_object=$write_lobj 1257549e21daSmrg 1258549e21daSmrg# Name of the non-PIC object 1259549e21daSmrgnon_pic_object=$write_oldobj 1260549e21daSmrg 1261549e21daSmrgEOF 1262549e21daSmrg $MV "${write_libobj}T" "${write_libobj}" 1263549e21daSmrg } 1264549e21daSmrg} 1265549e21daSmrg 1266549e21daSmrg# func_mode_compile arg... 1267549e21daSmrgfunc_mode_compile () 1268549e21daSmrg{ 1269549e21daSmrg $opt_debug 1270549e21daSmrg # Get the compilation command and the source file. 1271549e21daSmrg base_compile= 1272549e21daSmrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1273549e21daSmrg suppress_opt=yes 1274549e21daSmrg suppress_output= 1275549e21daSmrg arg_mode=normal 1276549e21daSmrg libobj= 1277549e21daSmrg later= 1278549e21daSmrg pie_flag= 1279549e21daSmrg 1280549e21daSmrg for arg 1281549e21daSmrg do 1282549e21daSmrg case $arg_mode in 1283549e21daSmrg arg ) 1284549e21daSmrg # do not "continue". Instead, add this to base_compile 1285549e21daSmrg lastarg="$arg" 1286549e21daSmrg arg_mode=normal 1287549e21daSmrg ;; 1288549e21daSmrg 1289549e21daSmrg target ) 1290549e21daSmrg libobj="$arg" 1291549e21daSmrg arg_mode=normal 1292549e21daSmrg continue 1293549e21daSmrg ;; 1294549e21daSmrg 1295549e21daSmrg normal ) 1296549e21daSmrg # Accept any command-line options. 1297549e21daSmrg case $arg in 1298549e21daSmrg -o) 1299549e21daSmrg test -n "$libobj" && \ 1300549e21daSmrg func_fatal_error "you cannot specify \`-o' more than once" 1301549e21daSmrg arg_mode=target 1302549e21daSmrg continue 1303549e21daSmrg ;; 1304549e21daSmrg 1305549e21daSmrg -pie | -fpie | -fPIE) 1306549e21daSmrg pie_flag="$pie_flag $arg" 1307549e21daSmrg continue 1308549e21daSmrg ;; 1309549e21daSmrg 1310549e21daSmrg -shared | -static | -prefer-pic | -prefer-non-pic) 1311549e21daSmrg later="$later $arg" 1312549e21daSmrg continue 1313549e21daSmrg ;; 1314549e21daSmrg 1315549e21daSmrg -no-suppress) 1316549e21daSmrg suppress_opt=no 1317549e21daSmrg continue 1318549e21daSmrg ;; 1319549e21daSmrg 1320549e21daSmrg -Xcompiler) 1321549e21daSmrg arg_mode=arg # the next one goes into the "base_compile" arg list 1322549e21daSmrg continue # The current "srcfile" will either be retained or 1323549e21daSmrg ;; # replaced later. I would guess that would be a bug. 1324549e21daSmrg 1325549e21daSmrg -Wc,*) 1326549e21daSmrg func_stripname '-Wc,' '' "$arg" 1327549e21daSmrg args=$func_stripname_result 1328549e21daSmrg lastarg= 1329549e21daSmrg save_ifs="$IFS"; IFS=',' 1330549e21daSmrg for arg in $args; do 1331549e21daSmrg IFS="$save_ifs" 1332549e21daSmrg func_quote_for_eval "$arg" 1333549e21daSmrg lastarg="$lastarg $func_quote_for_eval_result" 1334549e21daSmrg done 1335549e21daSmrg IFS="$save_ifs" 1336549e21daSmrg func_stripname ' ' '' "$lastarg" 1337549e21daSmrg lastarg=$func_stripname_result 1338549e21daSmrg 1339549e21daSmrg # Add the arguments to base_compile. 1340549e21daSmrg base_compile="$base_compile $lastarg" 1341549e21daSmrg continue 1342549e21daSmrg ;; 1343549e21daSmrg 1344549e21daSmrg *) 1345549e21daSmrg # Accept the current argument as the source file. 1346549e21daSmrg # The previous "srcfile" becomes the current argument. 1347ba6a1819Smrg # 1348ba6a1819Smrg lastarg="$srcfile" 1349ba6a1819Smrg srcfile="$arg" 1350ba6a1819Smrg ;; 1351ba6a1819Smrg esac # case $arg 1352ba6a1819Smrg ;; 1353ba6a1819Smrg esac # case $arg_mode 1354ba6a1819Smrg 1355ba6a1819Smrg # Aesthetically quote the previous argument. 1356549e21daSmrg func_quote_for_eval "$lastarg" 1357549e21daSmrg base_compile="$base_compile $func_quote_for_eval_result" 1358ba6a1819Smrg done # for arg 1359ba6a1819Smrg 1360ba6a1819Smrg case $arg_mode in 1361ba6a1819Smrg arg) 1362549e21daSmrg func_fatal_error "you must specify an argument for -Xcompile" 1363ba6a1819Smrg ;; 1364ba6a1819Smrg target) 1365549e21daSmrg func_fatal_error "you must specify a target with \`-o'" 1366ba6a1819Smrg ;; 1367ba6a1819Smrg *) 1368ba6a1819Smrg # Get the name of the library object. 1369549e21daSmrg test -z "$libobj" && { 1370549e21daSmrg func_basename "$srcfile" 1371549e21daSmrg libobj="$func_basename_result" 1372549e21daSmrg } 1373ba6a1819Smrg ;; 1374ba6a1819Smrg esac 1375ba6a1819Smrg 1376ba6a1819Smrg # Recognize several different file suffixes. 1377ba6a1819Smrg # If the user specifies -o file.o, it is replaced with file.lo 1378ba6a1819Smrg case $libobj in 1379549e21daSmrg *.[cCFSifmso] | \ 1380549e21daSmrg *.ada | *.adb | *.ads | *.asm | \ 1381549e21daSmrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 1382549e21daSmrg *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) 1383549e21daSmrg func_xform "$libobj" 1384549e21daSmrg libobj=$func_xform_result 1385549e21daSmrg ;; 1386ba6a1819Smrg esac 1387ba6a1819Smrg 1388ba6a1819Smrg case $libobj in 1389549e21daSmrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 1390ba6a1819Smrg *) 1391549e21daSmrg func_fatal_error "cannot determine name of library object from \`$libobj'" 1392ba6a1819Smrg ;; 1393ba6a1819Smrg esac 1394ba6a1819Smrg 1395ba6a1819Smrg func_infer_tag $base_compile 1396ba6a1819Smrg 1397ba6a1819Smrg for arg in $later; do 1398ba6a1819Smrg case $arg in 1399549e21daSmrg -shared) 1400549e21daSmrg test "$build_libtool_libs" != yes && \ 1401549e21daSmrg func_fatal_configuration "can not build a shared library" 1402549e21daSmrg build_old_libs=no 1403549e21daSmrg continue 1404549e21daSmrg ;; 1405549e21daSmrg 1406ba6a1819Smrg -static) 1407549e21daSmrg build_libtool_libs=no 1408ba6a1819Smrg build_old_libs=yes 1409ba6a1819Smrg continue 1410ba6a1819Smrg ;; 1411ba6a1819Smrg 1412ba6a1819Smrg -prefer-pic) 1413ba6a1819Smrg pic_mode=yes 1414ba6a1819Smrg continue 1415ba6a1819Smrg ;; 1416ba6a1819Smrg 1417ba6a1819Smrg -prefer-non-pic) 1418ba6a1819Smrg pic_mode=no 1419ba6a1819Smrg continue 1420ba6a1819Smrg ;; 1421ba6a1819Smrg esac 1422ba6a1819Smrg done 1423ba6a1819Smrg 1424549e21daSmrg func_quote_for_eval "$libobj" 1425549e21daSmrg test "X$libobj" != "X$func_quote_for_eval_result" \ 1426549e21daSmrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 1427549e21daSmrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 1428549e21daSmrg func_dirname_and_basename "$obj" "/" "" 1429549e21daSmrg objname="$func_basename_result" 1430549e21daSmrg xdir="$func_dirname_result" 1431ba6a1819Smrg lobj=${xdir}$objdir/$objname 1432ba6a1819Smrg 1433549e21daSmrg test -z "$base_compile" && \ 1434549e21daSmrg func_fatal_help "you must specify a compilation command" 1435ba6a1819Smrg 1436ba6a1819Smrg # Delete any leftover library objects. 1437ba6a1819Smrg if test "$build_old_libs" = yes; then 1438ba6a1819Smrg removelist="$obj $lobj $libobj ${libobj}T" 1439ba6a1819Smrg else 1440ba6a1819Smrg removelist="$lobj $libobj ${libobj}T" 1441ba6a1819Smrg fi 1442ba6a1819Smrg 1443ba6a1819Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 1444ba6a1819Smrg case $host_os in 1445549e21daSmrg cygwin* | mingw* | pw32* | os2* | cegcc*) 1446ba6a1819Smrg pic_mode=default 1447ba6a1819Smrg ;; 1448ba6a1819Smrg esac 1449ba6a1819Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 1450ba6a1819Smrg # non-PIC code in shared libraries is not supported 1451ba6a1819Smrg pic_mode=default 1452ba6a1819Smrg fi 1453ba6a1819Smrg 1454ba6a1819Smrg # Calculate the filename of the output object if compiler does 1455ba6a1819Smrg # not support -o with -c 1456ba6a1819Smrg if test "$compiler_c_o" = no; then 1457549e21daSmrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 1458ba6a1819Smrg lockfile="$output_obj.lock" 1459ba6a1819Smrg else 1460ba6a1819Smrg output_obj= 1461ba6a1819Smrg need_locks=no 1462ba6a1819Smrg lockfile= 1463ba6a1819Smrg fi 1464ba6a1819Smrg 1465ba6a1819Smrg # Lock this critical section if it is needed 1466ba6a1819Smrg # We use this script file to make the link, it avoids creating a new file 1467ba6a1819Smrg if test "$need_locks" = yes; then 1468549e21daSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 1469549e21daSmrg func_echo "Waiting for $lockfile to be removed" 1470ba6a1819Smrg sleep 2 1471ba6a1819Smrg done 1472ba6a1819Smrg elif test "$need_locks" = warn; then 1473ba6a1819Smrg if test -f "$lockfile"; then 1474549e21daSmrg $ECHO "\ 1475ba6a1819Smrg*** ERROR, $lockfile exists and contains: 1476ba6a1819Smrg`cat $lockfile 2>/dev/null` 1477ba6a1819Smrg 1478ba6a1819SmrgThis indicates that another process is trying to use the same 1479ba6a1819Smrgtemporary object file, and libtool could not work around it because 1480ba6a1819Smrgyour compiler does not support \`-c' and \`-o' together. If you 1481ba6a1819Smrgrepeat this compilation, it may succeed, by chance, but you had better 1482ba6a1819Smrgavoid parallel builds (make -j) in this platform, or get a better 1483ba6a1819Smrgcompiler." 1484ba6a1819Smrg 1485549e21daSmrg $opt_dry_run || $RM $removelist 1486ba6a1819Smrg exit $EXIT_FAILURE 1487ba6a1819Smrg fi 1488549e21daSmrg removelist="$removelist $output_obj" 1489549e21daSmrg $ECHO "$srcfile" > "$lockfile" 1490ba6a1819Smrg fi 1491ba6a1819Smrg 1492549e21daSmrg $opt_dry_run || $RM $removelist 1493549e21daSmrg removelist="$removelist $lockfile" 1494549e21daSmrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 1495549e21daSmrg 1496ba6a1819Smrg if test -n "$fix_srcfile_path"; then 1497ba6a1819Smrg eval srcfile=\"$fix_srcfile_path\" 1498ba6a1819Smrg fi 1499549e21daSmrg func_quote_for_eval "$srcfile" 1500549e21daSmrg qsrcfile=$func_quote_for_eval_result 1501ba6a1819Smrg 1502ba6a1819Smrg # Only build a PIC object if we are building libtool libraries. 1503ba6a1819Smrg if test "$build_libtool_libs" = yes; then 1504ba6a1819Smrg # Without this assignment, base_compile gets emptied. 1505ba6a1819Smrg fbsd_hideous_sh_bug=$base_compile 1506ba6a1819Smrg 1507ba6a1819Smrg if test "$pic_mode" != no; then 1508ba6a1819Smrg command="$base_compile $qsrcfile $pic_flag" 1509ba6a1819Smrg else 1510ba6a1819Smrg # Don't build PIC code 1511ba6a1819Smrg command="$base_compile $qsrcfile" 1512ba6a1819Smrg fi 1513ba6a1819Smrg 1514549e21daSmrg func_mkdir_p "$xdir$objdir" 1515ba6a1819Smrg 1516ba6a1819Smrg if test -z "$output_obj"; then 1517ba6a1819Smrg # Place PIC objects in $objdir 1518ba6a1819Smrg command="$command -o $lobj" 1519ba6a1819Smrg fi 1520ba6a1819Smrg 1521549e21daSmrg func_show_eval_locale "$command" \ 1522549e21daSmrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 1523ba6a1819Smrg 1524ba6a1819Smrg if test "$need_locks" = warn && 1525ba6a1819Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 1526549e21daSmrg $ECHO "\ 1527ba6a1819Smrg*** ERROR, $lockfile contains: 1528ba6a1819Smrg`cat $lockfile 2>/dev/null` 1529ba6a1819Smrg 1530ba6a1819Smrgbut it should contain: 1531ba6a1819Smrg$srcfile 1532ba6a1819Smrg 1533ba6a1819SmrgThis indicates that another process is trying to use the same 1534ba6a1819Smrgtemporary object file, and libtool could not work around it because 1535ba6a1819Smrgyour compiler does not support \`-c' and \`-o' together. If you 1536ba6a1819Smrgrepeat this compilation, it may succeed, by chance, but you had better 1537ba6a1819Smrgavoid parallel builds (make -j) in this platform, or get a better 1538ba6a1819Smrgcompiler." 1539ba6a1819Smrg 1540549e21daSmrg $opt_dry_run || $RM $removelist 1541ba6a1819Smrg exit $EXIT_FAILURE 1542ba6a1819Smrg fi 1543ba6a1819Smrg 1544ba6a1819Smrg # Just move the object if needed, then go on to compile the next one 1545ba6a1819Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 1546549e21daSmrg func_show_eval '$MV "$output_obj" "$lobj"' \ 1547549e21daSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 1548ba6a1819Smrg fi 1549ba6a1819Smrg 1550ba6a1819Smrg # Allow error messages only from the first compilation. 1551ba6a1819Smrg if test "$suppress_opt" = yes; then 1552549e21daSmrg suppress_output=' >/dev/null 2>&1' 1553ba6a1819Smrg fi 1554ba6a1819Smrg fi 1555ba6a1819Smrg 1556ba6a1819Smrg # Only build a position-dependent object if we build old libraries. 1557ba6a1819Smrg if test "$build_old_libs" = yes; then 1558ba6a1819Smrg if test "$pic_mode" != yes; then 1559ba6a1819Smrg # Don't build PIC code 1560549e21daSmrg command="$base_compile $qsrcfile$pie_flag" 1561ba6a1819Smrg else 1562ba6a1819Smrg command="$base_compile $qsrcfile $pic_flag" 1563ba6a1819Smrg fi 1564ba6a1819Smrg if test "$compiler_c_o" = yes; then 1565ba6a1819Smrg command="$command -o $obj" 1566ba6a1819Smrg fi 1567ba6a1819Smrg 1568ba6a1819Smrg # Suppress compiler output if we already did a PIC compilation. 1569ba6a1819Smrg command="$command$suppress_output" 1570549e21daSmrg func_show_eval_locale "$command" \ 1571549e21daSmrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1572ba6a1819Smrg 1573ba6a1819Smrg if test "$need_locks" = warn && 1574ba6a1819Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 1575549e21daSmrg $ECHO "\ 1576ba6a1819Smrg*** ERROR, $lockfile contains: 1577ba6a1819Smrg`cat $lockfile 2>/dev/null` 1578ba6a1819Smrg 1579ba6a1819Smrgbut it should contain: 1580ba6a1819Smrg$srcfile 1581ba6a1819Smrg 1582ba6a1819SmrgThis indicates that another process is trying to use the same 1583ba6a1819Smrgtemporary object file, and libtool could not work around it because 1584ba6a1819Smrgyour compiler does not support \`-c' and \`-o' together. If you 1585ba6a1819Smrgrepeat this compilation, it may succeed, by chance, but you had better 1586ba6a1819Smrgavoid parallel builds (make -j) in this platform, or get a better 1587ba6a1819Smrgcompiler." 1588ba6a1819Smrg 1589549e21daSmrg $opt_dry_run || $RM $removelist 1590ba6a1819Smrg exit $EXIT_FAILURE 1591ba6a1819Smrg fi 1592ba6a1819Smrg 1593ba6a1819Smrg # Just move the object if needed 1594ba6a1819Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 1595549e21daSmrg func_show_eval '$MV "$output_obj" "$obj"' \ 1596549e21daSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 1597ba6a1819Smrg fi 1598549e21daSmrg fi 1599ba6a1819Smrg 1600549e21daSmrg $opt_dry_run || { 1601549e21daSmrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 1602ba6a1819Smrg 1603549e21daSmrg # Unlock the critical section if it was locked 1604549e21daSmrg if test "$need_locks" != no; then 1605549e21daSmrg removelist=$lockfile 1606549e21daSmrg $RM "$lockfile" 1607549e21daSmrg fi 1608549e21daSmrg } 1609ba6a1819Smrg 1610549e21daSmrg exit $EXIT_SUCCESS 1611549e21daSmrg} 1612ba6a1819Smrg 1613549e21daSmrg$opt_help || { 1614549e21daSmrg test "$mode" = compile && func_mode_compile ${1+"$@"} 1615549e21daSmrg} 1616ba6a1819Smrg 1617549e21daSmrgfunc_mode_help () 1618549e21daSmrg{ 1619549e21daSmrg # We need to display help for each of the modes. 1620549e21daSmrg case $mode in 1621549e21daSmrg "") 1622549e21daSmrg # Generic help is extracted from the usage comments 1623549e21daSmrg # at the start of this file. 1624549e21daSmrg func_help 1625549e21daSmrg ;; 1626ba6a1819Smrg 1627549e21daSmrg clean) 1628549e21daSmrg $ECHO \ 1629549e21daSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 1630ba6a1819Smrg 1631549e21daSmrgRemove files from the build directory. 1632ba6a1819Smrg 1633549e21daSmrgRM is the name of the program to use to delete files associated with each FILE 1634549e21daSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 1635549e21daSmrgto RM. 1636ba6a1819Smrg 1637549e21daSmrgIf FILE is a libtool library, object or program, all the files associated 1638549e21daSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 1639549e21daSmrg ;; 1640ba6a1819Smrg 1641549e21daSmrg compile) 1642549e21daSmrg $ECHO \ 1643549e21daSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 1644ba6a1819Smrg 1645549e21daSmrgCompile a source file into a libtool library object. 1646ba6a1819Smrg 1647549e21daSmrgThis mode accepts the following additional options: 1648ba6a1819Smrg 1649549e21daSmrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 1650549e21daSmrg -no-suppress do not suppress compiler output for multiple passes 1651549e21daSmrg -prefer-pic try to build PIC objects only 1652549e21daSmrg -prefer-non-pic try to build non-PIC objects only 1653549e21daSmrg -shared do not build a \`.o' file suitable for static linking 1654549e21daSmrg -static only build a \`.o' file suitable for static linking 1655549e21daSmrg -Wc,FLAG pass FLAG directly to the compiler 1656ba6a1819Smrg 1657549e21daSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 1658549e21daSmrgfrom the given SOURCEFILE. 1659ba6a1819Smrg 1660549e21daSmrgThe output file name is determined by removing the directory component from 1661549e21daSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 1662549e21daSmrglibrary object suffix, \`.lo'." 1663549e21daSmrg ;; 1664ba6a1819Smrg 1665549e21daSmrg execute) 1666549e21daSmrg $ECHO \ 1667549e21daSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 1668ba6a1819Smrg 1669549e21daSmrgAutomatically set library path, then run a program. 1670ba6a1819Smrg 1671549e21daSmrgThis mode accepts the following additional options: 1672ba6a1819Smrg 1673549e21daSmrg -dlopen FILE add the directory containing FILE to the library path 1674ba6a1819Smrg 1675549e21daSmrgThis mode sets the library path environment variable according to \`-dlopen' 1676549e21daSmrgflags. 1677ba6a1819Smrg 1678549e21daSmrgIf any of the ARGS are libtool executable wrappers, then they are translated 1679549e21daSmrginto their corresponding uninstalled binary, and any of their required library 1680549e21daSmrgdirectories are added to the library path. 1681ba6a1819Smrg 1682549e21daSmrgThen, COMMAND is executed, with ARGS as arguments." 1683549e21daSmrg ;; 1684ba6a1819Smrg 1685549e21daSmrg finish) 1686549e21daSmrg $ECHO \ 1687549e21daSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 1688ba6a1819Smrg 1689549e21daSmrgComplete the installation of libtool libraries. 1690ba6a1819Smrg 1691549e21daSmrgEach LIBDIR is a directory that contains libtool libraries. 1692ba6a1819Smrg 1693549e21daSmrgThe commands that this mode executes may require superuser privileges. Use 1694549e21daSmrgthe \`--dry-run' option if you just want to see what would be executed." 1695549e21daSmrg ;; 1696ba6a1819Smrg 1697549e21daSmrg install) 1698549e21daSmrg $ECHO \ 1699549e21daSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 1700ba6a1819Smrg 1701549e21daSmrgInstall executables or libraries. 1702ba6a1819Smrg 1703549e21daSmrgINSTALL-COMMAND is the installation command. The first component should be 1704549e21daSmrgeither the \`install' or \`cp' program. 1705ba6a1819Smrg 1706549e21daSmrgThe following components of INSTALL-COMMAND are treated specially: 1707ba6a1819Smrg 1708549e21daSmrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 1709ba6a1819Smrg 1710549e21daSmrgThe rest of the components are interpreted as arguments to that command (only 1711549e21daSmrgBSD-compatible install options are recognized)." 1712549e21daSmrg ;; 1713ba6a1819Smrg 1714549e21daSmrg link) 1715549e21daSmrg $ECHO \ 1716549e21daSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 1717ba6a1819Smrg 1718549e21daSmrgLink object files or libraries together to form another library, or to 1719549e21daSmrgcreate an executable program. 1720ba6a1819Smrg 1721549e21daSmrgLINK-COMMAND is a command using the C compiler that you would use to create 1722549e21daSmrga program from several object files. 1723ba6a1819Smrg 1724549e21daSmrgThe following components of LINK-COMMAND are treated specially: 1725ba6a1819Smrg 1726549e21daSmrg -all-static do not do any dynamic linking at all 1727549e21daSmrg -avoid-version do not add a version suffix if possible 1728549e21daSmrg -bindir BINDIR specify path to binaries directory (for systems where 1729549e21daSmrg libraries must be found in the PATH setting at runtime) 1730549e21daSmrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 1731549e21daSmrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 1732549e21daSmrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 1733549e21daSmrg -export-symbols SYMFILE 1734549e21daSmrg try to export only the symbols listed in SYMFILE 1735549e21daSmrg -export-symbols-regex REGEX 1736549e21daSmrg try to export only the symbols matching REGEX 1737549e21daSmrg -LLIBDIR search LIBDIR for required installed libraries 1738549e21daSmrg -lNAME OUTPUT-FILE requires the installed library libNAME 1739549e21daSmrg -module build a library that can dlopened 1740549e21daSmrg -no-fast-install disable the fast-install mode 1741549e21daSmrg -no-install link a not-installable executable 1742549e21daSmrg -no-undefined declare that a library does not refer to external symbols 1743549e21daSmrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 1744549e21daSmrg -objectlist FILE Use a list of object files found in FILE to specify objects 1745549e21daSmrg -precious-files-regex REGEX 1746549e21daSmrg don't remove output files matching REGEX 1747549e21daSmrg -release RELEASE specify package release information 1748549e21daSmrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 1749549e21daSmrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 1750549e21daSmrg -shared only do dynamic linking of libtool libraries 1751549e21daSmrg -shrext SUFFIX override the standard shared library file extension 1752549e21daSmrg -static do not do any dynamic linking of uninstalled libtool libraries 1753549e21daSmrg -static-libtool-libs 1754549e21daSmrg do not do any dynamic linking of libtool libraries 1755549e21daSmrg -version-info CURRENT[:REVISION[:AGE]] 1756549e21daSmrg specify library version info [each variable defaults to 0] 1757549e21daSmrg -weak LIBNAME declare that the target provides the LIBNAME interface 1758549e21daSmrg -Wc,FLAG 1759549e21daSmrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 1760549e21daSmrg -Wl,FLAG 1761549e21daSmrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 1762549e21daSmrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 1763ba6a1819Smrg 1764549e21daSmrgAll other options (arguments beginning with \`-') are ignored. 1765ba6a1819Smrg 1766549e21daSmrgEvery other argument is treated as a filename. Files ending in \`.la' are 1767549e21daSmrgtreated as uninstalled libtool libraries, other files are standard or library 1768549e21daSmrgobject files. 1769ba6a1819Smrg 1770549e21daSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 1771549e21daSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 1772549e21daSmrgrequired, except when creating a convenience library. 1773ba6a1819Smrg 1774549e21daSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 1775549e21daSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 1776ba6a1819Smrg 1777549e21daSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 1778549e21daSmrgis created, otherwise an executable program is created." 1779549e21daSmrg ;; 1780ba6a1819Smrg 1781549e21daSmrg uninstall) 1782549e21daSmrg $ECHO \ 1783549e21daSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 1784ba6a1819Smrg 1785549e21daSmrgRemove libraries from an installation directory. 1786ba6a1819Smrg 1787549e21daSmrgRM is the name of the program to use to delete files associated with each FILE 1788549e21daSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 1789549e21daSmrgto RM. 1790ba6a1819Smrg 1791549e21daSmrgIf FILE is a libtool library, all the files associated with it are deleted. 1792549e21daSmrgOtherwise, only FILE itself is deleted using RM." 1793ba6a1819Smrg ;; 1794ba6a1819Smrg 1795549e21daSmrg *) 1796549e21daSmrg func_fatal_help "invalid operation mode \`$mode'" 1797549e21daSmrg ;; 1798549e21daSmrg esac 1799ba6a1819Smrg 1800549e21daSmrg echo 1801549e21daSmrg $ECHO "Try \`$progname --help' for more information about other modes." 1802549e21daSmrg} 1803ba6a1819Smrg 1804549e21daSmrg# Now that we've collected a possible --mode arg, show help if necessary 1805549e21daSmrgif $opt_help; then 1806549e21daSmrg if test "$opt_help" = :; then 1807549e21daSmrg func_mode_help 1808549e21daSmrg else 1809549e21daSmrg { 1810549e21daSmrg func_help noexit 1811549e21daSmrg for mode in compile link execute install finish uninstall clean; do 1812549e21daSmrg func_mode_help 1813549e21daSmrg done 1814549e21daSmrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 1815549e21daSmrg { 1816549e21daSmrg func_help noexit 1817549e21daSmrg for mode in compile link execute install finish uninstall clean; do 1818549e21daSmrg echo 1819549e21daSmrg func_mode_help 1820549e21daSmrg done 1821549e21daSmrg } | 1822549e21daSmrg sed '1d 1823549e21daSmrg /^When reporting/,/^Report/{ 1824549e21daSmrg H 1825549e21daSmrg d 1826549e21daSmrg } 1827549e21daSmrg $x 1828549e21daSmrg /information about other modes/d 1829549e21daSmrg /more detailed .*MODE/d 1830549e21daSmrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 1831549e21daSmrg fi 1832549e21daSmrg exit $? 1833549e21daSmrgfi 1834ba6a1819Smrg 1835ba6a1819Smrg 1836549e21daSmrg# func_mode_execute arg... 1837549e21daSmrgfunc_mode_execute () 1838549e21daSmrg{ 1839549e21daSmrg $opt_debug 1840549e21daSmrg # The first argument is the command name. 1841549e21daSmrg cmd="$nonopt" 1842549e21daSmrg test -z "$cmd" && \ 1843549e21daSmrg func_fatal_help "you must specify a COMMAND" 1844ba6a1819Smrg 1845549e21daSmrg # Handle -dlopen flags immediately. 1846549e21daSmrg for file in $execute_dlfiles; do 1847549e21daSmrg test -f "$file" \ 1848549e21daSmrg || func_fatal_help "\`$file' is not a file" 1849ba6a1819Smrg 1850549e21daSmrg dir= 1851549e21daSmrg case $file in 1852549e21daSmrg *.la) 1853549e21daSmrg # Check to see that this really is a libtool archive. 1854549e21daSmrg func_lalib_unsafe_p "$file" \ 1855549e21daSmrg || func_fatal_help "\`$lib' is not a valid libtool archive" 1856ba6a1819Smrg 1857549e21daSmrg # Read the libtool library. 1858549e21daSmrg dlname= 1859549e21daSmrg library_names= 1860549e21daSmrg func_source "$file" 1861ba6a1819Smrg 1862549e21daSmrg # Skip this library if it cannot be dlopened. 1863549e21daSmrg if test -z "$dlname"; then 1864549e21daSmrg # Warn if it was a shared library. 1865549e21daSmrg test -n "$library_names" && \ 1866549e21daSmrg func_warning "\`$file' was not linked with \`-export-dynamic'" 1867549e21daSmrg continue 1868549e21daSmrg fi 1869ba6a1819Smrg 1870549e21daSmrg func_dirname "$file" "" "." 1871549e21daSmrg dir="$func_dirname_result" 1872ba6a1819Smrg 1873549e21daSmrg if test -f "$dir/$objdir/$dlname"; then 1874549e21daSmrg dir="$dir/$objdir" 1875549e21daSmrg else 1876549e21daSmrg if test ! -f "$dir/$dlname"; then 1877549e21daSmrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1878549e21daSmrg fi 1879549e21daSmrg fi 1880ba6a1819Smrg ;; 1881ba6a1819Smrg 1882549e21daSmrg *.lo) 1883549e21daSmrg # Just add the directory containing the .lo file. 1884549e21daSmrg func_dirname "$file" "" "." 1885549e21daSmrg dir="$func_dirname_result" 1886ba6a1819Smrg ;; 1887ba6a1819Smrg 1888549e21daSmrg *) 1889549e21daSmrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 1890ba6a1819Smrg continue 1891ba6a1819Smrg ;; 1892549e21daSmrg esac 1893ba6a1819Smrg 1894549e21daSmrg # Get the absolute pathname. 1895549e21daSmrg absdir=`cd "$dir" && pwd` 1896549e21daSmrg test -n "$absdir" && dir="$absdir" 1897ba6a1819Smrg 1898549e21daSmrg # Now add the directory to shlibpath_var. 1899549e21daSmrg if eval "test -z \"\$$shlibpath_var\""; then 1900549e21daSmrg eval "$shlibpath_var=\"\$dir\"" 1901549e21daSmrg else 1902549e21daSmrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 1903549e21daSmrg fi 1904549e21daSmrg done 1905ba6a1819Smrg 1906549e21daSmrg # This variable tells wrapper scripts just to set shlibpath_var 1907549e21daSmrg # rather than running their programs. 1908549e21daSmrg libtool_execute_magic="$magic" 1909ba6a1819Smrg 1910549e21daSmrg # Check if any of the arguments is a wrapper script. 1911549e21daSmrg args= 1912549e21daSmrg for file 1913549e21daSmrg do 1914549e21daSmrg case $file in 1915549e21daSmrg -* | *.la | *.lo ) ;; 1916549e21daSmrg *) 1917549e21daSmrg # Do a test to see if this is really a libtool program. 1918549e21daSmrg if func_ltwrapper_script_p "$file"; then 1919549e21daSmrg func_source "$file" 1920549e21daSmrg # Transform arg to wrapped name. 1921549e21daSmrg file="$progdir/$program" 1922549e21daSmrg elif func_ltwrapper_executable_p "$file"; then 1923549e21daSmrg func_ltwrapper_scriptname "$file" 1924549e21daSmrg func_source "$func_ltwrapper_scriptname_result" 1925549e21daSmrg # Transform arg to wrapped name. 1926549e21daSmrg file="$progdir/$program" 1927549e21daSmrg fi 1928ba6a1819Smrg ;; 1929549e21daSmrg esac 1930549e21daSmrg # Quote arguments (to preserve shell metacharacters). 1931549e21daSmrg func_quote_for_eval "$file" 1932549e21daSmrg args="$args $func_quote_for_eval_result" 1933549e21daSmrg done 1934ba6a1819Smrg 1935549e21daSmrg if test "X$opt_dry_run" = Xfalse; then 1936549e21daSmrg if test -n "$shlibpath_var"; then 1937549e21daSmrg # Export the shlibpath_var. 1938549e21daSmrg eval "export $shlibpath_var" 1939549e21daSmrg fi 1940ba6a1819Smrg 1941549e21daSmrg # Restore saved environment variables 1942549e21daSmrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1943549e21daSmrg do 1944549e21daSmrg eval "if test \"\${save_$lt_var+set}\" = set; then 1945549e21daSmrg $lt_var=\$save_$lt_var; export $lt_var 1946549e21daSmrg else 1947549e21daSmrg $lt_unset $lt_var 1948549e21daSmrg fi" 1949549e21daSmrg done 1950ba6a1819Smrg 1951549e21daSmrg # Now prepare to actually exec the command. 1952549e21daSmrg exec_cmd="\$cmd$args" 1953549e21daSmrg else 1954549e21daSmrg # Display what would be done. 1955549e21daSmrg if test -n "$shlibpath_var"; then 1956549e21daSmrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 1957549e21daSmrg echo "export $shlibpath_var" 1958549e21daSmrg fi 1959549e21daSmrg $ECHO "$cmd$args" 1960549e21daSmrg exit $EXIT_SUCCESS 1961549e21daSmrg fi 1962549e21daSmrg} 1963ba6a1819Smrg 1964549e21daSmrgtest "$mode" = execute && func_mode_execute ${1+"$@"} 1965ba6a1819Smrg 1966ba6a1819Smrg 1967549e21daSmrg# func_mode_finish arg... 1968549e21daSmrgfunc_mode_finish () 1969549e21daSmrg{ 1970549e21daSmrg $opt_debug 1971549e21daSmrg libdirs="$nonopt" 1972549e21daSmrg admincmds= 1973ba6a1819Smrg 1974549e21daSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 1975549e21daSmrg for dir 1976549e21daSmrg do 1977549e21daSmrg libdirs="$libdirs $dir" 1978549e21daSmrg done 1979ba6a1819Smrg 1980549e21daSmrg for libdir in $libdirs; do 1981549e21daSmrg if test -n "$finish_cmds"; then 1982549e21daSmrg # Do each command in the finish commands. 1983549e21daSmrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 1984549e21daSmrg'"$cmd"'"' 1985549e21daSmrg fi 1986549e21daSmrg if test -n "$finish_eval"; then 1987549e21daSmrg # Do the single finish_eval. 1988549e21daSmrg eval cmds=\"$finish_eval\" 1989549e21daSmrg $opt_dry_run || eval "$cmds" || admincmds="$admincmds 1990549e21daSmrg $cmds" 1991549e21daSmrg fi 1992549e21daSmrg done 1993549e21daSmrg fi 1994ba6a1819Smrg 1995549e21daSmrg # Exit here if they wanted silent mode. 1996549e21daSmrg $opt_silent && exit $EXIT_SUCCESS 1997ba6a1819Smrg 1998549e21daSmrg echo "----------------------------------------------------------------------" 1999549e21daSmrg echo "Libraries have been installed in:" 2000549e21daSmrg for libdir in $libdirs; do 2001549e21daSmrg $ECHO " $libdir" 2002549e21daSmrg done 2003549e21daSmrg echo 2004549e21daSmrg echo "If you ever happen to want to link against installed libraries" 2005549e21daSmrg echo "in a given directory, LIBDIR, you must either use libtool, and" 2006549e21daSmrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 2007549e21daSmrg echo "flag during linking and do at least one of the following:" 2008549e21daSmrg if test -n "$shlibpath_var"; then 2009549e21daSmrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 2010549e21daSmrg echo " during execution" 2011549e21daSmrg fi 2012549e21daSmrg if test -n "$runpath_var"; then 2013549e21daSmrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 2014549e21daSmrg echo " during linking" 2015549e21daSmrg fi 2016549e21daSmrg if test -n "$hardcode_libdir_flag_spec"; then 2017549e21daSmrg libdir=LIBDIR 2018549e21daSmrg eval flag=\"$hardcode_libdir_flag_spec\" 2019ba6a1819Smrg 2020549e21daSmrg $ECHO " - use the \`$flag' linker flag" 2021549e21daSmrg fi 2022549e21daSmrg if test -n "$admincmds"; then 2023549e21daSmrg $ECHO " - have your system administrator run these commands:$admincmds" 2024549e21daSmrg fi 2025549e21daSmrg if test -f /etc/ld.so.conf; then 2026549e21daSmrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 2027549e21daSmrg fi 2028549e21daSmrg echo 2029ba6a1819Smrg 2030549e21daSmrg echo "See any operating system documentation about shared libraries for" 2031549e21daSmrg case $host in 2032549e21daSmrg solaris2.[6789]|solaris2.1[0-9]) 2033549e21daSmrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 2034549e21daSmrg echo "pages." 2035549e21daSmrg ;; 2036549e21daSmrg *) 2037549e21daSmrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 2038549e21daSmrg ;; 2039549e21daSmrg esac 2040549e21daSmrg echo "----------------------------------------------------------------------" 2041549e21daSmrg exit $EXIT_SUCCESS 2042549e21daSmrg} 2043ba6a1819Smrg 2044549e21daSmrgtest "$mode" = finish && func_mode_finish ${1+"$@"} 2045ba6a1819Smrg 2046ba6a1819Smrg 2047549e21daSmrg# func_mode_install arg... 2048549e21daSmrgfunc_mode_install () 2049549e21daSmrg{ 2050549e21daSmrg $opt_debug 2051549e21daSmrg # There may be an optional sh(1) argument at the beginning of 2052549e21daSmrg # install_prog (especially on Windows NT). 2053549e21daSmrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2054549e21daSmrg # Allow the use of GNU shtool's install command. 2055549e21daSmrg case $nonopt in *shtool*) :;; *) false;; esac; then 2056549e21daSmrg # Aesthetically quote it. 2057549e21daSmrg func_quote_for_eval "$nonopt" 2058549e21daSmrg install_prog="$func_quote_for_eval_result " 2059549e21daSmrg arg=$1 2060549e21daSmrg shift 2061549e21daSmrg else 2062549e21daSmrg install_prog= 2063549e21daSmrg arg=$nonopt 2064549e21daSmrg fi 2065ba6a1819Smrg 2066549e21daSmrg # The real first argument should be the name of the installation program. 2067549e21daSmrg # Aesthetically quote it. 2068549e21daSmrg func_quote_for_eval "$arg" 2069549e21daSmrg install_prog="$install_prog$func_quote_for_eval_result" 2070549e21daSmrg install_shared_prog=$install_prog 2071549e21daSmrg case " $install_prog " in 2072549e21daSmrg *[\\\ /]cp\ *) install_cp=: ;; 2073549e21daSmrg *) install_cp=false ;; 2074549e21daSmrg esac 2075ba6a1819Smrg 2076549e21daSmrg # We need to accept at least all the BSD install flags. 2077549e21daSmrg dest= 2078549e21daSmrg files= 2079549e21daSmrg opts= 2080549e21daSmrg prev= 2081549e21daSmrg install_type= 2082549e21daSmrg isdir=no 2083549e21daSmrg stripme= 2084549e21daSmrg no_mode=: 2085549e21daSmrg for arg 2086549e21daSmrg do 2087549e21daSmrg arg2= 2088549e21daSmrg if test -n "$dest"; then 2089549e21daSmrg files="$files $dest" 2090549e21daSmrg dest=$arg 2091549e21daSmrg continue 2092549e21daSmrg fi 2093ba6a1819Smrg 2094549e21daSmrg case $arg in 2095549e21daSmrg -d) isdir=yes ;; 2096549e21daSmrg -f) 2097549e21daSmrg if $install_cp; then :; else 2098549e21daSmrg prev=$arg 2099ba6a1819Smrg fi 2100549e21daSmrg ;; 2101549e21daSmrg -g | -m | -o) 2102549e21daSmrg prev=$arg 2103549e21daSmrg ;; 2104549e21daSmrg -s) 2105549e21daSmrg stripme=" -s" 2106ba6a1819Smrg continue 2107ba6a1819Smrg ;; 2108549e21daSmrg -*) 2109549e21daSmrg ;; 2110ba6a1819Smrg *) 2111549e21daSmrg # If the previous option needed an argument, then skip it. 2112549e21daSmrg if test -n "$prev"; then 2113549e21daSmrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 2114549e21daSmrg arg2=$install_override_mode 2115549e21daSmrg no_mode=false 2116549e21daSmrg fi 2117549e21daSmrg prev= 2118549e21daSmrg else 2119549e21daSmrg dest=$arg 2120549e21daSmrg continue 2121549e21daSmrg fi 2122ba6a1819Smrg ;; 2123549e21daSmrg esac 2124ba6a1819Smrg 2125549e21daSmrg # Aesthetically quote the argument. 2126549e21daSmrg func_quote_for_eval "$arg" 2127549e21daSmrg install_prog="$install_prog $func_quote_for_eval_result" 2128549e21daSmrg if test -n "$arg2"; then 2129549e21daSmrg func_quote_for_eval "$arg2" 2130ba6a1819Smrg fi 2131549e21daSmrg install_shared_prog="$install_shared_prog $func_quote_for_eval_result" 2132549e21daSmrg done 2133ba6a1819Smrg 2134549e21daSmrg test -z "$install_prog" && \ 2135549e21daSmrg func_fatal_help "you must specify an install program" 2136ba6a1819Smrg 2137549e21daSmrg test -n "$prev" && \ 2138549e21daSmrg func_fatal_help "the \`$prev' option requires an argument" 2139ba6a1819Smrg 2140549e21daSmrg if test -n "$install_override_mode" && $no_mode; then 2141549e21daSmrg if $install_cp; then :; else 2142549e21daSmrg func_quote_for_eval "$install_override_mode" 2143549e21daSmrg install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result" 2144549e21daSmrg fi 2145ba6a1819Smrg fi 2146ba6a1819Smrg 2147549e21daSmrg if test -z "$files"; then 2148549e21daSmrg if test -z "$dest"; then 2149549e21daSmrg func_fatal_help "no file or destination specified" 2150549e21daSmrg else 2151549e21daSmrg func_fatal_help "you must specify a destination" 2152ba6a1819Smrg fi 2153ba6a1819Smrg fi 2154ba6a1819Smrg 2155549e21daSmrg # Strip any trailing slash from the destination. 2156549e21daSmrg func_stripname '' '/' "$dest" 2157549e21daSmrg dest=$func_stripname_result 2158ba6a1819Smrg 2159549e21daSmrg # Check to see that the destination is a directory. 2160549e21daSmrg test -d "$dest" && isdir=yes 2161549e21daSmrg if test "$isdir" = yes; then 2162549e21daSmrg destdir="$dest" 2163549e21daSmrg destname= 2164549e21daSmrg else 2165549e21daSmrg func_dirname_and_basename "$dest" "" "." 2166549e21daSmrg destdir="$func_dirname_result" 2167549e21daSmrg destname="$func_basename_result" 2168549e21daSmrg 2169549e21daSmrg # Not a directory, so check to see that there is only one file specified. 2170549e21daSmrg set dummy $files; shift 2171549e21daSmrg test "$#" -gt 1 && \ 2172549e21daSmrg func_fatal_help "\`$dest' is not a directory" 2173549e21daSmrg fi 2174549e21daSmrg case $destdir in 2175549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 2176ba6a1819Smrg *) 2177549e21daSmrg for file in $files; do 2178549e21daSmrg case $file in 2179549e21daSmrg *.lo) ;; 2180549e21daSmrg *) 2181549e21daSmrg func_fatal_help "\`$destdir' must be an absolute directory name" 2182549e21daSmrg ;; 2183549e21daSmrg esac 2184549e21daSmrg done 2185ba6a1819Smrg ;; 2186ba6a1819Smrg esac 2187ba6a1819Smrg 2188549e21daSmrg # This variable tells wrapper scripts just to set variables rather 2189549e21daSmrg # than running their programs. 2190549e21daSmrg libtool_install_magic="$magic" 2191ba6a1819Smrg 2192549e21daSmrg staticlibs= 2193549e21daSmrg future_libdirs= 2194549e21daSmrg current_libdirs= 2195549e21daSmrg for file in $files; do 2196ba6a1819Smrg 2197549e21daSmrg # Do each installation. 2198549e21daSmrg case $file in 2199549e21daSmrg *.$libext) 2200549e21daSmrg # Do the static libraries later. 2201549e21daSmrg staticlibs="$staticlibs $file" 2202549e21daSmrg ;; 2203ba6a1819Smrg 2204549e21daSmrg *.la) 2205549e21daSmrg # Check to see that this really is a libtool archive. 2206549e21daSmrg func_lalib_unsafe_p "$file" \ 2207549e21daSmrg || func_fatal_help "\`$file' is not a valid libtool archive" 2208549e21daSmrg 2209549e21daSmrg library_names= 2210549e21daSmrg old_library= 2211549e21daSmrg relink_command= 2212549e21daSmrg func_source "$file" 2213549e21daSmrg 2214549e21daSmrg # Add the libdir to current_libdirs if it is the destination. 2215549e21daSmrg if test "X$destdir" = "X$libdir"; then 2216549e21daSmrg case "$current_libdirs " in 2217549e21daSmrg *" $libdir "*) ;; 2218549e21daSmrg *) current_libdirs="$current_libdirs $libdir" ;; 2219ba6a1819Smrg esac 2220549e21daSmrg else 2221549e21daSmrg # Note the libdir as a future libdir. 2222549e21daSmrg case "$future_libdirs " in 2223549e21daSmrg *" $libdir "*) ;; 2224549e21daSmrg *) future_libdirs="$future_libdirs $libdir" ;; 2225549e21daSmrg esac 2226549e21daSmrg fi 2227549e21daSmrg 2228549e21daSmrg func_dirname "$file" "/" "" 2229549e21daSmrg dir="$func_dirname_result" 2230549e21daSmrg dir="$dir$objdir" 2231549e21daSmrg 2232549e21daSmrg if test -n "$relink_command"; then 2233549e21daSmrg # Determine the prefix the user has applied to our future dir. 2234549e21daSmrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2235549e21daSmrg 2236549e21daSmrg # Don't allow the user to place us outside of our expected 2237549e21daSmrg # location b/c this prevents finding dependent libraries that 2238549e21daSmrg # are installed to the same prefix. 2239549e21daSmrg # At present, this check doesn't affect windows .dll's that 2240549e21daSmrg # are installed into $libdir/../bin (currently, that works fine) 2241549e21daSmrg # but it's something to keep an eye on. 2242549e21daSmrg test "$inst_prefix_dir" = "$destdir" && \ 2243549e21daSmrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2244549e21daSmrg 2245549e21daSmrg if test -n "$inst_prefix_dir"; then 2246549e21daSmrg # Stick the inst_prefix_dir data into the link command. 2247549e21daSmrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2248ba6a1819Smrg else 2249549e21daSmrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2250ba6a1819Smrg fi 2251549e21daSmrg 2252549e21daSmrg func_warning "relinking \`$file'" 2253549e21daSmrg func_show_eval "$relink_command" \ 2254549e21daSmrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2255549e21daSmrg fi 2256549e21daSmrg 2257549e21daSmrg # See the names of the shared library. 2258549e21daSmrg set dummy $library_names; shift 2259549e21daSmrg if test -n "$1"; then 2260549e21daSmrg realname="$1" 2261549e21daSmrg shift 2262549e21daSmrg 2263549e21daSmrg srcname="$realname" 2264549e21daSmrg test -n "$relink_command" && srcname="$realname"T 2265549e21daSmrg 2266549e21daSmrg # Install the shared library and build the symlinks. 2267549e21daSmrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2268549e21daSmrg 'exit $?' 2269549e21daSmrg tstripme="$stripme" 2270549e21daSmrg case $host_os in 2271549e21daSmrg cygwin* | mingw* | pw32* | cegcc*) 2272549e21daSmrg case $realname in 2273549e21daSmrg *.dll.a) 2274549e21daSmrg tstripme="" 2275549e21daSmrg ;; 2276549e21daSmrg esac 2277549e21daSmrg ;; 2278549e21daSmrg esac 2279549e21daSmrg if test -n "$tstripme" && test -n "$striplib"; then 2280549e21daSmrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 2281ba6a1819Smrg fi 2282549e21daSmrg 2283549e21daSmrg if test "$#" -gt 0; then 2284549e21daSmrg # Delete the old symlinks, and create new ones. 2285549e21daSmrg # Try `ln -sf' first, because the `ln' binary might depend on 2286549e21daSmrg # the symlink we replace! Solaris /bin/ln does not understand -f, 2287549e21daSmrg # so we also need to try rm && ln -s. 2288549e21daSmrg for linkname 2289549e21daSmrg do 2290549e21daSmrg test "$linkname" != "$realname" \ 2291549e21daSmrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 2292ba6a1819Smrg done 2293ba6a1819Smrg fi 2294549e21daSmrg 2295549e21daSmrg # Do each command in the postinstall commands. 2296549e21daSmrg lib="$destdir/$realname" 2297549e21daSmrg func_execute_cmds "$postinstall_cmds" 'exit $?' 2298549e21daSmrg fi 2299549e21daSmrg 2300549e21daSmrg # Install the pseudo-library for information purposes. 2301549e21daSmrg func_basename "$file" 2302549e21daSmrg name="$func_basename_result" 2303549e21daSmrg instname="$dir/$name"i 2304549e21daSmrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 2305549e21daSmrg 2306549e21daSmrg # Maybe install the static library, too. 2307549e21daSmrg test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" 2308549e21daSmrg ;; 2309549e21daSmrg 2310549e21daSmrg *.lo) 2311549e21daSmrg # Install (i.e. copy) a libtool object. 2312549e21daSmrg 2313549e21daSmrg # Figure out destination file name, if it wasn't already specified. 2314549e21daSmrg if test -n "$destname"; then 2315549e21daSmrg destfile="$destdir/$destname" 2316549e21daSmrg else 2317549e21daSmrg func_basename "$file" 2318549e21daSmrg destfile="$func_basename_result" 2319549e21daSmrg destfile="$destdir/$destfile" 2320549e21daSmrg fi 2321549e21daSmrg 2322549e21daSmrg # Deduce the name of the destination old-style object file. 2323549e21daSmrg case $destfile in 2324549e21daSmrg *.lo) 2325549e21daSmrg func_lo2o "$destfile" 2326549e21daSmrg staticdest=$func_lo2o_result 2327ba6a1819Smrg ;; 2328549e21daSmrg *.$objext) 2329549e21daSmrg staticdest="$destfile" 2330549e21daSmrg destfile= 2331ba6a1819Smrg ;; 2332549e21daSmrg *) 2333549e21daSmrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 2334ba6a1819Smrg ;; 2335549e21daSmrg esac 2336549e21daSmrg 2337549e21daSmrg # Install the libtool object if requested. 2338549e21daSmrg test -n "$destfile" && \ 2339549e21daSmrg func_show_eval "$install_prog $file $destfile" 'exit $?' 2340549e21daSmrg 2341549e21daSmrg # Install the old object if enabled. 2342549e21daSmrg if test "$build_old_libs" = yes; then 2343549e21daSmrg # Deduce the name of the old-style object file. 2344549e21daSmrg func_lo2o "$file" 2345549e21daSmrg staticobj=$func_lo2o_result 2346549e21daSmrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 2347ba6a1819Smrg fi 2348549e21daSmrg exit $EXIT_SUCCESS 2349549e21daSmrg ;; 2350ba6a1819Smrg 2351549e21daSmrg *) 2352549e21daSmrg # Figure out destination file name, if it wasn't already specified. 2353549e21daSmrg if test -n "$destname"; then 2354549e21daSmrg destfile="$destdir/$destname" 2355ba6a1819Smrg else 2356549e21daSmrg func_basename "$file" 2357549e21daSmrg destfile="$func_basename_result" 2358549e21daSmrg destfile="$destdir/$destfile" 2359ba6a1819Smrg fi 2360ba6a1819Smrg 2361549e21daSmrg # If the file is missing, and there is a .exe on the end, strip it 2362549e21daSmrg # because it is most likely a libtool script we actually want to 2363549e21daSmrg # install 2364549e21daSmrg stripped_ext="" 2365549e21daSmrg case $file in 2366549e21daSmrg *.exe) 2367549e21daSmrg if test ! -f "$file"; then 2368549e21daSmrg func_stripname '' '.exe' "$file" 2369549e21daSmrg file=$func_stripname_result 2370549e21daSmrg stripped_ext=".exe" 2371549e21daSmrg fi 2372549e21daSmrg ;; 2373549e21daSmrg esac 2374ba6a1819Smrg 2375549e21daSmrg # Do a test to see if this is really a libtool program. 2376549e21daSmrg case $host in 2377549e21daSmrg *cygwin* | *mingw*) 2378549e21daSmrg if func_ltwrapper_executable_p "$file"; then 2379549e21daSmrg func_ltwrapper_scriptname "$file" 2380549e21daSmrg wrapper=$func_ltwrapper_scriptname_result 2381549e21daSmrg else 2382549e21daSmrg func_stripname '' '.exe' "$file" 2383549e21daSmrg wrapper=$func_stripname_result 2384549e21daSmrg fi 2385549e21daSmrg ;; 2386549e21daSmrg *) 2387549e21daSmrg wrapper=$file 2388549e21daSmrg ;; 2389ba6a1819Smrg esac 2390549e21daSmrg if func_ltwrapper_script_p "$wrapper"; then 2391549e21daSmrg notinst_deplibs= 2392549e21daSmrg relink_command= 2393ba6a1819Smrg 2394549e21daSmrg func_source "$wrapper" 2395ba6a1819Smrg 2396549e21daSmrg # Check the variables that should have been set. 2397549e21daSmrg test -z "$generated_by_libtool_version" && \ 2398549e21daSmrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 2399549e21daSmrg 2400549e21daSmrg finalize=yes 2401549e21daSmrg for lib in $notinst_deplibs; do 2402549e21daSmrg # Check to see that each library is installed. 2403549e21daSmrg libdir= 2404549e21daSmrg if test -f "$lib"; then 2405549e21daSmrg func_source "$lib" 2406ba6a1819Smrg fi 2407549e21daSmrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 2408549e21daSmrg if test -n "$libdir" && test ! -f "$libfile"; then 2409549e21daSmrg func_warning "\`$lib' has not been installed in \`$libdir'" 2410549e21daSmrg finalize=no 2411549e21daSmrg fi 2412549e21daSmrg done 2413ba6a1819Smrg 2414549e21daSmrg relink_command= 2415549e21daSmrg func_source "$wrapper" 2416ba6a1819Smrg 2417549e21daSmrg outputname= 2418549e21daSmrg if test "$fast_install" = no && test -n "$relink_command"; then 2419549e21daSmrg $opt_dry_run || { 2420549e21daSmrg if test "$finalize" = yes; then 2421549e21daSmrg tmpdir=`func_mktempdir` 2422549e21daSmrg func_basename "$file$stripped_ext" 2423549e21daSmrg file="$func_basename_result" 2424549e21daSmrg outputname="$tmpdir/$file" 2425549e21daSmrg # Replace the output file specification. 2426549e21daSmrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 2427549e21daSmrg 2428549e21daSmrg $opt_silent || { 2429549e21daSmrg func_quote_for_expand "$relink_command" 2430549e21daSmrg eval "func_echo $func_quote_for_expand_result" 2431549e21daSmrg } 2432549e21daSmrg if eval "$relink_command"; then : 2433549e21daSmrg else 2434549e21daSmrg func_error "error: relink \`$file' with the above command before installing it" 2435549e21daSmrg $opt_dry_run || ${RM}r "$tmpdir" 2436549e21daSmrg continue 2437549e21daSmrg fi 2438549e21daSmrg file="$outputname" 2439549e21daSmrg else 2440549e21daSmrg func_warning "cannot relink \`$file'" 2441549e21daSmrg fi 2442549e21daSmrg } 2443ba6a1819Smrg else 2444549e21daSmrg # Install the binary that we compiled earlier. 2445549e21daSmrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 2446ba6a1819Smrg fi 2447549e21daSmrg fi 2448ba6a1819Smrg 2449549e21daSmrg # remove .exe since cygwin /usr/bin/install will append another 2450549e21daSmrg # one anyway 2451549e21daSmrg case $install_prog,$host in 2452549e21daSmrg */usr/bin/install*,*cygwin*) 2453549e21daSmrg case $file:$destfile in 2454549e21daSmrg *.exe:*.exe) 2455549e21daSmrg # this is ok 2456549e21daSmrg ;; 2457549e21daSmrg *.exe:*) 2458549e21daSmrg destfile=$destfile.exe 2459549e21daSmrg ;; 2460549e21daSmrg *:*.exe) 2461549e21daSmrg func_stripname '' '.exe' "$destfile" 2462549e21daSmrg destfile=$func_stripname_result 2463549e21daSmrg ;; 2464549e21daSmrg esac 2465ba6a1819Smrg ;; 2466ba6a1819Smrg esac 2467549e21daSmrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 2468549e21daSmrg $opt_dry_run || if test -n "$outputname"; then 2469549e21daSmrg ${RM}r "$tmpdir" 2470549e21daSmrg fi 2471549e21daSmrg ;; 2472549e21daSmrg esac 2473549e21daSmrg done 2474ba6a1819Smrg 2475549e21daSmrg for file in $staticlibs; do 2476549e21daSmrg func_basename "$file" 2477549e21daSmrg name="$func_basename_result" 2478ba6a1819Smrg 2479549e21daSmrg # Set up the ranlib parameters. 2480549e21daSmrg oldlib="$destdir/$name" 2481ba6a1819Smrg 2482549e21daSmrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 2483ba6a1819Smrg 2484549e21daSmrg if test -n "$stripme" && test -n "$old_striplib"; then 2485549e21daSmrg func_show_eval "$old_striplib $oldlib" 'exit $?' 2486549e21daSmrg fi 2487ba6a1819Smrg 2488549e21daSmrg # Do each command in the postinstall commands. 2489549e21daSmrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 2490549e21daSmrg done 2491ba6a1819Smrg 2492549e21daSmrg test -n "$future_libdirs" && \ 2493549e21daSmrg func_warning "remember to run \`$progname --finish$future_libdirs'" 2494ba6a1819Smrg 2495549e21daSmrg if test -n "$current_libdirs"; then 2496549e21daSmrg # Maybe just do a dry run. 2497549e21daSmrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 2498549e21daSmrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 2499549e21daSmrg else 2500549e21daSmrg exit $EXIT_SUCCESS 2501549e21daSmrg fi 2502549e21daSmrg} 2503ba6a1819Smrg 2504549e21daSmrgtest "$mode" = install && func_mode_install ${1+"$@"} 2505ba6a1819Smrg 2506ba6a1819Smrg 2507549e21daSmrg# func_generate_dlsyms outputname originator pic_p 2508549e21daSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with 2509549e21daSmrg# a dlpreopen symbol table. 2510549e21daSmrgfunc_generate_dlsyms () 2511549e21daSmrg{ 2512549e21daSmrg $opt_debug 2513549e21daSmrg my_outputname="$1" 2514549e21daSmrg my_originator="$2" 2515549e21daSmrg my_pic_p="${3-no}" 2516549e21daSmrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 2517549e21daSmrg my_dlsyms= 2518549e21daSmrg 2519549e21daSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 2520549e21daSmrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 2521549e21daSmrg my_dlsyms="${my_outputname}S.c" 2522549e21daSmrg else 2523549e21daSmrg func_error "not configured to extract global symbols from dlpreopened files" 2524549e21daSmrg fi 2525549e21daSmrg fi 2526ba6a1819Smrg 2527549e21daSmrg if test -n "$my_dlsyms"; then 2528549e21daSmrg case $my_dlsyms in 2529549e21daSmrg "") ;; 2530549e21daSmrg *.c) 2531549e21daSmrg # Discover the nlist of each of the dlfiles. 2532549e21daSmrg nlist="$output_objdir/${my_outputname}.nm" 2533549e21daSmrg 2534549e21daSmrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 2535549e21daSmrg 2536549e21daSmrg # Parse the name list into a source file. 2537549e21daSmrg func_verbose "creating $output_objdir/$my_dlsyms" 2538549e21daSmrg 2539549e21daSmrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 2540549e21daSmrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 2541549e21daSmrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 2542549e21daSmrg 2543549e21daSmrg#ifdef __cplusplus 2544549e21daSmrgextern \"C\" { 2545549e21daSmrg#endif 2546549e21daSmrg 2547549e21daSmrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 2548549e21daSmrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 2549549e21daSmrg#endif 2550549e21daSmrg 2551549e21daSmrg/* External symbol declarations for the compiler. */\ 2552549e21daSmrg" 2553549e21daSmrg 2554549e21daSmrg if test "$dlself" = yes; then 2555549e21daSmrg func_verbose "generating symbol list for \`$output'" 2556549e21daSmrg 2557549e21daSmrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 2558549e21daSmrg 2559549e21daSmrg # Add our own program objects to the symbol list. 2560549e21daSmrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 2561549e21daSmrg for progfile in $progfiles; do 2562549e21daSmrg func_verbose "extracting global C symbols from \`$progfile'" 2563549e21daSmrg $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" 2564549e21daSmrg done 2565549e21daSmrg 2566549e21daSmrg if test -n "$exclude_expsyms"; then 2567549e21daSmrg $opt_dry_run || { 2568549e21daSmrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 2569549e21daSmrg eval '$MV "$nlist"T "$nlist"' 2570549e21daSmrg } 2571ba6a1819Smrg fi 2572ba6a1819Smrg 2573549e21daSmrg if test -n "$export_symbols_regex"; then 2574549e21daSmrg $opt_dry_run || { 2575549e21daSmrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 2576549e21daSmrg eval '$MV "$nlist"T "$nlist"' 2577549e21daSmrg } 2578ba6a1819Smrg fi 2579549e21daSmrg 2580549e21daSmrg # Prepare the list of exported symbols 2581549e21daSmrg if test -z "$export_symbols"; then 2582549e21daSmrg export_symbols="$output_objdir/$outputname.exp" 2583549e21daSmrg $opt_dry_run || { 2584549e21daSmrg $RM $export_symbols 2585549e21daSmrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 2586549e21daSmrg case $host in 2587549e21daSmrg *cygwin* | *mingw* | *cegcc* ) 2588549e21daSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 2589549e21daSmrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 2590549e21daSmrg ;; 2591ba6a1819Smrg esac 2592549e21daSmrg } 2593549e21daSmrg else 2594549e21daSmrg $opt_dry_run || { 2595549e21daSmrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 2596549e21daSmrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 2597549e21daSmrg eval '$MV "$nlist"T "$nlist"' 2598549e21daSmrg case $host in 2599549e21daSmrg *cygwin* | *mingw* | *cegcc* ) 2600549e21daSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 2601549e21daSmrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 2602549e21daSmrg ;; 2603ba6a1819Smrg esac 2604549e21daSmrg } 2605ba6a1819Smrg fi 2606549e21daSmrg fi 2607ba6a1819Smrg 2608549e21daSmrg for dlprefile in $dlprefiles; do 2609549e21daSmrg func_verbose "extracting global C symbols from \`$dlprefile'" 2610549e21daSmrg func_basename "$dlprefile" 2611549e21daSmrg name="$func_basename_result" 2612549e21daSmrg $opt_dry_run || { 2613549e21daSmrg eval '$ECHO ": $name " >> "$nlist"' 2614549e21daSmrg eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" 2615549e21daSmrg } 2616549e21daSmrg done 2617ba6a1819Smrg 2618549e21daSmrg $opt_dry_run || { 2619549e21daSmrg # Make sure we have at least an empty file. 2620549e21daSmrg test -f "$nlist" || : > "$nlist" 2621ba6a1819Smrg 2622549e21daSmrg if test -n "$exclude_expsyms"; then 2623549e21daSmrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 2624549e21daSmrg $MV "$nlist"T "$nlist" 2625ba6a1819Smrg fi 2626ba6a1819Smrg 2627549e21daSmrg # Try sorting and uniquifying the output. 2628549e21daSmrg if $GREP -v "^: " < "$nlist" | 2629549e21daSmrg if sort -k 3 </dev/null >/dev/null 2>&1; then 2630549e21daSmrg sort -k 3 2631ba6a1819Smrg else 2632549e21daSmrg sort +2 2633549e21daSmrg fi | 2634549e21daSmrg uniq > "$nlist"S; then 2635549e21daSmrg : 2636ba6a1819Smrg else 2637549e21daSmrg $GREP -v "^: " < "$nlist" > "$nlist"S 2638ba6a1819Smrg fi 2639ba6a1819Smrg 2640549e21daSmrg if test -f "$nlist"S; then 2641549e21daSmrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 2642ba6a1819Smrg else 2643549e21daSmrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 2644ba6a1819Smrg fi 2645ba6a1819Smrg 2646549e21daSmrg echo >> "$output_objdir/$my_dlsyms" "\ 2647ba6a1819Smrg 2648549e21daSmrg/* The mapping between symbol names and symbols. */ 2649549e21daSmrgtypedef struct { 2650549e21daSmrg const char *name; 2651549e21daSmrg void *address; 2652549e21daSmrg} lt_dlsymlist; 2653549e21daSmrg" 2654549e21daSmrg case $host in 2655549e21daSmrg *cygwin* | *mingw* | *cegcc* ) 2656549e21daSmrg echo >> "$output_objdir/$my_dlsyms" "\ 2657549e21daSmrg/* DATA imports from DLLs on WIN32 con't be const, because 2658549e21daSmrg runtime relocations are performed -- see ld's documentation 2659549e21daSmrg on pseudo-relocs. */" 2660549e21daSmrg lt_dlsym_const= ;; 2661549e21daSmrg *osf5*) 2662549e21daSmrg echo >> "$output_objdir/$my_dlsyms" "\ 2663549e21daSmrg/* This system does not cope well with relocations in const data */" 2664549e21daSmrg lt_dlsym_const= ;; 2665549e21daSmrg *) 2666549e21daSmrg lt_dlsym_const=const ;; 2667549e21daSmrg esac 2668549e21daSmrg 2669549e21daSmrg echo >> "$output_objdir/$my_dlsyms" "\ 2670549e21daSmrgextern $lt_dlsym_const lt_dlsymlist 2671549e21daSmrglt_${my_prefix}_LTX_preloaded_symbols[]; 2672549e21daSmrg$lt_dlsym_const lt_dlsymlist 2673549e21daSmrglt_${my_prefix}_LTX_preloaded_symbols[] = 2674549e21daSmrg{\ 2675549e21daSmrg { \"$my_originator\", (void *) 0 }," 2676549e21daSmrg 2677549e21daSmrg case $need_lib_prefix in 2678549e21daSmrg no) 2679549e21daSmrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 2680549e21daSmrg ;; 2681549e21daSmrg *) 2682549e21daSmrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 2683549e21daSmrg ;; 2684549e21daSmrg esac 2685549e21daSmrg echo >> "$output_objdir/$my_dlsyms" "\ 2686549e21daSmrg {0, (void *) 0} 2687549e21daSmrg}; 2688549e21daSmrg 2689549e21daSmrg/* This works around a problem in FreeBSD linker */ 2690549e21daSmrg#ifdef FREEBSD_WORKAROUND 2691549e21daSmrgstatic const void *lt_preloaded_setup() { 2692549e21daSmrg return lt_${my_prefix}_LTX_preloaded_symbols; 2693549e21daSmrg} 2694549e21daSmrg#endif 2695549e21daSmrg 2696549e21daSmrg#ifdef __cplusplus 2697549e21daSmrg} 2698549e21daSmrg#endif\ 2699549e21daSmrg" 2700549e21daSmrg } # !$opt_dry_run 2701549e21daSmrg 2702549e21daSmrg pic_flag_for_symtable= 2703549e21daSmrg case "$compile_command " in 2704549e21daSmrg *" -static "*) ;; 2705549e21daSmrg *) 2706549e21daSmrg case $host in 2707549e21daSmrg # compiling the symbol table file with pic_flag works around 2708549e21daSmrg # a FreeBSD bug that causes programs to crash when -lm is 2709549e21daSmrg # linked before any other PIC object. But we must not use 2710549e21daSmrg # pic_flag when linking with -static. The problem exists in 2711549e21daSmrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 2712549e21daSmrg *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 2713549e21daSmrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 2714549e21daSmrg *-*-hpux*) 2715549e21daSmrg pic_flag_for_symtable=" $pic_flag" ;; 2716549e21daSmrg *) 2717549e21daSmrg if test "X$my_pic_p" != Xno; then 2718549e21daSmrg pic_flag_for_symtable=" $pic_flag" 2719ba6a1819Smrg fi 2720549e21daSmrg ;; 2721549e21daSmrg esac 2722549e21daSmrg ;; 2723549e21daSmrg esac 2724549e21daSmrg symtab_cflags= 2725549e21daSmrg for arg in $LTCFLAGS; do 2726549e21daSmrg case $arg in 2727549e21daSmrg -pie | -fpie | -fPIE) ;; 2728549e21daSmrg *) symtab_cflags="$symtab_cflags $arg" ;; 2729549e21daSmrg esac 2730549e21daSmrg done 2731ba6a1819Smrg 2732549e21daSmrg # Now compile the dynamic symbol file. 2733549e21daSmrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 2734ba6a1819Smrg 2735549e21daSmrg # Clean up the generated files. 2736549e21daSmrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 2737549e21daSmrg 2738549e21daSmrg # Transform the symbol file into the correct name. 2739549e21daSmrg symfileobj="$output_objdir/${my_outputname}S.$objext" 2740549e21daSmrg case $host in 2741549e21daSmrg *cygwin* | *mingw* | *cegcc* ) 2742549e21daSmrg if test -f "$output_objdir/$my_outputname.def"; then 2743549e21daSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 2744549e21daSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 2745549e21daSmrg else 2746549e21daSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 2747549e21daSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 2748549e21daSmrg fi 2749549e21daSmrg ;; 2750549e21daSmrg *) 2751549e21daSmrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 2752549e21daSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 2753ba6a1819Smrg ;; 2754ba6a1819Smrg esac 2755549e21daSmrg ;; 2756549e21daSmrg *) 2757549e21daSmrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 2758549e21daSmrg ;; 2759549e21daSmrg esac 2760549e21daSmrg else 2761549e21daSmrg # We keep going just in case the user didn't refer to 2762549e21daSmrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 2763549e21daSmrg # really was required. 2764ba6a1819Smrg 2765549e21daSmrg # Nullify the symbol file. 2766549e21daSmrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 2767549e21daSmrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 2768549e21daSmrg fi 2769549e21daSmrg} 2770ba6a1819Smrg 2771549e21daSmrg# func_win32_libid arg 2772549e21daSmrg# return the library type of file 'arg' 2773549e21daSmrg# 2774549e21daSmrg# Need a lot of goo to handle *both* DLLs and import libs 2775549e21daSmrg# Has to be a shell function in order to 'eat' the argument 2776549e21daSmrg# that is supplied when $file_magic_command is called. 2777549e21daSmrg# Despite the name, also deal with 64 bit binaries. 2778549e21daSmrgfunc_win32_libid () 2779549e21daSmrg{ 2780549e21daSmrg $opt_debug 2781549e21daSmrg win32_libid_type="unknown" 2782549e21daSmrg win32_fileres=`file -L $1 2>/dev/null` 2783549e21daSmrg case $win32_fileres in 2784549e21daSmrg *ar\ archive\ import\ library*) # definitely import 2785549e21daSmrg win32_libid_type="x86 archive import" 2786549e21daSmrg ;; 2787549e21daSmrg *ar\ archive*) # could be an import, or static 2788549e21daSmrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 2789549e21daSmrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 2790549e21daSmrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 2791549e21daSmrg win32_nmres=`eval $NM -f posix -A $1 | 2792549e21daSmrg $SED -n -e ' 2793549e21daSmrg 1,100{ 2794549e21daSmrg / I /{ 2795549e21daSmrg s,.*,import, 2796549e21daSmrg p 2797549e21daSmrg q 2798549e21daSmrg } 2799549e21daSmrg }'` 2800549e21daSmrg case $win32_nmres in 2801549e21daSmrg import*) win32_libid_type="x86 archive import";; 2802549e21daSmrg *) win32_libid_type="x86 archive static";; 2803549e21daSmrg esac 2804549e21daSmrg fi 2805549e21daSmrg ;; 2806549e21daSmrg *DLL*) 2807549e21daSmrg win32_libid_type="x86 DLL" 2808549e21daSmrg ;; 2809549e21daSmrg *executable*) # but shell scripts are "executable" too... 2810549e21daSmrg case $win32_fileres in 2811549e21daSmrg *MS\ Windows\ PE\ Intel*) 2812549e21daSmrg win32_libid_type="x86 DLL" 2813549e21daSmrg ;; 2814549e21daSmrg esac 2815549e21daSmrg ;; 2816549e21daSmrg esac 2817549e21daSmrg $ECHO "$win32_libid_type" 2818549e21daSmrg} 2819ba6a1819Smrg 2820ba6a1819Smrg 2821ba6a1819Smrg 2822549e21daSmrg# func_extract_an_archive dir oldlib 2823549e21daSmrgfunc_extract_an_archive () 2824549e21daSmrg{ 2825549e21daSmrg $opt_debug 2826549e21daSmrg f_ex_an_ar_dir="$1"; shift 2827549e21daSmrg f_ex_an_ar_oldlib="$1" 2828549e21daSmrg if test "$lock_old_archive_extraction" = yes; then 2829549e21daSmrg lockfile=$f_ex_an_ar_oldlib.lock 2830549e21daSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 2831549e21daSmrg func_echo "Waiting for $lockfile to be removed" 2832549e21daSmrg sleep 2 2833549e21daSmrg done 2834549e21daSmrg fi 2835549e21daSmrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 2836549e21daSmrg 'stat=$?; rm -f "$lockfile"; exit $stat' 2837549e21daSmrg if test "$lock_old_archive_extraction" = yes; then 2838549e21daSmrg $opt_dry_run || rm -f "$lockfile" 2839549e21daSmrg fi 2840549e21daSmrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 2841549e21daSmrg : 2842549e21daSmrg else 2843549e21daSmrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 2844549e21daSmrg fi 2845549e21daSmrg} 2846ba6a1819Smrg 2847ba6a1819Smrg 2848549e21daSmrg# func_extract_archives gentop oldlib ... 2849549e21daSmrgfunc_extract_archives () 2850549e21daSmrg{ 2851549e21daSmrg $opt_debug 2852549e21daSmrg my_gentop="$1"; shift 2853549e21daSmrg my_oldlibs=${1+"$@"} 2854549e21daSmrg my_oldobjs="" 2855549e21daSmrg my_xlib="" 2856549e21daSmrg my_xabs="" 2857549e21daSmrg my_xdir="" 2858ba6a1819Smrg 2859549e21daSmrg for my_xlib in $my_oldlibs; do 2860549e21daSmrg # Extract the objects. 2861549e21daSmrg case $my_xlib in 2862549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 2863549e21daSmrg *) my_xabs=`pwd`"/$my_xlib" ;; 2864ba6a1819Smrg esac 2865549e21daSmrg func_basename "$my_xlib" 2866549e21daSmrg my_xlib="$func_basename_result" 2867549e21daSmrg my_xlib_u=$my_xlib 2868549e21daSmrg while :; do 2869549e21daSmrg case " $extracted_archives " in 2870549e21daSmrg *" $my_xlib_u "*) 2871549e21daSmrg func_arith $extracted_serial + 1 2872549e21daSmrg extracted_serial=$func_arith_result 2873549e21daSmrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 2874549e21daSmrg *) break ;; 2875549e21daSmrg esac 2876549e21daSmrg done 2877549e21daSmrg extracted_archives="$extracted_archives $my_xlib_u" 2878549e21daSmrg my_xdir="$my_gentop/$my_xlib_u" 2879ba6a1819Smrg 2880549e21daSmrg func_mkdir_p "$my_xdir" 2881ba6a1819Smrg 2882549e21daSmrg case $host in 2883549e21daSmrg *-darwin*) 2884549e21daSmrg func_verbose "Extracting $my_xabs" 2885549e21daSmrg # Do not bother doing anything if just a dry run 2886549e21daSmrg $opt_dry_run || { 2887549e21daSmrg darwin_orig_dir=`pwd` 2888549e21daSmrg cd $my_xdir || exit $? 2889549e21daSmrg darwin_archive=$my_xabs 2890549e21daSmrg darwin_curdir=`pwd` 2891549e21daSmrg darwin_base_archive=`basename "$darwin_archive"` 2892549e21daSmrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 2893549e21daSmrg if test -n "$darwin_arches"; then 2894549e21daSmrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 2895549e21daSmrg darwin_arch= 2896549e21daSmrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 2897549e21daSmrg for darwin_arch in $darwin_arches ; do 2898549e21daSmrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 2899549e21daSmrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 2900549e21daSmrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 2901549e21daSmrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 2902549e21daSmrg cd "$darwin_curdir" 2903549e21daSmrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 2904549e21daSmrg done # $darwin_arches 2905549e21daSmrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 2906549e21daSmrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 2907549e21daSmrg darwin_file= 2908549e21daSmrg darwin_files= 2909549e21daSmrg for darwin_file in $darwin_filelist; do 2910549e21daSmrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 2911549e21daSmrg $LIPO -create -output "$darwin_file" $darwin_files 2912549e21daSmrg done # $darwin_filelist 2913549e21daSmrg $RM -rf unfat-$$ 2914549e21daSmrg cd "$darwin_orig_dir" 2915549e21daSmrg else 2916549e21daSmrg cd $darwin_orig_dir 2917549e21daSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 2918549e21daSmrg fi # $darwin_arches 2919549e21daSmrg } # !$opt_dry_run 2920549e21daSmrg ;; 2921549e21daSmrg *) 2922549e21daSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 2923549e21daSmrg ;; 2924549e21daSmrg esac 2925549e21daSmrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 2926549e21daSmrg done 2927ba6a1819Smrg 2928549e21daSmrg func_extract_archives_result="$my_oldobjs" 2929549e21daSmrg} 2930ba6a1819Smrg 2931ba6a1819Smrg 2932549e21daSmrg# func_emit_wrapper [arg=no] 2933549e21daSmrg# 2934549e21daSmrg# Emit a libtool wrapper script on stdout. 2935549e21daSmrg# Don't directly open a file because we may want to 2936549e21daSmrg# incorporate the script contents within a cygwin/mingw 2937549e21daSmrg# wrapper executable. Must ONLY be called from within 2938549e21daSmrg# func_mode_link because it depends on a number of variables 2939549e21daSmrg# set therein. 2940549e21daSmrg# 2941549e21daSmrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 2942549e21daSmrg# variable will take. If 'yes', then the emitted script 2943549e21daSmrg# will assume that the directory in which it is stored is 2944549e21daSmrg# the $objdir directory. This is a cygwin/mingw-specific 2945549e21daSmrg# behavior. 2946549e21daSmrgfunc_emit_wrapper () 2947549e21daSmrg{ 2948549e21daSmrg func_emit_wrapper_arg1=${1-no} 2949ba6a1819Smrg 2950549e21daSmrg $ECHO "\ 2951549e21daSmrg#! $SHELL 2952ba6a1819Smrg 2953549e21daSmrg# $output - temporary wrapper script for $objdir/$outputname 2954549e21daSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 2955549e21daSmrg# 2956549e21daSmrg# The $output program cannot be directly executed until all the libtool 2957549e21daSmrg# libraries that it depends on are installed. 2958549e21daSmrg# 2959549e21daSmrg# This wrapper script should never be moved out of the build directory. 2960549e21daSmrg# If it is, it will not operate correctly. 2961ba6a1819Smrg 2962549e21daSmrg# Sed substitution that helps us do robust quoting. It backslashifies 2963549e21daSmrg# metacharacters that are still active within double-quoted strings. 2964549e21daSmrgsed_quote_subst='$sed_quote_subst' 2965ba6a1819Smrg 2966549e21daSmrg# Be Bourne compatible 2967549e21daSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 2968549e21daSmrg emulate sh 2969549e21daSmrg NULLCMD=: 2970549e21daSmrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 2971549e21daSmrg # is contrary to our usage. Disable this feature. 2972549e21daSmrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 2973549e21daSmrg setopt NO_GLOB_SUBST 2974549e21daSmrgelse 2975549e21daSmrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 2976549e21daSmrgfi 2977549e21daSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 2978549e21daSmrgDUALCASE=1; export DUALCASE # for MKS sh 2979ba6a1819Smrg 2980549e21daSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout 2981549e21daSmrg# if CDPATH is set. 2982549e21daSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 2983ba6a1819Smrg 2984549e21daSmrgrelink_command=\"$relink_command\" 2985ba6a1819Smrg 2986549e21daSmrg# This environment variable determines our operation mode. 2987549e21daSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then 2988549e21daSmrg # install mode needs the following variables: 2989549e21daSmrg generated_by_libtool_version='$macro_version' 2990549e21daSmrg notinst_deplibs='$notinst_deplibs' 2991549e21daSmrgelse 2992549e21daSmrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 2993549e21daSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 2994549e21daSmrg file=\"\$0\"" 2995ba6a1819Smrg 2996549e21daSmrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 2997549e21daSmrg $ECHO "\ 2998ba6a1819Smrg 2999549e21daSmrg# A function that is used when there is no print builtin or printf. 3000549e21daSmrgfunc_fallback_echo () 3001549e21daSmrg{ 3002549e21daSmrg eval 'cat <<_LTECHO_EOF 3003549e21daSmrg\$1 3004549e21daSmrg_LTECHO_EOF' 3005549e21daSmrg} 3006549e21daSmrg ECHO=\"$qECHO\" 3007549e21daSmrg fi 3008ba6a1819Smrg 3009549e21daSmrg# Very basic option parsing. These options are (a) specific to 3010549e21daSmrg# the libtool wrapper, (b) are identical between the wrapper 3011549e21daSmrg# /script/ and the wrapper /executable/ which is used only on 3012549e21daSmrg# windows platforms, and (c) all begin with the string "--lt-" 3013549e21daSmrg# (application programs are unlikely to have options which match 3014549e21daSmrg# this pattern). 3015549e21daSmrg# 3016549e21daSmrg# There are only two supported options: --lt-debug and 3017549e21daSmrg# --lt-dump-script. There is, deliberately, no --lt-help. 3018549e21daSmrg# 3019549e21daSmrg# The first argument to this parsing function should be the 3020549e21daSmrg# script's $0 value, followed by "$@". 3021549e21daSmrglt_option_debug= 3022549e21daSmrgfunc_parse_lt_options () 3023549e21daSmrg{ 3024549e21daSmrg lt_script_arg0=\$0 3025549e21daSmrg shift 3026549e21daSmrg for lt_opt 3027549e21daSmrg do 3028549e21daSmrg case \"\$lt_opt\" in 3029549e21daSmrg --lt-debug) lt_option_debug=1 ;; 3030549e21daSmrg --lt-dump-script) 3031549e21daSmrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 3032549e21daSmrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 3033549e21daSmrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 3034549e21daSmrg cat \"\$lt_dump_D/\$lt_dump_F\" 3035549e21daSmrg exit 0 3036549e21daSmrg ;; 3037549e21daSmrg --lt-*) 3038549e21daSmrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 3039549e21daSmrg exit 1 3040549e21daSmrg ;; 3041549e21daSmrg esac 3042549e21daSmrg done 3043ba6a1819Smrg 3044549e21daSmrg # Print the debug banner immediately: 3045549e21daSmrg if test -n \"\$lt_option_debug\"; then 3046549e21daSmrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 3047549e21daSmrg fi 3048549e21daSmrg} 3049ba6a1819Smrg 3050549e21daSmrg# Used when --lt-debug. Prints its arguments to stdout 3051549e21daSmrg# (redirection is the responsibility of the caller) 3052549e21daSmrgfunc_lt_dump_args () 3053549e21daSmrg{ 3054549e21daSmrg lt_dump_args_N=1; 3055549e21daSmrg for lt_arg 3056549e21daSmrg do 3057549e21daSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 3058549e21daSmrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 3059549e21daSmrg done 3060549e21daSmrg} 3061ba6a1819Smrg 3062549e21daSmrg# Core function for launching the target application 3063549e21daSmrgfunc_exec_program_core () 3064549e21daSmrg{ 3065549e21daSmrg" 3066549e21daSmrg case $host in 3067549e21daSmrg # Backslashes separate directories on plain windows 3068549e21daSmrg *-*-mingw | *-*-os2* | *-cegcc*) 3069549e21daSmrg $ECHO "\ 3070549e21daSmrg if test -n \"\$lt_option_debug\"; then 3071549e21daSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 3072549e21daSmrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3073549e21daSmrg fi 3074549e21daSmrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 3075549e21daSmrg" 3076549e21daSmrg ;; 3077ba6a1819Smrg 3078549e21daSmrg *) 3079549e21daSmrg $ECHO "\ 3080549e21daSmrg if test -n \"\$lt_option_debug\"; then 3081549e21daSmrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 3082549e21daSmrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3083549e21daSmrg fi 3084549e21daSmrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 3085549e21daSmrg" 3086549e21daSmrg ;; 3087549e21daSmrg esac 3088549e21daSmrg $ECHO "\ 3089549e21daSmrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 3090549e21daSmrg exit 1 3091549e21daSmrg} 3092ba6a1819Smrg 3093549e21daSmrg# A function to encapsulate launching the target application 3094549e21daSmrg# Strips options in the --lt-* namespace from \$@ and 3095549e21daSmrg# launches target application with the remaining arguments. 3096549e21daSmrgfunc_exec_program () 3097549e21daSmrg{ 3098549e21daSmrg for lt_wr_arg 3099549e21daSmrg do 3100549e21daSmrg case \$lt_wr_arg in 3101549e21daSmrg --lt-*) ;; 3102549e21daSmrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 3103549e21daSmrg esac 3104549e21daSmrg shift 3105549e21daSmrg done 3106549e21daSmrg func_exec_program_core \${1+\"\$@\"} 3107549e21daSmrg} 3108ba6a1819Smrg 3109549e21daSmrg # Parse options 3110549e21daSmrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 3111ba6a1819Smrg 3112549e21daSmrg # Find the directory that this script lives in. 3113549e21daSmrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 3114549e21daSmrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 3115ba6a1819Smrg 3116549e21daSmrg # Follow symbolic links until we get to the real thisdir. 3117549e21daSmrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 3118549e21daSmrg while test -n \"\$file\"; do 3119549e21daSmrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 3120ba6a1819Smrg 3121549e21daSmrg # If there was a directory component, then change thisdir. 3122549e21daSmrg if test \"x\$destdir\" != \"x\$file\"; then 3123549e21daSmrg case \"\$destdir\" in 3124549e21daSmrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 3125549e21daSmrg *) thisdir=\"\$thisdir/\$destdir\" ;; 3126549e21daSmrg esac 3127549e21daSmrg fi 3128ba6a1819Smrg 3129549e21daSmrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 3130549e21daSmrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 3131549e21daSmrg done 3132ba6a1819Smrg 3133549e21daSmrg # Usually 'no', except on cygwin/mingw when embedded into 3134549e21daSmrg # the cwrapper. 3135549e21daSmrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 3136549e21daSmrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 3137549e21daSmrg # special case for '.' 3138549e21daSmrg if test \"\$thisdir\" = \".\"; then 3139549e21daSmrg thisdir=\`pwd\` 3140549e21daSmrg fi 3141549e21daSmrg # remove .libs from thisdir 3142549e21daSmrg case \"\$thisdir\" in 3143549e21daSmrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 3144549e21daSmrg $objdir ) thisdir=. ;; 3145549e21daSmrg esac 3146549e21daSmrg fi 3147ba6a1819Smrg 3148549e21daSmrg # Try to get the absolute directory name. 3149549e21daSmrg absdir=\`cd \"\$thisdir\" && pwd\` 3150549e21daSmrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 3151549e21daSmrg" 3152ba6a1819Smrg 3153549e21daSmrg if test "$fast_install" = yes; then 3154549e21daSmrg $ECHO "\ 3155549e21daSmrg program=lt-'$outputname'$exeext 3156549e21daSmrg progdir=\"\$thisdir/$objdir\" 3157ba6a1819Smrg 3158549e21daSmrg if test ! -f \"\$progdir/\$program\" || 3159549e21daSmrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 3160549e21daSmrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 3161ba6a1819Smrg 3162549e21daSmrg file=\"\$\$-\$program\" 3163ba6a1819Smrg 3164549e21daSmrg if test ! -d \"\$progdir\"; then 3165549e21daSmrg $MKDIR \"\$progdir\" 3166549e21daSmrg else 3167549e21daSmrg $RM \"\$progdir/\$file\" 3168549e21daSmrg fi" 3169ba6a1819Smrg 3170549e21daSmrg $ECHO "\ 3171549e21daSmrg 3172549e21daSmrg # relink executable if necessary 3173549e21daSmrg if test -n \"\$relink_command\"; then 3174549e21daSmrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 3175549e21daSmrg else 3176549e21daSmrg $ECHO \"\$relink_command_output\" >&2 3177549e21daSmrg $RM \"\$progdir/\$file\" 3178549e21daSmrg exit 1 3179ba6a1819Smrg fi 3180549e21daSmrg fi 3181ba6a1819Smrg 3182549e21daSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 3183549e21daSmrg { $RM \"\$progdir/\$program\"; 3184549e21daSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 3185549e21daSmrg $RM \"\$progdir/\$file\" 3186549e21daSmrg fi" 3187549e21daSmrg else 3188549e21daSmrg $ECHO "\ 3189549e21daSmrg program='$outputname' 3190549e21daSmrg progdir=\"\$thisdir/$objdir\" 3191549e21daSmrg" 3192ba6a1819Smrg fi 3193ba6a1819Smrg 3194549e21daSmrg $ECHO "\ 3195ba6a1819Smrg 3196549e21daSmrg if test -f \"\$progdir/\$program\"; then" 3197ba6a1819Smrg 3198549e21daSmrg # Export our shlibpath_var if we have one. 3199549e21daSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 3200549e21daSmrg $ECHO "\ 3201549e21daSmrg # Add our own library path to $shlibpath_var 3202549e21daSmrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 3203ba6a1819Smrg 3204549e21daSmrg # Some systems cannot cope with colon-terminated $shlibpath_var 3205549e21daSmrg # The second colon is a workaround for a bug in BeOS R4 sed 3206549e21daSmrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 3207549e21daSmrg 3208549e21daSmrg export $shlibpath_var 3209549e21daSmrg" 3210ba6a1819Smrg fi 3211ba6a1819Smrg 3212549e21daSmrg # fixup the dll searchpath if we need to. 3213549e21daSmrg if test -n "$dllsearchpath"; then 3214549e21daSmrg $ECHO "\ 3215549e21daSmrg # Add the dll search path components to the executable PATH 3216549e21daSmrg PATH=$dllsearchpath:\$PATH 3217549e21daSmrg" 3218549e21daSmrg fi 3219ba6a1819Smrg 3220549e21daSmrg $ECHO "\ 3221549e21daSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 3222549e21daSmrg # Run the actual program with our arguments. 3223549e21daSmrg func_exec_program \${1+\"\$@\"} 3224549e21daSmrg fi 3225549e21daSmrg else 3226549e21daSmrg # The program doesn't exist. 3227549e21daSmrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 3228549e21daSmrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 3229549e21daSmrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 3230549e21daSmrg exit 1 3231549e21daSmrg fi 3232549e21daSmrgfi\ 3233549e21daSmrg" 3234549e21daSmrg} 3235ba6a1819Smrg 3236ba6a1819Smrg 3237549e21daSmrg# func_to_host_path arg 3238549e21daSmrg# 3239549e21daSmrg# Convert paths to host format when used with build tools. 3240549e21daSmrg# Intended for use with "native" mingw (where libtool itself 3241549e21daSmrg# is running under the msys shell), or in the following cross- 3242549e21daSmrg# build environments: 3243549e21daSmrg# $build $host 3244549e21daSmrg# mingw (msys) mingw [e.g. native] 3245549e21daSmrg# cygwin mingw 3246549e21daSmrg# *nix + wine mingw 3247549e21daSmrg# where wine is equipped with the `winepath' executable. 3248549e21daSmrg# In the native mingw case, the (msys) shell automatically 3249549e21daSmrg# converts paths for any non-msys applications it launches, 3250549e21daSmrg# but that facility isn't available from inside the cwrapper. 3251549e21daSmrg# Similar accommodations are necessary for $host mingw and 3252549e21daSmrg# $build cygwin. Calling this function does no harm for other 3253549e21daSmrg# $host/$build combinations not listed above. 3254549e21daSmrg# 3255549e21daSmrg# ARG is the path (on $build) that should be converted to 3256549e21daSmrg# the proper representation for $host. The result is stored 3257549e21daSmrg# in $func_to_host_path_result. 3258549e21daSmrgfunc_to_host_path () 3259549e21daSmrg{ 3260549e21daSmrg func_to_host_path_result="$1" 3261549e21daSmrg if test -n "$1"; then 3262549e21daSmrg case $host in 3263549e21daSmrg *mingw* ) 3264549e21daSmrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 3265549e21daSmrg case $build in 3266549e21daSmrg *mingw* ) # actually, msys 3267549e21daSmrg # awkward: cmd appends spaces to result 3268549e21daSmrg func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null | 3269549e21daSmrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 3270549e21daSmrg ;; 3271549e21daSmrg *cygwin* ) 3272549e21daSmrg func_to_host_path_result=`cygpath -w "$1" | 3273549e21daSmrg $SED -e "$lt_sed_naive_backslashify"` 3274549e21daSmrg ;; 3275549e21daSmrg * ) 3276549e21daSmrg # Unfortunately, winepath does not exit with a non-zero 3277549e21daSmrg # error code, so we are forced to check the contents of 3278549e21daSmrg # stdout. On the other hand, if the command is not 3279549e21daSmrg # found, the shell will set an exit code of 127 and print 3280549e21daSmrg # *an error message* to stdout. So we must check for both 3281549e21daSmrg # error code of zero AND non-empty stdout, which explains 3282549e21daSmrg # the odd construction: 3283549e21daSmrg func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` 3284549e21daSmrg if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then 3285549e21daSmrg func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" | 3286549e21daSmrg $SED -e "$lt_sed_naive_backslashify"` 3287549e21daSmrg else 3288549e21daSmrg # Allow warning below. 3289549e21daSmrg func_to_host_path_result= 3290549e21daSmrg fi 3291549e21daSmrg ;; 3292549e21daSmrg esac 3293549e21daSmrg if test -z "$func_to_host_path_result" ; then 3294549e21daSmrg func_error "Could not determine host path corresponding to" 3295549e21daSmrg func_error " \`$1'" 3296549e21daSmrg func_error "Continuing, but uninstalled executables may not work." 3297549e21daSmrg # Fallback: 3298549e21daSmrg func_to_host_path_result="$1" 3299549e21daSmrg fi 3300549e21daSmrg ;; 3301549e21daSmrg esac 3302549e21daSmrg fi 3303549e21daSmrg} 3304549e21daSmrg# end: func_to_host_path 3305549e21daSmrg 3306549e21daSmrg# func_to_host_pathlist arg 3307549e21daSmrg# 3308549e21daSmrg# Convert pathlists to host format when used with build tools. 3309549e21daSmrg# See func_to_host_path(), above. This function supports the 3310549e21daSmrg# following $build/$host combinations (but does no harm for 3311549e21daSmrg# combinations not listed here): 3312549e21daSmrg# $build $host 3313549e21daSmrg# mingw (msys) mingw [e.g. native] 3314549e21daSmrg# cygwin mingw 3315549e21daSmrg# *nix + wine mingw 3316549e21daSmrg# 3317549e21daSmrg# Path separators are also converted from $build format to 3318549e21daSmrg# $host format. If ARG begins or ends with a path separator 3319549e21daSmrg# character, it is preserved (but converted to $host format) 3320549e21daSmrg# on output. 3321549e21daSmrg# 3322549e21daSmrg# ARG is a pathlist (on $build) that should be converted to 3323549e21daSmrg# the proper representation on $host. The result is stored 3324549e21daSmrg# in $func_to_host_pathlist_result. 3325549e21daSmrgfunc_to_host_pathlist () 3326549e21daSmrg{ 3327549e21daSmrg func_to_host_pathlist_result="$1" 3328549e21daSmrg if test -n "$1"; then 3329549e21daSmrg case $host in 3330549e21daSmrg *mingw* ) 3331549e21daSmrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 3332549e21daSmrg # Remove leading and trailing path separator characters from 3333549e21daSmrg # ARG. msys behavior is inconsistent here, cygpath turns them 3334549e21daSmrg # into '.;' and ';.', and winepath ignores them completely. 3335549e21daSmrg func_stripname : : "$1" 3336549e21daSmrg func_to_host_pathlist_tmp1=$func_stripname_result 3337549e21daSmrg case $build in 3338549e21daSmrg *mingw* ) # Actually, msys. 3339549e21daSmrg # Awkward: cmd appends spaces to result. 3340549e21daSmrg func_to_host_pathlist_result=` 3341549e21daSmrg ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null | 3342549e21daSmrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 3343549e21daSmrg ;; 3344549e21daSmrg *cygwin* ) 3345549e21daSmrg func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" | 3346549e21daSmrg $SED -e "$lt_sed_naive_backslashify"` 3347549e21daSmrg ;; 3348549e21daSmrg * ) 3349549e21daSmrg # unfortunately, winepath doesn't convert pathlists 3350549e21daSmrg func_to_host_pathlist_result="" 3351549e21daSmrg func_to_host_pathlist_oldIFS=$IFS 3352549e21daSmrg IFS=: 3353549e21daSmrg for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do 3354549e21daSmrg IFS=$func_to_host_pathlist_oldIFS 3355549e21daSmrg if test -n "$func_to_host_pathlist_f" ; then 3356549e21daSmrg func_to_host_path "$func_to_host_pathlist_f" 3357549e21daSmrg if test -n "$func_to_host_path_result" ; then 3358549e21daSmrg if test -z "$func_to_host_pathlist_result" ; then 3359549e21daSmrg func_to_host_pathlist_result="$func_to_host_path_result" 3360549e21daSmrg else 3361549e21daSmrg func_append func_to_host_pathlist_result ";$func_to_host_path_result" 3362549e21daSmrg fi 3363549e21daSmrg fi 3364549e21daSmrg fi 3365549e21daSmrg done 3366549e21daSmrg IFS=$func_to_host_pathlist_oldIFS 3367549e21daSmrg ;; 3368549e21daSmrg esac 3369549e21daSmrg if test -z "$func_to_host_pathlist_result"; then 3370549e21daSmrg func_error "Could not determine the host path(s) corresponding to" 3371549e21daSmrg func_error " \`$1'" 3372549e21daSmrg func_error "Continuing, but uninstalled executables may not work." 3373549e21daSmrg # Fallback. This may break if $1 contains DOS-style drive 3374549e21daSmrg # specifications. The fix is not to complicate the expression 3375549e21daSmrg # below, but for the user to provide a working wine installation 3376549e21daSmrg # with winepath so that path translation in the cross-to-mingw 3377549e21daSmrg # case works properly. 3378549e21daSmrg lt_replace_pathsep_nix_to_dos="s|:|;|g" 3379549e21daSmrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ 3380549e21daSmrg $SED -e "$lt_replace_pathsep_nix_to_dos"` 3381549e21daSmrg fi 3382549e21daSmrg # Now, add the leading and trailing path separators back 3383549e21daSmrg case "$1" in 3384549e21daSmrg :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" 3385549e21daSmrg ;; 3386549e21daSmrg esac 3387549e21daSmrg case "$1" in 3388549e21daSmrg *: ) func_append func_to_host_pathlist_result ";" 3389549e21daSmrg ;; 3390549e21daSmrg esac 3391549e21daSmrg ;; 3392549e21daSmrg esac 3393549e21daSmrg fi 3394549e21daSmrg} 3395549e21daSmrg# end: func_to_host_pathlist 3396549e21daSmrg 3397549e21daSmrg# func_emit_cwrapperexe_src 3398549e21daSmrg# emit the source code for a wrapper executable on stdout 3399549e21daSmrg# Must ONLY be called from within func_mode_link because 3400549e21daSmrg# it depends on a number of variable set therein. 3401549e21daSmrgfunc_emit_cwrapperexe_src () 3402549e21daSmrg{ 3403549e21daSmrg cat <<EOF 3404549e21daSmrg 3405549e21daSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 3406549e21daSmrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3407549e21daSmrg 3408549e21daSmrg The $output program cannot be directly executed until all the libtool 3409549e21daSmrg libraries that it depends on are installed. 3410549e21daSmrg 3411549e21daSmrg This wrapper executable should never be moved out of the build directory. 3412549e21daSmrg If it is, it will not operate correctly. 3413549e21daSmrg*/ 3414549e21daSmrgEOF 3415549e21daSmrg cat <<"EOF" 3416549e21daSmrg#ifdef _MSC_VER 3417549e21daSmrg# define _CRT_SECURE_NO_DEPRECATE 1 3418549e21daSmrg#endif 3419549e21daSmrg#include <stdio.h> 3420549e21daSmrg#include <stdlib.h> 3421549e21daSmrg#ifdef _MSC_VER 3422549e21daSmrg# include <direct.h> 3423549e21daSmrg# include <process.h> 3424549e21daSmrg# include <io.h> 3425549e21daSmrg#else 3426549e21daSmrg# include <unistd.h> 3427549e21daSmrg# include <stdint.h> 3428549e21daSmrg# ifdef __CYGWIN__ 3429549e21daSmrg# include <io.h> 3430549e21daSmrg# endif 3431549e21daSmrg#endif 3432549e21daSmrg#include <malloc.h> 3433549e21daSmrg#include <stdarg.h> 3434549e21daSmrg#include <assert.h> 3435549e21daSmrg#include <string.h> 3436549e21daSmrg#include <ctype.h> 3437549e21daSmrg#include <errno.h> 3438549e21daSmrg#include <fcntl.h> 3439549e21daSmrg#include <sys/stat.h> 3440549e21daSmrg 3441549e21daSmrg/* declarations of non-ANSI functions */ 3442549e21daSmrg#if defined(__MINGW32__) 3443549e21daSmrg# ifdef __STRICT_ANSI__ 3444549e21daSmrgint _putenv (const char *); 3445549e21daSmrg# endif 3446549e21daSmrg#elif defined(__CYGWIN__) 3447549e21daSmrg# ifdef __STRICT_ANSI__ 3448549e21daSmrgchar *realpath (const char *, char *); 3449549e21daSmrgint putenv (char *); 3450549e21daSmrgint setenv (const char *, const char *, int); 3451549e21daSmrg# endif 3452549e21daSmrg/* #elif defined (other platforms) ... */ 3453549e21daSmrg#endif 3454549e21daSmrg 3455549e21daSmrg/* portability defines, excluding path handling macros */ 3456549e21daSmrg#if defined(_MSC_VER) 3457549e21daSmrg# define setmode _setmode 3458549e21daSmrg# define stat _stat 3459549e21daSmrg# define chmod _chmod 3460549e21daSmrg# define getcwd _getcwd 3461549e21daSmrg# define putenv _putenv 3462549e21daSmrg# define S_IXUSR _S_IEXEC 3463549e21daSmrg# ifndef _INTPTR_T_DEFINED 3464549e21daSmrg# define _INTPTR_T_DEFINED 3465549e21daSmrg# define intptr_t int 3466549e21daSmrg# endif 3467549e21daSmrg#elif defined(__MINGW32__) 3468549e21daSmrg# define setmode _setmode 3469549e21daSmrg# define stat _stat 3470549e21daSmrg# define chmod _chmod 3471549e21daSmrg# define getcwd _getcwd 3472549e21daSmrg# define putenv _putenv 3473549e21daSmrg#elif defined(__CYGWIN__) 3474549e21daSmrg# define HAVE_SETENV 3475549e21daSmrg# define FOPEN_WB "wb" 3476549e21daSmrg/* #elif defined (other platforms) ... */ 3477549e21daSmrg#endif 3478549e21daSmrg 3479549e21daSmrg#if defined(PATH_MAX) 3480549e21daSmrg# define LT_PATHMAX PATH_MAX 3481549e21daSmrg#elif defined(MAXPATHLEN) 3482549e21daSmrg# define LT_PATHMAX MAXPATHLEN 3483549e21daSmrg#else 3484549e21daSmrg# define LT_PATHMAX 1024 3485549e21daSmrg#endif 3486549e21daSmrg 3487549e21daSmrg#ifndef S_IXOTH 3488549e21daSmrg# define S_IXOTH 0 3489549e21daSmrg#endif 3490549e21daSmrg#ifndef S_IXGRP 3491549e21daSmrg# define S_IXGRP 0 3492549e21daSmrg#endif 3493549e21daSmrg 3494549e21daSmrg/* path handling portability macros */ 3495549e21daSmrg#ifndef DIR_SEPARATOR 3496549e21daSmrg# define DIR_SEPARATOR '/' 3497549e21daSmrg# define PATH_SEPARATOR ':' 3498549e21daSmrg#endif 3499549e21daSmrg 3500549e21daSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 3501549e21daSmrg defined (__OS2__) 3502549e21daSmrg# define HAVE_DOS_BASED_FILE_SYSTEM 3503549e21daSmrg# define FOPEN_WB "wb" 3504549e21daSmrg# ifndef DIR_SEPARATOR_2 3505549e21daSmrg# define DIR_SEPARATOR_2 '\\' 3506549e21daSmrg# endif 3507549e21daSmrg# ifndef PATH_SEPARATOR_2 3508549e21daSmrg# define PATH_SEPARATOR_2 ';' 3509549e21daSmrg# endif 3510549e21daSmrg#endif 3511549e21daSmrg 3512549e21daSmrg#ifndef DIR_SEPARATOR_2 3513549e21daSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 3514549e21daSmrg#else /* DIR_SEPARATOR_2 */ 3515549e21daSmrg# define IS_DIR_SEPARATOR(ch) \ 3516549e21daSmrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 3517549e21daSmrg#endif /* DIR_SEPARATOR_2 */ 3518549e21daSmrg 3519549e21daSmrg#ifndef PATH_SEPARATOR_2 3520549e21daSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 3521549e21daSmrg#else /* PATH_SEPARATOR_2 */ 3522549e21daSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 3523549e21daSmrg#endif /* PATH_SEPARATOR_2 */ 3524549e21daSmrg 3525549e21daSmrg#ifndef FOPEN_WB 3526549e21daSmrg# define FOPEN_WB "w" 3527549e21daSmrg#endif 3528549e21daSmrg#ifndef _O_BINARY 3529549e21daSmrg# define _O_BINARY 0 3530549e21daSmrg#endif 3531549e21daSmrg 3532549e21daSmrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 3533549e21daSmrg#define XFREE(stale) do { \ 3534549e21daSmrg if (stale) { free ((void *) stale); stale = 0; } \ 3535549e21daSmrg} while (0) 3536549e21daSmrg 3537549e21daSmrg#if defined(LT_DEBUGWRAPPER) 3538549e21daSmrgstatic int lt_debug = 1; 3539549e21daSmrg#else 3540549e21daSmrgstatic int lt_debug = 0; 3541549e21daSmrg#endif 3542549e21daSmrg 3543549e21daSmrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 3544549e21daSmrg 3545549e21daSmrgvoid *xmalloc (size_t num); 3546549e21daSmrgchar *xstrdup (const char *string); 3547549e21daSmrgconst char *base_name (const char *name); 3548549e21daSmrgchar *find_executable (const char *wrapper); 3549549e21daSmrgchar *chase_symlinks (const char *pathspec); 3550549e21daSmrgint make_executable (const char *path); 3551549e21daSmrgint check_executable (const char *path); 3552549e21daSmrgchar *strendzap (char *str, const char *pat); 3553549e21daSmrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 3554549e21daSmrgvoid lt_fatal (const char *file, int line, const char *message, ...); 3555549e21daSmrgstatic const char *nonnull (const char *s); 3556549e21daSmrgstatic const char *nonempty (const char *s); 3557549e21daSmrgvoid lt_setenv (const char *name, const char *value); 3558549e21daSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 3559549e21daSmrgvoid lt_update_exe_path (const char *name, const char *value); 3560549e21daSmrgvoid lt_update_lib_path (const char *name, const char *value); 3561549e21daSmrgchar **prepare_spawn (char **argv); 3562549e21daSmrgvoid lt_dump_script (FILE *f); 3563549e21daSmrgEOF 3564549e21daSmrg 3565549e21daSmrg cat <<EOF 3566549e21daSmrgconst char * MAGIC_EXE = "$magic_exe"; 3567549e21daSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 3568549e21daSmrgEOF 3569549e21daSmrg 3570549e21daSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 3571549e21daSmrg func_to_host_pathlist "$temp_rpath" 3572549e21daSmrg cat <<EOF 3573549e21daSmrgconst char * LIB_PATH_VALUE = "$func_to_host_pathlist_result"; 3574ba6a1819SmrgEOF 3575ba6a1819Smrg else 3576549e21daSmrg cat <<"EOF" 3577549e21daSmrgconst char * LIB_PATH_VALUE = ""; 3578549e21daSmrgEOF 3579ba6a1819Smrg fi 3580549e21daSmrg 3581549e21daSmrg if test -n "$dllsearchpath"; then 3582549e21daSmrg func_to_host_pathlist "$dllsearchpath:" 3583549e21daSmrg cat <<EOF 3584549e21daSmrgconst char * EXE_PATH_VARNAME = "PATH"; 3585549e21daSmrgconst char * EXE_PATH_VALUE = "$func_to_host_pathlist_result"; 3586549e21daSmrgEOF 3587ba6a1819Smrg else 3588549e21daSmrg cat <<"EOF" 3589549e21daSmrgconst char * EXE_PATH_VARNAME = ""; 3590549e21daSmrgconst char * EXE_PATH_VALUE = ""; 3591549e21daSmrgEOF 3592ba6a1819Smrg fi 3593ba6a1819Smrg 3594549e21daSmrg if test "$fast_install" = yes; then 3595549e21daSmrg cat <<EOF 3596549e21daSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 3597549e21daSmrgEOF 3598ba6a1819Smrg else 3599549e21daSmrg cat <<EOF 3600549e21daSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 3601549e21daSmrgEOF 3602ba6a1819Smrg fi 3603ba6a1819Smrg 3604ba6a1819Smrg 3605549e21daSmrg cat <<"EOF" 3606ba6a1819Smrg 3607549e21daSmrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 3608ba6a1819Smrg 3609549e21daSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 3610549e21daSmrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 3611549e21daSmrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 3612ba6a1819Smrg 3613549e21daSmrgint 3614549e21daSmrgmain (int argc, char *argv[]) 3615549e21daSmrg{ 3616549e21daSmrg char **newargz; 3617549e21daSmrg int newargc; 3618549e21daSmrg char *tmp_pathspec; 3619549e21daSmrg char *actual_cwrapper_path; 3620549e21daSmrg char *actual_cwrapper_name; 3621549e21daSmrg char *target_name; 3622549e21daSmrg char *lt_argv_zero; 3623549e21daSmrg intptr_t rval = 127; 3624ba6a1819Smrg 3625549e21daSmrg int i; 3626ba6a1819Smrg 3627549e21daSmrg program_name = (char *) xstrdup (base_name (argv[0])); 3628549e21daSmrg newargz = XMALLOC (char *, argc + 1); 3629ba6a1819Smrg 3630549e21daSmrg /* very simple arg parsing; don't want to rely on getopt 3631549e21daSmrg * also, copy all non cwrapper options to newargz, except 3632549e21daSmrg * argz[0], which is handled differently 3633549e21daSmrg */ 3634549e21daSmrg newargc=0; 3635549e21daSmrg for (i = 1; i < argc; i++) 3636549e21daSmrg { 3637549e21daSmrg if (strcmp (argv[i], dumpscript_opt) == 0) 3638549e21daSmrg { 3639549e21daSmrgEOF 3640549e21daSmrg case "$host" in 3641549e21daSmrg *mingw* | *cygwin* ) 3642549e21daSmrg # make stdout use "unix" line endings 3643549e21daSmrg echo " setmode(1,_O_BINARY);" 3644549e21daSmrg ;; 3645549e21daSmrg esac 3646ba6a1819Smrg 3647549e21daSmrg cat <<"EOF" 3648549e21daSmrg lt_dump_script (stdout); 3649549e21daSmrg return 0; 3650549e21daSmrg } 3651549e21daSmrg if (strcmp (argv[i], debug_opt) == 0) 3652549e21daSmrg { 3653549e21daSmrg lt_debug = 1; 3654549e21daSmrg continue; 3655549e21daSmrg } 3656549e21daSmrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 3657549e21daSmrg { 3658549e21daSmrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 3659549e21daSmrg namespace, but it is not one of the ones we know about and 3660549e21daSmrg have already dealt with, above (inluding dump-script), then 3661549e21daSmrg report an error. Otherwise, targets might begin to believe 3662549e21daSmrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 3663549e21daSmrg namespace. The first time any user complains about this, we'll 3664549e21daSmrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 3665549e21daSmrg or a configure.ac-settable value. 3666549e21daSmrg */ 3667549e21daSmrg lt_fatal (__FILE__, __LINE__, 3668549e21daSmrg "unrecognized %s option: '%s'", 3669549e21daSmrg ltwrapper_option_prefix, argv[i]); 3670549e21daSmrg } 3671549e21daSmrg /* otherwise ... */ 3672549e21daSmrg newargz[++newargc] = xstrdup (argv[i]); 3673549e21daSmrg } 3674549e21daSmrg newargz[++newargc] = NULL; 3675ba6a1819Smrg 3676549e21daSmrgEOF 3677549e21daSmrg cat <<EOF 3678549e21daSmrg /* The GNU banner must be the first non-error debug message */ 3679549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 3680549e21daSmrgEOF 3681549e21daSmrg cat <<"EOF" 3682549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 3683549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 3684549e21daSmrg 3685549e21daSmrg tmp_pathspec = find_executable (argv[0]); 3686549e21daSmrg if (tmp_pathspec == NULL) 3687549e21daSmrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 3688549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 3689549e21daSmrg "(main) found exe (before symlink chase) at: %s\n", 3690549e21daSmrg tmp_pathspec); 3691549e21daSmrg 3692549e21daSmrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 3693549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 3694549e21daSmrg "(main) found exe (after symlink chase) at: %s\n", 3695549e21daSmrg actual_cwrapper_path); 3696549e21daSmrg XFREE (tmp_pathspec); 3697549e21daSmrg 3698549e21daSmrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 3699549e21daSmrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 3700549e21daSmrg 3701549e21daSmrg /* wrapper name transforms */ 3702549e21daSmrg strendzap (actual_cwrapper_name, ".exe"); 3703549e21daSmrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 3704549e21daSmrg XFREE (actual_cwrapper_name); 3705549e21daSmrg actual_cwrapper_name = tmp_pathspec; 3706549e21daSmrg tmp_pathspec = 0; 3707549e21daSmrg 3708549e21daSmrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 3709549e21daSmrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 3710549e21daSmrg strendzap (target_name, ".exe"); 3711549e21daSmrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 3712549e21daSmrg XFREE (target_name); 3713549e21daSmrg target_name = tmp_pathspec; 3714549e21daSmrg tmp_pathspec = 0; 3715549e21daSmrg 3716549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 3717549e21daSmrg "(main) libtool target name: %s\n", 3718549e21daSmrg target_name); 3719549e21daSmrgEOF 3720ba6a1819Smrg 3721549e21daSmrg cat <<EOF 3722549e21daSmrg newargz[0] = 3723549e21daSmrg XMALLOC (char, (strlen (actual_cwrapper_path) + 3724549e21daSmrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 3725549e21daSmrg strcpy (newargz[0], actual_cwrapper_path); 3726549e21daSmrg strcat (newargz[0], "$objdir"); 3727549e21daSmrg strcat (newargz[0], "/"); 3728549e21daSmrgEOF 3729ba6a1819Smrg 3730549e21daSmrg cat <<"EOF" 3731549e21daSmrg /* stop here, and copy so we don't have to do this twice */ 3732549e21daSmrg tmp_pathspec = xstrdup (newargz[0]); 3733ba6a1819Smrg 3734549e21daSmrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 3735549e21daSmrg strcat (newargz[0], actual_cwrapper_name); 3736ba6a1819Smrg 3737549e21daSmrg /* DO want the lt- prefix here if it exists, so use target_name */ 3738549e21daSmrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 3739549e21daSmrg XFREE (tmp_pathspec); 3740549e21daSmrg tmp_pathspec = NULL; 3741549e21daSmrgEOF 3742ba6a1819Smrg 3743549e21daSmrg case $host_os in 3744549e21daSmrg mingw*) 3745549e21daSmrg cat <<"EOF" 3746549e21daSmrg { 3747549e21daSmrg char* p; 3748549e21daSmrg while ((p = strchr (newargz[0], '\\')) != NULL) 3749549e21daSmrg { 3750549e21daSmrg *p = '/'; 3751549e21daSmrg } 3752549e21daSmrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 3753549e21daSmrg { 3754549e21daSmrg *p = '/'; 3755549e21daSmrg } 3756549e21daSmrg } 3757549e21daSmrgEOF 3758549e21daSmrg ;; 3759549e21daSmrg esac 3760ba6a1819Smrg 3761549e21daSmrg cat <<"EOF" 3762549e21daSmrg XFREE (target_name); 3763549e21daSmrg XFREE (actual_cwrapper_path); 3764549e21daSmrg XFREE (actual_cwrapper_name); 3765ba6a1819Smrg 3766549e21daSmrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 3767549e21daSmrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 3768549e21daSmrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 3769549e21daSmrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 3770ba6a1819Smrg 3771549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 3772549e21daSmrg nonnull (lt_argv_zero)); 3773549e21daSmrg for (i = 0; i < newargc; i++) 3774549e21daSmrg { 3775549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 3776549e21daSmrg i, nonnull (newargz[i])); 3777549e21daSmrg } 3778ba6a1819Smrg 3779549e21daSmrgEOF 3780ba6a1819Smrg 3781549e21daSmrg case $host_os in 3782549e21daSmrg mingw*) 3783549e21daSmrg cat <<"EOF" 3784549e21daSmrg /* execv doesn't actually work on mingw as expected on unix */ 3785549e21daSmrg newargz = prepare_spawn (newargz); 3786549e21daSmrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 3787549e21daSmrg if (rval == -1) 3788549e21daSmrg { 3789549e21daSmrg /* failed to start process */ 3790549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 3791549e21daSmrg "(main) failed to launch target \"%s\": %s\n", 3792549e21daSmrg lt_argv_zero, nonnull (strerror (errno))); 3793549e21daSmrg return 127; 3794549e21daSmrg } 3795549e21daSmrg return rval; 3796549e21daSmrgEOF 3797549e21daSmrg ;; 3798549e21daSmrg *) 3799549e21daSmrg cat <<"EOF" 3800549e21daSmrg execv (lt_argv_zero, newargz); 3801549e21daSmrg return rval; /* =127, but avoids unused variable warning */ 3802549e21daSmrgEOF 3803549e21daSmrg ;; 3804549e21daSmrg esac 3805ba6a1819Smrg 3806549e21daSmrg cat <<"EOF" 3807549e21daSmrg} 3808ba6a1819Smrg 3809549e21daSmrgvoid * 3810549e21daSmrgxmalloc (size_t num) 3811549e21daSmrg{ 3812549e21daSmrg void *p = (void *) malloc (num); 3813549e21daSmrg if (!p) 3814549e21daSmrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 3815ba6a1819Smrg 3816549e21daSmrg return p; 3817549e21daSmrg} 3818ba6a1819Smrg 3819549e21daSmrgchar * 3820549e21daSmrgxstrdup (const char *string) 3821549e21daSmrg{ 3822549e21daSmrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 3823549e21daSmrg string) : NULL; 3824549e21daSmrg} 3825ba6a1819Smrg 3826549e21daSmrgconst char * 3827549e21daSmrgbase_name (const char *name) 3828549e21daSmrg{ 3829549e21daSmrg const char *base; 3830ba6a1819Smrg 3831549e21daSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3832549e21daSmrg /* Skip over the disk name in MSDOS pathnames. */ 3833549e21daSmrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 3834549e21daSmrg name += 2; 3835549e21daSmrg#endif 3836ba6a1819Smrg 3837549e21daSmrg for (base = name; *name; name++) 3838549e21daSmrg if (IS_DIR_SEPARATOR (*name)) 3839549e21daSmrg base = name + 1; 3840549e21daSmrg return base; 3841549e21daSmrg} 3842ba6a1819Smrg 3843549e21daSmrgint 3844549e21daSmrgcheck_executable (const char *path) 3845549e21daSmrg{ 3846549e21daSmrg struct stat st; 3847ba6a1819Smrg 3848549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 3849549e21daSmrg nonempty (path)); 3850549e21daSmrg if ((!path) || (!*path)) 3851549e21daSmrg return 0; 3852ba6a1819Smrg 3853549e21daSmrg if ((stat (path, &st) >= 0) 3854549e21daSmrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 3855549e21daSmrg return 1; 3856549e21daSmrg else 3857549e21daSmrg return 0; 3858549e21daSmrg} 3859ba6a1819Smrg 3860549e21daSmrgint 3861549e21daSmrgmake_executable (const char *path) 3862549e21daSmrg{ 3863549e21daSmrg int rval = 0; 3864549e21daSmrg struct stat st; 3865ba6a1819Smrg 3866549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 3867549e21daSmrg nonempty (path)); 3868549e21daSmrg if ((!path) || (!*path)) 3869549e21daSmrg return 0; 3870ba6a1819Smrg 3871549e21daSmrg if (stat (path, &st) >= 0) 3872549e21daSmrg { 3873549e21daSmrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 3874549e21daSmrg } 3875549e21daSmrg return rval; 3876549e21daSmrg} 3877ba6a1819Smrg 3878549e21daSmrg/* Searches for the full path of the wrapper. Returns 3879549e21daSmrg newly allocated full path name if found, NULL otherwise 3880549e21daSmrg Does not chase symlinks, even on platforms that support them. 3881549e21daSmrg*/ 3882549e21daSmrgchar * 3883549e21daSmrgfind_executable (const char *wrapper) 3884549e21daSmrg{ 3885549e21daSmrg int has_slash = 0; 3886549e21daSmrg const char *p; 3887549e21daSmrg const char *p_next; 3888549e21daSmrg /* static buffer for getcwd */ 3889549e21daSmrg char tmp[LT_PATHMAX + 1]; 3890549e21daSmrg int tmp_len; 3891549e21daSmrg char *concat_name; 3892ba6a1819Smrg 3893549e21daSmrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 3894549e21daSmrg nonempty (wrapper)); 3895ba6a1819Smrg 3896549e21daSmrg if ((wrapper == NULL) || (*wrapper == '\0')) 3897549e21daSmrg return NULL; 3898ba6a1819Smrg 3899549e21daSmrg /* Absolute path? */ 3900549e21daSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3901549e21daSmrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 3902549e21daSmrg { 3903549e21daSmrg concat_name = xstrdup (wrapper); 3904549e21daSmrg if (check_executable (concat_name)) 3905549e21daSmrg return concat_name; 3906549e21daSmrg XFREE (concat_name); 3907549e21daSmrg } 3908549e21daSmrg else 3909549e21daSmrg { 3910549e21daSmrg#endif 3911549e21daSmrg if (IS_DIR_SEPARATOR (wrapper[0])) 3912549e21daSmrg { 3913549e21daSmrg concat_name = xstrdup (wrapper); 3914549e21daSmrg if (check_executable (concat_name)) 3915549e21daSmrg return concat_name; 3916549e21daSmrg XFREE (concat_name); 3917549e21daSmrg } 3918549e21daSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3919549e21daSmrg } 3920549e21daSmrg#endif 3921ba6a1819Smrg 3922549e21daSmrg for (p = wrapper; *p; p++) 3923549e21daSmrg if (*p == '/') 3924549e21daSmrg { 3925549e21daSmrg has_slash = 1; 3926549e21daSmrg break; 3927549e21daSmrg } 3928549e21daSmrg if (!has_slash) 3929549e21daSmrg { 3930549e21daSmrg /* no slashes; search PATH */ 3931549e21daSmrg const char *path = getenv ("PATH"); 3932549e21daSmrg if (path != NULL) 3933549e21daSmrg { 3934549e21daSmrg for (p = path; *p; p = p_next) 3935549e21daSmrg { 3936549e21daSmrg const char *q; 3937549e21daSmrg size_t p_len; 3938549e21daSmrg for (q = p; *q; q++) 3939549e21daSmrg if (IS_PATH_SEPARATOR (*q)) 3940549e21daSmrg break; 3941549e21daSmrg p_len = q - p; 3942549e21daSmrg p_next = (*q == '\0' ? q : q + 1); 3943549e21daSmrg if (p_len == 0) 3944549e21daSmrg { 3945549e21daSmrg /* empty path: current directory */ 3946549e21daSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 3947549e21daSmrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 3948549e21daSmrg nonnull (strerror (errno))); 3949549e21daSmrg tmp_len = strlen (tmp); 3950549e21daSmrg concat_name = 3951549e21daSmrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 3952549e21daSmrg memcpy (concat_name, tmp, tmp_len); 3953549e21daSmrg concat_name[tmp_len] = '/'; 3954549e21daSmrg strcpy (concat_name + tmp_len + 1, wrapper); 3955549e21daSmrg } 3956549e21daSmrg else 3957549e21daSmrg { 3958549e21daSmrg concat_name = 3959549e21daSmrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 3960549e21daSmrg memcpy (concat_name, p, p_len); 3961549e21daSmrg concat_name[p_len] = '/'; 3962549e21daSmrg strcpy (concat_name + p_len + 1, wrapper); 3963549e21daSmrg } 3964549e21daSmrg if (check_executable (concat_name)) 3965549e21daSmrg return concat_name; 3966549e21daSmrg XFREE (concat_name); 3967549e21daSmrg } 3968549e21daSmrg } 3969549e21daSmrg /* not found in PATH; assume curdir */ 3970549e21daSmrg } 3971549e21daSmrg /* Relative path | not found in path: prepend cwd */ 3972549e21daSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 3973549e21daSmrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 3974549e21daSmrg nonnull (strerror (errno))); 3975549e21daSmrg tmp_len = strlen (tmp); 3976549e21daSmrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 3977549e21daSmrg memcpy (concat_name, tmp, tmp_len); 3978549e21daSmrg concat_name[tmp_len] = '/'; 3979549e21daSmrg strcpy (concat_name + tmp_len + 1, wrapper); 3980ba6a1819Smrg 3981549e21daSmrg if (check_executable (concat_name)) 3982549e21daSmrg return concat_name; 3983549e21daSmrg XFREE (concat_name); 3984549e21daSmrg return NULL; 3985549e21daSmrg} 3986ba6a1819Smrg 3987549e21daSmrgchar * 3988549e21daSmrgchase_symlinks (const char *pathspec) 3989549e21daSmrg{ 3990549e21daSmrg#ifndef S_ISLNK 3991549e21daSmrg return xstrdup (pathspec); 3992549e21daSmrg#else 3993549e21daSmrg char buf[LT_PATHMAX]; 3994549e21daSmrg struct stat s; 3995549e21daSmrg char *tmp_pathspec = xstrdup (pathspec); 3996549e21daSmrg char *p; 3997549e21daSmrg int has_symlinks = 0; 3998549e21daSmrg while (strlen (tmp_pathspec) && !has_symlinks) 3999549e21daSmrg { 4000549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 4001549e21daSmrg "checking path component for symlinks: %s\n", 4002549e21daSmrg tmp_pathspec); 4003549e21daSmrg if (lstat (tmp_pathspec, &s) == 0) 4004549e21daSmrg { 4005549e21daSmrg if (S_ISLNK (s.st_mode) != 0) 4006549e21daSmrg { 4007549e21daSmrg has_symlinks = 1; 4008549e21daSmrg break; 4009549e21daSmrg } 4010ba6a1819Smrg 4011549e21daSmrg /* search backwards for last DIR_SEPARATOR */ 4012549e21daSmrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4013549e21daSmrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4014549e21daSmrg p--; 4015549e21daSmrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4016549e21daSmrg { 4017549e21daSmrg /* no more DIR_SEPARATORS left */ 4018549e21daSmrg break; 4019549e21daSmrg } 4020549e21daSmrg *p = '\0'; 4021549e21daSmrg } 4022549e21daSmrg else 4023549e21daSmrg { 4024549e21daSmrg lt_fatal (__FILE__, __LINE__, 4025549e21daSmrg "error accessing file \"%s\": %s", 4026549e21daSmrg tmp_pathspec, nonnull (strerror (errno))); 4027549e21daSmrg } 4028549e21daSmrg } 4029549e21daSmrg XFREE (tmp_pathspec); 4030ba6a1819Smrg 4031549e21daSmrg if (!has_symlinks) 4032549e21daSmrg { 4033549e21daSmrg return xstrdup (pathspec); 4034549e21daSmrg } 4035ba6a1819Smrg 4036549e21daSmrg tmp_pathspec = realpath (pathspec, buf); 4037549e21daSmrg if (tmp_pathspec == 0) 4038549e21daSmrg { 4039549e21daSmrg lt_fatal (__FILE__, __LINE__, 4040549e21daSmrg "could not follow symlinks for %s", pathspec); 4041549e21daSmrg } 4042549e21daSmrg return xstrdup (tmp_pathspec); 4043549e21daSmrg#endif 4044549e21daSmrg} 4045ba6a1819Smrg 4046549e21daSmrgchar * 4047549e21daSmrgstrendzap (char *str, const char *pat) 4048549e21daSmrg{ 4049549e21daSmrg size_t len, patlen; 4050ba6a1819Smrg 4051549e21daSmrg assert (str != NULL); 4052549e21daSmrg assert (pat != NULL); 4053ba6a1819Smrg 4054549e21daSmrg len = strlen (str); 4055549e21daSmrg patlen = strlen (pat); 4056ba6a1819Smrg 4057549e21daSmrg if (patlen <= len) 4058549e21daSmrg { 4059549e21daSmrg str += len - patlen; 4060549e21daSmrg if (strcmp (str, pat) == 0) 4061549e21daSmrg *str = '\0'; 4062549e21daSmrg } 4063549e21daSmrg return str; 4064549e21daSmrg} 4065ba6a1819Smrg 4066549e21daSmrgvoid 4067549e21daSmrglt_debugprintf (const char *file, int line, const char *fmt, ...) 4068549e21daSmrg{ 4069549e21daSmrg va_list args; 4070549e21daSmrg if (lt_debug) 4071549e21daSmrg { 4072549e21daSmrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 4073549e21daSmrg va_start (args, fmt); 4074549e21daSmrg (void) vfprintf (stderr, fmt, args); 4075549e21daSmrg va_end (args); 4076549e21daSmrg } 4077549e21daSmrg} 4078ba6a1819Smrg 4079549e21daSmrgstatic void 4080549e21daSmrglt_error_core (int exit_status, const char *file, 4081549e21daSmrg int line, const char *mode, 4082549e21daSmrg const char *message, va_list ap) 4083549e21daSmrg{ 4084549e21daSmrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4085549e21daSmrg vfprintf (stderr, message, ap); 4086549e21daSmrg fprintf (stderr, ".\n"); 4087ba6a1819Smrg 4088549e21daSmrg if (exit_status >= 0) 4089549e21daSmrg exit (exit_status); 4090549e21daSmrg} 4091ba6a1819Smrg 4092549e21daSmrgvoid 4093549e21daSmrglt_fatal (const char *file, int line, const char *message, ...) 4094549e21daSmrg{ 4095549e21daSmrg va_list ap; 4096549e21daSmrg va_start (ap, message); 4097549e21daSmrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4098549e21daSmrg va_end (ap); 4099549e21daSmrg} 4100ba6a1819Smrg 4101549e21daSmrgstatic const char * 4102549e21daSmrgnonnull (const char *s) 4103549e21daSmrg{ 4104549e21daSmrg return s ? s : "(null)"; 4105549e21daSmrg} 4106ba6a1819Smrg 4107549e21daSmrgstatic const char * 4108549e21daSmrgnonempty (const char *s) 4109549e21daSmrg{ 4110549e21daSmrg return (s && !*s) ? "(empty)" : nonnull (s); 4111549e21daSmrg} 4112ba6a1819Smrg 4113549e21daSmrgvoid 4114549e21daSmrglt_setenv (const char *name, const char *value) 4115549e21daSmrg{ 4116549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 4117549e21daSmrg "(lt_setenv) setting '%s' to '%s'\n", 4118549e21daSmrg nonnull (name), nonnull (value)); 4119549e21daSmrg { 4120549e21daSmrg#ifdef HAVE_SETENV 4121549e21daSmrg /* always make a copy, for consistency with !HAVE_SETENV */ 4122549e21daSmrg char *str = xstrdup (value); 4123549e21daSmrg setenv (name, str, 1); 4124549e21daSmrg#else 4125549e21daSmrg int len = strlen (name) + 1 + strlen (value) + 1; 4126549e21daSmrg char *str = XMALLOC (char, len); 4127549e21daSmrg sprintf (str, "%s=%s", name, value); 4128549e21daSmrg if (putenv (str) != EXIT_SUCCESS) 4129549e21daSmrg { 4130549e21daSmrg XFREE (str); 4131549e21daSmrg } 4132549e21daSmrg#endif 4133549e21daSmrg } 4134549e21daSmrg} 4135ba6a1819Smrg 4136549e21daSmrgchar * 4137549e21daSmrglt_extend_str (const char *orig_value, const char *add, int to_end) 4138549e21daSmrg{ 4139549e21daSmrg char *new_value; 4140549e21daSmrg if (orig_value && *orig_value) 4141549e21daSmrg { 4142549e21daSmrg int orig_value_len = strlen (orig_value); 4143549e21daSmrg int add_len = strlen (add); 4144549e21daSmrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 4145549e21daSmrg if (to_end) 4146549e21daSmrg { 4147549e21daSmrg strcpy (new_value, orig_value); 4148549e21daSmrg strcpy (new_value + orig_value_len, add); 4149549e21daSmrg } 4150549e21daSmrg else 4151549e21daSmrg { 4152549e21daSmrg strcpy (new_value, add); 4153549e21daSmrg strcpy (new_value + add_len, orig_value); 4154549e21daSmrg } 4155549e21daSmrg } 4156549e21daSmrg else 4157549e21daSmrg { 4158549e21daSmrg new_value = xstrdup (add); 4159549e21daSmrg } 4160549e21daSmrg return new_value; 4161549e21daSmrg} 4162ba6a1819Smrg 4163549e21daSmrgvoid 4164549e21daSmrglt_update_exe_path (const char *name, const char *value) 4165549e21daSmrg{ 4166549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 4167549e21daSmrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 4168549e21daSmrg nonnull (name), nonnull (value)); 4169ba6a1819Smrg 4170549e21daSmrg if (name && *name && value && *value) 4171549e21daSmrg { 4172549e21daSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 4173549e21daSmrg /* some systems can't cope with a ':'-terminated path #' */ 4174549e21daSmrg int len = strlen (new_value); 4175549e21daSmrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4176549e21daSmrg { 4177549e21daSmrg new_value[len-1] = '\0'; 4178549e21daSmrg } 4179549e21daSmrg lt_setenv (name, new_value); 4180549e21daSmrg XFREE (new_value); 4181549e21daSmrg } 4182549e21daSmrg} 4183ba6a1819Smrg 4184549e21daSmrgvoid 4185549e21daSmrglt_update_lib_path (const char *name, const char *value) 4186549e21daSmrg{ 4187549e21daSmrg lt_debugprintf (__FILE__, __LINE__, 4188549e21daSmrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 4189549e21daSmrg nonnull (name), nonnull (value)); 4190ba6a1819Smrg 4191549e21daSmrg if (name && *name && value && *value) 4192549e21daSmrg { 4193549e21daSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 4194549e21daSmrg lt_setenv (name, new_value); 4195549e21daSmrg XFREE (new_value); 4196549e21daSmrg } 4197549e21daSmrg} 4198ba6a1819Smrg 4199549e21daSmrgEOF 4200549e21daSmrg case $host_os in 4201549e21daSmrg mingw*) 4202549e21daSmrg cat <<"EOF" 4203549e21daSmrg 4204549e21daSmrg/* Prepares an argument vector before calling spawn(). 4205549e21daSmrg Note that spawn() does not by itself call the command interpreter 4206549e21daSmrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 4207549e21daSmrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 4208549e21daSmrg GetVersionEx(&v); 4209549e21daSmrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 4210549e21daSmrg }) ? "cmd.exe" : "command.com"). 4211549e21daSmrg Instead it simply concatenates the arguments, separated by ' ', and calls 4212549e21daSmrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 4213549e21daSmrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 4214549e21daSmrg special way: 4215549e21daSmrg - Space and tab are interpreted as delimiters. They are not treated as 4216549e21daSmrg delimiters if they are surrounded by double quotes: "...". 4217549e21daSmrg - Unescaped double quotes are removed from the input. Their only effect is 4218549e21daSmrg that within double quotes, space and tab are treated like normal 4219549e21daSmrg characters. 4220549e21daSmrg - Backslashes not followed by double quotes are not special. 4221549e21daSmrg - But 2*n+1 backslashes followed by a double quote become 4222549e21daSmrg n backslashes followed by a double quote (n >= 0): 4223549e21daSmrg \" -> " 4224549e21daSmrg \\\" -> \" 4225549e21daSmrg \\\\\" -> \\" 4226549e21daSmrg */ 4227549e21daSmrg#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" 4228549e21daSmrg#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" 4229549e21daSmrgchar ** 4230549e21daSmrgprepare_spawn (char **argv) 4231549e21daSmrg{ 4232549e21daSmrg size_t argc; 4233549e21daSmrg char **new_argv; 4234549e21daSmrg size_t i; 4235ba6a1819Smrg 4236549e21daSmrg /* Count number of arguments. */ 4237549e21daSmrg for (argc = 0; argv[argc] != NULL; argc++) 4238549e21daSmrg ; 4239ba6a1819Smrg 4240549e21daSmrg /* Allocate new argument vector. */ 4241549e21daSmrg new_argv = XMALLOC (char *, argc + 1); 4242ba6a1819Smrg 4243549e21daSmrg /* Put quoted arguments into the new argument vector. */ 4244549e21daSmrg for (i = 0; i < argc; i++) 4245549e21daSmrg { 4246549e21daSmrg const char *string = argv[i]; 4247549e21daSmrg 4248549e21daSmrg if (string[0] == '\0') 4249549e21daSmrg new_argv[i] = xstrdup ("\"\""); 4250549e21daSmrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 4251549e21daSmrg { 4252549e21daSmrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 4253549e21daSmrg size_t length; 4254549e21daSmrg unsigned int backslashes; 4255549e21daSmrg const char *s; 4256549e21daSmrg char *quoted_string; 4257549e21daSmrg char *p; 4258549e21daSmrg 4259549e21daSmrg length = 0; 4260549e21daSmrg backslashes = 0; 4261549e21daSmrg if (quote_around) 4262549e21daSmrg length++; 4263549e21daSmrg for (s = string; *s != '\0'; s++) 4264549e21daSmrg { 4265549e21daSmrg char c = *s; 4266549e21daSmrg if (c == '"') 4267549e21daSmrg length += backslashes + 1; 4268549e21daSmrg length++; 4269549e21daSmrg if (c == '\\') 4270549e21daSmrg backslashes++; 4271549e21daSmrg else 4272549e21daSmrg backslashes = 0; 4273549e21daSmrg } 4274549e21daSmrg if (quote_around) 4275549e21daSmrg length += backslashes + 1; 4276549e21daSmrg 4277549e21daSmrg quoted_string = XMALLOC (char, length + 1); 4278549e21daSmrg 4279549e21daSmrg p = quoted_string; 4280549e21daSmrg backslashes = 0; 4281549e21daSmrg if (quote_around) 4282549e21daSmrg *p++ = '"'; 4283549e21daSmrg for (s = string; *s != '\0'; s++) 4284549e21daSmrg { 4285549e21daSmrg char c = *s; 4286549e21daSmrg if (c == '"') 4287549e21daSmrg { 4288549e21daSmrg unsigned int j; 4289549e21daSmrg for (j = backslashes + 1; j > 0; j--) 4290549e21daSmrg *p++ = '\\'; 4291549e21daSmrg } 4292549e21daSmrg *p++ = c; 4293549e21daSmrg if (c == '\\') 4294549e21daSmrg backslashes++; 4295549e21daSmrg else 4296549e21daSmrg backslashes = 0; 4297549e21daSmrg } 4298549e21daSmrg if (quote_around) 4299549e21daSmrg { 4300549e21daSmrg unsigned int j; 4301549e21daSmrg for (j = backslashes; j > 0; j--) 4302549e21daSmrg *p++ = '\\'; 4303549e21daSmrg *p++ = '"'; 4304549e21daSmrg } 4305549e21daSmrg *p = '\0'; 4306ba6a1819Smrg 4307549e21daSmrg new_argv[i] = quoted_string; 4308549e21daSmrg } 4309549e21daSmrg else 4310549e21daSmrg new_argv[i] = (char *) string; 4311549e21daSmrg } 4312549e21daSmrg new_argv[argc] = NULL; 4313ba6a1819Smrg 4314549e21daSmrg return new_argv; 4315549e21daSmrg} 4316549e21daSmrgEOF 4317ba6a1819Smrg ;; 4318549e21daSmrg esac 4319ba6a1819Smrg 4320549e21daSmrg cat <<"EOF" 4321549e21daSmrgvoid lt_dump_script (FILE* f) 4322549e21daSmrg{ 4323549e21daSmrgEOF 4324549e21daSmrg func_emit_wrapper yes | 4325549e21daSmrg $SED -e 's/\([\\"]\)/\\\1/g' \ 4326549e21daSmrg -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' 4327ba6a1819Smrg 4328549e21daSmrg cat <<"EOF" 4329549e21daSmrg} 4330549e21daSmrgEOF 4331549e21daSmrg} 4332549e21daSmrg# end: func_emit_cwrapperexe_src 4333ba6a1819Smrg 4334549e21daSmrg# func_win32_import_lib_p ARG 4335549e21daSmrg# True if ARG is an import lib, as indicated by $file_magic_cmd 4336549e21daSmrgfunc_win32_import_lib_p () 4337549e21daSmrg{ 4338549e21daSmrg $opt_debug 4339549e21daSmrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 4340549e21daSmrg *import*) : ;; 4341549e21daSmrg *) false ;; 4342549e21daSmrg esac 4343549e21daSmrg} 4344ba6a1819Smrg 4345549e21daSmrg# func_mode_link arg... 4346549e21daSmrgfunc_mode_link () 4347549e21daSmrg{ 4348549e21daSmrg $opt_debug 4349549e21daSmrg case $host in 4350549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 4351549e21daSmrg # It is impossible to link a dll without this setting, and 4352549e21daSmrg # we shouldn't force the makefile maintainer to figure out 4353549e21daSmrg # which system we are compiling for in order to pass an extra 4354549e21daSmrg # flag for every libtool invocation. 4355549e21daSmrg # allow_undefined=no 4356ba6a1819Smrg 4357549e21daSmrg # FIXME: Unfortunately, there are problems with the above when trying 4358549e21daSmrg # to make a dll which has undefined symbols, in which case not 4359549e21daSmrg # even a static library is built. For now, we need to specify 4360549e21daSmrg # -no-undefined on the libtool link line when we can be certain 4361549e21daSmrg # that all symbols are satisfied, otherwise we get a static library. 4362549e21daSmrg allow_undefined=yes 4363549e21daSmrg ;; 4364549e21daSmrg *) 4365549e21daSmrg allow_undefined=yes 4366549e21daSmrg ;; 4367549e21daSmrg esac 4368549e21daSmrg libtool_args=$nonopt 4369549e21daSmrg base_compile="$nonopt $@" 4370549e21daSmrg compile_command=$nonopt 4371549e21daSmrg finalize_command=$nonopt 4372ba6a1819Smrg 4373549e21daSmrg compile_rpath= 4374549e21daSmrg finalize_rpath= 4375549e21daSmrg compile_shlibpath= 4376549e21daSmrg finalize_shlibpath= 4377549e21daSmrg convenience= 4378549e21daSmrg old_convenience= 4379549e21daSmrg deplibs= 4380549e21daSmrg old_deplibs= 4381549e21daSmrg compiler_flags= 4382549e21daSmrg linker_flags= 4383549e21daSmrg dllsearchpath= 4384549e21daSmrg lib_search_path=`pwd` 4385549e21daSmrg inst_prefix_dir= 4386549e21daSmrg new_inherited_linker_flags= 4387ba6a1819Smrg 4388549e21daSmrg avoid_version=no 4389549e21daSmrg bindir= 4390549e21daSmrg dlfiles= 4391549e21daSmrg dlprefiles= 4392549e21daSmrg dlself=no 4393549e21daSmrg export_dynamic=no 4394549e21daSmrg export_symbols= 4395549e21daSmrg export_symbols_regex= 4396549e21daSmrg generated= 4397549e21daSmrg libobjs= 4398549e21daSmrg ltlibs= 4399549e21daSmrg module=no 4400549e21daSmrg no_install=no 4401549e21daSmrg objs= 4402549e21daSmrg non_pic_objects= 4403549e21daSmrg precious_files_regex= 4404549e21daSmrg prefer_static_libs=no 4405549e21daSmrg preload=no 4406549e21daSmrg prev= 4407549e21daSmrg prevarg= 4408549e21daSmrg release= 4409549e21daSmrg rpath= 4410549e21daSmrg xrpath= 4411549e21daSmrg perm_rpath= 4412549e21daSmrg temp_rpath= 4413549e21daSmrg thread_safe=no 4414549e21daSmrg vinfo= 4415549e21daSmrg vinfo_number=no 4416549e21daSmrg weak_libs= 4417549e21daSmrg single_module="${wl}-single_module" 4418549e21daSmrg func_infer_tag $base_compile 4419ba6a1819Smrg 4420549e21daSmrg # We need to know -static, to get the right output filenames. 4421549e21daSmrg for arg 4422549e21daSmrg do 4423549e21daSmrg case $arg in 4424549e21daSmrg -shared) 4425549e21daSmrg test "$build_libtool_libs" != yes && \ 4426549e21daSmrg func_fatal_configuration "can not build a shared library" 4427549e21daSmrg build_old_libs=no 4428549e21daSmrg break 4429549e21daSmrg ;; 4430549e21daSmrg -all-static | -static | -static-libtool-libs) 4431549e21daSmrg case $arg in 4432549e21daSmrg -all-static) 4433549e21daSmrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 4434549e21daSmrg func_warning "complete static linking is impossible in this configuration" 4435549e21daSmrg fi 4436549e21daSmrg if test -n "$link_static_flag"; then 4437549e21daSmrg dlopen_self=$dlopen_self_static 4438549e21daSmrg fi 4439549e21daSmrg prefer_static_libs=yes 4440549e21daSmrg ;; 4441549e21daSmrg -static) 4442549e21daSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 4443549e21daSmrg dlopen_self=$dlopen_self_static 4444549e21daSmrg fi 4445549e21daSmrg prefer_static_libs=built 4446549e21daSmrg ;; 4447549e21daSmrg -static-libtool-libs) 4448549e21daSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 4449549e21daSmrg dlopen_self=$dlopen_self_static 4450549e21daSmrg fi 4451549e21daSmrg prefer_static_libs=yes 4452549e21daSmrg ;; 4453549e21daSmrg esac 4454549e21daSmrg build_libtool_libs=no 4455549e21daSmrg build_old_libs=yes 4456549e21daSmrg break 4457549e21daSmrg ;; 4458549e21daSmrg esac 4459549e21daSmrg done 4460ba6a1819Smrg 4461549e21daSmrg # See if our shared archives depend on static archives. 4462549e21daSmrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 4463ba6a1819Smrg 4464549e21daSmrg # Go through the arguments, transforming them on the way. 4465549e21daSmrg while test "$#" -gt 0; do 4466549e21daSmrg arg="$1" 4467549e21daSmrg shift 4468549e21daSmrg func_quote_for_eval "$arg" 4469549e21daSmrg qarg=$func_quote_for_eval_unquoted_result 4470549e21daSmrg func_append libtool_args " $func_quote_for_eval_result" 4471ba6a1819Smrg 4472549e21daSmrg # If the previous option needs an argument, assign it. 4473549e21daSmrg if test -n "$prev"; then 4474549e21daSmrg case $prev in 4475549e21daSmrg output) 4476549e21daSmrg func_append compile_command " @OUTPUT@" 4477549e21daSmrg func_append finalize_command " @OUTPUT@" 4478549e21daSmrg ;; 4479549e21daSmrg esac 4480ba6a1819Smrg 4481549e21daSmrg case $prev in 4482549e21daSmrg bindir) 4483549e21daSmrg bindir="$arg" 4484549e21daSmrg prev= 4485549e21daSmrg continue 4486549e21daSmrg ;; 4487549e21daSmrg dlfiles|dlprefiles) 4488549e21daSmrg if test "$preload" = no; then 4489549e21daSmrg # Add the symbol object into the linking commands. 4490549e21daSmrg func_append compile_command " @SYMFILE@" 4491549e21daSmrg func_append finalize_command " @SYMFILE@" 4492549e21daSmrg preload=yes 4493ba6a1819Smrg fi 4494549e21daSmrg case $arg in 4495549e21daSmrg *.la | *.lo) ;; # We handle these cases below. 4496549e21daSmrg force) 4497549e21daSmrg if test "$dlself" = no; then 4498549e21daSmrg dlself=needless 4499549e21daSmrg export_dynamic=yes 4500ba6a1819Smrg fi 4501549e21daSmrg prev= 4502549e21daSmrg continue 4503549e21daSmrg ;; 4504549e21daSmrg self) 4505549e21daSmrg if test "$prev" = dlprefiles; then 4506549e21daSmrg dlself=yes 4507549e21daSmrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 4508549e21daSmrg dlself=yes 4509ba6a1819Smrg else 4510549e21daSmrg dlself=needless 4511549e21daSmrg export_dynamic=yes 4512ba6a1819Smrg fi 4513549e21daSmrg prev= 4514549e21daSmrg continue 4515549e21daSmrg ;; 4516549e21daSmrg *) 4517549e21daSmrg if test "$prev" = dlfiles; then 4518549e21daSmrg dlfiles="$dlfiles $arg" 4519ba6a1819Smrg else 4520549e21daSmrg dlprefiles="$dlprefiles $arg" 4521ba6a1819Smrg fi 4522549e21daSmrg prev= 4523549e21daSmrg continue 4524549e21daSmrg ;; 4525549e21daSmrg esac 4526549e21daSmrg ;; 4527549e21daSmrg expsyms) 4528549e21daSmrg export_symbols="$arg" 4529549e21daSmrg test -f "$arg" \ 4530549e21daSmrg || func_fatal_error "symbol file \`$arg' does not exist" 4531549e21daSmrg prev= 4532549e21daSmrg continue 4533549e21daSmrg ;; 4534549e21daSmrg expsyms_regex) 4535549e21daSmrg export_symbols_regex="$arg" 4536549e21daSmrg prev= 4537549e21daSmrg continue 4538549e21daSmrg ;; 4539549e21daSmrg framework) 4540549e21daSmrg case $host in 4541549e21daSmrg *-*-darwin*) 4542549e21daSmrg case "$deplibs " in 4543549e21daSmrg *" $qarg.ltframework "*) ;; 4544549e21daSmrg *) deplibs="$deplibs $qarg.ltframework" # this is fixed later 4545549e21daSmrg ;; 4546549e21daSmrg esac 4547549e21daSmrg ;; 4548549e21daSmrg esac 4549549e21daSmrg prev= 4550549e21daSmrg continue 4551549e21daSmrg ;; 4552549e21daSmrg inst_prefix) 4553549e21daSmrg inst_prefix_dir="$arg" 4554549e21daSmrg prev= 4555549e21daSmrg continue 4556549e21daSmrg ;; 4557549e21daSmrg objectlist) 4558549e21daSmrg if test -f "$arg"; then 4559549e21daSmrg save_arg=$arg 4560549e21daSmrg moreargs= 4561549e21daSmrg for fil in `cat "$save_arg"` 4562549e21daSmrg do 4563549e21daSmrg# moreargs="$moreargs $fil" 4564549e21daSmrg arg=$fil 4565549e21daSmrg # A libtool-controlled object. 4566ba6a1819Smrg 4567549e21daSmrg # Check to see that this really is a libtool object. 4568549e21daSmrg if func_lalib_unsafe_p "$arg"; then 4569549e21daSmrg pic_object= 4570549e21daSmrg non_pic_object= 4571ba6a1819Smrg 4572549e21daSmrg # Read the .lo file 4573549e21daSmrg func_source "$arg" 4574ba6a1819Smrg 4575549e21daSmrg if test -z "$pic_object" || 4576549e21daSmrg test -z "$non_pic_object" || 4577549e21daSmrg test "$pic_object" = none && 4578549e21daSmrg test "$non_pic_object" = none; then 4579549e21daSmrg func_fatal_error "cannot find name of object for \`$arg'" 4580549e21daSmrg fi 4581ba6a1819Smrg 4582549e21daSmrg # Extract subdirectory from the argument. 4583549e21daSmrg func_dirname "$arg" "/" "" 4584549e21daSmrg xdir="$func_dirname_result" 4585ba6a1819Smrg 4586549e21daSmrg if test "$pic_object" != none; then 4587549e21daSmrg # Prepend the subdirectory the object is found in. 4588549e21daSmrg pic_object="$xdir$pic_object" 4589ba6a1819Smrg 4590549e21daSmrg if test "$prev" = dlfiles; then 4591549e21daSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 4592549e21daSmrg dlfiles="$dlfiles $pic_object" 4593549e21daSmrg prev= 4594549e21daSmrg continue 4595549e21daSmrg else 4596549e21daSmrg # If libtool objects are unsupported, then we need to preload. 4597549e21daSmrg prev=dlprefiles 4598549e21daSmrg fi 4599549e21daSmrg fi 4600ba6a1819Smrg 4601549e21daSmrg # CHECK ME: I think I busted this. -Ossama 4602549e21daSmrg if test "$prev" = dlprefiles; then 4603549e21daSmrg # Preload the old-style object. 4604549e21daSmrg dlprefiles="$dlprefiles $pic_object" 4605549e21daSmrg prev= 4606549e21daSmrg fi 4607ba6a1819Smrg 4608549e21daSmrg # A PIC object. 4609549e21daSmrg func_append libobjs " $pic_object" 4610549e21daSmrg arg="$pic_object" 4611549e21daSmrg fi 4612ba6a1819Smrg 4613549e21daSmrg # Non-PIC object. 4614549e21daSmrg if test "$non_pic_object" != none; then 4615549e21daSmrg # Prepend the subdirectory the object is found in. 4616549e21daSmrg non_pic_object="$xdir$non_pic_object" 4617ba6a1819Smrg 4618549e21daSmrg # A standard non-PIC object 4619549e21daSmrg func_append non_pic_objects " $non_pic_object" 4620549e21daSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 4621549e21daSmrg arg="$non_pic_object" 4622549e21daSmrg fi 4623549e21daSmrg else 4624549e21daSmrg # If the PIC object exists, use it instead. 4625549e21daSmrg # $xdir was prepended to $pic_object above. 4626549e21daSmrg non_pic_object="$pic_object" 4627549e21daSmrg func_append non_pic_objects " $non_pic_object" 4628549e21daSmrg fi 4629549e21daSmrg else 4630549e21daSmrg # Only an error if not doing a dry-run. 4631549e21daSmrg if $opt_dry_run; then 4632549e21daSmrg # Extract subdirectory from the argument. 4633549e21daSmrg func_dirname "$arg" "/" "" 4634549e21daSmrg xdir="$func_dirname_result" 4635549e21daSmrg 4636549e21daSmrg func_lo2o "$arg" 4637549e21daSmrg pic_object=$xdir$objdir/$func_lo2o_result 4638549e21daSmrg non_pic_object=$xdir$func_lo2o_result 4639549e21daSmrg func_append libobjs " $pic_object" 4640549e21daSmrg func_append non_pic_objects " $non_pic_object" 4641549e21daSmrg else 4642549e21daSmrg func_fatal_error "\`$arg' is not a valid libtool object" 4643549e21daSmrg fi 4644549e21daSmrg fi 4645549e21daSmrg done 4646549e21daSmrg else 4647549e21daSmrg func_fatal_error "link input file \`$arg' does not exist" 4648ba6a1819Smrg fi 4649549e21daSmrg arg=$save_arg 4650549e21daSmrg prev= 4651549e21daSmrg continue 4652549e21daSmrg ;; 4653549e21daSmrg precious_regex) 4654549e21daSmrg precious_files_regex="$arg" 4655549e21daSmrg prev= 4656549e21daSmrg continue 4657549e21daSmrg ;; 4658549e21daSmrg release) 4659549e21daSmrg release="-$arg" 4660549e21daSmrg prev= 4661549e21daSmrg continue 4662549e21daSmrg ;; 4663549e21daSmrg rpath | xrpath) 4664549e21daSmrg # We need an absolute path. 4665549e21daSmrg case $arg in 4666549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4667549e21daSmrg *) 4668549e21daSmrg func_fatal_error "only absolute run-paths are allowed" 4669549e21daSmrg ;; 4670ba6a1819Smrg esac 4671549e21daSmrg if test "$prev" = rpath; then 4672549e21daSmrg case "$rpath " in 4673549e21daSmrg *" $arg "*) ;; 4674549e21daSmrg *) rpath="$rpath $arg" ;; 4675549e21daSmrg esac 4676549e21daSmrg else 4677549e21daSmrg case "$xrpath " in 4678549e21daSmrg *" $arg "*) ;; 4679549e21daSmrg *) xrpath="$xrpath $arg" ;; 4680549e21daSmrg esac 4681549e21daSmrg fi 4682549e21daSmrg prev= 4683549e21daSmrg continue 4684549e21daSmrg ;; 4685549e21daSmrg shrext) 4686549e21daSmrg shrext_cmds="$arg" 4687549e21daSmrg prev= 4688549e21daSmrg continue 4689549e21daSmrg ;; 4690549e21daSmrg weak) 4691549e21daSmrg weak_libs="$weak_libs $arg" 4692549e21daSmrg prev= 4693549e21daSmrg continue 4694549e21daSmrg ;; 4695549e21daSmrg xcclinker) 4696549e21daSmrg linker_flags="$linker_flags $qarg" 4697549e21daSmrg compiler_flags="$compiler_flags $qarg" 4698549e21daSmrg prev= 4699549e21daSmrg func_append compile_command " $qarg" 4700549e21daSmrg func_append finalize_command " $qarg" 4701549e21daSmrg continue 4702549e21daSmrg ;; 4703549e21daSmrg xcompiler) 4704549e21daSmrg compiler_flags="$compiler_flags $qarg" 4705549e21daSmrg prev= 4706549e21daSmrg func_append compile_command " $qarg" 4707549e21daSmrg func_append finalize_command " $qarg" 4708549e21daSmrg continue 4709549e21daSmrg ;; 4710549e21daSmrg xlinker) 4711549e21daSmrg linker_flags="$linker_flags $qarg" 4712549e21daSmrg compiler_flags="$compiler_flags $wl$qarg" 4713549e21daSmrg prev= 4714549e21daSmrg func_append compile_command " $wl$qarg" 4715549e21daSmrg func_append finalize_command " $wl$qarg" 4716549e21daSmrg continue 4717ba6a1819Smrg ;; 4718ba6a1819Smrg *) 4719549e21daSmrg eval "$prev=\"\$arg\"" 4720549e21daSmrg prev= 4721549e21daSmrg continue 4722ba6a1819Smrg ;; 4723ba6a1819Smrg esac 4724549e21daSmrg fi # test -n "$prev" 4725ba6a1819Smrg 4726549e21daSmrg prevarg="$arg" 4727ba6a1819Smrg 4728549e21daSmrg case $arg in 4729549e21daSmrg -all-static) 4730549e21daSmrg if test -n "$link_static_flag"; then 4731549e21daSmrg # See comment for -static flag below, for more details. 4732549e21daSmrg func_append compile_command " $link_static_flag" 4733549e21daSmrg func_append finalize_command " $link_static_flag" 4734ba6a1819Smrg fi 4735549e21daSmrg continue 4736549e21daSmrg ;; 4737ba6a1819Smrg 4738549e21daSmrg -allow-undefined) 4739549e21daSmrg # FIXME: remove this flag sometime in the future. 4740549e21daSmrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 4741549e21daSmrg ;; 4742ba6a1819Smrg 4743549e21daSmrg -avoid-version) 4744549e21daSmrg avoid_version=yes 4745549e21daSmrg continue 4746549e21daSmrg ;; 4747ba6a1819Smrg 4748549e21daSmrg -bindir) 4749549e21daSmrg prev=bindir 4750549e21daSmrg continue 4751549e21daSmrg ;; 4752ba6a1819Smrg 4753549e21daSmrg -dlopen) 4754549e21daSmrg prev=dlfiles 4755549e21daSmrg continue 4756549e21daSmrg ;; 4757ba6a1819Smrg 4758549e21daSmrg -dlpreopen) 4759549e21daSmrg prev=dlprefiles 4760549e21daSmrg continue 4761549e21daSmrg ;; 4762ba6a1819Smrg 4763549e21daSmrg -export-dynamic) 4764549e21daSmrg export_dynamic=yes 4765549e21daSmrg continue 4766549e21daSmrg ;; 4767ba6a1819Smrg 4768549e21daSmrg -export-symbols | -export-symbols-regex) 4769549e21daSmrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 4770549e21daSmrg func_fatal_error "more than one -exported-symbols argument is not allowed" 4771549e21daSmrg fi 4772549e21daSmrg if test "X$arg" = "X-export-symbols"; then 4773549e21daSmrg prev=expsyms 4774ba6a1819Smrg else 4775549e21daSmrg prev=expsyms_regex 4776ba6a1819Smrg fi 4777549e21daSmrg continue 4778549e21daSmrg ;; 4779ba6a1819Smrg 4780549e21daSmrg -framework) 4781549e21daSmrg prev=framework 4782549e21daSmrg continue 4783549e21daSmrg ;; 4784ba6a1819Smrg 4785549e21daSmrg -inst-prefix-dir) 4786549e21daSmrg prev=inst_prefix 4787549e21daSmrg continue 4788549e21daSmrg ;; 4789ba6a1819Smrg 4790549e21daSmrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 4791549e21daSmrg # so, if we see these flags be careful not to treat them like -L 4792549e21daSmrg -L[A-Z][A-Z]*:*) 4793549e21daSmrg case $with_gcc/$host in 4794549e21daSmrg no/*-*-irix* | /*-*-irix*) 4795549e21daSmrg func_append compile_command " $arg" 4796549e21daSmrg func_append finalize_command " $arg" 4797549e21daSmrg ;; 4798549e21daSmrg esac 4799549e21daSmrg continue 4800549e21daSmrg ;; 4801ba6a1819Smrg 4802549e21daSmrg -L*) 4803549e21daSmrg func_stripname '-L' '' "$arg" 4804549e21daSmrg dir=$func_stripname_result 4805549e21daSmrg if test -z "$dir"; then 4806549e21daSmrg if test "$#" -gt 0; then 4807549e21daSmrg func_fatal_error "require no space between \`-L' and \`$1'" 4808ba6a1819Smrg else 4809549e21daSmrg func_fatal_error "need path for \`-L' option" 4810ba6a1819Smrg fi 4811549e21daSmrg fi 4812549e21daSmrg # We need an absolute path. 4813549e21daSmrg case $dir in 4814549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4815549e21daSmrg *) 4816549e21daSmrg absdir=`cd "$dir" && pwd` 4817549e21daSmrg test -z "$absdir" && \ 4818549e21daSmrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 4819549e21daSmrg dir="$absdir" 4820549e21daSmrg ;; 4821ba6a1819Smrg esac 4822549e21daSmrg case "$deplibs " in 4823549e21daSmrg *" -L$dir "*) ;; 4824549e21daSmrg *) 4825549e21daSmrg deplibs="$deplibs -L$dir" 4826549e21daSmrg lib_search_path="$lib_search_path $dir" 4827549e21daSmrg ;; 4828ba6a1819Smrg esac 4829ba6a1819Smrg case $host in 4830549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 4831549e21daSmrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 4832549e21daSmrg case :$dllsearchpath: in 4833549e21daSmrg *":$dir:"*) ;; 4834549e21daSmrg ::) dllsearchpath=$dir;; 4835549e21daSmrg *) dllsearchpath="$dllsearchpath:$dir";; 4836549e21daSmrg esac 4837549e21daSmrg case :$dllsearchpath: in 4838549e21daSmrg *":$testbindir:"*) ;; 4839549e21daSmrg ::) dllsearchpath=$testbindir;; 4840549e21daSmrg *) dllsearchpath="$dllsearchpath:$testbindir";; 4841549e21daSmrg esac 4842549e21daSmrg ;; 4843ba6a1819Smrg esac 4844549e21daSmrg continue 4845549e21daSmrg ;; 4846ba6a1819Smrg 4847549e21daSmrg -l*) 4848549e21daSmrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 4849549e21daSmrg case $host in 4850549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 4851549e21daSmrg # These systems don't actually have a C or math library (as such) 4852549e21daSmrg continue 4853549e21daSmrg ;; 4854549e21daSmrg *-*-os2*) 4855549e21daSmrg # These systems don't actually have a C library (as such) 4856549e21daSmrg test "X$arg" = "X-lc" && continue 4857549e21daSmrg ;; 4858549e21daSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 4859549e21daSmrg # Do not include libc due to us having libc/libc_r. 4860549e21daSmrg test "X$arg" = "X-lc" && continue 4861549e21daSmrg ;; 4862549e21daSmrg *-*-rhapsody* | *-*-darwin1.[012]) 4863549e21daSmrg # Rhapsody C and math libraries are in the System framework 4864549e21daSmrg deplibs="$deplibs System.ltframework" 4865549e21daSmrg continue 4866549e21daSmrg ;; 4867549e21daSmrg *-*-sco3.2v5* | *-*-sco5v6*) 4868549e21daSmrg # Causes problems with __ctype 4869549e21daSmrg test "X$arg" = "X-lc" && continue 4870549e21daSmrg ;; 4871549e21daSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 4872549e21daSmrg # Compiler inserts libc in the correct place for threads to work 4873549e21daSmrg test "X$arg" = "X-lc" && continue 4874549e21daSmrg ;; 4875549e21daSmrg esac 4876549e21daSmrg elif test "X$arg" = "X-lc_r"; then 4877549e21daSmrg case $host in 4878549e21daSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 4879549e21daSmrg # Do not include libc_r directly, use -pthread flag. 4880549e21daSmrg continue 4881549e21daSmrg ;; 4882549e21daSmrg esac 4883549e21daSmrg fi 4884549e21daSmrg deplibs="$deplibs $arg" 4885549e21daSmrg continue 4886549e21daSmrg ;; 4887ba6a1819Smrg 4888549e21daSmrg -module) 4889549e21daSmrg module=yes 4890549e21daSmrg continue 4891549e21daSmrg ;; 4892ba6a1819Smrg 4893549e21daSmrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 4894549e21daSmrg # classes, name mangling, and exception handling. 4895549e21daSmrg # Darwin uses the -arch flag to determine output architecture. 4896549e21daSmrg -model|-arch|-isysroot) 4897549e21daSmrg compiler_flags="$compiler_flags $arg" 4898549e21daSmrg func_append compile_command " $arg" 4899549e21daSmrg func_append finalize_command " $arg" 4900549e21daSmrg prev=xcompiler 4901549e21daSmrg continue 4902549e21daSmrg ;; 4903ba6a1819Smrg 4904549e21daSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 4905549e21daSmrg compiler_flags="$compiler_flags $arg" 4906549e21daSmrg func_append compile_command " $arg" 4907549e21daSmrg func_append finalize_command " $arg" 4908549e21daSmrg case "$new_inherited_linker_flags " in 4909549e21daSmrg *" $arg "*) ;; 4910549e21daSmrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; 4911549e21daSmrg esac 4912549e21daSmrg continue 4913549e21daSmrg ;; 4914ba6a1819Smrg 4915549e21daSmrg -multi_module) 4916549e21daSmrg single_module="${wl}-multi_module" 4917549e21daSmrg continue 4918549e21daSmrg ;; 4919ba6a1819Smrg 4920549e21daSmrg -no-fast-install) 4921549e21daSmrg fast_install=no 4922549e21daSmrg continue 4923549e21daSmrg ;; 4924ba6a1819Smrg 4925549e21daSmrg -no-install) 4926549e21daSmrg case $host in 4927549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 4928549e21daSmrg # The PATH hackery in wrapper scripts is required on Windows 4929549e21daSmrg # and Darwin in order for the loader to find any dlls it needs. 4930549e21daSmrg func_warning "\`-no-install' is ignored for $host" 4931549e21daSmrg func_warning "assuming \`-no-fast-install' instead" 4932549e21daSmrg fast_install=no 4933549e21daSmrg ;; 4934549e21daSmrg *) no_install=yes ;; 4935549e21daSmrg esac 4936549e21daSmrg continue 4937549e21daSmrg ;; 4938ba6a1819Smrg 4939549e21daSmrg -no-undefined) 4940549e21daSmrg allow_undefined=no 4941549e21daSmrg continue 4942549e21daSmrg ;; 4943ba6a1819Smrg 4944549e21daSmrg -objectlist) 4945549e21daSmrg prev=objectlist 4946549e21daSmrg continue 4947549e21daSmrg ;; 4948ba6a1819Smrg 4949549e21daSmrg -o) prev=output ;; 4950ba6a1819Smrg 4951549e21daSmrg -precious-files-regex) 4952549e21daSmrg prev=precious_regex 4953549e21daSmrg continue 4954549e21daSmrg ;; 4955ba6a1819Smrg 4956549e21daSmrg -release) 4957549e21daSmrg prev=release 4958549e21daSmrg continue 4959549e21daSmrg ;; 4960ba6a1819Smrg 4961549e21daSmrg -rpath) 4962549e21daSmrg prev=rpath 4963549e21daSmrg continue 4964549e21daSmrg ;; 4965ba6a1819Smrg 4966549e21daSmrg -R) 4967549e21daSmrg prev=xrpath 4968549e21daSmrg continue 4969549e21daSmrg ;; 4970ba6a1819Smrg 4971549e21daSmrg -R*) 4972549e21daSmrg func_stripname '-R' '' "$arg" 4973549e21daSmrg dir=$func_stripname_result 4974549e21daSmrg # We need an absolute path. 4975549e21daSmrg case $dir in 4976549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4977549e21daSmrg *) 4978549e21daSmrg func_fatal_error "only absolute run-paths are allowed" 4979549e21daSmrg ;; 4980549e21daSmrg esac 4981549e21daSmrg case "$xrpath " in 4982549e21daSmrg *" $dir "*) ;; 4983549e21daSmrg *) xrpath="$xrpath $dir" ;; 4984549e21daSmrg esac 4985549e21daSmrg continue 4986549e21daSmrg ;; 4987ba6a1819Smrg 4988549e21daSmrg -shared) 4989549e21daSmrg # The effects of -shared are defined in a previous loop. 4990549e21daSmrg continue 4991549e21daSmrg ;; 4992ba6a1819Smrg 4993549e21daSmrg -shrext) 4994549e21daSmrg prev=shrext 4995549e21daSmrg continue 4996549e21daSmrg ;; 4997ba6a1819Smrg 4998549e21daSmrg -static | -static-libtool-libs) 4999549e21daSmrg # The effects of -static are defined in a previous loop. 5000549e21daSmrg # We used to do the same as -all-static on platforms that 5001549e21daSmrg # didn't have a PIC flag, but the assumption that the effects 5002549e21daSmrg # would be equivalent was wrong. It would break on at least 5003549e21daSmrg # Digital Unix and AIX. 5004549e21daSmrg continue 5005549e21daSmrg ;; 5006ba6a1819Smrg 5007549e21daSmrg -thread-safe) 5008549e21daSmrg thread_safe=yes 5009549e21daSmrg continue 5010549e21daSmrg ;; 5011ba6a1819Smrg 5012549e21daSmrg -version-info) 5013549e21daSmrg prev=vinfo 5014549e21daSmrg continue 5015549e21daSmrg ;; 5016ba6a1819Smrg 5017549e21daSmrg -version-number) 5018549e21daSmrg prev=vinfo 5019549e21daSmrg vinfo_number=yes 5020549e21daSmrg continue 5021549e21daSmrg ;; 5022ba6a1819Smrg 5023549e21daSmrg -weak) 5024549e21daSmrg prev=weak 5025549e21daSmrg continue 5026549e21daSmrg ;; 5027ba6a1819Smrg 5028549e21daSmrg -Wc,*) 5029549e21daSmrg func_stripname '-Wc,' '' "$arg" 5030549e21daSmrg args=$func_stripname_result 5031549e21daSmrg arg= 5032549e21daSmrg save_ifs="$IFS"; IFS=',' 5033549e21daSmrg for flag in $args; do 5034549e21daSmrg IFS="$save_ifs" 5035549e21daSmrg func_quote_for_eval "$flag" 5036549e21daSmrg arg="$arg $func_quote_for_eval_result" 5037549e21daSmrg compiler_flags="$compiler_flags $func_quote_for_eval_result" 5038549e21daSmrg done 5039549e21daSmrg IFS="$save_ifs" 5040549e21daSmrg func_stripname ' ' '' "$arg" 5041549e21daSmrg arg=$func_stripname_result 5042549e21daSmrg ;; 5043ba6a1819Smrg 5044549e21daSmrg -Wl,*) 5045549e21daSmrg func_stripname '-Wl,' '' "$arg" 5046549e21daSmrg args=$func_stripname_result 5047549e21daSmrg arg= 5048549e21daSmrg save_ifs="$IFS"; IFS=',' 5049549e21daSmrg for flag in $args; do 5050549e21daSmrg IFS="$save_ifs" 5051549e21daSmrg func_quote_for_eval "$flag" 5052549e21daSmrg arg="$arg $wl$func_quote_for_eval_result" 5053549e21daSmrg compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" 5054549e21daSmrg linker_flags="$linker_flags $func_quote_for_eval_result" 5055549e21daSmrg done 5056549e21daSmrg IFS="$save_ifs" 5057549e21daSmrg func_stripname ' ' '' "$arg" 5058549e21daSmrg arg=$func_stripname_result 5059549e21daSmrg ;; 5060ba6a1819Smrg 5061549e21daSmrg -Xcompiler) 5062549e21daSmrg prev=xcompiler 5063549e21daSmrg continue 5064549e21daSmrg ;; 5065ba6a1819Smrg 5066549e21daSmrg -Xlinker) 5067549e21daSmrg prev=xlinker 5068549e21daSmrg continue 5069549e21daSmrg ;; 5070ba6a1819Smrg 5071549e21daSmrg -XCClinker) 5072549e21daSmrg prev=xcclinker 5073549e21daSmrg continue 5074549e21daSmrg ;; 5075ba6a1819Smrg 5076549e21daSmrg # -msg_* for osf cc 5077549e21daSmrg -msg_*) 5078549e21daSmrg func_quote_for_eval "$arg" 5079549e21daSmrg arg="$func_quote_for_eval_result" 5080549e21daSmrg ;; 5081ba6a1819Smrg 5082549e21daSmrg # Flags to be passed through unchanged, with rationale: 5083549e21daSmrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 5084549e21daSmrg # -r[0-9][0-9]* specify processor for the SGI compiler 5085549e21daSmrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 5086549e21daSmrg # +DA*, +DD* enable 64-bit mode for the HP compiler 5087549e21daSmrg # -q* compiler args for the IBM compiler 5088549e21daSmrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 5089549e21daSmrg # -F/path path to uninstalled frameworks, gcc on darwin 5090549e21daSmrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 5091549e21daSmrg # @file GCC response files 5092549e21daSmrg # -tp=* Portland pgcc target processor selection 5093549e21daSmrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 5094549e21daSmrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*) 5095549e21daSmrg func_quote_for_eval "$arg" 5096549e21daSmrg arg="$func_quote_for_eval_result" 5097549e21daSmrg func_append compile_command " $arg" 5098549e21daSmrg func_append finalize_command " $arg" 5099549e21daSmrg compiler_flags="$compiler_flags $arg" 5100549e21daSmrg continue 5101549e21daSmrg ;; 5102ba6a1819Smrg 5103549e21daSmrg # Some other compiler flag. 5104549e21daSmrg -* | +*) 5105549e21daSmrg func_quote_for_eval "$arg" 5106549e21daSmrg arg="$func_quote_for_eval_result" 5107549e21daSmrg ;; 5108ba6a1819Smrg 5109549e21daSmrg *.$objext) 5110549e21daSmrg # A standard object. 5111549e21daSmrg objs="$objs $arg" 5112549e21daSmrg ;; 5113ba6a1819Smrg 5114549e21daSmrg *.lo) 5115549e21daSmrg # A libtool-controlled object. 5116ba6a1819Smrg 5117549e21daSmrg # Check to see that this really is a libtool object. 5118549e21daSmrg if func_lalib_unsafe_p "$arg"; then 5119549e21daSmrg pic_object= 5120549e21daSmrg non_pic_object= 5121ba6a1819Smrg 5122549e21daSmrg # Read the .lo file 5123549e21daSmrg func_source "$arg" 5124ba6a1819Smrg 5125549e21daSmrg if test -z "$pic_object" || 5126549e21daSmrg test -z "$non_pic_object" || 5127549e21daSmrg test "$pic_object" = none && 5128549e21daSmrg test "$non_pic_object" = none; then 5129549e21daSmrg func_fatal_error "cannot find name of object for \`$arg'" 5130549e21daSmrg fi 5131ba6a1819Smrg 5132549e21daSmrg # Extract subdirectory from the argument. 5133549e21daSmrg func_dirname "$arg" "/" "" 5134549e21daSmrg xdir="$func_dirname_result" 5135ba6a1819Smrg 5136549e21daSmrg if test "$pic_object" != none; then 5137549e21daSmrg # Prepend the subdirectory the object is found in. 5138549e21daSmrg pic_object="$xdir$pic_object" 5139ba6a1819Smrg 5140549e21daSmrg if test "$prev" = dlfiles; then 5141549e21daSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5142549e21daSmrg dlfiles="$dlfiles $pic_object" 5143549e21daSmrg prev= 5144549e21daSmrg continue 5145549e21daSmrg else 5146549e21daSmrg # If libtool objects are unsupported, then we need to preload. 5147549e21daSmrg prev=dlprefiles 5148549e21daSmrg fi 5149549e21daSmrg fi 5150ba6a1819Smrg 5151549e21daSmrg # CHECK ME: I think I busted this. -Ossama 5152549e21daSmrg if test "$prev" = dlprefiles; then 5153549e21daSmrg # Preload the old-style object. 5154549e21daSmrg dlprefiles="$dlprefiles $pic_object" 5155549e21daSmrg prev= 5156549e21daSmrg fi 5157ba6a1819Smrg 5158549e21daSmrg # A PIC object. 5159549e21daSmrg func_append libobjs " $pic_object" 5160549e21daSmrg arg="$pic_object" 5161549e21daSmrg fi 5162ba6a1819Smrg 5163549e21daSmrg # Non-PIC object. 5164549e21daSmrg if test "$non_pic_object" != none; then 5165549e21daSmrg # Prepend the subdirectory the object is found in. 5166549e21daSmrg non_pic_object="$xdir$non_pic_object" 5167ba6a1819Smrg 5168549e21daSmrg # A standard non-PIC object 5169549e21daSmrg func_append non_pic_objects " $non_pic_object" 5170549e21daSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 5171549e21daSmrg arg="$non_pic_object" 5172549e21daSmrg fi 5173549e21daSmrg else 5174549e21daSmrg # If the PIC object exists, use it instead. 5175549e21daSmrg # $xdir was prepended to $pic_object above. 5176549e21daSmrg non_pic_object="$pic_object" 5177549e21daSmrg func_append non_pic_objects " $non_pic_object" 5178549e21daSmrg fi 5179549e21daSmrg else 5180549e21daSmrg # Only an error if not doing a dry-run. 5181549e21daSmrg if $opt_dry_run; then 5182549e21daSmrg # Extract subdirectory from the argument. 5183549e21daSmrg func_dirname "$arg" "/" "" 5184549e21daSmrg xdir="$func_dirname_result" 5185549e21daSmrg 5186549e21daSmrg func_lo2o "$arg" 5187549e21daSmrg pic_object=$xdir$objdir/$func_lo2o_result 5188549e21daSmrg non_pic_object=$xdir$func_lo2o_result 5189549e21daSmrg func_append libobjs " $pic_object" 5190549e21daSmrg func_append non_pic_objects " $non_pic_object" 5191549e21daSmrg else 5192549e21daSmrg func_fatal_error "\`$arg' is not a valid libtool object" 5193549e21daSmrg fi 5194549e21daSmrg fi 5195549e21daSmrg ;; 5196ba6a1819Smrg 5197549e21daSmrg *.$libext) 5198549e21daSmrg # An archive. 5199549e21daSmrg deplibs="$deplibs $arg" 5200549e21daSmrg old_deplibs="$old_deplibs $arg" 5201549e21daSmrg continue 5202549e21daSmrg ;; 5203ba6a1819Smrg 5204549e21daSmrg *.la) 5205549e21daSmrg # A libtool-controlled library. 5206ba6a1819Smrg 5207549e21daSmrg if test "$prev" = dlfiles; then 5208549e21daSmrg # This library was specified with -dlopen. 5209549e21daSmrg dlfiles="$dlfiles $arg" 5210549e21daSmrg prev= 5211549e21daSmrg elif test "$prev" = dlprefiles; then 5212549e21daSmrg # The library was specified with -dlpreopen. 5213549e21daSmrg dlprefiles="$dlprefiles $arg" 5214549e21daSmrg prev= 5215549e21daSmrg else 5216549e21daSmrg deplibs="$deplibs $arg" 5217549e21daSmrg fi 5218549e21daSmrg continue 5219549e21daSmrg ;; 5220ba6a1819Smrg 5221549e21daSmrg # Some other compiler argument. 5222549e21daSmrg *) 5223549e21daSmrg # Unknown arguments in both finalize_command and compile_command need 5224549e21daSmrg # to be aesthetically quoted because they are evaled later. 5225549e21daSmrg func_quote_for_eval "$arg" 5226549e21daSmrg arg="$func_quote_for_eval_result" 5227549e21daSmrg ;; 5228549e21daSmrg esac # arg 5229ba6a1819Smrg 5230549e21daSmrg # Now actually substitute the argument into the commands. 5231549e21daSmrg if test -n "$arg"; then 5232549e21daSmrg func_append compile_command " $arg" 5233549e21daSmrg func_append finalize_command " $arg" 5234549e21daSmrg fi 5235549e21daSmrg done # argument parsing loop 5236ba6a1819Smrg 5237549e21daSmrg test -n "$prev" && \ 5238549e21daSmrg func_fatal_help "the \`$prevarg' option requires an argument" 5239ba6a1819Smrg 5240549e21daSmrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 5241549e21daSmrg eval arg=\"$export_dynamic_flag_spec\" 5242549e21daSmrg func_append compile_command " $arg" 5243549e21daSmrg func_append finalize_command " $arg" 5244549e21daSmrg fi 5245ba6a1819Smrg 5246549e21daSmrg oldlibs= 5247549e21daSmrg # calculate the name of the file, without its directory 5248549e21daSmrg func_basename "$output" 5249549e21daSmrg outputname="$func_basename_result" 5250549e21daSmrg libobjs_save="$libobjs" 5251549e21daSmrg 5252549e21daSmrg if test -n "$shlibpath_var"; then 5253549e21daSmrg # get the directories listed in $shlibpath_var 5254549e21daSmrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 5255ba6a1819Smrg else 5256549e21daSmrg shlib_search_path= 5257ba6a1819Smrg fi 5258549e21daSmrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 5259549e21daSmrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 5260ba6a1819Smrg 5261549e21daSmrg func_dirname "$output" "/" "" 5262549e21daSmrg output_objdir="$func_dirname_result$objdir" 5263549e21daSmrg # Create the object directory. 5264549e21daSmrg func_mkdir_p "$output_objdir" 5265549e21daSmrg 5266549e21daSmrg # Determine the type of output 5267549e21daSmrg case $output in 5268549e21daSmrg "") 5269549e21daSmrg func_fatal_help "you must specify an output file" 5270549e21daSmrg ;; 5271549e21daSmrg *.$libext) linkmode=oldlib ;; 5272549e21daSmrg *.lo | *.$objext) linkmode=obj ;; 5273549e21daSmrg *.la) linkmode=lib ;; 5274549e21daSmrg *) linkmode=prog ;; # Anything else should be a program. 5275549e21daSmrg esac 5276549e21daSmrg 5277549e21daSmrg specialdeplibs= 5278549e21daSmrg 5279549e21daSmrg libs= 5280549e21daSmrg # Find all interdependent deplibs by searching for libraries 5281549e21daSmrg # that are linked more than once (e.g. -la -lb -la) 5282549e21daSmrg for deplib in $deplibs; do 5283549e21daSmrg if $opt_duplicate_deps ; then 5284549e21daSmrg case "$libs " in 5285549e21daSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5286549e21daSmrg esac 5287549e21daSmrg fi 5288549e21daSmrg libs="$libs $deplib" 5289549e21daSmrg done 5290549e21daSmrg 5291549e21daSmrg if test "$linkmode" = lib; then 5292549e21daSmrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 5293549e21daSmrg 5294549e21daSmrg # Compute libraries that are listed more than once in $predeps 5295549e21daSmrg # $postdeps and mark them as special (i.e., whose duplicates are 5296549e21daSmrg # not to be eliminated). 5297549e21daSmrg pre_post_deps= 5298549e21daSmrg if $opt_duplicate_compiler_generated_deps; then 5299549e21daSmrg for pre_post_dep in $predeps $postdeps; do 5300549e21daSmrg case "$pre_post_deps " in 5301549e21daSmrg *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; 5302549e21daSmrg esac 5303549e21daSmrg pre_post_deps="$pre_post_deps $pre_post_dep" 5304549e21daSmrg done 5305549e21daSmrg fi 5306549e21daSmrg pre_post_deps= 5307549e21daSmrg fi 5308549e21daSmrg 5309549e21daSmrg deplibs= 5310549e21daSmrg newdependency_libs= 5311549e21daSmrg newlib_search_path= 5312549e21daSmrg need_relink=no # whether we're linking any uninstalled libtool libraries 5313549e21daSmrg notinst_deplibs= # not-installed libtool libraries 5314549e21daSmrg notinst_path= # paths that contain not-installed libtool libraries 5315549e21daSmrg 5316549e21daSmrg case $linkmode in 5317549e21daSmrg lib) 5318549e21daSmrg passes="conv dlpreopen link" 5319549e21daSmrg for file in $dlfiles $dlprefiles; do 5320549e21daSmrg case $file in 5321549e21daSmrg *.la) ;; 5322549e21daSmrg *) 5323549e21daSmrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 5324549e21daSmrg ;; 5325549e21daSmrg esac 5326549e21daSmrg done 5327549e21daSmrg ;; 5328549e21daSmrg prog) 5329549e21daSmrg compile_deplibs= 5330549e21daSmrg finalize_deplibs= 5331549e21daSmrg alldeplibs=no 5332549e21daSmrg newdlfiles= 5333549e21daSmrg newdlprefiles= 5334549e21daSmrg passes="conv scan dlopen dlpreopen link" 5335549e21daSmrg ;; 5336549e21daSmrg *) passes="conv" 5337549e21daSmrg ;; 5338549e21daSmrg esac 5339549e21daSmrg 5340549e21daSmrg for pass in $passes; do 5341549e21daSmrg # The preopen pass in lib mode reverses $deplibs; put it back here 5342549e21daSmrg # so that -L comes before libs that need it for instance... 5343549e21daSmrg if test "$linkmode,$pass" = "lib,link"; then 5344549e21daSmrg ## FIXME: Find the place where the list is rebuilt in the wrong 5345549e21daSmrg ## order, and fix it there properly 5346549e21daSmrg tmp_deplibs= 5347549e21daSmrg for deplib in $deplibs; do 5348549e21daSmrg tmp_deplibs="$deplib $tmp_deplibs" 5349549e21daSmrg done 5350549e21daSmrg deplibs="$tmp_deplibs" 5351549e21daSmrg fi 5352549e21daSmrg 5353549e21daSmrg if test "$linkmode,$pass" = "lib,link" || 5354549e21daSmrg test "$linkmode,$pass" = "prog,scan"; then 5355549e21daSmrg libs="$deplibs" 5356549e21daSmrg deplibs= 5357549e21daSmrg fi 5358549e21daSmrg if test "$linkmode" = prog; then 5359549e21daSmrg case $pass in 5360549e21daSmrg dlopen) libs="$dlfiles" ;; 5361549e21daSmrg dlpreopen) libs="$dlprefiles" ;; 5362549e21daSmrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 5363549e21daSmrg esac 5364549e21daSmrg fi 5365549e21daSmrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 5366549e21daSmrg # Collect and forward deplibs of preopened libtool libs 5367549e21daSmrg for lib in $dlprefiles; do 5368549e21daSmrg # Ignore non-libtool-libs 5369549e21daSmrg dependency_libs= 5370549e21daSmrg case $lib in 5371549e21daSmrg *.la) func_source "$lib" ;; 5372549e21daSmrg esac 5373549e21daSmrg 5374549e21daSmrg # Collect preopened libtool deplibs, except any this library 5375549e21daSmrg # has declared as weak libs 5376549e21daSmrg for deplib in $dependency_libs; do 5377549e21daSmrg func_basename "$deplib" 5378549e21daSmrg deplib_base=$func_basename_result 5379549e21daSmrg case " $weak_libs " in 5380549e21daSmrg *" $deplib_base "*) ;; 5381549e21daSmrg *) deplibs="$deplibs $deplib" ;; 5382549e21daSmrg esac 5383549e21daSmrg done 5384549e21daSmrg done 5385549e21daSmrg libs="$dlprefiles" 5386549e21daSmrg fi 5387549e21daSmrg if test "$pass" = dlopen; then 5388549e21daSmrg # Collect dlpreopened libraries 5389549e21daSmrg save_deplibs="$deplibs" 5390549e21daSmrg deplibs= 5391549e21daSmrg fi 5392549e21daSmrg 5393549e21daSmrg for deplib in $libs; do 5394549e21daSmrg lib= 5395549e21daSmrg found=no 5396549e21daSmrg case $deplib in 5397549e21daSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 5398549e21daSmrg if test "$linkmode,$pass" = "prog,link"; then 5399549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 5400549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 5401549e21daSmrg else 5402549e21daSmrg compiler_flags="$compiler_flags $deplib" 5403549e21daSmrg if test "$linkmode" = lib ; then 5404549e21daSmrg case "$new_inherited_linker_flags " in 5405549e21daSmrg *" $deplib "*) ;; 5406549e21daSmrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 5407549e21daSmrg esac 5408549e21daSmrg fi 5409549e21daSmrg fi 5410549e21daSmrg continue 5411549e21daSmrg ;; 5412549e21daSmrg -l*) 5413549e21daSmrg if test "$linkmode" != lib && test "$linkmode" != prog; then 5414549e21daSmrg func_warning "\`-l' is ignored for archives/objects" 5415549e21daSmrg continue 5416549e21daSmrg fi 5417549e21daSmrg func_stripname '-l' '' "$deplib" 5418549e21daSmrg name=$func_stripname_result 5419549e21daSmrg if test "$linkmode" = lib; then 5420549e21daSmrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 5421549e21daSmrg else 5422549e21daSmrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 5423549e21daSmrg fi 5424549e21daSmrg for searchdir in $searchdirs; do 5425549e21daSmrg for search_ext in .la $std_shrext .so .a; do 5426549e21daSmrg # Search the libtool library 5427549e21daSmrg lib="$searchdir/lib${name}${search_ext}" 5428549e21daSmrg if test -f "$lib"; then 5429549e21daSmrg if test "$search_ext" = ".la"; then 5430549e21daSmrg found=yes 5431549e21daSmrg else 5432549e21daSmrg found=no 5433549e21daSmrg fi 5434549e21daSmrg break 2 5435549e21daSmrg fi 5436549e21daSmrg done 5437549e21daSmrg done 5438549e21daSmrg if test "$found" != yes; then 5439549e21daSmrg # deplib doesn't seem to be a libtool library 5440549e21daSmrg if test "$linkmode,$pass" = "prog,link"; then 5441549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 5442549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 5443549e21daSmrg else 5444549e21daSmrg deplibs="$deplib $deplibs" 5445549e21daSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 5446549e21daSmrg fi 5447549e21daSmrg continue 5448549e21daSmrg else # deplib is a libtool library 5449549e21daSmrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 5450549e21daSmrg # We need to do some special things here, and not later. 5451549e21daSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 5452549e21daSmrg case " $predeps $postdeps " in 5453549e21daSmrg *" $deplib "*) 5454549e21daSmrg if func_lalib_p "$lib"; then 5455549e21daSmrg library_names= 5456549e21daSmrg old_library= 5457549e21daSmrg func_source "$lib" 5458549e21daSmrg for l in $old_library $library_names; do 5459549e21daSmrg ll="$l" 5460549e21daSmrg done 5461549e21daSmrg if test "X$ll" = "X$old_library" ; then # only static version available 5462549e21daSmrg found=no 5463549e21daSmrg func_dirname "$lib" "" "." 5464549e21daSmrg ladir="$func_dirname_result" 5465549e21daSmrg lib=$ladir/$old_library 5466549e21daSmrg if test "$linkmode,$pass" = "prog,link"; then 5467549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 5468549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 5469549e21daSmrg else 5470549e21daSmrg deplibs="$deplib $deplibs" 5471549e21daSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 5472549e21daSmrg fi 5473549e21daSmrg continue 5474549e21daSmrg fi 5475549e21daSmrg fi 5476549e21daSmrg ;; 5477549e21daSmrg *) ;; 5478549e21daSmrg esac 5479549e21daSmrg fi 5480549e21daSmrg fi 5481549e21daSmrg ;; # -l 5482549e21daSmrg *.ltframework) 5483549e21daSmrg if test "$linkmode,$pass" = "prog,link"; then 5484549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 5485549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 5486549e21daSmrg else 5487549e21daSmrg deplibs="$deplib $deplibs" 5488549e21daSmrg if test "$linkmode" = lib ; then 5489549e21daSmrg case "$new_inherited_linker_flags " in 5490549e21daSmrg *" $deplib "*) ;; 5491549e21daSmrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 5492549e21daSmrg esac 5493549e21daSmrg fi 5494549e21daSmrg fi 5495549e21daSmrg continue 5496549e21daSmrg ;; 5497549e21daSmrg -L*) 5498549e21daSmrg case $linkmode in 5499549e21daSmrg lib) 5500549e21daSmrg deplibs="$deplib $deplibs" 5501549e21daSmrg test "$pass" = conv && continue 5502549e21daSmrg newdependency_libs="$deplib $newdependency_libs" 5503549e21daSmrg func_stripname '-L' '' "$deplib" 5504549e21daSmrg newlib_search_path="$newlib_search_path $func_stripname_result" 5505549e21daSmrg ;; 5506549e21daSmrg prog) 5507549e21daSmrg if test "$pass" = conv; then 5508549e21daSmrg deplibs="$deplib $deplibs" 5509549e21daSmrg continue 5510549e21daSmrg fi 5511549e21daSmrg if test "$pass" = scan; then 5512549e21daSmrg deplibs="$deplib $deplibs" 5513549e21daSmrg else 5514549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 5515549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 5516549e21daSmrg fi 5517549e21daSmrg func_stripname '-L' '' "$deplib" 5518549e21daSmrg newlib_search_path="$newlib_search_path $func_stripname_result" 5519549e21daSmrg ;; 5520549e21daSmrg *) 5521549e21daSmrg func_warning "\`-L' is ignored for archives/objects" 5522549e21daSmrg ;; 5523549e21daSmrg esac # linkmode 5524549e21daSmrg continue 5525549e21daSmrg ;; # -L 5526549e21daSmrg -R*) 5527549e21daSmrg if test "$pass" = link; then 5528549e21daSmrg func_stripname '-R' '' "$deplib" 5529549e21daSmrg dir=$func_stripname_result 5530549e21daSmrg # Make sure the xrpath contains only unique directories. 5531549e21daSmrg case "$xrpath " in 5532549e21daSmrg *" $dir "*) ;; 5533549e21daSmrg *) xrpath="$xrpath $dir" ;; 5534549e21daSmrg esac 5535549e21daSmrg fi 5536549e21daSmrg deplibs="$deplib $deplibs" 5537549e21daSmrg continue 5538549e21daSmrg ;; 5539549e21daSmrg *.la) lib="$deplib" ;; 5540549e21daSmrg *.$libext) 5541549e21daSmrg if test "$pass" = conv; then 5542549e21daSmrg deplibs="$deplib $deplibs" 5543549e21daSmrg continue 5544549e21daSmrg fi 5545549e21daSmrg case $linkmode in 5546549e21daSmrg lib) 5547549e21daSmrg # Linking convenience modules into shared libraries is allowed, 5548549e21daSmrg # but linking other static libraries is non-portable. 5549549e21daSmrg case " $dlpreconveniencelibs " in 5550549e21daSmrg *" $deplib "*) ;; 5551549e21daSmrg *) 5552549e21daSmrg valid_a_lib=no 5553549e21daSmrg case $deplibs_check_method in 5554549e21daSmrg match_pattern*) 5555549e21daSmrg set dummy $deplibs_check_method; shift 5556549e21daSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 5557549e21daSmrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 5558549e21daSmrg | $EGREP "$match_pattern_regex" > /dev/null; then 5559549e21daSmrg valid_a_lib=yes 5560549e21daSmrg fi 5561549e21daSmrg ;; 5562549e21daSmrg pass_all) 5563549e21daSmrg valid_a_lib=yes 5564549e21daSmrg ;; 5565549e21daSmrg esac 5566549e21daSmrg if test "$valid_a_lib" != yes; then 5567549e21daSmrg echo 5568549e21daSmrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 5569549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 5570549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 5571549e21daSmrg echo "*** shared version of the library, which you do not appear to have" 5572549e21daSmrg echo "*** because the file extensions .$libext of this argument makes me believe" 5573549e21daSmrg echo "*** that it is just a static archive that I should not use here." 5574549e21daSmrg else 5575549e21daSmrg echo 5576549e21daSmrg $ECHO "*** Warning: Linking the shared library $output against the" 5577549e21daSmrg $ECHO "*** static library $deplib is not portable!" 5578549e21daSmrg deplibs="$deplib $deplibs" 5579549e21daSmrg fi 5580549e21daSmrg ;; 5581549e21daSmrg esac 5582549e21daSmrg continue 5583549e21daSmrg ;; 5584549e21daSmrg prog) 5585549e21daSmrg if test "$pass" != link; then 5586549e21daSmrg deplibs="$deplib $deplibs" 5587549e21daSmrg else 5588549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 5589549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 5590549e21daSmrg fi 5591549e21daSmrg continue 5592549e21daSmrg ;; 5593549e21daSmrg esac # linkmode 5594549e21daSmrg ;; # *.$libext 5595549e21daSmrg *.lo | *.$objext) 5596549e21daSmrg if test "$pass" = conv; then 5597549e21daSmrg deplibs="$deplib $deplibs" 5598549e21daSmrg elif test "$linkmode" = prog; then 5599549e21daSmrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 5600549e21daSmrg # If there is no dlopen support or we're linking statically, 5601549e21daSmrg # we need to preload. 5602549e21daSmrg newdlprefiles="$newdlprefiles $deplib" 5603549e21daSmrg compile_deplibs="$deplib $compile_deplibs" 5604549e21daSmrg finalize_deplibs="$deplib $finalize_deplibs" 5605549e21daSmrg else 5606549e21daSmrg newdlfiles="$newdlfiles $deplib" 5607549e21daSmrg fi 5608549e21daSmrg fi 5609549e21daSmrg continue 5610549e21daSmrg ;; 5611549e21daSmrg %DEPLIBS%) 5612549e21daSmrg alldeplibs=yes 5613549e21daSmrg continue 5614549e21daSmrg ;; 5615549e21daSmrg esac # case $deplib 5616549e21daSmrg 5617549e21daSmrg if test "$found" = yes || test -f "$lib"; then : 5618549e21daSmrg else 5619549e21daSmrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 5620549e21daSmrg fi 5621549e21daSmrg 5622549e21daSmrg # Check to see that this really is a libtool archive. 5623549e21daSmrg func_lalib_unsafe_p "$lib" \ 5624549e21daSmrg || func_fatal_error "\`$lib' is not a valid libtool archive" 5625549e21daSmrg 5626549e21daSmrg func_dirname "$lib" "" "." 5627549e21daSmrg ladir="$func_dirname_result" 5628549e21daSmrg 5629549e21daSmrg dlname= 5630549e21daSmrg dlopen= 5631549e21daSmrg dlpreopen= 5632549e21daSmrg libdir= 5633549e21daSmrg library_names= 5634549e21daSmrg old_library= 5635549e21daSmrg inherited_linker_flags= 5636549e21daSmrg # If the library was installed with an old release of libtool, 5637549e21daSmrg # it will not redefine variables installed, or shouldnotlink 5638549e21daSmrg installed=yes 5639549e21daSmrg shouldnotlink=no 5640549e21daSmrg avoidtemprpath= 5641549e21daSmrg 5642549e21daSmrg 5643549e21daSmrg # Read the .la file 5644549e21daSmrg func_source "$lib" 5645549e21daSmrg 5646549e21daSmrg # Convert "-framework foo" to "foo.ltframework" 5647549e21daSmrg if test -n "$inherited_linker_flags"; then 5648549e21daSmrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 5649549e21daSmrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 5650549e21daSmrg case " $new_inherited_linker_flags " in 5651549e21daSmrg *" $tmp_inherited_linker_flag "*) ;; 5652549e21daSmrg *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; 5653549e21daSmrg esac 5654549e21daSmrg done 5655549e21daSmrg fi 5656549e21daSmrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 5657549e21daSmrg if test "$linkmode,$pass" = "lib,link" || 5658549e21daSmrg test "$linkmode,$pass" = "prog,scan" || 5659549e21daSmrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 5660549e21daSmrg test -n "$dlopen" && dlfiles="$dlfiles $dlopen" 5661549e21daSmrg test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" 5662549e21daSmrg fi 5663549e21daSmrg 5664549e21daSmrg if test "$pass" = conv; then 5665549e21daSmrg # Only check for convenience libraries 5666549e21daSmrg deplibs="$lib $deplibs" 5667549e21daSmrg if test -z "$libdir"; then 5668549e21daSmrg if test -z "$old_library"; then 5669549e21daSmrg func_fatal_error "cannot find name of link library for \`$lib'" 5670549e21daSmrg fi 5671549e21daSmrg # It is a libtool convenience library, so add in its objects. 5672549e21daSmrg convenience="$convenience $ladir/$objdir/$old_library" 5673549e21daSmrg old_convenience="$old_convenience $ladir/$objdir/$old_library" 5674549e21daSmrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 5675549e21daSmrg func_fatal_error "\`$lib' is not a convenience library" 5676549e21daSmrg fi 5677549e21daSmrg tmp_libs= 5678549e21daSmrg for deplib in $dependency_libs; do 5679549e21daSmrg deplibs="$deplib $deplibs" 5680549e21daSmrg if $opt_duplicate_deps ; then 5681549e21daSmrg case "$tmp_libs " in 5682549e21daSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5683549e21daSmrg esac 5684549e21daSmrg fi 5685549e21daSmrg tmp_libs="$tmp_libs $deplib" 5686549e21daSmrg done 5687549e21daSmrg continue 5688549e21daSmrg fi # $pass = conv 5689549e21daSmrg 5690549e21daSmrg 5691549e21daSmrg # Get the name of the library we link against. 5692549e21daSmrg linklib= 5693549e21daSmrg for l in $old_library $library_names; do 5694549e21daSmrg linklib="$l" 5695549e21daSmrg done 5696549e21daSmrg if test -z "$linklib"; then 5697549e21daSmrg func_fatal_error "cannot find name of link library for \`$lib'" 5698549e21daSmrg fi 5699549e21daSmrg 5700549e21daSmrg # This library was specified with -dlopen. 5701549e21daSmrg if test "$pass" = dlopen; then 5702549e21daSmrg if test -z "$libdir"; then 5703549e21daSmrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 5704549e21daSmrg fi 5705549e21daSmrg if test -z "$dlname" || 5706549e21daSmrg test "$dlopen_support" != yes || 5707549e21daSmrg test "$build_libtool_libs" = no; then 5708549e21daSmrg # If there is no dlname, no dlopen support or we're linking 5709549e21daSmrg # statically, we need to preload. We also need to preload any 5710549e21daSmrg # dependent libraries so libltdl's deplib preloader doesn't 5711549e21daSmrg # bomb out in the load deplibs phase. 5712549e21daSmrg dlprefiles="$dlprefiles $lib $dependency_libs" 5713549e21daSmrg else 5714549e21daSmrg newdlfiles="$newdlfiles $lib" 5715549e21daSmrg fi 5716549e21daSmrg continue 5717549e21daSmrg fi # $pass = dlopen 5718549e21daSmrg 5719549e21daSmrg # We need an absolute path. 5720549e21daSmrg case $ladir in 5721549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 5722549e21daSmrg *) 5723549e21daSmrg abs_ladir=`cd "$ladir" && pwd` 5724549e21daSmrg if test -z "$abs_ladir"; then 5725549e21daSmrg func_warning "cannot determine absolute directory name of \`$ladir'" 5726549e21daSmrg func_warning "passing it literally to the linker, although it might fail" 5727549e21daSmrg abs_ladir="$ladir" 5728549e21daSmrg fi 5729549e21daSmrg ;; 5730549e21daSmrg esac 5731549e21daSmrg func_basename "$lib" 5732549e21daSmrg laname="$func_basename_result" 5733549e21daSmrg 5734549e21daSmrg # Find the relevant object directory and library name. 5735549e21daSmrg if test "X$installed" = Xyes; then 5736549e21daSmrg if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 5737549e21daSmrg func_warning "library \`$lib' was moved." 5738549e21daSmrg dir="$ladir" 5739549e21daSmrg absdir="$abs_ladir" 5740549e21daSmrg libdir="$abs_ladir" 5741549e21daSmrg else 5742549e21daSmrg dir="$libdir" 5743549e21daSmrg absdir="$libdir" 5744549e21daSmrg fi 5745549e21daSmrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 5746549e21daSmrg else 5747549e21daSmrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 5748549e21daSmrg dir="$ladir" 5749549e21daSmrg absdir="$abs_ladir" 5750549e21daSmrg # Remove this search path later 5751549e21daSmrg notinst_path="$notinst_path $abs_ladir" 5752549e21daSmrg else 5753549e21daSmrg dir="$ladir/$objdir" 5754549e21daSmrg absdir="$abs_ladir/$objdir" 5755549e21daSmrg # Remove this search path later 5756549e21daSmrg notinst_path="$notinst_path $abs_ladir" 5757549e21daSmrg fi 5758549e21daSmrg fi # $installed = yes 5759549e21daSmrg func_stripname 'lib' '.la' "$laname" 5760549e21daSmrg name=$func_stripname_result 5761549e21daSmrg 5762549e21daSmrg # This library was specified with -dlpreopen. 5763549e21daSmrg if test "$pass" = dlpreopen; then 5764549e21daSmrg if test -z "$libdir" && test "$linkmode" = prog; then 5765549e21daSmrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 5766549e21daSmrg fi 5767549e21daSmrg # Prefer using a static library (so that no silly _DYNAMIC symbols 5768549e21daSmrg # are required to link). 5769549e21daSmrg if test -n "$old_library"; then 5770549e21daSmrg newdlprefiles="$newdlprefiles $dir/$old_library" 5771549e21daSmrg # Keep a list of preopened convenience libraries to check 5772549e21daSmrg # that they are being used correctly in the link pass. 5773549e21daSmrg test -z "$libdir" && \ 5774549e21daSmrg dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" 5775549e21daSmrg # Otherwise, use the dlname, so that lt_dlopen finds it. 5776549e21daSmrg elif test -n "$dlname"; then 5777549e21daSmrg newdlprefiles="$newdlprefiles $dir/$dlname" 5778549e21daSmrg else 5779549e21daSmrg newdlprefiles="$newdlprefiles $dir/$linklib" 5780549e21daSmrg fi 5781549e21daSmrg fi # $pass = dlpreopen 5782549e21daSmrg 5783549e21daSmrg if test -z "$libdir"; then 5784549e21daSmrg # Link the convenience library 5785549e21daSmrg if test "$linkmode" = lib; then 5786549e21daSmrg deplibs="$dir/$old_library $deplibs" 5787549e21daSmrg elif test "$linkmode,$pass" = "prog,link"; then 5788549e21daSmrg compile_deplibs="$dir/$old_library $compile_deplibs" 5789549e21daSmrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 5790549e21daSmrg else 5791549e21daSmrg deplibs="$lib $deplibs" # used for prog,scan pass 5792549e21daSmrg fi 5793549e21daSmrg continue 5794549e21daSmrg fi 5795549e21daSmrg 5796549e21daSmrg 5797549e21daSmrg if test "$linkmode" = prog && test "$pass" != link; then 5798549e21daSmrg newlib_search_path="$newlib_search_path $ladir" 5799549e21daSmrg deplibs="$lib $deplibs" 5800549e21daSmrg 5801549e21daSmrg linkalldeplibs=no 5802549e21daSmrg if test "$link_all_deplibs" != no || test -z "$library_names" || 5803549e21daSmrg test "$build_libtool_libs" = no; then 5804549e21daSmrg linkalldeplibs=yes 5805549e21daSmrg fi 5806549e21daSmrg 5807549e21daSmrg tmp_libs= 5808549e21daSmrg for deplib in $dependency_libs; do 5809549e21daSmrg case $deplib in 5810549e21daSmrg -L*) func_stripname '-L' '' "$deplib" 5811549e21daSmrg newlib_search_path="$newlib_search_path $func_stripname_result" 5812549e21daSmrg ;; 5813549e21daSmrg esac 5814549e21daSmrg # Need to link against all dependency_libs? 5815549e21daSmrg if test "$linkalldeplibs" = yes; then 5816549e21daSmrg deplibs="$deplib $deplibs" 5817549e21daSmrg else 5818549e21daSmrg # Need to hardcode shared library paths 5819549e21daSmrg # or/and link against static libraries 5820549e21daSmrg newdependency_libs="$deplib $newdependency_libs" 5821549e21daSmrg fi 5822549e21daSmrg if $opt_duplicate_deps ; then 5823549e21daSmrg case "$tmp_libs " in 5824549e21daSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5825549e21daSmrg esac 5826549e21daSmrg fi 5827549e21daSmrg tmp_libs="$tmp_libs $deplib" 5828549e21daSmrg done # for deplib 5829549e21daSmrg continue 5830549e21daSmrg fi # $linkmode = prog... 5831549e21daSmrg 5832549e21daSmrg if test "$linkmode,$pass" = "prog,link"; then 5833549e21daSmrg if test -n "$library_names" && 5834549e21daSmrg { { test "$prefer_static_libs" = no || 5835549e21daSmrg test "$prefer_static_libs,$installed" = "built,yes"; } || 5836549e21daSmrg test -z "$old_library"; }; then 5837549e21daSmrg # We need to hardcode the library path 5838549e21daSmrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 5839549e21daSmrg # Make sure the rpath contains only unique directories. 5840549e21daSmrg case "$temp_rpath:" in 5841549e21daSmrg *"$absdir:"*) ;; 5842549e21daSmrg *) temp_rpath="$temp_rpath$absdir:" ;; 5843549e21daSmrg esac 5844549e21daSmrg fi 5845549e21daSmrg 5846549e21daSmrg # Hardcode the library path. 5847549e21daSmrg # Skip directories that are in the system default run-time 5848549e21daSmrg # search path. 5849549e21daSmrg case " $sys_lib_dlsearch_path " in 5850549e21daSmrg *" $absdir "*) ;; 5851549e21daSmrg *) 5852549e21daSmrg case "$compile_rpath " in 5853549e21daSmrg *" $absdir "*) ;; 5854549e21daSmrg *) compile_rpath="$compile_rpath $absdir" 5855549e21daSmrg esac 5856549e21daSmrg ;; 5857549e21daSmrg esac 5858549e21daSmrg case " $sys_lib_dlsearch_path " in 5859549e21daSmrg *" $libdir "*) ;; 5860549e21daSmrg *) 5861549e21daSmrg case "$finalize_rpath " in 5862549e21daSmrg *" $libdir "*) ;; 5863549e21daSmrg *) finalize_rpath="$finalize_rpath $libdir" 5864549e21daSmrg esac 5865549e21daSmrg ;; 5866549e21daSmrg esac 5867549e21daSmrg fi # $linkmode,$pass = prog,link... 5868549e21daSmrg 5869549e21daSmrg if test "$alldeplibs" = yes && 5870549e21daSmrg { test "$deplibs_check_method" = pass_all || 5871549e21daSmrg { test "$build_libtool_libs" = yes && 5872549e21daSmrg test -n "$library_names"; }; }; then 5873549e21daSmrg # We only need to search for static libraries 5874549e21daSmrg continue 5875549e21daSmrg fi 5876549e21daSmrg fi 5877549e21daSmrg 5878549e21daSmrg link_static=no # Whether the deplib will be linked statically 5879549e21daSmrg use_static_libs=$prefer_static_libs 5880549e21daSmrg if test "$use_static_libs" = built && test "$installed" = yes; then 5881549e21daSmrg use_static_libs=no 5882549e21daSmrg fi 5883549e21daSmrg if test -n "$library_names" && 5884549e21daSmrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 5885549e21daSmrg case $host in 5886549e21daSmrg *cygwin* | *mingw* | *cegcc*) 5887549e21daSmrg # No point in relinking DLLs because paths are not encoded 5888549e21daSmrg notinst_deplibs="$notinst_deplibs $lib" 5889549e21daSmrg need_relink=no 5890549e21daSmrg ;; 5891549e21daSmrg *) 5892549e21daSmrg if test "$installed" = no; then 5893549e21daSmrg notinst_deplibs="$notinst_deplibs $lib" 5894549e21daSmrg need_relink=yes 5895549e21daSmrg fi 5896549e21daSmrg ;; 5897549e21daSmrg esac 5898549e21daSmrg # This is a shared library 5899549e21daSmrg 5900549e21daSmrg # Warn about portability, can't link against -module's on some 5901549e21daSmrg # systems (darwin). Don't bleat about dlopened modules though! 5902549e21daSmrg dlopenmodule="" 5903549e21daSmrg for dlpremoduletest in $dlprefiles; do 5904549e21daSmrg if test "X$dlpremoduletest" = "X$lib"; then 5905549e21daSmrg dlopenmodule="$dlpremoduletest" 5906549e21daSmrg break 5907549e21daSmrg fi 5908549e21daSmrg done 5909549e21daSmrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 5910549e21daSmrg echo 5911549e21daSmrg if test "$linkmode" = prog; then 5912549e21daSmrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 5913549e21daSmrg else 5914549e21daSmrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 5915549e21daSmrg fi 5916549e21daSmrg $ECHO "*** $linklib is not portable!" 5917549e21daSmrg fi 5918549e21daSmrg if test "$linkmode" = lib && 5919549e21daSmrg test "$hardcode_into_libs" = yes; then 5920549e21daSmrg # Hardcode the library path. 5921549e21daSmrg # Skip directories that are in the system default run-time 5922549e21daSmrg # search path. 5923549e21daSmrg case " $sys_lib_dlsearch_path " in 5924549e21daSmrg *" $absdir "*) ;; 5925549e21daSmrg *) 5926549e21daSmrg case "$compile_rpath " in 5927549e21daSmrg *" $absdir "*) ;; 5928549e21daSmrg *) compile_rpath="$compile_rpath $absdir" 5929549e21daSmrg esac 5930549e21daSmrg ;; 5931549e21daSmrg esac 5932549e21daSmrg case " $sys_lib_dlsearch_path " in 5933549e21daSmrg *" $libdir "*) ;; 5934549e21daSmrg *) 5935549e21daSmrg case "$finalize_rpath " in 5936549e21daSmrg *" $libdir "*) ;; 5937549e21daSmrg *) finalize_rpath="$finalize_rpath $libdir" 5938549e21daSmrg esac 5939549e21daSmrg ;; 5940549e21daSmrg esac 5941549e21daSmrg fi 5942549e21daSmrg 5943549e21daSmrg if test -n "$old_archive_from_expsyms_cmds"; then 5944549e21daSmrg # figure out the soname 5945549e21daSmrg set dummy $library_names 5946549e21daSmrg shift 5947549e21daSmrg realname="$1" 5948549e21daSmrg shift 5949549e21daSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 5950549e21daSmrg # use dlname if we got it. it's perfectly good, no? 5951549e21daSmrg if test -n "$dlname"; then 5952549e21daSmrg soname="$dlname" 5953549e21daSmrg elif test -n "$soname_spec"; then 5954549e21daSmrg # bleh windows 5955549e21daSmrg case $host in 5956549e21daSmrg *cygwin* | mingw* | *cegcc*) 5957549e21daSmrg func_arith $current - $age 5958549e21daSmrg major=$func_arith_result 5959549e21daSmrg versuffix="-$major" 5960549e21daSmrg ;; 5961549e21daSmrg esac 5962549e21daSmrg eval soname=\"$soname_spec\" 5963549e21daSmrg else 5964549e21daSmrg soname="$realname" 5965549e21daSmrg fi 5966549e21daSmrg 5967549e21daSmrg # Make a new name for the extract_expsyms_cmds to use 5968549e21daSmrg soroot="$soname" 5969549e21daSmrg func_basename "$soroot" 5970549e21daSmrg soname="$func_basename_result" 5971549e21daSmrg func_stripname 'lib' '.dll' "$soname" 5972549e21daSmrg newlib=libimp-$func_stripname_result.a 5973549e21daSmrg 5974549e21daSmrg # If the library has no export list, then create one now 5975549e21daSmrg if test -f "$output_objdir/$soname-def"; then : 5976549e21daSmrg else 5977549e21daSmrg func_verbose "extracting exported symbol list from \`$soname'" 5978549e21daSmrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 5979549e21daSmrg fi 5980549e21daSmrg 5981549e21daSmrg # Create $newlib 5982549e21daSmrg if test -f "$output_objdir/$newlib"; then :; else 5983549e21daSmrg func_verbose "generating import library for \`$soname'" 5984549e21daSmrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 5985549e21daSmrg fi 5986549e21daSmrg # make sure the library variables are pointing to the new library 5987549e21daSmrg dir=$output_objdir 5988549e21daSmrg linklib=$newlib 5989549e21daSmrg fi # test -n "$old_archive_from_expsyms_cmds" 5990549e21daSmrg 5991549e21daSmrg if test "$linkmode" = prog || test "$mode" != relink; then 5992549e21daSmrg add_shlibpath= 5993549e21daSmrg add_dir= 5994549e21daSmrg add= 5995549e21daSmrg lib_linked=yes 5996549e21daSmrg case $hardcode_action in 5997549e21daSmrg immediate | unsupported) 5998549e21daSmrg if test "$hardcode_direct" = no; then 5999549e21daSmrg add="$dir/$linklib" 6000549e21daSmrg case $host in 6001549e21daSmrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 6002549e21daSmrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6003549e21daSmrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 6004549e21daSmrg *-*-unixware7*) add_dir="-L$dir" ;; 6005549e21daSmrg *-*-darwin* ) 6006549e21daSmrg # if the lib is a (non-dlopened) module then we can not 6007549e21daSmrg # link against it, someone is ignoring the earlier warnings 6008549e21daSmrg if /usr/bin/file -L $add 2> /dev/null | 6009549e21daSmrg $GREP ": [^:]* bundle" >/dev/null ; then 6010549e21daSmrg if test "X$dlopenmodule" != "X$lib"; then 6011549e21daSmrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 6012549e21daSmrg if test -z "$old_library" ; then 6013549e21daSmrg echo 6014549e21daSmrg echo "*** And there doesn't seem to be a static archive available" 6015549e21daSmrg echo "*** The link will probably fail, sorry" 6016549e21daSmrg else 6017549e21daSmrg add="$dir/$old_library" 6018549e21daSmrg fi 6019549e21daSmrg elif test -n "$old_library"; then 6020549e21daSmrg add="$dir/$old_library" 6021549e21daSmrg fi 6022549e21daSmrg fi 6023549e21daSmrg esac 6024549e21daSmrg elif test "$hardcode_minus_L" = no; then 6025549e21daSmrg case $host in 6026549e21daSmrg *-*-sunos*) add_shlibpath="$dir" ;; 6027549e21daSmrg esac 6028549e21daSmrg add_dir="-L$dir" 6029549e21daSmrg add="-l$name" 6030549e21daSmrg elif test "$hardcode_shlibpath_var" = no; then 6031549e21daSmrg add_shlibpath="$dir" 6032549e21daSmrg add="-l$name" 6033549e21daSmrg else 6034549e21daSmrg lib_linked=no 6035549e21daSmrg fi 6036549e21daSmrg ;; 6037549e21daSmrg relink) 6038549e21daSmrg if test "$hardcode_direct" = yes && 6039549e21daSmrg test "$hardcode_direct_absolute" = no; then 6040549e21daSmrg add="$dir/$linklib" 6041549e21daSmrg elif test "$hardcode_minus_L" = yes; then 6042549e21daSmrg add_dir="-L$dir" 6043549e21daSmrg # Try looking first in the location we're being installed to. 6044549e21daSmrg if test -n "$inst_prefix_dir"; then 6045549e21daSmrg case $libdir in 6046549e21daSmrg [\\/]*) 6047549e21daSmrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 6048549e21daSmrg ;; 6049549e21daSmrg esac 6050549e21daSmrg fi 6051549e21daSmrg add="-l$name" 6052549e21daSmrg elif test "$hardcode_shlibpath_var" = yes; then 6053549e21daSmrg add_shlibpath="$dir" 6054549e21daSmrg add="-l$name" 6055549e21daSmrg else 6056549e21daSmrg lib_linked=no 6057549e21daSmrg fi 6058549e21daSmrg ;; 6059549e21daSmrg *) lib_linked=no ;; 6060549e21daSmrg esac 6061549e21daSmrg 6062549e21daSmrg if test "$lib_linked" != yes; then 6063549e21daSmrg func_fatal_configuration "unsupported hardcode properties" 6064549e21daSmrg fi 6065549e21daSmrg 6066549e21daSmrg if test -n "$add_shlibpath"; then 6067549e21daSmrg case :$compile_shlibpath: in 6068549e21daSmrg *":$add_shlibpath:"*) ;; 6069549e21daSmrg *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; 6070549e21daSmrg esac 6071549e21daSmrg fi 6072549e21daSmrg if test "$linkmode" = prog; then 6073549e21daSmrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 6074549e21daSmrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 6075549e21daSmrg else 6076549e21daSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6077549e21daSmrg test -n "$add" && deplibs="$add $deplibs" 6078549e21daSmrg if test "$hardcode_direct" != yes && 6079549e21daSmrg test "$hardcode_minus_L" != yes && 6080549e21daSmrg test "$hardcode_shlibpath_var" = yes; then 6081549e21daSmrg case :$finalize_shlibpath: in 6082549e21daSmrg *":$libdir:"*) ;; 6083549e21daSmrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 6084549e21daSmrg esac 6085549e21daSmrg fi 6086549e21daSmrg fi 6087549e21daSmrg fi 6088549e21daSmrg 6089549e21daSmrg if test "$linkmode" = prog || test "$mode" = relink; then 6090549e21daSmrg add_shlibpath= 6091549e21daSmrg add_dir= 6092549e21daSmrg add= 6093549e21daSmrg # Finalize command for both is simple: just hardcode it. 6094549e21daSmrg if test "$hardcode_direct" = yes && 6095549e21daSmrg test "$hardcode_direct_absolute" = no; then 6096549e21daSmrg add="$libdir/$linklib" 6097549e21daSmrg elif test "$hardcode_minus_L" = yes; then 6098549e21daSmrg add_dir="-L$libdir" 6099549e21daSmrg add="-l$name" 6100549e21daSmrg elif test "$hardcode_shlibpath_var" = yes; then 6101549e21daSmrg case :$finalize_shlibpath: in 6102549e21daSmrg *":$libdir:"*) ;; 6103549e21daSmrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 6104549e21daSmrg esac 6105549e21daSmrg add="-l$name" 6106549e21daSmrg elif test "$hardcode_automatic" = yes; then 6107549e21daSmrg if test -n "$inst_prefix_dir" && 6108549e21daSmrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 6109549e21daSmrg add="$inst_prefix_dir$libdir/$linklib" 6110549e21daSmrg else 6111549e21daSmrg add="$libdir/$linklib" 6112549e21daSmrg fi 6113549e21daSmrg else 6114549e21daSmrg # We cannot seem to hardcode it, guess we'll fake it. 6115549e21daSmrg add_dir="-L$libdir" 6116549e21daSmrg # Try looking first in the location we're being installed to. 6117549e21daSmrg if test -n "$inst_prefix_dir"; then 6118549e21daSmrg case $libdir in 6119549e21daSmrg [\\/]*) 6120549e21daSmrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 6121549e21daSmrg ;; 6122549e21daSmrg esac 6123549e21daSmrg fi 6124549e21daSmrg add="-l$name" 6125549e21daSmrg fi 6126549e21daSmrg 6127549e21daSmrg if test "$linkmode" = prog; then 6128549e21daSmrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 6129549e21daSmrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 6130549e21daSmrg else 6131549e21daSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6132549e21daSmrg test -n "$add" && deplibs="$add $deplibs" 6133549e21daSmrg fi 6134549e21daSmrg fi 6135549e21daSmrg elif test "$linkmode" = prog; then 6136549e21daSmrg # Here we assume that one of hardcode_direct or hardcode_minus_L 6137549e21daSmrg # is not unsupported. This is valid on all known static and 6138549e21daSmrg # shared platforms. 6139549e21daSmrg if test "$hardcode_direct" != unsupported; then 6140549e21daSmrg test -n "$old_library" && linklib="$old_library" 6141549e21daSmrg compile_deplibs="$dir/$linklib $compile_deplibs" 6142549e21daSmrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 6143549e21daSmrg else 6144549e21daSmrg compile_deplibs="-l$name -L$dir $compile_deplibs" 6145549e21daSmrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 6146549e21daSmrg fi 6147549e21daSmrg elif test "$build_libtool_libs" = yes; then 6148549e21daSmrg # Not a shared library 6149549e21daSmrg if test "$deplibs_check_method" != pass_all; then 6150549e21daSmrg # We're trying link a shared library against a static one 6151549e21daSmrg # but the system doesn't support it. 6152549e21daSmrg 6153549e21daSmrg # Just print a warning and add the library to dependency_libs so 6154549e21daSmrg # that the program can be linked against the static library. 6155549e21daSmrg echo 6156549e21daSmrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 6157549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 6158549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 6159549e21daSmrg echo "*** shared version of the library, which you do not appear to have." 6160549e21daSmrg if test "$module" = yes; then 6161549e21daSmrg echo "*** But as you try to build a module library, libtool will still create " 6162549e21daSmrg echo "*** a static module, that should work as long as the dlopening application" 6163549e21daSmrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 6164549e21daSmrg if test -z "$global_symbol_pipe"; then 6165549e21daSmrg echo 6166549e21daSmrg echo "*** However, this would only work if libtool was able to extract symbol" 6167549e21daSmrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 6168549e21daSmrg echo "*** not find such a program. So, this module is probably useless." 6169549e21daSmrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 6170549e21daSmrg fi 6171549e21daSmrg if test "$build_old_libs" = no; then 6172549e21daSmrg build_libtool_libs=module 6173549e21daSmrg build_old_libs=yes 6174549e21daSmrg else 6175549e21daSmrg build_libtool_libs=no 6176549e21daSmrg fi 6177549e21daSmrg fi 6178549e21daSmrg else 6179549e21daSmrg deplibs="$dir/$old_library $deplibs" 6180549e21daSmrg link_static=yes 6181549e21daSmrg fi 6182549e21daSmrg fi # link shared/static library? 6183549e21daSmrg 6184549e21daSmrg if test "$linkmode" = lib; then 6185549e21daSmrg if test -n "$dependency_libs" && 6186549e21daSmrg { test "$hardcode_into_libs" != yes || 6187549e21daSmrg test "$build_old_libs" = yes || 6188549e21daSmrg test "$link_static" = yes; }; then 6189549e21daSmrg # Extract -R from dependency_libs 6190549e21daSmrg temp_deplibs= 6191549e21daSmrg for libdir in $dependency_libs; do 6192549e21daSmrg case $libdir in 6193549e21daSmrg -R*) func_stripname '-R' '' "$libdir" 6194549e21daSmrg temp_xrpath=$func_stripname_result 6195549e21daSmrg case " $xrpath " in 6196549e21daSmrg *" $temp_xrpath "*) ;; 6197549e21daSmrg *) xrpath="$xrpath $temp_xrpath";; 6198549e21daSmrg esac;; 6199549e21daSmrg *) temp_deplibs="$temp_deplibs $libdir";; 6200549e21daSmrg esac 6201549e21daSmrg done 6202549e21daSmrg dependency_libs="$temp_deplibs" 6203549e21daSmrg fi 6204549e21daSmrg 6205549e21daSmrg newlib_search_path="$newlib_search_path $absdir" 6206549e21daSmrg # Link against this library 6207549e21daSmrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 6208549e21daSmrg # ... and its dependency_libs 6209549e21daSmrg tmp_libs= 6210549e21daSmrg for deplib in $dependency_libs; do 6211549e21daSmrg newdependency_libs="$deplib $newdependency_libs" 6212549e21daSmrg if $opt_duplicate_deps ; then 6213549e21daSmrg case "$tmp_libs " in 6214549e21daSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 6215549e21daSmrg esac 6216549e21daSmrg fi 6217549e21daSmrg tmp_libs="$tmp_libs $deplib" 6218549e21daSmrg done 6219549e21daSmrg 6220549e21daSmrg if test "$link_all_deplibs" != no; then 6221549e21daSmrg # Add the search paths of all dependency libraries 6222549e21daSmrg for deplib in $dependency_libs; do 6223549e21daSmrg path= 6224549e21daSmrg case $deplib in 6225549e21daSmrg -L*) path="$deplib" ;; 6226549e21daSmrg *.la) 6227549e21daSmrg func_dirname "$deplib" "" "." 6228549e21daSmrg dir="$func_dirname_result" 6229549e21daSmrg # We need an absolute path. 6230549e21daSmrg case $dir in 6231549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 6232549e21daSmrg *) 6233549e21daSmrg absdir=`cd "$dir" && pwd` 6234549e21daSmrg if test -z "$absdir"; then 6235549e21daSmrg func_warning "cannot determine absolute directory name of \`$dir'" 6236549e21daSmrg absdir="$dir" 6237549e21daSmrg fi 6238549e21daSmrg ;; 6239549e21daSmrg esac 6240549e21daSmrg if $GREP "^installed=no" $deplib > /dev/null; then 6241549e21daSmrg case $host in 6242549e21daSmrg *-*-darwin*) 6243549e21daSmrg depdepl= 6244549e21daSmrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 6245549e21daSmrg if test -n "$deplibrary_names" ; then 6246549e21daSmrg for tmp in $deplibrary_names ; do 6247549e21daSmrg depdepl=$tmp 6248549e21daSmrg done 6249549e21daSmrg if test -f "$absdir/$objdir/$depdepl" ; then 6250549e21daSmrg depdepl="$absdir/$objdir/$depdepl" 6251549e21daSmrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 6252549e21daSmrg if test -z "$darwin_install_name"; then 6253549e21daSmrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 6254549e21daSmrg fi 6255549e21daSmrg compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 6256549e21daSmrg linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" 6257549e21daSmrg path= 6258549e21daSmrg fi 6259549e21daSmrg fi 6260549e21daSmrg ;; 6261549e21daSmrg *) 6262549e21daSmrg path="-L$absdir/$objdir" 6263549e21daSmrg ;; 6264549e21daSmrg esac 6265549e21daSmrg else 6266549e21daSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 6267549e21daSmrg test -z "$libdir" && \ 6268549e21daSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 6269549e21daSmrg test "$absdir" != "$libdir" && \ 6270549e21daSmrg func_warning "\`$deplib' seems to be moved" 6271549e21daSmrg 6272549e21daSmrg path="-L$absdir" 6273549e21daSmrg fi 6274549e21daSmrg ;; 6275549e21daSmrg esac 6276549e21daSmrg case " $deplibs " in 6277549e21daSmrg *" $path "*) ;; 6278549e21daSmrg *) deplibs="$path $deplibs" ;; 6279549e21daSmrg esac 6280549e21daSmrg done 6281549e21daSmrg fi # link_all_deplibs != no 6282549e21daSmrg fi # linkmode = lib 6283549e21daSmrg done # for deplib in $libs 6284549e21daSmrg if test "$pass" = link; then 6285549e21daSmrg if test "$linkmode" = "prog"; then 6286549e21daSmrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 6287549e21daSmrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 6288549e21daSmrg else 6289549e21daSmrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 6290549e21daSmrg fi 6291549e21daSmrg fi 6292549e21daSmrg dependency_libs="$newdependency_libs" 6293549e21daSmrg if test "$pass" = dlpreopen; then 6294549e21daSmrg # Link the dlpreopened libraries before other libraries 6295549e21daSmrg for deplib in $save_deplibs; do 6296549e21daSmrg deplibs="$deplib $deplibs" 6297549e21daSmrg done 6298549e21daSmrg fi 6299549e21daSmrg if test "$pass" != dlopen; then 6300549e21daSmrg if test "$pass" != conv; then 6301549e21daSmrg # Make sure lib_search_path contains only unique directories. 6302549e21daSmrg lib_search_path= 6303549e21daSmrg for dir in $newlib_search_path; do 6304549e21daSmrg case "$lib_search_path " in 6305549e21daSmrg *" $dir "*) ;; 6306549e21daSmrg *) lib_search_path="$lib_search_path $dir" ;; 6307549e21daSmrg esac 6308549e21daSmrg done 6309549e21daSmrg newlib_search_path= 6310549e21daSmrg fi 6311549e21daSmrg 6312549e21daSmrg if test "$linkmode,$pass" != "prog,link"; then 6313549e21daSmrg vars="deplibs" 6314549e21daSmrg else 6315549e21daSmrg vars="compile_deplibs finalize_deplibs" 6316549e21daSmrg fi 6317549e21daSmrg for var in $vars dependency_libs; do 6318549e21daSmrg # Add libraries to $var in reverse order 6319549e21daSmrg eval tmp_libs=\"\$$var\" 6320549e21daSmrg new_libs= 6321549e21daSmrg for deplib in $tmp_libs; do 6322549e21daSmrg # FIXME: Pedantically, this is the right thing to do, so 6323549e21daSmrg # that some nasty dependency loop isn't accidentally 6324549e21daSmrg # broken: 6325549e21daSmrg #new_libs="$deplib $new_libs" 6326549e21daSmrg # Pragmatically, this seems to cause very few problems in 6327549e21daSmrg # practice: 6328549e21daSmrg case $deplib in 6329549e21daSmrg -L*) new_libs="$deplib $new_libs" ;; 6330549e21daSmrg -R*) ;; 6331549e21daSmrg *) 6332549e21daSmrg # And here is the reason: when a library appears more 6333549e21daSmrg # than once as an explicit dependence of a library, or 6334549e21daSmrg # is implicitly linked in more than once by the 6335549e21daSmrg # compiler, it is considered special, and multiple 6336549e21daSmrg # occurrences thereof are not removed. Compare this 6337549e21daSmrg # with having the same library being listed as a 6338549e21daSmrg # dependency of multiple other libraries: in this case, 6339549e21daSmrg # we know (pedantically, we assume) the library does not 6340549e21daSmrg # need to be listed more than once, so we keep only the 6341549e21daSmrg # last copy. This is not always right, but it is rare 6342549e21daSmrg # enough that we require users that really mean to play 6343549e21daSmrg # such unportable linking tricks to link the library 6344549e21daSmrg # using -Wl,-lname, so that libtool does not consider it 6345549e21daSmrg # for duplicate removal. 6346549e21daSmrg case " $specialdeplibs " in 6347549e21daSmrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 6348549e21daSmrg *) 6349549e21daSmrg case " $new_libs " in 6350549e21daSmrg *" $deplib "*) ;; 6351549e21daSmrg *) new_libs="$deplib $new_libs" ;; 6352549e21daSmrg esac 6353549e21daSmrg ;; 6354549e21daSmrg esac 6355549e21daSmrg ;; 6356549e21daSmrg esac 6357549e21daSmrg done 6358549e21daSmrg tmp_libs= 6359549e21daSmrg for deplib in $new_libs; do 6360549e21daSmrg case $deplib in 6361549e21daSmrg -L*) 6362549e21daSmrg case " $tmp_libs " in 6363549e21daSmrg *" $deplib "*) ;; 6364549e21daSmrg *) tmp_libs="$tmp_libs $deplib" ;; 6365549e21daSmrg esac 6366549e21daSmrg ;; 6367549e21daSmrg *) tmp_libs="$tmp_libs $deplib" ;; 6368549e21daSmrg esac 6369549e21daSmrg done 6370549e21daSmrg eval $var=\"$tmp_libs\" 6371549e21daSmrg done # for var 6372549e21daSmrg fi 6373549e21daSmrg # Last step: remove runtime libs from dependency_libs 6374549e21daSmrg # (they stay in deplibs) 6375549e21daSmrg tmp_libs= 6376549e21daSmrg for i in $dependency_libs ; do 6377549e21daSmrg case " $predeps $postdeps $compiler_lib_search_path " in 6378549e21daSmrg *" $i "*) 6379549e21daSmrg i="" 6380549e21daSmrg ;; 6381549e21daSmrg esac 6382549e21daSmrg if test -n "$i" ; then 6383549e21daSmrg tmp_libs="$tmp_libs $i" 6384549e21daSmrg fi 6385549e21daSmrg done 6386549e21daSmrg dependency_libs=$tmp_libs 6387549e21daSmrg done # for pass 6388549e21daSmrg if test "$linkmode" = prog; then 6389549e21daSmrg dlfiles="$newdlfiles" 6390549e21daSmrg fi 6391549e21daSmrg if test "$linkmode" = prog || test "$linkmode" = lib; then 6392549e21daSmrg dlprefiles="$newdlprefiles" 6393549e21daSmrg fi 6394549e21daSmrg 6395549e21daSmrg case $linkmode in 6396549e21daSmrg oldlib) 6397549e21daSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 6398549e21daSmrg func_warning "\`-dlopen' is ignored for archives" 6399549e21daSmrg fi 6400549e21daSmrg 6401549e21daSmrg case " $deplibs" in 6402549e21daSmrg *\ -l* | *\ -L*) 6403549e21daSmrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 6404549e21daSmrg esac 6405549e21daSmrg 6406549e21daSmrg test -n "$rpath" && \ 6407549e21daSmrg func_warning "\`-rpath' is ignored for archives" 6408549e21daSmrg 6409549e21daSmrg test -n "$xrpath" && \ 6410549e21daSmrg func_warning "\`-R' is ignored for archives" 6411549e21daSmrg 6412549e21daSmrg test -n "$vinfo" && \ 6413549e21daSmrg func_warning "\`-version-info/-version-number' is ignored for archives" 6414549e21daSmrg 6415549e21daSmrg test -n "$release" && \ 6416549e21daSmrg func_warning "\`-release' is ignored for archives" 6417549e21daSmrg 6418549e21daSmrg test -n "$export_symbols$export_symbols_regex" && \ 6419549e21daSmrg func_warning "\`-export-symbols' is ignored for archives" 6420549e21daSmrg 6421549e21daSmrg # Now set the variables for building old libraries. 6422549e21daSmrg build_libtool_libs=no 6423549e21daSmrg oldlibs="$output" 6424549e21daSmrg objs="$objs$old_deplibs" 6425549e21daSmrg ;; 6426549e21daSmrg 6427549e21daSmrg lib) 6428549e21daSmrg # Make sure we only generate libraries of the form `libNAME.la'. 6429549e21daSmrg case $outputname in 6430549e21daSmrg lib*) 6431549e21daSmrg func_stripname 'lib' '.la' "$outputname" 6432549e21daSmrg name=$func_stripname_result 6433549e21daSmrg eval shared_ext=\"$shrext_cmds\" 6434549e21daSmrg eval libname=\"$libname_spec\" 6435549e21daSmrg ;; 6436549e21daSmrg *) 6437549e21daSmrg test "$module" = no && \ 6438549e21daSmrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 6439549e21daSmrg 6440549e21daSmrg if test "$need_lib_prefix" != no; then 6441549e21daSmrg # Add the "lib" prefix for modules if required 6442549e21daSmrg func_stripname '' '.la' "$outputname" 6443549e21daSmrg name=$func_stripname_result 6444549e21daSmrg eval shared_ext=\"$shrext_cmds\" 6445549e21daSmrg eval libname=\"$libname_spec\" 6446549e21daSmrg else 6447549e21daSmrg func_stripname '' '.la' "$outputname" 6448549e21daSmrg libname=$func_stripname_result 6449549e21daSmrg fi 6450549e21daSmrg ;; 6451549e21daSmrg esac 6452549e21daSmrg 6453549e21daSmrg if test -n "$objs"; then 6454549e21daSmrg if test "$deplibs_check_method" != pass_all; then 6455549e21daSmrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 6456549e21daSmrg else 6457549e21daSmrg echo 6458549e21daSmrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 6459549e21daSmrg $ECHO "*** objects $objs is not portable!" 6460549e21daSmrg libobjs="$libobjs $objs" 6461549e21daSmrg fi 6462549e21daSmrg fi 6463549e21daSmrg 6464549e21daSmrg test "$dlself" != no && \ 6465549e21daSmrg func_warning "\`-dlopen self' is ignored for libtool libraries" 6466549e21daSmrg 6467549e21daSmrg set dummy $rpath 6468549e21daSmrg shift 6469549e21daSmrg test "$#" -gt 1 && \ 6470549e21daSmrg func_warning "ignoring multiple \`-rpath's for a libtool library" 6471549e21daSmrg 6472549e21daSmrg install_libdir="$1" 6473549e21daSmrg 6474549e21daSmrg oldlibs= 6475549e21daSmrg if test -z "$rpath"; then 6476549e21daSmrg if test "$build_libtool_libs" = yes; then 6477549e21daSmrg # Building a libtool convenience library. 6478549e21daSmrg # Some compilers have problems with a `.al' extension so 6479549e21daSmrg # convenience libraries should have the same extension an 6480549e21daSmrg # archive normally would. 6481549e21daSmrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 6482549e21daSmrg build_libtool_libs=convenience 6483549e21daSmrg build_old_libs=yes 6484549e21daSmrg fi 6485549e21daSmrg 6486549e21daSmrg test -n "$vinfo" && \ 6487549e21daSmrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 6488549e21daSmrg 6489549e21daSmrg test -n "$release" && \ 6490549e21daSmrg func_warning "\`-release' is ignored for convenience libraries" 6491549e21daSmrg else 6492549e21daSmrg 6493549e21daSmrg # Parse the version information argument. 6494549e21daSmrg save_ifs="$IFS"; IFS=':' 6495549e21daSmrg set dummy $vinfo 0 0 0 6496549e21daSmrg shift 6497549e21daSmrg IFS="$save_ifs" 6498549e21daSmrg 6499549e21daSmrg test -n "$7" && \ 6500549e21daSmrg func_fatal_help "too many parameters to \`-version-info'" 6501549e21daSmrg 6502549e21daSmrg # convert absolute version numbers to libtool ages 6503549e21daSmrg # this retains compatibility with .la files and attempts 6504549e21daSmrg # to make the code below a bit more comprehensible 6505549e21daSmrg 6506549e21daSmrg case $vinfo_number in 6507549e21daSmrg yes) 6508549e21daSmrg number_major="$1" 6509549e21daSmrg number_minor="$2" 6510549e21daSmrg number_revision="$3" 6511549e21daSmrg # 6512549e21daSmrg # There are really only two kinds -- those that 6513549e21daSmrg # use the current revision as the major version 6514549e21daSmrg # and those that subtract age and use age as 6515549e21daSmrg # a minor version. But, then there is irix 6516549e21daSmrg # which has an extra 1 added just for fun 6517549e21daSmrg # 6518549e21daSmrg case $version_type in 6519549e21daSmrg darwin|linux|osf|windows|none) 6520549e21daSmrg func_arith $number_major + $number_minor 6521549e21daSmrg current=$func_arith_result 6522549e21daSmrg age="$number_minor" 6523549e21daSmrg revision="$number_revision" 6524549e21daSmrg ;; 6525549e21daSmrg freebsd-aout|freebsd-elf|qnx|sunos) 6526549e21daSmrg current="$number_major" 6527549e21daSmrg revision="$number_minor" 6528549e21daSmrg age="0" 6529549e21daSmrg ;; 6530549e21daSmrg irix|nonstopux) 6531549e21daSmrg func_arith $number_major + $number_minor 6532549e21daSmrg current=$func_arith_result 6533549e21daSmrg age="$number_minor" 6534549e21daSmrg revision="$number_minor" 6535549e21daSmrg lt_irix_increment=no 6536549e21daSmrg ;; 6537549e21daSmrg esac 6538549e21daSmrg ;; 6539549e21daSmrg no) 6540549e21daSmrg current="$1" 6541549e21daSmrg revision="$2" 6542549e21daSmrg age="$3" 6543549e21daSmrg ;; 6544549e21daSmrg esac 6545549e21daSmrg 6546549e21daSmrg # Check that each of the things are valid numbers. 6547549e21daSmrg case $current in 6548549e21daSmrg 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]) ;; 6549549e21daSmrg *) 6550549e21daSmrg func_error "CURRENT \`$current' must be a nonnegative integer" 6551549e21daSmrg func_fatal_error "\`$vinfo' is not valid version information" 6552549e21daSmrg ;; 6553549e21daSmrg esac 6554549e21daSmrg 6555549e21daSmrg case $revision in 6556549e21daSmrg 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]) ;; 6557549e21daSmrg *) 6558549e21daSmrg func_error "REVISION \`$revision' must be a nonnegative integer" 6559549e21daSmrg func_fatal_error "\`$vinfo' is not valid version information" 6560549e21daSmrg ;; 6561549e21daSmrg esac 6562549e21daSmrg 6563549e21daSmrg case $age in 6564549e21daSmrg 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]) ;; 6565549e21daSmrg *) 6566549e21daSmrg func_error "AGE \`$age' must be a nonnegative integer" 6567549e21daSmrg func_fatal_error "\`$vinfo' is not valid version information" 6568549e21daSmrg ;; 6569549e21daSmrg esac 6570549e21daSmrg 6571549e21daSmrg if test "$age" -gt "$current"; then 6572549e21daSmrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 6573549e21daSmrg func_fatal_error "\`$vinfo' is not valid version information" 6574549e21daSmrg fi 6575549e21daSmrg 6576549e21daSmrg # Calculate the version variables. 6577549e21daSmrg major= 6578549e21daSmrg versuffix= 6579549e21daSmrg verstring= 6580549e21daSmrg case $version_type in 6581549e21daSmrg none) ;; 6582549e21daSmrg 6583549e21daSmrg darwin) 6584549e21daSmrg # Like Linux, but with the current version available in 6585549e21daSmrg # verstring for coding it into the library header 6586549e21daSmrg func_arith $current - $age 6587549e21daSmrg major=.$func_arith_result 6588549e21daSmrg versuffix="$major.$age.$revision" 6589549e21daSmrg # Darwin ld doesn't like 0 for these options... 6590549e21daSmrg func_arith $current + 1 6591549e21daSmrg minor_current=$func_arith_result 6592549e21daSmrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 6593549e21daSmrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 6594549e21daSmrg ;; 6595549e21daSmrg 6596549e21daSmrg freebsd-aout) 6597549e21daSmrg major=".$current" 6598549e21daSmrg versuffix=".$current.$revision"; 6599549e21daSmrg ;; 6600549e21daSmrg 6601549e21daSmrg freebsd-elf) 6602549e21daSmrg major=".$current" 6603549e21daSmrg versuffix=".$current" 6604549e21daSmrg ;; 6605549e21daSmrg 6606549e21daSmrg irix | nonstopux) 6607549e21daSmrg if test "X$lt_irix_increment" = "Xno"; then 6608549e21daSmrg func_arith $current - $age 6609549e21daSmrg else 6610549e21daSmrg func_arith $current - $age + 1 6611549e21daSmrg fi 6612549e21daSmrg major=$func_arith_result 6613549e21daSmrg 6614549e21daSmrg case $version_type in 6615549e21daSmrg nonstopux) verstring_prefix=nonstopux ;; 6616549e21daSmrg *) verstring_prefix=sgi ;; 6617549e21daSmrg esac 6618549e21daSmrg verstring="$verstring_prefix$major.$revision" 6619549e21daSmrg 6620549e21daSmrg # Add in all the interfaces that we are compatible with. 6621549e21daSmrg loop=$revision 6622549e21daSmrg while test "$loop" -ne 0; do 6623549e21daSmrg func_arith $revision - $loop 6624549e21daSmrg iface=$func_arith_result 6625549e21daSmrg func_arith $loop - 1 6626549e21daSmrg loop=$func_arith_result 6627549e21daSmrg verstring="$verstring_prefix$major.$iface:$verstring" 6628549e21daSmrg done 6629549e21daSmrg 6630549e21daSmrg # Before this point, $major must not contain `.'. 6631549e21daSmrg major=.$major 6632549e21daSmrg versuffix="$major.$revision" 6633549e21daSmrg ;; 6634549e21daSmrg 6635549e21daSmrg linux) 6636549e21daSmrg func_arith $current - $age 6637549e21daSmrg major=.$func_arith_result 6638549e21daSmrg versuffix="$major.$age.$revision" 6639549e21daSmrg ;; 6640549e21daSmrg 6641549e21daSmrg osf) 6642549e21daSmrg func_arith $current - $age 6643549e21daSmrg major=.$func_arith_result 6644549e21daSmrg versuffix=".$current.$age.$revision" 6645549e21daSmrg verstring="$current.$age.$revision" 6646549e21daSmrg 6647549e21daSmrg # Add in all the interfaces that we are compatible with. 6648549e21daSmrg loop=$age 6649549e21daSmrg while test "$loop" -ne 0; do 6650549e21daSmrg func_arith $current - $loop 6651549e21daSmrg iface=$func_arith_result 6652549e21daSmrg func_arith $loop - 1 6653549e21daSmrg loop=$func_arith_result 6654549e21daSmrg verstring="$verstring:${iface}.0" 6655549e21daSmrg done 6656549e21daSmrg 6657549e21daSmrg # Make executables depend on our current version. 6658549e21daSmrg verstring="$verstring:${current}.0" 6659549e21daSmrg ;; 6660549e21daSmrg 6661549e21daSmrg qnx) 6662549e21daSmrg major=".$current" 6663549e21daSmrg versuffix=".$current" 6664549e21daSmrg ;; 6665549e21daSmrg 6666549e21daSmrg sunos) 6667549e21daSmrg major=".$current" 6668549e21daSmrg versuffix=".$current.$revision" 6669549e21daSmrg ;; 6670549e21daSmrg 6671549e21daSmrg windows) 6672549e21daSmrg # Use '-' rather than '.', since we only want one 6673549e21daSmrg # extension on DOS 8.3 filesystems. 6674549e21daSmrg func_arith $current - $age 6675549e21daSmrg major=$func_arith_result 6676549e21daSmrg versuffix="-$major" 6677549e21daSmrg ;; 6678549e21daSmrg 6679549e21daSmrg *) 6680549e21daSmrg func_fatal_configuration "unknown library version type \`$version_type'" 6681549e21daSmrg ;; 6682549e21daSmrg esac 6683549e21daSmrg 6684549e21daSmrg # Clear the version info if we defaulted, and they specified a release. 6685549e21daSmrg if test -z "$vinfo" && test -n "$release"; then 6686549e21daSmrg major= 6687549e21daSmrg case $version_type in 6688549e21daSmrg darwin) 6689549e21daSmrg # we can't check for "0.0" in archive_cmds due to quoting 6690549e21daSmrg # problems, so we reset it completely 6691549e21daSmrg verstring= 6692549e21daSmrg ;; 6693549e21daSmrg *) 6694549e21daSmrg verstring="0.0" 6695549e21daSmrg ;; 6696549e21daSmrg esac 6697549e21daSmrg if test "$need_version" = no; then 6698549e21daSmrg versuffix= 6699549e21daSmrg else 6700549e21daSmrg versuffix=".0.0" 6701549e21daSmrg fi 6702549e21daSmrg fi 6703549e21daSmrg 6704549e21daSmrg # Remove version info from name if versioning should be avoided 6705549e21daSmrg if test "$avoid_version" = yes && test "$need_version" = no; then 6706549e21daSmrg major= 6707549e21daSmrg versuffix= 6708549e21daSmrg verstring="" 6709549e21daSmrg fi 6710549e21daSmrg 6711549e21daSmrg # Check to see if the archive will have undefined symbols. 6712549e21daSmrg if test "$allow_undefined" = yes; then 6713549e21daSmrg if test "$allow_undefined_flag" = unsupported; then 6714549e21daSmrg func_warning "undefined symbols not allowed in $host shared libraries" 6715549e21daSmrg build_libtool_libs=no 6716549e21daSmrg build_old_libs=yes 6717549e21daSmrg fi 6718549e21daSmrg else 6719549e21daSmrg # Don't allow undefined symbols. 6720549e21daSmrg allow_undefined_flag="$no_undefined_flag" 6721549e21daSmrg fi 6722549e21daSmrg 6723549e21daSmrg fi 6724549e21daSmrg 6725549e21daSmrg func_generate_dlsyms "$libname" "$libname" "yes" 6726549e21daSmrg libobjs="$libobjs $symfileobj" 6727549e21daSmrg test "X$libobjs" = "X " && libobjs= 6728549e21daSmrg 6729549e21daSmrg if test "$mode" != relink; then 6730549e21daSmrg # Remove our outputs, but don't remove object files since they 6731549e21daSmrg # may have been created when compiling PIC objects. 6732549e21daSmrg removelist= 6733549e21daSmrg tempremovelist=`$ECHO "$output_objdir/*"` 6734549e21daSmrg for p in $tempremovelist; do 6735549e21daSmrg case $p in 6736549e21daSmrg *.$objext | *.gcno) 6737549e21daSmrg ;; 6738549e21daSmrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 6739549e21daSmrg if test "X$precious_files_regex" != "X"; then 6740549e21daSmrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 6741549e21daSmrg then 6742549e21daSmrg continue 6743549e21daSmrg fi 6744549e21daSmrg fi 6745549e21daSmrg removelist="$removelist $p" 6746549e21daSmrg ;; 6747549e21daSmrg *) ;; 6748549e21daSmrg esac 6749549e21daSmrg done 6750549e21daSmrg test -n "$removelist" && \ 6751549e21daSmrg func_show_eval "${RM}r \$removelist" 6752549e21daSmrg fi 6753549e21daSmrg 6754549e21daSmrg # Now set the variables for building old libraries. 6755549e21daSmrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 6756549e21daSmrg oldlibs="$oldlibs $output_objdir/$libname.$libext" 6757549e21daSmrg 6758549e21daSmrg # Transform .lo files to .o files. 6759549e21daSmrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 6760549e21daSmrg fi 6761549e21daSmrg 6762549e21daSmrg # Eliminate all temporary directories. 6763549e21daSmrg #for path in $notinst_path; do 6764549e21daSmrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 6765549e21daSmrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 6766549e21daSmrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 6767549e21daSmrg #done 6768549e21daSmrg 6769549e21daSmrg if test -n "$xrpath"; then 6770549e21daSmrg # If the user specified any rpath flags, then add them. 6771549e21daSmrg temp_xrpath= 6772549e21daSmrg for libdir in $xrpath; do 6773549e21daSmrg temp_xrpath="$temp_xrpath -R$libdir" 6774549e21daSmrg case "$finalize_rpath " in 6775549e21daSmrg *" $libdir "*) ;; 6776549e21daSmrg *) finalize_rpath="$finalize_rpath $libdir" ;; 6777549e21daSmrg esac 6778549e21daSmrg done 6779549e21daSmrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 6780549e21daSmrg dependency_libs="$temp_xrpath $dependency_libs" 6781549e21daSmrg fi 6782549e21daSmrg fi 6783549e21daSmrg 6784549e21daSmrg # Make sure dlfiles contains only unique files that won't be dlpreopened 6785549e21daSmrg old_dlfiles="$dlfiles" 6786549e21daSmrg dlfiles= 6787549e21daSmrg for lib in $old_dlfiles; do 6788549e21daSmrg case " $dlprefiles $dlfiles " in 6789549e21daSmrg *" $lib "*) ;; 6790549e21daSmrg *) dlfiles="$dlfiles $lib" ;; 6791549e21daSmrg esac 6792549e21daSmrg done 6793549e21daSmrg 6794549e21daSmrg # Make sure dlprefiles contains only unique files 6795549e21daSmrg old_dlprefiles="$dlprefiles" 6796549e21daSmrg dlprefiles= 6797549e21daSmrg for lib in $old_dlprefiles; do 6798549e21daSmrg case "$dlprefiles " in 6799549e21daSmrg *" $lib "*) ;; 6800549e21daSmrg *) dlprefiles="$dlprefiles $lib" ;; 6801549e21daSmrg esac 6802549e21daSmrg done 6803549e21daSmrg 6804549e21daSmrg if test "$build_libtool_libs" = yes; then 6805549e21daSmrg if test -n "$rpath"; then 6806549e21daSmrg case $host in 6807549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 6808549e21daSmrg # these systems don't actually have a c library (as such)! 6809549e21daSmrg ;; 6810549e21daSmrg *-*-rhapsody* | *-*-darwin1.[012]) 6811549e21daSmrg # Rhapsody C library is in the System framework 6812549e21daSmrg deplibs="$deplibs System.ltframework" 6813549e21daSmrg ;; 6814549e21daSmrg *-*-netbsd*) 6815549e21daSmrg # Don't link with libc until the a.out ld.so is fixed. 6816549e21daSmrg ;; 6817549e21daSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 6818549e21daSmrg # Do not include libc due to us having libc/libc_r. 6819549e21daSmrg ;; 6820549e21daSmrg *-*-sco3.2v5* | *-*-sco5v6*) 6821549e21daSmrg # Causes problems with __ctype 6822549e21daSmrg ;; 6823549e21daSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 6824549e21daSmrg # Compiler inserts libc in the correct place for threads to work 6825549e21daSmrg ;; 6826549e21daSmrg *) 6827549e21daSmrg # Add libc to deplibs on all other systems if necessary. 6828549e21daSmrg if test "$build_libtool_need_lc" = "yes"; then 6829549e21daSmrg deplibs="$deplibs -lc" 6830549e21daSmrg fi 6831549e21daSmrg ;; 6832549e21daSmrg esac 6833549e21daSmrg fi 6834549e21daSmrg 6835549e21daSmrg # Transform deplibs into only deplibs that can be linked in shared. 6836549e21daSmrg name_save=$name 6837549e21daSmrg libname_save=$libname 6838549e21daSmrg release_save=$release 6839549e21daSmrg versuffix_save=$versuffix 6840549e21daSmrg major_save=$major 6841549e21daSmrg # I'm not sure if I'm treating the release correctly. I think 6842549e21daSmrg # release should show up in the -l (ie -lgmp5) so we don't want to 6843549e21daSmrg # add it in twice. Is that correct? 6844549e21daSmrg release="" 6845549e21daSmrg versuffix="" 6846549e21daSmrg major="" 6847549e21daSmrg newdeplibs= 6848549e21daSmrg droppeddeps=no 6849549e21daSmrg case $deplibs_check_method in 6850549e21daSmrg pass_all) 6851549e21daSmrg # Don't check for shared/static. Everything works. 6852549e21daSmrg # This might be a little naive. We might want to check 6853549e21daSmrg # whether the library exists or not. But this is on 6854549e21daSmrg # osf3 & osf4 and I'm not really sure... Just 6855549e21daSmrg # implementing what was already the behavior. 6856549e21daSmrg newdeplibs=$deplibs 6857549e21daSmrg ;; 6858549e21daSmrg test_compile) 6859549e21daSmrg # This code stresses the "libraries are programs" paradigm to its 6860549e21daSmrg # limits. Maybe even breaks it. We compile a program, linking it 6861549e21daSmrg # against the deplibs as a proxy for the library. Then we can check 6862549e21daSmrg # whether they linked in statically or dynamically with ldd. 6863549e21daSmrg $opt_dry_run || $RM conftest.c 6864549e21daSmrg cat > conftest.c <<EOF 6865549e21daSmrg int main() { return 0; } 6866549e21daSmrgEOF 6867549e21daSmrg $opt_dry_run || $RM conftest 6868549e21daSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 6869549e21daSmrg ldd_output=`ldd conftest` 6870549e21daSmrg for i in $deplibs; do 6871549e21daSmrg case $i in 6872549e21daSmrg -l*) 6873549e21daSmrg func_stripname -l '' "$i" 6874549e21daSmrg name=$func_stripname_result 6875549e21daSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6876549e21daSmrg case " $predeps $postdeps " in 6877549e21daSmrg *" $i "*) 6878549e21daSmrg newdeplibs="$newdeplibs $i" 6879549e21daSmrg i="" 6880549e21daSmrg ;; 6881549e21daSmrg esac 6882549e21daSmrg fi 6883549e21daSmrg if test -n "$i" ; then 6884549e21daSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 6885549e21daSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 6886549e21daSmrg set dummy $deplib_matches; shift 6887549e21daSmrg deplib_match=$1 6888549e21daSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 6889549e21daSmrg newdeplibs="$newdeplibs $i" 6890549e21daSmrg else 6891549e21daSmrg droppeddeps=yes 6892549e21daSmrg echo 6893549e21daSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 6894549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 6895549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 6896549e21daSmrg echo "*** shared version of the library, which I believe you do not have" 6897549e21daSmrg echo "*** because a test_compile did reveal that the linker did not use it for" 6898549e21daSmrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 6899549e21daSmrg fi 6900549e21daSmrg fi 6901549e21daSmrg ;; 6902549e21daSmrg *) 6903549e21daSmrg newdeplibs="$newdeplibs $i" 6904549e21daSmrg ;; 6905549e21daSmrg esac 6906549e21daSmrg done 6907549e21daSmrg else 6908549e21daSmrg # Error occurred in the first compile. Let's try to salvage 6909549e21daSmrg # the situation: Compile a separate program for each library. 6910549e21daSmrg for i in $deplibs; do 6911549e21daSmrg case $i in 6912549e21daSmrg -l*) 6913549e21daSmrg func_stripname -l '' "$i" 6914549e21daSmrg name=$func_stripname_result 6915549e21daSmrg $opt_dry_run || $RM conftest 6916549e21daSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 6917549e21daSmrg ldd_output=`ldd conftest` 6918549e21daSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6919549e21daSmrg case " $predeps $postdeps " in 6920549e21daSmrg *" $i "*) 6921549e21daSmrg newdeplibs="$newdeplibs $i" 6922549e21daSmrg i="" 6923549e21daSmrg ;; 6924549e21daSmrg esac 6925549e21daSmrg fi 6926549e21daSmrg if test -n "$i" ; then 6927549e21daSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 6928549e21daSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 6929549e21daSmrg set dummy $deplib_matches; shift 6930549e21daSmrg deplib_match=$1 6931549e21daSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 6932549e21daSmrg newdeplibs="$newdeplibs $i" 6933549e21daSmrg else 6934549e21daSmrg droppeddeps=yes 6935549e21daSmrg echo 6936549e21daSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 6937549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 6938549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 6939549e21daSmrg echo "*** shared version of the library, which you do not appear to have" 6940549e21daSmrg echo "*** because a test_compile did reveal that the linker did not use this one" 6941549e21daSmrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 6942549e21daSmrg fi 6943549e21daSmrg fi 6944549e21daSmrg else 6945549e21daSmrg droppeddeps=yes 6946549e21daSmrg echo 6947549e21daSmrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 6948549e21daSmrg echo "*** make it link in! You will probably need to install it or some" 6949549e21daSmrg echo "*** library that it depends on before this library will be fully" 6950549e21daSmrg echo "*** functional. Installing it before continuing would be even better." 6951549e21daSmrg fi 6952549e21daSmrg ;; 6953549e21daSmrg *) 6954549e21daSmrg newdeplibs="$newdeplibs $i" 6955549e21daSmrg ;; 6956549e21daSmrg esac 6957549e21daSmrg done 6958549e21daSmrg fi 6959549e21daSmrg ;; 6960549e21daSmrg file_magic*) 6961549e21daSmrg set dummy $deplibs_check_method; shift 6962549e21daSmrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6963549e21daSmrg for a_deplib in $deplibs; do 6964549e21daSmrg case $a_deplib in 6965549e21daSmrg -l*) 6966549e21daSmrg func_stripname -l '' "$a_deplib" 6967549e21daSmrg name=$func_stripname_result 6968549e21daSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6969549e21daSmrg case " $predeps $postdeps " in 6970549e21daSmrg *" $a_deplib "*) 6971549e21daSmrg newdeplibs="$newdeplibs $a_deplib" 6972549e21daSmrg a_deplib="" 6973549e21daSmrg ;; 6974549e21daSmrg esac 6975549e21daSmrg fi 6976549e21daSmrg if test -n "$a_deplib" ; then 6977549e21daSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 6978549e21daSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 6979549e21daSmrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 6980549e21daSmrg for potent_lib in $potential_libs; do 6981549e21daSmrg # Follow soft links. 6982549e21daSmrg if ls -lLd "$potent_lib" 2>/dev/null | 6983549e21daSmrg $GREP " -> " >/dev/null; then 6984549e21daSmrg continue 6985549e21daSmrg fi 6986549e21daSmrg # The statement above tries to avoid entering an 6987549e21daSmrg # endless loop below, in case of cyclic links. 6988549e21daSmrg # We might still enter an endless loop, since a link 6989549e21daSmrg # loop can be closed while we follow links, 6990549e21daSmrg # but so what? 6991549e21daSmrg potlib="$potent_lib" 6992549e21daSmrg while test -h "$potlib" 2>/dev/null; do 6993549e21daSmrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 6994549e21daSmrg case $potliblink in 6995549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 6996549e21daSmrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 6997549e21daSmrg esac 6998549e21daSmrg done 6999549e21daSmrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7000549e21daSmrg $SED -e 10q | 7001549e21daSmrg $EGREP "$file_magic_regex" > /dev/null; then 7002549e21daSmrg newdeplibs="$newdeplibs $a_deplib" 7003549e21daSmrg a_deplib="" 7004549e21daSmrg break 2 7005549e21daSmrg fi 7006549e21daSmrg done 7007549e21daSmrg done 7008549e21daSmrg fi 7009549e21daSmrg if test -n "$a_deplib" ; then 7010549e21daSmrg droppeddeps=yes 7011549e21daSmrg echo 7012549e21daSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7013549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 7014549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 7015549e21daSmrg echo "*** shared version of the library, which you do not appear to have" 7016549e21daSmrg echo "*** because I did check the linker path looking for a file starting" 7017549e21daSmrg if test -z "$potlib" ; then 7018549e21daSmrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 7019549e21daSmrg else 7020549e21daSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7021549e21daSmrg $ECHO "*** using a file magic. Last file checked: $potlib" 7022549e21daSmrg fi 7023549e21daSmrg fi 7024549e21daSmrg ;; 7025549e21daSmrg *) 7026549e21daSmrg # Add a -L argument. 7027549e21daSmrg newdeplibs="$newdeplibs $a_deplib" 7028549e21daSmrg ;; 7029549e21daSmrg esac 7030549e21daSmrg done # Gone through all deplibs. 7031549e21daSmrg ;; 7032549e21daSmrg match_pattern*) 7033549e21daSmrg set dummy $deplibs_check_method; shift 7034549e21daSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7035549e21daSmrg for a_deplib in $deplibs; do 7036549e21daSmrg case $a_deplib in 7037549e21daSmrg -l*) 7038549e21daSmrg func_stripname -l '' "$a_deplib" 7039549e21daSmrg name=$func_stripname_result 7040549e21daSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7041549e21daSmrg case " $predeps $postdeps " in 7042549e21daSmrg *" $a_deplib "*) 7043549e21daSmrg newdeplibs="$newdeplibs $a_deplib" 7044549e21daSmrg a_deplib="" 7045549e21daSmrg ;; 7046549e21daSmrg esac 7047549e21daSmrg fi 7048549e21daSmrg if test -n "$a_deplib" ; then 7049549e21daSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 7050549e21daSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7051549e21daSmrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 7052549e21daSmrg for potent_lib in $potential_libs; do 7053549e21daSmrg potlib="$potent_lib" # see symlink-check above in file_magic test 7054549e21daSmrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7055549e21daSmrg $EGREP "$match_pattern_regex" > /dev/null; then 7056549e21daSmrg newdeplibs="$newdeplibs $a_deplib" 7057549e21daSmrg a_deplib="" 7058549e21daSmrg break 2 7059549e21daSmrg fi 7060549e21daSmrg done 7061549e21daSmrg done 7062549e21daSmrg fi 7063549e21daSmrg if test -n "$a_deplib" ; then 7064549e21daSmrg droppeddeps=yes 7065549e21daSmrg echo 7066549e21daSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7067549e21daSmrg echo "*** I have the capability to make that library automatically link in when" 7068549e21daSmrg echo "*** you link to this library. But I can only do this if you have a" 7069549e21daSmrg echo "*** shared version of the library, which you do not appear to have" 7070549e21daSmrg echo "*** because I did check the linker path looking for a file starting" 7071549e21daSmrg if test -z "$potlib" ; then 7072549e21daSmrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 7073549e21daSmrg else 7074549e21daSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7075549e21daSmrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 7076549e21daSmrg fi 7077549e21daSmrg fi 7078549e21daSmrg ;; 7079549e21daSmrg *) 7080549e21daSmrg # Add a -L argument. 7081549e21daSmrg newdeplibs="$newdeplibs $a_deplib" 7082549e21daSmrg ;; 7083549e21daSmrg esac 7084549e21daSmrg done # Gone through all deplibs. 7085549e21daSmrg ;; 7086549e21daSmrg none | unknown | *) 7087549e21daSmrg newdeplibs="" 7088549e21daSmrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 7089549e21daSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7090549e21daSmrg for i in $predeps $postdeps ; do 7091549e21daSmrg # can't use Xsed below, because $i might contain '/' 7092549e21daSmrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 7093549e21daSmrg done 7094549e21daSmrg fi 7095549e21daSmrg case $tmp_deplibs in 7096549e21daSmrg *[!\ \ ]*) 7097549e21daSmrg echo 7098549e21daSmrg if test "X$deplibs_check_method" = "Xnone"; then 7099549e21daSmrg echo "*** Warning: inter-library dependencies are not supported in this platform." 7100549e21daSmrg else 7101549e21daSmrg echo "*** Warning: inter-library dependencies are not known to be supported." 7102549e21daSmrg fi 7103549e21daSmrg echo "*** All declared inter-library dependencies are being dropped." 7104549e21daSmrg droppeddeps=yes 7105549e21daSmrg ;; 7106549e21daSmrg esac 7107549e21daSmrg ;; 7108549e21daSmrg esac 7109549e21daSmrg versuffix=$versuffix_save 7110549e21daSmrg major=$major_save 7111549e21daSmrg release=$release_save 7112549e21daSmrg libname=$libname_save 7113549e21daSmrg name=$name_save 7114549e21daSmrg 7115549e21daSmrg case $host in 7116549e21daSmrg *-*-rhapsody* | *-*-darwin1.[012]) 7117549e21daSmrg # On Rhapsody replace the C library with the System framework 7118549e21daSmrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 7119549e21daSmrg ;; 7120549e21daSmrg esac 7121549e21daSmrg 7122549e21daSmrg if test "$droppeddeps" = yes; then 7123549e21daSmrg if test "$module" = yes; then 7124549e21daSmrg echo 7125549e21daSmrg echo "*** Warning: libtool could not satisfy all declared inter-library" 7126549e21daSmrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 7127549e21daSmrg echo "*** a static module, that should work as long as the dlopening" 7128549e21daSmrg echo "*** application is linked with the -dlopen flag." 7129549e21daSmrg if test -z "$global_symbol_pipe"; then 7130549e21daSmrg echo 7131549e21daSmrg echo "*** However, this would only work if libtool was able to extract symbol" 7132549e21daSmrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 7133549e21daSmrg echo "*** not find such a program. So, this module is probably useless." 7134549e21daSmrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 7135549e21daSmrg fi 7136549e21daSmrg if test "$build_old_libs" = no; then 7137549e21daSmrg oldlibs="$output_objdir/$libname.$libext" 7138549e21daSmrg build_libtool_libs=module 7139549e21daSmrg build_old_libs=yes 7140549e21daSmrg else 7141549e21daSmrg build_libtool_libs=no 7142549e21daSmrg fi 7143549e21daSmrg else 7144549e21daSmrg echo "*** The inter-library dependencies that have been dropped here will be" 7145549e21daSmrg echo "*** automatically added whenever a program is linked with this library" 7146549e21daSmrg echo "*** or is declared to -dlopen it." 7147549e21daSmrg 7148549e21daSmrg if test "$allow_undefined" = no; then 7149549e21daSmrg echo 7150549e21daSmrg echo "*** Since this library must not contain undefined symbols," 7151549e21daSmrg echo "*** because either the platform does not support them or" 7152549e21daSmrg echo "*** it was explicitly requested with -no-undefined," 7153549e21daSmrg echo "*** libtool will only create a static version of it." 7154549e21daSmrg if test "$build_old_libs" = no; then 7155549e21daSmrg oldlibs="$output_objdir/$libname.$libext" 7156549e21daSmrg build_libtool_libs=module 7157549e21daSmrg build_old_libs=yes 7158549e21daSmrg else 7159549e21daSmrg build_libtool_libs=no 7160549e21daSmrg fi 7161549e21daSmrg fi 7162549e21daSmrg fi 7163549e21daSmrg fi 7164549e21daSmrg # Done checking deplibs! 7165549e21daSmrg deplibs=$newdeplibs 7166549e21daSmrg fi 7167549e21daSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7168549e21daSmrg case $host in 7169549e21daSmrg *-*-darwin*) 7170549e21daSmrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7171549e21daSmrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7172549e21daSmrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7173549e21daSmrg ;; 7174549e21daSmrg esac 7175549e21daSmrg 7176549e21daSmrg # move library search paths that coincide with paths to not yet 7177549e21daSmrg # installed libraries to the beginning of the library search list 7178549e21daSmrg new_libs= 7179549e21daSmrg for path in $notinst_path; do 7180549e21daSmrg case " $new_libs " in 7181549e21daSmrg *" -L$path/$objdir "*) ;; 7182549e21daSmrg *) 7183549e21daSmrg case " $deplibs " in 7184549e21daSmrg *" -L$path/$objdir "*) 7185549e21daSmrg new_libs="$new_libs -L$path/$objdir" ;; 7186549e21daSmrg esac 7187549e21daSmrg ;; 7188549e21daSmrg esac 7189549e21daSmrg done 7190549e21daSmrg for deplib in $deplibs; do 7191549e21daSmrg case $deplib in 7192549e21daSmrg -L*) 7193549e21daSmrg case " $new_libs " in 7194549e21daSmrg *" $deplib "*) ;; 7195549e21daSmrg *) new_libs="$new_libs $deplib" ;; 7196549e21daSmrg esac 7197549e21daSmrg ;; 7198549e21daSmrg *) new_libs="$new_libs $deplib" ;; 7199549e21daSmrg esac 7200549e21daSmrg done 7201549e21daSmrg deplibs="$new_libs" 7202549e21daSmrg 7203549e21daSmrg # All the library-specific variables (install_libdir is set above). 7204549e21daSmrg library_names= 7205549e21daSmrg old_library= 7206549e21daSmrg dlname= 7207ba6a1819Smrg 7208549e21daSmrg # Test again, we may have decided not to build it any more 7209549e21daSmrg if test "$build_libtool_libs" = yes; then 7210549e21daSmrg if test "$hardcode_into_libs" = yes; then 7211549e21daSmrg # Hardcode the library paths 7212549e21daSmrg hardcode_libdirs= 7213549e21daSmrg dep_rpath= 7214549e21daSmrg rpath="$finalize_rpath" 7215549e21daSmrg test "$mode" != relink && rpath="$compile_rpath$rpath" 7216549e21daSmrg for libdir in $rpath; do 7217549e21daSmrg if test -n "$hardcode_libdir_flag_spec"; then 7218549e21daSmrg if test -n "$hardcode_libdir_separator"; then 7219549e21daSmrg if test -z "$hardcode_libdirs"; then 7220549e21daSmrg hardcode_libdirs="$libdir" 7221549e21daSmrg else 7222549e21daSmrg # Just accumulate the unique libdirs. 7223549e21daSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 7224549e21daSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 7225549e21daSmrg ;; 7226549e21daSmrg *) 7227549e21daSmrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 7228549e21daSmrg ;; 7229549e21daSmrg esac 7230549e21daSmrg fi 7231549e21daSmrg else 7232549e21daSmrg eval flag=\"$hardcode_libdir_flag_spec\" 7233549e21daSmrg dep_rpath="$dep_rpath $flag" 7234549e21daSmrg fi 7235549e21daSmrg elif test -n "$runpath_var"; then 7236549e21daSmrg case "$perm_rpath " in 7237549e21daSmrg *" $libdir "*) ;; 7238549e21daSmrg *) perm_rpath="$perm_rpath $libdir" ;; 7239549e21daSmrg esac 7240549e21daSmrg fi 7241549e21daSmrg done 7242549e21daSmrg # Substitute the hardcoded libdirs into the rpath. 7243549e21daSmrg if test -n "$hardcode_libdir_separator" && 7244549e21daSmrg test -n "$hardcode_libdirs"; then 7245549e21daSmrg libdir="$hardcode_libdirs" 7246549e21daSmrg if test -n "$hardcode_libdir_flag_spec_ld"; then 7247549e21daSmrg eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 7248549e21daSmrg else 7249549e21daSmrg eval dep_rpath=\"$hardcode_libdir_flag_spec\" 7250549e21daSmrg fi 7251549e21daSmrg fi 7252549e21daSmrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 7253549e21daSmrg # We should set the runpath_var. 7254549e21daSmrg rpath= 7255549e21daSmrg for dir in $perm_rpath; do 7256549e21daSmrg rpath="$rpath$dir:" 7257549e21daSmrg done 7258549e21daSmrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 7259549e21daSmrg fi 7260549e21daSmrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 7261549e21daSmrg fi 7262ba6a1819Smrg 7263549e21daSmrg shlibpath="$finalize_shlibpath" 7264549e21daSmrg test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 7265549e21daSmrg if test -n "$shlibpath"; then 7266549e21daSmrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 7267549e21daSmrg fi 7268ba6a1819Smrg 7269549e21daSmrg # Get the real and link names of the library. 7270549e21daSmrg eval shared_ext=\"$shrext_cmds\" 7271549e21daSmrg eval library_names=\"$library_names_spec\" 7272549e21daSmrg set dummy $library_names 7273549e21daSmrg shift 7274549e21daSmrg realname="$1" 7275549e21daSmrg shift 7276ba6a1819Smrg 7277549e21daSmrg if test -n "$soname_spec"; then 7278549e21daSmrg eval soname=\"$soname_spec\" 7279549e21daSmrg else 7280549e21daSmrg soname="$realname" 7281549e21daSmrg fi 7282549e21daSmrg if test -z "$dlname"; then 7283549e21daSmrg dlname=$soname 7284549e21daSmrg fi 7285ba6a1819Smrg 7286549e21daSmrg lib="$output_objdir/$realname" 7287549e21daSmrg linknames= 7288549e21daSmrg for link 7289549e21daSmrg do 7290549e21daSmrg linknames="$linknames $link" 7291549e21daSmrg done 7292ba6a1819Smrg 7293549e21daSmrg # Use standard objects if they are pic 7294549e21daSmrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 7295549e21daSmrg test "X$libobjs" = "X " && libobjs= 7296ba6a1819Smrg 7297549e21daSmrg delfiles= 7298549e21daSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 7299549e21daSmrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 7300549e21daSmrg export_symbols="$output_objdir/$libname.uexp" 7301549e21daSmrg delfiles="$delfiles $export_symbols" 7302549e21daSmrg fi 7303ba6a1819Smrg 7304549e21daSmrg orig_export_symbols= 7305549e21daSmrg case $host_os in 7306549e21daSmrg cygwin* | mingw* | cegcc*) 7307549e21daSmrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 7308549e21daSmrg # exporting using user supplied symfile 7309549e21daSmrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 7310549e21daSmrg # and it's NOT already a .def file. Must figure out 7311549e21daSmrg # which of the given symbols are data symbols and tag 7312549e21daSmrg # them as such. So, trigger use of export_symbols_cmds. 7313549e21daSmrg # export_symbols gets reassigned inside the "prepare 7314549e21daSmrg # the list of exported symbols" if statement, so the 7315549e21daSmrg # include_expsyms logic still works. 7316549e21daSmrg orig_export_symbols="$export_symbols" 7317549e21daSmrg export_symbols= 7318549e21daSmrg always_export_symbols=yes 7319549e21daSmrg fi 7320549e21daSmrg fi 7321549e21daSmrg ;; 7322549e21daSmrg esac 7323ba6a1819Smrg 7324549e21daSmrg # Prepare the list of exported symbols 7325549e21daSmrg if test -z "$export_symbols"; then 7326549e21daSmrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 7327549e21daSmrg func_verbose "generating symbol list for \`$libname.la'" 7328549e21daSmrg export_symbols="$output_objdir/$libname.exp" 7329549e21daSmrg $opt_dry_run || $RM $export_symbols 7330549e21daSmrg cmds=$export_symbols_cmds 7331549e21daSmrg save_ifs="$IFS"; IFS='~' 7332549e21daSmrg for cmd in $cmds; do 7333549e21daSmrg IFS="$save_ifs" 7334549e21daSmrg eval cmd=\"$cmd\" 7335549e21daSmrg func_len " $cmd" 7336549e21daSmrg len=$func_len_result 7337549e21daSmrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 7338549e21daSmrg func_show_eval "$cmd" 'exit $?' 7339549e21daSmrg skipped_export=false 7340549e21daSmrg else 7341549e21daSmrg # The command line is too long to execute in one step. 7342549e21daSmrg func_verbose "using reloadable object file for export list..." 7343549e21daSmrg skipped_export=: 7344549e21daSmrg # Break out early, otherwise skipped_export may be 7345549e21daSmrg # set to false by a later but shorter cmd. 7346549e21daSmrg break 7347549e21daSmrg fi 7348549e21daSmrg done 7349549e21daSmrg IFS="$save_ifs" 7350549e21daSmrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 7351549e21daSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 7352549e21daSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 7353549e21daSmrg fi 7354549e21daSmrg fi 7355549e21daSmrg fi 7356ba6a1819Smrg 7357549e21daSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 7358549e21daSmrg tmp_export_symbols="$export_symbols" 7359549e21daSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 7360549e21daSmrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 7361549e21daSmrg fi 7362ba6a1819Smrg 7363549e21daSmrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 7364549e21daSmrg # The given exports_symbols file has to be filtered, so filter it. 7365549e21daSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 7366549e21daSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 7367549e21daSmrg # 's' commands which not all seds can handle. GNU sed should be fine 7368549e21daSmrg # though. Also, the filter scales superlinearly with the number of 7369549e21daSmrg # global variables. join(1) would be nice here, but unfortunately 7370549e21daSmrg # isn't a blessed tool. 7371549e21daSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 7372549e21daSmrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 7373549e21daSmrg export_symbols=$output_objdir/$libname.def 7374549e21daSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 7375ba6a1819Smrg fi 7376ba6a1819Smrg 7377549e21daSmrg tmp_deplibs= 7378549e21daSmrg for test_deplib in $deplibs; do 7379549e21daSmrg case " $convenience " in 7380549e21daSmrg *" $test_deplib "*) ;; 7381549e21daSmrg *) 7382549e21daSmrg tmp_deplibs="$tmp_deplibs $test_deplib" 7383549e21daSmrg ;; 7384549e21daSmrg esac 7385549e21daSmrg done 7386549e21daSmrg deplibs="$tmp_deplibs" 7387ba6a1819Smrg 7388549e21daSmrg if test -n "$convenience"; then 7389549e21daSmrg if test -n "$whole_archive_flag_spec" && 7390549e21daSmrg test "$compiler_needs_object" = yes && 7391549e21daSmrg test -z "$libobjs"; then 7392549e21daSmrg # extract the archives, so we have objects to list. 7393549e21daSmrg # TODO: could optimize this to just extract one archive. 7394549e21daSmrg whole_archive_flag_spec= 7395549e21daSmrg fi 7396549e21daSmrg if test -n "$whole_archive_flag_spec"; then 7397549e21daSmrg save_libobjs=$libobjs 7398549e21daSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 7399549e21daSmrg test "X$libobjs" = "X " && libobjs= 7400549e21daSmrg else 7401549e21daSmrg gentop="$output_objdir/${outputname}x" 7402549e21daSmrg generated="$generated $gentop" 7403ba6a1819Smrg 7404549e21daSmrg func_extract_archives $gentop $convenience 7405549e21daSmrg libobjs="$libobjs $func_extract_archives_result" 7406549e21daSmrg test "X$libobjs" = "X " && libobjs= 7407549e21daSmrg fi 7408549e21daSmrg fi 7409ba6a1819Smrg 7410549e21daSmrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 7411549e21daSmrg eval flag=\"$thread_safe_flag_spec\" 7412549e21daSmrg linker_flags="$linker_flags $flag" 7413549e21daSmrg fi 7414ba6a1819Smrg 7415549e21daSmrg # Make a backup of the uninstalled library when relinking 7416549e21daSmrg if test "$mode" = relink; then 7417549e21daSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 7418ba6a1819Smrg fi 7419ba6a1819Smrg 7420549e21daSmrg # Do each of the archive commands. 7421549e21daSmrg if test "$module" = yes && test -n "$module_cmds" ; then 7422549e21daSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 7423549e21daSmrg eval test_cmds=\"$module_expsym_cmds\" 7424549e21daSmrg cmds=$module_expsym_cmds 7425549e21daSmrg else 7426549e21daSmrg eval test_cmds=\"$module_cmds\" 7427549e21daSmrg cmds=$module_cmds 7428549e21daSmrg fi 7429549e21daSmrg else 7430549e21daSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 7431549e21daSmrg eval test_cmds=\"$archive_expsym_cmds\" 7432549e21daSmrg cmds=$archive_expsym_cmds 7433549e21daSmrg else 7434549e21daSmrg eval test_cmds=\"$archive_cmds\" 7435549e21daSmrg cmds=$archive_cmds 7436549e21daSmrg fi 7437ba6a1819Smrg fi 7438ba6a1819Smrg 7439549e21daSmrg if test "X$skipped_export" != "X:" && 7440549e21daSmrg func_len " $test_cmds" && 7441549e21daSmrg len=$func_len_result && 7442549e21daSmrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 7443549e21daSmrg : 7444549e21daSmrg else 7445549e21daSmrg # The command line is too long to link in one step, link piecewise 7446549e21daSmrg # or, if using GNU ld and skipped_export is not :, use a linker 7447549e21daSmrg # script. 7448ba6a1819Smrg 7449549e21daSmrg # Save the value of $output and $libobjs because we want to 7450549e21daSmrg # use them later. If we have whole_archive_flag_spec, we 7451549e21daSmrg # want to use save_libobjs as it was before 7452549e21daSmrg # whole_archive_flag_spec was expanded, because we can't 7453549e21daSmrg # assume the linker understands whole_archive_flag_spec. 7454549e21daSmrg # This may have to be revisited, in case too many 7455549e21daSmrg # convenience libraries get linked in and end up exceeding 7456549e21daSmrg # the spec. 7457549e21daSmrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 7458549e21daSmrg save_libobjs=$libobjs 7459549e21daSmrg fi 7460549e21daSmrg save_output=$output 7461549e21daSmrg func_basename "$output" 7462549e21daSmrg output_la=$func_basename_result 7463ba6a1819Smrg 7464549e21daSmrg # Clear the reloadable object creation command queue and 7465549e21daSmrg # initialize k to one. 7466549e21daSmrg test_cmds= 7467549e21daSmrg concat_cmds= 7468549e21daSmrg objlist= 7469549e21daSmrg last_robj= 7470549e21daSmrg k=1 7471549e21daSmrg 7472549e21daSmrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 7473549e21daSmrg output=${output_objdir}/${output_la}.lnkscript 7474549e21daSmrg func_verbose "creating GNU ld script: $output" 7475549e21daSmrg echo 'INPUT (' > $output 7476549e21daSmrg for obj in $save_libobjs 7477549e21daSmrg do 7478549e21daSmrg $ECHO "$obj" >> $output 7479549e21daSmrg done 7480549e21daSmrg echo ')' >> $output 7481549e21daSmrg delfiles="$delfiles $output" 7482549e21daSmrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 7483549e21daSmrg output=${output_objdir}/${output_la}.lnk 7484549e21daSmrg func_verbose "creating linker input file list: $output" 7485549e21daSmrg : > $output 7486549e21daSmrg set x $save_libobjs 7487549e21daSmrg shift 7488549e21daSmrg firstobj= 7489549e21daSmrg if test "$compiler_needs_object" = yes; then 7490549e21daSmrg firstobj="$1 " 7491549e21daSmrg shift 7492549e21daSmrg fi 7493549e21daSmrg for obj 7494549e21daSmrg do 7495549e21daSmrg $ECHO "$obj" >> $output 7496549e21daSmrg done 7497549e21daSmrg delfiles="$delfiles $output" 7498549e21daSmrg output=$firstobj\"$file_list_spec$output\" 7499549e21daSmrg else 7500549e21daSmrg if test -n "$save_libobjs"; then 7501549e21daSmrg func_verbose "creating reloadable object files..." 7502549e21daSmrg output=$output_objdir/$output_la-${k}.$objext 7503549e21daSmrg eval test_cmds=\"$reload_cmds\" 7504549e21daSmrg func_len " $test_cmds" 7505549e21daSmrg len0=$func_len_result 7506549e21daSmrg len=$len0 7507549e21daSmrg 7508549e21daSmrg # Loop over the list of objects to be linked. 7509549e21daSmrg for obj in $save_libobjs 7510549e21daSmrg do 7511549e21daSmrg func_len " $obj" 7512549e21daSmrg func_arith $len + $func_len_result 7513549e21daSmrg len=$func_arith_result 7514549e21daSmrg if test "X$objlist" = X || 7515549e21daSmrg test "$len" -lt "$max_cmd_len"; then 7516549e21daSmrg func_append objlist " $obj" 7517549e21daSmrg else 7518549e21daSmrg # The command $test_cmds is almost too long, add a 7519549e21daSmrg # command to the queue. 7520549e21daSmrg if test "$k" -eq 1 ; then 7521549e21daSmrg # The first file doesn't have a previous command to add. 7522549e21daSmrg reload_objs=$objlist 7523549e21daSmrg eval concat_cmds=\"$reload_cmds\" 7524549e21daSmrg else 7525549e21daSmrg # All subsequent reloadable object files will link in 7526549e21daSmrg # the last one created. 7527549e21daSmrg reload_objs="$objlist $last_robj" 7528549e21daSmrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 7529549e21daSmrg fi 7530549e21daSmrg last_robj=$output_objdir/$output_la-${k}.$objext 7531549e21daSmrg func_arith $k + 1 7532549e21daSmrg k=$func_arith_result 7533549e21daSmrg output=$output_objdir/$output_la-${k}.$objext 7534549e21daSmrg objlist=" $obj" 7535549e21daSmrg func_len " $last_robj" 7536549e21daSmrg func_arith $len0 + $func_len_result 7537549e21daSmrg len=$func_arith_result 7538549e21daSmrg fi 7539549e21daSmrg done 7540549e21daSmrg # Handle the remaining objects by creating one last 7541549e21daSmrg # reloadable object file. All subsequent reloadable object 7542549e21daSmrg # files will link in the last one created. 7543549e21daSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 7544549e21daSmrg reload_objs="$objlist $last_robj" 7545549e21daSmrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 7546549e21daSmrg if test -n "$last_robj"; then 7547549e21daSmrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 7548549e21daSmrg fi 7549549e21daSmrg delfiles="$delfiles $output" 7550ba6a1819Smrg 7551549e21daSmrg else 7552549e21daSmrg output= 7553549e21daSmrg fi 7554ba6a1819Smrg 7555549e21daSmrg if ${skipped_export-false}; then 7556549e21daSmrg func_verbose "generating symbol list for \`$libname.la'" 7557549e21daSmrg export_symbols="$output_objdir/$libname.exp" 7558549e21daSmrg $opt_dry_run || $RM $export_symbols 7559549e21daSmrg libobjs=$output 7560549e21daSmrg # Append the command to create the export file. 7561549e21daSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 7562549e21daSmrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 7563549e21daSmrg if test -n "$last_robj"; then 7564549e21daSmrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 7565549e21daSmrg fi 7566549e21daSmrg fi 7567ba6a1819Smrg 7568549e21daSmrg test -n "$save_libobjs" && 7569549e21daSmrg func_verbose "creating a temporary reloadable object file: $output" 7570ba6a1819Smrg 7571549e21daSmrg # Loop through the commands generated above and execute them. 7572549e21daSmrg save_ifs="$IFS"; IFS='~' 7573549e21daSmrg for cmd in $concat_cmds; do 7574549e21daSmrg IFS="$save_ifs" 7575549e21daSmrg $opt_silent || { 7576549e21daSmrg func_quote_for_expand "$cmd" 7577549e21daSmrg eval "func_echo $func_quote_for_expand_result" 7578549e21daSmrg } 7579549e21daSmrg $opt_dry_run || eval "$cmd" || { 7580549e21daSmrg lt_exit=$? 7581549e21daSmrg 7582549e21daSmrg # Restore the uninstalled library and exit 7583549e21daSmrg if test "$mode" = relink; then 7584549e21daSmrg ( cd "$output_objdir" && \ 7585549e21daSmrg $RM "${realname}T" && \ 7586549e21daSmrg $MV "${realname}U" "$realname" ) 7587549e21daSmrg fi 7588ba6a1819Smrg 7589549e21daSmrg exit $lt_exit 7590549e21daSmrg } 7591549e21daSmrg done 7592549e21daSmrg IFS="$save_ifs" 7593ba6a1819Smrg 7594549e21daSmrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 7595549e21daSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 7596549e21daSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 7597ba6a1819Smrg fi 7598ba6a1819Smrg fi 7599ba6a1819Smrg 7600549e21daSmrg if ${skipped_export-false}; then 7601549e21daSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 7602549e21daSmrg tmp_export_symbols="$export_symbols" 7603549e21daSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 7604549e21daSmrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 7605549e21daSmrg fi 7606ba6a1819Smrg 7607549e21daSmrg if test -n "$orig_export_symbols"; then 7608549e21daSmrg # The given exports_symbols file has to be filtered, so filter it. 7609549e21daSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 7610549e21daSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 7611549e21daSmrg # 's' commands which not all seds can handle. GNU sed should be fine 7612549e21daSmrg # though. Also, the filter scales superlinearly with the number of 7613549e21daSmrg # global variables. join(1) would be nice here, but unfortunately 7614549e21daSmrg # isn't a blessed tool. 7615549e21daSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 7616549e21daSmrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 7617549e21daSmrg export_symbols=$output_objdir/$libname.def 7618549e21daSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 7619549e21daSmrg fi 7620549e21daSmrg fi 7621ba6a1819Smrg 7622549e21daSmrg libobjs=$output 7623549e21daSmrg # Restore the value of output. 7624549e21daSmrg output=$save_output 7625ba6a1819Smrg 7626549e21daSmrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 7627549e21daSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 7628549e21daSmrg test "X$libobjs" = "X " && libobjs= 7629549e21daSmrg fi 7630549e21daSmrg # Expand the library linking commands again to reset the 7631549e21daSmrg # value of $libobjs for piecewise linking. 7632549e21daSmrg 7633549e21daSmrg # Do each of the archive commands. 7634549e21daSmrg if test "$module" = yes && test -n "$module_cmds" ; then 7635549e21daSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 7636549e21daSmrg cmds=$module_expsym_cmds 7637ba6a1819Smrg else 7638549e21daSmrg cmds=$module_cmds 7639ba6a1819Smrg fi 7640ba6a1819Smrg else 7641549e21daSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 7642549e21daSmrg cmds=$archive_expsym_cmds 7643549e21daSmrg else 7644549e21daSmrg cmds=$archive_cmds 7645549e21daSmrg fi 7646ba6a1819Smrg fi 7647ba6a1819Smrg fi 7648ba6a1819Smrg 7649549e21daSmrg if test -n "$delfiles"; then 7650549e21daSmrg # Append the command to remove temporary files to $cmds. 7651549e21daSmrg eval cmds=\"\$cmds~\$RM $delfiles\" 7652549e21daSmrg fi 7653ba6a1819Smrg 7654549e21daSmrg # Add any objects from preloaded convenience libraries 7655549e21daSmrg if test -n "$dlprefiles"; then 7656549e21daSmrg gentop="$output_objdir/${outputname}x" 7657549e21daSmrg generated="$generated $gentop" 7658ba6a1819Smrg 7659549e21daSmrg func_extract_archives $gentop $dlprefiles 7660549e21daSmrg libobjs="$libobjs $func_extract_archives_result" 7661549e21daSmrg test "X$libobjs" = "X " && libobjs= 7662ba6a1819Smrg fi 7663ba6a1819Smrg 7664549e21daSmrg save_ifs="$IFS"; IFS='~' 7665549e21daSmrg for cmd in $cmds; do 7666549e21daSmrg IFS="$save_ifs" 7667549e21daSmrg eval cmd=\"$cmd\" 7668549e21daSmrg $opt_silent || { 7669549e21daSmrg func_quote_for_expand "$cmd" 7670549e21daSmrg eval "func_echo $func_quote_for_expand_result" 7671549e21daSmrg } 7672549e21daSmrg $opt_dry_run || eval "$cmd" || { 7673549e21daSmrg lt_exit=$? 7674ba6a1819Smrg 7675549e21daSmrg # Restore the uninstalled library and exit 7676549e21daSmrg if test "$mode" = relink; then 7677549e21daSmrg ( cd "$output_objdir" && \ 7678549e21daSmrg $RM "${realname}T" && \ 7679549e21daSmrg $MV "${realname}U" "$realname" ) 7680ba6a1819Smrg fi 7681ba6a1819Smrg 7682549e21daSmrg exit $lt_exit 7683549e21daSmrg } 7684549e21daSmrg done 7685549e21daSmrg IFS="$save_ifs" 7686ba6a1819Smrg 7687549e21daSmrg # Restore the uninstalled library and exit 7688549e21daSmrg if test "$mode" = relink; then 7689549e21daSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 7690ba6a1819Smrg 7691549e21daSmrg if test -n "$convenience"; then 7692549e21daSmrg if test -z "$whole_archive_flag_spec"; then 7693549e21daSmrg func_show_eval '${RM}r "$gentop"' 7694549e21daSmrg fi 7695549e21daSmrg fi 7696ba6a1819Smrg 7697549e21daSmrg exit $EXIT_SUCCESS 7698549e21daSmrg fi 7699ba6a1819Smrg 7700549e21daSmrg # Create links to the real library. 7701549e21daSmrg for linkname in $linknames; do 7702549e21daSmrg if test "$realname" != "$linkname"; then 7703549e21daSmrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 7704ba6a1819Smrg fi 7705ba6a1819Smrg done 7706549e21daSmrg 7707549e21daSmrg # If -module or -export-dynamic was specified, set the dlname. 7708549e21daSmrg if test "$module" = yes || test "$export_dynamic" = yes; then 7709549e21daSmrg # On all known operating systems, these are identical. 7710549e21daSmrg dlname="$soname" 7711549e21daSmrg fi 7712ba6a1819Smrg fi 7713ba6a1819Smrg ;; 7714ba6a1819Smrg 7715549e21daSmrg obj) 7716549e21daSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7717549e21daSmrg func_warning "\`-dlopen' is ignored for objects" 7718549e21daSmrg fi 7719ba6a1819Smrg 7720549e21daSmrg case " $deplibs" in 7721549e21daSmrg *\ -l* | *\ -L*) 7722549e21daSmrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 7723ba6a1819Smrg esac 7724ba6a1819Smrg 7725549e21daSmrg test -n "$rpath" && \ 7726549e21daSmrg func_warning "\`-rpath' is ignored for objects" 7727ba6a1819Smrg 7728549e21daSmrg test -n "$xrpath" && \ 7729549e21daSmrg func_warning "\`-R' is ignored for objects" 7730ba6a1819Smrg 7731549e21daSmrg test -n "$vinfo" && \ 7732549e21daSmrg func_warning "\`-version-info' is ignored for objects" 7733549e21daSmrg 7734549e21daSmrg test -n "$release" && \ 7735549e21daSmrg func_warning "\`-release' is ignored for objects" 7736549e21daSmrg 7737549e21daSmrg case $output in 7738549e21daSmrg *.lo) 7739549e21daSmrg test -n "$objs$old_deplibs" && \ 7740549e21daSmrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 7741549e21daSmrg 7742549e21daSmrg libobj=$output 7743549e21daSmrg func_lo2o "$libobj" 7744549e21daSmrg obj=$func_lo2o_result 7745ba6a1819Smrg ;; 7746ba6a1819Smrg *) 7747549e21daSmrg libobj= 7748549e21daSmrg obj="$output" 7749ba6a1819Smrg ;; 7750ba6a1819Smrg esac 7751ba6a1819Smrg 7752549e21daSmrg # Delete the old objects. 7753549e21daSmrg $opt_dry_run || $RM $obj $libobj 7754ba6a1819Smrg 7755549e21daSmrg # Objects from convenience libraries. This assumes 7756549e21daSmrg # single-version convenience libraries. Whenever we create 7757549e21daSmrg # different ones for PIC/non-PIC, this we'll have to duplicate 7758549e21daSmrg # the extraction. 7759549e21daSmrg reload_conv_objs= 7760549e21daSmrg gentop= 7761549e21daSmrg # reload_cmds runs $LD directly, so let us get rid of 7762549e21daSmrg # -Wl from whole_archive_flag_spec and hope we can get by with 7763549e21daSmrg # turning comma into space.. 7764549e21daSmrg wl= 7765ba6a1819Smrg 7766549e21daSmrg if test -n "$convenience"; then 7767549e21daSmrg if test -n "$whole_archive_flag_spec"; then 7768549e21daSmrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 7769549e21daSmrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 7770549e21daSmrg else 7771549e21daSmrg gentop="$output_objdir/${obj}x" 7772549e21daSmrg generated="$generated $gentop" 7773ba6a1819Smrg 7774549e21daSmrg func_extract_archives $gentop $convenience 7775549e21daSmrg reload_conv_objs="$reload_objs $func_extract_archives_result" 7776549e21daSmrg fi 7777ba6a1819Smrg fi 7778ba6a1819Smrg 7779549e21daSmrg # Create the old-style object. 7780549e21daSmrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 7781ba6a1819Smrg 7782549e21daSmrg output="$obj" 7783549e21daSmrg func_execute_cmds "$reload_cmds" 'exit $?' 7784ba6a1819Smrg 7785549e21daSmrg # Exit if we aren't doing a library object file. 7786549e21daSmrg if test -z "$libobj"; then 7787549e21daSmrg if test -n "$gentop"; then 7788549e21daSmrg func_show_eval '${RM}r "$gentop"' 7789549e21daSmrg fi 7790549e21daSmrg 7791549e21daSmrg exit $EXIT_SUCCESS 7792ba6a1819Smrg fi 7793549e21daSmrg 7794549e21daSmrg if test "$build_libtool_libs" != yes; then 7795549e21daSmrg if test -n "$gentop"; then 7796549e21daSmrg func_show_eval '${RM}r "$gentop"' 7797549e21daSmrg fi 7798549e21daSmrg 7799549e21daSmrg # Create an invalid libtool object if no PIC, so that we don't 7800549e21daSmrg # accidentally link it into a program. 7801549e21daSmrg # $show "echo timestamp > $libobj" 7802549e21daSmrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 7803549e21daSmrg exit $EXIT_SUCCESS 7804549e21daSmrg fi 7805549e21daSmrg 7806549e21daSmrg if test -n "$pic_flag" || test "$pic_mode" != default; then 7807549e21daSmrg # Only do commands if we really have different PIC objects. 7808549e21daSmrg reload_objs="$libobjs $reload_conv_objs" 7809549e21daSmrg output="$libobj" 7810549e21daSmrg func_execute_cmds "$reload_cmds" 'exit $?' 7811549e21daSmrg fi 7812549e21daSmrg 7813549e21daSmrg if test -n "$gentop"; then 7814549e21daSmrg func_show_eval '${RM}r "$gentop"' 7815549e21daSmrg fi 7816549e21daSmrg 7817549e21daSmrg exit $EXIT_SUCCESS 7818ba6a1819Smrg ;; 7819ba6a1819Smrg 7820549e21daSmrg prog) 7821549e21daSmrg case $host in 7822549e21daSmrg *cygwin*) func_stripname '' '.exe' "$output" 7823549e21daSmrg output=$func_stripname_result.exe;; 7824549e21daSmrg esac 7825549e21daSmrg test -n "$vinfo" && \ 7826549e21daSmrg func_warning "\`-version-info' is ignored for programs" 7827ba6a1819Smrg 7828549e21daSmrg test -n "$release" && \ 7829549e21daSmrg func_warning "\`-release' is ignored for programs" 7830ba6a1819Smrg 7831549e21daSmrg test "$preload" = yes \ 7832549e21daSmrg && test "$dlopen_support" = unknown \ 7833549e21daSmrg && test "$dlopen_self" = unknown \ 7834549e21daSmrg && test "$dlopen_self_static" = unknown && \ 7835549e21daSmrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 7836549e21daSmrg 7837549e21daSmrg case $host in 7838549e21daSmrg *-*-rhapsody* | *-*-darwin1.[012]) 7839549e21daSmrg # On Rhapsody replace the C library is the System framework 7840549e21daSmrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 7841549e21daSmrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 7842ba6a1819Smrg ;; 7843549e21daSmrg esac 7844ba6a1819Smrg 7845549e21daSmrg case $host in 7846549e21daSmrg *-*-darwin*) 7847549e21daSmrg # Don't allow lazy linking, it breaks C++ global constructors 7848549e21daSmrg # But is supposedly fixed on 10.4 or later (yay!). 7849549e21daSmrg if test "$tagname" = CXX ; then 7850549e21daSmrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 7851549e21daSmrg 10.[0123]) 7852549e21daSmrg compile_command="$compile_command ${wl}-bind_at_load" 7853549e21daSmrg finalize_command="$finalize_command ${wl}-bind_at_load" 7854549e21daSmrg ;; 7855549e21daSmrg esac 7856ba6a1819Smrg fi 7857549e21daSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7858549e21daSmrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7859549e21daSmrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7860549e21daSmrg ;; 7861549e21daSmrg esac 7862ba6a1819Smrg 7863ba6a1819Smrg 7864549e21daSmrg # move library search paths that coincide with paths to not yet 7865549e21daSmrg # installed libraries to the beginning of the library search list 7866549e21daSmrg new_libs= 7867549e21daSmrg for path in $notinst_path; do 7868549e21daSmrg case " $new_libs " in 7869549e21daSmrg *" -L$path/$objdir "*) ;; 7870549e21daSmrg *) 7871549e21daSmrg case " $compile_deplibs " in 7872549e21daSmrg *" -L$path/$objdir "*) 7873549e21daSmrg new_libs="$new_libs -L$path/$objdir" ;; 7874ba6a1819Smrg esac 7875549e21daSmrg ;; 7876549e21daSmrg esac 7877549e21daSmrg done 7878549e21daSmrg for deplib in $compile_deplibs; do 7879549e21daSmrg case $deplib in 7880549e21daSmrg -L*) 7881549e21daSmrg case " $new_libs " in 7882549e21daSmrg *" $deplib "*) ;; 7883549e21daSmrg *) new_libs="$new_libs $deplib" ;; 7884ba6a1819Smrg esac 7885549e21daSmrg ;; 7886549e21daSmrg *) new_libs="$new_libs $deplib" ;; 7887549e21daSmrg esac 7888549e21daSmrg done 7889549e21daSmrg compile_deplibs="$new_libs" 7890ba6a1819Smrg 7891ba6a1819Smrg 7892549e21daSmrg compile_command="$compile_command $compile_deplibs" 7893549e21daSmrg finalize_command="$finalize_command $finalize_deplibs" 7894ba6a1819Smrg 7895549e21daSmrg if test -n "$rpath$xrpath"; then 7896549e21daSmrg # If the user specified any rpath flags, then add them. 7897549e21daSmrg for libdir in $rpath $xrpath; do 7898549e21daSmrg # This is the magic to use -rpath. 7899549e21daSmrg case "$finalize_rpath " in 7900549e21daSmrg *" $libdir "*) ;; 7901549e21daSmrg *) finalize_rpath="$finalize_rpath $libdir" ;; 7902549e21daSmrg esac 7903549e21daSmrg done 7904549e21daSmrg fi 7905ba6a1819Smrg 7906549e21daSmrg # Now hardcode the library paths 7907549e21daSmrg rpath= 7908549e21daSmrg hardcode_libdirs= 7909549e21daSmrg for libdir in $compile_rpath $finalize_rpath; do 7910549e21daSmrg if test -n "$hardcode_libdir_flag_spec"; then 7911549e21daSmrg if test -n "$hardcode_libdir_separator"; then 7912549e21daSmrg if test -z "$hardcode_libdirs"; then 7913549e21daSmrg hardcode_libdirs="$libdir" 7914549e21daSmrg else 7915549e21daSmrg # Just accumulate the unique libdirs. 7916549e21daSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 7917549e21daSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 7918549e21daSmrg ;; 7919549e21daSmrg *) 7920549e21daSmrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 7921549e21daSmrg ;; 7922549e21daSmrg esac 7923549e21daSmrg fi 7924ba6a1819Smrg else 7925549e21daSmrg eval flag=\"$hardcode_libdir_flag_spec\" 7926549e21daSmrg rpath="$rpath $flag" 7927ba6a1819Smrg fi 7928549e21daSmrg elif test -n "$runpath_var"; then 7929549e21daSmrg case "$perm_rpath " in 7930549e21daSmrg *" $libdir "*) ;; 7931549e21daSmrg *) perm_rpath="$perm_rpath $libdir" ;; 7932549e21daSmrg esac 7933549e21daSmrg fi 7934549e21daSmrg case $host in 7935549e21daSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 7936549e21daSmrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 7937549e21daSmrg case :$dllsearchpath: in 7938549e21daSmrg *":$libdir:"*) ;; 7939549e21daSmrg ::) dllsearchpath=$libdir;; 7940549e21daSmrg *) dllsearchpath="$dllsearchpath:$libdir";; 7941549e21daSmrg esac 7942549e21daSmrg case :$dllsearchpath: in 7943549e21daSmrg *":$testbindir:"*) ;; 7944549e21daSmrg ::) dllsearchpath=$testbindir;; 7945549e21daSmrg *) dllsearchpath="$dllsearchpath:$testbindir";; 7946549e21daSmrg esac 7947549e21daSmrg ;; 7948549e21daSmrg esac 7949549e21daSmrg done 7950549e21daSmrg # Substitute the hardcoded libdirs into the rpath. 7951549e21daSmrg if test -n "$hardcode_libdir_separator" && 7952549e21daSmrg test -n "$hardcode_libdirs"; then 7953549e21daSmrg libdir="$hardcode_libdirs" 7954549e21daSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 7955549e21daSmrg fi 7956549e21daSmrg compile_rpath="$rpath" 7957ba6a1819Smrg 7958549e21daSmrg rpath= 7959549e21daSmrg hardcode_libdirs= 7960549e21daSmrg for libdir in $finalize_rpath; do 7961549e21daSmrg if test -n "$hardcode_libdir_flag_spec"; then 7962549e21daSmrg if test -n "$hardcode_libdir_separator"; then 7963549e21daSmrg if test -z "$hardcode_libdirs"; then 7964549e21daSmrg hardcode_libdirs="$libdir" 7965549e21daSmrg else 7966549e21daSmrg # Just accumulate the unique libdirs. 7967549e21daSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 7968549e21daSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 7969549e21daSmrg ;; 7970549e21daSmrg *) 7971549e21daSmrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 7972549e21daSmrg ;; 7973549e21daSmrg esac 7974549e21daSmrg fi 7975ba6a1819Smrg else 7976549e21daSmrg eval flag=\"$hardcode_libdir_flag_spec\" 7977549e21daSmrg rpath="$rpath $flag" 7978ba6a1819Smrg fi 7979549e21daSmrg elif test -n "$runpath_var"; then 7980549e21daSmrg case "$finalize_perm_rpath " in 7981549e21daSmrg *" $libdir "*) ;; 7982549e21daSmrg *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; 7983549e21daSmrg esac 7984ba6a1819Smrg fi 7985549e21daSmrg done 7986549e21daSmrg # Substitute the hardcoded libdirs into the rpath. 7987549e21daSmrg if test -n "$hardcode_libdir_separator" && 7988549e21daSmrg test -n "$hardcode_libdirs"; then 7989549e21daSmrg libdir="$hardcode_libdirs" 7990549e21daSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 7991549e21daSmrg fi 7992549e21daSmrg finalize_rpath="$rpath" 7993ba6a1819Smrg 7994549e21daSmrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 7995549e21daSmrg # Transform all the library objects into standard objects. 7996549e21daSmrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 7997549e21daSmrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 7998549e21daSmrg fi 7999ba6a1819Smrg 8000549e21daSmrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8001ba6a1819Smrg 8002549e21daSmrg # template prelinking step 8003549e21daSmrg if test -n "$prelink_cmds"; then 8004549e21daSmrg func_execute_cmds "$prelink_cmds" 'exit $?' 8005549e21daSmrg fi 8006ba6a1819Smrg 8007549e21daSmrg wrappers_required=yes 8008549e21daSmrg case $host in 8009549e21daSmrg *cegcc* | *mingw32ce*) 8010549e21daSmrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 8011549e21daSmrg wrappers_required=no 8012549e21daSmrg ;; 8013549e21daSmrg *cygwin* | *mingw* ) 8014549e21daSmrg if test "$build_libtool_libs" != yes; then 8015549e21daSmrg wrappers_required=no 8016549e21daSmrg fi 8017549e21daSmrg ;; 8018549e21daSmrg *) 8019549e21daSmrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 8020549e21daSmrg wrappers_required=no 8021549e21daSmrg fi 8022549e21daSmrg ;; 8023549e21daSmrg esac 8024549e21daSmrg if test "$wrappers_required" = no; then 8025549e21daSmrg # Replace the output file specification. 8026549e21daSmrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8027549e21daSmrg link_command="$compile_command$compile_rpath" 8028ba6a1819Smrg 8029549e21daSmrg # We have no uninstalled library dependencies, so finalize right now. 8030549e21daSmrg exit_status=0 8031549e21daSmrg func_show_eval "$link_command" 'exit_status=$?' 8032ba6a1819Smrg 8033549e21daSmrg # Delete the generated files. 8034549e21daSmrg if test -f "$output_objdir/${outputname}S.${objext}"; then 8035549e21daSmrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8036ba6a1819Smrg fi 8037ba6a1819Smrg 8038549e21daSmrg exit $exit_status 8039549e21daSmrg fi 8040ba6a1819Smrg 8041549e21daSmrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 8042549e21daSmrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8043549e21daSmrg fi 8044549e21daSmrg if test -n "$finalize_shlibpath"; then 8045549e21daSmrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8046549e21daSmrg fi 8047ba6a1819Smrg 8048549e21daSmrg compile_var= 8049549e21daSmrg finalize_var= 8050549e21daSmrg if test -n "$runpath_var"; then 8051549e21daSmrg if test -n "$perm_rpath"; then 8052549e21daSmrg # We should set the runpath_var. 8053549e21daSmrg rpath= 8054549e21daSmrg for dir in $perm_rpath; do 8055549e21daSmrg rpath="$rpath$dir:" 8056549e21daSmrg done 8057549e21daSmrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 8058ba6a1819Smrg fi 8059549e21daSmrg if test -n "$finalize_perm_rpath"; then 8060549e21daSmrg # We should set the runpath_var. 8061549e21daSmrg rpath= 8062549e21daSmrg for dir in $finalize_perm_rpath; do 8063549e21daSmrg rpath="$rpath$dir:" 8064549e21daSmrg done 8065549e21daSmrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8066ba6a1819Smrg fi 8067549e21daSmrg fi 8068ba6a1819Smrg 8069549e21daSmrg if test "$no_install" = yes; then 8070549e21daSmrg # We don't need to create a wrapper script. 8071549e21daSmrg link_command="$compile_var$compile_command$compile_rpath" 8072549e21daSmrg # Replace the output file specification. 8073549e21daSmrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8074549e21daSmrg # Delete the old output file. 8075549e21daSmrg $opt_dry_run || $RM $output 8076549e21daSmrg # Link the executable and exit 8077549e21daSmrg func_show_eval "$link_command" 'exit $?' 8078ba6a1819Smrg exit $EXIT_SUCCESS 8079549e21daSmrg fi 8080ba6a1819Smrg 8081549e21daSmrg if test "$hardcode_action" = relink; then 8082549e21daSmrg # Fast installation is not supported 8083549e21daSmrg link_command="$compile_var$compile_command$compile_rpath" 8084549e21daSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8085549e21daSmrg 8086549e21daSmrg func_warning "this platform does not like uninstalled shared libraries" 8087549e21daSmrg func_warning "\`$output' will be relinked during installation" 8088549e21daSmrg else 8089549e21daSmrg if test "$fast_install" != no; then 8090549e21daSmrg link_command="$finalize_var$compile_command$finalize_rpath" 8091549e21daSmrg if test "$fast_install" = yes; then 8092549e21daSmrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 8093549e21daSmrg else 8094549e21daSmrg # fast_install is set to needless 8095549e21daSmrg relink_command= 8096549e21daSmrg fi 8097ba6a1819Smrg else 8098549e21daSmrg link_command="$compile_var$compile_command$compile_rpath" 8099549e21daSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8100ba6a1819Smrg fi 8101549e21daSmrg fi 8102ba6a1819Smrg 8103549e21daSmrg # Replace the output file specification. 8104549e21daSmrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 8105ba6a1819Smrg 8106549e21daSmrg # Delete the old output files. 8107549e21daSmrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 8108ba6a1819Smrg 8109549e21daSmrg func_show_eval "$link_command" 'exit $?' 8110ba6a1819Smrg 8111549e21daSmrg # Now create the wrapper script. 8112549e21daSmrg func_verbose "creating $output" 8113ba6a1819Smrg 8114549e21daSmrg # Quote the relink command for shipping. 8115549e21daSmrg if test -n "$relink_command"; then 8116549e21daSmrg # Preserve any variables that may affect compiler behavior 8117549e21daSmrg for var in $variables_saved_for_relink; do 8118549e21daSmrg if eval test -z \"\${$var+set}\"; then 8119549e21daSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 8120549e21daSmrg elif eval var_value=\$$var; test -z "$var_value"; then 8121549e21daSmrg relink_command="$var=; export $var; $relink_command" 8122549e21daSmrg else 8123549e21daSmrg func_quote_for_eval "$var_value" 8124549e21daSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 8125549e21daSmrg fi 8126549e21daSmrg done 8127549e21daSmrg relink_command="(cd `pwd`; $relink_command)" 8128549e21daSmrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 8129549e21daSmrg fi 8130ba6a1819Smrg 8131549e21daSmrg # Only actually do things if not in dry run mode. 8132549e21daSmrg $opt_dry_run || { 8133549e21daSmrg # win32 will think the script is a binary if it has 8134549e21daSmrg # a .exe suffix, so we strip it off here. 8135549e21daSmrg case $output in 8136549e21daSmrg *.exe) func_stripname '' '.exe' "$output" 8137549e21daSmrg output=$func_stripname_result ;; 8138549e21daSmrg esac 8139549e21daSmrg # test for cygwin because mv fails w/o .exe extensions 8140549e21daSmrg case $host in 8141549e21daSmrg *cygwin*) 8142549e21daSmrg exeext=.exe 8143549e21daSmrg func_stripname '' '.exe' "$outputname" 8144549e21daSmrg outputname=$func_stripname_result ;; 8145549e21daSmrg *) exeext= ;; 8146549e21daSmrg esac 8147549e21daSmrg case $host in 8148549e21daSmrg *cygwin* | *mingw* ) 8149549e21daSmrg func_dirname_and_basename "$output" "" "." 8150549e21daSmrg output_name=$func_basename_result 8151549e21daSmrg output_path=$func_dirname_result 8152549e21daSmrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 8153549e21daSmrg cwrapper="$output_path/$output_name.exe" 8154549e21daSmrg $RM $cwrappersource $cwrapper 8155549e21daSmrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 8156549e21daSmrg 8157549e21daSmrg func_emit_cwrapperexe_src > $cwrappersource 8158549e21daSmrg 8159549e21daSmrg # The wrapper executable is built using the $host compiler, 8160549e21daSmrg # because it contains $host paths and files. If cross- 8161549e21daSmrg # compiling, it, like the target executable, must be 8162549e21daSmrg # executed on the $host or under an emulation environment. 8163549e21daSmrg $opt_dry_run || { 8164549e21daSmrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 8165549e21daSmrg $STRIP $cwrapper 8166549e21daSmrg } 8167549e21daSmrg 8168549e21daSmrg # Now, create the wrapper script for func_source use: 8169549e21daSmrg func_ltwrapper_scriptname $cwrapper 8170549e21daSmrg $RM $func_ltwrapper_scriptname_result 8171549e21daSmrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 8172549e21daSmrg $opt_dry_run || { 8173549e21daSmrg # note: this script will not be executed, so do not chmod. 8174549e21daSmrg if test "x$build" = "x$host" ; then 8175549e21daSmrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 8176ba6a1819Smrg else 8177549e21daSmrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 8178ba6a1819Smrg fi 8179549e21daSmrg } 8180549e21daSmrg ;; 8181549e21daSmrg * ) 8182549e21daSmrg $RM $output 8183549e21daSmrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 8184ba6a1819Smrg 8185549e21daSmrg func_emit_wrapper no > $output 8186549e21daSmrg chmod +x $output 8187ba6a1819Smrg ;; 8188ba6a1819Smrg esac 8189549e21daSmrg } 8190549e21daSmrg exit $EXIT_SUCCESS 8191549e21daSmrg ;; 8192549e21daSmrg esac 8193ba6a1819Smrg 8194549e21daSmrg # See if we need to build an old-fashioned archive. 8195549e21daSmrg for oldlib in $oldlibs; do 8196ba6a1819Smrg 8197549e21daSmrg if test "$build_libtool_libs" = convenience; then 8198549e21daSmrg oldobjs="$libobjs_save $symfileobj" 8199549e21daSmrg addlibs="$convenience" 8200549e21daSmrg build_libtool_libs=no 8201549e21daSmrg else 8202549e21daSmrg if test "$build_libtool_libs" = module; then 8203549e21daSmrg oldobjs="$libobjs_save" 8204549e21daSmrg build_libtool_libs=no 8205549e21daSmrg else 8206549e21daSmrg oldobjs="$old_deplibs $non_pic_objects" 8207549e21daSmrg if test "$preload" = yes && test -f "$symfileobj"; then 8208549e21daSmrg oldobjs="$oldobjs $symfileobj" 8209549e21daSmrg fi 8210549e21daSmrg fi 8211549e21daSmrg addlibs="$old_convenience" 8212ba6a1819Smrg fi 8213ba6a1819Smrg 8214549e21daSmrg if test -n "$addlibs"; then 8215549e21daSmrg gentop="$output_objdir/${outputname}x" 8216549e21daSmrg generated="$generated $gentop" 8217ba6a1819Smrg 8218549e21daSmrg func_extract_archives $gentop $addlibs 8219549e21daSmrg oldobjs="$oldobjs $func_extract_archives_result" 8220549e21daSmrg fi 8221ba6a1819Smrg 8222549e21daSmrg # Do each command in the archive commands. 8223549e21daSmrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 8224549e21daSmrg cmds=$old_archive_from_new_cmds 8225549e21daSmrg else 8226ba6a1819Smrg 8227549e21daSmrg # Add any objects from preloaded convenience libraries 8228549e21daSmrg if test -n "$dlprefiles"; then 8229549e21daSmrg gentop="$output_objdir/${outputname}x" 8230549e21daSmrg generated="$generated $gentop" 8231ba6a1819Smrg 8232549e21daSmrg func_extract_archives $gentop $dlprefiles 8233549e21daSmrg oldobjs="$oldobjs $func_extract_archives_result" 8234549e21daSmrg fi 8235ba6a1819Smrg 8236549e21daSmrg # POSIX demands no paths to be encoded in archives. We have 8237549e21daSmrg # to avoid creating archives with duplicate basenames if we 8238549e21daSmrg # might have to extract them afterwards, e.g., when creating a 8239549e21daSmrg # static archive out of a convenience library, or when linking 8240549e21daSmrg # the entirety of a libtool archive into another (currently 8241549e21daSmrg # not supported by libtool). 8242549e21daSmrg if (for obj in $oldobjs 8243549e21daSmrg do 8244549e21daSmrg func_basename "$obj" 8245549e21daSmrg $ECHO "$func_basename_result" 8246549e21daSmrg done | sort | sort -uc >/dev/null 2>&1); then 8247549e21daSmrg : 8248549e21daSmrg else 8249549e21daSmrg echo "copying selected object files to avoid basename conflicts..." 8250549e21daSmrg gentop="$output_objdir/${outputname}x" 8251549e21daSmrg generated="$generated $gentop" 8252549e21daSmrg func_mkdir_p "$gentop" 8253549e21daSmrg save_oldobjs=$oldobjs 8254549e21daSmrg oldobjs= 8255549e21daSmrg counter=1 8256549e21daSmrg for obj in $save_oldobjs 8257549e21daSmrg do 8258549e21daSmrg func_basename "$obj" 8259549e21daSmrg objbase="$func_basename_result" 8260549e21daSmrg case " $oldobjs " in 8261549e21daSmrg " ") oldobjs=$obj ;; 8262549e21daSmrg *[\ /]"$objbase "*) 8263549e21daSmrg while :; do 8264549e21daSmrg # Make sure we don't pick an alternate name that also 8265549e21daSmrg # overlaps. 8266549e21daSmrg newobj=lt$counter-$objbase 8267549e21daSmrg func_arith $counter + 1 8268549e21daSmrg counter=$func_arith_result 8269549e21daSmrg case " $oldobjs " in 8270549e21daSmrg *[\ /]"$newobj "*) ;; 8271549e21daSmrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 8272549e21daSmrg esac 8273549e21daSmrg done 8274549e21daSmrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 8275549e21daSmrg oldobjs="$oldobjs $gentop/$newobj" 8276549e21daSmrg ;; 8277549e21daSmrg *) oldobjs="$oldobjs $obj" ;; 8278549e21daSmrg esac 8279ba6a1819Smrg done 8280ba6a1819Smrg fi 8281549e21daSmrg eval cmds=\"$old_archive_cmds\" 8282ba6a1819Smrg 8283549e21daSmrg func_len " $cmds" 8284549e21daSmrg len=$func_len_result 8285549e21daSmrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 8286549e21daSmrg cmds=$old_archive_cmds 8287549e21daSmrg else 8288549e21daSmrg # the command line is too long to link in one step, link in parts 8289549e21daSmrg func_verbose "using piecewise archive linking..." 8290549e21daSmrg save_RANLIB=$RANLIB 8291549e21daSmrg RANLIB=: 8292549e21daSmrg objlist= 8293549e21daSmrg concat_cmds= 8294549e21daSmrg save_oldobjs=$oldobjs 8295549e21daSmrg oldobjs= 8296549e21daSmrg # Is there a better way of finding the last object in the list? 8297549e21daSmrg for obj in $save_oldobjs 8298549e21daSmrg do 8299549e21daSmrg last_oldobj=$obj 8300549e21daSmrg done 8301549e21daSmrg eval test_cmds=\"$old_archive_cmds\" 8302549e21daSmrg func_len " $test_cmds" 8303549e21daSmrg len0=$func_len_result 8304549e21daSmrg len=$len0 8305549e21daSmrg for obj in $save_oldobjs 8306549e21daSmrg do 8307549e21daSmrg func_len " $obj" 8308549e21daSmrg func_arith $len + $func_len_result 8309549e21daSmrg len=$func_arith_result 8310549e21daSmrg func_append objlist " $obj" 8311549e21daSmrg if test "$len" -lt "$max_cmd_len"; then 8312549e21daSmrg : 8313549e21daSmrg else 8314549e21daSmrg # the above command should be used before it gets too long 8315549e21daSmrg oldobjs=$objlist 8316549e21daSmrg if test "$obj" = "$last_oldobj" ; then 8317549e21daSmrg RANLIB=$save_RANLIB 8318549e21daSmrg fi 8319549e21daSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8320549e21daSmrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 8321549e21daSmrg objlist= 8322549e21daSmrg len=$len0 8323549e21daSmrg fi 8324549e21daSmrg done 8325549e21daSmrg RANLIB=$save_RANLIB 8326549e21daSmrg oldobjs=$objlist 8327549e21daSmrg if test "X$oldobjs" = "X" ; then 8328549e21daSmrg eval cmds=\"\$concat_cmds\" 8329549e21daSmrg else 8330549e21daSmrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 8331549e21daSmrg fi 8332549e21daSmrg fi 8333549e21daSmrg fi 8334549e21daSmrg func_execute_cmds "$cmds" 'exit $?' 8335ba6a1819Smrg done 8336ba6a1819Smrg 8337549e21daSmrg test -n "$generated" && \ 8338549e21daSmrg func_show_eval "${RM}r$generated" 8339ba6a1819Smrg 8340549e21daSmrg # Now create the libtool archive. 8341549e21daSmrg case $output in 8342549e21daSmrg *.la) 8343549e21daSmrg old_library= 8344549e21daSmrg test "$build_old_libs" = yes && old_library="$libname.$libext" 8345549e21daSmrg func_verbose "creating $output" 8346ba6a1819Smrg 8347549e21daSmrg # Preserve any variables that may affect compiler behavior 8348549e21daSmrg for var in $variables_saved_for_relink; do 8349549e21daSmrg if eval test -z \"\${$var+set}\"; then 8350549e21daSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 8351549e21daSmrg elif eval var_value=\$$var; test -z "$var_value"; then 8352549e21daSmrg relink_command="$var=; export $var; $relink_command" 8353ba6a1819Smrg else 8354549e21daSmrg func_quote_for_eval "$var_value" 8355549e21daSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 8356ba6a1819Smrg fi 8357549e21daSmrg done 8358549e21daSmrg # Quote the link command for shipping. 8359549e21daSmrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 8360549e21daSmrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 8361549e21daSmrg if test "$hardcode_automatic" = yes ; then 8362549e21daSmrg relink_command= 8363549e21daSmrg fi 8364ba6a1819Smrg 8365549e21daSmrg # Only create the output if not a dry run. 8366549e21daSmrg $opt_dry_run || { 8367549e21daSmrg for installed in no yes; do 8368549e21daSmrg if test "$installed" = yes; then 8369549e21daSmrg if test -z "$install_libdir"; then 8370549e21daSmrg break 8371549e21daSmrg fi 8372549e21daSmrg output="$output_objdir/$outputname"i 8373549e21daSmrg # Replace all uninstalled libtool libraries with the installed ones 8374549e21daSmrg newdependency_libs= 8375549e21daSmrg for deplib in $dependency_libs; do 8376549e21daSmrg case $deplib in 8377549e21daSmrg *.la) 8378549e21daSmrg func_basename "$deplib" 8379549e21daSmrg name="$func_basename_result" 8380549e21daSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8381549e21daSmrg test -z "$libdir" && \ 8382549e21daSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 8383549e21daSmrg newdependency_libs="$newdependency_libs $libdir/$name" 8384549e21daSmrg ;; 8385549e21daSmrg *) newdependency_libs="$newdependency_libs $deplib" ;; 8386549e21daSmrg esac 8387549e21daSmrg done 8388549e21daSmrg dependency_libs="$newdependency_libs" 8389549e21daSmrg newdlfiles= 8390549e21daSmrg 8391549e21daSmrg for lib in $dlfiles; do 8392549e21daSmrg case $lib in 8393549e21daSmrg *.la) 8394549e21daSmrg func_basename "$lib" 8395549e21daSmrg name="$func_basename_result" 8396549e21daSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 8397549e21daSmrg test -z "$libdir" && \ 8398549e21daSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 8399549e21daSmrg newdlfiles="$newdlfiles $libdir/$name" 8400549e21daSmrg ;; 8401549e21daSmrg *) newdlfiles="$newdlfiles $lib" ;; 8402549e21daSmrg esac 8403549e21daSmrg done 8404549e21daSmrg dlfiles="$newdlfiles" 8405549e21daSmrg newdlprefiles= 8406549e21daSmrg for lib in $dlprefiles; do 8407549e21daSmrg case $lib in 8408549e21daSmrg *.la) 8409549e21daSmrg # Only pass preopened files to the pseudo-archive (for 8410549e21daSmrg # eventual linking with the app. that links it) if we 8411549e21daSmrg # didn't already link the preopened objects directly into 8412549e21daSmrg # the library: 8413549e21daSmrg func_basename "$lib" 8414549e21daSmrg name="$func_basename_result" 8415549e21daSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 8416549e21daSmrg test -z "$libdir" && \ 8417549e21daSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 8418549e21daSmrg newdlprefiles="$newdlprefiles $libdir/$name" 8419549e21daSmrg ;; 8420549e21daSmrg esac 8421549e21daSmrg done 8422549e21daSmrg dlprefiles="$newdlprefiles" 8423549e21daSmrg else 8424549e21daSmrg newdlfiles= 8425549e21daSmrg for lib in $dlfiles; do 8426549e21daSmrg case $lib in 8427549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 8428549e21daSmrg *) abs=`pwd`"/$lib" ;; 8429549e21daSmrg esac 8430549e21daSmrg newdlfiles="$newdlfiles $abs" 8431549e21daSmrg done 8432549e21daSmrg dlfiles="$newdlfiles" 8433549e21daSmrg newdlprefiles= 8434549e21daSmrg for lib in $dlprefiles; do 8435549e21daSmrg case $lib in 8436549e21daSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 8437549e21daSmrg *) abs=`pwd`"/$lib" ;; 8438549e21daSmrg esac 8439549e21daSmrg newdlprefiles="$newdlprefiles $abs" 8440549e21daSmrg done 8441549e21daSmrg dlprefiles="$newdlprefiles" 8442549e21daSmrg fi 8443549e21daSmrg $RM $output 8444549e21daSmrg # place dlname in correct position for cygwin 8445549e21daSmrg # In fact, it would be nice if we could use this code for all target 8446549e21daSmrg # systems that can't hard-code library paths into their executables 8447549e21daSmrg # and that have no shared library path variable independent of PATH, 8448549e21daSmrg # but it turns out we can't easily determine that from inspecting 8449549e21daSmrg # libtool variables, so we have to hard-code the OSs to which it 8450549e21daSmrg # applies here; at the moment, that means platforms that use the PE 8451549e21daSmrg # object format with DLL files. See the long comment at the top of 8452549e21daSmrg # tests/bindir.at for full details. 8453549e21daSmrg tdlname=$dlname 8454549e21daSmrg case $host,$output,$installed,$module,$dlname in 8455549e21daSmrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 8456549e21daSmrg # If a -bindir argument was supplied, place the dll there. 8457549e21daSmrg if test "x$bindir" != x ; 8458549e21daSmrg then 8459549e21daSmrg func_relative_path "$install_libdir" "$bindir" 8460549e21daSmrg tdlname=$func_relative_path_result$dlname 8461549e21daSmrg else 8462549e21daSmrg # Otherwise fall back on heuristic. 8463549e21daSmrg tdlname=../bin/$dlname 8464549e21daSmrg fi 8465549e21daSmrg ;; 8466549e21daSmrg esac 8467549e21daSmrg $ECHO > $output "\ 8468549e21daSmrg# $outputname - a libtool library file 8469549e21daSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 8470549e21daSmrg# 8471549e21daSmrg# Please DO NOT delete this file! 8472549e21daSmrg# It is necessary for linking the library. 8473ba6a1819Smrg 8474549e21daSmrg# The name that we can dlopen(3). 8475549e21daSmrgdlname='$tdlname' 8476ba6a1819Smrg 8477549e21daSmrg# Names of this library. 8478549e21daSmrglibrary_names='$library_names' 8479ba6a1819Smrg 8480549e21daSmrg# The name of the static archive. 8481549e21daSmrgold_library='$old_library' 8482ba6a1819Smrg 8483549e21daSmrg# Linker flags that can not go in dependency_libs. 8484549e21daSmrginherited_linker_flags='$new_inherited_linker_flags' 8485ba6a1819Smrg 8486549e21daSmrg# Libraries that this one depends upon. 8487549e21daSmrgdependency_libs='$dependency_libs' 8488ba6a1819Smrg 8489549e21daSmrg# Names of additional weak libraries provided by this library 8490549e21daSmrgweak_library_names='$weak_libs' 8491ba6a1819Smrg 8492549e21daSmrg# Version information for $libname. 8493549e21daSmrgcurrent=$current 8494549e21daSmrgage=$age 8495549e21daSmrgrevision=$revision 8496ba6a1819Smrg 8497549e21daSmrg# Is this an already installed library? 8498549e21daSmrginstalled=$installed 8499ba6a1819Smrg 8500549e21daSmrg# Should we warn about portability when linking against -modules? 8501549e21daSmrgshouldnotlink=$module 8502ba6a1819Smrg 8503549e21daSmrg# Files to dlopen/dlpreopen 8504549e21daSmrgdlopen='$dlfiles' 8505549e21daSmrgdlpreopen='$dlprefiles' 8506ba6a1819Smrg 8507549e21daSmrg# Directory that this library needs to be installed in: 8508549e21daSmrglibdir='$install_libdir'" 8509549e21daSmrg if test "$installed" = no && test "$need_relink" = yes; then 8510549e21daSmrg $ECHO >> $output "\ 8511549e21daSmrgrelink_command=\"$relink_command\"" 8512549e21daSmrg fi 8513549e21daSmrg done 8514549e21daSmrg } 8515ba6a1819Smrg 8516549e21daSmrg # Do a symbolic link so that the libtool archive can be found in 8517549e21daSmrg # LD_LIBRARY_PATH before the program is installed. 8518549e21daSmrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 8519549e21daSmrg ;; 8520549e21daSmrg esac 8521549e21daSmrg exit $EXIT_SUCCESS 8522549e21daSmrg} 8523ba6a1819Smrg 8524549e21daSmrg{ test "$mode" = link || test "$mode" = relink; } && 8525549e21daSmrg func_mode_link ${1+"$@"} 8526ba6a1819Smrg 8527ba6a1819Smrg 8528549e21daSmrg# func_mode_uninstall arg... 8529549e21daSmrgfunc_mode_uninstall () 8530549e21daSmrg{ 8531549e21daSmrg $opt_debug 8532549e21daSmrg RM="$nonopt" 8533ba6a1819Smrg files= 8534ba6a1819Smrg rmforce= 8535ba6a1819Smrg exit_status=0 8536ba6a1819Smrg 8537ba6a1819Smrg # This variable tells wrapper scripts just to set variables rather 8538ba6a1819Smrg # than running their programs. 8539ba6a1819Smrg libtool_install_magic="$magic" 8540ba6a1819Smrg 8541ba6a1819Smrg for arg 8542ba6a1819Smrg do 8543ba6a1819Smrg case $arg in 8544549e21daSmrg -f) RM="$RM $arg"; rmforce=yes ;; 8545549e21daSmrg -*) RM="$RM $arg" ;; 8546ba6a1819Smrg *) files="$files $arg" ;; 8547ba6a1819Smrg esac 8548ba6a1819Smrg done 8549ba6a1819Smrg 8550549e21daSmrg test -z "$RM" && \ 8551549e21daSmrg func_fatal_help "you must specify an RM program" 8552ba6a1819Smrg 8553ba6a1819Smrg rmdirs= 8554ba6a1819Smrg 8555ba6a1819Smrg origobjdir="$objdir" 8556ba6a1819Smrg for file in $files; do 8557549e21daSmrg func_dirname "$file" "" "." 8558549e21daSmrg dir="$func_dirname_result" 8559549e21daSmrg if test "X$dir" = X.; then 8560ba6a1819Smrg objdir="$origobjdir" 8561ba6a1819Smrg else 8562ba6a1819Smrg objdir="$dir/$origobjdir" 8563ba6a1819Smrg fi 8564549e21daSmrg func_basename "$file" 8565549e21daSmrg name="$func_basename_result" 8566ba6a1819Smrg test "$mode" = uninstall && objdir="$dir" 8567ba6a1819Smrg 8568ba6a1819Smrg # Remember objdir for removal later, being careful to avoid duplicates 8569ba6a1819Smrg if test "$mode" = clean; then 8570ba6a1819Smrg case " $rmdirs " in 8571ba6a1819Smrg *" $objdir "*) ;; 8572ba6a1819Smrg *) rmdirs="$rmdirs $objdir" ;; 8573ba6a1819Smrg esac 8574ba6a1819Smrg fi 8575ba6a1819Smrg 8576ba6a1819Smrg # Don't error if the file doesn't exist and rm -f was used. 8577549e21daSmrg if { test -L "$file"; } >/dev/null 2>&1 || 8578549e21daSmrg { test -h "$file"; } >/dev/null 2>&1 || 8579549e21daSmrg test -f "$file"; then 8580ba6a1819Smrg : 8581ba6a1819Smrg elif test -d "$file"; then 8582ba6a1819Smrg exit_status=1 8583ba6a1819Smrg continue 8584ba6a1819Smrg elif test "$rmforce" = yes; then 8585ba6a1819Smrg continue 8586ba6a1819Smrg fi 8587ba6a1819Smrg 8588ba6a1819Smrg rmfiles="$file" 8589ba6a1819Smrg 8590ba6a1819Smrg case $name in 8591ba6a1819Smrg *.la) 8592ba6a1819Smrg # Possibly a libtool archive, so verify it. 8593549e21daSmrg if func_lalib_p "$file"; then 8594549e21daSmrg func_source $dir/$name 8595ba6a1819Smrg 8596ba6a1819Smrg # Delete the libtool libraries and symlinks. 8597ba6a1819Smrg for n in $library_names; do 8598ba6a1819Smrg rmfiles="$rmfiles $objdir/$n" 8599ba6a1819Smrg done 8600ba6a1819Smrg test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" 8601ba6a1819Smrg 8602ba6a1819Smrg case "$mode" in 8603ba6a1819Smrg clean) 8604ba6a1819Smrg case " $library_names " in 8605ba6a1819Smrg # " " in the beginning catches empty $dlname 8606ba6a1819Smrg *" $dlname "*) ;; 8607ba6a1819Smrg *) rmfiles="$rmfiles $objdir/$dlname" ;; 8608ba6a1819Smrg esac 8609549e21daSmrg test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" 8610ba6a1819Smrg ;; 8611ba6a1819Smrg uninstall) 8612ba6a1819Smrg if test -n "$library_names"; then 8613ba6a1819Smrg # Do each command in the postuninstall commands. 8614549e21daSmrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 8615ba6a1819Smrg fi 8616ba6a1819Smrg 8617ba6a1819Smrg if test -n "$old_library"; then 8618ba6a1819Smrg # Do each command in the old_postuninstall commands. 8619549e21daSmrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 8620ba6a1819Smrg fi 8621ba6a1819Smrg # FIXME: should reinstall the best remaining shared library. 8622ba6a1819Smrg ;; 8623ba6a1819Smrg esac 8624ba6a1819Smrg fi 8625ba6a1819Smrg ;; 8626ba6a1819Smrg 8627ba6a1819Smrg *.lo) 8628ba6a1819Smrg # Possibly a libtool object, so verify it. 8629549e21daSmrg if func_lalib_p "$file"; then 8630ba6a1819Smrg 8631ba6a1819Smrg # Read the .lo file 8632549e21daSmrg func_source $dir/$name 8633ba6a1819Smrg 8634ba6a1819Smrg # Add PIC object to the list of files to remove. 8635549e21daSmrg if test -n "$pic_object" && 8636549e21daSmrg test "$pic_object" != none; then 8637ba6a1819Smrg rmfiles="$rmfiles $dir/$pic_object" 8638ba6a1819Smrg fi 8639ba6a1819Smrg 8640ba6a1819Smrg # Add non-PIC object to the list of files to remove. 8641549e21daSmrg if test -n "$non_pic_object" && 8642549e21daSmrg test "$non_pic_object" != none; then 8643ba6a1819Smrg rmfiles="$rmfiles $dir/$non_pic_object" 8644ba6a1819Smrg fi 8645ba6a1819Smrg fi 8646ba6a1819Smrg ;; 8647ba6a1819Smrg 8648ba6a1819Smrg *) 8649ba6a1819Smrg if test "$mode" = clean ; then 8650ba6a1819Smrg noexename=$name 8651ba6a1819Smrg case $file in 8652ba6a1819Smrg *.exe) 8653549e21daSmrg func_stripname '' '.exe' "$file" 8654549e21daSmrg file=$func_stripname_result 8655549e21daSmrg func_stripname '' '.exe' "$name" 8656549e21daSmrg noexename=$func_stripname_result 8657ba6a1819Smrg # $file with .exe has already been added to rmfiles, 8658ba6a1819Smrg # add $file without .exe 8659ba6a1819Smrg rmfiles="$rmfiles $file" 8660ba6a1819Smrg ;; 8661ba6a1819Smrg esac 8662ba6a1819Smrg # Do a test to see if this is a libtool program. 8663549e21daSmrg if func_ltwrapper_p "$file"; then 8664549e21daSmrg if func_ltwrapper_executable_p "$file"; then 8665549e21daSmrg func_ltwrapper_scriptname "$file" 8666549e21daSmrg relink_command= 8667549e21daSmrg func_source $func_ltwrapper_scriptname_result 8668549e21daSmrg rmfiles="$rmfiles $func_ltwrapper_scriptname_result" 8669549e21daSmrg else 8670549e21daSmrg relink_command= 8671549e21daSmrg func_source $dir/$noexename 8672549e21daSmrg fi 8673ba6a1819Smrg 8674ba6a1819Smrg # note $name still contains .exe if it was in $file originally 8675ba6a1819Smrg # as does the version of $file that was added into $rmfiles 8676ba6a1819Smrg rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" 8677ba6a1819Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 8678ba6a1819Smrg rmfiles="$rmfiles $objdir/lt-$name" 8679ba6a1819Smrg fi 8680ba6a1819Smrg if test "X$noexename" != "X$name" ; then 8681ba6a1819Smrg rmfiles="$rmfiles $objdir/lt-${noexename}.c" 8682ba6a1819Smrg fi 8683ba6a1819Smrg fi 8684ba6a1819Smrg fi 8685ba6a1819Smrg ;; 8686ba6a1819Smrg esac 8687549e21daSmrg func_show_eval "$RM $rmfiles" 'exit_status=1' 8688ba6a1819Smrg done 8689ba6a1819Smrg objdir="$origobjdir" 8690ba6a1819Smrg 8691ba6a1819Smrg # Try to remove the ${objdir}s in the directories where we deleted files 8692ba6a1819Smrg for dir in $rmdirs; do 8693ba6a1819Smrg if test -d "$dir"; then 8694549e21daSmrg func_show_eval "rmdir $dir >/dev/null 2>&1" 8695ba6a1819Smrg fi 8696ba6a1819Smrg done 8697ba6a1819Smrg 8698ba6a1819Smrg exit $exit_status 8699549e21daSmrg} 8700ba6a1819Smrg 8701549e21daSmrg{ test "$mode" = uninstall || test "$mode" = clean; } && 8702549e21daSmrg func_mode_uninstall ${1+"$@"} 8703ba6a1819Smrg 8704549e21daSmrgtest -z "$mode" && { 8705549e21daSmrg help="$generic_help" 8706549e21daSmrg func_fatal_help "you must specify a MODE" 8707549e21daSmrg} 8708549e21daSmrg 8709549e21daSmrgtest -z "$exec_cmd" && \ 8710549e21daSmrg func_fatal_help "invalid operation mode \`$mode'" 8711ba6a1819Smrg 8712ba6a1819Smrgif test -n "$exec_cmd"; then 8713549e21daSmrg eval exec "$exec_cmd" 8714ba6a1819Smrg exit $EXIT_FAILURE 8715ba6a1819Smrgfi 8716ba6a1819Smrg 8717549e21daSmrgexit $exit_status 8718ba6a1819Smrg 8719ba6a1819Smrg 8720ba6a1819Smrg# The TAGs below are defined such that we never get into a situation 8721ba6a1819Smrg# in which we disable both kinds of libraries. Given conflicting 8722ba6a1819Smrg# choices, we go for a static library, that is the most portable, 8723ba6a1819Smrg# since we can't tell whether shared libraries were disabled because 8724ba6a1819Smrg# the user asked for that or because the platform doesn't support 8725ba6a1819Smrg# them. This is particularly important on AIX, because we don't 8726ba6a1819Smrg# support having both static and shared libraries enabled at the same 8727ba6a1819Smrg# time on that platform, so we default to a shared-only configuration. 8728ba6a1819Smrg# If a disable-shared tag is given, we'll fallback to a static-only 8729ba6a1819Smrg# configuration. But we'll never go from static-only to shared-only. 8730ba6a1819Smrg 8731ba6a1819Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 8732549e21daSmrgbuild_libtool_libs=no 8733549e21daSmrgbuild_old_libs=yes 8734ba6a1819Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 8735ba6a1819Smrg 8736ba6a1819Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 8737549e21daSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 8738ba6a1819Smrg# ### END LIBTOOL TAG CONFIG: disable-static 8739ba6a1819Smrg 8740ba6a1819Smrg# Local Variables: 8741ba6a1819Smrg# mode:shell-script 8742ba6a1819Smrg# sh-indentation:2 8743ba6a1819Smrg# End: 8744549e21daSmrg# vi:sw=2 8745549e21daSmrg 8746