ltmain.sh revision 97cf2ee2
16e7d3316Smrg 297cf2ee2Smrg# libtool (GNU libtool) 2.4 36e7d3316Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 46e7d3316Smrg 52e2dd055Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 66e7d3316Smrg# 2007, 2008, 2009, 2010 Free Software Foundation, Inc. 76e7d3316Smrg# This is free software; see the source for copying conditions. There is NO 86e7d3316Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 96e7d3316Smrg 106e7d3316Smrg# GNU Libtool is free software; you can redistribute it and/or modify 11a966c04fSmrg# it under the terms of the GNU General Public License as published by 12a966c04fSmrg# the Free Software Foundation; either version 2 of the License, or 13a966c04fSmrg# (at your option) any later version. 14a966c04fSmrg# 156e7d3316Smrg# As a special exception to the GNU General Public License, 166e7d3316Smrg# if you distribute this file as part of a program or library that 176e7d3316Smrg# is built using GNU Libtool, you may include this file under the 186e7d3316Smrg# same distribution terms that you use for the rest of that program. 196e7d3316Smrg# 206e7d3316Smrg# GNU Libtool is distributed in the hope that it will be useful, but 21a966c04fSmrg# WITHOUT ANY WARRANTY; without even the implied warranty of 22a966c04fSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23a966c04fSmrg# General Public License for more details. 24a966c04fSmrg# 25a966c04fSmrg# You should have received a copy of the GNU General Public License 266e7d3316Smrg# along with GNU Libtool; see the file COPYING. If not, a copy 276e7d3316Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 286e7d3316Smrg# or obtained by writing to the Free Software Foundation, Inc., 296e7d3316Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 30a966c04fSmrg 316e7d3316Smrg# Usage: $progname [OPTION]... [MODE-ARG]... 326e7d3316Smrg# 336e7d3316Smrg# Provide generalized library-building support services. 346e7d3316Smrg# 356e7d3316Smrg# --config show all configuration variables 366e7d3316Smrg# --debug enable verbose shell tracing 376e7d3316Smrg# -n, --dry-run display commands without modifying any files 386e7d3316Smrg# --features display basic configuration information and exit 396e7d3316Smrg# --mode=MODE use operation mode MODE 406e7d3316Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 416e7d3316Smrg# --quiet, --silent don't print informational messages 426e7d3316Smrg# --no-quiet, --no-silent 436e7d3316Smrg# print informational messages (default) 446e7d3316Smrg# --tag=TAG use configuration variables from tag TAG 456e7d3316Smrg# -v, --verbose print more informational messages than default 466e7d3316Smrg# --no-verbose don't print the extra informational messages 476e7d3316Smrg# --version print version information 486e7d3316Smrg# -h, --help, --help-all print short, long, or detailed help message 496e7d3316Smrg# 506e7d3316Smrg# MODE must be one of the following: 516e7d3316Smrg# 526e7d3316Smrg# clean remove files from the build directory 536e7d3316Smrg# compile compile a source file into a libtool object 546e7d3316Smrg# execute automatically set library path, then run a program 556e7d3316Smrg# finish complete the installation of libtool libraries 566e7d3316Smrg# install install libraries or executables 576e7d3316Smrg# link create a library or an executable 586e7d3316Smrg# uninstall remove libraries from an installed directory 596e7d3316Smrg# 606e7d3316Smrg# MODE-ARGS vary depending on the MODE. When passed as first option, 616e7d3316Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 626e7d3316Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 636e7d3316Smrg# 646e7d3316Smrg# When reporting a bug, please describe a test case to reproduce it and 656e7d3316Smrg# include the following information: 666e7d3316Smrg# 676e7d3316Smrg# host-triplet: $host 686e7d3316Smrg# shell: $SHELL 696e7d3316Smrg# compiler: $LTCC 706e7d3316Smrg# compiler flags: $LTCFLAGS 716e7d3316Smrg# linker: $LD (gnu? $with_gnu_ld) 7297cf2ee2Smrg# $progname: (GNU libtool) 2.4 736e7d3316Smrg# automake: $automake_version 746e7d3316Smrg# autoconf: $autoconf_version 756e7d3316Smrg# 766e7d3316Smrg# Report bugs to <bug-libtool@gnu.org>. 7797cf2ee2Smrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 7897cf2ee2Smrg# General help using GNU software: <http://www.gnu.org/gethelp/>. 79a966c04fSmrg 806e7d3316SmrgPROGRAM=libtool 81a966c04fSmrgPACKAGE=libtool 8297cf2ee2SmrgVERSION=2.4 836e7d3316SmrgTIMESTAMP="" 8497cf2ee2Smrgpackage_revision=1.3293 852e2dd055Smrg 866e7d3316Smrg# Be Bourne compatible 872e2dd055Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 882e2dd055Smrg emulate sh 892e2dd055Smrg NULLCMD=: 902e2dd055Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 912e2dd055Smrg # is contrary to our usage. Disable this feature. 922e2dd055Smrg alias -g '${1+"$@"}'='"$@"' 93a966c04fSmrg setopt NO_GLOB_SUBST 942e2dd055Smrgelse 952e2dd055Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 96a966c04fSmrgfi 972e2dd055SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 982e2dd055SmrgDUALCASE=1; export DUALCASE # for MKS sh 99a966c04fSmrg 1006e7d3316Smrg# A function that is used when there is no print builtin or printf. 1016e7d3316Smrgfunc_fallback_echo () 1026e7d3316Smrg{ 1036e7d3316Smrg eval 'cat <<_LTECHO_EOF 1046e7d3316Smrg$1 1056e7d3316Smrg_LTECHO_EOF' 1066e7d3316Smrg} 107a966c04fSmrg 1086e7d3316Smrg# NLS nuisances: We save the old values to restore during execute mode. 1096e7d3316Smrglt_user_locale= 1106e7d3316Smrglt_safe_locale= 1112e2dd055Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1122e2dd055Smrgdo 1132e2dd055Smrg eval "if test \"\${$lt_var+set}\" = set; then 1146e7d3316Smrg save_$lt_var=\$$lt_var 1156e7d3316Smrg $lt_var=C 1162e2dd055Smrg export $lt_var 1176e7d3316Smrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 1186e7d3316Smrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 1192e2dd055Smrg fi" 1202e2dd055Smrgdone 1216e7d3316SmrgLC_ALL=C 1226e7d3316SmrgLANGUAGE=C 1236e7d3316Smrgexport LANGUAGE LC_ALL 1242e2dd055Smrg 1256e7d3316Smrg$lt_unset CDPATH 1266e7d3316Smrg 1276e7d3316Smrg 1286e7d3316Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 1296e7d3316Smrg# is ksh but when the shell is invoked as "sh" and the current value of 1306e7d3316Smrg# the _XPG environment variable is not equal to 1 (one), the special 1316e7d3316Smrg# positional parameter $0, within a function call, is the name of the 1326e7d3316Smrg# function. 1336e7d3316Smrgprogpath="$0" 1346e7d3316Smrg 1356e7d3316Smrg 1366e7d3316Smrg 1376e7d3316Smrg: ${CP="cp -f"} 1386e7d3316Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 1396e7d3316Smrg: ${EGREP="grep -E"} 1406e7d3316Smrg: ${FGREP="grep -F"} 1416e7d3316Smrg: ${GREP="grep"} 1426e7d3316Smrg: ${LN_S="ln -s"} 1436e7d3316Smrg: ${MAKE="make"} 1446e7d3316Smrg: ${MKDIR="mkdir"} 1456e7d3316Smrg: ${MV="mv -f"} 1466e7d3316Smrg: ${RM="rm -f"} 1476e7d3316Smrg: ${SED="sed"} 1486e7d3316Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 1496e7d3316Smrg: ${Xsed="$SED -e 1s/^X//"} 1506e7d3316Smrg 1516e7d3316Smrg# Global variables: 1526e7d3316SmrgEXIT_SUCCESS=0 1536e7d3316SmrgEXIT_FAILURE=1 1546e7d3316SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 1556e7d3316SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 1566e7d3316Smrg 1576e7d3316Smrgexit_status=$EXIT_SUCCESS 158a966c04fSmrg 159a966c04fSmrg# Make sure IFS has a sensible default 160a966c04fSmrglt_nl=' 161a966c04fSmrg' 162a966c04fSmrgIFS=" $lt_nl" 163a966c04fSmrg 1646e7d3316Smrgdirname="s,/[^/]*$,," 1656e7d3316Smrgbasename="s,^.*/,," 1666e7d3316Smrg 16797cf2ee2Smrg# func_dirname file append nondir_replacement 16897cf2ee2Smrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 16997cf2ee2Smrg# otherwise set result to NONDIR_REPLACEMENT. 17097cf2ee2Smrgfunc_dirname () 17197cf2ee2Smrg{ 17297cf2ee2Smrg func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 17397cf2ee2Smrg if test "X$func_dirname_result" = "X${1}"; then 17497cf2ee2Smrg func_dirname_result="${3}" 17597cf2ee2Smrg else 17697cf2ee2Smrg func_dirname_result="$func_dirname_result${2}" 17797cf2ee2Smrg fi 17897cf2ee2Smrg} # func_dirname may be replaced by extended shell implementation 17997cf2ee2Smrg 18097cf2ee2Smrg 18197cf2ee2Smrg# func_basename file 18297cf2ee2Smrgfunc_basename () 18397cf2ee2Smrg{ 18497cf2ee2Smrg func_basename_result=`$ECHO "${1}" | $SED "$basename"` 18597cf2ee2Smrg} # func_basename may be replaced by extended shell implementation 18697cf2ee2Smrg 18797cf2ee2Smrg 1886e7d3316Smrg# func_dirname_and_basename file append nondir_replacement 1896e7d3316Smrg# perform func_basename and func_dirname in a single function 1906e7d3316Smrg# call: 1916e7d3316Smrg# dirname: Compute the dirname of FILE. If nonempty, 1926e7d3316Smrg# add APPEND to the result, otherwise set result 1936e7d3316Smrg# to NONDIR_REPLACEMENT. 1946e7d3316Smrg# value returned in "$func_dirname_result" 1956e7d3316Smrg# basename: Compute filename of FILE. 1966e7d3316Smrg# value retuned in "$func_basename_result" 1976e7d3316Smrg# Implementation must be kept synchronized with func_dirname 1986e7d3316Smrg# and func_basename. For efficiency, we do not delegate to 1996e7d3316Smrg# those functions but instead duplicate the functionality here. 2006e7d3316Smrgfunc_dirname_and_basename () 2016e7d3316Smrg{ 20297cf2ee2Smrg # Extract subdirectory from the argument. 20397cf2ee2Smrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 20497cf2ee2Smrg if test "X$func_dirname_result" = "X${1}"; then 20597cf2ee2Smrg func_dirname_result="${3}" 20697cf2ee2Smrg else 20797cf2ee2Smrg func_dirname_result="$func_dirname_result${2}" 20897cf2ee2Smrg fi 20997cf2ee2Smrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 21097cf2ee2Smrg} # func_dirname_and_basename may be replaced by extended shell implementation 21197cf2ee2Smrg 21297cf2ee2Smrg 21397cf2ee2Smrg# func_stripname prefix suffix name 21497cf2ee2Smrg# strip PREFIX and SUFFIX off of NAME. 21597cf2ee2Smrg# PREFIX and SUFFIX must not contain globbing or regex special 21697cf2ee2Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading 21797cf2ee2Smrg# dot (in which case that matches only a dot). 21897cf2ee2Smrg# func_strip_suffix prefix name 21997cf2ee2Smrgfunc_stripname () 22097cf2ee2Smrg{ 22197cf2ee2Smrg case ${2} in 22297cf2ee2Smrg .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 22397cf2ee2Smrg *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 22497cf2ee2Smrg esac 22597cf2ee2Smrg} # func_stripname may be replaced by extended shell implementation 226a966c04fSmrg 2276e7d3316Smrg 2286e7d3316Smrg# These SED scripts presuppose an absolute path with a trailing slash. 2296e7d3316Smrgpathcar='s,^/\([^/]*\).*$,\1,' 2306e7d3316Smrgpathcdr='s,^/[^/]*,,' 2316e7d3316Smrgremovedotparts=':dotsl 2326e7d3316Smrg s@/\./@/@g 2336e7d3316Smrg t dotsl 2346e7d3316Smrg s,/\.$,/,' 2356e7d3316Smrgcollapseslashes='s@/\{1,\}@/@g' 2366e7d3316Smrgfinalslash='s,/*$,/,' 2376e7d3316Smrg 2386e7d3316Smrg# func_normal_abspath PATH 2396e7d3316Smrg# Remove doubled-up and trailing slashes, "." path components, 2406e7d3316Smrg# and cancel out any ".." path components in PATH after making 2416e7d3316Smrg# it an absolute path. 2426e7d3316Smrg# value returned in "$func_normal_abspath_result" 2436e7d3316Smrgfunc_normal_abspath () 2446e7d3316Smrg{ 2456e7d3316Smrg # Start from root dir and reassemble the path. 2466e7d3316Smrg func_normal_abspath_result= 2476e7d3316Smrg func_normal_abspath_tpath=$1 2486e7d3316Smrg func_normal_abspath_altnamespace= 2496e7d3316Smrg case $func_normal_abspath_tpath in 2506e7d3316Smrg "") 2516e7d3316Smrg # Empty path, that just means $cwd. 2526e7d3316Smrg func_stripname '' '/' "`pwd`" 2536e7d3316Smrg func_normal_abspath_result=$func_stripname_result 2546e7d3316Smrg return 2556e7d3316Smrg ;; 2566e7d3316Smrg # The next three entries are used to spot a run of precisely 2576e7d3316Smrg # two leading slashes without using negated character classes; 2586e7d3316Smrg # we take advantage of case's first-match behaviour. 2596e7d3316Smrg ///*) 2606e7d3316Smrg # Unusual form of absolute path, do nothing. 2616e7d3316Smrg ;; 2626e7d3316Smrg //*) 2636e7d3316Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 2646e7d3316Smrg # and for example Cygwin uses it to access remote file shares 2656e7d3316Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 2666e7d3316Smrg func_normal_abspath_altnamespace=/ 2676e7d3316Smrg ;; 2686e7d3316Smrg /*) 2696e7d3316Smrg # Absolute path, do nothing. 2706e7d3316Smrg ;; 2716e7d3316Smrg *) 2726e7d3316Smrg # Relative path, prepend $cwd. 2736e7d3316Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 2746e7d3316Smrg ;; 2756e7d3316Smrg esac 2766e7d3316Smrg # Cancel out all the simple stuff to save iterations. We also want 2776e7d3316Smrg # the path to end with a slash for ease of parsing, so make sure 2786e7d3316Smrg # there is one (and only one) here. 2796e7d3316Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2806e7d3316Smrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 2816e7d3316Smrg while :; do 2826e7d3316Smrg # Processed it all yet? 2836e7d3316Smrg if test "$func_normal_abspath_tpath" = / ; then 2846e7d3316Smrg # If we ascended to the root using ".." the result may be empty now. 2856e7d3316Smrg if test -z "$func_normal_abspath_result" ; then 2866e7d3316Smrg func_normal_abspath_result=/ 2876e7d3316Smrg fi 2886e7d3316Smrg break 2896e7d3316Smrg fi 2906e7d3316Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2916e7d3316Smrg -e "$pathcar"` 2926e7d3316Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2936e7d3316Smrg -e "$pathcdr"` 2946e7d3316Smrg # Figure out what to do with it 2956e7d3316Smrg case $func_normal_abspath_tcomponent in 2966e7d3316Smrg "") 2976e7d3316Smrg # Trailing empty path component, ignore it. 2986e7d3316Smrg ;; 2996e7d3316Smrg ..) 3006e7d3316Smrg # Parent dir; strip last assembled component from result. 3016e7d3316Smrg func_dirname "$func_normal_abspath_result" 3026e7d3316Smrg func_normal_abspath_result=$func_dirname_result 3036e7d3316Smrg ;; 3046e7d3316Smrg *) 3056e7d3316Smrg # Actual path component, append it. 3066e7d3316Smrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 3076e7d3316Smrg ;; 3086e7d3316Smrg esac 3096e7d3316Smrg done 3106e7d3316Smrg # Restore leading double-slash if one was found on entry. 3116e7d3316Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 3126e7d3316Smrg} 3136e7d3316Smrg 3146e7d3316Smrg# func_relative_path SRCDIR DSTDIR 3156e7d3316Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 3166e7d3316Smrg# slash if non-empty, suitable for immediately appending a filename 3176e7d3316Smrg# without needing to append a separator. 3186e7d3316Smrg# value returned in "$func_relative_path_result" 3196e7d3316Smrgfunc_relative_path () 3206e7d3316Smrg{ 3216e7d3316Smrg func_relative_path_result= 3226e7d3316Smrg func_normal_abspath "$1" 3236e7d3316Smrg func_relative_path_tlibdir=$func_normal_abspath_result 3246e7d3316Smrg func_normal_abspath "$2" 3256e7d3316Smrg func_relative_path_tbindir=$func_normal_abspath_result 3266e7d3316Smrg 3276e7d3316Smrg # Ascend the tree starting from libdir 3286e7d3316Smrg while :; do 3296e7d3316Smrg # check if we have found a prefix of bindir 3306e7d3316Smrg case $func_relative_path_tbindir in 3316e7d3316Smrg $func_relative_path_tlibdir) 3326e7d3316Smrg # found an exact match 3336e7d3316Smrg func_relative_path_tcancelled= 3346e7d3316Smrg break 3356e7d3316Smrg ;; 3366e7d3316Smrg $func_relative_path_tlibdir*) 3376e7d3316Smrg # found a matching prefix 3386e7d3316Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 3396e7d3316Smrg func_relative_path_tcancelled=$func_stripname_result 3406e7d3316Smrg if test -z "$func_relative_path_result"; then 3416e7d3316Smrg func_relative_path_result=. 3426e7d3316Smrg fi 3436e7d3316Smrg break 3446e7d3316Smrg ;; 3456e7d3316Smrg *) 3466e7d3316Smrg func_dirname $func_relative_path_tlibdir 3476e7d3316Smrg func_relative_path_tlibdir=${func_dirname_result} 3486e7d3316Smrg if test "x$func_relative_path_tlibdir" = x ; then 3496e7d3316Smrg # Have to descend all the way to the root! 3506e7d3316Smrg func_relative_path_result=../$func_relative_path_result 3516e7d3316Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 3526e7d3316Smrg break 3536e7d3316Smrg fi 3546e7d3316Smrg func_relative_path_result=../$func_relative_path_result 3556e7d3316Smrg ;; 3566e7d3316Smrg esac 3576e7d3316Smrg done 3586e7d3316Smrg 3596e7d3316Smrg # Now calculate path; take care to avoid doubling-up slashes. 3606e7d3316Smrg func_stripname '' '/' "$func_relative_path_result" 3616e7d3316Smrg func_relative_path_result=$func_stripname_result 3626e7d3316Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 3636e7d3316Smrg if test "x$func_stripname_result" != x ; then 3646e7d3316Smrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 3656e7d3316Smrg fi 3666e7d3316Smrg 3676e7d3316Smrg # Normalisation. If bindir is libdir, return empty string, 3686e7d3316Smrg # else relative path ending with a slash; either way, target 3696e7d3316Smrg # file name can be directly appended. 3706e7d3316Smrg if test ! -z "$func_relative_path_result"; then 3716e7d3316Smrg func_stripname './' '' "$func_relative_path_result/" 3726e7d3316Smrg func_relative_path_result=$func_stripname_result 3736e7d3316Smrg fi 3746e7d3316Smrg} 3756e7d3316Smrg 3766e7d3316Smrg# The name of this program: 3776e7d3316Smrgfunc_dirname_and_basename "$progpath" 3786e7d3316Smrgprogname=$func_basename_result 3796e7d3316Smrg 3806e7d3316Smrg# Make sure we have an absolute path for reexecution: 3816e7d3316Smrgcase $progpath in 3826e7d3316Smrg [\\/]*|[A-Za-z]:\\*) ;; 3836e7d3316Smrg *[\\/]*) 3846e7d3316Smrg progdir=$func_dirname_result 3856e7d3316Smrg progdir=`cd "$progdir" && pwd` 3866e7d3316Smrg progpath="$progdir/$progname" 3876e7d3316Smrg ;; 3886e7d3316Smrg *) 3896e7d3316Smrg save_IFS="$IFS" 3906e7d3316Smrg IFS=: 3916e7d3316Smrg for progdir in $PATH; do 3926e7d3316Smrg IFS="$save_IFS" 3936e7d3316Smrg test -x "$progdir/$progname" && break 3946e7d3316Smrg done 3956e7d3316Smrg IFS="$save_IFS" 3966e7d3316Smrg test -n "$progdir" || progdir=`pwd` 3976e7d3316Smrg progpath="$progdir/$progname" 3986e7d3316Smrg ;; 3996e7d3316Smrgesac 4006e7d3316Smrg 4016e7d3316Smrg# Sed substitution that helps us do robust quoting. It backslashifies 4026e7d3316Smrg# metacharacters that are still active within double-quoted strings. 4036e7d3316SmrgXsed="${SED}"' -e 1s/^X//' 4046e7d3316Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 4056e7d3316Smrg 4066e7d3316Smrg# Same as above, but do not quote variable references. 4076e7d3316Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 4086e7d3316Smrg 40997cf2ee2Smrg# Sed substitution that turns a string into a regex matching for the 41097cf2ee2Smrg# string literally. 41197cf2ee2Smrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 41297cf2ee2Smrg 41397cf2ee2Smrg# Sed substitution that converts a w32 file name or path 41497cf2ee2Smrg# which contains forward slashes, into one that contains 41597cf2ee2Smrg# (escaped) backslashes. A very naive implementation. 41697cf2ee2Smrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 41797cf2ee2Smrg 4186e7d3316Smrg# Re-`\' parameter expansions in output of double_quote_subst that were 4196e7d3316Smrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 4206e7d3316Smrg# in input to double_quote_subst, that '$' was protected from expansion. 4216e7d3316Smrg# Since each input `\' is now two `\'s, look for any number of runs of 4226e7d3316Smrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 4236e7d3316Smrgbs='\\' 4246e7d3316Smrgbs2='\\\\' 4256e7d3316Smrgbs4='\\\\\\\\' 4266e7d3316Smrgdollar='\$' 4276e7d3316Smrgsed_double_backslash="\ 4286e7d3316Smrg s/$bs4/&\\ 4296e7d3316Smrg/g 4306e7d3316Smrg s/^$bs2$dollar/$bs&/ 4316e7d3316Smrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 4326e7d3316Smrg s/\n//g" 4336e7d3316Smrg 4346e7d3316Smrg# Standard options: 4356e7d3316Smrgopt_dry_run=false 4366e7d3316Smrgopt_help=false 4376e7d3316Smrgopt_quiet=false 4386e7d3316Smrgopt_verbose=false 4396e7d3316Smrgopt_warning=: 4406e7d3316Smrg 4416e7d3316Smrg# func_echo arg... 4426e7d3316Smrg# Echo program name prefixed message, along with the current mode 4436e7d3316Smrg# name if it has been set yet. 4446e7d3316Smrgfunc_echo () 4456e7d3316Smrg{ 44697cf2ee2Smrg $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 4476e7d3316Smrg} 4486e7d3316Smrg 4496e7d3316Smrg# func_verbose arg... 4506e7d3316Smrg# Echo program name prefixed message in verbose mode only. 4516e7d3316Smrgfunc_verbose () 4526e7d3316Smrg{ 4536e7d3316Smrg $opt_verbose && func_echo ${1+"$@"} 4546e7d3316Smrg 4556e7d3316Smrg # A bug in bash halts the script if the last line of a function 4566e7d3316Smrg # fails when set -e is in force, so we need another command to 4576e7d3316Smrg # work around that: 4586e7d3316Smrg : 4596e7d3316Smrg} 4606e7d3316Smrg 4616e7d3316Smrg# func_echo_all arg... 4626e7d3316Smrg# Invoke $ECHO with all args, space-separated. 4636e7d3316Smrgfunc_echo_all () 4646e7d3316Smrg{ 4656e7d3316Smrg $ECHO "$*" 4666e7d3316Smrg} 4676e7d3316Smrg 4686e7d3316Smrg# func_error arg... 4696e7d3316Smrg# Echo program name prefixed message to standard error. 4706e7d3316Smrgfunc_error () 4716e7d3316Smrg{ 47297cf2ee2Smrg $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 4736e7d3316Smrg} 4746e7d3316Smrg 4756e7d3316Smrg# func_warning arg... 4766e7d3316Smrg# Echo program name prefixed warning message to standard error. 4776e7d3316Smrgfunc_warning () 4786e7d3316Smrg{ 47997cf2ee2Smrg $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 4806e7d3316Smrg 4816e7d3316Smrg # bash bug again: 4826e7d3316Smrg : 4836e7d3316Smrg} 4846e7d3316Smrg 4856e7d3316Smrg# func_fatal_error arg... 4866e7d3316Smrg# Echo program name prefixed message to standard error, and exit. 4876e7d3316Smrgfunc_fatal_error () 4886e7d3316Smrg{ 4896e7d3316Smrg func_error ${1+"$@"} 4906e7d3316Smrg exit $EXIT_FAILURE 4916e7d3316Smrg} 4926e7d3316Smrg 4936e7d3316Smrg# func_fatal_help arg... 4946e7d3316Smrg# Echo program name prefixed message to standard error, followed by 4956e7d3316Smrg# a help hint, and exit. 4966e7d3316Smrgfunc_fatal_help () 4976e7d3316Smrg{ 4986e7d3316Smrg func_error ${1+"$@"} 4996e7d3316Smrg func_fatal_error "$help" 5006e7d3316Smrg} 5016e7d3316Smrghelp="Try \`$progname --help' for more information." ## default 5026e7d3316Smrg 5036e7d3316Smrg 5046e7d3316Smrg# func_grep expression filename 5056e7d3316Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 5066e7d3316Smrgfunc_grep () 5076e7d3316Smrg{ 5086e7d3316Smrg $GREP "$1" "$2" >/dev/null 2>&1 5096e7d3316Smrg} 5106e7d3316Smrg 5116e7d3316Smrg 5126e7d3316Smrg# func_mkdir_p directory-path 5136e7d3316Smrg# Make sure the entire path to DIRECTORY-PATH is available. 5146e7d3316Smrgfunc_mkdir_p () 5156e7d3316Smrg{ 5166e7d3316Smrg my_directory_path="$1" 5176e7d3316Smrg my_dir_list= 5186e7d3316Smrg 5196e7d3316Smrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 5206e7d3316Smrg 5216e7d3316Smrg # Protect directory names starting with `-' 5226e7d3316Smrg case $my_directory_path in 5236e7d3316Smrg -*) my_directory_path="./$my_directory_path" ;; 5246e7d3316Smrg esac 5256e7d3316Smrg 5266e7d3316Smrg # While some portion of DIR does not yet exist... 5276e7d3316Smrg while test ! -d "$my_directory_path"; do 5286e7d3316Smrg # ...make a list in topmost first order. Use a colon delimited 5296e7d3316Smrg # list incase some portion of path contains whitespace. 5306e7d3316Smrg my_dir_list="$my_directory_path:$my_dir_list" 5316e7d3316Smrg 5326e7d3316Smrg # If the last portion added has no slash in it, the list is done 5336e7d3316Smrg case $my_directory_path in */*) ;; *) break ;; esac 5346e7d3316Smrg 5356e7d3316Smrg # ...otherwise throw away the child directory and loop 5366e7d3316Smrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 5376e7d3316Smrg done 5386e7d3316Smrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 5396e7d3316Smrg 5406e7d3316Smrg save_mkdir_p_IFS="$IFS"; IFS=':' 5416e7d3316Smrg for my_dir in $my_dir_list; do 5426e7d3316Smrg IFS="$save_mkdir_p_IFS" 5436e7d3316Smrg # mkdir can fail with a `File exist' error if two processes 5446e7d3316Smrg # try to create one of the directories concurrently. Don't 5456e7d3316Smrg # stop in that case! 5466e7d3316Smrg $MKDIR "$my_dir" 2>/dev/null || : 5476e7d3316Smrg done 5486e7d3316Smrg IFS="$save_mkdir_p_IFS" 5496e7d3316Smrg 5506e7d3316Smrg # Bail out if we (or some other process) failed to create a directory. 5516e7d3316Smrg test -d "$my_directory_path" || \ 5526e7d3316Smrg func_fatal_error "Failed to create \`$1'" 5536e7d3316Smrg fi 5546e7d3316Smrg} 555a966c04fSmrg 556a966c04fSmrg 557a966c04fSmrg# func_mktempdir [string] 558a966c04fSmrg# Make a temporary directory that won't clash with other running 559a966c04fSmrg# libtool processes, and avoids race conditions if possible. If 560a966c04fSmrg# given, STRING is the basename for that directory. 561a966c04fSmrgfunc_mktempdir () 562a966c04fSmrg{ 563a966c04fSmrg my_template="${TMPDIR-/tmp}/${1-$progname}" 564a966c04fSmrg 5656e7d3316Smrg if test "$opt_dry_run" = ":"; then 566a966c04fSmrg # Return a directory name, but don't create it in dry-run mode 567a966c04fSmrg my_tmpdir="${my_template}-$$" 568a966c04fSmrg else 569a966c04fSmrg 570a966c04fSmrg # If mktemp works, use that first and foremost 571a966c04fSmrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 572a966c04fSmrg 573a966c04fSmrg if test ! -d "$my_tmpdir"; then 5746e7d3316Smrg # Failing that, at least try and use $RANDOM to avoid a race 5756e7d3316Smrg my_tmpdir="${my_template}-${RANDOM-0}$$" 576a966c04fSmrg 5776e7d3316Smrg save_mktempdir_umask=`umask` 5786e7d3316Smrg umask 0077 5796e7d3316Smrg $MKDIR "$my_tmpdir" 5806e7d3316Smrg umask $save_mktempdir_umask 581a966c04fSmrg fi 582a966c04fSmrg 583a966c04fSmrg # If we're not in dry-run mode, bomb out on failure 5846e7d3316Smrg test -d "$my_tmpdir" || \ 5856e7d3316Smrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 586a966c04fSmrg fi 587a966c04fSmrg 5886e7d3316Smrg $ECHO "$my_tmpdir" 589a966c04fSmrg} 590a966c04fSmrg 591a966c04fSmrg 5926e7d3316Smrg# func_quote_for_eval arg 5936e7d3316Smrg# Aesthetically quote ARG to be evaled later. 5946e7d3316Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 5956e7d3316Smrg# is double-quoted, suitable for a subsequent eval, whereas 5966e7d3316Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 5976e7d3316Smrg# which are still active within double quotes backslashified. 5986e7d3316Smrgfunc_quote_for_eval () 599a966c04fSmrg{ 6006e7d3316Smrg case $1 in 6016e7d3316Smrg *[\\\`\"\$]*) 6026e7d3316Smrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 6036e7d3316Smrg *) 6046e7d3316Smrg func_quote_for_eval_unquoted_result="$1" ;; 6056e7d3316Smrg esac 6066e7d3316Smrg 6076e7d3316Smrg case $func_quote_for_eval_unquoted_result in 6086e7d3316Smrg # Double-quote args containing shell metacharacters to delay 6096e7d3316Smrg # word splitting, command substitution and and variable 6106e7d3316Smrg # expansion for a subsequent eval. 6116e7d3316Smrg # Many Bourne shells cannot handle close brackets correctly 6126e7d3316Smrg # in scan sets, so we specify it separately. 6136e7d3316Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 6146e7d3316Smrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 6156e7d3316Smrg ;; 6166e7d3316Smrg *) 6176e7d3316Smrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 618a966c04fSmrg esac 619a966c04fSmrg} 620a966c04fSmrg 621a966c04fSmrg 6226e7d3316Smrg# func_quote_for_expand arg 6236e7d3316Smrg# Aesthetically quote ARG to be evaled later; same as above, 6246e7d3316Smrg# but do not quote variable references. 6256e7d3316Smrgfunc_quote_for_expand () 626a966c04fSmrg{ 6276e7d3316Smrg case $1 in 6286e7d3316Smrg *[\\\`\"]*) 6296e7d3316Smrg my_arg=`$ECHO "$1" | $SED \ 6306e7d3316Smrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 631a966c04fSmrg *) 6326e7d3316Smrg my_arg="$1" ;; 6336e7d3316Smrg esac 6346e7d3316Smrg 6356e7d3316Smrg case $my_arg in 6366e7d3316Smrg # Double-quote args containing shell metacharacters to delay 6376e7d3316Smrg # word splitting and command substitution for a subsequent eval. 6386e7d3316Smrg # Many Bourne shells cannot handle close brackets correctly 6396e7d3316Smrg # in scan sets, so we specify it separately. 6406e7d3316Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 6416e7d3316Smrg my_arg="\"$my_arg\"" 6426e7d3316Smrg ;; 6436e7d3316Smrg esac 6446e7d3316Smrg 6456e7d3316Smrg func_quote_for_expand_result="$my_arg" 646a966c04fSmrg} 647a966c04fSmrg 648a966c04fSmrg 6496e7d3316Smrg# func_show_eval cmd [fail_exp] 6506e7d3316Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 6516e7d3316Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 6526e7d3316Smrg# is given, then evaluate it. 6536e7d3316Smrgfunc_show_eval () 654a966c04fSmrg{ 6556e7d3316Smrg my_cmd="$1" 6566e7d3316Smrg my_fail_exp="${2-:}" 657a966c04fSmrg 6586e7d3316Smrg ${opt_silent-false} || { 6596e7d3316Smrg func_quote_for_expand "$my_cmd" 6606e7d3316Smrg eval "func_echo $func_quote_for_expand_result" 6616e7d3316Smrg } 6626e7d3316Smrg 6636e7d3316Smrg if ${opt_dry_run-false}; then :; else 6646e7d3316Smrg eval "$my_cmd" 6656e7d3316Smrg my_status=$? 6666e7d3316Smrg if test "$my_status" -eq 0; then :; else 6676e7d3316Smrg eval "(exit $my_status); $my_fail_exp" 6686e7d3316Smrg fi 669a966c04fSmrg fi 670a966c04fSmrg} 671a966c04fSmrg 6726e7d3316Smrg 6736e7d3316Smrg# func_show_eval_locale cmd [fail_exp] 6746e7d3316Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 6756e7d3316Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 6766e7d3316Smrg# is given, then evaluate it. Use the saved locale for evaluation. 6776e7d3316Smrgfunc_show_eval_locale () 678a966c04fSmrg{ 6796e7d3316Smrg my_cmd="$1" 6806e7d3316Smrg my_fail_exp="${2-:}" 681a966c04fSmrg 6826e7d3316Smrg ${opt_silent-false} || { 6836e7d3316Smrg func_quote_for_expand "$my_cmd" 6846e7d3316Smrg eval "func_echo $func_quote_for_expand_result" 6856e7d3316Smrg } 686a966c04fSmrg 6876e7d3316Smrg if ${opt_dry_run-false}; then :; else 6886e7d3316Smrg eval "$lt_user_locale 6896e7d3316Smrg $my_cmd" 6906e7d3316Smrg my_status=$? 6916e7d3316Smrg eval "$lt_safe_locale" 6926e7d3316Smrg if test "$my_status" -eq 0; then :; else 6936e7d3316Smrg eval "(exit $my_status); $my_fail_exp" 694a966c04fSmrg fi 6956e7d3316Smrg fi 696a966c04fSmrg} 697a966c04fSmrg 69897cf2ee2Smrg# func_tr_sh 69997cf2ee2Smrg# Turn $1 into a string suitable for a shell variable name. 70097cf2ee2Smrg# Result is stored in $func_tr_sh_result. All characters 70197cf2ee2Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 70297cf2ee2Smrg# if $1 begins with a digit, a '_' is prepended as well. 70397cf2ee2Smrgfunc_tr_sh () 70497cf2ee2Smrg{ 70597cf2ee2Smrg case $1 in 70697cf2ee2Smrg [0-9]* | *[!a-zA-Z0-9_]*) 70797cf2ee2Smrg func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 70897cf2ee2Smrg ;; 70997cf2ee2Smrg * ) 71097cf2ee2Smrg func_tr_sh_result=$1 71197cf2ee2Smrg ;; 71297cf2ee2Smrg esac 71397cf2ee2Smrg} 71497cf2ee2Smrg 715a966c04fSmrg 7166e7d3316Smrg# func_version 7176e7d3316Smrg# Echo version message to standard output and exit. 7186e7d3316Smrgfunc_version () 7196e7d3316Smrg{ 72097cf2ee2Smrg $opt_debug 72197cf2ee2Smrg 7226e7d3316Smrg $SED -n '/(C)/!b go 7236e7d3316Smrg :more 7246e7d3316Smrg /\./!{ 7256e7d3316Smrg N 7266e7d3316Smrg s/\n# / / 7276e7d3316Smrg b more 7286e7d3316Smrg } 7296e7d3316Smrg :go 7306e7d3316Smrg /^# '$PROGRAM' (GNU /,/# warranty; / { 7316e7d3316Smrg s/^# // 7326e7d3316Smrg s/^# *$// 7336e7d3316Smrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 7346e7d3316Smrg p 7356e7d3316Smrg }' < "$progpath" 7366e7d3316Smrg exit $? 7376e7d3316Smrg} 738a966c04fSmrg 7396e7d3316Smrg# func_usage 7406e7d3316Smrg# Echo short help message to standard output and exit. 7416e7d3316Smrgfunc_usage () 7426e7d3316Smrg{ 74397cf2ee2Smrg $opt_debug 74497cf2ee2Smrg 7456e7d3316Smrg $SED -n '/^# Usage:/,/^# *.*--help/ { 7466e7d3316Smrg s/^# // 7476e7d3316Smrg s/^# *$// 7486e7d3316Smrg s/\$progname/'$progname'/ 7496e7d3316Smrg p 7506e7d3316Smrg }' < "$progpath" 7516e7d3316Smrg echo 7526e7d3316Smrg $ECHO "run \`$progname --help | more' for full usage" 7536e7d3316Smrg exit $? 7546e7d3316Smrg} 755a966c04fSmrg 7566e7d3316Smrg# func_help [NOEXIT] 7576e7d3316Smrg# Echo long help message to standard output and exit, 7586e7d3316Smrg# unless 'noexit' is passed as argument. 7596e7d3316Smrgfunc_help () 7606e7d3316Smrg{ 76197cf2ee2Smrg $opt_debug 76297cf2ee2Smrg 7636e7d3316Smrg $SED -n '/^# Usage:/,/# Report bugs to/ { 76497cf2ee2Smrg :print 7656e7d3316Smrg s/^# // 7666e7d3316Smrg s/^# *$// 7676e7d3316Smrg s*\$progname*'$progname'* 7686e7d3316Smrg s*\$host*'"$host"'* 7696e7d3316Smrg s*\$SHELL*'"$SHELL"'* 7706e7d3316Smrg s*\$LTCC*'"$LTCC"'* 7716e7d3316Smrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 7726e7d3316Smrg s*\$LD*'"$LD"'* 7736e7d3316Smrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 7746e7d3316Smrg s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ 7756e7d3316Smrg s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ 7766e7d3316Smrg p 77797cf2ee2Smrg d 77897cf2ee2Smrg } 77997cf2ee2Smrg /^# .* home page:/b print 78097cf2ee2Smrg /^# General help using/b print 78197cf2ee2Smrg ' < "$progpath" 7826e7d3316Smrg ret=$? 7836e7d3316Smrg if test -z "$1"; then 7846e7d3316Smrg exit $ret 7856e7d3316Smrg fi 7866e7d3316Smrg} 787a966c04fSmrg 7886e7d3316Smrg# func_missing_arg argname 7896e7d3316Smrg# Echo program name prefixed message to standard error and set global 7906e7d3316Smrg# exit_cmd. 7916e7d3316Smrgfunc_missing_arg () 7926e7d3316Smrg{ 79397cf2ee2Smrg $opt_debug 79497cf2ee2Smrg 7956e7d3316Smrg func_error "missing argument for $1." 7966e7d3316Smrg exit_cmd=exit 7976e7d3316Smrg} 798a966c04fSmrg 799a966c04fSmrg 80097cf2ee2Smrg# func_split_short_opt shortopt 80197cf2ee2Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 80297cf2ee2Smrg# variables after splitting SHORTOPT after the 2nd character. 80397cf2ee2Smrgfunc_split_short_opt () 80497cf2ee2Smrg{ 80597cf2ee2Smrg my_sed_short_opt='1s/^\(..\).*$/\1/;q' 80697cf2ee2Smrg my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 80797cf2ee2Smrg 80897cf2ee2Smrg func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 80997cf2ee2Smrg func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 81097cf2ee2Smrg} # func_split_short_opt may be replaced by extended shell implementation 81197cf2ee2Smrg 81297cf2ee2Smrg 81397cf2ee2Smrg# func_split_long_opt longopt 81497cf2ee2Smrg# Set func_split_long_opt_name and func_split_long_opt_arg shell 81597cf2ee2Smrg# variables after splitting LONGOPT at the `=' sign. 81697cf2ee2Smrgfunc_split_long_opt () 81797cf2ee2Smrg{ 81897cf2ee2Smrg my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 81997cf2ee2Smrg my_sed_long_arg='1s/^--[^=]*=//' 82097cf2ee2Smrg 82197cf2ee2Smrg func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 82297cf2ee2Smrg func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 82397cf2ee2Smrg} # func_split_long_opt may be replaced by extended shell implementation 82497cf2ee2Smrg 82597cf2ee2Smrgexit_cmd=: 826a966c04fSmrg 827a966c04fSmrg 8282e2dd055Smrg 829a966c04fSmrg 8306e7d3316Smrg 8316e7d3316Smrgmagic="%%%MAGIC variable%%%" 8326e7d3316Smrgmagic_exe="%%%MAGIC EXE variable%%%" 8336e7d3316Smrg 8346e7d3316Smrg# Global variables. 8356e7d3316Smrgnonopt= 8366e7d3316Smrgpreserve_args= 8376e7d3316Smrglo2o="s/\\.lo\$/.${objext}/" 8386e7d3316Smrgo2lo="s/\\.${objext}\$/.lo/" 8396e7d3316Smrgextracted_archives= 8406e7d3316Smrgextracted_serial=0 8416e7d3316Smrg 8426e7d3316Smrg# If this variable is set in any of the actions, the command in it 8436e7d3316Smrg# will be execed at the end. This prevents here-documents from being 8446e7d3316Smrg# left over by shells. 8456e7d3316Smrgexec_cmd= 8466e7d3316Smrg 84797cf2ee2Smrg# func_append var value 84897cf2ee2Smrg# Append VALUE to the end of shell variable VAR. 84997cf2ee2Smrgfunc_append () 85097cf2ee2Smrg{ 85197cf2ee2Smrg eval "${1}=\$${1}\${2}" 85297cf2ee2Smrg} # func_append may be replaced by extended shell implementation 85397cf2ee2Smrg 85497cf2ee2Smrg# func_append_quoted var value 85597cf2ee2Smrg# Quote VALUE and append to the end of shell variable VAR, separated 85697cf2ee2Smrg# by a space. 85797cf2ee2Smrgfunc_append_quoted () 85897cf2ee2Smrg{ 85997cf2ee2Smrg func_quote_for_eval "${2}" 86097cf2ee2Smrg eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 86197cf2ee2Smrg} # func_append_quoted may be replaced by extended shell implementation 86297cf2ee2Smrg 86397cf2ee2Smrg 86497cf2ee2Smrg# func_arith arithmetic-term... 86597cf2ee2Smrgfunc_arith () 86697cf2ee2Smrg{ 86797cf2ee2Smrg func_arith_result=`expr "${@}"` 86897cf2ee2Smrg} # func_arith may be replaced by extended shell implementation 86997cf2ee2Smrg 87097cf2ee2Smrg 87197cf2ee2Smrg# func_len string 87297cf2ee2Smrg# STRING may not start with a hyphen. 87397cf2ee2Smrgfunc_len () 87497cf2ee2Smrg{ 87597cf2ee2Smrg func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 87697cf2ee2Smrg} # func_len may be replaced by extended shell implementation 87797cf2ee2Smrg 87897cf2ee2Smrg 87997cf2ee2Smrg# func_lo2o object 88097cf2ee2Smrgfunc_lo2o () 88197cf2ee2Smrg{ 88297cf2ee2Smrg func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 88397cf2ee2Smrg} # func_lo2o may be replaced by extended shell implementation 88497cf2ee2Smrg 88597cf2ee2Smrg 88697cf2ee2Smrg# func_xform libobj-or-source 88797cf2ee2Smrgfunc_xform () 88897cf2ee2Smrg{ 88997cf2ee2Smrg func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 89097cf2ee2Smrg} # func_xform may be replaced by extended shell implementation 89197cf2ee2Smrg 89297cf2ee2Smrg 8936e7d3316Smrg# func_fatal_configuration arg... 8946e7d3316Smrg# Echo program name prefixed message to standard error, followed by 8956e7d3316Smrg# a configuration failure hint, and exit. 8966e7d3316Smrgfunc_fatal_configuration () 8976e7d3316Smrg{ 8986e7d3316Smrg func_error ${1+"$@"} 8996e7d3316Smrg func_error "See the $PACKAGE documentation for more information." 9006e7d3316Smrg func_fatal_error "Fatal configuration error." 9016e7d3316Smrg} 9026e7d3316Smrg 9036e7d3316Smrg 9046e7d3316Smrg# func_config 9056e7d3316Smrg# Display the configuration for all the tags in this script. 9066e7d3316Smrgfunc_config () 9076e7d3316Smrg{ 9086e7d3316Smrg re_begincf='^# ### BEGIN LIBTOOL' 9096e7d3316Smrg re_endcf='^# ### END LIBTOOL' 9106e7d3316Smrg 9116e7d3316Smrg # Default configuration. 9126e7d3316Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 9136e7d3316Smrg 914a966c04fSmrg # Now print the configurations for the tags. 915a966c04fSmrg for tagname in $taglist; do 9166e7d3316Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 917a966c04fSmrg done 918a966c04fSmrg 9196e7d3316Smrg exit $? 9206e7d3316Smrg} 921a966c04fSmrg 9226e7d3316Smrg# func_features 9236e7d3316Smrg# Display the features supported by this script. 9246e7d3316Smrgfunc_features () 9256e7d3316Smrg{ 9266e7d3316Smrg echo "host: $host" 927a966c04fSmrg if test "$build_libtool_libs" = yes; then 9286e7d3316Smrg echo "enable shared libraries" 929a966c04fSmrg else 9306e7d3316Smrg echo "disable shared libraries" 931a966c04fSmrg fi 932a966c04fSmrg if test "$build_old_libs" = yes; then 9336e7d3316Smrg echo "enable static libraries" 934a966c04fSmrg else 9356e7d3316Smrg echo "disable static libraries" 936a966c04fSmrg fi 9376e7d3316Smrg 938a966c04fSmrg exit $? 9396e7d3316Smrg} 940a966c04fSmrg 9416e7d3316Smrg# func_enable_tag tagname 9426e7d3316Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 9436e7d3316Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 9446e7d3316Smrg# variable here. 9456e7d3316Smrgfunc_enable_tag () 9466e7d3316Smrg{ 9476e7d3316Smrg # Global variable: 9486e7d3316Smrg tagname="$1" 949a966c04fSmrg 9506e7d3316Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 9516e7d3316Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 9526e7d3316Smrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 953a966c04fSmrg 9546e7d3316Smrg # Validate tagname. 9556e7d3316Smrg case $tagname in 9566e7d3316Smrg *[!-_A-Za-z0-9,/]*) 9576e7d3316Smrg func_fatal_error "invalid tag name: $tagname" 9586e7d3316Smrg ;; 9596e7d3316Smrg esac 960a966c04fSmrg 9616e7d3316Smrg # Don't test for the "default" C tag, as we know it's 9626e7d3316Smrg # there but not specially marked. 9636e7d3316Smrg case $tagname in 9646e7d3316Smrg CC) ;; 9656e7d3316Smrg *) 9666e7d3316Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 9676e7d3316Smrg taglist="$taglist $tagname" 9686e7d3316Smrg 9696e7d3316Smrg # Evaluate the configuration. Be careful to quote the path 9706e7d3316Smrg # and the sed script, to avoid splitting on whitespace, but 9716e7d3316Smrg # also don't use non-portable quotes within backquotes within 9726e7d3316Smrg # quotes we have to do it in 2 steps: 9736e7d3316Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 9746e7d3316Smrg eval "$extractedcf" 9756e7d3316Smrg else 9766e7d3316Smrg func_error "ignoring unknown tag $tagname" 9776e7d3316Smrg fi 9786e7d3316Smrg ;; 9796e7d3316Smrg esac 9806e7d3316Smrg} 9816e7d3316Smrg 98297cf2ee2Smrg# func_check_version_match 98397cf2ee2Smrg# Ensure that we are using m4 macros, and libtool script from the same 98497cf2ee2Smrg# release of libtool. 98597cf2ee2Smrgfunc_check_version_match () 9866e7d3316Smrg{ 98797cf2ee2Smrg if test "$package_revision" != "$macro_revision"; then 98897cf2ee2Smrg if test "$VERSION" != "$macro_version"; then 98997cf2ee2Smrg if test -z "$macro_version"; then 99097cf2ee2Smrg cat >&2 <<_LT_EOF 99197cf2ee2Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 99297cf2ee2Smrg$progname: definition of this LT_INIT comes from an older release. 99397cf2ee2Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 99497cf2ee2Smrg$progname: and run autoconf again. 99597cf2ee2Smrg_LT_EOF 99697cf2ee2Smrg else 99797cf2ee2Smrg cat >&2 <<_LT_EOF 99897cf2ee2Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 99997cf2ee2Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 100097cf2ee2Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 100197cf2ee2Smrg$progname: and run autoconf again. 100297cf2ee2Smrg_LT_EOF 100397cf2ee2Smrg fi 100497cf2ee2Smrg else 100597cf2ee2Smrg cat >&2 <<_LT_EOF 100697cf2ee2Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 100797cf2ee2Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 100897cf2ee2Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 100997cf2ee2Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 101097cf2ee2Smrg_LT_EOF 101197cf2ee2Smrg fi 1012a966c04fSmrg 101397cf2ee2Smrg exit $EXIT_MISMATCH 101497cf2ee2Smrg fi 101597cf2ee2Smrg} 101697cf2ee2Smrg 101797cf2ee2Smrg 101897cf2ee2Smrg# Shorthand for --mode=foo, only valid as the first argument 101997cf2ee2Smrgcase $1 in 102097cf2ee2Smrgclean|clea|cle|cl) 102197cf2ee2Smrg shift; set dummy --mode clean ${1+"$@"}; shift 102297cf2ee2Smrg ;; 102397cf2ee2Smrgcompile|compil|compi|comp|com|co|c) 102497cf2ee2Smrg shift; set dummy --mode compile ${1+"$@"}; shift 102597cf2ee2Smrg ;; 102697cf2ee2Smrgexecute|execut|execu|exec|exe|ex|e) 102797cf2ee2Smrg shift; set dummy --mode execute ${1+"$@"}; shift 102897cf2ee2Smrg ;; 102997cf2ee2Smrgfinish|finis|fini|fin|fi|f) 103097cf2ee2Smrg shift; set dummy --mode finish ${1+"$@"}; shift 103197cf2ee2Smrg ;; 103297cf2ee2Smrginstall|instal|insta|inst|ins|in|i) 103397cf2ee2Smrg shift; set dummy --mode install ${1+"$@"}; shift 103497cf2ee2Smrg ;; 103597cf2ee2Smrglink|lin|li|l) 103697cf2ee2Smrg shift; set dummy --mode link ${1+"$@"}; shift 103797cf2ee2Smrg ;; 103897cf2ee2Smrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 103997cf2ee2Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 104097cf2ee2Smrg ;; 104197cf2ee2Smrgesac 1042a966c04fSmrg 104397cf2ee2Smrg 104497cf2ee2Smrg 104597cf2ee2Smrg# Option defaults: 104697cf2ee2Smrgopt_debug=: 104797cf2ee2Smrgopt_dry_run=false 104897cf2ee2Smrgopt_config=false 104997cf2ee2Smrgopt_preserve_dup_deps=false 105097cf2ee2Smrgopt_features=false 105197cf2ee2Smrgopt_finish=false 105297cf2ee2Smrgopt_help=false 105397cf2ee2Smrgopt_help_all=false 105497cf2ee2Smrgopt_silent=: 105597cf2ee2Smrgopt_verbose=: 105697cf2ee2Smrgopt_silent=false 105797cf2ee2Smrgopt_verbose=false 105897cf2ee2Smrg 105997cf2ee2Smrg 106097cf2ee2Smrg# Parse options once, thoroughly. This comes as soon as possible in the 106197cf2ee2Smrg# script to make things like `--version' happen as quickly as we can. 106297cf2ee2Smrg{ 106397cf2ee2Smrg # this just eases exit handling 106497cf2ee2Smrg while test $# -gt 0; do 10656e7d3316Smrg opt="$1" 10666e7d3316Smrg shift 10676e7d3316Smrg case $opt in 106897cf2ee2Smrg --debug|-x) opt_debug='set -x' 10696e7d3316Smrg func_echo "enabling shell trace mode" 10706e7d3316Smrg $opt_debug 10716e7d3316Smrg ;; 107297cf2ee2Smrg --dry-run|--dryrun|-n) 107397cf2ee2Smrg opt_dry_run=: 10746e7d3316Smrg ;; 107597cf2ee2Smrg --config) 107697cf2ee2Smrg opt_config=: 107797cf2ee2Smrgfunc_config 107897cf2ee2Smrg ;; 107997cf2ee2Smrg --dlopen|-dlopen) 108097cf2ee2Smrg optarg="$1" 108197cf2ee2Smrg opt_dlopen="${opt_dlopen+$opt_dlopen 108297cf2ee2Smrg}$optarg" 10836e7d3316Smrg shift 10846e7d3316Smrg ;; 10856e7d3316Smrg --preserve-dup-deps) 108697cf2ee2Smrg opt_preserve_dup_deps=: 10876e7d3316Smrg ;; 108897cf2ee2Smrg --features) 108997cf2ee2Smrg opt_features=: 109097cf2ee2Smrgfunc_features 10916e7d3316Smrg ;; 109297cf2ee2Smrg --finish) 109397cf2ee2Smrg opt_finish=: 109497cf2ee2Smrgset dummy --mode finish ${1+"$@"}; shift 109597cf2ee2Smrg ;; 109697cf2ee2Smrg --help) 109797cf2ee2Smrg opt_help=: 109897cf2ee2Smrg ;; 109997cf2ee2Smrg --help-all) 110097cf2ee2Smrg opt_help_all=: 110197cf2ee2Smrgopt_help=': help-all' 110297cf2ee2Smrg ;; 110397cf2ee2Smrg --mode) 110497cf2ee2Smrg test $# = 0 && func_missing_arg $opt && break 110597cf2ee2Smrg optarg="$1" 110697cf2ee2Smrg opt_mode="$optarg" 110797cf2ee2Smrgcase $optarg in 110897cf2ee2Smrg # Valid mode arguments: 110997cf2ee2Smrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 111097cf2ee2Smrg 111197cf2ee2Smrg # Catch anything else as an error 111297cf2ee2Smrg *) func_error "invalid argument for $opt" 111397cf2ee2Smrg exit_cmd=exit 111497cf2ee2Smrg break 111597cf2ee2Smrg ;; 111697cf2ee2Smrgesac 111797cf2ee2Smrg shift 111897cf2ee2Smrg ;; 111997cf2ee2Smrg --no-silent|--no-quiet) 11206e7d3316Smrg opt_silent=false 112197cf2ee2Smrgfunc_append preserve_args " $opt" 11226e7d3316Smrg ;; 112397cf2ee2Smrg --no-verbose) 11246e7d3316Smrg opt_verbose=false 112597cf2ee2Smrgfunc_append preserve_args " $opt" 11266e7d3316Smrg ;; 112797cf2ee2Smrg --silent|--quiet) 112897cf2ee2Smrg opt_silent=: 112997cf2ee2Smrgfunc_append preserve_args " $opt" 113097cf2ee2Smrg opt_verbose=false 113197cf2ee2Smrg ;; 113297cf2ee2Smrg --verbose|-v) 113397cf2ee2Smrg opt_verbose=: 113497cf2ee2Smrgfunc_append preserve_args " $opt" 113597cf2ee2Smrgopt_silent=false 113697cf2ee2Smrg ;; 113797cf2ee2Smrg --tag) 113897cf2ee2Smrg test $# = 0 && func_missing_arg $opt && break 113997cf2ee2Smrg optarg="$1" 114097cf2ee2Smrg opt_tag="$optarg" 114197cf2ee2Smrgfunc_append preserve_args " $opt $optarg" 114297cf2ee2Smrgfunc_enable_tag "$optarg" 11436e7d3316Smrg shift 11446e7d3316Smrg ;; 11456e7d3316Smrg 114697cf2ee2Smrg -\?|-h) func_usage ;; 114797cf2ee2Smrg --help) func_help ;; 114897cf2ee2Smrg --version) func_version ;; 114997cf2ee2Smrg 11506e7d3316Smrg # Separate optargs to long options: 115197cf2ee2Smrg --*=*) 115297cf2ee2Smrg func_split_long_opt "$opt" 115397cf2ee2Smrg set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 11546e7d3316Smrg shift 11556e7d3316Smrg ;; 11566e7d3316Smrg 115797cf2ee2Smrg # Separate non-argument short options: 115897cf2ee2Smrg -\?*|-h*|-n*|-v*) 115997cf2ee2Smrg func_split_short_opt "$opt" 116097cf2ee2Smrg set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 116197cf2ee2Smrg shift 11626e7d3316Smrg ;; 116397cf2ee2Smrg 116497cf2ee2Smrg --) break ;; 116597cf2ee2Smrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 116697cf2ee2Smrg *) set dummy "$opt" ${1+"$@"}; shift; break ;; 11676e7d3316Smrg esac 11686e7d3316Smrg done 11696e7d3316Smrg 117097cf2ee2Smrg # Validate options: 117197cf2ee2Smrg 117297cf2ee2Smrg # save first non-option argument 117397cf2ee2Smrg if test "$#" -gt 0; then 117497cf2ee2Smrg nonopt="$opt" 117597cf2ee2Smrg shift 117697cf2ee2Smrg fi 117797cf2ee2Smrg 117897cf2ee2Smrg # preserve --debug 117997cf2ee2Smrg test "$opt_debug" = : || func_append preserve_args " --debug" 11806e7d3316Smrg 11816e7d3316Smrg case $host in 11826e7d3316Smrg *cygwin* | *mingw* | *pw32* | *cegcc*) 11836e7d3316Smrg # don't eliminate duplications in $postdeps and $predeps 11846e7d3316Smrg opt_duplicate_compiler_generated_deps=: 1185a966c04fSmrg ;; 1186a966c04fSmrg *) 118797cf2ee2Smrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 11886e7d3316Smrg ;; 11896e7d3316Smrg esac 1190a966c04fSmrg 119197cf2ee2Smrg $opt_help || { 119297cf2ee2Smrg # Sanity checks first: 119397cf2ee2Smrg func_check_version_match 11946e7d3316Smrg 119597cf2ee2Smrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 119697cf2ee2Smrg func_fatal_configuration "not configured to build any kind of library" 11976e7d3316Smrg fi 11986e7d3316Smrg 119997cf2ee2Smrg # Darwin sucks 120097cf2ee2Smrg eval std_shrext=\"$shrext_cmds\" 12016e7d3316Smrg 120297cf2ee2Smrg # Only execute mode is allowed to have -dlopen flags. 120397cf2ee2Smrg if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 120497cf2ee2Smrg func_error "unrecognized option \`-dlopen'" 120597cf2ee2Smrg $ECHO "$help" 1>&2 120697cf2ee2Smrg exit $EXIT_FAILURE 120797cf2ee2Smrg fi 12086e7d3316Smrg 120997cf2ee2Smrg # Change the help message to a mode-specific one. 121097cf2ee2Smrg generic_help="$help" 121197cf2ee2Smrg help="Try \`$progname --help --mode=$opt_mode' for more information." 121297cf2ee2Smrg } 12136e7d3316Smrg 12146e7d3316Smrg 121597cf2ee2Smrg # Bail if the options were screwed 121697cf2ee2Smrg $exit_cmd $EXIT_FAILURE 121797cf2ee2Smrg} 12186e7d3316Smrg 12196e7d3316Smrg 1220a966c04fSmrg 1221a966c04fSmrg 122297cf2ee2Smrg## ----------- ## 122397cf2ee2Smrg## Main. ## 122497cf2ee2Smrg## ----------- ## 1225a966c04fSmrg 12266e7d3316Smrg# func_lalib_p file 12276e7d3316Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 12286e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out 12296e7d3316Smrg# determined imposters. 12306e7d3316Smrgfunc_lalib_p () 12316e7d3316Smrg{ 12326e7d3316Smrg test -f "$1" && 12336e7d3316Smrg $SED -e 4q "$1" 2>/dev/null \ 12346e7d3316Smrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 12356e7d3316Smrg} 1236a966c04fSmrg 12376e7d3316Smrg# func_lalib_unsafe_p file 12386e7d3316Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 12396e7d3316Smrg# This function implements the same check as func_lalib_p without 12406e7d3316Smrg# resorting to external programs. To this end, it redirects stdin and 12416e7d3316Smrg# closes it afterwards, without saving the original file descriptor. 12426e7d3316Smrg# As a safety measure, use it only where a negative result would be 12436e7d3316Smrg# fatal anyway. Works if `file' does not exist. 12446e7d3316Smrgfunc_lalib_unsafe_p () 12456e7d3316Smrg{ 12466e7d3316Smrg lalib_p=no 12476e7d3316Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 12486e7d3316Smrg for lalib_p_l in 1 2 3 4 12496e7d3316Smrg do 12506e7d3316Smrg read lalib_p_line 12516e7d3316Smrg case "$lalib_p_line" in 12526e7d3316Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 12536e7d3316Smrg esac 12546e7d3316Smrg done 12556e7d3316Smrg exec 0<&5 5<&- 12566e7d3316Smrg fi 12576e7d3316Smrg test "$lalib_p" = yes 12586e7d3316Smrg} 1259a966c04fSmrg 12606e7d3316Smrg# func_ltwrapper_script_p file 12616e7d3316Smrg# True iff FILE is a libtool wrapper script 12626e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out 12636e7d3316Smrg# determined imposters. 12646e7d3316Smrgfunc_ltwrapper_script_p () 12656e7d3316Smrg{ 12666e7d3316Smrg func_lalib_p "$1" 12676e7d3316Smrg} 1268a966c04fSmrg 12696e7d3316Smrg# func_ltwrapper_executable_p file 12706e7d3316Smrg# True iff FILE is a libtool wrapper executable 12716e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out 12726e7d3316Smrg# determined imposters. 12736e7d3316Smrgfunc_ltwrapper_executable_p () 12746e7d3316Smrg{ 12756e7d3316Smrg func_ltwrapper_exec_suffix= 12766e7d3316Smrg case $1 in 12776e7d3316Smrg *.exe) ;; 12786e7d3316Smrg *) func_ltwrapper_exec_suffix=.exe ;; 12796e7d3316Smrg esac 12806e7d3316Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 12816e7d3316Smrg} 12826e7d3316Smrg 12836e7d3316Smrg# func_ltwrapper_scriptname file 12846e7d3316Smrg# Assumes file is an ltwrapper_executable 12856e7d3316Smrg# uses $file to determine the appropriate filename for a 12866e7d3316Smrg# temporary ltwrapper_script. 12876e7d3316Smrgfunc_ltwrapper_scriptname () 12886e7d3316Smrg{ 128997cf2ee2Smrg func_dirname_and_basename "$1" "" "." 129097cf2ee2Smrg func_stripname '' '.exe' "$func_basename_result" 129197cf2ee2Smrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 12926e7d3316Smrg} 12936e7d3316Smrg 12946e7d3316Smrg# func_ltwrapper_p file 12956e7d3316Smrg# True iff FILE is a libtool wrapper script or wrapper executable 12966e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out 12976e7d3316Smrg# determined imposters. 12986e7d3316Smrgfunc_ltwrapper_p () 12996e7d3316Smrg{ 13006e7d3316Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 13016e7d3316Smrg} 13026e7d3316Smrg 13036e7d3316Smrg 13046e7d3316Smrg# func_execute_cmds commands fail_cmd 13056e7d3316Smrg# Execute tilde-delimited COMMANDS. 13066e7d3316Smrg# If FAIL_CMD is given, eval that upon failure. 13076e7d3316Smrg# FAIL_CMD may read-access the current command in variable CMD! 13086e7d3316Smrgfunc_execute_cmds () 13096e7d3316Smrg{ 13106e7d3316Smrg $opt_debug 13116e7d3316Smrg save_ifs=$IFS; IFS='~' 13126e7d3316Smrg for cmd in $1; do 13136e7d3316Smrg IFS=$save_ifs 13146e7d3316Smrg eval cmd=\"$cmd\" 13156e7d3316Smrg func_show_eval "$cmd" "${2-:}" 13166e7d3316Smrg done 13176e7d3316Smrg IFS=$save_ifs 13186e7d3316Smrg} 13196e7d3316Smrg 13206e7d3316Smrg 13216e7d3316Smrg# func_source file 13226e7d3316Smrg# Source FILE, adding directory component if necessary. 13236e7d3316Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 13246e7d3316Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 13256e7d3316Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 13266e7d3316Smrg# `FILE.' does not work on cygwin managed mounts. 13276e7d3316Smrgfunc_source () 13286e7d3316Smrg{ 13296e7d3316Smrg $opt_debug 13306e7d3316Smrg case $1 in 13316e7d3316Smrg */* | *\\*) . "$1" ;; 13326e7d3316Smrg *) . "./$1" ;; 13336e7d3316Smrg esac 13346e7d3316Smrg} 13356e7d3316Smrg 13366e7d3316Smrg 133797cf2ee2Smrg# func_resolve_sysroot PATH 133897cf2ee2Smrg# Replace a leading = in PATH with a sysroot. Store the result into 133997cf2ee2Smrg# func_resolve_sysroot_result 134097cf2ee2Smrgfunc_resolve_sysroot () 134197cf2ee2Smrg{ 134297cf2ee2Smrg func_resolve_sysroot_result=$1 134397cf2ee2Smrg case $func_resolve_sysroot_result in 134497cf2ee2Smrg =*) 134597cf2ee2Smrg func_stripname '=' '' "$func_resolve_sysroot_result" 134697cf2ee2Smrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 134797cf2ee2Smrg ;; 134897cf2ee2Smrg esac 134997cf2ee2Smrg} 135097cf2ee2Smrg 135197cf2ee2Smrg# func_replace_sysroot PATH 135297cf2ee2Smrg# If PATH begins with the sysroot, replace it with = and 135397cf2ee2Smrg# store the result into func_replace_sysroot_result. 135497cf2ee2Smrgfunc_replace_sysroot () 135597cf2ee2Smrg{ 135697cf2ee2Smrg case "$lt_sysroot:$1" in 135797cf2ee2Smrg ?*:"$lt_sysroot"*) 135897cf2ee2Smrg func_stripname "$lt_sysroot" '' "$1" 135997cf2ee2Smrg func_replace_sysroot_result="=$func_stripname_result" 136097cf2ee2Smrg ;; 136197cf2ee2Smrg *) 136297cf2ee2Smrg # Including no sysroot. 136397cf2ee2Smrg func_replace_sysroot_result=$1 136497cf2ee2Smrg ;; 136597cf2ee2Smrg esac 136697cf2ee2Smrg} 136797cf2ee2Smrg 13686e7d3316Smrg# func_infer_tag arg 13696e7d3316Smrg# Infer tagged configuration to use if any are available and 13706e7d3316Smrg# if one wasn't chosen via the "--tag" command line option. 13716e7d3316Smrg# Only attempt this if the compiler in the base compile 13726e7d3316Smrg# command doesn't match the default compiler. 13736e7d3316Smrg# arg is usually of the form 'gcc ...' 13746e7d3316Smrgfunc_infer_tag () 13756e7d3316Smrg{ 13766e7d3316Smrg $opt_debug 13776e7d3316Smrg if test -n "$available_tags" && test -z "$tagname"; then 13786e7d3316Smrg CC_quoted= 13796e7d3316Smrg for arg in $CC; do 138097cf2ee2Smrg func_append_quoted CC_quoted "$arg" 13816e7d3316Smrg done 13826e7d3316Smrg CC_expanded=`func_echo_all $CC` 13836e7d3316Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 13846e7d3316Smrg case $@ in 13856e7d3316Smrg # Blanks in the command may have been stripped by the calling shell, 13866e7d3316Smrg # but not from the CC environment variable when configure was run. 13876e7d3316Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 13886e7d3316Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 13896e7d3316Smrg # Blanks at the start of $base_compile will cause this to fail 13906e7d3316Smrg # if we don't check for them as well. 13916e7d3316Smrg *) 13926e7d3316Smrg for z in $available_tags; do 13936e7d3316Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 13946e7d3316Smrg # Evaluate the configuration. 13956e7d3316Smrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 13966e7d3316Smrg CC_quoted= 13976e7d3316Smrg for arg in $CC; do 13986e7d3316Smrg # Double-quote args containing other shell metacharacters. 139997cf2ee2Smrg func_append_quoted CC_quoted "$arg" 14006e7d3316Smrg done 14016e7d3316Smrg CC_expanded=`func_echo_all $CC` 14026e7d3316Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 14036e7d3316Smrg case "$@ " in 14046e7d3316Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 14056e7d3316Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 14066e7d3316Smrg # The compiler in the base compile command matches 14076e7d3316Smrg # the one in the tagged configuration. 14086e7d3316Smrg # Assume this is the tagged configuration we want. 14096e7d3316Smrg tagname=$z 14106e7d3316Smrg break 14116e7d3316Smrg ;; 14126e7d3316Smrg esac 14136e7d3316Smrg fi 14146e7d3316Smrg done 14156e7d3316Smrg # If $tagname still isn't set, then no tagged configuration 14166e7d3316Smrg # was found and let the user know that the "--tag" command 14176e7d3316Smrg # line option must be used. 14186e7d3316Smrg if test -z "$tagname"; then 14196e7d3316Smrg func_echo "unable to infer tagged configuration" 14206e7d3316Smrg func_fatal_error "specify a tag with \`--tag'" 14216e7d3316Smrg# else 14226e7d3316Smrg# func_verbose "using $tagname tagged configuration" 14236e7d3316Smrg fi 14246e7d3316Smrg ;; 14256e7d3316Smrg esac 14266e7d3316Smrg fi 14276e7d3316Smrg} 14286e7d3316Smrg 14296e7d3316Smrg 14306e7d3316Smrg 143197cf2ee2Smrg# func_write_libtool_object output_name pic_name nonpic_name 143297cf2ee2Smrg# Create a libtool object file (analogous to a ".la" file), 143397cf2ee2Smrg# but don't create it if we're doing a dry run. 143497cf2ee2Smrgfunc_write_libtool_object () 143597cf2ee2Smrg{ 143697cf2ee2Smrg write_libobj=${1} 143797cf2ee2Smrg if test "$build_libtool_libs" = yes; then 143897cf2ee2Smrg write_lobj=\'${2}\' 143997cf2ee2Smrg else 144097cf2ee2Smrg write_lobj=none 144197cf2ee2Smrg fi 144297cf2ee2Smrg 144397cf2ee2Smrg if test "$build_old_libs" = yes; then 144497cf2ee2Smrg write_oldobj=\'${3}\' 144597cf2ee2Smrg else 144697cf2ee2Smrg write_oldobj=none 144797cf2ee2Smrg fi 144897cf2ee2Smrg 144997cf2ee2Smrg $opt_dry_run || { 145097cf2ee2Smrg cat >${write_libobj}T <<EOF 145197cf2ee2Smrg# $write_libobj - a libtool object file 145297cf2ee2Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 145397cf2ee2Smrg# 145497cf2ee2Smrg# Please DO NOT delete this file! 145597cf2ee2Smrg# It is necessary for linking the library. 145697cf2ee2Smrg 145797cf2ee2Smrg# Name of the PIC object. 145897cf2ee2Smrgpic_object=$write_lobj 145997cf2ee2Smrg 146097cf2ee2Smrg# Name of the non-PIC object 146197cf2ee2Smrgnon_pic_object=$write_oldobj 146297cf2ee2Smrg 146397cf2ee2SmrgEOF 146497cf2ee2Smrg $MV "${write_libobj}T" "${write_libobj}" 146597cf2ee2Smrg } 146697cf2ee2Smrg} 146797cf2ee2Smrg 146897cf2ee2Smrg 146997cf2ee2Smrg################################################## 147097cf2ee2Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 147197cf2ee2Smrg################################################## 147297cf2ee2Smrg 147397cf2ee2Smrg# func_convert_core_file_wine_to_w32 ARG 147497cf2ee2Smrg# Helper function used by file name conversion functions when $build is *nix, 147597cf2ee2Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 147697cf2ee2Smrg# correctly configured wine environment available, with the winepath program 147797cf2ee2Smrg# in $build's $PATH. 147897cf2ee2Smrg# 147997cf2ee2Smrg# ARG is the $build file name to be converted to w32 format. 148097cf2ee2Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 148197cf2ee2Smrg# be empty on error (or when ARG is empty) 148297cf2ee2Smrgfunc_convert_core_file_wine_to_w32 () 148397cf2ee2Smrg{ 148497cf2ee2Smrg $opt_debug 148597cf2ee2Smrg func_convert_core_file_wine_to_w32_result="$1" 148697cf2ee2Smrg if test -n "$1"; then 148797cf2ee2Smrg # Unfortunately, winepath does not exit with a non-zero error code, so we 148897cf2ee2Smrg # are forced to check the contents of stdout. On the other hand, if the 148997cf2ee2Smrg # command is not found, the shell will set an exit code of 127 and print 149097cf2ee2Smrg # *an error message* to stdout. So we must check for both error code of 149197cf2ee2Smrg # zero AND non-empty stdout, which explains the odd construction: 149297cf2ee2Smrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 149397cf2ee2Smrg if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 149497cf2ee2Smrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 149597cf2ee2Smrg $SED -e "$lt_sed_naive_backslashify"` 149697cf2ee2Smrg else 149797cf2ee2Smrg func_convert_core_file_wine_to_w32_result= 149897cf2ee2Smrg fi 149997cf2ee2Smrg fi 150097cf2ee2Smrg} 150197cf2ee2Smrg# end: func_convert_core_file_wine_to_w32 150297cf2ee2Smrg 150397cf2ee2Smrg 150497cf2ee2Smrg# func_convert_core_path_wine_to_w32 ARG 150597cf2ee2Smrg# Helper function used by path conversion functions when $build is *nix, and 150697cf2ee2Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 150797cf2ee2Smrg# configured wine environment available, with the winepath program in $build's 150897cf2ee2Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 150997cf2ee2Smrg# 151097cf2ee2Smrg# ARG is path to be converted from $build format to win32. 151197cf2ee2Smrg# Result is available in $func_convert_core_path_wine_to_w32_result. 151297cf2ee2Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 151397cf2ee2Smrg# are convertible, then the result may be empty. 151497cf2ee2Smrgfunc_convert_core_path_wine_to_w32 () 151597cf2ee2Smrg{ 151697cf2ee2Smrg $opt_debug 151797cf2ee2Smrg # unfortunately, winepath doesn't convert paths, only file names 151897cf2ee2Smrg func_convert_core_path_wine_to_w32_result="" 151997cf2ee2Smrg if test -n "$1"; then 152097cf2ee2Smrg oldIFS=$IFS 152197cf2ee2Smrg IFS=: 152297cf2ee2Smrg for func_convert_core_path_wine_to_w32_f in $1; do 152397cf2ee2Smrg IFS=$oldIFS 152497cf2ee2Smrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 152597cf2ee2Smrg if test -n "$func_convert_core_file_wine_to_w32_result" ; then 152697cf2ee2Smrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 152797cf2ee2Smrg func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 152897cf2ee2Smrg else 152997cf2ee2Smrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 153097cf2ee2Smrg fi 153197cf2ee2Smrg fi 153297cf2ee2Smrg done 153397cf2ee2Smrg IFS=$oldIFS 153497cf2ee2Smrg fi 153597cf2ee2Smrg} 153697cf2ee2Smrg# end: func_convert_core_path_wine_to_w32 153797cf2ee2Smrg 153897cf2ee2Smrg 153997cf2ee2Smrg# func_cygpath ARGS... 154097cf2ee2Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 154197cf2ee2Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 154297cf2ee2Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 154397cf2ee2Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 154497cf2ee2Smrg# file name or path is assumed to be in w32 format, as previously converted 154597cf2ee2Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 154697cf2ee2Smrg# or path in func_cygpath_result (input file name or path is assumed to be in 154797cf2ee2Smrg# Cygwin format). Returns an empty string on error. 154897cf2ee2Smrg# 154997cf2ee2Smrg# ARGS are passed to cygpath, with the last one being the file name or path to 155097cf2ee2Smrg# be converted. 155197cf2ee2Smrg# 155297cf2ee2Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 155397cf2ee2Smrg# environment variable; do not put it in $PATH. 155497cf2ee2Smrgfunc_cygpath () 155597cf2ee2Smrg{ 155697cf2ee2Smrg $opt_debug 155797cf2ee2Smrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 155897cf2ee2Smrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 155997cf2ee2Smrg if test "$?" -ne 0; then 156097cf2ee2Smrg # on failure, ensure result is empty 156197cf2ee2Smrg func_cygpath_result= 156297cf2ee2Smrg fi 156397cf2ee2Smrg else 156497cf2ee2Smrg func_cygpath_result= 156597cf2ee2Smrg func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 156697cf2ee2Smrg fi 156797cf2ee2Smrg} 156897cf2ee2Smrg#end: func_cygpath 156997cf2ee2Smrg 157097cf2ee2Smrg 157197cf2ee2Smrg# func_convert_core_msys_to_w32 ARG 157297cf2ee2Smrg# Convert file name or path ARG from MSYS format to w32 format. Return 157397cf2ee2Smrg# result in func_convert_core_msys_to_w32_result. 157497cf2ee2Smrgfunc_convert_core_msys_to_w32 () 157597cf2ee2Smrg{ 157697cf2ee2Smrg $opt_debug 157797cf2ee2Smrg # awkward: cmd appends spaces to result 157897cf2ee2Smrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 157997cf2ee2Smrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 158097cf2ee2Smrg} 158197cf2ee2Smrg#end: func_convert_core_msys_to_w32 158297cf2ee2Smrg 158397cf2ee2Smrg 158497cf2ee2Smrg# func_convert_file_check ARG1 ARG2 158597cf2ee2Smrg# Verify that ARG1 (a file name in $build format) was converted to $host 158697cf2ee2Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 158797cf2ee2Smrg# func_to_host_file_result to ARG1). 158897cf2ee2Smrgfunc_convert_file_check () 158997cf2ee2Smrg{ 159097cf2ee2Smrg $opt_debug 159197cf2ee2Smrg if test -z "$2" && test -n "$1" ; then 159297cf2ee2Smrg func_error "Could not determine host file name corresponding to" 159397cf2ee2Smrg func_error " \`$1'" 159497cf2ee2Smrg func_error "Continuing, but uninstalled executables may not work." 159597cf2ee2Smrg # Fallback: 159697cf2ee2Smrg func_to_host_file_result="$1" 159797cf2ee2Smrg fi 159897cf2ee2Smrg} 159997cf2ee2Smrg# end func_convert_file_check 160097cf2ee2Smrg 160197cf2ee2Smrg 160297cf2ee2Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 160397cf2ee2Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host 160497cf2ee2Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 160597cf2ee2Smrg# func_to_host_file_result to a simplistic fallback value (see below). 160697cf2ee2Smrgfunc_convert_path_check () 160797cf2ee2Smrg{ 160897cf2ee2Smrg $opt_debug 160997cf2ee2Smrg if test -z "$4" && test -n "$3"; then 161097cf2ee2Smrg func_error "Could not determine the host path corresponding to" 161197cf2ee2Smrg func_error " \`$3'" 161297cf2ee2Smrg func_error "Continuing, but uninstalled executables may not work." 161397cf2ee2Smrg # Fallback. This is a deliberately simplistic "conversion" and 161497cf2ee2Smrg # should not be "improved". See libtool.info. 161597cf2ee2Smrg if test "x$1" != "x$2"; then 161697cf2ee2Smrg lt_replace_pathsep_chars="s|$1|$2|g" 161797cf2ee2Smrg func_to_host_path_result=`echo "$3" | 161897cf2ee2Smrg $SED -e "$lt_replace_pathsep_chars"` 161997cf2ee2Smrg else 162097cf2ee2Smrg func_to_host_path_result="$3" 162197cf2ee2Smrg fi 162297cf2ee2Smrg fi 162397cf2ee2Smrg} 162497cf2ee2Smrg# end func_convert_path_check 162597cf2ee2Smrg 162697cf2ee2Smrg 162797cf2ee2Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 162897cf2ee2Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 162997cf2ee2Smrg# and appending REPL if ORIG matches BACKPAT. 163097cf2ee2Smrgfunc_convert_path_front_back_pathsep () 163197cf2ee2Smrg{ 163297cf2ee2Smrg $opt_debug 163397cf2ee2Smrg case $4 in 163497cf2ee2Smrg $1 ) func_to_host_path_result="$3$func_to_host_path_result" 163597cf2ee2Smrg ;; 163697cf2ee2Smrg esac 163797cf2ee2Smrg case $4 in 163897cf2ee2Smrg $2 ) func_append func_to_host_path_result "$3" 163997cf2ee2Smrg ;; 164097cf2ee2Smrg esac 164197cf2ee2Smrg} 164297cf2ee2Smrg# end func_convert_path_front_back_pathsep 164397cf2ee2Smrg 164497cf2ee2Smrg 164597cf2ee2Smrg################################################## 164697cf2ee2Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 164797cf2ee2Smrg################################################## 164897cf2ee2Smrg# invoked via `$to_host_file_cmd ARG' 164997cf2ee2Smrg# 165097cf2ee2Smrg# In each case, ARG is the path to be converted from $build to $host format. 165197cf2ee2Smrg# Result will be available in $func_to_host_file_result. 165297cf2ee2Smrg 165397cf2ee2Smrg 165497cf2ee2Smrg# func_to_host_file ARG 165597cf2ee2Smrg# Converts the file name ARG from $build format to $host format. Return result 165697cf2ee2Smrg# in func_to_host_file_result. 165797cf2ee2Smrgfunc_to_host_file () 165897cf2ee2Smrg{ 165997cf2ee2Smrg $opt_debug 166097cf2ee2Smrg $to_host_file_cmd "$1" 166197cf2ee2Smrg} 166297cf2ee2Smrg# end func_to_host_file 166397cf2ee2Smrg 166497cf2ee2Smrg 166597cf2ee2Smrg# func_to_tool_file ARG LAZY 166697cf2ee2Smrg# converts the file name ARG from $build format to toolchain format. Return 166797cf2ee2Smrg# result in func_to_tool_file_result. If the conversion in use is listed 166897cf2ee2Smrg# in (the comma separated) LAZY, no conversion takes place. 166997cf2ee2Smrgfunc_to_tool_file () 167097cf2ee2Smrg{ 167197cf2ee2Smrg $opt_debug 167297cf2ee2Smrg case ,$2, in 167397cf2ee2Smrg *,"$to_tool_file_cmd",*) 167497cf2ee2Smrg func_to_tool_file_result=$1 167597cf2ee2Smrg ;; 167697cf2ee2Smrg *) 167797cf2ee2Smrg $to_tool_file_cmd "$1" 167897cf2ee2Smrg func_to_tool_file_result=$func_to_host_file_result 167997cf2ee2Smrg ;; 168097cf2ee2Smrg esac 168197cf2ee2Smrg} 168297cf2ee2Smrg# end func_to_tool_file 168397cf2ee2Smrg 168497cf2ee2Smrg 168597cf2ee2Smrg# func_convert_file_noop ARG 168697cf2ee2Smrg# Copy ARG to func_to_host_file_result. 168797cf2ee2Smrgfunc_convert_file_noop () 168897cf2ee2Smrg{ 168997cf2ee2Smrg func_to_host_file_result="$1" 169097cf2ee2Smrg} 169197cf2ee2Smrg# end func_convert_file_noop 169297cf2ee2Smrg 169397cf2ee2Smrg 169497cf2ee2Smrg# func_convert_file_msys_to_w32 ARG 169597cf2ee2Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 169697cf2ee2Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 169797cf2ee2Smrg# func_to_host_file_result. 169897cf2ee2Smrgfunc_convert_file_msys_to_w32 () 169997cf2ee2Smrg{ 170097cf2ee2Smrg $opt_debug 170197cf2ee2Smrg func_to_host_file_result="$1" 170297cf2ee2Smrg if test -n "$1"; then 170397cf2ee2Smrg func_convert_core_msys_to_w32 "$1" 170497cf2ee2Smrg func_to_host_file_result="$func_convert_core_msys_to_w32_result" 170597cf2ee2Smrg fi 170697cf2ee2Smrg func_convert_file_check "$1" "$func_to_host_file_result" 170797cf2ee2Smrg} 170897cf2ee2Smrg# end func_convert_file_msys_to_w32 170997cf2ee2Smrg 171097cf2ee2Smrg 171197cf2ee2Smrg# func_convert_file_cygwin_to_w32 ARG 171297cf2ee2Smrg# Convert file name ARG from Cygwin to w32 format. Returns result in 171397cf2ee2Smrg# func_to_host_file_result. 171497cf2ee2Smrgfunc_convert_file_cygwin_to_w32 () 171597cf2ee2Smrg{ 171697cf2ee2Smrg $opt_debug 171797cf2ee2Smrg func_to_host_file_result="$1" 171897cf2ee2Smrg if test -n "$1"; then 171997cf2ee2Smrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 172097cf2ee2Smrg # LT_CYGPATH in this case. 172197cf2ee2Smrg func_to_host_file_result=`cygpath -m "$1"` 172297cf2ee2Smrg fi 172397cf2ee2Smrg func_convert_file_check "$1" "$func_to_host_file_result" 172497cf2ee2Smrg} 172597cf2ee2Smrg# end func_convert_file_cygwin_to_w32 172697cf2ee2Smrg 172797cf2ee2Smrg 172897cf2ee2Smrg# func_convert_file_nix_to_w32 ARG 172997cf2ee2Smrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 173097cf2ee2Smrg# and a working winepath. Returns result in func_to_host_file_result. 173197cf2ee2Smrgfunc_convert_file_nix_to_w32 () 173297cf2ee2Smrg{ 173397cf2ee2Smrg $opt_debug 173497cf2ee2Smrg func_to_host_file_result="$1" 173597cf2ee2Smrg if test -n "$1"; then 173697cf2ee2Smrg func_convert_core_file_wine_to_w32 "$1" 173797cf2ee2Smrg func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 173897cf2ee2Smrg fi 173997cf2ee2Smrg func_convert_file_check "$1" "$func_to_host_file_result" 174097cf2ee2Smrg} 174197cf2ee2Smrg# end func_convert_file_nix_to_w32 174297cf2ee2Smrg 174397cf2ee2Smrg 174497cf2ee2Smrg# func_convert_file_msys_to_cygwin ARG 174597cf2ee2Smrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 174697cf2ee2Smrg# Returns result in func_to_host_file_result. 174797cf2ee2Smrgfunc_convert_file_msys_to_cygwin () 174897cf2ee2Smrg{ 174997cf2ee2Smrg $opt_debug 175097cf2ee2Smrg func_to_host_file_result="$1" 175197cf2ee2Smrg if test -n "$1"; then 175297cf2ee2Smrg func_convert_core_msys_to_w32 "$1" 175397cf2ee2Smrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 175497cf2ee2Smrg func_to_host_file_result="$func_cygpath_result" 175597cf2ee2Smrg fi 175697cf2ee2Smrg func_convert_file_check "$1" "$func_to_host_file_result" 175797cf2ee2Smrg} 175897cf2ee2Smrg# end func_convert_file_msys_to_cygwin 175997cf2ee2Smrg 176097cf2ee2Smrg 176197cf2ee2Smrg# func_convert_file_nix_to_cygwin ARG 176297cf2ee2Smrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 176397cf2ee2Smrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 176497cf2ee2Smrg# in func_to_host_file_result. 176597cf2ee2Smrgfunc_convert_file_nix_to_cygwin () 176697cf2ee2Smrg{ 176797cf2ee2Smrg $opt_debug 176897cf2ee2Smrg func_to_host_file_result="$1" 176997cf2ee2Smrg if test -n "$1"; then 177097cf2ee2Smrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 177197cf2ee2Smrg func_convert_core_file_wine_to_w32 "$1" 177297cf2ee2Smrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 177397cf2ee2Smrg func_to_host_file_result="$func_cygpath_result" 177497cf2ee2Smrg fi 177597cf2ee2Smrg func_convert_file_check "$1" "$func_to_host_file_result" 177697cf2ee2Smrg} 177797cf2ee2Smrg# end func_convert_file_nix_to_cygwin 177897cf2ee2Smrg 177997cf2ee2Smrg 178097cf2ee2Smrg############################################# 178197cf2ee2Smrg# $build to $host PATH CONVERSION FUNCTIONS # 178297cf2ee2Smrg############################################# 178397cf2ee2Smrg# invoked via `$to_host_path_cmd ARG' 178497cf2ee2Smrg# 178597cf2ee2Smrg# In each case, ARG is the path to be converted from $build to $host format. 178697cf2ee2Smrg# The result will be available in $func_to_host_path_result. 178797cf2ee2Smrg# 178897cf2ee2Smrg# Path separators are also converted from $build format to $host format. If 178997cf2ee2Smrg# ARG begins or ends with a path separator character, it is preserved (but 179097cf2ee2Smrg# converted to $host format) on output. 179197cf2ee2Smrg# 179297cf2ee2Smrg# All path conversion functions are named using the following convention: 179397cf2ee2Smrg# file name conversion function : func_convert_file_X_to_Y () 179497cf2ee2Smrg# path conversion function : func_convert_path_X_to_Y () 179597cf2ee2Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the 179697cf2ee2Smrg# same. If conversion functions are added for new $build/$host combinations, 179797cf2ee2Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 179897cf2ee2Smrg# will break. 179997cf2ee2Smrg 180097cf2ee2Smrg 180197cf2ee2Smrg# func_init_to_host_path_cmd 180297cf2ee2Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 180397cf2ee2Smrg# appropriate value, based on the value of $to_host_file_cmd. 180497cf2ee2Smrgto_host_path_cmd= 180597cf2ee2Smrgfunc_init_to_host_path_cmd () 180697cf2ee2Smrg{ 180797cf2ee2Smrg $opt_debug 180897cf2ee2Smrg if test -z "$to_host_path_cmd"; then 180997cf2ee2Smrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 181097cf2ee2Smrg to_host_path_cmd="func_convert_path_${func_stripname_result}" 181197cf2ee2Smrg fi 181297cf2ee2Smrg} 181397cf2ee2Smrg 181497cf2ee2Smrg 181597cf2ee2Smrg# func_to_host_path ARG 181697cf2ee2Smrg# Converts the path ARG from $build format to $host format. Return result 181797cf2ee2Smrg# in func_to_host_path_result. 181897cf2ee2Smrgfunc_to_host_path () 181997cf2ee2Smrg{ 182097cf2ee2Smrg $opt_debug 182197cf2ee2Smrg func_init_to_host_path_cmd 182297cf2ee2Smrg $to_host_path_cmd "$1" 182397cf2ee2Smrg} 182497cf2ee2Smrg# end func_to_host_path 182597cf2ee2Smrg 182697cf2ee2Smrg 182797cf2ee2Smrg# func_convert_path_noop ARG 182897cf2ee2Smrg# Copy ARG to func_to_host_path_result. 182997cf2ee2Smrgfunc_convert_path_noop () 183097cf2ee2Smrg{ 183197cf2ee2Smrg func_to_host_path_result="$1" 183297cf2ee2Smrg} 183397cf2ee2Smrg# end func_convert_path_noop 183497cf2ee2Smrg 183597cf2ee2Smrg 183697cf2ee2Smrg# func_convert_path_msys_to_w32 ARG 183797cf2ee2Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 183897cf2ee2Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 183997cf2ee2Smrg# func_to_host_path_result. 184097cf2ee2Smrgfunc_convert_path_msys_to_w32 () 18416e7d3316Smrg{ 184297cf2ee2Smrg $opt_debug 184397cf2ee2Smrg func_to_host_path_result="$1" 184497cf2ee2Smrg if test -n "$1"; then 184597cf2ee2Smrg # Remove leading and trailing path separator characters from ARG. MSYS 184697cf2ee2Smrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 184797cf2ee2Smrg # and winepath ignores them completely. 184897cf2ee2Smrg func_stripname : : "$1" 184997cf2ee2Smrg func_to_host_path_tmp1=$func_stripname_result 185097cf2ee2Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 185197cf2ee2Smrg func_to_host_path_result="$func_convert_core_msys_to_w32_result" 185297cf2ee2Smrg func_convert_path_check : ";" \ 185397cf2ee2Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 185497cf2ee2Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 185597cf2ee2Smrg fi 185697cf2ee2Smrg} 185797cf2ee2Smrg# end func_convert_path_msys_to_w32 18586e7d3316Smrg 18596e7d3316Smrg 186097cf2ee2Smrg# func_convert_path_cygwin_to_w32 ARG 186197cf2ee2Smrg# Convert path ARG from Cygwin to w32 format. Returns result in 186297cf2ee2Smrg# func_to_host_file_result. 186397cf2ee2Smrgfunc_convert_path_cygwin_to_w32 () 186497cf2ee2Smrg{ 186597cf2ee2Smrg $opt_debug 186697cf2ee2Smrg func_to_host_path_result="$1" 186797cf2ee2Smrg if test -n "$1"; then 186897cf2ee2Smrg # See func_convert_path_msys_to_w32: 186997cf2ee2Smrg func_stripname : : "$1" 187097cf2ee2Smrg func_to_host_path_tmp1=$func_stripname_result 187197cf2ee2Smrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 187297cf2ee2Smrg func_convert_path_check : ";" \ 187397cf2ee2Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 187497cf2ee2Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 187597cf2ee2Smrg fi 187697cf2ee2Smrg} 187797cf2ee2Smrg# end func_convert_path_cygwin_to_w32 18786e7d3316Smrg 18796e7d3316Smrg 188097cf2ee2Smrg# func_convert_path_nix_to_w32 ARG 188197cf2ee2Smrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 188297cf2ee2Smrg# a working winepath. Returns result in func_to_host_file_result. 188397cf2ee2Smrgfunc_convert_path_nix_to_w32 () 188497cf2ee2Smrg{ 188597cf2ee2Smrg $opt_debug 188697cf2ee2Smrg func_to_host_path_result="$1" 188797cf2ee2Smrg if test -n "$1"; then 188897cf2ee2Smrg # See func_convert_path_msys_to_w32: 188997cf2ee2Smrg func_stripname : : "$1" 189097cf2ee2Smrg func_to_host_path_tmp1=$func_stripname_result 189197cf2ee2Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 189297cf2ee2Smrg func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 189397cf2ee2Smrg func_convert_path_check : ";" \ 189497cf2ee2Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 189597cf2ee2Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 189697cf2ee2Smrg fi 189797cf2ee2Smrg} 189897cf2ee2Smrg# end func_convert_path_nix_to_w32 18996e7d3316Smrg 190097cf2ee2Smrg 190197cf2ee2Smrg# func_convert_path_msys_to_cygwin ARG 190297cf2ee2Smrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 190397cf2ee2Smrg# Returns result in func_to_host_file_result. 190497cf2ee2Smrgfunc_convert_path_msys_to_cygwin () 190597cf2ee2Smrg{ 190697cf2ee2Smrg $opt_debug 190797cf2ee2Smrg func_to_host_path_result="$1" 190897cf2ee2Smrg if test -n "$1"; then 190997cf2ee2Smrg # See func_convert_path_msys_to_w32: 191097cf2ee2Smrg func_stripname : : "$1" 191197cf2ee2Smrg func_to_host_path_tmp1=$func_stripname_result 191297cf2ee2Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 191397cf2ee2Smrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 191497cf2ee2Smrg func_to_host_path_result="$func_cygpath_result" 191597cf2ee2Smrg func_convert_path_check : : \ 191697cf2ee2Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 191797cf2ee2Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 191897cf2ee2Smrg fi 191997cf2ee2Smrg} 192097cf2ee2Smrg# end func_convert_path_msys_to_cygwin 192197cf2ee2Smrg 192297cf2ee2Smrg 192397cf2ee2Smrg# func_convert_path_nix_to_cygwin ARG 192497cf2ee2Smrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 192597cf2ee2Smrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 192697cf2ee2Smrg# func_to_host_file_result. 192797cf2ee2Smrgfunc_convert_path_nix_to_cygwin () 192897cf2ee2Smrg{ 192997cf2ee2Smrg $opt_debug 193097cf2ee2Smrg func_to_host_path_result="$1" 193197cf2ee2Smrg if test -n "$1"; then 193297cf2ee2Smrg # Remove leading and trailing path separator characters from 193397cf2ee2Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 193497cf2ee2Smrg # into '.;' and ';.', and winepath ignores them completely. 193597cf2ee2Smrg func_stripname : : "$1" 193697cf2ee2Smrg func_to_host_path_tmp1=$func_stripname_result 193797cf2ee2Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 193897cf2ee2Smrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 193997cf2ee2Smrg func_to_host_path_result="$func_cygpath_result" 194097cf2ee2Smrg func_convert_path_check : : \ 194197cf2ee2Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 194297cf2ee2Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 194397cf2ee2Smrg fi 19446e7d3316Smrg} 194597cf2ee2Smrg# end func_convert_path_nix_to_cygwin 194697cf2ee2Smrg 19476e7d3316Smrg 19486e7d3316Smrg# func_mode_compile arg... 19496e7d3316Smrgfunc_mode_compile () 19506e7d3316Smrg{ 19516e7d3316Smrg $opt_debug 19526e7d3316Smrg # Get the compilation command and the source file. 19536e7d3316Smrg base_compile= 19546e7d3316Smrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 19556e7d3316Smrg suppress_opt=yes 19566e7d3316Smrg suppress_output= 19576e7d3316Smrg arg_mode=normal 19586e7d3316Smrg libobj= 19596e7d3316Smrg later= 19606e7d3316Smrg pie_flag= 19616e7d3316Smrg 19626e7d3316Smrg for arg 19636e7d3316Smrg do 19646e7d3316Smrg case $arg_mode in 19656e7d3316Smrg arg ) 19666e7d3316Smrg # do not "continue". Instead, add this to base_compile 19676e7d3316Smrg lastarg="$arg" 19686e7d3316Smrg arg_mode=normal 19696e7d3316Smrg ;; 19706e7d3316Smrg 19716e7d3316Smrg target ) 19726e7d3316Smrg libobj="$arg" 19736e7d3316Smrg arg_mode=normal 19746e7d3316Smrg continue 19756e7d3316Smrg ;; 19766e7d3316Smrg 19776e7d3316Smrg normal ) 19786e7d3316Smrg # Accept any command-line options. 19796e7d3316Smrg case $arg in 19806e7d3316Smrg -o) 19816e7d3316Smrg test -n "$libobj" && \ 19826e7d3316Smrg func_fatal_error "you cannot specify \`-o' more than once" 19836e7d3316Smrg arg_mode=target 19846e7d3316Smrg continue 19856e7d3316Smrg ;; 19866e7d3316Smrg 19876e7d3316Smrg -pie | -fpie | -fPIE) 198897cf2ee2Smrg func_append pie_flag " $arg" 19896e7d3316Smrg continue 19906e7d3316Smrg ;; 19916e7d3316Smrg 19926e7d3316Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 199397cf2ee2Smrg func_append later " $arg" 19946e7d3316Smrg continue 19956e7d3316Smrg ;; 1996a966c04fSmrg 1997a966c04fSmrg -no-suppress) 1998a966c04fSmrg suppress_opt=no 1999a966c04fSmrg continue 2000a966c04fSmrg ;; 2001a966c04fSmrg 2002a966c04fSmrg -Xcompiler) 2003a966c04fSmrg arg_mode=arg # the next one goes into the "base_compile" arg list 2004a966c04fSmrg continue # The current "srcfile" will either be retained or 2005a966c04fSmrg ;; # replaced later. I would guess that would be a bug. 2006a966c04fSmrg 2007a966c04fSmrg -Wc,*) 20086e7d3316Smrg func_stripname '-Wc,' '' "$arg" 20096e7d3316Smrg args=$func_stripname_result 2010a966c04fSmrg lastarg= 2011a966c04fSmrg save_ifs="$IFS"; IFS=',' 20126e7d3316Smrg for arg in $args; do 2013a966c04fSmrg IFS="$save_ifs" 201497cf2ee2Smrg func_append_quoted lastarg "$arg" 2015a966c04fSmrg done 2016a966c04fSmrg IFS="$save_ifs" 20176e7d3316Smrg func_stripname ' ' '' "$lastarg" 20186e7d3316Smrg lastarg=$func_stripname_result 2019a966c04fSmrg 2020a966c04fSmrg # Add the arguments to base_compile. 202197cf2ee2Smrg func_append base_compile " $lastarg" 2022a966c04fSmrg continue 2023a966c04fSmrg ;; 2024a966c04fSmrg 20256e7d3316Smrg *) 2026a966c04fSmrg # Accept the current argument as the source file. 2027a966c04fSmrg # The previous "srcfile" becomes the current argument. 2028a966c04fSmrg # 2029a966c04fSmrg lastarg="$srcfile" 2030a966c04fSmrg srcfile="$arg" 2031a966c04fSmrg ;; 2032a966c04fSmrg esac # case $arg 2033a966c04fSmrg ;; 2034a966c04fSmrg esac # case $arg_mode 2035a966c04fSmrg 2036a966c04fSmrg # Aesthetically quote the previous argument. 203797cf2ee2Smrg func_append_quoted base_compile "$lastarg" 2038a966c04fSmrg done # for arg 2039a966c04fSmrg 2040a966c04fSmrg case $arg_mode in 2041a966c04fSmrg arg) 20426e7d3316Smrg func_fatal_error "you must specify an argument for -Xcompile" 2043a966c04fSmrg ;; 2044a966c04fSmrg target) 20456e7d3316Smrg func_fatal_error "you must specify a target with \`-o'" 2046a966c04fSmrg ;; 2047a966c04fSmrg *) 2048a966c04fSmrg # Get the name of the library object. 20496e7d3316Smrg test -z "$libobj" && { 20506e7d3316Smrg func_basename "$srcfile" 20516e7d3316Smrg libobj="$func_basename_result" 20526e7d3316Smrg } 2053a966c04fSmrg ;; 2054a966c04fSmrg esac 2055a966c04fSmrg 2056a966c04fSmrg # Recognize several different file suffixes. 2057a966c04fSmrg # If the user specifies -o file.o, it is replaced with file.lo 2058a966c04fSmrg case $libobj in 20596e7d3316Smrg *.[cCFSifmso] | \ 20606e7d3316Smrg *.ada | *.adb | *.ads | *.asm | \ 20616e7d3316Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 20626e7d3316Smrg *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup) 20636e7d3316Smrg func_xform "$libobj" 20646e7d3316Smrg libobj=$func_xform_result 20656e7d3316Smrg ;; 2066a966c04fSmrg esac 2067a966c04fSmrg 2068a966c04fSmrg case $libobj in 20696e7d3316Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 2070a966c04fSmrg *) 20716e7d3316Smrg func_fatal_error "cannot determine name of library object from \`$libobj'" 2072a966c04fSmrg ;; 2073a966c04fSmrg esac 2074a966c04fSmrg 2075a966c04fSmrg func_infer_tag $base_compile 2076a966c04fSmrg 2077a966c04fSmrg for arg in $later; do 2078a966c04fSmrg case $arg in 20796e7d3316Smrg -shared) 20806e7d3316Smrg test "$build_libtool_libs" != yes && \ 20816e7d3316Smrg func_fatal_configuration "can not build a shared library" 20826e7d3316Smrg build_old_libs=no 20836e7d3316Smrg continue 20846e7d3316Smrg ;; 20856e7d3316Smrg 2086a966c04fSmrg -static) 20876e7d3316Smrg build_libtool_libs=no 2088a966c04fSmrg build_old_libs=yes 2089a966c04fSmrg continue 2090a966c04fSmrg ;; 2091a966c04fSmrg 2092a966c04fSmrg -prefer-pic) 2093a966c04fSmrg pic_mode=yes 2094a966c04fSmrg continue 2095a966c04fSmrg ;; 2096a966c04fSmrg 2097a966c04fSmrg -prefer-non-pic) 2098a966c04fSmrg pic_mode=no 2099a966c04fSmrg continue 2100a966c04fSmrg ;; 2101a966c04fSmrg esac 2102a966c04fSmrg done 2103a966c04fSmrg 21046e7d3316Smrg func_quote_for_eval "$libobj" 21056e7d3316Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 21066e7d3316Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 21076e7d3316Smrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 21086e7d3316Smrg func_dirname_and_basename "$obj" "/" "" 21096e7d3316Smrg objname="$func_basename_result" 21106e7d3316Smrg xdir="$func_dirname_result" 2111a966c04fSmrg lobj=${xdir}$objdir/$objname 2112a966c04fSmrg 21136e7d3316Smrg test -z "$base_compile" && \ 21146e7d3316Smrg func_fatal_help "you must specify a compilation command" 2115a966c04fSmrg 2116a966c04fSmrg # Delete any leftover library objects. 2117a966c04fSmrg if test "$build_old_libs" = yes; then 2118a966c04fSmrg removelist="$obj $lobj $libobj ${libobj}T" 2119a966c04fSmrg else 2120a966c04fSmrg removelist="$lobj $libobj ${libobj}T" 2121a966c04fSmrg fi 2122a966c04fSmrg 2123a966c04fSmrg # On Cygwin there's no "real" PIC flag so we must build both object types 2124a966c04fSmrg case $host_os in 21256e7d3316Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 2126a966c04fSmrg pic_mode=default 2127a966c04fSmrg ;; 2128a966c04fSmrg esac 2129a966c04fSmrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 2130a966c04fSmrg # non-PIC code in shared libraries is not supported 2131a966c04fSmrg pic_mode=default 2132a966c04fSmrg fi 2133a966c04fSmrg 2134a966c04fSmrg # Calculate the filename of the output object if compiler does 2135a966c04fSmrg # not support -o with -c 2136a966c04fSmrg if test "$compiler_c_o" = no; then 21376e7d3316Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 2138a966c04fSmrg lockfile="$output_obj.lock" 2139a966c04fSmrg else 2140a966c04fSmrg output_obj= 2141a966c04fSmrg need_locks=no 2142a966c04fSmrg lockfile= 2143a966c04fSmrg fi 2144a966c04fSmrg 2145a966c04fSmrg # Lock this critical section if it is needed 2146a966c04fSmrg # We use this script file to make the link, it avoids creating a new file 2147a966c04fSmrg if test "$need_locks" = yes; then 21486e7d3316Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 21496e7d3316Smrg func_echo "Waiting for $lockfile to be removed" 2150a966c04fSmrg sleep 2 2151a966c04fSmrg done 2152a966c04fSmrg elif test "$need_locks" = warn; then 2153a966c04fSmrg if test -f "$lockfile"; then 21546e7d3316Smrg $ECHO "\ 2155a966c04fSmrg*** ERROR, $lockfile exists and contains: 2156a966c04fSmrg`cat $lockfile 2>/dev/null` 2157a966c04fSmrg 2158a966c04fSmrgThis indicates that another process is trying to use the same 2159a966c04fSmrgtemporary object file, and libtool could not work around it because 2160a966c04fSmrgyour compiler does not support \`-c' and \`-o' together. If you 2161a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better 2162a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better 2163a966c04fSmrgcompiler." 2164a966c04fSmrg 21656e7d3316Smrg $opt_dry_run || $RM $removelist 2166a966c04fSmrg exit $EXIT_FAILURE 2167a966c04fSmrg fi 216897cf2ee2Smrg func_append removelist " $output_obj" 21696e7d3316Smrg $ECHO "$srcfile" > "$lockfile" 2170a966c04fSmrg fi 2171a966c04fSmrg 21726e7d3316Smrg $opt_dry_run || $RM $removelist 217397cf2ee2Smrg func_append removelist " $lockfile" 21746e7d3316Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 21756e7d3316Smrg 217697cf2ee2Smrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 217797cf2ee2Smrg srcfile=$func_to_tool_file_result 21786e7d3316Smrg func_quote_for_eval "$srcfile" 21796e7d3316Smrg qsrcfile=$func_quote_for_eval_result 2180a966c04fSmrg 2181a966c04fSmrg # Only build a PIC object if we are building libtool libraries. 2182a966c04fSmrg if test "$build_libtool_libs" = yes; then 2183a966c04fSmrg # Without this assignment, base_compile gets emptied. 2184a966c04fSmrg fbsd_hideous_sh_bug=$base_compile 2185a966c04fSmrg 2186a966c04fSmrg if test "$pic_mode" != no; then 2187a966c04fSmrg command="$base_compile $qsrcfile $pic_flag" 2188a966c04fSmrg else 2189a966c04fSmrg # Don't build PIC code 2190a966c04fSmrg command="$base_compile $qsrcfile" 2191a966c04fSmrg fi 2192a966c04fSmrg 21936e7d3316Smrg func_mkdir_p "$xdir$objdir" 2194a966c04fSmrg 2195a966c04fSmrg if test -z "$output_obj"; then 2196a966c04fSmrg # Place PIC objects in $objdir 219797cf2ee2Smrg func_append command " -o $lobj" 2198a966c04fSmrg fi 2199a966c04fSmrg 22006e7d3316Smrg func_show_eval_locale "$command" \ 22016e7d3316Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 2202a966c04fSmrg 2203a966c04fSmrg if test "$need_locks" = warn && 2204a966c04fSmrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 22056e7d3316Smrg $ECHO "\ 2206a966c04fSmrg*** ERROR, $lockfile contains: 2207a966c04fSmrg`cat $lockfile 2>/dev/null` 2208a966c04fSmrg 2209a966c04fSmrgbut it should contain: 2210a966c04fSmrg$srcfile 2211a966c04fSmrg 2212a966c04fSmrgThis indicates that another process is trying to use the same 2213a966c04fSmrgtemporary object file, and libtool could not work around it because 2214a966c04fSmrgyour compiler does not support \`-c' and \`-o' together. If you 2215a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better 2216a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better 2217a966c04fSmrgcompiler." 2218a966c04fSmrg 22196e7d3316Smrg $opt_dry_run || $RM $removelist 2220a966c04fSmrg exit $EXIT_FAILURE 2221a966c04fSmrg fi 2222a966c04fSmrg 2223a966c04fSmrg # Just move the object if needed, then go on to compile the next one 2224a966c04fSmrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 22256e7d3316Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 22266e7d3316Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2227a966c04fSmrg fi 2228a966c04fSmrg 2229a966c04fSmrg # Allow error messages only from the first compilation. 2230a966c04fSmrg if test "$suppress_opt" = yes; then 22316e7d3316Smrg suppress_output=' >/dev/null 2>&1' 2232a966c04fSmrg fi 2233a966c04fSmrg fi 2234a966c04fSmrg 2235a966c04fSmrg # Only build a position-dependent object if we build old libraries. 2236a966c04fSmrg if test "$build_old_libs" = yes; then 2237a966c04fSmrg if test "$pic_mode" != yes; then 2238a966c04fSmrg # Don't build PIC code 22396e7d3316Smrg command="$base_compile $qsrcfile$pie_flag" 2240a966c04fSmrg else 2241a966c04fSmrg command="$base_compile $qsrcfile $pic_flag" 2242a966c04fSmrg fi 2243a966c04fSmrg if test "$compiler_c_o" = yes; then 224497cf2ee2Smrg func_append command " -o $obj" 2245a966c04fSmrg fi 2246a966c04fSmrg 2247a966c04fSmrg # Suppress compiler output if we already did a PIC compilation. 224897cf2ee2Smrg func_append command "$suppress_output" 22496e7d3316Smrg func_show_eval_locale "$command" \ 22506e7d3316Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 2251a966c04fSmrg 2252a966c04fSmrg if test "$need_locks" = warn && 2253a966c04fSmrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 22546e7d3316Smrg $ECHO "\ 2255a966c04fSmrg*** ERROR, $lockfile contains: 2256a966c04fSmrg`cat $lockfile 2>/dev/null` 2257a966c04fSmrg 2258a966c04fSmrgbut it should contain: 2259a966c04fSmrg$srcfile 2260a966c04fSmrg 2261a966c04fSmrgThis indicates that another process is trying to use the same 2262a966c04fSmrgtemporary object file, and libtool could not work around it because 2263a966c04fSmrgyour compiler does not support \`-c' and \`-o' together. If you 2264a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better 2265a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better 2266a966c04fSmrgcompiler." 2267a966c04fSmrg 22686e7d3316Smrg $opt_dry_run || $RM $removelist 2269a966c04fSmrg exit $EXIT_FAILURE 2270a966c04fSmrg fi 2271a966c04fSmrg 2272a966c04fSmrg # Just move the object if needed 2273a966c04fSmrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 22746e7d3316Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 22756e7d3316Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2276a966c04fSmrg fi 2277a966c04fSmrg fi 2278a966c04fSmrg 22796e7d3316Smrg $opt_dry_run || { 22806e7d3316Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 2281a966c04fSmrg 22826e7d3316Smrg # Unlock the critical section if it was locked 22836e7d3316Smrg if test "$need_locks" != no; then 22846e7d3316Smrg removelist=$lockfile 22856e7d3316Smrg $RM "$lockfile" 22866e7d3316Smrg fi 22876e7d3316Smrg } 2288a966c04fSmrg 2289a966c04fSmrg exit $EXIT_SUCCESS 22906e7d3316Smrg} 2291a966c04fSmrg 22926e7d3316Smrg$opt_help || { 229397cf2ee2Smrg test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 22946e7d3316Smrg} 2295a966c04fSmrg 22966e7d3316Smrgfunc_mode_help () 22976e7d3316Smrg{ 22986e7d3316Smrg # We need to display help for each of the modes. 229997cf2ee2Smrg case $opt_mode in 23006e7d3316Smrg "") 23016e7d3316Smrg # Generic help is extracted from the usage comments 23026e7d3316Smrg # at the start of this file. 23036e7d3316Smrg func_help 23046e7d3316Smrg ;; 2305a966c04fSmrg 23066e7d3316Smrg clean) 23076e7d3316Smrg $ECHO \ 23086e7d3316Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 2309a966c04fSmrg 23106e7d3316SmrgRemove files from the build directory. 2311a966c04fSmrg 23126e7d3316SmrgRM is the name of the program to use to delete files associated with each FILE 23136e7d3316Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 23146e7d3316Smrgto RM. 2315a966c04fSmrg 23166e7d3316SmrgIf FILE is a libtool library, object or program, all the files associated 23176e7d3316Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 23186e7d3316Smrg ;; 2319a966c04fSmrg 23206e7d3316Smrg compile) 23216e7d3316Smrg $ECHO \ 23226e7d3316Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 2323a966c04fSmrg 23246e7d3316SmrgCompile a source file into a libtool library object. 2325a966c04fSmrg 23266e7d3316SmrgThis mode accepts the following additional options: 2327a966c04fSmrg 23286e7d3316Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 23296e7d3316Smrg -no-suppress do not suppress compiler output for multiple passes 23306e7d3316Smrg -prefer-pic try to build PIC objects only 23316e7d3316Smrg -prefer-non-pic try to build non-PIC objects only 23326e7d3316Smrg -shared do not build a \`.o' file suitable for static linking 23336e7d3316Smrg -static only build a \`.o' file suitable for static linking 23346e7d3316Smrg -Wc,FLAG pass FLAG directly to the compiler 2335a966c04fSmrg 23366e7d3316SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 23376e7d3316Smrgfrom the given SOURCEFILE. 2338a966c04fSmrg 23396e7d3316SmrgThe output file name is determined by removing the directory component from 23406e7d3316SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 23416e7d3316Smrglibrary object suffix, \`.lo'." 23426e7d3316Smrg ;; 2343a966c04fSmrg 23446e7d3316Smrg execute) 23456e7d3316Smrg $ECHO \ 23466e7d3316Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 2347a966c04fSmrg 23486e7d3316SmrgAutomatically set library path, then run a program. 2349a966c04fSmrg 23506e7d3316SmrgThis mode accepts the following additional options: 2351a966c04fSmrg 23526e7d3316Smrg -dlopen FILE add the directory containing FILE to the library path 2353a966c04fSmrg 23546e7d3316SmrgThis mode sets the library path environment variable according to \`-dlopen' 23556e7d3316Smrgflags. 2356a966c04fSmrg 23576e7d3316SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 23586e7d3316Smrginto their corresponding uninstalled binary, and any of their required library 23596e7d3316Smrgdirectories are added to the library path. 2360a966c04fSmrg 23616e7d3316SmrgThen, COMMAND is executed, with ARGS as arguments." 23626e7d3316Smrg ;; 2363a966c04fSmrg 23646e7d3316Smrg finish) 23656e7d3316Smrg $ECHO \ 23666e7d3316Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 2367a966c04fSmrg 23686e7d3316SmrgComplete the installation of libtool libraries. 2369a966c04fSmrg 23706e7d3316SmrgEach LIBDIR is a directory that contains libtool libraries. 2371a966c04fSmrg 23726e7d3316SmrgThe commands that this mode executes may require superuser privileges. Use 23736e7d3316Smrgthe \`--dry-run' option if you just want to see what would be executed." 23746e7d3316Smrg ;; 2375a966c04fSmrg 23766e7d3316Smrg install) 23776e7d3316Smrg $ECHO \ 23786e7d3316Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 2379a966c04fSmrg 23806e7d3316SmrgInstall executables or libraries. 2381a966c04fSmrg 23826e7d3316SmrgINSTALL-COMMAND is the installation command. The first component should be 23836e7d3316Smrgeither the \`install' or \`cp' program. 2384a966c04fSmrg 23856e7d3316SmrgThe following components of INSTALL-COMMAND are treated specially: 2386a966c04fSmrg 23876e7d3316Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 2388a966c04fSmrg 23896e7d3316SmrgThe rest of the components are interpreted as arguments to that command (only 23906e7d3316SmrgBSD-compatible install options are recognized)." 23916e7d3316Smrg ;; 2392a966c04fSmrg 23936e7d3316Smrg link) 23946e7d3316Smrg $ECHO \ 23956e7d3316Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 2396a966c04fSmrg 23976e7d3316SmrgLink object files or libraries together to form another library, or to 23986e7d3316Smrgcreate an executable program. 2399a966c04fSmrg 24006e7d3316SmrgLINK-COMMAND is a command using the C compiler that you would use to create 24016e7d3316Smrga program from several object files. 2402a966c04fSmrg 24036e7d3316SmrgThe following components of LINK-COMMAND are treated specially: 2404a966c04fSmrg 24056e7d3316Smrg -all-static do not do any dynamic linking at all 24066e7d3316Smrg -avoid-version do not add a version suffix if possible 24076e7d3316Smrg -bindir BINDIR specify path to binaries directory (for systems where 24086e7d3316Smrg libraries must be found in the PATH setting at runtime) 24096e7d3316Smrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 24106e7d3316Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 24116e7d3316Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 24126e7d3316Smrg -export-symbols SYMFILE 24136e7d3316Smrg try to export only the symbols listed in SYMFILE 24146e7d3316Smrg -export-symbols-regex REGEX 24156e7d3316Smrg try to export only the symbols matching REGEX 24166e7d3316Smrg -LLIBDIR search LIBDIR for required installed libraries 24176e7d3316Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 24186e7d3316Smrg -module build a library that can dlopened 24196e7d3316Smrg -no-fast-install disable the fast-install mode 24206e7d3316Smrg -no-install link a not-installable executable 24216e7d3316Smrg -no-undefined declare that a library does not refer to external symbols 24226e7d3316Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 24236e7d3316Smrg -objectlist FILE Use a list of object files found in FILE to specify objects 24246e7d3316Smrg -precious-files-regex REGEX 24256e7d3316Smrg don't remove output files matching REGEX 24266e7d3316Smrg -release RELEASE specify package release information 24276e7d3316Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 24286e7d3316Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 24296e7d3316Smrg -shared only do dynamic linking of libtool libraries 24306e7d3316Smrg -shrext SUFFIX override the standard shared library file extension 24316e7d3316Smrg -static do not do any dynamic linking of uninstalled libtool libraries 24326e7d3316Smrg -static-libtool-libs 24336e7d3316Smrg do not do any dynamic linking of libtool libraries 24346e7d3316Smrg -version-info CURRENT[:REVISION[:AGE]] 24356e7d3316Smrg specify library version info [each variable defaults to 0] 24366e7d3316Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 24376e7d3316Smrg -Wc,FLAG 24386e7d3316Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 24396e7d3316Smrg -Wl,FLAG 24406e7d3316Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 24416e7d3316Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 2442a966c04fSmrg 24436e7d3316SmrgAll other options (arguments beginning with \`-') are ignored. 2444a966c04fSmrg 24456e7d3316SmrgEvery other argument is treated as a filename. Files ending in \`.la' are 24466e7d3316Smrgtreated as uninstalled libtool libraries, other files are standard or library 24476e7d3316Smrgobject files. 2448a966c04fSmrg 24496e7d3316SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 24506e7d3316Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 24516e7d3316Smrgrequired, except when creating a convenience library. 2452a966c04fSmrg 24536e7d3316SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 24546e7d3316Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 24552e2dd055Smrg 24566e7d3316SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 24576e7d3316Smrgis created, otherwise an executable program is created." 24586e7d3316Smrg ;; 2459a966c04fSmrg 24606e7d3316Smrg uninstall) 24616e7d3316Smrg $ECHO \ 24626e7d3316Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 2463a966c04fSmrg 24646e7d3316SmrgRemove libraries from an installation directory. 2465a966c04fSmrg 24666e7d3316SmrgRM is the name of the program to use to delete files associated with each FILE 24676e7d3316Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 24686e7d3316Smrgto RM. 2469a966c04fSmrg 24706e7d3316SmrgIf FILE is a libtool library, all the files associated with it are deleted. 24716e7d3316SmrgOtherwise, only FILE itself is deleted using RM." 24726e7d3316Smrg ;; 2473a966c04fSmrg 24746e7d3316Smrg *) 247597cf2ee2Smrg func_fatal_help "invalid operation mode \`$opt_mode'" 24766e7d3316Smrg ;; 24776e7d3316Smrg esac 2478a966c04fSmrg 24796e7d3316Smrg echo 24806e7d3316Smrg $ECHO "Try \`$progname --help' for more information about other modes." 24816e7d3316Smrg} 2482a966c04fSmrg 24836e7d3316Smrg# Now that we've collected a possible --mode arg, show help if necessary 24846e7d3316Smrgif $opt_help; then 24856e7d3316Smrg if test "$opt_help" = :; then 24866e7d3316Smrg func_mode_help 24876e7d3316Smrg else 24886e7d3316Smrg { 24896e7d3316Smrg func_help noexit 249097cf2ee2Smrg for opt_mode in compile link execute install finish uninstall clean; do 24916e7d3316Smrg func_mode_help 24926e7d3316Smrg done 24936e7d3316Smrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 24946e7d3316Smrg { 24956e7d3316Smrg func_help noexit 249697cf2ee2Smrg for opt_mode in compile link execute install finish uninstall clean; do 24976e7d3316Smrg echo 24986e7d3316Smrg func_mode_help 24996e7d3316Smrg done 25006e7d3316Smrg } | 25016e7d3316Smrg sed '1d 25026e7d3316Smrg /^When reporting/,/^Report/{ 25036e7d3316Smrg H 25046e7d3316Smrg d 25056e7d3316Smrg } 25066e7d3316Smrg $x 25076e7d3316Smrg /information about other modes/d 25086e7d3316Smrg /more detailed .*MODE/d 25096e7d3316Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 25106e7d3316Smrg fi 25116e7d3316Smrg exit $? 25126e7d3316Smrgfi 2513a966c04fSmrg 2514a966c04fSmrg 25156e7d3316Smrg# func_mode_execute arg... 25166e7d3316Smrgfunc_mode_execute () 25176e7d3316Smrg{ 25186e7d3316Smrg $opt_debug 25196e7d3316Smrg # The first argument is the command name. 25206e7d3316Smrg cmd="$nonopt" 25216e7d3316Smrg test -z "$cmd" && \ 25226e7d3316Smrg func_fatal_help "you must specify a COMMAND" 2523a966c04fSmrg 25246e7d3316Smrg # Handle -dlopen flags immediately. 252597cf2ee2Smrg for file in $opt_dlopen; do 25266e7d3316Smrg test -f "$file" \ 25276e7d3316Smrg || func_fatal_help "\`$file' is not a file" 2528a966c04fSmrg 25296e7d3316Smrg dir= 25306e7d3316Smrg case $file in 25316e7d3316Smrg *.la) 253297cf2ee2Smrg func_resolve_sysroot "$file" 253397cf2ee2Smrg file=$func_resolve_sysroot_result 253497cf2ee2Smrg 25356e7d3316Smrg # Check to see that this really is a libtool archive. 25366e7d3316Smrg func_lalib_unsafe_p "$file" \ 25376e7d3316Smrg || func_fatal_help "\`$lib' is not a valid libtool archive" 2538a966c04fSmrg 25396e7d3316Smrg # Read the libtool library. 25406e7d3316Smrg dlname= 25416e7d3316Smrg library_names= 25426e7d3316Smrg func_source "$file" 2543a966c04fSmrg 25446e7d3316Smrg # Skip this library if it cannot be dlopened. 25456e7d3316Smrg if test -z "$dlname"; then 25466e7d3316Smrg # Warn if it was a shared library. 25476e7d3316Smrg test -n "$library_names" && \ 25486e7d3316Smrg func_warning "\`$file' was not linked with \`-export-dynamic'" 25496e7d3316Smrg continue 25506e7d3316Smrg fi 2551a966c04fSmrg 25526e7d3316Smrg func_dirname "$file" "" "." 25536e7d3316Smrg dir="$func_dirname_result" 2554a966c04fSmrg 25556e7d3316Smrg if test -f "$dir/$objdir/$dlname"; then 255697cf2ee2Smrg func_append dir "/$objdir" 25576e7d3316Smrg else 25586e7d3316Smrg if test ! -f "$dir/$dlname"; then 25596e7d3316Smrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 25606e7d3316Smrg fi 25616e7d3316Smrg fi 2562a966c04fSmrg ;; 2563a966c04fSmrg 25646e7d3316Smrg *.lo) 25656e7d3316Smrg # Just add the directory containing the .lo file. 25666e7d3316Smrg func_dirname "$file" "" "." 25676e7d3316Smrg dir="$func_dirname_result" 2568a966c04fSmrg ;; 25696e7d3316Smrg 25706e7d3316Smrg *) 25716e7d3316Smrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 2572a966c04fSmrg continue 2573a966c04fSmrg ;; 25746e7d3316Smrg esac 2575a966c04fSmrg 25766e7d3316Smrg # Get the absolute pathname. 25776e7d3316Smrg absdir=`cd "$dir" && pwd` 25786e7d3316Smrg test -n "$absdir" && dir="$absdir" 2579a966c04fSmrg 25806e7d3316Smrg # Now add the directory to shlibpath_var. 25816e7d3316Smrg if eval "test -z \"\$$shlibpath_var\""; then 25826e7d3316Smrg eval "$shlibpath_var=\"\$dir\"" 25836e7d3316Smrg else 25846e7d3316Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 25856e7d3316Smrg fi 25866e7d3316Smrg done 2587a966c04fSmrg 25886e7d3316Smrg # This variable tells wrapper scripts just to set shlibpath_var 25896e7d3316Smrg # rather than running their programs. 25906e7d3316Smrg libtool_execute_magic="$magic" 2591a966c04fSmrg 25926e7d3316Smrg # Check if any of the arguments is a wrapper script. 25936e7d3316Smrg args= 25946e7d3316Smrg for file 25956e7d3316Smrg do 25966e7d3316Smrg case $file in 25976e7d3316Smrg -* | *.la | *.lo ) ;; 25986e7d3316Smrg *) 25996e7d3316Smrg # Do a test to see if this is really a libtool program. 26006e7d3316Smrg if func_ltwrapper_script_p "$file"; then 26016e7d3316Smrg func_source "$file" 26026e7d3316Smrg # Transform arg to wrapped name. 26036e7d3316Smrg file="$progdir/$program" 26046e7d3316Smrg elif func_ltwrapper_executable_p "$file"; then 26056e7d3316Smrg func_ltwrapper_scriptname "$file" 26066e7d3316Smrg func_source "$func_ltwrapper_scriptname_result" 26076e7d3316Smrg # Transform arg to wrapped name. 26086e7d3316Smrg file="$progdir/$program" 26096e7d3316Smrg fi 2610a966c04fSmrg ;; 26116e7d3316Smrg esac 26126e7d3316Smrg # Quote arguments (to preserve shell metacharacters). 261397cf2ee2Smrg func_append_quoted args "$file" 26146e7d3316Smrg done 2615a966c04fSmrg 26166e7d3316Smrg if test "X$opt_dry_run" = Xfalse; then 26176e7d3316Smrg if test -n "$shlibpath_var"; then 26186e7d3316Smrg # Export the shlibpath_var. 26196e7d3316Smrg eval "export $shlibpath_var" 26206e7d3316Smrg fi 2621a966c04fSmrg 26226e7d3316Smrg # Restore saved environment variables 26236e7d3316Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 26246e7d3316Smrg do 26256e7d3316Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 26266e7d3316Smrg $lt_var=\$save_$lt_var; export $lt_var 26276e7d3316Smrg else 26286e7d3316Smrg $lt_unset $lt_var 26296e7d3316Smrg fi" 26306e7d3316Smrg done 2631a966c04fSmrg 26326e7d3316Smrg # Now prepare to actually exec the command. 26336e7d3316Smrg exec_cmd="\$cmd$args" 26346e7d3316Smrg else 26356e7d3316Smrg # Display what would be done. 26366e7d3316Smrg if test -n "$shlibpath_var"; then 26376e7d3316Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 26386e7d3316Smrg echo "export $shlibpath_var" 26396e7d3316Smrg fi 26406e7d3316Smrg $ECHO "$cmd$args" 26416e7d3316Smrg exit $EXIT_SUCCESS 26426e7d3316Smrg fi 26436e7d3316Smrg} 2644a966c04fSmrg 264597cf2ee2Smrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 2646a966c04fSmrg 2647a966c04fSmrg 26486e7d3316Smrg# func_mode_finish arg... 26496e7d3316Smrgfunc_mode_finish () 26506e7d3316Smrg{ 26516e7d3316Smrg $opt_debug 265297cf2ee2Smrg libs= 265397cf2ee2Smrg libdirs= 26546e7d3316Smrg admincmds= 2655a966c04fSmrg 265697cf2ee2Smrg for opt in "$nonopt" ${1+"$@"} 265797cf2ee2Smrg do 265897cf2ee2Smrg if test -d "$opt"; then 265997cf2ee2Smrg func_append libdirs " $opt" 266097cf2ee2Smrg 266197cf2ee2Smrg elif test -f "$opt"; then 266297cf2ee2Smrg if func_lalib_unsafe_p "$opt"; then 266397cf2ee2Smrg func_append libs " $opt" 266497cf2ee2Smrg else 266597cf2ee2Smrg func_warning "\`$opt' is not a valid libtool archive" 266697cf2ee2Smrg fi 266797cf2ee2Smrg 266897cf2ee2Smrg else 266997cf2ee2Smrg func_fatal_error "invalid argument \`$opt'" 267097cf2ee2Smrg fi 267197cf2ee2Smrg done 267297cf2ee2Smrg 267397cf2ee2Smrg if test -n "$libs"; then 267497cf2ee2Smrg if test -n "$lt_sysroot"; then 267597cf2ee2Smrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 267697cf2ee2Smrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 267797cf2ee2Smrg else 267897cf2ee2Smrg sysroot_cmd= 267997cf2ee2Smrg fi 268097cf2ee2Smrg 268197cf2ee2Smrg # Remove sysroot references 268297cf2ee2Smrg if $opt_dry_run; then 268397cf2ee2Smrg for lib in $libs; do 268497cf2ee2Smrg echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 268597cf2ee2Smrg done 268697cf2ee2Smrg else 268797cf2ee2Smrg tmpdir=`func_mktempdir` 268897cf2ee2Smrg for lib in $libs; do 268997cf2ee2Smrg sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 269097cf2ee2Smrg > $tmpdir/tmp-la 269197cf2ee2Smrg mv -f $tmpdir/tmp-la $lib 269297cf2ee2Smrg done 269397cf2ee2Smrg ${RM}r "$tmpdir" 269497cf2ee2Smrg fi 269597cf2ee2Smrg fi 2696a966c04fSmrg 269797cf2ee2Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 26986e7d3316Smrg for libdir in $libdirs; do 26996e7d3316Smrg if test -n "$finish_cmds"; then 27006e7d3316Smrg # Do each command in the finish commands. 27016e7d3316Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 27026e7d3316Smrg'"$cmd"'"' 27036e7d3316Smrg fi 27046e7d3316Smrg if test -n "$finish_eval"; then 27056e7d3316Smrg # Do the single finish_eval. 27066e7d3316Smrg eval cmds=\"$finish_eval\" 270797cf2ee2Smrg $opt_dry_run || eval "$cmds" || func_append admincmds " 27086e7d3316Smrg $cmds" 27096e7d3316Smrg fi 27106e7d3316Smrg done 27116e7d3316Smrg fi 2712a966c04fSmrg 27136e7d3316Smrg # Exit here if they wanted silent mode. 27146e7d3316Smrg $opt_silent && exit $EXIT_SUCCESS 2715a966c04fSmrg 271697cf2ee2Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 271797cf2ee2Smrg echo "----------------------------------------------------------------------" 271897cf2ee2Smrg echo "Libraries have been installed in:" 271997cf2ee2Smrg for libdir in $libdirs; do 272097cf2ee2Smrg $ECHO " $libdir" 272197cf2ee2Smrg done 272297cf2ee2Smrg echo 272397cf2ee2Smrg echo "If you ever happen to want to link against installed libraries" 272497cf2ee2Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 272597cf2ee2Smrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 272697cf2ee2Smrg echo "flag during linking and do at least one of the following:" 272797cf2ee2Smrg if test -n "$shlibpath_var"; then 272897cf2ee2Smrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 272997cf2ee2Smrg echo " during execution" 273097cf2ee2Smrg fi 273197cf2ee2Smrg if test -n "$runpath_var"; then 273297cf2ee2Smrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 273397cf2ee2Smrg echo " during linking" 273497cf2ee2Smrg fi 273597cf2ee2Smrg if test -n "$hardcode_libdir_flag_spec"; then 273697cf2ee2Smrg libdir=LIBDIR 273797cf2ee2Smrg eval flag=\"$hardcode_libdir_flag_spec\" 2738a966c04fSmrg 273997cf2ee2Smrg $ECHO " - use the \`$flag' linker flag" 274097cf2ee2Smrg fi 274197cf2ee2Smrg if test -n "$admincmds"; then 274297cf2ee2Smrg $ECHO " - have your system administrator run these commands:$admincmds" 274397cf2ee2Smrg fi 274497cf2ee2Smrg if test -f /etc/ld.so.conf; then 274597cf2ee2Smrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 274697cf2ee2Smrg fi 274797cf2ee2Smrg echo 2748a966c04fSmrg 274997cf2ee2Smrg echo "See any operating system documentation about shared libraries for" 275097cf2ee2Smrg case $host in 275197cf2ee2Smrg solaris2.[6789]|solaris2.1[0-9]) 275297cf2ee2Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 275397cf2ee2Smrg echo "pages." 275497cf2ee2Smrg ;; 275597cf2ee2Smrg *) 275697cf2ee2Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 275797cf2ee2Smrg ;; 275897cf2ee2Smrg esac 275997cf2ee2Smrg echo "----------------------------------------------------------------------" 276097cf2ee2Smrg fi 27616e7d3316Smrg exit $EXIT_SUCCESS 27626e7d3316Smrg} 2763a966c04fSmrg 276497cf2ee2Smrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 2765a966c04fSmrg 2766a966c04fSmrg 27676e7d3316Smrg# func_mode_install arg... 27686e7d3316Smrgfunc_mode_install () 27696e7d3316Smrg{ 27706e7d3316Smrg $opt_debug 27716e7d3316Smrg # There may be an optional sh(1) argument at the beginning of 27726e7d3316Smrg # install_prog (especially on Windows NT). 27736e7d3316Smrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 27746e7d3316Smrg # Allow the use of GNU shtool's install command. 27756e7d3316Smrg case $nonopt in *shtool*) :;; *) false;; esac; then 27766e7d3316Smrg # Aesthetically quote it. 27776e7d3316Smrg func_quote_for_eval "$nonopt" 27786e7d3316Smrg install_prog="$func_quote_for_eval_result " 27796e7d3316Smrg arg=$1 27806e7d3316Smrg shift 27816e7d3316Smrg else 27826e7d3316Smrg install_prog= 27836e7d3316Smrg arg=$nonopt 27846e7d3316Smrg fi 2785a966c04fSmrg 27866e7d3316Smrg # The real first argument should be the name of the installation program. 27876e7d3316Smrg # Aesthetically quote it. 27886e7d3316Smrg func_quote_for_eval "$arg" 278997cf2ee2Smrg func_append install_prog "$func_quote_for_eval_result" 27906e7d3316Smrg install_shared_prog=$install_prog 27916e7d3316Smrg case " $install_prog " in 27926e7d3316Smrg *[\\\ /]cp\ *) install_cp=: ;; 27936e7d3316Smrg *) install_cp=false ;; 27946e7d3316Smrg esac 2795a966c04fSmrg 27966e7d3316Smrg # We need to accept at least all the BSD install flags. 27976e7d3316Smrg dest= 27986e7d3316Smrg files= 27996e7d3316Smrg opts= 28006e7d3316Smrg prev= 28016e7d3316Smrg install_type= 28026e7d3316Smrg isdir=no 28036e7d3316Smrg stripme= 28046e7d3316Smrg no_mode=: 28056e7d3316Smrg for arg 28066e7d3316Smrg do 28076e7d3316Smrg arg2= 28086e7d3316Smrg if test -n "$dest"; then 280997cf2ee2Smrg func_append files " $dest" 28106e7d3316Smrg dest=$arg 2811a966c04fSmrg continue 28126e7d3316Smrg fi 2813a966c04fSmrg 28146e7d3316Smrg case $arg in 28156e7d3316Smrg -d) isdir=yes ;; 28166e7d3316Smrg -f) 28176e7d3316Smrg if $install_cp; then :; else 28186e7d3316Smrg prev=$arg 2819a966c04fSmrg fi 28206e7d3316Smrg ;; 28216e7d3316Smrg -g | -m | -o) 28226e7d3316Smrg prev=$arg 28236e7d3316Smrg ;; 28246e7d3316Smrg -s) 28256e7d3316Smrg stripme=" -s" 2826a966c04fSmrg continue 2827a966c04fSmrg ;; 28286e7d3316Smrg -*) 28296e7d3316Smrg ;; 2830a966c04fSmrg *) 28316e7d3316Smrg # If the previous option needed an argument, then skip it. 28326e7d3316Smrg if test -n "$prev"; then 28336e7d3316Smrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 28346e7d3316Smrg arg2=$install_override_mode 28356e7d3316Smrg no_mode=false 28366e7d3316Smrg fi 28376e7d3316Smrg prev= 28386e7d3316Smrg else 28396e7d3316Smrg dest=$arg 28406e7d3316Smrg continue 28416e7d3316Smrg fi 2842a966c04fSmrg ;; 28436e7d3316Smrg esac 2844a966c04fSmrg 28456e7d3316Smrg # Aesthetically quote the argument. 28466e7d3316Smrg func_quote_for_eval "$arg" 284797cf2ee2Smrg func_append install_prog " $func_quote_for_eval_result" 28486e7d3316Smrg if test -n "$arg2"; then 28496e7d3316Smrg func_quote_for_eval "$arg2" 2850a966c04fSmrg fi 285197cf2ee2Smrg func_append install_shared_prog " $func_quote_for_eval_result" 28526e7d3316Smrg done 2853a966c04fSmrg 28546e7d3316Smrg test -z "$install_prog" && \ 28556e7d3316Smrg func_fatal_help "you must specify an install program" 2856a966c04fSmrg 28576e7d3316Smrg test -n "$prev" && \ 28586e7d3316Smrg func_fatal_help "the \`$prev' option requires an argument" 2859a966c04fSmrg 28606e7d3316Smrg if test -n "$install_override_mode" && $no_mode; then 28616e7d3316Smrg if $install_cp; then :; else 28626e7d3316Smrg func_quote_for_eval "$install_override_mode" 286397cf2ee2Smrg func_append install_shared_prog " -m $func_quote_for_eval_result" 28646e7d3316Smrg fi 2865a966c04fSmrg fi 2866a966c04fSmrg 28676e7d3316Smrg if test -z "$files"; then 28686e7d3316Smrg if test -z "$dest"; then 28696e7d3316Smrg func_fatal_help "no file or destination specified" 28706e7d3316Smrg else 28716e7d3316Smrg func_fatal_help "you must specify a destination" 2872a966c04fSmrg fi 2873a966c04fSmrg fi 2874a966c04fSmrg 28756e7d3316Smrg # Strip any trailing slash from the destination. 28766e7d3316Smrg func_stripname '' '/' "$dest" 28776e7d3316Smrg dest=$func_stripname_result 2878a966c04fSmrg 28796e7d3316Smrg # Check to see that the destination is a directory. 28806e7d3316Smrg test -d "$dest" && isdir=yes 28816e7d3316Smrg if test "$isdir" = yes; then 28826e7d3316Smrg destdir="$dest" 28836e7d3316Smrg destname= 28846e7d3316Smrg else 28856e7d3316Smrg func_dirname_and_basename "$dest" "" "." 28866e7d3316Smrg destdir="$func_dirname_result" 28876e7d3316Smrg destname="$func_basename_result" 28886e7d3316Smrg 28896e7d3316Smrg # Not a directory, so check to see that there is only one file specified. 28906e7d3316Smrg set dummy $files; shift 28916e7d3316Smrg test "$#" -gt 1 && \ 28926e7d3316Smrg func_fatal_help "\`$dest' is not a directory" 28936e7d3316Smrg fi 28946e7d3316Smrg case $destdir in 28956e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 2896a966c04fSmrg *) 28976e7d3316Smrg for file in $files; do 28986e7d3316Smrg case $file in 28996e7d3316Smrg *.lo) ;; 29006e7d3316Smrg *) 29016e7d3316Smrg func_fatal_help "\`$destdir' must be an absolute directory name" 29026e7d3316Smrg ;; 29036e7d3316Smrg esac 29046e7d3316Smrg done 2905a966c04fSmrg ;; 2906a966c04fSmrg esac 2907a966c04fSmrg 29086e7d3316Smrg # This variable tells wrapper scripts just to set variables rather 29096e7d3316Smrg # than running their programs. 29106e7d3316Smrg libtool_install_magic="$magic" 2911a966c04fSmrg 29126e7d3316Smrg staticlibs= 29136e7d3316Smrg future_libdirs= 29146e7d3316Smrg current_libdirs= 29156e7d3316Smrg for file in $files; do 2916a966c04fSmrg 29176e7d3316Smrg # Do each installation. 29186e7d3316Smrg case $file in 29196e7d3316Smrg *.$libext) 29206e7d3316Smrg # Do the static libraries later. 292197cf2ee2Smrg func_append staticlibs " $file" 29226e7d3316Smrg ;; 29236e7d3316Smrg 29246e7d3316Smrg *.la) 292597cf2ee2Smrg func_resolve_sysroot "$file" 292697cf2ee2Smrg file=$func_resolve_sysroot_result 292797cf2ee2Smrg 29286e7d3316Smrg # Check to see that this really is a libtool archive. 29296e7d3316Smrg func_lalib_unsafe_p "$file" \ 29306e7d3316Smrg || func_fatal_help "\`$file' is not a valid libtool archive" 29316e7d3316Smrg 29326e7d3316Smrg library_names= 29336e7d3316Smrg old_library= 29346e7d3316Smrg relink_command= 29356e7d3316Smrg func_source "$file" 29366e7d3316Smrg 29376e7d3316Smrg # Add the libdir to current_libdirs if it is the destination. 29386e7d3316Smrg if test "X$destdir" = "X$libdir"; then 29396e7d3316Smrg case "$current_libdirs " in 29406e7d3316Smrg *" $libdir "*) ;; 294197cf2ee2Smrg *) func_append current_libdirs " $libdir" ;; 2942a966c04fSmrg esac 29436e7d3316Smrg else 29446e7d3316Smrg # Note the libdir as a future libdir. 29456e7d3316Smrg case "$future_libdirs " in 29466e7d3316Smrg *" $libdir "*) ;; 294797cf2ee2Smrg *) func_append future_libdirs " $libdir" ;; 29486e7d3316Smrg esac 29496e7d3316Smrg fi 2950a966c04fSmrg 29516e7d3316Smrg func_dirname "$file" "/" "" 29526e7d3316Smrg dir="$func_dirname_result" 295397cf2ee2Smrg func_append dir "$objdir" 29546e7d3316Smrg 29556e7d3316Smrg if test -n "$relink_command"; then 29566e7d3316Smrg # Determine the prefix the user has applied to our future dir. 29576e7d3316Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 29586e7d3316Smrg 29596e7d3316Smrg # Don't allow the user to place us outside of our expected 29606e7d3316Smrg # location b/c this prevents finding dependent libraries that 29616e7d3316Smrg # are installed to the same prefix. 29626e7d3316Smrg # At present, this check doesn't affect windows .dll's that 29636e7d3316Smrg # are installed into $libdir/../bin (currently, that works fine) 29646e7d3316Smrg # but it's something to keep an eye on. 29656e7d3316Smrg test "$inst_prefix_dir" = "$destdir" && \ 29666e7d3316Smrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 29676e7d3316Smrg 29686e7d3316Smrg if test -n "$inst_prefix_dir"; then 29696e7d3316Smrg # Stick the inst_prefix_dir data into the link command. 29706e7d3316Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 29716e7d3316Smrg else 29726e7d3316Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 29736e7d3316Smrg fi 29746e7d3316Smrg 29756e7d3316Smrg func_warning "relinking \`$file'" 29766e7d3316Smrg func_show_eval "$relink_command" \ 29776e7d3316Smrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 29786e7d3316Smrg fi 29796e7d3316Smrg 29806e7d3316Smrg # See the names of the shared library. 29816e7d3316Smrg set dummy $library_names; shift 29826e7d3316Smrg if test -n "$1"; then 29836e7d3316Smrg realname="$1" 29846e7d3316Smrg shift 29856e7d3316Smrg 29866e7d3316Smrg srcname="$realname" 29876e7d3316Smrg test -n "$relink_command" && srcname="$realname"T 29886e7d3316Smrg 29896e7d3316Smrg # Install the shared library and build the symlinks. 29906e7d3316Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 29916e7d3316Smrg 'exit $?' 29926e7d3316Smrg tstripme="$stripme" 29936e7d3316Smrg case $host_os in 29946e7d3316Smrg cygwin* | mingw* | pw32* | cegcc*) 29956e7d3316Smrg case $realname in 29966e7d3316Smrg *.dll.a) 29976e7d3316Smrg tstripme="" 29986e7d3316Smrg ;; 29996e7d3316Smrg esac 3000a966c04fSmrg ;; 3001a966c04fSmrg esac 30026e7d3316Smrg if test -n "$tstripme" && test -n "$striplib"; then 30036e7d3316Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 30046e7d3316Smrg fi 30056e7d3316Smrg 30066e7d3316Smrg if test "$#" -gt 0; then 30076e7d3316Smrg # Delete the old symlinks, and create new ones. 30086e7d3316Smrg # Try `ln -sf' first, because the `ln' binary might depend on 30096e7d3316Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 30106e7d3316Smrg # so we also need to try rm && ln -s. 30116e7d3316Smrg for linkname 30126e7d3316Smrg do 30136e7d3316Smrg test "$linkname" != "$realname" \ 30146e7d3316Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 30156e7d3316Smrg done 30166e7d3316Smrg fi 30176e7d3316Smrg 30186e7d3316Smrg # Do each command in the postinstall commands. 30196e7d3316Smrg lib="$destdir/$realname" 30206e7d3316Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 30216e7d3316Smrg fi 30226e7d3316Smrg 30236e7d3316Smrg # Install the pseudo-library for information purposes. 30246e7d3316Smrg func_basename "$file" 30256e7d3316Smrg name="$func_basename_result" 30266e7d3316Smrg instname="$dir/$name"i 30276e7d3316Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 30286e7d3316Smrg 30296e7d3316Smrg # Maybe install the static library, too. 303097cf2ee2Smrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 3031a966c04fSmrg ;; 30326e7d3316Smrg 30336e7d3316Smrg *.lo) 30346e7d3316Smrg # Install (i.e. copy) a libtool object. 30356e7d3316Smrg 30366e7d3316Smrg # Figure out destination file name, if it wasn't already specified. 30376e7d3316Smrg if test -n "$destname"; then 30386e7d3316Smrg destfile="$destdir/$destname" 30396e7d3316Smrg else 30406e7d3316Smrg func_basename "$file" 30416e7d3316Smrg destfile="$func_basename_result" 30426e7d3316Smrg destfile="$destdir/$destfile" 30436e7d3316Smrg fi 30446e7d3316Smrg 30456e7d3316Smrg # Deduce the name of the destination old-style object file. 30466e7d3316Smrg case $destfile in 30476e7d3316Smrg *.lo) 30486e7d3316Smrg func_lo2o "$destfile" 30496e7d3316Smrg staticdest=$func_lo2o_result 3050a966c04fSmrg ;; 30516e7d3316Smrg *.$objext) 30526e7d3316Smrg staticdest="$destfile" 30536e7d3316Smrg destfile= 3054a966c04fSmrg ;; 30556e7d3316Smrg *) 30566e7d3316Smrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 3057a966c04fSmrg ;; 30586e7d3316Smrg esac 30596e7d3316Smrg 30606e7d3316Smrg # Install the libtool object if requested. 30616e7d3316Smrg test -n "$destfile" && \ 30626e7d3316Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 30636e7d3316Smrg 30646e7d3316Smrg # Install the old object if enabled. 30656e7d3316Smrg if test "$build_old_libs" = yes; then 30666e7d3316Smrg # Deduce the name of the old-style object file. 30676e7d3316Smrg func_lo2o "$file" 30686e7d3316Smrg staticobj=$func_lo2o_result 30696e7d3316Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 3070a966c04fSmrg fi 30716e7d3316Smrg exit $EXIT_SUCCESS 30726e7d3316Smrg ;; 3073a966c04fSmrg 30746e7d3316Smrg *) 30756e7d3316Smrg # Figure out destination file name, if it wasn't already specified. 30766e7d3316Smrg if test -n "$destname"; then 30776e7d3316Smrg destfile="$destdir/$destname" 3078a966c04fSmrg else 30796e7d3316Smrg func_basename "$file" 30806e7d3316Smrg destfile="$func_basename_result" 30816e7d3316Smrg destfile="$destdir/$destfile" 3082a966c04fSmrg fi 3083a966c04fSmrg 30846e7d3316Smrg # If the file is missing, and there is a .exe on the end, strip it 30856e7d3316Smrg # because it is most likely a libtool script we actually want to 30866e7d3316Smrg # install 30876e7d3316Smrg stripped_ext="" 30886e7d3316Smrg case $file in 30896e7d3316Smrg *.exe) 30906e7d3316Smrg if test ! -f "$file"; then 30916e7d3316Smrg func_stripname '' '.exe' "$file" 30926e7d3316Smrg file=$func_stripname_result 30936e7d3316Smrg stripped_ext=".exe" 30946e7d3316Smrg fi 30956e7d3316Smrg ;; 30966e7d3316Smrg esac 3097a966c04fSmrg 30986e7d3316Smrg # Do a test to see if this is really a libtool program. 30996e7d3316Smrg case $host in 31006e7d3316Smrg *cygwin* | *mingw*) 31016e7d3316Smrg if func_ltwrapper_executable_p "$file"; then 31026e7d3316Smrg func_ltwrapper_scriptname "$file" 31036e7d3316Smrg wrapper=$func_ltwrapper_scriptname_result 31046e7d3316Smrg else 31056e7d3316Smrg func_stripname '' '.exe' "$file" 31066e7d3316Smrg wrapper=$func_stripname_result 31076e7d3316Smrg fi 31086e7d3316Smrg ;; 31096e7d3316Smrg *) 31106e7d3316Smrg wrapper=$file 31116e7d3316Smrg ;; 31126e7d3316Smrg esac 31136e7d3316Smrg if func_ltwrapper_script_p "$wrapper"; then 31146e7d3316Smrg notinst_deplibs= 31156e7d3316Smrg relink_command= 3116a966c04fSmrg 31176e7d3316Smrg func_source "$wrapper" 3118a966c04fSmrg 31196e7d3316Smrg # Check the variables that should have been set. 31206e7d3316Smrg test -z "$generated_by_libtool_version" && \ 31216e7d3316Smrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 3122a966c04fSmrg 31236e7d3316Smrg finalize=yes 31246e7d3316Smrg for lib in $notinst_deplibs; do 31256e7d3316Smrg # Check to see that each library is installed. 31266e7d3316Smrg libdir= 31276e7d3316Smrg if test -f "$lib"; then 31286e7d3316Smrg func_source "$lib" 3129a966c04fSmrg fi 31306e7d3316Smrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 31316e7d3316Smrg if test -n "$libdir" && test ! -f "$libfile"; then 31326e7d3316Smrg func_warning "\`$lib' has not been installed in \`$libdir'" 31336e7d3316Smrg finalize=no 31346e7d3316Smrg fi 31356e7d3316Smrg done 3136a966c04fSmrg 31376e7d3316Smrg relink_command= 31386e7d3316Smrg func_source "$wrapper" 3139a966c04fSmrg 31406e7d3316Smrg outputname= 31416e7d3316Smrg if test "$fast_install" = no && test -n "$relink_command"; then 31426e7d3316Smrg $opt_dry_run || { 31436e7d3316Smrg if test "$finalize" = yes; then 31446e7d3316Smrg tmpdir=`func_mktempdir` 31456e7d3316Smrg func_basename "$file$stripped_ext" 31466e7d3316Smrg file="$func_basename_result" 31476e7d3316Smrg outputname="$tmpdir/$file" 31486e7d3316Smrg # Replace the output file specification. 31496e7d3316Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 31506e7d3316Smrg 31516e7d3316Smrg $opt_silent || { 31526e7d3316Smrg func_quote_for_expand "$relink_command" 31536e7d3316Smrg eval "func_echo $func_quote_for_expand_result" 31546e7d3316Smrg } 31556e7d3316Smrg if eval "$relink_command"; then : 31566e7d3316Smrg else 31576e7d3316Smrg func_error "error: relink \`$file' with the above command before installing it" 31586e7d3316Smrg $opt_dry_run || ${RM}r "$tmpdir" 31596e7d3316Smrg continue 31606e7d3316Smrg fi 31616e7d3316Smrg file="$outputname" 31626e7d3316Smrg else 31636e7d3316Smrg func_warning "cannot relink \`$file'" 31646e7d3316Smrg fi 31656e7d3316Smrg } 3166a966c04fSmrg else 31676e7d3316Smrg # Install the binary that we compiled earlier. 31686e7d3316Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 3169a966c04fSmrg fi 31706e7d3316Smrg fi 3171a966c04fSmrg 31726e7d3316Smrg # remove .exe since cygwin /usr/bin/install will append another 31736e7d3316Smrg # one anyway 31746e7d3316Smrg case $install_prog,$host in 31756e7d3316Smrg */usr/bin/install*,*cygwin*) 31766e7d3316Smrg case $file:$destfile in 31776e7d3316Smrg *.exe:*.exe) 31786e7d3316Smrg # this is ok 31796e7d3316Smrg ;; 31806e7d3316Smrg *.exe:*) 31816e7d3316Smrg destfile=$destfile.exe 31826e7d3316Smrg ;; 31836e7d3316Smrg *:*.exe) 31846e7d3316Smrg func_stripname '' '.exe' "$destfile" 31856e7d3316Smrg destfile=$func_stripname_result 31866e7d3316Smrg ;; 31876e7d3316Smrg esac 3188a966c04fSmrg ;; 3189a966c04fSmrg esac 31906e7d3316Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 31916e7d3316Smrg $opt_dry_run || if test -n "$outputname"; then 31926e7d3316Smrg ${RM}r "$tmpdir" 31936e7d3316Smrg fi 31946e7d3316Smrg ;; 31956e7d3316Smrg esac 31966e7d3316Smrg done 3197a966c04fSmrg 31986e7d3316Smrg for file in $staticlibs; do 31996e7d3316Smrg func_basename "$file" 32006e7d3316Smrg name="$func_basename_result" 32016e7d3316Smrg 32026e7d3316Smrg # Set up the ranlib parameters. 32036e7d3316Smrg oldlib="$destdir/$name" 32046e7d3316Smrg 32056e7d3316Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 32066e7d3316Smrg 32076e7d3316Smrg if test -n "$stripme" && test -n "$old_striplib"; then 32086e7d3316Smrg func_show_eval "$old_striplib $oldlib" 'exit $?' 32096e7d3316Smrg fi 32106e7d3316Smrg 32116e7d3316Smrg # Do each command in the postinstall commands. 32126e7d3316Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 32136e7d3316Smrg done 32146e7d3316Smrg 32156e7d3316Smrg test -n "$future_libdirs" && \ 32166e7d3316Smrg func_warning "remember to run \`$progname --finish$future_libdirs'" 32176e7d3316Smrg 32186e7d3316Smrg if test -n "$current_libdirs"; then 32196e7d3316Smrg # Maybe just do a dry run. 32206e7d3316Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 32216e7d3316Smrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 32226e7d3316Smrg else 32236e7d3316Smrg exit $EXIT_SUCCESS 32246e7d3316Smrg fi 32256e7d3316Smrg} 32266e7d3316Smrg 322797cf2ee2Smrgtest "$opt_mode" = install && func_mode_install ${1+"$@"} 32286e7d3316Smrg 32296e7d3316Smrg 32306e7d3316Smrg# func_generate_dlsyms outputname originator pic_p 32316e7d3316Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 32326e7d3316Smrg# a dlpreopen symbol table. 32336e7d3316Smrgfunc_generate_dlsyms () 32346e7d3316Smrg{ 32356e7d3316Smrg $opt_debug 32366e7d3316Smrg my_outputname="$1" 32376e7d3316Smrg my_originator="$2" 32386e7d3316Smrg my_pic_p="${3-no}" 32396e7d3316Smrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 32406e7d3316Smrg my_dlsyms= 32416e7d3316Smrg 32426e7d3316Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 32436e7d3316Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 32446e7d3316Smrg my_dlsyms="${my_outputname}S.c" 32456e7d3316Smrg else 32466e7d3316Smrg func_error "not configured to extract global symbols from dlpreopened files" 32476e7d3316Smrg fi 32486e7d3316Smrg fi 32496e7d3316Smrg 32506e7d3316Smrg if test -n "$my_dlsyms"; then 32516e7d3316Smrg case $my_dlsyms in 32526e7d3316Smrg "") ;; 32536e7d3316Smrg *.c) 32546e7d3316Smrg # Discover the nlist of each of the dlfiles. 32556e7d3316Smrg nlist="$output_objdir/${my_outputname}.nm" 32566e7d3316Smrg 32576e7d3316Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 32586e7d3316Smrg 32596e7d3316Smrg # Parse the name list into a source file. 32606e7d3316Smrg func_verbose "creating $output_objdir/$my_dlsyms" 32616e7d3316Smrg 32626e7d3316Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 32636e7d3316Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 32646e7d3316Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 32656e7d3316Smrg 32666e7d3316Smrg#ifdef __cplusplus 32676e7d3316Smrgextern \"C\" { 32686e7d3316Smrg#endif 32696e7d3316Smrg 32706e7d3316Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 32716e7d3316Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 32726e7d3316Smrg#endif 32736e7d3316Smrg 327497cf2ee2Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 327597cf2ee2Smrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 327697cf2ee2Smrg/* DATA imports from DLLs on WIN32 con't be const, because runtime 327797cf2ee2Smrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 327897cf2ee2Smrg# define LT_DLSYM_CONST 327997cf2ee2Smrg#elif defined(__osf__) 328097cf2ee2Smrg/* This system does not cope well with relocations in const data. */ 328197cf2ee2Smrg# define LT_DLSYM_CONST 328297cf2ee2Smrg#else 328397cf2ee2Smrg# define LT_DLSYM_CONST const 328497cf2ee2Smrg#endif 328597cf2ee2Smrg 32866e7d3316Smrg/* External symbol declarations for the compiler. */\ 32876e7d3316Smrg" 32886e7d3316Smrg 32896e7d3316Smrg if test "$dlself" = yes; then 32906e7d3316Smrg func_verbose "generating symbol list for \`$output'" 32916e7d3316Smrg 32926e7d3316Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 32936e7d3316Smrg 32946e7d3316Smrg # Add our own program objects to the symbol list. 32956e7d3316Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 32966e7d3316Smrg for progfile in $progfiles; do 329797cf2ee2Smrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 329897cf2ee2Smrg func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 329997cf2ee2Smrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 33006e7d3316Smrg done 33016e7d3316Smrg 33026e7d3316Smrg if test -n "$exclude_expsyms"; then 33036e7d3316Smrg $opt_dry_run || { 33046e7d3316Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 33056e7d3316Smrg eval '$MV "$nlist"T "$nlist"' 33066e7d3316Smrg } 3307a966c04fSmrg fi 33086e7d3316Smrg 33096e7d3316Smrg if test -n "$export_symbols_regex"; then 33106e7d3316Smrg $opt_dry_run || { 33116e7d3316Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 33126e7d3316Smrg eval '$MV "$nlist"T "$nlist"' 33136e7d3316Smrg } 33146e7d3316Smrg fi 33156e7d3316Smrg 33166e7d3316Smrg # Prepare the list of exported symbols 33176e7d3316Smrg if test -z "$export_symbols"; then 33186e7d3316Smrg export_symbols="$output_objdir/$outputname.exp" 33196e7d3316Smrg $opt_dry_run || { 33206e7d3316Smrg $RM $export_symbols 33216e7d3316Smrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 33226e7d3316Smrg case $host in 33236e7d3316Smrg *cygwin* | *mingw* | *cegcc* ) 33246e7d3316Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 33256e7d3316Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 33266e7d3316Smrg ;; 33276e7d3316Smrg esac 33286e7d3316Smrg } 3329a966c04fSmrg else 33306e7d3316Smrg $opt_dry_run || { 33316e7d3316Smrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 33326e7d3316Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 33336e7d3316Smrg eval '$MV "$nlist"T "$nlist"' 33346e7d3316Smrg case $host in 33356e7d3316Smrg *cygwin* | *mingw* | *cegcc* ) 33366e7d3316Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 33376e7d3316Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 33386e7d3316Smrg ;; 33396e7d3316Smrg esac 33406e7d3316Smrg } 3341a966c04fSmrg fi 33426e7d3316Smrg fi 3343a966c04fSmrg 33446e7d3316Smrg for dlprefile in $dlprefiles; do 33456e7d3316Smrg func_verbose "extracting global C symbols from \`$dlprefile'" 33466e7d3316Smrg func_basename "$dlprefile" 33476e7d3316Smrg name="$func_basename_result" 334897cf2ee2Smrg case $host in 334997cf2ee2Smrg *cygwin* | *mingw* | *cegcc* ) 335097cf2ee2Smrg # if an import library, we need to obtain dlname 335197cf2ee2Smrg if func_win32_import_lib_p "$dlprefile"; then 335297cf2ee2Smrg func_tr_sh "$dlprefile" 335397cf2ee2Smrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 335497cf2ee2Smrg dlprefile_dlbasename="" 335597cf2ee2Smrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 335697cf2ee2Smrg # Use subshell, to avoid clobbering current variable values 335797cf2ee2Smrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 335897cf2ee2Smrg if test -n "$dlprefile_dlname" ; then 335997cf2ee2Smrg func_basename "$dlprefile_dlname" 336097cf2ee2Smrg dlprefile_dlbasename="$func_basename_result" 336197cf2ee2Smrg else 336297cf2ee2Smrg # no lafile. user explicitly requested -dlpreopen <import library>. 336397cf2ee2Smrg $sharedlib_from_linklib_cmd "$dlprefile" 336497cf2ee2Smrg dlprefile_dlbasename=$sharedlib_from_linklib_result 336597cf2ee2Smrg fi 336697cf2ee2Smrg fi 336797cf2ee2Smrg $opt_dry_run || { 336897cf2ee2Smrg if test -n "$dlprefile_dlbasename" ; then 336997cf2ee2Smrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 337097cf2ee2Smrg else 337197cf2ee2Smrg func_warning "Could not compute DLL name from $name" 337297cf2ee2Smrg eval '$ECHO ": $name " >> "$nlist"' 337397cf2ee2Smrg fi 337497cf2ee2Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 337597cf2ee2Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 337697cf2ee2Smrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 337797cf2ee2Smrg } 337897cf2ee2Smrg else # not an import lib 337997cf2ee2Smrg $opt_dry_run || { 338097cf2ee2Smrg eval '$ECHO ": $name " >> "$nlist"' 338197cf2ee2Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 338297cf2ee2Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 338397cf2ee2Smrg } 338497cf2ee2Smrg fi 338597cf2ee2Smrg ;; 338697cf2ee2Smrg *) 338797cf2ee2Smrg $opt_dry_run || { 338897cf2ee2Smrg eval '$ECHO ": $name " >> "$nlist"' 338997cf2ee2Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 339097cf2ee2Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 339197cf2ee2Smrg } 339297cf2ee2Smrg ;; 339397cf2ee2Smrg esac 33946e7d3316Smrg done 33956e7d3316Smrg 33966e7d3316Smrg $opt_dry_run || { 33976e7d3316Smrg # Make sure we have at least an empty file. 33986e7d3316Smrg test -f "$nlist" || : > "$nlist" 33996e7d3316Smrg 34006e7d3316Smrg if test -n "$exclude_expsyms"; then 34016e7d3316Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 34026e7d3316Smrg $MV "$nlist"T "$nlist" 3403a966c04fSmrg fi 34046e7d3316Smrg 34056e7d3316Smrg # Try sorting and uniquifying the output. 34066e7d3316Smrg if $GREP -v "^: " < "$nlist" | 34076e7d3316Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 34086e7d3316Smrg sort -k 3 34096e7d3316Smrg else 34106e7d3316Smrg sort +2 34116e7d3316Smrg fi | 34126e7d3316Smrg uniq > "$nlist"S; then 34136e7d3316Smrg : 3414a966c04fSmrg else 34156e7d3316Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 3416a966c04fSmrg fi 3417a966c04fSmrg 34186e7d3316Smrg if test -f "$nlist"S; then 34196e7d3316Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 3420a966c04fSmrg else 34216e7d3316Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 3422a966c04fSmrg fi 3423a966c04fSmrg 34246e7d3316Smrg echo >> "$output_objdir/$my_dlsyms" "\ 3425a966c04fSmrg 34266e7d3316Smrg/* The mapping between symbol names and symbols. */ 34276e7d3316Smrgtypedef struct { 34286e7d3316Smrg const char *name; 34296e7d3316Smrg void *address; 34306e7d3316Smrg} lt_dlsymlist; 343197cf2ee2Smrgextern LT_DLSYM_CONST lt_dlsymlist 34326e7d3316Smrglt_${my_prefix}_LTX_preloaded_symbols[]; 343397cf2ee2SmrgLT_DLSYM_CONST lt_dlsymlist 34346e7d3316Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 34356e7d3316Smrg{\ 34366e7d3316Smrg { \"$my_originator\", (void *) 0 }," 3437a966c04fSmrg 34386e7d3316Smrg case $need_lib_prefix in 34396e7d3316Smrg no) 34406e7d3316Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 34416e7d3316Smrg ;; 34426e7d3316Smrg *) 34436e7d3316Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 34446e7d3316Smrg ;; 34456e7d3316Smrg esac 34466e7d3316Smrg echo >> "$output_objdir/$my_dlsyms" "\ 34476e7d3316Smrg {0, (void *) 0} 34486e7d3316Smrg}; 3449a966c04fSmrg 34506e7d3316Smrg/* This works around a problem in FreeBSD linker */ 34516e7d3316Smrg#ifdef FREEBSD_WORKAROUND 34526e7d3316Smrgstatic const void *lt_preloaded_setup() { 34536e7d3316Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 34546e7d3316Smrg} 34556e7d3316Smrg#endif 3456a966c04fSmrg 34576e7d3316Smrg#ifdef __cplusplus 34586e7d3316Smrg} 34596e7d3316Smrg#endif\ 34606e7d3316Smrg" 34616e7d3316Smrg } # !$opt_dry_run 3462a966c04fSmrg 34636e7d3316Smrg pic_flag_for_symtable= 34646e7d3316Smrg case "$compile_command " in 34656e7d3316Smrg *" -static "*) ;; 34666e7d3316Smrg *) 34676e7d3316Smrg case $host in 34686e7d3316Smrg # compiling the symbol table file with pic_flag works around 34696e7d3316Smrg # a FreeBSD bug that causes programs to crash when -lm is 34706e7d3316Smrg # linked before any other PIC object. But we must not use 34716e7d3316Smrg # pic_flag when linking with -static. The problem exists in 34726e7d3316Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 34736e7d3316Smrg *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 34746e7d3316Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 34756e7d3316Smrg *-*-hpux*) 34766e7d3316Smrg pic_flag_for_symtable=" $pic_flag" ;; 34776e7d3316Smrg *) 34786e7d3316Smrg if test "X$my_pic_p" != Xno; then 34796e7d3316Smrg pic_flag_for_symtable=" $pic_flag" 34806e7d3316Smrg fi 34816e7d3316Smrg ;; 34826e7d3316Smrg esac 34836e7d3316Smrg ;; 34846e7d3316Smrg esac 34856e7d3316Smrg symtab_cflags= 34866e7d3316Smrg for arg in $LTCFLAGS; do 34876e7d3316Smrg case $arg in 34886e7d3316Smrg -pie | -fpie | -fPIE) ;; 348997cf2ee2Smrg *) func_append symtab_cflags " $arg" ;; 34906e7d3316Smrg esac 34916e7d3316Smrg done 3492a966c04fSmrg 34936e7d3316Smrg # Now compile the dynamic symbol file. 34946e7d3316Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 3495a966c04fSmrg 34966e7d3316Smrg # Clean up the generated files. 34976e7d3316Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 3498a966c04fSmrg 34996e7d3316Smrg # Transform the symbol file into the correct name. 35006e7d3316Smrg symfileobj="$output_objdir/${my_outputname}S.$objext" 35016e7d3316Smrg case $host in 35026e7d3316Smrg *cygwin* | *mingw* | *cegcc* ) 35036e7d3316Smrg if test -f "$output_objdir/$my_outputname.def"; then 35046e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 35056e7d3316Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 35066e7d3316Smrg else 35076e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35086e7d3316Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35096e7d3316Smrg fi 35106e7d3316Smrg ;; 35116e7d3316Smrg *) 35126e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35136e7d3316Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35146e7d3316Smrg ;; 35156e7d3316Smrg esac 35166e7d3316Smrg ;; 35176e7d3316Smrg *) 35186e7d3316Smrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 35196e7d3316Smrg ;; 35206e7d3316Smrg esac 35216e7d3316Smrg else 35226e7d3316Smrg # We keep going just in case the user didn't refer to 35236e7d3316Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 35246e7d3316Smrg # really was required. 3525a966c04fSmrg 35266e7d3316Smrg # Nullify the symbol file. 35276e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 35286e7d3316Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 35296e7d3316Smrg fi 35306e7d3316Smrg} 3531a966c04fSmrg 35326e7d3316Smrg# func_win32_libid arg 35336e7d3316Smrg# return the library type of file 'arg' 35346e7d3316Smrg# 35356e7d3316Smrg# Need a lot of goo to handle *both* DLLs and import libs 35366e7d3316Smrg# Has to be a shell function in order to 'eat' the argument 35376e7d3316Smrg# that is supplied when $file_magic_command is called. 35386e7d3316Smrg# Despite the name, also deal with 64 bit binaries. 35396e7d3316Smrgfunc_win32_libid () 35406e7d3316Smrg{ 35416e7d3316Smrg $opt_debug 35426e7d3316Smrg win32_libid_type="unknown" 35436e7d3316Smrg win32_fileres=`file -L $1 2>/dev/null` 35446e7d3316Smrg case $win32_fileres in 35456e7d3316Smrg *ar\ archive\ import\ library*) # definitely import 35466e7d3316Smrg win32_libid_type="x86 archive import" 35476e7d3316Smrg ;; 35486e7d3316Smrg *ar\ archive*) # could be an import, or static 35496e7d3316Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 35506e7d3316Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 35516e7d3316Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 355297cf2ee2Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 355397cf2ee2Smrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 35546e7d3316Smrg $SED -n -e ' 35556e7d3316Smrg 1,100{ 35566e7d3316Smrg / I /{ 35576e7d3316Smrg s,.*,import, 35586e7d3316Smrg p 35596e7d3316Smrg q 35606e7d3316Smrg } 35616e7d3316Smrg }'` 35626e7d3316Smrg case $win32_nmres in 35636e7d3316Smrg import*) win32_libid_type="x86 archive import";; 35646e7d3316Smrg *) win32_libid_type="x86 archive static";; 35656e7d3316Smrg esac 35666e7d3316Smrg fi 35676e7d3316Smrg ;; 35686e7d3316Smrg *DLL*) 35696e7d3316Smrg win32_libid_type="x86 DLL" 35706e7d3316Smrg ;; 35716e7d3316Smrg *executable*) # but shell scripts are "executable" too... 35726e7d3316Smrg case $win32_fileres in 35736e7d3316Smrg *MS\ Windows\ PE\ Intel*) 35746e7d3316Smrg win32_libid_type="x86 DLL" 35756e7d3316Smrg ;; 35766e7d3316Smrg esac 35776e7d3316Smrg ;; 35786e7d3316Smrg esac 35796e7d3316Smrg $ECHO "$win32_libid_type" 35806e7d3316Smrg} 3581a966c04fSmrg 358297cf2ee2Smrg# func_cygming_dll_for_implib ARG 358397cf2ee2Smrg# 358497cf2ee2Smrg# Platform-specific function to extract the 358597cf2ee2Smrg# name of the DLL associated with the specified 358697cf2ee2Smrg# import library ARG. 358797cf2ee2Smrg# Invoked by eval'ing the libtool variable 358897cf2ee2Smrg# $sharedlib_from_linklib_cmd 358997cf2ee2Smrg# Result is available in the variable 359097cf2ee2Smrg# $sharedlib_from_linklib_result 359197cf2ee2Smrgfunc_cygming_dll_for_implib () 359297cf2ee2Smrg{ 359397cf2ee2Smrg $opt_debug 359497cf2ee2Smrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 359597cf2ee2Smrg} 359697cf2ee2Smrg 359797cf2ee2Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 359897cf2ee2Smrg# 359997cf2ee2Smrg# The is the core of a fallback implementation of a 360097cf2ee2Smrg# platform-specific function to extract the name of the 360197cf2ee2Smrg# DLL associated with the specified import library LIBNAME. 360297cf2ee2Smrg# 360397cf2ee2Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending 360497cf2ee2Smrg# on the platform and compiler that created the implib. 360597cf2ee2Smrg# 360697cf2ee2Smrg# Echos the name of the DLL associated with the 360797cf2ee2Smrg# specified import library. 360897cf2ee2Smrgfunc_cygming_dll_for_implib_fallback_core () 360997cf2ee2Smrg{ 361097cf2ee2Smrg $opt_debug 361197cf2ee2Smrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 361297cf2ee2Smrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 361397cf2ee2Smrg $SED '/^Contents of section '"$match_literal"':/{ 361497cf2ee2Smrg # Place marker at beginning of archive member dllname section 361597cf2ee2Smrg s/.*/====MARK====/ 361697cf2ee2Smrg p 361797cf2ee2Smrg d 361897cf2ee2Smrg } 361997cf2ee2Smrg # These lines can sometimes be longer than 43 characters, but 362097cf2ee2Smrg # are always uninteresting 362197cf2ee2Smrg /:[ ]*file format pe[i]\{,1\}-/d 362297cf2ee2Smrg /^In archive [^:]*:/d 362397cf2ee2Smrg # Ensure marker is printed 362497cf2ee2Smrg /^====MARK====/p 362597cf2ee2Smrg # Remove all lines with less than 43 characters 362697cf2ee2Smrg /^.\{43\}/!d 362797cf2ee2Smrg # From remaining lines, remove first 43 characters 362897cf2ee2Smrg s/^.\{43\}//' | 362997cf2ee2Smrg $SED -n ' 363097cf2ee2Smrg # Join marker and all lines until next marker into a single line 363197cf2ee2Smrg /^====MARK====/ b para 363297cf2ee2Smrg H 363397cf2ee2Smrg $ b para 363497cf2ee2Smrg b 363597cf2ee2Smrg :para 363697cf2ee2Smrg x 363797cf2ee2Smrg s/\n//g 363897cf2ee2Smrg # Remove the marker 363997cf2ee2Smrg s/^====MARK====// 364097cf2ee2Smrg # Remove trailing dots and whitespace 364197cf2ee2Smrg s/[\. \t]*$// 364297cf2ee2Smrg # Print 364397cf2ee2Smrg /./p' | 364497cf2ee2Smrg # we now have a list, one entry per line, of the stringified 364597cf2ee2Smrg # contents of the appropriate section of all members of the 364697cf2ee2Smrg # archive which possess that section. Heuristic: eliminate 364797cf2ee2Smrg # all those which have a first or second character that is 364897cf2ee2Smrg # a '.' (that is, objdump's representation of an unprintable 364997cf2ee2Smrg # character.) This should work for all archives with less than 365097cf2ee2Smrg # 0x302f exports -- but will fail for DLLs whose name actually 365197cf2ee2Smrg # begins with a literal '.' or a single character followed by 365297cf2ee2Smrg # a '.'. 365397cf2ee2Smrg # 365497cf2ee2Smrg # Of those that remain, print the first one. 365597cf2ee2Smrg $SED -e '/^\./d;/^.\./d;q' 365697cf2ee2Smrg} 365797cf2ee2Smrg 365897cf2ee2Smrg# func_cygming_gnu_implib_p ARG 365997cf2ee2Smrg# This predicate returns with zero status (TRUE) if 366097cf2ee2Smrg# ARG is a GNU/binutils-style import library. Returns 366197cf2ee2Smrg# with nonzero status (FALSE) otherwise. 366297cf2ee2Smrgfunc_cygming_gnu_implib_p () 366397cf2ee2Smrg{ 366497cf2ee2Smrg $opt_debug 366597cf2ee2Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 366697cf2ee2Smrg func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` 366797cf2ee2Smrg test -n "$func_cygming_gnu_implib_tmp" 366897cf2ee2Smrg} 366997cf2ee2Smrg 367097cf2ee2Smrg# func_cygming_ms_implib_p ARG 367197cf2ee2Smrg# This predicate returns with zero status (TRUE) if 367297cf2ee2Smrg# ARG is an MS-style import library. Returns 367397cf2ee2Smrg# with nonzero status (FALSE) otherwise. 367497cf2ee2Smrgfunc_cygming_ms_implib_p () 367597cf2ee2Smrg{ 367697cf2ee2Smrg $opt_debug 367797cf2ee2Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 367897cf2ee2Smrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 367997cf2ee2Smrg test -n "$func_cygming_ms_implib_tmp" 368097cf2ee2Smrg} 368197cf2ee2Smrg 368297cf2ee2Smrg# func_cygming_dll_for_implib_fallback ARG 368397cf2ee2Smrg# Platform-specific function to extract the 368497cf2ee2Smrg# name of the DLL associated with the specified 368597cf2ee2Smrg# import library ARG. 368697cf2ee2Smrg# 368797cf2ee2Smrg# This fallback implementation is for use when $DLLTOOL 368897cf2ee2Smrg# does not support the --identify-strict option. 368997cf2ee2Smrg# Invoked by eval'ing the libtool variable 369097cf2ee2Smrg# $sharedlib_from_linklib_cmd 369197cf2ee2Smrg# Result is available in the variable 369297cf2ee2Smrg# $sharedlib_from_linklib_result 369397cf2ee2Smrgfunc_cygming_dll_for_implib_fallback () 369497cf2ee2Smrg{ 369597cf2ee2Smrg $opt_debug 369697cf2ee2Smrg if func_cygming_gnu_implib_p "$1" ; then 369797cf2ee2Smrg # binutils import library 369897cf2ee2Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 369997cf2ee2Smrg elif func_cygming_ms_implib_p "$1" ; then 370097cf2ee2Smrg # ms-generated import library 370197cf2ee2Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 370297cf2ee2Smrg else 370397cf2ee2Smrg # unknown 370497cf2ee2Smrg sharedlib_from_linklib_result="" 370597cf2ee2Smrg fi 370697cf2ee2Smrg} 3707a966c04fSmrg 3708a966c04fSmrg 37096e7d3316Smrg# func_extract_an_archive dir oldlib 37106e7d3316Smrgfunc_extract_an_archive () 37116e7d3316Smrg{ 37126e7d3316Smrg $opt_debug 37136e7d3316Smrg f_ex_an_ar_dir="$1"; shift 37146e7d3316Smrg f_ex_an_ar_oldlib="$1" 37156e7d3316Smrg if test "$lock_old_archive_extraction" = yes; then 37166e7d3316Smrg lockfile=$f_ex_an_ar_oldlib.lock 37176e7d3316Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 37186e7d3316Smrg func_echo "Waiting for $lockfile to be removed" 37196e7d3316Smrg sleep 2 37206e7d3316Smrg done 37216e7d3316Smrg fi 37226e7d3316Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 37236e7d3316Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 37246e7d3316Smrg if test "$lock_old_archive_extraction" = yes; then 37256e7d3316Smrg $opt_dry_run || rm -f "$lockfile" 37266e7d3316Smrg fi 37276e7d3316Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 37286e7d3316Smrg : 37296e7d3316Smrg else 37306e7d3316Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 37316e7d3316Smrg fi 37326e7d3316Smrg} 3733a966c04fSmrg 3734a966c04fSmrg 37356e7d3316Smrg# func_extract_archives gentop oldlib ... 37366e7d3316Smrgfunc_extract_archives () 37376e7d3316Smrg{ 37386e7d3316Smrg $opt_debug 37396e7d3316Smrg my_gentop="$1"; shift 37406e7d3316Smrg my_oldlibs=${1+"$@"} 37416e7d3316Smrg my_oldobjs="" 37426e7d3316Smrg my_xlib="" 37436e7d3316Smrg my_xabs="" 37446e7d3316Smrg my_xdir="" 3745a966c04fSmrg 37466e7d3316Smrg for my_xlib in $my_oldlibs; do 37476e7d3316Smrg # Extract the objects. 37486e7d3316Smrg case $my_xlib in 37496e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 37506e7d3316Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 37516e7d3316Smrg esac 37526e7d3316Smrg func_basename "$my_xlib" 37536e7d3316Smrg my_xlib="$func_basename_result" 37546e7d3316Smrg my_xlib_u=$my_xlib 37556e7d3316Smrg while :; do 37566e7d3316Smrg case " $extracted_archives " in 37576e7d3316Smrg *" $my_xlib_u "*) 37586e7d3316Smrg func_arith $extracted_serial + 1 37596e7d3316Smrg extracted_serial=$func_arith_result 37606e7d3316Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 37616e7d3316Smrg *) break ;; 37626e7d3316Smrg esac 37636e7d3316Smrg done 37646e7d3316Smrg extracted_archives="$extracted_archives $my_xlib_u" 37656e7d3316Smrg my_xdir="$my_gentop/$my_xlib_u" 3766a966c04fSmrg 37676e7d3316Smrg func_mkdir_p "$my_xdir" 37686e7d3316Smrg 37696e7d3316Smrg case $host in 37706e7d3316Smrg *-darwin*) 37716e7d3316Smrg func_verbose "Extracting $my_xabs" 37726e7d3316Smrg # Do not bother doing anything if just a dry run 37736e7d3316Smrg $opt_dry_run || { 37746e7d3316Smrg darwin_orig_dir=`pwd` 37756e7d3316Smrg cd $my_xdir || exit $? 37766e7d3316Smrg darwin_archive=$my_xabs 37776e7d3316Smrg darwin_curdir=`pwd` 37786e7d3316Smrg darwin_base_archive=`basename "$darwin_archive"` 37796e7d3316Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 37806e7d3316Smrg if test -n "$darwin_arches"; then 37816e7d3316Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 37826e7d3316Smrg darwin_arch= 37836e7d3316Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 37846e7d3316Smrg for darwin_arch in $darwin_arches ; do 37856e7d3316Smrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 37866e7d3316Smrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 37876e7d3316Smrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 37886e7d3316Smrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 37896e7d3316Smrg cd "$darwin_curdir" 37906e7d3316Smrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 37916e7d3316Smrg done # $darwin_arches 37926e7d3316Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 37936e7d3316Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 37946e7d3316Smrg darwin_file= 37956e7d3316Smrg darwin_files= 37966e7d3316Smrg for darwin_file in $darwin_filelist; do 37976e7d3316Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 37986e7d3316Smrg $LIPO -create -output "$darwin_file" $darwin_files 37996e7d3316Smrg done # $darwin_filelist 38006e7d3316Smrg $RM -rf unfat-$$ 38016e7d3316Smrg cd "$darwin_orig_dir" 3802a966c04fSmrg else 38036e7d3316Smrg cd $darwin_orig_dir 38046e7d3316Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 38056e7d3316Smrg fi # $darwin_arches 38066e7d3316Smrg } # !$opt_dry_run 38076e7d3316Smrg ;; 38086e7d3316Smrg *) 38096e7d3316Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 38106e7d3316Smrg ;; 38116e7d3316Smrg esac 38126e7d3316Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 38136e7d3316Smrg done 3814a966c04fSmrg 38156e7d3316Smrg func_extract_archives_result="$my_oldobjs" 38166e7d3316Smrg} 3817a966c04fSmrg 3818a966c04fSmrg 38196e7d3316Smrg# func_emit_wrapper [arg=no] 38206e7d3316Smrg# 38216e7d3316Smrg# Emit a libtool wrapper script on stdout. 38226e7d3316Smrg# Don't directly open a file because we may want to 38236e7d3316Smrg# incorporate the script contents within a cygwin/mingw 38246e7d3316Smrg# wrapper executable. Must ONLY be called from within 38256e7d3316Smrg# func_mode_link because it depends on a number of variables 38266e7d3316Smrg# set therein. 38276e7d3316Smrg# 38286e7d3316Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 38296e7d3316Smrg# variable will take. If 'yes', then the emitted script 38306e7d3316Smrg# will assume that the directory in which it is stored is 38316e7d3316Smrg# the $objdir directory. This is a cygwin/mingw-specific 38326e7d3316Smrg# behavior. 38336e7d3316Smrgfunc_emit_wrapper () 38346e7d3316Smrg{ 38356e7d3316Smrg func_emit_wrapper_arg1=${1-no} 3836a966c04fSmrg 38376e7d3316Smrg $ECHO "\ 38386e7d3316Smrg#! $SHELL 3839a966c04fSmrg 38406e7d3316Smrg# $output - temporary wrapper script for $objdir/$outputname 38416e7d3316Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 38426e7d3316Smrg# 38436e7d3316Smrg# The $output program cannot be directly executed until all the libtool 38446e7d3316Smrg# libraries that it depends on are installed. 38456e7d3316Smrg# 38466e7d3316Smrg# This wrapper script should never be moved out of the build directory. 38476e7d3316Smrg# If it is, it will not operate correctly. 3848a966c04fSmrg 38496e7d3316Smrg# Sed substitution that helps us do robust quoting. It backslashifies 38506e7d3316Smrg# metacharacters that are still active within double-quoted strings. 38516e7d3316Smrgsed_quote_subst='$sed_quote_subst' 3852a966c04fSmrg 38536e7d3316Smrg# Be Bourne compatible 38546e7d3316Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 38556e7d3316Smrg emulate sh 38566e7d3316Smrg NULLCMD=: 38576e7d3316Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 38586e7d3316Smrg # is contrary to our usage. Disable this feature. 38596e7d3316Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 38606e7d3316Smrg setopt NO_GLOB_SUBST 38616e7d3316Smrgelse 38626e7d3316Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 38636e7d3316Smrgfi 38646e7d3316SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 38656e7d3316SmrgDUALCASE=1; export DUALCASE # for MKS sh 3866a966c04fSmrg 38676e7d3316Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 38686e7d3316Smrg# if CDPATH is set. 38696e7d3316Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 3870a966c04fSmrg 38716e7d3316Smrgrelink_command=\"$relink_command\" 3872a966c04fSmrg 38736e7d3316Smrg# This environment variable determines our operation mode. 38746e7d3316Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 38756e7d3316Smrg # install mode needs the following variables: 38766e7d3316Smrg generated_by_libtool_version='$macro_version' 38776e7d3316Smrg notinst_deplibs='$notinst_deplibs' 38786e7d3316Smrgelse 38796e7d3316Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 38806e7d3316Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 38816e7d3316Smrg file=\"\$0\"" 3882a966c04fSmrg 38836e7d3316Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 38846e7d3316Smrg $ECHO "\ 3885a966c04fSmrg 38866e7d3316Smrg# A function that is used when there is no print builtin or printf. 38876e7d3316Smrgfunc_fallback_echo () 38886e7d3316Smrg{ 38896e7d3316Smrg eval 'cat <<_LTECHO_EOF 38906e7d3316Smrg\$1 38916e7d3316Smrg_LTECHO_EOF' 38926e7d3316Smrg} 38936e7d3316Smrg ECHO=\"$qECHO\" 38946e7d3316Smrg fi 38956e7d3316Smrg 38966e7d3316Smrg# Very basic option parsing. These options are (a) specific to 38976e7d3316Smrg# the libtool wrapper, (b) are identical between the wrapper 38986e7d3316Smrg# /script/ and the wrapper /executable/ which is used only on 38996e7d3316Smrg# windows platforms, and (c) all begin with the string "--lt-" 39006e7d3316Smrg# (application programs are unlikely to have options which match 39016e7d3316Smrg# this pattern). 39026e7d3316Smrg# 39036e7d3316Smrg# There are only two supported options: --lt-debug and 39046e7d3316Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 39056e7d3316Smrg# 39066e7d3316Smrg# The first argument to this parsing function should be the 39076e7d3316Smrg# script's $0 value, followed by "$@". 39086e7d3316Smrglt_option_debug= 39096e7d3316Smrgfunc_parse_lt_options () 39106e7d3316Smrg{ 39116e7d3316Smrg lt_script_arg0=\$0 39126e7d3316Smrg shift 39136e7d3316Smrg for lt_opt 39146e7d3316Smrg do 39156e7d3316Smrg case \"\$lt_opt\" in 39166e7d3316Smrg --lt-debug) lt_option_debug=1 ;; 39176e7d3316Smrg --lt-dump-script) 39186e7d3316Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 39196e7d3316Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 39206e7d3316Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 39216e7d3316Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 39226e7d3316Smrg exit 0 39236e7d3316Smrg ;; 39246e7d3316Smrg --lt-*) 39256e7d3316Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 39266e7d3316Smrg exit 1 3927a966c04fSmrg ;; 39286e7d3316Smrg esac 39296e7d3316Smrg done 3930a966c04fSmrg 39316e7d3316Smrg # Print the debug banner immediately: 39326e7d3316Smrg if test -n \"\$lt_option_debug\"; then 39336e7d3316Smrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 39346e7d3316Smrg fi 39356e7d3316Smrg} 3936a966c04fSmrg 39376e7d3316Smrg# Used when --lt-debug. Prints its arguments to stdout 39386e7d3316Smrg# (redirection is the responsibility of the caller) 39396e7d3316Smrgfunc_lt_dump_args () 39406e7d3316Smrg{ 39416e7d3316Smrg lt_dump_args_N=1; 39426e7d3316Smrg for lt_arg 39436e7d3316Smrg do 39446e7d3316Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 39456e7d3316Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 39466e7d3316Smrg done 39476e7d3316Smrg} 3948a966c04fSmrg 39496e7d3316Smrg# Core function for launching the target application 39506e7d3316Smrgfunc_exec_program_core () 39516e7d3316Smrg{ 39526e7d3316Smrg" 39536e7d3316Smrg case $host in 39546e7d3316Smrg # Backslashes separate directories on plain windows 39556e7d3316Smrg *-*-mingw | *-*-os2* | *-cegcc*) 39566e7d3316Smrg $ECHO "\ 39576e7d3316Smrg if test -n \"\$lt_option_debug\"; then 39586e7d3316Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 39596e7d3316Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3960a966c04fSmrg fi 39616e7d3316Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 39626e7d3316Smrg" 39636e7d3316Smrg ;; 3964a966c04fSmrg 39656e7d3316Smrg *) 39666e7d3316Smrg $ECHO "\ 39676e7d3316Smrg if test -n \"\$lt_option_debug\"; then 39686e7d3316Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 39696e7d3316Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3970a966c04fSmrg fi 39716e7d3316Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 39726e7d3316Smrg" 39736e7d3316Smrg ;; 39746e7d3316Smrg esac 39756e7d3316Smrg $ECHO "\ 39766e7d3316Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 39776e7d3316Smrg exit 1 39786e7d3316Smrg} 3979a966c04fSmrg 39806e7d3316Smrg# A function to encapsulate launching the target application 39816e7d3316Smrg# Strips options in the --lt-* namespace from \$@ and 39826e7d3316Smrg# launches target application with the remaining arguments. 39836e7d3316Smrgfunc_exec_program () 39846e7d3316Smrg{ 39856e7d3316Smrg for lt_wr_arg 39866e7d3316Smrg do 39876e7d3316Smrg case \$lt_wr_arg in 39886e7d3316Smrg --lt-*) ;; 39896e7d3316Smrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 39906e7d3316Smrg esac 39916e7d3316Smrg shift 39926e7d3316Smrg done 39936e7d3316Smrg func_exec_program_core \${1+\"\$@\"} 39946e7d3316Smrg} 3995a966c04fSmrg 39966e7d3316Smrg # Parse options 39976e7d3316Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 3998a966c04fSmrg 39996e7d3316Smrg # Find the directory that this script lives in. 40006e7d3316Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 40016e7d3316Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 4002a966c04fSmrg 40036e7d3316Smrg # Follow symbolic links until we get to the real thisdir. 40046e7d3316Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 40056e7d3316Smrg while test -n \"\$file\"; do 40066e7d3316Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 4007a966c04fSmrg 40086e7d3316Smrg # If there was a directory component, then change thisdir. 40096e7d3316Smrg if test \"x\$destdir\" != \"x\$file\"; then 40106e7d3316Smrg case \"\$destdir\" in 40116e7d3316Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 40126e7d3316Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 40136e7d3316Smrg esac 40146e7d3316Smrg fi 4015a966c04fSmrg 40166e7d3316Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 40176e7d3316Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 40186e7d3316Smrg done 4019a966c04fSmrg 40206e7d3316Smrg # Usually 'no', except on cygwin/mingw when embedded into 40216e7d3316Smrg # the cwrapper. 40226e7d3316Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 40236e7d3316Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 40246e7d3316Smrg # special case for '.' 40256e7d3316Smrg if test \"\$thisdir\" = \".\"; then 40266e7d3316Smrg thisdir=\`pwd\` 40276e7d3316Smrg fi 40286e7d3316Smrg # remove .libs from thisdir 40296e7d3316Smrg case \"\$thisdir\" in 40306e7d3316Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 40316e7d3316Smrg $objdir ) thisdir=. ;; 40326e7d3316Smrg esac 40336e7d3316Smrg fi 4034a966c04fSmrg 40356e7d3316Smrg # Try to get the absolute directory name. 40366e7d3316Smrg absdir=\`cd \"\$thisdir\" && pwd\` 40376e7d3316Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 40386e7d3316Smrg" 4039a966c04fSmrg 40406e7d3316Smrg if test "$fast_install" = yes; then 40416e7d3316Smrg $ECHO "\ 40426e7d3316Smrg program=lt-'$outputname'$exeext 40436e7d3316Smrg progdir=\"\$thisdir/$objdir\" 4044a966c04fSmrg 40456e7d3316Smrg if test ! -f \"\$progdir/\$program\" || 40466e7d3316Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 40476e7d3316Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 4048a966c04fSmrg 40496e7d3316Smrg file=\"\$\$-\$program\" 4050a966c04fSmrg 40516e7d3316Smrg if test ! -d \"\$progdir\"; then 40526e7d3316Smrg $MKDIR \"\$progdir\" 40536e7d3316Smrg else 40546e7d3316Smrg $RM \"\$progdir/\$file\" 40556e7d3316Smrg fi" 4056a966c04fSmrg 40576e7d3316Smrg $ECHO "\ 4058a966c04fSmrg 40596e7d3316Smrg # relink executable if necessary 40606e7d3316Smrg if test -n \"\$relink_command\"; then 40616e7d3316Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 40626e7d3316Smrg else 40636e7d3316Smrg $ECHO \"\$relink_command_output\" >&2 40646e7d3316Smrg $RM \"\$progdir/\$file\" 40656e7d3316Smrg exit 1 40666e7d3316Smrg fi 40676e7d3316Smrg fi 4068a966c04fSmrg 40696e7d3316Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 40706e7d3316Smrg { $RM \"\$progdir/\$program\"; 40716e7d3316Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 40726e7d3316Smrg $RM \"\$progdir/\$file\" 40736e7d3316Smrg fi" 40746e7d3316Smrg else 40756e7d3316Smrg $ECHO "\ 40766e7d3316Smrg program='$outputname' 40776e7d3316Smrg progdir=\"\$thisdir/$objdir\" 40786e7d3316Smrg" 40796e7d3316Smrg fi 4080a966c04fSmrg 40816e7d3316Smrg $ECHO "\ 4082a966c04fSmrg 40836e7d3316Smrg if test -f \"\$progdir/\$program\"; then" 4084a966c04fSmrg 408597cf2ee2Smrg # fixup the dll searchpath if we need to. 408697cf2ee2Smrg # 408797cf2ee2Smrg # Fix the DLL searchpath if we need to. Do this before prepending 408897cf2ee2Smrg # to shlibpath, because on Windows, both are PATH and uninstalled 408997cf2ee2Smrg # libraries must come first. 409097cf2ee2Smrg if test -n "$dllsearchpath"; then 409197cf2ee2Smrg $ECHO "\ 409297cf2ee2Smrg # Add the dll search path components to the executable PATH 409397cf2ee2Smrg PATH=$dllsearchpath:\$PATH 409497cf2ee2Smrg" 409597cf2ee2Smrg fi 409697cf2ee2Smrg 40976e7d3316Smrg # Export our shlibpath_var if we have one. 40986e7d3316Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 40996e7d3316Smrg $ECHO "\ 41006e7d3316Smrg # Add our own library path to $shlibpath_var 41016e7d3316Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 4102a966c04fSmrg 41036e7d3316Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 41046e7d3316Smrg # The second colon is a workaround for a bug in BeOS R4 sed 41056e7d3316Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 4106a966c04fSmrg 41076e7d3316Smrg export $shlibpath_var 41086e7d3316Smrg" 41096e7d3316Smrg fi 4110a966c04fSmrg 41116e7d3316Smrg $ECHO "\ 41126e7d3316Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 41136e7d3316Smrg # Run the actual program with our arguments. 41146e7d3316Smrg func_exec_program \${1+\"\$@\"} 41156e7d3316Smrg fi 41166e7d3316Smrg else 41176e7d3316Smrg # The program doesn't exist. 41186e7d3316Smrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 41196e7d3316Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 41206e7d3316Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 41216e7d3316Smrg exit 1 41226e7d3316Smrg fi 41236e7d3316Smrgfi\ 41246e7d3316Smrg" 41256e7d3316Smrg} 4126a966c04fSmrg 4127a966c04fSmrg 41286e7d3316Smrg# func_emit_cwrapperexe_src 41296e7d3316Smrg# emit the source code for a wrapper executable on stdout 41306e7d3316Smrg# Must ONLY be called from within func_mode_link because 41316e7d3316Smrg# it depends on a number of variable set therein. 41326e7d3316Smrgfunc_emit_cwrapperexe_src () 41336e7d3316Smrg{ 41346e7d3316Smrg cat <<EOF 4135a966c04fSmrg 41366e7d3316Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 41376e7d3316Smrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 4138a966c04fSmrg 41396e7d3316Smrg The $output program cannot be directly executed until all the libtool 41406e7d3316Smrg libraries that it depends on are installed. 4141a966c04fSmrg 41426e7d3316Smrg This wrapper executable should never be moved out of the build directory. 41436e7d3316Smrg If it is, it will not operate correctly. 41446e7d3316Smrg*/ 41456e7d3316SmrgEOF 41466e7d3316Smrg cat <<"EOF" 41476e7d3316Smrg#ifdef _MSC_VER 41486e7d3316Smrg# define _CRT_SECURE_NO_DEPRECATE 1 41496e7d3316Smrg#endif 41506e7d3316Smrg#include <stdio.h> 41516e7d3316Smrg#include <stdlib.h> 41526e7d3316Smrg#ifdef _MSC_VER 41536e7d3316Smrg# include <direct.h> 41546e7d3316Smrg# include <process.h> 41556e7d3316Smrg# include <io.h> 41566e7d3316Smrg#else 41576e7d3316Smrg# include <unistd.h> 41586e7d3316Smrg# include <stdint.h> 41596e7d3316Smrg# ifdef __CYGWIN__ 41606e7d3316Smrg# include <io.h> 41616e7d3316Smrg# endif 41626e7d3316Smrg#endif 41636e7d3316Smrg#include <malloc.h> 41646e7d3316Smrg#include <stdarg.h> 41656e7d3316Smrg#include <assert.h> 41666e7d3316Smrg#include <string.h> 41676e7d3316Smrg#include <ctype.h> 41686e7d3316Smrg#include <errno.h> 41696e7d3316Smrg#include <fcntl.h> 41706e7d3316Smrg#include <sys/stat.h> 4171a966c04fSmrg 41726e7d3316Smrg/* declarations of non-ANSI functions */ 41736e7d3316Smrg#if defined(__MINGW32__) 41746e7d3316Smrg# ifdef __STRICT_ANSI__ 41756e7d3316Smrgint _putenv (const char *); 41766e7d3316Smrg# endif 41776e7d3316Smrg#elif defined(__CYGWIN__) 41786e7d3316Smrg# ifdef __STRICT_ANSI__ 41796e7d3316Smrgchar *realpath (const char *, char *); 41806e7d3316Smrgint putenv (char *); 41816e7d3316Smrgint setenv (const char *, const char *, int); 41826e7d3316Smrg# endif 41836e7d3316Smrg/* #elif defined (other platforms) ... */ 41846e7d3316Smrg#endif 4185a966c04fSmrg 41866e7d3316Smrg/* portability defines, excluding path handling macros */ 41876e7d3316Smrg#if defined(_MSC_VER) 41886e7d3316Smrg# define setmode _setmode 41896e7d3316Smrg# define stat _stat 41906e7d3316Smrg# define chmod _chmod 41916e7d3316Smrg# define getcwd _getcwd 41926e7d3316Smrg# define putenv _putenv 41936e7d3316Smrg# define S_IXUSR _S_IEXEC 41946e7d3316Smrg# ifndef _INTPTR_T_DEFINED 41956e7d3316Smrg# define _INTPTR_T_DEFINED 41966e7d3316Smrg# define intptr_t int 41976e7d3316Smrg# endif 41986e7d3316Smrg#elif defined(__MINGW32__) 41996e7d3316Smrg# define setmode _setmode 42006e7d3316Smrg# define stat _stat 42016e7d3316Smrg# define chmod _chmod 42026e7d3316Smrg# define getcwd _getcwd 42036e7d3316Smrg# define putenv _putenv 42046e7d3316Smrg#elif defined(__CYGWIN__) 42056e7d3316Smrg# define HAVE_SETENV 42066e7d3316Smrg# define FOPEN_WB "wb" 42076e7d3316Smrg/* #elif defined (other platforms) ... */ 42086e7d3316Smrg#endif 4209a966c04fSmrg 42106e7d3316Smrg#if defined(PATH_MAX) 42116e7d3316Smrg# define LT_PATHMAX PATH_MAX 42126e7d3316Smrg#elif defined(MAXPATHLEN) 42136e7d3316Smrg# define LT_PATHMAX MAXPATHLEN 42146e7d3316Smrg#else 42156e7d3316Smrg# define LT_PATHMAX 1024 42166e7d3316Smrg#endif 4217a966c04fSmrg 42186e7d3316Smrg#ifndef S_IXOTH 42196e7d3316Smrg# define S_IXOTH 0 42206e7d3316Smrg#endif 42216e7d3316Smrg#ifndef S_IXGRP 42226e7d3316Smrg# define S_IXGRP 0 42236e7d3316Smrg#endif 4224a966c04fSmrg 42256e7d3316Smrg/* path handling portability macros */ 42266e7d3316Smrg#ifndef DIR_SEPARATOR 42276e7d3316Smrg# define DIR_SEPARATOR '/' 42286e7d3316Smrg# define PATH_SEPARATOR ':' 42296e7d3316Smrg#endif 4230a966c04fSmrg 42316e7d3316Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 42326e7d3316Smrg defined (__OS2__) 42336e7d3316Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 42346e7d3316Smrg# define FOPEN_WB "wb" 42356e7d3316Smrg# ifndef DIR_SEPARATOR_2 42366e7d3316Smrg# define DIR_SEPARATOR_2 '\\' 42376e7d3316Smrg# endif 42386e7d3316Smrg# ifndef PATH_SEPARATOR_2 42396e7d3316Smrg# define PATH_SEPARATOR_2 ';' 42406e7d3316Smrg# endif 42416e7d3316Smrg#endif 4242a966c04fSmrg 42436e7d3316Smrg#ifndef DIR_SEPARATOR_2 42446e7d3316Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 42456e7d3316Smrg#else /* DIR_SEPARATOR_2 */ 42466e7d3316Smrg# define IS_DIR_SEPARATOR(ch) \ 42476e7d3316Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 42486e7d3316Smrg#endif /* DIR_SEPARATOR_2 */ 4249a966c04fSmrg 42506e7d3316Smrg#ifndef PATH_SEPARATOR_2 42516e7d3316Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 42526e7d3316Smrg#else /* PATH_SEPARATOR_2 */ 42536e7d3316Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 42546e7d3316Smrg#endif /* PATH_SEPARATOR_2 */ 42556e7d3316Smrg 42566e7d3316Smrg#ifndef FOPEN_WB 42576e7d3316Smrg# define FOPEN_WB "w" 42586e7d3316Smrg#endif 42596e7d3316Smrg#ifndef _O_BINARY 42606e7d3316Smrg# define _O_BINARY 0 42616e7d3316Smrg#endif 42626e7d3316Smrg 42636e7d3316Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 42646e7d3316Smrg#define XFREE(stale) do { \ 42656e7d3316Smrg if (stale) { free ((void *) stale); stale = 0; } \ 42666e7d3316Smrg} while (0) 42676e7d3316Smrg 42686e7d3316Smrg#if defined(LT_DEBUGWRAPPER) 42696e7d3316Smrgstatic int lt_debug = 1; 42706e7d3316Smrg#else 42716e7d3316Smrgstatic int lt_debug = 0; 42726e7d3316Smrg#endif 42736e7d3316Smrg 42746e7d3316Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 42756e7d3316Smrg 42766e7d3316Smrgvoid *xmalloc (size_t num); 42776e7d3316Smrgchar *xstrdup (const char *string); 42786e7d3316Smrgconst char *base_name (const char *name); 42796e7d3316Smrgchar *find_executable (const char *wrapper); 42806e7d3316Smrgchar *chase_symlinks (const char *pathspec); 42816e7d3316Smrgint make_executable (const char *path); 42826e7d3316Smrgint check_executable (const char *path); 42836e7d3316Smrgchar *strendzap (char *str, const char *pat); 42846e7d3316Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 42856e7d3316Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 42866e7d3316Smrgstatic const char *nonnull (const char *s); 42876e7d3316Smrgstatic const char *nonempty (const char *s); 42886e7d3316Smrgvoid lt_setenv (const char *name, const char *value); 42896e7d3316Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 42906e7d3316Smrgvoid lt_update_exe_path (const char *name, const char *value); 42916e7d3316Smrgvoid lt_update_lib_path (const char *name, const char *value); 42926e7d3316Smrgchar **prepare_spawn (char **argv); 42936e7d3316Smrgvoid lt_dump_script (FILE *f); 42946e7d3316SmrgEOF 42956e7d3316Smrg 42966e7d3316Smrg cat <<EOF 429797cf2ee2Smrgvolatile const char * MAGIC_EXE = "$magic_exe"; 42986e7d3316Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 42996e7d3316SmrgEOF 43006e7d3316Smrg 43016e7d3316Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 430297cf2ee2Smrg func_to_host_path "$temp_rpath" 43036e7d3316Smrg cat <<EOF 430497cf2ee2Smrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 4305a966c04fSmrgEOF 4306a966c04fSmrg else 43076e7d3316Smrg cat <<"EOF" 43086e7d3316Smrgconst char * LIB_PATH_VALUE = ""; 43096e7d3316SmrgEOF 4310a966c04fSmrg fi 43116e7d3316Smrg 43126e7d3316Smrg if test -n "$dllsearchpath"; then 431397cf2ee2Smrg func_to_host_path "$dllsearchpath:" 43146e7d3316Smrg cat <<EOF 43156e7d3316Smrgconst char * EXE_PATH_VARNAME = "PATH"; 431697cf2ee2Smrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 43176e7d3316SmrgEOF 4318a966c04fSmrg else 43196e7d3316Smrg cat <<"EOF" 43206e7d3316Smrgconst char * EXE_PATH_VARNAME = ""; 43216e7d3316Smrgconst char * EXE_PATH_VALUE = ""; 43226e7d3316SmrgEOF 4323a966c04fSmrg fi 43246e7d3316Smrg 43256e7d3316Smrg if test "$fast_install" = yes; then 43266e7d3316Smrg cat <<EOF 43276e7d3316Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 43286e7d3316SmrgEOF 4329a966c04fSmrg else 43306e7d3316Smrg cat <<EOF 43316e7d3316Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 43326e7d3316SmrgEOF 4333a966c04fSmrg fi 4334a966c04fSmrg 4335a966c04fSmrg 43366e7d3316Smrg cat <<"EOF" 4337a966c04fSmrg 43386e7d3316Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 4339a966c04fSmrg 43406e7d3316Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 43416e7d3316Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 43426e7d3316Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 4343a966c04fSmrg 43446e7d3316Smrgint 43456e7d3316Smrgmain (int argc, char *argv[]) 43466e7d3316Smrg{ 43476e7d3316Smrg char **newargz; 43486e7d3316Smrg int newargc; 43496e7d3316Smrg char *tmp_pathspec; 43506e7d3316Smrg char *actual_cwrapper_path; 43516e7d3316Smrg char *actual_cwrapper_name; 43526e7d3316Smrg char *target_name; 43536e7d3316Smrg char *lt_argv_zero; 43546e7d3316Smrg intptr_t rval = 127; 4355a966c04fSmrg 43566e7d3316Smrg int i; 4357a966c04fSmrg 43586e7d3316Smrg program_name = (char *) xstrdup (base_name (argv[0])); 43596e7d3316Smrg newargz = XMALLOC (char *, argc + 1); 4360a966c04fSmrg 43616e7d3316Smrg /* very simple arg parsing; don't want to rely on getopt 43626e7d3316Smrg * also, copy all non cwrapper options to newargz, except 43636e7d3316Smrg * argz[0], which is handled differently 43646e7d3316Smrg */ 43656e7d3316Smrg newargc=0; 43666e7d3316Smrg for (i = 1; i < argc; i++) 43676e7d3316Smrg { 43686e7d3316Smrg if (strcmp (argv[i], dumpscript_opt) == 0) 43696e7d3316Smrg { 43706e7d3316SmrgEOF 43716e7d3316Smrg case "$host" in 43726e7d3316Smrg *mingw* | *cygwin* ) 43736e7d3316Smrg # make stdout use "unix" line endings 43746e7d3316Smrg echo " setmode(1,_O_BINARY);" 43756e7d3316Smrg ;; 43762e2dd055Smrg esac 4377a966c04fSmrg 43786e7d3316Smrg cat <<"EOF" 43796e7d3316Smrg lt_dump_script (stdout); 43806e7d3316Smrg return 0; 43816e7d3316Smrg } 43826e7d3316Smrg if (strcmp (argv[i], debug_opt) == 0) 43836e7d3316Smrg { 43846e7d3316Smrg lt_debug = 1; 43856e7d3316Smrg continue; 43866e7d3316Smrg } 43876e7d3316Smrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 43886e7d3316Smrg { 43896e7d3316Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 43906e7d3316Smrg namespace, but it is not one of the ones we know about and 43916e7d3316Smrg have already dealt with, above (inluding dump-script), then 43926e7d3316Smrg report an error. Otherwise, targets might begin to believe 43936e7d3316Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 43946e7d3316Smrg namespace. The first time any user complains about this, we'll 43956e7d3316Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 43966e7d3316Smrg or a configure.ac-settable value. 43976e7d3316Smrg */ 43986e7d3316Smrg lt_fatal (__FILE__, __LINE__, 43996e7d3316Smrg "unrecognized %s option: '%s'", 44006e7d3316Smrg ltwrapper_option_prefix, argv[i]); 44016e7d3316Smrg } 44026e7d3316Smrg /* otherwise ... */ 44036e7d3316Smrg newargz[++newargc] = xstrdup (argv[i]); 44046e7d3316Smrg } 44056e7d3316Smrg newargz[++newargc] = NULL; 4406a966c04fSmrg 44076e7d3316SmrgEOF 44086e7d3316Smrg cat <<EOF 44096e7d3316Smrg /* The GNU banner must be the first non-error debug message */ 44106e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 44116e7d3316SmrgEOF 44126e7d3316Smrg cat <<"EOF" 44136e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 44146e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 44156e7d3316Smrg 44166e7d3316Smrg tmp_pathspec = find_executable (argv[0]); 44176e7d3316Smrg if (tmp_pathspec == NULL) 44186e7d3316Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 44196e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 44206e7d3316Smrg "(main) found exe (before symlink chase) at: %s\n", 44216e7d3316Smrg tmp_pathspec); 44226e7d3316Smrg 44236e7d3316Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 44246e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 44256e7d3316Smrg "(main) found exe (after symlink chase) at: %s\n", 44266e7d3316Smrg actual_cwrapper_path); 44276e7d3316Smrg XFREE (tmp_pathspec); 44286e7d3316Smrg 44296e7d3316Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 44306e7d3316Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 44316e7d3316Smrg 44326e7d3316Smrg /* wrapper name transforms */ 44336e7d3316Smrg strendzap (actual_cwrapper_name, ".exe"); 44346e7d3316Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 44356e7d3316Smrg XFREE (actual_cwrapper_name); 44366e7d3316Smrg actual_cwrapper_name = tmp_pathspec; 44376e7d3316Smrg tmp_pathspec = 0; 44386e7d3316Smrg 44396e7d3316Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 44406e7d3316Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 44416e7d3316Smrg strendzap (target_name, ".exe"); 44426e7d3316Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 44436e7d3316Smrg XFREE (target_name); 44446e7d3316Smrg target_name = tmp_pathspec; 44456e7d3316Smrg tmp_pathspec = 0; 44466e7d3316Smrg 44476e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 44486e7d3316Smrg "(main) libtool target name: %s\n", 44496e7d3316Smrg target_name); 44506e7d3316SmrgEOF 4451a966c04fSmrg 44526e7d3316Smrg cat <<EOF 44536e7d3316Smrg newargz[0] = 44546e7d3316Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 44556e7d3316Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 44566e7d3316Smrg strcpy (newargz[0], actual_cwrapper_path); 44576e7d3316Smrg strcat (newargz[0], "$objdir"); 44586e7d3316Smrg strcat (newargz[0], "/"); 44596e7d3316SmrgEOF 4460a966c04fSmrg 44616e7d3316Smrg cat <<"EOF" 44626e7d3316Smrg /* stop here, and copy so we don't have to do this twice */ 44636e7d3316Smrg tmp_pathspec = xstrdup (newargz[0]); 4464a966c04fSmrg 44656e7d3316Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 44666e7d3316Smrg strcat (newargz[0], actual_cwrapper_name); 4467a966c04fSmrg 44686e7d3316Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 44696e7d3316Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 44706e7d3316Smrg XFREE (tmp_pathspec); 44716e7d3316Smrg tmp_pathspec = NULL; 44726e7d3316SmrgEOF 4473a966c04fSmrg 44746e7d3316Smrg case $host_os in 44756e7d3316Smrg mingw*) 44766e7d3316Smrg cat <<"EOF" 44776e7d3316Smrg { 44786e7d3316Smrg char* p; 44796e7d3316Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 44806e7d3316Smrg { 44816e7d3316Smrg *p = '/'; 44826e7d3316Smrg } 44836e7d3316Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 44846e7d3316Smrg { 44856e7d3316Smrg *p = '/'; 44866e7d3316Smrg } 44876e7d3316Smrg } 44886e7d3316SmrgEOF 44896e7d3316Smrg ;; 44906e7d3316Smrg esac 4491a966c04fSmrg 44926e7d3316Smrg cat <<"EOF" 44936e7d3316Smrg XFREE (target_name); 44946e7d3316Smrg XFREE (actual_cwrapper_path); 44956e7d3316Smrg XFREE (actual_cwrapper_name); 4496a966c04fSmrg 44976e7d3316Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 44986e7d3316Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 449997cf2ee2Smrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 450097cf2ee2Smrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 450197cf2ee2Smrg because on Windows, both *_VARNAMEs are PATH but uninstalled 450297cf2ee2Smrg libraries must come first. */ 45036e7d3316Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 450497cf2ee2Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 4505a966c04fSmrg 45066e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 45076e7d3316Smrg nonnull (lt_argv_zero)); 45086e7d3316Smrg for (i = 0; i < newargc; i++) 45096e7d3316Smrg { 45106e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 45116e7d3316Smrg i, nonnull (newargz[i])); 45126e7d3316Smrg } 4513a966c04fSmrg 45146e7d3316SmrgEOF 4515a966c04fSmrg 45166e7d3316Smrg case $host_os in 45176e7d3316Smrg mingw*) 45186e7d3316Smrg cat <<"EOF" 45196e7d3316Smrg /* execv doesn't actually work on mingw as expected on unix */ 45206e7d3316Smrg newargz = prepare_spawn (newargz); 45216e7d3316Smrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 45226e7d3316Smrg if (rval == -1) 45236e7d3316Smrg { 45246e7d3316Smrg /* failed to start process */ 45256e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 45266e7d3316Smrg "(main) failed to launch target \"%s\": %s\n", 45276e7d3316Smrg lt_argv_zero, nonnull (strerror (errno))); 45286e7d3316Smrg return 127; 45296e7d3316Smrg } 45306e7d3316Smrg return rval; 45316e7d3316SmrgEOF 45326e7d3316Smrg ;; 45336e7d3316Smrg *) 45346e7d3316Smrg cat <<"EOF" 45356e7d3316Smrg execv (lt_argv_zero, newargz); 45366e7d3316Smrg return rval; /* =127, but avoids unused variable warning */ 45376e7d3316SmrgEOF 45386e7d3316Smrg ;; 45396e7d3316Smrg esac 4540a966c04fSmrg 45416e7d3316Smrg cat <<"EOF" 45426e7d3316Smrg} 4543a966c04fSmrg 45446e7d3316Smrgvoid * 45456e7d3316Smrgxmalloc (size_t num) 45466e7d3316Smrg{ 45476e7d3316Smrg void *p = (void *) malloc (num); 45486e7d3316Smrg if (!p) 45496e7d3316Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 4550a966c04fSmrg 45516e7d3316Smrg return p; 45526e7d3316Smrg} 4553a966c04fSmrg 45546e7d3316Smrgchar * 45556e7d3316Smrgxstrdup (const char *string) 45566e7d3316Smrg{ 45576e7d3316Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 45586e7d3316Smrg string) : NULL; 45596e7d3316Smrg} 4560a966c04fSmrg 45616e7d3316Smrgconst char * 45626e7d3316Smrgbase_name (const char *name) 45636e7d3316Smrg{ 45646e7d3316Smrg const char *base; 4565a966c04fSmrg 45666e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 45676e7d3316Smrg /* Skip over the disk name in MSDOS pathnames. */ 45686e7d3316Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 45696e7d3316Smrg name += 2; 45706e7d3316Smrg#endif 4571a966c04fSmrg 45726e7d3316Smrg for (base = name; *name; name++) 45736e7d3316Smrg if (IS_DIR_SEPARATOR (*name)) 45746e7d3316Smrg base = name + 1; 45756e7d3316Smrg return base; 45766e7d3316Smrg} 4577a966c04fSmrg 45786e7d3316Smrgint 45796e7d3316Smrgcheck_executable (const char *path) 45806e7d3316Smrg{ 45816e7d3316Smrg struct stat st; 4582a966c04fSmrg 45836e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 45846e7d3316Smrg nonempty (path)); 45856e7d3316Smrg if ((!path) || (!*path)) 45866e7d3316Smrg return 0; 4587a966c04fSmrg 45886e7d3316Smrg if ((stat (path, &st) >= 0) 45896e7d3316Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 45906e7d3316Smrg return 1; 45916e7d3316Smrg else 45926e7d3316Smrg return 0; 45936e7d3316Smrg} 4594a966c04fSmrg 45956e7d3316Smrgint 45966e7d3316Smrgmake_executable (const char *path) 45976e7d3316Smrg{ 45986e7d3316Smrg int rval = 0; 45996e7d3316Smrg struct stat st; 4600a966c04fSmrg 46016e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 46026e7d3316Smrg nonempty (path)); 46036e7d3316Smrg if ((!path) || (!*path)) 46046e7d3316Smrg return 0; 4605a966c04fSmrg 46066e7d3316Smrg if (stat (path, &st) >= 0) 46076e7d3316Smrg { 46086e7d3316Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 46096e7d3316Smrg } 46106e7d3316Smrg return rval; 46116e7d3316Smrg} 4612a966c04fSmrg 46136e7d3316Smrg/* Searches for the full path of the wrapper. Returns 46146e7d3316Smrg newly allocated full path name if found, NULL otherwise 46156e7d3316Smrg Does not chase symlinks, even on platforms that support them. 46166e7d3316Smrg*/ 46176e7d3316Smrgchar * 46186e7d3316Smrgfind_executable (const char *wrapper) 46196e7d3316Smrg{ 46206e7d3316Smrg int has_slash = 0; 46216e7d3316Smrg const char *p; 46226e7d3316Smrg const char *p_next; 46236e7d3316Smrg /* static buffer for getcwd */ 46246e7d3316Smrg char tmp[LT_PATHMAX + 1]; 46256e7d3316Smrg int tmp_len; 46266e7d3316Smrg char *concat_name; 4627a966c04fSmrg 46286e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 46296e7d3316Smrg nonempty (wrapper)); 4630a966c04fSmrg 46316e7d3316Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 46326e7d3316Smrg return NULL; 4633a966c04fSmrg 46346e7d3316Smrg /* Absolute path? */ 46356e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 46366e7d3316Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 46376e7d3316Smrg { 46386e7d3316Smrg concat_name = xstrdup (wrapper); 46396e7d3316Smrg if (check_executable (concat_name)) 46406e7d3316Smrg return concat_name; 46416e7d3316Smrg XFREE (concat_name); 46426e7d3316Smrg } 46436e7d3316Smrg else 46446e7d3316Smrg { 46456e7d3316Smrg#endif 46466e7d3316Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 46476e7d3316Smrg { 46486e7d3316Smrg concat_name = xstrdup (wrapper); 46496e7d3316Smrg if (check_executable (concat_name)) 46506e7d3316Smrg return concat_name; 46516e7d3316Smrg XFREE (concat_name); 46526e7d3316Smrg } 46536e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 46546e7d3316Smrg } 46556e7d3316Smrg#endif 4656a966c04fSmrg 46576e7d3316Smrg for (p = wrapper; *p; p++) 46586e7d3316Smrg if (*p == '/') 46596e7d3316Smrg { 46606e7d3316Smrg has_slash = 1; 46616e7d3316Smrg break; 46626e7d3316Smrg } 46636e7d3316Smrg if (!has_slash) 46646e7d3316Smrg { 46656e7d3316Smrg /* no slashes; search PATH */ 46666e7d3316Smrg const char *path = getenv ("PATH"); 46676e7d3316Smrg if (path != NULL) 46686e7d3316Smrg { 46696e7d3316Smrg for (p = path; *p; p = p_next) 46706e7d3316Smrg { 46716e7d3316Smrg const char *q; 46726e7d3316Smrg size_t p_len; 46736e7d3316Smrg for (q = p; *q; q++) 46746e7d3316Smrg if (IS_PATH_SEPARATOR (*q)) 46756e7d3316Smrg break; 46766e7d3316Smrg p_len = q - p; 46776e7d3316Smrg p_next = (*q == '\0' ? q : q + 1); 46786e7d3316Smrg if (p_len == 0) 46796e7d3316Smrg { 46806e7d3316Smrg /* empty path: current directory */ 46816e7d3316Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 46826e7d3316Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 46836e7d3316Smrg nonnull (strerror (errno))); 46846e7d3316Smrg tmp_len = strlen (tmp); 46856e7d3316Smrg concat_name = 46866e7d3316Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 46876e7d3316Smrg memcpy (concat_name, tmp, tmp_len); 46886e7d3316Smrg concat_name[tmp_len] = '/'; 46896e7d3316Smrg strcpy (concat_name + tmp_len + 1, wrapper); 46906e7d3316Smrg } 46916e7d3316Smrg else 46926e7d3316Smrg { 46936e7d3316Smrg concat_name = 46946e7d3316Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 46956e7d3316Smrg memcpy (concat_name, p, p_len); 46966e7d3316Smrg concat_name[p_len] = '/'; 46976e7d3316Smrg strcpy (concat_name + p_len + 1, wrapper); 46986e7d3316Smrg } 46996e7d3316Smrg if (check_executable (concat_name)) 47006e7d3316Smrg return concat_name; 47016e7d3316Smrg XFREE (concat_name); 47026e7d3316Smrg } 47036e7d3316Smrg } 47046e7d3316Smrg /* not found in PATH; assume curdir */ 47056e7d3316Smrg } 47066e7d3316Smrg /* Relative path | not found in path: prepend cwd */ 47076e7d3316Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 47086e7d3316Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 47096e7d3316Smrg nonnull (strerror (errno))); 47106e7d3316Smrg tmp_len = strlen (tmp); 47116e7d3316Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 47126e7d3316Smrg memcpy (concat_name, tmp, tmp_len); 47136e7d3316Smrg concat_name[tmp_len] = '/'; 47146e7d3316Smrg strcpy (concat_name + tmp_len + 1, wrapper); 4715a966c04fSmrg 47166e7d3316Smrg if (check_executable (concat_name)) 47176e7d3316Smrg return concat_name; 47186e7d3316Smrg XFREE (concat_name); 47196e7d3316Smrg return NULL; 47206e7d3316Smrg} 4721a966c04fSmrg 47226e7d3316Smrgchar * 47236e7d3316Smrgchase_symlinks (const char *pathspec) 47246e7d3316Smrg{ 47256e7d3316Smrg#ifndef S_ISLNK 47266e7d3316Smrg return xstrdup (pathspec); 47276e7d3316Smrg#else 47286e7d3316Smrg char buf[LT_PATHMAX]; 47296e7d3316Smrg struct stat s; 47306e7d3316Smrg char *tmp_pathspec = xstrdup (pathspec); 47316e7d3316Smrg char *p; 47326e7d3316Smrg int has_symlinks = 0; 47336e7d3316Smrg while (strlen (tmp_pathspec) && !has_symlinks) 47346e7d3316Smrg { 47356e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 47366e7d3316Smrg "checking path component for symlinks: %s\n", 47376e7d3316Smrg tmp_pathspec); 47386e7d3316Smrg if (lstat (tmp_pathspec, &s) == 0) 47396e7d3316Smrg { 47406e7d3316Smrg if (S_ISLNK (s.st_mode) != 0) 47416e7d3316Smrg { 47426e7d3316Smrg has_symlinks = 1; 47436e7d3316Smrg break; 47446e7d3316Smrg } 4745a966c04fSmrg 47466e7d3316Smrg /* search backwards for last DIR_SEPARATOR */ 47476e7d3316Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 47486e7d3316Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 47496e7d3316Smrg p--; 47506e7d3316Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 47516e7d3316Smrg { 47526e7d3316Smrg /* no more DIR_SEPARATORS left */ 47536e7d3316Smrg break; 47546e7d3316Smrg } 47556e7d3316Smrg *p = '\0'; 47566e7d3316Smrg } 47576e7d3316Smrg else 47586e7d3316Smrg { 47596e7d3316Smrg lt_fatal (__FILE__, __LINE__, 47606e7d3316Smrg "error accessing file \"%s\": %s", 47616e7d3316Smrg tmp_pathspec, nonnull (strerror (errno))); 47626e7d3316Smrg } 47636e7d3316Smrg } 47646e7d3316Smrg XFREE (tmp_pathspec); 4765a966c04fSmrg 47666e7d3316Smrg if (!has_symlinks) 47676e7d3316Smrg { 47686e7d3316Smrg return xstrdup (pathspec); 47696e7d3316Smrg } 4770a966c04fSmrg 47716e7d3316Smrg tmp_pathspec = realpath (pathspec, buf); 47726e7d3316Smrg if (tmp_pathspec == 0) 47736e7d3316Smrg { 47746e7d3316Smrg lt_fatal (__FILE__, __LINE__, 47756e7d3316Smrg "could not follow symlinks for %s", pathspec); 47766e7d3316Smrg } 47776e7d3316Smrg return xstrdup (tmp_pathspec); 47786e7d3316Smrg#endif 47796e7d3316Smrg} 4780a966c04fSmrg 47816e7d3316Smrgchar * 47826e7d3316Smrgstrendzap (char *str, const char *pat) 47836e7d3316Smrg{ 47846e7d3316Smrg size_t len, patlen; 4785a966c04fSmrg 47866e7d3316Smrg assert (str != NULL); 47876e7d3316Smrg assert (pat != NULL); 4788a966c04fSmrg 47896e7d3316Smrg len = strlen (str); 47906e7d3316Smrg patlen = strlen (pat); 4791a966c04fSmrg 47926e7d3316Smrg if (patlen <= len) 47936e7d3316Smrg { 47946e7d3316Smrg str += len - patlen; 47956e7d3316Smrg if (strcmp (str, pat) == 0) 47966e7d3316Smrg *str = '\0'; 47976e7d3316Smrg } 47986e7d3316Smrg return str; 47996e7d3316Smrg} 4800a966c04fSmrg 48016e7d3316Smrgvoid 48026e7d3316Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 48036e7d3316Smrg{ 48046e7d3316Smrg va_list args; 48056e7d3316Smrg if (lt_debug) 48066e7d3316Smrg { 48076e7d3316Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 48086e7d3316Smrg va_start (args, fmt); 48096e7d3316Smrg (void) vfprintf (stderr, fmt, args); 48106e7d3316Smrg va_end (args); 48116e7d3316Smrg } 48126e7d3316Smrg} 4813a966c04fSmrg 48146e7d3316Smrgstatic void 48156e7d3316Smrglt_error_core (int exit_status, const char *file, 48166e7d3316Smrg int line, const char *mode, 48176e7d3316Smrg const char *message, va_list ap) 48186e7d3316Smrg{ 48196e7d3316Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 48206e7d3316Smrg vfprintf (stderr, message, ap); 48216e7d3316Smrg fprintf (stderr, ".\n"); 4822a966c04fSmrg 48236e7d3316Smrg if (exit_status >= 0) 48246e7d3316Smrg exit (exit_status); 48256e7d3316Smrg} 4826a966c04fSmrg 48276e7d3316Smrgvoid 48286e7d3316Smrglt_fatal (const char *file, int line, const char *message, ...) 48296e7d3316Smrg{ 48306e7d3316Smrg va_list ap; 48316e7d3316Smrg va_start (ap, message); 48326e7d3316Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 48336e7d3316Smrg va_end (ap); 48346e7d3316Smrg} 4835a966c04fSmrg 48366e7d3316Smrgstatic const char * 48376e7d3316Smrgnonnull (const char *s) 48386e7d3316Smrg{ 48396e7d3316Smrg return s ? s : "(null)"; 48406e7d3316Smrg} 4841a966c04fSmrg 48426e7d3316Smrgstatic const char * 48436e7d3316Smrgnonempty (const char *s) 48446e7d3316Smrg{ 48456e7d3316Smrg return (s && !*s) ? "(empty)" : nonnull (s); 48466e7d3316Smrg} 4847a966c04fSmrg 48486e7d3316Smrgvoid 48496e7d3316Smrglt_setenv (const char *name, const char *value) 48506e7d3316Smrg{ 48516e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 48526e7d3316Smrg "(lt_setenv) setting '%s' to '%s'\n", 48536e7d3316Smrg nonnull (name), nonnull (value)); 48546e7d3316Smrg { 48556e7d3316Smrg#ifdef HAVE_SETENV 48566e7d3316Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 48576e7d3316Smrg char *str = xstrdup (value); 48586e7d3316Smrg setenv (name, str, 1); 48596e7d3316Smrg#else 48606e7d3316Smrg int len = strlen (name) + 1 + strlen (value) + 1; 48616e7d3316Smrg char *str = XMALLOC (char, len); 48626e7d3316Smrg sprintf (str, "%s=%s", name, value); 48636e7d3316Smrg if (putenv (str) != EXIT_SUCCESS) 48646e7d3316Smrg { 48656e7d3316Smrg XFREE (str); 48666e7d3316Smrg } 48676e7d3316Smrg#endif 48686e7d3316Smrg } 48696e7d3316Smrg} 4870a966c04fSmrg 48716e7d3316Smrgchar * 48726e7d3316Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 48736e7d3316Smrg{ 48746e7d3316Smrg char *new_value; 48756e7d3316Smrg if (orig_value && *orig_value) 48766e7d3316Smrg { 48776e7d3316Smrg int orig_value_len = strlen (orig_value); 48786e7d3316Smrg int add_len = strlen (add); 48796e7d3316Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 48806e7d3316Smrg if (to_end) 48816e7d3316Smrg { 48826e7d3316Smrg strcpy (new_value, orig_value); 48836e7d3316Smrg strcpy (new_value + orig_value_len, add); 48846e7d3316Smrg } 48856e7d3316Smrg else 48866e7d3316Smrg { 48876e7d3316Smrg strcpy (new_value, add); 48886e7d3316Smrg strcpy (new_value + add_len, orig_value); 48896e7d3316Smrg } 48906e7d3316Smrg } 48916e7d3316Smrg else 48926e7d3316Smrg { 48936e7d3316Smrg new_value = xstrdup (add); 48946e7d3316Smrg } 48956e7d3316Smrg return new_value; 48966e7d3316Smrg} 4897a966c04fSmrg 48986e7d3316Smrgvoid 48996e7d3316Smrglt_update_exe_path (const char *name, const char *value) 49006e7d3316Smrg{ 49016e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 49026e7d3316Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 49036e7d3316Smrg nonnull (name), nonnull (value)); 4904a966c04fSmrg 49056e7d3316Smrg if (name && *name && value && *value) 49066e7d3316Smrg { 49076e7d3316Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 49086e7d3316Smrg /* some systems can't cope with a ':'-terminated path #' */ 49096e7d3316Smrg int len = strlen (new_value); 49106e7d3316Smrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 49116e7d3316Smrg { 49126e7d3316Smrg new_value[len-1] = '\0'; 49136e7d3316Smrg } 49146e7d3316Smrg lt_setenv (name, new_value); 49156e7d3316Smrg XFREE (new_value); 49166e7d3316Smrg } 49176e7d3316Smrg} 4918a966c04fSmrg 49196e7d3316Smrgvoid 49206e7d3316Smrglt_update_lib_path (const char *name, const char *value) 49216e7d3316Smrg{ 49226e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 49236e7d3316Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 49246e7d3316Smrg nonnull (name), nonnull (value)); 4925a966c04fSmrg 49266e7d3316Smrg if (name && *name && value && *value) 49276e7d3316Smrg { 49286e7d3316Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 49296e7d3316Smrg lt_setenv (name, new_value); 49306e7d3316Smrg XFREE (new_value); 49316e7d3316Smrg } 49326e7d3316Smrg} 4933a966c04fSmrg 49346e7d3316SmrgEOF 49356e7d3316Smrg case $host_os in 49366e7d3316Smrg mingw*) 49376e7d3316Smrg cat <<"EOF" 49386e7d3316Smrg 49396e7d3316Smrg/* Prepares an argument vector before calling spawn(). 49406e7d3316Smrg Note that spawn() does not by itself call the command interpreter 49416e7d3316Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 49426e7d3316Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 49436e7d3316Smrg GetVersionEx(&v); 49446e7d3316Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 49456e7d3316Smrg }) ? "cmd.exe" : "command.com"). 49466e7d3316Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 49476e7d3316Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 49486e7d3316Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 49496e7d3316Smrg special way: 49506e7d3316Smrg - Space and tab are interpreted as delimiters. They are not treated as 49516e7d3316Smrg delimiters if they are surrounded by double quotes: "...". 49526e7d3316Smrg - Unescaped double quotes are removed from the input. Their only effect is 49536e7d3316Smrg that within double quotes, space and tab are treated like normal 49546e7d3316Smrg characters. 49556e7d3316Smrg - Backslashes not followed by double quotes are not special. 49566e7d3316Smrg - But 2*n+1 backslashes followed by a double quote become 49576e7d3316Smrg n backslashes followed by a double quote (n >= 0): 49586e7d3316Smrg \" -> " 49596e7d3316Smrg \\\" -> \" 49606e7d3316Smrg \\\\\" -> \\" 49616e7d3316Smrg */ 49626e7d3316Smrg#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" 49636e7d3316Smrg#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" 49646e7d3316Smrgchar ** 49656e7d3316Smrgprepare_spawn (char **argv) 49666e7d3316Smrg{ 49676e7d3316Smrg size_t argc; 49686e7d3316Smrg char **new_argv; 49696e7d3316Smrg size_t i; 4970a966c04fSmrg 49716e7d3316Smrg /* Count number of arguments. */ 49726e7d3316Smrg for (argc = 0; argv[argc] != NULL; argc++) 49736e7d3316Smrg ; 4974a966c04fSmrg 49756e7d3316Smrg /* Allocate new argument vector. */ 49766e7d3316Smrg new_argv = XMALLOC (char *, argc + 1); 4977a966c04fSmrg 49786e7d3316Smrg /* Put quoted arguments into the new argument vector. */ 49796e7d3316Smrg for (i = 0; i < argc; i++) 49806e7d3316Smrg { 49816e7d3316Smrg const char *string = argv[i]; 49826e7d3316Smrg 49836e7d3316Smrg if (string[0] == '\0') 49846e7d3316Smrg new_argv[i] = xstrdup ("\"\""); 49856e7d3316Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 49866e7d3316Smrg { 49876e7d3316Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 49886e7d3316Smrg size_t length; 49896e7d3316Smrg unsigned int backslashes; 49906e7d3316Smrg const char *s; 49916e7d3316Smrg char *quoted_string; 49926e7d3316Smrg char *p; 49936e7d3316Smrg 49946e7d3316Smrg length = 0; 49956e7d3316Smrg backslashes = 0; 49966e7d3316Smrg if (quote_around) 49976e7d3316Smrg length++; 49986e7d3316Smrg for (s = string; *s != '\0'; s++) 49996e7d3316Smrg { 50006e7d3316Smrg char c = *s; 50016e7d3316Smrg if (c == '"') 50026e7d3316Smrg length += backslashes + 1; 50036e7d3316Smrg length++; 50046e7d3316Smrg if (c == '\\') 50056e7d3316Smrg backslashes++; 50066e7d3316Smrg else 50076e7d3316Smrg backslashes = 0; 50086e7d3316Smrg } 50096e7d3316Smrg if (quote_around) 50106e7d3316Smrg length += backslashes + 1; 50116e7d3316Smrg 50126e7d3316Smrg quoted_string = XMALLOC (char, length + 1); 50136e7d3316Smrg 50146e7d3316Smrg p = quoted_string; 50156e7d3316Smrg backslashes = 0; 50166e7d3316Smrg if (quote_around) 50176e7d3316Smrg *p++ = '"'; 50186e7d3316Smrg for (s = string; *s != '\0'; s++) 50196e7d3316Smrg { 50206e7d3316Smrg char c = *s; 50216e7d3316Smrg if (c == '"') 50226e7d3316Smrg { 50236e7d3316Smrg unsigned int j; 50246e7d3316Smrg for (j = backslashes + 1; j > 0; j--) 50256e7d3316Smrg *p++ = '\\'; 50266e7d3316Smrg } 50276e7d3316Smrg *p++ = c; 50286e7d3316Smrg if (c == '\\') 50296e7d3316Smrg backslashes++; 50306e7d3316Smrg else 50316e7d3316Smrg backslashes = 0; 50326e7d3316Smrg } 50336e7d3316Smrg if (quote_around) 50346e7d3316Smrg { 50356e7d3316Smrg unsigned int j; 50366e7d3316Smrg for (j = backslashes; j > 0; j--) 50376e7d3316Smrg *p++ = '\\'; 50386e7d3316Smrg *p++ = '"'; 50396e7d3316Smrg } 50406e7d3316Smrg *p = '\0'; 5041a966c04fSmrg 50426e7d3316Smrg new_argv[i] = quoted_string; 50436e7d3316Smrg } 50446e7d3316Smrg else 50456e7d3316Smrg new_argv[i] = (char *) string; 50466e7d3316Smrg } 50476e7d3316Smrg new_argv[argc] = NULL; 5048a966c04fSmrg 50496e7d3316Smrg return new_argv; 50506e7d3316Smrg} 50516e7d3316SmrgEOF 5052a966c04fSmrg ;; 50536e7d3316Smrg esac 5054a966c04fSmrg 50556e7d3316Smrg cat <<"EOF" 50566e7d3316Smrgvoid lt_dump_script (FILE* f) 50576e7d3316Smrg{ 50586e7d3316SmrgEOF 50596e7d3316Smrg func_emit_wrapper yes | 50606e7d3316Smrg $SED -e 's/\([\\"]\)/\\\1/g' \ 50616e7d3316Smrg -e 's/^/ fputs ("/' -e 's/$/\\n", f);/' 5062a966c04fSmrg 50636e7d3316Smrg cat <<"EOF" 50646e7d3316Smrg} 50656e7d3316SmrgEOF 50666e7d3316Smrg} 50676e7d3316Smrg# end: func_emit_cwrapperexe_src 5068a966c04fSmrg 50696e7d3316Smrg# func_win32_import_lib_p ARG 50706e7d3316Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 50716e7d3316Smrgfunc_win32_import_lib_p () 50726e7d3316Smrg{ 50736e7d3316Smrg $opt_debug 50746e7d3316Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 50756e7d3316Smrg *import*) : ;; 50766e7d3316Smrg *) false ;; 50776e7d3316Smrg esac 50786e7d3316Smrg} 5079a966c04fSmrg 50806e7d3316Smrg# func_mode_link arg... 50816e7d3316Smrgfunc_mode_link () 50826e7d3316Smrg{ 50836e7d3316Smrg $opt_debug 50846e7d3316Smrg case $host in 50856e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 50866e7d3316Smrg # It is impossible to link a dll without this setting, and 50876e7d3316Smrg # we shouldn't force the makefile maintainer to figure out 50886e7d3316Smrg # which system we are compiling for in order to pass an extra 50896e7d3316Smrg # flag for every libtool invocation. 50906e7d3316Smrg # allow_undefined=no 5091a966c04fSmrg 50926e7d3316Smrg # FIXME: Unfortunately, there are problems with the above when trying 50936e7d3316Smrg # to make a dll which has undefined symbols, in which case not 50946e7d3316Smrg # even a static library is built. For now, we need to specify 50956e7d3316Smrg # -no-undefined on the libtool link line when we can be certain 50966e7d3316Smrg # that all symbols are satisfied, otherwise we get a static library. 50976e7d3316Smrg allow_undefined=yes 50986e7d3316Smrg ;; 50996e7d3316Smrg *) 51006e7d3316Smrg allow_undefined=yes 51016e7d3316Smrg ;; 51026e7d3316Smrg esac 51036e7d3316Smrg libtool_args=$nonopt 51046e7d3316Smrg base_compile="$nonopt $@" 51056e7d3316Smrg compile_command=$nonopt 51066e7d3316Smrg finalize_command=$nonopt 5107a966c04fSmrg 51086e7d3316Smrg compile_rpath= 51096e7d3316Smrg finalize_rpath= 51106e7d3316Smrg compile_shlibpath= 51116e7d3316Smrg finalize_shlibpath= 51126e7d3316Smrg convenience= 51136e7d3316Smrg old_convenience= 51146e7d3316Smrg deplibs= 51156e7d3316Smrg old_deplibs= 51166e7d3316Smrg compiler_flags= 51176e7d3316Smrg linker_flags= 51186e7d3316Smrg dllsearchpath= 51196e7d3316Smrg lib_search_path=`pwd` 51206e7d3316Smrg inst_prefix_dir= 51216e7d3316Smrg new_inherited_linker_flags= 5122a966c04fSmrg 51236e7d3316Smrg avoid_version=no 51246e7d3316Smrg bindir= 51256e7d3316Smrg dlfiles= 51266e7d3316Smrg dlprefiles= 51276e7d3316Smrg dlself=no 51286e7d3316Smrg export_dynamic=no 51296e7d3316Smrg export_symbols= 51306e7d3316Smrg export_symbols_regex= 51316e7d3316Smrg generated= 51326e7d3316Smrg libobjs= 51336e7d3316Smrg ltlibs= 51346e7d3316Smrg module=no 51356e7d3316Smrg no_install=no 51366e7d3316Smrg objs= 51376e7d3316Smrg non_pic_objects= 51386e7d3316Smrg precious_files_regex= 51396e7d3316Smrg prefer_static_libs=no 51406e7d3316Smrg preload=no 51416e7d3316Smrg prev= 51426e7d3316Smrg prevarg= 51436e7d3316Smrg release= 51446e7d3316Smrg rpath= 51456e7d3316Smrg xrpath= 51466e7d3316Smrg perm_rpath= 51476e7d3316Smrg temp_rpath= 51486e7d3316Smrg thread_safe=no 51496e7d3316Smrg vinfo= 51506e7d3316Smrg vinfo_number=no 51516e7d3316Smrg weak_libs= 51526e7d3316Smrg single_module="${wl}-single_module" 51536e7d3316Smrg func_infer_tag $base_compile 5154a966c04fSmrg 51556e7d3316Smrg # We need to know -static, to get the right output filenames. 51566e7d3316Smrg for arg 51576e7d3316Smrg do 51586e7d3316Smrg case $arg in 51596e7d3316Smrg -shared) 51606e7d3316Smrg test "$build_libtool_libs" != yes && \ 51616e7d3316Smrg func_fatal_configuration "can not build a shared library" 51626e7d3316Smrg build_old_libs=no 51636e7d3316Smrg break 51646e7d3316Smrg ;; 51656e7d3316Smrg -all-static | -static | -static-libtool-libs) 51666e7d3316Smrg case $arg in 51676e7d3316Smrg -all-static) 51686e7d3316Smrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 51696e7d3316Smrg func_warning "complete static linking is impossible in this configuration" 51706e7d3316Smrg fi 51716e7d3316Smrg if test -n "$link_static_flag"; then 51726e7d3316Smrg dlopen_self=$dlopen_self_static 51736e7d3316Smrg fi 51746e7d3316Smrg prefer_static_libs=yes 51756e7d3316Smrg ;; 51766e7d3316Smrg -static) 51776e7d3316Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 51786e7d3316Smrg dlopen_self=$dlopen_self_static 51796e7d3316Smrg fi 51806e7d3316Smrg prefer_static_libs=built 51816e7d3316Smrg ;; 51826e7d3316Smrg -static-libtool-libs) 51836e7d3316Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 51846e7d3316Smrg dlopen_self=$dlopen_self_static 51856e7d3316Smrg fi 51866e7d3316Smrg prefer_static_libs=yes 51876e7d3316Smrg ;; 51886e7d3316Smrg esac 51896e7d3316Smrg build_libtool_libs=no 51906e7d3316Smrg build_old_libs=yes 51916e7d3316Smrg break 51926e7d3316Smrg ;; 51936e7d3316Smrg esac 51946e7d3316Smrg done 5195a966c04fSmrg 51966e7d3316Smrg # See if our shared archives depend on static archives. 51976e7d3316Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 5198a966c04fSmrg 51996e7d3316Smrg # Go through the arguments, transforming them on the way. 52006e7d3316Smrg while test "$#" -gt 0; do 52016e7d3316Smrg arg="$1" 52026e7d3316Smrg shift 52036e7d3316Smrg func_quote_for_eval "$arg" 52046e7d3316Smrg qarg=$func_quote_for_eval_unquoted_result 52056e7d3316Smrg func_append libtool_args " $func_quote_for_eval_result" 5206a966c04fSmrg 52076e7d3316Smrg # If the previous option needs an argument, assign it. 52086e7d3316Smrg if test -n "$prev"; then 52096e7d3316Smrg case $prev in 52106e7d3316Smrg output) 52116e7d3316Smrg func_append compile_command " @OUTPUT@" 52126e7d3316Smrg func_append finalize_command " @OUTPUT@" 52136e7d3316Smrg ;; 52146e7d3316Smrg esac 5215a966c04fSmrg 52166e7d3316Smrg case $prev in 52176e7d3316Smrg bindir) 52186e7d3316Smrg bindir="$arg" 52196e7d3316Smrg prev= 52206e7d3316Smrg continue 52216e7d3316Smrg ;; 52226e7d3316Smrg dlfiles|dlprefiles) 52236e7d3316Smrg if test "$preload" = no; then 52246e7d3316Smrg # Add the symbol object into the linking commands. 52256e7d3316Smrg func_append compile_command " @SYMFILE@" 52266e7d3316Smrg func_append finalize_command " @SYMFILE@" 52276e7d3316Smrg preload=yes 5228a966c04fSmrg fi 52296e7d3316Smrg case $arg in 52306e7d3316Smrg *.la | *.lo) ;; # We handle these cases below. 52316e7d3316Smrg force) 52326e7d3316Smrg if test "$dlself" = no; then 52336e7d3316Smrg dlself=needless 52346e7d3316Smrg export_dynamic=yes 5235a966c04fSmrg fi 52366e7d3316Smrg prev= 52376e7d3316Smrg continue 52386e7d3316Smrg ;; 52396e7d3316Smrg self) 52406e7d3316Smrg if test "$prev" = dlprefiles; then 52416e7d3316Smrg dlself=yes 52426e7d3316Smrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 52436e7d3316Smrg dlself=yes 5244a966c04fSmrg else 52456e7d3316Smrg dlself=needless 52466e7d3316Smrg export_dynamic=yes 5247a966c04fSmrg fi 52486e7d3316Smrg prev= 52496e7d3316Smrg continue 52506e7d3316Smrg ;; 52516e7d3316Smrg *) 52526e7d3316Smrg if test "$prev" = dlfiles; then 525397cf2ee2Smrg func_append dlfiles " $arg" 5254a966c04fSmrg else 525597cf2ee2Smrg func_append dlprefiles " $arg" 5256a966c04fSmrg fi 52576e7d3316Smrg prev= 52586e7d3316Smrg continue 52596e7d3316Smrg ;; 52606e7d3316Smrg esac 52616e7d3316Smrg ;; 52626e7d3316Smrg expsyms) 52636e7d3316Smrg export_symbols="$arg" 52646e7d3316Smrg test -f "$arg" \ 52656e7d3316Smrg || func_fatal_error "symbol file \`$arg' does not exist" 52666e7d3316Smrg prev= 52676e7d3316Smrg continue 52686e7d3316Smrg ;; 52696e7d3316Smrg expsyms_regex) 52706e7d3316Smrg export_symbols_regex="$arg" 52716e7d3316Smrg prev= 52726e7d3316Smrg continue 52736e7d3316Smrg ;; 52746e7d3316Smrg framework) 5275a966c04fSmrg case $host in 52766e7d3316Smrg *-*-darwin*) 52776e7d3316Smrg case "$deplibs " in 52786e7d3316Smrg *" $qarg.ltframework "*) ;; 527997cf2ee2Smrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 52806e7d3316Smrg ;; 52816e7d3316Smrg esac 52826e7d3316Smrg ;; 5283a966c04fSmrg esac 52846e7d3316Smrg prev= 52856e7d3316Smrg continue 5286a966c04fSmrg ;; 52876e7d3316Smrg inst_prefix) 52886e7d3316Smrg inst_prefix_dir="$arg" 52896e7d3316Smrg prev= 52906e7d3316Smrg continue 5291a966c04fSmrg ;; 52926e7d3316Smrg objectlist) 52936e7d3316Smrg if test -f "$arg"; then 52946e7d3316Smrg save_arg=$arg 52956e7d3316Smrg moreargs= 52966e7d3316Smrg for fil in `cat "$save_arg"` 52976e7d3316Smrg do 529897cf2ee2Smrg# func_append moreargs " $fil" 52996e7d3316Smrg arg=$fil 53006e7d3316Smrg # A libtool-controlled object. 5301a966c04fSmrg 53026e7d3316Smrg # Check to see that this really is a libtool object. 53036e7d3316Smrg if func_lalib_unsafe_p "$arg"; then 53046e7d3316Smrg pic_object= 53056e7d3316Smrg non_pic_object= 5306a966c04fSmrg 53076e7d3316Smrg # Read the .lo file 53086e7d3316Smrg func_source "$arg" 5309a966c04fSmrg 53106e7d3316Smrg if test -z "$pic_object" || 53116e7d3316Smrg test -z "$non_pic_object" || 53126e7d3316Smrg test "$pic_object" = none && 53136e7d3316Smrg test "$non_pic_object" = none; then 53146e7d3316Smrg func_fatal_error "cannot find name of object for \`$arg'" 53156e7d3316Smrg fi 5316a966c04fSmrg 53176e7d3316Smrg # Extract subdirectory from the argument. 53186e7d3316Smrg func_dirname "$arg" "/" "" 53196e7d3316Smrg xdir="$func_dirname_result" 5320a966c04fSmrg 53216e7d3316Smrg if test "$pic_object" != none; then 53226e7d3316Smrg # Prepend the subdirectory the object is found in. 53236e7d3316Smrg pic_object="$xdir$pic_object" 5324a966c04fSmrg 53256e7d3316Smrg if test "$prev" = dlfiles; then 53266e7d3316Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 532797cf2ee2Smrg func_append dlfiles " $pic_object" 53286e7d3316Smrg prev= 53296e7d3316Smrg continue 53306e7d3316Smrg else 53316e7d3316Smrg # If libtool objects are unsupported, then we need to preload. 53326e7d3316Smrg prev=dlprefiles 53336e7d3316Smrg fi 53346e7d3316Smrg fi 5335a966c04fSmrg 53366e7d3316Smrg # CHECK ME: I think I busted this. -Ossama 53376e7d3316Smrg if test "$prev" = dlprefiles; then 53386e7d3316Smrg # Preload the old-style object. 533997cf2ee2Smrg func_append dlprefiles " $pic_object" 53406e7d3316Smrg prev= 53416e7d3316Smrg fi 5342a966c04fSmrg 53436e7d3316Smrg # A PIC object. 53446e7d3316Smrg func_append libobjs " $pic_object" 53456e7d3316Smrg arg="$pic_object" 53466e7d3316Smrg fi 5347a966c04fSmrg 53486e7d3316Smrg # Non-PIC object. 53496e7d3316Smrg if test "$non_pic_object" != none; then 53506e7d3316Smrg # Prepend the subdirectory the object is found in. 53516e7d3316Smrg non_pic_object="$xdir$non_pic_object" 5352a966c04fSmrg 53536e7d3316Smrg # A standard non-PIC object 53546e7d3316Smrg func_append non_pic_objects " $non_pic_object" 53556e7d3316Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 53566e7d3316Smrg arg="$non_pic_object" 53576e7d3316Smrg fi 53586e7d3316Smrg else 53596e7d3316Smrg # If the PIC object exists, use it instead. 53606e7d3316Smrg # $xdir was prepended to $pic_object above. 53616e7d3316Smrg non_pic_object="$pic_object" 53626e7d3316Smrg func_append non_pic_objects " $non_pic_object" 53636e7d3316Smrg fi 53646e7d3316Smrg else 53656e7d3316Smrg # Only an error if not doing a dry-run. 53666e7d3316Smrg if $opt_dry_run; then 53676e7d3316Smrg # Extract subdirectory from the argument. 53686e7d3316Smrg func_dirname "$arg" "/" "" 53696e7d3316Smrg xdir="$func_dirname_result" 53706e7d3316Smrg 53716e7d3316Smrg func_lo2o "$arg" 53726e7d3316Smrg pic_object=$xdir$objdir/$func_lo2o_result 53736e7d3316Smrg non_pic_object=$xdir$func_lo2o_result 53746e7d3316Smrg func_append libobjs " $pic_object" 53756e7d3316Smrg func_append non_pic_objects " $non_pic_object" 53766e7d3316Smrg else 53776e7d3316Smrg func_fatal_error "\`$arg' is not a valid libtool object" 53786e7d3316Smrg fi 53796e7d3316Smrg fi 53806e7d3316Smrg done 5381a966c04fSmrg else 53826e7d3316Smrg func_fatal_error "link input file \`$arg' does not exist" 5383a966c04fSmrg fi 53846e7d3316Smrg arg=$save_arg 53856e7d3316Smrg prev= 53866e7d3316Smrg continue 53876e7d3316Smrg ;; 53886e7d3316Smrg precious_regex) 53896e7d3316Smrg precious_files_regex="$arg" 53906e7d3316Smrg prev= 53916e7d3316Smrg continue 53926e7d3316Smrg ;; 53936e7d3316Smrg release) 53946e7d3316Smrg release="-$arg" 53956e7d3316Smrg prev= 53966e7d3316Smrg continue 53976e7d3316Smrg ;; 53986e7d3316Smrg rpath | xrpath) 53996e7d3316Smrg # We need an absolute path. 54006e7d3316Smrg case $arg in 54016e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 54026e7d3316Smrg *) 54036e7d3316Smrg func_fatal_error "only absolute run-paths are allowed" 54046e7d3316Smrg ;; 54056e7d3316Smrg esac 54066e7d3316Smrg if test "$prev" = rpath; then 54076e7d3316Smrg case "$rpath " in 54086e7d3316Smrg *" $arg "*) ;; 540997cf2ee2Smrg *) func_append rpath " $arg" ;; 54106e7d3316Smrg esac 5411a966c04fSmrg else 54126e7d3316Smrg case "$xrpath " in 54136e7d3316Smrg *" $arg "*) ;; 541497cf2ee2Smrg *) func_append xrpath " $arg" ;; 54156e7d3316Smrg esac 5416a966c04fSmrg fi 54176e7d3316Smrg prev= 54186e7d3316Smrg continue 54196e7d3316Smrg ;; 54206e7d3316Smrg shrext) 54216e7d3316Smrg shrext_cmds="$arg" 54226e7d3316Smrg prev= 54236e7d3316Smrg continue 54246e7d3316Smrg ;; 54256e7d3316Smrg weak) 542697cf2ee2Smrg func_append weak_libs " $arg" 54276e7d3316Smrg prev= 54286e7d3316Smrg continue 54296e7d3316Smrg ;; 54306e7d3316Smrg xcclinker) 543197cf2ee2Smrg func_append linker_flags " $qarg" 543297cf2ee2Smrg func_append compiler_flags " $qarg" 54336e7d3316Smrg prev= 54346e7d3316Smrg func_append compile_command " $qarg" 54356e7d3316Smrg func_append finalize_command " $qarg" 54366e7d3316Smrg continue 54376e7d3316Smrg ;; 54386e7d3316Smrg xcompiler) 543997cf2ee2Smrg func_append compiler_flags " $qarg" 54406e7d3316Smrg prev= 54416e7d3316Smrg func_append compile_command " $qarg" 54426e7d3316Smrg func_append finalize_command " $qarg" 54436e7d3316Smrg continue 54446e7d3316Smrg ;; 54456e7d3316Smrg xlinker) 544697cf2ee2Smrg func_append linker_flags " $qarg" 544797cf2ee2Smrg func_append compiler_flags " $wl$qarg" 54486e7d3316Smrg prev= 54496e7d3316Smrg func_append compile_command " $wl$qarg" 54506e7d3316Smrg func_append finalize_command " $wl$qarg" 54516e7d3316Smrg continue 54526e7d3316Smrg ;; 54536e7d3316Smrg *) 54546e7d3316Smrg eval "$prev=\"\$arg\"" 54556e7d3316Smrg prev= 54566e7d3316Smrg continue 54576e7d3316Smrg ;; 5458a966c04fSmrg esac 54596e7d3316Smrg fi # test -n "$prev" 5460a966c04fSmrg 54616e7d3316Smrg prevarg="$arg" 5462a966c04fSmrg 54636e7d3316Smrg case $arg in 54646e7d3316Smrg -all-static) 54656e7d3316Smrg if test -n "$link_static_flag"; then 54666e7d3316Smrg # See comment for -static flag below, for more details. 54676e7d3316Smrg func_append compile_command " $link_static_flag" 54686e7d3316Smrg func_append finalize_command " $link_static_flag" 54696e7d3316Smrg fi 54706e7d3316Smrg continue 54716e7d3316Smrg ;; 5472a966c04fSmrg 54736e7d3316Smrg -allow-undefined) 54746e7d3316Smrg # FIXME: remove this flag sometime in the future. 54756e7d3316Smrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 54766e7d3316Smrg ;; 5477a966c04fSmrg 54786e7d3316Smrg -avoid-version) 54796e7d3316Smrg avoid_version=yes 54806e7d3316Smrg continue 54816e7d3316Smrg ;; 5482a966c04fSmrg 54836e7d3316Smrg -bindir) 54846e7d3316Smrg prev=bindir 54856e7d3316Smrg continue 54866e7d3316Smrg ;; 5487a966c04fSmrg 54886e7d3316Smrg -dlopen) 54896e7d3316Smrg prev=dlfiles 54906e7d3316Smrg continue 54916e7d3316Smrg ;; 5492a966c04fSmrg 54936e7d3316Smrg -dlpreopen) 54946e7d3316Smrg prev=dlprefiles 54956e7d3316Smrg continue 54966e7d3316Smrg ;; 5497a966c04fSmrg 54986e7d3316Smrg -export-dynamic) 54996e7d3316Smrg export_dynamic=yes 55006e7d3316Smrg continue 55016e7d3316Smrg ;; 5502a966c04fSmrg 55036e7d3316Smrg -export-symbols | -export-symbols-regex) 55046e7d3316Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 55056e7d3316Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 55066e7d3316Smrg fi 55076e7d3316Smrg if test "X$arg" = "X-export-symbols"; then 55086e7d3316Smrg prev=expsyms 55096e7d3316Smrg else 55106e7d3316Smrg prev=expsyms_regex 55116e7d3316Smrg fi 55126e7d3316Smrg continue 55136e7d3316Smrg ;; 5514a966c04fSmrg 55156e7d3316Smrg -framework) 55166e7d3316Smrg prev=framework 55176e7d3316Smrg continue 55186e7d3316Smrg ;; 5519a966c04fSmrg 55206e7d3316Smrg -inst-prefix-dir) 55216e7d3316Smrg prev=inst_prefix 55226e7d3316Smrg continue 55236e7d3316Smrg ;; 5524a966c04fSmrg 55256e7d3316Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 55266e7d3316Smrg # so, if we see these flags be careful not to treat them like -L 55276e7d3316Smrg -L[A-Z][A-Z]*:*) 55286e7d3316Smrg case $with_gcc/$host in 55296e7d3316Smrg no/*-*-irix* | /*-*-irix*) 55306e7d3316Smrg func_append compile_command " $arg" 55316e7d3316Smrg func_append finalize_command " $arg" 55326e7d3316Smrg ;; 55336e7d3316Smrg esac 55346e7d3316Smrg continue 55356e7d3316Smrg ;; 5536a966c04fSmrg 55376e7d3316Smrg -L*) 553897cf2ee2Smrg func_stripname "-L" '' "$arg" 553997cf2ee2Smrg if test -z "$func_stripname_result"; then 55406e7d3316Smrg if test "$#" -gt 0; then 55416e7d3316Smrg func_fatal_error "require no space between \`-L' and \`$1'" 55426e7d3316Smrg else 55436e7d3316Smrg func_fatal_error "need path for \`-L' option" 55446e7d3316Smrg fi 55456e7d3316Smrg fi 554697cf2ee2Smrg func_resolve_sysroot "$func_stripname_result" 554797cf2ee2Smrg dir=$func_resolve_sysroot_result 55486e7d3316Smrg # We need an absolute path. 55496e7d3316Smrg case $dir in 55506e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 55516e7d3316Smrg *) 55526e7d3316Smrg absdir=`cd "$dir" && pwd` 55536e7d3316Smrg test -z "$absdir" && \ 55546e7d3316Smrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 55556e7d3316Smrg dir="$absdir" 55566e7d3316Smrg ;; 55576e7d3316Smrg esac 55586e7d3316Smrg case "$deplibs " in 555997cf2ee2Smrg *" -L$dir "* | *" $arg "*) 556097cf2ee2Smrg # Will only happen for absolute or sysroot arguments 556197cf2ee2Smrg ;; 55626e7d3316Smrg *) 556397cf2ee2Smrg # Preserve sysroot, but never include relative directories 556497cf2ee2Smrg case $dir in 556597cf2ee2Smrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 556697cf2ee2Smrg *) func_append deplibs " -L$dir" ;; 556797cf2ee2Smrg esac 556897cf2ee2Smrg func_append lib_search_path " $dir" 55696e7d3316Smrg ;; 55706e7d3316Smrg esac 55716e7d3316Smrg case $host in 55726e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 55736e7d3316Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 55746e7d3316Smrg case :$dllsearchpath: in 55756e7d3316Smrg *":$dir:"*) ;; 55766e7d3316Smrg ::) dllsearchpath=$dir;; 557797cf2ee2Smrg *) func_append dllsearchpath ":$dir";; 55786e7d3316Smrg esac 55796e7d3316Smrg case :$dllsearchpath: in 55806e7d3316Smrg *":$testbindir:"*) ;; 55816e7d3316Smrg ::) dllsearchpath=$testbindir;; 558297cf2ee2Smrg *) func_append dllsearchpath ":$testbindir";; 55836e7d3316Smrg esac 55846e7d3316Smrg ;; 55856e7d3316Smrg esac 55866e7d3316Smrg continue 55876e7d3316Smrg ;; 5588a966c04fSmrg 55896e7d3316Smrg -l*) 55906e7d3316Smrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 55916e7d3316Smrg case $host in 55926e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 55936e7d3316Smrg # These systems don't actually have a C or math library (as such) 55946e7d3316Smrg continue 55956e7d3316Smrg ;; 55966e7d3316Smrg *-*-os2*) 55976e7d3316Smrg # These systems don't actually have a C library (as such) 55986e7d3316Smrg test "X$arg" = "X-lc" && continue 55996e7d3316Smrg ;; 56006e7d3316Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 56016e7d3316Smrg # Do not include libc due to us having libc/libc_r. 56026e7d3316Smrg test "X$arg" = "X-lc" && continue 56036e7d3316Smrg ;; 56046e7d3316Smrg *-*-rhapsody* | *-*-darwin1.[012]) 56056e7d3316Smrg # Rhapsody C and math libraries are in the System framework 560697cf2ee2Smrg func_append deplibs " System.ltframework" 56076e7d3316Smrg continue 56086e7d3316Smrg ;; 56096e7d3316Smrg *-*-sco3.2v5* | *-*-sco5v6*) 56106e7d3316Smrg # Causes problems with __ctype 56116e7d3316Smrg test "X$arg" = "X-lc" && continue 56126e7d3316Smrg ;; 56136e7d3316Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 56146e7d3316Smrg # Compiler inserts libc in the correct place for threads to work 56156e7d3316Smrg test "X$arg" = "X-lc" && continue 56166e7d3316Smrg ;; 56176e7d3316Smrg esac 56186e7d3316Smrg elif test "X$arg" = "X-lc_r"; then 56196e7d3316Smrg case $host in 56206e7d3316Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 56216e7d3316Smrg # Do not include libc_r directly, use -pthread flag. 56226e7d3316Smrg continue 56236e7d3316Smrg ;; 56246e7d3316Smrg esac 56256e7d3316Smrg fi 562697cf2ee2Smrg func_append deplibs " $arg" 56276e7d3316Smrg continue 56286e7d3316Smrg ;; 5629a966c04fSmrg 56306e7d3316Smrg -module) 56316e7d3316Smrg module=yes 56326e7d3316Smrg continue 56336e7d3316Smrg ;; 5634a966c04fSmrg 56356e7d3316Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 56366e7d3316Smrg # classes, name mangling, and exception handling. 56376e7d3316Smrg # Darwin uses the -arch flag to determine output architecture. 563897cf2ee2Smrg -model|-arch|-isysroot|--sysroot) 563997cf2ee2Smrg func_append compiler_flags " $arg" 56406e7d3316Smrg func_append compile_command " $arg" 56416e7d3316Smrg func_append finalize_command " $arg" 56426e7d3316Smrg prev=xcompiler 56436e7d3316Smrg continue 56446e7d3316Smrg ;; 5645a966c04fSmrg 56466e7d3316Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 564797cf2ee2Smrg func_append compiler_flags " $arg" 56486e7d3316Smrg func_append compile_command " $arg" 56496e7d3316Smrg func_append finalize_command " $arg" 56506e7d3316Smrg case "$new_inherited_linker_flags " in 56516e7d3316Smrg *" $arg "*) ;; 565297cf2ee2Smrg * ) func_append new_inherited_linker_flags " $arg" ;; 56536e7d3316Smrg esac 56546e7d3316Smrg continue 56556e7d3316Smrg ;; 5656a966c04fSmrg 56576e7d3316Smrg -multi_module) 56586e7d3316Smrg single_module="${wl}-multi_module" 56596e7d3316Smrg continue 56606e7d3316Smrg ;; 5661a966c04fSmrg 56626e7d3316Smrg -no-fast-install) 56636e7d3316Smrg fast_install=no 56646e7d3316Smrg continue 56656e7d3316Smrg ;; 5666a966c04fSmrg 56676e7d3316Smrg -no-install) 56686e7d3316Smrg case $host in 56696e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 56706e7d3316Smrg # The PATH hackery in wrapper scripts is required on Windows 56716e7d3316Smrg # and Darwin in order for the loader to find any dlls it needs. 56726e7d3316Smrg func_warning "\`-no-install' is ignored for $host" 56736e7d3316Smrg func_warning "assuming \`-no-fast-install' instead" 56746e7d3316Smrg fast_install=no 56756e7d3316Smrg ;; 56766e7d3316Smrg *) no_install=yes ;; 56776e7d3316Smrg esac 56786e7d3316Smrg continue 56796e7d3316Smrg ;; 5680a966c04fSmrg 56816e7d3316Smrg -no-undefined) 56826e7d3316Smrg allow_undefined=no 56836e7d3316Smrg continue 56846e7d3316Smrg ;; 5685a966c04fSmrg 56866e7d3316Smrg -objectlist) 56876e7d3316Smrg prev=objectlist 56886e7d3316Smrg continue 56896e7d3316Smrg ;; 5690a966c04fSmrg 56916e7d3316Smrg -o) prev=output ;; 5692a966c04fSmrg 56936e7d3316Smrg -precious-files-regex) 56946e7d3316Smrg prev=precious_regex 56956e7d3316Smrg continue 56966e7d3316Smrg ;; 5697a966c04fSmrg 56986e7d3316Smrg -release) 56996e7d3316Smrg prev=release 57006e7d3316Smrg continue 57016e7d3316Smrg ;; 5702a966c04fSmrg 57036e7d3316Smrg -rpath) 57046e7d3316Smrg prev=rpath 57056e7d3316Smrg continue 57066e7d3316Smrg ;; 5707a966c04fSmrg 57086e7d3316Smrg -R) 57096e7d3316Smrg prev=xrpath 57106e7d3316Smrg continue 57116e7d3316Smrg ;; 5712a966c04fSmrg 57136e7d3316Smrg -R*) 57146e7d3316Smrg func_stripname '-R' '' "$arg" 57156e7d3316Smrg dir=$func_stripname_result 57166e7d3316Smrg # We need an absolute path. 57176e7d3316Smrg case $dir in 57186e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 571997cf2ee2Smrg =*) 572097cf2ee2Smrg func_stripname '=' '' "$dir" 572197cf2ee2Smrg dir=$lt_sysroot$func_stripname_result 572297cf2ee2Smrg ;; 57236e7d3316Smrg *) 57246e7d3316Smrg func_fatal_error "only absolute run-paths are allowed" 57256e7d3316Smrg ;; 57266e7d3316Smrg esac 57276e7d3316Smrg case "$xrpath " in 57286e7d3316Smrg *" $dir "*) ;; 572997cf2ee2Smrg *) func_append xrpath " $dir" ;; 57306e7d3316Smrg esac 57316e7d3316Smrg continue 57326e7d3316Smrg ;; 5733a966c04fSmrg 57346e7d3316Smrg -shared) 57356e7d3316Smrg # The effects of -shared are defined in a previous loop. 57366e7d3316Smrg continue 57376e7d3316Smrg ;; 5738a966c04fSmrg 57396e7d3316Smrg -shrext) 57406e7d3316Smrg prev=shrext 57416e7d3316Smrg continue 57426e7d3316Smrg ;; 5743a966c04fSmrg 57446e7d3316Smrg -static | -static-libtool-libs) 57456e7d3316Smrg # The effects of -static are defined in a previous loop. 57466e7d3316Smrg # We used to do the same as -all-static on platforms that 57476e7d3316Smrg # didn't have a PIC flag, but the assumption that the effects 57486e7d3316Smrg # would be equivalent was wrong. It would break on at least 57496e7d3316Smrg # Digital Unix and AIX. 57506e7d3316Smrg continue 57516e7d3316Smrg ;; 5752a966c04fSmrg 57536e7d3316Smrg -thread-safe) 57546e7d3316Smrg thread_safe=yes 57556e7d3316Smrg continue 57566e7d3316Smrg ;; 5757a966c04fSmrg 57586e7d3316Smrg -version-info) 57596e7d3316Smrg prev=vinfo 57606e7d3316Smrg continue 57616e7d3316Smrg ;; 5762a966c04fSmrg 57636e7d3316Smrg -version-number) 57646e7d3316Smrg prev=vinfo 57656e7d3316Smrg vinfo_number=yes 57666e7d3316Smrg continue 57676e7d3316Smrg ;; 5768a966c04fSmrg 57696e7d3316Smrg -weak) 57706e7d3316Smrg prev=weak 57716e7d3316Smrg continue 57726e7d3316Smrg ;; 5773a966c04fSmrg 57746e7d3316Smrg -Wc,*) 57756e7d3316Smrg func_stripname '-Wc,' '' "$arg" 57766e7d3316Smrg args=$func_stripname_result 57776e7d3316Smrg arg= 57786e7d3316Smrg save_ifs="$IFS"; IFS=',' 57796e7d3316Smrg for flag in $args; do 57806e7d3316Smrg IFS="$save_ifs" 57816e7d3316Smrg func_quote_for_eval "$flag" 578297cf2ee2Smrg func_append arg " $func_quote_for_eval_result" 578397cf2ee2Smrg func_append compiler_flags " $func_quote_for_eval_result" 57846e7d3316Smrg done 57856e7d3316Smrg IFS="$save_ifs" 57866e7d3316Smrg func_stripname ' ' '' "$arg" 57876e7d3316Smrg arg=$func_stripname_result 57886e7d3316Smrg ;; 5789a966c04fSmrg 57906e7d3316Smrg -Wl,*) 57916e7d3316Smrg func_stripname '-Wl,' '' "$arg" 57926e7d3316Smrg args=$func_stripname_result 57936e7d3316Smrg arg= 57946e7d3316Smrg save_ifs="$IFS"; IFS=',' 57956e7d3316Smrg for flag in $args; do 57966e7d3316Smrg IFS="$save_ifs" 57976e7d3316Smrg func_quote_for_eval "$flag" 579897cf2ee2Smrg func_append arg " $wl$func_quote_for_eval_result" 579997cf2ee2Smrg func_append compiler_flags " $wl$func_quote_for_eval_result" 580097cf2ee2Smrg func_append linker_flags " $func_quote_for_eval_result" 58016e7d3316Smrg done 58026e7d3316Smrg IFS="$save_ifs" 58036e7d3316Smrg func_stripname ' ' '' "$arg" 58046e7d3316Smrg arg=$func_stripname_result 58056e7d3316Smrg ;; 5806a966c04fSmrg 58076e7d3316Smrg -Xcompiler) 58086e7d3316Smrg prev=xcompiler 58096e7d3316Smrg continue 58106e7d3316Smrg ;; 5811a966c04fSmrg 58126e7d3316Smrg -Xlinker) 58136e7d3316Smrg prev=xlinker 58146e7d3316Smrg continue 58156e7d3316Smrg ;; 5816a966c04fSmrg 58176e7d3316Smrg -XCClinker) 58186e7d3316Smrg prev=xcclinker 58196e7d3316Smrg continue 58206e7d3316Smrg ;; 5821a966c04fSmrg 58226e7d3316Smrg # -msg_* for osf cc 58236e7d3316Smrg -msg_*) 58246e7d3316Smrg func_quote_for_eval "$arg" 58256e7d3316Smrg arg="$func_quote_for_eval_result" 58266e7d3316Smrg ;; 5827a966c04fSmrg 58286e7d3316Smrg # Flags to be passed through unchanged, with rationale: 58296e7d3316Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 58306e7d3316Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 58316e7d3316Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 58326e7d3316Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 58336e7d3316Smrg # -q* compiler args for the IBM compiler 58346e7d3316Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 58356e7d3316Smrg # -F/path path to uninstalled frameworks, gcc on darwin 58366e7d3316Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 58376e7d3316Smrg # @file GCC response files 58386e7d3316Smrg # -tp=* Portland pgcc target processor selection 583997cf2ee2Smrg # --sysroot=* for sysroot support 584097cf2ee2Smrg # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 58416e7d3316Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 584297cf2ee2Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 584397cf2ee2Smrg -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 58446e7d3316Smrg func_quote_for_eval "$arg" 58456e7d3316Smrg arg="$func_quote_for_eval_result" 58466e7d3316Smrg func_append compile_command " $arg" 58476e7d3316Smrg func_append finalize_command " $arg" 584897cf2ee2Smrg func_append compiler_flags " $arg" 58496e7d3316Smrg continue 58506e7d3316Smrg ;; 5851a966c04fSmrg 58526e7d3316Smrg # Some other compiler flag. 58536e7d3316Smrg -* | +*) 58546e7d3316Smrg func_quote_for_eval "$arg" 58556e7d3316Smrg arg="$func_quote_for_eval_result" 58566e7d3316Smrg ;; 5857a966c04fSmrg 58586e7d3316Smrg *.$objext) 58596e7d3316Smrg # A standard object. 586097cf2ee2Smrg func_append objs " $arg" 58616e7d3316Smrg ;; 5862a966c04fSmrg 58636e7d3316Smrg *.lo) 58646e7d3316Smrg # A libtool-controlled object. 5865a966c04fSmrg 58666e7d3316Smrg # Check to see that this really is a libtool object. 58676e7d3316Smrg if func_lalib_unsafe_p "$arg"; then 58686e7d3316Smrg pic_object= 58696e7d3316Smrg non_pic_object= 5870a966c04fSmrg 58716e7d3316Smrg # Read the .lo file 58726e7d3316Smrg func_source "$arg" 5873a966c04fSmrg 58746e7d3316Smrg if test -z "$pic_object" || 58756e7d3316Smrg test -z "$non_pic_object" || 58766e7d3316Smrg test "$pic_object" = none && 58776e7d3316Smrg test "$non_pic_object" = none; then 58786e7d3316Smrg func_fatal_error "cannot find name of object for \`$arg'" 58796e7d3316Smrg fi 58802e2dd055Smrg 58816e7d3316Smrg # Extract subdirectory from the argument. 58826e7d3316Smrg func_dirname "$arg" "/" "" 58836e7d3316Smrg xdir="$func_dirname_result" 5884a966c04fSmrg 58856e7d3316Smrg if test "$pic_object" != none; then 58866e7d3316Smrg # Prepend the subdirectory the object is found in. 58876e7d3316Smrg pic_object="$xdir$pic_object" 5888a966c04fSmrg 58896e7d3316Smrg if test "$prev" = dlfiles; then 58906e7d3316Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 589197cf2ee2Smrg func_append dlfiles " $pic_object" 58926e7d3316Smrg prev= 58936e7d3316Smrg continue 58946e7d3316Smrg else 58956e7d3316Smrg # If libtool objects are unsupported, then we need to preload. 58966e7d3316Smrg prev=dlprefiles 58976e7d3316Smrg fi 58986e7d3316Smrg fi 58996e7d3316Smrg 59006e7d3316Smrg # CHECK ME: I think I busted this. -Ossama 59016e7d3316Smrg if test "$prev" = dlprefiles; then 59026e7d3316Smrg # Preload the old-style object. 590397cf2ee2Smrg func_append dlprefiles " $pic_object" 59046e7d3316Smrg prev= 59056e7d3316Smrg fi 59066e7d3316Smrg 59076e7d3316Smrg # A PIC object. 59086e7d3316Smrg func_append libobjs " $pic_object" 59096e7d3316Smrg arg="$pic_object" 59106e7d3316Smrg fi 59116e7d3316Smrg 59126e7d3316Smrg # Non-PIC object. 59136e7d3316Smrg if test "$non_pic_object" != none; then 59146e7d3316Smrg # Prepend the subdirectory the object is found in. 59156e7d3316Smrg non_pic_object="$xdir$non_pic_object" 59166e7d3316Smrg 59176e7d3316Smrg # A standard non-PIC object 59186e7d3316Smrg func_append non_pic_objects " $non_pic_object" 59196e7d3316Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 59206e7d3316Smrg arg="$non_pic_object" 59216e7d3316Smrg fi 59226e7d3316Smrg else 59236e7d3316Smrg # If the PIC object exists, use it instead. 59246e7d3316Smrg # $xdir was prepended to $pic_object above. 59256e7d3316Smrg non_pic_object="$pic_object" 59266e7d3316Smrg func_append non_pic_objects " $non_pic_object" 59276e7d3316Smrg fi 59286e7d3316Smrg else 59296e7d3316Smrg # Only an error if not doing a dry-run. 59306e7d3316Smrg if $opt_dry_run; then 59316e7d3316Smrg # Extract subdirectory from the argument. 59326e7d3316Smrg func_dirname "$arg" "/" "" 59336e7d3316Smrg xdir="$func_dirname_result" 59346e7d3316Smrg 59356e7d3316Smrg func_lo2o "$arg" 59366e7d3316Smrg pic_object=$xdir$objdir/$func_lo2o_result 59376e7d3316Smrg non_pic_object=$xdir$func_lo2o_result 59386e7d3316Smrg func_append libobjs " $pic_object" 59396e7d3316Smrg func_append non_pic_objects " $non_pic_object" 59406e7d3316Smrg else 59416e7d3316Smrg func_fatal_error "\`$arg' is not a valid libtool object" 59426e7d3316Smrg fi 59436e7d3316Smrg fi 59446e7d3316Smrg ;; 59456e7d3316Smrg 59466e7d3316Smrg *.$libext) 59476e7d3316Smrg # An archive. 594897cf2ee2Smrg func_append deplibs " $arg" 594997cf2ee2Smrg func_append old_deplibs " $arg" 59506e7d3316Smrg continue 59516e7d3316Smrg ;; 59526e7d3316Smrg 59536e7d3316Smrg *.la) 59546e7d3316Smrg # A libtool-controlled library. 59556e7d3316Smrg 595697cf2ee2Smrg func_resolve_sysroot "$arg" 59576e7d3316Smrg if test "$prev" = dlfiles; then 59586e7d3316Smrg # This library was specified with -dlopen. 595997cf2ee2Smrg func_append dlfiles " $func_resolve_sysroot_result" 59606e7d3316Smrg prev= 59616e7d3316Smrg elif test "$prev" = dlprefiles; then 59626e7d3316Smrg # The library was specified with -dlpreopen. 596397cf2ee2Smrg func_append dlprefiles " $func_resolve_sysroot_result" 59646e7d3316Smrg prev= 59656e7d3316Smrg else 596697cf2ee2Smrg func_append deplibs " $func_resolve_sysroot_result" 59676e7d3316Smrg fi 59686e7d3316Smrg continue 59696e7d3316Smrg ;; 59706e7d3316Smrg 59716e7d3316Smrg # Some other compiler argument. 59726e7d3316Smrg *) 59736e7d3316Smrg # Unknown arguments in both finalize_command and compile_command need 59746e7d3316Smrg # to be aesthetically quoted because they are evaled later. 59756e7d3316Smrg func_quote_for_eval "$arg" 59766e7d3316Smrg arg="$func_quote_for_eval_result" 59776e7d3316Smrg ;; 59786e7d3316Smrg esac # arg 59796e7d3316Smrg 59806e7d3316Smrg # Now actually substitute the argument into the commands. 59816e7d3316Smrg if test -n "$arg"; then 59826e7d3316Smrg func_append compile_command " $arg" 59836e7d3316Smrg func_append finalize_command " $arg" 59846e7d3316Smrg fi 59856e7d3316Smrg done # argument parsing loop 59866e7d3316Smrg 59876e7d3316Smrg test -n "$prev" && \ 59886e7d3316Smrg func_fatal_help "the \`$prevarg' option requires an argument" 59896e7d3316Smrg 59906e7d3316Smrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 59916e7d3316Smrg eval arg=\"$export_dynamic_flag_spec\" 59926e7d3316Smrg func_append compile_command " $arg" 59936e7d3316Smrg func_append finalize_command " $arg" 59946e7d3316Smrg fi 59956e7d3316Smrg 59966e7d3316Smrg oldlibs= 59976e7d3316Smrg # calculate the name of the file, without its directory 59986e7d3316Smrg func_basename "$output" 59996e7d3316Smrg outputname="$func_basename_result" 60006e7d3316Smrg libobjs_save="$libobjs" 60016e7d3316Smrg 60026e7d3316Smrg if test -n "$shlibpath_var"; then 60036e7d3316Smrg # get the directories listed in $shlibpath_var 60046e7d3316Smrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 6005a966c04fSmrg else 60066e7d3316Smrg shlib_search_path= 6007a966c04fSmrg fi 60086e7d3316Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 60096e7d3316Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 6010a966c04fSmrg 60116e7d3316Smrg func_dirname "$output" "/" "" 60126e7d3316Smrg output_objdir="$func_dirname_result$objdir" 601397cf2ee2Smrg func_to_tool_file "$output_objdir/" 601497cf2ee2Smrg tool_output_objdir=$func_to_tool_file_result 60156e7d3316Smrg # Create the object directory. 60166e7d3316Smrg func_mkdir_p "$output_objdir" 6017a966c04fSmrg 60186e7d3316Smrg # Determine the type of output 60196e7d3316Smrg case $output in 60206e7d3316Smrg "") 60216e7d3316Smrg func_fatal_help "you must specify an output file" 60226e7d3316Smrg ;; 60236e7d3316Smrg *.$libext) linkmode=oldlib ;; 60246e7d3316Smrg *.lo | *.$objext) linkmode=obj ;; 60256e7d3316Smrg *.la) linkmode=lib ;; 60266e7d3316Smrg *) linkmode=prog ;; # Anything else should be a program. 60276e7d3316Smrg esac 60286e7d3316Smrg 60296e7d3316Smrg specialdeplibs= 60306e7d3316Smrg 60316e7d3316Smrg libs= 60326e7d3316Smrg # Find all interdependent deplibs by searching for libraries 60336e7d3316Smrg # that are linked more than once (e.g. -la -lb -la) 60346e7d3316Smrg for deplib in $deplibs; do 603597cf2ee2Smrg if $opt_preserve_dup_deps ; then 60366e7d3316Smrg case "$libs " in 603797cf2ee2Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 60386e7d3316Smrg esac 60396e7d3316Smrg fi 604097cf2ee2Smrg func_append libs " $deplib" 60416e7d3316Smrg done 60426e7d3316Smrg 60436e7d3316Smrg if test "$linkmode" = lib; then 60446e7d3316Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 60456e7d3316Smrg 60466e7d3316Smrg # Compute libraries that are listed more than once in $predeps 60476e7d3316Smrg # $postdeps and mark them as special (i.e., whose duplicates are 60486e7d3316Smrg # not to be eliminated). 60496e7d3316Smrg pre_post_deps= 60506e7d3316Smrg if $opt_duplicate_compiler_generated_deps; then 60516e7d3316Smrg for pre_post_dep in $predeps $postdeps; do 60526e7d3316Smrg case "$pre_post_deps " in 605397cf2ee2Smrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 60546e7d3316Smrg esac 605597cf2ee2Smrg func_append pre_post_deps " $pre_post_dep" 60566e7d3316Smrg done 60576e7d3316Smrg fi 60586e7d3316Smrg pre_post_deps= 60596e7d3316Smrg fi 60606e7d3316Smrg 60616e7d3316Smrg deplibs= 60626e7d3316Smrg newdependency_libs= 60636e7d3316Smrg newlib_search_path= 60646e7d3316Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 60656e7d3316Smrg notinst_deplibs= # not-installed libtool libraries 60666e7d3316Smrg notinst_path= # paths that contain not-installed libtool libraries 60676e7d3316Smrg 60686e7d3316Smrg case $linkmode in 60696e7d3316Smrg lib) 60706e7d3316Smrg passes="conv dlpreopen link" 60716e7d3316Smrg for file in $dlfiles $dlprefiles; do 60726e7d3316Smrg case $file in 60736e7d3316Smrg *.la) ;; 60746e7d3316Smrg *) 60756e7d3316Smrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 60766e7d3316Smrg ;; 60776e7d3316Smrg esac 60786e7d3316Smrg done 60796e7d3316Smrg ;; 60806e7d3316Smrg prog) 60816e7d3316Smrg compile_deplibs= 60826e7d3316Smrg finalize_deplibs= 60836e7d3316Smrg alldeplibs=no 60846e7d3316Smrg newdlfiles= 60856e7d3316Smrg newdlprefiles= 60866e7d3316Smrg passes="conv scan dlopen dlpreopen link" 60876e7d3316Smrg ;; 60886e7d3316Smrg *) passes="conv" 60896e7d3316Smrg ;; 60906e7d3316Smrg esac 60916e7d3316Smrg 60926e7d3316Smrg for pass in $passes; do 60936e7d3316Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 60946e7d3316Smrg # so that -L comes before libs that need it for instance... 60956e7d3316Smrg if test "$linkmode,$pass" = "lib,link"; then 60966e7d3316Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 60976e7d3316Smrg ## order, and fix it there properly 60986e7d3316Smrg tmp_deplibs= 60996e7d3316Smrg for deplib in $deplibs; do 61006e7d3316Smrg tmp_deplibs="$deplib $tmp_deplibs" 61016e7d3316Smrg done 61026e7d3316Smrg deplibs="$tmp_deplibs" 61036e7d3316Smrg fi 61046e7d3316Smrg 61056e7d3316Smrg if test "$linkmode,$pass" = "lib,link" || 61066e7d3316Smrg test "$linkmode,$pass" = "prog,scan"; then 61076e7d3316Smrg libs="$deplibs" 61086e7d3316Smrg deplibs= 61096e7d3316Smrg fi 61106e7d3316Smrg if test "$linkmode" = prog; then 61116e7d3316Smrg case $pass in 61126e7d3316Smrg dlopen) libs="$dlfiles" ;; 61136e7d3316Smrg dlpreopen) libs="$dlprefiles" ;; 61146e7d3316Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 61156e7d3316Smrg esac 61166e7d3316Smrg fi 61176e7d3316Smrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 61186e7d3316Smrg # Collect and forward deplibs of preopened libtool libs 61196e7d3316Smrg for lib in $dlprefiles; do 61206e7d3316Smrg # Ignore non-libtool-libs 61216e7d3316Smrg dependency_libs= 612297cf2ee2Smrg func_resolve_sysroot "$lib" 61236e7d3316Smrg case $lib in 612497cf2ee2Smrg *.la) func_source "$func_resolve_sysroot_result" ;; 61256e7d3316Smrg esac 61266e7d3316Smrg 61276e7d3316Smrg # Collect preopened libtool deplibs, except any this library 61286e7d3316Smrg # has declared as weak libs 61296e7d3316Smrg for deplib in $dependency_libs; do 61306e7d3316Smrg func_basename "$deplib" 61316e7d3316Smrg deplib_base=$func_basename_result 61326e7d3316Smrg case " $weak_libs " in 61336e7d3316Smrg *" $deplib_base "*) ;; 613497cf2ee2Smrg *) func_append deplibs " $deplib" ;; 61356e7d3316Smrg esac 61366e7d3316Smrg done 61376e7d3316Smrg done 61386e7d3316Smrg libs="$dlprefiles" 61396e7d3316Smrg fi 61406e7d3316Smrg if test "$pass" = dlopen; then 61416e7d3316Smrg # Collect dlpreopened libraries 61426e7d3316Smrg save_deplibs="$deplibs" 61436e7d3316Smrg deplibs= 61446e7d3316Smrg fi 61456e7d3316Smrg 61466e7d3316Smrg for deplib in $libs; do 61476e7d3316Smrg lib= 61486e7d3316Smrg found=no 61496e7d3316Smrg case $deplib in 61506e7d3316Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) 61516e7d3316Smrg if test "$linkmode,$pass" = "prog,link"; then 61526e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 61536e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 61546e7d3316Smrg else 615597cf2ee2Smrg func_append compiler_flags " $deplib" 61566e7d3316Smrg if test "$linkmode" = lib ; then 61576e7d3316Smrg case "$new_inherited_linker_flags " in 61586e7d3316Smrg *" $deplib "*) ;; 615997cf2ee2Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 61606e7d3316Smrg esac 61616e7d3316Smrg fi 61626e7d3316Smrg fi 61636e7d3316Smrg continue 61646e7d3316Smrg ;; 61656e7d3316Smrg -l*) 61666e7d3316Smrg if test "$linkmode" != lib && test "$linkmode" != prog; then 61676e7d3316Smrg func_warning "\`-l' is ignored for archives/objects" 61686e7d3316Smrg continue 61696e7d3316Smrg fi 61706e7d3316Smrg func_stripname '-l' '' "$deplib" 61716e7d3316Smrg name=$func_stripname_result 61726e7d3316Smrg if test "$linkmode" = lib; then 61736e7d3316Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 61746e7d3316Smrg else 61756e7d3316Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 61766e7d3316Smrg fi 61776e7d3316Smrg for searchdir in $searchdirs; do 61786e7d3316Smrg for search_ext in .la $std_shrext .so .a; do 61796e7d3316Smrg # Search the libtool library 61806e7d3316Smrg lib="$searchdir/lib${name}${search_ext}" 61816e7d3316Smrg if test -f "$lib"; then 61826e7d3316Smrg if test "$search_ext" = ".la"; then 61836e7d3316Smrg found=yes 61846e7d3316Smrg else 61856e7d3316Smrg found=no 61866e7d3316Smrg fi 61876e7d3316Smrg break 2 61886e7d3316Smrg fi 61896e7d3316Smrg done 61906e7d3316Smrg done 61916e7d3316Smrg if test "$found" != yes; then 61926e7d3316Smrg # deplib doesn't seem to be a libtool library 61936e7d3316Smrg if test "$linkmode,$pass" = "prog,link"; then 61946e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 61956e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 61966e7d3316Smrg else 61976e7d3316Smrg deplibs="$deplib $deplibs" 61986e7d3316Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 61996e7d3316Smrg fi 62006e7d3316Smrg continue 62016e7d3316Smrg else # deplib is a libtool library 62026e7d3316Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 62036e7d3316Smrg # We need to do some special things here, and not later. 62046e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 62056e7d3316Smrg case " $predeps $postdeps " in 62066e7d3316Smrg *" $deplib "*) 62076e7d3316Smrg if func_lalib_p "$lib"; then 62086e7d3316Smrg library_names= 62096e7d3316Smrg old_library= 62106e7d3316Smrg func_source "$lib" 62116e7d3316Smrg for l in $old_library $library_names; do 62126e7d3316Smrg ll="$l" 62136e7d3316Smrg done 62146e7d3316Smrg if test "X$ll" = "X$old_library" ; then # only static version available 62156e7d3316Smrg found=no 62166e7d3316Smrg func_dirname "$lib" "" "." 62176e7d3316Smrg ladir="$func_dirname_result" 62186e7d3316Smrg lib=$ladir/$old_library 62196e7d3316Smrg if test "$linkmode,$pass" = "prog,link"; then 62206e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 62216e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 62226e7d3316Smrg else 62236e7d3316Smrg deplibs="$deplib $deplibs" 62246e7d3316Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 62256e7d3316Smrg fi 62266e7d3316Smrg continue 62276e7d3316Smrg fi 62286e7d3316Smrg fi 62296e7d3316Smrg ;; 62306e7d3316Smrg *) ;; 62316e7d3316Smrg esac 62326e7d3316Smrg fi 62336e7d3316Smrg fi 62346e7d3316Smrg ;; # -l 62356e7d3316Smrg *.ltframework) 62366e7d3316Smrg if test "$linkmode,$pass" = "prog,link"; then 62376e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 62386e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 62396e7d3316Smrg else 62406e7d3316Smrg deplibs="$deplib $deplibs" 62416e7d3316Smrg if test "$linkmode" = lib ; then 62426e7d3316Smrg case "$new_inherited_linker_flags " in 62436e7d3316Smrg *" $deplib "*) ;; 624497cf2ee2Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 62456e7d3316Smrg esac 62466e7d3316Smrg fi 62476e7d3316Smrg fi 62486e7d3316Smrg continue 62496e7d3316Smrg ;; 62506e7d3316Smrg -L*) 62516e7d3316Smrg case $linkmode in 62526e7d3316Smrg lib) 62536e7d3316Smrg deplibs="$deplib $deplibs" 62546e7d3316Smrg test "$pass" = conv && continue 62556e7d3316Smrg newdependency_libs="$deplib $newdependency_libs" 62566e7d3316Smrg func_stripname '-L' '' "$deplib" 625797cf2ee2Smrg func_resolve_sysroot "$func_stripname_result" 625897cf2ee2Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 62596e7d3316Smrg ;; 62606e7d3316Smrg prog) 62616e7d3316Smrg if test "$pass" = conv; then 62626e7d3316Smrg deplibs="$deplib $deplibs" 62636e7d3316Smrg continue 62646e7d3316Smrg fi 62656e7d3316Smrg if test "$pass" = scan; then 62666e7d3316Smrg deplibs="$deplib $deplibs" 62676e7d3316Smrg else 62686e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 62696e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 62706e7d3316Smrg fi 62716e7d3316Smrg func_stripname '-L' '' "$deplib" 627297cf2ee2Smrg func_resolve_sysroot "$func_stripname_result" 627397cf2ee2Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 62746e7d3316Smrg ;; 62756e7d3316Smrg *) 62766e7d3316Smrg func_warning "\`-L' is ignored for archives/objects" 62776e7d3316Smrg ;; 62786e7d3316Smrg esac # linkmode 62796e7d3316Smrg continue 62806e7d3316Smrg ;; # -L 62816e7d3316Smrg -R*) 62826e7d3316Smrg if test "$pass" = link; then 62836e7d3316Smrg func_stripname '-R' '' "$deplib" 628497cf2ee2Smrg func_resolve_sysroot "$func_stripname_result" 628597cf2ee2Smrg dir=$func_resolve_sysroot_result 62866e7d3316Smrg # Make sure the xrpath contains only unique directories. 62876e7d3316Smrg case "$xrpath " in 62886e7d3316Smrg *" $dir "*) ;; 628997cf2ee2Smrg *) func_append xrpath " $dir" ;; 62906e7d3316Smrg esac 62916e7d3316Smrg fi 62926e7d3316Smrg deplibs="$deplib $deplibs" 62936e7d3316Smrg continue 62946e7d3316Smrg ;; 629597cf2ee2Smrg *.la) 629697cf2ee2Smrg func_resolve_sysroot "$deplib" 629797cf2ee2Smrg lib=$func_resolve_sysroot_result 629897cf2ee2Smrg ;; 62996e7d3316Smrg *.$libext) 63006e7d3316Smrg if test "$pass" = conv; then 63016e7d3316Smrg deplibs="$deplib $deplibs" 63026e7d3316Smrg continue 63036e7d3316Smrg fi 63046e7d3316Smrg case $linkmode in 63056e7d3316Smrg lib) 63066e7d3316Smrg # Linking convenience modules into shared libraries is allowed, 63076e7d3316Smrg # but linking other static libraries is non-portable. 63086e7d3316Smrg case " $dlpreconveniencelibs " in 63096e7d3316Smrg *" $deplib "*) ;; 63106e7d3316Smrg *) 63116e7d3316Smrg valid_a_lib=no 63126e7d3316Smrg case $deplibs_check_method in 63136e7d3316Smrg match_pattern*) 63146e7d3316Smrg set dummy $deplibs_check_method; shift 63156e7d3316Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 63166e7d3316Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 63176e7d3316Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 63186e7d3316Smrg valid_a_lib=yes 63196e7d3316Smrg fi 63206e7d3316Smrg ;; 63216e7d3316Smrg pass_all) 63226e7d3316Smrg valid_a_lib=yes 63236e7d3316Smrg ;; 63246e7d3316Smrg esac 63256e7d3316Smrg if test "$valid_a_lib" != yes; then 63266e7d3316Smrg echo 63276e7d3316Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 63286e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 63296e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 63306e7d3316Smrg echo "*** shared version of the library, which you do not appear to have" 63316e7d3316Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 63326e7d3316Smrg echo "*** that it is just a static archive that I should not use here." 63336e7d3316Smrg else 63346e7d3316Smrg echo 63356e7d3316Smrg $ECHO "*** Warning: Linking the shared library $output against the" 63366e7d3316Smrg $ECHO "*** static library $deplib is not portable!" 63376e7d3316Smrg deplibs="$deplib $deplibs" 63386e7d3316Smrg fi 63396e7d3316Smrg ;; 63406e7d3316Smrg esac 63416e7d3316Smrg continue 63426e7d3316Smrg ;; 63436e7d3316Smrg prog) 63446e7d3316Smrg if test "$pass" != link; then 63456e7d3316Smrg deplibs="$deplib $deplibs" 63466e7d3316Smrg else 63476e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 63486e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 63496e7d3316Smrg fi 63506e7d3316Smrg continue 63516e7d3316Smrg ;; 63526e7d3316Smrg esac # linkmode 63536e7d3316Smrg ;; # *.$libext 63546e7d3316Smrg *.lo | *.$objext) 63556e7d3316Smrg if test "$pass" = conv; then 63566e7d3316Smrg deplibs="$deplib $deplibs" 63576e7d3316Smrg elif test "$linkmode" = prog; then 63586e7d3316Smrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 63596e7d3316Smrg # If there is no dlopen support or we're linking statically, 63606e7d3316Smrg # we need to preload. 636197cf2ee2Smrg func_append newdlprefiles " $deplib" 63626e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 63636e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 63646e7d3316Smrg else 636597cf2ee2Smrg func_append newdlfiles " $deplib" 63666e7d3316Smrg fi 63676e7d3316Smrg fi 63686e7d3316Smrg continue 63696e7d3316Smrg ;; 63706e7d3316Smrg %DEPLIBS%) 63716e7d3316Smrg alldeplibs=yes 63726e7d3316Smrg continue 63736e7d3316Smrg ;; 63746e7d3316Smrg esac # case $deplib 63756e7d3316Smrg 63766e7d3316Smrg if test "$found" = yes || test -f "$lib"; then : 63776e7d3316Smrg else 63786e7d3316Smrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 63796e7d3316Smrg fi 63806e7d3316Smrg 63816e7d3316Smrg # Check to see that this really is a libtool archive. 63826e7d3316Smrg func_lalib_unsafe_p "$lib" \ 63836e7d3316Smrg || func_fatal_error "\`$lib' is not a valid libtool archive" 63846e7d3316Smrg 63856e7d3316Smrg func_dirname "$lib" "" "." 63866e7d3316Smrg ladir="$func_dirname_result" 63876e7d3316Smrg 63886e7d3316Smrg dlname= 63896e7d3316Smrg dlopen= 63906e7d3316Smrg dlpreopen= 63916e7d3316Smrg libdir= 63926e7d3316Smrg library_names= 63936e7d3316Smrg old_library= 63946e7d3316Smrg inherited_linker_flags= 63956e7d3316Smrg # If the library was installed with an old release of libtool, 63966e7d3316Smrg # it will not redefine variables installed, or shouldnotlink 63976e7d3316Smrg installed=yes 63986e7d3316Smrg shouldnotlink=no 63996e7d3316Smrg avoidtemprpath= 64006e7d3316Smrg 64016e7d3316Smrg 64026e7d3316Smrg # Read the .la file 64036e7d3316Smrg func_source "$lib" 64046e7d3316Smrg 64056e7d3316Smrg # Convert "-framework foo" to "foo.ltframework" 64066e7d3316Smrg if test -n "$inherited_linker_flags"; then 64076e7d3316Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 64086e7d3316Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 64096e7d3316Smrg case " $new_inherited_linker_flags " in 64106e7d3316Smrg *" $tmp_inherited_linker_flag "*) ;; 641197cf2ee2Smrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 64126e7d3316Smrg esac 64136e7d3316Smrg done 64146e7d3316Smrg fi 64156e7d3316Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 64166e7d3316Smrg if test "$linkmode,$pass" = "lib,link" || 64176e7d3316Smrg test "$linkmode,$pass" = "prog,scan" || 64186e7d3316Smrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 641997cf2ee2Smrg test -n "$dlopen" && func_append dlfiles " $dlopen" 642097cf2ee2Smrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 64216e7d3316Smrg fi 64226e7d3316Smrg 64236e7d3316Smrg if test "$pass" = conv; then 64246e7d3316Smrg # Only check for convenience libraries 64256e7d3316Smrg deplibs="$lib $deplibs" 64266e7d3316Smrg if test -z "$libdir"; then 64276e7d3316Smrg if test -z "$old_library"; then 64286e7d3316Smrg func_fatal_error "cannot find name of link library for \`$lib'" 64296e7d3316Smrg fi 64306e7d3316Smrg # It is a libtool convenience library, so add in its objects. 643197cf2ee2Smrg func_append convenience " $ladir/$objdir/$old_library" 643297cf2ee2Smrg func_append old_convenience " $ladir/$objdir/$old_library" 64336e7d3316Smrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 64346e7d3316Smrg func_fatal_error "\`$lib' is not a convenience library" 64356e7d3316Smrg fi 64366e7d3316Smrg tmp_libs= 64376e7d3316Smrg for deplib in $dependency_libs; do 64386e7d3316Smrg deplibs="$deplib $deplibs" 643997cf2ee2Smrg if $opt_preserve_dup_deps ; then 64406e7d3316Smrg case "$tmp_libs " in 644197cf2ee2Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 64426e7d3316Smrg esac 64436e7d3316Smrg fi 644497cf2ee2Smrg func_append tmp_libs " $deplib" 64456e7d3316Smrg done 64466e7d3316Smrg continue 64476e7d3316Smrg fi # $pass = conv 64486e7d3316Smrg 64496e7d3316Smrg 64506e7d3316Smrg # Get the name of the library we link against. 64516e7d3316Smrg linklib= 645297cf2ee2Smrg if test -n "$old_library" && 645397cf2ee2Smrg { test "$prefer_static_libs" = yes || 645497cf2ee2Smrg test "$prefer_static_libs,$installed" = "built,no"; }; then 645597cf2ee2Smrg linklib=$old_library 645697cf2ee2Smrg else 645797cf2ee2Smrg for l in $old_library $library_names; do 645897cf2ee2Smrg linklib="$l" 645997cf2ee2Smrg done 646097cf2ee2Smrg fi 64616e7d3316Smrg if test -z "$linklib"; then 64626e7d3316Smrg func_fatal_error "cannot find name of link library for \`$lib'" 64636e7d3316Smrg fi 64646e7d3316Smrg 64656e7d3316Smrg # This library was specified with -dlopen. 64666e7d3316Smrg if test "$pass" = dlopen; then 64676e7d3316Smrg if test -z "$libdir"; then 64686e7d3316Smrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 64696e7d3316Smrg fi 64706e7d3316Smrg if test -z "$dlname" || 64716e7d3316Smrg test "$dlopen_support" != yes || 64726e7d3316Smrg test "$build_libtool_libs" = no; then 64736e7d3316Smrg # If there is no dlname, no dlopen support or we're linking 64746e7d3316Smrg # statically, we need to preload. We also need to preload any 64756e7d3316Smrg # dependent libraries so libltdl's deplib preloader doesn't 64766e7d3316Smrg # bomb out in the load deplibs phase. 647797cf2ee2Smrg func_append dlprefiles " $lib $dependency_libs" 64786e7d3316Smrg else 647997cf2ee2Smrg func_append newdlfiles " $lib" 64806e7d3316Smrg fi 64816e7d3316Smrg continue 64826e7d3316Smrg fi # $pass = dlopen 64836e7d3316Smrg 64846e7d3316Smrg # We need an absolute path. 64856e7d3316Smrg case $ladir in 64866e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 64876e7d3316Smrg *) 64886e7d3316Smrg abs_ladir=`cd "$ladir" && pwd` 64896e7d3316Smrg if test -z "$abs_ladir"; then 64906e7d3316Smrg func_warning "cannot determine absolute directory name of \`$ladir'" 64916e7d3316Smrg func_warning "passing it literally to the linker, although it might fail" 64926e7d3316Smrg abs_ladir="$ladir" 64936e7d3316Smrg fi 64946e7d3316Smrg ;; 64956e7d3316Smrg esac 64966e7d3316Smrg func_basename "$lib" 64976e7d3316Smrg laname="$func_basename_result" 64986e7d3316Smrg 64996e7d3316Smrg # Find the relevant object directory and library name. 65006e7d3316Smrg if test "X$installed" = Xyes; then 650197cf2ee2Smrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 65026e7d3316Smrg func_warning "library \`$lib' was moved." 65036e7d3316Smrg dir="$ladir" 65046e7d3316Smrg absdir="$abs_ladir" 65056e7d3316Smrg libdir="$abs_ladir" 65066e7d3316Smrg else 650797cf2ee2Smrg dir="$lt_sysroot$libdir" 650897cf2ee2Smrg absdir="$lt_sysroot$libdir" 65096e7d3316Smrg fi 65106e7d3316Smrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 65116e7d3316Smrg else 65126e7d3316Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 65136e7d3316Smrg dir="$ladir" 65146e7d3316Smrg absdir="$abs_ladir" 65156e7d3316Smrg # Remove this search path later 651697cf2ee2Smrg func_append notinst_path " $abs_ladir" 65176e7d3316Smrg else 65186e7d3316Smrg dir="$ladir/$objdir" 65196e7d3316Smrg absdir="$abs_ladir/$objdir" 65206e7d3316Smrg # Remove this search path later 652197cf2ee2Smrg func_append notinst_path " $abs_ladir" 65226e7d3316Smrg fi 65236e7d3316Smrg fi # $installed = yes 65246e7d3316Smrg func_stripname 'lib' '.la' "$laname" 65256e7d3316Smrg name=$func_stripname_result 65266e7d3316Smrg 65276e7d3316Smrg # This library was specified with -dlpreopen. 65286e7d3316Smrg if test "$pass" = dlpreopen; then 65296e7d3316Smrg if test -z "$libdir" && test "$linkmode" = prog; then 65306e7d3316Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 65316e7d3316Smrg fi 653297cf2ee2Smrg case "$host" in 653397cf2ee2Smrg # special handling for platforms with PE-DLLs. 653497cf2ee2Smrg *cygwin* | *mingw* | *cegcc* ) 653597cf2ee2Smrg # Linker will automatically link against shared library if both 653697cf2ee2Smrg # static and shared are present. Therefore, ensure we extract 653797cf2ee2Smrg # symbols from the import library if a shared library is present 653897cf2ee2Smrg # (otherwise, the dlopen module name will be incorrect). We do 653997cf2ee2Smrg # this by putting the import library name into $newdlprefiles. 654097cf2ee2Smrg # We recover the dlopen module name by 'saving' the la file 654197cf2ee2Smrg # name in a special purpose variable, and (later) extracting the 654297cf2ee2Smrg # dlname from the la file. 654397cf2ee2Smrg if test -n "$dlname"; then 654497cf2ee2Smrg func_tr_sh "$dir/$linklib" 654597cf2ee2Smrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 654697cf2ee2Smrg func_append newdlprefiles " $dir/$linklib" 654797cf2ee2Smrg else 654897cf2ee2Smrg func_append newdlprefiles " $dir/$old_library" 654997cf2ee2Smrg # Keep a list of preopened convenience libraries to check 655097cf2ee2Smrg # that they are being used correctly in the link pass. 655197cf2ee2Smrg test -z "$libdir" && \ 655297cf2ee2Smrg func_append dlpreconveniencelibs " $dir/$old_library" 655397cf2ee2Smrg fi 655497cf2ee2Smrg ;; 655597cf2ee2Smrg * ) 655697cf2ee2Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 655797cf2ee2Smrg # are required to link). 655897cf2ee2Smrg if test -n "$old_library"; then 655997cf2ee2Smrg func_append newdlprefiles " $dir/$old_library" 656097cf2ee2Smrg # Keep a list of preopened convenience libraries to check 656197cf2ee2Smrg # that they are being used correctly in the link pass. 656297cf2ee2Smrg test -z "$libdir" && \ 656397cf2ee2Smrg func_append dlpreconveniencelibs " $dir/$old_library" 656497cf2ee2Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 656597cf2ee2Smrg elif test -n "$dlname"; then 656697cf2ee2Smrg func_append newdlprefiles " $dir/$dlname" 656797cf2ee2Smrg else 656897cf2ee2Smrg func_append newdlprefiles " $dir/$linklib" 656997cf2ee2Smrg fi 657097cf2ee2Smrg ;; 657197cf2ee2Smrg esac 65726e7d3316Smrg fi # $pass = dlpreopen 65736e7d3316Smrg 65746e7d3316Smrg if test -z "$libdir"; then 65756e7d3316Smrg # Link the convenience library 65766e7d3316Smrg if test "$linkmode" = lib; then 65776e7d3316Smrg deplibs="$dir/$old_library $deplibs" 65786e7d3316Smrg elif test "$linkmode,$pass" = "prog,link"; then 65796e7d3316Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 65806e7d3316Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 65816e7d3316Smrg else 65826e7d3316Smrg deplibs="$lib $deplibs" # used for prog,scan pass 65836e7d3316Smrg fi 65846e7d3316Smrg continue 65856e7d3316Smrg fi 65866e7d3316Smrg 65876e7d3316Smrg 65886e7d3316Smrg if test "$linkmode" = prog && test "$pass" != link; then 658997cf2ee2Smrg func_append newlib_search_path " $ladir" 65906e7d3316Smrg deplibs="$lib $deplibs" 65916e7d3316Smrg 65926e7d3316Smrg linkalldeplibs=no 65936e7d3316Smrg if test "$link_all_deplibs" != no || test -z "$library_names" || 65946e7d3316Smrg test "$build_libtool_libs" = no; then 65956e7d3316Smrg linkalldeplibs=yes 65966e7d3316Smrg fi 65976e7d3316Smrg 65986e7d3316Smrg tmp_libs= 65996e7d3316Smrg for deplib in $dependency_libs; do 66006e7d3316Smrg case $deplib in 66016e7d3316Smrg -L*) func_stripname '-L' '' "$deplib" 660297cf2ee2Smrg func_resolve_sysroot "$func_stripname_result" 660397cf2ee2Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 66046e7d3316Smrg ;; 66056e7d3316Smrg esac 66066e7d3316Smrg # Need to link against all dependency_libs? 66076e7d3316Smrg if test "$linkalldeplibs" = yes; then 66086e7d3316Smrg deplibs="$deplib $deplibs" 66096e7d3316Smrg else 66106e7d3316Smrg # Need to hardcode shared library paths 66116e7d3316Smrg # or/and link against static libraries 66126e7d3316Smrg newdependency_libs="$deplib $newdependency_libs" 66136e7d3316Smrg fi 661497cf2ee2Smrg if $opt_preserve_dup_deps ; then 66156e7d3316Smrg case "$tmp_libs " in 661697cf2ee2Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 66176e7d3316Smrg esac 66186e7d3316Smrg fi 661997cf2ee2Smrg func_append tmp_libs " $deplib" 66206e7d3316Smrg done # for deplib 66216e7d3316Smrg continue 66226e7d3316Smrg fi # $linkmode = prog... 66236e7d3316Smrg 66246e7d3316Smrg if test "$linkmode,$pass" = "prog,link"; then 66256e7d3316Smrg if test -n "$library_names" && 66266e7d3316Smrg { { test "$prefer_static_libs" = no || 66276e7d3316Smrg test "$prefer_static_libs,$installed" = "built,yes"; } || 66286e7d3316Smrg test -z "$old_library"; }; then 66296e7d3316Smrg # We need to hardcode the library path 66306e7d3316Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 66316e7d3316Smrg # Make sure the rpath contains only unique directories. 66326e7d3316Smrg case "$temp_rpath:" in 66336e7d3316Smrg *"$absdir:"*) ;; 663497cf2ee2Smrg *) func_append temp_rpath "$absdir:" ;; 66356e7d3316Smrg esac 66366e7d3316Smrg fi 66376e7d3316Smrg 66386e7d3316Smrg # Hardcode the library path. 66396e7d3316Smrg # Skip directories that are in the system default run-time 66406e7d3316Smrg # search path. 66416e7d3316Smrg case " $sys_lib_dlsearch_path " in 66426e7d3316Smrg *" $absdir "*) ;; 66436e7d3316Smrg *) 66446e7d3316Smrg case "$compile_rpath " in 66456e7d3316Smrg *" $absdir "*) ;; 664697cf2ee2Smrg *) func_append compile_rpath " $absdir" ;; 66476e7d3316Smrg esac 66486e7d3316Smrg ;; 66496e7d3316Smrg esac 66506e7d3316Smrg case " $sys_lib_dlsearch_path " in 66516e7d3316Smrg *" $libdir "*) ;; 66526e7d3316Smrg *) 66536e7d3316Smrg case "$finalize_rpath " in 66546e7d3316Smrg *" $libdir "*) ;; 665597cf2ee2Smrg *) func_append finalize_rpath " $libdir" ;; 66566e7d3316Smrg esac 66576e7d3316Smrg ;; 66586e7d3316Smrg esac 66596e7d3316Smrg fi # $linkmode,$pass = prog,link... 66606e7d3316Smrg 66616e7d3316Smrg if test "$alldeplibs" = yes && 66626e7d3316Smrg { test "$deplibs_check_method" = pass_all || 66636e7d3316Smrg { test "$build_libtool_libs" = yes && 66646e7d3316Smrg test -n "$library_names"; }; }; then 66656e7d3316Smrg # We only need to search for static libraries 66666e7d3316Smrg continue 66676e7d3316Smrg fi 66686e7d3316Smrg fi 66696e7d3316Smrg 66706e7d3316Smrg link_static=no # Whether the deplib will be linked statically 66716e7d3316Smrg use_static_libs=$prefer_static_libs 66726e7d3316Smrg if test "$use_static_libs" = built && test "$installed" = yes; then 66736e7d3316Smrg use_static_libs=no 66746e7d3316Smrg fi 66756e7d3316Smrg if test -n "$library_names" && 66766e7d3316Smrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 66776e7d3316Smrg case $host in 66786e7d3316Smrg *cygwin* | *mingw* | *cegcc*) 66796e7d3316Smrg # No point in relinking DLLs because paths are not encoded 668097cf2ee2Smrg func_append notinst_deplibs " $lib" 66816e7d3316Smrg need_relink=no 66826e7d3316Smrg ;; 66836e7d3316Smrg *) 66846e7d3316Smrg if test "$installed" = no; then 668597cf2ee2Smrg func_append notinst_deplibs " $lib" 66866e7d3316Smrg need_relink=yes 66876e7d3316Smrg fi 66886e7d3316Smrg ;; 66896e7d3316Smrg esac 66906e7d3316Smrg # This is a shared library 66916e7d3316Smrg 66926e7d3316Smrg # Warn about portability, can't link against -module's on some 66936e7d3316Smrg # systems (darwin). Don't bleat about dlopened modules though! 66946e7d3316Smrg dlopenmodule="" 66956e7d3316Smrg for dlpremoduletest in $dlprefiles; do 66966e7d3316Smrg if test "X$dlpremoduletest" = "X$lib"; then 66976e7d3316Smrg dlopenmodule="$dlpremoduletest" 66986e7d3316Smrg break 66996e7d3316Smrg fi 67006e7d3316Smrg done 67016e7d3316Smrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 67026e7d3316Smrg echo 67036e7d3316Smrg if test "$linkmode" = prog; then 67046e7d3316Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 67056e7d3316Smrg else 67066e7d3316Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 67076e7d3316Smrg fi 67086e7d3316Smrg $ECHO "*** $linklib is not portable!" 67096e7d3316Smrg fi 67106e7d3316Smrg if test "$linkmode" = lib && 67116e7d3316Smrg test "$hardcode_into_libs" = yes; then 67126e7d3316Smrg # Hardcode the library path. 67136e7d3316Smrg # Skip directories that are in the system default run-time 67146e7d3316Smrg # search path. 67156e7d3316Smrg case " $sys_lib_dlsearch_path " in 67166e7d3316Smrg *" $absdir "*) ;; 67176e7d3316Smrg *) 67186e7d3316Smrg case "$compile_rpath " in 67196e7d3316Smrg *" $absdir "*) ;; 672097cf2ee2Smrg *) func_append compile_rpath " $absdir" ;; 67216e7d3316Smrg esac 67226e7d3316Smrg ;; 67236e7d3316Smrg esac 67246e7d3316Smrg case " $sys_lib_dlsearch_path " in 67256e7d3316Smrg *" $libdir "*) ;; 67266e7d3316Smrg *) 67276e7d3316Smrg case "$finalize_rpath " in 67286e7d3316Smrg *" $libdir "*) ;; 672997cf2ee2Smrg *) func_append finalize_rpath " $libdir" ;; 67306e7d3316Smrg esac 67316e7d3316Smrg ;; 67326e7d3316Smrg esac 67336e7d3316Smrg fi 67346e7d3316Smrg 67356e7d3316Smrg if test -n "$old_archive_from_expsyms_cmds"; then 67366e7d3316Smrg # figure out the soname 67376e7d3316Smrg set dummy $library_names 67386e7d3316Smrg shift 67396e7d3316Smrg realname="$1" 67406e7d3316Smrg shift 67416e7d3316Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 67426e7d3316Smrg # use dlname if we got it. it's perfectly good, no? 67436e7d3316Smrg if test -n "$dlname"; then 67446e7d3316Smrg soname="$dlname" 67456e7d3316Smrg elif test -n "$soname_spec"; then 67466e7d3316Smrg # bleh windows 67476e7d3316Smrg case $host in 67486e7d3316Smrg *cygwin* | mingw* | *cegcc*) 67496e7d3316Smrg func_arith $current - $age 67506e7d3316Smrg major=$func_arith_result 67516e7d3316Smrg versuffix="-$major" 67526e7d3316Smrg ;; 67536e7d3316Smrg esac 67546e7d3316Smrg eval soname=\"$soname_spec\" 67556e7d3316Smrg else 67566e7d3316Smrg soname="$realname" 67576e7d3316Smrg fi 67586e7d3316Smrg 67596e7d3316Smrg # Make a new name for the extract_expsyms_cmds to use 67606e7d3316Smrg soroot="$soname" 67616e7d3316Smrg func_basename "$soroot" 67626e7d3316Smrg soname="$func_basename_result" 67636e7d3316Smrg func_stripname 'lib' '.dll' "$soname" 67646e7d3316Smrg newlib=libimp-$func_stripname_result.a 67656e7d3316Smrg 67666e7d3316Smrg # If the library has no export list, then create one now 67676e7d3316Smrg if test -f "$output_objdir/$soname-def"; then : 67686e7d3316Smrg else 67696e7d3316Smrg func_verbose "extracting exported symbol list from \`$soname'" 67706e7d3316Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 67716e7d3316Smrg fi 67726e7d3316Smrg 67736e7d3316Smrg # Create $newlib 67746e7d3316Smrg if test -f "$output_objdir/$newlib"; then :; else 67756e7d3316Smrg func_verbose "generating import library for \`$soname'" 67766e7d3316Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 67776e7d3316Smrg fi 67786e7d3316Smrg # make sure the library variables are pointing to the new library 67796e7d3316Smrg dir=$output_objdir 67806e7d3316Smrg linklib=$newlib 67816e7d3316Smrg fi # test -n "$old_archive_from_expsyms_cmds" 67826e7d3316Smrg 678397cf2ee2Smrg if test "$linkmode" = prog || test "$opt_mode" != relink; then 67846e7d3316Smrg add_shlibpath= 67856e7d3316Smrg add_dir= 67866e7d3316Smrg add= 67876e7d3316Smrg lib_linked=yes 67886e7d3316Smrg case $hardcode_action in 67896e7d3316Smrg immediate | unsupported) 67906e7d3316Smrg if test "$hardcode_direct" = no; then 67916e7d3316Smrg add="$dir/$linklib" 67926e7d3316Smrg case $host in 67936e7d3316Smrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 67946e7d3316Smrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 67956e7d3316Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 67966e7d3316Smrg *-*-unixware7*) add_dir="-L$dir" ;; 67976e7d3316Smrg *-*-darwin* ) 67986e7d3316Smrg # if the lib is a (non-dlopened) module then we can not 67996e7d3316Smrg # link against it, someone is ignoring the earlier warnings 68006e7d3316Smrg if /usr/bin/file -L $add 2> /dev/null | 68016e7d3316Smrg $GREP ": [^:]* bundle" >/dev/null ; then 68026e7d3316Smrg if test "X$dlopenmodule" != "X$lib"; then 68036e7d3316Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 68046e7d3316Smrg if test -z "$old_library" ; then 68056e7d3316Smrg echo 68066e7d3316Smrg echo "*** And there doesn't seem to be a static archive available" 68076e7d3316Smrg echo "*** The link will probably fail, sorry" 68086e7d3316Smrg else 68096e7d3316Smrg add="$dir/$old_library" 68106e7d3316Smrg fi 68116e7d3316Smrg elif test -n "$old_library"; then 68126e7d3316Smrg add="$dir/$old_library" 68136e7d3316Smrg fi 68146e7d3316Smrg fi 68156e7d3316Smrg esac 68166e7d3316Smrg elif test "$hardcode_minus_L" = no; then 68176e7d3316Smrg case $host in 68186e7d3316Smrg *-*-sunos*) add_shlibpath="$dir" ;; 68196e7d3316Smrg esac 68206e7d3316Smrg add_dir="-L$dir" 68216e7d3316Smrg add="-l$name" 68226e7d3316Smrg elif test "$hardcode_shlibpath_var" = no; then 68236e7d3316Smrg add_shlibpath="$dir" 68246e7d3316Smrg add="-l$name" 68256e7d3316Smrg else 68266e7d3316Smrg lib_linked=no 68276e7d3316Smrg fi 68286e7d3316Smrg ;; 68296e7d3316Smrg relink) 68306e7d3316Smrg if test "$hardcode_direct" = yes && 68316e7d3316Smrg test "$hardcode_direct_absolute" = no; then 68326e7d3316Smrg add="$dir/$linklib" 68336e7d3316Smrg elif test "$hardcode_minus_L" = yes; then 68346e7d3316Smrg add_dir="-L$dir" 68356e7d3316Smrg # Try looking first in the location we're being installed to. 68366e7d3316Smrg if test -n "$inst_prefix_dir"; then 68376e7d3316Smrg case $libdir in 68386e7d3316Smrg [\\/]*) 683997cf2ee2Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 68406e7d3316Smrg ;; 68416e7d3316Smrg esac 68426e7d3316Smrg fi 68436e7d3316Smrg add="-l$name" 68446e7d3316Smrg elif test "$hardcode_shlibpath_var" = yes; then 68456e7d3316Smrg add_shlibpath="$dir" 68466e7d3316Smrg add="-l$name" 68476e7d3316Smrg else 68486e7d3316Smrg lib_linked=no 68496e7d3316Smrg fi 68506e7d3316Smrg ;; 68516e7d3316Smrg *) lib_linked=no ;; 68526e7d3316Smrg esac 68536e7d3316Smrg 68546e7d3316Smrg if test "$lib_linked" != yes; then 68556e7d3316Smrg func_fatal_configuration "unsupported hardcode properties" 68566e7d3316Smrg fi 68576e7d3316Smrg 68586e7d3316Smrg if test -n "$add_shlibpath"; then 68596e7d3316Smrg case :$compile_shlibpath: in 68606e7d3316Smrg *":$add_shlibpath:"*) ;; 686197cf2ee2Smrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 68626e7d3316Smrg esac 68636e7d3316Smrg fi 68646e7d3316Smrg if test "$linkmode" = prog; then 68656e7d3316Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 68666e7d3316Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 68676e7d3316Smrg else 68686e7d3316Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 68696e7d3316Smrg test -n "$add" && deplibs="$add $deplibs" 68706e7d3316Smrg if test "$hardcode_direct" != yes && 68716e7d3316Smrg test "$hardcode_minus_L" != yes && 68726e7d3316Smrg test "$hardcode_shlibpath_var" = yes; then 68736e7d3316Smrg case :$finalize_shlibpath: in 68746e7d3316Smrg *":$libdir:"*) ;; 687597cf2ee2Smrg *) func_append finalize_shlibpath "$libdir:" ;; 68766e7d3316Smrg esac 68776e7d3316Smrg fi 68786e7d3316Smrg fi 68796e7d3316Smrg fi 68806e7d3316Smrg 688197cf2ee2Smrg if test "$linkmode" = prog || test "$opt_mode" = relink; then 68826e7d3316Smrg add_shlibpath= 68836e7d3316Smrg add_dir= 68846e7d3316Smrg add= 68856e7d3316Smrg # Finalize command for both is simple: just hardcode it. 68866e7d3316Smrg if test "$hardcode_direct" = yes && 68876e7d3316Smrg test "$hardcode_direct_absolute" = no; then 68886e7d3316Smrg add="$libdir/$linklib" 68896e7d3316Smrg elif test "$hardcode_minus_L" = yes; then 68906e7d3316Smrg add_dir="-L$libdir" 68916e7d3316Smrg add="-l$name" 68926e7d3316Smrg elif test "$hardcode_shlibpath_var" = yes; then 68936e7d3316Smrg case :$finalize_shlibpath: in 68946e7d3316Smrg *":$libdir:"*) ;; 689597cf2ee2Smrg *) func_append finalize_shlibpath "$libdir:" ;; 68966e7d3316Smrg esac 68976e7d3316Smrg add="-l$name" 68986e7d3316Smrg elif test "$hardcode_automatic" = yes; then 68996e7d3316Smrg if test -n "$inst_prefix_dir" && 69006e7d3316Smrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 69016e7d3316Smrg add="$inst_prefix_dir$libdir/$linklib" 69026e7d3316Smrg else 69036e7d3316Smrg add="$libdir/$linklib" 69046e7d3316Smrg fi 69056e7d3316Smrg else 69066e7d3316Smrg # We cannot seem to hardcode it, guess we'll fake it. 69076e7d3316Smrg add_dir="-L$libdir" 69086e7d3316Smrg # Try looking first in the location we're being installed to. 69096e7d3316Smrg if test -n "$inst_prefix_dir"; then 69106e7d3316Smrg case $libdir in 69116e7d3316Smrg [\\/]*) 691297cf2ee2Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 69136e7d3316Smrg ;; 69146e7d3316Smrg esac 69156e7d3316Smrg fi 69166e7d3316Smrg add="-l$name" 69176e7d3316Smrg fi 69186e7d3316Smrg 69196e7d3316Smrg if test "$linkmode" = prog; then 69206e7d3316Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 69216e7d3316Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 69226e7d3316Smrg else 69236e7d3316Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 69246e7d3316Smrg test -n "$add" && deplibs="$add $deplibs" 69256e7d3316Smrg fi 69266e7d3316Smrg fi 69276e7d3316Smrg elif test "$linkmode" = prog; then 69286e7d3316Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 69296e7d3316Smrg # is not unsupported. This is valid on all known static and 69306e7d3316Smrg # shared platforms. 69316e7d3316Smrg if test "$hardcode_direct" != unsupported; then 69326e7d3316Smrg test -n "$old_library" && linklib="$old_library" 69336e7d3316Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 69346e7d3316Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 69356e7d3316Smrg else 69366e7d3316Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 69376e7d3316Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 69386e7d3316Smrg fi 69396e7d3316Smrg elif test "$build_libtool_libs" = yes; then 69406e7d3316Smrg # Not a shared library 69416e7d3316Smrg if test "$deplibs_check_method" != pass_all; then 69426e7d3316Smrg # We're trying link a shared library against a static one 69436e7d3316Smrg # but the system doesn't support it. 69446e7d3316Smrg 69456e7d3316Smrg # Just print a warning and add the library to dependency_libs so 69466e7d3316Smrg # that the program can be linked against the static library. 69476e7d3316Smrg echo 69486e7d3316Smrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 69496e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 69506e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 69516e7d3316Smrg echo "*** shared version of the library, which you do not appear to have." 69526e7d3316Smrg if test "$module" = yes; then 69536e7d3316Smrg echo "*** But as you try to build a module library, libtool will still create " 69546e7d3316Smrg echo "*** a static module, that should work as long as the dlopening application" 69556e7d3316Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 69566e7d3316Smrg if test -z "$global_symbol_pipe"; then 69576e7d3316Smrg echo 69586e7d3316Smrg echo "*** However, this would only work if libtool was able to extract symbol" 69596e7d3316Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 69606e7d3316Smrg echo "*** not find such a program. So, this module is probably useless." 69616e7d3316Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 69626e7d3316Smrg fi 69636e7d3316Smrg if test "$build_old_libs" = no; then 69646e7d3316Smrg build_libtool_libs=module 69656e7d3316Smrg build_old_libs=yes 69666e7d3316Smrg else 69676e7d3316Smrg build_libtool_libs=no 69686e7d3316Smrg fi 69696e7d3316Smrg fi 69706e7d3316Smrg else 69716e7d3316Smrg deplibs="$dir/$old_library $deplibs" 69726e7d3316Smrg link_static=yes 69736e7d3316Smrg fi 69746e7d3316Smrg fi # link shared/static library? 69756e7d3316Smrg 69766e7d3316Smrg if test "$linkmode" = lib; then 69776e7d3316Smrg if test -n "$dependency_libs" && 69786e7d3316Smrg { test "$hardcode_into_libs" != yes || 69796e7d3316Smrg test "$build_old_libs" = yes || 69806e7d3316Smrg test "$link_static" = yes; }; then 69816e7d3316Smrg # Extract -R from dependency_libs 69826e7d3316Smrg temp_deplibs= 69836e7d3316Smrg for libdir in $dependency_libs; do 69846e7d3316Smrg case $libdir in 69856e7d3316Smrg -R*) func_stripname '-R' '' "$libdir" 69866e7d3316Smrg temp_xrpath=$func_stripname_result 69876e7d3316Smrg case " $xrpath " in 69886e7d3316Smrg *" $temp_xrpath "*) ;; 698997cf2ee2Smrg *) func_append xrpath " $temp_xrpath";; 69906e7d3316Smrg esac;; 699197cf2ee2Smrg *) func_append temp_deplibs " $libdir";; 69926e7d3316Smrg esac 69936e7d3316Smrg done 69946e7d3316Smrg dependency_libs="$temp_deplibs" 69956e7d3316Smrg fi 69966e7d3316Smrg 699797cf2ee2Smrg func_append newlib_search_path " $absdir" 69986e7d3316Smrg # Link against this library 69996e7d3316Smrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 70006e7d3316Smrg # ... and its dependency_libs 70016e7d3316Smrg tmp_libs= 70026e7d3316Smrg for deplib in $dependency_libs; do 70036e7d3316Smrg newdependency_libs="$deplib $newdependency_libs" 700497cf2ee2Smrg case $deplib in 700597cf2ee2Smrg -L*) func_stripname '-L' '' "$deplib" 700697cf2ee2Smrg func_resolve_sysroot "$func_stripname_result";; 700797cf2ee2Smrg *) func_resolve_sysroot "$deplib" ;; 700897cf2ee2Smrg esac 700997cf2ee2Smrg if $opt_preserve_dup_deps ; then 70106e7d3316Smrg case "$tmp_libs " in 701197cf2ee2Smrg *" $func_resolve_sysroot_result "*) 701297cf2ee2Smrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 70136e7d3316Smrg esac 70146e7d3316Smrg fi 701597cf2ee2Smrg func_append tmp_libs " $func_resolve_sysroot_result" 70166e7d3316Smrg done 70176e7d3316Smrg 70186e7d3316Smrg if test "$link_all_deplibs" != no; then 70196e7d3316Smrg # Add the search paths of all dependency libraries 70206e7d3316Smrg for deplib in $dependency_libs; do 70216e7d3316Smrg path= 70226e7d3316Smrg case $deplib in 70236e7d3316Smrg -L*) path="$deplib" ;; 70246e7d3316Smrg *.la) 702597cf2ee2Smrg func_resolve_sysroot "$deplib" 702697cf2ee2Smrg deplib=$func_resolve_sysroot_result 70276e7d3316Smrg func_dirname "$deplib" "" "." 702897cf2ee2Smrg dir=$func_dirname_result 70296e7d3316Smrg # We need an absolute path. 70306e7d3316Smrg case $dir in 70316e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 70326e7d3316Smrg *) 70336e7d3316Smrg absdir=`cd "$dir" && pwd` 70346e7d3316Smrg if test -z "$absdir"; then 70356e7d3316Smrg func_warning "cannot determine absolute directory name of \`$dir'" 70366e7d3316Smrg absdir="$dir" 70376e7d3316Smrg fi 70386e7d3316Smrg ;; 70396e7d3316Smrg esac 70406e7d3316Smrg if $GREP "^installed=no" $deplib > /dev/null; then 70416e7d3316Smrg case $host in 70426e7d3316Smrg *-*-darwin*) 70436e7d3316Smrg depdepl= 70446e7d3316Smrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 70456e7d3316Smrg if test -n "$deplibrary_names" ; then 70466e7d3316Smrg for tmp in $deplibrary_names ; do 70476e7d3316Smrg depdepl=$tmp 70486e7d3316Smrg done 70496e7d3316Smrg if test -f "$absdir/$objdir/$depdepl" ; then 70506e7d3316Smrg depdepl="$absdir/$objdir/$depdepl" 70516e7d3316Smrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 70526e7d3316Smrg if test -z "$darwin_install_name"; then 70536e7d3316Smrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 70546e7d3316Smrg fi 705597cf2ee2Smrg func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 705697cf2ee2Smrg func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 70576e7d3316Smrg path= 70586e7d3316Smrg fi 70596e7d3316Smrg fi 70606e7d3316Smrg ;; 70616e7d3316Smrg *) 70626e7d3316Smrg path="-L$absdir/$objdir" 70636e7d3316Smrg ;; 70646e7d3316Smrg esac 70656e7d3316Smrg else 70666e7d3316Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 70676e7d3316Smrg test -z "$libdir" && \ 70686e7d3316Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 70696e7d3316Smrg test "$absdir" != "$libdir" && \ 70706e7d3316Smrg func_warning "\`$deplib' seems to be moved" 70716e7d3316Smrg 70726e7d3316Smrg path="-L$absdir" 70736e7d3316Smrg fi 70746e7d3316Smrg ;; 70756e7d3316Smrg esac 70766e7d3316Smrg case " $deplibs " in 70776e7d3316Smrg *" $path "*) ;; 70786e7d3316Smrg *) deplibs="$path $deplibs" ;; 70796e7d3316Smrg esac 70806e7d3316Smrg done 70816e7d3316Smrg fi # link_all_deplibs != no 70826e7d3316Smrg fi # linkmode = lib 70836e7d3316Smrg done # for deplib in $libs 70846e7d3316Smrg if test "$pass" = link; then 70856e7d3316Smrg if test "$linkmode" = "prog"; then 70866e7d3316Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 70876e7d3316Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 70886e7d3316Smrg else 70896e7d3316Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 70906e7d3316Smrg fi 70916e7d3316Smrg fi 70926e7d3316Smrg dependency_libs="$newdependency_libs" 70936e7d3316Smrg if test "$pass" = dlpreopen; then 70946e7d3316Smrg # Link the dlpreopened libraries before other libraries 70956e7d3316Smrg for deplib in $save_deplibs; do 70966e7d3316Smrg deplibs="$deplib $deplibs" 70976e7d3316Smrg done 70986e7d3316Smrg fi 70996e7d3316Smrg if test "$pass" != dlopen; then 71006e7d3316Smrg if test "$pass" != conv; then 71016e7d3316Smrg # Make sure lib_search_path contains only unique directories. 71026e7d3316Smrg lib_search_path= 71036e7d3316Smrg for dir in $newlib_search_path; do 71046e7d3316Smrg case "$lib_search_path " in 71056e7d3316Smrg *" $dir "*) ;; 710697cf2ee2Smrg *) func_append lib_search_path " $dir" ;; 71076e7d3316Smrg esac 71086e7d3316Smrg done 71096e7d3316Smrg newlib_search_path= 71106e7d3316Smrg fi 71116e7d3316Smrg 71126e7d3316Smrg if test "$linkmode,$pass" != "prog,link"; then 71136e7d3316Smrg vars="deplibs" 71146e7d3316Smrg else 71156e7d3316Smrg vars="compile_deplibs finalize_deplibs" 71166e7d3316Smrg fi 71176e7d3316Smrg for var in $vars dependency_libs; do 71186e7d3316Smrg # Add libraries to $var in reverse order 71196e7d3316Smrg eval tmp_libs=\"\$$var\" 71206e7d3316Smrg new_libs= 71216e7d3316Smrg for deplib in $tmp_libs; do 71226e7d3316Smrg # FIXME: Pedantically, this is the right thing to do, so 71236e7d3316Smrg # that some nasty dependency loop isn't accidentally 71246e7d3316Smrg # broken: 71256e7d3316Smrg #new_libs="$deplib $new_libs" 71266e7d3316Smrg # Pragmatically, this seems to cause very few problems in 71276e7d3316Smrg # practice: 71286e7d3316Smrg case $deplib in 71296e7d3316Smrg -L*) new_libs="$deplib $new_libs" ;; 71306e7d3316Smrg -R*) ;; 71316e7d3316Smrg *) 71326e7d3316Smrg # And here is the reason: when a library appears more 71336e7d3316Smrg # than once as an explicit dependence of a library, or 71346e7d3316Smrg # is implicitly linked in more than once by the 71356e7d3316Smrg # compiler, it is considered special, and multiple 71366e7d3316Smrg # occurrences thereof are not removed. Compare this 71376e7d3316Smrg # with having the same library being listed as a 71386e7d3316Smrg # dependency of multiple other libraries: in this case, 71396e7d3316Smrg # we know (pedantically, we assume) the library does not 71406e7d3316Smrg # need to be listed more than once, so we keep only the 71416e7d3316Smrg # last copy. This is not always right, but it is rare 71426e7d3316Smrg # enough that we require users that really mean to play 71436e7d3316Smrg # such unportable linking tricks to link the library 71446e7d3316Smrg # using -Wl,-lname, so that libtool does not consider it 71456e7d3316Smrg # for duplicate removal. 71466e7d3316Smrg case " $specialdeplibs " in 71476e7d3316Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 71486e7d3316Smrg *) 71496e7d3316Smrg case " $new_libs " in 71506e7d3316Smrg *" $deplib "*) ;; 71516e7d3316Smrg *) new_libs="$deplib $new_libs" ;; 71526e7d3316Smrg esac 71536e7d3316Smrg ;; 71546e7d3316Smrg esac 71556e7d3316Smrg ;; 71566e7d3316Smrg esac 71576e7d3316Smrg done 71586e7d3316Smrg tmp_libs= 71596e7d3316Smrg for deplib in $new_libs; do 71606e7d3316Smrg case $deplib in 71616e7d3316Smrg -L*) 71626e7d3316Smrg case " $tmp_libs " in 71636e7d3316Smrg *" $deplib "*) ;; 716497cf2ee2Smrg *) func_append tmp_libs " $deplib" ;; 71656e7d3316Smrg esac 71666e7d3316Smrg ;; 716797cf2ee2Smrg *) func_append tmp_libs " $deplib" ;; 71686e7d3316Smrg esac 71696e7d3316Smrg done 71706e7d3316Smrg eval $var=\"$tmp_libs\" 71716e7d3316Smrg done # for var 71726e7d3316Smrg fi 71736e7d3316Smrg # Last step: remove runtime libs from dependency_libs 71746e7d3316Smrg # (they stay in deplibs) 71756e7d3316Smrg tmp_libs= 71766e7d3316Smrg for i in $dependency_libs ; do 71776e7d3316Smrg case " $predeps $postdeps $compiler_lib_search_path " in 71786e7d3316Smrg *" $i "*) 71796e7d3316Smrg i="" 71806e7d3316Smrg ;; 71816e7d3316Smrg esac 71826e7d3316Smrg if test -n "$i" ; then 718397cf2ee2Smrg func_append tmp_libs " $i" 71846e7d3316Smrg fi 71856e7d3316Smrg done 71866e7d3316Smrg dependency_libs=$tmp_libs 71876e7d3316Smrg done # for pass 71886e7d3316Smrg if test "$linkmode" = prog; then 71896e7d3316Smrg dlfiles="$newdlfiles" 71906e7d3316Smrg fi 71916e7d3316Smrg if test "$linkmode" = prog || test "$linkmode" = lib; then 71926e7d3316Smrg dlprefiles="$newdlprefiles" 71936e7d3316Smrg fi 71946e7d3316Smrg 71956e7d3316Smrg case $linkmode in 71966e7d3316Smrg oldlib) 71976e7d3316Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 71986e7d3316Smrg func_warning "\`-dlopen' is ignored for archives" 71996e7d3316Smrg fi 72006e7d3316Smrg 72016e7d3316Smrg case " $deplibs" in 72026e7d3316Smrg *\ -l* | *\ -L*) 72036e7d3316Smrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 72046e7d3316Smrg esac 72056e7d3316Smrg 72066e7d3316Smrg test -n "$rpath" && \ 72076e7d3316Smrg func_warning "\`-rpath' is ignored for archives" 72086e7d3316Smrg 72096e7d3316Smrg test -n "$xrpath" && \ 72106e7d3316Smrg func_warning "\`-R' is ignored for archives" 72116e7d3316Smrg 72126e7d3316Smrg test -n "$vinfo" && \ 72136e7d3316Smrg func_warning "\`-version-info/-version-number' is ignored for archives" 72146e7d3316Smrg 72156e7d3316Smrg test -n "$release" && \ 72166e7d3316Smrg func_warning "\`-release' is ignored for archives" 72176e7d3316Smrg 72186e7d3316Smrg test -n "$export_symbols$export_symbols_regex" && \ 72196e7d3316Smrg func_warning "\`-export-symbols' is ignored for archives" 72206e7d3316Smrg 72216e7d3316Smrg # Now set the variables for building old libraries. 72226e7d3316Smrg build_libtool_libs=no 72236e7d3316Smrg oldlibs="$output" 722497cf2ee2Smrg func_append objs "$old_deplibs" 72256e7d3316Smrg ;; 72266e7d3316Smrg 72276e7d3316Smrg lib) 72286e7d3316Smrg # Make sure we only generate libraries of the form `libNAME.la'. 72296e7d3316Smrg case $outputname in 72306e7d3316Smrg lib*) 72316e7d3316Smrg func_stripname 'lib' '.la' "$outputname" 72326e7d3316Smrg name=$func_stripname_result 72336e7d3316Smrg eval shared_ext=\"$shrext_cmds\" 72346e7d3316Smrg eval libname=\"$libname_spec\" 72356e7d3316Smrg ;; 72366e7d3316Smrg *) 72376e7d3316Smrg test "$module" = no && \ 72386e7d3316Smrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 72396e7d3316Smrg 72406e7d3316Smrg if test "$need_lib_prefix" != no; then 72416e7d3316Smrg # Add the "lib" prefix for modules if required 72426e7d3316Smrg func_stripname '' '.la' "$outputname" 72436e7d3316Smrg name=$func_stripname_result 72446e7d3316Smrg eval shared_ext=\"$shrext_cmds\" 72456e7d3316Smrg eval libname=\"$libname_spec\" 72466e7d3316Smrg else 72476e7d3316Smrg func_stripname '' '.la' "$outputname" 72486e7d3316Smrg libname=$func_stripname_result 72496e7d3316Smrg fi 72506e7d3316Smrg ;; 72516e7d3316Smrg esac 72526e7d3316Smrg 72536e7d3316Smrg if test -n "$objs"; then 72546e7d3316Smrg if test "$deplibs_check_method" != pass_all; then 72556e7d3316Smrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 72566e7d3316Smrg else 72576e7d3316Smrg echo 72586e7d3316Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 72596e7d3316Smrg $ECHO "*** objects $objs is not portable!" 726097cf2ee2Smrg func_append libobjs " $objs" 72616e7d3316Smrg fi 72626e7d3316Smrg fi 72636e7d3316Smrg 72646e7d3316Smrg test "$dlself" != no && \ 72656e7d3316Smrg func_warning "\`-dlopen self' is ignored for libtool libraries" 72666e7d3316Smrg 72676e7d3316Smrg set dummy $rpath 72686e7d3316Smrg shift 72696e7d3316Smrg test "$#" -gt 1 && \ 72706e7d3316Smrg func_warning "ignoring multiple \`-rpath's for a libtool library" 72716e7d3316Smrg 72726e7d3316Smrg install_libdir="$1" 72736e7d3316Smrg 72746e7d3316Smrg oldlibs= 72756e7d3316Smrg if test -z "$rpath"; then 72766e7d3316Smrg if test "$build_libtool_libs" = yes; then 72776e7d3316Smrg # Building a libtool convenience library. 72786e7d3316Smrg # Some compilers have problems with a `.al' extension so 72796e7d3316Smrg # convenience libraries should have the same extension an 72806e7d3316Smrg # archive normally would. 72816e7d3316Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 72826e7d3316Smrg build_libtool_libs=convenience 72836e7d3316Smrg build_old_libs=yes 72846e7d3316Smrg fi 72856e7d3316Smrg 72866e7d3316Smrg test -n "$vinfo" && \ 72876e7d3316Smrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 72886e7d3316Smrg 72896e7d3316Smrg test -n "$release" && \ 72906e7d3316Smrg func_warning "\`-release' is ignored for convenience libraries" 72916e7d3316Smrg else 72926e7d3316Smrg 72936e7d3316Smrg # Parse the version information argument. 72946e7d3316Smrg save_ifs="$IFS"; IFS=':' 72956e7d3316Smrg set dummy $vinfo 0 0 0 72966e7d3316Smrg shift 72976e7d3316Smrg IFS="$save_ifs" 72986e7d3316Smrg 72996e7d3316Smrg test -n "$7" && \ 73006e7d3316Smrg func_fatal_help "too many parameters to \`-version-info'" 73016e7d3316Smrg 73026e7d3316Smrg # convert absolute version numbers to libtool ages 73036e7d3316Smrg # this retains compatibility with .la files and attempts 73046e7d3316Smrg # to make the code below a bit more comprehensible 73056e7d3316Smrg 73066e7d3316Smrg case $vinfo_number in 73076e7d3316Smrg yes) 73086e7d3316Smrg number_major="$1" 73096e7d3316Smrg number_minor="$2" 73106e7d3316Smrg number_revision="$3" 73116e7d3316Smrg # 73126e7d3316Smrg # There are really only two kinds -- those that 73136e7d3316Smrg # use the current revision as the major version 73146e7d3316Smrg # and those that subtract age and use age as 73156e7d3316Smrg # a minor version. But, then there is irix 73166e7d3316Smrg # which has an extra 1 added just for fun 73176e7d3316Smrg # 73186e7d3316Smrg case $version_type in 73196e7d3316Smrg darwin|linux|osf|windows|none) 73206e7d3316Smrg func_arith $number_major + $number_minor 73216e7d3316Smrg current=$func_arith_result 73226e7d3316Smrg age="$number_minor" 73236e7d3316Smrg revision="$number_revision" 73246e7d3316Smrg ;; 73256e7d3316Smrg freebsd-aout|freebsd-elf|qnx|sunos) 73266e7d3316Smrg current="$number_major" 73276e7d3316Smrg revision="$number_minor" 73286e7d3316Smrg age="0" 73296e7d3316Smrg ;; 73306e7d3316Smrg irix|nonstopux) 73316e7d3316Smrg func_arith $number_major + $number_minor 73326e7d3316Smrg current=$func_arith_result 73336e7d3316Smrg age="$number_minor" 73346e7d3316Smrg revision="$number_minor" 73356e7d3316Smrg lt_irix_increment=no 73366e7d3316Smrg ;; 73376e7d3316Smrg esac 73386e7d3316Smrg ;; 73396e7d3316Smrg no) 73406e7d3316Smrg current="$1" 73416e7d3316Smrg revision="$2" 73426e7d3316Smrg age="$3" 73436e7d3316Smrg ;; 73446e7d3316Smrg esac 73456e7d3316Smrg 73466e7d3316Smrg # Check that each of the things are valid numbers. 73476e7d3316Smrg case $current in 73486e7d3316Smrg 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]) ;; 73496e7d3316Smrg *) 73506e7d3316Smrg func_error "CURRENT \`$current' must be a nonnegative integer" 73516e7d3316Smrg func_fatal_error "\`$vinfo' is not valid version information" 73526e7d3316Smrg ;; 73536e7d3316Smrg esac 73546e7d3316Smrg 73556e7d3316Smrg case $revision in 73566e7d3316Smrg 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]) ;; 73576e7d3316Smrg *) 73586e7d3316Smrg func_error "REVISION \`$revision' must be a nonnegative integer" 73596e7d3316Smrg func_fatal_error "\`$vinfo' is not valid version information" 73606e7d3316Smrg ;; 73616e7d3316Smrg esac 73626e7d3316Smrg 73636e7d3316Smrg case $age in 73646e7d3316Smrg 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]) ;; 73656e7d3316Smrg *) 73666e7d3316Smrg func_error "AGE \`$age' must be a nonnegative integer" 73676e7d3316Smrg func_fatal_error "\`$vinfo' is not valid version information" 73686e7d3316Smrg ;; 73696e7d3316Smrg esac 73706e7d3316Smrg 73716e7d3316Smrg if test "$age" -gt "$current"; then 73726e7d3316Smrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 73736e7d3316Smrg func_fatal_error "\`$vinfo' is not valid version information" 73746e7d3316Smrg fi 73756e7d3316Smrg 73766e7d3316Smrg # Calculate the version variables. 73776e7d3316Smrg major= 73786e7d3316Smrg versuffix= 73796e7d3316Smrg verstring= 73806e7d3316Smrg case $version_type in 73816e7d3316Smrg none) ;; 73826e7d3316Smrg 73836e7d3316Smrg darwin) 73846e7d3316Smrg # Like Linux, but with the current version available in 73856e7d3316Smrg # verstring for coding it into the library header 73866e7d3316Smrg func_arith $current - $age 73876e7d3316Smrg major=.$func_arith_result 73886e7d3316Smrg versuffix="$major.$age.$revision" 73896e7d3316Smrg # Darwin ld doesn't like 0 for these options... 73906e7d3316Smrg func_arith $current + 1 73916e7d3316Smrg minor_current=$func_arith_result 73926e7d3316Smrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 73936e7d3316Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 73946e7d3316Smrg ;; 73956e7d3316Smrg 73966e7d3316Smrg freebsd-aout) 73976e7d3316Smrg major=".$current" 73986e7d3316Smrg versuffix=".$current.$revision"; 73996e7d3316Smrg ;; 74006e7d3316Smrg 74016e7d3316Smrg freebsd-elf) 74026e7d3316Smrg major=".$current" 74036e7d3316Smrg versuffix=".$current" 74046e7d3316Smrg ;; 74056e7d3316Smrg 74066e7d3316Smrg irix | nonstopux) 74076e7d3316Smrg if test "X$lt_irix_increment" = "Xno"; then 74086e7d3316Smrg func_arith $current - $age 74096e7d3316Smrg else 74106e7d3316Smrg func_arith $current - $age + 1 74116e7d3316Smrg fi 74126e7d3316Smrg major=$func_arith_result 74136e7d3316Smrg 74146e7d3316Smrg case $version_type in 74156e7d3316Smrg nonstopux) verstring_prefix=nonstopux ;; 74166e7d3316Smrg *) verstring_prefix=sgi ;; 74176e7d3316Smrg esac 74186e7d3316Smrg verstring="$verstring_prefix$major.$revision" 74196e7d3316Smrg 74206e7d3316Smrg # Add in all the interfaces that we are compatible with. 74216e7d3316Smrg loop=$revision 74226e7d3316Smrg while test "$loop" -ne 0; do 74236e7d3316Smrg func_arith $revision - $loop 74246e7d3316Smrg iface=$func_arith_result 74256e7d3316Smrg func_arith $loop - 1 74266e7d3316Smrg loop=$func_arith_result 74276e7d3316Smrg verstring="$verstring_prefix$major.$iface:$verstring" 74286e7d3316Smrg done 74296e7d3316Smrg 74306e7d3316Smrg # Before this point, $major must not contain `.'. 74316e7d3316Smrg major=.$major 74326e7d3316Smrg versuffix="$major.$revision" 74336e7d3316Smrg ;; 74346e7d3316Smrg 74356e7d3316Smrg linux) 74366e7d3316Smrg func_arith $current - $age 74376e7d3316Smrg major=.$func_arith_result 74386e7d3316Smrg versuffix="$major.$age.$revision" 74396e7d3316Smrg ;; 74406e7d3316Smrg 74416e7d3316Smrg osf) 74426e7d3316Smrg func_arith $current - $age 74436e7d3316Smrg major=.$func_arith_result 74446e7d3316Smrg versuffix=".$current.$age.$revision" 74456e7d3316Smrg verstring="$current.$age.$revision" 74466e7d3316Smrg 74476e7d3316Smrg # Add in all the interfaces that we are compatible with. 74486e7d3316Smrg loop=$age 74496e7d3316Smrg while test "$loop" -ne 0; do 74506e7d3316Smrg func_arith $current - $loop 74516e7d3316Smrg iface=$func_arith_result 74526e7d3316Smrg func_arith $loop - 1 74536e7d3316Smrg loop=$func_arith_result 74546e7d3316Smrg verstring="$verstring:${iface}.0" 74556e7d3316Smrg done 74566e7d3316Smrg 74576e7d3316Smrg # Make executables depend on our current version. 745897cf2ee2Smrg func_append verstring ":${current}.0" 74596e7d3316Smrg ;; 74606e7d3316Smrg 74616e7d3316Smrg qnx) 74626e7d3316Smrg major=".$current" 74636e7d3316Smrg versuffix=".$current" 74646e7d3316Smrg ;; 74656e7d3316Smrg 74666e7d3316Smrg sunos) 74676e7d3316Smrg major=".$current" 74686e7d3316Smrg versuffix=".$current.$revision" 74696e7d3316Smrg ;; 74706e7d3316Smrg 74716e7d3316Smrg windows) 74726e7d3316Smrg # Use '-' rather than '.', since we only want one 74736e7d3316Smrg # extension on DOS 8.3 filesystems. 74746e7d3316Smrg func_arith $current - $age 74756e7d3316Smrg major=$func_arith_result 74766e7d3316Smrg versuffix="-$major" 74776e7d3316Smrg ;; 74786e7d3316Smrg 74796e7d3316Smrg *) 74806e7d3316Smrg func_fatal_configuration "unknown library version type \`$version_type'" 74816e7d3316Smrg ;; 74826e7d3316Smrg esac 74836e7d3316Smrg 74846e7d3316Smrg # Clear the version info if we defaulted, and they specified a release. 74856e7d3316Smrg if test -z "$vinfo" && test -n "$release"; then 74866e7d3316Smrg major= 74876e7d3316Smrg case $version_type in 74886e7d3316Smrg darwin) 74896e7d3316Smrg # we can't check for "0.0" in archive_cmds due to quoting 74906e7d3316Smrg # problems, so we reset it completely 74916e7d3316Smrg verstring= 74926e7d3316Smrg ;; 74936e7d3316Smrg *) 74946e7d3316Smrg verstring="0.0" 74956e7d3316Smrg ;; 74966e7d3316Smrg esac 74976e7d3316Smrg if test "$need_version" = no; then 74986e7d3316Smrg versuffix= 74996e7d3316Smrg else 75006e7d3316Smrg versuffix=".0.0" 75016e7d3316Smrg fi 75026e7d3316Smrg fi 75036e7d3316Smrg 75046e7d3316Smrg # Remove version info from name if versioning should be avoided 75056e7d3316Smrg if test "$avoid_version" = yes && test "$need_version" = no; then 75066e7d3316Smrg major= 75076e7d3316Smrg versuffix= 75086e7d3316Smrg verstring="" 75096e7d3316Smrg fi 75106e7d3316Smrg 75116e7d3316Smrg # Check to see if the archive will have undefined symbols. 75126e7d3316Smrg if test "$allow_undefined" = yes; then 75136e7d3316Smrg if test "$allow_undefined_flag" = unsupported; then 75146e7d3316Smrg func_warning "undefined symbols not allowed in $host shared libraries" 75156e7d3316Smrg build_libtool_libs=no 75166e7d3316Smrg build_old_libs=yes 75176e7d3316Smrg fi 75186e7d3316Smrg else 75196e7d3316Smrg # Don't allow undefined symbols. 75206e7d3316Smrg allow_undefined_flag="$no_undefined_flag" 75216e7d3316Smrg fi 75226e7d3316Smrg 75236e7d3316Smrg fi 75246e7d3316Smrg 75256e7d3316Smrg func_generate_dlsyms "$libname" "$libname" "yes" 752697cf2ee2Smrg func_append libobjs " $symfileobj" 75276e7d3316Smrg test "X$libobjs" = "X " && libobjs= 75286e7d3316Smrg 752997cf2ee2Smrg if test "$opt_mode" != relink; then 75306e7d3316Smrg # Remove our outputs, but don't remove object files since they 75316e7d3316Smrg # may have been created when compiling PIC objects. 75326e7d3316Smrg removelist= 75336e7d3316Smrg tempremovelist=`$ECHO "$output_objdir/*"` 75346e7d3316Smrg for p in $tempremovelist; do 75356e7d3316Smrg case $p in 75366e7d3316Smrg *.$objext | *.gcno) 75376e7d3316Smrg ;; 75386e7d3316Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 75396e7d3316Smrg if test "X$precious_files_regex" != "X"; then 75406e7d3316Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 75416e7d3316Smrg then 75426e7d3316Smrg continue 75436e7d3316Smrg fi 75446e7d3316Smrg fi 754597cf2ee2Smrg func_append removelist " $p" 75466e7d3316Smrg ;; 75476e7d3316Smrg *) ;; 75486e7d3316Smrg esac 75496e7d3316Smrg done 75506e7d3316Smrg test -n "$removelist" && \ 75516e7d3316Smrg func_show_eval "${RM}r \$removelist" 75526e7d3316Smrg fi 75536e7d3316Smrg 75546e7d3316Smrg # Now set the variables for building old libraries. 75556e7d3316Smrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 755697cf2ee2Smrg func_append oldlibs " $output_objdir/$libname.$libext" 75576e7d3316Smrg 75586e7d3316Smrg # Transform .lo files to .o files. 75596e7d3316Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 75606e7d3316Smrg fi 75616e7d3316Smrg 75626e7d3316Smrg # Eliminate all temporary directories. 75636e7d3316Smrg #for path in $notinst_path; do 75646e7d3316Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 75656e7d3316Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 75666e7d3316Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 75676e7d3316Smrg #done 75686e7d3316Smrg 75696e7d3316Smrg if test -n "$xrpath"; then 75706e7d3316Smrg # If the user specified any rpath flags, then add them. 75716e7d3316Smrg temp_xrpath= 75726e7d3316Smrg for libdir in $xrpath; do 757397cf2ee2Smrg func_replace_sysroot "$libdir" 757497cf2ee2Smrg func_append temp_xrpath " -R$func_replace_sysroot_result" 75756e7d3316Smrg case "$finalize_rpath " in 75766e7d3316Smrg *" $libdir "*) ;; 757797cf2ee2Smrg *) func_append finalize_rpath " $libdir" ;; 75786e7d3316Smrg esac 75796e7d3316Smrg done 75806e7d3316Smrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 75816e7d3316Smrg dependency_libs="$temp_xrpath $dependency_libs" 75826e7d3316Smrg fi 75836e7d3316Smrg fi 75846e7d3316Smrg 75856e7d3316Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 75866e7d3316Smrg old_dlfiles="$dlfiles" 75876e7d3316Smrg dlfiles= 75886e7d3316Smrg for lib in $old_dlfiles; do 75896e7d3316Smrg case " $dlprefiles $dlfiles " in 75906e7d3316Smrg *" $lib "*) ;; 759197cf2ee2Smrg *) func_append dlfiles " $lib" ;; 75926e7d3316Smrg esac 75936e7d3316Smrg done 75946e7d3316Smrg 75956e7d3316Smrg # Make sure dlprefiles contains only unique files 75966e7d3316Smrg old_dlprefiles="$dlprefiles" 75976e7d3316Smrg dlprefiles= 75986e7d3316Smrg for lib in $old_dlprefiles; do 75996e7d3316Smrg case "$dlprefiles " in 76006e7d3316Smrg *" $lib "*) ;; 760197cf2ee2Smrg *) func_append dlprefiles " $lib" ;; 76026e7d3316Smrg esac 76036e7d3316Smrg done 76046e7d3316Smrg 76056e7d3316Smrg if test "$build_libtool_libs" = yes; then 76066e7d3316Smrg if test -n "$rpath"; then 76076e7d3316Smrg case $host in 76086e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 76096e7d3316Smrg # these systems don't actually have a c library (as such)! 76106e7d3316Smrg ;; 76116e7d3316Smrg *-*-rhapsody* | *-*-darwin1.[012]) 76126e7d3316Smrg # Rhapsody C library is in the System framework 761397cf2ee2Smrg func_append deplibs " System.ltframework" 76146e7d3316Smrg ;; 76156e7d3316Smrg *-*-netbsd*) 76166e7d3316Smrg # Don't link with libc until the a.out ld.so is fixed. 76176e7d3316Smrg ;; 76186e7d3316Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 76196e7d3316Smrg # Do not include libc due to us having libc/libc_r. 76206e7d3316Smrg ;; 76216e7d3316Smrg *-*-sco3.2v5* | *-*-sco5v6*) 76226e7d3316Smrg # Causes problems with __ctype 76236e7d3316Smrg ;; 76246e7d3316Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 76256e7d3316Smrg # Compiler inserts libc in the correct place for threads to work 76266e7d3316Smrg ;; 76276e7d3316Smrg *) 76286e7d3316Smrg # Add libc to deplibs on all other systems if necessary. 76296e7d3316Smrg if test "$build_libtool_need_lc" = "yes"; then 763097cf2ee2Smrg func_append deplibs " -lc" 76316e7d3316Smrg fi 76326e7d3316Smrg ;; 76336e7d3316Smrg esac 76346e7d3316Smrg fi 76356e7d3316Smrg 76366e7d3316Smrg # Transform deplibs into only deplibs that can be linked in shared. 76376e7d3316Smrg name_save=$name 76386e7d3316Smrg libname_save=$libname 76396e7d3316Smrg release_save=$release 76406e7d3316Smrg versuffix_save=$versuffix 76416e7d3316Smrg major_save=$major 76426e7d3316Smrg # I'm not sure if I'm treating the release correctly. I think 76436e7d3316Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 76446e7d3316Smrg # add it in twice. Is that correct? 76456e7d3316Smrg release="" 76466e7d3316Smrg versuffix="" 76476e7d3316Smrg major="" 76486e7d3316Smrg newdeplibs= 76496e7d3316Smrg droppeddeps=no 76506e7d3316Smrg case $deplibs_check_method in 76516e7d3316Smrg pass_all) 76526e7d3316Smrg # Don't check for shared/static. Everything works. 76536e7d3316Smrg # This might be a little naive. We might want to check 76546e7d3316Smrg # whether the library exists or not. But this is on 76556e7d3316Smrg # osf3 & osf4 and I'm not really sure... Just 76566e7d3316Smrg # implementing what was already the behavior. 76576e7d3316Smrg newdeplibs=$deplibs 76586e7d3316Smrg ;; 76596e7d3316Smrg test_compile) 76606e7d3316Smrg # This code stresses the "libraries are programs" paradigm to its 76616e7d3316Smrg # limits. Maybe even breaks it. We compile a program, linking it 76626e7d3316Smrg # against the deplibs as a proxy for the library. Then we can check 76636e7d3316Smrg # whether they linked in statically or dynamically with ldd. 76646e7d3316Smrg $opt_dry_run || $RM conftest.c 76656e7d3316Smrg cat > conftest.c <<EOF 76666e7d3316Smrg int main() { return 0; } 76676e7d3316SmrgEOF 76686e7d3316Smrg $opt_dry_run || $RM conftest 76696e7d3316Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 76706e7d3316Smrg ldd_output=`ldd conftest` 76716e7d3316Smrg for i in $deplibs; do 76726e7d3316Smrg case $i in 76736e7d3316Smrg -l*) 76746e7d3316Smrg func_stripname -l '' "$i" 76756e7d3316Smrg name=$func_stripname_result 76766e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 76776e7d3316Smrg case " $predeps $postdeps " in 76786e7d3316Smrg *" $i "*) 767997cf2ee2Smrg func_append newdeplibs " $i" 76806e7d3316Smrg i="" 76816e7d3316Smrg ;; 76826e7d3316Smrg esac 76836e7d3316Smrg fi 76846e7d3316Smrg if test -n "$i" ; then 76856e7d3316Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 76866e7d3316Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 76876e7d3316Smrg set dummy $deplib_matches; shift 76886e7d3316Smrg deplib_match=$1 76896e7d3316Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 769097cf2ee2Smrg func_append newdeplibs " $i" 76916e7d3316Smrg else 76926e7d3316Smrg droppeddeps=yes 76936e7d3316Smrg echo 76946e7d3316Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 76956e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 76966e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 76976e7d3316Smrg echo "*** shared version of the library, which I believe you do not have" 76986e7d3316Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 76996e7d3316Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 77006e7d3316Smrg fi 77016e7d3316Smrg fi 77026e7d3316Smrg ;; 77036e7d3316Smrg *) 770497cf2ee2Smrg func_append newdeplibs " $i" 77056e7d3316Smrg ;; 77066e7d3316Smrg esac 77076e7d3316Smrg done 77086e7d3316Smrg else 77096e7d3316Smrg # Error occurred in the first compile. Let's try to salvage 77106e7d3316Smrg # the situation: Compile a separate program for each library. 77116e7d3316Smrg for i in $deplibs; do 77126e7d3316Smrg case $i in 77136e7d3316Smrg -l*) 77146e7d3316Smrg func_stripname -l '' "$i" 77156e7d3316Smrg name=$func_stripname_result 77166e7d3316Smrg $opt_dry_run || $RM conftest 77176e7d3316Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 77186e7d3316Smrg ldd_output=`ldd conftest` 77196e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 77206e7d3316Smrg case " $predeps $postdeps " in 77216e7d3316Smrg *" $i "*) 772297cf2ee2Smrg func_append newdeplibs " $i" 77236e7d3316Smrg i="" 77246e7d3316Smrg ;; 77256e7d3316Smrg esac 77266e7d3316Smrg fi 77276e7d3316Smrg if test -n "$i" ; then 77286e7d3316Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 77296e7d3316Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 77306e7d3316Smrg set dummy $deplib_matches; shift 77316e7d3316Smrg deplib_match=$1 77326e7d3316Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 773397cf2ee2Smrg func_append newdeplibs " $i" 77346e7d3316Smrg else 77356e7d3316Smrg droppeddeps=yes 77366e7d3316Smrg echo 77376e7d3316Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 77386e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 77396e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 77406e7d3316Smrg echo "*** shared version of the library, which you do not appear to have" 77416e7d3316Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 77426e7d3316Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 77436e7d3316Smrg fi 77446e7d3316Smrg fi 77456e7d3316Smrg else 77466e7d3316Smrg droppeddeps=yes 77476e7d3316Smrg echo 77486e7d3316Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 77496e7d3316Smrg echo "*** make it link in! You will probably need to install it or some" 77506e7d3316Smrg echo "*** library that it depends on before this library will be fully" 77516e7d3316Smrg echo "*** functional. Installing it before continuing would be even better." 77526e7d3316Smrg fi 77536e7d3316Smrg ;; 77546e7d3316Smrg *) 775597cf2ee2Smrg func_append newdeplibs " $i" 77566e7d3316Smrg ;; 77576e7d3316Smrg esac 77586e7d3316Smrg done 77596e7d3316Smrg fi 77606e7d3316Smrg ;; 77616e7d3316Smrg file_magic*) 77626e7d3316Smrg set dummy $deplibs_check_method; shift 77636e7d3316Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 77646e7d3316Smrg for a_deplib in $deplibs; do 77656e7d3316Smrg case $a_deplib in 77666e7d3316Smrg -l*) 77676e7d3316Smrg func_stripname -l '' "$a_deplib" 77686e7d3316Smrg name=$func_stripname_result 77696e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 77706e7d3316Smrg case " $predeps $postdeps " in 77716e7d3316Smrg *" $a_deplib "*) 777297cf2ee2Smrg func_append newdeplibs " $a_deplib" 77736e7d3316Smrg a_deplib="" 77746e7d3316Smrg ;; 77756e7d3316Smrg esac 77766e7d3316Smrg fi 77776e7d3316Smrg if test -n "$a_deplib" ; then 77786e7d3316Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 777997cf2ee2Smrg if test -n "$file_magic_glob"; then 778097cf2ee2Smrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 778197cf2ee2Smrg else 778297cf2ee2Smrg libnameglob=$libname 778397cf2ee2Smrg fi 778497cf2ee2Smrg test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 77856e7d3316Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 778697cf2ee2Smrg if test "$want_nocaseglob" = yes; then 778797cf2ee2Smrg shopt -s nocaseglob 778897cf2ee2Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 778997cf2ee2Smrg $nocaseglob 779097cf2ee2Smrg else 779197cf2ee2Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 779297cf2ee2Smrg fi 77936e7d3316Smrg for potent_lib in $potential_libs; do 77946e7d3316Smrg # Follow soft links. 77956e7d3316Smrg if ls -lLd "$potent_lib" 2>/dev/null | 77966e7d3316Smrg $GREP " -> " >/dev/null; then 77976e7d3316Smrg continue 77986e7d3316Smrg fi 77996e7d3316Smrg # The statement above tries to avoid entering an 78006e7d3316Smrg # endless loop below, in case of cyclic links. 78016e7d3316Smrg # We might still enter an endless loop, since a link 78026e7d3316Smrg # loop can be closed while we follow links, 78036e7d3316Smrg # but so what? 78046e7d3316Smrg potlib="$potent_lib" 78056e7d3316Smrg while test -h "$potlib" 2>/dev/null; do 78066e7d3316Smrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 78076e7d3316Smrg case $potliblink in 78086e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 78096e7d3316Smrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 78106e7d3316Smrg esac 78116e7d3316Smrg done 78126e7d3316Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 78136e7d3316Smrg $SED -e 10q | 78146e7d3316Smrg $EGREP "$file_magic_regex" > /dev/null; then 781597cf2ee2Smrg func_append newdeplibs " $a_deplib" 78166e7d3316Smrg a_deplib="" 78176e7d3316Smrg break 2 78186e7d3316Smrg fi 78196e7d3316Smrg done 78206e7d3316Smrg done 78216e7d3316Smrg fi 78226e7d3316Smrg if test -n "$a_deplib" ; then 78236e7d3316Smrg droppeddeps=yes 78246e7d3316Smrg echo 78256e7d3316Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 78266e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 78276e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 78286e7d3316Smrg echo "*** shared version of the library, which you do not appear to have" 78296e7d3316Smrg echo "*** because I did check the linker path looking for a file starting" 78306e7d3316Smrg if test -z "$potlib" ; then 78316e7d3316Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 78326e7d3316Smrg else 78336e7d3316Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 78346e7d3316Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 78356e7d3316Smrg fi 78366e7d3316Smrg fi 78376e7d3316Smrg ;; 78386e7d3316Smrg *) 78396e7d3316Smrg # Add a -L argument. 784097cf2ee2Smrg func_append newdeplibs " $a_deplib" 78416e7d3316Smrg ;; 78426e7d3316Smrg esac 78436e7d3316Smrg done # Gone through all deplibs. 78446e7d3316Smrg ;; 78456e7d3316Smrg match_pattern*) 78466e7d3316Smrg set dummy $deplibs_check_method; shift 78476e7d3316Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 78486e7d3316Smrg for a_deplib in $deplibs; do 78496e7d3316Smrg case $a_deplib in 78506e7d3316Smrg -l*) 78516e7d3316Smrg func_stripname -l '' "$a_deplib" 78526e7d3316Smrg name=$func_stripname_result 78536e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 78546e7d3316Smrg case " $predeps $postdeps " in 78556e7d3316Smrg *" $a_deplib "*) 785697cf2ee2Smrg func_append newdeplibs " $a_deplib" 78576e7d3316Smrg a_deplib="" 78586e7d3316Smrg ;; 78596e7d3316Smrg esac 78606e7d3316Smrg fi 78616e7d3316Smrg if test -n "$a_deplib" ; then 78626e7d3316Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 78636e7d3316Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 78646e7d3316Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 78656e7d3316Smrg for potent_lib in $potential_libs; do 78666e7d3316Smrg potlib="$potent_lib" # see symlink-check above in file_magic test 78676e7d3316Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 78686e7d3316Smrg $EGREP "$match_pattern_regex" > /dev/null; then 786997cf2ee2Smrg func_append newdeplibs " $a_deplib" 78706e7d3316Smrg a_deplib="" 78716e7d3316Smrg break 2 78726e7d3316Smrg fi 78736e7d3316Smrg done 78746e7d3316Smrg done 78756e7d3316Smrg fi 78766e7d3316Smrg if test -n "$a_deplib" ; then 78776e7d3316Smrg droppeddeps=yes 78786e7d3316Smrg echo 78796e7d3316Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 78806e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 78816e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 78826e7d3316Smrg echo "*** shared version of the library, which you do not appear to have" 78836e7d3316Smrg echo "*** because I did check the linker path looking for a file starting" 78846e7d3316Smrg if test -z "$potlib" ; then 78856e7d3316Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 78866e7d3316Smrg else 78876e7d3316Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 78886e7d3316Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 78896e7d3316Smrg fi 78906e7d3316Smrg fi 78916e7d3316Smrg ;; 78926e7d3316Smrg *) 78936e7d3316Smrg # Add a -L argument. 789497cf2ee2Smrg func_append newdeplibs " $a_deplib" 78956e7d3316Smrg ;; 78966e7d3316Smrg esac 78976e7d3316Smrg done # Gone through all deplibs. 78986e7d3316Smrg ;; 78996e7d3316Smrg none | unknown | *) 79006e7d3316Smrg newdeplibs="" 79016e7d3316Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 79026e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 79036e7d3316Smrg for i in $predeps $postdeps ; do 79046e7d3316Smrg # can't use Xsed below, because $i might contain '/' 79056e7d3316Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 79066e7d3316Smrg done 79076e7d3316Smrg fi 79086e7d3316Smrg case $tmp_deplibs in 79096e7d3316Smrg *[!\ \ ]*) 79106e7d3316Smrg echo 79116e7d3316Smrg if test "X$deplibs_check_method" = "Xnone"; then 79126e7d3316Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 79136e7d3316Smrg else 79146e7d3316Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 79156e7d3316Smrg fi 79166e7d3316Smrg echo "*** All declared inter-library dependencies are being dropped." 79176e7d3316Smrg droppeddeps=yes 79186e7d3316Smrg ;; 79196e7d3316Smrg esac 79206e7d3316Smrg ;; 79216e7d3316Smrg esac 79226e7d3316Smrg versuffix=$versuffix_save 79236e7d3316Smrg major=$major_save 79246e7d3316Smrg release=$release_save 79256e7d3316Smrg libname=$libname_save 79266e7d3316Smrg name=$name_save 79276e7d3316Smrg 79286e7d3316Smrg case $host in 79296e7d3316Smrg *-*-rhapsody* | *-*-darwin1.[012]) 79306e7d3316Smrg # On Rhapsody replace the C library with the System framework 79316e7d3316Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 79326e7d3316Smrg ;; 79336e7d3316Smrg esac 79346e7d3316Smrg 79356e7d3316Smrg if test "$droppeddeps" = yes; then 79366e7d3316Smrg if test "$module" = yes; then 79376e7d3316Smrg echo 79386e7d3316Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 79396e7d3316Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 79406e7d3316Smrg echo "*** a static module, that should work as long as the dlopening" 79416e7d3316Smrg echo "*** application is linked with the -dlopen flag." 79426e7d3316Smrg if test -z "$global_symbol_pipe"; then 79436e7d3316Smrg echo 79446e7d3316Smrg echo "*** However, this would only work if libtool was able to extract symbol" 79456e7d3316Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 79466e7d3316Smrg echo "*** not find such a program. So, this module is probably useless." 79476e7d3316Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 79486e7d3316Smrg fi 79496e7d3316Smrg if test "$build_old_libs" = no; then 79506e7d3316Smrg oldlibs="$output_objdir/$libname.$libext" 79516e7d3316Smrg build_libtool_libs=module 79526e7d3316Smrg build_old_libs=yes 79536e7d3316Smrg else 79546e7d3316Smrg build_libtool_libs=no 79556e7d3316Smrg fi 79566e7d3316Smrg else 79576e7d3316Smrg echo "*** The inter-library dependencies that have been dropped here will be" 79586e7d3316Smrg echo "*** automatically added whenever a program is linked with this library" 79596e7d3316Smrg echo "*** or is declared to -dlopen it." 79606e7d3316Smrg 79616e7d3316Smrg if test "$allow_undefined" = no; then 79626e7d3316Smrg echo 79636e7d3316Smrg echo "*** Since this library must not contain undefined symbols," 79646e7d3316Smrg echo "*** because either the platform does not support them or" 79656e7d3316Smrg echo "*** it was explicitly requested with -no-undefined," 79666e7d3316Smrg echo "*** libtool will only create a static version of it." 79676e7d3316Smrg if test "$build_old_libs" = no; then 79686e7d3316Smrg oldlibs="$output_objdir/$libname.$libext" 79696e7d3316Smrg build_libtool_libs=module 79706e7d3316Smrg build_old_libs=yes 79716e7d3316Smrg else 79726e7d3316Smrg build_libtool_libs=no 79736e7d3316Smrg fi 79746e7d3316Smrg fi 79756e7d3316Smrg fi 79766e7d3316Smrg fi 79776e7d3316Smrg # Done checking deplibs! 79786e7d3316Smrg deplibs=$newdeplibs 79796e7d3316Smrg fi 79806e7d3316Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 79816e7d3316Smrg case $host in 79826e7d3316Smrg *-*-darwin*) 79836e7d3316Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 79846e7d3316Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 79856e7d3316Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 79866e7d3316Smrg ;; 79876e7d3316Smrg esac 79886e7d3316Smrg 79896e7d3316Smrg # move library search paths that coincide with paths to not yet 79906e7d3316Smrg # installed libraries to the beginning of the library search list 79916e7d3316Smrg new_libs= 79926e7d3316Smrg for path in $notinst_path; do 79936e7d3316Smrg case " $new_libs " in 79946e7d3316Smrg *" -L$path/$objdir "*) ;; 79956e7d3316Smrg *) 79966e7d3316Smrg case " $deplibs " in 79976e7d3316Smrg *" -L$path/$objdir "*) 799897cf2ee2Smrg func_append new_libs " -L$path/$objdir" ;; 79996e7d3316Smrg esac 80006e7d3316Smrg ;; 80016e7d3316Smrg esac 80026e7d3316Smrg done 80036e7d3316Smrg for deplib in $deplibs; do 80046e7d3316Smrg case $deplib in 80056e7d3316Smrg -L*) 80066e7d3316Smrg case " $new_libs " in 80076e7d3316Smrg *" $deplib "*) ;; 800897cf2ee2Smrg *) func_append new_libs " $deplib" ;; 80096e7d3316Smrg esac 80106e7d3316Smrg ;; 801197cf2ee2Smrg *) func_append new_libs " $deplib" ;; 80126e7d3316Smrg esac 80136e7d3316Smrg done 80146e7d3316Smrg deplibs="$new_libs" 80156e7d3316Smrg 80166e7d3316Smrg # All the library-specific variables (install_libdir is set above). 80176e7d3316Smrg library_names= 80186e7d3316Smrg old_library= 80196e7d3316Smrg dlname= 80206e7d3316Smrg 80216e7d3316Smrg # Test again, we may have decided not to build it any more 80226e7d3316Smrg if test "$build_libtool_libs" = yes; then 80236e7d3316Smrg if test "$hardcode_into_libs" = yes; then 80246e7d3316Smrg # Hardcode the library paths 80256e7d3316Smrg hardcode_libdirs= 80266e7d3316Smrg dep_rpath= 80276e7d3316Smrg rpath="$finalize_rpath" 802897cf2ee2Smrg test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 80296e7d3316Smrg for libdir in $rpath; do 80306e7d3316Smrg if test -n "$hardcode_libdir_flag_spec"; then 80316e7d3316Smrg if test -n "$hardcode_libdir_separator"; then 803297cf2ee2Smrg func_replace_sysroot "$libdir" 803397cf2ee2Smrg libdir=$func_replace_sysroot_result 80346e7d3316Smrg if test -z "$hardcode_libdirs"; then 80356e7d3316Smrg hardcode_libdirs="$libdir" 80366e7d3316Smrg else 80376e7d3316Smrg # Just accumulate the unique libdirs. 80386e7d3316Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 80396e7d3316Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 80406e7d3316Smrg ;; 80416e7d3316Smrg *) 804297cf2ee2Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 80436e7d3316Smrg ;; 80446e7d3316Smrg esac 80456e7d3316Smrg fi 80466e7d3316Smrg else 80476e7d3316Smrg eval flag=\"$hardcode_libdir_flag_spec\" 804897cf2ee2Smrg func_append dep_rpath " $flag" 80496e7d3316Smrg fi 80506e7d3316Smrg elif test -n "$runpath_var"; then 80516e7d3316Smrg case "$perm_rpath " in 80526e7d3316Smrg *" $libdir "*) ;; 805397cf2ee2Smrg *) func_apped perm_rpath " $libdir" ;; 80546e7d3316Smrg esac 80556e7d3316Smrg fi 80566e7d3316Smrg done 80576e7d3316Smrg # Substitute the hardcoded libdirs into the rpath. 80586e7d3316Smrg if test -n "$hardcode_libdir_separator" && 80596e7d3316Smrg test -n "$hardcode_libdirs"; then 80606e7d3316Smrg libdir="$hardcode_libdirs" 80616e7d3316Smrg if test -n "$hardcode_libdir_flag_spec_ld"; then 80626e7d3316Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" 80636e7d3316Smrg else 80646e7d3316Smrg eval dep_rpath=\"$hardcode_libdir_flag_spec\" 80656e7d3316Smrg fi 80666e7d3316Smrg fi 80676e7d3316Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 80686e7d3316Smrg # We should set the runpath_var. 80696e7d3316Smrg rpath= 80706e7d3316Smrg for dir in $perm_rpath; do 807197cf2ee2Smrg func_append rpath "$dir:" 80726e7d3316Smrg done 80736e7d3316Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 80746e7d3316Smrg fi 80756e7d3316Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 80766e7d3316Smrg fi 8077a966c04fSmrg 80786e7d3316Smrg shlibpath="$finalize_shlibpath" 807997cf2ee2Smrg test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 80806e7d3316Smrg if test -n "$shlibpath"; then 80816e7d3316Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 80826e7d3316Smrg fi 8083a966c04fSmrg 80846e7d3316Smrg # Get the real and link names of the library. 80856e7d3316Smrg eval shared_ext=\"$shrext_cmds\" 80866e7d3316Smrg eval library_names=\"$library_names_spec\" 80876e7d3316Smrg set dummy $library_names 80886e7d3316Smrg shift 80896e7d3316Smrg realname="$1" 80906e7d3316Smrg shift 8091a966c04fSmrg 80926e7d3316Smrg if test -n "$soname_spec"; then 80936e7d3316Smrg eval soname=\"$soname_spec\" 80946e7d3316Smrg else 80956e7d3316Smrg soname="$realname" 80966e7d3316Smrg fi 80976e7d3316Smrg if test -z "$dlname"; then 80986e7d3316Smrg dlname=$soname 80996e7d3316Smrg fi 8100a966c04fSmrg 81016e7d3316Smrg lib="$output_objdir/$realname" 81026e7d3316Smrg linknames= 81036e7d3316Smrg for link 81046e7d3316Smrg do 810597cf2ee2Smrg func_append linknames " $link" 81066e7d3316Smrg done 8107a966c04fSmrg 81086e7d3316Smrg # Use standard objects if they are pic 81096e7d3316Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 81106e7d3316Smrg test "X$libobjs" = "X " && libobjs= 8111a966c04fSmrg 81126e7d3316Smrg delfiles= 81136e7d3316Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 81146e7d3316Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 81156e7d3316Smrg export_symbols="$output_objdir/$libname.uexp" 811697cf2ee2Smrg func_append delfiles " $export_symbols" 81176e7d3316Smrg fi 8118a966c04fSmrg 81196e7d3316Smrg orig_export_symbols= 81206e7d3316Smrg case $host_os in 81216e7d3316Smrg cygwin* | mingw* | cegcc*) 81226e7d3316Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 81236e7d3316Smrg # exporting using user supplied symfile 81246e7d3316Smrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 81256e7d3316Smrg # and it's NOT already a .def file. Must figure out 81266e7d3316Smrg # which of the given symbols are data symbols and tag 81276e7d3316Smrg # them as such. So, trigger use of export_symbols_cmds. 81286e7d3316Smrg # export_symbols gets reassigned inside the "prepare 81296e7d3316Smrg # the list of exported symbols" if statement, so the 81306e7d3316Smrg # include_expsyms logic still works. 81316e7d3316Smrg orig_export_symbols="$export_symbols" 81326e7d3316Smrg export_symbols= 81336e7d3316Smrg always_export_symbols=yes 81346e7d3316Smrg fi 81356e7d3316Smrg fi 81366e7d3316Smrg ;; 81376e7d3316Smrg esac 8138a966c04fSmrg 81396e7d3316Smrg # Prepare the list of exported symbols 81406e7d3316Smrg if test -z "$export_symbols"; then 81416e7d3316Smrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 81426e7d3316Smrg func_verbose "generating symbol list for \`$libname.la'" 81436e7d3316Smrg export_symbols="$output_objdir/$libname.exp" 81446e7d3316Smrg $opt_dry_run || $RM $export_symbols 81456e7d3316Smrg cmds=$export_symbols_cmds 81466e7d3316Smrg save_ifs="$IFS"; IFS='~' 814797cf2ee2Smrg for cmd1 in $cmds; do 81486e7d3316Smrg IFS="$save_ifs" 814997cf2ee2Smrg # Take the normal branch if the nm_file_list_spec branch 815097cf2ee2Smrg # doesn't work or if tool conversion is not needed. 815197cf2ee2Smrg case $nm_file_list_spec~$to_tool_file_cmd in 815297cf2ee2Smrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 815397cf2ee2Smrg try_normal_branch=yes 815497cf2ee2Smrg eval cmd=\"$cmd1\" 815597cf2ee2Smrg func_len " $cmd" 815697cf2ee2Smrg len=$func_len_result 815797cf2ee2Smrg ;; 815897cf2ee2Smrg *) 815997cf2ee2Smrg try_normal_branch=no 816097cf2ee2Smrg ;; 816197cf2ee2Smrg esac 816297cf2ee2Smrg if test "$try_normal_branch" = yes \ 816397cf2ee2Smrg && { test "$len" -lt "$max_cmd_len" \ 816497cf2ee2Smrg || test "$max_cmd_len" -le -1; } 816597cf2ee2Smrg then 816697cf2ee2Smrg func_show_eval "$cmd" 'exit $?' 816797cf2ee2Smrg skipped_export=false 816897cf2ee2Smrg elif test -n "$nm_file_list_spec"; then 816997cf2ee2Smrg func_basename "$output" 817097cf2ee2Smrg output_la=$func_basename_result 817197cf2ee2Smrg save_libobjs=$libobjs 817297cf2ee2Smrg save_output=$output 817397cf2ee2Smrg output=${output_objdir}/${output_la}.nm 817497cf2ee2Smrg func_to_tool_file "$output" 817597cf2ee2Smrg libobjs=$nm_file_list_spec$func_to_tool_file_result 817697cf2ee2Smrg func_append delfiles " $output" 817797cf2ee2Smrg func_verbose "creating $NM input file list: $output" 817897cf2ee2Smrg for obj in $save_libobjs; do 817997cf2ee2Smrg func_to_tool_file "$obj" 818097cf2ee2Smrg $ECHO "$func_to_tool_file_result" 818197cf2ee2Smrg done > "$output" 818297cf2ee2Smrg eval cmd=\"$cmd1\" 81836e7d3316Smrg func_show_eval "$cmd" 'exit $?' 818497cf2ee2Smrg output=$save_output 818597cf2ee2Smrg libobjs=$save_libobjs 81866e7d3316Smrg skipped_export=false 81876e7d3316Smrg else 81886e7d3316Smrg # The command line is too long to execute in one step. 81896e7d3316Smrg func_verbose "using reloadable object file for export list..." 81906e7d3316Smrg skipped_export=: 81916e7d3316Smrg # Break out early, otherwise skipped_export may be 81926e7d3316Smrg # set to false by a later but shorter cmd. 81936e7d3316Smrg break 81946e7d3316Smrg fi 81956e7d3316Smrg done 81966e7d3316Smrg IFS="$save_ifs" 81976e7d3316Smrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 81986e7d3316Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 81996e7d3316Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 82006e7d3316Smrg fi 82016e7d3316Smrg fi 82026e7d3316Smrg fi 8203a966c04fSmrg 82046e7d3316Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 82056e7d3316Smrg tmp_export_symbols="$export_symbols" 82066e7d3316Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 82076e7d3316Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 82086e7d3316Smrg fi 8209a966c04fSmrg 82106e7d3316Smrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 82116e7d3316Smrg # The given exports_symbols file has to be filtered, so filter it. 82126e7d3316Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 82136e7d3316Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 82146e7d3316Smrg # 's' commands which not all seds can handle. GNU sed should be fine 82156e7d3316Smrg # though. Also, the filter scales superlinearly with the number of 82166e7d3316Smrg # global variables. join(1) would be nice here, but unfortunately 82176e7d3316Smrg # isn't a blessed tool. 82186e7d3316Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 821997cf2ee2Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 82206e7d3316Smrg export_symbols=$output_objdir/$libname.def 82216e7d3316Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8222a966c04fSmrg fi 8223a966c04fSmrg 82246e7d3316Smrg tmp_deplibs= 82256e7d3316Smrg for test_deplib in $deplibs; do 82266e7d3316Smrg case " $convenience " in 82276e7d3316Smrg *" $test_deplib "*) ;; 82286e7d3316Smrg *) 822997cf2ee2Smrg func_append tmp_deplibs " $test_deplib" 82306e7d3316Smrg ;; 82316e7d3316Smrg esac 82326e7d3316Smrg done 82336e7d3316Smrg deplibs="$tmp_deplibs" 8234a966c04fSmrg 82356e7d3316Smrg if test -n "$convenience"; then 82366e7d3316Smrg if test -n "$whole_archive_flag_spec" && 82376e7d3316Smrg test "$compiler_needs_object" = yes && 82386e7d3316Smrg test -z "$libobjs"; then 82396e7d3316Smrg # extract the archives, so we have objects to list. 82406e7d3316Smrg # TODO: could optimize this to just extract one archive. 82416e7d3316Smrg whole_archive_flag_spec= 82426e7d3316Smrg fi 82436e7d3316Smrg if test -n "$whole_archive_flag_spec"; then 82446e7d3316Smrg save_libobjs=$libobjs 82456e7d3316Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 82466e7d3316Smrg test "X$libobjs" = "X " && libobjs= 82476e7d3316Smrg else 82486e7d3316Smrg gentop="$output_objdir/${outputname}x" 824997cf2ee2Smrg func_append generated " $gentop" 8250a966c04fSmrg 82516e7d3316Smrg func_extract_archives $gentop $convenience 825297cf2ee2Smrg func_append libobjs " $func_extract_archives_result" 82536e7d3316Smrg test "X$libobjs" = "X " && libobjs= 82546e7d3316Smrg fi 82556e7d3316Smrg fi 8256a966c04fSmrg 82576e7d3316Smrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 82586e7d3316Smrg eval flag=\"$thread_safe_flag_spec\" 825997cf2ee2Smrg func_append linker_flags " $flag" 82606e7d3316Smrg fi 8261a966c04fSmrg 82626e7d3316Smrg # Make a backup of the uninstalled library when relinking 826397cf2ee2Smrg if test "$opt_mode" = relink; then 82646e7d3316Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 8265a966c04fSmrg fi 8266a966c04fSmrg 82676e7d3316Smrg # Do each of the archive commands. 82686e7d3316Smrg if test "$module" = yes && test -n "$module_cmds" ; then 82696e7d3316Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 82706e7d3316Smrg eval test_cmds=\"$module_expsym_cmds\" 82716e7d3316Smrg cmds=$module_expsym_cmds 82726e7d3316Smrg else 82736e7d3316Smrg eval test_cmds=\"$module_cmds\" 82746e7d3316Smrg cmds=$module_cmds 82756e7d3316Smrg fi 82766e7d3316Smrg else 82776e7d3316Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 82786e7d3316Smrg eval test_cmds=\"$archive_expsym_cmds\" 82796e7d3316Smrg cmds=$archive_expsym_cmds 82806e7d3316Smrg else 82816e7d3316Smrg eval test_cmds=\"$archive_cmds\" 82826e7d3316Smrg cmds=$archive_cmds 82836e7d3316Smrg fi 8284a966c04fSmrg fi 8285a966c04fSmrg 82866e7d3316Smrg if test "X$skipped_export" != "X:" && 82876e7d3316Smrg func_len " $test_cmds" && 82886e7d3316Smrg len=$func_len_result && 82896e7d3316Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 82906e7d3316Smrg : 82916e7d3316Smrg else 82926e7d3316Smrg # The command line is too long to link in one step, link piecewise 82936e7d3316Smrg # or, if using GNU ld and skipped_export is not :, use a linker 82946e7d3316Smrg # script. 8295a966c04fSmrg 82966e7d3316Smrg # Save the value of $output and $libobjs because we want to 82976e7d3316Smrg # use them later. If we have whole_archive_flag_spec, we 82986e7d3316Smrg # want to use save_libobjs as it was before 82996e7d3316Smrg # whole_archive_flag_spec was expanded, because we can't 83006e7d3316Smrg # assume the linker understands whole_archive_flag_spec. 83016e7d3316Smrg # This may have to be revisited, in case too many 83026e7d3316Smrg # convenience libraries get linked in and end up exceeding 83036e7d3316Smrg # the spec. 83046e7d3316Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 83056e7d3316Smrg save_libobjs=$libobjs 83066e7d3316Smrg fi 83076e7d3316Smrg save_output=$output 83086e7d3316Smrg func_basename "$output" 83096e7d3316Smrg output_la=$func_basename_result 8310a966c04fSmrg 83116e7d3316Smrg # Clear the reloadable object creation command queue and 83126e7d3316Smrg # initialize k to one. 83136e7d3316Smrg test_cmds= 83146e7d3316Smrg concat_cmds= 83156e7d3316Smrg objlist= 83166e7d3316Smrg last_robj= 83176e7d3316Smrg k=1 8318a966c04fSmrg 83196e7d3316Smrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 83206e7d3316Smrg output=${output_objdir}/${output_la}.lnkscript 83216e7d3316Smrg func_verbose "creating GNU ld script: $output" 83226e7d3316Smrg echo 'INPUT (' > $output 83236e7d3316Smrg for obj in $save_libobjs 83246e7d3316Smrg do 832597cf2ee2Smrg func_to_tool_file "$obj" 832697cf2ee2Smrg $ECHO "$func_to_tool_file_result" >> $output 83276e7d3316Smrg done 83286e7d3316Smrg echo ')' >> $output 832997cf2ee2Smrg func_append delfiles " $output" 833097cf2ee2Smrg func_to_tool_file "$output" 833197cf2ee2Smrg output=$func_to_tool_file_result 83326e7d3316Smrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 83336e7d3316Smrg output=${output_objdir}/${output_la}.lnk 83346e7d3316Smrg func_verbose "creating linker input file list: $output" 83356e7d3316Smrg : > $output 83366e7d3316Smrg set x $save_libobjs 83376e7d3316Smrg shift 83386e7d3316Smrg firstobj= 83396e7d3316Smrg if test "$compiler_needs_object" = yes; then 83406e7d3316Smrg firstobj="$1 " 83416e7d3316Smrg shift 83426e7d3316Smrg fi 83436e7d3316Smrg for obj 83446e7d3316Smrg do 834597cf2ee2Smrg func_to_tool_file "$obj" 834697cf2ee2Smrg $ECHO "$func_to_tool_file_result" >> $output 83476e7d3316Smrg done 834897cf2ee2Smrg func_append delfiles " $output" 834997cf2ee2Smrg func_to_tool_file "$output" 835097cf2ee2Smrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 83516e7d3316Smrg else 83526e7d3316Smrg if test -n "$save_libobjs"; then 83536e7d3316Smrg func_verbose "creating reloadable object files..." 83546e7d3316Smrg output=$output_objdir/$output_la-${k}.$objext 83556e7d3316Smrg eval test_cmds=\"$reload_cmds\" 83566e7d3316Smrg func_len " $test_cmds" 83576e7d3316Smrg len0=$func_len_result 83586e7d3316Smrg len=$len0 83596e7d3316Smrg 83606e7d3316Smrg # Loop over the list of objects to be linked. 83616e7d3316Smrg for obj in $save_libobjs 83626e7d3316Smrg do 83636e7d3316Smrg func_len " $obj" 83646e7d3316Smrg func_arith $len + $func_len_result 83656e7d3316Smrg len=$func_arith_result 83666e7d3316Smrg if test "X$objlist" = X || 83676e7d3316Smrg test "$len" -lt "$max_cmd_len"; then 83686e7d3316Smrg func_append objlist " $obj" 83696e7d3316Smrg else 83706e7d3316Smrg # The command $test_cmds is almost too long, add a 83716e7d3316Smrg # command to the queue. 83726e7d3316Smrg if test "$k" -eq 1 ; then 83736e7d3316Smrg # The first file doesn't have a previous command to add. 83746e7d3316Smrg reload_objs=$objlist 83756e7d3316Smrg eval concat_cmds=\"$reload_cmds\" 83766e7d3316Smrg else 83776e7d3316Smrg # All subsequent reloadable object files will link in 83786e7d3316Smrg # the last one created. 83796e7d3316Smrg reload_objs="$objlist $last_robj" 83806e7d3316Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 83816e7d3316Smrg fi 83826e7d3316Smrg last_robj=$output_objdir/$output_la-${k}.$objext 83836e7d3316Smrg func_arith $k + 1 83846e7d3316Smrg k=$func_arith_result 83856e7d3316Smrg output=$output_objdir/$output_la-${k}.$objext 83866e7d3316Smrg objlist=" $obj" 83876e7d3316Smrg func_len " $last_robj" 83886e7d3316Smrg func_arith $len0 + $func_len_result 83896e7d3316Smrg len=$func_arith_result 83906e7d3316Smrg fi 83916e7d3316Smrg done 83926e7d3316Smrg # Handle the remaining objects by creating one last 83936e7d3316Smrg # reloadable object file. All subsequent reloadable object 83946e7d3316Smrg # files will link in the last one created. 83956e7d3316Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 83966e7d3316Smrg reload_objs="$objlist $last_robj" 83976e7d3316Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 83986e7d3316Smrg if test -n "$last_robj"; then 83996e7d3316Smrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 84006e7d3316Smrg fi 840197cf2ee2Smrg func_append delfiles " $output" 84026e7d3316Smrg 84036e7d3316Smrg else 84046e7d3316Smrg output= 84056e7d3316Smrg fi 8406a966c04fSmrg 84076e7d3316Smrg if ${skipped_export-false}; then 84086e7d3316Smrg func_verbose "generating symbol list for \`$libname.la'" 84096e7d3316Smrg export_symbols="$output_objdir/$libname.exp" 84106e7d3316Smrg $opt_dry_run || $RM $export_symbols 84116e7d3316Smrg libobjs=$output 84126e7d3316Smrg # Append the command to create the export file. 84136e7d3316Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 84146e7d3316Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 84156e7d3316Smrg if test -n "$last_robj"; then 84166e7d3316Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 84176e7d3316Smrg fi 84186e7d3316Smrg fi 8419a966c04fSmrg 84206e7d3316Smrg test -n "$save_libobjs" && 84216e7d3316Smrg func_verbose "creating a temporary reloadable object file: $output" 8422a966c04fSmrg 84236e7d3316Smrg # Loop through the commands generated above and execute them. 84246e7d3316Smrg save_ifs="$IFS"; IFS='~' 84256e7d3316Smrg for cmd in $concat_cmds; do 84266e7d3316Smrg IFS="$save_ifs" 84276e7d3316Smrg $opt_silent || { 84286e7d3316Smrg func_quote_for_expand "$cmd" 84296e7d3316Smrg eval "func_echo $func_quote_for_expand_result" 84306e7d3316Smrg } 84316e7d3316Smrg $opt_dry_run || eval "$cmd" || { 84326e7d3316Smrg lt_exit=$? 84336e7d3316Smrg 84346e7d3316Smrg # Restore the uninstalled library and exit 843597cf2ee2Smrg if test "$opt_mode" = relink; then 84366e7d3316Smrg ( cd "$output_objdir" && \ 84376e7d3316Smrg $RM "${realname}T" && \ 84386e7d3316Smrg $MV "${realname}U" "$realname" ) 84396e7d3316Smrg fi 8440a966c04fSmrg 84416e7d3316Smrg exit $lt_exit 84426e7d3316Smrg } 84436e7d3316Smrg done 84446e7d3316Smrg IFS="$save_ifs" 8445a966c04fSmrg 84466e7d3316Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 84476e7d3316Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 84486e7d3316Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8449a966c04fSmrg fi 8450a966c04fSmrg fi 8451a966c04fSmrg 84526e7d3316Smrg if ${skipped_export-false}; then 84536e7d3316Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 84546e7d3316Smrg tmp_export_symbols="$export_symbols" 84556e7d3316Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 84566e7d3316Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 84576e7d3316Smrg fi 8458a966c04fSmrg 84596e7d3316Smrg if test -n "$orig_export_symbols"; then 84606e7d3316Smrg # The given exports_symbols file has to be filtered, so filter it. 84616e7d3316Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 84626e7d3316Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 84636e7d3316Smrg # 's' commands which not all seds can handle. GNU sed should be fine 84646e7d3316Smrg # though. Also, the filter scales superlinearly with the number of 84656e7d3316Smrg # global variables. join(1) would be nice here, but unfortunately 84666e7d3316Smrg # isn't a blessed tool. 84676e7d3316Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 846897cf2ee2Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 84696e7d3316Smrg export_symbols=$output_objdir/$libname.def 84706e7d3316Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 84716e7d3316Smrg fi 84726e7d3316Smrg fi 8473a966c04fSmrg 84746e7d3316Smrg libobjs=$output 84756e7d3316Smrg # Restore the value of output. 84766e7d3316Smrg output=$save_output 8477a966c04fSmrg 84786e7d3316Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 84796e7d3316Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 84806e7d3316Smrg test "X$libobjs" = "X " && libobjs= 84816e7d3316Smrg fi 84826e7d3316Smrg # Expand the library linking commands again to reset the 84836e7d3316Smrg # value of $libobjs for piecewise linking. 84846e7d3316Smrg 84856e7d3316Smrg # Do each of the archive commands. 84866e7d3316Smrg if test "$module" = yes && test -n "$module_cmds" ; then 84876e7d3316Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 84886e7d3316Smrg cmds=$module_expsym_cmds 8489a966c04fSmrg else 84906e7d3316Smrg cmds=$module_cmds 8491a966c04fSmrg fi 8492a966c04fSmrg else 84936e7d3316Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 84946e7d3316Smrg cmds=$archive_expsym_cmds 84956e7d3316Smrg else 84966e7d3316Smrg cmds=$archive_cmds 84976e7d3316Smrg fi 8498a966c04fSmrg fi 8499a966c04fSmrg fi 8500a966c04fSmrg 85016e7d3316Smrg if test -n "$delfiles"; then 85026e7d3316Smrg # Append the command to remove temporary files to $cmds. 85036e7d3316Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 85046e7d3316Smrg fi 8505a966c04fSmrg 85066e7d3316Smrg # Add any objects from preloaded convenience libraries 85076e7d3316Smrg if test -n "$dlprefiles"; then 85086e7d3316Smrg gentop="$output_objdir/${outputname}x" 850997cf2ee2Smrg func_append generated " $gentop" 8510a966c04fSmrg 85116e7d3316Smrg func_extract_archives $gentop $dlprefiles 851297cf2ee2Smrg func_append libobjs " $func_extract_archives_result" 85136e7d3316Smrg test "X$libobjs" = "X " && libobjs= 8514a966c04fSmrg fi 8515a966c04fSmrg 85166e7d3316Smrg save_ifs="$IFS"; IFS='~' 85176e7d3316Smrg for cmd in $cmds; do 85186e7d3316Smrg IFS="$save_ifs" 85196e7d3316Smrg eval cmd=\"$cmd\" 85206e7d3316Smrg $opt_silent || { 85216e7d3316Smrg func_quote_for_expand "$cmd" 85226e7d3316Smrg eval "func_echo $func_quote_for_expand_result" 85236e7d3316Smrg } 85246e7d3316Smrg $opt_dry_run || eval "$cmd" || { 85256e7d3316Smrg lt_exit=$? 8526a966c04fSmrg 85276e7d3316Smrg # Restore the uninstalled library and exit 852897cf2ee2Smrg if test "$opt_mode" = relink; then 85296e7d3316Smrg ( cd "$output_objdir" && \ 85306e7d3316Smrg $RM "${realname}T" && \ 85316e7d3316Smrg $MV "${realname}U" "$realname" ) 8532a966c04fSmrg fi 8533a966c04fSmrg 85346e7d3316Smrg exit $lt_exit 85356e7d3316Smrg } 85366e7d3316Smrg done 85376e7d3316Smrg IFS="$save_ifs" 8538a966c04fSmrg 85396e7d3316Smrg # Restore the uninstalled library and exit 854097cf2ee2Smrg if test "$opt_mode" = relink; then 85416e7d3316Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 8542a966c04fSmrg 85436e7d3316Smrg if test -n "$convenience"; then 85446e7d3316Smrg if test -z "$whole_archive_flag_spec"; then 85456e7d3316Smrg func_show_eval '${RM}r "$gentop"' 85466e7d3316Smrg fi 85476e7d3316Smrg fi 8548a966c04fSmrg 85496e7d3316Smrg exit $EXIT_SUCCESS 85506e7d3316Smrg fi 8551a966c04fSmrg 85526e7d3316Smrg # Create links to the real library. 85536e7d3316Smrg for linkname in $linknames; do 85546e7d3316Smrg if test "$realname" != "$linkname"; then 85556e7d3316Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 85566e7d3316Smrg fi 85576e7d3316Smrg done 8558a966c04fSmrg 85596e7d3316Smrg # If -module or -export-dynamic was specified, set the dlname. 85606e7d3316Smrg if test "$module" = yes || test "$export_dynamic" = yes; then 85616e7d3316Smrg # On all known operating systems, these are identical. 85626e7d3316Smrg dlname="$soname" 85636e7d3316Smrg fi 85646e7d3316Smrg fi 85656e7d3316Smrg ;; 8566a966c04fSmrg 85676e7d3316Smrg obj) 85686e7d3316Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 85696e7d3316Smrg func_warning "\`-dlopen' is ignored for objects" 85706e7d3316Smrg fi 8571a966c04fSmrg 85726e7d3316Smrg case " $deplibs" in 85736e7d3316Smrg *\ -l* | *\ -L*) 85746e7d3316Smrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 85756e7d3316Smrg esac 8576a966c04fSmrg 85776e7d3316Smrg test -n "$rpath" && \ 85786e7d3316Smrg func_warning "\`-rpath' is ignored for objects" 8579a966c04fSmrg 85806e7d3316Smrg test -n "$xrpath" && \ 85816e7d3316Smrg func_warning "\`-R' is ignored for objects" 85826e7d3316Smrg 85836e7d3316Smrg test -n "$vinfo" && \ 85846e7d3316Smrg func_warning "\`-version-info' is ignored for objects" 8585a966c04fSmrg 85866e7d3316Smrg test -n "$release" && \ 85876e7d3316Smrg func_warning "\`-release' is ignored for objects" 8588a966c04fSmrg 85896e7d3316Smrg case $output in 85906e7d3316Smrg *.lo) 85916e7d3316Smrg test -n "$objs$old_deplibs" && \ 85926e7d3316Smrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 85936e7d3316Smrg 85946e7d3316Smrg libobj=$output 85956e7d3316Smrg func_lo2o "$libobj" 85966e7d3316Smrg obj=$func_lo2o_result 85976e7d3316Smrg ;; 85986e7d3316Smrg *) 85996e7d3316Smrg libobj= 86006e7d3316Smrg obj="$output" 8601a966c04fSmrg ;; 8602a966c04fSmrg esac 8603a966c04fSmrg 86046e7d3316Smrg # Delete the old objects. 86056e7d3316Smrg $opt_dry_run || $RM $obj $libobj 8606a966c04fSmrg 86076e7d3316Smrg # Objects from convenience libraries. This assumes 86086e7d3316Smrg # single-version convenience libraries. Whenever we create 86096e7d3316Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 86106e7d3316Smrg # the extraction. 86116e7d3316Smrg reload_conv_objs= 86126e7d3316Smrg gentop= 86136e7d3316Smrg # reload_cmds runs $LD directly, so let us get rid of 86146e7d3316Smrg # -Wl from whole_archive_flag_spec and hope we can get by with 86156e7d3316Smrg # turning comma into space.. 86166e7d3316Smrg wl= 8617a966c04fSmrg 86186e7d3316Smrg if test -n "$convenience"; then 86196e7d3316Smrg if test -n "$whole_archive_flag_spec"; then 86206e7d3316Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 86216e7d3316Smrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 8622a966c04fSmrg else 86236e7d3316Smrg gentop="$output_objdir/${obj}x" 862497cf2ee2Smrg func_append generated " $gentop" 86256e7d3316Smrg 86266e7d3316Smrg func_extract_archives $gentop $convenience 86276e7d3316Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 8628a966c04fSmrg fi 86296e7d3316Smrg fi 8630a966c04fSmrg 863197cf2ee2Smrg # If we're not building shared, we need to use non_pic_objs 863297cf2ee2Smrg test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 863397cf2ee2Smrg 86346e7d3316Smrg # Create the old-style object. 86356e7d3316Smrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 8636a966c04fSmrg 86376e7d3316Smrg output="$obj" 86386e7d3316Smrg func_execute_cmds "$reload_cmds" 'exit $?' 8639a966c04fSmrg 86406e7d3316Smrg # Exit if we aren't doing a library object file. 86416e7d3316Smrg if test -z "$libobj"; then 86426e7d3316Smrg if test -n "$gentop"; then 86436e7d3316Smrg func_show_eval '${RM}r "$gentop"' 86446e7d3316Smrg fi 8645a966c04fSmrg 86466e7d3316Smrg exit $EXIT_SUCCESS 8647a966c04fSmrg fi 8648a966c04fSmrg 86496e7d3316Smrg if test "$build_libtool_libs" != yes; then 86506e7d3316Smrg if test -n "$gentop"; then 86516e7d3316Smrg func_show_eval '${RM}r "$gentop"' 86526e7d3316Smrg fi 8653a966c04fSmrg 86546e7d3316Smrg # Create an invalid libtool object if no PIC, so that we don't 86556e7d3316Smrg # accidentally link it into a program. 86566e7d3316Smrg # $show "echo timestamp > $libobj" 86576e7d3316Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 86586e7d3316Smrg exit $EXIT_SUCCESS 86596e7d3316Smrg fi 8660a966c04fSmrg 86616e7d3316Smrg if test -n "$pic_flag" || test "$pic_mode" != default; then 86626e7d3316Smrg # Only do commands if we really have different PIC objects. 86636e7d3316Smrg reload_objs="$libobjs $reload_conv_objs" 86646e7d3316Smrg output="$libobj" 86656e7d3316Smrg func_execute_cmds "$reload_cmds" 'exit $?' 8666a966c04fSmrg fi 86676e7d3316Smrg 86686e7d3316Smrg if test -n "$gentop"; then 86696e7d3316Smrg func_show_eval '${RM}r "$gentop"' 86706e7d3316Smrg fi 86716e7d3316Smrg 86726e7d3316Smrg exit $EXIT_SUCCESS 8673a966c04fSmrg ;; 8674a966c04fSmrg 86756e7d3316Smrg prog) 86766e7d3316Smrg case $host in 86776e7d3316Smrg *cygwin*) func_stripname '' '.exe' "$output" 86786e7d3316Smrg output=$func_stripname_result.exe;; 86796e7d3316Smrg esac 86806e7d3316Smrg test -n "$vinfo" && \ 86816e7d3316Smrg func_warning "\`-version-info' is ignored for programs" 8682a966c04fSmrg 86836e7d3316Smrg test -n "$release" && \ 86846e7d3316Smrg func_warning "\`-release' is ignored for programs" 8685a966c04fSmrg 86866e7d3316Smrg test "$preload" = yes \ 86876e7d3316Smrg && test "$dlopen_support" = unknown \ 86886e7d3316Smrg && test "$dlopen_self" = unknown \ 86896e7d3316Smrg && test "$dlopen_self_static" = unknown && \ 86906e7d3316Smrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 86916e7d3316Smrg 86926e7d3316Smrg case $host in 86936e7d3316Smrg *-*-rhapsody* | *-*-darwin1.[012]) 86946e7d3316Smrg # On Rhapsody replace the C library is the System framework 86956e7d3316Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 86966e7d3316Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 8697a966c04fSmrg ;; 86986e7d3316Smrg esac 8699a966c04fSmrg 87006e7d3316Smrg case $host in 87016e7d3316Smrg *-*-darwin*) 87026e7d3316Smrg # Don't allow lazy linking, it breaks C++ global constructors 87036e7d3316Smrg # But is supposedly fixed on 10.4 or later (yay!). 87046e7d3316Smrg if test "$tagname" = CXX ; then 87056e7d3316Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 87066e7d3316Smrg 10.[0123]) 870797cf2ee2Smrg func_append compile_command " ${wl}-bind_at_load" 870897cf2ee2Smrg func_append finalize_command " ${wl}-bind_at_load" 87096e7d3316Smrg ;; 87106e7d3316Smrg esac 8711a966c04fSmrg fi 87126e7d3316Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 87136e7d3316Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 87146e7d3316Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 87156e7d3316Smrg ;; 87166e7d3316Smrg esac 8717a966c04fSmrg 8718a966c04fSmrg 87196e7d3316Smrg # move library search paths that coincide with paths to not yet 87206e7d3316Smrg # installed libraries to the beginning of the library search list 87216e7d3316Smrg new_libs= 87226e7d3316Smrg for path in $notinst_path; do 87236e7d3316Smrg case " $new_libs " in 87246e7d3316Smrg *" -L$path/$objdir "*) ;; 87256e7d3316Smrg *) 87266e7d3316Smrg case " $compile_deplibs " in 87276e7d3316Smrg *" -L$path/$objdir "*) 872897cf2ee2Smrg func_append new_libs " -L$path/$objdir" ;; 8729a966c04fSmrg esac 87306e7d3316Smrg ;; 87316e7d3316Smrg esac 87326e7d3316Smrg done 87336e7d3316Smrg for deplib in $compile_deplibs; do 87346e7d3316Smrg case $deplib in 87356e7d3316Smrg -L*) 87366e7d3316Smrg case " $new_libs " in 87376e7d3316Smrg *" $deplib "*) ;; 873897cf2ee2Smrg *) func_append new_libs " $deplib" ;; 8739a966c04fSmrg esac 87406e7d3316Smrg ;; 874197cf2ee2Smrg *) func_append new_libs " $deplib" ;; 87426e7d3316Smrg esac 87436e7d3316Smrg done 87446e7d3316Smrg compile_deplibs="$new_libs" 8745a966c04fSmrg 8746a966c04fSmrg 874797cf2ee2Smrg func_append compile_command " $compile_deplibs" 874897cf2ee2Smrg func_append finalize_command " $finalize_deplibs" 8749a966c04fSmrg 87506e7d3316Smrg if test -n "$rpath$xrpath"; then 87516e7d3316Smrg # If the user specified any rpath flags, then add them. 87526e7d3316Smrg for libdir in $rpath $xrpath; do 87536e7d3316Smrg # This is the magic to use -rpath. 87546e7d3316Smrg case "$finalize_rpath " in 87556e7d3316Smrg *" $libdir "*) ;; 875697cf2ee2Smrg *) func_append finalize_rpath " $libdir" ;; 87576e7d3316Smrg esac 87586e7d3316Smrg done 87596e7d3316Smrg fi 8760a966c04fSmrg 87616e7d3316Smrg # Now hardcode the library paths 87626e7d3316Smrg rpath= 87636e7d3316Smrg hardcode_libdirs= 87646e7d3316Smrg for libdir in $compile_rpath $finalize_rpath; do 87656e7d3316Smrg if test -n "$hardcode_libdir_flag_spec"; then 87666e7d3316Smrg if test -n "$hardcode_libdir_separator"; then 87676e7d3316Smrg if test -z "$hardcode_libdirs"; then 87686e7d3316Smrg hardcode_libdirs="$libdir" 87696e7d3316Smrg else 87706e7d3316Smrg # Just accumulate the unique libdirs. 87716e7d3316Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 87726e7d3316Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 87736e7d3316Smrg ;; 87746e7d3316Smrg *) 877597cf2ee2Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 87766e7d3316Smrg ;; 87776e7d3316Smrg esac 87786e7d3316Smrg fi 8779a966c04fSmrg else 87806e7d3316Smrg eval flag=\"$hardcode_libdir_flag_spec\" 878197cf2ee2Smrg func_append rpath " $flag" 8782a966c04fSmrg fi 87836e7d3316Smrg elif test -n "$runpath_var"; then 87846e7d3316Smrg case "$perm_rpath " in 87856e7d3316Smrg *" $libdir "*) ;; 878697cf2ee2Smrg *) func_append perm_rpath " $libdir" ;; 87876e7d3316Smrg esac 87886e7d3316Smrg fi 87896e7d3316Smrg case $host in 87906e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 87916e7d3316Smrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 87926e7d3316Smrg case :$dllsearchpath: in 87936e7d3316Smrg *":$libdir:"*) ;; 87946e7d3316Smrg ::) dllsearchpath=$libdir;; 879597cf2ee2Smrg *) func_append dllsearchpath ":$libdir";; 87966e7d3316Smrg esac 87976e7d3316Smrg case :$dllsearchpath: in 87986e7d3316Smrg *":$testbindir:"*) ;; 87996e7d3316Smrg ::) dllsearchpath=$testbindir;; 880097cf2ee2Smrg *) func_append dllsearchpath ":$testbindir";; 88016e7d3316Smrg esac 88026e7d3316Smrg ;; 88036e7d3316Smrg esac 88046e7d3316Smrg done 88056e7d3316Smrg # Substitute the hardcoded libdirs into the rpath. 88066e7d3316Smrg if test -n "$hardcode_libdir_separator" && 88076e7d3316Smrg test -n "$hardcode_libdirs"; then 88086e7d3316Smrg libdir="$hardcode_libdirs" 88096e7d3316Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 88106e7d3316Smrg fi 88116e7d3316Smrg compile_rpath="$rpath" 8812a966c04fSmrg 88136e7d3316Smrg rpath= 88146e7d3316Smrg hardcode_libdirs= 88156e7d3316Smrg for libdir in $finalize_rpath; do 88166e7d3316Smrg if test -n "$hardcode_libdir_flag_spec"; then 88176e7d3316Smrg if test -n "$hardcode_libdir_separator"; then 88186e7d3316Smrg if test -z "$hardcode_libdirs"; then 88196e7d3316Smrg hardcode_libdirs="$libdir" 88206e7d3316Smrg else 88216e7d3316Smrg # Just accumulate the unique libdirs. 88226e7d3316Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 88236e7d3316Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 88246e7d3316Smrg ;; 88256e7d3316Smrg *) 882697cf2ee2Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 88276e7d3316Smrg ;; 88286e7d3316Smrg esac 88296e7d3316Smrg fi 8830a966c04fSmrg else 88316e7d3316Smrg eval flag=\"$hardcode_libdir_flag_spec\" 883297cf2ee2Smrg func_append rpath " $flag" 8833a966c04fSmrg fi 88346e7d3316Smrg elif test -n "$runpath_var"; then 88356e7d3316Smrg case "$finalize_perm_rpath " in 88366e7d3316Smrg *" $libdir "*) ;; 883797cf2ee2Smrg *) func_append finalize_perm_rpath " $libdir" ;; 88386e7d3316Smrg esac 8839a966c04fSmrg fi 88406e7d3316Smrg done 88416e7d3316Smrg # Substitute the hardcoded libdirs into the rpath. 88426e7d3316Smrg if test -n "$hardcode_libdir_separator" && 88436e7d3316Smrg test -n "$hardcode_libdirs"; then 88446e7d3316Smrg libdir="$hardcode_libdirs" 88456e7d3316Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 88466e7d3316Smrg fi 88476e7d3316Smrg finalize_rpath="$rpath" 8848a966c04fSmrg 88496e7d3316Smrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 88506e7d3316Smrg # Transform all the library objects into standard objects. 88516e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 88526e7d3316Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 88536e7d3316Smrg fi 8854a966c04fSmrg 88556e7d3316Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8856a966c04fSmrg 88576e7d3316Smrg # template prelinking step 88586e7d3316Smrg if test -n "$prelink_cmds"; then 88596e7d3316Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 88606e7d3316Smrg fi 8861a966c04fSmrg 88626e7d3316Smrg wrappers_required=yes 88636e7d3316Smrg case $host in 88646e7d3316Smrg *cegcc* | *mingw32ce*) 88656e7d3316Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 88666e7d3316Smrg wrappers_required=no 88676e7d3316Smrg ;; 88686e7d3316Smrg *cygwin* | *mingw* ) 88696e7d3316Smrg if test "$build_libtool_libs" != yes; then 88706e7d3316Smrg wrappers_required=no 88716e7d3316Smrg fi 88726e7d3316Smrg ;; 88736e7d3316Smrg *) 88746e7d3316Smrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 88756e7d3316Smrg wrappers_required=no 88766e7d3316Smrg fi 88776e7d3316Smrg ;; 88786e7d3316Smrg esac 88796e7d3316Smrg if test "$wrappers_required" = no; then 88806e7d3316Smrg # Replace the output file specification. 88816e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 88826e7d3316Smrg link_command="$compile_command$compile_rpath" 8883a966c04fSmrg 88846e7d3316Smrg # We have no uninstalled library dependencies, so finalize right now. 88856e7d3316Smrg exit_status=0 88866e7d3316Smrg func_show_eval "$link_command" 'exit_status=$?' 8887a966c04fSmrg 888897cf2ee2Smrg if test -n "$postlink_cmds"; then 888997cf2ee2Smrg func_to_tool_file "$output" 889097cf2ee2Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 889197cf2ee2Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 889297cf2ee2Smrg fi 889397cf2ee2Smrg 88946e7d3316Smrg # Delete the generated files. 88956e7d3316Smrg if test -f "$output_objdir/${outputname}S.${objext}"; then 88966e7d3316Smrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8897a966c04fSmrg fi 8898a966c04fSmrg 88996e7d3316Smrg exit $exit_status 89006e7d3316Smrg fi 8901a966c04fSmrg 89026e7d3316Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 89036e7d3316Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 89046e7d3316Smrg fi 89056e7d3316Smrg if test -n "$finalize_shlibpath"; then 89066e7d3316Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 89076e7d3316Smrg fi 8908a966c04fSmrg 89096e7d3316Smrg compile_var= 89106e7d3316Smrg finalize_var= 89116e7d3316Smrg if test -n "$runpath_var"; then 89126e7d3316Smrg if test -n "$perm_rpath"; then 89136e7d3316Smrg # We should set the runpath_var. 89146e7d3316Smrg rpath= 89156e7d3316Smrg for dir in $perm_rpath; do 891697cf2ee2Smrg func_append rpath "$dir:" 89176e7d3316Smrg done 89186e7d3316Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 8919a966c04fSmrg fi 89206e7d3316Smrg if test -n "$finalize_perm_rpath"; then 89216e7d3316Smrg # We should set the runpath_var. 89226e7d3316Smrg rpath= 89236e7d3316Smrg for dir in $finalize_perm_rpath; do 892497cf2ee2Smrg func_append rpath "$dir:" 89256e7d3316Smrg done 89266e7d3316Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8927a966c04fSmrg fi 89286e7d3316Smrg fi 8929a966c04fSmrg 89306e7d3316Smrg if test "$no_install" = yes; then 89316e7d3316Smrg # We don't need to create a wrapper script. 89326e7d3316Smrg link_command="$compile_var$compile_command$compile_rpath" 89336e7d3316Smrg # Replace the output file specification. 89346e7d3316Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 89356e7d3316Smrg # Delete the old output file. 89366e7d3316Smrg $opt_dry_run || $RM $output 89376e7d3316Smrg # Link the executable and exit 89386e7d3316Smrg func_show_eval "$link_command" 'exit $?' 893997cf2ee2Smrg 894097cf2ee2Smrg if test -n "$postlink_cmds"; then 894197cf2ee2Smrg func_to_tool_file "$output" 894297cf2ee2Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 894397cf2ee2Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 894497cf2ee2Smrg fi 894597cf2ee2Smrg 8946a966c04fSmrg exit $EXIT_SUCCESS 89476e7d3316Smrg fi 8948a966c04fSmrg 89496e7d3316Smrg if test "$hardcode_action" = relink; then 89506e7d3316Smrg # Fast installation is not supported 89516e7d3316Smrg link_command="$compile_var$compile_command$compile_rpath" 89526e7d3316Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 89536e7d3316Smrg 89546e7d3316Smrg func_warning "this platform does not like uninstalled shared libraries" 89556e7d3316Smrg func_warning "\`$output' will be relinked during installation" 89566e7d3316Smrg else 89576e7d3316Smrg if test "$fast_install" != no; then 89586e7d3316Smrg link_command="$finalize_var$compile_command$finalize_rpath" 89596e7d3316Smrg if test "$fast_install" = yes; then 89606e7d3316Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 89616e7d3316Smrg else 89626e7d3316Smrg # fast_install is set to needless 89636e7d3316Smrg relink_command= 89646e7d3316Smrg fi 8965a966c04fSmrg else 89666e7d3316Smrg link_command="$compile_var$compile_command$compile_rpath" 89676e7d3316Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8968a966c04fSmrg fi 89696e7d3316Smrg fi 8970a966c04fSmrg 89716e7d3316Smrg # Replace the output file specification. 89726e7d3316Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 8973a966c04fSmrg 89746e7d3316Smrg # Delete the old output files. 89756e7d3316Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 8976a966c04fSmrg 89776e7d3316Smrg func_show_eval "$link_command" 'exit $?' 8978a966c04fSmrg 897997cf2ee2Smrg if test -n "$postlink_cmds"; then 898097cf2ee2Smrg func_to_tool_file "$output_objdir/$outputname" 898197cf2ee2Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 898297cf2ee2Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 898397cf2ee2Smrg fi 898497cf2ee2Smrg 89856e7d3316Smrg # Now create the wrapper script. 89866e7d3316Smrg func_verbose "creating $output" 8987a966c04fSmrg 89886e7d3316Smrg # Quote the relink command for shipping. 89896e7d3316Smrg if test -n "$relink_command"; then 89906e7d3316Smrg # Preserve any variables that may affect compiler behavior 89916e7d3316Smrg for var in $variables_saved_for_relink; do 89926e7d3316Smrg if eval test -z \"\${$var+set}\"; then 89936e7d3316Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 89946e7d3316Smrg elif eval var_value=\$$var; test -z "$var_value"; then 89956e7d3316Smrg relink_command="$var=; export $var; $relink_command" 8996a966c04fSmrg else 89976e7d3316Smrg func_quote_for_eval "$var_value" 89986e7d3316Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 8999a966c04fSmrg fi 90006e7d3316Smrg done 90016e7d3316Smrg relink_command="(cd `pwd`; $relink_command)" 90026e7d3316Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 90036e7d3316Smrg fi 9004a966c04fSmrg 90056e7d3316Smrg # Only actually do things if not in dry run mode. 90066e7d3316Smrg $opt_dry_run || { 90076e7d3316Smrg # win32 will think the script is a binary if it has 90086e7d3316Smrg # a .exe suffix, so we strip it off here. 90096e7d3316Smrg case $output in 90106e7d3316Smrg *.exe) func_stripname '' '.exe' "$output" 90116e7d3316Smrg output=$func_stripname_result ;; 90126e7d3316Smrg esac 90136e7d3316Smrg # test for cygwin because mv fails w/o .exe extensions 90146e7d3316Smrg case $host in 90156e7d3316Smrg *cygwin*) 90166e7d3316Smrg exeext=.exe 90176e7d3316Smrg func_stripname '' '.exe' "$outputname" 90186e7d3316Smrg outputname=$func_stripname_result ;; 90196e7d3316Smrg *) exeext= ;; 9020a966c04fSmrg esac 90216e7d3316Smrg case $host in 90226e7d3316Smrg *cygwin* | *mingw* ) 90236e7d3316Smrg func_dirname_and_basename "$output" "" "." 90246e7d3316Smrg output_name=$func_basename_result 90256e7d3316Smrg output_path=$func_dirname_result 90266e7d3316Smrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 90276e7d3316Smrg cwrapper="$output_path/$output_name.exe" 90286e7d3316Smrg $RM $cwrappersource $cwrapper 90296e7d3316Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 90306e7d3316Smrg 90316e7d3316Smrg func_emit_cwrapperexe_src > $cwrappersource 90326e7d3316Smrg 90336e7d3316Smrg # The wrapper executable is built using the $host compiler, 90346e7d3316Smrg # because it contains $host paths and files. If cross- 90356e7d3316Smrg # compiling, it, like the target executable, must be 90366e7d3316Smrg # executed on the $host or under an emulation environment. 90376e7d3316Smrg $opt_dry_run || { 90386e7d3316Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 90396e7d3316Smrg $STRIP $cwrapper 90406e7d3316Smrg } 9041a966c04fSmrg 90426e7d3316Smrg # Now, create the wrapper script for func_source use: 90436e7d3316Smrg func_ltwrapper_scriptname $cwrapper 90446e7d3316Smrg $RM $func_ltwrapper_scriptname_result 90456e7d3316Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 90466e7d3316Smrg $opt_dry_run || { 90476e7d3316Smrg # note: this script will not be executed, so do not chmod. 90486e7d3316Smrg if test "x$build" = "x$host" ; then 90496e7d3316Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 90506e7d3316Smrg else 90516e7d3316Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 90526e7d3316Smrg fi 90536e7d3316Smrg } 90546e7d3316Smrg ;; 90556e7d3316Smrg * ) 90566e7d3316Smrg $RM $output 90576e7d3316Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 9058a966c04fSmrg 90596e7d3316Smrg func_emit_wrapper no > $output 90606e7d3316Smrg chmod +x $output 90616e7d3316Smrg ;; 90626e7d3316Smrg esac 90636e7d3316Smrg } 90646e7d3316Smrg exit $EXIT_SUCCESS 90656e7d3316Smrg ;; 90666e7d3316Smrg esac 9067a966c04fSmrg 90686e7d3316Smrg # See if we need to build an old-fashioned archive. 90696e7d3316Smrg for oldlib in $oldlibs; do 9070a966c04fSmrg 90716e7d3316Smrg if test "$build_libtool_libs" = convenience; then 90726e7d3316Smrg oldobjs="$libobjs_save $symfileobj" 90736e7d3316Smrg addlibs="$convenience" 90746e7d3316Smrg build_libtool_libs=no 90756e7d3316Smrg else 90766e7d3316Smrg if test "$build_libtool_libs" = module; then 90776e7d3316Smrg oldobjs="$libobjs_save" 90786e7d3316Smrg build_libtool_libs=no 90796e7d3316Smrg else 90806e7d3316Smrg oldobjs="$old_deplibs $non_pic_objects" 90816e7d3316Smrg if test "$preload" = yes && test -f "$symfileobj"; then 908297cf2ee2Smrg func_append oldobjs " $symfileobj" 90836e7d3316Smrg fi 90846e7d3316Smrg fi 90856e7d3316Smrg addlibs="$old_convenience" 9086a966c04fSmrg fi 9087a966c04fSmrg 90886e7d3316Smrg if test -n "$addlibs"; then 90896e7d3316Smrg gentop="$output_objdir/${outputname}x" 909097cf2ee2Smrg func_append generated " $gentop" 9091a966c04fSmrg 90926e7d3316Smrg func_extract_archives $gentop $addlibs 909397cf2ee2Smrg func_append oldobjs " $func_extract_archives_result" 90946e7d3316Smrg fi 9095a966c04fSmrg 90966e7d3316Smrg # Do each command in the archive commands. 90976e7d3316Smrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 90986e7d3316Smrg cmds=$old_archive_from_new_cmds 90996e7d3316Smrg else 9100a966c04fSmrg 91016e7d3316Smrg # Add any objects from preloaded convenience libraries 91026e7d3316Smrg if test -n "$dlprefiles"; then 91036e7d3316Smrg gentop="$output_objdir/${outputname}x" 910497cf2ee2Smrg func_append generated " $gentop" 9105a966c04fSmrg 91066e7d3316Smrg func_extract_archives $gentop $dlprefiles 910797cf2ee2Smrg func_append oldobjs " $func_extract_archives_result" 91086e7d3316Smrg fi 9109a966c04fSmrg 91106e7d3316Smrg # POSIX demands no paths to be encoded in archives. We have 91116e7d3316Smrg # to avoid creating archives with duplicate basenames if we 91126e7d3316Smrg # might have to extract them afterwards, e.g., when creating a 91136e7d3316Smrg # static archive out of a convenience library, or when linking 91146e7d3316Smrg # the entirety of a libtool archive into another (currently 91156e7d3316Smrg # not supported by libtool). 91166e7d3316Smrg if (for obj in $oldobjs 91176e7d3316Smrg do 91186e7d3316Smrg func_basename "$obj" 91196e7d3316Smrg $ECHO "$func_basename_result" 91206e7d3316Smrg done | sort | sort -uc >/dev/null 2>&1); then 91216e7d3316Smrg : 91226e7d3316Smrg else 91236e7d3316Smrg echo "copying selected object files to avoid basename conflicts..." 91246e7d3316Smrg gentop="$output_objdir/${outputname}x" 912597cf2ee2Smrg func_append generated " $gentop" 91266e7d3316Smrg func_mkdir_p "$gentop" 91276e7d3316Smrg save_oldobjs=$oldobjs 91286e7d3316Smrg oldobjs= 91296e7d3316Smrg counter=1 91306e7d3316Smrg for obj in $save_oldobjs 91316e7d3316Smrg do 91326e7d3316Smrg func_basename "$obj" 91336e7d3316Smrg objbase="$func_basename_result" 91346e7d3316Smrg case " $oldobjs " in 91356e7d3316Smrg " ") oldobjs=$obj ;; 91366e7d3316Smrg *[\ /]"$objbase "*) 91376e7d3316Smrg while :; do 91386e7d3316Smrg # Make sure we don't pick an alternate name that also 91396e7d3316Smrg # overlaps. 91406e7d3316Smrg newobj=lt$counter-$objbase 91416e7d3316Smrg func_arith $counter + 1 91426e7d3316Smrg counter=$func_arith_result 91436e7d3316Smrg case " $oldobjs " in 91446e7d3316Smrg *[\ /]"$newobj "*) ;; 91456e7d3316Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 91466e7d3316Smrg esac 91476e7d3316Smrg done 91486e7d3316Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 914997cf2ee2Smrg func_append oldobjs " $gentop/$newobj" 91506e7d3316Smrg ;; 915197cf2ee2Smrg *) func_append oldobjs " $obj" ;; 91526e7d3316Smrg esac 9153a966c04fSmrg done 9154a966c04fSmrg fi 91556e7d3316Smrg eval cmds=\"$old_archive_cmds\" 9156a966c04fSmrg 91576e7d3316Smrg func_len " $cmds" 91586e7d3316Smrg len=$func_len_result 91596e7d3316Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 91606e7d3316Smrg cmds=$old_archive_cmds 916197cf2ee2Smrg elif test -n "$archiver_list_spec"; then 916297cf2ee2Smrg func_verbose "using command file archive linking..." 916397cf2ee2Smrg for obj in $oldobjs 916497cf2ee2Smrg do 916597cf2ee2Smrg func_to_tool_file "$obj" 916697cf2ee2Smrg $ECHO "$func_to_tool_file_result" 916797cf2ee2Smrg done > $output_objdir/$libname.libcmd 916897cf2ee2Smrg func_to_tool_file "$output_objdir/$libname.libcmd" 916997cf2ee2Smrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 917097cf2ee2Smrg cmds=$old_archive_cmds 91716e7d3316Smrg else 91726e7d3316Smrg # the command line is too long to link in one step, link in parts 91736e7d3316Smrg func_verbose "using piecewise archive linking..." 91746e7d3316Smrg save_RANLIB=$RANLIB 91756e7d3316Smrg RANLIB=: 91766e7d3316Smrg objlist= 91776e7d3316Smrg concat_cmds= 91786e7d3316Smrg save_oldobjs=$oldobjs 91796e7d3316Smrg oldobjs= 91806e7d3316Smrg # Is there a better way of finding the last object in the list? 91816e7d3316Smrg for obj in $save_oldobjs 91826e7d3316Smrg do 91836e7d3316Smrg last_oldobj=$obj 91846e7d3316Smrg done 91856e7d3316Smrg eval test_cmds=\"$old_archive_cmds\" 91866e7d3316Smrg func_len " $test_cmds" 91876e7d3316Smrg len0=$func_len_result 91886e7d3316Smrg len=$len0 91896e7d3316Smrg for obj in $save_oldobjs 91906e7d3316Smrg do 91916e7d3316Smrg func_len " $obj" 91926e7d3316Smrg func_arith $len + $func_len_result 91936e7d3316Smrg len=$func_arith_result 91946e7d3316Smrg func_append objlist " $obj" 91956e7d3316Smrg if test "$len" -lt "$max_cmd_len"; then 91966e7d3316Smrg : 91976e7d3316Smrg else 91986e7d3316Smrg # the above command should be used before it gets too long 91996e7d3316Smrg oldobjs=$objlist 92006e7d3316Smrg if test "$obj" = "$last_oldobj" ; then 92016e7d3316Smrg RANLIB=$save_RANLIB 92026e7d3316Smrg fi 92036e7d3316Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 92046e7d3316Smrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 92056e7d3316Smrg objlist= 92066e7d3316Smrg len=$len0 92076e7d3316Smrg fi 92086e7d3316Smrg done 92096e7d3316Smrg RANLIB=$save_RANLIB 92106e7d3316Smrg oldobjs=$objlist 92116e7d3316Smrg if test "X$oldobjs" = "X" ; then 92126e7d3316Smrg eval cmds=\"\$concat_cmds\" 92136e7d3316Smrg else 92146e7d3316Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 92156e7d3316Smrg fi 92166e7d3316Smrg fi 92176e7d3316Smrg fi 92186e7d3316Smrg func_execute_cmds "$cmds" 'exit $?' 9219a966c04fSmrg done 9220a966c04fSmrg 92216e7d3316Smrg test -n "$generated" && \ 92226e7d3316Smrg func_show_eval "${RM}r$generated" 9223a966c04fSmrg 92246e7d3316Smrg # Now create the libtool archive. 92256e7d3316Smrg case $output in 92266e7d3316Smrg *.la) 92276e7d3316Smrg old_library= 92286e7d3316Smrg test "$build_old_libs" = yes && old_library="$libname.$libext" 92296e7d3316Smrg func_verbose "creating $output" 9230a966c04fSmrg 92316e7d3316Smrg # Preserve any variables that may affect compiler behavior 92326e7d3316Smrg for var in $variables_saved_for_relink; do 92336e7d3316Smrg if eval test -z \"\${$var+set}\"; then 92346e7d3316Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 92356e7d3316Smrg elif eval var_value=\$$var; test -z "$var_value"; then 92366e7d3316Smrg relink_command="$var=; export $var; $relink_command" 9237a966c04fSmrg else 92386e7d3316Smrg func_quote_for_eval "$var_value" 92396e7d3316Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9240a966c04fSmrg fi 92416e7d3316Smrg done 92426e7d3316Smrg # Quote the link command for shipping. 92436e7d3316Smrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 92446e7d3316Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 92456e7d3316Smrg if test "$hardcode_automatic" = yes ; then 92466e7d3316Smrg relink_command= 92476e7d3316Smrg fi 9248a966c04fSmrg 92496e7d3316Smrg # Only create the output if not a dry run. 92506e7d3316Smrg $opt_dry_run || { 92516e7d3316Smrg for installed in no yes; do 92526e7d3316Smrg if test "$installed" = yes; then 92536e7d3316Smrg if test -z "$install_libdir"; then 92546e7d3316Smrg break 92556e7d3316Smrg fi 92566e7d3316Smrg output="$output_objdir/$outputname"i 92576e7d3316Smrg # Replace all uninstalled libtool libraries with the installed ones 92586e7d3316Smrg newdependency_libs= 92596e7d3316Smrg for deplib in $dependency_libs; do 92606e7d3316Smrg case $deplib in 92616e7d3316Smrg *.la) 92626e7d3316Smrg func_basename "$deplib" 92636e7d3316Smrg name="$func_basename_result" 92646e7d3316Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 92656e7d3316Smrg test -z "$libdir" && \ 92666e7d3316Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 926797cf2ee2Smrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 926897cf2ee2Smrg ;; 926997cf2ee2Smrg -L*) 927097cf2ee2Smrg func_stripname -L '' "$deplib" 927197cf2ee2Smrg func_replace_sysroot "$func_stripname_result" 927297cf2ee2Smrg func_append newdependency_libs " -L$func_replace_sysroot_result" 927397cf2ee2Smrg ;; 927497cf2ee2Smrg -R*) 927597cf2ee2Smrg func_stripname -R '' "$deplib" 927697cf2ee2Smrg func_replace_sysroot "$func_stripname_result" 927797cf2ee2Smrg func_append newdependency_libs " -R$func_replace_sysroot_result" 92786e7d3316Smrg ;; 927997cf2ee2Smrg *) func_append newdependency_libs " $deplib" ;; 92806e7d3316Smrg esac 92816e7d3316Smrg done 92826e7d3316Smrg dependency_libs="$newdependency_libs" 92836e7d3316Smrg newdlfiles= 92846e7d3316Smrg 92856e7d3316Smrg for lib in $dlfiles; do 92866e7d3316Smrg case $lib in 92876e7d3316Smrg *.la) 92886e7d3316Smrg func_basename "$lib" 92896e7d3316Smrg name="$func_basename_result" 92906e7d3316Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 92916e7d3316Smrg test -z "$libdir" && \ 92926e7d3316Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 929397cf2ee2Smrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 92946e7d3316Smrg ;; 929597cf2ee2Smrg *) func_append newdlfiles " $lib" ;; 92966e7d3316Smrg esac 92976e7d3316Smrg done 92986e7d3316Smrg dlfiles="$newdlfiles" 92996e7d3316Smrg newdlprefiles= 93006e7d3316Smrg for lib in $dlprefiles; do 93016e7d3316Smrg case $lib in 93026e7d3316Smrg *.la) 93036e7d3316Smrg # Only pass preopened files to the pseudo-archive (for 93046e7d3316Smrg # eventual linking with the app. that links it) if we 93056e7d3316Smrg # didn't already link the preopened objects directly into 93066e7d3316Smrg # the library: 93076e7d3316Smrg func_basename "$lib" 93086e7d3316Smrg name="$func_basename_result" 93096e7d3316Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 93106e7d3316Smrg test -z "$libdir" && \ 93116e7d3316Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 931297cf2ee2Smrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 93136e7d3316Smrg ;; 93146e7d3316Smrg esac 93156e7d3316Smrg done 93166e7d3316Smrg dlprefiles="$newdlprefiles" 93176e7d3316Smrg else 93186e7d3316Smrg newdlfiles= 93196e7d3316Smrg for lib in $dlfiles; do 93206e7d3316Smrg case $lib in 93216e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 93226e7d3316Smrg *) abs=`pwd`"/$lib" ;; 93236e7d3316Smrg esac 932497cf2ee2Smrg func_append newdlfiles " $abs" 93256e7d3316Smrg done 93266e7d3316Smrg dlfiles="$newdlfiles" 93276e7d3316Smrg newdlprefiles= 93286e7d3316Smrg for lib in $dlprefiles; do 93296e7d3316Smrg case $lib in 93306e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 93316e7d3316Smrg *) abs=`pwd`"/$lib" ;; 93326e7d3316Smrg esac 933397cf2ee2Smrg func_append newdlprefiles " $abs" 93346e7d3316Smrg done 93356e7d3316Smrg dlprefiles="$newdlprefiles" 93366e7d3316Smrg fi 93376e7d3316Smrg $RM $output 93386e7d3316Smrg # place dlname in correct position for cygwin 93396e7d3316Smrg # In fact, it would be nice if we could use this code for all target 93406e7d3316Smrg # systems that can't hard-code library paths into their executables 93416e7d3316Smrg # and that have no shared library path variable independent of PATH, 93426e7d3316Smrg # but it turns out we can't easily determine that from inspecting 93436e7d3316Smrg # libtool variables, so we have to hard-code the OSs to which it 93446e7d3316Smrg # applies here; at the moment, that means platforms that use the PE 93456e7d3316Smrg # object format with DLL files. See the long comment at the top of 93466e7d3316Smrg # tests/bindir.at for full details. 93476e7d3316Smrg tdlname=$dlname 93486e7d3316Smrg case $host,$output,$installed,$module,$dlname in 93496e7d3316Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 93506e7d3316Smrg # If a -bindir argument was supplied, place the dll there. 93516e7d3316Smrg if test "x$bindir" != x ; 93526e7d3316Smrg then 93536e7d3316Smrg func_relative_path "$install_libdir" "$bindir" 93546e7d3316Smrg tdlname=$func_relative_path_result$dlname 93556e7d3316Smrg else 93566e7d3316Smrg # Otherwise fall back on heuristic. 93576e7d3316Smrg tdlname=../bin/$dlname 93586e7d3316Smrg fi 93596e7d3316Smrg ;; 93606e7d3316Smrg esac 93616e7d3316Smrg $ECHO > $output "\ 93626e7d3316Smrg# $outputname - a libtool library file 93636e7d3316Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 93646e7d3316Smrg# 93656e7d3316Smrg# Please DO NOT delete this file! 93666e7d3316Smrg# It is necessary for linking the library. 9367a966c04fSmrg 93686e7d3316Smrg# The name that we can dlopen(3). 93696e7d3316Smrgdlname='$tdlname' 9370a966c04fSmrg 93716e7d3316Smrg# Names of this library. 93726e7d3316Smrglibrary_names='$library_names' 9373a966c04fSmrg 93746e7d3316Smrg# The name of the static archive. 93756e7d3316Smrgold_library='$old_library' 9376a966c04fSmrg 93776e7d3316Smrg# Linker flags that can not go in dependency_libs. 93786e7d3316Smrginherited_linker_flags='$new_inherited_linker_flags' 9379a966c04fSmrg 93806e7d3316Smrg# Libraries that this one depends upon. 93816e7d3316Smrgdependency_libs='$dependency_libs' 9382a966c04fSmrg 93836e7d3316Smrg# Names of additional weak libraries provided by this library 93846e7d3316Smrgweak_library_names='$weak_libs' 9385a966c04fSmrg 93866e7d3316Smrg# Version information for $libname. 93876e7d3316Smrgcurrent=$current 93886e7d3316Smrgage=$age 93896e7d3316Smrgrevision=$revision 9390a966c04fSmrg 93916e7d3316Smrg# Is this an already installed library? 93926e7d3316Smrginstalled=$installed 9393a966c04fSmrg 93946e7d3316Smrg# Should we warn about portability when linking against -modules? 93956e7d3316Smrgshouldnotlink=$module 9396a966c04fSmrg 93976e7d3316Smrg# Files to dlopen/dlpreopen 93986e7d3316Smrgdlopen='$dlfiles' 93996e7d3316Smrgdlpreopen='$dlprefiles' 9400a966c04fSmrg 94016e7d3316Smrg# Directory that this library needs to be installed in: 94026e7d3316Smrglibdir='$install_libdir'" 94036e7d3316Smrg if test "$installed" = no && test "$need_relink" = yes; then 94046e7d3316Smrg $ECHO >> $output "\ 94056e7d3316Smrgrelink_command=\"$relink_command\"" 94066e7d3316Smrg fi 94076e7d3316Smrg done 94086e7d3316Smrg } 9409a966c04fSmrg 94106e7d3316Smrg # Do a symbolic link so that the libtool archive can be found in 94116e7d3316Smrg # LD_LIBRARY_PATH before the program is installed. 94126e7d3316Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 94136e7d3316Smrg ;; 94146e7d3316Smrg esac 94156e7d3316Smrg exit $EXIT_SUCCESS 94166e7d3316Smrg} 9417a966c04fSmrg 941897cf2ee2Smrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 94196e7d3316Smrg func_mode_link ${1+"$@"} 9420a966c04fSmrg 9421a966c04fSmrg 94226e7d3316Smrg# func_mode_uninstall arg... 94236e7d3316Smrgfunc_mode_uninstall () 94246e7d3316Smrg{ 94256e7d3316Smrg $opt_debug 94266e7d3316Smrg RM="$nonopt" 9427a966c04fSmrg files= 9428a966c04fSmrg rmforce= 9429a966c04fSmrg exit_status=0 9430a966c04fSmrg 9431a966c04fSmrg # This variable tells wrapper scripts just to set variables rather 9432a966c04fSmrg # than running their programs. 9433a966c04fSmrg libtool_install_magic="$magic" 9434a966c04fSmrg 9435a966c04fSmrg for arg 9436a966c04fSmrg do 9437a966c04fSmrg case $arg in 943897cf2ee2Smrg -f) func_append RM " $arg"; rmforce=yes ;; 943997cf2ee2Smrg -*) func_append RM " $arg" ;; 944097cf2ee2Smrg *) func_append files " $arg" ;; 9441a966c04fSmrg esac 9442a966c04fSmrg done 9443a966c04fSmrg 94446e7d3316Smrg test -z "$RM" && \ 94456e7d3316Smrg func_fatal_help "you must specify an RM program" 9446a966c04fSmrg 9447a966c04fSmrg rmdirs= 9448a966c04fSmrg 9449a966c04fSmrg for file in $files; do 94506e7d3316Smrg func_dirname "$file" "" "." 94516e7d3316Smrg dir="$func_dirname_result" 94526e7d3316Smrg if test "X$dir" = X.; then 945397cf2ee2Smrg odir="$objdir" 9454a966c04fSmrg else 945597cf2ee2Smrg odir="$dir/$objdir" 9456a966c04fSmrg fi 94576e7d3316Smrg func_basename "$file" 94586e7d3316Smrg name="$func_basename_result" 945997cf2ee2Smrg test "$opt_mode" = uninstall && odir="$dir" 9460a966c04fSmrg 946197cf2ee2Smrg # Remember odir for removal later, being careful to avoid duplicates 946297cf2ee2Smrg if test "$opt_mode" = clean; then 9463a966c04fSmrg case " $rmdirs " in 946497cf2ee2Smrg *" $odir "*) ;; 946597cf2ee2Smrg *) func_append rmdirs " $odir" ;; 9466a966c04fSmrg esac 9467a966c04fSmrg fi 9468a966c04fSmrg 9469a966c04fSmrg # Don't error if the file doesn't exist and rm -f was used. 94706e7d3316Smrg if { test -L "$file"; } >/dev/null 2>&1 || 94716e7d3316Smrg { test -h "$file"; } >/dev/null 2>&1 || 94726e7d3316Smrg test -f "$file"; then 9473a966c04fSmrg : 9474a966c04fSmrg elif test -d "$file"; then 9475a966c04fSmrg exit_status=1 9476a966c04fSmrg continue 9477a966c04fSmrg elif test "$rmforce" = yes; then 9478a966c04fSmrg continue 9479a966c04fSmrg fi 9480a966c04fSmrg 9481a966c04fSmrg rmfiles="$file" 9482a966c04fSmrg 9483a966c04fSmrg case $name in 9484a966c04fSmrg *.la) 9485a966c04fSmrg # Possibly a libtool archive, so verify it. 94866e7d3316Smrg if func_lalib_p "$file"; then 94876e7d3316Smrg func_source $dir/$name 9488a966c04fSmrg 9489a966c04fSmrg # Delete the libtool libraries and symlinks. 9490a966c04fSmrg for n in $library_names; do 949197cf2ee2Smrg func_append rmfiles " $odir/$n" 9492a966c04fSmrg done 949397cf2ee2Smrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 9494a966c04fSmrg 949597cf2ee2Smrg case "$opt_mode" in 9496a966c04fSmrg clean) 949797cf2ee2Smrg case " $library_names " in 9498a966c04fSmrg *" $dlname "*) ;; 949997cf2ee2Smrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 9500a966c04fSmrg esac 950197cf2ee2Smrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 9502a966c04fSmrg ;; 9503a966c04fSmrg uninstall) 9504a966c04fSmrg if test -n "$library_names"; then 9505a966c04fSmrg # Do each command in the postuninstall commands. 95066e7d3316Smrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9507a966c04fSmrg fi 9508a966c04fSmrg 9509a966c04fSmrg if test -n "$old_library"; then 9510a966c04fSmrg # Do each command in the old_postuninstall commands. 95116e7d3316Smrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9512a966c04fSmrg fi 9513a966c04fSmrg # FIXME: should reinstall the best remaining shared library. 9514a966c04fSmrg ;; 9515a966c04fSmrg esac 9516a966c04fSmrg fi 9517a966c04fSmrg ;; 9518a966c04fSmrg 9519a966c04fSmrg *.lo) 9520a966c04fSmrg # Possibly a libtool object, so verify it. 95216e7d3316Smrg if func_lalib_p "$file"; then 9522a966c04fSmrg 9523a966c04fSmrg # Read the .lo file 95246e7d3316Smrg func_source $dir/$name 9525a966c04fSmrg 9526a966c04fSmrg # Add PIC object to the list of files to remove. 95276e7d3316Smrg if test -n "$pic_object" && 95286e7d3316Smrg test "$pic_object" != none; then 952997cf2ee2Smrg func_append rmfiles " $dir/$pic_object" 9530a966c04fSmrg fi 9531a966c04fSmrg 9532a966c04fSmrg # Add non-PIC object to the list of files to remove. 95336e7d3316Smrg if test -n "$non_pic_object" && 95346e7d3316Smrg test "$non_pic_object" != none; then 953597cf2ee2Smrg func_append rmfiles " $dir/$non_pic_object" 9536a966c04fSmrg fi 9537a966c04fSmrg fi 9538a966c04fSmrg ;; 9539a966c04fSmrg 9540a966c04fSmrg *) 954197cf2ee2Smrg if test "$opt_mode" = clean ; then 9542a966c04fSmrg noexename=$name 9543a966c04fSmrg case $file in 9544a966c04fSmrg *.exe) 95456e7d3316Smrg func_stripname '' '.exe' "$file" 95466e7d3316Smrg file=$func_stripname_result 95476e7d3316Smrg func_stripname '' '.exe' "$name" 95486e7d3316Smrg noexename=$func_stripname_result 9549a966c04fSmrg # $file with .exe has already been added to rmfiles, 9550a966c04fSmrg # add $file without .exe 955197cf2ee2Smrg func_append rmfiles " $file" 9552a966c04fSmrg ;; 9553a966c04fSmrg esac 9554a966c04fSmrg # Do a test to see if this is a libtool program. 95556e7d3316Smrg if func_ltwrapper_p "$file"; then 95566e7d3316Smrg if func_ltwrapper_executable_p "$file"; then 95576e7d3316Smrg func_ltwrapper_scriptname "$file" 95586e7d3316Smrg relink_command= 95596e7d3316Smrg func_source $func_ltwrapper_scriptname_result 956097cf2ee2Smrg func_append rmfiles " $func_ltwrapper_scriptname_result" 95616e7d3316Smrg else 95626e7d3316Smrg relink_command= 95636e7d3316Smrg func_source $dir/$noexename 95646e7d3316Smrg fi 9565a966c04fSmrg 9566a966c04fSmrg # note $name still contains .exe if it was in $file originally 9567a966c04fSmrg # as does the version of $file that was added into $rmfiles 956897cf2ee2Smrg func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 9569a966c04fSmrg if test "$fast_install" = yes && test -n "$relink_command"; then 957097cf2ee2Smrg func_append rmfiles " $odir/lt-$name" 9571a966c04fSmrg fi 9572a966c04fSmrg if test "X$noexename" != "X$name" ; then 957397cf2ee2Smrg func_append rmfiles " $odir/lt-${noexename}.c" 9574a966c04fSmrg fi 9575a966c04fSmrg fi 9576a966c04fSmrg fi 9577a966c04fSmrg ;; 9578a966c04fSmrg esac 95796e7d3316Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 9580a966c04fSmrg done 9581a966c04fSmrg 9582a966c04fSmrg # Try to remove the ${objdir}s in the directories where we deleted files 9583a966c04fSmrg for dir in $rmdirs; do 9584a966c04fSmrg if test -d "$dir"; then 95856e7d3316Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 9586a966c04fSmrg fi 9587a966c04fSmrg done 9588a966c04fSmrg 9589a966c04fSmrg exit $exit_status 95906e7d3316Smrg} 9591a966c04fSmrg 959297cf2ee2Smrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 95936e7d3316Smrg func_mode_uninstall ${1+"$@"} 9594a966c04fSmrg 959597cf2ee2Smrgtest -z "$opt_mode" && { 95966e7d3316Smrg help="$generic_help" 95976e7d3316Smrg func_fatal_help "you must specify a MODE" 95986e7d3316Smrg} 95996e7d3316Smrg 96006e7d3316Smrgtest -z "$exec_cmd" && \ 960197cf2ee2Smrg func_fatal_help "invalid operation mode \`$opt_mode'" 9602a966c04fSmrg 9603a966c04fSmrgif test -n "$exec_cmd"; then 96046e7d3316Smrg eval exec "$exec_cmd" 9605a966c04fSmrg exit $EXIT_FAILURE 9606a966c04fSmrgfi 9607a966c04fSmrg 96086e7d3316Smrgexit $exit_status 9609a966c04fSmrg 9610a966c04fSmrg 9611a966c04fSmrg# The TAGs below are defined such that we never get into a situation 9612a966c04fSmrg# in which we disable both kinds of libraries. Given conflicting 9613a966c04fSmrg# choices, we go for a static library, that is the most portable, 9614a966c04fSmrg# since we can't tell whether shared libraries were disabled because 9615a966c04fSmrg# the user asked for that or because the platform doesn't support 9616a966c04fSmrg# them. This is particularly important on AIX, because we don't 9617a966c04fSmrg# support having both static and shared libraries enabled at the same 9618a966c04fSmrg# time on that platform, so we default to a shared-only configuration. 9619a966c04fSmrg# If a disable-shared tag is given, we'll fallback to a static-only 9620a966c04fSmrg# configuration. But we'll never go from static-only to shared-only. 9621a966c04fSmrg 9622a966c04fSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 96236e7d3316Smrgbuild_libtool_libs=no 96246e7d3316Smrgbuild_old_libs=yes 9625a966c04fSmrg# ### END LIBTOOL TAG CONFIG: disable-shared 9626a966c04fSmrg 9627a966c04fSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 96286e7d3316Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 9629a966c04fSmrg# ### END LIBTOOL TAG CONFIG: disable-static 9630a966c04fSmrg 9631a966c04fSmrg# Local Variables: 9632a966c04fSmrg# mode:shell-script 9633a966c04fSmrg# sh-indentation:2 9634a966c04fSmrg# End: 96356e7d3316Smrg# vi:sw=2 96366e7d3316Smrg 9637