ltmain.sh revision e8ead290
1e169010aSmrg# Generated from ltmain.m4sh. 2e169010aSmrg 3e8ead290Smrg# libtool (GNU libtool) 2.2.10 4e169010aSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 5e169010aSmrg 6e8ead290Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 7e8ead290Smrg# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. 8e169010aSmrg# This is free software; see the source for copying conditions. There is NO 9e169010aSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 10e169010aSmrg 11e169010aSmrg# GNU Libtool is free software; you can redistribute it and/or modify 127914d74bSmrg# it under the terms of the GNU General Public License as published by 137914d74bSmrg# the Free Software Foundation; either version 2 of the License, or 147914d74bSmrg# (at your option) any later version. 157914d74bSmrg# 16e169010aSmrg# As a special exception to the GNU General Public License, 17e169010aSmrg# if you distribute this file as part of a program or library that 18e169010aSmrg# is built using GNU Libtool, you may include this file under the 19e169010aSmrg# same distribution terms that you use for the rest of that program. 20e169010aSmrg# 21e169010aSmrg# GNU Libtool is distributed in the hope that it will be useful, but 227914d74bSmrg# WITHOUT ANY WARRANTY; without even the implied warranty of 237914d74bSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 247914d74bSmrg# General Public License for more details. 257914d74bSmrg# 267914d74bSmrg# You should have received a copy of the GNU General Public License 27e169010aSmrg# along with GNU Libtool; see the file COPYING. If not, a copy 28e169010aSmrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 29e169010aSmrg# or obtained by writing to the Free Software Foundation, Inc., 30e169010aSmrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 31e169010aSmrg 32e169010aSmrg# Usage: $progname [OPTION]... [MODE-ARG]... 33e169010aSmrg# 34e169010aSmrg# Provide generalized library-building support services. 357914d74bSmrg# 36e8ead290Smrg# --config show all configuration variables 37e8ead290Smrg# --debug enable verbose shell tracing 38e8ead290Smrg# -n, --dry-run display commands without modifying any files 39e8ead290Smrg# --features display basic configuration information and exit 40e8ead290Smrg# --mode=MODE use operation mode MODE 41e8ead290Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 42e8ead290Smrg# --quiet, --silent don't print informational messages 43e8ead290Smrg# --no-quiet, --no-silent 44e8ead290Smrg# print informational messages (default) 45e8ead290Smrg# --tag=TAG use configuration variables from tag TAG 46e8ead290Smrg# -v, --verbose print more informational messages than default 47e8ead290Smrg# --no-verbose don't print the extra informational messages 48e8ead290Smrg# --version print version information 49e8ead290Smrg# -h, --help, --help-all print short, long, or detailed help message 50e169010aSmrg# 51e169010aSmrg# MODE must be one of the following: 52e169010aSmrg# 53e8ead290Smrg# clean remove files from the build directory 54e8ead290Smrg# compile compile a source file into a libtool object 55e8ead290Smrg# execute automatically set library path, then run a program 56e8ead290Smrg# finish complete the installation of libtool libraries 57e8ead290Smrg# install install libraries or executables 58e8ead290Smrg# link create a library or an executable 59e8ead290Smrg# uninstall remove libraries from an installed directory 60e169010aSmrg# 61e8ead290Smrg# MODE-ARGS vary depending on the MODE. When passed as first option, 62e8ead290Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 63e169010aSmrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 64e169010aSmrg# 65e169010aSmrg# When reporting a bug, please describe a test case to reproduce it and 66e169010aSmrg# include the following information: 67e169010aSmrg# 68e8ead290Smrg# host-triplet: $host 69e8ead290Smrg# shell: $SHELL 70e8ead290Smrg# compiler: $LTCC 71e8ead290Smrg# compiler flags: $LTCFLAGS 72e8ead290Smrg# linker: $LD (gnu? $with_gnu_ld) 73e8ead290Smrg# $progname: (GNU libtool) 2.2.10 74e8ead290Smrg# automake: $automake_version 75e8ead290Smrg# autoconf: $autoconf_version 76e169010aSmrg# 77e169010aSmrg# Report bugs to <bug-libtool@gnu.org>. 78e169010aSmrg 79e8ead290SmrgPROGRAM=libtool 80e169010aSmrgPACKAGE=libtool 81e8ead290SmrgVERSION=2.2.10 82e169010aSmrgTIMESTAMP="" 83e8ead290Smrgpackage_revision=1.3175 84e169010aSmrg 85e169010aSmrg# Be Bourne compatible 86e169010aSmrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 87e169010aSmrg emulate sh 88e169010aSmrg NULLCMD=: 89e169010aSmrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 90e169010aSmrg # is contrary to our usage. Disable this feature. 91e169010aSmrg alias -g '${1+"$@"}'='"$@"' 92e169010aSmrg setopt NO_GLOB_SUBST 93e169010aSmrgelse 94e169010aSmrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 95e169010aSmrgfi 96e169010aSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 97e169010aSmrgDUALCASE=1; export DUALCASE # for MKS sh 98e169010aSmrg 99e8ead290Smrg# A function that is used when there is no print builtin or printf. 100e8ead290Smrgfunc_fallback_echo () 101e8ead290Smrg{ 102e8ead290Smrg eval 'cat <<_LTECHO_EOF 103e8ead290Smrg$1 104e8ead290Smrg_LTECHO_EOF' 105e8ead290Smrg} 106e8ead290Smrg 107e169010aSmrg# NLS nuisances: We save the old values to restore during execute mode. 108e169010aSmrglt_user_locale= 109e169010aSmrglt_safe_locale= 110e169010aSmrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 111e169010aSmrgdo 112e169010aSmrg eval "if test \"\${$lt_var+set}\" = set; then 113e169010aSmrg save_$lt_var=\$$lt_var 114e169010aSmrg $lt_var=C 115e169010aSmrg export $lt_var 116e169010aSmrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 117e169010aSmrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 118e169010aSmrg fi" 119e169010aSmrgdone 120e8ead290SmrgLC_ALL=C 121e8ead290SmrgLANGUAGE=C 122e8ead290Smrgexport LANGUAGE LC_ALL 123e169010aSmrg 124e169010aSmrg$lt_unset CDPATH 125e169010aSmrg 126e169010aSmrg 127e8ead290Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 128e8ead290Smrg# is ksh but when the shell is invoked as "sh" and the current value of 129e8ead290Smrg# the _XPG environment variable is not equal to 1 (one), the special 130e8ead290Smrg# positional parameter $0, within a function call, is the name of the 131e8ead290Smrg# function. 132e8ead290Smrgprogpath="$0" 133e169010aSmrg 134e169010aSmrg 135e169010aSmrg 136e169010aSmrg: ${CP="cp -f"} 137e8ead290Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 138e8ead290Smrg: ${EGREP="grep -E"} 139e8ead290Smrg: ${FGREP="grep -F"} 140e8ead290Smrg: ${GREP="grep"} 141e169010aSmrg: ${LN_S="ln -s"} 142e169010aSmrg: ${MAKE="make"} 143e169010aSmrg: ${MKDIR="mkdir"} 144e169010aSmrg: ${MV="mv -f"} 145e169010aSmrg: ${RM="rm -f"} 146e8ead290Smrg: ${SED="sed"} 147e169010aSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 148e169010aSmrg: ${Xsed="$SED -e 1s/^X//"} 1497914d74bSmrg 150e169010aSmrg# Global variables: 151e169010aSmrgEXIT_SUCCESS=0 152e169010aSmrgEXIT_FAILURE=1 153e169010aSmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 154e169010aSmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 155e169010aSmrg 156e169010aSmrgexit_status=$EXIT_SUCCESS 157e169010aSmrg 158e169010aSmrg# Make sure IFS has a sensible default 159e169010aSmrglt_nl=' 160e169010aSmrg' 161e169010aSmrgIFS=" $lt_nl" 162e169010aSmrg 163e169010aSmrgdirname="s,/[^/]*$,," 164e169010aSmrgbasename="s,^.*/,," 165e169010aSmrg 166e169010aSmrg# func_dirname_and_basename file append nondir_replacement 167e169010aSmrg# perform func_basename and func_dirname in a single function 168e169010aSmrg# call: 169e169010aSmrg# dirname: Compute the dirname of FILE. If nonempty, 170e169010aSmrg# add APPEND to the result, otherwise set result 171e169010aSmrg# to NONDIR_REPLACEMENT. 172e169010aSmrg# value returned in "$func_dirname_result" 173e169010aSmrg# basename: Compute filename of FILE. 174e169010aSmrg# value retuned in "$func_basename_result" 175e169010aSmrg# Implementation must be kept synchronized with func_dirname 176e169010aSmrg# and func_basename. For efficiency, we do not delegate to 177e169010aSmrg# those functions but instead duplicate the functionality here. 178e169010aSmrgfunc_dirname_and_basename () 179e169010aSmrg{ 180e169010aSmrg # Extract subdirectory from the argument. 181e8ead290Smrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 182e169010aSmrg if test "X$func_dirname_result" = "X${1}"; then 183e169010aSmrg func_dirname_result="${3}" 184e169010aSmrg else 185e169010aSmrg func_dirname_result="$func_dirname_result${2}" 186e169010aSmrg fi 187e8ead290Smrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 188e169010aSmrg} 189e169010aSmrg 190e169010aSmrg# Generated shell functions inserted here. 1917914d74bSmrg 192e8ead290Smrg# These SED scripts presuppose an absolute path with a trailing slash. 193e8ead290Smrgpathcar='s,^/\([^/]*\).*$,\1,' 194e8ead290Smrgpathcdr='s,^/[^/]*,,' 195e8ead290Smrgremovedotparts=':dotsl 196e8ead290Smrg s@/\./@/@g 197e8ead290Smrg t dotsl 198e8ead290Smrg s,/\.$,/,' 199e8ead290Smrgcollapseslashes='s@/\{1,\}@/@g' 200e8ead290Smrgfinalslash='s,/*$,/,' 201e8ead290Smrg 202e8ead290Smrg# func_normal_abspath PATH 203e8ead290Smrg# Remove doubled-up and trailing slashes, "." path components, 204e8ead290Smrg# and cancel out any ".." path components in PATH after making 205e8ead290Smrg# it an absolute path. 206e8ead290Smrg# value returned in "$func_normal_abspath_result" 207e8ead290Smrgfunc_normal_abspath () 208e8ead290Smrg{ 209e8ead290Smrg # Start from root dir and reassemble the path. 210e8ead290Smrg func_normal_abspath_result= 211e8ead290Smrg func_normal_abspath_tpath=$1 212e8ead290Smrg func_normal_abspath_altnamespace= 213e8ead290Smrg case $func_normal_abspath_tpath in 214e8ead290Smrg "") 215e8ead290Smrg # Empty path, that just means $cwd. 216e8ead290Smrg func_stripname '' '/' "`pwd`" 217e8ead290Smrg func_normal_abspath_result=$func_stripname_result 218e8ead290Smrg return 219e8ead290Smrg ;; 220e8ead290Smrg # The next three entries are used to spot a run of precisely 221e8ead290Smrg # two leading slashes without using negated character classes; 222e8ead290Smrg # we take advantage of case's first-match behaviour. 223e8ead290Smrg ///*) 224e8ead290Smrg # Unusual form of absolute path, do nothing. 225e8ead290Smrg ;; 226e8ead290Smrg //*) 227e8ead290Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 228e8ead290Smrg # and for example Cygwin uses it to access remote file shares 229e8ead290Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 230e8ead290Smrg func_normal_abspath_altnamespace=/ 231e8ead290Smrg ;; 232e8ead290Smrg /*) 233e8ead290Smrg # Absolute path, do nothing. 234e8ead290Smrg ;; 235e8ead290Smrg *) 236e8ead290Smrg # Relative path, prepend $cwd. 237e8ead290Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 238e8ead290Smrg ;; 239e8ead290Smrg esac 240e8ead290Smrg # Cancel out all the simple stuff to save iterations. We also want 241e8ead290Smrg # the path to end with a slash for ease of parsing, so make sure 242e8ead290Smrg # there is one (and only one) here. 243e8ead290Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 244e8ead290Smrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 245e8ead290Smrg while :; do 246e8ead290Smrg # Processed it all yet? 247e8ead290Smrg if test "$func_normal_abspath_tpath" = / ; then 248e8ead290Smrg # If we ascended to the root using ".." the result may be empty now. 249e8ead290Smrg if test -z "$func_normal_abspath_result" ; then 250e8ead290Smrg func_normal_abspath_result=/ 251e8ead290Smrg fi 252e8ead290Smrg break 253e8ead290Smrg fi 254e8ead290Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 255e8ead290Smrg -e "$pathcar"` 256e8ead290Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 257e8ead290Smrg -e "$pathcdr"` 258e8ead290Smrg # Figure out what to do with it 259e8ead290Smrg case $func_normal_abspath_tcomponent in 260e8ead290Smrg "") 261e8ead290Smrg # Trailing empty path component, ignore it. 262e8ead290Smrg ;; 263e8ead290Smrg ..) 264e8ead290Smrg # Parent dir; strip last assembled component from result. 265e8ead290Smrg func_dirname "$func_normal_abspath_result" 266e8ead290Smrg func_normal_abspath_result=$func_dirname_result 267e8ead290Smrg ;; 268e8ead290Smrg *) 269e8ead290Smrg # Actual path component, append it. 270e8ead290Smrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 271e8ead290Smrg ;; 272e8ead290Smrg esac 273e8ead290Smrg done 274e8ead290Smrg # Restore leading double-slash if one was found on entry. 275e8ead290Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 276e8ead290Smrg} 277e8ead290Smrg 278e8ead290Smrg# func_relative_path SRCDIR DSTDIR 279e8ead290Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 280e8ead290Smrg# slash if non-empty, suitable for immediately appending a filename 281e8ead290Smrg# without needing to append a separator. 282e8ead290Smrg# value returned in "$func_relative_path_result" 283e8ead290Smrgfunc_relative_path () 284e8ead290Smrg{ 285e8ead290Smrg func_relative_path_result= 286e8ead290Smrg func_normal_abspath "$1" 287e8ead290Smrg func_relative_path_tlibdir=$func_normal_abspath_result 288e8ead290Smrg func_normal_abspath "$2" 289e8ead290Smrg func_relative_path_tbindir=$func_normal_abspath_result 290e8ead290Smrg 291e8ead290Smrg # Ascend the tree starting from libdir 292e8ead290Smrg while :; do 293e8ead290Smrg # check if we have found a prefix of bindir 294e8ead290Smrg case $func_relative_path_tbindir in 295e8ead290Smrg $func_relative_path_tlibdir) 296e8ead290Smrg # found an exact match 297e8ead290Smrg func_relative_path_tcancelled= 298e8ead290Smrg break 299e8ead290Smrg ;; 300e8ead290Smrg $func_relative_path_tlibdir*) 301e8ead290Smrg # found a matching prefix 302e8ead290Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 303e8ead290Smrg func_relative_path_tcancelled=$func_stripname_result 304e8ead290Smrg if test -z "$func_relative_path_result"; then 305e8ead290Smrg func_relative_path_result=. 306e8ead290Smrg fi 307e8ead290Smrg break 308e8ead290Smrg ;; 309e8ead290Smrg *) 310e8ead290Smrg func_dirname $func_relative_path_tlibdir 311e8ead290Smrg func_relative_path_tlibdir=${func_dirname_result} 312e8ead290Smrg if test "x$func_relative_path_tlibdir" = x ; then 313e8ead290Smrg # Have to descend all the way to the root! 314e8ead290Smrg func_relative_path_result=../$func_relative_path_result 315e8ead290Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 316e8ead290Smrg break 317e8ead290Smrg fi 318e8ead290Smrg func_relative_path_result=../$func_relative_path_result 319e8ead290Smrg ;; 320e8ead290Smrg esac 321e8ead290Smrg done 322e8ead290Smrg 323e8ead290Smrg # Now calculate path; take care to avoid doubling-up slashes. 324e8ead290Smrg func_stripname '' '/' "$func_relative_path_result" 325e8ead290Smrg func_relative_path_result=$func_stripname_result 326e8ead290Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 327e8ead290Smrg if test "x$func_stripname_result" != x ; then 328e8ead290Smrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 329e8ead290Smrg fi 330e8ead290Smrg 331e8ead290Smrg # Normalisation. If bindir is libdir, return empty string, 332e8ead290Smrg # else relative path ending with a slash; either way, target 333e8ead290Smrg # file name can be directly appended. 334e8ead290Smrg if test ! -z "$func_relative_path_result"; then 335e8ead290Smrg func_stripname './' '' "$func_relative_path_result/" 336e8ead290Smrg func_relative_path_result=$func_stripname_result 337e8ead290Smrg fi 338e8ead290Smrg} 3397914d74bSmrg 3407914d74bSmrg# The name of this program: 341e169010aSmrgfunc_dirname_and_basename "$progpath" 342e169010aSmrgprogname=$func_basename_result 3437914d74bSmrg 344e169010aSmrg# Make sure we have an absolute path for reexecution: 345e169010aSmrgcase $progpath in 346e169010aSmrg [\\/]*|[A-Za-z]:\\*) ;; 347e169010aSmrg *[\\/]*) 348e169010aSmrg progdir=$func_dirname_result 349e169010aSmrg progdir=`cd "$progdir" && pwd` 350e169010aSmrg progpath="$progdir/$progname" 351e169010aSmrg ;; 352e169010aSmrg *) 353e169010aSmrg save_IFS="$IFS" 354e169010aSmrg IFS=: 355e169010aSmrg for progdir in $PATH; do 356e169010aSmrg IFS="$save_IFS" 357e169010aSmrg test -x "$progdir/$progname" && break 358e169010aSmrg done 359e169010aSmrg IFS="$save_IFS" 360e169010aSmrg test -n "$progdir" || progdir=`pwd` 361e169010aSmrg progpath="$progdir/$progname" 362e169010aSmrg ;; 363e169010aSmrgesac 3647914d74bSmrg 365e169010aSmrg# Sed substitution that helps us do robust quoting. It backslashifies 366e169010aSmrg# metacharacters that are still active within double-quoted strings. 367e169010aSmrgXsed="${SED}"' -e 1s/^X//' 368e169010aSmrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 369e169010aSmrg 370e169010aSmrg# Same as above, but do not quote variable references. 371e169010aSmrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 372e169010aSmrg 373e169010aSmrg# Re-`\' parameter expansions in output of double_quote_subst that were 374e169010aSmrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 375e169010aSmrg# in input to double_quote_subst, that '$' was protected from expansion. 376e169010aSmrg# Since each input `\' is now two `\'s, look for any number of runs of 377e169010aSmrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 378e169010aSmrgbs='\\' 379e169010aSmrgbs2='\\\\' 380e169010aSmrgbs4='\\\\\\\\' 381e169010aSmrgdollar='\$' 382e169010aSmrgsed_double_backslash="\ 383e169010aSmrg s/$bs4/&\\ 384e169010aSmrg/g 385e169010aSmrg s/^$bs2$dollar/$bs&/ 386e169010aSmrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 387e169010aSmrg s/\n//g" 388e169010aSmrg 389e169010aSmrg# Standard options: 390e169010aSmrgopt_dry_run=false 391e169010aSmrgopt_help=false 392e169010aSmrgopt_quiet=false 393e169010aSmrgopt_verbose=false 394e169010aSmrgopt_warning=: 395e169010aSmrg 396e169010aSmrg# func_echo arg... 397e169010aSmrg# Echo program name prefixed message, along with the current mode 398e169010aSmrg# name if it has been set yet. 399e169010aSmrgfunc_echo () 400e169010aSmrg{ 401e169010aSmrg $ECHO "$progname${mode+: }$mode: $*" 402e169010aSmrg} 4037914d74bSmrg 404e169010aSmrg# func_verbose arg... 405e169010aSmrg# Echo program name prefixed message in verbose mode only. 406e169010aSmrgfunc_verbose () 407e169010aSmrg{ 408e169010aSmrg $opt_verbose && func_echo ${1+"$@"} 4097914d74bSmrg 410e169010aSmrg # A bug in bash halts the script if the last line of a function 411e169010aSmrg # fails when set -e is in force, so we need another command to 412e169010aSmrg # work around that: 413e169010aSmrg : 414e169010aSmrg} 4157914d74bSmrg 416e8ead290Smrg# func_echo_all arg... 417e8ead290Smrg# Invoke $ECHO with all args, space-separated. 418e8ead290Smrgfunc_echo_all () 419e8ead290Smrg{ 420e8ead290Smrg $ECHO "$*" 421e8ead290Smrg} 422e8ead290Smrg 423e169010aSmrg# func_error arg... 424e169010aSmrg# Echo program name prefixed message to standard error. 425e169010aSmrgfunc_error () 426e169010aSmrg{ 427e169010aSmrg $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 428e169010aSmrg} 4297914d74bSmrg 430e169010aSmrg# func_warning arg... 431e169010aSmrg# Echo program name prefixed warning message to standard error. 432e169010aSmrgfunc_warning () 433e169010aSmrg{ 434e169010aSmrg $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 4357914d74bSmrg 436e169010aSmrg # bash bug again: 437e169010aSmrg : 438e169010aSmrg} 4397914d74bSmrg 440e169010aSmrg# func_fatal_error arg... 441e169010aSmrg# Echo program name prefixed message to standard error, and exit. 442e169010aSmrgfunc_fatal_error () 443e169010aSmrg{ 444e169010aSmrg func_error ${1+"$@"} 445e169010aSmrg exit $EXIT_FAILURE 446e169010aSmrg} 4477914d74bSmrg 448e169010aSmrg# func_fatal_help arg... 449e169010aSmrg# Echo program name prefixed message to standard error, followed by 450e169010aSmrg# a help hint, and exit. 451e169010aSmrgfunc_fatal_help () 452e169010aSmrg{ 453e169010aSmrg func_error ${1+"$@"} 454e169010aSmrg func_fatal_error "$help" 455e169010aSmrg} 456e169010aSmrghelp="Try \`$progname --help' for more information." ## default 4577914d74bSmrg 4587914d74bSmrg 459e169010aSmrg# func_grep expression filename 460e169010aSmrg# Check whether EXPRESSION matches any line of FILENAME, without output. 461e169010aSmrgfunc_grep () 462e169010aSmrg{ 463e169010aSmrg $GREP "$1" "$2" >/dev/null 2>&1 464e169010aSmrg} 465e169010aSmrg 466e169010aSmrg 467e169010aSmrg# func_mkdir_p directory-path 468e169010aSmrg# Make sure the entire path to DIRECTORY-PATH is available. 469e169010aSmrgfunc_mkdir_p () 470e169010aSmrg{ 471e169010aSmrg my_directory_path="$1" 472e169010aSmrg my_dir_list= 473e169010aSmrg 474e169010aSmrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 475e169010aSmrg 476e169010aSmrg # Protect directory names starting with `-' 477e169010aSmrg case $my_directory_path in 478e169010aSmrg -*) my_directory_path="./$my_directory_path" ;; 479e169010aSmrg esac 480e169010aSmrg 481e169010aSmrg # While some portion of DIR does not yet exist... 482e169010aSmrg while test ! -d "$my_directory_path"; do 483e169010aSmrg # ...make a list in topmost first order. Use a colon delimited 484e169010aSmrg # list incase some portion of path contains whitespace. 485e169010aSmrg my_dir_list="$my_directory_path:$my_dir_list" 486e169010aSmrg 487e169010aSmrg # If the last portion added has no slash in it, the list is done 488e169010aSmrg case $my_directory_path in */*) ;; *) break ;; esac 489e169010aSmrg 490e169010aSmrg # ...otherwise throw away the child directory and loop 491e8ead290Smrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 492e169010aSmrg done 493e8ead290Smrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 494e169010aSmrg 495e169010aSmrg save_mkdir_p_IFS="$IFS"; IFS=':' 496e169010aSmrg for my_dir in $my_dir_list; do 497e169010aSmrg IFS="$save_mkdir_p_IFS" 498e169010aSmrg # mkdir can fail with a `File exist' error if two processes 499e169010aSmrg # try to create one of the directories concurrently. Don't 500e169010aSmrg # stop in that case! 501e169010aSmrg $MKDIR "$my_dir" 2>/dev/null || : 502e169010aSmrg done 503e169010aSmrg IFS="$save_mkdir_p_IFS" 504e169010aSmrg 505e169010aSmrg # Bail out if we (or some other process) failed to create a directory. 506e169010aSmrg test -d "$my_directory_path" || \ 507e169010aSmrg func_fatal_error "Failed to create \`$1'" 508e169010aSmrg fi 509e169010aSmrg} 5107914d74bSmrg 5117914d74bSmrg 5127914d74bSmrg# func_mktempdir [string] 5137914d74bSmrg# Make a temporary directory that won't clash with other running 5147914d74bSmrg# libtool processes, and avoids race conditions if possible. If 5157914d74bSmrg# given, STRING is the basename for that directory. 5167914d74bSmrgfunc_mktempdir () 5177914d74bSmrg{ 5187914d74bSmrg my_template="${TMPDIR-/tmp}/${1-$progname}" 5197914d74bSmrg 520e169010aSmrg if test "$opt_dry_run" = ":"; then 5217914d74bSmrg # Return a directory name, but don't create it in dry-run mode 5227914d74bSmrg my_tmpdir="${my_template}-$$" 5237914d74bSmrg else 5247914d74bSmrg 5257914d74bSmrg # If mktemp works, use that first and foremost 5267914d74bSmrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 5277914d74bSmrg 5287914d74bSmrg if test ! -d "$my_tmpdir"; then 529e169010aSmrg # Failing that, at least try and use $RANDOM to avoid a race 530e169010aSmrg my_tmpdir="${my_template}-${RANDOM-0}$$" 5317914d74bSmrg 532e169010aSmrg save_mktempdir_umask=`umask` 533e169010aSmrg umask 0077 534e169010aSmrg $MKDIR "$my_tmpdir" 535e169010aSmrg umask $save_mktempdir_umask 5367914d74bSmrg fi 5377914d74bSmrg 5387914d74bSmrg # If we're not in dry-run mode, bomb out on failure 539e169010aSmrg test -d "$my_tmpdir" || \ 540e169010aSmrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 5417914d74bSmrg fi 5427914d74bSmrg 543e8ead290Smrg $ECHO "$my_tmpdir" 5447914d74bSmrg} 5457914d74bSmrg 5467914d74bSmrg 547e169010aSmrg# func_quote_for_eval arg 548e169010aSmrg# Aesthetically quote ARG to be evaled later. 549e169010aSmrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 550e169010aSmrg# is double-quoted, suitable for a subsequent eval, whereas 551e169010aSmrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 552e169010aSmrg# which are still active within double quotes backslashified. 553e169010aSmrgfunc_quote_for_eval () 5547914d74bSmrg{ 555e169010aSmrg case $1 in 556e169010aSmrg *[\\\`\"\$]*) 557e8ead290Smrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 558e169010aSmrg *) 559e169010aSmrg func_quote_for_eval_unquoted_result="$1" ;; 560e169010aSmrg esac 561e169010aSmrg 562e169010aSmrg case $func_quote_for_eval_unquoted_result in 563e169010aSmrg # Double-quote args containing shell metacharacters to delay 564e169010aSmrg # word splitting, command substitution and and variable 565e169010aSmrg # expansion for a subsequent eval. 566e169010aSmrg # Many Bourne shells cannot handle close brackets correctly 567e169010aSmrg # in scan sets, so we specify it separately. 568e169010aSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 569e169010aSmrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 570e169010aSmrg ;; 571e169010aSmrg *) 572e169010aSmrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 5737914d74bSmrg esac 5747914d74bSmrg} 5757914d74bSmrg 5767914d74bSmrg 577e169010aSmrg# func_quote_for_expand arg 578e169010aSmrg# Aesthetically quote ARG to be evaled later; same as above, 579e169010aSmrg# but do not quote variable references. 580e169010aSmrgfunc_quote_for_expand () 5817914d74bSmrg{ 582e169010aSmrg case $1 in 583e169010aSmrg *[\\\`\"]*) 584e8ead290Smrg my_arg=`$ECHO "$1" | $SED \ 585e169010aSmrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 5867914d74bSmrg *) 587e169010aSmrg my_arg="$1" ;; 588e169010aSmrg esac 589e169010aSmrg 590e169010aSmrg case $my_arg in 591e169010aSmrg # Double-quote args containing shell metacharacters to delay 592e169010aSmrg # word splitting and command substitution for a subsequent eval. 593e169010aSmrg # Many Bourne shells cannot handle close brackets correctly 594e169010aSmrg # in scan sets, so we specify it separately. 595e169010aSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 596e169010aSmrg my_arg="\"$my_arg\"" 597e169010aSmrg ;; 598e169010aSmrg esac 599e169010aSmrg 600e169010aSmrg func_quote_for_expand_result="$my_arg" 6017914d74bSmrg} 6027914d74bSmrg 6037914d74bSmrg 604e169010aSmrg# func_show_eval cmd [fail_exp] 605e169010aSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 606e169010aSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 607e169010aSmrg# is given, then evaluate it. 608e169010aSmrgfunc_show_eval () 6097914d74bSmrg{ 610e169010aSmrg my_cmd="$1" 611e169010aSmrg my_fail_exp="${2-:}" 6127914d74bSmrg 613e169010aSmrg ${opt_silent-false} || { 614e169010aSmrg func_quote_for_expand "$my_cmd" 615e169010aSmrg eval "func_echo $func_quote_for_expand_result" 616e169010aSmrg } 617e169010aSmrg 618e169010aSmrg if ${opt_dry_run-false}; then :; else 619e169010aSmrg eval "$my_cmd" 620e169010aSmrg my_status=$? 621e169010aSmrg if test "$my_status" -eq 0; then :; else 622e169010aSmrg eval "(exit $my_status); $my_fail_exp" 623e169010aSmrg fi 6247914d74bSmrg fi 6257914d74bSmrg} 6267914d74bSmrg 627e169010aSmrg 628e169010aSmrg# func_show_eval_locale cmd [fail_exp] 629e169010aSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 630e169010aSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 631e169010aSmrg# is given, then evaluate it. Use the saved locale for evaluation. 632e169010aSmrgfunc_show_eval_locale () 6337914d74bSmrg{ 634e169010aSmrg my_cmd="$1" 635e169010aSmrg my_fail_exp="${2-:}" 6367914d74bSmrg 637e169010aSmrg ${opt_silent-false} || { 638e169010aSmrg func_quote_for_expand "$my_cmd" 639e169010aSmrg eval "func_echo $func_quote_for_expand_result" 640e169010aSmrg } 641e169010aSmrg 642e169010aSmrg if ${opt_dry_run-false}; then :; else 643e169010aSmrg eval "$lt_user_locale 644e169010aSmrg $my_cmd" 645e169010aSmrg my_status=$? 646e169010aSmrg eval "$lt_safe_locale" 647e169010aSmrg if test "$my_status" -eq 0; then :; else 648e169010aSmrg eval "(exit $my_status); $my_fail_exp" 6497914d74bSmrg fi 650e169010aSmrg fi 6517914d74bSmrg} 6527914d74bSmrg 6537914d74bSmrg 654e169010aSmrg# func_version 655e169010aSmrg# Echo version message to standard output and exit. 656e169010aSmrgfunc_version () 657e169010aSmrg{ 658e8ead290Smrg $SED -n '/(C)/!b go 659e8ead290Smrg :more 660e8ead290Smrg /\./!{ 661e8ead290Smrg N 662e8ead290Smrg s/\n# / / 663e8ead290Smrg b more 664e8ead290Smrg } 665e8ead290Smrg :go 666e8ead290Smrg /^# '$PROGRAM' (GNU /,/# warranty; / { 667e169010aSmrg s/^# // 668e169010aSmrg s/^# *$// 669e169010aSmrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 670e169010aSmrg p 671e169010aSmrg }' < "$progpath" 672e169010aSmrg exit $? 673e169010aSmrg} 674e169010aSmrg 675e169010aSmrg# func_usage 676e169010aSmrg# Echo short help message to standard output and exit. 677e169010aSmrgfunc_usage () 678e169010aSmrg{ 679e8ead290Smrg $SED -n '/^# Usage:/,/^# *.*--help/ { 680e169010aSmrg s/^# // 681e169010aSmrg s/^# *$// 682e169010aSmrg s/\$progname/'$progname'/ 683e169010aSmrg p 684e169010aSmrg }' < "$progpath" 685e8ead290Smrg echo 686e169010aSmrg $ECHO "run \`$progname --help | more' for full usage" 687e169010aSmrg exit $? 688e169010aSmrg} 689e169010aSmrg 690e8ead290Smrg# func_help [NOEXIT] 691e8ead290Smrg# Echo long help message to standard output and exit, 692e8ead290Smrg# unless 'noexit' is passed as argument. 693e169010aSmrgfunc_help () 694e169010aSmrg{ 695e169010aSmrg $SED -n '/^# Usage:/,/# Report bugs to/ { 696e169010aSmrg s/^# // 697e169010aSmrg s/^# *$// 698e169010aSmrg s*\$progname*'$progname'* 699e169010aSmrg s*\$host*'"$host"'* 700e169010aSmrg s*\$SHELL*'"$SHELL"'* 701e169010aSmrg s*\$LTCC*'"$LTCC"'* 702e169010aSmrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 703e169010aSmrg s*\$LD*'"$LD"'* 704e169010aSmrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 705e169010aSmrg s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 706e169010aSmrg s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 707e169010aSmrg p 708e169010aSmrg }' < "$progpath" 709e8ead290Smrg ret=$? 710e8ead290Smrg if test -z "$1"; then 711e8ead290Smrg exit $ret 712e8ead290Smrg fi 713e169010aSmrg} 714e169010aSmrg 715e169010aSmrg# func_missing_arg argname 716e169010aSmrg# Echo program name prefixed message to standard error and set global 717e169010aSmrg# exit_cmd. 718e169010aSmrgfunc_missing_arg () 719e169010aSmrg{ 720e8ead290Smrg func_error "missing argument for $1." 721e169010aSmrg exit_cmd=exit 722e169010aSmrg} 723e169010aSmrg 724e169010aSmrgexit_cmd=: 725e169010aSmrg 726e169010aSmrg 727e169010aSmrg 728e169010aSmrg 729e169010aSmrg 7307914d74bSmrg 731e169010aSmrgmagic="%%%MAGIC variable%%%" 732e169010aSmrgmagic_exe="%%%MAGIC EXE variable%%%" 7337914d74bSmrg 734e169010aSmrg# Global variables. 735e169010aSmrg# $mode is unset 736e169010aSmrgnonopt= 737e169010aSmrgexecute_dlfiles= 738e169010aSmrgpreserve_args= 739e169010aSmrglo2o="s/\\.lo\$/.${objext}/" 740e169010aSmrgo2lo="s/\\.${objext}\$/.lo/" 741e169010aSmrgextracted_archives= 742e169010aSmrgextracted_serial=0 7437914d74bSmrg 744e169010aSmrgopt_dry_run=false 745e169010aSmrgopt_duplicate_deps=false 746e169010aSmrgopt_silent=false 747e169010aSmrgopt_debug=: 7487914d74bSmrg 749e169010aSmrg# If this variable is set in any of the actions, the command in it 750e169010aSmrg# will be execed at the end. This prevents here-documents from being 751e169010aSmrg# left over by shells. 752e169010aSmrgexec_cmd= 7537914d74bSmrg 754e169010aSmrg# func_fatal_configuration arg... 755e169010aSmrg# Echo program name prefixed message to standard error, followed by 756e169010aSmrg# a configuration failure hint, and exit. 757e169010aSmrgfunc_fatal_configuration () 758e169010aSmrg{ 759e169010aSmrg func_error ${1+"$@"} 760e169010aSmrg func_error "See the $PACKAGE documentation for more information." 761e169010aSmrg func_fatal_error "Fatal configuration error." 762e169010aSmrg} 763e169010aSmrg 764e169010aSmrg 765e169010aSmrg# func_config 766e169010aSmrg# Display the configuration for all the tags in this script. 767e169010aSmrgfunc_config () 768e169010aSmrg{ 769e169010aSmrg re_begincf='^# ### BEGIN LIBTOOL' 770e169010aSmrg re_endcf='^# ### END LIBTOOL' 771e169010aSmrg 772e169010aSmrg # Default configuration. 773e169010aSmrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 7747914d74bSmrg 7757914d74bSmrg # Now print the configurations for the tags. 7767914d74bSmrg for tagname in $taglist; do 777e169010aSmrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 7787914d74bSmrg done 7797914d74bSmrg 780e169010aSmrg exit $? 781e169010aSmrg} 7827914d74bSmrg 783e169010aSmrg# func_features 784e169010aSmrg# Display the features supported by this script. 785e169010aSmrgfunc_features () 786e169010aSmrg{ 787e8ead290Smrg echo "host: $host" 7887914d74bSmrg if test "$build_libtool_libs" = yes; then 789e8ead290Smrg echo "enable shared libraries" 7907914d74bSmrg else 791e8ead290Smrg echo "disable shared libraries" 7927914d74bSmrg fi 7937914d74bSmrg if test "$build_old_libs" = yes; then 794e8ead290Smrg echo "enable static libraries" 7957914d74bSmrg else 796e8ead290Smrg echo "disable static libraries" 7977914d74bSmrg fi 798e169010aSmrg 7997914d74bSmrg exit $? 800e169010aSmrg} 801e169010aSmrg 802e169010aSmrg# func_enable_tag tagname 803e169010aSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or 804e169010aSmrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 805e169010aSmrg# variable here. 806e169010aSmrgfunc_enable_tag () 807e169010aSmrg{ 808e169010aSmrg # Global variable: 809e169010aSmrg tagname="$1" 8107914d74bSmrg 811e169010aSmrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 812e169010aSmrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 813e169010aSmrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 8147914d74bSmrg 815e169010aSmrg # Validate tagname. 816e169010aSmrg case $tagname in 817e169010aSmrg *[!-_A-Za-z0-9,/]*) 818e169010aSmrg func_fatal_error "invalid tag name: $tagname" 819e169010aSmrg ;; 820e169010aSmrg esac 8217914d74bSmrg 822e169010aSmrg # Don't test for the "default" C tag, as we know it's 823e169010aSmrg # there but not specially marked. 824e169010aSmrg case $tagname in 825e169010aSmrg CC) ;; 826e169010aSmrg *) 827e169010aSmrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 828e169010aSmrg taglist="$taglist $tagname" 829e169010aSmrg 830e169010aSmrg # Evaluate the configuration. Be careful to quote the path 831e169010aSmrg # and the sed script, to avoid splitting on whitespace, but 832e169010aSmrg # also don't use non-portable quotes within backquotes within 833e169010aSmrg # quotes we have to do it in 2 steps: 834e169010aSmrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 835e169010aSmrg eval "$extractedcf" 836e169010aSmrg else 837e169010aSmrg func_error "ignoring unknown tag $tagname" 838e169010aSmrg fi 839e169010aSmrg ;; 840e169010aSmrg esac 841e169010aSmrg} 8427914d74bSmrg 843e169010aSmrg# Parse options once, thoroughly. This comes as soon as possible in 844e169010aSmrg# the script to make things like `libtool --version' happen quickly. 845e169010aSmrg{ 8467914d74bSmrg 847e169010aSmrg # Shorthand for --mode=foo, only valid as the first argument 848e169010aSmrg case $1 in 849e169010aSmrg clean|clea|cle|cl) 850e169010aSmrg shift; set dummy --mode clean ${1+"$@"}; shift 8517914d74bSmrg ;; 852e169010aSmrg compile|compil|compi|comp|com|co|c) 853e169010aSmrg shift; set dummy --mode compile ${1+"$@"}; shift 8547914d74bSmrg ;; 855e169010aSmrg execute|execut|execu|exec|exe|ex|e) 856e169010aSmrg shift; set dummy --mode execute ${1+"$@"}; shift 8577914d74bSmrg ;; 858e169010aSmrg finish|finis|fini|fin|fi|f) 859e169010aSmrg shift; set dummy --mode finish ${1+"$@"}; shift 8607914d74bSmrg ;; 861e169010aSmrg install|instal|insta|inst|ins|in|i) 862e169010aSmrg shift; set dummy --mode install ${1+"$@"}; shift 863e169010aSmrg ;; 864e169010aSmrg link|lin|li|l) 865e169010aSmrg shift; set dummy --mode link ${1+"$@"}; shift 866e169010aSmrg ;; 867e169010aSmrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 868e169010aSmrg shift; set dummy --mode uninstall ${1+"$@"}; shift 8697914d74bSmrg ;; 8707914d74bSmrg esac 8717914d74bSmrg 872e169010aSmrg # Parse non-mode specific arguments: 873e169010aSmrg while test "$#" -gt 0; do 874e169010aSmrg opt="$1" 875e169010aSmrg shift 8767914d74bSmrg 877e169010aSmrg case $opt in 878e169010aSmrg --config) func_config ;; 8797914d74bSmrg 880e169010aSmrg --debug) preserve_args="$preserve_args $opt" 881e169010aSmrg func_echo "enabling shell trace mode" 882e169010aSmrg opt_debug='set -x' 883e169010aSmrg $opt_debug 884e169010aSmrg ;; 8857914d74bSmrg 886e169010aSmrg -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break 887e169010aSmrg execute_dlfiles="$execute_dlfiles $1" 888e169010aSmrg shift 889e169010aSmrg ;; 8907914d74bSmrg 891e169010aSmrg --dry-run | -n) opt_dry_run=: ;; 892e169010aSmrg --features) func_features ;; 893e169010aSmrg --finish) mode="finish" ;; 894e169010aSmrg 895e169010aSmrg --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break 896e169010aSmrg case $1 in 897e169010aSmrg # Valid mode arguments: 898e169010aSmrg clean) ;; 899e169010aSmrg compile) ;; 900e169010aSmrg execute) ;; 901e169010aSmrg finish) ;; 902e169010aSmrg install) ;; 903e169010aSmrg link) ;; 904e169010aSmrg relink) ;; 905e169010aSmrg uninstall) ;; 906e169010aSmrg 907e169010aSmrg # Catch anything else as an error 908e169010aSmrg *) func_error "invalid argument for $opt" 909e169010aSmrg exit_cmd=exit 910e169010aSmrg break 911e169010aSmrg ;; 912e169010aSmrg esac 913e169010aSmrg 914e169010aSmrg mode="$1" 915e169010aSmrg shift 916e169010aSmrg ;; 917e169010aSmrg 918e169010aSmrg --preserve-dup-deps) 919e169010aSmrg opt_duplicate_deps=: ;; 920e169010aSmrg 921e169010aSmrg --quiet|--silent) preserve_args="$preserve_args $opt" 922e169010aSmrg opt_silent=: 923e8ead290Smrg opt_verbose=false 924e8ead290Smrg ;; 925e8ead290Smrg 926e8ead290Smrg --no-quiet|--no-silent) 927e8ead290Smrg preserve_args="$preserve_args $opt" 928e8ead290Smrg opt_silent=false 929e169010aSmrg ;; 930e169010aSmrg 931e169010aSmrg --verbose| -v) preserve_args="$preserve_args $opt" 932e169010aSmrg opt_silent=false 933e8ead290Smrg opt_verbose=: 934e8ead290Smrg ;; 935e8ead290Smrg 936e8ead290Smrg --no-verbose) preserve_args="$preserve_args $opt" 937e8ead290Smrg opt_verbose=false 938e169010aSmrg ;; 939e169010aSmrg 940e169010aSmrg --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break 941e169010aSmrg preserve_args="$preserve_args $opt $1" 942e169010aSmrg func_enable_tag "$1" # tagname is set here 943e169010aSmrg shift 944e169010aSmrg ;; 945e169010aSmrg 946e169010aSmrg # Separate optargs to long options: 947e169010aSmrg -dlopen=*|--mode=*|--tag=*) 948e169010aSmrg func_opt_split "$opt" 949e169010aSmrg set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} 950e169010aSmrg shift 951e169010aSmrg ;; 952e169010aSmrg 953e169010aSmrg -\?|-h) func_usage ;; 954e169010aSmrg --help) opt_help=: ;; 955e8ead290Smrg --help-all) opt_help=': help-all' ;; 956e169010aSmrg --version) func_version ;; 957e169010aSmrg 958e169010aSmrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 959e169010aSmrg 960e169010aSmrg *) nonopt="$opt" 961e169010aSmrg break 962e169010aSmrg ;; 963e169010aSmrg esac 964e169010aSmrg done 965e169010aSmrg 966e169010aSmrg 967e169010aSmrg case $host in 968e169010aSmrg *cygwin* | *mingw* | *pw32* | *cegcc*) 969e169010aSmrg # don't eliminate duplications in $postdeps and $predeps 970e169010aSmrg opt_duplicate_compiler_generated_deps=: 9717914d74bSmrg ;; 9727914d74bSmrg *) 973e169010aSmrg opt_duplicate_compiler_generated_deps=$opt_duplicate_deps 974e169010aSmrg ;; 975e169010aSmrg esac 9767914d74bSmrg 977e169010aSmrg # Having warned about all mis-specified options, bail out if 978e169010aSmrg # anything was wrong. 979e169010aSmrg $exit_cmd $EXIT_FAILURE 980e169010aSmrg} 981e169010aSmrg 982e169010aSmrg# func_check_version_match 983e169010aSmrg# Ensure that we are using m4 macros, and libtool script from the same 984e169010aSmrg# release of libtool. 985e169010aSmrgfunc_check_version_match () 986e169010aSmrg{ 987e169010aSmrg if test "$package_revision" != "$macro_revision"; then 988e169010aSmrg if test "$VERSION" != "$macro_version"; then 989e169010aSmrg if test -z "$macro_version"; then 990e169010aSmrg cat >&2 <<_LT_EOF 991e169010aSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 992e169010aSmrg$progname: definition of this LT_INIT comes from an older release. 993e169010aSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 994e169010aSmrg$progname: and run autoconf again. 995e169010aSmrg_LT_EOF 996e169010aSmrg else 997e169010aSmrg cat >&2 <<_LT_EOF 998e169010aSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 999e169010aSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 1000e169010aSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 1001e169010aSmrg$progname: and run autoconf again. 1002e169010aSmrg_LT_EOF 10037914d74bSmrg fi 1004e169010aSmrg else 1005e169010aSmrg cat >&2 <<_LT_EOF 1006e169010aSmrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 1007e169010aSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 1008e169010aSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 1009e169010aSmrg$progname: of $PACKAGE $VERSION and run autoconf again. 1010e169010aSmrg_LT_EOF 1011e169010aSmrg fi 1012e169010aSmrg 1013e169010aSmrg exit $EXIT_MISMATCH 1014e169010aSmrg fi 1015e169010aSmrg} 1016e169010aSmrg 1017e169010aSmrg 1018e169010aSmrg## ----------- ## 1019e169010aSmrg## Main. ## 1020e169010aSmrg## ----------- ## 1021e169010aSmrg 1022e169010aSmrg$opt_help || { 1023e169010aSmrg # Sanity checks first: 1024e169010aSmrg func_check_version_match 1025e169010aSmrg 1026e169010aSmrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 1027e169010aSmrg func_fatal_configuration "not configured to build any kind of library" 10287914d74bSmrg fi 10297914d74bSmrg 1030e169010aSmrg test -z "$mode" && func_fatal_error "error: you must specify a MODE." 1031e169010aSmrg 1032e169010aSmrg 1033e169010aSmrg # Darwin sucks 1034e169010aSmrg eval std_shrext=\"$shrext_cmds\" 1035e169010aSmrg 1036e169010aSmrg 10377914d74bSmrg # Only execute mode is allowed to have -dlopen flags. 10387914d74bSmrg if test -n "$execute_dlfiles" && test "$mode" != execute; then 1039e169010aSmrg func_error "unrecognized option \`-dlopen'" 1040e169010aSmrg $ECHO "$help" 1>&2 10417914d74bSmrg exit $EXIT_FAILURE 10427914d74bSmrg fi 10437914d74bSmrg 10447914d74bSmrg # Change the help message to a mode-specific one. 10457914d74bSmrg generic_help="$help" 1046e169010aSmrg help="Try \`$progname --help --mode=$mode' for more information." 1047e169010aSmrg} 10487914d74bSmrg 10497914d74bSmrg 1050e169010aSmrg# func_lalib_p file 1051e169010aSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1052e169010aSmrg# This function is only a basic sanity check; it will hardly flush out 1053e169010aSmrg# determined imposters. 1054e169010aSmrgfunc_lalib_p () 1055e169010aSmrg{ 1056e169010aSmrg test -f "$1" && 1057e169010aSmrg $SED -e 4q "$1" 2>/dev/null \ 1058e169010aSmrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1059e169010aSmrg} 10607914d74bSmrg 1061e169010aSmrg# func_lalib_unsafe_p file 1062e169010aSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1063e169010aSmrg# This function implements the same check as func_lalib_p without 1064e169010aSmrg# resorting to external programs. To this end, it redirects stdin and 1065e169010aSmrg# closes it afterwards, without saving the original file descriptor. 1066e169010aSmrg# As a safety measure, use it only where a negative result would be 1067e169010aSmrg# fatal anyway. Works if `file' does not exist. 1068e169010aSmrgfunc_lalib_unsafe_p () 1069e169010aSmrg{ 1070e169010aSmrg lalib_p=no 1071e169010aSmrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1072e169010aSmrg for lalib_p_l in 1 2 3 4 1073e169010aSmrg do 1074e169010aSmrg read lalib_p_line 1075e169010aSmrg case "$lalib_p_line" in 1076e169010aSmrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1077e169010aSmrg esac 1078e169010aSmrg done 1079e169010aSmrg exec 0<&5 5<&- 1080e169010aSmrg fi 1081e169010aSmrg test "$lalib_p" = yes 1082e169010aSmrg} 10837914d74bSmrg 1084e169010aSmrg# func_ltwrapper_script_p file 1085e169010aSmrg# True iff FILE is a libtool wrapper script 1086e169010aSmrg# This function is only a basic sanity check; it will hardly flush out 1087e169010aSmrg# determined imposters. 1088e169010aSmrgfunc_ltwrapper_script_p () 1089e169010aSmrg{ 1090e169010aSmrg func_lalib_p "$1" 1091e169010aSmrg} 10927914d74bSmrg 1093e169010aSmrg# func_ltwrapper_executable_p file 1094e169010aSmrg# True iff FILE is a libtool wrapper executable 1095e169010aSmrg# This function is only a basic sanity check; it will hardly flush out 1096e169010aSmrg# determined imposters. 1097e169010aSmrgfunc_ltwrapper_executable_p () 1098e169010aSmrg{ 1099e169010aSmrg func_ltwrapper_exec_suffix= 1100e169010aSmrg case $1 in 1101e169010aSmrg *.exe) ;; 1102e169010aSmrg *) func_ltwrapper_exec_suffix=.exe ;; 1103e169010aSmrg esac 1104e169010aSmrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1105e169010aSmrg} 11067914d74bSmrg 1107e169010aSmrg# func_ltwrapper_scriptname file 1108e169010aSmrg# Assumes file is an ltwrapper_executable 1109e169010aSmrg# uses $file to determine the appropriate filename for a 1110e169010aSmrg# temporary ltwrapper_script. 1111e169010aSmrgfunc_ltwrapper_scriptname () 1112e169010aSmrg{ 1113e169010aSmrg func_ltwrapper_scriptname_result="" 1114e169010aSmrg if func_ltwrapper_executable_p "$1"; then 1115e169010aSmrg func_dirname_and_basename "$1" "" "." 1116e169010aSmrg func_stripname '' '.exe' "$func_basename_result" 1117e169010aSmrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1118e169010aSmrg fi 1119e169010aSmrg} 11207914d74bSmrg 1121e169010aSmrg# func_ltwrapper_p file 1122e169010aSmrg# True iff FILE is a libtool wrapper script or wrapper executable 1123e169010aSmrg# This function is only a basic sanity check; it will hardly flush out 1124e169010aSmrg# determined imposters. 1125e169010aSmrgfunc_ltwrapper_p () 1126e169010aSmrg{ 1127e169010aSmrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1128e169010aSmrg} 11297914d74bSmrg 11307914d74bSmrg 1131e169010aSmrg# func_execute_cmds commands fail_cmd 1132e169010aSmrg# Execute tilde-delimited COMMANDS. 1133e169010aSmrg# If FAIL_CMD is given, eval that upon failure. 1134e169010aSmrg# FAIL_CMD may read-access the current command in variable CMD! 1135e169010aSmrgfunc_execute_cmds () 1136e169010aSmrg{ 1137e169010aSmrg $opt_debug 1138e169010aSmrg save_ifs=$IFS; IFS='~' 1139e169010aSmrg for cmd in $1; do 1140e169010aSmrg IFS=$save_ifs 1141e169010aSmrg eval cmd=\"$cmd\" 1142e169010aSmrg func_show_eval "$cmd" "${2-:}" 1143e169010aSmrg done 1144e169010aSmrg IFS=$save_ifs 1145e169010aSmrg} 1146e169010aSmrg 1147e169010aSmrg 1148e169010aSmrg# func_source file 1149e169010aSmrg# Source FILE, adding directory component if necessary. 1150e169010aSmrg# Note that it is not necessary on cygwin/mingw to append a dot to 1151e169010aSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1152e169010aSmrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 1153e169010aSmrg# `FILE.' does not work on cygwin managed mounts. 1154e169010aSmrgfunc_source () 1155e169010aSmrg{ 1156e169010aSmrg $opt_debug 1157e169010aSmrg case $1 in 1158e169010aSmrg */* | *\\*) . "$1" ;; 1159e169010aSmrg *) . "./$1" ;; 1160e169010aSmrg esac 1161e169010aSmrg} 1162e169010aSmrg 1163e169010aSmrg 1164e169010aSmrg# func_infer_tag arg 1165e169010aSmrg# Infer tagged configuration to use if any are available and 1166e169010aSmrg# if one wasn't chosen via the "--tag" command line option. 1167e169010aSmrg# Only attempt this if the compiler in the base compile 1168e169010aSmrg# command doesn't match the default compiler. 1169e169010aSmrg# arg is usually of the form 'gcc ...' 1170e169010aSmrgfunc_infer_tag () 1171e169010aSmrg{ 1172e169010aSmrg $opt_debug 1173e169010aSmrg if test -n "$available_tags" && test -z "$tagname"; then 1174e169010aSmrg CC_quoted= 1175e169010aSmrg for arg in $CC; do 1176e169010aSmrg func_quote_for_eval "$arg" 1177e169010aSmrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 1178e169010aSmrg done 1179e8ead290Smrg CC_expanded=`func_echo_all $CC` 1180e8ead290Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1181e169010aSmrg case $@ in 1182e169010aSmrg # Blanks in the command may have been stripped by the calling shell, 1183e169010aSmrg # but not from the CC environment variable when configure was run. 1184e8ead290Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1185e8ead290Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1186e169010aSmrg # Blanks at the start of $base_compile will cause this to fail 1187e169010aSmrg # if we don't check for them as well. 1188e169010aSmrg *) 1189e169010aSmrg for z in $available_tags; do 1190e169010aSmrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1191e169010aSmrg # Evaluate the configuration. 1192e169010aSmrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1193e169010aSmrg CC_quoted= 1194e169010aSmrg for arg in $CC; do 1195e169010aSmrg # Double-quote args containing other shell metacharacters. 1196e169010aSmrg func_quote_for_eval "$arg" 1197e169010aSmrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 1198e169010aSmrg done 1199e8ead290Smrg CC_expanded=`func_echo_all $CC` 1200e8ead290Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1201e169010aSmrg case "$@ " in 1202e8ead290Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 1203e8ead290Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1204e169010aSmrg # The compiler in the base compile command matches 1205e169010aSmrg # the one in the tagged configuration. 1206e169010aSmrg # Assume this is the tagged configuration we want. 1207e169010aSmrg tagname=$z 1208e169010aSmrg break 1209e169010aSmrg ;; 12107914d74bSmrg esac 1211e169010aSmrg fi 1212e169010aSmrg done 1213e169010aSmrg # If $tagname still isn't set, then no tagged configuration 1214e169010aSmrg # was found and let the user know that the "--tag" command 1215e169010aSmrg # line option must be used. 1216e169010aSmrg if test -z "$tagname"; then 1217e169010aSmrg func_echo "unable to infer tagged configuration" 1218e169010aSmrg func_fatal_error "specify a tag with \`--tag'" 1219e169010aSmrg# else 1220e169010aSmrg# func_verbose "using $tagname tagged configuration" 1221e169010aSmrg fi 1222e169010aSmrg ;; 1223e169010aSmrg esac 1224e169010aSmrg fi 1225e169010aSmrg} 1226e169010aSmrg 1227e169010aSmrg 1228e169010aSmrg 1229e169010aSmrg# func_write_libtool_object output_name pic_name nonpic_name 1230e169010aSmrg# Create a libtool object file (analogous to a ".la" file), 1231e169010aSmrg# but don't create it if we're doing a dry run. 1232e169010aSmrgfunc_write_libtool_object () 1233e169010aSmrg{ 1234e169010aSmrg write_libobj=${1} 1235e169010aSmrg if test "$build_libtool_libs" = yes; then 1236e169010aSmrg write_lobj=\'${2}\' 1237e169010aSmrg else 1238e169010aSmrg write_lobj=none 1239e169010aSmrg fi 1240e169010aSmrg 1241e169010aSmrg if test "$build_old_libs" = yes; then 1242e169010aSmrg write_oldobj=\'${3}\' 1243e169010aSmrg else 1244e169010aSmrg write_oldobj=none 1245e169010aSmrg fi 1246e169010aSmrg 1247e169010aSmrg $opt_dry_run || { 1248e169010aSmrg cat >${write_libobj}T <<EOF 1249e169010aSmrg# $write_libobj - a libtool object file 1250e169010aSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1251e169010aSmrg# 1252e169010aSmrg# Please DO NOT delete this file! 1253e169010aSmrg# It is necessary for linking the library. 1254e169010aSmrg 1255e169010aSmrg# Name of the PIC object. 1256e169010aSmrgpic_object=$write_lobj 1257e169010aSmrg 1258e169010aSmrg# Name of the non-PIC object 1259e169010aSmrgnon_pic_object=$write_oldobj 1260e169010aSmrg 1261e169010aSmrgEOF 1262e169010aSmrg $MV "${write_libobj}T" "${write_libobj}" 1263e169010aSmrg } 1264e169010aSmrg} 1265e169010aSmrg 1266e169010aSmrg# func_mode_compile arg... 1267e169010aSmrgfunc_mode_compile () 1268e169010aSmrg{ 1269e169010aSmrg $opt_debug 1270e169010aSmrg # Get the compilation command and the source file. 1271e169010aSmrg base_compile= 1272e169010aSmrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1273e169010aSmrg suppress_opt=yes 1274e169010aSmrg suppress_output= 1275e169010aSmrg arg_mode=normal 1276e169010aSmrg libobj= 1277e169010aSmrg later= 1278e169010aSmrg pie_flag= 1279e169010aSmrg 1280e169010aSmrg for arg 1281e169010aSmrg do 1282e169010aSmrg case $arg_mode in 1283e169010aSmrg arg ) 1284e169010aSmrg # do not "continue". Instead, add this to base_compile 1285e169010aSmrg lastarg="$arg" 1286e169010aSmrg arg_mode=normal 1287e169010aSmrg ;; 1288e169010aSmrg 1289e169010aSmrg target ) 1290e169010aSmrg libobj="$arg" 1291e169010aSmrg arg_mode=normal 1292e169010aSmrg continue 1293e169010aSmrg ;; 1294e169010aSmrg 1295e169010aSmrg normal ) 1296e169010aSmrg # Accept any command-line options. 1297e169010aSmrg case $arg in 1298e169010aSmrg -o) 1299e169010aSmrg test -n "$libobj" && \ 1300e169010aSmrg func_fatal_error "you cannot specify \`-o' more than once" 1301e169010aSmrg arg_mode=target 1302e169010aSmrg continue 1303e169010aSmrg ;; 1304e169010aSmrg 1305e169010aSmrg -pie | -fpie | -fPIE) 1306e169010aSmrg pie_flag="$pie_flag $arg" 1307e169010aSmrg continue 1308e169010aSmrg ;; 1309e169010aSmrg 1310e169010aSmrg -shared | -static | -prefer-pic | -prefer-non-pic) 1311e169010aSmrg later="$later $arg" 1312e169010aSmrg continue 1313e169010aSmrg ;; 1314e169010aSmrg 1315e169010aSmrg -no-suppress) 1316e169010aSmrg suppress_opt=no 1317e169010aSmrg continue 1318e169010aSmrg ;; 1319e169010aSmrg 1320e169010aSmrg -Xcompiler) 1321e169010aSmrg arg_mode=arg # the next one goes into the "base_compile" arg list 1322e169010aSmrg continue # The current "srcfile" will either be retained or 1323e169010aSmrg ;; # replaced later. I would guess that would be a bug. 1324e169010aSmrg 1325e169010aSmrg -Wc,*) 1326e169010aSmrg func_stripname '-Wc,' '' "$arg" 1327e169010aSmrg args=$func_stripname_result 1328e169010aSmrg lastarg= 1329e169010aSmrg save_ifs="$IFS"; IFS=',' 1330e169010aSmrg for arg in $args; do 1331e169010aSmrg IFS="$save_ifs" 1332e169010aSmrg func_quote_for_eval "$arg" 1333e169010aSmrg lastarg="$lastarg $func_quote_for_eval_result" 13347914d74bSmrg done 13357914d74bSmrg IFS="$save_ifs" 1336e169010aSmrg func_stripname ' ' '' "$lastarg" 1337e169010aSmrg lastarg=$func_stripname_result 13387914d74bSmrg 13397914d74bSmrg # Add the arguments to base_compile. 13407914d74bSmrg base_compile="$base_compile $lastarg" 13417914d74bSmrg continue 13427914d74bSmrg ;; 13437914d74bSmrg 1344e169010aSmrg *) 13457914d74bSmrg # Accept the current argument as the source file. 13467914d74bSmrg # The previous "srcfile" becomes the current argument. 13477914d74bSmrg # 13487914d74bSmrg lastarg="$srcfile" 13497914d74bSmrg srcfile="$arg" 13507914d74bSmrg ;; 13517914d74bSmrg esac # case $arg 13527914d74bSmrg ;; 13537914d74bSmrg esac # case $arg_mode 13547914d74bSmrg 13557914d74bSmrg # Aesthetically quote the previous argument. 1356e169010aSmrg func_quote_for_eval "$lastarg" 1357e169010aSmrg base_compile="$base_compile $func_quote_for_eval_result" 13587914d74bSmrg done # for arg 13597914d74bSmrg 13607914d74bSmrg case $arg_mode in 13617914d74bSmrg arg) 1362e169010aSmrg func_fatal_error "you must specify an argument for -Xcompile" 13637914d74bSmrg ;; 13647914d74bSmrg target) 1365e169010aSmrg func_fatal_error "you must specify a target with \`-o'" 13667914d74bSmrg ;; 13677914d74bSmrg *) 13687914d74bSmrg # Get the name of the library object. 1369e169010aSmrg test -z "$libobj" && { 1370e169010aSmrg func_basename "$srcfile" 1371e169010aSmrg libobj="$func_basename_result" 1372e169010aSmrg } 13737914d74bSmrg ;; 13747914d74bSmrg esac 13757914d74bSmrg 13767914d74bSmrg # Recognize several different file suffixes. 13777914d74bSmrg # If the user specifies -o file.o, it is replaced with file.lo 13787914d74bSmrg case $libobj in 1379e169010aSmrg *.[cCFSifmso] | \ 1380e169010aSmrg *.ada | *.adb | *.ads | *.asm | \ 1381e169010aSmrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 1382e8ead290Smrg *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) 1383e169010aSmrg func_xform "$libobj" 1384e169010aSmrg libobj=$func_xform_result 1385e169010aSmrg ;; 13867914d74bSmrg esac 13877914d74bSmrg 13887914d74bSmrg case $libobj in 1389e169010aSmrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 13907914d74bSmrg *) 1391e169010aSmrg func_fatal_error "cannot determine name of library object from \`$libobj'" 13927914d74bSmrg ;; 13937914d74bSmrg esac 13947914d74bSmrg 13957914d74bSmrg func_infer_tag $base_compile 13967914d74bSmrg 13977914d74bSmrg for arg in $later; do 13987914d74bSmrg case $arg in 1399e169010aSmrg -shared) 1400e169010aSmrg test "$build_libtool_libs" != yes && \ 1401e169010aSmrg func_fatal_configuration "can not build a shared library" 1402e169010aSmrg build_old_libs=no 1403e169010aSmrg continue 1404e169010aSmrg ;; 1405e169010aSmrg 14067914d74bSmrg -static) 1407e169010aSmrg build_libtool_libs=no 14087914d74bSmrg build_old_libs=yes 14097914d74bSmrg continue 14107914d74bSmrg ;; 14117914d74bSmrg 14127914d74bSmrg -prefer-pic) 14137914d74bSmrg pic_mode=yes 14147914d74bSmrg continue 14157914d74bSmrg ;; 14167914d74bSmrg 14177914d74bSmrg -prefer-non-pic) 14187914d74bSmrg pic_mode=no 14197914d74bSmrg continue 14207914d74bSmrg ;; 14217914d74bSmrg esac 14227914d74bSmrg done 14237914d74bSmrg 1424e169010aSmrg func_quote_for_eval "$libobj" 1425e169010aSmrg test "X$libobj" != "X$func_quote_for_eval_result" \ 1426e169010aSmrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 1427e169010aSmrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 1428e169010aSmrg func_dirname_and_basename "$obj" "/" "" 1429e169010aSmrg objname="$func_basename_result" 1430e169010aSmrg xdir="$func_dirname_result" 14317914d74bSmrg lobj=${xdir}$objdir/$objname 14327914d74bSmrg 1433e169010aSmrg test -z "$base_compile" && \ 1434e169010aSmrg func_fatal_help "you must specify a compilation command" 14357914d74bSmrg 14367914d74bSmrg # Delete any leftover library objects. 14377914d74bSmrg if test "$build_old_libs" = yes; then 14387914d74bSmrg removelist="$obj $lobj $libobj ${libobj}T" 14397914d74bSmrg else 14407914d74bSmrg removelist="$lobj $libobj ${libobj}T" 14417914d74bSmrg fi 14427914d74bSmrg 14437914d74bSmrg # On Cygwin there's no "real" PIC flag so we must build both object types 14447914d74bSmrg case $host_os in 1445e169010aSmrg cygwin* | mingw* | pw32* | os2* | cegcc*) 14467914d74bSmrg pic_mode=default 14477914d74bSmrg ;; 14487914d74bSmrg esac 14497914d74bSmrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 14507914d74bSmrg # non-PIC code in shared libraries is not supported 14517914d74bSmrg pic_mode=default 14527914d74bSmrg fi 14537914d74bSmrg 14547914d74bSmrg # Calculate the filename of the output object if compiler does 14557914d74bSmrg # not support -o with -c 14567914d74bSmrg if test "$compiler_c_o" = no; then 1457e8ead290Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 14587914d74bSmrg lockfile="$output_obj.lock" 14597914d74bSmrg else 14607914d74bSmrg output_obj= 14617914d74bSmrg need_locks=no 14627914d74bSmrg lockfile= 14637914d74bSmrg fi 14647914d74bSmrg 14657914d74bSmrg # Lock this critical section if it is needed 14667914d74bSmrg # We use this script file to make the link, it avoids creating a new file 14677914d74bSmrg if test "$need_locks" = yes; then 1468e169010aSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 1469e169010aSmrg func_echo "Waiting for $lockfile to be removed" 14707914d74bSmrg sleep 2 14717914d74bSmrg done 14727914d74bSmrg elif test "$need_locks" = warn; then 14737914d74bSmrg if test -f "$lockfile"; then 1474e169010aSmrg $ECHO "\ 14757914d74bSmrg*** ERROR, $lockfile exists and contains: 14767914d74bSmrg`cat $lockfile 2>/dev/null` 14777914d74bSmrg 14787914d74bSmrgThis indicates that another process is trying to use the same 14797914d74bSmrgtemporary object file, and libtool could not work around it because 14807914d74bSmrgyour compiler does not support \`-c' and \`-o' together. If you 14817914d74bSmrgrepeat this compilation, it may succeed, by chance, but you had better 14827914d74bSmrgavoid parallel builds (make -j) in this platform, or get a better 14837914d74bSmrgcompiler." 14847914d74bSmrg 1485e169010aSmrg $opt_dry_run || $RM $removelist 14867914d74bSmrg exit $EXIT_FAILURE 14877914d74bSmrg fi 1488e169010aSmrg removelist="$removelist $output_obj" 1489e169010aSmrg $ECHO "$srcfile" > "$lockfile" 14907914d74bSmrg fi 14917914d74bSmrg 1492e169010aSmrg $opt_dry_run || $RM $removelist 1493e169010aSmrg removelist="$removelist $lockfile" 1494e169010aSmrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 1495e169010aSmrg 14967914d74bSmrg if test -n "$fix_srcfile_path"; then 14977914d74bSmrg eval srcfile=\"$fix_srcfile_path\" 14987914d74bSmrg fi 1499e169010aSmrg func_quote_for_eval "$srcfile" 1500e169010aSmrg qsrcfile=$func_quote_for_eval_result 15017914d74bSmrg 15027914d74bSmrg # Only build a PIC object if we are building libtool libraries. 15037914d74bSmrg if test "$build_libtool_libs" = yes; then 15047914d74bSmrg # Without this assignment, base_compile gets emptied. 15057914d74bSmrg fbsd_hideous_sh_bug=$base_compile 15067914d74bSmrg 15077914d74bSmrg if test "$pic_mode" != no; then 15087914d74bSmrg command="$base_compile $qsrcfile $pic_flag" 15097914d74bSmrg else 15107914d74bSmrg # Don't build PIC code 15117914d74bSmrg command="$base_compile $qsrcfile" 15127914d74bSmrg fi 15137914d74bSmrg 1514e169010aSmrg func_mkdir_p "$xdir$objdir" 15157914d74bSmrg 15167914d74bSmrg if test -z "$output_obj"; then 15177914d74bSmrg # Place PIC objects in $objdir 15187914d74bSmrg command="$command -o $lobj" 15197914d74bSmrg fi 15207914d74bSmrg 1521e169010aSmrg func_show_eval_locale "$command" \ 1522e169010aSmrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 15237914d74bSmrg 15247914d74bSmrg if test "$need_locks" = warn && 15257914d74bSmrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 1526e169010aSmrg $ECHO "\ 15277914d74bSmrg*** ERROR, $lockfile contains: 15287914d74bSmrg`cat $lockfile 2>/dev/null` 15297914d74bSmrg 15307914d74bSmrgbut it should contain: 15317914d74bSmrg$srcfile 15327914d74bSmrg 15337914d74bSmrgThis indicates that another process is trying to use the same 15347914d74bSmrgtemporary object file, and libtool could not work around it because 15357914d74bSmrgyour compiler does not support \`-c' and \`-o' together. If you 15367914d74bSmrgrepeat this compilation, it may succeed, by chance, but you had better 15377914d74bSmrgavoid parallel builds (make -j) in this platform, or get a better 15387914d74bSmrgcompiler." 15397914d74bSmrg 1540e169010aSmrg $opt_dry_run || $RM $removelist 15417914d74bSmrg exit $EXIT_FAILURE 15427914d74bSmrg fi 15437914d74bSmrg 15447914d74bSmrg # Just move the object if needed, then go on to compile the next one 15457914d74bSmrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 1546e169010aSmrg func_show_eval '$MV "$output_obj" "$lobj"' \ 1547e169010aSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 15487914d74bSmrg fi 15497914d74bSmrg 15507914d74bSmrg # Allow error messages only from the first compilation. 15517914d74bSmrg if test "$suppress_opt" = yes; then 1552e169010aSmrg suppress_output=' >/dev/null 2>&1' 15537914d74bSmrg fi 15547914d74bSmrg fi 15557914d74bSmrg 15567914d74bSmrg # Only build a position-dependent object if we build old libraries. 15577914d74bSmrg if test "$build_old_libs" = yes; then 15587914d74bSmrg if test "$pic_mode" != yes; then 15597914d74bSmrg # Don't build PIC code 1560e169010aSmrg command="$base_compile $qsrcfile$pie_flag" 15617914d74bSmrg else 15627914d74bSmrg command="$base_compile $qsrcfile $pic_flag" 15637914d74bSmrg fi 15647914d74bSmrg if test "$compiler_c_o" = yes; then 15657914d74bSmrg command="$command -o $obj" 15667914d74bSmrg fi 15677914d74bSmrg 15687914d74bSmrg # Suppress compiler output if we already did a PIC compilation. 15697914d74bSmrg command="$command$suppress_output" 1570e169010aSmrg func_show_eval_locale "$command" \ 1571e169010aSmrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 15727914d74bSmrg 15737914d74bSmrg if test "$need_locks" = warn && 15747914d74bSmrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 1575e169010aSmrg $ECHO "\ 15767914d74bSmrg*** ERROR, $lockfile contains: 15777914d74bSmrg`cat $lockfile 2>/dev/null` 15787914d74bSmrg 15797914d74bSmrgbut it should contain: 15807914d74bSmrg$srcfile 15817914d74bSmrg 15827914d74bSmrgThis indicates that another process is trying to use the same 15837914d74bSmrgtemporary object file, and libtool could not work around it because 15847914d74bSmrgyour compiler does not support \`-c' and \`-o' together. If you 15857914d74bSmrgrepeat this compilation, it may succeed, by chance, but you had better 15867914d74bSmrgavoid parallel builds (make -j) in this platform, or get a better 15877914d74bSmrgcompiler." 15887914d74bSmrg 1589e169010aSmrg $opt_dry_run || $RM $removelist 15907914d74bSmrg exit $EXIT_FAILURE 15917914d74bSmrg fi 15927914d74bSmrg 15937914d74bSmrg # Just move the object if needed 15947914d74bSmrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 1595e169010aSmrg func_show_eval '$MV "$output_obj" "$obj"' \ 1596e169010aSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 15977914d74bSmrg fi 15987914d74bSmrg fi 15997914d74bSmrg 1600e169010aSmrg $opt_dry_run || { 1601e169010aSmrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 16027914d74bSmrg 1603e169010aSmrg # Unlock the critical section if it was locked 1604e169010aSmrg if test "$need_locks" != no; then 1605e169010aSmrg removelist=$lockfile 1606e169010aSmrg $RM "$lockfile" 1607e169010aSmrg fi 1608e169010aSmrg } 16097914d74bSmrg 16107914d74bSmrg exit $EXIT_SUCCESS 1611e169010aSmrg} 16127914d74bSmrg 1613e169010aSmrg$opt_help || { 1614e8ead290Smrg test "$mode" = compile && func_mode_compile ${1+"$@"} 1615e169010aSmrg} 16167914d74bSmrg 1617e169010aSmrgfunc_mode_help () 1618e169010aSmrg{ 1619e169010aSmrg # We need to display help for each of the modes. 1620e169010aSmrg case $mode in 1621e169010aSmrg "") 1622e169010aSmrg # Generic help is extracted from the usage comments 1623e169010aSmrg # at the start of this file. 1624e169010aSmrg func_help 1625e169010aSmrg ;; 16267914d74bSmrg 1627e169010aSmrg clean) 1628e169010aSmrg $ECHO \ 1629e169010aSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 16307914d74bSmrg 1631e169010aSmrgRemove files from the build directory. 16327914d74bSmrg 1633e169010aSmrgRM is the name of the program to use to delete files associated with each FILE 1634e169010aSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 1635e169010aSmrgto RM. 16367914d74bSmrg 1637e169010aSmrgIf FILE is a libtool library, object or program, all the files associated 1638e169010aSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 1639e169010aSmrg ;; 16407914d74bSmrg 1641e169010aSmrg compile) 1642e169010aSmrg $ECHO \ 1643e169010aSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 16447914d74bSmrg 1645e169010aSmrgCompile a source file into a libtool library object. 16467914d74bSmrg 1647e169010aSmrgThis mode accepts the following additional options: 16487914d74bSmrg 1649e169010aSmrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 1650e169010aSmrg -no-suppress do not suppress compiler output for multiple passes 1651e8ead290Smrg -prefer-pic try to build PIC objects only 1652e8ead290Smrg -prefer-non-pic try to build non-PIC objects only 1653e169010aSmrg -shared do not build a \`.o' file suitable for static linking 1654e169010aSmrg -static only build a \`.o' file suitable for static linking 1655e8ead290Smrg -Wc,FLAG pass FLAG directly to the compiler 16567914d74bSmrg 1657e169010aSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 1658e169010aSmrgfrom the given SOURCEFILE. 16597914d74bSmrg 1660e169010aSmrgThe output file name is determined by removing the directory component from 1661e169010aSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 1662e169010aSmrglibrary object suffix, \`.lo'." 1663e169010aSmrg ;; 16647914d74bSmrg 1665e169010aSmrg execute) 1666e169010aSmrg $ECHO \ 1667e169010aSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 16687914d74bSmrg 1669e169010aSmrgAutomatically set library path, then run a program. 16707914d74bSmrg 1671e169010aSmrgThis mode accepts the following additional options: 16727914d74bSmrg 1673e169010aSmrg -dlopen FILE add the directory containing FILE to the library path 16747914d74bSmrg 1675e169010aSmrgThis mode sets the library path environment variable according to \`-dlopen' 1676e169010aSmrgflags. 16777914d74bSmrg 1678e169010aSmrgIf any of the ARGS are libtool executable wrappers, then they are translated 1679e169010aSmrginto their corresponding uninstalled binary, and any of their required library 1680e169010aSmrgdirectories are added to the library path. 16817914d74bSmrg 1682e169010aSmrgThen, COMMAND is executed, with ARGS as arguments." 1683e169010aSmrg ;; 16847914d74bSmrg 1685e169010aSmrg finish) 1686e169010aSmrg $ECHO \ 1687e169010aSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 16887914d74bSmrg 1689e169010aSmrgComplete the installation of libtool libraries. 16907914d74bSmrg 1691e169010aSmrgEach LIBDIR is a directory that contains libtool libraries. 16927914d74bSmrg 1693e169010aSmrgThe commands that this mode executes may require superuser privileges. Use 1694e169010aSmrgthe \`--dry-run' option if you just want to see what would be executed." 1695e169010aSmrg ;; 16967914d74bSmrg 1697e169010aSmrg install) 1698e169010aSmrg $ECHO \ 1699e169010aSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 17007914d74bSmrg 1701e169010aSmrgInstall executables or libraries. 17027914d74bSmrg 1703e169010aSmrgINSTALL-COMMAND is the installation command. The first component should be 1704e169010aSmrgeither the \`install' or \`cp' program. 17057914d74bSmrg 1706e169010aSmrgThe following components of INSTALL-COMMAND are treated specially: 17077914d74bSmrg 1708e8ead290Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 17097914d74bSmrg 1710e169010aSmrgThe rest of the components are interpreted as arguments to that command (only 1711e169010aSmrgBSD-compatible install options are recognized)." 1712e169010aSmrg ;; 17137914d74bSmrg 1714e169010aSmrg link) 1715e169010aSmrg $ECHO \ 1716e169010aSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 17177914d74bSmrg 1718e169010aSmrgLink object files or libraries together to form another library, or to 1719e169010aSmrgcreate an executable program. 17207914d74bSmrg 1721e169010aSmrgLINK-COMMAND is a command using the C compiler that you would use to create 1722e169010aSmrga program from several object files. 17237914d74bSmrg 1724e169010aSmrgThe following components of LINK-COMMAND are treated specially: 17257914d74bSmrg 1726e169010aSmrg -all-static do not do any dynamic linking at all 1727e169010aSmrg -avoid-version do not add a version suffix if possible 1728e8ead290Smrg -bindir BINDIR specify path to binaries directory (for systems where 1729e8ead290Smrg libraries must be found in the PATH setting at runtime) 1730e169010aSmrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 1731e169010aSmrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 1732e169010aSmrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 1733e169010aSmrg -export-symbols SYMFILE 1734e169010aSmrg try to export only the symbols listed in SYMFILE 1735e169010aSmrg -export-symbols-regex REGEX 1736e169010aSmrg try to export only the symbols matching REGEX 1737e169010aSmrg -LLIBDIR search LIBDIR for required installed libraries 1738e169010aSmrg -lNAME OUTPUT-FILE requires the installed library libNAME 1739e169010aSmrg -module build a library that can dlopened 1740e169010aSmrg -no-fast-install disable the fast-install mode 1741e169010aSmrg -no-install link a not-installable executable 1742e169010aSmrg -no-undefined declare that a library does not refer to external symbols 1743e169010aSmrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 1744e169010aSmrg -objectlist FILE Use a list of object files found in FILE to specify objects 1745e169010aSmrg -precious-files-regex REGEX 1746e169010aSmrg don't remove output files matching REGEX 1747e169010aSmrg -release RELEASE specify package release information 1748e169010aSmrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 1749e169010aSmrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 1750e169010aSmrg -shared only do dynamic linking of libtool libraries 1751e169010aSmrg -shrext SUFFIX override the standard shared library file extension 1752e169010aSmrg -static do not do any dynamic linking of uninstalled libtool libraries 1753e169010aSmrg -static-libtool-libs 1754e169010aSmrg do not do any dynamic linking of libtool libraries 1755e169010aSmrg -version-info CURRENT[:REVISION[:AGE]] 1756e169010aSmrg specify library version info [each variable defaults to 0] 1757e169010aSmrg -weak LIBNAME declare that the target provides the LIBNAME interface 1758e8ead290Smrg -Wc,FLAG 1759e8ead290Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 1760e8ead290Smrg -Wl,FLAG 1761e8ead290Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 1762e8ead290Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 17637914d74bSmrg 1764e169010aSmrgAll other options (arguments beginning with \`-') are ignored. 17657914d74bSmrg 1766e169010aSmrgEvery other argument is treated as a filename. Files ending in \`.la' are 1767e169010aSmrgtreated as uninstalled libtool libraries, other files are standard or library 1768e169010aSmrgobject files. 17697914d74bSmrg 1770e169010aSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 1771e169010aSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 1772e169010aSmrgrequired, except when creating a convenience library. 17737914d74bSmrg 1774e169010aSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 1775e169010aSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 17767914d74bSmrg 1777e169010aSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 1778e169010aSmrgis created, otherwise an executable program is created." 17797914d74bSmrg ;; 17807914d74bSmrg 1781e169010aSmrg uninstall) 1782e169010aSmrg $ECHO \ 1783e169010aSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 17847914d74bSmrg 1785e169010aSmrgRemove libraries from an installation directory. 17867914d74bSmrg 1787e169010aSmrgRM is the name of the program to use to delete files associated with each FILE 1788e169010aSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 1789e169010aSmrgto RM. 17907914d74bSmrg 1791e169010aSmrgIf FILE is a libtool library, all the files associated with it are deleted. 1792e169010aSmrgOtherwise, only FILE itself is deleted using RM." 1793e169010aSmrg ;; 17947914d74bSmrg 1795e169010aSmrg *) 1796e169010aSmrg func_fatal_help "invalid operation mode \`$mode'" 1797e169010aSmrg ;; 1798e169010aSmrg esac 17997914d74bSmrg 1800e8ead290Smrg echo 1801e169010aSmrg $ECHO "Try \`$progname --help' for more information about other modes." 1802e169010aSmrg} 18037914d74bSmrg 1804e8ead290Smrg# Now that we've collected a possible --mode arg, show help if necessary 1805e8ead290Smrgif $opt_help; then 1806e8ead290Smrg if test "$opt_help" = :; then 1807e8ead290Smrg func_mode_help 1808e8ead290Smrg else 1809e8ead290Smrg { 1810e8ead290Smrg func_help noexit 1811e8ead290Smrg for mode in compile link execute install finish uninstall clean; do 1812e8ead290Smrg func_mode_help 1813e8ead290Smrg done 1814e8ead290Smrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 1815e8ead290Smrg { 1816e8ead290Smrg func_help noexit 1817e8ead290Smrg for mode in compile link execute install finish uninstall clean; do 1818e8ead290Smrg echo 1819e8ead290Smrg func_mode_help 1820e8ead290Smrg done 1821e8ead290Smrg } | 1822e8ead290Smrg sed '1d 1823e8ead290Smrg /^When reporting/,/^Report/{ 1824e8ead290Smrg H 1825e8ead290Smrg d 1826e8ead290Smrg } 1827e8ead290Smrg $x 1828e8ead290Smrg /information about other modes/d 1829e8ead290Smrg /more detailed .*MODE/d 1830e8ead290Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 1831e8ead290Smrg fi 1832e8ead290Smrg exit $? 1833e8ead290Smrgfi 18347914d74bSmrg 18357914d74bSmrg 1836e169010aSmrg# func_mode_execute arg... 1837e169010aSmrgfunc_mode_execute () 1838e169010aSmrg{ 1839e169010aSmrg $opt_debug 1840e169010aSmrg # The first argument is the command name. 1841e169010aSmrg cmd="$nonopt" 1842e169010aSmrg test -z "$cmd" && \ 1843e169010aSmrg func_fatal_help "you must specify a COMMAND" 18447914d74bSmrg 1845e169010aSmrg # Handle -dlopen flags immediately. 1846e169010aSmrg for file in $execute_dlfiles; do 1847e169010aSmrg test -f "$file" \ 1848e169010aSmrg || func_fatal_help "\`$file' is not a file" 18497914d74bSmrg 1850e169010aSmrg dir= 1851e169010aSmrg case $file in 1852e169010aSmrg *.la) 1853e169010aSmrg # Check to see that this really is a libtool archive. 1854e169010aSmrg func_lalib_unsafe_p "$file" \ 1855e169010aSmrg || func_fatal_help "\`$lib' is not a valid libtool archive" 18567914d74bSmrg 1857e169010aSmrg # Read the libtool library. 1858e169010aSmrg dlname= 1859e169010aSmrg library_names= 1860e169010aSmrg func_source "$file" 18617914d74bSmrg 1862e169010aSmrg # Skip this library if it cannot be dlopened. 1863e169010aSmrg if test -z "$dlname"; then 1864e169010aSmrg # Warn if it was a shared library. 1865e169010aSmrg test -n "$library_names" && \ 1866e169010aSmrg func_warning "\`$file' was not linked with \`-export-dynamic'" 1867e169010aSmrg continue 1868e169010aSmrg fi 18697914d74bSmrg 1870e169010aSmrg func_dirname "$file" "" "." 1871e169010aSmrg dir="$func_dirname_result" 18727914d74bSmrg 1873e169010aSmrg if test -f "$dir/$objdir/$dlname"; then 1874e169010aSmrg dir="$dir/$objdir" 1875e169010aSmrg else 1876e169010aSmrg if test ! -f "$dir/$dlname"; then 1877e169010aSmrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1878e169010aSmrg fi 1879e169010aSmrg fi 18807914d74bSmrg ;; 18817914d74bSmrg 1882e169010aSmrg *.lo) 1883e169010aSmrg # Just add the directory containing the .lo file. 1884e169010aSmrg func_dirname "$file" "" "." 1885e169010aSmrg dir="$func_dirname_result" 18867914d74bSmrg ;; 18877914d74bSmrg 1888e169010aSmrg *) 1889e169010aSmrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 18907914d74bSmrg continue 18917914d74bSmrg ;; 1892e169010aSmrg esac 18937914d74bSmrg 1894e169010aSmrg # Get the absolute pathname. 1895e169010aSmrg absdir=`cd "$dir" && pwd` 1896e169010aSmrg test -n "$absdir" && dir="$absdir" 18977914d74bSmrg 1898e169010aSmrg # Now add the directory to shlibpath_var. 1899e169010aSmrg if eval "test -z \"\$$shlibpath_var\""; then 1900e169010aSmrg eval "$shlibpath_var=\"\$dir\"" 1901e169010aSmrg else 1902e169010aSmrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 1903e169010aSmrg fi 1904e169010aSmrg done 19057914d74bSmrg 1906e169010aSmrg # This variable tells wrapper scripts just to set shlibpath_var 1907e169010aSmrg # rather than running their programs. 1908e169010aSmrg libtool_execute_magic="$magic" 19097914d74bSmrg 1910e169010aSmrg # Check if any of the arguments is a wrapper script. 1911e169010aSmrg args= 1912e169010aSmrg for file 1913e169010aSmrg do 1914e169010aSmrg case $file in 1915e8ead290Smrg -* | *.la | *.lo ) ;; 1916e169010aSmrg *) 1917e169010aSmrg # Do a test to see if this is really a libtool program. 1918e169010aSmrg if func_ltwrapper_script_p "$file"; then 1919e169010aSmrg func_source "$file" 1920e169010aSmrg # Transform arg to wrapped name. 1921e169010aSmrg file="$progdir/$program" 1922e169010aSmrg elif func_ltwrapper_executable_p "$file"; then 1923e169010aSmrg func_ltwrapper_scriptname "$file" 1924e169010aSmrg func_source "$func_ltwrapper_scriptname_result" 1925e169010aSmrg # Transform arg to wrapped name. 1926e169010aSmrg file="$progdir/$program" 1927e169010aSmrg fi 1928e169010aSmrg ;; 1929e169010aSmrg esac 1930e169010aSmrg # Quote arguments (to preserve shell metacharacters). 1931e169010aSmrg func_quote_for_eval "$file" 1932e169010aSmrg args="$args $func_quote_for_eval_result" 1933e169010aSmrg done 19347914d74bSmrg 1935e169010aSmrg if test "X$opt_dry_run" = Xfalse; then 1936e169010aSmrg if test -n "$shlibpath_var"; then 1937e169010aSmrg # Export the shlibpath_var. 1938e169010aSmrg eval "export $shlibpath_var" 1939e169010aSmrg fi 19407914d74bSmrg 1941e169010aSmrg # Restore saved environment variables 1942e169010aSmrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1943e169010aSmrg do 1944e169010aSmrg eval "if test \"\${save_$lt_var+set}\" = set; then 1945e169010aSmrg $lt_var=\$save_$lt_var; export $lt_var 1946e169010aSmrg else 1947e169010aSmrg $lt_unset $lt_var 1948e169010aSmrg fi" 1949e169010aSmrg done 19507914d74bSmrg 1951e169010aSmrg # Now prepare to actually exec the command. 1952e169010aSmrg exec_cmd="\$cmd$args" 1953e169010aSmrg else 1954e169010aSmrg # Display what would be done. 1955e169010aSmrg if test -n "$shlibpath_var"; then 1956e169010aSmrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 1957e8ead290Smrg echo "export $shlibpath_var" 1958e169010aSmrg fi 1959e169010aSmrg $ECHO "$cmd$args" 1960e169010aSmrg exit $EXIT_SUCCESS 1961e169010aSmrg fi 1962e169010aSmrg} 19637914d74bSmrg 1964e169010aSmrgtest "$mode" = execute && func_mode_execute ${1+"$@"} 19657914d74bSmrg 19667914d74bSmrg 1967e169010aSmrg# func_mode_finish arg... 1968e169010aSmrgfunc_mode_finish () 1969e169010aSmrg{ 1970e169010aSmrg $opt_debug 1971e169010aSmrg libdirs="$nonopt" 1972e169010aSmrg admincmds= 19737914d74bSmrg 1974e169010aSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 1975e169010aSmrg for dir 1976e169010aSmrg do 1977e169010aSmrg libdirs="$libdirs $dir" 1978e169010aSmrg done 19797914d74bSmrg 1980e169010aSmrg for libdir in $libdirs; do 1981e169010aSmrg if test -n "$finish_cmds"; then 1982e169010aSmrg # Do each command in the finish commands. 1983e169010aSmrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 1984e169010aSmrg'"$cmd"'"' 1985e169010aSmrg fi 1986e169010aSmrg if test -n "$finish_eval"; then 1987e169010aSmrg # Do the single finish_eval. 1988e169010aSmrg eval cmds=\"$finish_eval\" 1989e169010aSmrg $opt_dry_run || eval "$cmds" || admincmds="$admincmds 1990e169010aSmrg $cmds" 1991e169010aSmrg fi 1992e169010aSmrg done 1993e169010aSmrg fi 19947914d74bSmrg 1995e169010aSmrg # Exit here if they wanted silent mode. 1996e169010aSmrg $opt_silent && exit $EXIT_SUCCESS 19977914d74bSmrg 1998e8ead290Smrg echo "----------------------------------------------------------------------" 1999e8ead290Smrg echo "Libraries have been installed in:" 2000e169010aSmrg for libdir in $libdirs; do 2001e169010aSmrg $ECHO " $libdir" 2002e169010aSmrg done 2003e8ead290Smrg echo 2004e8ead290Smrg echo "If you ever happen to want to link against installed libraries" 2005e8ead290Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 2006e8ead290Smrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 2007e8ead290Smrg echo "flag during linking and do at least one of the following:" 2008e169010aSmrg if test -n "$shlibpath_var"; then 2009e8ead290Smrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 2010e8ead290Smrg echo " during execution" 2011e169010aSmrg fi 2012e169010aSmrg if test -n "$runpath_var"; then 2013e8ead290Smrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 2014e8ead290Smrg echo " during linking" 2015e169010aSmrg fi 2016e169010aSmrg if test -n "$hardcode_libdir_flag_spec"; then 2017e169010aSmrg libdir=LIBDIR 2018e169010aSmrg eval flag=\"$hardcode_libdir_flag_spec\" 20197914d74bSmrg 2020e169010aSmrg $ECHO " - use the \`$flag' linker flag" 2021e169010aSmrg fi 2022e169010aSmrg if test -n "$admincmds"; then 2023e169010aSmrg $ECHO " - have your system administrator run these commands:$admincmds" 2024e169010aSmrg fi 2025e169010aSmrg if test -f /etc/ld.so.conf; then 2026e8ead290Smrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 2027e169010aSmrg fi 2028e8ead290Smrg echo 20297914d74bSmrg 2030e8ead290Smrg echo "See any operating system documentation about shared libraries for" 2031e169010aSmrg case $host in 2032e169010aSmrg solaris2.[6789]|solaris2.1[0-9]) 2033e8ead290Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 2034e8ead290Smrg echo "pages." 20357914d74bSmrg ;; 2036e169010aSmrg *) 2037e8ead290Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 2038e169010aSmrg ;; 2039e169010aSmrg esac 2040e8ead290Smrg echo "----------------------------------------------------------------------" 2041e169010aSmrg exit $EXIT_SUCCESS 2042e169010aSmrg} 20437914d74bSmrg 2044e169010aSmrgtest "$mode" = finish && func_mode_finish ${1+"$@"} 20457914d74bSmrg 20467914d74bSmrg 2047e169010aSmrg# func_mode_install arg... 2048e169010aSmrgfunc_mode_install () 2049e169010aSmrg{ 2050e169010aSmrg $opt_debug 2051e169010aSmrg # There may be an optional sh(1) argument at the beginning of 2052e169010aSmrg # install_prog (especially on Windows NT). 2053e169010aSmrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2054e169010aSmrg # Allow the use of GNU shtool's install command. 2055e8ead290Smrg case $nonopt in *shtool*) :;; *) false;; esac; then 2056e169010aSmrg # Aesthetically quote it. 2057e169010aSmrg func_quote_for_eval "$nonopt" 2058e169010aSmrg install_prog="$func_quote_for_eval_result " 2059e169010aSmrg arg=$1 2060e169010aSmrg shift 2061e169010aSmrg else 2062e169010aSmrg install_prog= 2063e169010aSmrg arg=$nonopt 2064e169010aSmrg fi 20657914d74bSmrg 2066e169010aSmrg # The real first argument should be the name of the installation program. 2067e169010aSmrg # Aesthetically quote it. 2068e169010aSmrg func_quote_for_eval "$arg" 2069e169010aSmrg install_prog="$install_prog$func_quote_for_eval_result" 2070e8ead290Smrg install_shared_prog=$install_prog 2071e8ead290Smrg case " $install_prog " in 2072e8ead290Smrg *[\\\ /]cp\ *) install_cp=: ;; 2073e8ead290Smrg *) install_cp=false ;; 2074e8ead290Smrg esac 2075e169010aSmrg 2076e169010aSmrg # We need to accept at least all the BSD install flags. 2077e169010aSmrg dest= 2078e169010aSmrg files= 2079e169010aSmrg opts= 2080e169010aSmrg prev= 2081e169010aSmrg install_type= 2082e169010aSmrg isdir=no 2083e169010aSmrg stripme= 2084e8ead290Smrg no_mode=: 2085e169010aSmrg for arg 2086e169010aSmrg do 2087e8ead290Smrg arg2= 2088e169010aSmrg if test -n "$dest"; then 2089e169010aSmrg files="$files $dest" 2090e169010aSmrg dest=$arg 2091e169010aSmrg continue 20927914d74bSmrg fi 20937914d74bSmrg 2094e169010aSmrg case $arg in 2095e169010aSmrg -d) isdir=yes ;; 2096e169010aSmrg -f) 2097e8ead290Smrg if $install_cp; then :; else 2098e8ead290Smrg prev=$arg 2099e8ead290Smrg fi 2100e169010aSmrg ;; 2101e169010aSmrg -g | -m | -o) 2102e169010aSmrg prev=$arg 2103e169010aSmrg ;; 2104e169010aSmrg -s) 2105e169010aSmrg stripme=" -s" 2106e169010aSmrg continue 2107e169010aSmrg ;; 2108e169010aSmrg -*) 2109e169010aSmrg ;; 2110e169010aSmrg *) 2111e169010aSmrg # If the previous option needed an argument, then skip it. 2112e169010aSmrg if test -n "$prev"; then 2113e8ead290Smrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 2114e8ead290Smrg arg2=$install_override_mode 2115e8ead290Smrg no_mode=false 2116e8ead290Smrg fi 2117e169010aSmrg prev= 2118e169010aSmrg else 2119e169010aSmrg dest=$arg 2120e169010aSmrg continue 2121e169010aSmrg fi 2122e169010aSmrg ;; 2123e169010aSmrg esac 21247914d74bSmrg 2125e169010aSmrg # Aesthetically quote the argument. 2126e169010aSmrg func_quote_for_eval "$arg" 2127e169010aSmrg install_prog="$install_prog $func_quote_for_eval_result" 2128e8ead290Smrg if test -n "$arg2"; then 2129e8ead290Smrg func_quote_for_eval "$arg2" 2130e8ead290Smrg fi 2131e8ead290Smrg install_shared_prog="$install_shared_prog $func_quote_for_eval_result" 2132e169010aSmrg done 21337914d74bSmrg 2134e169010aSmrg test -z "$install_prog" && \ 2135e169010aSmrg func_fatal_help "you must specify an install program" 21367914d74bSmrg 2137e169010aSmrg test -n "$prev" && \ 2138e169010aSmrg func_fatal_help "the \`$prev' option requires an argument" 21397914d74bSmrg 2140e8ead290Smrg if test -n "$install_override_mode" && $no_mode; then 2141e8ead290Smrg if $install_cp; then :; else 2142e8ead290Smrg func_quote_for_eval "$install_override_mode" 2143e8ead290Smrg install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result" 2144e8ead290Smrg fi 2145e8ead290Smrg fi 2146e8ead290Smrg 2147e169010aSmrg if test -z "$files"; then 2148e169010aSmrg if test -z "$dest"; then 2149e169010aSmrg func_fatal_help "no file or destination specified" 2150e169010aSmrg else 2151e169010aSmrg func_fatal_help "you must specify a destination" 21527914d74bSmrg fi 21537914d74bSmrg fi 21547914d74bSmrg 2155e169010aSmrg # Strip any trailing slash from the destination. 2156e169010aSmrg func_stripname '' '/' "$dest" 2157e169010aSmrg dest=$func_stripname_result 21587914d74bSmrg 2159e169010aSmrg # Check to see that the destination is a directory. 2160e169010aSmrg test -d "$dest" && isdir=yes 2161e169010aSmrg if test "$isdir" = yes; then 2162e169010aSmrg destdir="$dest" 2163e169010aSmrg destname= 2164e169010aSmrg else 2165e169010aSmrg func_dirname_and_basename "$dest" "" "." 2166e169010aSmrg destdir="$func_dirname_result" 2167e169010aSmrg destname="$func_basename_result" 2168e169010aSmrg 2169e169010aSmrg # Not a directory, so check to see that there is only one file specified. 2170e169010aSmrg set dummy $files; shift 2171e169010aSmrg test "$#" -gt 1 && \ 2172e169010aSmrg func_fatal_help "\`$dest' is not a directory" 2173e169010aSmrg fi 2174e169010aSmrg case $destdir in 2175e169010aSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 21767914d74bSmrg *) 2177e169010aSmrg for file in $files; do 2178e169010aSmrg case $file in 2179e169010aSmrg *.lo) ;; 2180e169010aSmrg *) 2181e169010aSmrg func_fatal_help "\`$destdir' must be an absolute directory name" 2182e169010aSmrg ;; 2183e169010aSmrg esac 2184e169010aSmrg done 21857914d74bSmrg ;; 21867914d74bSmrg esac 21877914d74bSmrg 2188e169010aSmrg # This variable tells wrapper scripts just to set variables rather 2189e169010aSmrg # than running their programs. 2190e169010aSmrg libtool_install_magic="$magic" 21917914d74bSmrg 2192e169010aSmrg staticlibs= 2193e169010aSmrg future_libdirs= 2194e169010aSmrg current_libdirs= 2195e169010aSmrg for file in $files; do 21967914d74bSmrg 2197e169010aSmrg # Do each installation. 2198e169010aSmrg case $file in 2199e169010aSmrg *.$libext) 2200e169010aSmrg # Do the static libraries later. 2201e169010aSmrg staticlibs="$staticlibs $file" 2202e169010aSmrg ;; 2203e169010aSmrg 2204e169010aSmrg *.la) 2205e169010aSmrg # Check to see that this really is a libtool archive. 2206e169010aSmrg func_lalib_unsafe_p "$file" \ 2207e169010aSmrg || func_fatal_help "\`$file' is not a valid libtool archive" 2208e169010aSmrg 2209e169010aSmrg library_names= 2210e169010aSmrg old_library= 2211e169010aSmrg relink_command= 2212e169010aSmrg func_source "$file" 2213e169010aSmrg 2214e169010aSmrg # Add the libdir to current_libdirs if it is the destination. 2215e169010aSmrg if test "X$destdir" = "X$libdir"; then 2216e169010aSmrg case "$current_libdirs " in 2217e169010aSmrg *" $libdir "*) ;; 2218e169010aSmrg *) current_libdirs="$current_libdirs $libdir" ;; 22197914d74bSmrg esac 2220e169010aSmrg else 2221e169010aSmrg # Note the libdir as a future libdir. 2222e169010aSmrg case "$future_libdirs " in 2223e169010aSmrg *" $libdir "*) ;; 2224e169010aSmrg *) future_libdirs="$future_libdirs $libdir" ;; 2225e169010aSmrg esac 2226e169010aSmrg fi 22277914d74bSmrg 2228e169010aSmrg func_dirname "$file" "/" "" 2229e169010aSmrg dir="$func_dirname_result" 2230e169010aSmrg dir="$dir$objdir" 2231e169010aSmrg 2232e169010aSmrg if test -n "$relink_command"; then 2233e169010aSmrg # Determine the prefix the user has applied to our future dir. 2234e8ead290Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2235e169010aSmrg 2236e169010aSmrg # Don't allow the user to place us outside of our expected 2237e169010aSmrg # location b/c this prevents finding dependent libraries that 2238e169010aSmrg # are installed to the same prefix. 2239e169010aSmrg # At present, this check doesn't affect windows .dll's that 2240e169010aSmrg # are installed into $libdir/../bin (currently, that works fine) 2241e169010aSmrg # but it's something to keep an eye on. 2242e169010aSmrg test "$inst_prefix_dir" = "$destdir" && \ 2243e169010aSmrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2244e169010aSmrg 2245e169010aSmrg if test -n "$inst_prefix_dir"; then 2246e169010aSmrg # Stick the inst_prefix_dir data into the link command. 2247e8ead290Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2248e169010aSmrg else 2249e8ead290Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2250e169010aSmrg fi 2251e169010aSmrg 2252e169010aSmrg func_warning "relinking \`$file'" 2253e169010aSmrg func_show_eval "$relink_command" \ 2254e169010aSmrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2255e169010aSmrg fi 2256e169010aSmrg 2257e169010aSmrg # See the names of the shared library. 2258e169010aSmrg set dummy $library_names; shift 2259e169010aSmrg if test -n "$1"; then 2260e169010aSmrg realname="$1" 2261e169010aSmrg shift 2262e169010aSmrg 2263e169010aSmrg srcname="$realname" 2264e169010aSmrg test -n "$relink_command" && srcname="$realname"T 2265e169010aSmrg 2266e169010aSmrg # Install the shared library and build the symlinks. 2267e8ead290Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2268e169010aSmrg 'exit $?' 2269e169010aSmrg tstripme="$stripme" 2270e169010aSmrg case $host_os in 2271e169010aSmrg cygwin* | mingw* | pw32* | cegcc*) 2272e169010aSmrg case $realname in 2273e169010aSmrg *.dll.a) 2274e169010aSmrg tstripme="" 2275e169010aSmrg ;; 2276e169010aSmrg esac 22777914d74bSmrg ;; 22787914d74bSmrg esac 2279e169010aSmrg if test -n "$tstripme" && test -n "$striplib"; then 2280e169010aSmrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 22817914d74bSmrg fi 2282e169010aSmrg 2283e169010aSmrg if test "$#" -gt 0; then 2284e169010aSmrg # Delete the old symlinks, and create new ones. 2285e169010aSmrg # Try `ln -sf' first, because the `ln' binary might depend on 2286e169010aSmrg # the symlink we replace! Solaris /bin/ln does not understand -f, 2287e169010aSmrg # so we also need to try rm && ln -s. 2288e169010aSmrg for linkname 2289e169010aSmrg do 2290e169010aSmrg test "$linkname" != "$realname" \ 2291e169010aSmrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 22927914d74bSmrg done 22937914d74bSmrg fi 22947914d74bSmrg 2295e169010aSmrg # Do each command in the postinstall commands. 2296e169010aSmrg lib="$destdir/$realname" 2297e169010aSmrg func_execute_cmds "$postinstall_cmds" 'exit $?' 22987914d74bSmrg fi 22997914d74bSmrg 2300e169010aSmrg # Install the pseudo-library for information purposes. 2301e169010aSmrg func_basename "$file" 2302e169010aSmrg name="$func_basename_result" 2303e169010aSmrg instname="$dir/$name"i 2304e169010aSmrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 23057914d74bSmrg 2306e169010aSmrg # Maybe install the static library, too. 2307e169010aSmrg test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" 2308e169010aSmrg ;; 23097914d74bSmrg 2310e169010aSmrg *.lo) 2311e169010aSmrg # Install (i.e. copy) a libtool object. 23127914d74bSmrg 2313e169010aSmrg # Figure out destination file name, if it wasn't already specified. 2314e169010aSmrg if test -n "$destname"; then 2315e169010aSmrg destfile="$destdir/$destname" 2316e169010aSmrg else 2317e169010aSmrg func_basename "$file" 2318e169010aSmrg destfile="$func_basename_result" 2319e169010aSmrg destfile="$destdir/$destfile" 2320e169010aSmrg fi 2321e169010aSmrg 2322e169010aSmrg # Deduce the name of the destination old-style object file. 2323e169010aSmrg case $destfile in 2324e169010aSmrg *.lo) 2325e169010aSmrg func_lo2o "$destfile" 2326e169010aSmrg staticdest=$func_lo2o_result 2327e169010aSmrg ;; 2328e169010aSmrg *.$objext) 2329e169010aSmrg staticdest="$destfile" 2330e169010aSmrg destfile= 2331e169010aSmrg ;; 2332e169010aSmrg *) 2333e169010aSmrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 2334e169010aSmrg ;; 23357914d74bSmrg esac 23367914d74bSmrg 2337e169010aSmrg # Install the libtool object if requested. 2338e169010aSmrg test -n "$destfile" && \ 2339e169010aSmrg func_show_eval "$install_prog $file $destfile" 'exit $?' 2340e169010aSmrg 2341e169010aSmrg # Install the old object if enabled. 2342e169010aSmrg if test "$build_old_libs" = yes; then 2343e169010aSmrg # Deduce the name of the old-style object file. 2344e169010aSmrg func_lo2o "$file" 2345e169010aSmrg staticobj=$func_lo2o_result 2346e169010aSmrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 23477914d74bSmrg fi 2348e169010aSmrg exit $EXIT_SUCCESS 2349e169010aSmrg ;; 23507914d74bSmrg 2351e169010aSmrg *) 2352e169010aSmrg # Figure out destination file name, if it wasn't already specified. 2353e169010aSmrg if test -n "$destname"; then 2354e169010aSmrg destfile="$destdir/$destname" 2355e169010aSmrg else 2356e169010aSmrg func_basename "$file" 2357e169010aSmrg destfile="$func_basename_result" 2358e169010aSmrg destfile="$destdir/$destfile" 2359e169010aSmrg fi 2360e169010aSmrg 2361e169010aSmrg # If the file is missing, and there is a .exe on the end, strip it 2362e169010aSmrg # because it is most likely a libtool script we actually want to 2363e169010aSmrg # install 2364e169010aSmrg stripped_ext="" 2365e169010aSmrg case $file in 2366e169010aSmrg *.exe) 2367e169010aSmrg if test ! -f "$file"; then 2368e169010aSmrg func_stripname '' '.exe' "$file" 2369e169010aSmrg file=$func_stripname_result 2370e169010aSmrg stripped_ext=".exe" 23717914d74bSmrg fi 2372e169010aSmrg ;; 2373e169010aSmrg esac 23747914d74bSmrg 2375e169010aSmrg # Do a test to see if this is really a libtool program. 2376e169010aSmrg case $host in 2377e169010aSmrg *cygwin* | *mingw*) 2378e169010aSmrg if func_ltwrapper_executable_p "$file"; then 2379e169010aSmrg func_ltwrapper_scriptname "$file" 2380e169010aSmrg wrapper=$func_ltwrapper_scriptname_result 2381e169010aSmrg else 2382e169010aSmrg func_stripname '' '.exe' "$file" 2383e169010aSmrg wrapper=$func_stripname_result 2384e169010aSmrg fi 2385e169010aSmrg ;; 2386e169010aSmrg *) 2387e169010aSmrg wrapper=$file 2388e169010aSmrg ;; 2389e169010aSmrg esac 2390e169010aSmrg if func_ltwrapper_script_p "$wrapper"; then 2391e169010aSmrg notinst_deplibs= 2392e169010aSmrg relink_command= 23937914d74bSmrg 2394e169010aSmrg func_source "$wrapper" 23957914d74bSmrg 2396e169010aSmrg # Check the variables that should have been set. 2397e169010aSmrg test -z "$generated_by_libtool_version" && \ 2398e169010aSmrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 2399e169010aSmrg 2400e169010aSmrg finalize=yes 2401e169010aSmrg for lib in $notinst_deplibs; do 2402e169010aSmrg # Check to see that each library is installed. 2403e169010aSmrg libdir= 2404e169010aSmrg if test -f "$lib"; then 2405e169010aSmrg func_source "$lib" 2406e169010aSmrg fi 2407e8ead290Smrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 2408e169010aSmrg if test -n "$libdir" && test ! -f "$libfile"; then 2409e169010aSmrg func_warning "\`$lib' has not been installed in \`$libdir'" 2410e169010aSmrg finalize=no 2411e169010aSmrg fi 2412e169010aSmrg done 2413e169010aSmrg 2414e169010aSmrg relink_command= 2415e169010aSmrg func_source "$wrapper" 2416e169010aSmrg 2417e169010aSmrg outputname= 2418e169010aSmrg if test "$fast_install" = no && test -n "$relink_command"; then 2419e169010aSmrg $opt_dry_run || { 2420e169010aSmrg if test "$finalize" = yes; then 2421e169010aSmrg tmpdir=`func_mktempdir` 2422e169010aSmrg func_basename "$file$stripped_ext" 2423e169010aSmrg file="$func_basename_result" 2424e169010aSmrg outputname="$tmpdir/$file" 2425e169010aSmrg # Replace the output file specification. 2426e8ead290Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 2427e169010aSmrg 2428e169010aSmrg $opt_silent || { 2429e169010aSmrg func_quote_for_expand "$relink_command" 2430e169010aSmrg eval "func_echo $func_quote_for_expand_result" 2431e169010aSmrg } 2432e169010aSmrg if eval "$relink_command"; then : 2433e169010aSmrg else 2434e169010aSmrg func_error "error: relink \`$file' with the above command before installing it" 2435e169010aSmrg $opt_dry_run || ${RM}r "$tmpdir" 2436e169010aSmrg continue 2437e169010aSmrg fi 2438e169010aSmrg file="$outputname" 2439e169010aSmrg else 2440e169010aSmrg func_warning "cannot relink \`$file'" 2441e169010aSmrg fi 2442e169010aSmrg } 24437914d74bSmrg else 2444e169010aSmrg # Install the binary that we compiled earlier. 2445e8ead290Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 24467914d74bSmrg fi 2447e169010aSmrg fi 24487914d74bSmrg 2449e169010aSmrg # remove .exe since cygwin /usr/bin/install will append another 2450e169010aSmrg # one anyway 2451e169010aSmrg case $install_prog,$host in 2452e169010aSmrg */usr/bin/install*,*cygwin*) 2453e169010aSmrg case $file:$destfile in 2454e169010aSmrg *.exe:*.exe) 2455e169010aSmrg # this is ok 2456e169010aSmrg ;; 2457e169010aSmrg *.exe:*) 2458e169010aSmrg destfile=$destfile.exe 2459e169010aSmrg ;; 2460e169010aSmrg *:*.exe) 2461e169010aSmrg func_stripname '' '.exe' "$destfile" 2462e169010aSmrg destfile=$func_stripname_result 2463e169010aSmrg ;; 2464e169010aSmrg esac 24657914d74bSmrg ;; 24667914d74bSmrg esac 2467e169010aSmrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 2468e169010aSmrg $opt_dry_run || if test -n "$outputname"; then 2469e169010aSmrg ${RM}r "$tmpdir" 2470e169010aSmrg fi 2471e169010aSmrg ;; 2472e169010aSmrg esac 2473e169010aSmrg done 24747914d74bSmrg 2475e169010aSmrg for file in $staticlibs; do 2476e169010aSmrg func_basename "$file" 2477e169010aSmrg name="$func_basename_result" 24787914d74bSmrg 2479e169010aSmrg # Set up the ranlib parameters. 2480e169010aSmrg oldlib="$destdir/$name" 24817914d74bSmrg 2482e169010aSmrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 24837914d74bSmrg 2484e169010aSmrg if test -n "$stripme" && test -n "$old_striplib"; then 2485e169010aSmrg func_show_eval "$old_striplib $oldlib" 'exit $?' 2486e169010aSmrg fi 24877914d74bSmrg 2488e169010aSmrg # Do each command in the postinstall commands. 2489e169010aSmrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 2490e169010aSmrg done 24917914d74bSmrg 2492e169010aSmrg test -n "$future_libdirs" && \ 2493e169010aSmrg func_warning "remember to run \`$progname --finish$future_libdirs'" 24947914d74bSmrg 2495e169010aSmrg if test -n "$current_libdirs"; then 2496e169010aSmrg # Maybe just do a dry run. 2497e169010aSmrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 2498e169010aSmrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 2499e169010aSmrg else 2500e169010aSmrg exit $EXIT_SUCCESS 2501e169010aSmrg fi 2502e169010aSmrg} 25037914d74bSmrg 2504e169010aSmrgtest "$mode" = install && func_mode_install ${1+"$@"} 25057914d74bSmrg 25067914d74bSmrg 2507e169010aSmrg# func_generate_dlsyms outputname originator pic_p 2508e169010aSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with 2509e169010aSmrg# a dlpreopen symbol table. 2510e169010aSmrgfunc_generate_dlsyms () 2511e169010aSmrg{ 2512e169010aSmrg $opt_debug 2513e169010aSmrg my_outputname="$1" 2514e169010aSmrg my_originator="$2" 2515e169010aSmrg my_pic_p="${3-no}" 2516e169010aSmrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 2517e169010aSmrg my_dlsyms= 2518e169010aSmrg 2519e169010aSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 2520e169010aSmrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 2521e169010aSmrg my_dlsyms="${my_outputname}S.c" 2522e169010aSmrg else 2523e169010aSmrg func_error "not configured to extract global symbols from dlpreopened files" 2524e169010aSmrg fi 2525e169010aSmrg fi 25267914d74bSmrg 2527e169010aSmrg if test -n "$my_dlsyms"; then 2528e169010aSmrg case $my_dlsyms in 2529e169010aSmrg "") ;; 2530e169010aSmrg *.c) 2531e169010aSmrg # Discover the nlist of each of the dlfiles. 2532e169010aSmrg nlist="$output_objdir/${my_outputname}.nm" 2533e169010aSmrg 2534e169010aSmrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 2535e169010aSmrg 2536e169010aSmrg # Parse the name list into a source file. 2537e169010aSmrg func_verbose "creating $output_objdir/$my_dlsyms" 2538e169010aSmrg 2539e169010aSmrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 2540e169010aSmrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 2541e169010aSmrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 2542e169010aSmrg 2543e169010aSmrg#ifdef __cplusplus 2544e169010aSmrgextern \"C\" { 2545e169010aSmrg#endif 2546e169010aSmrg 2547e8ead290Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 2548e8ead290Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 2549e8ead290Smrg#endif 2550e8ead290Smrg 2551e169010aSmrg/* External symbol declarations for the compiler. */\ 2552e169010aSmrg" 2553e169010aSmrg 2554e169010aSmrg if test "$dlself" = yes; then 2555e169010aSmrg func_verbose "generating symbol list for \`$output'" 2556e169010aSmrg 2557e169010aSmrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 2558e169010aSmrg 2559e169010aSmrg # Add our own program objects to the symbol list. 2560e8ead290Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 2561e169010aSmrg for progfile in $progfiles; do 2562e169010aSmrg func_verbose "extracting global C symbols from \`$progfile'" 2563e169010aSmrg $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" 2564e169010aSmrg done 2565e169010aSmrg 2566e169010aSmrg if test -n "$exclude_expsyms"; then 2567e169010aSmrg $opt_dry_run || { 2568e169010aSmrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 2569e169010aSmrg eval '$MV "$nlist"T "$nlist"' 2570e169010aSmrg } 25717914d74bSmrg fi 25727914d74bSmrg 2573e169010aSmrg if test -n "$export_symbols_regex"; then 2574e169010aSmrg $opt_dry_run || { 2575e169010aSmrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 2576e169010aSmrg eval '$MV "$nlist"T "$nlist"' 2577e169010aSmrg } 25787914d74bSmrg fi 2579e169010aSmrg 2580e169010aSmrg # Prepare the list of exported symbols 2581e169010aSmrg if test -z "$export_symbols"; then 2582e169010aSmrg export_symbols="$output_objdir/$outputname.exp" 2583e169010aSmrg $opt_dry_run || { 2584e169010aSmrg $RM $export_symbols 2585e169010aSmrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 2586e169010aSmrg case $host in 2587e169010aSmrg *cygwin* | *mingw* | *cegcc* ) 2588e169010aSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 2589e169010aSmrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 2590e169010aSmrg ;; 25917914d74bSmrg esac 2592e169010aSmrg } 2593e169010aSmrg else 2594e169010aSmrg $opt_dry_run || { 2595e169010aSmrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 2596e169010aSmrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 2597e169010aSmrg eval '$MV "$nlist"T "$nlist"' 2598e169010aSmrg case $host in 2599e8ead290Smrg *cygwin* | *mingw* | *cegcc* ) 2600e169010aSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 2601e169010aSmrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 2602e169010aSmrg ;; 26037914d74bSmrg esac 2604e169010aSmrg } 26057914d74bSmrg fi 2606e169010aSmrg fi 26077914d74bSmrg 2608e169010aSmrg for dlprefile in $dlprefiles; do 2609e169010aSmrg func_verbose "extracting global C symbols from \`$dlprefile'" 2610e169010aSmrg func_basename "$dlprefile" 2611e169010aSmrg name="$func_basename_result" 2612e169010aSmrg $opt_dry_run || { 2613e169010aSmrg eval '$ECHO ": $name " >> "$nlist"' 2614e169010aSmrg eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" 2615e169010aSmrg } 2616e169010aSmrg done 26177914d74bSmrg 2618e169010aSmrg $opt_dry_run || { 2619e169010aSmrg # Make sure we have at least an empty file. 2620e169010aSmrg test -f "$nlist" || : > "$nlist" 26217914d74bSmrg 2622e169010aSmrg if test -n "$exclude_expsyms"; then 2623e169010aSmrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 2624e169010aSmrg $MV "$nlist"T "$nlist" 26257914d74bSmrg fi 26267914d74bSmrg 2627e169010aSmrg # Try sorting and uniquifying the output. 2628e169010aSmrg if $GREP -v "^: " < "$nlist" | 2629e169010aSmrg if sort -k 3 </dev/null >/dev/null 2>&1; then 2630e169010aSmrg sort -k 3 26317914d74bSmrg else 2632e169010aSmrg sort +2 2633e169010aSmrg fi | 2634e169010aSmrg uniq > "$nlist"S; then 2635e169010aSmrg : 26367914d74bSmrg else 2637e169010aSmrg $GREP -v "^: " < "$nlist" > "$nlist"S 26387914d74bSmrg fi 26397914d74bSmrg 2640e169010aSmrg if test -f "$nlist"S; then 2641e169010aSmrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 26427914d74bSmrg else 2643e8ead290Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 26447914d74bSmrg fi 26457914d74bSmrg 2646e8ead290Smrg echo >> "$output_objdir/$my_dlsyms" "\ 26477914d74bSmrg 2648e169010aSmrg/* The mapping between symbol names and symbols. */ 2649e169010aSmrgtypedef struct { 2650e169010aSmrg const char *name; 2651e169010aSmrg void *address; 2652e169010aSmrg} lt_dlsymlist; 2653e169010aSmrg" 2654e169010aSmrg case $host in 2655e169010aSmrg *cygwin* | *mingw* | *cegcc* ) 2656e8ead290Smrg echo >> "$output_objdir/$my_dlsyms" "\ 2657e169010aSmrg/* DATA imports from DLLs on WIN32 con't be const, because 2658e169010aSmrg runtime relocations are performed -- see ld's documentation 2659e169010aSmrg on pseudo-relocs. */" 2660e169010aSmrg lt_dlsym_const= ;; 2661e169010aSmrg *osf5*) 2662e169010aSmrg echo >> "$output_objdir/$my_dlsyms" "\ 2663e169010aSmrg/* This system does not cope well with relocations in const data */" 2664e169010aSmrg lt_dlsym_const= ;; 2665e169010aSmrg *) 2666e169010aSmrg lt_dlsym_const=const ;; 2667e169010aSmrg esac 2668e169010aSmrg 2669e8ead290Smrg echo >> "$output_objdir/$my_dlsyms" "\ 2670e169010aSmrgextern $lt_dlsym_const lt_dlsymlist 2671e169010aSmrglt_${my_prefix}_LTX_preloaded_symbols[]; 2672e169010aSmrg$lt_dlsym_const lt_dlsymlist 2673e169010aSmrglt_${my_prefix}_LTX_preloaded_symbols[] = 2674e169010aSmrg{\ 2675e169010aSmrg { \"$my_originator\", (void *) 0 }," 2676e169010aSmrg 2677e169010aSmrg case $need_lib_prefix in 2678e169010aSmrg no) 2679e169010aSmrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 2680e169010aSmrg ;; 2681e169010aSmrg *) 2682e169010aSmrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 2683e169010aSmrg ;; 2684e169010aSmrg esac 2685e8ead290Smrg echo >> "$output_objdir/$my_dlsyms" "\ 2686e169010aSmrg {0, (void *) 0} 2687e169010aSmrg}; 2688e169010aSmrg 2689e169010aSmrg/* This works around a problem in FreeBSD linker */ 2690e169010aSmrg#ifdef FREEBSD_WORKAROUND 2691e169010aSmrgstatic const void *lt_preloaded_setup() { 2692e169010aSmrg return lt_${my_prefix}_LTX_preloaded_symbols; 2693e169010aSmrg} 2694e169010aSmrg#endif 2695e169010aSmrg 2696e169010aSmrg#ifdef __cplusplus 2697e169010aSmrg} 2698e169010aSmrg#endif\ 2699e169010aSmrg" 2700e169010aSmrg } # !$opt_dry_run 2701e169010aSmrg 2702e169010aSmrg pic_flag_for_symtable= 2703e169010aSmrg case "$compile_command " in 2704e169010aSmrg *" -static "*) ;; 2705e169010aSmrg *) 2706e169010aSmrg case $host in 2707e169010aSmrg # compiling the symbol table file with pic_flag works around 2708e169010aSmrg # a FreeBSD bug that causes programs to crash when -lm is 2709e169010aSmrg # linked before any other PIC object. But we must not use 2710e169010aSmrg # pic_flag when linking with -static. The problem exists in 2711e169010aSmrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 2712e169010aSmrg *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 2713e169010aSmrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 2714e169010aSmrg *-*-hpux*) 2715e169010aSmrg pic_flag_for_symtable=" $pic_flag" ;; 2716e169010aSmrg *) 2717e169010aSmrg if test "X$my_pic_p" != Xno; then 2718e169010aSmrg pic_flag_for_symtable=" $pic_flag" 27197914d74bSmrg fi 2720e169010aSmrg ;; 2721e169010aSmrg esac 2722e169010aSmrg ;; 2723e169010aSmrg esac 2724e169010aSmrg symtab_cflags= 2725e169010aSmrg for arg in $LTCFLAGS; do 2726e169010aSmrg case $arg in 2727e169010aSmrg -pie | -fpie | -fPIE) ;; 2728e169010aSmrg *) symtab_cflags="$symtab_cflags $arg" ;; 2729e169010aSmrg esac 2730e169010aSmrg done 27317914d74bSmrg 2732e169010aSmrg # Now compile the dynamic symbol file. 2733e169010aSmrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 27347914d74bSmrg 2735e169010aSmrg # Clean up the generated files. 2736e169010aSmrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 2737e169010aSmrg 2738e169010aSmrg # Transform the symbol file into the correct name. 2739e169010aSmrg symfileobj="$output_objdir/${my_outputname}S.$objext" 2740e169010aSmrg case $host in 2741e169010aSmrg *cygwin* | *mingw* | *cegcc* ) 2742e169010aSmrg if test -f "$output_objdir/$my_outputname.def"; then 2743e8ead290Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 2744e8ead290Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 2745e169010aSmrg else 2746e8ead290Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 2747e8ead290Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 2748e169010aSmrg fi 2749e169010aSmrg ;; 2750e169010aSmrg *) 2751e8ead290Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 2752e8ead290Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 27537914d74bSmrg ;; 27547914d74bSmrg esac 2755e169010aSmrg ;; 2756e169010aSmrg *) 2757e169010aSmrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 2758e169010aSmrg ;; 2759e169010aSmrg esac 2760e169010aSmrg else 2761e169010aSmrg # We keep going just in case the user didn't refer to 2762e169010aSmrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 2763e169010aSmrg # really was required. 2764e169010aSmrg 2765e169010aSmrg # Nullify the symbol file. 2766e8ead290Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 2767e8ead290Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 27687914d74bSmrg fi 2769e169010aSmrg} 27707914d74bSmrg 2771e169010aSmrg# func_win32_libid arg 2772e169010aSmrg# return the library type of file 'arg' 2773e169010aSmrg# 2774e169010aSmrg# Need a lot of goo to handle *both* DLLs and import libs 2775e169010aSmrg# Has to be a shell function in order to 'eat' the argument 2776e169010aSmrg# that is supplied when $file_magic_command is called. 2777e8ead290Smrg# Despite the name, also deal with 64 bit binaries. 2778e169010aSmrgfunc_win32_libid () 2779e169010aSmrg{ 2780e169010aSmrg $opt_debug 2781e169010aSmrg win32_libid_type="unknown" 2782e169010aSmrg win32_fileres=`file -L $1 2>/dev/null` 2783e169010aSmrg case $win32_fileres in 2784e169010aSmrg *ar\ archive\ import\ library*) # definitely import 2785e169010aSmrg win32_libid_type="x86 archive import" 2786e169010aSmrg ;; 2787e169010aSmrg *ar\ archive*) # could be an import, or static 2788e8ead290Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 2789e169010aSmrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 2790e8ead290Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 2791e169010aSmrg win32_nmres=`eval $NM -f posix -A $1 | 2792e169010aSmrg $SED -n -e ' 2793e169010aSmrg 1,100{ 2794e169010aSmrg / I /{ 2795e169010aSmrg s,.*,import, 2796e169010aSmrg p 2797e169010aSmrg q 2798e169010aSmrg } 2799e169010aSmrg }'` 2800e169010aSmrg case $win32_nmres in 2801e169010aSmrg import*) win32_libid_type="x86 archive import";; 2802e169010aSmrg *) win32_libid_type="x86 archive static";; 2803e169010aSmrg esac 2804e169010aSmrg fi 2805e169010aSmrg ;; 2806e169010aSmrg *DLL*) 2807e169010aSmrg win32_libid_type="x86 DLL" 2808e169010aSmrg ;; 2809e169010aSmrg *executable*) # but shell scripts are "executable" too... 2810e169010aSmrg case $win32_fileres in 2811e169010aSmrg *MS\ Windows\ PE\ Intel*) 2812e169010aSmrg win32_libid_type="x86 DLL" 2813e169010aSmrg ;; 2814e169010aSmrg esac 2815e169010aSmrg ;; 2816e169010aSmrg esac 2817e169010aSmrg $ECHO "$win32_libid_type" 2818e169010aSmrg} 28197914d74bSmrg 28207914d74bSmrg 28217914d74bSmrg 2822e169010aSmrg# func_extract_an_archive dir oldlib 2823e169010aSmrgfunc_extract_an_archive () 2824e169010aSmrg{ 2825e169010aSmrg $opt_debug 2826e169010aSmrg f_ex_an_ar_dir="$1"; shift 2827e169010aSmrg f_ex_an_ar_oldlib="$1" 2828e8ead290Smrg if test "$lock_old_archive_extraction" = yes; then 2829e8ead290Smrg lockfile=$f_ex_an_ar_oldlib.lock 2830e8ead290Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 2831e8ead290Smrg func_echo "Waiting for $lockfile to be removed" 2832e8ead290Smrg sleep 2 2833e8ead290Smrg done 2834e8ead290Smrg fi 2835e8ead290Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 2836e8ead290Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 2837e8ead290Smrg if test "$lock_old_archive_extraction" = yes; then 2838e8ead290Smrg $opt_dry_run || rm -f "$lockfile" 2839e8ead290Smrg fi 2840e169010aSmrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 2841e169010aSmrg : 2842e169010aSmrg else 2843e169010aSmrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 2844e169010aSmrg fi 2845e169010aSmrg} 28467914d74bSmrg 28477914d74bSmrg 2848e169010aSmrg# func_extract_archives gentop oldlib ... 2849e169010aSmrgfunc_extract_archives () 2850e169010aSmrg{ 2851e169010aSmrg $opt_debug 2852e169010aSmrg my_gentop="$1"; shift 2853e169010aSmrg my_oldlibs=${1+"$@"} 2854e169010aSmrg my_oldobjs="" 2855e169010aSmrg my_xlib="" 2856e169010aSmrg my_xabs="" 2857e169010aSmrg my_xdir="" 28587914d74bSmrg 2859e169010aSmrg for my_xlib in $my_oldlibs; do 2860e169010aSmrg # Extract the objects. 2861e169010aSmrg case $my_xlib in 2862e169010aSmrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 2863e169010aSmrg *) my_xabs=`pwd`"/$my_xlib" ;; 2864e169010aSmrg esac 2865e169010aSmrg func_basename "$my_xlib" 2866e169010aSmrg my_xlib="$func_basename_result" 2867e169010aSmrg my_xlib_u=$my_xlib 2868e169010aSmrg while :; do 2869e169010aSmrg case " $extracted_archives " in 2870e169010aSmrg *" $my_xlib_u "*) 2871e169010aSmrg func_arith $extracted_serial + 1 2872e169010aSmrg extracted_serial=$func_arith_result 2873e169010aSmrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 2874e169010aSmrg *) break ;; 2875e169010aSmrg esac 2876e169010aSmrg done 2877e169010aSmrg extracted_archives="$extracted_archives $my_xlib_u" 2878e169010aSmrg my_xdir="$my_gentop/$my_xlib_u" 28797914d74bSmrg 2880e169010aSmrg func_mkdir_p "$my_xdir" 28817914d74bSmrg 2882e169010aSmrg case $host in 2883e169010aSmrg *-darwin*) 2884e169010aSmrg func_verbose "Extracting $my_xabs" 2885e169010aSmrg # Do not bother doing anything if just a dry run 2886e169010aSmrg $opt_dry_run || { 2887e169010aSmrg darwin_orig_dir=`pwd` 2888e169010aSmrg cd $my_xdir || exit $? 2889e169010aSmrg darwin_archive=$my_xabs 2890e169010aSmrg darwin_curdir=`pwd` 2891e169010aSmrg darwin_base_archive=`basename "$darwin_archive"` 2892e169010aSmrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 2893e169010aSmrg if test -n "$darwin_arches"; then 2894e169010aSmrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 2895e169010aSmrg darwin_arch= 2896e169010aSmrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 2897e169010aSmrg for darwin_arch in $darwin_arches ; do 2898e169010aSmrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 2899e169010aSmrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 2900e169010aSmrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 2901e169010aSmrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 2902e169010aSmrg cd "$darwin_curdir" 2903e169010aSmrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 2904e169010aSmrg done # $darwin_arches 2905e169010aSmrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 2906e169010aSmrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 2907e169010aSmrg darwin_file= 2908e169010aSmrg darwin_files= 2909e169010aSmrg for darwin_file in $darwin_filelist; do 2910e8ead290Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 2911e169010aSmrg $LIPO -create -output "$darwin_file" $darwin_files 2912e169010aSmrg done # $darwin_filelist 2913e169010aSmrg $RM -rf unfat-$$ 2914e169010aSmrg cd "$darwin_orig_dir" 2915e169010aSmrg else 2916e169010aSmrg cd $darwin_orig_dir 2917e169010aSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 2918e169010aSmrg fi # $darwin_arches 2919e169010aSmrg } # !$opt_dry_run 2920e169010aSmrg ;; 2921e169010aSmrg *) 2922e169010aSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 2923e169010aSmrg ;; 29247914d74bSmrg esac 2925e8ead290Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 2926e169010aSmrg done 29277914d74bSmrg 2928e169010aSmrg func_extract_archives_result="$my_oldobjs" 2929e169010aSmrg} 29307914d74bSmrg 29317914d74bSmrg 2932e8ead290Smrg# func_emit_wrapper [arg=no] 2933e8ead290Smrg# 2934e8ead290Smrg# Emit a libtool wrapper script on stdout. 2935e8ead290Smrg# Don't directly open a file because we may want to 2936e8ead290Smrg# incorporate the script contents within a cygwin/mingw 2937e8ead290Smrg# wrapper executable. Must ONLY be called from within 2938e8ead290Smrg# func_mode_link because it depends on a number of variables 2939e8ead290Smrg# set therein. 2940e169010aSmrg# 2941e8ead290Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 2942e8ead290Smrg# variable will take. If 'yes', then the emitted script 2943e8ead290Smrg# will assume that the directory in which it is stored is 2944e8ead290Smrg# the $objdir directory. This is a cygwin/mingw-specific 2945e8ead290Smrg# behavior. 2946e8ead290Smrgfunc_emit_wrapper () 2947e169010aSmrg{ 2948e8ead290Smrg func_emit_wrapper_arg1=${1-no} 29497914d74bSmrg 2950e169010aSmrg $ECHO "\ 2951e169010aSmrg#! $SHELL 29527914d74bSmrg 2953e169010aSmrg# $output - temporary wrapper script for $objdir/$outputname 2954e169010aSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 2955e169010aSmrg# 2956e169010aSmrg# The $output program cannot be directly executed until all the libtool 2957e169010aSmrg# libraries that it depends on are installed. 2958e169010aSmrg# 2959e169010aSmrg# This wrapper script should never be moved out of the build directory. 2960e169010aSmrg# If it is, it will not operate correctly. 29617914d74bSmrg 2962e169010aSmrg# Sed substitution that helps us do robust quoting. It backslashifies 2963e169010aSmrg# metacharacters that are still active within double-quoted strings. 2964e169010aSmrgsed_quote_subst='$sed_quote_subst' 29657914d74bSmrg 2966e169010aSmrg# Be Bourne compatible 2967e169010aSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 2968e169010aSmrg emulate sh 2969e169010aSmrg NULLCMD=: 2970e169010aSmrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 2971e169010aSmrg # is contrary to our usage. Disable this feature. 2972e169010aSmrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 2973e169010aSmrg setopt NO_GLOB_SUBST 2974e169010aSmrgelse 2975e169010aSmrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 2976e169010aSmrgfi 2977e169010aSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 2978e169010aSmrgDUALCASE=1; export DUALCASE # for MKS sh 29797914d74bSmrg 2980e169010aSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout 2981e169010aSmrg# if CDPATH is set. 2982e169010aSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 29837914d74bSmrg 2984e169010aSmrgrelink_command=\"$relink_command\" 29857914d74bSmrg 2986e169010aSmrg# This environment variable determines our operation mode. 2987e169010aSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then 2988e169010aSmrg # install mode needs the following variables: 2989e169010aSmrg generated_by_libtool_version='$macro_version' 2990e169010aSmrg notinst_deplibs='$notinst_deplibs' 2991e169010aSmrgelse 2992e169010aSmrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 2993e169010aSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 2994e8ead290Smrg file=\"\$0\"" 2995e8ead290Smrg 2996e8ead290Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 2997e8ead290Smrg $ECHO "\ 2998e8ead290Smrg 2999e8ead290Smrg# A function that is used when there is no print builtin or printf. 3000e8ead290Smrgfunc_fallback_echo () 3001e8ead290Smrg{ 3002e8ead290Smrg eval 'cat <<_LTECHO_EOF 3003e8ead290Smrg\$1 3004e8ead290Smrg_LTECHO_EOF' 3005e8ead290Smrg} 3006e8ead290Smrg ECHO=\"$qECHO\" 3007e8ead290Smrg fi 3008e8ead290Smrg 3009e8ead290Smrg# Very basic option parsing. These options are (a) specific to 3010e8ead290Smrg# the libtool wrapper, (b) are identical between the wrapper 3011e8ead290Smrg# /script/ and the wrapper /executable/ which is used only on 3012e8ead290Smrg# windows platforms, and (c) all begin with the string "--lt-" 3013e8ead290Smrg# (application programs are unlikely to have options which match 3014e8ead290Smrg# this pattern). 3015e8ead290Smrg# 3016e8ead290Smrg# There are only two supported options: --lt-debug and 3017e8ead290Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 3018e8ead290Smrg# 3019e8ead290Smrg# The first argument to this parsing function should be the 3020e8ead290Smrg# script's $0 value, followed by "$@". 3021e8ead290Smrglt_option_debug= 3022e8ead290Smrgfunc_parse_lt_options () 3023e8ead290Smrg{ 3024e8ead290Smrg lt_script_arg0=\$0 3025e8ead290Smrg shift 3026e8ead290Smrg for lt_opt 3027e8ead290Smrg do 3028e8ead290Smrg case \"\$lt_opt\" in 3029e8ead290Smrg --lt-debug) lt_option_debug=1 ;; 3030e8ead290Smrg --lt-dump-script) 3031e8ead290Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 3032e8ead290Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 3033e8ead290Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 3034e8ead290Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 3035e8ead290Smrg exit 0 3036e8ead290Smrg ;; 3037e8ead290Smrg --lt-*) 3038e8ead290Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 3039e8ead290Smrg exit 1 3040e8ead290Smrg ;; 3041e8ead290Smrg esac 3042e8ead290Smrg done 3043e8ead290Smrg 3044e8ead290Smrg # Print the debug banner immediately: 3045e8ead290Smrg if test -n \"\$lt_option_debug\"; then 3046e8ead290Smrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 3047e8ead290Smrg fi 3048e8ead290Smrg} 3049e8ead290Smrg 3050e8ead290Smrg# Used when --lt-debug. Prints its arguments to stdout 3051e8ead290Smrg# (redirection is the responsibility of the caller) 3052e8ead290Smrgfunc_lt_dump_args () 3053e8ead290Smrg{ 3054e8ead290Smrg lt_dump_args_N=1; 3055e8ead290Smrg for lt_arg 3056e8ead290Smrg do 3057e8ead290Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 3058e8ead290Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 3059e8ead290Smrg done 3060e8ead290Smrg} 3061e8ead290Smrg 3062e8ead290Smrg# Core function for launching the target application 3063e8ead290Smrgfunc_exec_program_core () 3064e8ead290Smrg{ 3065e169010aSmrg" 3066e8ead290Smrg case $host in 3067e8ead290Smrg # Backslashes separate directories on plain windows 3068e8ead290Smrg *-*-mingw | *-*-os2* | *-cegcc*) 3069e8ead290Smrg $ECHO "\ 3070e8ead290Smrg if test -n \"\$lt_option_debug\"; then 3071e8ead290Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 3072e8ead290Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3073e8ead290Smrg fi 3074e8ead290Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 3075e8ead290Smrg" 3076e8ead290Smrg ;; 3077e8ead290Smrg 3078e8ead290Smrg *) 3079e8ead290Smrg $ECHO "\ 3080e8ead290Smrg if test -n \"\$lt_option_debug\"; then 3081e8ead290Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 3082e8ead290Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3083e8ead290Smrg fi 3084e8ead290Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 3085e8ead290Smrg" 3086e8ead290Smrg ;; 3087e8ead290Smrg esac 3088e8ead290Smrg $ECHO "\ 3089e8ead290Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 3090e8ead290Smrg exit 1 3091e8ead290Smrg} 3092e8ead290Smrg 3093e8ead290Smrg# A function to encapsulate launching the target application 3094e8ead290Smrg# Strips options in the --lt-* namespace from \$@ and 3095e8ead290Smrg# launches target application with the remaining arguments. 3096e8ead290Smrgfunc_exec_program () 3097e8ead290Smrg{ 3098e8ead290Smrg for lt_wr_arg 3099e8ead290Smrg do 3100e8ead290Smrg case \$lt_wr_arg in 3101e8ead290Smrg --lt-*) ;; 3102e8ead290Smrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 3103e8ead290Smrg esac 3104e8ead290Smrg shift 3105e8ead290Smrg done 3106e8ead290Smrg func_exec_program_core \${1+\"\$@\"} 3107e8ead290Smrg} 3108e8ead290Smrg 3109e8ead290Smrg # Parse options 3110e8ead290Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 31117914d74bSmrg 3112e169010aSmrg # Find the directory that this script lives in. 3113e8ead290Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 3114e169010aSmrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 31157914d74bSmrg 3116e169010aSmrg # Follow symbolic links until we get to the real thisdir. 3117e8ead290Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 3118e169010aSmrg while test -n \"\$file\"; do 3119e8ead290Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 31207914d74bSmrg 3121e169010aSmrg # If there was a directory component, then change thisdir. 3122e169010aSmrg if test \"x\$destdir\" != \"x\$file\"; then 3123e169010aSmrg case \"\$destdir\" in 3124e169010aSmrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 3125e169010aSmrg *) thisdir=\"\$thisdir/\$destdir\" ;; 3126e169010aSmrg esac 3127e169010aSmrg fi 31287914d74bSmrg 3129e8ead290Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 3130e8ead290Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 3131e169010aSmrg done 31327914d74bSmrg 3133e169010aSmrg # Usually 'no', except on cygwin/mingw when embedded into 3134e169010aSmrg # the cwrapper. 3135e8ead290Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 3136e169010aSmrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 3137e169010aSmrg # special case for '.' 3138e169010aSmrg if test \"\$thisdir\" = \".\"; then 3139e169010aSmrg thisdir=\`pwd\` 3140e169010aSmrg fi 3141e169010aSmrg # remove .libs from thisdir 3142e169010aSmrg case \"\$thisdir\" in 3143e8ead290Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 3144e169010aSmrg $objdir ) thisdir=. ;; 3145e169010aSmrg esac 3146e169010aSmrg fi 31477914d74bSmrg 3148e169010aSmrg # Try to get the absolute directory name. 3149e169010aSmrg absdir=\`cd \"\$thisdir\" && pwd\` 3150e169010aSmrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 3151e169010aSmrg" 31527914d74bSmrg 3153e169010aSmrg if test "$fast_install" = yes; then 3154e169010aSmrg $ECHO "\ 3155e169010aSmrg program=lt-'$outputname'$exeext 3156e169010aSmrg progdir=\"\$thisdir/$objdir\" 31577914d74bSmrg 3158e169010aSmrg if test ! -f \"\$progdir/\$program\" || 3159e169010aSmrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 3160e169010aSmrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 31617914d74bSmrg 3162e169010aSmrg file=\"\$\$-\$program\" 31637914d74bSmrg 3164e169010aSmrg if test ! -d \"\$progdir\"; then 3165e169010aSmrg $MKDIR \"\$progdir\" 3166e169010aSmrg else 3167e169010aSmrg $RM \"\$progdir/\$file\" 3168e169010aSmrg fi" 31697914d74bSmrg 3170e169010aSmrg $ECHO "\ 31717914d74bSmrg 3172e169010aSmrg # relink executable if necessary 3173e169010aSmrg if test -n \"\$relink_command\"; then 3174e169010aSmrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 3175e169010aSmrg else 3176e169010aSmrg $ECHO \"\$relink_command_output\" >&2 3177e169010aSmrg $RM \"\$progdir/\$file\" 3178e169010aSmrg exit 1 3179e169010aSmrg fi 3180e169010aSmrg fi 31817914d74bSmrg 3182e169010aSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 3183e169010aSmrg { $RM \"\$progdir/\$program\"; 3184e169010aSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 3185e169010aSmrg $RM \"\$progdir/\$file\" 3186e169010aSmrg fi" 3187e169010aSmrg else 3188e169010aSmrg $ECHO "\ 3189e169010aSmrg program='$outputname' 3190e169010aSmrg progdir=\"\$thisdir/$objdir\" 3191e169010aSmrg" 3192e169010aSmrg fi 31937914d74bSmrg 3194e169010aSmrg $ECHO "\ 31957914d74bSmrg 3196e169010aSmrg if test -f \"\$progdir/\$program\"; then" 31977914d74bSmrg 3198e169010aSmrg # Export our shlibpath_var if we have one. 3199e169010aSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 3200e169010aSmrg $ECHO "\ 3201e169010aSmrg # Add our own library path to $shlibpath_var 3202e169010aSmrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 32037914d74bSmrg 3204e169010aSmrg # Some systems cannot cope with colon-terminated $shlibpath_var 3205e169010aSmrg # The second colon is a workaround for a bug in BeOS R4 sed 3206e8ead290Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 32077914d74bSmrg 3208e169010aSmrg export $shlibpath_var 3209e169010aSmrg" 32107914d74bSmrg fi 32117914d74bSmrg 3212e169010aSmrg # fixup the dll searchpath if we need to. 3213e169010aSmrg if test -n "$dllsearchpath"; then 3214e169010aSmrg $ECHO "\ 3215e169010aSmrg # Add the dll search path components to the executable PATH 3216e169010aSmrg PATH=$dllsearchpath:\$PATH 3217e169010aSmrg" 32187914d74bSmrg fi 32197914d74bSmrg 3220e169010aSmrg $ECHO "\ 3221e169010aSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 3222e169010aSmrg # Run the actual program with our arguments. 3223e8ead290Smrg func_exec_program \${1+\"\$@\"} 3224e169010aSmrg fi 3225e169010aSmrg else 3226e169010aSmrg # The program doesn't exist. 3227e169010aSmrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 3228e169010aSmrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 3229e8ead290Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 3230e169010aSmrg exit 1 3231e169010aSmrg fi 3232e169010aSmrgfi\ 3233e169010aSmrg" 3234e169010aSmrg} 32357914d74bSmrg 32367914d74bSmrg 3237e169010aSmrg# func_to_host_path arg 3238e169010aSmrg# 3239e169010aSmrg# Convert paths to host format when used with build tools. 3240e169010aSmrg# Intended for use with "native" mingw (where libtool itself 3241e169010aSmrg# is running under the msys shell), or in the following cross- 3242e169010aSmrg# build environments: 3243e169010aSmrg# $build $host 3244e169010aSmrg# mingw (msys) mingw [e.g. native] 3245e169010aSmrg# cygwin mingw 3246e169010aSmrg# *nix + wine mingw 3247e169010aSmrg# where wine is equipped with the `winepath' executable. 3248e169010aSmrg# In the native mingw case, the (msys) shell automatically 3249e169010aSmrg# converts paths for any non-msys applications it launches, 3250e169010aSmrg# but that facility isn't available from inside the cwrapper. 3251e169010aSmrg# Similar accommodations are necessary for $host mingw and 3252e169010aSmrg# $build cygwin. Calling this function does no harm for other 3253e169010aSmrg# $host/$build combinations not listed above. 3254e169010aSmrg# 3255e169010aSmrg# ARG is the path (on $build) that should be converted to 3256e169010aSmrg# the proper representation for $host. The result is stored 3257e169010aSmrg# in $func_to_host_path_result. 3258e169010aSmrgfunc_to_host_path () 3259e169010aSmrg{ 3260e169010aSmrg func_to_host_path_result="$1" 3261e8ead290Smrg if test -n "$1"; then 3262e169010aSmrg case $host in 3263e169010aSmrg *mingw* ) 3264e169010aSmrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 3265e169010aSmrg case $build in 3266e169010aSmrg *mingw* ) # actually, msys 3267e169010aSmrg # awkward: cmd appends spaces to result 3268e8ead290Smrg func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null | 3269e8ead290Smrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 3270e169010aSmrg ;; 3271e169010aSmrg *cygwin* ) 3272e8ead290Smrg func_to_host_path_result=`cygpath -w "$1" | 3273e8ead290Smrg $SED -e "$lt_sed_naive_backslashify"` 3274e169010aSmrg ;; 3275e169010aSmrg * ) 3276e169010aSmrg # Unfortunately, winepath does not exit with a non-zero 3277e169010aSmrg # error code, so we are forced to check the contents of 3278e169010aSmrg # stdout. On the other hand, if the command is not 3279e169010aSmrg # found, the shell will set an exit code of 127 and print 3280e169010aSmrg # *an error message* to stdout. So we must check for both 3281e169010aSmrg # error code of zero AND non-empty stdout, which explains 3282e169010aSmrg # the odd construction: 3283e169010aSmrg func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` 3284e169010aSmrg if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then 3285e8ead290Smrg func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" | 3286e169010aSmrg $SED -e "$lt_sed_naive_backslashify"` 3287e169010aSmrg else 3288e169010aSmrg # Allow warning below. 3289e8ead290Smrg func_to_host_path_result= 3290e169010aSmrg fi 3291e169010aSmrg ;; 3292e169010aSmrg esac 3293e169010aSmrg if test -z "$func_to_host_path_result" ; then 3294e169010aSmrg func_error "Could not determine host path corresponding to" 3295e8ead290Smrg func_error " \`$1'" 3296e169010aSmrg func_error "Continuing, but uninstalled executables may not work." 3297e169010aSmrg # Fallback: 3298e169010aSmrg func_to_host_path_result="$1" 3299e169010aSmrg fi 3300e169010aSmrg ;; 3301e169010aSmrg esac 3302e169010aSmrg fi 3303e169010aSmrg} 3304e169010aSmrg# end: func_to_host_path 33057914d74bSmrg 3306e169010aSmrg# func_to_host_pathlist arg 3307e169010aSmrg# 3308e169010aSmrg# Convert pathlists to host format when used with build tools. 3309e169010aSmrg# See func_to_host_path(), above. This function supports the 3310e169010aSmrg# following $build/$host combinations (but does no harm for 3311e169010aSmrg# combinations not listed here): 3312e169010aSmrg# $build $host 3313e169010aSmrg# mingw (msys) mingw [e.g. native] 3314e169010aSmrg# cygwin mingw 3315e169010aSmrg# *nix + wine mingw 3316e169010aSmrg# 3317e169010aSmrg# Path separators are also converted from $build format to 3318e169010aSmrg# $host format. If ARG begins or ends with a path separator 3319e169010aSmrg# character, it is preserved (but converted to $host format) 3320e169010aSmrg# on output. 3321e169010aSmrg# 3322e169010aSmrg# ARG is a pathlist (on $build) that should be converted to 3323e169010aSmrg# the proper representation on $host. The result is stored 3324e169010aSmrg# in $func_to_host_pathlist_result. 3325e169010aSmrgfunc_to_host_pathlist () 3326e169010aSmrg{ 3327e169010aSmrg func_to_host_pathlist_result="$1" 3328e8ead290Smrg if test -n "$1"; then 3329e169010aSmrg case $host in 3330e169010aSmrg *mingw* ) 3331e169010aSmrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 3332e169010aSmrg # Remove leading and trailing path separator characters from 3333e169010aSmrg # ARG. msys behavior is inconsistent here, cygpath turns them 3334e169010aSmrg # into '.;' and ';.', and winepath ignores them completely. 3335e8ead290Smrg func_stripname : : "$1" 3336e8ead290Smrg func_to_host_pathlist_tmp1=$func_stripname_result 3337e169010aSmrg case $build in 3338e169010aSmrg *mingw* ) # Actually, msys. 3339e169010aSmrg # Awkward: cmd appends spaces to result. 3340e8ead290Smrg func_to_host_pathlist_result=` 3341e8ead290Smrg ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null | 3342e8ead290Smrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 3343e169010aSmrg ;; 3344e169010aSmrg *cygwin* ) 3345e8ead290Smrg func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" | 3346e169010aSmrg $SED -e "$lt_sed_naive_backslashify"` 3347e169010aSmrg ;; 3348e169010aSmrg * ) 3349e169010aSmrg # unfortunately, winepath doesn't convert pathlists 3350e169010aSmrg func_to_host_pathlist_result="" 3351e169010aSmrg func_to_host_pathlist_oldIFS=$IFS 3352e169010aSmrg IFS=: 3353e169010aSmrg for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do 3354e169010aSmrg IFS=$func_to_host_pathlist_oldIFS 3355e169010aSmrg if test -n "$func_to_host_pathlist_f" ; then 3356e169010aSmrg func_to_host_path "$func_to_host_pathlist_f" 3357e169010aSmrg if test -n "$func_to_host_path_result" ; then 3358e169010aSmrg if test -z "$func_to_host_pathlist_result" ; then 3359e169010aSmrg func_to_host_pathlist_result="$func_to_host_path_result" 3360e169010aSmrg else 3361e8ead290Smrg func_append func_to_host_pathlist_result ";$func_to_host_path_result" 3362e169010aSmrg fi 3363e169010aSmrg fi 3364e169010aSmrg fi 3365e169010aSmrg done 3366e169010aSmrg IFS=$func_to_host_pathlist_oldIFS 3367e169010aSmrg ;; 3368e169010aSmrg esac 3369e8ead290Smrg if test -z "$func_to_host_pathlist_result"; then 3370e169010aSmrg func_error "Could not determine the host path(s) corresponding to" 3371e8ead290Smrg func_error " \`$1'" 3372e169010aSmrg func_error "Continuing, but uninstalled executables may not work." 3373e169010aSmrg # Fallback. This may break if $1 contains DOS-style drive 3374e169010aSmrg # specifications. The fix is not to complicate the expression 3375e169010aSmrg # below, but for the user to provide a working wine installation 3376e169010aSmrg # with winepath so that path translation in the cross-to-mingw 3377e169010aSmrg # case works properly. 3378e169010aSmrg lt_replace_pathsep_nix_to_dos="s|:|;|g" 3379e169010aSmrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ 3380e169010aSmrg $SED -e "$lt_replace_pathsep_nix_to_dos"` 3381e169010aSmrg fi 3382e169010aSmrg # Now, add the leading and trailing path separators back 3383e169010aSmrg case "$1" in 3384e169010aSmrg :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" 3385e169010aSmrg ;; 3386e169010aSmrg esac 3387e169010aSmrg case "$1" in 3388e8ead290Smrg *: ) func_append func_to_host_pathlist_result ";" 3389e169010aSmrg ;; 3390e169010aSmrg esac 3391e169010aSmrg ;; 3392e169010aSmrg esac 3393e169010aSmrg fi 3394e169010aSmrg} 3395e169010aSmrg# end: func_to_host_pathlist 33967914d74bSmrg 3397e169010aSmrg# func_emit_cwrapperexe_src 3398e169010aSmrg# emit the source code for a wrapper executable on stdout 3399e169010aSmrg# Must ONLY be called from within func_mode_link because 3400e169010aSmrg# it depends on a number of variable set therein. 3401e169010aSmrgfunc_emit_cwrapperexe_src () 3402e169010aSmrg{ 3403e169010aSmrg cat <<EOF 34047914d74bSmrg 3405e169010aSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 3406e169010aSmrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 34077914d74bSmrg 3408e169010aSmrg The $output program cannot be directly executed until all the libtool 3409e169010aSmrg libraries that it depends on are installed. 34107914d74bSmrg 3411e169010aSmrg This wrapper executable should never be moved out of the build directory. 3412e169010aSmrg If it is, it will not operate correctly. 3413e169010aSmrg*/ 3414e169010aSmrgEOF 3415e169010aSmrg cat <<"EOF" 3416e8ead290Smrg#ifdef _MSC_VER 3417e8ead290Smrg# define _CRT_SECURE_NO_DEPRECATE 1 3418e8ead290Smrg#endif 3419e169010aSmrg#include <stdio.h> 3420e169010aSmrg#include <stdlib.h> 3421e169010aSmrg#ifdef _MSC_VER 3422e169010aSmrg# include <direct.h> 3423e169010aSmrg# include <process.h> 3424e169010aSmrg# include <io.h> 3425e169010aSmrg#else 3426e169010aSmrg# include <unistd.h> 3427e169010aSmrg# include <stdint.h> 3428e169010aSmrg# ifdef __CYGWIN__ 3429e169010aSmrg# include <io.h> 3430e169010aSmrg# endif 3431e169010aSmrg#endif 3432e169010aSmrg#include <malloc.h> 3433e169010aSmrg#include <stdarg.h> 3434e169010aSmrg#include <assert.h> 3435e169010aSmrg#include <string.h> 3436e169010aSmrg#include <ctype.h> 3437e169010aSmrg#include <errno.h> 3438e169010aSmrg#include <fcntl.h> 3439e169010aSmrg#include <sys/stat.h> 3440e169010aSmrg 3441e8ead290Smrg/* declarations of non-ANSI functions */ 3442e8ead290Smrg#if defined(__MINGW32__) 3443e8ead290Smrg# ifdef __STRICT_ANSI__ 3444e8ead290Smrgint _putenv (const char *); 3445e8ead290Smrg# endif 3446e8ead290Smrg#elif defined(__CYGWIN__) 3447e8ead290Smrg# ifdef __STRICT_ANSI__ 3448e8ead290Smrgchar *realpath (const char *, char *); 3449e8ead290Smrgint putenv (char *); 3450e8ead290Smrgint setenv (const char *, const char *, int); 3451e8ead290Smrg# endif 3452e8ead290Smrg/* #elif defined (other platforms) ... */ 3453e8ead290Smrg#endif 3454e8ead290Smrg 3455e8ead290Smrg/* portability defines, excluding path handling macros */ 3456e8ead290Smrg#if defined(_MSC_VER) 3457e8ead290Smrg# define setmode _setmode 3458e8ead290Smrg# define stat _stat 3459e8ead290Smrg# define chmod _chmod 3460e8ead290Smrg# define getcwd _getcwd 3461e8ead290Smrg# define putenv _putenv 3462e8ead290Smrg# define S_IXUSR _S_IEXEC 3463e8ead290Smrg# ifndef _INTPTR_T_DEFINED 3464e8ead290Smrg# define _INTPTR_T_DEFINED 3465e8ead290Smrg# define intptr_t int 3466e8ead290Smrg# endif 3467e8ead290Smrg#elif defined(__MINGW32__) 3468e8ead290Smrg# define setmode _setmode 3469e8ead290Smrg# define stat _stat 3470e8ead290Smrg# define chmod _chmod 3471e8ead290Smrg# define getcwd _getcwd 3472e8ead290Smrg# define putenv _putenv 3473e8ead290Smrg#elif defined(__CYGWIN__) 3474e8ead290Smrg# define HAVE_SETENV 3475e8ead290Smrg# define FOPEN_WB "wb" 3476e8ead290Smrg/* #elif defined (other platforms) ... */ 3477e8ead290Smrg#endif 3478e8ead290Smrg 3479e169010aSmrg#if defined(PATH_MAX) 3480e169010aSmrg# define LT_PATHMAX PATH_MAX 3481e169010aSmrg#elif defined(MAXPATHLEN) 3482e169010aSmrg# define LT_PATHMAX MAXPATHLEN 3483e169010aSmrg#else 3484e169010aSmrg# define LT_PATHMAX 1024 3485e169010aSmrg#endif 3486e169010aSmrg 3487e169010aSmrg#ifndef S_IXOTH 3488e169010aSmrg# define S_IXOTH 0 3489e169010aSmrg#endif 3490e169010aSmrg#ifndef S_IXGRP 3491e169010aSmrg# define S_IXGRP 0 3492e169010aSmrg#endif 3493e169010aSmrg 3494e8ead290Smrg/* path handling portability macros */ 3495e169010aSmrg#ifndef DIR_SEPARATOR 3496e169010aSmrg# define DIR_SEPARATOR '/' 3497e169010aSmrg# define PATH_SEPARATOR ':' 3498e169010aSmrg#endif 3499e169010aSmrg 3500e169010aSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 3501e169010aSmrg defined (__OS2__) 3502e169010aSmrg# define HAVE_DOS_BASED_FILE_SYSTEM 3503e169010aSmrg# define FOPEN_WB "wb" 3504e169010aSmrg# ifndef DIR_SEPARATOR_2 3505e169010aSmrg# define DIR_SEPARATOR_2 '\\' 3506e169010aSmrg# endif 3507e169010aSmrg# ifndef PATH_SEPARATOR_2 3508e169010aSmrg# define PATH_SEPARATOR_2 ';' 3509e169010aSmrg# endif 3510e169010aSmrg#endif 3511e169010aSmrg 3512e169010aSmrg#ifndef DIR_SEPARATOR_2 3513e169010aSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 3514e169010aSmrg#else /* DIR_SEPARATOR_2 */ 3515e169010aSmrg# define IS_DIR_SEPARATOR(ch) \ 3516e169010aSmrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 3517e169010aSmrg#endif /* DIR_SEPARATOR_2 */ 3518e169010aSmrg 3519e169010aSmrg#ifndef PATH_SEPARATOR_2 3520e169010aSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 3521e169010aSmrg#else /* PATH_SEPARATOR_2 */ 3522e169010aSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 3523e169010aSmrg#endif /* PATH_SEPARATOR_2 */ 3524e169010aSmrg 3525e169010aSmrg#ifndef FOPEN_WB 3526e169010aSmrg# define FOPEN_WB "w" 3527e169010aSmrg#endif 3528e169010aSmrg#ifndef _O_BINARY 3529e169010aSmrg# define _O_BINARY 0 3530e169010aSmrg#endif 3531e169010aSmrg 3532e169010aSmrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 3533e169010aSmrg#define XFREE(stale) do { \ 3534e169010aSmrg if (stale) { free ((void *) stale); stale = 0; } \ 3535e169010aSmrg} while (0) 3536e169010aSmrg 3537e8ead290Smrg#if defined(LT_DEBUGWRAPPER) 3538e8ead290Smrgstatic int lt_debug = 1; 3539e169010aSmrg#else 3540e8ead290Smrgstatic int lt_debug = 0; 3541e169010aSmrg#endif 3542e169010aSmrg 3543e8ead290Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 3544e169010aSmrg 3545e169010aSmrgvoid *xmalloc (size_t num); 3546e169010aSmrgchar *xstrdup (const char *string); 3547e169010aSmrgconst char *base_name (const char *name); 3548e169010aSmrgchar *find_executable (const char *wrapper); 3549e169010aSmrgchar *chase_symlinks (const char *pathspec); 3550e169010aSmrgint make_executable (const char *path); 3551e169010aSmrgint check_executable (const char *path); 3552e169010aSmrgchar *strendzap (char *str, const char *pat); 3553e8ead290Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 3554e8ead290Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 3555e8ead290Smrgstatic const char *nonnull (const char *s); 3556e8ead290Smrgstatic const char *nonempty (const char *s); 3557e169010aSmrgvoid lt_setenv (const char *name, const char *value); 3558e169010aSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 3559e169010aSmrgvoid lt_update_exe_path (const char *name, const char *value); 3560e169010aSmrgvoid lt_update_lib_path (const char *name, const char *value); 3561e8ead290Smrgchar **prepare_spawn (char **argv); 3562e8ead290Smrgvoid lt_dump_script (FILE *f); 3563e169010aSmrgEOF 3564e169010aSmrg 3565e169010aSmrg cat <<EOF 3566e169010aSmrgconst char * MAGIC_EXE = "$magic_exe"; 3567e169010aSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 3568e169010aSmrgEOF 3569e169010aSmrg 3570e169010aSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 3571e169010aSmrg func_to_host_pathlist "$temp_rpath" 3572e169010aSmrg cat <<EOF 3573e169010aSmrgconst char * LIB_PATH_VALUE = "$func_to_host_pathlist_result"; 35747914d74bSmrgEOF 35757914d74bSmrg else 3576e169010aSmrg cat <<"EOF" 3577e169010aSmrgconst char * LIB_PATH_VALUE = ""; 3578e169010aSmrgEOF 35797914d74bSmrg fi 3580e169010aSmrg 3581e169010aSmrg if test -n "$dllsearchpath"; then 3582e169010aSmrg func_to_host_pathlist "$dllsearchpath:" 3583e169010aSmrg cat <<EOF 3584e169010aSmrgconst char * EXE_PATH_VARNAME = "PATH"; 3585e169010aSmrgconst char * EXE_PATH_VALUE = "$func_to_host_pathlist_result"; 3586e169010aSmrgEOF 35877914d74bSmrg else 3588e169010aSmrg cat <<"EOF" 3589e169010aSmrgconst char * EXE_PATH_VARNAME = ""; 3590e169010aSmrgconst char * EXE_PATH_VALUE = ""; 3591e169010aSmrgEOF 35927914d74bSmrg fi 3593e169010aSmrg 3594e169010aSmrg if test "$fast_install" = yes; then 3595e169010aSmrg cat <<EOF 3596e169010aSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 3597e169010aSmrgEOF 35987914d74bSmrg else 3599e169010aSmrg cat <<EOF 3600e169010aSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 3601e169010aSmrgEOF 36027914d74bSmrg fi 36037914d74bSmrg 36047914d74bSmrg 3605e169010aSmrg cat <<"EOF" 36067914d74bSmrg 3607e169010aSmrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 36087914d74bSmrg 3609e169010aSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 3610e169010aSmrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 3611e8ead290Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 36127914d74bSmrg 3613e169010aSmrgint 3614e169010aSmrgmain (int argc, char *argv[]) 3615e169010aSmrg{ 3616e169010aSmrg char **newargz; 3617e169010aSmrg int newargc; 3618e169010aSmrg char *tmp_pathspec; 3619e169010aSmrg char *actual_cwrapper_path; 3620e169010aSmrg char *actual_cwrapper_name; 3621e169010aSmrg char *target_name; 3622e169010aSmrg char *lt_argv_zero; 3623e169010aSmrg intptr_t rval = 127; 36247914d74bSmrg 3625e169010aSmrg int i; 36267914d74bSmrg 3627e169010aSmrg program_name = (char *) xstrdup (base_name (argv[0])); 3628e8ead290Smrg newargz = XMALLOC (char *, argc + 1); 36297914d74bSmrg 3630e8ead290Smrg /* very simple arg parsing; don't want to rely on getopt 3631e8ead290Smrg * also, copy all non cwrapper options to newargz, except 3632e8ead290Smrg * argz[0], which is handled differently 3633e8ead290Smrg */ 3634e8ead290Smrg newargc=0; 3635e169010aSmrg for (i = 1; i < argc; i++) 3636e169010aSmrg { 3637e169010aSmrg if (strcmp (argv[i], dumpscript_opt) == 0) 3638e169010aSmrg { 3639e169010aSmrgEOF 3640e169010aSmrg case "$host" in 3641e169010aSmrg *mingw* | *cygwin* ) 3642e169010aSmrg # make stdout use "unix" line endings 3643e169010aSmrg echo " setmode(1,_O_BINARY);" 3644e169010aSmrg ;; 3645e169010aSmrg esac 36467914d74bSmrg 3647e169010aSmrg cat <<"EOF" 3648e8ead290Smrg lt_dump_script (stdout); 3649e169010aSmrg return 0; 3650e169010aSmrg } 3651e8ead290Smrg if (strcmp (argv[i], debug_opt) == 0) 3652e8ead290Smrg { 3653e8ead290Smrg lt_debug = 1; 3654e8ead290Smrg continue; 3655e8ead290Smrg } 3656e8ead290Smrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 3657e8ead290Smrg { 3658e8ead290Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 3659e8ead290Smrg namespace, but it is not one of the ones we know about and 3660e8ead290Smrg have already dealt with, above (inluding dump-script), then 3661e8ead290Smrg report an error. Otherwise, targets might begin to believe 3662e8ead290Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 3663e8ead290Smrg namespace. The first time any user complains about this, we'll 3664e8ead290Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 3665e8ead290Smrg or a configure.ac-settable value. 3666e8ead290Smrg */ 3667e8ead290Smrg lt_fatal (__FILE__, __LINE__, 3668e8ead290Smrg "unrecognized %s option: '%s'", 3669e8ead290Smrg ltwrapper_option_prefix, argv[i]); 3670e8ead290Smrg } 3671e8ead290Smrg /* otherwise ... */ 3672e8ead290Smrg newargz[++newargc] = xstrdup (argv[i]); 3673e169010aSmrg } 3674e8ead290Smrg newargz[++newargc] = NULL; 3675e8ead290Smrg 3676e8ead290SmrgEOF 3677e8ead290Smrg cat <<EOF 3678e8ead290Smrg /* The GNU banner must be the first non-error debug message */ 3679e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 3680e8ead290SmrgEOF 3681e8ead290Smrg cat <<"EOF" 3682e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 3683e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 36847914d74bSmrg 3685e169010aSmrg tmp_pathspec = find_executable (argv[0]); 3686e169010aSmrg if (tmp_pathspec == NULL) 3687e8ead290Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 3688e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, 3689e8ead290Smrg "(main) found exe (before symlink chase) at: %s\n", 3690e8ead290Smrg tmp_pathspec); 3691e169010aSmrg 3692e169010aSmrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 3693e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, 3694e8ead290Smrg "(main) found exe (after symlink chase) at: %s\n", 3695e8ead290Smrg actual_cwrapper_path); 3696e169010aSmrg XFREE (tmp_pathspec); 3697e169010aSmrg 3698e8ead290Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 3699e169010aSmrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 3700e169010aSmrg 3701e169010aSmrg /* wrapper name transforms */ 3702e169010aSmrg strendzap (actual_cwrapper_name, ".exe"); 3703e169010aSmrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 3704e169010aSmrg XFREE (actual_cwrapper_name); 3705e169010aSmrg actual_cwrapper_name = tmp_pathspec; 3706e169010aSmrg tmp_pathspec = 0; 3707e169010aSmrg 3708e169010aSmrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 3709e169010aSmrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 3710e169010aSmrg strendzap (target_name, ".exe"); 3711e169010aSmrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 3712e169010aSmrg XFREE (target_name); 3713e169010aSmrg target_name = tmp_pathspec; 3714e169010aSmrg tmp_pathspec = 0; 3715e169010aSmrg 3716e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, 3717e8ead290Smrg "(main) libtool target name: %s\n", 3718e8ead290Smrg target_name); 3719e169010aSmrgEOF 37207914d74bSmrg 3721e169010aSmrg cat <<EOF 3722e169010aSmrg newargz[0] = 3723e169010aSmrg XMALLOC (char, (strlen (actual_cwrapper_path) + 3724e169010aSmrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 3725e169010aSmrg strcpy (newargz[0], actual_cwrapper_path); 3726e169010aSmrg strcat (newargz[0], "$objdir"); 3727e169010aSmrg strcat (newargz[0], "/"); 3728e169010aSmrgEOF 37297914d74bSmrg 3730e169010aSmrg cat <<"EOF" 3731e169010aSmrg /* stop here, and copy so we don't have to do this twice */ 3732e169010aSmrg tmp_pathspec = xstrdup (newargz[0]); 37337914d74bSmrg 3734e169010aSmrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 3735e169010aSmrg strcat (newargz[0], actual_cwrapper_name); 37367914d74bSmrg 3737e169010aSmrg /* DO want the lt- prefix here if it exists, so use target_name */ 3738e169010aSmrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 3739e169010aSmrg XFREE (tmp_pathspec); 3740e169010aSmrg tmp_pathspec = NULL; 3741e169010aSmrgEOF 37427914d74bSmrg 3743e169010aSmrg case $host_os in 3744e169010aSmrg mingw*) 3745e169010aSmrg cat <<"EOF" 3746e169010aSmrg { 3747e169010aSmrg char* p; 3748e169010aSmrg while ((p = strchr (newargz[0], '\\')) != NULL) 3749e169010aSmrg { 3750e169010aSmrg *p = '/'; 3751e169010aSmrg } 3752e169010aSmrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 3753e169010aSmrg { 3754e169010aSmrg *p = '/'; 3755e169010aSmrg } 3756e169010aSmrg } 3757e169010aSmrgEOF 3758e169010aSmrg ;; 3759e169010aSmrg esac 37607914d74bSmrg 3761e169010aSmrg cat <<"EOF" 3762e169010aSmrg XFREE (target_name); 3763e169010aSmrg XFREE (actual_cwrapper_path); 3764e169010aSmrg XFREE (actual_cwrapper_name); 37657914d74bSmrg 3766e169010aSmrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 3767e169010aSmrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 3768e169010aSmrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 3769e169010aSmrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 37707914d74bSmrg 3771e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 3772e8ead290Smrg nonnull (lt_argv_zero)); 3773e169010aSmrg for (i = 0; i < newargc; i++) 3774e169010aSmrg { 3775e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 3776e8ead290Smrg i, nonnull (newargz[i])); 3777e169010aSmrg } 37787914d74bSmrg 3779e169010aSmrgEOF 37807914d74bSmrg 3781e169010aSmrg case $host_os in 3782e169010aSmrg mingw*) 3783e169010aSmrg cat <<"EOF" 3784e169010aSmrg /* execv doesn't actually work on mingw as expected on unix */ 3785e8ead290Smrg newargz = prepare_spawn (newargz); 3786e169010aSmrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 3787e169010aSmrg if (rval == -1) 3788e169010aSmrg { 3789e169010aSmrg /* failed to start process */ 3790e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, 3791e8ead290Smrg "(main) failed to launch target \"%s\": %s\n", 3792e8ead290Smrg lt_argv_zero, nonnull (strerror (errno))); 3793e169010aSmrg return 127; 3794e169010aSmrg } 3795e169010aSmrg return rval; 3796e169010aSmrgEOF 3797e169010aSmrg ;; 3798e169010aSmrg *) 3799e169010aSmrg cat <<"EOF" 3800e169010aSmrg execv (lt_argv_zero, newargz); 3801e169010aSmrg return rval; /* =127, but avoids unused variable warning */ 3802e169010aSmrgEOF 3803e169010aSmrg ;; 3804e169010aSmrg esac 38057914d74bSmrg 3806e169010aSmrg cat <<"EOF" 3807e169010aSmrg} 38087914d74bSmrg 3809e169010aSmrgvoid * 3810e169010aSmrgxmalloc (size_t num) 3811e169010aSmrg{ 3812e169010aSmrg void *p = (void *) malloc (num); 3813e169010aSmrg if (!p) 3814e8ead290Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 38157914d74bSmrg 3816e169010aSmrg return p; 3817e169010aSmrg} 38187914d74bSmrg 3819e169010aSmrgchar * 3820e169010aSmrgxstrdup (const char *string) 3821e169010aSmrg{ 3822e169010aSmrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 3823e169010aSmrg string) : NULL; 3824e169010aSmrg} 38257914d74bSmrg 3826e169010aSmrgconst char * 3827e169010aSmrgbase_name (const char *name) 3828e169010aSmrg{ 3829e169010aSmrg const char *base; 38307914d74bSmrg 3831e169010aSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3832e169010aSmrg /* Skip over the disk name in MSDOS pathnames. */ 3833e169010aSmrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 3834e169010aSmrg name += 2; 3835e169010aSmrg#endif 38367914d74bSmrg 3837e169010aSmrg for (base = name; *name; name++) 3838e169010aSmrg if (IS_DIR_SEPARATOR (*name)) 3839e169010aSmrg base = name + 1; 3840e169010aSmrg return base; 3841e169010aSmrg} 38427914d74bSmrg 3843e169010aSmrgint 3844e169010aSmrgcheck_executable (const char *path) 3845e169010aSmrg{ 3846e169010aSmrg struct stat st; 38477914d74bSmrg 3848e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 3849e8ead290Smrg nonempty (path)); 3850e169010aSmrg if ((!path) || (!*path)) 3851e169010aSmrg return 0; 38527914d74bSmrg 3853e169010aSmrg if ((stat (path, &st) >= 0) 3854e169010aSmrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 3855e169010aSmrg return 1; 3856e169010aSmrg else 3857e169010aSmrg return 0; 3858e169010aSmrg} 38597914d74bSmrg 3860e169010aSmrgint 3861e169010aSmrgmake_executable (const char *path) 3862e169010aSmrg{ 3863e169010aSmrg int rval = 0; 3864e169010aSmrg struct stat st; 38657914d74bSmrg 3866e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 3867e8ead290Smrg nonempty (path)); 3868e169010aSmrg if ((!path) || (!*path)) 3869e169010aSmrg return 0; 38707914d74bSmrg 3871e169010aSmrg if (stat (path, &st) >= 0) 3872e169010aSmrg { 3873e169010aSmrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 3874e169010aSmrg } 3875e169010aSmrg return rval; 3876e169010aSmrg} 38777914d74bSmrg 3878e169010aSmrg/* Searches for the full path of the wrapper. Returns 3879e169010aSmrg newly allocated full path name if found, NULL otherwise 3880e169010aSmrg Does not chase symlinks, even on platforms that support them. 3881e169010aSmrg*/ 3882e169010aSmrgchar * 3883e169010aSmrgfind_executable (const char *wrapper) 3884e169010aSmrg{ 3885e169010aSmrg int has_slash = 0; 3886e169010aSmrg const char *p; 3887e169010aSmrg const char *p_next; 3888e169010aSmrg /* static buffer for getcwd */ 3889e169010aSmrg char tmp[LT_PATHMAX + 1]; 3890e169010aSmrg int tmp_len; 3891e169010aSmrg char *concat_name; 38927914d74bSmrg 3893e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 3894e8ead290Smrg nonempty (wrapper)); 38957914d74bSmrg 3896e169010aSmrg if ((wrapper == NULL) || (*wrapper == '\0')) 3897e169010aSmrg return NULL; 38987914d74bSmrg 3899e169010aSmrg /* Absolute path? */ 3900e169010aSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3901e169010aSmrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 3902e169010aSmrg { 3903e169010aSmrg concat_name = xstrdup (wrapper); 3904e169010aSmrg if (check_executable (concat_name)) 3905e169010aSmrg return concat_name; 3906e169010aSmrg XFREE (concat_name); 3907e169010aSmrg } 3908e169010aSmrg else 3909e169010aSmrg { 3910e169010aSmrg#endif 3911e169010aSmrg if (IS_DIR_SEPARATOR (wrapper[0])) 3912e169010aSmrg { 3913e169010aSmrg concat_name = xstrdup (wrapper); 3914e169010aSmrg if (check_executable (concat_name)) 3915e169010aSmrg return concat_name; 3916e169010aSmrg XFREE (concat_name); 3917e169010aSmrg } 3918e169010aSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 3919e169010aSmrg } 3920e169010aSmrg#endif 39217914d74bSmrg 3922e169010aSmrg for (p = wrapper; *p; p++) 3923e169010aSmrg if (*p == '/') 3924e169010aSmrg { 3925e169010aSmrg has_slash = 1; 3926e169010aSmrg break; 3927e169010aSmrg } 3928e169010aSmrg if (!has_slash) 3929e169010aSmrg { 3930e169010aSmrg /* no slashes; search PATH */ 3931e169010aSmrg const char *path = getenv ("PATH"); 3932e169010aSmrg if (path != NULL) 3933e169010aSmrg { 3934e169010aSmrg for (p = path; *p; p = p_next) 3935e169010aSmrg { 3936e169010aSmrg const char *q; 3937e169010aSmrg size_t p_len; 3938e169010aSmrg for (q = p; *q; q++) 3939e169010aSmrg if (IS_PATH_SEPARATOR (*q)) 3940e169010aSmrg break; 3941e169010aSmrg p_len = q - p; 3942e169010aSmrg p_next = (*q == '\0' ? q : q + 1); 3943e169010aSmrg if (p_len == 0) 3944e169010aSmrg { 3945e169010aSmrg /* empty path: current directory */ 3946e169010aSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 3947e8ead290Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 3948e8ead290Smrg nonnull (strerror (errno))); 3949e169010aSmrg tmp_len = strlen (tmp); 3950e169010aSmrg concat_name = 3951e169010aSmrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 3952e169010aSmrg memcpy (concat_name, tmp, tmp_len); 3953e169010aSmrg concat_name[tmp_len] = '/'; 3954e169010aSmrg strcpy (concat_name + tmp_len + 1, wrapper); 3955e169010aSmrg } 3956e169010aSmrg else 3957e169010aSmrg { 3958e169010aSmrg concat_name = 3959e169010aSmrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 3960e169010aSmrg memcpy (concat_name, p, p_len); 3961e169010aSmrg concat_name[p_len] = '/'; 3962e169010aSmrg strcpy (concat_name + p_len + 1, wrapper); 3963e169010aSmrg } 3964e169010aSmrg if (check_executable (concat_name)) 3965e169010aSmrg return concat_name; 3966e169010aSmrg XFREE (concat_name); 3967e169010aSmrg } 3968e169010aSmrg } 3969e169010aSmrg /* not found in PATH; assume curdir */ 3970e169010aSmrg } 3971e169010aSmrg /* Relative path | not found in path: prepend cwd */ 3972e169010aSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 3973e8ead290Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 3974e8ead290Smrg nonnull (strerror (errno))); 3975e169010aSmrg tmp_len = strlen (tmp); 3976e169010aSmrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 3977e169010aSmrg memcpy (concat_name, tmp, tmp_len); 3978e169010aSmrg concat_name[tmp_len] = '/'; 3979e169010aSmrg strcpy (concat_name + tmp_len + 1, wrapper); 39807914d74bSmrg 3981e169010aSmrg if (check_executable (concat_name)) 3982e169010aSmrg return concat_name; 3983e169010aSmrg XFREE (concat_name); 3984e169010aSmrg return NULL; 3985e169010aSmrg} 39867914d74bSmrg 3987e169010aSmrgchar * 3988e169010aSmrgchase_symlinks (const char *pathspec) 3989e169010aSmrg{ 3990e169010aSmrg#ifndef S_ISLNK 3991e169010aSmrg return xstrdup (pathspec); 3992e169010aSmrg#else 3993e169010aSmrg char buf[LT_PATHMAX]; 3994e169010aSmrg struct stat s; 3995e169010aSmrg char *tmp_pathspec = xstrdup (pathspec); 3996e169010aSmrg char *p; 3997e169010aSmrg int has_symlinks = 0; 3998e169010aSmrg while (strlen (tmp_pathspec) && !has_symlinks) 3999e169010aSmrg { 4000e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, 4001e8ead290Smrg "checking path component for symlinks: %s\n", 4002e8ead290Smrg tmp_pathspec); 4003e169010aSmrg if (lstat (tmp_pathspec, &s) == 0) 4004e169010aSmrg { 4005e169010aSmrg if (S_ISLNK (s.st_mode) != 0) 4006e169010aSmrg { 4007e169010aSmrg has_symlinks = 1; 4008e169010aSmrg break; 4009e169010aSmrg } 40107914d74bSmrg 4011e169010aSmrg /* search backwards for last DIR_SEPARATOR */ 4012e169010aSmrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4013e169010aSmrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4014e169010aSmrg p--; 4015e169010aSmrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4016e169010aSmrg { 4017e169010aSmrg /* no more DIR_SEPARATORS left */ 4018e169010aSmrg break; 4019e169010aSmrg } 4020e169010aSmrg *p = '\0'; 4021e169010aSmrg } 4022e169010aSmrg else 4023e169010aSmrg { 4024e8ead290Smrg lt_fatal (__FILE__, __LINE__, 4025e8ead290Smrg "error accessing file \"%s\": %s", 4026e8ead290Smrg tmp_pathspec, nonnull (strerror (errno))); 4027e169010aSmrg } 4028e169010aSmrg } 4029e169010aSmrg XFREE (tmp_pathspec); 40307914d74bSmrg 4031e169010aSmrg if (!has_symlinks) 4032e169010aSmrg { 4033e169010aSmrg return xstrdup (pathspec); 4034e169010aSmrg } 40357914d74bSmrg 4036e169010aSmrg tmp_pathspec = realpath (pathspec, buf); 4037e169010aSmrg if (tmp_pathspec == 0) 4038e169010aSmrg { 4039e8ead290Smrg lt_fatal (__FILE__, __LINE__, 4040e8ead290Smrg "could not follow symlinks for %s", pathspec); 4041e169010aSmrg } 4042e169010aSmrg return xstrdup (tmp_pathspec); 4043e169010aSmrg#endif 4044e169010aSmrg} 40457914d74bSmrg 4046e169010aSmrgchar * 4047e169010aSmrgstrendzap (char *str, const char *pat) 4048e169010aSmrg{ 4049e169010aSmrg size_t len, patlen; 40507914d74bSmrg 4051e169010aSmrg assert (str != NULL); 4052e169010aSmrg assert (pat != NULL); 40537914d74bSmrg 4054e169010aSmrg len = strlen (str); 4055e169010aSmrg patlen = strlen (pat); 40567914d74bSmrg 4057e169010aSmrg if (patlen <= len) 4058e169010aSmrg { 4059e169010aSmrg str += len - patlen; 4060e169010aSmrg if (strcmp (str, pat) == 0) 4061e169010aSmrg *str = '\0'; 4062e169010aSmrg } 4063e169010aSmrg return str; 4064e169010aSmrg} 40657914d74bSmrg 4066e8ead290Smrgvoid 4067e8ead290Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 4068e8ead290Smrg{ 4069e8ead290Smrg va_list args; 4070e8ead290Smrg if (lt_debug) 4071e8ead290Smrg { 4072e8ead290Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 4073e8ead290Smrg va_start (args, fmt); 4074e8ead290Smrg (void) vfprintf (stderr, fmt, args); 4075e8ead290Smrg va_end (args); 4076e8ead290Smrg } 4077e8ead290Smrg} 4078e8ead290Smrg 4079e169010aSmrgstatic void 4080e8ead290Smrglt_error_core (int exit_status, const char *file, 4081e8ead290Smrg int line, const char *mode, 4082e169010aSmrg const char *message, va_list ap) 4083e169010aSmrg{ 4084e8ead290Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4085e169010aSmrg vfprintf (stderr, message, ap); 4086e169010aSmrg fprintf (stderr, ".\n"); 40877914d74bSmrg 4088e169010aSmrg if (exit_status >= 0) 4089e169010aSmrg exit (exit_status); 4090e169010aSmrg} 40917914d74bSmrg 4092e169010aSmrgvoid 4093e8ead290Smrglt_fatal (const char *file, int line, const char *message, ...) 4094e169010aSmrg{ 4095e169010aSmrg va_list ap; 4096e169010aSmrg va_start (ap, message); 4097e8ead290Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4098e169010aSmrg va_end (ap); 4099e169010aSmrg} 41007914d74bSmrg 4101e8ead290Smrgstatic const char * 4102e8ead290Smrgnonnull (const char *s) 4103e8ead290Smrg{ 4104e8ead290Smrg return s ? s : "(null)"; 4105e8ead290Smrg} 4106e8ead290Smrg 4107e8ead290Smrgstatic const char * 4108e8ead290Smrgnonempty (const char *s) 4109e8ead290Smrg{ 4110e8ead290Smrg return (s && !*s) ? "(empty)" : nonnull (s); 4111e8ead290Smrg} 4112e8ead290Smrg 4113e169010aSmrgvoid 4114e169010aSmrglt_setenv (const char *name, const char *value) 4115e169010aSmrg{ 4116e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, 4117e8ead290Smrg "(lt_setenv) setting '%s' to '%s'\n", 4118e8ead290Smrg nonnull (name), nonnull (value)); 4119e169010aSmrg { 4120e169010aSmrg#ifdef HAVE_SETENV 4121e169010aSmrg /* always make a copy, for consistency with !HAVE_SETENV */ 4122e169010aSmrg char *str = xstrdup (value); 4123e169010aSmrg setenv (name, str, 1); 4124e169010aSmrg#else 4125e169010aSmrg int len = strlen (name) + 1 + strlen (value) + 1; 4126e169010aSmrg char *str = XMALLOC (char, len); 4127e169010aSmrg sprintf (str, "%s=%s", name, value); 4128e169010aSmrg if (putenv (str) != EXIT_SUCCESS) 4129e169010aSmrg { 4130e169010aSmrg XFREE (str); 4131e169010aSmrg } 4132e169010aSmrg#endif 4133e169010aSmrg } 4134e169010aSmrg} 41357914d74bSmrg 4136e169010aSmrgchar * 4137e169010aSmrglt_extend_str (const char *orig_value, const char *add, int to_end) 4138e169010aSmrg{ 4139e169010aSmrg char *new_value; 4140e169010aSmrg if (orig_value && *orig_value) 4141e169010aSmrg { 4142e169010aSmrg int orig_value_len = strlen (orig_value); 4143e169010aSmrg int add_len = strlen (add); 4144e169010aSmrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 4145e169010aSmrg if (to_end) 4146e169010aSmrg { 4147e169010aSmrg strcpy (new_value, orig_value); 4148e169010aSmrg strcpy (new_value + orig_value_len, add); 4149e169010aSmrg } 4150e169010aSmrg else 4151e169010aSmrg { 4152e169010aSmrg strcpy (new_value, add); 4153e169010aSmrg strcpy (new_value + add_len, orig_value); 4154e169010aSmrg } 4155e169010aSmrg } 4156e169010aSmrg else 4157e169010aSmrg { 4158e169010aSmrg new_value = xstrdup (add); 4159e169010aSmrg } 4160e169010aSmrg return new_value; 4161e169010aSmrg} 41627914d74bSmrg 4163e169010aSmrgvoid 4164e169010aSmrglt_update_exe_path (const char *name, const char *value) 4165e169010aSmrg{ 4166e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, 4167e8ead290Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 4168e8ead290Smrg nonnull (name), nonnull (value)); 41697914d74bSmrg 4170e169010aSmrg if (name && *name && value && *value) 4171e169010aSmrg { 4172e169010aSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 4173e169010aSmrg /* some systems can't cope with a ':'-terminated path #' */ 4174e169010aSmrg int len = strlen (new_value); 4175e169010aSmrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4176e169010aSmrg { 4177e169010aSmrg new_value[len-1] = '\0'; 4178e169010aSmrg } 4179e169010aSmrg lt_setenv (name, new_value); 4180e169010aSmrg XFREE (new_value); 4181e169010aSmrg } 4182e169010aSmrg} 41837914d74bSmrg 4184e169010aSmrgvoid 4185e169010aSmrglt_update_lib_path (const char *name, const char *value) 4186e169010aSmrg{ 4187e8ead290Smrg lt_debugprintf (__FILE__, __LINE__, 4188e8ead290Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 4189e8ead290Smrg nonnull (name), nonnull (value)); 41907914d74bSmrg 4191e169010aSmrg if (name && *name && value && *value) 4192e169010aSmrg { 4193e169010aSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 4194e169010aSmrg lt_setenv (name, new_value); 4195e169010aSmrg XFREE (new_value); 4196e169010aSmrg } 4197e169010aSmrg} 41987914d74bSmrg 4199e8ead290SmrgEOF 4200e8ead290Smrg case $host_os in 4201e8ead290Smrg mingw*) 4202e8ead290Smrg cat <<"EOF" 4203e8ead290Smrg 4204e8ead290Smrg/* Prepares an argument vector before calling spawn(). 4205e8ead290Smrg Note that spawn() does not by itself call the command interpreter 4206e8ead290Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 4207e8ead290Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 4208e8ead290Smrg GetVersionEx(&v); 4209e8ead290Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 4210e8ead290Smrg }) ? "cmd.exe" : "command.com"). 4211e8ead290Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 4212e8ead290Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 4213e8ead290Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 4214e8ead290Smrg special way: 4215e8ead290Smrg - Space and tab are interpreted as delimiters. They are not treated as 4216e8ead290Smrg delimiters if they are surrounded by double quotes: "...". 4217e8ead290Smrg - Unescaped double quotes are removed from the input. Their only effect is 4218e8ead290Smrg that within double quotes, space and tab are treated like normal 4219e8ead290Smrg characters. 4220e8ead290Smrg - Backslashes not followed by double quotes are not special. 4221e8ead290Smrg - But 2*n+1 backslashes followed by a double quote become 4222e8ead290Smrg n backslashes followed by a double quote (n >= 0): 4223e8ead290Smrg \" -> " 4224e8ead290Smrg \\\" -> \" 4225e8ead290Smrg \\\\\" -> \\" 4226e8ead290Smrg */ 4227e8ead290Smrg#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" 4228e8ead290Smrg#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" 4229e8ead290Smrgchar ** 4230e8ead290Smrgprepare_spawn (char **argv) 4231e8ead290Smrg{ 4232e8ead290Smrg size_t argc; 4233e8ead290Smrg char **new_argv; 4234e8ead290Smrg size_t i; 4235e8ead290Smrg 4236e8ead290Smrg /* Count number of arguments. */ 4237e8ead290Smrg for (argc = 0; argv[argc] != NULL; argc++) 4238e8ead290Smrg ; 4239e8ead290Smrg 4240e8ead290Smrg /* Allocate new argument vector. */ 4241e8ead290Smrg new_argv = XMALLOC (char *, argc + 1); 4242e8ead290Smrg 4243e8ead290Smrg /* Put quoted arguments into the new argument vector. */ 4244e8ead290Smrg for (i = 0; i < argc; i++) 4245e8ead290Smrg { 4246e8ead290Smrg const char *string = argv[i]; 4247e8ead290Smrg 4248e8ead290Smrg if (string[0] == '\0') 4249e8ead290Smrg new_argv[i] = xstrdup ("\"\""); 4250e8ead290Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 4251e8ead290Smrg { 4252e8ead290Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 4253e8ead290Smrg size_t length; 4254e8ead290Smrg unsigned int backslashes; 4255e8ead290Smrg const char *s; 4256e8ead290Smrg char *quoted_string; 4257e8ead290Smrg char *p; 4258e8ead290Smrg 4259e8ead290Smrg length = 0; 4260e8ead290Smrg backslashes = 0; 4261e8ead290Smrg if (quote_around) 4262e8ead290Smrg length++; 4263e8ead290Smrg for (s = string; *s != '\0'; s++) 4264e8ead290Smrg { 4265e8ead290Smrg char c = *s; 4266e8ead290Smrg if (c == '"') 4267e8ead290Smrg length += backslashes + 1; 4268e8ead290Smrg length++; 4269e8ead290Smrg if (c == '\\') 4270e8ead290Smrg backslashes++; 4271e8ead290Smrg else 4272e8ead290Smrg backslashes = 0; 4273e8ead290Smrg } 4274e8ead290Smrg if (quote_around) 4275e8ead290Smrg length += backslashes + 1; 4276e8ead290Smrg 4277e8ead290Smrg quoted_string = XMALLOC (char, length + 1); 4278e8ead290Smrg 4279e8ead290Smrg p = quoted_string; 4280e8ead290Smrg backslashes = 0; 4281e8ead290Smrg if (quote_around) 4282e8ead290Smrg *p++ = '"'; 4283e8ead290Smrg for (s = string; *s != '\0'; s++) 4284e8ead290Smrg { 4285e8ead290Smrg char c = *s; 4286e8ead290Smrg if (c == '"') 4287e8ead290Smrg { 4288e8ead290Smrg unsigned int j; 4289e8ead290Smrg for (j = backslashes + 1; j > 0; j--) 4290e8ead290Smrg *p++ = '\\'; 4291e8ead290Smrg } 4292e8ead290Smrg *p++ = c; 4293e8ead290Smrg if (c == '\\') 4294e8ead290Smrg backslashes++; 4295e8ead290Smrg else 4296e8ead290Smrg backslashes = 0; 4297e8ead290Smrg } 4298e8ead290Smrg if (quote_around) 4299e8ead290Smrg { 4300e8ead290Smrg unsigned int j; 4301e8ead290Smrg for (j = backslashes; j > 0; j--) 4302e8ead290Smrg *p++ = '\\'; 4303e8ead290Smrg *p++ = '"'; 4304e8ead290Smrg } 4305e8ead290Smrg *p = '\0'; 4306e8ead290Smrg 4307e8ead290Smrg new_argv[i] = quoted_string; 4308e8ead290Smrg } 4309e8ead290Smrg else 4310e8ead290Smrg new_argv[i] = (char *) string; 4311e8ead290Smrg } 4312e8ead290Smrg new_argv[argc] = NULL; 4313e8ead290Smrg 4314e8ead290Smrg return new_argv; 4315e8ead290Smrg} 4316e8ead290SmrgEOF 4317e8ead290Smrg ;; 4318e8ead290Smrg esac 4319e8ead290Smrg 4320e8ead290Smrg cat <<"EOF" 4321e8ead290Smrgvoid lt_dump_script (FILE* f) 4322e8ead290Smrg{ 4323e8ead290SmrgEOF 4324e8ead290Smrg func_emit_wrapper yes | 4325e8ead290Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 4326e8ead290Smrg -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' 43277914d74bSmrg 4328e8ead290Smrg cat <<"EOF" 4329e8ead290Smrg} 4330e169010aSmrgEOF 4331e169010aSmrg} 4332e169010aSmrg# end: func_emit_cwrapperexe_src 43337914d74bSmrg 4334e8ead290Smrg# func_win32_import_lib_p ARG 4335e8ead290Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 4336e8ead290Smrgfunc_win32_import_lib_p () 4337e8ead290Smrg{ 4338e8ead290Smrg $opt_debug 4339e8ead290Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 4340e8ead290Smrg *import*) : ;; 4341e8ead290Smrg *) false ;; 4342e8ead290Smrg esac 4343e8ead290Smrg} 4344e8ead290Smrg 4345e169010aSmrg# func_mode_link arg... 4346e169010aSmrgfunc_mode_link () 4347e169010aSmrg{ 4348e169010aSmrg $opt_debug 4349e169010aSmrg case $host in 4350e169010aSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 4351e169010aSmrg # It is impossible to link a dll without this setting, and 4352e169010aSmrg # we shouldn't force the makefile maintainer to figure out 4353e169010aSmrg # which system we are compiling for in order to pass an extra 4354e169010aSmrg # flag for every libtool invocation. 4355e169010aSmrg # allow_undefined=no 43567914d74bSmrg 4357e169010aSmrg # FIXME: Unfortunately, there are problems with the above when trying 4358e169010aSmrg # to make a dll which has undefined symbols, in which case not 4359e169010aSmrg # even a static library is built. For now, we need to specify 4360e169010aSmrg # -no-undefined on the libtool link line when we can be certain 4361e169010aSmrg # that all symbols are satisfied, otherwise we get a static library. 4362e169010aSmrg allow_undefined=yes 4363e169010aSmrg ;; 4364e169010aSmrg *) 4365e169010aSmrg allow_undefined=yes 4366e169010aSmrg ;; 4367e169010aSmrg esac 4368e169010aSmrg libtool_args=$nonopt 4369e169010aSmrg base_compile="$nonopt $@" 4370e169010aSmrg compile_command=$nonopt 4371e169010aSmrg finalize_command=$nonopt 43727914d74bSmrg 4373e169010aSmrg compile_rpath= 4374e169010aSmrg finalize_rpath= 4375e169010aSmrg compile_shlibpath= 4376e169010aSmrg finalize_shlibpath= 4377e169010aSmrg convenience= 4378e169010aSmrg old_convenience= 4379e169010aSmrg deplibs= 4380e169010aSmrg old_deplibs= 4381e169010aSmrg compiler_flags= 4382e169010aSmrg linker_flags= 4383e169010aSmrg dllsearchpath= 4384e169010aSmrg lib_search_path=`pwd` 4385e169010aSmrg inst_prefix_dir= 4386e169010aSmrg new_inherited_linker_flags= 43877914d74bSmrg 4388e169010aSmrg avoid_version=no 4389e8ead290Smrg bindir= 4390e169010aSmrg dlfiles= 4391e169010aSmrg dlprefiles= 4392e169010aSmrg dlself=no 4393e169010aSmrg export_dynamic=no 4394e169010aSmrg export_symbols= 4395e169010aSmrg export_symbols_regex= 4396e169010aSmrg generated= 4397e169010aSmrg libobjs= 4398e169010aSmrg ltlibs= 4399e169010aSmrg module=no 4400e169010aSmrg no_install=no 4401e169010aSmrg objs= 4402e169010aSmrg non_pic_objects= 4403e169010aSmrg precious_files_regex= 4404e169010aSmrg prefer_static_libs=no 4405e169010aSmrg preload=no 4406e169010aSmrg prev= 4407e169010aSmrg prevarg= 4408e169010aSmrg release= 4409e169010aSmrg rpath= 4410e169010aSmrg xrpath= 4411e169010aSmrg perm_rpath= 4412e169010aSmrg temp_rpath= 4413e169010aSmrg thread_safe=no 4414e169010aSmrg vinfo= 4415e169010aSmrg vinfo_number=no 4416e169010aSmrg weak_libs= 4417e169010aSmrg single_module="${wl}-single_module" 4418e169010aSmrg func_infer_tag $base_compile 44197914d74bSmrg 4420e169010aSmrg # We need to know -static, to get the right output filenames. 4421e169010aSmrg for arg 4422e169010aSmrg do 4423e169010aSmrg case $arg in 4424e169010aSmrg -shared) 4425e169010aSmrg test "$build_libtool_libs" != yes && \ 4426e169010aSmrg func_fatal_configuration "can not build a shared library" 4427e169010aSmrg build_old_libs=no 4428e169010aSmrg break 4429e169010aSmrg ;; 4430e169010aSmrg -all-static | -static | -static-libtool-libs) 4431e169010aSmrg case $arg in 4432e169010aSmrg -all-static) 4433e169010aSmrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 4434e169010aSmrg func_warning "complete static linking is impossible in this configuration" 44357914d74bSmrg fi 4436e169010aSmrg if test -n "$link_static_flag"; then 4437e169010aSmrg dlopen_self=$dlopen_self_static 44387914d74bSmrg fi 4439e169010aSmrg prefer_static_libs=yes 44407914d74bSmrg ;; 4441e169010aSmrg -static) 4442e169010aSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 4443e169010aSmrg dlopen_self=$dlopen_self_static 4444e169010aSmrg fi 4445e169010aSmrg prefer_static_libs=built 4446e169010aSmrg ;; 4447e169010aSmrg -static-libtool-libs) 4448e169010aSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 4449e169010aSmrg dlopen_self=$dlopen_self_static 4450e169010aSmrg fi 4451e169010aSmrg prefer_static_libs=yes 44527914d74bSmrg ;; 44537914d74bSmrg esac 4454e169010aSmrg build_libtool_libs=no 4455e169010aSmrg build_old_libs=yes 4456e169010aSmrg break 4457e169010aSmrg ;; 4458e169010aSmrg esac 4459e169010aSmrg done 44607914d74bSmrg 4461e169010aSmrg # See if our shared archives depend on static archives. 4462e169010aSmrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 44637914d74bSmrg 4464e169010aSmrg # Go through the arguments, transforming them on the way. 4465e169010aSmrg while test "$#" -gt 0; do 4466e169010aSmrg arg="$1" 4467e169010aSmrg shift 4468e169010aSmrg func_quote_for_eval "$arg" 4469e169010aSmrg qarg=$func_quote_for_eval_unquoted_result 4470e169010aSmrg func_append libtool_args " $func_quote_for_eval_result" 44717914d74bSmrg 4472e169010aSmrg # If the previous option needs an argument, assign it. 4473e169010aSmrg if test -n "$prev"; then 4474e169010aSmrg case $prev in 4475e169010aSmrg output) 4476e169010aSmrg func_append compile_command " @OUTPUT@" 4477e169010aSmrg func_append finalize_command " @OUTPUT@" 4478e169010aSmrg ;; 4479e169010aSmrg esac 44807914d74bSmrg 4481e169010aSmrg case $prev in 4482e8ead290Smrg bindir) 4483e8ead290Smrg bindir="$arg" 4484e8ead290Smrg prev= 4485e8ead290Smrg continue 4486e8ead290Smrg ;; 4487e169010aSmrg dlfiles|dlprefiles) 4488e169010aSmrg if test "$preload" = no; then 4489e169010aSmrg # Add the symbol object into the linking commands. 4490e169010aSmrg func_append compile_command " @SYMFILE@" 4491e169010aSmrg func_append finalize_command " @SYMFILE@" 4492e169010aSmrg preload=yes 4493e169010aSmrg fi 4494e169010aSmrg case $arg in 4495e169010aSmrg *.la | *.lo) ;; # We handle these cases below. 4496e169010aSmrg force) 4497e169010aSmrg if test "$dlself" = no; then 4498e169010aSmrg dlself=needless 4499e169010aSmrg export_dynamic=yes 4500e169010aSmrg fi 4501e169010aSmrg prev= 4502e169010aSmrg continue 4503e169010aSmrg ;; 4504e169010aSmrg self) 4505e169010aSmrg if test "$prev" = dlprefiles; then 4506e169010aSmrg dlself=yes 4507e169010aSmrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 4508e169010aSmrg dlself=yes 4509e169010aSmrg else 4510e169010aSmrg dlself=needless 4511e169010aSmrg export_dynamic=yes 4512e169010aSmrg fi 4513e169010aSmrg prev= 4514e169010aSmrg continue 45157914d74bSmrg ;; 45167914d74bSmrg *) 4517e169010aSmrg if test "$prev" = dlfiles; then 4518e169010aSmrg dlfiles="$dlfiles $arg" 4519e169010aSmrg else 4520e169010aSmrg dlprefiles="$dlprefiles $arg" 4521e169010aSmrg fi 4522e169010aSmrg prev= 4523e169010aSmrg continue 45247914d74bSmrg ;; 45257914d74bSmrg esac 4526e169010aSmrg ;; 4527e169010aSmrg expsyms) 4528e169010aSmrg export_symbols="$arg" 4529e169010aSmrg test -f "$arg" \ 4530e169010aSmrg || func_fatal_error "symbol file \`$arg' does not exist" 4531e169010aSmrg prev= 4532e169010aSmrg continue 4533e169010aSmrg ;; 4534e169010aSmrg expsyms_regex) 4535e169010aSmrg export_symbols_regex="$arg" 4536e169010aSmrg prev= 4537e169010aSmrg continue 4538e169010aSmrg ;; 4539e169010aSmrg framework) 4540e169010aSmrg case $host in 4541e169010aSmrg *-*-darwin*) 4542e169010aSmrg case "$deplibs " in 4543e169010aSmrg *" $qarg.ltframework "*) ;; 4544e169010aSmrg *) deplibs="$deplibs $qarg.ltframework" # this is fixed later 4545e169010aSmrg ;; 4546e169010aSmrg esac 4547e169010aSmrg ;; 4548e169010aSmrg esac 4549e169010aSmrg prev= 4550e169010aSmrg continue 4551e169010aSmrg ;; 4552e169010aSmrg inst_prefix) 4553e169010aSmrg inst_prefix_dir="$arg" 4554e169010aSmrg prev= 4555e169010aSmrg continue 4556e169010aSmrg ;; 4557e169010aSmrg objectlist) 4558e169010aSmrg if test -f "$arg"; then 4559e169010aSmrg save_arg=$arg 4560e169010aSmrg moreargs= 4561e169010aSmrg for fil in `cat "$save_arg"` 4562e169010aSmrg do 4563e169010aSmrg# moreargs="$moreargs $fil" 4564e169010aSmrg arg=$fil 4565e169010aSmrg # A libtool-controlled object. 45667914d74bSmrg 4567e169010aSmrg # Check to see that this really is a libtool object. 4568e169010aSmrg if func_lalib_unsafe_p "$arg"; then 4569e169010aSmrg pic_object= 4570e169010aSmrg non_pic_object= 45717914d74bSmrg 4572e169010aSmrg # Read the .lo file 4573e169010aSmrg func_source "$arg" 45747914d74bSmrg 4575e169010aSmrg if test -z "$pic_object" || 4576e169010aSmrg test -z "$non_pic_object" || 4577e169010aSmrg test "$pic_object" = none && 4578e169010aSmrg test "$non_pic_object" = none; then 4579e169010aSmrg func_fatal_error "cannot find name of object for \`$arg'" 4580e169010aSmrg fi 45817914d74bSmrg 4582e169010aSmrg # Extract subdirectory from the argument. 4583e169010aSmrg func_dirname "$arg" "/" "" 4584e169010aSmrg xdir="$func_dirname_result" 45857914d74bSmrg 4586e169010aSmrg if test "$pic_object" != none; then 4587e169010aSmrg # Prepend the subdirectory the object is found in. 4588e169010aSmrg pic_object="$xdir$pic_object" 45897914d74bSmrg 4590e169010aSmrg if test "$prev" = dlfiles; then 4591e169010aSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 4592e169010aSmrg dlfiles="$dlfiles $pic_object" 4593e169010aSmrg prev= 4594e169010aSmrg continue 4595e169010aSmrg else 4596e169010aSmrg # If libtool objects are unsupported, then we need to preload. 4597e169010aSmrg prev=dlprefiles 4598e169010aSmrg fi 4599e169010aSmrg fi 46007914d74bSmrg 4601e169010aSmrg # CHECK ME: I think I busted this. -Ossama 4602e169010aSmrg if test "$prev" = dlprefiles; then 4603e169010aSmrg # Preload the old-style object. 4604e169010aSmrg dlprefiles="$dlprefiles $pic_object" 4605e169010aSmrg prev= 4606e169010aSmrg fi 46077914d74bSmrg 4608e169010aSmrg # A PIC object. 4609e169010aSmrg func_append libobjs " $pic_object" 4610e169010aSmrg arg="$pic_object" 4611e169010aSmrg fi 46127914d74bSmrg 4613e169010aSmrg # Non-PIC object. 4614e169010aSmrg if test "$non_pic_object" != none; then 4615e169010aSmrg # Prepend the subdirectory the object is found in. 4616e169010aSmrg non_pic_object="$xdir$non_pic_object" 46177914d74bSmrg 4618e169010aSmrg # A standard non-PIC object 4619e169010aSmrg func_append non_pic_objects " $non_pic_object" 4620e169010aSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 4621e169010aSmrg arg="$non_pic_object" 4622e169010aSmrg fi 4623e169010aSmrg else 4624e169010aSmrg # If the PIC object exists, use it instead. 4625e169010aSmrg # $xdir was prepended to $pic_object above. 4626e169010aSmrg non_pic_object="$pic_object" 4627e169010aSmrg func_append non_pic_objects " $non_pic_object" 4628e169010aSmrg fi 4629e169010aSmrg else 4630e169010aSmrg # Only an error if not doing a dry-run. 4631e169010aSmrg if $opt_dry_run; then 4632e169010aSmrg # Extract subdirectory from the argument. 4633e169010aSmrg func_dirname "$arg" "/" "" 4634e169010aSmrg xdir="$func_dirname_result" 4635e169010aSmrg 4636e169010aSmrg func_lo2o "$arg" 4637e169010aSmrg pic_object=$xdir$objdir/$func_lo2o_result 4638e169010aSmrg non_pic_object=$xdir$func_lo2o_result 4639e169010aSmrg func_append libobjs " $pic_object" 4640e169010aSmrg func_append non_pic_objects " $non_pic_object" 4641e169010aSmrg else 4642e169010aSmrg func_fatal_error "\`$arg' is not a valid libtool object" 4643e169010aSmrg fi 4644e169010aSmrg fi 4645e169010aSmrg done 4646e169010aSmrg else 4647e169010aSmrg func_fatal_error "link input file \`$arg' does not exist" 4648e169010aSmrg fi 4649e169010aSmrg arg=$save_arg 4650e169010aSmrg prev= 4651e169010aSmrg continue 4652e169010aSmrg ;; 4653e169010aSmrg precious_regex) 4654e169010aSmrg precious_files_regex="$arg" 4655e169010aSmrg prev= 4656e169010aSmrg continue 4657e169010aSmrg ;; 4658e169010aSmrg release) 4659e169010aSmrg release="-$arg" 4660e169010aSmrg prev= 4661e169010aSmrg continue 4662e169010aSmrg ;; 4663e169010aSmrg rpath | xrpath) 4664e169010aSmrg # We need an absolute path. 4665e169010aSmrg case $arg in 4666e169010aSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4667e169010aSmrg *) 4668e169010aSmrg func_fatal_error "only absolute run-paths are allowed" 4669e169010aSmrg ;; 4670e169010aSmrg esac 4671e169010aSmrg if test "$prev" = rpath; then 4672e169010aSmrg case "$rpath " in 4673e169010aSmrg *" $arg "*) ;; 4674e169010aSmrg *) rpath="$rpath $arg" ;; 4675e169010aSmrg esac 4676e169010aSmrg else 4677e169010aSmrg case "$xrpath " in 4678e169010aSmrg *" $arg "*) ;; 4679e169010aSmrg *) xrpath="$xrpath $arg" ;; 4680e169010aSmrg esac 4681e169010aSmrg fi 4682e169010aSmrg prev= 4683e169010aSmrg continue 4684e169010aSmrg ;; 4685e169010aSmrg shrext) 4686e169010aSmrg shrext_cmds="$arg" 4687e169010aSmrg prev= 4688e169010aSmrg continue 4689e169010aSmrg ;; 4690e169010aSmrg weak) 4691e169010aSmrg weak_libs="$weak_libs $arg" 4692e169010aSmrg prev= 4693e169010aSmrg continue 4694e169010aSmrg ;; 4695e169010aSmrg xcclinker) 4696e169010aSmrg linker_flags="$linker_flags $qarg" 4697e169010aSmrg compiler_flags="$compiler_flags $qarg" 4698e169010aSmrg prev= 4699e169010aSmrg func_append compile_command " $qarg" 4700e169010aSmrg func_append finalize_command " $qarg" 4701e169010aSmrg continue 4702e169010aSmrg ;; 4703e169010aSmrg xcompiler) 4704e169010aSmrg compiler_flags="$compiler_flags $qarg" 4705e169010aSmrg prev= 4706e169010aSmrg func_append compile_command " $qarg" 4707e169010aSmrg func_append finalize_command " $qarg" 4708e169010aSmrg continue 4709e169010aSmrg ;; 4710e169010aSmrg xlinker) 4711e169010aSmrg linker_flags="$linker_flags $qarg" 4712e169010aSmrg compiler_flags="$compiler_flags $wl$qarg" 4713e169010aSmrg prev= 4714e169010aSmrg func_append compile_command " $wl$qarg" 4715e169010aSmrg func_append finalize_command " $wl$qarg" 4716e169010aSmrg continue 4717e169010aSmrg ;; 4718e169010aSmrg *) 4719e169010aSmrg eval "$prev=\"\$arg\"" 4720e169010aSmrg prev= 4721e169010aSmrg continue 4722e169010aSmrg ;; 47237914d74bSmrg esac 4724e169010aSmrg fi # test -n "$prev" 47257914d74bSmrg 4726e169010aSmrg prevarg="$arg" 47277914d74bSmrg 4728e169010aSmrg case $arg in 4729e169010aSmrg -all-static) 4730e169010aSmrg if test -n "$link_static_flag"; then 4731e169010aSmrg # See comment for -static flag below, for more details. 4732e169010aSmrg func_append compile_command " $link_static_flag" 4733e169010aSmrg func_append finalize_command " $link_static_flag" 4734e169010aSmrg fi 4735e169010aSmrg continue 4736e169010aSmrg ;; 47377914d74bSmrg 4738e169010aSmrg -allow-undefined) 4739e169010aSmrg # FIXME: remove this flag sometime in the future. 4740e169010aSmrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 4741e169010aSmrg ;; 47427914d74bSmrg 4743e169010aSmrg -avoid-version) 4744e169010aSmrg avoid_version=yes 4745e169010aSmrg continue 4746e169010aSmrg ;; 47477914d74bSmrg 4748e8ead290Smrg -bindir) 4749e8ead290Smrg prev=bindir 4750e8ead290Smrg continue 4751e8ead290Smrg ;; 4752e8ead290Smrg 4753e169010aSmrg -dlopen) 4754e169010aSmrg prev=dlfiles 4755e169010aSmrg continue 4756e169010aSmrg ;; 47577914d74bSmrg 4758e169010aSmrg -dlpreopen) 4759e169010aSmrg prev=dlprefiles 4760e169010aSmrg continue 4761e169010aSmrg ;; 47627914d74bSmrg 4763e169010aSmrg -export-dynamic) 4764e169010aSmrg export_dynamic=yes 4765e169010aSmrg continue 4766e169010aSmrg ;; 47677914d74bSmrg 4768e169010aSmrg -export-symbols | -export-symbols-regex) 4769e169010aSmrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 4770e169010aSmrg func_fatal_error "more than one -exported-symbols argument is not allowed" 4771e169010aSmrg fi 4772e169010aSmrg if test "X$arg" = "X-export-symbols"; then 4773e169010aSmrg prev=expsyms 4774e169010aSmrg else 4775e169010aSmrg prev=expsyms_regex 4776e169010aSmrg fi 4777e169010aSmrg continue 4778e169010aSmrg ;; 47797914d74bSmrg 4780e169010aSmrg -framework) 4781e169010aSmrg prev=framework 4782e169010aSmrg continue 4783e169010aSmrg ;; 47847914d74bSmrg 4785e169010aSmrg -inst-prefix-dir) 4786e169010aSmrg prev=inst_prefix 4787e169010aSmrg continue 4788e169010aSmrg ;; 47897914d74bSmrg 4790e169010aSmrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 4791e169010aSmrg # so, if we see these flags be careful not to treat them like -L 4792e169010aSmrg -L[A-Z][A-Z]*:*) 4793e169010aSmrg case $with_gcc/$host in 4794e169010aSmrg no/*-*-irix* | /*-*-irix*) 4795e169010aSmrg func_append compile_command " $arg" 4796e169010aSmrg func_append finalize_command " $arg" 4797e169010aSmrg ;; 4798e169010aSmrg esac 4799e169010aSmrg continue 4800e169010aSmrg ;; 48017914d74bSmrg 4802e169010aSmrg -L*) 4803e169010aSmrg func_stripname '-L' '' "$arg" 4804e169010aSmrg dir=$func_stripname_result 4805e169010aSmrg if test -z "$dir"; then 4806e169010aSmrg if test "$#" -gt 0; then 4807e169010aSmrg func_fatal_error "require no space between \`-L' and \`$1'" 4808e169010aSmrg else 4809e169010aSmrg func_fatal_error "need path for \`-L' option" 4810e169010aSmrg fi 4811e169010aSmrg fi 4812e169010aSmrg # We need an absolute path. 4813e169010aSmrg case $dir in 4814e169010aSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4815e169010aSmrg *) 4816e169010aSmrg absdir=`cd "$dir" && pwd` 4817e169010aSmrg test -z "$absdir" && \ 4818e169010aSmrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 4819e169010aSmrg dir="$absdir" 4820e169010aSmrg ;; 4821e169010aSmrg esac 4822e169010aSmrg case "$deplibs " in 4823e169010aSmrg *" -L$dir "*) ;; 4824e169010aSmrg *) 4825e169010aSmrg deplibs="$deplibs -L$dir" 4826e169010aSmrg lib_search_path="$lib_search_path $dir" 4827e169010aSmrg ;; 4828e169010aSmrg esac 4829e169010aSmrg case $host in 4830e169010aSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 4831e8ead290Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 4832e169010aSmrg case :$dllsearchpath: in 4833e169010aSmrg *":$dir:"*) ;; 4834e169010aSmrg ::) dllsearchpath=$dir;; 4835e169010aSmrg *) dllsearchpath="$dllsearchpath:$dir";; 4836e169010aSmrg esac 4837e169010aSmrg case :$dllsearchpath: in 4838e169010aSmrg *":$testbindir:"*) ;; 4839e169010aSmrg ::) dllsearchpath=$testbindir;; 4840e169010aSmrg *) dllsearchpath="$dllsearchpath:$testbindir";; 4841e169010aSmrg esac 4842e169010aSmrg ;; 4843e169010aSmrg esac 4844e169010aSmrg continue 4845e169010aSmrg ;; 48467914d74bSmrg 4847e169010aSmrg -l*) 4848e169010aSmrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 4849e169010aSmrg case $host in 4850e8ead290Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 4851e169010aSmrg # These systems don't actually have a C or math library (as such) 4852e169010aSmrg continue 4853e169010aSmrg ;; 4854e169010aSmrg *-*-os2*) 4855e169010aSmrg # These systems don't actually have a C library (as such) 4856e169010aSmrg test "X$arg" = "X-lc" && continue 4857e169010aSmrg ;; 4858e169010aSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 4859e169010aSmrg # Do not include libc due to us having libc/libc_r. 4860e169010aSmrg test "X$arg" = "X-lc" && continue 4861e169010aSmrg ;; 4862e169010aSmrg *-*-rhapsody* | *-*-darwin1.[012]) 4863e169010aSmrg # Rhapsody C and math libraries are in the System framework 4864e169010aSmrg deplibs="$deplibs System.ltframework" 4865e169010aSmrg continue 4866e169010aSmrg ;; 4867e169010aSmrg *-*-sco3.2v5* | *-*-sco5v6*) 4868e169010aSmrg # Causes problems with __ctype 4869e169010aSmrg test "X$arg" = "X-lc" && continue 4870e169010aSmrg ;; 4871e169010aSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 4872e169010aSmrg # Compiler inserts libc in the correct place for threads to work 4873e169010aSmrg test "X$arg" = "X-lc" && continue 4874e169010aSmrg ;; 4875e169010aSmrg esac 4876e169010aSmrg elif test "X$arg" = "X-lc_r"; then 4877e169010aSmrg case $host in 4878e169010aSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 4879e169010aSmrg # Do not include libc_r directly, use -pthread flag. 4880e169010aSmrg continue 4881e169010aSmrg ;; 4882e169010aSmrg esac 4883e169010aSmrg fi 4884e169010aSmrg deplibs="$deplibs $arg" 4885e169010aSmrg continue 4886e169010aSmrg ;; 48877914d74bSmrg 4888e169010aSmrg -module) 4889e169010aSmrg module=yes 4890e169010aSmrg continue 4891e169010aSmrg ;; 48927914d74bSmrg 4893e169010aSmrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 4894e169010aSmrg # classes, name mangling, and exception handling. 4895e169010aSmrg # Darwin uses the -arch flag to determine output architecture. 4896e169010aSmrg -model|-arch|-isysroot) 4897e169010aSmrg compiler_flags="$compiler_flags $arg" 4898e169010aSmrg func_append compile_command " $arg" 4899e169010aSmrg func_append finalize_command " $arg" 4900e169010aSmrg prev=xcompiler 4901e169010aSmrg continue 4902e169010aSmrg ;; 49037914d74bSmrg 4904e169010aSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 4905e169010aSmrg compiler_flags="$compiler_flags $arg" 4906e169010aSmrg func_append compile_command " $arg" 4907e169010aSmrg func_append finalize_command " $arg" 4908e169010aSmrg case "$new_inherited_linker_flags " in 4909e169010aSmrg *" $arg "*) ;; 4910e169010aSmrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; 4911e169010aSmrg esac 4912e169010aSmrg continue 4913e169010aSmrg ;; 49147914d74bSmrg 4915e169010aSmrg -multi_module) 4916e169010aSmrg single_module="${wl}-multi_module" 4917e169010aSmrg continue 4918e169010aSmrg ;; 49197914d74bSmrg 4920e169010aSmrg -no-fast-install) 4921e169010aSmrg fast_install=no 4922e169010aSmrg continue 4923e169010aSmrg ;; 49247914d74bSmrg 4925e169010aSmrg -no-install) 4926e169010aSmrg case $host in 4927e169010aSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 4928e169010aSmrg # The PATH hackery in wrapper scripts is required on Windows 4929e169010aSmrg # and Darwin in order for the loader to find any dlls it needs. 4930e169010aSmrg func_warning "\`-no-install' is ignored for $host" 4931e169010aSmrg func_warning "assuming \`-no-fast-install' instead" 4932e169010aSmrg fast_install=no 4933e169010aSmrg ;; 4934e169010aSmrg *) no_install=yes ;; 4935e169010aSmrg esac 4936e169010aSmrg continue 4937e169010aSmrg ;; 49387914d74bSmrg 4939e169010aSmrg -no-undefined) 4940e169010aSmrg allow_undefined=no 4941e169010aSmrg continue 4942e169010aSmrg ;; 49437914d74bSmrg 4944e169010aSmrg -objectlist) 4945e169010aSmrg prev=objectlist 4946e169010aSmrg continue 4947e169010aSmrg ;; 49487914d74bSmrg 4949e169010aSmrg -o) prev=output ;; 49507914d74bSmrg 4951e169010aSmrg -precious-files-regex) 4952e169010aSmrg prev=precious_regex 4953e169010aSmrg continue 4954e169010aSmrg ;; 49557914d74bSmrg 4956e169010aSmrg -release) 4957e169010aSmrg prev=release 4958e169010aSmrg continue 4959e169010aSmrg ;; 49607914d74bSmrg 4961e169010aSmrg -rpath) 4962e169010aSmrg prev=rpath 4963e169010aSmrg continue 4964e169010aSmrg ;; 49657914d74bSmrg 4966e169010aSmrg -R) 4967e169010aSmrg prev=xrpath 4968e169010aSmrg continue 4969e169010aSmrg ;; 49707914d74bSmrg 4971e169010aSmrg -R*) 4972e169010aSmrg func_stripname '-R' '' "$arg" 4973e169010aSmrg dir=$func_stripname_result 4974e169010aSmrg # We need an absolute path. 4975e169010aSmrg case $dir in 4976e169010aSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 4977e169010aSmrg *) 4978e169010aSmrg func_fatal_error "only absolute run-paths are allowed" 4979e169010aSmrg ;; 4980e169010aSmrg esac 4981e169010aSmrg case "$xrpath " in 4982e169010aSmrg *" $dir "*) ;; 4983e169010aSmrg *) xrpath="$xrpath $dir" ;; 4984e169010aSmrg esac 4985e169010aSmrg continue 4986e169010aSmrg ;; 49877914d74bSmrg 4988e169010aSmrg -shared) 4989e169010aSmrg # The effects of -shared are defined in a previous loop. 4990e169010aSmrg continue 4991e169010aSmrg ;; 49927914d74bSmrg 4993e169010aSmrg -shrext) 4994e169010aSmrg prev=shrext 4995e169010aSmrg continue 4996e169010aSmrg ;; 49977914d74bSmrg 4998e169010aSmrg -static | -static-libtool-libs) 4999e169010aSmrg # The effects of -static are defined in a previous loop. 5000e169010aSmrg # We used to do the same as -all-static on platforms that 5001e169010aSmrg # didn't have a PIC flag, but the assumption that the effects 5002e169010aSmrg # would be equivalent was wrong. It would break on at least 5003e169010aSmrg # Digital Unix and AIX. 5004e169010aSmrg continue 5005e169010aSmrg ;; 50067914d74bSmrg 5007e169010aSmrg -thread-safe) 5008e169010aSmrg thread_safe=yes 5009e169010aSmrg continue 5010e169010aSmrg ;; 50117914d74bSmrg 5012e169010aSmrg -version-info) 5013e169010aSmrg prev=vinfo 5014e169010aSmrg continue 5015e169010aSmrg ;; 50167914d74bSmrg 5017e169010aSmrg -version-number) 5018e169010aSmrg prev=vinfo 5019e169010aSmrg vinfo_number=yes 5020e169010aSmrg continue 5021e169010aSmrg ;; 50227914d74bSmrg 5023e169010aSmrg -weak) 5024e169010aSmrg prev=weak 5025e169010aSmrg continue 5026e169010aSmrg ;; 50277914d74bSmrg 5028e169010aSmrg -Wc,*) 5029e169010aSmrg func_stripname '-Wc,' '' "$arg" 5030e169010aSmrg args=$func_stripname_result 5031e169010aSmrg arg= 5032e169010aSmrg save_ifs="$IFS"; IFS=',' 5033e169010aSmrg for flag in $args; do 5034e169010aSmrg IFS="$save_ifs" 5035e169010aSmrg func_quote_for_eval "$flag" 5036e8ead290Smrg arg="$arg $func_quote_for_eval_result" 5037e169010aSmrg compiler_flags="$compiler_flags $func_quote_for_eval_result" 5038e169010aSmrg done 5039e169010aSmrg IFS="$save_ifs" 5040e169010aSmrg func_stripname ' ' '' "$arg" 5041e169010aSmrg arg=$func_stripname_result 5042e169010aSmrg ;; 50437914d74bSmrg 5044e169010aSmrg -Wl,*) 5045e169010aSmrg func_stripname '-Wl,' '' "$arg" 5046e169010aSmrg args=$func_stripname_result 5047e169010aSmrg arg= 5048e169010aSmrg save_ifs="$IFS"; IFS=',' 5049e169010aSmrg for flag in $args; do 5050e169010aSmrg IFS="$save_ifs" 5051e169010aSmrg func_quote_for_eval "$flag" 5052e169010aSmrg arg="$arg $wl$func_quote_for_eval_result" 5053e169010aSmrg compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" 5054e169010aSmrg linker_flags="$linker_flags $func_quote_for_eval_result" 5055e169010aSmrg done 5056e169010aSmrg IFS="$save_ifs" 5057e169010aSmrg func_stripname ' ' '' "$arg" 5058e169010aSmrg arg=$func_stripname_result 5059e169010aSmrg ;; 50607914d74bSmrg 5061e169010aSmrg -Xcompiler) 5062e169010aSmrg prev=xcompiler 5063e169010aSmrg continue 5064e169010aSmrg ;; 50657914d74bSmrg 5066e169010aSmrg -Xlinker) 5067e169010aSmrg prev=xlinker 5068e169010aSmrg continue 5069e169010aSmrg ;; 50707914d74bSmrg 5071e169010aSmrg -XCClinker) 5072e169010aSmrg prev=xcclinker 5073e169010aSmrg continue 5074e169010aSmrg ;; 50757914d74bSmrg 5076e169010aSmrg # -msg_* for osf cc 5077e169010aSmrg -msg_*) 5078e169010aSmrg func_quote_for_eval "$arg" 5079e169010aSmrg arg="$func_quote_for_eval_result" 5080e169010aSmrg ;; 50817914d74bSmrg 5082e8ead290Smrg # Flags to be passed through unchanged, with rationale: 5083e8ead290Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 5084e8ead290Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 5085e8ead290Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 5086e8ead290Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 5087e8ead290Smrg # -q* compiler args for the IBM compiler 5088e8ead290Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 5089e8ead290Smrg # -F/path path to uninstalled frameworks, gcc on darwin 5090e8ead290Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 5091e8ead290Smrg # @file GCC response files 5092e8ead290Smrg # -tp=* Portland pgcc target processor selection 5093e169010aSmrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 5094e8ead290Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*) 5095e169010aSmrg func_quote_for_eval "$arg" 5096e169010aSmrg arg="$func_quote_for_eval_result" 5097e169010aSmrg func_append compile_command " $arg" 5098e169010aSmrg func_append finalize_command " $arg" 5099e169010aSmrg compiler_flags="$compiler_flags $arg" 5100e169010aSmrg continue 5101e169010aSmrg ;; 51027914d74bSmrg 5103e169010aSmrg # Some other compiler flag. 5104e169010aSmrg -* | +*) 5105e169010aSmrg func_quote_for_eval "$arg" 5106e169010aSmrg arg="$func_quote_for_eval_result" 5107e169010aSmrg ;; 51087914d74bSmrg 5109e169010aSmrg *.$objext) 5110e169010aSmrg # A standard object. 5111e169010aSmrg objs="$objs $arg" 5112e169010aSmrg ;; 5113e169010aSmrg 5114e169010aSmrg *.lo) 5115e169010aSmrg # A libtool-controlled object. 5116e169010aSmrg 5117e169010aSmrg # Check to see that this really is a libtool object. 5118e169010aSmrg if func_lalib_unsafe_p "$arg"; then 5119e169010aSmrg pic_object= 5120e169010aSmrg non_pic_object= 5121e169010aSmrg 5122e169010aSmrg # Read the .lo file 5123e169010aSmrg func_source "$arg" 5124e169010aSmrg 5125e169010aSmrg if test -z "$pic_object" || 5126e169010aSmrg test -z "$non_pic_object" || 5127e169010aSmrg test "$pic_object" = none && 5128e169010aSmrg test "$non_pic_object" = none; then 5129e169010aSmrg func_fatal_error "cannot find name of object for \`$arg'" 5130e169010aSmrg fi 5131e169010aSmrg 5132e169010aSmrg # Extract subdirectory from the argument. 5133e169010aSmrg func_dirname "$arg" "/" "" 5134e169010aSmrg xdir="$func_dirname_result" 5135e169010aSmrg 5136e169010aSmrg if test "$pic_object" != none; then 5137e169010aSmrg # Prepend the subdirectory the object is found in. 5138e169010aSmrg pic_object="$xdir$pic_object" 5139e169010aSmrg 5140e169010aSmrg if test "$prev" = dlfiles; then 5141e169010aSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 5142e169010aSmrg dlfiles="$dlfiles $pic_object" 5143e169010aSmrg prev= 5144e169010aSmrg continue 5145e169010aSmrg else 5146e169010aSmrg # If libtool objects are unsupported, then we need to preload. 5147e169010aSmrg prev=dlprefiles 5148e169010aSmrg fi 5149e169010aSmrg fi 5150e169010aSmrg 5151e169010aSmrg # CHECK ME: I think I busted this. -Ossama 5152e169010aSmrg if test "$prev" = dlprefiles; then 5153e169010aSmrg # Preload the old-style object. 5154e169010aSmrg dlprefiles="$dlprefiles $pic_object" 5155e169010aSmrg prev= 5156e169010aSmrg fi 5157e169010aSmrg 5158e169010aSmrg # A PIC object. 5159e169010aSmrg func_append libobjs " $pic_object" 5160e169010aSmrg arg="$pic_object" 5161e169010aSmrg fi 5162e169010aSmrg 5163e169010aSmrg # Non-PIC object. 5164e169010aSmrg if test "$non_pic_object" != none; then 5165e169010aSmrg # Prepend the subdirectory the object is found in. 5166e169010aSmrg non_pic_object="$xdir$non_pic_object" 5167e169010aSmrg 5168e169010aSmrg # A standard non-PIC object 5169e169010aSmrg func_append non_pic_objects " $non_pic_object" 5170e169010aSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 5171e169010aSmrg arg="$non_pic_object" 5172e169010aSmrg fi 5173e169010aSmrg else 5174e169010aSmrg # If the PIC object exists, use it instead. 5175e169010aSmrg # $xdir was prepended to $pic_object above. 5176e169010aSmrg non_pic_object="$pic_object" 5177e169010aSmrg func_append non_pic_objects " $non_pic_object" 5178e169010aSmrg fi 5179e169010aSmrg else 5180e169010aSmrg # Only an error if not doing a dry-run. 5181e169010aSmrg if $opt_dry_run; then 5182e169010aSmrg # Extract subdirectory from the argument. 5183e169010aSmrg func_dirname "$arg" "/" "" 5184e169010aSmrg xdir="$func_dirname_result" 5185e169010aSmrg 5186e169010aSmrg func_lo2o "$arg" 5187e169010aSmrg pic_object=$xdir$objdir/$func_lo2o_result 5188e169010aSmrg non_pic_object=$xdir$func_lo2o_result 5189e169010aSmrg func_append libobjs " $pic_object" 5190e169010aSmrg func_append non_pic_objects " $non_pic_object" 5191e169010aSmrg else 5192e169010aSmrg func_fatal_error "\`$arg' is not a valid libtool object" 5193e169010aSmrg fi 5194e169010aSmrg fi 5195e169010aSmrg ;; 5196e169010aSmrg 5197e169010aSmrg *.$libext) 5198e169010aSmrg # An archive. 5199e169010aSmrg deplibs="$deplibs $arg" 5200e169010aSmrg old_deplibs="$old_deplibs $arg" 5201e169010aSmrg continue 5202e169010aSmrg ;; 5203e169010aSmrg 5204e169010aSmrg *.la) 5205e169010aSmrg # A libtool-controlled library. 5206e169010aSmrg 5207e169010aSmrg if test "$prev" = dlfiles; then 5208e169010aSmrg # This library was specified with -dlopen. 5209e169010aSmrg dlfiles="$dlfiles $arg" 5210e169010aSmrg prev= 5211e169010aSmrg elif test "$prev" = dlprefiles; then 5212e169010aSmrg # The library was specified with -dlpreopen. 5213e169010aSmrg dlprefiles="$dlprefiles $arg" 5214e169010aSmrg prev= 5215e169010aSmrg else 5216e169010aSmrg deplibs="$deplibs $arg" 5217e169010aSmrg fi 5218e169010aSmrg continue 5219e169010aSmrg ;; 5220e169010aSmrg 5221e169010aSmrg # Some other compiler argument. 5222e169010aSmrg *) 5223e169010aSmrg # Unknown arguments in both finalize_command and compile_command need 5224e169010aSmrg # to be aesthetically quoted because they are evaled later. 5225e169010aSmrg func_quote_for_eval "$arg" 5226e169010aSmrg arg="$func_quote_for_eval_result" 5227e169010aSmrg ;; 5228e169010aSmrg esac # arg 5229e169010aSmrg 5230e169010aSmrg # Now actually substitute the argument into the commands. 5231e169010aSmrg if test -n "$arg"; then 5232e169010aSmrg func_append compile_command " $arg" 5233e169010aSmrg func_append finalize_command " $arg" 5234e169010aSmrg fi 5235e169010aSmrg done # argument parsing loop 5236e169010aSmrg 5237e169010aSmrg test -n "$prev" && \ 5238e169010aSmrg func_fatal_help "the \`$prevarg' option requires an argument" 5239e169010aSmrg 5240e169010aSmrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 5241e169010aSmrg eval arg=\"$export_dynamic_flag_spec\" 5242e169010aSmrg func_append compile_command " $arg" 5243e169010aSmrg func_append finalize_command " $arg" 5244e169010aSmrg fi 5245e169010aSmrg 5246e169010aSmrg oldlibs= 5247e169010aSmrg # calculate the name of the file, without its directory 5248e169010aSmrg func_basename "$output" 5249e169010aSmrg outputname="$func_basename_result" 5250e169010aSmrg libobjs_save="$libobjs" 5251e169010aSmrg 5252e169010aSmrg if test -n "$shlibpath_var"; then 5253e169010aSmrg # get the directories listed in $shlibpath_var 5254e8ead290Smrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 52557914d74bSmrg else 5256e169010aSmrg shlib_search_path= 52577914d74bSmrg fi 5258e169010aSmrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 5259e169010aSmrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 52607914d74bSmrg 5261e169010aSmrg func_dirname "$output" "/" "" 5262e169010aSmrg output_objdir="$func_dirname_result$objdir" 5263e169010aSmrg # Create the object directory. 5264e169010aSmrg func_mkdir_p "$output_objdir" 52657914d74bSmrg 5266e169010aSmrg # Determine the type of output 5267e169010aSmrg case $output in 5268e169010aSmrg "") 5269e169010aSmrg func_fatal_help "you must specify an output file" 5270e169010aSmrg ;; 5271e169010aSmrg *.$libext) linkmode=oldlib ;; 5272e169010aSmrg *.lo | *.$objext) linkmode=obj ;; 5273e169010aSmrg *.la) linkmode=lib ;; 5274e169010aSmrg *) linkmode=prog ;; # Anything else should be a program. 5275e169010aSmrg esac 5276e169010aSmrg 5277e169010aSmrg specialdeplibs= 5278e169010aSmrg 5279e169010aSmrg libs= 5280e169010aSmrg # Find all interdependent deplibs by searching for libraries 5281e169010aSmrg # that are linked more than once (e.g. -la -lb -la) 5282e169010aSmrg for deplib in $deplibs; do 5283e169010aSmrg if $opt_duplicate_deps ; then 5284e169010aSmrg case "$libs " in 5285e169010aSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5286e169010aSmrg esac 5287e169010aSmrg fi 5288e169010aSmrg libs="$libs $deplib" 5289e169010aSmrg done 5290e169010aSmrg 5291e169010aSmrg if test "$linkmode" = lib; then 5292e169010aSmrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 5293e169010aSmrg 5294e169010aSmrg # Compute libraries that are listed more than once in $predeps 5295e169010aSmrg # $postdeps and mark them as special (i.e., whose duplicates are 5296e169010aSmrg # not to be eliminated). 5297e169010aSmrg pre_post_deps= 5298e169010aSmrg if $opt_duplicate_compiler_generated_deps; then 5299e169010aSmrg for pre_post_dep in $predeps $postdeps; do 5300e169010aSmrg case "$pre_post_deps " in 5301e169010aSmrg *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; 5302e169010aSmrg esac 5303e169010aSmrg pre_post_deps="$pre_post_deps $pre_post_dep" 5304e169010aSmrg done 5305e169010aSmrg fi 5306e169010aSmrg pre_post_deps= 5307e169010aSmrg fi 5308e169010aSmrg 5309e169010aSmrg deplibs= 5310e169010aSmrg newdependency_libs= 5311e169010aSmrg newlib_search_path= 5312e169010aSmrg need_relink=no # whether we're linking any uninstalled libtool libraries 5313e169010aSmrg notinst_deplibs= # not-installed libtool libraries 5314e169010aSmrg notinst_path= # paths that contain not-installed libtool libraries 5315e169010aSmrg 5316e169010aSmrg case $linkmode in 5317e169010aSmrg lib) 5318e169010aSmrg passes="conv dlpreopen link" 5319e169010aSmrg for file in $dlfiles $dlprefiles; do 5320e169010aSmrg case $file in 5321e169010aSmrg *.la) ;; 5322e169010aSmrg *) 5323e169010aSmrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 5324e169010aSmrg ;; 5325e169010aSmrg esac 5326e169010aSmrg done 5327e169010aSmrg ;; 5328e169010aSmrg prog) 5329e169010aSmrg compile_deplibs= 5330e169010aSmrg finalize_deplibs= 5331e169010aSmrg alldeplibs=no 5332e169010aSmrg newdlfiles= 5333e169010aSmrg newdlprefiles= 5334e169010aSmrg passes="conv scan dlopen dlpreopen link" 5335e169010aSmrg ;; 5336e169010aSmrg *) passes="conv" 5337e169010aSmrg ;; 5338e169010aSmrg esac 5339e169010aSmrg 5340e169010aSmrg for pass in $passes; do 5341e169010aSmrg # The preopen pass in lib mode reverses $deplibs; put it back here 5342e169010aSmrg # so that -L comes before libs that need it for instance... 5343e169010aSmrg if test "$linkmode,$pass" = "lib,link"; then 5344e169010aSmrg ## FIXME: Find the place where the list is rebuilt in the wrong 5345e169010aSmrg ## order, and fix it there properly 5346e169010aSmrg tmp_deplibs= 5347e169010aSmrg for deplib in $deplibs; do 5348e169010aSmrg tmp_deplibs="$deplib $tmp_deplibs" 5349e169010aSmrg done 5350e169010aSmrg deplibs="$tmp_deplibs" 5351e169010aSmrg fi 5352e169010aSmrg 5353e169010aSmrg if test "$linkmode,$pass" = "lib,link" || 5354e169010aSmrg test "$linkmode,$pass" = "prog,scan"; then 5355e169010aSmrg libs="$deplibs" 5356e169010aSmrg deplibs= 5357e169010aSmrg fi 5358e169010aSmrg if test "$linkmode" = prog; then 5359e169010aSmrg case $pass in 5360e169010aSmrg dlopen) libs="$dlfiles" ;; 5361e169010aSmrg dlpreopen) libs="$dlprefiles" ;; 5362e169010aSmrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 5363e169010aSmrg esac 5364e169010aSmrg fi 5365e169010aSmrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 5366e169010aSmrg # Collect and forward deplibs of preopened libtool libs 5367e169010aSmrg for lib in $dlprefiles; do 5368e169010aSmrg # Ignore non-libtool-libs 5369e169010aSmrg dependency_libs= 5370e169010aSmrg case $lib in 5371e169010aSmrg *.la) func_source "$lib" ;; 5372e169010aSmrg esac 5373e169010aSmrg 5374e169010aSmrg # Collect preopened libtool deplibs, except any this library 5375e169010aSmrg # has declared as weak libs 5376e169010aSmrg for deplib in $dependency_libs; do 5377e8ead290Smrg func_basename "$deplib" 5378e8ead290Smrg deplib_base=$func_basename_result 5379e169010aSmrg case " $weak_libs " in 5380e169010aSmrg *" $deplib_base "*) ;; 5381e169010aSmrg *) deplibs="$deplibs $deplib" ;; 5382e169010aSmrg esac 5383e169010aSmrg done 5384e169010aSmrg done 5385e169010aSmrg libs="$dlprefiles" 5386e169010aSmrg fi 5387e169010aSmrg if test "$pass" = dlopen; then 5388e169010aSmrg # Collect dlpreopened libraries 5389e169010aSmrg save_deplibs="$deplibs" 5390e169010aSmrg deplibs= 5391e169010aSmrg fi 5392e169010aSmrg 5393e169010aSmrg for deplib in $libs; do 5394e169010aSmrg lib= 5395e169010aSmrg found=no 5396e169010aSmrg case $deplib in 5397e169010aSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 5398e169010aSmrg if test "$linkmode,$pass" = "prog,link"; then 5399e169010aSmrg compile_deplibs="$deplib $compile_deplibs" 5400e169010aSmrg finalize_deplibs="$deplib $finalize_deplibs" 5401e169010aSmrg else 5402e169010aSmrg compiler_flags="$compiler_flags $deplib" 5403e169010aSmrg if test "$linkmode" = lib ; then 5404e169010aSmrg case "$new_inherited_linker_flags " in 5405e169010aSmrg *" $deplib "*) ;; 5406e169010aSmrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 5407e169010aSmrg esac 5408e169010aSmrg fi 5409e169010aSmrg fi 5410e169010aSmrg continue 5411e169010aSmrg ;; 5412e169010aSmrg -l*) 5413e169010aSmrg if test "$linkmode" != lib && test "$linkmode" != prog; then 5414e169010aSmrg func_warning "\`-l' is ignored for archives/objects" 5415e169010aSmrg continue 5416e169010aSmrg fi 5417e169010aSmrg func_stripname '-l' '' "$deplib" 5418e169010aSmrg name=$func_stripname_result 5419e169010aSmrg if test "$linkmode" = lib; then 5420e169010aSmrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 5421e169010aSmrg else 5422e169010aSmrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 5423e169010aSmrg fi 5424e169010aSmrg for searchdir in $searchdirs; do 5425e169010aSmrg for search_ext in .la $std_shrext .so .a; do 5426e169010aSmrg # Search the libtool library 5427e169010aSmrg lib="$searchdir/lib${name}${search_ext}" 5428e169010aSmrg if test -f "$lib"; then 5429e169010aSmrg if test "$search_ext" = ".la"; then 5430e169010aSmrg found=yes 5431e169010aSmrg else 5432e169010aSmrg found=no 5433e169010aSmrg fi 5434e169010aSmrg break 2 5435e169010aSmrg fi 5436e169010aSmrg done 5437e169010aSmrg done 5438e169010aSmrg if test "$found" != yes; then 5439e169010aSmrg # deplib doesn't seem to be a libtool library 5440e169010aSmrg if test "$linkmode,$pass" = "prog,link"; then 5441e169010aSmrg compile_deplibs="$deplib $compile_deplibs" 5442e169010aSmrg finalize_deplibs="$deplib $finalize_deplibs" 5443e169010aSmrg else 5444e169010aSmrg deplibs="$deplib $deplibs" 5445e169010aSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 5446e169010aSmrg fi 5447e169010aSmrg continue 5448e169010aSmrg else # deplib is a libtool library 5449e169010aSmrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 5450e169010aSmrg # We need to do some special things here, and not later. 5451e169010aSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 5452e169010aSmrg case " $predeps $postdeps " in 5453e169010aSmrg *" $deplib "*) 5454e169010aSmrg if func_lalib_p "$lib"; then 5455e169010aSmrg library_names= 5456e169010aSmrg old_library= 5457e169010aSmrg func_source "$lib" 5458e169010aSmrg for l in $old_library $library_names; do 5459e169010aSmrg ll="$l" 5460e169010aSmrg done 5461e169010aSmrg if test "X$ll" = "X$old_library" ; then # only static version available 5462e169010aSmrg found=no 5463e169010aSmrg func_dirname "$lib" "" "." 5464e169010aSmrg ladir="$func_dirname_result" 5465e169010aSmrg lib=$ladir/$old_library 5466e169010aSmrg if test "$linkmode,$pass" = "prog,link"; then 5467e169010aSmrg compile_deplibs="$deplib $compile_deplibs" 5468e169010aSmrg finalize_deplibs="$deplib $finalize_deplibs" 5469e169010aSmrg else 5470e169010aSmrg deplibs="$deplib $deplibs" 5471e169010aSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 5472e169010aSmrg fi 5473e169010aSmrg continue 5474e169010aSmrg fi 5475e169010aSmrg fi 5476e169010aSmrg ;; 5477e169010aSmrg *) ;; 5478e169010aSmrg esac 5479e169010aSmrg fi 5480e169010aSmrg fi 5481e169010aSmrg ;; # -l 5482e169010aSmrg *.ltframework) 5483e169010aSmrg if test "$linkmode,$pass" = "prog,link"; then 5484e169010aSmrg compile_deplibs="$deplib $compile_deplibs" 5485e169010aSmrg finalize_deplibs="$deplib $finalize_deplibs" 5486e169010aSmrg else 5487e169010aSmrg deplibs="$deplib $deplibs" 5488e169010aSmrg if test "$linkmode" = lib ; then 5489e169010aSmrg case "$new_inherited_linker_flags " in 5490e169010aSmrg *" $deplib "*) ;; 5491e169010aSmrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 5492e169010aSmrg esac 5493e169010aSmrg fi 5494e169010aSmrg fi 5495e169010aSmrg continue 5496e169010aSmrg ;; 5497e169010aSmrg -L*) 5498e169010aSmrg case $linkmode in 5499e169010aSmrg lib) 5500e169010aSmrg deplibs="$deplib $deplibs" 5501e169010aSmrg test "$pass" = conv && continue 5502e169010aSmrg newdependency_libs="$deplib $newdependency_libs" 5503e169010aSmrg func_stripname '-L' '' "$deplib" 5504e169010aSmrg newlib_search_path="$newlib_search_path $func_stripname_result" 5505e169010aSmrg ;; 5506e169010aSmrg prog) 5507e169010aSmrg if test "$pass" = conv; then 5508e169010aSmrg deplibs="$deplib $deplibs" 5509e169010aSmrg continue 5510e169010aSmrg fi 5511e169010aSmrg if test "$pass" = scan; then 5512e169010aSmrg deplibs="$deplib $deplibs" 5513e169010aSmrg else 5514e169010aSmrg compile_deplibs="$deplib $compile_deplibs" 5515e169010aSmrg finalize_deplibs="$deplib $finalize_deplibs" 5516e169010aSmrg fi 5517e169010aSmrg func_stripname '-L' '' "$deplib" 5518e169010aSmrg newlib_search_path="$newlib_search_path $func_stripname_result" 5519e169010aSmrg ;; 5520e169010aSmrg *) 5521e169010aSmrg func_warning "\`-L' is ignored for archives/objects" 5522e169010aSmrg ;; 5523e169010aSmrg esac # linkmode 5524e169010aSmrg continue 5525e169010aSmrg ;; # -L 5526e169010aSmrg -R*) 5527e169010aSmrg if test "$pass" = link; then 5528e169010aSmrg func_stripname '-R' '' "$deplib" 5529e169010aSmrg dir=$func_stripname_result 5530e169010aSmrg # Make sure the xrpath contains only unique directories. 5531e169010aSmrg case "$xrpath " in 5532e169010aSmrg *" $dir "*) ;; 5533e169010aSmrg *) xrpath="$xrpath $dir" ;; 5534e169010aSmrg esac 5535e169010aSmrg fi 5536e169010aSmrg deplibs="$deplib $deplibs" 5537e169010aSmrg continue 5538e169010aSmrg ;; 5539e169010aSmrg *.la) lib="$deplib" ;; 5540e169010aSmrg *.$libext) 5541e169010aSmrg if test "$pass" = conv; then 5542e169010aSmrg deplibs="$deplib $deplibs" 5543e169010aSmrg continue 5544e169010aSmrg fi 5545e169010aSmrg case $linkmode in 5546e169010aSmrg lib) 5547e169010aSmrg # Linking convenience modules into shared libraries is allowed, 5548e169010aSmrg # but linking other static libraries is non-portable. 5549e169010aSmrg case " $dlpreconveniencelibs " in 5550e169010aSmrg *" $deplib "*) ;; 5551e169010aSmrg *) 5552e169010aSmrg valid_a_lib=no 5553e169010aSmrg case $deplibs_check_method in 5554e169010aSmrg match_pattern*) 5555e169010aSmrg set dummy $deplibs_check_method; shift 5556e169010aSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 5557e8ead290Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 5558e169010aSmrg | $EGREP "$match_pattern_regex" > /dev/null; then 5559e169010aSmrg valid_a_lib=yes 5560e169010aSmrg fi 5561e169010aSmrg ;; 5562e169010aSmrg pass_all) 5563e169010aSmrg valid_a_lib=yes 5564e169010aSmrg ;; 5565e169010aSmrg esac 5566e169010aSmrg if test "$valid_a_lib" != yes; then 5567e8ead290Smrg echo 5568e169010aSmrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 5569e8ead290Smrg echo "*** I have the capability to make that library automatically link in when" 5570e8ead290Smrg echo "*** you link to this library. But I can only do this if you have a" 5571e8ead290Smrg echo "*** shared version of the library, which you do not appear to have" 5572e8ead290Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 5573e8ead290Smrg echo "*** that it is just a static archive that I should not use here." 5574e169010aSmrg else 5575e8ead290Smrg echo 5576e169010aSmrg $ECHO "*** Warning: Linking the shared library $output against the" 5577e169010aSmrg $ECHO "*** static library $deplib is not portable!" 5578e169010aSmrg deplibs="$deplib $deplibs" 5579e169010aSmrg fi 5580e169010aSmrg ;; 5581e169010aSmrg esac 5582e169010aSmrg continue 5583e169010aSmrg ;; 5584e169010aSmrg prog) 5585e169010aSmrg if test "$pass" != link; then 5586e169010aSmrg deplibs="$deplib $deplibs" 5587e169010aSmrg else 5588e169010aSmrg compile_deplibs="$deplib $compile_deplibs" 5589e169010aSmrg finalize_deplibs="$deplib $finalize_deplibs" 5590e169010aSmrg fi 5591e169010aSmrg continue 5592e169010aSmrg ;; 5593e169010aSmrg esac # linkmode 5594e169010aSmrg ;; # *.$libext 5595e169010aSmrg *.lo | *.$objext) 5596e169010aSmrg if test "$pass" = conv; then 5597e169010aSmrg deplibs="$deplib $deplibs" 5598e169010aSmrg elif test "$linkmode" = prog; then 5599e169010aSmrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 5600e169010aSmrg # If there is no dlopen support or we're linking statically, 5601e169010aSmrg # we need to preload. 5602e169010aSmrg newdlprefiles="$newdlprefiles $deplib" 5603e169010aSmrg compile_deplibs="$deplib $compile_deplibs" 5604e169010aSmrg finalize_deplibs="$deplib $finalize_deplibs" 5605e169010aSmrg else 5606e169010aSmrg newdlfiles="$newdlfiles $deplib" 5607e169010aSmrg fi 5608e169010aSmrg fi 5609e169010aSmrg continue 5610e169010aSmrg ;; 5611e169010aSmrg %DEPLIBS%) 5612e169010aSmrg alldeplibs=yes 5613e169010aSmrg continue 5614e169010aSmrg ;; 5615e169010aSmrg esac # case $deplib 5616e169010aSmrg 5617e169010aSmrg if test "$found" = yes || test -f "$lib"; then : 5618e169010aSmrg else 5619e169010aSmrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 5620e169010aSmrg fi 5621e169010aSmrg 5622e169010aSmrg # Check to see that this really is a libtool archive. 5623e169010aSmrg func_lalib_unsafe_p "$lib" \ 5624e169010aSmrg || func_fatal_error "\`$lib' is not a valid libtool archive" 5625e169010aSmrg 5626e169010aSmrg func_dirname "$lib" "" "." 5627e169010aSmrg ladir="$func_dirname_result" 5628e169010aSmrg 5629e169010aSmrg dlname= 5630e169010aSmrg dlopen= 5631e169010aSmrg dlpreopen= 5632e169010aSmrg libdir= 5633e169010aSmrg library_names= 5634e169010aSmrg old_library= 5635e169010aSmrg inherited_linker_flags= 5636e169010aSmrg # If the library was installed with an old release of libtool, 5637e169010aSmrg # it will not redefine variables installed, or shouldnotlink 5638e169010aSmrg installed=yes 5639e169010aSmrg shouldnotlink=no 5640e169010aSmrg avoidtemprpath= 5641e169010aSmrg 5642e169010aSmrg 5643e169010aSmrg # Read the .la file 5644e169010aSmrg func_source "$lib" 5645e169010aSmrg 5646e169010aSmrg # Convert "-framework foo" to "foo.ltframework" 5647e169010aSmrg if test -n "$inherited_linker_flags"; then 5648e8ead290Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 5649e169010aSmrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 5650e169010aSmrg case " $new_inherited_linker_flags " in 5651e169010aSmrg *" $tmp_inherited_linker_flag "*) ;; 5652e169010aSmrg *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; 5653e169010aSmrg esac 5654e169010aSmrg done 5655e169010aSmrg fi 5656e8ead290Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 5657e169010aSmrg if test "$linkmode,$pass" = "lib,link" || 5658e169010aSmrg test "$linkmode,$pass" = "prog,scan" || 5659e169010aSmrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 5660e169010aSmrg test -n "$dlopen" && dlfiles="$dlfiles $dlopen" 5661e169010aSmrg test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" 5662e169010aSmrg fi 5663e169010aSmrg 5664e169010aSmrg if test "$pass" = conv; then 5665e169010aSmrg # Only check for convenience libraries 5666e169010aSmrg deplibs="$lib $deplibs" 5667e169010aSmrg if test -z "$libdir"; then 5668e169010aSmrg if test -z "$old_library"; then 5669e169010aSmrg func_fatal_error "cannot find name of link library for \`$lib'" 5670e169010aSmrg fi 5671e169010aSmrg # It is a libtool convenience library, so add in its objects. 5672e169010aSmrg convenience="$convenience $ladir/$objdir/$old_library" 5673e169010aSmrg old_convenience="$old_convenience $ladir/$objdir/$old_library" 5674e169010aSmrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 5675e169010aSmrg func_fatal_error "\`$lib' is not a convenience library" 5676e169010aSmrg fi 5677e169010aSmrg tmp_libs= 5678e169010aSmrg for deplib in $dependency_libs; do 5679e169010aSmrg deplibs="$deplib $deplibs" 5680e169010aSmrg if $opt_duplicate_deps ; then 5681e169010aSmrg case "$tmp_libs " in 5682e169010aSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5683e169010aSmrg esac 5684e169010aSmrg fi 5685e169010aSmrg tmp_libs="$tmp_libs $deplib" 5686e169010aSmrg done 5687e169010aSmrg continue 5688e169010aSmrg fi # $pass = conv 5689e169010aSmrg 5690e169010aSmrg 5691e169010aSmrg # Get the name of the library we link against. 5692e169010aSmrg linklib= 5693e169010aSmrg for l in $old_library $library_names; do 5694e169010aSmrg linklib="$l" 5695e169010aSmrg done 5696e169010aSmrg if test -z "$linklib"; then 5697e169010aSmrg func_fatal_error "cannot find name of link library for \`$lib'" 5698e169010aSmrg fi 5699e169010aSmrg 5700e169010aSmrg # This library was specified with -dlopen. 5701e169010aSmrg if test "$pass" = dlopen; then 5702e169010aSmrg if test -z "$libdir"; then 5703e169010aSmrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 5704e169010aSmrg fi 5705e169010aSmrg if test -z "$dlname" || 5706e169010aSmrg test "$dlopen_support" != yes || 5707e169010aSmrg test "$build_libtool_libs" = no; then 5708e169010aSmrg # If there is no dlname, no dlopen support or we're linking 5709e169010aSmrg # statically, we need to preload. We also need to preload any 5710e169010aSmrg # dependent libraries so libltdl's deplib preloader doesn't 5711e169010aSmrg # bomb out in the load deplibs phase. 5712e169010aSmrg dlprefiles="$dlprefiles $lib $dependency_libs" 5713e169010aSmrg else 5714e169010aSmrg newdlfiles="$newdlfiles $lib" 5715e169010aSmrg fi 5716e169010aSmrg continue 5717e169010aSmrg fi # $pass = dlopen 5718e169010aSmrg 5719e169010aSmrg # We need an absolute path. 5720e169010aSmrg case $ladir in 5721e169010aSmrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 5722e169010aSmrg *) 5723e169010aSmrg abs_ladir=`cd "$ladir" && pwd` 5724e169010aSmrg if test -z "$abs_ladir"; then 5725e169010aSmrg func_warning "cannot determine absolute directory name of \`$ladir'" 5726e169010aSmrg func_warning "passing it literally to the linker, although it might fail" 5727e169010aSmrg abs_ladir="$ladir" 5728e169010aSmrg fi 5729e169010aSmrg ;; 5730e169010aSmrg esac 5731e169010aSmrg func_basename "$lib" 5732e169010aSmrg laname="$func_basename_result" 5733e169010aSmrg 5734e169010aSmrg # Find the relevant object directory and library name. 5735e169010aSmrg if test "X$installed" = Xyes; then 5736e169010aSmrg if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 5737e169010aSmrg func_warning "library \`$lib' was moved." 5738e169010aSmrg dir="$ladir" 5739e169010aSmrg absdir="$abs_ladir" 5740e169010aSmrg libdir="$abs_ladir" 5741e169010aSmrg else 5742e169010aSmrg dir="$libdir" 5743e169010aSmrg absdir="$libdir" 5744e169010aSmrg fi 5745e169010aSmrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 5746e169010aSmrg else 5747e169010aSmrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 5748e169010aSmrg dir="$ladir" 5749e169010aSmrg absdir="$abs_ladir" 5750e169010aSmrg # Remove this search path later 5751e169010aSmrg notinst_path="$notinst_path $abs_ladir" 5752e169010aSmrg else 5753e169010aSmrg dir="$ladir/$objdir" 5754e169010aSmrg absdir="$abs_ladir/$objdir" 5755e169010aSmrg # Remove this search path later 5756e169010aSmrg notinst_path="$notinst_path $abs_ladir" 5757e169010aSmrg fi 5758e169010aSmrg fi # $installed = yes 5759e169010aSmrg func_stripname 'lib' '.la' "$laname" 5760e169010aSmrg name=$func_stripname_result 5761e169010aSmrg 5762e169010aSmrg # This library was specified with -dlpreopen. 5763e169010aSmrg if test "$pass" = dlpreopen; then 5764e169010aSmrg if test -z "$libdir" && test "$linkmode" = prog; then 5765e169010aSmrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 5766e169010aSmrg fi 5767e169010aSmrg # Prefer using a static library (so that no silly _DYNAMIC symbols 5768e169010aSmrg # are required to link). 5769e169010aSmrg if test -n "$old_library"; then 5770e169010aSmrg newdlprefiles="$newdlprefiles $dir/$old_library" 5771e169010aSmrg # Keep a list of preopened convenience libraries to check 5772e169010aSmrg # that they are being used correctly in the link pass. 5773e169010aSmrg test -z "$libdir" && \ 5774e169010aSmrg dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" 5775e169010aSmrg # Otherwise, use the dlname, so that lt_dlopen finds it. 5776e169010aSmrg elif test -n "$dlname"; then 5777e169010aSmrg newdlprefiles="$newdlprefiles $dir/$dlname" 5778e169010aSmrg else 5779e169010aSmrg newdlprefiles="$newdlprefiles $dir/$linklib" 5780e169010aSmrg fi 5781e169010aSmrg fi # $pass = dlpreopen 5782e169010aSmrg 5783e169010aSmrg if test -z "$libdir"; then 5784e169010aSmrg # Link the convenience library 5785e169010aSmrg if test "$linkmode" = lib; then 5786e169010aSmrg deplibs="$dir/$old_library $deplibs" 5787e169010aSmrg elif test "$linkmode,$pass" = "prog,link"; then 5788e169010aSmrg compile_deplibs="$dir/$old_library $compile_deplibs" 5789e169010aSmrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 5790e169010aSmrg else 5791e169010aSmrg deplibs="$lib $deplibs" # used for prog,scan pass 5792e169010aSmrg fi 5793e169010aSmrg continue 5794e169010aSmrg fi 5795e169010aSmrg 5796e169010aSmrg 5797e169010aSmrg if test "$linkmode" = prog && test "$pass" != link; then 5798e169010aSmrg newlib_search_path="$newlib_search_path $ladir" 5799e169010aSmrg deplibs="$lib $deplibs" 5800e169010aSmrg 5801e169010aSmrg linkalldeplibs=no 5802e169010aSmrg if test "$link_all_deplibs" != no || test -z "$library_names" || 5803e169010aSmrg test "$build_libtool_libs" = no; then 5804e169010aSmrg linkalldeplibs=yes 5805e169010aSmrg fi 5806e169010aSmrg 5807e169010aSmrg tmp_libs= 5808e169010aSmrg for deplib in $dependency_libs; do 5809e169010aSmrg case $deplib in 5810e169010aSmrg -L*) func_stripname '-L' '' "$deplib" 5811e169010aSmrg newlib_search_path="$newlib_search_path $func_stripname_result" 5812e169010aSmrg ;; 5813e169010aSmrg esac 5814e169010aSmrg # Need to link against all dependency_libs? 5815e169010aSmrg if test "$linkalldeplibs" = yes; then 5816e169010aSmrg deplibs="$deplib $deplibs" 5817e169010aSmrg else 5818e169010aSmrg # Need to hardcode shared library paths 5819e169010aSmrg # or/and link against static libraries 5820e169010aSmrg newdependency_libs="$deplib $newdependency_libs" 5821e169010aSmrg fi 5822e169010aSmrg if $opt_duplicate_deps ; then 5823e169010aSmrg case "$tmp_libs " in 5824e169010aSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 5825e169010aSmrg esac 5826e169010aSmrg fi 5827e169010aSmrg tmp_libs="$tmp_libs $deplib" 5828e169010aSmrg done # for deplib 5829e169010aSmrg continue 5830e169010aSmrg fi # $linkmode = prog... 5831e169010aSmrg 5832e169010aSmrg if test "$linkmode,$pass" = "prog,link"; then 5833e169010aSmrg if test -n "$library_names" && 5834e169010aSmrg { { test "$prefer_static_libs" = no || 5835e169010aSmrg test "$prefer_static_libs,$installed" = "built,yes"; } || 5836e169010aSmrg test -z "$old_library"; }; then 5837e169010aSmrg # We need to hardcode the library path 5838e169010aSmrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 5839e169010aSmrg # Make sure the rpath contains only unique directories. 5840e169010aSmrg case "$temp_rpath:" in 5841e169010aSmrg *"$absdir:"*) ;; 5842e169010aSmrg *) temp_rpath="$temp_rpath$absdir:" ;; 5843e169010aSmrg esac 5844e169010aSmrg fi 5845e169010aSmrg 5846e169010aSmrg # Hardcode the library path. 5847e169010aSmrg # Skip directories that are in the system default run-time 5848e169010aSmrg # search path. 5849e169010aSmrg case " $sys_lib_dlsearch_path " in 5850e169010aSmrg *" $absdir "*) ;; 5851e169010aSmrg *) 5852e169010aSmrg case "$compile_rpath " in 5853e169010aSmrg *" $absdir "*) ;; 5854e169010aSmrg *) compile_rpath="$compile_rpath $absdir" 5855e169010aSmrg esac 5856e169010aSmrg ;; 5857e169010aSmrg esac 5858e169010aSmrg case " $sys_lib_dlsearch_path " in 5859e169010aSmrg *" $libdir "*) ;; 5860e169010aSmrg *) 5861e169010aSmrg case "$finalize_rpath " in 5862e169010aSmrg *" $libdir "*) ;; 5863e169010aSmrg *) finalize_rpath="$finalize_rpath $libdir" 5864e169010aSmrg esac 5865e169010aSmrg ;; 5866e169010aSmrg esac 5867e169010aSmrg fi # $linkmode,$pass = prog,link... 5868e169010aSmrg 5869e169010aSmrg if test "$alldeplibs" = yes && 5870e169010aSmrg { test "$deplibs_check_method" = pass_all || 5871e169010aSmrg { test "$build_libtool_libs" = yes && 5872e169010aSmrg test -n "$library_names"; }; }; then 5873e169010aSmrg # We only need to search for static libraries 5874e169010aSmrg continue 5875e169010aSmrg fi 5876e169010aSmrg fi 5877e169010aSmrg 5878e169010aSmrg link_static=no # Whether the deplib will be linked statically 5879e169010aSmrg use_static_libs=$prefer_static_libs 5880e169010aSmrg if test "$use_static_libs" = built && test "$installed" = yes; then 5881e169010aSmrg use_static_libs=no 5882e169010aSmrg fi 5883e169010aSmrg if test -n "$library_names" && 5884e169010aSmrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 5885e169010aSmrg case $host in 5886e169010aSmrg *cygwin* | *mingw* | *cegcc*) 5887e169010aSmrg # No point in relinking DLLs because paths are not encoded 5888e169010aSmrg notinst_deplibs="$notinst_deplibs $lib" 5889e169010aSmrg need_relink=no 5890e169010aSmrg ;; 5891e169010aSmrg *) 5892e169010aSmrg if test "$installed" = no; then 5893e169010aSmrg notinst_deplibs="$notinst_deplibs $lib" 5894e169010aSmrg need_relink=yes 5895e169010aSmrg fi 5896e169010aSmrg ;; 5897e169010aSmrg esac 5898e169010aSmrg # This is a shared library 5899e169010aSmrg 5900e169010aSmrg # Warn about portability, can't link against -module's on some 5901e169010aSmrg # systems (darwin). Don't bleat about dlopened modules though! 5902e169010aSmrg dlopenmodule="" 5903e169010aSmrg for dlpremoduletest in $dlprefiles; do 5904e169010aSmrg if test "X$dlpremoduletest" = "X$lib"; then 5905e169010aSmrg dlopenmodule="$dlpremoduletest" 5906e169010aSmrg break 5907e169010aSmrg fi 5908e169010aSmrg done 5909e169010aSmrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 5910e8ead290Smrg echo 5911e169010aSmrg if test "$linkmode" = prog; then 5912e169010aSmrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 5913e169010aSmrg else 5914e169010aSmrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 5915e169010aSmrg fi 5916e169010aSmrg $ECHO "*** $linklib is not portable!" 5917e169010aSmrg fi 5918e169010aSmrg if test "$linkmode" = lib && 5919e169010aSmrg test "$hardcode_into_libs" = yes; then 5920e169010aSmrg # Hardcode the library path. 5921e169010aSmrg # Skip directories that are in the system default run-time 5922e169010aSmrg # search path. 5923e169010aSmrg case " $sys_lib_dlsearch_path " in 5924e169010aSmrg *" $absdir "*) ;; 5925e169010aSmrg *) 5926e169010aSmrg case "$compile_rpath " in 5927e169010aSmrg *" $absdir "*) ;; 5928e169010aSmrg *) compile_rpath="$compile_rpath $absdir" 5929e169010aSmrg esac 5930e169010aSmrg ;; 5931e169010aSmrg esac 5932e169010aSmrg case " $sys_lib_dlsearch_path " in 5933e169010aSmrg *" $libdir "*) ;; 5934e169010aSmrg *) 5935e169010aSmrg case "$finalize_rpath " in 5936e169010aSmrg *" $libdir "*) ;; 5937e169010aSmrg *) finalize_rpath="$finalize_rpath $libdir" 5938e169010aSmrg esac 5939e169010aSmrg ;; 5940e169010aSmrg esac 5941e169010aSmrg fi 5942e169010aSmrg 5943e169010aSmrg if test -n "$old_archive_from_expsyms_cmds"; then 5944e169010aSmrg # figure out the soname 5945e169010aSmrg set dummy $library_names 5946e169010aSmrg shift 5947e169010aSmrg realname="$1" 5948e169010aSmrg shift 5949e169010aSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 5950e169010aSmrg # use dlname if we got it. it's perfectly good, no? 5951e169010aSmrg if test -n "$dlname"; then 5952e169010aSmrg soname="$dlname" 5953e169010aSmrg elif test -n "$soname_spec"; then 5954e169010aSmrg # bleh windows 5955e169010aSmrg case $host in 5956e169010aSmrg *cygwin* | mingw* | *cegcc*) 5957e169010aSmrg func_arith $current - $age 5958e169010aSmrg major=$func_arith_result 5959e169010aSmrg versuffix="-$major" 5960e169010aSmrg ;; 5961e169010aSmrg esac 5962e169010aSmrg eval soname=\"$soname_spec\" 5963e169010aSmrg else 5964e169010aSmrg soname="$realname" 5965e169010aSmrg fi 5966e169010aSmrg 5967e169010aSmrg # Make a new name for the extract_expsyms_cmds to use 5968e169010aSmrg soroot="$soname" 5969e169010aSmrg func_basename "$soroot" 5970e169010aSmrg soname="$func_basename_result" 5971e169010aSmrg func_stripname 'lib' '.dll' "$soname" 5972e169010aSmrg newlib=libimp-$func_stripname_result.a 5973e169010aSmrg 5974e169010aSmrg # If the library has no export list, then create one now 5975e169010aSmrg if test -f "$output_objdir/$soname-def"; then : 5976e169010aSmrg else 5977e169010aSmrg func_verbose "extracting exported symbol list from \`$soname'" 5978e169010aSmrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 5979e169010aSmrg fi 5980e169010aSmrg 5981e169010aSmrg # Create $newlib 5982e169010aSmrg if test -f "$output_objdir/$newlib"; then :; else 5983e169010aSmrg func_verbose "generating import library for \`$soname'" 5984e169010aSmrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 5985e169010aSmrg fi 5986e169010aSmrg # make sure the library variables are pointing to the new library 5987e169010aSmrg dir=$output_objdir 5988e169010aSmrg linklib=$newlib 5989e169010aSmrg fi # test -n "$old_archive_from_expsyms_cmds" 5990e169010aSmrg 5991e169010aSmrg if test "$linkmode" = prog || test "$mode" != relink; then 5992e169010aSmrg add_shlibpath= 5993e169010aSmrg add_dir= 5994e169010aSmrg add= 5995e169010aSmrg lib_linked=yes 5996e169010aSmrg case $hardcode_action in 5997e169010aSmrg immediate | unsupported) 5998e169010aSmrg if test "$hardcode_direct" = no; then 5999e169010aSmrg add="$dir/$linklib" 6000e169010aSmrg case $host in 6001e169010aSmrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 6002e169010aSmrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6003e169010aSmrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 6004e169010aSmrg *-*-unixware7*) add_dir="-L$dir" ;; 6005e169010aSmrg *-*-darwin* ) 6006e169010aSmrg # if the lib is a (non-dlopened) module then we can not 6007e169010aSmrg # link against it, someone is ignoring the earlier warnings 6008e169010aSmrg if /usr/bin/file -L $add 2> /dev/null | 6009e169010aSmrg $GREP ": [^:]* bundle" >/dev/null ; then 6010e169010aSmrg if test "X$dlopenmodule" != "X$lib"; then 6011e169010aSmrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 6012e169010aSmrg if test -z "$old_library" ; then 6013e8ead290Smrg echo 6014e8ead290Smrg echo "*** And there doesn't seem to be a static archive available" 6015e8ead290Smrg echo "*** The link will probably fail, sorry" 6016e169010aSmrg else 6017e169010aSmrg add="$dir/$old_library" 6018e169010aSmrg fi 6019e169010aSmrg elif test -n "$old_library"; then 6020e169010aSmrg add="$dir/$old_library" 6021e169010aSmrg fi 6022e169010aSmrg fi 6023e169010aSmrg esac 6024e169010aSmrg elif test "$hardcode_minus_L" = no; then 6025e169010aSmrg case $host in 6026e169010aSmrg *-*-sunos*) add_shlibpath="$dir" ;; 6027e169010aSmrg esac 6028e169010aSmrg add_dir="-L$dir" 6029e169010aSmrg add="-l$name" 6030e169010aSmrg elif test "$hardcode_shlibpath_var" = no; then 6031e169010aSmrg add_shlibpath="$dir" 6032e169010aSmrg add="-l$name" 6033e169010aSmrg else 6034e169010aSmrg lib_linked=no 6035e169010aSmrg fi 6036e169010aSmrg ;; 6037e169010aSmrg relink) 6038e169010aSmrg if test "$hardcode_direct" = yes && 6039e169010aSmrg test "$hardcode_direct_absolute" = no; then 6040e169010aSmrg add="$dir/$linklib" 6041e169010aSmrg elif test "$hardcode_minus_L" = yes; then 6042e169010aSmrg add_dir="-L$dir" 6043e169010aSmrg # Try looking first in the location we're being installed to. 6044e169010aSmrg if test -n "$inst_prefix_dir"; then 6045e169010aSmrg case $libdir in 6046e169010aSmrg [\\/]*) 6047e169010aSmrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 6048e169010aSmrg ;; 6049e169010aSmrg esac 6050e169010aSmrg fi 6051e169010aSmrg add="-l$name" 6052e169010aSmrg elif test "$hardcode_shlibpath_var" = yes; then 6053e169010aSmrg add_shlibpath="$dir" 6054e169010aSmrg add="-l$name" 6055e169010aSmrg else 6056e169010aSmrg lib_linked=no 6057e169010aSmrg fi 6058e169010aSmrg ;; 6059e169010aSmrg *) lib_linked=no ;; 6060e169010aSmrg esac 6061e169010aSmrg 6062e169010aSmrg if test "$lib_linked" != yes; then 6063e169010aSmrg func_fatal_configuration "unsupported hardcode properties" 6064e169010aSmrg fi 6065e169010aSmrg 6066e169010aSmrg if test -n "$add_shlibpath"; then 6067e169010aSmrg case :$compile_shlibpath: in 6068e169010aSmrg *":$add_shlibpath:"*) ;; 6069e169010aSmrg *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; 6070e169010aSmrg esac 6071e169010aSmrg fi 6072e169010aSmrg if test "$linkmode" = prog; then 6073e169010aSmrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 6074e169010aSmrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 6075e169010aSmrg else 6076e169010aSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6077e169010aSmrg test -n "$add" && deplibs="$add $deplibs" 6078e169010aSmrg if test "$hardcode_direct" != yes && 6079e169010aSmrg test "$hardcode_minus_L" != yes && 6080e169010aSmrg test "$hardcode_shlibpath_var" = yes; then 6081e169010aSmrg case :$finalize_shlibpath: in 6082e169010aSmrg *":$libdir:"*) ;; 6083e169010aSmrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 6084e169010aSmrg esac 6085e169010aSmrg fi 6086e169010aSmrg fi 6087e169010aSmrg fi 6088e169010aSmrg 6089e169010aSmrg if test "$linkmode" = prog || test "$mode" = relink; then 6090e169010aSmrg add_shlibpath= 6091e169010aSmrg add_dir= 6092e169010aSmrg add= 6093e169010aSmrg # Finalize command for both is simple: just hardcode it. 6094e169010aSmrg if test "$hardcode_direct" = yes && 6095e169010aSmrg test "$hardcode_direct_absolute" = no; then 6096e169010aSmrg add="$libdir/$linklib" 6097e169010aSmrg elif test "$hardcode_minus_L" = yes; then 6098e169010aSmrg add_dir="-L$libdir" 6099e169010aSmrg add="-l$name" 6100e169010aSmrg elif test "$hardcode_shlibpath_var" = yes; then 6101e169010aSmrg case :$finalize_shlibpath: in 6102e169010aSmrg *":$libdir:"*) ;; 6103e169010aSmrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 6104e169010aSmrg esac 6105e169010aSmrg add="-l$name" 6106e169010aSmrg elif test "$hardcode_automatic" = yes; then 6107e169010aSmrg if test -n "$inst_prefix_dir" && 6108e169010aSmrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 6109e169010aSmrg add="$inst_prefix_dir$libdir/$linklib" 6110e169010aSmrg else 6111e169010aSmrg add="$libdir/$linklib" 6112e169010aSmrg fi 6113e169010aSmrg else 6114e169010aSmrg # We cannot seem to hardcode it, guess we'll fake it. 6115e169010aSmrg add_dir="-L$libdir" 6116e169010aSmrg # Try looking first in the location we're being installed to. 6117e169010aSmrg if test -n "$inst_prefix_dir"; then 6118e169010aSmrg case $libdir in 6119e169010aSmrg [\\/]*) 6120e169010aSmrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 6121e169010aSmrg ;; 6122e169010aSmrg esac 6123e169010aSmrg fi 6124e169010aSmrg add="-l$name" 6125e169010aSmrg fi 6126e169010aSmrg 6127e169010aSmrg if test "$linkmode" = prog; then 6128e169010aSmrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 6129e169010aSmrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 6130e169010aSmrg else 6131e169010aSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6132e169010aSmrg test -n "$add" && deplibs="$add $deplibs" 6133e169010aSmrg fi 6134e169010aSmrg fi 6135e169010aSmrg elif test "$linkmode" = prog; then 6136e169010aSmrg # Here we assume that one of hardcode_direct or hardcode_minus_L 6137e169010aSmrg # is not unsupported. This is valid on all known static and 6138e169010aSmrg # shared platforms. 6139e169010aSmrg if test "$hardcode_direct" != unsupported; then 6140e169010aSmrg test -n "$old_library" && linklib="$old_library" 6141e169010aSmrg compile_deplibs="$dir/$linklib $compile_deplibs" 6142e169010aSmrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 6143e169010aSmrg else 6144e169010aSmrg compile_deplibs="-l$name -L$dir $compile_deplibs" 6145e169010aSmrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 6146e169010aSmrg fi 6147e169010aSmrg elif test "$build_libtool_libs" = yes; then 6148e169010aSmrg # Not a shared library 6149e169010aSmrg if test "$deplibs_check_method" != pass_all; then 6150e169010aSmrg # We're trying link a shared library against a static one 6151e169010aSmrg # but the system doesn't support it. 6152e169010aSmrg 6153e169010aSmrg # Just print a warning and add the library to dependency_libs so 6154e169010aSmrg # that the program can be linked against the static library. 6155e8ead290Smrg echo 6156e169010aSmrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 6157e8ead290Smrg echo "*** I have the capability to make that library automatically link in when" 6158e8ead290Smrg echo "*** you link to this library. But I can only do this if you have a" 6159e8ead290Smrg echo "*** shared version of the library, which you do not appear to have." 6160e169010aSmrg if test "$module" = yes; then 6161e8ead290Smrg echo "*** But as you try to build a module library, libtool will still create " 6162e8ead290Smrg echo "*** a static module, that should work as long as the dlopening application" 6163e8ead290Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 6164e169010aSmrg if test -z "$global_symbol_pipe"; then 6165e8ead290Smrg echo 6166e8ead290Smrg echo "*** However, this would only work if libtool was able to extract symbol" 6167e8ead290Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 6168e8ead290Smrg echo "*** not find such a program. So, this module is probably useless." 6169e8ead290Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 6170e169010aSmrg fi 6171e169010aSmrg if test "$build_old_libs" = no; then 6172e169010aSmrg build_libtool_libs=module 6173e169010aSmrg build_old_libs=yes 6174e169010aSmrg else 6175e169010aSmrg build_libtool_libs=no 6176e169010aSmrg fi 6177e169010aSmrg fi 6178e169010aSmrg else 6179e169010aSmrg deplibs="$dir/$old_library $deplibs" 6180e169010aSmrg link_static=yes 6181e169010aSmrg fi 6182e169010aSmrg fi # link shared/static library? 6183e169010aSmrg 6184e169010aSmrg if test "$linkmode" = lib; then 6185e169010aSmrg if test -n "$dependency_libs" && 6186e169010aSmrg { test "$hardcode_into_libs" != yes || 6187e169010aSmrg test "$build_old_libs" = yes || 6188e169010aSmrg test "$link_static" = yes; }; then 6189e169010aSmrg # Extract -R from dependency_libs 6190e169010aSmrg temp_deplibs= 6191e169010aSmrg for libdir in $dependency_libs; do 6192e169010aSmrg case $libdir in 6193e169010aSmrg -R*) func_stripname '-R' '' "$libdir" 6194e169010aSmrg temp_xrpath=$func_stripname_result 6195e169010aSmrg case " $xrpath " in 6196e169010aSmrg *" $temp_xrpath "*) ;; 6197e169010aSmrg *) xrpath="$xrpath $temp_xrpath";; 6198e169010aSmrg esac;; 6199e169010aSmrg *) temp_deplibs="$temp_deplibs $libdir";; 6200e169010aSmrg esac 6201e169010aSmrg done 6202e169010aSmrg dependency_libs="$temp_deplibs" 6203e169010aSmrg fi 6204e169010aSmrg 6205e169010aSmrg newlib_search_path="$newlib_search_path $absdir" 6206e169010aSmrg # Link against this library 6207e169010aSmrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 6208e169010aSmrg # ... and its dependency_libs 6209e169010aSmrg tmp_libs= 6210e169010aSmrg for deplib in $dependency_libs; do 6211e169010aSmrg newdependency_libs="$deplib $newdependency_libs" 6212e169010aSmrg if $opt_duplicate_deps ; then 6213e169010aSmrg case "$tmp_libs " in 6214e169010aSmrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 6215e169010aSmrg esac 6216e169010aSmrg fi 6217e169010aSmrg tmp_libs="$tmp_libs $deplib" 6218e169010aSmrg done 6219e169010aSmrg 6220e169010aSmrg if test "$link_all_deplibs" != no; then 6221e169010aSmrg # Add the search paths of all dependency libraries 6222e169010aSmrg for deplib in $dependency_libs; do 6223e8ead290Smrg path= 6224e169010aSmrg case $deplib in 6225e169010aSmrg -L*) path="$deplib" ;; 6226e169010aSmrg *.la) 6227e169010aSmrg func_dirname "$deplib" "" "." 6228e169010aSmrg dir="$func_dirname_result" 6229e169010aSmrg # We need an absolute path. 6230e169010aSmrg case $dir in 6231e169010aSmrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 6232e169010aSmrg *) 6233e169010aSmrg absdir=`cd "$dir" && pwd` 6234e169010aSmrg if test -z "$absdir"; then 6235e169010aSmrg func_warning "cannot determine absolute directory name of \`$dir'" 6236e169010aSmrg absdir="$dir" 6237e169010aSmrg fi 6238e169010aSmrg ;; 6239e169010aSmrg esac 6240e169010aSmrg if $GREP "^installed=no" $deplib > /dev/null; then 6241e169010aSmrg case $host in 6242e169010aSmrg *-*-darwin*) 6243e169010aSmrg depdepl= 6244e169010aSmrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 6245e169010aSmrg if test -n "$deplibrary_names" ; then 6246e169010aSmrg for tmp in $deplibrary_names ; do 6247e169010aSmrg depdepl=$tmp 6248e169010aSmrg done 6249e169010aSmrg if test -f "$absdir/$objdir/$depdepl" ; then 6250e169010aSmrg depdepl="$absdir/$objdir/$depdepl" 6251e169010aSmrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 6252e169010aSmrg if test -z "$darwin_install_name"; then 6253e169010aSmrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 6254e169010aSmrg fi 6255e169010aSmrg compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 6256e169010aSmrg linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" 6257e169010aSmrg path= 6258e169010aSmrg fi 6259e169010aSmrg fi 6260e169010aSmrg ;; 6261e169010aSmrg *) 6262e169010aSmrg path="-L$absdir/$objdir" 6263e169010aSmrg ;; 6264e169010aSmrg esac 6265e169010aSmrg else 6266e169010aSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 6267e169010aSmrg test -z "$libdir" && \ 6268e169010aSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 6269e169010aSmrg test "$absdir" != "$libdir" && \ 6270e169010aSmrg func_warning "\`$deplib' seems to be moved" 6271e169010aSmrg 6272e169010aSmrg path="-L$absdir" 6273e169010aSmrg fi 6274e169010aSmrg ;; 6275e169010aSmrg esac 6276e169010aSmrg case " $deplibs " in 6277e169010aSmrg *" $path "*) ;; 6278e169010aSmrg *) deplibs="$path $deplibs" ;; 6279e169010aSmrg esac 6280e169010aSmrg done 6281e169010aSmrg fi # link_all_deplibs != no 6282e169010aSmrg fi # linkmode = lib 6283e169010aSmrg done # for deplib in $libs 6284e169010aSmrg if test "$pass" = link; then 6285e169010aSmrg if test "$linkmode" = "prog"; then 6286e169010aSmrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 6287e169010aSmrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 6288e169010aSmrg else 6289e8ead290Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 6290e169010aSmrg fi 6291e169010aSmrg fi 6292e169010aSmrg dependency_libs="$newdependency_libs" 6293e169010aSmrg if test "$pass" = dlpreopen; then 6294e169010aSmrg # Link the dlpreopened libraries before other libraries 6295e169010aSmrg for deplib in $save_deplibs; do 6296e169010aSmrg deplibs="$deplib $deplibs" 6297e169010aSmrg done 6298e169010aSmrg fi 6299e169010aSmrg if test "$pass" != dlopen; then 6300e169010aSmrg if test "$pass" != conv; then 6301e169010aSmrg # Make sure lib_search_path contains only unique directories. 6302e169010aSmrg lib_search_path= 6303e169010aSmrg for dir in $newlib_search_path; do 6304e169010aSmrg case "$lib_search_path " in 6305e169010aSmrg *" $dir "*) ;; 6306e169010aSmrg *) lib_search_path="$lib_search_path $dir" ;; 6307e169010aSmrg esac 6308e169010aSmrg done 6309e169010aSmrg newlib_search_path= 6310e169010aSmrg fi 6311e169010aSmrg 6312e169010aSmrg if test "$linkmode,$pass" != "prog,link"; then 6313e169010aSmrg vars="deplibs" 6314e169010aSmrg else 6315e169010aSmrg vars="compile_deplibs finalize_deplibs" 6316e169010aSmrg fi 6317e169010aSmrg for var in $vars dependency_libs; do 6318e169010aSmrg # Add libraries to $var in reverse order 6319e169010aSmrg eval tmp_libs=\"\$$var\" 6320e169010aSmrg new_libs= 6321e169010aSmrg for deplib in $tmp_libs; do 6322e169010aSmrg # FIXME: Pedantically, this is the right thing to do, so 6323e169010aSmrg # that some nasty dependency loop isn't accidentally 6324e169010aSmrg # broken: 6325e169010aSmrg #new_libs="$deplib $new_libs" 6326e169010aSmrg # Pragmatically, this seems to cause very few problems in 6327e169010aSmrg # practice: 6328e169010aSmrg case $deplib in 6329e169010aSmrg -L*) new_libs="$deplib $new_libs" ;; 6330e169010aSmrg -R*) ;; 6331e169010aSmrg *) 6332e169010aSmrg # And here is the reason: when a library appears more 6333e169010aSmrg # than once as an explicit dependence of a library, or 6334e169010aSmrg # is implicitly linked in more than once by the 6335e169010aSmrg # compiler, it is considered special, and multiple 6336e169010aSmrg # occurrences thereof are not removed. Compare this 6337e169010aSmrg # with having the same library being listed as a 6338e169010aSmrg # dependency of multiple other libraries: in this case, 6339e169010aSmrg # we know (pedantically, we assume) the library does not 6340e169010aSmrg # need to be listed more than once, so we keep only the 6341e169010aSmrg # last copy. This is not always right, but it is rare 6342e169010aSmrg # enough that we require users that really mean to play 6343e169010aSmrg # such unportable linking tricks to link the library 6344e169010aSmrg # using -Wl,-lname, so that libtool does not consider it 6345e169010aSmrg # for duplicate removal. 6346e169010aSmrg case " $specialdeplibs " in 6347e169010aSmrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 6348e169010aSmrg *) 6349e169010aSmrg case " $new_libs " in 6350e169010aSmrg *" $deplib "*) ;; 6351e169010aSmrg *) new_libs="$deplib $new_libs" ;; 6352e169010aSmrg esac 6353e169010aSmrg ;; 6354e169010aSmrg esac 6355e169010aSmrg ;; 6356e169010aSmrg esac 6357e169010aSmrg done 6358e169010aSmrg tmp_libs= 6359e169010aSmrg for deplib in $new_libs; do 6360e169010aSmrg case $deplib in 6361e169010aSmrg -L*) 6362e169010aSmrg case " $tmp_libs " in 6363e169010aSmrg *" $deplib "*) ;; 6364e169010aSmrg *) tmp_libs="$tmp_libs $deplib" ;; 6365e169010aSmrg esac 6366e169010aSmrg ;; 6367e169010aSmrg *) tmp_libs="$tmp_libs $deplib" ;; 6368e169010aSmrg esac 6369e169010aSmrg done 6370e169010aSmrg eval $var=\"$tmp_libs\" 6371e169010aSmrg done # for var 6372e169010aSmrg fi 6373e169010aSmrg # Last step: remove runtime libs from dependency_libs 6374e169010aSmrg # (they stay in deplibs) 6375e169010aSmrg tmp_libs= 6376e169010aSmrg for i in $dependency_libs ; do 6377e169010aSmrg case " $predeps $postdeps $compiler_lib_search_path " in 6378e169010aSmrg *" $i "*) 6379e169010aSmrg i="" 6380e169010aSmrg ;; 6381e169010aSmrg esac 6382e169010aSmrg if test -n "$i" ; then 6383e169010aSmrg tmp_libs="$tmp_libs $i" 6384e169010aSmrg fi 6385e169010aSmrg done 6386e169010aSmrg dependency_libs=$tmp_libs 6387e169010aSmrg done # for pass 6388e169010aSmrg if test "$linkmode" = prog; then 6389e169010aSmrg dlfiles="$newdlfiles" 6390e169010aSmrg fi 6391e169010aSmrg if test "$linkmode" = prog || test "$linkmode" = lib; then 6392e169010aSmrg dlprefiles="$newdlprefiles" 6393e169010aSmrg fi 6394e169010aSmrg 6395e169010aSmrg case $linkmode in 6396e169010aSmrg oldlib) 6397e169010aSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 6398e169010aSmrg func_warning "\`-dlopen' is ignored for archives" 6399e169010aSmrg fi 6400e169010aSmrg 6401e169010aSmrg case " $deplibs" in 6402e169010aSmrg *\ -l* | *\ -L*) 6403e169010aSmrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 6404e169010aSmrg esac 6405e169010aSmrg 6406e169010aSmrg test -n "$rpath" && \ 6407e169010aSmrg func_warning "\`-rpath' is ignored for archives" 6408e169010aSmrg 6409e169010aSmrg test -n "$xrpath" && \ 6410e169010aSmrg func_warning "\`-R' is ignored for archives" 6411e169010aSmrg 6412e169010aSmrg test -n "$vinfo" && \ 6413e169010aSmrg func_warning "\`-version-info/-version-number' is ignored for archives" 6414e169010aSmrg 6415e169010aSmrg test -n "$release" && \ 6416e169010aSmrg func_warning "\`-release' is ignored for archives" 6417e169010aSmrg 6418e169010aSmrg test -n "$export_symbols$export_symbols_regex" && \ 6419e169010aSmrg func_warning "\`-export-symbols' is ignored for archives" 6420e169010aSmrg 6421e169010aSmrg # Now set the variables for building old libraries. 6422e169010aSmrg build_libtool_libs=no 6423e169010aSmrg oldlibs="$output" 6424e169010aSmrg objs="$objs$old_deplibs" 6425e169010aSmrg ;; 6426e169010aSmrg 6427e169010aSmrg lib) 6428e169010aSmrg # Make sure we only generate libraries of the form `libNAME.la'. 6429e169010aSmrg case $outputname in 6430e169010aSmrg lib*) 6431e169010aSmrg func_stripname 'lib' '.la' "$outputname" 6432e169010aSmrg name=$func_stripname_result 6433e169010aSmrg eval shared_ext=\"$shrext_cmds\" 6434e169010aSmrg eval libname=\"$libname_spec\" 6435e169010aSmrg ;; 6436e169010aSmrg *) 6437e169010aSmrg test "$module" = no && \ 6438e169010aSmrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 6439e169010aSmrg 6440e169010aSmrg if test "$need_lib_prefix" != no; then 6441e169010aSmrg # Add the "lib" prefix for modules if required 6442e169010aSmrg func_stripname '' '.la' "$outputname" 6443e169010aSmrg name=$func_stripname_result 6444e169010aSmrg eval shared_ext=\"$shrext_cmds\" 6445e169010aSmrg eval libname=\"$libname_spec\" 6446e169010aSmrg else 6447e169010aSmrg func_stripname '' '.la' "$outputname" 6448e169010aSmrg libname=$func_stripname_result 6449e169010aSmrg fi 6450e169010aSmrg ;; 6451e169010aSmrg esac 6452e169010aSmrg 6453e169010aSmrg if test -n "$objs"; then 6454e169010aSmrg if test "$deplibs_check_method" != pass_all; then 6455e169010aSmrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 6456e169010aSmrg else 6457e8ead290Smrg echo 6458e169010aSmrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 6459e169010aSmrg $ECHO "*** objects $objs is not portable!" 6460e169010aSmrg libobjs="$libobjs $objs" 6461e169010aSmrg fi 6462e169010aSmrg fi 6463e169010aSmrg 6464e169010aSmrg test "$dlself" != no && \ 6465e169010aSmrg func_warning "\`-dlopen self' is ignored for libtool libraries" 6466e169010aSmrg 6467e169010aSmrg set dummy $rpath 6468e169010aSmrg shift 6469e169010aSmrg test "$#" -gt 1 && \ 6470e169010aSmrg func_warning "ignoring multiple \`-rpath's for a libtool library" 6471e169010aSmrg 6472e169010aSmrg install_libdir="$1" 6473e169010aSmrg 6474e169010aSmrg oldlibs= 6475e169010aSmrg if test -z "$rpath"; then 6476e169010aSmrg if test "$build_libtool_libs" = yes; then 6477e169010aSmrg # Building a libtool convenience library. 6478e169010aSmrg # Some compilers have problems with a `.al' extension so 6479e169010aSmrg # convenience libraries should have the same extension an 6480e169010aSmrg # archive normally would. 6481e169010aSmrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 6482e169010aSmrg build_libtool_libs=convenience 6483e169010aSmrg build_old_libs=yes 6484e169010aSmrg fi 6485e169010aSmrg 6486e169010aSmrg test -n "$vinfo" && \ 6487e169010aSmrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 6488e169010aSmrg 6489e169010aSmrg test -n "$release" && \ 6490e169010aSmrg func_warning "\`-release' is ignored for convenience libraries" 6491e169010aSmrg else 6492e169010aSmrg 6493e169010aSmrg # Parse the version information argument. 6494e169010aSmrg save_ifs="$IFS"; IFS=':' 6495e169010aSmrg set dummy $vinfo 0 0 0 6496e169010aSmrg shift 6497e169010aSmrg IFS="$save_ifs" 6498e169010aSmrg 6499e169010aSmrg test -n "$7" && \ 6500e169010aSmrg func_fatal_help "too many parameters to \`-version-info'" 6501e169010aSmrg 6502e169010aSmrg # convert absolute version numbers to libtool ages 6503e169010aSmrg # this retains compatibility with .la files and attempts 6504e169010aSmrg # to make the code below a bit more comprehensible 6505e169010aSmrg 6506e169010aSmrg case $vinfo_number in 6507e169010aSmrg yes) 6508e169010aSmrg number_major="$1" 6509e169010aSmrg number_minor="$2" 6510e169010aSmrg number_revision="$3" 6511e169010aSmrg # 6512e169010aSmrg # There are really only two kinds -- those that 6513e169010aSmrg # use the current revision as the major version 6514e169010aSmrg # and those that subtract age and use age as 6515e169010aSmrg # a minor version. But, then there is irix 6516e169010aSmrg # which has an extra 1 added just for fun 6517e169010aSmrg # 6518e169010aSmrg case $version_type in 6519e169010aSmrg darwin|linux|osf|windows|none) 6520e169010aSmrg func_arith $number_major + $number_minor 6521e169010aSmrg current=$func_arith_result 6522e169010aSmrg age="$number_minor" 6523e169010aSmrg revision="$number_revision" 6524e169010aSmrg ;; 6525e8ead290Smrg freebsd-aout|freebsd-elf|qnx|sunos) 6526e169010aSmrg current="$number_major" 6527e169010aSmrg revision="$number_minor" 6528e169010aSmrg age="0" 6529e169010aSmrg ;; 6530e169010aSmrg irix|nonstopux) 6531e169010aSmrg func_arith $number_major + $number_minor 6532e169010aSmrg current=$func_arith_result 6533e169010aSmrg age="$number_minor" 6534e169010aSmrg revision="$number_minor" 6535e169010aSmrg lt_irix_increment=no 6536e169010aSmrg ;; 6537e169010aSmrg esac 6538e169010aSmrg ;; 6539e169010aSmrg no) 6540e169010aSmrg current="$1" 6541e169010aSmrg revision="$2" 6542e169010aSmrg age="$3" 6543e169010aSmrg ;; 6544e169010aSmrg esac 6545e169010aSmrg 6546e169010aSmrg # Check that each of the things are valid numbers. 6547e169010aSmrg case $current in 6548e169010aSmrg 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]) ;; 6549e169010aSmrg *) 6550e169010aSmrg func_error "CURRENT \`$current' must be a nonnegative integer" 6551e169010aSmrg func_fatal_error "\`$vinfo' is not valid version information" 6552e169010aSmrg ;; 6553e169010aSmrg esac 6554e169010aSmrg 6555e169010aSmrg case $revision in 6556e169010aSmrg 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]) ;; 6557e169010aSmrg *) 6558e169010aSmrg func_error "REVISION \`$revision' must be a nonnegative integer" 6559e169010aSmrg func_fatal_error "\`$vinfo' is not valid version information" 6560e169010aSmrg ;; 6561e169010aSmrg esac 6562e169010aSmrg 6563e169010aSmrg case $age in 6564e169010aSmrg 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]) ;; 6565e169010aSmrg *) 6566e169010aSmrg func_error "AGE \`$age' must be a nonnegative integer" 6567e169010aSmrg func_fatal_error "\`$vinfo' is not valid version information" 6568e169010aSmrg ;; 6569e169010aSmrg esac 6570e169010aSmrg 6571e169010aSmrg if test "$age" -gt "$current"; then 6572e169010aSmrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 6573e169010aSmrg func_fatal_error "\`$vinfo' is not valid version information" 6574e169010aSmrg fi 6575e169010aSmrg 6576e169010aSmrg # Calculate the version variables. 6577e169010aSmrg major= 6578e169010aSmrg versuffix= 6579e169010aSmrg verstring= 6580e169010aSmrg case $version_type in 6581e169010aSmrg none) ;; 6582e169010aSmrg 6583e169010aSmrg darwin) 6584e169010aSmrg # Like Linux, but with the current version available in 6585e169010aSmrg # verstring for coding it into the library header 6586e169010aSmrg func_arith $current - $age 6587e169010aSmrg major=.$func_arith_result 6588e169010aSmrg versuffix="$major.$age.$revision" 6589e169010aSmrg # Darwin ld doesn't like 0 for these options... 6590e169010aSmrg func_arith $current + 1 6591e169010aSmrg minor_current=$func_arith_result 6592e169010aSmrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 6593e169010aSmrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 6594e169010aSmrg ;; 6595e169010aSmrg 6596e169010aSmrg freebsd-aout) 6597e169010aSmrg major=".$current" 6598e169010aSmrg versuffix=".$current.$revision"; 6599e169010aSmrg ;; 6600e169010aSmrg 6601e169010aSmrg freebsd-elf) 6602e169010aSmrg major=".$current" 6603e169010aSmrg versuffix=".$current" 6604e169010aSmrg ;; 6605e169010aSmrg 6606e169010aSmrg irix | nonstopux) 6607e169010aSmrg if test "X$lt_irix_increment" = "Xno"; then 6608e169010aSmrg func_arith $current - $age 6609e169010aSmrg else 6610e169010aSmrg func_arith $current - $age + 1 6611e169010aSmrg fi 6612e169010aSmrg major=$func_arith_result 6613e169010aSmrg 6614e169010aSmrg case $version_type in 6615e169010aSmrg nonstopux) verstring_prefix=nonstopux ;; 6616e169010aSmrg *) verstring_prefix=sgi ;; 6617e169010aSmrg esac 6618e169010aSmrg verstring="$verstring_prefix$major.$revision" 6619e169010aSmrg 6620e169010aSmrg # Add in all the interfaces that we are compatible with. 6621e169010aSmrg loop=$revision 6622e169010aSmrg while test "$loop" -ne 0; do 6623e169010aSmrg func_arith $revision - $loop 6624e169010aSmrg iface=$func_arith_result 6625e169010aSmrg func_arith $loop - 1 6626e169010aSmrg loop=$func_arith_result 6627e169010aSmrg verstring="$verstring_prefix$major.$iface:$verstring" 6628e169010aSmrg done 6629e169010aSmrg 6630e169010aSmrg # Before this point, $major must not contain `.'. 6631e169010aSmrg major=.$major 6632e169010aSmrg versuffix="$major.$revision" 6633e169010aSmrg ;; 6634e169010aSmrg 6635e169010aSmrg linux) 6636e169010aSmrg func_arith $current - $age 6637e169010aSmrg major=.$func_arith_result 6638e169010aSmrg versuffix="$major.$age.$revision" 6639e169010aSmrg ;; 6640e169010aSmrg 6641e169010aSmrg osf) 6642e169010aSmrg func_arith $current - $age 6643e169010aSmrg major=.$func_arith_result 6644e169010aSmrg versuffix=".$current.$age.$revision" 6645e169010aSmrg verstring="$current.$age.$revision" 6646e169010aSmrg 6647e169010aSmrg # Add in all the interfaces that we are compatible with. 6648e169010aSmrg loop=$age 6649e169010aSmrg while test "$loop" -ne 0; do 6650e169010aSmrg func_arith $current - $loop 6651e169010aSmrg iface=$func_arith_result 6652e169010aSmrg func_arith $loop - 1 6653e169010aSmrg loop=$func_arith_result 6654e169010aSmrg verstring="$verstring:${iface}.0" 6655e169010aSmrg done 6656e169010aSmrg 6657e169010aSmrg # Make executables depend on our current version. 6658e169010aSmrg verstring="$verstring:${current}.0" 6659e169010aSmrg ;; 6660e169010aSmrg 6661e169010aSmrg qnx) 6662e169010aSmrg major=".$current" 6663e169010aSmrg versuffix=".$current" 6664e169010aSmrg ;; 6665e169010aSmrg 6666e169010aSmrg sunos) 6667e169010aSmrg major=".$current" 6668e169010aSmrg versuffix=".$current.$revision" 6669e169010aSmrg ;; 6670e169010aSmrg 6671e169010aSmrg windows) 6672e169010aSmrg # Use '-' rather than '.', since we only want one 6673e169010aSmrg # extension on DOS 8.3 filesystems. 6674e169010aSmrg func_arith $current - $age 6675e169010aSmrg major=$func_arith_result 6676e169010aSmrg versuffix="-$major" 6677e169010aSmrg ;; 6678e169010aSmrg 6679e169010aSmrg *) 6680e169010aSmrg func_fatal_configuration "unknown library version type \`$version_type'" 6681e169010aSmrg ;; 6682e169010aSmrg esac 6683e169010aSmrg 6684e169010aSmrg # Clear the version info if we defaulted, and they specified a release. 6685e169010aSmrg if test -z "$vinfo" && test -n "$release"; then 6686e169010aSmrg major= 6687e169010aSmrg case $version_type in 6688e169010aSmrg darwin) 6689e169010aSmrg # we can't check for "0.0" in archive_cmds due to quoting 6690e169010aSmrg # problems, so we reset it completely 6691e169010aSmrg verstring= 6692e169010aSmrg ;; 6693e169010aSmrg *) 6694e169010aSmrg verstring="0.0" 6695e169010aSmrg ;; 6696e169010aSmrg esac 6697e169010aSmrg if test "$need_version" = no; then 6698e169010aSmrg versuffix= 6699e169010aSmrg else 6700e169010aSmrg versuffix=".0.0" 6701e169010aSmrg fi 6702e169010aSmrg fi 6703e169010aSmrg 6704e169010aSmrg # Remove version info from name if versioning should be avoided 6705e169010aSmrg if test "$avoid_version" = yes && test "$need_version" = no; then 6706e169010aSmrg major= 6707e169010aSmrg versuffix= 6708e169010aSmrg verstring="" 6709e169010aSmrg fi 6710e169010aSmrg 6711e169010aSmrg # Check to see if the archive will have undefined symbols. 6712e169010aSmrg if test "$allow_undefined" = yes; then 6713e169010aSmrg if test "$allow_undefined_flag" = unsupported; then 6714e169010aSmrg func_warning "undefined symbols not allowed in $host shared libraries" 6715e169010aSmrg build_libtool_libs=no 6716e169010aSmrg build_old_libs=yes 6717e169010aSmrg fi 6718e169010aSmrg else 6719e169010aSmrg # Don't allow undefined symbols. 6720e169010aSmrg allow_undefined_flag="$no_undefined_flag" 6721e169010aSmrg fi 6722e169010aSmrg 6723e169010aSmrg fi 6724e169010aSmrg 6725e169010aSmrg func_generate_dlsyms "$libname" "$libname" "yes" 6726e169010aSmrg libobjs="$libobjs $symfileobj" 6727e169010aSmrg test "X$libobjs" = "X " && libobjs= 6728e169010aSmrg 6729e169010aSmrg if test "$mode" != relink; then 6730e169010aSmrg # Remove our outputs, but don't remove object files since they 6731e169010aSmrg # may have been created when compiling PIC objects. 6732e169010aSmrg removelist= 6733e169010aSmrg tempremovelist=`$ECHO "$output_objdir/*"` 6734e169010aSmrg for p in $tempremovelist; do 6735e169010aSmrg case $p in 6736e169010aSmrg *.$objext | *.gcno) 6737e169010aSmrg ;; 6738e169010aSmrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 6739e169010aSmrg if test "X$precious_files_regex" != "X"; then 6740e169010aSmrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 6741e169010aSmrg then 6742e169010aSmrg continue 6743e169010aSmrg fi 6744e169010aSmrg fi 6745e169010aSmrg removelist="$removelist $p" 6746e169010aSmrg ;; 6747e169010aSmrg *) ;; 6748e169010aSmrg esac 6749e169010aSmrg done 6750e169010aSmrg test -n "$removelist" && \ 6751e169010aSmrg func_show_eval "${RM}r \$removelist" 6752e169010aSmrg fi 6753e169010aSmrg 6754e169010aSmrg # Now set the variables for building old libraries. 6755e169010aSmrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 6756e169010aSmrg oldlibs="$oldlibs $output_objdir/$libname.$libext" 6757e169010aSmrg 6758e169010aSmrg # Transform .lo files to .o files. 6759e8ead290Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 6760e169010aSmrg fi 6761e169010aSmrg 6762e169010aSmrg # Eliminate all temporary directories. 6763e169010aSmrg #for path in $notinst_path; do 6764e8ead290Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 6765e8ead290Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 6766e8ead290Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 6767e169010aSmrg #done 6768e169010aSmrg 6769e169010aSmrg if test -n "$xrpath"; then 6770e169010aSmrg # If the user specified any rpath flags, then add them. 6771e169010aSmrg temp_xrpath= 6772e169010aSmrg for libdir in $xrpath; do 6773e169010aSmrg temp_xrpath="$temp_xrpath -R$libdir" 6774e169010aSmrg case "$finalize_rpath " in 6775e169010aSmrg *" $libdir "*) ;; 6776e169010aSmrg *) finalize_rpath="$finalize_rpath $libdir" ;; 6777e169010aSmrg esac 6778e169010aSmrg done 6779e169010aSmrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 6780e169010aSmrg dependency_libs="$temp_xrpath $dependency_libs" 6781e169010aSmrg fi 6782e169010aSmrg fi 6783e169010aSmrg 6784e169010aSmrg # Make sure dlfiles contains only unique files that won't be dlpreopened 6785e169010aSmrg old_dlfiles="$dlfiles" 6786e169010aSmrg dlfiles= 6787e169010aSmrg for lib in $old_dlfiles; do 6788e169010aSmrg case " $dlprefiles $dlfiles " in 6789e169010aSmrg *" $lib "*) ;; 6790e169010aSmrg *) dlfiles="$dlfiles $lib" ;; 6791e169010aSmrg esac 6792e169010aSmrg done 6793e169010aSmrg 6794e169010aSmrg # Make sure dlprefiles contains only unique files 6795e169010aSmrg old_dlprefiles="$dlprefiles" 6796e169010aSmrg dlprefiles= 6797e169010aSmrg for lib in $old_dlprefiles; do 6798e169010aSmrg case "$dlprefiles " in 6799e169010aSmrg *" $lib "*) ;; 6800e169010aSmrg *) dlprefiles="$dlprefiles $lib" ;; 6801e169010aSmrg esac 6802e169010aSmrg done 6803e169010aSmrg 6804e169010aSmrg if test "$build_libtool_libs" = yes; then 6805e169010aSmrg if test -n "$rpath"; then 6806e169010aSmrg case $host in 6807e8ead290Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 6808e169010aSmrg # these systems don't actually have a c library (as such)! 6809e169010aSmrg ;; 6810e169010aSmrg *-*-rhapsody* | *-*-darwin1.[012]) 6811e169010aSmrg # Rhapsody C library is in the System framework 6812e169010aSmrg deplibs="$deplibs System.ltframework" 6813e169010aSmrg ;; 6814e169010aSmrg *-*-netbsd*) 6815e169010aSmrg # Don't link with libc until the a.out ld.so is fixed. 6816e169010aSmrg ;; 6817e169010aSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 6818e169010aSmrg # Do not include libc due to us having libc/libc_r. 6819e169010aSmrg ;; 6820e169010aSmrg *-*-sco3.2v5* | *-*-sco5v6*) 6821e169010aSmrg # Causes problems with __ctype 6822e169010aSmrg ;; 6823e169010aSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 6824e169010aSmrg # Compiler inserts libc in the correct place for threads to work 6825e169010aSmrg ;; 6826e169010aSmrg *) 6827e169010aSmrg # Add libc to deplibs on all other systems if necessary. 6828e169010aSmrg if test "$build_libtool_need_lc" = "yes"; then 6829e169010aSmrg deplibs="$deplibs -lc" 6830e169010aSmrg fi 6831e169010aSmrg ;; 6832e169010aSmrg esac 6833e169010aSmrg fi 6834e169010aSmrg 6835e169010aSmrg # Transform deplibs into only deplibs that can be linked in shared. 6836e169010aSmrg name_save=$name 6837e169010aSmrg libname_save=$libname 6838e169010aSmrg release_save=$release 6839e169010aSmrg versuffix_save=$versuffix 6840e169010aSmrg major_save=$major 6841e169010aSmrg # I'm not sure if I'm treating the release correctly. I think 6842e169010aSmrg # release should show up in the -l (ie -lgmp5) so we don't want to 6843e169010aSmrg # add it in twice. Is that correct? 6844e169010aSmrg release="" 6845e169010aSmrg versuffix="" 6846e169010aSmrg major="" 6847e169010aSmrg newdeplibs= 6848e169010aSmrg droppeddeps=no 6849e169010aSmrg case $deplibs_check_method in 6850e169010aSmrg pass_all) 6851e169010aSmrg # Don't check for shared/static. Everything works. 6852e169010aSmrg # This might be a little naive. We might want to check 6853e169010aSmrg # whether the library exists or not. But this is on 6854e169010aSmrg # osf3 & osf4 and I'm not really sure... Just 6855e169010aSmrg # implementing what was already the behavior. 6856e169010aSmrg newdeplibs=$deplibs 6857e169010aSmrg ;; 6858e169010aSmrg test_compile) 6859e169010aSmrg # This code stresses the "libraries are programs" paradigm to its 6860e169010aSmrg # limits. Maybe even breaks it. We compile a program, linking it 6861e169010aSmrg # against the deplibs as a proxy for the library. Then we can check 6862e169010aSmrg # whether they linked in statically or dynamically with ldd. 6863e169010aSmrg $opt_dry_run || $RM conftest.c 6864e169010aSmrg cat > conftest.c <<EOF 6865e169010aSmrg int main() { return 0; } 6866e169010aSmrgEOF 6867e169010aSmrg $opt_dry_run || $RM conftest 6868e169010aSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 6869e169010aSmrg ldd_output=`ldd conftest` 6870e169010aSmrg for i in $deplibs; do 6871e169010aSmrg case $i in 6872e169010aSmrg -l*) 6873e169010aSmrg func_stripname -l '' "$i" 6874e169010aSmrg name=$func_stripname_result 6875e169010aSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6876e169010aSmrg case " $predeps $postdeps " in 6877e169010aSmrg *" $i "*) 6878e169010aSmrg newdeplibs="$newdeplibs $i" 6879e169010aSmrg i="" 6880e169010aSmrg ;; 6881e169010aSmrg esac 6882e169010aSmrg fi 6883e169010aSmrg if test -n "$i" ; then 6884e169010aSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 6885e169010aSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 6886e169010aSmrg set dummy $deplib_matches; shift 6887e169010aSmrg deplib_match=$1 6888e169010aSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 6889e169010aSmrg newdeplibs="$newdeplibs $i" 6890e169010aSmrg else 6891e169010aSmrg droppeddeps=yes 6892e8ead290Smrg echo 6893e169010aSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 6894e8ead290Smrg echo "*** I have the capability to make that library automatically link in when" 6895e8ead290Smrg echo "*** you link to this library. But I can only do this if you have a" 6896e8ead290Smrg echo "*** shared version of the library, which I believe you do not have" 6897e8ead290Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 6898e8ead290Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 6899e169010aSmrg fi 6900e169010aSmrg fi 6901e169010aSmrg ;; 6902e169010aSmrg *) 6903e169010aSmrg newdeplibs="$newdeplibs $i" 6904e169010aSmrg ;; 6905e169010aSmrg esac 6906e169010aSmrg done 6907e169010aSmrg else 6908e169010aSmrg # Error occurred in the first compile. Let's try to salvage 6909e169010aSmrg # the situation: Compile a separate program for each library. 6910e169010aSmrg for i in $deplibs; do 6911e169010aSmrg case $i in 6912e169010aSmrg -l*) 6913e169010aSmrg func_stripname -l '' "$i" 6914e169010aSmrg name=$func_stripname_result 6915e169010aSmrg $opt_dry_run || $RM conftest 6916e169010aSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 6917e169010aSmrg ldd_output=`ldd conftest` 6918e169010aSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6919e169010aSmrg case " $predeps $postdeps " in 6920e169010aSmrg *" $i "*) 6921e169010aSmrg newdeplibs="$newdeplibs $i" 6922e169010aSmrg i="" 6923e169010aSmrg ;; 6924e169010aSmrg esac 6925e169010aSmrg fi 6926e169010aSmrg if test -n "$i" ; then 6927e169010aSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 6928e169010aSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 6929e169010aSmrg set dummy $deplib_matches; shift 6930e169010aSmrg deplib_match=$1 6931e169010aSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 6932e169010aSmrg newdeplibs="$newdeplibs $i" 6933e169010aSmrg else 6934e169010aSmrg droppeddeps=yes 6935e8ead290Smrg echo 6936e169010aSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 6937e8ead290Smrg echo "*** I have the capability to make that library automatically link in when" 6938e8ead290Smrg echo "*** you link to this library. But I can only do this if you have a" 6939e8ead290Smrg echo "*** shared version of the library, which you do not appear to have" 6940e8ead290Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 6941e8ead290Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 6942e169010aSmrg fi 6943e169010aSmrg fi 6944e169010aSmrg else 6945e169010aSmrg droppeddeps=yes 6946e8ead290Smrg echo 6947e169010aSmrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 6948e8ead290Smrg echo "*** make it link in! You will probably need to install it or some" 6949e8ead290Smrg echo "*** library that it depends on before this library will be fully" 6950e8ead290Smrg echo "*** functional. Installing it before continuing would be even better." 6951e169010aSmrg fi 6952e169010aSmrg ;; 6953e169010aSmrg *) 6954e169010aSmrg newdeplibs="$newdeplibs $i" 6955e169010aSmrg ;; 6956e169010aSmrg esac 6957e169010aSmrg done 6958e169010aSmrg fi 6959e169010aSmrg ;; 6960e169010aSmrg file_magic*) 6961e169010aSmrg set dummy $deplibs_check_method; shift 6962e169010aSmrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 6963e169010aSmrg for a_deplib in $deplibs; do 6964e169010aSmrg case $a_deplib in 6965e169010aSmrg -l*) 6966e169010aSmrg func_stripname -l '' "$a_deplib" 6967e169010aSmrg name=$func_stripname_result 6968e169010aSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6969e169010aSmrg case " $predeps $postdeps " in 6970e169010aSmrg *" $a_deplib "*) 6971e169010aSmrg newdeplibs="$newdeplibs $a_deplib" 6972e169010aSmrg a_deplib="" 6973e169010aSmrg ;; 6974e169010aSmrg esac 6975e169010aSmrg fi 6976e169010aSmrg if test -n "$a_deplib" ; then 6977e169010aSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 6978e169010aSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 6979e169010aSmrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 6980e169010aSmrg for potent_lib in $potential_libs; do 6981e169010aSmrg # Follow soft links. 6982e169010aSmrg if ls -lLd "$potent_lib" 2>/dev/null | 6983e169010aSmrg $GREP " -> " >/dev/null; then 6984e169010aSmrg continue 6985e169010aSmrg fi 6986e169010aSmrg # The statement above tries to avoid entering an 6987e169010aSmrg # endless loop below, in case of cyclic links. 6988e169010aSmrg # We might still enter an endless loop, since a link 6989e169010aSmrg # loop can be closed while we follow links, 6990e169010aSmrg # but so what? 6991e169010aSmrg potlib="$potent_lib" 6992e169010aSmrg while test -h "$potlib" 2>/dev/null; do 6993e169010aSmrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 6994e169010aSmrg case $potliblink in 6995e169010aSmrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 6996e8ead290Smrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 6997e169010aSmrg esac 6998e169010aSmrg done 6999e169010aSmrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7000e169010aSmrg $SED -e 10q | 7001e169010aSmrg $EGREP "$file_magic_regex" > /dev/null; then 7002e169010aSmrg newdeplibs="$newdeplibs $a_deplib" 7003e169010aSmrg a_deplib="" 7004e169010aSmrg break 2 7005e169010aSmrg fi 7006e169010aSmrg done 7007e169010aSmrg done 7008e169010aSmrg fi 7009e169010aSmrg if test -n "$a_deplib" ; then 7010e169010aSmrg droppeddeps=yes 7011e8ead290Smrg echo 7012e169010aSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7013e8ead290Smrg echo "*** I have the capability to make that library automatically link in when" 7014e8ead290Smrg echo "*** you link to this library. But I can only do this if you have a" 7015e8ead290Smrg echo "*** shared version of the library, which you do not appear to have" 7016e8ead290Smrg echo "*** because I did check the linker path looking for a file starting" 7017e169010aSmrg if test -z "$potlib" ; then 7018e169010aSmrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 7019e169010aSmrg else 7020e169010aSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7021e169010aSmrg $ECHO "*** using a file magic. Last file checked: $potlib" 7022e169010aSmrg fi 7023e169010aSmrg fi 7024e169010aSmrg ;; 7025e169010aSmrg *) 7026e169010aSmrg # Add a -L argument. 7027e169010aSmrg newdeplibs="$newdeplibs $a_deplib" 7028e169010aSmrg ;; 7029e169010aSmrg esac 7030e169010aSmrg done # Gone through all deplibs. 7031e169010aSmrg ;; 7032e169010aSmrg match_pattern*) 7033e169010aSmrg set dummy $deplibs_check_method; shift 7034e169010aSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7035e169010aSmrg for a_deplib in $deplibs; do 7036e169010aSmrg case $a_deplib in 7037e169010aSmrg -l*) 7038e169010aSmrg func_stripname -l '' "$a_deplib" 7039e169010aSmrg name=$func_stripname_result 7040e169010aSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7041e169010aSmrg case " $predeps $postdeps " in 7042e169010aSmrg *" $a_deplib "*) 7043e169010aSmrg newdeplibs="$newdeplibs $a_deplib" 7044e169010aSmrg a_deplib="" 7045e169010aSmrg ;; 7046e169010aSmrg esac 7047e169010aSmrg fi 7048e169010aSmrg if test -n "$a_deplib" ; then 7049e169010aSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 7050e169010aSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7051e169010aSmrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 7052e169010aSmrg for potent_lib in $potential_libs; do 7053e169010aSmrg potlib="$potent_lib" # see symlink-check above in file_magic test 7054e8ead290Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7055e169010aSmrg $EGREP "$match_pattern_regex" > /dev/null; then 7056e169010aSmrg newdeplibs="$newdeplibs $a_deplib" 7057e169010aSmrg a_deplib="" 7058e169010aSmrg break 2 7059e169010aSmrg fi 7060e169010aSmrg done 7061e169010aSmrg done 7062e169010aSmrg fi 7063e169010aSmrg if test -n "$a_deplib" ; then 7064e169010aSmrg droppeddeps=yes 7065e8ead290Smrg echo 7066e169010aSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 7067e8ead290Smrg echo "*** I have the capability to make that library automatically link in when" 7068e8ead290Smrg echo "*** you link to this library. But I can only do this if you have a" 7069e8ead290Smrg echo "*** shared version of the library, which you do not appear to have" 7070e8ead290Smrg echo "*** because I did check the linker path looking for a file starting" 7071e169010aSmrg if test -z "$potlib" ; then 7072e169010aSmrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 7073e169010aSmrg else 7074e169010aSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7075e169010aSmrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 7076e169010aSmrg fi 7077e169010aSmrg fi 7078e169010aSmrg ;; 7079e169010aSmrg *) 7080e169010aSmrg # Add a -L argument. 7081e169010aSmrg newdeplibs="$newdeplibs $a_deplib" 7082e169010aSmrg ;; 7083e169010aSmrg esac 7084e169010aSmrg done # Gone through all deplibs. 7085e169010aSmrg ;; 7086e169010aSmrg none | unknown | *) 7087e169010aSmrg newdeplibs="" 7088e8ead290Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 7089e169010aSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7090e169010aSmrg for i in $predeps $postdeps ; do 7091e169010aSmrg # can't use Xsed below, because $i might contain '/' 7092e8ead290Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 7093e169010aSmrg done 7094e169010aSmrg fi 7095e8ead290Smrg case $tmp_deplibs in 7096e8ead290Smrg *[!\ \ ]*) 7097e8ead290Smrg echo 7098e169010aSmrg if test "X$deplibs_check_method" = "Xnone"; then 7099e8ead290Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 7100e169010aSmrg else 7101e8ead290Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 7102e169010aSmrg fi 7103e8ead290Smrg echo "*** All declared inter-library dependencies are being dropped." 7104e169010aSmrg droppeddeps=yes 7105e8ead290Smrg ;; 7106e8ead290Smrg esac 7107e169010aSmrg ;; 7108e169010aSmrg esac 7109e169010aSmrg versuffix=$versuffix_save 7110e169010aSmrg major=$major_save 7111e169010aSmrg release=$release_save 7112e169010aSmrg libname=$libname_save 7113e169010aSmrg name=$name_save 7114e169010aSmrg 7115e169010aSmrg case $host in 7116e169010aSmrg *-*-rhapsody* | *-*-darwin1.[012]) 7117e169010aSmrg # On Rhapsody replace the C library with the System framework 7118e8ead290Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 7119e169010aSmrg ;; 7120e169010aSmrg esac 7121e169010aSmrg 7122e169010aSmrg if test "$droppeddeps" = yes; then 7123e169010aSmrg if test "$module" = yes; then 7124e8ead290Smrg echo 7125e8ead290Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 7126e169010aSmrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 7127e8ead290Smrg echo "*** a static module, that should work as long as the dlopening" 7128e8ead290Smrg echo "*** application is linked with the -dlopen flag." 7129e169010aSmrg if test -z "$global_symbol_pipe"; then 7130e8ead290Smrg echo 7131e8ead290Smrg echo "*** However, this would only work if libtool was able to extract symbol" 7132e8ead290Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 7133e8ead290Smrg echo "*** not find such a program. So, this module is probably useless." 7134e8ead290Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 7135e169010aSmrg fi 7136e169010aSmrg if test "$build_old_libs" = no; then 7137e169010aSmrg oldlibs="$output_objdir/$libname.$libext" 7138e169010aSmrg build_libtool_libs=module 7139e169010aSmrg build_old_libs=yes 7140e169010aSmrg else 7141e169010aSmrg build_libtool_libs=no 7142e169010aSmrg fi 7143e169010aSmrg else 7144e8ead290Smrg echo "*** The inter-library dependencies that have been dropped here will be" 7145e8ead290Smrg echo "*** automatically added whenever a program is linked with this library" 7146e8ead290Smrg echo "*** or is declared to -dlopen it." 7147e169010aSmrg 7148e169010aSmrg if test "$allow_undefined" = no; then 7149e8ead290Smrg echo 7150e8ead290Smrg echo "*** Since this library must not contain undefined symbols," 7151e8ead290Smrg echo "*** because either the platform does not support them or" 7152e8ead290Smrg echo "*** it was explicitly requested with -no-undefined," 7153e8ead290Smrg echo "*** libtool will only create a static version of it." 7154e169010aSmrg if test "$build_old_libs" = no; then 7155e169010aSmrg oldlibs="$output_objdir/$libname.$libext" 7156e169010aSmrg build_libtool_libs=module 7157e169010aSmrg build_old_libs=yes 7158e169010aSmrg else 7159e169010aSmrg build_libtool_libs=no 7160e169010aSmrg fi 7161e169010aSmrg fi 7162e169010aSmrg fi 7163e169010aSmrg fi 7164e169010aSmrg # Done checking deplibs! 7165e169010aSmrg deplibs=$newdeplibs 7166e169010aSmrg fi 7167e169010aSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7168e169010aSmrg case $host in 7169e169010aSmrg *-*-darwin*) 7170e8ead290Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7171e8ead290Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7172e8ead290Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7173e169010aSmrg ;; 7174e169010aSmrg esac 7175e169010aSmrg 7176e169010aSmrg # move library search paths that coincide with paths to not yet 7177e169010aSmrg # installed libraries to the beginning of the library search list 7178e169010aSmrg new_libs= 7179e169010aSmrg for path in $notinst_path; do 7180e169010aSmrg case " $new_libs " in 7181e169010aSmrg *" -L$path/$objdir "*) ;; 7182e169010aSmrg *) 7183e169010aSmrg case " $deplibs " in 7184e169010aSmrg *" -L$path/$objdir "*) 7185e169010aSmrg new_libs="$new_libs -L$path/$objdir" ;; 7186e169010aSmrg esac 7187e169010aSmrg ;; 7188e169010aSmrg esac 7189e169010aSmrg done 7190e169010aSmrg for deplib in $deplibs; do 7191e169010aSmrg case $deplib in 7192e169010aSmrg -L*) 7193e169010aSmrg case " $new_libs " in 7194e169010aSmrg *" $deplib "*) ;; 7195e169010aSmrg *) new_libs="$new_libs $deplib" ;; 7196e169010aSmrg esac 7197e169010aSmrg ;; 7198e169010aSmrg *) new_libs="$new_libs $deplib" ;; 7199e169010aSmrg esac 7200e169010aSmrg done 7201e169010aSmrg deplibs="$new_libs" 7202e169010aSmrg 7203e169010aSmrg # All the library-specific variables (install_libdir is set above). 7204e169010aSmrg library_names= 7205e169010aSmrg old_library= 7206e169010aSmrg dlname= 7207e169010aSmrg 7208e169010aSmrg # Test again, we may have decided not to build it any more 7209e169010aSmrg if test "$build_libtool_libs" = yes; then 7210e169010aSmrg if test "$hardcode_into_libs" = yes; then 7211e169010aSmrg # Hardcode the library paths 7212e169010aSmrg hardcode_libdirs= 7213e169010aSmrg dep_rpath= 7214e169010aSmrg rpath="$finalize_rpath" 7215e169010aSmrg test "$mode" != relink && rpath="$compile_rpath$rpath" 7216e169010aSmrg for libdir in $rpath; do 7217e169010aSmrg if test -n "$hardcode_libdir_flag_spec"; then 7218e169010aSmrg if test -n "$hardcode_libdir_separator"; then 7219e169010aSmrg if test -z "$hardcode_libdirs"; then 7220e169010aSmrg hardcode_libdirs="$libdir" 7221e169010aSmrg else 7222e169010aSmrg # Just accumulate the unique libdirs. 7223e169010aSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 7224e169010aSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 7225e169010aSmrg ;; 7226e169010aSmrg *) 7227e169010aSmrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 7228e169010aSmrg ;; 7229e169010aSmrg esac 7230e169010aSmrg fi 7231e169010aSmrg else 7232e169010aSmrg eval flag=\"$hardcode_libdir_flag_spec\" 7233e169010aSmrg dep_rpath="$dep_rpath $flag" 7234e169010aSmrg fi 7235e169010aSmrg elif test -n "$runpath_var"; then 7236e169010aSmrg case "$perm_rpath " in 7237e169010aSmrg *" $libdir "*) ;; 7238e169010aSmrg *) perm_rpath="$perm_rpath $libdir" ;; 7239e169010aSmrg esac 7240e169010aSmrg fi 7241e169010aSmrg done 7242e169010aSmrg # Substitute the hardcoded libdirs into the rpath. 7243e169010aSmrg if test -n "$hardcode_libdir_separator" && 7244e169010aSmrg test -n "$hardcode_libdirs"; then 7245e169010aSmrg libdir="$hardcode_libdirs" 7246e169010aSmrg if test -n "$hardcode_libdir_flag_spec_ld"; then 7247e169010aSmrg eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 7248e169010aSmrg else 7249e169010aSmrg eval dep_rpath=\"$hardcode_libdir_flag_spec\" 7250e169010aSmrg fi 7251e169010aSmrg fi 7252e169010aSmrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 7253e169010aSmrg # We should set the runpath_var. 7254e169010aSmrg rpath= 7255e169010aSmrg for dir in $perm_rpath; do 7256e169010aSmrg rpath="$rpath$dir:" 7257e169010aSmrg done 7258e169010aSmrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 7259e169010aSmrg fi 7260e169010aSmrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 7261e169010aSmrg fi 72627914d74bSmrg 7263e169010aSmrg shlibpath="$finalize_shlibpath" 7264e169010aSmrg test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 7265e169010aSmrg if test -n "$shlibpath"; then 7266e169010aSmrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 7267e169010aSmrg fi 72687914d74bSmrg 7269e169010aSmrg # Get the real and link names of the library. 7270e169010aSmrg eval shared_ext=\"$shrext_cmds\" 7271e169010aSmrg eval library_names=\"$library_names_spec\" 7272e169010aSmrg set dummy $library_names 7273e169010aSmrg shift 7274e169010aSmrg realname="$1" 7275e169010aSmrg shift 72767914d74bSmrg 7277e169010aSmrg if test -n "$soname_spec"; then 7278e169010aSmrg eval soname=\"$soname_spec\" 7279e169010aSmrg else 7280e169010aSmrg soname="$realname" 7281e169010aSmrg fi 7282e169010aSmrg if test -z "$dlname"; then 7283e169010aSmrg dlname=$soname 7284e169010aSmrg fi 72857914d74bSmrg 7286e169010aSmrg lib="$output_objdir/$realname" 7287e169010aSmrg linknames= 7288e169010aSmrg for link 7289e169010aSmrg do 7290e169010aSmrg linknames="$linknames $link" 7291e169010aSmrg done 72927914d74bSmrg 7293e169010aSmrg # Use standard objects if they are pic 7294e8ead290Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 7295e169010aSmrg test "X$libobjs" = "X " && libobjs= 72967914d74bSmrg 7297e169010aSmrg delfiles= 7298e169010aSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 7299e169010aSmrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 7300e169010aSmrg export_symbols="$output_objdir/$libname.uexp" 7301e169010aSmrg delfiles="$delfiles $export_symbols" 7302e169010aSmrg fi 73037914d74bSmrg 7304e169010aSmrg orig_export_symbols= 7305e169010aSmrg case $host_os in 7306e169010aSmrg cygwin* | mingw* | cegcc*) 7307e169010aSmrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 7308e169010aSmrg # exporting using user supplied symfile 7309e169010aSmrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 7310e169010aSmrg # and it's NOT already a .def file. Must figure out 7311e169010aSmrg # which of the given symbols are data symbols and tag 7312e169010aSmrg # them as such. So, trigger use of export_symbols_cmds. 7313e169010aSmrg # export_symbols gets reassigned inside the "prepare 7314e169010aSmrg # the list of exported symbols" if statement, so the 7315e169010aSmrg # include_expsyms logic still works. 7316e169010aSmrg orig_export_symbols="$export_symbols" 7317e169010aSmrg export_symbols= 7318e169010aSmrg always_export_symbols=yes 7319e169010aSmrg fi 7320e169010aSmrg fi 7321e169010aSmrg ;; 7322e169010aSmrg esac 73237914d74bSmrg 7324e169010aSmrg # Prepare the list of exported symbols 7325e169010aSmrg if test -z "$export_symbols"; then 7326e169010aSmrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 7327e169010aSmrg func_verbose "generating symbol list for \`$libname.la'" 7328e169010aSmrg export_symbols="$output_objdir/$libname.exp" 7329e169010aSmrg $opt_dry_run || $RM $export_symbols 7330e169010aSmrg cmds=$export_symbols_cmds 7331e169010aSmrg save_ifs="$IFS"; IFS='~' 7332e169010aSmrg for cmd in $cmds; do 7333e169010aSmrg IFS="$save_ifs" 7334e169010aSmrg eval cmd=\"$cmd\" 7335e169010aSmrg func_len " $cmd" 7336e169010aSmrg len=$func_len_result 7337e169010aSmrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 7338e169010aSmrg func_show_eval "$cmd" 'exit $?' 7339e169010aSmrg skipped_export=false 7340e169010aSmrg else 7341e169010aSmrg # The command line is too long to execute in one step. 7342e169010aSmrg func_verbose "using reloadable object file for export list..." 7343e169010aSmrg skipped_export=: 7344e169010aSmrg # Break out early, otherwise skipped_export may be 7345e169010aSmrg # set to false by a later but shorter cmd. 7346e169010aSmrg break 7347e169010aSmrg fi 7348e169010aSmrg done 7349e169010aSmrg IFS="$save_ifs" 7350e169010aSmrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 7351e169010aSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 7352e169010aSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 7353e169010aSmrg fi 7354e169010aSmrg fi 7355e169010aSmrg fi 73567914d74bSmrg 7357e169010aSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 7358e169010aSmrg tmp_export_symbols="$export_symbols" 7359e169010aSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 7360e8ead290Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 7361e169010aSmrg fi 73627914d74bSmrg 7363e169010aSmrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 7364e169010aSmrg # The given exports_symbols file has to be filtered, so filter it. 7365e169010aSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 7366e169010aSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 7367e169010aSmrg # 's' commands which not all seds can handle. GNU sed should be fine 7368e169010aSmrg # though. Also, the filter scales superlinearly with the number of 7369e169010aSmrg # global variables. join(1) would be nice here, but unfortunately 7370e169010aSmrg # isn't a blessed tool. 7371e169010aSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 7372e169010aSmrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 7373e169010aSmrg export_symbols=$output_objdir/$libname.def 7374e169010aSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 73757914d74bSmrg fi 73767914d74bSmrg 7377e169010aSmrg tmp_deplibs= 7378e169010aSmrg for test_deplib in $deplibs; do 7379e169010aSmrg case " $convenience " in 7380e169010aSmrg *" $test_deplib "*) ;; 7381e169010aSmrg *) 7382e169010aSmrg tmp_deplibs="$tmp_deplibs $test_deplib" 7383e169010aSmrg ;; 7384e169010aSmrg esac 7385e169010aSmrg done 7386e169010aSmrg deplibs="$tmp_deplibs" 73877914d74bSmrg 7388e169010aSmrg if test -n "$convenience"; then 7389e169010aSmrg if test -n "$whole_archive_flag_spec" && 7390e169010aSmrg test "$compiler_needs_object" = yes && 7391e169010aSmrg test -z "$libobjs"; then 7392e169010aSmrg # extract the archives, so we have objects to list. 7393e169010aSmrg # TODO: could optimize this to just extract one archive. 7394e169010aSmrg whole_archive_flag_spec= 7395e169010aSmrg fi 7396e169010aSmrg if test -n "$whole_archive_flag_spec"; then 7397e169010aSmrg save_libobjs=$libobjs 7398e169010aSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 7399e169010aSmrg test "X$libobjs" = "X " && libobjs= 7400e169010aSmrg else 7401e169010aSmrg gentop="$output_objdir/${outputname}x" 7402e169010aSmrg generated="$generated $gentop" 74037914d74bSmrg 7404e169010aSmrg func_extract_archives $gentop $convenience 7405e169010aSmrg libobjs="$libobjs $func_extract_archives_result" 7406e169010aSmrg test "X$libobjs" = "X " && libobjs= 7407e169010aSmrg fi 7408e169010aSmrg fi 74097914d74bSmrg 7410e169010aSmrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 7411e169010aSmrg eval flag=\"$thread_safe_flag_spec\" 7412e169010aSmrg linker_flags="$linker_flags $flag" 7413e169010aSmrg fi 74147914d74bSmrg 7415e169010aSmrg # Make a backup of the uninstalled library when relinking 7416e169010aSmrg if test "$mode" = relink; then 7417e169010aSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 74187914d74bSmrg fi 74197914d74bSmrg 7420e169010aSmrg # Do each of the archive commands. 7421e169010aSmrg if test "$module" = yes && test -n "$module_cmds" ; then 7422e169010aSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 7423e169010aSmrg eval test_cmds=\"$module_expsym_cmds\" 7424e169010aSmrg cmds=$module_expsym_cmds 7425e169010aSmrg else 7426e169010aSmrg eval test_cmds=\"$module_cmds\" 7427e169010aSmrg cmds=$module_cmds 7428e169010aSmrg fi 7429e169010aSmrg else 7430e169010aSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 7431e169010aSmrg eval test_cmds=\"$archive_expsym_cmds\" 7432e169010aSmrg cmds=$archive_expsym_cmds 7433e169010aSmrg else 7434e169010aSmrg eval test_cmds=\"$archive_cmds\" 7435e169010aSmrg cmds=$archive_cmds 7436e169010aSmrg fi 74377914d74bSmrg fi 74387914d74bSmrg 7439e169010aSmrg if test "X$skipped_export" != "X:" && 7440e169010aSmrg func_len " $test_cmds" && 7441e169010aSmrg len=$func_len_result && 7442e169010aSmrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 7443e169010aSmrg : 7444e169010aSmrg else 7445e169010aSmrg # The command line is too long to link in one step, link piecewise 7446e169010aSmrg # or, if using GNU ld and skipped_export is not :, use a linker 7447e169010aSmrg # script. 74487914d74bSmrg 7449e169010aSmrg # Save the value of $output and $libobjs because we want to 7450e169010aSmrg # use them later. If we have whole_archive_flag_spec, we 7451e169010aSmrg # want to use save_libobjs as it was before 7452e169010aSmrg # whole_archive_flag_spec was expanded, because we can't 7453e169010aSmrg # assume the linker understands whole_archive_flag_spec. 7454e169010aSmrg # This may have to be revisited, in case too many 7455e169010aSmrg # convenience libraries get linked in and end up exceeding 7456e169010aSmrg # the spec. 7457e169010aSmrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 7458e169010aSmrg save_libobjs=$libobjs 7459e169010aSmrg fi 7460e169010aSmrg save_output=$output 7461e8ead290Smrg func_basename "$output" 7462e8ead290Smrg output_la=$func_basename_result 74637914d74bSmrg 7464e169010aSmrg # Clear the reloadable object creation command queue and 7465e169010aSmrg # initialize k to one. 7466e169010aSmrg test_cmds= 7467e169010aSmrg concat_cmds= 7468e169010aSmrg objlist= 7469e169010aSmrg last_robj= 7470e169010aSmrg k=1 74717914d74bSmrg 7472e169010aSmrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 7473e169010aSmrg output=${output_objdir}/${output_la}.lnkscript 7474e169010aSmrg func_verbose "creating GNU ld script: $output" 7475e8ead290Smrg echo 'INPUT (' > $output 7476e169010aSmrg for obj in $save_libobjs 7477e169010aSmrg do 7478e169010aSmrg $ECHO "$obj" >> $output 7479e169010aSmrg done 7480e8ead290Smrg echo ')' >> $output 7481e169010aSmrg delfiles="$delfiles $output" 7482e169010aSmrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 7483e169010aSmrg output=${output_objdir}/${output_la}.lnk 7484e169010aSmrg func_verbose "creating linker input file list: $output" 7485e169010aSmrg : > $output 7486e169010aSmrg set x $save_libobjs 7487e169010aSmrg shift 7488e169010aSmrg firstobj= 7489e169010aSmrg if test "$compiler_needs_object" = yes; then 7490e169010aSmrg firstobj="$1 " 7491e169010aSmrg shift 7492e169010aSmrg fi 7493e169010aSmrg for obj 7494e169010aSmrg do 7495e169010aSmrg $ECHO "$obj" >> $output 7496e169010aSmrg done 7497e169010aSmrg delfiles="$delfiles $output" 7498e169010aSmrg output=$firstobj\"$file_list_spec$output\" 7499e169010aSmrg else 7500e169010aSmrg if test -n "$save_libobjs"; then 7501e169010aSmrg func_verbose "creating reloadable object files..." 7502e169010aSmrg output=$output_objdir/$output_la-${k}.$objext 7503e169010aSmrg eval test_cmds=\"$reload_cmds\" 7504e169010aSmrg func_len " $test_cmds" 7505e169010aSmrg len0=$func_len_result 7506e169010aSmrg len=$len0 7507e169010aSmrg 7508e169010aSmrg # Loop over the list of objects to be linked. 7509e169010aSmrg for obj in $save_libobjs 7510e169010aSmrg do 7511e169010aSmrg func_len " $obj" 7512e169010aSmrg func_arith $len + $func_len_result 7513e169010aSmrg len=$func_arith_result 7514e169010aSmrg if test "X$objlist" = X || 7515e169010aSmrg test "$len" -lt "$max_cmd_len"; then 7516e169010aSmrg func_append objlist " $obj" 7517e169010aSmrg else 7518e169010aSmrg # The command $test_cmds is almost too long, add a 7519e169010aSmrg # command to the queue. 7520e169010aSmrg if test "$k" -eq 1 ; then 7521e169010aSmrg # The first file doesn't have a previous command to add. 7522e8ead290Smrg reload_objs=$objlist 7523e8ead290Smrg eval concat_cmds=\"$reload_cmds\" 7524e169010aSmrg else 7525e169010aSmrg # All subsequent reloadable object files will link in 7526e169010aSmrg # the last one created. 7527e8ead290Smrg reload_objs="$objlist $last_robj" 7528e8ead290Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 7529e169010aSmrg fi 7530e169010aSmrg last_robj=$output_objdir/$output_la-${k}.$objext 7531e169010aSmrg func_arith $k + 1 7532e169010aSmrg k=$func_arith_result 7533e169010aSmrg output=$output_objdir/$output_la-${k}.$objext 7534e8ead290Smrg objlist=" $obj" 7535e169010aSmrg func_len " $last_robj" 7536e169010aSmrg func_arith $len0 + $func_len_result 7537e169010aSmrg len=$func_arith_result 7538e169010aSmrg fi 7539e169010aSmrg done 7540e169010aSmrg # Handle the remaining objects by creating one last 7541e169010aSmrg # reloadable object file. All subsequent reloadable object 7542e169010aSmrg # files will link in the last one created. 7543e169010aSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 7544e8ead290Smrg reload_objs="$objlist $last_robj" 7545e8ead290Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 7546e169010aSmrg if test -n "$last_robj"; then 7547e169010aSmrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 7548e169010aSmrg fi 7549e169010aSmrg delfiles="$delfiles $output" 75507914d74bSmrg 7551e169010aSmrg else 7552e169010aSmrg output= 7553e169010aSmrg fi 75547914d74bSmrg 7555e169010aSmrg if ${skipped_export-false}; then 7556e169010aSmrg func_verbose "generating symbol list for \`$libname.la'" 7557e169010aSmrg export_symbols="$output_objdir/$libname.exp" 7558e169010aSmrg $opt_dry_run || $RM $export_symbols 7559e169010aSmrg libobjs=$output 7560e169010aSmrg # Append the command to create the export file. 7561e169010aSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 7562e169010aSmrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 7563e169010aSmrg if test -n "$last_robj"; then 7564e169010aSmrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 7565e169010aSmrg fi 7566e169010aSmrg fi 75677914d74bSmrg 7568e169010aSmrg test -n "$save_libobjs" && 7569e169010aSmrg func_verbose "creating a temporary reloadable object file: $output" 75707914d74bSmrg 7571e169010aSmrg # Loop through the commands generated above and execute them. 7572e169010aSmrg save_ifs="$IFS"; IFS='~' 7573e169010aSmrg for cmd in $concat_cmds; do 7574e169010aSmrg IFS="$save_ifs" 7575e169010aSmrg $opt_silent || { 7576e169010aSmrg func_quote_for_expand "$cmd" 7577e169010aSmrg eval "func_echo $func_quote_for_expand_result" 7578e169010aSmrg } 7579e169010aSmrg $opt_dry_run || eval "$cmd" || { 7580e169010aSmrg lt_exit=$? 7581e169010aSmrg 7582e169010aSmrg # Restore the uninstalled library and exit 7583e169010aSmrg if test "$mode" = relink; then 7584e169010aSmrg ( cd "$output_objdir" && \ 7585e169010aSmrg $RM "${realname}T" && \ 7586e169010aSmrg $MV "${realname}U" "$realname" ) 7587e169010aSmrg fi 75887914d74bSmrg 7589e169010aSmrg exit $lt_exit 7590e169010aSmrg } 7591e169010aSmrg done 7592e169010aSmrg IFS="$save_ifs" 7593e169010aSmrg 7594e169010aSmrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 7595e169010aSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 7596e169010aSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 75977914d74bSmrg fi 75987914d74bSmrg fi 75997914d74bSmrg 7600e169010aSmrg if ${skipped_export-false}; then 7601e169010aSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 7602e169010aSmrg tmp_export_symbols="$export_symbols" 7603e169010aSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 7604e8ead290Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 7605e169010aSmrg fi 76067914d74bSmrg 7607e169010aSmrg if test -n "$orig_export_symbols"; then 7608e169010aSmrg # The given exports_symbols file has to be filtered, so filter it. 7609e169010aSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 7610e169010aSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 7611e169010aSmrg # 's' commands which not all seds can handle. GNU sed should be fine 7612e169010aSmrg # though. Also, the filter scales superlinearly with the number of 7613e169010aSmrg # global variables. join(1) would be nice here, but unfortunately 7614e169010aSmrg # isn't a blessed tool. 7615e169010aSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 7616e169010aSmrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 7617e169010aSmrg export_symbols=$output_objdir/$libname.def 7618e169010aSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 7619e169010aSmrg fi 7620e169010aSmrg fi 76217914d74bSmrg 7622e169010aSmrg libobjs=$output 7623e169010aSmrg # Restore the value of output. 7624e169010aSmrg output=$save_output 76257914d74bSmrg 7626e169010aSmrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 7627e169010aSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 7628e169010aSmrg test "X$libobjs" = "X " && libobjs= 7629e169010aSmrg fi 7630e169010aSmrg # Expand the library linking commands again to reset the 7631e169010aSmrg # value of $libobjs for piecewise linking. 7632e169010aSmrg 7633e169010aSmrg # Do each of the archive commands. 7634e169010aSmrg if test "$module" = yes && test -n "$module_cmds" ; then 7635e169010aSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 7636e169010aSmrg cmds=$module_expsym_cmds 76377914d74bSmrg else 7638e169010aSmrg cmds=$module_cmds 76397914d74bSmrg fi 76407914d74bSmrg else 7641e169010aSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 7642e169010aSmrg cmds=$archive_expsym_cmds 7643e169010aSmrg else 7644e169010aSmrg cmds=$archive_cmds 7645e169010aSmrg fi 76467914d74bSmrg fi 76477914d74bSmrg fi 76487914d74bSmrg 7649e169010aSmrg if test -n "$delfiles"; then 7650e169010aSmrg # Append the command to remove temporary files to $cmds. 7651e169010aSmrg eval cmds=\"\$cmds~\$RM $delfiles\" 7652e169010aSmrg fi 76537914d74bSmrg 7654e169010aSmrg # Add any objects from preloaded convenience libraries 7655e169010aSmrg if test -n "$dlprefiles"; then 7656e169010aSmrg gentop="$output_objdir/${outputname}x" 7657e169010aSmrg generated="$generated $gentop" 76587914d74bSmrg 7659e169010aSmrg func_extract_archives $gentop $dlprefiles 7660e169010aSmrg libobjs="$libobjs $func_extract_archives_result" 7661e169010aSmrg test "X$libobjs" = "X " && libobjs= 76627914d74bSmrg fi 76637914d74bSmrg 7664e169010aSmrg save_ifs="$IFS"; IFS='~' 7665e169010aSmrg for cmd in $cmds; do 7666e169010aSmrg IFS="$save_ifs" 7667e169010aSmrg eval cmd=\"$cmd\" 7668e169010aSmrg $opt_silent || { 7669e169010aSmrg func_quote_for_expand "$cmd" 7670e169010aSmrg eval "func_echo $func_quote_for_expand_result" 7671e169010aSmrg } 7672e169010aSmrg $opt_dry_run || eval "$cmd" || { 7673e169010aSmrg lt_exit=$? 76747914d74bSmrg 7675e169010aSmrg # Restore the uninstalled library and exit 7676e169010aSmrg if test "$mode" = relink; then 7677e169010aSmrg ( cd "$output_objdir" && \ 7678e169010aSmrg $RM "${realname}T" && \ 7679e169010aSmrg $MV "${realname}U" "$realname" ) 7680e169010aSmrg fi 7681e169010aSmrg 7682e169010aSmrg exit $lt_exit 7683e169010aSmrg } 7684e169010aSmrg done 7685e169010aSmrg IFS="$save_ifs" 7686e169010aSmrg 7687e169010aSmrg # Restore the uninstalled library and exit 7688e169010aSmrg if test "$mode" = relink; then 7689e169010aSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 7690e169010aSmrg 7691e169010aSmrg if test -n "$convenience"; then 7692e169010aSmrg if test -z "$whole_archive_flag_spec"; then 7693e169010aSmrg func_show_eval '${RM}r "$gentop"' 76947914d74bSmrg fi 76957914d74bSmrg fi 76967914d74bSmrg 7697e169010aSmrg exit $EXIT_SUCCESS 7698e169010aSmrg fi 76997914d74bSmrg 7700e169010aSmrg # Create links to the real library. 7701e169010aSmrg for linkname in $linknames; do 7702e169010aSmrg if test "$realname" != "$linkname"; then 7703e169010aSmrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 7704e169010aSmrg fi 7705e169010aSmrg done 7706e169010aSmrg 7707e169010aSmrg # If -module or -export-dynamic was specified, set the dlname. 7708e169010aSmrg if test "$module" = yes || test "$export_dynamic" = yes; then 7709e169010aSmrg # On all known operating systems, these are identical. 7710e169010aSmrg dlname="$soname" 7711e169010aSmrg fi 7712e169010aSmrg fi 7713e169010aSmrg ;; 7714e169010aSmrg 7715e169010aSmrg obj) 7716e169010aSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7717e169010aSmrg func_warning "\`-dlopen' is ignored for objects" 7718e169010aSmrg fi 7719e169010aSmrg 7720e169010aSmrg case " $deplibs" in 7721e169010aSmrg *\ -l* | *\ -L*) 7722e169010aSmrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 7723e169010aSmrg esac 7724e169010aSmrg 7725e169010aSmrg test -n "$rpath" && \ 7726e169010aSmrg func_warning "\`-rpath' is ignored for objects" 7727e169010aSmrg 7728e169010aSmrg test -n "$xrpath" && \ 7729e169010aSmrg func_warning "\`-R' is ignored for objects" 7730e169010aSmrg 7731e169010aSmrg test -n "$vinfo" && \ 7732e169010aSmrg func_warning "\`-version-info' is ignored for objects" 7733e169010aSmrg 7734e169010aSmrg test -n "$release" && \ 7735e169010aSmrg func_warning "\`-release' is ignored for objects" 7736e169010aSmrg 7737e169010aSmrg case $output in 7738e169010aSmrg *.lo) 7739e169010aSmrg test -n "$objs$old_deplibs" && \ 7740e169010aSmrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 7741e169010aSmrg 7742e169010aSmrg libobj=$output 7743e169010aSmrg func_lo2o "$libobj" 7744e169010aSmrg obj=$func_lo2o_result 7745e169010aSmrg ;; 7746e169010aSmrg *) 7747e169010aSmrg libobj= 7748e169010aSmrg obj="$output" 7749e169010aSmrg ;; 7750e169010aSmrg esac 7751e169010aSmrg 7752e169010aSmrg # Delete the old objects. 7753e169010aSmrg $opt_dry_run || $RM $obj $libobj 7754e169010aSmrg 7755e169010aSmrg # Objects from convenience libraries. This assumes 7756e169010aSmrg # single-version convenience libraries. Whenever we create 7757e169010aSmrg # different ones for PIC/non-PIC, this we'll have to duplicate 7758e169010aSmrg # the extraction. 7759e169010aSmrg reload_conv_objs= 7760e169010aSmrg gentop= 7761e169010aSmrg # reload_cmds runs $LD directly, so let us get rid of 7762e169010aSmrg # -Wl from whole_archive_flag_spec and hope we can get by with 7763e169010aSmrg # turning comma into space.. 7764e169010aSmrg wl= 7765e169010aSmrg 7766e169010aSmrg if test -n "$convenience"; then 7767e169010aSmrg if test -n "$whole_archive_flag_spec"; then 7768e169010aSmrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 7769e8ead290Smrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 7770e169010aSmrg else 7771e169010aSmrg gentop="$output_objdir/${obj}x" 7772e169010aSmrg generated="$generated $gentop" 7773e169010aSmrg 7774e169010aSmrg func_extract_archives $gentop $convenience 7775e169010aSmrg reload_conv_objs="$reload_objs $func_extract_archives_result" 7776e169010aSmrg fi 7777e169010aSmrg fi 77787914d74bSmrg 7779e169010aSmrg # Create the old-style object. 7780e8ead290Smrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 77817914d74bSmrg 7782e169010aSmrg output="$obj" 7783e169010aSmrg func_execute_cmds "$reload_cmds" 'exit $?' 77847914d74bSmrg 7785e169010aSmrg # Exit if we aren't doing a library object file. 7786e169010aSmrg if test -z "$libobj"; then 7787e169010aSmrg if test -n "$gentop"; then 7788e169010aSmrg func_show_eval '${RM}r "$gentop"' 7789e169010aSmrg fi 77907914d74bSmrg 7791e169010aSmrg exit $EXIT_SUCCESS 7792e169010aSmrg fi 77937914d74bSmrg 7794e169010aSmrg if test "$build_libtool_libs" != yes; then 7795e169010aSmrg if test -n "$gentop"; then 7796e169010aSmrg func_show_eval '${RM}r "$gentop"' 7797e169010aSmrg fi 77987914d74bSmrg 7799e169010aSmrg # Create an invalid libtool object if no PIC, so that we don't 7800e169010aSmrg # accidentally link it into a program. 7801e169010aSmrg # $show "echo timestamp > $libobj" 7802e169010aSmrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 7803e169010aSmrg exit $EXIT_SUCCESS 7804e169010aSmrg fi 78057914d74bSmrg 7806e169010aSmrg if test -n "$pic_flag" || test "$pic_mode" != default; then 7807e169010aSmrg # Only do commands if we really have different PIC objects. 7808e169010aSmrg reload_objs="$libobjs $reload_conv_objs" 7809e169010aSmrg output="$libobj" 7810e169010aSmrg func_execute_cmds "$reload_cmds" 'exit $?' 78117914d74bSmrg fi 78127914d74bSmrg 7813e169010aSmrg if test -n "$gentop"; then 7814e169010aSmrg func_show_eval '${RM}r "$gentop"' 7815e169010aSmrg fi 78167914d74bSmrg 7817e169010aSmrg exit $EXIT_SUCCESS 7818e169010aSmrg ;; 78197914d74bSmrg 7820e169010aSmrg prog) 7821e169010aSmrg case $host in 7822e169010aSmrg *cygwin*) func_stripname '' '.exe' "$output" 7823e169010aSmrg output=$func_stripname_result.exe;; 78247914d74bSmrg esac 7825e169010aSmrg test -n "$vinfo" && \ 7826e169010aSmrg func_warning "\`-version-info' is ignored for programs" 78277914d74bSmrg 7828e169010aSmrg test -n "$release" && \ 7829e169010aSmrg func_warning "\`-release' is ignored for programs" 78307914d74bSmrg 7831e169010aSmrg test "$preload" = yes \ 7832e169010aSmrg && test "$dlopen_support" = unknown \ 7833e169010aSmrg && test "$dlopen_self" = unknown \ 7834e169010aSmrg && test "$dlopen_self_static" = unknown && \ 7835e169010aSmrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 78367914d74bSmrg 7837e169010aSmrg case $host in 7838e169010aSmrg *-*-rhapsody* | *-*-darwin1.[012]) 7839e169010aSmrg # On Rhapsody replace the C library is the System framework 7840e8ead290Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 7841e8ead290Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 78427914d74bSmrg ;; 78437914d74bSmrg esac 78447914d74bSmrg 7845e169010aSmrg case $host in 7846e169010aSmrg *-*-darwin*) 7847e169010aSmrg # Don't allow lazy linking, it breaks C++ global constructors 7848e169010aSmrg # But is supposedly fixed on 10.4 or later (yay!). 7849e169010aSmrg if test "$tagname" = CXX ; then 7850e169010aSmrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 7851e169010aSmrg 10.[0123]) 7852e169010aSmrg compile_command="$compile_command ${wl}-bind_at_load" 7853e169010aSmrg finalize_command="$finalize_command ${wl}-bind_at_load" 7854e169010aSmrg ;; 7855e169010aSmrg esac 7856e169010aSmrg fi 7857e169010aSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7858e8ead290Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7859e8ead290Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 78607914d74bSmrg ;; 78617914d74bSmrg esac 78627914d74bSmrg 78637914d74bSmrg 7864e169010aSmrg # move library search paths that coincide with paths to not yet 7865e169010aSmrg # installed libraries to the beginning of the library search list 7866e169010aSmrg new_libs= 7867e169010aSmrg for path in $notinst_path; do 7868e169010aSmrg case " $new_libs " in 7869e169010aSmrg *" -L$path/$objdir "*) ;; 78707914d74bSmrg *) 7871e169010aSmrg case " $compile_deplibs " in 7872e169010aSmrg *" -L$path/$objdir "*) 7873e169010aSmrg new_libs="$new_libs -L$path/$objdir" ;; 7874e169010aSmrg esac 78757914d74bSmrg ;; 78767914d74bSmrg esac 78777914d74bSmrg done 7878e169010aSmrg for deplib in $compile_deplibs; do 7879e169010aSmrg case $deplib in 7880e169010aSmrg -L*) 7881e169010aSmrg case " $new_libs " in 7882e169010aSmrg *" $deplib "*) ;; 7883e169010aSmrg *) new_libs="$new_libs $deplib" ;; 7884e169010aSmrg esac 7885e169010aSmrg ;; 7886e169010aSmrg *) new_libs="$new_libs $deplib" ;; 7887e169010aSmrg esac 7888e169010aSmrg done 7889e169010aSmrg compile_deplibs="$new_libs" 78907914d74bSmrg 78917914d74bSmrg 7892e169010aSmrg compile_command="$compile_command $compile_deplibs" 7893e169010aSmrg finalize_command="$finalize_command $finalize_deplibs" 78947914d74bSmrg 7895e169010aSmrg if test -n "$rpath$xrpath"; then 7896e169010aSmrg # If the user specified any rpath flags, then add them. 7897e169010aSmrg for libdir in $rpath $xrpath; do 7898e169010aSmrg # This is the magic to use -rpath. 7899e169010aSmrg case "$finalize_rpath " in 7900e169010aSmrg *" $libdir "*) ;; 7901e169010aSmrg *) finalize_rpath="$finalize_rpath $libdir" ;; 7902e169010aSmrg esac 7903e169010aSmrg done 7904e169010aSmrg fi 79057914d74bSmrg 7906e169010aSmrg # Now hardcode the library paths 7907e169010aSmrg rpath= 7908e169010aSmrg hardcode_libdirs= 7909e169010aSmrg for libdir in $compile_rpath $finalize_rpath; do 7910e169010aSmrg if test -n "$hardcode_libdir_flag_spec"; then 7911e169010aSmrg if test -n "$hardcode_libdir_separator"; then 7912e169010aSmrg if test -z "$hardcode_libdirs"; then 7913e169010aSmrg hardcode_libdirs="$libdir" 7914e169010aSmrg else 7915e169010aSmrg # Just accumulate the unique libdirs. 7916e169010aSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 7917e169010aSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 7918e169010aSmrg ;; 7919e169010aSmrg *) 7920e169010aSmrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 7921e169010aSmrg ;; 7922e169010aSmrg esac 7923e169010aSmrg fi 7924e169010aSmrg else 7925e169010aSmrg eval flag=\"$hardcode_libdir_flag_spec\" 7926e169010aSmrg rpath="$rpath $flag" 7927e169010aSmrg fi 7928e169010aSmrg elif test -n "$runpath_var"; then 7929e169010aSmrg case "$perm_rpath " in 79307914d74bSmrg *" $libdir "*) ;; 7931e169010aSmrg *) perm_rpath="$perm_rpath $libdir" ;; 79327914d74bSmrg esac 7933e169010aSmrg fi 7934e169010aSmrg case $host in 7935e169010aSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 7936e169010aSmrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 7937e169010aSmrg case :$dllsearchpath: in 7938e169010aSmrg *":$libdir:"*) ;; 7939e169010aSmrg ::) dllsearchpath=$libdir;; 7940e169010aSmrg *) dllsearchpath="$dllsearchpath:$libdir";; 7941e169010aSmrg esac 7942e169010aSmrg case :$dllsearchpath: in 7943e169010aSmrg *":$testbindir:"*) ;; 7944e169010aSmrg ::) dllsearchpath=$testbindir;; 7945e169010aSmrg *) dllsearchpath="$dllsearchpath:$testbindir";; 7946e169010aSmrg esac 7947e169010aSmrg ;; 7948e169010aSmrg esac 7949e169010aSmrg done 7950e169010aSmrg # Substitute the hardcoded libdirs into the rpath. 7951e169010aSmrg if test -n "$hardcode_libdir_separator" && 7952e169010aSmrg test -n "$hardcode_libdirs"; then 7953e169010aSmrg libdir="$hardcode_libdirs" 7954e169010aSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 7955e169010aSmrg fi 7956e169010aSmrg compile_rpath="$rpath" 7957e169010aSmrg 7958e169010aSmrg rpath= 7959e169010aSmrg hardcode_libdirs= 7960e169010aSmrg for libdir in $finalize_rpath; do 7961e169010aSmrg if test -n "$hardcode_libdir_flag_spec"; then 7962e169010aSmrg if test -n "$hardcode_libdir_separator"; then 7963e169010aSmrg if test -z "$hardcode_libdirs"; then 7964e169010aSmrg hardcode_libdirs="$libdir" 7965e169010aSmrg else 7966e169010aSmrg # Just accumulate the unique libdirs. 7967e169010aSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 7968e169010aSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 7969e169010aSmrg ;; 7970e169010aSmrg *) 7971e169010aSmrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 7972e169010aSmrg ;; 7973e169010aSmrg esac 7974e169010aSmrg fi 7975e169010aSmrg else 7976e169010aSmrg eval flag=\"$hardcode_libdir_flag_spec\" 7977e169010aSmrg rpath="$rpath $flag" 7978e169010aSmrg fi 7979e169010aSmrg elif test -n "$runpath_var"; then 7980e169010aSmrg case "$finalize_perm_rpath " in 79817914d74bSmrg *" $libdir "*) ;; 7982e169010aSmrg *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; 79837914d74bSmrg esac 79847914d74bSmrg fi 7985e169010aSmrg done 7986e169010aSmrg # Substitute the hardcoded libdirs into the rpath. 7987e169010aSmrg if test -n "$hardcode_libdir_separator" && 7988e169010aSmrg test -n "$hardcode_libdirs"; then 7989e169010aSmrg libdir="$hardcode_libdirs" 7990e169010aSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 7991e169010aSmrg fi 7992e169010aSmrg finalize_rpath="$rpath" 79937914d74bSmrg 7994e169010aSmrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 7995e169010aSmrg # Transform all the library objects into standard objects. 7996e8ead290Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 7997e8ead290Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 7998e169010aSmrg fi 79997914d74bSmrg 8000e169010aSmrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 80017914d74bSmrg 8002e169010aSmrg # template prelinking step 8003e169010aSmrg if test -n "$prelink_cmds"; then 8004e169010aSmrg func_execute_cmds "$prelink_cmds" 'exit $?' 8005e169010aSmrg fi 80067914d74bSmrg 8007e169010aSmrg wrappers_required=yes 8008e169010aSmrg case $host in 8009e8ead290Smrg *cegcc* | *mingw32ce*) 8010e8ead290Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 8011e8ead290Smrg wrappers_required=no 8012e8ead290Smrg ;; 8013e169010aSmrg *cygwin* | *mingw* ) 8014e169010aSmrg if test "$build_libtool_libs" != yes; then 8015e169010aSmrg wrappers_required=no 8016e169010aSmrg fi 8017e169010aSmrg ;; 8018e169010aSmrg *) 8019e169010aSmrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 8020e169010aSmrg wrappers_required=no 8021e169010aSmrg fi 8022e169010aSmrg ;; 8023e169010aSmrg esac 8024e169010aSmrg if test "$wrappers_required" = no; then 8025e169010aSmrg # Replace the output file specification. 8026e8ead290Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8027e169010aSmrg link_command="$compile_command$compile_rpath" 80287914d74bSmrg 8029e169010aSmrg # We have no uninstalled library dependencies, so finalize right now. 8030e169010aSmrg exit_status=0 8031e169010aSmrg func_show_eval "$link_command" 'exit_status=$?' 80327914d74bSmrg 8033e169010aSmrg # Delete the generated files. 8034e169010aSmrg if test -f "$output_objdir/${outputname}S.${objext}"; then 8035e169010aSmrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8036e169010aSmrg fi 80377914d74bSmrg 8038e169010aSmrg exit $exit_status 8039e169010aSmrg fi 80407914d74bSmrg 8041e169010aSmrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 8042e169010aSmrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8043e169010aSmrg fi 8044e169010aSmrg if test -n "$finalize_shlibpath"; then 8045e169010aSmrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8046e169010aSmrg fi 80477914d74bSmrg 8048e169010aSmrg compile_var= 8049e169010aSmrg finalize_var= 8050e169010aSmrg if test -n "$runpath_var"; then 8051e169010aSmrg if test -n "$perm_rpath"; then 8052e169010aSmrg # We should set the runpath_var. 8053e169010aSmrg rpath= 8054e169010aSmrg for dir in $perm_rpath; do 8055e169010aSmrg rpath="$rpath$dir:" 80567914d74bSmrg done 8057e169010aSmrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 80587914d74bSmrg fi 8059e169010aSmrg if test -n "$finalize_perm_rpath"; then 8060e169010aSmrg # We should set the runpath_var. 8061e169010aSmrg rpath= 8062e169010aSmrg for dir in $finalize_perm_rpath; do 8063e169010aSmrg rpath="$rpath$dir:" 8064e169010aSmrg done 8065e169010aSmrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8066e169010aSmrg fi 8067e169010aSmrg fi 80687914d74bSmrg 8069e169010aSmrg if test "$no_install" = yes; then 8070e169010aSmrg # We don't need to create a wrapper script. 8071e169010aSmrg link_command="$compile_var$compile_command$compile_rpath" 8072e169010aSmrg # Replace the output file specification. 8073e8ead290Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8074e169010aSmrg # Delete the old output file. 8075e169010aSmrg $opt_dry_run || $RM $output 8076e169010aSmrg # Link the executable and exit 8077e169010aSmrg func_show_eval "$link_command" 'exit $?' 8078e169010aSmrg exit $EXIT_SUCCESS 8079e169010aSmrg fi 80807914d74bSmrg 8081e169010aSmrg if test "$hardcode_action" = relink; then 8082e169010aSmrg # Fast installation is not supported 8083e169010aSmrg link_command="$compile_var$compile_command$compile_rpath" 8084e169010aSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 80857914d74bSmrg 8086e169010aSmrg func_warning "this platform does not like uninstalled shared libraries" 8087e169010aSmrg func_warning "\`$output' will be relinked during installation" 8088e169010aSmrg else 8089e169010aSmrg if test "$fast_install" != no; then 8090e169010aSmrg link_command="$finalize_var$compile_command$finalize_rpath" 8091e169010aSmrg if test "$fast_install" = yes; then 8092e8ead290Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 8093e169010aSmrg else 8094e169010aSmrg # fast_install is set to needless 8095e169010aSmrg relink_command= 8096e169010aSmrg fi 80977914d74bSmrg else 8098e169010aSmrg link_command="$compile_var$compile_command$compile_rpath" 8099e169010aSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 81007914d74bSmrg fi 8101e169010aSmrg fi 81027914d74bSmrg 8103e169010aSmrg # Replace the output file specification. 8104e8ead290Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 81057914d74bSmrg 8106e169010aSmrg # Delete the old output files. 8107e169010aSmrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 81087914d74bSmrg 8109e169010aSmrg func_show_eval "$link_command" 'exit $?' 81107914d74bSmrg 8111e169010aSmrg # Now create the wrapper script. 8112e169010aSmrg func_verbose "creating $output" 81137914d74bSmrg 8114e169010aSmrg # Quote the relink command for shipping. 8115e169010aSmrg if test -n "$relink_command"; then 8116e169010aSmrg # Preserve any variables that may affect compiler behavior 8117e169010aSmrg for var in $variables_saved_for_relink; do 8118e169010aSmrg if eval test -z \"\${$var+set}\"; then 8119e169010aSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 8120e169010aSmrg elif eval var_value=\$$var; test -z "$var_value"; then 8121e169010aSmrg relink_command="$var=; export $var; $relink_command" 8122e169010aSmrg else 8123e169010aSmrg func_quote_for_eval "$var_value" 8124e169010aSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 8125e169010aSmrg fi 8126e169010aSmrg done 8127e169010aSmrg relink_command="(cd `pwd`; $relink_command)" 8128e8ead290Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 8129e169010aSmrg fi 81307914d74bSmrg 8131e169010aSmrg # Only actually do things if not in dry run mode. 8132e169010aSmrg $opt_dry_run || { 8133e169010aSmrg # win32 will think the script is a binary if it has 8134e169010aSmrg # a .exe suffix, so we strip it off here. 8135e169010aSmrg case $output in 8136e169010aSmrg *.exe) func_stripname '' '.exe' "$output" 8137e169010aSmrg output=$func_stripname_result ;; 8138e169010aSmrg esac 8139e169010aSmrg # test for cygwin because mv fails w/o .exe extensions 81407914d74bSmrg case $host in 8141e169010aSmrg *cygwin*) 8142e169010aSmrg exeext=.exe 8143e169010aSmrg func_stripname '' '.exe' "$outputname" 8144e169010aSmrg outputname=$func_stripname_result ;; 8145e169010aSmrg *) exeext= ;; 81467914d74bSmrg esac 8147e169010aSmrg case $host in 8148e169010aSmrg *cygwin* | *mingw* ) 8149e169010aSmrg func_dirname_and_basename "$output" "" "." 8150e169010aSmrg output_name=$func_basename_result 8151e169010aSmrg output_path=$func_dirname_result 8152e169010aSmrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 8153e169010aSmrg cwrapper="$output_path/$output_name.exe" 8154e169010aSmrg $RM $cwrappersource $cwrapper 8155e169010aSmrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 8156e169010aSmrg 8157e169010aSmrg func_emit_cwrapperexe_src > $cwrappersource 8158e169010aSmrg 8159e169010aSmrg # The wrapper executable is built using the $host compiler, 8160e169010aSmrg # because it contains $host paths and files. If cross- 8161e169010aSmrg # compiling, it, like the target executable, must be 8162e169010aSmrg # executed on the $host or under an emulation environment. 8163e169010aSmrg $opt_dry_run || { 8164e169010aSmrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 8165e169010aSmrg $STRIP $cwrapper 8166e169010aSmrg } 81677914d74bSmrg 8168e169010aSmrg # Now, create the wrapper script for func_source use: 8169e169010aSmrg func_ltwrapper_scriptname $cwrapper 8170e169010aSmrg $RM $func_ltwrapper_scriptname_result 8171e169010aSmrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 8172e169010aSmrg $opt_dry_run || { 8173e169010aSmrg # note: this script will not be executed, so do not chmod. 8174e169010aSmrg if test "x$build" = "x$host" ; then 8175e169010aSmrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 81767914d74bSmrg else 8177e169010aSmrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 81787914d74bSmrg fi 8179e169010aSmrg } 8180e169010aSmrg ;; 8181e169010aSmrg * ) 8182e169010aSmrg $RM $output 8183e169010aSmrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 81847914d74bSmrg 8185e169010aSmrg func_emit_wrapper no > $output 8186e169010aSmrg chmod +x $output 81877914d74bSmrg ;; 81887914d74bSmrg esac 8189e169010aSmrg } 8190e169010aSmrg exit $EXIT_SUCCESS 8191e169010aSmrg ;; 8192e169010aSmrg esac 81937914d74bSmrg 8194e169010aSmrg # See if we need to build an old-fashioned archive. 8195e169010aSmrg for oldlib in $oldlibs; do 81967914d74bSmrg 8197e169010aSmrg if test "$build_libtool_libs" = convenience; then 8198e169010aSmrg oldobjs="$libobjs_save $symfileobj" 8199e169010aSmrg addlibs="$convenience" 8200e169010aSmrg build_libtool_libs=no 8201e169010aSmrg else 8202e169010aSmrg if test "$build_libtool_libs" = module; then 8203e169010aSmrg oldobjs="$libobjs_save" 8204e169010aSmrg build_libtool_libs=no 8205e169010aSmrg else 8206e169010aSmrg oldobjs="$old_deplibs $non_pic_objects" 8207e169010aSmrg if test "$preload" = yes && test -f "$symfileobj"; then 8208e169010aSmrg oldobjs="$oldobjs $symfileobj" 8209e169010aSmrg fi 8210e169010aSmrg fi 8211e169010aSmrg addlibs="$old_convenience" 82127914d74bSmrg fi 82137914d74bSmrg 8214e169010aSmrg if test -n "$addlibs"; then 8215e169010aSmrg gentop="$output_objdir/${outputname}x" 8216e169010aSmrg generated="$generated $gentop" 82177914d74bSmrg 8218e169010aSmrg func_extract_archives $gentop $addlibs 8219e169010aSmrg oldobjs="$oldobjs $func_extract_archives_result" 8220e169010aSmrg fi 82217914d74bSmrg 8222e169010aSmrg # Do each command in the archive commands. 8223e169010aSmrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 8224e169010aSmrg cmds=$old_archive_from_new_cmds 8225e169010aSmrg else 82267914d74bSmrg 8227e169010aSmrg # Add any objects from preloaded convenience libraries 8228e169010aSmrg if test -n "$dlprefiles"; then 8229e169010aSmrg gentop="$output_objdir/${outputname}x" 8230e169010aSmrg generated="$generated $gentop" 82317914d74bSmrg 8232e169010aSmrg func_extract_archives $gentop $dlprefiles 8233e169010aSmrg oldobjs="$oldobjs $func_extract_archives_result" 8234e169010aSmrg fi 82357914d74bSmrg 8236e169010aSmrg # POSIX demands no paths to be encoded in archives. We have 8237e169010aSmrg # to avoid creating archives with duplicate basenames if we 8238e169010aSmrg # might have to extract them afterwards, e.g., when creating a 8239e169010aSmrg # static archive out of a convenience library, or when linking 8240e169010aSmrg # the entirety of a libtool archive into another (currently 8241e169010aSmrg # not supported by libtool). 8242e169010aSmrg if (for obj in $oldobjs 8243e169010aSmrg do 8244e169010aSmrg func_basename "$obj" 8245e169010aSmrg $ECHO "$func_basename_result" 8246e169010aSmrg done | sort | sort -uc >/dev/null 2>&1); then 8247e169010aSmrg : 8248e169010aSmrg else 8249e8ead290Smrg echo "copying selected object files to avoid basename conflicts..." 8250e169010aSmrg gentop="$output_objdir/${outputname}x" 8251e169010aSmrg generated="$generated $gentop" 8252e169010aSmrg func_mkdir_p "$gentop" 8253e169010aSmrg save_oldobjs=$oldobjs 8254e169010aSmrg oldobjs= 8255e169010aSmrg counter=1 8256e169010aSmrg for obj in $save_oldobjs 8257e169010aSmrg do 8258e169010aSmrg func_basename "$obj" 8259e169010aSmrg objbase="$func_basename_result" 8260e169010aSmrg case " $oldobjs " in 8261e169010aSmrg " ") oldobjs=$obj ;; 8262e169010aSmrg *[\ /]"$objbase "*) 8263e169010aSmrg while :; do 8264e169010aSmrg # Make sure we don't pick an alternate name that also 8265e169010aSmrg # overlaps. 8266e169010aSmrg newobj=lt$counter-$objbase 8267e169010aSmrg func_arith $counter + 1 8268e169010aSmrg counter=$func_arith_result 8269e169010aSmrg case " $oldobjs " in 8270e169010aSmrg *[\ /]"$newobj "*) ;; 8271e169010aSmrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 8272e169010aSmrg esac 8273e169010aSmrg done 8274e169010aSmrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 8275e169010aSmrg oldobjs="$oldobjs $gentop/$newobj" 8276e169010aSmrg ;; 8277e169010aSmrg *) oldobjs="$oldobjs $obj" ;; 8278e169010aSmrg esac 82797914d74bSmrg done 82807914d74bSmrg fi 8281e169010aSmrg eval cmds=\"$old_archive_cmds\" 82827914d74bSmrg 8283e169010aSmrg func_len " $cmds" 8284e169010aSmrg len=$func_len_result 8285e169010aSmrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 8286e169010aSmrg cmds=$old_archive_cmds 8287e169010aSmrg else 8288e169010aSmrg # the command line is too long to link in one step, link in parts 8289e169010aSmrg func_verbose "using piecewise archive linking..." 8290e169010aSmrg save_RANLIB=$RANLIB 8291e169010aSmrg RANLIB=: 8292e169010aSmrg objlist= 8293e169010aSmrg concat_cmds= 8294e169010aSmrg save_oldobjs=$oldobjs 8295e169010aSmrg oldobjs= 8296e169010aSmrg # Is there a better way of finding the last object in the list? 8297e169010aSmrg for obj in $save_oldobjs 8298e169010aSmrg do 8299e169010aSmrg last_oldobj=$obj 8300e169010aSmrg done 8301e169010aSmrg eval test_cmds=\"$old_archive_cmds\" 8302e169010aSmrg func_len " $test_cmds" 8303e169010aSmrg len0=$func_len_result 8304e169010aSmrg len=$len0 8305e169010aSmrg for obj in $save_oldobjs 8306e169010aSmrg do 8307e169010aSmrg func_len " $obj" 8308e169010aSmrg func_arith $len + $func_len_result 8309e169010aSmrg len=$func_arith_result 8310e169010aSmrg func_append objlist " $obj" 8311e169010aSmrg if test "$len" -lt "$max_cmd_len"; then 8312e169010aSmrg : 8313e169010aSmrg else 8314e169010aSmrg # the above command should be used before it gets too long 8315e169010aSmrg oldobjs=$objlist 8316e169010aSmrg if test "$obj" = "$last_oldobj" ; then 8317e169010aSmrg RANLIB=$save_RANLIB 8318e169010aSmrg fi 8319e169010aSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8320e169010aSmrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 8321e169010aSmrg objlist= 8322e169010aSmrg len=$len0 8323e169010aSmrg fi 8324e169010aSmrg done 8325e169010aSmrg RANLIB=$save_RANLIB 8326e169010aSmrg oldobjs=$objlist 8327e169010aSmrg if test "X$oldobjs" = "X" ; then 8328e169010aSmrg eval cmds=\"\$concat_cmds\" 8329e169010aSmrg else 8330e169010aSmrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 8331e169010aSmrg fi 8332e169010aSmrg fi 8333e169010aSmrg fi 8334e169010aSmrg func_execute_cmds "$cmds" 'exit $?' 83357914d74bSmrg done 83367914d74bSmrg 8337e169010aSmrg test -n "$generated" && \ 8338e169010aSmrg func_show_eval "${RM}r$generated" 83397914d74bSmrg 8340e169010aSmrg # Now create the libtool archive. 8341e169010aSmrg case $output in 8342e169010aSmrg *.la) 8343e169010aSmrg old_library= 8344e169010aSmrg test "$build_old_libs" = yes && old_library="$libname.$libext" 8345e169010aSmrg func_verbose "creating $output" 83467914d74bSmrg 8347e169010aSmrg # Preserve any variables that may affect compiler behavior 8348e169010aSmrg for var in $variables_saved_for_relink; do 8349e169010aSmrg if eval test -z \"\${$var+set}\"; then 8350e169010aSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 8351e169010aSmrg elif eval var_value=\$$var; test -z "$var_value"; then 8352e169010aSmrg relink_command="$var=; export $var; $relink_command" 83537914d74bSmrg else 8354e169010aSmrg func_quote_for_eval "$var_value" 8355e169010aSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 83567914d74bSmrg fi 8357e169010aSmrg done 8358e169010aSmrg # Quote the link command for shipping. 8359e169010aSmrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 8360e8ead290Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 8361e169010aSmrg if test "$hardcode_automatic" = yes ; then 8362e169010aSmrg relink_command= 8363e169010aSmrg fi 83647914d74bSmrg 8365e169010aSmrg # Only create the output if not a dry run. 8366e169010aSmrg $opt_dry_run || { 8367e169010aSmrg for installed in no yes; do 8368e169010aSmrg if test "$installed" = yes; then 8369e169010aSmrg if test -z "$install_libdir"; then 8370e169010aSmrg break 8371e169010aSmrg fi 8372e169010aSmrg output="$output_objdir/$outputname"i 8373e169010aSmrg # Replace all uninstalled libtool libraries with the installed ones 8374e169010aSmrg newdependency_libs= 8375e169010aSmrg for deplib in $dependency_libs; do 8376e169010aSmrg case $deplib in 8377e169010aSmrg *.la) 8378e169010aSmrg func_basename "$deplib" 8379e169010aSmrg name="$func_basename_result" 8380e169010aSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 8381e169010aSmrg test -z "$libdir" && \ 8382e169010aSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 8383e169010aSmrg newdependency_libs="$newdependency_libs $libdir/$name" 8384e169010aSmrg ;; 8385e169010aSmrg *) newdependency_libs="$newdependency_libs $deplib" ;; 8386e169010aSmrg esac 8387e169010aSmrg done 8388e169010aSmrg dependency_libs="$newdependency_libs" 8389e169010aSmrg newdlfiles= 8390e169010aSmrg 8391e169010aSmrg for lib in $dlfiles; do 8392e169010aSmrg case $lib in 8393e169010aSmrg *.la) 8394e169010aSmrg func_basename "$lib" 8395e169010aSmrg name="$func_basename_result" 8396e169010aSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 8397e169010aSmrg test -z "$libdir" && \ 8398e169010aSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 8399e169010aSmrg newdlfiles="$newdlfiles $libdir/$name" 8400e169010aSmrg ;; 8401e169010aSmrg *) newdlfiles="$newdlfiles $lib" ;; 8402e169010aSmrg esac 8403e169010aSmrg done 8404e169010aSmrg dlfiles="$newdlfiles" 8405e169010aSmrg newdlprefiles= 8406e169010aSmrg for lib in $dlprefiles; do 8407e169010aSmrg case $lib in 8408e169010aSmrg *.la) 8409e169010aSmrg # Only pass preopened files to the pseudo-archive (for 8410e169010aSmrg # eventual linking with the app. that links it) if we 8411e169010aSmrg # didn't already link the preopened objects directly into 8412e169010aSmrg # the library: 8413e169010aSmrg func_basename "$lib" 8414e169010aSmrg name="$func_basename_result" 8415e169010aSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 8416e169010aSmrg test -z "$libdir" && \ 8417e169010aSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 8418e169010aSmrg newdlprefiles="$newdlprefiles $libdir/$name" 8419e169010aSmrg ;; 8420e169010aSmrg esac 8421e169010aSmrg done 8422e169010aSmrg dlprefiles="$newdlprefiles" 8423e169010aSmrg else 8424e169010aSmrg newdlfiles= 8425e169010aSmrg for lib in $dlfiles; do 8426e169010aSmrg case $lib in 8427e169010aSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 8428e169010aSmrg *) abs=`pwd`"/$lib" ;; 8429e169010aSmrg esac 8430e169010aSmrg newdlfiles="$newdlfiles $abs" 8431e169010aSmrg done 8432e169010aSmrg dlfiles="$newdlfiles" 8433e169010aSmrg newdlprefiles= 8434e169010aSmrg for lib in $dlprefiles; do 8435e169010aSmrg case $lib in 8436e169010aSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 8437e169010aSmrg *) abs=`pwd`"/$lib" ;; 8438e169010aSmrg esac 8439e169010aSmrg newdlprefiles="$newdlprefiles $abs" 8440e169010aSmrg done 8441e169010aSmrg dlprefiles="$newdlprefiles" 8442e169010aSmrg fi 8443e169010aSmrg $RM $output 8444e169010aSmrg # place dlname in correct position for cygwin 8445e8ead290Smrg # In fact, it would be nice if we could use this code for all target 8446e8ead290Smrg # systems that can't hard-code library paths into their executables 8447e8ead290Smrg # and that have no shared library path variable independent of PATH, 8448e8ead290Smrg # but it turns out we can't easily determine that from inspecting 8449e8ead290Smrg # libtool variables, so we have to hard-code the OSs to which it 8450e8ead290Smrg # applies here; at the moment, that means platforms that use the PE 8451e8ead290Smrg # object format with DLL files. See the long comment at the top of 8452e8ead290Smrg # tests/bindir.at for full details. 8453e169010aSmrg tdlname=$dlname 8454e169010aSmrg case $host,$output,$installed,$module,$dlname in 8455e8ead290Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 8456e8ead290Smrg # If a -bindir argument was supplied, place the dll there. 8457e8ead290Smrg if test "x$bindir" != x ; 8458e8ead290Smrg then 8459e8ead290Smrg func_relative_path "$install_libdir" "$bindir" 8460e8ead290Smrg tdlname=$func_relative_path_result$dlname 8461e8ead290Smrg else 8462e8ead290Smrg # Otherwise fall back on heuristic. 8463e8ead290Smrg tdlname=../bin/$dlname 8464e8ead290Smrg fi 8465e8ead290Smrg ;; 8466e169010aSmrg esac 8467e169010aSmrg $ECHO > $output "\ 8468e169010aSmrg# $outputname - a libtool library file 8469e169010aSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 8470e169010aSmrg# 8471e169010aSmrg# Please DO NOT delete this file! 8472e169010aSmrg# It is necessary for linking the library. 84737914d74bSmrg 8474e169010aSmrg# The name that we can dlopen(3). 8475e169010aSmrgdlname='$tdlname' 84767914d74bSmrg 8477e169010aSmrg# Names of this library. 8478e169010aSmrglibrary_names='$library_names' 84797914d74bSmrg 8480e169010aSmrg# The name of the static archive. 8481e169010aSmrgold_library='$old_library' 84827914d74bSmrg 8483e169010aSmrg# Linker flags that can not go in dependency_libs. 8484e169010aSmrginherited_linker_flags='$new_inherited_linker_flags' 84857914d74bSmrg 8486e169010aSmrg# Libraries that this one depends upon. 8487e169010aSmrgdependency_libs='$dependency_libs' 84887914d74bSmrg 8489e169010aSmrg# Names of additional weak libraries provided by this library 8490e169010aSmrgweak_library_names='$weak_libs' 84917914d74bSmrg 8492e169010aSmrg# Version information for $libname. 8493e169010aSmrgcurrent=$current 8494e169010aSmrgage=$age 8495e169010aSmrgrevision=$revision 84967914d74bSmrg 8497e169010aSmrg# Is this an already installed library? 8498e169010aSmrginstalled=$installed 84997914d74bSmrg 8500e169010aSmrg# Should we warn about portability when linking against -modules? 8501e169010aSmrgshouldnotlink=$module 85027914d74bSmrg 8503e169010aSmrg# Files to dlopen/dlpreopen 8504e169010aSmrgdlopen='$dlfiles' 8505e169010aSmrgdlpreopen='$dlprefiles' 85067914d74bSmrg 8507e169010aSmrg# Directory that this library needs to be installed in: 8508e169010aSmrglibdir='$install_libdir'" 8509e169010aSmrg if test "$installed" = no && test "$need_relink" = yes; then 8510e169010aSmrg $ECHO >> $output "\ 8511e169010aSmrgrelink_command=\"$relink_command\"" 8512e169010aSmrg fi 8513e169010aSmrg done 8514e169010aSmrg } 85157914d74bSmrg 8516e169010aSmrg # Do a symbolic link so that the libtool archive can be found in 8517e169010aSmrg # LD_LIBRARY_PATH before the program is installed. 8518e169010aSmrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 8519e169010aSmrg ;; 8520e169010aSmrg esac 8521e169010aSmrg exit $EXIT_SUCCESS 8522e169010aSmrg} 85237914d74bSmrg 8524e169010aSmrg{ test "$mode" = link || test "$mode" = relink; } && 8525e169010aSmrg func_mode_link ${1+"$@"} 85267914d74bSmrg 85277914d74bSmrg 8528e169010aSmrg# func_mode_uninstall arg... 8529e169010aSmrgfunc_mode_uninstall () 8530e169010aSmrg{ 8531e169010aSmrg $opt_debug 8532e169010aSmrg RM="$nonopt" 85337914d74bSmrg files= 85347914d74bSmrg rmforce= 85357914d74bSmrg exit_status=0 85367914d74bSmrg 85377914d74bSmrg # This variable tells wrapper scripts just to set variables rather 85387914d74bSmrg # than running their programs. 85397914d74bSmrg libtool_install_magic="$magic" 85407914d74bSmrg 85417914d74bSmrg for arg 85427914d74bSmrg do 85437914d74bSmrg case $arg in 8544e169010aSmrg -f) RM="$RM $arg"; rmforce=yes ;; 8545e169010aSmrg -*) RM="$RM $arg" ;; 85467914d74bSmrg *) files="$files $arg" ;; 85477914d74bSmrg esac 85487914d74bSmrg done 85497914d74bSmrg 8550e169010aSmrg test -z "$RM" && \ 8551e169010aSmrg func_fatal_help "you must specify an RM program" 85527914d74bSmrg 85537914d74bSmrg rmdirs= 85547914d74bSmrg 85557914d74bSmrg origobjdir="$objdir" 85567914d74bSmrg for file in $files; do 8557e169010aSmrg func_dirname "$file" "" "." 8558e169010aSmrg dir="$func_dirname_result" 8559e169010aSmrg if test "X$dir" = X.; then 85607914d74bSmrg objdir="$origobjdir" 85617914d74bSmrg else 85627914d74bSmrg objdir="$dir/$origobjdir" 85637914d74bSmrg fi 8564e169010aSmrg func_basename "$file" 8565e169010aSmrg name="$func_basename_result" 85667914d74bSmrg test "$mode" = uninstall && objdir="$dir" 85677914d74bSmrg 85687914d74bSmrg # Remember objdir for removal later, being careful to avoid duplicates 85697914d74bSmrg if test "$mode" = clean; then 85707914d74bSmrg case " $rmdirs " in 85717914d74bSmrg *" $objdir "*) ;; 85727914d74bSmrg *) rmdirs="$rmdirs $objdir" ;; 85737914d74bSmrg esac 85747914d74bSmrg fi 85757914d74bSmrg 85767914d74bSmrg # Don't error if the file doesn't exist and rm -f was used. 8577e169010aSmrg if { test -L "$file"; } >/dev/null 2>&1 || 8578e169010aSmrg { test -h "$file"; } >/dev/null 2>&1 || 8579e169010aSmrg test -f "$file"; then 85807914d74bSmrg : 85817914d74bSmrg elif test -d "$file"; then 85827914d74bSmrg exit_status=1 85837914d74bSmrg continue 85847914d74bSmrg elif test "$rmforce" = yes; then 85857914d74bSmrg continue 85867914d74bSmrg fi 85877914d74bSmrg 85887914d74bSmrg rmfiles="$file" 85897914d74bSmrg 85907914d74bSmrg case $name in 85917914d74bSmrg *.la) 85927914d74bSmrg # Possibly a libtool archive, so verify it. 8593e169010aSmrg if func_lalib_p "$file"; then 8594e169010aSmrg func_source $dir/$name 85957914d74bSmrg 85967914d74bSmrg # Delete the libtool libraries and symlinks. 85977914d74bSmrg for n in $library_names; do 85987914d74bSmrg rmfiles="$rmfiles $objdir/$n" 85997914d74bSmrg done 86007914d74bSmrg test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" 86017914d74bSmrg 86027914d74bSmrg case "$mode" in 86037914d74bSmrg clean) 86047914d74bSmrg case " $library_names " in 86057914d74bSmrg # " " in the beginning catches empty $dlname 86067914d74bSmrg *" $dlname "*) ;; 86077914d74bSmrg *) rmfiles="$rmfiles $objdir/$dlname" ;; 86087914d74bSmrg esac 8609e169010aSmrg test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" 86107914d74bSmrg ;; 86117914d74bSmrg uninstall) 86127914d74bSmrg if test -n "$library_names"; then 86137914d74bSmrg # Do each command in the postuninstall commands. 8614e169010aSmrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 86157914d74bSmrg fi 86167914d74bSmrg 86177914d74bSmrg if test -n "$old_library"; then 86187914d74bSmrg # Do each command in the old_postuninstall commands. 8619e169010aSmrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 86207914d74bSmrg fi 86217914d74bSmrg # FIXME: should reinstall the best remaining shared library. 86227914d74bSmrg ;; 86237914d74bSmrg esac 86247914d74bSmrg fi 86257914d74bSmrg ;; 86267914d74bSmrg 86277914d74bSmrg *.lo) 86287914d74bSmrg # Possibly a libtool object, so verify it. 8629e169010aSmrg if func_lalib_p "$file"; then 86307914d74bSmrg 86317914d74bSmrg # Read the .lo file 8632e169010aSmrg func_source $dir/$name 86337914d74bSmrg 86347914d74bSmrg # Add PIC object to the list of files to remove. 8635e169010aSmrg if test -n "$pic_object" && 8636e169010aSmrg test "$pic_object" != none; then 86377914d74bSmrg rmfiles="$rmfiles $dir/$pic_object" 86387914d74bSmrg fi 86397914d74bSmrg 86407914d74bSmrg # Add non-PIC object to the list of files to remove. 8641e169010aSmrg if test -n "$non_pic_object" && 8642e169010aSmrg test "$non_pic_object" != none; then 86437914d74bSmrg rmfiles="$rmfiles $dir/$non_pic_object" 86447914d74bSmrg fi 86457914d74bSmrg fi 86467914d74bSmrg ;; 86477914d74bSmrg 86487914d74bSmrg *) 86497914d74bSmrg if test "$mode" = clean ; then 86507914d74bSmrg noexename=$name 86517914d74bSmrg case $file in 86527914d74bSmrg *.exe) 8653e169010aSmrg func_stripname '' '.exe' "$file" 8654e169010aSmrg file=$func_stripname_result 8655e169010aSmrg func_stripname '' '.exe' "$name" 8656e169010aSmrg noexename=$func_stripname_result 86577914d74bSmrg # $file with .exe has already been added to rmfiles, 86587914d74bSmrg # add $file without .exe 86597914d74bSmrg rmfiles="$rmfiles $file" 86607914d74bSmrg ;; 86617914d74bSmrg esac 86627914d74bSmrg # Do a test to see if this is a libtool program. 8663e169010aSmrg if func_ltwrapper_p "$file"; then 8664e169010aSmrg if func_ltwrapper_executable_p "$file"; then 8665e169010aSmrg func_ltwrapper_scriptname "$file" 8666e169010aSmrg relink_command= 8667e169010aSmrg func_source $func_ltwrapper_scriptname_result 8668e169010aSmrg rmfiles="$rmfiles $func_ltwrapper_scriptname_result" 8669e169010aSmrg else 8670e169010aSmrg relink_command= 8671e169010aSmrg func_source $dir/$noexename 8672e169010aSmrg fi 86737914d74bSmrg 86747914d74bSmrg # note $name still contains .exe if it was in $file originally 86757914d74bSmrg # as does the version of $file that was added into $rmfiles 86767914d74bSmrg rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" 86777914d74bSmrg if test "$fast_install" = yes && test -n "$relink_command"; then 86787914d74bSmrg rmfiles="$rmfiles $objdir/lt-$name" 86797914d74bSmrg fi 86807914d74bSmrg if test "X$noexename" != "X$name" ; then 86817914d74bSmrg rmfiles="$rmfiles $objdir/lt-${noexename}.c" 86827914d74bSmrg fi 86837914d74bSmrg fi 86847914d74bSmrg fi 86857914d74bSmrg ;; 86867914d74bSmrg esac 8687e169010aSmrg func_show_eval "$RM $rmfiles" 'exit_status=1' 86887914d74bSmrg done 86897914d74bSmrg objdir="$origobjdir" 86907914d74bSmrg 86917914d74bSmrg # Try to remove the ${objdir}s in the directories where we deleted files 86927914d74bSmrg for dir in $rmdirs; do 86937914d74bSmrg if test -d "$dir"; then 8694e169010aSmrg func_show_eval "rmdir $dir >/dev/null 2>&1" 86957914d74bSmrg fi 86967914d74bSmrg done 86977914d74bSmrg 86987914d74bSmrg exit $exit_status 8699e169010aSmrg} 87007914d74bSmrg 8701e169010aSmrg{ test "$mode" = uninstall || test "$mode" = clean; } && 8702e169010aSmrg func_mode_uninstall ${1+"$@"} 87037914d74bSmrg 8704e169010aSmrgtest -z "$mode" && { 8705e169010aSmrg help="$generic_help" 8706e169010aSmrg func_fatal_help "you must specify a MODE" 8707e169010aSmrg} 8708e169010aSmrg 8709e169010aSmrgtest -z "$exec_cmd" && \ 8710e169010aSmrg func_fatal_help "invalid operation mode \`$mode'" 87117914d74bSmrg 87127914d74bSmrgif test -n "$exec_cmd"; then 8713e169010aSmrg eval exec "$exec_cmd" 87147914d74bSmrg exit $EXIT_FAILURE 87157914d74bSmrgfi 87167914d74bSmrg 8717e169010aSmrgexit $exit_status 87187914d74bSmrg 87197914d74bSmrg 87207914d74bSmrg# The TAGs below are defined such that we never get into a situation 87217914d74bSmrg# in which we disable both kinds of libraries. Given conflicting 87227914d74bSmrg# choices, we go for a static library, that is the most portable, 87237914d74bSmrg# since we can't tell whether shared libraries were disabled because 87247914d74bSmrg# the user asked for that or because the platform doesn't support 87257914d74bSmrg# them. This is particularly important on AIX, because we don't 87267914d74bSmrg# support having both static and shared libraries enabled at the same 87277914d74bSmrg# time on that platform, so we default to a shared-only configuration. 87287914d74bSmrg# If a disable-shared tag is given, we'll fallback to a static-only 87297914d74bSmrg# configuration. But we'll never go from static-only to shared-only. 87307914d74bSmrg 87317914d74bSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 8732e169010aSmrgbuild_libtool_libs=no 8733e169010aSmrgbuild_old_libs=yes 87347914d74bSmrg# ### END LIBTOOL TAG CONFIG: disable-shared 87357914d74bSmrg 87367914d74bSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 8737e169010aSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 87387914d74bSmrg# ### END LIBTOOL TAG CONFIG: disable-static 87397914d74bSmrg 87407914d74bSmrg# Local Variables: 87417914d74bSmrg# mode:shell-script 87427914d74bSmrg# sh-indentation:2 87437914d74bSmrg# End: 8744e169010aSmrg# vi:sw=2 8745e169010aSmrg 8746