ltmain.sh revision ac92798b
16e7d3316Smrg 2ac92798bSmrg# libtool (GNU libtool) 2.4.2 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, 6ac92798bSmrg# 2007, 2008, 2009, 2010, 2011 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) 44ac92798bSmrg# --no-warn don't display warning messages 456e7d3316Smrg# --tag=TAG use configuration variables from tag TAG 466e7d3316Smrg# -v, --verbose print more informational messages than default 476e7d3316Smrg# --no-verbose don't print the extra informational messages 486e7d3316Smrg# --version print version information 496e7d3316Smrg# -h, --help, --help-all print short, long, or detailed help message 506e7d3316Smrg# 516e7d3316Smrg# MODE must be one of the following: 526e7d3316Smrg# 536e7d3316Smrg# clean remove files from the build directory 546e7d3316Smrg# compile compile a source file into a libtool object 556e7d3316Smrg# execute automatically set library path, then run a program 566e7d3316Smrg# finish complete the installation of libtool libraries 576e7d3316Smrg# install install libraries or executables 586e7d3316Smrg# link create a library or an executable 596e7d3316Smrg# uninstall remove libraries from an installed directory 606e7d3316Smrg# 616e7d3316Smrg# MODE-ARGS vary depending on the MODE. When passed as first option, 626e7d3316Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 636e7d3316Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 646e7d3316Smrg# 656e7d3316Smrg# When reporting a bug, please describe a test case to reproduce it and 666e7d3316Smrg# include the following information: 676e7d3316Smrg# 686e7d3316Smrg# host-triplet: $host 696e7d3316Smrg# shell: $SHELL 706e7d3316Smrg# compiler: $LTCC 716e7d3316Smrg# compiler flags: $LTCFLAGS 726e7d3316Smrg# linker: $LD (gnu? $with_gnu_ld) 73ac92798bSmrg# $progname: (GNU libtool) 2.4.2 746e7d3316Smrg# automake: $automake_version 756e7d3316Smrg# autoconf: $autoconf_version 766e7d3316Smrg# 776e7d3316Smrg# Report bugs to <bug-libtool@gnu.org>. 7897cf2ee2Smrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 7997cf2ee2Smrg# General help using GNU software: <http://www.gnu.org/gethelp/>. 80a966c04fSmrg 816e7d3316SmrgPROGRAM=libtool 82a966c04fSmrgPACKAGE=libtool 83ac92798bSmrgVERSION=2.4.2 846e7d3316SmrgTIMESTAMP="" 85ac92798bSmrgpackage_revision=1.3337 862e2dd055Smrg 876e7d3316Smrg# Be Bourne compatible 882e2dd055Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 892e2dd055Smrg emulate sh 902e2dd055Smrg NULLCMD=: 912e2dd055Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 922e2dd055Smrg # is contrary to our usage. Disable this feature. 932e2dd055Smrg alias -g '${1+"$@"}'='"$@"' 94a966c04fSmrg setopt NO_GLOB_SUBST 952e2dd055Smrgelse 962e2dd055Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 97a966c04fSmrgfi 982e2dd055SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 992e2dd055SmrgDUALCASE=1; export DUALCASE # for MKS sh 100a966c04fSmrg 1016e7d3316Smrg# A function that is used when there is no print builtin or printf. 1026e7d3316Smrgfunc_fallback_echo () 1036e7d3316Smrg{ 1046e7d3316Smrg eval 'cat <<_LTECHO_EOF 1056e7d3316Smrg$1 1066e7d3316Smrg_LTECHO_EOF' 1076e7d3316Smrg} 108a966c04fSmrg 1096e7d3316Smrg# NLS nuisances: We save the old values to restore during execute mode. 1106e7d3316Smrglt_user_locale= 1116e7d3316Smrglt_safe_locale= 1122e2dd055Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 1132e2dd055Smrgdo 1142e2dd055Smrg eval "if test \"\${$lt_var+set}\" = set; then 1156e7d3316Smrg save_$lt_var=\$$lt_var 1166e7d3316Smrg $lt_var=C 1172e2dd055Smrg export $lt_var 1186e7d3316Smrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 1196e7d3316Smrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 1202e2dd055Smrg fi" 1212e2dd055Smrgdone 1226e7d3316SmrgLC_ALL=C 1236e7d3316SmrgLANGUAGE=C 1246e7d3316Smrgexport LANGUAGE LC_ALL 1252e2dd055Smrg 1266e7d3316Smrg$lt_unset CDPATH 1276e7d3316Smrg 1286e7d3316Smrg 1296e7d3316Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 1306e7d3316Smrg# is ksh but when the shell is invoked as "sh" and the current value of 1316e7d3316Smrg# the _XPG environment variable is not equal to 1 (one), the special 1326e7d3316Smrg# positional parameter $0, within a function call, is the name of the 1336e7d3316Smrg# function. 1346e7d3316Smrgprogpath="$0" 1356e7d3316Smrg 1366e7d3316Smrg 1376e7d3316Smrg 1386e7d3316Smrg: ${CP="cp -f"} 1396e7d3316Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 1406e7d3316Smrg: ${MAKE="make"} 1416e7d3316Smrg: ${MKDIR="mkdir"} 1426e7d3316Smrg: ${MV="mv -f"} 1436e7d3316Smrg: ${RM="rm -f"} 1446e7d3316Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 1456e7d3316Smrg: ${Xsed="$SED -e 1s/^X//"} 1466e7d3316Smrg 1476e7d3316Smrg# Global variables: 1486e7d3316SmrgEXIT_SUCCESS=0 1496e7d3316SmrgEXIT_FAILURE=1 1506e7d3316SmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 1516e7d3316SmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 1526e7d3316Smrg 1536e7d3316Smrgexit_status=$EXIT_SUCCESS 154a966c04fSmrg 155a966c04fSmrg# Make sure IFS has a sensible default 156a966c04fSmrglt_nl=' 157a966c04fSmrg' 158a966c04fSmrgIFS=" $lt_nl" 159a966c04fSmrg 1606e7d3316Smrgdirname="s,/[^/]*$,," 1616e7d3316Smrgbasename="s,^.*/,," 1626e7d3316Smrg 16397cf2ee2Smrg# func_dirname file append nondir_replacement 16497cf2ee2Smrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 16597cf2ee2Smrg# otherwise set result to NONDIR_REPLACEMENT. 16697cf2ee2Smrgfunc_dirname () 16797cf2ee2Smrg{ 16897cf2ee2Smrg func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 16997cf2ee2Smrg if test "X$func_dirname_result" = "X${1}"; then 17097cf2ee2Smrg func_dirname_result="${3}" 17197cf2ee2Smrg else 17297cf2ee2Smrg func_dirname_result="$func_dirname_result${2}" 17397cf2ee2Smrg fi 17497cf2ee2Smrg} # func_dirname may be replaced by extended shell implementation 17597cf2ee2Smrg 17697cf2ee2Smrg 17797cf2ee2Smrg# func_basename file 17897cf2ee2Smrgfunc_basename () 17997cf2ee2Smrg{ 18097cf2ee2Smrg func_basename_result=`$ECHO "${1}" | $SED "$basename"` 18197cf2ee2Smrg} # func_basename may be replaced by extended shell implementation 18297cf2ee2Smrg 18397cf2ee2Smrg 1846e7d3316Smrg# func_dirname_and_basename file append nondir_replacement 1856e7d3316Smrg# perform func_basename and func_dirname in a single function 1866e7d3316Smrg# call: 1876e7d3316Smrg# dirname: Compute the dirname of FILE. If nonempty, 1886e7d3316Smrg# add APPEND to the result, otherwise set result 1896e7d3316Smrg# to NONDIR_REPLACEMENT. 1906e7d3316Smrg# value returned in "$func_dirname_result" 1916e7d3316Smrg# basename: Compute filename of FILE. 1926e7d3316Smrg# value retuned in "$func_basename_result" 1936e7d3316Smrg# Implementation must be kept synchronized with func_dirname 1946e7d3316Smrg# and func_basename. For efficiency, we do not delegate to 1956e7d3316Smrg# those functions but instead duplicate the functionality here. 1966e7d3316Smrgfunc_dirname_and_basename () 1976e7d3316Smrg{ 19897cf2ee2Smrg # Extract subdirectory from the argument. 19997cf2ee2Smrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 20097cf2ee2Smrg if test "X$func_dirname_result" = "X${1}"; then 20197cf2ee2Smrg func_dirname_result="${3}" 20297cf2ee2Smrg else 20397cf2ee2Smrg func_dirname_result="$func_dirname_result${2}" 20497cf2ee2Smrg fi 20597cf2ee2Smrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 20697cf2ee2Smrg} # func_dirname_and_basename may be replaced by extended shell implementation 20797cf2ee2Smrg 20897cf2ee2Smrg 20997cf2ee2Smrg# func_stripname prefix suffix name 21097cf2ee2Smrg# strip PREFIX and SUFFIX off of NAME. 21197cf2ee2Smrg# PREFIX and SUFFIX must not contain globbing or regex special 21297cf2ee2Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading 21397cf2ee2Smrg# dot (in which case that matches only a dot). 21497cf2ee2Smrg# func_strip_suffix prefix name 21597cf2ee2Smrgfunc_stripname () 21697cf2ee2Smrg{ 21797cf2ee2Smrg case ${2} in 21897cf2ee2Smrg .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 21997cf2ee2Smrg *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 22097cf2ee2Smrg esac 22197cf2ee2Smrg} # func_stripname may be replaced by extended shell implementation 222a966c04fSmrg 2236e7d3316Smrg 2246e7d3316Smrg# These SED scripts presuppose an absolute path with a trailing slash. 2256e7d3316Smrgpathcar='s,^/\([^/]*\).*$,\1,' 2266e7d3316Smrgpathcdr='s,^/[^/]*,,' 2276e7d3316Smrgremovedotparts=':dotsl 2286e7d3316Smrg s@/\./@/@g 2296e7d3316Smrg t dotsl 2306e7d3316Smrg s,/\.$,/,' 2316e7d3316Smrgcollapseslashes='s@/\{1,\}@/@g' 2326e7d3316Smrgfinalslash='s,/*$,/,' 2336e7d3316Smrg 2346e7d3316Smrg# func_normal_abspath PATH 2356e7d3316Smrg# Remove doubled-up and trailing slashes, "." path components, 2366e7d3316Smrg# and cancel out any ".." path components in PATH after making 2376e7d3316Smrg# it an absolute path. 2386e7d3316Smrg# value returned in "$func_normal_abspath_result" 2396e7d3316Smrgfunc_normal_abspath () 2406e7d3316Smrg{ 2416e7d3316Smrg # Start from root dir and reassemble the path. 2426e7d3316Smrg func_normal_abspath_result= 2436e7d3316Smrg func_normal_abspath_tpath=$1 2446e7d3316Smrg func_normal_abspath_altnamespace= 2456e7d3316Smrg case $func_normal_abspath_tpath in 2466e7d3316Smrg "") 2476e7d3316Smrg # Empty path, that just means $cwd. 2486e7d3316Smrg func_stripname '' '/' "`pwd`" 2496e7d3316Smrg func_normal_abspath_result=$func_stripname_result 2506e7d3316Smrg return 2516e7d3316Smrg ;; 2526e7d3316Smrg # The next three entries are used to spot a run of precisely 2536e7d3316Smrg # two leading slashes without using negated character classes; 2546e7d3316Smrg # we take advantage of case's first-match behaviour. 2556e7d3316Smrg ///*) 2566e7d3316Smrg # Unusual form of absolute path, do nothing. 2576e7d3316Smrg ;; 2586e7d3316Smrg //*) 2596e7d3316Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 2606e7d3316Smrg # and for example Cygwin uses it to access remote file shares 2616e7d3316Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 2626e7d3316Smrg func_normal_abspath_altnamespace=/ 2636e7d3316Smrg ;; 2646e7d3316Smrg /*) 2656e7d3316Smrg # Absolute path, do nothing. 2666e7d3316Smrg ;; 2676e7d3316Smrg *) 2686e7d3316Smrg # Relative path, prepend $cwd. 2696e7d3316Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 2706e7d3316Smrg ;; 2716e7d3316Smrg esac 2726e7d3316Smrg # Cancel out all the simple stuff to save iterations. We also want 2736e7d3316Smrg # the path to end with a slash for ease of parsing, so make sure 2746e7d3316Smrg # there is one (and only one) here. 2756e7d3316Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2766e7d3316Smrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 2776e7d3316Smrg while :; do 2786e7d3316Smrg # Processed it all yet? 2796e7d3316Smrg if test "$func_normal_abspath_tpath" = / ; then 2806e7d3316Smrg # If we ascended to the root using ".." the result may be empty now. 2816e7d3316Smrg if test -z "$func_normal_abspath_result" ; then 2826e7d3316Smrg func_normal_abspath_result=/ 2836e7d3316Smrg fi 2846e7d3316Smrg break 2856e7d3316Smrg fi 2866e7d3316Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2876e7d3316Smrg -e "$pathcar"` 2886e7d3316Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2896e7d3316Smrg -e "$pathcdr"` 2906e7d3316Smrg # Figure out what to do with it 2916e7d3316Smrg case $func_normal_abspath_tcomponent in 2926e7d3316Smrg "") 2936e7d3316Smrg # Trailing empty path component, ignore it. 2946e7d3316Smrg ;; 2956e7d3316Smrg ..) 2966e7d3316Smrg # Parent dir; strip last assembled component from result. 2976e7d3316Smrg func_dirname "$func_normal_abspath_result" 2986e7d3316Smrg func_normal_abspath_result=$func_dirname_result 2996e7d3316Smrg ;; 3006e7d3316Smrg *) 3016e7d3316Smrg # Actual path component, append it. 3026e7d3316Smrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 3036e7d3316Smrg ;; 3046e7d3316Smrg esac 3056e7d3316Smrg done 3066e7d3316Smrg # Restore leading double-slash if one was found on entry. 3076e7d3316Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 3086e7d3316Smrg} 3096e7d3316Smrg 3106e7d3316Smrg# func_relative_path SRCDIR DSTDIR 3116e7d3316Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 3126e7d3316Smrg# slash if non-empty, suitable for immediately appending a filename 3136e7d3316Smrg# without needing to append a separator. 3146e7d3316Smrg# value returned in "$func_relative_path_result" 3156e7d3316Smrgfunc_relative_path () 3166e7d3316Smrg{ 3176e7d3316Smrg func_relative_path_result= 3186e7d3316Smrg func_normal_abspath "$1" 3196e7d3316Smrg func_relative_path_tlibdir=$func_normal_abspath_result 3206e7d3316Smrg func_normal_abspath "$2" 3216e7d3316Smrg func_relative_path_tbindir=$func_normal_abspath_result 3226e7d3316Smrg 3236e7d3316Smrg # Ascend the tree starting from libdir 3246e7d3316Smrg while :; do 3256e7d3316Smrg # check if we have found a prefix of bindir 3266e7d3316Smrg case $func_relative_path_tbindir in 3276e7d3316Smrg $func_relative_path_tlibdir) 3286e7d3316Smrg # found an exact match 3296e7d3316Smrg func_relative_path_tcancelled= 3306e7d3316Smrg break 3316e7d3316Smrg ;; 3326e7d3316Smrg $func_relative_path_tlibdir*) 3336e7d3316Smrg # found a matching prefix 3346e7d3316Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 3356e7d3316Smrg func_relative_path_tcancelled=$func_stripname_result 3366e7d3316Smrg if test -z "$func_relative_path_result"; then 3376e7d3316Smrg func_relative_path_result=. 3386e7d3316Smrg fi 3396e7d3316Smrg break 3406e7d3316Smrg ;; 3416e7d3316Smrg *) 3426e7d3316Smrg func_dirname $func_relative_path_tlibdir 3436e7d3316Smrg func_relative_path_tlibdir=${func_dirname_result} 3446e7d3316Smrg if test "x$func_relative_path_tlibdir" = x ; then 3456e7d3316Smrg # Have to descend all the way to the root! 3466e7d3316Smrg func_relative_path_result=../$func_relative_path_result 3476e7d3316Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 3486e7d3316Smrg break 3496e7d3316Smrg fi 3506e7d3316Smrg func_relative_path_result=../$func_relative_path_result 3516e7d3316Smrg ;; 3526e7d3316Smrg esac 3536e7d3316Smrg done 3546e7d3316Smrg 3556e7d3316Smrg # Now calculate path; take care to avoid doubling-up slashes. 3566e7d3316Smrg func_stripname '' '/' "$func_relative_path_result" 3576e7d3316Smrg func_relative_path_result=$func_stripname_result 3586e7d3316Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 3596e7d3316Smrg if test "x$func_stripname_result" != x ; then 3606e7d3316Smrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 3616e7d3316Smrg fi 3626e7d3316Smrg 3636e7d3316Smrg # Normalisation. If bindir is libdir, return empty string, 3646e7d3316Smrg # else relative path ending with a slash; either way, target 3656e7d3316Smrg # file name can be directly appended. 3666e7d3316Smrg if test ! -z "$func_relative_path_result"; then 3676e7d3316Smrg func_stripname './' '' "$func_relative_path_result/" 3686e7d3316Smrg func_relative_path_result=$func_stripname_result 3696e7d3316Smrg fi 3706e7d3316Smrg} 3716e7d3316Smrg 3726e7d3316Smrg# The name of this program: 3736e7d3316Smrgfunc_dirname_and_basename "$progpath" 3746e7d3316Smrgprogname=$func_basename_result 3756e7d3316Smrg 3766e7d3316Smrg# Make sure we have an absolute path for reexecution: 3776e7d3316Smrgcase $progpath in 3786e7d3316Smrg [\\/]*|[A-Za-z]:\\*) ;; 3796e7d3316Smrg *[\\/]*) 3806e7d3316Smrg progdir=$func_dirname_result 3816e7d3316Smrg progdir=`cd "$progdir" && pwd` 3826e7d3316Smrg progpath="$progdir/$progname" 3836e7d3316Smrg ;; 3846e7d3316Smrg *) 3856e7d3316Smrg save_IFS="$IFS" 386ac92798bSmrg IFS=${PATH_SEPARATOR-:} 3876e7d3316Smrg for progdir in $PATH; do 3886e7d3316Smrg IFS="$save_IFS" 3896e7d3316Smrg test -x "$progdir/$progname" && break 3906e7d3316Smrg done 3916e7d3316Smrg IFS="$save_IFS" 3926e7d3316Smrg test -n "$progdir" || progdir=`pwd` 3936e7d3316Smrg progpath="$progdir/$progname" 3946e7d3316Smrg ;; 3956e7d3316Smrgesac 3966e7d3316Smrg 3976e7d3316Smrg# Sed substitution that helps us do robust quoting. It backslashifies 3986e7d3316Smrg# metacharacters that are still active within double-quoted strings. 3996e7d3316SmrgXsed="${SED}"' -e 1s/^X//' 4006e7d3316Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 4016e7d3316Smrg 4026e7d3316Smrg# Same as above, but do not quote variable references. 4036e7d3316Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 4046e7d3316Smrg 40597cf2ee2Smrg# Sed substitution that turns a string into a regex matching for the 40697cf2ee2Smrg# string literally. 40797cf2ee2Smrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 40897cf2ee2Smrg 40997cf2ee2Smrg# Sed substitution that converts a w32 file name or path 41097cf2ee2Smrg# which contains forward slashes, into one that contains 41197cf2ee2Smrg# (escaped) backslashes. A very naive implementation. 41297cf2ee2Smrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 41397cf2ee2Smrg 4146e7d3316Smrg# Re-`\' parameter expansions in output of double_quote_subst that were 4156e7d3316Smrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 4166e7d3316Smrg# in input to double_quote_subst, that '$' was protected from expansion. 4176e7d3316Smrg# Since each input `\' is now two `\'s, look for any number of runs of 4186e7d3316Smrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 4196e7d3316Smrgbs='\\' 4206e7d3316Smrgbs2='\\\\' 4216e7d3316Smrgbs4='\\\\\\\\' 4226e7d3316Smrgdollar='\$' 4236e7d3316Smrgsed_double_backslash="\ 4246e7d3316Smrg s/$bs4/&\\ 4256e7d3316Smrg/g 4266e7d3316Smrg s/^$bs2$dollar/$bs&/ 4276e7d3316Smrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 4286e7d3316Smrg s/\n//g" 4296e7d3316Smrg 4306e7d3316Smrg# Standard options: 4316e7d3316Smrgopt_dry_run=false 4326e7d3316Smrgopt_help=false 4336e7d3316Smrgopt_quiet=false 4346e7d3316Smrgopt_verbose=false 4356e7d3316Smrgopt_warning=: 4366e7d3316Smrg 4376e7d3316Smrg# func_echo arg... 4386e7d3316Smrg# Echo program name prefixed message, along with the current mode 4396e7d3316Smrg# name if it has been set yet. 4406e7d3316Smrgfunc_echo () 4416e7d3316Smrg{ 44297cf2ee2Smrg $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 4436e7d3316Smrg} 4446e7d3316Smrg 4456e7d3316Smrg# func_verbose arg... 4466e7d3316Smrg# Echo program name prefixed message in verbose mode only. 4476e7d3316Smrgfunc_verbose () 4486e7d3316Smrg{ 4496e7d3316Smrg $opt_verbose && func_echo ${1+"$@"} 4506e7d3316Smrg 4516e7d3316Smrg # A bug in bash halts the script if the last line of a function 4526e7d3316Smrg # fails when set -e is in force, so we need another command to 4536e7d3316Smrg # work around that: 4546e7d3316Smrg : 4556e7d3316Smrg} 4566e7d3316Smrg 4576e7d3316Smrg# func_echo_all arg... 4586e7d3316Smrg# Invoke $ECHO with all args, space-separated. 4596e7d3316Smrgfunc_echo_all () 4606e7d3316Smrg{ 4616e7d3316Smrg $ECHO "$*" 4626e7d3316Smrg} 4636e7d3316Smrg 4646e7d3316Smrg# func_error arg... 4656e7d3316Smrg# Echo program name prefixed message to standard error. 4666e7d3316Smrgfunc_error () 4676e7d3316Smrg{ 46897cf2ee2Smrg $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 4696e7d3316Smrg} 4706e7d3316Smrg 4716e7d3316Smrg# func_warning arg... 4726e7d3316Smrg# Echo program name prefixed warning message to standard error. 4736e7d3316Smrgfunc_warning () 4746e7d3316Smrg{ 47597cf2ee2Smrg $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 4766e7d3316Smrg 4776e7d3316Smrg # bash bug again: 4786e7d3316Smrg : 4796e7d3316Smrg} 4806e7d3316Smrg 4816e7d3316Smrg# func_fatal_error arg... 4826e7d3316Smrg# Echo program name prefixed message to standard error, and exit. 4836e7d3316Smrgfunc_fatal_error () 4846e7d3316Smrg{ 4856e7d3316Smrg func_error ${1+"$@"} 4866e7d3316Smrg exit $EXIT_FAILURE 4876e7d3316Smrg} 4886e7d3316Smrg 4896e7d3316Smrg# func_fatal_help arg... 4906e7d3316Smrg# Echo program name prefixed message to standard error, followed by 4916e7d3316Smrg# a help hint, and exit. 4926e7d3316Smrgfunc_fatal_help () 4936e7d3316Smrg{ 4946e7d3316Smrg func_error ${1+"$@"} 4956e7d3316Smrg func_fatal_error "$help" 4966e7d3316Smrg} 4976e7d3316Smrghelp="Try \`$progname --help' for more information." ## default 4986e7d3316Smrg 4996e7d3316Smrg 5006e7d3316Smrg# func_grep expression filename 5016e7d3316Smrg# Check whether EXPRESSION matches any line of FILENAME, without output. 5026e7d3316Smrgfunc_grep () 5036e7d3316Smrg{ 5046e7d3316Smrg $GREP "$1" "$2" >/dev/null 2>&1 5056e7d3316Smrg} 5066e7d3316Smrg 5076e7d3316Smrg 5086e7d3316Smrg# func_mkdir_p directory-path 5096e7d3316Smrg# Make sure the entire path to DIRECTORY-PATH is available. 5106e7d3316Smrgfunc_mkdir_p () 5116e7d3316Smrg{ 5126e7d3316Smrg my_directory_path="$1" 5136e7d3316Smrg my_dir_list= 5146e7d3316Smrg 5156e7d3316Smrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 5166e7d3316Smrg 5176e7d3316Smrg # Protect directory names starting with `-' 5186e7d3316Smrg case $my_directory_path in 5196e7d3316Smrg -*) my_directory_path="./$my_directory_path" ;; 5206e7d3316Smrg esac 5216e7d3316Smrg 5226e7d3316Smrg # While some portion of DIR does not yet exist... 5236e7d3316Smrg while test ! -d "$my_directory_path"; do 5246e7d3316Smrg # ...make a list in topmost first order. Use a colon delimited 5256e7d3316Smrg # list incase some portion of path contains whitespace. 5266e7d3316Smrg my_dir_list="$my_directory_path:$my_dir_list" 5276e7d3316Smrg 5286e7d3316Smrg # If the last portion added has no slash in it, the list is done 5296e7d3316Smrg case $my_directory_path in */*) ;; *) break ;; esac 5306e7d3316Smrg 5316e7d3316Smrg # ...otherwise throw away the child directory and loop 5326e7d3316Smrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 5336e7d3316Smrg done 5346e7d3316Smrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 5356e7d3316Smrg 5366e7d3316Smrg save_mkdir_p_IFS="$IFS"; IFS=':' 5376e7d3316Smrg for my_dir in $my_dir_list; do 5386e7d3316Smrg IFS="$save_mkdir_p_IFS" 5396e7d3316Smrg # mkdir can fail with a `File exist' error if two processes 5406e7d3316Smrg # try to create one of the directories concurrently. Don't 5416e7d3316Smrg # stop in that case! 5426e7d3316Smrg $MKDIR "$my_dir" 2>/dev/null || : 5436e7d3316Smrg done 5446e7d3316Smrg IFS="$save_mkdir_p_IFS" 5456e7d3316Smrg 5466e7d3316Smrg # Bail out if we (or some other process) failed to create a directory. 5476e7d3316Smrg test -d "$my_directory_path" || \ 5486e7d3316Smrg func_fatal_error "Failed to create \`$1'" 5496e7d3316Smrg fi 5506e7d3316Smrg} 551a966c04fSmrg 552a966c04fSmrg 553a966c04fSmrg# func_mktempdir [string] 554a966c04fSmrg# Make a temporary directory that won't clash with other running 555a966c04fSmrg# libtool processes, and avoids race conditions if possible. If 556a966c04fSmrg# given, STRING is the basename for that directory. 557a966c04fSmrgfunc_mktempdir () 558a966c04fSmrg{ 559a966c04fSmrg my_template="${TMPDIR-/tmp}/${1-$progname}" 560a966c04fSmrg 5616e7d3316Smrg if test "$opt_dry_run" = ":"; then 562a966c04fSmrg # Return a directory name, but don't create it in dry-run mode 563a966c04fSmrg my_tmpdir="${my_template}-$$" 564a966c04fSmrg else 565a966c04fSmrg 566a966c04fSmrg # If mktemp works, use that first and foremost 567a966c04fSmrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 568a966c04fSmrg 569a966c04fSmrg if test ! -d "$my_tmpdir"; then 5706e7d3316Smrg # Failing that, at least try and use $RANDOM to avoid a race 5716e7d3316Smrg my_tmpdir="${my_template}-${RANDOM-0}$$" 572a966c04fSmrg 5736e7d3316Smrg save_mktempdir_umask=`umask` 5746e7d3316Smrg umask 0077 5756e7d3316Smrg $MKDIR "$my_tmpdir" 5766e7d3316Smrg umask $save_mktempdir_umask 577a966c04fSmrg fi 578a966c04fSmrg 579a966c04fSmrg # If we're not in dry-run mode, bomb out on failure 5806e7d3316Smrg test -d "$my_tmpdir" || \ 5816e7d3316Smrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 582a966c04fSmrg fi 583a966c04fSmrg 5846e7d3316Smrg $ECHO "$my_tmpdir" 585a966c04fSmrg} 586a966c04fSmrg 587a966c04fSmrg 5886e7d3316Smrg# func_quote_for_eval arg 5896e7d3316Smrg# Aesthetically quote ARG to be evaled later. 5906e7d3316Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 5916e7d3316Smrg# is double-quoted, suitable for a subsequent eval, whereas 5926e7d3316Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 5936e7d3316Smrg# which are still active within double quotes backslashified. 5946e7d3316Smrgfunc_quote_for_eval () 595a966c04fSmrg{ 5966e7d3316Smrg case $1 in 5976e7d3316Smrg *[\\\`\"\$]*) 5986e7d3316Smrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 5996e7d3316Smrg *) 6006e7d3316Smrg func_quote_for_eval_unquoted_result="$1" ;; 6016e7d3316Smrg esac 6026e7d3316Smrg 6036e7d3316Smrg case $func_quote_for_eval_unquoted_result in 6046e7d3316Smrg # Double-quote args containing shell metacharacters to delay 6056e7d3316Smrg # word splitting, command substitution and and variable 6066e7d3316Smrg # expansion for a subsequent eval. 6076e7d3316Smrg # Many Bourne shells cannot handle close brackets correctly 6086e7d3316Smrg # in scan sets, so we specify it separately. 6096e7d3316Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 6106e7d3316Smrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 6116e7d3316Smrg ;; 6126e7d3316Smrg *) 6136e7d3316Smrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 614a966c04fSmrg esac 615a966c04fSmrg} 616a966c04fSmrg 617a966c04fSmrg 6186e7d3316Smrg# func_quote_for_expand arg 6196e7d3316Smrg# Aesthetically quote ARG to be evaled later; same as above, 6206e7d3316Smrg# but do not quote variable references. 6216e7d3316Smrgfunc_quote_for_expand () 622a966c04fSmrg{ 6236e7d3316Smrg case $1 in 6246e7d3316Smrg *[\\\`\"]*) 6256e7d3316Smrg my_arg=`$ECHO "$1" | $SED \ 6266e7d3316Smrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 627a966c04fSmrg *) 6286e7d3316Smrg my_arg="$1" ;; 6296e7d3316Smrg esac 6306e7d3316Smrg 6316e7d3316Smrg case $my_arg in 6326e7d3316Smrg # Double-quote args containing shell metacharacters to delay 6336e7d3316Smrg # word splitting and command substitution for a subsequent eval. 6346e7d3316Smrg # Many Bourne shells cannot handle close brackets correctly 6356e7d3316Smrg # in scan sets, so we specify it separately. 6366e7d3316Smrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 6376e7d3316Smrg my_arg="\"$my_arg\"" 6386e7d3316Smrg ;; 6396e7d3316Smrg esac 6406e7d3316Smrg 6416e7d3316Smrg func_quote_for_expand_result="$my_arg" 642a966c04fSmrg} 643a966c04fSmrg 644a966c04fSmrg 6456e7d3316Smrg# func_show_eval cmd [fail_exp] 6466e7d3316Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 6476e7d3316Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 6486e7d3316Smrg# is given, then evaluate it. 6496e7d3316Smrgfunc_show_eval () 650a966c04fSmrg{ 6516e7d3316Smrg my_cmd="$1" 6526e7d3316Smrg my_fail_exp="${2-:}" 653a966c04fSmrg 6546e7d3316Smrg ${opt_silent-false} || { 6556e7d3316Smrg func_quote_for_expand "$my_cmd" 6566e7d3316Smrg eval "func_echo $func_quote_for_expand_result" 6576e7d3316Smrg } 6586e7d3316Smrg 6596e7d3316Smrg if ${opt_dry_run-false}; then :; else 6606e7d3316Smrg eval "$my_cmd" 6616e7d3316Smrg my_status=$? 6626e7d3316Smrg if test "$my_status" -eq 0; then :; else 6636e7d3316Smrg eval "(exit $my_status); $my_fail_exp" 6646e7d3316Smrg fi 665a966c04fSmrg fi 666a966c04fSmrg} 667a966c04fSmrg 6686e7d3316Smrg 6696e7d3316Smrg# func_show_eval_locale cmd [fail_exp] 6706e7d3316Smrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 6716e7d3316Smrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 6726e7d3316Smrg# is given, then evaluate it. Use the saved locale for evaluation. 6736e7d3316Smrgfunc_show_eval_locale () 674a966c04fSmrg{ 6756e7d3316Smrg my_cmd="$1" 6766e7d3316Smrg my_fail_exp="${2-:}" 677a966c04fSmrg 6786e7d3316Smrg ${opt_silent-false} || { 6796e7d3316Smrg func_quote_for_expand "$my_cmd" 6806e7d3316Smrg eval "func_echo $func_quote_for_expand_result" 6816e7d3316Smrg } 682a966c04fSmrg 6836e7d3316Smrg if ${opt_dry_run-false}; then :; else 6846e7d3316Smrg eval "$lt_user_locale 6856e7d3316Smrg $my_cmd" 6866e7d3316Smrg my_status=$? 6876e7d3316Smrg eval "$lt_safe_locale" 6886e7d3316Smrg if test "$my_status" -eq 0; then :; else 6896e7d3316Smrg eval "(exit $my_status); $my_fail_exp" 690a966c04fSmrg fi 6916e7d3316Smrg fi 692a966c04fSmrg} 693a966c04fSmrg 69497cf2ee2Smrg# func_tr_sh 69597cf2ee2Smrg# Turn $1 into a string suitable for a shell variable name. 69697cf2ee2Smrg# Result is stored in $func_tr_sh_result. All characters 69797cf2ee2Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 69897cf2ee2Smrg# if $1 begins with a digit, a '_' is prepended as well. 69997cf2ee2Smrgfunc_tr_sh () 70097cf2ee2Smrg{ 70197cf2ee2Smrg case $1 in 70297cf2ee2Smrg [0-9]* | *[!a-zA-Z0-9_]*) 70397cf2ee2Smrg func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 70497cf2ee2Smrg ;; 70597cf2ee2Smrg * ) 70697cf2ee2Smrg func_tr_sh_result=$1 70797cf2ee2Smrg ;; 70897cf2ee2Smrg esac 70997cf2ee2Smrg} 71097cf2ee2Smrg 711a966c04fSmrg 7126e7d3316Smrg# func_version 7136e7d3316Smrg# Echo version message to standard output and exit. 7146e7d3316Smrgfunc_version () 7156e7d3316Smrg{ 71697cf2ee2Smrg $opt_debug 71797cf2ee2Smrg 7186e7d3316Smrg $SED -n '/(C)/!b go 7196e7d3316Smrg :more 7206e7d3316Smrg /\./!{ 7216e7d3316Smrg N 7226e7d3316Smrg s/\n# / / 7236e7d3316Smrg b more 7246e7d3316Smrg } 7256e7d3316Smrg :go 7266e7d3316Smrg /^# '$PROGRAM' (GNU /,/# warranty; / { 7276e7d3316Smrg s/^# // 7286e7d3316Smrg s/^# *$// 7296e7d3316Smrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 7306e7d3316Smrg p 7316e7d3316Smrg }' < "$progpath" 7326e7d3316Smrg exit $? 7336e7d3316Smrg} 734a966c04fSmrg 7356e7d3316Smrg# func_usage 7366e7d3316Smrg# Echo short help message to standard output and exit. 7376e7d3316Smrgfunc_usage () 7386e7d3316Smrg{ 73997cf2ee2Smrg $opt_debug 74097cf2ee2Smrg 7416e7d3316Smrg $SED -n '/^# Usage:/,/^# *.*--help/ { 7426e7d3316Smrg s/^# // 7436e7d3316Smrg s/^# *$// 7446e7d3316Smrg s/\$progname/'$progname'/ 7456e7d3316Smrg p 7466e7d3316Smrg }' < "$progpath" 7476e7d3316Smrg echo 7486e7d3316Smrg $ECHO "run \`$progname --help | more' for full usage" 7496e7d3316Smrg exit $? 7506e7d3316Smrg} 751a966c04fSmrg 7526e7d3316Smrg# func_help [NOEXIT] 7536e7d3316Smrg# Echo long help message to standard output and exit, 7546e7d3316Smrg# unless 'noexit' is passed as argument. 7556e7d3316Smrgfunc_help () 7566e7d3316Smrg{ 75797cf2ee2Smrg $opt_debug 75897cf2ee2Smrg 7596e7d3316Smrg $SED -n '/^# Usage:/,/# Report bugs to/ { 76097cf2ee2Smrg :print 7616e7d3316Smrg s/^# // 7626e7d3316Smrg s/^# *$// 7636e7d3316Smrg s*\$progname*'$progname'* 7646e7d3316Smrg s*\$host*'"$host"'* 7656e7d3316Smrg s*\$SHELL*'"$SHELL"'* 7666e7d3316Smrg s*\$LTCC*'"$LTCC"'* 7676e7d3316Smrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 7686e7d3316Smrg s*\$LD*'"$LD"'* 7696e7d3316Smrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 770ac92798bSmrg s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ 771ac92798bSmrg s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ 7726e7d3316Smrg p 77397cf2ee2Smrg d 77497cf2ee2Smrg } 77597cf2ee2Smrg /^# .* home page:/b print 77697cf2ee2Smrg /^# General help using/b print 77797cf2ee2Smrg ' < "$progpath" 7786e7d3316Smrg ret=$? 7796e7d3316Smrg if test -z "$1"; then 7806e7d3316Smrg exit $ret 7816e7d3316Smrg fi 7826e7d3316Smrg} 783a966c04fSmrg 7846e7d3316Smrg# func_missing_arg argname 7856e7d3316Smrg# Echo program name prefixed message to standard error and set global 7866e7d3316Smrg# exit_cmd. 7876e7d3316Smrgfunc_missing_arg () 7886e7d3316Smrg{ 78997cf2ee2Smrg $opt_debug 79097cf2ee2Smrg 7916e7d3316Smrg func_error "missing argument for $1." 7926e7d3316Smrg exit_cmd=exit 7936e7d3316Smrg} 794a966c04fSmrg 795a966c04fSmrg 79697cf2ee2Smrg# func_split_short_opt shortopt 79797cf2ee2Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 79897cf2ee2Smrg# variables after splitting SHORTOPT after the 2nd character. 79997cf2ee2Smrgfunc_split_short_opt () 80097cf2ee2Smrg{ 80197cf2ee2Smrg my_sed_short_opt='1s/^\(..\).*$/\1/;q' 80297cf2ee2Smrg my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 80397cf2ee2Smrg 80497cf2ee2Smrg func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 80597cf2ee2Smrg func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 80697cf2ee2Smrg} # func_split_short_opt may be replaced by extended shell implementation 80797cf2ee2Smrg 80897cf2ee2Smrg 80997cf2ee2Smrg# func_split_long_opt longopt 81097cf2ee2Smrg# Set func_split_long_opt_name and func_split_long_opt_arg shell 81197cf2ee2Smrg# variables after splitting LONGOPT at the `=' sign. 81297cf2ee2Smrgfunc_split_long_opt () 81397cf2ee2Smrg{ 81497cf2ee2Smrg my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 81597cf2ee2Smrg my_sed_long_arg='1s/^--[^=]*=//' 81697cf2ee2Smrg 81797cf2ee2Smrg func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 81897cf2ee2Smrg func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 81997cf2ee2Smrg} # func_split_long_opt may be replaced by extended shell implementation 82097cf2ee2Smrg 82197cf2ee2Smrgexit_cmd=: 822a966c04fSmrg 823a966c04fSmrg 8242e2dd055Smrg 825a966c04fSmrg 8266e7d3316Smrg 8276e7d3316Smrgmagic="%%%MAGIC variable%%%" 8286e7d3316Smrgmagic_exe="%%%MAGIC EXE variable%%%" 8296e7d3316Smrg 8306e7d3316Smrg# Global variables. 8316e7d3316Smrgnonopt= 8326e7d3316Smrgpreserve_args= 8336e7d3316Smrglo2o="s/\\.lo\$/.${objext}/" 8346e7d3316Smrgo2lo="s/\\.${objext}\$/.lo/" 8356e7d3316Smrgextracted_archives= 8366e7d3316Smrgextracted_serial=0 8376e7d3316Smrg 8386e7d3316Smrg# If this variable is set in any of the actions, the command in it 8396e7d3316Smrg# will be execed at the end. This prevents here-documents from being 8406e7d3316Smrg# left over by shells. 8416e7d3316Smrgexec_cmd= 8426e7d3316Smrg 84397cf2ee2Smrg# func_append var value 84497cf2ee2Smrg# Append VALUE to the end of shell variable VAR. 84597cf2ee2Smrgfunc_append () 84697cf2ee2Smrg{ 84797cf2ee2Smrg eval "${1}=\$${1}\${2}" 84897cf2ee2Smrg} # func_append may be replaced by extended shell implementation 84997cf2ee2Smrg 85097cf2ee2Smrg# func_append_quoted var value 85197cf2ee2Smrg# Quote VALUE and append to the end of shell variable VAR, separated 85297cf2ee2Smrg# by a space. 85397cf2ee2Smrgfunc_append_quoted () 85497cf2ee2Smrg{ 85597cf2ee2Smrg func_quote_for_eval "${2}" 85697cf2ee2Smrg eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 85797cf2ee2Smrg} # func_append_quoted may be replaced by extended shell implementation 85897cf2ee2Smrg 85997cf2ee2Smrg 86097cf2ee2Smrg# func_arith arithmetic-term... 86197cf2ee2Smrgfunc_arith () 86297cf2ee2Smrg{ 86397cf2ee2Smrg func_arith_result=`expr "${@}"` 86497cf2ee2Smrg} # func_arith may be replaced by extended shell implementation 86597cf2ee2Smrg 86697cf2ee2Smrg 86797cf2ee2Smrg# func_len string 86897cf2ee2Smrg# STRING may not start with a hyphen. 86997cf2ee2Smrgfunc_len () 87097cf2ee2Smrg{ 87197cf2ee2Smrg func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 87297cf2ee2Smrg} # func_len may be replaced by extended shell implementation 87397cf2ee2Smrg 87497cf2ee2Smrg 87597cf2ee2Smrg# func_lo2o object 87697cf2ee2Smrgfunc_lo2o () 87797cf2ee2Smrg{ 87897cf2ee2Smrg func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 87997cf2ee2Smrg} # func_lo2o may be replaced by extended shell implementation 88097cf2ee2Smrg 88197cf2ee2Smrg 88297cf2ee2Smrg# func_xform libobj-or-source 88397cf2ee2Smrgfunc_xform () 88497cf2ee2Smrg{ 88597cf2ee2Smrg func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 88697cf2ee2Smrg} # func_xform may be replaced by extended shell implementation 88797cf2ee2Smrg 88897cf2ee2Smrg 8896e7d3316Smrg# func_fatal_configuration arg... 8906e7d3316Smrg# Echo program name prefixed message to standard error, followed by 8916e7d3316Smrg# a configuration failure hint, and exit. 8926e7d3316Smrgfunc_fatal_configuration () 8936e7d3316Smrg{ 8946e7d3316Smrg func_error ${1+"$@"} 8956e7d3316Smrg func_error "See the $PACKAGE documentation for more information." 8966e7d3316Smrg func_fatal_error "Fatal configuration error." 8976e7d3316Smrg} 8986e7d3316Smrg 8996e7d3316Smrg 9006e7d3316Smrg# func_config 9016e7d3316Smrg# Display the configuration for all the tags in this script. 9026e7d3316Smrgfunc_config () 9036e7d3316Smrg{ 9046e7d3316Smrg re_begincf='^# ### BEGIN LIBTOOL' 9056e7d3316Smrg re_endcf='^# ### END LIBTOOL' 9066e7d3316Smrg 9076e7d3316Smrg # Default configuration. 9086e7d3316Smrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 9096e7d3316Smrg 910a966c04fSmrg # Now print the configurations for the tags. 911a966c04fSmrg for tagname in $taglist; do 9126e7d3316Smrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 913a966c04fSmrg done 914a966c04fSmrg 9156e7d3316Smrg exit $? 9166e7d3316Smrg} 917a966c04fSmrg 9186e7d3316Smrg# func_features 9196e7d3316Smrg# Display the features supported by this script. 9206e7d3316Smrgfunc_features () 9216e7d3316Smrg{ 9226e7d3316Smrg echo "host: $host" 923a966c04fSmrg if test "$build_libtool_libs" = yes; then 9246e7d3316Smrg echo "enable shared libraries" 925a966c04fSmrg else 9266e7d3316Smrg echo "disable shared libraries" 927a966c04fSmrg fi 928a966c04fSmrg if test "$build_old_libs" = yes; then 9296e7d3316Smrg echo "enable static libraries" 930a966c04fSmrg else 9316e7d3316Smrg echo "disable static libraries" 932a966c04fSmrg fi 9336e7d3316Smrg 934a966c04fSmrg exit $? 9356e7d3316Smrg} 936a966c04fSmrg 9376e7d3316Smrg# func_enable_tag tagname 9386e7d3316Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or 9396e7d3316Smrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 9406e7d3316Smrg# variable here. 9416e7d3316Smrgfunc_enable_tag () 9426e7d3316Smrg{ 9436e7d3316Smrg # Global variable: 9446e7d3316Smrg tagname="$1" 945a966c04fSmrg 9466e7d3316Smrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 9476e7d3316Smrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 9486e7d3316Smrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 949a966c04fSmrg 9506e7d3316Smrg # Validate tagname. 9516e7d3316Smrg case $tagname in 9526e7d3316Smrg *[!-_A-Za-z0-9,/]*) 9536e7d3316Smrg func_fatal_error "invalid tag name: $tagname" 9546e7d3316Smrg ;; 9556e7d3316Smrg esac 956a966c04fSmrg 9576e7d3316Smrg # Don't test for the "default" C tag, as we know it's 9586e7d3316Smrg # there but not specially marked. 9596e7d3316Smrg case $tagname in 9606e7d3316Smrg CC) ;; 9616e7d3316Smrg *) 9626e7d3316Smrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 9636e7d3316Smrg taglist="$taglist $tagname" 9646e7d3316Smrg 9656e7d3316Smrg # Evaluate the configuration. Be careful to quote the path 9666e7d3316Smrg # and the sed script, to avoid splitting on whitespace, but 9676e7d3316Smrg # also don't use non-portable quotes within backquotes within 9686e7d3316Smrg # quotes we have to do it in 2 steps: 9696e7d3316Smrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 9706e7d3316Smrg eval "$extractedcf" 9716e7d3316Smrg else 9726e7d3316Smrg func_error "ignoring unknown tag $tagname" 9736e7d3316Smrg fi 9746e7d3316Smrg ;; 9756e7d3316Smrg esac 9766e7d3316Smrg} 9776e7d3316Smrg 97897cf2ee2Smrg# func_check_version_match 97997cf2ee2Smrg# Ensure that we are using m4 macros, and libtool script from the same 98097cf2ee2Smrg# release of libtool. 98197cf2ee2Smrgfunc_check_version_match () 9826e7d3316Smrg{ 98397cf2ee2Smrg if test "$package_revision" != "$macro_revision"; then 98497cf2ee2Smrg if test "$VERSION" != "$macro_version"; then 98597cf2ee2Smrg if test -z "$macro_version"; then 98697cf2ee2Smrg cat >&2 <<_LT_EOF 98797cf2ee2Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 98897cf2ee2Smrg$progname: definition of this LT_INIT comes from an older release. 98997cf2ee2Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 99097cf2ee2Smrg$progname: and run autoconf again. 99197cf2ee2Smrg_LT_EOF 99297cf2ee2Smrg else 99397cf2ee2Smrg cat >&2 <<_LT_EOF 99497cf2ee2Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 99597cf2ee2Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 99697cf2ee2Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 99797cf2ee2Smrg$progname: and run autoconf again. 99897cf2ee2Smrg_LT_EOF 99997cf2ee2Smrg fi 100097cf2ee2Smrg else 100197cf2ee2Smrg cat >&2 <<_LT_EOF 100297cf2ee2Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 100397cf2ee2Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 100497cf2ee2Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 100597cf2ee2Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 100697cf2ee2Smrg_LT_EOF 100797cf2ee2Smrg fi 1008a966c04fSmrg 100997cf2ee2Smrg exit $EXIT_MISMATCH 101097cf2ee2Smrg fi 101197cf2ee2Smrg} 101297cf2ee2Smrg 101397cf2ee2Smrg 101497cf2ee2Smrg# Shorthand for --mode=foo, only valid as the first argument 101597cf2ee2Smrgcase $1 in 101697cf2ee2Smrgclean|clea|cle|cl) 101797cf2ee2Smrg shift; set dummy --mode clean ${1+"$@"}; shift 101897cf2ee2Smrg ;; 101997cf2ee2Smrgcompile|compil|compi|comp|com|co|c) 102097cf2ee2Smrg shift; set dummy --mode compile ${1+"$@"}; shift 102197cf2ee2Smrg ;; 102297cf2ee2Smrgexecute|execut|execu|exec|exe|ex|e) 102397cf2ee2Smrg shift; set dummy --mode execute ${1+"$@"}; shift 102497cf2ee2Smrg ;; 102597cf2ee2Smrgfinish|finis|fini|fin|fi|f) 102697cf2ee2Smrg shift; set dummy --mode finish ${1+"$@"}; shift 102797cf2ee2Smrg ;; 102897cf2ee2Smrginstall|instal|insta|inst|ins|in|i) 102997cf2ee2Smrg shift; set dummy --mode install ${1+"$@"}; shift 103097cf2ee2Smrg ;; 103197cf2ee2Smrglink|lin|li|l) 103297cf2ee2Smrg shift; set dummy --mode link ${1+"$@"}; shift 103397cf2ee2Smrg ;; 103497cf2ee2Smrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 103597cf2ee2Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 103697cf2ee2Smrg ;; 103797cf2ee2Smrgesac 1038a966c04fSmrg 103997cf2ee2Smrg 104097cf2ee2Smrg 104197cf2ee2Smrg# Option defaults: 104297cf2ee2Smrgopt_debug=: 104397cf2ee2Smrgopt_dry_run=false 104497cf2ee2Smrgopt_config=false 104597cf2ee2Smrgopt_preserve_dup_deps=false 104697cf2ee2Smrgopt_features=false 104797cf2ee2Smrgopt_finish=false 104897cf2ee2Smrgopt_help=false 104997cf2ee2Smrgopt_help_all=false 105097cf2ee2Smrgopt_silent=: 1051ac92798bSmrgopt_warning=: 105297cf2ee2Smrgopt_verbose=: 105397cf2ee2Smrgopt_silent=false 105497cf2ee2Smrgopt_verbose=false 105597cf2ee2Smrg 105697cf2ee2Smrg 105797cf2ee2Smrg# Parse options once, thoroughly. This comes as soon as possible in the 105897cf2ee2Smrg# script to make things like `--version' happen as quickly as we can. 105997cf2ee2Smrg{ 106097cf2ee2Smrg # this just eases exit handling 106197cf2ee2Smrg while test $# -gt 0; do 10626e7d3316Smrg opt="$1" 10636e7d3316Smrg shift 10646e7d3316Smrg case $opt in 106597cf2ee2Smrg --debug|-x) opt_debug='set -x' 10666e7d3316Smrg func_echo "enabling shell trace mode" 10676e7d3316Smrg $opt_debug 10686e7d3316Smrg ;; 106997cf2ee2Smrg --dry-run|--dryrun|-n) 107097cf2ee2Smrg opt_dry_run=: 10716e7d3316Smrg ;; 107297cf2ee2Smrg --config) 107397cf2ee2Smrg opt_config=: 107497cf2ee2Smrgfunc_config 107597cf2ee2Smrg ;; 107697cf2ee2Smrg --dlopen|-dlopen) 107797cf2ee2Smrg optarg="$1" 107897cf2ee2Smrg opt_dlopen="${opt_dlopen+$opt_dlopen 107997cf2ee2Smrg}$optarg" 10806e7d3316Smrg shift 10816e7d3316Smrg ;; 10826e7d3316Smrg --preserve-dup-deps) 108397cf2ee2Smrg opt_preserve_dup_deps=: 10846e7d3316Smrg ;; 108597cf2ee2Smrg --features) 108697cf2ee2Smrg opt_features=: 108797cf2ee2Smrgfunc_features 10886e7d3316Smrg ;; 108997cf2ee2Smrg --finish) 109097cf2ee2Smrg opt_finish=: 109197cf2ee2Smrgset dummy --mode finish ${1+"$@"}; shift 109297cf2ee2Smrg ;; 109397cf2ee2Smrg --help) 109497cf2ee2Smrg opt_help=: 109597cf2ee2Smrg ;; 109697cf2ee2Smrg --help-all) 109797cf2ee2Smrg opt_help_all=: 109897cf2ee2Smrgopt_help=': help-all' 109997cf2ee2Smrg ;; 110097cf2ee2Smrg --mode) 110197cf2ee2Smrg test $# = 0 && func_missing_arg $opt && break 110297cf2ee2Smrg optarg="$1" 110397cf2ee2Smrg opt_mode="$optarg" 110497cf2ee2Smrgcase $optarg in 110597cf2ee2Smrg # Valid mode arguments: 110697cf2ee2Smrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 110797cf2ee2Smrg 110897cf2ee2Smrg # Catch anything else as an error 110997cf2ee2Smrg *) func_error "invalid argument for $opt" 111097cf2ee2Smrg exit_cmd=exit 111197cf2ee2Smrg break 111297cf2ee2Smrg ;; 111397cf2ee2Smrgesac 111497cf2ee2Smrg shift 111597cf2ee2Smrg ;; 111697cf2ee2Smrg --no-silent|--no-quiet) 11176e7d3316Smrg opt_silent=false 1118ac92798bSmrgfunc_append preserve_args " $opt" 1119ac92798bSmrg ;; 1120ac92798bSmrg --no-warning|--no-warn) 1121ac92798bSmrg opt_warning=false 112297cf2ee2Smrgfunc_append preserve_args " $opt" 11236e7d3316Smrg ;; 112497cf2ee2Smrg --no-verbose) 11256e7d3316Smrg opt_verbose=false 112697cf2ee2Smrgfunc_append preserve_args " $opt" 11276e7d3316Smrg ;; 112897cf2ee2Smrg --silent|--quiet) 112997cf2ee2Smrg opt_silent=: 113097cf2ee2Smrgfunc_append preserve_args " $opt" 113197cf2ee2Smrg opt_verbose=false 113297cf2ee2Smrg ;; 113397cf2ee2Smrg --verbose|-v) 113497cf2ee2Smrg opt_verbose=: 113597cf2ee2Smrgfunc_append preserve_args " $opt" 113697cf2ee2Smrgopt_silent=false 113797cf2ee2Smrg ;; 113897cf2ee2Smrg --tag) 113997cf2ee2Smrg test $# = 0 && func_missing_arg $opt && break 114097cf2ee2Smrg optarg="$1" 114197cf2ee2Smrg opt_tag="$optarg" 114297cf2ee2Smrgfunc_append preserve_args " $opt $optarg" 114397cf2ee2Smrgfunc_enable_tag "$optarg" 11446e7d3316Smrg shift 11456e7d3316Smrg ;; 11466e7d3316Smrg 114797cf2ee2Smrg -\?|-h) func_usage ;; 114897cf2ee2Smrg --help) func_help ;; 114997cf2ee2Smrg --version) func_version ;; 115097cf2ee2Smrg 11516e7d3316Smrg # Separate optargs to long options: 115297cf2ee2Smrg --*=*) 115397cf2ee2Smrg func_split_long_opt "$opt" 115497cf2ee2Smrg set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 11556e7d3316Smrg shift 11566e7d3316Smrg ;; 11576e7d3316Smrg 115897cf2ee2Smrg # Separate non-argument short options: 115997cf2ee2Smrg -\?*|-h*|-n*|-v*) 116097cf2ee2Smrg func_split_short_opt "$opt" 116197cf2ee2Smrg set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 116297cf2ee2Smrg shift 11636e7d3316Smrg ;; 116497cf2ee2Smrg 116597cf2ee2Smrg --) break ;; 116697cf2ee2Smrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 116797cf2ee2Smrg *) set dummy "$opt" ${1+"$@"}; shift; break ;; 11686e7d3316Smrg esac 11696e7d3316Smrg done 11706e7d3316Smrg 117197cf2ee2Smrg # Validate options: 117297cf2ee2Smrg 117397cf2ee2Smrg # save first non-option argument 117497cf2ee2Smrg if test "$#" -gt 0; then 117597cf2ee2Smrg nonopt="$opt" 117697cf2ee2Smrg shift 117797cf2ee2Smrg fi 117897cf2ee2Smrg 117997cf2ee2Smrg # preserve --debug 118097cf2ee2Smrg test "$opt_debug" = : || func_append preserve_args " --debug" 11816e7d3316Smrg 11826e7d3316Smrg case $host in 11836e7d3316Smrg *cygwin* | *mingw* | *pw32* | *cegcc*) 11846e7d3316Smrg # don't eliminate duplications in $postdeps and $predeps 11856e7d3316Smrg opt_duplicate_compiler_generated_deps=: 1186a966c04fSmrg ;; 1187a966c04fSmrg *) 118897cf2ee2Smrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 11896e7d3316Smrg ;; 11906e7d3316Smrg esac 1191a966c04fSmrg 119297cf2ee2Smrg $opt_help || { 119397cf2ee2Smrg # Sanity checks first: 119497cf2ee2Smrg func_check_version_match 11956e7d3316Smrg 119697cf2ee2Smrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 119797cf2ee2Smrg func_fatal_configuration "not configured to build any kind of library" 11986e7d3316Smrg fi 11996e7d3316Smrg 120097cf2ee2Smrg # Darwin sucks 120197cf2ee2Smrg eval std_shrext=\"$shrext_cmds\" 12026e7d3316Smrg 120397cf2ee2Smrg # Only execute mode is allowed to have -dlopen flags. 120497cf2ee2Smrg if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 120597cf2ee2Smrg func_error "unrecognized option \`-dlopen'" 120697cf2ee2Smrg $ECHO "$help" 1>&2 120797cf2ee2Smrg exit $EXIT_FAILURE 120897cf2ee2Smrg fi 12096e7d3316Smrg 121097cf2ee2Smrg # Change the help message to a mode-specific one. 121197cf2ee2Smrg generic_help="$help" 121297cf2ee2Smrg help="Try \`$progname --help --mode=$opt_mode' for more information." 121397cf2ee2Smrg } 12146e7d3316Smrg 12156e7d3316Smrg 121697cf2ee2Smrg # Bail if the options were screwed 121797cf2ee2Smrg $exit_cmd $EXIT_FAILURE 121897cf2ee2Smrg} 12196e7d3316Smrg 12206e7d3316Smrg 1221a966c04fSmrg 1222a966c04fSmrg 122397cf2ee2Smrg## ----------- ## 122497cf2ee2Smrg## Main. ## 122597cf2ee2Smrg## ----------- ## 1226a966c04fSmrg 12276e7d3316Smrg# func_lalib_p file 12286e7d3316Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 12296e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out 12306e7d3316Smrg# determined imposters. 12316e7d3316Smrgfunc_lalib_p () 12326e7d3316Smrg{ 12336e7d3316Smrg test -f "$1" && 12346e7d3316Smrg $SED -e 4q "$1" 2>/dev/null \ 12356e7d3316Smrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 12366e7d3316Smrg} 1237a966c04fSmrg 12386e7d3316Smrg# func_lalib_unsafe_p file 12396e7d3316Smrg# True iff FILE is a libtool `.la' library or `.lo' object file. 12406e7d3316Smrg# This function implements the same check as func_lalib_p without 12416e7d3316Smrg# resorting to external programs. To this end, it redirects stdin and 12426e7d3316Smrg# closes it afterwards, without saving the original file descriptor. 12436e7d3316Smrg# As a safety measure, use it only where a negative result would be 12446e7d3316Smrg# fatal anyway. Works if `file' does not exist. 12456e7d3316Smrgfunc_lalib_unsafe_p () 12466e7d3316Smrg{ 12476e7d3316Smrg lalib_p=no 12486e7d3316Smrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 12496e7d3316Smrg for lalib_p_l in 1 2 3 4 12506e7d3316Smrg do 12516e7d3316Smrg read lalib_p_line 12526e7d3316Smrg case "$lalib_p_line" in 12536e7d3316Smrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 12546e7d3316Smrg esac 12556e7d3316Smrg done 12566e7d3316Smrg exec 0<&5 5<&- 12576e7d3316Smrg fi 12586e7d3316Smrg test "$lalib_p" = yes 12596e7d3316Smrg} 1260a966c04fSmrg 12616e7d3316Smrg# func_ltwrapper_script_p file 12626e7d3316Smrg# True iff FILE is a libtool wrapper script 12636e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out 12646e7d3316Smrg# determined imposters. 12656e7d3316Smrgfunc_ltwrapper_script_p () 12666e7d3316Smrg{ 12676e7d3316Smrg func_lalib_p "$1" 12686e7d3316Smrg} 1269a966c04fSmrg 12706e7d3316Smrg# func_ltwrapper_executable_p file 12716e7d3316Smrg# True iff FILE is a libtool wrapper executable 12726e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out 12736e7d3316Smrg# determined imposters. 12746e7d3316Smrgfunc_ltwrapper_executable_p () 12756e7d3316Smrg{ 12766e7d3316Smrg func_ltwrapper_exec_suffix= 12776e7d3316Smrg case $1 in 12786e7d3316Smrg *.exe) ;; 12796e7d3316Smrg *) func_ltwrapper_exec_suffix=.exe ;; 12806e7d3316Smrg esac 12816e7d3316Smrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 12826e7d3316Smrg} 12836e7d3316Smrg 12846e7d3316Smrg# func_ltwrapper_scriptname file 12856e7d3316Smrg# Assumes file is an ltwrapper_executable 12866e7d3316Smrg# uses $file to determine the appropriate filename for a 12876e7d3316Smrg# temporary ltwrapper_script. 12886e7d3316Smrgfunc_ltwrapper_scriptname () 12896e7d3316Smrg{ 129097cf2ee2Smrg func_dirname_and_basename "$1" "" "." 129197cf2ee2Smrg func_stripname '' '.exe' "$func_basename_result" 129297cf2ee2Smrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 12936e7d3316Smrg} 12946e7d3316Smrg 12956e7d3316Smrg# func_ltwrapper_p file 12966e7d3316Smrg# True iff FILE is a libtool wrapper script or wrapper executable 12976e7d3316Smrg# This function is only a basic sanity check; it will hardly flush out 12986e7d3316Smrg# determined imposters. 12996e7d3316Smrgfunc_ltwrapper_p () 13006e7d3316Smrg{ 13016e7d3316Smrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 13026e7d3316Smrg} 13036e7d3316Smrg 13046e7d3316Smrg 13056e7d3316Smrg# func_execute_cmds commands fail_cmd 13066e7d3316Smrg# Execute tilde-delimited COMMANDS. 13076e7d3316Smrg# If FAIL_CMD is given, eval that upon failure. 13086e7d3316Smrg# FAIL_CMD may read-access the current command in variable CMD! 13096e7d3316Smrgfunc_execute_cmds () 13106e7d3316Smrg{ 13116e7d3316Smrg $opt_debug 13126e7d3316Smrg save_ifs=$IFS; IFS='~' 13136e7d3316Smrg for cmd in $1; do 13146e7d3316Smrg IFS=$save_ifs 13156e7d3316Smrg eval cmd=\"$cmd\" 13166e7d3316Smrg func_show_eval "$cmd" "${2-:}" 13176e7d3316Smrg done 13186e7d3316Smrg IFS=$save_ifs 13196e7d3316Smrg} 13206e7d3316Smrg 13216e7d3316Smrg 13226e7d3316Smrg# func_source file 13236e7d3316Smrg# Source FILE, adding directory component if necessary. 13246e7d3316Smrg# Note that it is not necessary on cygwin/mingw to append a dot to 13256e7d3316Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 13266e7d3316Smrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 13276e7d3316Smrg# `FILE.' does not work on cygwin managed mounts. 13286e7d3316Smrgfunc_source () 13296e7d3316Smrg{ 13306e7d3316Smrg $opt_debug 13316e7d3316Smrg case $1 in 13326e7d3316Smrg */* | *\\*) . "$1" ;; 13336e7d3316Smrg *) . "./$1" ;; 13346e7d3316Smrg esac 13356e7d3316Smrg} 13366e7d3316Smrg 13376e7d3316Smrg 133897cf2ee2Smrg# func_resolve_sysroot PATH 133997cf2ee2Smrg# Replace a leading = in PATH with a sysroot. Store the result into 134097cf2ee2Smrg# func_resolve_sysroot_result 134197cf2ee2Smrgfunc_resolve_sysroot () 134297cf2ee2Smrg{ 134397cf2ee2Smrg func_resolve_sysroot_result=$1 134497cf2ee2Smrg case $func_resolve_sysroot_result in 134597cf2ee2Smrg =*) 134697cf2ee2Smrg func_stripname '=' '' "$func_resolve_sysroot_result" 134797cf2ee2Smrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 134897cf2ee2Smrg ;; 134997cf2ee2Smrg esac 135097cf2ee2Smrg} 135197cf2ee2Smrg 135297cf2ee2Smrg# func_replace_sysroot PATH 135397cf2ee2Smrg# If PATH begins with the sysroot, replace it with = and 135497cf2ee2Smrg# store the result into func_replace_sysroot_result. 135597cf2ee2Smrgfunc_replace_sysroot () 135697cf2ee2Smrg{ 135797cf2ee2Smrg case "$lt_sysroot:$1" in 135897cf2ee2Smrg ?*:"$lt_sysroot"*) 135997cf2ee2Smrg func_stripname "$lt_sysroot" '' "$1" 136097cf2ee2Smrg func_replace_sysroot_result="=$func_stripname_result" 136197cf2ee2Smrg ;; 136297cf2ee2Smrg *) 136397cf2ee2Smrg # Including no sysroot. 136497cf2ee2Smrg func_replace_sysroot_result=$1 136597cf2ee2Smrg ;; 136697cf2ee2Smrg esac 136797cf2ee2Smrg} 136897cf2ee2Smrg 13696e7d3316Smrg# func_infer_tag arg 13706e7d3316Smrg# Infer tagged configuration to use if any are available and 13716e7d3316Smrg# if one wasn't chosen via the "--tag" command line option. 13726e7d3316Smrg# Only attempt this if the compiler in the base compile 13736e7d3316Smrg# command doesn't match the default compiler. 13746e7d3316Smrg# arg is usually of the form 'gcc ...' 13756e7d3316Smrgfunc_infer_tag () 13766e7d3316Smrg{ 13776e7d3316Smrg $opt_debug 13786e7d3316Smrg if test -n "$available_tags" && test -z "$tagname"; then 13796e7d3316Smrg CC_quoted= 13806e7d3316Smrg for arg in $CC; do 138197cf2ee2Smrg func_append_quoted CC_quoted "$arg" 13826e7d3316Smrg done 13836e7d3316Smrg CC_expanded=`func_echo_all $CC` 13846e7d3316Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 13856e7d3316Smrg case $@ in 13866e7d3316Smrg # Blanks in the command may have been stripped by the calling shell, 13876e7d3316Smrg # but not from the CC environment variable when configure was run. 13886e7d3316Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 13896e7d3316Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 13906e7d3316Smrg # Blanks at the start of $base_compile will cause this to fail 13916e7d3316Smrg # if we don't check for them as well. 13926e7d3316Smrg *) 13936e7d3316Smrg for z in $available_tags; do 13946e7d3316Smrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 13956e7d3316Smrg # Evaluate the configuration. 13966e7d3316Smrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 13976e7d3316Smrg CC_quoted= 13986e7d3316Smrg for arg in $CC; do 13996e7d3316Smrg # Double-quote args containing other shell metacharacters. 140097cf2ee2Smrg func_append_quoted CC_quoted "$arg" 14016e7d3316Smrg done 14026e7d3316Smrg CC_expanded=`func_echo_all $CC` 14036e7d3316Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 14046e7d3316Smrg case "$@ " in 14056e7d3316Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 14066e7d3316Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 14076e7d3316Smrg # The compiler in the base compile command matches 14086e7d3316Smrg # the one in the tagged configuration. 14096e7d3316Smrg # Assume this is the tagged configuration we want. 14106e7d3316Smrg tagname=$z 14116e7d3316Smrg break 14126e7d3316Smrg ;; 14136e7d3316Smrg esac 14146e7d3316Smrg fi 14156e7d3316Smrg done 14166e7d3316Smrg # If $tagname still isn't set, then no tagged configuration 14176e7d3316Smrg # was found and let the user know that the "--tag" command 14186e7d3316Smrg # line option must be used. 14196e7d3316Smrg if test -z "$tagname"; then 14206e7d3316Smrg func_echo "unable to infer tagged configuration" 14216e7d3316Smrg func_fatal_error "specify a tag with \`--tag'" 14226e7d3316Smrg# else 14236e7d3316Smrg# func_verbose "using $tagname tagged configuration" 14246e7d3316Smrg fi 14256e7d3316Smrg ;; 14266e7d3316Smrg esac 14276e7d3316Smrg fi 14286e7d3316Smrg} 14296e7d3316Smrg 14306e7d3316Smrg 14316e7d3316Smrg 143297cf2ee2Smrg# func_write_libtool_object output_name pic_name nonpic_name 143397cf2ee2Smrg# Create a libtool object file (analogous to a ".la" file), 143497cf2ee2Smrg# but don't create it if we're doing a dry run. 143597cf2ee2Smrgfunc_write_libtool_object () 143697cf2ee2Smrg{ 143797cf2ee2Smrg write_libobj=${1} 143897cf2ee2Smrg if test "$build_libtool_libs" = yes; then 143997cf2ee2Smrg write_lobj=\'${2}\' 144097cf2ee2Smrg else 144197cf2ee2Smrg write_lobj=none 144297cf2ee2Smrg fi 144397cf2ee2Smrg 144497cf2ee2Smrg if test "$build_old_libs" = yes; then 144597cf2ee2Smrg write_oldobj=\'${3}\' 144697cf2ee2Smrg else 144797cf2ee2Smrg write_oldobj=none 144897cf2ee2Smrg fi 144997cf2ee2Smrg 145097cf2ee2Smrg $opt_dry_run || { 145197cf2ee2Smrg cat >${write_libobj}T <<EOF 145297cf2ee2Smrg# $write_libobj - a libtool object file 145397cf2ee2Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 145497cf2ee2Smrg# 145597cf2ee2Smrg# Please DO NOT delete this file! 145697cf2ee2Smrg# It is necessary for linking the library. 145797cf2ee2Smrg 145897cf2ee2Smrg# Name of the PIC object. 145997cf2ee2Smrgpic_object=$write_lobj 146097cf2ee2Smrg 146197cf2ee2Smrg# Name of the non-PIC object 146297cf2ee2Smrgnon_pic_object=$write_oldobj 146397cf2ee2Smrg 146497cf2ee2SmrgEOF 146597cf2ee2Smrg $MV "${write_libobj}T" "${write_libobj}" 146697cf2ee2Smrg } 146797cf2ee2Smrg} 146897cf2ee2Smrg 146997cf2ee2Smrg 147097cf2ee2Smrg################################################## 147197cf2ee2Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 147297cf2ee2Smrg################################################## 147397cf2ee2Smrg 147497cf2ee2Smrg# func_convert_core_file_wine_to_w32 ARG 147597cf2ee2Smrg# Helper function used by file name conversion functions when $build is *nix, 147697cf2ee2Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 147797cf2ee2Smrg# correctly configured wine environment available, with the winepath program 147897cf2ee2Smrg# in $build's $PATH. 147997cf2ee2Smrg# 148097cf2ee2Smrg# ARG is the $build file name to be converted to w32 format. 148197cf2ee2Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 148297cf2ee2Smrg# be empty on error (or when ARG is empty) 148397cf2ee2Smrgfunc_convert_core_file_wine_to_w32 () 148497cf2ee2Smrg{ 148597cf2ee2Smrg $opt_debug 148697cf2ee2Smrg func_convert_core_file_wine_to_w32_result="$1" 148797cf2ee2Smrg if test -n "$1"; then 148897cf2ee2Smrg # Unfortunately, winepath does not exit with a non-zero error code, so we 148997cf2ee2Smrg # are forced to check the contents of stdout. On the other hand, if the 149097cf2ee2Smrg # command is not found, the shell will set an exit code of 127 and print 149197cf2ee2Smrg # *an error message* to stdout. So we must check for both error code of 149297cf2ee2Smrg # zero AND non-empty stdout, which explains the odd construction: 149397cf2ee2Smrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 149497cf2ee2Smrg if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 149597cf2ee2Smrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 149697cf2ee2Smrg $SED -e "$lt_sed_naive_backslashify"` 149797cf2ee2Smrg else 149897cf2ee2Smrg func_convert_core_file_wine_to_w32_result= 149997cf2ee2Smrg fi 150097cf2ee2Smrg fi 150197cf2ee2Smrg} 150297cf2ee2Smrg# end: func_convert_core_file_wine_to_w32 150397cf2ee2Smrg 150497cf2ee2Smrg 150597cf2ee2Smrg# func_convert_core_path_wine_to_w32 ARG 150697cf2ee2Smrg# Helper function used by path conversion functions when $build is *nix, and 150797cf2ee2Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 150897cf2ee2Smrg# configured wine environment available, with the winepath program in $build's 150997cf2ee2Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 151097cf2ee2Smrg# 151197cf2ee2Smrg# ARG is path to be converted from $build format to win32. 151297cf2ee2Smrg# Result is available in $func_convert_core_path_wine_to_w32_result. 151397cf2ee2Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 151497cf2ee2Smrg# are convertible, then the result may be empty. 151597cf2ee2Smrgfunc_convert_core_path_wine_to_w32 () 151697cf2ee2Smrg{ 151797cf2ee2Smrg $opt_debug 151897cf2ee2Smrg # unfortunately, winepath doesn't convert paths, only file names 151997cf2ee2Smrg func_convert_core_path_wine_to_w32_result="" 152097cf2ee2Smrg if test -n "$1"; then 152197cf2ee2Smrg oldIFS=$IFS 152297cf2ee2Smrg IFS=: 152397cf2ee2Smrg for func_convert_core_path_wine_to_w32_f in $1; do 152497cf2ee2Smrg IFS=$oldIFS 152597cf2ee2Smrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 152697cf2ee2Smrg if test -n "$func_convert_core_file_wine_to_w32_result" ; then 152797cf2ee2Smrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 152897cf2ee2Smrg func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 152997cf2ee2Smrg else 153097cf2ee2Smrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 153197cf2ee2Smrg fi 153297cf2ee2Smrg fi 153397cf2ee2Smrg done 153497cf2ee2Smrg IFS=$oldIFS 153597cf2ee2Smrg fi 153697cf2ee2Smrg} 153797cf2ee2Smrg# end: func_convert_core_path_wine_to_w32 153897cf2ee2Smrg 153997cf2ee2Smrg 154097cf2ee2Smrg# func_cygpath ARGS... 154197cf2ee2Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 154297cf2ee2Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 154397cf2ee2Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 154497cf2ee2Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 154597cf2ee2Smrg# file name or path is assumed to be in w32 format, as previously converted 154697cf2ee2Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 154797cf2ee2Smrg# or path in func_cygpath_result (input file name or path is assumed to be in 154897cf2ee2Smrg# Cygwin format). Returns an empty string on error. 154997cf2ee2Smrg# 155097cf2ee2Smrg# ARGS are passed to cygpath, with the last one being the file name or path to 155197cf2ee2Smrg# be converted. 155297cf2ee2Smrg# 155397cf2ee2Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 155497cf2ee2Smrg# environment variable; do not put it in $PATH. 155597cf2ee2Smrgfunc_cygpath () 155697cf2ee2Smrg{ 155797cf2ee2Smrg $opt_debug 155897cf2ee2Smrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 155997cf2ee2Smrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 156097cf2ee2Smrg if test "$?" -ne 0; then 156197cf2ee2Smrg # on failure, ensure result is empty 156297cf2ee2Smrg func_cygpath_result= 156397cf2ee2Smrg fi 156497cf2ee2Smrg else 156597cf2ee2Smrg func_cygpath_result= 156697cf2ee2Smrg func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 156797cf2ee2Smrg fi 156897cf2ee2Smrg} 156997cf2ee2Smrg#end: func_cygpath 157097cf2ee2Smrg 157197cf2ee2Smrg 157297cf2ee2Smrg# func_convert_core_msys_to_w32 ARG 157397cf2ee2Smrg# Convert file name or path ARG from MSYS format to w32 format. Return 157497cf2ee2Smrg# result in func_convert_core_msys_to_w32_result. 157597cf2ee2Smrgfunc_convert_core_msys_to_w32 () 157697cf2ee2Smrg{ 157797cf2ee2Smrg $opt_debug 157897cf2ee2Smrg # awkward: cmd appends spaces to result 157997cf2ee2Smrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 158097cf2ee2Smrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 158197cf2ee2Smrg} 158297cf2ee2Smrg#end: func_convert_core_msys_to_w32 158397cf2ee2Smrg 158497cf2ee2Smrg 158597cf2ee2Smrg# func_convert_file_check ARG1 ARG2 158697cf2ee2Smrg# Verify that ARG1 (a file name in $build format) was converted to $host 158797cf2ee2Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 158897cf2ee2Smrg# func_to_host_file_result to ARG1). 158997cf2ee2Smrgfunc_convert_file_check () 159097cf2ee2Smrg{ 159197cf2ee2Smrg $opt_debug 159297cf2ee2Smrg if test -z "$2" && test -n "$1" ; then 159397cf2ee2Smrg func_error "Could not determine host file name corresponding to" 159497cf2ee2Smrg func_error " \`$1'" 159597cf2ee2Smrg func_error "Continuing, but uninstalled executables may not work." 159697cf2ee2Smrg # Fallback: 159797cf2ee2Smrg func_to_host_file_result="$1" 159897cf2ee2Smrg fi 159997cf2ee2Smrg} 160097cf2ee2Smrg# end func_convert_file_check 160197cf2ee2Smrg 160297cf2ee2Smrg 160397cf2ee2Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 160497cf2ee2Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host 160597cf2ee2Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 160697cf2ee2Smrg# func_to_host_file_result to a simplistic fallback value (see below). 160797cf2ee2Smrgfunc_convert_path_check () 160897cf2ee2Smrg{ 160997cf2ee2Smrg $opt_debug 161097cf2ee2Smrg if test -z "$4" && test -n "$3"; then 161197cf2ee2Smrg func_error "Could not determine the host path corresponding to" 161297cf2ee2Smrg func_error " \`$3'" 161397cf2ee2Smrg func_error "Continuing, but uninstalled executables may not work." 161497cf2ee2Smrg # Fallback. This is a deliberately simplistic "conversion" and 161597cf2ee2Smrg # should not be "improved". See libtool.info. 161697cf2ee2Smrg if test "x$1" != "x$2"; then 161797cf2ee2Smrg lt_replace_pathsep_chars="s|$1|$2|g" 161897cf2ee2Smrg func_to_host_path_result=`echo "$3" | 161997cf2ee2Smrg $SED -e "$lt_replace_pathsep_chars"` 162097cf2ee2Smrg else 162197cf2ee2Smrg func_to_host_path_result="$3" 162297cf2ee2Smrg fi 162397cf2ee2Smrg fi 162497cf2ee2Smrg} 162597cf2ee2Smrg# end func_convert_path_check 162697cf2ee2Smrg 162797cf2ee2Smrg 162897cf2ee2Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 162997cf2ee2Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 163097cf2ee2Smrg# and appending REPL if ORIG matches BACKPAT. 163197cf2ee2Smrgfunc_convert_path_front_back_pathsep () 163297cf2ee2Smrg{ 163397cf2ee2Smrg $opt_debug 163497cf2ee2Smrg case $4 in 163597cf2ee2Smrg $1 ) func_to_host_path_result="$3$func_to_host_path_result" 163697cf2ee2Smrg ;; 163797cf2ee2Smrg esac 163897cf2ee2Smrg case $4 in 163997cf2ee2Smrg $2 ) func_append func_to_host_path_result "$3" 164097cf2ee2Smrg ;; 164197cf2ee2Smrg esac 164297cf2ee2Smrg} 164397cf2ee2Smrg# end func_convert_path_front_back_pathsep 164497cf2ee2Smrg 164597cf2ee2Smrg 164697cf2ee2Smrg################################################## 164797cf2ee2Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 164897cf2ee2Smrg################################################## 164997cf2ee2Smrg# invoked via `$to_host_file_cmd ARG' 165097cf2ee2Smrg# 165197cf2ee2Smrg# In each case, ARG is the path to be converted from $build to $host format. 165297cf2ee2Smrg# Result will be available in $func_to_host_file_result. 165397cf2ee2Smrg 165497cf2ee2Smrg 165597cf2ee2Smrg# func_to_host_file ARG 165697cf2ee2Smrg# Converts the file name ARG from $build format to $host format. Return result 165797cf2ee2Smrg# in func_to_host_file_result. 165897cf2ee2Smrgfunc_to_host_file () 165997cf2ee2Smrg{ 166097cf2ee2Smrg $opt_debug 166197cf2ee2Smrg $to_host_file_cmd "$1" 166297cf2ee2Smrg} 166397cf2ee2Smrg# end func_to_host_file 166497cf2ee2Smrg 166597cf2ee2Smrg 166697cf2ee2Smrg# func_to_tool_file ARG LAZY 166797cf2ee2Smrg# converts the file name ARG from $build format to toolchain format. Return 166897cf2ee2Smrg# result in func_to_tool_file_result. If the conversion in use is listed 166997cf2ee2Smrg# in (the comma separated) LAZY, no conversion takes place. 167097cf2ee2Smrgfunc_to_tool_file () 167197cf2ee2Smrg{ 167297cf2ee2Smrg $opt_debug 167397cf2ee2Smrg case ,$2, in 167497cf2ee2Smrg *,"$to_tool_file_cmd",*) 167597cf2ee2Smrg func_to_tool_file_result=$1 167697cf2ee2Smrg ;; 167797cf2ee2Smrg *) 167897cf2ee2Smrg $to_tool_file_cmd "$1" 167997cf2ee2Smrg func_to_tool_file_result=$func_to_host_file_result 168097cf2ee2Smrg ;; 168197cf2ee2Smrg esac 168297cf2ee2Smrg} 168397cf2ee2Smrg# end func_to_tool_file 168497cf2ee2Smrg 168597cf2ee2Smrg 168697cf2ee2Smrg# func_convert_file_noop ARG 168797cf2ee2Smrg# Copy ARG to func_to_host_file_result. 168897cf2ee2Smrgfunc_convert_file_noop () 168997cf2ee2Smrg{ 169097cf2ee2Smrg func_to_host_file_result="$1" 169197cf2ee2Smrg} 169297cf2ee2Smrg# end func_convert_file_noop 169397cf2ee2Smrg 169497cf2ee2Smrg 169597cf2ee2Smrg# func_convert_file_msys_to_w32 ARG 169697cf2ee2Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 169797cf2ee2Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 169897cf2ee2Smrg# func_to_host_file_result. 169997cf2ee2Smrgfunc_convert_file_msys_to_w32 () 170097cf2ee2Smrg{ 170197cf2ee2Smrg $opt_debug 170297cf2ee2Smrg func_to_host_file_result="$1" 170397cf2ee2Smrg if test -n "$1"; then 170497cf2ee2Smrg func_convert_core_msys_to_w32 "$1" 170597cf2ee2Smrg func_to_host_file_result="$func_convert_core_msys_to_w32_result" 170697cf2ee2Smrg fi 170797cf2ee2Smrg func_convert_file_check "$1" "$func_to_host_file_result" 170897cf2ee2Smrg} 170997cf2ee2Smrg# end func_convert_file_msys_to_w32 171097cf2ee2Smrg 171197cf2ee2Smrg 171297cf2ee2Smrg# func_convert_file_cygwin_to_w32 ARG 171397cf2ee2Smrg# Convert file name ARG from Cygwin to w32 format. Returns result in 171497cf2ee2Smrg# func_to_host_file_result. 171597cf2ee2Smrgfunc_convert_file_cygwin_to_w32 () 171697cf2ee2Smrg{ 171797cf2ee2Smrg $opt_debug 171897cf2ee2Smrg func_to_host_file_result="$1" 171997cf2ee2Smrg if test -n "$1"; then 172097cf2ee2Smrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 172197cf2ee2Smrg # LT_CYGPATH in this case. 172297cf2ee2Smrg func_to_host_file_result=`cygpath -m "$1"` 172397cf2ee2Smrg fi 172497cf2ee2Smrg func_convert_file_check "$1" "$func_to_host_file_result" 172597cf2ee2Smrg} 172697cf2ee2Smrg# end func_convert_file_cygwin_to_w32 172797cf2ee2Smrg 172897cf2ee2Smrg 172997cf2ee2Smrg# func_convert_file_nix_to_w32 ARG 173097cf2ee2Smrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 173197cf2ee2Smrg# and a working winepath. Returns result in func_to_host_file_result. 173297cf2ee2Smrgfunc_convert_file_nix_to_w32 () 173397cf2ee2Smrg{ 173497cf2ee2Smrg $opt_debug 173597cf2ee2Smrg func_to_host_file_result="$1" 173697cf2ee2Smrg if test -n "$1"; then 173797cf2ee2Smrg func_convert_core_file_wine_to_w32 "$1" 173897cf2ee2Smrg func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 173997cf2ee2Smrg fi 174097cf2ee2Smrg func_convert_file_check "$1" "$func_to_host_file_result" 174197cf2ee2Smrg} 174297cf2ee2Smrg# end func_convert_file_nix_to_w32 174397cf2ee2Smrg 174497cf2ee2Smrg 174597cf2ee2Smrg# func_convert_file_msys_to_cygwin ARG 174697cf2ee2Smrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 174797cf2ee2Smrg# Returns result in func_to_host_file_result. 174897cf2ee2Smrgfunc_convert_file_msys_to_cygwin () 174997cf2ee2Smrg{ 175097cf2ee2Smrg $opt_debug 175197cf2ee2Smrg func_to_host_file_result="$1" 175297cf2ee2Smrg if test -n "$1"; then 175397cf2ee2Smrg func_convert_core_msys_to_w32 "$1" 175497cf2ee2Smrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 175597cf2ee2Smrg func_to_host_file_result="$func_cygpath_result" 175697cf2ee2Smrg fi 175797cf2ee2Smrg func_convert_file_check "$1" "$func_to_host_file_result" 175897cf2ee2Smrg} 175997cf2ee2Smrg# end func_convert_file_msys_to_cygwin 176097cf2ee2Smrg 176197cf2ee2Smrg 176297cf2ee2Smrg# func_convert_file_nix_to_cygwin ARG 176397cf2ee2Smrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 176497cf2ee2Smrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 176597cf2ee2Smrg# in func_to_host_file_result. 176697cf2ee2Smrgfunc_convert_file_nix_to_cygwin () 176797cf2ee2Smrg{ 176897cf2ee2Smrg $opt_debug 176997cf2ee2Smrg func_to_host_file_result="$1" 177097cf2ee2Smrg if test -n "$1"; then 177197cf2ee2Smrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 177297cf2ee2Smrg func_convert_core_file_wine_to_w32 "$1" 177397cf2ee2Smrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 177497cf2ee2Smrg func_to_host_file_result="$func_cygpath_result" 177597cf2ee2Smrg fi 177697cf2ee2Smrg func_convert_file_check "$1" "$func_to_host_file_result" 177797cf2ee2Smrg} 177897cf2ee2Smrg# end func_convert_file_nix_to_cygwin 177997cf2ee2Smrg 178097cf2ee2Smrg 178197cf2ee2Smrg############################################# 178297cf2ee2Smrg# $build to $host PATH CONVERSION FUNCTIONS # 178397cf2ee2Smrg############################################# 178497cf2ee2Smrg# invoked via `$to_host_path_cmd ARG' 178597cf2ee2Smrg# 178697cf2ee2Smrg# In each case, ARG is the path to be converted from $build to $host format. 178797cf2ee2Smrg# The result will be available in $func_to_host_path_result. 178897cf2ee2Smrg# 178997cf2ee2Smrg# Path separators are also converted from $build format to $host format. If 179097cf2ee2Smrg# ARG begins or ends with a path separator character, it is preserved (but 179197cf2ee2Smrg# converted to $host format) on output. 179297cf2ee2Smrg# 179397cf2ee2Smrg# All path conversion functions are named using the following convention: 179497cf2ee2Smrg# file name conversion function : func_convert_file_X_to_Y () 179597cf2ee2Smrg# path conversion function : func_convert_path_X_to_Y () 179697cf2ee2Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the 179797cf2ee2Smrg# same. If conversion functions are added for new $build/$host combinations, 179897cf2ee2Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 179997cf2ee2Smrg# will break. 180097cf2ee2Smrg 180197cf2ee2Smrg 180297cf2ee2Smrg# func_init_to_host_path_cmd 180397cf2ee2Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 180497cf2ee2Smrg# appropriate value, based on the value of $to_host_file_cmd. 180597cf2ee2Smrgto_host_path_cmd= 180697cf2ee2Smrgfunc_init_to_host_path_cmd () 180797cf2ee2Smrg{ 180897cf2ee2Smrg $opt_debug 180997cf2ee2Smrg if test -z "$to_host_path_cmd"; then 181097cf2ee2Smrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 181197cf2ee2Smrg to_host_path_cmd="func_convert_path_${func_stripname_result}" 181297cf2ee2Smrg fi 181397cf2ee2Smrg} 181497cf2ee2Smrg 181597cf2ee2Smrg 181697cf2ee2Smrg# func_to_host_path ARG 181797cf2ee2Smrg# Converts the path ARG from $build format to $host format. Return result 181897cf2ee2Smrg# in func_to_host_path_result. 181997cf2ee2Smrgfunc_to_host_path () 182097cf2ee2Smrg{ 182197cf2ee2Smrg $opt_debug 182297cf2ee2Smrg func_init_to_host_path_cmd 182397cf2ee2Smrg $to_host_path_cmd "$1" 182497cf2ee2Smrg} 182597cf2ee2Smrg# end func_to_host_path 182697cf2ee2Smrg 182797cf2ee2Smrg 182897cf2ee2Smrg# func_convert_path_noop ARG 182997cf2ee2Smrg# Copy ARG to func_to_host_path_result. 183097cf2ee2Smrgfunc_convert_path_noop () 183197cf2ee2Smrg{ 183297cf2ee2Smrg func_to_host_path_result="$1" 183397cf2ee2Smrg} 183497cf2ee2Smrg# end func_convert_path_noop 183597cf2ee2Smrg 183697cf2ee2Smrg 183797cf2ee2Smrg# func_convert_path_msys_to_w32 ARG 183897cf2ee2Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 183997cf2ee2Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 184097cf2ee2Smrg# func_to_host_path_result. 184197cf2ee2Smrgfunc_convert_path_msys_to_w32 () 18426e7d3316Smrg{ 184397cf2ee2Smrg $opt_debug 184497cf2ee2Smrg func_to_host_path_result="$1" 184597cf2ee2Smrg if test -n "$1"; then 184697cf2ee2Smrg # Remove leading and trailing path separator characters from ARG. MSYS 184797cf2ee2Smrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 184897cf2ee2Smrg # and winepath ignores them completely. 184997cf2ee2Smrg func_stripname : : "$1" 185097cf2ee2Smrg func_to_host_path_tmp1=$func_stripname_result 185197cf2ee2Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 185297cf2ee2Smrg func_to_host_path_result="$func_convert_core_msys_to_w32_result" 185397cf2ee2Smrg func_convert_path_check : ";" \ 185497cf2ee2Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 185597cf2ee2Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 185697cf2ee2Smrg fi 185797cf2ee2Smrg} 185897cf2ee2Smrg# end func_convert_path_msys_to_w32 18596e7d3316Smrg 18606e7d3316Smrg 186197cf2ee2Smrg# func_convert_path_cygwin_to_w32 ARG 186297cf2ee2Smrg# Convert path ARG from Cygwin to w32 format. Returns result in 186397cf2ee2Smrg# func_to_host_file_result. 186497cf2ee2Smrgfunc_convert_path_cygwin_to_w32 () 186597cf2ee2Smrg{ 186697cf2ee2Smrg $opt_debug 186797cf2ee2Smrg func_to_host_path_result="$1" 186897cf2ee2Smrg if test -n "$1"; then 186997cf2ee2Smrg # See func_convert_path_msys_to_w32: 187097cf2ee2Smrg func_stripname : : "$1" 187197cf2ee2Smrg func_to_host_path_tmp1=$func_stripname_result 187297cf2ee2Smrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 187397cf2ee2Smrg func_convert_path_check : ";" \ 187497cf2ee2Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 187597cf2ee2Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 187697cf2ee2Smrg fi 187797cf2ee2Smrg} 187897cf2ee2Smrg# end func_convert_path_cygwin_to_w32 18796e7d3316Smrg 18806e7d3316Smrg 188197cf2ee2Smrg# func_convert_path_nix_to_w32 ARG 188297cf2ee2Smrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 188397cf2ee2Smrg# a working winepath. Returns result in func_to_host_file_result. 188497cf2ee2Smrgfunc_convert_path_nix_to_w32 () 188597cf2ee2Smrg{ 188697cf2ee2Smrg $opt_debug 188797cf2ee2Smrg func_to_host_path_result="$1" 188897cf2ee2Smrg if test -n "$1"; then 188997cf2ee2Smrg # See func_convert_path_msys_to_w32: 189097cf2ee2Smrg func_stripname : : "$1" 189197cf2ee2Smrg func_to_host_path_tmp1=$func_stripname_result 189297cf2ee2Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 189397cf2ee2Smrg func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 189497cf2ee2Smrg func_convert_path_check : ";" \ 189597cf2ee2Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 189697cf2ee2Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 189797cf2ee2Smrg fi 189897cf2ee2Smrg} 189997cf2ee2Smrg# end func_convert_path_nix_to_w32 19006e7d3316Smrg 190197cf2ee2Smrg 190297cf2ee2Smrg# func_convert_path_msys_to_cygwin ARG 190397cf2ee2Smrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 190497cf2ee2Smrg# Returns result in func_to_host_file_result. 190597cf2ee2Smrgfunc_convert_path_msys_to_cygwin () 190697cf2ee2Smrg{ 190797cf2ee2Smrg $opt_debug 190897cf2ee2Smrg func_to_host_path_result="$1" 190997cf2ee2Smrg if test -n "$1"; then 191097cf2ee2Smrg # See func_convert_path_msys_to_w32: 191197cf2ee2Smrg func_stripname : : "$1" 191297cf2ee2Smrg func_to_host_path_tmp1=$func_stripname_result 191397cf2ee2Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 191497cf2ee2Smrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 191597cf2ee2Smrg func_to_host_path_result="$func_cygpath_result" 191697cf2ee2Smrg func_convert_path_check : : \ 191797cf2ee2Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 191897cf2ee2Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 191997cf2ee2Smrg fi 192097cf2ee2Smrg} 192197cf2ee2Smrg# end func_convert_path_msys_to_cygwin 192297cf2ee2Smrg 192397cf2ee2Smrg 192497cf2ee2Smrg# func_convert_path_nix_to_cygwin ARG 192597cf2ee2Smrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 192697cf2ee2Smrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 192797cf2ee2Smrg# func_to_host_file_result. 192897cf2ee2Smrgfunc_convert_path_nix_to_cygwin () 192997cf2ee2Smrg{ 193097cf2ee2Smrg $opt_debug 193197cf2ee2Smrg func_to_host_path_result="$1" 193297cf2ee2Smrg if test -n "$1"; then 193397cf2ee2Smrg # Remove leading and trailing path separator characters from 193497cf2ee2Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 193597cf2ee2Smrg # into '.;' and ';.', and winepath ignores them completely. 193697cf2ee2Smrg func_stripname : : "$1" 193797cf2ee2Smrg func_to_host_path_tmp1=$func_stripname_result 193897cf2ee2Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 193997cf2ee2Smrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 194097cf2ee2Smrg func_to_host_path_result="$func_cygpath_result" 194197cf2ee2Smrg func_convert_path_check : : \ 194297cf2ee2Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 194397cf2ee2Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 194497cf2ee2Smrg fi 19456e7d3316Smrg} 194697cf2ee2Smrg# end func_convert_path_nix_to_cygwin 194797cf2ee2Smrg 19486e7d3316Smrg 19496e7d3316Smrg# func_mode_compile arg... 19506e7d3316Smrgfunc_mode_compile () 19516e7d3316Smrg{ 19526e7d3316Smrg $opt_debug 19536e7d3316Smrg # Get the compilation command and the source file. 19546e7d3316Smrg base_compile= 19556e7d3316Smrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 19566e7d3316Smrg suppress_opt=yes 19576e7d3316Smrg suppress_output= 19586e7d3316Smrg arg_mode=normal 19596e7d3316Smrg libobj= 19606e7d3316Smrg later= 19616e7d3316Smrg pie_flag= 19626e7d3316Smrg 19636e7d3316Smrg for arg 19646e7d3316Smrg do 19656e7d3316Smrg case $arg_mode in 19666e7d3316Smrg arg ) 19676e7d3316Smrg # do not "continue". Instead, add this to base_compile 19686e7d3316Smrg lastarg="$arg" 19696e7d3316Smrg arg_mode=normal 19706e7d3316Smrg ;; 19716e7d3316Smrg 19726e7d3316Smrg target ) 19736e7d3316Smrg libobj="$arg" 19746e7d3316Smrg arg_mode=normal 19756e7d3316Smrg continue 19766e7d3316Smrg ;; 19776e7d3316Smrg 19786e7d3316Smrg normal ) 19796e7d3316Smrg # Accept any command-line options. 19806e7d3316Smrg case $arg in 19816e7d3316Smrg -o) 19826e7d3316Smrg test -n "$libobj" && \ 19836e7d3316Smrg func_fatal_error "you cannot specify \`-o' more than once" 19846e7d3316Smrg arg_mode=target 19856e7d3316Smrg continue 19866e7d3316Smrg ;; 19876e7d3316Smrg 19886e7d3316Smrg -pie | -fpie | -fPIE) 198997cf2ee2Smrg func_append pie_flag " $arg" 19906e7d3316Smrg continue 19916e7d3316Smrg ;; 19926e7d3316Smrg 19936e7d3316Smrg -shared | -static | -prefer-pic | -prefer-non-pic) 199497cf2ee2Smrg func_append later " $arg" 19956e7d3316Smrg continue 19966e7d3316Smrg ;; 1997a966c04fSmrg 1998a966c04fSmrg -no-suppress) 1999a966c04fSmrg suppress_opt=no 2000a966c04fSmrg continue 2001a966c04fSmrg ;; 2002a966c04fSmrg 2003a966c04fSmrg -Xcompiler) 2004a966c04fSmrg arg_mode=arg # the next one goes into the "base_compile" arg list 2005a966c04fSmrg continue # The current "srcfile" will either be retained or 2006a966c04fSmrg ;; # replaced later. I would guess that would be a bug. 2007a966c04fSmrg 2008a966c04fSmrg -Wc,*) 20096e7d3316Smrg func_stripname '-Wc,' '' "$arg" 20106e7d3316Smrg args=$func_stripname_result 2011a966c04fSmrg lastarg= 2012a966c04fSmrg save_ifs="$IFS"; IFS=',' 20136e7d3316Smrg for arg in $args; do 2014a966c04fSmrg IFS="$save_ifs" 201597cf2ee2Smrg func_append_quoted lastarg "$arg" 2016a966c04fSmrg done 2017a966c04fSmrg IFS="$save_ifs" 20186e7d3316Smrg func_stripname ' ' '' "$lastarg" 20196e7d3316Smrg lastarg=$func_stripname_result 2020a966c04fSmrg 2021a966c04fSmrg # Add the arguments to base_compile. 202297cf2ee2Smrg func_append base_compile " $lastarg" 2023a966c04fSmrg continue 2024a966c04fSmrg ;; 2025a966c04fSmrg 20266e7d3316Smrg *) 2027a966c04fSmrg # Accept the current argument as the source file. 2028a966c04fSmrg # The previous "srcfile" becomes the current argument. 2029a966c04fSmrg # 2030a966c04fSmrg lastarg="$srcfile" 2031a966c04fSmrg srcfile="$arg" 2032a966c04fSmrg ;; 2033a966c04fSmrg esac # case $arg 2034a966c04fSmrg ;; 2035a966c04fSmrg esac # case $arg_mode 2036a966c04fSmrg 2037a966c04fSmrg # Aesthetically quote the previous argument. 203897cf2ee2Smrg func_append_quoted base_compile "$lastarg" 2039a966c04fSmrg done # for arg 2040a966c04fSmrg 2041a966c04fSmrg case $arg_mode in 2042a966c04fSmrg arg) 20436e7d3316Smrg func_fatal_error "you must specify an argument for -Xcompile" 2044a966c04fSmrg ;; 2045a966c04fSmrg target) 20466e7d3316Smrg func_fatal_error "you must specify a target with \`-o'" 2047a966c04fSmrg ;; 2048a966c04fSmrg *) 2049a966c04fSmrg # Get the name of the library object. 20506e7d3316Smrg test -z "$libobj" && { 20516e7d3316Smrg func_basename "$srcfile" 20526e7d3316Smrg libobj="$func_basename_result" 20536e7d3316Smrg } 2054a966c04fSmrg ;; 2055a966c04fSmrg esac 2056a966c04fSmrg 2057a966c04fSmrg # Recognize several different file suffixes. 2058a966c04fSmrg # If the user specifies -o file.o, it is replaced with file.lo 2059a966c04fSmrg case $libobj in 20606e7d3316Smrg *.[cCFSifmso] | \ 20616e7d3316Smrg *.ada | *.adb | *.ads | *.asm | \ 20626e7d3316Smrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 2063ac92798bSmrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 20646e7d3316Smrg func_xform "$libobj" 20656e7d3316Smrg libobj=$func_xform_result 20666e7d3316Smrg ;; 2067a966c04fSmrg esac 2068a966c04fSmrg 2069a966c04fSmrg case $libobj in 20706e7d3316Smrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 2071a966c04fSmrg *) 20726e7d3316Smrg func_fatal_error "cannot determine name of library object from \`$libobj'" 2073a966c04fSmrg ;; 2074a966c04fSmrg esac 2075a966c04fSmrg 2076a966c04fSmrg func_infer_tag $base_compile 2077a966c04fSmrg 2078a966c04fSmrg for arg in $later; do 2079a966c04fSmrg case $arg in 20806e7d3316Smrg -shared) 20816e7d3316Smrg test "$build_libtool_libs" != yes && \ 20826e7d3316Smrg func_fatal_configuration "can not build a shared library" 20836e7d3316Smrg build_old_libs=no 20846e7d3316Smrg continue 20856e7d3316Smrg ;; 20866e7d3316Smrg 2087a966c04fSmrg -static) 20886e7d3316Smrg build_libtool_libs=no 2089a966c04fSmrg build_old_libs=yes 2090a966c04fSmrg continue 2091a966c04fSmrg ;; 2092a966c04fSmrg 2093a966c04fSmrg -prefer-pic) 2094a966c04fSmrg pic_mode=yes 2095a966c04fSmrg continue 2096a966c04fSmrg ;; 2097a966c04fSmrg 2098a966c04fSmrg -prefer-non-pic) 2099a966c04fSmrg pic_mode=no 2100a966c04fSmrg continue 2101a966c04fSmrg ;; 2102a966c04fSmrg esac 2103a966c04fSmrg done 2104a966c04fSmrg 21056e7d3316Smrg func_quote_for_eval "$libobj" 21066e7d3316Smrg test "X$libobj" != "X$func_quote_for_eval_result" \ 21076e7d3316Smrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 21086e7d3316Smrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 21096e7d3316Smrg func_dirname_and_basename "$obj" "/" "" 21106e7d3316Smrg objname="$func_basename_result" 21116e7d3316Smrg xdir="$func_dirname_result" 2112a966c04fSmrg lobj=${xdir}$objdir/$objname 2113a966c04fSmrg 21146e7d3316Smrg test -z "$base_compile" && \ 21156e7d3316Smrg func_fatal_help "you must specify a compilation command" 2116a966c04fSmrg 2117a966c04fSmrg # Delete any leftover library objects. 2118a966c04fSmrg if test "$build_old_libs" = yes; then 2119a966c04fSmrg removelist="$obj $lobj $libobj ${libobj}T" 2120a966c04fSmrg else 2121a966c04fSmrg removelist="$lobj $libobj ${libobj}T" 2122a966c04fSmrg fi 2123a966c04fSmrg 2124a966c04fSmrg # On Cygwin there's no "real" PIC flag so we must build both object types 2125a966c04fSmrg case $host_os in 21266e7d3316Smrg cygwin* | mingw* | pw32* | os2* | cegcc*) 2127a966c04fSmrg pic_mode=default 2128a966c04fSmrg ;; 2129a966c04fSmrg esac 2130a966c04fSmrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 2131a966c04fSmrg # non-PIC code in shared libraries is not supported 2132a966c04fSmrg pic_mode=default 2133a966c04fSmrg fi 2134a966c04fSmrg 2135a966c04fSmrg # Calculate the filename of the output object if compiler does 2136a966c04fSmrg # not support -o with -c 2137a966c04fSmrg if test "$compiler_c_o" = no; then 21386e7d3316Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 2139a966c04fSmrg lockfile="$output_obj.lock" 2140a966c04fSmrg else 2141a966c04fSmrg output_obj= 2142a966c04fSmrg need_locks=no 2143a966c04fSmrg lockfile= 2144a966c04fSmrg fi 2145a966c04fSmrg 2146a966c04fSmrg # Lock this critical section if it is needed 2147a966c04fSmrg # We use this script file to make the link, it avoids creating a new file 2148a966c04fSmrg if test "$need_locks" = yes; then 21496e7d3316Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 21506e7d3316Smrg func_echo "Waiting for $lockfile to be removed" 2151a966c04fSmrg sleep 2 2152a966c04fSmrg done 2153a966c04fSmrg elif test "$need_locks" = warn; then 2154a966c04fSmrg if test -f "$lockfile"; then 21556e7d3316Smrg $ECHO "\ 2156a966c04fSmrg*** ERROR, $lockfile exists and contains: 2157a966c04fSmrg`cat $lockfile 2>/dev/null` 2158a966c04fSmrg 2159a966c04fSmrgThis indicates that another process is trying to use the same 2160a966c04fSmrgtemporary object file, and libtool could not work around it because 2161a966c04fSmrgyour compiler does not support \`-c' and \`-o' together. If you 2162a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better 2163a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better 2164a966c04fSmrgcompiler." 2165a966c04fSmrg 21666e7d3316Smrg $opt_dry_run || $RM $removelist 2167a966c04fSmrg exit $EXIT_FAILURE 2168a966c04fSmrg fi 216997cf2ee2Smrg func_append removelist " $output_obj" 21706e7d3316Smrg $ECHO "$srcfile" > "$lockfile" 2171a966c04fSmrg fi 2172a966c04fSmrg 21736e7d3316Smrg $opt_dry_run || $RM $removelist 217497cf2ee2Smrg func_append removelist " $lockfile" 21756e7d3316Smrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 21766e7d3316Smrg 217797cf2ee2Smrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 217897cf2ee2Smrg srcfile=$func_to_tool_file_result 21796e7d3316Smrg func_quote_for_eval "$srcfile" 21806e7d3316Smrg qsrcfile=$func_quote_for_eval_result 2181a966c04fSmrg 2182a966c04fSmrg # Only build a PIC object if we are building libtool libraries. 2183a966c04fSmrg if test "$build_libtool_libs" = yes; then 2184a966c04fSmrg # Without this assignment, base_compile gets emptied. 2185a966c04fSmrg fbsd_hideous_sh_bug=$base_compile 2186a966c04fSmrg 2187a966c04fSmrg if test "$pic_mode" != no; then 2188a966c04fSmrg command="$base_compile $qsrcfile $pic_flag" 2189a966c04fSmrg else 2190a966c04fSmrg # Don't build PIC code 2191a966c04fSmrg command="$base_compile $qsrcfile" 2192a966c04fSmrg fi 2193a966c04fSmrg 21946e7d3316Smrg func_mkdir_p "$xdir$objdir" 2195a966c04fSmrg 2196a966c04fSmrg if test -z "$output_obj"; then 2197a966c04fSmrg # Place PIC objects in $objdir 219897cf2ee2Smrg func_append command " -o $lobj" 2199a966c04fSmrg fi 2200a966c04fSmrg 22016e7d3316Smrg func_show_eval_locale "$command" \ 22026e7d3316Smrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 2203a966c04fSmrg 2204a966c04fSmrg if test "$need_locks" = warn && 2205a966c04fSmrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 22066e7d3316Smrg $ECHO "\ 2207a966c04fSmrg*** ERROR, $lockfile contains: 2208a966c04fSmrg`cat $lockfile 2>/dev/null` 2209a966c04fSmrg 2210a966c04fSmrgbut it should contain: 2211a966c04fSmrg$srcfile 2212a966c04fSmrg 2213a966c04fSmrgThis indicates that another process is trying to use the same 2214a966c04fSmrgtemporary object file, and libtool could not work around it because 2215a966c04fSmrgyour compiler does not support \`-c' and \`-o' together. If you 2216a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better 2217a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better 2218a966c04fSmrgcompiler." 2219a966c04fSmrg 22206e7d3316Smrg $opt_dry_run || $RM $removelist 2221a966c04fSmrg exit $EXIT_FAILURE 2222a966c04fSmrg fi 2223a966c04fSmrg 2224a966c04fSmrg # Just move the object if needed, then go on to compile the next one 2225a966c04fSmrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 22266e7d3316Smrg func_show_eval '$MV "$output_obj" "$lobj"' \ 22276e7d3316Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2228a966c04fSmrg fi 2229a966c04fSmrg 2230a966c04fSmrg # Allow error messages only from the first compilation. 2231a966c04fSmrg if test "$suppress_opt" = yes; then 22326e7d3316Smrg suppress_output=' >/dev/null 2>&1' 2233a966c04fSmrg fi 2234a966c04fSmrg fi 2235a966c04fSmrg 2236a966c04fSmrg # Only build a position-dependent object if we build old libraries. 2237a966c04fSmrg if test "$build_old_libs" = yes; then 2238a966c04fSmrg if test "$pic_mode" != yes; then 2239a966c04fSmrg # Don't build PIC code 22406e7d3316Smrg command="$base_compile $qsrcfile$pie_flag" 2241a966c04fSmrg else 2242a966c04fSmrg command="$base_compile $qsrcfile $pic_flag" 2243a966c04fSmrg fi 2244a966c04fSmrg if test "$compiler_c_o" = yes; then 224597cf2ee2Smrg func_append command " -o $obj" 2246a966c04fSmrg fi 2247a966c04fSmrg 2248a966c04fSmrg # Suppress compiler output if we already did a PIC compilation. 224997cf2ee2Smrg func_append command "$suppress_output" 22506e7d3316Smrg func_show_eval_locale "$command" \ 22516e7d3316Smrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 2252a966c04fSmrg 2253a966c04fSmrg if test "$need_locks" = warn && 2254a966c04fSmrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 22556e7d3316Smrg $ECHO "\ 2256a966c04fSmrg*** ERROR, $lockfile contains: 2257a966c04fSmrg`cat $lockfile 2>/dev/null` 2258a966c04fSmrg 2259a966c04fSmrgbut it should contain: 2260a966c04fSmrg$srcfile 2261a966c04fSmrg 2262a966c04fSmrgThis indicates that another process is trying to use the same 2263a966c04fSmrgtemporary object file, and libtool could not work around it because 2264a966c04fSmrgyour compiler does not support \`-c' and \`-o' together. If you 2265a966c04fSmrgrepeat this compilation, it may succeed, by chance, but you had better 2266a966c04fSmrgavoid parallel builds (make -j) in this platform, or get a better 2267a966c04fSmrgcompiler." 2268a966c04fSmrg 22696e7d3316Smrg $opt_dry_run || $RM $removelist 2270a966c04fSmrg exit $EXIT_FAILURE 2271a966c04fSmrg fi 2272a966c04fSmrg 2273a966c04fSmrg # Just move the object if needed 2274a966c04fSmrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 22756e7d3316Smrg func_show_eval '$MV "$output_obj" "$obj"' \ 22766e7d3316Smrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2277a966c04fSmrg fi 2278a966c04fSmrg fi 2279a966c04fSmrg 22806e7d3316Smrg $opt_dry_run || { 22816e7d3316Smrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 2282a966c04fSmrg 22836e7d3316Smrg # Unlock the critical section if it was locked 22846e7d3316Smrg if test "$need_locks" != no; then 22856e7d3316Smrg removelist=$lockfile 22866e7d3316Smrg $RM "$lockfile" 22876e7d3316Smrg fi 22886e7d3316Smrg } 2289a966c04fSmrg 2290a966c04fSmrg exit $EXIT_SUCCESS 22916e7d3316Smrg} 2292a966c04fSmrg 22936e7d3316Smrg$opt_help || { 229497cf2ee2Smrg test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 22956e7d3316Smrg} 2296a966c04fSmrg 22976e7d3316Smrgfunc_mode_help () 22986e7d3316Smrg{ 22996e7d3316Smrg # We need to display help for each of the modes. 230097cf2ee2Smrg case $opt_mode in 23016e7d3316Smrg "") 23026e7d3316Smrg # Generic help is extracted from the usage comments 23036e7d3316Smrg # at the start of this file. 23046e7d3316Smrg func_help 23056e7d3316Smrg ;; 2306a966c04fSmrg 23076e7d3316Smrg clean) 23086e7d3316Smrg $ECHO \ 23096e7d3316Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 2310a966c04fSmrg 23116e7d3316SmrgRemove files from the build directory. 2312a966c04fSmrg 23136e7d3316SmrgRM is the name of the program to use to delete files associated with each FILE 23146e7d3316Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 23156e7d3316Smrgto RM. 2316a966c04fSmrg 23176e7d3316SmrgIf FILE is a libtool library, object or program, all the files associated 23186e7d3316Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 23196e7d3316Smrg ;; 2320a966c04fSmrg 23216e7d3316Smrg compile) 23226e7d3316Smrg $ECHO \ 23236e7d3316Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 2324a966c04fSmrg 23256e7d3316SmrgCompile a source file into a libtool library object. 2326a966c04fSmrg 23276e7d3316SmrgThis mode accepts the following additional options: 2328a966c04fSmrg 23296e7d3316Smrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 23306e7d3316Smrg -no-suppress do not suppress compiler output for multiple passes 23316e7d3316Smrg -prefer-pic try to build PIC objects only 23326e7d3316Smrg -prefer-non-pic try to build non-PIC objects only 23336e7d3316Smrg -shared do not build a \`.o' file suitable for static linking 23346e7d3316Smrg -static only build a \`.o' file suitable for static linking 23356e7d3316Smrg -Wc,FLAG pass FLAG directly to the compiler 2336a966c04fSmrg 23376e7d3316SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 23386e7d3316Smrgfrom the given SOURCEFILE. 2339a966c04fSmrg 23406e7d3316SmrgThe output file name is determined by removing the directory component from 23416e7d3316SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 23426e7d3316Smrglibrary object suffix, \`.lo'." 23436e7d3316Smrg ;; 2344a966c04fSmrg 23456e7d3316Smrg execute) 23466e7d3316Smrg $ECHO \ 23476e7d3316Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 2348a966c04fSmrg 23496e7d3316SmrgAutomatically set library path, then run a program. 2350a966c04fSmrg 23516e7d3316SmrgThis mode accepts the following additional options: 2352a966c04fSmrg 23536e7d3316Smrg -dlopen FILE add the directory containing FILE to the library path 2354a966c04fSmrg 23556e7d3316SmrgThis mode sets the library path environment variable according to \`-dlopen' 23566e7d3316Smrgflags. 2357a966c04fSmrg 23586e7d3316SmrgIf any of the ARGS are libtool executable wrappers, then they are translated 23596e7d3316Smrginto their corresponding uninstalled binary, and any of their required library 23606e7d3316Smrgdirectories are added to the library path. 2361a966c04fSmrg 23626e7d3316SmrgThen, COMMAND is executed, with ARGS as arguments." 23636e7d3316Smrg ;; 2364a966c04fSmrg 23656e7d3316Smrg finish) 23666e7d3316Smrg $ECHO \ 23676e7d3316Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 2368a966c04fSmrg 23696e7d3316SmrgComplete the installation of libtool libraries. 2370a966c04fSmrg 23716e7d3316SmrgEach LIBDIR is a directory that contains libtool libraries. 2372a966c04fSmrg 23736e7d3316SmrgThe commands that this mode executes may require superuser privileges. Use 23746e7d3316Smrgthe \`--dry-run' option if you just want to see what would be executed." 23756e7d3316Smrg ;; 2376a966c04fSmrg 23776e7d3316Smrg install) 23786e7d3316Smrg $ECHO \ 23796e7d3316Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 2380a966c04fSmrg 23816e7d3316SmrgInstall executables or libraries. 2382a966c04fSmrg 23836e7d3316SmrgINSTALL-COMMAND is the installation command. The first component should be 23846e7d3316Smrgeither the \`install' or \`cp' program. 2385a966c04fSmrg 23866e7d3316SmrgThe following components of INSTALL-COMMAND are treated specially: 2387a966c04fSmrg 23886e7d3316Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 2389a966c04fSmrg 23906e7d3316SmrgThe rest of the components are interpreted as arguments to that command (only 23916e7d3316SmrgBSD-compatible install options are recognized)." 23926e7d3316Smrg ;; 2393a966c04fSmrg 23946e7d3316Smrg link) 23956e7d3316Smrg $ECHO \ 23966e7d3316Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 2397a966c04fSmrg 23986e7d3316SmrgLink object files or libraries together to form another library, or to 23996e7d3316Smrgcreate an executable program. 2400a966c04fSmrg 24016e7d3316SmrgLINK-COMMAND is a command using the C compiler that you would use to create 24026e7d3316Smrga program from several object files. 2403a966c04fSmrg 24046e7d3316SmrgThe following components of LINK-COMMAND are treated specially: 2405a966c04fSmrg 24066e7d3316Smrg -all-static do not do any dynamic linking at all 24076e7d3316Smrg -avoid-version do not add a version suffix if possible 24086e7d3316Smrg -bindir BINDIR specify path to binaries directory (for systems where 24096e7d3316Smrg libraries must be found in the PATH setting at runtime) 24106e7d3316Smrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 24116e7d3316Smrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 24126e7d3316Smrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 24136e7d3316Smrg -export-symbols SYMFILE 24146e7d3316Smrg try to export only the symbols listed in SYMFILE 24156e7d3316Smrg -export-symbols-regex REGEX 24166e7d3316Smrg try to export only the symbols matching REGEX 24176e7d3316Smrg -LLIBDIR search LIBDIR for required installed libraries 24186e7d3316Smrg -lNAME OUTPUT-FILE requires the installed library libNAME 24196e7d3316Smrg -module build a library that can dlopened 24206e7d3316Smrg -no-fast-install disable the fast-install mode 24216e7d3316Smrg -no-install link a not-installable executable 24226e7d3316Smrg -no-undefined declare that a library does not refer to external symbols 24236e7d3316Smrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 24246e7d3316Smrg -objectlist FILE Use a list of object files found in FILE to specify objects 24256e7d3316Smrg -precious-files-regex REGEX 24266e7d3316Smrg don't remove output files matching REGEX 24276e7d3316Smrg -release RELEASE specify package release information 24286e7d3316Smrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 24296e7d3316Smrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 24306e7d3316Smrg -shared only do dynamic linking of libtool libraries 24316e7d3316Smrg -shrext SUFFIX override the standard shared library file extension 24326e7d3316Smrg -static do not do any dynamic linking of uninstalled libtool libraries 24336e7d3316Smrg -static-libtool-libs 24346e7d3316Smrg do not do any dynamic linking of libtool libraries 24356e7d3316Smrg -version-info CURRENT[:REVISION[:AGE]] 24366e7d3316Smrg specify library version info [each variable defaults to 0] 24376e7d3316Smrg -weak LIBNAME declare that the target provides the LIBNAME interface 24386e7d3316Smrg -Wc,FLAG 24396e7d3316Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 24406e7d3316Smrg -Wl,FLAG 24416e7d3316Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 24426e7d3316Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 2443a966c04fSmrg 24446e7d3316SmrgAll other options (arguments beginning with \`-') are ignored. 2445a966c04fSmrg 24466e7d3316SmrgEvery other argument is treated as a filename. Files ending in \`.la' are 24476e7d3316Smrgtreated as uninstalled libtool libraries, other files are standard or library 24486e7d3316Smrgobject files. 2449a966c04fSmrg 24506e7d3316SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 24516e7d3316Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 24526e7d3316Smrgrequired, except when creating a convenience library. 2453a966c04fSmrg 24546e7d3316SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 24556e7d3316Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 24562e2dd055Smrg 24576e7d3316SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 24586e7d3316Smrgis created, otherwise an executable program is created." 24596e7d3316Smrg ;; 2460a966c04fSmrg 24616e7d3316Smrg uninstall) 24626e7d3316Smrg $ECHO \ 24636e7d3316Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 2464a966c04fSmrg 24656e7d3316SmrgRemove libraries from an installation directory. 2466a966c04fSmrg 24676e7d3316SmrgRM is the name of the program to use to delete files associated with each FILE 24686e7d3316Smrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 24696e7d3316Smrgto RM. 2470a966c04fSmrg 24716e7d3316SmrgIf FILE is a libtool library, all the files associated with it are deleted. 24726e7d3316SmrgOtherwise, only FILE itself is deleted using RM." 24736e7d3316Smrg ;; 2474a966c04fSmrg 24756e7d3316Smrg *) 247697cf2ee2Smrg func_fatal_help "invalid operation mode \`$opt_mode'" 24776e7d3316Smrg ;; 24786e7d3316Smrg esac 2479a966c04fSmrg 24806e7d3316Smrg echo 24816e7d3316Smrg $ECHO "Try \`$progname --help' for more information about other modes." 24826e7d3316Smrg} 2483a966c04fSmrg 24846e7d3316Smrg# Now that we've collected a possible --mode arg, show help if necessary 24856e7d3316Smrgif $opt_help; then 24866e7d3316Smrg if test "$opt_help" = :; then 24876e7d3316Smrg func_mode_help 24886e7d3316Smrg else 24896e7d3316Smrg { 24906e7d3316Smrg func_help noexit 249197cf2ee2Smrg for opt_mode in compile link execute install finish uninstall clean; do 24926e7d3316Smrg func_mode_help 24936e7d3316Smrg done 24946e7d3316Smrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 24956e7d3316Smrg { 24966e7d3316Smrg func_help noexit 249797cf2ee2Smrg for opt_mode in compile link execute install finish uninstall clean; do 24986e7d3316Smrg echo 24996e7d3316Smrg func_mode_help 25006e7d3316Smrg done 25016e7d3316Smrg } | 25026e7d3316Smrg sed '1d 25036e7d3316Smrg /^When reporting/,/^Report/{ 25046e7d3316Smrg H 25056e7d3316Smrg d 25066e7d3316Smrg } 25076e7d3316Smrg $x 25086e7d3316Smrg /information about other modes/d 25096e7d3316Smrg /more detailed .*MODE/d 25106e7d3316Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 25116e7d3316Smrg fi 25126e7d3316Smrg exit $? 25136e7d3316Smrgfi 2514a966c04fSmrg 2515a966c04fSmrg 25166e7d3316Smrg# func_mode_execute arg... 25176e7d3316Smrgfunc_mode_execute () 25186e7d3316Smrg{ 25196e7d3316Smrg $opt_debug 25206e7d3316Smrg # The first argument is the command name. 25216e7d3316Smrg cmd="$nonopt" 25226e7d3316Smrg test -z "$cmd" && \ 25236e7d3316Smrg func_fatal_help "you must specify a COMMAND" 2524a966c04fSmrg 25256e7d3316Smrg # Handle -dlopen flags immediately. 252697cf2ee2Smrg for file in $opt_dlopen; do 25276e7d3316Smrg test -f "$file" \ 25286e7d3316Smrg || func_fatal_help "\`$file' is not a file" 2529a966c04fSmrg 25306e7d3316Smrg dir= 25316e7d3316Smrg case $file in 25326e7d3316Smrg *.la) 253397cf2ee2Smrg func_resolve_sysroot "$file" 253497cf2ee2Smrg file=$func_resolve_sysroot_result 253597cf2ee2Smrg 25366e7d3316Smrg # Check to see that this really is a libtool archive. 25376e7d3316Smrg func_lalib_unsafe_p "$file" \ 25386e7d3316Smrg || func_fatal_help "\`$lib' is not a valid libtool archive" 2539a966c04fSmrg 25406e7d3316Smrg # Read the libtool library. 25416e7d3316Smrg dlname= 25426e7d3316Smrg library_names= 25436e7d3316Smrg func_source "$file" 2544a966c04fSmrg 25456e7d3316Smrg # Skip this library if it cannot be dlopened. 25466e7d3316Smrg if test -z "$dlname"; then 25476e7d3316Smrg # Warn if it was a shared library. 25486e7d3316Smrg test -n "$library_names" && \ 25496e7d3316Smrg func_warning "\`$file' was not linked with \`-export-dynamic'" 25506e7d3316Smrg continue 25516e7d3316Smrg fi 2552a966c04fSmrg 25536e7d3316Smrg func_dirname "$file" "" "." 25546e7d3316Smrg dir="$func_dirname_result" 2555a966c04fSmrg 25566e7d3316Smrg if test -f "$dir/$objdir/$dlname"; then 255797cf2ee2Smrg func_append dir "/$objdir" 25586e7d3316Smrg else 25596e7d3316Smrg if test ! -f "$dir/$dlname"; then 25606e7d3316Smrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 25616e7d3316Smrg fi 25626e7d3316Smrg fi 2563a966c04fSmrg ;; 2564a966c04fSmrg 25656e7d3316Smrg *.lo) 25666e7d3316Smrg # Just add the directory containing the .lo file. 25676e7d3316Smrg func_dirname "$file" "" "." 25686e7d3316Smrg dir="$func_dirname_result" 2569a966c04fSmrg ;; 25706e7d3316Smrg 25716e7d3316Smrg *) 25726e7d3316Smrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 2573a966c04fSmrg continue 2574a966c04fSmrg ;; 25756e7d3316Smrg esac 2576a966c04fSmrg 25776e7d3316Smrg # Get the absolute pathname. 25786e7d3316Smrg absdir=`cd "$dir" && pwd` 25796e7d3316Smrg test -n "$absdir" && dir="$absdir" 2580a966c04fSmrg 25816e7d3316Smrg # Now add the directory to shlibpath_var. 25826e7d3316Smrg if eval "test -z \"\$$shlibpath_var\""; then 25836e7d3316Smrg eval "$shlibpath_var=\"\$dir\"" 25846e7d3316Smrg else 25856e7d3316Smrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 25866e7d3316Smrg fi 25876e7d3316Smrg done 2588a966c04fSmrg 25896e7d3316Smrg # This variable tells wrapper scripts just to set shlibpath_var 25906e7d3316Smrg # rather than running their programs. 25916e7d3316Smrg libtool_execute_magic="$magic" 2592a966c04fSmrg 25936e7d3316Smrg # Check if any of the arguments is a wrapper script. 25946e7d3316Smrg args= 25956e7d3316Smrg for file 25966e7d3316Smrg do 25976e7d3316Smrg case $file in 25986e7d3316Smrg -* | *.la | *.lo ) ;; 25996e7d3316Smrg *) 26006e7d3316Smrg # Do a test to see if this is really a libtool program. 26016e7d3316Smrg if func_ltwrapper_script_p "$file"; then 26026e7d3316Smrg func_source "$file" 26036e7d3316Smrg # Transform arg to wrapped name. 26046e7d3316Smrg file="$progdir/$program" 26056e7d3316Smrg elif func_ltwrapper_executable_p "$file"; then 26066e7d3316Smrg func_ltwrapper_scriptname "$file" 26076e7d3316Smrg func_source "$func_ltwrapper_scriptname_result" 26086e7d3316Smrg # Transform arg to wrapped name. 26096e7d3316Smrg file="$progdir/$program" 26106e7d3316Smrg fi 2611a966c04fSmrg ;; 26126e7d3316Smrg esac 26136e7d3316Smrg # Quote arguments (to preserve shell metacharacters). 261497cf2ee2Smrg func_append_quoted args "$file" 26156e7d3316Smrg done 2616a966c04fSmrg 26176e7d3316Smrg if test "X$opt_dry_run" = Xfalse; then 26186e7d3316Smrg if test -n "$shlibpath_var"; then 26196e7d3316Smrg # Export the shlibpath_var. 26206e7d3316Smrg eval "export $shlibpath_var" 26216e7d3316Smrg fi 2622a966c04fSmrg 26236e7d3316Smrg # Restore saved environment variables 26246e7d3316Smrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 26256e7d3316Smrg do 26266e7d3316Smrg eval "if test \"\${save_$lt_var+set}\" = set; then 26276e7d3316Smrg $lt_var=\$save_$lt_var; export $lt_var 26286e7d3316Smrg else 26296e7d3316Smrg $lt_unset $lt_var 26306e7d3316Smrg fi" 26316e7d3316Smrg done 2632a966c04fSmrg 26336e7d3316Smrg # Now prepare to actually exec the command. 26346e7d3316Smrg exec_cmd="\$cmd$args" 26356e7d3316Smrg else 26366e7d3316Smrg # Display what would be done. 26376e7d3316Smrg if test -n "$shlibpath_var"; then 26386e7d3316Smrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 26396e7d3316Smrg echo "export $shlibpath_var" 26406e7d3316Smrg fi 26416e7d3316Smrg $ECHO "$cmd$args" 26426e7d3316Smrg exit $EXIT_SUCCESS 26436e7d3316Smrg fi 26446e7d3316Smrg} 2645a966c04fSmrg 264697cf2ee2Smrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 2647a966c04fSmrg 2648a966c04fSmrg 26496e7d3316Smrg# func_mode_finish arg... 26506e7d3316Smrgfunc_mode_finish () 26516e7d3316Smrg{ 26526e7d3316Smrg $opt_debug 265397cf2ee2Smrg libs= 265497cf2ee2Smrg libdirs= 26556e7d3316Smrg admincmds= 2656a966c04fSmrg 265797cf2ee2Smrg for opt in "$nonopt" ${1+"$@"} 265897cf2ee2Smrg do 265997cf2ee2Smrg if test -d "$opt"; then 266097cf2ee2Smrg func_append libdirs " $opt" 266197cf2ee2Smrg 266297cf2ee2Smrg elif test -f "$opt"; then 266397cf2ee2Smrg if func_lalib_unsafe_p "$opt"; then 266497cf2ee2Smrg func_append libs " $opt" 266597cf2ee2Smrg else 266697cf2ee2Smrg func_warning "\`$opt' is not a valid libtool archive" 266797cf2ee2Smrg fi 266897cf2ee2Smrg 266997cf2ee2Smrg else 267097cf2ee2Smrg func_fatal_error "invalid argument \`$opt'" 267197cf2ee2Smrg fi 267297cf2ee2Smrg done 267397cf2ee2Smrg 267497cf2ee2Smrg if test -n "$libs"; then 267597cf2ee2Smrg if test -n "$lt_sysroot"; then 267697cf2ee2Smrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 267797cf2ee2Smrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 267897cf2ee2Smrg else 267997cf2ee2Smrg sysroot_cmd= 268097cf2ee2Smrg fi 268197cf2ee2Smrg 268297cf2ee2Smrg # Remove sysroot references 268397cf2ee2Smrg if $opt_dry_run; then 268497cf2ee2Smrg for lib in $libs; do 268597cf2ee2Smrg echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 268697cf2ee2Smrg done 268797cf2ee2Smrg else 268897cf2ee2Smrg tmpdir=`func_mktempdir` 268997cf2ee2Smrg for lib in $libs; do 269097cf2ee2Smrg sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 269197cf2ee2Smrg > $tmpdir/tmp-la 269297cf2ee2Smrg mv -f $tmpdir/tmp-la $lib 269397cf2ee2Smrg done 269497cf2ee2Smrg ${RM}r "$tmpdir" 269597cf2ee2Smrg fi 269697cf2ee2Smrg fi 2697a966c04fSmrg 269897cf2ee2Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 26996e7d3316Smrg for libdir in $libdirs; do 27006e7d3316Smrg if test -n "$finish_cmds"; then 27016e7d3316Smrg # Do each command in the finish commands. 27026e7d3316Smrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 27036e7d3316Smrg'"$cmd"'"' 27046e7d3316Smrg fi 27056e7d3316Smrg if test -n "$finish_eval"; then 27066e7d3316Smrg # Do the single finish_eval. 27076e7d3316Smrg eval cmds=\"$finish_eval\" 270897cf2ee2Smrg $opt_dry_run || eval "$cmds" || func_append admincmds " 27096e7d3316Smrg $cmds" 27106e7d3316Smrg fi 27116e7d3316Smrg done 27126e7d3316Smrg fi 2713a966c04fSmrg 27146e7d3316Smrg # Exit here if they wanted silent mode. 27156e7d3316Smrg $opt_silent && exit $EXIT_SUCCESS 2716a966c04fSmrg 271797cf2ee2Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 271897cf2ee2Smrg echo "----------------------------------------------------------------------" 271997cf2ee2Smrg echo "Libraries have been installed in:" 272097cf2ee2Smrg for libdir in $libdirs; do 272197cf2ee2Smrg $ECHO " $libdir" 272297cf2ee2Smrg done 272397cf2ee2Smrg echo 272497cf2ee2Smrg echo "If you ever happen to want to link against installed libraries" 272597cf2ee2Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 272697cf2ee2Smrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 272797cf2ee2Smrg echo "flag during linking and do at least one of the following:" 272897cf2ee2Smrg if test -n "$shlibpath_var"; then 272997cf2ee2Smrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 273097cf2ee2Smrg echo " during execution" 273197cf2ee2Smrg fi 273297cf2ee2Smrg if test -n "$runpath_var"; then 273397cf2ee2Smrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 273497cf2ee2Smrg echo " during linking" 273597cf2ee2Smrg fi 273697cf2ee2Smrg if test -n "$hardcode_libdir_flag_spec"; then 273797cf2ee2Smrg libdir=LIBDIR 273897cf2ee2Smrg eval flag=\"$hardcode_libdir_flag_spec\" 2739a966c04fSmrg 274097cf2ee2Smrg $ECHO " - use the \`$flag' linker flag" 274197cf2ee2Smrg fi 274297cf2ee2Smrg if test -n "$admincmds"; then 274397cf2ee2Smrg $ECHO " - have your system administrator run these commands:$admincmds" 274497cf2ee2Smrg fi 274597cf2ee2Smrg if test -f /etc/ld.so.conf; then 274697cf2ee2Smrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 274797cf2ee2Smrg fi 274897cf2ee2Smrg echo 2749a966c04fSmrg 275097cf2ee2Smrg echo "See any operating system documentation about shared libraries for" 275197cf2ee2Smrg case $host in 275297cf2ee2Smrg solaris2.[6789]|solaris2.1[0-9]) 275397cf2ee2Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 275497cf2ee2Smrg echo "pages." 275597cf2ee2Smrg ;; 275697cf2ee2Smrg *) 275797cf2ee2Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 275897cf2ee2Smrg ;; 275997cf2ee2Smrg esac 276097cf2ee2Smrg echo "----------------------------------------------------------------------" 276197cf2ee2Smrg fi 27626e7d3316Smrg exit $EXIT_SUCCESS 27636e7d3316Smrg} 2764a966c04fSmrg 276597cf2ee2Smrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 2766a966c04fSmrg 2767a966c04fSmrg 27686e7d3316Smrg# func_mode_install arg... 27696e7d3316Smrgfunc_mode_install () 27706e7d3316Smrg{ 27716e7d3316Smrg $opt_debug 27726e7d3316Smrg # There may be an optional sh(1) argument at the beginning of 27736e7d3316Smrg # install_prog (especially on Windows NT). 27746e7d3316Smrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 27756e7d3316Smrg # Allow the use of GNU shtool's install command. 27766e7d3316Smrg case $nonopt in *shtool*) :;; *) false;; esac; then 27776e7d3316Smrg # Aesthetically quote it. 27786e7d3316Smrg func_quote_for_eval "$nonopt" 27796e7d3316Smrg install_prog="$func_quote_for_eval_result " 27806e7d3316Smrg arg=$1 27816e7d3316Smrg shift 27826e7d3316Smrg else 27836e7d3316Smrg install_prog= 27846e7d3316Smrg arg=$nonopt 27856e7d3316Smrg fi 2786a966c04fSmrg 27876e7d3316Smrg # The real first argument should be the name of the installation program. 27886e7d3316Smrg # Aesthetically quote it. 27896e7d3316Smrg func_quote_for_eval "$arg" 279097cf2ee2Smrg func_append install_prog "$func_quote_for_eval_result" 27916e7d3316Smrg install_shared_prog=$install_prog 27926e7d3316Smrg case " $install_prog " in 27936e7d3316Smrg *[\\\ /]cp\ *) install_cp=: ;; 27946e7d3316Smrg *) install_cp=false ;; 27956e7d3316Smrg esac 2796a966c04fSmrg 27976e7d3316Smrg # We need to accept at least all the BSD install flags. 27986e7d3316Smrg dest= 27996e7d3316Smrg files= 28006e7d3316Smrg opts= 28016e7d3316Smrg prev= 28026e7d3316Smrg install_type= 28036e7d3316Smrg isdir=no 28046e7d3316Smrg stripme= 28056e7d3316Smrg no_mode=: 28066e7d3316Smrg for arg 28076e7d3316Smrg do 28086e7d3316Smrg arg2= 28096e7d3316Smrg if test -n "$dest"; then 281097cf2ee2Smrg func_append files " $dest" 28116e7d3316Smrg dest=$arg 2812a966c04fSmrg continue 28136e7d3316Smrg fi 2814a966c04fSmrg 28156e7d3316Smrg case $arg in 28166e7d3316Smrg -d) isdir=yes ;; 28176e7d3316Smrg -f) 28186e7d3316Smrg if $install_cp; then :; else 28196e7d3316Smrg prev=$arg 2820a966c04fSmrg fi 28216e7d3316Smrg ;; 28226e7d3316Smrg -g | -m | -o) 28236e7d3316Smrg prev=$arg 28246e7d3316Smrg ;; 28256e7d3316Smrg -s) 28266e7d3316Smrg stripme=" -s" 2827a966c04fSmrg continue 2828a966c04fSmrg ;; 28296e7d3316Smrg -*) 28306e7d3316Smrg ;; 2831a966c04fSmrg *) 28326e7d3316Smrg # If the previous option needed an argument, then skip it. 28336e7d3316Smrg if test -n "$prev"; then 28346e7d3316Smrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 28356e7d3316Smrg arg2=$install_override_mode 28366e7d3316Smrg no_mode=false 28376e7d3316Smrg fi 28386e7d3316Smrg prev= 28396e7d3316Smrg else 28406e7d3316Smrg dest=$arg 28416e7d3316Smrg continue 28426e7d3316Smrg fi 2843a966c04fSmrg ;; 28446e7d3316Smrg esac 2845a966c04fSmrg 28466e7d3316Smrg # Aesthetically quote the argument. 28476e7d3316Smrg func_quote_for_eval "$arg" 284897cf2ee2Smrg func_append install_prog " $func_quote_for_eval_result" 28496e7d3316Smrg if test -n "$arg2"; then 28506e7d3316Smrg func_quote_for_eval "$arg2" 2851a966c04fSmrg fi 285297cf2ee2Smrg func_append install_shared_prog " $func_quote_for_eval_result" 28536e7d3316Smrg done 2854a966c04fSmrg 28556e7d3316Smrg test -z "$install_prog" && \ 28566e7d3316Smrg func_fatal_help "you must specify an install program" 2857a966c04fSmrg 28586e7d3316Smrg test -n "$prev" && \ 28596e7d3316Smrg func_fatal_help "the \`$prev' option requires an argument" 2860a966c04fSmrg 28616e7d3316Smrg if test -n "$install_override_mode" && $no_mode; then 28626e7d3316Smrg if $install_cp; then :; else 28636e7d3316Smrg func_quote_for_eval "$install_override_mode" 286497cf2ee2Smrg func_append install_shared_prog " -m $func_quote_for_eval_result" 28656e7d3316Smrg fi 2866a966c04fSmrg fi 2867a966c04fSmrg 28686e7d3316Smrg if test -z "$files"; then 28696e7d3316Smrg if test -z "$dest"; then 28706e7d3316Smrg func_fatal_help "no file or destination specified" 28716e7d3316Smrg else 28726e7d3316Smrg func_fatal_help "you must specify a destination" 2873a966c04fSmrg fi 2874a966c04fSmrg fi 2875a966c04fSmrg 28766e7d3316Smrg # Strip any trailing slash from the destination. 28776e7d3316Smrg func_stripname '' '/' "$dest" 28786e7d3316Smrg dest=$func_stripname_result 2879a966c04fSmrg 28806e7d3316Smrg # Check to see that the destination is a directory. 28816e7d3316Smrg test -d "$dest" && isdir=yes 28826e7d3316Smrg if test "$isdir" = yes; then 28836e7d3316Smrg destdir="$dest" 28846e7d3316Smrg destname= 28856e7d3316Smrg else 28866e7d3316Smrg func_dirname_and_basename "$dest" "" "." 28876e7d3316Smrg destdir="$func_dirname_result" 28886e7d3316Smrg destname="$func_basename_result" 28896e7d3316Smrg 28906e7d3316Smrg # Not a directory, so check to see that there is only one file specified. 28916e7d3316Smrg set dummy $files; shift 28926e7d3316Smrg test "$#" -gt 1 && \ 28936e7d3316Smrg func_fatal_help "\`$dest' is not a directory" 28946e7d3316Smrg fi 28956e7d3316Smrg case $destdir in 28966e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 2897a966c04fSmrg *) 28986e7d3316Smrg for file in $files; do 28996e7d3316Smrg case $file in 29006e7d3316Smrg *.lo) ;; 29016e7d3316Smrg *) 29026e7d3316Smrg func_fatal_help "\`$destdir' must be an absolute directory name" 29036e7d3316Smrg ;; 29046e7d3316Smrg esac 29056e7d3316Smrg done 2906a966c04fSmrg ;; 2907a966c04fSmrg esac 2908a966c04fSmrg 29096e7d3316Smrg # This variable tells wrapper scripts just to set variables rather 29106e7d3316Smrg # than running their programs. 29116e7d3316Smrg libtool_install_magic="$magic" 2912a966c04fSmrg 29136e7d3316Smrg staticlibs= 29146e7d3316Smrg future_libdirs= 29156e7d3316Smrg current_libdirs= 29166e7d3316Smrg for file in $files; do 2917a966c04fSmrg 29186e7d3316Smrg # Do each installation. 29196e7d3316Smrg case $file in 29206e7d3316Smrg *.$libext) 29216e7d3316Smrg # Do the static libraries later. 292297cf2ee2Smrg func_append staticlibs " $file" 29236e7d3316Smrg ;; 29246e7d3316Smrg 29256e7d3316Smrg *.la) 292697cf2ee2Smrg func_resolve_sysroot "$file" 292797cf2ee2Smrg file=$func_resolve_sysroot_result 292897cf2ee2Smrg 29296e7d3316Smrg # Check to see that this really is a libtool archive. 29306e7d3316Smrg func_lalib_unsafe_p "$file" \ 29316e7d3316Smrg || func_fatal_help "\`$file' is not a valid libtool archive" 29326e7d3316Smrg 29336e7d3316Smrg library_names= 29346e7d3316Smrg old_library= 29356e7d3316Smrg relink_command= 29366e7d3316Smrg func_source "$file" 29376e7d3316Smrg 29386e7d3316Smrg # Add the libdir to current_libdirs if it is the destination. 29396e7d3316Smrg if test "X$destdir" = "X$libdir"; then 29406e7d3316Smrg case "$current_libdirs " in 29416e7d3316Smrg *" $libdir "*) ;; 294297cf2ee2Smrg *) func_append current_libdirs " $libdir" ;; 2943a966c04fSmrg esac 29446e7d3316Smrg else 29456e7d3316Smrg # Note the libdir as a future libdir. 29466e7d3316Smrg case "$future_libdirs " in 29476e7d3316Smrg *" $libdir "*) ;; 294897cf2ee2Smrg *) func_append future_libdirs " $libdir" ;; 29496e7d3316Smrg esac 29506e7d3316Smrg fi 2951a966c04fSmrg 29526e7d3316Smrg func_dirname "$file" "/" "" 29536e7d3316Smrg dir="$func_dirname_result" 295497cf2ee2Smrg func_append dir "$objdir" 29556e7d3316Smrg 29566e7d3316Smrg if test -n "$relink_command"; then 29576e7d3316Smrg # Determine the prefix the user has applied to our future dir. 29586e7d3316Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 29596e7d3316Smrg 29606e7d3316Smrg # Don't allow the user to place us outside of our expected 29616e7d3316Smrg # location b/c this prevents finding dependent libraries that 29626e7d3316Smrg # are installed to the same prefix. 29636e7d3316Smrg # At present, this check doesn't affect windows .dll's that 29646e7d3316Smrg # are installed into $libdir/../bin (currently, that works fine) 29656e7d3316Smrg # but it's something to keep an eye on. 29666e7d3316Smrg test "$inst_prefix_dir" = "$destdir" && \ 29676e7d3316Smrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 29686e7d3316Smrg 29696e7d3316Smrg if test -n "$inst_prefix_dir"; then 29706e7d3316Smrg # Stick the inst_prefix_dir data into the link command. 29716e7d3316Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 29726e7d3316Smrg else 29736e7d3316Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 29746e7d3316Smrg fi 29756e7d3316Smrg 29766e7d3316Smrg func_warning "relinking \`$file'" 29776e7d3316Smrg func_show_eval "$relink_command" \ 29786e7d3316Smrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 29796e7d3316Smrg fi 29806e7d3316Smrg 29816e7d3316Smrg # See the names of the shared library. 29826e7d3316Smrg set dummy $library_names; shift 29836e7d3316Smrg if test -n "$1"; then 29846e7d3316Smrg realname="$1" 29856e7d3316Smrg shift 29866e7d3316Smrg 29876e7d3316Smrg srcname="$realname" 29886e7d3316Smrg test -n "$relink_command" && srcname="$realname"T 29896e7d3316Smrg 29906e7d3316Smrg # Install the shared library and build the symlinks. 29916e7d3316Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 29926e7d3316Smrg 'exit $?' 29936e7d3316Smrg tstripme="$stripme" 29946e7d3316Smrg case $host_os in 29956e7d3316Smrg cygwin* | mingw* | pw32* | cegcc*) 29966e7d3316Smrg case $realname in 29976e7d3316Smrg *.dll.a) 29986e7d3316Smrg tstripme="" 29996e7d3316Smrg ;; 30006e7d3316Smrg esac 3001a966c04fSmrg ;; 3002a966c04fSmrg esac 30036e7d3316Smrg if test -n "$tstripme" && test -n "$striplib"; then 30046e7d3316Smrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 30056e7d3316Smrg fi 30066e7d3316Smrg 30076e7d3316Smrg if test "$#" -gt 0; then 30086e7d3316Smrg # Delete the old symlinks, and create new ones. 30096e7d3316Smrg # Try `ln -sf' first, because the `ln' binary might depend on 30106e7d3316Smrg # the symlink we replace! Solaris /bin/ln does not understand -f, 30116e7d3316Smrg # so we also need to try rm && ln -s. 30126e7d3316Smrg for linkname 30136e7d3316Smrg do 30146e7d3316Smrg test "$linkname" != "$realname" \ 30156e7d3316Smrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 30166e7d3316Smrg done 30176e7d3316Smrg fi 30186e7d3316Smrg 30196e7d3316Smrg # Do each command in the postinstall commands. 30206e7d3316Smrg lib="$destdir/$realname" 30216e7d3316Smrg func_execute_cmds "$postinstall_cmds" 'exit $?' 30226e7d3316Smrg fi 30236e7d3316Smrg 30246e7d3316Smrg # Install the pseudo-library for information purposes. 30256e7d3316Smrg func_basename "$file" 30266e7d3316Smrg name="$func_basename_result" 30276e7d3316Smrg instname="$dir/$name"i 30286e7d3316Smrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 30296e7d3316Smrg 30306e7d3316Smrg # Maybe install the static library, too. 303197cf2ee2Smrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 3032a966c04fSmrg ;; 30336e7d3316Smrg 30346e7d3316Smrg *.lo) 30356e7d3316Smrg # Install (i.e. copy) a libtool object. 30366e7d3316Smrg 30376e7d3316Smrg # Figure out destination file name, if it wasn't already specified. 30386e7d3316Smrg if test -n "$destname"; then 30396e7d3316Smrg destfile="$destdir/$destname" 30406e7d3316Smrg else 30416e7d3316Smrg func_basename "$file" 30426e7d3316Smrg destfile="$func_basename_result" 30436e7d3316Smrg destfile="$destdir/$destfile" 30446e7d3316Smrg fi 30456e7d3316Smrg 30466e7d3316Smrg # Deduce the name of the destination old-style object file. 30476e7d3316Smrg case $destfile in 30486e7d3316Smrg *.lo) 30496e7d3316Smrg func_lo2o "$destfile" 30506e7d3316Smrg staticdest=$func_lo2o_result 3051a966c04fSmrg ;; 30526e7d3316Smrg *.$objext) 30536e7d3316Smrg staticdest="$destfile" 30546e7d3316Smrg destfile= 3055a966c04fSmrg ;; 30566e7d3316Smrg *) 30576e7d3316Smrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 3058a966c04fSmrg ;; 30596e7d3316Smrg esac 30606e7d3316Smrg 30616e7d3316Smrg # Install the libtool object if requested. 30626e7d3316Smrg test -n "$destfile" && \ 30636e7d3316Smrg func_show_eval "$install_prog $file $destfile" 'exit $?' 30646e7d3316Smrg 30656e7d3316Smrg # Install the old object if enabled. 30666e7d3316Smrg if test "$build_old_libs" = yes; then 30676e7d3316Smrg # Deduce the name of the old-style object file. 30686e7d3316Smrg func_lo2o "$file" 30696e7d3316Smrg staticobj=$func_lo2o_result 30706e7d3316Smrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 3071a966c04fSmrg fi 30726e7d3316Smrg exit $EXIT_SUCCESS 30736e7d3316Smrg ;; 3074a966c04fSmrg 30756e7d3316Smrg *) 30766e7d3316Smrg # Figure out destination file name, if it wasn't already specified. 30776e7d3316Smrg if test -n "$destname"; then 30786e7d3316Smrg destfile="$destdir/$destname" 3079a966c04fSmrg else 30806e7d3316Smrg func_basename "$file" 30816e7d3316Smrg destfile="$func_basename_result" 30826e7d3316Smrg destfile="$destdir/$destfile" 3083a966c04fSmrg fi 3084a966c04fSmrg 30856e7d3316Smrg # If the file is missing, and there is a .exe on the end, strip it 30866e7d3316Smrg # because it is most likely a libtool script we actually want to 30876e7d3316Smrg # install 30886e7d3316Smrg stripped_ext="" 30896e7d3316Smrg case $file in 30906e7d3316Smrg *.exe) 30916e7d3316Smrg if test ! -f "$file"; then 30926e7d3316Smrg func_stripname '' '.exe' "$file" 30936e7d3316Smrg file=$func_stripname_result 30946e7d3316Smrg stripped_ext=".exe" 30956e7d3316Smrg fi 30966e7d3316Smrg ;; 30976e7d3316Smrg esac 3098a966c04fSmrg 30996e7d3316Smrg # Do a test to see if this is really a libtool program. 31006e7d3316Smrg case $host in 31016e7d3316Smrg *cygwin* | *mingw*) 31026e7d3316Smrg if func_ltwrapper_executable_p "$file"; then 31036e7d3316Smrg func_ltwrapper_scriptname "$file" 31046e7d3316Smrg wrapper=$func_ltwrapper_scriptname_result 31056e7d3316Smrg else 31066e7d3316Smrg func_stripname '' '.exe' "$file" 31076e7d3316Smrg wrapper=$func_stripname_result 31086e7d3316Smrg fi 31096e7d3316Smrg ;; 31106e7d3316Smrg *) 31116e7d3316Smrg wrapper=$file 31126e7d3316Smrg ;; 31136e7d3316Smrg esac 31146e7d3316Smrg if func_ltwrapper_script_p "$wrapper"; then 31156e7d3316Smrg notinst_deplibs= 31166e7d3316Smrg relink_command= 3117a966c04fSmrg 31186e7d3316Smrg func_source "$wrapper" 3119a966c04fSmrg 31206e7d3316Smrg # Check the variables that should have been set. 31216e7d3316Smrg test -z "$generated_by_libtool_version" && \ 31226e7d3316Smrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 3123a966c04fSmrg 31246e7d3316Smrg finalize=yes 31256e7d3316Smrg for lib in $notinst_deplibs; do 31266e7d3316Smrg # Check to see that each library is installed. 31276e7d3316Smrg libdir= 31286e7d3316Smrg if test -f "$lib"; then 31296e7d3316Smrg func_source "$lib" 3130a966c04fSmrg fi 31316e7d3316Smrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 31326e7d3316Smrg if test -n "$libdir" && test ! -f "$libfile"; then 31336e7d3316Smrg func_warning "\`$lib' has not been installed in \`$libdir'" 31346e7d3316Smrg finalize=no 31356e7d3316Smrg fi 31366e7d3316Smrg done 3137a966c04fSmrg 31386e7d3316Smrg relink_command= 31396e7d3316Smrg func_source "$wrapper" 3140a966c04fSmrg 31416e7d3316Smrg outputname= 31426e7d3316Smrg if test "$fast_install" = no && test -n "$relink_command"; then 31436e7d3316Smrg $opt_dry_run || { 31446e7d3316Smrg if test "$finalize" = yes; then 31456e7d3316Smrg tmpdir=`func_mktempdir` 31466e7d3316Smrg func_basename "$file$stripped_ext" 31476e7d3316Smrg file="$func_basename_result" 31486e7d3316Smrg outputname="$tmpdir/$file" 31496e7d3316Smrg # Replace the output file specification. 31506e7d3316Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 31516e7d3316Smrg 31526e7d3316Smrg $opt_silent || { 31536e7d3316Smrg func_quote_for_expand "$relink_command" 31546e7d3316Smrg eval "func_echo $func_quote_for_expand_result" 31556e7d3316Smrg } 31566e7d3316Smrg if eval "$relink_command"; then : 31576e7d3316Smrg else 31586e7d3316Smrg func_error "error: relink \`$file' with the above command before installing it" 31596e7d3316Smrg $opt_dry_run || ${RM}r "$tmpdir" 31606e7d3316Smrg continue 31616e7d3316Smrg fi 31626e7d3316Smrg file="$outputname" 31636e7d3316Smrg else 31646e7d3316Smrg func_warning "cannot relink \`$file'" 31656e7d3316Smrg fi 31666e7d3316Smrg } 3167a966c04fSmrg else 31686e7d3316Smrg # Install the binary that we compiled earlier. 31696e7d3316Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 3170a966c04fSmrg fi 31716e7d3316Smrg fi 3172a966c04fSmrg 31736e7d3316Smrg # remove .exe since cygwin /usr/bin/install will append another 31746e7d3316Smrg # one anyway 31756e7d3316Smrg case $install_prog,$host in 31766e7d3316Smrg */usr/bin/install*,*cygwin*) 31776e7d3316Smrg case $file:$destfile in 31786e7d3316Smrg *.exe:*.exe) 31796e7d3316Smrg # this is ok 31806e7d3316Smrg ;; 31816e7d3316Smrg *.exe:*) 31826e7d3316Smrg destfile=$destfile.exe 31836e7d3316Smrg ;; 31846e7d3316Smrg *:*.exe) 31856e7d3316Smrg func_stripname '' '.exe' "$destfile" 31866e7d3316Smrg destfile=$func_stripname_result 31876e7d3316Smrg ;; 31886e7d3316Smrg esac 3189a966c04fSmrg ;; 3190a966c04fSmrg esac 31916e7d3316Smrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 31926e7d3316Smrg $opt_dry_run || if test -n "$outputname"; then 31936e7d3316Smrg ${RM}r "$tmpdir" 31946e7d3316Smrg fi 31956e7d3316Smrg ;; 31966e7d3316Smrg esac 31976e7d3316Smrg done 3198a966c04fSmrg 31996e7d3316Smrg for file in $staticlibs; do 32006e7d3316Smrg func_basename "$file" 32016e7d3316Smrg name="$func_basename_result" 32026e7d3316Smrg 32036e7d3316Smrg # Set up the ranlib parameters. 32046e7d3316Smrg oldlib="$destdir/$name" 3205ac92798bSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 3206ac92798bSmrg tool_oldlib=$func_to_tool_file_result 32076e7d3316Smrg 32086e7d3316Smrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 32096e7d3316Smrg 32106e7d3316Smrg if test -n "$stripme" && test -n "$old_striplib"; then 3211ac92798bSmrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 32126e7d3316Smrg fi 32136e7d3316Smrg 32146e7d3316Smrg # Do each command in the postinstall commands. 32156e7d3316Smrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 32166e7d3316Smrg done 32176e7d3316Smrg 32186e7d3316Smrg test -n "$future_libdirs" && \ 32196e7d3316Smrg func_warning "remember to run \`$progname --finish$future_libdirs'" 32206e7d3316Smrg 32216e7d3316Smrg if test -n "$current_libdirs"; then 32226e7d3316Smrg # Maybe just do a dry run. 32236e7d3316Smrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 32246e7d3316Smrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 32256e7d3316Smrg else 32266e7d3316Smrg exit $EXIT_SUCCESS 32276e7d3316Smrg fi 32286e7d3316Smrg} 32296e7d3316Smrg 323097cf2ee2Smrgtest "$opt_mode" = install && func_mode_install ${1+"$@"} 32316e7d3316Smrg 32326e7d3316Smrg 32336e7d3316Smrg# func_generate_dlsyms outputname originator pic_p 32346e7d3316Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with 32356e7d3316Smrg# a dlpreopen symbol table. 32366e7d3316Smrgfunc_generate_dlsyms () 32376e7d3316Smrg{ 32386e7d3316Smrg $opt_debug 32396e7d3316Smrg my_outputname="$1" 32406e7d3316Smrg my_originator="$2" 32416e7d3316Smrg my_pic_p="${3-no}" 32426e7d3316Smrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 32436e7d3316Smrg my_dlsyms= 32446e7d3316Smrg 32456e7d3316Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 32466e7d3316Smrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 32476e7d3316Smrg my_dlsyms="${my_outputname}S.c" 32486e7d3316Smrg else 32496e7d3316Smrg func_error "not configured to extract global symbols from dlpreopened files" 32506e7d3316Smrg fi 32516e7d3316Smrg fi 32526e7d3316Smrg 32536e7d3316Smrg if test -n "$my_dlsyms"; then 32546e7d3316Smrg case $my_dlsyms in 32556e7d3316Smrg "") ;; 32566e7d3316Smrg *.c) 32576e7d3316Smrg # Discover the nlist of each of the dlfiles. 32586e7d3316Smrg nlist="$output_objdir/${my_outputname}.nm" 32596e7d3316Smrg 32606e7d3316Smrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 32616e7d3316Smrg 32626e7d3316Smrg # Parse the name list into a source file. 32636e7d3316Smrg func_verbose "creating $output_objdir/$my_dlsyms" 32646e7d3316Smrg 32656e7d3316Smrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 32666e7d3316Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 32676e7d3316Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 32686e7d3316Smrg 32696e7d3316Smrg#ifdef __cplusplus 32706e7d3316Smrgextern \"C\" { 32716e7d3316Smrg#endif 32726e7d3316Smrg 32736e7d3316Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 32746e7d3316Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 32756e7d3316Smrg#endif 32766e7d3316Smrg 327797cf2ee2Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 327897cf2ee2Smrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 327997cf2ee2Smrg/* DATA imports from DLLs on WIN32 con't be const, because runtime 328097cf2ee2Smrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 328197cf2ee2Smrg# define LT_DLSYM_CONST 328297cf2ee2Smrg#elif defined(__osf__) 328397cf2ee2Smrg/* This system does not cope well with relocations in const data. */ 328497cf2ee2Smrg# define LT_DLSYM_CONST 328597cf2ee2Smrg#else 328697cf2ee2Smrg# define LT_DLSYM_CONST const 328797cf2ee2Smrg#endif 328897cf2ee2Smrg 32896e7d3316Smrg/* External symbol declarations for the compiler. */\ 32906e7d3316Smrg" 32916e7d3316Smrg 32926e7d3316Smrg if test "$dlself" = yes; then 32936e7d3316Smrg func_verbose "generating symbol list for \`$output'" 32946e7d3316Smrg 32956e7d3316Smrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 32966e7d3316Smrg 32976e7d3316Smrg # Add our own program objects to the symbol list. 32986e7d3316Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 32996e7d3316Smrg for progfile in $progfiles; do 330097cf2ee2Smrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 330197cf2ee2Smrg func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 330297cf2ee2Smrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 33036e7d3316Smrg done 33046e7d3316Smrg 33056e7d3316Smrg if test -n "$exclude_expsyms"; then 33066e7d3316Smrg $opt_dry_run || { 33076e7d3316Smrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 33086e7d3316Smrg eval '$MV "$nlist"T "$nlist"' 33096e7d3316Smrg } 3310a966c04fSmrg fi 33116e7d3316Smrg 33126e7d3316Smrg if test -n "$export_symbols_regex"; then 33136e7d3316Smrg $opt_dry_run || { 33146e7d3316Smrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 33156e7d3316Smrg eval '$MV "$nlist"T "$nlist"' 33166e7d3316Smrg } 33176e7d3316Smrg fi 33186e7d3316Smrg 33196e7d3316Smrg # Prepare the list of exported symbols 33206e7d3316Smrg if test -z "$export_symbols"; then 33216e7d3316Smrg export_symbols="$output_objdir/$outputname.exp" 33226e7d3316Smrg $opt_dry_run || { 33236e7d3316Smrg $RM $export_symbols 33246e7d3316Smrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 33256e7d3316Smrg case $host in 33266e7d3316Smrg *cygwin* | *mingw* | *cegcc* ) 33276e7d3316Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 33286e7d3316Smrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 33296e7d3316Smrg ;; 33306e7d3316Smrg esac 33316e7d3316Smrg } 3332a966c04fSmrg else 33336e7d3316Smrg $opt_dry_run || { 33346e7d3316Smrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 33356e7d3316Smrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 33366e7d3316Smrg eval '$MV "$nlist"T "$nlist"' 33376e7d3316Smrg case $host in 33386e7d3316Smrg *cygwin* | *mingw* | *cegcc* ) 33396e7d3316Smrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 33406e7d3316Smrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 33416e7d3316Smrg ;; 33426e7d3316Smrg esac 33436e7d3316Smrg } 3344a966c04fSmrg fi 33456e7d3316Smrg fi 3346a966c04fSmrg 33476e7d3316Smrg for dlprefile in $dlprefiles; do 33486e7d3316Smrg func_verbose "extracting global C symbols from \`$dlprefile'" 33496e7d3316Smrg func_basename "$dlprefile" 33506e7d3316Smrg name="$func_basename_result" 335197cf2ee2Smrg case $host in 335297cf2ee2Smrg *cygwin* | *mingw* | *cegcc* ) 335397cf2ee2Smrg # if an import library, we need to obtain dlname 335497cf2ee2Smrg if func_win32_import_lib_p "$dlprefile"; then 335597cf2ee2Smrg func_tr_sh "$dlprefile" 335697cf2ee2Smrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 335797cf2ee2Smrg dlprefile_dlbasename="" 335897cf2ee2Smrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 335997cf2ee2Smrg # Use subshell, to avoid clobbering current variable values 336097cf2ee2Smrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 336197cf2ee2Smrg if test -n "$dlprefile_dlname" ; then 336297cf2ee2Smrg func_basename "$dlprefile_dlname" 336397cf2ee2Smrg dlprefile_dlbasename="$func_basename_result" 336497cf2ee2Smrg else 336597cf2ee2Smrg # no lafile. user explicitly requested -dlpreopen <import library>. 336697cf2ee2Smrg $sharedlib_from_linklib_cmd "$dlprefile" 336797cf2ee2Smrg dlprefile_dlbasename=$sharedlib_from_linklib_result 336897cf2ee2Smrg fi 336997cf2ee2Smrg fi 337097cf2ee2Smrg $opt_dry_run || { 337197cf2ee2Smrg if test -n "$dlprefile_dlbasename" ; then 337297cf2ee2Smrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 337397cf2ee2Smrg else 337497cf2ee2Smrg func_warning "Could not compute DLL name from $name" 337597cf2ee2Smrg eval '$ECHO ": $name " >> "$nlist"' 337697cf2ee2Smrg fi 337797cf2ee2Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 337897cf2ee2Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 337997cf2ee2Smrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 338097cf2ee2Smrg } 338197cf2ee2Smrg else # not an import lib 338297cf2ee2Smrg $opt_dry_run || { 338397cf2ee2Smrg eval '$ECHO ": $name " >> "$nlist"' 338497cf2ee2Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 338597cf2ee2Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 338697cf2ee2Smrg } 338797cf2ee2Smrg fi 338897cf2ee2Smrg ;; 338997cf2ee2Smrg *) 339097cf2ee2Smrg $opt_dry_run || { 339197cf2ee2Smrg eval '$ECHO ": $name " >> "$nlist"' 339297cf2ee2Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 339397cf2ee2Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 339497cf2ee2Smrg } 339597cf2ee2Smrg ;; 339697cf2ee2Smrg esac 33976e7d3316Smrg done 33986e7d3316Smrg 33996e7d3316Smrg $opt_dry_run || { 34006e7d3316Smrg # Make sure we have at least an empty file. 34016e7d3316Smrg test -f "$nlist" || : > "$nlist" 34026e7d3316Smrg 34036e7d3316Smrg if test -n "$exclude_expsyms"; then 34046e7d3316Smrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 34056e7d3316Smrg $MV "$nlist"T "$nlist" 3406a966c04fSmrg fi 34076e7d3316Smrg 34086e7d3316Smrg # Try sorting and uniquifying the output. 34096e7d3316Smrg if $GREP -v "^: " < "$nlist" | 34106e7d3316Smrg if sort -k 3 </dev/null >/dev/null 2>&1; then 34116e7d3316Smrg sort -k 3 34126e7d3316Smrg else 34136e7d3316Smrg sort +2 34146e7d3316Smrg fi | 34156e7d3316Smrg uniq > "$nlist"S; then 34166e7d3316Smrg : 3417a966c04fSmrg else 34186e7d3316Smrg $GREP -v "^: " < "$nlist" > "$nlist"S 3419a966c04fSmrg fi 3420a966c04fSmrg 34216e7d3316Smrg if test -f "$nlist"S; then 34226e7d3316Smrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 3423a966c04fSmrg else 34246e7d3316Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 3425a966c04fSmrg fi 3426a966c04fSmrg 34276e7d3316Smrg echo >> "$output_objdir/$my_dlsyms" "\ 3428a966c04fSmrg 34296e7d3316Smrg/* The mapping between symbol names and symbols. */ 34306e7d3316Smrgtypedef struct { 34316e7d3316Smrg const char *name; 34326e7d3316Smrg void *address; 34336e7d3316Smrg} lt_dlsymlist; 343497cf2ee2Smrgextern LT_DLSYM_CONST lt_dlsymlist 34356e7d3316Smrglt_${my_prefix}_LTX_preloaded_symbols[]; 343697cf2ee2SmrgLT_DLSYM_CONST lt_dlsymlist 34376e7d3316Smrglt_${my_prefix}_LTX_preloaded_symbols[] = 34386e7d3316Smrg{\ 34396e7d3316Smrg { \"$my_originator\", (void *) 0 }," 3440a966c04fSmrg 34416e7d3316Smrg case $need_lib_prefix in 34426e7d3316Smrg no) 34436e7d3316Smrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 34446e7d3316Smrg ;; 34456e7d3316Smrg *) 34466e7d3316Smrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 34476e7d3316Smrg ;; 34486e7d3316Smrg esac 34496e7d3316Smrg echo >> "$output_objdir/$my_dlsyms" "\ 34506e7d3316Smrg {0, (void *) 0} 34516e7d3316Smrg}; 3452a966c04fSmrg 34536e7d3316Smrg/* This works around a problem in FreeBSD linker */ 34546e7d3316Smrg#ifdef FREEBSD_WORKAROUND 34556e7d3316Smrgstatic const void *lt_preloaded_setup() { 34566e7d3316Smrg return lt_${my_prefix}_LTX_preloaded_symbols; 34576e7d3316Smrg} 34586e7d3316Smrg#endif 3459a966c04fSmrg 34606e7d3316Smrg#ifdef __cplusplus 34616e7d3316Smrg} 34626e7d3316Smrg#endif\ 34636e7d3316Smrg" 34646e7d3316Smrg } # !$opt_dry_run 3465a966c04fSmrg 34666e7d3316Smrg pic_flag_for_symtable= 34676e7d3316Smrg case "$compile_command " in 34686e7d3316Smrg *" -static "*) ;; 34696e7d3316Smrg *) 34706e7d3316Smrg case $host in 34716e7d3316Smrg # compiling the symbol table file with pic_flag works around 34726e7d3316Smrg # a FreeBSD bug that causes programs to crash when -lm is 34736e7d3316Smrg # linked before any other PIC object. But we must not use 34746e7d3316Smrg # pic_flag when linking with -static. The problem exists in 34756e7d3316Smrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 3476ac92798bSmrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 34776e7d3316Smrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 34786e7d3316Smrg *-*-hpux*) 34796e7d3316Smrg pic_flag_for_symtable=" $pic_flag" ;; 34806e7d3316Smrg *) 34816e7d3316Smrg if test "X$my_pic_p" != Xno; then 34826e7d3316Smrg pic_flag_for_symtable=" $pic_flag" 34836e7d3316Smrg fi 34846e7d3316Smrg ;; 34856e7d3316Smrg esac 34866e7d3316Smrg ;; 34876e7d3316Smrg esac 34886e7d3316Smrg symtab_cflags= 34896e7d3316Smrg for arg in $LTCFLAGS; do 34906e7d3316Smrg case $arg in 34916e7d3316Smrg -pie | -fpie | -fPIE) ;; 349297cf2ee2Smrg *) func_append symtab_cflags " $arg" ;; 34936e7d3316Smrg esac 34946e7d3316Smrg done 3495a966c04fSmrg 34966e7d3316Smrg # Now compile the dynamic symbol file. 34976e7d3316Smrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 3498a966c04fSmrg 34996e7d3316Smrg # Clean up the generated files. 35006e7d3316Smrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 3501a966c04fSmrg 35026e7d3316Smrg # Transform the symbol file into the correct name. 35036e7d3316Smrg symfileobj="$output_objdir/${my_outputname}S.$objext" 35046e7d3316Smrg case $host in 35056e7d3316Smrg *cygwin* | *mingw* | *cegcc* ) 35066e7d3316Smrg if test -f "$output_objdir/$my_outputname.def"; then 35076e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 35086e7d3316Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 35096e7d3316Smrg else 35106e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35116e7d3316Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35126e7d3316Smrg fi 35136e7d3316Smrg ;; 35146e7d3316Smrg *) 35156e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35166e7d3316Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35176e7d3316Smrg ;; 35186e7d3316Smrg esac 35196e7d3316Smrg ;; 35206e7d3316Smrg *) 35216e7d3316Smrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 35226e7d3316Smrg ;; 35236e7d3316Smrg esac 35246e7d3316Smrg else 35256e7d3316Smrg # We keep going just in case the user didn't refer to 35266e7d3316Smrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 35276e7d3316Smrg # really was required. 3528a966c04fSmrg 35296e7d3316Smrg # Nullify the symbol file. 35306e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 35316e7d3316Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 35326e7d3316Smrg fi 35336e7d3316Smrg} 3534a966c04fSmrg 35356e7d3316Smrg# func_win32_libid arg 35366e7d3316Smrg# return the library type of file 'arg' 35376e7d3316Smrg# 35386e7d3316Smrg# Need a lot of goo to handle *both* DLLs and import libs 35396e7d3316Smrg# Has to be a shell function in order to 'eat' the argument 35406e7d3316Smrg# that is supplied when $file_magic_command is called. 35416e7d3316Smrg# Despite the name, also deal with 64 bit binaries. 35426e7d3316Smrgfunc_win32_libid () 35436e7d3316Smrg{ 35446e7d3316Smrg $opt_debug 35456e7d3316Smrg win32_libid_type="unknown" 35466e7d3316Smrg win32_fileres=`file -L $1 2>/dev/null` 35476e7d3316Smrg case $win32_fileres in 35486e7d3316Smrg *ar\ archive\ import\ library*) # definitely import 35496e7d3316Smrg win32_libid_type="x86 archive import" 35506e7d3316Smrg ;; 35516e7d3316Smrg *ar\ archive*) # could be an import, or static 35526e7d3316Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 35536e7d3316Smrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 35546e7d3316Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 355597cf2ee2Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 355697cf2ee2Smrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 35576e7d3316Smrg $SED -n -e ' 35586e7d3316Smrg 1,100{ 35596e7d3316Smrg / I /{ 35606e7d3316Smrg s,.*,import, 35616e7d3316Smrg p 35626e7d3316Smrg q 35636e7d3316Smrg } 35646e7d3316Smrg }'` 35656e7d3316Smrg case $win32_nmres in 35666e7d3316Smrg import*) win32_libid_type="x86 archive import";; 35676e7d3316Smrg *) win32_libid_type="x86 archive static";; 35686e7d3316Smrg esac 35696e7d3316Smrg fi 35706e7d3316Smrg ;; 35716e7d3316Smrg *DLL*) 35726e7d3316Smrg win32_libid_type="x86 DLL" 35736e7d3316Smrg ;; 35746e7d3316Smrg *executable*) # but shell scripts are "executable" too... 35756e7d3316Smrg case $win32_fileres in 35766e7d3316Smrg *MS\ Windows\ PE\ Intel*) 35776e7d3316Smrg win32_libid_type="x86 DLL" 35786e7d3316Smrg ;; 35796e7d3316Smrg esac 35806e7d3316Smrg ;; 35816e7d3316Smrg esac 35826e7d3316Smrg $ECHO "$win32_libid_type" 35836e7d3316Smrg} 3584a966c04fSmrg 358597cf2ee2Smrg# func_cygming_dll_for_implib ARG 358697cf2ee2Smrg# 358797cf2ee2Smrg# Platform-specific function to extract the 358897cf2ee2Smrg# name of the DLL associated with the specified 358997cf2ee2Smrg# import library ARG. 359097cf2ee2Smrg# Invoked by eval'ing the libtool variable 359197cf2ee2Smrg# $sharedlib_from_linklib_cmd 359297cf2ee2Smrg# Result is available in the variable 359397cf2ee2Smrg# $sharedlib_from_linklib_result 359497cf2ee2Smrgfunc_cygming_dll_for_implib () 359597cf2ee2Smrg{ 359697cf2ee2Smrg $opt_debug 359797cf2ee2Smrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 359897cf2ee2Smrg} 359997cf2ee2Smrg 360097cf2ee2Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 360197cf2ee2Smrg# 360297cf2ee2Smrg# The is the core of a fallback implementation of a 360397cf2ee2Smrg# platform-specific function to extract the name of the 360497cf2ee2Smrg# DLL associated with the specified import library LIBNAME. 360597cf2ee2Smrg# 360697cf2ee2Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending 360797cf2ee2Smrg# on the platform and compiler that created the implib. 360897cf2ee2Smrg# 360997cf2ee2Smrg# Echos the name of the DLL associated with the 361097cf2ee2Smrg# specified import library. 361197cf2ee2Smrgfunc_cygming_dll_for_implib_fallback_core () 361297cf2ee2Smrg{ 361397cf2ee2Smrg $opt_debug 361497cf2ee2Smrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 361597cf2ee2Smrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 361697cf2ee2Smrg $SED '/^Contents of section '"$match_literal"':/{ 361797cf2ee2Smrg # Place marker at beginning of archive member dllname section 361897cf2ee2Smrg s/.*/====MARK====/ 361997cf2ee2Smrg p 362097cf2ee2Smrg d 362197cf2ee2Smrg } 362297cf2ee2Smrg # These lines can sometimes be longer than 43 characters, but 362397cf2ee2Smrg # are always uninteresting 362497cf2ee2Smrg /:[ ]*file format pe[i]\{,1\}-/d 362597cf2ee2Smrg /^In archive [^:]*:/d 362697cf2ee2Smrg # Ensure marker is printed 362797cf2ee2Smrg /^====MARK====/p 362897cf2ee2Smrg # Remove all lines with less than 43 characters 362997cf2ee2Smrg /^.\{43\}/!d 363097cf2ee2Smrg # From remaining lines, remove first 43 characters 363197cf2ee2Smrg s/^.\{43\}//' | 363297cf2ee2Smrg $SED -n ' 363397cf2ee2Smrg # Join marker and all lines until next marker into a single line 363497cf2ee2Smrg /^====MARK====/ b para 363597cf2ee2Smrg H 363697cf2ee2Smrg $ b para 363797cf2ee2Smrg b 363897cf2ee2Smrg :para 363997cf2ee2Smrg x 364097cf2ee2Smrg s/\n//g 364197cf2ee2Smrg # Remove the marker 364297cf2ee2Smrg s/^====MARK====// 364397cf2ee2Smrg # Remove trailing dots and whitespace 364497cf2ee2Smrg s/[\. \t]*$// 364597cf2ee2Smrg # Print 364697cf2ee2Smrg /./p' | 364797cf2ee2Smrg # we now have a list, one entry per line, of the stringified 364897cf2ee2Smrg # contents of the appropriate section of all members of the 364997cf2ee2Smrg # archive which possess that section. Heuristic: eliminate 365097cf2ee2Smrg # all those which have a first or second character that is 365197cf2ee2Smrg # a '.' (that is, objdump's representation of an unprintable 365297cf2ee2Smrg # character.) This should work for all archives with less than 365397cf2ee2Smrg # 0x302f exports -- but will fail for DLLs whose name actually 365497cf2ee2Smrg # begins with a literal '.' or a single character followed by 365597cf2ee2Smrg # a '.'. 365697cf2ee2Smrg # 365797cf2ee2Smrg # Of those that remain, print the first one. 365897cf2ee2Smrg $SED -e '/^\./d;/^.\./d;q' 365997cf2ee2Smrg} 366097cf2ee2Smrg 366197cf2ee2Smrg# func_cygming_gnu_implib_p ARG 366297cf2ee2Smrg# This predicate returns with zero status (TRUE) if 366397cf2ee2Smrg# ARG is a GNU/binutils-style import library. Returns 366497cf2ee2Smrg# with nonzero status (FALSE) otherwise. 366597cf2ee2Smrgfunc_cygming_gnu_implib_p () 366697cf2ee2Smrg{ 366797cf2ee2Smrg $opt_debug 366897cf2ee2Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 366997cf2ee2Smrg 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)$'` 367097cf2ee2Smrg test -n "$func_cygming_gnu_implib_tmp" 367197cf2ee2Smrg} 367297cf2ee2Smrg 367397cf2ee2Smrg# func_cygming_ms_implib_p ARG 367497cf2ee2Smrg# This predicate returns with zero status (TRUE) if 367597cf2ee2Smrg# ARG is an MS-style import library. Returns 367697cf2ee2Smrg# with nonzero status (FALSE) otherwise. 367797cf2ee2Smrgfunc_cygming_ms_implib_p () 367897cf2ee2Smrg{ 367997cf2ee2Smrg $opt_debug 368097cf2ee2Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 368197cf2ee2Smrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 368297cf2ee2Smrg test -n "$func_cygming_ms_implib_tmp" 368397cf2ee2Smrg} 368497cf2ee2Smrg 368597cf2ee2Smrg# func_cygming_dll_for_implib_fallback ARG 368697cf2ee2Smrg# Platform-specific function to extract the 368797cf2ee2Smrg# name of the DLL associated with the specified 368897cf2ee2Smrg# import library ARG. 368997cf2ee2Smrg# 369097cf2ee2Smrg# This fallback implementation is for use when $DLLTOOL 369197cf2ee2Smrg# does not support the --identify-strict option. 369297cf2ee2Smrg# Invoked by eval'ing the libtool variable 369397cf2ee2Smrg# $sharedlib_from_linklib_cmd 369497cf2ee2Smrg# Result is available in the variable 369597cf2ee2Smrg# $sharedlib_from_linklib_result 369697cf2ee2Smrgfunc_cygming_dll_for_implib_fallback () 369797cf2ee2Smrg{ 369897cf2ee2Smrg $opt_debug 369997cf2ee2Smrg if func_cygming_gnu_implib_p "$1" ; then 370097cf2ee2Smrg # binutils import library 370197cf2ee2Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 370297cf2ee2Smrg elif func_cygming_ms_implib_p "$1" ; then 370397cf2ee2Smrg # ms-generated import library 370497cf2ee2Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 370597cf2ee2Smrg else 370697cf2ee2Smrg # unknown 370797cf2ee2Smrg sharedlib_from_linklib_result="" 370897cf2ee2Smrg fi 370997cf2ee2Smrg} 3710a966c04fSmrg 3711a966c04fSmrg 37126e7d3316Smrg# func_extract_an_archive dir oldlib 37136e7d3316Smrgfunc_extract_an_archive () 37146e7d3316Smrg{ 37156e7d3316Smrg $opt_debug 37166e7d3316Smrg f_ex_an_ar_dir="$1"; shift 37176e7d3316Smrg f_ex_an_ar_oldlib="$1" 37186e7d3316Smrg if test "$lock_old_archive_extraction" = yes; then 37196e7d3316Smrg lockfile=$f_ex_an_ar_oldlib.lock 37206e7d3316Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 37216e7d3316Smrg func_echo "Waiting for $lockfile to be removed" 37226e7d3316Smrg sleep 2 37236e7d3316Smrg done 37246e7d3316Smrg fi 37256e7d3316Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 37266e7d3316Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 37276e7d3316Smrg if test "$lock_old_archive_extraction" = yes; then 37286e7d3316Smrg $opt_dry_run || rm -f "$lockfile" 37296e7d3316Smrg fi 37306e7d3316Smrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 37316e7d3316Smrg : 37326e7d3316Smrg else 37336e7d3316Smrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 37346e7d3316Smrg fi 37356e7d3316Smrg} 3736a966c04fSmrg 3737a966c04fSmrg 37386e7d3316Smrg# func_extract_archives gentop oldlib ... 37396e7d3316Smrgfunc_extract_archives () 37406e7d3316Smrg{ 37416e7d3316Smrg $opt_debug 37426e7d3316Smrg my_gentop="$1"; shift 37436e7d3316Smrg my_oldlibs=${1+"$@"} 37446e7d3316Smrg my_oldobjs="" 37456e7d3316Smrg my_xlib="" 37466e7d3316Smrg my_xabs="" 37476e7d3316Smrg my_xdir="" 3748a966c04fSmrg 37496e7d3316Smrg for my_xlib in $my_oldlibs; do 37506e7d3316Smrg # Extract the objects. 37516e7d3316Smrg case $my_xlib in 37526e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 37536e7d3316Smrg *) my_xabs=`pwd`"/$my_xlib" ;; 37546e7d3316Smrg esac 37556e7d3316Smrg func_basename "$my_xlib" 37566e7d3316Smrg my_xlib="$func_basename_result" 37576e7d3316Smrg my_xlib_u=$my_xlib 37586e7d3316Smrg while :; do 37596e7d3316Smrg case " $extracted_archives " in 37606e7d3316Smrg *" $my_xlib_u "*) 37616e7d3316Smrg func_arith $extracted_serial + 1 37626e7d3316Smrg extracted_serial=$func_arith_result 37636e7d3316Smrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 37646e7d3316Smrg *) break ;; 37656e7d3316Smrg esac 37666e7d3316Smrg done 37676e7d3316Smrg extracted_archives="$extracted_archives $my_xlib_u" 37686e7d3316Smrg my_xdir="$my_gentop/$my_xlib_u" 3769a966c04fSmrg 37706e7d3316Smrg func_mkdir_p "$my_xdir" 37716e7d3316Smrg 37726e7d3316Smrg case $host in 37736e7d3316Smrg *-darwin*) 37746e7d3316Smrg func_verbose "Extracting $my_xabs" 37756e7d3316Smrg # Do not bother doing anything if just a dry run 37766e7d3316Smrg $opt_dry_run || { 37776e7d3316Smrg darwin_orig_dir=`pwd` 37786e7d3316Smrg cd $my_xdir || exit $? 37796e7d3316Smrg darwin_archive=$my_xabs 37806e7d3316Smrg darwin_curdir=`pwd` 37816e7d3316Smrg darwin_base_archive=`basename "$darwin_archive"` 37826e7d3316Smrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 37836e7d3316Smrg if test -n "$darwin_arches"; then 37846e7d3316Smrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 37856e7d3316Smrg darwin_arch= 37866e7d3316Smrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 37876e7d3316Smrg for darwin_arch in $darwin_arches ; do 37886e7d3316Smrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 37896e7d3316Smrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 37906e7d3316Smrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 37916e7d3316Smrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 37926e7d3316Smrg cd "$darwin_curdir" 37936e7d3316Smrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 37946e7d3316Smrg done # $darwin_arches 37956e7d3316Smrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 37966e7d3316Smrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 37976e7d3316Smrg darwin_file= 37986e7d3316Smrg darwin_files= 37996e7d3316Smrg for darwin_file in $darwin_filelist; do 38006e7d3316Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 38016e7d3316Smrg $LIPO -create -output "$darwin_file" $darwin_files 38026e7d3316Smrg done # $darwin_filelist 38036e7d3316Smrg $RM -rf unfat-$$ 38046e7d3316Smrg cd "$darwin_orig_dir" 3805a966c04fSmrg else 38066e7d3316Smrg cd $darwin_orig_dir 38076e7d3316Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 38086e7d3316Smrg fi # $darwin_arches 38096e7d3316Smrg } # !$opt_dry_run 38106e7d3316Smrg ;; 38116e7d3316Smrg *) 38126e7d3316Smrg func_extract_an_archive "$my_xdir" "$my_xabs" 38136e7d3316Smrg ;; 38146e7d3316Smrg esac 38156e7d3316Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 38166e7d3316Smrg done 3817a966c04fSmrg 38186e7d3316Smrg func_extract_archives_result="$my_oldobjs" 38196e7d3316Smrg} 3820a966c04fSmrg 3821a966c04fSmrg 38226e7d3316Smrg# func_emit_wrapper [arg=no] 38236e7d3316Smrg# 38246e7d3316Smrg# Emit a libtool wrapper script on stdout. 38256e7d3316Smrg# Don't directly open a file because we may want to 38266e7d3316Smrg# incorporate the script contents within a cygwin/mingw 38276e7d3316Smrg# wrapper executable. Must ONLY be called from within 38286e7d3316Smrg# func_mode_link because it depends on a number of variables 38296e7d3316Smrg# set therein. 38306e7d3316Smrg# 38316e7d3316Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 38326e7d3316Smrg# variable will take. If 'yes', then the emitted script 38336e7d3316Smrg# will assume that the directory in which it is stored is 38346e7d3316Smrg# the $objdir directory. This is a cygwin/mingw-specific 38356e7d3316Smrg# behavior. 38366e7d3316Smrgfunc_emit_wrapper () 38376e7d3316Smrg{ 38386e7d3316Smrg func_emit_wrapper_arg1=${1-no} 3839a966c04fSmrg 38406e7d3316Smrg $ECHO "\ 38416e7d3316Smrg#! $SHELL 3842a966c04fSmrg 38436e7d3316Smrg# $output - temporary wrapper script for $objdir/$outputname 38446e7d3316Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 38456e7d3316Smrg# 38466e7d3316Smrg# The $output program cannot be directly executed until all the libtool 38476e7d3316Smrg# libraries that it depends on are installed. 38486e7d3316Smrg# 38496e7d3316Smrg# This wrapper script should never be moved out of the build directory. 38506e7d3316Smrg# If it is, it will not operate correctly. 3851a966c04fSmrg 38526e7d3316Smrg# Sed substitution that helps us do robust quoting. It backslashifies 38536e7d3316Smrg# metacharacters that are still active within double-quoted strings. 38546e7d3316Smrgsed_quote_subst='$sed_quote_subst' 3855a966c04fSmrg 38566e7d3316Smrg# Be Bourne compatible 38576e7d3316Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 38586e7d3316Smrg emulate sh 38596e7d3316Smrg NULLCMD=: 38606e7d3316Smrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 38616e7d3316Smrg # is contrary to our usage. Disable this feature. 38626e7d3316Smrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 38636e7d3316Smrg setopt NO_GLOB_SUBST 38646e7d3316Smrgelse 38656e7d3316Smrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 38666e7d3316Smrgfi 38676e7d3316SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 38686e7d3316SmrgDUALCASE=1; export DUALCASE # for MKS sh 3869a966c04fSmrg 38706e7d3316Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout 38716e7d3316Smrg# if CDPATH is set. 38726e7d3316Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 3873a966c04fSmrg 38746e7d3316Smrgrelink_command=\"$relink_command\" 3875a966c04fSmrg 38766e7d3316Smrg# This environment variable determines our operation mode. 38776e7d3316Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then 38786e7d3316Smrg # install mode needs the following variables: 38796e7d3316Smrg generated_by_libtool_version='$macro_version' 38806e7d3316Smrg notinst_deplibs='$notinst_deplibs' 38816e7d3316Smrgelse 38826e7d3316Smrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 38836e7d3316Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 38846e7d3316Smrg file=\"\$0\"" 3885a966c04fSmrg 38866e7d3316Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 38876e7d3316Smrg $ECHO "\ 3888a966c04fSmrg 38896e7d3316Smrg# A function that is used when there is no print builtin or printf. 38906e7d3316Smrgfunc_fallback_echo () 38916e7d3316Smrg{ 38926e7d3316Smrg eval 'cat <<_LTECHO_EOF 38936e7d3316Smrg\$1 38946e7d3316Smrg_LTECHO_EOF' 38956e7d3316Smrg} 38966e7d3316Smrg ECHO=\"$qECHO\" 38976e7d3316Smrg fi 38986e7d3316Smrg 38996e7d3316Smrg# Very basic option parsing. These options are (a) specific to 39006e7d3316Smrg# the libtool wrapper, (b) are identical between the wrapper 39016e7d3316Smrg# /script/ and the wrapper /executable/ which is used only on 39026e7d3316Smrg# windows platforms, and (c) all begin with the string "--lt-" 39036e7d3316Smrg# (application programs are unlikely to have options which match 39046e7d3316Smrg# this pattern). 39056e7d3316Smrg# 39066e7d3316Smrg# There are only two supported options: --lt-debug and 39076e7d3316Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 39086e7d3316Smrg# 39096e7d3316Smrg# The first argument to this parsing function should be the 39106e7d3316Smrg# script's $0 value, followed by "$@". 39116e7d3316Smrglt_option_debug= 39126e7d3316Smrgfunc_parse_lt_options () 39136e7d3316Smrg{ 39146e7d3316Smrg lt_script_arg0=\$0 39156e7d3316Smrg shift 39166e7d3316Smrg for lt_opt 39176e7d3316Smrg do 39186e7d3316Smrg case \"\$lt_opt\" in 39196e7d3316Smrg --lt-debug) lt_option_debug=1 ;; 39206e7d3316Smrg --lt-dump-script) 39216e7d3316Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 39226e7d3316Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 39236e7d3316Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 39246e7d3316Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 39256e7d3316Smrg exit 0 39266e7d3316Smrg ;; 39276e7d3316Smrg --lt-*) 39286e7d3316Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 39296e7d3316Smrg exit 1 3930a966c04fSmrg ;; 39316e7d3316Smrg esac 39326e7d3316Smrg done 3933a966c04fSmrg 39346e7d3316Smrg # Print the debug banner immediately: 39356e7d3316Smrg if test -n \"\$lt_option_debug\"; then 39366e7d3316Smrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 39376e7d3316Smrg fi 39386e7d3316Smrg} 3939a966c04fSmrg 39406e7d3316Smrg# Used when --lt-debug. Prints its arguments to stdout 39416e7d3316Smrg# (redirection is the responsibility of the caller) 39426e7d3316Smrgfunc_lt_dump_args () 39436e7d3316Smrg{ 39446e7d3316Smrg lt_dump_args_N=1; 39456e7d3316Smrg for lt_arg 39466e7d3316Smrg do 39476e7d3316Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 39486e7d3316Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 39496e7d3316Smrg done 39506e7d3316Smrg} 3951a966c04fSmrg 39526e7d3316Smrg# Core function for launching the target application 39536e7d3316Smrgfunc_exec_program_core () 39546e7d3316Smrg{ 39556e7d3316Smrg" 39566e7d3316Smrg case $host in 39576e7d3316Smrg # Backslashes separate directories on plain windows 39586e7d3316Smrg *-*-mingw | *-*-os2* | *-cegcc*) 39596e7d3316Smrg $ECHO "\ 39606e7d3316Smrg if test -n \"\$lt_option_debug\"; then 39616e7d3316Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 39626e7d3316Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3963a966c04fSmrg fi 39646e7d3316Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 39656e7d3316Smrg" 39666e7d3316Smrg ;; 3967a966c04fSmrg 39686e7d3316Smrg *) 39696e7d3316Smrg $ECHO "\ 39706e7d3316Smrg if test -n \"\$lt_option_debug\"; then 39716e7d3316Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 39726e7d3316Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 3973a966c04fSmrg fi 39746e7d3316Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 39756e7d3316Smrg" 39766e7d3316Smrg ;; 39776e7d3316Smrg esac 39786e7d3316Smrg $ECHO "\ 39796e7d3316Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 39806e7d3316Smrg exit 1 39816e7d3316Smrg} 3982a966c04fSmrg 39836e7d3316Smrg# A function to encapsulate launching the target application 39846e7d3316Smrg# Strips options in the --lt-* namespace from \$@ and 39856e7d3316Smrg# launches target application with the remaining arguments. 39866e7d3316Smrgfunc_exec_program () 39876e7d3316Smrg{ 3988ac92798bSmrg case \" \$* \" in 3989ac92798bSmrg *\\ --lt-*) 3990ac92798bSmrg for lt_wr_arg 3991ac92798bSmrg do 3992ac92798bSmrg case \$lt_wr_arg in 3993ac92798bSmrg --lt-*) ;; 3994ac92798bSmrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 3995ac92798bSmrg esac 3996ac92798bSmrg shift 3997ac92798bSmrg done ;; 3998ac92798bSmrg esac 39996e7d3316Smrg func_exec_program_core \${1+\"\$@\"} 40006e7d3316Smrg} 4001a966c04fSmrg 40026e7d3316Smrg # Parse options 40036e7d3316Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 4004a966c04fSmrg 40056e7d3316Smrg # Find the directory that this script lives in. 40066e7d3316Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 40076e7d3316Smrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 4008a966c04fSmrg 40096e7d3316Smrg # Follow symbolic links until we get to the real thisdir. 40106e7d3316Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 40116e7d3316Smrg while test -n \"\$file\"; do 40126e7d3316Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 4013a966c04fSmrg 40146e7d3316Smrg # If there was a directory component, then change thisdir. 40156e7d3316Smrg if test \"x\$destdir\" != \"x\$file\"; then 40166e7d3316Smrg case \"\$destdir\" in 40176e7d3316Smrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 40186e7d3316Smrg *) thisdir=\"\$thisdir/\$destdir\" ;; 40196e7d3316Smrg esac 40206e7d3316Smrg fi 4021a966c04fSmrg 40226e7d3316Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 40236e7d3316Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 40246e7d3316Smrg done 4025a966c04fSmrg 40266e7d3316Smrg # Usually 'no', except on cygwin/mingw when embedded into 40276e7d3316Smrg # the cwrapper. 40286e7d3316Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 40296e7d3316Smrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 40306e7d3316Smrg # special case for '.' 40316e7d3316Smrg if test \"\$thisdir\" = \".\"; then 40326e7d3316Smrg thisdir=\`pwd\` 40336e7d3316Smrg fi 40346e7d3316Smrg # remove .libs from thisdir 40356e7d3316Smrg case \"\$thisdir\" in 40366e7d3316Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 40376e7d3316Smrg $objdir ) thisdir=. ;; 40386e7d3316Smrg esac 40396e7d3316Smrg fi 4040a966c04fSmrg 40416e7d3316Smrg # Try to get the absolute directory name. 40426e7d3316Smrg absdir=\`cd \"\$thisdir\" && pwd\` 40436e7d3316Smrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 40446e7d3316Smrg" 4045a966c04fSmrg 40466e7d3316Smrg if test "$fast_install" = yes; then 40476e7d3316Smrg $ECHO "\ 40486e7d3316Smrg program=lt-'$outputname'$exeext 40496e7d3316Smrg progdir=\"\$thisdir/$objdir\" 4050a966c04fSmrg 40516e7d3316Smrg if test ! -f \"\$progdir/\$program\" || 40526e7d3316Smrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 40536e7d3316Smrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 4054a966c04fSmrg 40556e7d3316Smrg file=\"\$\$-\$program\" 4056a966c04fSmrg 40576e7d3316Smrg if test ! -d \"\$progdir\"; then 40586e7d3316Smrg $MKDIR \"\$progdir\" 40596e7d3316Smrg else 40606e7d3316Smrg $RM \"\$progdir/\$file\" 40616e7d3316Smrg fi" 4062a966c04fSmrg 40636e7d3316Smrg $ECHO "\ 4064a966c04fSmrg 40656e7d3316Smrg # relink executable if necessary 40666e7d3316Smrg if test -n \"\$relink_command\"; then 40676e7d3316Smrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 40686e7d3316Smrg else 40696e7d3316Smrg $ECHO \"\$relink_command_output\" >&2 40706e7d3316Smrg $RM \"\$progdir/\$file\" 40716e7d3316Smrg exit 1 40726e7d3316Smrg fi 40736e7d3316Smrg fi 4074a966c04fSmrg 40756e7d3316Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 40766e7d3316Smrg { $RM \"\$progdir/\$program\"; 40776e7d3316Smrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 40786e7d3316Smrg $RM \"\$progdir/\$file\" 40796e7d3316Smrg fi" 40806e7d3316Smrg else 40816e7d3316Smrg $ECHO "\ 40826e7d3316Smrg program='$outputname' 40836e7d3316Smrg progdir=\"\$thisdir/$objdir\" 40846e7d3316Smrg" 40856e7d3316Smrg fi 4086a966c04fSmrg 40876e7d3316Smrg $ECHO "\ 4088a966c04fSmrg 40896e7d3316Smrg if test -f \"\$progdir/\$program\"; then" 4090a966c04fSmrg 409197cf2ee2Smrg # fixup the dll searchpath if we need to. 409297cf2ee2Smrg # 409397cf2ee2Smrg # Fix the DLL searchpath if we need to. Do this before prepending 409497cf2ee2Smrg # to shlibpath, because on Windows, both are PATH and uninstalled 409597cf2ee2Smrg # libraries must come first. 409697cf2ee2Smrg if test -n "$dllsearchpath"; then 409797cf2ee2Smrg $ECHO "\ 409897cf2ee2Smrg # Add the dll search path components to the executable PATH 409997cf2ee2Smrg PATH=$dllsearchpath:\$PATH 410097cf2ee2Smrg" 410197cf2ee2Smrg fi 410297cf2ee2Smrg 41036e7d3316Smrg # Export our shlibpath_var if we have one. 41046e7d3316Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 41056e7d3316Smrg $ECHO "\ 41066e7d3316Smrg # Add our own library path to $shlibpath_var 41076e7d3316Smrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 4108a966c04fSmrg 41096e7d3316Smrg # Some systems cannot cope with colon-terminated $shlibpath_var 41106e7d3316Smrg # The second colon is a workaround for a bug in BeOS R4 sed 41116e7d3316Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 4112a966c04fSmrg 41136e7d3316Smrg export $shlibpath_var 41146e7d3316Smrg" 41156e7d3316Smrg fi 4116a966c04fSmrg 41176e7d3316Smrg $ECHO "\ 41186e7d3316Smrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 41196e7d3316Smrg # Run the actual program with our arguments. 41206e7d3316Smrg func_exec_program \${1+\"\$@\"} 41216e7d3316Smrg fi 41226e7d3316Smrg else 41236e7d3316Smrg # The program doesn't exist. 41246e7d3316Smrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 41256e7d3316Smrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 41266e7d3316Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 41276e7d3316Smrg exit 1 41286e7d3316Smrg fi 41296e7d3316Smrgfi\ 41306e7d3316Smrg" 41316e7d3316Smrg} 4132a966c04fSmrg 4133a966c04fSmrg 41346e7d3316Smrg# func_emit_cwrapperexe_src 41356e7d3316Smrg# emit the source code for a wrapper executable on stdout 41366e7d3316Smrg# Must ONLY be called from within func_mode_link because 41376e7d3316Smrg# it depends on a number of variable set therein. 41386e7d3316Smrgfunc_emit_cwrapperexe_src () 41396e7d3316Smrg{ 41406e7d3316Smrg cat <<EOF 4141a966c04fSmrg 41426e7d3316Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 41436e7d3316Smrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 4144a966c04fSmrg 41456e7d3316Smrg The $output program cannot be directly executed until all the libtool 41466e7d3316Smrg libraries that it depends on are installed. 4147a966c04fSmrg 41486e7d3316Smrg This wrapper executable should never be moved out of the build directory. 41496e7d3316Smrg If it is, it will not operate correctly. 41506e7d3316Smrg*/ 41516e7d3316SmrgEOF 41526e7d3316Smrg cat <<"EOF" 41536e7d3316Smrg#ifdef _MSC_VER 41546e7d3316Smrg# define _CRT_SECURE_NO_DEPRECATE 1 41556e7d3316Smrg#endif 41566e7d3316Smrg#include <stdio.h> 41576e7d3316Smrg#include <stdlib.h> 41586e7d3316Smrg#ifdef _MSC_VER 41596e7d3316Smrg# include <direct.h> 41606e7d3316Smrg# include <process.h> 41616e7d3316Smrg# include <io.h> 41626e7d3316Smrg#else 41636e7d3316Smrg# include <unistd.h> 41646e7d3316Smrg# include <stdint.h> 41656e7d3316Smrg# ifdef __CYGWIN__ 41666e7d3316Smrg# include <io.h> 41676e7d3316Smrg# endif 41686e7d3316Smrg#endif 41696e7d3316Smrg#include <malloc.h> 41706e7d3316Smrg#include <stdarg.h> 41716e7d3316Smrg#include <assert.h> 41726e7d3316Smrg#include <string.h> 41736e7d3316Smrg#include <ctype.h> 41746e7d3316Smrg#include <errno.h> 41756e7d3316Smrg#include <fcntl.h> 41766e7d3316Smrg#include <sys/stat.h> 4177a966c04fSmrg 41786e7d3316Smrg/* declarations of non-ANSI functions */ 41796e7d3316Smrg#if defined(__MINGW32__) 41806e7d3316Smrg# ifdef __STRICT_ANSI__ 41816e7d3316Smrgint _putenv (const char *); 41826e7d3316Smrg# endif 41836e7d3316Smrg#elif defined(__CYGWIN__) 41846e7d3316Smrg# ifdef __STRICT_ANSI__ 41856e7d3316Smrgchar *realpath (const char *, char *); 41866e7d3316Smrgint putenv (char *); 41876e7d3316Smrgint setenv (const char *, const char *, int); 41886e7d3316Smrg# endif 41896e7d3316Smrg/* #elif defined (other platforms) ... */ 41906e7d3316Smrg#endif 4191a966c04fSmrg 41926e7d3316Smrg/* portability defines, excluding path handling macros */ 41936e7d3316Smrg#if defined(_MSC_VER) 41946e7d3316Smrg# define setmode _setmode 41956e7d3316Smrg# define stat _stat 41966e7d3316Smrg# define chmod _chmod 41976e7d3316Smrg# define getcwd _getcwd 41986e7d3316Smrg# define putenv _putenv 41996e7d3316Smrg# define S_IXUSR _S_IEXEC 42006e7d3316Smrg# ifndef _INTPTR_T_DEFINED 42016e7d3316Smrg# define _INTPTR_T_DEFINED 42026e7d3316Smrg# define intptr_t int 42036e7d3316Smrg# endif 42046e7d3316Smrg#elif defined(__MINGW32__) 42056e7d3316Smrg# define setmode _setmode 42066e7d3316Smrg# define stat _stat 42076e7d3316Smrg# define chmod _chmod 42086e7d3316Smrg# define getcwd _getcwd 42096e7d3316Smrg# define putenv _putenv 42106e7d3316Smrg#elif defined(__CYGWIN__) 42116e7d3316Smrg# define HAVE_SETENV 42126e7d3316Smrg# define FOPEN_WB "wb" 42136e7d3316Smrg/* #elif defined (other platforms) ... */ 42146e7d3316Smrg#endif 4215a966c04fSmrg 42166e7d3316Smrg#if defined(PATH_MAX) 42176e7d3316Smrg# define LT_PATHMAX PATH_MAX 42186e7d3316Smrg#elif defined(MAXPATHLEN) 42196e7d3316Smrg# define LT_PATHMAX MAXPATHLEN 42206e7d3316Smrg#else 42216e7d3316Smrg# define LT_PATHMAX 1024 42226e7d3316Smrg#endif 4223a966c04fSmrg 42246e7d3316Smrg#ifndef S_IXOTH 42256e7d3316Smrg# define S_IXOTH 0 42266e7d3316Smrg#endif 42276e7d3316Smrg#ifndef S_IXGRP 42286e7d3316Smrg# define S_IXGRP 0 42296e7d3316Smrg#endif 4230a966c04fSmrg 42316e7d3316Smrg/* path handling portability macros */ 42326e7d3316Smrg#ifndef DIR_SEPARATOR 42336e7d3316Smrg# define DIR_SEPARATOR '/' 42346e7d3316Smrg# define PATH_SEPARATOR ':' 42356e7d3316Smrg#endif 4236a966c04fSmrg 42376e7d3316Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 42386e7d3316Smrg defined (__OS2__) 42396e7d3316Smrg# define HAVE_DOS_BASED_FILE_SYSTEM 42406e7d3316Smrg# define FOPEN_WB "wb" 42416e7d3316Smrg# ifndef DIR_SEPARATOR_2 42426e7d3316Smrg# define DIR_SEPARATOR_2 '\\' 42436e7d3316Smrg# endif 42446e7d3316Smrg# ifndef PATH_SEPARATOR_2 42456e7d3316Smrg# define PATH_SEPARATOR_2 ';' 42466e7d3316Smrg# endif 42476e7d3316Smrg#endif 4248a966c04fSmrg 42496e7d3316Smrg#ifndef DIR_SEPARATOR_2 42506e7d3316Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 42516e7d3316Smrg#else /* DIR_SEPARATOR_2 */ 42526e7d3316Smrg# define IS_DIR_SEPARATOR(ch) \ 42536e7d3316Smrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 42546e7d3316Smrg#endif /* DIR_SEPARATOR_2 */ 4255a966c04fSmrg 42566e7d3316Smrg#ifndef PATH_SEPARATOR_2 42576e7d3316Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 42586e7d3316Smrg#else /* PATH_SEPARATOR_2 */ 42596e7d3316Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 42606e7d3316Smrg#endif /* PATH_SEPARATOR_2 */ 42616e7d3316Smrg 42626e7d3316Smrg#ifndef FOPEN_WB 42636e7d3316Smrg# define FOPEN_WB "w" 42646e7d3316Smrg#endif 42656e7d3316Smrg#ifndef _O_BINARY 42666e7d3316Smrg# define _O_BINARY 0 42676e7d3316Smrg#endif 42686e7d3316Smrg 42696e7d3316Smrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 42706e7d3316Smrg#define XFREE(stale) do { \ 42716e7d3316Smrg if (stale) { free ((void *) stale); stale = 0; } \ 42726e7d3316Smrg} while (0) 42736e7d3316Smrg 42746e7d3316Smrg#if defined(LT_DEBUGWRAPPER) 42756e7d3316Smrgstatic int lt_debug = 1; 42766e7d3316Smrg#else 42776e7d3316Smrgstatic int lt_debug = 0; 42786e7d3316Smrg#endif 42796e7d3316Smrg 42806e7d3316Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 42816e7d3316Smrg 42826e7d3316Smrgvoid *xmalloc (size_t num); 42836e7d3316Smrgchar *xstrdup (const char *string); 42846e7d3316Smrgconst char *base_name (const char *name); 42856e7d3316Smrgchar *find_executable (const char *wrapper); 42866e7d3316Smrgchar *chase_symlinks (const char *pathspec); 42876e7d3316Smrgint make_executable (const char *path); 42886e7d3316Smrgint check_executable (const char *path); 42896e7d3316Smrgchar *strendzap (char *str, const char *pat); 42906e7d3316Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 42916e7d3316Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 42926e7d3316Smrgstatic const char *nonnull (const char *s); 42936e7d3316Smrgstatic const char *nonempty (const char *s); 42946e7d3316Smrgvoid lt_setenv (const char *name, const char *value); 42956e7d3316Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 42966e7d3316Smrgvoid lt_update_exe_path (const char *name, const char *value); 42976e7d3316Smrgvoid lt_update_lib_path (const char *name, const char *value); 42986e7d3316Smrgchar **prepare_spawn (char **argv); 42996e7d3316Smrgvoid lt_dump_script (FILE *f); 43006e7d3316SmrgEOF 43016e7d3316Smrg 43026e7d3316Smrg cat <<EOF 430397cf2ee2Smrgvolatile const char * MAGIC_EXE = "$magic_exe"; 43046e7d3316Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 43056e7d3316SmrgEOF 43066e7d3316Smrg 43076e7d3316Smrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 430897cf2ee2Smrg func_to_host_path "$temp_rpath" 43096e7d3316Smrg cat <<EOF 431097cf2ee2Smrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 4311a966c04fSmrgEOF 4312a966c04fSmrg else 43136e7d3316Smrg cat <<"EOF" 43146e7d3316Smrgconst char * LIB_PATH_VALUE = ""; 43156e7d3316SmrgEOF 4316a966c04fSmrg fi 43176e7d3316Smrg 43186e7d3316Smrg if test -n "$dllsearchpath"; then 431997cf2ee2Smrg func_to_host_path "$dllsearchpath:" 43206e7d3316Smrg cat <<EOF 43216e7d3316Smrgconst char * EXE_PATH_VARNAME = "PATH"; 432297cf2ee2Smrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 43236e7d3316SmrgEOF 4324a966c04fSmrg else 43256e7d3316Smrg cat <<"EOF" 43266e7d3316Smrgconst char * EXE_PATH_VARNAME = ""; 43276e7d3316Smrgconst char * EXE_PATH_VALUE = ""; 43286e7d3316SmrgEOF 4329a966c04fSmrg fi 43306e7d3316Smrg 43316e7d3316Smrg if test "$fast_install" = yes; then 43326e7d3316Smrg cat <<EOF 43336e7d3316Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 43346e7d3316SmrgEOF 4335a966c04fSmrg else 43366e7d3316Smrg cat <<EOF 43376e7d3316Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 43386e7d3316SmrgEOF 4339a966c04fSmrg fi 4340a966c04fSmrg 4341a966c04fSmrg 43426e7d3316Smrg cat <<"EOF" 4343a966c04fSmrg 43446e7d3316Smrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 4345a966c04fSmrg 43466e7d3316Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 43476e7d3316Smrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 43486e7d3316Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 4349a966c04fSmrg 43506e7d3316Smrgint 43516e7d3316Smrgmain (int argc, char *argv[]) 43526e7d3316Smrg{ 43536e7d3316Smrg char **newargz; 43546e7d3316Smrg int newargc; 43556e7d3316Smrg char *tmp_pathspec; 43566e7d3316Smrg char *actual_cwrapper_path; 43576e7d3316Smrg char *actual_cwrapper_name; 43586e7d3316Smrg char *target_name; 43596e7d3316Smrg char *lt_argv_zero; 43606e7d3316Smrg intptr_t rval = 127; 4361a966c04fSmrg 43626e7d3316Smrg int i; 4363a966c04fSmrg 43646e7d3316Smrg program_name = (char *) xstrdup (base_name (argv[0])); 43656e7d3316Smrg newargz = XMALLOC (char *, argc + 1); 4366a966c04fSmrg 43676e7d3316Smrg /* very simple arg parsing; don't want to rely on getopt 43686e7d3316Smrg * also, copy all non cwrapper options to newargz, except 43696e7d3316Smrg * argz[0], which is handled differently 43706e7d3316Smrg */ 43716e7d3316Smrg newargc=0; 43726e7d3316Smrg for (i = 1; i < argc; i++) 43736e7d3316Smrg { 43746e7d3316Smrg if (strcmp (argv[i], dumpscript_opt) == 0) 43756e7d3316Smrg { 43766e7d3316SmrgEOF 43776e7d3316Smrg case "$host" in 43786e7d3316Smrg *mingw* | *cygwin* ) 43796e7d3316Smrg # make stdout use "unix" line endings 43806e7d3316Smrg echo " setmode(1,_O_BINARY);" 43816e7d3316Smrg ;; 43822e2dd055Smrg esac 4383a966c04fSmrg 43846e7d3316Smrg cat <<"EOF" 43856e7d3316Smrg lt_dump_script (stdout); 43866e7d3316Smrg return 0; 43876e7d3316Smrg } 43886e7d3316Smrg if (strcmp (argv[i], debug_opt) == 0) 43896e7d3316Smrg { 43906e7d3316Smrg lt_debug = 1; 43916e7d3316Smrg continue; 43926e7d3316Smrg } 43936e7d3316Smrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 43946e7d3316Smrg { 43956e7d3316Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 43966e7d3316Smrg namespace, but it is not one of the ones we know about and 43976e7d3316Smrg have already dealt with, above (inluding dump-script), then 43986e7d3316Smrg report an error. Otherwise, targets might begin to believe 43996e7d3316Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 44006e7d3316Smrg namespace. The first time any user complains about this, we'll 44016e7d3316Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 44026e7d3316Smrg or a configure.ac-settable value. 44036e7d3316Smrg */ 44046e7d3316Smrg lt_fatal (__FILE__, __LINE__, 44056e7d3316Smrg "unrecognized %s option: '%s'", 44066e7d3316Smrg ltwrapper_option_prefix, argv[i]); 44076e7d3316Smrg } 44086e7d3316Smrg /* otherwise ... */ 44096e7d3316Smrg newargz[++newargc] = xstrdup (argv[i]); 44106e7d3316Smrg } 44116e7d3316Smrg newargz[++newargc] = NULL; 4412a966c04fSmrg 44136e7d3316SmrgEOF 44146e7d3316Smrg cat <<EOF 44156e7d3316Smrg /* The GNU banner must be the first non-error debug message */ 44166e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 44176e7d3316SmrgEOF 44186e7d3316Smrg cat <<"EOF" 44196e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 44206e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 44216e7d3316Smrg 44226e7d3316Smrg tmp_pathspec = find_executable (argv[0]); 44236e7d3316Smrg if (tmp_pathspec == NULL) 44246e7d3316Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 44256e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 44266e7d3316Smrg "(main) found exe (before symlink chase) at: %s\n", 44276e7d3316Smrg tmp_pathspec); 44286e7d3316Smrg 44296e7d3316Smrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 44306e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 44316e7d3316Smrg "(main) found exe (after symlink chase) at: %s\n", 44326e7d3316Smrg actual_cwrapper_path); 44336e7d3316Smrg XFREE (tmp_pathspec); 44346e7d3316Smrg 44356e7d3316Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 44366e7d3316Smrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 44376e7d3316Smrg 44386e7d3316Smrg /* wrapper name transforms */ 44396e7d3316Smrg strendzap (actual_cwrapper_name, ".exe"); 44406e7d3316Smrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 44416e7d3316Smrg XFREE (actual_cwrapper_name); 44426e7d3316Smrg actual_cwrapper_name = tmp_pathspec; 44436e7d3316Smrg tmp_pathspec = 0; 44446e7d3316Smrg 44456e7d3316Smrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 44466e7d3316Smrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 44476e7d3316Smrg strendzap (target_name, ".exe"); 44486e7d3316Smrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 44496e7d3316Smrg XFREE (target_name); 44506e7d3316Smrg target_name = tmp_pathspec; 44516e7d3316Smrg tmp_pathspec = 0; 44526e7d3316Smrg 44536e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 44546e7d3316Smrg "(main) libtool target name: %s\n", 44556e7d3316Smrg target_name); 44566e7d3316SmrgEOF 4457a966c04fSmrg 44586e7d3316Smrg cat <<EOF 44596e7d3316Smrg newargz[0] = 44606e7d3316Smrg XMALLOC (char, (strlen (actual_cwrapper_path) + 44616e7d3316Smrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 44626e7d3316Smrg strcpy (newargz[0], actual_cwrapper_path); 44636e7d3316Smrg strcat (newargz[0], "$objdir"); 44646e7d3316Smrg strcat (newargz[0], "/"); 44656e7d3316SmrgEOF 4466a966c04fSmrg 44676e7d3316Smrg cat <<"EOF" 44686e7d3316Smrg /* stop here, and copy so we don't have to do this twice */ 44696e7d3316Smrg tmp_pathspec = xstrdup (newargz[0]); 4470a966c04fSmrg 44716e7d3316Smrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 44726e7d3316Smrg strcat (newargz[0], actual_cwrapper_name); 4473a966c04fSmrg 44746e7d3316Smrg /* DO want the lt- prefix here if it exists, so use target_name */ 44756e7d3316Smrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 44766e7d3316Smrg XFREE (tmp_pathspec); 44776e7d3316Smrg tmp_pathspec = NULL; 44786e7d3316SmrgEOF 4479a966c04fSmrg 44806e7d3316Smrg case $host_os in 44816e7d3316Smrg mingw*) 44826e7d3316Smrg cat <<"EOF" 44836e7d3316Smrg { 44846e7d3316Smrg char* p; 44856e7d3316Smrg while ((p = strchr (newargz[0], '\\')) != NULL) 44866e7d3316Smrg { 44876e7d3316Smrg *p = '/'; 44886e7d3316Smrg } 44896e7d3316Smrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 44906e7d3316Smrg { 44916e7d3316Smrg *p = '/'; 44926e7d3316Smrg } 44936e7d3316Smrg } 44946e7d3316SmrgEOF 44956e7d3316Smrg ;; 44966e7d3316Smrg esac 4497a966c04fSmrg 44986e7d3316Smrg cat <<"EOF" 44996e7d3316Smrg XFREE (target_name); 45006e7d3316Smrg XFREE (actual_cwrapper_path); 45016e7d3316Smrg XFREE (actual_cwrapper_name); 4502a966c04fSmrg 45036e7d3316Smrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 45046e7d3316Smrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 450597cf2ee2Smrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 450697cf2ee2Smrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 450797cf2ee2Smrg because on Windows, both *_VARNAMEs are PATH but uninstalled 450897cf2ee2Smrg libraries must come first. */ 45096e7d3316Smrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 451097cf2ee2Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 4511a966c04fSmrg 45126e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 45136e7d3316Smrg nonnull (lt_argv_zero)); 45146e7d3316Smrg for (i = 0; i < newargc; i++) 45156e7d3316Smrg { 45166e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 45176e7d3316Smrg i, nonnull (newargz[i])); 45186e7d3316Smrg } 4519a966c04fSmrg 45206e7d3316SmrgEOF 4521a966c04fSmrg 45226e7d3316Smrg case $host_os in 45236e7d3316Smrg mingw*) 45246e7d3316Smrg cat <<"EOF" 45256e7d3316Smrg /* execv doesn't actually work on mingw as expected on unix */ 45266e7d3316Smrg newargz = prepare_spawn (newargz); 45276e7d3316Smrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 45286e7d3316Smrg if (rval == -1) 45296e7d3316Smrg { 45306e7d3316Smrg /* failed to start process */ 45316e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 45326e7d3316Smrg "(main) failed to launch target \"%s\": %s\n", 45336e7d3316Smrg lt_argv_zero, nonnull (strerror (errno))); 45346e7d3316Smrg return 127; 45356e7d3316Smrg } 45366e7d3316Smrg return rval; 45376e7d3316SmrgEOF 45386e7d3316Smrg ;; 45396e7d3316Smrg *) 45406e7d3316Smrg cat <<"EOF" 45416e7d3316Smrg execv (lt_argv_zero, newargz); 45426e7d3316Smrg return rval; /* =127, but avoids unused variable warning */ 45436e7d3316SmrgEOF 45446e7d3316Smrg ;; 45456e7d3316Smrg esac 4546a966c04fSmrg 45476e7d3316Smrg cat <<"EOF" 45486e7d3316Smrg} 4549a966c04fSmrg 45506e7d3316Smrgvoid * 45516e7d3316Smrgxmalloc (size_t num) 45526e7d3316Smrg{ 45536e7d3316Smrg void *p = (void *) malloc (num); 45546e7d3316Smrg if (!p) 45556e7d3316Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 4556a966c04fSmrg 45576e7d3316Smrg return p; 45586e7d3316Smrg} 4559a966c04fSmrg 45606e7d3316Smrgchar * 45616e7d3316Smrgxstrdup (const char *string) 45626e7d3316Smrg{ 45636e7d3316Smrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 45646e7d3316Smrg string) : NULL; 45656e7d3316Smrg} 4566a966c04fSmrg 45676e7d3316Smrgconst char * 45686e7d3316Smrgbase_name (const char *name) 45696e7d3316Smrg{ 45706e7d3316Smrg const char *base; 4571a966c04fSmrg 45726e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 45736e7d3316Smrg /* Skip over the disk name in MSDOS pathnames. */ 45746e7d3316Smrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 45756e7d3316Smrg name += 2; 45766e7d3316Smrg#endif 4577a966c04fSmrg 45786e7d3316Smrg for (base = name; *name; name++) 45796e7d3316Smrg if (IS_DIR_SEPARATOR (*name)) 45806e7d3316Smrg base = name + 1; 45816e7d3316Smrg return base; 45826e7d3316Smrg} 4583a966c04fSmrg 45846e7d3316Smrgint 45856e7d3316Smrgcheck_executable (const char *path) 45866e7d3316Smrg{ 45876e7d3316Smrg struct stat st; 4588a966c04fSmrg 45896e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 45906e7d3316Smrg nonempty (path)); 45916e7d3316Smrg if ((!path) || (!*path)) 45926e7d3316Smrg return 0; 4593a966c04fSmrg 45946e7d3316Smrg if ((stat (path, &st) >= 0) 45956e7d3316Smrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 45966e7d3316Smrg return 1; 45976e7d3316Smrg else 45986e7d3316Smrg return 0; 45996e7d3316Smrg} 4600a966c04fSmrg 46016e7d3316Smrgint 46026e7d3316Smrgmake_executable (const char *path) 46036e7d3316Smrg{ 46046e7d3316Smrg int rval = 0; 46056e7d3316Smrg struct stat st; 4606a966c04fSmrg 46076e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 46086e7d3316Smrg nonempty (path)); 46096e7d3316Smrg if ((!path) || (!*path)) 46106e7d3316Smrg return 0; 4611a966c04fSmrg 46126e7d3316Smrg if (stat (path, &st) >= 0) 46136e7d3316Smrg { 46146e7d3316Smrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 46156e7d3316Smrg } 46166e7d3316Smrg return rval; 46176e7d3316Smrg} 4618a966c04fSmrg 46196e7d3316Smrg/* Searches for the full path of the wrapper. Returns 46206e7d3316Smrg newly allocated full path name if found, NULL otherwise 46216e7d3316Smrg Does not chase symlinks, even on platforms that support them. 46226e7d3316Smrg*/ 46236e7d3316Smrgchar * 46246e7d3316Smrgfind_executable (const char *wrapper) 46256e7d3316Smrg{ 46266e7d3316Smrg int has_slash = 0; 46276e7d3316Smrg const char *p; 46286e7d3316Smrg const char *p_next; 46296e7d3316Smrg /* static buffer for getcwd */ 46306e7d3316Smrg char tmp[LT_PATHMAX + 1]; 46316e7d3316Smrg int tmp_len; 46326e7d3316Smrg char *concat_name; 4633a966c04fSmrg 46346e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 46356e7d3316Smrg nonempty (wrapper)); 4636a966c04fSmrg 46376e7d3316Smrg if ((wrapper == NULL) || (*wrapper == '\0')) 46386e7d3316Smrg return NULL; 4639a966c04fSmrg 46406e7d3316Smrg /* Absolute path? */ 46416e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 46426e7d3316Smrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 46436e7d3316Smrg { 46446e7d3316Smrg concat_name = xstrdup (wrapper); 46456e7d3316Smrg if (check_executable (concat_name)) 46466e7d3316Smrg return concat_name; 46476e7d3316Smrg XFREE (concat_name); 46486e7d3316Smrg } 46496e7d3316Smrg else 46506e7d3316Smrg { 46516e7d3316Smrg#endif 46526e7d3316Smrg if (IS_DIR_SEPARATOR (wrapper[0])) 46536e7d3316Smrg { 46546e7d3316Smrg concat_name = xstrdup (wrapper); 46556e7d3316Smrg if (check_executable (concat_name)) 46566e7d3316Smrg return concat_name; 46576e7d3316Smrg XFREE (concat_name); 46586e7d3316Smrg } 46596e7d3316Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 46606e7d3316Smrg } 46616e7d3316Smrg#endif 4662a966c04fSmrg 46636e7d3316Smrg for (p = wrapper; *p; p++) 46646e7d3316Smrg if (*p == '/') 46656e7d3316Smrg { 46666e7d3316Smrg has_slash = 1; 46676e7d3316Smrg break; 46686e7d3316Smrg } 46696e7d3316Smrg if (!has_slash) 46706e7d3316Smrg { 46716e7d3316Smrg /* no slashes; search PATH */ 46726e7d3316Smrg const char *path = getenv ("PATH"); 46736e7d3316Smrg if (path != NULL) 46746e7d3316Smrg { 46756e7d3316Smrg for (p = path; *p; p = p_next) 46766e7d3316Smrg { 46776e7d3316Smrg const char *q; 46786e7d3316Smrg size_t p_len; 46796e7d3316Smrg for (q = p; *q; q++) 46806e7d3316Smrg if (IS_PATH_SEPARATOR (*q)) 46816e7d3316Smrg break; 46826e7d3316Smrg p_len = q - p; 46836e7d3316Smrg p_next = (*q == '\0' ? q : q + 1); 46846e7d3316Smrg if (p_len == 0) 46856e7d3316Smrg { 46866e7d3316Smrg /* empty path: current directory */ 46876e7d3316Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 46886e7d3316Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 46896e7d3316Smrg nonnull (strerror (errno))); 46906e7d3316Smrg tmp_len = strlen (tmp); 46916e7d3316Smrg concat_name = 46926e7d3316Smrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 46936e7d3316Smrg memcpy (concat_name, tmp, tmp_len); 46946e7d3316Smrg concat_name[tmp_len] = '/'; 46956e7d3316Smrg strcpy (concat_name + tmp_len + 1, wrapper); 46966e7d3316Smrg } 46976e7d3316Smrg else 46986e7d3316Smrg { 46996e7d3316Smrg concat_name = 47006e7d3316Smrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 47016e7d3316Smrg memcpy (concat_name, p, p_len); 47026e7d3316Smrg concat_name[p_len] = '/'; 47036e7d3316Smrg strcpy (concat_name + p_len + 1, wrapper); 47046e7d3316Smrg } 47056e7d3316Smrg if (check_executable (concat_name)) 47066e7d3316Smrg return concat_name; 47076e7d3316Smrg XFREE (concat_name); 47086e7d3316Smrg } 47096e7d3316Smrg } 47106e7d3316Smrg /* not found in PATH; assume curdir */ 47116e7d3316Smrg } 47126e7d3316Smrg /* Relative path | not found in path: prepend cwd */ 47136e7d3316Smrg if (getcwd (tmp, LT_PATHMAX) == NULL) 47146e7d3316Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 47156e7d3316Smrg nonnull (strerror (errno))); 47166e7d3316Smrg tmp_len = strlen (tmp); 47176e7d3316Smrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 47186e7d3316Smrg memcpy (concat_name, tmp, tmp_len); 47196e7d3316Smrg concat_name[tmp_len] = '/'; 47206e7d3316Smrg strcpy (concat_name + tmp_len + 1, wrapper); 4721a966c04fSmrg 47226e7d3316Smrg if (check_executable (concat_name)) 47236e7d3316Smrg return concat_name; 47246e7d3316Smrg XFREE (concat_name); 47256e7d3316Smrg return NULL; 47266e7d3316Smrg} 4727a966c04fSmrg 47286e7d3316Smrgchar * 47296e7d3316Smrgchase_symlinks (const char *pathspec) 47306e7d3316Smrg{ 47316e7d3316Smrg#ifndef S_ISLNK 47326e7d3316Smrg return xstrdup (pathspec); 47336e7d3316Smrg#else 47346e7d3316Smrg char buf[LT_PATHMAX]; 47356e7d3316Smrg struct stat s; 47366e7d3316Smrg char *tmp_pathspec = xstrdup (pathspec); 47376e7d3316Smrg char *p; 47386e7d3316Smrg int has_symlinks = 0; 47396e7d3316Smrg while (strlen (tmp_pathspec) && !has_symlinks) 47406e7d3316Smrg { 47416e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 47426e7d3316Smrg "checking path component for symlinks: %s\n", 47436e7d3316Smrg tmp_pathspec); 47446e7d3316Smrg if (lstat (tmp_pathspec, &s) == 0) 47456e7d3316Smrg { 47466e7d3316Smrg if (S_ISLNK (s.st_mode) != 0) 47476e7d3316Smrg { 47486e7d3316Smrg has_symlinks = 1; 47496e7d3316Smrg break; 47506e7d3316Smrg } 4751a966c04fSmrg 47526e7d3316Smrg /* search backwards for last DIR_SEPARATOR */ 47536e7d3316Smrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 47546e7d3316Smrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 47556e7d3316Smrg p--; 47566e7d3316Smrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 47576e7d3316Smrg { 47586e7d3316Smrg /* no more DIR_SEPARATORS left */ 47596e7d3316Smrg break; 47606e7d3316Smrg } 47616e7d3316Smrg *p = '\0'; 47626e7d3316Smrg } 47636e7d3316Smrg else 47646e7d3316Smrg { 47656e7d3316Smrg lt_fatal (__FILE__, __LINE__, 47666e7d3316Smrg "error accessing file \"%s\": %s", 47676e7d3316Smrg tmp_pathspec, nonnull (strerror (errno))); 47686e7d3316Smrg } 47696e7d3316Smrg } 47706e7d3316Smrg XFREE (tmp_pathspec); 4771a966c04fSmrg 47726e7d3316Smrg if (!has_symlinks) 47736e7d3316Smrg { 47746e7d3316Smrg return xstrdup (pathspec); 47756e7d3316Smrg } 4776a966c04fSmrg 47776e7d3316Smrg tmp_pathspec = realpath (pathspec, buf); 47786e7d3316Smrg if (tmp_pathspec == 0) 47796e7d3316Smrg { 47806e7d3316Smrg lt_fatal (__FILE__, __LINE__, 47816e7d3316Smrg "could not follow symlinks for %s", pathspec); 47826e7d3316Smrg } 47836e7d3316Smrg return xstrdup (tmp_pathspec); 47846e7d3316Smrg#endif 47856e7d3316Smrg} 4786a966c04fSmrg 47876e7d3316Smrgchar * 47886e7d3316Smrgstrendzap (char *str, const char *pat) 47896e7d3316Smrg{ 47906e7d3316Smrg size_t len, patlen; 4791a966c04fSmrg 47926e7d3316Smrg assert (str != NULL); 47936e7d3316Smrg assert (pat != NULL); 4794a966c04fSmrg 47956e7d3316Smrg len = strlen (str); 47966e7d3316Smrg patlen = strlen (pat); 4797a966c04fSmrg 47986e7d3316Smrg if (patlen <= len) 47996e7d3316Smrg { 48006e7d3316Smrg str += len - patlen; 48016e7d3316Smrg if (strcmp (str, pat) == 0) 48026e7d3316Smrg *str = '\0'; 48036e7d3316Smrg } 48046e7d3316Smrg return str; 48056e7d3316Smrg} 4806a966c04fSmrg 48076e7d3316Smrgvoid 48086e7d3316Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 48096e7d3316Smrg{ 48106e7d3316Smrg va_list args; 48116e7d3316Smrg if (lt_debug) 48126e7d3316Smrg { 48136e7d3316Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 48146e7d3316Smrg va_start (args, fmt); 48156e7d3316Smrg (void) vfprintf (stderr, fmt, args); 48166e7d3316Smrg va_end (args); 48176e7d3316Smrg } 48186e7d3316Smrg} 4819a966c04fSmrg 48206e7d3316Smrgstatic void 48216e7d3316Smrglt_error_core (int exit_status, const char *file, 48226e7d3316Smrg int line, const char *mode, 48236e7d3316Smrg const char *message, va_list ap) 48246e7d3316Smrg{ 48256e7d3316Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 48266e7d3316Smrg vfprintf (stderr, message, ap); 48276e7d3316Smrg fprintf (stderr, ".\n"); 4828a966c04fSmrg 48296e7d3316Smrg if (exit_status >= 0) 48306e7d3316Smrg exit (exit_status); 48316e7d3316Smrg} 4832a966c04fSmrg 48336e7d3316Smrgvoid 48346e7d3316Smrglt_fatal (const char *file, int line, const char *message, ...) 48356e7d3316Smrg{ 48366e7d3316Smrg va_list ap; 48376e7d3316Smrg va_start (ap, message); 48386e7d3316Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 48396e7d3316Smrg va_end (ap); 48406e7d3316Smrg} 4841a966c04fSmrg 48426e7d3316Smrgstatic const char * 48436e7d3316Smrgnonnull (const char *s) 48446e7d3316Smrg{ 48456e7d3316Smrg return s ? s : "(null)"; 48466e7d3316Smrg} 4847a966c04fSmrg 48486e7d3316Smrgstatic const char * 48496e7d3316Smrgnonempty (const char *s) 48506e7d3316Smrg{ 48516e7d3316Smrg return (s && !*s) ? "(empty)" : nonnull (s); 48526e7d3316Smrg} 4853a966c04fSmrg 48546e7d3316Smrgvoid 48556e7d3316Smrglt_setenv (const char *name, const char *value) 48566e7d3316Smrg{ 48576e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 48586e7d3316Smrg "(lt_setenv) setting '%s' to '%s'\n", 48596e7d3316Smrg nonnull (name), nonnull (value)); 48606e7d3316Smrg { 48616e7d3316Smrg#ifdef HAVE_SETENV 48626e7d3316Smrg /* always make a copy, for consistency with !HAVE_SETENV */ 48636e7d3316Smrg char *str = xstrdup (value); 48646e7d3316Smrg setenv (name, str, 1); 48656e7d3316Smrg#else 48666e7d3316Smrg int len = strlen (name) + 1 + strlen (value) + 1; 48676e7d3316Smrg char *str = XMALLOC (char, len); 48686e7d3316Smrg sprintf (str, "%s=%s", name, value); 48696e7d3316Smrg if (putenv (str) != EXIT_SUCCESS) 48706e7d3316Smrg { 48716e7d3316Smrg XFREE (str); 48726e7d3316Smrg } 48736e7d3316Smrg#endif 48746e7d3316Smrg } 48756e7d3316Smrg} 4876a966c04fSmrg 48776e7d3316Smrgchar * 48786e7d3316Smrglt_extend_str (const char *orig_value, const char *add, int to_end) 48796e7d3316Smrg{ 48806e7d3316Smrg char *new_value; 48816e7d3316Smrg if (orig_value && *orig_value) 48826e7d3316Smrg { 48836e7d3316Smrg int orig_value_len = strlen (orig_value); 48846e7d3316Smrg int add_len = strlen (add); 48856e7d3316Smrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 48866e7d3316Smrg if (to_end) 48876e7d3316Smrg { 48886e7d3316Smrg strcpy (new_value, orig_value); 48896e7d3316Smrg strcpy (new_value + orig_value_len, add); 48906e7d3316Smrg } 48916e7d3316Smrg else 48926e7d3316Smrg { 48936e7d3316Smrg strcpy (new_value, add); 48946e7d3316Smrg strcpy (new_value + add_len, orig_value); 48956e7d3316Smrg } 48966e7d3316Smrg } 48976e7d3316Smrg else 48986e7d3316Smrg { 48996e7d3316Smrg new_value = xstrdup (add); 49006e7d3316Smrg } 49016e7d3316Smrg return new_value; 49026e7d3316Smrg} 4903a966c04fSmrg 49046e7d3316Smrgvoid 49056e7d3316Smrglt_update_exe_path (const char *name, const char *value) 49066e7d3316Smrg{ 49076e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 49086e7d3316Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 49096e7d3316Smrg nonnull (name), nonnull (value)); 4910a966c04fSmrg 49116e7d3316Smrg if (name && *name && value && *value) 49126e7d3316Smrg { 49136e7d3316Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 49146e7d3316Smrg /* some systems can't cope with a ':'-terminated path #' */ 49156e7d3316Smrg int len = strlen (new_value); 49166e7d3316Smrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 49176e7d3316Smrg { 49186e7d3316Smrg new_value[len-1] = '\0'; 49196e7d3316Smrg } 49206e7d3316Smrg lt_setenv (name, new_value); 49216e7d3316Smrg XFREE (new_value); 49226e7d3316Smrg } 49236e7d3316Smrg} 4924a966c04fSmrg 49256e7d3316Smrgvoid 49266e7d3316Smrglt_update_lib_path (const char *name, const char *value) 49276e7d3316Smrg{ 49286e7d3316Smrg lt_debugprintf (__FILE__, __LINE__, 49296e7d3316Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 49306e7d3316Smrg nonnull (name), nonnull (value)); 4931a966c04fSmrg 49326e7d3316Smrg if (name && *name && value && *value) 49336e7d3316Smrg { 49346e7d3316Smrg char *new_value = lt_extend_str (getenv (name), value, 0); 49356e7d3316Smrg lt_setenv (name, new_value); 49366e7d3316Smrg XFREE (new_value); 49376e7d3316Smrg } 49386e7d3316Smrg} 4939a966c04fSmrg 49406e7d3316SmrgEOF 49416e7d3316Smrg case $host_os in 49426e7d3316Smrg mingw*) 49436e7d3316Smrg cat <<"EOF" 49446e7d3316Smrg 49456e7d3316Smrg/* Prepares an argument vector before calling spawn(). 49466e7d3316Smrg Note that spawn() does not by itself call the command interpreter 49476e7d3316Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 49486e7d3316Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 49496e7d3316Smrg GetVersionEx(&v); 49506e7d3316Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 49516e7d3316Smrg }) ? "cmd.exe" : "command.com"). 49526e7d3316Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 49536e7d3316Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 49546e7d3316Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 49556e7d3316Smrg special way: 49566e7d3316Smrg - Space and tab are interpreted as delimiters. They are not treated as 49576e7d3316Smrg delimiters if they are surrounded by double quotes: "...". 49586e7d3316Smrg - Unescaped double quotes are removed from the input. Their only effect is 49596e7d3316Smrg that within double quotes, space and tab are treated like normal 49606e7d3316Smrg characters. 49616e7d3316Smrg - Backslashes not followed by double quotes are not special. 49626e7d3316Smrg - But 2*n+1 backslashes followed by a double quote become 49636e7d3316Smrg n backslashes followed by a double quote (n >= 0): 49646e7d3316Smrg \" -> " 49656e7d3316Smrg \\\" -> \" 49666e7d3316Smrg \\\\\" -> \\" 49676e7d3316Smrg */ 49686e7d3316Smrg#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" 49696e7d3316Smrg#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" 49706e7d3316Smrgchar ** 49716e7d3316Smrgprepare_spawn (char **argv) 49726e7d3316Smrg{ 49736e7d3316Smrg size_t argc; 49746e7d3316Smrg char **new_argv; 49756e7d3316Smrg size_t i; 4976a966c04fSmrg 49776e7d3316Smrg /* Count number of arguments. */ 49786e7d3316Smrg for (argc = 0; argv[argc] != NULL; argc++) 49796e7d3316Smrg ; 4980a966c04fSmrg 49816e7d3316Smrg /* Allocate new argument vector. */ 49826e7d3316Smrg new_argv = XMALLOC (char *, argc + 1); 4983a966c04fSmrg 49846e7d3316Smrg /* Put quoted arguments into the new argument vector. */ 49856e7d3316Smrg for (i = 0; i < argc; i++) 49866e7d3316Smrg { 49876e7d3316Smrg const char *string = argv[i]; 49886e7d3316Smrg 49896e7d3316Smrg if (string[0] == '\0') 49906e7d3316Smrg new_argv[i] = xstrdup ("\"\""); 49916e7d3316Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 49926e7d3316Smrg { 49936e7d3316Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 49946e7d3316Smrg size_t length; 49956e7d3316Smrg unsigned int backslashes; 49966e7d3316Smrg const char *s; 49976e7d3316Smrg char *quoted_string; 49986e7d3316Smrg char *p; 49996e7d3316Smrg 50006e7d3316Smrg length = 0; 50016e7d3316Smrg backslashes = 0; 50026e7d3316Smrg if (quote_around) 50036e7d3316Smrg length++; 50046e7d3316Smrg for (s = string; *s != '\0'; s++) 50056e7d3316Smrg { 50066e7d3316Smrg char c = *s; 50076e7d3316Smrg if (c == '"') 50086e7d3316Smrg length += backslashes + 1; 50096e7d3316Smrg length++; 50106e7d3316Smrg if (c == '\\') 50116e7d3316Smrg backslashes++; 50126e7d3316Smrg else 50136e7d3316Smrg backslashes = 0; 50146e7d3316Smrg } 50156e7d3316Smrg if (quote_around) 50166e7d3316Smrg length += backslashes + 1; 50176e7d3316Smrg 50186e7d3316Smrg quoted_string = XMALLOC (char, length + 1); 50196e7d3316Smrg 50206e7d3316Smrg p = quoted_string; 50216e7d3316Smrg backslashes = 0; 50226e7d3316Smrg if (quote_around) 50236e7d3316Smrg *p++ = '"'; 50246e7d3316Smrg for (s = string; *s != '\0'; s++) 50256e7d3316Smrg { 50266e7d3316Smrg char c = *s; 50276e7d3316Smrg if (c == '"') 50286e7d3316Smrg { 50296e7d3316Smrg unsigned int j; 50306e7d3316Smrg for (j = backslashes + 1; j > 0; j--) 50316e7d3316Smrg *p++ = '\\'; 50326e7d3316Smrg } 50336e7d3316Smrg *p++ = c; 50346e7d3316Smrg if (c == '\\') 50356e7d3316Smrg backslashes++; 50366e7d3316Smrg else 50376e7d3316Smrg backslashes = 0; 50386e7d3316Smrg } 50396e7d3316Smrg if (quote_around) 50406e7d3316Smrg { 50416e7d3316Smrg unsigned int j; 50426e7d3316Smrg for (j = backslashes; j > 0; j--) 50436e7d3316Smrg *p++ = '\\'; 50446e7d3316Smrg *p++ = '"'; 50456e7d3316Smrg } 50466e7d3316Smrg *p = '\0'; 5047a966c04fSmrg 50486e7d3316Smrg new_argv[i] = quoted_string; 50496e7d3316Smrg } 50506e7d3316Smrg else 50516e7d3316Smrg new_argv[i] = (char *) string; 50526e7d3316Smrg } 50536e7d3316Smrg new_argv[argc] = NULL; 5054a966c04fSmrg 50556e7d3316Smrg return new_argv; 50566e7d3316Smrg} 50576e7d3316SmrgEOF 5058a966c04fSmrg ;; 50596e7d3316Smrg esac 5060a966c04fSmrg 50616e7d3316Smrg cat <<"EOF" 50626e7d3316Smrgvoid lt_dump_script (FILE* f) 50636e7d3316Smrg{ 50646e7d3316SmrgEOF 50656e7d3316Smrg func_emit_wrapper yes | 5066ac92798bSmrg $SED -n -e ' 5067ac92798bSmrgs/^\(.\{79\}\)\(..*\)/\1\ 5068ac92798bSmrg\2/ 5069ac92798bSmrgh 5070ac92798bSmrgs/\([\\"]\)/\\\1/g 5071ac92798bSmrgs/$/\\n/ 5072ac92798bSmrgs/\([^\n]*\).*/ fputs ("\1", f);/p 5073ac92798bSmrgg 5074ac92798bSmrgD' 50756e7d3316Smrg cat <<"EOF" 50766e7d3316Smrg} 50776e7d3316SmrgEOF 50786e7d3316Smrg} 50796e7d3316Smrg# end: func_emit_cwrapperexe_src 5080a966c04fSmrg 50816e7d3316Smrg# func_win32_import_lib_p ARG 50826e7d3316Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 50836e7d3316Smrgfunc_win32_import_lib_p () 50846e7d3316Smrg{ 50856e7d3316Smrg $opt_debug 50866e7d3316Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 50876e7d3316Smrg *import*) : ;; 50886e7d3316Smrg *) false ;; 50896e7d3316Smrg esac 50906e7d3316Smrg} 5091a966c04fSmrg 50926e7d3316Smrg# func_mode_link arg... 50936e7d3316Smrgfunc_mode_link () 50946e7d3316Smrg{ 50956e7d3316Smrg $opt_debug 50966e7d3316Smrg case $host in 50976e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 50986e7d3316Smrg # It is impossible to link a dll without this setting, and 50996e7d3316Smrg # we shouldn't force the makefile maintainer to figure out 51006e7d3316Smrg # which system we are compiling for in order to pass an extra 51016e7d3316Smrg # flag for every libtool invocation. 51026e7d3316Smrg # allow_undefined=no 5103a966c04fSmrg 51046e7d3316Smrg # FIXME: Unfortunately, there are problems with the above when trying 51056e7d3316Smrg # to make a dll which has undefined symbols, in which case not 51066e7d3316Smrg # even a static library is built. For now, we need to specify 51076e7d3316Smrg # -no-undefined on the libtool link line when we can be certain 51086e7d3316Smrg # that all symbols are satisfied, otherwise we get a static library. 51096e7d3316Smrg allow_undefined=yes 51106e7d3316Smrg ;; 51116e7d3316Smrg *) 51126e7d3316Smrg allow_undefined=yes 51136e7d3316Smrg ;; 51146e7d3316Smrg esac 51156e7d3316Smrg libtool_args=$nonopt 51166e7d3316Smrg base_compile="$nonopt $@" 51176e7d3316Smrg compile_command=$nonopt 51186e7d3316Smrg finalize_command=$nonopt 5119a966c04fSmrg 51206e7d3316Smrg compile_rpath= 51216e7d3316Smrg finalize_rpath= 51226e7d3316Smrg compile_shlibpath= 51236e7d3316Smrg finalize_shlibpath= 51246e7d3316Smrg convenience= 51256e7d3316Smrg old_convenience= 51266e7d3316Smrg deplibs= 51276e7d3316Smrg old_deplibs= 51286e7d3316Smrg compiler_flags= 51296e7d3316Smrg linker_flags= 51306e7d3316Smrg dllsearchpath= 51316e7d3316Smrg lib_search_path=`pwd` 51326e7d3316Smrg inst_prefix_dir= 51336e7d3316Smrg new_inherited_linker_flags= 5134a966c04fSmrg 51356e7d3316Smrg avoid_version=no 51366e7d3316Smrg bindir= 51376e7d3316Smrg dlfiles= 51386e7d3316Smrg dlprefiles= 51396e7d3316Smrg dlself=no 51406e7d3316Smrg export_dynamic=no 51416e7d3316Smrg export_symbols= 51426e7d3316Smrg export_symbols_regex= 51436e7d3316Smrg generated= 51446e7d3316Smrg libobjs= 51456e7d3316Smrg ltlibs= 51466e7d3316Smrg module=no 51476e7d3316Smrg no_install=no 51486e7d3316Smrg objs= 51496e7d3316Smrg non_pic_objects= 51506e7d3316Smrg precious_files_regex= 51516e7d3316Smrg prefer_static_libs=no 51526e7d3316Smrg preload=no 51536e7d3316Smrg prev= 51546e7d3316Smrg prevarg= 51556e7d3316Smrg release= 51566e7d3316Smrg rpath= 51576e7d3316Smrg xrpath= 51586e7d3316Smrg perm_rpath= 51596e7d3316Smrg temp_rpath= 51606e7d3316Smrg thread_safe=no 51616e7d3316Smrg vinfo= 51626e7d3316Smrg vinfo_number=no 51636e7d3316Smrg weak_libs= 51646e7d3316Smrg single_module="${wl}-single_module" 51656e7d3316Smrg func_infer_tag $base_compile 5166a966c04fSmrg 51676e7d3316Smrg # We need to know -static, to get the right output filenames. 51686e7d3316Smrg for arg 51696e7d3316Smrg do 51706e7d3316Smrg case $arg in 51716e7d3316Smrg -shared) 51726e7d3316Smrg test "$build_libtool_libs" != yes && \ 51736e7d3316Smrg func_fatal_configuration "can not build a shared library" 51746e7d3316Smrg build_old_libs=no 51756e7d3316Smrg break 51766e7d3316Smrg ;; 51776e7d3316Smrg -all-static | -static | -static-libtool-libs) 51786e7d3316Smrg case $arg in 51796e7d3316Smrg -all-static) 51806e7d3316Smrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 51816e7d3316Smrg func_warning "complete static linking is impossible in this configuration" 51826e7d3316Smrg fi 51836e7d3316Smrg if test -n "$link_static_flag"; then 51846e7d3316Smrg dlopen_self=$dlopen_self_static 51856e7d3316Smrg fi 51866e7d3316Smrg prefer_static_libs=yes 51876e7d3316Smrg ;; 51886e7d3316Smrg -static) 51896e7d3316Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 51906e7d3316Smrg dlopen_self=$dlopen_self_static 51916e7d3316Smrg fi 51926e7d3316Smrg prefer_static_libs=built 51936e7d3316Smrg ;; 51946e7d3316Smrg -static-libtool-libs) 51956e7d3316Smrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 51966e7d3316Smrg dlopen_self=$dlopen_self_static 51976e7d3316Smrg fi 51986e7d3316Smrg prefer_static_libs=yes 51996e7d3316Smrg ;; 52006e7d3316Smrg esac 52016e7d3316Smrg build_libtool_libs=no 52026e7d3316Smrg build_old_libs=yes 52036e7d3316Smrg break 52046e7d3316Smrg ;; 52056e7d3316Smrg esac 52066e7d3316Smrg done 5207a966c04fSmrg 52086e7d3316Smrg # See if our shared archives depend on static archives. 52096e7d3316Smrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 5210a966c04fSmrg 52116e7d3316Smrg # Go through the arguments, transforming them on the way. 52126e7d3316Smrg while test "$#" -gt 0; do 52136e7d3316Smrg arg="$1" 52146e7d3316Smrg shift 52156e7d3316Smrg func_quote_for_eval "$arg" 52166e7d3316Smrg qarg=$func_quote_for_eval_unquoted_result 52176e7d3316Smrg func_append libtool_args " $func_quote_for_eval_result" 5218a966c04fSmrg 52196e7d3316Smrg # If the previous option needs an argument, assign it. 52206e7d3316Smrg if test -n "$prev"; then 52216e7d3316Smrg case $prev in 52226e7d3316Smrg output) 52236e7d3316Smrg func_append compile_command " @OUTPUT@" 52246e7d3316Smrg func_append finalize_command " @OUTPUT@" 52256e7d3316Smrg ;; 52266e7d3316Smrg esac 5227a966c04fSmrg 52286e7d3316Smrg case $prev in 52296e7d3316Smrg bindir) 52306e7d3316Smrg bindir="$arg" 52316e7d3316Smrg prev= 52326e7d3316Smrg continue 52336e7d3316Smrg ;; 52346e7d3316Smrg dlfiles|dlprefiles) 52356e7d3316Smrg if test "$preload" = no; then 52366e7d3316Smrg # Add the symbol object into the linking commands. 52376e7d3316Smrg func_append compile_command " @SYMFILE@" 52386e7d3316Smrg func_append finalize_command " @SYMFILE@" 52396e7d3316Smrg preload=yes 5240a966c04fSmrg fi 52416e7d3316Smrg case $arg in 52426e7d3316Smrg *.la | *.lo) ;; # We handle these cases below. 52436e7d3316Smrg force) 52446e7d3316Smrg if test "$dlself" = no; then 52456e7d3316Smrg dlself=needless 52466e7d3316Smrg export_dynamic=yes 5247a966c04fSmrg fi 52486e7d3316Smrg prev= 52496e7d3316Smrg continue 52506e7d3316Smrg ;; 52516e7d3316Smrg self) 52526e7d3316Smrg if test "$prev" = dlprefiles; then 52536e7d3316Smrg dlself=yes 52546e7d3316Smrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 52556e7d3316Smrg dlself=yes 5256a966c04fSmrg else 52576e7d3316Smrg dlself=needless 52586e7d3316Smrg export_dynamic=yes 5259a966c04fSmrg fi 52606e7d3316Smrg prev= 52616e7d3316Smrg continue 52626e7d3316Smrg ;; 52636e7d3316Smrg *) 52646e7d3316Smrg if test "$prev" = dlfiles; then 526597cf2ee2Smrg func_append dlfiles " $arg" 5266a966c04fSmrg else 526797cf2ee2Smrg func_append dlprefiles " $arg" 5268a966c04fSmrg fi 52696e7d3316Smrg prev= 52706e7d3316Smrg continue 52716e7d3316Smrg ;; 52726e7d3316Smrg esac 52736e7d3316Smrg ;; 52746e7d3316Smrg expsyms) 52756e7d3316Smrg export_symbols="$arg" 52766e7d3316Smrg test -f "$arg" \ 52776e7d3316Smrg || func_fatal_error "symbol file \`$arg' does not exist" 52786e7d3316Smrg prev= 52796e7d3316Smrg continue 52806e7d3316Smrg ;; 52816e7d3316Smrg expsyms_regex) 52826e7d3316Smrg export_symbols_regex="$arg" 52836e7d3316Smrg prev= 52846e7d3316Smrg continue 52856e7d3316Smrg ;; 52866e7d3316Smrg framework) 5287a966c04fSmrg case $host in 52886e7d3316Smrg *-*-darwin*) 52896e7d3316Smrg case "$deplibs " in 52906e7d3316Smrg *" $qarg.ltframework "*) ;; 529197cf2ee2Smrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 52926e7d3316Smrg ;; 52936e7d3316Smrg esac 52946e7d3316Smrg ;; 5295a966c04fSmrg esac 52966e7d3316Smrg prev= 52976e7d3316Smrg continue 5298a966c04fSmrg ;; 52996e7d3316Smrg inst_prefix) 53006e7d3316Smrg inst_prefix_dir="$arg" 53016e7d3316Smrg prev= 53026e7d3316Smrg continue 5303a966c04fSmrg ;; 53046e7d3316Smrg objectlist) 53056e7d3316Smrg if test -f "$arg"; then 53066e7d3316Smrg save_arg=$arg 53076e7d3316Smrg moreargs= 53086e7d3316Smrg for fil in `cat "$save_arg"` 53096e7d3316Smrg do 531097cf2ee2Smrg# func_append moreargs " $fil" 53116e7d3316Smrg arg=$fil 53126e7d3316Smrg # A libtool-controlled object. 5313a966c04fSmrg 53146e7d3316Smrg # Check to see that this really is a libtool object. 53156e7d3316Smrg if func_lalib_unsafe_p "$arg"; then 53166e7d3316Smrg pic_object= 53176e7d3316Smrg non_pic_object= 5318a966c04fSmrg 53196e7d3316Smrg # Read the .lo file 53206e7d3316Smrg func_source "$arg" 5321a966c04fSmrg 53226e7d3316Smrg if test -z "$pic_object" || 53236e7d3316Smrg test -z "$non_pic_object" || 53246e7d3316Smrg test "$pic_object" = none && 53256e7d3316Smrg test "$non_pic_object" = none; then 53266e7d3316Smrg func_fatal_error "cannot find name of object for \`$arg'" 53276e7d3316Smrg fi 5328a966c04fSmrg 53296e7d3316Smrg # Extract subdirectory from the argument. 53306e7d3316Smrg func_dirname "$arg" "/" "" 53316e7d3316Smrg xdir="$func_dirname_result" 5332a966c04fSmrg 53336e7d3316Smrg if test "$pic_object" != none; then 53346e7d3316Smrg # Prepend the subdirectory the object is found in. 53356e7d3316Smrg pic_object="$xdir$pic_object" 5336a966c04fSmrg 53376e7d3316Smrg if test "$prev" = dlfiles; then 53386e7d3316Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 533997cf2ee2Smrg func_append dlfiles " $pic_object" 53406e7d3316Smrg prev= 53416e7d3316Smrg continue 53426e7d3316Smrg else 53436e7d3316Smrg # If libtool objects are unsupported, then we need to preload. 53446e7d3316Smrg prev=dlprefiles 53456e7d3316Smrg fi 53466e7d3316Smrg fi 5347a966c04fSmrg 53486e7d3316Smrg # CHECK ME: I think I busted this. -Ossama 53496e7d3316Smrg if test "$prev" = dlprefiles; then 53506e7d3316Smrg # Preload the old-style object. 535197cf2ee2Smrg func_append dlprefiles " $pic_object" 53526e7d3316Smrg prev= 53536e7d3316Smrg fi 5354a966c04fSmrg 53556e7d3316Smrg # A PIC object. 53566e7d3316Smrg func_append libobjs " $pic_object" 53576e7d3316Smrg arg="$pic_object" 53586e7d3316Smrg fi 5359a966c04fSmrg 53606e7d3316Smrg # Non-PIC object. 53616e7d3316Smrg if test "$non_pic_object" != none; then 53626e7d3316Smrg # Prepend the subdirectory the object is found in. 53636e7d3316Smrg non_pic_object="$xdir$non_pic_object" 5364a966c04fSmrg 53656e7d3316Smrg # A standard non-PIC object 53666e7d3316Smrg func_append non_pic_objects " $non_pic_object" 53676e7d3316Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 53686e7d3316Smrg arg="$non_pic_object" 53696e7d3316Smrg fi 53706e7d3316Smrg else 53716e7d3316Smrg # If the PIC object exists, use it instead. 53726e7d3316Smrg # $xdir was prepended to $pic_object above. 53736e7d3316Smrg non_pic_object="$pic_object" 53746e7d3316Smrg func_append non_pic_objects " $non_pic_object" 53756e7d3316Smrg fi 53766e7d3316Smrg else 53776e7d3316Smrg # Only an error if not doing a dry-run. 53786e7d3316Smrg if $opt_dry_run; then 53796e7d3316Smrg # Extract subdirectory from the argument. 53806e7d3316Smrg func_dirname "$arg" "/" "" 53816e7d3316Smrg xdir="$func_dirname_result" 53826e7d3316Smrg 53836e7d3316Smrg func_lo2o "$arg" 53846e7d3316Smrg pic_object=$xdir$objdir/$func_lo2o_result 53856e7d3316Smrg non_pic_object=$xdir$func_lo2o_result 53866e7d3316Smrg func_append libobjs " $pic_object" 53876e7d3316Smrg func_append non_pic_objects " $non_pic_object" 53886e7d3316Smrg else 53896e7d3316Smrg func_fatal_error "\`$arg' is not a valid libtool object" 53906e7d3316Smrg fi 53916e7d3316Smrg fi 53926e7d3316Smrg done 5393a966c04fSmrg else 53946e7d3316Smrg func_fatal_error "link input file \`$arg' does not exist" 5395a966c04fSmrg fi 53966e7d3316Smrg arg=$save_arg 53976e7d3316Smrg prev= 53986e7d3316Smrg continue 53996e7d3316Smrg ;; 54006e7d3316Smrg precious_regex) 54016e7d3316Smrg precious_files_regex="$arg" 54026e7d3316Smrg prev= 54036e7d3316Smrg continue 54046e7d3316Smrg ;; 54056e7d3316Smrg release) 54066e7d3316Smrg release="-$arg" 54076e7d3316Smrg prev= 54086e7d3316Smrg continue 54096e7d3316Smrg ;; 54106e7d3316Smrg rpath | xrpath) 54116e7d3316Smrg # We need an absolute path. 54126e7d3316Smrg case $arg in 54136e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 54146e7d3316Smrg *) 54156e7d3316Smrg func_fatal_error "only absolute run-paths are allowed" 54166e7d3316Smrg ;; 54176e7d3316Smrg esac 54186e7d3316Smrg if test "$prev" = rpath; then 54196e7d3316Smrg case "$rpath " in 54206e7d3316Smrg *" $arg "*) ;; 542197cf2ee2Smrg *) func_append rpath " $arg" ;; 54226e7d3316Smrg esac 5423a966c04fSmrg else 54246e7d3316Smrg case "$xrpath " in 54256e7d3316Smrg *" $arg "*) ;; 542697cf2ee2Smrg *) func_append xrpath " $arg" ;; 54276e7d3316Smrg esac 5428a966c04fSmrg fi 54296e7d3316Smrg prev= 54306e7d3316Smrg continue 54316e7d3316Smrg ;; 54326e7d3316Smrg shrext) 54336e7d3316Smrg shrext_cmds="$arg" 54346e7d3316Smrg prev= 54356e7d3316Smrg continue 54366e7d3316Smrg ;; 54376e7d3316Smrg weak) 543897cf2ee2Smrg func_append weak_libs " $arg" 54396e7d3316Smrg prev= 54406e7d3316Smrg continue 54416e7d3316Smrg ;; 54426e7d3316Smrg xcclinker) 544397cf2ee2Smrg func_append linker_flags " $qarg" 544497cf2ee2Smrg func_append compiler_flags " $qarg" 54456e7d3316Smrg prev= 54466e7d3316Smrg func_append compile_command " $qarg" 54476e7d3316Smrg func_append finalize_command " $qarg" 54486e7d3316Smrg continue 54496e7d3316Smrg ;; 54506e7d3316Smrg xcompiler) 545197cf2ee2Smrg func_append compiler_flags " $qarg" 54526e7d3316Smrg prev= 54536e7d3316Smrg func_append compile_command " $qarg" 54546e7d3316Smrg func_append finalize_command " $qarg" 54556e7d3316Smrg continue 54566e7d3316Smrg ;; 54576e7d3316Smrg xlinker) 545897cf2ee2Smrg func_append linker_flags " $qarg" 545997cf2ee2Smrg func_append compiler_flags " $wl$qarg" 54606e7d3316Smrg prev= 54616e7d3316Smrg func_append compile_command " $wl$qarg" 54626e7d3316Smrg func_append finalize_command " $wl$qarg" 54636e7d3316Smrg continue 54646e7d3316Smrg ;; 54656e7d3316Smrg *) 54666e7d3316Smrg eval "$prev=\"\$arg\"" 54676e7d3316Smrg prev= 54686e7d3316Smrg continue 54696e7d3316Smrg ;; 5470a966c04fSmrg esac 54716e7d3316Smrg fi # test -n "$prev" 5472a966c04fSmrg 54736e7d3316Smrg prevarg="$arg" 5474a966c04fSmrg 54756e7d3316Smrg case $arg in 54766e7d3316Smrg -all-static) 54776e7d3316Smrg if test -n "$link_static_flag"; then 54786e7d3316Smrg # See comment for -static flag below, for more details. 54796e7d3316Smrg func_append compile_command " $link_static_flag" 54806e7d3316Smrg func_append finalize_command " $link_static_flag" 54816e7d3316Smrg fi 54826e7d3316Smrg continue 54836e7d3316Smrg ;; 5484a966c04fSmrg 54856e7d3316Smrg -allow-undefined) 54866e7d3316Smrg # FIXME: remove this flag sometime in the future. 54876e7d3316Smrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 54886e7d3316Smrg ;; 5489a966c04fSmrg 54906e7d3316Smrg -avoid-version) 54916e7d3316Smrg avoid_version=yes 54926e7d3316Smrg continue 54936e7d3316Smrg ;; 5494a966c04fSmrg 54956e7d3316Smrg -bindir) 54966e7d3316Smrg prev=bindir 54976e7d3316Smrg continue 54986e7d3316Smrg ;; 5499a966c04fSmrg 55006e7d3316Smrg -dlopen) 55016e7d3316Smrg prev=dlfiles 55026e7d3316Smrg continue 55036e7d3316Smrg ;; 5504a966c04fSmrg 55056e7d3316Smrg -dlpreopen) 55066e7d3316Smrg prev=dlprefiles 55076e7d3316Smrg continue 55086e7d3316Smrg ;; 5509a966c04fSmrg 55106e7d3316Smrg -export-dynamic) 55116e7d3316Smrg export_dynamic=yes 55126e7d3316Smrg continue 55136e7d3316Smrg ;; 5514a966c04fSmrg 55156e7d3316Smrg -export-symbols | -export-symbols-regex) 55166e7d3316Smrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 55176e7d3316Smrg func_fatal_error "more than one -exported-symbols argument is not allowed" 55186e7d3316Smrg fi 55196e7d3316Smrg if test "X$arg" = "X-export-symbols"; then 55206e7d3316Smrg prev=expsyms 55216e7d3316Smrg else 55226e7d3316Smrg prev=expsyms_regex 55236e7d3316Smrg fi 55246e7d3316Smrg continue 55256e7d3316Smrg ;; 5526a966c04fSmrg 55276e7d3316Smrg -framework) 55286e7d3316Smrg prev=framework 55296e7d3316Smrg continue 55306e7d3316Smrg ;; 5531a966c04fSmrg 55326e7d3316Smrg -inst-prefix-dir) 55336e7d3316Smrg prev=inst_prefix 55346e7d3316Smrg continue 55356e7d3316Smrg ;; 5536a966c04fSmrg 55376e7d3316Smrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 55386e7d3316Smrg # so, if we see these flags be careful not to treat them like -L 55396e7d3316Smrg -L[A-Z][A-Z]*:*) 55406e7d3316Smrg case $with_gcc/$host in 55416e7d3316Smrg no/*-*-irix* | /*-*-irix*) 55426e7d3316Smrg func_append compile_command " $arg" 55436e7d3316Smrg func_append finalize_command " $arg" 55446e7d3316Smrg ;; 55456e7d3316Smrg esac 55466e7d3316Smrg continue 55476e7d3316Smrg ;; 5548a966c04fSmrg 55496e7d3316Smrg -L*) 555097cf2ee2Smrg func_stripname "-L" '' "$arg" 555197cf2ee2Smrg if test -z "$func_stripname_result"; then 55526e7d3316Smrg if test "$#" -gt 0; then 55536e7d3316Smrg func_fatal_error "require no space between \`-L' and \`$1'" 55546e7d3316Smrg else 55556e7d3316Smrg func_fatal_error "need path for \`-L' option" 55566e7d3316Smrg fi 55576e7d3316Smrg fi 555897cf2ee2Smrg func_resolve_sysroot "$func_stripname_result" 555997cf2ee2Smrg dir=$func_resolve_sysroot_result 55606e7d3316Smrg # We need an absolute path. 55616e7d3316Smrg case $dir in 55626e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 55636e7d3316Smrg *) 55646e7d3316Smrg absdir=`cd "$dir" && pwd` 55656e7d3316Smrg test -z "$absdir" && \ 55666e7d3316Smrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 55676e7d3316Smrg dir="$absdir" 55686e7d3316Smrg ;; 55696e7d3316Smrg esac 55706e7d3316Smrg case "$deplibs " in 557197cf2ee2Smrg *" -L$dir "* | *" $arg "*) 557297cf2ee2Smrg # Will only happen for absolute or sysroot arguments 557397cf2ee2Smrg ;; 55746e7d3316Smrg *) 557597cf2ee2Smrg # Preserve sysroot, but never include relative directories 557697cf2ee2Smrg case $dir in 557797cf2ee2Smrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 557897cf2ee2Smrg *) func_append deplibs " -L$dir" ;; 557997cf2ee2Smrg esac 558097cf2ee2Smrg func_append lib_search_path " $dir" 55816e7d3316Smrg ;; 55826e7d3316Smrg esac 55836e7d3316Smrg case $host in 55846e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 55856e7d3316Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 55866e7d3316Smrg case :$dllsearchpath: in 55876e7d3316Smrg *":$dir:"*) ;; 55886e7d3316Smrg ::) dllsearchpath=$dir;; 558997cf2ee2Smrg *) func_append dllsearchpath ":$dir";; 55906e7d3316Smrg esac 55916e7d3316Smrg case :$dllsearchpath: in 55926e7d3316Smrg *":$testbindir:"*) ;; 55936e7d3316Smrg ::) dllsearchpath=$testbindir;; 559497cf2ee2Smrg *) func_append dllsearchpath ":$testbindir";; 55956e7d3316Smrg esac 55966e7d3316Smrg ;; 55976e7d3316Smrg esac 55986e7d3316Smrg continue 55996e7d3316Smrg ;; 5600a966c04fSmrg 56016e7d3316Smrg -l*) 56026e7d3316Smrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 56036e7d3316Smrg case $host in 56046e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 56056e7d3316Smrg # These systems don't actually have a C or math library (as such) 56066e7d3316Smrg continue 56076e7d3316Smrg ;; 56086e7d3316Smrg *-*-os2*) 56096e7d3316Smrg # These systems don't actually have a C library (as such) 56106e7d3316Smrg test "X$arg" = "X-lc" && continue 56116e7d3316Smrg ;; 56126e7d3316Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 56136e7d3316Smrg # Do not include libc due to us having libc/libc_r. 56146e7d3316Smrg test "X$arg" = "X-lc" && continue 56156e7d3316Smrg ;; 56166e7d3316Smrg *-*-rhapsody* | *-*-darwin1.[012]) 56176e7d3316Smrg # Rhapsody C and math libraries are in the System framework 561897cf2ee2Smrg func_append deplibs " System.ltframework" 56196e7d3316Smrg continue 56206e7d3316Smrg ;; 56216e7d3316Smrg *-*-sco3.2v5* | *-*-sco5v6*) 56226e7d3316Smrg # Causes problems with __ctype 56236e7d3316Smrg test "X$arg" = "X-lc" && continue 56246e7d3316Smrg ;; 56256e7d3316Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 56266e7d3316Smrg # Compiler inserts libc in the correct place for threads to work 56276e7d3316Smrg test "X$arg" = "X-lc" && continue 56286e7d3316Smrg ;; 56296e7d3316Smrg esac 56306e7d3316Smrg elif test "X$arg" = "X-lc_r"; then 56316e7d3316Smrg case $host in 56326e7d3316Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 56336e7d3316Smrg # Do not include libc_r directly, use -pthread flag. 56346e7d3316Smrg continue 56356e7d3316Smrg ;; 56366e7d3316Smrg esac 56376e7d3316Smrg fi 563897cf2ee2Smrg func_append deplibs " $arg" 56396e7d3316Smrg continue 56406e7d3316Smrg ;; 5641a966c04fSmrg 56426e7d3316Smrg -module) 56436e7d3316Smrg module=yes 56446e7d3316Smrg continue 56456e7d3316Smrg ;; 5646a966c04fSmrg 56476e7d3316Smrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 56486e7d3316Smrg # classes, name mangling, and exception handling. 56496e7d3316Smrg # Darwin uses the -arch flag to determine output architecture. 565097cf2ee2Smrg -model|-arch|-isysroot|--sysroot) 565197cf2ee2Smrg func_append compiler_flags " $arg" 56526e7d3316Smrg func_append compile_command " $arg" 56536e7d3316Smrg func_append finalize_command " $arg" 56546e7d3316Smrg prev=xcompiler 56556e7d3316Smrg continue 56566e7d3316Smrg ;; 5657a966c04fSmrg 5658ac92798bSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 5659ac92798bSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 566097cf2ee2Smrg func_append compiler_flags " $arg" 56616e7d3316Smrg func_append compile_command " $arg" 56626e7d3316Smrg func_append finalize_command " $arg" 56636e7d3316Smrg case "$new_inherited_linker_flags " in 56646e7d3316Smrg *" $arg "*) ;; 566597cf2ee2Smrg * ) func_append new_inherited_linker_flags " $arg" ;; 56666e7d3316Smrg esac 56676e7d3316Smrg continue 56686e7d3316Smrg ;; 5669a966c04fSmrg 56706e7d3316Smrg -multi_module) 56716e7d3316Smrg single_module="${wl}-multi_module" 56726e7d3316Smrg continue 56736e7d3316Smrg ;; 5674a966c04fSmrg 56756e7d3316Smrg -no-fast-install) 56766e7d3316Smrg fast_install=no 56776e7d3316Smrg continue 56786e7d3316Smrg ;; 5679a966c04fSmrg 56806e7d3316Smrg -no-install) 56816e7d3316Smrg case $host in 56826e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 56836e7d3316Smrg # The PATH hackery in wrapper scripts is required on Windows 56846e7d3316Smrg # and Darwin in order for the loader to find any dlls it needs. 56856e7d3316Smrg func_warning "\`-no-install' is ignored for $host" 56866e7d3316Smrg func_warning "assuming \`-no-fast-install' instead" 56876e7d3316Smrg fast_install=no 56886e7d3316Smrg ;; 56896e7d3316Smrg *) no_install=yes ;; 56906e7d3316Smrg esac 56916e7d3316Smrg continue 56926e7d3316Smrg ;; 5693a966c04fSmrg 56946e7d3316Smrg -no-undefined) 56956e7d3316Smrg allow_undefined=no 56966e7d3316Smrg continue 56976e7d3316Smrg ;; 5698a966c04fSmrg 56996e7d3316Smrg -objectlist) 57006e7d3316Smrg prev=objectlist 57016e7d3316Smrg continue 57026e7d3316Smrg ;; 5703a966c04fSmrg 57046e7d3316Smrg -o) prev=output ;; 5705a966c04fSmrg 57066e7d3316Smrg -precious-files-regex) 57076e7d3316Smrg prev=precious_regex 57086e7d3316Smrg continue 57096e7d3316Smrg ;; 5710a966c04fSmrg 57116e7d3316Smrg -release) 57126e7d3316Smrg prev=release 57136e7d3316Smrg continue 57146e7d3316Smrg ;; 5715a966c04fSmrg 57166e7d3316Smrg -rpath) 57176e7d3316Smrg prev=rpath 57186e7d3316Smrg continue 57196e7d3316Smrg ;; 5720a966c04fSmrg 57216e7d3316Smrg -R) 57226e7d3316Smrg prev=xrpath 57236e7d3316Smrg continue 57246e7d3316Smrg ;; 5725a966c04fSmrg 57266e7d3316Smrg -R*) 57276e7d3316Smrg func_stripname '-R' '' "$arg" 57286e7d3316Smrg dir=$func_stripname_result 57296e7d3316Smrg # We need an absolute path. 57306e7d3316Smrg case $dir in 57316e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) ;; 573297cf2ee2Smrg =*) 573397cf2ee2Smrg func_stripname '=' '' "$dir" 573497cf2ee2Smrg dir=$lt_sysroot$func_stripname_result 573597cf2ee2Smrg ;; 57366e7d3316Smrg *) 57376e7d3316Smrg func_fatal_error "only absolute run-paths are allowed" 57386e7d3316Smrg ;; 57396e7d3316Smrg esac 57406e7d3316Smrg case "$xrpath " in 57416e7d3316Smrg *" $dir "*) ;; 574297cf2ee2Smrg *) func_append xrpath " $dir" ;; 57436e7d3316Smrg esac 57446e7d3316Smrg continue 57456e7d3316Smrg ;; 5746a966c04fSmrg 57476e7d3316Smrg -shared) 57486e7d3316Smrg # The effects of -shared are defined in a previous loop. 57496e7d3316Smrg continue 57506e7d3316Smrg ;; 5751a966c04fSmrg 57526e7d3316Smrg -shrext) 57536e7d3316Smrg prev=shrext 57546e7d3316Smrg continue 57556e7d3316Smrg ;; 5756a966c04fSmrg 57576e7d3316Smrg -static | -static-libtool-libs) 57586e7d3316Smrg # The effects of -static are defined in a previous loop. 57596e7d3316Smrg # We used to do the same as -all-static on platforms that 57606e7d3316Smrg # didn't have a PIC flag, but the assumption that the effects 57616e7d3316Smrg # would be equivalent was wrong. It would break on at least 57626e7d3316Smrg # Digital Unix and AIX. 57636e7d3316Smrg continue 57646e7d3316Smrg ;; 5765a966c04fSmrg 57666e7d3316Smrg -thread-safe) 57676e7d3316Smrg thread_safe=yes 57686e7d3316Smrg continue 57696e7d3316Smrg ;; 5770a966c04fSmrg 57716e7d3316Smrg -version-info) 57726e7d3316Smrg prev=vinfo 57736e7d3316Smrg continue 57746e7d3316Smrg ;; 5775a966c04fSmrg 57766e7d3316Smrg -version-number) 57776e7d3316Smrg prev=vinfo 57786e7d3316Smrg vinfo_number=yes 57796e7d3316Smrg continue 57806e7d3316Smrg ;; 5781a966c04fSmrg 57826e7d3316Smrg -weak) 57836e7d3316Smrg prev=weak 57846e7d3316Smrg continue 57856e7d3316Smrg ;; 5786a966c04fSmrg 57876e7d3316Smrg -Wc,*) 57886e7d3316Smrg func_stripname '-Wc,' '' "$arg" 57896e7d3316Smrg args=$func_stripname_result 57906e7d3316Smrg arg= 57916e7d3316Smrg save_ifs="$IFS"; IFS=',' 57926e7d3316Smrg for flag in $args; do 57936e7d3316Smrg IFS="$save_ifs" 57946e7d3316Smrg func_quote_for_eval "$flag" 579597cf2ee2Smrg func_append arg " $func_quote_for_eval_result" 579697cf2ee2Smrg func_append compiler_flags " $func_quote_for_eval_result" 57976e7d3316Smrg done 57986e7d3316Smrg IFS="$save_ifs" 57996e7d3316Smrg func_stripname ' ' '' "$arg" 58006e7d3316Smrg arg=$func_stripname_result 58016e7d3316Smrg ;; 5802a966c04fSmrg 58036e7d3316Smrg -Wl,*) 58046e7d3316Smrg func_stripname '-Wl,' '' "$arg" 58056e7d3316Smrg args=$func_stripname_result 58066e7d3316Smrg arg= 58076e7d3316Smrg save_ifs="$IFS"; IFS=',' 58086e7d3316Smrg for flag in $args; do 58096e7d3316Smrg IFS="$save_ifs" 58106e7d3316Smrg func_quote_for_eval "$flag" 581197cf2ee2Smrg func_append arg " $wl$func_quote_for_eval_result" 581297cf2ee2Smrg func_append compiler_flags " $wl$func_quote_for_eval_result" 581397cf2ee2Smrg func_append linker_flags " $func_quote_for_eval_result" 58146e7d3316Smrg done 58156e7d3316Smrg IFS="$save_ifs" 58166e7d3316Smrg func_stripname ' ' '' "$arg" 58176e7d3316Smrg arg=$func_stripname_result 58186e7d3316Smrg ;; 5819a966c04fSmrg 58206e7d3316Smrg -Xcompiler) 58216e7d3316Smrg prev=xcompiler 58226e7d3316Smrg continue 58236e7d3316Smrg ;; 5824a966c04fSmrg 58256e7d3316Smrg -Xlinker) 58266e7d3316Smrg prev=xlinker 58276e7d3316Smrg continue 58286e7d3316Smrg ;; 5829a966c04fSmrg 58306e7d3316Smrg -XCClinker) 58316e7d3316Smrg prev=xcclinker 58326e7d3316Smrg continue 58336e7d3316Smrg ;; 5834a966c04fSmrg 58356e7d3316Smrg # -msg_* for osf cc 58366e7d3316Smrg -msg_*) 58376e7d3316Smrg func_quote_for_eval "$arg" 58386e7d3316Smrg arg="$func_quote_for_eval_result" 58396e7d3316Smrg ;; 5840a966c04fSmrg 58416e7d3316Smrg # Flags to be passed through unchanged, with rationale: 58426e7d3316Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 58436e7d3316Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 58446e7d3316Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 58456e7d3316Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 58466e7d3316Smrg # -q* compiler args for the IBM compiler 58476e7d3316Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 58486e7d3316Smrg # -F/path path to uninstalled frameworks, gcc on darwin 58496e7d3316Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 58506e7d3316Smrg # @file GCC response files 58516e7d3316Smrg # -tp=* Portland pgcc target processor selection 585297cf2ee2Smrg # --sysroot=* for sysroot support 585397cf2ee2Smrg # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 58546e7d3316Smrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 585597cf2ee2Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 585697cf2ee2Smrg -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 58576e7d3316Smrg func_quote_for_eval "$arg" 58586e7d3316Smrg arg="$func_quote_for_eval_result" 58596e7d3316Smrg func_append compile_command " $arg" 58606e7d3316Smrg func_append finalize_command " $arg" 586197cf2ee2Smrg func_append compiler_flags " $arg" 58626e7d3316Smrg continue 58636e7d3316Smrg ;; 5864a966c04fSmrg 58656e7d3316Smrg # Some other compiler flag. 58666e7d3316Smrg -* | +*) 58676e7d3316Smrg func_quote_for_eval "$arg" 58686e7d3316Smrg arg="$func_quote_for_eval_result" 58696e7d3316Smrg ;; 5870a966c04fSmrg 58716e7d3316Smrg *.$objext) 58726e7d3316Smrg # A standard object. 587397cf2ee2Smrg func_append objs " $arg" 58746e7d3316Smrg ;; 5875a966c04fSmrg 58766e7d3316Smrg *.lo) 58776e7d3316Smrg # A libtool-controlled object. 5878a966c04fSmrg 58796e7d3316Smrg # Check to see that this really is a libtool object. 58806e7d3316Smrg if func_lalib_unsafe_p "$arg"; then 58816e7d3316Smrg pic_object= 58826e7d3316Smrg non_pic_object= 5883a966c04fSmrg 58846e7d3316Smrg # Read the .lo file 58856e7d3316Smrg func_source "$arg" 5886a966c04fSmrg 58876e7d3316Smrg if test -z "$pic_object" || 58886e7d3316Smrg test -z "$non_pic_object" || 58896e7d3316Smrg test "$pic_object" = none && 58906e7d3316Smrg test "$non_pic_object" = none; then 58916e7d3316Smrg func_fatal_error "cannot find name of object for \`$arg'" 58926e7d3316Smrg fi 58932e2dd055Smrg 58946e7d3316Smrg # Extract subdirectory from the argument. 58956e7d3316Smrg func_dirname "$arg" "/" "" 58966e7d3316Smrg xdir="$func_dirname_result" 5897a966c04fSmrg 58986e7d3316Smrg if test "$pic_object" != none; then 58996e7d3316Smrg # Prepend the subdirectory the object is found in. 59006e7d3316Smrg pic_object="$xdir$pic_object" 5901a966c04fSmrg 59026e7d3316Smrg if test "$prev" = dlfiles; then 59036e7d3316Smrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 590497cf2ee2Smrg func_append dlfiles " $pic_object" 59056e7d3316Smrg prev= 59066e7d3316Smrg continue 59076e7d3316Smrg else 59086e7d3316Smrg # If libtool objects are unsupported, then we need to preload. 59096e7d3316Smrg prev=dlprefiles 59106e7d3316Smrg fi 59116e7d3316Smrg fi 59126e7d3316Smrg 59136e7d3316Smrg # CHECK ME: I think I busted this. -Ossama 59146e7d3316Smrg if test "$prev" = dlprefiles; then 59156e7d3316Smrg # Preload the old-style object. 591697cf2ee2Smrg func_append dlprefiles " $pic_object" 59176e7d3316Smrg prev= 59186e7d3316Smrg fi 59196e7d3316Smrg 59206e7d3316Smrg # A PIC object. 59216e7d3316Smrg func_append libobjs " $pic_object" 59226e7d3316Smrg arg="$pic_object" 59236e7d3316Smrg fi 59246e7d3316Smrg 59256e7d3316Smrg # Non-PIC object. 59266e7d3316Smrg if test "$non_pic_object" != none; then 59276e7d3316Smrg # Prepend the subdirectory the object is found in. 59286e7d3316Smrg non_pic_object="$xdir$non_pic_object" 59296e7d3316Smrg 59306e7d3316Smrg # A standard non-PIC object 59316e7d3316Smrg func_append non_pic_objects " $non_pic_object" 59326e7d3316Smrg if test -z "$pic_object" || test "$pic_object" = none ; then 59336e7d3316Smrg arg="$non_pic_object" 59346e7d3316Smrg fi 59356e7d3316Smrg else 59366e7d3316Smrg # If the PIC object exists, use it instead. 59376e7d3316Smrg # $xdir was prepended to $pic_object above. 59386e7d3316Smrg non_pic_object="$pic_object" 59396e7d3316Smrg func_append non_pic_objects " $non_pic_object" 59406e7d3316Smrg fi 59416e7d3316Smrg else 59426e7d3316Smrg # Only an error if not doing a dry-run. 59436e7d3316Smrg if $opt_dry_run; then 59446e7d3316Smrg # Extract subdirectory from the argument. 59456e7d3316Smrg func_dirname "$arg" "/" "" 59466e7d3316Smrg xdir="$func_dirname_result" 59476e7d3316Smrg 59486e7d3316Smrg func_lo2o "$arg" 59496e7d3316Smrg pic_object=$xdir$objdir/$func_lo2o_result 59506e7d3316Smrg non_pic_object=$xdir$func_lo2o_result 59516e7d3316Smrg func_append libobjs " $pic_object" 59526e7d3316Smrg func_append non_pic_objects " $non_pic_object" 59536e7d3316Smrg else 59546e7d3316Smrg func_fatal_error "\`$arg' is not a valid libtool object" 59556e7d3316Smrg fi 59566e7d3316Smrg fi 59576e7d3316Smrg ;; 59586e7d3316Smrg 59596e7d3316Smrg *.$libext) 59606e7d3316Smrg # An archive. 596197cf2ee2Smrg func_append deplibs " $arg" 596297cf2ee2Smrg func_append old_deplibs " $arg" 59636e7d3316Smrg continue 59646e7d3316Smrg ;; 59656e7d3316Smrg 59666e7d3316Smrg *.la) 59676e7d3316Smrg # A libtool-controlled library. 59686e7d3316Smrg 596997cf2ee2Smrg func_resolve_sysroot "$arg" 59706e7d3316Smrg if test "$prev" = dlfiles; then 59716e7d3316Smrg # This library was specified with -dlopen. 597297cf2ee2Smrg func_append dlfiles " $func_resolve_sysroot_result" 59736e7d3316Smrg prev= 59746e7d3316Smrg elif test "$prev" = dlprefiles; then 59756e7d3316Smrg # The library was specified with -dlpreopen. 597697cf2ee2Smrg func_append dlprefiles " $func_resolve_sysroot_result" 59776e7d3316Smrg prev= 59786e7d3316Smrg else 597997cf2ee2Smrg func_append deplibs " $func_resolve_sysroot_result" 59806e7d3316Smrg fi 59816e7d3316Smrg continue 59826e7d3316Smrg ;; 59836e7d3316Smrg 59846e7d3316Smrg # Some other compiler argument. 59856e7d3316Smrg *) 59866e7d3316Smrg # Unknown arguments in both finalize_command and compile_command need 59876e7d3316Smrg # to be aesthetically quoted because they are evaled later. 59886e7d3316Smrg func_quote_for_eval "$arg" 59896e7d3316Smrg arg="$func_quote_for_eval_result" 59906e7d3316Smrg ;; 59916e7d3316Smrg esac # arg 59926e7d3316Smrg 59936e7d3316Smrg # Now actually substitute the argument into the commands. 59946e7d3316Smrg if test -n "$arg"; then 59956e7d3316Smrg func_append compile_command " $arg" 59966e7d3316Smrg func_append finalize_command " $arg" 59976e7d3316Smrg fi 59986e7d3316Smrg done # argument parsing loop 59996e7d3316Smrg 60006e7d3316Smrg test -n "$prev" && \ 60016e7d3316Smrg func_fatal_help "the \`$prevarg' option requires an argument" 60026e7d3316Smrg 60036e7d3316Smrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 60046e7d3316Smrg eval arg=\"$export_dynamic_flag_spec\" 60056e7d3316Smrg func_append compile_command " $arg" 60066e7d3316Smrg func_append finalize_command " $arg" 60076e7d3316Smrg fi 60086e7d3316Smrg 60096e7d3316Smrg oldlibs= 60106e7d3316Smrg # calculate the name of the file, without its directory 60116e7d3316Smrg func_basename "$output" 60126e7d3316Smrg outputname="$func_basename_result" 60136e7d3316Smrg libobjs_save="$libobjs" 60146e7d3316Smrg 60156e7d3316Smrg if test -n "$shlibpath_var"; then 60166e7d3316Smrg # get the directories listed in $shlibpath_var 60176e7d3316Smrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 6018a966c04fSmrg else 60196e7d3316Smrg shlib_search_path= 6020a966c04fSmrg fi 60216e7d3316Smrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 60226e7d3316Smrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 6023a966c04fSmrg 60246e7d3316Smrg func_dirname "$output" "/" "" 60256e7d3316Smrg output_objdir="$func_dirname_result$objdir" 602697cf2ee2Smrg func_to_tool_file "$output_objdir/" 602797cf2ee2Smrg tool_output_objdir=$func_to_tool_file_result 60286e7d3316Smrg # Create the object directory. 60296e7d3316Smrg func_mkdir_p "$output_objdir" 6030a966c04fSmrg 60316e7d3316Smrg # Determine the type of output 60326e7d3316Smrg case $output in 60336e7d3316Smrg "") 60346e7d3316Smrg func_fatal_help "you must specify an output file" 60356e7d3316Smrg ;; 60366e7d3316Smrg *.$libext) linkmode=oldlib ;; 60376e7d3316Smrg *.lo | *.$objext) linkmode=obj ;; 60386e7d3316Smrg *.la) linkmode=lib ;; 60396e7d3316Smrg *) linkmode=prog ;; # Anything else should be a program. 60406e7d3316Smrg esac 60416e7d3316Smrg 60426e7d3316Smrg specialdeplibs= 60436e7d3316Smrg 60446e7d3316Smrg libs= 60456e7d3316Smrg # Find all interdependent deplibs by searching for libraries 60466e7d3316Smrg # that are linked more than once (e.g. -la -lb -la) 60476e7d3316Smrg for deplib in $deplibs; do 604897cf2ee2Smrg if $opt_preserve_dup_deps ; then 60496e7d3316Smrg case "$libs " in 605097cf2ee2Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 60516e7d3316Smrg esac 60526e7d3316Smrg fi 605397cf2ee2Smrg func_append libs " $deplib" 60546e7d3316Smrg done 60556e7d3316Smrg 60566e7d3316Smrg if test "$linkmode" = lib; then 60576e7d3316Smrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 60586e7d3316Smrg 60596e7d3316Smrg # Compute libraries that are listed more than once in $predeps 60606e7d3316Smrg # $postdeps and mark them as special (i.e., whose duplicates are 60616e7d3316Smrg # not to be eliminated). 60626e7d3316Smrg pre_post_deps= 60636e7d3316Smrg if $opt_duplicate_compiler_generated_deps; then 60646e7d3316Smrg for pre_post_dep in $predeps $postdeps; do 60656e7d3316Smrg case "$pre_post_deps " in 606697cf2ee2Smrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 60676e7d3316Smrg esac 606897cf2ee2Smrg func_append pre_post_deps " $pre_post_dep" 60696e7d3316Smrg done 60706e7d3316Smrg fi 60716e7d3316Smrg pre_post_deps= 60726e7d3316Smrg fi 60736e7d3316Smrg 60746e7d3316Smrg deplibs= 60756e7d3316Smrg newdependency_libs= 60766e7d3316Smrg newlib_search_path= 60776e7d3316Smrg need_relink=no # whether we're linking any uninstalled libtool libraries 60786e7d3316Smrg notinst_deplibs= # not-installed libtool libraries 60796e7d3316Smrg notinst_path= # paths that contain not-installed libtool libraries 60806e7d3316Smrg 60816e7d3316Smrg case $linkmode in 60826e7d3316Smrg lib) 60836e7d3316Smrg passes="conv dlpreopen link" 60846e7d3316Smrg for file in $dlfiles $dlprefiles; do 60856e7d3316Smrg case $file in 60866e7d3316Smrg *.la) ;; 60876e7d3316Smrg *) 60886e7d3316Smrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 60896e7d3316Smrg ;; 60906e7d3316Smrg esac 60916e7d3316Smrg done 60926e7d3316Smrg ;; 60936e7d3316Smrg prog) 60946e7d3316Smrg compile_deplibs= 60956e7d3316Smrg finalize_deplibs= 60966e7d3316Smrg alldeplibs=no 60976e7d3316Smrg newdlfiles= 60986e7d3316Smrg newdlprefiles= 60996e7d3316Smrg passes="conv scan dlopen dlpreopen link" 61006e7d3316Smrg ;; 61016e7d3316Smrg *) passes="conv" 61026e7d3316Smrg ;; 61036e7d3316Smrg esac 61046e7d3316Smrg 61056e7d3316Smrg for pass in $passes; do 61066e7d3316Smrg # The preopen pass in lib mode reverses $deplibs; put it back here 61076e7d3316Smrg # so that -L comes before libs that need it for instance... 61086e7d3316Smrg if test "$linkmode,$pass" = "lib,link"; then 61096e7d3316Smrg ## FIXME: Find the place where the list is rebuilt in the wrong 61106e7d3316Smrg ## order, and fix it there properly 61116e7d3316Smrg tmp_deplibs= 61126e7d3316Smrg for deplib in $deplibs; do 61136e7d3316Smrg tmp_deplibs="$deplib $tmp_deplibs" 61146e7d3316Smrg done 61156e7d3316Smrg deplibs="$tmp_deplibs" 61166e7d3316Smrg fi 61176e7d3316Smrg 61186e7d3316Smrg if test "$linkmode,$pass" = "lib,link" || 61196e7d3316Smrg test "$linkmode,$pass" = "prog,scan"; then 61206e7d3316Smrg libs="$deplibs" 61216e7d3316Smrg deplibs= 61226e7d3316Smrg fi 61236e7d3316Smrg if test "$linkmode" = prog; then 61246e7d3316Smrg case $pass in 61256e7d3316Smrg dlopen) libs="$dlfiles" ;; 61266e7d3316Smrg dlpreopen) libs="$dlprefiles" ;; 61276e7d3316Smrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 61286e7d3316Smrg esac 61296e7d3316Smrg fi 61306e7d3316Smrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 61316e7d3316Smrg # Collect and forward deplibs of preopened libtool libs 61326e7d3316Smrg for lib in $dlprefiles; do 61336e7d3316Smrg # Ignore non-libtool-libs 61346e7d3316Smrg dependency_libs= 613597cf2ee2Smrg func_resolve_sysroot "$lib" 61366e7d3316Smrg case $lib in 613797cf2ee2Smrg *.la) func_source "$func_resolve_sysroot_result" ;; 61386e7d3316Smrg esac 61396e7d3316Smrg 61406e7d3316Smrg # Collect preopened libtool deplibs, except any this library 61416e7d3316Smrg # has declared as weak libs 61426e7d3316Smrg for deplib in $dependency_libs; do 61436e7d3316Smrg func_basename "$deplib" 61446e7d3316Smrg deplib_base=$func_basename_result 61456e7d3316Smrg case " $weak_libs " in 61466e7d3316Smrg *" $deplib_base "*) ;; 614797cf2ee2Smrg *) func_append deplibs " $deplib" ;; 61486e7d3316Smrg esac 61496e7d3316Smrg done 61506e7d3316Smrg done 61516e7d3316Smrg libs="$dlprefiles" 61526e7d3316Smrg fi 61536e7d3316Smrg if test "$pass" = dlopen; then 61546e7d3316Smrg # Collect dlpreopened libraries 61556e7d3316Smrg save_deplibs="$deplibs" 61566e7d3316Smrg deplibs= 61576e7d3316Smrg fi 61586e7d3316Smrg 61596e7d3316Smrg for deplib in $libs; do 61606e7d3316Smrg lib= 61616e7d3316Smrg found=no 61626e7d3316Smrg case $deplib in 6163ac92798bSmrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 6164ac92798bSmrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 61656e7d3316Smrg if test "$linkmode,$pass" = "prog,link"; then 61666e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 61676e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 61686e7d3316Smrg else 616997cf2ee2Smrg func_append compiler_flags " $deplib" 61706e7d3316Smrg if test "$linkmode" = lib ; then 61716e7d3316Smrg case "$new_inherited_linker_flags " in 61726e7d3316Smrg *" $deplib "*) ;; 617397cf2ee2Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 61746e7d3316Smrg esac 61756e7d3316Smrg fi 61766e7d3316Smrg fi 61776e7d3316Smrg continue 61786e7d3316Smrg ;; 61796e7d3316Smrg -l*) 61806e7d3316Smrg if test "$linkmode" != lib && test "$linkmode" != prog; then 61816e7d3316Smrg func_warning "\`-l' is ignored for archives/objects" 61826e7d3316Smrg continue 61836e7d3316Smrg fi 61846e7d3316Smrg func_stripname '-l' '' "$deplib" 61856e7d3316Smrg name=$func_stripname_result 61866e7d3316Smrg if test "$linkmode" = lib; then 61876e7d3316Smrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 61886e7d3316Smrg else 61896e7d3316Smrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 61906e7d3316Smrg fi 61916e7d3316Smrg for searchdir in $searchdirs; do 61926e7d3316Smrg for search_ext in .la $std_shrext .so .a; do 61936e7d3316Smrg # Search the libtool library 61946e7d3316Smrg lib="$searchdir/lib${name}${search_ext}" 61956e7d3316Smrg if test -f "$lib"; then 61966e7d3316Smrg if test "$search_ext" = ".la"; then 61976e7d3316Smrg found=yes 61986e7d3316Smrg else 61996e7d3316Smrg found=no 62006e7d3316Smrg fi 62016e7d3316Smrg break 2 62026e7d3316Smrg fi 62036e7d3316Smrg done 62046e7d3316Smrg done 62056e7d3316Smrg if test "$found" != yes; then 62066e7d3316Smrg # deplib doesn't seem to be a libtool library 62076e7d3316Smrg if test "$linkmode,$pass" = "prog,link"; then 62086e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 62096e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 62106e7d3316Smrg else 62116e7d3316Smrg deplibs="$deplib $deplibs" 62126e7d3316Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 62136e7d3316Smrg fi 62146e7d3316Smrg continue 62156e7d3316Smrg else # deplib is a libtool library 62166e7d3316Smrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 62176e7d3316Smrg # We need to do some special things here, and not later. 62186e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 62196e7d3316Smrg case " $predeps $postdeps " in 62206e7d3316Smrg *" $deplib "*) 62216e7d3316Smrg if func_lalib_p "$lib"; then 62226e7d3316Smrg library_names= 62236e7d3316Smrg old_library= 62246e7d3316Smrg func_source "$lib" 62256e7d3316Smrg for l in $old_library $library_names; do 62266e7d3316Smrg ll="$l" 62276e7d3316Smrg done 62286e7d3316Smrg if test "X$ll" = "X$old_library" ; then # only static version available 62296e7d3316Smrg found=no 62306e7d3316Smrg func_dirname "$lib" "" "." 62316e7d3316Smrg ladir="$func_dirname_result" 62326e7d3316Smrg lib=$ladir/$old_library 62336e7d3316Smrg if test "$linkmode,$pass" = "prog,link"; then 62346e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 62356e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 62366e7d3316Smrg else 62376e7d3316Smrg deplibs="$deplib $deplibs" 62386e7d3316Smrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 62396e7d3316Smrg fi 62406e7d3316Smrg continue 62416e7d3316Smrg fi 62426e7d3316Smrg fi 62436e7d3316Smrg ;; 62446e7d3316Smrg *) ;; 62456e7d3316Smrg esac 62466e7d3316Smrg fi 62476e7d3316Smrg fi 62486e7d3316Smrg ;; # -l 62496e7d3316Smrg *.ltframework) 62506e7d3316Smrg if test "$linkmode,$pass" = "prog,link"; then 62516e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 62526e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 62536e7d3316Smrg else 62546e7d3316Smrg deplibs="$deplib $deplibs" 62556e7d3316Smrg if test "$linkmode" = lib ; then 62566e7d3316Smrg case "$new_inherited_linker_flags " in 62576e7d3316Smrg *" $deplib "*) ;; 625897cf2ee2Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 62596e7d3316Smrg esac 62606e7d3316Smrg fi 62616e7d3316Smrg fi 62626e7d3316Smrg continue 62636e7d3316Smrg ;; 62646e7d3316Smrg -L*) 62656e7d3316Smrg case $linkmode in 62666e7d3316Smrg lib) 62676e7d3316Smrg deplibs="$deplib $deplibs" 62686e7d3316Smrg test "$pass" = conv && continue 62696e7d3316Smrg newdependency_libs="$deplib $newdependency_libs" 62706e7d3316Smrg func_stripname '-L' '' "$deplib" 627197cf2ee2Smrg func_resolve_sysroot "$func_stripname_result" 627297cf2ee2Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 62736e7d3316Smrg ;; 62746e7d3316Smrg prog) 62756e7d3316Smrg if test "$pass" = conv; then 62766e7d3316Smrg deplibs="$deplib $deplibs" 62776e7d3316Smrg continue 62786e7d3316Smrg fi 62796e7d3316Smrg if test "$pass" = scan; then 62806e7d3316Smrg deplibs="$deplib $deplibs" 62816e7d3316Smrg else 62826e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 62836e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 62846e7d3316Smrg fi 62856e7d3316Smrg func_stripname '-L' '' "$deplib" 628697cf2ee2Smrg func_resolve_sysroot "$func_stripname_result" 628797cf2ee2Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 62886e7d3316Smrg ;; 62896e7d3316Smrg *) 62906e7d3316Smrg func_warning "\`-L' is ignored for archives/objects" 62916e7d3316Smrg ;; 62926e7d3316Smrg esac # linkmode 62936e7d3316Smrg continue 62946e7d3316Smrg ;; # -L 62956e7d3316Smrg -R*) 62966e7d3316Smrg if test "$pass" = link; then 62976e7d3316Smrg func_stripname '-R' '' "$deplib" 629897cf2ee2Smrg func_resolve_sysroot "$func_stripname_result" 629997cf2ee2Smrg dir=$func_resolve_sysroot_result 63006e7d3316Smrg # Make sure the xrpath contains only unique directories. 63016e7d3316Smrg case "$xrpath " in 63026e7d3316Smrg *" $dir "*) ;; 630397cf2ee2Smrg *) func_append xrpath " $dir" ;; 63046e7d3316Smrg esac 63056e7d3316Smrg fi 63066e7d3316Smrg deplibs="$deplib $deplibs" 63076e7d3316Smrg continue 63086e7d3316Smrg ;; 630997cf2ee2Smrg *.la) 631097cf2ee2Smrg func_resolve_sysroot "$deplib" 631197cf2ee2Smrg lib=$func_resolve_sysroot_result 631297cf2ee2Smrg ;; 63136e7d3316Smrg *.$libext) 63146e7d3316Smrg if test "$pass" = conv; then 63156e7d3316Smrg deplibs="$deplib $deplibs" 63166e7d3316Smrg continue 63176e7d3316Smrg fi 63186e7d3316Smrg case $linkmode in 63196e7d3316Smrg lib) 63206e7d3316Smrg # Linking convenience modules into shared libraries is allowed, 63216e7d3316Smrg # but linking other static libraries is non-portable. 63226e7d3316Smrg case " $dlpreconveniencelibs " in 63236e7d3316Smrg *" $deplib "*) ;; 63246e7d3316Smrg *) 63256e7d3316Smrg valid_a_lib=no 63266e7d3316Smrg case $deplibs_check_method in 63276e7d3316Smrg match_pattern*) 63286e7d3316Smrg set dummy $deplibs_check_method; shift 63296e7d3316Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 63306e7d3316Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 63316e7d3316Smrg | $EGREP "$match_pattern_regex" > /dev/null; then 63326e7d3316Smrg valid_a_lib=yes 63336e7d3316Smrg fi 63346e7d3316Smrg ;; 63356e7d3316Smrg pass_all) 63366e7d3316Smrg valid_a_lib=yes 63376e7d3316Smrg ;; 63386e7d3316Smrg esac 63396e7d3316Smrg if test "$valid_a_lib" != yes; then 63406e7d3316Smrg echo 63416e7d3316Smrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 63426e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 63436e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 63446e7d3316Smrg echo "*** shared version of the library, which you do not appear to have" 63456e7d3316Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 63466e7d3316Smrg echo "*** that it is just a static archive that I should not use here." 63476e7d3316Smrg else 63486e7d3316Smrg echo 63496e7d3316Smrg $ECHO "*** Warning: Linking the shared library $output against the" 63506e7d3316Smrg $ECHO "*** static library $deplib is not portable!" 63516e7d3316Smrg deplibs="$deplib $deplibs" 63526e7d3316Smrg fi 63536e7d3316Smrg ;; 63546e7d3316Smrg esac 63556e7d3316Smrg continue 63566e7d3316Smrg ;; 63576e7d3316Smrg prog) 63586e7d3316Smrg if test "$pass" != link; then 63596e7d3316Smrg deplibs="$deplib $deplibs" 63606e7d3316Smrg else 63616e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 63626e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 63636e7d3316Smrg fi 63646e7d3316Smrg continue 63656e7d3316Smrg ;; 63666e7d3316Smrg esac # linkmode 63676e7d3316Smrg ;; # *.$libext 63686e7d3316Smrg *.lo | *.$objext) 63696e7d3316Smrg if test "$pass" = conv; then 63706e7d3316Smrg deplibs="$deplib $deplibs" 63716e7d3316Smrg elif test "$linkmode" = prog; then 63726e7d3316Smrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 63736e7d3316Smrg # If there is no dlopen support or we're linking statically, 63746e7d3316Smrg # we need to preload. 637597cf2ee2Smrg func_append newdlprefiles " $deplib" 63766e7d3316Smrg compile_deplibs="$deplib $compile_deplibs" 63776e7d3316Smrg finalize_deplibs="$deplib $finalize_deplibs" 63786e7d3316Smrg else 637997cf2ee2Smrg func_append newdlfiles " $deplib" 63806e7d3316Smrg fi 63816e7d3316Smrg fi 63826e7d3316Smrg continue 63836e7d3316Smrg ;; 63846e7d3316Smrg %DEPLIBS%) 63856e7d3316Smrg alldeplibs=yes 63866e7d3316Smrg continue 63876e7d3316Smrg ;; 63886e7d3316Smrg esac # case $deplib 63896e7d3316Smrg 63906e7d3316Smrg if test "$found" = yes || test -f "$lib"; then : 63916e7d3316Smrg else 63926e7d3316Smrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 63936e7d3316Smrg fi 63946e7d3316Smrg 63956e7d3316Smrg # Check to see that this really is a libtool archive. 63966e7d3316Smrg func_lalib_unsafe_p "$lib" \ 63976e7d3316Smrg || func_fatal_error "\`$lib' is not a valid libtool archive" 63986e7d3316Smrg 63996e7d3316Smrg func_dirname "$lib" "" "." 64006e7d3316Smrg ladir="$func_dirname_result" 64016e7d3316Smrg 64026e7d3316Smrg dlname= 64036e7d3316Smrg dlopen= 64046e7d3316Smrg dlpreopen= 64056e7d3316Smrg libdir= 64066e7d3316Smrg library_names= 64076e7d3316Smrg old_library= 64086e7d3316Smrg inherited_linker_flags= 64096e7d3316Smrg # If the library was installed with an old release of libtool, 64106e7d3316Smrg # it will not redefine variables installed, or shouldnotlink 64116e7d3316Smrg installed=yes 64126e7d3316Smrg shouldnotlink=no 64136e7d3316Smrg avoidtemprpath= 64146e7d3316Smrg 64156e7d3316Smrg 64166e7d3316Smrg # Read the .la file 64176e7d3316Smrg func_source "$lib" 64186e7d3316Smrg 64196e7d3316Smrg # Convert "-framework foo" to "foo.ltframework" 64206e7d3316Smrg if test -n "$inherited_linker_flags"; then 64216e7d3316Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 64226e7d3316Smrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 64236e7d3316Smrg case " $new_inherited_linker_flags " in 64246e7d3316Smrg *" $tmp_inherited_linker_flag "*) ;; 642597cf2ee2Smrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 64266e7d3316Smrg esac 64276e7d3316Smrg done 64286e7d3316Smrg fi 64296e7d3316Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 64306e7d3316Smrg if test "$linkmode,$pass" = "lib,link" || 64316e7d3316Smrg test "$linkmode,$pass" = "prog,scan" || 64326e7d3316Smrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 643397cf2ee2Smrg test -n "$dlopen" && func_append dlfiles " $dlopen" 643497cf2ee2Smrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 64356e7d3316Smrg fi 64366e7d3316Smrg 64376e7d3316Smrg if test "$pass" = conv; then 64386e7d3316Smrg # Only check for convenience libraries 64396e7d3316Smrg deplibs="$lib $deplibs" 64406e7d3316Smrg if test -z "$libdir"; then 64416e7d3316Smrg if test -z "$old_library"; then 64426e7d3316Smrg func_fatal_error "cannot find name of link library for \`$lib'" 64436e7d3316Smrg fi 64446e7d3316Smrg # It is a libtool convenience library, so add in its objects. 644597cf2ee2Smrg func_append convenience " $ladir/$objdir/$old_library" 644697cf2ee2Smrg func_append old_convenience " $ladir/$objdir/$old_library" 64476e7d3316Smrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 64486e7d3316Smrg func_fatal_error "\`$lib' is not a convenience library" 64496e7d3316Smrg fi 64506e7d3316Smrg tmp_libs= 64516e7d3316Smrg for deplib in $dependency_libs; do 64526e7d3316Smrg deplibs="$deplib $deplibs" 645397cf2ee2Smrg if $opt_preserve_dup_deps ; then 64546e7d3316Smrg case "$tmp_libs " in 645597cf2ee2Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 64566e7d3316Smrg esac 64576e7d3316Smrg fi 645897cf2ee2Smrg func_append tmp_libs " $deplib" 64596e7d3316Smrg done 64606e7d3316Smrg continue 64616e7d3316Smrg fi # $pass = conv 64626e7d3316Smrg 64636e7d3316Smrg 64646e7d3316Smrg # Get the name of the library we link against. 64656e7d3316Smrg linklib= 646697cf2ee2Smrg if test -n "$old_library" && 646797cf2ee2Smrg { test "$prefer_static_libs" = yes || 646897cf2ee2Smrg test "$prefer_static_libs,$installed" = "built,no"; }; then 646997cf2ee2Smrg linklib=$old_library 647097cf2ee2Smrg else 647197cf2ee2Smrg for l in $old_library $library_names; do 647297cf2ee2Smrg linklib="$l" 647397cf2ee2Smrg done 647497cf2ee2Smrg fi 64756e7d3316Smrg if test -z "$linklib"; then 64766e7d3316Smrg func_fatal_error "cannot find name of link library for \`$lib'" 64776e7d3316Smrg fi 64786e7d3316Smrg 64796e7d3316Smrg # This library was specified with -dlopen. 64806e7d3316Smrg if test "$pass" = dlopen; then 64816e7d3316Smrg if test -z "$libdir"; then 64826e7d3316Smrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 64836e7d3316Smrg fi 64846e7d3316Smrg if test -z "$dlname" || 64856e7d3316Smrg test "$dlopen_support" != yes || 64866e7d3316Smrg test "$build_libtool_libs" = no; then 64876e7d3316Smrg # If there is no dlname, no dlopen support or we're linking 64886e7d3316Smrg # statically, we need to preload. We also need to preload any 64896e7d3316Smrg # dependent libraries so libltdl's deplib preloader doesn't 64906e7d3316Smrg # bomb out in the load deplibs phase. 649197cf2ee2Smrg func_append dlprefiles " $lib $dependency_libs" 64926e7d3316Smrg else 649397cf2ee2Smrg func_append newdlfiles " $lib" 64946e7d3316Smrg fi 64956e7d3316Smrg continue 64966e7d3316Smrg fi # $pass = dlopen 64976e7d3316Smrg 64986e7d3316Smrg # We need an absolute path. 64996e7d3316Smrg case $ladir in 65006e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 65016e7d3316Smrg *) 65026e7d3316Smrg abs_ladir=`cd "$ladir" && pwd` 65036e7d3316Smrg if test -z "$abs_ladir"; then 65046e7d3316Smrg func_warning "cannot determine absolute directory name of \`$ladir'" 65056e7d3316Smrg func_warning "passing it literally to the linker, although it might fail" 65066e7d3316Smrg abs_ladir="$ladir" 65076e7d3316Smrg fi 65086e7d3316Smrg ;; 65096e7d3316Smrg esac 65106e7d3316Smrg func_basename "$lib" 65116e7d3316Smrg laname="$func_basename_result" 65126e7d3316Smrg 65136e7d3316Smrg # Find the relevant object directory and library name. 65146e7d3316Smrg if test "X$installed" = Xyes; then 651597cf2ee2Smrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 65166e7d3316Smrg func_warning "library \`$lib' was moved." 65176e7d3316Smrg dir="$ladir" 65186e7d3316Smrg absdir="$abs_ladir" 65196e7d3316Smrg libdir="$abs_ladir" 65206e7d3316Smrg else 652197cf2ee2Smrg dir="$lt_sysroot$libdir" 652297cf2ee2Smrg absdir="$lt_sysroot$libdir" 65236e7d3316Smrg fi 65246e7d3316Smrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 65256e7d3316Smrg else 65266e7d3316Smrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 65276e7d3316Smrg dir="$ladir" 65286e7d3316Smrg absdir="$abs_ladir" 65296e7d3316Smrg # Remove this search path later 653097cf2ee2Smrg func_append notinst_path " $abs_ladir" 65316e7d3316Smrg else 65326e7d3316Smrg dir="$ladir/$objdir" 65336e7d3316Smrg absdir="$abs_ladir/$objdir" 65346e7d3316Smrg # Remove this search path later 653597cf2ee2Smrg func_append notinst_path " $abs_ladir" 65366e7d3316Smrg fi 65376e7d3316Smrg fi # $installed = yes 65386e7d3316Smrg func_stripname 'lib' '.la' "$laname" 65396e7d3316Smrg name=$func_stripname_result 65406e7d3316Smrg 65416e7d3316Smrg # This library was specified with -dlpreopen. 65426e7d3316Smrg if test "$pass" = dlpreopen; then 65436e7d3316Smrg if test -z "$libdir" && test "$linkmode" = prog; then 65446e7d3316Smrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 65456e7d3316Smrg fi 654697cf2ee2Smrg case "$host" in 654797cf2ee2Smrg # special handling for platforms with PE-DLLs. 654897cf2ee2Smrg *cygwin* | *mingw* | *cegcc* ) 654997cf2ee2Smrg # Linker will automatically link against shared library if both 655097cf2ee2Smrg # static and shared are present. Therefore, ensure we extract 655197cf2ee2Smrg # symbols from the import library if a shared library is present 655297cf2ee2Smrg # (otherwise, the dlopen module name will be incorrect). We do 655397cf2ee2Smrg # this by putting the import library name into $newdlprefiles. 655497cf2ee2Smrg # We recover the dlopen module name by 'saving' the la file 655597cf2ee2Smrg # name in a special purpose variable, and (later) extracting the 655697cf2ee2Smrg # dlname from the la file. 655797cf2ee2Smrg if test -n "$dlname"; then 655897cf2ee2Smrg func_tr_sh "$dir/$linklib" 655997cf2ee2Smrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 656097cf2ee2Smrg func_append newdlprefiles " $dir/$linklib" 656197cf2ee2Smrg else 656297cf2ee2Smrg func_append newdlprefiles " $dir/$old_library" 656397cf2ee2Smrg # Keep a list of preopened convenience libraries to check 656497cf2ee2Smrg # that they are being used correctly in the link pass. 656597cf2ee2Smrg test -z "$libdir" && \ 656697cf2ee2Smrg func_append dlpreconveniencelibs " $dir/$old_library" 656797cf2ee2Smrg fi 656897cf2ee2Smrg ;; 656997cf2ee2Smrg * ) 657097cf2ee2Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 657197cf2ee2Smrg # are required to link). 657297cf2ee2Smrg if test -n "$old_library"; then 657397cf2ee2Smrg func_append newdlprefiles " $dir/$old_library" 657497cf2ee2Smrg # Keep a list of preopened convenience libraries to check 657597cf2ee2Smrg # that they are being used correctly in the link pass. 657697cf2ee2Smrg test -z "$libdir" && \ 657797cf2ee2Smrg func_append dlpreconveniencelibs " $dir/$old_library" 657897cf2ee2Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 657997cf2ee2Smrg elif test -n "$dlname"; then 658097cf2ee2Smrg func_append newdlprefiles " $dir/$dlname" 658197cf2ee2Smrg else 658297cf2ee2Smrg func_append newdlprefiles " $dir/$linklib" 658397cf2ee2Smrg fi 658497cf2ee2Smrg ;; 658597cf2ee2Smrg esac 65866e7d3316Smrg fi # $pass = dlpreopen 65876e7d3316Smrg 65886e7d3316Smrg if test -z "$libdir"; then 65896e7d3316Smrg # Link the convenience library 65906e7d3316Smrg if test "$linkmode" = lib; then 65916e7d3316Smrg deplibs="$dir/$old_library $deplibs" 65926e7d3316Smrg elif test "$linkmode,$pass" = "prog,link"; then 65936e7d3316Smrg compile_deplibs="$dir/$old_library $compile_deplibs" 65946e7d3316Smrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 65956e7d3316Smrg else 65966e7d3316Smrg deplibs="$lib $deplibs" # used for prog,scan pass 65976e7d3316Smrg fi 65986e7d3316Smrg continue 65996e7d3316Smrg fi 66006e7d3316Smrg 66016e7d3316Smrg 66026e7d3316Smrg if test "$linkmode" = prog && test "$pass" != link; then 660397cf2ee2Smrg func_append newlib_search_path " $ladir" 66046e7d3316Smrg deplibs="$lib $deplibs" 66056e7d3316Smrg 66066e7d3316Smrg linkalldeplibs=no 66076e7d3316Smrg if test "$link_all_deplibs" != no || test -z "$library_names" || 66086e7d3316Smrg test "$build_libtool_libs" = no; then 66096e7d3316Smrg linkalldeplibs=yes 66106e7d3316Smrg fi 66116e7d3316Smrg 66126e7d3316Smrg tmp_libs= 66136e7d3316Smrg for deplib in $dependency_libs; do 66146e7d3316Smrg case $deplib in 66156e7d3316Smrg -L*) func_stripname '-L' '' "$deplib" 661697cf2ee2Smrg func_resolve_sysroot "$func_stripname_result" 661797cf2ee2Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 66186e7d3316Smrg ;; 66196e7d3316Smrg esac 66206e7d3316Smrg # Need to link against all dependency_libs? 66216e7d3316Smrg if test "$linkalldeplibs" = yes; then 66226e7d3316Smrg deplibs="$deplib $deplibs" 66236e7d3316Smrg else 66246e7d3316Smrg # Need to hardcode shared library paths 66256e7d3316Smrg # or/and link against static libraries 66266e7d3316Smrg newdependency_libs="$deplib $newdependency_libs" 66276e7d3316Smrg fi 662897cf2ee2Smrg if $opt_preserve_dup_deps ; then 66296e7d3316Smrg case "$tmp_libs " in 663097cf2ee2Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 66316e7d3316Smrg esac 66326e7d3316Smrg fi 663397cf2ee2Smrg func_append tmp_libs " $deplib" 66346e7d3316Smrg done # for deplib 66356e7d3316Smrg continue 66366e7d3316Smrg fi # $linkmode = prog... 66376e7d3316Smrg 66386e7d3316Smrg if test "$linkmode,$pass" = "prog,link"; then 66396e7d3316Smrg if test -n "$library_names" && 66406e7d3316Smrg { { test "$prefer_static_libs" = no || 66416e7d3316Smrg test "$prefer_static_libs,$installed" = "built,yes"; } || 66426e7d3316Smrg test -z "$old_library"; }; then 66436e7d3316Smrg # We need to hardcode the library path 66446e7d3316Smrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 66456e7d3316Smrg # Make sure the rpath contains only unique directories. 66466e7d3316Smrg case "$temp_rpath:" in 66476e7d3316Smrg *"$absdir:"*) ;; 664897cf2ee2Smrg *) func_append temp_rpath "$absdir:" ;; 66496e7d3316Smrg esac 66506e7d3316Smrg fi 66516e7d3316Smrg 66526e7d3316Smrg # Hardcode the library path. 66536e7d3316Smrg # Skip directories that are in the system default run-time 66546e7d3316Smrg # search path. 66556e7d3316Smrg case " $sys_lib_dlsearch_path " in 66566e7d3316Smrg *" $absdir "*) ;; 66576e7d3316Smrg *) 66586e7d3316Smrg case "$compile_rpath " in 66596e7d3316Smrg *" $absdir "*) ;; 666097cf2ee2Smrg *) func_append compile_rpath " $absdir" ;; 66616e7d3316Smrg esac 66626e7d3316Smrg ;; 66636e7d3316Smrg esac 66646e7d3316Smrg case " $sys_lib_dlsearch_path " in 66656e7d3316Smrg *" $libdir "*) ;; 66666e7d3316Smrg *) 66676e7d3316Smrg case "$finalize_rpath " in 66686e7d3316Smrg *" $libdir "*) ;; 666997cf2ee2Smrg *) func_append finalize_rpath " $libdir" ;; 66706e7d3316Smrg esac 66716e7d3316Smrg ;; 66726e7d3316Smrg esac 66736e7d3316Smrg fi # $linkmode,$pass = prog,link... 66746e7d3316Smrg 66756e7d3316Smrg if test "$alldeplibs" = yes && 66766e7d3316Smrg { test "$deplibs_check_method" = pass_all || 66776e7d3316Smrg { test "$build_libtool_libs" = yes && 66786e7d3316Smrg test -n "$library_names"; }; }; then 66796e7d3316Smrg # We only need to search for static libraries 66806e7d3316Smrg continue 66816e7d3316Smrg fi 66826e7d3316Smrg fi 66836e7d3316Smrg 66846e7d3316Smrg link_static=no # Whether the deplib will be linked statically 66856e7d3316Smrg use_static_libs=$prefer_static_libs 66866e7d3316Smrg if test "$use_static_libs" = built && test "$installed" = yes; then 66876e7d3316Smrg use_static_libs=no 66886e7d3316Smrg fi 66896e7d3316Smrg if test -n "$library_names" && 66906e7d3316Smrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 66916e7d3316Smrg case $host in 66926e7d3316Smrg *cygwin* | *mingw* | *cegcc*) 66936e7d3316Smrg # No point in relinking DLLs because paths are not encoded 669497cf2ee2Smrg func_append notinst_deplibs " $lib" 66956e7d3316Smrg need_relink=no 66966e7d3316Smrg ;; 66976e7d3316Smrg *) 66986e7d3316Smrg if test "$installed" = no; then 669997cf2ee2Smrg func_append notinst_deplibs " $lib" 67006e7d3316Smrg need_relink=yes 67016e7d3316Smrg fi 67026e7d3316Smrg ;; 67036e7d3316Smrg esac 67046e7d3316Smrg # This is a shared library 67056e7d3316Smrg 67066e7d3316Smrg # Warn about portability, can't link against -module's on some 67076e7d3316Smrg # systems (darwin). Don't bleat about dlopened modules though! 67086e7d3316Smrg dlopenmodule="" 67096e7d3316Smrg for dlpremoduletest in $dlprefiles; do 67106e7d3316Smrg if test "X$dlpremoduletest" = "X$lib"; then 67116e7d3316Smrg dlopenmodule="$dlpremoduletest" 67126e7d3316Smrg break 67136e7d3316Smrg fi 67146e7d3316Smrg done 67156e7d3316Smrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 67166e7d3316Smrg echo 67176e7d3316Smrg if test "$linkmode" = prog; then 67186e7d3316Smrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 67196e7d3316Smrg else 67206e7d3316Smrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 67216e7d3316Smrg fi 67226e7d3316Smrg $ECHO "*** $linklib is not portable!" 67236e7d3316Smrg fi 67246e7d3316Smrg if test "$linkmode" = lib && 67256e7d3316Smrg test "$hardcode_into_libs" = yes; then 67266e7d3316Smrg # Hardcode the library path. 67276e7d3316Smrg # Skip directories that are in the system default run-time 67286e7d3316Smrg # search path. 67296e7d3316Smrg case " $sys_lib_dlsearch_path " in 67306e7d3316Smrg *" $absdir "*) ;; 67316e7d3316Smrg *) 67326e7d3316Smrg case "$compile_rpath " in 67336e7d3316Smrg *" $absdir "*) ;; 673497cf2ee2Smrg *) func_append compile_rpath " $absdir" ;; 67356e7d3316Smrg esac 67366e7d3316Smrg ;; 67376e7d3316Smrg esac 67386e7d3316Smrg case " $sys_lib_dlsearch_path " in 67396e7d3316Smrg *" $libdir "*) ;; 67406e7d3316Smrg *) 67416e7d3316Smrg case "$finalize_rpath " in 67426e7d3316Smrg *" $libdir "*) ;; 674397cf2ee2Smrg *) func_append finalize_rpath " $libdir" ;; 67446e7d3316Smrg esac 67456e7d3316Smrg ;; 67466e7d3316Smrg esac 67476e7d3316Smrg fi 67486e7d3316Smrg 67496e7d3316Smrg if test -n "$old_archive_from_expsyms_cmds"; then 67506e7d3316Smrg # figure out the soname 67516e7d3316Smrg set dummy $library_names 67526e7d3316Smrg shift 67536e7d3316Smrg realname="$1" 67546e7d3316Smrg shift 67556e7d3316Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 67566e7d3316Smrg # use dlname if we got it. it's perfectly good, no? 67576e7d3316Smrg if test -n "$dlname"; then 67586e7d3316Smrg soname="$dlname" 67596e7d3316Smrg elif test -n "$soname_spec"; then 67606e7d3316Smrg # bleh windows 67616e7d3316Smrg case $host in 67626e7d3316Smrg *cygwin* | mingw* | *cegcc*) 67636e7d3316Smrg func_arith $current - $age 67646e7d3316Smrg major=$func_arith_result 67656e7d3316Smrg versuffix="-$major" 67666e7d3316Smrg ;; 67676e7d3316Smrg esac 67686e7d3316Smrg eval soname=\"$soname_spec\" 67696e7d3316Smrg else 67706e7d3316Smrg soname="$realname" 67716e7d3316Smrg fi 67726e7d3316Smrg 67736e7d3316Smrg # Make a new name for the extract_expsyms_cmds to use 67746e7d3316Smrg soroot="$soname" 67756e7d3316Smrg func_basename "$soroot" 67766e7d3316Smrg soname="$func_basename_result" 67776e7d3316Smrg func_stripname 'lib' '.dll' "$soname" 67786e7d3316Smrg newlib=libimp-$func_stripname_result.a 67796e7d3316Smrg 67806e7d3316Smrg # If the library has no export list, then create one now 67816e7d3316Smrg if test -f "$output_objdir/$soname-def"; then : 67826e7d3316Smrg else 67836e7d3316Smrg func_verbose "extracting exported symbol list from \`$soname'" 67846e7d3316Smrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 67856e7d3316Smrg fi 67866e7d3316Smrg 67876e7d3316Smrg # Create $newlib 67886e7d3316Smrg if test -f "$output_objdir/$newlib"; then :; else 67896e7d3316Smrg func_verbose "generating import library for \`$soname'" 67906e7d3316Smrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 67916e7d3316Smrg fi 67926e7d3316Smrg # make sure the library variables are pointing to the new library 67936e7d3316Smrg dir=$output_objdir 67946e7d3316Smrg linklib=$newlib 67956e7d3316Smrg fi # test -n "$old_archive_from_expsyms_cmds" 67966e7d3316Smrg 679797cf2ee2Smrg if test "$linkmode" = prog || test "$opt_mode" != relink; then 67986e7d3316Smrg add_shlibpath= 67996e7d3316Smrg add_dir= 68006e7d3316Smrg add= 68016e7d3316Smrg lib_linked=yes 68026e7d3316Smrg case $hardcode_action in 68036e7d3316Smrg immediate | unsupported) 68046e7d3316Smrg if test "$hardcode_direct" = no; then 68056e7d3316Smrg add="$dir/$linklib" 68066e7d3316Smrg case $host in 68076e7d3316Smrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 68086e7d3316Smrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 68096e7d3316Smrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 68106e7d3316Smrg *-*-unixware7*) add_dir="-L$dir" ;; 68116e7d3316Smrg *-*-darwin* ) 68126e7d3316Smrg # if the lib is a (non-dlopened) module then we can not 68136e7d3316Smrg # link against it, someone is ignoring the earlier warnings 68146e7d3316Smrg if /usr/bin/file -L $add 2> /dev/null | 68156e7d3316Smrg $GREP ": [^:]* bundle" >/dev/null ; then 68166e7d3316Smrg if test "X$dlopenmodule" != "X$lib"; then 68176e7d3316Smrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 68186e7d3316Smrg if test -z "$old_library" ; then 68196e7d3316Smrg echo 68206e7d3316Smrg echo "*** And there doesn't seem to be a static archive available" 68216e7d3316Smrg echo "*** The link will probably fail, sorry" 68226e7d3316Smrg else 68236e7d3316Smrg add="$dir/$old_library" 68246e7d3316Smrg fi 68256e7d3316Smrg elif test -n "$old_library"; then 68266e7d3316Smrg add="$dir/$old_library" 68276e7d3316Smrg fi 68286e7d3316Smrg fi 68296e7d3316Smrg esac 68306e7d3316Smrg elif test "$hardcode_minus_L" = no; then 68316e7d3316Smrg case $host in 68326e7d3316Smrg *-*-sunos*) add_shlibpath="$dir" ;; 68336e7d3316Smrg esac 68346e7d3316Smrg add_dir="-L$dir" 68356e7d3316Smrg add="-l$name" 68366e7d3316Smrg elif test "$hardcode_shlibpath_var" = no; then 68376e7d3316Smrg add_shlibpath="$dir" 68386e7d3316Smrg add="-l$name" 68396e7d3316Smrg else 68406e7d3316Smrg lib_linked=no 68416e7d3316Smrg fi 68426e7d3316Smrg ;; 68436e7d3316Smrg relink) 68446e7d3316Smrg if test "$hardcode_direct" = yes && 68456e7d3316Smrg test "$hardcode_direct_absolute" = no; then 68466e7d3316Smrg add="$dir/$linklib" 68476e7d3316Smrg elif test "$hardcode_minus_L" = yes; then 6848ac92798bSmrg add_dir="-L$absdir" 68496e7d3316Smrg # Try looking first in the location we're being installed to. 68506e7d3316Smrg if test -n "$inst_prefix_dir"; then 68516e7d3316Smrg case $libdir in 68526e7d3316Smrg [\\/]*) 685397cf2ee2Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 68546e7d3316Smrg ;; 68556e7d3316Smrg esac 68566e7d3316Smrg fi 68576e7d3316Smrg add="-l$name" 68586e7d3316Smrg elif test "$hardcode_shlibpath_var" = yes; then 68596e7d3316Smrg add_shlibpath="$dir" 68606e7d3316Smrg add="-l$name" 68616e7d3316Smrg else 68626e7d3316Smrg lib_linked=no 68636e7d3316Smrg fi 68646e7d3316Smrg ;; 68656e7d3316Smrg *) lib_linked=no ;; 68666e7d3316Smrg esac 68676e7d3316Smrg 68686e7d3316Smrg if test "$lib_linked" != yes; then 68696e7d3316Smrg func_fatal_configuration "unsupported hardcode properties" 68706e7d3316Smrg fi 68716e7d3316Smrg 68726e7d3316Smrg if test -n "$add_shlibpath"; then 68736e7d3316Smrg case :$compile_shlibpath: in 68746e7d3316Smrg *":$add_shlibpath:"*) ;; 687597cf2ee2Smrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 68766e7d3316Smrg esac 68776e7d3316Smrg fi 68786e7d3316Smrg if test "$linkmode" = prog; then 68796e7d3316Smrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 68806e7d3316Smrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 68816e7d3316Smrg else 68826e7d3316Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 68836e7d3316Smrg test -n "$add" && deplibs="$add $deplibs" 68846e7d3316Smrg if test "$hardcode_direct" != yes && 68856e7d3316Smrg test "$hardcode_minus_L" != yes && 68866e7d3316Smrg test "$hardcode_shlibpath_var" = yes; then 68876e7d3316Smrg case :$finalize_shlibpath: in 68886e7d3316Smrg *":$libdir:"*) ;; 688997cf2ee2Smrg *) func_append finalize_shlibpath "$libdir:" ;; 68906e7d3316Smrg esac 68916e7d3316Smrg fi 68926e7d3316Smrg fi 68936e7d3316Smrg fi 68946e7d3316Smrg 689597cf2ee2Smrg if test "$linkmode" = prog || test "$opt_mode" = relink; then 68966e7d3316Smrg add_shlibpath= 68976e7d3316Smrg add_dir= 68986e7d3316Smrg add= 68996e7d3316Smrg # Finalize command for both is simple: just hardcode it. 69006e7d3316Smrg if test "$hardcode_direct" = yes && 69016e7d3316Smrg test "$hardcode_direct_absolute" = no; then 69026e7d3316Smrg add="$libdir/$linklib" 69036e7d3316Smrg elif test "$hardcode_minus_L" = yes; then 69046e7d3316Smrg add_dir="-L$libdir" 69056e7d3316Smrg add="-l$name" 69066e7d3316Smrg elif test "$hardcode_shlibpath_var" = yes; then 69076e7d3316Smrg case :$finalize_shlibpath: in 69086e7d3316Smrg *":$libdir:"*) ;; 690997cf2ee2Smrg *) func_append finalize_shlibpath "$libdir:" ;; 69106e7d3316Smrg esac 69116e7d3316Smrg add="-l$name" 69126e7d3316Smrg elif test "$hardcode_automatic" = yes; then 69136e7d3316Smrg if test -n "$inst_prefix_dir" && 69146e7d3316Smrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 69156e7d3316Smrg add="$inst_prefix_dir$libdir/$linklib" 69166e7d3316Smrg else 69176e7d3316Smrg add="$libdir/$linklib" 69186e7d3316Smrg fi 69196e7d3316Smrg else 69206e7d3316Smrg # We cannot seem to hardcode it, guess we'll fake it. 69216e7d3316Smrg add_dir="-L$libdir" 69226e7d3316Smrg # Try looking first in the location we're being installed to. 69236e7d3316Smrg if test -n "$inst_prefix_dir"; then 69246e7d3316Smrg case $libdir in 69256e7d3316Smrg [\\/]*) 692697cf2ee2Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 69276e7d3316Smrg ;; 69286e7d3316Smrg esac 69296e7d3316Smrg fi 69306e7d3316Smrg add="-l$name" 69316e7d3316Smrg fi 69326e7d3316Smrg 69336e7d3316Smrg if test "$linkmode" = prog; then 69346e7d3316Smrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 69356e7d3316Smrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 69366e7d3316Smrg else 69376e7d3316Smrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 69386e7d3316Smrg test -n "$add" && deplibs="$add $deplibs" 69396e7d3316Smrg fi 69406e7d3316Smrg fi 69416e7d3316Smrg elif test "$linkmode" = prog; then 69426e7d3316Smrg # Here we assume that one of hardcode_direct or hardcode_minus_L 69436e7d3316Smrg # is not unsupported. This is valid on all known static and 69446e7d3316Smrg # shared platforms. 69456e7d3316Smrg if test "$hardcode_direct" != unsupported; then 69466e7d3316Smrg test -n "$old_library" && linklib="$old_library" 69476e7d3316Smrg compile_deplibs="$dir/$linklib $compile_deplibs" 69486e7d3316Smrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 69496e7d3316Smrg else 69506e7d3316Smrg compile_deplibs="-l$name -L$dir $compile_deplibs" 69516e7d3316Smrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 69526e7d3316Smrg fi 69536e7d3316Smrg elif test "$build_libtool_libs" = yes; then 69546e7d3316Smrg # Not a shared library 69556e7d3316Smrg if test "$deplibs_check_method" != pass_all; then 69566e7d3316Smrg # We're trying link a shared library against a static one 69576e7d3316Smrg # but the system doesn't support it. 69586e7d3316Smrg 69596e7d3316Smrg # Just print a warning and add the library to dependency_libs so 69606e7d3316Smrg # that the program can be linked against the static library. 69616e7d3316Smrg echo 69626e7d3316Smrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 69636e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 69646e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 69656e7d3316Smrg echo "*** shared version of the library, which you do not appear to have." 69666e7d3316Smrg if test "$module" = yes; then 69676e7d3316Smrg echo "*** But as you try to build a module library, libtool will still create " 69686e7d3316Smrg echo "*** a static module, that should work as long as the dlopening application" 69696e7d3316Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 69706e7d3316Smrg if test -z "$global_symbol_pipe"; then 69716e7d3316Smrg echo 69726e7d3316Smrg echo "*** However, this would only work if libtool was able to extract symbol" 69736e7d3316Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 69746e7d3316Smrg echo "*** not find such a program. So, this module is probably useless." 69756e7d3316Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 69766e7d3316Smrg fi 69776e7d3316Smrg if test "$build_old_libs" = no; then 69786e7d3316Smrg build_libtool_libs=module 69796e7d3316Smrg build_old_libs=yes 69806e7d3316Smrg else 69816e7d3316Smrg build_libtool_libs=no 69826e7d3316Smrg fi 69836e7d3316Smrg fi 69846e7d3316Smrg else 69856e7d3316Smrg deplibs="$dir/$old_library $deplibs" 69866e7d3316Smrg link_static=yes 69876e7d3316Smrg fi 69886e7d3316Smrg fi # link shared/static library? 69896e7d3316Smrg 69906e7d3316Smrg if test "$linkmode" = lib; then 69916e7d3316Smrg if test -n "$dependency_libs" && 69926e7d3316Smrg { test "$hardcode_into_libs" != yes || 69936e7d3316Smrg test "$build_old_libs" = yes || 69946e7d3316Smrg test "$link_static" = yes; }; then 69956e7d3316Smrg # Extract -R from dependency_libs 69966e7d3316Smrg temp_deplibs= 69976e7d3316Smrg for libdir in $dependency_libs; do 69986e7d3316Smrg case $libdir in 69996e7d3316Smrg -R*) func_stripname '-R' '' "$libdir" 70006e7d3316Smrg temp_xrpath=$func_stripname_result 70016e7d3316Smrg case " $xrpath " in 70026e7d3316Smrg *" $temp_xrpath "*) ;; 700397cf2ee2Smrg *) func_append xrpath " $temp_xrpath";; 70046e7d3316Smrg esac;; 700597cf2ee2Smrg *) func_append temp_deplibs " $libdir";; 70066e7d3316Smrg esac 70076e7d3316Smrg done 70086e7d3316Smrg dependency_libs="$temp_deplibs" 70096e7d3316Smrg fi 70106e7d3316Smrg 701197cf2ee2Smrg func_append newlib_search_path " $absdir" 70126e7d3316Smrg # Link against this library 70136e7d3316Smrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 70146e7d3316Smrg # ... and its dependency_libs 70156e7d3316Smrg tmp_libs= 70166e7d3316Smrg for deplib in $dependency_libs; do 70176e7d3316Smrg newdependency_libs="$deplib $newdependency_libs" 701897cf2ee2Smrg case $deplib in 701997cf2ee2Smrg -L*) func_stripname '-L' '' "$deplib" 702097cf2ee2Smrg func_resolve_sysroot "$func_stripname_result";; 702197cf2ee2Smrg *) func_resolve_sysroot "$deplib" ;; 702297cf2ee2Smrg esac 702397cf2ee2Smrg if $opt_preserve_dup_deps ; then 70246e7d3316Smrg case "$tmp_libs " in 702597cf2ee2Smrg *" $func_resolve_sysroot_result "*) 702697cf2ee2Smrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 70276e7d3316Smrg esac 70286e7d3316Smrg fi 702997cf2ee2Smrg func_append tmp_libs " $func_resolve_sysroot_result" 70306e7d3316Smrg done 70316e7d3316Smrg 70326e7d3316Smrg if test "$link_all_deplibs" != no; then 70336e7d3316Smrg # Add the search paths of all dependency libraries 70346e7d3316Smrg for deplib in $dependency_libs; do 70356e7d3316Smrg path= 70366e7d3316Smrg case $deplib in 70376e7d3316Smrg -L*) path="$deplib" ;; 70386e7d3316Smrg *.la) 703997cf2ee2Smrg func_resolve_sysroot "$deplib" 704097cf2ee2Smrg deplib=$func_resolve_sysroot_result 70416e7d3316Smrg func_dirname "$deplib" "" "." 704297cf2ee2Smrg dir=$func_dirname_result 70436e7d3316Smrg # We need an absolute path. 70446e7d3316Smrg case $dir in 70456e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 70466e7d3316Smrg *) 70476e7d3316Smrg absdir=`cd "$dir" && pwd` 70486e7d3316Smrg if test -z "$absdir"; then 70496e7d3316Smrg func_warning "cannot determine absolute directory name of \`$dir'" 70506e7d3316Smrg absdir="$dir" 70516e7d3316Smrg fi 70526e7d3316Smrg ;; 70536e7d3316Smrg esac 70546e7d3316Smrg if $GREP "^installed=no" $deplib > /dev/null; then 70556e7d3316Smrg case $host in 70566e7d3316Smrg *-*-darwin*) 70576e7d3316Smrg depdepl= 70586e7d3316Smrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 70596e7d3316Smrg if test -n "$deplibrary_names" ; then 70606e7d3316Smrg for tmp in $deplibrary_names ; do 70616e7d3316Smrg depdepl=$tmp 70626e7d3316Smrg done 70636e7d3316Smrg if test -f "$absdir/$objdir/$depdepl" ; then 70646e7d3316Smrg depdepl="$absdir/$objdir/$depdepl" 70656e7d3316Smrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 70666e7d3316Smrg if test -z "$darwin_install_name"; then 70676e7d3316Smrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 70686e7d3316Smrg fi 706997cf2ee2Smrg func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 707097cf2ee2Smrg func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 70716e7d3316Smrg path= 70726e7d3316Smrg fi 70736e7d3316Smrg fi 70746e7d3316Smrg ;; 70756e7d3316Smrg *) 70766e7d3316Smrg path="-L$absdir/$objdir" 70776e7d3316Smrg ;; 70786e7d3316Smrg esac 70796e7d3316Smrg else 70806e7d3316Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 70816e7d3316Smrg test -z "$libdir" && \ 70826e7d3316Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 70836e7d3316Smrg test "$absdir" != "$libdir" && \ 70846e7d3316Smrg func_warning "\`$deplib' seems to be moved" 70856e7d3316Smrg 70866e7d3316Smrg path="-L$absdir" 70876e7d3316Smrg fi 70886e7d3316Smrg ;; 70896e7d3316Smrg esac 70906e7d3316Smrg case " $deplibs " in 70916e7d3316Smrg *" $path "*) ;; 70926e7d3316Smrg *) deplibs="$path $deplibs" ;; 70936e7d3316Smrg esac 70946e7d3316Smrg done 70956e7d3316Smrg fi # link_all_deplibs != no 70966e7d3316Smrg fi # linkmode = lib 70976e7d3316Smrg done # for deplib in $libs 70986e7d3316Smrg if test "$pass" = link; then 70996e7d3316Smrg if test "$linkmode" = "prog"; then 71006e7d3316Smrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 71016e7d3316Smrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 71026e7d3316Smrg else 71036e7d3316Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 71046e7d3316Smrg fi 71056e7d3316Smrg fi 71066e7d3316Smrg dependency_libs="$newdependency_libs" 71076e7d3316Smrg if test "$pass" = dlpreopen; then 71086e7d3316Smrg # Link the dlpreopened libraries before other libraries 71096e7d3316Smrg for deplib in $save_deplibs; do 71106e7d3316Smrg deplibs="$deplib $deplibs" 71116e7d3316Smrg done 71126e7d3316Smrg fi 71136e7d3316Smrg if test "$pass" != dlopen; then 71146e7d3316Smrg if test "$pass" != conv; then 71156e7d3316Smrg # Make sure lib_search_path contains only unique directories. 71166e7d3316Smrg lib_search_path= 71176e7d3316Smrg for dir in $newlib_search_path; do 71186e7d3316Smrg case "$lib_search_path " in 71196e7d3316Smrg *" $dir "*) ;; 712097cf2ee2Smrg *) func_append lib_search_path " $dir" ;; 71216e7d3316Smrg esac 71226e7d3316Smrg done 71236e7d3316Smrg newlib_search_path= 71246e7d3316Smrg fi 71256e7d3316Smrg 71266e7d3316Smrg if test "$linkmode,$pass" != "prog,link"; then 71276e7d3316Smrg vars="deplibs" 71286e7d3316Smrg else 71296e7d3316Smrg vars="compile_deplibs finalize_deplibs" 71306e7d3316Smrg fi 71316e7d3316Smrg for var in $vars dependency_libs; do 71326e7d3316Smrg # Add libraries to $var in reverse order 71336e7d3316Smrg eval tmp_libs=\"\$$var\" 71346e7d3316Smrg new_libs= 71356e7d3316Smrg for deplib in $tmp_libs; do 71366e7d3316Smrg # FIXME: Pedantically, this is the right thing to do, so 71376e7d3316Smrg # that some nasty dependency loop isn't accidentally 71386e7d3316Smrg # broken: 71396e7d3316Smrg #new_libs="$deplib $new_libs" 71406e7d3316Smrg # Pragmatically, this seems to cause very few problems in 71416e7d3316Smrg # practice: 71426e7d3316Smrg case $deplib in 71436e7d3316Smrg -L*) new_libs="$deplib $new_libs" ;; 71446e7d3316Smrg -R*) ;; 71456e7d3316Smrg *) 71466e7d3316Smrg # And here is the reason: when a library appears more 71476e7d3316Smrg # than once as an explicit dependence of a library, or 71486e7d3316Smrg # is implicitly linked in more than once by the 71496e7d3316Smrg # compiler, it is considered special, and multiple 71506e7d3316Smrg # occurrences thereof are not removed. Compare this 71516e7d3316Smrg # with having the same library being listed as a 71526e7d3316Smrg # dependency of multiple other libraries: in this case, 71536e7d3316Smrg # we know (pedantically, we assume) the library does not 71546e7d3316Smrg # need to be listed more than once, so we keep only the 71556e7d3316Smrg # last copy. This is not always right, but it is rare 71566e7d3316Smrg # enough that we require users that really mean to play 71576e7d3316Smrg # such unportable linking tricks to link the library 71586e7d3316Smrg # using -Wl,-lname, so that libtool does not consider it 71596e7d3316Smrg # for duplicate removal. 71606e7d3316Smrg case " $specialdeplibs " in 71616e7d3316Smrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 71626e7d3316Smrg *) 71636e7d3316Smrg case " $new_libs " in 71646e7d3316Smrg *" $deplib "*) ;; 71656e7d3316Smrg *) new_libs="$deplib $new_libs" ;; 71666e7d3316Smrg esac 71676e7d3316Smrg ;; 71686e7d3316Smrg esac 71696e7d3316Smrg ;; 71706e7d3316Smrg esac 71716e7d3316Smrg done 71726e7d3316Smrg tmp_libs= 71736e7d3316Smrg for deplib in $new_libs; do 71746e7d3316Smrg case $deplib in 71756e7d3316Smrg -L*) 71766e7d3316Smrg case " $tmp_libs " in 71776e7d3316Smrg *" $deplib "*) ;; 717897cf2ee2Smrg *) func_append tmp_libs " $deplib" ;; 71796e7d3316Smrg esac 71806e7d3316Smrg ;; 718197cf2ee2Smrg *) func_append tmp_libs " $deplib" ;; 71826e7d3316Smrg esac 71836e7d3316Smrg done 71846e7d3316Smrg eval $var=\"$tmp_libs\" 71856e7d3316Smrg done # for var 71866e7d3316Smrg fi 71876e7d3316Smrg # Last step: remove runtime libs from dependency_libs 71886e7d3316Smrg # (they stay in deplibs) 71896e7d3316Smrg tmp_libs= 71906e7d3316Smrg for i in $dependency_libs ; do 71916e7d3316Smrg case " $predeps $postdeps $compiler_lib_search_path " in 71926e7d3316Smrg *" $i "*) 71936e7d3316Smrg i="" 71946e7d3316Smrg ;; 71956e7d3316Smrg esac 71966e7d3316Smrg if test -n "$i" ; then 719797cf2ee2Smrg func_append tmp_libs " $i" 71986e7d3316Smrg fi 71996e7d3316Smrg done 72006e7d3316Smrg dependency_libs=$tmp_libs 72016e7d3316Smrg done # for pass 72026e7d3316Smrg if test "$linkmode" = prog; then 72036e7d3316Smrg dlfiles="$newdlfiles" 72046e7d3316Smrg fi 72056e7d3316Smrg if test "$linkmode" = prog || test "$linkmode" = lib; then 72066e7d3316Smrg dlprefiles="$newdlprefiles" 72076e7d3316Smrg fi 72086e7d3316Smrg 72096e7d3316Smrg case $linkmode in 72106e7d3316Smrg oldlib) 72116e7d3316Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 72126e7d3316Smrg func_warning "\`-dlopen' is ignored for archives" 72136e7d3316Smrg fi 72146e7d3316Smrg 72156e7d3316Smrg case " $deplibs" in 72166e7d3316Smrg *\ -l* | *\ -L*) 72176e7d3316Smrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 72186e7d3316Smrg esac 72196e7d3316Smrg 72206e7d3316Smrg test -n "$rpath" && \ 72216e7d3316Smrg func_warning "\`-rpath' is ignored for archives" 72226e7d3316Smrg 72236e7d3316Smrg test -n "$xrpath" && \ 72246e7d3316Smrg func_warning "\`-R' is ignored for archives" 72256e7d3316Smrg 72266e7d3316Smrg test -n "$vinfo" && \ 72276e7d3316Smrg func_warning "\`-version-info/-version-number' is ignored for archives" 72286e7d3316Smrg 72296e7d3316Smrg test -n "$release" && \ 72306e7d3316Smrg func_warning "\`-release' is ignored for archives" 72316e7d3316Smrg 72326e7d3316Smrg test -n "$export_symbols$export_symbols_regex" && \ 72336e7d3316Smrg func_warning "\`-export-symbols' is ignored for archives" 72346e7d3316Smrg 72356e7d3316Smrg # Now set the variables for building old libraries. 72366e7d3316Smrg build_libtool_libs=no 72376e7d3316Smrg oldlibs="$output" 723897cf2ee2Smrg func_append objs "$old_deplibs" 72396e7d3316Smrg ;; 72406e7d3316Smrg 72416e7d3316Smrg lib) 72426e7d3316Smrg # Make sure we only generate libraries of the form `libNAME.la'. 72436e7d3316Smrg case $outputname in 72446e7d3316Smrg lib*) 72456e7d3316Smrg func_stripname 'lib' '.la' "$outputname" 72466e7d3316Smrg name=$func_stripname_result 72476e7d3316Smrg eval shared_ext=\"$shrext_cmds\" 72486e7d3316Smrg eval libname=\"$libname_spec\" 72496e7d3316Smrg ;; 72506e7d3316Smrg *) 72516e7d3316Smrg test "$module" = no && \ 72526e7d3316Smrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 72536e7d3316Smrg 72546e7d3316Smrg if test "$need_lib_prefix" != no; then 72556e7d3316Smrg # Add the "lib" prefix for modules if required 72566e7d3316Smrg func_stripname '' '.la' "$outputname" 72576e7d3316Smrg name=$func_stripname_result 72586e7d3316Smrg eval shared_ext=\"$shrext_cmds\" 72596e7d3316Smrg eval libname=\"$libname_spec\" 72606e7d3316Smrg else 72616e7d3316Smrg func_stripname '' '.la' "$outputname" 72626e7d3316Smrg libname=$func_stripname_result 72636e7d3316Smrg fi 72646e7d3316Smrg ;; 72656e7d3316Smrg esac 72666e7d3316Smrg 72676e7d3316Smrg if test -n "$objs"; then 72686e7d3316Smrg if test "$deplibs_check_method" != pass_all; then 72696e7d3316Smrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 72706e7d3316Smrg else 72716e7d3316Smrg echo 72726e7d3316Smrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 72736e7d3316Smrg $ECHO "*** objects $objs is not portable!" 727497cf2ee2Smrg func_append libobjs " $objs" 72756e7d3316Smrg fi 72766e7d3316Smrg fi 72776e7d3316Smrg 72786e7d3316Smrg test "$dlself" != no && \ 72796e7d3316Smrg func_warning "\`-dlopen self' is ignored for libtool libraries" 72806e7d3316Smrg 72816e7d3316Smrg set dummy $rpath 72826e7d3316Smrg shift 72836e7d3316Smrg test "$#" -gt 1 && \ 72846e7d3316Smrg func_warning "ignoring multiple \`-rpath's for a libtool library" 72856e7d3316Smrg 72866e7d3316Smrg install_libdir="$1" 72876e7d3316Smrg 72886e7d3316Smrg oldlibs= 72896e7d3316Smrg if test -z "$rpath"; then 72906e7d3316Smrg if test "$build_libtool_libs" = yes; then 72916e7d3316Smrg # Building a libtool convenience library. 72926e7d3316Smrg # Some compilers have problems with a `.al' extension so 72936e7d3316Smrg # convenience libraries should have the same extension an 72946e7d3316Smrg # archive normally would. 72956e7d3316Smrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 72966e7d3316Smrg build_libtool_libs=convenience 72976e7d3316Smrg build_old_libs=yes 72986e7d3316Smrg fi 72996e7d3316Smrg 73006e7d3316Smrg test -n "$vinfo" && \ 73016e7d3316Smrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 73026e7d3316Smrg 73036e7d3316Smrg test -n "$release" && \ 73046e7d3316Smrg func_warning "\`-release' is ignored for convenience libraries" 73056e7d3316Smrg else 73066e7d3316Smrg 73076e7d3316Smrg # Parse the version information argument. 73086e7d3316Smrg save_ifs="$IFS"; IFS=':' 73096e7d3316Smrg set dummy $vinfo 0 0 0 73106e7d3316Smrg shift 73116e7d3316Smrg IFS="$save_ifs" 73126e7d3316Smrg 73136e7d3316Smrg test -n "$7" && \ 73146e7d3316Smrg func_fatal_help "too many parameters to \`-version-info'" 73156e7d3316Smrg 73166e7d3316Smrg # convert absolute version numbers to libtool ages 73176e7d3316Smrg # this retains compatibility with .la files and attempts 73186e7d3316Smrg # to make the code below a bit more comprehensible 73196e7d3316Smrg 73206e7d3316Smrg case $vinfo_number in 73216e7d3316Smrg yes) 73226e7d3316Smrg number_major="$1" 73236e7d3316Smrg number_minor="$2" 73246e7d3316Smrg number_revision="$3" 73256e7d3316Smrg # 73266e7d3316Smrg # There are really only two kinds -- those that 73276e7d3316Smrg # use the current revision as the major version 73286e7d3316Smrg # and those that subtract age and use age as 73296e7d3316Smrg # a minor version. But, then there is irix 73306e7d3316Smrg # which has an extra 1 added just for fun 73316e7d3316Smrg # 73326e7d3316Smrg case $version_type in 7333ac92798bSmrg # correct linux to gnu/linux during the next big refactor 73346e7d3316Smrg darwin|linux|osf|windows|none) 73356e7d3316Smrg func_arith $number_major + $number_minor 73366e7d3316Smrg current=$func_arith_result 73376e7d3316Smrg age="$number_minor" 73386e7d3316Smrg revision="$number_revision" 73396e7d3316Smrg ;; 73406e7d3316Smrg freebsd-aout|freebsd-elf|qnx|sunos) 73416e7d3316Smrg current="$number_major" 73426e7d3316Smrg revision="$number_minor" 73436e7d3316Smrg age="0" 73446e7d3316Smrg ;; 73456e7d3316Smrg irix|nonstopux) 73466e7d3316Smrg func_arith $number_major + $number_minor 73476e7d3316Smrg current=$func_arith_result 73486e7d3316Smrg age="$number_minor" 73496e7d3316Smrg revision="$number_minor" 73506e7d3316Smrg lt_irix_increment=no 73516e7d3316Smrg ;; 73526e7d3316Smrg esac 73536e7d3316Smrg ;; 73546e7d3316Smrg no) 73556e7d3316Smrg current="$1" 73566e7d3316Smrg revision="$2" 73576e7d3316Smrg age="$3" 73586e7d3316Smrg ;; 73596e7d3316Smrg esac 73606e7d3316Smrg 73616e7d3316Smrg # Check that each of the things are valid numbers. 73626e7d3316Smrg case $current in 73636e7d3316Smrg 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]) ;; 73646e7d3316Smrg *) 73656e7d3316Smrg func_error "CURRENT \`$current' must be a nonnegative integer" 73666e7d3316Smrg func_fatal_error "\`$vinfo' is not valid version information" 73676e7d3316Smrg ;; 73686e7d3316Smrg esac 73696e7d3316Smrg 73706e7d3316Smrg case $revision in 73716e7d3316Smrg 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]) ;; 73726e7d3316Smrg *) 73736e7d3316Smrg func_error "REVISION \`$revision' must be a nonnegative integer" 73746e7d3316Smrg func_fatal_error "\`$vinfo' is not valid version information" 73756e7d3316Smrg ;; 73766e7d3316Smrg esac 73776e7d3316Smrg 73786e7d3316Smrg case $age in 73796e7d3316Smrg 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]) ;; 73806e7d3316Smrg *) 73816e7d3316Smrg func_error "AGE \`$age' must be a nonnegative integer" 73826e7d3316Smrg func_fatal_error "\`$vinfo' is not valid version information" 73836e7d3316Smrg ;; 73846e7d3316Smrg esac 73856e7d3316Smrg 73866e7d3316Smrg if test "$age" -gt "$current"; then 73876e7d3316Smrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 73886e7d3316Smrg func_fatal_error "\`$vinfo' is not valid version information" 73896e7d3316Smrg fi 73906e7d3316Smrg 73916e7d3316Smrg # Calculate the version variables. 73926e7d3316Smrg major= 73936e7d3316Smrg versuffix= 73946e7d3316Smrg verstring= 73956e7d3316Smrg case $version_type in 73966e7d3316Smrg none) ;; 73976e7d3316Smrg 73986e7d3316Smrg darwin) 73996e7d3316Smrg # Like Linux, but with the current version available in 74006e7d3316Smrg # verstring for coding it into the library header 74016e7d3316Smrg func_arith $current - $age 74026e7d3316Smrg major=.$func_arith_result 74036e7d3316Smrg versuffix="$major.$age.$revision" 74046e7d3316Smrg # Darwin ld doesn't like 0 for these options... 74056e7d3316Smrg func_arith $current + 1 74066e7d3316Smrg minor_current=$func_arith_result 74076e7d3316Smrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 74086e7d3316Smrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 74096e7d3316Smrg ;; 74106e7d3316Smrg 74116e7d3316Smrg freebsd-aout) 74126e7d3316Smrg major=".$current" 74136e7d3316Smrg versuffix=".$current.$revision"; 74146e7d3316Smrg ;; 74156e7d3316Smrg 74166e7d3316Smrg freebsd-elf) 74176e7d3316Smrg major=".$current" 74186e7d3316Smrg versuffix=".$current" 74196e7d3316Smrg ;; 74206e7d3316Smrg 74216e7d3316Smrg irix | nonstopux) 74226e7d3316Smrg if test "X$lt_irix_increment" = "Xno"; then 74236e7d3316Smrg func_arith $current - $age 74246e7d3316Smrg else 74256e7d3316Smrg func_arith $current - $age + 1 74266e7d3316Smrg fi 74276e7d3316Smrg major=$func_arith_result 74286e7d3316Smrg 74296e7d3316Smrg case $version_type in 74306e7d3316Smrg nonstopux) verstring_prefix=nonstopux ;; 74316e7d3316Smrg *) verstring_prefix=sgi ;; 74326e7d3316Smrg esac 74336e7d3316Smrg verstring="$verstring_prefix$major.$revision" 74346e7d3316Smrg 74356e7d3316Smrg # Add in all the interfaces that we are compatible with. 74366e7d3316Smrg loop=$revision 74376e7d3316Smrg while test "$loop" -ne 0; do 74386e7d3316Smrg func_arith $revision - $loop 74396e7d3316Smrg iface=$func_arith_result 74406e7d3316Smrg func_arith $loop - 1 74416e7d3316Smrg loop=$func_arith_result 74426e7d3316Smrg verstring="$verstring_prefix$major.$iface:$verstring" 74436e7d3316Smrg done 74446e7d3316Smrg 74456e7d3316Smrg # Before this point, $major must not contain `.'. 74466e7d3316Smrg major=.$major 74476e7d3316Smrg versuffix="$major.$revision" 74486e7d3316Smrg ;; 74496e7d3316Smrg 7450ac92798bSmrg linux) # correct to gnu/linux during the next big refactor 74516e7d3316Smrg func_arith $current - $age 74526e7d3316Smrg major=.$func_arith_result 74536e7d3316Smrg versuffix="$major.$age.$revision" 74546e7d3316Smrg ;; 74556e7d3316Smrg 74566e7d3316Smrg osf) 74576e7d3316Smrg func_arith $current - $age 74586e7d3316Smrg major=.$func_arith_result 74596e7d3316Smrg versuffix=".$current.$age.$revision" 74606e7d3316Smrg verstring="$current.$age.$revision" 74616e7d3316Smrg 74626e7d3316Smrg # Add in all the interfaces that we are compatible with. 74636e7d3316Smrg loop=$age 74646e7d3316Smrg while test "$loop" -ne 0; do 74656e7d3316Smrg func_arith $current - $loop 74666e7d3316Smrg iface=$func_arith_result 74676e7d3316Smrg func_arith $loop - 1 74686e7d3316Smrg loop=$func_arith_result 74696e7d3316Smrg verstring="$verstring:${iface}.0" 74706e7d3316Smrg done 74716e7d3316Smrg 74726e7d3316Smrg # Make executables depend on our current version. 747397cf2ee2Smrg func_append verstring ":${current}.0" 74746e7d3316Smrg ;; 74756e7d3316Smrg 74766e7d3316Smrg qnx) 74776e7d3316Smrg major=".$current" 74786e7d3316Smrg versuffix=".$current" 74796e7d3316Smrg ;; 74806e7d3316Smrg 74816e7d3316Smrg sunos) 74826e7d3316Smrg major=".$current" 74836e7d3316Smrg versuffix=".$current.$revision" 74846e7d3316Smrg ;; 74856e7d3316Smrg 74866e7d3316Smrg windows) 74876e7d3316Smrg # Use '-' rather than '.', since we only want one 74886e7d3316Smrg # extension on DOS 8.3 filesystems. 74896e7d3316Smrg func_arith $current - $age 74906e7d3316Smrg major=$func_arith_result 74916e7d3316Smrg versuffix="-$major" 74926e7d3316Smrg ;; 74936e7d3316Smrg 74946e7d3316Smrg *) 74956e7d3316Smrg func_fatal_configuration "unknown library version type \`$version_type'" 74966e7d3316Smrg ;; 74976e7d3316Smrg esac 74986e7d3316Smrg 74996e7d3316Smrg # Clear the version info if we defaulted, and they specified a release. 75006e7d3316Smrg if test -z "$vinfo" && test -n "$release"; then 75016e7d3316Smrg major= 75026e7d3316Smrg case $version_type in 75036e7d3316Smrg darwin) 75046e7d3316Smrg # we can't check for "0.0" in archive_cmds due to quoting 75056e7d3316Smrg # problems, so we reset it completely 75066e7d3316Smrg verstring= 75076e7d3316Smrg ;; 75086e7d3316Smrg *) 75096e7d3316Smrg verstring="0.0" 75106e7d3316Smrg ;; 75116e7d3316Smrg esac 75126e7d3316Smrg if test "$need_version" = no; then 75136e7d3316Smrg versuffix= 75146e7d3316Smrg else 75156e7d3316Smrg versuffix=".0.0" 75166e7d3316Smrg fi 75176e7d3316Smrg fi 75186e7d3316Smrg 75196e7d3316Smrg # Remove version info from name if versioning should be avoided 75206e7d3316Smrg if test "$avoid_version" = yes && test "$need_version" = no; then 75216e7d3316Smrg major= 75226e7d3316Smrg versuffix= 75236e7d3316Smrg verstring="" 75246e7d3316Smrg fi 75256e7d3316Smrg 75266e7d3316Smrg # Check to see if the archive will have undefined symbols. 75276e7d3316Smrg if test "$allow_undefined" = yes; then 75286e7d3316Smrg if test "$allow_undefined_flag" = unsupported; then 75296e7d3316Smrg func_warning "undefined symbols not allowed in $host shared libraries" 75306e7d3316Smrg build_libtool_libs=no 75316e7d3316Smrg build_old_libs=yes 75326e7d3316Smrg fi 75336e7d3316Smrg else 75346e7d3316Smrg # Don't allow undefined symbols. 75356e7d3316Smrg allow_undefined_flag="$no_undefined_flag" 75366e7d3316Smrg fi 75376e7d3316Smrg 75386e7d3316Smrg fi 75396e7d3316Smrg 75406e7d3316Smrg func_generate_dlsyms "$libname" "$libname" "yes" 754197cf2ee2Smrg func_append libobjs " $symfileobj" 75426e7d3316Smrg test "X$libobjs" = "X " && libobjs= 75436e7d3316Smrg 754497cf2ee2Smrg if test "$opt_mode" != relink; then 75456e7d3316Smrg # Remove our outputs, but don't remove object files since they 75466e7d3316Smrg # may have been created when compiling PIC objects. 75476e7d3316Smrg removelist= 75486e7d3316Smrg tempremovelist=`$ECHO "$output_objdir/*"` 75496e7d3316Smrg for p in $tempremovelist; do 75506e7d3316Smrg case $p in 75516e7d3316Smrg *.$objext | *.gcno) 75526e7d3316Smrg ;; 75536e7d3316Smrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 75546e7d3316Smrg if test "X$precious_files_regex" != "X"; then 75556e7d3316Smrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 75566e7d3316Smrg then 75576e7d3316Smrg continue 75586e7d3316Smrg fi 75596e7d3316Smrg fi 756097cf2ee2Smrg func_append removelist " $p" 75616e7d3316Smrg ;; 75626e7d3316Smrg *) ;; 75636e7d3316Smrg esac 75646e7d3316Smrg done 75656e7d3316Smrg test -n "$removelist" && \ 75666e7d3316Smrg func_show_eval "${RM}r \$removelist" 75676e7d3316Smrg fi 75686e7d3316Smrg 75696e7d3316Smrg # Now set the variables for building old libraries. 75706e7d3316Smrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 757197cf2ee2Smrg func_append oldlibs " $output_objdir/$libname.$libext" 75726e7d3316Smrg 75736e7d3316Smrg # Transform .lo files to .o files. 75746e7d3316Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 75756e7d3316Smrg fi 75766e7d3316Smrg 75776e7d3316Smrg # Eliminate all temporary directories. 75786e7d3316Smrg #for path in $notinst_path; do 75796e7d3316Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 75806e7d3316Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 75816e7d3316Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 75826e7d3316Smrg #done 75836e7d3316Smrg 75846e7d3316Smrg if test -n "$xrpath"; then 75856e7d3316Smrg # If the user specified any rpath flags, then add them. 75866e7d3316Smrg temp_xrpath= 75876e7d3316Smrg for libdir in $xrpath; do 758897cf2ee2Smrg func_replace_sysroot "$libdir" 758997cf2ee2Smrg func_append temp_xrpath " -R$func_replace_sysroot_result" 75906e7d3316Smrg case "$finalize_rpath " in 75916e7d3316Smrg *" $libdir "*) ;; 759297cf2ee2Smrg *) func_append finalize_rpath " $libdir" ;; 75936e7d3316Smrg esac 75946e7d3316Smrg done 75956e7d3316Smrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 75966e7d3316Smrg dependency_libs="$temp_xrpath $dependency_libs" 75976e7d3316Smrg fi 75986e7d3316Smrg fi 75996e7d3316Smrg 76006e7d3316Smrg # Make sure dlfiles contains only unique files that won't be dlpreopened 76016e7d3316Smrg old_dlfiles="$dlfiles" 76026e7d3316Smrg dlfiles= 76036e7d3316Smrg for lib in $old_dlfiles; do 76046e7d3316Smrg case " $dlprefiles $dlfiles " in 76056e7d3316Smrg *" $lib "*) ;; 760697cf2ee2Smrg *) func_append dlfiles " $lib" ;; 76076e7d3316Smrg esac 76086e7d3316Smrg done 76096e7d3316Smrg 76106e7d3316Smrg # Make sure dlprefiles contains only unique files 76116e7d3316Smrg old_dlprefiles="$dlprefiles" 76126e7d3316Smrg dlprefiles= 76136e7d3316Smrg for lib in $old_dlprefiles; do 76146e7d3316Smrg case "$dlprefiles " in 76156e7d3316Smrg *" $lib "*) ;; 761697cf2ee2Smrg *) func_append dlprefiles " $lib" ;; 76176e7d3316Smrg esac 76186e7d3316Smrg done 76196e7d3316Smrg 76206e7d3316Smrg if test "$build_libtool_libs" = yes; then 76216e7d3316Smrg if test -n "$rpath"; then 76226e7d3316Smrg case $host in 76236e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 76246e7d3316Smrg # these systems don't actually have a c library (as such)! 76256e7d3316Smrg ;; 76266e7d3316Smrg *-*-rhapsody* | *-*-darwin1.[012]) 76276e7d3316Smrg # Rhapsody C library is in the System framework 762897cf2ee2Smrg func_append deplibs " System.ltframework" 76296e7d3316Smrg ;; 76306e7d3316Smrg *-*-netbsd*) 76316e7d3316Smrg # Don't link with libc until the a.out ld.so is fixed. 76326e7d3316Smrg ;; 76336e7d3316Smrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 76346e7d3316Smrg # Do not include libc due to us having libc/libc_r. 76356e7d3316Smrg ;; 76366e7d3316Smrg *-*-sco3.2v5* | *-*-sco5v6*) 76376e7d3316Smrg # Causes problems with __ctype 76386e7d3316Smrg ;; 76396e7d3316Smrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 76406e7d3316Smrg # Compiler inserts libc in the correct place for threads to work 76416e7d3316Smrg ;; 76426e7d3316Smrg *) 76436e7d3316Smrg # Add libc to deplibs on all other systems if necessary. 76446e7d3316Smrg if test "$build_libtool_need_lc" = "yes"; then 764597cf2ee2Smrg func_append deplibs " -lc" 76466e7d3316Smrg fi 76476e7d3316Smrg ;; 76486e7d3316Smrg esac 76496e7d3316Smrg fi 76506e7d3316Smrg 76516e7d3316Smrg # Transform deplibs into only deplibs that can be linked in shared. 76526e7d3316Smrg name_save=$name 76536e7d3316Smrg libname_save=$libname 76546e7d3316Smrg release_save=$release 76556e7d3316Smrg versuffix_save=$versuffix 76566e7d3316Smrg major_save=$major 76576e7d3316Smrg # I'm not sure if I'm treating the release correctly. I think 76586e7d3316Smrg # release should show up in the -l (ie -lgmp5) so we don't want to 76596e7d3316Smrg # add it in twice. Is that correct? 76606e7d3316Smrg release="" 76616e7d3316Smrg versuffix="" 76626e7d3316Smrg major="" 76636e7d3316Smrg newdeplibs= 76646e7d3316Smrg droppeddeps=no 76656e7d3316Smrg case $deplibs_check_method in 76666e7d3316Smrg pass_all) 76676e7d3316Smrg # Don't check for shared/static. Everything works. 76686e7d3316Smrg # This might be a little naive. We might want to check 76696e7d3316Smrg # whether the library exists or not. But this is on 76706e7d3316Smrg # osf3 & osf4 and I'm not really sure... Just 76716e7d3316Smrg # implementing what was already the behavior. 76726e7d3316Smrg newdeplibs=$deplibs 76736e7d3316Smrg ;; 76746e7d3316Smrg test_compile) 76756e7d3316Smrg # This code stresses the "libraries are programs" paradigm to its 76766e7d3316Smrg # limits. Maybe even breaks it. We compile a program, linking it 76776e7d3316Smrg # against the deplibs as a proxy for the library. Then we can check 76786e7d3316Smrg # whether they linked in statically or dynamically with ldd. 76796e7d3316Smrg $opt_dry_run || $RM conftest.c 76806e7d3316Smrg cat > conftest.c <<EOF 76816e7d3316Smrg int main() { return 0; } 76826e7d3316SmrgEOF 76836e7d3316Smrg $opt_dry_run || $RM conftest 76846e7d3316Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 76856e7d3316Smrg ldd_output=`ldd conftest` 76866e7d3316Smrg for i in $deplibs; do 76876e7d3316Smrg case $i in 76886e7d3316Smrg -l*) 76896e7d3316Smrg func_stripname -l '' "$i" 76906e7d3316Smrg name=$func_stripname_result 76916e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 76926e7d3316Smrg case " $predeps $postdeps " in 76936e7d3316Smrg *" $i "*) 769497cf2ee2Smrg func_append newdeplibs " $i" 76956e7d3316Smrg i="" 76966e7d3316Smrg ;; 76976e7d3316Smrg esac 76986e7d3316Smrg fi 76996e7d3316Smrg if test -n "$i" ; then 77006e7d3316Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 77016e7d3316Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 77026e7d3316Smrg set dummy $deplib_matches; shift 77036e7d3316Smrg deplib_match=$1 77046e7d3316Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 770597cf2ee2Smrg func_append newdeplibs " $i" 77066e7d3316Smrg else 77076e7d3316Smrg droppeddeps=yes 77086e7d3316Smrg echo 77096e7d3316Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 77106e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 77116e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 77126e7d3316Smrg echo "*** shared version of the library, which I believe you do not have" 77136e7d3316Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 77146e7d3316Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 77156e7d3316Smrg fi 77166e7d3316Smrg fi 77176e7d3316Smrg ;; 77186e7d3316Smrg *) 771997cf2ee2Smrg func_append newdeplibs " $i" 77206e7d3316Smrg ;; 77216e7d3316Smrg esac 77226e7d3316Smrg done 77236e7d3316Smrg else 77246e7d3316Smrg # Error occurred in the first compile. Let's try to salvage 77256e7d3316Smrg # the situation: Compile a separate program for each library. 77266e7d3316Smrg for i in $deplibs; do 77276e7d3316Smrg case $i in 77286e7d3316Smrg -l*) 77296e7d3316Smrg func_stripname -l '' "$i" 77306e7d3316Smrg name=$func_stripname_result 77316e7d3316Smrg $opt_dry_run || $RM conftest 77326e7d3316Smrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 77336e7d3316Smrg ldd_output=`ldd conftest` 77346e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 77356e7d3316Smrg case " $predeps $postdeps " in 77366e7d3316Smrg *" $i "*) 773797cf2ee2Smrg func_append newdeplibs " $i" 77386e7d3316Smrg i="" 77396e7d3316Smrg ;; 77406e7d3316Smrg esac 77416e7d3316Smrg fi 77426e7d3316Smrg if test -n "$i" ; then 77436e7d3316Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 77446e7d3316Smrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 77456e7d3316Smrg set dummy $deplib_matches; shift 77466e7d3316Smrg deplib_match=$1 77476e7d3316Smrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 774897cf2ee2Smrg func_append newdeplibs " $i" 77496e7d3316Smrg else 77506e7d3316Smrg droppeddeps=yes 77516e7d3316Smrg echo 77526e7d3316Smrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 77536e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 77546e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 77556e7d3316Smrg echo "*** shared version of the library, which you do not appear to have" 77566e7d3316Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 77576e7d3316Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 77586e7d3316Smrg fi 77596e7d3316Smrg fi 77606e7d3316Smrg else 77616e7d3316Smrg droppeddeps=yes 77626e7d3316Smrg echo 77636e7d3316Smrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 77646e7d3316Smrg echo "*** make it link in! You will probably need to install it or some" 77656e7d3316Smrg echo "*** library that it depends on before this library will be fully" 77666e7d3316Smrg echo "*** functional. Installing it before continuing would be even better." 77676e7d3316Smrg fi 77686e7d3316Smrg ;; 77696e7d3316Smrg *) 777097cf2ee2Smrg func_append newdeplibs " $i" 77716e7d3316Smrg ;; 77726e7d3316Smrg esac 77736e7d3316Smrg done 77746e7d3316Smrg fi 77756e7d3316Smrg ;; 77766e7d3316Smrg file_magic*) 77776e7d3316Smrg set dummy $deplibs_check_method; shift 77786e7d3316Smrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 77796e7d3316Smrg for a_deplib in $deplibs; do 77806e7d3316Smrg case $a_deplib in 77816e7d3316Smrg -l*) 77826e7d3316Smrg func_stripname -l '' "$a_deplib" 77836e7d3316Smrg name=$func_stripname_result 77846e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 77856e7d3316Smrg case " $predeps $postdeps " in 77866e7d3316Smrg *" $a_deplib "*) 778797cf2ee2Smrg func_append newdeplibs " $a_deplib" 77886e7d3316Smrg a_deplib="" 77896e7d3316Smrg ;; 77906e7d3316Smrg esac 77916e7d3316Smrg fi 77926e7d3316Smrg if test -n "$a_deplib" ; then 77936e7d3316Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 779497cf2ee2Smrg if test -n "$file_magic_glob"; then 779597cf2ee2Smrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 779697cf2ee2Smrg else 779797cf2ee2Smrg libnameglob=$libname 779897cf2ee2Smrg fi 779997cf2ee2Smrg test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 78006e7d3316Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 780197cf2ee2Smrg if test "$want_nocaseglob" = yes; then 780297cf2ee2Smrg shopt -s nocaseglob 780397cf2ee2Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 780497cf2ee2Smrg $nocaseglob 780597cf2ee2Smrg else 780697cf2ee2Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 780797cf2ee2Smrg fi 78086e7d3316Smrg for potent_lib in $potential_libs; do 78096e7d3316Smrg # Follow soft links. 78106e7d3316Smrg if ls -lLd "$potent_lib" 2>/dev/null | 78116e7d3316Smrg $GREP " -> " >/dev/null; then 78126e7d3316Smrg continue 78136e7d3316Smrg fi 78146e7d3316Smrg # The statement above tries to avoid entering an 78156e7d3316Smrg # endless loop below, in case of cyclic links. 78166e7d3316Smrg # We might still enter an endless loop, since a link 78176e7d3316Smrg # loop can be closed while we follow links, 78186e7d3316Smrg # but so what? 78196e7d3316Smrg potlib="$potent_lib" 78206e7d3316Smrg while test -h "$potlib" 2>/dev/null; do 78216e7d3316Smrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 78226e7d3316Smrg case $potliblink in 78236e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 78246e7d3316Smrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 78256e7d3316Smrg esac 78266e7d3316Smrg done 78276e7d3316Smrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 78286e7d3316Smrg $SED -e 10q | 78296e7d3316Smrg $EGREP "$file_magic_regex" > /dev/null; then 783097cf2ee2Smrg func_append newdeplibs " $a_deplib" 78316e7d3316Smrg a_deplib="" 78326e7d3316Smrg break 2 78336e7d3316Smrg fi 78346e7d3316Smrg done 78356e7d3316Smrg done 78366e7d3316Smrg fi 78376e7d3316Smrg if test -n "$a_deplib" ; then 78386e7d3316Smrg droppeddeps=yes 78396e7d3316Smrg echo 78406e7d3316Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 78416e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 78426e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 78436e7d3316Smrg echo "*** shared version of the library, which you do not appear to have" 78446e7d3316Smrg echo "*** because I did check the linker path looking for a file starting" 78456e7d3316Smrg if test -z "$potlib" ; then 78466e7d3316Smrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 78476e7d3316Smrg else 78486e7d3316Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 78496e7d3316Smrg $ECHO "*** using a file magic. Last file checked: $potlib" 78506e7d3316Smrg fi 78516e7d3316Smrg fi 78526e7d3316Smrg ;; 78536e7d3316Smrg *) 78546e7d3316Smrg # Add a -L argument. 785597cf2ee2Smrg func_append newdeplibs " $a_deplib" 78566e7d3316Smrg ;; 78576e7d3316Smrg esac 78586e7d3316Smrg done # Gone through all deplibs. 78596e7d3316Smrg ;; 78606e7d3316Smrg match_pattern*) 78616e7d3316Smrg set dummy $deplibs_check_method; shift 78626e7d3316Smrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 78636e7d3316Smrg for a_deplib in $deplibs; do 78646e7d3316Smrg case $a_deplib in 78656e7d3316Smrg -l*) 78666e7d3316Smrg func_stripname -l '' "$a_deplib" 78676e7d3316Smrg name=$func_stripname_result 78686e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 78696e7d3316Smrg case " $predeps $postdeps " in 78706e7d3316Smrg *" $a_deplib "*) 787197cf2ee2Smrg func_append newdeplibs " $a_deplib" 78726e7d3316Smrg a_deplib="" 78736e7d3316Smrg ;; 78746e7d3316Smrg esac 78756e7d3316Smrg fi 78766e7d3316Smrg if test -n "$a_deplib" ; then 78776e7d3316Smrg libname=`eval "\\$ECHO \"$libname_spec\""` 78786e7d3316Smrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 78796e7d3316Smrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 78806e7d3316Smrg for potent_lib in $potential_libs; do 78816e7d3316Smrg potlib="$potent_lib" # see symlink-check above in file_magic test 78826e7d3316Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 78836e7d3316Smrg $EGREP "$match_pattern_regex" > /dev/null; then 788497cf2ee2Smrg func_append newdeplibs " $a_deplib" 78856e7d3316Smrg a_deplib="" 78866e7d3316Smrg break 2 78876e7d3316Smrg fi 78886e7d3316Smrg done 78896e7d3316Smrg done 78906e7d3316Smrg fi 78916e7d3316Smrg if test -n "$a_deplib" ; then 78926e7d3316Smrg droppeddeps=yes 78936e7d3316Smrg echo 78946e7d3316Smrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 78956e7d3316Smrg echo "*** I have the capability to make that library automatically link in when" 78966e7d3316Smrg echo "*** you link to this library. But I can only do this if you have a" 78976e7d3316Smrg echo "*** shared version of the library, which you do not appear to have" 78986e7d3316Smrg echo "*** because I did check the linker path looking for a file starting" 78996e7d3316Smrg if test -z "$potlib" ; then 79006e7d3316Smrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 79016e7d3316Smrg else 79026e7d3316Smrg $ECHO "*** with $libname and none of the candidates passed a file format test" 79036e7d3316Smrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 79046e7d3316Smrg fi 79056e7d3316Smrg fi 79066e7d3316Smrg ;; 79076e7d3316Smrg *) 79086e7d3316Smrg # Add a -L argument. 790997cf2ee2Smrg func_append newdeplibs " $a_deplib" 79106e7d3316Smrg ;; 79116e7d3316Smrg esac 79126e7d3316Smrg done # Gone through all deplibs. 79136e7d3316Smrg ;; 79146e7d3316Smrg none | unknown | *) 79156e7d3316Smrg newdeplibs="" 79166e7d3316Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 79176e7d3316Smrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 79186e7d3316Smrg for i in $predeps $postdeps ; do 79196e7d3316Smrg # can't use Xsed below, because $i might contain '/' 79206e7d3316Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 79216e7d3316Smrg done 79226e7d3316Smrg fi 79236e7d3316Smrg case $tmp_deplibs in 79246e7d3316Smrg *[!\ \ ]*) 79256e7d3316Smrg echo 79266e7d3316Smrg if test "X$deplibs_check_method" = "Xnone"; then 79276e7d3316Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 79286e7d3316Smrg else 79296e7d3316Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 79306e7d3316Smrg fi 79316e7d3316Smrg echo "*** All declared inter-library dependencies are being dropped." 79326e7d3316Smrg droppeddeps=yes 79336e7d3316Smrg ;; 79346e7d3316Smrg esac 79356e7d3316Smrg ;; 79366e7d3316Smrg esac 79376e7d3316Smrg versuffix=$versuffix_save 79386e7d3316Smrg major=$major_save 79396e7d3316Smrg release=$release_save 79406e7d3316Smrg libname=$libname_save 79416e7d3316Smrg name=$name_save 79426e7d3316Smrg 79436e7d3316Smrg case $host in 79446e7d3316Smrg *-*-rhapsody* | *-*-darwin1.[012]) 79456e7d3316Smrg # On Rhapsody replace the C library with the System framework 79466e7d3316Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 79476e7d3316Smrg ;; 79486e7d3316Smrg esac 79496e7d3316Smrg 79506e7d3316Smrg if test "$droppeddeps" = yes; then 79516e7d3316Smrg if test "$module" = yes; then 79526e7d3316Smrg echo 79536e7d3316Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 79546e7d3316Smrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 79556e7d3316Smrg echo "*** a static module, that should work as long as the dlopening" 79566e7d3316Smrg echo "*** application is linked with the -dlopen flag." 79576e7d3316Smrg if test -z "$global_symbol_pipe"; then 79586e7d3316Smrg echo 79596e7d3316Smrg echo "*** However, this would only work if libtool was able to extract symbol" 79606e7d3316Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 79616e7d3316Smrg echo "*** not find such a program. So, this module is probably useless." 79626e7d3316Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 79636e7d3316Smrg fi 79646e7d3316Smrg if test "$build_old_libs" = no; then 79656e7d3316Smrg oldlibs="$output_objdir/$libname.$libext" 79666e7d3316Smrg build_libtool_libs=module 79676e7d3316Smrg build_old_libs=yes 79686e7d3316Smrg else 79696e7d3316Smrg build_libtool_libs=no 79706e7d3316Smrg fi 79716e7d3316Smrg else 79726e7d3316Smrg echo "*** The inter-library dependencies that have been dropped here will be" 79736e7d3316Smrg echo "*** automatically added whenever a program is linked with this library" 79746e7d3316Smrg echo "*** or is declared to -dlopen it." 79756e7d3316Smrg 79766e7d3316Smrg if test "$allow_undefined" = no; then 79776e7d3316Smrg echo 79786e7d3316Smrg echo "*** Since this library must not contain undefined symbols," 79796e7d3316Smrg echo "*** because either the platform does not support them or" 79806e7d3316Smrg echo "*** it was explicitly requested with -no-undefined," 79816e7d3316Smrg echo "*** libtool will only create a static version of it." 79826e7d3316Smrg if test "$build_old_libs" = no; then 79836e7d3316Smrg oldlibs="$output_objdir/$libname.$libext" 79846e7d3316Smrg build_libtool_libs=module 79856e7d3316Smrg build_old_libs=yes 79866e7d3316Smrg else 79876e7d3316Smrg build_libtool_libs=no 79886e7d3316Smrg fi 79896e7d3316Smrg fi 79906e7d3316Smrg fi 79916e7d3316Smrg fi 79926e7d3316Smrg # Done checking deplibs! 79936e7d3316Smrg deplibs=$newdeplibs 79946e7d3316Smrg fi 79956e7d3316Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 79966e7d3316Smrg case $host in 79976e7d3316Smrg *-*-darwin*) 79986e7d3316Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 79996e7d3316Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 80006e7d3316Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 80016e7d3316Smrg ;; 80026e7d3316Smrg esac 80036e7d3316Smrg 80046e7d3316Smrg # move library search paths that coincide with paths to not yet 80056e7d3316Smrg # installed libraries to the beginning of the library search list 80066e7d3316Smrg new_libs= 80076e7d3316Smrg for path in $notinst_path; do 80086e7d3316Smrg case " $new_libs " in 80096e7d3316Smrg *" -L$path/$objdir "*) ;; 80106e7d3316Smrg *) 80116e7d3316Smrg case " $deplibs " in 80126e7d3316Smrg *" -L$path/$objdir "*) 801397cf2ee2Smrg func_append new_libs " -L$path/$objdir" ;; 80146e7d3316Smrg esac 80156e7d3316Smrg ;; 80166e7d3316Smrg esac 80176e7d3316Smrg done 80186e7d3316Smrg for deplib in $deplibs; do 80196e7d3316Smrg case $deplib in 80206e7d3316Smrg -L*) 80216e7d3316Smrg case " $new_libs " in 80226e7d3316Smrg *" $deplib "*) ;; 802397cf2ee2Smrg *) func_append new_libs " $deplib" ;; 80246e7d3316Smrg esac 80256e7d3316Smrg ;; 802697cf2ee2Smrg *) func_append new_libs " $deplib" ;; 80276e7d3316Smrg esac 80286e7d3316Smrg done 80296e7d3316Smrg deplibs="$new_libs" 80306e7d3316Smrg 80316e7d3316Smrg # All the library-specific variables (install_libdir is set above). 80326e7d3316Smrg library_names= 80336e7d3316Smrg old_library= 80346e7d3316Smrg dlname= 80356e7d3316Smrg 80366e7d3316Smrg # Test again, we may have decided not to build it any more 80376e7d3316Smrg if test "$build_libtool_libs" = yes; then 8038ac92798bSmrg # Remove ${wl} instances when linking with ld. 8039ac92798bSmrg # FIXME: should test the right _cmds variable. 8040ac92798bSmrg case $archive_cmds in 8041ac92798bSmrg *\$LD\ *) wl= ;; 8042ac92798bSmrg esac 80436e7d3316Smrg if test "$hardcode_into_libs" = yes; then 80446e7d3316Smrg # Hardcode the library paths 80456e7d3316Smrg hardcode_libdirs= 80466e7d3316Smrg dep_rpath= 80476e7d3316Smrg rpath="$finalize_rpath" 804897cf2ee2Smrg test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 80496e7d3316Smrg for libdir in $rpath; do 80506e7d3316Smrg if test -n "$hardcode_libdir_flag_spec"; then 80516e7d3316Smrg if test -n "$hardcode_libdir_separator"; then 805297cf2ee2Smrg func_replace_sysroot "$libdir" 805397cf2ee2Smrg libdir=$func_replace_sysroot_result 80546e7d3316Smrg if test -z "$hardcode_libdirs"; then 80556e7d3316Smrg hardcode_libdirs="$libdir" 80566e7d3316Smrg else 80576e7d3316Smrg # Just accumulate the unique libdirs. 80586e7d3316Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 80596e7d3316Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 80606e7d3316Smrg ;; 80616e7d3316Smrg *) 806297cf2ee2Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 80636e7d3316Smrg ;; 80646e7d3316Smrg esac 80656e7d3316Smrg fi 80666e7d3316Smrg else 80676e7d3316Smrg eval flag=\"$hardcode_libdir_flag_spec\" 806897cf2ee2Smrg func_append dep_rpath " $flag" 80696e7d3316Smrg fi 80706e7d3316Smrg elif test -n "$runpath_var"; then 80716e7d3316Smrg case "$perm_rpath " in 80726e7d3316Smrg *" $libdir "*) ;; 8073ac92798bSmrg *) func_append perm_rpath " $libdir" ;; 80746e7d3316Smrg esac 80756e7d3316Smrg fi 80766e7d3316Smrg done 80776e7d3316Smrg # Substitute the hardcoded libdirs into the rpath. 80786e7d3316Smrg if test -n "$hardcode_libdir_separator" && 80796e7d3316Smrg test -n "$hardcode_libdirs"; then 80806e7d3316Smrg libdir="$hardcode_libdirs" 8081ac92798bSmrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 80826e7d3316Smrg fi 80836e7d3316Smrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 80846e7d3316Smrg # We should set the runpath_var. 80856e7d3316Smrg rpath= 80866e7d3316Smrg for dir in $perm_rpath; do 808797cf2ee2Smrg func_append rpath "$dir:" 80886e7d3316Smrg done 80896e7d3316Smrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 80906e7d3316Smrg fi 80916e7d3316Smrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 80926e7d3316Smrg fi 8093a966c04fSmrg 80946e7d3316Smrg shlibpath="$finalize_shlibpath" 809597cf2ee2Smrg test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 80966e7d3316Smrg if test -n "$shlibpath"; then 80976e7d3316Smrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 80986e7d3316Smrg fi 8099a966c04fSmrg 81006e7d3316Smrg # Get the real and link names of the library. 81016e7d3316Smrg eval shared_ext=\"$shrext_cmds\" 81026e7d3316Smrg eval library_names=\"$library_names_spec\" 81036e7d3316Smrg set dummy $library_names 81046e7d3316Smrg shift 81056e7d3316Smrg realname="$1" 81066e7d3316Smrg shift 8107a966c04fSmrg 81086e7d3316Smrg if test -n "$soname_spec"; then 81096e7d3316Smrg eval soname=\"$soname_spec\" 81106e7d3316Smrg else 81116e7d3316Smrg soname="$realname" 81126e7d3316Smrg fi 81136e7d3316Smrg if test -z "$dlname"; then 81146e7d3316Smrg dlname=$soname 81156e7d3316Smrg fi 8116a966c04fSmrg 81176e7d3316Smrg lib="$output_objdir/$realname" 81186e7d3316Smrg linknames= 81196e7d3316Smrg for link 81206e7d3316Smrg do 812197cf2ee2Smrg func_append linknames " $link" 81226e7d3316Smrg done 8123a966c04fSmrg 81246e7d3316Smrg # Use standard objects if they are pic 81256e7d3316Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 81266e7d3316Smrg test "X$libobjs" = "X " && libobjs= 8127a966c04fSmrg 81286e7d3316Smrg delfiles= 81296e7d3316Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 81306e7d3316Smrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 81316e7d3316Smrg export_symbols="$output_objdir/$libname.uexp" 813297cf2ee2Smrg func_append delfiles " $export_symbols" 81336e7d3316Smrg fi 8134a966c04fSmrg 81356e7d3316Smrg orig_export_symbols= 81366e7d3316Smrg case $host_os in 81376e7d3316Smrg cygwin* | mingw* | cegcc*) 81386e7d3316Smrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 81396e7d3316Smrg # exporting using user supplied symfile 81406e7d3316Smrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 81416e7d3316Smrg # and it's NOT already a .def file. Must figure out 81426e7d3316Smrg # which of the given symbols are data symbols and tag 81436e7d3316Smrg # them as such. So, trigger use of export_symbols_cmds. 81446e7d3316Smrg # export_symbols gets reassigned inside the "prepare 81456e7d3316Smrg # the list of exported symbols" if statement, so the 81466e7d3316Smrg # include_expsyms logic still works. 81476e7d3316Smrg orig_export_symbols="$export_symbols" 81486e7d3316Smrg export_symbols= 81496e7d3316Smrg always_export_symbols=yes 81506e7d3316Smrg fi 81516e7d3316Smrg fi 81526e7d3316Smrg ;; 81536e7d3316Smrg esac 8154a966c04fSmrg 81556e7d3316Smrg # Prepare the list of exported symbols 81566e7d3316Smrg if test -z "$export_symbols"; then 81576e7d3316Smrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 81586e7d3316Smrg func_verbose "generating symbol list for \`$libname.la'" 81596e7d3316Smrg export_symbols="$output_objdir/$libname.exp" 81606e7d3316Smrg $opt_dry_run || $RM $export_symbols 81616e7d3316Smrg cmds=$export_symbols_cmds 81626e7d3316Smrg save_ifs="$IFS"; IFS='~' 816397cf2ee2Smrg for cmd1 in $cmds; do 81646e7d3316Smrg IFS="$save_ifs" 816597cf2ee2Smrg # Take the normal branch if the nm_file_list_spec branch 816697cf2ee2Smrg # doesn't work or if tool conversion is not needed. 816797cf2ee2Smrg case $nm_file_list_spec~$to_tool_file_cmd in 816897cf2ee2Smrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 816997cf2ee2Smrg try_normal_branch=yes 817097cf2ee2Smrg eval cmd=\"$cmd1\" 817197cf2ee2Smrg func_len " $cmd" 817297cf2ee2Smrg len=$func_len_result 817397cf2ee2Smrg ;; 817497cf2ee2Smrg *) 817597cf2ee2Smrg try_normal_branch=no 817697cf2ee2Smrg ;; 817797cf2ee2Smrg esac 817897cf2ee2Smrg if test "$try_normal_branch" = yes \ 817997cf2ee2Smrg && { test "$len" -lt "$max_cmd_len" \ 818097cf2ee2Smrg || test "$max_cmd_len" -le -1; } 818197cf2ee2Smrg then 818297cf2ee2Smrg func_show_eval "$cmd" 'exit $?' 818397cf2ee2Smrg skipped_export=false 818497cf2ee2Smrg elif test -n "$nm_file_list_spec"; then 818597cf2ee2Smrg func_basename "$output" 818697cf2ee2Smrg output_la=$func_basename_result 818797cf2ee2Smrg save_libobjs=$libobjs 818897cf2ee2Smrg save_output=$output 818997cf2ee2Smrg output=${output_objdir}/${output_la}.nm 819097cf2ee2Smrg func_to_tool_file "$output" 819197cf2ee2Smrg libobjs=$nm_file_list_spec$func_to_tool_file_result 819297cf2ee2Smrg func_append delfiles " $output" 819397cf2ee2Smrg func_verbose "creating $NM input file list: $output" 819497cf2ee2Smrg for obj in $save_libobjs; do 819597cf2ee2Smrg func_to_tool_file "$obj" 819697cf2ee2Smrg $ECHO "$func_to_tool_file_result" 819797cf2ee2Smrg done > "$output" 819897cf2ee2Smrg eval cmd=\"$cmd1\" 81996e7d3316Smrg func_show_eval "$cmd" 'exit $?' 820097cf2ee2Smrg output=$save_output 820197cf2ee2Smrg libobjs=$save_libobjs 82026e7d3316Smrg skipped_export=false 82036e7d3316Smrg else 82046e7d3316Smrg # The command line is too long to execute in one step. 82056e7d3316Smrg func_verbose "using reloadable object file for export list..." 82066e7d3316Smrg skipped_export=: 82076e7d3316Smrg # Break out early, otherwise skipped_export may be 82086e7d3316Smrg # set to false by a later but shorter cmd. 82096e7d3316Smrg break 82106e7d3316Smrg fi 82116e7d3316Smrg done 82126e7d3316Smrg IFS="$save_ifs" 82136e7d3316Smrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 82146e7d3316Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 82156e7d3316Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 82166e7d3316Smrg fi 82176e7d3316Smrg fi 82186e7d3316Smrg fi 8219a966c04fSmrg 82206e7d3316Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 82216e7d3316Smrg tmp_export_symbols="$export_symbols" 82226e7d3316Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 82236e7d3316Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 82246e7d3316Smrg fi 8225a966c04fSmrg 82266e7d3316Smrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 82276e7d3316Smrg # The given exports_symbols file has to be filtered, so filter it. 82286e7d3316Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 82296e7d3316Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 82306e7d3316Smrg # 's' commands which not all seds can handle. GNU sed should be fine 82316e7d3316Smrg # though. Also, the filter scales superlinearly with the number of 82326e7d3316Smrg # global variables. join(1) would be nice here, but unfortunately 82336e7d3316Smrg # isn't a blessed tool. 82346e7d3316Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 823597cf2ee2Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 82366e7d3316Smrg export_symbols=$output_objdir/$libname.def 82376e7d3316Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8238a966c04fSmrg fi 8239a966c04fSmrg 82406e7d3316Smrg tmp_deplibs= 82416e7d3316Smrg for test_deplib in $deplibs; do 82426e7d3316Smrg case " $convenience " in 82436e7d3316Smrg *" $test_deplib "*) ;; 82446e7d3316Smrg *) 824597cf2ee2Smrg func_append tmp_deplibs " $test_deplib" 82466e7d3316Smrg ;; 82476e7d3316Smrg esac 82486e7d3316Smrg done 82496e7d3316Smrg deplibs="$tmp_deplibs" 8250a966c04fSmrg 82516e7d3316Smrg if test -n "$convenience"; then 82526e7d3316Smrg if test -n "$whole_archive_flag_spec" && 82536e7d3316Smrg test "$compiler_needs_object" = yes && 82546e7d3316Smrg test -z "$libobjs"; then 82556e7d3316Smrg # extract the archives, so we have objects to list. 82566e7d3316Smrg # TODO: could optimize this to just extract one archive. 82576e7d3316Smrg whole_archive_flag_spec= 82586e7d3316Smrg fi 82596e7d3316Smrg if test -n "$whole_archive_flag_spec"; then 82606e7d3316Smrg save_libobjs=$libobjs 82616e7d3316Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 82626e7d3316Smrg test "X$libobjs" = "X " && libobjs= 82636e7d3316Smrg else 82646e7d3316Smrg gentop="$output_objdir/${outputname}x" 826597cf2ee2Smrg func_append generated " $gentop" 8266a966c04fSmrg 82676e7d3316Smrg func_extract_archives $gentop $convenience 826897cf2ee2Smrg func_append libobjs " $func_extract_archives_result" 82696e7d3316Smrg test "X$libobjs" = "X " && libobjs= 82706e7d3316Smrg fi 82716e7d3316Smrg fi 8272a966c04fSmrg 82736e7d3316Smrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 82746e7d3316Smrg eval flag=\"$thread_safe_flag_spec\" 827597cf2ee2Smrg func_append linker_flags " $flag" 82766e7d3316Smrg fi 8277a966c04fSmrg 82786e7d3316Smrg # Make a backup of the uninstalled library when relinking 827997cf2ee2Smrg if test "$opt_mode" = relink; then 82806e7d3316Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 8281a966c04fSmrg fi 8282a966c04fSmrg 82836e7d3316Smrg # Do each of the archive commands. 82846e7d3316Smrg if test "$module" = yes && test -n "$module_cmds" ; then 82856e7d3316Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 82866e7d3316Smrg eval test_cmds=\"$module_expsym_cmds\" 82876e7d3316Smrg cmds=$module_expsym_cmds 82886e7d3316Smrg else 82896e7d3316Smrg eval test_cmds=\"$module_cmds\" 82906e7d3316Smrg cmds=$module_cmds 82916e7d3316Smrg fi 82926e7d3316Smrg else 82936e7d3316Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 82946e7d3316Smrg eval test_cmds=\"$archive_expsym_cmds\" 82956e7d3316Smrg cmds=$archive_expsym_cmds 82966e7d3316Smrg else 82976e7d3316Smrg eval test_cmds=\"$archive_cmds\" 82986e7d3316Smrg cmds=$archive_cmds 82996e7d3316Smrg fi 8300a966c04fSmrg fi 8301a966c04fSmrg 83026e7d3316Smrg if test "X$skipped_export" != "X:" && 83036e7d3316Smrg func_len " $test_cmds" && 83046e7d3316Smrg len=$func_len_result && 83056e7d3316Smrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 83066e7d3316Smrg : 83076e7d3316Smrg else 83086e7d3316Smrg # The command line is too long to link in one step, link piecewise 83096e7d3316Smrg # or, if using GNU ld and skipped_export is not :, use a linker 83106e7d3316Smrg # script. 8311a966c04fSmrg 83126e7d3316Smrg # Save the value of $output and $libobjs because we want to 83136e7d3316Smrg # use them later. If we have whole_archive_flag_spec, we 83146e7d3316Smrg # want to use save_libobjs as it was before 83156e7d3316Smrg # whole_archive_flag_spec was expanded, because we can't 83166e7d3316Smrg # assume the linker understands whole_archive_flag_spec. 83176e7d3316Smrg # This may have to be revisited, in case too many 83186e7d3316Smrg # convenience libraries get linked in and end up exceeding 83196e7d3316Smrg # the spec. 83206e7d3316Smrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 83216e7d3316Smrg save_libobjs=$libobjs 83226e7d3316Smrg fi 83236e7d3316Smrg save_output=$output 83246e7d3316Smrg func_basename "$output" 83256e7d3316Smrg output_la=$func_basename_result 8326a966c04fSmrg 83276e7d3316Smrg # Clear the reloadable object creation command queue and 83286e7d3316Smrg # initialize k to one. 83296e7d3316Smrg test_cmds= 83306e7d3316Smrg concat_cmds= 83316e7d3316Smrg objlist= 83326e7d3316Smrg last_robj= 83336e7d3316Smrg k=1 8334a966c04fSmrg 83356e7d3316Smrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 83366e7d3316Smrg output=${output_objdir}/${output_la}.lnkscript 83376e7d3316Smrg func_verbose "creating GNU ld script: $output" 83386e7d3316Smrg echo 'INPUT (' > $output 83396e7d3316Smrg for obj in $save_libobjs 83406e7d3316Smrg do 834197cf2ee2Smrg func_to_tool_file "$obj" 834297cf2ee2Smrg $ECHO "$func_to_tool_file_result" >> $output 83436e7d3316Smrg done 83446e7d3316Smrg echo ')' >> $output 834597cf2ee2Smrg func_append delfiles " $output" 834697cf2ee2Smrg func_to_tool_file "$output" 834797cf2ee2Smrg output=$func_to_tool_file_result 83486e7d3316Smrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 83496e7d3316Smrg output=${output_objdir}/${output_la}.lnk 83506e7d3316Smrg func_verbose "creating linker input file list: $output" 83516e7d3316Smrg : > $output 83526e7d3316Smrg set x $save_libobjs 83536e7d3316Smrg shift 83546e7d3316Smrg firstobj= 83556e7d3316Smrg if test "$compiler_needs_object" = yes; then 83566e7d3316Smrg firstobj="$1 " 83576e7d3316Smrg shift 83586e7d3316Smrg fi 83596e7d3316Smrg for obj 83606e7d3316Smrg do 836197cf2ee2Smrg func_to_tool_file "$obj" 836297cf2ee2Smrg $ECHO "$func_to_tool_file_result" >> $output 83636e7d3316Smrg done 836497cf2ee2Smrg func_append delfiles " $output" 836597cf2ee2Smrg func_to_tool_file "$output" 836697cf2ee2Smrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 83676e7d3316Smrg else 83686e7d3316Smrg if test -n "$save_libobjs"; then 83696e7d3316Smrg func_verbose "creating reloadable object files..." 83706e7d3316Smrg output=$output_objdir/$output_la-${k}.$objext 83716e7d3316Smrg eval test_cmds=\"$reload_cmds\" 83726e7d3316Smrg func_len " $test_cmds" 83736e7d3316Smrg len0=$func_len_result 83746e7d3316Smrg len=$len0 83756e7d3316Smrg 83766e7d3316Smrg # Loop over the list of objects to be linked. 83776e7d3316Smrg for obj in $save_libobjs 83786e7d3316Smrg do 83796e7d3316Smrg func_len " $obj" 83806e7d3316Smrg func_arith $len + $func_len_result 83816e7d3316Smrg len=$func_arith_result 83826e7d3316Smrg if test "X$objlist" = X || 83836e7d3316Smrg test "$len" -lt "$max_cmd_len"; then 83846e7d3316Smrg func_append objlist " $obj" 83856e7d3316Smrg else 83866e7d3316Smrg # The command $test_cmds is almost too long, add a 83876e7d3316Smrg # command to the queue. 83886e7d3316Smrg if test "$k" -eq 1 ; then 83896e7d3316Smrg # The first file doesn't have a previous command to add. 83906e7d3316Smrg reload_objs=$objlist 83916e7d3316Smrg eval concat_cmds=\"$reload_cmds\" 83926e7d3316Smrg else 83936e7d3316Smrg # All subsequent reloadable object files will link in 83946e7d3316Smrg # the last one created. 83956e7d3316Smrg reload_objs="$objlist $last_robj" 83966e7d3316Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 83976e7d3316Smrg fi 83986e7d3316Smrg last_robj=$output_objdir/$output_la-${k}.$objext 83996e7d3316Smrg func_arith $k + 1 84006e7d3316Smrg k=$func_arith_result 84016e7d3316Smrg output=$output_objdir/$output_la-${k}.$objext 84026e7d3316Smrg objlist=" $obj" 84036e7d3316Smrg func_len " $last_robj" 84046e7d3316Smrg func_arith $len0 + $func_len_result 84056e7d3316Smrg len=$func_arith_result 84066e7d3316Smrg fi 84076e7d3316Smrg done 84086e7d3316Smrg # Handle the remaining objects by creating one last 84096e7d3316Smrg # reloadable object file. All subsequent reloadable object 84106e7d3316Smrg # files will link in the last one created. 84116e7d3316Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 84126e7d3316Smrg reload_objs="$objlist $last_robj" 84136e7d3316Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 84146e7d3316Smrg if test -n "$last_robj"; then 84156e7d3316Smrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 84166e7d3316Smrg fi 841797cf2ee2Smrg func_append delfiles " $output" 84186e7d3316Smrg 84196e7d3316Smrg else 84206e7d3316Smrg output= 84216e7d3316Smrg fi 8422a966c04fSmrg 84236e7d3316Smrg if ${skipped_export-false}; then 84246e7d3316Smrg func_verbose "generating symbol list for \`$libname.la'" 84256e7d3316Smrg export_symbols="$output_objdir/$libname.exp" 84266e7d3316Smrg $opt_dry_run || $RM $export_symbols 84276e7d3316Smrg libobjs=$output 84286e7d3316Smrg # Append the command to create the export file. 84296e7d3316Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 84306e7d3316Smrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 84316e7d3316Smrg if test -n "$last_robj"; then 84326e7d3316Smrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 84336e7d3316Smrg fi 84346e7d3316Smrg fi 8435a966c04fSmrg 84366e7d3316Smrg test -n "$save_libobjs" && 84376e7d3316Smrg func_verbose "creating a temporary reloadable object file: $output" 8438a966c04fSmrg 84396e7d3316Smrg # Loop through the commands generated above and execute them. 84406e7d3316Smrg save_ifs="$IFS"; IFS='~' 84416e7d3316Smrg for cmd in $concat_cmds; do 84426e7d3316Smrg IFS="$save_ifs" 84436e7d3316Smrg $opt_silent || { 84446e7d3316Smrg func_quote_for_expand "$cmd" 84456e7d3316Smrg eval "func_echo $func_quote_for_expand_result" 84466e7d3316Smrg } 84476e7d3316Smrg $opt_dry_run || eval "$cmd" || { 84486e7d3316Smrg lt_exit=$? 84496e7d3316Smrg 84506e7d3316Smrg # Restore the uninstalled library and exit 845197cf2ee2Smrg if test "$opt_mode" = relink; then 84526e7d3316Smrg ( cd "$output_objdir" && \ 84536e7d3316Smrg $RM "${realname}T" && \ 84546e7d3316Smrg $MV "${realname}U" "$realname" ) 84556e7d3316Smrg fi 8456a966c04fSmrg 84576e7d3316Smrg exit $lt_exit 84586e7d3316Smrg } 84596e7d3316Smrg done 84606e7d3316Smrg IFS="$save_ifs" 8461a966c04fSmrg 84626e7d3316Smrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 84636e7d3316Smrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 84646e7d3316Smrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8465a966c04fSmrg fi 8466a966c04fSmrg fi 8467a966c04fSmrg 84686e7d3316Smrg if ${skipped_export-false}; then 84696e7d3316Smrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 84706e7d3316Smrg tmp_export_symbols="$export_symbols" 84716e7d3316Smrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 84726e7d3316Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 84736e7d3316Smrg fi 8474a966c04fSmrg 84756e7d3316Smrg if test -n "$orig_export_symbols"; then 84766e7d3316Smrg # The given exports_symbols file has to be filtered, so filter it. 84776e7d3316Smrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 84786e7d3316Smrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 84796e7d3316Smrg # 's' commands which not all seds can handle. GNU sed should be fine 84806e7d3316Smrg # though. Also, the filter scales superlinearly with the number of 84816e7d3316Smrg # global variables. join(1) would be nice here, but unfortunately 84826e7d3316Smrg # isn't a blessed tool. 84836e7d3316Smrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 848497cf2ee2Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 84856e7d3316Smrg export_symbols=$output_objdir/$libname.def 84866e7d3316Smrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 84876e7d3316Smrg fi 84886e7d3316Smrg fi 8489a966c04fSmrg 84906e7d3316Smrg libobjs=$output 84916e7d3316Smrg # Restore the value of output. 84926e7d3316Smrg output=$save_output 8493a966c04fSmrg 84946e7d3316Smrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 84956e7d3316Smrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 84966e7d3316Smrg test "X$libobjs" = "X " && libobjs= 84976e7d3316Smrg fi 84986e7d3316Smrg # Expand the library linking commands again to reset the 84996e7d3316Smrg # value of $libobjs for piecewise linking. 85006e7d3316Smrg 85016e7d3316Smrg # Do each of the archive commands. 85026e7d3316Smrg if test "$module" = yes && test -n "$module_cmds" ; then 85036e7d3316Smrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 85046e7d3316Smrg cmds=$module_expsym_cmds 8505a966c04fSmrg else 85066e7d3316Smrg cmds=$module_cmds 8507a966c04fSmrg fi 8508a966c04fSmrg else 85096e7d3316Smrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 85106e7d3316Smrg cmds=$archive_expsym_cmds 85116e7d3316Smrg else 85126e7d3316Smrg cmds=$archive_cmds 85136e7d3316Smrg fi 8514a966c04fSmrg fi 8515a966c04fSmrg fi 8516a966c04fSmrg 85176e7d3316Smrg if test -n "$delfiles"; then 85186e7d3316Smrg # Append the command to remove temporary files to $cmds. 85196e7d3316Smrg eval cmds=\"\$cmds~\$RM $delfiles\" 85206e7d3316Smrg fi 8521a966c04fSmrg 85226e7d3316Smrg # Add any objects from preloaded convenience libraries 85236e7d3316Smrg if test -n "$dlprefiles"; then 85246e7d3316Smrg gentop="$output_objdir/${outputname}x" 852597cf2ee2Smrg func_append generated " $gentop" 8526a966c04fSmrg 85276e7d3316Smrg func_extract_archives $gentop $dlprefiles 852897cf2ee2Smrg func_append libobjs " $func_extract_archives_result" 85296e7d3316Smrg test "X$libobjs" = "X " && libobjs= 8530a966c04fSmrg fi 8531a966c04fSmrg 85326e7d3316Smrg save_ifs="$IFS"; IFS='~' 85336e7d3316Smrg for cmd in $cmds; do 85346e7d3316Smrg IFS="$save_ifs" 85356e7d3316Smrg eval cmd=\"$cmd\" 85366e7d3316Smrg $opt_silent || { 85376e7d3316Smrg func_quote_for_expand "$cmd" 85386e7d3316Smrg eval "func_echo $func_quote_for_expand_result" 85396e7d3316Smrg } 85406e7d3316Smrg $opt_dry_run || eval "$cmd" || { 85416e7d3316Smrg lt_exit=$? 8542a966c04fSmrg 85436e7d3316Smrg # Restore the uninstalled library and exit 854497cf2ee2Smrg if test "$opt_mode" = relink; then 85456e7d3316Smrg ( cd "$output_objdir" && \ 85466e7d3316Smrg $RM "${realname}T" && \ 85476e7d3316Smrg $MV "${realname}U" "$realname" ) 8548a966c04fSmrg fi 8549a966c04fSmrg 85506e7d3316Smrg exit $lt_exit 85516e7d3316Smrg } 85526e7d3316Smrg done 85536e7d3316Smrg IFS="$save_ifs" 8554a966c04fSmrg 85556e7d3316Smrg # Restore the uninstalled library and exit 855697cf2ee2Smrg if test "$opt_mode" = relink; then 85576e7d3316Smrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 8558a966c04fSmrg 85596e7d3316Smrg if test -n "$convenience"; then 85606e7d3316Smrg if test -z "$whole_archive_flag_spec"; then 85616e7d3316Smrg func_show_eval '${RM}r "$gentop"' 85626e7d3316Smrg fi 85636e7d3316Smrg fi 8564a966c04fSmrg 85656e7d3316Smrg exit $EXIT_SUCCESS 85666e7d3316Smrg fi 8567a966c04fSmrg 85686e7d3316Smrg # Create links to the real library. 85696e7d3316Smrg for linkname in $linknames; do 85706e7d3316Smrg if test "$realname" != "$linkname"; then 85716e7d3316Smrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 85726e7d3316Smrg fi 85736e7d3316Smrg done 8574a966c04fSmrg 85756e7d3316Smrg # If -module or -export-dynamic was specified, set the dlname. 85766e7d3316Smrg if test "$module" = yes || test "$export_dynamic" = yes; then 85776e7d3316Smrg # On all known operating systems, these are identical. 85786e7d3316Smrg dlname="$soname" 85796e7d3316Smrg fi 85806e7d3316Smrg fi 85816e7d3316Smrg ;; 8582a966c04fSmrg 85836e7d3316Smrg obj) 85846e7d3316Smrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 85856e7d3316Smrg func_warning "\`-dlopen' is ignored for objects" 85866e7d3316Smrg fi 8587a966c04fSmrg 85886e7d3316Smrg case " $deplibs" in 85896e7d3316Smrg *\ -l* | *\ -L*) 85906e7d3316Smrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 85916e7d3316Smrg esac 8592a966c04fSmrg 85936e7d3316Smrg test -n "$rpath" && \ 85946e7d3316Smrg func_warning "\`-rpath' is ignored for objects" 8595a966c04fSmrg 85966e7d3316Smrg test -n "$xrpath" && \ 85976e7d3316Smrg func_warning "\`-R' is ignored for objects" 85986e7d3316Smrg 85996e7d3316Smrg test -n "$vinfo" && \ 86006e7d3316Smrg func_warning "\`-version-info' is ignored for objects" 8601a966c04fSmrg 86026e7d3316Smrg test -n "$release" && \ 86036e7d3316Smrg func_warning "\`-release' is ignored for objects" 8604a966c04fSmrg 86056e7d3316Smrg case $output in 86066e7d3316Smrg *.lo) 86076e7d3316Smrg test -n "$objs$old_deplibs" && \ 86086e7d3316Smrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 86096e7d3316Smrg 86106e7d3316Smrg libobj=$output 86116e7d3316Smrg func_lo2o "$libobj" 86126e7d3316Smrg obj=$func_lo2o_result 86136e7d3316Smrg ;; 86146e7d3316Smrg *) 86156e7d3316Smrg libobj= 86166e7d3316Smrg obj="$output" 8617a966c04fSmrg ;; 8618a966c04fSmrg esac 8619a966c04fSmrg 86206e7d3316Smrg # Delete the old objects. 86216e7d3316Smrg $opt_dry_run || $RM $obj $libobj 8622a966c04fSmrg 86236e7d3316Smrg # Objects from convenience libraries. This assumes 86246e7d3316Smrg # single-version convenience libraries. Whenever we create 86256e7d3316Smrg # different ones for PIC/non-PIC, this we'll have to duplicate 86266e7d3316Smrg # the extraction. 86276e7d3316Smrg reload_conv_objs= 86286e7d3316Smrg gentop= 86296e7d3316Smrg # reload_cmds runs $LD directly, so let us get rid of 86306e7d3316Smrg # -Wl from whole_archive_flag_spec and hope we can get by with 86316e7d3316Smrg # turning comma into space.. 86326e7d3316Smrg wl= 8633a966c04fSmrg 86346e7d3316Smrg if test -n "$convenience"; then 86356e7d3316Smrg if test -n "$whole_archive_flag_spec"; then 86366e7d3316Smrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 86376e7d3316Smrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 8638a966c04fSmrg else 86396e7d3316Smrg gentop="$output_objdir/${obj}x" 864097cf2ee2Smrg func_append generated " $gentop" 86416e7d3316Smrg 86426e7d3316Smrg func_extract_archives $gentop $convenience 86436e7d3316Smrg reload_conv_objs="$reload_objs $func_extract_archives_result" 8644a966c04fSmrg fi 86456e7d3316Smrg fi 8646a966c04fSmrg 864797cf2ee2Smrg # If we're not building shared, we need to use non_pic_objs 864897cf2ee2Smrg test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 864997cf2ee2Smrg 86506e7d3316Smrg # Create the old-style object. 86516e7d3316Smrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 8652a966c04fSmrg 86536e7d3316Smrg output="$obj" 86546e7d3316Smrg func_execute_cmds "$reload_cmds" 'exit $?' 8655a966c04fSmrg 86566e7d3316Smrg # Exit if we aren't doing a library object file. 86576e7d3316Smrg if test -z "$libobj"; then 86586e7d3316Smrg if test -n "$gentop"; then 86596e7d3316Smrg func_show_eval '${RM}r "$gentop"' 86606e7d3316Smrg fi 8661a966c04fSmrg 86626e7d3316Smrg exit $EXIT_SUCCESS 8663a966c04fSmrg fi 8664a966c04fSmrg 86656e7d3316Smrg if test "$build_libtool_libs" != yes; then 86666e7d3316Smrg if test -n "$gentop"; then 86676e7d3316Smrg func_show_eval '${RM}r "$gentop"' 86686e7d3316Smrg fi 8669a966c04fSmrg 86706e7d3316Smrg # Create an invalid libtool object if no PIC, so that we don't 86716e7d3316Smrg # accidentally link it into a program. 86726e7d3316Smrg # $show "echo timestamp > $libobj" 86736e7d3316Smrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 86746e7d3316Smrg exit $EXIT_SUCCESS 86756e7d3316Smrg fi 8676a966c04fSmrg 86776e7d3316Smrg if test -n "$pic_flag" || test "$pic_mode" != default; then 86786e7d3316Smrg # Only do commands if we really have different PIC objects. 86796e7d3316Smrg reload_objs="$libobjs $reload_conv_objs" 86806e7d3316Smrg output="$libobj" 86816e7d3316Smrg func_execute_cmds "$reload_cmds" 'exit $?' 8682a966c04fSmrg fi 86836e7d3316Smrg 86846e7d3316Smrg if test -n "$gentop"; then 86856e7d3316Smrg func_show_eval '${RM}r "$gentop"' 86866e7d3316Smrg fi 86876e7d3316Smrg 86886e7d3316Smrg exit $EXIT_SUCCESS 8689a966c04fSmrg ;; 8690a966c04fSmrg 86916e7d3316Smrg prog) 86926e7d3316Smrg case $host in 86936e7d3316Smrg *cygwin*) func_stripname '' '.exe' "$output" 86946e7d3316Smrg output=$func_stripname_result.exe;; 86956e7d3316Smrg esac 86966e7d3316Smrg test -n "$vinfo" && \ 86976e7d3316Smrg func_warning "\`-version-info' is ignored for programs" 8698a966c04fSmrg 86996e7d3316Smrg test -n "$release" && \ 87006e7d3316Smrg func_warning "\`-release' is ignored for programs" 8701a966c04fSmrg 87026e7d3316Smrg test "$preload" = yes \ 87036e7d3316Smrg && test "$dlopen_support" = unknown \ 87046e7d3316Smrg && test "$dlopen_self" = unknown \ 87056e7d3316Smrg && test "$dlopen_self_static" = unknown && \ 87066e7d3316Smrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 87076e7d3316Smrg 87086e7d3316Smrg case $host in 87096e7d3316Smrg *-*-rhapsody* | *-*-darwin1.[012]) 87106e7d3316Smrg # On Rhapsody replace the C library is the System framework 87116e7d3316Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 87126e7d3316Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 8713a966c04fSmrg ;; 87146e7d3316Smrg esac 8715a966c04fSmrg 87166e7d3316Smrg case $host in 87176e7d3316Smrg *-*-darwin*) 87186e7d3316Smrg # Don't allow lazy linking, it breaks C++ global constructors 87196e7d3316Smrg # But is supposedly fixed on 10.4 or later (yay!). 87206e7d3316Smrg if test "$tagname" = CXX ; then 87216e7d3316Smrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 87226e7d3316Smrg 10.[0123]) 872397cf2ee2Smrg func_append compile_command " ${wl}-bind_at_load" 872497cf2ee2Smrg func_append finalize_command " ${wl}-bind_at_load" 87256e7d3316Smrg ;; 87266e7d3316Smrg esac 8727a966c04fSmrg fi 87286e7d3316Smrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 87296e7d3316Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 87306e7d3316Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 87316e7d3316Smrg ;; 87326e7d3316Smrg esac 8733a966c04fSmrg 8734a966c04fSmrg 87356e7d3316Smrg # move library search paths that coincide with paths to not yet 87366e7d3316Smrg # installed libraries to the beginning of the library search list 87376e7d3316Smrg new_libs= 87386e7d3316Smrg for path in $notinst_path; do 87396e7d3316Smrg case " $new_libs " in 87406e7d3316Smrg *" -L$path/$objdir "*) ;; 87416e7d3316Smrg *) 87426e7d3316Smrg case " $compile_deplibs " in 87436e7d3316Smrg *" -L$path/$objdir "*) 874497cf2ee2Smrg func_append new_libs " -L$path/$objdir" ;; 8745a966c04fSmrg esac 87466e7d3316Smrg ;; 87476e7d3316Smrg esac 87486e7d3316Smrg done 87496e7d3316Smrg for deplib in $compile_deplibs; do 87506e7d3316Smrg case $deplib in 87516e7d3316Smrg -L*) 87526e7d3316Smrg case " $new_libs " in 87536e7d3316Smrg *" $deplib "*) ;; 875497cf2ee2Smrg *) func_append new_libs " $deplib" ;; 8755a966c04fSmrg esac 87566e7d3316Smrg ;; 875797cf2ee2Smrg *) func_append new_libs " $deplib" ;; 87586e7d3316Smrg esac 87596e7d3316Smrg done 87606e7d3316Smrg compile_deplibs="$new_libs" 8761a966c04fSmrg 8762a966c04fSmrg 876397cf2ee2Smrg func_append compile_command " $compile_deplibs" 876497cf2ee2Smrg func_append finalize_command " $finalize_deplibs" 8765a966c04fSmrg 87666e7d3316Smrg if test -n "$rpath$xrpath"; then 87676e7d3316Smrg # If the user specified any rpath flags, then add them. 87686e7d3316Smrg for libdir in $rpath $xrpath; do 87696e7d3316Smrg # This is the magic to use -rpath. 87706e7d3316Smrg case "$finalize_rpath " in 87716e7d3316Smrg *" $libdir "*) ;; 877297cf2ee2Smrg *) func_append finalize_rpath " $libdir" ;; 87736e7d3316Smrg esac 87746e7d3316Smrg done 87756e7d3316Smrg fi 8776a966c04fSmrg 87776e7d3316Smrg # Now hardcode the library paths 87786e7d3316Smrg rpath= 87796e7d3316Smrg hardcode_libdirs= 87806e7d3316Smrg for libdir in $compile_rpath $finalize_rpath; do 87816e7d3316Smrg if test -n "$hardcode_libdir_flag_spec"; then 87826e7d3316Smrg if test -n "$hardcode_libdir_separator"; then 87836e7d3316Smrg if test -z "$hardcode_libdirs"; then 87846e7d3316Smrg hardcode_libdirs="$libdir" 87856e7d3316Smrg else 87866e7d3316Smrg # Just accumulate the unique libdirs. 87876e7d3316Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 87886e7d3316Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 87896e7d3316Smrg ;; 87906e7d3316Smrg *) 879197cf2ee2Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 87926e7d3316Smrg ;; 87936e7d3316Smrg esac 87946e7d3316Smrg fi 8795a966c04fSmrg else 87966e7d3316Smrg eval flag=\"$hardcode_libdir_flag_spec\" 879797cf2ee2Smrg func_append rpath " $flag" 8798a966c04fSmrg fi 87996e7d3316Smrg elif test -n "$runpath_var"; then 88006e7d3316Smrg case "$perm_rpath " in 88016e7d3316Smrg *" $libdir "*) ;; 880297cf2ee2Smrg *) func_append perm_rpath " $libdir" ;; 88036e7d3316Smrg esac 88046e7d3316Smrg fi 88056e7d3316Smrg case $host in 88066e7d3316Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 88076e7d3316Smrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 88086e7d3316Smrg case :$dllsearchpath: in 88096e7d3316Smrg *":$libdir:"*) ;; 88106e7d3316Smrg ::) dllsearchpath=$libdir;; 881197cf2ee2Smrg *) func_append dllsearchpath ":$libdir";; 88126e7d3316Smrg esac 88136e7d3316Smrg case :$dllsearchpath: in 88146e7d3316Smrg *":$testbindir:"*) ;; 88156e7d3316Smrg ::) dllsearchpath=$testbindir;; 881697cf2ee2Smrg *) func_append dllsearchpath ":$testbindir";; 88176e7d3316Smrg esac 88186e7d3316Smrg ;; 88196e7d3316Smrg esac 88206e7d3316Smrg done 88216e7d3316Smrg # Substitute the hardcoded libdirs into the rpath. 88226e7d3316Smrg if test -n "$hardcode_libdir_separator" && 88236e7d3316Smrg test -n "$hardcode_libdirs"; then 88246e7d3316Smrg libdir="$hardcode_libdirs" 88256e7d3316Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 88266e7d3316Smrg fi 88276e7d3316Smrg compile_rpath="$rpath" 8828a966c04fSmrg 88296e7d3316Smrg rpath= 88306e7d3316Smrg hardcode_libdirs= 88316e7d3316Smrg for libdir in $finalize_rpath; do 88326e7d3316Smrg if test -n "$hardcode_libdir_flag_spec"; then 88336e7d3316Smrg if test -n "$hardcode_libdir_separator"; then 88346e7d3316Smrg if test -z "$hardcode_libdirs"; then 88356e7d3316Smrg hardcode_libdirs="$libdir" 88366e7d3316Smrg else 88376e7d3316Smrg # Just accumulate the unique libdirs. 88386e7d3316Smrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 88396e7d3316Smrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 88406e7d3316Smrg ;; 88416e7d3316Smrg *) 884297cf2ee2Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 88436e7d3316Smrg ;; 88446e7d3316Smrg esac 88456e7d3316Smrg fi 8846a966c04fSmrg else 88476e7d3316Smrg eval flag=\"$hardcode_libdir_flag_spec\" 884897cf2ee2Smrg func_append rpath " $flag" 8849a966c04fSmrg fi 88506e7d3316Smrg elif test -n "$runpath_var"; then 88516e7d3316Smrg case "$finalize_perm_rpath " in 88526e7d3316Smrg *" $libdir "*) ;; 885397cf2ee2Smrg *) func_append finalize_perm_rpath " $libdir" ;; 88546e7d3316Smrg esac 8855a966c04fSmrg fi 88566e7d3316Smrg done 88576e7d3316Smrg # Substitute the hardcoded libdirs into the rpath. 88586e7d3316Smrg if test -n "$hardcode_libdir_separator" && 88596e7d3316Smrg test -n "$hardcode_libdirs"; then 88606e7d3316Smrg libdir="$hardcode_libdirs" 88616e7d3316Smrg eval rpath=\" $hardcode_libdir_flag_spec\" 88626e7d3316Smrg fi 88636e7d3316Smrg finalize_rpath="$rpath" 8864a966c04fSmrg 88656e7d3316Smrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 88666e7d3316Smrg # Transform all the library objects into standard objects. 88676e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 88686e7d3316Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 88696e7d3316Smrg fi 8870a966c04fSmrg 88716e7d3316Smrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8872a966c04fSmrg 88736e7d3316Smrg # template prelinking step 88746e7d3316Smrg if test -n "$prelink_cmds"; then 88756e7d3316Smrg func_execute_cmds "$prelink_cmds" 'exit $?' 88766e7d3316Smrg fi 8877a966c04fSmrg 88786e7d3316Smrg wrappers_required=yes 88796e7d3316Smrg case $host in 88806e7d3316Smrg *cegcc* | *mingw32ce*) 88816e7d3316Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 88826e7d3316Smrg wrappers_required=no 88836e7d3316Smrg ;; 88846e7d3316Smrg *cygwin* | *mingw* ) 88856e7d3316Smrg if test "$build_libtool_libs" != yes; then 88866e7d3316Smrg wrappers_required=no 88876e7d3316Smrg fi 88886e7d3316Smrg ;; 88896e7d3316Smrg *) 88906e7d3316Smrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 88916e7d3316Smrg wrappers_required=no 88926e7d3316Smrg fi 88936e7d3316Smrg ;; 88946e7d3316Smrg esac 88956e7d3316Smrg if test "$wrappers_required" = no; then 88966e7d3316Smrg # Replace the output file specification. 88976e7d3316Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 88986e7d3316Smrg link_command="$compile_command$compile_rpath" 8899a966c04fSmrg 89006e7d3316Smrg # We have no uninstalled library dependencies, so finalize right now. 89016e7d3316Smrg exit_status=0 89026e7d3316Smrg func_show_eval "$link_command" 'exit_status=$?' 8903a966c04fSmrg 890497cf2ee2Smrg if test -n "$postlink_cmds"; then 890597cf2ee2Smrg func_to_tool_file "$output" 890697cf2ee2Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 890797cf2ee2Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 890897cf2ee2Smrg fi 890997cf2ee2Smrg 89106e7d3316Smrg # Delete the generated files. 89116e7d3316Smrg if test -f "$output_objdir/${outputname}S.${objext}"; then 89126e7d3316Smrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8913a966c04fSmrg fi 8914a966c04fSmrg 89156e7d3316Smrg exit $exit_status 89166e7d3316Smrg fi 8917a966c04fSmrg 89186e7d3316Smrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 89196e7d3316Smrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 89206e7d3316Smrg fi 89216e7d3316Smrg if test -n "$finalize_shlibpath"; then 89226e7d3316Smrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 89236e7d3316Smrg fi 8924a966c04fSmrg 89256e7d3316Smrg compile_var= 89266e7d3316Smrg finalize_var= 89276e7d3316Smrg if test -n "$runpath_var"; then 89286e7d3316Smrg if test -n "$perm_rpath"; then 89296e7d3316Smrg # We should set the runpath_var. 89306e7d3316Smrg rpath= 89316e7d3316Smrg for dir in $perm_rpath; do 893297cf2ee2Smrg func_append rpath "$dir:" 89336e7d3316Smrg done 89346e7d3316Smrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 8935a966c04fSmrg fi 89366e7d3316Smrg if test -n "$finalize_perm_rpath"; then 89376e7d3316Smrg # We should set the runpath_var. 89386e7d3316Smrg rpath= 89396e7d3316Smrg for dir in $finalize_perm_rpath; do 894097cf2ee2Smrg func_append rpath "$dir:" 89416e7d3316Smrg done 89426e7d3316Smrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8943a966c04fSmrg fi 89446e7d3316Smrg fi 8945a966c04fSmrg 89466e7d3316Smrg if test "$no_install" = yes; then 89476e7d3316Smrg # We don't need to create a wrapper script. 89486e7d3316Smrg link_command="$compile_var$compile_command$compile_rpath" 89496e7d3316Smrg # Replace the output file specification. 89506e7d3316Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 89516e7d3316Smrg # Delete the old output file. 89526e7d3316Smrg $opt_dry_run || $RM $output 89536e7d3316Smrg # Link the executable and exit 89546e7d3316Smrg func_show_eval "$link_command" 'exit $?' 895597cf2ee2Smrg 895697cf2ee2Smrg if test -n "$postlink_cmds"; then 895797cf2ee2Smrg func_to_tool_file "$output" 895897cf2ee2Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 895997cf2ee2Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 896097cf2ee2Smrg fi 896197cf2ee2Smrg 8962a966c04fSmrg exit $EXIT_SUCCESS 89636e7d3316Smrg fi 8964a966c04fSmrg 89656e7d3316Smrg if test "$hardcode_action" = relink; then 89666e7d3316Smrg # Fast installation is not supported 89676e7d3316Smrg link_command="$compile_var$compile_command$compile_rpath" 89686e7d3316Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 89696e7d3316Smrg 89706e7d3316Smrg func_warning "this platform does not like uninstalled shared libraries" 89716e7d3316Smrg func_warning "\`$output' will be relinked during installation" 89726e7d3316Smrg else 89736e7d3316Smrg if test "$fast_install" != no; then 89746e7d3316Smrg link_command="$finalize_var$compile_command$finalize_rpath" 89756e7d3316Smrg if test "$fast_install" = yes; then 89766e7d3316Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 89776e7d3316Smrg else 89786e7d3316Smrg # fast_install is set to needless 89796e7d3316Smrg relink_command= 89806e7d3316Smrg fi 8981a966c04fSmrg else 89826e7d3316Smrg link_command="$compile_var$compile_command$compile_rpath" 89836e7d3316Smrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8984a966c04fSmrg fi 89856e7d3316Smrg fi 8986a966c04fSmrg 89876e7d3316Smrg # Replace the output file specification. 89886e7d3316Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 8989a966c04fSmrg 89906e7d3316Smrg # Delete the old output files. 89916e7d3316Smrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 8992a966c04fSmrg 89936e7d3316Smrg func_show_eval "$link_command" 'exit $?' 8994a966c04fSmrg 899597cf2ee2Smrg if test -n "$postlink_cmds"; then 899697cf2ee2Smrg func_to_tool_file "$output_objdir/$outputname" 899797cf2ee2Smrg 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'` 899897cf2ee2Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 899997cf2ee2Smrg fi 900097cf2ee2Smrg 90016e7d3316Smrg # Now create the wrapper script. 90026e7d3316Smrg func_verbose "creating $output" 9003a966c04fSmrg 90046e7d3316Smrg # Quote the relink command for shipping. 90056e7d3316Smrg if test -n "$relink_command"; then 90066e7d3316Smrg # Preserve any variables that may affect compiler behavior 90076e7d3316Smrg for var in $variables_saved_for_relink; do 90086e7d3316Smrg if eval test -z \"\${$var+set}\"; then 90096e7d3316Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 90106e7d3316Smrg elif eval var_value=\$$var; test -z "$var_value"; then 90116e7d3316Smrg relink_command="$var=; export $var; $relink_command" 9012a966c04fSmrg else 90136e7d3316Smrg func_quote_for_eval "$var_value" 90146e7d3316Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9015a966c04fSmrg fi 90166e7d3316Smrg done 90176e7d3316Smrg relink_command="(cd `pwd`; $relink_command)" 90186e7d3316Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 90196e7d3316Smrg fi 9020a966c04fSmrg 90216e7d3316Smrg # Only actually do things if not in dry run mode. 90226e7d3316Smrg $opt_dry_run || { 90236e7d3316Smrg # win32 will think the script is a binary if it has 90246e7d3316Smrg # a .exe suffix, so we strip it off here. 90256e7d3316Smrg case $output in 90266e7d3316Smrg *.exe) func_stripname '' '.exe' "$output" 90276e7d3316Smrg output=$func_stripname_result ;; 90286e7d3316Smrg esac 90296e7d3316Smrg # test for cygwin because mv fails w/o .exe extensions 90306e7d3316Smrg case $host in 90316e7d3316Smrg *cygwin*) 90326e7d3316Smrg exeext=.exe 90336e7d3316Smrg func_stripname '' '.exe' "$outputname" 90346e7d3316Smrg outputname=$func_stripname_result ;; 90356e7d3316Smrg *) exeext= ;; 9036a966c04fSmrg esac 90376e7d3316Smrg case $host in 90386e7d3316Smrg *cygwin* | *mingw* ) 90396e7d3316Smrg func_dirname_and_basename "$output" "" "." 90406e7d3316Smrg output_name=$func_basename_result 90416e7d3316Smrg output_path=$func_dirname_result 90426e7d3316Smrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 90436e7d3316Smrg cwrapper="$output_path/$output_name.exe" 90446e7d3316Smrg $RM $cwrappersource $cwrapper 90456e7d3316Smrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 90466e7d3316Smrg 90476e7d3316Smrg func_emit_cwrapperexe_src > $cwrappersource 90486e7d3316Smrg 90496e7d3316Smrg # The wrapper executable is built using the $host compiler, 90506e7d3316Smrg # because it contains $host paths and files. If cross- 90516e7d3316Smrg # compiling, it, like the target executable, must be 90526e7d3316Smrg # executed on the $host or under an emulation environment. 90536e7d3316Smrg $opt_dry_run || { 90546e7d3316Smrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 90556e7d3316Smrg $STRIP $cwrapper 90566e7d3316Smrg } 9057a966c04fSmrg 90586e7d3316Smrg # Now, create the wrapper script for func_source use: 90596e7d3316Smrg func_ltwrapper_scriptname $cwrapper 90606e7d3316Smrg $RM $func_ltwrapper_scriptname_result 90616e7d3316Smrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 90626e7d3316Smrg $opt_dry_run || { 90636e7d3316Smrg # note: this script will not be executed, so do not chmod. 90646e7d3316Smrg if test "x$build" = "x$host" ; then 90656e7d3316Smrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 90666e7d3316Smrg else 90676e7d3316Smrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 90686e7d3316Smrg fi 90696e7d3316Smrg } 90706e7d3316Smrg ;; 90716e7d3316Smrg * ) 90726e7d3316Smrg $RM $output 90736e7d3316Smrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 9074a966c04fSmrg 90756e7d3316Smrg func_emit_wrapper no > $output 90766e7d3316Smrg chmod +x $output 90776e7d3316Smrg ;; 90786e7d3316Smrg esac 90796e7d3316Smrg } 90806e7d3316Smrg exit $EXIT_SUCCESS 90816e7d3316Smrg ;; 90826e7d3316Smrg esac 9083a966c04fSmrg 90846e7d3316Smrg # See if we need to build an old-fashioned archive. 90856e7d3316Smrg for oldlib in $oldlibs; do 9086a966c04fSmrg 90876e7d3316Smrg if test "$build_libtool_libs" = convenience; then 90886e7d3316Smrg oldobjs="$libobjs_save $symfileobj" 90896e7d3316Smrg addlibs="$convenience" 90906e7d3316Smrg build_libtool_libs=no 90916e7d3316Smrg else 90926e7d3316Smrg if test "$build_libtool_libs" = module; then 90936e7d3316Smrg oldobjs="$libobjs_save" 90946e7d3316Smrg build_libtool_libs=no 90956e7d3316Smrg else 90966e7d3316Smrg oldobjs="$old_deplibs $non_pic_objects" 90976e7d3316Smrg if test "$preload" = yes && test -f "$symfileobj"; then 909897cf2ee2Smrg func_append oldobjs " $symfileobj" 90996e7d3316Smrg fi 91006e7d3316Smrg fi 91016e7d3316Smrg addlibs="$old_convenience" 9102a966c04fSmrg fi 9103a966c04fSmrg 91046e7d3316Smrg if test -n "$addlibs"; then 91056e7d3316Smrg gentop="$output_objdir/${outputname}x" 910697cf2ee2Smrg func_append generated " $gentop" 9107a966c04fSmrg 91086e7d3316Smrg func_extract_archives $gentop $addlibs 910997cf2ee2Smrg func_append oldobjs " $func_extract_archives_result" 91106e7d3316Smrg fi 9111a966c04fSmrg 91126e7d3316Smrg # Do each command in the archive commands. 91136e7d3316Smrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 91146e7d3316Smrg cmds=$old_archive_from_new_cmds 91156e7d3316Smrg else 9116a966c04fSmrg 91176e7d3316Smrg # Add any objects from preloaded convenience libraries 91186e7d3316Smrg if test -n "$dlprefiles"; then 91196e7d3316Smrg gentop="$output_objdir/${outputname}x" 912097cf2ee2Smrg func_append generated " $gentop" 9121a966c04fSmrg 91226e7d3316Smrg func_extract_archives $gentop $dlprefiles 912397cf2ee2Smrg func_append oldobjs " $func_extract_archives_result" 91246e7d3316Smrg fi 9125a966c04fSmrg 91266e7d3316Smrg # POSIX demands no paths to be encoded in archives. We have 91276e7d3316Smrg # to avoid creating archives with duplicate basenames if we 91286e7d3316Smrg # might have to extract them afterwards, e.g., when creating a 91296e7d3316Smrg # static archive out of a convenience library, or when linking 91306e7d3316Smrg # the entirety of a libtool archive into another (currently 91316e7d3316Smrg # not supported by libtool). 91326e7d3316Smrg if (for obj in $oldobjs 91336e7d3316Smrg do 91346e7d3316Smrg func_basename "$obj" 91356e7d3316Smrg $ECHO "$func_basename_result" 91366e7d3316Smrg done | sort | sort -uc >/dev/null 2>&1); then 91376e7d3316Smrg : 91386e7d3316Smrg else 91396e7d3316Smrg echo "copying selected object files to avoid basename conflicts..." 91406e7d3316Smrg gentop="$output_objdir/${outputname}x" 914197cf2ee2Smrg func_append generated " $gentop" 91426e7d3316Smrg func_mkdir_p "$gentop" 91436e7d3316Smrg save_oldobjs=$oldobjs 91446e7d3316Smrg oldobjs= 91456e7d3316Smrg counter=1 91466e7d3316Smrg for obj in $save_oldobjs 91476e7d3316Smrg do 91486e7d3316Smrg func_basename "$obj" 91496e7d3316Smrg objbase="$func_basename_result" 91506e7d3316Smrg case " $oldobjs " in 91516e7d3316Smrg " ") oldobjs=$obj ;; 91526e7d3316Smrg *[\ /]"$objbase "*) 91536e7d3316Smrg while :; do 91546e7d3316Smrg # Make sure we don't pick an alternate name that also 91556e7d3316Smrg # overlaps. 91566e7d3316Smrg newobj=lt$counter-$objbase 91576e7d3316Smrg func_arith $counter + 1 91586e7d3316Smrg counter=$func_arith_result 91596e7d3316Smrg case " $oldobjs " in 91606e7d3316Smrg *[\ /]"$newobj "*) ;; 91616e7d3316Smrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 91626e7d3316Smrg esac 91636e7d3316Smrg done 91646e7d3316Smrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 916597cf2ee2Smrg func_append oldobjs " $gentop/$newobj" 91666e7d3316Smrg ;; 916797cf2ee2Smrg *) func_append oldobjs " $obj" ;; 91686e7d3316Smrg esac 9169a966c04fSmrg done 9170a966c04fSmrg fi 9171ac92798bSmrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 9172ac92798bSmrg tool_oldlib=$func_to_tool_file_result 91736e7d3316Smrg eval cmds=\"$old_archive_cmds\" 9174a966c04fSmrg 91756e7d3316Smrg func_len " $cmds" 91766e7d3316Smrg len=$func_len_result 91776e7d3316Smrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 91786e7d3316Smrg cmds=$old_archive_cmds 917997cf2ee2Smrg elif test -n "$archiver_list_spec"; then 918097cf2ee2Smrg func_verbose "using command file archive linking..." 918197cf2ee2Smrg for obj in $oldobjs 918297cf2ee2Smrg do 918397cf2ee2Smrg func_to_tool_file "$obj" 918497cf2ee2Smrg $ECHO "$func_to_tool_file_result" 918597cf2ee2Smrg done > $output_objdir/$libname.libcmd 918697cf2ee2Smrg func_to_tool_file "$output_objdir/$libname.libcmd" 918797cf2ee2Smrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 918897cf2ee2Smrg cmds=$old_archive_cmds 91896e7d3316Smrg else 91906e7d3316Smrg # the command line is too long to link in one step, link in parts 91916e7d3316Smrg func_verbose "using piecewise archive linking..." 91926e7d3316Smrg save_RANLIB=$RANLIB 91936e7d3316Smrg RANLIB=: 91946e7d3316Smrg objlist= 91956e7d3316Smrg concat_cmds= 91966e7d3316Smrg save_oldobjs=$oldobjs 91976e7d3316Smrg oldobjs= 91986e7d3316Smrg # Is there a better way of finding the last object in the list? 91996e7d3316Smrg for obj in $save_oldobjs 92006e7d3316Smrg do 92016e7d3316Smrg last_oldobj=$obj 92026e7d3316Smrg done 92036e7d3316Smrg eval test_cmds=\"$old_archive_cmds\" 92046e7d3316Smrg func_len " $test_cmds" 92056e7d3316Smrg len0=$func_len_result 92066e7d3316Smrg len=$len0 92076e7d3316Smrg for obj in $save_oldobjs 92086e7d3316Smrg do 92096e7d3316Smrg func_len " $obj" 92106e7d3316Smrg func_arith $len + $func_len_result 92116e7d3316Smrg len=$func_arith_result 92126e7d3316Smrg func_append objlist " $obj" 92136e7d3316Smrg if test "$len" -lt "$max_cmd_len"; then 92146e7d3316Smrg : 92156e7d3316Smrg else 92166e7d3316Smrg # the above command should be used before it gets too long 92176e7d3316Smrg oldobjs=$objlist 92186e7d3316Smrg if test "$obj" = "$last_oldobj" ; then 92196e7d3316Smrg RANLIB=$save_RANLIB 92206e7d3316Smrg fi 92216e7d3316Smrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 92226e7d3316Smrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 92236e7d3316Smrg objlist= 92246e7d3316Smrg len=$len0 92256e7d3316Smrg fi 92266e7d3316Smrg done 92276e7d3316Smrg RANLIB=$save_RANLIB 92286e7d3316Smrg oldobjs=$objlist 92296e7d3316Smrg if test "X$oldobjs" = "X" ; then 92306e7d3316Smrg eval cmds=\"\$concat_cmds\" 92316e7d3316Smrg else 92326e7d3316Smrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 92336e7d3316Smrg fi 92346e7d3316Smrg fi 92356e7d3316Smrg fi 92366e7d3316Smrg func_execute_cmds "$cmds" 'exit $?' 9237a966c04fSmrg done 9238a966c04fSmrg 92396e7d3316Smrg test -n "$generated" && \ 92406e7d3316Smrg func_show_eval "${RM}r$generated" 9241a966c04fSmrg 92426e7d3316Smrg # Now create the libtool archive. 92436e7d3316Smrg case $output in 92446e7d3316Smrg *.la) 92456e7d3316Smrg old_library= 92466e7d3316Smrg test "$build_old_libs" = yes && old_library="$libname.$libext" 92476e7d3316Smrg func_verbose "creating $output" 9248a966c04fSmrg 92496e7d3316Smrg # Preserve any variables that may affect compiler behavior 92506e7d3316Smrg for var in $variables_saved_for_relink; do 92516e7d3316Smrg if eval test -z \"\${$var+set}\"; then 92526e7d3316Smrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 92536e7d3316Smrg elif eval var_value=\$$var; test -z "$var_value"; then 92546e7d3316Smrg relink_command="$var=; export $var; $relink_command" 9255a966c04fSmrg else 92566e7d3316Smrg func_quote_for_eval "$var_value" 92576e7d3316Smrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9258a966c04fSmrg fi 92596e7d3316Smrg done 92606e7d3316Smrg # Quote the link command for shipping. 92616e7d3316Smrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 92626e7d3316Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 92636e7d3316Smrg if test "$hardcode_automatic" = yes ; then 92646e7d3316Smrg relink_command= 92656e7d3316Smrg fi 9266a966c04fSmrg 92676e7d3316Smrg # Only create the output if not a dry run. 92686e7d3316Smrg $opt_dry_run || { 92696e7d3316Smrg for installed in no yes; do 92706e7d3316Smrg if test "$installed" = yes; then 92716e7d3316Smrg if test -z "$install_libdir"; then 92726e7d3316Smrg break 92736e7d3316Smrg fi 92746e7d3316Smrg output="$output_objdir/$outputname"i 92756e7d3316Smrg # Replace all uninstalled libtool libraries with the installed ones 92766e7d3316Smrg newdependency_libs= 92776e7d3316Smrg for deplib in $dependency_libs; do 92786e7d3316Smrg case $deplib in 92796e7d3316Smrg *.la) 92806e7d3316Smrg func_basename "$deplib" 92816e7d3316Smrg name="$func_basename_result" 9282ac92798bSmrg func_resolve_sysroot "$deplib" 9283ac92798bSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 92846e7d3316Smrg test -z "$libdir" && \ 92856e7d3316Smrg func_fatal_error "\`$deplib' is not a valid libtool archive" 928697cf2ee2Smrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 928797cf2ee2Smrg ;; 928897cf2ee2Smrg -L*) 928997cf2ee2Smrg func_stripname -L '' "$deplib" 929097cf2ee2Smrg func_replace_sysroot "$func_stripname_result" 929197cf2ee2Smrg func_append newdependency_libs " -L$func_replace_sysroot_result" 929297cf2ee2Smrg ;; 929397cf2ee2Smrg -R*) 929497cf2ee2Smrg func_stripname -R '' "$deplib" 929597cf2ee2Smrg func_replace_sysroot "$func_stripname_result" 929697cf2ee2Smrg func_append newdependency_libs " -R$func_replace_sysroot_result" 92976e7d3316Smrg ;; 929897cf2ee2Smrg *) func_append newdependency_libs " $deplib" ;; 92996e7d3316Smrg esac 93006e7d3316Smrg done 93016e7d3316Smrg dependency_libs="$newdependency_libs" 93026e7d3316Smrg newdlfiles= 93036e7d3316Smrg 93046e7d3316Smrg for lib in $dlfiles; do 93056e7d3316Smrg case $lib in 93066e7d3316Smrg *.la) 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 newdlfiles " ${lt_sysroot:+=}$libdir/$name" 93136e7d3316Smrg ;; 931497cf2ee2Smrg *) func_append newdlfiles " $lib" ;; 93156e7d3316Smrg esac 93166e7d3316Smrg done 93176e7d3316Smrg dlfiles="$newdlfiles" 93186e7d3316Smrg newdlprefiles= 93196e7d3316Smrg for lib in $dlprefiles; do 93206e7d3316Smrg case $lib in 93216e7d3316Smrg *.la) 93226e7d3316Smrg # Only pass preopened files to the pseudo-archive (for 93236e7d3316Smrg # eventual linking with the app. that links it) if we 93246e7d3316Smrg # didn't already link the preopened objects directly into 93256e7d3316Smrg # the library: 93266e7d3316Smrg func_basename "$lib" 93276e7d3316Smrg name="$func_basename_result" 93286e7d3316Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 93296e7d3316Smrg test -z "$libdir" && \ 93306e7d3316Smrg func_fatal_error "\`$lib' is not a valid libtool archive" 933197cf2ee2Smrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 93326e7d3316Smrg ;; 93336e7d3316Smrg esac 93346e7d3316Smrg done 93356e7d3316Smrg dlprefiles="$newdlprefiles" 93366e7d3316Smrg else 93376e7d3316Smrg newdlfiles= 93386e7d3316Smrg for lib in $dlfiles; do 93396e7d3316Smrg case $lib in 93406e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 93416e7d3316Smrg *) abs=`pwd`"/$lib" ;; 93426e7d3316Smrg esac 934397cf2ee2Smrg func_append newdlfiles " $abs" 93446e7d3316Smrg done 93456e7d3316Smrg dlfiles="$newdlfiles" 93466e7d3316Smrg newdlprefiles= 93476e7d3316Smrg for lib in $dlprefiles; do 93486e7d3316Smrg case $lib in 93496e7d3316Smrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 93506e7d3316Smrg *) abs=`pwd`"/$lib" ;; 93516e7d3316Smrg esac 935297cf2ee2Smrg func_append newdlprefiles " $abs" 93536e7d3316Smrg done 93546e7d3316Smrg dlprefiles="$newdlprefiles" 93556e7d3316Smrg fi 93566e7d3316Smrg $RM $output 93576e7d3316Smrg # place dlname in correct position for cygwin 93586e7d3316Smrg # In fact, it would be nice if we could use this code for all target 93596e7d3316Smrg # systems that can't hard-code library paths into their executables 93606e7d3316Smrg # and that have no shared library path variable independent of PATH, 93616e7d3316Smrg # but it turns out we can't easily determine that from inspecting 93626e7d3316Smrg # libtool variables, so we have to hard-code the OSs to which it 93636e7d3316Smrg # applies here; at the moment, that means platforms that use the PE 93646e7d3316Smrg # object format with DLL files. See the long comment at the top of 93656e7d3316Smrg # tests/bindir.at for full details. 93666e7d3316Smrg tdlname=$dlname 93676e7d3316Smrg case $host,$output,$installed,$module,$dlname in 93686e7d3316Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 93696e7d3316Smrg # If a -bindir argument was supplied, place the dll there. 93706e7d3316Smrg if test "x$bindir" != x ; 93716e7d3316Smrg then 93726e7d3316Smrg func_relative_path "$install_libdir" "$bindir" 93736e7d3316Smrg tdlname=$func_relative_path_result$dlname 93746e7d3316Smrg else 93756e7d3316Smrg # Otherwise fall back on heuristic. 93766e7d3316Smrg tdlname=../bin/$dlname 93776e7d3316Smrg fi 93786e7d3316Smrg ;; 93796e7d3316Smrg esac 93806e7d3316Smrg $ECHO > $output "\ 93816e7d3316Smrg# $outputname - a libtool library file 93826e7d3316Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 93836e7d3316Smrg# 93846e7d3316Smrg# Please DO NOT delete this file! 93856e7d3316Smrg# It is necessary for linking the library. 9386a966c04fSmrg 93876e7d3316Smrg# The name that we can dlopen(3). 93886e7d3316Smrgdlname='$tdlname' 9389a966c04fSmrg 93906e7d3316Smrg# Names of this library. 93916e7d3316Smrglibrary_names='$library_names' 9392a966c04fSmrg 93936e7d3316Smrg# The name of the static archive. 93946e7d3316Smrgold_library='$old_library' 9395a966c04fSmrg 93966e7d3316Smrg# Linker flags that can not go in dependency_libs. 93976e7d3316Smrginherited_linker_flags='$new_inherited_linker_flags' 9398a966c04fSmrg 93996e7d3316Smrg# Libraries that this one depends upon. 94006e7d3316Smrgdependency_libs='$dependency_libs' 9401a966c04fSmrg 94026e7d3316Smrg# Names of additional weak libraries provided by this library 94036e7d3316Smrgweak_library_names='$weak_libs' 9404a966c04fSmrg 94056e7d3316Smrg# Version information for $libname. 94066e7d3316Smrgcurrent=$current 94076e7d3316Smrgage=$age 94086e7d3316Smrgrevision=$revision 9409a966c04fSmrg 94106e7d3316Smrg# Is this an already installed library? 94116e7d3316Smrginstalled=$installed 9412a966c04fSmrg 94136e7d3316Smrg# Should we warn about portability when linking against -modules? 94146e7d3316Smrgshouldnotlink=$module 9415a966c04fSmrg 94166e7d3316Smrg# Files to dlopen/dlpreopen 94176e7d3316Smrgdlopen='$dlfiles' 94186e7d3316Smrgdlpreopen='$dlprefiles' 9419a966c04fSmrg 94206e7d3316Smrg# Directory that this library needs to be installed in: 94216e7d3316Smrglibdir='$install_libdir'" 94226e7d3316Smrg if test "$installed" = no && test "$need_relink" = yes; then 94236e7d3316Smrg $ECHO >> $output "\ 94246e7d3316Smrgrelink_command=\"$relink_command\"" 94256e7d3316Smrg fi 94266e7d3316Smrg done 94276e7d3316Smrg } 9428a966c04fSmrg 94296e7d3316Smrg # Do a symbolic link so that the libtool archive can be found in 94306e7d3316Smrg # LD_LIBRARY_PATH before the program is installed. 94316e7d3316Smrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 94326e7d3316Smrg ;; 94336e7d3316Smrg esac 94346e7d3316Smrg exit $EXIT_SUCCESS 94356e7d3316Smrg} 9436a966c04fSmrg 943797cf2ee2Smrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 94386e7d3316Smrg func_mode_link ${1+"$@"} 9439a966c04fSmrg 9440a966c04fSmrg 94416e7d3316Smrg# func_mode_uninstall arg... 94426e7d3316Smrgfunc_mode_uninstall () 94436e7d3316Smrg{ 94446e7d3316Smrg $opt_debug 94456e7d3316Smrg RM="$nonopt" 9446a966c04fSmrg files= 9447a966c04fSmrg rmforce= 9448a966c04fSmrg exit_status=0 9449a966c04fSmrg 9450a966c04fSmrg # This variable tells wrapper scripts just to set variables rather 9451a966c04fSmrg # than running their programs. 9452a966c04fSmrg libtool_install_magic="$magic" 9453a966c04fSmrg 9454a966c04fSmrg for arg 9455a966c04fSmrg do 9456a966c04fSmrg case $arg in 945797cf2ee2Smrg -f) func_append RM " $arg"; rmforce=yes ;; 945897cf2ee2Smrg -*) func_append RM " $arg" ;; 945997cf2ee2Smrg *) func_append files " $arg" ;; 9460a966c04fSmrg esac 9461a966c04fSmrg done 9462a966c04fSmrg 94636e7d3316Smrg test -z "$RM" && \ 94646e7d3316Smrg func_fatal_help "you must specify an RM program" 9465a966c04fSmrg 9466a966c04fSmrg rmdirs= 9467a966c04fSmrg 9468a966c04fSmrg for file in $files; do 94696e7d3316Smrg func_dirname "$file" "" "." 94706e7d3316Smrg dir="$func_dirname_result" 94716e7d3316Smrg if test "X$dir" = X.; then 947297cf2ee2Smrg odir="$objdir" 9473a966c04fSmrg else 947497cf2ee2Smrg odir="$dir/$objdir" 9475a966c04fSmrg fi 94766e7d3316Smrg func_basename "$file" 94776e7d3316Smrg name="$func_basename_result" 947897cf2ee2Smrg test "$opt_mode" = uninstall && odir="$dir" 9479a966c04fSmrg 948097cf2ee2Smrg # Remember odir for removal later, being careful to avoid duplicates 948197cf2ee2Smrg if test "$opt_mode" = clean; then 9482a966c04fSmrg case " $rmdirs " in 948397cf2ee2Smrg *" $odir "*) ;; 948497cf2ee2Smrg *) func_append rmdirs " $odir" ;; 9485a966c04fSmrg esac 9486a966c04fSmrg fi 9487a966c04fSmrg 9488a966c04fSmrg # Don't error if the file doesn't exist and rm -f was used. 94896e7d3316Smrg if { test -L "$file"; } >/dev/null 2>&1 || 94906e7d3316Smrg { test -h "$file"; } >/dev/null 2>&1 || 94916e7d3316Smrg test -f "$file"; then 9492a966c04fSmrg : 9493a966c04fSmrg elif test -d "$file"; then 9494a966c04fSmrg exit_status=1 9495a966c04fSmrg continue 9496a966c04fSmrg elif test "$rmforce" = yes; then 9497a966c04fSmrg continue 9498a966c04fSmrg fi 9499a966c04fSmrg 9500a966c04fSmrg rmfiles="$file" 9501a966c04fSmrg 9502a966c04fSmrg case $name in 9503a966c04fSmrg *.la) 9504a966c04fSmrg # Possibly a libtool archive, so verify it. 95056e7d3316Smrg if func_lalib_p "$file"; then 95066e7d3316Smrg func_source $dir/$name 9507a966c04fSmrg 9508a966c04fSmrg # Delete the libtool libraries and symlinks. 9509a966c04fSmrg for n in $library_names; do 951097cf2ee2Smrg func_append rmfiles " $odir/$n" 9511a966c04fSmrg done 951297cf2ee2Smrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 9513a966c04fSmrg 951497cf2ee2Smrg case "$opt_mode" in 9515a966c04fSmrg clean) 951697cf2ee2Smrg case " $library_names " in 9517a966c04fSmrg *" $dlname "*) ;; 951897cf2ee2Smrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 9519a966c04fSmrg esac 952097cf2ee2Smrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 9521a966c04fSmrg ;; 9522a966c04fSmrg uninstall) 9523a966c04fSmrg if test -n "$library_names"; then 9524a966c04fSmrg # Do each command in the postuninstall commands. 95256e7d3316Smrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9526a966c04fSmrg fi 9527a966c04fSmrg 9528a966c04fSmrg if test -n "$old_library"; then 9529a966c04fSmrg # Do each command in the old_postuninstall commands. 95306e7d3316Smrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9531a966c04fSmrg fi 9532a966c04fSmrg # FIXME: should reinstall the best remaining shared library. 9533a966c04fSmrg ;; 9534a966c04fSmrg esac 9535a966c04fSmrg fi 9536a966c04fSmrg ;; 9537a966c04fSmrg 9538a966c04fSmrg *.lo) 9539a966c04fSmrg # Possibly a libtool object, so verify it. 95406e7d3316Smrg if func_lalib_p "$file"; then 9541a966c04fSmrg 9542a966c04fSmrg # Read the .lo file 95436e7d3316Smrg func_source $dir/$name 9544a966c04fSmrg 9545a966c04fSmrg # Add PIC object to the list of files to remove. 95466e7d3316Smrg if test -n "$pic_object" && 95476e7d3316Smrg test "$pic_object" != none; then 954897cf2ee2Smrg func_append rmfiles " $dir/$pic_object" 9549a966c04fSmrg fi 9550a966c04fSmrg 9551a966c04fSmrg # Add non-PIC object to the list of files to remove. 95526e7d3316Smrg if test -n "$non_pic_object" && 95536e7d3316Smrg test "$non_pic_object" != none; then 955497cf2ee2Smrg func_append rmfiles " $dir/$non_pic_object" 9555a966c04fSmrg fi 9556a966c04fSmrg fi 9557a966c04fSmrg ;; 9558a966c04fSmrg 9559a966c04fSmrg *) 956097cf2ee2Smrg if test "$opt_mode" = clean ; then 9561a966c04fSmrg noexename=$name 9562a966c04fSmrg case $file in 9563a966c04fSmrg *.exe) 95646e7d3316Smrg func_stripname '' '.exe' "$file" 95656e7d3316Smrg file=$func_stripname_result 95666e7d3316Smrg func_stripname '' '.exe' "$name" 95676e7d3316Smrg noexename=$func_stripname_result 9568a966c04fSmrg # $file with .exe has already been added to rmfiles, 9569a966c04fSmrg # add $file without .exe 957097cf2ee2Smrg func_append rmfiles " $file" 9571a966c04fSmrg ;; 9572a966c04fSmrg esac 9573a966c04fSmrg # Do a test to see if this is a libtool program. 95746e7d3316Smrg if func_ltwrapper_p "$file"; then 95756e7d3316Smrg if func_ltwrapper_executable_p "$file"; then 95766e7d3316Smrg func_ltwrapper_scriptname "$file" 95776e7d3316Smrg relink_command= 95786e7d3316Smrg func_source $func_ltwrapper_scriptname_result 957997cf2ee2Smrg func_append rmfiles " $func_ltwrapper_scriptname_result" 95806e7d3316Smrg else 95816e7d3316Smrg relink_command= 95826e7d3316Smrg func_source $dir/$noexename 95836e7d3316Smrg fi 9584a966c04fSmrg 9585a966c04fSmrg # note $name still contains .exe if it was in $file originally 9586a966c04fSmrg # as does the version of $file that was added into $rmfiles 958797cf2ee2Smrg func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 9588a966c04fSmrg if test "$fast_install" = yes && test -n "$relink_command"; then 958997cf2ee2Smrg func_append rmfiles " $odir/lt-$name" 9590a966c04fSmrg fi 9591a966c04fSmrg if test "X$noexename" != "X$name" ; then 959297cf2ee2Smrg func_append rmfiles " $odir/lt-${noexename}.c" 9593a966c04fSmrg fi 9594a966c04fSmrg fi 9595a966c04fSmrg fi 9596a966c04fSmrg ;; 9597a966c04fSmrg esac 95986e7d3316Smrg func_show_eval "$RM $rmfiles" 'exit_status=1' 9599a966c04fSmrg done 9600a966c04fSmrg 9601a966c04fSmrg # Try to remove the ${objdir}s in the directories where we deleted files 9602a966c04fSmrg for dir in $rmdirs; do 9603a966c04fSmrg if test -d "$dir"; then 96046e7d3316Smrg func_show_eval "rmdir $dir >/dev/null 2>&1" 9605a966c04fSmrg fi 9606a966c04fSmrg done 9607a966c04fSmrg 9608a966c04fSmrg exit $exit_status 96096e7d3316Smrg} 9610a966c04fSmrg 961197cf2ee2Smrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 96126e7d3316Smrg func_mode_uninstall ${1+"$@"} 9613a966c04fSmrg 961497cf2ee2Smrgtest -z "$opt_mode" && { 96156e7d3316Smrg help="$generic_help" 96166e7d3316Smrg func_fatal_help "you must specify a MODE" 96176e7d3316Smrg} 96186e7d3316Smrg 96196e7d3316Smrgtest -z "$exec_cmd" && \ 962097cf2ee2Smrg func_fatal_help "invalid operation mode \`$opt_mode'" 9621a966c04fSmrg 9622a966c04fSmrgif test -n "$exec_cmd"; then 96236e7d3316Smrg eval exec "$exec_cmd" 9624a966c04fSmrg exit $EXIT_FAILURE 9625a966c04fSmrgfi 9626a966c04fSmrg 96276e7d3316Smrgexit $exit_status 9628a966c04fSmrg 9629a966c04fSmrg 9630a966c04fSmrg# The TAGs below are defined such that we never get into a situation 9631a966c04fSmrg# in which we disable both kinds of libraries. Given conflicting 9632a966c04fSmrg# choices, we go for a static library, that is the most portable, 9633a966c04fSmrg# since we can't tell whether shared libraries were disabled because 9634a966c04fSmrg# the user asked for that or because the platform doesn't support 9635a966c04fSmrg# them. This is particularly important on AIX, because we don't 9636a966c04fSmrg# support having both static and shared libraries enabled at the same 9637a966c04fSmrg# time on that platform, so we default to a shared-only configuration. 9638a966c04fSmrg# If a disable-shared tag is given, we'll fallback to a static-only 9639a966c04fSmrg# configuration. But we'll never go from static-only to shared-only. 9640a966c04fSmrg 9641a966c04fSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 96426e7d3316Smrgbuild_libtool_libs=no 96436e7d3316Smrgbuild_old_libs=yes 9644a966c04fSmrg# ### END LIBTOOL TAG CONFIG: disable-shared 9645a966c04fSmrg 9646a966c04fSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 96476e7d3316Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 9648a966c04fSmrg# ### END LIBTOOL TAG CONFIG: disable-static 9649a966c04fSmrg 9650a966c04fSmrg# Local Variables: 9651a966c04fSmrg# mode:shell-script 9652a966c04fSmrg# sh-indentation:2 9653a966c04fSmrg# End: 96546e7d3316Smrg# vi:sw=2 96556e7d3316Smrg 9656