ltmain.sh revision 6e7d3316
16e7d3316Smrg# Generated from ltmain.m4sh. 26e7d3316Smrg 36e7d3316Smrg# libtool (GNU libtool) 2.2.10 46e7d3316Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 56e7d3316Smrg 62e2dd055Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 76e7d3316Smrg# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. 86e7d3316Smrg# This is free software; see the source for copying conditions. There is NO 96e7d3316Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 106e7d3316Smrg 116e7d3316Smrg# GNU Libtool is free software; you can redistribute it and/or modify 12a966c04fSmrg# it under the terms of the GNU General Public License as published by 13a966c04fSmrg# the Free Software Foundation; either version 2 of the License, or 14a966c04fSmrg# (at your option) any later version. 15a966c04fSmrg# 166e7d3316Smrg# As a special exception to the GNU General Public License, 176e7d3316Smrg# if you distribute this file as part of a program or library that 186e7d3316Smrg# is built using GNU Libtool, you may include this file under the 196e7d3316Smrg# same distribution terms that you use for the rest of that program. 206e7d3316Smrg# 216e7d3316Smrg# GNU Libtool is distributed in the hope that it will be useful, but 22a966c04fSmrg# WITHOUT ANY WARRANTY; without even the implied warranty of 23a966c04fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 24a966c04fSmrg# General Public License for more details. 25a966c04fSmrg# 26a966c04fSmrg# You should have received a copy of the GNU General Public License 276e7d3316Smrg# along with GNU Libtool; see the file COPYING. If not, a copy 286e7d3316Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 296e7d3316Smrg# or obtained by writing to the Free Software Foundation, Inc., 306e7d3316Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 31a966c04fSmrg 326e7d3316Smrg# Usage: $progname [OPTION]... [MODE-ARG]... 336e7d3316Smrg# 346e7d3316Smrg# Provide generalized library-building support services. 356e7d3316Smrg# 366e7d3316Smrg# --config show all configuration variables 376e7d3316Smrg# --debug enable verbose shell tracing 386e7d3316Smrg# -n, --dry-run display commands without modifying any files 396e7d3316Smrg# --features display basic configuration information and exit 406e7d3316Smrg# --mode=MODE use operation mode MODE 416e7d3316Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 426e7d3316Smrg# --quiet, --silent don't print informational messages 436e7d3316Smrg# --no-quiet, --no-silent 446e7d3316Smrg# print informational messages (default) 456e7d3316Smrg# --tag=TAG use configuration variables from tag TAG 466e7d3316Smrg# -v, --verbose print more informational messages than default 476e7d3316Smrg# --no-verbose don't print the extra informational messages 486e7d3316Smrg# --version print version information 496e7d3316Smrg# -h, --help, --help-all print short, long, or detailed help message 506e7d3316Smrg# 516e7d3316Smrg# MODE must be one of the following: 526e7d3316Smrg# 536e7d3316Smrg# clean remove files from the build directory 546e7d3316Smrg# compile compile a source file into a libtool object 556e7d3316Smrg# execute automatically set library path, then run a program 566e7d3316Smrg# finish complete the installation of libtool libraries 576e7d3316Smrg# install install libraries or executables 586e7d3316Smrg# link create a library or an executable 596e7d3316Smrg# uninstall remove libraries from an installed directory 606e7d3316Smrg# 616e7d3316Smrg# MODE-ARGS vary depending on the MODE. When passed as first option, 626e7d3316Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 636e7d3316Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 646e7d3316Smrg# 656e7d3316Smrg# When reporting a bug, please describe a test case to reproduce it and 666e7d3316Smrg# include the following information: 676e7d3316Smrg# 686e7d3316Smrg# host-triplet: $host 696e7d3316Smrg# shell: $SHELL 706e7d3316Smrg# compiler: $LTCC 716e7d3316Smrg# compiler flags: $LTCFLAGS 726e7d3316Smrg# linker: $LD (gnu? $with_gnu_ld) 736e7d3316Smrg# $progname: (GNU libtool) 2.2.10 746e7d3316Smrg# automake: $automake_version 756e7d3316Smrg# autoconf: $autoconf_version 766e7d3316Smrg# 776e7d3316Smrg# Report bugs to <bug-libtool@gnu.org>. 78a966c04fSmrg 796e7d3316SmrgPROGRAM=libtool 80a966c04fSmrgPACKAGE=libtool 816e7d3316SmrgVERSION=2.2.10 826e7d3316SmrgTIMESTAMP="" 836e7d3316Smrgpackage_revision=1.3175 842e2dd055Smrg 856e7d3316Smrg# Be Bourne compatible 862e2dd055Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 872e2dd055Smrg emulate sh 882e2dd055Smrg NULLCMD=: 892e2dd055Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 902e2dd055Smrg # is contrary to our usage. Disable this feature. 912e2dd055Smrg alias -g '${1+"$@"}'='"$@"' 92a966c04fSmrg setopt NO_GLOB_SUBST 932e2dd055Smrgelse 942e2dd055Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 95a966c04fSmrgfi 962e2dd055SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 972e2dd055SmrgDUALCASE=1; export DUALCASE # for MKS sh 98a966c04fSmrg 996e7d3316Smrg# A function that is used when there is no print builtin or printf. 1006e7d3316Smrgfunc_fallback_echo () 1016e7d3316Smrg{ 1026e7d3316Smrg eval 'cat <<_LTECHO_EOF 1036e7d3316Smrg$1 1046e7d3316Smrg_LTECHO_EOF' 1056e7d3316Smrg} 106a966c04fSmrg 1076e7d3316Smrg# NLS nuisances: We save the old values to restore during execute mode. 1086e7d3316Smrglt_user_locale= 1096e7d3316Smrglt_safe_locale= 1102e2dd055Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1112e2dd055Smrgdo 1122e2dd055Smrg eval "if test \"\${$lt_var+set}\" = set; then 1136e7d3316Smrg save_$lt_var=\$$lt_var 1146e7d3316Smrg $lt_var=C 1152e2dd055Smrg export $lt_var 1166e7d3316Smrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 1176e7d3316Smrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 1182e2dd055Smrg fi" 1192e2dd055Smrgdone 1206e7d3316SmrgLC_ALL=C 1216e7d3316SmrgLANGUAGE=C 1226e7d3316Smrgexport LANGUAGE LC_ALL 1232e2dd055Smrg 1246e7d3316Smrg$lt_unset CDPATH 1256e7d3316Smrg 1266e7d3316Smrg 1276e7d3316Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 1286e7d3316Smrg# is ksh but when the shell is invoked as "sh" and the current value of 1296e7d3316Smrg# the _XPG environment variable is not equal to 1 (one), the special 1306e7d3316Smrg# positional parameter $0, within a function call, is the name of the 1316e7d3316Smrg# function. 1326e7d3316Smrgprogpath="$0" 1336e7d3316Smrg 1346e7d3316Smrg 1356e7d3316Smrg 1366e7d3316Smrg: ${CP="cp -f"} 1376e7d3316Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 1386e7d3316Smrg: ${EGREP="grep -E"} 1396e7d3316Smrg: ${FGREP="grep -F"} 1406e7d3316Smrg: ${GREP="grep"} 1416e7d3316Smrg: ${LN_S="ln -s"} 1426e7d3316Smrg: ${MAKE="make"} 1436e7d3316Smrg: ${MKDIR="mkdir"} 1446e7d3316Smrg: ${MV="mv -f"} 1456e7d3316Smrg: ${RM="rm -f"} 1466e7d3316Smrg: ${SED="sed"} 1476e7d3316Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 1486e7d3316Smrg: ${Xsed="$SED -e 1s/^X//"} 1496e7d3316Smrg 1506e7d3316Smrg# Global variables: 1516e7d3316SmrgEXIT_SUCCESS=0 1526e7d3316SmrgEXIT_FAILURE=1 1536e7d3316SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 1546e7d3316SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 1556e7d3316Smrg 1566e7d3316Smrgexit_status=$EXIT_SUCCESS 157a966c04fSmrg 158a966c04fSmrg# Make sure IFS has a sensible default 159a966c04fSmrglt_nl=' 160a966c04fSmrg' 161a966c04fSmrgIFS=" $lt_nl" 162a966c04fSmrg 1636e7d3316Smrgdirname="s,/[^/]*$,," 1646e7d3316Smrgbasename="s,^.*/,," 1656e7d3316Smrg 1666e7d3316Smrg# func_dirname_and_basename file append nondir_replacement 1676e7d3316Smrg# perform func_basename and func_dirname in a single function 1686e7d3316Smrg# call: 1696e7d3316Smrg# dirname: Compute the dirname of FILE. If nonempty, 1706e7d3316Smrg# add APPEND to the result, otherwise set result 1716e7d3316Smrg# to NONDIR_REPLACEMENT. 1726e7d3316Smrg# value returned in "$func_dirname_result" 1736e7d3316Smrg# basename: Compute filename of FILE. 1746e7d3316Smrg# value retuned in "$func_basename_result" 1756e7d3316Smrg# Implementation must be kept synchronized with func_dirname 1766e7d3316Smrg# and func_basename. For efficiency, we do not delegate to 1776e7d3316Smrg# those functions but instead duplicate the functionality here. 1786e7d3316Smrgfunc_dirname_and_basename () 1796e7d3316Smrg{ 1806e7d3316Smrg # Extract subdirectory from the argument. 1816e7d3316Smrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 1826e7d3316Smrg if test "X$func_dirname_result" = "X${1}"; then 1836e7d3316Smrg func_dirname_result="${3}" 1846e7d3316Smrg else 1856e7d3316Smrg func_dirname_result="$func_dirname_result${2}" 1866e7d3316Smrg fi 1876e7d3316Smrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 1886e7d3316Smrg} 189a966c04fSmrg 1906e7d3316Smrg# Generated shell functions inserted here. 1916e7d3316Smrg 1926e7d3316Smrg# These SED scripts presuppose an absolute path with a trailing slash. 1936e7d3316Smrgpathcar='s,^/\([^/]*\).*$,\1,' 1946e7d3316Smrgpathcdr='s,^/[^/]*,,' 1956e7d3316Smrgremovedotparts=':dotsl 1966e7d3316Smrg s@/\./@/@g 1976e7d3316Smrg t dotsl 1986e7d3316Smrg s,/\.$,/,' 1996e7d3316Smrgcollapseslashes='s@/\{1,\}@/@g' 2006e7d3316Smrgfinalslash='s,/*$,/,' 2016e7d3316Smrg 2026e7d3316Smrg# func_normal_abspath PATH 2036e7d3316Smrg# Remove doubled-up and trailing slashes, "." path components, 2046e7d3316Smrg# and cancel out any ".." path components in PATH after making 2056e7d3316Smrg# it an absolute path. 2066e7d3316Smrg# value returned in "$func_normal_abspath_result" 2076e7d3316Smrgfunc_normal_abspath () 2086e7d3316Smrg{ 2096e7d3316Smrg # Start from root dir and reassemble the path. 2106e7d3316Smrg func_normal_abspath_result= 2116e7d3316Smrg func_normal_abspath_tpath=$1 2126e7d3316Smrg func_normal_abspath_altnamespace= 2136e7d3316Smrg case $func_normal_abspath_tpath in 2146e7d3316Smrg "") 2156e7d3316Smrg # Empty path, that just means $cwd. 2166e7d3316Smrg func_stripname '' '/' "`pwd`" 2176e7d3316Smrg func_normal_abspath_result=$func_stripname_result 2186e7d3316Smrg return 2196e7d3316Smrg ;; 2206e7d3316Smrg # The next three entries are used to spot a run of precisely 2216e7d3316Smrg # two leading slashes without using negated character classes; 2226e7d3316Smrg # we take advantage of case's first-match behaviour. 2236e7d3316Smrg ///*) 2246e7d3316Smrg # Unusual form of absolute path, do nothing. 2256e7d3316Smrg ;; 2266e7d3316Smrg //*) 2276e7d3316Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 2286e7d3316Smrg # and for example Cygwin uses it to access remote file shares 2296e7d3316Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 2306e7d3316Smrg func_normal_abspath_altnamespace=/ 2316e7d3316Smrg ;; 2326e7d3316Smrg /*) 2336e7d3316Smrg # Absolute path, do nothing. 2346e7d3316Smrg ;; 2356e7d3316Smrg *) 2366e7d3316Smrg # Relative path, prepend $cwd. 2376e7d3316Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 2386e7d3316Smrg ;; 2396e7d3316Smrg esac 2406e7d3316Smrg # Cancel out all the simple stuff to save iterations. We also want 2416e7d3316Smrg # the path to end with a slash for ease of parsing, so make sure 2426e7d3316Smrg # there is one (and only one) here. 2436e7d3316Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2446e7d3316Smrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 2456e7d3316Smrg while :; do 2466e7d3316Smrg # Processed it all yet? 2476e7d3316Smrg if test "$func_normal_abspath_tpath" = / ; then 2486e7d3316Smrg # If we ascended to the root using ".." the result may be empty now. 2496e7d3316Smrg if test -z "$func_normal_abspath_result" ; then 2506e7d3316Smrg func_normal_abspath_result=/ 2516e7d3316Smrg fi 2526e7d3316Smrg break 2536e7d3316Smrg fi 2546e7d3316Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2556e7d3316Smrg -e "$pathcar"` 2566e7d3316Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2576e7d3316Smrg -e "$pathcdr"` 2586e7d3316Smrg # Figure out what to do with it 2596e7d3316Smrg case $func_normal_abspath_tcomponent in 2606e7d3316Smrg "") 2616e7d3316Smrg # Trailing empty path component, ignore it. 2626e7d3316Smrg ;; 2636e7d3316Smrg ..) 2646e7d3316Smrg # Parent dir; strip last assembled component from result. 2656e7d3316Smrg func_dirname "$func_normal_abspath_result" 2666e7d3316Smrg func_normal_abspath_result=$func_dirname_result 2676e7d3316Smrg ;; 2686e7d3316Smrg *) 2696e7d3316Smrg # Actual path component, append it. 2706e7d3316Smrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 2716e7d3316Smrg ;; 2726e7d3316Smrg esac 2736e7d3316Smrg done 2746e7d3316Smrg # Restore leading double-slash if one was found on entry. 2756e7d3316Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 2766e7d3316Smrg} 2776e7d3316Smrg 2786e7d3316Smrg# func_relative_path SRCDIR DSTDIR 2796e7d3316Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 2806e7d3316Smrg# slash if non-empty, suitable for immediately appending a filename 2816e7d3316Smrg# without needing to append a separator. 2826e7d3316Smrg# value returned in "$func_relative_path_result" 2836e7d3316Smrgfunc_relative_path () 2846e7d3316Smrg{ 2856e7d3316Smrg func_relative_path_result= 2866e7d3316Smrg func_normal_abspath "$1" 2876e7d3316Smrg func_relative_path_tlibdir=$func_normal_abspath_result 2886e7d3316Smrg func_normal_abspath "$2" 2896e7d3316Smrg func_relative_path_tbindir=$func_normal_abspath_result 2906e7d3316Smrg 2916e7d3316Smrg # Ascend the tree starting from libdir 2926e7d3316Smrg while :; do 2936e7d3316Smrg # check if we have found a prefix of bindir 2946e7d3316Smrg case $func_relative_path_tbindir in 2956e7d3316Smrg $func_relative_path_tlibdir) 2966e7d3316Smrg # found an exact match 2976e7d3316Smrg func_relative_path_tcancelled= 2986e7d3316Smrg break 2996e7d3316Smrg ;; 3006e7d3316Smrg $func_relative_path_tlibdir*) 3016e7d3316Smrg # found a matching prefix 3026e7d3316Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 3036e7d3316Smrg func_relative_path_tcancelled=$func_stripname_result 3046e7d3316Smrg if test -z "$func_relative_path_result"; then 3056e7d3316Smrg func_relative_path_result=. 3066e7d3316Smrg fi 3076e7d3316Smrg break 3086e7d3316Smrg ;; 3096e7d3316Smrg *) 3106e7d3316Smrg func_dirname $func_relative_path_tlibdir 3116e7d3316Smrg func_relative_path_tlibdir=${func_dirname_result} 3126e7d3316Smrg if test "x$func_relative_path_tlibdir" = x ; then 3136e7d3316Smrg # Have to descend all the way to the root! 3146e7d3316Smrg func_relative_path_result=../$func_relative_path_result 3156e7d3316Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 3166e7d3316Smrg break 3176e7d3316Smrg fi 3186e7d3316Smrg func_relative_path_result=../$func_relative_path_result 3196e7d3316Smrg ;; 3206e7d3316Smrg esac 3216e7d3316Smrg done 3226e7d3316Smrg 3236e7d3316Smrg # Now calculate path; take care to avoid doubling-up slashes. 3246e7d3316Smrg func_stripname '' '/' "$func_relative_path_result" 3256e7d3316Smrg func_relative_path_result=$func_stripname_result 3266e7d3316Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 3276e7d3316Smrg if test "x$func_stripname_result" != x ; then 3286e7d3316Smrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 3296e7d3316Smrg fi 3306e7d3316Smrg 3316e7d3316Smrg # Normalisation. If bindir is libdir, return empty string, 3326e7d3316Smrg # else relative path ending with a slash; either way, target 3336e7d3316Smrg # file name can be directly appended. 3346e7d3316Smrg if test ! -z "$func_relative_path_result"; then 3356e7d3316Smrg func_stripname './' '' "$func_relative_path_result/" 3366e7d3316Smrg func_relative_path_result=$func_stripname_result 3376e7d3316Smrg fi 3386e7d3316Smrg} 3396e7d3316Smrg 3406e7d3316Smrg# The name of this program: 3416e7d3316Smrgfunc_dirname_and_basename "$progpath" 3426e7d3316Smrgprogname=$func_basename_result 3436e7d3316Smrg 3446e7d3316Smrg# Make sure we have an absolute path for reexecution: 3456e7d3316Smrgcase $progpath in 3466e7d3316Smrg [\\/]*|[A-Za-z]:\\*) ;; 3476e7d3316Smrg *[\\/]*) 3486e7d3316Smrg progdir=$func_dirname_result 3496e7d3316Smrg progdir=`cd "$progdir" && pwd` 3506e7d3316Smrg progpath="$progdir/$progname" 3516e7d3316Smrg ;; 3526e7d3316Smrg *) 3536e7d3316Smrg save_IFS="$IFS" 3546e7d3316Smrg IFS=: 3556e7d3316Smrg for progdir in $PATH; do 3566e7d3316Smrg IFS="$save_IFS" 3576e7d3316Smrg test -x "$progdir/$progname" && break 3586e7d3316Smrg done 3596e7d3316Smrg IFS="$save_IFS" 3606e7d3316Smrg test -n "$progdir" || progdir=`pwd` 3616e7d3316Smrg progpath="$progdir/$progname" 3626e7d3316Smrg ;; 3636e7d3316Smrgesac 3646e7d3316Smrg 3656e7d3316Smrg# Sed substitution that helps us do robust quoting. It backslashifies 3666e7d3316Smrg# metacharacters that are still active within double-quoted strings. 3676e7d3316SmrgXsed="${SED}"' -e 1s/^X//' 3686e7d3316Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 3696e7d3316Smrg 3706e7d3316Smrg# Same as above, but do not quote variable references. 3716e7d3316Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 3726e7d3316Smrg 3736e7d3316Smrg# Re-`\' parameter expansions in output of double_quote_subst that were 3746e7d3316Smrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 3756e7d3316Smrg# in input to double_quote_subst, that '$' was protected from expansion. 3766e7d3316Smrg# Since each input `\' is now two `\'s, look for any number of runs of 3776e7d3316Smrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 3786e7d3316Smrgbs='\\' 3796e7d3316Smrgbs2='\\\\' 3806e7d3316Smrgbs4='\\\\\\\\' 3816e7d3316Smrgdollar='\$' 3826e7d3316Smrgsed_double_backslash="\ 3836e7d3316Smrg s/$bs4/&\\ 3846e7d3316Smrg/g 3856e7d3316Smrg s/^$bs2$dollar/$bs&/ 3866e7d3316Smrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 3876e7d3316Smrg s/\n//g" 3886e7d3316Smrg 3896e7d3316Smrg# Standard options: 3906e7d3316Smrgopt_dry_run=false 3916e7d3316Smrgopt_help=false 3926e7d3316Smrgopt_quiet=false 3936e7d3316Smrgopt_verbose=false 3946e7d3316Smrgopt_warning=: 3956e7d3316Smrg 3966e7d3316Smrg# func_echo arg... 3976e7d3316Smrg# Echo program name prefixed message, along with the current mode 3986e7d3316Smrg# name if it has been set yet. 3996e7d3316Smrgfunc_echo () 4006e7d3316Smrg{ 4016e7d3316Smrg $ECHO "$progname${mode+: }$mode: $*" 4026e7d3316Smrg} 4036e7d3316Smrg 4046e7d3316Smrg# func_verbose arg... 4056e7d3316Smrg# Echo program name prefixed message in verbose mode only. 4066e7d3316Smrgfunc_verbose () 4076e7d3316Smrg{ 4086e7d3316Smrg $opt_verbose && func_echo ${1+"$@"} 4096e7d3316Smrg 4106e7d3316Smrg # A bug in bash halts the script if the last line of a function 4116e7d3316Smrg # fails when set -e is in force, so we need another command to 4126e7d3316Smrg # work around that: 4136e7d3316Smrg : 4146e7d3316Smrg} 4156e7d3316Smrg 4166e7d3316Smrg# func_echo_all arg... 4176e7d3316Smrg# Invoke $ECHO with all args, space-separated. 4186e7d3316Smrgfunc_echo_all () 4196e7d3316Smrg{ 4206e7d3316Smrg $ECHO "$*" 4216e7d3316Smrg} 4226e7d3316Smrg 4236e7d3316Smrg# func_error arg... 4246e7d3316Smrg# Echo program name prefixed message to standard error. 4256e7d3316Smrgfunc_error () 4266e7d3316Smrg{ 4276e7d3316Smrg $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 4286e7d3316Smrg} 4296e7d3316Smrg 4306e7d3316Smrg# func_warning arg... 4316e7d3316Smrg# Echo program name prefixed warning message to standard error. 4326e7d3316Smrgfunc_warning () 4336e7d3316Smrg{ 4346e7d3316Smrg $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 4356e7d3316Smrg 4366e7d3316Smrg # bash bug again: 4376e7d3316Smrg : 4386e7d3316Smrg} 4396e7d3316Smrg 4406e7d3316Smrg# func_fatal_error arg... 4416e7d3316Smrg# Echo program name prefixed message to standard error, and exit. 4426e7d3316Smrgfunc_fatal_error () 4436e7d3316Smrg{ 4446e7d3316Smrg func_error ${1+"$@"} 4456e7d3316Smrg exit $EXIT_FAILURE 4466e7d3316Smrg} 4476e7d3316Smrg 4486e7d3316Smrg# func_fatal_help arg... 4496e7d3316Smrg# Echo program name prefixed message to standard error, followed by 4506e7d3316Smrg# a help hint, and exit. 4516e7d3316Smrgfunc_fatal_help () 4526e7d3316Smrg{ 4536e7d3316Smrg func_error ${1+"$@"} 4546e7d3316Smrg func_fatal_error "$help" 4556e7d3316Smrg} 4566e7d3316Smrghelp="Try \`$progname --help' for more information." ## default 4576e7d3316Smrg 4586e7d3316Smrg 4596e7d3316Smrg# func_grep expression filename 4606e7d3316Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 4616e7d3316Smrgfunc_grep () 4626e7d3316Smrg{ 4636e7d3316Smrg $GREP "$1" "$2" >/dev/null 2>&1 4646e7d3316Smrg} 4656e7d3316Smrg 4666e7d3316Smrg 4676e7d3316Smrg# func_mkdir_p directory-path 4686e7d3316Smrg# Make sure the entire path to DIRECTORY-PATH is available. 4696e7d3316Smrgfunc_mkdir_p () 4706e7d3316Smrg{ 4716e7d3316Smrg my_directory_path="$1" 4726e7d3316Smrg my_dir_list= 4736e7d3316Smrg 4746e7d3316Smrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 4756e7d3316Smrg 4766e7d3316Smrg # Protect directory names starting with `-' 4776e7d3316Smrg case $my_directory_path in 4786e7d3316Smrg -*) my_directory_path="./$my_directory_path" ;; 4796e7d3316Smrg esac 4806e7d3316Smrg 4816e7d3316Smrg # While some portion of DIR does not yet exist... 4826e7d3316Smrg while test ! -d "$my_directory_path"; do 4836e7d3316Smrg # ...make a list in topmost first order. Use a colon delimited 4846e7d3316Smrg # list incase some portion of path contains whitespace. 4856e7d3316Smrg my_dir_list="$my_directory_path:$my_dir_list" 4866e7d3316Smrg 4876e7d3316Smrg # If the last portion added has no slash in it, the list is done 4886e7d3316Smrg case $my_directory_path in */*) ;; *) break ;; esac 4896e7d3316Smrg 4906e7d3316Smrg # ...otherwise throw away the child directory and loop 4916e7d3316Smrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 4926e7d3316Smrg done 4936e7d3316Smrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 4946e7d3316Smrg 4956e7d3316Smrg save_mkdir_p_IFS="$IFS"; IFS=':' 4966e7d3316Smrg for my_dir in $my_dir_list; do 4976e7d3316Smrg IFS="$save_mkdir_p_IFS" 4986e7d3316Smrg # mkdir can fail with a `File exist' error if two processes 4996e7d3316Smrg # try to create one of the directories concurrently. Don't 5006e7d3316Smrg # stop in that case! 5016e7d3316Smrg $MKDIR "$my_dir" 2>/dev/null || : 5026e7d3316Smrg done 5036e7d3316Smrg IFS="$save_mkdir_p_IFS" 5046e7d3316Smrg 5056e7d3316Smrg # Bail out if we (or some other process) failed to create a directory. 5066e7d3316Smrg test -d "$my_directory_path" || \ 5076e7d3316Smrg func_fatal_error "Failed to create \`$1'" 5086e7d3316Smrg fi 5096e7d3316Smrg} 510a966c04fSmrg 511a966c04fSmrg 512a966c04fSmrg# func_mktempdir [string] 513a966c04fSmrg# Make a temporary directory that won't clash with other running 514a966c04fSmrg# libtool processes, and avoids race conditions if possible. If 515a966c04fSmrg# given, STRING is the basename for that directory. 516a966c04fSmrgfunc_mktempdir () 517a966c04fSmrg{ 518a966c04fSmrg my_template="${TMPDIR-/tmp}/${1-$progname}" 519a966c04fSmrg 5206e7d3316Smrg if test "$opt_dry_run" = ":"; then 521a966c04fSmrg # Return a directory name, but don't create it in dry-run mode 522a966c04fSmrg my_tmpdir="${my_template}-$$" 523a966c04fSmrg else 524a966c04fSmrg 525a966c04fSmrg # If mktemp works, use that first and foremost 526a966c04fSmrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 527a966c04fSmrg 528a966c04fSmrg if test ! -d "$my_tmpdir"; then 5296e7d3316Smrg # Failing that, at least try and use $RANDOM to avoid a race 5306e7d3316Smrg my_tmpdir="${my_template}-${RANDOM-0}$$" 531a966c04fSmrg 5326e7d3316Smrg save_mktempdir_umask=`umask` 5336e7d3316Smrg umask 0077 5346e7d3316Smrg $MKDIR "$my_tmpdir" 5356e7d3316Smrg umask $save_mktempdir_umask 536a966c04fSmrg fi 537a966c04fSmrg 538a966c04fSmrg # If we're not in dry-run mode, bomb out on failure 5396e7d3316Smrg test -d "$my_tmpdir" || \ 5406e7d3316Smrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 541a966c04fSmrg fi 542a966c04fSmrg 5436e7d3316Smrg $ECHO "$my_tmpdir" 544a966c04fSmrg} 545a966c04fSmrg 546a966c04fSmrg 5476e7d3316Smrg# func_quote_for_eval arg 5486e7d3316Smrg# Aesthetically quote ARG to be evaled later. 5496e7d3316Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 5506e7d3316Smrg# is double-quoted, suitable for a subsequent eval, whereas 5516e7d3316Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 5526e7d3316Smrg# which are still active within double quotes backslashified. 5536e7d3316Smrgfunc_quote_for_eval () 554a966c04fSmrg{ 5556e7d3316Smrg case $1 in 5566e7d3316Smrg *[\\\`\"\$]*) 5576e7d3316Smrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 5586e7d3316Smrg *) 5596e7d3316Smrg func_quote_for_eval_unquoted_result="$1" ;; 5606e7d3316Smrg esac 5616e7d3316Smrg 5626e7d3316Smrg case $func_quote_for_eval_unquoted_result in 5636e7d3316Smrg # Double-quote args containing shell metacharacters to delay 5646e7d3316Smrg # word splitting, command substitution and and variable 5656e7d3316Smrg # expansion for a subsequent eval. 5666e7d3316Smrg # Many Bourne shells cannot handle close brackets correctly 5676e7d3316Smrg # in scan sets, so we specify it separately. 5686e7d3316Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 5696e7d3316Smrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 5706e7d3316Smrg ;; 5716e7d3316Smrg *) 5726e7d3316Smrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 573a966c04fSmrg esac 574a966c04fSmrg} 575a966c04fSmrg 576a966c04fSmrg 5776e7d3316Smrg# func_quote_for_expand arg 5786e7d3316Smrg# Aesthetically quote ARG to be evaled later; same as above, 5796e7d3316Smrg# but do not quote variable references. 5806e7d3316Smrgfunc_quote_for_expand () 581a966c04fSmrg{ 5826e7d3316Smrg case $1 in 5836e7d3316Smrg *[\\\`\"]*) 5846e7d3316Smrg my_arg=`$ECHO "$1" | $SED \ 5856e7d3316Smrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 586a966c04fSmrg *) 5876e7d3316Smrg my_arg="$1" ;; 5886e7d3316Smrg esac 5896e7d3316Smrg 5906e7d3316Smrg case $my_arg in 5916e7d3316Smrg # Double-quote args containing shell metacharacters to delay 5926e7d3316Smrg # word splitting and command substitution for a subsequent eval. 5936e7d3316Smrg # Many Bourne shells cannot handle close brackets correctly 5946e7d3316Smrg # in scan sets, so we specify it separately. 5956e7d3316Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 5966e7d3316Smrg my_arg="\"$my_arg\"" 5976e7d3316Smrg ;; 5986e7d3316Smrg esac 5996e7d3316Smrg 6006e7d3316Smrg func_quote_for_expand_result="$my_arg" 601a966c04fSmrg} 602a966c04fSmrg 603a966c04fSmrg 6046e7d3316Smrg# func_show_eval cmd [fail_exp] 6056e7d3316Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 6066e7d3316Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 6076e7d3316Smrg# is given, then evaluate it. 6086e7d3316Smrgfunc_show_eval () 609a966c04fSmrg{ 6106e7d3316Smrg my_cmd="$1" 6116e7d3316Smrg my_fail_exp="${2-:}" 612a966c04fSmrg 6136e7d3316Smrg ${opt_silent-false} || { 6146e7d3316Smrg func_quote_for_expand "$my_cmd" 6156e7d3316Smrg eval "func_echo $func_quote_for_expand_result" 6166e7d3316Smrg } 6176e7d3316Smrg 6186e7d3316Smrg if ${opt_dry_run-false}; then :; else 6196e7d3316Smrg eval "$my_cmd" 6206e7d3316Smrg my_status=$? 6216e7d3316Smrg if test "$my_status" -eq 0; then :; else 6226e7d3316Smrg eval "(exit $my_status); $my_fail_exp" 6236e7d3316Smrg fi 624a966c04fSmrg fi 625a966c04fSmrg} 626a966c04fSmrg 6276e7d3316Smrg 6286e7d3316Smrg# func_show_eval_locale cmd [fail_exp] 6296e7d3316Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 6306e7d3316Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 6316e7d3316Smrg# is given, then evaluate it. Use the saved locale for evaluation. 6326e7d3316Smrgfunc_show_eval_locale () 633a966c04fSmrg{ 6346e7d3316Smrg my_cmd="$1" 6356e7d3316Smrg my_fail_exp="${2-:}" 636a966c04fSmrg 6376e7d3316Smrg ${opt_silent-false} || { 6386e7d3316Smrg func_quote_for_expand "$my_cmd" 6396e7d3316Smrg eval "func_echo $func_quote_for_expand_result" 6406e7d3316Smrg } 641a966c04fSmrg 6426e7d3316Smrg if ${opt_dry_run-false}; then :; else 6436e7d3316Smrg eval "$lt_user_locale 6446e7d3316Smrg $my_cmd" 6456e7d3316Smrg my_status=$? 6466e7d3316Smrg eval "$lt_safe_locale" 6476e7d3316Smrg if test "$my_status" -eq 0; then :; else 6486e7d3316Smrg eval "(exit $my_status); $my_fail_exp" 649a966c04fSmrg fi 6506e7d3316Smrg fi 651a966c04fSmrg} 652a966c04fSmrg 653a966c04fSmrg 6546e7d3316Smrg# func_version 6556e7d3316Smrg# Echo version message to standard output and exit. 6566e7d3316Smrgfunc_version () 6576e7d3316Smrg{ 6586e7d3316Smrg $SED -n '/(C)/!b go 6596e7d3316Smrg :more 6606e7d3316Smrg /\./!{ 6616e7d3316Smrg N 6626e7d3316Smrg s/\n# / / 6636e7d3316Smrg b more 6646e7d3316Smrg } 6656e7d3316Smrg :go 6666e7d3316Smrg /^# '$PROGRAM' (GNU /,/# warranty; / { 6676e7d3316Smrg s/^# // 6686e7d3316Smrg s/^# *$// 6696e7d3316Smrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 6706e7d3316Smrg p 6716e7d3316Smrg }' < "$progpath" 6726e7d3316Smrg exit $? 6736e7d3316Smrg} 674a966c04fSmrg 6756e7d3316Smrg# func_usage 6766e7d3316Smrg# Echo short help message to standard output and exit. 6776e7d3316Smrgfunc_usage () 6786e7d3316Smrg{ 6796e7d3316Smrg $SED -n '/^# Usage:/,/^# *.*--help/ { 6806e7d3316Smrg s/^# // 6816e7d3316Smrg s/^# *$// 6826e7d3316Smrg s/\$progname/'$progname'/ 6836e7d3316Smrg p 6846e7d3316Smrg }' < "$progpath" 6856e7d3316Smrg echo 6866e7d3316Smrg $ECHO "run \`$progname --help | more' for full usage" 6876e7d3316Smrg exit $? 6886e7d3316Smrg} 689a966c04fSmrg 6906e7d3316Smrg# func_help [NOEXIT] 6916e7d3316Smrg# Echo long help message to standard output and exit, 6926e7d3316Smrg# unless 'noexit' is passed as argument. 6936e7d3316Smrgfunc_help () 6946e7d3316Smrg{ 6956e7d3316Smrg $SED -n '/^# Usage:/,/# Report bugs to/ { 6966e7d3316Smrg s/^# // 6976e7d3316Smrg s/^# *$// 6986e7d3316Smrg s*\$progname*'$progname'* 6996e7d3316Smrg s*\$host*'"$host"'* 7006e7d3316Smrg s*\$SHELL*'"$SHELL"'* 7016e7d3316Smrg s*\$LTCC*'"$LTCC"'* 7026e7d3316Smrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 7036e7d3316Smrg s*\$LD*'"$LD"'* 7046e7d3316Smrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 7056e7d3316Smrg s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 7066e7d3316Smrg s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 7076e7d3316Smrg p 7086e7d3316Smrg }' < "$progpath" 7096e7d3316Smrg ret=$? 7106e7d3316Smrg if test -z "$1"; then 7116e7d3316Smrg exit $ret 7126e7d3316Smrg fi 7136e7d3316Smrg} 714a966c04fSmrg 7156e7d3316Smrg# func_missing_arg argname 7166e7d3316Smrg# Echo program name prefixed message to standard error and set global 7176e7d3316Smrg# exit_cmd. 7186e7d3316Smrgfunc_missing_arg () 7196e7d3316Smrg{ 7206e7d3316Smrg func_error "missing argument for $1." 7216e7d3316Smrg exit_cmd=exit 7226e7d3316Smrg} 723a966c04fSmrg 7246e7d3316Smrgexit_cmd=: 725a966c04fSmrg 726a966c04fSmrg 727a966c04fSmrg 7282e2dd055Smrg 729a966c04fSmrg 7306e7d3316Smrg 7316e7d3316Smrgmagic="%%%MAGIC variable%%%" 7326e7d3316Smrgmagic_exe="%%%MAGIC EXE variable%%%" 7336e7d3316Smrg 7346e7d3316Smrg# Global variables. 7356e7d3316Smrg# $mode is unset 7366e7d3316Smrgnonopt= 7376e7d3316Smrgexecute_dlfiles= 7386e7d3316Smrgpreserve_args= 7396e7d3316Smrglo2o="s/\\.lo\$/.${objext}/" 7406e7d3316Smrgo2lo="s/\\.${objext}\$/.lo/" 7416e7d3316Smrgextracted_archives= 7426e7d3316Smrgextracted_serial=0 7436e7d3316Smrg 7446e7d3316Smrgopt_dry_run=false 7456e7d3316Smrgopt_duplicate_deps=false 7466e7d3316Smrgopt_silent=false 7476e7d3316Smrgopt_debug=: 7486e7d3316Smrg 7496e7d3316Smrg# If this variable is set in any of the actions, the command in it 7506e7d3316Smrg# will be execed at the end. This prevents here-documents from being 7516e7d3316Smrg# left over by shells. 7526e7d3316Smrgexec_cmd= 7536e7d3316Smrg 7546e7d3316Smrg# func_fatal_configuration arg... 7556e7d3316Smrg# Echo program name prefixed message to standard error, followed by 7566e7d3316Smrg# a configuration failure hint, and exit. 7576e7d3316Smrgfunc_fatal_configuration () 7586e7d3316Smrg{ 7596e7d3316Smrg func_error ${1+"$@"} 7606e7d3316Smrg func_error "See the $PACKAGE documentation for more information." 7616e7d3316Smrg func_fatal_error "Fatal configuration error." 7626e7d3316Smrg} 7636e7d3316Smrg 7646e7d3316Smrg 7656e7d3316Smrg# func_config 7666e7d3316Smrg# Display the configuration for all the tags in this script. 7676e7d3316Smrgfunc_config () 7686e7d3316Smrg{ 7696e7d3316Smrg re_begincf='^# ### BEGIN LIBTOOL' 7706e7d3316Smrg re_endcf='^# ### END LIBTOOL' 7716e7d3316Smrg 7726e7d3316Smrg # Default configuration. 7736e7d3316Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 7746e7d3316Smrg 775a966c04fSmrg # Now print the configurations for the tags. 776a966c04fSmrg for tagname in $taglist; do 7776e7d3316Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 778a966c04fSmrg done 779a966c04fSmrg 7806e7d3316Smrg exit $? 7816e7d3316Smrg} 782a966c04fSmrg 7836e7d3316Smrg# func_features 7846e7d3316Smrg# Display the features supported by this script. 7856e7d3316Smrgfunc_features () 7866e7d3316Smrg{ 7876e7d3316Smrg echo "host: $host" 788a966c04fSmrg if test "$build_libtool_libs" = yes; then 7896e7d3316Smrg echo "enable shared libraries" 790a966c04fSmrg else 7916e7d3316Smrg echo "disable shared libraries" 792a966c04fSmrg fi 793a966c04fSmrg if test "$build_old_libs" = yes; then 7946e7d3316Smrg echo "enable static libraries" 795a966c04fSmrg else 7966e7d3316Smrg echo "disable static libraries" 797a966c04fSmrg fi 7986e7d3316Smrg 799a966c04fSmrg exit $? 8006e7d3316Smrg} 801a966c04fSmrg 8026e7d3316Smrg# func_enable_tag tagname 8036e7d3316Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 8046e7d3316Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 8056e7d3316Smrg# variable here. 8066e7d3316Smrgfunc_enable_tag () 8076e7d3316Smrg{ 8086e7d3316Smrg # Global variable: 8096e7d3316Smrg tagname="$1" 810a966c04fSmrg 8116e7d3316Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 8126e7d3316Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 8136e7d3316Smrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 814a966c04fSmrg 8156e7d3316Smrg # Validate tagname. 8166e7d3316Smrg case $tagname in 8176e7d3316Smrg *[!-_A-Za-z0-9,/]*) 8186e7d3316Smrg func_fatal_error "invalid tag name: $tagname" 8196e7d3316Smrg ;; 8206e7d3316Smrg esac 821a966c04fSmrg 8226e7d3316Smrg # Don't test for the "default" C tag, as we know it's 8236e7d3316Smrg # there but not specially marked. 8246e7d3316Smrg case $tagname in 8256e7d3316Smrg CC) ;; 8266e7d3316Smrg *) 8276e7d3316Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 8286e7d3316Smrg taglist="$taglist $tagname" 8296e7d3316Smrg 8306e7d3316Smrg # Evaluate the configuration. Be careful to quote the path 8316e7d3316Smrg # and the sed script, to avoid splitting on whitespace, but 8326e7d3316Smrg # also don't use non-portable quotes within backquotes within 8336e7d3316Smrg # quotes we have to do it in 2 steps: 8346e7d3316Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 8356e7d3316Smrg eval "$extractedcf" 8366e7d3316Smrg else 8376e7d3316Smrg func_error "ignoring unknown tag $tagname" 8386e7d3316Smrg fi 8396e7d3316Smrg ;; 8406e7d3316Smrg esac 8416e7d3316Smrg} 8426e7d3316Smrg 8436e7d3316Smrg# Parse options once, thoroughly. This comes as soon as possible in 8446e7d3316Smrg# the script to make things like `libtool --version' happen quickly. 8456e7d3316Smrg{ 846a966c04fSmrg 8476e7d3316Smrg # Shorthand for --mode=foo, only valid as the first argument 8486e7d3316Smrg case $1 in 8496e7d3316Smrg clean|clea|cle|cl) 8506e7d3316Smrg shift; set dummy --mode clean ${1+"$@"}; shift 851a966c04fSmrg ;; 8526e7d3316Smrg compile|compil|compi|comp|com|co|c) 8536e7d3316Smrg shift; set dummy --mode compile ${1+"$@"}; shift 854a966c04fSmrg ;; 8556e7d3316Smrg execute|execut|execu|exec|exe|ex|e) 8566e7d3316Smrg shift; set dummy --mode execute ${1+"$@"}; shift 857a966c04fSmrg ;; 8586e7d3316Smrg finish|finis|fini|fin|fi|f) 8596e7d3316Smrg shift; set dummy --mode finish ${1+"$@"}; shift 860a966c04fSmrg ;; 8616e7d3316Smrg install|instal|insta|inst|ins|in|i) 8626e7d3316Smrg shift; set dummy --mode install ${1+"$@"}; shift 8636e7d3316Smrg ;; 8646e7d3316Smrg link|lin|li|l) 8656e7d3316Smrg shift; set dummy --mode link ${1+"$@"}; shift 8666e7d3316Smrg ;; 8676e7d3316Smrg uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 8686e7d3316Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 869a966c04fSmrg ;; 870a966c04fSmrg esac 871a966c04fSmrg 8726e7d3316Smrg # Parse non-mode specific arguments: 8736e7d3316Smrg while test "$#" -gt 0; do 8746e7d3316Smrg opt="$1" 8756e7d3316Smrg shift 876a966c04fSmrg 8776e7d3316Smrg case $opt in 8786e7d3316Smrg --config) func_config ;; 879a966c04fSmrg 8806e7d3316Smrg --debug) preserve_args="$preserve_args $opt" 8816e7d3316Smrg func_echo "enabling shell trace mode" 8826e7d3316Smrg opt_debug='set -x' 8836e7d3316Smrg $opt_debug 8846e7d3316Smrg ;; 885a966c04fSmrg 8866e7d3316Smrg -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break 8876e7d3316Smrg execute_dlfiles="$execute_dlfiles $1" 8886e7d3316Smrg shift 8896e7d3316Smrg ;; 890a966c04fSmrg 8916e7d3316Smrg --dry-run | -n) opt_dry_run=: ;; 8926e7d3316Smrg --features) func_features ;; 8936e7d3316Smrg --finish) mode="finish" ;; 8946e7d3316Smrg 8956e7d3316Smrg --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break 8966e7d3316Smrg case $1 in 8976e7d3316Smrg # Valid mode arguments: 8986e7d3316Smrg clean) ;; 8996e7d3316Smrg compile) ;; 9006e7d3316Smrg execute) ;; 9016e7d3316Smrg finish) ;; 9026e7d3316Smrg install) ;; 9036e7d3316Smrg link) ;; 9046e7d3316Smrg relink) ;; 9056e7d3316Smrg uninstall) ;; 9066e7d3316Smrg 9076e7d3316Smrg # Catch anything else as an error 9086e7d3316Smrg *) func_error "invalid argument for $opt" 9096e7d3316Smrg exit_cmd=exit 9106e7d3316Smrg break 9116e7d3316Smrg ;; 9126e7d3316Smrg esac 9136e7d3316Smrg 9146e7d3316Smrg mode="$1" 9156e7d3316Smrg shift 9166e7d3316Smrg ;; 9176e7d3316Smrg 9186e7d3316Smrg --preserve-dup-deps) 9196e7d3316Smrg opt_duplicate_deps=: ;; 9206e7d3316Smrg 9216e7d3316Smrg --quiet|--silent) preserve_args="$preserve_args $opt" 9226e7d3316Smrg opt_silent=: 9236e7d3316Smrg opt_verbose=false 9246e7d3316Smrg ;; 9256e7d3316Smrg 9266e7d3316Smrg --no-quiet|--no-silent) 9276e7d3316Smrg preserve_args="$preserve_args $opt" 9286e7d3316Smrg opt_silent=false 9296e7d3316Smrg ;; 9306e7d3316Smrg 9316e7d3316Smrg --verbose| -v) preserve_args="$preserve_args $opt" 9326e7d3316Smrg opt_silent=false 9336e7d3316Smrg opt_verbose=: 9346e7d3316Smrg ;; 9356e7d3316Smrg 9366e7d3316Smrg --no-verbose) preserve_args="$preserve_args $opt" 9376e7d3316Smrg opt_verbose=false 9386e7d3316Smrg ;; 9396e7d3316Smrg 9406e7d3316Smrg --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break 9416e7d3316Smrg preserve_args="$preserve_args $opt $1" 9426e7d3316Smrg func_enable_tag "$1" # tagname is set here 9436e7d3316Smrg shift 9446e7d3316Smrg ;; 9456e7d3316Smrg 9466e7d3316Smrg # Separate optargs to long options: 9476e7d3316Smrg -dlopen=*|--mode=*|--tag=*) 9486e7d3316Smrg func_opt_split "$opt" 9496e7d3316Smrg set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} 9506e7d3316Smrg shift 9516e7d3316Smrg ;; 9526e7d3316Smrg 9536e7d3316Smrg -\?|-h) func_usage ;; 9546e7d3316Smrg --help) opt_help=: ;; 9556e7d3316Smrg --help-all) opt_help=': help-all' ;; 9566e7d3316Smrg --version) func_version ;; 9576e7d3316Smrg 9586e7d3316Smrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 9596e7d3316Smrg 9606e7d3316Smrg *) nonopt="$opt" 9616e7d3316Smrg break 9626e7d3316Smrg ;; 9636e7d3316Smrg esac 9646e7d3316Smrg done 9656e7d3316Smrg 9666e7d3316Smrg 9676e7d3316Smrg case $host in 9686e7d3316Smrg *cygwin* | *mingw* | *pw32* | *cegcc*) 9696e7d3316Smrg # don't eliminate duplications in $postdeps and $predeps 9706e7d3316Smrg opt_duplicate_compiler_generated_deps=: 971a966c04fSmrg ;; 972a966c04fSmrg *) 9736e7d3316Smrg opt_duplicate_compiler_generated_deps=$opt_duplicate_deps 9746e7d3316Smrg ;; 9756e7d3316Smrg esac 976a966c04fSmrg 9776e7d3316Smrg # Having warned about all mis-specified options, bail out if 9786e7d3316Smrg # anything was wrong. 9796e7d3316Smrg $exit_cmd $EXIT_FAILURE 9806e7d3316Smrg} 9816e7d3316Smrg 9826e7d3316Smrg# func_check_version_match 9836e7d3316Smrg# Ensure that we are using m4 macros, and libtool script from the same 9846e7d3316Smrg# release of libtool. 9856e7d3316Smrgfunc_check_version_match () 9866e7d3316Smrg{ 9876e7d3316Smrg if test "$package_revision" != "$macro_revision"; then 9886e7d3316Smrg if test "$VERSION" != "$macro_version"; then 9896e7d3316Smrg if test -z "$macro_version"; then 9906e7d3316Smrg cat >&2 <<_LT_EOF 9916e7d3316Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 9926e7d3316Smrg$progname: definition of this LT_INIT comes from an older release. 9936e7d3316Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 9946e7d3316Smrg$progname: and run autoconf again. 9956e7d3316Smrg_LT_EOF 9966e7d3316Smrg else 9976e7d3316Smrg cat >&2 <<_LT_EOF 9986e7d3316Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 9996e7d3316Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 10006e7d3316Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 10016e7d3316Smrg$progname: and run autoconf again. 10026e7d3316Smrg_LT_EOF 1003a966c04fSmrg fi 10046e7d3316Smrg else 10056e7d3316Smrg cat >&2 <<_LT_EOF 10066e7d3316Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 10076e7d3316Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 10086e7d3316Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 10096e7d3316Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 10106e7d3316Smrg_LT_EOF 10116e7d3316Smrg fi 10126e7d3316Smrg 10136e7d3316Smrg exit $EXIT_MISMATCH 10146e7d3316Smrg fi 10156e7d3316Smrg} 10166e7d3316Smrg 10176e7d3316Smrg 10186e7d3316Smrg## ----------- ## 10196e7d3316Smrg## Main. ## 10206e7d3316Smrg## ----------- ## 10216e7d3316Smrg 10226e7d3316Smrg$opt_help || { 10236e7d3316Smrg # Sanity checks first: 10246e7d3316Smrg func_check_version_match 10256e7d3316Smrg 10266e7d3316Smrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 10276e7d3316Smrg func_fatal_configuration "not configured to build any kind of library" 1028a966c04fSmrg fi 1029a966c04fSmrg 10306e7d3316Smrg test -z "$mode" && func_fatal_error "error: you must specify a MODE." 10316e7d3316Smrg 10326e7d3316Smrg 10336e7d3316Smrg # Darwin sucks 10346e7d3316Smrg eval std_shrext=\"$shrext_cmds\" 10356e7d3316Smrg 10366e7d3316Smrg 1037a966c04fSmrg # Only execute mode is allowed to have -dlopen flags. 1038a966c04fSmrg if test -n "$execute_dlfiles" && test "$mode" != execute; then 10396e7d3316Smrg func_error "unrecognized option \`-dlopen'" 10406e7d3316Smrg $ECHO "$help" 1>&2 1041a966c04fSmrg exit $EXIT_FAILURE 1042a966c04fSmrg fi 1043a966c04fSmrg 1044a966c04fSmrg # Change the help message to a mode-specific one. 1045a966c04fSmrg generic_help="$help" 10466e7d3316Smrg help="Try \`$progname --help --mode=$mode' for more information." 10476e7d3316Smrg} 1048a966c04fSmrg 1049a966c04fSmrg 10506e7d3316Smrg# func_lalib_p file 10516e7d3316Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 10526e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out 10536e7d3316Smrg# determined imposters. 10546e7d3316Smrgfunc_lalib_p () 10556e7d3316Smrg{ 10566e7d3316Smrg test -f "$1" && 10576e7d3316Smrg $SED -e 4q "$1" 2>/dev/null \ 10586e7d3316Smrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 10596e7d3316Smrg} 1060a966c04fSmrg 10616e7d3316Smrg# func_lalib_unsafe_p file 10626e7d3316Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 10636e7d3316Smrg# This function implements the same check as func_lalib_p without 10646e7d3316Smrg# resorting to external programs. To this end, it redirects stdin and 10656e7d3316Smrg# closes it afterwards, without saving the original file descriptor. 10666e7d3316Smrg# As a safety measure, use it only where a negative result would be 10676e7d3316Smrg# fatal anyway. Works if `file' does not exist. 10686e7d3316Smrgfunc_lalib_unsafe_p () 10696e7d3316Smrg{ 10706e7d3316Smrg lalib_p=no 10716e7d3316Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 10726e7d3316Smrg for lalib_p_l in 1 2 3 4 10736e7d3316Smrg do 10746e7d3316Smrg read lalib_p_line 10756e7d3316Smrg case "$lalib_p_line" in 10766e7d3316Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 10776e7d3316Smrg esac 10786e7d3316Smrg done 10796e7d3316Smrg exec 0<&5 5<&- 10806e7d3316Smrg fi 10816e7d3316Smrg test "$lalib_p" = yes 10826e7d3316Smrg} 1083a966c04fSmrg 10846e7d3316Smrg# func_ltwrapper_script_p file 10856e7d3316Smrg# True iff FILE is a libtool wrapper script 10866e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out 10876e7d3316Smrg# determined imposters. 10886e7d3316Smrgfunc_ltwrapper_script_p () 10896e7d3316Smrg{ 10906e7d3316Smrg func_lalib_p "$1" 10916e7d3316Smrg} 1092a966c04fSmrg 10936e7d3316Smrg# func_ltwrapper_executable_p file 10946e7d3316Smrg# True iff FILE is a libtool wrapper executable 10956e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out 10966e7d3316Smrg# determined imposters. 10976e7d3316Smrgfunc_ltwrapper_executable_p () 10986e7d3316Smrg{ 10996e7d3316Smrg func_ltwrapper_exec_suffix= 11006e7d3316Smrg case $1 in 11016e7d3316Smrg *.exe) ;; 11026e7d3316Smrg *) func_ltwrapper_exec_suffix=.exe ;; 11036e7d3316Smrg esac 11046e7d3316Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 11056e7d3316Smrg} 11066e7d3316Smrg 11076e7d3316Smrg# func_ltwrapper_scriptname file 11086e7d3316Smrg# Assumes file is an ltwrapper_executable 11096e7d3316Smrg# uses $file to determine the appropriate filename for a 11106e7d3316Smrg# temporary ltwrapper_script. 11116e7d3316Smrgfunc_ltwrapper_scriptname () 11126e7d3316Smrg{ 11136e7d3316Smrg func_ltwrapper_scriptname_result="" 11146e7d3316Smrg if func_ltwrapper_executable_p "$1"; then 11156e7d3316Smrg func_dirname_and_basename "$1" "" "." 11166e7d3316Smrg func_stripname '' '.exe' "$func_basename_result" 11176e7d3316Smrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 11186e7d3316Smrg fi 11196e7d3316Smrg} 11206e7d3316Smrg 11216e7d3316Smrg# func_ltwrapper_p file 11226e7d3316Smrg# True iff FILE is a libtool wrapper script or wrapper executable 11236e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out 11246e7d3316Smrg# determined imposters. 11256e7d3316Smrgfunc_ltwrapper_p () 11266e7d3316Smrg{ 11276e7d3316Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 11286e7d3316Smrg} 11296e7d3316Smrg 11306e7d3316Smrg 11316e7d3316Smrg# func_execute_cmds commands fail_cmd 11326e7d3316Smrg# Execute tilde-delimited COMMANDS. 11336e7d3316Smrg# If FAIL_CMD is given, eval that upon failure. 11346e7d3316Smrg# FAIL_CMD may read-access the current command in variable CMD! 11356e7d3316Smrgfunc_execute_cmds () 11366e7d3316Smrg{ 11376e7d3316Smrg $opt_debug 11386e7d3316Smrg save_ifs=$IFS; IFS='~' 11396e7d3316Smrg for cmd in $1; do 11406e7d3316Smrg IFS=$save_ifs 11416e7d3316Smrg eval cmd=\"$cmd\" 11426e7d3316Smrg func_show_eval "$cmd" "${2-:}" 11436e7d3316Smrg done 11446e7d3316Smrg IFS=$save_ifs 11456e7d3316Smrg} 11466e7d3316Smrg 11476e7d3316Smrg 11486e7d3316Smrg# func_source file 11496e7d3316Smrg# Source FILE, adding directory component if necessary. 11506e7d3316Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 11516e7d3316Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 11526e7d3316Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 11536e7d3316Smrg# `FILE.' does not work on cygwin managed mounts. 11546e7d3316Smrgfunc_source () 11556e7d3316Smrg{ 11566e7d3316Smrg $opt_debug 11576e7d3316Smrg case $1 in 11586e7d3316Smrg */* | *\\*) . "$1" ;; 11596e7d3316Smrg *) . "./$1" ;; 11606e7d3316Smrg esac 11616e7d3316Smrg} 11626e7d3316Smrg 11636e7d3316Smrg 11646e7d3316Smrg# func_infer_tag arg 11656e7d3316Smrg# Infer tagged configuration to use if any are available and 11666e7d3316Smrg# if one wasn't chosen via the "--tag" command line option. 11676e7d3316Smrg# Only attempt this if the compiler in the base compile 11686e7d3316Smrg# command doesn't match the default compiler. 11696e7d3316Smrg# arg is usually of the form 'gcc ...' 11706e7d3316Smrgfunc_infer_tag () 11716e7d3316Smrg{ 11726e7d3316Smrg $opt_debug 11736e7d3316Smrg if test -n "$available_tags" && test -z "$tagname"; then 11746e7d3316Smrg CC_quoted= 11756e7d3316Smrg for arg in $CC; do 11766e7d3316Smrg func_quote_for_eval "$arg" 11776e7d3316Smrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 11786e7d3316Smrg done 11796e7d3316Smrg CC_expanded=`func_echo_all $CC` 11806e7d3316Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 11816e7d3316Smrg case $@ in 11826e7d3316Smrg # Blanks in the command may have been stripped by the calling shell, 11836e7d3316Smrg # but not from the CC environment variable when configure was run. 11846e7d3316Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 11856e7d3316Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 11866e7d3316Smrg # Blanks at the start of $base_compile will cause this to fail 11876e7d3316Smrg # if we don't check for them as well. 11886e7d3316Smrg *) 11896e7d3316Smrg for z in $available_tags; do 11906e7d3316Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 11916e7d3316Smrg # Evaluate the configuration. 11926e7d3316Smrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 11936e7d3316Smrg CC_quoted= 11946e7d3316Smrg for arg in $CC; do 11956e7d3316Smrg # Double-quote args containing other shell metacharacters. 11966e7d3316Smrg func_quote_for_eval "$arg" 11976e7d3316Smrg CC_quoted="$CC_quoted $func_quote_for_eval_result" 11986e7d3316Smrg done 11996e7d3316Smrg CC_expanded=`func_echo_all $CC` 12006e7d3316Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 12016e7d3316Smrg case "$@ " in 12026e7d3316Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 12036e7d3316Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 12046e7d3316Smrg # The compiler in the base compile command matches 12056e7d3316Smrg # the one in the tagged configuration. 12066e7d3316Smrg # Assume this is the tagged configuration we want. 12076e7d3316Smrg tagname=$z 12086e7d3316Smrg break 12096e7d3316Smrg ;; 12106e7d3316Smrg esac 12116e7d3316Smrg fi 12126e7d3316Smrg done 12136e7d3316Smrg # If $tagname still isn't set, then no tagged configuration 12146e7d3316Smrg # was found and let the user know that the "--tag" command 12156e7d3316Smrg # line option must be used. 12166e7d3316Smrg if test -z "$tagname"; then 12176e7d3316Smrg func_echo "unable to infer tagged configuration" 12186e7d3316Smrg func_fatal_error "specify a tag with \`--tag'" 12196e7d3316Smrg# else 12206e7d3316Smrg# func_verbose "using $tagname tagged configuration" 12216e7d3316Smrg fi 12226e7d3316Smrg ;; 12236e7d3316Smrg esac 12246e7d3316Smrg fi 12256e7d3316Smrg} 12266e7d3316Smrg 12276e7d3316Smrg 12286e7d3316Smrg 12296e7d3316Smrg# func_write_libtool_object output_name pic_name nonpic_name 12306e7d3316Smrg# Create a libtool object file (analogous to a ".la" file), 12316e7d3316Smrg# but don't create it if we're doing a dry run. 12326e7d3316Smrgfunc_write_libtool_object () 12336e7d3316Smrg{ 12346e7d3316Smrg write_libobj=${1} 12356e7d3316Smrg if test "$build_libtool_libs" = yes; then 12366e7d3316Smrg write_lobj=\'${2}\' 12376e7d3316Smrg else 12386e7d3316Smrg write_lobj=none 12396e7d3316Smrg fi 12406e7d3316Smrg 12416e7d3316Smrg if test "$build_old_libs" = yes; then 12426e7d3316Smrg write_oldobj=\'${3}\' 12436e7d3316Smrg else 12446e7d3316Smrg write_oldobj=none 12456e7d3316Smrg fi 12466e7d3316Smrg 12476e7d3316Smrg $opt_dry_run || { 12486e7d3316Smrg cat >${write_libobj}T <<EOF 12496e7d3316Smrg# $write_libobj - a libtool object file 12506e7d3316Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 12516e7d3316Smrg# 12526e7d3316Smrg# Please DO NOT delete this file! 12536e7d3316Smrg# It is necessary for linking the library. 12546e7d3316Smrg 12556e7d3316Smrg# Name of the PIC object. 12566e7d3316Smrgpic_object=$write_lobj 12576e7d3316Smrg 12586e7d3316Smrg# Name of the non-PIC object 12596e7d3316Smrgnon_pic_object=$write_oldobj 12606e7d3316Smrg 12616e7d3316SmrgEOF 12626e7d3316Smrg $MV "${write_libobj}T" "${write_libobj}" 12636e7d3316Smrg } 12646e7d3316Smrg} 12656e7d3316Smrg 12666e7d3316Smrg# func_mode_compile arg... 12676e7d3316Smrgfunc_mode_compile () 12686e7d3316Smrg{ 12696e7d3316Smrg $opt_debug 12706e7d3316Smrg # Get the compilation command and the source file. 12716e7d3316Smrg base_compile= 12726e7d3316Smrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 12736e7d3316Smrg suppress_opt=yes 12746e7d3316Smrg suppress_output= 12756e7d3316Smrg arg_mode=normal 12766e7d3316Smrg libobj= 12776e7d3316Smrg later= 12786e7d3316Smrg pie_flag= 12796e7d3316Smrg 12806e7d3316Smrg for arg 12816e7d3316Smrg do 12826e7d3316Smrg case $arg_mode in 12836e7d3316Smrg arg ) 12846e7d3316Smrg # do not "continue". Instead, add this to base_compile 12856e7d3316Smrg lastarg="$arg" 12866e7d3316Smrg arg_mode=normal 12876e7d3316Smrg ;; 12886e7d3316Smrg 12896e7d3316Smrg target ) 12906e7d3316Smrg libobj="$arg" 12916e7d3316Smrg arg_mode=normal 12926e7d3316Smrg continue 12936e7d3316Smrg ;; 12946e7d3316Smrg 12956e7d3316Smrg normal ) 12966e7d3316Smrg # Accept any command-line options. 12976e7d3316Smrg case $arg in 12986e7d3316Smrg -o) 12996e7d3316Smrg test -n "$libobj" && \ 13006e7d3316Smrg func_fatal_error "you cannot specify \`-o' more than once" 13016e7d3316Smrg arg_mode=target 13026e7d3316Smrg continue 13036e7d3316Smrg ;; 13046e7d3316Smrg 13056e7d3316Smrg -pie | -fpie | -fPIE) 13066e7d3316Smrg pie_flag="$pie_flag $arg" 13076e7d3316Smrg continue 13086e7d3316Smrg ;; 13096e7d3316Smrg 13106e7d3316Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 13116e7d3316Smrg later="$later $arg" 13126e7d3316Smrg continue 13136e7d3316Smrg ;; 1314a966c04fSmrg 1315a966c04fSmrg -no-suppress) 1316a966c04fSmrg suppress_opt=no 1317a966c04fSmrg continue 1318a966c04fSmrg ;; 1319a966c04fSmrg 1320a966c04fSmrg -Xcompiler) 1321a966c04fSmrg arg_mode=arg # the next one goes into the "base_compile" arg list 1322a966c04fSmrg continue # The current "srcfile" will either be retained or 1323a966c04fSmrg ;; # replaced later. I would guess that would be a bug. 1324a966c04fSmrg 1325a966c04fSmrg -Wc,*) 13266e7d3316Smrg func_stripname '-Wc,' '' "$arg" 13276e7d3316Smrg args=$func_stripname_result 1328a966c04fSmrg lastarg= 1329a966c04fSmrg save_ifs="$IFS"; IFS=',' 13306e7d3316Smrg for arg in $args; do 1331a966c04fSmrg IFS="$save_ifs" 13326e7d3316Smrg func_quote_for_eval "$arg" 13336e7d3316Smrg lastarg="$lastarg $func_quote_for_eval_result" 1334a966c04fSmrg done 1335a966c04fSmrg IFS="$save_ifs" 13366e7d3316Smrg func_stripname ' ' '' "$lastarg" 13376e7d3316Smrg lastarg=$func_stripname_result 1338a966c04fSmrg 1339a966c04fSmrg # Add the arguments to base_compile. 1340a966c04fSmrg base_compile="$base_compile $lastarg" 1341a966c04fSmrg continue 1342a966c04fSmrg ;; 1343a966c04fSmrg 13446e7d3316Smrg *) 1345a966c04fSmrg # Accept the current argument as the source file. 1346a966c04fSmrg # The previous "srcfile" becomes the current argument. 1347a966c04fSmrg # 1348a966c04fSmrg lastarg="$srcfile" 1349a966c04fSmrg srcfile="$arg" 1350a966c04fSmrg ;; 1351a966c04fSmrg esac # case $arg 1352a966c04fSmrg ;; 1353a966c04fSmrg esac # case $arg_mode 1354a966c04fSmrg 1355a966c04fSmrg # Aesthetically quote the previous argument. 13566e7d3316Smrg func_quote_for_eval "$lastarg" 13576e7d3316Smrg base_compile="$base_compile $func_quote_for_eval_result" 1358a966c04fSmrg done # for arg 1359a966c04fSmrg 1360a966c04fSmrg case $arg_mode in 1361a966c04fSmrg arg) 13626e7d3316Smrg func_fatal_error "you must specify an argument for -Xcompile" 1363a966c04fSmrg ;; 1364a966c04fSmrg target) 13656e7d3316Smrg func_fatal_error "you must specify a target with \`-o'" 1366a966c04fSmrg ;; 1367a966c04fSmrg *) 1368a966c04fSmrg # Get the name of the library object. 13696e7d3316Smrg test -z "$libobj" && { 13706e7d3316Smrg func_basename "$srcfile" 13716e7d3316Smrg libobj="$func_basename_result" 13726e7d3316Smrg } 1373a966c04fSmrg ;; 1374a966c04fSmrg esac 1375a966c04fSmrg 1376a966c04fSmrg # Recognize several different file suffixes. 1377a966c04fSmrg # If the user specifies -o file.o, it is replaced with file.lo 1378a966c04fSmrg case $libobj in 13796e7d3316Smrg *.[cCFSifmso] | \ 13806e7d3316Smrg *.ada | *.adb | *.ads | *.asm | \ 13816e7d3316Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 13826e7d3316Smrg *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) 13836e7d3316Smrg func_xform "$libobj" 13846e7d3316Smrg libobj=$func_xform_result 13856e7d3316Smrg ;; 1386a966c04fSmrg esac 1387a966c04fSmrg 1388a966c04fSmrg case $libobj in 13896e7d3316Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 1390a966c04fSmrg *) 13916e7d3316Smrg func_fatal_error "cannot determine name of library object from \`$libobj'" 1392a966c04fSmrg ;; 1393a966c04fSmrg esac 1394a966c04fSmrg 1395a966c04fSmrg func_infer_tag $base_compile 1396a966c04fSmrg 1397a966c04fSmrg for arg in $later; do 1398a966c04fSmrg case $arg in 13996e7d3316Smrg -shared) 14006e7d3316Smrg test "$build_libtool_libs" != yes && \ 14016e7d3316Smrg func_fatal_configuration "can not build a shared library" 14026e7d3316Smrg build_old_libs=no 14036e7d3316Smrg continue 14046e7d3316Smrg ;; 14056e7d3316Smrg 1406a966c04fSmrg -static) 14076e7d3316Smrg build_libtool_libs=no 1408a966c04fSmrg build_old_libs=yes 1409a966c04fSmrg continue 1410a966c04fSmrg ;; 1411a966c04fSmrg 1412a966c04fSmrg -prefer-pic) 1413a966c04fSmrg pic_mode=yes 1414a966c04fSmrg continue 1415a966c04fSmrg ;; 1416a966c04fSmrg 1417a966c04fSmrg -prefer-non-pic) 1418a966c04fSmrg pic_mode=no 1419a966c04fSmrg continue 1420a966c04fSmrg ;; 1421a966c04fSmrg esac 1422a966c04fSmrg done 1423a966c04fSmrg 14246e7d3316Smrg func_quote_for_eval "$libobj" 14256e7d3316Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 14266e7d3316Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 14276e7d3316Smrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 14286e7d3316Smrg func_dirname_and_basename "$obj" "/" "" 14296e7d3316Smrg objname="$func_basename_result" 14306e7d3316Smrg xdir="$func_dirname_result" 1431a966c04fSmrg lobj=${xdir}$objdir/$objname 1432a966c04fSmrg 14336e7d3316Smrg test -z "$base_compile" && \ 14346e7d3316Smrg func_fatal_help "you must specify a compilation command" 1435a966c04fSmrg 1436a966c04fSmrg # Delete any leftover library objects. 1437a966c04fSmrg if test "$build_old_libs" = yes; then 1438a966c04fSmrg removelist="$obj $lobj $libobj ${libobj}T" 1439a966c04fSmrg else 1440a966c04fSmrg removelist="$lobj $libobj ${libobj}T" 1441a966c04fSmrg fi 1442a966c04fSmrg 1443a966c04fSmrg # On Cygwin there's no "real" PIC flag so we must build both object types 1444a966c04fSmrg case $host_os in 14456e7d3316Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 1446a966c04fSmrg pic_mode=default 1447a966c04fSmrg ;; 1448a966c04fSmrg esac 1449a966c04fSmrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 1450a966c04fSmrg # non-PIC code in shared libraries is not supported 1451a966c04fSmrg pic_mode=default 1452a966c04fSmrg fi 1453a966c04fSmrg 1454a966c04fSmrg # Calculate the filename of the output object if compiler does 1455a966c04fSmrg # not support -o with -c 1456a966c04fSmrg if test "$compiler_c_o" = no; then 14576e7d3316Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 1458a966c04fSmrg lockfile="$output_obj.lock" 1459a966c04fSmrg else 1460a966c04fSmrg output_obj= 1461a966c04fSmrg need_locks=no 1462a966c04fSmrg lockfile= 1463a966c04fSmrg fi 1464a966c04fSmrg 1465a966c04fSmrg # Lock this critical section if it is needed 1466a966c04fSmrg # We use this script file to make the link, it avoids creating a new file 1467a966c04fSmrg if test "$need_locks" = yes; then 14686e7d3316Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 14696e7d3316Smrg func_echo "Waiting for $lockfile to be removed" 1470a966c04fSmrg sleep 2 1471a966c04fSmrg done 1472a966c04fSmrg elif test "$need_locks" = warn; then 1473a966c04fSmrg if test -f "$lockfile"; then 14746e7d3316Smrg $ECHO "\ 1475a966c04fSmrg*** ERROR, $lockfile exists and contains: 1476a966c04fSmrg`cat $lockfile 2>/dev/null` 1477a966c04fSmrg 1478a966c04fSmrgThis indicates that another process is trying to use the same 1479a966c04fSmrgtemporary object file, and libtool could not work around it because 1480a966c04fSmrgyour compiler does not support \`-c' and \`-o' together. If you 1481a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better 1482a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better 1483a966c04fSmrgcompiler." 1484a966c04fSmrg 14856e7d3316Smrg $opt_dry_run || $RM $removelist 1486a966c04fSmrg exit $EXIT_FAILURE 1487a966c04fSmrg fi 14886e7d3316Smrg removelist="$removelist $output_obj" 14896e7d3316Smrg $ECHO "$srcfile" > "$lockfile" 1490a966c04fSmrg fi 1491a966c04fSmrg 14926e7d3316Smrg $opt_dry_run || $RM $removelist 14936e7d3316Smrg removelist="$removelist $lockfile" 14946e7d3316Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 14956e7d3316Smrg 1496a966c04fSmrg if test -n "$fix_srcfile_path"; then 1497a966c04fSmrg eval srcfile=\"$fix_srcfile_path\" 1498a966c04fSmrg fi 14996e7d3316Smrg func_quote_for_eval "$srcfile" 15006e7d3316Smrg qsrcfile=$func_quote_for_eval_result 1501a966c04fSmrg 1502a966c04fSmrg # Only build a PIC object if we are building libtool libraries. 1503a966c04fSmrg if test "$build_libtool_libs" = yes; then 1504a966c04fSmrg # Without this assignment, base_compile gets emptied. 1505a966c04fSmrg fbsd_hideous_sh_bug=$base_compile 1506a966c04fSmrg 1507a966c04fSmrg if test "$pic_mode" != no; then 1508a966c04fSmrg command="$base_compile $qsrcfile $pic_flag" 1509a966c04fSmrg else 1510a966c04fSmrg # Don't build PIC code 1511a966c04fSmrg command="$base_compile $qsrcfile" 1512a966c04fSmrg fi 1513a966c04fSmrg 15146e7d3316Smrg func_mkdir_p "$xdir$objdir" 1515a966c04fSmrg 1516a966c04fSmrg if test -z "$output_obj"; then 1517a966c04fSmrg # Place PIC objects in $objdir 1518a966c04fSmrg command="$command -o $lobj" 1519a966c04fSmrg fi 1520a966c04fSmrg 15216e7d3316Smrg func_show_eval_locale "$command" \ 15226e7d3316Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 1523a966c04fSmrg 1524a966c04fSmrg if test "$need_locks" = warn && 1525a966c04fSmrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 15266e7d3316Smrg $ECHO "\ 1527a966c04fSmrg*** ERROR, $lockfile contains: 1528a966c04fSmrg`cat $lockfile 2>/dev/null` 1529a966c04fSmrg 1530a966c04fSmrgbut it should contain: 1531a966c04fSmrg$srcfile 1532a966c04fSmrg 1533a966c04fSmrgThis indicates that another process is trying to use the same 1534a966c04fSmrgtemporary object file, and libtool could not work around it because 1535a966c04fSmrgyour compiler does not support \`-c' and \`-o' together. If you 1536a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better 1537a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better 1538a966c04fSmrgcompiler." 1539a966c04fSmrg 15406e7d3316Smrg $opt_dry_run || $RM $removelist 1541a966c04fSmrg exit $EXIT_FAILURE 1542a966c04fSmrg fi 1543a966c04fSmrg 1544a966c04fSmrg # Just move the object if needed, then go on to compile the next one 1545a966c04fSmrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 15466e7d3316Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 15476e7d3316Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 1548a966c04fSmrg fi 1549a966c04fSmrg 1550a966c04fSmrg # Allow error messages only from the first compilation. 1551a966c04fSmrg if test "$suppress_opt" = yes; then 15526e7d3316Smrg suppress_output=' >/dev/null 2>&1' 1553a966c04fSmrg fi 1554a966c04fSmrg fi 1555a966c04fSmrg 1556a966c04fSmrg # Only build a position-dependent object if we build old libraries. 1557a966c04fSmrg if test "$build_old_libs" = yes; then 1558a966c04fSmrg if test "$pic_mode" != yes; then 1559a966c04fSmrg # Don't build PIC code 15606e7d3316Smrg command="$base_compile $qsrcfile$pie_flag" 1561a966c04fSmrg else 1562a966c04fSmrg command="$base_compile $qsrcfile $pic_flag" 1563a966c04fSmrg fi 1564a966c04fSmrg if test "$compiler_c_o" = yes; then 1565a966c04fSmrg command="$command -o $obj" 1566a966c04fSmrg fi 1567a966c04fSmrg 1568a966c04fSmrg # Suppress compiler output if we already did a PIC compilation. 1569a966c04fSmrg command="$command$suppress_output" 15706e7d3316Smrg func_show_eval_locale "$command" \ 15716e7d3316Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1572a966c04fSmrg 1573a966c04fSmrg if test "$need_locks" = warn && 1574a966c04fSmrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 15756e7d3316Smrg $ECHO "\ 1576a966c04fSmrg*** ERROR, $lockfile contains: 1577a966c04fSmrg`cat $lockfile 2>/dev/null` 1578a966c04fSmrg 1579a966c04fSmrgbut it should contain: 1580a966c04fSmrg$srcfile 1581a966c04fSmrg 1582a966c04fSmrgThis indicates that another process is trying to use the same 1583a966c04fSmrgtemporary object file, and libtool could not work around it because 1584a966c04fSmrgyour compiler does not support \`-c' and \`-o' together. If you 1585a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better 1586a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better 1587a966c04fSmrgcompiler." 1588a966c04fSmrg 15896e7d3316Smrg $opt_dry_run || $RM $removelist 1590a966c04fSmrg exit $EXIT_FAILURE 1591a966c04fSmrg fi 1592a966c04fSmrg 1593a966c04fSmrg # Just move the object if needed 1594a966c04fSmrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 15956e7d3316Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 15966e7d3316Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 1597a966c04fSmrg fi 1598a966c04fSmrg fi 1599a966c04fSmrg 16006e7d3316Smrg $opt_dry_run || { 16016e7d3316Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 1602a966c04fSmrg 16036e7d3316Smrg # Unlock the critical section if it was locked 16046e7d3316Smrg if test "$need_locks" != no; then 16056e7d3316Smrg removelist=$lockfile 16066e7d3316Smrg $RM "$lockfile" 16076e7d3316Smrg fi 16086e7d3316Smrg } 1609a966c04fSmrg 1610a966c04fSmrg exit $EXIT_SUCCESS 16116e7d3316Smrg} 1612a966c04fSmrg 16136e7d3316Smrg$opt_help || { 16146e7d3316Smrg test "$mode" = compile && func_mode_compile ${1+"$@"} 16156e7d3316Smrg} 1616a966c04fSmrg 16176e7d3316Smrgfunc_mode_help () 16186e7d3316Smrg{ 16196e7d3316Smrg # We need to display help for each of the modes. 16206e7d3316Smrg case $mode in 16216e7d3316Smrg "") 16226e7d3316Smrg # Generic help is extracted from the usage comments 16236e7d3316Smrg # at the start of this file. 16246e7d3316Smrg func_help 16256e7d3316Smrg ;; 1626a966c04fSmrg 16276e7d3316Smrg clean) 16286e7d3316Smrg $ECHO \ 16296e7d3316Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 1630a966c04fSmrg 16316e7d3316SmrgRemove files from the build directory. 1632a966c04fSmrg 16336e7d3316SmrgRM is the name of the program to use to delete files associated with each FILE 16346e7d3316Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 16356e7d3316Smrgto RM. 1636a966c04fSmrg 16376e7d3316SmrgIf FILE is a libtool library, object or program, all the files associated 16386e7d3316Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 16396e7d3316Smrg ;; 1640a966c04fSmrg 16416e7d3316Smrg compile) 16426e7d3316Smrg $ECHO \ 16436e7d3316Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 1644a966c04fSmrg 16456e7d3316SmrgCompile a source file into a libtool library object. 1646a966c04fSmrg 16476e7d3316SmrgThis mode accepts the following additional options: 1648a966c04fSmrg 16496e7d3316Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 16506e7d3316Smrg -no-suppress do not suppress compiler output for multiple passes 16516e7d3316Smrg -prefer-pic try to build PIC objects only 16526e7d3316Smrg -prefer-non-pic try to build non-PIC objects only 16536e7d3316Smrg -shared do not build a \`.o' file suitable for static linking 16546e7d3316Smrg -static only build a \`.o' file suitable for static linking 16556e7d3316Smrg -Wc,FLAG pass FLAG directly to the compiler 1656a966c04fSmrg 16576e7d3316SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 16586e7d3316Smrgfrom the given SOURCEFILE. 1659a966c04fSmrg 16606e7d3316SmrgThe output file name is determined by removing the directory component from 16616e7d3316SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 16626e7d3316Smrglibrary object suffix, \`.lo'." 16636e7d3316Smrg ;; 1664a966c04fSmrg 16656e7d3316Smrg execute) 16666e7d3316Smrg $ECHO \ 16676e7d3316Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 1668a966c04fSmrg 16696e7d3316SmrgAutomatically set library path, then run a program. 1670a966c04fSmrg 16716e7d3316SmrgThis mode accepts the following additional options: 1672a966c04fSmrg 16736e7d3316Smrg -dlopen FILE add the directory containing FILE to the library path 1674a966c04fSmrg 16756e7d3316SmrgThis mode sets the library path environment variable according to \`-dlopen' 16766e7d3316Smrgflags. 1677a966c04fSmrg 16786e7d3316SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 16796e7d3316Smrginto their corresponding uninstalled binary, and any of their required library 16806e7d3316Smrgdirectories are added to the library path. 1681a966c04fSmrg 16826e7d3316SmrgThen, COMMAND is executed, with ARGS as arguments." 16836e7d3316Smrg ;; 1684a966c04fSmrg 16856e7d3316Smrg finish) 16866e7d3316Smrg $ECHO \ 16876e7d3316Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 1688a966c04fSmrg 16896e7d3316SmrgComplete the installation of libtool libraries. 1690a966c04fSmrg 16916e7d3316SmrgEach LIBDIR is a directory that contains libtool libraries. 1692a966c04fSmrg 16936e7d3316SmrgThe commands that this mode executes may require superuser privileges. Use 16946e7d3316Smrgthe \`--dry-run' option if you just want to see what would be executed." 16956e7d3316Smrg ;; 1696a966c04fSmrg 16976e7d3316Smrg install) 16986e7d3316Smrg $ECHO \ 16996e7d3316Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 1700a966c04fSmrg 17016e7d3316SmrgInstall executables or libraries. 1702a966c04fSmrg 17036e7d3316SmrgINSTALL-COMMAND is the installation command. The first component should be 17046e7d3316Smrgeither the \`install' or \`cp' program. 1705a966c04fSmrg 17066e7d3316SmrgThe following components of INSTALL-COMMAND are treated specially: 1707a966c04fSmrg 17086e7d3316Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 1709a966c04fSmrg 17106e7d3316SmrgThe rest of the components are interpreted as arguments to that command (only 17116e7d3316SmrgBSD-compatible install options are recognized)." 17126e7d3316Smrg ;; 1713a966c04fSmrg 17146e7d3316Smrg link) 17156e7d3316Smrg $ECHO \ 17166e7d3316Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 1717a966c04fSmrg 17186e7d3316SmrgLink object files or libraries together to form another library, or to 17196e7d3316Smrgcreate an executable program. 1720a966c04fSmrg 17216e7d3316SmrgLINK-COMMAND is a command using the C compiler that you would use to create 17226e7d3316Smrga program from several object files. 1723a966c04fSmrg 17246e7d3316SmrgThe following components of LINK-COMMAND are treated specially: 1725a966c04fSmrg 17266e7d3316Smrg -all-static do not do any dynamic linking at all 17276e7d3316Smrg -avoid-version do not add a version suffix if possible 17286e7d3316Smrg -bindir BINDIR specify path to binaries directory (for systems where 17296e7d3316Smrg libraries must be found in the PATH setting at runtime) 17306e7d3316Smrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 17316e7d3316Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 17326e7d3316Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 17336e7d3316Smrg -export-symbols SYMFILE 17346e7d3316Smrg try to export only the symbols listed in SYMFILE 17356e7d3316Smrg -export-symbols-regex REGEX 17366e7d3316Smrg try to export only the symbols matching REGEX 17376e7d3316Smrg -LLIBDIR search LIBDIR for required installed libraries 17386e7d3316Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 17396e7d3316Smrg -module build a library that can dlopened 17406e7d3316Smrg -no-fast-install disable the fast-install mode 17416e7d3316Smrg -no-install link a not-installable executable 17426e7d3316Smrg -no-undefined declare that a library does not refer to external symbols 17436e7d3316Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 17446e7d3316Smrg -objectlist FILE Use a list of object files found in FILE to specify objects 17456e7d3316Smrg -precious-files-regex REGEX 17466e7d3316Smrg don't remove output files matching REGEX 17476e7d3316Smrg -release RELEASE specify package release information 17486e7d3316Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 17496e7d3316Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 17506e7d3316Smrg -shared only do dynamic linking of libtool libraries 17516e7d3316Smrg -shrext SUFFIX override the standard shared library file extension 17526e7d3316Smrg -static do not do any dynamic linking of uninstalled libtool libraries 17536e7d3316Smrg -static-libtool-libs 17546e7d3316Smrg do not do any dynamic linking of libtool libraries 17556e7d3316Smrg -version-info CURRENT[:REVISION[:AGE]] 17566e7d3316Smrg specify library version info [each variable defaults to 0] 17576e7d3316Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 17586e7d3316Smrg -Wc,FLAG 17596e7d3316Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 17606e7d3316Smrg -Wl,FLAG 17616e7d3316Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 17626e7d3316Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 1763a966c04fSmrg 17646e7d3316SmrgAll other options (arguments beginning with \`-') are ignored. 1765a966c04fSmrg 17666e7d3316SmrgEvery other argument is treated as a filename. Files ending in \`.la' are 17676e7d3316Smrgtreated as uninstalled libtool libraries, other files are standard or library 17686e7d3316Smrgobject files. 1769a966c04fSmrg 17706e7d3316SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 17716e7d3316Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 17726e7d3316Smrgrequired, except when creating a convenience library. 1773a966c04fSmrg 17746e7d3316SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 17756e7d3316Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 17762e2dd055Smrg 17776e7d3316SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 17786e7d3316Smrgis created, otherwise an executable program is created." 17796e7d3316Smrg ;; 1780a966c04fSmrg 17816e7d3316Smrg uninstall) 17826e7d3316Smrg $ECHO \ 17836e7d3316Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 1784a966c04fSmrg 17856e7d3316SmrgRemove libraries from an installation directory. 1786a966c04fSmrg 17876e7d3316SmrgRM is the name of the program to use to delete files associated with each FILE 17886e7d3316Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 17896e7d3316Smrgto RM. 1790a966c04fSmrg 17916e7d3316SmrgIf FILE is a libtool library, all the files associated with it are deleted. 17926e7d3316SmrgOtherwise, only FILE itself is deleted using RM." 17936e7d3316Smrg ;; 1794a966c04fSmrg 17956e7d3316Smrg *) 17966e7d3316Smrg func_fatal_help "invalid operation mode \`$mode'" 17976e7d3316Smrg ;; 17986e7d3316Smrg esac 1799a966c04fSmrg 18006e7d3316Smrg echo 18016e7d3316Smrg $ECHO "Try \`$progname --help' for more information about other modes." 18026e7d3316Smrg} 1803a966c04fSmrg 18046e7d3316Smrg# Now that we've collected a possible --mode arg, show help if necessary 18056e7d3316Smrgif $opt_help; then 18066e7d3316Smrg if test "$opt_help" = :; then 18076e7d3316Smrg func_mode_help 18086e7d3316Smrg else 18096e7d3316Smrg { 18106e7d3316Smrg func_help noexit 18116e7d3316Smrg for mode in compile link execute install finish uninstall clean; do 18126e7d3316Smrg func_mode_help 18136e7d3316Smrg done 18146e7d3316Smrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 18156e7d3316Smrg { 18166e7d3316Smrg func_help noexit 18176e7d3316Smrg for mode in compile link execute install finish uninstall clean; do 18186e7d3316Smrg echo 18196e7d3316Smrg func_mode_help 18206e7d3316Smrg done 18216e7d3316Smrg } | 18226e7d3316Smrg sed '1d 18236e7d3316Smrg /^When reporting/,/^Report/{ 18246e7d3316Smrg H 18256e7d3316Smrg d 18266e7d3316Smrg } 18276e7d3316Smrg $x 18286e7d3316Smrg /information about other modes/d 18296e7d3316Smrg /more detailed .*MODE/d 18306e7d3316Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 18316e7d3316Smrg fi 18326e7d3316Smrg exit $? 18336e7d3316Smrgfi 1834a966c04fSmrg 1835a966c04fSmrg 18366e7d3316Smrg# func_mode_execute arg... 18376e7d3316Smrgfunc_mode_execute () 18386e7d3316Smrg{ 18396e7d3316Smrg $opt_debug 18406e7d3316Smrg # The first argument is the command name. 18416e7d3316Smrg cmd="$nonopt" 18426e7d3316Smrg test -z "$cmd" && \ 18436e7d3316Smrg func_fatal_help "you must specify a COMMAND" 1844a966c04fSmrg 18456e7d3316Smrg # Handle -dlopen flags immediately. 18466e7d3316Smrg for file in $execute_dlfiles; do 18476e7d3316Smrg test -f "$file" \ 18486e7d3316Smrg || func_fatal_help "\`$file' is not a file" 1849a966c04fSmrg 18506e7d3316Smrg dir= 18516e7d3316Smrg case $file in 18526e7d3316Smrg *.la) 18536e7d3316Smrg # Check to see that this really is a libtool archive. 18546e7d3316Smrg func_lalib_unsafe_p "$file" \ 18556e7d3316Smrg || func_fatal_help "\`$lib' is not a valid libtool archive" 1856a966c04fSmrg 18576e7d3316Smrg # Read the libtool library. 18586e7d3316Smrg dlname= 18596e7d3316Smrg library_names= 18606e7d3316Smrg func_source "$file" 1861a966c04fSmrg 18626e7d3316Smrg # Skip this library if it cannot be dlopened. 18636e7d3316Smrg if test -z "$dlname"; then 18646e7d3316Smrg # Warn if it was a shared library. 18656e7d3316Smrg test -n "$library_names" && \ 18666e7d3316Smrg func_warning "\`$file' was not linked with \`-export-dynamic'" 18676e7d3316Smrg continue 18686e7d3316Smrg fi 1869a966c04fSmrg 18706e7d3316Smrg func_dirname "$file" "" "." 18716e7d3316Smrg dir="$func_dirname_result" 1872a966c04fSmrg 18736e7d3316Smrg if test -f "$dir/$objdir/$dlname"; then 18746e7d3316Smrg dir="$dir/$objdir" 18756e7d3316Smrg else 18766e7d3316Smrg if test ! -f "$dir/$dlname"; then 18776e7d3316Smrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 18786e7d3316Smrg fi 18796e7d3316Smrg fi 1880a966c04fSmrg ;; 1881a966c04fSmrg 18826e7d3316Smrg *.lo) 18836e7d3316Smrg # Just add the directory containing the .lo file. 18846e7d3316Smrg func_dirname "$file" "" "." 18856e7d3316Smrg dir="$func_dirname_result" 1886a966c04fSmrg ;; 18876e7d3316Smrg 18886e7d3316Smrg *) 18896e7d3316Smrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 1890a966c04fSmrg continue 1891a966c04fSmrg ;; 18926e7d3316Smrg esac 1893a966c04fSmrg 18946e7d3316Smrg # Get the absolute pathname. 18956e7d3316Smrg absdir=`cd "$dir" && pwd` 18966e7d3316Smrg test -n "$absdir" && dir="$absdir" 1897a966c04fSmrg 18986e7d3316Smrg # Now add the directory to shlibpath_var. 18996e7d3316Smrg if eval "test -z \"\$$shlibpath_var\""; then 19006e7d3316Smrg eval "$shlibpath_var=\"\$dir\"" 19016e7d3316Smrg else 19026e7d3316Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 19036e7d3316Smrg fi 19046e7d3316Smrg done 1905a966c04fSmrg 19066e7d3316Smrg # This variable tells wrapper scripts just to set shlibpath_var 19076e7d3316Smrg # rather than running their programs. 19086e7d3316Smrg libtool_execute_magic="$magic" 1909a966c04fSmrg 19106e7d3316Smrg # Check if any of the arguments is a wrapper script. 19116e7d3316Smrg args= 19126e7d3316Smrg for file 19136e7d3316Smrg do 19146e7d3316Smrg case $file in 19156e7d3316Smrg -* | *.la | *.lo ) ;; 19166e7d3316Smrg *) 19176e7d3316Smrg # Do a test to see if this is really a libtool program. 19186e7d3316Smrg if func_ltwrapper_script_p "$file"; then 19196e7d3316Smrg func_source "$file" 19206e7d3316Smrg # Transform arg to wrapped name. 19216e7d3316Smrg file="$progdir/$program" 19226e7d3316Smrg elif func_ltwrapper_executable_p "$file"; then 19236e7d3316Smrg func_ltwrapper_scriptname "$file" 19246e7d3316Smrg func_source "$func_ltwrapper_scriptname_result" 19256e7d3316Smrg # Transform arg to wrapped name. 19266e7d3316Smrg file="$progdir/$program" 19276e7d3316Smrg fi 1928a966c04fSmrg ;; 19296e7d3316Smrg esac 19306e7d3316Smrg # Quote arguments (to preserve shell metacharacters). 19316e7d3316Smrg func_quote_for_eval "$file" 19326e7d3316Smrg args="$args $func_quote_for_eval_result" 19336e7d3316Smrg done 1934a966c04fSmrg 19356e7d3316Smrg if test "X$opt_dry_run" = Xfalse; then 19366e7d3316Smrg if test -n "$shlibpath_var"; then 19376e7d3316Smrg # Export the shlibpath_var. 19386e7d3316Smrg eval "export $shlibpath_var" 19396e7d3316Smrg fi 1940a966c04fSmrg 19416e7d3316Smrg # Restore saved environment variables 19426e7d3316Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 19436e7d3316Smrg do 19446e7d3316Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 19456e7d3316Smrg $lt_var=\$save_$lt_var; export $lt_var 19466e7d3316Smrg else 19476e7d3316Smrg $lt_unset $lt_var 19486e7d3316Smrg fi" 19496e7d3316Smrg done 1950a966c04fSmrg 19516e7d3316Smrg # Now prepare to actually exec the command. 19526e7d3316Smrg exec_cmd="\$cmd$args" 19536e7d3316Smrg else 19546e7d3316Smrg # Display what would be done. 19556e7d3316Smrg if test -n "$shlibpath_var"; then 19566e7d3316Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 19576e7d3316Smrg echo "export $shlibpath_var" 19586e7d3316Smrg fi 19596e7d3316Smrg $ECHO "$cmd$args" 19606e7d3316Smrg exit $EXIT_SUCCESS 19616e7d3316Smrg fi 19626e7d3316Smrg} 1963a966c04fSmrg 19646e7d3316Smrgtest "$mode" = execute && func_mode_execute ${1+"$@"} 1965a966c04fSmrg 1966a966c04fSmrg 19676e7d3316Smrg# func_mode_finish arg... 19686e7d3316Smrgfunc_mode_finish () 19696e7d3316Smrg{ 19706e7d3316Smrg $opt_debug 19716e7d3316Smrg libdirs="$nonopt" 19726e7d3316Smrg admincmds= 1973a966c04fSmrg 19746e7d3316Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 19756e7d3316Smrg for dir 19766e7d3316Smrg do 19776e7d3316Smrg libdirs="$libdirs $dir" 19786e7d3316Smrg done 1979a966c04fSmrg 19806e7d3316Smrg for libdir in $libdirs; do 19816e7d3316Smrg if test -n "$finish_cmds"; then 19826e7d3316Smrg # Do each command in the finish commands. 19836e7d3316Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 19846e7d3316Smrg'"$cmd"'"' 19856e7d3316Smrg fi 19866e7d3316Smrg if test -n "$finish_eval"; then 19876e7d3316Smrg # Do the single finish_eval. 19886e7d3316Smrg eval cmds=\"$finish_eval\" 19896e7d3316Smrg $opt_dry_run || eval "$cmds" || admincmds="$admincmds 19906e7d3316Smrg $cmds" 19916e7d3316Smrg fi 19926e7d3316Smrg done 19936e7d3316Smrg fi 1994a966c04fSmrg 19956e7d3316Smrg # Exit here if they wanted silent mode. 19966e7d3316Smrg $opt_silent && exit $EXIT_SUCCESS 1997a966c04fSmrg 19986e7d3316Smrg echo "----------------------------------------------------------------------" 19996e7d3316Smrg echo "Libraries have been installed in:" 20006e7d3316Smrg for libdir in $libdirs; do 20016e7d3316Smrg $ECHO " $libdir" 20026e7d3316Smrg done 20036e7d3316Smrg echo 20046e7d3316Smrg echo "If you ever happen to want to link against installed libraries" 20056e7d3316Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 20066e7d3316Smrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 20076e7d3316Smrg echo "flag during linking and do at least one of the following:" 20086e7d3316Smrg if test -n "$shlibpath_var"; then 20096e7d3316Smrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 20106e7d3316Smrg echo " during execution" 20116e7d3316Smrg fi 20126e7d3316Smrg if test -n "$runpath_var"; then 20136e7d3316Smrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 20146e7d3316Smrg echo " during linking" 20156e7d3316Smrg fi 20166e7d3316Smrg if test -n "$hardcode_libdir_flag_spec"; then 20176e7d3316Smrg libdir=LIBDIR 20186e7d3316Smrg eval flag=\"$hardcode_libdir_flag_spec\" 2019a966c04fSmrg 20206e7d3316Smrg $ECHO " - use the \`$flag' linker flag" 20216e7d3316Smrg fi 20226e7d3316Smrg if test -n "$admincmds"; then 20236e7d3316Smrg $ECHO " - have your system administrator run these commands:$admincmds" 20246e7d3316Smrg fi 20256e7d3316Smrg if test -f /etc/ld.so.conf; then 20266e7d3316Smrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 20276e7d3316Smrg fi 20286e7d3316Smrg echo 2029a966c04fSmrg 20306e7d3316Smrg echo "See any operating system documentation about shared libraries for" 20316e7d3316Smrg case $host in 20326e7d3316Smrg solaris2.[6789]|solaris2.1[0-9]) 20336e7d3316Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 20346e7d3316Smrg echo "pages." 20356e7d3316Smrg ;; 20366e7d3316Smrg *) 20376e7d3316Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 20386e7d3316Smrg ;; 20396e7d3316Smrg esac 20406e7d3316Smrg echo "----------------------------------------------------------------------" 20416e7d3316Smrg exit $EXIT_SUCCESS 20426e7d3316Smrg} 2043a966c04fSmrg 20446e7d3316Smrgtest "$mode" = finish && func_mode_finish ${1+"$@"} 2045a966c04fSmrg 2046a966c04fSmrg 20476e7d3316Smrg# func_mode_install arg... 20486e7d3316Smrgfunc_mode_install () 20496e7d3316Smrg{ 20506e7d3316Smrg $opt_debug 20516e7d3316Smrg # There may be an optional sh(1) argument at the beginning of 20526e7d3316Smrg # install_prog (especially on Windows NT). 20536e7d3316Smrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 20546e7d3316Smrg # Allow the use of GNU shtool's install command. 20556e7d3316Smrg case $nonopt in *shtool*) :;; *) false;; esac; then 20566e7d3316Smrg # Aesthetically quote it. 20576e7d3316Smrg func_quote_for_eval "$nonopt" 20586e7d3316Smrg install_prog="$func_quote_for_eval_result " 20596e7d3316Smrg arg=$1 20606e7d3316Smrg shift 20616e7d3316Smrg else 20626e7d3316Smrg install_prog= 20636e7d3316Smrg arg=$nonopt 20646e7d3316Smrg fi 2065a966c04fSmrg 20666e7d3316Smrg # The real first argument should be the name of the installation program. 20676e7d3316Smrg # Aesthetically quote it. 20686e7d3316Smrg func_quote_for_eval "$arg" 20696e7d3316Smrg install_prog="$install_prog$func_quote_for_eval_result" 20706e7d3316Smrg install_shared_prog=$install_prog 20716e7d3316Smrg case " $install_prog " in 20726e7d3316Smrg *[\\\ /]cp\ *) install_cp=: ;; 20736e7d3316Smrg *) install_cp=false ;; 20746e7d3316Smrg esac 2075a966c04fSmrg 20766e7d3316Smrg # We need to accept at least all the BSD install flags. 20776e7d3316Smrg dest= 20786e7d3316Smrg files= 20796e7d3316Smrg opts= 20806e7d3316Smrg prev= 20816e7d3316Smrg install_type= 20826e7d3316Smrg isdir=no 20836e7d3316Smrg stripme= 20846e7d3316Smrg no_mode=: 20856e7d3316Smrg for arg 20866e7d3316Smrg do 20876e7d3316Smrg arg2= 20886e7d3316Smrg if test -n "$dest"; then 20896e7d3316Smrg files="$files $dest" 20906e7d3316Smrg dest=$arg 2091a966c04fSmrg continue 20926e7d3316Smrg fi 2093a966c04fSmrg 20946e7d3316Smrg case $arg in 20956e7d3316Smrg -d) isdir=yes ;; 20966e7d3316Smrg -f) 20976e7d3316Smrg if $install_cp; then :; else 20986e7d3316Smrg prev=$arg 2099a966c04fSmrg fi 21006e7d3316Smrg ;; 21016e7d3316Smrg -g | -m | -o) 21026e7d3316Smrg prev=$arg 21036e7d3316Smrg ;; 21046e7d3316Smrg -s) 21056e7d3316Smrg stripme=" -s" 2106a966c04fSmrg continue 2107a966c04fSmrg ;; 21086e7d3316Smrg -*) 21096e7d3316Smrg ;; 2110a966c04fSmrg *) 21116e7d3316Smrg # If the previous option needed an argument, then skip it. 21126e7d3316Smrg if test -n "$prev"; then 21136e7d3316Smrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 21146e7d3316Smrg arg2=$install_override_mode 21156e7d3316Smrg no_mode=false 21166e7d3316Smrg fi 21176e7d3316Smrg prev= 21186e7d3316Smrg else 21196e7d3316Smrg dest=$arg 21206e7d3316Smrg continue 21216e7d3316Smrg fi 2122a966c04fSmrg ;; 21236e7d3316Smrg esac 2124a966c04fSmrg 21256e7d3316Smrg # Aesthetically quote the argument. 21266e7d3316Smrg func_quote_for_eval "$arg" 21276e7d3316Smrg install_prog="$install_prog $func_quote_for_eval_result" 21286e7d3316Smrg if test -n "$arg2"; then 21296e7d3316Smrg func_quote_for_eval "$arg2" 2130a966c04fSmrg fi 21316e7d3316Smrg install_shared_prog="$install_shared_prog $func_quote_for_eval_result" 21326e7d3316Smrg done 2133a966c04fSmrg 21346e7d3316Smrg test -z "$install_prog" && \ 21356e7d3316Smrg func_fatal_help "you must specify an install program" 2136a966c04fSmrg 21376e7d3316Smrg test -n "$prev" && \ 21386e7d3316Smrg func_fatal_help "the \`$prev' option requires an argument" 2139a966c04fSmrg 21406e7d3316Smrg if test -n "$install_override_mode" && $no_mode; then 21416e7d3316Smrg if $install_cp; then :; else 21426e7d3316Smrg func_quote_for_eval "$install_override_mode" 21436e7d3316Smrg install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result" 21446e7d3316Smrg fi 2145a966c04fSmrg fi 2146a966c04fSmrg 21476e7d3316Smrg if test -z "$files"; then 21486e7d3316Smrg if test -z "$dest"; then 21496e7d3316Smrg func_fatal_help "no file or destination specified" 21506e7d3316Smrg else 21516e7d3316Smrg func_fatal_help "you must specify a destination" 2152a966c04fSmrg fi 2153a966c04fSmrg fi 2154a966c04fSmrg 21556e7d3316Smrg # Strip any trailing slash from the destination. 21566e7d3316Smrg func_stripname '' '/' "$dest" 21576e7d3316Smrg dest=$func_stripname_result 2158a966c04fSmrg 21596e7d3316Smrg # Check to see that the destination is a directory. 21606e7d3316Smrg test -d "$dest" && isdir=yes 21616e7d3316Smrg if test "$isdir" = yes; then 21626e7d3316Smrg destdir="$dest" 21636e7d3316Smrg destname= 21646e7d3316Smrg else 21656e7d3316Smrg func_dirname_and_basename "$dest" "" "." 21666e7d3316Smrg destdir="$func_dirname_result" 21676e7d3316Smrg destname="$func_basename_result" 21686e7d3316Smrg 21696e7d3316Smrg # Not a directory, so check to see that there is only one file specified. 21706e7d3316Smrg set dummy $files; shift 21716e7d3316Smrg test "$#" -gt 1 && \ 21726e7d3316Smrg func_fatal_help "\`$dest' is not a directory" 21736e7d3316Smrg fi 21746e7d3316Smrg case $destdir in 21756e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 2176a966c04fSmrg *) 21776e7d3316Smrg for file in $files; do 21786e7d3316Smrg case $file in 21796e7d3316Smrg *.lo) ;; 21806e7d3316Smrg *) 21816e7d3316Smrg func_fatal_help "\`$destdir' must be an absolute directory name" 21826e7d3316Smrg ;; 21836e7d3316Smrg esac 21846e7d3316Smrg done 2185a966c04fSmrg ;; 2186a966c04fSmrg esac 2187a966c04fSmrg 21886e7d3316Smrg # This variable tells wrapper scripts just to set variables rather 21896e7d3316Smrg # than running their programs. 21906e7d3316Smrg libtool_install_magic="$magic" 2191a966c04fSmrg 21926e7d3316Smrg staticlibs= 21936e7d3316Smrg future_libdirs= 21946e7d3316Smrg current_libdirs= 21956e7d3316Smrg for file in $files; do 2196a966c04fSmrg 21976e7d3316Smrg # Do each installation. 21986e7d3316Smrg case $file in 21996e7d3316Smrg *.$libext) 22006e7d3316Smrg # Do the static libraries later. 22016e7d3316Smrg staticlibs="$staticlibs $file" 22026e7d3316Smrg ;; 22036e7d3316Smrg 22046e7d3316Smrg *.la) 22056e7d3316Smrg # Check to see that this really is a libtool archive. 22066e7d3316Smrg func_lalib_unsafe_p "$file" \ 22076e7d3316Smrg || func_fatal_help "\`$file' is not a valid libtool archive" 22086e7d3316Smrg 22096e7d3316Smrg library_names= 22106e7d3316Smrg old_library= 22116e7d3316Smrg relink_command= 22126e7d3316Smrg func_source "$file" 22136e7d3316Smrg 22146e7d3316Smrg # Add the libdir to current_libdirs if it is the destination. 22156e7d3316Smrg if test "X$destdir" = "X$libdir"; then 22166e7d3316Smrg case "$current_libdirs " in 22176e7d3316Smrg *" $libdir "*) ;; 22186e7d3316Smrg *) current_libdirs="$current_libdirs $libdir" ;; 2219a966c04fSmrg esac 22206e7d3316Smrg else 22216e7d3316Smrg # Note the libdir as a future libdir. 22226e7d3316Smrg case "$future_libdirs " in 22236e7d3316Smrg *" $libdir "*) ;; 22246e7d3316Smrg *) future_libdirs="$future_libdirs $libdir" ;; 22256e7d3316Smrg esac 22266e7d3316Smrg fi 2227a966c04fSmrg 22286e7d3316Smrg func_dirname "$file" "/" "" 22296e7d3316Smrg dir="$func_dirname_result" 22306e7d3316Smrg dir="$dir$objdir" 22316e7d3316Smrg 22326e7d3316Smrg if test -n "$relink_command"; then 22336e7d3316Smrg # Determine the prefix the user has applied to our future dir. 22346e7d3316Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 22356e7d3316Smrg 22366e7d3316Smrg # Don't allow the user to place us outside of our expected 22376e7d3316Smrg # location b/c this prevents finding dependent libraries that 22386e7d3316Smrg # are installed to the same prefix. 22396e7d3316Smrg # At present, this check doesn't affect windows .dll's that 22406e7d3316Smrg # are installed into $libdir/../bin (currently, that works fine) 22416e7d3316Smrg # but it's something to keep an eye on. 22426e7d3316Smrg test "$inst_prefix_dir" = "$destdir" && \ 22436e7d3316Smrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 22446e7d3316Smrg 22456e7d3316Smrg if test -n "$inst_prefix_dir"; then 22466e7d3316Smrg # Stick the inst_prefix_dir data into the link command. 22476e7d3316Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 22486e7d3316Smrg else 22496e7d3316Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 22506e7d3316Smrg fi 22516e7d3316Smrg 22526e7d3316Smrg func_warning "relinking \`$file'" 22536e7d3316Smrg func_show_eval "$relink_command" \ 22546e7d3316Smrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 22556e7d3316Smrg fi 22566e7d3316Smrg 22576e7d3316Smrg # See the names of the shared library. 22586e7d3316Smrg set dummy $library_names; shift 22596e7d3316Smrg if test -n "$1"; then 22606e7d3316Smrg realname="$1" 22616e7d3316Smrg shift 22626e7d3316Smrg 22636e7d3316Smrg srcname="$realname" 22646e7d3316Smrg test -n "$relink_command" && srcname="$realname"T 22656e7d3316Smrg 22666e7d3316Smrg # Install the shared library and build the symlinks. 22676e7d3316Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 22686e7d3316Smrg 'exit $?' 22696e7d3316Smrg tstripme="$stripme" 22706e7d3316Smrg case $host_os in 22716e7d3316Smrg cygwin* | mingw* | pw32* | cegcc*) 22726e7d3316Smrg case $realname in 22736e7d3316Smrg *.dll.a) 22746e7d3316Smrg tstripme="" 22756e7d3316Smrg ;; 22766e7d3316Smrg esac 2277a966c04fSmrg ;; 2278a966c04fSmrg esac 22796e7d3316Smrg if test -n "$tstripme" && test -n "$striplib"; then 22806e7d3316Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 22816e7d3316Smrg fi 22826e7d3316Smrg 22836e7d3316Smrg if test "$#" -gt 0; then 22846e7d3316Smrg # Delete the old symlinks, and create new ones. 22856e7d3316Smrg # Try `ln -sf' first, because the `ln' binary might depend on 22866e7d3316Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 22876e7d3316Smrg # so we also need to try rm && ln -s. 22886e7d3316Smrg for linkname 22896e7d3316Smrg do 22906e7d3316Smrg test "$linkname" != "$realname" \ 22916e7d3316Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 22926e7d3316Smrg done 22936e7d3316Smrg fi 22946e7d3316Smrg 22956e7d3316Smrg # Do each command in the postinstall commands. 22966e7d3316Smrg lib="$destdir/$realname" 22976e7d3316Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 22986e7d3316Smrg fi 22996e7d3316Smrg 23006e7d3316Smrg # Install the pseudo-library for information purposes. 23016e7d3316Smrg func_basename "$file" 23026e7d3316Smrg name="$func_basename_result" 23036e7d3316Smrg instname="$dir/$name"i 23046e7d3316Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 23056e7d3316Smrg 23066e7d3316Smrg # Maybe install the static library, too. 23076e7d3316Smrg test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" 2308a966c04fSmrg ;; 23096e7d3316Smrg 23106e7d3316Smrg *.lo) 23116e7d3316Smrg # Install (i.e. copy) a libtool object. 23126e7d3316Smrg 23136e7d3316Smrg # Figure out destination file name, if it wasn't already specified. 23146e7d3316Smrg if test -n "$destname"; then 23156e7d3316Smrg destfile="$destdir/$destname" 23166e7d3316Smrg else 23176e7d3316Smrg func_basename "$file" 23186e7d3316Smrg destfile="$func_basename_result" 23196e7d3316Smrg destfile="$destdir/$destfile" 23206e7d3316Smrg fi 23216e7d3316Smrg 23226e7d3316Smrg # Deduce the name of the destination old-style object file. 23236e7d3316Smrg case $destfile in 23246e7d3316Smrg *.lo) 23256e7d3316Smrg func_lo2o "$destfile" 23266e7d3316Smrg staticdest=$func_lo2o_result 2327a966c04fSmrg ;; 23286e7d3316Smrg *.$objext) 23296e7d3316Smrg staticdest="$destfile" 23306e7d3316Smrg destfile= 2331a966c04fSmrg ;; 23326e7d3316Smrg *) 23336e7d3316Smrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 2334a966c04fSmrg ;; 23356e7d3316Smrg esac 23366e7d3316Smrg 23376e7d3316Smrg # Install the libtool object if requested. 23386e7d3316Smrg test -n "$destfile" && \ 23396e7d3316Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 23406e7d3316Smrg 23416e7d3316Smrg # Install the old object if enabled. 23426e7d3316Smrg if test "$build_old_libs" = yes; then 23436e7d3316Smrg # Deduce the name of the old-style object file. 23446e7d3316Smrg func_lo2o "$file" 23456e7d3316Smrg staticobj=$func_lo2o_result 23466e7d3316Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 2347a966c04fSmrg fi 23486e7d3316Smrg exit $EXIT_SUCCESS 23496e7d3316Smrg ;; 2350a966c04fSmrg 23516e7d3316Smrg *) 23526e7d3316Smrg # Figure out destination file name, if it wasn't already specified. 23536e7d3316Smrg if test -n "$destname"; then 23546e7d3316Smrg destfile="$destdir/$destname" 2355a966c04fSmrg else 23566e7d3316Smrg func_basename "$file" 23576e7d3316Smrg destfile="$func_basename_result" 23586e7d3316Smrg destfile="$destdir/$destfile" 2359a966c04fSmrg fi 2360a966c04fSmrg 23616e7d3316Smrg # If the file is missing, and there is a .exe on the end, strip it 23626e7d3316Smrg # because it is most likely a libtool script we actually want to 23636e7d3316Smrg # install 23646e7d3316Smrg stripped_ext="" 23656e7d3316Smrg case $file in 23666e7d3316Smrg *.exe) 23676e7d3316Smrg if test ! -f "$file"; then 23686e7d3316Smrg func_stripname '' '.exe' "$file" 23696e7d3316Smrg file=$func_stripname_result 23706e7d3316Smrg stripped_ext=".exe" 23716e7d3316Smrg fi 23726e7d3316Smrg ;; 23736e7d3316Smrg esac 2374a966c04fSmrg 23756e7d3316Smrg # Do a test to see if this is really a libtool program. 23766e7d3316Smrg case $host in 23776e7d3316Smrg *cygwin* | *mingw*) 23786e7d3316Smrg if func_ltwrapper_executable_p "$file"; then 23796e7d3316Smrg func_ltwrapper_scriptname "$file" 23806e7d3316Smrg wrapper=$func_ltwrapper_scriptname_result 23816e7d3316Smrg else 23826e7d3316Smrg func_stripname '' '.exe' "$file" 23836e7d3316Smrg wrapper=$func_stripname_result 23846e7d3316Smrg fi 23856e7d3316Smrg ;; 23866e7d3316Smrg *) 23876e7d3316Smrg wrapper=$file 23886e7d3316Smrg ;; 23896e7d3316Smrg esac 23906e7d3316Smrg if func_ltwrapper_script_p "$wrapper"; then 23916e7d3316Smrg notinst_deplibs= 23926e7d3316Smrg relink_command= 2393a966c04fSmrg 23946e7d3316Smrg func_source "$wrapper" 2395a966c04fSmrg 23966e7d3316Smrg # Check the variables that should have been set. 23976e7d3316Smrg test -z "$generated_by_libtool_version" && \ 23986e7d3316Smrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 2399a966c04fSmrg 24006e7d3316Smrg finalize=yes 24016e7d3316Smrg for lib in $notinst_deplibs; do 24026e7d3316Smrg # Check to see that each library is installed. 24036e7d3316Smrg libdir= 24046e7d3316Smrg if test -f "$lib"; then 24056e7d3316Smrg func_source "$lib" 2406a966c04fSmrg fi 24076e7d3316Smrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 24086e7d3316Smrg if test -n "$libdir" && test ! -f "$libfile"; then 24096e7d3316Smrg func_warning "\`$lib' has not been installed in \`$libdir'" 24106e7d3316Smrg finalize=no 24116e7d3316Smrg fi 24126e7d3316Smrg done 2413a966c04fSmrg 24146e7d3316Smrg relink_command= 24156e7d3316Smrg func_source "$wrapper" 2416a966c04fSmrg 24176e7d3316Smrg outputname= 24186e7d3316Smrg if test "$fast_install" = no && test -n "$relink_command"; then 24196e7d3316Smrg $opt_dry_run || { 24206e7d3316Smrg if test "$finalize" = yes; then 24216e7d3316Smrg tmpdir=`func_mktempdir` 24226e7d3316Smrg func_basename "$file$stripped_ext" 24236e7d3316Smrg file="$func_basename_result" 24246e7d3316Smrg outputname="$tmpdir/$file" 24256e7d3316Smrg # Replace the output file specification. 24266e7d3316Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 24276e7d3316Smrg 24286e7d3316Smrg $opt_silent || { 24296e7d3316Smrg func_quote_for_expand "$relink_command" 24306e7d3316Smrg eval "func_echo $func_quote_for_expand_result" 24316e7d3316Smrg } 24326e7d3316Smrg if eval "$relink_command"; then : 24336e7d3316Smrg else 24346e7d3316Smrg func_error "error: relink \`$file' with the above command before installing it" 24356e7d3316Smrg $opt_dry_run || ${RM}r "$tmpdir" 24366e7d3316Smrg continue 24376e7d3316Smrg fi 24386e7d3316Smrg file="$outputname" 24396e7d3316Smrg else 24406e7d3316Smrg func_warning "cannot relink \`$file'" 24416e7d3316Smrg fi 24426e7d3316Smrg } 2443a966c04fSmrg else 24446e7d3316Smrg # Install the binary that we compiled earlier. 24456e7d3316Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 2446a966c04fSmrg fi 24476e7d3316Smrg fi 2448a966c04fSmrg 24496e7d3316Smrg # remove .exe since cygwin /usr/bin/install will append another 24506e7d3316Smrg # one anyway 24516e7d3316Smrg case $install_prog,$host in 24526e7d3316Smrg */usr/bin/install*,*cygwin*) 24536e7d3316Smrg case $file:$destfile in 24546e7d3316Smrg *.exe:*.exe) 24556e7d3316Smrg # this is ok 24566e7d3316Smrg ;; 24576e7d3316Smrg *.exe:*) 24586e7d3316Smrg destfile=$destfile.exe 24596e7d3316Smrg ;; 24606e7d3316Smrg *:*.exe) 24616e7d3316Smrg func_stripname '' '.exe' "$destfile" 24626e7d3316Smrg destfile=$func_stripname_result 24636e7d3316Smrg ;; 24646e7d3316Smrg esac 2465a966c04fSmrg ;; 2466a966c04fSmrg esac 24676e7d3316Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 24686e7d3316Smrg $opt_dry_run || if test -n "$outputname"; then 24696e7d3316Smrg ${RM}r "$tmpdir" 24706e7d3316Smrg fi 24716e7d3316Smrg ;; 24726e7d3316Smrg esac 24736e7d3316Smrg done 2474a966c04fSmrg 24756e7d3316Smrg for file in $staticlibs; do 24766e7d3316Smrg func_basename "$file" 24776e7d3316Smrg name="$func_basename_result" 24786e7d3316Smrg 24796e7d3316Smrg # Set up the ranlib parameters. 24806e7d3316Smrg oldlib="$destdir/$name" 24816e7d3316Smrg 24826e7d3316Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 24836e7d3316Smrg 24846e7d3316Smrg if test -n "$stripme" && test -n "$old_striplib"; then 24856e7d3316Smrg func_show_eval "$old_striplib $oldlib" 'exit $?' 24866e7d3316Smrg fi 24876e7d3316Smrg 24886e7d3316Smrg # Do each command in the postinstall commands. 24896e7d3316Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 24906e7d3316Smrg done 24916e7d3316Smrg 24926e7d3316Smrg test -n "$future_libdirs" && \ 24936e7d3316Smrg func_warning "remember to run \`$progname --finish$future_libdirs'" 24946e7d3316Smrg 24956e7d3316Smrg if test -n "$current_libdirs"; then 24966e7d3316Smrg # Maybe just do a dry run. 24976e7d3316Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 24986e7d3316Smrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 24996e7d3316Smrg else 25006e7d3316Smrg exit $EXIT_SUCCESS 25016e7d3316Smrg fi 25026e7d3316Smrg} 25036e7d3316Smrg 25046e7d3316Smrgtest "$mode" = install && func_mode_install ${1+"$@"} 25056e7d3316Smrg 25066e7d3316Smrg 25076e7d3316Smrg# func_generate_dlsyms outputname originator pic_p 25086e7d3316Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 25096e7d3316Smrg# a dlpreopen symbol table. 25106e7d3316Smrgfunc_generate_dlsyms () 25116e7d3316Smrg{ 25126e7d3316Smrg $opt_debug 25136e7d3316Smrg my_outputname="$1" 25146e7d3316Smrg my_originator="$2" 25156e7d3316Smrg my_pic_p="${3-no}" 25166e7d3316Smrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 25176e7d3316Smrg my_dlsyms= 25186e7d3316Smrg 25196e7d3316Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 25206e7d3316Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 25216e7d3316Smrg my_dlsyms="${my_outputname}S.c" 25226e7d3316Smrg else 25236e7d3316Smrg func_error "not configured to extract global symbols from dlpreopened files" 25246e7d3316Smrg fi 25256e7d3316Smrg fi 25266e7d3316Smrg 25276e7d3316Smrg if test -n "$my_dlsyms"; then 25286e7d3316Smrg case $my_dlsyms in 25296e7d3316Smrg "") ;; 25306e7d3316Smrg *.c) 25316e7d3316Smrg # Discover the nlist of each of the dlfiles. 25326e7d3316Smrg nlist="$output_objdir/${my_outputname}.nm" 25336e7d3316Smrg 25346e7d3316Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 25356e7d3316Smrg 25366e7d3316Smrg # Parse the name list into a source file. 25376e7d3316Smrg func_verbose "creating $output_objdir/$my_dlsyms" 25386e7d3316Smrg 25396e7d3316Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 25406e7d3316Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 25416e7d3316Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 25426e7d3316Smrg 25436e7d3316Smrg#ifdef __cplusplus 25446e7d3316Smrgextern \"C\" { 25456e7d3316Smrg#endif 25466e7d3316Smrg 25476e7d3316Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 25486e7d3316Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 25496e7d3316Smrg#endif 25506e7d3316Smrg 25516e7d3316Smrg/* External symbol declarations for the compiler. */\ 25526e7d3316Smrg" 25536e7d3316Smrg 25546e7d3316Smrg if test "$dlself" = yes; then 25556e7d3316Smrg func_verbose "generating symbol list for \`$output'" 25566e7d3316Smrg 25576e7d3316Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 25586e7d3316Smrg 25596e7d3316Smrg # Add our own program objects to the symbol list. 25606e7d3316Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 25616e7d3316Smrg for progfile in $progfiles; do 25626e7d3316Smrg func_verbose "extracting global C symbols from \`$progfile'" 25636e7d3316Smrg $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" 25646e7d3316Smrg done 25656e7d3316Smrg 25666e7d3316Smrg if test -n "$exclude_expsyms"; then 25676e7d3316Smrg $opt_dry_run || { 25686e7d3316Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 25696e7d3316Smrg eval '$MV "$nlist"T "$nlist"' 25706e7d3316Smrg } 2571a966c04fSmrg fi 25726e7d3316Smrg 25736e7d3316Smrg if test -n "$export_symbols_regex"; then 25746e7d3316Smrg $opt_dry_run || { 25756e7d3316Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 25766e7d3316Smrg eval '$MV "$nlist"T "$nlist"' 25776e7d3316Smrg } 25786e7d3316Smrg fi 25796e7d3316Smrg 25806e7d3316Smrg # Prepare the list of exported symbols 25816e7d3316Smrg if test -z "$export_symbols"; then 25826e7d3316Smrg export_symbols="$output_objdir/$outputname.exp" 25836e7d3316Smrg $opt_dry_run || { 25846e7d3316Smrg $RM $export_symbols 25856e7d3316Smrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 25866e7d3316Smrg case $host in 25876e7d3316Smrg *cygwin* | *mingw* | *cegcc* ) 25886e7d3316Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 25896e7d3316Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 25906e7d3316Smrg ;; 25916e7d3316Smrg esac 25926e7d3316Smrg } 2593a966c04fSmrg else 25946e7d3316Smrg $opt_dry_run || { 25956e7d3316Smrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 25966e7d3316Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 25976e7d3316Smrg eval '$MV "$nlist"T "$nlist"' 25986e7d3316Smrg case $host in 25996e7d3316Smrg *cygwin* | *mingw* | *cegcc* ) 26006e7d3316Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 26016e7d3316Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 26026e7d3316Smrg ;; 26036e7d3316Smrg esac 26046e7d3316Smrg } 2605a966c04fSmrg fi 26066e7d3316Smrg fi 2607a966c04fSmrg 26086e7d3316Smrg for dlprefile in $dlprefiles; do 26096e7d3316Smrg func_verbose "extracting global C symbols from \`$dlprefile'" 26106e7d3316Smrg func_basename "$dlprefile" 26116e7d3316Smrg name="$func_basename_result" 26126e7d3316Smrg $opt_dry_run || { 26136e7d3316Smrg eval '$ECHO ": $name " >> "$nlist"' 26146e7d3316Smrg eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" 26156e7d3316Smrg } 26166e7d3316Smrg done 26176e7d3316Smrg 26186e7d3316Smrg $opt_dry_run || { 26196e7d3316Smrg # Make sure we have at least an empty file. 26206e7d3316Smrg test -f "$nlist" || : > "$nlist" 26216e7d3316Smrg 26226e7d3316Smrg if test -n "$exclude_expsyms"; then 26236e7d3316Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 26246e7d3316Smrg $MV "$nlist"T "$nlist" 2625a966c04fSmrg fi 26266e7d3316Smrg 26276e7d3316Smrg # Try sorting and uniquifying the output. 26286e7d3316Smrg if $GREP -v "^: " < "$nlist" | 26296e7d3316Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 26306e7d3316Smrg sort -k 3 26316e7d3316Smrg else 26326e7d3316Smrg sort +2 26336e7d3316Smrg fi | 26346e7d3316Smrg uniq > "$nlist"S; then 26356e7d3316Smrg : 2636a966c04fSmrg else 26376e7d3316Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 2638a966c04fSmrg fi 2639a966c04fSmrg 26406e7d3316Smrg if test -f "$nlist"S; then 26416e7d3316Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 2642a966c04fSmrg else 26436e7d3316Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 2644a966c04fSmrg fi 2645a966c04fSmrg 26466e7d3316Smrg echo >> "$output_objdir/$my_dlsyms" "\ 2647a966c04fSmrg 26486e7d3316Smrg/* The mapping between symbol names and symbols. */ 26496e7d3316Smrgtypedef struct { 26506e7d3316Smrg const char *name; 26516e7d3316Smrg void *address; 26526e7d3316Smrg} lt_dlsymlist; 26536e7d3316Smrg" 26546e7d3316Smrg case $host in 26556e7d3316Smrg *cygwin* | *mingw* | *cegcc* ) 26566e7d3316Smrg echo >> "$output_objdir/$my_dlsyms" "\ 26576e7d3316Smrg/* DATA imports from DLLs on WIN32 con't be const, because 26586e7d3316Smrg runtime relocations are performed -- see ld's documentation 26596e7d3316Smrg on pseudo-relocs. */" 26606e7d3316Smrg lt_dlsym_const= ;; 26616e7d3316Smrg *osf5*) 26626e7d3316Smrg echo >> "$output_objdir/$my_dlsyms" "\ 26636e7d3316Smrg/* This system does not cope well with relocations in const data */" 26646e7d3316Smrg lt_dlsym_const= ;; 26656e7d3316Smrg *) 26666e7d3316Smrg lt_dlsym_const=const ;; 26676e7d3316Smrg esac 2668a966c04fSmrg 26696e7d3316Smrg echo >> "$output_objdir/$my_dlsyms" "\ 26706e7d3316Smrgextern $lt_dlsym_const lt_dlsymlist 26716e7d3316Smrglt_${my_prefix}_LTX_preloaded_symbols[]; 26726e7d3316Smrg$lt_dlsym_const lt_dlsymlist 26736e7d3316Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 26746e7d3316Smrg{\ 26756e7d3316Smrg { \"$my_originator\", (void *) 0 }," 2676a966c04fSmrg 26776e7d3316Smrg case $need_lib_prefix in 26786e7d3316Smrg no) 26796e7d3316Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 26806e7d3316Smrg ;; 26816e7d3316Smrg *) 26826e7d3316Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 26836e7d3316Smrg ;; 26846e7d3316Smrg esac 26856e7d3316Smrg echo >> "$output_objdir/$my_dlsyms" "\ 26866e7d3316Smrg {0, (void *) 0} 26876e7d3316Smrg}; 2688a966c04fSmrg 26896e7d3316Smrg/* This works around a problem in FreeBSD linker */ 26906e7d3316Smrg#ifdef FREEBSD_WORKAROUND 26916e7d3316Smrgstatic const void *lt_preloaded_setup() { 26926e7d3316Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 26936e7d3316Smrg} 26946e7d3316Smrg#endif 2695a966c04fSmrg 26966e7d3316Smrg#ifdef __cplusplus 26976e7d3316Smrg} 26986e7d3316Smrg#endif\ 26996e7d3316Smrg" 27006e7d3316Smrg } # !$opt_dry_run 2701a966c04fSmrg 27026e7d3316Smrg pic_flag_for_symtable= 27036e7d3316Smrg case "$compile_command " in 27046e7d3316Smrg *" -static "*) ;; 27056e7d3316Smrg *) 27066e7d3316Smrg case $host in 27076e7d3316Smrg # compiling the symbol table file with pic_flag works around 27086e7d3316Smrg # a FreeBSD bug that causes programs to crash when -lm is 27096e7d3316Smrg # linked before any other PIC object. But we must not use 27106e7d3316Smrg # pic_flag when linking with -static. The problem exists in 27116e7d3316Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 27126e7d3316Smrg *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 27136e7d3316Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 27146e7d3316Smrg *-*-hpux*) 27156e7d3316Smrg pic_flag_for_symtable=" $pic_flag" ;; 27166e7d3316Smrg *) 27176e7d3316Smrg if test "X$my_pic_p" != Xno; then 27186e7d3316Smrg pic_flag_for_symtable=" $pic_flag" 27196e7d3316Smrg fi 27206e7d3316Smrg ;; 27216e7d3316Smrg esac 27226e7d3316Smrg ;; 27236e7d3316Smrg esac 27246e7d3316Smrg symtab_cflags= 27256e7d3316Smrg for arg in $LTCFLAGS; do 27266e7d3316Smrg case $arg in 27276e7d3316Smrg -pie | -fpie | -fPIE) ;; 27286e7d3316Smrg *) symtab_cflags="$symtab_cflags $arg" ;; 27296e7d3316Smrg esac 27306e7d3316Smrg done 2731a966c04fSmrg 27326e7d3316Smrg # Now compile the dynamic symbol file. 27336e7d3316Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 2734a966c04fSmrg 27356e7d3316Smrg # Clean up the generated files. 27366e7d3316Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 2737a966c04fSmrg 27386e7d3316Smrg # Transform the symbol file into the correct name. 27396e7d3316Smrg symfileobj="$output_objdir/${my_outputname}S.$objext" 27406e7d3316Smrg case $host in 27416e7d3316Smrg *cygwin* | *mingw* | *cegcc* ) 27426e7d3316Smrg if test -f "$output_objdir/$my_outputname.def"; then 27436e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 27446e7d3316Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 27456e7d3316Smrg else 27466e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 27476e7d3316Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 27486e7d3316Smrg fi 27496e7d3316Smrg ;; 27506e7d3316Smrg *) 27516e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 27526e7d3316Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 27536e7d3316Smrg ;; 27546e7d3316Smrg esac 27556e7d3316Smrg ;; 27566e7d3316Smrg *) 27576e7d3316Smrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 27586e7d3316Smrg ;; 27596e7d3316Smrg esac 27606e7d3316Smrg else 27616e7d3316Smrg # We keep going just in case the user didn't refer to 27626e7d3316Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 27636e7d3316Smrg # really was required. 2764a966c04fSmrg 27656e7d3316Smrg # Nullify the symbol file. 27666e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 27676e7d3316Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 27686e7d3316Smrg fi 27696e7d3316Smrg} 2770a966c04fSmrg 27716e7d3316Smrg# func_win32_libid arg 27726e7d3316Smrg# return the library type of file 'arg' 27736e7d3316Smrg# 27746e7d3316Smrg# Need a lot of goo to handle *both* DLLs and import libs 27756e7d3316Smrg# Has to be a shell function in order to 'eat' the argument 27766e7d3316Smrg# that is supplied when $file_magic_command is called. 27776e7d3316Smrg# Despite the name, also deal with 64 bit binaries. 27786e7d3316Smrgfunc_win32_libid () 27796e7d3316Smrg{ 27806e7d3316Smrg $opt_debug 27816e7d3316Smrg win32_libid_type="unknown" 27826e7d3316Smrg win32_fileres=`file -L $1 2>/dev/null` 27836e7d3316Smrg case $win32_fileres in 27846e7d3316Smrg *ar\ archive\ import\ library*) # definitely import 27856e7d3316Smrg win32_libid_type="x86 archive import" 27866e7d3316Smrg ;; 27876e7d3316Smrg *ar\ archive*) # could be an import, or static 27886e7d3316Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 27896e7d3316Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 27906e7d3316Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 27916e7d3316Smrg win32_nmres=`eval $NM -f posix -A $1 | 27926e7d3316Smrg $SED -n -e ' 27936e7d3316Smrg 1,100{ 27946e7d3316Smrg / I /{ 27956e7d3316Smrg s,.*,import, 27966e7d3316Smrg p 27976e7d3316Smrg q 27986e7d3316Smrg } 27996e7d3316Smrg }'` 28006e7d3316Smrg case $win32_nmres in 28016e7d3316Smrg import*) win32_libid_type="x86 archive import";; 28026e7d3316Smrg *) win32_libid_type="x86 archive static";; 28036e7d3316Smrg esac 28046e7d3316Smrg fi 28056e7d3316Smrg ;; 28066e7d3316Smrg *DLL*) 28076e7d3316Smrg win32_libid_type="x86 DLL" 28086e7d3316Smrg ;; 28096e7d3316Smrg *executable*) # but shell scripts are "executable" too... 28106e7d3316Smrg case $win32_fileres in 28116e7d3316Smrg *MS\ Windows\ PE\ Intel*) 28126e7d3316Smrg win32_libid_type="x86 DLL" 28136e7d3316Smrg ;; 28146e7d3316Smrg esac 28156e7d3316Smrg ;; 28166e7d3316Smrg esac 28176e7d3316Smrg $ECHO "$win32_libid_type" 28186e7d3316Smrg} 2819a966c04fSmrg 2820a966c04fSmrg 2821a966c04fSmrg 28226e7d3316Smrg# func_extract_an_archive dir oldlib 28236e7d3316Smrgfunc_extract_an_archive () 28246e7d3316Smrg{ 28256e7d3316Smrg $opt_debug 28266e7d3316Smrg f_ex_an_ar_dir="$1"; shift 28276e7d3316Smrg f_ex_an_ar_oldlib="$1" 28286e7d3316Smrg if test "$lock_old_archive_extraction" = yes; then 28296e7d3316Smrg lockfile=$f_ex_an_ar_oldlib.lock 28306e7d3316Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 28316e7d3316Smrg func_echo "Waiting for $lockfile to be removed" 28326e7d3316Smrg sleep 2 28336e7d3316Smrg done 28346e7d3316Smrg fi 28356e7d3316Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 28366e7d3316Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 28376e7d3316Smrg if test "$lock_old_archive_extraction" = yes; then 28386e7d3316Smrg $opt_dry_run || rm -f "$lockfile" 28396e7d3316Smrg fi 28406e7d3316Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 28416e7d3316Smrg : 28426e7d3316Smrg else 28436e7d3316Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 28446e7d3316Smrg fi 28456e7d3316Smrg} 2846a966c04fSmrg 2847a966c04fSmrg 28486e7d3316Smrg# func_extract_archives gentop oldlib ... 28496e7d3316Smrgfunc_extract_archives () 28506e7d3316Smrg{ 28516e7d3316Smrg $opt_debug 28526e7d3316Smrg my_gentop="$1"; shift 28536e7d3316Smrg my_oldlibs=${1+"$@"} 28546e7d3316Smrg my_oldobjs="" 28556e7d3316Smrg my_xlib="" 28566e7d3316Smrg my_xabs="" 28576e7d3316Smrg my_xdir="" 2858a966c04fSmrg 28596e7d3316Smrg for my_xlib in $my_oldlibs; do 28606e7d3316Smrg # Extract the objects. 28616e7d3316Smrg case $my_xlib in 28626e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 28636e7d3316Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 28646e7d3316Smrg esac 28656e7d3316Smrg func_basename "$my_xlib" 28666e7d3316Smrg my_xlib="$func_basename_result" 28676e7d3316Smrg my_xlib_u=$my_xlib 28686e7d3316Smrg while :; do 28696e7d3316Smrg case " $extracted_archives " in 28706e7d3316Smrg *" $my_xlib_u "*) 28716e7d3316Smrg func_arith $extracted_serial + 1 28726e7d3316Smrg extracted_serial=$func_arith_result 28736e7d3316Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 28746e7d3316Smrg *) break ;; 28756e7d3316Smrg esac 28766e7d3316Smrg done 28776e7d3316Smrg extracted_archives="$extracted_archives $my_xlib_u" 28786e7d3316Smrg my_xdir="$my_gentop/$my_xlib_u" 2879a966c04fSmrg 28806e7d3316Smrg func_mkdir_p "$my_xdir" 28816e7d3316Smrg 28826e7d3316Smrg case $host in 28836e7d3316Smrg *-darwin*) 28846e7d3316Smrg func_verbose "Extracting $my_xabs" 28856e7d3316Smrg # Do not bother doing anything if just a dry run 28866e7d3316Smrg $opt_dry_run || { 28876e7d3316Smrg darwin_orig_dir=`pwd` 28886e7d3316Smrg cd $my_xdir || exit $? 28896e7d3316Smrg darwin_archive=$my_xabs 28906e7d3316Smrg darwin_curdir=`pwd` 28916e7d3316Smrg darwin_base_archive=`basename "$darwin_archive"` 28926e7d3316Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 28936e7d3316Smrg if test -n "$darwin_arches"; then 28946e7d3316Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 28956e7d3316Smrg darwin_arch= 28966e7d3316Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 28976e7d3316Smrg for darwin_arch in $darwin_arches ; do 28986e7d3316Smrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 28996e7d3316Smrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 29006e7d3316Smrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 29016e7d3316Smrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 29026e7d3316Smrg cd "$darwin_curdir" 29036e7d3316Smrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 29046e7d3316Smrg done # $darwin_arches 29056e7d3316Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 29066e7d3316Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 29076e7d3316Smrg darwin_file= 29086e7d3316Smrg darwin_files= 29096e7d3316Smrg for darwin_file in $darwin_filelist; do 29106e7d3316Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 29116e7d3316Smrg $LIPO -create -output "$darwin_file" $darwin_files 29126e7d3316Smrg done # $darwin_filelist 29136e7d3316Smrg $RM -rf unfat-$$ 29146e7d3316Smrg cd "$darwin_orig_dir" 2915a966c04fSmrg else 29166e7d3316Smrg cd $darwin_orig_dir 29176e7d3316Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 29186e7d3316Smrg fi # $darwin_arches 29196e7d3316Smrg } # !$opt_dry_run 29206e7d3316Smrg ;; 29216e7d3316Smrg *) 29226e7d3316Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 29236e7d3316Smrg ;; 29246e7d3316Smrg esac 29256e7d3316Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 29266e7d3316Smrg done 2927a966c04fSmrg 29286e7d3316Smrg func_extract_archives_result="$my_oldobjs" 29296e7d3316Smrg} 2930a966c04fSmrg 2931a966c04fSmrg 29326e7d3316Smrg# func_emit_wrapper [arg=no] 29336e7d3316Smrg# 29346e7d3316Smrg# Emit a libtool wrapper script on stdout. 29356e7d3316Smrg# Don't directly open a file because we may want to 29366e7d3316Smrg# incorporate the script contents within a cygwin/mingw 29376e7d3316Smrg# wrapper executable. Must ONLY be called from within 29386e7d3316Smrg# func_mode_link because it depends on a number of variables 29396e7d3316Smrg# set therein. 29406e7d3316Smrg# 29416e7d3316Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 29426e7d3316Smrg# variable will take. If 'yes', then the emitted script 29436e7d3316Smrg# will assume that the directory in which it is stored is 29446e7d3316Smrg# the $objdir directory. This is a cygwin/mingw-specific 29456e7d3316Smrg# behavior. 29466e7d3316Smrgfunc_emit_wrapper () 29476e7d3316Smrg{ 29486e7d3316Smrg func_emit_wrapper_arg1=${1-no} 2949a966c04fSmrg 29506e7d3316Smrg $ECHO "\ 29516e7d3316Smrg#! $SHELL 2952a966c04fSmrg 29536e7d3316Smrg# $output - temporary wrapper script for $objdir/$outputname 29546e7d3316Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 29556e7d3316Smrg# 29566e7d3316Smrg# The $output program cannot be directly executed until all the libtool 29576e7d3316Smrg# libraries that it depends on are installed. 29586e7d3316Smrg# 29596e7d3316Smrg# This wrapper script should never be moved out of the build directory. 29606e7d3316Smrg# If it is, it will not operate correctly. 2961a966c04fSmrg 29626e7d3316Smrg# Sed substitution that helps us do robust quoting. It backslashifies 29636e7d3316Smrg# metacharacters that are still active within double-quoted strings. 29646e7d3316Smrgsed_quote_subst='$sed_quote_subst' 2965a966c04fSmrg 29666e7d3316Smrg# Be Bourne compatible 29676e7d3316Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 29686e7d3316Smrg emulate sh 29696e7d3316Smrg NULLCMD=: 29706e7d3316Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 29716e7d3316Smrg # is contrary to our usage. Disable this feature. 29726e7d3316Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 29736e7d3316Smrg setopt NO_GLOB_SUBST 29746e7d3316Smrgelse 29756e7d3316Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 29766e7d3316Smrgfi 29776e7d3316SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 29786e7d3316SmrgDUALCASE=1; export DUALCASE # for MKS sh 2979a966c04fSmrg 29806e7d3316Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 29816e7d3316Smrg# if CDPATH is set. 29826e7d3316Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 2983a966c04fSmrg 29846e7d3316Smrgrelink_command=\"$relink_command\" 2985a966c04fSmrg 29866e7d3316Smrg# This environment variable determines our operation mode. 29876e7d3316Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 29886e7d3316Smrg # install mode needs the following variables: 29896e7d3316Smrg generated_by_libtool_version='$macro_version' 29906e7d3316Smrg notinst_deplibs='$notinst_deplibs' 29916e7d3316Smrgelse 29926e7d3316Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 29936e7d3316Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 29946e7d3316Smrg file=\"\$0\"" 2995a966c04fSmrg 29966e7d3316Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 29976e7d3316Smrg $ECHO "\ 2998a966c04fSmrg 29996e7d3316Smrg# A function that is used when there is no print builtin or printf. 30006e7d3316Smrgfunc_fallback_echo () 30016e7d3316Smrg{ 30026e7d3316Smrg eval 'cat <<_LTECHO_EOF 30036e7d3316Smrg\$1 30046e7d3316Smrg_LTECHO_EOF' 30056e7d3316Smrg} 30066e7d3316Smrg ECHO=\"$qECHO\" 30076e7d3316Smrg fi 30086e7d3316Smrg 30096e7d3316Smrg# Very basic option parsing. These options are (a) specific to 30106e7d3316Smrg# the libtool wrapper, (b) are identical between the wrapper 30116e7d3316Smrg# /script/ and the wrapper /executable/ which is used only on 30126e7d3316Smrg# windows platforms, and (c) all begin with the string "--lt-" 30136e7d3316Smrg# (application programs are unlikely to have options which match 30146e7d3316Smrg# this pattern). 30156e7d3316Smrg# 30166e7d3316Smrg# There are only two supported options: --lt-debug and 30176e7d3316Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 30186e7d3316Smrg# 30196e7d3316Smrg# The first argument to this parsing function should be the 30206e7d3316Smrg# script's $0 value, followed by "$@". 30216e7d3316Smrglt_option_debug= 30226e7d3316Smrgfunc_parse_lt_options () 30236e7d3316Smrg{ 30246e7d3316Smrg lt_script_arg0=\$0 30256e7d3316Smrg shift 30266e7d3316Smrg for lt_opt 30276e7d3316Smrg do 30286e7d3316Smrg case \"\$lt_opt\" in 30296e7d3316Smrg --lt-debug) lt_option_debug=1 ;; 30306e7d3316Smrg --lt-dump-script) 30316e7d3316Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 30326e7d3316Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 30336e7d3316Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 30346e7d3316Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 30356e7d3316Smrg exit 0 30366e7d3316Smrg ;; 30376e7d3316Smrg --lt-*) 30386e7d3316Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 30396e7d3316Smrg exit 1 3040a966c04fSmrg ;; 30416e7d3316Smrg esac 30426e7d3316Smrg done 3043a966c04fSmrg 30446e7d3316Smrg # Print the debug banner immediately: 30456e7d3316Smrg if test -n \"\$lt_option_debug\"; then 30466e7d3316Smrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 30476e7d3316Smrg fi 30486e7d3316Smrg} 3049a966c04fSmrg 30506e7d3316Smrg# Used when --lt-debug. Prints its arguments to stdout 30516e7d3316Smrg# (redirection is the responsibility of the caller) 30526e7d3316Smrgfunc_lt_dump_args () 30536e7d3316Smrg{ 30546e7d3316Smrg lt_dump_args_N=1; 30556e7d3316Smrg for lt_arg 30566e7d3316Smrg do 30576e7d3316Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 30586e7d3316Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 30596e7d3316Smrg done 30606e7d3316Smrg} 3061a966c04fSmrg 30626e7d3316Smrg# Core function for launching the target application 30636e7d3316Smrgfunc_exec_program_core () 30646e7d3316Smrg{ 30656e7d3316Smrg" 30666e7d3316Smrg case $host in 30676e7d3316Smrg # Backslashes separate directories on plain windows 30686e7d3316Smrg *-*-mingw | *-*-os2* | *-cegcc*) 30696e7d3316Smrg $ECHO "\ 30706e7d3316Smrg if test -n \"\$lt_option_debug\"; then 30716e7d3316Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 30726e7d3316Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3073a966c04fSmrg fi 30746e7d3316Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 30756e7d3316Smrg" 30766e7d3316Smrg ;; 3077a966c04fSmrg 30786e7d3316Smrg *) 30796e7d3316Smrg $ECHO "\ 30806e7d3316Smrg if test -n \"\$lt_option_debug\"; then 30816e7d3316Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 30826e7d3316Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3083a966c04fSmrg fi 30846e7d3316Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 30856e7d3316Smrg" 30866e7d3316Smrg ;; 30876e7d3316Smrg esac 30886e7d3316Smrg $ECHO "\ 30896e7d3316Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 30906e7d3316Smrg exit 1 30916e7d3316Smrg} 3092a966c04fSmrg 30936e7d3316Smrg# A function to encapsulate launching the target application 30946e7d3316Smrg# Strips options in the --lt-* namespace from \$@ and 30956e7d3316Smrg# launches target application with the remaining arguments. 30966e7d3316Smrgfunc_exec_program () 30976e7d3316Smrg{ 30986e7d3316Smrg for lt_wr_arg 30996e7d3316Smrg do 31006e7d3316Smrg case \$lt_wr_arg in 31016e7d3316Smrg --lt-*) ;; 31026e7d3316Smrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 31036e7d3316Smrg esac 31046e7d3316Smrg shift 31056e7d3316Smrg done 31066e7d3316Smrg func_exec_program_core \${1+\"\$@\"} 31076e7d3316Smrg} 3108a966c04fSmrg 31096e7d3316Smrg # Parse options 31106e7d3316Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 3111a966c04fSmrg 31126e7d3316Smrg # Find the directory that this script lives in. 31136e7d3316Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 31146e7d3316Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 3115a966c04fSmrg 31166e7d3316Smrg # Follow symbolic links until we get to the real thisdir. 31176e7d3316Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 31186e7d3316Smrg while test -n \"\$file\"; do 31196e7d3316Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 3120a966c04fSmrg 31216e7d3316Smrg # If there was a directory component, then change thisdir. 31226e7d3316Smrg if test \"x\$destdir\" != \"x\$file\"; then 31236e7d3316Smrg case \"\$destdir\" in 31246e7d3316Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 31256e7d3316Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 31266e7d3316Smrg esac 31276e7d3316Smrg fi 3128a966c04fSmrg 31296e7d3316Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 31306e7d3316Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 31316e7d3316Smrg done 3132a966c04fSmrg 31336e7d3316Smrg # Usually 'no', except on cygwin/mingw when embedded into 31346e7d3316Smrg # the cwrapper. 31356e7d3316Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 31366e7d3316Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 31376e7d3316Smrg # special case for '.' 31386e7d3316Smrg if test \"\$thisdir\" = \".\"; then 31396e7d3316Smrg thisdir=\`pwd\` 31406e7d3316Smrg fi 31416e7d3316Smrg # remove .libs from thisdir 31426e7d3316Smrg case \"\$thisdir\" in 31436e7d3316Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 31446e7d3316Smrg $objdir ) thisdir=. ;; 31456e7d3316Smrg esac 31466e7d3316Smrg fi 3147a966c04fSmrg 31486e7d3316Smrg # Try to get the absolute directory name. 31496e7d3316Smrg absdir=\`cd \"\$thisdir\" && pwd\` 31506e7d3316Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 31516e7d3316Smrg" 3152a966c04fSmrg 31536e7d3316Smrg if test "$fast_install" = yes; then 31546e7d3316Smrg $ECHO "\ 31556e7d3316Smrg program=lt-'$outputname'$exeext 31566e7d3316Smrg progdir=\"\$thisdir/$objdir\" 3157a966c04fSmrg 31586e7d3316Smrg if test ! -f \"\$progdir/\$program\" || 31596e7d3316Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 31606e7d3316Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 3161a966c04fSmrg 31626e7d3316Smrg file=\"\$\$-\$program\" 3163a966c04fSmrg 31646e7d3316Smrg if test ! -d \"\$progdir\"; then 31656e7d3316Smrg $MKDIR \"\$progdir\" 31666e7d3316Smrg else 31676e7d3316Smrg $RM \"\$progdir/\$file\" 31686e7d3316Smrg fi" 3169a966c04fSmrg 31706e7d3316Smrg $ECHO "\ 3171a966c04fSmrg 31726e7d3316Smrg # relink executable if necessary 31736e7d3316Smrg if test -n \"\$relink_command\"; then 31746e7d3316Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 31756e7d3316Smrg else 31766e7d3316Smrg $ECHO \"\$relink_command_output\" >&2 31776e7d3316Smrg $RM \"\$progdir/\$file\" 31786e7d3316Smrg exit 1 31796e7d3316Smrg fi 31806e7d3316Smrg fi 3181a966c04fSmrg 31826e7d3316Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 31836e7d3316Smrg { $RM \"\$progdir/\$program\"; 31846e7d3316Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 31856e7d3316Smrg $RM \"\$progdir/\$file\" 31866e7d3316Smrg fi" 31876e7d3316Smrg else 31886e7d3316Smrg $ECHO "\ 31896e7d3316Smrg program='$outputname' 31906e7d3316Smrg progdir=\"\$thisdir/$objdir\" 31916e7d3316Smrg" 31926e7d3316Smrg fi 3193a966c04fSmrg 31946e7d3316Smrg $ECHO "\ 3195a966c04fSmrg 31966e7d3316Smrg if test -f \"\$progdir/\$program\"; then" 3197a966c04fSmrg 31986e7d3316Smrg # Export our shlibpath_var if we have one. 31996e7d3316Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 32006e7d3316Smrg $ECHO "\ 32016e7d3316Smrg # Add our own library path to $shlibpath_var 32026e7d3316Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 3203a966c04fSmrg 32046e7d3316Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 32056e7d3316Smrg # The second colon is a workaround for a bug in BeOS R4 sed 32066e7d3316Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 3207a966c04fSmrg 32086e7d3316Smrg export $shlibpath_var 32096e7d3316Smrg" 32106e7d3316Smrg fi 3211a966c04fSmrg 32126e7d3316Smrg # fixup the dll searchpath if we need to. 32136e7d3316Smrg if test -n "$dllsearchpath"; then 32146e7d3316Smrg $ECHO "\ 32156e7d3316Smrg # Add the dll search path components to the executable PATH 32166e7d3316Smrg PATH=$dllsearchpath:\$PATH 32176e7d3316Smrg" 32186e7d3316Smrg fi 3219a966c04fSmrg 32206e7d3316Smrg $ECHO "\ 32216e7d3316Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 32226e7d3316Smrg # Run the actual program with our arguments. 32236e7d3316Smrg func_exec_program \${1+\"\$@\"} 32246e7d3316Smrg fi 32256e7d3316Smrg else 32266e7d3316Smrg # The program doesn't exist. 32276e7d3316Smrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 32286e7d3316Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 32296e7d3316Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 32306e7d3316Smrg exit 1 32316e7d3316Smrg fi 32326e7d3316Smrgfi\ 32336e7d3316Smrg" 32346e7d3316Smrg} 3235a966c04fSmrg 3236a966c04fSmrg 32376e7d3316Smrg# func_to_host_path arg 32386e7d3316Smrg# 32396e7d3316Smrg# Convert paths to host format when used with build tools. 32406e7d3316Smrg# Intended for use with "native" mingw (where libtool itself 32416e7d3316Smrg# is running under the msys shell), or in the following cross- 32426e7d3316Smrg# build environments: 32436e7d3316Smrg# $build $host 32446e7d3316Smrg# mingw (msys) mingw [e.g. native] 32456e7d3316Smrg# cygwin mingw 32466e7d3316Smrg# *nix + wine mingw 32476e7d3316Smrg# where wine is equipped with the `winepath' executable. 32486e7d3316Smrg# In the native mingw case, the (msys) shell automatically 32496e7d3316Smrg# converts paths for any non-msys applications it launches, 32506e7d3316Smrg# but that facility isn't available from inside the cwrapper. 32516e7d3316Smrg# Similar accommodations are necessary for $host mingw and 32526e7d3316Smrg# $build cygwin. Calling this function does no harm for other 32536e7d3316Smrg# $host/$build combinations not listed above. 32546e7d3316Smrg# 32556e7d3316Smrg# ARG is the path (on $build) that should be converted to 32566e7d3316Smrg# the proper representation for $host. The result is stored 32576e7d3316Smrg# in $func_to_host_path_result. 32586e7d3316Smrgfunc_to_host_path () 32596e7d3316Smrg{ 32606e7d3316Smrg func_to_host_path_result="$1" 32616e7d3316Smrg if test -n "$1"; then 32626e7d3316Smrg case $host in 32636e7d3316Smrg *mingw* ) 32646e7d3316Smrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 32656e7d3316Smrg case $build in 32666e7d3316Smrg *mingw* ) # actually, msys 32676e7d3316Smrg # awkward: cmd appends spaces to result 32686e7d3316Smrg func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null | 32696e7d3316Smrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 32706e7d3316Smrg ;; 32716e7d3316Smrg *cygwin* ) 32726e7d3316Smrg func_to_host_path_result=`cygpath -w "$1" | 32736e7d3316Smrg $SED -e "$lt_sed_naive_backslashify"` 32746e7d3316Smrg ;; 32756e7d3316Smrg * ) 32766e7d3316Smrg # Unfortunately, winepath does not exit with a non-zero 32776e7d3316Smrg # error code, so we are forced to check the contents of 32786e7d3316Smrg # stdout. On the other hand, if the command is not 32796e7d3316Smrg # found, the shell will set an exit code of 127 and print 32806e7d3316Smrg # *an error message* to stdout. So we must check for both 32816e7d3316Smrg # error code of zero AND non-empty stdout, which explains 32826e7d3316Smrg # the odd construction: 32836e7d3316Smrg func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` 32846e7d3316Smrg if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then 32856e7d3316Smrg func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" | 32866e7d3316Smrg $SED -e "$lt_sed_naive_backslashify"` 32876e7d3316Smrg else 32886e7d3316Smrg # Allow warning below. 32896e7d3316Smrg func_to_host_path_result= 32906e7d3316Smrg fi 32916e7d3316Smrg ;; 32926e7d3316Smrg esac 32936e7d3316Smrg if test -z "$func_to_host_path_result" ; then 32946e7d3316Smrg func_error "Could not determine host path corresponding to" 32956e7d3316Smrg func_error " \`$1'" 32966e7d3316Smrg func_error "Continuing, but uninstalled executables may not work." 32976e7d3316Smrg # Fallback: 32986e7d3316Smrg func_to_host_path_result="$1" 32996e7d3316Smrg fi 33006e7d3316Smrg ;; 33016e7d3316Smrg esac 33026e7d3316Smrg fi 33036e7d3316Smrg} 33046e7d3316Smrg# end: func_to_host_path 3305a966c04fSmrg 33066e7d3316Smrg# func_to_host_pathlist arg 33076e7d3316Smrg# 33086e7d3316Smrg# Convert pathlists to host format when used with build tools. 33096e7d3316Smrg# See func_to_host_path(), above. This function supports the 33106e7d3316Smrg# following $build/$host combinations (but does no harm for 33116e7d3316Smrg# combinations not listed here): 33126e7d3316Smrg# $build $host 33136e7d3316Smrg# mingw (msys) mingw [e.g. native] 33146e7d3316Smrg# cygwin mingw 33156e7d3316Smrg# *nix + wine mingw 33166e7d3316Smrg# 33176e7d3316Smrg# Path separators are also converted from $build format to 33186e7d3316Smrg# $host format. If ARG begins or ends with a path separator 33196e7d3316Smrg# character, it is preserved (but converted to $host format) 33206e7d3316Smrg# on output. 33216e7d3316Smrg# 33226e7d3316Smrg# ARG is a pathlist (on $build) that should be converted to 33236e7d3316Smrg# the proper representation on $host. The result is stored 33246e7d3316Smrg# in $func_to_host_pathlist_result. 33256e7d3316Smrgfunc_to_host_pathlist () 33266e7d3316Smrg{ 33276e7d3316Smrg func_to_host_pathlist_result="$1" 33286e7d3316Smrg if test -n "$1"; then 33296e7d3316Smrg case $host in 33306e7d3316Smrg *mingw* ) 33316e7d3316Smrg lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 33326e7d3316Smrg # Remove leading and trailing path separator characters from 33336e7d3316Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 33346e7d3316Smrg # into '.;' and ';.', and winepath ignores them completely. 33356e7d3316Smrg func_stripname : : "$1" 33366e7d3316Smrg func_to_host_pathlist_tmp1=$func_stripname_result 33376e7d3316Smrg case $build in 33386e7d3316Smrg *mingw* ) # Actually, msys. 33396e7d3316Smrg # Awkward: cmd appends spaces to result. 33406e7d3316Smrg func_to_host_pathlist_result=` 33416e7d3316Smrg ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null | 33426e7d3316Smrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 33436e7d3316Smrg ;; 33446e7d3316Smrg *cygwin* ) 33456e7d3316Smrg func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" | 33466e7d3316Smrg $SED -e "$lt_sed_naive_backslashify"` 33476e7d3316Smrg ;; 33486e7d3316Smrg * ) 33496e7d3316Smrg # unfortunately, winepath doesn't convert pathlists 33506e7d3316Smrg func_to_host_pathlist_result="" 33516e7d3316Smrg func_to_host_pathlist_oldIFS=$IFS 33526e7d3316Smrg IFS=: 33536e7d3316Smrg for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do 33546e7d3316Smrg IFS=$func_to_host_pathlist_oldIFS 33556e7d3316Smrg if test -n "$func_to_host_pathlist_f" ; then 33566e7d3316Smrg func_to_host_path "$func_to_host_pathlist_f" 33576e7d3316Smrg if test -n "$func_to_host_path_result" ; then 33586e7d3316Smrg if test -z "$func_to_host_pathlist_result" ; then 33596e7d3316Smrg func_to_host_pathlist_result="$func_to_host_path_result" 33606e7d3316Smrg else 33616e7d3316Smrg func_append func_to_host_pathlist_result ";$func_to_host_path_result" 33626e7d3316Smrg fi 33636e7d3316Smrg fi 33646e7d3316Smrg fi 33656e7d3316Smrg done 33666e7d3316Smrg IFS=$func_to_host_pathlist_oldIFS 33676e7d3316Smrg ;; 33686e7d3316Smrg esac 33696e7d3316Smrg if test -z "$func_to_host_pathlist_result"; then 33706e7d3316Smrg func_error "Could not determine the host path(s) corresponding to" 33716e7d3316Smrg func_error " \`$1'" 33726e7d3316Smrg func_error "Continuing, but uninstalled executables may not work." 33736e7d3316Smrg # Fallback. This may break if $1 contains DOS-style drive 33746e7d3316Smrg # specifications. The fix is not to complicate the expression 33756e7d3316Smrg # below, but for the user to provide a working wine installation 33766e7d3316Smrg # with winepath so that path translation in the cross-to-mingw 33776e7d3316Smrg # case works properly. 33786e7d3316Smrg lt_replace_pathsep_nix_to_dos="s|:|;|g" 33796e7d3316Smrg func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ 33806e7d3316Smrg $SED -e "$lt_replace_pathsep_nix_to_dos"` 33816e7d3316Smrg fi 33826e7d3316Smrg # Now, add the leading and trailing path separators back 33836e7d3316Smrg case "$1" in 33846e7d3316Smrg :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" 33856e7d3316Smrg ;; 33866e7d3316Smrg esac 33876e7d3316Smrg case "$1" in 33886e7d3316Smrg *: ) func_append func_to_host_pathlist_result ";" 33896e7d3316Smrg ;; 33906e7d3316Smrg esac 33916e7d3316Smrg ;; 33926e7d3316Smrg esac 33936e7d3316Smrg fi 33946e7d3316Smrg} 33956e7d3316Smrg# end: func_to_host_pathlist 3396a966c04fSmrg 33976e7d3316Smrg# func_emit_cwrapperexe_src 33986e7d3316Smrg# emit the source code for a wrapper executable on stdout 33996e7d3316Smrg# Must ONLY be called from within func_mode_link because 34006e7d3316Smrg# it depends on a number of variable set therein. 34016e7d3316Smrgfunc_emit_cwrapperexe_src () 34026e7d3316Smrg{ 34036e7d3316Smrg cat <<EOF 3404a966c04fSmrg 34056e7d3316Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 34066e7d3316Smrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3407a966c04fSmrg 34086e7d3316Smrg The $output program cannot be directly executed until all the libtool 34096e7d3316Smrg libraries that it depends on are installed. 3410a966c04fSmrg 34116e7d3316Smrg This wrapper executable should never be moved out of the build directory. 34126e7d3316Smrg If it is, it will not operate correctly. 34136e7d3316Smrg*/ 34146e7d3316SmrgEOF 34156e7d3316Smrg cat <<"EOF" 34166e7d3316Smrg#ifdef _MSC_VER 34176e7d3316Smrg# define _CRT_SECURE_NO_DEPRECATE 1 34186e7d3316Smrg#endif 34196e7d3316Smrg#include <stdio.h> 34206e7d3316Smrg#include <stdlib.h> 34216e7d3316Smrg#ifdef _MSC_VER 34226e7d3316Smrg# include <direct.h> 34236e7d3316Smrg# include <process.h> 34246e7d3316Smrg# include <io.h> 34256e7d3316Smrg#else 34266e7d3316Smrg# include <unistd.h> 34276e7d3316Smrg# include <stdint.h> 34286e7d3316Smrg# ifdef __CYGWIN__ 34296e7d3316Smrg# include <io.h> 34306e7d3316Smrg# endif 34316e7d3316Smrg#endif 34326e7d3316Smrg#include <malloc.h> 34336e7d3316Smrg#include <stdarg.h> 34346e7d3316Smrg#include <assert.h> 34356e7d3316Smrg#include <string.h> 34366e7d3316Smrg#include <ctype.h> 34376e7d3316Smrg#include <errno.h> 34386e7d3316Smrg#include <fcntl.h> 34396e7d3316Smrg#include <sys/stat.h> 3440a966c04fSmrg 34416e7d3316Smrg/* declarations of non-ANSI functions */ 34426e7d3316Smrg#if defined(__MINGW32__) 34436e7d3316Smrg# ifdef __STRICT_ANSI__ 34446e7d3316Smrgint _putenv (const char *); 34456e7d3316Smrg# endif 34466e7d3316Smrg#elif defined(__CYGWIN__) 34476e7d3316Smrg# ifdef __STRICT_ANSI__ 34486e7d3316Smrgchar *realpath (const char *, char *); 34496e7d3316Smrgint putenv (char *); 34506e7d3316Smrgint setenv (const char *, const char *, int); 34516e7d3316Smrg# endif 34526e7d3316Smrg/* #elif defined (other platforms) ... */ 34536e7d3316Smrg#endif 3454a966c04fSmrg 34556e7d3316Smrg/* portability defines, excluding path handling macros */ 34566e7d3316Smrg#if defined(_MSC_VER) 34576e7d3316Smrg# define setmode _setmode 34586e7d3316Smrg# define stat _stat 34596e7d3316Smrg# define chmod _chmod 34606e7d3316Smrg# define getcwd _getcwd 34616e7d3316Smrg# define putenv _putenv 34626e7d3316Smrg# define S_IXUSR _S_IEXEC 34636e7d3316Smrg# ifndef _INTPTR_T_DEFINED 34646e7d3316Smrg# define _INTPTR_T_DEFINED 34656e7d3316Smrg# define intptr_t int 34666e7d3316Smrg# endif 34676e7d3316Smrg#elif defined(__MINGW32__) 34686e7d3316Smrg# define setmode _setmode 34696e7d3316Smrg# define stat _stat 34706e7d3316Smrg# define chmod _chmod 34716e7d3316Smrg# define getcwd _getcwd 34726e7d3316Smrg# define putenv _putenv 34736e7d3316Smrg#elif defined(__CYGWIN__) 34746e7d3316Smrg# define HAVE_SETENV 34756e7d3316Smrg# define FOPEN_WB "wb" 34766e7d3316Smrg/* #elif defined (other platforms) ... */ 34776e7d3316Smrg#endif 3478a966c04fSmrg 34796e7d3316Smrg#if defined(PATH_MAX) 34806e7d3316Smrg# define LT_PATHMAX PATH_MAX 34816e7d3316Smrg#elif defined(MAXPATHLEN) 34826e7d3316Smrg# define LT_PATHMAX MAXPATHLEN 34836e7d3316Smrg#else 34846e7d3316Smrg# define LT_PATHMAX 1024 34856e7d3316Smrg#endif 3486a966c04fSmrg 34876e7d3316Smrg#ifndef S_IXOTH 34886e7d3316Smrg# define S_IXOTH 0 34896e7d3316Smrg#endif 34906e7d3316Smrg#ifndef S_IXGRP 34916e7d3316Smrg# define S_IXGRP 0 34926e7d3316Smrg#endif 3493a966c04fSmrg 34946e7d3316Smrg/* path handling portability macros */ 34956e7d3316Smrg#ifndef DIR_SEPARATOR 34966e7d3316Smrg# define DIR_SEPARATOR '/' 34976e7d3316Smrg# define PATH_SEPARATOR ':' 34986e7d3316Smrg#endif 3499a966c04fSmrg 35006e7d3316Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 35016e7d3316Smrg defined (__OS2__) 35026e7d3316Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 35036e7d3316Smrg# define FOPEN_WB "wb" 35046e7d3316Smrg# ifndef DIR_SEPARATOR_2 35056e7d3316Smrg# define DIR_SEPARATOR_2 '\\' 35066e7d3316Smrg# endif 35076e7d3316Smrg# ifndef PATH_SEPARATOR_2 35086e7d3316Smrg# define PATH_SEPARATOR_2 ';' 35096e7d3316Smrg# endif 35106e7d3316Smrg#endif 3511a966c04fSmrg 35126e7d3316Smrg#ifndef DIR_SEPARATOR_2 35136e7d3316Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 35146e7d3316Smrg#else /* DIR_SEPARATOR_2 */ 35156e7d3316Smrg# define IS_DIR_SEPARATOR(ch) \ 35166e7d3316Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 35176e7d3316Smrg#endif /* DIR_SEPARATOR_2 */ 3518a966c04fSmrg 35196e7d3316Smrg#ifndef PATH_SEPARATOR_2 35206e7d3316Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 35216e7d3316Smrg#else /* PATH_SEPARATOR_2 */ 35226e7d3316Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 35236e7d3316Smrg#endif /* PATH_SEPARATOR_2 */ 35246e7d3316Smrg 35256e7d3316Smrg#ifndef FOPEN_WB 35266e7d3316Smrg# define FOPEN_WB "w" 35276e7d3316Smrg#endif 35286e7d3316Smrg#ifndef _O_BINARY 35296e7d3316Smrg# define _O_BINARY 0 35306e7d3316Smrg#endif 35316e7d3316Smrg 35326e7d3316Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 35336e7d3316Smrg#define XFREE(stale) do { \ 35346e7d3316Smrg if (stale) { free ((void *) stale); stale = 0; } \ 35356e7d3316Smrg} while (0) 35366e7d3316Smrg 35376e7d3316Smrg#if defined(LT_DEBUGWRAPPER) 35386e7d3316Smrgstatic int lt_debug = 1; 35396e7d3316Smrg#else 35406e7d3316Smrgstatic int lt_debug = 0; 35416e7d3316Smrg#endif 35426e7d3316Smrg 35436e7d3316Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 35446e7d3316Smrg 35456e7d3316Smrgvoid *xmalloc (size_t num); 35466e7d3316Smrgchar *xstrdup (const char *string); 35476e7d3316Smrgconst char *base_name (const char *name); 35486e7d3316Smrgchar *find_executable (const char *wrapper); 35496e7d3316Smrgchar *chase_symlinks (const char *pathspec); 35506e7d3316Smrgint make_executable (const char *path); 35516e7d3316Smrgint check_executable (const char *path); 35526e7d3316Smrgchar *strendzap (char *str, const char *pat); 35536e7d3316Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 35546e7d3316Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 35556e7d3316Smrgstatic const char *nonnull (const char *s); 35566e7d3316Smrgstatic const char *nonempty (const char *s); 35576e7d3316Smrgvoid lt_setenv (const char *name, const char *value); 35586e7d3316Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 35596e7d3316Smrgvoid lt_update_exe_path (const char *name, const char *value); 35606e7d3316Smrgvoid lt_update_lib_path (const char *name, const char *value); 35616e7d3316Smrgchar **prepare_spawn (char **argv); 35626e7d3316Smrgvoid lt_dump_script (FILE *f); 35636e7d3316SmrgEOF 35646e7d3316Smrg 35656e7d3316Smrg cat <<EOF 35666e7d3316Smrgconst char * MAGIC_EXE = "$magic_exe"; 35676e7d3316Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 35686e7d3316SmrgEOF 35696e7d3316Smrg 35706e7d3316Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 35716e7d3316Smrg func_to_host_pathlist "$temp_rpath" 35726e7d3316Smrg cat <<EOF 35736e7d3316Smrgconst char * LIB_PATH_VALUE = "$func_to_host_pathlist_result"; 3574a966c04fSmrgEOF 3575a966c04fSmrg else 35766e7d3316Smrg cat <<"EOF" 35776e7d3316Smrgconst char * LIB_PATH_VALUE = ""; 35786e7d3316SmrgEOF 3579a966c04fSmrg fi 35806e7d3316Smrg 35816e7d3316Smrg if test -n "$dllsearchpath"; then 35826e7d3316Smrg func_to_host_pathlist "$dllsearchpath:" 35836e7d3316Smrg cat <<EOF 35846e7d3316Smrgconst char * EXE_PATH_VARNAME = "PATH"; 35856e7d3316Smrgconst char * EXE_PATH_VALUE = "$func_to_host_pathlist_result"; 35866e7d3316SmrgEOF 3587a966c04fSmrg else 35886e7d3316Smrg cat <<"EOF" 35896e7d3316Smrgconst char * EXE_PATH_VARNAME = ""; 35906e7d3316Smrgconst char * EXE_PATH_VALUE = ""; 35916e7d3316SmrgEOF 3592a966c04fSmrg fi 35936e7d3316Smrg 35946e7d3316Smrg if test "$fast_install" = yes; then 35956e7d3316Smrg cat <<EOF 35966e7d3316Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 35976e7d3316SmrgEOF 3598a966c04fSmrg else 35996e7d3316Smrg cat <<EOF 36006e7d3316Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 36016e7d3316SmrgEOF 3602a966c04fSmrg fi 3603a966c04fSmrg 3604a966c04fSmrg 36056e7d3316Smrg cat <<"EOF" 3606a966c04fSmrg 36076e7d3316Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 3608a966c04fSmrg 36096e7d3316Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 36106e7d3316Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 36116e7d3316Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 3612a966c04fSmrg 36136e7d3316Smrgint 36146e7d3316Smrgmain (int argc, char *argv[]) 36156e7d3316Smrg{ 36166e7d3316Smrg char **newargz; 36176e7d3316Smrg int newargc; 36186e7d3316Smrg char *tmp_pathspec; 36196e7d3316Smrg char *actual_cwrapper_path; 36206e7d3316Smrg char *actual_cwrapper_name; 36216e7d3316Smrg char *target_name; 36226e7d3316Smrg char *lt_argv_zero; 36236e7d3316Smrg intptr_t rval = 127; 3624a966c04fSmrg 36256e7d3316Smrg int i; 3626a966c04fSmrg 36276e7d3316Smrg program_name = (char *) xstrdup (base_name (argv[0])); 36286e7d3316Smrg newargz = XMALLOC (char *, argc + 1); 3629a966c04fSmrg 36306e7d3316Smrg /* very simple arg parsing; don't want to rely on getopt 36316e7d3316Smrg * also, copy all non cwrapper options to newargz, except 36326e7d3316Smrg * argz[0], which is handled differently 36336e7d3316Smrg */ 36346e7d3316Smrg newargc=0; 36356e7d3316Smrg for (i = 1; i < argc; i++) 36366e7d3316Smrg { 36376e7d3316Smrg if (strcmp (argv[i], dumpscript_opt) == 0) 36386e7d3316Smrg { 36396e7d3316SmrgEOF 36406e7d3316Smrg case "$host" in 36416e7d3316Smrg *mingw* | *cygwin* ) 36426e7d3316Smrg # make stdout use "unix" line endings 36436e7d3316Smrg echo " setmode(1,_O_BINARY);" 36446e7d3316Smrg ;; 36452e2dd055Smrg esac 3646a966c04fSmrg 36476e7d3316Smrg cat <<"EOF" 36486e7d3316Smrg lt_dump_script (stdout); 36496e7d3316Smrg return 0; 36506e7d3316Smrg } 36516e7d3316Smrg if (strcmp (argv[i], debug_opt) == 0) 36526e7d3316Smrg { 36536e7d3316Smrg lt_debug = 1; 36546e7d3316Smrg continue; 36556e7d3316Smrg } 36566e7d3316Smrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 36576e7d3316Smrg { 36586e7d3316Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 36596e7d3316Smrg namespace, but it is not one of the ones we know about and 36606e7d3316Smrg have already dealt with, above (inluding dump-script), then 36616e7d3316Smrg report an error. Otherwise, targets might begin to believe 36626e7d3316Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 36636e7d3316Smrg namespace. The first time any user complains about this, we'll 36646e7d3316Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 36656e7d3316Smrg or a configure.ac-settable value. 36666e7d3316Smrg */ 36676e7d3316Smrg lt_fatal (__FILE__, __LINE__, 36686e7d3316Smrg "unrecognized %s option: '%s'", 36696e7d3316Smrg ltwrapper_option_prefix, argv[i]); 36706e7d3316Smrg } 36716e7d3316Smrg /* otherwise ... */ 36726e7d3316Smrg newargz[++newargc] = xstrdup (argv[i]); 36736e7d3316Smrg } 36746e7d3316Smrg newargz[++newargc] = NULL; 3675a966c04fSmrg 36766e7d3316SmrgEOF 36776e7d3316Smrg cat <<EOF 36786e7d3316Smrg /* The GNU banner must be the first non-error debug message */ 36796e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 36806e7d3316SmrgEOF 36816e7d3316Smrg cat <<"EOF" 36826e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 36836e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 36846e7d3316Smrg 36856e7d3316Smrg tmp_pathspec = find_executable (argv[0]); 36866e7d3316Smrg if (tmp_pathspec == NULL) 36876e7d3316Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 36886e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 36896e7d3316Smrg "(main) found exe (before symlink chase) at: %s\n", 36906e7d3316Smrg tmp_pathspec); 36916e7d3316Smrg 36926e7d3316Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 36936e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 36946e7d3316Smrg "(main) found exe (after symlink chase) at: %s\n", 36956e7d3316Smrg actual_cwrapper_path); 36966e7d3316Smrg XFREE (tmp_pathspec); 36976e7d3316Smrg 36986e7d3316Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 36996e7d3316Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 37006e7d3316Smrg 37016e7d3316Smrg /* wrapper name transforms */ 37026e7d3316Smrg strendzap (actual_cwrapper_name, ".exe"); 37036e7d3316Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 37046e7d3316Smrg XFREE (actual_cwrapper_name); 37056e7d3316Smrg actual_cwrapper_name = tmp_pathspec; 37066e7d3316Smrg tmp_pathspec = 0; 37076e7d3316Smrg 37086e7d3316Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 37096e7d3316Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 37106e7d3316Smrg strendzap (target_name, ".exe"); 37116e7d3316Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 37126e7d3316Smrg XFREE (target_name); 37136e7d3316Smrg target_name = tmp_pathspec; 37146e7d3316Smrg tmp_pathspec = 0; 37156e7d3316Smrg 37166e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 37176e7d3316Smrg "(main) libtool target name: %s\n", 37186e7d3316Smrg target_name); 37196e7d3316SmrgEOF 3720a966c04fSmrg 37216e7d3316Smrg cat <<EOF 37226e7d3316Smrg newargz[0] = 37236e7d3316Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 37246e7d3316Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 37256e7d3316Smrg strcpy (newargz[0], actual_cwrapper_path); 37266e7d3316Smrg strcat (newargz[0], "$objdir"); 37276e7d3316Smrg strcat (newargz[0], "/"); 37286e7d3316SmrgEOF 3729a966c04fSmrg 37306e7d3316Smrg cat <<"EOF" 37316e7d3316Smrg /* stop here, and copy so we don't have to do this twice */ 37326e7d3316Smrg tmp_pathspec = xstrdup (newargz[0]); 3733a966c04fSmrg 37346e7d3316Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 37356e7d3316Smrg strcat (newargz[0], actual_cwrapper_name); 3736a966c04fSmrg 37376e7d3316Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 37386e7d3316Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 37396e7d3316Smrg XFREE (tmp_pathspec); 37406e7d3316Smrg tmp_pathspec = NULL; 37416e7d3316SmrgEOF 3742a966c04fSmrg 37436e7d3316Smrg case $host_os in 37446e7d3316Smrg mingw*) 37456e7d3316Smrg cat <<"EOF" 37466e7d3316Smrg { 37476e7d3316Smrg char* p; 37486e7d3316Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 37496e7d3316Smrg { 37506e7d3316Smrg *p = '/'; 37516e7d3316Smrg } 37526e7d3316Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 37536e7d3316Smrg { 37546e7d3316Smrg *p = '/'; 37556e7d3316Smrg } 37566e7d3316Smrg } 37576e7d3316SmrgEOF 37586e7d3316Smrg ;; 37596e7d3316Smrg esac 3760a966c04fSmrg 37616e7d3316Smrg cat <<"EOF" 37626e7d3316Smrg XFREE (target_name); 37636e7d3316Smrg XFREE (actual_cwrapper_path); 37646e7d3316Smrg XFREE (actual_cwrapper_name); 3765a966c04fSmrg 37666e7d3316Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 37676e7d3316Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 37686e7d3316Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 37696e7d3316Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 3770a966c04fSmrg 37716e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 37726e7d3316Smrg nonnull (lt_argv_zero)); 37736e7d3316Smrg for (i = 0; i < newargc; i++) 37746e7d3316Smrg { 37756e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 37766e7d3316Smrg i, nonnull (newargz[i])); 37776e7d3316Smrg } 3778a966c04fSmrg 37796e7d3316SmrgEOF 3780a966c04fSmrg 37816e7d3316Smrg case $host_os in 37826e7d3316Smrg mingw*) 37836e7d3316Smrg cat <<"EOF" 37846e7d3316Smrg /* execv doesn't actually work on mingw as expected on unix */ 37856e7d3316Smrg newargz = prepare_spawn (newargz); 37866e7d3316Smrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 37876e7d3316Smrg if (rval == -1) 37886e7d3316Smrg { 37896e7d3316Smrg /* failed to start process */ 37906e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 37916e7d3316Smrg "(main) failed to launch target \"%s\": %s\n", 37926e7d3316Smrg lt_argv_zero, nonnull (strerror (errno))); 37936e7d3316Smrg return 127; 37946e7d3316Smrg } 37956e7d3316Smrg return rval; 37966e7d3316SmrgEOF 37976e7d3316Smrg ;; 37986e7d3316Smrg *) 37996e7d3316Smrg cat <<"EOF" 38006e7d3316Smrg execv (lt_argv_zero, newargz); 38016e7d3316Smrg return rval; /* =127, but avoids unused variable warning */ 38026e7d3316SmrgEOF 38036e7d3316Smrg ;; 38046e7d3316Smrg esac 3805a966c04fSmrg 38066e7d3316Smrg cat <<"EOF" 38076e7d3316Smrg} 3808a966c04fSmrg 38096e7d3316Smrgvoid * 38106e7d3316Smrgxmalloc (size_t num) 38116e7d3316Smrg{ 38126e7d3316Smrg void *p = (void *) malloc (num); 38136e7d3316Smrg if (!p) 38146e7d3316Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 3815a966c04fSmrg 38166e7d3316Smrg return p; 38176e7d3316Smrg} 3818a966c04fSmrg 38196e7d3316Smrgchar * 38206e7d3316Smrgxstrdup (const char *string) 38216e7d3316Smrg{ 38226e7d3316Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 38236e7d3316Smrg string) : NULL; 38246e7d3316Smrg} 3825a966c04fSmrg 38266e7d3316Smrgconst char * 38276e7d3316Smrgbase_name (const char *name) 38286e7d3316Smrg{ 38296e7d3316Smrg const char *base; 3830a966c04fSmrg 38316e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 38326e7d3316Smrg /* Skip over the disk name in MSDOS pathnames. */ 38336e7d3316Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 38346e7d3316Smrg name += 2; 38356e7d3316Smrg#endif 3836a966c04fSmrg 38376e7d3316Smrg for (base = name; *name; name++) 38386e7d3316Smrg if (IS_DIR_SEPARATOR (*name)) 38396e7d3316Smrg base = name + 1; 38406e7d3316Smrg return base; 38416e7d3316Smrg} 3842a966c04fSmrg 38436e7d3316Smrgint 38446e7d3316Smrgcheck_executable (const char *path) 38456e7d3316Smrg{ 38466e7d3316Smrg struct stat st; 3847a966c04fSmrg 38486e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 38496e7d3316Smrg nonempty (path)); 38506e7d3316Smrg if ((!path) || (!*path)) 38516e7d3316Smrg return 0; 3852a966c04fSmrg 38536e7d3316Smrg if ((stat (path, &st) >= 0) 38546e7d3316Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 38556e7d3316Smrg return 1; 38566e7d3316Smrg else 38576e7d3316Smrg return 0; 38586e7d3316Smrg} 3859a966c04fSmrg 38606e7d3316Smrgint 38616e7d3316Smrgmake_executable (const char *path) 38626e7d3316Smrg{ 38636e7d3316Smrg int rval = 0; 38646e7d3316Smrg struct stat st; 3865a966c04fSmrg 38666e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 38676e7d3316Smrg nonempty (path)); 38686e7d3316Smrg if ((!path) || (!*path)) 38696e7d3316Smrg return 0; 3870a966c04fSmrg 38716e7d3316Smrg if (stat (path, &st) >= 0) 38726e7d3316Smrg { 38736e7d3316Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 38746e7d3316Smrg } 38756e7d3316Smrg return rval; 38766e7d3316Smrg} 3877a966c04fSmrg 38786e7d3316Smrg/* Searches for the full path of the wrapper. Returns 38796e7d3316Smrg newly allocated full path name if found, NULL otherwise 38806e7d3316Smrg Does not chase symlinks, even on platforms that support them. 38816e7d3316Smrg*/ 38826e7d3316Smrgchar * 38836e7d3316Smrgfind_executable (const char *wrapper) 38846e7d3316Smrg{ 38856e7d3316Smrg int has_slash = 0; 38866e7d3316Smrg const char *p; 38876e7d3316Smrg const char *p_next; 38886e7d3316Smrg /* static buffer for getcwd */ 38896e7d3316Smrg char tmp[LT_PATHMAX + 1]; 38906e7d3316Smrg int tmp_len; 38916e7d3316Smrg char *concat_name; 3892a966c04fSmrg 38936e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 38946e7d3316Smrg nonempty (wrapper)); 3895a966c04fSmrg 38966e7d3316Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 38976e7d3316Smrg return NULL; 3898a966c04fSmrg 38996e7d3316Smrg /* Absolute path? */ 39006e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 39016e7d3316Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 39026e7d3316Smrg { 39036e7d3316Smrg concat_name = xstrdup (wrapper); 39046e7d3316Smrg if (check_executable (concat_name)) 39056e7d3316Smrg return concat_name; 39066e7d3316Smrg XFREE (concat_name); 39076e7d3316Smrg } 39086e7d3316Smrg else 39096e7d3316Smrg { 39106e7d3316Smrg#endif 39116e7d3316Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 39126e7d3316Smrg { 39136e7d3316Smrg concat_name = xstrdup (wrapper); 39146e7d3316Smrg if (check_executable (concat_name)) 39156e7d3316Smrg return concat_name; 39166e7d3316Smrg XFREE (concat_name); 39176e7d3316Smrg } 39186e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 39196e7d3316Smrg } 39206e7d3316Smrg#endif 3921a966c04fSmrg 39226e7d3316Smrg for (p = wrapper; *p; p++) 39236e7d3316Smrg if (*p == '/') 39246e7d3316Smrg { 39256e7d3316Smrg has_slash = 1; 39266e7d3316Smrg break; 39276e7d3316Smrg } 39286e7d3316Smrg if (!has_slash) 39296e7d3316Smrg { 39306e7d3316Smrg /* no slashes; search PATH */ 39316e7d3316Smrg const char *path = getenv ("PATH"); 39326e7d3316Smrg if (path != NULL) 39336e7d3316Smrg { 39346e7d3316Smrg for (p = path; *p; p = p_next) 39356e7d3316Smrg { 39366e7d3316Smrg const char *q; 39376e7d3316Smrg size_t p_len; 39386e7d3316Smrg for (q = p; *q; q++) 39396e7d3316Smrg if (IS_PATH_SEPARATOR (*q)) 39406e7d3316Smrg break; 39416e7d3316Smrg p_len = q - p; 39426e7d3316Smrg p_next = (*q == '\0' ? q : q + 1); 39436e7d3316Smrg if (p_len == 0) 39446e7d3316Smrg { 39456e7d3316Smrg /* empty path: current directory */ 39466e7d3316Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 39476e7d3316Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 39486e7d3316Smrg nonnull (strerror (errno))); 39496e7d3316Smrg tmp_len = strlen (tmp); 39506e7d3316Smrg concat_name = 39516e7d3316Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 39526e7d3316Smrg memcpy (concat_name, tmp, tmp_len); 39536e7d3316Smrg concat_name[tmp_len] = '/'; 39546e7d3316Smrg strcpy (concat_name + tmp_len + 1, wrapper); 39556e7d3316Smrg } 39566e7d3316Smrg else 39576e7d3316Smrg { 39586e7d3316Smrg concat_name = 39596e7d3316Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 39606e7d3316Smrg memcpy (concat_name, p, p_len); 39616e7d3316Smrg concat_name[p_len] = '/'; 39626e7d3316Smrg strcpy (concat_name + p_len + 1, wrapper); 39636e7d3316Smrg } 39646e7d3316Smrg if (check_executable (concat_name)) 39656e7d3316Smrg return concat_name; 39666e7d3316Smrg XFREE (concat_name); 39676e7d3316Smrg } 39686e7d3316Smrg } 39696e7d3316Smrg /* not found in PATH; assume curdir */ 39706e7d3316Smrg } 39716e7d3316Smrg /* Relative path | not found in path: prepend cwd */ 39726e7d3316Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 39736e7d3316Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 39746e7d3316Smrg nonnull (strerror (errno))); 39756e7d3316Smrg tmp_len = strlen (tmp); 39766e7d3316Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 39776e7d3316Smrg memcpy (concat_name, tmp, tmp_len); 39786e7d3316Smrg concat_name[tmp_len] = '/'; 39796e7d3316Smrg strcpy (concat_name + tmp_len + 1, wrapper); 3980a966c04fSmrg 39816e7d3316Smrg if (check_executable (concat_name)) 39826e7d3316Smrg return concat_name; 39836e7d3316Smrg XFREE (concat_name); 39846e7d3316Smrg return NULL; 39856e7d3316Smrg} 3986a966c04fSmrg 39876e7d3316Smrgchar * 39886e7d3316Smrgchase_symlinks (const char *pathspec) 39896e7d3316Smrg{ 39906e7d3316Smrg#ifndef S_ISLNK 39916e7d3316Smrg return xstrdup (pathspec); 39926e7d3316Smrg#else 39936e7d3316Smrg char buf[LT_PATHMAX]; 39946e7d3316Smrg struct stat s; 39956e7d3316Smrg char *tmp_pathspec = xstrdup (pathspec); 39966e7d3316Smrg char *p; 39976e7d3316Smrg int has_symlinks = 0; 39986e7d3316Smrg while (strlen (tmp_pathspec) && !has_symlinks) 39996e7d3316Smrg { 40006e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 40016e7d3316Smrg "checking path component for symlinks: %s\n", 40026e7d3316Smrg tmp_pathspec); 40036e7d3316Smrg if (lstat (tmp_pathspec, &s) == 0) 40046e7d3316Smrg { 40056e7d3316Smrg if (S_ISLNK (s.st_mode) != 0) 40066e7d3316Smrg { 40076e7d3316Smrg has_symlinks = 1; 40086e7d3316Smrg break; 40096e7d3316Smrg } 4010a966c04fSmrg 40116e7d3316Smrg /* search backwards for last DIR_SEPARATOR */ 40126e7d3316Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 40136e7d3316Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 40146e7d3316Smrg p--; 40156e7d3316Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 40166e7d3316Smrg { 40176e7d3316Smrg /* no more DIR_SEPARATORS left */ 40186e7d3316Smrg break; 40196e7d3316Smrg } 40206e7d3316Smrg *p = '\0'; 40216e7d3316Smrg } 40226e7d3316Smrg else 40236e7d3316Smrg { 40246e7d3316Smrg lt_fatal (__FILE__, __LINE__, 40256e7d3316Smrg "error accessing file \"%s\": %s", 40266e7d3316Smrg tmp_pathspec, nonnull (strerror (errno))); 40276e7d3316Smrg } 40286e7d3316Smrg } 40296e7d3316Smrg XFREE (tmp_pathspec); 4030a966c04fSmrg 40316e7d3316Smrg if (!has_symlinks) 40326e7d3316Smrg { 40336e7d3316Smrg return xstrdup (pathspec); 40346e7d3316Smrg } 4035a966c04fSmrg 40366e7d3316Smrg tmp_pathspec = realpath (pathspec, buf); 40376e7d3316Smrg if (tmp_pathspec == 0) 40386e7d3316Smrg { 40396e7d3316Smrg lt_fatal (__FILE__, __LINE__, 40406e7d3316Smrg "could not follow symlinks for %s", pathspec); 40416e7d3316Smrg } 40426e7d3316Smrg return xstrdup (tmp_pathspec); 40436e7d3316Smrg#endif 40446e7d3316Smrg} 4045a966c04fSmrg 40466e7d3316Smrgchar * 40476e7d3316Smrgstrendzap (char *str, const char *pat) 40486e7d3316Smrg{ 40496e7d3316Smrg size_t len, patlen; 4050a966c04fSmrg 40516e7d3316Smrg assert (str != NULL); 40526e7d3316Smrg assert (pat != NULL); 4053a966c04fSmrg 40546e7d3316Smrg len = strlen (str); 40556e7d3316Smrg patlen = strlen (pat); 4056a966c04fSmrg 40576e7d3316Smrg if (patlen <= len) 40586e7d3316Smrg { 40596e7d3316Smrg str += len - patlen; 40606e7d3316Smrg if (strcmp (str, pat) == 0) 40616e7d3316Smrg *str = '\0'; 40626e7d3316Smrg } 40636e7d3316Smrg return str; 40646e7d3316Smrg} 4065a966c04fSmrg 40666e7d3316Smrgvoid 40676e7d3316Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 40686e7d3316Smrg{ 40696e7d3316Smrg va_list args; 40706e7d3316Smrg if (lt_debug) 40716e7d3316Smrg { 40726e7d3316Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 40736e7d3316Smrg va_start (args, fmt); 40746e7d3316Smrg (void) vfprintf (stderr, fmt, args); 40756e7d3316Smrg va_end (args); 40766e7d3316Smrg } 40776e7d3316Smrg} 4078a966c04fSmrg 40796e7d3316Smrgstatic void 40806e7d3316Smrglt_error_core (int exit_status, const char *file, 40816e7d3316Smrg int line, const char *mode, 40826e7d3316Smrg const char *message, va_list ap) 40836e7d3316Smrg{ 40846e7d3316Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 40856e7d3316Smrg vfprintf (stderr, message, ap); 40866e7d3316Smrg fprintf (stderr, ".\n"); 4087a966c04fSmrg 40886e7d3316Smrg if (exit_status >= 0) 40896e7d3316Smrg exit (exit_status); 40906e7d3316Smrg} 4091a966c04fSmrg 40926e7d3316Smrgvoid 40936e7d3316Smrglt_fatal (const char *file, int line, const char *message, ...) 40946e7d3316Smrg{ 40956e7d3316Smrg va_list ap; 40966e7d3316Smrg va_start (ap, message); 40976e7d3316Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 40986e7d3316Smrg va_end (ap); 40996e7d3316Smrg} 4100a966c04fSmrg 41016e7d3316Smrgstatic const char * 41026e7d3316Smrgnonnull (const char *s) 41036e7d3316Smrg{ 41046e7d3316Smrg return s ? s : "(null)"; 41056e7d3316Smrg} 4106a966c04fSmrg 41076e7d3316Smrgstatic const char * 41086e7d3316Smrgnonempty (const char *s) 41096e7d3316Smrg{ 41106e7d3316Smrg return (s && !*s) ? "(empty)" : nonnull (s); 41116e7d3316Smrg} 4112a966c04fSmrg 41136e7d3316Smrgvoid 41146e7d3316Smrglt_setenv (const char *name, const char *value) 41156e7d3316Smrg{ 41166e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 41176e7d3316Smrg "(lt_setenv) setting '%s' to '%s'\n", 41186e7d3316Smrg nonnull (name), nonnull (value)); 41196e7d3316Smrg { 41206e7d3316Smrg#ifdef HAVE_SETENV 41216e7d3316Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 41226e7d3316Smrg char *str = xstrdup (value); 41236e7d3316Smrg setenv (name, str, 1); 41246e7d3316Smrg#else 41256e7d3316Smrg int len = strlen (name) + 1 + strlen (value) + 1; 41266e7d3316Smrg char *str = XMALLOC (char, len); 41276e7d3316Smrg sprintf (str, "%s=%s", name, value); 41286e7d3316Smrg if (putenv (str) != EXIT_SUCCESS) 41296e7d3316Smrg { 41306e7d3316Smrg XFREE (str); 41316e7d3316Smrg } 41326e7d3316Smrg#endif 41336e7d3316Smrg } 41346e7d3316Smrg} 4135a966c04fSmrg 41366e7d3316Smrgchar * 41376e7d3316Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 41386e7d3316Smrg{ 41396e7d3316Smrg char *new_value; 41406e7d3316Smrg if (orig_value && *orig_value) 41416e7d3316Smrg { 41426e7d3316Smrg int orig_value_len = strlen (orig_value); 41436e7d3316Smrg int add_len = strlen (add); 41446e7d3316Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 41456e7d3316Smrg if (to_end) 41466e7d3316Smrg { 41476e7d3316Smrg strcpy (new_value, orig_value); 41486e7d3316Smrg strcpy (new_value + orig_value_len, add); 41496e7d3316Smrg } 41506e7d3316Smrg else 41516e7d3316Smrg { 41526e7d3316Smrg strcpy (new_value, add); 41536e7d3316Smrg strcpy (new_value + add_len, orig_value); 41546e7d3316Smrg } 41556e7d3316Smrg } 41566e7d3316Smrg else 41576e7d3316Smrg { 41586e7d3316Smrg new_value = xstrdup (add); 41596e7d3316Smrg } 41606e7d3316Smrg return new_value; 41616e7d3316Smrg} 4162a966c04fSmrg 41636e7d3316Smrgvoid 41646e7d3316Smrglt_update_exe_path (const char *name, const char *value) 41656e7d3316Smrg{ 41666e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 41676e7d3316Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 41686e7d3316Smrg nonnull (name), nonnull (value)); 4169a966c04fSmrg 41706e7d3316Smrg if (name && *name && value && *value) 41716e7d3316Smrg { 41726e7d3316Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 41736e7d3316Smrg /* some systems can't cope with a ':'-terminated path #' */ 41746e7d3316Smrg int len = strlen (new_value); 41756e7d3316Smrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 41766e7d3316Smrg { 41776e7d3316Smrg new_value[len-1] = '\0'; 41786e7d3316Smrg } 41796e7d3316Smrg lt_setenv (name, new_value); 41806e7d3316Smrg XFREE (new_value); 41816e7d3316Smrg } 41826e7d3316Smrg} 4183a966c04fSmrg 41846e7d3316Smrgvoid 41856e7d3316Smrglt_update_lib_path (const char *name, const char *value) 41866e7d3316Smrg{ 41876e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 41886e7d3316Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 41896e7d3316Smrg nonnull (name), nonnull (value)); 4190a966c04fSmrg 41916e7d3316Smrg if (name && *name && value && *value) 41926e7d3316Smrg { 41936e7d3316Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 41946e7d3316Smrg lt_setenv (name, new_value); 41956e7d3316Smrg XFREE (new_value); 41966e7d3316Smrg } 41976e7d3316Smrg} 4198a966c04fSmrg 41996e7d3316SmrgEOF 42006e7d3316Smrg case $host_os in 42016e7d3316Smrg mingw*) 42026e7d3316Smrg cat <<"EOF" 42036e7d3316Smrg 42046e7d3316Smrg/* Prepares an argument vector before calling spawn(). 42056e7d3316Smrg Note that spawn() does not by itself call the command interpreter 42066e7d3316Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 42076e7d3316Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 42086e7d3316Smrg GetVersionEx(&v); 42096e7d3316Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 42106e7d3316Smrg }) ? "cmd.exe" : "command.com"). 42116e7d3316Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 42126e7d3316Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 42136e7d3316Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 42146e7d3316Smrg special way: 42156e7d3316Smrg - Space and tab are interpreted as delimiters. They are not treated as 42166e7d3316Smrg delimiters if they are surrounded by double quotes: "...". 42176e7d3316Smrg - Unescaped double quotes are removed from the input. Their only effect is 42186e7d3316Smrg that within double quotes, space and tab are treated like normal 42196e7d3316Smrg characters. 42206e7d3316Smrg - Backslashes not followed by double quotes are not special. 42216e7d3316Smrg - But 2*n+1 backslashes followed by a double quote become 42226e7d3316Smrg n backslashes followed by a double quote (n >= 0): 42236e7d3316Smrg \" -> " 42246e7d3316Smrg \\\" -> \" 42256e7d3316Smrg \\\\\" -> \\" 42266e7d3316Smrg */ 42276e7d3316Smrg#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" 42286e7d3316Smrg#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" 42296e7d3316Smrgchar ** 42306e7d3316Smrgprepare_spawn (char **argv) 42316e7d3316Smrg{ 42326e7d3316Smrg size_t argc; 42336e7d3316Smrg char **new_argv; 42346e7d3316Smrg size_t i; 4235a966c04fSmrg 42366e7d3316Smrg /* Count number of arguments. */ 42376e7d3316Smrg for (argc = 0; argv[argc] != NULL; argc++) 42386e7d3316Smrg ; 4239a966c04fSmrg 42406e7d3316Smrg /* Allocate new argument vector. */ 42416e7d3316Smrg new_argv = XMALLOC (char *, argc + 1); 4242a966c04fSmrg 42436e7d3316Smrg /* Put quoted arguments into the new argument vector. */ 42446e7d3316Smrg for (i = 0; i < argc; i++) 42456e7d3316Smrg { 42466e7d3316Smrg const char *string = argv[i]; 42476e7d3316Smrg 42486e7d3316Smrg if (string[0] == '\0') 42496e7d3316Smrg new_argv[i] = xstrdup ("\"\""); 42506e7d3316Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 42516e7d3316Smrg { 42526e7d3316Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 42536e7d3316Smrg size_t length; 42546e7d3316Smrg unsigned int backslashes; 42556e7d3316Smrg const char *s; 42566e7d3316Smrg char *quoted_string; 42576e7d3316Smrg char *p; 42586e7d3316Smrg 42596e7d3316Smrg length = 0; 42606e7d3316Smrg backslashes = 0; 42616e7d3316Smrg if (quote_around) 42626e7d3316Smrg length++; 42636e7d3316Smrg for (s = string; *s != '\0'; s++) 42646e7d3316Smrg { 42656e7d3316Smrg char c = *s; 42666e7d3316Smrg if (c == '"') 42676e7d3316Smrg length += backslashes + 1; 42686e7d3316Smrg length++; 42696e7d3316Smrg if (c == '\\') 42706e7d3316Smrg backslashes++; 42716e7d3316Smrg else 42726e7d3316Smrg backslashes = 0; 42736e7d3316Smrg } 42746e7d3316Smrg if (quote_around) 42756e7d3316Smrg length += backslashes + 1; 42766e7d3316Smrg 42776e7d3316Smrg quoted_string = XMALLOC (char, length + 1); 42786e7d3316Smrg 42796e7d3316Smrg p = quoted_string; 42806e7d3316Smrg backslashes = 0; 42816e7d3316Smrg if (quote_around) 42826e7d3316Smrg *p++ = '"'; 42836e7d3316Smrg for (s = string; *s != '\0'; s++) 42846e7d3316Smrg { 42856e7d3316Smrg char c = *s; 42866e7d3316Smrg if (c == '"') 42876e7d3316Smrg { 42886e7d3316Smrg unsigned int j; 42896e7d3316Smrg for (j = backslashes + 1; j > 0; j--) 42906e7d3316Smrg *p++ = '\\'; 42916e7d3316Smrg } 42926e7d3316Smrg *p++ = c; 42936e7d3316Smrg if (c == '\\') 42946e7d3316Smrg backslashes++; 42956e7d3316Smrg else 42966e7d3316Smrg backslashes = 0; 42976e7d3316Smrg } 42986e7d3316Smrg if (quote_around) 42996e7d3316Smrg { 43006e7d3316Smrg unsigned int j; 43016e7d3316Smrg for (j = backslashes; j > 0; j--) 43026e7d3316Smrg *p++ = '\\'; 43036e7d3316Smrg *p++ = '"'; 43046e7d3316Smrg } 43056e7d3316Smrg *p = '\0'; 4306a966c04fSmrg 43076e7d3316Smrg new_argv[i] = quoted_string; 43086e7d3316Smrg } 43096e7d3316Smrg else 43106e7d3316Smrg new_argv[i] = (char *) string; 43116e7d3316Smrg } 43126e7d3316Smrg new_argv[argc] = NULL; 4313a966c04fSmrg 43146e7d3316Smrg return new_argv; 43156e7d3316Smrg} 43166e7d3316SmrgEOF 4317a966c04fSmrg ;; 43186e7d3316Smrg esac 4319a966c04fSmrg 43206e7d3316Smrg cat <<"EOF" 43216e7d3316Smrgvoid lt_dump_script (FILE* f) 43226e7d3316Smrg{ 43236e7d3316SmrgEOF 43246e7d3316Smrg func_emit_wrapper yes | 43256e7d3316Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 43266e7d3316Smrg -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' 4327a966c04fSmrg 43286e7d3316Smrg cat <<"EOF" 43296e7d3316Smrg} 43306e7d3316SmrgEOF 43316e7d3316Smrg} 43326e7d3316Smrg# end: func_emit_cwrapperexe_src 4333a966c04fSmrg 43346e7d3316Smrg# func_win32_import_lib_p ARG 43356e7d3316Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 43366e7d3316Smrgfunc_win32_import_lib_p () 43376e7d3316Smrg{ 43386e7d3316Smrg $opt_debug 43396e7d3316Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 43406e7d3316Smrg *import*) : ;; 43416e7d3316Smrg *) false ;; 43426e7d3316Smrg esac 43436e7d3316Smrg} 4344a966c04fSmrg 43456e7d3316Smrg# func_mode_link arg... 43466e7d3316Smrgfunc_mode_link () 43476e7d3316Smrg{ 43486e7d3316Smrg $opt_debug 43496e7d3316Smrg case $host in 43506e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 43516e7d3316Smrg # It is impossible to link a dll without this setting, and 43526e7d3316Smrg # we shouldn't force the makefile maintainer to figure out 43536e7d3316Smrg # which system we are compiling for in order to pass an extra 43546e7d3316Smrg # flag for every libtool invocation. 43556e7d3316Smrg # allow_undefined=no 4356a966c04fSmrg 43576e7d3316Smrg # FIXME: Unfortunately, there are problems with the above when trying 43586e7d3316Smrg # to make a dll which has undefined symbols, in which case not 43596e7d3316Smrg # even a static library is built. For now, we need to specify 43606e7d3316Smrg # -no-undefined on the libtool link line when we can be certain 43616e7d3316Smrg # that all symbols are satisfied, otherwise we get a static library. 43626e7d3316Smrg allow_undefined=yes 43636e7d3316Smrg ;; 43646e7d3316Smrg *) 43656e7d3316Smrg allow_undefined=yes 43666e7d3316Smrg ;; 43676e7d3316Smrg esac 43686e7d3316Smrg libtool_args=$nonopt 43696e7d3316Smrg base_compile="$nonopt $@" 43706e7d3316Smrg compile_command=$nonopt 43716e7d3316Smrg finalize_command=$nonopt 4372a966c04fSmrg 43736e7d3316Smrg compile_rpath= 43746e7d3316Smrg finalize_rpath= 43756e7d3316Smrg compile_shlibpath= 43766e7d3316Smrg finalize_shlibpath= 43776e7d3316Smrg convenience= 43786e7d3316Smrg old_convenience= 43796e7d3316Smrg deplibs= 43806e7d3316Smrg old_deplibs= 43816e7d3316Smrg compiler_flags= 43826e7d3316Smrg linker_flags= 43836e7d3316Smrg dllsearchpath= 43846e7d3316Smrg lib_search_path=`pwd` 43856e7d3316Smrg inst_prefix_dir= 43866e7d3316Smrg new_inherited_linker_flags= 4387a966c04fSmrg 43886e7d3316Smrg avoid_version=no 43896e7d3316Smrg bindir= 43906e7d3316Smrg dlfiles= 43916e7d3316Smrg dlprefiles= 43926e7d3316Smrg dlself=no 43936e7d3316Smrg export_dynamic=no 43946e7d3316Smrg export_symbols= 43956e7d3316Smrg export_symbols_regex= 43966e7d3316Smrg generated= 43976e7d3316Smrg libobjs= 43986e7d3316Smrg ltlibs= 43996e7d3316Smrg module=no 44006e7d3316Smrg no_install=no 44016e7d3316Smrg objs= 44026e7d3316Smrg non_pic_objects= 44036e7d3316Smrg precious_files_regex= 44046e7d3316Smrg prefer_static_libs=no 44056e7d3316Smrg preload=no 44066e7d3316Smrg prev= 44076e7d3316Smrg prevarg= 44086e7d3316Smrg release= 44096e7d3316Smrg rpath= 44106e7d3316Smrg xrpath= 44116e7d3316Smrg perm_rpath= 44126e7d3316Smrg temp_rpath= 44136e7d3316Smrg thread_safe=no 44146e7d3316Smrg vinfo= 44156e7d3316Smrg vinfo_number=no 44166e7d3316Smrg weak_libs= 44176e7d3316Smrg single_module="${wl}-single_module" 44186e7d3316Smrg func_infer_tag $base_compile 4419a966c04fSmrg 44206e7d3316Smrg # We need to know -static, to get the right output filenames. 44216e7d3316Smrg for arg 44226e7d3316Smrg do 44236e7d3316Smrg case $arg in 44246e7d3316Smrg -shared) 44256e7d3316Smrg test "$build_libtool_libs" != yes && \ 44266e7d3316Smrg func_fatal_configuration "can not build a shared library" 44276e7d3316Smrg build_old_libs=no 44286e7d3316Smrg break 44296e7d3316Smrg ;; 44306e7d3316Smrg -all-static | -static | -static-libtool-libs) 44316e7d3316Smrg case $arg in 44326e7d3316Smrg -all-static) 44336e7d3316Smrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 44346e7d3316Smrg func_warning "complete static linking is impossible in this configuration" 44356e7d3316Smrg fi 44366e7d3316Smrg if test -n "$link_static_flag"; then 44376e7d3316Smrg dlopen_self=$dlopen_self_static 44386e7d3316Smrg fi 44396e7d3316Smrg prefer_static_libs=yes 44406e7d3316Smrg ;; 44416e7d3316Smrg -static) 44426e7d3316Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 44436e7d3316Smrg dlopen_self=$dlopen_self_static 44446e7d3316Smrg fi 44456e7d3316Smrg prefer_static_libs=built 44466e7d3316Smrg ;; 44476e7d3316Smrg -static-libtool-libs) 44486e7d3316Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 44496e7d3316Smrg dlopen_self=$dlopen_self_static 44506e7d3316Smrg fi 44516e7d3316Smrg prefer_static_libs=yes 44526e7d3316Smrg ;; 44536e7d3316Smrg esac 44546e7d3316Smrg build_libtool_libs=no 44556e7d3316Smrg build_old_libs=yes 44566e7d3316Smrg break 44576e7d3316Smrg ;; 44586e7d3316Smrg esac 44596e7d3316Smrg done 4460a966c04fSmrg 44616e7d3316Smrg # See if our shared archives depend on static archives. 44626e7d3316Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 4463a966c04fSmrg 44646e7d3316Smrg # Go through the arguments, transforming them on the way. 44656e7d3316Smrg while test "$#" -gt 0; do 44666e7d3316Smrg arg="$1" 44676e7d3316Smrg shift 44686e7d3316Smrg func_quote_for_eval "$arg" 44696e7d3316Smrg qarg=$func_quote_for_eval_unquoted_result 44706e7d3316Smrg func_append libtool_args " $func_quote_for_eval_result" 4471a966c04fSmrg 44726e7d3316Smrg # If the previous option needs an argument, assign it. 44736e7d3316Smrg if test -n "$prev"; then 44746e7d3316Smrg case $prev in 44756e7d3316Smrg output) 44766e7d3316Smrg func_append compile_command " @OUTPUT@" 44776e7d3316Smrg func_append finalize_command " @OUTPUT@" 44786e7d3316Smrg ;; 44796e7d3316Smrg esac 4480a966c04fSmrg 44816e7d3316Smrg case $prev in 44826e7d3316Smrg bindir) 44836e7d3316Smrg bindir="$arg" 44846e7d3316Smrg prev= 44856e7d3316Smrg continue 44866e7d3316Smrg ;; 44876e7d3316Smrg dlfiles|dlprefiles) 44886e7d3316Smrg if test "$preload" = no; then 44896e7d3316Smrg # Add the symbol object into the linking commands. 44906e7d3316Smrg func_append compile_command " @SYMFILE@" 44916e7d3316Smrg func_append finalize_command " @SYMFILE@" 44926e7d3316Smrg preload=yes 4493a966c04fSmrg fi 44946e7d3316Smrg case $arg in 44956e7d3316Smrg *.la | *.lo) ;; # We handle these cases below. 44966e7d3316Smrg force) 44976e7d3316Smrg if test "$dlself" = no; then 44986e7d3316Smrg dlself=needless 44996e7d3316Smrg export_dynamic=yes 4500a966c04fSmrg fi 45016e7d3316Smrg prev= 45026e7d3316Smrg continue 45036e7d3316Smrg ;; 45046e7d3316Smrg self) 45056e7d3316Smrg if test "$prev" = dlprefiles; then 45066e7d3316Smrg dlself=yes 45076e7d3316Smrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 45086e7d3316Smrg dlself=yes 4509a966c04fSmrg else 45106e7d3316Smrg dlself=needless 45116e7d3316Smrg export_dynamic=yes 4512a966c04fSmrg fi 45136e7d3316Smrg prev= 45146e7d3316Smrg continue 45156e7d3316Smrg ;; 45166e7d3316Smrg *) 45176e7d3316Smrg if test "$prev" = dlfiles; then 45186e7d3316Smrg dlfiles="$dlfiles $arg" 4519a966c04fSmrg else 45206e7d3316Smrg dlprefiles="$dlprefiles $arg" 4521a966c04fSmrg fi 45226e7d3316Smrg prev= 45236e7d3316Smrg continue 45246e7d3316Smrg ;; 45256e7d3316Smrg esac 45266e7d3316Smrg ;; 45276e7d3316Smrg expsyms) 45286e7d3316Smrg export_symbols="$arg" 45296e7d3316Smrg test -f "$arg" \ 45306e7d3316Smrg || func_fatal_error "symbol file \`$arg' does not exist" 45316e7d3316Smrg prev= 45326e7d3316Smrg continue 45336e7d3316Smrg ;; 45346e7d3316Smrg expsyms_regex) 45356e7d3316Smrg export_symbols_regex="$arg" 45366e7d3316Smrg prev= 45376e7d3316Smrg continue 45386e7d3316Smrg ;; 45396e7d3316Smrg framework) 4540a966c04fSmrg case $host in 45416e7d3316Smrg *-*-darwin*) 45426e7d3316Smrg case "$deplibs " in 45436e7d3316Smrg *" $qarg.ltframework "*) ;; 45446e7d3316Smrg *) deplibs="$deplibs $qarg.ltframework" # this is fixed later 45456e7d3316Smrg ;; 45466e7d3316Smrg esac 45476e7d3316Smrg ;; 4548a966c04fSmrg esac 45496e7d3316Smrg prev= 45506e7d3316Smrg continue 4551a966c04fSmrg ;; 45526e7d3316Smrg inst_prefix) 45536e7d3316Smrg inst_prefix_dir="$arg" 45546e7d3316Smrg prev= 45556e7d3316Smrg continue 4556a966c04fSmrg ;; 45576e7d3316Smrg objectlist) 45586e7d3316Smrg if test -f "$arg"; then 45596e7d3316Smrg save_arg=$arg 45606e7d3316Smrg moreargs= 45616e7d3316Smrg for fil in `cat "$save_arg"` 45626e7d3316Smrg do 45636e7d3316Smrg# moreargs="$moreargs $fil" 45646e7d3316Smrg arg=$fil 45656e7d3316Smrg # A libtool-controlled object. 4566a966c04fSmrg 45676e7d3316Smrg # Check to see that this really is a libtool object. 45686e7d3316Smrg if func_lalib_unsafe_p "$arg"; then 45696e7d3316Smrg pic_object= 45706e7d3316Smrg non_pic_object= 4571a966c04fSmrg 45726e7d3316Smrg # Read the .lo file 45736e7d3316Smrg func_source "$arg" 4574a966c04fSmrg 45756e7d3316Smrg if test -z "$pic_object" || 45766e7d3316Smrg test -z "$non_pic_object" || 45776e7d3316Smrg test "$pic_object" = none && 45786e7d3316Smrg test "$non_pic_object" = none; then 45796e7d3316Smrg func_fatal_error "cannot find name of object for \`$arg'" 45806e7d3316Smrg fi 4581a966c04fSmrg 45826e7d3316Smrg # Extract subdirectory from the argument. 45836e7d3316Smrg func_dirname "$arg" "/" "" 45846e7d3316Smrg xdir="$func_dirname_result" 4585a966c04fSmrg 45866e7d3316Smrg if test "$pic_object" != none; then 45876e7d3316Smrg # Prepend the subdirectory the object is found in. 45886e7d3316Smrg pic_object="$xdir$pic_object" 4589a966c04fSmrg 45906e7d3316Smrg if test "$prev" = dlfiles; then 45916e7d3316Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 45926e7d3316Smrg dlfiles="$dlfiles $pic_object" 45936e7d3316Smrg prev= 45946e7d3316Smrg continue 45956e7d3316Smrg else 45966e7d3316Smrg # If libtool objects are unsupported, then we need to preload. 45976e7d3316Smrg prev=dlprefiles 45986e7d3316Smrg fi 45996e7d3316Smrg fi 4600a966c04fSmrg 46016e7d3316Smrg # CHECK ME: I think I busted this. -Ossama 46026e7d3316Smrg if test "$prev" = dlprefiles; then 46036e7d3316Smrg # Preload the old-style object. 46046e7d3316Smrg dlprefiles="$dlprefiles $pic_object" 46056e7d3316Smrg prev= 46066e7d3316Smrg fi 4607a966c04fSmrg 46086e7d3316Smrg # A PIC object. 46096e7d3316Smrg func_append libobjs " $pic_object" 46106e7d3316Smrg arg="$pic_object" 46116e7d3316Smrg fi 4612a966c04fSmrg 46136e7d3316Smrg # Non-PIC object. 46146e7d3316Smrg if test "$non_pic_object" != none; then 46156e7d3316Smrg # Prepend the subdirectory the object is found in. 46166e7d3316Smrg non_pic_object="$xdir$non_pic_object" 4617a966c04fSmrg 46186e7d3316Smrg # A standard non-PIC object 46196e7d3316Smrg func_append non_pic_objects " $non_pic_object" 46206e7d3316Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 46216e7d3316Smrg arg="$non_pic_object" 46226e7d3316Smrg fi 46236e7d3316Smrg else 46246e7d3316Smrg # If the PIC object exists, use it instead. 46256e7d3316Smrg # $xdir was prepended to $pic_object above. 46266e7d3316Smrg non_pic_object="$pic_object" 46276e7d3316Smrg func_append non_pic_objects " $non_pic_object" 46286e7d3316Smrg fi 46296e7d3316Smrg else 46306e7d3316Smrg # Only an error if not doing a dry-run. 46316e7d3316Smrg if $opt_dry_run; then 46326e7d3316Smrg # Extract subdirectory from the argument. 46336e7d3316Smrg func_dirname "$arg" "/" "" 46346e7d3316Smrg xdir="$func_dirname_result" 46356e7d3316Smrg 46366e7d3316Smrg func_lo2o "$arg" 46376e7d3316Smrg pic_object=$xdir$objdir/$func_lo2o_result 46386e7d3316Smrg non_pic_object=$xdir$func_lo2o_result 46396e7d3316Smrg func_append libobjs " $pic_object" 46406e7d3316Smrg func_append non_pic_objects " $non_pic_object" 46416e7d3316Smrg else 46426e7d3316Smrg func_fatal_error "\`$arg' is not a valid libtool object" 46436e7d3316Smrg fi 46446e7d3316Smrg fi 46456e7d3316Smrg done 4646a966c04fSmrg else 46476e7d3316Smrg func_fatal_error "link input file \`$arg' does not exist" 4648a966c04fSmrg fi 46496e7d3316Smrg arg=$save_arg 46506e7d3316Smrg prev= 46516e7d3316Smrg continue 46526e7d3316Smrg ;; 46536e7d3316Smrg precious_regex) 46546e7d3316Smrg precious_files_regex="$arg" 46556e7d3316Smrg prev= 46566e7d3316Smrg continue 46576e7d3316Smrg ;; 46586e7d3316Smrg release) 46596e7d3316Smrg release="-$arg" 46606e7d3316Smrg prev= 46616e7d3316Smrg continue 46626e7d3316Smrg ;; 46636e7d3316Smrg rpath | xrpath) 46646e7d3316Smrg # We need an absolute path. 46656e7d3316Smrg case $arg in 46666e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 46676e7d3316Smrg *) 46686e7d3316Smrg func_fatal_error "only absolute run-paths are allowed" 46696e7d3316Smrg ;; 46706e7d3316Smrg esac 46716e7d3316Smrg if test "$prev" = rpath; then 46726e7d3316Smrg case "$rpath " in 46736e7d3316Smrg *" $arg "*) ;; 46746e7d3316Smrg *) rpath="$rpath $arg" ;; 46756e7d3316Smrg esac 4676a966c04fSmrg else 46776e7d3316Smrg case "$xrpath " in 46786e7d3316Smrg *" $arg "*) ;; 46796e7d3316Smrg *) xrpath="$xrpath $arg" ;; 46806e7d3316Smrg esac 4681a966c04fSmrg fi 46826e7d3316Smrg prev= 46836e7d3316Smrg continue 46846e7d3316Smrg ;; 46856e7d3316Smrg shrext) 46866e7d3316Smrg shrext_cmds="$arg" 46876e7d3316Smrg prev= 46886e7d3316Smrg continue 46896e7d3316Smrg ;; 46906e7d3316Smrg weak) 46916e7d3316Smrg weak_libs="$weak_libs $arg" 46926e7d3316Smrg prev= 46936e7d3316Smrg continue 46946e7d3316Smrg ;; 46956e7d3316Smrg xcclinker) 46966e7d3316Smrg linker_flags="$linker_flags $qarg" 46976e7d3316Smrg compiler_flags="$compiler_flags $qarg" 46986e7d3316Smrg prev= 46996e7d3316Smrg func_append compile_command " $qarg" 47006e7d3316Smrg func_append finalize_command " $qarg" 47016e7d3316Smrg continue 47026e7d3316Smrg ;; 47036e7d3316Smrg xcompiler) 47046e7d3316Smrg compiler_flags="$compiler_flags $qarg" 47056e7d3316Smrg prev= 47066e7d3316Smrg func_append compile_command " $qarg" 47076e7d3316Smrg func_append finalize_command " $qarg" 47086e7d3316Smrg continue 47096e7d3316Smrg ;; 47106e7d3316Smrg xlinker) 47116e7d3316Smrg linker_flags="$linker_flags $qarg" 47126e7d3316Smrg compiler_flags="$compiler_flags $wl$qarg" 47136e7d3316Smrg prev= 47146e7d3316Smrg func_append compile_command " $wl$qarg" 47156e7d3316Smrg func_append finalize_command " $wl$qarg" 47166e7d3316Smrg continue 47176e7d3316Smrg ;; 47186e7d3316Smrg *) 47196e7d3316Smrg eval "$prev=\"\$arg\"" 47206e7d3316Smrg prev= 47216e7d3316Smrg continue 47226e7d3316Smrg ;; 4723a966c04fSmrg esac 47246e7d3316Smrg fi # test -n "$prev" 4725a966c04fSmrg 47266e7d3316Smrg prevarg="$arg" 4727a966c04fSmrg 47286e7d3316Smrg case $arg in 47296e7d3316Smrg -all-static) 47306e7d3316Smrg if test -n "$link_static_flag"; then 47316e7d3316Smrg # See comment for -static flag below, for more details. 47326e7d3316Smrg func_append compile_command " $link_static_flag" 47336e7d3316Smrg func_append finalize_command " $link_static_flag" 47346e7d3316Smrg fi 47356e7d3316Smrg continue 47366e7d3316Smrg ;; 4737a966c04fSmrg 47386e7d3316Smrg -allow-undefined) 47396e7d3316Smrg # FIXME: remove this flag sometime in the future. 47406e7d3316Smrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 47416e7d3316Smrg ;; 4742a966c04fSmrg 47436e7d3316Smrg -avoid-version) 47446e7d3316Smrg avoid_version=yes 47456e7d3316Smrg continue 47466e7d3316Smrg ;; 4747a966c04fSmrg 47486e7d3316Smrg -bindir) 47496e7d3316Smrg prev=bindir 47506e7d3316Smrg continue 47516e7d3316Smrg ;; 4752a966c04fSmrg 47536e7d3316Smrg -dlopen) 47546e7d3316Smrg prev=dlfiles 47556e7d3316Smrg continue 47566e7d3316Smrg ;; 4757a966c04fSmrg 47586e7d3316Smrg -dlpreopen) 47596e7d3316Smrg prev=dlprefiles 47606e7d3316Smrg continue 47616e7d3316Smrg ;; 4762a966c04fSmrg 47636e7d3316Smrg -export-dynamic) 47646e7d3316Smrg export_dynamic=yes 47656e7d3316Smrg continue 47666e7d3316Smrg ;; 4767a966c04fSmrg 47686e7d3316Smrg -export-symbols | -export-symbols-regex) 47696e7d3316Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 47706e7d3316Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 47716e7d3316Smrg fi 47726e7d3316Smrg if test "X$arg" = "X-export-symbols"; then 47736e7d3316Smrg prev=expsyms 47746e7d3316Smrg else 47756e7d3316Smrg prev=expsyms_regex 47766e7d3316Smrg fi 47776e7d3316Smrg continue 47786e7d3316Smrg ;; 4779a966c04fSmrg 47806e7d3316Smrg -framework) 47816e7d3316Smrg prev=framework 47826e7d3316Smrg continue 47836e7d3316Smrg ;; 4784a966c04fSmrg 47856e7d3316Smrg -inst-prefix-dir) 47866e7d3316Smrg prev=inst_prefix 47876e7d3316Smrg continue 47886e7d3316Smrg ;; 4789a966c04fSmrg 47906e7d3316Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 47916e7d3316Smrg # so, if we see these flags be careful not to treat them like -L 47926e7d3316Smrg -L[A-Z][A-Z]*:*) 47936e7d3316Smrg case $with_gcc/$host in 47946e7d3316Smrg no/*-*-irix* | /*-*-irix*) 47956e7d3316Smrg func_append compile_command " $arg" 47966e7d3316Smrg func_append finalize_command " $arg" 47976e7d3316Smrg ;; 47986e7d3316Smrg esac 47996e7d3316Smrg continue 48006e7d3316Smrg ;; 4801a966c04fSmrg 48026e7d3316Smrg -L*) 48036e7d3316Smrg func_stripname '-L' '' "$arg" 48046e7d3316Smrg dir=$func_stripname_result 48056e7d3316Smrg if test -z "$dir"; then 48066e7d3316Smrg if test "$#" -gt 0; then 48076e7d3316Smrg func_fatal_error "require no space between \`-L' and \`$1'" 48086e7d3316Smrg else 48096e7d3316Smrg func_fatal_error "need path for \`-L' option" 48106e7d3316Smrg fi 48116e7d3316Smrg fi 48126e7d3316Smrg # We need an absolute path. 48136e7d3316Smrg case $dir in 48146e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 48156e7d3316Smrg *) 48166e7d3316Smrg absdir=`cd "$dir" && pwd` 48176e7d3316Smrg test -z "$absdir" && \ 48186e7d3316Smrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 48196e7d3316Smrg dir="$absdir" 48206e7d3316Smrg ;; 48216e7d3316Smrg esac 48226e7d3316Smrg case "$deplibs " in 48236e7d3316Smrg *" -L$dir "*) ;; 48246e7d3316Smrg *) 48256e7d3316Smrg deplibs="$deplibs -L$dir" 48266e7d3316Smrg lib_search_path="$lib_search_path $dir" 48276e7d3316Smrg ;; 48286e7d3316Smrg esac 48296e7d3316Smrg case $host in 48306e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 48316e7d3316Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 48326e7d3316Smrg case :$dllsearchpath: in 48336e7d3316Smrg *":$dir:"*) ;; 48346e7d3316Smrg ::) dllsearchpath=$dir;; 48356e7d3316Smrg *) dllsearchpath="$dllsearchpath:$dir";; 48366e7d3316Smrg esac 48376e7d3316Smrg case :$dllsearchpath: in 48386e7d3316Smrg *":$testbindir:"*) ;; 48396e7d3316Smrg ::) dllsearchpath=$testbindir;; 48406e7d3316Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 48416e7d3316Smrg esac 48426e7d3316Smrg ;; 48436e7d3316Smrg esac 48446e7d3316Smrg continue 48456e7d3316Smrg ;; 4846a966c04fSmrg 48476e7d3316Smrg -l*) 48486e7d3316Smrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 48496e7d3316Smrg case $host in 48506e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 48516e7d3316Smrg # These systems don't actually have a C or math library (as such) 48526e7d3316Smrg continue 48536e7d3316Smrg ;; 48546e7d3316Smrg *-*-os2*) 48556e7d3316Smrg # These systems don't actually have a C library (as such) 48566e7d3316Smrg test "X$arg" = "X-lc" && continue 48576e7d3316Smrg ;; 48586e7d3316Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 48596e7d3316Smrg # Do not include libc due to us having libc/libc_r. 48606e7d3316Smrg test "X$arg" = "X-lc" && continue 48616e7d3316Smrg ;; 48626e7d3316Smrg *-*-rhapsody* | *-*-darwin1.[012]) 48636e7d3316Smrg # Rhapsody C and math libraries are in the System framework 48646e7d3316Smrg deplibs="$deplibs System.ltframework" 48656e7d3316Smrg continue 48666e7d3316Smrg ;; 48676e7d3316Smrg *-*-sco3.2v5* | *-*-sco5v6*) 48686e7d3316Smrg # Causes problems with __ctype 48696e7d3316Smrg test "X$arg" = "X-lc" && continue 48706e7d3316Smrg ;; 48716e7d3316Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 48726e7d3316Smrg # Compiler inserts libc in the correct place for threads to work 48736e7d3316Smrg test "X$arg" = "X-lc" && continue 48746e7d3316Smrg ;; 48756e7d3316Smrg esac 48766e7d3316Smrg elif test "X$arg" = "X-lc_r"; then 48776e7d3316Smrg case $host in 48786e7d3316Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 48796e7d3316Smrg # Do not include libc_r directly, use -pthread flag. 48806e7d3316Smrg continue 48816e7d3316Smrg ;; 48826e7d3316Smrg esac 48836e7d3316Smrg fi 48846e7d3316Smrg deplibs="$deplibs $arg" 48856e7d3316Smrg continue 48866e7d3316Smrg ;; 4887a966c04fSmrg 48886e7d3316Smrg -module) 48896e7d3316Smrg module=yes 48906e7d3316Smrg continue 48916e7d3316Smrg ;; 4892a966c04fSmrg 48936e7d3316Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 48946e7d3316Smrg # classes, name mangling, and exception handling. 48956e7d3316Smrg # Darwin uses the -arch flag to determine output architecture. 48966e7d3316Smrg -model|-arch|-isysroot) 48976e7d3316Smrg compiler_flags="$compiler_flags $arg" 48986e7d3316Smrg func_append compile_command " $arg" 48996e7d3316Smrg func_append finalize_command " $arg" 49006e7d3316Smrg prev=xcompiler 49016e7d3316Smrg continue 49026e7d3316Smrg ;; 4903a966c04fSmrg 49046e7d3316Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 49056e7d3316Smrg compiler_flags="$compiler_flags $arg" 49066e7d3316Smrg func_append compile_command " $arg" 49076e7d3316Smrg func_append finalize_command " $arg" 49086e7d3316Smrg case "$new_inherited_linker_flags " in 49096e7d3316Smrg *" $arg "*) ;; 49106e7d3316Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; 49116e7d3316Smrg esac 49126e7d3316Smrg continue 49136e7d3316Smrg ;; 4914a966c04fSmrg 49156e7d3316Smrg -multi_module) 49166e7d3316Smrg single_module="${wl}-multi_module" 49176e7d3316Smrg continue 49186e7d3316Smrg ;; 4919a966c04fSmrg 49206e7d3316Smrg -no-fast-install) 49216e7d3316Smrg fast_install=no 49226e7d3316Smrg continue 49236e7d3316Smrg ;; 4924a966c04fSmrg 49256e7d3316Smrg -no-install) 49266e7d3316Smrg case $host in 49276e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 49286e7d3316Smrg # The PATH hackery in wrapper scripts is required on Windows 49296e7d3316Smrg # and Darwin in order for the loader to find any dlls it needs. 49306e7d3316Smrg func_warning "\`-no-install' is ignored for $host" 49316e7d3316Smrg func_warning "assuming \`-no-fast-install' instead" 49326e7d3316Smrg fast_install=no 49336e7d3316Smrg ;; 49346e7d3316Smrg *) no_install=yes ;; 49356e7d3316Smrg esac 49366e7d3316Smrg continue 49376e7d3316Smrg ;; 4938a966c04fSmrg 49396e7d3316Smrg -no-undefined) 49406e7d3316Smrg allow_undefined=no 49416e7d3316Smrg continue 49426e7d3316Smrg ;; 4943a966c04fSmrg 49446e7d3316Smrg -objectlist) 49456e7d3316Smrg prev=objectlist 49466e7d3316Smrg continue 49476e7d3316Smrg ;; 4948a966c04fSmrg 49496e7d3316Smrg -o) prev=output ;; 4950a966c04fSmrg 49516e7d3316Smrg -precious-files-regex) 49526e7d3316Smrg prev=precious_regex 49536e7d3316Smrg continue 49546e7d3316Smrg ;; 4955a966c04fSmrg 49566e7d3316Smrg -release) 49576e7d3316Smrg prev=release 49586e7d3316Smrg continue 49596e7d3316Smrg ;; 4960a966c04fSmrg 49616e7d3316Smrg -rpath) 49626e7d3316Smrg prev=rpath 49636e7d3316Smrg continue 49646e7d3316Smrg ;; 4965a966c04fSmrg 49666e7d3316Smrg -R) 49676e7d3316Smrg prev=xrpath 49686e7d3316Smrg continue 49696e7d3316Smrg ;; 4970a966c04fSmrg 49716e7d3316Smrg -R*) 49726e7d3316Smrg func_stripname '-R' '' "$arg" 49736e7d3316Smrg dir=$func_stripname_result 49746e7d3316Smrg # We need an absolute path. 49756e7d3316Smrg case $dir in 49766e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 49776e7d3316Smrg *) 49786e7d3316Smrg func_fatal_error "only absolute run-paths are allowed" 49796e7d3316Smrg ;; 49806e7d3316Smrg esac 49816e7d3316Smrg case "$xrpath " in 49826e7d3316Smrg *" $dir "*) ;; 49836e7d3316Smrg *) xrpath="$xrpath $dir" ;; 49846e7d3316Smrg esac 49856e7d3316Smrg continue 49866e7d3316Smrg ;; 4987a966c04fSmrg 49886e7d3316Smrg -shared) 49896e7d3316Smrg # The effects of -shared are defined in a previous loop. 49906e7d3316Smrg continue 49916e7d3316Smrg ;; 4992a966c04fSmrg 49936e7d3316Smrg -shrext) 49946e7d3316Smrg prev=shrext 49956e7d3316Smrg continue 49966e7d3316Smrg ;; 4997a966c04fSmrg 49986e7d3316Smrg -static | -static-libtool-libs) 49996e7d3316Smrg # The effects of -static are defined in a previous loop. 50006e7d3316Smrg # We used to do the same as -all-static on platforms that 50016e7d3316Smrg # didn't have a PIC flag, but the assumption that the effects 50026e7d3316Smrg # would be equivalent was wrong. It would break on at least 50036e7d3316Smrg # Digital Unix and AIX. 50046e7d3316Smrg continue 50056e7d3316Smrg ;; 5006a966c04fSmrg 50076e7d3316Smrg -thread-safe) 50086e7d3316Smrg thread_safe=yes 50096e7d3316Smrg continue 50106e7d3316Smrg ;; 5011a966c04fSmrg 50126e7d3316Smrg -version-info) 50136e7d3316Smrg prev=vinfo 50146e7d3316Smrg continue 50156e7d3316Smrg ;; 5016a966c04fSmrg 50176e7d3316Smrg -version-number) 50186e7d3316Smrg prev=vinfo 50196e7d3316Smrg vinfo_number=yes 50206e7d3316Smrg continue 50216e7d3316Smrg ;; 5022a966c04fSmrg 50236e7d3316Smrg -weak) 50246e7d3316Smrg prev=weak 50256e7d3316Smrg continue 50266e7d3316Smrg ;; 5027a966c04fSmrg 50286e7d3316Smrg -Wc,*) 50296e7d3316Smrg func_stripname '-Wc,' '' "$arg" 50306e7d3316Smrg args=$func_stripname_result 50316e7d3316Smrg arg= 50326e7d3316Smrg save_ifs="$IFS"; IFS=',' 50336e7d3316Smrg for flag in $args; do 50346e7d3316Smrg IFS="$save_ifs" 50356e7d3316Smrg func_quote_for_eval "$flag" 50366e7d3316Smrg arg="$arg $func_quote_for_eval_result" 50376e7d3316Smrg compiler_flags="$compiler_flags $func_quote_for_eval_result" 50386e7d3316Smrg done 50396e7d3316Smrg IFS="$save_ifs" 50406e7d3316Smrg func_stripname ' ' '' "$arg" 50416e7d3316Smrg arg=$func_stripname_result 50426e7d3316Smrg ;; 5043a966c04fSmrg 50446e7d3316Smrg -Wl,*) 50456e7d3316Smrg func_stripname '-Wl,' '' "$arg" 50466e7d3316Smrg args=$func_stripname_result 50476e7d3316Smrg arg= 50486e7d3316Smrg save_ifs="$IFS"; IFS=',' 50496e7d3316Smrg for flag in $args; do 50506e7d3316Smrg IFS="$save_ifs" 50516e7d3316Smrg func_quote_for_eval "$flag" 50526e7d3316Smrg arg="$arg $wl$func_quote_for_eval_result" 50536e7d3316Smrg compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" 50546e7d3316Smrg linker_flags="$linker_flags $func_quote_for_eval_result" 50556e7d3316Smrg done 50566e7d3316Smrg IFS="$save_ifs" 50576e7d3316Smrg func_stripname ' ' '' "$arg" 50586e7d3316Smrg arg=$func_stripname_result 50596e7d3316Smrg ;; 5060a966c04fSmrg 50616e7d3316Smrg -Xcompiler) 50626e7d3316Smrg prev=xcompiler 50636e7d3316Smrg continue 50646e7d3316Smrg ;; 5065a966c04fSmrg 50666e7d3316Smrg -Xlinker) 50676e7d3316Smrg prev=xlinker 50686e7d3316Smrg continue 50696e7d3316Smrg ;; 5070a966c04fSmrg 50716e7d3316Smrg -XCClinker) 50726e7d3316Smrg prev=xcclinker 50736e7d3316Smrg continue 50746e7d3316Smrg ;; 5075a966c04fSmrg 50766e7d3316Smrg # -msg_* for osf cc 50776e7d3316Smrg -msg_*) 50786e7d3316Smrg func_quote_for_eval "$arg" 50796e7d3316Smrg arg="$func_quote_for_eval_result" 50806e7d3316Smrg ;; 5081a966c04fSmrg 50826e7d3316Smrg # Flags to be passed through unchanged, with rationale: 50836e7d3316Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 50846e7d3316Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 50856e7d3316Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 50866e7d3316Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 50876e7d3316Smrg # -q* compiler args for the IBM compiler 50886e7d3316Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 50896e7d3316Smrg # -F/path path to uninstalled frameworks, gcc on darwin 50906e7d3316Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 50916e7d3316Smrg # @file GCC response files 50926e7d3316Smrg # -tp=* Portland pgcc target processor selection 50936e7d3316Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 50946e7d3316Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*) 50956e7d3316Smrg func_quote_for_eval "$arg" 50966e7d3316Smrg arg="$func_quote_for_eval_result" 50976e7d3316Smrg func_append compile_command " $arg" 50986e7d3316Smrg func_append finalize_command " $arg" 50996e7d3316Smrg compiler_flags="$compiler_flags $arg" 51006e7d3316Smrg continue 51016e7d3316Smrg ;; 5102a966c04fSmrg 51036e7d3316Smrg # Some other compiler flag. 51046e7d3316Smrg -* | +*) 51056e7d3316Smrg func_quote_for_eval "$arg" 51066e7d3316Smrg arg="$func_quote_for_eval_result" 51076e7d3316Smrg ;; 5108a966c04fSmrg 51096e7d3316Smrg *.$objext) 51106e7d3316Smrg # A standard object. 51116e7d3316Smrg objs="$objs $arg" 51126e7d3316Smrg ;; 5113a966c04fSmrg 51146e7d3316Smrg *.lo) 51156e7d3316Smrg # A libtool-controlled object. 5116a966c04fSmrg 51176e7d3316Smrg # Check to see that this really is a libtool object. 51186e7d3316Smrg if func_lalib_unsafe_p "$arg"; then 51196e7d3316Smrg pic_object= 51206e7d3316Smrg non_pic_object= 5121a966c04fSmrg 51226e7d3316Smrg # Read the .lo file 51236e7d3316Smrg func_source "$arg" 5124a966c04fSmrg 51256e7d3316Smrg if test -z "$pic_object" || 51266e7d3316Smrg test -z "$non_pic_object" || 51276e7d3316Smrg test "$pic_object" = none && 51286e7d3316Smrg test "$non_pic_object" = none; then 51296e7d3316Smrg func_fatal_error "cannot find name of object for \`$arg'" 51306e7d3316Smrg fi 51312e2dd055Smrg 51326e7d3316Smrg # Extract subdirectory from the argument. 51336e7d3316Smrg func_dirname "$arg" "/" "" 51346e7d3316Smrg xdir="$func_dirname_result" 5135a966c04fSmrg 51366e7d3316Smrg if test "$pic_object" != none; then 51376e7d3316Smrg # Prepend the subdirectory the object is found in. 51386e7d3316Smrg pic_object="$xdir$pic_object" 5139a966c04fSmrg 51406e7d3316Smrg if test "$prev" = dlfiles; then 51416e7d3316Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 51426e7d3316Smrg dlfiles="$dlfiles $pic_object" 51436e7d3316Smrg prev= 51446e7d3316Smrg continue 51456e7d3316Smrg else 51466e7d3316Smrg # If libtool objects are unsupported, then we need to preload. 51476e7d3316Smrg prev=dlprefiles 51486e7d3316Smrg fi 51496e7d3316Smrg fi 51506e7d3316Smrg 51516e7d3316Smrg # CHECK ME: I think I busted this. -Ossama 51526e7d3316Smrg if test "$prev" = dlprefiles; then 51536e7d3316Smrg # Preload the old-style object. 51546e7d3316Smrg dlprefiles="$dlprefiles $pic_object" 51556e7d3316Smrg prev= 51566e7d3316Smrg fi 51576e7d3316Smrg 51586e7d3316Smrg # A PIC object. 51596e7d3316Smrg func_append libobjs " $pic_object" 51606e7d3316Smrg arg="$pic_object" 51616e7d3316Smrg fi 51626e7d3316Smrg 51636e7d3316Smrg # Non-PIC object. 51646e7d3316Smrg if test "$non_pic_object" != none; then 51656e7d3316Smrg # Prepend the subdirectory the object is found in. 51666e7d3316Smrg non_pic_object="$xdir$non_pic_object" 51676e7d3316Smrg 51686e7d3316Smrg # A standard non-PIC object 51696e7d3316Smrg func_append non_pic_objects " $non_pic_object" 51706e7d3316Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 51716e7d3316Smrg arg="$non_pic_object" 51726e7d3316Smrg fi 51736e7d3316Smrg else 51746e7d3316Smrg # If the PIC object exists, use it instead. 51756e7d3316Smrg # $xdir was prepended to $pic_object above. 51766e7d3316Smrg non_pic_object="$pic_object" 51776e7d3316Smrg func_append non_pic_objects " $non_pic_object" 51786e7d3316Smrg fi 51796e7d3316Smrg else 51806e7d3316Smrg # Only an error if not doing a dry-run. 51816e7d3316Smrg if $opt_dry_run; then 51826e7d3316Smrg # Extract subdirectory from the argument. 51836e7d3316Smrg func_dirname "$arg" "/" "" 51846e7d3316Smrg xdir="$func_dirname_result" 51856e7d3316Smrg 51866e7d3316Smrg func_lo2o "$arg" 51876e7d3316Smrg pic_object=$xdir$objdir/$func_lo2o_result 51886e7d3316Smrg non_pic_object=$xdir$func_lo2o_result 51896e7d3316Smrg func_append libobjs " $pic_object" 51906e7d3316Smrg func_append non_pic_objects " $non_pic_object" 51916e7d3316Smrg else 51926e7d3316Smrg func_fatal_error "\`$arg' is not a valid libtool object" 51936e7d3316Smrg fi 51946e7d3316Smrg fi 51956e7d3316Smrg ;; 51966e7d3316Smrg 51976e7d3316Smrg *.$libext) 51986e7d3316Smrg # An archive. 51996e7d3316Smrg deplibs="$deplibs $arg" 52006e7d3316Smrg old_deplibs="$old_deplibs $arg" 52016e7d3316Smrg continue 52026e7d3316Smrg ;; 52036e7d3316Smrg 52046e7d3316Smrg *.la) 52056e7d3316Smrg # A libtool-controlled library. 52066e7d3316Smrg 52076e7d3316Smrg if test "$prev" = dlfiles; then 52086e7d3316Smrg # This library was specified with -dlopen. 52096e7d3316Smrg dlfiles="$dlfiles $arg" 52106e7d3316Smrg prev= 52116e7d3316Smrg elif test "$prev" = dlprefiles; then 52126e7d3316Smrg # The library was specified with -dlpreopen. 52136e7d3316Smrg dlprefiles="$dlprefiles $arg" 52146e7d3316Smrg prev= 52156e7d3316Smrg else 52166e7d3316Smrg deplibs="$deplibs $arg" 52176e7d3316Smrg fi 52186e7d3316Smrg continue 52196e7d3316Smrg ;; 52206e7d3316Smrg 52216e7d3316Smrg # Some other compiler argument. 52226e7d3316Smrg *) 52236e7d3316Smrg # Unknown arguments in both finalize_command and compile_command need 52246e7d3316Smrg # to be aesthetically quoted because they are evaled later. 52256e7d3316Smrg func_quote_for_eval "$arg" 52266e7d3316Smrg arg="$func_quote_for_eval_result" 52276e7d3316Smrg ;; 52286e7d3316Smrg esac # arg 52296e7d3316Smrg 52306e7d3316Smrg # Now actually substitute the argument into the commands. 52316e7d3316Smrg if test -n "$arg"; then 52326e7d3316Smrg func_append compile_command " $arg" 52336e7d3316Smrg func_append finalize_command " $arg" 52346e7d3316Smrg fi 52356e7d3316Smrg done # argument parsing loop 52366e7d3316Smrg 52376e7d3316Smrg test -n "$prev" && \ 52386e7d3316Smrg func_fatal_help "the \`$prevarg' option requires an argument" 52396e7d3316Smrg 52406e7d3316Smrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 52416e7d3316Smrg eval arg=\"$export_dynamic_flag_spec\" 52426e7d3316Smrg func_append compile_command " $arg" 52436e7d3316Smrg func_append finalize_command " $arg" 52446e7d3316Smrg fi 52456e7d3316Smrg 52466e7d3316Smrg oldlibs= 52476e7d3316Smrg # calculate the name of the file, without its directory 52486e7d3316Smrg func_basename "$output" 52496e7d3316Smrg outputname="$func_basename_result" 52506e7d3316Smrg libobjs_save="$libobjs" 52516e7d3316Smrg 52526e7d3316Smrg if test -n "$shlibpath_var"; then 52536e7d3316Smrg # get the directories listed in $shlibpath_var 52546e7d3316Smrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 5255a966c04fSmrg else 52566e7d3316Smrg shlib_search_path= 5257a966c04fSmrg fi 52586e7d3316Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 52596e7d3316Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 5260a966c04fSmrg 52616e7d3316Smrg func_dirname "$output" "/" "" 52626e7d3316Smrg output_objdir="$func_dirname_result$objdir" 52636e7d3316Smrg # Create the object directory. 52646e7d3316Smrg func_mkdir_p "$output_objdir" 5265a966c04fSmrg 52666e7d3316Smrg # Determine the type of output 52676e7d3316Smrg case $output in 52686e7d3316Smrg "") 52696e7d3316Smrg func_fatal_help "you must specify an output file" 52706e7d3316Smrg ;; 52716e7d3316Smrg *.$libext) linkmode=oldlib ;; 52726e7d3316Smrg *.lo | *.$objext) linkmode=obj ;; 52736e7d3316Smrg *.la) linkmode=lib ;; 52746e7d3316Smrg *) linkmode=prog ;; # Anything else should be a program. 52756e7d3316Smrg esac 52766e7d3316Smrg 52776e7d3316Smrg specialdeplibs= 52786e7d3316Smrg 52796e7d3316Smrg libs= 52806e7d3316Smrg # Find all interdependent deplibs by searching for libraries 52816e7d3316Smrg # that are linked more than once (e.g. -la -lb -la) 52826e7d3316Smrg for deplib in $deplibs; do 52836e7d3316Smrg if $opt_duplicate_deps ; then 52846e7d3316Smrg case "$libs " in 52856e7d3316Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 52866e7d3316Smrg esac 52876e7d3316Smrg fi 52886e7d3316Smrg libs="$libs $deplib" 52896e7d3316Smrg done 52906e7d3316Smrg 52916e7d3316Smrg if test "$linkmode" = lib; then 52926e7d3316Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 52936e7d3316Smrg 52946e7d3316Smrg # Compute libraries that are listed more than once in $predeps 52956e7d3316Smrg # $postdeps and mark them as special (i.e., whose duplicates are 52966e7d3316Smrg # not to be eliminated). 52976e7d3316Smrg pre_post_deps= 52986e7d3316Smrg if $opt_duplicate_compiler_generated_deps; then 52996e7d3316Smrg for pre_post_dep in $predeps $postdeps; do 53006e7d3316Smrg case "$pre_post_deps " in 53016e7d3316Smrg *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; 53026e7d3316Smrg esac 53036e7d3316Smrg pre_post_deps="$pre_post_deps $pre_post_dep" 53046e7d3316Smrg done 53056e7d3316Smrg fi 53066e7d3316Smrg pre_post_deps= 53076e7d3316Smrg fi 53086e7d3316Smrg 53096e7d3316Smrg deplibs= 53106e7d3316Smrg newdependency_libs= 53116e7d3316Smrg newlib_search_path= 53126e7d3316Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 53136e7d3316Smrg notinst_deplibs= # not-installed libtool libraries 53146e7d3316Smrg notinst_path= # paths that contain not-installed libtool libraries 53156e7d3316Smrg 53166e7d3316Smrg case $linkmode in 53176e7d3316Smrg lib) 53186e7d3316Smrg passes="conv dlpreopen link" 53196e7d3316Smrg for file in $dlfiles $dlprefiles; do 53206e7d3316Smrg case $file in 53216e7d3316Smrg *.la) ;; 53226e7d3316Smrg *) 53236e7d3316Smrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 53246e7d3316Smrg ;; 53256e7d3316Smrg esac 53266e7d3316Smrg done 53276e7d3316Smrg ;; 53286e7d3316Smrg prog) 53296e7d3316Smrg compile_deplibs= 53306e7d3316Smrg finalize_deplibs= 53316e7d3316Smrg alldeplibs=no 53326e7d3316Smrg newdlfiles= 53336e7d3316Smrg newdlprefiles= 53346e7d3316Smrg passes="conv scan dlopen dlpreopen link" 53356e7d3316Smrg ;; 53366e7d3316Smrg *) passes="conv" 53376e7d3316Smrg ;; 53386e7d3316Smrg esac 53396e7d3316Smrg 53406e7d3316Smrg for pass in $passes; do 53416e7d3316Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 53426e7d3316Smrg # so that -L comes before libs that need it for instance... 53436e7d3316Smrg if test "$linkmode,$pass" = "lib,link"; then 53446e7d3316Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 53456e7d3316Smrg ## order, and fix it there properly 53466e7d3316Smrg tmp_deplibs= 53476e7d3316Smrg for deplib in $deplibs; do 53486e7d3316Smrg tmp_deplibs="$deplib $tmp_deplibs" 53496e7d3316Smrg done 53506e7d3316Smrg deplibs="$tmp_deplibs" 53516e7d3316Smrg fi 53526e7d3316Smrg 53536e7d3316Smrg if test "$linkmode,$pass" = "lib,link" || 53546e7d3316Smrg test "$linkmode,$pass" = "prog,scan"; then 53556e7d3316Smrg libs="$deplibs" 53566e7d3316Smrg deplibs= 53576e7d3316Smrg fi 53586e7d3316Smrg if test "$linkmode" = prog; then 53596e7d3316Smrg case $pass in 53606e7d3316Smrg dlopen) libs="$dlfiles" ;; 53616e7d3316Smrg dlpreopen) libs="$dlprefiles" ;; 53626e7d3316Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 53636e7d3316Smrg esac 53646e7d3316Smrg fi 53656e7d3316Smrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 53666e7d3316Smrg # Collect and forward deplibs of preopened libtool libs 53676e7d3316Smrg for lib in $dlprefiles; do 53686e7d3316Smrg # Ignore non-libtool-libs 53696e7d3316Smrg dependency_libs= 53706e7d3316Smrg case $lib in 53716e7d3316Smrg *.la) func_source "$lib" ;; 53726e7d3316Smrg esac 53736e7d3316Smrg 53746e7d3316Smrg # Collect preopened libtool deplibs, except any this library 53756e7d3316Smrg # has declared as weak libs 53766e7d3316Smrg for deplib in $dependency_libs; do 53776e7d3316Smrg func_basename "$deplib" 53786e7d3316Smrg deplib_base=$func_basename_result 53796e7d3316Smrg case " $weak_libs " in 53806e7d3316Smrg *" $deplib_base "*) ;; 53816e7d3316Smrg *) deplibs="$deplibs $deplib" ;; 53826e7d3316Smrg esac 53836e7d3316Smrg done 53846e7d3316Smrg done 53856e7d3316Smrg libs="$dlprefiles" 53866e7d3316Smrg fi 53876e7d3316Smrg if test "$pass" = dlopen; then 53886e7d3316Smrg # Collect dlpreopened libraries 53896e7d3316Smrg save_deplibs="$deplibs" 53906e7d3316Smrg deplibs= 53916e7d3316Smrg fi 53926e7d3316Smrg 53936e7d3316Smrg for deplib in $libs; do 53946e7d3316Smrg lib= 53956e7d3316Smrg found=no 53966e7d3316Smrg case $deplib in 53976e7d3316Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 53986e7d3316Smrg if test "$linkmode,$pass" = "prog,link"; then 53996e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 54006e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 54016e7d3316Smrg else 54026e7d3316Smrg compiler_flags="$compiler_flags $deplib" 54036e7d3316Smrg if test "$linkmode" = lib ; then 54046e7d3316Smrg case "$new_inherited_linker_flags " in 54056e7d3316Smrg *" $deplib "*) ;; 54066e7d3316Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 54076e7d3316Smrg esac 54086e7d3316Smrg fi 54096e7d3316Smrg fi 54106e7d3316Smrg continue 54116e7d3316Smrg ;; 54126e7d3316Smrg -l*) 54136e7d3316Smrg if test "$linkmode" != lib && test "$linkmode" != prog; then 54146e7d3316Smrg func_warning "\`-l' is ignored for archives/objects" 54156e7d3316Smrg continue 54166e7d3316Smrg fi 54176e7d3316Smrg func_stripname '-l' '' "$deplib" 54186e7d3316Smrg name=$func_stripname_result 54196e7d3316Smrg if test "$linkmode" = lib; then 54206e7d3316Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 54216e7d3316Smrg else 54226e7d3316Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 54236e7d3316Smrg fi 54246e7d3316Smrg for searchdir in $searchdirs; do 54256e7d3316Smrg for search_ext in .la $std_shrext .so .a; do 54266e7d3316Smrg # Search the libtool library 54276e7d3316Smrg lib="$searchdir/lib${name}${search_ext}" 54286e7d3316Smrg if test -f "$lib"; then 54296e7d3316Smrg if test "$search_ext" = ".la"; then 54306e7d3316Smrg found=yes 54316e7d3316Smrg else 54326e7d3316Smrg found=no 54336e7d3316Smrg fi 54346e7d3316Smrg break 2 54356e7d3316Smrg fi 54366e7d3316Smrg done 54376e7d3316Smrg done 54386e7d3316Smrg if test "$found" != yes; then 54396e7d3316Smrg # deplib doesn't seem to be a libtool library 54406e7d3316Smrg if test "$linkmode,$pass" = "prog,link"; then 54416e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 54426e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 54436e7d3316Smrg else 54446e7d3316Smrg deplibs="$deplib $deplibs" 54456e7d3316Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 54466e7d3316Smrg fi 54476e7d3316Smrg continue 54486e7d3316Smrg else # deplib is a libtool library 54496e7d3316Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 54506e7d3316Smrg # We need to do some special things here, and not later. 54516e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 54526e7d3316Smrg case " $predeps $postdeps " in 54536e7d3316Smrg *" $deplib "*) 54546e7d3316Smrg if func_lalib_p "$lib"; then 54556e7d3316Smrg library_names= 54566e7d3316Smrg old_library= 54576e7d3316Smrg func_source "$lib" 54586e7d3316Smrg for l in $old_library $library_names; do 54596e7d3316Smrg ll="$l" 54606e7d3316Smrg done 54616e7d3316Smrg if test "X$ll" = "X$old_library" ; then # only static version available 54626e7d3316Smrg found=no 54636e7d3316Smrg func_dirname "$lib" "" "." 54646e7d3316Smrg ladir="$func_dirname_result" 54656e7d3316Smrg lib=$ladir/$old_library 54666e7d3316Smrg if test "$linkmode,$pass" = "prog,link"; then 54676e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 54686e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 54696e7d3316Smrg else 54706e7d3316Smrg deplibs="$deplib $deplibs" 54716e7d3316Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 54726e7d3316Smrg fi 54736e7d3316Smrg continue 54746e7d3316Smrg fi 54756e7d3316Smrg fi 54766e7d3316Smrg ;; 54776e7d3316Smrg *) ;; 54786e7d3316Smrg esac 54796e7d3316Smrg fi 54806e7d3316Smrg fi 54816e7d3316Smrg ;; # -l 54826e7d3316Smrg *.ltframework) 54836e7d3316Smrg if test "$linkmode,$pass" = "prog,link"; then 54846e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 54856e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 54866e7d3316Smrg else 54876e7d3316Smrg deplibs="$deplib $deplibs" 54886e7d3316Smrg if test "$linkmode" = lib ; then 54896e7d3316Smrg case "$new_inherited_linker_flags " in 54906e7d3316Smrg *" $deplib "*) ;; 54916e7d3316Smrg * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; 54926e7d3316Smrg esac 54936e7d3316Smrg fi 54946e7d3316Smrg fi 54956e7d3316Smrg continue 54966e7d3316Smrg ;; 54976e7d3316Smrg -L*) 54986e7d3316Smrg case $linkmode in 54996e7d3316Smrg lib) 55006e7d3316Smrg deplibs="$deplib $deplibs" 55016e7d3316Smrg test "$pass" = conv && continue 55026e7d3316Smrg newdependency_libs="$deplib $newdependency_libs" 55036e7d3316Smrg func_stripname '-L' '' "$deplib" 55046e7d3316Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 55056e7d3316Smrg ;; 55066e7d3316Smrg prog) 55076e7d3316Smrg if test "$pass" = conv; then 55086e7d3316Smrg deplibs="$deplib $deplibs" 55096e7d3316Smrg continue 55106e7d3316Smrg fi 55116e7d3316Smrg if test "$pass" = scan; then 55126e7d3316Smrg deplibs="$deplib $deplibs" 55136e7d3316Smrg else 55146e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 55156e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 55166e7d3316Smrg fi 55176e7d3316Smrg func_stripname '-L' '' "$deplib" 55186e7d3316Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 55196e7d3316Smrg ;; 55206e7d3316Smrg *) 55216e7d3316Smrg func_warning "\`-L' is ignored for archives/objects" 55226e7d3316Smrg ;; 55236e7d3316Smrg esac # linkmode 55246e7d3316Smrg continue 55256e7d3316Smrg ;; # -L 55266e7d3316Smrg -R*) 55276e7d3316Smrg if test "$pass" = link; then 55286e7d3316Smrg func_stripname '-R' '' "$deplib" 55296e7d3316Smrg dir=$func_stripname_result 55306e7d3316Smrg # Make sure the xrpath contains only unique directories. 55316e7d3316Smrg case "$xrpath " in 55326e7d3316Smrg *" $dir "*) ;; 55336e7d3316Smrg *) xrpath="$xrpath $dir" ;; 55346e7d3316Smrg esac 55356e7d3316Smrg fi 55366e7d3316Smrg deplibs="$deplib $deplibs" 55376e7d3316Smrg continue 55386e7d3316Smrg ;; 55396e7d3316Smrg *.la) lib="$deplib" ;; 55406e7d3316Smrg *.$libext) 55416e7d3316Smrg if test "$pass" = conv; then 55426e7d3316Smrg deplibs="$deplib $deplibs" 55436e7d3316Smrg continue 55446e7d3316Smrg fi 55456e7d3316Smrg case $linkmode in 55466e7d3316Smrg lib) 55476e7d3316Smrg # Linking convenience modules into shared libraries is allowed, 55486e7d3316Smrg # but linking other static libraries is non-portable. 55496e7d3316Smrg case " $dlpreconveniencelibs " in 55506e7d3316Smrg *" $deplib "*) ;; 55516e7d3316Smrg *) 55526e7d3316Smrg valid_a_lib=no 55536e7d3316Smrg case $deplibs_check_method in 55546e7d3316Smrg match_pattern*) 55556e7d3316Smrg set dummy $deplibs_check_method; shift 55566e7d3316Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 55576e7d3316Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 55586e7d3316Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 55596e7d3316Smrg valid_a_lib=yes 55606e7d3316Smrg fi 55616e7d3316Smrg ;; 55626e7d3316Smrg pass_all) 55636e7d3316Smrg valid_a_lib=yes 55646e7d3316Smrg ;; 55656e7d3316Smrg esac 55666e7d3316Smrg if test "$valid_a_lib" != yes; then 55676e7d3316Smrg echo 55686e7d3316Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 55696e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 55706e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 55716e7d3316Smrg echo "*** shared version of the library, which you do not appear to have" 55726e7d3316Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 55736e7d3316Smrg echo "*** that it is just a static archive that I should not use here." 55746e7d3316Smrg else 55756e7d3316Smrg echo 55766e7d3316Smrg $ECHO "*** Warning: Linking the shared library $output against the" 55776e7d3316Smrg $ECHO "*** static library $deplib is not portable!" 55786e7d3316Smrg deplibs="$deplib $deplibs" 55796e7d3316Smrg fi 55806e7d3316Smrg ;; 55816e7d3316Smrg esac 55826e7d3316Smrg continue 55836e7d3316Smrg ;; 55846e7d3316Smrg prog) 55856e7d3316Smrg if test "$pass" != link; then 55866e7d3316Smrg deplibs="$deplib $deplibs" 55876e7d3316Smrg else 55886e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 55896e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 55906e7d3316Smrg fi 55916e7d3316Smrg continue 55926e7d3316Smrg ;; 55936e7d3316Smrg esac # linkmode 55946e7d3316Smrg ;; # *.$libext 55956e7d3316Smrg *.lo | *.$objext) 55966e7d3316Smrg if test "$pass" = conv; then 55976e7d3316Smrg deplibs="$deplib $deplibs" 55986e7d3316Smrg elif test "$linkmode" = prog; then 55996e7d3316Smrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 56006e7d3316Smrg # If there is no dlopen support or we're linking statically, 56016e7d3316Smrg # we need to preload. 56026e7d3316Smrg newdlprefiles="$newdlprefiles $deplib" 56036e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 56046e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 56056e7d3316Smrg else 56066e7d3316Smrg newdlfiles="$newdlfiles $deplib" 56076e7d3316Smrg fi 56086e7d3316Smrg fi 56096e7d3316Smrg continue 56106e7d3316Smrg ;; 56116e7d3316Smrg %DEPLIBS%) 56126e7d3316Smrg alldeplibs=yes 56136e7d3316Smrg continue 56146e7d3316Smrg ;; 56156e7d3316Smrg esac # case $deplib 56166e7d3316Smrg 56176e7d3316Smrg if test "$found" = yes || test -f "$lib"; then : 56186e7d3316Smrg else 56196e7d3316Smrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 56206e7d3316Smrg fi 56216e7d3316Smrg 56226e7d3316Smrg # Check to see that this really is a libtool archive. 56236e7d3316Smrg func_lalib_unsafe_p "$lib" \ 56246e7d3316Smrg || func_fatal_error "\`$lib' is not a valid libtool archive" 56256e7d3316Smrg 56266e7d3316Smrg func_dirname "$lib" "" "." 56276e7d3316Smrg ladir="$func_dirname_result" 56286e7d3316Smrg 56296e7d3316Smrg dlname= 56306e7d3316Smrg dlopen= 56316e7d3316Smrg dlpreopen= 56326e7d3316Smrg libdir= 56336e7d3316Smrg library_names= 56346e7d3316Smrg old_library= 56356e7d3316Smrg inherited_linker_flags= 56366e7d3316Smrg # If the library was installed with an old release of libtool, 56376e7d3316Smrg # it will not redefine variables installed, or shouldnotlink 56386e7d3316Smrg installed=yes 56396e7d3316Smrg shouldnotlink=no 56406e7d3316Smrg avoidtemprpath= 56416e7d3316Smrg 56426e7d3316Smrg 56436e7d3316Smrg # Read the .la file 56446e7d3316Smrg func_source "$lib" 56456e7d3316Smrg 56466e7d3316Smrg # Convert "-framework foo" to "foo.ltframework" 56476e7d3316Smrg if test -n "$inherited_linker_flags"; then 56486e7d3316Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 56496e7d3316Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 56506e7d3316Smrg case " $new_inherited_linker_flags " in 56516e7d3316Smrg *" $tmp_inherited_linker_flag "*) ;; 56526e7d3316Smrg *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; 56536e7d3316Smrg esac 56546e7d3316Smrg done 56556e7d3316Smrg fi 56566e7d3316Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 56576e7d3316Smrg if test "$linkmode,$pass" = "lib,link" || 56586e7d3316Smrg test "$linkmode,$pass" = "prog,scan" || 56596e7d3316Smrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 56606e7d3316Smrg test -n "$dlopen" && dlfiles="$dlfiles $dlopen" 56616e7d3316Smrg test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" 56626e7d3316Smrg fi 56636e7d3316Smrg 56646e7d3316Smrg if test "$pass" = conv; then 56656e7d3316Smrg # Only check for convenience libraries 56666e7d3316Smrg deplibs="$lib $deplibs" 56676e7d3316Smrg if test -z "$libdir"; then 56686e7d3316Smrg if test -z "$old_library"; then 56696e7d3316Smrg func_fatal_error "cannot find name of link library for \`$lib'" 56706e7d3316Smrg fi 56716e7d3316Smrg # It is a libtool convenience library, so add in its objects. 56726e7d3316Smrg convenience="$convenience $ladir/$objdir/$old_library" 56736e7d3316Smrg old_convenience="$old_convenience $ladir/$objdir/$old_library" 56746e7d3316Smrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 56756e7d3316Smrg func_fatal_error "\`$lib' is not a convenience library" 56766e7d3316Smrg fi 56776e7d3316Smrg tmp_libs= 56786e7d3316Smrg for deplib in $dependency_libs; do 56796e7d3316Smrg deplibs="$deplib $deplibs" 56806e7d3316Smrg if $opt_duplicate_deps ; then 56816e7d3316Smrg case "$tmp_libs " in 56826e7d3316Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 56836e7d3316Smrg esac 56846e7d3316Smrg fi 56856e7d3316Smrg tmp_libs="$tmp_libs $deplib" 56866e7d3316Smrg done 56876e7d3316Smrg continue 56886e7d3316Smrg fi # $pass = conv 56896e7d3316Smrg 56906e7d3316Smrg 56916e7d3316Smrg # Get the name of the library we link against. 56926e7d3316Smrg linklib= 56936e7d3316Smrg for l in $old_library $library_names; do 56946e7d3316Smrg linklib="$l" 56956e7d3316Smrg done 56966e7d3316Smrg if test -z "$linklib"; then 56976e7d3316Smrg func_fatal_error "cannot find name of link library for \`$lib'" 56986e7d3316Smrg fi 56996e7d3316Smrg 57006e7d3316Smrg # This library was specified with -dlopen. 57016e7d3316Smrg if test "$pass" = dlopen; then 57026e7d3316Smrg if test -z "$libdir"; then 57036e7d3316Smrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 57046e7d3316Smrg fi 57056e7d3316Smrg if test -z "$dlname" || 57066e7d3316Smrg test "$dlopen_support" != yes || 57076e7d3316Smrg test "$build_libtool_libs" = no; then 57086e7d3316Smrg # If there is no dlname, no dlopen support or we're linking 57096e7d3316Smrg # statically, we need to preload. We also need to preload any 57106e7d3316Smrg # dependent libraries so libltdl's deplib preloader doesn't 57116e7d3316Smrg # bomb out in the load deplibs phase. 57126e7d3316Smrg dlprefiles="$dlprefiles $lib $dependency_libs" 57136e7d3316Smrg else 57146e7d3316Smrg newdlfiles="$newdlfiles $lib" 57156e7d3316Smrg fi 57166e7d3316Smrg continue 57176e7d3316Smrg fi # $pass = dlopen 57186e7d3316Smrg 57196e7d3316Smrg # We need an absolute path. 57206e7d3316Smrg case $ladir in 57216e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 57226e7d3316Smrg *) 57236e7d3316Smrg abs_ladir=`cd "$ladir" && pwd` 57246e7d3316Smrg if test -z "$abs_ladir"; then 57256e7d3316Smrg func_warning "cannot determine absolute directory name of \`$ladir'" 57266e7d3316Smrg func_warning "passing it literally to the linker, although it might fail" 57276e7d3316Smrg abs_ladir="$ladir" 57286e7d3316Smrg fi 57296e7d3316Smrg ;; 57306e7d3316Smrg esac 57316e7d3316Smrg func_basename "$lib" 57326e7d3316Smrg laname="$func_basename_result" 57336e7d3316Smrg 57346e7d3316Smrg # Find the relevant object directory and library name. 57356e7d3316Smrg if test "X$installed" = Xyes; then 57366e7d3316Smrg if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 57376e7d3316Smrg func_warning "library \`$lib' was moved." 57386e7d3316Smrg dir="$ladir" 57396e7d3316Smrg absdir="$abs_ladir" 57406e7d3316Smrg libdir="$abs_ladir" 57416e7d3316Smrg else 57426e7d3316Smrg dir="$libdir" 57436e7d3316Smrg absdir="$libdir" 57446e7d3316Smrg fi 57456e7d3316Smrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 57466e7d3316Smrg else 57476e7d3316Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 57486e7d3316Smrg dir="$ladir" 57496e7d3316Smrg absdir="$abs_ladir" 57506e7d3316Smrg # Remove this search path later 57516e7d3316Smrg notinst_path="$notinst_path $abs_ladir" 57526e7d3316Smrg else 57536e7d3316Smrg dir="$ladir/$objdir" 57546e7d3316Smrg absdir="$abs_ladir/$objdir" 57556e7d3316Smrg # Remove this search path later 57566e7d3316Smrg notinst_path="$notinst_path $abs_ladir" 57576e7d3316Smrg fi 57586e7d3316Smrg fi # $installed = yes 57596e7d3316Smrg func_stripname 'lib' '.la' "$laname" 57606e7d3316Smrg name=$func_stripname_result 57616e7d3316Smrg 57626e7d3316Smrg # This library was specified with -dlpreopen. 57636e7d3316Smrg if test "$pass" = dlpreopen; then 57646e7d3316Smrg if test -z "$libdir" && test "$linkmode" = prog; then 57656e7d3316Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 57666e7d3316Smrg fi 57676e7d3316Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 57686e7d3316Smrg # are required to link). 57696e7d3316Smrg if test -n "$old_library"; then 57706e7d3316Smrg newdlprefiles="$newdlprefiles $dir/$old_library" 57716e7d3316Smrg # Keep a list of preopened convenience libraries to check 57726e7d3316Smrg # that they are being used correctly in the link pass. 57736e7d3316Smrg test -z "$libdir" && \ 57746e7d3316Smrg dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" 57756e7d3316Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 57766e7d3316Smrg elif test -n "$dlname"; then 57776e7d3316Smrg newdlprefiles="$newdlprefiles $dir/$dlname" 57786e7d3316Smrg else 57796e7d3316Smrg newdlprefiles="$newdlprefiles $dir/$linklib" 57806e7d3316Smrg fi 57816e7d3316Smrg fi # $pass = dlpreopen 57826e7d3316Smrg 57836e7d3316Smrg if test -z "$libdir"; then 57846e7d3316Smrg # Link the convenience library 57856e7d3316Smrg if test "$linkmode" = lib; then 57866e7d3316Smrg deplibs="$dir/$old_library $deplibs" 57876e7d3316Smrg elif test "$linkmode,$pass" = "prog,link"; then 57886e7d3316Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 57896e7d3316Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 57906e7d3316Smrg else 57916e7d3316Smrg deplibs="$lib $deplibs" # used for prog,scan pass 57926e7d3316Smrg fi 57936e7d3316Smrg continue 57946e7d3316Smrg fi 57956e7d3316Smrg 57966e7d3316Smrg 57976e7d3316Smrg if test "$linkmode" = prog && test "$pass" != link; then 57986e7d3316Smrg newlib_search_path="$newlib_search_path $ladir" 57996e7d3316Smrg deplibs="$lib $deplibs" 58006e7d3316Smrg 58016e7d3316Smrg linkalldeplibs=no 58026e7d3316Smrg if test "$link_all_deplibs" != no || test -z "$library_names" || 58036e7d3316Smrg test "$build_libtool_libs" = no; then 58046e7d3316Smrg linkalldeplibs=yes 58056e7d3316Smrg fi 58066e7d3316Smrg 58076e7d3316Smrg tmp_libs= 58086e7d3316Smrg for deplib in $dependency_libs; do 58096e7d3316Smrg case $deplib in 58106e7d3316Smrg -L*) func_stripname '-L' '' "$deplib" 58116e7d3316Smrg newlib_search_path="$newlib_search_path $func_stripname_result" 58126e7d3316Smrg ;; 58136e7d3316Smrg esac 58146e7d3316Smrg # Need to link against all dependency_libs? 58156e7d3316Smrg if test "$linkalldeplibs" = yes; then 58166e7d3316Smrg deplibs="$deplib $deplibs" 58176e7d3316Smrg else 58186e7d3316Smrg # Need to hardcode shared library paths 58196e7d3316Smrg # or/and link against static libraries 58206e7d3316Smrg newdependency_libs="$deplib $newdependency_libs" 58216e7d3316Smrg fi 58226e7d3316Smrg if $opt_duplicate_deps ; then 58236e7d3316Smrg case "$tmp_libs " in 58246e7d3316Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 58256e7d3316Smrg esac 58266e7d3316Smrg fi 58276e7d3316Smrg tmp_libs="$tmp_libs $deplib" 58286e7d3316Smrg done # for deplib 58296e7d3316Smrg continue 58306e7d3316Smrg fi # $linkmode = prog... 58316e7d3316Smrg 58326e7d3316Smrg if test "$linkmode,$pass" = "prog,link"; then 58336e7d3316Smrg if test -n "$library_names" && 58346e7d3316Smrg { { test "$prefer_static_libs" = no || 58356e7d3316Smrg test "$prefer_static_libs,$installed" = "built,yes"; } || 58366e7d3316Smrg test -z "$old_library"; }; then 58376e7d3316Smrg # We need to hardcode the library path 58386e7d3316Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 58396e7d3316Smrg # Make sure the rpath contains only unique directories. 58406e7d3316Smrg case "$temp_rpath:" in 58416e7d3316Smrg *"$absdir:"*) ;; 58426e7d3316Smrg *) temp_rpath="$temp_rpath$absdir:" ;; 58436e7d3316Smrg esac 58446e7d3316Smrg fi 58456e7d3316Smrg 58466e7d3316Smrg # Hardcode the library path. 58476e7d3316Smrg # Skip directories that are in the system default run-time 58486e7d3316Smrg # search path. 58496e7d3316Smrg case " $sys_lib_dlsearch_path " in 58506e7d3316Smrg *" $absdir "*) ;; 58516e7d3316Smrg *) 58526e7d3316Smrg case "$compile_rpath " in 58536e7d3316Smrg *" $absdir "*) ;; 58546e7d3316Smrg *) compile_rpath="$compile_rpath $absdir" 58556e7d3316Smrg esac 58566e7d3316Smrg ;; 58576e7d3316Smrg esac 58586e7d3316Smrg case " $sys_lib_dlsearch_path " in 58596e7d3316Smrg *" $libdir "*) ;; 58606e7d3316Smrg *) 58616e7d3316Smrg case "$finalize_rpath " in 58626e7d3316Smrg *" $libdir "*) ;; 58636e7d3316Smrg *) finalize_rpath="$finalize_rpath $libdir" 58646e7d3316Smrg esac 58656e7d3316Smrg ;; 58666e7d3316Smrg esac 58676e7d3316Smrg fi # $linkmode,$pass = prog,link... 58686e7d3316Smrg 58696e7d3316Smrg if test "$alldeplibs" = yes && 58706e7d3316Smrg { test "$deplibs_check_method" = pass_all || 58716e7d3316Smrg { test "$build_libtool_libs" = yes && 58726e7d3316Smrg test -n "$library_names"; }; }; then 58736e7d3316Smrg # We only need to search for static libraries 58746e7d3316Smrg continue 58756e7d3316Smrg fi 58766e7d3316Smrg fi 58776e7d3316Smrg 58786e7d3316Smrg link_static=no # Whether the deplib will be linked statically 58796e7d3316Smrg use_static_libs=$prefer_static_libs 58806e7d3316Smrg if test "$use_static_libs" = built && test "$installed" = yes; then 58816e7d3316Smrg use_static_libs=no 58826e7d3316Smrg fi 58836e7d3316Smrg if test -n "$library_names" && 58846e7d3316Smrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 58856e7d3316Smrg case $host in 58866e7d3316Smrg *cygwin* | *mingw* | *cegcc*) 58876e7d3316Smrg # No point in relinking DLLs because paths are not encoded 58886e7d3316Smrg notinst_deplibs="$notinst_deplibs $lib" 58896e7d3316Smrg need_relink=no 58906e7d3316Smrg ;; 58916e7d3316Smrg *) 58926e7d3316Smrg if test "$installed" = no; then 58936e7d3316Smrg notinst_deplibs="$notinst_deplibs $lib" 58946e7d3316Smrg need_relink=yes 58956e7d3316Smrg fi 58966e7d3316Smrg ;; 58976e7d3316Smrg esac 58986e7d3316Smrg # This is a shared library 58996e7d3316Smrg 59006e7d3316Smrg # Warn about portability, can't link against -module's on some 59016e7d3316Smrg # systems (darwin). Don't bleat about dlopened modules though! 59026e7d3316Smrg dlopenmodule="" 59036e7d3316Smrg for dlpremoduletest in $dlprefiles; do 59046e7d3316Smrg if test "X$dlpremoduletest" = "X$lib"; then 59056e7d3316Smrg dlopenmodule="$dlpremoduletest" 59066e7d3316Smrg break 59076e7d3316Smrg fi 59086e7d3316Smrg done 59096e7d3316Smrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 59106e7d3316Smrg echo 59116e7d3316Smrg if test "$linkmode" = prog; then 59126e7d3316Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 59136e7d3316Smrg else 59146e7d3316Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 59156e7d3316Smrg fi 59166e7d3316Smrg $ECHO "*** $linklib is not portable!" 59176e7d3316Smrg fi 59186e7d3316Smrg if test "$linkmode" = lib && 59196e7d3316Smrg test "$hardcode_into_libs" = yes; then 59206e7d3316Smrg # Hardcode the library path. 59216e7d3316Smrg # Skip directories that are in the system default run-time 59226e7d3316Smrg # search path. 59236e7d3316Smrg case " $sys_lib_dlsearch_path " in 59246e7d3316Smrg *" $absdir "*) ;; 59256e7d3316Smrg *) 59266e7d3316Smrg case "$compile_rpath " in 59276e7d3316Smrg *" $absdir "*) ;; 59286e7d3316Smrg *) compile_rpath="$compile_rpath $absdir" 59296e7d3316Smrg esac 59306e7d3316Smrg ;; 59316e7d3316Smrg esac 59326e7d3316Smrg case " $sys_lib_dlsearch_path " in 59336e7d3316Smrg *" $libdir "*) ;; 59346e7d3316Smrg *) 59356e7d3316Smrg case "$finalize_rpath " in 59366e7d3316Smrg *" $libdir "*) ;; 59376e7d3316Smrg *) finalize_rpath="$finalize_rpath $libdir" 59386e7d3316Smrg esac 59396e7d3316Smrg ;; 59406e7d3316Smrg esac 59416e7d3316Smrg fi 59426e7d3316Smrg 59436e7d3316Smrg if test -n "$old_archive_from_expsyms_cmds"; then 59446e7d3316Smrg # figure out the soname 59456e7d3316Smrg set dummy $library_names 59466e7d3316Smrg shift 59476e7d3316Smrg realname="$1" 59486e7d3316Smrg shift 59496e7d3316Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 59506e7d3316Smrg # use dlname if we got it. it's perfectly good, no? 59516e7d3316Smrg if test -n "$dlname"; then 59526e7d3316Smrg soname="$dlname" 59536e7d3316Smrg elif test -n "$soname_spec"; then 59546e7d3316Smrg # bleh windows 59556e7d3316Smrg case $host in 59566e7d3316Smrg *cygwin* | mingw* | *cegcc*) 59576e7d3316Smrg func_arith $current - $age 59586e7d3316Smrg major=$func_arith_result 59596e7d3316Smrg versuffix="-$major" 59606e7d3316Smrg ;; 59616e7d3316Smrg esac 59626e7d3316Smrg eval soname=\"$soname_spec\" 59636e7d3316Smrg else 59646e7d3316Smrg soname="$realname" 59656e7d3316Smrg fi 59666e7d3316Smrg 59676e7d3316Smrg # Make a new name for the extract_expsyms_cmds to use 59686e7d3316Smrg soroot="$soname" 59696e7d3316Smrg func_basename "$soroot" 59706e7d3316Smrg soname="$func_basename_result" 59716e7d3316Smrg func_stripname 'lib' '.dll' "$soname" 59726e7d3316Smrg newlib=libimp-$func_stripname_result.a 59736e7d3316Smrg 59746e7d3316Smrg # If the library has no export list, then create one now 59756e7d3316Smrg if test -f "$output_objdir/$soname-def"; then : 59766e7d3316Smrg else 59776e7d3316Smrg func_verbose "extracting exported symbol list from \`$soname'" 59786e7d3316Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 59796e7d3316Smrg fi 59806e7d3316Smrg 59816e7d3316Smrg # Create $newlib 59826e7d3316Smrg if test -f "$output_objdir/$newlib"; then :; else 59836e7d3316Smrg func_verbose "generating import library for \`$soname'" 59846e7d3316Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 59856e7d3316Smrg fi 59866e7d3316Smrg # make sure the library variables are pointing to the new library 59876e7d3316Smrg dir=$output_objdir 59886e7d3316Smrg linklib=$newlib 59896e7d3316Smrg fi # test -n "$old_archive_from_expsyms_cmds" 59906e7d3316Smrg 59916e7d3316Smrg if test "$linkmode" = prog || test "$mode" != relink; then 59926e7d3316Smrg add_shlibpath= 59936e7d3316Smrg add_dir= 59946e7d3316Smrg add= 59956e7d3316Smrg lib_linked=yes 59966e7d3316Smrg case $hardcode_action in 59976e7d3316Smrg immediate | unsupported) 59986e7d3316Smrg if test "$hardcode_direct" = no; then 59996e7d3316Smrg add="$dir/$linklib" 60006e7d3316Smrg case $host in 60016e7d3316Smrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 60026e7d3316Smrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 60036e7d3316Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 60046e7d3316Smrg *-*-unixware7*) add_dir="-L$dir" ;; 60056e7d3316Smrg *-*-darwin* ) 60066e7d3316Smrg # if the lib is a (non-dlopened) module then we can not 60076e7d3316Smrg # link against it, someone is ignoring the earlier warnings 60086e7d3316Smrg if /usr/bin/file -L $add 2> /dev/null | 60096e7d3316Smrg $GREP ": [^:]* bundle" >/dev/null ; then 60106e7d3316Smrg if test "X$dlopenmodule" != "X$lib"; then 60116e7d3316Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 60126e7d3316Smrg if test -z "$old_library" ; then 60136e7d3316Smrg echo 60146e7d3316Smrg echo "*** And there doesn't seem to be a static archive available" 60156e7d3316Smrg echo "*** The link will probably fail, sorry" 60166e7d3316Smrg else 60176e7d3316Smrg add="$dir/$old_library" 60186e7d3316Smrg fi 60196e7d3316Smrg elif test -n "$old_library"; then 60206e7d3316Smrg add="$dir/$old_library" 60216e7d3316Smrg fi 60226e7d3316Smrg fi 60236e7d3316Smrg esac 60246e7d3316Smrg elif test "$hardcode_minus_L" = no; then 60256e7d3316Smrg case $host in 60266e7d3316Smrg *-*-sunos*) add_shlibpath="$dir" ;; 60276e7d3316Smrg esac 60286e7d3316Smrg add_dir="-L$dir" 60296e7d3316Smrg add="-l$name" 60306e7d3316Smrg elif test "$hardcode_shlibpath_var" = no; then 60316e7d3316Smrg add_shlibpath="$dir" 60326e7d3316Smrg add="-l$name" 60336e7d3316Smrg else 60346e7d3316Smrg lib_linked=no 60356e7d3316Smrg fi 60366e7d3316Smrg ;; 60376e7d3316Smrg relink) 60386e7d3316Smrg if test "$hardcode_direct" = yes && 60396e7d3316Smrg test "$hardcode_direct_absolute" = no; then 60406e7d3316Smrg add="$dir/$linklib" 60416e7d3316Smrg elif test "$hardcode_minus_L" = yes; then 60426e7d3316Smrg add_dir="-L$dir" 60436e7d3316Smrg # Try looking first in the location we're being installed to. 60446e7d3316Smrg if test -n "$inst_prefix_dir"; then 60456e7d3316Smrg case $libdir in 60466e7d3316Smrg [\\/]*) 60476e7d3316Smrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 60486e7d3316Smrg ;; 60496e7d3316Smrg esac 60506e7d3316Smrg fi 60516e7d3316Smrg add="-l$name" 60526e7d3316Smrg elif test "$hardcode_shlibpath_var" = yes; then 60536e7d3316Smrg add_shlibpath="$dir" 60546e7d3316Smrg add="-l$name" 60556e7d3316Smrg else 60566e7d3316Smrg lib_linked=no 60576e7d3316Smrg fi 60586e7d3316Smrg ;; 60596e7d3316Smrg *) lib_linked=no ;; 60606e7d3316Smrg esac 60616e7d3316Smrg 60626e7d3316Smrg if test "$lib_linked" != yes; then 60636e7d3316Smrg func_fatal_configuration "unsupported hardcode properties" 60646e7d3316Smrg fi 60656e7d3316Smrg 60666e7d3316Smrg if test -n "$add_shlibpath"; then 60676e7d3316Smrg case :$compile_shlibpath: in 60686e7d3316Smrg *":$add_shlibpath:"*) ;; 60696e7d3316Smrg *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; 60706e7d3316Smrg esac 60716e7d3316Smrg fi 60726e7d3316Smrg if test "$linkmode" = prog; then 60736e7d3316Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 60746e7d3316Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 60756e7d3316Smrg else 60766e7d3316Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 60776e7d3316Smrg test -n "$add" && deplibs="$add $deplibs" 60786e7d3316Smrg if test "$hardcode_direct" != yes && 60796e7d3316Smrg test "$hardcode_minus_L" != yes && 60806e7d3316Smrg test "$hardcode_shlibpath_var" = yes; then 60816e7d3316Smrg case :$finalize_shlibpath: in 60826e7d3316Smrg *":$libdir:"*) ;; 60836e7d3316Smrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 60846e7d3316Smrg esac 60856e7d3316Smrg fi 60866e7d3316Smrg fi 60876e7d3316Smrg fi 60886e7d3316Smrg 60896e7d3316Smrg if test "$linkmode" = prog || test "$mode" = relink; then 60906e7d3316Smrg add_shlibpath= 60916e7d3316Smrg add_dir= 60926e7d3316Smrg add= 60936e7d3316Smrg # Finalize command for both is simple: just hardcode it. 60946e7d3316Smrg if test "$hardcode_direct" = yes && 60956e7d3316Smrg test "$hardcode_direct_absolute" = no; then 60966e7d3316Smrg add="$libdir/$linklib" 60976e7d3316Smrg elif test "$hardcode_minus_L" = yes; then 60986e7d3316Smrg add_dir="-L$libdir" 60996e7d3316Smrg add="-l$name" 61006e7d3316Smrg elif test "$hardcode_shlibpath_var" = yes; then 61016e7d3316Smrg case :$finalize_shlibpath: in 61026e7d3316Smrg *":$libdir:"*) ;; 61036e7d3316Smrg *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; 61046e7d3316Smrg esac 61056e7d3316Smrg add="-l$name" 61066e7d3316Smrg elif test "$hardcode_automatic" = yes; then 61076e7d3316Smrg if test -n "$inst_prefix_dir" && 61086e7d3316Smrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 61096e7d3316Smrg add="$inst_prefix_dir$libdir/$linklib" 61106e7d3316Smrg else 61116e7d3316Smrg add="$libdir/$linklib" 61126e7d3316Smrg fi 61136e7d3316Smrg else 61146e7d3316Smrg # We cannot seem to hardcode it, guess we'll fake it. 61156e7d3316Smrg add_dir="-L$libdir" 61166e7d3316Smrg # Try looking first in the location we're being installed to. 61176e7d3316Smrg if test -n "$inst_prefix_dir"; then 61186e7d3316Smrg case $libdir in 61196e7d3316Smrg [\\/]*) 61206e7d3316Smrg add_dir="$add_dir -L$inst_prefix_dir$libdir" 61216e7d3316Smrg ;; 61226e7d3316Smrg esac 61236e7d3316Smrg fi 61246e7d3316Smrg add="-l$name" 61256e7d3316Smrg fi 61266e7d3316Smrg 61276e7d3316Smrg if test "$linkmode" = prog; then 61286e7d3316Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 61296e7d3316Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 61306e7d3316Smrg else 61316e7d3316Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 61326e7d3316Smrg test -n "$add" && deplibs="$add $deplibs" 61336e7d3316Smrg fi 61346e7d3316Smrg fi 61356e7d3316Smrg elif test "$linkmode" = prog; then 61366e7d3316Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 61376e7d3316Smrg # is not unsupported. This is valid on all known static and 61386e7d3316Smrg # shared platforms. 61396e7d3316Smrg if test "$hardcode_direct" != unsupported; then 61406e7d3316Smrg test -n "$old_library" && linklib="$old_library" 61416e7d3316Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 61426e7d3316Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 61436e7d3316Smrg else 61446e7d3316Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 61456e7d3316Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 61466e7d3316Smrg fi 61476e7d3316Smrg elif test "$build_libtool_libs" = yes; then 61486e7d3316Smrg # Not a shared library 61496e7d3316Smrg if test "$deplibs_check_method" != pass_all; then 61506e7d3316Smrg # We're trying link a shared library against a static one 61516e7d3316Smrg # but the system doesn't support it. 61526e7d3316Smrg 61536e7d3316Smrg # Just print a warning and add the library to dependency_libs so 61546e7d3316Smrg # that the program can be linked against the static library. 61556e7d3316Smrg echo 61566e7d3316Smrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 61576e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 61586e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 61596e7d3316Smrg echo "*** shared version of the library, which you do not appear to have." 61606e7d3316Smrg if test "$module" = yes; then 61616e7d3316Smrg echo "*** But as you try to build a module library, libtool will still create " 61626e7d3316Smrg echo "*** a static module, that should work as long as the dlopening application" 61636e7d3316Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 61646e7d3316Smrg if test -z "$global_symbol_pipe"; then 61656e7d3316Smrg echo 61666e7d3316Smrg echo "*** However, this would only work if libtool was able to extract symbol" 61676e7d3316Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 61686e7d3316Smrg echo "*** not find such a program. So, this module is probably useless." 61696e7d3316Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 61706e7d3316Smrg fi 61716e7d3316Smrg if test "$build_old_libs" = no; then 61726e7d3316Smrg build_libtool_libs=module 61736e7d3316Smrg build_old_libs=yes 61746e7d3316Smrg else 61756e7d3316Smrg build_libtool_libs=no 61766e7d3316Smrg fi 61776e7d3316Smrg fi 61786e7d3316Smrg else 61796e7d3316Smrg deplibs="$dir/$old_library $deplibs" 61806e7d3316Smrg link_static=yes 61816e7d3316Smrg fi 61826e7d3316Smrg fi # link shared/static library? 61836e7d3316Smrg 61846e7d3316Smrg if test "$linkmode" = lib; then 61856e7d3316Smrg if test -n "$dependency_libs" && 61866e7d3316Smrg { test "$hardcode_into_libs" != yes || 61876e7d3316Smrg test "$build_old_libs" = yes || 61886e7d3316Smrg test "$link_static" = yes; }; then 61896e7d3316Smrg # Extract -R from dependency_libs 61906e7d3316Smrg temp_deplibs= 61916e7d3316Smrg for libdir in $dependency_libs; do 61926e7d3316Smrg case $libdir in 61936e7d3316Smrg -R*) func_stripname '-R' '' "$libdir" 61946e7d3316Smrg temp_xrpath=$func_stripname_result 61956e7d3316Smrg case " $xrpath " in 61966e7d3316Smrg *" $temp_xrpath "*) ;; 61976e7d3316Smrg *) xrpath="$xrpath $temp_xrpath";; 61986e7d3316Smrg esac;; 61996e7d3316Smrg *) temp_deplibs="$temp_deplibs $libdir";; 62006e7d3316Smrg esac 62016e7d3316Smrg done 62026e7d3316Smrg dependency_libs="$temp_deplibs" 62036e7d3316Smrg fi 62046e7d3316Smrg 62056e7d3316Smrg newlib_search_path="$newlib_search_path $absdir" 62066e7d3316Smrg # Link against this library 62076e7d3316Smrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 62086e7d3316Smrg # ... and its dependency_libs 62096e7d3316Smrg tmp_libs= 62106e7d3316Smrg for deplib in $dependency_libs; do 62116e7d3316Smrg newdependency_libs="$deplib $newdependency_libs" 62126e7d3316Smrg if $opt_duplicate_deps ; then 62136e7d3316Smrg case "$tmp_libs " in 62146e7d3316Smrg *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; 62156e7d3316Smrg esac 62166e7d3316Smrg fi 62176e7d3316Smrg tmp_libs="$tmp_libs $deplib" 62186e7d3316Smrg done 62196e7d3316Smrg 62206e7d3316Smrg if test "$link_all_deplibs" != no; then 62216e7d3316Smrg # Add the search paths of all dependency libraries 62226e7d3316Smrg for deplib in $dependency_libs; do 62236e7d3316Smrg path= 62246e7d3316Smrg case $deplib in 62256e7d3316Smrg -L*) path="$deplib" ;; 62266e7d3316Smrg *.la) 62276e7d3316Smrg func_dirname "$deplib" "" "." 62286e7d3316Smrg dir="$func_dirname_result" 62296e7d3316Smrg # We need an absolute path. 62306e7d3316Smrg case $dir in 62316e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 62326e7d3316Smrg *) 62336e7d3316Smrg absdir=`cd "$dir" && pwd` 62346e7d3316Smrg if test -z "$absdir"; then 62356e7d3316Smrg func_warning "cannot determine absolute directory name of \`$dir'" 62366e7d3316Smrg absdir="$dir" 62376e7d3316Smrg fi 62386e7d3316Smrg ;; 62396e7d3316Smrg esac 62406e7d3316Smrg if $GREP "^installed=no" $deplib > /dev/null; then 62416e7d3316Smrg case $host in 62426e7d3316Smrg *-*-darwin*) 62436e7d3316Smrg depdepl= 62446e7d3316Smrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 62456e7d3316Smrg if test -n "$deplibrary_names" ; then 62466e7d3316Smrg for tmp in $deplibrary_names ; do 62476e7d3316Smrg depdepl=$tmp 62486e7d3316Smrg done 62496e7d3316Smrg if test -f "$absdir/$objdir/$depdepl" ; then 62506e7d3316Smrg depdepl="$absdir/$objdir/$depdepl" 62516e7d3316Smrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 62526e7d3316Smrg if test -z "$darwin_install_name"; then 62536e7d3316Smrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 62546e7d3316Smrg fi 62556e7d3316Smrg compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 62566e7d3316Smrg linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" 62576e7d3316Smrg path= 62586e7d3316Smrg fi 62596e7d3316Smrg fi 62606e7d3316Smrg ;; 62616e7d3316Smrg *) 62626e7d3316Smrg path="-L$absdir/$objdir" 62636e7d3316Smrg ;; 62646e7d3316Smrg esac 62656e7d3316Smrg else 62666e7d3316Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 62676e7d3316Smrg test -z "$libdir" && \ 62686e7d3316Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 62696e7d3316Smrg test "$absdir" != "$libdir" && \ 62706e7d3316Smrg func_warning "\`$deplib' seems to be moved" 62716e7d3316Smrg 62726e7d3316Smrg path="-L$absdir" 62736e7d3316Smrg fi 62746e7d3316Smrg ;; 62756e7d3316Smrg esac 62766e7d3316Smrg case " $deplibs " in 62776e7d3316Smrg *" $path "*) ;; 62786e7d3316Smrg *) deplibs="$path $deplibs" ;; 62796e7d3316Smrg esac 62806e7d3316Smrg done 62816e7d3316Smrg fi # link_all_deplibs != no 62826e7d3316Smrg fi # linkmode = lib 62836e7d3316Smrg done # for deplib in $libs 62846e7d3316Smrg if test "$pass" = link; then 62856e7d3316Smrg if test "$linkmode" = "prog"; then 62866e7d3316Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 62876e7d3316Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 62886e7d3316Smrg else 62896e7d3316Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 62906e7d3316Smrg fi 62916e7d3316Smrg fi 62926e7d3316Smrg dependency_libs="$newdependency_libs" 62936e7d3316Smrg if test "$pass" = dlpreopen; then 62946e7d3316Smrg # Link the dlpreopened libraries before other libraries 62956e7d3316Smrg for deplib in $save_deplibs; do 62966e7d3316Smrg deplibs="$deplib $deplibs" 62976e7d3316Smrg done 62986e7d3316Smrg fi 62996e7d3316Smrg if test "$pass" != dlopen; then 63006e7d3316Smrg if test "$pass" != conv; then 63016e7d3316Smrg # Make sure lib_search_path contains only unique directories. 63026e7d3316Smrg lib_search_path= 63036e7d3316Smrg for dir in $newlib_search_path; do 63046e7d3316Smrg case "$lib_search_path " in 63056e7d3316Smrg *" $dir "*) ;; 63066e7d3316Smrg *) lib_search_path="$lib_search_path $dir" ;; 63076e7d3316Smrg esac 63086e7d3316Smrg done 63096e7d3316Smrg newlib_search_path= 63106e7d3316Smrg fi 63116e7d3316Smrg 63126e7d3316Smrg if test "$linkmode,$pass" != "prog,link"; then 63136e7d3316Smrg vars="deplibs" 63146e7d3316Smrg else 63156e7d3316Smrg vars="compile_deplibs finalize_deplibs" 63166e7d3316Smrg fi 63176e7d3316Smrg for var in $vars dependency_libs; do 63186e7d3316Smrg # Add libraries to $var in reverse order 63196e7d3316Smrg eval tmp_libs=\"\$$var\" 63206e7d3316Smrg new_libs= 63216e7d3316Smrg for deplib in $tmp_libs; do 63226e7d3316Smrg # FIXME: Pedantically, this is the right thing to do, so 63236e7d3316Smrg # that some nasty dependency loop isn't accidentally 63246e7d3316Smrg # broken: 63256e7d3316Smrg #new_libs="$deplib $new_libs" 63266e7d3316Smrg # Pragmatically, this seems to cause very few problems in 63276e7d3316Smrg # practice: 63286e7d3316Smrg case $deplib in 63296e7d3316Smrg -L*) new_libs="$deplib $new_libs" ;; 63306e7d3316Smrg -R*) ;; 63316e7d3316Smrg *) 63326e7d3316Smrg # And here is the reason: when a library appears more 63336e7d3316Smrg # than once as an explicit dependence of a library, or 63346e7d3316Smrg # is implicitly linked in more than once by the 63356e7d3316Smrg # compiler, it is considered special, and multiple 63366e7d3316Smrg # occurrences thereof are not removed. Compare this 63376e7d3316Smrg # with having the same library being listed as a 63386e7d3316Smrg # dependency of multiple other libraries: in this case, 63396e7d3316Smrg # we know (pedantically, we assume) the library does not 63406e7d3316Smrg # need to be listed more than once, so we keep only the 63416e7d3316Smrg # last copy. This is not always right, but it is rare 63426e7d3316Smrg # enough that we require users that really mean to play 63436e7d3316Smrg # such unportable linking tricks to link the library 63446e7d3316Smrg # using -Wl,-lname, so that libtool does not consider it 63456e7d3316Smrg # for duplicate removal. 63466e7d3316Smrg case " $specialdeplibs " in 63476e7d3316Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 63486e7d3316Smrg *) 63496e7d3316Smrg case " $new_libs " in 63506e7d3316Smrg *" $deplib "*) ;; 63516e7d3316Smrg *) new_libs="$deplib $new_libs" ;; 63526e7d3316Smrg esac 63536e7d3316Smrg ;; 63546e7d3316Smrg esac 63556e7d3316Smrg ;; 63566e7d3316Smrg esac 63576e7d3316Smrg done 63586e7d3316Smrg tmp_libs= 63596e7d3316Smrg for deplib in $new_libs; do 63606e7d3316Smrg case $deplib in 63616e7d3316Smrg -L*) 63626e7d3316Smrg case " $tmp_libs " in 63636e7d3316Smrg *" $deplib "*) ;; 63646e7d3316Smrg *) tmp_libs="$tmp_libs $deplib" ;; 63656e7d3316Smrg esac 63666e7d3316Smrg ;; 63676e7d3316Smrg *) tmp_libs="$tmp_libs $deplib" ;; 63686e7d3316Smrg esac 63696e7d3316Smrg done 63706e7d3316Smrg eval $var=\"$tmp_libs\" 63716e7d3316Smrg done # for var 63726e7d3316Smrg fi 63736e7d3316Smrg # Last step: remove runtime libs from dependency_libs 63746e7d3316Smrg # (they stay in deplibs) 63756e7d3316Smrg tmp_libs= 63766e7d3316Smrg for i in $dependency_libs ; do 63776e7d3316Smrg case " $predeps $postdeps $compiler_lib_search_path " in 63786e7d3316Smrg *" $i "*) 63796e7d3316Smrg i="" 63806e7d3316Smrg ;; 63816e7d3316Smrg esac 63826e7d3316Smrg if test -n "$i" ; then 63836e7d3316Smrg tmp_libs="$tmp_libs $i" 63846e7d3316Smrg fi 63856e7d3316Smrg done 63866e7d3316Smrg dependency_libs=$tmp_libs 63876e7d3316Smrg done # for pass 63886e7d3316Smrg if test "$linkmode" = prog; then 63896e7d3316Smrg dlfiles="$newdlfiles" 63906e7d3316Smrg fi 63916e7d3316Smrg if test "$linkmode" = prog || test "$linkmode" = lib; then 63926e7d3316Smrg dlprefiles="$newdlprefiles" 63936e7d3316Smrg fi 63946e7d3316Smrg 63956e7d3316Smrg case $linkmode in 63966e7d3316Smrg oldlib) 63976e7d3316Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 63986e7d3316Smrg func_warning "\`-dlopen' is ignored for archives" 63996e7d3316Smrg fi 64006e7d3316Smrg 64016e7d3316Smrg case " $deplibs" in 64026e7d3316Smrg *\ -l* | *\ -L*) 64036e7d3316Smrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 64046e7d3316Smrg esac 64056e7d3316Smrg 64066e7d3316Smrg test -n "$rpath" && \ 64076e7d3316Smrg func_warning "\`-rpath' is ignored for archives" 64086e7d3316Smrg 64096e7d3316Smrg test -n "$xrpath" && \ 64106e7d3316Smrg func_warning "\`-R' is ignored for archives" 64116e7d3316Smrg 64126e7d3316Smrg test -n "$vinfo" && \ 64136e7d3316Smrg func_warning "\`-version-info/-version-number' is ignored for archives" 64146e7d3316Smrg 64156e7d3316Smrg test -n "$release" && \ 64166e7d3316Smrg func_warning "\`-release' is ignored for archives" 64176e7d3316Smrg 64186e7d3316Smrg test -n "$export_symbols$export_symbols_regex" && \ 64196e7d3316Smrg func_warning "\`-export-symbols' is ignored for archives" 64206e7d3316Smrg 64216e7d3316Smrg # Now set the variables for building old libraries. 64226e7d3316Smrg build_libtool_libs=no 64236e7d3316Smrg oldlibs="$output" 64246e7d3316Smrg objs="$objs$old_deplibs" 64256e7d3316Smrg ;; 64266e7d3316Smrg 64276e7d3316Smrg lib) 64286e7d3316Smrg # Make sure we only generate libraries of the form `libNAME.la'. 64296e7d3316Smrg case $outputname in 64306e7d3316Smrg lib*) 64316e7d3316Smrg func_stripname 'lib' '.la' "$outputname" 64326e7d3316Smrg name=$func_stripname_result 64336e7d3316Smrg eval shared_ext=\"$shrext_cmds\" 64346e7d3316Smrg eval libname=\"$libname_spec\" 64356e7d3316Smrg ;; 64366e7d3316Smrg *) 64376e7d3316Smrg test "$module" = no && \ 64386e7d3316Smrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 64396e7d3316Smrg 64406e7d3316Smrg if test "$need_lib_prefix" != no; then 64416e7d3316Smrg # Add the "lib" prefix for modules if required 64426e7d3316Smrg func_stripname '' '.la' "$outputname" 64436e7d3316Smrg name=$func_stripname_result 64446e7d3316Smrg eval shared_ext=\"$shrext_cmds\" 64456e7d3316Smrg eval libname=\"$libname_spec\" 64466e7d3316Smrg else 64476e7d3316Smrg func_stripname '' '.la' "$outputname" 64486e7d3316Smrg libname=$func_stripname_result 64496e7d3316Smrg fi 64506e7d3316Smrg ;; 64516e7d3316Smrg esac 64526e7d3316Smrg 64536e7d3316Smrg if test -n "$objs"; then 64546e7d3316Smrg if test "$deplibs_check_method" != pass_all; then 64556e7d3316Smrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 64566e7d3316Smrg else 64576e7d3316Smrg echo 64586e7d3316Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 64596e7d3316Smrg $ECHO "*** objects $objs is not portable!" 64606e7d3316Smrg libobjs="$libobjs $objs" 64616e7d3316Smrg fi 64626e7d3316Smrg fi 64636e7d3316Smrg 64646e7d3316Smrg test "$dlself" != no && \ 64656e7d3316Smrg func_warning "\`-dlopen self' is ignored for libtool libraries" 64666e7d3316Smrg 64676e7d3316Smrg set dummy $rpath 64686e7d3316Smrg shift 64696e7d3316Smrg test "$#" -gt 1 && \ 64706e7d3316Smrg func_warning "ignoring multiple \`-rpath's for a libtool library" 64716e7d3316Smrg 64726e7d3316Smrg install_libdir="$1" 64736e7d3316Smrg 64746e7d3316Smrg oldlibs= 64756e7d3316Smrg if test -z "$rpath"; then 64766e7d3316Smrg if test "$build_libtool_libs" = yes; then 64776e7d3316Smrg # Building a libtool convenience library. 64786e7d3316Smrg # Some compilers have problems with a `.al' extension so 64796e7d3316Smrg # convenience libraries should have the same extension an 64806e7d3316Smrg # archive normally would. 64816e7d3316Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 64826e7d3316Smrg build_libtool_libs=convenience 64836e7d3316Smrg build_old_libs=yes 64846e7d3316Smrg fi 64856e7d3316Smrg 64866e7d3316Smrg test -n "$vinfo" && \ 64876e7d3316Smrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 64886e7d3316Smrg 64896e7d3316Smrg test -n "$release" && \ 64906e7d3316Smrg func_warning "\`-release' is ignored for convenience libraries" 64916e7d3316Smrg else 64926e7d3316Smrg 64936e7d3316Smrg # Parse the version information argument. 64946e7d3316Smrg save_ifs="$IFS"; IFS=':' 64956e7d3316Smrg set dummy $vinfo 0 0 0 64966e7d3316Smrg shift 64976e7d3316Smrg IFS="$save_ifs" 64986e7d3316Smrg 64996e7d3316Smrg test -n "$7" && \ 65006e7d3316Smrg func_fatal_help "too many parameters to \`-version-info'" 65016e7d3316Smrg 65026e7d3316Smrg # convert absolute version numbers to libtool ages 65036e7d3316Smrg # this retains compatibility with .la files and attempts 65046e7d3316Smrg # to make the code below a bit more comprehensible 65056e7d3316Smrg 65066e7d3316Smrg case $vinfo_number in 65076e7d3316Smrg yes) 65086e7d3316Smrg number_major="$1" 65096e7d3316Smrg number_minor="$2" 65106e7d3316Smrg number_revision="$3" 65116e7d3316Smrg # 65126e7d3316Smrg # There are really only two kinds -- those that 65136e7d3316Smrg # use the current revision as the major version 65146e7d3316Smrg # and those that subtract age and use age as 65156e7d3316Smrg # a minor version. But, then there is irix 65166e7d3316Smrg # which has an extra 1 added just for fun 65176e7d3316Smrg # 65186e7d3316Smrg case $version_type in 65196e7d3316Smrg darwin|linux|osf|windows|none) 65206e7d3316Smrg func_arith $number_major + $number_minor 65216e7d3316Smrg current=$func_arith_result 65226e7d3316Smrg age="$number_minor" 65236e7d3316Smrg revision="$number_revision" 65246e7d3316Smrg ;; 65256e7d3316Smrg freebsd-aout|freebsd-elf|qnx|sunos) 65266e7d3316Smrg current="$number_major" 65276e7d3316Smrg revision="$number_minor" 65286e7d3316Smrg age="0" 65296e7d3316Smrg ;; 65306e7d3316Smrg irix|nonstopux) 65316e7d3316Smrg func_arith $number_major + $number_minor 65326e7d3316Smrg current=$func_arith_result 65336e7d3316Smrg age="$number_minor" 65346e7d3316Smrg revision="$number_minor" 65356e7d3316Smrg lt_irix_increment=no 65366e7d3316Smrg ;; 65376e7d3316Smrg esac 65386e7d3316Smrg ;; 65396e7d3316Smrg no) 65406e7d3316Smrg current="$1" 65416e7d3316Smrg revision="$2" 65426e7d3316Smrg age="$3" 65436e7d3316Smrg ;; 65446e7d3316Smrg esac 65456e7d3316Smrg 65466e7d3316Smrg # Check that each of the things are valid numbers. 65476e7d3316Smrg case $current in 65486e7d3316Smrg 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]) ;; 65496e7d3316Smrg *) 65506e7d3316Smrg func_error "CURRENT \`$current' must be a nonnegative integer" 65516e7d3316Smrg func_fatal_error "\`$vinfo' is not valid version information" 65526e7d3316Smrg ;; 65536e7d3316Smrg esac 65546e7d3316Smrg 65556e7d3316Smrg case $revision in 65566e7d3316Smrg 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]) ;; 65576e7d3316Smrg *) 65586e7d3316Smrg func_error "REVISION \`$revision' must be a nonnegative integer" 65596e7d3316Smrg func_fatal_error "\`$vinfo' is not valid version information" 65606e7d3316Smrg ;; 65616e7d3316Smrg esac 65626e7d3316Smrg 65636e7d3316Smrg case $age in 65646e7d3316Smrg 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]) ;; 65656e7d3316Smrg *) 65666e7d3316Smrg func_error "AGE \`$age' must be a nonnegative integer" 65676e7d3316Smrg func_fatal_error "\`$vinfo' is not valid version information" 65686e7d3316Smrg ;; 65696e7d3316Smrg esac 65706e7d3316Smrg 65716e7d3316Smrg if test "$age" -gt "$current"; then 65726e7d3316Smrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 65736e7d3316Smrg func_fatal_error "\`$vinfo' is not valid version information" 65746e7d3316Smrg fi 65756e7d3316Smrg 65766e7d3316Smrg # Calculate the version variables. 65776e7d3316Smrg major= 65786e7d3316Smrg versuffix= 65796e7d3316Smrg verstring= 65806e7d3316Smrg case $version_type in 65816e7d3316Smrg none) ;; 65826e7d3316Smrg 65836e7d3316Smrg darwin) 65846e7d3316Smrg # Like Linux, but with the current version available in 65856e7d3316Smrg # verstring for coding it into the library header 65866e7d3316Smrg func_arith $current - $age 65876e7d3316Smrg major=.$func_arith_result 65886e7d3316Smrg versuffix="$major.$age.$revision" 65896e7d3316Smrg # Darwin ld doesn't like 0 for these options... 65906e7d3316Smrg func_arith $current + 1 65916e7d3316Smrg minor_current=$func_arith_result 65926e7d3316Smrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 65936e7d3316Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 65946e7d3316Smrg ;; 65956e7d3316Smrg 65966e7d3316Smrg freebsd-aout) 65976e7d3316Smrg major=".$current" 65986e7d3316Smrg versuffix=".$current.$revision"; 65996e7d3316Smrg ;; 66006e7d3316Smrg 66016e7d3316Smrg freebsd-elf) 66026e7d3316Smrg major=".$current" 66036e7d3316Smrg versuffix=".$current" 66046e7d3316Smrg ;; 66056e7d3316Smrg 66066e7d3316Smrg irix | nonstopux) 66076e7d3316Smrg if test "X$lt_irix_increment" = "Xno"; then 66086e7d3316Smrg func_arith $current - $age 66096e7d3316Smrg else 66106e7d3316Smrg func_arith $current - $age + 1 66116e7d3316Smrg fi 66126e7d3316Smrg major=$func_arith_result 66136e7d3316Smrg 66146e7d3316Smrg case $version_type in 66156e7d3316Smrg nonstopux) verstring_prefix=nonstopux ;; 66166e7d3316Smrg *) verstring_prefix=sgi ;; 66176e7d3316Smrg esac 66186e7d3316Smrg verstring="$verstring_prefix$major.$revision" 66196e7d3316Smrg 66206e7d3316Smrg # Add in all the interfaces that we are compatible with. 66216e7d3316Smrg loop=$revision 66226e7d3316Smrg while test "$loop" -ne 0; do 66236e7d3316Smrg func_arith $revision - $loop 66246e7d3316Smrg iface=$func_arith_result 66256e7d3316Smrg func_arith $loop - 1 66266e7d3316Smrg loop=$func_arith_result 66276e7d3316Smrg verstring="$verstring_prefix$major.$iface:$verstring" 66286e7d3316Smrg done 66296e7d3316Smrg 66306e7d3316Smrg # Before this point, $major must not contain `.'. 66316e7d3316Smrg major=.$major 66326e7d3316Smrg versuffix="$major.$revision" 66336e7d3316Smrg ;; 66346e7d3316Smrg 66356e7d3316Smrg linux) 66366e7d3316Smrg func_arith $current - $age 66376e7d3316Smrg major=.$func_arith_result 66386e7d3316Smrg versuffix="$major.$age.$revision" 66396e7d3316Smrg ;; 66406e7d3316Smrg 66416e7d3316Smrg osf) 66426e7d3316Smrg func_arith $current - $age 66436e7d3316Smrg major=.$func_arith_result 66446e7d3316Smrg versuffix=".$current.$age.$revision" 66456e7d3316Smrg verstring="$current.$age.$revision" 66466e7d3316Smrg 66476e7d3316Smrg # Add in all the interfaces that we are compatible with. 66486e7d3316Smrg loop=$age 66496e7d3316Smrg while test "$loop" -ne 0; do 66506e7d3316Smrg func_arith $current - $loop 66516e7d3316Smrg iface=$func_arith_result 66526e7d3316Smrg func_arith $loop - 1 66536e7d3316Smrg loop=$func_arith_result 66546e7d3316Smrg verstring="$verstring:${iface}.0" 66556e7d3316Smrg done 66566e7d3316Smrg 66576e7d3316Smrg # Make executables depend on our current version. 66586e7d3316Smrg verstring="$verstring:${current}.0" 66596e7d3316Smrg ;; 66606e7d3316Smrg 66616e7d3316Smrg qnx) 66626e7d3316Smrg major=".$current" 66636e7d3316Smrg versuffix=".$current" 66646e7d3316Smrg ;; 66656e7d3316Smrg 66666e7d3316Smrg sunos) 66676e7d3316Smrg major=".$current" 66686e7d3316Smrg versuffix=".$current.$revision" 66696e7d3316Smrg ;; 66706e7d3316Smrg 66716e7d3316Smrg windows) 66726e7d3316Smrg # Use '-' rather than '.', since we only want one 66736e7d3316Smrg # extension on DOS 8.3 filesystems. 66746e7d3316Smrg func_arith $current - $age 66756e7d3316Smrg major=$func_arith_result 66766e7d3316Smrg versuffix="-$major" 66776e7d3316Smrg ;; 66786e7d3316Smrg 66796e7d3316Smrg *) 66806e7d3316Smrg func_fatal_configuration "unknown library version type \`$version_type'" 66816e7d3316Smrg ;; 66826e7d3316Smrg esac 66836e7d3316Smrg 66846e7d3316Smrg # Clear the version info if we defaulted, and they specified a release. 66856e7d3316Smrg if test -z "$vinfo" && test -n "$release"; then 66866e7d3316Smrg major= 66876e7d3316Smrg case $version_type in 66886e7d3316Smrg darwin) 66896e7d3316Smrg # we can't check for "0.0" in archive_cmds due to quoting 66906e7d3316Smrg # problems, so we reset it completely 66916e7d3316Smrg verstring= 66926e7d3316Smrg ;; 66936e7d3316Smrg *) 66946e7d3316Smrg verstring="0.0" 66956e7d3316Smrg ;; 66966e7d3316Smrg esac 66976e7d3316Smrg if test "$need_version" = no; then 66986e7d3316Smrg versuffix= 66996e7d3316Smrg else 67006e7d3316Smrg versuffix=".0.0" 67016e7d3316Smrg fi 67026e7d3316Smrg fi 67036e7d3316Smrg 67046e7d3316Smrg # Remove version info from name if versioning should be avoided 67056e7d3316Smrg if test "$avoid_version" = yes && test "$need_version" = no; then 67066e7d3316Smrg major= 67076e7d3316Smrg versuffix= 67086e7d3316Smrg verstring="" 67096e7d3316Smrg fi 67106e7d3316Smrg 67116e7d3316Smrg # Check to see if the archive will have undefined symbols. 67126e7d3316Smrg if test "$allow_undefined" = yes; then 67136e7d3316Smrg if test "$allow_undefined_flag" = unsupported; then 67146e7d3316Smrg func_warning "undefined symbols not allowed in $host shared libraries" 67156e7d3316Smrg build_libtool_libs=no 67166e7d3316Smrg build_old_libs=yes 67176e7d3316Smrg fi 67186e7d3316Smrg else 67196e7d3316Smrg # Don't allow undefined symbols. 67206e7d3316Smrg allow_undefined_flag="$no_undefined_flag" 67216e7d3316Smrg fi 67226e7d3316Smrg 67236e7d3316Smrg fi 67246e7d3316Smrg 67256e7d3316Smrg func_generate_dlsyms "$libname" "$libname" "yes" 67266e7d3316Smrg libobjs="$libobjs $symfileobj" 67276e7d3316Smrg test "X$libobjs" = "X " && libobjs= 67286e7d3316Smrg 67296e7d3316Smrg if test "$mode" != relink; then 67306e7d3316Smrg # Remove our outputs, but don't remove object files since they 67316e7d3316Smrg # may have been created when compiling PIC objects. 67326e7d3316Smrg removelist= 67336e7d3316Smrg tempremovelist=`$ECHO "$output_objdir/*"` 67346e7d3316Smrg for p in $tempremovelist; do 67356e7d3316Smrg case $p in 67366e7d3316Smrg *.$objext | *.gcno) 67376e7d3316Smrg ;; 67386e7d3316Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 67396e7d3316Smrg if test "X$precious_files_regex" != "X"; then 67406e7d3316Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 67416e7d3316Smrg then 67426e7d3316Smrg continue 67436e7d3316Smrg fi 67446e7d3316Smrg fi 67456e7d3316Smrg removelist="$removelist $p" 67466e7d3316Smrg ;; 67476e7d3316Smrg *) ;; 67486e7d3316Smrg esac 67496e7d3316Smrg done 67506e7d3316Smrg test -n "$removelist" && \ 67516e7d3316Smrg func_show_eval "${RM}r \$removelist" 67526e7d3316Smrg fi 67536e7d3316Smrg 67546e7d3316Smrg # Now set the variables for building old libraries. 67556e7d3316Smrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 67566e7d3316Smrg oldlibs="$oldlibs $output_objdir/$libname.$libext" 67576e7d3316Smrg 67586e7d3316Smrg # Transform .lo files to .o files. 67596e7d3316Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 67606e7d3316Smrg fi 67616e7d3316Smrg 67626e7d3316Smrg # Eliminate all temporary directories. 67636e7d3316Smrg #for path in $notinst_path; do 67646e7d3316Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 67656e7d3316Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 67666e7d3316Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 67676e7d3316Smrg #done 67686e7d3316Smrg 67696e7d3316Smrg if test -n "$xrpath"; then 67706e7d3316Smrg # If the user specified any rpath flags, then add them. 67716e7d3316Smrg temp_xrpath= 67726e7d3316Smrg for libdir in $xrpath; do 67736e7d3316Smrg temp_xrpath="$temp_xrpath -R$libdir" 67746e7d3316Smrg case "$finalize_rpath " in 67756e7d3316Smrg *" $libdir "*) ;; 67766e7d3316Smrg *) finalize_rpath="$finalize_rpath $libdir" ;; 67776e7d3316Smrg esac 67786e7d3316Smrg done 67796e7d3316Smrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 67806e7d3316Smrg dependency_libs="$temp_xrpath $dependency_libs" 67816e7d3316Smrg fi 67826e7d3316Smrg fi 67836e7d3316Smrg 67846e7d3316Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 67856e7d3316Smrg old_dlfiles="$dlfiles" 67866e7d3316Smrg dlfiles= 67876e7d3316Smrg for lib in $old_dlfiles; do 67886e7d3316Smrg case " $dlprefiles $dlfiles " in 67896e7d3316Smrg *" $lib "*) ;; 67906e7d3316Smrg *) dlfiles="$dlfiles $lib" ;; 67916e7d3316Smrg esac 67926e7d3316Smrg done 67936e7d3316Smrg 67946e7d3316Smrg # Make sure dlprefiles contains only unique files 67956e7d3316Smrg old_dlprefiles="$dlprefiles" 67966e7d3316Smrg dlprefiles= 67976e7d3316Smrg for lib in $old_dlprefiles; do 67986e7d3316Smrg case "$dlprefiles " in 67996e7d3316Smrg *" $lib "*) ;; 68006e7d3316Smrg *) dlprefiles="$dlprefiles $lib" ;; 68016e7d3316Smrg esac 68026e7d3316Smrg done 68036e7d3316Smrg 68046e7d3316Smrg if test "$build_libtool_libs" = yes; then 68056e7d3316Smrg if test -n "$rpath"; then 68066e7d3316Smrg case $host in 68076e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 68086e7d3316Smrg # these systems don't actually have a c library (as such)! 68096e7d3316Smrg ;; 68106e7d3316Smrg *-*-rhapsody* | *-*-darwin1.[012]) 68116e7d3316Smrg # Rhapsody C library is in the System framework 68126e7d3316Smrg deplibs="$deplibs System.ltframework" 68136e7d3316Smrg ;; 68146e7d3316Smrg *-*-netbsd*) 68156e7d3316Smrg # Don't link with libc until the a.out ld.so is fixed. 68166e7d3316Smrg ;; 68176e7d3316Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 68186e7d3316Smrg # Do not include libc due to us having libc/libc_r. 68196e7d3316Smrg ;; 68206e7d3316Smrg *-*-sco3.2v5* | *-*-sco5v6*) 68216e7d3316Smrg # Causes problems with __ctype 68226e7d3316Smrg ;; 68236e7d3316Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 68246e7d3316Smrg # Compiler inserts libc in the correct place for threads to work 68256e7d3316Smrg ;; 68266e7d3316Smrg *) 68276e7d3316Smrg # Add libc to deplibs on all other systems if necessary. 68286e7d3316Smrg if test "$build_libtool_need_lc" = "yes"; then 68296e7d3316Smrg deplibs="$deplibs -lc" 68306e7d3316Smrg fi 68316e7d3316Smrg ;; 68326e7d3316Smrg esac 68336e7d3316Smrg fi 68346e7d3316Smrg 68356e7d3316Smrg # Transform deplibs into only deplibs that can be linked in shared. 68366e7d3316Smrg name_save=$name 68376e7d3316Smrg libname_save=$libname 68386e7d3316Smrg release_save=$release 68396e7d3316Smrg versuffix_save=$versuffix 68406e7d3316Smrg major_save=$major 68416e7d3316Smrg # I'm not sure if I'm treating the release correctly. I think 68426e7d3316Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 68436e7d3316Smrg # add it in twice. Is that correct? 68446e7d3316Smrg release="" 68456e7d3316Smrg versuffix="" 68466e7d3316Smrg major="" 68476e7d3316Smrg newdeplibs= 68486e7d3316Smrg droppeddeps=no 68496e7d3316Smrg case $deplibs_check_method in 68506e7d3316Smrg pass_all) 68516e7d3316Smrg # Don't check for shared/static. Everything works. 68526e7d3316Smrg # This might be a little naive. We might want to check 68536e7d3316Smrg # whether the library exists or not. But this is on 68546e7d3316Smrg # osf3 & osf4 and I'm not really sure... Just 68556e7d3316Smrg # implementing what was already the behavior. 68566e7d3316Smrg newdeplibs=$deplibs 68576e7d3316Smrg ;; 68586e7d3316Smrg test_compile) 68596e7d3316Smrg # This code stresses the "libraries are programs" paradigm to its 68606e7d3316Smrg # limits. Maybe even breaks it. We compile a program, linking it 68616e7d3316Smrg # against the deplibs as a proxy for the library. Then we can check 68626e7d3316Smrg # whether they linked in statically or dynamically with ldd. 68636e7d3316Smrg $opt_dry_run || $RM conftest.c 68646e7d3316Smrg cat > conftest.c <<EOF 68656e7d3316Smrg int main() { return 0; } 68666e7d3316SmrgEOF 68676e7d3316Smrg $opt_dry_run || $RM conftest 68686e7d3316Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 68696e7d3316Smrg ldd_output=`ldd conftest` 68706e7d3316Smrg for i in $deplibs; do 68716e7d3316Smrg case $i in 68726e7d3316Smrg -l*) 68736e7d3316Smrg func_stripname -l '' "$i" 68746e7d3316Smrg name=$func_stripname_result 68756e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 68766e7d3316Smrg case " $predeps $postdeps " in 68776e7d3316Smrg *" $i "*) 68786e7d3316Smrg newdeplibs="$newdeplibs $i" 68796e7d3316Smrg i="" 68806e7d3316Smrg ;; 68816e7d3316Smrg esac 68826e7d3316Smrg fi 68836e7d3316Smrg if test -n "$i" ; then 68846e7d3316Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 68856e7d3316Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 68866e7d3316Smrg set dummy $deplib_matches; shift 68876e7d3316Smrg deplib_match=$1 68886e7d3316Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 68896e7d3316Smrg newdeplibs="$newdeplibs $i" 68906e7d3316Smrg else 68916e7d3316Smrg droppeddeps=yes 68926e7d3316Smrg echo 68936e7d3316Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 68946e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 68956e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 68966e7d3316Smrg echo "*** shared version of the library, which I believe you do not have" 68976e7d3316Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 68986e7d3316Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 68996e7d3316Smrg fi 69006e7d3316Smrg fi 69016e7d3316Smrg ;; 69026e7d3316Smrg *) 69036e7d3316Smrg newdeplibs="$newdeplibs $i" 69046e7d3316Smrg ;; 69056e7d3316Smrg esac 69066e7d3316Smrg done 69076e7d3316Smrg else 69086e7d3316Smrg # Error occurred in the first compile. Let's try to salvage 69096e7d3316Smrg # the situation: Compile a separate program for each library. 69106e7d3316Smrg for i in $deplibs; do 69116e7d3316Smrg case $i in 69126e7d3316Smrg -l*) 69136e7d3316Smrg func_stripname -l '' "$i" 69146e7d3316Smrg name=$func_stripname_result 69156e7d3316Smrg $opt_dry_run || $RM conftest 69166e7d3316Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 69176e7d3316Smrg ldd_output=`ldd conftest` 69186e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 69196e7d3316Smrg case " $predeps $postdeps " in 69206e7d3316Smrg *" $i "*) 69216e7d3316Smrg newdeplibs="$newdeplibs $i" 69226e7d3316Smrg i="" 69236e7d3316Smrg ;; 69246e7d3316Smrg esac 69256e7d3316Smrg fi 69266e7d3316Smrg if test -n "$i" ; then 69276e7d3316Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 69286e7d3316Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 69296e7d3316Smrg set dummy $deplib_matches; shift 69306e7d3316Smrg deplib_match=$1 69316e7d3316Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 69326e7d3316Smrg newdeplibs="$newdeplibs $i" 69336e7d3316Smrg else 69346e7d3316Smrg droppeddeps=yes 69356e7d3316Smrg echo 69366e7d3316Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 69376e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 69386e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 69396e7d3316Smrg echo "*** shared version of the library, which you do not appear to have" 69406e7d3316Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 69416e7d3316Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 69426e7d3316Smrg fi 69436e7d3316Smrg fi 69446e7d3316Smrg else 69456e7d3316Smrg droppeddeps=yes 69466e7d3316Smrg echo 69476e7d3316Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 69486e7d3316Smrg echo "*** make it link in! You will probably need to install it or some" 69496e7d3316Smrg echo "*** library that it depends on before this library will be fully" 69506e7d3316Smrg echo "*** functional. Installing it before continuing would be even better." 69516e7d3316Smrg fi 69526e7d3316Smrg ;; 69536e7d3316Smrg *) 69546e7d3316Smrg newdeplibs="$newdeplibs $i" 69556e7d3316Smrg ;; 69566e7d3316Smrg esac 69576e7d3316Smrg done 69586e7d3316Smrg fi 69596e7d3316Smrg ;; 69606e7d3316Smrg file_magic*) 69616e7d3316Smrg set dummy $deplibs_check_method; shift 69626e7d3316Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 69636e7d3316Smrg for a_deplib in $deplibs; do 69646e7d3316Smrg case $a_deplib in 69656e7d3316Smrg -l*) 69666e7d3316Smrg func_stripname -l '' "$a_deplib" 69676e7d3316Smrg name=$func_stripname_result 69686e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 69696e7d3316Smrg case " $predeps $postdeps " in 69706e7d3316Smrg *" $a_deplib "*) 69716e7d3316Smrg newdeplibs="$newdeplibs $a_deplib" 69726e7d3316Smrg a_deplib="" 69736e7d3316Smrg ;; 69746e7d3316Smrg esac 69756e7d3316Smrg fi 69766e7d3316Smrg if test -n "$a_deplib" ; then 69776e7d3316Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 69786e7d3316Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 69796e7d3316Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 69806e7d3316Smrg for potent_lib in $potential_libs; do 69816e7d3316Smrg # Follow soft links. 69826e7d3316Smrg if ls -lLd "$potent_lib" 2>/dev/null | 69836e7d3316Smrg $GREP " -> " >/dev/null; then 69846e7d3316Smrg continue 69856e7d3316Smrg fi 69866e7d3316Smrg # The statement above tries to avoid entering an 69876e7d3316Smrg # endless loop below, in case of cyclic links. 69886e7d3316Smrg # We might still enter an endless loop, since a link 69896e7d3316Smrg # loop can be closed while we follow links, 69906e7d3316Smrg # but so what? 69916e7d3316Smrg potlib="$potent_lib" 69926e7d3316Smrg while test -h "$potlib" 2>/dev/null; do 69936e7d3316Smrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 69946e7d3316Smrg case $potliblink in 69956e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 69966e7d3316Smrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 69976e7d3316Smrg esac 69986e7d3316Smrg done 69996e7d3316Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 70006e7d3316Smrg $SED -e 10q | 70016e7d3316Smrg $EGREP "$file_magic_regex" > /dev/null; then 70026e7d3316Smrg newdeplibs="$newdeplibs $a_deplib" 70036e7d3316Smrg a_deplib="" 70046e7d3316Smrg break 2 70056e7d3316Smrg fi 70066e7d3316Smrg done 70076e7d3316Smrg done 70086e7d3316Smrg fi 70096e7d3316Smrg if test -n "$a_deplib" ; then 70106e7d3316Smrg droppeddeps=yes 70116e7d3316Smrg echo 70126e7d3316Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 70136e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 70146e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 70156e7d3316Smrg echo "*** shared version of the library, which you do not appear to have" 70166e7d3316Smrg echo "*** because I did check the linker path looking for a file starting" 70176e7d3316Smrg if test -z "$potlib" ; then 70186e7d3316Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 70196e7d3316Smrg else 70206e7d3316Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 70216e7d3316Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 70226e7d3316Smrg fi 70236e7d3316Smrg fi 70246e7d3316Smrg ;; 70256e7d3316Smrg *) 70266e7d3316Smrg # Add a -L argument. 70276e7d3316Smrg newdeplibs="$newdeplibs $a_deplib" 70286e7d3316Smrg ;; 70296e7d3316Smrg esac 70306e7d3316Smrg done # Gone through all deplibs. 70316e7d3316Smrg ;; 70326e7d3316Smrg match_pattern*) 70336e7d3316Smrg set dummy $deplibs_check_method; shift 70346e7d3316Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 70356e7d3316Smrg for a_deplib in $deplibs; do 70366e7d3316Smrg case $a_deplib in 70376e7d3316Smrg -l*) 70386e7d3316Smrg func_stripname -l '' "$a_deplib" 70396e7d3316Smrg name=$func_stripname_result 70406e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 70416e7d3316Smrg case " $predeps $postdeps " in 70426e7d3316Smrg *" $a_deplib "*) 70436e7d3316Smrg newdeplibs="$newdeplibs $a_deplib" 70446e7d3316Smrg a_deplib="" 70456e7d3316Smrg ;; 70466e7d3316Smrg esac 70476e7d3316Smrg fi 70486e7d3316Smrg if test -n "$a_deplib" ; then 70496e7d3316Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 70506e7d3316Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 70516e7d3316Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 70526e7d3316Smrg for potent_lib in $potential_libs; do 70536e7d3316Smrg potlib="$potent_lib" # see symlink-check above in file_magic test 70546e7d3316Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 70556e7d3316Smrg $EGREP "$match_pattern_regex" > /dev/null; then 70566e7d3316Smrg newdeplibs="$newdeplibs $a_deplib" 70576e7d3316Smrg a_deplib="" 70586e7d3316Smrg break 2 70596e7d3316Smrg fi 70606e7d3316Smrg done 70616e7d3316Smrg done 70626e7d3316Smrg fi 70636e7d3316Smrg if test -n "$a_deplib" ; then 70646e7d3316Smrg droppeddeps=yes 70656e7d3316Smrg echo 70666e7d3316Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 70676e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 70686e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 70696e7d3316Smrg echo "*** shared version of the library, which you do not appear to have" 70706e7d3316Smrg echo "*** because I did check the linker path looking for a file starting" 70716e7d3316Smrg if test -z "$potlib" ; then 70726e7d3316Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 70736e7d3316Smrg else 70746e7d3316Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 70756e7d3316Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 70766e7d3316Smrg fi 70776e7d3316Smrg fi 70786e7d3316Smrg ;; 70796e7d3316Smrg *) 70806e7d3316Smrg # Add a -L argument. 70816e7d3316Smrg newdeplibs="$newdeplibs $a_deplib" 70826e7d3316Smrg ;; 70836e7d3316Smrg esac 70846e7d3316Smrg done # Gone through all deplibs. 70856e7d3316Smrg ;; 70866e7d3316Smrg none | unknown | *) 70876e7d3316Smrg newdeplibs="" 70886e7d3316Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 70896e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 70906e7d3316Smrg for i in $predeps $postdeps ; do 70916e7d3316Smrg # can't use Xsed below, because $i might contain '/' 70926e7d3316Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 70936e7d3316Smrg done 70946e7d3316Smrg fi 70956e7d3316Smrg case $tmp_deplibs in 70966e7d3316Smrg *[!\ \ ]*) 70976e7d3316Smrg echo 70986e7d3316Smrg if test "X$deplibs_check_method" = "Xnone"; then 70996e7d3316Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 71006e7d3316Smrg else 71016e7d3316Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 71026e7d3316Smrg fi 71036e7d3316Smrg echo "*** All declared inter-library dependencies are being dropped." 71046e7d3316Smrg droppeddeps=yes 71056e7d3316Smrg ;; 71066e7d3316Smrg esac 71076e7d3316Smrg ;; 71086e7d3316Smrg esac 71096e7d3316Smrg versuffix=$versuffix_save 71106e7d3316Smrg major=$major_save 71116e7d3316Smrg release=$release_save 71126e7d3316Smrg libname=$libname_save 71136e7d3316Smrg name=$name_save 71146e7d3316Smrg 71156e7d3316Smrg case $host in 71166e7d3316Smrg *-*-rhapsody* | *-*-darwin1.[012]) 71176e7d3316Smrg # On Rhapsody replace the C library with the System framework 71186e7d3316Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 71196e7d3316Smrg ;; 71206e7d3316Smrg esac 71216e7d3316Smrg 71226e7d3316Smrg if test "$droppeddeps" = yes; then 71236e7d3316Smrg if test "$module" = yes; then 71246e7d3316Smrg echo 71256e7d3316Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 71266e7d3316Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 71276e7d3316Smrg echo "*** a static module, that should work as long as the dlopening" 71286e7d3316Smrg echo "*** application is linked with the -dlopen flag." 71296e7d3316Smrg if test -z "$global_symbol_pipe"; then 71306e7d3316Smrg echo 71316e7d3316Smrg echo "*** However, this would only work if libtool was able to extract symbol" 71326e7d3316Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 71336e7d3316Smrg echo "*** not find such a program. So, this module is probably useless." 71346e7d3316Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 71356e7d3316Smrg fi 71366e7d3316Smrg if test "$build_old_libs" = no; then 71376e7d3316Smrg oldlibs="$output_objdir/$libname.$libext" 71386e7d3316Smrg build_libtool_libs=module 71396e7d3316Smrg build_old_libs=yes 71406e7d3316Smrg else 71416e7d3316Smrg build_libtool_libs=no 71426e7d3316Smrg fi 71436e7d3316Smrg else 71446e7d3316Smrg echo "*** The inter-library dependencies that have been dropped here will be" 71456e7d3316Smrg echo "*** automatically added whenever a program is linked with this library" 71466e7d3316Smrg echo "*** or is declared to -dlopen it." 71476e7d3316Smrg 71486e7d3316Smrg if test "$allow_undefined" = no; then 71496e7d3316Smrg echo 71506e7d3316Smrg echo "*** Since this library must not contain undefined symbols," 71516e7d3316Smrg echo "*** because either the platform does not support them or" 71526e7d3316Smrg echo "*** it was explicitly requested with -no-undefined," 71536e7d3316Smrg echo "*** libtool will only create a static version of it." 71546e7d3316Smrg if test "$build_old_libs" = no; then 71556e7d3316Smrg oldlibs="$output_objdir/$libname.$libext" 71566e7d3316Smrg build_libtool_libs=module 71576e7d3316Smrg build_old_libs=yes 71586e7d3316Smrg else 71596e7d3316Smrg build_libtool_libs=no 71606e7d3316Smrg fi 71616e7d3316Smrg fi 71626e7d3316Smrg fi 71636e7d3316Smrg fi 71646e7d3316Smrg # Done checking deplibs! 71656e7d3316Smrg deplibs=$newdeplibs 71666e7d3316Smrg fi 71676e7d3316Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 71686e7d3316Smrg case $host in 71696e7d3316Smrg *-*-darwin*) 71706e7d3316Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 71716e7d3316Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 71726e7d3316Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 71736e7d3316Smrg ;; 71746e7d3316Smrg esac 71756e7d3316Smrg 71766e7d3316Smrg # move library search paths that coincide with paths to not yet 71776e7d3316Smrg # installed libraries to the beginning of the library search list 71786e7d3316Smrg new_libs= 71796e7d3316Smrg for path in $notinst_path; do 71806e7d3316Smrg case " $new_libs " in 71816e7d3316Smrg *" -L$path/$objdir "*) ;; 71826e7d3316Smrg *) 71836e7d3316Smrg case " $deplibs " in 71846e7d3316Smrg *" -L$path/$objdir "*) 71856e7d3316Smrg new_libs="$new_libs -L$path/$objdir" ;; 71866e7d3316Smrg esac 71876e7d3316Smrg ;; 71886e7d3316Smrg esac 71896e7d3316Smrg done 71906e7d3316Smrg for deplib in $deplibs; do 71916e7d3316Smrg case $deplib in 71926e7d3316Smrg -L*) 71936e7d3316Smrg case " $new_libs " in 71946e7d3316Smrg *" $deplib "*) ;; 71956e7d3316Smrg *) new_libs="$new_libs $deplib" ;; 71966e7d3316Smrg esac 71976e7d3316Smrg ;; 71986e7d3316Smrg *) new_libs="$new_libs $deplib" ;; 71996e7d3316Smrg esac 72006e7d3316Smrg done 72016e7d3316Smrg deplibs="$new_libs" 72026e7d3316Smrg 72036e7d3316Smrg # All the library-specific variables (install_libdir is set above). 72046e7d3316Smrg library_names= 72056e7d3316Smrg old_library= 72066e7d3316Smrg dlname= 72076e7d3316Smrg 72086e7d3316Smrg # Test again, we may have decided not to build it any more 72096e7d3316Smrg if test "$build_libtool_libs" = yes; then 72106e7d3316Smrg if test "$hardcode_into_libs" = yes; then 72116e7d3316Smrg # Hardcode the library paths 72126e7d3316Smrg hardcode_libdirs= 72136e7d3316Smrg dep_rpath= 72146e7d3316Smrg rpath="$finalize_rpath" 72156e7d3316Smrg test "$mode" != relink && rpath="$compile_rpath$rpath" 72166e7d3316Smrg for libdir in $rpath; do 72176e7d3316Smrg if test -n "$hardcode_libdir_flag_spec"; then 72186e7d3316Smrg if test -n "$hardcode_libdir_separator"; then 72196e7d3316Smrg if test -z "$hardcode_libdirs"; then 72206e7d3316Smrg hardcode_libdirs="$libdir" 72216e7d3316Smrg else 72226e7d3316Smrg # Just accumulate the unique libdirs. 72236e7d3316Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 72246e7d3316Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 72256e7d3316Smrg ;; 72266e7d3316Smrg *) 72276e7d3316Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 72286e7d3316Smrg ;; 72296e7d3316Smrg esac 72306e7d3316Smrg fi 72316e7d3316Smrg else 72326e7d3316Smrg eval flag=\"$hardcode_libdir_flag_spec\" 72336e7d3316Smrg dep_rpath="$dep_rpath $flag" 72346e7d3316Smrg fi 72356e7d3316Smrg elif test -n "$runpath_var"; then 72366e7d3316Smrg case "$perm_rpath " in 72376e7d3316Smrg *" $libdir "*) ;; 72386e7d3316Smrg *) perm_rpath="$perm_rpath $libdir" ;; 72396e7d3316Smrg esac 72406e7d3316Smrg fi 72416e7d3316Smrg done 72426e7d3316Smrg # Substitute the hardcoded libdirs into the rpath. 72436e7d3316Smrg if test -n "$hardcode_libdir_separator" && 72446e7d3316Smrg test -n "$hardcode_libdirs"; then 72456e7d3316Smrg libdir="$hardcode_libdirs" 72466e7d3316Smrg if test -n "$hardcode_libdir_flag_spec_ld"; then 72476e7d3316Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 72486e7d3316Smrg else 72496e7d3316Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec\" 72506e7d3316Smrg fi 72516e7d3316Smrg fi 72526e7d3316Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 72536e7d3316Smrg # We should set the runpath_var. 72546e7d3316Smrg rpath= 72556e7d3316Smrg for dir in $perm_rpath; do 72566e7d3316Smrg rpath="$rpath$dir:" 72576e7d3316Smrg done 72586e7d3316Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 72596e7d3316Smrg fi 72606e7d3316Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 72616e7d3316Smrg fi 7262a966c04fSmrg 72636e7d3316Smrg shlibpath="$finalize_shlibpath" 72646e7d3316Smrg test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 72656e7d3316Smrg if test -n "$shlibpath"; then 72666e7d3316Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 72676e7d3316Smrg fi 7268a966c04fSmrg 72696e7d3316Smrg # Get the real and link names of the library. 72706e7d3316Smrg eval shared_ext=\"$shrext_cmds\" 72716e7d3316Smrg eval library_names=\"$library_names_spec\" 72726e7d3316Smrg set dummy $library_names 72736e7d3316Smrg shift 72746e7d3316Smrg realname="$1" 72756e7d3316Smrg shift 7276a966c04fSmrg 72776e7d3316Smrg if test -n "$soname_spec"; then 72786e7d3316Smrg eval soname=\"$soname_spec\" 72796e7d3316Smrg else 72806e7d3316Smrg soname="$realname" 72816e7d3316Smrg fi 72826e7d3316Smrg if test -z "$dlname"; then 72836e7d3316Smrg dlname=$soname 72846e7d3316Smrg fi 7285a966c04fSmrg 72866e7d3316Smrg lib="$output_objdir/$realname" 72876e7d3316Smrg linknames= 72886e7d3316Smrg for link 72896e7d3316Smrg do 72906e7d3316Smrg linknames="$linknames $link" 72916e7d3316Smrg done 7292a966c04fSmrg 72936e7d3316Smrg # Use standard objects if they are pic 72946e7d3316Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 72956e7d3316Smrg test "X$libobjs" = "X " && libobjs= 7296a966c04fSmrg 72976e7d3316Smrg delfiles= 72986e7d3316Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 72996e7d3316Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 73006e7d3316Smrg export_symbols="$output_objdir/$libname.uexp" 73016e7d3316Smrg delfiles="$delfiles $export_symbols" 73026e7d3316Smrg fi 7303a966c04fSmrg 73046e7d3316Smrg orig_export_symbols= 73056e7d3316Smrg case $host_os in 73066e7d3316Smrg cygwin* | mingw* | cegcc*) 73076e7d3316Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 73086e7d3316Smrg # exporting using user supplied symfile 73096e7d3316Smrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 73106e7d3316Smrg # and it's NOT already a .def file. Must figure out 73116e7d3316Smrg # which of the given symbols are data symbols and tag 73126e7d3316Smrg # them as such. So, trigger use of export_symbols_cmds. 73136e7d3316Smrg # export_symbols gets reassigned inside the "prepare 73146e7d3316Smrg # the list of exported symbols" if statement, so the 73156e7d3316Smrg # include_expsyms logic still works. 73166e7d3316Smrg orig_export_symbols="$export_symbols" 73176e7d3316Smrg export_symbols= 73186e7d3316Smrg always_export_symbols=yes 73196e7d3316Smrg fi 73206e7d3316Smrg fi 73216e7d3316Smrg ;; 73226e7d3316Smrg esac 7323a966c04fSmrg 73246e7d3316Smrg # Prepare the list of exported symbols 73256e7d3316Smrg if test -z "$export_symbols"; then 73266e7d3316Smrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 73276e7d3316Smrg func_verbose "generating symbol list for \`$libname.la'" 73286e7d3316Smrg export_symbols="$output_objdir/$libname.exp" 73296e7d3316Smrg $opt_dry_run || $RM $export_symbols 73306e7d3316Smrg cmds=$export_symbols_cmds 73316e7d3316Smrg save_ifs="$IFS"; IFS='~' 73326e7d3316Smrg for cmd in $cmds; do 73336e7d3316Smrg IFS="$save_ifs" 73346e7d3316Smrg eval cmd=\"$cmd\" 73356e7d3316Smrg func_len " $cmd" 73366e7d3316Smrg len=$func_len_result 73376e7d3316Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 73386e7d3316Smrg func_show_eval "$cmd" 'exit $?' 73396e7d3316Smrg skipped_export=false 73406e7d3316Smrg else 73416e7d3316Smrg # The command line is too long to execute in one step. 73426e7d3316Smrg func_verbose "using reloadable object file for export list..." 73436e7d3316Smrg skipped_export=: 73446e7d3316Smrg # Break out early, otherwise skipped_export may be 73456e7d3316Smrg # set to false by a later but shorter cmd. 73466e7d3316Smrg break 73476e7d3316Smrg fi 73486e7d3316Smrg done 73496e7d3316Smrg IFS="$save_ifs" 73506e7d3316Smrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 73516e7d3316Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 73526e7d3316Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 73536e7d3316Smrg fi 73546e7d3316Smrg fi 73556e7d3316Smrg fi 7356a966c04fSmrg 73576e7d3316Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 73586e7d3316Smrg tmp_export_symbols="$export_symbols" 73596e7d3316Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 73606e7d3316Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 73616e7d3316Smrg fi 7362a966c04fSmrg 73636e7d3316Smrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 73646e7d3316Smrg # The given exports_symbols file has to be filtered, so filter it. 73656e7d3316Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 73666e7d3316Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 73676e7d3316Smrg # 's' commands which not all seds can handle. GNU sed should be fine 73686e7d3316Smrg # though. Also, the filter scales superlinearly with the number of 73696e7d3316Smrg # global variables. join(1) would be nice here, but unfortunately 73706e7d3316Smrg # isn't a blessed tool. 73716e7d3316Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 73726e7d3316Smrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 73736e7d3316Smrg export_symbols=$output_objdir/$libname.def 73746e7d3316Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 7375a966c04fSmrg fi 7376a966c04fSmrg 73776e7d3316Smrg tmp_deplibs= 73786e7d3316Smrg for test_deplib in $deplibs; do 73796e7d3316Smrg case " $convenience " in 73806e7d3316Smrg *" $test_deplib "*) ;; 73816e7d3316Smrg *) 73826e7d3316Smrg tmp_deplibs="$tmp_deplibs $test_deplib" 73836e7d3316Smrg ;; 73846e7d3316Smrg esac 73856e7d3316Smrg done 73866e7d3316Smrg deplibs="$tmp_deplibs" 7387a966c04fSmrg 73886e7d3316Smrg if test -n "$convenience"; then 73896e7d3316Smrg if test -n "$whole_archive_flag_spec" && 73906e7d3316Smrg test "$compiler_needs_object" = yes && 73916e7d3316Smrg test -z "$libobjs"; then 73926e7d3316Smrg # extract the archives, so we have objects to list. 73936e7d3316Smrg # TODO: could optimize this to just extract one archive. 73946e7d3316Smrg whole_archive_flag_spec= 73956e7d3316Smrg fi 73966e7d3316Smrg if test -n "$whole_archive_flag_spec"; then 73976e7d3316Smrg save_libobjs=$libobjs 73986e7d3316Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 73996e7d3316Smrg test "X$libobjs" = "X " && libobjs= 74006e7d3316Smrg else 74016e7d3316Smrg gentop="$output_objdir/${outputname}x" 74026e7d3316Smrg generated="$generated $gentop" 7403a966c04fSmrg 74046e7d3316Smrg func_extract_archives $gentop $convenience 74056e7d3316Smrg libobjs="$libobjs $func_extract_archives_result" 74066e7d3316Smrg test "X$libobjs" = "X " && libobjs= 74076e7d3316Smrg fi 74086e7d3316Smrg fi 7409a966c04fSmrg 74106e7d3316Smrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 74116e7d3316Smrg eval flag=\"$thread_safe_flag_spec\" 74126e7d3316Smrg linker_flags="$linker_flags $flag" 74136e7d3316Smrg fi 7414a966c04fSmrg 74156e7d3316Smrg # Make a backup of the uninstalled library when relinking 74166e7d3316Smrg if test "$mode" = relink; then 74176e7d3316Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 7418a966c04fSmrg fi 7419a966c04fSmrg 74206e7d3316Smrg # Do each of the archive commands. 74216e7d3316Smrg if test "$module" = yes && test -n "$module_cmds" ; then 74226e7d3316Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 74236e7d3316Smrg eval test_cmds=\"$module_expsym_cmds\" 74246e7d3316Smrg cmds=$module_expsym_cmds 74256e7d3316Smrg else 74266e7d3316Smrg eval test_cmds=\"$module_cmds\" 74276e7d3316Smrg cmds=$module_cmds 74286e7d3316Smrg fi 74296e7d3316Smrg else 74306e7d3316Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 74316e7d3316Smrg eval test_cmds=\"$archive_expsym_cmds\" 74326e7d3316Smrg cmds=$archive_expsym_cmds 74336e7d3316Smrg else 74346e7d3316Smrg eval test_cmds=\"$archive_cmds\" 74356e7d3316Smrg cmds=$archive_cmds 74366e7d3316Smrg fi 7437a966c04fSmrg fi 7438a966c04fSmrg 74396e7d3316Smrg if test "X$skipped_export" != "X:" && 74406e7d3316Smrg func_len " $test_cmds" && 74416e7d3316Smrg len=$func_len_result && 74426e7d3316Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 74436e7d3316Smrg : 74446e7d3316Smrg else 74456e7d3316Smrg # The command line is too long to link in one step, link piecewise 74466e7d3316Smrg # or, if using GNU ld and skipped_export is not :, use a linker 74476e7d3316Smrg # script. 7448a966c04fSmrg 74496e7d3316Smrg # Save the value of $output and $libobjs because we want to 74506e7d3316Smrg # use them later. If we have whole_archive_flag_spec, we 74516e7d3316Smrg # want to use save_libobjs as it was before 74526e7d3316Smrg # whole_archive_flag_spec was expanded, because we can't 74536e7d3316Smrg # assume the linker understands whole_archive_flag_spec. 74546e7d3316Smrg # This may have to be revisited, in case too many 74556e7d3316Smrg # convenience libraries get linked in and end up exceeding 74566e7d3316Smrg # the spec. 74576e7d3316Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 74586e7d3316Smrg save_libobjs=$libobjs 74596e7d3316Smrg fi 74606e7d3316Smrg save_output=$output 74616e7d3316Smrg func_basename "$output" 74626e7d3316Smrg output_la=$func_basename_result 7463a966c04fSmrg 74646e7d3316Smrg # Clear the reloadable object creation command queue and 74656e7d3316Smrg # initialize k to one. 74666e7d3316Smrg test_cmds= 74676e7d3316Smrg concat_cmds= 74686e7d3316Smrg objlist= 74696e7d3316Smrg last_robj= 74706e7d3316Smrg k=1 7471a966c04fSmrg 74726e7d3316Smrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 74736e7d3316Smrg output=${output_objdir}/${output_la}.lnkscript 74746e7d3316Smrg func_verbose "creating GNU ld script: $output" 74756e7d3316Smrg echo 'INPUT (' > $output 74766e7d3316Smrg for obj in $save_libobjs 74776e7d3316Smrg do 74786e7d3316Smrg $ECHO "$obj" >> $output 74796e7d3316Smrg done 74806e7d3316Smrg echo ')' >> $output 74816e7d3316Smrg delfiles="$delfiles $output" 74826e7d3316Smrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 74836e7d3316Smrg output=${output_objdir}/${output_la}.lnk 74846e7d3316Smrg func_verbose "creating linker input file list: $output" 74856e7d3316Smrg : > $output 74866e7d3316Smrg set x $save_libobjs 74876e7d3316Smrg shift 74886e7d3316Smrg firstobj= 74896e7d3316Smrg if test "$compiler_needs_object" = yes; then 74906e7d3316Smrg firstobj="$1 " 74916e7d3316Smrg shift 74926e7d3316Smrg fi 74936e7d3316Smrg for obj 74946e7d3316Smrg do 74956e7d3316Smrg $ECHO "$obj" >> $output 74966e7d3316Smrg done 74976e7d3316Smrg delfiles="$delfiles $output" 74986e7d3316Smrg output=$firstobj\"$file_list_spec$output\" 74996e7d3316Smrg else 75006e7d3316Smrg if test -n "$save_libobjs"; then 75016e7d3316Smrg func_verbose "creating reloadable object files..." 75026e7d3316Smrg output=$output_objdir/$output_la-${k}.$objext 75036e7d3316Smrg eval test_cmds=\"$reload_cmds\" 75046e7d3316Smrg func_len " $test_cmds" 75056e7d3316Smrg len0=$func_len_result 75066e7d3316Smrg len=$len0 75076e7d3316Smrg 75086e7d3316Smrg # Loop over the list of objects to be linked. 75096e7d3316Smrg for obj in $save_libobjs 75106e7d3316Smrg do 75116e7d3316Smrg func_len " $obj" 75126e7d3316Smrg func_arith $len + $func_len_result 75136e7d3316Smrg len=$func_arith_result 75146e7d3316Smrg if test "X$objlist" = X || 75156e7d3316Smrg test "$len" -lt "$max_cmd_len"; then 75166e7d3316Smrg func_append objlist " $obj" 75176e7d3316Smrg else 75186e7d3316Smrg # The command $test_cmds is almost too long, add a 75196e7d3316Smrg # command to the queue. 75206e7d3316Smrg if test "$k" -eq 1 ; then 75216e7d3316Smrg # The first file doesn't have a previous command to add. 75226e7d3316Smrg reload_objs=$objlist 75236e7d3316Smrg eval concat_cmds=\"$reload_cmds\" 75246e7d3316Smrg else 75256e7d3316Smrg # All subsequent reloadable object files will link in 75266e7d3316Smrg # the last one created. 75276e7d3316Smrg reload_objs="$objlist $last_robj" 75286e7d3316Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 75296e7d3316Smrg fi 75306e7d3316Smrg last_robj=$output_objdir/$output_la-${k}.$objext 75316e7d3316Smrg func_arith $k + 1 75326e7d3316Smrg k=$func_arith_result 75336e7d3316Smrg output=$output_objdir/$output_la-${k}.$objext 75346e7d3316Smrg objlist=" $obj" 75356e7d3316Smrg func_len " $last_robj" 75366e7d3316Smrg func_arith $len0 + $func_len_result 75376e7d3316Smrg len=$func_arith_result 75386e7d3316Smrg fi 75396e7d3316Smrg done 75406e7d3316Smrg # Handle the remaining objects by creating one last 75416e7d3316Smrg # reloadable object file. All subsequent reloadable object 75426e7d3316Smrg # files will link in the last one created. 75436e7d3316Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 75446e7d3316Smrg reload_objs="$objlist $last_robj" 75456e7d3316Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 75466e7d3316Smrg if test -n "$last_robj"; then 75476e7d3316Smrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 75486e7d3316Smrg fi 75496e7d3316Smrg delfiles="$delfiles $output" 75506e7d3316Smrg 75516e7d3316Smrg else 75526e7d3316Smrg output= 75536e7d3316Smrg fi 7554a966c04fSmrg 75556e7d3316Smrg if ${skipped_export-false}; then 75566e7d3316Smrg func_verbose "generating symbol list for \`$libname.la'" 75576e7d3316Smrg export_symbols="$output_objdir/$libname.exp" 75586e7d3316Smrg $opt_dry_run || $RM $export_symbols 75596e7d3316Smrg libobjs=$output 75606e7d3316Smrg # Append the command to create the export file. 75616e7d3316Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 75626e7d3316Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 75636e7d3316Smrg if test -n "$last_robj"; then 75646e7d3316Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 75656e7d3316Smrg fi 75666e7d3316Smrg fi 7567a966c04fSmrg 75686e7d3316Smrg test -n "$save_libobjs" && 75696e7d3316Smrg func_verbose "creating a temporary reloadable object file: $output" 7570a966c04fSmrg 75716e7d3316Smrg # Loop through the commands generated above and execute them. 75726e7d3316Smrg save_ifs="$IFS"; IFS='~' 75736e7d3316Smrg for cmd in $concat_cmds; do 75746e7d3316Smrg IFS="$save_ifs" 75756e7d3316Smrg $opt_silent || { 75766e7d3316Smrg func_quote_for_expand "$cmd" 75776e7d3316Smrg eval "func_echo $func_quote_for_expand_result" 75786e7d3316Smrg } 75796e7d3316Smrg $opt_dry_run || eval "$cmd" || { 75806e7d3316Smrg lt_exit=$? 75816e7d3316Smrg 75826e7d3316Smrg # Restore the uninstalled library and exit 75836e7d3316Smrg if test "$mode" = relink; then 75846e7d3316Smrg ( cd "$output_objdir" && \ 75856e7d3316Smrg $RM "${realname}T" && \ 75866e7d3316Smrg $MV "${realname}U" "$realname" ) 75876e7d3316Smrg fi 7588a966c04fSmrg 75896e7d3316Smrg exit $lt_exit 75906e7d3316Smrg } 75916e7d3316Smrg done 75926e7d3316Smrg IFS="$save_ifs" 7593a966c04fSmrg 75946e7d3316Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 75956e7d3316Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 75966e7d3316Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 7597a966c04fSmrg fi 7598a966c04fSmrg fi 7599a966c04fSmrg 76006e7d3316Smrg if ${skipped_export-false}; then 76016e7d3316Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 76026e7d3316Smrg tmp_export_symbols="$export_symbols" 76036e7d3316Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 76046e7d3316Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 76056e7d3316Smrg fi 7606a966c04fSmrg 76076e7d3316Smrg if test -n "$orig_export_symbols"; then 76086e7d3316Smrg # The given exports_symbols file has to be filtered, so filter it. 76096e7d3316Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 76106e7d3316Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 76116e7d3316Smrg # 's' commands which not all seds can handle. GNU sed should be fine 76126e7d3316Smrg # though. Also, the filter scales superlinearly with the number of 76136e7d3316Smrg # global variables. join(1) would be nice here, but unfortunately 76146e7d3316Smrg # isn't a blessed tool. 76156e7d3316Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 76166e7d3316Smrg delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" 76176e7d3316Smrg export_symbols=$output_objdir/$libname.def 76186e7d3316Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 76196e7d3316Smrg fi 76206e7d3316Smrg fi 7621a966c04fSmrg 76226e7d3316Smrg libobjs=$output 76236e7d3316Smrg # Restore the value of output. 76246e7d3316Smrg output=$save_output 7625a966c04fSmrg 76266e7d3316Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 76276e7d3316Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 76286e7d3316Smrg test "X$libobjs" = "X " && libobjs= 76296e7d3316Smrg fi 76306e7d3316Smrg # Expand the library linking commands again to reset the 76316e7d3316Smrg # value of $libobjs for piecewise linking. 76326e7d3316Smrg 76336e7d3316Smrg # Do each of the archive commands. 76346e7d3316Smrg if test "$module" = yes && test -n "$module_cmds" ; then 76356e7d3316Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 76366e7d3316Smrg cmds=$module_expsym_cmds 7637a966c04fSmrg else 76386e7d3316Smrg cmds=$module_cmds 7639a966c04fSmrg fi 7640a966c04fSmrg else 76416e7d3316Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 76426e7d3316Smrg cmds=$archive_expsym_cmds 76436e7d3316Smrg else 76446e7d3316Smrg cmds=$archive_cmds 76456e7d3316Smrg fi 7646a966c04fSmrg fi 7647a966c04fSmrg fi 7648a966c04fSmrg 76496e7d3316Smrg if test -n "$delfiles"; then 76506e7d3316Smrg # Append the command to remove temporary files to $cmds. 76516e7d3316Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 76526e7d3316Smrg fi 7653a966c04fSmrg 76546e7d3316Smrg # Add any objects from preloaded convenience libraries 76556e7d3316Smrg if test -n "$dlprefiles"; then 76566e7d3316Smrg gentop="$output_objdir/${outputname}x" 76576e7d3316Smrg generated="$generated $gentop" 7658a966c04fSmrg 76596e7d3316Smrg func_extract_archives $gentop $dlprefiles 76606e7d3316Smrg libobjs="$libobjs $func_extract_archives_result" 76616e7d3316Smrg test "X$libobjs" = "X " && libobjs= 7662a966c04fSmrg fi 7663a966c04fSmrg 76646e7d3316Smrg save_ifs="$IFS"; IFS='~' 76656e7d3316Smrg for cmd in $cmds; do 76666e7d3316Smrg IFS="$save_ifs" 76676e7d3316Smrg eval cmd=\"$cmd\" 76686e7d3316Smrg $opt_silent || { 76696e7d3316Smrg func_quote_for_expand "$cmd" 76706e7d3316Smrg eval "func_echo $func_quote_for_expand_result" 76716e7d3316Smrg } 76726e7d3316Smrg $opt_dry_run || eval "$cmd" || { 76736e7d3316Smrg lt_exit=$? 7674a966c04fSmrg 76756e7d3316Smrg # Restore the uninstalled library and exit 76766e7d3316Smrg if test "$mode" = relink; then 76776e7d3316Smrg ( cd "$output_objdir" && \ 76786e7d3316Smrg $RM "${realname}T" && \ 76796e7d3316Smrg $MV "${realname}U" "$realname" ) 7680a966c04fSmrg fi 7681a966c04fSmrg 76826e7d3316Smrg exit $lt_exit 76836e7d3316Smrg } 76846e7d3316Smrg done 76856e7d3316Smrg IFS="$save_ifs" 7686a966c04fSmrg 76876e7d3316Smrg # Restore the uninstalled library and exit 76886e7d3316Smrg if test "$mode" = relink; then 76896e7d3316Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 7690a966c04fSmrg 76916e7d3316Smrg if test -n "$convenience"; then 76926e7d3316Smrg if test -z "$whole_archive_flag_spec"; then 76936e7d3316Smrg func_show_eval '${RM}r "$gentop"' 76946e7d3316Smrg fi 76956e7d3316Smrg fi 7696a966c04fSmrg 76976e7d3316Smrg exit $EXIT_SUCCESS 76986e7d3316Smrg fi 7699a966c04fSmrg 77006e7d3316Smrg # Create links to the real library. 77016e7d3316Smrg for linkname in $linknames; do 77026e7d3316Smrg if test "$realname" != "$linkname"; then 77036e7d3316Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 77046e7d3316Smrg fi 77056e7d3316Smrg done 7706a966c04fSmrg 77076e7d3316Smrg # If -module or -export-dynamic was specified, set the dlname. 77086e7d3316Smrg if test "$module" = yes || test "$export_dynamic" = yes; then 77096e7d3316Smrg # On all known operating systems, these are identical. 77106e7d3316Smrg dlname="$soname" 77116e7d3316Smrg fi 77126e7d3316Smrg fi 77136e7d3316Smrg ;; 7714a966c04fSmrg 77156e7d3316Smrg obj) 77166e7d3316Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 77176e7d3316Smrg func_warning "\`-dlopen' is ignored for objects" 77186e7d3316Smrg fi 7719a966c04fSmrg 77206e7d3316Smrg case " $deplibs" in 77216e7d3316Smrg *\ -l* | *\ -L*) 77226e7d3316Smrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 77236e7d3316Smrg esac 7724a966c04fSmrg 77256e7d3316Smrg test -n "$rpath" && \ 77266e7d3316Smrg func_warning "\`-rpath' is ignored for objects" 7727a966c04fSmrg 77286e7d3316Smrg test -n "$xrpath" && \ 77296e7d3316Smrg func_warning "\`-R' is ignored for objects" 77306e7d3316Smrg 77316e7d3316Smrg test -n "$vinfo" && \ 77326e7d3316Smrg func_warning "\`-version-info' is ignored for objects" 7733a966c04fSmrg 77346e7d3316Smrg test -n "$release" && \ 77356e7d3316Smrg func_warning "\`-release' is ignored for objects" 7736a966c04fSmrg 77376e7d3316Smrg case $output in 77386e7d3316Smrg *.lo) 77396e7d3316Smrg test -n "$objs$old_deplibs" && \ 77406e7d3316Smrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 77416e7d3316Smrg 77426e7d3316Smrg libobj=$output 77436e7d3316Smrg func_lo2o "$libobj" 77446e7d3316Smrg obj=$func_lo2o_result 77456e7d3316Smrg ;; 77466e7d3316Smrg *) 77476e7d3316Smrg libobj= 77486e7d3316Smrg obj="$output" 7749a966c04fSmrg ;; 7750a966c04fSmrg esac 7751a966c04fSmrg 77526e7d3316Smrg # Delete the old objects. 77536e7d3316Smrg $opt_dry_run || $RM $obj $libobj 7754a966c04fSmrg 77556e7d3316Smrg # Objects from convenience libraries. This assumes 77566e7d3316Smrg # single-version convenience libraries. Whenever we create 77576e7d3316Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 77586e7d3316Smrg # the extraction. 77596e7d3316Smrg reload_conv_objs= 77606e7d3316Smrg gentop= 77616e7d3316Smrg # reload_cmds runs $LD directly, so let us get rid of 77626e7d3316Smrg # -Wl from whole_archive_flag_spec and hope we can get by with 77636e7d3316Smrg # turning comma into space.. 77646e7d3316Smrg wl= 7765a966c04fSmrg 77666e7d3316Smrg if test -n "$convenience"; then 77676e7d3316Smrg if test -n "$whole_archive_flag_spec"; then 77686e7d3316Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 77696e7d3316Smrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 7770a966c04fSmrg else 77716e7d3316Smrg gentop="$output_objdir/${obj}x" 77726e7d3316Smrg generated="$generated $gentop" 77736e7d3316Smrg 77746e7d3316Smrg func_extract_archives $gentop $convenience 77756e7d3316Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 7776a966c04fSmrg fi 77776e7d3316Smrg fi 7778a966c04fSmrg 77796e7d3316Smrg # Create the old-style object. 77806e7d3316Smrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 7781a966c04fSmrg 77826e7d3316Smrg output="$obj" 77836e7d3316Smrg func_execute_cmds "$reload_cmds" 'exit $?' 7784a966c04fSmrg 77856e7d3316Smrg # Exit if we aren't doing a library object file. 77866e7d3316Smrg if test -z "$libobj"; then 77876e7d3316Smrg if test -n "$gentop"; then 77886e7d3316Smrg func_show_eval '${RM}r "$gentop"' 77896e7d3316Smrg fi 7790a966c04fSmrg 77916e7d3316Smrg exit $EXIT_SUCCESS 7792a966c04fSmrg fi 7793a966c04fSmrg 77946e7d3316Smrg if test "$build_libtool_libs" != yes; then 77956e7d3316Smrg if test -n "$gentop"; then 77966e7d3316Smrg func_show_eval '${RM}r "$gentop"' 77976e7d3316Smrg fi 7798a966c04fSmrg 77996e7d3316Smrg # Create an invalid libtool object if no PIC, so that we don't 78006e7d3316Smrg # accidentally link it into a program. 78016e7d3316Smrg # $show "echo timestamp > $libobj" 78026e7d3316Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 78036e7d3316Smrg exit $EXIT_SUCCESS 78046e7d3316Smrg fi 7805a966c04fSmrg 78066e7d3316Smrg if test -n "$pic_flag" || test "$pic_mode" != default; then 78076e7d3316Smrg # Only do commands if we really have different PIC objects. 78086e7d3316Smrg reload_objs="$libobjs $reload_conv_objs" 78096e7d3316Smrg output="$libobj" 78106e7d3316Smrg func_execute_cmds "$reload_cmds" 'exit $?' 7811a966c04fSmrg fi 78126e7d3316Smrg 78136e7d3316Smrg if test -n "$gentop"; then 78146e7d3316Smrg func_show_eval '${RM}r "$gentop"' 78156e7d3316Smrg fi 78166e7d3316Smrg 78176e7d3316Smrg exit $EXIT_SUCCESS 7818a966c04fSmrg ;; 7819a966c04fSmrg 78206e7d3316Smrg prog) 78216e7d3316Smrg case $host in 78226e7d3316Smrg *cygwin*) func_stripname '' '.exe' "$output" 78236e7d3316Smrg output=$func_stripname_result.exe;; 78246e7d3316Smrg esac 78256e7d3316Smrg test -n "$vinfo" && \ 78266e7d3316Smrg func_warning "\`-version-info' is ignored for programs" 7827a966c04fSmrg 78286e7d3316Smrg test -n "$release" && \ 78296e7d3316Smrg func_warning "\`-release' is ignored for programs" 7830a966c04fSmrg 78316e7d3316Smrg test "$preload" = yes \ 78326e7d3316Smrg && test "$dlopen_support" = unknown \ 78336e7d3316Smrg && test "$dlopen_self" = unknown \ 78346e7d3316Smrg && test "$dlopen_self_static" = unknown && \ 78356e7d3316Smrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 78366e7d3316Smrg 78376e7d3316Smrg case $host in 78386e7d3316Smrg *-*-rhapsody* | *-*-darwin1.[012]) 78396e7d3316Smrg # On Rhapsody replace the C library is the System framework 78406e7d3316Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 78416e7d3316Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 7842a966c04fSmrg ;; 78436e7d3316Smrg esac 7844a966c04fSmrg 78456e7d3316Smrg case $host in 78466e7d3316Smrg *-*-darwin*) 78476e7d3316Smrg # Don't allow lazy linking, it breaks C++ global constructors 78486e7d3316Smrg # But is supposedly fixed on 10.4 or later (yay!). 78496e7d3316Smrg if test "$tagname" = CXX ; then 78506e7d3316Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 78516e7d3316Smrg 10.[0123]) 78526e7d3316Smrg compile_command="$compile_command ${wl}-bind_at_load" 78536e7d3316Smrg finalize_command="$finalize_command ${wl}-bind_at_load" 78546e7d3316Smrg ;; 78556e7d3316Smrg esac 7856a966c04fSmrg fi 78576e7d3316Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 78586e7d3316Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 78596e7d3316Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 78606e7d3316Smrg ;; 78616e7d3316Smrg esac 7862a966c04fSmrg 7863a966c04fSmrg 78646e7d3316Smrg # move library search paths that coincide with paths to not yet 78656e7d3316Smrg # installed libraries to the beginning of the library search list 78666e7d3316Smrg new_libs= 78676e7d3316Smrg for path in $notinst_path; do 78686e7d3316Smrg case " $new_libs " in 78696e7d3316Smrg *" -L$path/$objdir "*) ;; 78706e7d3316Smrg *) 78716e7d3316Smrg case " $compile_deplibs " in 78726e7d3316Smrg *" -L$path/$objdir "*) 78736e7d3316Smrg new_libs="$new_libs -L$path/$objdir" ;; 7874a966c04fSmrg esac 78756e7d3316Smrg ;; 78766e7d3316Smrg esac 78776e7d3316Smrg done 78786e7d3316Smrg for deplib in $compile_deplibs; do 78796e7d3316Smrg case $deplib in 78806e7d3316Smrg -L*) 78816e7d3316Smrg case " $new_libs " in 78826e7d3316Smrg *" $deplib "*) ;; 78836e7d3316Smrg *) new_libs="$new_libs $deplib" ;; 7884a966c04fSmrg esac 78856e7d3316Smrg ;; 78866e7d3316Smrg *) new_libs="$new_libs $deplib" ;; 78876e7d3316Smrg esac 78886e7d3316Smrg done 78896e7d3316Smrg compile_deplibs="$new_libs" 7890a966c04fSmrg 7891a966c04fSmrg 78926e7d3316Smrg compile_command="$compile_command $compile_deplibs" 78936e7d3316Smrg finalize_command="$finalize_command $finalize_deplibs" 7894a966c04fSmrg 78956e7d3316Smrg if test -n "$rpath$xrpath"; then 78966e7d3316Smrg # If the user specified any rpath flags, then add them. 78976e7d3316Smrg for libdir in $rpath $xrpath; do 78986e7d3316Smrg # This is the magic to use -rpath. 78996e7d3316Smrg case "$finalize_rpath " in 79006e7d3316Smrg *" $libdir "*) ;; 79016e7d3316Smrg *) finalize_rpath="$finalize_rpath $libdir" ;; 79026e7d3316Smrg esac 79036e7d3316Smrg done 79046e7d3316Smrg fi 7905a966c04fSmrg 79066e7d3316Smrg # Now hardcode the library paths 79076e7d3316Smrg rpath= 79086e7d3316Smrg hardcode_libdirs= 79096e7d3316Smrg for libdir in $compile_rpath $finalize_rpath; do 79106e7d3316Smrg if test -n "$hardcode_libdir_flag_spec"; then 79116e7d3316Smrg if test -n "$hardcode_libdir_separator"; then 79126e7d3316Smrg if test -z "$hardcode_libdirs"; then 79136e7d3316Smrg hardcode_libdirs="$libdir" 79146e7d3316Smrg else 79156e7d3316Smrg # Just accumulate the unique libdirs. 79166e7d3316Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 79176e7d3316Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 79186e7d3316Smrg ;; 79196e7d3316Smrg *) 79206e7d3316Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 79216e7d3316Smrg ;; 79226e7d3316Smrg esac 79236e7d3316Smrg fi 7924a966c04fSmrg else 79256e7d3316Smrg eval flag=\"$hardcode_libdir_flag_spec\" 79266e7d3316Smrg rpath="$rpath $flag" 7927a966c04fSmrg fi 79286e7d3316Smrg elif test -n "$runpath_var"; then 79296e7d3316Smrg case "$perm_rpath " in 79306e7d3316Smrg *" $libdir "*) ;; 79316e7d3316Smrg *) perm_rpath="$perm_rpath $libdir" ;; 79326e7d3316Smrg esac 79336e7d3316Smrg fi 79346e7d3316Smrg case $host in 79356e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 79366e7d3316Smrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 79376e7d3316Smrg case :$dllsearchpath: in 79386e7d3316Smrg *":$libdir:"*) ;; 79396e7d3316Smrg ::) dllsearchpath=$libdir;; 79406e7d3316Smrg *) dllsearchpath="$dllsearchpath:$libdir";; 79416e7d3316Smrg esac 79426e7d3316Smrg case :$dllsearchpath: in 79436e7d3316Smrg *":$testbindir:"*) ;; 79446e7d3316Smrg ::) dllsearchpath=$testbindir;; 79456e7d3316Smrg *) dllsearchpath="$dllsearchpath:$testbindir";; 79466e7d3316Smrg esac 79476e7d3316Smrg ;; 79486e7d3316Smrg esac 79496e7d3316Smrg done 79506e7d3316Smrg # Substitute the hardcoded libdirs into the rpath. 79516e7d3316Smrg if test -n "$hardcode_libdir_separator" && 79526e7d3316Smrg test -n "$hardcode_libdirs"; then 79536e7d3316Smrg libdir="$hardcode_libdirs" 79546e7d3316Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 79556e7d3316Smrg fi 79566e7d3316Smrg compile_rpath="$rpath" 7957a966c04fSmrg 79586e7d3316Smrg rpath= 79596e7d3316Smrg hardcode_libdirs= 79606e7d3316Smrg for libdir in $finalize_rpath; do 79616e7d3316Smrg if test -n "$hardcode_libdir_flag_spec"; then 79626e7d3316Smrg if test -n "$hardcode_libdir_separator"; then 79636e7d3316Smrg if test -z "$hardcode_libdirs"; then 79646e7d3316Smrg hardcode_libdirs="$libdir" 79656e7d3316Smrg else 79666e7d3316Smrg # Just accumulate the unique libdirs. 79676e7d3316Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 79686e7d3316Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 79696e7d3316Smrg ;; 79706e7d3316Smrg *) 79716e7d3316Smrg hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" 79726e7d3316Smrg ;; 79736e7d3316Smrg esac 79746e7d3316Smrg fi 7975a966c04fSmrg else 79766e7d3316Smrg eval flag=\"$hardcode_libdir_flag_spec\" 79776e7d3316Smrg rpath="$rpath $flag" 7978a966c04fSmrg fi 79796e7d3316Smrg elif test -n "$runpath_var"; then 79806e7d3316Smrg case "$finalize_perm_rpath " in 79816e7d3316Smrg *" $libdir "*) ;; 79826e7d3316Smrg *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; 79836e7d3316Smrg esac 7984a966c04fSmrg fi 79856e7d3316Smrg done 79866e7d3316Smrg # Substitute the hardcoded libdirs into the rpath. 79876e7d3316Smrg if test -n "$hardcode_libdir_separator" && 79886e7d3316Smrg test -n "$hardcode_libdirs"; then 79896e7d3316Smrg libdir="$hardcode_libdirs" 79906e7d3316Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 79916e7d3316Smrg fi 79926e7d3316Smrg finalize_rpath="$rpath" 7993a966c04fSmrg 79946e7d3316Smrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 79956e7d3316Smrg # Transform all the library objects into standard objects. 79966e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 79976e7d3316Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 79986e7d3316Smrg fi 7999a966c04fSmrg 80006e7d3316Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8001a966c04fSmrg 80026e7d3316Smrg # template prelinking step 80036e7d3316Smrg if test -n "$prelink_cmds"; then 80046e7d3316Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 80056e7d3316Smrg fi 8006a966c04fSmrg 80076e7d3316Smrg wrappers_required=yes 80086e7d3316Smrg case $host in 80096e7d3316Smrg *cegcc* | *mingw32ce*) 80106e7d3316Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 80116e7d3316Smrg wrappers_required=no 80126e7d3316Smrg ;; 80136e7d3316Smrg *cygwin* | *mingw* ) 80146e7d3316Smrg if test "$build_libtool_libs" != yes; then 80156e7d3316Smrg wrappers_required=no 80166e7d3316Smrg fi 80176e7d3316Smrg ;; 80186e7d3316Smrg *) 80196e7d3316Smrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 80206e7d3316Smrg wrappers_required=no 80216e7d3316Smrg fi 80226e7d3316Smrg ;; 80236e7d3316Smrg esac 80246e7d3316Smrg if test "$wrappers_required" = no; then 80256e7d3316Smrg # Replace the output file specification. 80266e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 80276e7d3316Smrg link_command="$compile_command$compile_rpath" 8028a966c04fSmrg 80296e7d3316Smrg # We have no uninstalled library dependencies, so finalize right now. 80306e7d3316Smrg exit_status=0 80316e7d3316Smrg func_show_eval "$link_command" 'exit_status=$?' 8032a966c04fSmrg 80336e7d3316Smrg # Delete the generated files. 80346e7d3316Smrg if test -f "$output_objdir/${outputname}S.${objext}"; then 80356e7d3316Smrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8036a966c04fSmrg fi 8037a966c04fSmrg 80386e7d3316Smrg exit $exit_status 80396e7d3316Smrg fi 8040a966c04fSmrg 80416e7d3316Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 80426e7d3316Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 80436e7d3316Smrg fi 80446e7d3316Smrg if test -n "$finalize_shlibpath"; then 80456e7d3316Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 80466e7d3316Smrg fi 8047a966c04fSmrg 80486e7d3316Smrg compile_var= 80496e7d3316Smrg finalize_var= 80506e7d3316Smrg if test -n "$runpath_var"; then 80516e7d3316Smrg if test -n "$perm_rpath"; then 80526e7d3316Smrg # We should set the runpath_var. 80536e7d3316Smrg rpath= 80546e7d3316Smrg for dir in $perm_rpath; do 80556e7d3316Smrg rpath="$rpath$dir:" 80566e7d3316Smrg done 80576e7d3316Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 8058a966c04fSmrg fi 80596e7d3316Smrg if test -n "$finalize_perm_rpath"; then 80606e7d3316Smrg # We should set the runpath_var. 80616e7d3316Smrg rpath= 80626e7d3316Smrg for dir in $finalize_perm_rpath; do 80636e7d3316Smrg rpath="$rpath$dir:" 80646e7d3316Smrg done 80656e7d3316Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8066a966c04fSmrg fi 80676e7d3316Smrg fi 8068a966c04fSmrg 80696e7d3316Smrg if test "$no_install" = yes; then 80706e7d3316Smrg # We don't need to create a wrapper script. 80716e7d3316Smrg link_command="$compile_var$compile_command$compile_rpath" 80726e7d3316Smrg # Replace the output file specification. 80736e7d3316Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 80746e7d3316Smrg # Delete the old output file. 80756e7d3316Smrg $opt_dry_run || $RM $output 80766e7d3316Smrg # Link the executable and exit 80776e7d3316Smrg func_show_eval "$link_command" 'exit $?' 8078a966c04fSmrg exit $EXIT_SUCCESS 80796e7d3316Smrg fi 8080a966c04fSmrg 80816e7d3316Smrg if test "$hardcode_action" = relink; then 80826e7d3316Smrg # Fast installation is not supported 80836e7d3316Smrg link_command="$compile_var$compile_command$compile_rpath" 80846e7d3316Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 80856e7d3316Smrg 80866e7d3316Smrg func_warning "this platform does not like uninstalled shared libraries" 80876e7d3316Smrg func_warning "\`$output' will be relinked during installation" 80886e7d3316Smrg else 80896e7d3316Smrg if test "$fast_install" != no; then 80906e7d3316Smrg link_command="$finalize_var$compile_command$finalize_rpath" 80916e7d3316Smrg if test "$fast_install" = yes; then 80926e7d3316Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 80936e7d3316Smrg else 80946e7d3316Smrg # fast_install is set to needless 80956e7d3316Smrg relink_command= 80966e7d3316Smrg fi 8097a966c04fSmrg else 80986e7d3316Smrg link_command="$compile_var$compile_command$compile_rpath" 80996e7d3316Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8100a966c04fSmrg fi 81016e7d3316Smrg fi 8102a966c04fSmrg 81036e7d3316Smrg # Replace the output file specification. 81046e7d3316Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 8105a966c04fSmrg 81066e7d3316Smrg # Delete the old output files. 81076e7d3316Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 8108a966c04fSmrg 81096e7d3316Smrg func_show_eval "$link_command" 'exit $?' 8110a966c04fSmrg 81116e7d3316Smrg # Now create the wrapper script. 81126e7d3316Smrg func_verbose "creating $output" 8113a966c04fSmrg 81146e7d3316Smrg # Quote the relink command for shipping. 81156e7d3316Smrg if test -n "$relink_command"; then 81166e7d3316Smrg # Preserve any variables that may affect compiler behavior 81176e7d3316Smrg for var in $variables_saved_for_relink; do 81186e7d3316Smrg if eval test -z \"\${$var+set}\"; then 81196e7d3316Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 81206e7d3316Smrg elif eval var_value=\$$var; test -z "$var_value"; then 81216e7d3316Smrg relink_command="$var=; export $var; $relink_command" 8122a966c04fSmrg else 81236e7d3316Smrg func_quote_for_eval "$var_value" 81246e7d3316Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 8125a966c04fSmrg fi 81266e7d3316Smrg done 81276e7d3316Smrg relink_command="(cd `pwd`; $relink_command)" 81286e7d3316Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 81296e7d3316Smrg fi 8130a966c04fSmrg 81316e7d3316Smrg # Only actually do things if not in dry run mode. 81326e7d3316Smrg $opt_dry_run || { 81336e7d3316Smrg # win32 will think the script is a binary if it has 81346e7d3316Smrg # a .exe suffix, so we strip it off here. 81356e7d3316Smrg case $output in 81366e7d3316Smrg *.exe) func_stripname '' '.exe' "$output" 81376e7d3316Smrg output=$func_stripname_result ;; 81386e7d3316Smrg esac 81396e7d3316Smrg # test for cygwin because mv fails w/o .exe extensions 81406e7d3316Smrg case $host in 81416e7d3316Smrg *cygwin*) 81426e7d3316Smrg exeext=.exe 81436e7d3316Smrg func_stripname '' '.exe' "$outputname" 81446e7d3316Smrg outputname=$func_stripname_result ;; 81456e7d3316Smrg *) exeext= ;; 8146a966c04fSmrg esac 81476e7d3316Smrg case $host in 81486e7d3316Smrg *cygwin* | *mingw* ) 81496e7d3316Smrg func_dirname_and_basename "$output" "" "." 81506e7d3316Smrg output_name=$func_basename_result 81516e7d3316Smrg output_path=$func_dirname_result 81526e7d3316Smrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 81536e7d3316Smrg cwrapper="$output_path/$output_name.exe" 81546e7d3316Smrg $RM $cwrappersource $cwrapper 81556e7d3316Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 81566e7d3316Smrg 81576e7d3316Smrg func_emit_cwrapperexe_src > $cwrappersource 81586e7d3316Smrg 81596e7d3316Smrg # The wrapper executable is built using the $host compiler, 81606e7d3316Smrg # because it contains $host paths and files. If cross- 81616e7d3316Smrg # compiling, it, like the target executable, must be 81626e7d3316Smrg # executed on the $host or under an emulation environment. 81636e7d3316Smrg $opt_dry_run || { 81646e7d3316Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 81656e7d3316Smrg $STRIP $cwrapper 81666e7d3316Smrg } 8167a966c04fSmrg 81686e7d3316Smrg # Now, create the wrapper script for func_source use: 81696e7d3316Smrg func_ltwrapper_scriptname $cwrapper 81706e7d3316Smrg $RM $func_ltwrapper_scriptname_result 81716e7d3316Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 81726e7d3316Smrg $opt_dry_run || { 81736e7d3316Smrg # note: this script will not be executed, so do not chmod. 81746e7d3316Smrg if test "x$build" = "x$host" ; then 81756e7d3316Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 81766e7d3316Smrg else 81776e7d3316Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 81786e7d3316Smrg fi 81796e7d3316Smrg } 81806e7d3316Smrg ;; 81816e7d3316Smrg * ) 81826e7d3316Smrg $RM $output 81836e7d3316Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 8184a966c04fSmrg 81856e7d3316Smrg func_emit_wrapper no > $output 81866e7d3316Smrg chmod +x $output 81876e7d3316Smrg ;; 81886e7d3316Smrg esac 81896e7d3316Smrg } 81906e7d3316Smrg exit $EXIT_SUCCESS 81916e7d3316Smrg ;; 81926e7d3316Smrg esac 8193a966c04fSmrg 81946e7d3316Smrg # See if we need to build an old-fashioned archive. 81956e7d3316Smrg for oldlib in $oldlibs; do 8196a966c04fSmrg 81976e7d3316Smrg if test "$build_libtool_libs" = convenience; then 81986e7d3316Smrg oldobjs="$libobjs_save $symfileobj" 81996e7d3316Smrg addlibs="$convenience" 82006e7d3316Smrg build_libtool_libs=no 82016e7d3316Smrg else 82026e7d3316Smrg if test "$build_libtool_libs" = module; then 82036e7d3316Smrg oldobjs="$libobjs_save" 82046e7d3316Smrg build_libtool_libs=no 82056e7d3316Smrg else 82066e7d3316Smrg oldobjs="$old_deplibs $non_pic_objects" 82076e7d3316Smrg if test "$preload" = yes && test -f "$symfileobj"; then 82086e7d3316Smrg oldobjs="$oldobjs $symfileobj" 82096e7d3316Smrg fi 82106e7d3316Smrg fi 82116e7d3316Smrg addlibs="$old_convenience" 8212a966c04fSmrg fi 8213a966c04fSmrg 82146e7d3316Smrg if test -n "$addlibs"; then 82156e7d3316Smrg gentop="$output_objdir/${outputname}x" 82166e7d3316Smrg generated="$generated $gentop" 8217a966c04fSmrg 82186e7d3316Smrg func_extract_archives $gentop $addlibs 82196e7d3316Smrg oldobjs="$oldobjs $func_extract_archives_result" 82206e7d3316Smrg fi 8221a966c04fSmrg 82226e7d3316Smrg # Do each command in the archive commands. 82236e7d3316Smrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 82246e7d3316Smrg cmds=$old_archive_from_new_cmds 82256e7d3316Smrg else 8226a966c04fSmrg 82276e7d3316Smrg # Add any objects from preloaded convenience libraries 82286e7d3316Smrg if test -n "$dlprefiles"; then 82296e7d3316Smrg gentop="$output_objdir/${outputname}x" 82306e7d3316Smrg generated="$generated $gentop" 8231a966c04fSmrg 82326e7d3316Smrg func_extract_archives $gentop $dlprefiles 82336e7d3316Smrg oldobjs="$oldobjs $func_extract_archives_result" 82346e7d3316Smrg fi 8235a966c04fSmrg 82366e7d3316Smrg # POSIX demands no paths to be encoded in archives. We have 82376e7d3316Smrg # to avoid creating archives with duplicate basenames if we 82386e7d3316Smrg # might have to extract them afterwards, e.g., when creating a 82396e7d3316Smrg # static archive out of a convenience library, or when linking 82406e7d3316Smrg # the entirety of a libtool archive into another (currently 82416e7d3316Smrg # not supported by libtool). 82426e7d3316Smrg if (for obj in $oldobjs 82436e7d3316Smrg do 82446e7d3316Smrg func_basename "$obj" 82456e7d3316Smrg $ECHO "$func_basename_result" 82466e7d3316Smrg done | sort | sort -uc >/dev/null 2>&1); then 82476e7d3316Smrg : 82486e7d3316Smrg else 82496e7d3316Smrg echo "copying selected object files to avoid basename conflicts..." 82506e7d3316Smrg gentop="$output_objdir/${outputname}x" 82516e7d3316Smrg generated="$generated $gentop" 82526e7d3316Smrg func_mkdir_p "$gentop" 82536e7d3316Smrg save_oldobjs=$oldobjs 82546e7d3316Smrg oldobjs= 82556e7d3316Smrg counter=1 82566e7d3316Smrg for obj in $save_oldobjs 82576e7d3316Smrg do 82586e7d3316Smrg func_basename "$obj" 82596e7d3316Smrg objbase="$func_basename_result" 82606e7d3316Smrg case " $oldobjs " in 82616e7d3316Smrg " ") oldobjs=$obj ;; 82626e7d3316Smrg *[\ /]"$objbase "*) 82636e7d3316Smrg while :; do 82646e7d3316Smrg # Make sure we don't pick an alternate name that also 82656e7d3316Smrg # overlaps. 82666e7d3316Smrg newobj=lt$counter-$objbase 82676e7d3316Smrg func_arith $counter + 1 82686e7d3316Smrg counter=$func_arith_result 82696e7d3316Smrg case " $oldobjs " in 82706e7d3316Smrg *[\ /]"$newobj "*) ;; 82716e7d3316Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 82726e7d3316Smrg esac 82736e7d3316Smrg done 82746e7d3316Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 82756e7d3316Smrg oldobjs="$oldobjs $gentop/$newobj" 82766e7d3316Smrg ;; 82776e7d3316Smrg *) oldobjs="$oldobjs $obj" ;; 82786e7d3316Smrg esac 8279a966c04fSmrg done 8280a966c04fSmrg fi 82816e7d3316Smrg eval cmds=\"$old_archive_cmds\" 8282a966c04fSmrg 82836e7d3316Smrg func_len " $cmds" 82846e7d3316Smrg len=$func_len_result 82856e7d3316Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 82866e7d3316Smrg cmds=$old_archive_cmds 82876e7d3316Smrg else 82886e7d3316Smrg # the command line is too long to link in one step, link in parts 82896e7d3316Smrg func_verbose "using piecewise archive linking..." 82906e7d3316Smrg save_RANLIB=$RANLIB 82916e7d3316Smrg RANLIB=: 82926e7d3316Smrg objlist= 82936e7d3316Smrg concat_cmds= 82946e7d3316Smrg save_oldobjs=$oldobjs 82956e7d3316Smrg oldobjs= 82966e7d3316Smrg # Is there a better way of finding the last object in the list? 82976e7d3316Smrg for obj in $save_oldobjs 82986e7d3316Smrg do 82996e7d3316Smrg last_oldobj=$obj 83006e7d3316Smrg done 83016e7d3316Smrg eval test_cmds=\"$old_archive_cmds\" 83026e7d3316Smrg func_len " $test_cmds" 83036e7d3316Smrg len0=$func_len_result 83046e7d3316Smrg len=$len0 83056e7d3316Smrg for obj in $save_oldobjs 83066e7d3316Smrg do 83076e7d3316Smrg func_len " $obj" 83086e7d3316Smrg func_arith $len + $func_len_result 83096e7d3316Smrg len=$func_arith_result 83106e7d3316Smrg func_append objlist " $obj" 83116e7d3316Smrg if test "$len" -lt "$max_cmd_len"; then 83126e7d3316Smrg : 83136e7d3316Smrg else 83146e7d3316Smrg # the above command should be used before it gets too long 83156e7d3316Smrg oldobjs=$objlist 83166e7d3316Smrg if test "$obj" = "$last_oldobj" ; then 83176e7d3316Smrg RANLIB=$save_RANLIB 83186e7d3316Smrg fi 83196e7d3316Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 83206e7d3316Smrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 83216e7d3316Smrg objlist= 83226e7d3316Smrg len=$len0 83236e7d3316Smrg fi 83246e7d3316Smrg done 83256e7d3316Smrg RANLIB=$save_RANLIB 83266e7d3316Smrg oldobjs=$objlist 83276e7d3316Smrg if test "X$oldobjs" = "X" ; then 83286e7d3316Smrg eval cmds=\"\$concat_cmds\" 83296e7d3316Smrg else 83306e7d3316Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 83316e7d3316Smrg fi 83326e7d3316Smrg fi 83336e7d3316Smrg fi 83346e7d3316Smrg func_execute_cmds "$cmds" 'exit $?' 8335a966c04fSmrg done 8336a966c04fSmrg 83376e7d3316Smrg test -n "$generated" && \ 83386e7d3316Smrg func_show_eval "${RM}r$generated" 8339a966c04fSmrg 83406e7d3316Smrg # Now create the libtool archive. 83416e7d3316Smrg case $output in 83426e7d3316Smrg *.la) 83436e7d3316Smrg old_library= 83446e7d3316Smrg test "$build_old_libs" = yes && old_library="$libname.$libext" 83456e7d3316Smrg func_verbose "creating $output" 8346a966c04fSmrg 83476e7d3316Smrg # Preserve any variables that may affect compiler behavior 83486e7d3316Smrg for var in $variables_saved_for_relink; do 83496e7d3316Smrg if eval test -z \"\${$var+set}\"; then 83506e7d3316Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 83516e7d3316Smrg elif eval var_value=\$$var; test -z "$var_value"; then 83526e7d3316Smrg relink_command="$var=; export $var; $relink_command" 8353a966c04fSmrg else 83546e7d3316Smrg func_quote_for_eval "$var_value" 83556e7d3316Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 8356a966c04fSmrg fi 83576e7d3316Smrg done 83586e7d3316Smrg # Quote the link command for shipping. 83596e7d3316Smrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 83606e7d3316Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 83616e7d3316Smrg if test "$hardcode_automatic" = yes ; then 83626e7d3316Smrg relink_command= 83636e7d3316Smrg fi 8364a966c04fSmrg 83656e7d3316Smrg # Only create the output if not a dry run. 83666e7d3316Smrg $opt_dry_run || { 83676e7d3316Smrg for installed in no yes; do 83686e7d3316Smrg if test "$installed" = yes; then 83696e7d3316Smrg if test -z "$install_libdir"; then 83706e7d3316Smrg break 83716e7d3316Smrg fi 83726e7d3316Smrg output="$output_objdir/$outputname"i 83736e7d3316Smrg # Replace all uninstalled libtool libraries with the installed ones 83746e7d3316Smrg newdependency_libs= 83756e7d3316Smrg for deplib in $dependency_libs; do 83766e7d3316Smrg case $deplib in 83776e7d3316Smrg *.la) 83786e7d3316Smrg func_basename "$deplib" 83796e7d3316Smrg name="$func_basename_result" 83806e7d3316Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 83816e7d3316Smrg test -z "$libdir" && \ 83826e7d3316Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 83836e7d3316Smrg newdependency_libs="$newdependency_libs $libdir/$name" 83846e7d3316Smrg ;; 83856e7d3316Smrg *) newdependency_libs="$newdependency_libs $deplib" ;; 83866e7d3316Smrg esac 83876e7d3316Smrg done 83886e7d3316Smrg dependency_libs="$newdependency_libs" 83896e7d3316Smrg newdlfiles= 83906e7d3316Smrg 83916e7d3316Smrg for lib in $dlfiles; do 83926e7d3316Smrg case $lib in 83936e7d3316Smrg *.la) 83946e7d3316Smrg func_basename "$lib" 83956e7d3316Smrg name="$func_basename_result" 83966e7d3316Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 83976e7d3316Smrg test -z "$libdir" && \ 83986e7d3316Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 83996e7d3316Smrg newdlfiles="$newdlfiles $libdir/$name" 84006e7d3316Smrg ;; 84016e7d3316Smrg *) newdlfiles="$newdlfiles $lib" ;; 84026e7d3316Smrg esac 84036e7d3316Smrg done 84046e7d3316Smrg dlfiles="$newdlfiles" 84056e7d3316Smrg newdlprefiles= 84066e7d3316Smrg for lib in $dlprefiles; do 84076e7d3316Smrg case $lib in 84086e7d3316Smrg *.la) 84096e7d3316Smrg # Only pass preopened files to the pseudo-archive (for 84106e7d3316Smrg # eventual linking with the app. that links it) if we 84116e7d3316Smrg # didn't already link the preopened objects directly into 84126e7d3316Smrg # the library: 84136e7d3316Smrg func_basename "$lib" 84146e7d3316Smrg name="$func_basename_result" 84156e7d3316Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 84166e7d3316Smrg test -z "$libdir" && \ 84176e7d3316Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 84186e7d3316Smrg newdlprefiles="$newdlprefiles $libdir/$name" 84196e7d3316Smrg ;; 84206e7d3316Smrg esac 84216e7d3316Smrg done 84226e7d3316Smrg dlprefiles="$newdlprefiles" 84236e7d3316Smrg else 84246e7d3316Smrg newdlfiles= 84256e7d3316Smrg for lib in $dlfiles; do 84266e7d3316Smrg case $lib in 84276e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 84286e7d3316Smrg *) abs=`pwd`"/$lib" ;; 84296e7d3316Smrg esac 84306e7d3316Smrg newdlfiles="$newdlfiles $abs" 84316e7d3316Smrg done 84326e7d3316Smrg dlfiles="$newdlfiles" 84336e7d3316Smrg newdlprefiles= 84346e7d3316Smrg for lib in $dlprefiles; do 84356e7d3316Smrg case $lib in 84366e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 84376e7d3316Smrg *) abs=`pwd`"/$lib" ;; 84386e7d3316Smrg esac 84396e7d3316Smrg newdlprefiles="$newdlprefiles $abs" 84406e7d3316Smrg done 84416e7d3316Smrg dlprefiles="$newdlprefiles" 84426e7d3316Smrg fi 84436e7d3316Smrg $RM $output 84446e7d3316Smrg # place dlname in correct position for cygwin 84456e7d3316Smrg # In fact, it would be nice if we could use this code for all target 84466e7d3316Smrg # systems that can't hard-code library paths into their executables 84476e7d3316Smrg # and that have no shared library path variable independent of PATH, 84486e7d3316Smrg # but it turns out we can't easily determine that from inspecting 84496e7d3316Smrg # libtool variables, so we have to hard-code the OSs to which it 84506e7d3316Smrg # applies here; at the moment, that means platforms that use the PE 84516e7d3316Smrg # object format with DLL files. See the long comment at the top of 84526e7d3316Smrg # tests/bindir.at for full details. 84536e7d3316Smrg tdlname=$dlname 84546e7d3316Smrg case $host,$output,$installed,$module,$dlname in 84556e7d3316Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 84566e7d3316Smrg # If a -bindir argument was supplied, place the dll there. 84576e7d3316Smrg if test "x$bindir" != x ; 84586e7d3316Smrg then 84596e7d3316Smrg func_relative_path "$install_libdir" "$bindir" 84606e7d3316Smrg tdlname=$func_relative_path_result$dlname 84616e7d3316Smrg else 84626e7d3316Smrg # Otherwise fall back on heuristic. 84636e7d3316Smrg tdlname=../bin/$dlname 84646e7d3316Smrg fi 84656e7d3316Smrg ;; 84666e7d3316Smrg esac 84676e7d3316Smrg $ECHO > $output "\ 84686e7d3316Smrg# $outputname - a libtool library file 84696e7d3316Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 84706e7d3316Smrg# 84716e7d3316Smrg# Please DO NOT delete this file! 84726e7d3316Smrg# It is necessary for linking the library. 8473a966c04fSmrg 84746e7d3316Smrg# The name that we can dlopen(3). 84756e7d3316Smrgdlname='$tdlname' 8476a966c04fSmrg 84776e7d3316Smrg# Names of this library. 84786e7d3316Smrglibrary_names='$library_names' 8479a966c04fSmrg 84806e7d3316Smrg# The name of the static archive. 84816e7d3316Smrgold_library='$old_library' 8482a966c04fSmrg 84836e7d3316Smrg# Linker flags that can not go in dependency_libs. 84846e7d3316Smrginherited_linker_flags='$new_inherited_linker_flags' 8485a966c04fSmrg 84866e7d3316Smrg# Libraries that this one depends upon. 84876e7d3316Smrgdependency_libs='$dependency_libs' 8488a966c04fSmrg 84896e7d3316Smrg# Names of additional weak libraries provided by this library 84906e7d3316Smrgweak_library_names='$weak_libs' 8491a966c04fSmrg 84926e7d3316Smrg# Version information for $libname. 84936e7d3316Smrgcurrent=$current 84946e7d3316Smrgage=$age 84956e7d3316Smrgrevision=$revision 8496a966c04fSmrg 84976e7d3316Smrg# Is this an already installed library? 84986e7d3316Smrginstalled=$installed 8499a966c04fSmrg 85006e7d3316Smrg# Should we warn about portability when linking against -modules? 85016e7d3316Smrgshouldnotlink=$module 8502a966c04fSmrg 85036e7d3316Smrg# Files to dlopen/dlpreopen 85046e7d3316Smrgdlopen='$dlfiles' 85056e7d3316Smrgdlpreopen='$dlprefiles' 8506a966c04fSmrg 85076e7d3316Smrg# Directory that this library needs to be installed in: 85086e7d3316Smrglibdir='$install_libdir'" 85096e7d3316Smrg if test "$installed" = no && test "$need_relink" = yes; then 85106e7d3316Smrg $ECHO >> $output "\ 85116e7d3316Smrgrelink_command=\"$relink_command\"" 85126e7d3316Smrg fi 85136e7d3316Smrg done 85146e7d3316Smrg } 8515a966c04fSmrg 85166e7d3316Smrg # Do a symbolic link so that the libtool archive can be found in 85176e7d3316Smrg # LD_LIBRARY_PATH before the program is installed. 85186e7d3316Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 85196e7d3316Smrg ;; 85206e7d3316Smrg esac 85216e7d3316Smrg exit $EXIT_SUCCESS 85226e7d3316Smrg} 8523a966c04fSmrg 85246e7d3316Smrg{ test "$mode" = link || test "$mode" = relink; } && 85256e7d3316Smrg func_mode_link ${1+"$@"} 8526a966c04fSmrg 8527a966c04fSmrg 85286e7d3316Smrg# func_mode_uninstall arg... 85296e7d3316Smrgfunc_mode_uninstall () 85306e7d3316Smrg{ 85316e7d3316Smrg $opt_debug 85326e7d3316Smrg RM="$nonopt" 8533a966c04fSmrg files= 8534a966c04fSmrg rmforce= 8535a966c04fSmrg exit_status=0 8536a966c04fSmrg 8537a966c04fSmrg # This variable tells wrapper scripts just to set variables rather 8538a966c04fSmrg # than running their programs. 8539a966c04fSmrg libtool_install_magic="$magic" 8540a966c04fSmrg 8541a966c04fSmrg for arg 8542a966c04fSmrg do 8543a966c04fSmrg case $arg in 85446e7d3316Smrg -f) RM="$RM $arg"; rmforce=yes ;; 85456e7d3316Smrg -*) RM="$RM $arg" ;; 8546a966c04fSmrg *) files="$files $arg" ;; 8547a966c04fSmrg esac 8548a966c04fSmrg done 8549a966c04fSmrg 85506e7d3316Smrg test -z "$RM" && \ 85516e7d3316Smrg func_fatal_help "you must specify an RM program" 8552a966c04fSmrg 8553a966c04fSmrg rmdirs= 8554a966c04fSmrg 8555a966c04fSmrg origobjdir="$objdir" 8556a966c04fSmrg for file in $files; do 85576e7d3316Smrg func_dirname "$file" "" "." 85586e7d3316Smrg dir="$func_dirname_result" 85596e7d3316Smrg if test "X$dir" = X.; then 8560a966c04fSmrg objdir="$origobjdir" 8561a966c04fSmrg else 8562a966c04fSmrg objdir="$dir/$origobjdir" 8563a966c04fSmrg fi 85646e7d3316Smrg func_basename "$file" 85656e7d3316Smrg name="$func_basename_result" 8566a966c04fSmrg test "$mode" = uninstall && objdir="$dir" 8567a966c04fSmrg 8568a966c04fSmrg # Remember objdir for removal later, being careful to avoid duplicates 8569a966c04fSmrg if test "$mode" = clean; then 8570a966c04fSmrg case " $rmdirs " in 8571a966c04fSmrg *" $objdir "*) ;; 8572a966c04fSmrg *) rmdirs="$rmdirs $objdir" ;; 8573a966c04fSmrg esac 8574a966c04fSmrg fi 8575a966c04fSmrg 8576a966c04fSmrg # Don't error if the file doesn't exist and rm -f was used. 85776e7d3316Smrg if { test -L "$file"; } >/dev/null 2>&1 || 85786e7d3316Smrg { test -h "$file"; } >/dev/null 2>&1 || 85796e7d3316Smrg test -f "$file"; then 8580a966c04fSmrg : 8581a966c04fSmrg elif test -d "$file"; then 8582a966c04fSmrg exit_status=1 8583a966c04fSmrg continue 8584a966c04fSmrg elif test "$rmforce" = yes; then 8585a966c04fSmrg continue 8586a966c04fSmrg fi 8587a966c04fSmrg 8588a966c04fSmrg rmfiles="$file" 8589a966c04fSmrg 8590a966c04fSmrg case $name in 8591a966c04fSmrg *.la) 8592a966c04fSmrg # Possibly a libtool archive, so verify it. 85936e7d3316Smrg if func_lalib_p "$file"; then 85946e7d3316Smrg func_source $dir/$name 8595a966c04fSmrg 8596a966c04fSmrg # Delete the libtool libraries and symlinks. 8597a966c04fSmrg for n in $library_names; do 8598a966c04fSmrg rmfiles="$rmfiles $objdir/$n" 8599a966c04fSmrg done 8600a966c04fSmrg test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" 8601a966c04fSmrg 8602a966c04fSmrg case "$mode" in 8603a966c04fSmrg clean) 8604a966c04fSmrg case " $library_names " in 8605a966c04fSmrg # " " in the beginning catches empty $dlname 8606a966c04fSmrg *" $dlname "*) ;; 8607a966c04fSmrg *) rmfiles="$rmfiles $objdir/$dlname" ;; 8608a966c04fSmrg esac 86096e7d3316Smrg test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" 8610a966c04fSmrg ;; 8611a966c04fSmrg uninstall) 8612a966c04fSmrg if test -n "$library_names"; then 8613a966c04fSmrg # Do each command in the postuninstall commands. 86146e7d3316Smrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 8615a966c04fSmrg fi 8616a966c04fSmrg 8617a966c04fSmrg if test -n "$old_library"; then 8618a966c04fSmrg # Do each command in the old_postuninstall commands. 86196e7d3316Smrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 8620a966c04fSmrg fi 8621a966c04fSmrg # FIXME: should reinstall the best remaining shared library. 8622a966c04fSmrg ;; 8623a966c04fSmrg esac 8624a966c04fSmrg fi 8625a966c04fSmrg ;; 8626a966c04fSmrg 8627a966c04fSmrg *.lo) 8628a966c04fSmrg # Possibly a libtool object, so verify it. 86296e7d3316Smrg if func_lalib_p "$file"; then 8630a966c04fSmrg 8631a966c04fSmrg # Read the .lo file 86326e7d3316Smrg func_source $dir/$name 8633a966c04fSmrg 8634a966c04fSmrg # Add PIC object to the list of files to remove. 86356e7d3316Smrg if test -n "$pic_object" && 86366e7d3316Smrg test "$pic_object" != none; then 8637a966c04fSmrg rmfiles="$rmfiles $dir/$pic_object" 8638a966c04fSmrg fi 8639a966c04fSmrg 8640a966c04fSmrg # Add non-PIC object to the list of files to remove. 86416e7d3316Smrg if test -n "$non_pic_object" && 86426e7d3316Smrg test "$non_pic_object" != none; then 8643a966c04fSmrg rmfiles="$rmfiles $dir/$non_pic_object" 8644a966c04fSmrg fi 8645a966c04fSmrg fi 8646a966c04fSmrg ;; 8647a966c04fSmrg 8648a966c04fSmrg *) 8649a966c04fSmrg if test "$mode" = clean ; then 8650a966c04fSmrg noexename=$name 8651a966c04fSmrg case $file in 8652a966c04fSmrg *.exe) 86536e7d3316Smrg func_stripname '' '.exe' "$file" 86546e7d3316Smrg file=$func_stripname_result 86556e7d3316Smrg func_stripname '' '.exe' "$name" 86566e7d3316Smrg noexename=$func_stripname_result 8657a966c04fSmrg # $file with .exe has already been added to rmfiles, 8658a966c04fSmrg # add $file without .exe 8659a966c04fSmrg rmfiles="$rmfiles $file" 8660a966c04fSmrg ;; 8661a966c04fSmrg esac 8662a966c04fSmrg # Do a test to see if this is a libtool program. 86636e7d3316Smrg if func_ltwrapper_p "$file"; then 86646e7d3316Smrg if func_ltwrapper_executable_p "$file"; then 86656e7d3316Smrg func_ltwrapper_scriptname "$file" 86666e7d3316Smrg relink_command= 86676e7d3316Smrg func_source $func_ltwrapper_scriptname_result 86686e7d3316Smrg rmfiles="$rmfiles $func_ltwrapper_scriptname_result" 86696e7d3316Smrg else 86706e7d3316Smrg relink_command= 86716e7d3316Smrg func_source $dir/$noexename 86726e7d3316Smrg fi 8673a966c04fSmrg 8674a966c04fSmrg # note $name still contains .exe if it was in $file originally 8675a966c04fSmrg # as does the version of $file that was added into $rmfiles 8676a966c04fSmrg rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" 8677a966c04fSmrg if test "$fast_install" = yes && test -n "$relink_command"; then 8678a966c04fSmrg rmfiles="$rmfiles $objdir/lt-$name" 8679a966c04fSmrg fi 8680a966c04fSmrg if test "X$noexename" != "X$name" ; then 8681a966c04fSmrg rmfiles="$rmfiles $objdir/lt-${noexename}.c" 8682a966c04fSmrg fi 8683a966c04fSmrg fi 8684a966c04fSmrg fi 8685a966c04fSmrg ;; 8686a966c04fSmrg esac 86876e7d3316Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 8688a966c04fSmrg done 8689a966c04fSmrg objdir="$origobjdir" 8690a966c04fSmrg 8691a966c04fSmrg # Try to remove the ${objdir}s in the directories where we deleted files 8692a966c04fSmrg for dir in $rmdirs; do 8693a966c04fSmrg if test -d "$dir"; then 86946e7d3316Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 8695a966c04fSmrg fi 8696a966c04fSmrg done 8697a966c04fSmrg 8698a966c04fSmrg exit $exit_status 86996e7d3316Smrg} 8700a966c04fSmrg 87016e7d3316Smrg{ test "$mode" = uninstall || test "$mode" = clean; } && 87026e7d3316Smrg func_mode_uninstall ${1+"$@"} 8703a966c04fSmrg 87046e7d3316Smrgtest -z "$mode" && { 87056e7d3316Smrg help="$generic_help" 87066e7d3316Smrg func_fatal_help "you must specify a MODE" 87076e7d3316Smrg} 87086e7d3316Smrg 87096e7d3316Smrgtest -z "$exec_cmd" && \ 87106e7d3316Smrg func_fatal_help "invalid operation mode \`$mode'" 8711a966c04fSmrg 8712a966c04fSmrgif test -n "$exec_cmd"; then 87136e7d3316Smrg eval exec "$exec_cmd" 8714a966c04fSmrg exit $EXIT_FAILURE 8715a966c04fSmrgfi 8716a966c04fSmrg 87176e7d3316Smrgexit $exit_status 8718a966c04fSmrg 8719a966c04fSmrg 8720a966c04fSmrg# The TAGs below are defined such that we never get into a situation 8721a966c04fSmrg# in which we disable both kinds of libraries. Given conflicting 8722a966c04fSmrg# choices, we go for a static library, that is the most portable, 8723a966c04fSmrg# since we can't tell whether shared libraries were disabled because 8724a966c04fSmrg# the user asked for that or because the platform doesn't support 8725a966c04fSmrg# them. This is particularly important on AIX, because we don't 8726a966c04fSmrg# support having both static and shared libraries enabled at the same 8727a966c04fSmrg# time on that platform, so we default to a shared-only configuration. 8728a966c04fSmrg# If a disable-shared tag is given, we'll fallback to a static-only 8729a966c04fSmrg# configuration. But we'll never go from static-only to shared-only. 8730a966c04fSmrg 8731a966c04fSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 87326e7d3316Smrgbuild_libtool_libs=no 87336e7d3316Smrgbuild_old_libs=yes 8734a966c04fSmrg# ### END LIBTOOL TAG CONFIG: disable-shared 8735a966c04fSmrg 8736a966c04fSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 87376e7d3316Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 8738a966c04fSmrg# ### END LIBTOOL TAG CONFIG: disable-static 8739a966c04fSmrg 8740a966c04fSmrg# Local Variables: 8741a966c04fSmrg# mode:shell-script 8742a966c04fSmrg# sh-indentation:2 8743a966c04fSmrg# End: 87446e7d3316Smrg# vi:sw=2 87456e7d3316Smrg 8746