ltmain.sh revision e6f085ba
1e6f085baSmrg# ltmain.sh - Provide generalized library-building support services. 2e6f085baSmrg# NOTE: Changing this file will not affect anything until you rerun configure. 3e6f085baSmrg# 4e6f085baSmrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 5e6f085baSmrg# 2007, 2008 Free Software Foundation, Inc. 6e6f085baSmrg# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 7e6f085baSmrg# 8e6f085baSmrg# This program is free software; you can redistribute it and/or modify 995b296d0Smrg# it under the terms of the GNU General Public License as published by 1095b296d0Smrg# the Free Software Foundation; either version 2 of the License, or 1195b296d0Smrg# (at your option) any later version. 1295b296d0Smrg# 13e6f085baSmrg# This program is distributed in the hope that it will be useful, but 1495b296d0Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of 1595b296d0Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1695b296d0Smrg# General Public License for more details. 1795b296d0Smrg# 1895b296d0Smrg# You should have received a copy of the GNU General Public License 19e6f085baSmrg# along with this program; if not, write to the Free Software 20e6f085baSmrg# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 2139713583Smrg# 22e6f085baSmrg# As a special exception to the GNU General Public License, if you 23e6f085baSmrg# distribute this file as part of a program that contains a 24e6f085baSmrg# configuration script generated by Autoconf, you may include it under 25e6f085baSmrg# the same distribution terms that you use for the rest of that program. 26e6f085baSmrg 27e6f085baSmrgbasename="s,^.*/,,g" 28e6f085baSmrg 29e6f085baSmrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 30e6f085baSmrg# is ksh but when the shell is invoked as "sh" and the current value of 31e6f085baSmrg# the _XPG environment variable is not equal to 1 (one), the special 32e6f085baSmrg# positional parameter $0, within a function call, is the name of the 33e6f085baSmrg# function. 34e6f085baSmrgprogpath="$0" 35e6f085baSmrg 36e6f085baSmrg# The name of this program: 37e6f085baSmrgprogname=`echo "$progpath" | $SED $basename` 38e6f085baSmrgmodename="$progname" 39e6f085baSmrg 40e6f085baSmrg# Global variables: 41e6f085baSmrgEXIT_SUCCESS=0 42e6f085baSmrgEXIT_FAILURE=1 4395b296d0Smrg 4495b296d0SmrgPROGRAM=ltmain.sh 4595b296d0SmrgPACKAGE=libtool 46e6f085baSmrgVERSION=1.5.26 47e6f085baSmrgTIMESTAMP=" (1.1220.2.493 2008/02/01 16:58:18)" 48ff89ac2bSmrg 49e6f085baSmrg# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). 50ff89ac2bSmrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 51ff89ac2bSmrg emulate sh 52ff89ac2bSmrg NULLCMD=: 53ff89ac2bSmrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 54ff89ac2bSmrg # is contrary to our usage. Disable this feature. 55ff89ac2bSmrg alias -g '${1+"$@"}'='"$@"' 5695b296d0Smrg setopt NO_GLOB_SUBST 57ff89ac2bSmrgelse 58ff89ac2bSmrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 5995b296d0Smrgfi 60ff89ac2bSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 61ff89ac2bSmrgDUALCASE=1; export DUALCASE # for MKS sh 6295b296d0Smrg 63e6f085baSmrg# Check that we have a working $echo. 64e6f085baSmrgif test "X$1" = X--no-reexec; then 65e6f085baSmrg # Discard the --no-reexec flag, and continue. 66e6f085baSmrg shift 67e6f085baSmrgelif test "X$1" = X--fallback-echo; then 68e6f085baSmrg # Avoid inline document here, it may be left over 69e6f085baSmrg : 70e6f085baSmrgelif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then 71e6f085baSmrg # Yippee, $echo works! 72e6f085baSmrg : 73e6f085baSmrgelse 74e6f085baSmrg # Restart under the correct shell, and then maybe $echo will work. 75e6f085baSmrg exec $SHELL "$progpath" --no-reexec ${1+"$@"} 76e6f085baSmrgfi 77e6f085baSmrg 78e6f085baSmrgif test "X$1" = X--fallback-echo; then 79e6f085baSmrg # used as fallback echo 80e6f085baSmrg shift 81e6f085baSmrg cat <<EOF 82e6f085baSmrg$* 83e6f085baSmrgEOF 84e6f085baSmrg exit $EXIT_SUCCESS 85e6f085baSmrgfi 86e6f085baSmrg 87e6f085baSmrgdefault_mode= 88e6f085baSmrghelp="Try \`$progname --help' for more information." 89e6f085baSmrgmagic="%%%MAGIC variable%%%" 90e6f085baSmrgmkdir="mkdir" 91e6f085baSmrgmv="mv -f" 92e6f085baSmrgrm="rm -f" 93e6f085baSmrg 94e6f085baSmrg# Sed substitution that helps us do robust quoting. It backslashifies 95e6f085baSmrg# metacharacters that are still active within double-quoted strings. 96e6f085baSmrgXsed="${SED}"' -e 1s/^X//' 97e6f085baSmrgsed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' 98e6f085baSmrg# test EBCDIC or ASCII 99e6f085baSmrgcase `echo X|tr X '\101'` in 100e6f085baSmrg A) # ASCII based system 101e6f085baSmrg # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr 102e6f085baSmrg SP2NL='tr \040 \012' 103e6f085baSmrg NL2SP='tr \015\012 \040\040' 104e6f085baSmrg ;; 105e6f085baSmrg *) # EBCDIC based system 106e6f085baSmrg SP2NL='tr \100 \n' 107e6f085baSmrg NL2SP='tr \r\n \100\100' 108e6f085baSmrg ;; 109e6f085baSmrgesac 110e6f085baSmrg 111e6f085baSmrg# NLS nuisances. 11295b296d0Smrg# Only set LANG and LC_ALL to C if already set. 11395b296d0Smrg# These must not be set unconditionally because not all systems understand 11495b296d0Smrg# e.g. LANG=C (notably SCO). 115e6f085baSmrg# We save the old values to restore during execute mode. 116e6f085baSmrglt_env= 117ff89ac2bSmrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 118ff89ac2bSmrgdo 119ff89ac2bSmrg eval "if test \"\${$lt_var+set}\" = set; then 120e6f085baSmrg save_$lt_var=\$$lt_var 121e6f085baSmrg lt_env=\"$lt_var=\$$lt_var \$lt_env\" 122e6f085baSmrg $lt_var=C 123ff89ac2bSmrg export $lt_var 124ff89ac2bSmrg fi" 125ff89ac2bSmrgdone 126ff89ac2bSmrg 127e6f085baSmrgif test -n "$lt_env"; then 128e6f085baSmrg lt_env="env $lt_env" 129e6f085baSmrgfi 13095b296d0Smrg 13195b296d0Smrg# Make sure IFS has a sensible default 13295b296d0Smrglt_nl=' 13395b296d0Smrg' 13495b296d0SmrgIFS=" $lt_nl" 13595b296d0Smrg 136e6f085baSmrgif test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 137e6f085baSmrg $echo "$modename: not configured to build any kind of library" 1>&2 138e6f085baSmrg $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 139e6f085baSmrg exit $EXIT_FAILURE 140e6f085baSmrgfi 14139713583Smrg 142e6f085baSmrg# Global variables. 143e6f085baSmrgmode=$default_mode 144e6f085baSmrgnonopt= 145e6f085baSmrgprev= 146e6f085baSmrgprevopt= 147e6f085baSmrgrun= 148e6f085baSmrgshow="$echo" 149e6f085baSmrgshow_help= 150e6f085baSmrgexecute_dlfiles= 151e6f085baSmrgduplicate_deps=no 152e6f085baSmrgpreserve_args= 153e6f085baSmrglo2o="s/\\.lo\$/.${objext}/" 154e6f085baSmrgo2lo="s/\\.${objext}\$/.lo/" 155e6f085baSmrgextracted_archives= 156e6f085baSmrgextracted_serial=0 15795b296d0Smrg 158e6f085baSmrg##################################### 159e6f085baSmrg# Shell function definitions: 160e6f085baSmrg# This seems to be the best place for them 16195b296d0Smrg 16295b296d0Smrg# func_mktempdir [string] 16395b296d0Smrg# Make a temporary directory that won't clash with other running 16495b296d0Smrg# libtool processes, and avoids race conditions if possible. If 16595b296d0Smrg# given, STRING is the basename for that directory. 16695b296d0Smrgfunc_mktempdir () 16795b296d0Smrg{ 16895b296d0Smrg my_template="${TMPDIR-/tmp}/${1-$progname}" 16995b296d0Smrg 170e6f085baSmrg if test "$run" = ":"; then 17195b296d0Smrg # Return a directory name, but don't create it in dry-run mode 17295b296d0Smrg my_tmpdir="${my_template}-$$" 17395b296d0Smrg else 17495b296d0Smrg 17595b296d0Smrg # If mktemp works, use that first and foremost 17695b296d0Smrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 17795b296d0Smrg 17895b296d0Smrg if test ! -d "$my_tmpdir"; then 179e6f085baSmrg # Failing that, at least try and use $RANDOM to avoid a race 180e6f085baSmrg my_tmpdir="${my_template}-${RANDOM-0}$$" 18195b296d0Smrg 182e6f085baSmrg save_mktempdir_umask=`umask` 183e6f085baSmrg umask 0077 184e6f085baSmrg $mkdir "$my_tmpdir" 185e6f085baSmrg umask $save_mktempdir_umask 18695b296d0Smrg fi 18795b296d0Smrg 18895b296d0Smrg # If we're not in dry-run mode, bomb out on failure 189e6f085baSmrg test -d "$my_tmpdir" || { 190e6f085baSmrg $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 191e6f085baSmrg exit $EXIT_FAILURE 192e6f085baSmrg } 19395b296d0Smrg fi 19495b296d0Smrg 195e6f085baSmrg $echo "X$my_tmpdir" | $Xsed 19695b296d0Smrg} 19795b296d0Smrg 19895b296d0Smrg 199e6f085baSmrg# func_win32_libid arg 200e6f085baSmrg# return the library type of file 'arg' 201e6f085baSmrg# 202e6f085baSmrg# Need a lot of goo to handle *both* DLLs and import libs 203e6f085baSmrg# Has to be a shell function in order to 'eat' the argument 204e6f085baSmrg# that is supplied when $file_magic_command is called. 205e6f085baSmrgfunc_win32_libid () 20695b296d0Smrg{ 207e6f085baSmrg win32_libid_type="unknown" 208e6f085baSmrg win32_fileres=`file -L $1 2>/dev/null` 209e6f085baSmrg case $win32_fileres in 210e6f085baSmrg *ar\ archive\ import\ library*) # definitely import 211e6f085baSmrg win32_libid_type="x86 archive import" 212e6f085baSmrg ;; 213e6f085baSmrg *ar\ archive*) # could be an import, or static 214e6f085baSmrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ 215e6f085baSmrg $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then 216e6f085baSmrg win32_nmres=`eval $NM -f posix -A $1 | \ 217e6f085baSmrg $SED -n -e '1,100{ 218e6f085baSmrg / I /{ 219e6f085baSmrg s,.*,import, 220e6f085baSmrg p 221e6f085baSmrg q 222e6f085baSmrg } 223e6f085baSmrg }'` 224e6f085baSmrg case $win32_nmres in 225e6f085baSmrg import*) win32_libid_type="x86 archive import";; 226e6f085baSmrg *) win32_libid_type="x86 archive static";; 227e6f085baSmrg esac 228e6f085baSmrg fi 229e6f085baSmrg ;; 230e6f085baSmrg *DLL*) 231e6f085baSmrg win32_libid_type="x86 DLL" 232e6f085baSmrg ;; 233e6f085baSmrg *executable*) # but shell scripts are "executable" too... 234e6f085baSmrg case $win32_fileres in 235e6f085baSmrg *MS\ Windows\ PE\ Intel*) 236e6f085baSmrg win32_libid_type="x86 DLL" 237e6f085baSmrg ;; 23895b296d0Smrg esac 239e6f085baSmrg ;; 240e6f085baSmrg esac 241e6f085baSmrg $echo $win32_libid_type 24295b296d0Smrg} 24395b296d0Smrg 24495b296d0Smrg 245e6f085baSmrg# func_infer_tag arg 246e6f085baSmrg# Infer tagged configuration to use if any are available and 247e6f085baSmrg# if one wasn't chosen via the "--tag" command line option. 248e6f085baSmrg# Only attempt this if the compiler in the base compile 249e6f085baSmrg# command doesn't match the default compiler. 250e6f085baSmrg# arg is usually of the form 'gcc ...' 251e6f085baSmrgfunc_infer_tag () 25295b296d0Smrg{ 253e6f085baSmrg if test -n "$available_tags" && test -z "$tagname"; then 254e6f085baSmrg CC_quoted= 255e6f085baSmrg for arg in $CC; do 256e6f085baSmrg case $arg in 257e6f085baSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 258e6f085baSmrg arg="\"$arg\"" 259e6f085baSmrg ;; 260e6f085baSmrg esac 261e6f085baSmrg CC_quoted="$CC_quoted $arg" 262e6f085baSmrg done 263e6f085baSmrg case $@ in 264e6f085baSmrg # Blanks in the command may have been stripped by the calling shell, 265e6f085baSmrg # but not from the CC environment variable when configure was run. 266e6f085baSmrg " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; 267e6f085baSmrg # Blanks at the start of $base_compile will cause this to fail 268e6f085baSmrg # if we don't check for them as well. 26995b296d0Smrg *) 270e6f085baSmrg for z in $available_tags; do 271e6f085baSmrg if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 272e6f085baSmrg # Evaluate the configuration. 273e6f085baSmrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 274e6f085baSmrg CC_quoted= 275e6f085baSmrg for arg in $CC; do 276e6f085baSmrg # Double-quote args containing other shell metacharacters. 277e6f085baSmrg case $arg in 278e6f085baSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 279e6f085baSmrg arg="\"$arg\"" 280e6f085baSmrg ;; 281e6f085baSmrg esac 282e6f085baSmrg CC_quoted="$CC_quoted $arg" 283e6f085baSmrg done 284e6f085baSmrg case "$@ " in 285e6f085baSmrg " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) 286e6f085baSmrg # The compiler in the base compile command matches 287e6f085baSmrg # the one in the tagged configuration. 288e6f085baSmrg # Assume this is the tagged configuration we want. 289e6f085baSmrg tagname=$z 290e6f085baSmrg break 291e6f085baSmrg ;; 292e6f085baSmrg esac 293e6f085baSmrg fi 294e6f085baSmrg done 295e6f085baSmrg # If $tagname still isn't set, then no tagged configuration 296e6f085baSmrg # was found and let the user know that the "--tag" command 297e6f085baSmrg # line option must be used. 298e6f085baSmrg if test -z "$tagname"; then 299e6f085baSmrg $echo "$modename: unable to infer tagged configuration" 300e6f085baSmrg $echo "$modename: specify a tag with \`--tag'" 1>&2 301e6f085baSmrg exit $EXIT_FAILURE 302e6f085baSmrg# else 303e6f085baSmrg# $echo "$modename: using $tagname tagged configuration" 304e6f085baSmrg fi 305e6f085baSmrg ;; 306e6f085baSmrg esac 307e6f085baSmrg fi 30895b296d0Smrg} 30995b296d0Smrg 31095b296d0Smrg 311e6f085baSmrg# func_extract_an_archive dir oldlib 312e6f085baSmrgfunc_extract_an_archive () 31395b296d0Smrg{ 314e6f085baSmrg f_ex_an_ar_dir="$1"; shift 315e6f085baSmrg f_ex_an_ar_oldlib="$1" 31639713583Smrg 317e6f085baSmrg $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" 318e6f085baSmrg $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? 319e6f085baSmrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 320e6f085baSmrg : 321e6f085baSmrg else 322e6f085baSmrg $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 323e6f085baSmrg exit $EXIT_FAILURE 32495b296d0Smrg fi 32595b296d0Smrg} 32695b296d0Smrg 327e6f085baSmrg# func_extract_archives gentop oldlib ... 328e6f085baSmrgfunc_extract_archives () 32995b296d0Smrg{ 330e6f085baSmrg my_gentop="$1"; shift 331e6f085baSmrg my_oldlibs=${1+"$@"} 332e6f085baSmrg my_oldobjs="" 333e6f085baSmrg my_xlib="" 334e6f085baSmrg my_xabs="" 335e6f085baSmrg my_xdir="" 336e6f085baSmrg my_status="" 337e6f085baSmrg 338e6f085baSmrg $show "${rm}r $my_gentop" 339e6f085baSmrg $run ${rm}r "$my_gentop" 340e6f085baSmrg $show "$mkdir $my_gentop" 341e6f085baSmrg $run $mkdir "$my_gentop" 342e6f085baSmrg my_status=$? 343e6f085baSmrg if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then 344e6f085baSmrg exit $my_status 34595b296d0Smrg fi 34695b296d0Smrg 347e6f085baSmrg for my_xlib in $my_oldlibs; do 348e6f085baSmrg # Extract the objects. 349e6f085baSmrg case $my_xlib in 350e6f085baSmrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 351e6f085baSmrg *) my_xabs=`pwd`"/$my_xlib" ;; 352e6f085baSmrg esac 353e6f085baSmrg my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` 354e6f085baSmrg my_xlib_u=$my_xlib 355e6f085baSmrg while :; do 356e6f085baSmrg case " $extracted_archives " in 357e6f085baSmrg *" $my_xlib_u "*) 358e6f085baSmrg extracted_serial=`expr $extracted_serial + 1` 359e6f085baSmrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 360e6f085baSmrg *) break ;; 361e6f085baSmrg esac 362e6f085baSmrg done 363e6f085baSmrg extracted_archives="$extracted_archives $my_xlib_u" 364e6f085baSmrg my_xdir="$my_gentop/$my_xlib_u" 36539713583Smrg 366e6f085baSmrg $show "${rm}r $my_xdir" 367e6f085baSmrg $run ${rm}r "$my_xdir" 368e6f085baSmrg $show "$mkdir $my_xdir" 369e6f085baSmrg $run $mkdir "$my_xdir" 370e6f085baSmrg exit_status=$? 371e6f085baSmrg if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then 372e6f085baSmrg exit $exit_status 373e6f085baSmrg fi 374e6f085baSmrg case $host in 375e6f085baSmrg *-darwin*) 376e6f085baSmrg $show "Extracting $my_xabs" 377e6f085baSmrg # Do not bother doing anything if just a dry run 378e6f085baSmrg if test -z "$run"; then 379e6f085baSmrg darwin_orig_dir=`pwd` 380e6f085baSmrg cd $my_xdir || exit $? 381e6f085baSmrg darwin_archive=$my_xabs 382e6f085baSmrg darwin_curdir=`pwd` 383e6f085baSmrg darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` 384e6f085baSmrg darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` 385e6f085baSmrg if test -n "$darwin_arches"; then 386e6f085baSmrg darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` 387e6f085baSmrg darwin_arch= 388e6f085baSmrg $show "$darwin_base_archive has multiple architectures $darwin_arches" 389e6f085baSmrg for darwin_arch in $darwin_arches ; do 390e6f085baSmrg mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 391e6f085baSmrg lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 392e6f085baSmrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 393e6f085baSmrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 394e6f085baSmrg cd "$darwin_curdir" 395e6f085baSmrg $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 396e6f085baSmrg done # $darwin_arches 397e6f085baSmrg ## Okay now we have a bunch of thin objects, gotta fatten them up :) 398e6f085baSmrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` 399e6f085baSmrg darwin_file= 400e6f085baSmrg darwin_files= 401e6f085baSmrg for darwin_file in $darwin_filelist; do 402e6f085baSmrg darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` 403e6f085baSmrg lipo -create -output "$darwin_file" $darwin_files 404e6f085baSmrg done # $darwin_filelist 405e6f085baSmrg ${rm}r unfat-$$ 406e6f085baSmrg cd "$darwin_orig_dir" 407e6f085baSmrg else 408e6f085baSmrg cd "$darwin_orig_dir" 409e6f085baSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 410e6f085baSmrg fi # $darwin_arches 411e6f085baSmrg fi # $run 412e6f085baSmrg ;; 413e6f085baSmrg *) 414e6f085baSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 415e6f085baSmrg ;; 416e6f085baSmrg esac 417e6f085baSmrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` 418e6f085baSmrg done 419e6f085baSmrg func_extract_archives_result="$my_oldobjs" 42095b296d0Smrg} 421e6f085baSmrg# End of Shell function definitions 422e6f085baSmrg##################################### 42395b296d0Smrg 424e6f085baSmrg# Darwin sucks 425e6f085baSmrgeval std_shrext=\"$shrext_cmds\" 42639713583Smrg 427e6f085baSmrgdisable_libs=no 42839713583Smrg 429e6f085baSmrg# Parse our command line options once, thoroughly. 430e6f085baSmrgwhile test "$#" -gt 0 431e6f085baSmrgdo 432e6f085baSmrg arg="$1" 43339713583Smrg shift 43495b296d0Smrg 435e6f085baSmrg case $arg in 436e6f085baSmrg -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; 437e6f085baSmrg *) optarg= ;; 438e6f085baSmrg esac 43995b296d0Smrg 440e6f085baSmrg # If the previous option needs an argument, assign it. 441e6f085baSmrg if test -n "$prev"; then 442e6f085baSmrg case $prev in 443e6f085baSmrg execute_dlfiles) 444e6f085baSmrg execute_dlfiles="$execute_dlfiles $arg" 445e6f085baSmrg ;; 446e6f085baSmrg tag) 447e6f085baSmrg tagname="$arg" 448e6f085baSmrg preserve_args="${preserve_args}=$arg" 449e6f085baSmrg 450e6f085baSmrg # Check whether tagname contains only valid characters 451e6f085baSmrg case $tagname in 452e6f085baSmrg *[!-_A-Za-z0-9,/]*) 453e6f085baSmrg $echo "$progname: invalid tag name: $tagname" 1>&2 454e6f085baSmrg exit $EXIT_FAILURE 455e6f085baSmrg ;; 456e6f085baSmrg esac 45795b296d0Smrg 458e6f085baSmrg case $tagname in 459e6f085baSmrg CC) 460e6f085baSmrg # Don't test for the "default" C tag, as we know, it's there, but 461e6f085baSmrg # not specially marked. 462e6f085baSmrg ;; 463e6f085baSmrg *) 464e6f085baSmrg if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then 465e6f085baSmrg taglist="$taglist $tagname" 466e6f085baSmrg # Evaluate the configuration. 467e6f085baSmrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" 468e6f085baSmrg else 469e6f085baSmrg $echo "$progname: ignoring unknown tag $tagname" 1>&2 470e6f085baSmrg fi 471e6f085baSmrg ;; 472e6f085baSmrg esac 473e6f085baSmrg ;; 474e6f085baSmrg *) 475e6f085baSmrg eval "$prev=\$arg" 476e6f085baSmrg ;; 477e6f085baSmrg esac 47839713583Smrg 479e6f085baSmrg prev= 480e6f085baSmrg prevopt= 481e6f085baSmrg continue 482e6f085baSmrg fi 48395b296d0Smrg 484e6f085baSmrg # Have we seen a non-optional argument yet? 485e6f085baSmrg case $arg in 486e6f085baSmrg --help) 487e6f085baSmrg show_help=yes 488e6f085baSmrg ;; 489ff89ac2bSmrg 490e6f085baSmrg --version) 491e6f085baSmrg echo "\ 492e6f085baSmrg$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP 49339713583Smrg 494e6f085baSmrgCopyright (C) 2008 Free Software Foundation, Inc. 495e6f085baSmrgThis is free software; see the source for copying conditions. There is NO 496e6f085baSmrgwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." 497e6f085baSmrg exit $? 498e6f085baSmrg ;; 49995b296d0Smrg 500e6f085baSmrg --config) 501e6f085baSmrg ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath 50295b296d0Smrg # Now print the configurations for the tags. 50395b296d0Smrg for tagname in $taglist; do 504e6f085baSmrg ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" 50595b296d0Smrg done 50639713583Smrg exit $? 507e6f085baSmrg ;; 50895b296d0Smrg 509e6f085baSmrg --debug) 510e6f085baSmrg $echo "$progname: enabling shell trace mode" 511e6f085baSmrg set -x 512e6f085baSmrg preserve_args="$preserve_args $arg" 513e6f085baSmrg ;; 514e6f085baSmrg 515e6f085baSmrg --dry-run | -n) 516e6f085baSmrg run=: 517e6f085baSmrg ;; 518e6f085baSmrg 519e6f085baSmrg --features) 520e6f085baSmrg $echo "host: $host" 52195b296d0Smrg if test "$build_libtool_libs" = yes; then 522e6f085baSmrg $echo "enable shared libraries" 52395b296d0Smrg else 524e6f085baSmrg $echo "disable shared libraries" 52595b296d0Smrg fi 52695b296d0Smrg if test "$build_old_libs" = yes; then 527e6f085baSmrg $echo "enable static libraries" 52895b296d0Smrg else 529e6f085baSmrg $echo "disable static libraries" 53095b296d0Smrg fi 53195b296d0Smrg exit $? 532e6f085baSmrg ;; 53395b296d0Smrg 534e6f085baSmrg --finish) mode="finish" ;; 53595b296d0Smrg 536e6f085baSmrg --mode) prevopt="--mode" prev=mode ;; 537e6f085baSmrg --mode=*) mode="$optarg" ;; 53839713583Smrg 539e6f085baSmrg --preserve-dup-deps) duplicate_deps="yes" ;; 54095b296d0Smrg 541e6f085baSmrg --quiet | --silent) 542e6f085baSmrg show=: 543e6f085baSmrg preserve_args="$preserve_args $arg" 54495b296d0Smrg ;; 545e6f085baSmrg 546e6f085baSmrg --tag) 547e6f085baSmrg prevopt="--tag" 548e6f085baSmrg prev=tag 549e6f085baSmrg preserve_args="$preserve_args --tag" 55095b296d0Smrg ;; 551e6f085baSmrg --tag=*) 552e6f085baSmrg set tag "$optarg" ${1+"$@"} 553e6f085baSmrg shift 554e6f085baSmrg prev=tag 555e6f085baSmrg preserve_args="$preserve_args --tag" 55695b296d0Smrg ;; 557e6f085baSmrg 558e6f085baSmrg -dlopen) 559e6f085baSmrg prevopt="-dlopen" 560e6f085baSmrg prev=execute_dlfiles 56139713583Smrg ;; 562e6f085baSmrg 563e6f085baSmrg -*) 564e6f085baSmrg $echo "$modename: unrecognized option \`$arg'" 1>&2 565e6f085baSmrg $echo "$help" 1>&2 566e6f085baSmrg exit $EXIT_FAILURE 56739713583Smrg ;; 568e6f085baSmrg 569e6f085baSmrg *) 570e6f085baSmrg nonopt="$arg" 571e6f085baSmrg break 57295b296d0Smrg ;; 57395b296d0Smrg esac 574e6f085baSmrgdone 57595b296d0Smrg 576e6f085baSmrgif test -n "$prevopt"; then 577e6f085baSmrg $echo "$modename: option \`$prevopt' requires an argument" 1>&2 578e6f085baSmrg $echo "$help" 1>&2 579e6f085baSmrg exit $EXIT_FAILURE 580e6f085baSmrgfi 58139713583Smrg 582e6f085baSmrgcase $disable_libs in 583e6f085baSmrgno) 584e6f085baSmrg ;; 585e6f085baSmrgshared) 586e6f085baSmrg build_libtool_libs=no 587e6f085baSmrg build_old_libs=yes 588e6f085baSmrg ;; 589e6f085baSmrgstatic) 590e6f085baSmrg build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 591e6f085baSmrg ;; 592e6f085baSmrgesac 59339713583Smrg 594e6f085baSmrg# If this variable is set in any of the actions, the command in it 595e6f085baSmrg# will be execed at the end. This prevents here-documents from being 596e6f085baSmrg# left over by shells. 597e6f085baSmrgexec_cmd= 59839713583Smrg 599e6f085baSmrgif test -z "$show_help"; then 60039713583Smrg 601e6f085baSmrg # Infer the operation mode. 602e6f085baSmrg if test -z "$mode"; then 603e6f085baSmrg $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 604e6f085baSmrg $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 605e6f085baSmrg case $nonopt in 606e6f085baSmrg *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) 607e6f085baSmrg mode=link 608e6f085baSmrg for arg 609e6f085baSmrg do 610e6f085baSmrg case $arg in 611e6f085baSmrg -c) 612e6f085baSmrg mode=compile 613e6f085baSmrg break 614e6f085baSmrg ;; 615e6f085baSmrg esac 616e6f085baSmrg done 61795b296d0Smrg ;; 618e6f085baSmrg *db | *dbx | *strace | *truss) 619e6f085baSmrg mode=execute 62039713583Smrg ;; 621e6f085baSmrg *install*|cp|mv) 622e6f085baSmrg mode=install 623e6f085baSmrg ;; 624e6f085baSmrg *rm) 625e6f085baSmrg mode=uninstall 626e6f085baSmrg ;; 627e6f085baSmrg *) 628e6f085baSmrg # If we have no mode, but dlfiles were specified, then do execute mode. 629e6f085baSmrg test -n "$execute_dlfiles" && mode=execute 63039713583Smrg 631e6f085baSmrg # Just use the default operation mode. 632e6f085baSmrg if test -z "$mode"; then 633e6f085baSmrg if test -n "$nonopt"; then 634e6f085baSmrg $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 635e6f085baSmrg else 636e6f085baSmrg $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 637e6f085baSmrg fi 63895b296d0Smrg fi 639e6f085baSmrg ;; 640e6f085baSmrg esac 64195b296d0Smrg fi 64295b296d0Smrg 64395b296d0Smrg # Only execute mode is allowed to have -dlopen flags. 64495b296d0Smrg if test -n "$execute_dlfiles" && test "$mode" != execute; then 645e6f085baSmrg $echo "$modename: unrecognized option \`-dlopen'" 1>&2 646e6f085baSmrg $echo "$help" 1>&2 64795b296d0Smrg exit $EXIT_FAILURE 64895b296d0Smrg fi 64995b296d0Smrg 65095b296d0Smrg # Change the help message to a mode-specific one. 65195b296d0Smrg generic_help="$help" 652e6f085baSmrg help="Try \`$modename --help --mode=$mode' for more information." 65395b296d0Smrg 654e6f085baSmrg # These modes are in order of execution frequency so that they run quickly. 655e6f085baSmrg case $mode in 656e6f085baSmrg # libtool compile mode 657e6f085baSmrg compile) 658e6f085baSmrg modename="$modename: compile" 659e6f085baSmrg # Get the compilation command and the source file. 660e6f085baSmrg base_compile= 661e6f085baSmrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 662e6f085baSmrg suppress_opt=yes 663e6f085baSmrg suppress_output= 664e6f085baSmrg arg_mode=normal 665e6f085baSmrg libobj= 666e6f085baSmrg later= 66795b296d0Smrg 668e6f085baSmrg for arg 669e6f085baSmrg do 670e6f085baSmrg case $arg_mode in 671e6f085baSmrg arg ) 672e6f085baSmrg # do not "continue". Instead, add this to base_compile 673e6f085baSmrg lastarg="$arg" 674e6f085baSmrg arg_mode=normal 675e6f085baSmrg ;; 67695b296d0Smrg 677e6f085baSmrg target ) 678e6f085baSmrg libobj="$arg" 679e6f085baSmrg arg_mode=normal 680e6f085baSmrg continue 681e6f085baSmrg ;; 68295b296d0Smrg 683e6f085baSmrg normal ) 684e6f085baSmrg # Accept any command-line options. 685e6f085baSmrg case $arg in 686e6f085baSmrg -o) 687e6f085baSmrg if test -n "$libobj" ; then 688e6f085baSmrg $echo "$modename: you cannot specify \`-o' more than once" 1>&2 689e6f085baSmrg exit $EXIT_FAILURE 690e6f085baSmrg fi 691e6f085baSmrg arg_mode=target 692e6f085baSmrg continue 693e6f085baSmrg ;; 69495b296d0Smrg 695e6f085baSmrg -static | -prefer-pic | -prefer-non-pic) 696e6f085baSmrg later="$later $arg" 697e6f085baSmrg continue 698e6f085baSmrg ;; 69939713583Smrg 70039713583Smrg -no-suppress) 70195b296d0Smrg suppress_opt=no 70295b296d0Smrg continue 70395b296d0Smrg ;; 70495b296d0Smrg 70595b296d0Smrg -Xcompiler) 70695b296d0Smrg arg_mode=arg # the next one goes into the "base_compile" arg list 70795b296d0Smrg continue # The current "srcfile" will either be retained or 70895b296d0Smrg ;; # replaced later. I would guess that would be a bug. 70995b296d0Smrg 71095b296d0Smrg -Wc,*) 711e6f085baSmrg args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` 71295b296d0Smrg lastarg= 71395b296d0Smrg save_ifs="$IFS"; IFS=',' 714e6f085baSmrg for arg in $args; do 71595b296d0Smrg IFS="$save_ifs" 716e6f085baSmrg 717e6f085baSmrg # Double-quote args containing other shell metacharacters. 718e6f085baSmrg # Many Bourne shells cannot handle close brackets correctly 719e6f085baSmrg # in scan sets, so we specify it separately. 720e6f085baSmrg case $arg in 721e6f085baSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 722e6f085baSmrg arg="\"$arg\"" 723e6f085baSmrg ;; 724e6f085baSmrg esac 725e6f085baSmrg lastarg="$lastarg $arg" 72695b296d0Smrg done 72795b296d0Smrg IFS="$save_ifs" 728e6f085baSmrg lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` 72995b296d0Smrg 73095b296d0Smrg # Add the arguments to base_compile. 73195b296d0Smrg base_compile="$base_compile $lastarg" 73295b296d0Smrg continue 73395b296d0Smrg ;; 73495b296d0Smrg 735e6f085baSmrg * ) 73695b296d0Smrg # Accept the current argument as the source file. 73795b296d0Smrg # The previous "srcfile" becomes the current argument. 73895b296d0Smrg # 73995b296d0Smrg lastarg="$srcfile" 74095b296d0Smrg srcfile="$arg" 74195b296d0Smrg ;; 74295b296d0Smrg esac # case $arg 74395b296d0Smrg ;; 74495b296d0Smrg esac # case $arg_mode 74595b296d0Smrg 74695b296d0Smrg # Aesthetically quote the previous argument. 747e6f085baSmrg lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` 748e6f085baSmrg 749e6f085baSmrg case $lastarg in 750e6f085baSmrg # Double-quote args containing other shell metacharacters. 751e6f085baSmrg # Many Bourne shells cannot handle close brackets correctly 752e6f085baSmrg # in scan sets, and some SunOS ksh mistreat backslash-escaping 753e6f085baSmrg # in scan sets (worked around with variable expansion), 754e6f085baSmrg # and furthermore cannot handle '|' '&' '(' ')' in scan sets 755e6f085baSmrg # at all, so we specify them separately. 756e6f085baSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 757e6f085baSmrg lastarg="\"$lastarg\"" 758e6f085baSmrg ;; 759e6f085baSmrg esac 760e6f085baSmrg 761e6f085baSmrg base_compile="$base_compile $lastarg" 76295b296d0Smrg done # for arg 76395b296d0Smrg 76495b296d0Smrg case $arg_mode in 76595b296d0Smrg arg) 766e6f085baSmrg $echo "$modename: you must specify an argument for -Xcompile" 767e6f085baSmrg exit $EXIT_FAILURE 76895b296d0Smrg ;; 76995b296d0Smrg target) 770e6f085baSmrg $echo "$modename: you must specify a target with \`-o'" 1>&2 771e6f085baSmrg exit $EXIT_FAILURE 77295b296d0Smrg ;; 77395b296d0Smrg *) 77495b296d0Smrg # Get the name of the library object. 775e6f085baSmrg [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` 77695b296d0Smrg ;; 77795b296d0Smrg esac 77895b296d0Smrg 77995b296d0Smrg # Recognize several different file suffixes. 78095b296d0Smrg # If the user specifies -o file.o, it is replaced with file.lo 781e6f085baSmrg xform='[cCFSifmso]' 78295b296d0Smrg case $libobj in 783e6f085baSmrg *.ada) xform=ada ;; 784e6f085baSmrg *.adb) xform=adb ;; 785e6f085baSmrg *.ads) xform=ads ;; 786e6f085baSmrg *.asm) xform=asm ;; 787e6f085baSmrg *.c++) xform=c++ ;; 788e6f085baSmrg *.cc) xform=cc ;; 789e6f085baSmrg *.ii) xform=ii ;; 790e6f085baSmrg *.class) xform=class ;; 791e6f085baSmrg *.cpp) xform=cpp ;; 792e6f085baSmrg *.cxx) xform=cxx ;; 793e6f085baSmrg *.[fF][09]?) xform=[fF][09]. ;; 794e6f085baSmrg *.for) xform=for ;; 795e6f085baSmrg *.java) xform=java ;; 796e6f085baSmrg *.obj) xform=obj ;; 797e6f085baSmrg *.sx) xform=sx ;; 79895b296d0Smrg esac 79995b296d0Smrg 800e6f085baSmrg libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` 801e6f085baSmrg 80295b296d0Smrg case $libobj in 803e6f085baSmrg *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; 80495b296d0Smrg *) 805e6f085baSmrg $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 806e6f085baSmrg exit $EXIT_FAILURE 80795b296d0Smrg ;; 80895b296d0Smrg esac 80995b296d0Smrg 81095b296d0Smrg func_infer_tag $base_compile 81195b296d0Smrg 81295b296d0Smrg for arg in $later; do 81395b296d0Smrg case $arg in 81495b296d0Smrg -static) 81595b296d0Smrg build_old_libs=yes 81695b296d0Smrg continue 81795b296d0Smrg ;; 81895b296d0Smrg 81995b296d0Smrg -prefer-pic) 82095b296d0Smrg pic_mode=yes 82195b296d0Smrg continue 82295b296d0Smrg ;; 82395b296d0Smrg 82495b296d0Smrg -prefer-non-pic) 82595b296d0Smrg pic_mode=no 82695b296d0Smrg continue 82795b296d0Smrg ;; 82895b296d0Smrg esac 82995b296d0Smrg done 83095b296d0Smrg 831e6f085baSmrg qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` 832e6f085baSmrg case $qlibobj in 833e6f085baSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 834e6f085baSmrg qlibobj="\"$qlibobj\"" ;; 835e6f085baSmrg esac 836e6f085baSmrg test "X$libobj" != "X$qlibobj" \ 837e6f085baSmrg && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ 838e6f085baSmrg && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." 839e6f085baSmrg objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` 840e6f085baSmrg xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` 841e6f085baSmrg if test "X$xdir" = "X$obj"; then 842e6f085baSmrg xdir= 843e6f085baSmrg else 844e6f085baSmrg xdir=$xdir/ 845e6f085baSmrg fi 84695b296d0Smrg lobj=${xdir}$objdir/$objname 84795b296d0Smrg 848e6f085baSmrg if test -z "$base_compile"; then 849e6f085baSmrg $echo "$modename: you must specify a compilation command" 1>&2 850e6f085baSmrg $echo "$help" 1>&2 851e6f085baSmrg exit $EXIT_FAILURE 852e6f085baSmrg fi 85395b296d0Smrg 85495b296d0Smrg # Delete any leftover library objects. 85595b296d0Smrg if test "$build_old_libs" = yes; then 85695b296d0Smrg removelist="$obj $lobj $libobj ${libobj}T" 85795b296d0Smrg else 85895b296d0Smrg removelist="$lobj $libobj ${libobj}T" 85995b296d0Smrg fi 86095b296d0Smrg 861e6f085baSmrg $run $rm $removelist 862e6f085baSmrg trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 863e6f085baSmrg 86495b296d0Smrg # On Cygwin there's no "real" PIC flag so we must build both object types 86595b296d0Smrg case $host_os in 866e6f085baSmrg cygwin* | mingw* | pw32* | os2*) 86795b296d0Smrg pic_mode=default 86895b296d0Smrg ;; 86995b296d0Smrg esac 87095b296d0Smrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 87195b296d0Smrg # non-PIC code in shared libraries is not supported 87295b296d0Smrg pic_mode=default 87395b296d0Smrg fi 87495b296d0Smrg 87595b296d0Smrg # Calculate the filename of the output object if compiler does 87695b296d0Smrg # not support -o with -c 87795b296d0Smrg if test "$compiler_c_o" = no; then 878e6f085baSmrg output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} 87995b296d0Smrg lockfile="$output_obj.lock" 880e6f085baSmrg removelist="$removelist $output_obj $lockfile" 881e6f085baSmrg trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 88295b296d0Smrg else 88395b296d0Smrg output_obj= 88495b296d0Smrg need_locks=no 88595b296d0Smrg lockfile= 88695b296d0Smrg fi 88795b296d0Smrg 88895b296d0Smrg # Lock this critical section if it is needed 88995b296d0Smrg # We use this script file to make the link, it avoids creating a new file 89095b296d0Smrg if test "$need_locks" = yes; then 891e6f085baSmrg until $run ln "$progpath" "$lockfile" 2>/dev/null; do 892e6f085baSmrg $show "Waiting for $lockfile to be removed" 89395b296d0Smrg sleep 2 89495b296d0Smrg done 89595b296d0Smrg elif test "$need_locks" = warn; then 89695b296d0Smrg if test -f "$lockfile"; then 897e6f085baSmrg $echo "\ 89895b296d0Smrg*** ERROR, $lockfile exists and contains: 89995b296d0Smrg`cat $lockfile 2>/dev/null` 90095b296d0Smrg 90195b296d0SmrgThis indicates that another process is trying to use the same 90295b296d0Smrgtemporary object file, and libtool could not work around it because 90395b296d0Smrgyour compiler does not support \`-c' and \`-o' together. If you 90495b296d0Smrgrepeat this compilation, it may succeed, by chance, but you had better 90595b296d0Smrgavoid parallel builds (make -j) in this platform, or get a better 90695b296d0Smrgcompiler." 90795b296d0Smrg 908e6f085baSmrg $run $rm $removelist 90995b296d0Smrg exit $EXIT_FAILURE 91095b296d0Smrg fi 911e6f085baSmrg $echo "$srcfile" > "$lockfile" 91295b296d0Smrg fi 91395b296d0Smrg 91495b296d0Smrg if test -n "$fix_srcfile_path"; then 91595b296d0Smrg eval srcfile=\"$fix_srcfile_path\" 91695b296d0Smrg fi 917e6f085baSmrg qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` 918e6f085baSmrg case $qsrcfile in 919e6f085baSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 920e6f085baSmrg qsrcfile="\"$qsrcfile\"" ;; 921e6f085baSmrg esac 922e6f085baSmrg 923e6f085baSmrg $run $rm "$libobj" "${libobj}T" 924e6f085baSmrg 925e6f085baSmrg # Create a libtool object file (analogous to a ".la" file), 926e6f085baSmrg # but don't create it if we're doing a dry run. 927e6f085baSmrg test -z "$run" && cat > ${libobj}T <<EOF 928e6f085baSmrg# $libobj - a libtool object file 929e6f085baSmrg# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP 930e6f085baSmrg# 931e6f085baSmrg# Please DO NOT delete this file! 932e6f085baSmrg# It is necessary for linking the library. 933e6f085baSmrg 934e6f085baSmrg# Name of the PIC object. 935e6f085baSmrgEOF 93695b296d0Smrg 93795b296d0Smrg # Only build a PIC object if we are building libtool libraries. 93895b296d0Smrg if test "$build_libtool_libs" = yes; then 93995b296d0Smrg # Without this assignment, base_compile gets emptied. 94095b296d0Smrg fbsd_hideous_sh_bug=$base_compile 94195b296d0Smrg 94295b296d0Smrg if test "$pic_mode" != no; then 94395b296d0Smrg command="$base_compile $qsrcfile $pic_flag" 94495b296d0Smrg else 94595b296d0Smrg # Don't build PIC code 94695b296d0Smrg command="$base_compile $qsrcfile" 94795b296d0Smrg fi 94895b296d0Smrg 949e6f085baSmrg if test ! -d "${xdir}$objdir"; then 950e6f085baSmrg $show "$mkdir ${xdir}$objdir" 951e6f085baSmrg $run $mkdir ${xdir}$objdir 952e6f085baSmrg exit_status=$? 953e6f085baSmrg if test "$exit_status" -ne 0 && test ! -d "${xdir}$objdir"; then 954e6f085baSmrg exit $exit_status 955e6f085baSmrg fi 956e6f085baSmrg fi 95795b296d0Smrg 95895b296d0Smrg if test -z "$output_obj"; then 95995b296d0Smrg # Place PIC objects in $objdir 96095b296d0Smrg command="$command -o $lobj" 96195b296d0Smrg fi 96295b296d0Smrg 963e6f085baSmrg $run $rm "$lobj" "$output_obj" 964e6f085baSmrg 965e6f085baSmrg $show "$command" 966e6f085baSmrg if $run eval $lt_env "$command"; then : 967e6f085baSmrg else 968e6f085baSmrg test -n "$output_obj" && $run $rm $removelist 969e6f085baSmrg exit $EXIT_FAILURE 970e6f085baSmrg fi 97195b296d0Smrg 97295b296d0Smrg if test "$need_locks" = warn && 97395b296d0Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 974e6f085baSmrg $echo "\ 97595b296d0Smrg*** ERROR, $lockfile contains: 97695b296d0Smrg`cat $lockfile 2>/dev/null` 97795b296d0Smrg 97895b296d0Smrgbut it should contain: 97995b296d0Smrg$srcfile 98095b296d0Smrg 98195b296d0SmrgThis indicates that another process is trying to use the same 98295b296d0Smrgtemporary object file, and libtool could not work around it because 98395b296d0Smrgyour compiler does not support \`-c' and \`-o' together. If you 98495b296d0Smrgrepeat this compilation, it may succeed, by chance, but you had better 98595b296d0Smrgavoid parallel builds (make -j) in this platform, or get a better 98695b296d0Smrgcompiler." 98795b296d0Smrg 988e6f085baSmrg $run $rm $removelist 98995b296d0Smrg exit $EXIT_FAILURE 99095b296d0Smrg fi 99195b296d0Smrg 99295b296d0Smrg # Just move the object if needed, then go on to compile the next one 99395b296d0Smrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 994e6f085baSmrg $show "$mv $output_obj $lobj" 995e6f085baSmrg if $run $mv $output_obj $lobj; then : 996e6f085baSmrg else 997e6f085baSmrg error=$? 998e6f085baSmrg $run $rm $removelist 999e6f085baSmrg exit $error 1000e6f085baSmrg fi 100195b296d0Smrg fi 100295b296d0Smrg 1003e6f085baSmrg # Append the name of the PIC object to the libtool object file. 1004e6f085baSmrg test -z "$run" && cat >> ${libobj}T <<EOF 1005e6f085baSmrgpic_object='$objdir/$objname' 1006e6f085baSmrg 1007e6f085baSmrgEOF 1008e6f085baSmrg 100995b296d0Smrg # Allow error messages only from the first compilation. 101095b296d0Smrg if test "$suppress_opt" = yes; then 1011e6f085baSmrg suppress_output=' >/dev/null 2>&1' 101295b296d0Smrg fi 1013e6f085baSmrg else 1014e6f085baSmrg # No PIC object so indicate it doesn't exist in the libtool 1015e6f085baSmrg # object file. 1016e6f085baSmrg test -z "$run" && cat >> ${libobj}T <<EOF 1017e6f085baSmrgpic_object=none 1018e6f085baSmrg 1019e6f085baSmrgEOF 102095b296d0Smrg fi 102195b296d0Smrg 102295b296d0Smrg # Only build a position-dependent object if we build old libraries. 102395b296d0Smrg if test "$build_old_libs" = yes; then 102495b296d0Smrg if test "$pic_mode" != yes; then 102595b296d0Smrg # Don't build PIC code 1026e6f085baSmrg command="$base_compile $qsrcfile" 102795b296d0Smrg else 102895b296d0Smrg command="$base_compile $qsrcfile $pic_flag" 102995b296d0Smrg fi 103095b296d0Smrg if test "$compiler_c_o" = yes; then 103195b296d0Smrg command="$command -o $obj" 103295b296d0Smrg fi 103395b296d0Smrg 103495b296d0Smrg # Suppress compiler output if we already did a PIC compilation. 103595b296d0Smrg command="$command$suppress_output" 1036e6f085baSmrg $run $rm "$obj" "$output_obj" 1037e6f085baSmrg $show "$command" 1038e6f085baSmrg if $run eval $lt_env "$command"; then : 1039e6f085baSmrg else 1040e6f085baSmrg $run $rm $removelist 1041e6f085baSmrg exit $EXIT_FAILURE 1042e6f085baSmrg fi 104395b296d0Smrg 104495b296d0Smrg if test "$need_locks" = warn && 104595b296d0Smrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 1046e6f085baSmrg $echo "\ 104795b296d0Smrg*** ERROR, $lockfile contains: 104895b296d0Smrg`cat $lockfile 2>/dev/null` 104995b296d0Smrg 105095b296d0Smrgbut it should contain: 105195b296d0Smrg$srcfile 105295b296d0Smrg 105395b296d0SmrgThis indicates that another process is trying to use the same 105495b296d0Smrgtemporary object file, and libtool could not work around it because 105595b296d0Smrgyour compiler does not support \`-c' and \`-o' together. If you 105695b296d0Smrgrepeat this compilation, it may succeed, by chance, but you had better 105795b296d0Smrgavoid parallel builds (make -j) in this platform, or get a better 105895b296d0Smrgcompiler." 105995b296d0Smrg 1060e6f085baSmrg $run $rm $removelist 106195b296d0Smrg exit $EXIT_FAILURE 106295b296d0Smrg fi 106395b296d0Smrg 106495b296d0Smrg # Just move the object if needed 106595b296d0Smrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 1066e6f085baSmrg $show "$mv $output_obj $obj" 1067e6f085baSmrg if $run $mv $output_obj $obj; then : 1068e6f085baSmrg else 1069e6f085baSmrg error=$? 1070e6f085baSmrg $run $rm $removelist 1071e6f085baSmrg exit $error 1072e6f085baSmrg fi 107395b296d0Smrg fi 1074e6f085baSmrg 1075e6f085baSmrg # Append the name of the non-PIC object the libtool object file. 1076e6f085baSmrg # Only append if the libtool object file exists. 1077e6f085baSmrg test -z "$run" && cat >> ${libobj}T <<EOF 1078e6f085baSmrg# Name of the non-PIC object. 1079e6f085baSmrgnon_pic_object='$objname' 1080e6f085baSmrg 1081e6f085baSmrgEOF 1082e6f085baSmrg else 1083e6f085baSmrg # Append the name of the non-PIC object the libtool object file. 1084e6f085baSmrg # Only append if the libtool object file exists. 1085e6f085baSmrg test -z "$run" && cat >> ${libobj}T <<EOF 1086e6f085baSmrg# Name of the non-PIC object. 1087e6f085baSmrgnon_pic_object=none 1088e6f085baSmrg 1089e6f085baSmrgEOF 109095b296d0Smrg fi 109195b296d0Smrg 1092e6f085baSmrg $run $mv "${libobj}T" "${libobj}" 109395b296d0Smrg 1094e6f085baSmrg # Unlock the critical section if it was locked 1095e6f085baSmrg if test "$need_locks" != no; then 1096e6f085baSmrg $run $rm "$lockfile" 1097e6f085baSmrg fi 109895b296d0Smrg 109995b296d0Smrg exit $EXIT_SUCCESS 1100e6f085baSmrg ;; 110195b296d0Smrg 1102e6f085baSmrg # libtool link mode 1103e6f085baSmrg link | relink) 1104e6f085baSmrg modename="$modename: link" 1105e6f085baSmrg case $host in 1106e6f085baSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) 1107e6f085baSmrg # It is impossible to link a dll without this setting, and 1108e6f085baSmrg # we shouldn't force the makefile maintainer to figure out 1109e6f085baSmrg # which system we are compiling for in order to pass an extra 1110e6f085baSmrg # flag for every libtool invocation. 1111e6f085baSmrg # allow_undefined=no 111295b296d0Smrg 1113e6f085baSmrg # FIXME: Unfortunately, there are problems with the above when trying 1114e6f085baSmrg # to make a dll which has undefined symbols, in which case not 1115e6f085baSmrg # even a static library is built. For now, we need to specify 1116e6f085baSmrg # -no-undefined on the libtool link line when we can be certain 1117e6f085baSmrg # that all symbols are satisfied, otherwise we get a static library. 1118e6f085baSmrg allow_undefined=yes 1119e6f085baSmrg ;; 1120e6f085baSmrg *) 1121e6f085baSmrg allow_undefined=yes 1122e6f085baSmrg ;; 1123e6f085baSmrg esac 1124e6f085baSmrg libtool_args="$nonopt" 1125e6f085baSmrg base_compile="$nonopt $@" 1126e6f085baSmrg compile_command="$nonopt" 1127e6f085baSmrg finalize_command="$nonopt" 112895b296d0Smrg 1129e6f085baSmrg compile_rpath= 1130e6f085baSmrg finalize_rpath= 1131e6f085baSmrg compile_shlibpath= 1132e6f085baSmrg finalize_shlibpath= 1133e6f085baSmrg convenience= 1134e6f085baSmrg old_convenience= 1135e6f085baSmrg deplibs= 1136e6f085baSmrg old_deplibs= 1137e6f085baSmrg compiler_flags= 1138e6f085baSmrg linker_flags= 1139e6f085baSmrg dllsearchpath= 1140e6f085baSmrg lib_search_path=`pwd` 1141e6f085baSmrg inst_prefix_dir= 114295b296d0Smrg 1143e6f085baSmrg avoid_version=no 1144e6f085baSmrg dlfiles= 1145e6f085baSmrg dlprefiles= 1146e6f085baSmrg dlself=no 1147e6f085baSmrg export_dynamic=no 1148e6f085baSmrg export_symbols= 1149e6f085baSmrg export_symbols_regex= 1150e6f085baSmrg generated= 1151e6f085baSmrg libobjs= 1152e6f085baSmrg ltlibs= 1153e6f085baSmrg module=no 1154e6f085baSmrg no_install=no 1155e6f085baSmrg objs= 1156e6f085baSmrg non_pic_objects= 1157e6f085baSmrg notinst_path= # paths that contain not-installed libtool libraries 1158e6f085baSmrg precious_files_regex= 1159e6f085baSmrg prefer_static_libs=no 1160e6f085baSmrg preload=no 1161e6f085baSmrg prev= 1162e6f085baSmrg prevarg= 1163e6f085baSmrg release= 1164e6f085baSmrg rpath= 1165e6f085baSmrg xrpath= 1166e6f085baSmrg perm_rpath= 1167e6f085baSmrg temp_rpath= 1168e6f085baSmrg thread_safe=no 1169e6f085baSmrg vinfo= 1170e6f085baSmrg vinfo_number=no 1171e6f085baSmrg single_module="${wl}-single_module" 117295b296d0Smrg 1173e6f085baSmrg func_infer_tag $base_compile 117495b296d0Smrg 1175e6f085baSmrg # We need to know -static, to get the right output filenames. 1176e6f085baSmrg for arg 1177e6f085baSmrg do 1178e6f085baSmrg case $arg in 1179e6f085baSmrg -all-static | -static | -static-libtool-libs) 1180e6f085baSmrg case $arg in 1181e6f085baSmrg -all-static) 1182e6f085baSmrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 1183e6f085baSmrg $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 1184e6f085baSmrg fi 1185e6f085baSmrg if test -n "$link_static_flag"; then 1186e6f085baSmrg dlopen_self=$dlopen_self_static 1187e6f085baSmrg fi 1188e6f085baSmrg prefer_static_libs=yes 1189e6f085baSmrg ;; 1190e6f085baSmrg -static) 1191e6f085baSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 1192e6f085baSmrg dlopen_self=$dlopen_self_static 1193e6f085baSmrg fi 1194e6f085baSmrg prefer_static_libs=built 1195e6f085baSmrg ;; 1196e6f085baSmrg -static-libtool-libs) 1197e6f085baSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 1198e6f085baSmrg dlopen_self=$dlopen_self_static 1199e6f085baSmrg fi 1200e6f085baSmrg prefer_static_libs=yes 1201e6f085baSmrg ;; 1202e6f085baSmrg esac 1203e6f085baSmrg build_libtool_libs=no 1204e6f085baSmrg build_old_libs=yes 1205e6f085baSmrg break 1206e6f085baSmrg ;; 1207e6f085baSmrg esac 1208e6f085baSmrg done 120995b296d0Smrg 1210e6f085baSmrg # See if our shared archives depend on static archives. 1211e6f085baSmrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 121295b296d0Smrg 1213e6f085baSmrg # Go through the arguments, transforming them on the way. 1214e6f085baSmrg while test "$#" -gt 0; do 1215e6f085baSmrg arg="$1" 1216e6f085baSmrg shift 1217e6f085baSmrg case $arg in 1218e6f085baSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1219e6f085baSmrg qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test 1220e6f085baSmrg ;; 1221e6f085baSmrg *) qarg=$arg ;; 1222e6f085baSmrg esac 1223e6f085baSmrg libtool_args="$libtool_args $qarg" 122495b296d0Smrg 1225e6f085baSmrg # If the previous option needs an argument, assign it. 1226e6f085baSmrg if test -n "$prev"; then 1227e6f085baSmrg case $prev in 1228e6f085baSmrg output) 1229e6f085baSmrg compile_command="$compile_command @OUTPUT@" 1230e6f085baSmrg finalize_command="$finalize_command @OUTPUT@" 1231e6f085baSmrg ;; 1232e6f085baSmrg esac 123395b296d0Smrg 1234e6f085baSmrg case $prev in 1235e6f085baSmrg dlfiles|dlprefiles) 1236e6f085baSmrg if test "$preload" = no; then 1237e6f085baSmrg # Add the symbol object into the linking commands. 1238e6f085baSmrg compile_command="$compile_command @SYMFILE@" 1239e6f085baSmrg finalize_command="$finalize_command @SYMFILE@" 1240e6f085baSmrg preload=yes 1241e6f085baSmrg fi 1242e6f085baSmrg case $arg in 1243e6f085baSmrg *.la | *.lo) ;; # We handle these cases below. 1244e6f085baSmrg force) 1245e6f085baSmrg if test "$dlself" = no; then 1246e6f085baSmrg dlself=needless 1247e6f085baSmrg export_dynamic=yes 1248e6f085baSmrg fi 1249e6f085baSmrg prev= 1250e6f085baSmrg continue 1251e6f085baSmrg ;; 1252e6f085baSmrg self) 1253e6f085baSmrg if test "$prev" = dlprefiles; then 1254e6f085baSmrg dlself=yes 1255e6f085baSmrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 1256e6f085baSmrg dlself=yes 1257e6f085baSmrg else 1258e6f085baSmrg dlself=needless 1259e6f085baSmrg export_dynamic=yes 1260e6f085baSmrg fi 1261e6f085baSmrg prev= 1262e6f085baSmrg continue 1263e6f085baSmrg ;; 1264e6f085baSmrg *) 1265e6f085baSmrg if test "$prev" = dlfiles; then 1266e6f085baSmrg dlfiles="$dlfiles $arg" 1267e6f085baSmrg else 1268e6f085baSmrg dlprefiles="$dlprefiles $arg" 1269e6f085baSmrg fi 1270e6f085baSmrg prev= 1271e6f085baSmrg continue 1272e6f085baSmrg ;; 1273e6f085baSmrg esac 1274e6f085baSmrg ;; 1275e6f085baSmrg expsyms) 1276e6f085baSmrg export_symbols="$arg" 1277e6f085baSmrg if test ! -f "$arg"; then 1278e6f085baSmrg $echo "$modename: symbol file \`$arg' does not exist" 1279e6f085baSmrg exit $EXIT_FAILURE 1280e6f085baSmrg fi 1281e6f085baSmrg prev= 1282e6f085baSmrg continue 1283e6f085baSmrg ;; 1284e6f085baSmrg expsyms_regex) 1285e6f085baSmrg export_symbols_regex="$arg" 1286e6f085baSmrg prev= 1287e6f085baSmrg continue 1288e6f085baSmrg ;; 1289e6f085baSmrg inst_prefix) 1290e6f085baSmrg inst_prefix_dir="$arg" 1291e6f085baSmrg prev= 1292e6f085baSmrg continue 1293e6f085baSmrg ;; 1294e6f085baSmrg precious_regex) 1295e6f085baSmrg precious_files_regex="$arg" 1296e6f085baSmrg prev= 1297e6f085baSmrg continue 1298e6f085baSmrg ;; 1299e6f085baSmrg release) 1300e6f085baSmrg release="-$arg" 1301e6f085baSmrg prev= 1302e6f085baSmrg continue 1303e6f085baSmrg ;; 1304e6f085baSmrg objectlist) 1305e6f085baSmrg if test -f "$arg"; then 1306e6f085baSmrg save_arg=$arg 1307e6f085baSmrg moreargs= 1308e6f085baSmrg for fil in `cat $save_arg` 1309e6f085baSmrg do 1310e6f085baSmrg# moreargs="$moreargs $fil" 1311e6f085baSmrg arg=$fil 1312e6f085baSmrg # A libtool-controlled object. 131395b296d0Smrg 1314e6f085baSmrg # Check to see that this really is a libtool object. 1315e6f085baSmrg if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then 1316e6f085baSmrg pic_object= 1317e6f085baSmrg non_pic_object= 131895b296d0Smrg 1319e6f085baSmrg # Read the .lo file 1320e6f085baSmrg # If there is no directory component, then add one. 1321e6f085baSmrg case $arg in 1322e6f085baSmrg */* | *\\*) . $arg ;; 1323e6f085baSmrg *) . ./$arg ;; 1324e6f085baSmrg esac 132595b296d0Smrg 1326e6f085baSmrg if test -z "$pic_object" || \ 1327e6f085baSmrg test -z "$non_pic_object" || 1328e6f085baSmrg test "$pic_object" = none && \ 1329e6f085baSmrg test "$non_pic_object" = none; then 1330e6f085baSmrg $echo "$modename: cannot find name of object for \`$arg'" 1>&2 1331e6f085baSmrg exit $EXIT_FAILURE 1332e6f085baSmrg fi 133395b296d0Smrg 1334e6f085baSmrg # Extract subdirectory from the argument. 1335e6f085baSmrg xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` 1336e6f085baSmrg if test "X$xdir" = "X$arg"; then 1337e6f085baSmrg xdir= 1338e6f085baSmrg else 1339e6f085baSmrg xdir="$xdir/" 1340e6f085baSmrg fi 134195b296d0Smrg 1342e6f085baSmrg if test "$pic_object" != none; then 1343e6f085baSmrg # Prepend the subdirectory the object is found in. 1344e6f085baSmrg pic_object="$xdir$pic_object" 134595b296d0Smrg 1346e6f085baSmrg if test "$prev" = dlfiles; then 1347e6f085baSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 1348e6f085baSmrg dlfiles="$dlfiles $pic_object" 1349e6f085baSmrg prev= 1350e6f085baSmrg continue 1351e6f085baSmrg else 1352e6f085baSmrg # If libtool objects are unsupported, then we need to preload. 1353e6f085baSmrg prev=dlprefiles 1354e6f085baSmrg fi 1355e6f085baSmrg fi 135695b296d0Smrg 1357e6f085baSmrg # CHECK ME: I think I busted this. -Ossama 1358e6f085baSmrg if test "$prev" = dlprefiles; then 1359e6f085baSmrg # Preload the old-style object. 1360e6f085baSmrg dlprefiles="$dlprefiles $pic_object" 1361e6f085baSmrg prev= 1362e6f085baSmrg fi 136395b296d0Smrg 1364e6f085baSmrg # A PIC object. 1365e6f085baSmrg libobjs="$libobjs $pic_object" 1366e6f085baSmrg arg="$pic_object" 1367e6f085baSmrg fi 136895b296d0Smrg 1369e6f085baSmrg # Non-PIC object. 1370e6f085baSmrg if test "$non_pic_object" != none; then 1371e6f085baSmrg # Prepend the subdirectory the object is found in. 1372e6f085baSmrg non_pic_object="$xdir$non_pic_object" 137395b296d0Smrg 1374e6f085baSmrg # A standard non-PIC object 1375e6f085baSmrg non_pic_objects="$non_pic_objects $non_pic_object" 1376e6f085baSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 1377e6f085baSmrg arg="$non_pic_object" 1378e6f085baSmrg fi 1379e6f085baSmrg else 1380e6f085baSmrg # If the PIC object exists, use it instead. 1381e6f085baSmrg # $xdir was prepended to $pic_object above. 1382e6f085baSmrg non_pic_object="$pic_object" 1383e6f085baSmrg non_pic_objects="$non_pic_objects $non_pic_object" 1384e6f085baSmrg fi 1385e6f085baSmrg else 1386e6f085baSmrg # Only an error if not doing a dry-run. 1387e6f085baSmrg if test -z "$run"; then 1388e6f085baSmrg $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 1389e6f085baSmrg exit $EXIT_FAILURE 1390e6f085baSmrg else 1391e6f085baSmrg # Dry-run case. 139295b296d0Smrg 1393e6f085baSmrg # Extract subdirectory from the argument. 1394e6f085baSmrg xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` 1395e6f085baSmrg if test "X$xdir" = "X$arg"; then 1396e6f085baSmrg xdir= 1397e6f085baSmrg else 1398e6f085baSmrg xdir="$xdir/" 1399e6f085baSmrg fi 140095b296d0Smrg 1401e6f085baSmrg pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` 1402e6f085baSmrg non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` 1403e6f085baSmrg libobjs="$libobjs $pic_object" 1404e6f085baSmrg non_pic_objects="$non_pic_objects $non_pic_object" 1405e6f085baSmrg fi 1406e6f085baSmrg fi 1407e6f085baSmrg done 1408e6f085baSmrg else 1409e6f085baSmrg $echo "$modename: link input file \`$save_arg' does not exist" 1410e6f085baSmrg exit $EXIT_FAILURE 1411e6f085baSmrg fi 1412e6f085baSmrg arg=$save_arg 1413e6f085baSmrg prev= 1414e6f085baSmrg continue 1415e6f085baSmrg ;; 1416e6f085baSmrg rpath | xrpath) 1417e6f085baSmrg # We need an absolute path. 1418e6f085baSmrg case $arg in 1419e6f085baSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 1420e6f085baSmrg *) 1421e6f085baSmrg $echo "$modename: only absolute run-paths are allowed" 1>&2 1422e6f085baSmrg exit $EXIT_FAILURE 1423e6f085baSmrg ;; 1424e6f085baSmrg esac 1425e6f085baSmrg if test "$prev" = rpath; then 1426e6f085baSmrg case "$rpath " in 1427e6f085baSmrg *" $arg "*) ;; 1428e6f085baSmrg *) rpath="$rpath $arg" ;; 1429e6f085baSmrg esac 1430e6f085baSmrg else 1431e6f085baSmrg case "$xrpath " in 1432e6f085baSmrg *" $arg "*) ;; 1433e6f085baSmrg *) xrpath="$xrpath $arg" ;; 1434e6f085baSmrg esac 1435e6f085baSmrg fi 1436e6f085baSmrg prev= 1437e6f085baSmrg continue 1438e6f085baSmrg ;; 1439e6f085baSmrg xcompiler) 1440e6f085baSmrg compiler_flags="$compiler_flags $qarg" 1441e6f085baSmrg prev= 1442e6f085baSmrg compile_command="$compile_command $qarg" 1443e6f085baSmrg finalize_command="$finalize_command $qarg" 1444e6f085baSmrg continue 1445e6f085baSmrg ;; 1446e6f085baSmrg xlinker) 1447e6f085baSmrg linker_flags="$linker_flags $qarg" 1448e6f085baSmrg compiler_flags="$compiler_flags $wl$qarg" 1449e6f085baSmrg prev= 1450e6f085baSmrg compile_command="$compile_command $wl$qarg" 1451e6f085baSmrg finalize_command="$finalize_command $wl$qarg" 1452e6f085baSmrg continue 1453e6f085baSmrg ;; 1454e6f085baSmrg xcclinker) 1455e6f085baSmrg linker_flags="$linker_flags $qarg" 1456e6f085baSmrg compiler_flags="$compiler_flags $qarg" 1457e6f085baSmrg prev= 1458e6f085baSmrg compile_command="$compile_command $qarg" 1459e6f085baSmrg finalize_command="$finalize_command $qarg" 1460e6f085baSmrg continue 1461e6f085baSmrg ;; 1462e6f085baSmrg shrext) 1463e6f085baSmrg shrext_cmds="$arg" 1464e6f085baSmrg prev= 1465e6f085baSmrg continue 1466e6f085baSmrg ;; 1467e6f085baSmrg darwin_framework|darwin_framework_skip) 1468e6f085baSmrg test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" 1469e6f085baSmrg compile_command="$compile_command $arg" 1470e6f085baSmrg finalize_command="$finalize_command $arg" 1471e6f085baSmrg prev= 1472e6f085baSmrg continue 1473e6f085baSmrg ;; 1474e6f085baSmrg *) 1475e6f085baSmrg eval "$prev=\"\$arg\"" 1476e6f085baSmrg prev= 1477e6f085baSmrg continue 1478e6f085baSmrg ;; 1479e6f085baSmrg esac 1480e6f085baSmrg fi # test -n "$prev" 148195b296d0Smrg 1482e6f085baSmrg prevarg="$arg" 148395b296d0Smrg 1484e6f085baSmrg case $arg in 1485e6f085baSmrg -all-static) 1486e6f085baSmrg if test -n "$link_static_flag"; then 1487e6f085baSmrg compile_command="$compile_command $link_static_flag" 1488e6f085baSmrg finalize_command="$finalize_command $link_static_flag" 1489e6f085baSmrg fi 1490e6f085baSmrg continue 1491e6f085baSmrg ;; 149295b296d0Smrg 1493e6f085baSmrg -allow-undefined) 1494e6f085baSmrg # FIXME: remove this flag sometime in the future. 1495e6f085baSmrg $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 1496e6f085baSmrg continue 1497e6f085baSmrg ;; 149895b296d0Smrg 1499e6f085baSmrg -avoid-version) 1500e6f085baSmrg avoid_version=yes 1501e6f085baSmrg continue 1502e6f085baSmrg ;; 150395b296d0Smrg 1504e6f085baSmrg -dlopen) 1505e6f085baSmrg prev=dlfiles 1506e6f085baSmrg continue 1507e6f085baSmrg ;; 150895b296d0Smrg 1509e6f085baSmrg -dlpreopen) 1510e6f085baSmrg prev=dlprefiles 1511e6f085baSmrg continue 1512e6f085baSmrg ;; 151395b296d0Smrg 1514e6f085baSmrg -export-dynamic) 1515e6f085baSmrg export_dynamic=yes 1516e6f085baSmrg continue 1517e6f085baSmrg ;; 151895b296d0Smrg 1519e6f085baSmrg -export-symbols | -export-symbols-regex) 1520e6f085baSmrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 1521e6f085baSmrg $echo "$modename: more than one -exported-symbols argument is not allowed" 1522e6f085baSmrg exit $EXIT_FAILURE 1523e6f085baSmrg fi 1524e6f085baSmrg if test "X$arg" = "X-export-symbols"; then 1525e6f085baSmrg prev=expsyms 1526e6f085baSmrg else 1527e6f085baSmrg prev=expsyms_regex 1528e6f085baSmrg fi 1529e6f085baSmrg continue 1530e6f085baSmrg ;; 153195b296d0Smrg 1532e6f085baSmrg -framework|-arch|-isysroot) 1533e6f085baSmrg case " $CC " in 1534e6f085baSmrg *" ${arg} ${1} "* | *" ${arg} ${1} "*) 1535e6f085baSmrg prev=darwin_framework_skip ;; 1536e6f085baSmrg *) compiler_flags="$compiler_flags $arg" 1537e6f085baSmrg prev=darwin_framework ;; 1538e6f085baSmrg esac 1539e6f085baSmrg compile_command="$compile_command $arg" 1540e6f085baSmrg finalize_command="$finalize_command $arg" 1541e6f085baSmrg continue 1542e6f085baSmrg ;; 154395b296d0Smrg 1544e6f085baSmrg -inst-prefix-dir) 1545e6f085baSmrg prev=inst_prefix 1546e6f085baSmrg continue 1547e6f085baSmrg ;; 154895b296d0Smrg 1549e6f085baSmrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 1550e6f085baSmrg # so, if we see these flags be careful not to treat them like -L 1551e6f085baSmrg -L[A-Z][A-Z]*:*) 1552e6f085baSmrg case $with_gcc/$host in 1553e6f085baSmrg no/*-*-irix* | /*-*-irix*) 1554e6f085baSmrg compile_command="$compile_command $arg" 1555e6f085baSmrg finalize_command="$finalize_command $arg" 1556e6f085baSmrg ;; 1557e6f085baSmrg esac 1558e6f085baSmrg continue 1559e6f085baSmrg ;; 156095b296d0Smrg 1561e6f085baSmrg -L*) 1562e6f085baSmrg dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` 1563e6f085baSmrg # We need an absolute path. 1564e6f085baSmrg case $dir in 1565e6f085baSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 1566e6f085baSmrg *) 1567e6f085baSmrg absdir=`cd "$dir" && pwd` 1568e6f085baSmrg if test -z "$absdir"; then 1569e6f085baSmrg $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 1570e6f085baSmrg absdir="$dir" 1571e6f085baSmrg notinst_path="$notinst_path $dir" 1572e6f085baSmrg fi 1573e6f085baSmrg dir="$absdir" 1574e6f085baSmrg ;; 1575e6f085baSmrg esac 1576e6f085baSmrg case "$deplibs " in 1577e6f085baSmrg *" -L$dir "*) ;; 1578e6f085baSmrg *) 1579e6f085baSmrg deplibs="$deplibs -L$dir" 1580e6f085baSmrg lib_search_path="$lib_search_path $dir" 1581e6f085baSmrg ;; 1582e6f085baSmrg esac 1583e6f085baSmrg case $host in 1584e6f085baSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) 1585e6f085baSmrg testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` 1586e6f085baSmrg case :$dllsearchpath: in 1587e6f085baSmrg *":$dir:"*) ;; 1588e6f085baSmrg *) dllsearchpath="$dllsearchpath:$dir";; 1589e6f085baSmrg esac 1590e6f085baSmrg case :$dllsearchpath: in 1591e6f085baSmrg *":$testbindir:"*) ;; 1592e6f085baSmrg *) dllsearchpath="$dllsearchpath:$testbindir";; 1593e6f085baSmrg esac 1594e6f085baSmrg ;; 1595e6f085baSmrg esac 1596e6f085baSmrg continue 1597e6f085baSmrg ;; 159895b296d0Smrg 1599e6f085baSmrg -l*) 1600e6f085baSmrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 1601e6f085baSmrg case $host in 1602e6f085baSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) 1603e6f085baSmrg # These systems don't actually have a C or math library (as such) 1604e6f085baSmrg continue 1605e6f085baSmrg ;; 1606e6f085baSmrg *-*-os2*) 1607e6f085baSmrg # These systems don't actually have a C library (as such) 1608e6f085baSmrg test "X$arg" = "X-lc" && continue 1609e6f085baSmrg ;; 1610e6f085baSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 1611e6f085baSmrg # Do not include libc due to us having libc/libc_r. 1612e6f085baSmrg test "X$arg" = "X-lc" && continue 1613e6f085baSmrg ;; 1614e6f085baSmrg *-*-rhapsody* | *-*-darwin1.[012]) 1615e6f085baSmrg # Rhapsody C and math libraries are in the System framework 1616e6f085baSmrg deplibs="$deplibs -framework System" 1617e6f085baSmrg continue 1618e6f085baSmrg ;; 1619e6f085baSmrg *-*-sco3.2v5* | *-*-sco5v6*) 1620e6f085baSmrg # Causes problems with __ctype 1621e6f085baSmrg test "X$arg" = "X-lc" && continue 1622e6f085baSmrg ;; 1623e6f085baSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 1624e6f085baSmrg # Compiler inserts libc in the correct place for threads to work 1625e6f085baSmrg test "X$arg" = "X-lc" && continue 1626e6f085baSmrg ;; 1627e6f085baSmrg esac 1628e6f085baSmrg elif test "X$arg" = "X-lc_r"; then 1629e6f085baSmrg case $host in 1630e6f085baSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 1631e6f085baSmrg # Do not include libc_r directly, use -pthread flag. 1632e6f085baSmrg continue 1633e6f085baSmrg ;; 1634e6f085baSmrg esac 163539713583Smrg fi 1636e6f085baSmrg deplibs="$deplibs $arg" 1637e6f085baSmrg continue 1638e6f085baSmrg ;; 163995b296d0Smrg 1640e6f085baSmrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 1641e6f085baSmrg # classes, name mangling, and exception handling. 1642e6f085baSmrg -model) 1643e6f085baSmrg compile_command="$compile_command $arg" 1644e6f085baSmrg compiler_flags="$compiler_flags $arg" 1645e6f085baSmrg finalize_command="$finalize_command $arg" 1646e6f085baSmrg prev=xcompiler 1647e6f085baSmrg continue 164895b296d0Smrg ;; 164995b296d0Smrg 1650e6f085baSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 1651e6f085baSmrg compiler_flags="$compiler_flags $arg" 1652e6f085baSmrg compile_command="$compile_command $arg" 1653e6f085baSmrg finalize_command="$finalize_command $arg" 1654e6f085baSmrg continue 165595b296d0Smrg ;; 165695b296d0Smrg 1657e6f085baSmrg -multi_module) 1658e6f085baSmrg single_module="${wl}-multi_module" 165995b296d0Smrg continue 166095b296d0Smrg ;; 166195b296d0Smrg 1662e6f085baSmrg -module) 1663e6f085baSmrg module=yes 1664e6f085baSmrg continue 1665e6f085baSmrg ;; 166695b296d0Smrg 1667e6f085baSmrg # -64, -mips[0-9] enable 64-bit mode on the SGI compiler 1668e6f085baSmrg # -r[0-9][0-9]* specifies the processor on the SGI compiler 1669e6f085baSmrg # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler 1670e6f085baSmrg # +DA*, +DD* enable 64-bit mode on the HP compiler 1671e6f085baSmrg # -q* pass through compiler args for the IBM compiler 1672e6f085baSmrg # -m* pass through architecture-specific compiler args for GCC 1673e6f085baSmrg # -m*, -t[45]*, -txscale* pass through architecture-specific 1674e6f085baSmrg # compiler args for GCC 1675e6f085baSmrg # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC 1676e6f085baSmrg # -F/path gives path to uninstalled frameworks, gcc on darwin 1677e6f085baSmrg # @file GCC response files 1678e6f085baSmrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 1679e6f085baSmrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) 168095b296d0Smrg 1681e6f085baSmrg # Unknown arguments in both finalize_command and compile_command need 1682e6f085baSmrg # to be aesthetically quoted because they are evaled later. 1683e6f085baSmrg arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` 1684e6f085baSmrg case $arg in 1685e6f085baSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1686e6f085baSmrg arg="\"$arg\"" 1687e6f085baSmrg ;; 1688e6f085baSmrg esac 1689e6f085baSmrg compile_command="$compile_command $arg" 1690e6f085baSmrg finalize_command="$finalize_command $arg" 1691e6f085baSmrg compiler_flags="$compiler_flags $arg" 1692e6f085baSmrg continue 1693e6f085baSmrg ;; 169495b296d0Smrg 1695e6f085baSmrg -shrext) 1696e6f085baSmrg prev=shrext 1697e6f085baSmrg continue 169839713583Smrg ;; 169995b296d0Smrg 1700e6f085baSmrg -no-fast-install) 1701e6f085baSmrg fast_install=no 1702e6f085baSmrg continue 1703e6f085baSmrg ;; 170495b296d0Smrg 1705e6f085baSmrg -no-install) 1706e6f085baSmrg case $host in 1707e6f085baSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*) 1708e6f085baSmrg # The PATH hackery in wrapper scripts is required on Windows 1709e6f085baSmrg # and Darwin in order for the loader to find any dlls it needs. 1710e6f085baSmrg $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 1711e6f085baSmrg $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 1712e6f085baSmrg fast_install=no 1713e6f085baSmrg ;; 1714e6f085baSmrg *) no_install=yes ;; 1715e6f085baSmrg esac 1716e6f085baSmrg continue 1717e6f085baSmrg ;; 171839713583Smrg 1719e6f085baSmrg -no-undefined) 1720e6f085baSmrg allow_undefined=no 1721e6f085baSmrg continue 1722e6f085baSmrg ;; 172339713583Smrg 1724e6f085baSmrg -objectlist) 1725e6f085baSmrg prev=objectlist 1726e6f085baSmrg continue 172739713583Smrg ;; 172839713583Smrg 1729e6f085baSmrg -o) prev=output ;; 173039713583Smrg 1731e6f085baSmrg -precious-files-regex) 1732e6f085baSmrg prev=precious_regex 1733e6f085baSmrg continue 1734e6f085baSmrg ;; 173539713583Smrg 1736e6f085baSmrg -release) 1737e6f085baSmrg prev=release 1738e6f085baSmrg continue 1739e6f085baSmrg ;; 174039713583Smrg 1741e6f085baSmrg -rpath) 1742e6f085baSmrg prev=rpath 1743e6f085baSmrg continue 1744e6f085baSmrg ;; 174539713583Smrg 1746e6f085baSmrg -R) 1747e6f085baSmrg prev=xrpath 174839713583Smrg continue 1749e6f085baSmrg ;; 175039713583Smrg 1751e6f085baSmrg -R*) 1752e6f085baSmrg dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` 1753e6f085baSmrg # We need an absolute path. 1754e6f085baSmrg case $dir in 1755e6f085baSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 1756e6f085baSmrg *) 1757e6f085baSmrg $echo "$modename: only absolute run-paths are allowed" 1>&2 1758e6f085baSmrg exit $EXIT_FAILURE 1759e6f085baSmrg ;; 1760e6f085baSmrg esac 1761e6f085baSmrg case "$xrpath " in 1762e6f085baSmrg *" $dir "*) ;; 1763e6f085baSmrg *) xrpath="$xrpath $dir" ;; 176439713583Smrg esac 1765e6f085baSmrg continue 176639713583Smrg ;; 1767e6f085baSmrg 1768e6f085baSmrg -static | -static-libtool-libs) 1769e6f085baSmrg # The effects of -static are defined in a previous loop. 1770e6f085baSmrg # We used to do the same as -all-static on platforms that 1771e6f085baSmrg # didn't have a PIC flag, but the assumption that the effects 1772e6f085baSmrg # would be equivalent was wrong. It would break on at least 1773e6f085baSmrg # Digital Unix and AIX. 1774e6f085baSmrg continue 177539713583Smrg ;; 1776e6f085baSmrg 1777e6f085baSmrg -thread-safe) 1778e6f085baSmrg thread_safe=yes 177939713583Smrg continue 178039713583Smrg ;; 1781e6f085baSmrg 1782e6f085baSmrg -version-info) 1783e6f085baSmrg prev=vinfo 1784e6f085baSmrg continue 178539713583Smrg ;; 1786e6f085baSmrg -version-number) 1787e6f085baSmrg prev=vinfo 1788e6f085baSmrg vinfo_number=yes 1789e6f085baSmrg continue 179095b296d0Smrg ;; 179195b296d0Smrg 1792e6f085baSmrg -Wc,*) 1793e6f085baSmrg args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` 1794e6f085baSmrg arg= 1795e6f085baSmrg save_ifs="$IFS"; IFS=',' 1796e6f085baSmrg for flag in $args; do 1797e6f085baSmrg IFS="$save_ifs" 1798e6f085baSmrg case $flag in 1799e6f085baSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1800e6f085baSmrg flag="\"$flag\"" 1801e6f085baSmrg ;; 1802e6f085baSmrg esac 1803e6f085baSmrg arg="$arg $wl$flag" 1804e6f085baSmrg compiler_flags="$compiler_flags $flag" 1805e6f085baSmrg done 1806e6f085baSmrg IFS="$save_ifs" 1807e6f085baSmrg arg=`$echo "X$arg" | $Xsed -e "s/^ //"` 1808e6f085baSmrg ;; 180995b296d0Smrg 1810e6f085baSmrg -Wl,*) 1811e6f085baSmrg args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` 1812e6f085baSmrg arg= 1813e6f085baSmrg save_ifs="$IFS"; IFS=',' 1814e6f085baSmrg for flag in $args; do 1815e6f085baSmrg IFS="$save_ifs" 1816e6f085baSmrg case $flag in 1817e6f085baSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1818e6f085baSmrg flag="\"$flag\"" 1819e6f085baSmrg ;; 1820e6f085baSmrg esac 1821e6f085baSmrg arg="$arg $wl$flag" 1822e6f085baSmrg compiler_flags="$compiler_flags $wl$flag" 1823e6f085baSmrg linker_flags="$linker_flags $flag" 1824e6f085baSmrg done 1825e6f085baSmrg IFS="$save_ifs" 1826e6f085baSmrg arg=`$echo "X$arg" | $Xsed -e "s/^ //"` 1827e6f085baSmrg ;; 182895b296d0Smrg 1829e6f085baSmrg -Xcompiler) 1830e6f085baSmrg prev=xcompiler 1831e6f085baSmrg continue 1832e6f085baSmrg ;; 183395b296d0Smrg 1834e6f085baSmrg -Xlinker) 1835e6f085baSmrg prev=xlinker 1836e6f085baSmrg continue 1837e6f085baSmrg ;; 183895b296d0Smrg 1839e6f085baSmrg -XCClinker) 1840e6f085baSmrg prev=xcclinker 1841e6f085baSmrg continue 1842e6f085baSmrg ;; 184395b296d0Smrg 1844e6f085baSmrg # Some other compiler flag. 1845e6f085baSmrg -* | +*) 1846e6f085baSmrg # Unknown arguments in both finalize_command and compile_command need 1847e6f085baSmrg # to be aesthetically quoted because they are evaled later. 1848e6f085baSmrg arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` 1849e6f085baSmrg case $arg in 1850e6f085baSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1851e6f085baSmrg arg="\"$arg\"" 185239713583Smrg ;; 185339713583Smrg esac 1854e6f085baSmrg ;; 185595b296d0Smrg 1856e6f085baSmrg *.$objext) 1857e6f085baSmrg # A standard object. 1858e6f085baSmrg objs="$objs $arg" 185939713583Smrg ;; 186039713583Smrg 1861e6f085baSmrg *.lo) 1862e6f085baSmrg # A libtool-controlled object. 186339713583Smrg 1864e6f085baSmrg # Check to see that this really is a libtool object. 1865e6f085baSmrg if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then 1866e6f085baSmrg pic_object= 1867e6f085baSmrg non_pic_object= 186839713583Smrg 1869e6f085baSmrg # Read the .lo file 1870e6f085baSmrg # If there is no directory component, then add one. 1871e6f085baSmrg case $arg in 1872e6f085baSmrg */* | *\\*) . $arg ;; 1873e6f085baSmrg *) . ./$arg ;; 187439713583Smrg esac 187539713583Smrg 1876e6f085baSmrg if test -z "$pic_object" || \ 1877e6f085baSmrg test -z "$non_pic_object" || 1878e6f085baSmrg test "$pic_object" = none && \ 1879e6f085baSmrg test "$non_pic_object" = none; then 1880e6f085baSmrg $echo "$modename: cannot find name of object for \`$arg'" 1>&2 1881e6f085baSmrg exit $EXIT_FAILURE 1882e6f085baSmrg fi 188339713583Smrg 1884e6f085baSmrg # Extract subdirectory from the argument. 1885e6f085baSmrg xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` 1886e6f085baSmrg if test "X$xdir" = "X$arg"; then 1887e6f085baSmrg xdir= 1888e6f085baSmrg else 1889e6f085baSmrg xdir="$xdir/" 189039713583Smrg fi 189139713583Smrg 1892e6f085baSmrg if test "$pic_object" != none; then 1893e6f085baSmrg # Prepend the subdirectory the object is found in. 1894e6f085baSmrg pic_object="$xdir$pic_object" 189539713583Smrg 1896e6f085baSmrg if test "$prev" = dlfiles; then 1897e6f085baSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 1898e6f085baSmrg dlfiles="$dlfiles $pic_object" 1899e6f085baSmrg prev= 1900e6f085baSmrg continue 1901e6f085baSmrg else 1902e6f085baSmrg # If libtool objects are unsupported, then we need to preload. 1903e6f085baSmrg prev=dlprefiles 1904e6f085baSmrg fi 1905e6f085baSmrg fi 190639713583Smrg 1907e6f085baSmrg # CHECK ME: I think I busted this. -Ossama 1908e6f085baSmrg if test "$prev" = dlprefiles; then 1909e6f085baSmrg # Preload the old-style object. 1910e6f085baSmrg dlprefiles="$dlprefiles $pic_object" 1911e6f085baSmrg prev= 1912e6f085baSmrg fi 191339713583Smrg 1914e6f085baSmrg # A PIC object. 1915e6f085baSmrg libobjs="$libobjs $pic_object" 1916e6f085baSmrg arg="$pic_object" 191795b296d0Smrg fi 191839713583Smrg 1919e6f085baSmrg # Non-PIC object. 1920e6f085baSmrg if test "$non_pic_object" != none; then 1921e6f085baSmrg # Prepend the subdirectory the object is found in. 1922e6f085baSmrg non_pic_object="$xdir$non_pic_object" 1923e6f085baSmrg 1924e6f085baSmrg # A standard non-PIC object 1925e6f085baSmrg non_pic_objects="$non_pic_objects $non_pic_object" 1926e6f085baSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 1927e6f085baSmrg arg="$non_pic_object" 1928e6f085baSmrg fi 1929e6f085baSmrg else 1930e6f085baSmrg # If the PIC object exists, use it instead. 1931e6f085baSmrg # $xdir was prepended to $pic_object above. 1932e6f085baSmrg non_pic_object="$pic_object" 1933e6f085baSmrg non_pic_objects="$non_pic_objects $non_pic_object" 193495b296d0Smrg fi 1935e6f085baSmrg else 1936e6f085baSmrg # Only an error if not doing a dry-run. 1937e6f085baSmrg if test -z "$run"; then 1938e6f085baSmrg $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 1939e6f085baSmrg exit $EXIT_FAILURE 1940e6f085baSmrg else 1941e6f085baSmrg # Dry-run case. 194295b296d0Smrg 1943e6f085baSmrg # Extract subdirectory from the argument. 1944e6f085baSmrg xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` 1945e6f085baSmrg if test "X$xdir" = "X$arg"; then 1946e6f085baSmrg xdir= 1947e6f085baSmrg else 1948e6f085baSmrg xdir="$xdir/" 1949e6f085baSmrg fi 195095b296d0Smrg 1951e6f085baSmrg pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` 1952e6f085baSmrg non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` 1953e6f085baSmrg libobjs="$libobjs $pic_object" 1954e6f085baSmrg non_pic_objects="$non_pic_objects $non_pic_object" 1955e6f085baSmrg fi 1956e6f085baSmrg fi 1957e6f085baSmrg ;; 195895b296d0Smrg 1959e6f085baSmrg *.$libext) 1960e6f085baSmrg # An archive. 1961e6f085baSmrg deplibs="$deplibs $arg" 1962e6f085baSmrg old_deplibs="$old_deplibs $arg" 1963e6f085baSmrg continue 196439713583Smrg ;; 196595b296d0Smrg 1966e6f085baSmrg *.la) 1967e6f085baSmrg # A libtool-controlled library. 196895b296d0Smrg 1969e6f085baSmrg if test "$prev" = dlfiles; then 1970e6f085baSmrg # This library was specified with -dlopen. 1971e6f085baSmrg dlfiles="$dlfiles $arg" 1972e6f085baSmrg prev= 1973e6f085baSmrg elif test "$prev" = dlprefiles; then 1974e6f085baSmrg # The library was specified with -dlpreopen. 1975e6f085baSmrg dlprefiles="$dlprefiles $arg" 1976e6f085baSmrg prev= 197739713583Smrg else 1978e6f085baSmrg deplibs="$deplibs $arg" 197995b296d0Smrg fi 1980e6f085baSmrg continue 1981e6f085baSmrg ;; 198295b296d0Smrg 1983e6f085baSmrg # Some other compiler argument. 1984e6f085baSmrg *) 1985e6f085baSmrg # Unknown arguments in both finalize_command and compile_command need 1986e6f085baSmrg # to be aesthetically quoted because they are evaled later. 1987e6f085baSmrg arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` 1988e6f085baSmrg case $arg in 1989e6f085baSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 1990e6f085baSmrg arg="\"$arg\"" 199139713583Smrg ;; 199239713583Smrg esac 199339713583Smrg ;; 1994e6f085baSmrg esac # arg 199595b296d0Smrg 1996e6f085baSmrg # Now actually substitute the argument into the commands. 1997e6f085baSmrg if test -n "$arg"; then 1998e6f085baSmrg compile_command="$compile_command $arg" 1999e6f085baSmrg finalize_command="$finalize_command $arg" 2000e6f085baSmrg fi 2001e6f085baSmrg done # argument parsing loop 200295b296d0Smrg 2003e6f085baSmrg if test -n "$prev"; then 2004e6f085baSmrg $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 2005e6f085baSmrg $echo "$help" 1>&2 2006e6f085baSmrg exit $EXIT_FAILURE 2007e6f085baSmrg fi 200839713583Smrg 2009e6f085baSmrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 2010e6f085baSmrg eval arg=\"$export_dynamic_flag_spec\" 2011e6f085baSmrg compile_command="$compile_command $arg" 2012e6f085baSmrg finalize_command="$finalize_command $arg" 2013e6f085baSmrg fi 201439713583Smrg 2015e6f085baSmrg oldlibs= 2016e6f085baSmrg # calculate the name of the file, without its directory 2017e6f085baSmrg outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` 2018e6f085baSmrg libobjs_save="$libobjs" 201939713583Smrg 2020e6f085baSmrg if test -n "$shlibpath_var"; then 2021e6f085baSmrg # get the directories listed in $shlibpath_var 2022e6f085baSmrg eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` 2023e6f085baSmrg else 2024e6f085baSmrg shlib_search_path= 2025e6f085baSmrg fi 2026e6f085baSmrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 2027e6f085baSmrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 202839713583Smrg 2029e6f085baSmrg output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` 2030e6f085baSmrg if test "X$output_objdir" = "X$output"; then 2031e6f085baSmrg output_objdir="$objdir" 203239713583Smrg else 2033e6f085baSmrg output_objdir="$output_objdir/$objdir" 203439713583Smrg fi 2035e6f085baSmrg # Create the object directory. 2036e6f085baSmrg if test ! -d "$output_objdir"; then 2037e6f085baSmrg $show "$mkdir $output_objdir" 2038e6f085baSmrg $run $mkdir $output_objdir 2039e6f085baSmrg exit_status=$? 2040e6f085baSmrg if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then 2041e6f085baSmrg exit $exit_status 204239713583Smrg fi 204339713583Smrg fi 204439713583Smrg 2045e6f085baSmrg # Determine the type of output 2046e6f085baSmrg case $output in 2047e6f085baSmrg "") 2048e6f085baSmrg $echo "$modename: you must specify an output file" 1>&2 2049e6f085baSmrg $echo "$help" 1>&2 2050e6f085baSmrg exit $EXIT_FAILURE 2051e6f085baSmrg ;; 2052e6f085baSmrg *.$libext) linkmode=oldlib ;; 2053e6f085baSmrg *.lo | *.$objext) linkmode=obj ;; 2054e6f085baSmrg *.la) linkmode=lib ;; 2055e6f085baSmrg *) linkmode=prog ;; # Anything else should be a program. 2056e6f085baSmrg esac 205795b296d0Smrg 2058e6f085baSmrg case $host in 2059e6f085baSmrg *cygwin* | *mingw* | *pw32*) 2060e6f085baSmrg # don't eliminate duplications in $postdeps and $predeps 2061e6f085baSmrg duplicate_compiler_generated_deps=yes 2062e6f085baSmrg ;; 2063e6f085baSmrg *) 2064e6f085baSmrg duplicate_compiler_generated_deps=$duplicate_deps 2065e6f085baSmrg ;; 2066e6f085baSmrg esac 2067e6f085baSmrg specialdeplibs= 206895b296d0Smrg 2069e6f085baSmrg libs= 2070e6f085baSmrg # Find all interdependent deplibs by searching for libraries 2071e6f085baSmrg # that are linked more than once (e.g. -la -lb -la) 2072e6f085baSmrg for deplib in $deplibs; do 2073e6f085baSmrg if test "X$duplicate_deps" = "Xyes" ; then 2074e6f085baSmrg case "$libs " in 2075e6f085baSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 2076e6f085baSmrg esac 2077e6f085baSmrg fi 2078e6f085baSmrg libs="$libs $deplib" 2079e6f085baSmrg done 208095b296d0Smrg 2081e6f085baSmrg if test "$linkmode" = lib; then 2082e6f085baSmrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 208395b296d0Smrg 2084e6f085baSmrg # Compute libraries that are listed more than once in $predeps 2085e6f085baSmrg # $postdeps and mark them as special (i.e., whose duplicates are 2086e6f085baSmrg # not to be eliminated). 2087e6f085baSmrg pre_post_deps= 2088e6f085baSmrg if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then 2089e6f085baSmrg for pre_post_dep in $predeps $postdeps; do 2090e6f085baSmrg case "$pre_post_deps " in 2091e6f085baSmrg *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; 209239713583Smrg esac 2093e6f085baSmrg pre_post_deps="$pre_post_deps $pre_post_dep" 2094e6f085baSmrg done 2095e6f085baSmrg fi 2096e6f085baSmrg pre_post_deps= 2097e6f085baSmrg fi 209839713583Smrg 2099e6f085baSmrg deplibs= 2100e6f085baSmrg newdependency_libs= 2101e6f085baSmrg newlib_search_path= 2102e6f085baSmrg need_relink=no # whether we're linking any uninstalled libtool libraries 2103e6f085baSmrg notinst_deplibs= # not-installed libtool libraries 2104e6f085baSmrg case $linkmode in 2105e6f085baSmrg lib) 2106e6f085baSmrg passes="conv link" 2107e6f085baSmrg for file in $dlfiles $dlprefiles; do 2108e6f085baSmrg case $file in 2109e6f085baSmrg *.la) ;; 211039713583Smrg *) 2111e6f085baSmrg $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 2112e6f085baSmrg exit $EXIT_FAILURE 211339713583Smrg ;; 211439713583Smrg esac 211539713583Smrg done 211639713583Smrg ;; 2117e6f085baSmrg prog) 2118e6f085baSmrg compile_deplibs= 2119e6f085baSmrg finalize_deplibs= 2120e6f085baSmrg alldeplibs=no 2121e6f085baSmrg newdlfiles= 2122e6f085baSmrg newdlprefiles= 2123e6f085baSmrg passes="conv scan dlopen dlpreopen link" 2124e6f085baSmrg ;; 2125e6f085baSmrg *) passes="conv" 212639713583Smrg ;; 212739713583Smrg esac 2128e6f085baSmrg for pass in $passes; do 2129e6f085baSmrg if test "$linkmode,$pass" = "lib,link" || 2130e6f085baSmrg test "$linkmode,$pass" = "prog,scan"; then 2131e6f085baSmrg libs="$deplibs" 2132e6f085baSmrg deplibs= 2133e6f085baSmrg fi 2134e6f085baSmrg if test "$linkmode" = prog; then 2135e6f085baSmrg case $pass in 2136e6f085baSmrg dlopen) libs="$dlfiles" ;; 2137e6f085baSmrg dlpreopen) libs="$dlprefiles" ;; 2138e6f085baSmrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 2139e6f085baSmrg esac 2140e6f085baSmrg fi 2141e6f085baSmrg if test "$pass" = dlopen; then 2142e6f085baSmrg # Collect dlpreopened libraries 2143e6f085baSmrg save_deplibs="$deplibs" 2144e6f085baSmrg deplibs= 2145e6f085baSmrg fi 2146e6f085baSmrg for deplib in $libs; do 2147e6f085baSmrg lib= 2148e6f085baSmrg found=no 2149e6f085baSmrg case $deplib in 2150e6f085baSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 2151e6f085baSmrg if test "$linkmode,$pass" = "prog,link"; then 2152e6f085baSmrg compile_deplibs="$deplib $compile_deplibs" 2153e6f085baSmrg finalize_deplibs="$deplib $finalize_deplibs" 2154e6f085baSmrg else 2155e6f085baSmrg compiler_flags="$compiler_flags $deplib" 2156e6f085baSmrg fi 2157e6f085baSmrg continue 2158e6f085baSmrg ;; 2159e6f085baSmrg -l*) 2160e6f085baSmrg if test "$linkmode" != lib && test "$linkmode" != prog; then 2161e6f085baSmrg $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 2162e6f085baSmrg continue 2163e6f085baSmrg fi 2164e6f085baSmrg name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` 2165e6f085baSmrg if test "$linkmode" = lib; then 2166e6f085baSmrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 2167e6f085baSmrg else 2168e6f085baSmrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 2169e6f085baSmrg fi 2170e6f085baSmrg for searchdir in $searchdirs; do 2171e6f085baSmrg for search_ext in .la $std_shrext .so .a; do 2172e6f085baSmrg # Search the libtool library 2173e6f085baSmrg lib="$searchdir/lib${name}${search_ext}" 2174e6f085baSmrg if test -f "$lib"; then 2175e6f085baSmrg if test "$search_ext" = ".la"; then 2176e6f085baSmrg found=yes 2177e6f085baSmrg else 2178e6f085baSmrg found=no 2179e6f085baSmrg fi 2180e6f085baSmrg break 2 2181e6f085baSmrg fi 2182e6f085baSmrg done 2183e6f085baSmrg done 2184e6f085baSmrg if test "$found" != yes; then 2185e6f085baSmrg # deplib doesn't seem to be a libtool library 2186e6f085baSmrg if test "$linkmode,$pass" = "prog,link"; then 2187e6f085baSmrg compile_deplibs="$deplib $compile_deplibs" 2188e6f085baSmrg finalize_deplibs="$deplib $finalize_deplibs" 2189e6f085baSmrg else 2190e6f085baSmrg deplibs="$deplib $deplibs" 2191e6f085baSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 2192e6f085baSmrg fi 2193e6f085baSmrg continue 2194e6f085baSmrg else # deplib is a libtool library 2195e6f085baSmrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 2196e6f085baSmrg # We need to do some special things here, and not later. 2197e6f085baSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 2198e6f085baSmrg case " $predeps $postdeps " in 2199e6f085baSmrg *" $deplib "*) 2200e6f085baSmrg if (${SED} -e '2q' $lib | 2201e6f085baSmrg grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then 2202e6f085baSmrg library_names= 2203e6f085baSmrg old_library= 2204e6f085baSmrg case $lib in 2205e6f085baSmrg */* | *\\*) . $lib ;; 2206e6f085baSmrg *) . ./$lib ;; 2207e6f085baSmrg esac 2208e6f085baSmrg for l in $old_library $library_names; do 2209e6f085baSmrg ll="$l" 2210e6f085baSmrg done 2211e6f085baSmrg if test "X$ll" = "X$old_library" ; then # only static version available 2212e6f085baSmrg found=no 2213e6f085baSmrg ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` 2214e6f085baSmrg test "X$ladir" = "X$lib" && ladir="." 2215e6f085baSmrg lib=$ladir/$old_library 2216e6f085baSmrg if test "$linkmode,$pass" = "prog,link"; then 2217e6f085baSmrg compile_deplibs="$deplib $compile_deplibs" 2218e6f085baSmrg finalize_deplibs="$deplib $finalize_deplibs" 2219e6f085baSmrg else 2220e6f085baSmrg deplibs="$deplib $deplibs" 2221e6f085baSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 2222e6f085baSmrg fi 2223e6f085baSmrg continue 2224e6f085baSmrg fi 2225e6f085baSmrg fi 2226e6f085baSmrg ;; 2227e6f085baSmrg *) ;; 2228e6f085baSmrg esac 2229e6f085baSmrg fi 2230e6f085baSmrg fi 2231e6f085baSmrg ;; # -l 2232e6f085baSmrg -L*) 2233e6f085baSmrg case $linkmode in 2234e6f085baSmrg lib) 2235e6f085baSmrg deplibs="$deplib $deplibs" 2236e6f085baSmrg test "$pass" = conv && continue 2237e6f085baSmrg newdependency_libs="$deplib $newdependency_libs" 2238e6f085baSmrg newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` 2239e6f085baSmrg ;; 2240e6f085baSmrg prog) 2241e6f085baSmrg if test "$pass" = conv; then 2242e6f085baSmrg deplibs="$deplib $deplibs" 2243e6f085baSmrg continue 2244e6f085baSmrg fi 2245e6f085baSmrg if test "$pass" = scan; then 2246e6f085baSmrg deplibs="$deplib $deplibs" 2247e6f085baSmrg else 2248e6f085baSmrg compile_deplibs="$deplib $compile_deplibs" 2249e6f085baSmrg finalize_deplibs="$deplib $finalize_deplibs" 2250e6f085baSmrg fi 2251e6f085baSmrg newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` 2252e6f085baSmrg ;; 2253e6f085baSmrg *) 2254e6f085baSmrg $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 2255e6f085baSmrg ;; 2256e6f085baSmrg esac # linkmode 2257e6f085baSmrg continue 2258e6f085baSmrg ;; # -L 2259e6f085baSmrg -R*) 2260e6f085baSmrg if test "$pass" = link; then 2261e6f085baSmrg dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` 2262e6f085baSmrg # Make sure the xrpath contains only unique directories. 2263e6f085baSmrg case "$xrpath " in 2264e6f085baSmrg *" $dir "*) ;; 2265e6f085baSmrg *) xrpath="$xrpath $dir" ;; 2266e6f085baSmrg esac 2267e6f085baSmrg fi 2268e6f085baSmrg deplibs="$deplib $deplibs" 2269e6f085baSmrg continue 2270e6f085baSmrg ;; 2271e6f085baSmrg *.la) lib="$deplib" ;; 2272e6f085baSmrg *.$libext) 2273e6f085baSmrg if test "$pass" = conv; then 2274e6f085baSmrg deplibs="$deplib $deplibs" 2275e6f085baSmrg continue 2276e6f085baSmrg fi 2277e6f085baSmrg case $linkmode in 2278e6f085baSmrg lib) 2279e6f085baSmrg valid_a_lib=no 2280e6f085baSmrg case $deplibs_check_method in 2281e6f085baSmrg match_pattern*) 2282e6f085baSmrg set dummy $deplibs_check_method 2283e6f085baSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` 2284e6f085baSmrg if eval $echo \"$deplib\" 2>/dev/null \ 2285e6f085baSmrg | $SED 10q \ 2286e6f085baSmrg | $EGREP "$match_pattern_regex" > /dev/null; then 2287e6f085baSmrg valid_a_lib=yes 2288e6f085baSmrg fi 2289e6f085baSmrg ;; 2290e6f085baSmrg pass_all) 2291e6f085baSmrg valid_a_lib=yes 2292e6f085baSmrg ;; 2293e6f085baSmrg esac 2294e6f085baSmrg if test "$valid_a_lib" != yes; then 2295e6f085baSmrg $echo 2296e6f085baSmrg $echo "*** Warning: Trying to link with static lib archive $deplib." 2297e6f085baSmrg $echo "*** I have the capability to make that library automatically link in when" 2298e6f085baSmrg $echo "*** you link to this library. But I can only do this if you have a" 2299e6f085baSmrg $echo "*** shared version of the library, which you do not appear to have" 2300e6f085baSmrg $echo "*** because the file extensions .$libext of this argument makes me believe" 2301e6f085baSmrg $echo "*** that it is just a static archive that I should not used here." 2302e6f085baSmrg else 2303e6f085baSmrg $echo 2304e6f085baSmrg $echo "*** Warning: Linking the shared library $output against the" 2305e6f085baSmrg $echo "*** static library $deplib is not portable!" 2306e6f085baSmrg deplibs="$deplib $deplibs" 2307e6f085baSmrg fi 2308e6f085baSmrg continue 2309e6f085baSmrg ;; 2310e6f085baSmrg prog) 2311e6f085baSmrg if test "$pass" != link; then 2312e6f085baSmrg deplibs="$deplib $deplibs" 2313e6f085baSmrg else 2314e6f085baSmrg compile_deplibs="$deplib $compile_deplibs" 2315e6f085baSmrg finalize_deplibs="$deplib $finalize_deplibs" 2316e6f085baSmrg fi 2317e6f085baSmrg continue 2318e6f085baSmrg ;; 2319e6f085baSmrg esac # linkmode 2320e6f085baSmrg ;; # *.$libext 2321e6f085baSmrg *.lo | *.$objext) 2322e6f085baSmrg if test "$pass" = conv; then 2323e6f085baSmrg deplibs="$deplib $deplibs" 2324e6f085baSmrg elif test "$linkmode" = prog; then 2325e6f085baSmrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 2326e6f085baSmrg # If there is no dlopen support or we're linking statically, 2327e6f085baSmrg # we need to preload. 2328e6f085baSmrg newdlprefiles="$newdlprefiles $deplib" 2329e6f085baSmrg compile_deplibs="$deplib $compile_deplibs" 2330e6f085baSmrg finalize_deplibs="$deplib $finalize_deplibs" 2331e6f085baSmrg else 2332e6f085baSmrg newdlfiles="$newdlfiles $deplib" 2333e6f085baSmrg fi 2334e6f085baSmrg fi 2335e6f085baSmrg continue 2336e6f085baSmrg ;; 2337e6f085baSmrg %DEPLIBS%) 2338e6f085baSmrg alldeplibs=yes 2339e6f085baSmrg continue 2340e6f085baSmrg ;; 2341e6f085baSmrg esac # case $deplib 2342e6f085baSmrg if test "$found" = yes || test -f "$lib"; then : 2343e6f085baSmrg else 2344e6f085baSmrg $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 2345e6f085baSmrg exit $EXIT_FAILURE 2346e6f085baSmrg fi 234795b296d0Smrg 2348e6f085baSmrg # Check to see that this really is a libtool archive. 2349e6f085baSmrg if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : 2350e6f085baSmrg else 2351e6f085baSmrg $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 2352e6f085baSmrg exit $EXIT_FAILURE 2353e6f085baSmrg fi 235495b296d0Smrg 2355e6f085baSmrg ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` 2356e6f085baSmrg test "X$ladir" = "X$lib" && ladir="." 235795b296d0Smrg 2358e6f085baSmrg dlname= 2359e6f085baSmrg dlopen= 2360e6f085baSmrg dlpreopen= 2361e6f085baSmrg libdir= 2362e6f085baSmrg library_names= 2363e6f085baSmrg old_library= 2364e6f085baSmrg # If the library was installed with an old release of libtool, 2365e6f085baSmrg # it will not redefine variables installed, or shouldnotlink 2366e6f085baSmrg installed=yes 2367e6f085baSmrg shouldnotlink=no 2368e6f085baSmrg avoidtemprpath= 236995b296d0Smrg 237095b296d0Smrg 2371e6f085baSmrg # Read the .la file 2372e6f085baSmrg case $lib in 2373e6f085baSmrg */* | *\\*) . $lib ;; 2374e6f085baSmrg *) . ./$lib ;; 237539713583Smrg esac 237695b296d0Smrg 2377e6f085baSmrg if test "$linkmode,$pass" = "lib,link" || 2378e6f085baSmrg test "$linkmode,$pass" = "prog,scan" || 2379e6f085baSmrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 2380e6f085baSmrg test -n "$dlopen" && dlfiles="$dlfiles $dlopen" 2381e6f085baSmrg test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" 2382e6f085baSmrg fi 238395b296d0Smrg 2384e6f085baSmrg if test "$pass" = conv; then 2385e6f085baSmrg # Only check for convenience libraries 2386e6f085baSmrg deplibs="$lib $deplibs" 2387e6f085baSmrg if test -z "$libdir"; then 2388e6f085baSmrg if test -z "$old_library"; then 2389e6f085baSmrg $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 2390e6f085baSmrg exit $EXIT_FAILURE 2391e6f085baSmrg fi 2392e6f085baSmrg # It is a libtool convenience library, so add in its objects. 2393e6f085baSmrg convenience="$convenience $ladir/$objdir/$old_library" 2394e6f085baSmrg old_convenience="$old_convenience $ladir/$objdir/$old_library" 2395e6f085baSmrg tmp_libs= 2396e6f085baSmrg for deplib in $dependency_libs; do 2397e6f085baSmrg deplibs="$deplib $deplibs" 2398e6f085baSmrg if test "X$duplicate_deps" = "Xyes" ; then 2399e6f085baSmrg case "$tmp_libs " in 2400e6f085baSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 2401e6f085baSmrg esac 2402e6f085baSmrg fi 2403e6f085baSmrg tmp_libs="$tmp_libs $deplib" 2404e6f085baSmrg done 2405e6f085baSmrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 2406e6f085baSmrg $echo "$modename: \`$lib' is not a convenience library" 1>&2 2407e6f085baSmrg exit $EXIT_FAILURE 2408e6f085baSmrg fi 2409e6f085baSmrg continue 2410e6f085baSmrg fi # $pass = conv 241195b296d0Smrg 241295b296d0Smrg 2413e6f085baSmrg # Get the name of the library we link against. 2414e6f085baSmrg linklib= 2415e6f085baSmrg for l in $old_library $library_names; do 2416e6f085baSmrg linklib="$l" 2417e6f085baSmrg done 2418e6f085baSmrg if test -z "$linklib"; then 2419e6f085baSmrg $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 2420e6f085baSmrg exit $EXIT_FAILURE 242195b296d0Smrg fi 242295b296d0Smrg 2423e6f085baSmrg # This library was specified with -dlopen. 2424e6f085baSmrg if test "$pass" = dlopen; then 2425e6f085baSmrg if test -z "$libdir"; then 2426e6f085baSmrg $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 2427e6f085baSmrg exit $EXIT_FAILURE 2428e6f085baSmrg fi 2429e6f085baSmrg if test -z "$dlname" || 2430e6f085baSmrg test "$dlopen_support" != yes || 2431e6f085baSmrg test "$build_libtool_libs" = no; then 2432e6f085baSmrg # If there is no dlname, no dlopen support or we're linking 2433e6f085baSmrg # statically, we need to preload. We also need to preload any 2434e6f085baSmrg # dependent libraries so libltdl's deplib preloader doesn't 2435e6f085baSmrg # bomb out in the load deplibs phase. 2436e6f085baSmrg dlprefiles="$dlprefiles $lib $dependency_libs" 2437e6f085baSmrg else 2438e6f085baSmrg newdlfiles="$newdlfiles $lib" 2439e6f085baSmrg fi 2440e6f085baSmrg continue 2441e6f085baSmrg fi # $pass = dlopen 244295b296d0Smrg 2443e6f085baSmrg # We need an absolute path. 2444e6f085baSmrg case $ladir in 2445e6f085baSmrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 2446e6f085baSmrg *) 2447e6f085baSmrg abs_ladir=`cd "$ladir" && pwd` 2448e6f085baSmrg if test -z "$abs_ladir"; then 2449e6f085baSmrg $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 2450e6f085baSmrg $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 2451e6f085baSmrg abs_ladir="$ladir" 2452e6f085baSmrg fi 2453e6f085baSmrg ;; 2454e6f085baSmrg esac 2455e6f085baSmrg laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` 245695b296d0Smrg 2457e6f085baSmrg # Find the relevant object directory and library name. 2458e6f085baSmrg if test "X$installed" = Xyes; then 2459e6f085baSmrg if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 2460e6f085baSmrg $echo "$modename: warning: library \`$lib' was moved." 1>&2 2461e6f085baSmrg dir="$ladir" 2462e6f085baSmrg absdir="$abs_ladir" 2463e6f085baSmrg libdir="$abs_ladir" 2464e6f085baSmrg else 2465e6f085baSmrg dir="$libdir" 2466e6f085baSmrg absdir="$libdir" 2467e6f085baSmrg fi 2468e6f085baSmrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 2469e6f085baSmrg else 2470e6f085baSmrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 2471e6f085baSmrg dir="$ladir" 2472e6f085baSmrg absdir="$abs_ladir" 2473e6f085baSmrg # Remove this search path later 2474e6f085baSmrg notinst_path="$notinst_path $abs_ladir" 2475e6f085baSmrg else 2476e6f085baSmrg dir="$ladir/$objdir" 2477e6f085baSmrg absdir="$abs_ladir/$objdir" 2478e6f085baSmrg # Remove this search path later 2479e6f085baSmrg notinst_path="$notinst_path $abs_ladir" 2480e6f085baSmrg fi 2481e6f085baSmrg fi # $installed = yes 2482e6f085baSmrg name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` 248395b296d0Smrg 2484e6f085baSmrg # This library was specified with -dlpreopen. 2485e6f085baSmrg if test "$pass" = dlpreopen; then 2486e6f085baSmrg if test -z "$libdir"; then 2487e6f085baSmrg $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 2488e6f085baSmrg exit $EXIT_FAILURE 2489e6f085baSmrg fi 2490e6f085baSmrg # Prefer using a static library (so that no silly _DYNAMIC symbols 2491e6f085baSmrg # are required to link). 2492e6f085baSmrg if test -n "$old_library"; then 2493e6f085baSmrg newdlprefiles="$newdlprefiles $dir/$old_library" 2494e6f085baSmrg # Otherwise, use the dlname, so that lt_dlopen finds it. 2495e6f085baSmrg elif test -n "$dlname"; then 2496e6f085baSmrg newdlprefiles="$newdlprefiles $dir/$dlname" 2497e6f085baSmrg else 2498e6f085baSmrg newdlprefiles="$newdlprefiles $dir/$linklib" 2499e6f085baSmrg fi 2500e6f085baSmrg fi # $pass = dlpreopen 250195b296d0Smrg 2502e6f085baSmrg if test -z "$libdir"; then 2503e6f085baSmrg # Link the convenience library 2504e6f085baSmrg if test "$linkmode" = lib; then 2505e6f085baSmrg deplibs="$dir/$old_library $deplibs" 2506e6f085baSmrg elif test "$linkmode,$pass" = "prog,link"; then 2507e6f085baSmrg compile_deplibs="$dir/$old_library $compile_deplibs" 2508e6f085baSmrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 2509e6f085baSmrg else 2510e6f085baSmrg deplibs="$lib $deplibs" # used for prog,scan pass 2511e6f085baSmrg fi 2512e6f085baSmrg continue 2513e6f085baSmrg fi 251495b296d0Smrg 251595b296d0Smrg 2516e6f085baSmrg if test "$linkmode" = prog && test "$pass" != link; then 2517e6f085baSmrg newlib_search_path="$newlib_search_path $ladir" 2518e6f085baSmrg deplibs="$lib $deplibs" 251995b296d0Smrg 2520e6f085baSmrg linkalldeplibs=no 2521e6f085baSmrg if test "$link_all_deplibs" != no || test -z "$library_names" || 2522e6f085baSmrg test "$build_libtool_libs" = no; then 2523e6f085baSmrg linkalldeplibs=yes 2524e6f085baSmrg fi 252595b296d0Smrg 2526e6f085baSmrg tmp_libs= 2527e6f085baSmrg for deplib in $dependency_libs; do 2528e6f085baSmrg case $deplib in 2529e6f085baSmrg -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test 2530e6f085baSmrg esac 2531e6f085baSmrg # Need to link against all dependency_libs? 2532e6f085baSmrg if test "$linkalldeplibs" = yes; then 2533e6f085baSmrg deplibs="$deplib $deplibs" 2534e6f085baSmrg else 2535e6f085baSmrg # Need to hardcode shared library paths 2536e6f085baSmrg # or/and link against static libraries 2537e6f085baSmrg newdependency_libs="$deplib $newdependency_libs" 2538e6f085baSmrg fi 2539e6f085baSmrg if test "X$duplicate_deps" = "Xyes" ; then 2540e6f085baSmrg case "$tmp_libs " in 2541e6f085baSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 2542e6f085baSmrg esac 2543e6f085baSmrg fi 2544e6f085baSmrg tmp_libs="$tmp_libs $deplib" 2545e6f085baSmrg done # for deplib 2546e6f085baSmrg continue 2547e6f085baSmrg fi # $linkmode = prog... 254895b296d0Smrg 2549e6f085baSmrg if test "$linkmode,$pass" = "prog,link"; then 2550e6f085baSmrg if test -n "$library_names" && 2551e6f085baSmrg { { test "$prefer_static_libs" = no || 2552e6f085baSmrg test "$prefer_static_libs,$installed" = "built,yes"; } || 2553e6f085baSmrg test -z "$old_library"; }; then 2554e6f085baSmrg # We need to hardcode the library path 2555e6f085baSmrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 2556e6f085baSmrg # Make sure the rpath contains only unique directories. 2557e6f085baSmrg case "$temp_rpath " in 2558e6f085baSmrg *" $dir "*) ;; 2559e6f085baSmrg *" $absdir "*) ;; 2560e6f085baSmrg *) temp_rpath="$temp_rpath $absdir" ;; 2561e6f085baSmrg esac 2562e6f085baSmrg fi 256395b296d0Smrg 2564e6f085baSmrg # Hardcode the library path. 2565e6f085baSmrg # Skip directories that are in the system default run-time 2566e6f085baSmrg # search path. 2567e6f085baSmrg case " $sys_lib_dlsearch_path " in 2568e6f085baSmrg *" $absdir "*) ;; 2569e6f085baSmrg *) 2570e6f085baSmrg case "$compile_rpath " in 2571e6f085baSmrg *" $absdir "*) ;; 2572e6f085baSmrg *) compile_rpath="$compile_rpath $absdir" 2573e6f085baSmrg esac 2574e6f085baSmrg ;; 2575e6f085baSmrg esac 2576e6f085baSmrg case " $sys_lib_dlsearch_path " in 2577e6f085baSmrg *" $libdir "*) ;; 2578e6f085baSmrg *) 2579e6f085baSmrg case "$finalize_rpath " in 2580e6f085baSmrg *" $libdir "*) ;; 2581e6f085baSmrg *) finalize_rpath="$finalize_rpath $libdir" 2582e6f085baSmrg esac 2583e6f085baSmrg ;; 2584e6f085baSmrg esac 2585e6f085baSmrg fi # $linkmode,$pass = prog,link... 258639713583Smrg 2587e6f085baSmrg if test "$alldeplibs" = yes && 2588e6f085baSmrg { test "$deplibs_check_method" = pass_all || 2589e6f085baSmrg { test "$build_libtool_libs" = yes && 2590e6f085baSmrg test -n "$library_names"; }; }; then 2591e6f085baSmrg # We only need to search for static libraries 2592e6f085baSmrg continue 2593e6f085baSmrg fi 259495b296d0Smrg fi 259595b296d0Smrg 2596e6f085baSmrg link_static=no # Whether the deplib will be linked statically 2597e6f085baSmrg use_static_libs=$prefer_static_libs 2598e6f085baSmrg if test "$use_static_libs" = built && test "$installed" = yes ; then 2599e6f085baSmrg use_static_libs=no 2600e6f085baSmrg fi 2601e6f085baSmrg if test -n "$library_names" && 2602e6f085baSmrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 2603e6f085baSmrg if test "$installed" = no; then 2604e6f085baSmrg notinst_deplibs="$notinst_deplibs $lib" 2605e6f085baSmrg need_relink=yes 2606e6f085baSmrg fi 2607e6f085baSmrg # This is a shared library 260895b296d0Smrg 2609e6f085baSmrg # Warn about portability, can't link against -module's on 2610e6f085baSmrg # some systems (darwin) 2611e6f085baSmrg if test "$shouldnotlink" = yes && test "$pass" = link ; then 2612e6f085baSmrg $echo 2613e6f085baSmrg if test "$linkmode" = prog; then 2614e6f085baSmrg $echo "*** Warning: Linking the executable $output against the loadable module" 2615e6f085baSmrg else 2616e6f085baSmrg $echo "*** Warning: Linking the shared library $output against the loadable module" 2617e6f085baSmrg fi 2618e6f085baSmrg $echo "*** $linklib is not portable!" 2619e6f085baSmrg fi 2620e6f085baSmrg if test "$linkmode" = lib && 2621e6f085baSmrg test "$hardcode_into_libs" = yes; then 2622e6f085baSmrg # Hardcode the library path. 2623e6f085baSmrg # Skip directories that are in the system default run-time 2624e6f085baSmrg # search path. 2625e6f085baSmrg case " $sys_lib_dlsearch_path " in 2626e6f085baSmrg *" $absdir "*) ;; 2627e6f085baSmrg *) 2628e6f085baSmrg case "$compile_rpath " in 2629e6f085baSmrg *" $absdir "*) ;; 2630e6f085baSmrg *) compile_rpath="$compile_rpath $absdir" 2631e6f085baSmrg esac 2632e6f085baSmrg ;; 2633e6f085baSmrg esac 2634e6f085baSmrg case " $sys_lib_dlsearch_path " in 2635e6f085baSmrg *" $libdir "*) ;; 2636e6f085baSmrg *) 2637e6f085baSmrg case "$finalize_rpath " in 2638e6f085baSmrg *" $libdir "*) ;; 2639e6f085baSmrg *) finalize_rpath="$finalize_rpath $libdir" 2640e6f085baSmrg esac 2641e6f085baSmrg ;; 2642e6f085baSmrg esac 2643e6f085baSmrg fi 264439713583Smrg 2645e6f085baSmrg if test -n "$old_archive_from_expsyms_cmds"; then 2646e6f085baSmrg # figure out the soname 2647e6f085baSmrg set dummy $library_names 2648e6f085baSmrg realname="$2" 2649e6f085baSmrg shift; shift 2650e6f085baSmrg libname=`eval \\$echo \"$libname_spec\"` 2651e6f085baSmrg # use dlname if we got it. it's perfectly good, no? 2652e6f085baSmrg if test -n "$dlname"; then 2653e6f085baSmrg soname="$dlname" 2654e6f085baSmrg elif test -n "$soname_spec"; then 2655e6f085baSmrg # bleh windows 2656e6f085baSmrg case $host in 2657e6f085baSmrg *cygwin* | mingw*) 2658e6f085baSmrg major=`expr $current - $age` 2659e6f085baSmrg versuffix="-$major" 2660e6f085baSmrg ;; 2661e6f085baSmrg esac 2662e6f085baSmrg eval soname=\"$soname_spec\" 2663e6f085baSmrg else 2664e6f085baSmrg soname="$realname" 2665e6f085baSmrg fi 266639713583Smrg 2667e6f085baSmrg # Make a new name for the extract_expsyms_cmds to use 2668e6f085baSmrg soroot="$soname" 2669e6f085baSmrg soname=`$echo $soroot | ${SED} -e 's/^.*\///'` 2670e6f085baSmrg newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" 267139713583Smrg 2672e6f085baSmrg # If the library has no export list, then create one now 2673e6f085baSmrg if test -f "$output_objdir/$soname-def"; then : 2674e6f085baSmrg else 2675e6f085baSmrg $show "extracting exported symbol list from \`$soname'" 2676e6f085baSmrg save_ifs="$IFS"; IFS='~' 2677e6f085baSmrg cmds=$extract_expsyms_cmds 2678e6f085baSmrg for cmd in $cmds; do 2679e6f085baSmrg IFS="$save_ifs" 2680e6f085baSmrg eval cmd=\"$cmd\" 2681e6f085baSmrg $show "$cmd" 2682e6f085baSmrg $run eval "$cmd" || exit $? 2683e6f085baSmrg done 2684e6f085baSmrg IFS="$save_ifs" 2685e6f085baSmrg fi 268639713583Smrg 2687e6f085baSmrg # Create $newlib 2688e6f085baSmrg if test -f "$output_objdir/$newlib"; then :; else 2689e6f085baSmrg $show "generating import library for \`$soname'" 2690e6f085baSmrg save_ifs="$IFS"; IFS='~' 2691e6f085baSmrg cmds=$old_archive_from_expsyms_cmds 2692e6f085baSmrg for cmd in $cmds; do 2693e6f085baSmrg IFS="$save_ifs" 2694e6f085baSmrg eval cmd=\"$cmd\" 2695e6f085baSmrg $show "$cmd" 2696e6f085baSmrg $run eval "$cmd" || exit $? 2697e6f085baSmrg done 2698e6f085baSmrg IFS="$save_ifs" 2699e6f085baSmrg fi 2700e6f085baSmrg # make sure the library variables are pointing to the new library 2701e6f085baSmrg dir=$output_objdir 2702e6f085baSmrg linklib=$newlib 2703e6f085baSmrg fi # test -n "$old_archive_from_expsyms_cmds" 270495b296d0Smrg 2705e6f085baSmrg if test "$linkmode" = prog || test "$mode" != relink; then 2706e6f085baSmrg add_shlibpath= 2707e6f085baSmrg add_dir= 2708e6f085baSmrg add= 2709e6f085baSmrg lib_linked=yes 2710e6f085baSmrg case $hardcode_action in 2711e6f085baSmrg immediate | unsupported) 2712e6f085baSmrg if test "$hardcode_direct" = no; then 2713e6f085baSmrg add="$dir/$linklib" 2714e6f085baSmrg case $host in 2715e6f085baSmrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 2716e6f085baSmrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 2717e6f085baSmrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 2718e6f085baSmrg *-*-unixware7*) add_dir="-L$dir" ;; 2719e6f085baSmrg *-*-darwin* ) 2720e6f085baSmrg # if the lib is a module then we can not link against 2721e6f085baSmrg # it, someone is ignoring the new warnings I added 2722e6f085baSmrg if /usr/bin/file -L $add 2> /dev/null | 2723e6f085baSmrg $EGREP ": [^:]* bundle" >/dev/null ; then 2724e6f085baSmrg $echo "** Warning, lib $linklib is a module, not a shared library" 2725e6f085baSmrg if test -z "$old_library" ; then 2726e6f085baSmrg $echo 2727e6f085baSmrg $echo "** And there doesn't seem to be a static archive available" 2728e6f085baSmrg $echo "** The link will probably fail, sorry" 2729e6f085baSmrg else 2730e6f085baSmrg add="$dir/$old_library" 2731e6f085baSmrg fi 2732e6f085baSmrg fi 2733e6f085baSmrg esac 2734e6f085baSmrg elif test "$hardcode_minus_L" = no; then 2735e6f085baSmrg case $host in 2736e6f085baSmrg *-*-sunos*) add_shlibpath="$dir" ;; 2737e6f085baSmrg esac 2738e6f085baSmrg add_dir="-L$dir" 2739e6f085baSmrg add="-l$name" 2740e6f085baSmrg elif test "$hardcode_shlibpath_var" = no; then 2741e6f085baSmrg add_shlibpath="$dir" 2742e6f085baSmrg add="-l$name" 2743e6f085baSmrg else 2744e6f085baSmrg lib_linked=no 2745e6f085baSmrg fi 2746e6f085baSmrg ;; 2747e6f085baSmrg relink) 2748e6f085baSmrg if test "$hardcode_direct" = yes; then 2749e6f085baSmrg add="$dir/$linklib" 2750e6f085baSmrg elif test "$hardcode_minus_L" = yes; then 2751e6f085baSmrg add_dir="-L$dir" 2752e6f085baSmrg # Try looking first in the location we're being installed to. 2753e6f085baSmrg if test -n "$inst_prefix_dir"; then 2754e6f085baSmrg case $libdir in 2755e6f085baSmrg [\\/]*) 2756e6f085baSmrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 2757e6f085baSmrg ;; 2758e6f085baSmrg esac 2759e6f085baSmrg fi 2760e6f085baSmrg add="-l$name" 2761e6f085baSmrg elif test "$hardcode_shlibpath_var" = yes; then 2762e6f085baSmrg add_shlibpath="$dir" 2763e6f085baSmrg add="-l$name" 2764e6f085baSmrg else 2765e6f085baSmrg lib_linked=no 2766e6f085baSmrg fi 2767e6f085baSmrg ;; 2768e6f085baSmrg *) lib_linked=no ;; 2769e6f085baSmrg esac 277095b296d0Smrg 2771e6f085baSmrg if test "$lib_linked" != yes; then 2772e6f085baSmrg $echo "$modename: configuration error: unsupported hardcode properties" 2773e6f085baSmrg exit $EXIT_FAILURE 2774e6f085baSmrg fi 277595b296d0Smrg 2776e6f085baSmrg if test -n "$add_shlibpath"; then 2777e6f085baSmrg case :$compile_shlibpath: in 2778e6f085baSmrg *":$add_shlibpath:"*) ;; 2779e6f085baSmrg *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; 2780e6f085baSmrg esac 2781e6f085baSmrg fi 2782e6f085baSmrg if test "$linkmode" = prog; then 2783e6f085baSmrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 2784e6f085baSmrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 2785e6f085baSmrg else 2786e6f085baSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 2787e6f085baSmrg test -n "$add" && deplibs="$add $deplibs" 2788e6f085baSmrg if test "$hardcode_direct" != yes && \ 2789e6f085baSmrg test "$hardcode_minus_L" != yes && \ 2790e6f085baSmrg test "$hardcode_shlibpath_var" = yes; then 2791e6f085baSmrg case :$finalize_shlibpath: in 2792e6f085baSmrg *":$libdir:"*) ;; 2793e6f085baSmrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 2794e6f085baSmrg esac 2795e6f085baSmrg fi 2796e6f085baSmrg fi 2797e6f085baSmrg fi 279895b296d0Smrg 2799e6f085baSmrg if test "$linkmode" = prog || test "$mode" = relink; then 2800e6f085baSmrg add_shlibpath= 2801e6f085baSmrg add_dir= 2802e6f085baSmrg add= 2803e6f085baSmrg # Finalize command for both is simple: just hardcode it. 2804e6f085baSmrg if test "$hardcode_direct" = yes; then 2805e6f085baSmrg add="$libdir/$linklib" 2806e6f085baSmrg elif test "$hardcode_minus_L" = yes; then 2807e6f085baSmrg add_dir="-L$libdir" 2808e6f085baSmrg add="-l$name" 2809e6f085baSmrg elif test "$hardcode_shlibpath_var" = yes; then 2810e6f085baSmrg case :$finalize_shlibpath: in 2811e6f085baSmrg *":$libdir:"*) ;; 2812e6f085baSmrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 2813e6f085baSmrg esac 2814e6f085baSmrg add="-l$name" 2815e6f085baSmrg elif test "$hardcode_automatic" = yes; then 2816e6f085baSmrg if test -n "$inst_prefix_dir" && 2817e6f085baSmrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 2818e6f085baSmrg add="$inst_prefix_dir$libdir/$linklib" 2819e6f085baSmrg else 2820e6f085baSmrg add="$libdir/$linklib" 2821e6f085baSmrg fi 2822e6f085baSmrg else 2823e6f085baSmrg # We cannot seem to hardcode it, guess we'll fake it. 2824e6f085baSmrg add_dir="-L$libdir" 2825e6f085baSmrg # Try looking first in the location we're being installed to. 2826e6f085baSmrg if test -n "$inst_prefix_dir"; then 2827e6f085baSmrg case $libdir in 2828e6f085baSmrg [\\/]*) 2829e6f085baSmrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 2830e6f085baSmrg ;; 2831e6f085baSmrg esac 2832e6f085baSmrg fi 2833e6f085baSmrg add="-l$name" 2834e6f085baSmrg fi 283539713583Smrg 2836e6f085baSmrg if test "$linkmode" = prog; then 2837e6f085baSmrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 2838e6f085baSmrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 2839e6f085baSmrg else 2840e6f085baSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 2841e6f085baSmrg test -n "$add" && deplibs="$add $deplibs" 2842e6f085baSmrg fi 2843e6f085baSmrg fi 2844e6f085baSmrg elif test "$linkmode" = prog; then 2845e6f085baSmrg # Here we assume that one of hardcode_direct or hardcode_minus_L 2846e6f085baSmrg # is not unsupported. This is valid on all known static and 2847e6f085baSmrg # shared platforms. 2848e6f085baSmrg if test "$hardcode_direct" != unsupported; then 2849e6f085baSmrg test -n "$old_library" && linklib="$old_library" 2850e6f085baSmrg compile_deplibs="$dir/$linklib $compile_deplibs" 2851e6f085baSmrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 2852e6f085baSmrg else 2853e6f085baSmrg compile_deplibs="-l$name -L$dir $compile_deplibs" 2854e6f085baSmrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 2855e6f085baSmrg fi 2856e6f085baSmrg elif test "$build_libtool_libs" = yes; then 2857e6f085baSmrg # Not a shared library 2858e6f085baSmrg if test "$deplibs_check_method" != pass_all; then 2859e6f085baSmrg # We're trying link a shared library against a static one 2860e6f085baSmrg # but the system doesn't support it. 286195b296d0Smrg 2862e6f085baSmrg # Just print a warning and add the library to dependency_libs so 2863e6f085baSmrg # that the program can be linked against the static library. 2864e6f085baSmrg $echo 2865e6f085baSmrg $echo "*** Warning: This system can not link to static lib archive $lib." 2866e6f085baSmrg $echo "*** I have the capability to make that library automatically link in when" 2867e6f085baSmrg $echo "*** you link to this library. But I can only do this if you have a" 2868e6f085baSmrg $echo "*** shared version of the library, which you do not appear to have." 2869e6f085baSmrg if test "$module" = yes; then 2870e6f085baSmrg $echo "*** But as you try to build a module library, libtool will still create " 2871e6f085baSmrg $echo "*** a static module, that should work as long as the dlopening application" 2872e6f085baSmrg $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 2873e6f085baSmrg if test -z "$global_symbol_pipe"; then 2874e6f085baSmrg $echo 2875e6f085baSmrg $echo "*** However, this would only work if libtool was able to extract symbol" 2876e6f085baSmrg $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 2877e6f085baSmrg $echo "*** not find such a program. So, this module is probably useless." 2878e6f085baSmrg $echo "*** \`nm' from GNU binutils and a full rebuild may help." 2879e6f085baSmrg fi 2880e6f085baSmrg if test "$build_old_libs" = no; then 2881e6f085baSmrg build_libtool_libs=module 2882e6f085baSmrg build_old_libs=yes 2883e6f085baSmrg else 2884e6f085baSmrg build_libtool_libs=no 2885e6f085baSmrg fi 2886e6f085baSmrg fi 2887e6f085baSmrg else 2888e6f085baSmrg deplibs="$dir/$old_library $deplibs" 2889e6f085baSmrg link_static=yes 2890e6f085baSmrg fi 2891e6f085baSmrg fi # link shared/static library? 289295b296d0Smrg 2893e6f085baSmrg if test "$linkmode" = lib; then 2894e6f085baSmrg if test -n "$dependency_libs" && 2895e6f085baSmrg { test "$hardcode_into_libs" != yes || 2896e6f085baSmrg test "$build_old_libs" = yes || 2897e6f085baSmrg test "$link_static" = yes; }; then 2898e6f085baSmrg # Extract -R from dependency_libs 2899e6f085baSmrg temp_deplibs= 2900e6f085baSmrg for libdir in $dependency_libs; do 2901e6f085baSmrg case $libdir in 2902e6f085baSmrg -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` 2903e6f085baSmrg case " $xrpath " in 2904e6f085baSmrg *" $temp_xrpath "*) ;; 2905e6f085baSmrg *) xrpath="$xrpath $temp_xrpath";; 2906e6f085baSmrg esac;; 2907e6f085baSmrg *) temp_deplibs="$temp_deplibs $libdir";; 2908e6f085baSmrg esac 2909e6f085baSmrg done 2910e6f085baSmrg dependency_libs="$temp_deplibs" 2911e6f085baSmrg fi 291295b296d0Smrg 2913e6f085baSmrg newlib_search_path="$newlib_search_path $absdir" 2914e6f085baSmrg # Link against this library 2915e6f085baSmrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 2916e6f085baSmrg # ... and its dependency_libs 2917e6f085baSmrg tmp_libs= 2918e6f085baSmrg for deplib in $dependency_libs; do 2919e6f085baSmrg newdependency_libs="$deplib $newdependency_libs" 2920e6f085baSmrg if test "X$duplicate_deps" = "Xyes" ; then 2921e6f085baSmrg case "$tmp_libs " in 2922e6f085baSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 2923e6f085baSmrg esac 2924e6f085baSmrg fi 2925e6f085baSmrg tmp_libs="$tmp_libs $deplib" 2926e6f085baSmrg done 292795b296d0Smrg 2928e6f085baSmrg if test "$link_all_deplibs" != no; then 2929e6f085baSmrg # Add the search paths of all dependency libraries 2930e6f085baSmrg for deplib in $dependency_libs; do 2931e6f085baSmrg case $deplib in 2932e6f085baSmrg -L*) path="$deplib" ;; 2933e6f085baSmrg *.la) 2934e6f085baSmrg dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` 2935e6f085baSmrg test "X$dir" = "X$deplib" && dir="." 2936e6f085baSmrg # We need an absolute path. 2937e6f085baSmrg case $dir in 2938e6f085baSmrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 2939e6f085baSmrg *) 2940e6f085baSmrg absdir=`cd "$dir" && pwd` 2941e6f085baSmrg if test -z "$absdir"; then 2942e6f085baSmrg $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 2943e6f085baSmrg absdir="$dir" 2944e6f085baSmrg fi 2945e6f085baSmrg ;; 2946e6f085baSmrg esac 2947e6f085baSmrg if grep "^installed=no" $deplib > /dev/null; then 2948e6f085baSmrg path="$absdir/$objdir" 2949e6f085baSmrg else 2950e6f085baSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 2951e6f085baSmrg if test -z "$libdir"; then 2952e6f085baSmrg $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 2953e6f085baSmrg exit $EXIT_FAILURE 2954e6f085baSmrg fi 2955e6f085baSmrg if test "$absdir" != "$libdir"; then 2956e6f085baSmrg $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 2957e6f085baSmrg fi 2958e6f085baSmrg path="$absdir" 2959e6f085baSmrg fi 2960e6f085baSmrg depdepl= 2961e6f085baSmrg case $host in 2962e6f085baSmrg *-*-darwin*) 2963e6f085baSmrg # we do not want to link against static libs, 2964e6f085baSmrg # but need to link against shared 2965e6f085baSmrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 2966e6f085baSmrg eval deplibdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 2967e6f085baSmrg if test -n "$deplibrary_names" ; then 2968e6f085baSmrg for tmp in $deplibrary_names ; do 2969e6f085baSmrg depdepl=$tmp 2970e6f085baSmrg done 2971e6f085baSmrg if test -f "$deplibdir/$depdepl" ; then 2972e6f085baSmrg depdepl="$deplibdir/$depdepl" 2973e6f085baSmrg elif test -f "$path/$depdepl" ; then 2974e6f085baSmrg depdepl="$path/$depdepl" 2975e6f085baSmrg else 2976e6f085baSmrg # Can't find it, oh well... 2977e6f085baSmrg depdepl= 2978e6f085baSmrg fi 2979e6f085baSmrg # do not add paths which are already there 2980e6f085baSmrg case " $newlib_search_path " in 2981e6f085baSmrg *" $path "*) ;; 2982e6f085baSmrg *) newlib_search_path="$newlib_search_path $path";; 2983e6f085baSmrg esac 2984e6f085baSmrg fi 2985e6f085baSmrg path="" 2986e6f085baSmrg ;; 2987e6f085baSmrg *) 2988e6f085baSmrg path="-L$path" 2989e6f085baSmrg ;; 2990e6f085baSmrg esac 2991e6f085baSmrg ;; 2992e6f085baSmrg -l*) 2993e6f085baSmrg case $host in 2994e6f085baSmrg *-*-darwin*) 2995e6f085baSmrg # Again, we only want to link against shared libraries 2996e6f085baSmrg eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` 2997e6f085baSmrg for tmp in $newlib_search_path ; do 2998e6f085baSmrg if test -f "$tmp/lib$tmp_libs.dylib" ; then 2999e6f085baSmrg eval depdepl="$tmp/lib$tmp_libs.dylib" 3000e6f085baSmrg break 3001e6f085baSmrg fi 3002e6f085baSmrg done 3003e6f085baSmrg path="" 3004e6f085baSmrg ;; 3005e6f085baSmrg *) continue ;; 3006e6f085baSmrg esac 3007e6f085baSmrg ;; 3008e6f085baSmrg *) continue ;; 3009e6f085baSmrg esac 3010e6f085baSmrg case " $deplibs " in 3011e6f085baSmrg *" $path "*) ;; 3012e6f085baSmrg *) deplibs="$path $deplibs" ;; 3013e6f085baSmrg esac 3014e6f085baSmrg case " $deplibs " in 3015e6f085baSmrg *" $depdepl "*) ;; 3016e6f085baSmrg *) deplibs="$depdepl $deplibs" ;; 3017e6f085baSmrg esac 3018e6f085baSmrg done 3019e6f085baSmrg fi # link_all_deplibs != no 3020e6f085baSmrg fi # linkmode = lib 3021e6f085baSmrg done # for deplib in $libs 3022e6f085baSmrg dependency_libs="$newdependency_libs" 3023e6f085baSmrg if test "$pass" = dlpreopen; then 3024e6f085baSmrg # Link the dlpreopened libraries before other libraries 3025e6f085baSmrg for deplib in $save_deplibs; do 3026e6f085baSmrg deplibs="$deplib $deplibs" 3027e6f085baSmrg done 3028e6f085baSmrg fi 3029e6f085baSmrg if test "$pass" != dlopen; then 3030e6f085baSmrg if test "$pass" != conv; then 3031e6f085baSmrg # Make sure lib_search_path contains only unique directories. 3032e6f085baSmrg lib_search_path= 3033e6f085baSmrg for dir in $newlib_search_path; do 3034e6f085baSmrg case "$lib_search_path " in 3035e6f085baSmrg *" $dir "*) ;; 3036e6f085baSmrg *) lib_search_path="$lib_search_path $dir" ;; 3037e6f085baSmrg esac 3038e6f085baSmrg done 3039e6f085baSmrg newlib_search_path= 3040e6f085baSmrg fi 3041e6f085baSmrg 3042e6f085baSmrg if test "$linkmode,$pass" != "prog,link"; then 3043e6f085baSmrg vars="deplibs" 3044e6f085baSmrg else 3045e6f085baSmrg vars="compile_deplibs finalize_deplibs" 3046e6f085baSmrg fi 3047e6f085baSmrg for var in $vars dependency_libs; do 3048e6f085baSmrg # Add libraries to $var in reverse order 3049e6f085baSmrg eval tmp_libs=\"\$$var\" 3050e6f085baSmrg new_libs= 3051e6f085baSmrg for deplib in $tmp_libs; do 3052e6f085baSmrg # FIXME: Pedantically, this is the right thing to do, so 3053e6f085baSmrg # that some nasty dependency loop isn't accidentally 3054e6f085baSmrg # broken: 3055e6f085baSmrg #new_libs="$deplib $new_libs" 3056e6f085baSmrg # Pragmatically, this seems to cause very few problems in 3057e6f085baSmrg # practice: 3058e6f085baSmrg case $deplib in 3059e6f085baSmrg -L*) new_libs="$deplib $new_libs" ;; 3060e6f085baSmrg -R*) ;; 3061e6f085baSmrg *) 3062e6f085baSmrg # And here is the reason: when a library appears more 3063e6f085baSmrg # than once as an explicit dependence of a library, or 3064e6f085baSmrg # is implicitly linked in more than once by the 3065e6f085baSmrg # compiler, it is considered special, and multiple 3066e6f085baSmrg # occurrences thereof are not removed. Compare this 3067e6f085baSmrg # with having the same library being listed as a 3068e6f085baSmrg # dependency of multiple other libraries: in this case, 3069e6f085baSmrg # we know (pedantically, we assume) the library does not 3070e6f085baSmrg # need to be listed more than once, so we keep only the 3071e6f085baSmrg # last copy. This is not always right, but it is rare 3072e6f085baSmrg # enough that we require users that really mean to play 3073e6f085baSmrg # such unportable linking tricks to link the library 3074e6f085baSmrg # using -Wl,-lname, so that libtool does not consider it 3075e6f085baSmrg # for duplicate removal. 3076e6f085baSmrg case " $specialdeplibs " in 3077e6f085baSmrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 3078e6f085baSmrg *) 3079e6f085baSmrg case " $new_libs " in 3080e6f085baSmrg *" $deplib "*) ;; 3081e6f085baSmrg *) new_libs="$deplib $new_libs" ;; 3082e6f085baSmrg esac 3083e6f085baSmrg ;; 3084e6f085baSmrg esac 3085e6f085baSmrg ;; 3086e6f085baSmrg esac 3087e6f085baSmrg done 3088e6f085baSmrg tmp_libs= 3089e6f085baSmrg for deplib in $new_libs; do 3090e6f085baSmrg case $deplib in 3091e6f085baSmrg -L*) 3092e6f085baSmrg case " $tmp_libs " in 3093e6f085baSmrg *" $deplib "*) ;; 3094e6f085baSmrg *) tmp_libs="$tmp_libs $deplib" ;; 3095e6f085baSmrg esac 3096e6f085baSmrg ;; 3097e6f085baSmrg *) tmp_libs="$tmp_libs $deplib" ;; 3098e6f085baSmrg esac 3099e6f085baSmrg done 3100e6f085baSmrg eval $var=\"$tmp_libs\" 3101e6f085baSmrg done # for var 3102e6f085baSmrg fi 3103e6f085baSmrg # Last step: remove runtime libs from dependency_libs 3104e6f085baSmrg # (they stay in deplibs) 3105e6f085baSmrg tmp_libs= 3106e6f085baSmrg for i in $dependency_libs ; do 3107e6f085baSmrg case " $predeps $postdeps $compiler_lib_search_path " in 3108e6f085baSmrg *" $i "*) 3109e6f085baSmrg i="" 311095b296d0Smrg ;; 311195b296d0Smrg esac 3112e6f085baSmrg if test -n "$i" ; then 3113e6f085baSmrg tmp_libs="$tmp_libs $i" 3114e6f085baSmrg fi 3115e6f085baSmrg done 3116e6f085baSmrg dependency_libs=$tmp_libs 3117e6f085baSmrg done # for pass 3118e6f085baSmrg if test "$linkmode" = prog; then 3119e6f085baSmrg dlfiles="$newdlfiles" 3120e6f085baSmrg dlprefiles="$newdlprefiles" 312139713583Smrg fi 312295b296d0Smrg 3123e6f085baSmrg case $linkmode in 3124e6f085baSmrg oldlib) 3125e6f085baSmrg case " $deplibs" in 3126e6f085baSmrg *\ -l* | *\ -L*) 3127e6f085baSmrg $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 ;; 3128e6f085baSmrg esac 312995b296d0Smrg 3130e6f085baSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 3131e6f085baSmrg $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 3132e6f085baSmrg fi 313395b296d0Smrg 3134e6f085baSmrg if test -n "$rpath"; then 3135e6f085baSmrg $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 3136e6f085baSmrg fi 313795b296d0Smrg 3138e6f085baSmrg if test -n "$xrpath"; then 3139e6f085baSmrg $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 3140e6f085baSmrg fi 314195b296d0Smrg 3142e6f085baSmrg if test -n "$vinfo"; then 3143e6f085baSmrg $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 3144e6f085baSmrg fi 314595b296d0Smrg 3146e6f085baSmrg if test -n "$release"; then 3147e6f085baSmrg $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 3148e6f085baSmrg fi 314995b296d0Smrg 3150e6f085baSmrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 3151e6f085baSmrg $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 3152e6f085baSmrg fi 315395b296d0Smrg 3154e6f085baSmrg # Now set the variables for building old libraries. 3155e6f085baSmrg build_libtool_libs=no 3156e6f085baSmrg oldlibs="$output" 3157e6f085baSmrg objs="$objs$old_deplibs" 3158e6f085baSmrg ;; 315995b296d0Smrg 3160e6f085baSmrg lib) 3161e6f085baSmrg # Make sure we only generate libraries of the form `libNAME.la'. 3162e6f085baSmrg case $outputname in 3163e6f085baSmrg lib*) 3164e6f085baSmrg name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` 3165e6f085baSmrg eval shared_ext=\"$shrext_cmds\" 3166e6f085baSmrg eval libname=\"$libname_spec\" 3167e6f085baSmrg ;; 3168e6f085baSmrg *) 3169e6f085baSmrg if test "$module" = no; then 3170e6f085baSmrg $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 3171e6f085baSmrg $echo "$help" 1>&2 3172e6f085baSmrg exit $EXIT_FAILURE 3173e6f085baSmrg fi 3174e6f085baSmrg if test "$need_lib_prefix" != no; then 3175e6f085baSmrg # Add the "lib" prefix for modules if required 3176e6f085baSmrg name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` 3177e6f085baSmrg eval shared_ext=\"$shrext_cmds\" 3178e6f085baSmrg eval libname=\"$libname_spec\" 3179e6f085baSmrg else 3180e6f085baSmrg libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` 3181e6f085baSmrg fi 3182e6f085baSmrg ;; 3183e6f085baSmrg esac 318495b296d0Smrg 3185e6f085baSmrg if test -n "$objs"; then 3186e6f085baSmrg if test "$deplibs_check_method" != pass_all; then 3187e6f085baSmrg $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 3188e6f085baSmrg exit $EXIT_FAILURE 3189e6f085baSmrg else 3190e6f085baSmrg $echo 3191e6f085baSmrg $echo "*** Warning: Linking the shared library $output against the non-libtool" 3192e6f085baSmrg $echo "*** objects $objs is not portable!" 3193e6f085baSmrg libobjs="$libobjs $objs" 3194e6f085baSmrg fi 3195e6f085baSmrg fi 319695b296d0Smrg 3197e6f085baSmrg if test "$dlself" != no; then 3198e6f085baSmrg $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 3199e6f085baSmrg fi 320095b296d0Smrg 3201e6f085baSmrg set dummy $rpath 3202e6f085baSmrg if test "$#" -gt 2; then 3203e6f085baSmrg $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 3204e6f085baSmrg fi 3205e6f085baSmrg install_libdir="$2" 320695b296d0Smrg 3207e6f085baSmrg oldlibs= 3208e6f085baSmrg if test -z "$rpath"; then 3209e6f085baSmrg if test "$build_libtool_libs" = yes; then 3210e6f085baSmrg # Building a libtool convenience library. 3211e6f085baSmrg # Some compilers have problems with a `.al' extension so 3212e6f085baSmrg # convenience libraries should have the same extension an 3213e6f085baSmrg # archive normally would. 3214e6f085baSmrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 3215e6f085baSmrg build_libtool_libs=convenience 3216e6f085baSmrg build_old_libs=yes 3217e6f085baSmrg fi 321895b296d0Smrg 3219e6f085baSmrg if test -n "$vinfo"; then 3220e6f085baSmrg $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 3221e6f085baSmrg fi 322295b296d0Smrg 3223e6f085baSmrg if test -n "$release"; then 3224e6f085baSmrg $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 3225e6f085baSmrg fi 3226e6f085baSmrg else 322795b296d0Smrg 3228e6f085baSmrg # Parse the version information argument. 3229e6f085baSmrg save_ifs="$IFS"; IFS=':' 3230e6f085baSmrg set dummy $vinfo 0 0 0 3231e6f085baSmrg IFS="$save_ifs" 323295b296d0Smrg 3233e6f085baSmrg if test -n "$8"; then 3234e6f085baSmrg $echo "$modename: too many parameters to \`-version-info'" 1>&2 3235e6f085baSmrg $echo "$help" 1>&2 3236e6f085baSmrg exit $EXIT_FAILURE 3237e6f085baSmrg fi 323895b296d0Smrg 3239e6f085baSmrg # convert absolute version numbers to libtool ages 3240e6f085baSmrg # this retains compatibility with .la files and attempts 3241e6f085baSmrg # to make the code below a bit more comprehensible 324295b296d0Smrg 3243e6f085baSmrg case $vinfo_number in 3244e6f085baSmrg yes) 3245e6f085baSmrg number_major="$2" 3246e6f085baSmrg number_minor="$3" 3247e6f085baSmrg number_revision="$4" 3248e6f085baSmrg # 3249e6f085baSmrg # There are really only two kinds -- those that 3250e6f085baSmrg # use the current revision as the major version 3251e6f085baSmrg # and those that subtract age and use age as 3252e6f085baSmrg # a minor version. But, then there is irix 3253e6f085baSmrg # which has an extra 1 added just for fun 3254e6f085baSmrg # 3255e6f085baSmrg case $version_type in 3256e6f085baSmrg darwin|linux|osf|windows|none) 3257e6f085baSmrg current=`expr $number_major + $number_minor` 3258e6f085baSmrg age="$number_minor" 3259e6f085baSmrg revision="$number_revision" 3260e6f085baSmrg ;; 3261e6f085baSmrg freebsd-aout|freebsd-elf|sunos) 3262e6f085baSmrg current="$number_major" 3263e6f085baSmrg revision="$number_minor" 3264e6f085baSmrg age="0" 3265e6f085baSmrg ;; 3266e6f085baSmrg irix|nonstopux) 3267e6f085baSmrg current=`expr $number_major + $number_minor` 3268e6f085baSmrg age="$number_minor" 3269e6f085baSmrg revision="$number_minor" 3270e6f085baSmrg lt_irix_increment=no 3271e6f085baSmrg ;; 3272e6f085baSmrg esac 3273e6f085baSmrg ;; 3274e6f085baSmrg no) 3275e6f085baSmrg current="$2" 3276e6f085baSmrg revision="$3" 3277e6f085baSmrg age="$4" 3278e6f085baSmrg ;; 3279e6f085baSmrg esac 328095b296d0Smrg 3281e6f085baSmrg # Check that each of the things are valid numbers. 3282e6f085baSmrg case $current in 3283e6f085baSmrg 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]) ;; 3284e6f085baSmrg *) 3285e6f085baSmrg $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 3286e6f085baSmrg $echo "$modename: \`$vinfo' is not valid version information" 1>&2 3287e6f085baSmrg exit $EXIT_FAILURE 3288e6f085baSmrg ;; 3289e6f085baSmrg esac 329095b296d0Smrg 3291e6f085baSmrg case $revision in 3292e6f085baSmrg 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]) ;; 3293e6f085baSmrg *) 3294e6f085baSmrg $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 3295e6f085baSmrg $echo "$modename: \`$vinfo' is not valid version information" 1>&2 3296e6f085baSmrg exit $EXIT_FAILURE 3297e6f085baSmrg ;; 3298e6f085baSmrg esac 329995b296d0Smrg 3300e6f085baSmrg case $age in 3301e6f085baSmrg 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]) ;; 3302e6f085baSmrg *) 3303e6f085baSmrg $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 3304e6f085baSmrg $echo "$modename: \`$vinfo' is not valid version information" 1>&2 3305e6f085baSmrg exit $EXIT_FAILURE 3306e6f085baSmrg ;; 3307e6f085baSmrg esac 330895b296d0Smrg 3309e6f085baSmrg if test "$age" -gt "$current"; then 3310e6f085baSmrg $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 3311e6f085baSmrg $echo "$modename: \`$vinfo' is not valid version information" 1>&2 3312e6f085baSmrg exit $EXIT_FAILURE 3313e6f085baSmrg fi 331495b296d0Smrg 3315e6f085baSmrg # Calculate the version variables. 3316e6f085baSmrg major= 3317e6f085baSmrg versuffix= 3318e6f085baSmrg verstring= 3319e6f085baSmrg case $version_type in 3320e6f085baSmrg none) ;; 332195b296d0Smrg 3322e6f085baSmrg darwin) 3323e6f085baSmrg # Like Linux, but with the current version available in 3324e6f085baSmrg # verstring for coding it into the library header 3325e6f085baSmrg major=.`expr $current - $age` 3326e6f085baSmrg versuffix="$major.$age.$revision" 3327e6f085baSmrg # Darwin ld doesn't like 0 for these options... 3328e6f085baSmrg minor_current=`expr $current + 1` 3329e6f085baSmrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 3330e6f085baSmrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 3331e6f085baSmrg ;; 333295b296d0Smrg 3333e6f085baSmrg freebsd-aout) 3334e6f085baSmrg major=".$current" 3335e6f085baSmrg versuffix=".$current.$revision"; 3336e6f085baSmrg ;; 333795b296d0Smrg 3338e6f085baSmrg freebsd-elf) 3339e6f085baSmrg major=".$current" 3340e6f085baSmrg versuffix=".$current"; 3341e6f085baSmrg ;; 334239713583Smrg 3343e6f085baSmrg irix | nonstopux) 3344e6f085baSmrg if test "X$lt_irix_increment" = "Xno"; then 3345e6f085baSmrg major=`expr $current - $age` 3346e6f085baSmrg else 3347e6f085baSmrg major=`expr $current - $age + 1` 3348e6f085baSmrg fi 3349e6f085baSmrg case $version_type in 3350e6f085baSmrg nonstopux) verstring_prefix=nonstopux ;; 3351e6f085baSmrg *) verstring_prefix=sgi ;; 3352e6f085baSmrg esac 3353e6f085baSmrg verstring="$verstring_prefix$major.$revision" 335495b296d0Smrg 3355e6f085baSmrg # Add in all the interfaces that we are compatible with. 3356e6f085baSmrg loop=$revision 3357e6f085baSmrg while test "$loop" -ne 0; do 3358e6f085baSmrg iface=`expr $revision - $loop` 3359e6f085baSmrg loop=`expr $loop - 1` 3360e6f085baSmrg verstring="$verstring_prefix$major.$iface:$verstring" 3361e6f085baSmrg done 336295b296d0Smrg 3363e6f085baSmrg # Before this point, $major must not contain `.'. 3364e6f085baSmrg major=.$major 3365e6f085baSmrg versuffix="$major.$revision" 3366e6f085baSmrg ;; 336795b296d0Smrg 3368e6f085baSmrg linux) 3369e6f085baSmrg major=.`expr $current - $age` 3370e6f085baSmrg versuffix="$major.$age.$revision" 3371e6f085baSmrg ;; 337295b296d0Smrg 3373e6f085baSmrg osf) 3374e6f085baSmrg major=.`expr $current - $age` 3375e6f085baSmrg versuffix=".$current.$age.$revision" 3376e6f085baSmrg verstring="$current.$age.$revision" 337795b296d0Smrg 3378e6f085baSmrg # Add in all the interfaces that we are compatible with. 3379e6f085baSmrg loop=$age 3380e6f085baSmrg while test "$loop" -ne 0; do 3381e6f085baSmrg iface=`expr $current - $loop` 3382e6f085baSmrg loop=`expr $loop - 1` 3383e6f085baSmrg verstring="$verstring:${iface}.0" 3384e6f085baSmrg done 338595b296d0Smrg 3386e6f085baSmrg # Make executables depend on our current version. 3387e6f085baSmrg verstring="$verstring:${current}.0" 3388e6f085baSmrg ;; 338995b296d0Smrg 3390e6f085baSmrg sunos) 3391e6f085baSmrg major=".$current" 3392e6f085baSmrg versuffix=".$current.$revision" 3393e6f085baSmrg ;; 339495b296d0Smrg 3395e6f085baSmrg windows) 3396e6f085baSmrg # Use '-' rather than '.', since we only want one 3397e6f085baSmrg # extension on DOS 8.3 filesystems. 3398e6f085baSmrg major=`expr $current - $age` 3399e6f085baSmrg versuffix="-$major" 3400e6f085baSmrg ;; 340195b296d0Smrg 3402e6f085baSmrg *) 3403e6f085baSmrg $echo "$modename: unknown library version type \`$version_type'" 1>&2 3404e6f085baSmrg $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 3405e6f085baSmrg exit $EXIT_FAILURE 3406e6f085baSmrg ;; 3407e6f085baSmrg esac 340895b296d0Smrg 3409e6f085baSmrg # Clear the version info if we defaulted, and they specified a release. 3410e6f085baSmrg if test -z "$vinfo" && test -n "$release"; then 3411e6f085baSmrg major= 3412e6f085baSmrg case $version_type in 3413e6f085baSmrg darwin) 3414e6f085baSmrg # we can't check for "0.0" in archive_cmds due to quoting 3415e6f085baSmrg # problems, so we reset it completely 3416e6f085baSmrg verstring= 341739713583Smrg ;; 3418e6f085baSmrg *) 3419e6f085baSmrg verstring="0.0" 3420e6f085baSmrg ;; 3421e6f085baSmrg esac 3422e6f085baSmrg if test "$need_version" = no; then 3423e6f085baSmrg versuffix= 3424e6f085baSmrg else 3425e6f085baSmrg versuffix=".0.0" 3426e6f085baSmrg fi 3427e6f085baSmrg fi 342895b296d0Smrg 3429e6f085baSmrg # Remove version info from name if versioning should be avoided 3430e6f085baSmrg if test "$avoid_version" = yes && test "$need_version" = no; then 3431e6f085baSmrg major= 3432e6f085baSmrg versuffix= 3433e6f085baSmrg verstring="" 3434e6f085baSmrg fi 343595b296d0Smrg 3436e6f085baSmrg # Check to see if the archive will have undefined symbols. 3437e6f085baSmrg if test "$allow_undefined" = yes; then 3438e6f085baSmrg if test "$allow_undefined_flag" = unsupported; then 3439e6f085baSmrg $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 3440e6f085baSmrg build_libtool_libs=no 3441e6f085baSmrg build_old_libs=yes 3442e6f085baSmrg fi 3443e6f085baSmrg else 3444e6f085baSmrg # Don't allow undefined symbols. 3445e6f085baSmrg allow_undefined_flag="$no_undefined_flag" 3446e6f085baSmrg fi 3447e6f085baSmrg fi 344895b296d0Smrg 3449e6f085baSmrg if test "$mode" != relink; then 3450e6f085baSmrg # Remove our outputs, but don't remove object files since they 3451e6f085baSmrg # may have been created when compiling PIC objects. 3452e6f085baSmrg removelist= 3453e6f085baSmrg tempremovelist=`$echo "$output_objdir/*"` 3454e6f085baSmrg for p in $tempremovelist; do 3455e6f085baSmrg case $p in 3456e6f085baSmrg *.$objext) 3457e6f085baSmrg ;; 3458e6f085baSmrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 3459e6f085baSmrg if test "X$precious_files_regex" != "X"; then 3460e6f085baSmrg if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 3461e6f085baSmrg then 3462e6f085baSmrg continue 3463e6f085baSmrg fi 3464e6f085baSmrg fi 3465e6f085baSmrg removelist="$removelist $p" 3466e6f085baSmrg ;; 3467e6f085baSmrg *) ;; 3468e6f085baSmrg esac 3469e6f085baSmrg done 3470e6f085baSmrg if test -n "$removelist"; then 3471e6f085baSmrg $show "${rm}r $removelist" 3472e6f085baSmrg $run ${rm}r $removelist 3473e6f085baSmrg fi 3474e6f085baSmrg fi 347595b296d0Smrg 3476e6f085baSmrg # Now set the variables for building old libraries. 3477e6f085baSmrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 3478e6f085baSmrg oldlibs="$oldlibs $output_objdir/$libname.$libext" 347995b296d0Smrg 3480e6f085baSmrg # Transform .lo files to .o files. 3481e6f085baSmrg oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` 3482e6f085baSmrg fi 348395b296d0Smrg 3484e6f085baSmrg # Eliminate all temporary directories. 3485e6f085baSmrg #for path in $notinst_path; do 3486e6f085baSmrg # lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` 3487e6f085baSmrg # deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` 3488e6f085baSmrg # dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` 3489e6f085baSmrg #done 349095b296d0Smrg 3491e6f085baSmrg if test -n "$xrpath"; then 3492e6f085baSmrg # If the user specified any rpath flags, then add them. 3493e6f085baSmrg temp_xrpath= 3494e6f085baSmrg for libdir in $xrpath; do 3495e6f085baSmrg temp_xrpath="$temp_xrpath -R$libdir" 3496e6f085baSmrg case "$finalize_rpath " in 3497e6f085baSmrg *" $libdir "*) ;; 3498e6f085baSmrg *) finalize_rpath="$finalize_rpath $libdir" ;; 3499e6f085baSmrg esac 3500e6f085baSmrg done 3501e6f085baSmrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 3502e6f085baSmrg dependency_libs="$temp_xrpath $dependency_libs" 3503e6f085baSmrg fi 3504e6f085baSmrg fi 350595b296d0Smrg 3506e6f085baSmrg # Make sure dlfiles contains only unique files that won't be dlpreopened 3507e6f085baSmrg old_dlfiles="$dlfiles" 3508e6f085baSmrg dlfiles= 3509e6f085baSmrg for lib in $old_dlfiles; do 3510e6f085baSmrg case " $dlprefiles $dlfiles " in 3511e6f085baSmrg *" $lib "*) ;; 3512e6f085baSmrg *) dlfiles="$dlfiles $lib" ;; 3513e6f085baSmrg esac 3514e6f085baSmrg done 351595b296d0Smrg 3516e6f085baSmrg # Make sure dlprefiles contains only unique files 3517e6f085baSmrg old_dlprefiles="$dlprefiles" 3518e6f085baSmrg dlprefiles= 3519e6f085baSmrg for lib in $old_dlprefiles; do 3520e6f085baSmrg case "$dlprefiles " in 3521e6f085baSmrg *" $lib "*) ;; 3522e6f085baSmrg *) dlprefiles="$dlprefiles $lib" ;; 3523e6f085baSmrg esac 3524e6f085baSmrg done 352595b296d0Smrg 3526e6f085baSmrg if test "$build_libtool_libs" = yes; then 3527e6f085baSmrg if test -n "$rpath"; then 3528e6f085baSmrg case $host in 3529e6f085baSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) 3530e6f085baSmrg # these systems don't actually have a c library (as such)! 3531e6f085baSmrg ;; 3532e6f085baSmrg *-*-rhapsody* | *-*-darwin1.[012]) 3533e6f085baSmrg # Rhapsody C library is in the System framework 3534e6f085baSmrg deplibs="$deplibs -framework System" 3535e6f085baSmrg ;; 3536e6f085baSmrg *-*-netbsd*) 3537e6f085baSmrg # Don't link with libc until the a.out ld.so is fixed. 3538e6f085baSmrg ;; 3539e6f085baSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 3540e6f085baSmrg # Do not include libc due to us having libc/libc_r. 3541e6f085baSmrg ;; 3542e6f085baSmrg *-*-sco3.2v5* | *-*-sco5v6*) 3543e6f085baSmrg # Causes problems with __ctype 3544e6f085baSmrg ;; 3545e6f085baSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 3546e6f085baSmrg # Compiler inserts libc in the correct place for threads to work 3547e6f085baSmrg ;; 3548e6f085baSmrg *) 3549e6f085baSmrg # Add libc to deplibs on all other systems if necessary. 3550e6f085baSmrg if test "$build_libtool_need_lc" = "yes"; then 3551e6f085baSmrg deplibs="$deplibs -lc" 3552e6f085baSmrg fi 3553e6f085baSmrg ;; 3554e6f085baSmrg esac 3555e6f085baSmrg fi 355695b296d0Smrg 3557e6f085baSmrg # Transform deplibs into only deplibs that can be linked in shared. 3558e6f085baSmrg name_save=$name 3559e6f085baSmrg libname_save=$libname 3560e6f085baSmrg release_save=$release 3561e6f085baSmrg versuffix_save=$versuffix 3562e6f085baSmrg major_save=$major 3563e6f085baSmrg # I'm not sure if I'm treating the release correctly. I think 3564e6f085baSmrg # release should show up in the -l (ie -lgmp5) so we don't want to 3565e6f085baSmrg # add it in twice. Is that correct? 3566e6f085baSmrg release="" 3567e6f085baSmrg versuffix="" 3568e6f085baSmrg major="" 3569e6f085baSmrg newdeplibs= 3570e6f085baSmrg droppeddeps=no 3571e6f085baSmrg case $deplibs_check_method in 3572e6f085baSmrg pass_all) 3573e6f085baSmrg # Don't check for shared/static. Everything works. 3574e6f085baSmrg # This might be a little naive. We might want to check 3575e6f085baSmrg # whether the library exists or not. But this is on 3576e6f085baSmrg # osf3 & osf4 and I'm not really sure... Just 3577e6f085baSmrg # implementing what was already the behavior. 3578e6f085baSmrg newdeplibs=$deplibs 3579e6f085baSmrg ;; 3580e6f085baSmrg test_compile) 3581e6f085baSmrg # This code stresses the "libraries are programs" paradigm to its 3582e6f085baSmrg # limits. Maybe even breaks it. We compile a program, linking it 3583e6f085baSmrg # against the deplibs as a proxy for the library. Then we can check 3584e6f085baSmrg # whether they linked in statically or dynamically with ldd. 3585e6f085baSmrg $rm conftest.c 3586e6f085baSmrg cat > conftest.c <<EOF 3587e6f085baSmrg int main() { return 0; } 3588e6f085baSmrgEOF 3589e6f085baSmrg $rm conftest 3590e6f085baSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 3591e6f085baSmrg ldd_output=`ldd conftest` 3592e6f085baSmrg for i in $deplibs; do 3593e6f085baSmrg name=`expr $i : '-l\(.*\)'` 3594e6f085baSmrg # If $name is empty we are operating on a -L argument. 3595e6f085baSmrg if test "$name" != "" && test "$name" != "0"; then 3596e6f085baSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 3597e6f085baSmrg case " $predeps $postdeps " in 3598e6f085baSmrg *" $i "*) 3599e6f085baSmrg newdeplibs="$newdeplibs $i" 3600e6f085baSmrg i="" 3601e6f085baSmrg ;; 3602e6f085baSmrg esac 3603e6f085baSmrg fi 3604e6f085baSmrg if test -n "$i" ; then 3605e6f085baSmrg libname=`eval \\$echo \"$libname_spec\"` 3606e6f085baSmrg deplib_matches=`eval \\$echo \"$library_names_spec\"` 3607e6f085baSmrg set dummy $deplib_matches 3608e6f085baSmrg deplib_match=$2 3609e6f085baSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 3610e6f085baSmrg newdeplibs="$newdeplibs $i" 3611e6f085baSmrg else 3612e6f085baSmrg droppeddeps=yes 3613e6f085baSmrg $echo 3614e6f085baSmrg $echo "*** Warning: dynamic linker does not accept needed library $i." 3615e6f085baSmrg $echo "*** I have the capability to make that library automatically link in when" 3616e6f085baSmrg $echo "*** you link to this library. But I can only do this if you have a" 3617e6f085baSmrg $echo "*** shared version of the library, which I believe you do not have" 3618e6f085baSmrg $echo "*** because a test_compile did reveal that the linker did not use it for" 3619e6f085baSmrg $echo "*** its dynamic dependency list that programs get resolved with at runtime." 3620e6f085baSmrg fi 3621e6f085baSmrg fi 3622e6f085baSmrg else 3623e6f085baSmrg newdeplibs="$newdeplibs $i" 3624e6f085baSmrg fi 3625e6f085baSmrg done 3626e6f085baSmrg else 3627e6f085baSmrg # Error occurred in the first compile. Let's try to salvage 3628e6f085baSmrg # the situation: Compile a separate program for each library. 3629e6f085baSmrg for i in $deplibs; do 3630e6f085baSmrg name=`expr $i : '-l\(.*\)'` 3631e6f085baSmrg # If $name is empty we are operating on a -L argument. 3632e6f085baSmrg if test "$name" != "" && test "$name" != "0"; then 3633e6f085baSmrg $rm conftest 3634e6f085baSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 3635e6f085baSmrg ldd_output=`ldd conftest` 3636e6f085baSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 3637e6f085baSmrg case " $predeps $postdeps " in 3638e6f085baSmrg *" $i "*) 3639e6f085baSmrg newdeplibs="$newdeplibs $i" 3640e6f085baSmrg i="" 3641e6f085baSmrg ;; 3642e6f085baSmrg esac 3643e6f085baSmrg fi 3644e6f085baSmrg if test -n "$i" ; then 3645e6f085baSmrg libname=`eval \\$echo \"$libname_spec\"` 3646e6f085baSmrg deplib_matches=`eval \\$echo \"$library_names_spec\"` 3647e6f085baSmrg set dummy $deplib_matches 3648e6f085baSmrg deplib_match=$2 3649e6f085baSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 3650e6f085baSmrg newdeplibs="$newdeplibs $i" 3651e6f085baSmrg else 3652e6f085baSmrg droppeddeps=yes 3653e6f085baSmrg $echo 3654e6f085baSmrg $echo "*** Warning: dynamic linker does not accept needed library $i." 3655e6f085baSmrg $echo "*** I have the capability to make that library automatically link in when" 3656e6f085baSmrg $echo "*** you link to this library. But I can only do this if you have a" 3657e6f085baSmrg $echo "*** shared version of the library, which you do not appear to have" 3658e6f085baSmrg $echo "*** because a test_compile did reveal that the linker did not use this one" 3659e6f085baSmrg $echo "*** as a dynamic dependency that programs can get resolved with at runtime." 3660e6f085baSmrg fi 3661e6f085baSmrg fi 3662e6f085baSmrg else 3663e6f085baSmrg droppeddeps=yes 3664e6f085baSmrg $echo 3665e6f085baSmrg $echo "*** Warning! Library $i is needed by this library but I was not able to" 3666e6f085baSmrg $echo "*** make it link in! You will probably need to install it or some" 3667e6f085baSmrg $echo "*** library that it depends on before this library will be fully" 3668e6f085baSmrg $echo "*** functional. Installing it before continuing would be even better." 3669e6f085baSmrg fi 3670e6f085baSmrg else 3671e6f085baSmrg newdeplibs="$newdeplibs $i" 3672e6f085baSmrg fi 3673e6f085baSmrg done 3674e6f085baSmrg fi 3675e6f085baSmrg ;; 3676e6f085baSmrg file_magic*) 3677e6f085baSmrg set dummy $deplibs_check_method 3678e6f085baSmrg file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` 3679e6f085baSmrg for a_deplib in $deplibs; do 3680e6f085baSmrg name=`expr $a_deplib : '-l\(.*\)'` 3681e6f085baSmrg # If $name is empty we are operating on a -L argument. 3682e6f085baSmrg if test "$name" != "" && test "$name" != "0"; then 3683e6f085baSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 3684e6f085baSmrg case " $predeps $postdeps " in 3685e6f085baSmrg *" $a_deplib "*) 3686e6f085baSmrg newdeplibs="$newdeplibs $a_deplib" 3687e6f085baSmrg a_deplib="" 3688e6f085baSmrg ;; 3689e6f085baSmrg esac 3690e6f085baSmrg fi 3691e6f085baSmrg if test -n "$a_deplib" ; then 3692e6f085baSmrg libname=`eval \\$echo \"$libname_spec\"` 3693e6f085baSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 3694e6f085baSmrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 3695e6f085baSmrg for potent_lib in $potential_libs; do 3696e6f085baSmrg # Follow soft links. 3697e6f085baSmrg if ls -lLd "$potent_lib" 2>/dev/null \ 3698e6f085baSmrg | grep " -> " >/dev/null; then 3699e6f085baSmrg continue 3700e6f085baSmrg fi 3701e6f085baSmrg # The statement above tries to avoid entering an 3702e6f085baSmrg # endless loop below, in case of cyclic links. 3703e6f085baSmrg # We might still enter an endless loop, since a link 3704e6f085baSmrg # loop can be closed while we follow links, 3705e6f085baSmrg # but so what? 3706e6f085baSmrg potlib="$potent_lib" 3707e6f085baSmrg while test -h "$potlib" 2>/dev/null; do 3708e6f085baSmrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 3709e6f085baSmrg case $potliblink in 3710e6f085baSmrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 3711e6f085baSmrg *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; 3712e6f085baSmrg esac 3713e6f085baSmrg done 3714e6f085baSmrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ 3715e6f085baSmrg | ${SED} 10q \ 3716e6f085baSmrg | $EGREP "$file_magic_regex" > /dev/null; then 3717e6f085baSmrg newdeplibs="$newdeplibs $a_deplib" 3718e6f085baSmrg a_deplib="" 3719e6f085baSmrg break 2 3720e6f085baSmrg fi 3721e6f085baSmrg done 3722e6f085baSmrg done 3723e6f085baSmrg fi 3724e6f085baSmrg if test -n "$a_deplib" ; then 3725e6f085baSmrg droppeddeps=yes 3726e6f085baSmrg $echo 3727e6f085baSmrg $echo "*** Warning: linker path does not have real file for library $a_deplib." 3728e6f085baSmrg $echo "*** I have the capability to make that library automatically link in when" 3729e6f085baSmrg $echo "*** you link to this library. But I can only do this if you have a" 3730e6f085baSmrg $echo "*** shared version of the library, which you do not appear to have" 3731e6f085baSmrg $echo "*** because I did check the linker path looking for a file starting" 3732e6f085baSmrg if test -z "$potlib" ; then 3733e6f085baSmrg $echo "*** with $libname but no candidates were found. (...for file magic test)" 3734e6f085baSmrg else 3735e6f085baSmrg $echo "*** with $libname and none of the candidates passed a file format test" 3736e6f085baSmrg $echo "*** using a file magic. Last file checked: $potlib" 3737e6f085baSmrg fi 3738e6f085baSmrg fi 3739e6f085baSmrg else 3740e6f085baSmrg # Add a -L argument. 3741e6f085baSmrg newdeplibs="$newdeplibs $a_deplib" 3742e6f085baSmrg fi 3743e6f085baSmrg done # Gone through all deplibs. 3744e6f085baSmrg ;; 3745e6f085baSmrg match_pattern*) 3746e6f085baSmrg set dummy $deplibs_check_method 3747e6f085baSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` 3748e6f085baSmrg for a_deplib in $deplibs; do 3749e6f085baSmrg name=`expr $a_deplib : '-l\(.*\)'` 3750e6f085baSmrg # If $name is empty we are operating on a -L argument. 3751e6f085baSmrg if test -n "$name" && test "$name" != "0"; then 3752e6f085baSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 3753e6f085baSmrg case " $predeps $postdeps " in 3754e6f085baSmrg *" $a_deplib "*) 3755e6f085baSmrg newdeplibs="$newdeplibs $a_deplib" 3756e6f085baSmrg a_deplib="" 3757e6f085baSmrg ;; 3758e6f085baSmrg esac 3759e6f085baSmrg fi 3760e6f085baSmrg if test -n "$a_deplib" ; then 3761e6f085baSmrg libname=`eval \\$echo \"$libname_spec\"` 3762e6f085baSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 3763e6f085baSmrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 3764e6f085baSmrg for potent_lib in $potential_libs; do 3765e6f085baSmrg potlib="$potent_lib" # see symlink-check above in file_magic test 3766e6f085baSmrg if eval $echo \"$potent_lib\" 2>/dev/null \ 3767e6f085baSmrg | ${SED} 10q \ 3768e6f085baSmrg | $EGREP "$match_pattern_regex" > /dev/null; then 3769e6f085baSmrg newdeplibs="$newdeplibs $a_deplib" 3770e6f085baSmrg a_deplib="" 3771e6f085baSmrg break 2 3772e6f085baSmrg fi 3773e6f085baSmrg done 3774e6f085baSmrg done 3775e6f085baSmrg fi 3776e6f085baSmrg if test -n "$a_deplib" ; then 3777e6f085baSmrg droppeddeps=yes 3778e6f085baSmrg $echo 3779e6f085baSmrg $echo "*** Warning: linker path does not have real file for library $a_deplib." 3780e6f085baSmrg $echo "*** I have the capability to make that library automatically link in when" 3781e6f085baSmrg $echo "*** you link to this library. But I can only do this if you have a" 3782e6f085baSmrg $echo "*** shared version of the library, which you do not appear to have" 3783e6f085baSmrg $echo "*** because I did check the linker path looking for a file starting" 3784e6f085baSmrg if test -z "$potlib" ; then 3785e6f085baSmrg $echo "*** with $libname but no candidates were found. (...for regex pattern test)" 3786e6f085baSmrg else 3787e6f085baSmrg $echo "*** with $libname and none of the candidates passed a file format test" 3788e6f085baSmrg $echo "*** using a regex pattern. Last file checked: $potlib" 3789e6f085baSmrg fi 3790e6f085baSmrg fi 3791e6f085baSmrg else 3792e6f085baSmrg # Add a -L argument. 3793e6f085baSmrg newdeplibs="$newdeplibs $a_deplib" 3794e6f085baSmrg fi 3795e6f085baSmrg done # Gone through all deplibs. 3796e6f085baSmrg ;; 3797e6f085baSmrg none | unknown | *) 3798e6f085baSmrg newdeplibs="" 3799e6f085baSmrg tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ 3800e6f085baSmrg -e 's/ -[LR][^ ]*//g'` 3801e6f085baSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 3802e6f085baSmrg for i in $predeps $postdeps ; do 3803e6f085baSmrg # can't use Xsed below, because $i might contain '/' 3804e6f085baSmrg tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` 3805e6f085baSmrg done 3806e6f085baSmrg fi 3807e6f085baSmrg if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ 3808e6f085baSmrg | grep . >/dev/null; then 3809e6f085baSmrg $echo 3810e6f085baSmrg if test "X$deplibs_check_method" = "Xnone"; then 3811e6f085baSmrg $echo "*** Warning: inter-library dependencies are not supported in this platform." 3812e6f085baSmrg else 3813e6f085baSmrg $echo "*** Warning: inter-library dependencies are not known to be supported." 3814e6f085baSmrg fi 3815e6f085baSmrg $echo "*** All declared inter-library dependencies are being dropped." 3816e6f085baSmrg droppeddeps=yes 3817e6f085baSmrg fi 3818e6f085baSmrg ;; 3819e6f085baSmrg esac 3820e6f085baSmrg versuffix=$versuffix_save 3821e6f085baSmrg major=$major_save 3822e6f085baSmrg release=$release_save 3823e6f085baSmrg libname=$libname_save 3824e6f085baSmrg name=$name_save 382595b296d0Smrg 3826e6f085baSmrg case $host in 3827e6f085baSmrg *-*-rhapsody* | *-*-darwin1.[012]) 3828e6f085baSmrg # On Rhapsody replace the C library is the System framework 3829e6f085baSmrg newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` 3830e6f085baSmrg ;; 3831e6f085baSmrg esac 383295b296d0Smrg 3833e6f085baSmrg if test "$droppeddeps" = yes; then 3834e6f085baSmrg if test "$module" = yes; then 3835e6f085baSmrg $echo 3836e6f085baSmrg $echo "*** Warning: libtool could not satisfy all declared inter-library" 3837e6f085baSmrg $echo "*** dependencies of module $libname. Therefore, libtool will create" 3838e6f085baSmrg $echo "*** a static module, that should work as long as the dlopening" 3839e6f085baSmrg $echo "*** application is linked with the -dlopen flag." 3840e6f085baSmrg if test -z "$global_symbol_pipe"; then 3841e6f085baSmrg $echo 3842e6f085baSmrg $echo "*** However, this would only work if libtool was able to extract symbol" 3843e6f085baSmrg $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 3844e6f085baSmrg $echo "*** not find such a program. So, this module is probably useless." 3845e6f085baSmrg $echo "*** \`nm' from GNU binutils and a full rebuild may help." 3846e6f085baSmrg fi 3847e6f085baSmrg if test "$build_old_libs" = no; then 3848e6f085baSmrg oldlibs="$output_objdir/$libname.$libext" 3849e6f085baSmrg build_libtool_libs=module 3850e6f085baSmrg build_old_libs=yes 3851e6f085baSmrg else 3852e6f085baSmrg build_libtool_libs=no 3853e6f085baSmrg fi 3854e6f085baSmrg else 3855e6f085baSmrg $echo "*** The inter-library dependencies that have been dropped here will be" 3856e6f085baSmrg $echo "*** automatically added whenever a program is linked with this library" 3857e6f085baSmrg $echo "*** or is declared to -dlopen it." 385895b296d0Smrg 3859e6f085baSmrg if test "$allow_undefined" = no; then 3860e6f085baSmrg $echo 3861e6f085baSmrg $echo "*** Since this library must not contain undefined symbols," 3862e6f085baSmrg $echo "*** because either the platform does not support them or" 3863e6f085baSmrg $echo "*** it was explicitly requested with -no-undefined," 3864e6f085baSmrg $echo "*** libtool will only create a static version of it." 3865e6f085baSmrg if test "$build_old_libs" = no; then 3866e6f085baSmrg oldlibs="$output_objdir/$libname.$libext" 3867e6f085baSmrg build_libtool_libs=module 3868e6f085baSmrg build_old_libs=yes 3869e6f085baSmrg else 3870e6f085baSmrg build_libtool_libs=no 3871e6f085baSmrg fi 3872e6f085baSmrg fi 3873e6f085baSmrg fi 3874e6f085baSmrg fi 3875e6f085baSmrg # Done checking deplibs! 3876e6f085baSmrg deplibs=$newdeplibs 3877e6f085baSmrg fi 387895b296d0Smrg 387995b296d0Smrg 3880e6f085baSmrg # move library search paths that coincide with paths to not yet 3881e6f085baSmrg # installed libraries to the beginning of the library search list 3882e6f085baSmrg new_libs= 3883e6f085baSmrg for path in $notinst_path; do 3884e6f085baSmrg case " $new_libs " in 3885e6f085baSmrg *" -L$path/$objdir "*) ;; 3886e6f085baSmrg *) 3887e6f085baSmrg case " $deplibs " in 3888e6f085baSmrg *" -L$path/$objdir "*) 3889e6f085baSmrg new_libs="$new_libs -L$path/$objdir" ;; 3890e6f085baSmrg esac 3891e6f085baSmrg ;; 3892e6f085baSmrg esac 3893e6f085baSmrg done 3894e6f085baSmrg for deplib in $deplibs; do 3895e6f085baSmrg case $deplib in 3896e6f085baSmrg -L*) 3897e6f085baSmrg case " $new_libs " in 3898e6f085baSmrg *" $deplib "*) ;; 3899e6f085baSmrg *) new_libs="$new_libs $deplib" ;; 3900e6f085baSmrg esac 3901e6f085baSmrg ;; 3902e6f085baSmrg *) new_libs="$new_libs $deplib" ;; 3903e6f085baSmrg esac 3904e6f085baSmrg done 3905e6f085baSmrg deplibs="$new_libs" 390695b296d0Smrg 390795b296d0Smrg 3908e6f085baSmrg # All the library-specific variables (install_libdir is set above). 3909e6f085baSmrg library_names= 3910e6f085baSmrg old_library= 3911e6f085baSmrg dlname= 391295b296d0Smrg 3913e6f085baSmrg # Test again, we may have decided not to build it any more 3914e6f085baSmrg if test "$build_libtool_libs" = yes; then 3915e6f085baSmrg if test "$hardcode_into_libs" = yes; then 3916e6f085baSmrg # Hardcode the library paths 3917e6f085baSmrg hardcode_libdirs= 3918e6f085baSmrg dep_rpath= 3919e6f085baSmrg rpath="$finalize_rpath" 3920e6f085baSmrg test "$mode" != relink && rpath="$compile_rpath$rpath" 3921e6f085baSmrg for libdir in $rpath; do 3922e6f085baSmrg if test -n "$hardcode_libdir_flag_spec"; then 3923e6f085baSmrg if test -n "$hardcode_libdir_separator"; then 3924e6f085baSmrg if test -z "$hardcode_libdirs"; then 3925e6f085baSmrg hardcode_libdirs="$libdir" 3926e6f085baSmrg else 3927e6f085baSmrg # Just accumulate the unique libdirs. 3928e6f085baSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 3929e6f085baSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 3930e6f085baSmrg ;; 3931e6f085baSmrg *) 3932e6f085baSmrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 3933e6f085baSmrg ;; 3934e6f085baSmrg esac 3935e6f085baSmrg fi 3936e6f085baSmrg else 3937e6f085baSmrg eval flag=\"$hardcode_libdir_flag_spec\" 3938e6f085baSmrg dep_rpath="$dep_rpath $flag" 3939e6f085baSmrg fi 3940e6f085baSmrg elif test -n "$runpath_var"; then 3941e6f085baSmrg case "$perm_rpath " in 3942e6f085baSmrg *" $libdir "*) ;; 3943e6f085baSmrg *) perm_rpath="$perm_rpath $libdir" ;; 3944e6f085baSmrg esac 3945e6f085baSmrg fi 3946e6f085baSmrg done 3947e6f085baSmrg # Substitute the hardcoded libdirs into the rpath. 3948e6f085baSmrg if test -n "$hardcode_libdir_separator" && 3949e6f085baSmrg test -n "$hardcode_libdirs"; then 3950e6f085baSmrg libdir="$hardcode_libdirs" 3951e6f085baSmrg if test -n "$hardcode_libdir_flag_spec_ld"; then 3952e6f085baSmrg case $archive_cmds in 3953e6f085baSmrg *\$LD*) eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" ;; 3954e6f085baSmrg *) eval dep_rpath=\"$hardcode_libdir_flag_spec\" ;; 3955e6f085baSmrg esac 3956e6f085baSmrg else 3957e6f085baSmrg eval dep_rpath=\"$hardcode_libdir_flag_spec\" 3958e6f085baSmrg fi 3959e6f085baSmrg fi 3960e6f085baSmrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 3961e6f085baSmrg # We should set the runpath_var. 3962e6f085baSmrg rpath= 3963e6f085baSmrg for dir in $perm_rpath; do 3964e6f085baSmrg rpath="$rpath$dir:" 3965e6f085baSmrg done 3966e6f085baSmrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 3967e6f085baSmrg fi 3968e6f085baSmrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 3969e6f085baSmrg fi 397095b296d0Smrg 3971e6f085baSmrg shlibpath="$finalize_shlibpath" 3972e6f085baSmrg test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 3973e6f085baSmrg if test -n "$shlibpath"; then 3974e6f085baSmrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 3975e6f085baSmrg fi 397695b296d0Smrg 3977e6f085baSmrg # Get the real and link names of the library. 3978e6f085baSmrg eval shared_ext=\"$shrext_cmds\" 3979e6f085baSmrg eval library_names=\"$library_names_spec\" 3980e6f085baSmrg set dummy $library_names 3981e6f085baSmrg realname="$2" 3982e6f085baSmrg shift; shift 398395b296d0Smrg 3984e6f085baSmrg if test -n "$soname_spec"; then 3985e6f085baSmrg eval soname=\"$soname_spec\" 3986e6f085baSmrg else 3987e6f085baSmrg soname="$realname" 3988e6f085baSmrg fi 3989e6f085baSmrg if test -z "$dlname"; then 3990e6f085baSmrg dlname=$soname 3991e6f085baSmrg fi 399295b296d0Smrg 3993e6f085baSmrg lib="$output_objdir/$realname" 3994e6f085baSmrg linknames= 3995e6f085baSmrg for link 3996e6f085baSmrg do 3997e6f085baSmrg linknames="$linknames $link" 3998e6f085baSmrg done 399995b296d0Smrg 4000e6f085baSmrg # Use standard objects if they are pic 4001e6f085baSmrg test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 400295b296d0Smrg 4003e6f085baSmrg # Prepare the list of exported symbols 4004e6f085baSmrg if test -z "$export_symbols"; then 4005e6f085baSmrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 4006e6f085baSmrg $show "generating symbol list for \`$libname.la'" 4007e6f085baSmrg export_symbols="$output_objdir/$libname.exp" 4008e6f085baSmrg $run $rm $export_symbols 4009e6f085baSmrg cmds=$export_symbols_cmds 4010e6f085baSmrg save_ifs="$IFS"; IFS='~' 4011e6f085baSmrg for cmd in $cmds; do 4012e6f085baSmrg IFS="$save_ifs" 4013e6f085baSmrg eval cmd=\"$cmd\" 4014e6f085baSmrg if len=`expr "X$cmd" : ".*"` && 4015e6f085baSmrg test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then 4016e6f085baSmrg $show "$cmd" 4017e6f085baSmrg $run eval "$cmd" || exit $? 4018e6f085baSmrg skipped_export=false 4019e6f085baSmrg else 4020e6f085baSmrg # The command line is too long to execute in one step. 4021e6f085baSmrg $show "using reloadable object file for export list..." 4022e6f085baSmrg skipped_export=: 4023e6f085baSmrg # Break out early, otherwise skipped_export may be 4024e6f085baSmrg # set to false by a later but shorter cmd. 4025e6f085baSmrg break 4026e6f085baSmrg fi 4027e6f085baSmrg done 4028e6f085baSmrg IFS="$save_ifs" 4029e6f085baSmrg if test -n "$export_symbols_regex"; then 4030e6f085baSmrg $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" 4031e6f085baSmrg $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 4032e6f085baSmrg $show "$mv \"${export_symbols}T\" \"$export_symbols\"" 4033e6f085baSmrg $run eval '$mv "${export_symbols}T" "$export_symbols"' 4034e6f085baSmrg fi 4035e6f085baSmrg fi 4036e6f085baSmrg fi 403795b296d0Smrg 4038e6f085baSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 4039e6f085baSmrg $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' 4040e6f085baSmrg fi 404195b296d0Smrg 4042e6f085baSmrg tmp_deplibs= 4043e6f085baSmrg for test_deplib in $deplibs; do 4044e6f085baSmrg case " $convenience " in 4045e6f085baSmrg *" $test_deplib "*) ;; 4046e6f085baSmrg *) 4047e6f085baSmrg tmp_deplibs="$tmp_deplibs $test_deplib" 4048e6f085baSmrg ;; 4049e6f085baSmrg esac 4050e6f085baSmrg done 4051e6f085baSmrg deplibs="$tmp_deplibs" 405295b296d0Smrg 4053e6f085baSmrg if test -n "$convenience"; then 4054e6f085baSmrg if test -n "$whole_archive_flag_spec"; then 4055e6f085baSmrg save_libobjs=$libobjs 4056e6f085baSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 4057e6f085baSmrg else 4058e6f085baSmrg gentop="$output_objdir/${outputname}x" 4059e6f085baSmrg generated="$generated $gentop" 406095b296d0Smrg 4061e6f085baSmrg func_extract_archives $gentop $convenience 4062e6f085baSmrg libobjs="$libobjs $func_extract_archives_result" 4063e6f085baSmrg fi 4064e6f085baSmrg fi 4065e6f085baSmrg 4066e6f085baSmrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 4067e6f085baSmrg eval flag=\"$thread_safe_flag_spec\" 4068e6f085baSmrg linker_flags="$linker_flags $flag" 4069e6f085baSmrg fi 407095b296d0Smrg 4071e6f085baSmrg # Make a backup of the uninstalled library when relinking 4072e6f085baSmrg if test "$mode" = relink; then 4073e6f085baSmrg $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? 4074e6f085baSmrg fi 407595b296d0Smrg 4076e6f085baSmrg # Do each of the archive commands. 4077e6f085baSmrg if test "$module" = yes && test -n "$module_cmds" ; then 4078e6f085baSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 4079e6f085baSmrg eval test_cmds=\"$module_expsym_cmds\" 4080e6f085baSmrg cmds=$module_expsym_cmds 4081e6f085baSmrg else 4082e6f085baSmrg eval test_cmds=\"$module_cmds\" 4083e6f085baSmrg cmds=$module_cmds 4084e6f085baSmrg fi 4085e6f085baSmrg else 4086e6f085baSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 4087e6f085baSmrg eval test_cmds=\"$archive_expsym_cmds\" 4088e6f085baSmrg cmds=$archive_expsym_cmds 4089e6f085baSmrg else 4090e6f085baSmrg eval test_cmds=\"$archive_cmds\" 4091e6f085baSmrg cmds=$archive_cmds 4092e6f085baSmrg fi 4093e6f085baSmrg fi 409495b296d0Smrg 4095e6f085baSmrg if test "X$skipped_export" != "X:" && 4096e6f085baSmrg len=`expr "X$test_cmds" : ".*" 2>/dev/null` && 4097e6f085baSmrg test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then 4098e6f085baSmrg : 4099e6f085baSmrg else 4100e6f085baSmrg # The command line is too long to link in one step, link piecewise. 4101e6f085baSmrg $echo "creating reloadable object files..." 410295b296d0Smrg 4103e6f085baSmrg # Save the value of $output and $libobjs because we want to 4104e6f085baSmrg # use them later. If we have whole_archive_flag_spec, we 4105e6f085baSmrg # want to use save_libobjs as it was before 4106e6f085baSmrg # whole_archive_flag_spec was expanded, because we can't 4107e6f085baSmrg # assume the linker understands whole_archive_flag_spec. 4108e6f085baSmrg # This may have to be revisited, in case too many 4109e6f085baSmrg # convenience libraries get linked in and end up exceeding 4110e6f085baSmrg # the spec. 4111e6f085baSmrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 4112e6f085baSmrg save_libobjs=$libobjs 4113e6f085baSmrg fi 4114e6f085baSmrg save_output=$output 4115e6f085baSmrg output_la=`$echo "X$output" | $Xsed -e "$basename"` 411695b296d0Smrg 4117e6f085baSmrg # Clear the reloadable object creation command queue and 4118e6f085baSmrg # initialize k to one. 4119e6f085baSmrg test_cmds= 4120e6f085baSmrg concat_cmds= 4121e6f085baSmrg objlist= 4122e6f085baSmrg delfiles= 4123e6f085baSmrg last_robj= 4124e6f085baSmrg k=1 4125e6f085baSmrg output=$output_objdir/$output_la-${k}.$objext 4126e6f085baSmrg # Loop over the list of objects to be linked. 4127e6f085baSmrg for obj in $save_libobjs 4128e6f085baSmrg do 4129e6f085baSmrg eval test_cmds=\"$reload_cmds $objlist $last_robj\" 4130e6f085baSmrg if test "X$objlist" = X || 4131e6f085baSmrg { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && 4132e6f085baSmrg test "$len" -le "$max_cmd_len"; }; then 4133e6f085baSmrg objlist="$objlist $obj" 4134e6f085baSmrg else 4135e6f085baSmrg # The command $test_cmds is almost too long, add a 4136e6f085baSmrg # command to the queue. 4137e6f085baSmrg if test "$k" -eq 1 ; then 4138e6f085baSmrg # The first file doesn't have a previous command to add. 4139e6f085baSmrg eval concat_cmds=\"$reload_cmds $objlist $last_robj\" 4140e6f085baSmrg else 4141e6f085baSmrg # All subsequent reloadable object files will link in 4142e6f085baSmrg # the last one created. 4143e6f085baSmrg eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" 4144e6f085baSmrg fi 4145e6f085baSmrg last_robj=$output_objdir/$output_la-${k}.$objext 4146e6f085baSmrg k=`expr $k + 1` 4147e6f085baSmrg output=$output_objdir/$output_la-${k}.$objext 4148e6f085baSmrg objlist=$obj 4149e6f085baSmrg len=1 4150e6f085baSmrg fi 4151e6f085baSmrg done 4152e6f085baSmrg # Handle the remaining objects by creating one last 4153e6f085baSmrg # reloadable object file. All subsequent reloadable object 4154e6f085baSmrg # files will link in the last one created. 4155e6f085baSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 4156e6f085baSmrg eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" 4157e6f085baSmrg 4158e6f085baSmrg if ${skipped_export-false}; then 4159e6f085baSmrg $show "generating symbol list for \`$libname.la'" 4160e6f085baSmrg export_symbols="$output_objdir/$libname.exp" 4161e6f085baSmrg $run $rm $export_symbols 4162e6f085baSmrg libobjs=$output 4163e6f085baSmrg # Append the command to create the export file. 4164e6f085baSmrg eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" 4165e6f085baSmrg fi 4166e6f085baSmrg 4167e6f085baSmrg # Set up a command to remove the reloadable object files 4168e6f085baSmrg # after they are used. 4169e6f085baSmrg i=0 4170e6f085baSmrg while test "$i" -lt "$k" 4171e6f085baSmrg do 4172e6f085baSmrg i=`expr $i + 1` 4173e6f085baSmrg delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" 4174e6f085baSmrg done 417595b296d0Smrg 4176e6f085baSmrg $echo "creating a temporary reloadable object file: $output" 417795b296d0Smrg 4178e6f085baSmrg # Loop through the commands generated above and execute them. 4179e6f085baSmrg save_ifs="$IFS"; IFS='~' 4180e6f085baSmrg for cmd in $concat_cmds; do 4181e6f085baSmrg IFS="$save_ifs" 4182e6f085baSmrg $show "$cmd" 4183e6f085baSmrg $run eval "$cmd" || exit $? 4184e6f085baSmrg done 4185e6f085baSmrg IFS="$save_ifs" 418695b296d0Smrg 4187e6f085baSmrg libobjs=$output 4188e6f085baSmrg # Restore the value of output. 4189e6f085baSmrg output=$save_output 419095b296d0Smrg 4191e6f085baSmrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 4192e6f085baSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 4193e6f085baSmrg fi 4194e6f085baSmrg # Expand the library linking commands again to reset the 4195e6f085baSmrg # value of $libobjs for piecewise linking. 419695b296d0Smrg 4197e6f085baSmrg # Do each of the archive commands. 4198e6f085baSmrg if test "$module" = yes && test -n "$module_cmds" ; then 4199e6f085baSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 4200e6f085baSmrg cmds=$module_expsym_cmds 4201e6f085baSmrg else 4202e6f085baSmrg cmds=$module_cmds 4203e6f085baSmrg fi 4204e6f085baSmrg else 4205e6f085baSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 4206e6f085baSmrg cmds=$archive_expsym_cmds 4207e6f085baSmrg else 4208e6f085baSmrg cmds=$archive_cmds 4209e6f085baSmrg fi 4210e6f085baSmrg fi 421195b296d0Smrg 4212e6f085baSmrg # Append the command to remove the reloadable object files 4213e6f085baSmrg # to the just-reset $cmds. 4214e6f085baSmrg eval cmds=\"\$cmds~\$rm $delfiles\" 4215e6f085baSmrg fi 4216e6f085baSmrg save_ifs="$IFS"; IFS='~' 4217e6f085baSmrg for cmd in $cmds; do 4218e6f085baSmrg IFS="$save_ifs" 4219e6f085baSmrg eval cmd=\"$cmd\" 4220e6f085baSmrg $show "$cmd" 4221e6f085baSmrg $run eval "$cmd" || { 4222e6f085baSmrg lt_exit=$? 422395b296d0Smrg 4224e6f085baSmrg # Restore the uninstalled library and exit 4225e6f085baSmrg if test "$mode" = relink; then 4226e6f085baSmrg $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' 4227e6f085baSmrg fi 422895b296d0Smrg 4229e6f085baSmrg exit $lt_exit 4230e6f085baSmrg } 4231e6f085baSmrg done 4232e6f085baSmrg IFS="$save_ifs" 4233e6f085baSmrg 4234e6f085baSmrg # Restore the uninstalled library and exit 4235e6f085baSmrg if test "$mode" = relink; then 4236e6f085baSmrg $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? 4237e6f085baSmrg 4238e6f085baSmrg if test -n "$convenience"; then 4239e6f085baSmrg if test -z "$whole_archive_flag_spec"; then 4240e6f085baSmrg $show "${rm}r $gentop" 4241e6f085baSmrg $run ${rm}r "$gentop" 4242e6f085baSmrg fi 4243e6f085baSmrg fi 4244e6f085baSmrg 4245e6f085baSmrg exit $EXIT_SUCCESS 4246e6f085baSmrg fi 4247e6f085baSmrg 4248e6f085baSmrg # Create links to the real library. 4249e6f085baSmrg for linkname in $linknames; do 4250e6f085baSmrg if test "$realname" != "$linkname"; then 4251e6f085baSmrg $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" 4252e6f085baSmrg $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? 4253e6f085baSmrg fi 4254e6f085baSmrg done 4255e6f085baSmrg 4256e6f085baSmrg # If -module or -export-dynamic was specified, set the dlname. 4257e6f085baSmrg if test "$module" = yes || test "$export_dynamic" = yes; then 4258e6f085baSmrg # On all known operating systems, these are identical. 4259e6f085baSmrg dlname="$soname" 4260e6f085baSmrg fi 4261e6f085baSmrg fi 426239713583Smrg ;; 426395b296d0Smrg 4264e6f085baSmrg obj) 4265e6f085baSmrg case " $deplibs" in 4266e6f085baSmrg *\ -l* | *\ -L*) 4267e6f085baSmrg $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 ;; 4268e6f085baSmrg esac 426995b296d0Smrg 4270e6f085baSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 4271e6f085baSmrg $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 4272e6f085baSmrg fi 427339713583Smrg 4274e6f085baSmrg if test -n "$rpath"; then 4275e6f085baSmrg $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 4276e6f085baSmrg fi 4277e6f085baSmrg 4278e6f085baSmrg if test -n "$xrpath"; then 4279e6f085baSmrg $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 4280e6f085baSmrg fi 4281e6f085baSmrg 4282e6f085baSmrg if test -n "$vinfo"; then 4283e6f085baSmrg $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 4284e6f085baSmrg fi 4285e6f085baSmrg 4286e6f085baSmrg if test -n "$release"; then 4287e6f085baSmrg $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 4288e6f085baSmrg fi 4289e6f085baSmrg 4290e6f085baSmrg case $output in 4291e6f085baSmrg *.lo) 4292e6f085baSmrg if test -n "$objs$old_deplibs"; then 4293e6f085baSmrg $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 4294e6f085baSmrg exit $EXIT_FAILURE 4295e6f085baSmrg fi 4296e6f085baSmrg libobj="$output" 4297e6f085baSmrg obj=`$echo "X$output" | $Xsed -e "$lo2o"` 429839713583Smrg ;; 4299e6f085baSmrg *) 4300e6f085baSmrg libobj= 4301e6f085baSmrg obj="$output" 430239713583Smrg ;; 430339713583Smrg esac 430495b296d0Smrg 4305e6f085baSmrg # Delete the old objects. 4306e6f085baSmrg $run $rm $obj $libobj 430795b296d0Smrg 4308e6f085baSmrg # Objects from convenience libraries. This assumes 4309e6f085baSmrg # single-version convenience libraries. Whenever we create 4310e6f085baSmrg # different ones for PIC/non-PIC, this we'll have to duplicate 4311e6f085baSmrg # the extraction. 4312e6f085baSmrg reload_conv_objs= 4313e6f085baSmrg gentop= 4314e6f085baSmrg # reload_cmds runs $LD directly, so let us get rid of 4315e6f085baSmrg # -Wl from whole_archive_flag_spec and hope we can get by with 4316e6f085baSmrg # turning comma into space.. 4317e6f085baSmrg wl= 431895b296d0Smrg 4319e6f085baSmrg if test -n "$convenience"; then 4320e6f085baSmrg if test -n "$whole_archive_flag_spec"; then 4321e6f085baSmrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 4322e6f085baSmrg reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` 4323e6f085baSmrg else 4324e6f085baSmrg gentop="$output_objdir/${obj}x" 4325e6f085baSmrg generated="$generated $gentop" 432695b296d0Smrg 4327e6f085baSmrg func_extract_archives $gentop $convenience 4328e6f085baSmrg reload_conv_objs="$reload_objs $func_extract_archives_result" 4329e6f085baSmrg fi 4330e6f085baSmrg fi 433195b296d0Smrg 4332e6f085baSmrg # Create the old-style object. 4333e6f085baSmrg reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 433495b296d0Smrg 4335e6f085baSmrg output="$obj" 4336e6f085baSmrg cmds=$reload_cmds 4337e6f085baSmrg save_ifs="$IFS"; IFS='~' 4338e6f085baSmrg for cmd in $cmds; do 4339e6f085baSmrg IFS="$save_ifs" 4340e6f085baSmrg eval cmd=\"$cmd\" 4341e6f085baSmrg $show "$cmd" 4342e6f085baSmrg $run eval "$cmd" || exit $? 4343e6f085baSmrg done 4344e6f085baSmrg IFS="$save_ifs" 434595b296d0Smrg 4346e6f085baSmrg # Exit if we aren't doing a library object file. 4347e6f085baSmrg if test -z "$libobj"; then 4348e6f085baSmrg if test -n "$gentop"; then 4349e6f085baSmrg $show "${rm}r $gentop" 4350e6f085baSmrg $run ${rm}r $gentop 4351e6f085baSmrg fi 435295b296d0Smrg 4353e6f085baSmrg exit $EXIT_SUCCESS 4354e6f085baSmrg fi 435595b296d0Smrg 4356e6f085baSmrg if test "$build_libtool_libs" != yes; then 4357e6f085baSmrg if test -n "$gentop"; then 4358e6f085baSmrg $show "${rm}r $gentop" 4359e6f085baSmrg $run ${rm}r $gentop 4360e6f085baSmrg fi 436195b296d0Smrg 4362e6f085baSmrg # Create an invalid libtool object if no PIC, so that we don't 4363e6f085baSmrg # accidentally link it into a program. 4364e6f085baSmrg # $show "echo timestamp > $libobj" 4365e6f085baSmrg # $run eval "echo timestamp > $libobj" || exit $? 4366e6f085baSmrg exit $EXIT_SUCCESS 4367e6f085baSmrg fi 436895b296d0Smrg 4369e6f085baSmrg if test -n "$pic_flag" || test "$pic_mode" != default; then 4370e6f085baSmrg # Only do commands if we really have different PIC objects. 4371e6f085baSmrg reload_objs="$libobjs $reload_conv_objs" 4372e6f085baSmrg output="$libobj" 4373e6f085baSmrg cmds=$reload_cmds 4374e6f085baSmrg save_ifs="$IFS"; IFS='~' 4375e6f085baSmrg for cmd in $cmds; do 4376e6f085baSmrg IFS="$save_ifs" 4377e6f085baSmrg eval cmd=\"$cmd\" 4378e6f085baSmrg $show "$cmd" 4379e6f085baSmrg $run eval "$cmd" || exit $? 4380e6f085baSmrg done 4381e6f085baSmrg IFS="$save_ifs" 4382e6f085baSmrg fi 438395b296d0Smrg 4384e6f085baSmrg if test -n "$gentop"; then 4385e6f085baSmrg $show "${rm}r $gentop" 4386e6f085baSmrg $run ${rm}r $gentop 4387e6f085baSmrg fi 438895b296d0Smrg 4389e6f085baSmrg exit $EXIT_SUCCESS 4390e6f085baSmrg ;; 439195b296d0Smrg 4392e6f085baSmrg prog) 4393e6f085baSmrg case $host in 4394e6f085baSmrg *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; 4395e6f085baSmrg esac 4396e6f085baSmrg if test -n "$vinfo"; then 4397e6f085baSmrg $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 4398e6f085baSmrg fi 439995b296d0Smrg 4400e6f085baSmrg if test -n "$release"; then 4401e6f085baSmrg $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 4402e6f085baSmrg fi 440395b296d0Smrg 4404e6f085baSmrg if test "$preload" = yes; then 4405e6f085baSmrg if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && 4406e6f085baSmrg test "$dlopen_self_static" = unknown; then 4407e6f085baSmrg $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." 440839713583Smrg fi 4409e6f085baSmrg fi 441095b296d0Smrg 4411e6f085baSmrg case $host in 4412e6f085baSmrg *-*-rhapsody* | *-*-darwin1.[012]) 4413e6f085baSmrg # On Rhapsody replace the C library is the System framework 4414e6f085baSmrg compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` 4415e6f085baSmrg finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` 441639713583Smrg ;; 4417e6f085baSmrg esac 441895b296d0Smrg 4419e6f085baSmrg case $host in 4420e6f085baSmrg *darwin*) 4421e6f085baSmrg # Don't allow lazy linking, it breaks C++ global constructors 4422e6f085baSmrg if test "$tagname" = CXX ; then 4423e6f085baSmrg compile_command="$compile_command ${wl}-bind_at_load" 4424e6f085baSmrg finalize_command="$finalize_command ${wl}-bind_at_load" 4425e6f085baSmrg fi 4426e6f085baSmrg ;; 4427e6f085baSmrg esac 442895b296d0Smrg 442995b296d0Smrg 4430e6f085baSmrg # move library search paths that coincide with paths to not yet 4431e6f085baSmrg # installed libraries to the beginning of the library search list 4432e6f085baSmrg new_libs= 4433e6f085baSmrg for path in $notinst_path; do 4434e6f085baSmrg case " $new_libs " in 4435e6f085baSmrg *" -L$path/$objdir "*) ;; 4436e6f085baSmrg *) 4437e6f085baSmrg case " $compile_deplibs " in 4438e6f085baSmrg *" -L$path/$objdir "*) 4439e6f085baSmrg new_libs="$new_libs -L$path/$objdir" ;; 4440e6f085baSmrg esac 4441e6f085baSmrg ;; 4442e6f085baSmrg esac 4443e6f085baSmrg done 4444e6f085baSmrg for deplib in $compile_deplibs; do 4445e6f085baSmrg case $deplib in 4446e6f085baSmrg -L*) 4447e6f085baSmrg case " $new_libs " in 4448e6f085baSmrg *" $deplib "*) ;; 4449e6f085baSmrg *) new_libs="$new_libs $deplib" ;; 4450e6f085baSmrg esac 4451e6f085baSmrg ;; 4452e6f085baSmrg *) new_libs="$new_libs $deplib" ;; 4453e6f085baSmrg esac 4454e6f085baSmrg done 4455e6f085baSmrg compile_deplibs="$new_libs" 445695b296d0Smrg 445795b296d0Smrg 4458e6f085baSmrg compile_command="$compile_command $compile_deplibs" 4459e6f085baSmrg finalize_command="$finalize_command $finalize_deplibs" 446095b296d0Smrg 4461e6f085baSmrg if test -n "$rpath$xrpath"; then 4462e6f085baSmrg # If the user specified any rpath flags, then add them. 4463e6f085baSmrg for libdir in $rpath $xrpath; do 4464e6f085baSmrg # This is the magic to use -rpath. 4465e6f085baSmrg case "$finalize_rpath " in 4466e6f085baSmrg *" $libdir "*) ;; 4467e6f085baSmrg *) finalize_rpath="$finalize_rpath $libdir" ;; 4468e6f085baSmrg esac 4469e6f085baSmrg done 4470e6f085baSmrg fi 447195b296d0Smrg 4472e6f085baSmrg # Now hardcode the library paths 4473e6f085baSmrg rpath= 4474e6f085baSmrg hardcode_libdirs= 4475e6f085baSmrg for libdir in $compile_rpath $finalize_rpath; do 4476e6f085baSmrg if test -n "$hardcode_libdir_flag_spec"; then 4477e6f085baSmrg if test -n "$hardcode_libdir_separator"; then 4478e6f085baSmrg if test -z "$hardcode_libdirs"; then 4479e6f085baSmrg hardcode_libdirs="$libdir" 4480e6f085baSmrg else 4481e6f085baSmrg # Just accumulate the unique libdirs. 4482e6f085baSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 4483e6f085baSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 4484e6f085baSmrg ;; 4485e6f085baSmrg *) 4486e6f085baSmrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 4487e6f085baSmrg ;; 4488e6f085baSmrg esac 4489e6f085baSmrg fi 449039713583Smrg else 4491e6f085baSmrg eval flag=\"$hardcode_libdir_flag_spec\" 4492e6f085baSmrg rpath="$rpath $flag" 449339713583Smrg fi 4494e6f085baSmrg elif test -n "$runpath_var"; then 4495e6f085baSmrg case "$perm_rpath " in 4496e6f085baSmrg *" $libdir "*) ;; 4497e6f085baSmrg *) perm_rpath="$perm_rpath $libdir" ;; 4498e6f085baSmrg esac 449939713583Smrg fi 450039713583Smrg case $host in 4501e6f085baSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) 4502e6f085baSmrg testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` 450339713583Smrg case :$dllsearchpath: in 4504e6f085baSmrg *":$libdir:"*) ;; 4505e6f085baSmrg *) dllsearchpath="$dllsearchpath:$libdir";; 450639713583Smrg esac 450739713583Smrg case :$dllsearchpath: in 450839713583Smrg *":$testbindir:"*) ;; 450939713583Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 451039713583Smrg esac 451139713583Smrg ;; 451239713583Smrg esac 4513e6f085baSmrg done 4514e6f085baSmrg # Substitute the hardcoded libdirs into the rpath. 4515e6f085baSmrg if test -n "$hardcode_libdir_separator" && 4516e6f085baSmrg test -n "$hardcode_libdirs"; then 4517e6f085baSmrg libdir="$hardcode_libdirs" 4518e6f085baSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 4519e6f085baSmrg fi 4520e6f085baSmrg compile_rpath="$rpath" 452195b296d0Smrg 4522e6f085baSmrg rpath= 4523e6f085baSmrg hardcode_libdirs= 4524e6f085baSmrg for libdir in $finalize_rpath; do 4525e6f085baSmrg if test -n "$hardcode_libdir_flag_spec"; then 4526e6f085baSmrg if test -n "$hardcode_libdir_separator"; then 4527e6f085baSmrg if test -z "$hardcode_libdirs"; then 4528e6f085baSmrg hardcode_libdirs="$libdir" 4529e6f085baSmrg else 4530e6f085baSmrg # Just accumulate the unique libdirs. 4531e6f085baSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 4532e6f085baSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 4533e6f085baSmrg ;; 4534e6f085baSmrg *) 4535e6f085baSmrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 4536e6f085baSmrg ;; 4537e6f085baSmrg esac 4538e6f085baSmrg fi 4539e6f085baSmrg else 4540e6f085baSmrg eval flag=\"$hardcode_libdir_flag_spec\" 4541e6f085baSmrg rpath="$rpath $flag" 4542e6f085baSmrg fi 4543e6f085baSmrg elif test -n "$runpath_var"; then 4544e6f085baSmrg case "$finalize_perm_rpath " in 4545e6f085baSmrg *" $libdir "*) ;; 4546e6f085baSmrg *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; 454739713583Smrg esac 454839713583Smrg fi 4549e6f085baSmrg done 4550e6f085baSmrg # Substitute the hardcoded libdirs into the rpath. 4551e6f085baSmrg if test -n "$hardcode_libdir_separator" && 4552e6f085baSmrg test -n "$hardcode_libdirs"; then 4553e6f085baSmrg libdir="$hardcode_libdirs" 4554e6f085baSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 4555e6f085baSmrg fi 4556e6f085baSmrg finalize_rpath="$rpath" 455795b296d0Smrg 4558e6f085baSmrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 4559e6f085baSmrg # Transform all the library objects into standard objects. 4560e6f085baSmrg compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 4561e6f085baSmrg finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 4562e6f085baSmrg fi 456395b296d0Smrg 4564e6f085baSmrg dlsyms= 4565e6f085baSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 4566e6f085baSmrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 4567e6f085baSmrg dlsyms="${outputname}S.c" 4568e6f085baSmrg else 4569e6f085baSmrg $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 4570e6f085baSmrg fi 4571e6f085baSmrg fi 457295b296d0Smrg 4573e6f085baSmrg if test -n "$dlsyms"; then 4574e6f085baSmrg case $dlsyms in 4575e6f085baSmrg "") ;; 4576e6f085baSmrg *.c) 4577e6f085baSmrg # Discover the nlist of each of the dlfiles. 4578e6f085baSmrg nlist="$output_objdir/${outputname}.nm" 457995b296d0Smrg 4580e6f085baSmrg $show "$rm $nlist ${nlist}S ${nlist}T" 4581e6f085baSmrg $run $rm "$nlist" "${nlist}S" "${nlist}T" 458295b296d0Smrg 4583e6f085baSmrg # Parse the name list into a source file. 4584e6f085baSmrg $show "creating $output_objdir/$dlsyms" 458595b296d0Smrg 4586e6f085baSmrg test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ 4587e6f085baSmrg/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ 4588e6f085baSmrg/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ 458995b296d0Smrg 4590e6f085baSmrg#ifdef __cplusplus 4591e6f085baSmrgextern \"C\" { 4592e6f085baSmrg#endif 459395b296d0Smrg 4594e6f085baSmrg/* Prevent the only kind of declaration conflicts we can make. */ 4595e6f085baSmrg#define lt_preloaded_symbols some_other_symbol 459695b296d0Smrg 4597e6f085baSmrg/* External symbol declarations for the compiler. */\ 4598e6f085baSmrg" 459995b296d0Smrg 4600e6f085baSmrg if test "$dlself" = yes; then 4601e6f085baSmrg $show "generating symbol list for \`$output'" 460295b296d0Smrg 4603e6f085baSmrg test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" 460495b296d0Smrg 4605e6f085baSmrg # Add our own program objects to the symbol list. 4606e6f085baSmrg progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` 4607e6f085baSmrg for arg in $progfiles; do 4608e6f085baSmrg $show "extracting global C symbols from \`$arg'" 4609e6f085baSmrg $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" 4610e6f085baSmrg done 461195b296d0Smrg 4612e6f085baSmrg if test -n "$exclude_expsyms"; then 4613e6f085baSmrg $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 4614e6f085baSmrg $run eval '$mv "$nlist"T "$nlist"' 4615e6f085baSmrg fi 461695b296d0Smrg 4617e6f085baSmrg if test -n "$export_symbols_regex"; then 4618e6f085baSmrg $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 4619e6f085baSmrg $run eval '$mv "$nlist"T "$nlist"' 4620e6f085baSmrg fi 462195b296d0Smrg 4622e6f085baSmrg # Prepare the list of exported symbols 4623e6f085baSmrg if test -z "$export_symbols"; then 4624e6f085baSmrg export_symbols="$output_objdir/$outputname.exp" 4625e6f085baSmrg $run $rm $export_symbols 4626e6f085baSmrg $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 4627e6f085baSmrg case $host in 4628e6f085baSmrg *cygwin* | *mingw* ) 4629e6f085baSmrg $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4630e6f085baSmrg $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 4631e6f085baSmrg ;; 4632e6f085baSmrg esac 4633e6f085baSmrg else 4634e6f085baSmrg $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 4635e6f085baSmrg $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 4636e6f085baSmrg $run eval 'mv "$nlist"T "$nlist"' 4637e6f085baSmrg case $host in 4638e6f085baSmrg *cygwin* | *mingw* ) 4639e6f085baSmrg $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 4640e6f085baSmrg $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 4641e6f085baSmrg ;; 4642e6f085baSmrg esac 4643e6f085baSmrg fi 4644e6f085baSmrg fi 464595b296d0Smrg 4646e6f085baSmrg for arg in $dlprefiles; do 4647e6f085baSmrg $show "extracting global C symbols from \`$arg'" 4648e6f085baSmrg name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` 4649e6f085baSmrg $run eval '$echo ": $name " >> "$nlist"' 4650e6f085baSmrg $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" 4651e6f085baSmrg done 465295b296d0Smrg 4653e6f085baSmrg if test -z "$run"; then 4654e6f085baSmrg # Make sure we have at least an empty file. 4655e6f085baSmrg test -f "$nlist" || : > "$nlist" 465695b296d0Smrg 4657e6f085baSmrg if test -n "$exclude_expsyms"; then 4658e6f085baSmrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 4659e6f085baSmrg $mv "$nlist"T "$nlist" 4660e6f085baSmrg fi 466195b296d0Smrg 4662e6f085baSmrg # Try sorting and uniquifying the output. 4663e6f085baSmrg if grep -v "^: " < "$nlist" | 4664e6f085baSmrg if sort -k 3 </dev/null >/dev/null 2>&1; then 4665e6f085baSmrg sort -k 3 4666e6f085baSmrg else 4667e6f085baSmrg sort +2 4668e6f085baSmrg fi | 4669e6f085baSmrg uniq > "$nlist"S; then 4670e6f085baSmrg : 4671e6f085baSmrg else 4672e6f085baSmrg grep -v "^: " < "$nlist" > "$nlist"S 4673e6f085baSmrg fi 467495b296d0Smrg 4675e6f085baSmrg if test -f "$nlist"S; then 4676e6f085baSmrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' 4677e6f085baSmrg else 4678e6f085baSmrg $echo '/* NONE */' >> "$output_objdir/$dlsyms" 4679e6f085baSmrg fi 468095b296d0Smrg 4681e6f085baSmrg $echo >> "$output_objdir/$dlsyms" "\ 468295b296d0Smrg 4683e6f085baSmrg#undef lt_preloaded_symbols 468495b296d0Smrg 4685e6f085baSmrg#if defined (__STDC__) && __STDC__ 4686e6f085baSmrg# define lt_ptr void * 4687e6f085baSmrg#else 4688e6f085baSmrg# define lt_ptr char * 4689e6f085baSmrg# define const 4690e6f085baSmrg#endif 469195b296d0Smrg 4692e6f085baSmrg/* The mapping between symbol names and symbols. */ 4693e6f085baSmrg" 469495b296d0Smrg 4695e6f085baSmrg case $host in 4696e6f085baSmrg *cygwin* | *mingw* ) 4697e6f085baSmrg $echo >> "$output_objdir/$dlsyms" "\ 4698e6f085baSmrg/* DATA imports from DLLs on WIN32 can't be const, because 4699e6f085baSmrg runtime relocations are performed -- see ld's documentation 4700e6f085baSmrg on pseudo-relocs */ 4701e6f085baSmrgstruct { 4702e6f085baSmrg" 4703e6f085baSmrg ;; 4704e6f085baSmrg * ) 4705e6f085baSmrg $echo >> "$output_objdir/$dlsyms" "\ 4706e6f085baSmrgconst struct { 4707e6f085baSmrg" 4708e6f085baSmrg ;; 4709e6f085baSmrg esac 471095b296d0Smrg 471195b296d0Smrg 4712e6f085baSmrg $echo >> "$output_objdir/$dlsyms" "\ 4713e6f085baSmrg const char *name; 4714e6f085baSmrg lt_ptr address; 4715e6f085baSmrg} 4716e6f085baSmrglt_preloaded_symbols[] = 4717e6f085baSmrg{\ 4718e6f085baSmrg" 471995b296d0Smrg 4720e6f085baSmrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" 472195b296d0Smrg 4722e6f085baSmrg $echo >> "$output_objdir/$dlsyms" "\ 4723e6f085baSmrg {0, (lt_ptr) 0} 4724e6f085baSmrg}; 472595b296d0Smrg 4726e6f085baSmrg/* This works around a problem in FreeBSD linker */ 4727e6f085baSmrg#ifdef FREEBSD_WORKAROUND 4728e6f085baSmrgstatic const void *lt_preloaded_setup() { 4729e6f085baSmrg return lt_preloaded_symbols; 4730e6f085baSmrg} 4731e6f085baSmrg#endif 473295b296d0Smrg 4733e6f085baSmrg#ifdef __cplusplus 4734e6f085baSmrg} 4735e6f085baSmrg#endif\ 4736e6f085baSmrg" 473739713583Smrg fi 473895b296d0Smrg 4739e6f085baSmrg pic_flag_for_symtable= 4740e6f085baSmrg case $host in 4741e6f085baSmrg # compiling the symbol table file with pic_flag works around 4742e6f085baSmrg # a FreeBSD bug that causes programs to crash when -lm is 4743e6f085baSmrg # linked before any other PIC object. But we must not use 4744e6f085baSmrg # pic_flag when linking with -static. The problem exists in 4745e6f085baSmrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 4746e6f085baSmrg *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 4747e6f085baSmrg case "$compile_command " in 4748e6f085baSmrg *" -static "*) ;; 4749e6f085baSmrg *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; 4750e6f085baSmrg esac;; 4751e6f085baSmrg *-*-hpux*) 4752e6f085baSmrg case "$compile_command " in 4753e6f085baSmrg *" -static "*) ;; 4754e6f085baSmrg *) pic_flag_for_symtable=" $pic_flag";; 4755e6f085baSmrg esac 4756e6f085baSmrg esac 475795b296d0Smrg 4758e6f085baSmrg # Now compile the dynamic symbol file. 4759e6f085baSmrg $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" 4760e6f085baSmrg $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? 476195b296d0Smrg 4762e6f085baSmrg # Clean up the generated files. 4763e6f085baSmrg $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" 4764e6f085baSmrg $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" 476595b296d0Smrg 4766e6f085baSmrg # Transform the symbol file into the correct name. 4767e6f085baSmrg case $host in 4768e6f085baSmrg *cygwin* | *mingw* ) 4769e6f085baSmrg if test -f "$output_objdir/${outputname}.def" ; then 4770e6f085baSmrg compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` 4771e6f085baSmrg finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` 4772e6f085baSmrg else 4773e6f085baSmrg compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` 4774e6f085baSmrg finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` 4775e6f085baSmrg fi 4776e6f085baSmrg ;; 4777e6f085baSmrg * ) 4778e6f085baSmrg compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` 4779e6f085baSmrg finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` 4780e6f085baSmrg ;; 4781e6f085baSmrg esac 4782e6f085baSmrg ;; 4783e6f085baSmrg *) 4784e6f085baSmrg $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 4785e6f085baSmrg exit $EXIT_FAILURE 4786e6f085baSmrg ;; 4787e6f085baSmrg esac 4788e6f085baSmrg else 4789e6f085baSmrg # We keep going just in case the user didn't refer to 4790e6f085baSmrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 4791e6f085baSmrg # really was required. 479295b296d0Smrg 4793e6f085baSmrg # Nullify the symbol file. 4794e6f085baSmrg compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` 4795e6f085baSmrg finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` 4796e6f085baSmrg fi 479795b296d0Smrg 4798e6f085baSmrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 4799e6f085baSmrg # Replace the output file specification. 4800e6f085baSmrg compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP` 4801e6f085baSmrg link_command="$compile_command$compile_rpath" 480239713583Smrg 4803e6f085baSmrg # We have no uninstalled library dependencies, so finalize right now. 4804e6f085baSmrg $show "$link_command" 4805e6f085baSmrg $run eval "$link_command" 4806e6f085baSmrg exit_status=$? 480739713583Smrg 4808e6f085baSmrg # Delete the generated files. 4809e6f085baSmrg if test -n "$dlsyms"; then 4810e6f085baSmrg $show "$rm $output_objdir/${outputname}S.${objext}" 4811e6f085baSmrg $run $rm "$output_objdir/${outputname}S.${objext}" 481239713583Smrg fi 481339713583Smrg 4814e6f085baSmrg exit $exit_status 4815e6f085baSmrg fi 481639713583Smrg 4817e6f085baSmrg if test -n "$shlibpath_var"; then 4818e6f085baSmrg # We should set the shlibpath_var 4819e6f085baSmrg rpath= 4820e6f085baSmrg for dir in $temp_rpath; do 4821e6f085baSmrg case $dir in 4822e6f085baSmrg [\\/]* | [A-Za-z]:[\\/]*) 4823e6f085baSmrg # Absolute path. 4824e6f085baSmrg rpath="$rpath$dir:" 4825e6f085baSmrg ;; 4826e6f085baSmrg *) 4827e6f085baSmrg # Relative path: add a thisdir entry. 4828e6f085baSmrg rpath="$rpath\$thisdir/$dir:" 4829e6f085baSmrg ;; 4830e6f085baSmrg esac 4831e6f085baSmrg done 4832e6f085baSmrg temp_rpath="$rpath" 483339713583Smrg fi 483439713583Smrg 4835e6f085baSmrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 4836e6f085baSmrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 4837e6f085baSmrg fi 4838e6f085baSmrg if test -n "$finalize_shlibpath"; then 4839e6f085baSmrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 4840e6f085baSmrg fi 484139713583Smrg 4842e6f085baSmrg compile_var= 4843e6f085baSmrg finalize_var= 4844e6f085baSmrg if test -n "$runpath_var"; then 4845e6f085baSmrg if test -n "$perm_rpath"; then 4846e6f085baSmrg # We should set the runpath_var. 4847e6f085baSmrg rpath= 4848e6f085baSmrg for dir in $perm_rpath; do 4849e6f085baSmrg rpath="$rpath$dir:" 4850e6f085baSmrg done 4851e6f085baSmrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 4852e6f085baSmrg fi 4853e6f085baSmrg if test -n "$finalize_perm_rpath"; then 4854e6f085baSmrg # We should set the runpath_var. 4855e6f085baSmrg rpath= 4856e6f085baSmrg for dir in $finalize_perm_rpath; do 4857e6f085baSmrg rpath="$rpath$dir:" 4858e6f085baSmrg done 4859e6f085baSmrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 4860e6f085baSmrg fi 4861e6f085baSmrg fi 486239713583Smrg 4863e6f085baSmrg if test "$no_install" = yes; then 4864e6f085baSmrg # We don't need to create a wrapper script. 4865e6f085baSmrg link_command="$compile_var$compile_command$compile_rpath" 4866e6f085baSmrg # Replace the output file specification. 4867e6f085baSmrg link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` 4868e6f085baSmrg # Delete the old output file. 4869e6f085baSmrg $run $rm $output 4870e6f085baSmrg # Link the executable and exit 4871e6f085baSmrg $show "$link_command" 4872e6f085baSmrg $run eval "$link_command" || exit $? 4873e6f085baSmrg exit $EXIT_SUCCESS 4874e6f085baSmrg fi 487539713583Smrg 4876e6f085baSmrg if test "$hardcode_action" = relink; then 4877e6f085baSmrg # Fast installation is not supported 4878e6f085baSmrg link_command="$compile_var$compile_command$compile_rpath" 4879e6f085baSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 488039713583Smrg 4881e6f085baSmrg $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 4882e6f085baSmrg $echo "$modename: \`$output' will be relinked during installation" 1>&2 4883e6f085baSmrg else 4884e6f085baSmrg if test "$fast_install" != no; then 4885e6f085baSmrg link_command="$finalize_var$compile_command$finalize_rpath" 4886e6f085baSmrg if test "$fast_install" = yes; then 4887e6f085baSmrg relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP` 4888e6f085baSmrg else 4889e6f085baSmrg # fast_install is set to needless 4890e6f085baSmrg relink_command= 4891e6f085baSmrg fi 4892e6f085baSmrg else 4893e6f085baSmrg link_command="$compile_var$compile_command$compile_rpath" 4894e6f085baSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 4895e6f085baSmrg fi 489639713583Smrg fi 489739713583Smrg 4898e6f085baSmrg # Replace the output file specification. 4899e6f085baSmrg link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 490039713583Smrg 4901e6f085baSmrg # Delete the old output files. 4902e6f085baSmrg $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname 490339713583Smrg 4904e6f085baSmrg $show "$link_command" 4905e6f085baSmrg $run eval "$link_command" || exit $? 490639713583Smrg 4907e6f085baSmrg # Now create the wrapper script. 4908e6f085baSmrg $show "creating $output" 490939713583Smrg 4910e6f085baSmrg # Quote the relink command for shipping. 4911e6f085baSmrg if test -n "$relink_command"; then 4912e6f085baSmrg # Preserve any variables that may affect compiler behavior 4913e6f085baSmrg for var in $variables_saved_for_relink; do 4914e6f085baSmrg if eval test -z \"\${$var+set}\"; then 4915e6f085baSmrg relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" 4916e6f085baSmrg elif eval var_value=\$$var; test -z "$var_value"; then 4917e6f085baSmrg relink_command="$var=; export $var; $relink_command" 4918e6f085baSmrg else 4919e6f085baSmrg var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` 4920e6f085baSmrg relink_command="$var=\"$var_value\"; export $var; $relink_command" 4921e6f085baSmrg fi 492239713583Smrg done 4923e6f085baSmrg relink_command="(cd `pwd`; $relink_command)" 4924e6f085baSmrg relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` 492539713583Smrg fi 492639713583Smrg 4927e6f085baSmrg # Quote $echo for shipping. 4928e6f085baSmrg if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then 4929e6f085baSmrg case $progpath in 4930e6f085baSmrg [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; 4931e6f085baSmrg *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; 493239713583Smrg esac 4933e6f085baSmrg qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` 4934e6f085baSmrg else 4935e6f085baSmrg qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` 493639713583Smrg fi 493739713583Smrg 4938e6f085baSmrg # Only actually do things if our run command is non-null. 4939e6f085baSmrg if test -z "$run"; then 4940e6f085baSmrg # win32 will think the script is a binary if it has 4941e6f085baSmrg # a .exe suffix, so we strip it off here. 4942e6f085baSmrg case $output in 4943e6f085baSmrg *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; 4944e6f085baSmrg esac 4945e6f085baSmrg # test for cygwin because mv fails w/o .exe extensions 4946e6f085baSmrg case $host in 4947e6f085baSmrg *cygwin*) 4948e6f085baSmrg exeext=.exe 4949e6f085baSmrg outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; 4950e6f085baSmrg *) exeext= ;; 4951e6f085baSmrg esac 4952e6f085baSmrg case $host in 4953e6f085baSmrg *cygwin* | *mingw* ) 4954e6f085baSmrg output_name=`basename $output` 4955e6f085baSmrg output_path=`dirname $output` 4956e6f085baSmrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 4957e6f085baSmrg cwrapper="$output_path/$output_name.exe" 4958e6f085baSmrg $rm $cwrappersource $cwrapper 4959e6f085baSmrg trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 496039713583Smrg 4961e6f085baSmrg cat > $cwrappersource <<EOF 496239713583Smrg 4963e6f085baSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 4964e6f085baSmrg Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP 496539713583Smrg 4966e6f085baSmrg The $output program cannot be directly executed until all the libtool 4967e6f085baSmrg libraries that it depends on are installed. 496839713583Smrg 4969e6f085baSmrg This wrapper executable should never be moved out of the build directory. 4970e6f085baSmrg If it is, it will not operate correctly. 497139713583Smrg 4972e6f085baSmrg Currently, it simply execs the wrapper *script* "/bin/sh $output", 4973e6f085baSmrg but could eventually absorb all of the scripts functionality and 4974e6f085baSmrg exec $objdir/$outputname directly. 4975e6f085baSmrg*/ 4976e6f085baSmrgEOF 4977e6f085baSmrg cat >> $cwrappersource<<"EOF" 4978e6f085baSmrg#include <stdio.h> 4979e6f085baSmrg#include <stdlib.h> 4980e6f085baSmrg#include <unistd.h> 4981e6f085baSmrg#include <malloc.h> 4982e6f085baSmrg#include <stdarg.h> 4983e6f085baSmrg#include <assert.h> 4984e6f085baSmrg#include <string.h> 4985e6f085baSmrg#include <ctype.h> 4986e6f085baSmrg#include <sys/stat.h> 498739713583Smrg 4988e6f085baSmrg#if defined(PATH_MAX) 4989e6f085baSmrg# define LT_PATHMAX PATH_MAX 4990e6f085baSmrg#elif defined(MAXPATHLEN) 4991e6f085baSmrg# define LT_PATHMAX MAXPATHLEN 4992e6f085baSmrg#else 4993e6f085baSmrg# define LT_PATHMAX 1024 4994e6f085baSmrg#endif 499539713583Smrg 4996e6f085baSmrg#ifndef DIR_SEPARATOR 4997e6f085baSmrg# define DIR_SEPARATOR '/' 4998e6f085baSmrg# define PATH_SEPARATOR ':' 4999e6f085baSmrg#endif 500039713583Smrg 5001e6f085baSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 5002e6f085baSmrg defined (__OS2__) 5003e6f085baSmrg# define HAVE_DOS_BASED_FILE_SYSTEM 5004e6f085baSmrg# ifndef DIR_SEPARATOR_2 5005e6f085baSmrg# define DIR_SEPARATOR_2 '\\' 5006e6f085baSmrg# endif 5007e6f085baSmrg# ifndef PATH_SEPARATOR_2 5008e6f085baSmrg# define PATH_SEPARATOR_2 ';' 5009e6f085baSmrg# endif 5010e6f085baSmrg#endif 501139713583Smrg 5012e6f085baSmrg#ifndef DIR_SEPARATOR_2 5013e6f085baSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 5014e6f085baSmrg#else /* DIR_SEPARATOR_2 */ 5015e6f085baSmrg# define IS_DIR_SEPARATOR(ch) \ 5016e6f085baSmrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 5017e6f085baSmrg#endif /* DIR_SEPARATOR_2 */ 501839713583Smrg 5019e6f085baSmrg#ifndef PATH_SEPARATOR_2 5020e6f085baSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 5021e6f085baSmrg#else /* PATH_SEPARATOR_2 */ 5022e6f085baSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 5023e6f085baSmrg#endif /* PATH_SEPARATOR_2 */ 502439713583Smrg 5025e6f085baSmrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 5026e6f085baSmrg#define XFREE(stale) do { \ 5027e6f085baSmrg if (stale) { free ((void *) stale); stale = 0; } \ 5028e6f085baSmrg} while (0) 502939713583Smrg 5030e6f085baSmrg/* -DDEBUG is fairly common in CFLAGS. */ 5031e6f085baSmrg#undef DEBUG 5032e6f085baSmrg#if defined DEBUGWRAPPER 5033e6f085baSmrg# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) 5034e6f085baSmrg#else 5035e6f085baSmrg# define DEBUG(format, ...) 5036e6f085baSmrg#endif 503739713583Smrg 5038e6f085baSmrgconst char *program_name = NULL; 503939713583Smrg 5040e6f085baSmrgvoid * xmalloc (size_t num); 5041e6f085baSmrgchar * xstrdup (const char *string); 5042e6f085baSmrgconst char * base_name (const char *name); 5043e6f085baSmrgchar * find_executable(const char *wrapper); 5044e6f085baSmrgint check_executable(const char *path); 5045e6f085baSmrgchar * strendzap(char *str, const char *pat); 5046e6f085baSmrgvoid lt_fatal (const char *message, ...); 504739713583Smrg 5048e6f085baSmrgint 5049e6f085baSmrgmain (int argc, char *argv[]) 5050e6f085baSmrg{ 5051e6f085baSmrg char **newargz; 5052e6f085baSmrg int i; 505339713583Smrg 5054e6f085baSmrg program_name = (char *) xstrdup (base_name (argv[0])); 5055e6f085baSmrg DEBUG("(main) argv[0] : %s\n",argv[0]); 5056e6f085baSmrg DEBUG("(main) program_name : %s\n",program_name); 5057e6f085baSmrg newargz = XMALLOC(char *, argc+2); 5058e6f085baSmrgEOF 505939713583Smrg 5060e6f085baSmrg cat >> $cwrappersource <<EOF 5061e6f085baSmrg newargz[0] = (char *) xstrdup("$SHELL"); 5062e6f085baSmrgEOF 506339713583Smrg 5064e6f085baSmrg cat >> $cwrappersource <<"EOF" 5065e6f085baSmrg newargz[1] = find_executable(argv[0]); 5066e6f085baSmrg if (newargz[1] == NULL) 5067e6f085baSmrg lt_fatal("Couldn't find %s", argv[0]); 5068e6f085baSmrg DEBUG("(main) found exe at : %s\n",newargz[1]); 5069e6f085baSmrg /* we know the script has the same name, without the .exe */ 5070e6f085baSmrg /* so make sure newargz[1] doesn't end in .exe */ 5071e6f085baSmrg strendzap(newargz[1],".exe"); 5072e6f085baSmrg for (i = 1; i < argc; i++) 5073e6f085baSmrg newargz[i+1] = xstrdup(argv[i]); 5074e6f085baSmrg newargz[argc+1] = NULL; 507539713583Smrg 5076e6f085baSmrg for (i=0; i<argc+1; i++) 5077e6f085baSmrg { 5078e6f085baSmrg DEBUG("(main) newargz[%d] : %s\n",i,newargz[i]); 5079e6f085baSmrg ; 5080e6f085baSmrg } 508139713583Smrg 5082e6f085baSmrgEOF 508339713583Smrg 5084e6f085baSmrg case $host_os in 5085e6f085baSmrg mingw*) 5086e6f085baSmrg cat >> $cwrappersource <<EOF 5087e6f085baSmrg execv("$SHELL",(char const **)newargz); 5088e6f085baSmrgEOF 5089e6f085baSmrg ;; 5090e6f085baSmrg *) 5091e6f085baSmrg cat >> $cwrappersource <<EOF 5092e6f085baSmrg execv("$SHELL",newargz); 5093e6f085baSmrgEOF 5094e6f085baSmrg ;; 5095e6f085baSmrg esac 509639713583Smrg 5097e6f085baSmrg cat >> $cwrappersource <<"EOF" 5098e6f085baSmrg return 127; 5099e6f085baSmrg} 510039713583Smrg 5101e6f085baSmrgvoid * 5102e6f085baSmrgxmalloc (size_t num) 5103e6f085baSmrg{ 5104e6f085baSmrg void * p = (void *) malloc (num); 5105e6f085baSmrg if (!p) 5106e6f085baSmrg lt_fatal ("Memory exhausted"); 510739713583Smrg 5108e6f085baSmrg return p; 5109e6f085baSmrg} 511039713583Smrg 5111e6f085baSmrgchar * 5112e6f085baSmrgxstrdup (const char *string) 5113e6f085baSmrg{ 5114e6f085baSmrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL 5115e6f085baSmrg; 5116e6f085baSmrg} 511739713583Smrg 5118e6f085baSmrgconst char * 5119e6f085baSmrgbase_name (const char *name) 5120e6f085baSmrg{ 5121e6f085baSmrg const char *base; 512239713583Smrg 5123e6f085baSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 5124e6f085baSmrg /* Skip over the disk name in MSDOS pathnames. */ 5125e6f085baSmrg if (isalpha ((unsigned char)name[0]) && name[1] == ':') 5126e6f085baSmrg name += 2; 5127e6f085baSmrg#endif 512839713583Smrg 5129e6f085baSmrg for (base = name; *name; name++) 5130e6f085baSmrg if (IS_DIR_SEPARATOR (*name)) 5131e6f085baSmrg base = name + 1; 5132e6f085baSmrg return base; 5133e6f085baSmrg} 513439713583Smrg 5135e6f085baSmrgint 5136e6f085baSmrgcheck_executable(const char * path) 5137e6f085baSmrg{ 5138e6f085baSmrg struct stat st; 513939713583Smrg 5140e6f085baSmrg DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); 5141e6f085baSmrg if ((!path) || (!*path)) 5142e6f085baSmrg return 0; 514339713583Smrg 5144e6f085baSmrg if ((stat (path, &st) >= 0) && 5145e6f085baSmrg ( 5146e6f085baSmrg /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ 5147e6f085baSmrg#if defined (S_IXOTH) 5148e6f085baSmrg ((st.st_mode & S_IXOTH) == S_IXOTH) || 5149e6f085baSmrg#endif 5150e6f085baSmrg#if defined (S_IXGRP) 5151e6f085baSmrg ((st.st_mode & S_IXGRP) == S_IXGRP) || 5152e6f085baSmrg#endif 5153e6f085baSmrg ((st.st_mode & S_IXUSR) == S_IXUSR)) 5154e6f085baSmrg ) 5155e6f085baSmrg return 1; 5156e6f085baSmrg else 5157e6f085baSmrg return 0; 5158e6f085baSmrg} 515939713583Smrg 5160e6f085baSmrg/* Searches for the full path of the wrapper. Returns 5161e6f085baSmrg newly allocated full path name if found, NULL otherwise */ 5162e6f085baSmrgchar * 5163e6f085baSmrgfind_executable (const char* wrapper) 5164e6f085baSmrg{ 5165e6f085baSmrg int has_slash = 0; 5166e6f085baSmrg const char* p; 5167e6f085baSmrg const char* p_next; 5168e6f085baSmrg /* static buffer for getcwd */ 5169e6f085baSmrg char tmp[LT_PATHMAX + 1]; 5170e6f085baSmrg int tmp_len; 5171e6f085baSmrg char* concat_name; 517239713583Smrg 5173e6f085baSmrg DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); 517439713583Smrg 5175e6f085baSmrg if ((wrapper == NULL) || (*wrapper == '\0')) 5176e6f085baSmrg return NULL; 517795b296d0Smrg 5178e6f085baSmrg /* Absolute path? */ 5179e6f085baSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 5180e6f085baSmrg if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') 5181e6f085baSmrg { 5182e6f085baSmrg concat_name = xstrdup (wrapper); 5183e6f085baSmrg if (check_executable(concat_name)) 5184e6f085baSmrg return concat_name; 5185e6f085baSmrg XFREE(concat_name); 5186e6f085baSmrg } 5187e6f085baSmrg else 5188e6f085baSmrg { 5189e6f085baSmrg#endif 5190e6f085baSmrg if (IS_DIR_SEPARATOR (wrapper[0])) 5191e6f085baSmrg { 5192e6f085baSmrg concat_name = xstrdup (wrapper); 5193e6f085baSmrg if (check_executable(concat_name)) 5194e6f085baSmrg return concat_name; 5195e6f085baSmrg XFREE(concat_name); 5196e6f085baSmrg } 5197e6f085baSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 5198e6f085baSmrg } 5199e6f085baSmrg#endif 5200e6f085baSmrg 5201e6f085baSmrg for (p = wrapper; *p; p++) 5202e6f085baSmrg if (*p == '/') 5203e6f085baSmrg { 5204e6f085baSmrg has_slash = 1; 5205e6f085baSmrg break; 5206e6f085baSmrg } 5207e6f085baSmrg if (!has_slash) 5208e6f085baSmrg { 5209e6f085baSmrg /* no slashes; search PATH */ 5210e6f085baSmrg const char* path = getenv ("PATH"); 5211e6f085baSmrg if (path != NULL) 5212e6f085baSmrg { 5213e6f085baSmrg for (p = path; *p; p = p_next) 5214e6f085baSmrg { 5215e6f085baSmrg const char* q; 5216e6f085baSmrg size_t p_len; 5217e6f085baSmrg for (q = p; *q; q++) 5218e6f085baSmrg if (IS_PATH_SEPARATOR(*q)) 5219e6f085baSmrg break; 5220e6f085baSmrg p_len = q - p; 5221e6f085baSmrg p_next = (*q == '\0' ? q : q + 1); 5222e6f085baSmrg if (p_len == 0) 5223e6f085baSmrg { 5224e6f085baSmrg /* empty path: current directory */ 5225e6f085baSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 5226e6f085baSmrg lt_fatal ("getcwd failed"); 5227e6f085baSmrg tmp_len = strlen(tmp); 5228e6f085baSmrg concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); 5229e6f085baSmrg memcpy (concat_name, tmp, tmp_len); 5230e6f085baSmrg concat_name[tmp_len] = '/'; 5231e6f085baSmrg strcpy (concat_name + tmp_len + 1, wrapper); 5232e6f085baSmrg } 5233e6f085baSmrg else 5234e6f085baSmrg { 5235e6f085baSmrg concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); 5236e6f085baSmrg memcpy (concat_name, p, p_len); 5237e6f085baSmrg concat_name[p_len] = '/'; 5238e6f085baSmrg strcpy (concat_name + p_len + 1, wrapper); 5239e6f085baSmrg } 5240e6f085baSmrg if (check_executable(concat_name)) 5241e6f085baSmrg return concat_name; 5242e6f085baSmrg XFREE(concat_name); 5243e6f085baSmrg } 5244e6f085baSmrg } 5245e6f085baSmrg /* not found in PATH; assume curdir */ 5246e6f085baSmrg } 5247e6f085baSmrg /* Relative path | not found in path: prepend cwd */ 5248e6f085baSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 5249e6f085baSmrg lt_fatal ("getcwd failed"); 5250e6f085baSmrg tmp_len = strlen(tmp); 5251e6f085baSmrg concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); 5252e6f085baSmrg memcpy (concat_name, tmp, tmp_len); 5253e6f085baSmrg concat_name[tmp_len] = '/'; 5254e6f085baSmrg strcpy (concat_name + tmp_len + 1, wrapper); 5255e6f085baSmrg 5256e6f085baSmrg if (check_executable(concat_name)) 5257e6f085baSmrg return concat_name; 5258e6f085baSmrg XFREE(concat_name); 5259e6f085baSmrg return NULL; 5260e6f085baSmrg} 5261e6f085baSmrg 5262e6f085baSmrgchar * 5263e6f085baSmrgstrendzap(char *str, const char *pat) 5264e6f085baSmrg{ 5265e6f085baSmrg size_t len, patlen; 5266e6f085baSmrg 5267e6f085baSmrg assert(str != NULL); 5268e6f085baSmrg assert(pat != NULL); 5269e6f085baSmrg 5270e6f085baSmrg len = strlen(str); 5271e6f085baSmrg patlen = strlen(pat); 5272e6f085baSmrg 5273e6f085baSmrg if (patlen <= len) 5274e6f085baSmrg { 5275e6f085baSmrg str += len - patlen; 5276e6f085baSmrg if (strcmp(str, pat) == 0) 5277e6f085baSmrg *str = '\0'; 5278e6f085baSmrg } 5279e6f085baSmrg return str; 5280e6f085baSmrg} 5281e6f085baSmrg 5282e6f085baSmrgstatic void 5283e6f085baSmrglt_error_core (int exit_status, const char * mode, 5284e6f085baSmrg const char * message, va_list ap) 5285e6f085baSmrg{ 5286e6f085baSmrg fprintf (stderr, "%s: %s: ", program_name, mode); 5287e6f085baSmrg vfprintf (stderr, message, ap); 5288e6f085baSmrg fprintf (stderr, ".\n"); 5289e6f085baSmrg 5290e6f085baSmrg if (exit_status >= 0) 5291e6f085baSmrg exit (exit_status); 5292e6f085baSmrg} 5293e6f085baSmrg 5294e6f085baSmrgvoid 5295e6f085baSmrglt_fatal (const char *message, ...) 5296e6f085baSmrg{ 5297e6f085baSmrg va_list ap; 5298e6f085baSmrg va_start (ap, message); 5299e6f085baSmrg lt_error_core (EXIT_FAILURE, "FATAL", message, ap); 5300e6f085baSmrg va_end (ap); 5301e6f085baSmrg} 5302e6f085baSmrgEOF 5303e6f085baSmrg # we should really use a build-platform specific compiler 5304e6f085baSmrg # here, but OTOH, the wrappers (shell script and this C one) 5305e6f085baSmrg # are only useful if you want to execute the "real" binary. 5306e6f085baSmrg # Since the "real" binary is built for $host, then this 5307e6f085baSmrg # wrapper might as well be built for $host, too. 5308e6f085baSmrg $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource 5309e6f085baSmrg ;; 5310e6f085baSmrg esac 5311e6f085baSmrg $rm $output 5312e6f085baSmrg trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 5313e6f085baSmrg 5314e6f085baSmrg $echo > $output "\ 5315e6f085baSmrg#! $SHELL 5316e6f085baSmrg 5317e6f085baSmrg# $output - temporary wrapper script for $objdir/$outputname 5318e6f085baSmrg# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP 5319e6f085baSmrg# 5320e6f085baSmrg# The $output program cannot be directly executed until all the libtool 5321e6f085baSmrg# libraries that it depends on are installed. 5322e6f085baSmrg# 5323e6f085baSmrg# This wrapper script should never be moved out of the build directory. 5324e6f085baSmrg# If it is, it will not operate correctly. 5325e6f085baSmrg 5326e6f085baSmrg# Sed substitution that helps us do robust quoting. It backslashifies 5327e6f085baSmrg# metacharacters that are still active within double-quoted strings. 5328e6f085baSmrgXsed='${SED} -e 1s/^X//' 5329e6f085baSmrgsed_quote_subst='$sed_quote_subst' 5330e6f085baSmrg 5331e6f085baSmrg# Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). 5332e6f085baSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 5333e6f085baSmrg emulate sh 5334e6f085baSmrg NULLCMD=: 5335e6f085baSmrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 5336e6f085baSmrg # is contrary to our usage. Disable this feature. 5337e6f085baSmrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 5338e6f085baSmrg setopt NO_GLOB_SUBST 5339e6f085baSmrgelse 5340e6f085baSmrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 5341e6f085baSmrgfi 5342e6f085baSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 5343e6f085baSmrgDUALCASE=1; export DUALCASE # for MKS sh 5344e6f085baSmrg 5345e6f085baSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout 5346e6f085baSmrg# if CDPATH is set. 5347e6f085baSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 5348e6f085baSmrg 5349e6f085baSmrgrelink_command=\"$relink_command\" 5350e6f085baSmrg 5351e6f085baSmrg# This environment variable determines our operation mode. 5352e6f085baSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then 5353e6f085baSmrg # install mode needs the following variable: 5354e6f085baSmrg notinst_deplibs='$notinst_deplibs' 5355e6f085baSmrgelse 5356e6f085baSmrg # When we are sourced in execute mode, \$file and \$echo are already set. 5357e6f085baSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5358e6f085baSmrg echo=\"$qecho\" 5359e6f085baSmrg file=\"\$0\" 5360e6f085baSmrg # Make sure echo works. 5361e6f085baSmrg if test \"X\$1\" = X--no-reexec; then 5362e6f085baSmrg # Discard the --no-reexec flag, and continue. 5363e6f085baSmrg shift 5364e6f085baSmrg elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then 5365e6f085baSmrg # Yippee, \$echo works! 5366e6f085baSmrg : 5367e6f085baSmrg else 5368e6f085baSmrg # Restart under the correct shell, and then maybe \$echo will work. 5369e6f085baSmrg exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} 5370e6f085baSmrg fi 5371e6f085baSmrg fi\ 5372e6f085baSmrg" 5373e6f085baSmrg $echo >> $output "\ 537495b296d0Smrg 5375e6f085baSmrg # Find the directory that this script lives in. 5376e6f085baSmrg thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` 5377e6f085baSmrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 537895b296d0Smrg 5379e6f085baSmrg # Follow symbolic links until we get to the real thisdir. 5380e6f085baSmrg file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` 5381e6f085baSmrg while test -n \"\$file\"; do 5382e6f085baSmrg destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` 538395b296d0Smrg 5384e6f085baSmrg # If there was a directory component, then change thisdir. 5385e6f085baSmrg if test \"x\$destdir\" != \"x\$file\"; then 5386e6f085baSmrg case \"\$destdir\" in 5387e6f085baSmrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 5388e6f085baSmrg *) thisdir=\"\$thisdir/\$destdir\" ;; 5389e6f085baSmrg esac 5390e6f085baSmrg fi 539195b296d0Smrg 5392e6f085baSmrg file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` 5393e6f085baSmrg file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` 5394e6f085baSmrg done 539595b296d0Smrg 5396e6f085baSmrg # Try to get the absolute directory name. 5397e6f085baSmrg absdir=\`cd \"\$thisdir\" && pwd\` 5398e6f085baSmrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 5399e6f085baSmrg" 540095b296d0Smrg 5401e6f085baSmrg if test "$fast_install" = yes; then 5402e6f085baSmrg $echo >> $output "\ 5403e6f085baSmrg program=lt-'$outputname'$exeext 5404e6f085baSmrg progdir=\"\$thisdir/$objdir\" 540595b296d0Smrg 5406e6f085baSmrg if test ! -f \"\$progdir/\$program\" || \\ 5407e6f085baSmrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 5408e6f085baSmrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 540995b296d0Smrg 5410e6f085baSmrg file=\"\$\$-\$program\" 541195b296d0Smrg 5412e6f085baSmrg if test ! -d \"\$progdir\"; then 5413e6f085baSmrg $mkdir \"\$progdir\" 5414e6f085baSmrg else 5415e6f085baSmrg $rm \"\$progdir/\$file\" 5416e6f085baSmrg fi" 541795b296d0Smrg 5418e6f085baSmrg $echo >> $output "\ 541995b296d0Smrg 5420e6f085baSmrg # relink executable if necessary 5421e6f085baSmrg if test -n \"\$relink_command\"; then 5422e6f085baSmrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 5423e6f085baSmrg else 5424e6f085baSmrg $echo \"\$relink_command_output\" >&2 5425e6f085baSmrg $rm \"\$progdir/\$file\" 5426e6f085baSmrg exit $EXIT_FAILURE 5427e6f085baSmrg fi 5428e6f085baSmrg fi 542995b296d0Smrg 5430e6f085baSmrg $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 5431e6f085baSmrg { $rm \"\$progdir/\$program\"; 5432e6f085baSmrg $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } 5433e6f085baSmrg $rm \"\$progdir/\$file\" 5434e6f085baSmrg fi" 5435e6f085baSmrg else 5436e6f085baSmrg $echo >> $output "\ 5437e6f085baSmrg program='$outputname' 5438e6f085baSmrg progdir=\"\$thisdir/$objdir\" 5439e6f085baSmrg" 544095b296d0Smrg fi 544195b296d0Smrg 5442e6f085baSmrg $echo >> $output "\ 544395b296d0Smrg 5444e6f085baSmrg if test -f \"\$progdir/\$program\"; then" 544595b296d0Smrg 5446e6f085baSmrg # Export our shlibpath_var if we have one. 5447e6f085baSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 5448e6f085baSmrg $echo >> $output "\ 5449e6f085baSmrg # Add our own library path to $shlibpath_var 5450e6f085baSmrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 545195b296d0Smrg 5452e6f085baSmrg # Some systems cannot cope with colon-terminated $shlibpath_var 5453e6f085baSmrg # The second colon is a workaround for a bug in BeOS R4 sed 5454e6f085baSmrg $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` 545595b296d0Smrg 5456e6f085baSmrg export $shlibpath_var 5457e6f085baSmrg" 5458e6f085baSmrg fi 545995b296d0Smrg 5460e6f085baSmrg # fixup the dll searchpath if we need to. 5461e6f085baSmrg if test -n "$dllsearchpath"; then 5462e6f085baSmrg $echo >> $output "\ 5463e6f085baSmrg # Add the dll search path components to the executable PATH 5464e6f085baSmrg PATH=$dllsearchpath:\$PATH 5465e6f085baSmrg" 5466e6f085baSmrg fi 546739713583Smrg 5468e6f085baSmrg $echo >> $output "\ 5469e6f085baSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 5470e6f085baSmrg # Run the actual program with our arguments. 5471e6f085baSmrg" 5472e6f085baSmrg case $host in 5473e6f085baSmrg # Backslashes separate directories on plain windows 5474e6f085baSmrg *-*-mingw | *-*-os2*) 5475e6f085baSmrg $echo >> $output "\ 5476e6f085baSmrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 5477e6f085baSmrg" 5478e6f085baSmrg ;; 547995b296d0Smrg 5480e6f085baSmrg *) 5481e6f085baSmrg $echo >> $output "\ 5482e6f085baSmrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 5483e6f085baSmrg" 5484e6f085baSmrg ;; 5485e6f085baSmrg esac 5486e6f085baSmrg $echo >> $output "\ 5487e6f085baSmrg \$echo \"\$0: cannot exec \$program \$*\" 5488e6f085baSmrg exit $EXIT_FAILURE 5489e6f085baSmrg fi 5490e6f085baSmrg else 5491e6f085baSmrg # The program doesn't exist. 5492e6f085baSmrg \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 5493e6f085baSmrg \$echo \"This script is just a wrapper for \$program.\" 1>&2 5494e6f085baSmrg $echo \"See the $PACKAGE documentation for more information.\" 1>&2 5495e6f085baSmrg exit $EXIT_FAILURE 5496e6f085baSmrg fi 5497e6f085baSmrgfi\ 5498e6f085baSmrg" 5499e6f085baSmrg chmod +x $output 5500e6f085baSmrg fi 5501e6f085baSmrg exit $EXIT_SUCCESS 5502e6f085baSmrg ;; 5503e6f085baSmrg esac 550495b296d0Smrg 5505e6f085baSmrg # See if we need to build an old-fashioned archive. 5506e6f085baSmrg for oldlib in $oldlibs; do 550795b296d0Smrg 5508e6f085baSmrg if test "$build_libtool_libs" = convenience; then 5509e6f085baSmrg oldobjs="$libobjs_save" 5510e6f085baSmrg addlibs="$convenience" 5511e6f085baSmrg build_libtool_libs=no 5512e6f085baSmrg else 5513e6f085baSmrg if test "$build_libtool_libs" = module; then 5514e6f085baSmrg oldobjs="$libobjs_save" 5515e6f085baSmrg build_libtool_libs=no 5516e6f085baSmrg else 5517e6f085baSmrg oldobjs="$old_deplibs $non_pic_objects" 5518e6f085baSmrg fi 5519e6f085baSmrg addlibs="$old_convenience" 5520e6f085baSmrg fi 552195b296d0Smrg 5522e6f085baSmrg if test -n "$addlibs"; then 5523e6f085baSmrg gentop="$output_objdir/${outputname}x" 5524e6f085baSmrg generated="$generated $gentop" 552595b296d0Smrg 5526e6f085baSmrg func_extract_archives $gentop $addlibs 5527e6f085baSmrg oldobjs="$oldobjs $func_extract_archives_result" 5528e6f085baSmrg fi 552995b296d0Smrg 5530e6f085baSmrg # Do each command in the archive commands. 5531e6f085baSmrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 5532e6f085baSmrg cmds=$old_archive_from_new_cmds 5533e6f085baSmrg else 5534e6f085baSmrg # POSIX demands no paths to be encoded in archives. We have 5535e6f085baSmrg # to avoid creating archives with duplicate basenames if we 5536e6f085baSmrg # might have to extract them afterwards, e.g., when creating a 5537e6f085baSmrg # static archive out of a convenience library, or when linking 5538e6f085baSmrg # the entirety of a libtool archive into another (currently 5539e6f085baSmrg # not supported by libtool). 5540e6f085baSmrg if (for obj in $oldobjs 5541e6f085baSmrg do 5542e6f085baSmrg $echo "X$obj" | $Xsed -e 's%^.*/%%' 5543e6f085baSmrg done | sort | sort -uc >/dev/null 2>&1); then 5544e6f085baSmrg : 5545e6f085baSmrg else 5546e6f085baSmrg $echo "copying selected object files to avoid basename conflicts..." 554795b296d0Smrg 5548e6f085baSmrg if test -z "$gentop"; then 5549e6f085baSmrg gentop="$output_objdir/${outputname}x" 5550e6f085baSmrg generated="$generated $gentop" 555195b296d0Smrg 5552e6f085baSmrg $show "${rm}r $gentop" 5553e6f085baSmrg $run ${rm}r "$gentop" 5554e6f085baSmrg $show "$mkdir $gentop" 5555e6f085baSmrg $run $mkdir "$gentop" 5556e6f085baSmrg exit_status=$? 5557e6f085baSmrg if test "$exit_status" -ne 0 && test ! -d "$gentop"; then 5558e6f085baSmrg exit $exit_status 555939713583Smrg fi 556039713583Smrg fi 556195b296d0Smrg 5562e6f085baSmrg save_oldobjs=$oldobjs 5563e6f085baSmrg oldobjs= 5564e6f085baSmrg counter=1 5565e6f085baSmrg for obj in $save_oldobjs 5566e6f085baSmrg do 5567e6f085baSmrg objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` 5568e6f085baSmrg case " $oldobjs " in 5569e6f085baSmrg " ") oldobjs=$obj ;; 5570e6f085baSmrg *[\ /]"$objbase "*) 5571e6f085baSmrg while :; do 5572e6f085baSmrg # Make sure we don't pick an alternate name that also 5573e6f085baSmrg # overlaps. 5574e6f085baSmrg newobj=lt$counter-$objbase 5575e6f085baSmrg counter=`expr $counter + 1` 5576e6f085baSmrg case " $oldobjs " in 5577e6f085baSmrg *[\ /]"$newobj "*) ;; 5578e6f085baSmrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 5579e6f085baSmrg esac 5580e6f085baSmrg done 5581e6f085baSmrg $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 5582e6f085baSmrg $run ln "$obj" "$gentop/$newobj" || 5583e6f085baSmrg $run cp "$obj" "$gentop/$newobj" 5584e6f085baSmrg oldobjs="$oldobjs $gentop/$newobj" 5585e6f085baSmrg ;; 5586e6f085baSmrg *) oldobjs="$oldobjs $obj" ;; 5587e6f085baSmrg esac 5588e6f085baSmrg done 5589e6f085baSmrg fi 559095b296d0Smrg 5591e6f085baSmrg eval cmds=\"$old_archive_cmds\" 559295b296d0Smrg 5593e6f085baSmrg if len=`expr "X$cmds" : ".*"` && 5594e6f085baSmrg test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then 5595e6f085baSmrg cmds=$old_archive_cmds 5596e6f085baSmrg else 5597e6f085baSmrg # the command line is too long to link in one step, link in parts 5598e6f085baSmrg $echo "using piecewise archive linking..." 5599e6f085baSmrg save_RANLIB=$RANLIB 5600e6f085baSmrg RANLIB=: 5601e6f085baSmrg objlist= 5602e6f085baSmrg concat_cmds= 5603e6f085baSmrg save_oldobjs=$oldobjs 5604e6f085baSmrg 5605e6f085baSmrg # Is there a better way of finding the last object in the list? 5606e6f085baSmrg for obj in $save_oldobjs 5607e6f085baSmrg do 5608e6f085baSmrg last_oldobj=$obj 5609e6f085baSmrg done 5610e6f085baSmrg for obj in $save_oldobjs 5611e6f085baSmrg do 5612e6f085baSmrg oldobjs="$objlist $obj" 5613e6f085baSmrg objlist="$objlist $obj" 5614e6f085baSmrg eval test_cmds=\"$old_archive_cmds\" 5615e6f085baSmrg if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && 5616e6f085baSmrg test "$len" -le "$max_cmd_len"; then 5617e6f085baSmrg : 561839713583Smrg else 5619e6f085baSmrg # the above command should be used before it gets too long 5620e6f085baSmrg oldobjs=$objlist 5621e6f085baSmrg if test "$obj" = "$last_oldobj" ; then 5622e6f085baSmrg RANLIB=$save_RANLIB 5623e6f085baSmrg fi 5624e6f085baSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 5625e6f085baSmrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 5626e6f085baSmrg objlist= 562795b296d0Smrg fi 5628e6f085baSmrg done 5629e6f085baSmrg RANLIB=$save_RANLIB 5630e6f085baSmrg oldobjs=$objlist 5631e6f085baSmrg if test "X$oldobjs" = "X" ; then 5632e6f085baSmrg eval cmds=\"\$concat_cmds\" 563395b296d0Smrg else 5634e6f085baSmrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 563595b296d0Smrg fi 563639713583Smrg fi 5637e6f085baSmrg fi 5638e6f085baSmrg save_ifs="$IFS"; IFS='~' 5639e6f085baSmrg for cmd in $cmds; do 5640e6f085baSmrg eval cmd=\"$cmd\" 564139713583Smrg IFS="$save_ifs" 5642e6f085baSmrg $show "$cmd" 5643e6f085baSmrg $run eval "$cmd" || exit $? 5644e6f085baSmrg done 5645e6f085baSmrg IFS="$save_ifs" 5646e6f085baSmrg done 564795b296d0Smrg 5648e6f085baSmrg if test -n "$generated"; then 5649e6f085baSmrg $show "${rm}r$generated" 5650e6f085baSmrg $run ${rm}r$generated 5651e6f085baSmrg fi 565239713583Smrg 5653e6f085baSmrg # Now create the libtool archive. 5654e6f085baSmrg case $output in 5655e6f085baSmrg *.la) 5656e6f085baSmrg old_library= 5657e6f085baSmrg test "$build_old_libs" = yes && old_library="$libname.$libext" 5658e6f085baSmrg $show "creating $output" 565995b296d0Smrg 5660e6f085baSmrg # Preserve any variables that may affect compiler behavior 5661e6f085baSmrg for var in $variables_saved_for_relink; do 5662e6f085baSmrg if eval test -z \"\${$var+set}\"; then 5663e6f085baSmrg relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" 5664e6f085baSmrg elif eval var_value=\$$var; test -z "$var_value"; then 5665e6f085baSmrg relink_command="$var=; export $var; $relink_command" 5666e6f085baSmrg else 5667e6f085baSmrg var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` 5668e6f085baSmrg relink_command="$var=\"$var_value\"; export $var; $relink_command" 566939713583Smrg fi 5670e6f085baSmrg done 5671e6f085baSmrg # Quote the link command for shipping. 5672e6f085baSmrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 5673e6f085baSmrg relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` 5674e6f085baSmrg if test "$hardcode_automatic" = yes ; then 5675e6f085baSmrg relink_command= 567639713583Smrg fi 567795b296d0Smrg 567895b296d0Smrg 5679e6f085baSmrg # Only create the output if not a dry run. 5680e6f085baSmrg if test -z "$run"; then 5681e6f085baSmrg for installed in no yes; do 5682e6f085baSmrg if test "$installed" = yes; then 5683e6f085baSmrg if test -z "$install_libdir"; then 5684e6f085baSmrg break 5685e6f085baSmrg fi 5686e6f085baSmrg output="$output_objdir/$outputname"i 5687e6f085baSmrg # Replace all uninstalled libtool libraries with the installed ones 5688e6f085baSmrg newdependency_libs= 5689e6f085baSmrg for deplib in $dependency_libs; do 5690e6f085baSmrg case $deplib in 5691e6f085baSmrg *.la) 5692e6f085baSmrg name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` 5693e6f085baSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 5694e6f085baSmrg if test -z "$libdir"; then 5695e6f085baSmrg $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 5696e6f085baSmrg exit $EXIT_FAILURE 5697e6f085baSmrg fi 5698e6f085baSmrg newdependency_libs="$newdependency_libs $libdir/$name" 5699e6f085baSmrg ;; 5700e6f085baSmrg *) newdependency_libs="$newdependency_libs $deplib" ;; 5701e6f085baSmrg esac 5702e6f085baSmrg done 5703e6f085baSmrg dependency_libs="$newdependency_libs" 5704e6f085baSmrg newdlfiles= 5705e6f085baSmrg for lib in $dlfiles; do 5706e6f085baSmrg name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` 5707e6f085baSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 5708e6f085baSmrg if test -z "$libdir"; then 5709e6f085baSmrg $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 5710e6f085baSmrg exit $EXIT_FAILURE 5711e6f085baSmrg fi 5712e6f085baSmrg newdlfiles="$newdlfiles $libdir/$name" 5713e6f085baSmrg done 5714e6f085baSmrg dlfiles="$newdlfiles" 5715e6f085baSmrg newdlprefiles= 5716e6f085baSmrg for lib in $dlprefiles; do 5717e6f085baSmrg name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` 5718e6f085baSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 5719e6f085baSmrg if test -z "$libdir"; then 5720e6f085baSmrg $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 5721e6f085baSmrg exit $EXIT_FAILURE 5722e6f085baSmrg fi 5723e6f085baSmrg newdlprefiles="$newdlprefiles $libdir/$name" 5724e6f085baSmrg done 5725e6f085baSmrg dlprefiles="$newdlprefiles" 5726e6f085baSmrg else 5727e6f085baSmrg newdlfiles= 5728e6f085baSmrg for lib in $dlfiles; do 5729e6f085baSmrg case $lib in 5730e6f085baSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 5731e6f085baSmrg *) abs=`pwd`"/$lib" ;; 5732e6f085baSmrg esac 5733e6f085baSmrg newdlfiles="$newdlfiles $abs" 5734e6f085baSmrg done 5735e6f085baSmrg dlfiles="$newdlfiles" 5736e6f085baSmrg newdlprefiles= 5737e6f085baSmrg for lib in $dlprefiles; do 5738e6f085baSmrg case $lib in 5739e6f085baSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 5740e6f085baSmrg *) abs=`pwd`"/$lib" ;; 5741e6f085baSmrg esac 5742e6f085baSmrg newdlprefiles="$newdlprefiles $abs" 5743e6f085baSmrg done 5744e6f085baSmrg dlprefiles="$newdlprefiles" 5745e6f085baSmrg fi 5746e6f085baSmrg $rm $output 5747e6f085baSmrg # place dlname in correct position for cygwin 5748e6f085baSmrg tdlname=$dlname 5749e6f085baSmrg case $host,$output,$installed,$module,$dlname in 5750e6f085baSmrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; 5751e6f085baSmrg esac 5752e6f085baSmrg $echo > $output "\ 5753e6f085baSmrg# $outputname - a libtool library file 5754e6f085baSmrg# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP 5755e6f085baSmrg# 5756e6f085baSmrg# Please DO NOT delete this file! 5757e6f085baSmrg# It is necessary for linking the library. 575895b296d0Smrg 5759e6f085baSmrg# The name that we can dlopen(3). 5760e6f085baSmrgdlname='$tdlname' 576195b296d0Smrg 5762e6f085baSmrg# Names of this library. 5763e6f085baSmrglibrary_names='$library_names' 576495b296d0Smrg 5765e6f085baSmrg# The name of the static archive. 5766e6f085baSmrgold_library='$old_library' 576795b296d0Smrg 5768e6f085baSmrg# Libraries that this one depends upon. 5769e6f085baSmrgdependency_libs='$dependency_libs' 577039713583Smrg 5771e6f085baSmrg# Version information for $libname. 5772e6f085baSmrgcurrent=$current 5773e6f085baSmrgage=$age 5774e6f085baSmrgrevision=$revision 577539713583Smrg 5776e6f085baSmrg# Is this an already installed library? 5777e6f085baSmrginstalled=$installed 577839713583Smrg 5779e6f085baSmrg# Should we warn about portability when linking against -modules? 5780e6f085baSmrgshouldnotlink=$module 578139713583Smrg 5782e6f085baSmrg# Files to dlopen/dlpreopen 5783e6f085baSmrgdlopen='$dlfiles' 5784e6f085baSmrgdlpreopen='$dlprefiles' 578539713583Smrg 5786e6f085baSmrg# Directory that this library needs to be installed in: 5787e6f085baSmrglibdir='$install_libdir'" 5788e6f085baSmrg if test "$installed" = no && test "$need_relink" = yes; then 5789e6f085baSmrg $echo >> $output "\ 5790e6f085baSmrgrelink_command=\"$relink_command\"" 5791e6f085baSmrg fi 5792e6f085baSmrg done 579339713583Smrg fi 579439713583Smrg 5795e6f085baSmrg # Do a symbolic link so that the libtool archive can be found in 5796e6f085baSmrg # LD_LIBRARY_PATH before the program is installed. 5797e6f085baSmrg $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" 5798e6f085baSmrg $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? 579995b296d0Smrg ;; 5800e6f085baSmrg esac 5801e6f085baSmrg exit $EXIT_SUCCESS 5802e6f085baSmrg ;; 580395b296d0Smrg 5804e6f085baSmrg # libtool install mode 5805e6f085baSmrg install) 5806e6f085baSmrg modename="$modename: install" 5807e6f085baSmrg 5808e6f085baSmrg # There may be an optional sh(1) argument at the beginning of 5809e6f085baSmrg # install_prog (especially on Windows NT). 5810e6f085baSmrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 5811e6f085baSmrg # Allow the use of GNU shtool's install command. 5812e6f085baSmrg $echo "X$nonopt" | grep shtool > /dev/null; then 5813e6f085baSmrg # Aesthetically quote it. 5814e6f085baSmrg arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` 5815e6f085baSmrg case $arg in 5816e6f085baSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 5817e6f085baSmrg arg="\"$arg\"" 5818e6f085baSmrg ;; 581939713583Smrg esac 5820e6f085baSmrg install_prog="$arg " 5821e6f085baSmrg arg="$1" 5822e6f085baSmrg shift 5823e6f085baSmrg else 5824e6f085baSmrg install_prog= 5825e6f085baSmrg arg=$nonopt 5826e6f085baSmrg fi 582795b296d0Smrg 5828e6f085baSmrg # The real first argument should be the name of the installation program. 5829e6f085baSmrg # Aesthetically quote it. 5830e6f085baSmrg arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` 5831e6f085baSmrg case $arg in 5832e6f085baSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 5833e6f085baSmrg arg="\"$arg\"" 5834e6f085baSmrg ;; 5835e6f085baSmrg esac 5836e6f085baSmrg install_prog="$install_prog$arg" 583795b296d0Smrg 5838e6f085baSmrg # We need to accept at least all the BSD install flags. 5839e6f085baSmrg dest= 5840e6f085baSmrg files= 5841e6f085baSmrg opts= 5842e6f085baSmrg prev= 5843e6f085baSmrg install_type= 5844e6f085baSmrg isdir=no 5845e6f085baSmrg stripme= 5846e6f085baSmrg for arg 5847e6f085baSmrg do 5848e6f085baSmrg if test -n "$dest"; then 5849e6f085baSmrg files="$files $dest" 5850e6f085baSmrg dest=$arg 5851e6f085baSmrg continue 5852e6f085baSmrg fi 585339713583Smrg 5854e6f085baSmrg case $arg in 5855e6f085baSmrg -d) isdir=yes ;; 5856e6f085baSmrg -f) 5857e6f085baSmrg case " $install_prog " in 5858e6f085baSmrg *[\\\ /]cp\ *) ;; 5859e6f085baSmrg *) prev=$arg ;; 5860e6f085baSmrg esac 5861e6f085baSmrg ;; 5862e6f085baSmrg -g | -m | -o) prev=$arg ;; 5863e6f085baSmrg -s) 5864e6f085baSmrg stripme=" -s" 5865e6f085baSmrg continue 5866e6f085baSmrg ;; 5867e6f085baSmrg -*) 5868e6f085baSmrg ;; 5869e6f085baSmrg *) 5870e6f085baSmrg # If the previous option needed an argument, then skip it. 5871e6f085baSmrg if test -n "$prev"; then 5872e6f085baSmrg prev= 5873e6f085baSmrg else 5874e6f085baSmrg dest=$arg 5875e6f085baSmrg continue 5876e6f085baSmrg fi 587795b296d0Smrg ;; 587839713583Smrg esac 587995b296d0Smrg 5880e6f085baSmrg # Aesthetically quote the argument. 5881e6f085baSmrg arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` 5882e6f085baSmrg case $arg in 5883e6f085baSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 5884e6f085baSmrg arg="\"$arg\"" 588539713583Smrg ;; 588639713583Smrg esac 5887e6f085baSmrg install_prog="$install_prog $arg" 5888e6f085baSmrg done 588995b296d0Smrg 5890e6f085baSmrg if test -z "$install_prog"; then 5891e6f085baSmrg $echo "$modename: you must specify an install program" 1>&2 5892e6f085baSmrg $echo "$help" 1>&2 5893e6f085baSmrg exit $EXIT_FAILURE 5894e6f085baSmrg fi 589595b296d0Smrg 5896e6f085baSmrg if test -n "$prev"; then 5897e6f085baSmrg $echo "$modename: the \`$prev' option requires an argument" 1>&2 5898e6f085baSmrg $echo "$help" 1>&2 5899e6f085baSmrg exit $EXIT_FAILURE 5900e6f085baSmrg fi 5901e6f085baSmrg 5902e6f085baSmrg if test -z "$files"; then 5903e6f085baSmrg if test -z "$dest"; then 5904e6f085baSmrg $echo "$modename: no file or destination specified" 1>&2 5905e6f085baSmrg else 5906e6f085baSmrg $echo "$modename: you must specify a destination" 1>&2 5907e6f085baSmrg fi 5908e6f085baSmrg $echo "$help" 1>&2 5909e6f085baSmrg exit $EXIT_FAILURE 5910e6f085baSmrg fi 5911e6f085baSmrg 5912e6f085baSmrg # Strip any trailing slash from the destination. 5913e6f085baSmrg dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` 5914e6f085baSmrg 5915e6f085baSmrg # Check to see that the destination is a directory. 5916e6f085baSmrg test -d "$dest" && isdir=yes 5917e6f085baSmrg if test "$isdir" = yes; then 5918e6f085baSmrg destdir="$dest" 5919e6f085baSmrg destname= 5920e6f085baSmrg else 5921e6f085baSmrg destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` 5922e6f085baSmrg test "X$destdir" = "X$dest" && destdir=. 5923e6f085baSmrg destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` 5924e6f085baSmrg 5925e6f085baSmrg # Not a directory, so check to see that there is only one file specified. 5926e6f085baSmrg set dummy $files 5927e6f085baSmrg if test "$#" -gt 2; then 5928e6f085baSmrg $echo "$modename: \`$dest' is not a directory" 1>&2 5929e6f085baSmrg $echo "$help" 1>&2 5930e6f085baSmrg exit $EXIT_FAILURE 5931e6f085baSmrg fi 5932e6f085baSmrg fi 5933e6f085baSmrg case $destdir in 5934e6f085baSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5935e6f085baSmrg *) 5936e6f085baSmrg for file in $files; do 5937e6f085baSmrg case $file in 5938e6f085baSmrg *.lo) ;; 593939713583Smrg *) 5940e6f085baSmrg $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 5941e6f085baSmrg $echo "$help" 1>&2 5942e6f085baSmrg exit $EXIT_FAILURE 594339713583Smrg ;; 594439713583Smrg esac 594539713583Smrg done 5946e6f085baSmrg ;; 5947e6f085baSmrg esac 594895b296d0Smrg 5949e6f085baSmrg # This variable tells wrapper scripts just to set variables rather 5950e6f085baSmrg # than running their programs. 5951e6f085baSmrg libtool_install_magic="$magic" 595295b296d0Smrg 5953e6f085baSmrg staticlibs= 5954e6f085baSmrg future_libdirs= 5955e6f085baSmrg current_libdirs= 5956e6f085baSmrg for file in $files; do 595795b296d0Smrg 5958e6f085baSmrg # Do each installation. 5959e6f085baSmrg case $file in 5960e6f085baSmrg *.$libext) 5961e6f085baSmrg # Do the static libraries later. 5962e6f085baSmrg staticlibs="$staticlibs $file" 5963e6f085baSmrg ;; 5964e6f085baSmrg 5965e6f085baSmrg *.la) 5966e6f085baSmrg # Check to see that this really is a libtool archive. 5967e6f085baSmrg if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : 5968e6f085baSmrg else 5969e6f085baSmrg $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 5970e6f085baSmrg $echo "$help" 1>&2 5971e6f085baSmrg exit $EXIT_FAILURE 5972e6f085baSmrg fi 5973e6f085baSmrg 5974e6f085baSmrg library_names= 5975e6f085baSmrg old_library= 5976e6f085baSmrg relink_command= 5977e6f085baSmrg # If there is no directory component, then add one. 5978e6f085baSmrg case $file in 5979e6f085baSmrg */* | *\\*) . $file ;; 5980e6f085baSmrg *) . ./$file ;; 5981e6f085baSmrg esac 5982e6f085baSmrg 5983e6f085baSmrg # Add the libdir to current_libdirs if it is the destination. 5984e6f085baSmrg if test "X$destdir" = "X$libdir"; then 5985e6f085baSmrg case "$current_libdirs " in 598639713583Smrg *" $libdir "*) ;; 5987e6f085baSmrg *) current_libdirs="$current_libdirs $libdir" ;; 598839713583Smrg esac 5989e6f085baSmrg else 5990e6f085baSmrg # Note the libdir as a future libdir. 5991e6f085baSmrg case "$future_libdirs " in 599239713583Smrg *" $libdir "*) ;; 5993e6f085baSmrg *) future_libdirs="$future_libdirs $libdir" ;; 599439713583Smrg esac 599539713583Smrg fi 599695b296d0Smrg 5997e6f085baSmrg dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ 5998e6f085baSmrg test "X$dir" = "X$file/" && dir= 5999e6f085baSmrg dir="$dir$objdir" 6000e6f085baSmrg 6001e6f085baSmrg if test -n "$relink_command"; then 6002e6f085baSmrg # Determine the prefix the user has applied to our future dir. 6003e6f085baSmrg inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` 6004e6f085baSmrg 6005e6f085baSmrg # Don't allow the user to place us outside of our expected 6006e6f085baSmrg # location b/c this prevents finding dependent libraries that 6007e6f085baSmrg # are installed to the same prefix. 6008e6f085baSmrg # At present, this check doesn't affect windows .dll's that 6009e6f085baSmrg # are installed into $libdir/../bin (currently, that works fine) 6010e6f085baSmrg # but it's something to keep an eye on. 6011e6f085baSmrg if test "$inst_prefix_dir" = "$destdir"; then 6012e6f085baSmrg $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 6013e6f085baSmrg exit $EXIT_FAILURE 6014e6f085baSmrg fi 6015e6f085baSmrg 6016e6f085baSmrg if test -n "$inst_prefix_dir"; then 6017e6f085baSmrg # Stick the inst_prefix_dir data into the link command. 6018e6f085baSmrg relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP` 6019e6f085baSmrg else 6020e6f085baSmrg relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP` 6021e6f085baSmrg fi 6022e6f085baSmrg 6023e6f085baSmrg $echo "$modename: warning: relinking \`$file'" 1>&2 6024e6f085baSmrg $show "$relink_command" 6025e6f085baSmrg if $run eval "$relink_command"; then : 602695b296d0Smrg else 6027e6f085baSmrg $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 6028e6f085baSmrg exit $EXIT_FAILURE 602995b296d0Smrg fi 603095b296d0Smrg fi 603195b296d0Smrg 6032e6f085baSmrg # See the names of the shared library. 6033e6f085baSmrg set dummy $library_names 6034e6f085baSmrg if test -n "$2"; then 6035e6f085baSmrg realname="$2" 6036e6f085baSmrg shift 6037e6f085baSmrg shift 603895b296d0Smrg 6039e6f085baSmrg srcname="$realname" 6040e6f085baSmrg test -n "$relink_command" && srcname="$realname"T 604195b296d0Smrg 6042e6f085baSmrg # Install the shared library and build the symlinks. 6043e6f085baSmrg $show "$install_prog $dir/$srcname $destdir/$realname" 6044e6f085baSmrg $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? 6045e6f085baSmrg if test -n "$stripme" && test -n "$striplib"; then 6046e6f085baSmrg $show "$striplib $destdir/$realname" 6047e6f085baSmrg $run eval "$striplib $destdir/$realname" || exit $? 6048e6f085baSmrg fi 604995b296d0Smrg 6050e6f085baSmrg if test "$#" -gt 0; then 6051e6f085baSmrg # Delete the old symlinks, and create new ones. 6052e6f085baSmrg # Try `ln -sf' first, because the `ln' binary might depend on 6053e6f085baSmrg # the symlink we replace! Solaris /bin/ln does not understand -f, 6054e6f085baSmrg # so we also need to try rm && ln -s. 6055e6f085baSmrg for linkname 6056e6f085baSmrg do 6057e6f085baSmrg if test "$linkname" != "$realname"; then 6058e6f085baSmrg $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" 6059e6f085baSmrg $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" 6060e6f085baSmrg fi 6061e6f085baSmrg done 6062e6f085baSmrg fi 606395b296d0Smrg 6064e6f085baSmrg # Do each command in the postinstall commands. 6065e6f085baSmrg lib="$destdir/$realname" 6066e6f085baSmrg cmds=$postinstall_cmds 6067e6f085baSmrg save_ifs="$IFS"; IFS='~' 6068e6f085baSmrg for cmd in $cmds; do 6069e6f085baSmrg IFS="$save_ifs" 6070e6f085baSmrg eval cmd=\"$cmd\" 6071e6f085baSmrg $show "$cmd" 6072e6f085baSmrg $run eval "$cmd" || { 6073e6f085baSmrg lt_exit=$? 6074e6f085baSmrg 6075e6f085baSmrg # Restore the uninstalled library and exit 6076e6f085baSmrg if test "$mode" = relink; then 6077e6f085baSmrg $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' 6078e6f085baSmrg fi 607995b296d0Smrg 6080e6f085baSmrg exit $lt_exit 6081e6f085baSmrg } 6082e6f085baSmrg done 6083e6f085baSmrg IFS="$save_ifs" 608495b296d0Smrg fi 608595b296d0Smrg 6086e6f085baSmrg # Install the pseudo-library for information purposes. 6087e6f085baSmrg name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` 6088e6f085baSmrg instname="$dir/$name"i 6089e6f085baSmrg $show "$install_prog $instname $destdir/$name" 6090e6f085baSmrg $run eval "$install_prog $instname $destdir/$name" || exit $? 609195b296d0Smrg 6092e6f085baSmrg # Maybe install the static library, too. 6093e6f085baSmrg test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" 6094e6f085baSmrg ;; 609595b296d0Smrg 6096e6f085baSmrg *.lo) 6097e6f085baSmrg # Install (i.e. copy) a libtool object. 6098e6f085baSmrg 6099e6f085baSmrg # Figure out destination file name, if it wasn't already specified. 6100e6f085baSmrg if test -n "$destname"; then 6101e6f085baSmrg destfile="$destdir/$destname" 6102e6f085baSmrg else 6103e6f085baSmrg destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` 6104e6f085baSmrg destfile="$destdir/$destfile" 610595b296d0Smrg fi 6106e6f085baSmrg 6107e6f085baSmrg # Deduce the name of the destination old-style object file. 6108e6f085baSmrg case $destfile in 6109e6f085baSmrg *.lo) 6110e6f085baSmrg staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` 6111e6f085baSmrg ;; 6112e6f085baSmrg *.$objext) 6113e6f085baSmrg staticdest="$destfile" 6114e6f085baSmrg destfile= 6115e6f085baSmrg ;; 6116e6f085baSmrg *) 6117e6f085baSmrg $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 6118e6f085baSmrg $echo "$help" 1>&2 6119e6f085baSmrg exit $EXIT_FAILURE 6120e6f085baSmrg ;; 6121e6f085baSmrg esac 6122e6f085baSmrg 6123e6f085baSmrg # Install the libtool object if requested. 6124e6f085baSmrg if test -n "$destfile"; then 6125e6f085baSmrg $show "$install_prog $file $destfile" 6126e6f085baSmrg $run eval "$install_prog $file $destfile" || exit $? 612795b296d0Smrg fi 612895b296d0Smrg 6129e6f085baSmrg # Install the old object if enabled. 6130e6f085baSmrg if test "$build_old_libs" = yes; then 6131e6f085baSmrg # Deduce the name of the old-style object file. 6132e6f085baSmrg staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` 613395b296d0Smrg 6134e6f085baSmrg $show "$install_prog $staticobj $staticdest" 6135e6f085baSmrg $run eval "$install_prog \$staticobj \$staticdest" || exit $? 6136e6f085baSmrg fi 6137e6f085baSmrg exit $EXIT_SUCCESS 6138e6f085baSmrg ;; 613939713583Smrg 6140e6f085baSmrg *) 6141e6f085baSmrg # Figure out destination file name, if it wasn't already specified. 6142e6f085baSmrg if test -n "$destname"; then 6143e6f085baSmrg destfile="$destdir/$destname" 614495b296d0Smrg else 6145e6f085baSmrg destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` 6146e6f085baSmrg destfile="$destdir/$destfile" 614795b296d0Smrg fi 614895b296d0Smrg 6149e6f085baSmrg # If the file is missing, and there is a .exe on the end, strip it 6150e6f085baSmrg # because it is most likely a libtool script we actually want to 6151e6f085baSmrg # install 6152e6f085baSmrg stripped_ext="" 6153e6f085baSmrg case $file in 6154e6f085baSmrg *.exe) 6155e6f085baSmrg if test ! -f "$file"; then 6156e6f085baSmrg file=`$echo $file|${SED} 's,.exe$,,'` 6157e6f085baSmrg stripped_ext=".exe" 6158e6f085baSmrg fi 6159e6f085baSmrg ;; 6160e6f085baSmrg esac 616195b296d0Smrg 6162e6f085baSmrg # Do a test to see if this is really a libtool program. 6163e6f085baSmrg case $host in 6164e6f085baSmrg *cygwin*|*mingw*) 6165e6f085baSmrg wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` 6166e6f085baSmrg ;; 6167e6f085baSmrg *) 6168e6f085baSmrg wrapper=$file 6169e6f085baSmrg ;; 6170e6f085baSmrg esac 6171e6f085baSmrg if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then 6172e6f085baSmrg notinst_deplibs= 6173e6f085baSmrg relink_command= 617495b296d0Smrg 6175e6f085baSmrg # Note that it is not necessary on cygwin/mingw to append a dot to 6176e6f085baSmrg # foo even if both foo and FILE.exe exist: automatic-append-.exe 6177e6f085baSmrg # behavior happens only for exec(3), not for open(2)! Also, sourcing 6178e6f085baSmrg # `FILE.' does not work on cygwin managed mounts. 6179e6f085baSmrg # 6180e6f085baSmrg # If there is no directory component, then add one. 6181e6f085baSmrg case $wrapper in 6182e6f085baSmrg */* | *\\*) . ${wrapper} ;; 6183e6f085baSmrg *) . ./${wrapper} ;; 6184e6f085baSmrg esac 618595b296d0Smrg 6186e6f085baSmrg # Check the variables that should have been set. 6187e6f085baSmrg if test -z "$notinst_deplibs"; then 6188e6f085baSmrg $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 6189e6f085baSmrg exit $EXIT_FAILURE 6190e6f085baSmrg fi 619195b296d0Smrg 6192e6f085baSmrg finalize=yes 6193e6f085baSmrg for lib in $notinst_deplibs; do 6194e6f085baSmrg # Check to see that each library is installed. 6195e6f085baSmrg libdir= 6196e6f085baSmrg if test -f "$lib"; then 6197e6f085baSmrg # If there is no directory component, then add one. 6198e6f085baSmrg case $lib in 6199e6f085baSmrg */* | *\\*) . $lib ;; 6200e6f085baSmrg *) . ./$lib ;; 6201e6f085baSmrg esac 6202e6f085baSmrg fi 6203e6f085baSmrg libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test 6204e6f085baSmrg if test -n "$libdir" && test ! -f "$libfile"; then 6205e6f085baSmrg $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 6206e6f085baSmrg finalize=no 6207e6f085baSmrg fi 6208e6f085baSmrg done 6209e6f085baSmrg 6210e6f085baSmrg relink_command= 6211e6f085baSmrg # Note that it is not necessary on cygwin/mingw to append a dot to 6212e6f085baSmrg # foo even if both foo and FILE.exe exist: automatic-append-.exe 6213e6f085baSmrg # behavior happens only for exec(3), not for open(2)! Also, sourcing 6214e6f085baSmrg # `FILE.' does not work on cygwin managed mounts. 6215e6f085baSmrg # 6216e6f085baSmrg # If there is no directory component, then add one. 6217e6f085baSmrg case $wrapper in 6218e6f085baSmrg */* | *\\*) . ${wrapper} ;; 6219e6f085baSmrg *) . ./${wrapper} ;; 6220e6f085baSmrg esac 6221e6f085baSmrg 6222e6f085baSmrg outputname= 6223e6f085baSmrg if test "$fast_install" = no && test -n "$relink_command"; then 6224e6f085baSmrg if test "$finalize" = yes && test -z "$run"; then 6225e6f085baSmrg tmpdir=`func_mktempdir` 6226e6f085baSmrg file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` 6227e6f085baSmrg outputname="$tmpdir/$file" 6228e6f085baSmrg # Replace the output file specification. 6229e6f085baSmrg relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP` 6230e6f085baSmrg 6231e6f085baSmrg $show "$relink_command" 6232e6f085baSmrg if $run eval "$relink_command"; then : 6233e6f085baSmrg else 6234e6f085baSmrg $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 6235e6f085baSmrg ${rm}r "$tmpdir" 6236e6f085baSmrg continue 6237e6f085baSmrg fi 6238e6f085baSmrg file="$outputname" 6239e6f085baSmrg else 6240e6f085baSmrg $echo "$modename: warning: cannot relink \`$file'" 1>&2 6241e6f085baSmrg fi 624295b296d0Smrg else 6243e6f085baSmrg # Install the binary that we compiled earlier. 6244e6f085baSmrg file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` 624595b296d0Smrg fi 6246e6f085baSmrg fi 624739713583Smrg 6248e6f085baSmrg # remove .exe since cygwin /usr/bin/install will append another 6249e6f085baSmrg # one anyway 6250e6f085baSmrg case $install_prog,$host in 6251e6f085baSmrg */usr/bin/install*,*cygwin*) 6252e6f085baSmrg case $file:$destfile in 6253e6f085baSmrg *.exe:*.exe) 6254e6f085baSmrg # this is ok 6255e6f085baSmrg ;; 6256e6f085baSmrg *.exe:*) 6257e6f085baSmrg destfile=$destfile.exe 6258e6f085baSmrg ;; 6259e6f085baSmrg *:*.exe) 6260e6f085baSmrg destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` 6261e6f085baSmrg ;; 6262e6f085baSmrg esac 6263e6f085baSmrg ;; 626495b296d0Smrg esac 6265e6f085baSmrg $show "$install_prog$stripme $file $destfile" 6266e6f085baSmrg $run eval "$install_prog\$stripme \$file \$destfile" || exit $? 6267e6f085baSmrg test -n "$outputname" && ${rm}r "$tmpdir" 6268e6f085baSmrg ;; 6269e6f085baSmrg esac 6270e6f085baSmrg done 627195b296d0Smrg 6272e6f085baSmrg for file in $staticlibs; do 6273e6f085baSmrg name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` 627495b296d0Smrg 6275e6f085baSmrg # Set up the ranlib parameters. 6276e6f085baSmrg oldlib="$destdir/$name" 627795b296d0Smrg 6278e6f085baSmrg $show "$install_prog $file $oldlib" 6279e6f085baSmrg $run eval "$install_prog \$file \$oldlib" || exit $? 628095b296d0Smrg 6281e6f085baSmrg if test -n "$stripme" && test -n "$old_striplib"; then 6282e6f085baSmrg $show "$old_striplib $oldlib" 6283e6f085baSmrg $run eval "$old_striplib $oldlib" || exit $? 628495b296d0Smrg fi 628595b296d0Smrg 6286e6f085baSmrg # Do each command in the postinstall commands. 6287e6f085baSmrg cmds=$old_postinstall_cmds 6288e6f085baSmrg save_ifs="$IFS"; IFS='~' 6289e6f085baSmrg for cmd in $cmds; do 6290e6f085baSmrg IFS="$save_ifs" 6291e6f085baSmrg eval cmd=\"$cmd\" 6292e6f085baSmrg $show "$cmd" 6293e6f085baSmrg $run eval "$cmd" || exit $? 6294e6f085baSmrg done 6295e6f085baSmrg IFS="$save_ifs" 6296e6f085baSmrg done 629795b296d0Smrg 6298e6f085baSmrg if test -n "$future_libdirs"; then 6299e6f085baSmrg $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 6300e6f085baSmrg fi 630195b296d0Smrg 6302e6f085baSmrg if test -n "$current_libdirs"; then 6303e6f085baSmrg # Maybe just do a dry run. 6304e6f085baSmrg test -n "$run" && current_libdirs=" -n$current_libdirs" 6305e6f085baSmrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 6306e6f085baSmrg else 6307e6f085baSmrg exit $EXIT_SUCCESS 6308e6f085baSmrg fi 6309e6f085baSmrg ;; 631095b296d0Smrg 6311e6f085baSmrg # libtool finish mode 6312e6f085baSmrg finish) 6313e6f085baSmrg modename="$modename: finish" 6314e6f085baSmrg libdirs="$nonopt" 6315e6f085baSmrg admincmds= 631695b296d0Smrg 6317e6f085baSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 6318e6f085baSmrg for dir 6319e6f085baSmrg do 6320e6f085baSmrg libdirs="$libdirs $dir" 6321e6f085baSmrg done 632295b296d0Smrg 6323e6f085baSmrg for libdir in $libdirs; do 6324e6f085baSmrg if test -n "$finish_cmds"; then 6325e6f085baSmrg # Do each command in the finish commands. 6326e6f085baSmrg cmds=$finish_cmds 6327e6f085baSmrg save_ifs="$IFS"; IFS='~' 6328e6f085baSmrg for cmd in $cmds; do 6329e6f085baSmrg IFS="$save_ifs" 6330e6f085baSmrg eval cmd=\"$cmd\" 6331e6f085baSmrg $show "$cmd" 6332e6f085baSmrg $run eval "$cmd" || admincmds="$admincmds 6333e6f085baSmrg $cmd" 633495b296d0Smrg done 6335e6f085baSmrg IFS="$save_ifs" 633695b296d0Smrg fi 6337e6f085baSmrg if test -n "$finish_eval"; then 6338e6f085baSmrg # Do the single finish_eval. 6339e6f085baSmrg eval cmds=\"$finish_eval\" 6340e6f085baSmrg $run eval "$cmds" || admincmds="$admincmds 6341e6f085baSmrg $cmds" 634239713583Smrg fi 6343e6f085baSmrg done 6344e6f085baSmrg fi 6345e6f085baSmrg 6346e6f085baSmrg # Exit here if they wanted silent mode. 6347e6f085baSmrg test "$show" = : && exit $EXIT_SUCCESS 6348e6f085baSmrg 6349e6f085baSmrg $echo "X----------------------------------------------------------------------" | $Xsed 6350e6f085baSmrg $echo "Libraries have been installed in:" 6351e6f085baSmrg for libdir in $libdirs; do 6352e6f085baSmrg $echo " $libdir" 635395b296d0Smrg done 6354e6f085baSmrg $echo 6355e6f085baSmrg $echo "If you ever happen to want to link against installed libraries" 6356e6f085baSmrg $echo "in a given directory, LIBDIR, you must either use libtool, and" 6357e6f085baSmrg $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 6358e6f085baSmrg $echo "flag during linking and do at least one of the following:" 6359e6f085baSmrg if test -n "$shlibpath_var"; then 6360e6f085baSmrg $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 6361e6f085baSmrg $echo " during execution" 6362e6f085baSmrg fi 6363e6f085baSmrg if test -n "$runpath_var"; then 6364e6f085baSmrg $echo " - add LIBDIR to the \`$runpath_var' environment variable" 6365e6f085baSmrg $echo " during linking" 6366e6f085baSmrg fi 6367e6f085baSmrg if test -n "$hardcode_libdir_flag_spec"; then 6368e6f085baSmrg libdir=LIBDIR 6369e6f085baSmrg eval flag=\"$hardcode_libdir_flag_spec\" 637095b296d0Smrg 6371e6f085baSmrg $echo " - use the \`$flag' linker flag" 6372e6f085baSmrg fi 6373e6f085baSmrg if test -n "$admincmds"; then 6374e6f085baSmrg $echo " - have your system administrator run these commands:$admincmds" 6375e6f085baSmrg fi 6376e6f085baSmrg if test -f /etc/ld.so.conf; then 6377e6f085baSmrg $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 6378e6f085baSmrg fi 6379e6f085baSmrg $echo 6380e6f085baSmrg $echo "See any operating system documentation about shared libraries for" 6381e6f085baSmrg $echo "more information, such as the ld(1) and ld.so(8) manual pages." 6382e6f085baSmrg $echo "X----------------------------------------------------------------------" | $Xsed 6383e6f085baSmrg exit $EXIT_SUCCESS 6384e6f085baSmrg ;; 638595b296d0Smrg 6386e6f085baSmrg # libtool execute mode 6387e6f085baSmrg execute) 6388e6f085baSmrg modename="$modename: execute" 638995b296d0Smrg 6390e6f085baSmrg # The first argument is the command name. 6391e6f085baSmrg cmd="$nonopt" 6392e6f085baSmrg if test -z "$cmd"; then 6393e6f085baSmrg $echo "$modename: you must specify a COMMAND" 1>&2 6394e6f085baSmrg $echo "$help" 6395e6f085baSmrg exit $EXIT_FAILURE 6396e6f085baSmrg fi 639795b296d0Smrg 6398e6f085baSmrg # Handle -dlopen flags immediately. 6399e6f085baSmrg for file in $execute_dlfiles; do 6400e6f085baSmrg if test ! -f "$file"; then 6401e6f085baSmrg $echo "$modename: \`$file' is not a file" 1>&2 6402e6f085baSmrg $echo "$help" 1>&2 6403e6f085baSmrg exit $EXIT_FAILURE 6404e6f085baSmrg fi 640539713583Smrg 6406e6f085baSmrg dir= 6407e6f085baSmrg case $file in 6408e6f085baSmrg *.la) 6409e6f085baSmrg # Check to see that this really is a libtool archive. 6410e6f085baSmrg if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : 6411e6f085baSmrg else 6412e6f085baSmrg $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 6413e6f085baSmrg $echo "$help" 1>&2 6414e6f085baSmrg exit $EXIT_FAILURE 6415e6f085baSmrg fi 641695b296d0Smrg 6417e6f085baSmrg # Read the libtool library. 6418e6f085baSmrg dlname= 6419e6f085baSmrg library_names= 642095b296d0Smrg 6421e6f085baSmrg # If there is no directory component, then add one. 6422e6f085baSmrg case $file in 6423e6f085baSmrg */* | *\\*) . $file ;; 6424e6f085baSmrg *) . ./$file ;; 6425e6f085baSmrg esac 642695b296d0Smrg 6427e6f085baSmrg # Skip this library if it cannot be dlopened. 6428e6f085baSmrg if test -z "$dlname"; then 6429e6f085baSmrg # Warn if it was a shared library. 6430e6f085baSmrg test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" 6431e6f085baSmrg continue 6432e6f085baSmrg fi 643395b296d0Smrg 6434e6f085baSmrg dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` 6435e6f085baSmrg test "X$dir" = "X$file" && dir=. 643695b296d0Smrg 6437e6f085baSmrg if test -f "$dir/$objdir/$dlname"; then 6438e6f085baSmrg dir="$dir/$objdir" 6439e6f085baSmrg else 6440e6f085baSmrg if test ! -f "$dir/$dlname"; then 6441e6f085baSmrg $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 6442e6f085baSmrg exit $EXIT_FAILURE 6443e6f085baSmrg fi 6444e6f085baSmrg fi 6445e6f085baSmrg ;; 644695b296d0Smrg 6447e6f085baSmrg *.lo) 6448e6f085baSmrg # Just add the directory containing the .lo file. 6449e6f085baSmrg dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` 6450e6f085baSmrg test "X$dir" = "X$file" && dir=. 6451e6f085baSmrg ;; 645295b296d0Smrg 6453e6f085baSmrg *) 6454e6f085baSmrg $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 6455e6f085baSmrg continue 6456e6f085baSmrg ;; 6457e6f085baSmrg esac 645895b296d0Smrg 6459e6f085baSmrg # Get the absolute pathname. 6460e6f085baSmrg absdir=`cd "$dir" && pwd` 6461e6f085baSmrg test -n "$absdir" && dir="$absdir" 646295b296d0Smrg 6463e6f085baSmrg # Now add the directory to shlibpath_var. 6464e6f085baSmrg if eval "test -z \"\$$shlibpath_var\""; then 6465e6f085baSmrg eval "$shlibpath_var=\"\$dir\"" 6466e6f085baSmrg else 6467e6f085baSmrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 6468e6f085baSmrg fi 6469e6f085baSmrg done 647095b296d0Smrg 6471e6f085baSmrg # This variable tells wrapper scripts just to set shlibpath_var 6472e6f085baSmrg # rather than running their programs. 6473e6f085baSmrg libtool_execute_magic="$magic" 647495b296d0Smrg 6475e6f085baSmrg # Check if any of the arguments is a wrapper script. 6476e6f085baSmrg args= 6477e6f085baSmrg for file 6478e6f085baSmrg do 6479e6f085baSmrg case $file in 6480e6f085baSmrg -*) ;; 6481e6f085baSmrg *) 6482e6f085baSmrg # Do a test to see if this is really a libtool program. 6483e6f085baSmrg if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then 6484e6f085baSmrg # If there is no directory component, then add one. 6485e6f085baSmrg case $file in 6486e6f085baSmrg */* | *\\*) . $file ;; 6487e6f085baSmrg *) . ./$file ;; 6488e6f085baSmrg esac 648995b296d0Smrg 6490e6f085baSmrg # Transform arg to wrapped name. 6491e6f085baSmrg file="$progdir/$program" 6492e6f085baSmrg fi 6493e6f085baSmrg ;; 6494e6f085baSmrg esac 6495e6f085baSmrg # Quote arguments (to preserve shell metacharacters). 6496e6f085baSmrg file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` 6497e6f085baSmrg args="$args \"$file\"" 6498e6f085baSmrg done 649995b296d0Smrg 6500e6f085baSmrg if test -z "$run"; then 6501e6f085baSmrg if test -n "$shlibpath_var"; then 6502e6f085baSmrg # Export the shlibpath_var. 6503e6f085baSmrg eval "export $shlibpath_var" 6504e6f085baSmrg fi 6505e6f085baSmrg 6506e6f085baSmrg # Restore saved environment variables 6507e6f085baSmrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 6508e6f085baSmrg do 6509e6f085baSmrg eval "if test \"\${save_$lt_var+set}\" = set; then 6510e6f085baSmrg $lt_var=\$save_$lt_var; export $lt_var 6511e6f085baSmrg fi" 6512e6f085baSmrg done 651395b296d0Smrg 6514e6f085baSmrg # Now prepare to actually exec the command. 6515e6f085baSmrg exec_cmd="\$cmd$args" 6516e6f085baSmrg else 6517e6f085baSmrg # Display what would be done. 6518e6f085baSmrg if test -n "$shlibpath_var"; then 6519e6f085baSmrg eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" 6520e6f085baSmrg $echo "export $shlibpath_var" 6521e6f085baSmrg fi 6522e6f085baSmrg $echo "$cmd$args" 6523e6f085baSmrg exit $EXIT_SUCCESS 6524e6f085baSmrg fi 6525e6f085baSmrg ;; 652695b296d0Smrg 6527e6f085baSmrg # libtool clean and uninstall mode 6528e6f085baSmrg clean | uninstall) 6529e6f085baSmrg modename="$modename: $mode" 6530e6f085baSmrg rm="$nonopt" 653195b296d0Smrg files= 653295b296d0Smrg rmforce= 653395b296d0Smrg exit_status=0 653495b296d0Smrg 653595b296d0Smrg # This variable tells wrapper scripts just to set variables rather 653695b296d0Smrg # than running their programs. 653795b296d0Smrg libtool_install_magic="$magic" 653895b296d0Smrg 653995b296d0Smrg for arg 654095b296d0Smrg do 654195b296d0Smrg case $arg in 6542e6f085baSmrg -f) rm="$rm $arg"; rmforce=yes ;; 6543e6f085baSmrg -*) rm="$rm $arg" ;; 654495b296d0Smrg *) files="$files $arg" ;; 654595b296d0Smrg esac 654695b296d0Smrg done 654795b296d0Smrg 6548e6f085baSmrg if test -z "$rm"; then 6549e6f085baSmrg $echo "$modename: you must specify an RM program" 1>&2 6550e6f085baSmrg $echo "$help" 1>&2 6551e6f085baSmrg exit $EXIT_FAILURE 6552e6f085baSmrg fi 655395b296d0Smrg 655495b296d0Smrg rmdirs= 655595b296d0Smrg 655695b296d0Smrg origobjdir="$objdir" 655795b296d0Smrg for file in $files; do 6558e6f085baSmrg dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` 6559e6f085baSmrg if test "X$dir" = "X$file"; then 6560e6f085baSmrg dir=. 656195b296d0Smrg objdir="$origobjdir" 656295b296d0Smrg else 656395b296d0Smrg objdir="$dir/$origobjdir" 656495b296d0Smrg fi 6565e6f085baSmrg name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` 656695b296d0Smrg test "$mode" = uninstall && objdir="$dir" 656795b296d0Smrg 656895b296d0Smrg # Remember objdir for removal later, being careful to avoid duplicates 656995b296d0Smrg if test "$mode" = clean; then 657095b296d0Smrg case " $rmdirs " in 657195b296d0Smrg *" $objdir "*) ;; 657295b296d0Smrg *) rmdirs="$rmdirs $objdir" ;; 657395b296d0Smrg esac 657495b296d0Smrg fi 657595b296d0Smrg 657695b296d0Smrg # Don't error if the file doesn't exist and rm -f was used. 6577e6f085baSmrg if (test -L "$file") >/dev/null 2>&1 \ 6578e6f085baSmrg || (test -h "$file") >/dev/null 2>&1 \ 6579e6f085baSmrg || test -f "$file"; then 658095b296d0Smrg : 658195b296d0Smrg elif test -d "$file"; then 658295b296d0Smrg exit_status=1 658395b296d0Smrg continue 658495b296d0Smrg elif test "$rmforce" = yes; then 658595b296d0Smrg continue 658695b296d0Smrg fi 658795b296d0Smrg 658895b296d0Smrg rmfiles="$file" 658995b296d0Smrg 659095b296d0Smrg case $name in 659195b296d0Smrg *.la) 659295b296d0Smrg # Possibly a libtool archive, so verify it. 6593e6f085baSmrg if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then 6594e6f085baSmrg . $dir/$name 659595b296d0Smrg 659695b296d0Smrg # Delete the libtool libraries and symlinks. 659795b296d0Smrg for n in $library_names; do 659895b296d0Smrg rmfiles="$rmfiles $objdir/$n" 659995b296d0Smrg done 660095b296d0Smrg test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" 660195b296d0Smrg 660295b296d0Smrg case "$mode" in 660395b296d0Smrg clean) 660495b296d0Smrg case " $library_names " in 660595b296d0Smrg # " " in the beginning catches empty $dlname 660695b296d0Smrg *" $dlname "*) ;; 660795b296d0Smrg *) rmfiles="$rmfiles $objdir/$dlname" ;; 660895b296d0Smrg esac 6609e6f085baSmrg test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" 661095b296d0Smrg ;; 661195b296d0Smrg uninstall) 661295b296d0Smrg if test -n "$library_names"; then 661395b296d0Smrg # Do each command in the postuninstall commands. 6614e6f085baSmrg cmds=$postuninstall_cmds 6615e6f085baSmrg save_ifs="$IFS"; IFS='~' 6616e6f085baSmrg for cmd in $cmds; do 6617e6f085baSmrg IFS="$save_ifs" 6618e6f085baSmrg eval cmd=\"$cmd\" 6619e6f085baSmrg $show "$cmd" 6620e6f085baSmrg $run eval "$cmd" 6621e6f085baSmrg if test "$?" -ne 0 && test "$rmforce" != yes; then 6622e6f085baSmrg exit_status=1 6623e6f085baSmrg fi 6624e6f085baSmrg done 6625e6f085baSmrg IFS="$save_ifs" 662695b296d0Smrg fi 662795b296d0Smrg 662895b296d0Smrg if test -n "$old_library"; then 662995b296d0Smrg # Do each command in the old_postuninstall commands. 6630e6f085baSmrg cmds=$old_postuninstall_cmds 6631e6f085baSmrg save_ifs="$IFS"; IFS='~' 6632e6f085baSmrg for cmd in $cmds; do 6633e6f085baSmrg IFS="$save_ifs" 6634e6f085baSmrg eval cmd=\"$cmd\" 6635e6f085baSmrg $show "$cmd" 6636e6f085baSmrg $run eval "$cmd" 6637e6f085baSmrg if test "$?" -ne 0 && test "$rmforce" != yes; then 6638e6f085baSmrg exit_status=1 6639e6f085baSmrg fi 6640e6f085baSmrg done 6641e6f085baSmrg IFS="$save_ifs" 664295b296d0Smrg fi 664395b296d0Smrg # FIXME: should reinstall the best remaining shared library. 664495b296d0Smrg ;; 664595b296d0Smrg esac 664695b296d0Smrg fi 664795b296d0Smrg ;; 664895b296d0Smrg 664995b296d0Smrg *.lo) 665095b296d0Smrg # Possibly a libtool object, so verify it. 6651e6f085baSmrg if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then 665295b296d0Smrg 665395b296d0Smrg # Read the .lo file 6654e6f085baSmrg . $dir/$name 665595b296d0Smrg 665695b296d0Smrg # Add PIC object to the list of files to remove. 6657e6f085baSmrg if test -n "$pic_object" \ 6658e6f085baSmrg && test "$pic_object" != none; then 665995b296d0Smrg rmfiles="$rmfiles $dir/$pic_object" 666095b296d0Smrg fi 666195b296d0Smrg 666295b296d0Smrg # Add non-PIC object to the list of files to remove. 6663e6f085baSmrg if test -n "$non_pic_object" \ 6664e6f085baSmrg && test "$non_pic_object" != none; then 666595b296d0Smrg rmfiles="$rmfiles $dir/$non_pic_object" 666695b296d0Smrg fi 666795b296d0Smrg fi 666895b296d0Smrg ;; 666995b296d0Smrg 667095b296d0Smrg *) 667195b296d0Smrg if test "$mode" = clean ; then 667295b296d0Smrg noexename=$name 667395b296d0Smrg case $file in 667495b296d0Smrg *.exe) 6675e6f085baSmrg file=`$echo $file|${SED} 's,.exe$,,'` 6676e6f085baSmrg noexename=`$echo $name|${SED} 's,.exe$,,'` 667795b296d0Smrg # $file with .exe has already been added to rmfiles, 667895b296d0Smrg # add $file without .exe 667995b296d0Smrg rmfiles="$rmfiles $file" 668095b296d0Smrg ;; 668195b296d0Smrg esac 668295b296d0Smrg # Do a test to see if this is a libtool program. 6683e6f085baSmrg if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then 6684e6f085baSmrg relink_command= 6685e6f085baSmrg . $dir/$noexename 668695b296d0Smrg 668795b296d0Smrg # note $name still contains .exe if it was in $file originally 668895b296d0Smrg # as does the version of $file that was added into $rmfiles 668995b296d0Smrg rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" 669095b296d0Smrg if test "$fast_install" = yes && test -n "$relink_command"; then 669195b296d0Smrg rmfiles="$rmfiles $objdir/lt-$name" 669295b296d0Smrg fi 669395b296d0Smrg if test "X$noexename" != "X$name" ; then 669495b296d0Smrg rmfiles="$rmfiles $objdir/lt-${noexename}.c" 669595b296d0Smrg fi 669695b296d0Smrg fi 669795b296d0Smrg fi 669895b296d0Smrg ;; 669995b296d0Smrg esac 6700e6f085baSmrg $show "$rm $rmfiles" 6701e6f085baSmrg $run $rm $rmfiles || exit_status=1 670295b296d0Smrg done 670395b296d0Smrg objdir="$origobjdir" 670495b296d0Smrg 670595b296d0Smrg # Try to remove the ${objdir}s in the directories where we deleted files 670695b296d0Smrg for dir in $rmdirs; do 670795b296d0Smrg if test -d "$dir"; then 6708e6f085baSmrg $show "rmdir $dir" 6709e6f085baSmrg $run rmdir $dir >/dev/null 2>&1 671095b296d0Smrg fi 671195b296d0Smrg done 671295b296d0Smrg 671395b296d0Smrg exit $exit_status 6714e6f085baSmrg ;; 671595b296d0Smrg 6716e6f085baSmrg "") 6717e6f085baSmrg $echo "$modename: you must specify a MODE" 1>&2 6718e6f085baSmrg $echo "$generic_help" 1>&2 6719e6f085baSmrg exit $EXIT_FAILURE 6720e6f085baSmrg ;; 6721e6f085baSmrg esac 672239713583Smrg 6723e6f085baSmrg if test -z "$exec_cmd"; then 6724e6f085baSmrg $echo "$modename: invalid operation mode \`$mode'" 1>&2 6725e6f085baSmrg $echo "$generic_help" 1>&2 6726e6f085baSmrg exit $EXIT_FAILURE 6727e6f085baSmrg fi 6728e6f085baSmrgfi # test -z "$show_help" 672995b296d0Smrg 673095b296d0Smrgif test -n "$exec_cmd"; then 6731e6f085baSmrg eval exec $exec_cmd 673295b296d0Smrg exit $EXIT_FAILURE 673395b296d0Smrgfi 673495b296d0Smrg 6735e6f085baSmrg# We need to display help for each of the modes. 6736e6f085baSmrgcase $mode in 6737e6f085baSmrg"") $echo \ 6738e6f085baSmrg"Usage: $modename [OPTION]... [MODE-ARG]... 6739e6f085baSmrg 6740e6f085baSmrgProvide generalized library-building support services. 6741e6f085baSmrg 6742e6f085baSmrg --config show all configuration variables 6743e6f085baSmrg --debug enable verbose shell tracing 6744e6f085baSmrg-n, --dry-run display commands without modifying any files 6745e6f085baSmrg --features display basic configuration information and exit 6746e6f085baSmrg --finish same as \`--mode=finish' 6747e6f085baSmrg --help display this help message and exit 6748e6f085baSmrg --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] 6749e6f085baSmrg --quiet same as \`--silent' 6750e6f085baSmrg --silent don't print informational messages 6751e6f085baSmrg --tag=TAG use configuration variables from tag TAG 6752e6f085baSmrg --version print version information 6753e6f085baSmrg 6754e6f085baSmrgMODE must be one of the following: 6755e6f085baSmrg 6756e6f085baSmrg clean remove files from the build directory 6757e6f085baSmrg compile compile a source file into a libtool object 6758e6f085baSmrg execute automatically set library path, then run a program 6759e6f085baSmrg finish complete the installation of libtool libraries 6760e6f085baSmrg install install libraries or executables 6761e6f085baSmrg link create a library or an executable 6762e6f085baSmrg uninstall remove libraries from an installed directory 6763e6f085baSmrg 6764e6f085baSmrgMODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for 6765e6f085baSmrga more detailed description of MODE. 6766e6f085baSmrg 6767e6f085baSmrgReport bugs to <bug-libtool@gnu.org>." 6768e6f085baSmrg exit $EXIT_SUCCESS 6769e6f085baSmrg ;; 6770e6f085baSmrg 6771e6f085baSmrgclean) 6772e6f085baSmrg $echo \ 6773e6f085baSmrg"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 6774e6f085baSmrg 6775e6f085baSmrgRemove files from the build directory. 6776e6f085baSmrg 6777e6f085baSmrgRM is the name of the program to use to delete files associated with each FILE 6778e6f085baSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 6779e6f085baSmrgto RM. 6780e6f085baSmrg 6781e6f085baSmrgIf FILE is a libtool library, object or program, all the files associated 6782e6f085baSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 6783e6f085baSmrg ;; 6784e6f085baSmrg 6785e6f085baSmrgcompile) 6786e6f085baSmrg $echo \ 6787e6f085baSmrg"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 6788e6f085baSmrg 6789e6f085baSmrgCompile a source file into a libtool library object. 6790e6f085baSmrg 6791e6f085baSmrgThis mode accepts the following additional options: 6792e6f085baSmrg 6793e6f085baSmrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 6794e6f085baSmrg -prefer-pic try to building PIC objects only 6795e6f085baSmrg -prefer-non-pic try to building non-PIC objects only 6796e6f085baSmrg -static always build a \`.o' file suitable for static linking 6797e6f085baSmrg 6798e6f085baSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 6799e6f085baSmrgfrom the given SOURCEFILE. 6800e6f085baSmrg 6801e6f085baSmrgThe output file name is determined by removing the directory component from 6802e6f085baSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 6803e6f085baSmrglibrary object suffix, \`.lo'." 6804e6f085baSmrg ;; 6805e6f085baSmrg 6806e6f085baSmrgexecute) 6807e6f085baSmrg $echo \ 6808e6f085baSmrg"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... 6809e6f085baSmrg 6810e6f085baSmrgAutomatically set library path, then run a program. 6811e6f085baSmrg 6812e6f085baSmrgThis mode accepts the following additional options: 6813e6f085baSmrg 6814e6f085baSmrg -dlopen FILE add the directory containing FILE to the library path 6815e6f085baSmrg 6816e6f085baSmrgThis mode sets the library path environment variable according to \`-dlopen' 6817e6f085baSmrgflags. 6818e6f085baSmrg 6819e6f085baSmrgIf any of the ARGS are libtool executable wrappers, then they are translated 6820e6f085baSmrginto their corresponding uninstalled binary, and any of their required library 6821e6f085baSmrgdirectories are added to the library path. 6822e6f085baSmrg 6823e6f085baSmrgThen, COMMAND is executed, with ARGS as arguments." 6824e6f085baSmrg ;; 6825e6f085baSmrg 6826e6f085baSmrgfinish) 6827e6f085baSmrg $echo \ 6828e6f085baSmrg"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... 6829e6f085baSmrg 6830e6f085baSmrgComplete the installation of libtool libraries. 6831e6f085baSmrg 6832e6f085baSmrgEach LIBDIR is a directory that contains libtool libraries. 6833e6f085baSmrg 6834e6f085baSmrgThe commands that this mode executes may require superuser privileges. Use 6835e6f085baSmrgthe \`--dry-run' option if you just want to see what would be executed." 6836e6f085baSmrg ;; 6837e6f085baSmrg 6838e6f085baSmrginstall) 6839e6f085baSmrg $echo \ 6840e6f085baSmrg"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... 6841e6f085baSmrg 6842e6f085baSmrgInstall executables or libraries. 6843e6f085baSmrg 6844e6f085baSmrgINSTALL-COMMAND is the installation command. The first component should be 6845e6f085baSmrgeither the \`install' or \`cp' program. 6846e6f085baSmrg 6847e6f085baSmrgThe rest of the components are interpreted as arguments to that command (only 6848e6f085baSmrgBSD-compatible install options are recognized)." 6849e6f085baSmrg ;; 6850e6f085baSmrg 6851e6f085baSmrglink) 6852e6f085baSmrg $echo \ 6853e6f085baSmrg"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... 6854e6f085baSmrg 6855e6f085baSmrgLink object files or libraries together to form another library, or to 6856e6f085baSmrgcreate an executable program. 685795b296d0Smrg 6858e6f085baSmrgLINK-COMMAND is a command using the C compiler that you would use to create 6859e6f085baSmrga program from several object files. 6860e6f085baSmrg 6861e6f085baSmrgThe following components of LINK-COMMAND are treated specially: 6862e6f085baSmrg 6863e6f085baSmrg -all-static do not do any dynamic linking at all 6864e6f085baSmrg -avoid-version do not add a version suffix if possible 6865e6f085baSmrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 6866e6f085baSmrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 6867e6f085baSmrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 6868e6f085baSmrg -export-symbols SYMFILE 6869e6f085baSmrg try to export only the symbols listed in SYMFILE 6870e6f085baSmrg -export-symbols-regex REGEX 6871e6f085baSmrg try to export only the symbols matching REGEX 6872e6f085baSmrg -LLIBDIR search LIBDIR for required installed libraries 6873e6f085baSmrg -lNAME OUTPUT-FILE requires the installed library libNAME 6874e6f085baSmrg -module build a library that can dlopened 6875e6f085baSmrg -no-fast-install disable the fast-install mode 6876e6f085baSmrg -no-install link a not-installable executable 6877e6f085baSmrg -no-undefined declare that a library does not refer to external symbols 6878e6f085baSmrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 6879e6f085baSmrg -objectlist FILE Use a list of object files found in FILE to specify objects 6880e6f085baSmrg -precious-files-regex REGEX 6881e6f085baSmrg don't remove output files matching REGEX 6882e6f085baSmrg -release RELEASE specify package release information 6883e6f085baSmrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 6884e6f085baSmrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 6885e6f085baSmrg -static do not do any dynamic linking of uninstalled libtool libraries 6886e6f085baSmrg -static-libtool-libs 6887e6f085baSmrg do not do any dynamic linking of libtool libraries 6888e6f085baSmrg -version-info CURRENT[:REVISION[:AGE]] 6889e6f085baSmrg specify library version info [each variable defaults to 0] 6890e6f085baSmrg 6891e6f085baSmrgAll other options (arguments beginning with \`-') are ignored. 6892e6f085baSmrg 6893e6f085baSmrgEvery other argument is treated as a filename. Files ending in \`.la' are 6894e6f085baSmrgtreated as uninstalled libtool libraries, other files are standard or library 6895e6f085baSmrgobject files. 6896e6f085baSmrg 6897e6f085baSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 6898e6f085baSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 6899e6f085baSmrgrequired, except when creating a convenience library. 6900e6f085baSmrg 6901e6f085baSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 6902e6f085baSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 6903e6f085baSmrg 6904e6f085baSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 6905e6f085baSmrgis created, otherwise an executable program is created." 6906e6f085baSmrg ;; 6907e6f085baSmrg 6908e6f085baSmrguninstall) 6909e6f085baSmrg $echo \ 6910e6f085baSmrg"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 6911e6f085baSmrg 6912e6f085baSmrgRemove libraries from an installation directory. 6913e6f085baSmrg 6914e6f085baSmrgRM is the name of the program to use to delete files associated with each FILE 6915e6f085baSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 6916e6f085baSmrgto RM. 6917e6f085baSmrg 6918e6f085baSmrgIf FILE is a libtool library, all the files associated with it are deleted. 6919e6f085baSmrgOtherwise, only FILE itself is deleted using RM." 6920e6f085baSmrg ;; 6921e6f085baSmrg 6922e6f085baSmrg*) 6923e6f085baSmrg $echo "$modename: invalid operation mode \`$mode'" 1>&2 6924e6f085baSmrg $echo "$help" 1>&2 6925e6f085baSmrg exit $EXIT_FAILURE 6926e6f085baSmrg ;; 6927e6f085baSmrgesac 6928e6f085baSmrg 6929e6f085baSmrg$echo 6930e6f085baSmrg$echo "Try \`$modename --help' for more information about other modes." 6931e6f085baSmrg 6932e6f085baSmrgexit $? 693395b296d0Smrg 693495b296d0Smrg# The TAGs below are defined such that we never get into a situation 693595b296d0Smrg# in which we disable both kinds of libraries. Given conflicting 693695b296d0Smrg# choices, we go for a static library, that is the most portable, 693795b296d0Smrg# since we can't tell whether shared libraries were disabled because 693895b296d0Smrg# the user asked for that or because the platform doesn't support 693995b296d0Smrg# them. This is particularly important on AIX, because we don't 694095b296d0Smrg# support having both static and shared libraries enabled at the same 694195b296d0Smrg# time on that platform, so we default to a shared-only configuration. 694295b296d0Smrg# If a disable-shared tag is given, we'll fallback to a static-only 694395b296d0Smrg# configuration. But we'll never go from static-only to shared-only. 694495b296d0Smrg 694595b296d0Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 6946e6f085baSmrgdisable_libs=shared 694795b296d0Smrg# ### END LIBTOOL TAG CONFIG: disable-shared 694895b296d0Smrg 694995b296d0Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 6950e6f085baSmrgdisable_libs=static 695195b296d0Smrg# ### END LIBTOOL TAG CONFIG: disable-static 695295b296d0Smrg 695395b296d0Smrg# Local Variables: 695495b296d0Smrg# mode:shell-script 695595b296d0Smrg# sh-indentation:2 695695b296d0Smrg# End: 6957