ltmain.sh revision fb5e8d76
1698f425bSmrg 2fb5e8d76Smrg# libtool (GNU libtool) 2.4.2 3698f425bSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 4698f425bSmrg 59ef0b394Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 6fb5e8d76Smrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 7698f425bSmrg# This is free software; see the source for copying conditions. There is NO 8698f425bSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 9698f425bSmrg 10698f425bSmrg# GNU Libtool is free software; you can redistribute it and/or modify 11266e564dSmrg# it under the terms of the GNU General Public License as published by 12266e564dSmrg# the Free Software Foundation; either version 2 of the License, or 13266e564dSmrg# (at your option) any later version. 14266e564dSmrg# 15698f425bSmrg# As a special exception to the GNU General Public License, 16698f425bSmrg# if you distribute this file as part of a program or library that 17698f425bSmrg# is built using GNU Libtool, you may include this file under the 18698f425bSmrg# same distribution terms that you use for the rest of that program. 19698f425bSmrg# 20698f425bSmrg# GNU Libtool is distributed in the hope that it will be useful, but 21266e564dSmrg# WITHOUT ANY WARRANTY; without even the implied warranty of 22266e564dSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23266e564dSmrg# General Public License for more details. 24266e564dSmrg# 25266e564dSmrg# You should have received a copy of the GNU General Public License 26698f425bSmrg# along with GNU Libtool; see the file COPYING. If not, a copy 27698f425bSmrg# can be downloaded from http://www.gnu.org/licenses/gpl.html, 28698f425bSmrg# or obtained by writing to the Free Software Foundation, Inc., 29698f425bSmrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 30c5629e66Smrg 31698f425bSmrg# Usage: $progname [OPTION]... [MODE-ARG]... 32698f425bSmrg# 33698f425bSmrg# Provide generalized library-building support services. 34698f425bSmrg# 359ef0b394Smrg# --config show all configuration variables 369ef0b394Smrg# --debug enable verbose shell tracing 379ef0b394Smrg# -n, --dry-run display commands without modifying any files 389ef0b394Smrg# --features display basic configuration information and exit 399ef0b394Smrg# --mode=MODE use operation mode MODE 409ef0b394Smrg# --preserve-dup-deps don't remove duplicate dependency libraries 419ef0b394Smrg# --quiet, --silent don't print informational messages 429ef0b394Smrg# --no-quiet, --no-silent 439ef0b394Smrg# print informational messages (default) 44fb5e8d76Smrg# --no-warn don't display warning messages 459ef0b394Smrg# --tag=TAG use configuration variables from tag TAG 469ef0b394Smrg# -v, --verbose print more informational messages than default 479ef0b394Smrg# --no-verbose don't print the extra informational messages 489ef0b394Smrg# --version print version information 499ef0b394Smrg# -h, --help, --help-all print short, long, or detailed help message 50698f425bSmrg# 51698f425bSmrg# MODE must be one of the following: 52698f425bSmrg# 539ef0b394Smrg# clean remove files from the build directory 549ef0b394Smrg# compile compile a source file into a libtool object 559ef0b394Smrg# execute automatically set library path, then run a program 569ef0b394Smrg# finish complete the installation of libtool libraries 579ef0b394Smrg# install install libraries or executables 589ef0b394Smrg# link create a library or an executable 599ef0b394Smrg# uninstall remove libraries from an installed directory 60698f425bSmrg# 619ef0b394Smrg# MODE-ARGS vary depending on the MODE. When passed as first option, 629ef0b394Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. 63698f425bSmrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE. 64698f425bSmrg# 65698f425bSmrg# When reporting a bug, please describe a test case to reproduce it and 66698f425bSmrg# include the following information: 67698f425bSmrg# 689ef0b394Smrg# host-triplet: $host 699ef0b394Smrg# shell: $SHELL 709ef0b394Smrg# compiler: $LTCC 719ef0b394Smrg# compiler flags: $LTCFLAGS 729ef0b394Smrg# linker: $LD (gnu? $with_gnu_ld) 73fb5e8d76Smrg# $progname: (GNU libtool) 2.4.2 749ef0b394Smrg# automake: $automake_version 759ef0b394Smrg# autoconf: $autoconf_version 76698f425bSmrg# 77698f425bSmrg# Report bugs to <bug-libtool@gnu.org>. 789ef0b394Smrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>. 799ef0b394Smrg# General help using GNU software: <http://www.gnu.org/gethelp/>. 80266e564dSmrg 819ef0b394SmrgPROGRAM=libtool 82266e564dSmrgPACKAGE=libtool 83fb5e8d76SmrgVERSION=2.4.2 84698f425bSmrgTIMESTAMP="" 85fb5e8d76Smrgpackage_revision=1.3337 86c5629e66Smrg 87698f425bSmrg# Be Bourne compatible 88c5629e66Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then 89c5629e66Smrg emulate sh 90c5629e66Smrg NULLCMD=: 91c5629e66Smrg # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which 92c5629e66Smrg # is contrary to our usage. Disable this feature. 93c5629e66Smrg alias -g '${1+"$@"}'='"$@"' 94266e564dSmrg setopt NO_GLOB_SUBST 95c5629e66Smrgelse 96c5629e66Smrg case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac 97266e564dSmrgfi 98c5629e66SmrgBIN_SH=xpg4; export BIN_SH # for Tru64 99c5629e66SmrgDUALCASE=1; export DUALCASE # for MKS sh 100266e564dSmrg 1019ef0b394Smrg# A function that is used when there is no print builtin or printf. 1029ef0b394Smrgfunc_fallback_echo () 1039ef0b394Smrg{ 1049ef0b394Smrg eval 'cat <<_LTECHO_EOF 1059ef0b394Smrg$1 1069ef0b394Smrg_LTECHO_EOF' 1079ef0b394Smrg} 1089ef0b394Smrg 109698f425bSmrg# NLS nuisances: We save the old values to restore during execute mode. 110698f425bSmrglt_user_locale= 111698f425bSmrglt_safe_locale= 112c5629e66Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 113c5629e66Smrgdo 114c5629e66Smrg eval "if test \"\${$lt_var+set}\" = set; then 115698f425bSmrg save_$lt_var=\$$lt_var 116698f425bSmrg $lt_var=C 117c5629e66Smrg export $lt_var 118698f425bSmrg lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" 119698f425bSmrg lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" 120c5629e66Smrg fi" 121c5629e66Smrgdone 1229ef0b394SmrgLC_ALL=C 1239ef0b394SmrgLANGUAGE=C 1249ef0b394Smrgexport LANGUAGE LC_ALL 125c5629e66Smrg 126698f425bSmrg$lt_unset CDPATH 127698f425bSmrg 128698f425bSmrg 1299ef0b394Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh 1309ef0b394Smrg# is ksh but when the shell is invoked as "sh" and the current value of 1319ef0b394Smrg# the _XPG environment variable is not equal to 1 (one), the special 1329ef0b394Smrg# positional parameter $0, within a function call, is the name of the 1339ef0b394Smrg# function. 1349ef0b394Smrgprogpath="$0" 135698f425bSmrg 136698f425bSmrg 137698f425bSmrg 138698f425bSmrg: ${CP="cp -f"} 1399ef0b394Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} 140698f425bSmrg: ${MAKE="make"} 141698f425bSmrg: ${MKDIR="mkdir"} 142698f425bSmrg: ${MV="mv -f"} 143698f425bSmrg: ${RM="rm -f"} 144698f425bSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"} 145698f425bSmrg: ${Xsed="$SED -e 1s/^X//"} 146698f425bSmrg 147698f425bSmrg# Global variables: 148698f425bSmrgEXIT_SUCCESS=0 149698f425bSmrgEXIT_FAILURE=1 150698f425bSmrgEXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. 151698f425bSmrgEXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. 152698f425bSmrg 153698f425bSmrgexit_status=$EXIT_SUCCESS 154266e564dSmrg 155266e564dSmrg# Make sure IFS has a sensible default 156266e564dSmrglt_nl=' 157266e564dSmrg' 158266e564dSmrgIFS=" $lt_nl" 159266e564dSmrg 160698f425bSmrgdirname="s,/[^/]*$,," 161698f425bSmrgbasename="s,^.*/,," 162698f425bSmrg 1639ef0b394Smrg# func_dirname file append nondir_replacement 1649ef0b394Smrg# Compute the dirname of FILE. If nonempty, add APPEND to the result, 1659ef0b394Smrg# otherwise set result to NONDIR_REPLACEMENT. 1669ef0b394Smrgfunc_dirname () 1679ef0b394Smrg{ 1689ef0b394Smrg func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` 1699ef0b394Smrg if test "X$func_dirname_result" = "X${1}"; then 1709ef0b394Smrg func_dirname_result="${3}" 1719ef0b394Smrg else 1729ef0b394Smrg func_dirname_result="$func_dirname_result${2}" 1739ef0b394Smrg fi 1749ef0b394Smrg} # func_dirname may be replaced by extended shell implementation 1759ef0b394Smrg 1769ef0b394Smrg 1779ef0b394Smrg# func_basename file 1789ef0b394Smrgfunc_basename () 1799ef0b394Smrg{ 1809ef0b394Smrg func_basename_result=`$ECHO "${1}" | $SED "$basename"` 1819ef0b394Smrg} # func_basename may be replaced by extended shell implementation 1829ef0b394Smrg 1839ef0b394Smrg 184698f425bSmrg# func_dirname_and_basename file append nondir_replacement 185698f425bSmrg# perform func_basename and func_dirname in a single function 186698f425bSmrg# call: 187698f425bSmrg# dirname: Compute the dirname of FILE. If nonempty, 188698f425bSmrg# add APPEND to the result, otherwise set result 189698f425bSmrg# to NONDIR_REPLACEMENT. 190698f425bSmrg# value returned in "$func_dirname_result" 191698f425bSmrg# basename: Compute filename of FILE. 192698f425bSmrg# value retuned in "$func_basename_result" 193698f425bSmrg# Implementation must be kept synchronized with func_dirname 194698f425bSmrg# and func_basename. For efficiency, we do not delegate to 195698f425bSmrg# those functions but instead duplicate the functionality here. 196698f425bSmrgfunc_dirname_and_basename () 197698f425bSmrg{ 1989ef0b394Smrg # Extract subdirectory from the argument. 1999ef0b394Smrg func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` 2009ef0b394Smrg if test "X$func_dirname_result" = "X${1}"; then 2019ef0b394Smrg func_dirname_result="${3}" 2029ef0b394Smrg else 2039ef0b394Smrg func_dirname_result="$func_dirname_result${2}" 2049ef0b394Smrg fi 2059ef0b394Smrg func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` 2069ef0b394Smrg} # func_dirname_and_basename may be replaced by extended shell implementation 2079ef0b394Smrg 2089ef0b394Smrg 2099ef0b394Smrg# func_stripname prefix suffix name 2109ef0b394Smrg# strip PREFIX and SUFFIX off of NAME. 2119ef0b394Smrg# PREFIX and SUFFIX must not contain globbing or regex special 2129ef0b394Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading 2139ef0b394Smrg# dot (in which case that matches only a dot). 2149ef0b394Smrg# func_strip_suffix prefix name 2159ef0b394Smrgfunc_stripname () 2169ef0b394Smrg{ 2179ef0b394Smrg case ${2} in 2189ef0b394Smrg .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; 2199ef0b394Smrg *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; 2209ef0b394Smrg esac 2219ef0b394Smrg} # func_stripname may be replaced by extended shell implementation 2229ef0b394Smrg 2239ef0b394Smrg 2249ef0b394Smrg# These SED scripts presuppose an absolute path with a trailing slash. 2259ef0b394Smrgpathcar='s,^/\([^/]*\).*$,\1,' 2269ef0b394Smrgpathcdr='s,^/[^/]*,,' 2279ef0b394Smrgremovedotparts=':dotsl 2289ef0b394Smrg s@/\./@/@g 2299ef0b394Smrg t dotsl 2309ef0b394Smrg s,/\.$,/,' 2319ef0b394Smrgcollapseslashes='s@/\{1,\}@/@g' 2329ef0b394Smrgfinalslash='s,/*$,/,' 2339ef0b394Smrg 2349ef0b394Smrg# func_normal_abspath PATH 2359ef0b394Smrg# Remove doubled-up and trailing slashes, "." path components, 2369ef0b394Smrg# and cancel out any ".." path components in PATH after making 2379ef0b394Smrg# it an absolute path. 2389ef0b394Smrg# value returned in "$func_normal_abspath_result" 2399ef0b394Smrgfunc_normal_abspath () 2409ef0b394Smrg{ 2419ef0b394Smrg # Start from root dir and reassemble the path. 2429ef0b394Smrg func_normal_abspath_result= 2439ef0b394Smrg func_normal_abspath_tpath=$1 2449ef0b394Smrg func_normal_abspath_altnamespace= 2459ef0b394Smrg case $func_normal_abspath_tpath in 2469ef0b394Smrg "") 2479ef0b394Smrg # Empty path, that just means $cwd. 2489ef0b394Smrg func_stripname '' '/' "`pwd`" 2499ef0b394Smrg func_normal_abspath_result=$func_stripname_result 2509ef0b394Smrg return 2519ef0b394Smrg ;; 2529ef0b394Smrg # The next three entries are used to spot a run of precisely 2539ef0b394Smrg # two leading slashes without using negated character classes; 2549ef0b394Smrg # we take advantage of case's first-match behaviour. 2559ef0b394Smrg ///*) 2569ef0b394Smrg # Unusual form of absolute path, do nothing. 2579ef0b394Smrg ;; 2589ef0b394Smrg //*) 2599ef0b394Smrg # Not necessarily an ordinary path; POSIX reserves leading '//' 2609ef0b394Smrg # and for example Cygwin uses it to access remote file shares 2619ef0b394Smrg # over CIFS/SMB, so we conserve a leading double slash if found. 2629ef0b394Smrg func_normal_abspath_altnamespace=/ 2639ef0b394Smrg ;; 2649ef0b394Smrg /*) 2659ef0b394Smrg # Absolute path, do nothing. 2669ef0b394Smrg ;; 2679ef0b394Smrg *) 2689ef0b394Smrg # Relative path, prepend $cwd. 2699ef0b394Smrg func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath 2709ef0b394Smrg ;; 2719ef0b394Smrg esac 2729ef0b394Smrg # Cancel out all the simple stuff to save iterations. We also want 2739ef0b394Smrg # the path to end with a slash for ease of parsing, so make sure 2749ef0b394Smrg # there is one (and only one) here. 2759ef0b394Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2769ef0b394Smrg -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` 2779ef0b394Smrg while :; do 2789ef0b394Smrg # Processed it all yet? 2799ef0b394Smrg if test "$func_normal_abspath_tpath" = / ; then 2809ef0b394Smrg # If we ascended to the root using ".." the result may be empty now. 2819ef0b394Smrg if test -z "$func_normal_abspath_result" ; then 2829ef0b394Smrg func_normal_abspath_result=/ 2839ef0b394Smrg fi 2849ef0b394Smrg break 2859ef0b394Smrg fi 2869ef0b394Smrg func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2879ef0b394Smrg -e "$pathcar"` 2889ef0b394Smrg func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ 2899ef0b394Smrg -e "$pathcdr"` 2909ef0b394Smrg # Figure out what to do with it 2919ef0b394Smrg case $func_normal_abspath_tcomponent in 2929ef0b394Smrg "") 2939ef0b394Smrg # Trailing empty path component, ignore it. 2949ef0b394Smrg ;; 2959ef0b394Smrg ..) 2969ef0b394Smrg # Parent dir; strip last assembled component from result. 2979ef0b394Smrg func_dirname "$func_normal_abspath_result" 2989ef0b394Smrg func_normal_abspath_result=$func_dirname_result 2999ef0b394Smrg ;; 3009ef0b394Smrg *) 3019ef0b394Smrg # Actual path component, append it. 3029ef0b394Smrg func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent 3039ef0b394Smrg ;; 3049ef0b394Smrg esac 3059ef0b394Smrg done 3069ef0b394Smrg # Restore leading double-slash if one was found on entry. 3079ef0b394Smrg func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result 308698f425bSmrg} 309266e564dSmrg 3109ef0b394Smrg# func_relative_path SRCDIR DSTDIR 3119ef0b394Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing 3129ef0b394Smrg# slash if non-empty, suitable for immediately appending a filename 3139ef0b394Smrg# without needing to append a separator. 3149ef0b394Smrg# value returned in "$func_relative_path_result" 3159ef0b394Smrgfunc_relative_path () 3169ef0b394Smrg{ 3179ef0b394Smrg func_relative_path_result= 3189ef0b394Smrg func_normal_abspath "$1" 3199ef0b394Smrg func_relative_path_tlibdir=$func_normal_abspath_result 3209ef0b394Smrg func_normal_abspath "$2" 3219ef0b394Smrg func_relative_path_tbindir=$func_normal_abspath_result 3229ef0b394Smrg 3239ef0b394Smrg # Ascend the tree starting from libdir 3249ef0b394Smrg while :; do 3259ef0b394Smrg # check if we have found a prefix of bindir 3269ef0b394Smrg case $func_relative_path_tbindir in 3279ef0b394Smrg $func_relative_path_tlibdir) 3289ef0b394Smrg # found an exact match 3299ef0b394Smrg func_relative_path_tcancelled= 3309ef0b394Smrg break 3319ef0b394Smrg ;; 3329ef0b394Smrg $func_relative_path_tlibdir*) 3339ef0b394Smrg # found a matching prefix 3349ef0b394Smrg func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" 3359ef0b394Smrg func_relative_path_tcancelled=$func_stripname_result 3369ef0b394Smrg if test -z "$func_relative_path_result"; then 3379ef0b394Smrg func_relative_path_result=. 3389ef0b394Smrg fi 3399ef0b394Smrg break 3409ef0b394Smrg ;; 3419ef0b394Smrg *) 3429ef0b394Smrg func_dirname $func_relative_path_tlibdir 3439ef0b394Smrg func_relative_path_tlibdir=${func_dirname_result} 3449ef0b394Smrg if test "x$func_relative_path_tlibdir" = x ; then 3459ef0b394Smrg # Have to descend all the way to the root! 3469ef0b394Smrg func_relative_path_result=../$func_relative_path_result 3479ef0b394Smrg func_relative_path_tcancelled=$func_relative_path_tbindir 3489ef0b394Smrg break 3499ef0b394Smrg fi 3509ef0b394Smrg func_relative_path_result=../$func_relative_path_result 3519ef0b394Smrg ;; 3529ef0b394Smrg esac 3539ef0b394Smrg done 354698f425bSmrg 3559ef0b394Smrg # Now calculate path; take care to avoid doubling-up slashes. 3569ef0b394Smrg func_stripname '' '/' "$func_relative_path_result" 3579ef0b394Smrg func_relative_path_result=$func_stripname_result 3589ef0b394Smrg func_stripname '/' '/' "$func_relative_path_tcancelled" 3599ef0b394Smrg if test "x$func_stripname_result" != x ; then 3609ef0b394Smrg func_relative_path_result=${func_relative_path_result}/${func_stripname_result} 3619ef0b394Smrg fi 3629ef0b394Smrg 3639ef0b394Smrg # Normalisation. If bindir is libdir, return empty string, 3649ef0b394Smrg # else relative path ending with a slash; either way, target 3659ef0b394Smrg # file name can be directly appended. 3669ef0b394Smrg if test ! -z "$func_relative_path_result"; then 3679ef0b394Smrg func_stripname './' '' "$func_relative_path_result/" 3689ef0b394Smrg func_relative_path_result=$func_stripname_result 3699ef0b394Smrg fi 3709ef0b394Smrg} 371698f425bSmrg 372698f425bSmrg# The name of this program: 373698f425bSmrgfunc_dirname_and_basename "$progpath" 374698f425bSmrgprogname=$func_basename_result 375698f425bSmrg 376698f425bSmrg# Make sure we have an absolute path for reexecution: 377698f425bSmrgcase $progpath in 378698f425bSmrg [\\/]*|[A-Za-z]:\\*) ;; 379698f425bSmrg *[\\/]*) 380698f425bSmrg progdir=$func_dirname_result 381698f425bSmrg progdir=`cd "$progdir" && pwd` 382698f425bSmrg progpath="$progdir/$progname" 383698f425bSmrg ;; 384698f425bSmrg *) 385698f425bSmrg save_IFS="$IFS" 386fb5e8d76Smrg IFS=${PATH_SEPARATOR-:} 387698f425bSmrg for progdir in $PATH; do 388698f425bSmrg IFS="$save_IFS" 389698f425bSmrg test -x "$progdir/$progname" && break 390698f425bSmrg done 391698f425bSmrg IFS="$save_IFS" 392698f425bSmrg test -n "$progdir" || progdir=`pwd` 393698f425bSmrg progpath="$progdir/$progname" 394698f425bSmrg ;; 395698f425bSmrgesac 396698f425bSmrg 397698f425bSmrg# Sed substitution that helps us do robust quoting. It backslashifies 398698f425bSmrg# metacharacters that are still active within double-quoted strings. 399698f425bSmrgXsed="${SED}"' -e 1s/^X//' 400698f425bSmrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g' 401698f425bSmrg 402698f425bSmrg# Same as above, but do not quote variable references. 403698f425bSmrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g' 404698f425bSmrg 4059ef0b394Smrg# Sed substitution that turns a string into a regex matching for the 4069ef0b394Smrg# string literally. 4079ef0b394Smrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g' 4089ef0b394Smrg 4099ef0b394Smrg# Sed substitution that converts a w32 file name or path 4109ef0b394Smrg# which contains forward slashes, into one that contains 4119ef0b394Smrg# (escaped) backslashes. A very naive implementation. 4129ef0b394Smrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' 4139ef0b394Smrg 414698f425bSmrg# Re-`\' parameter expansions in output of double_quote_subst that were 415698f425bSmrg# `\'-ed in input to the same. If an odd number of `\' preceded a '$' 416698f425bSmrg# in input to double_quote_subst, that '$' was protected from expansion. 417698f425bSmrg# Since each input `\' is now two `\'s, look for any number of runs of 418698f425bSmrg# four `\'s followed by two `\'s and then a '$'. `\' that '$'. 419698f425bSmrgbs='\\' 420698f425bSmrgbs2='\\\\' 421698f425bSmrgbs4='\\\\\\\\' 422698f425bSmrgdollar='\$' 423698f425bSmrgsed_double_backslash="\ 424698f425bSmrg s/$bs4/&\\ 425698f425bSmrg/g 426698f425bSmrg s/^$bs2$dollar/$bs&/ 427698f425bSmrg s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g 428698f425bSmrg s/\n//g" 429698f425bSmrg 430698f425bSmrg# Standard options: 431698f425bSmrgopt_dry_run=false 432698f425bSmrgopt_help=false 433698f425bSmrgopt_quiet=false 434698f425bSmrgopt_verbose=false 435698f425bSmrgopt_warning=: 436698f425bSmrg 437698f425bSmrg# func_echo arg... 438698f425bSmrg# Echo program name prefixed message, along with the current mode 439698f425bSmrg# name if it has been set yet. 440698f425bSmrgfunc_echo () 441698f425bSmrg{ 4429ef0b394Smrg $ECHO "$progname: ${opt_mode+$opt_mode: }$*" 443698f425bSmrg} 444698f425bSmrg 445698f425bSmrg# func_verbose arg... 446698f425bSmrg# Echo program name prefixed message in verbose mode only. 447698f425bSmrgfunc_verbose () 448698f425bSmrg{ 449698f425bSmrg $opt_verbose && func_echo ${1+"$@"} 450698f425bSmrg 451698f425bSmrg # A bug in bash halts the script if the last line of a function 452698f425bSmrg # fails when set -e is in force, so we need another command to 453698f425bSmrg # work around that: 454698f425bSmrg : 455698f425bSmrg} 456698f425bSmrg 4579ef0b394Smrg# func_echo_all arg... 4589ef0b394Smrg# Invoke $ECHO with all args, space-separated. 4599ef0b394Smrgfunc_echo_all () 4609ef0b394Smrg{ 4619ef0b394Smrg $ECHO "$*" 4629ef0b394Smrg} 4639ef0b394Smrg 464698f425bSmrg# func_error arg... 465698f425bSmrg# Echo program name prefixed message to standard error. 466698f425bSmrgfunc_error () 467698f425bSmrg{ 4689ef0b394Smrg $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 469698f425bSmrg} 470698f425bSmrg 471698f425bSmrg# func_warning arg... 472698f425bSmrg# Echo program name prefixed warning message to standard error. 473698f425bSmrgfunc_warning () 474698f425bSmrg{ 4759ef0b394Smrg $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 476698f425bSmrg 477698f425bSmrg # bash bug again: 478698f425bSmrg : 479698f425bSmrg} 480698f425bSmrg 481698f425bSmrg# func_fatal_error arg... 482698f425bSmrg# Echo program name prefixed message to standard error, and exit. 483698f425bSmrgfunc_fatal_error () 484698f425bSmrg{ 485698f425bSmrg func_error ${1+"$@"} 486698f425bSmrg exit $EXIT_FAILURE 487698f425bSmrg} 488698f425bSmrg 489698f425bSmrg# func_fatal_help arg... 490698f425bSmrg# Echo program name prefixed message to standard error, followed by 491698f425bSmrg# a help hint, and exit. 492698f425bSmrgfunc_fatal_help () 493698f425bSmrg{ 494698f425bSmrg func_error ${1+"$@"} 495698f425bSmrg func_fatal_error "$help" 496698f425bSmrg} 497698f425bSmrghelp="Try \`$progname --help' for more information." ## default 498698f425bSmrg 499698f425bSmrg 500698f425bSmrg# func_grep expression filename 501698f425bSmrg# Check whether EXPRESSION matches any line of FILENAME, without output. 502698f425bSmrgfunc_grep () 503698f425bSmrg{ 504698f425bSmrg $GREP "$1" "$2" >/dev/null 2>&1 505698f425bSmrg} 506698f425bSmrg 507698f425bSmrg 508698f425bSmrg# func_mkdir_p directory-path 509698f425bSmrg# Make sure the entire path to DIRECTORY-PATH is available. 510698f425bSmrgfunc_mkdir_p () 511698f425bSmrg{ 512698f425bSmrg my_directory_path="$1" 513698f425bSmrg my_dir_list= 514698f425bSmrg 515698f425bSmrg if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then 516698f425bSmrg 517698f425bSmrg # Protect directory names starting with `-' 518698f425bSmrg case $my_directory_path in 519698f425bSmrg -*) my_directory_path="./$my_directory_path" ;; 520698f425bSmrg esac 521698f425bSmrg 522698f425bSmrg # While some portion of DIR does not yet exist... 523698f425bSmrg while test ! -d "$my_directory_path"; do 524698f425bSmrg # ...make a list in topmost first order. Use a colon delimited 525698f425bSmrg # list incase some portion of path contains whitespace. 526698f425bSmrg my_dir_list="$my_directory_path:$my_dir_list" 527698f425bSmrg 528698f425bSmrg # If the last portion added has no slash in it, the list is done 529698f425bSmrg case $my_directory_path in */*) ;; *) break ;; esac 530698f425bSmrg 531698f425bSmrg # ...otherwise throw away the child directory and loop 5329ef0b394Smrg my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` 533698f425bSmrg done 5349ef0b394Smrg my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` 535698f425bSmrg 536698f425bSmrg save_mkdir_p_IFS="$IFS"; IFS=':' 537698f425bSmrg for my_dir in $my_dir_list; do 538698f425bSmrg IFS="$save_mkdir_p_IFS" 539698f425bSmrg # mkdir can fail with a `File exist' error if two processes 540698f425bSmrg # try to create one of the directories concurrently. Don't 541698f425bSmrg # stop in that case! 542698f425bSmrg $MKDIR "$my_dir" 2>/dev/null || : 543698f425bSmrg done 544698f425bSmrg IFS="$save_mkdir_p_IFS" 545698f425bSmrg 546698f425bSmrg # Bail out if we (or some other process) failed to create a directory. 547698f425bSmrg test -d "$my_directory_path" || \ 548698f425bSmrg func_fatal_error "Failed to create \`$1'" 549698f425bSmrg fi 550698f425bSmrg} 551266e564dSmrg 552266e564dSmrg 553266e564dSmrg# func_mktempdir [string] 554266e564dSmrg# Make a temporary directory that won't clash with other running 555266e564dSmrg# libtool processes, and avoids race conditions if possible. If 556266e564dSmrg# given, STRING is the basename for that directory. 557266e564dSmrgfunc_mktempdir () 558266e564dSmrg{ 559266e564dSmrg my_template="${TMPDIR-/tmp}/${1-$progname}" 560266e564dSmrg 561698f425bSmrg if test "$opt_dry_run" = ":"; then 562266e564dSmrg # Return a directory name, but don't create it in dry-run mode 563266e564dSmrg my_tmpdir="${my_template}-$$" 564266e564dSmrg else 565266e564dSmrg 566266e564dSmrg # If mktemp works, use that first and foremost 567266e564dSmrg my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` 568266e564dSmrg 569266e564dSmrg if test ! -d "$my_tmpdir"; then 570698f425bSmrg # Failing that, at least try and use $RANDOM to avoid a race 571698f425bSmrg my_tmpdir="${my_template}-${RANDOM-0}$$" 572266e564dSmrg 573698f425bSmrg save_mktempdir_umask=`umask` 574698f425bSmrg umask 0077 575698f425bSmrg $MKDIR "$my_tmpdir" 576698f425bSmrg umask $save_mktempdir_umask 577266e564dSmrg fi 578266e564dSmrg 579266e564dSmrg # If we're not in dry-run mode, bomb out on failure 580698f425bSmrg test -d "$my_tmpdir" || \ 581698f425bSmrg func_fatal_error "cannot create temporary directory \`$my_tmpdir'" 582266e564dSmrg fi 583266e564dSmrg 5849ef0b394Smrg $ECHO "$my_tmpdir" 585266e564dSmrg} 586266e564dSmrg 587266e564dSmrg 588698f425bSmrg# func_quote_for_eval arg 589698f425bSmrg# Aesthetically quote ARG to be evaled later. 590698f425bSmrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT 591698f425bSmrg# is double-quoted, suitable for a subsequent eval, whereas 592698f425bSmrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters 593698f425bSmrg# which are still active within double quotes backslashified. 594698f425bSmrgfunc_quote_for_eval () 595266e564dSmrg{ 596698f425bSmrg case $1 in 597698f425bSmrg *[\\\`\"\$]*) 5989ef0b394Smrg func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; 599698f425bSmrg *) 600698f425bSmrg func_quote_for_eval_unquoted_result="$1" ;; 601698f425bSmrg esac 602698f425bSmrg 603698f425bSmrg case $func_quote_for_eval_unquoted_result in 604698f425bSmrg # Double-quote args containing shell metacharacters to delay 605698f425bSmrg # word splitting, command substitution and and variable 606698f425bSmrg # expansion for a subsequent eval. 607698f425bSmrg # Many Bourne shells cannot handle close brackets correctly 608698f425bSmrg # in scan sets, so we specify it separately. 609698f425bSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 610698f425bSmrg func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" 611698f425bSmrg ;; 612698f425bSmrg *) 613698f425bSmrg func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" 614266e564dSmrg esac 615266e564dSmrg} 616266e564dSmrg 617266e564dSmrg 618698f425bSmrg# func_quote_for_expand arg 619698f425bSmrg# Aesthetically quote ARG to be evaled later; same as above, 620698f425bSmrg# but do not quote variable references. 621698f425bSmrgfunc_quote_for_expand () 622266e564dSmrg{ 623698f425bSmrg case $1 in 624698f425bSmrg *[\\\`\"]*) 6259ef0b394Smrg my_arg=`$ECHO "$1" | $SED \ 626698f425bSmrg -e "$double_quote_subst" -e "$sed_double_backslash"` ;; 627266e564dSmrg *) 628698f425bSmrg my_arg="$1" ;; 629698f425bSmrg esac 630698f425bSmrg 631698f425bSmrg case $my_arg in 632698f425bSmrg # Double-quote args containing shell metacharacters to delay 633698f425bSmrg # word splitting and command substitution for a subsequent eval. 634698f425bSmrg # Many Bourne shells cannot handle close brackets correctly 635698f425bSmrg # in scan sets, so we specify it separately. 636698f425bSmrg *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") 637698f425bSmrg my_arg="\"$my_arg\"" 638698f425bSmrg ;; 639698f425bSmrg esac 640698f425bSmrg 641698f425bSmrg func_quote_for_expand_result="$my_arg" 642266e564dSmrg} 643266e564dSmrg 644266e564dSmrg 645698f425bSmrg# func_show_eval cmd [fail_exp] 646698f425bSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 647698f425bSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 648698f425bSmrg# is given, then evaluate it. 649698f425bSmrgfunc_show_eval () 650266e564dSmrg{ 651698f425bSmrg my_cmd="$1" 652698f425bSmrg my_fail_exp="${2-:}" 653266e564dSmrg 654698f425bSmrg ${opt_silent-false} || { 655698f425bSmrg func_quote_for_expand "$my_cmd" 656698f425bSmrg eval "func_echo $func_quote_for_expand_result" 657698f425bSmrg } 658698f425bSmrg 659698f425bSmrg if ${opt_dry_run-false}; then :; else 660698f425bSmrg eval "$my_cmd" 661698f425bSmrg my_status=$? 662698f425bSmrg if test "$my_status" -eq 0; then :; else 663698f425bSmrg eval "(exit $my_status); $my_fail_exp" 664698f425bSmrg fi 665266e564dSmrg fi 666266e564dSmrg} 667266e564dSmrg 668698f425bSmrg 669698f425bSmrg# func_show_eval_locale cmd [fail_exp] 670698f425bSmrg# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is 671698f425bSmrg# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP 672698f425bSmrg# is given, then evaluate it. Use the saved locale for evaluation. 673698f425bSmrgfunc_show_eval_locale () 674266e564dSmrg{ 675698f425bSmrg my_cmd="$1" 676698f425bSmrg my_fail_exp="${2-:}" 677698f425bSmrg 678698f425bSmrg ${opt_silent-false} || { 679698f425bSmrg func_quote_for_expand "$my_cmd" 680698f425bSmrg eval "func_echo $func_quote_for_expand_result" 681698f425bSmrg } 682698f425bSmrg 683698f425bSmrg if ${opt_dry_run-false}; then :; else 684698f425bSmrg eval "$lt_user_locale 685698f425bSmrg $my_cmd" 686698f425bSmrg my_status=$? 687698f425bSmrg eval "$lt_safe_locale" 688698f425bSmrg if test "$my_status" -eq 0; then :; else 689698f425bSmrg eval "(exit $my_status); $my_fail_exp" 690698f425bSmrg fi 691266e564dSmrg fi 692698f425bSmrg} 693266e564dSmrg 6949ef0b394Smrg# func_tr_sh 6959ef0b394Smrg# Turn $1 into a string suitable for a shell variable name. 6969ef0b394Smrg# Result is stored in $func_tr_sh_result. All characters 6979ef0b394Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further, 6989ef0b394Smrg# if $1 begins with a digit, a '_' is prepended as well. 6999ef0b394Smrgfunc_tr_sh () 7009ef0b394Smrg{ 7019ef0b394Smrg case $1 in 7029ef0b394Smrg [0-9]* | *[!a-zA-Z0-9_]*) 7039ef0b394Smrg func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` 7049ef0b394Smrg ;; 7059ef0b394Smrg * ) 7069ef0b394Smrg func_tr_sh_result=$1 7079ef0b394Smrg ;; 7089ef0b394Smrg esac 7099ef0b394Smrg} 710698f425bSmrg 711698f425bSmrg 712698f425bSmrg# func_version 713698f425bSmrg# Echo version message to standard output and exit. 714698f425bSmrgfunc_version () 715698f425bSmrg{ 7169ef0b394Smrg $opt_debug 7179ef0b394Smrg 7189ef0b394Smrg $SED -n '/(C)/!b go 7199ef0b394Smrg :more 7209ef0b394Smrg /\./!{ 7219ef0b394Smrg N 7229ef0b394Smrg s/\n# / / 7239ef0b394Smrg b more 7249ef0b394Smrg } 7259ef0b394Smrg :go 7269ef0b394Smrg /^# '$PROGRAM' (GNU /,/# warranty; / { 727698f425bSmrg s/^# // 728698f425bSmrg s/^# *$// 729698f425bSmrg s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ 730698f425bSmrg p 731698f425bSmrg }' < "$progpath" 732698f425bSmrg exit $? 733266e564dSmrg} 734266e564dSmrg 735698f425bSmrg# func_usage 736698f425bSmrg# Echo short help message to standard output and exit. 737698f425bSmrgfunc_usage () 738698f425bSmrg{ 7399ef0b394Smrg $opt_debug 7409ef0b394Smrg 7419ef0b394Smrg $SED -n '/^# Usage:/,/^# *.*--help/ { 742698f425bSmrg s/^# // 743698f425bSmrg s/^# *$// 744698f425bSmrg s/\$progname/'$progname'/ 745698f425bSmrg p 746698f425bSmrg }' < "$progpath" 7479ef0b394Smrg echo 748698f425bSmrg $ECHO "run \`$progname --help | more' for full usage" 749698f425bSmrg exit $? 750698f425bSmrg} 751266e564dSmrg 7529ef0b394Smrg# func_help [NOEXIT] 7539ef0b394Smrg# Echo long help message to standard output and exit, 7549ef0b394Smrg# unless 'noexit' is passed as argument. 755698f425bSmrgfunc_help () 756698f425bSmrg{ 7579ef0b394Smrg $opt_debug 7589ef0b394Smrg 759698f425bSmrg $SED -n '/^# Usage:/,/# Report bugs to/ { 7609ef0b394Smrg :print 761698f425bSmrg s/^# // 762698f425bSmrg s/^# *$// 763698f425bSmrg s*\$progname*'$progname'* 764698f425bSmrg s*\$host*'"$host"'* 765698f425bSmrg s*\$SHELL*'"$SHELL"'* 766698f425bSmrg s*\$LTCC*'"$LTCC"'* 767698f425bSmrg s*\$LTCFLAGS*'"$LTCFLAGS"'* 768698f425bSmrg s*\$LD*'"$LD"'* 769698f425bSmrg s/\$with_gnu_ld/'"$with_gnu_ld"'/ 770fb5e8d76Smrg s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ 771fb5e8d76Smrg s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ 772698f425bSmrg p 7739ef0b394Smrg d 7749ef0b394Smrg } 7759ef0b394Smrg /^# .* home page:/b print 7769ef0b394Smrg /^# General help using/b print 7779ef0b394Smrg ' < "$progpath" 7789ef0b394Smrg ret=$? 7799ef0b394Smrg if test -z "$1"; then 7809ef0b394Smrg exit $ret 7819ef0b394Smrg fi 782698f425bSmrg} 783266e564dSmrg 784698f425bSmrg# func_missing_arg argname 785698f425bSmrg# Echo program name prefixed message to standard error and set global 786698f425bSmrg# exit_cmd. 787698f425bSmrgfunc_missing_arg () 788698f425bSmrg{ 7899ef0b394Smrg $opt_debug 7909ef0b394Smrg 7919ef0b394Smrg func_error "missing argument for $1." 792698f425bSmrg exit_cmd=exit 793698f425bSmrg} 794698f425bSmrg 795698f425bSmrg 7969ef0b394Smrg# func_split_short_opt shortopt 7979ef0b394Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell 7989ef0b394Smrg# variables after splitting SHORTOPT after the 2nd character. 7999ef0b394Smrgfunc_split_short_opt () 8009ef0b394Smrg{ 8019ef0b394Smrg my_sed_short_opt='1s/^\(..\).*$/\1/;q' 8029ef0b394Smrg my_sed_short_rest='1s/^..\(.*\)$/\1/;q' 803698f425bSmrg 8049ef0b394Smrg func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` 8059ef0b394Smrg func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` 8069ef0b394Smrg} # func_split_short_opt may be replaced by extended shell implementation 8079ef0b394Smrg 8089ef0b394Smrg 8099ef0b394Smrg# func_split_long_opt longopt 8109ef0b394Smrg# Set func_split_long_opt_name and func_split_long_opt_arg shell 8119ef0b394Smrg# variables after splitting LONGOPT at the `=' sign. 8129ef0b394Smrgfunc_split_long_opt () 8139ef0b394Smrg{ 8149ef0b394Smrg my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' 8159ef0b394Smrg my_sed_long_arg='1s/^--[^=]*=//' 8169ef0b394Smrg 8179ef0b394Smrg func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` 8189ef0b394Smrg func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` 8199ef0b394Smrg} # func_split_long_opt may be replaced by extended shell implementation 8209ef0b394Smrg 8219ef0b394Smrgexit_cmd=: 822698f425bSmrg 823698f425bSmrg 824698f425bSmrg 825266e564dSmrg 826266e564dSmrg 827698f425bSmrgmagic="%%%MAGIC variable%%%" 828698f425bSmrgmagic_exe="%%%MAGIC EXE variable%%%" 829266e564dSmrg 830698f425bSmrg# Global variables. 831698f425bSmrgnonopt= 832698f425bSmrgpreserve_args= 833698f425bSmrglo2o="s/\\.lo\$/.${objext}/" 834698f425bSmrgo2lo="s/\\.${objext}\$/.lo/" 835698f425bSmrgextracted_archives= 836698f425bSmrgextracted_serial=0 837266e564dSmrg 838698f425bSmrg# If this variable is set in any of the actions, the command in it 839698f425bSmrg# will be execed at the end. This prevents here-documents from being 840698f425bSmrg# left over by shells. 841698f425bSmrgexec_cmd= 842698f425bSmrg 8439ef0b394Smrg# func_append var value 8449ef0b394Smrg# Append VALUE to the end of shell variable VAR. 8459ef0b394Smrgfunc_append () 8469ef0b394Smrg{ 8479ef0b394Smrg eval "${1}=\$${1}\${2}" 8489ef0b394Smrg} # func_append may be replaced by extended shell implementation 8499ef0b394Smrg 8509ef0b394Smrg# func_append_quoted var value 8519ef0b394Smrg# Quote VALUE and append to the end of shell variable VAR, separated 8529ef0b394Smrg# by a space. 8539ef0b394Smrgfunc_append_quoted () 8549ef0b394Smrg{ 8559ef0b394Smrg func_quote_for_eval "${2}" 8569ef0b394Smrg eval "${1}=\$${1}\\ \$func_quote_for_eval_result" 8579ef0b394Smrg} # func_append_quoted may be replaced by extended shell implementation 8589ef0b394Smrg 8599ef0b394Smrg 8609ef0b394Smrg# func_arith arithmetic-term... 8619ef0b394Smrgfunc_arith () 8629ef0b394Smrg{ 8639ef0b394Smrg func_arith_result=`expr "${@}"` 8649ef0b394Smrg} # func_arith may be replaced by extended shell implementation 8659ef0b394Smrg 8669ef0b394Smrg 8679ef0b394Smrg# func_len string 8689ef0b394Smrg# STRING may not start with a hyphen. 8699ef0b394Smrgfunc_len () 8709ef0b394Smrg{ 8719ef0b394Smrg func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` 8729ef0b394Smrg} # func_len may be replaced by extended shell implementation 8739ef0b394Smrg 8749ef0b394Smrg 8759ef0b394Smrg# func_lo2o object 8769ef0b394Smrgfunc_lo2o () 8779ef0b394Smrg{ 8789ef0b394Smrg func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` 8799ef0b394Smrg} # func_lo2o may be replaced by extended shell implementation 8809ef0b394Smrg 8819ef0b394Smrg 8829ef0b394Smrg# func_xform libobj-or-source 8839ef0b394Smrgfunc_xform () 8849ef0b394Smrg{ 8859ef0b394Smrg func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` 8869ef0b394Smrg} # func_xform may be replaced by extended shell implementation 8879ef0b394Smrg 8889ef0b394Smrg 889698f425bSmrg# func_fatal_configuration arg... 890698f425bSmrg# Echo program name prefixed message to standard error, followed by 891698f425bSmrg# a configuration failure hint, and exit. 892698f425bSmrgfunc_fatal_configuration () 893698f425bSmrg{ 894698f425bSmrg func_error ${1+"$@"} 895698f425bSmrg func_error "See the $PACKAGE documentation for more information." 896698f425bSmrg func_fatal_error "Fatal configuration error." 897698f425bSmrg} 898266e564dSmrg 899c5629e66Smrg 900698f425bSmrg# func_config 901698f425bSmrg# Display the configuration for all the tags in this script. 902698f425bSmrgfunc_config () 903698f425bSmrg{ 904698f425bSmrg re_begincf='^# ### BEGIN LIBTOOL' 905698f425bSmrg re_endcf='^# ### END LIBTOOL' 906698f425bSmrg 907698f425bSmrg # Default configuration. 908698f425bSmrg $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" 909266e564dSmrg 910266e564dSmrg # Now print the configurations for the tags. 911266e564dSmrg for tagname in $taglist; do 912698f425bSmrg $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" 913266e564dSmrg done 914266e564dSmrg 915698f425bSmrg exit $? 916698f425bSmrg} 917266e564dSmrg 918698f425bSmrg# func_features 919698f425bSmrg# Display the features supported by this script. 920698f425bSmrgfunc_features () 921698f425bSmrg{ 9229ef0b394Smrg echo "host: $host" 923266e564dSmrg if test "$build_libtool_libs" = yes; then 9249ef0b394Smrg echo "enable shared libraries" 925266e564dSmrg else 9269ef0b394Smrg echo "disable shared libraries" 927266e564dSmrg fi 928266e564dSmrg if test "$build_old_libs" = yes; then 9299ef0b394Smrg echo "enable static libraries" 930266e564dSmrg else 9319ef0b394Smrg echo "disable static libraries" 932266e564dSmrg fi 933698f425bSmrg 934266e564dSmrg exit $? 935698f425bSmrg} 936266e564dSmrg 937698f425bSmrg# func_enable_tag tagname 938698f425bSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or 939698f425bSmrg# enable the TAGNAME tag. We also add TAGNAME to the global $taglist 940698f425bSmrg# variable here. 941698f425bSmrgfunc_enable_tag () 942698f425bSmrg{ 943698f425bSmrg # Global variable: 944698f425bSmrg tagname="$1" 945266e564dSmrg 946698f425bSmrg re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" 947698f425bSmrg re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" 948698f425bSmrg sed_extractcf="/$re_begincf/,/$re_endcf/p" 949266e564dSmrg 950698f425bSmrg # Validate tagname. 951698f425bSmrg case $tagname in 952698f425bSmrg *[!-_A-Za-z0-9,/]*) 953698f425bSmrg func_fatal_error "invalid tag name: $tagname" 954698f425bSmrg ;; 955698f425bSmrg esac 956266e564dSmrg 957698f425bSmrg # Don't test for the "default" C tag, as we know it's 958698f425bSmrg # there but not specially marked. 959698f425bSmrg case $tagname in 960698f425bSmrg CC) ;; 961698f425bSmrg *) 962698f425bSmrg if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then 963698f425bSmrg taglist="$taglist $tagname" 964698f425bSmrg 965698f425bSmrg # Evaluate the configuration. Be careful to quote the path 966698f425bSmrg # and the sed script, to avoid splitting on whitespace, but 967698f425bSmrg # also don't use non-portable quotes within backquotes within 968698f425bSmrg # quotes we have to do it in 2 steps: 969698f425bSmrg extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` 970698f425bSmrg eval "$extractedcf" 971698f425bSmrg else 972698f425bSmrg func_error "ignoring unknown tag $tagname" 973698f425bSmrg fi 974698f425bSmrg ;; 975698f425bSmrg esac 976698f425bSmrg} 977698f425bSmrg 9789ef0b394Smrg# func_check_version_match 9799ef0b394Smrg# Ensure that we are using m4 macros, and libtool script from the same 9809ef0b394Smrg# release of libtool. 9819ef0b394Smrgfunc_check_version_match () 982698f425bSmrg{ 9839ef0b394Smrg if test "$package_revision" != "$macro_revision"; then 9849ef0b394Smrg if test "$VERSION" != "$macro_version"; then 9859ef0b394Smrg if test -z "$macro_version"; then 9869ef0b394Smrg cat >&2 <<_LT_EOF 9879ef0b394Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 9889ef0b394Smrg$progname: definition of this LT_INIT comes from an older release. 9899ef0b394Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 9909ef0b394Smrg$progname: and run autoconf again. 9919ef0b394Smrg_LT_EOF 9929ef0b394Smrg else 9939ef0b394Smrg cat >&2 <<_LT_EOF 9949ef0b394Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, but the 9959ef0b394Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. 9969ef0b394Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION 9979ef0b394Smrg$progname: and run autoconf again. 9989ef0b394Smrg_LT_EOF 9999ef0b394Smrg fi 10009ef0b394Smrg else 10019ef0b394Smrg cat >&2 <<_LT_EOF 10029ef0b394Smrg$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, 10039ef0b394Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision. 10049ef0b394Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision 10059ef0b394Smrg$progname: of $PACKAGE $VERSION and run autoconf again. 10069ef0b394Smrg_LT_EOF 10079ef0b394Smrg fi 1008266e564dSmrg 10099ef0b394Smrg exit $EXIT_MISMATCH 10109ef0b394Smrg fi 10119ef0b394Smrg} 10129ef0b394Smrg 10139ef0b394Smrg 10149ef0b394Smrg# Shorthand for --mode=foo, only valid as the first argument 10159ef0b394Smrgcase $1 in 10169ef0b394Smrgclean|clea|cle|cl) 10179ef0b394Smrg shift; set dummy --mode clean ${1+"$@"}; shift 10189ef0b394Smrg ;; 10199ef0b394Smrgcompile|compil|compi|comp|com|co|c) 10209ef0b394Smrg shift; set dummy --mode compile ${1+"$@"}; shift 10219ef0b394Smrg ;; 10229ef0b394Smrgexecute|execut|execu|exec|exe|ex|e) 10239ef0b394Smrg shift; set dummy --mode execute ${1+"$@"}; shift 10249ef0b394Smrg ;; 10259ef0b394Smrgfinish|finis|fini|fin|fi|f) 10269ef0b394Smrg shift; set dummy --mode finish ${1+"$@"}; shift 10279ef0b394Smrg ;; 10289ef0b394Smrginstall|instal|insta|inst|ins|in|i) 10299ef0b394Smrg shift; set dummy --mode install ${1+"$@"}; shift 10309ef0b394Smrg ;; 10319ef0b394Smrglink|lin|li|l) 10329ef0b394Smrg shift; set dummy --mode link ${1+"$@"}; shift 10339ef0b394Smrg ;; 10349ef0b394Smrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) 10359ef0b394Smrg shift; set dummy --mode uninstall ${1+"$@"}; shift 10369ef0b394Smrg ;; 10379ef0b394Smrgesac 10389ef0b394Smrg 10399ef0b394Smrg 10409ef0b394Smrg 10419ef0b394Smrg# Option defaults: 10429ef0b394Smrgopt_debug=: 10439ef0b394Smrgopt_dry_run=false 10449ef0b394Smrgopt_config=false 10459ef0b394Smrgopt_preserve_dup_deps=false 10469ef0b394Smrgopt_features=false 10479ef0b394Smrgopt_finish=false 10489ef0b394Smrgopt_help=false 10499ef0b394Smrgopt_help_all=false 10509ef0b394Smrgopt_silent=: 1051fb5e8d76Smrgopt_warning=: 10529ef0b394Smrgopt_verbose=: 10539ef0b394Smrgopt_silent=false 10549ef0b394Smrgopt_verbose=false 1055266e564dSmrg 10569ef0b394Smrg 10579ef0b394Smrg# Parse options once, thoroughly. This comes as soon as possible in the 10589ef0b394Smrg# script to make things like `--version' happen as quickly as we can. 10599ef0b394Smrg{ 10609ef0b394Smrg # this just eases exit handling 10619ef0b394Smrg while test $# -gt 0; do 1062698f425bSmrg opt="$1" 1063698f425bSmrg shift 1064698f425bSmrg case $opt in 10659ef0b394Smrg --debug|-x) opt_debug='set -x' 1066698f425bSmrg func_echo "enabling shell trace mode" 1067698f425bSmrg $opt_debug 1068698f425bSmrg ;; 10699ef0b394Smrg --dry-run|--dryrun|-n) 10709ef0b394Smrg opt_dry_run=: 1071698f425bSmrg ;; 10729ef0b394Smrg --config) 10739ef0b394Smrg opt_config=: 10749ef0b394Smrgfunc_config 10759ef0b394Smrg ;; 10769ef0b394Smrg --dlopen|-dlopen) 10779ef0b394Smrg optarg="$1" 10789ef0b394Smrg opt_dlopen="${opt_dlopen+$opt_dlopen 10799ef0b394Smrg}$optarg" 1080698f425bSmrg shift 1081698f425bSmrg ;; 1082698f425bSmrg --preserve-dup-deps) 10839ef0b394Smrg opt_preserve_dup_deps=: 1084698f425bSmrg ;; 10859ef0b394Smrg --features) 10869ef0b394Smrg opt_features=: 10879ef0b394Smrgfunc_features 10889ef0b394Smrg ;; 10899ef0b394Smrg --finish) 10909ef0b394Smrg opt_finish=: 10919ef0b394Smrgset dummy --mode finish ${1+"$@"}; shift 10929ef0b394Smrg ;; 10939ef0b394Smrg --help) 10949ef0b394Smrg opt_help=: 10959ef0b394Smrg ;; 10969ef0b394Smrg --help-all) 10979ef0b394Smrg opt_help_all=: 10989ef0b394Smrgopt_help=': help-all' 10999ef0b394Smrg ;; 11009ef0b394Smrg --mode) 11019ef0b394Smrg test $# = 0 && func_missing_arg $opt && break 11029ef0b394Smrg optarg="$1" 11039ef0b394Smrg opt_mode="$optarg" 11049ef0b394Smrgcase $optarg in 11059ef0b394Smrg # Valid mode arguments: 11069ef0b394Smrg clean|compile|execute|finish|install|link|relink|uninstall) ;; 11079ef0b394Smrg 11089ef0b394Smrg # Catch anything else as an error 11099ef0b394Smrg *) func_error "invalid argument for $opt" 11109ef0b394Smrg exit_cmd=exit 11119ef0b394Smrg break 11129ef0b394Smrg ;; 11139ef0b394Smrgesac 11149ef0b394Smrg shift 11159ef0b394Smrg ;; 11169ef0b394Smrg --no-silent|--no-quiet) 1117698f425bSmrg opt_silent=false 1118fb5e8d76Smrgfunc_append preserve_args " $opt" 1119fb5e8d76Smrg ;; 1120fb5e8d76Smrg --no-warning|--no-warn) 1121fb5e8d76Smrg opt_warning=false 11229ef0b394Smrgfunc_append preserve_args " $opt" 1123698f425bSmrg ;; 11249ef0b394Smrg --no-verbose) 11259ef0b394Smrg opt_verbose=false 11269ef0b394Smrgfunc_append preserve_args " $opt" 11279ef0b394Smrg ;; 11289ef0b394Smrg --silent|--quiet) 11299ef0b394Smrg opt_silent=: 11309ef0b394Smrgfunc_append preserve_args " $opt" 11319ef0b394Smrg opt_verbose=false 11329ef0b394Smrg ;; 11339ef0b394Smrg --verbose|-v) 11349ef0b394Smrg opt_verbose=: 11359ef0b394Smrgfunc_append preserve_args " $opt" 11369ef0b394Smrgopt_silent=false 11379ef0b394Smrg ;; 11389ef0b394Smrg --tag) 11399ef0b394Smrg test $# = 0 && func_missing_arg $opt && break 11409ef0b394Smrg optarg="$1" 11419ef0b394Smrg opt_tag="$optarg" 11429ef0b394Smrgfunc_append preserve_args " $opt $optarg" 11439ef0b394Smrgfunc_enable_tag "$optarg" 1144698f425bSmrg shift 1145698f425bSmrg ;; 1146698f425bSmrg 11479ef0b394Smrg -\?|-h) func_usage ;; 11489ef0b394Smrg --help) func_help ;; 11499ef0b394Smrg --version) func_version ;; 11509ef0b394Smrg 1151698f425bSmrg # Separate optargs to long options: 11529ef0b394Smrg --*=*) 11539ef0b394Smrg func_split_long_opt "$opt" 11549ef0b394Smrg set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} 1155698f425bSmrg shift 1156698f425bSmrg ;; 1157698f425bSmrg 11589ef0b394Smrg # Separate non-argument short options: 11599ef0b394Smrg -\?*|-h*|-n*|-v*) 11609ef0b394Smrg func_split_short_opt "$opt" 11619ef0b394Smrg set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} 11629ef0b394Smrg shift 1163698f425bSmrg ;; 11649ef0b394Smrg 11659ef0b394Smrg --) break ;; 11669ef0b394Smrg -*) func_fatal_help "unrecognized option \`$opt'" ;; 11679ef0b394Smrg *) set dummy "$opt" ${1+"$@"}; shift; break ;; 1168698f425bSmrg esac 1169698f425bSmrg done 1170698f425bSmrg 11719ef0b394Smrg # Validate options: 11729ef0b394Smrg 11739ef0b394Smrg # save first non-option argument 11749ef0b394Smrg if test "$#" -gt 0; then 11759ef0b394Smrg nonopt="$opt" 11769ef0b394Smrg shift 11779ef0b394Smrg fi 11789ef0b394Smrg 11799ef0b394Smrg # preserve --debug 11809ef0b394Smrg test "$opt_debug" = : || func_append preserve_args " --debug" 1181698f425bSmrg 1182698f425bSmrg case $host in 1183698f425bSmrg *cygwin* | *mingw* | *pw32* | *cegcc*) 1184698f425bSmrg # don't eliminate duplications in $postdeps and $predeps 1185698f425bSmrg opt_duplicate_compiler_generated_deps=: 1186266e564dSmrg ;; 1187266e564dSmrg *) 11889ef0b394Smrg opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps 1189698f425bSmrg ;; 1190698f425bSmrg esac 1191266e564dSmrg 11929ef0b394Smrg $opt_help || { 11939ef0b394Smrg # Sanity checks first: 11949ef0b394Smrg func_check_version_match 1195698f425bSmrg 11969ef0b394Smrg if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then 11979ef0b394Smrg func_fatal_configuration "not configured to build any kind of library" 1198698f425bSmrg fi 1199698f425bSmrg 12009ef0b394Smrg # Darwin sucks 12019ef0b394Smrg eval std_shrext=\"$shrext_cmds\" 1202698f425bSmrg 12039ef0b394Smrg # Only execute mode is allowed to have -dlopen flags. 12049ef0b394Smrg if test -n "$opt_dlopen" && test "$opt_mode" != execute; then 12059ef0b394Smrg func_error "unrecognized option \`-dlopen'" 12069ef0b394Smrg $ECHO "$help" 1>&2 12079ef0b394Smrg exit $EXIT_FAILURE 12089ef0b394Smrg fi 1209698f425bSmrg 12109ef0b394Smrg # Change the help message to a mode-specific one. 12119ef0b394Smrg generic_help="$help" 12129ef0b394Smrg help="Try \`$progname --help --mode=$opt_mode' for more information." 12139ef0b394Smrg } 1214698f425bSmrg 1215698f425bSmrg 12169ef0b394Smrg # Bail if the options were screwed 12179ef0b394Smrg $exit_cmd $EXIT_FAILURE 12189ef0b394Smrg} 1219698f425bSmrg 1220266e564dSmrg 1221266e564dSmrg 1222266e564dSmrg 12239ef0b394Smrg## ----------- ## 12249ef0b394Smrg## Main. ## 12259ef0b394Smrg## ----------- ## 1226266e564dSmrg 1227698f425bSmrg# func_lalib_p file 1228698f425bSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1229698f425bSmrg# This function is only a basic sanity check; it will hardly flush out 1230698f425bSmrg# determined imposters. 1231698f425bSmrgfunc_lalib_p () 1232698f425bSmrg{ 1233698f425bSmrg test -f "$1" && 1234698f425bSmrg $SED -e 4q "$1" 2>/dev/null \ 1235698f425bSmrg | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 1236698f425bSmrg} 1237266e564dSmrg 1238698f425bSmrg# func_lalib_unsafe_p file 1239698f425bSmrg# True iff FILE is a libtool `.la' library or `.lo' object file. 1240698f425bSmrg# This function implements the same check as func_lalib_p without 1241698f425bSmrg# resorting to external programs. To this end, it redirects stdin and 1242698f425bSmrg# closes it afterwards, without saving the original file descriptor. 1243698f425bSmrg# As a safety measure, use it only where a negative result would be 1244698f425bSmrg# fatal anyway. Works if `file' does not exist. 1245698f425bSmrgfunc_lalib_unsafe_p () 1246698f425bSmrg{ 1247698f425bSmrg lalib_p=no 1248698f425bSmrg if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then 1249698f425bSmrg for lalib_p_l in 1 2 3 4 1250698f425bSmrg do 1251698f425bSmrg read lalib_p_line 1252698f425bSmrg case "$lalib_p_line" in 1253698f425bSmrg \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; 1254698f425bSmrg esac 1255698f425bSmrg done 1256698f425bSmrg exec 0<&5 5<&- 1257698f425bSmrg fi 1258698f425bSmrg test "$lalib_p" = yes 1259698f425bSmrg} 1260266e564dSmrg 1261698f425bSmrg# func_ltwrapper_script_p file 1262698f425bSmrg# True iff FILE is a libtool wrapper script 1263698f425bSmrg# This function is only a basic sanity check; it will hardly flush out 1264698f425bSmrg# determined imposters. 1265698f425bSmrgfunc_ltwrapper_script_p () 1266698f425bSmrg{ 1267698f425bSmrg func_lalib_p "$1" 1268698f425bSmrg} 1269266e564dSmrg 1270698f425bSmrg# func_ltwrapper_executable_p file 1271698f425bSmrg# True iff FILE is a libtool wrapper executable 1272698f425bSmrg# This function is only a basic sanity check; it will hardly flush out 1273698f425bSmrg# determined imposters. 1274698f425bSmrgfunc_ltwrapper_executable_p () 1275698f425bSmrg{ 1276698f425bSmrg func_ltwrapper_exec_suffix= 1277698f425bSmrg case $1 in 1278698f425bSmrg *.exe) ;; 1279698f425bSmrg *) func_ltwrapper_exec_suffix=.exe ;; 1280698f425bSmrg esac 1281698f425bSmrg $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 1282698f425bSmrg} 1283698f425bSmrg 1284698f425bSmrg# func_ltwrapper_scriptname file 1285698f425bSmrg# Assumes file is an ltwrapper_executable 1286698f425bSmrg# uses $file to determine the appropriate filename for a 1287698f425bSmrg# temporary ltwrapper_script. 1288698f425bSmrgfunc_ltwrapper_scriptname () 1289698f425bSmrg{ 12909ef0b394Smrg func_dirname_and_basename "$1" "" "." 12919ef0b394Smrg func_stripname '' '.exe' "$func_basename_result" 12929ef0b394Smrg func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" 1293698f425bSmrg} 1294698f425bSmrg 1295698f425bSmrg# func_ltwrapper_p file 1296698f425bSmrg# True iff FILE is a libtool wrapper script or wrapper executable 1297698f425bSmrg# This function is only a basic sanity check; it will hardly flush out 1298698f425bSmrg# determined imposters. 1299698f425bSmrgfunc_ltwrapper_p () 1300698f425bSmrg{ 1301698f425bSmrg func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" 1302698f425bSmrg} 1303698f425bSmrg 1304698f425bSmrg 1305698f425bSmrg# func_execute_cmds commands fail_cmd 1306698f425bSmrg# Execute tilde-delimited COMMANDS. 1307698f425bSmrg# If FAIL_CMD is given, eval that upon failure. 1308698f425bSmrg# FAIL_CMD may read-access the current command in variable CMD! 1309698f425bSmrgfunc_execute_cmds () 1310698f425bSmrg{ 1311698f425bSmrg $opt_debug 1312698f425bSmrg save_ifs=$IFS; IFS='~' 1313698f425bSmrg for cmd in $1; do 1314698f425bSmrg IFS=$save_ifs 1315698f425bSmrg eval cmd=\"$cmd\" 1316698f425bSmrg func_show_eval "$cmd" "${2-:}" 1317698f425bSmrg done 1318698f425bSmrg IFS=$save_ifs 1319698f425bSmrg} 1320698f425bSmrg 1321698f425bSmrg 1322698f425bSmrg# func_source file 1323698f425bSmrg# Source FILE, adding directory component if necessary. 1324698f425bSmrg# Note that it is not necessary on cygwin/mingw to append a dot to 1325698f425bSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe 1326698f425bSmrg# behavior happens only for exec(3), not for open(2)! Also, sourcing 1327698f425bSmrg# `FILE.' does not work on cygwin managed mounts. 1328698f425bSmrgfunc_source () 1329698f425bSmrg{ 1330698f425bSmrg $opt_debug 1331698f425bSmrg case $1 in 1332698f425bSmrg */* | *\\*) . "$1" ;; 1333698f425bSmrg *) . "./$1" ;; 1334698f425bSmrg esac 1335698f425bSmrg} 1336698f425bSmrg 1337698f425bSmrg 13389ef0b394Smrg# func_resolve_sysroot PATH 13399ef0b394Smrg# Replace a leading = in PATH with a sysroot. Store the result into 13409ef0b394Smrg# func_resolve_sysroot_result 13419ef0b394Smrgfunc_resolve_sysroot () 13429ef0b394Smrg{ 13439ef0b394Smrg func_resolve_sysroot_result=$1 13449ef0b394Smrg case $func_resolve_sysroot_result in 13459ef0b394Smrg =*) 13469ef0b394Smrg func_stripname '=' '' "$func_resolve_sysroot_result" 13479ef0b394Smrg func_resolve_sysroot_result=$lt_sysroot$func_stripname_result 13489ef0b394Smrg ;; 13499ef0b394Smrg esac 13509ef0b394Smrg} 13519ef0b394Smrg 13529ef0b394Smrg# func_replace_sysroot PATH 13539ef0b394Smrg# If PATH begins with the sysroot, replace it with = and 13549ef0b394Smrg# store the result into func_replace_sysroot_result. 13559ef0b394Smrgfunc_replace_sysroot () 13569ef0b394Smrg{ 13579ef0b394Smrg case "$lt_sysroot:$1" in 13589ef0b394Smrg ?*:"$lt_sysroot"*) 13599ef0b394Smrg func_stripname "$lt_sysroot" '' "$1" 13609ef0b394Smrg func_replace_sysroot_result="=$func_stripname_result" 13619ef0b394Smrg ;; 13629ef0b394Smrg *) 13639ef0b394Smrg # Including no sysroot. 13649ef0b394Smrg func_replace_sysroot_result=$1 13659ef0b394Smrg ;; 13669ef0b394Smrg esac 13679ef0b394Smrg} 13689ef0b394Smrg 1369698f425bSmrg# func_infer_tag arg 1370698f425bSmrg# Infer tagged configuration to use if any are available and 1371698f425bSmrg# if one wasn't chosen via the "--tag" command line option. 1372698f425bSmrg# Only attempt this if the compiler in the base compile 1373698f425bSmrg# command doesn't match the default compiler. 1374698f425bSmrg# arg is usually of the form 'gcc ...' 1375698f425bSmrgfunc_infer_tag () 1376698f425bSmrg{ 1377698f425bSmrg $opt_debug 1378698f425bSmrg if test -n "$available_tags" && test -z "$tagname"; then 1379698f425bSmrg CC_quoted= 1380698f425bSmrg for arg in $CC; do 13819ef0b394Smrg func_append_quoted CC_quoted "$arg" 1382698f425bSmrg done 13839ef0b394Smrg CC_expanded=`func_echo_all $CC` 13849ef0b394Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1385698f425bSmrg case $@ in 1386698f425bSmrg # Blanks in the command may have been stripped by the calling shell, 1387698f425bSmrg # but not from the CC environment variable when configure was run. 13889ef0b394Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 13899ef0b394Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; 1390698f425bSmrg # Blanks at the start of $base_compile will cause this to fail 1391698f425bSmrg # if we don't check for them as well. 1392698f425bSmrg *) 1393698f425bSmrg for z in $available_tags; do 1394698f425bSmrg if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then 1395698f425bSmrg # Evaluate the configuration. 1396698f425bSmrg eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" 1397698f425bSmrg CC_quoted= 1398698f425bSmrg for arg in $CC; do 1399698f425bSmrg # Double-quote args containing other shell metacharacters. 14009ef0b394Smrg func_append_quoted CC_quoted "$arg" 1401698f425bSmrg done 14029ef0b394Smrg CC_expanded=`func_echo_all $CC` 14039ef0b394Smrg CC_quoted_expanded=`func_echo_all $CC_quoted` 1404698f425bSmrg case "$@ " in 14059ef0b394Smrg " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ 14069ef0b394Smrg " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) 1407698f425bSmrg # The compiler in the base compile command matches 1408698f425bSmrg # the one in the tagged configuration. 1409698f425bSmrg # Assume this is the tagged configuration we want. 1410698f425bSmrg tagname=$z 1411698f425bSmrg break 1412698f425bSmrg ;; 1413698f425bSmrg esac 1414698f425bSmrg fi 1415698f425bSmrg done 1416698f425bSmrg # If $tagname still isn't set, then no tagged configuration 1417698f425bSmrg # was found and let the user know that the "--tag" command 1418698f425bSmrg # line option must be used. 1419698f425bSmrg if test -z "$tagname"; then 1420698f425bSmrg func_echo "unable to infer tagged configuration" 1421698f425bSmrg func_fatal_error "specify a tag with \`--tag'" 1422698f425bSmrg# else 1423698f425bSmrg# func_verbose "using $tagname tagged configuration" 1424698f425bSmrg fi 1425698f425bSmrg ;; 1426698f425bSmrg esac 1427698f425bSmrg fi 1428698f425bSmrg} 1429698f425bSmrg 1430698f425bSmrg 1431698f425bSmrg 1432698f425bSmrg# func_write_libtool_object output_name pic_name nonpic_name 1433698f425bSmrg# Create a libtool object file (analogous to a ".la" file), 1434698f425bSmrg# but don't create it if we're doing a dry run. 1435698f425bSmrgfunc_write_libtool_object () 1436698f425bSmrg{ 1437698f425bSmrg write_libobj=${1} 1438698f425bSmrg if test "$build_libtool_libs" = yes; then 1439698f425bSmrg write_lobj=\'${2}\' 1440698f425bSmrg else 1441698f425bSmrg write_lobj=none 1442698f425bSmrg fi 1443698f425bSmrg 1444698f425bSmrg if test "$build_old_libs" = yes; then 1445698f425bSmrg write_oldobj=\'${3}\' 1446698f425bSmrg else 1447698f425bSmrg write_oldobj=none 1448698f425bSmrg fi 1449698f425bSmrg 1450698f425bSmrg $opt_dry_run || { 1451698f425bSmrg cat >${write_libobj}T <<EOF 1452698f425bSmrg# $write_libobj - a libtool object file 1453698f425bSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 1454698f425bSmrg# 1455698f425bSmrg# Please DO NOT delete this file! 1456698f425bSmrg# It is necessary for linking the library. 1457698f425bSmrg 1458698f425bSmrg# Name of the PIC object. 1459698f425bSmrgpic_object=$write_lobj 1460698f425bSmrg 1461698f425bSmrg# Name of the non-PIC object 1462698f425bSmrgnon_pic_object=$write_oldobj 1463698f425bSmrg 1464698f425bSmrgEOF 1465698f425bSmrg $MV "${write_libobj}T" "${write_libobj}" 1466698f425bSmrg } 1467698f425bSmrg} 1468698f425bSmrg 14699ef0b394Smrg 14709ef0b394Smrg################################################## 14719ef0b394Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # 14729ef0b394Smrg################################################## 14739ef0b394Smrg 14749ef0b394Smrg# func_convert_core_file_wine_to_w32 ARG 14759ef0b394Smrg# Helper function used by file name conversion functions when $build is *nix, 14769ef0b394Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a 14779ef0b394Smrg# correctly configured wine environment available, with the winepath program 14789ef0b394Smrg# in $build's $PATH. 14799ef0b394Smrg# 14809ef0b394Smrg# ARG is the $build file name to be converted to w32 format. 14819ef0b394Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will 14829ef0b394Smrg# be empty on error (or when ARG is empty) 14839ef0b394Smrgfunc_convert_core_file_wine_to_w32 () 14849ef0b394Smrg{ 14859ef0b394Smrg $opt_debug 14869ef0b394Smrg func_convert_core_file_wine_to_w32_result="$1" 14879ef0b394Smrg if test -n "$1"; then 14889ef0b394Smrg # Unfortunately, winepath does not exit with a non-zero error code, so we 14899ef0b394Smrg # are forced to check the contents of stdout. On the other hand, if the 14909ef0b394Smrg # command is not found, the shell will set an exit code of 127 and print 14919ef0b394Smrg # *an error message* to stdout. So we must check for both error code of 14929ef0b394Smrg # zero AND non-empty stdout, which explains the odd construction: 14939ef0b394Smrg func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` 14949ef0b394Smrg if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then 14959ef0b394Smrg func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | 14969ef0b394Smrg $SED -e "$lt_sed_naive_backslashify"` 14979ef0b394Smrg else 14989ef0b394Smrg func_convert_core_file_wine_to_w32_result= 14999ef0b394Smrg fi 15009ef0b394Smrg fi 15019ef0b394Smrg} 15029ef0b394Smrg# end: func_convert_core_file_wine_to_w32 15039ef0b394Smrg 15049ef0b394Smrg 15059ef0b394Smrg# func_convert_core_path_wine_to_w32 ARG 15069ef0b394Smrg# Helper function used by path conversion functions when $build is *nix, and 15079ef0b394Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly 15089ef0b394Smrg# configured wine environment available, with the winepath program in $build's 15099ef0b394Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters. 15109ef0b394Smrg# 15119ef0b394Smrg# ARG is path to be converted from $build format to win32. 15129ef0b394Smrg# Result is available in $func_convert_core_path_wine_to_w32_result. 15139ef0b394Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names 15149ef0b394Smrg# are convertible, then the result may be empty. 15159ef0b394Smrgfunc_convert_core_path_wine_to_w32 () 15169ef0b394Smrg{ 15179ef0b394Smrg $opt_debug 15189ef0b394Smrg # unfortunately, winepath doesn't convert paths, only file names 15199ef0b394Smrg func_convert_core_path_wine_to_w32_result="" 15209ef0b394Smrg if test -n "$1"; then 15219ef0b394Smrg oldIFS=$IFS 15229ef0b394Smrg IFS=: 15239ef0b394Smrg for func_convert_core_path_wine_to_w32_f in $1; do 15249ef0b394Smrg IFS=$oldIFS 15259ef0b394Smrg func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" 15269ef0b394Smrg if test -n "$func_convert_core_file_wine_to_w32_result" ; then 15279ef0b394Smrg if test -z "$func_convert_core_path_wine_to_w32_result"; then 15289ef0b394Smrg func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" 15299ef0b394Smrg else 15309ef0b394Smrg func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" 15319ef0b394Smrg fi 15329ef0b394Smrg fi 15339ef0b394Smrg done 15349ef0b394Smrg IFS=$oldIFS 15359ef0b394Smrg fi 15369ef0b394Smrg} 15379ef0b394Smrg# end: func_convert_core_path_wine_to_w32 15389ef0b394Smrg 15399ef0b394Smrg 15409ef0b394Smrg# func_cygpath ARGS... 15419ef0b394Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when 15429ef0b394Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) 15439ef0b394Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or 15449ef0b394Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input 15459ef0b394Smrg# file name or path is assumed to be in w32 format, as previously converted 15469ef0b394Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name 15479ef0b394Smrg# or path in func_cygpath_result (input file name or path is assumed to be in 15489ef0b394Smrg# Cygwin format). Returns an empty string on error. 15499ef0b394Smrg# 15509ef0b394Smrg# ARGS are passed to cygpath, with the last one being the file name or path to 15519ef0b394Smrg# be converted. 15529ef0b394Smrg# 15539ef0b394Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH 15549ef0b394Smrg# environment variable; do not put it in $PATH. 15559ef0b394Smrgfunc_cygpath () 15569ef0b394Smrg{ 15579ef0b394Smrg $opt_debug 15589ef0b394Smrg if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then 15599ef0b394Smrg func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` 15609ef0b394Smrg if test "$?" -ne 0; then 15619ef0b394Smrg # on failure, ensure result is empty 15629ef0b394Smrg func_cygpath_result= 15639ef0b394Smrg fi 15649ef0b394Smrg else 15659ef0b394Smrg func_cygpath_result= 15669ef0b394Smrg func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" 15679ef0b394Smrg fi 15689ef0b394Smrg} 15699ef0b394Smrg#end: func_cygpath 15709ef0b394Smrg 15719ef0b394Smrg 15729ef0b394Smrg# func_convert_core_msys_to_w32 ARG 15739ef0b394Smrg# Convert file name or path ARG from MSYS format to w32 format. Return 15749ef0b394Smrg# result in func_convert_core_msys_to_w32_result. 15759ef0b394Smrgfunc_convert_core_msys_to_w32 () 15769ef0b394Smrg{ 15779ef0b394Smrg $opt_debug 15789ef0b394Smrg # awkward: cmd appends spaces to result 15799ef0b394Smrg func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | 15809ef0b394Smrg $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` 15819ef0b394Smrg} 15829ef0b394Smrg#end: func_convert_core_msys_to_w32 15839ef0b394Smrg 15849ef0b394Smrg 15859ef0b394Smrg# func_convert_file_check ARG1 ARG2 15869ef0b394Smrg# Verify that ARG1 (a file name in $build format) was converted to $host 15879ef0b394Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting 15889ef0b394Smrg# func_to_host_file_result to ARG1). 15899ef0b394Smrgfunc_convert_file_check () 15909ef0b394Smrg{ 15919ef0b394Smrg $opt_debug 15929ef0b394Smrg if test -z "$2" && test -n "$1" ; then 15939ef0b394Smrg func_error "Could not determine host file name corresponding to" 15949ef0b394Smrg func_error " \`$1'" 15959ef0b394Smrg func_error "Continuing, but uninstalled executables may not work." 15969ef0b394Smrg # Fallback: 15979ef0b394Smrg func_to_host_file_result="$1" 15989ef0b394Smrg fi 15999ef0b394Smrg} 16009ef0b394Smrg# end func_convert_file_check 16019ef0b394Smrg 16029ef0b394Smrg 16039ef0b394Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH 16049ef0b394Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host 16059ef0b394Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting 16069ef0b394Smrg# func_to_host_file_result to a simplistic fallback value (see below). 16079ef0b394Smrgfunc_convert_path_check () 16089ef0b394Smrg{ 16099ef0b394Smrg $opt_debug 16109ef0b394Smrg if test -z "$4" && test -n "$3"; then 16119ef0b394Smrg func_error "Could not determine the host path corresponding to" 16129ef0b394Smrg func_error " \`$3'" 16139ef0b394Smrg func_error "Continuing, but uninstalled executables may not work." 16149ef0b394Smrg # Fallback. This is a deliberately simplistic "conversion" and 16159ef0b394Smrg # should not be "improved". See libtool.info. 16169ef0b394Smrg if test "x$1" != "x$2"; then 16179ef0b394Smrg lt_replace_pathsep_chars="s|$1|$2|g" 16189ef0b394Smrg func_to_host_path_result=`echo "$3" | 16199ef0b394Smrg $SED -e "$lt_replace_pathsep_chars"` 16209ef0b394Smrg else 16219ef0b394Smrg func_to_host_path_result="$3" 16229ef0b394Smrg fi 16239ef0b394Smrg fi 16249ef0b394Smrg} 16259ef0b394Smrg# end func_convert_path_check 16269ef0b394Smrg 16279ef0b394Smrg 16289ef0b394Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG 16299ef0b394Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT 16309ef0b394Smrg# and appending REPL if ORIG matches BACKPAT. 16319ef0b394Smrgfunc_convert_path_front_back_pathsep () 16329ef0b394Smrg{ 16339ef0b394Smrg $opt_debug 16349ef0b394Smrg case $4 in 16359ef0b394Smrg $1 ) func_to_host_path_result="$3$func_to_host_path_result" 16369ef0b394Smrg ;; 16379ef0b394Smrg esac 16389ef0b394Smrg case $4 in 16399ef0b394Smrg $2 ) func_append func_to_host_path_result "$3" 16409ef0b394Smrg ;; 16419ef0b394Smrg esac 16429ef0b394Smrg} 16439ef0b394Smrg# end func_convert_path_front_back_pathsep 16449ef0b394Smrg 16459ef0b394Smrg 16469ef0b394Smrg################################################## 16479ef0b394Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS # 16489ef0b394Smrg################################################## 16499ef0b394Smrg# invoked via `$to_host_file_cmd ARG' 16509ef0b394Smrg# 16519ef0b394Smrg# In each case, ARG is the path to be converted from $build to $host format. 16529ef0b394Smrg# Result will be available in $func_to_host_file_result. 16539ef0b394Smrg 16549ef0b394Smrg 16559ef0b394Smrg# func_to_host_file ARG 16569ef0b394Smrg# Converts the file name ARG from $build format to $host format. Return result 16579ef0b394Smrg# in func_to_host_file_result. 16589ef0b394Smrgfunc_to_host_file () 16599ef0b394Smrg{ 16609ef0b394Smrg $opt_debug 16619ef0b394Smrg $to_host_file_cmd "$1" 16629ef0b394Smrg} 16639ef0b394Smrg# end func_to_host_file 16649ef0b394Smrg 16659ef0b394Smrg 16669ef0b394Smrg# func_to_tool_file ARG LAZY 16679ef0b394Smrg# converts the file name ARG from $build format to toolchain format. Return 16689ef0b394Smrg# result in func_to_tool_file_result. If the conversion in use is listed 16699ef0b394Smrg# in (the comma separated) LAZY, no conversion takes place. 16709ef0b394Smrgfunc_to_tool_file () 16719ef0b394Smrg{ 16729ef0b394Smrg $opt_debug 16739ef0b394Smrg case ,$2, in 16749ef0b394Smrg *,"$to_tool_file_cmd",*) 16759ef0b394Smrg func_to_tool_file_result=$1 16769ef0b394Smrg ;; 16779ef0b394Smrg *) 16789ef0b394Smrg $to_tool_file_cmd "$1" 16799ef0b394Smrg func_to_tool_file_result=$func_to_host_file_result 16809ef0b394Smrg ;; 16819ef0b394Smrg esac 16829ef0b394Smrg} 16839ef0b394Smrg# end func_to_tool_file 16849ef0b394Smrg 16859ef0b394Smrg 16869ef0b394Smrg# func_convert_file_noop ARG 16879ef0b394Smrg# Copy ARG to func_to_host_file_result. 16889ef0b394Smrgfunc_convert_file_noop () 16899ef0b394Smrg{ 16909ef0b394Smrg func_to_host_file_result="$1" 16919ef0b394Smrg} 16929ef0b394Smrg# end func_convert_file_noop 16939ef0b394Smrg 16949ef0b394Smrg 16959ef0b394Smrg# func_convert_file_msys_to_w32 ARG 16969ef0b394Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic 16979ef0b394Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 16989ef0b394Smrg# func_to_host_file_result. 16999ef0b394Smrgfunc_convert_file_msys_to_w32 () 17009ef0b394Smrg{ 17019ef0b394Smrg $opt_debug 17029ef0b394Smrg func_to_host_file_result="$1" 17039ef0b394Smrg if test -n "$1"; then 17049ef0b394Smrg func_convert_core_msys_to_w32 "$1" 17059ef0b394Smrg func_to_host_file_result="$func_convert_core_msys_to_w32_result" 17069ef0b394Smrg fi 17079ef0b394Smrg func_convert_file_check "$1" "$func_to_host_file_result" 17089ef0b394Smrg} 17099ef0b394Smrg# end func_convert_file_msys_to_w32 17109ef0b394Smrg 17119ef0b394Smrg 17129ef0b394Smrg# func_convert_file_cygwin_to_w32 ARG 17139ef0b394Smrg# Convert file name ARG from Cygwin to w32 format. Returns result in 17149ef0b394Smrg# func_to_host_file_result. 17159ef0b394Smrgfunc_convert_file_cygwin_to_w32 () 17169ef0b394Smrg{ 17179ef0b394Smrg $opt_debug 17189ef0b394Smrg func_to_host_file_result="$1" 17199ef0b394Smrg if test -n "$1"; then 17209ef0b394Smrg # because $build is cygwin, we call "the" cygpath in $PATH; no need to use 17219ef0b394Smrg # LT_CYGPATH in this case. 17229ef0b394Smrg func_to_host_file_result=`cygpath -m "$1"` 17239ef0b394Smrg fi 17249ef0b394Smrg func_convert_file_check "$1" "$func_to_host_file_result" 17259ef0b394Smrg} 17269ef0b394Smrg# end func_convert_file_cygwin_to_w32 17279ef0b394Smrg 17289ef0b394Smrg 17299ef0b394Smrg# func_convert_file_nix_to_w32 ARG 17309ef0b394Smrg# Convert file name ARG from *nix to w32 format. Requires a wine environment 17319ef0b394Smrg# and a working winepath. Returns result in func_to_host_file_result. 17329ef0b394Smrgfunc_convert_file_nix_to_w32 () 17339ef0b394Smrg{ 17349ef0b394Smrg $opt_debug 17359ef0b394Smrg func_to_host_file_result="$1" 17369ef0b394Smrg if test -n "$1"; then 17379ef0b394Smrg func_convert_core_file_wine_to_w32 "$1" 17389ef0b394Smrg func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" 17399ef0b394Smrg fi 17409ef0b394Smrg func_convert_file_check "$1" "$func_to_host_file_result" 17419ef0b394Smrg} 17429ef0b394Smrg# end func_convert_file_nix_to_w32 17439ef0b394Smrg 17449ef0b394Smrg 17459ef0b394Smrg# func_convert_file_msys_to_cygwin ARG 17469ef0b394Smrg# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 17479ef0b394Smrg# Returns result in func_to_host_file_result. 17489ef0b394Smrgfunc_convert_file_msys_to_cygwin () 17499ef0b394Smrg{ 17509ef0b394Smrg $opt_debug 17519ef0b394Smrg func_to_host_file_result="$1" 17529ef0b394Smrg if test -n "$1"; then 17539ef0b394Smrg func_convert_core_msys_to_w32 "$1" 17549ef0b394Smrg func_cygpath -u "$func_convert_core_msys_to_w32_result" 17559ef0b394Smrg func_to_host_file_result="$func_cygpath_result" 17569ef0b394Smrg fi 17579ef0b394Smrg func_convert_file_check "$1" "$func_to_host_file_result" 17589ef0b394Smrg} 17599ef0b394Smrg# end func_convert_file_msys_to_cygwin 17609ef0b394Smrg 17619ef0b394Smrg 17629ef0b394Smrg# func_convert_file_nix_to_cygwin ARG 17639ef0b394Smrg# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed 17649ef0b394Smrg# in a wine environment, working winepath, and LT_CYGPATH set. Returns result 17659ef0b394Smrg# in func_to_host_file_result. 17669ef0b394Smrgfunc_convert_file_nix_to_cygwin () 17679ef0b394Smrg{ 17689ef0b394Smrg $opt_debug 17699ef0b394Smrg func_to_host_file_result="$1" 17709ef0b394Smrg if test -n "$1"; then 17719ef0b394Smrg # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. 17729ef0b394Smrg func_convert_core_file_wine_to_w32 "$1" 17739ef0b394Smrg func_cygpath -u "$func_convert_core_file_wine_to_w32_result" 17749ef0b394Smrg func_to_host_file_result="$func_cygpath_result" 17759ef0b394Smrg fi 17769ef0b394Smrg func_convert_file_check "$1" "$func_to_host_file_result" 17779ef0b394Smrg} 17789ef0b394Smrg# end func_convert_file_nix_to_cygwin 17799ef0b394Smrg 17809ef0b394Smrg 17819ef0b394Smrg############################################# 17829ef0b394Smrg# $build to $host PATH CONVERSION FUNCTIONS # 17839ef0b394Smrg############################################# 17849ef0b394Smrg# invoked via `$to_host_path_cmd ARG' 17859ef0b394Smrg# 17869ef0b394Smrg# In each case, ARG is the path to be converted from $build to $host format. 17879ef0b394Smrg# The result will be available in $func_to_host_path_result. 17889ef0b394Smrg# 17899ef0b394Smrg# Path separators are also converted from $build format to $host format. If 17909ef0b394Smrg# ARG begins or ends with a path separator character, it is preserved (but 17919ef0b394Smrg# converted to $host format) on output. 17929ef0b394Smrg# 17939ef0b394Smrg# All path conversion functions are named using the following convention: 17949ef0b394Smrg# file name conversion function : func_convert_file_X_to_Y () 17959ef0b394Smrg# path conversion function : func_convert_path_X_to_Y () 17969ef0b394Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the 17979ef0b394Smrg# same. If conversion functions are added for new $build/$host combinations, 17989ef0b394Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd 17999ef0b394Smrg# will break. 18009ef0b394Smrg 18019ef0b394Smrg 18029ef0b394Smrg# func_init_to_host_path_cmd 18039ef0b394Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the 18049ef0b394Smrg# appropriate value, based on the value of $to_host_file_cmd. 18059ef0b394Smrgto_host_path_cmd= 18069ef0b394Smrgfunc_init_to_host_path_cmd () 18079ef0b394Smrg{ 18089ef0b394Smrg $opt_debug 18099ef0b394Smrg if test -z "$to_host_path_cmd"; then 18109ef0b394Smrg func_stripname 'func_convert_file_' '' "$to_host_file_cmd" 18119ef0b394Smrg to_host_path_cmd="func_convert_path_${func_stripname_result}" 18129ef0b394Smrg fi 18139ef0b394Smrg} 18149ef0b394Smrg 18159ef0b394Smrg 18169ef0b394Smrg# func_to_host_path ARG 18179ef0b394Smrg# Converts the path ARG from $build format to $host format. Return result 18189ef0b394Smrg# in func_to_host_path_result. 18199ef0b394Smrgfunc_to_host_path () 18209ef0b394Smrg{ 18219ef0b394Smrg $opt_debug 18229ef0b394Smrg func_init_to_host_path_cmd 18239ef0b394Smrg $to_host_path_cmd "$1" 18249ef0b394Smrg} 18259ef0b394Smrg# end func_to_host_path 18269ef0b394Smrg 18279ef0b394Smrg 18289ef0b394Smrg# func_convert_path_noop ARG 18299ef0b394Smrg# Copy ARG to func_to_host_path_result. 18309ef0b394Smrgfunc_convert_path_noop () 18319ef0b394Smrg{ 18329ef0b394Smrg func_to_host_path_result="$1" 18339ef0b394Smrg} 18349ef0b394Smrg# end func_convert_path_noop 18359ef0b394Smrg 18369ef0b394Smrg 18379ef0b394Smrg# func_convert_path_msys_to_w32 ARG 18389ef0b394Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic 18399ef0b394Smrg# conversion to w32 is not available inside the cwrapper. Returns result in 18409ef0b394Smrg# func_to_host_path_result. 18419ef0b394Smrgfunc_convert_path_msys_to_w32 () 18429ef0b394Smrg{ 18439ef0b394Smrg $opt_debug 18449ef0b394Smrg func_to_host_path_result="$1" 18459ef0b394Smrg if test -n "$1"; then 18469ef0b394Smrg # Remove leading and trailing path separator characters from ARG. MSYS 18479ef0b394Smrg # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; 18489ef0b394Smrg # and winepath ignores them completely. 18499ef0b394Smrg func_stripname : : "$1" 18509ef0b394Smrg func_to_host_path_tmp1=$func_stripname_result 18519ef0b394Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 18529ef0b394Smrg func_to_host_path_result="$func_convert_core_msys_to_w32_result" 18539ef0b394Smrg func_convert_path_check : ";" \ 18549ef0b394Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 18559ef0b394Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 18569ef0b394Smrg fi 18579ef0b394Smrg} 18589ef0b394Smrg# end func_convert_path_msys_to_w32 18599ef0b394Smrg 18609ef0b394Smrg 18619ef0b394Smrg# func_convert_path_cygwin_to_w32 ARG 18629ef0b394Smrg# Convert path ARG from Cygwin to w32 format. Returns result in 18639ef0b394Smrg# func_to_host_file_result. 18649ef0b394Smrgfunc_convert_path_cygwin_to_w32 () 18659ef0b394Smrg{ 18669ef0b394Smrg $opt_debug 18679ef0b394Smrg func_to_host_path_result="$1" 18689ef0b394Smrg if test -n "$1"; then 18699ef0b394Smrg # See func_convert_path_msys_to_w32: 18709ef0b394Smrg func_stripname : : "$1" 18719ef0b394Smrg func_to_host_path_tmp1=$func_stripname_result 18729ef0b394Smrg func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` 18739ef0b394Smrg func_convert_path_check : ";" \ 18749ef0b394Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 18759ef0b394Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 18769ef0b394Smrg fi 18779ef0b394Smrg} 18789ef0b394Smrg# end func_convert_path_cygwin_to_w32 18799ef0b394Smrg 18809ef0b394Smrg 18819ef0b394Smrg# func_convert_path_nix_to_w32 ARG 18829ef0b394Smrg# Convert path ARG from *nix to w32 format. Requires a wine environment and 18839ef0b394Smrg# a working winepath. Returns result in func_to_host_file_result. 18849ef0b394Smrgfunc_convert_path_nix_to_w32 () 18859ef0b394Smrg{ 18869ef0b394Smrg $opt_debug 18879ef0b394Smrg func_to_host_path_result="$1" 18889ef0b394Smrg if test -n "$1"; then 18899ef0b394Smrg # See func_convert_path_msys_to_w32: 18909ef0b394Smrg func_stripname : : "$1" 18919ef0b394Smrg func_to_host_path_tmp1=$func_stripname_result 18929ef0b394Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 18939ef0b394Smrg func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" 18949ef0b394Smrg func_convert_path_check : ";" \ 18959ef0b394Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 18969ef0b394Smrg func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" 18979ef0b394Smrg fi 18989ef0b394Smrg} 18999ef0b394Smrg# end func_convert_path_nix_to_w32 19009ef0b394Smrg 19019ef0b394Smrg 19029ef0b394Smrg# func_convert_path_msys_to_cygwin ARG 19039ef0b394Smrg# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. 19049ef0b394Smrg# Returns result in func_to_host_file_result. 19059ef0b394Smrgfunc_convert_path_msys_to_cygwin () 19069ef0b394Smrg{ 19079ef0b394Smrg $opt_debug 19089ef0b394Smrg func_to_host_path_result="$1" 19099ef0b394Smrg if test -n "$1"; then 19109ef0b394Smrg # See func_convert_path_msys_to_w32: 19119ef0b394Smrg func_stripname : : "$1" 19129ef0b394Smrg func_to_host_path_tmp1=$func_stripname_result 19139ef0b394Smrg func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" 19149ef0b394Smrg func_cygpath -u -p "$func_convert_core_msys_to_w32_result" 19159ef0b394Smrg func_to_host_path_result="$func_cygpath_result" 19169ef0b394Smrg func_convert_path_check : : \ 19179ef0b394Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 19189ef0b394Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 19199ef0b394Smrg fi 19209ef0b394Smrg} 19219ef0b394Smrg# end func_convert_path_msys_to_cygwin 19229ef0b394Smrg 19239ef0b394Smrg 19249ef0b394Smrg# func_convert_path_nix_to_cygwin ARG 19259ef0b394Smrg# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a 19269ef0b394Smrg# a wine environment, working winepath, and LT_CYGPATH set. Returns result in 19279ef0b394Smrg# func_to_host_file_result. 19289ef0b394Smrgfunc_convert_path_nix_to_cygwin () 19299ef0b394Smrg{ 19309ef0b394Smrg $opt_debug 19319ef0b394Smrg func_to_host_path_result="$1" 19329ef0b394Smrg if test -n "$1"; then 19339ef0b394Smrg # Remove leading and trailing path separator characters from 19349ef0b394Smrg # ARG. msys behavior is inconsistent here, cygpath turns them 19359ef0b394Smrg # into '.;' and ';.', and winepath ignores them completely. 19369ef0b394Smrg func_stripname : : "$1" 19379ef0b394Smrg func_to_host_path_tmp1=$func_stripname_result 19389ef0b394Smrg func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" 19399ef0b394Smrg func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" 19409ef0b394Smrg func_to_host_path_result="$func_cygpath_result" 19419ef0b394Smrg func_convert_path_check : : \ 19429ef0b394Smrg "$func_to_host_path_tmp1" "$func_to_host_path_result" 19439ef0b394Smrg func_convert_path_front_back_pathsep ":*" "*:" : "$1" 19449ef0b394Smrg fi 19459ef0b394Smrg} 19469ef0b394Smrg# end func_convert_path_nix_to_cygwin 19479ef0b394Smrg 19489ef0b394Smrg 1949698f425bSmrg# func_mode_compile arg... 1950698f425bSmrgfunc_mode_compile () 1951698f425bSmrg{ 1952698f425bSmrg $opt_debug 1953698f425bSmrg # Get the compilation command and the source file. 1954698f425bSmrg base_compile= 1955698f425bSmrg srcfile="$nonopt" # always keep a non-empty value in "srcfile" 1956698f425bSmrg suppress_opt=yes 1957698f425bSmrg suppress_output= 1958698f425bSmrg arg_mode=normal 1959698f425bSmrg libobj= 1960698f425bSmrg later= 1961698f425bSmrg pie_flag= 1962698f425bSmrg 1963698f425bSmrg for arg 1964698f425bSmrg do 1965698f425bSmrg case $arg_mode in 1966698f425bSmrg arg ) 1967698f425bSmrg # do not "continue". Instead, add this to base_compile 1968698f425bSmrg lastarg="$arg" 1969698f425bSmrg arg_mode=normal 1970698f425bSmrg ;; 1971698f425bSmrg 1972698f425bSmrg target ) 1973698f425bSmrg libobj="$arg" 1974698f425bSmrg arg_mode=normal 1975698f425bSmrg continue 1976698f425bSmrg ;; 1977698f425bSmrg 1978698f425bSmrg normal ) 1979698f425bSmrg # Accept any command-line options. 1980698f425bSmrg case $arg in 1981698f425bSmrg -o) 1982698f425bSmrg test -n "$libobj" && \ 1983698f425bSmrg func_fatal_error "you cannot specify \`-o' more than once" 1984698f425bSmrg arg_mode=target 1985698f425bSmrg continue 1986698f425bSmrg ;; 1987698f425bSmrg 1988698f425bSmrg -pie | -fpie | -fPIE) 19899ef0b394Smrg func_append pie_flag " $arg" 1990698f425bSmrg continue 1991698f425bSmrg ;; 1992698f425bSmrg 1993698f425bSmrg -shared | -static | -prefer-pic | -prefer-non-pic) 19949ef0b394Smrg func_append later " $arg" 1995698f425bSmrg continue 1996698f425bSmrg ;; 1997266e564dSmrg 1998266e564dSmrg -no-suppress) 1999266e564dSmrg suppress_opt=no 2000266e564dSmrg continue 2001266e564dSmrg ;; 2002266e564dSmrg 2003266e564dSmrg -Xcompiler) 2004266e564dSmrg arg_mode=arg # the next one goes into the "base_compile" arg list 2005266e564dSmrg continue # The current "srcfile" will either be retained or 2006266e564dSmrg ;; # replaced later. I would guess that would be a bug. 2007266e564dSmrg 2008266e564dSmrg -Wc,*) 2009698f425bSmrg func_stripname '-Wc,' '' "$arg" 2010698f425bSmrg args=$func_stripname_result 2011266e564dSmrg lastarg= 2012266e564dSmrg save_ifs="$IFS"; IFS=',' 2013698f425bSmrg for arg in $args; do 2014266e564dSmrg IFS="$save_ifs" 20159ef0b394Smrg func_append_quoted lastarg "$arg" 2016266e564dSmrg done 2017266e564dSmrg IFS="$save_ifs" 2018698f425bSmrg func_stripname ' ' '' "$lastarg" 2019698f425bSmrg lastarg=$func_stripname_result 2020266e564dSmrg 2021266e564dSmrg # Add the arguments to base_compile. 20229ef0b394Smrg func_append base_compile " $lastarg" 2023266e564dSmrg continue 2024266e564dSmrg ;; 2025266e564dSmrg 2026698f425bSmrg *) 2027266e564dSmrg # Accept the current argument as the source file. 2028266e564dSmrg # The previous "srcfile" becomes the current argument. 2029266e564dSmrg # 2030266e564dSmrg lastarg="$srcfile" 2031266e564dSmrg srcfile="$arg" 2032266e564dSmrg ;; 2033266e564dSmrg esac # case $arg 2034266e564dSmrg ;; 2035266e564dSmrg esac # case $arg_mode 2036266e564dSmrg 2037266e564dSmrg # Aesthetically quote the previous argument. 20389ef0b394Smrg func_append_quoted base_compile "$lastarg" 2039266e564dSmrg done # for arg 2040266e564dSmrg 2041266e564dSmrg case $arg_mode in 2042266e564dSmrg arg) 2043698f425bSmrg func_fatal_error "you must specify an argument for -Xcompile" 2044266e564dSmrg ;; 2045266e564dSmrg target) 2046698f425bSmrg func_fatal_error "you must specify a target with \`-o'" 2047266e564dSmrg ;; 2048266e564dSmrg *) 2049266e564dSmrg # Get the name of the library object. 2050698f425bSmrg test -z "$libobj" && { 2051698f425bSmrg func_basename "$srcfile" 2052698f425bSmrg libobj="$func_basename_result" 2053698f425bSmrg } 2054266e564dSmrg ;; 2055266e564dSmrg esac 2056266e564dSmrg 2057266e564dSmrg # Recognize several different file suffixes. 2058266e564dSmrg # If the user specifies -o file.o, it is replaced with file.lo 2059266e564dSmrg case $libobj in 2060698f425bSmrg *.[cCFSifmso] | \ 2061698f425bSmrg *.ada | *.adb | *.ads | *.asm | \ 2062698f425bSmrg *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ 2063fb5e8d76Smrg *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) 2064698f425bSmrg func_xform "$libobj" 2065698f425bSmrg libobj=$func_xform_result 2066698f425bSmrg ;; 2067266e564dSmrg esac 2068266e564dSmrg 2069266e564dSmrg case $libobj in 2070698f425bSmrg *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; 2071266e564dSmrg *) 2072698f425bSmrg func_fatal_error "cannot determine name of library object from \`$libobj'" 2073266e564dSmrg ;; 2074266e564dSmrg esac 2075266e564dSmrg 2076266e564dSmrg func_infer_tag $base_compile 2077266e564dSmrg 2078266e564dSmrg for arg in $later; do 2079266e564dSmrg case $arg in 2080698f425bSmrg -shared) 2081698f425bSmrg test "$build_libtool_libs" != yes && \ 2082698f425bSmrg func_fatal_configuration "can not build a shared library" 2083698f425bSmrg build_old_libs=no 2084698f425bSmrg continue 2085698f425bSmrg ;; 2086698f425bSmrg 2087266e564dSmrg -static) 2088698f425bSmrg build_libtool_libs=no 2089266e564dSmrg build_old_libs=yes 2090266e564dSmrg continue 2091266e564dSmrg ;; 2092266e564dSmrg 2093266e564dSmrg -prefer-pic) 2094266e564dSmrg pic_mode=yes 2095266e564dSmrg continue 2096266e564dSmrg ;; 2097266e564dSmrg 2098266e564dSmrg -prefer-non-pic) 2099266e564dSmrg pic_mode=no 2100266e564dSmrg continue 2101266e564dSmrg ;; 2102266e564dSmrg esac 2103266e564dSmrg done 2104266e564dSmrg 2105698f425bSmrg func_quote_for_eval "$libobj" 2106698f425bSmrg test "X$libobj" != "X$func_quote_for_eval_result" \ 2107698f425bSmrg && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ 2108698f425bSmrg && func_warning "libobj name \`$libobj' may not contain shell special characters." 2109698f425bSmrg func_dirname_and_basename "$obj" "/" "" 2110698f425bSmrg objname="$func_basename_result" 2111698f425bSmrg xdir="$func_dirname_result" 2112266e564dSmrg lobj=${xdir}$objdir/$objname 2113266e564dSmrg 2114698f425bSmrg test -z "$base_compile" && \ 2115698f425bSmrg func_fatal_help "you must specify a compilation command" 2116266e564dSmrg 2117266e564dSmrg # Delete any leftover library objects. 2118266e564dSmrg if test "$build_old_libs" = yes; then 2119266e564dSmrg removelist="$obj $lobj $libobj ${libobj}T" 2120266e564dSmrg else 2121266e564dSmrg removelist="$lobj $libobj ${libobj}T" 2122266e564dSmrg fi 2123266e564dSmrg 2124266e564dSmrg # On Cygwin there's no "real" PIC flag so we must build both object types 2125266e564dSmrg case $host_os in 2126698f425bSmrg cygwin* | mingw* | pw32* | os2* | cegcc*) 2127266e564dSmrg pic_mode=default 2128266e564dSmrg ;; 2129266e564dSmrg esac 2130266e564dSmrg if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then 2131266e564dSmrg # non-PIC code in shared libraries is not supported 2132266e564dSmrg pic_mode=default 2133266e564dSmrg fi 2134266e564dSmrg 2135266e564dSmrg # Calculate the filename of the output object if compiler does 2136266e564dSmrg # not support -o with -c 2137266e564dSmrg if test "$compiler_c_o" = no; then 21389ef0b394Smrg output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} 2139266e564dSmrg lockfile="$output_obj.lock" 2140266e564dSmrg else 2141266e564dSmrg output_obj= 2142266e564dSmrg need_locks=no 2143266e564dSmrg lockfile= 2144266e564dSmrg fi 2145266e564dSmrg 2146266e564dSmrg # Lock this critical section if it is needed 2147266e564dSmrg # We use this script file to make the link, it avoids creating a new file 2148266e564dSmrg if test "$need_locks" = yes; then 2149698f425bSmrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 2150698f425bSmrg func_echo "Waiting for $lockfile to be removed" 2151266e564dSmrg sleep 2 2152266e564dSmrg done 2153266e564dSmrg elif test "$need_locks" = warn; then 2154266e564dSmrg if test -f "$lockfile"; then 2155698f425bSmrg $ECHO "\ 2156266e564dSmrg*** ERROR, $lockfile exists and contains: 2157266e564dSmrg`cat $lockfile 2>/dev/null` 2158266e564dSmrg 2159266e564dSmrgThis indicates that another process is trying to use the same 2160266e564dSmrgtemporary object file, and libtool could not work around it because 2161266e564dSmrgyour compiler does not support \`-c' and \`-o' together. If you 2162266e564dSmrgrepeat this compilation, it may succeed, by chance, but you had better 2163266e564dSmrgavoid parallel builds (make -j) in this platform, or get a better 2164266e564dSmrgcompiler." 2165266e564dSmrg 2166698f425bSmrg $opt_dry_run || $RM $removelist 2167266e564dSmrg exit $EXIT_FAILURE 2168266e564dSmrg fi 21699ef0b394Smrg func_append removelist " $output_obj" 2170698f425bSmrg $ECHO "$srcfile" > "$lockfile" 2171266e564dSmrg fi 2172266e564dSmrg 2173698f425bSmrg $opt_dry_run || $RM $removelist 21749ef0b394Smrg func_append removelist " $lockfile" 2175698f425bSmrg trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 2176698f425bSmrg 21779ef0b394Smrg func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 21789ef0b394Smrg srcfile=$func_to_tool_file_result 2179698f425bSmrg func_quote_for_eval "$srcfile" 2180698f425bSmrg qsrcfile=$func_quote_for_eval_result 2181266e564dSmrg 2182266e564dSmrg # Only build a PIC object if we are building libtool libraries. 2183266e564dSmrg if test "$build_libtool_libs" = yes; then 2184266e564dSmrg # Without this assignment, base_compile gets emptied. 2185266e564dSmrg fbsd_hideous_sh_bug=$base_compile 2186266e564dSmrg 2187266e564dSmrg if test "$pic_mode" != no; then 2188266e564dSmrg command="$base_compile $qsrcfile $pic_flag" 2189266e564dSmrg else 2190266e564dSmrg # Don't build PIC code 2191266e564dSmrg command="$base_compile $qsrcfile" 2192266e564dSmrg fi 2193266e564dSmrg 2194698f425bSmrg func_mkdir_p "$xdir$objdir" 2195266e564dSmrg 2196266e564dSmrg if test -z "$output_obj"; then 2197266e564dSmrg # Place PIC objects in $objdir 21989ef0b394Smrg func_append command " -o $lobj" 2199266e564dSmrg fi 2200266e564dSmrg 2201698f425bSmrg func_show_eval_locale "$command" \ 2202698f425bSmrg 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' 2203266e564dSmrg 2204266e564dSmrg if test "$need_locks" = warn && 2205266e564dSmrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2206698f425bSmrg $ECHO "\ 2207266e564dSmrg*** ERROR, $lockfile contains: 2208266e564dSmrg`cat $lockfile 2>/dev/null` 2209266e564dSmrg 2210266e564dSmrgbut it should contain: 2211266e564dSmrg$srcfile 2212266e564dSmrg 2213266e564dSmrgThis indicates that another process is trying to use the same 2214266e564dSmrgtemporary object file, and libtool could not work around it because 2215266e564dSmrgyour compiler does not support \`-c' and \`-o' together. If you 2216266e564dSmrgrepeat this compilation, it may succeed, by chance, but you had better 2217266e564dSmrgavoid parallel builds (make -j) in this platform, or get a better 2218266e564dSmrgcompiler." 2219266e564dSmrg 2220698f425bSmrg $opt_dry_run || $RM $removelist 2221266e564dSmrg exit $EXIT_FAILURE 2222266e564dSmrg fi 2223266e564dSmrg 2224266e564dSmrg # Just move the object if needed, then go on to compile the next one 2225266e564dSmrg if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then 2226698f425bSmrg func_show_eval '$MV "$output_obj" "$lobj"' \ 2227698f425bSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2228266e564dSmrg fi 2229266e564dSmrg 2230266e564dSmrg # Allow error messages only from the first compilation. 2231266e564dSmrg if test "$suppress_opt" = yes; then 2232698f425bSmrg suppress_output=' >/dev/null 2>&1' 2233266e564dSmrg fi 2234266e564dSmrg fi 2235266e564dSmrg 2236266e564dSmrg # Only build a position-dependent object if we build old libraries. 2237266e564dSmrg if test "$build_old_libs" = yes; then 2238266e564dSmrg if test "$pic_mode" != yes; then 2239266e564dSmrg # Don't build PIC code 2240698f425bSmrg command="$base_compile $qsrcfile$pie_flag" 2241266e564dSmrg else 2242266e564dSmrg command="$base_compile $qsrcfile $pic_flag" 2243266e564dSmrg fi 2244266e564dSmrg if test "$compiler_c_o" = yes; then 22459ef0b394Smrg func_append command " -o $obj" 2246266e564dSmrg fi 2247266e564dSmrg 2248266e564dSmrg # Suppress compiler output if we already did a PIC compilation. 22499ef0b394Smrg func_append command "$suppress_output" 2250698f425bSmrg func_show_eval_locale "$command" \ 2251698f425bSmrg '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 2252266e564dSmrg 2253266e564dSmrg if test "$need_locks" = warn && 2254266e564dSmrg test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then 2255698f425bSmrg $ECHO "\ 2256266e564dSmrg*** ERROR, $lockfile contains: 2257266e564dSmrg`cat $lockfile 2>/dev/null` 2258266e564dSmrg 2259266e564dSmrgbut it should contain: 2260266e564dSmrg$srcfile 2261266e564dSmrg 2262266e564dSmrgThis indicates that another process is trying to use the same 2263266e564dSmrgtemporary object file, and libtool could not work around it because 2264266e564dSmrgyour compiler does not support \`-c' and \`-o' together. If you 2265266e564dSmrgrepeat this compilation, it may succeed, by chance, but you had better 2266266e564dSmrgavoid parallel builds (make -j) in this platform, or get a better 2267266e564dSmrgcompiler." 2268266e564dSmrg 2269698f425bSmrg $opt_dry_run || $RM $removelist 2270266e564dSmrg exit $EXIT_FAILURE 2271266e564dSmrg fi 2272266e564dSmrg 2273266e564dSmrg # Just move the object if needed 2274266e564dSmrg if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then 2275698f425bSmrg func_show_eval '$MV "$output_obj" "$obj"' \ 2276698f425bSmrg 'error=$?; $opt_dry_run || $RM $removelist; exit $error' 2277266e564dSmrg fi 2278266e564dSmrg fi 2279266e564dSmrg 2280698f425bSmrg $opt_dry_run || { 2281698f425bSmrg func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" 2282266e564dSmrg 2283698f425bSmrg # Unlock the critical section if it was locked 2284698f425bSmrg if test "$need_locks" != no; then 2285698f425bSmrg removelist=$lockfile 2286698f425bSmrg $RM "$lockfile" 2287698f425bSmrg fi 2288698f425bSmrg } 2289266e564dSmrg 2290266e564dSmrg exit $EXIT_SUCCESS 2291698f425bSmrg} 2292266e564dSmrg 2293698f425bSmrg$opt_help || { 22949ef0b394Smrg test "$opt_mode" = compile && func_mode_compile ${1+"$@"} 2295698f425bSmrg} 2296266e564dSmrg 2297698f425bSmrgfunc_mode_help () 2298698f425bSmrg{ 2299698f425bSmrg # We need to display help for each of the modes. 23009ef0b394Smrg case $opt_mode in 2301698f425bSmrg "") 2302698f425bSmrg # Generic help is extracted from the usage comments 2303698f425bSmrg # at the start of this file. 2304698f425bSmrg func_help 2305698f425bSmrg ;; 2306266e564dSmrg 2307698f425bSmrg clean) 2308698f425bSmrg $ECHO \ 2309698f425bSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... 2310266e564dSmrg 2311698f425bSmrgRemove files from the build directory. 2312266e564dSmrg 2313698f425bSmrgRM is the name of the program to use to delete files associated with each FILE 2314698f425bSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2315698f425bSmrgto RM. 2316266e564dSmrg 2317698f425bSmrgIf FILE is a libtool library, object or program, all the files associated 2318698f425bSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM." 2319698f425bSmrg ;; 2320266e564dSmrg 2321698f425bSmrg compile) 2322698f425bSmrg $ECHO \ 2323698f425bSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE 2324266e564dSmrg 2325698f425bSmrgCompile a source file into a libtool library object. 2326266e564dSmrg 2327698f425bSmrgThis mode accepts the following additional options: 2328266e564dSmrg 2329698f425bSmrg -o OUTPUT-FILE set the output file name to OUTPUT-FILE 2330698f425bSmrg -no-suppress do not suppress compiler output for multiple passes 23319ef0b394Smrg -prefer-pic try to build PIC objects only 23329ef0b394Smrg -prefer-non-pic try to build non-PIC objects only 2333698f425bSmrg -shared do not build a \`.o' file suitable for static linking 2334698f425bSmrg -static only build a \`.o' file suitable for static linking 23359ef0b394Smrg -Wc,FLAG pass FLAG directly to the compiler 2336266e564dSmrg 2337698f425bSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file 2338698f425bSmrgfrom the given SOURCEFILE. 2339266e564dSmrg 2340698f425bSmrgThe output file name is determined by removing the directory component from 2341698f425bSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the 2342698f425bSmrglibrary object suffix, \`.lo'." 2343698f425bSmrg ;; 2344266e564dSmrg 2345698f425bSmrg execute) 2346698f425bSmrg $ECHO \ 2347698f425bSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... 2348266e564dSmrg 2349698f425bSmrgAutomatically set library path, then run a program. 2350266e564dSmrg 2351698f425bSmrgThis mode accepts the following additional options: 2352266e564dSmrg 2353698f425bSmrg -dlopen FILE add the directory containing FILE to the library path 2354266e564dSmrg 2355698f425bSmrgThis mode sets the library path environment variable according to \`-dlopen' 2356698f425bSmrgflags. 2357266e564dSmrg 2358698f425bSmrgIf any of the ARGS are libtool executable wrappers, then they are translated 2359698f425bSmrginto their corresponding uninstalled binary, and any of their required library 2360698f425bSmrgdirectories are added to the library path. 2361266e564dSmrg 2362698f425bSmrgThen, COMMAND is executed, with ARGS as arguments." 2363698f425bSmrg ;; 2364266e564dSmrg 2365698f425bSmrg finish) 2366698f425bSmrg $ECHO \ 2367698f425bSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... 2368266e564dSmrg 2369698f425bSmrgComplete the installation of libtool libraries. 2370266e564dSmrg 2371698f425bSmrgEach LIBDIR is a directory that contains libtool libraries. 2372266e564dSmrg 2373698f425bSmrgThe commands that this mode executes may require superuser privileges. Use 2374698f425bSmrgthe \`--dry-run' option if you just want to see what would be executed." 2375698f425bSmrg ;; 2376266e564dSmrg 2377698f425bSmrg install) 2378698f425bSmrg $ECHO \ 2379698f425bSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... 2380266e564dSmrg 2381698f425bSmrgInstall executables or libraries. 2382266e564dSmrg 2383698f425bSmrgINSTALL-COMMAND is the installation command. The first component should be 2384698f425bSmrgeither the \`install' or \`cp' program. 2385266e564dSmrg 2386698f425bSmrgThe following components of INSTALL-COMMAND are treated specially: 2387266e564dSmrg 23889ef0b394Smrg -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation 2389266e564dSmrg 2390698f425bSmrgThe rest of the components are interpreted as arguments to that command (only 2391698f425bSmrgBSD-compatible install options are recognized)." 2392698f425bSmrg ;; 2393266e564dSmrg 2394698f425bSmrg link) 2395698f425bSmrg $ECHO \ 2396698f425bSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... 2397266e564dSmrg 2398698f425bSmrgLink object files or libraries together to form another library, or to 2399698f425bSmrgcreate an executable program. 2400266e564dSmrg 2401698f425bSmrgLINK-COMMAND is a command using the C compiler that you would use to create 2402698f425bSmrga program from several object files. 2403266e564dSmrg 2404698f425bSmrgThe following components of LINK-COMMAND are treated specially: 2405266e564dSmrg 2406698f425bSmrg -all-static do not do any dynamic linking at all 2407698f425bSmrg -avoid-version do not add a version suffix if possible 24089ef0b394Smrg -bindir BINDIR specify path to binaries directory (for systems where 24099ef0b394Smrg libraries must be found in the PATH setting at runtime) 2410698f425bSmrg -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime 2411698f425bSmrg -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols 2412698f425bSmrg -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) 2413698f425bSmrg -export-symbols SYMFILE 2414698f425bSmrg try to export only the symbols listed in SYMFILE 2415698f425bSmrg -export-symbols-regex REGEX 2416698f425bSmrg try to export only the symbols matching REGEX 2417698f425bSmrg -LLIBDIR search LIBDIR for required installed libraries 2418698f425bSmrg -lNAME OUTPUT-FILE requires the installed library libNAME 2419698f425bSmrg -module build a library that can dlopened 2420698f425bSmrg -no-fast-install disable the fast-install mode 2421698f425bSmrg -no-install link a not-installable executable 2422698f425bSmrg -no-undefined declare that a library does not refer to external symbols 2423698f425bSmrg -o OUTPUT-FILE create OUTPUT-FILE from the specified objects 2424698f425bSmrg -objectlist FILE Use a list of object files found in FILE to specify objects 2425698f425bSmrg -precious-files-regex REGEX 2426698f425bSmrg don't remove output files matching REGEX 2427698f425bSmrg -release RELEASE specify package release information 2428698f425bSmrg -rpath LIBDIR the created library will eventually be installed in LIBDIR 2429698f425bSmrg -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries 2430698f425bSmrg -shared only do dynamic linking of libtool libraries 2431698f425bSmrg -shrext SUFFIX override the standard shared library file extension 2432698f425bSmrg -static do not do any dynamic linking of uninstalled libtool libraries 2433698f425bSmrg -static-libtool-libs 2434698f425bSmrg do not do any dynamic linking of libtool libraries 2435698f425bSmrg -version-info CURRENT[:REVISION[:AGE]] 2436698f425bSmrg specify library version info [each variable defaults to 0] 2437698f425bSmrg -weak LIBNAME declare that the target provides the LIBNAME interface 24389ef0b394Smrg -Wc,FLAG 24399ef0b394Smrg -Xcompiler FLAG pass linker-specific FLAG directly to the compiler 24409ef0b394Smrg -Wl,FLAG 24419ef0b394Smrg -Xlinker FLAG pass linker-specific FLAG directly to the linker 24429ef0b394Smrg -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 2443266e564dSmrg 2444698f425bSmrgAll other options (arguments beginning with \`-') are ignored. 2445266e564dSmrg 2446698f425bSmrgEvery other argument is treated as a filename. Files ending in \`.la' are 2447698f425bSmrgtreated as uninstalled libtool libraries, other files are standard or library 2448698f425bSmrgobject files. 2449c5629e66Smrg 2450698f425bSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created, 2451698f425bSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is 2452698f425bSmrgrequired, except when creating a convenience library. 2453266e564dSmrg 2454698f425bSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created 2455698f425bSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'. 2456266e564dSmrg 2457698f425bSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file 2458698f425bSmrgis created, otherwise an executable program is created." 2459266e564dSmrg ;; 2460266e564dSmrg 2461698f425bSmrg uninstall) 2462698f425bSmrg $ECHO \ 2463698f425bSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... 2464266e564dSmrg 2465698f425bSmrgRemove libraries from an installation directory. 2466266e564dSmrg 2467698f425bSmrgRM is the name of the program to use to delete files associated with each FILE 2468698f425bSmrg(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed 2469698f425bSmrgto RM. 2470266e564dSmrg 2471698f425bSmrgIf FILE is a libtool library, all the files associated with it are deleted. 2472698f425bSmrgOtherwise, only FILE itself is deleted using RM." 2473698f425bSmrg ;; 2474266e564dSmrg 2475698f425bSmrg *) 24769ef0b394Smrg func_fatal_help "invalid operation mode \`$opt_mode'" 2477698f425bSmrg ;; 2478698f425bSmrg esac 2479266e564dSmrg 24809ef0b394Smrg echo 2481698f425bSmrg $ECHO "Try \`$progname --help' for more information about other modes." 2482698f425bSmrg} 2483266e564dSmrg 24849ef0b394Smrg# Now that we've collected a possible --mode arg, show help if necessary 24859ef0b394Smrgif $opt_help; then 24869ef0b394Smrg if test "$opt_help" = :; then 24879ef0b394Smrg func_mode_help 24889ef0b394Smrg else 24899ef0b394Smrg { 24909ef0b394Smrg func_help noexit 24919ef0b394Smrg for opt_mode in compile link execute install finish uninstall clean; do 24929ef0b394Smrg func_mode_help 24939ef0b394Smrg done 24949ef0b394Smrg } | sed -n '1p; 2,$s/^Usage:/ or: /p' 24959ef0b394Smrg { 24969ef0b394Smrg func_help noexit 24979ef0b394Smrg for opt_mode in compile link execute install finish uninstall clean; do 24989ef0b394Smrg echo 24999ef0b394Smrg func_mode_help 25009ef0b394Smrg done 25019ef0b394Smrg } | 25029ef0b394Smrg sed '1d 25039ef0b394Smrg /^When reporting/,/^Report/{ 25049ef0b394Smrg H 25059ef0b394Smrg d 25069ef0b394Smrg } 25079ef0b394Smrg $x 25089ef0b394Smrg /information about other modes/d 25099ef0b394Smrg /more detailed .*MODE/d 25109ef0b394Smrg s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' 25119ef0b394Smrg fi 25129ef0b394Smrg exit $? 25139ef0b394Smrgfi 2514266e564dSmrg 2515266e564dSmrg 2516698f425bSmrg# func_mode_execute arg... 2517698f425bSmrgfunc_mode_execute () 2518698f425bSmrg{ 2519698f425bSmrg $opt_debug 2520698f425bSmrg # The first argument is the command name. 2521698f425bSmrg cmd="$nonopt" 2522698f425bSmrg test -z "$cmd" && \ 2523698f425bSmrg func_fatal_help "you must specify a COMMAND" 2524266e564dSmrg 2525698f425bSmrg # Handle -dlopen flags immediately. 25269ef0b394Smrg for file in $opt_dlopen; do 2527698f425bSmrg test -f "$file" \ 2528698f425bSmrg || func_fatal_help "\`$file' is not a file" 2529266e564dSmrg 2530698f425bSmrg dir= 2531698f425bSmrg case $file in 2532698f425bSmrg *.la) 25339ef0b394Smrg func_resolve_sysroot "$file" 25349ef0b394Smrg file=$func_resolve_sysroot_result 25359ef0b394Smrg 2536698f425bSmrg # Check to see that this really is a libtool archive. 2537698f425bSmrg func_lalib_unsafe_p "$file" \ 2538698f425bSmrg || func_fatal_help "\`$lib' is not a valid libtool archive" 2539266e564dSmrg 2540698f425bSmrg # Read the libtool library. 2541698f425bSmrg dlname= 2542698f425bSmrg library_names= 2543698f425bSmrg func_source "$file" 2544266e564dSmrg 2545698f425bSmrg # Skip this library if it cannot be dlopened. 2546698f425bSmrg if test -z "$dlname"; then 2547698f425bSmrg # Warn if it was a shared library. 2548698f425bSmrg test -n "$library_names" && \ 2549698f425bSmrg func_warning "\`$file' was not linked with \`-export-dynamic'" 2550698f425bSmrg continue 2551698f425bSmrg fi 2552266e564dSmrg 2553698f425bSmrg func_dirname "$file" "" "." 2554698f425bSmrg dir="$func_dirname_result" 2555266e564dSmrg 2556698f425bSmrg if test -f "$dir/$objdir/$dlname"; then 25579ef0b394Smrg func_append dir "/$objdir" 2558698f425bSmrg else 2559698f425bSmrg if test ! -f "$dir/$dlname"; then 2560698f425bSmrg func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 2561698f425bSmrg fi 2562698f425bSmrg fi 2563266e564dSmrg ;; 2564266e564dSmrg 2565698f425bSmrg *.lo) 2566698f425bSmrg # Just add the directory containing the .lo file. 2567698f425bSmrg func_dirname "$file" "" "." 2568698f425bSmrg dir="$func_dirname_result" 2569266e564dSmrg ;; 2570266e564dSmrg 2571698f425bSmrg *) 2572698f425bSmrg func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" 2573266e564dSmrg continue 2574266e564dSmrg ;; 2575698f425bSmrg esac 2576266e564dSmrg 2577698f425bSmrg # Get the absolute pathname. 2578698f425bSmrg absdir=`cd "$dir" && pwd` 2579698f425bSmrg test -n "$absdir" && dir="$absdir" 2580266e564dSmrg 2581698f425bSmrg # Now add the directory to shlibpath_var. 2582698f425bSmrg if eval "test -z \"\$$shlibpath_var\""; then 2583698f425bSmrg eval "$shlibpath_var=\"\$dir\"" 2584698f425bSmrg else 2585698f425bSmrg eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" 2586698f425bSmrg fi 2587698f425bSmrg done 2588266e564dSmrg 2589698f425bSmrg # This variable tells wrapper scripts just to set shlibpath_var 2590698f425bSmrg # rather than running their programs. 2591698f425bSmrg libtool_execute_magic="$magic" 2592266e564dSmrg 2593698f425bSmrg # Check if any of the arguments is a wrapper script. 2594698f425bSmrg args= 2595698f425bSmrg for file 2596698f425bSmrg do 2597698f425bSmrg case $file in 25989ef0b394Smrg -* | *.la | *.lo ) ;; 2599698f425bSmrg *) 2600698f425bSmrg # Do a test to see if this is really a libtool program. 2601698f425bSmrg if func_ltwrapper_script_p "$file"; then 2602698f425bSmrg func_source "$file" 2603698f425bSmrg # Transform arg to wrapped name. 2604698f425bSmrg file="$progdir/$program" 2605698f425bSmrg elif func_ltwrapper_executable_p "$file"; then 2606698f425bSmrg func_ltwrapper_scriptname "$file" 2607698f425bSmrg func_source "$func_ltwrapper_scriptname_result" 2608698f425bSmrg # Transform arg to wrapped name. 2609698f425bSmrg file="$progdir/$program" 2610698f425bSmrg fi 2611698f425bSmrg ;; 2612698f425bSmrg esac 2613698f425bSmrg # Quote arguments (to preserve shell metacharacters). 26149ef0b394Smrg func_append_quoted args "$file" 2615698f425bSmrg done 2616266e564dSmrg 2617698f425bSmrg if test "X$opt_dry_run" = Xfalse; then 2618698f425bSmrg if test -n "$shlibpath_var"; then 2619698f425bSmrg # Export the shlibpath_var. 2620698f425bSmrg eval "export $shlibpath_var" 2621698f425bSmrg fi 2622266e564dSmrg 2623698f425bSmrg # Restore saved environment variables 2624698f425bSmrg for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES 2625698f425bSmrg do 2626698f425bSmrg eval "if test \"\${save_$lt_var+set}\" = set; then 2627698f425bSmrg $lt_var=\$save_$lt_var; export $lt_var 2628266e564dSmrg else 2629698f425bSmrg $lt_unset $lt_var 2630698f425bSmrg fi" 2631698f425bSmrg done 2632266e564dSmrg 2633698f425bSmrg # Now prepare to actually exec the command. 2634698f425bSmrg exec_cmd="\$cmd$args" 2635698f425bSmrg else 2636698f425bSmrg # Display what would be done. 2637698f425bSmrg if test -n "$shlibpath_var"; then 2638698f425bSmrg eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" 26399ef0b394Smrg echo "export $shlibpath_var" 2640698f425bSmrg fi 2641698f425bSmrg $ECHO "$cmd$args" 2642698f425bSmrg exit $EXIT_SUCCESS 2643698f425bSmrg fi 2644698f425bSmrg} 2645266e564dSmrg 26469ef0b394Smrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"} 26479ef0b394Smrg 26489ef0b394Smrg 26499ef0b394Smrg# func_mode_finish arg... 26509ef0b394Smrgfunc_mode_finish () 26519ef0b394Smrg{ 26529ef0b394Smrg $opt_debug 26539ef0b394Smrg libs= 26549ef0b394Smrg libdirs= 26559ef0b394Smrg admincmds= 26569ef0b394Smrg 26579ef0b394Smrg for opt in "$nonopt" ${1+"$@"} 26589ef0b394Smrg do 26599ef0b394Smrg if test -d "$opt"; then 26609ef0b394Smrg func_append libdirs " $opt" 26619ef0b394Smrg 26629ef0b394Smrg elif test -f "$opt"; then 26639ef0b394Smrg if func_lalib_unsafe_p "$opt"; then 26649ef0b394Smrg func_append libs " $opt" 26659ef0b394Smrg else 26669ef0b394Smrg func_warning "\`$opt' is not a valid libtool archive" 26679ef0b394Smrg fi 26689ef0b394Smrg 26699ef0b394Smrg else 26709ef0b394Smrg func_fatal_error "invalid argument \`$opt'" 26719ef0b394Smrg fi 26729ef0b394Smrg done 2673266e564dSmrg 26749ef0b394Smrg if test -n "$libs"; then 26759ef0b394Smrg if test -n "$lt_sysroot"; then 26769ef0b394Smrg sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` 26779ef0b394Smrg sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" 26789ef0b394Smrg else 26799ef0b394Smrg sysroot_cmd= 26809ef0b394Smrg fi 2681266e564dSmrg 26829ef0b394Smrg # Remove sysroot references 26839ef0b394Smrg if $opt_dry_run; then 26849ef0b394Smrg for lib in $libs; do 26859ef0b394Smrg echo "removing references to $lt_sysroot and \`=' prefixes from $lib" 26869ef0b394Smrg done 26879ef0b394Smrg else 26889ef0b394Smrg tmpdir=`func_mktempdir` 26899ef0b394Smrg for lib in $libs; do 26909ef0b394Smrg sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ 26919ef0b394Smrg > $tmpdir/tmp-la 26929ef0b394Smrg mv -f $tmpdir/tmp-la $lib 26939ef0b394Smrg done 26949ef0b394Smrg ${RM}r "$tmpdir" 26959ef0b394Smrg fi 26969ef0b394Smrg fi 2697266e564dSmrg 2698698f425bSmrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 2699698f425bSmrg for libdir in $libdirs; do 2700698f425bSmrg if test -n "$finish_cmds"; then 2701698f425bSmrg # Do each command in the finish commands. 2702698f425bSmrg func_execute_cmds "$finish_cmds" 'admincmds="$admincmds 2703698f425bSmrg'"$cmd"'"' 2704266e564dSmrg fi 2705698f425bSmrg if test -n "$finish_eval"; then 2706698f425bSmrg # Do the single finish_eval. 2707698f425bSmrg eval cmds=\"$finish_eval\" 27089ef0b394Smrg $opt_dry_run || eval "$cmds" || func_append admincmds " 2709698f425bSmrg $cmds" 2710698f425bSmrg fi 2711698f425bSmrg done 2712698f425bSmrg fi 2713266e564dSmrg 2714698f425bSmrg # Exit here if they wanted silent mode. 2715698f425bSmrg $opt_silent && exit $EXIT_SUCCESS 2716266e564dSmrg 27179ef0b394Smrg if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 27189ef0b394Smrg echo "----------------------------------------------------------------------" 27199ef0b394Smrg echo "Libraries have been installed in:" 27209ef0b394Smrg for libdir in $libdirs; do 27219ef0b394Smrg $ECHO " $libdir" 27229ef0b394Smrg done 27239ef0b394Smrg echo 27249ef0b394Smrg echo "If you ever happen to want to link against installed libraries" 27259ef0b394Smrg echo "in a given directory, LIBDIR, you must either use libtool, and" 27269ef0b394Smrg echo "specify the full pathname of the library, or use the \`-LLIBDIR'" 27279ef0b394Smrg echo "flag during linking and do at least one of the following:" 27289ef0b394Smrg if test -n "$shlibpath_var"; then 27299ef0b394Smrg echo " - add LIBDIR to the \`$shlibpath_var' environment variable" 27309ef0b394Smrg echo " during execution" 27319ef0b394Smrg fi 27329ef0b394Smrg if test -n "$runpath_var"; then 27339ef0b394Smrg echo " - add LIBDIR to the \`$runpath_var' environment variable" 27349ef0b394Smrg echo " during linking" 27359ef0b394Smrg fi 27369ef0b394Smrg if test -n "$hardcode_libdir_flag_spec"; then 27379ef0b394Smrg libdir=LIBDIR 27389ef0b394Smrg eval flag=\"$hardcode_libdir_flag_spec\" 2739266e564dSmrg 27409ef0b394Smrg $ECHO " - use the \`$flag' linker flag" 27419ef0b394Smrg fi 27429ef0b394Smrg if test -n "$admincmds"; then 27439ef0b394Smrg $ECHO " - have your system administrator run these commands:$admincmds" 27449ef0b394Smrg fi 27459ef0b394Smrg if test -f /etc/ld.so.conf; then 27469ef0b394Smrg echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" 27479ef0b394Smrg fi 27489ef0b394Smrg echo 2749698f425bSmrg 27509ef0b394Smrg echo "See any operating system documentation about shared libraries for" 27519ef0b394Smrg case $host in 27529ef0b394Smrg solaris2.[6789]|solaris2.1[0-9]) 27539ef0b394Smrg echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" 27549ef0b394Smrg echo "pages." 27559ef0b394Smrg ;; 27569ef0b394Smrg *) 27579ef0b394Smrg echo "more information, such as the ld(1) and ld.so(8) manual pages." 27589ef0b394Smrg ;; 27599ef0b394Smrg esac 27609ef0b394Smrg echo "----------------------------------------------------------------------" 27619ef0b394Smrg fi 2762698f425bSmrg exit $EXIT_SUCCESS 2763698f425bSmrg} 2764266e564dSmrg 27659ef0b394Smrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"} 2766266e564dSmrg 2767c5629e66Smrg 2768698f425bSmrg# func_mode_install arg... 2769698f425bSmrgfunc_mode_install () 2770698f425bSmrg{ 2771698f425bSmrg $opt_debug 2772698f425bSmrg # There may be an optional sh(1) argument at the beginning of 2773698f425bSmrg # install_prog (especially on Windows NT). 2774698f425bSmrg if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || 2775698f425bSmrg # Allow the use of GNU shtool's install command. 27769ef0b394Smrg case $nonopt in *shtool*) :;; *) false;; esac; then 2777698f425bSmrg # Aesthetically quote it. 2778698f425bSmrg func_quote_for_eval "$nonopt" 2779698f425bSmrg install_prog="$func_quote_for_eval_result " 2780698f425bSmrg arg=$1 2781698f425bSmrg shift 2782698f425bSmrg else 2783698f425bSmrg install_prog= 2784698f425bSmrg arg=$nonopt 2785266e564dSmrg fi 2786266e564dSmrg 2787698f425bSmrg # The real first argument should be the name of the installation program. 2788698f425bSmrg # Aesthetically quote it. 2789698f425bSmrg func_quote_for_eval "$arg" 27909ef0b394Smrg func_append install_prog "$func_quote_for_eval_result" 27919ef0b394Smrg install_shared_prog=$install_prog 27929ef0b394Smrg case " $install_prog " in 27939ef0b394Smrg *[\\\ /]cp\ *) install_cp=: ;; 27949ef0b394Smrg *) install_cp=false ;; 27959ef0b394Smrg esac 2796266e564dSmrg 2797698f425bSmrg # We need to accept at least all the BSD install flags. 2798698f425bSmrg dest= 2799698f425bSmrg files= 2800698f425bSmrg opts= 2801698f425bSmrg prev= 2802698f425bSmrg install_type= 2803698f425bSmrg isdir=no 2804698f425bSmrg stripme= 28059ef0b394Smrg no_mode=: 2806698f425bSmrg for arg 2807698f425bSmrg do 28089ef0b394Smrg arg2= 2809698f425bSmrg if test -n "$dest"; then 28109ef0b394Smrg func_append files " $dest" 2811698f425bSmrg dest=$arg 2812698f425bSmrg continue 2813698f425bSmrg fi 2814266e564dSmrg 2815698f425bSmrg case $arg in 2816698f425bSmrg -d) isdir=yes ;; 2817698f425bSmrg -f) 28189ef0b394Smrg if $install_cp; then :; else 28199ef0b394Smrg prev=$arg 28209ef0b394Smrg fi 2821698f425bSmrg ;; 2822698f425bSmrg -g | -m | -o) 2823698f425bSmrg prev=$arg 2824698f425bSmrg ;; 2825698f425bSmrg -s) 2826698f425bSmrg stripme=" -s" 2827698f425bSmrg continue 2828698f425bSmrg ;; 2829698f425bSmrg -*) 2830698f425bSmrg ;; 2831698f425bSmrg *) 2832698f425bSmrg # If the previous option needed an argument, then skip it. 2833698f425bSmrg if test -n "$prev"; then 28349ef0b394Smrg if test "x$prev" = x-m && test -n "$install_override_mode"; then 28359ef0b394Smrg arg2=$install_override_mode 28369ef0b394Smrg no_mode=false 28379ef0b394Smrg fi 2838698f425bSmrg prev= 2839698f425bSmrg else 2840698f425bSmrg dest=$arg 2841698f425bSmrg continue 2842698f425bSmrg fi 2843698f425bSmrg ;; 2844698f425bSmrg esac 2845266e564dSmrg 2846698f425bSmrg # Aesthetically quote the argument. 2847698f425bSmrg func_quote_for_eval "$arg" 28489ef0b394Smrg func_append install_prog " $func_quote_for_eval_result" 28499ef0b394Smrg if test -n "$arg2"; then 28509ef0b394Smrg func_quote_for_eval "$arg2" 28519ef0b394Smrg fi 28529ef0b394Smrg func_append install_shared_prog " $func_quote_for_eval_result" 2853698f425bSmrg done 2854698f425bSmrg 2855698f425bSmrg test -z "$install_prog" && \ 2856698f425bSmrg func_fatal_help "you must specify an install program" 2857698f425bSmrg 2858698f425bSmrg test -n "$prev" && \ 2859698f425bSmrg func_fatal_help "the \`$prev' option requires an argument" 2860698f425bSmrg 28619ef0b394Smrg if test -n "$install_override_mode" && $no_mode; then 28629ef0b394Smrg if $install_cp; then :; else 28639ef0b394Smrg func_quote_for_eval "$install_override_mode" 28649ef0b394Smrg func_append install_shared_prog " -m $func_quote_for_eval_result" 28659ef0b394Smrg fi 28669ef0b394Smrg fi 28679ef0b394Smrg 2868698f425bSmrg if test -z "$files"; then 2869698f425bSmrg if test -z "$dest"; then 2870698f425bSmrg func_fatal_help "no file or destination specified" 2871698f425bSmrg else 2872698f425bSmrg func_fatal_help "you must specify a destination" 2873266e564dSmrg fi 2874266e564dSmrg fi 2875266e564dSmrg 2876698f425bSmrg # Strip any trailing slash from the destination. 2877698f425bSmrg func_stripname '' '/' "$dest" 2878698f425bSmrg dest=$func_stripname_result 2879266e564dSmrg 2880698f425bSmrg # Check to see that the destination is a directory. 2881698f425bSmrg test -d "$dest" && isdir=yes 2882698f425bSmrg if test "$isdir" = yes; then 2883698f425bSmrg destdir="$dest" 2884698f425bSmrg destname= 2885698f425bSmrg else 2886698f425bSmrg func_dirname_and_basename "$dest" "" "." 2887698f425bSmrg destdir="$func_dirname_result" 2888698f425bSmrg destname="$func_basename_result" 2889698f425bSmrg 2890698f425bSmrg # Not a directory, so check to see that there is only one file specified. 2891698f425bSmrg set dummy $files; shift 2892698f425bSmrg test "$#" -gt 1 && \ 2893698f425bSmrg func_fatal_help "\`$dest' is not a directory" 2894698f425bSmrg fi 2895698f425bSmrg case $destdir in 2896698f425bSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 2897266e564dSmrg *) 2898698f425bSmrg for file in $files; do 2899698f425bSmrg case $file in 2900698f425bSmrg *.lo) ;; 2901698f425bSmrg *) 2902698f425bSmrg func_fatal_help "\`$destdir' must be an absolute directory name" 2903698f425bSmrg ;; 2904698f425bSmrg esac 2905698f425bSmrg done 2906266e564dSmrg ;; 2907266e564dSmrg esac 2908266e564dSmrg 2909698f425bSmrg # This variable tells wrapper scripts just to set variables rather 2910698f425bSmrg # than running their programs. 2911698f425bSmrg libtool_install_magic="$magic" 2912266e564dSmrg 2913698f425bSmrg staticlibs= 2914698f425bSmrg future_libdirs= 2915698f425bSmrg current_libdirs= 2916698f425bSmrg for file in $files; do 2917266e564dSmrg 2918698f425bSmrg # Do each installation. 2919698f425bSmrg case $file in 2920698f425bSmrg *.$libext) 2921698f425bSmrg # Do the static libraries later. 29229ef0b394Smrg func_append staticlibs " $file" 2923698f425bSmrg ;; 2924698f425bSmrg 2925698f425bSmrg *.la) 29269ef0b394Smrg func_resolve_sysroot "$file" 29279ef0b394Smrg file=$func_resolve_sysroot_result 29289ef0b394Smrg 2929698f425bSmrg # Check to see that this really is a libtool archive. 2930698f425bSmrg func_lalib_unsafe_p "$file" \ 2931698f425bSmrg || func_fatal_help "\`$file' is not a valid libtool archive" 2932698f425bSmrg 2933698f425bSmrg library_names= 2934698f425bSmrg old_library= 2935698f425bSmrg relink_command= 2936698f425bSmrg func_source "$file" 2937698f425bSmrg 2938698f425bSmrg # Add the libdir to current_libdirs if it is the destination. 2939698f425bSmrg if test "X$destdir" = "X$libdir"; then 2940698f425bSmrg case "$current_libdirs " in 2941698f425bSmrg *" $libdir "*) ;; 29429ef0b394Smrg *) func_append current_libdirs " $libdir" ;; 2943266e564dSmrg esac 2944698f425bSmrg else 2945698f425bSmrg # Note the libdir as a future libdir. 2946698f425bSmrg case "$future_libdirs " in 2947698f425bSmrg *" $libdir "*) ;; 29489ef0b394Smrg *) func_append future_libdirs " $libdir" ;; 2949698f425bSmrg esac 2950698f425bSmrg fi 2951266e564dSmrg 2952698f425bSmrg func_dirname "$file" "/" "" 2953698f425bSmrg dir="$func_dirname_result" 29549ef0b394Smrg func_append dir "$objdir" 2955698f425bSmrg 2956698f425bSmrg if test -n "$relink_command"; then 2957698f425bSmrg # Determine the prefix the user has applied to our future dir. 29589ef0b394Smrg inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` 2959698f425bSmrg 2960698f425bSmrg # Don't allow the user to place us outside of our expected 2961698f425bSmrg # location b/c this prevents finding dependent libraries that 2962698f425bSmrg # are installed to the same prefix. 2963698f425bSmrg # At present, this check doesn't affect windows .dll's that 2964698f425bSmrg # are installed into $libdir/../bin (currently, that works fine) 2965698f425bSmrg # but it's something to keep an eye on. 2966698f425bSmrg test "$inst_prefix_dir" = "$destdir" && \ 2967698f425bSmrg func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" 2968698f425bSmrg 2969698f425bSmrg if test -n "$inst_prefix_dir"; then 2970698f425bSmrg # Stick the inst_prefix_dir data into the link command. 29719ef0b394Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` 2972698f425bSmrg else 29739ef0b394Smrg relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` 2974698f425bSmrg fi 2975698f425bSmrg 2976698f425bSmrg func_warning "relinking \`$file'" 2977698f425bSmrg func_show_eval "$relink_command" \ 2978698f425bSmrg 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' 2979698f425bSmrg fi 2980698f425bSmrg 2981698f425bSmrg # See the names of the shared library. 2982698f425bSmrg set dummy $library_names; shift 2983698f425bSmrg if test -n "$1"; then 2984698f425bSmrg realname="$1" 2985698f425bSmrg shift 2986698f425bSmrg 2987698f425bSmrg srcname="$realname" 2988698f425bSmrg test -n "$relink_command" && srcname="$realname"T 2989698f425bSmrg 2990698f425bSmrg # Install the shared library and build the symlinks. 29919ef0b394Smrg func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 2992698f425bSmrg 'exit $?' 2993698f425bSmrg tstripme="$stripme" 2994698f425bSmrg case $host_os in 2995698f425bSmrg cygwin* | mingw* | pw32* | cegcc*) 2996698f425bSmrg case $realname in 2997698f425bSmrg *.dll.a) 2998698f425bSmrg tstripme="" 2999698f425bSmrg ;; 3000698f425bSmrg esac 3001266e564dSmrg ;; 3002266e564dSmrg esac 3003698f425bSmrg if test -n "$tstripme" && test -n "$striplib"; then 3004698f425bSmrg func_show_eval "$striplib $destdir/$realname" 'exit $?' 3005c5629e66Smrg fi 3006698f425bSmrg 3007698f425bSmrg if test "$#" -gt 0; then 3008698f425bSmrg # Delete the old symlinks, and create new ones. 3009698f425bSmrg # Try `ln -sf' first, because the `ln' binary might depend on 3010698f425bSmrg # the symlink we replace! Solaris /bin/ln does not understand -f, 3011698f425bSmrg # so we also need to try rm && ln -s. 3012698f425bSmrg for linkname 3013698f425bSmrg do 3014698f425bSmrg test "$linkname" != "$realname" \ 3015698f425bSmrg && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" 3016266e564dSmrg done 3017266e564dSmrg fi 3018266e564dSmrg 3019698f425bSmrg # Do each command in the postinstall commands. 3020698f425bSmrg lib="$destdir/$realname" 3021698f425bSmrg func_execute_cmds "$postinstall_cmds" 'exit $?' 3022266e564dSmrg fi 3023266e564dSmrg 3024698f425bSmrg # Install the pseudo-library for information purposes. 3025698f425bSmrg func_basename "$file" 3026698f425bSmrg name="$func_basename_result" 3027698f425bSmrg instname="$dir/$name"i 3028698f425bSmrg func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' 3029266e564dSmrg 3030698f425bSmrg # Maybe install the static library, too. 30319ef0b394Smrg test -n "$old_library" && func_append staticlibs " $dir/$old_library" 3032698f425bSmrg ;; 3033266e564dSmrg 3034698f425bSmrg *.lo) 3035698f425bSmrg # Install (i.e. copy) a libtool object. 3036266e564dSmrg 3037698f425bSmrg # Figure out destination file name, if it wasn't already specified. 3038698f425bSmrg if test -n "$destname"; then 3039698f425bSmrg destfile="$destdir/$destname" 3040698f425bSmrg else 3041698f425bSmrg func_basename "$file" 3042698f425bSmrg destfile="$func_basename_result" 3043698f425bSmrg destfile="$destdir/$destfile" 3044698f425bSmrg fi 3045698f425bSmrg 3046698f425bSmrg # Deduce the name of the destination old-style object file. 3047698f425bSmrg case $destfile in 3048698f425bSmrg *.lo) 3049698f425bSmrg func_lo2o "$destfile" 3050698f425bSmrg staticdest=$func_lo2o_result 3051698f425bSmrg ;; 3052698f425bSmrg *.$objext) 3053698f425bSmrg staticdest="$destfile" 3054698f425bSmrg destfile= 3055698f425bSmrg ;; 3056698f425bSmrg *) 3057698f425bSmrg func_fatal_help "cannot copy a libtool object to \`$destfile'" 3058698f425bSmrg ;; 3059266e564dSmrg esac 3060266e564dSmrg 3061698f425bSmrg # Install the libtool object if requested. 3062698f425bSmrg test -n "$destfile" && \ 3063698f425bSmrg func_show_eval "$install_prog $file $destfile" 'exit $?' 3064698f425bSmrg 3065698f425bSmrg # Install the old object if enabled. 3066698f425bSmrg if test "$build_old_libs" = yes; then 3067698f425bSmrg # Deduce the name of the old-style object file. 3068698f425bSmrg func_lo2o "$file" 3069698f425bSmrg staticobj=$func_lo2o_result 3070698f425bSmrg func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' 3071266e564dSmrg fi 3072698f425bSmrg exit $EXIT_SUCCESS 3073698f425bSmrg ;; 3074266e564dSmrg 3075698f425bSmrg *) 3076698f425bSmrg # Figure out destination file name, if it wasn't already specified. 3077698f425bSmrg if test -n "$destname"; then 3078698f425bSmrg destfile="$destdir/$destname" 3079698f425bSmrg else 3080698f425bSmrg func_basename "$file" 3081698f425bSmrg destfile="$func_basename_result" 3082698f425bSmrg destfile="$destdir/$destfile" 3083698f425bSmrg fi 3084266e564dSmrg 3085698f425bSmrg # If the file is missing, and there is a .exe on the end, strip it 3086698f425bSmrg # because it is most likely a libtool script we actually want to 3087698f425bSmrg # install 3088698f425bSmrg stripped_ext="" 3089698f425bSmrg case $file in 3090698f425bSmrg *.exe) 3091698f425bSmrg if test ! -f "$file"; then 3092698f425bSmrg func_stripname '' '.exe' "$file" 3093698f425bSmrg file=$func_stripname_result 3094698f425bSmrg stripped_ext=".exe" 3095698f425bSmrg fi 3096698f425bSmrg ;; 3097698f425bSmrg esac 3098266e564dSmrg 3099698f425bSmrg # Do a test to see if this is really a libtool program. 3100698f425bSmrg case $host in 3101698f425bSmrg *cygwin* | *mingw*) 3102698f425bSmrg if func_ltwrapper_executable_p "$file"; then 3103698f425bSmrg func_ltwrapper_scriptname "$file" 3104698f425bSmrg wrapper=$func_ltwrapper_scriptname_result 3105698f425bSmrg else 3106698f425bSmrg func_stripname '' '.exe' "$file" 3107698f425bSmrg wrapper=$func_stripname_result 3108698f425bSmrg fi 3109698f425bSmrg ;; 3110698f425bSmrg *) 3111698f425bSmrg wrapper=$file 3112698f425bSmrg ;; 3113698f425bSmrg esac 3114698f425bSmrg if func_ltwrapper_script_p "$wrapper"; then 3115698f425bSmrg notinst_deplibs= 3116698f425bSmrg relink_command= 3117266e564dSmrg 3118698f425bSmrg func_source "$wrapper" 3119698f425bSmrg 3120698f425bSmrg # Check the variables that should have been set. 3121698f425bSmrg test -z "$generated_by_libtool_version" && \ 3122698f425bSmrg func_fatal_error "invalid libtool wrapper script \`$wrapper'" 3123698f425bSmrg 3124698f425bSmrg finalize=yes 3125698f425bSmrg for lib in $notinst_deplibs; do 3126698f425bSmrg # Check to see that each library is installed. 3127698f425bSmrg libdir= 3128698f425bSmrg if test -f "$lib"; then 3129698f425bSmrg func_source "$lib" 3130698f425bSmrg fi 31319ef0b394Smrg libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test 3132698f425bSmrg if test -n "$libdir" && test ! -f "$libfile"; then 3133698f425bSmrg func_warning "\`$lib' has not been installed in \`$libdir'" 3134698f425bSmrg finalize=no 3135698f425bSmrg fi 3136698f425bSmrg done 3137698f425bSmrg 3138698f425bSmrg relink_command= 3139698f425bSmrg func_source "$wrapper" 3140698f425bSmrg 3141698f425bSmrg outputname= 3142698f425bSmrg if test "$fast_install" = no && test -n "$relink_command"; then 3143698f425bSmrg $opt_dry_run || { 3144698f425bSmrg if test "$finalize" = yes; then 3145698f425bSmrg tmpdir=`func_mktempdir` 3146698f425bSmrg func_basename "$file$stripped_ext" 3147698f425bSmrg file="$func_basename_result" 3148698f425bSmrg outputname="$tmpdir/$file" 3149698f425bSmrg # Replace the output file specification. 31509ef0b394Smrg relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` 3151698f425bSmrg 3152698f425bSmrg $opt_silent || { 3153698f425bSmrg func_quote_for_expand "$relink_command" 3154698f425bSmrg eval "func_echo $func_quote_for_expand_result" 3155698f425bSmrg } 3156698f425bSmrg if eval "$relink_command"; then : 3157698f425bSmrg else 3158698f425bSmrg func_error "error: relink \`$file' with the above command before installing it" 3159698f425bSmrg $opt_dry_run || ${RM}r "$tmpdir" 3160698f425bSmrg continue 3161698f425bSmrg fi 3162698f425bSmrg file="$outputname" 3163698f425bSmrg else 3164698f425bSmrg func_warning "cannot relink \`$file'" 3165698f425bSmrg fi 3166698f425bSmrg } 3167266e564dSmrg else 3168698f425bSmrg # Install the binary that we compiled earlier. 31699ef0b394Smrg file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` 3170266e564dSmrg fi 3171698f425bSmrg fi 3172266e564dSmrg 3173698f425bSmrg # remove .exe since cygwin /usr/bin/install will append another 3174698f425bSmrg # one anyway 3175698f425bSmrg case $install_prog,$host in 3176698f425bSmrg */usr/bin/install*,*cygwin*) 3177698f425bSmrg case $file:$destfile in 3178698f425bSmrg *.exe:*.exe) 3179698f425bSmrg # this is ok 3180698f425bSmrg ;; 3181698f425bSmrg *.exe:*) 3182698f425bSmrg destfile=$destfile.exe 3183698f425bSmrg ;; 3184698f425bSmrg *:*.exe) 3185698f425bSmrg func_stripname '' '.exe' "$destfile" 3186698f425bSmrg destfile=$func_stripname_result 3187698f425bSmrg ;; 3188698f425bSmrg esac 3189266e564dSmrg ;; 3190266e564dSmrg esac 3191698f425bSmrg func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' 3192698f425bSmrg $opt_dry_run || if test -n "$outputname"; then 3193698f425bSmrg ${RM}r "$tmpdir" 3194698f425bSmrg fi 3195698f425bSmrg ;; 3196698f425bSmrg esac 3197698f425bSmrg done 3198266e564dSmrg 3199698f425bSmrg for file in $staticlibs; do 3200698f425bSmrg func_basename "$file" 3201698f425bSmrg name="$func_basename_result" 3202698f425bSmrg 3203698f425bSmrg # Set up the ranlib parameters. 3204698f425bSmrg oldlib="$destdir/$name" 3205fb5e8d76Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 3206fb5e8d76Smrg tool_oldlib=$func_to_tool_file_result 3207698f425bSmrg 3208698f425bSmrg func_show_eval "$install_prog \$file \$oldlib" 'exit $?' 3209698f425bSmrg 3210698f425bSmrg if test -n "$stripme" && test -n "$old_striplib"; then 3211fb5e8d76Smrg func_show_eval "$old_striplib $tool_oldlib" 'exit $?' 3212698f425bSmrg fi 3213698f425bSmrg 3214698f425bSmrg # Do each command in the postinstall commands. 3215698f425bSmrg func_execute_cmds "$old_postinstall_cmds" 'exit $?' 3216698f425bSmrg done 3217698f425bSmrg 3218698f425bSmrg test -n "$future_libdirs" && \ 3219698f425bSmrg func_warning "remember to run \`$progname --finish$future_libdirs'" 3220698f425bSmrg 3221698f425bSmrg if test -n "$current_libdirs"; then 3222698f425bSmrg # Maybe just do a dry run. 3223698f425bSmrg $opt_dry_run && current_libdirs=" -n$current_libdirs" 3224698f425bSmrg exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' 3225698f425bSmrg else 3226698f425bSmrg exit $EXIT_SUCCESS 3227698f425bSmrg fi 3228698f425bSmrg} 3229698f425bSmrg 32309ef0b394Smrgtest "$opt_mode" = install && func_mode_install ${1+"$@"} 3231698f425bSmrg 3232698f425bSmrg 3233698f425bSmrg# func_generate_dlsyms outputname originator pic_p 3234698f425bSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with 3235698f425bSmrg# a dlpreopen symbol table. 3236698f425bSmrgfunc_generate_dlsyms () 3237698f425bSmrg{ 3238698f425bSmrg $opt_debug 3239698f425bSmrg my_outputname="$1" 3240698f425bSmrg my_originator="$2" 3241698f425bSmrg my_pic_p="${3-no}" 3242698f425bSmrg my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` 3243698f425bSmrg my_dlsyms= 3244698f425bSmrg 3245698f425bSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 3246698f425bSmrg if test -n "$NM" && test -n "$global_symbol_pipe"; then 3247698f425bSmrg my_dlsyms="${my_outputname}S.c" 3248698f425bSmrg else 3249698f425bSmrg func_error "not configured to extract global symbols from dlpreopened files" 3250698f425bSmrg fi 3251698f425bSmrg fi 3252698f425bSmrg 3253698f425bSmrg if test -n "$my_dlsyms"; then 3254698f425bSmrg case $my_dlsyms in 3255698f425bSmrg "") ;; 3256698f425bSmrg *.c) 3257698f425bSmrg # Discover the nlist of each of the dlfiles. 3258698f425bSmrg nlist="$output_objdir/${my_outputname}.nm" 3259698f425bSmrg 3260698f425bSmrg func_show_eval "$RM $nlist ${nlist}S ${nlist}T" 3261698f425bSmrg 3262698f425bSmrg # Parse the name list into a source file. 3263698f425bSmrg func_verbose "creating $output_objdir/$my_dlsyms" 3264698f425bSmrg 3265698f425bSmrg $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ 3266698f425bSmrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ 3267698f425bSmrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ 3268698f425bSmrg 3269698f425bSmrg#ifdef __cplusplus 3270698f425bSmrgextern \"C\" { 3271698f425bSmrg#endif 3272698f425bSmrg 32739ef0b394Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) 32749ef0b394Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" 32759ef0b394Smrg#endif 32769ef0b394Smrg 32779ef0b394Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ 32789ef0b394Smrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) 32799ef0b394Smrg/* DATA imports from DLLs on WIN32 con't be const, because runtime 32809ef0b394Smrg relocations are performed -- see ld's documentation on pseudo-relocs. */ 32819ef0b394Smrg# define LT_DLSYM_CONST 32829ef0b394Smrg#elif defined(__osf__) 32839ef0b394Smrg/* This system does not cope well with relocations in const data. */ 32849ef0b394Smrg# define LT_DLSYM_CONST 32859ef0b394Smrg#else 32869ef0b394Smrg# define LT_DLSYM_CONST const 32879ef0b394Smrg#endif 32889ef0b394Smrg 3289698f425bSmrg/* External symbol declarations for the compiler. */\ 3290698f425bSmrg" 3291698f425bSmrg 3292698f425bSmrg if test "$dlself" = yes; then 3293698f425bSmrg func_verbose "generating symbol list for \`$output'" 3294698f425bSmrg 3295698f425bSmrg $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" 3296698f425bSmrg 3297698f425bSmrg # Add our own program objects to the symbol list. 32989ef0b394Smrg progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` 3299698f425bSmrg for progfile in $progfiles; do 33009ef0b394Smrg func_to_tool_file "$progfile" func_convert_file_msys_to_w32 33019ef0b394Smrg func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" 33029ef0b394Smrg $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" 3303698f425bSmrg done 3304698f425bSmrg 3305698f425bSmrg if test -n "$exclude_expsyms"; then 3306698f425bSmrg $opt_dry_run || { 3307698f425bSmrg eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' 3308698f425bSmrg eval '$MV "$nlist"T "$nlist"' 3309698f425bSmrg } 3310266e564dSmrg fi 3311698f425bSmrg 3312698f425bSmrg if test -n "$export_symbols_regex"; then 3313698f425bSmrg $opt_dry_run || { 3314698f425bSmrg eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' 3315698f425bSmrg eval '$MV "$nlist"T "$nlist"' 3316698f425bSmrg } 3317698f425bSmrg fi 3318698f425bSmrg 3319698f425bSmrg # Prepare the list of exported symbols 3320698f425bSmrg if test -z "$export_symbols"; then 3321698f425bSmrg export_symbols="$output_objdir/$outputname.exp" 3322698f425bSmrg $opt_dry_run || { 3323698f425bSmrg $RM $export_symbols 3324698f425bSmrg eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' 3325698f425bSmrg case $host in 3326698f425bSmrg *cygwin* | *mingw* | *cegcc* ) 3327698f425bSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3328698f425bSmrg eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' 3329698f425bSmrg ;; 3330698f425bSmrg esac 3331698f425bSmrg } 3332266e564dSmrg else 3333698f425bSmrg $opt_dry_run || { 3334698f425bSmrg eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' 3335698f425bSmrg eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' 3336698f425bSmrg eval '$MV "$nlist"T "$nlist"' 3337698f425bSmrg case $host in 33389ef0b394Smrg *cygwin* | *mingw* | *cegcc* ) 3339698f425bSmrg eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' 3340698f425bSmrg eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' 3341698f425bSmrg ;; 3342698f425bSmrg esac 3343698f425bSmrg } 3344266e564dSmrg fi 3345698f425bSmrg fi 3346266e564dSmrg 3347698f425bSmrg for dlprefile in $dlprefiles; do 3348698f425bSmrg func_verbose "extracting global C symbols from \`$dlprefile'" 3349698f425bSmrg func_basename "$dlprefile" 3350698f425bSmrg name="$func_basename_result" 33519ef0b394Smrg case $host in 33529ef0b394Smrg *cygwin* | *mingw* | *cegcc* ) 33539ef0b394Smrg # if an import library, we need to obtain dlname 33549ef0b394Smrg if func_win32_import_lib_p "$dlprefile"; then 33559ef0b394Smrg func_tr_sh "$dlprefile" 33569ef0b394Smrg eval "curr_lafile=\$libfile_$func_tr_sh_result" 33579ef0b394Smrg dlprefile_dlbasename="" 33589ef0b394Smrg if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then 33599ef0b394Smrg # Use subshell, to avoid clobbering current variable values 33609ef0b394Smrg dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` 33619ef0b394Smrg if test -n "$dlprefile_dlname" ; then 33629ef0b394Smrg func_basename "$dlprefile_dlname" 33639ef0b394Smrg dlprefile_dlbasename="$func_basename_result" 33649ef0b394Smrg else 33659ef0b394Smrg # no lafile. user explicitly requested -dlpreopen <import library>. 33669ef0b394Smrg $sharedlib_from_linklib_cmd "$dlprefile" 33679ef0b394Smrg dlprefile_dlbasename=$sharedlib_from_linklib_result 33689ef0b394Smrg fi 33699ef0b394Smrg fi 33709ef0b394Smrg $opt_dry_run || { 33719ef0b394Smrg if test -n "$dlprefile_dlbasename" ; then 33729ef0b394Smrg eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' 33739ef0b394Smrg else 33749ef0b394Smrg func_warning "Could not compute DLL name from $name" 33759ef0b394Smrg eval '$ECHO ": $name " >> "$nlist"' 33769ef0b394Smrg fi 33779ef0b394Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 33789ef0b394Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | 33799ef0b394Smrg $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" 33809ef0b394Smrg } 33819ef0b394Smrg else # not an import lib 33829ef0b394Smrg $opt_dry_run || { 33839ef0b394Smrg eval '$ECHO ": $name " >> "$nlist"' 33849ef0b394Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 33859ef0b394Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 33869ef0b394Smrg } 33879ef0b394Smrg fi 33889ef0b394Smrg ;; 33899ef0b394Smrg *) 33909ef0b394Smrg $opt_dry_run || { 33919ef0b394Smrg eval '$ECHO ": $name " >> "$nlist"' 33929ef0b394Smrg func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 33939ef0b394Smrg eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" 33949ef0b394Smrg } 33959ef0b394Smrg ;; 33969ef0b394Smrg esac 3397698f425bSmrg done 3398698f425bSmrg 3399698f425bSmrg $opt_dry_run || { 3400698f425bSmrg # Make sure we have at least an empty file. 3401698f425bSmrg test -f "$nlist" || : > "$nlist" 3402698f425bSmrg 3403698f425bSmrg if test -n "$exclude_expsyms"; then 3404698f425bSmrg $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T 3405698f425bSmrg $MV "$nlist"T "$nlist" 3406266e564dSmrg fi 3407698f425bSmrg 3408698f425bSmrg # Try sorting and uniquifying the output. 3409698f425bSmrg if $GREP -v "^: " < "$nlist" | 3410698f425bSmrg if sort -k 3 </dev/null >/dev/null 2>&1; then 3411698f425bSmrg sort -k 3 3412698f425bSmrg else 3413698f425bSmrg sort +2 3414698f425bSmrg fi | 3415698f425bSmrg uniq > "$nlist"S; then 3416698f425bSmrg : 3417266e564dSmrg else 3418698f425bSmrg $GREP -v "^: " < "$nlist" > "$nlist"S 3419266e564dSmrg fi 3420266e564dSmrg 3421698f425bSmrg if test -f "$nlist"S; then 3422698f425bSmrg eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' 3423266e564dSmrg else 34249ef0b394Smrg echo '/* NONE */' >> "$output_objdir/$my_dlsyms" 3425266e564dSmrg fi 3426266e564dSmrg 34279ef0b394Smrg echo >> "$output_objdir/$my_dlsyms" "\ 3428266e564dSmrg 3429698f425bSmrg/* The mapping between symbol names and symbols. */ 3430698f425bSmrgtypedef struct { 3431698f425bSmrg const char *name; 3432698f425bSmrg void *address; 3433698f425bSmrg} lt_dlsymlist; 34349ef0b394Smrgextern LT_DLSYM_CONST lt_dlsymlist 3435698f425bSmrglt_${my_prefix}_LTX_preloaded_symbols[]; 34369ef0b394SmrgLT_DLSYM_CONST lt_dlsymlist 3437698f425bSmrglt_${my_prefix}_LTX_preloaded_symbols[] = 3438698f425bSmrg{\ 3439698f425bSmrg { \"$my_originator\", (void *) 0 }," 3440266e564dSmrg 3441698f425bSmrg case $need_lib_prefix in 3442698f425bSmrg no) 3443698f425bSmrg eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" 3444698f425bSmrg ;; 3445698f425bSmrg *) 3446698f425bSmrg eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" 3447698f425bSmrg ;; 3448698f425bSmrg esac 34499ef0b394Smrg echo >> "$output_objdir/$my_dlsyms" "\ 3450698f425bSmrg {0, (void *) 0} 3451698f425bSmrg}; 3452266e564dSmrg 3453698f425bSmrg/* This works around a problem in FreeBSD linker */ 3454698f425bSmrg#ifdef FREEBSD_WORKAROUND 3455698f425bSmrgstatic const void *lt_preloaded_setup() { 3456698f425bSmrg return lt_${my_prefix}_LTX_preloaded_symbols; 3457698f425bSmrg} 3458698f425bSmrg#endif 3459698f425bSmrg 3460698f425bSmrg#ifdef __cplusplus 3461698f425bSmrg} 3462698f425bSmrg#endif\ 3463698f425bSmrg" 3464698f425bSmrg } # !$opt_dry_run 3465698f425bSmrg 3466698f425bSmrg pic_flag_for_symtable= 3467698f425bSmrg case "$compile_command " in 3468698f425bSmrg *" -static "*) ;; 3469698f425bSmrg *) 3470698f425bSmrg case $host in 3471698f425bSmrg # compiling the symbol table file with pic_flag works around 3472698f425bSmrg # a FreeBSD bug that causes programs to crash when -lm is 3473698f425bSmrg # linked before any other PIC object. But we must not use 3474698f425bSmrg # pic_flag when linking with -static. The problem exists in 3475698f425bSmrg # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. 3476fb5e8d76Smrg *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) 3477698f425bSmrg pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; 3478698f425bSmrg *-*-hpux*) 3479698f425bSmrg pic_flag_for_symtable=" $pic_flag" ;; 3480698f425bSmrg *) 3481698f425bSmrg if test "X$my_pic_p" != Xno; then 3482698f425bSmrg pic_flag_for_symtable=" $pic_flag" 3483266e564dSmrg fi 3484698f425bSmrg ;; 3485698f425bSmrg esac 3486698f425bSmrg ;; 3487698f425bSmrg esac 3488698f425bSmrg symtab_cflags= 3489698f425bSmrg for arg in $LTCFLAGS; do 3490698f425bSmrg case $arg in 3491698f425bSmrg -pie | -fpie | -fPIE) ;; 34929ef0b394Smrg *) func_append symtab_cflags " $arg" ;; 3493698f425bSmrg esac 3494698f425bSmrg done 3495266e564dSmrg 3496698f425bSmrg # Now compile the dynamic symbol file. 3497698f425bSmrg func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' 3498266e564dSmrg 3499698f425bSmrg # Clean up the generated files. 3500698f425bSmrg func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' 3501266e564dSmrg 3502698f425bSmrg # Transform the symbol file into the correct name. 3503698f425bSmrg symfileobj="$output_objdir/${my_outputname}S.$objext" 3504698f425bSmrg case $host in 3505698f425bSmrg *cygwin* | *mingw* | *cegcc* ) 3506698f425bSmrg if test -f "$output_objdir/$my_outputname.def"; then 35079ef0b394Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 35089ef0b394Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` 3509698f425bSmrg else 35109ef0b394Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35119ef0b394Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3512266e564dSmrg fi 3513698f425bSmrg ;; 3514698f425bSmrg *) 35159ef0b394Smrg compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` 35169ef0b394Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` 3517698f425bSmrg ;; 3518698f425bSmrg esac 3519698f425bSmrg ;; 3520698f425bSmrg *) 3521698f425bSmrg func_fatal_error "unknown suffix for \`$my_dlsyms'" 3522698f425bSmrg ;; 3523698f425bSmrg esac 3524698f425bSmrg else 3525698f425bSmrg # We keep going just in case the user didn't refer to 3526698f425bSmrg # lt_preloaded_symbols. The linker will fail if global_symbol_pipe 3527698f425bSmrg # really was required. 3528266e564dSmrg 3529698f425bSmrg # Nullify the symbol file. 35309ef0b394Smrg compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` 35319ef0b394Smrg finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` 3532698f425bSmrg fi 3533698f425bSmrg} 3534266e564dSmrg 3535698f425bSmrg# func_win32_libid arg 3536698f425bSmrg# return the library type of file 'arg' 3537698f425bSmrg# 3538698f425bSmrg# Need a lot of goo to handle *both* DLLs and import libs 3539698f425bSmrg# Has to be a shell function in order to 'eat' the argument 3540698f425bSmrg# that is supplied when $file_magic_command is called. 35419ef0b394Smrg# Despite the name, also deal with 64 bit binaries. 3542698f425bSmrgfunc_win32_libid () 3543698f425bSmrg{ 3544698f425bSmrg $opt_debug 3545698f425bSmrg win32_libid_type="unknown" 3546698f425bSmrg win32_fileres=`file -L $1 2>/dev/null` 3547698f425bSmrg case $win32_fileres in 3548698f425bSmrg *ar\ archive\ import\ library*) # definitely import 3549698f425bSmrg win32_libid_type="x86 archive import" 3550698f425bSmrg ;; 3551698f425bSmrg *ar\ archive*) # could be an import, or static 35529ef0b394Smrg # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. 3553698f425bSmrg if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | 35549ef0b394Smrg $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then 35559ef0b394Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 35569ef0b394Smrg win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | 3557698f425bSmrg $SED -n -e ' 3558698f425bSmrg 1,100{ 3559698f425bSmrg / I /{ 3560698f425bSmrg s,.*,import, 3561698f425bSmrg p 3562698f425bSmrg q 3563698f425bSmrg } 3564698f425bSmrg }'` 3565698f425bSmrg case $win32_nmres in 3566698f425bSmrg import*) win32_libid_type="x86 archive import";; 3567698f425bSmrg *) win32_libid_type="x86 archive static";; 3568698f425bSmrg esac 3569698f425bSmrg fi 3570698f425bSmrg ;; 3571698f425bSmrg *DLL*) 3572698f425bSmrg win32_libid_type="x86 DLL" 3573698f425bSmrg ;; 3574698f425bSmrg *executable*) # but shell scripts are "executable" too... 3575698f425bSmrg case $win32_fileres in 3576698f425bSmrg *MS\ Windows\ PE\ Intel*) 3577698f425bSmrg win32_libid_type="x86 DLL" 3578698f425bSmrg ;; 3579698f425bSmrg esac 3580698f425bSmrg ;; 3581698f425bSmrg esac 3582698f425bSmrg $ECHO "$win32_libid_type" 3583698f425bSmrg} 3584266e564dSmrg 35859ef0b394Smrg# func_cygming_dll_for_implib ARG 35869ef0b394Smrg# 35879ef0b394Smrg# Platform-specific function to extract the 35889ef0b394Smrg# name of the DLL associated with the specified 35899ef0b394Smrg# import library ARG. 35909ef0b394Smrg# Invoked by eval'ing the libtool variable 35919ef0b394Smrg# $sharedlib_from_linklib_cmd 35929ef0b394Smrg# Result is available in the variable 35939ef0b394Smrg# $sharedlib_from_linklib_result 35949ef0b394Smrgfunc_cygming_dll_for_implib () 35959ef0b394Smrg{ 35969ef0b394Smrg $opt_debug 35979ef0b394Smrg sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` 35989ef0b394Smrg} 35999ef0b394Smrg 36009ef0b394Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs 36019ef0b394Smrg# 36029ef0b394Smrg# The is the core of a fallback implementation of a 36039ef0b394Smrg# platform-specific function to extract the name of the 36049ef0b394Smrg# DLL associated with the specified import library LIBNAME. 36059ef0b394Smrg# 36069ef0b394Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending 36079ef0b394Smrg# on the platform and compiler that created the implib. 36089ef0b394Smrg# 36099ef0b394Smrg# Echos the name of the DLL associated with the 36109ef0b394Smrg# specified import library. 36119ef0b394Smrgfunc_cygming_dll_for_implib_fallback_core () 36129ef0b394Smrg{ 36139ef0b394Smrg $opt_debug 36149ef0b394Smrg match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` 36159ef0b394Smrg $OBJDUMP -s --section "$1" "$2" 2>/dev/null | 36169ef0b394Smrg $SED '/^Contents of section '"$match_literal"':/{ 36179ef0b394Smrg # Place marker at beginning of archive member dllname section 36189ef0b394Smrg s/.*/====MARK====/ 36199ef0b394Smrg p 36209ef0b394Smrg d 36219ef0b394Smrg } 36229ef0b394Smrg # These lines can sometimes be longer than 43 characters, but 36239ef0b394Smrg # are always uninteresting 36249ef0b394Smrg /:[ ]*file format pe[i]\{,1\}-/d 36259ef0b394Smrg /^In archive [^:]*:/d 36269ef0b394Smrg # Ensure marker is printed 36279ef0b394Smrg /^====MARK====/p 36289ef0b394Smrg # Remove all lines with less than 43 characters 36299ef0b394Smrg /^.\{43\}/!d 36309ef0b394Smrg # From remaining lines, remove first 43 characters 36319ef0b394Smrg s/^.\{43\}//' | 36329ef0b394Smrg $SED -n ' 36339ef0b394Smrg # Join marker and all lines until next marker into a single line 36349ef0b394Smrg /^====MARK====/ b para 36359ef0b394Smrg H 36369ef0b394Smrg $ b para 36379ef0b394Smrg b 36389ef0b394Smrg :para 36399ef0b394Smrg x 36409ef0b394Smrg s/\n//g 36419ef0b394Smrg # Remove the marker 36429ef0b394Smrg s/^====MARK====// 36439ef0b394Smrg # Remove trailing dots and whitespace 36449ef0b394Smrg s/[\. \t]*$// 36459ef0b394Smrg # Print 36469ef0b394Smrg /./p' | 36479ef0b394Smrg # we now have a list, one entry per line, of the stringified 36489ef0b394Smrg # contents of the appropriate section of all members of the 36499ef0b394Smrg # archive which possess that section. Heuristic: eliminate 36509ef0b394Smrg # all those which have a first or second character that is 36519ef0b394Smrg # a '.' (that is, objdump's representation of an unprintable 36529ef0b394Smrg # character.) This should work for all archives with less than 36539ef0b394Smrg # 0x302f exports -- but will fail for DLLs whose name actually 36549ef0b394Smrg # begins with a literal '.' or a single character followed by 36559ef0b394Smrg # a '.'. 36569ef0b394Smrg # 36579ef0b394Smrg # Of those that remain, print the first one. 36589ef0b394Smrg $SED -e '/^\./d;/^.\./d;q' 36599ef0b394Smrg} 36609ef0b394Smrg 36619ef0b394Smrg# func_cygming_gnu_implib_p ARG 36629ef0b394Smrg# This predicate returns with zero status (TRUE) if 36639ef0b394Smrg# ARG is a GNU/binutils-style import library. Returns 36649ef0b394Smrg# with nonzero status (FALSE) otherwise. 36659ef0b394Smrgfunc_cygming_gnu_implib_p () 36669ef0b394Smrg{ 36679ef0b394Smrg $opt_debug 36689ef0b394Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 36699ef0b394Smrg 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)$'` 36709ef0b394Smrg test -n "$func_cygming_gnu_implib_tmp" 36719ef0b394Smrg} 36729ef0b394Smrg 36739ef0b394Smrg# func_cygming_ms_implib_p ARG 36749ef0b394Smrg# This predicate returns with zero status (TRUE) if 36759ef0b394Smrg# ARG is an MS-style import library. Returns 36769ef0b394Smrg# with nonzero status (FALSE) otherwise. 36779ef0b394Smrgfunc_cygming_ms_implib_p () 36789ef0b394Smrg{ 36799ef0b394Smrg $opt_debug 36809ef0b394Smrg func_to_tool_file "$1" func_convert_file_msys_to_w32 36819ef0b394Smrg func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` 36829ef0b394Smrg test -n "$func_cygming_ms_implib_tmp" 36839ef0b394Smrg} 36849ef0b394Smrg 36859ef0b394Smrg# func_cygming_dll_for_implib_fallback ARG 36869ef0b394Smrg# Platform-specific function to extract the 36879ef0b394Smrg# name of the DLL associated with the specified 36889ef0b394Smrg# import library ARG. 36899ef0b394Smrg# 36909ef0b394Smrg# This fallback implementation is for use when $DLLTOOL 36919ef0b394Smrg# does not support the --identify-strict option. 36929ef0b394Smrg# Invoked by eval'ing the libtool variable 36939ef0b394Smrg# $sharedlib_from_linklib_cmd 36949ef0b394Smrg# Result is available in the variable 36959ef0b394Smrg# $sharedlib_from_linklib_result 36969ef0b394Smrgfunc_cygming_dll_for_implib_fallback () 36979ef0b394Smrg{ 36989ef0b394Smrg $opt_debug 36999ef0b394Smrg if func_cygming_gnu_implib_p "$1" ; then 37009ef0b394Smrg # binutils import library 37019ef0b394Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` 37029ef0b394Smrg elif func_cygming_ms_implib_p "$1" ; then 37039ef0b394Smrg # ms-generated import library 37049ef0b394Smrg sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` 37059ef0b394Smrg else 37069ef0b394Smrg # unknown 37079ef0b394Smrg sharedlib_from_linklib_result="" 37089ef0b394Smrg fi 37099ef0b394Smrg} 3710266e564dSmrg 3711266e564dSmrg 3712698f425bSmrg# func_extract_an_archive dir oldlib 3713698f425bSmrgfunc_extract_an_archive () 3714698f425bSmrg{ 3715698f425bSmrg $opt_debug 3716698f425bSmrg f_ex_an_ar_dir="$1"; shift 3717698f425bSmrg f_ex_an_ar_oldlib="$1" 37189ef0b394Smrg if test "$lock_old_archive_extraction" = yes; then 37199ef0b394Smrg lockfile=$f_ex_an_ar_oldlib.lock 37209ef0b394Smrg until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do 37219ef0b394Smrg func_echo "Waiting for $lockfile to be removed" 37229ef0b394Smrg sleep 2 37239ef0b394Smrg done 37249ef0b394Smrg fi 37259ef0b394Smrg func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 37269ef0b394Smrg 'stat=$?; rm -f "$lockfile"; exit $stat' 37279ef0b394Smrg if test "$lock_old_archive_extraction" = yes; then 37289ef0b394Smrg $opt_dry_run || rm -f "$lockfile" 37299ef0b394Smrg fi 3730698f425bSmrg if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then 3731698f425bSmrg : 3732698f425bSmrg else 3733698f425bSmrg func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 3734698f425bSmrg fi 3735698f425bSmrg} 3736266e564dSmrg 3737266e564dSmrg 3738698f425bSmrg# func_extract_archives gentop oldlib ... 3739698f425bSmrgfunc_extract_archives () 3740698f425bSmrg{ 3741698f425bSmrg $opt_debug 3742698f425bSmrg my_gentop="$1"; shift 3743698f425bSmrg my_oldlibs=${1+"$@"} 3744698f425bSmrg my_oldobjs="" 3745698f425bSmrg my_xlib="" 3746698f425bSmrg my_xabs="" 3747698f425bSmrg my_xdir="" 3748266e564dSmrg 3749698f425bSmrg for my_xlib in $my_oldlibs; do 3750698f425bSmrg # Extract the objects. 3751698f425bSmrg case $my_xlib in 3752698f425bSmrg [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; 3753698f425bSmrg *) my_xabs=`pwd`"/$my_xlib" ;; 3754698f425bSmrg esac 3755698f425bSmrg func_basename "$my_xlib" 3756698f425bSmrg my_xlib="$func_basename_result" 3757698f425bSmrg my_xlib_u=$my_xlib 3758698f425bSmrg while :; do 3759698f425bSmrg case " $extracted_archives " in 3760698f425bSmrg *" $my_xlib_u "*) 3761698f425bSmrg func_arith $extracted_serial + 1 3762698f425bSmrg extracted_serial=$func_arith_result 3763698f425bSmrg my_xlib_u=lt$extracted_serial-$my_xlib ;; 3764698f425bSmrg *) break ;; 3765698f425bSmrg esac 3766698f425bSmrg done 3767698f425bSmrg extracted_archives="$extracted_archives $my_xlib_u" 3768698f425bSmrg my_xdir="$my_gentop/$my_xlib_u" 3769266e564dSmrg 3770698f425bSmrg func_mkdir_p "$my_xdir" 3771266e564dSmrg 3772698f425bSmrg case $host in 3773698f425bSmrg *-darwin*) 3774698f425bSmrg func_verbose "Extracting $my_xabs" 3775698f425bSmrg # Do not bother doing anything if just a dry run 3776698f425bSmrg $opt_dry_run || { 3777698f425bSmrg darwin_orig_dir=`pwd` 3778698f425bSmrg cd $my_xdir || exit $? 3779698f425bSmrg darwin_archive=$my_xabs 3780698f425bSmrg darwin_curdir=`pwd` 3781698f425bSmrg darwin_base_archive=`basename "$darwin_archive"` 3782698f425bSmrg darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` 3783698f425bSmrg if test -n "$darwin_arches"; then 3784698f425bSmrg darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` 3785698f425bSmrg darwin_arch= 3786698f425bSmrg func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" 3787698f425bSmrg for darwin_arch in $darwin_arches ; do 3788698f425bSmrg func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3789698f425bSmrg $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" 3790698f425bSmrg cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" 3791698f425bSmrg func_extract_an_archive "`pwd`" "${darwin_base_archive}" 3792698f425bSmrg cd "$darwin_curdir" 3793698f425bSmrg $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" 3794698f425bSmrg done # $darwin_arches 3795698f425bSmrg ## Okay now we've a bunch of thin objects, gotta fatten them up :) 3796698f425bSmrg darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` 3797698f425bSmrg darwin_file= 3798698f425bSmrg darwin_files= 3799698f425bSmrg for darwin_file in $darwin_filelist; do 38009ef0b394Smrg darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` 3801698f425bSmrg $LIPO -create -output "$darwin_file" $darwin_files 3802698f425bSmrg done # $darwin_filelist 3803698f425bSmrg $RM -rf unfat-$$ 3804698f425bSmrg cd "$darwin_orig_dir" 3805266e564dSmrg else 3806698f425bSmrg cd $darwin_orig_dir 3807698f425bSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 3808698f425bSmrg fi # $darwin_arches 3809698f425bSmrg } # !$opt_dry_run 3810698f425bSmrg ;; 3811698f425bSmrg *) 3812698f425bSmrg func_extract_an_archive "$my_xdir" "$my_xabs" 3813698f425bSmrg ;; 3814698f425bSmrg esac 38159ef0b394Smrg my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` 3816698f425bSmrg done 3817266e564dSmrg 3818698f425bSmrg func_extract_archives_result="$my_oldobjs" 3819698f425bSmrg} 3820266e564dSmrg 3821266e564dSmrg 38229ef0b394Smrg# func_emit_wrapper [arg=no] 38239ef0b394Smrg# 38249ef0b394Smrg# Emit a libtool wrapper script on stdout. 38259ef0b394Smrg# Don't directly open a file because we may want to 38269ef0b394Smrg# incorporate the script contents within a cygwin/mingw 38279ef0b394Smrg# wrapper executable. Must ONLY be called from within 38289ef0b394Smrg# func_mode_link because it depends on a number of variables 38299ef0b394Smrg# set therein. 3830698f425bSmrg# 38319ef0b394Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR 38329ef0b394Smrg# variable will take. If 'yes', then the emitted script 38339ef0b394Smrg# will assume that the directory in which it is stored is 38349ef0b394Smrg# the $objdir directory. This is a cygwin/mingw-specific 38359ef0b394Smrg# behavior. 38369ef0b394Smrgfunc_emit_wrapper () 3837698f425bSmrg{ 38389ef0b394Smrg func_emit_wrapper_arg1=${1-no} 3839266e564dSmrg 3840698f425bSmrg $ECHO "\ 3841698f425bSmrg#! $SHELL 3842266e564dSmrg 3843698f425bSmrg# $output - temporary wrapper script for $objdir/$outputname 3844698f425bSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 3845698f425bSmrg# 3846698f425bSmrg# The $output program cannot be directly executed until all the libtool 3847698f425bSmrg# libraries that it depends on are installed. 3848698f425bSmrg# 3849698f425bSmrg# This wrapper script should never be moved out of the build directory. 3850698f425bSmrg# If it is, it will not operate correctly. 3851266e564dSmrg 3852698f425bSmrg# Sed substitution that helps us do robust quoting. It backslashifies 3853698f425bSmrg# metacharacters that are still active within double-quoted strings. 3854698f425bSmrgsed_quote_subst='$sed_quote_subst' 3855266e564dSmrg 3856698f425bSmrg# Be Bourne compatible 3857698f425bSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then 3858698f425bSmrg emulate sh 3859698f425bSmrg NULLCMD=: 3860698f425bSmrg # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which 3861698f425bSmrg # is contrary to our usage. Disable this feature. 3862698f425bSmrg alias -g '\${1+\"\$@\"}'='\"\$@\"' 3863698f425bSmrg setopt NO_GLOB_SUBST 3864698f425bSmrgelse 3865698f425bSmrg case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac 3866698f425bSmrgfi 3867698f425bSmrgBIN_SH=xpg4; export BIN_SH # for Tru64 3868698f425bSmrgDUALCASE=1; export DUALCASE # for MKS sh 3869266e564dSmrg 3870698f425bSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout 3871698f425bSmrg# if CDPATH is set. 3872698f425bSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH 3873266e564dSmrg 3874698f425bSmrgrelink_command=\"$relink_command\" 3875266e564dSmrg 3876698f425bSmrg# This environment variable determines our operation mode. 3877698f425bSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then 3878698f425bSmrg # install mode needs the following variables: 3879698f425bSmrg generated_by_libtool_version='$macro_version' 3880698f425bSmrg notinst_deplibs='$notinst_deplibs' 3881698f425bSmrgelse 3882698f425bSmrg # When we are sourced in execute mode, \$file and \$ECHO are already set. 3883698f425bSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 38849ef0b394Smrg file=\"\$0\"" 38859ef0b394Smrg 38869ef0b394Smrg qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` 38879ef0b394Smrg $ECHO "\ 38889ef0b394Smrg 38899ef0b394Smrg# A function that is used when there is no print builtin or printf. 38909ef0b394Smrgfunc_fallback_echo () 38919ef0b394Smrg{ 38929ef0b394Smrg eval 'cat <<_LTECHO_EOF 38939ef0b394Smrg\$1 38949ef0b394Smrg_LTECHO_EOF' 38959ef0b394Smrg} 38969ef0b394Smrg ECHO=\"$qECHO\" 38979ef0b394Smrg fi 38989ef0b394Smrg 38999ef0b394Smrg# Very basic option parsing. These options are (a) specific to 39009ef0b394Smrg# the libtool wrapper, (b) are identical between the wrapper 39019ef0b394Smrg# /script/ and the wrapper /executable/ which is used only on 39029ef0b394Smrg# windows platforms, and (c) all begin with the string "--lt-" 39039ef0b394Smrg# (application programs are unlikely to have options which match 39049ef0b394Smrg# this pattern). 39059ef0b394Smrg# 39069ef0b394Smrg# There are only two supported options: --lt-debug and 39079ef0b394Smrg# --lt-dump-script. There is, deliberately, no --lt-help. 39089ef0b394Smrg# 39099ef0b394Smrg# The first argument to this parsing function should be the 39109ef0b394Smrg# script's $0 value, followed by "$@". 39119ef0b394Smrglt_option_debug= 39129ef0b394Smrgfunc_parse_lt_options () 39139ef0b394Smrg{ 39149ef0b394Smrg lt_script_arg0=\$0 39159ef0b394Smrg shift 39169ef0b394Smrg for lt_opt 39179ef0b394Smrg do 39189ef0b394Smrg case \"\$lt_opt\" in 39199ef0b394Smrg --lt-debug) lt_option_debug=1 ;; 39209ef0b394Smrg --lt-dump-script) 39219ef0b394Smrg lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` 39229ef0b394Smrg test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. 39239ef0b394Smrg lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` 39249ef0b394Smrg cat \"\$lt_dump_D/\$lt_dump_F\" 39259ef0b394Smrg exit 0 39269ef0b394Smrg ;; 39279ef0b394Smrg --lt-*) 39289ef0b394Smrg \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 39299ef0b394Smrg exit 1 39309ef0b394Smrg ;; 39319ef0b394Smrg esac 39329ef0b394Smrg done 39339ef0b394Smrg 39349ef0b394Smrg # Print the debug banner immediately: 39359ef0b394Smrg if test -n \"\$lt_option_debug\"; then 39369ef0b394Smrg echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 39379ef0b394Smrg fi 39389ef0b394Smrg} 39399ef0b394Smrg 39409ef0b394Smrg# Used when --lt-debug. Prints its arguments to stdout 39419ef0b394Smrg# (redirection is the responsibility of the caller) 39429ef0b394Smrgfunc_lt_dump_args () 39439ef0b394Smrg{ 39449ef0b394Smrg lt_dump_args_N=1; 39459ef0b394Smrg for lt_arg 39469ef0b394Smrg do 39479ef0b394Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" 39489ef0b394Smrg lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` 39499ef0b394Smrg done 39509ef0b394Smrg} 39519ef0b394Smrg 39529ef0b394Smrg# Core function for launching the target application 39539ef0b394Smrgfunc_exec_program_core () 39549ef0b394Smrg{ 3955698f425bSmrg" 39569ef0b394Smrg case $host in 39579ef0b394Smrg # Backslashes separate directories on plain windows 39589ef0b394Smrg *-*-mingw | *-*-os2* | *-cegcc*) 39599ef0b394Smrg $ECHO "\ 39609ef0b394Smrg if test -n \"\$lt_option_debug\"; then 39619ef0b394Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 39629ef0b394Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 39639ef0b394Smrg fi 39649ef0b394Smrg exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} 39659ef0b394Smrg" 39669ef0b394Smrg ;; 39679ef0b394Smrg 39689ef0b394Smrg *) 39699ef0b394Smrg $ECHO "\ 39709ef0b394Smrg if test -n \"\$lt_option_debug\"; then 39719ef0b394Smrg \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 39729ef0b394Smrg func_lt_dump_args \${1+\"\$@\"} 1>&2 39739ef0b394Smrg fi 39749ef0b394Smrg exec \"\$progdir/\$program\" \${1+\"\$@\"} 39759ef0b394Smrg" 39769ef0b394Smrg ;; 39779ef0b394Smrg esac 39789ef0b394Smrg $ECHO "\ 39799ef0b394Smrg \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 39809ef0b394Smrg exit 1 39819ef0b394Smrg} 39829ef0b394Smrg 39839ef0b394Smrg# A function to encapsulate launching the target application 39849ef0b394Smrg# Strips options in the --lt-* namespace from \$@ and 39859ef0b394Smrg# launches target application with the remaining arguments. 39869ef0b394Smrgfunc_exec_program () 39879ef0b394Smrg{ 3988fb5e8d76Smrg case \" \$* \" in 3989fb5e8d76Smrg *\\ --lt-*) 3990fb5e8d76Smrg for lt_wr_arg 3991fb5e8d76Smrg do 3992fb5e8d76Smrg case \$lt_wr_arg in 3993fb5e8d76Smrg --lt-*) ;; 3994fb5e8d76Smrg *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; 3995fb5e8d76Smrg esac 3996fb5e8d76Smrg shift 3997fb5e8d76Smrg done ;; 3998fb5e8d76Smrg esac 39999ef0b394Smrg func_exec_program_core \${1+\"\$@\"} 40009ef0b394Smrg} 40019ef0b394Smrg 40029ef0b394Smrg # Parse options 40039ef0b394Smrg func_parse_lt_options \"\$0\" \${1+\"\$@\"} 4004266e564dSmrg 4005698f425bSmrg # Find the directory that this script lives in. 40069ef0b394Smrg thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` 4007698f425bSmrg test \"x\$thisdir\" = \"x\$file\" && thisdir=. 4008266e564dSmrg 4009698f425bSmrg # Follow symbolic links until we get to the real thisdir. 40109ef0b394Smrg file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` 4011698f425bSmrg while test -n \"\$file\"; do 40129ef0b394Smrg destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` 4013266e564dSmrg 4014698f425bSmrg # If there was a directory component, then change thisdir. 4015698f425bSmrg if test \"x\$destdir\" != \"x\$file\"; then 4016698f425bSmrg case \"\$destdir\" in 4017698f425bSmrg [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; 4018698f425bSmrg *) thisdir=\"\$thisdir/\$destdir\" ;; 4019266e564dSmrg esac 4020698f425bSmrg fi 4021266e564dSmrg 40229ef0b394Smrg file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` 40239ef0b394Smrg file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` 4024698f425bSmrg done 4025266e564dSmrg 4026698f425bSmrg # Usually 'no', except on cygwin/mingw when embedded into 4027698f425bSmrg # the cwrapper. 40289ef0b394Smrg WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 4029698f425bSmrg if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then 4030698f425bSmrg # special case for '.' 4031698f425bSmrg if test \"\$thisdir\" = \".\"; then 4032698f425bSmrg thisdir=\`pwd\` 4033698f425bSmrg fi 4034698f425bSmrg # remove .libs from thisdir 4035698f425bSmrg case \"\$thisdir\" in 40369ef0b394Smrg *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; 4037698f425bSmrg $objdir ) thisdir=. ;; 4038698f425bSmrg esac 4039698f425bSmrg fi 4040698f425bSmrg 4041698f425bSmrg # Try to get the absolute directory name. 4042698f425bSmrg absdir=\`cd \"\$thisdir\" && pwd\` 4043698f425bSmrg test -n \"\$absdir\" && thisdir=\"\$absdir\" 4044698f425bSmrg" 4045698f425bSmrg 4046698f425bSmrg if test "$fast_install" = yes; then 4047698f425bSmrg $ECHO "\ 4048698f425bSmrg program=lt-'$outputname'$exeext 4049698f425bSmrg progdir=\"\$thisdir/$objdir\" 4050698f425bSmrg 4051698f425bSmrg if test ! -f \"\$progdir/\$program\" || 4052698f425bSmrg { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ 4053698f425bSmrg test \"X\$file\" != \"X\$progdir/\$program\"; }; then 4054698f425bSmrg 4055698f425bSmrg file=\"\$\$-\$program\" 4056698f425bSmrg 4057698f425bSmrg if test ! -d \"\$progdir\"; then 4058698f425bSmrg $MKDIR \"\$progdir\" 4059698f425bSmrg else 4060698f425bSmrg $RM \"\$progdir/\$file\" 4061698f425bSmrg fi" 4062698f425bSmrg 4063698f425bSmrg $ECHO "\ 4064698f425bSmrg 4065698f425bSmrg # relink executable if necessary 4066698f425bSmrg if test -n \"\$relink_command\"; then 4067698f425bSmrg if relink_command_output=\`eval \$relink_command 2>&1\`; then : 4068698f425bSmrg else 4069698f425bSmrg $ECHO \"\$relink_command_output\" >&2 4070698f425bSmrg $RM \"\$progdir/\$file\" 4071698f425bSmrg exit 1 4072266e564dSmrg fi 4073698f425bSmrg fi 4074266e564dSmrg 4075698f425bSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || 4076698f425bSmrg { $RM \"\$progdir/\$program\"; 4077698f425bSmrg $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } 4078698f425bSmrg $RM \"\$progdir/\$file\" 4079698f425bSmrg fi" 4080698f425bSmrg else 4081698f425bSmrg $ECHO "\ 4082698f425bSmrg program='$outputname' 4083698f425bSmrg progdir=\"\$thisdir/$objdir\" 4084698f425bSmrg" 4085266e564dSmrg fi 4086266e564dSmrg 4087698f425bSmrg $ECHO "\ 4088266e564dSmrg 4089698f425bSmrg if test -f \"\$progdir/\$program\"; then" 4090266e564dSmrg 40919ef0b394Smrg # fixup the dll searchpath if we need to. 40929ef0b394Smrg # 40939ef0b394Smrg # Fix the DLL searchpath if we need to. Do this before prepending 40949ef0b394Smrg # to shlibpath, because on Windows, both are PATH and uninstalled 40959ef0b394Smrg # libraries must come first. 40969ef0b394Smrg if test -n "$dllsearchpath"; then 40979ef0b394Smrg $ECHO "\ 40989ef0b394Smrg # Add the dll search path components to the executable PATH 40999ef0b394Smrg PATH=$dllsearchpath:\$PATH 41009ef0b394Smrg" 41019ef0b394Smrg fi 41029ef0b394Smrg 4103698f425bSmrg # Export our shlibpath_var if we have one. 4104698f425bSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 4105698f425bSmrg $ECHO "\ 4106698f425bSmrg # Add our own library path to $shlibpath_var 4107698f425bSmrg $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" 4108266e564dSmrg 4109698f425bSmrg # Some systems cannot cope with colon-terminated $shlibpath_var 4110698f425bSmrg # The second colon is a workaround for a bug in BeOS R4 sed 41119ef0b394Smrg $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` 4112698f425bSmrg 4113698f425bSmrg export $shlibpath_var 4114698f425bSmrg" 4115266e564dSmrg fi 4116266e564dSmrg 4117698f425bSmrg $ECHO "\ 4118698f425bSmrg if test \"\$libtool_execute_magic\" != \"$magic\"; then 4119698f425bSmrg # Run the actual program with our arguments. 41209ef0b394Smrg func_exec_program \${1+\"\$@\"} 4121698f425bSmrg fi 4122698f425bSmrg else 4123698f425bSmrg # The program doesn't exist. 4124698f425bSmrg \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 4125698f425bSmrg \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 41269ef0b394Smrg \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 4127698f425bSmrg exit 1 4128698f425bSmrg fi 4129698f425bSmrgfi\ 4130698f425bSmrg" 4131698f425bSmrg} 4132266e564dSmrg 4133266e564dSmrg 4134698f425bSmrg# func_emit_cwrapperexe_src 4135698f425bSmrg# emit the source code for a wrapper executable on stdout 4136698f425bSmrg# Must ONLY be called from within func_mode_link because 4137698f425bSmrg# it depends on a number of variable set therein. 4138698f425bSmrgfunc_emit_cwrapperexe_src () 4139698f425bSmrg{ 4140698f425bSmrg cat <<EOF 4141266e564dSmrg 4142698f425bSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname 4143698f425bSmrg Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 4144266e564dSmrg 4145698f425bSmrg The $output program cannot be directly executed until all the libtool 4146698f425bSmrg libraries that it depends on are installed. 4147266e564dSmrg 4148698f425bSmrg This wrapper executable should never be moved out of the build directory. 4149698f425bSmrg If it is, it will not operate correctly. 4150698f425bSmrg*/ 4151698f425bSmrgEOF 4152698f425bSmrg cat <<"EOF" 41539ef0b394Smrg#ifdef _MSC_VER 41549ef0b394Smrg# define _CRT_SECURE_NO_DEPRECATE 1 41559ef0b394Smrg#endif 4156698f425bSmrg#include <stdio.h> 4157698f425bSmrg#include <stdlib.h> 4158698f425bSmrg#ifdef _MSC_VER 4159698f425bSmrg# include <direct.h> 4160698f425bSmrg# include <process.h> 4161698f425bSmrg# include <io.h> 4162698f425bSmrg#else 4163698f425bSmrg# include <unistd.h> 4164698f425bSmrg# include <stdint.h> 4165698f425bSmrg# ifdef __CYGWIN__ 4166698f425bSmrg# include <io.h> 4167698f425bSmrg# endif 4168698f425bSmrg#endif 4169698f425bSmrg#include <malloc.h> 4170698f425bSmrg#include <stdarg.h> 4171698f425bSmrg#include <assert.h> 4172698f425bSmrg#include <string.h> 4173698f425bSmrg#include <ctype.h> 4174698f425bSmrg#include <errno.h> 4175698f425bSmrg#include <fcntl.h> 4176698f425bSmrg#include <sys/stat.h> 4177266e564dSmrg 41789ef0b394Smrg/* declarations of non-ANSI functions */ 41799ef0b394Smrg#if defined(__MINGW32__) 41809ef0b394Smrg# ifdef __STRICT_ANSI__ 41819ef0b394Smrgint _putenv (const char *); 41829ef0b394Smrg# endif 41839ef0b394Smrg#elif defined(__CYGWIN__) 41849ef0b394Smrg# ifdef __STRICT_ANSI__ 41859ef0b394Smrgchar *realpath (const char *, char *); 41869ef0b394Smrgint putenv (char *); 41879ef0b394Smrgint setenv (const char *, const char *, int); 41889ef0b394Smrg# endif 41899ef0b394Smrg/* #elif defined (other platforms) ... */ 41909ef0b394Smrg#endif 41919ef0b394Smrg 41929ef0b394Smrg/* portability defines, excluding path handling macros */ 41939ef0b394Smrg#if defined(_MSC_VER) 41949ef0b394Smrg# define setmode _setmode 41959ef0b394Smrg# define stat _stat 41969ef0b394Smrg# define chmod _chmod 41979ef0b394Smrg# define getcwd _getcwd 41989ef0b394Smrg# define putenv _putenv 41999ef0b394Smrg# define S_IXUSR _S_IEXEC 42009ef0b394Smrg# ifndef _INTPTR_T_DEFINED 42019ef0b394Smrg# define _INTPTR_T_DEFINED 42029ef0b394Smrg# define intptr_t int 42039ef0b394Smrg# endif 42049ef0b394Smrg#elif defined(__MINGW32__) 42059ef0b394Smrg# define setmode _setmode 42069ef0b394Smrg# define stat _stat 42079ef0b394Smrg# define chmod _chmod 42089ef0b394Smrg# define getcwd _getcwd 42099ef0b394Smrg# define putenv _putenv 42109ef0b394Smrg#elif defined(__CYGWIN__) 42119ef0b394Smrg# define HAVE_SETENV 42129ef0b394Smrg# define FOPEN_WB "wb" 42139ef0b394Smrg/* #elif defined (other platforms) ... */ 42149ef0b394Smrg#endif 42159ef0b394Smrg 4216698f425bSmrg#if defined(PATH_MAX) 4217698f425bSmrg# define LT_PATHMAX PATH_MAX 4218698f425bSmrg#elif defined(MAXPATHLEN) 4219698f425bSmrg# define LT_PATHMAX MAXPATHLEN 4220698f425bSmrg#else 4221698f425bSmrg# define LT_PATHMAX 1024 4222698f425bSmrg#endif 4223266e564dSmrg 4224698f425bSmrg#ifndef S_IXOTH 4225698f425bSmrg# define S_IXOTH 0 4226698f425bSmrg#endif 4227698f425bSmrg#ifndef S_IXGRP 4228698f425bSmrg# define S_IXGRP 0 4229698f425bSmrg#endif 4230266e564dSmrg 42319ef0b394Smrg/* path handling portability macros */ 4232698f425bSmrg#ifndef DIR_SEPARATOR 4233698f425bSmrg# define DIR_SEPARATOR '/' 4234698f425bSmrg# define PATH_SEPARATOR ':' 4235698f425bSmrg#endif 4236266e564dSmrg 4237698f425bSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ 4238698f425bSmrg defined (__OS2__) 4239698f425bSmrg# define HAVE_DOS_BASED_FILE_SYSTEM 4240698f425bSmrg# define FOPEN_WB "wb" 4241698f425bSmrg# ifndef DIR_SEPARATOR_2 4242698f425bSmrg# define DIR_SEPARATOR_2 '\\' 4243698f425bSmrg# endif 4244698f425bSmrg# ifndef PATH_SEPARATOR_2 4245698f425bSmrg# define PATH_SEPARATOR_2 ';' 4246698f425bSmrg# endif 4247698f425bSmrg#endif 4248266e564dSmrg 4249698f425bSmrg#ifndef DIR_SEPARATOR_2 4250698f425bSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) 4251698f425bSmrg#else /* DIR_SEPARATOR_2 */ 4252698f425bSmrg# define IS_DIR_SEPARATOR(ch) \ 4253698f425bSmrg (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) 4254698f425bSmrg#endif /* DIR_SEPARATOR_2 */ 4255266e564dSmrg 4256698f425bSmrg#ifndef PATH_SEPARATOR_2 4257698f425bSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) 4258698f425bSmrg#else /* PATH_SEPARATOR_2 */ 4259698f425bSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) 4260698f425bSmrg#endif /* PATH_SEPARATOR_2 */ 4261266e564dSmrg 4262698f425bSmrg#ifndef FOPEN_WB 4263698f425bSmrg# define FOPEN_WB "w" 4264698f425bSmrg#endif 4265698f425bSmrg#ifndef _O_BINARY 4266698f425bSmrg# define _O_BINARY 0 4267698f425bSmrg#endif 4268266e564dSmrg 4269698f425bSmrg#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) 4270698f425bSmrg#define XFREE(stale) do { \ 4271698f425bSmrg if (stale) { free ((void *) stale); stale = 0; } \ 4272698f425bSmrg} while (0) 4273266e564dSmrg 42749ef0b394Smrg#if defined(LT_DEBUGWRAPPER) 42759ef0b394Smrgstatic int lt_debug = 1; 4276698f425bSmrg#else 42779ef0b394Smrgstatic int lt_debug = 0; 4278698f425bSmrg#endif 4279266e564dSmrg 42809ef0b394Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 4281266e564dSmrg 4282698f425bSmrgvoid *xmalloc (size_t num); 4283698f425bSmrgchar *xstrdup (const char *string); 4284698f425bSmrgconst char *base_name (const char *name); 4285698f425bSmrgchar *find_executable (const char *wrapper); 4286698f425bSmrgchar *chase_symlinks (const char *pathspec); 4287698f425bSmrgint make_executable (const char *path); 4288698f425bSmrgint check_executable (const char *path); 4289698f425bSmrgchar *strendzap (char *str, const char *pat); 42909ef0b394Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...); 42919ef0b394Smrgvoid lt_fatal (const char *file, int line, const char *message, ...); 42929ef0b394Smrgstatic const char *nonnull (const char *s); 42939ef0b394Smrgstatic const char *nonempty (const char *s); 4294698f425bSmrgvoid lt_setenv (const char *name, const char *value); 4295698f425bSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end); 4296698f425bSmrgvoid lt_update_exe_path (const char *name, const char *value); 4297698f425bSmrgvoid lt_update_lib_path (const char *name, const char *value); 42989ef0b394Smrgchar **prepare_spawn (char **argv); 42999ef0b394Smrgvoid lt_dump_script (FILE *f); 4300698f425bSmrgEOF 4301698f425bSmrg 4302698f425bSmrg cat <<EOF 43039ef0b394Smrgvolatile const char * MAGIC_EXE = "$magic_exe"; 4304698f425bSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var"; 4305698f425bSmrgEOF 4306266e564dSmrg 4307698f425bSmrg if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then 43089ef0b394Smrg func_to_host_path "$temp_rpath" 4309698f425bSmrg cat <<EOF 43109ef0b394Smrgconst char * LIB_PATH_VALUE = "$func_to_host_path_result"; 4311698f425bSmrgEOF 4312698f425bSmrg else 4313698f425bSmrg cat <<"EOF" 4314698f425bSmrgconst char * LIB_PATH_VALUE = ""; 4315698f425bSmrgEOF 4316266e564dSmrg fi 4317266e564dSmrg 4318698f425bSmrg if test -n "$dllsearchpath"; then 43199ef0b394Smrg func_to_host_path "$dllsearchpath:" 4320698f425bSmrg cat <<EOF 4321698f425bSmrgconst char * EXE_PATH_VARNAME = "PATH"; 43229ef0b394Smrgconst char * EXE_PATH_VALUE = "$func_to_host_path_result"; 4323266e564dSmrgEOF 4324266e564dSmrg else 4325698f425bSmrg cat <<"EOF" 4326698f425bSmrgconst char * EXE_PATH_VARNAME = ""; 4327698f425bSmrgconst char * EXE_PATH_VALUE = ""; 4328698f425bSmrgEOF 4329266e564dSmrg fi 4330698f425bSmrg 4331698f425bSmrg if test "$fast_install" = yes; then 4332698f425bSmrg cat <<EOF 4333698f425bSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ 4334698f425bSmrgEOF 4335266e564dSmrg else 4336698f425bSmrg cat <<EOF 4337698f425bSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ 4338698f425bSmrgEOF 4339266e564dSmrg fi 4340266e564dSmrg 4341266e564dSmrg 4342698f425bSmrg cat <<"EOF" 4343266e564dSmrg 4344698f425bSmrg#define LTWRAPPER_OPTION_PREFIX "--lt-" 4345266e564dSmrg 4346698f425bSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; 4347698f425bSmrgstatic const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; 43489ef0b394Smrgstatic const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 4349266e564dSmrg 4350698f425bSmrgint 4351698f425bSmrgmain (int argc, char *argv[]) 4352698f425bSmrg{ 4353698f425bSmrg char **newargz; 4354698f425bSmrg int newargc; 4355698f425bSmrg char *tmp_pathspec; 4356698f425bSmrg char *actual_cwrapper_path; 4357698f425bSmrg char *actual_cwrapper_name; 4358698f425bSmrg char *target_name; 4359698f425bSmrg char *lt_argv_zero; 4360698f425bSmrg intptr_t rval = 127; 4361266e564dSmrg 4362698f425bSmrg int i; 4363266e564dSmrg 4364698f425bSmrg program_name = (char *) xstrdup (base_name (argv[0])); 43659ef0b394Smrg newargz = XMALLOC (char *, argc + 1); 4366266e564dSmrg 43679ef0b394Smrg /* very simple arg parsing; don't want to rely on getopt 43689ef0b394Smrg * also, copy all non cwrapper options to newargz, except 43699ef0b394Smrg * argz[0], which is handled differently 43709ef0b394Smrg */ 43719ef0b394Smrg newargc=0; 4372698f425bSmrg for (i = 1; i < argc; i++) 4373698f425bSmrg { 4374698f425bSmrg if (strcmp (argv[i], dumpscript_opt) == 0) 4375698f425bSmrg { 4376698f425bSmrgEOF 4377698f425bSmrg case "$host" in 4378698f425bSmrg *mingw* | *cygwin* ) 4379698f425bSmrg # make stdout use "unix" line endings 4380698f425bSmrg echo " setmode(1,_O_BINARY);" 4381698f425bSmrg ;; 4382698f425bSmrg esac 4383266e564dSmrg 4384698f425bSmrg cat <<"EOF" 43859ef0b394Smrg lt_dump_script (stdout); 4386698f425bSmrg return 0; 4387698f425bSmrg } 43889ef0b394Smrg if (strcmp (argv[i], debug_opt) == 0) 43899ef0b394Smrg { 43909ef0b394Smrg lt_debug = 1; 43919ef0b394Smrg continue; 43929ef0b394Smrg } 43939ef0b394Smrg if (strcmp (argv[i], ltwrapper_option_prefix) == 0) 43949ef0b394Smrg { 43959ef0b394Smrg /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX 43969ef0b394Smrg namespace, but it is not one of the ones we know about and 43979ef0b394Smrg have already dealt with, above (inluding dump-script), then 43989ef0b394Smrg report an error. Otherwise, targets might begin to believe 43999ef0b394Smrg they are allowed to use options in the LTWRAPPER_OPTION_PREFIX 44009ef0b394Smrg namespace. The first time any user complains about this, we'll 44019ef0b394Smrg need to make LTWRAPPER_OPTION_PREFIX a configure-time option 44029ef0b394Smrg or a configure.ac-settable value. 44039ef0b394Smrg */ 44049ef0b394Smrg lt_fatal (__FILE__, __LINE__, 44059ef0b394Smrg "unrecognized %s option: '%s'", 44069ef0b394Smrg ltwrapper_option_prefix, argv[i]); 44079ef0b394Smrg } 44089ef0b394Smrg /* otherwise ... */ 44099ef0b394Smrg newargz[++newargc] = xstrdup (argv[i]); 4410698f425bSmrg } 44119ef0b394Smrg newargz[++newargc] = NULL; 44129ef0b394Smrg 44139ef0b394SmrgEOF 44149ef0b394Smrg cat <<EOF 44159ef0b394Smrg /* The GNU banner must be the first non-error debug message */ 44169ef0b394Smrg lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); 44179ef0b394SmrgEOF 44189ef0b394Smrg cat <<"EOF" 44199ef0b394Smrg lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); 44209ef0b394Smrg lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); 4421266e564dSmrg 4422698f425bSmrg tmp_pathspec = find_executable (argv[0]); 4423698f425bSmrg if (tmp_pathspec == NULL) 44249ef0b394Smrg lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); 44259ef0b394Smrg lt_debugprintf (__FILE__, __LINE__, 44269ef0b394Smrg "(main) found exe (before symlink chase) at: %s\n", 44279ef0b394Smrg tmp_pathspec); 4428698f425bSmrg 4429698f425bSmrg actual_cwrapper_path = chase_symlinks (tmp_pathspec); 44309ef0b394Smrg lt_debugprintf (__FILE__, __LINE__, 44319ef0b394Smrg "(main) found exe (after symlink chase) at: %s\n", 44329ef0b394Smrg actual_cwrapper_path); 4433698f425bSmrg XFREE (tmp_pathspec); 4434698f425bSmrg 44359ef0b394Smrg actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); 4436698f425bSmrg strendzap (actual_cwrapper_path, actual_cwrapper_name); 4437698f425bSmrg 4438698f425bSmrg /* wrapper name transforms */ 4439698f425bSmrg strendzap (actual_cwrapper_name, ".exe"); 4440698f425bSmrg tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); 4441698f425bSmrg XFREE (actual_cwrapper_name); 4442698f425bSmrg actual_cwrapper_name = tmp_pathspec; 4443698f425bSmrg tmp_pathspec = 0; 4444698f425bSmrg 4445698f425bSmrg /* target_name transforms -- use actual target program name; might have lt- prefix */ 4446698f425bSmrg target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); 4447698f425bSmrg strendzap (target_name, ".exe"); 4448698f425bSmrg tmp_pathspec = lt_extend_str (target_name, ".exe", 1); 4449698f425bSmrg XFREE (target_name); 4450698f425bSmrg target_name = tmp_pathspec; 4451698f425bSmrg tmp_pathspec = 0; 4452698f425bSmrg 44539ef0b394Smrg lt_debugprintf (__FILE__, __LINE__, 44549ef0b394Smrg "(main) libtool target name: %s\n", 44559ef0b394Smrg target_name); 4456698f425bSmrgEOF 4457266e564dSmrg 4458698f425bSmrg cat <<EOF 4459698f425bSmrg newargz[0] = 4460698f425bSmrg XMALLOC (char, (strlen (actual_cwrapper_path) + 4461698f425bSmrg strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); 4462698f425bSmrg strcpy (newargz[0], actual_cwrapper_path); 4463698f425bSmrg strcat (newargz[0], "$objdir"); 4464698f425bSmrg strcat (newargz[0], "/"); 4465698f425bSmrgEOF 4466266e564dSmrg 4467698f425bSmrg cat <<"EOF" 4468698f425bSmrg /* stop here, and copy so we don't have to do this twice */ 4469698f425bSmrg tmp_pathspec = xstrdup (newargz[0]); 4470266e564dSmrg 4471698f425bSmrg /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ 4472698f425bSmrg strcat (newargz[0], actual_cwrapper_name); 4473266e564dSmrg 4474698f425bSmrg /* DO want the lt- prefix here if it exists, so use target_name */ 4475698f425bSmrg lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); 4476698f425bSmrg XFREE (tmp_pathspec); 4477698f425bSmrg tmp_pathspec = NULL; 4478698f425bSmrgEOF 4479266e564dSmrg 4480698f425bSmrg case $host_os in 4481698f425bSmrg mingw*) 4482698f425bSmrg cat <<"EOF" 4483698f425bSmrg { 4484698f425bSmrg char* p; 4485698f425bSmrg while ((p = strchr (newargz[0], '\\')) != NULL) 4486698f425bSmrg { 4487698f425bSmrg *p = '/'; 4488698f425bSmrg } 4489698f425bSmrg while ((p = strchr (lt_argv_zero, '\\')) != NULL) 4490698f425bSmrg { 4491698f425bSmrg *p = '/'; 4492698f425bSmrg } 4493698f425bSmrg } 4494698f425bSmrgEOF 4495698f425bSmrg ;; 4496698f425bSmrg esac 4497266e564dSmrg 4498698f425bSmrg cat <<"EOF" 4499698f425bSmrg XFREE (target_name); 4500698f425bSmrg XFREE (actual_cwrapper_path); 4501698f425bSmrg XFREE (actual_cwrapper_name); 4502266e564dSmrg 4503698f425bSmrg lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ 4504698f425bSmrg lt_setenv ("DUALCASE", "1"); /* for MSK sh */ 45059ef0b394Smrg /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must 45069ef0b394Smrg be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) 45079ef0b394Smrg because on Windows, both *_VARNAMEs are PATH but uninstalled 45089ef0b394Smrg libraries must come first. */ 4509698f425bSmrg lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); 45109ef0b394Smrg lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); 4511266e564dSmrg 45129ef0b394Smrg lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", 45139ef0b394Smrg nonnull (lt_argv_zero)); 4514698f425bSmrg for (i = 0; i < newargc; i++) 4515698f425bSmrg { 45169ef0b394Smrg lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", 45179ef0b394Smrg i, nonnull (newargz[i])); 4518698f425bSmrg } 4519266e564dSmrg 4520698f425bSmrgEOF 4521266e564dSmrg 4522698f425bSmrg case $host_os in 4523698f425bSmrg mingw*) 4524698f425bSmrg cat <<"EOF" 4525698f425bSmrg /* execv doesn't actually work on mingw as expected on unix */ 45269ef0b394Smrg newargz = prepare_spawn (newargz); 4527698f425bSmrg rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); 4528698f425bSmrg if (rval == -1) 4529698f425bSmrg { 4530698f425bSmrg /* failed to start process */ 45319ef0b394Smrg lt_debugprintf (__FILE__, __LINE__, 45329ef0b394Smrg "(main) failed to launch target \"%s\": %s\n", 45339ef0b394Smrg lt_argv_zero, nonnull (strerror (errno))); 4534698f425bSmrg return 127; 4535698f425bSmrg } 4536698f425bSmrg return rval; 4537698f425bSmrgEOF 4538698f425bSmrg ;; 4539698f425bSmrg *) 4540698f425bSmrg cat <<"EOF" 4541698f425bSmrg execv (lt_argv_zero, newargz); 4542698f425bSmrg return rval; /* =127, but avoids unused variable warning */ 4543698f425bSmrgEOF 4544698f425bSmrg ;; 4545698f425bSmrg esac 4546266e564dSmrg 4547698f425bSmrg cat <<"EOF" 4548698f425bSmrg} 4549266e564dSmrg 4550698f425bSmrgvoid * 4551698f425bSmrgxmalloc (size_t num) 4552698f425bSmrg{ 4553698f425bSmrg void *p = (void *) malloc (num); 4554698f425bSmrg if (!p) 45559ef0b394Smrg lt_fatal (__FILE__, __LINE__, "memory exhausted"); 4556266e564dSmrg 4557698f425bSmrg return p; 4558698f425bSmrg} 4559266e564dSmrg 4560698f425bSmrgchar * 4561698f425bSmrgxstrdup (const char *string) 4562698f425bSmrg{ 4563698f425bSmrg return string ? strcpy ((char *) xmalloc (strlen (string) + 1), 4564698f425bSmrg string) : NULL; 4565698f425bSmrg} 4566266e564dSmrg 4567698f425bSmrgconst char * 4568698f425bSmrgbase_name (const char *name) 4569698f425bSmrg{ 4570698f425bSmrg const char *base; 4571266e564dSmrg 4572698f425bSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4573698f425bSmrg /* Skip over the disk name in MSDOS pathnames. */ 4574698f425bSmrg if (isalpha ((unsigned char) name[0]) && name[1] == ':') 4575698f425bSmrg name += 2; 4576698f425bSmrg#endif 4577266e564dSmrg 4578698f425bSmrg for (base = name; *name; name++) 4579698f425bSmrg if (IS_DIR_SEPARATOR (*name)) 4580698f425bSmrg base = name + 1; 4581698f425bSmrg return base; 4582698f425bSmrg} 4583266e564dSmrg 4584698f425bSmrgint 4585698f425bSmrgcheck_executable (const char *path) 4586698f425bSmrg{ 4587698f425bSmrg struct stat st; 4588266e564dSmrg 45899ef0b394Smrg lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", 45909ef0b394Smrg nonempty (path)); 4591698f425bSmrg if ((!path) || (!*path)) 4592698f425bSmrg return 0; 4593266e564dSmrg 4594698f425bSmrg if ((stat (path, &st) >= 0) 4595698f425bSmrg && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) 4596698f425bSmrg return 1; 4597698f425bSmrg else 4598698f425bSmrg return 0; 4599698f425bSmrg} 4600266e564dSmrg 4601698f425bSmrgint 4602698f425bSmrgmake_executable (const char *path) 4603698f425bSmrg{ 4604698f425bSmrg int rval = 0; 4605698f425bSmrg struct stat st; 4606266e564dSmrg 46079ef0b394Smrg lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", 46089ef0b394Smrg nonempty (path)); 4609698f425bSmrg if ((!path) || (!*path)) 4610698f425bSmrg return 0; 4611266e564dSmrg 4612698f425bSmrg if (stat (path, &st) >= 0) 4613698f425bSmrg { 4614698f425bSmrg rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); 4615698f425bSmrg } 4616698f425bSmrg return rval; 4617698f425bSmrg} 4618266e564dSmrg 4619698f425bSmrg/* Searches for the full path of the wrapper. Returns 4620698f425bSmrg newly allocated full path name if found, NULL otherwise 4621698f425bSmrg Does not chase symlinks, even on platforms that support them. 4622698f425bSmrg*/ 4623698f425bSmrgchar * 4624698f425bSmrgfind_executable (const char *wrapper) 4625698f425bSmrg{ 4626698f425bSmrg int has_slash = 0; 4627698f425bSmrg const char *p; 4628698f425bSmrg const char *p_next; 4629698f425bSmrg /* static buffer for getcwd */ 4630698f425bSmrg char tmp[LT_PATHMAX + 1]; 4631698f425bSmrg int tmp_len; 4632698f425bSmrg char *concat_name; 4633266e564dSmrg 46349ef0b394Smrg lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", 46359ef0b394Smrg nonempty (wrapper)); 4636266e564dSmrg 4637698f425bSmrg if ((wrapper == NULL) || (*wrapper == '\0')) 4638698f425bSmrg return NULL; 4639266e564dSmrg 4640698f425bSmrg /* Absolute path? */ 4641698f425bSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4642698f425bSmrg if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') 4643698f425bSmrg { 4644698f425bSmrg concat_name = xstrdup (wrapper); 4645698f425bSmrg if (check_executable (concat_name)) 4646698f425bSmrg return concat_name; 4647698f425bSmrg XFREE (concat_name); 4648698f425bSmrg } 4649698f425bSmrg else 4650698f425bSmrg { 4651698f425bSmrg#endif 4652698f425bSmrg if (IS_DIR_SEPARATOR (wrapper[0])) 4653698f425bSmrg { 4654698f425bSmrg concat_name = xstrdup (wrapper); 4655698f425bSmrg if (check_executable (concat_name)) 4656698f425bSmrg return concat_name; 4657698f425bSmrg XFREE (concat_name); 4658698f425bSmrg } 4659698f425bSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM) 4660698f425bSmrg } 4661698f425bSmrg#endif 4662266e564dSmrg 4663698f425bSmrg for (p = wrapper; *p; p++) 4664698f425bSmrg if (*p == '/') 4665698f425bSmrg { 4666698f425bSmrg has_slash = 1; 4667698f425bSmrg break; 4668698f425bSmrg } 4669698f425bSmrg if (!has_slash) 4670698f425bSmrg { 4671698f425bSmrg /* no slashes; search PATH */ 4672698f425bSmrg const char *path = getenv ("PATH"); 4673698f425bSmrg if (path != NULL) 4674698f425bSmrg { 4675698f425bSmrg for (p = path; *p; p = p_next) 4676698f425bSmrg { 4677698f425bSmrg const char *q; 4678698f425bSmrg size_t p_len; 4679698f425bSmrg for (q = p; *q; q++) 4680698f425bSmrg if (IS_PATH_SEPARATOR (*q)) 4681698f425bSmrg break; 4682698f425bSmrg p_len = q - p; 4683698f425bSmrg p_next = (*q == '\0' ? q : q + 1); 4684698f425bSmrg if (p_len == 0) 4685698f425bSmrg { 4686698f425bSmrg /* empty path: current directory */ 4687698f425bSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 46889ef0b394Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 46899ef0b394Smrg nonnull (strerror (errno))); 4690698f425bSmrg tmp_len = strlen (tmp); 4691698f425bSmrg concat_name = 4692698f425bSmrg XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4693698f425bSmrg memcpy (concat_name, tmp, tmp_len); 4694698f425bSmrg concat_name[tmp_len] = '/'; 4695698f425bSmrg strcpy (concat_name + tmp_len + 1, wrapper); 4696698f425bSmrg } 4697698f425bSmrg else 4698698f425bSmrg { 4699698f425bSmrg concat_name = 4700698f425bSmrg XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); 4701698f425bSmrg memcpy (concat_name, p, p_len); 4702698f425bSmrg concat_name[p_len] = '/'; 4703698f425bSmrg strcpy (concat_name + p_len + 1, wrapper); 4704698f425bSmrg } 4705698f425bSmrg if (check_executable (concat_name)) 4706698f425bSmrg return concat_name; 4707698f425bSmrg XFREE (concat_name); 4708698f425bSmrg } 4709698f425bSmrg } 4710698f425bSmrg /* not found in PATH; assume curdir */ 4711698f425bSmrg } 4712698f425bSmrg /* Relative path | not found in path: prepend cwd */ 4713698f425bSmrg if (getcwd (tmp, LT_PATHMAX) == NULL) 47149ef0b394Smrg lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", 47159ef0b394Smrg nonnull (strerror (errno))); 4716698f425bSmrg tmp_len = strlen (tmp); 4717698f425bSmrg concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); 4718698f425bSmrg memcpy (concat_name, tmp, tmp_len); 4719698f425bSmrg concat_name[tmp_len] = '/'; 4720698f425bSmrg strcpy (concat_name + tmp_len + 1, wrapper); 4721266e564dSmrg 4722698f425bSmrg if (check_executable (concat_name)) 4723698f425bSmrg return concat_name; 4724698f425bSmrg XFREE (concat_name); 4725698f425bSmrg return NULL; 4726698f425bSmrg} 4727266e564dSmrg 4728698f425bSmrgchar * 4729698f425bSmrgchase_symlinks (const char *pathspec) 4730698f425bSmrg{ 4731698f425bSmrg#ifndef S_ISLNK 4732698f425bSmrg return xstrdup (pathspec); 4733698f425bSmrg#else 4734698f425bSmrg char buf[LT_PATHMAX]; 4735698f425bSmrg struct stat s; 4736698f425bSmrg char *tmp_pathspec = xstrdup (pathspec); 4737698f425bSmrg char *p; 4738698f425bSmrg int has_symlinks = 0; 4739698f425bSmrg while (strlen (tmp_pathspec) && !has_symlinks) 4740698f425bSmrg { 47419ef0b394Smrg lt_debugprintf (__FILE__, __LINE__, 47429ef0b394Smrg "checking path component for symlinks: %s\n", 47439ef0b394Smrg tmp_pathspec); 4744698f425bSmrg if (lstat (tmp_pathspec, &s) == 0) 4745698f425bSmrg { 4746698f425bSmrg if (S_ISLNK (s.st_mode) != 0) 4747698f425bSmrg { 4748698f425bSmrg has_symlinks = 1; 4749698f425bSmrg break; 4750698f425bSmrg } 4751266e564dSmrg 4752698f425bSmrg /* search backwards for last DIR_SEPARATOR */ 4753698f425bSmrg p = tmp_pathspec + strlen (tmp_pathspec) - 1; 4754698f425bSmrg while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4755698f425bSmrg p--; 4756698f425bSmrg if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) 4757698f425bSmrg { 4758698f425bSmrg /* no more DIR_SEPARATORS left */ 4759698f425bSmrg break; 4760698f425bSmrg } 4761698f425bSmrg *p = '\0'; 4762698f425bSmrg } 4763698f425bSmrg else 4764698f425bSmrg { 47659ef0b394Smrg lt_fatal (__FILE__, __LINE__, 47669ef0b394Smrg "error accessing file \"%s\": %s", 47679ef0b394Smrg tmp_pathspec, nonnull (strerror (errno))); 4768698f425bSmrg } 4769698f425bSmrg } 4770698f425bSmrg XFREE (tmp_pathspec); 4771266e564dSmrg 4772698f425bSmrg if (!has_symlinks) 4773698f425bSmrg { 4774698f425bSmrg return xstrdup (pathspec); 4775698f425bSmrg } 4776266e564dSmrg 4777698f425bSmrg tmp_pathspec = realpath (pathspec, buf); 4778698f425bSmrg if (tmp_pathspec == 0) 4779698f425bSmrg { 47809ef0b394Smrg lt_fatal (__FILE__, __LINE__, 47819ef0b394Smrg "could not follow symlinks for %s", pathspec); 4782698f425bSmrg } 4783698f425bSmrg return xstrdup (tmp_pathspec); 4784698f425bSmrg#endif 4785698f425bSmrg} 4786266e564dSmrg 4787698f425bSmrgchar * 4788698f425bSmrgstrendzap (char *str, const char *pat) 4789698f425bSmrg{ 4790698f425bSmrg size_t len, patlen; 4791266e564dSmrg 4792698f425bSmrg assert (str != NULL); 4793698f425bSmrg assert (pat != NULL); 4794266e564dSmrg 4795698f425bSmrg len = strlen (str); 4796698f425bSmrg patlen = strlen (pat); 4797266e564dSmrg 4798698f425bSmrg if (patlen <= len) 4799698f425bSmrg { 4800698f425bSmrg str += len - patlen; 4801698f425bSmrg if (strcmp (str, pat) == 0) 4802698f425bSmrg *str = '\0'; 4803698f425bSmrg } 4804698f425bSmrg return str; 4805698f425bSmrg} 4806266e564dSmrg 48079ef0b394Smrgvoid 48089ef0b394Smrglt_debugprintf (const char *file, int line, const char *fmt, ...) 48099ef0b394Smrg{ 48109ef0b394Smrg va_list args; 48119ef0b394Smrg if (lt_debug) 48129ef0b394Smrg { 48139ef0b394Smrg (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); 48149ef0b394Smrg va_start (args, fmt); 48159ef0b394Smrg (void) vfprintf (stderr, fmt, args); 48169ef0b394Smrg va_end (args); 48179ef0b394Smrg } 48189ef0b394Smrg} 48199ef0b394Smrg 4820698f425bSmrgstatic void 48219ef0b394Smrglt_error_core (int exit_status, const char *file, 48229ef0b394Smrg int line, const char *mode, 4823698f425bSmrg const char *message, va_list ap) 4824698f425bSmrg{ 48259ef0b394Smrg fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); 4826698f425bSmrg vfprintf (stderr, message, ap); 4827698f425bSmrg fprintf (stderr, ".\n"); 4828266e564dSmrg 4829698f425bSmrg if (exit_status >= 0) 4830698f425bSmrg exit (exit_status); 4831698f425bSmrg} 4832266e564dSmrg 4833698f425bSmrgvoid 48349ef0b394Smrglt_fatal (const char *file, int line, const char *message, ...) 4835698f425bSmrg{ 4836698f425bSmrg va_list ap; 4837698f425bSmrg va_start (ap, message); 48389ef0b394Smrg lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); 4839698f425bSmrg va_end (ap); 4840698f425bSmrg} 4841266e564dSmrg 48429ef0b394Smrgstatic const char * 48439ef0b394Smrgnonnull (const char *s) 48449ef0b394Smrg{ 48459ef0b394Smrg return s ? s : "(null)"; 48469ef0b394Smrg} 48479ef0b394Smrg 48489ef0b394Smrgstatic const char * 48499ef0b394Smrgnonempty (const char *s) 48509ef0b394Smrg{ 48519ef0b394Smrg return (s && !*s) ? "(empty)" : nonnull (s); 48529ef0b394Smrg} 48539ef0b394Smrg 4854698f425bSmrgvoid 4855698f425bSmrglt_setenv (const char *name, const char *value) 4856698f425bSmrg{ 48579ef0b394Smrg lt_debugprintf (__FILE__, __LINE__, 48589ef0b394Smrg "(lt_setenv) setting '%s' to '%s'\n", 48599ef0b394Smrg nonnull (name), nonnull (value)); 4860698f425bSmrg { 4861698f425bSmrg#ifdef HAVE_SETENV 4862698f425bSmrg /* always make a copy, for consistency with !HAVE_SETENV */ 4863698f425bSmrg char *str = xstrdup (value); 4864698f425bSmrg setenv (name, str, 1); 4865698f425bSmrg#else 4866698f425bSmrg int len = strlen (name) + 1 + strlen (value) + 1; 4867698f425bSmrg char *str = XMALLOC (char, len); 4868698f425bSmrg sprintf (str, "%s=%s", name, value); 4869698f425bSmrg if (putenv (str) != EXIT_SUCCESS) 4870698f425bSmrg { 4871698f425bSmrg XFREE (str); 4872698f425bSmrg } 4873698f425bSmrg#endif 4874698f425bSmrg } 4875698f425bSmrg} 4876266e564dSmrg 4877698f425bSmrgchar * 4878698f425bSmrglt_extend_str (const char *orig_value, const char *add, int to_end) 4879698f425bSmrg{ 4880698f425bSmrg char *new_value; 4881698f425bSmrg if (orig_value && *orig_value) 4882698f425bSmrg { 4883698f425bSmrg int orig_value_len = strlen (orig_value); 4884698f425bSmrg int add_len = strlen (add); 4885698f425bSmrg new_value = XMALLOC (char, add_len + orig_value_len + 1); 4886698f425bSmrg if (to_end) 4887698f425bSmrg { 4888698f425bSmrg strcpy (new_value, orig_value); 4889698f425bSmrg strcpy (new_value + orig_value_len, add); 4890698f425bSmrg } 4891698f425bSmrg else 4892698f425bSmrg { 4893698f425bSmrg strcpy (new_value, add); 4894698f425bSmrg strcpy (new_value + add_len, orig_value); 4895698f425bSmrg } 4896698f425bSmrg } 4897698f425bSmrg else 4898698f425bSmrg { 4899698f425bSmrg new_value = xstrdup (add); 4900698f425bSmrg } 4901698f425bSmrg return new_value; 4902698f425bSmrg} 4903266e564dSmrg 4904698f425bSmrgvoid 4905698f425bSmrglt_update_exe_path (const char *name, const char *value) 4906698f425bSmrg{ 49079ef0b394Smrg lt_debugprintf (__FILE__, __LINE__, 49089ef0b394Smrg "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", 49099ef0b394Smrg nonnull (name), nonnull (value)); 4910266e564dSmrg 4911698f425bSmrg if (name && *name && value && *value) 4912698f425bSmrg { 4913698f425bSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 4914698f425bSmrg /* some systems can't cope with a ':'-terminated path #' */ 4915698f425bSmrg int len = strlen (new_value); 4916698f425bSmrg while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) 4917698f425bSmrg { 4918698f425bSmrg new_value[len-1] = '\0'; 4919698f425bSmrg } 4920698f425bSmrg lt_setenv (name, new_value); 4921698f425bSmrg XFREE (new_value); 4922698f425bSmrg } 4923698f425bSmrg} 4924266e564dSmrg 4925698f425bSmrgvoid 4926698f425bSmrglt_update_lib_path (const char *name, const char *value) 4927698f425bSmrg{ 49289ef0b394Smrg lt_debugprintf (__FILE__, __LINE__, 49299ef0b394Smrg "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", 49309ef0b394Smrg nonnull (name), nonnull (value)); 4931266e564dSmrg 4932698f425bSmrg if (name && *name && value && *value) 4933698f425bSmrg { 4934698f425bSmrg char *new_value = lt_extend_str (getenv (name), value, 0); 4935698f425bSmrg lt_setenv (name, new_value); 4936698f425bSmrg XFREE (new_value); 4937698f425bSmrg } 4938698f425bSmrg} 4939266e564dSmrg 49409ef0b394SmrgEOF 49419ef0b394Smrg case $host_os in 49429ef0b394Smrg mingw*) 49439ef0b394Smrg cat <<"EOF" 49449ef0b394Smrg 49459ef0b394Smrg/* Prepares an argument vector before calling spawn(). 49469ef0b394Smrg Note that spawn() does not by itself call the command interpreter 49479ef0b394Smrg (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : 49489ef0b394Smrg ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 49499ef0b394Smrg GetVersionEx(&v); 49509ef0b394Smrg v.dwPlatformId == VER_PLATFORM_WIN32_NT; 49519ef0b394Smrg }) ? "cmd.exe" : "command.com"). 49529ef0b394Smrg Instead it simply concatenates the arguments, separated by ' ', and calls 49539ef0b394Smrg CreateProcess(). We must quote the arguments since Win32 CreateProcess() 49549ef0b394Smrg interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a 49559ef0b394Smrg special way: 49569ef0b394Smrg - Space and tab are interpreted as delimiters. They are not treated as 49579ef0b394Smrg delimiters if they are surrounded by double quotes: "...". 49589ef0b394Smrg - Unescaped double quotes are removed from the input. Their only effect is 49599ef0b394Smrg that within double quotes, space and tab are treated like normal 49609ef0b394Smrg characters. 49619ef0b394Smrg - Backslashes not followed by double quotes are not special. 49629ef0b394Smrg - But 2*n+1 backslashes followed by a double quote become 49639ef0b394Smrg n backslashes followed by a double quote (n >= 0): 49649ef0b394Smrg \" -> " 49659ef0b394Smrg \\\" -> \" 49669ef0b394Smrg \\\\\" -> \\" 49679ef0b394Smrg */ 49689ef0b394Smrg#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" 49699ef0b394Smrg#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" 49709ef0b394Smrgchar ** 49719ef0b394Smrgprepare_spawn (char **argv) 49729ef0b394Smrg{ 49739ef0b394Smrg size_t argc; 49749ef0b394Smrg char **new_argv; 49759ef0b394Smrg size_t i; 49769ef0b394Smrg 49779ef0b394Smrg /* Count number of arguments. */ 49789ef0b394Smrg for (argc = 0; argv[argc] != NULL; argc++) 49799ef0b394Smrg ; 49809ef0b394Smrg 49819ef0b394Smrg /* Allocate new argument vector. */ 49829ef0b394Smrg new_argv = XMALLOC (char *, argc + 1); 49839ef0b394Smrg 49849ef0b394Smrg /* Put quoted arguments into the new argument vector. */ 49859ef0b394Smrg for (i = 0; i < argc; i++) 49869ef0b394Smrg { 49879ef0b394Smrg const char *string = argv[i]; 49889ef0b394Smrg 49899ef0b394Smrg if (string[0] == '\0') 49909ef0b394Smrg new_argv[i] = xstrdup ("\"\""); 49919ef0b394Smrg else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) 49929ef0b394Smrg { 49939ef0b394Smrg int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); 49949ef0b394Smrg size_t length; 49959ef0b394Smrg unsigned int backslashes; 49969ef0b394Smrg const char *s; 49979ef0b394Smrg char *quoted_string; 49989ef0b394Smrg char *p; 49999ef0b394Smrg 50009ef0b394Smrg length = 0; 50019ef0b394Smrg backslashes = 0; 50029ef0b394Smrg if (quote_around) 50039ef0b394Smrg length++; 50049ef0b394Smrg for (s = string; *s != '\0'; s++) 50059ef0b394Smrg { 50069ef0b394Smrg char c = *s; 50079ef0b394Smrg if (c == '"') 50089ef0b394Smrg length += backslashes + 1; 50099ef0b394Smrg length++; 50109ef0b394Smrg if (c == '\\') 50119ef0b394Smrg backslashes++; 50129ef0b394Smrg else 50139ef0b394Smrg backslashes = 0; 50149ef0b394Smrg } 50159ef0b394Smrg if (quote_around) 50169ef0b394Smrg length += backslashes + 1; 50179ef0b394Smrg 50189ef0b394Smrg quoted_string = XMALLOC (char, length + 1); 50199ef0b394Smrg 50209ef0b394Smrg p = quoted_string; 50219ef0b394Smrg backslashes = 0; 50229ef0b394Smrg if (quote_around) 50239ef0b394Smrg *p++ = '"'; 50249ef0b394Smrg for (s = string; *s != '\0'; s++) 50259ef0b394Smrg { 50269ef0b394Smrg char c = *s; 50279ef0b394Smrg if (c == '"') 50289ef0b394Smrg { 50299ef0b394Smrg unsigned int j; 50309ef0b394Smrg for (j = backslashes + 1; j > 0; j--) 50319ef0b394Smrg *p++ = '\\'; 50329ef0b394Smrg } 50339ef0b394Smrg *p++ = c; 50349ef0b394Smrg if (c == '\\') 50359ef0b394Smrg backslashes++; 50369ef0b394Smrg else 50379ef0b394Smrg backslashes = 0; 50389ef0b394Smrg } 50399ef0b394Smrg if (quote_around) 50409ef0b394Smrg { 50419ef0b394Smrg unsigned int j; 50429ef0b394Smrg for (j = backslashes; j > 0; j--) 50439ef0b394Smrg *p++ = '\\'; 50449ef0b394Smrg *p++ = '"'; 50459ef0b394Smrg } 50469ef0b394Smrg *p = '\0'; 50479ef0b394Smrg 50489ef0b394Smrg new_argv[i] = quoted_string; 50499ef0b394Smrg } 50509ef0b394Smrg else 50519ef0b394Smrg new_argv[i] = (char *) string; 50529ef0b394Smrg } 50539ef0b394Smrg new_argv[argc] = NULL; 50549ef0b394Smrg 50559ef0b394Smrg return new_argv; 50569ef0b394Smrg} 50579ef0b394SmrgEOF 50589ef0b394Smrg ;; 50599ef0b394Smrg esac 50609ef0b394Smrg 50619ef0b394Smrg cat <<"EOF" 50629ef0b394Smrgvoid lt_dump_script (FILE* f) 50639ef0b394Smrg{ 50649ef0b394SmrgEOF 50659ef0b394Smrg func_emit_wrapper yes | 5066fb5e8d76Smrg $SED -n -e ' 5067fb5e8d76Smrgs/^\(.\{79\}\)\(..*\)/\1\ 5068fb5e8d76Smrg\2/ 5069fb5e8d76Smrgh 5070fb5e8d76Smrgs/\([\\"]\)/\\\1/g 5071fb5e8d76Smrgs/$/\\n/ 5072fb5e8d76Smrgs/\([^\n]*\).*/ fputs ("\1", f);/p 5073fb5e8d76Smrgg 5074fb5e8d76SmrgD' 50759ef0b394Smrg cat <<"EOF" 50769ef0b394Smrg} 5077698f425bSmrgEOF 5078698f425bSmrg} 5079698f425bSmrg# end: func_emit_cwrapperexe_src 5080266e564dSmrg 50819ef0b394Smrg# func_win32_import_lib_p ARG 50829ef0b394Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd 50839ef0b394Smrgfunc_win32_import_lib_p () 50849ef0b394Smrg{ 50859ef0b394Smrg $opt_debug 50869ef0b394Smrg case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in 50879ef0b394Smrg *import*) : ;; 50889ef0b394Smrg *) false ;; 50899ef0b394Smrg esac 50909ef0b394Smrg} 50919ef0b394Smrg 5092698f425bSmrg# func_mode_link arg... 5093698f425bSmrgfunc_mode_link () 5094698f425bSmrg{ 5095698f425bSmrg $opt_debug 5096698f425bSmrg case $host in 5097698f425bSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 5098698f425bSmrg # It is impossible to link a dll without this setting, and 5099698f425bSmrg # we shouldn't force the makefile maintainer to figure out 5100698f425bSmrg # which system we are compiling for in order to pass an extra 5101698f425bSmrg # flag for every libtool invocation. 5102698f425bSmrg # allow_undefined=no 5103266e564dSmrg 5104698f425bSmrg # FIXME: Unfortunately, there are problems with the above when trying 5105698f425bSmrg # to make a dll which has undefined symbols, in which case not 5106698f425bSmrg # even a static library is built. For now, we need to specify 5107698f425bSmrg # -no-undefined on the libtool link line when we can be certain 5108698f425bSmrg # that all symbols are satisfied, otherwise we get a static library. 5109698f425bSmrg allow_undefined=yes 5110698f425bSmrg ;; 5111698f425bSmrg *) 5112698f425bSmrg allow_undefined=yes 5113698f425bSmrg ;; 5114698f425bSmrg esac 5115698f425bSmrg libtool_args=$nonopt 5116698f425bSmrg base_compile="$nonopt $@" 5117698f425bSmrg compile_command=$nonopt 5118698f425bSmrg finalize_command=$nonopt 5119266e564dSmrg 5120698f425bSmrg compile_rpath= 5121698f425bSmrg finalize_rpath= 5122698f425bSmrg compile_shlibpath= 5123698f425bSmrg finalize_shlibpath= 5124698f425bSmrg convenience= 5125698f425bSmrg old_convenience= 5126698f425bSmrg deplibs= 5127698f425bSmrg old_deplibs= 5128698f425bSmrg compiler_flags= 5129698f425bSmrg linker_flags= 5130698f425bSmrg dllsearchpath= 5131698f425bSmrg lib_search_path=`pwd` 5132698f425bSmrg inst_prefix_dir= 5133698f425bSmrg new_inherited_linker_flags= 5134266e564dSmrg 5135698f425bSmrg avoid_version=no 51369ef0b394Smrg bindir= 5137698f425bSmrg dlfiles= 5138698f425bSmrg dlprefiles= 5139698f425bSmrg dlself=no 5140698f425bSmrg export_dynamic=no 5141698f425bSmrg export_symbols= 5142698f425bSmrg export_symbols_regex= 5143698f425bSmrg generated= 5144698f425bSmrg libobjs= 5145698f425bSmrg ltlibs= 5146698f425bSmrg module=no 5147698f425bSmrg no_install=no 5148698f425bSmrg objs= 5149698f425bSmrg non_pic_objects= 5150698f425bSmrg precious_files_regex= 5151698f425bSmrg prefer_static_libs=no 5152698f425bSmrg preload=no 5153698f425bSmrg prev= 5154698f425bSmrg prevarg= 5155698f425bSmrg release= 5156698f425bSmrg rpath= 5157698f425bSmrg xrpath= 5158698f425bSmrg perm_rpath= 5159698f425bSmrg temp_rpath= 5160698f425bSmrg thread_safe=no 5161698f425bSmrg vinfo= 5162698f425bSmrg vinfo_number=no 5163698f425bSmrg weak_libs= 5164698f425bSmrg single_module="${wl}-single_module" 5165698f425bSmrg func_infer_tag $base_compile 5166266e564dSmrg 5167698f425bSmrg # We need to know -static, to get the right output filenames. 5168698f425bSmrg for arg 5169698f425bSmrg do 5170698f425bSmrg case $arg in 5171698f425bSmrg -shared) 5172698f425bSmrg test "$build_libtool_libs" != yes && \ 5173698f425bSmrg func_fatal_configuration "can not build a shared library" 5174698f425bSmrg build_old_libs=no 5175698f425bSmrg break 5176698f425bSmrg ;; 5177698f425bSmrg -all-static | -static | -static-libtool-libs) 5178698f425bSmrg case $arg in 5179698f425bSmrg -all-static) 5180698f425bSmrg if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then 5181698f425bSmrg func_warning "complete static linking is impossible in this configuration" 5182698f425bSmrg fi 5183698f425bSmrg if test -n "$link_static_flag"; then 5184698f425bSmrg dlopen_self=$dlopen_self_static 5185698f425bSmrg fi 5186698f425bSmrg prefer_static_libs=yes 5187698f425bSmrg ;; 5188698f425bSmrg -static) 5189698f425bSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5190698f425bSmrg dlopen_self=$dlopen_self_static 5191698f425bSmrg fi 5192698f425bSmrg prefer_static_libs=built 5193698f425bSmrg ;; 5194698f425bSmrg -static-libtool-libs) 5195698f425bSmrg if test -z "$pic_flag" && test -n "$link_static_flag"; then 5196698f425bSmrg dlopen_self=$dlopen_self_static 5197698f425bSmrg fi 5198698f425bSmrg prefer_static_libs=yes 5199698f425bSmrg ;; 5200698f425bSmrg esac 5201698f425bSmrg build_libtool_libs=no 5202698f425bSmrg build_old_libs=yes 5203698f425bSmrg break 5204698f425bSmrg ;; 5205698f425bSmrg esac 5206698f425bSmrg done 5207266e564dSmrg 5208698f425bSmrg # See if our shared archives depend on static archives. 5209698f425bSmrg test -n "$old_archive_from_new_cmds" && build_old_libs=yes 5210266e564dSmrg 5211698f425bSmrg # Go through the arguments, transforming them on the way. 5212698f425bSmrg while test "$#" -gt 0; do 5213698f425bSmrg arg="$1" 5214698f425bSmrg shift 5215698f425bSmrg func_quote_for_eval "$arg" 5216698f425bSmrg qarg=$func_quote_for_eval_unquoted_result 5217698f425bSmrg func_append libtool_args " $func_quote_for_eval_result" 5218266e564dSmrg 5219698f425bSmrg # If the previous option needs an argument, assign it. 5220698f425bSmrg if test -n "$prev"; then 5221698f425bSmrg case $prev in 5222698f425bSmrg output) 5223698f425bSmrg func_append compile_command " @OUTPUT@" 5224698f425bSmrg func_append finalize_command " @OUTPUT@" 5225698f425bSmrg ;; 5226698f425bSmrg esac 5227266e564dSmrg 5228698f425bSmrg case $prev in 52299ef0b394Smrg bindir) 52309ef0b394Smrg bindir="$arg" 52319ef0b394Smrg prev= 52329ef0b394Smrg continue 52339ef0b394Smrg ;; 5234698f425bSmrg dlfiles|dlprefiles) 5235698f425bSmrg if test "$preload" = no; then 5236698f425bSmrg # Add the symbol object into the linking commands. 5237698f425bSmrg func_append compile_command " @SYMFILE@" 5238698f425bSmrg func_append finalize_command " @SYMFILE@" 5239698f425bSmrg preload=yes 5240266e564dSmrg fi 5241698f425bSmrg case $arg in 5242698f425bSmrg *.la | *.lo) ;; # We handle these cases below. 5243698f425bSmrg force) 5244698f425bSmrg if test "$dlself" = no; then 5245698f425bSmrg dlself=needless 5246698f425bSmrg export_dynamic=yes 5247698f425bSmrg fi 5248698f425bSmrg prev= 5249698f425bSmrg continue 5250698f425bSmrg ;; 5251698f425bSmrg self) 5252698f425bSmrg if test "$prev" = dlprefiles; then 5253698f425bSmrg dlself=yes 5254698f425bSmrg elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then 5255698f425bSmrg dlself=yes 5256698f425bSmrg else 5257698f425bSmrg dlself=needless 5258698f425bSmrg export_dynamic=yes 5259698f425bSmrg fi 5260698f425bSmrg prev= 5261698f425bSmrg continue 5262698f425bSmrg ;; 5263698f425bSmrg *) 5264698f425bSmrg if test "$prev" = dlfiles; then 52659ef0b394Smrg func_append dlfiles " $arg" 5266698f425bSmrg else 52679ef0b394Smrg func_append dlprefiles " $arg" 5268698f425bSmrg fi 5269698f425bSmrg prev= 5270698f425bSmrg continue 5271698f425bSmrg ;; 5272698f425bSmrg esac 5273698f425bSmrg ;; 5274698f425bSmrg expsyms) 5275698f425bSmrg export_symbols="$arg" 5276698f425bSmrg test -f "$arg" \ 5277698f425bSmrg || func_fatal_error "symbol file \`$arg' does not exist" 5278698f425bSmrg prev= 5279698f425bSmrg continue 5280698f425bSmrg ;; 5281698f425bSmrg expsyms_regex) 5282698f425bSmrg export_symbols_regex="$arg" 5283698f425bSmrg prev= 5284698f425bSmrg continue 5285698f425bSmrg ;; 5286698f425bSmrg framework) 5287266e564dSmrg case $host in 5288698f425bSmrg *-*-darwin*) 5289698f425bSmrg case "$deplibs " in 5290698f425bSmrg *" $qarg.ltframework "*) ;; 52919ef0b394Smrg *) func_append deplibs " $qarg.ltframework" # this is fixed later 5292698f425bSmrg ;; 5293698f425bSmrg esac 5294698f425bSmrg ;; 5295266e564dSmrg esac 5296698f425bSmrg prev= 5297698f425bSmrg continue 5298266e564dSmrg ;; 5299698f425bSmrg inst_prefix) 5300698f425bSmrg inst_prefix_dir="$arg" 5301698f425bSmrg prev= 5302698f425bSmrg continue 5303266e564dSmrg ;; 5304698f425bSmrg objectlist) 5305698f425bSmrg if test -f "$arg"; then 5306698f425bSmrg save_arg=$arg 5307698f425bSmrg moreargs= 5308698f425bSmrg for fil in `cat "$save_arg"` 5309698f425bSmrg do 53109ef0b394Smrg# func_append moreargs " $fil" 5311698f425bSmrg arg=$fil 5312698f425bSmrg # A libtool-controlled object. 5313266e564dSmrg 5314698f425bSmrg # Check to see that this really is a libtool object. 5315698f425bSmrg if func_lalib_unsafe_p "$arg"; then 5316698f425bSmrg pic_object= 5317698f425bSmrg non_pic_object= 5318266e564dSmrg 5319698f425bSmrg # Read the .lo file 5320698f425bSmrg func_source "$arg" 5321266e564dSmrg 5322698f425bSmrg if test -z "$pic_object" || 5323698f425bSmrg test -z "$non_pic_object" || 5324698f425bSmrg test "$pic_object" = none && 5325698f425bSmrg test "$non_pic_object" = none; then 5326698f425bSmrg func_fatal_error "cannot find name of object for \`$arg'" 5327698f425bSmrg fi 5328266e564dSmrg 5329698f425bSmrg # Extract subdirectory from the argument. 5330698f425bSmrg func_dirname "$arg" "/" "" 5331698f425bSmrg xdir="$func_dirname_result" 5332266e564dSmrg 5333698f425bSmrg if test "$pic_object" != none; then 5334698f425bSmrg # Prepend the subdirectory the object is found in. 5335698f425bSmrg pic_object="$xdir$pic_object" 5336266e564dSmrg 5337698f425bSmrg if test "$prev" = dlfiles; then 5338698f425bSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 53399ef0b394Smrg func_append dlfiles " $pic_object" 5340698f425bSmrg prev= 5341698f425bSmrg continue 5342698f425bSmrg else 5343698f425bSmrg # If libtool objects are unsupported, then we need to preload. 5344698f425bSmrg prev=dlprefiles 5345698f425bSmrg fi 5346698f425bSmrg fi 5347266e564dSmrg 5348698f425bSmrg # CHECK ME: I think I busted this. -Ossama 5349698f425bSmrg if test "$prev" = dlprefiles; then 5350698f425bSmrg # Preload the old-style object. 53519ef0b394Smrg func_append dlprefiles " $pic_object" 5352698f425bSmrg prev= 5353698f425bSmrg fi 5354266e564dSmrg 5355698f425bSmrg # A PIC object. 5356698f425bSmrg func_append libobjs " $pic_object" 5357698f425bSmrg arg="$pic_object" 5358698f425bSmrg fi 5359266e564dSmrg 5360698f425bSmrg # Non-PIC object. 5361698f425bSmrg if test "$non_pic_object" != none; then 5362698f425bSmrg # Prepend the subdirectory the object is found in. 5363698f425bSmrg non_pic_object="$xdir$non_pic_object" 5364698f425bSmrg 5365698f425bSmrg # A standard non-PIC object 5366698f425bSmrg func_append non_pic_objects " $non_pic_object" 5367698f425bSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 5368698f425bSmrg arg="$non_pic_object" 5369698f425bSmrg fi 5370698f425bSmrg else 5371698f425bSmrg # If the PIC object exists, use it instead. 5372698f425bSmrg # $xdir was prepended to $pic_object above. 5373698f425bSmrg non_pic_object="$pic_object" 5374698f425bSmrg func_append non_pic_objects " $non_pic_object" 5375698f425bSmrg fi 5376698f425bSmrg else 5377698f425bSmrg # Only an error if not doing a dry-run. 5378698f425bSmrg if $opt_dry_run; then 5379698f425bSmrg # Extract subdirectory from the argument. 5380698f425bSmrg func_dirname "$arg" "/" "" 5381698f425bSmrg xdir="$func_dirname_result" 5382698f425bSmrg 5383698f425bSmrg func_lo2o "$arg" 5384698f425bSmrg pic_object=$xdir$objdir/$func_lo2o_result 5385698f425bSmrg non_pic_object=$xdir$func_lo2o_result 5386698f425bSmrg func_append libobjs " $pic_object" 5387698f425bSmrg func_append non_pic_objects " $non_pic_object" 5388698f425bSmrg else 5389698f425bSmrg func_fatal_error "\`$arg' is not a valid libtool object" 5390698f425bSmrg fi 5391698f425bSmrg fi 5392698f425bSmrg done 5393266e564dSmrg else 5394698f425bSmrg func_fatal_error "link input file \`$arg' does not exist" 5395266e564dSmrg fi 5396698f425bSmrg arg=$save_arg 5397698f425bSmrg prev= 5398698f425bSmrg continue 5399698f425bSmrg ;; 5400698f425bSmrg precious_regex) 5401698f425bSmrg precious_files_regex="$arg" 5402698f425bSmrg prev= 5403698f425bSmrg continue 5404698f425bSmrg ;; 5405698f425bSmrg release) 5406698f425bSmrg release="-$arg" 5407698f425bSmrg prev= 5408698f425bSmrg continue 5409698f425bSmrg ;; 5410698f425bSmrg rpath | xrpath) 5411698f425bSmrg # We need an absolute path. 5412698f425bSmrg case $arg in 5413698f425bSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5414698f425bSmrg *) 5415698f425bSmrg func_fatal_error "only absolute run-paths are allowed" 5416698f425bSmrg ;; 5417698f425bSmrg esac 5418698f425bSmrg if test "$prev" = rpath; then 5419698f425bSmrg case "$rpath " in 5420698f425bSmrg *" $arg "*) ;; 54219ef0b394Smrg *) func_append rpath " $arg" ;; 5422698f425bSmrg esac 5423266e564dSmrg else 5424698f425bSmrg case "$xrpath " in 5425698f425bSmrg *" $arg "*) ;; 54269ef0b394Smrg *) func_append xrpath " $arg" ;; 5427698f425bSmrg esac 5428266e564dSmrg fi 5429698f425bSmrg prev= 5430698f425bSmrg continue 5431698f425bSmrg ;; 5432698f425bSmrg shrext) 5433698f425bSmrg shrext_cmds="$arg" 5434698f425bSmrg prev= 5435698f425bSmrg continue 5436698f425bSmrg ;; 5437698f425bSmrg weak) 54389ef0b394Smrg func_append weak_libs " $arg" 5439698f425bSmrg prev= 5440698f425bSmrg continue 5441698f425bSmrg ;; 5442698f425bSmrg xcclinker) 54439ef0b394Smrg func_append linker_flags " $qarg" 54449ef0b394Smrg func_append compiler_flags " $qarg" 5445698f425bSmrg prev= 5446698f425bSmrg func_append compile_command " $qarg" 5447698f425bSmrg func_append finalize_command " $qarg" 5448698f425bSmrg continue 5449698f425bSmrg ;; 5450698f425bSmrg xcompiler) 54519ef0b394Smrg func_append compiler_flags " $qarg" 5452698f425bSmrg prev= 5453698f425bSmrg func_append compile_command " $qarg" 5454698f425bSmrg func_append finalize_command " $qarg" 5455698f425bSmrg continue 5456698f425bSmrg ;; 5457698f425bSmrg xlinker) 54589ef0b394Smrg func_append linker_flags " $qarg" 54599ef0b394Smrg func_append compiler_flags " $wl$qarg" 5460698f425bSmrg prev= 5461698f425bSmrg func_append compile_command " $wl$qarg" 5462698f425bSmrg func_append finalize_command " $wl$qarg" 5463698f425bSmrg continue 5464698f425bSmrg ;; 5465698f425bSmrg *) 5466698f425bSmrg eval "$prev=\"\$arg\"" 5467698f425bSmrg prev= 5468698f425bSmrg continue 5469698f425bSmrg ;; 5470266e564dSmrg esac 5471698f425bSmrg fi # test -n "$prev" 5472266e564dSmrg 5473698f425bSmrg prevarg="$arg" 5474266e564dSmrg 5475698f425bSmrg case $arg in 5476698f425bSmrg -all-static) 5477698f425bSmrg if test -n "$link_static_flag"; then 5478698f425bSmrg # See comment for -static flag below, for more details. 5479698f425bSmrg func_append compile_command " $link_static_flag" 5480698f425bSmrg func_append finalize_command " $link_static_flag" 5481698f425bSmrg fi 5482698f425bSmrg continue 5483698f425bSmrg ;; 5484266e564dSmrg 5485698f425bSmrg -allow-undefined) 5486698f425bSmrg # FIXME: remove this flag sometime in the future. 5487698f425bSmrg func_fatal_error "\`-allow-undefined' must not be used because it is the default" 5488698f425bSmrg ;; 5489266e564dSmrg 5490698f425bSmrg -avoid-version) 5491698f425bSmrg avoid_version=yes 5492698f425bSmrg continue 5493698f425bSmrg ;; 5494266e564dSmrg 54959ef0b394Smrg -bindir) 54969ef0b394Smrg prev=bindir 54979ef0b394Smrg continue 54989ef0b394Smrg ;; 54999ef0b394Smrg 5500698f425bSmrg -dlopen) 5501698f425bSmrg prev=dlfiles 5502698f425bSmrg continue 5503698f425bSmrg ;; 5504266e564dSmrg 5505698f425bSmrg -dlpreopen) 5506698f425bSmrg prev=dlprefiles 5507698f425bSmrg continue 5508698f425bSmrg ;; 5509266e564dSmrg 5510698f425bSmrg -export-dynamic) 5511698f425bSmrg export_dynamic=yes 5512698f425bSmrg continue 5513698f425bSmrg ;; 5514266e564dSmrg 5515698f425bSmrg -export-symbols | -export-symbols-regex) 5516698f425bSmrg if test -n "$export_symbols" || test -n "$export_symbols_regex"; then 5517698f425bSmrg func_fatal_error "more than one -exported-symbols argument is not allowed" 5518698f425bSmrg fi 5519698f425bSmrg if test "X$arg" = "X-export-symbols"; then 5520698f425bSmrg prev=expsyms 5521698f425bSmrg else 5522698f425bSmrg prev=expsyms_regex 5523698f425bSmrg fi 5524698f425bSmrg continue 5525698f425bSmrg ;; 5526266e564dSmrg 5527698f425bSmrg -framework) 5528698f425bSmrg prev=framework 5529698f425bSmrg continue 5530698f425bSmrg ;; 5531266e564dSmrg 5532698f425bSmrg -inst-prefix-dir) 5533698f425bSmrg prev=inst_prefix 5534698f425bSmrg continue 5535698f425bSmrg ;; 5536266e564dSmrg 5537698f425bSmrg # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* 5538698f425bSmrg # so, if we see these flags be careful not to treat them like -L 5539698f425bSmrg -L[A-Z][A-Z]*:*) 5540698f425bSmrg case $with_gcc/$host in 5541698f425bSmrg no/*-*-irix* | /*-*-irix*) 5542698f425bSmrg func_append compile_command " $arg" 5543698f425bSmrg func_append finalize_command " $arg" 5544698f425bSmrg ;; 5545698f425bSmrg esac 5546698f425bSmrg continue 5547698f425bSmrg ;; 5548266e564dSmrg 5549698f425bSmrg -L*) 55509ef0b394Smrg func_stripname "-L" '' "$arg" 55519ef0b394Smrg if test -z "$func_stripname_result"; then 5552698f425bSmrg if test "$#" -gt 0; then 5553698f425bSmrg func_fatal_error "require no space between \`-L' and \`$1'" 5554698f425bSmrg else 5555698f425bSmrg func_fatal_error "need path for \`-L' option" 5556698f425bSmrg fi 5557698f425bSmrg fi 55589ef0b394Smrg func_resolve_sysroot "$func_stripname_result" 55599ef0b394Smrg dir=$func_resolve_sysroot_result 5560698f425bSmrg # We need an absolute path. 5561698f425bSmrg case $dir in 5562698f425bSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 5563698f425bSmrg *) 5564698f425bSmrg absdir=`cd "$dir" && pwd` 5565698f425bSmrg test -z "$absdir" && \ 5566698f425bSmrg func_fatal_error "cannot determine absolute directory name of \`$dir'" 5567698f425bSmrg dir="$absdir" 5568698f425bSmrg ;; 5569698f425bSmrg esac 5570698f425bSmrg case "$deplibs " in 55719ef0b394Smrg *" -L$dir "* | *" $arg "*) 55729ef0b394Smrg # Will only happen for absolute or sysroot arguments 55739ef0b394Smrg ;; 5574698f425bSmrg *) 55759ef0b394Smrg # Preserve sysroot, but never include relative directories 55769ef0b394Smrg case $dir in 55779ef0b394Smrg [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; 55789ef0b394Smrg *) func_append deplibs " -L$dir" ;; 55799ef0b394Smrg esac 55809ef0b394Smrg func_append lib_search_path " $dir" 5581698f425bSmrg ;; 5582698f425bSmrg esac 5583698f425bSmrg case $host in 5584698f425bSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 55859ef0b394Smrg testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` 5586698f425bSmrg case :$dllsearchpath: in 5587698f425bSmrg *":$dir:"*) ;; 5588698f425bSmrg ::) dllsearchpath=$dir;; 55899ef0b394Smrg *) func_append dllsearchpath ":$dir";; 5590698f425bSmrg esac 5591698f425bSmrg case :$dllsearchpath: in 5592698f425bSmrg *":$testbindir:"*) ;; 5593698f425bSmrg ::) dllsearchpath=$testbindir;; 55949ef0b394Smrg *) func_append dllsearchpath ":$testbindir";; 5595698f425bSmrg esac 5596698f425bSmrg ;; 5597698f425bSmrg esac 5598698f425bSmrg continue 5599698f425bSmrg ;; 5600266e564dSmrg 5601698f425bSmrg -l*) 5602698f425bSmrg if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then 5603698f425bSmrg case $host in 56049ef0b394Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) 5605698f425bSmrg # These systems don't actually have a C or math library (as such) 5606698f425bSmrg continue 5607698f425bSmrg ;; 5608698f425bSmrg *-*-os2*) 5609698f425bSmrg # These systems don't actually have a C library (as such) 5610698f425bSmrg test "X$arg" = "X-lc" && continue 5611698f425bSmrg ;; 5612698f425bSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5613698f425bSmrg # Do not include libc due to us having libc/libc_r. 5614698f425bSmrg test "X$arg" = "X-lc" && continue 5615698f425bSmrg ;; 5616698f425bSmrg *-*-rhapsody* | *-*-darwin1.[012]) 5617698f425bSmrg # Rhapsody C and math libraries are in the System framework 56189ef0b394Smrg func_append deplibs " System.ltframework" 5619698f425bSmrg continue 5620698f425bSmrg ;; 5621698f425bSmrg *-*-sco3.2v5* | *-*-sco5v6*) 5622698f425bSmrg # Causes problems with __ctype 5623698f425bSmrg test "X$arg" = "X-lc" && continue 5624698f425bSmrg ;; 5625698f425bSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 5626698f425bSmrg # Compiler inserts libc in the correct place for threads to work 5627698f425bSmrg test "X$arg" = "X-lc" && continue 5628698f425bSmrg ;; 5629698f425bSmrg esac 5630698f425bSmrg elif test "X$arg" = "X-lc_r"; then 5631698f425bSmrg case $host in 5632698f425bSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 5633698f425bSmrg # Do not include libc_r directly, use -pthread flag. 5634698f425bSmrg continue 5635698f425bSmrg ;; 5636698f425bSmrg esac 5637698f425bSmrg fi 56389ef0b394Smrg func_append deplibs " $arg" 5639698f425bSmrg continue 5640698f425bSmrg ;; 5641266e564dSmrg 5642698f425bSmrg -module) 5643698f425bSmrg module=yes 5644698f425bSmrg continue 5645698f425bSmrg ;; 5646266e564dSmrg 5647698f425bSmrg # Tru64 UNIX uses -model [arg] to determine the layout of C++ 5648698f425bSmrg # classes, name mangling, and exception handling. 5649698f425bSmrg # Darwin uses the -arch flag to determine output architecture. 56509ef0b394Smrg -model|-arch|-isysroot|--sysroot) 56519ef0b394Smrg func_append compiler_flags " $arg" 5652698f425bSmrg func_append compile_command " $arg" 5653698f425bSmrg func_append finalize_command " $arg" 5654698f425bSmrg prev=xcompiler 5655698f425bSmrg continue 5656698f425bSmrg ;; 5657266e564dSmrg 5658fb5e8d76Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 5659fb5e8d76Smrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 56609ef0b394Smrg func_append compiler_flags " $arg" 5661698f425bSmrg func_append compile_command " $arg" 5662698f425bSmrg func_append finalize_command " $arg" 5663698f425bSmrg case "$new_inherited_linker_flags " in 5664698f425bSmrg *" $arg "*) ;; 56659ef0b394Smrg * ) func_append new_inherited_linker_flags " $arg" ;; 5666698f425bSmrg esac 5667698f425bSmrg continue 5668698f425bSmrg ;; 5669266e564dSmrg 5670698f425bSmrg -multi_module) 5671698f425bSmrg single_module="${wl}-multi_module" 5672698f425bSmrg continue 5673698f425bSmrg ;; 5674266e564dSmrg 5675698f425bSmrg -no-fast-install) 5676698f425bSmrg fast_install=no 5677698f425bSmrg continue 5678698f425bSmrg ;; 5679266e564dSmrg 5680698f425bSmrg -no-install) 5681698f425bSmrg case $host in 5682698f425bSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) 5683698f425bSmrg # The PATH hackery in wrapper scripts is required on Windows 5684698f425bSmrg # and Darwin in order for the loader to find any dlls it needs. 5685698f425bSmrg func_warning "\`-no-install' is ignored for $host" 5686698f425bSmrg func_warning "assuming \`-no-fast-install' instead" 5687698f425bSmrg fast_install=no 5688698f425bSmrg ;; 5689698f425bSmrg *) no_install=yes ;; 5690698f425bSmrg esac 5691698f425bSmrg continue 5692698f425bSmrg ;; 5693266e564dSmrg 5694698f425bSmrg -no-undefined) 5695698f425bSmrg allow_undefined=no 5696698f425bSmrg continue 5697698f425bSmrg ;; 5698266e564dSmrg 5699698f425bSmrg -objectlist) 5700698f425bSmrg prev=objectlist 5701698f425bSmrg continue 5702698f425bSmrg ;; 5703266e564dSmrg 5704698f425bSmrg -o) prev=output ;; 5705266e564dSmrg 5706698f425bSmrg -precious-files-regex) 5707698f425bSmrg prev=precious_regex 5708698f425bSmrg continue 5709698f425bSmrg ;; 5710266e564dSmrg 5711698f425bSmrg -release) 5712698f425bSmrg prev=release 5713698f425bSmrg continue 5714698f425bSmrg ;; 5715266e564dSmrg 5716698f425bSmrg -rpath) 5717698f425bSmrg prev=rpath 5718698f425bSmrg continue 5719698f425bSmrg ;; 5720266e564dSmrg 5721698f425bSmrg -R) 5722698f425bSmrg prev=xrpath 5723698f425bSmrg continue 5724698f425bSmrg ;; 5725266e564dSmrg 5726698f425bSmrg -R*) 5727698f425bSmrg func_stripname '-R' '' "$arg" 5728698f425bSmrg dir=$func_stripname_result 5729698f425bSmrg # We need an absolute path. 5730698f425bSmrg case $dir in 5731698f425bSmrg [\\/]* | [A-Za-z]:[\\/]*) ;; 57329ef0b394Smrg =*) 57339ef0b394Smrg func_stripname '=' '' "$dir" 57349ef0b394Smrg dir=$lt_sysroot$func_stripname_result 57359ef0b394Smrg ;; 5736698f425bSmrg *) 5737698f425bSmrg func_fatal_error "only absolute run-paths are allowed" 5738698f425bSmrg ;; 5739698f425bSmrg esac 5740698f425bSmrg case "$xrpath " in 5741698f425bSmrg *" $dir "*) ;; 57429ef0b394Smrg *) func_append xrpath " $dir" ;; 5743698f425bSmrg esac 5744698f425bSmrg continue 5745698f425bSmrg ;; 5746266e564dSmrg 5747698f425bSmrg -shared) 5748698f425bSmrg # The effects of -shared are defined in a previous loop. 5749698f425bSmrg continue 5750698f425bSmrg ;; 5751266e564dSmrg 5752698f425bSmrg -shrext) 5753698f425bSmrg prev=shrext 5754698f425bSmrg continue 5755698f425bSmrg ;; 5756266e564dSmrg 5757698f425bSmrg -static | -static-libtool-libs) 5758698f425bSmrg # The effects of -static are defined in a previous loop. 5759698f425bSmrg # We used to do the same as -all-static on platforms that 5760698f425bSmrg # didn't have a PIC flag, but the assumption that the effects 5761698f425bSmrg # would be equivalent was wrong. It would break on at least 5762698f425bSmrg # Digital Unix and AIX. 5763698f425bSmrg continue 5764698f425bSmrg ;; 5765266e564dSmrg 5766698f425bSmrg -thread-safe) 5767698f425bSmrg thread_safe=yes 5768698f425bSmrg continue 5769698f425bSmrg ;; 5770266e564dSmrg 5771698f425bSmrg -version-info) 5772698f425bSmrg prev=vinfo 5773698f425bSmrg continue 5774698f425bSmrg ;; 5775266e564dSmrg 5776698f425bSmrg -version-number) 5777698f425bSmrg prev=vinfo 5778698f425bSmrg vinfo_number=yes 5779698f425bSmrg continue 5780698f425bSmrg ;; 5781266e564dSmrg 5782698f425bSmrg -weak) 5783698f425bSmrg prev=weak 5784698f425bSmrg continue 5785698f425bSmrg ;; 5786266e564dSmrg 5787698f425bSmrg -Wc,*) 5788698f425bSmrg func_stripname '-Wc,' '' "$arg" 5789698f425bSmrg args=$func_stripname_result 5790698f425bSmrg arg= 5791698f425bSmrg save_ifs="$IFS"; IFS=',' 5792698f425bSmrg for flag in $args; do 5793698f425bSmrg IFS="$save_ifs" 5794698f425bSmrg func_quote_for_eval "$flag" 57959ef0b394Smrg func_append arg " $func_quote_for_eval_result" 57969ef0b394Smrg func_append compiler_flags " $func_quote_for_eval_result" 5797698f425bSmrg done 5798698f425bSmrg IFS="$save_ifs" 5799698f425bSmrg func_stripname ' ' '' "$arg" 5800698f425bSmrg arg=$func_stripname_result 5801698f425bSmrg ;; 5802266e564dSmrg 5803698f425bSmrg -Wl,*) 5804698f425bSmrg func_stripname '-Wl,' '' "$arg" 5805698f425bSmrg args=$func_stripname_result 5806698f425bSmrg arg= 5807698f425bSmrg save_ifs="$IFS"; IFS=',' 5808698f425bSmrg for flag in $args; do 5809698f425bSmrg IFS="$save_ifs" 5810698f425bSmrg func_quote_for_eval "$flag" 58119ef0b394Smrg func_append arg " $wl$func_quote_for_eval_result" 58129ef0b394Smrg func_append compiler_flags " $wl$func_quote_for_eval_result" 58139ef0b394Smrg func_append linker_flags " $func_quote_for_eval_result" 5814698f425bSmrg done 5815698f425bSmrg IFS="$save_ifs" 5816698f425bSmrg func_stripname ' ' '' "$arg" 5817698f425bSmrg arg=$func_stripname_result 5818698f425bSmrg ;; 5819266e564dSmrg 5820698f425bSmrg -Xcompiler) 5821698f425bSmrg prev=xcompiler 5822698f425bSmrg continue 5823698f425bSmrg ;; 5824266e564dSmrg 5825698f425bSmrg -Xlinker) 5826698f425bSmrg prev=xlinker 5827698f425bSmrg continue 5828698f425bSmrg ;; 5829266e564dSmrg 5830698f425bSmrg -XCClinker) 5831698f425bSmrg prev=xcclinker 5832698f425bSmrg continue 5833698f425bSmrg ;; 5834266e564dSmrg 5835698f425bSmrg # -msg_* for osf cc 5836698f425bSmrg -msg_*) 5837698f425bSmrg func_quote_for_eval "$arg" 5838698f425bSmrg arg="$func_quote_for_eval_result" 5839698f425bSmrg ;; 5840266e564dSmrg 58419ef0b394Smrg # Flags to be passed through unchanged, with rationale: 58429ef0b394Smrg # -64, -mips[0-9] enable 64-bit mode for the SGI compiler 58439ef0b394Smrg # -r[0-9][0-9]* specify processor for the SGI compiler 58449ef0b394Smrg # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler 58459ef0b394Smrg # +DA*, +DD* enable 64-bit mode for the HP compiler 58469ef0b394Smrg # -q* compiler args for the IBM compiler 58479ef0b394Smrg # -m*, -t[45]*, -txscale* architecture-specific flags for GCC 58489ef0b394Smrg # -F/path path to uninstalled frameworks, gcc on darwin 58499ef0b394Smrg # -p, -pg, --coverage, -fprofile-* profiling flags for GCC 58509ef0b394Smrg # @file GCC response files 58519ef0b394Smrg # -tp=* Portland pgcc target processor selection 58529ef0b394Smrg # --sysroot=* for sysroot support 58539ef0b394Smrg # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization 5854698f425bSmrg -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ 58559ef0b394Smrg -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ 58569ef0b394Smrg -O*|-flto*|-fwhopr*|-fuse-linker-plugin) 5857698f425bSmrg func_quote_for_eval "$arg" 5858698f425bSmrg arg="$func_quote_for_eval_result" 5859698f425bSmrg func_append compile_command " $arg" 5860698f425bSmrg func_append finalize_command " $arg" 58619ef0b394Smrg func_append compiler_flags " $arg" 5862698f425bSmrg continue 5863698f425bSmrg ;; 5864266e564dSmrg 5865698f425bSmrg # Some other compiler flag. 5866698f425bSmrg -* | +*) 5867698f425bSmrg func_quote_for_eval "$arg" 5868698f425bSmrg arg="$func_quote_for_eval_result" 5869698f425bSmrg ;; 5870266e564dSmrg 5871698f425bSmrg *.$objext) 5872698f425bSmrg # A standard object. 58739ef0b394Smrg func_append objs " $arg" 5874698f425bSmrg ;; 5875266e564dSmrg 5876698f425bSmrg *.lo) 5877698f425bSmrg # A libtool-controlled object. 5878266e564dSmrg 5879698f425bSmrg # Check to see that this really is a libtool object. 5880698f425bSmrg if func_lalib_unsafe_p "$arg"; then 5881698f425bSmrg pic_object= 5882698f425bSmrg non_pic_object= 5883266e564dSmrg 5884698f425bSmrg # Read the .lo file 5885698f425bSmrg func_source "$arg" 5886266e564dSmrg 5887698f425bSmrg if test -z "$pic_object" || 5888698f425bSmrg test -z "$non_pic_object" || 5889698f425bSmrg test "$pic_object" = none && 5890698f425bSmrg test "$non_pic_object" = none; then 5891698f425bSmrg func_fatal_error "cannot find name of object for \`$arg'" 5892698f425bSmrg fi 5893c5629e66Smrg 5894698f425bSmrg # Extract subdirectory from the argument. 5895698f425bSmrg func_dirname "$arg" "/" "" 5896698f425bSmrg xdir="$func_dirname_result" 5897266e564dSmrg 5898698f425bSmrg if test "$pic_object" != none; then 5899698f425bSmrg # Prepend the subdirectory the object is found in. 5900698f425bSmrg pic_object="$xdir$pic_object" 5901266e564dSmrg 5902698f425bSmrg if test "$prev" = dlfiles; then 5903698f425bSmrg if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then 59049ef0b394Smrg func_append dlfiles " $pic_object" 5905698f425bSmrg prev= 5906698f425bSmrg continue 5907698f425bSmrg else 5908698f425bSmrg # If libtool objects are unsupported, then we need to preload. 5909698f425bSmrg prev=dlprefiles 5910698f425bSmrg fi 5911698f425bSmrg fi 5912266e564dSmrg 5913698f425bSmrg # CHECK ME: I think I busted this. -Ossama 5914698f425bSmrg if test "$prev" = dlprefiles; then 5915698f425bSmrg # Preload the old-style object. 59169ef0b394Smrg func_append dlprefiles " $pic_object" 5917698f425bSmrg prev= 5918698f425bSmrg fi 5919266e564dSmrg 5920698f425bSmrg # A PIC object. 5921698f425bSmrg func_append libobjs " $pic_object" 5922698f425bSmrg arg="$pic_object" 5923698f425bSmrg fi 5924266e564dSmrg 5925698f425bSmrg # Non-PIC object. 5926698f425bSmrg if test "$non_pic_object" != none; then 5927698f425bSmrg # Prepend the subdirectory the object is found in. 5928698f425bSmrg non_pic_object="$xdir$non_pic_object" 5929266e564dSmrg 5930698f425bSmrg # A standard non-PIC object 5931698f425bSmrg func_append non_pic_objects " $non_pic_object" 5932698f425bSmrg if test -z "$pic_object" || test "$pic_object" = none ; then 5933698f425bSmrg arg="$non_pic_object" 5934698f425bSmrg fi 5935698f425bSmrg else 5936698f425bSmrg # If the PIC object exists, use it instead. 5937698f425bSmrg # $xdir was prepended to $pic_object above. 5938698f425bSmrg non_pic_object="$pic_object" 5939698f425bSmrg func_append non_pic_objects " $non_pic_object" 5940698f425bSmrg fi 5941698f425bSmrg else 5942698f425bSmrg # Only an error if not doing a dry-run. 5943698f425bSmrg if $opt_dry_run; then 5944698f425bSmrg # Extract subdirectory from the argument. 5945698f425bSmrg func_dirname "$arg" "/" "" 5946698f425bSmrg xdir="$func_dirname_result" 5947698f425bSmrg 5948698f425bSmrg func_lo2o "$arg" 5949698f425bSmrg pic_object=$xdir$objdir/$func_lo2o_result 5950698f425bSmrg non_pic_object=$xdir$func_lo2o_result 5951698f425bSmrg func_append libobjs " $pic_object" 5952698f425bSmrg func_append non_pic_objects " $non_pic_object" 5953698f425bSmrg else 5954698f425bSmrg func_fatal_error "\`$arg' is not a valid libtool object" 5955698f425bSmrg fi 5956698f425bSmrg fi 5957698f425bSmrg ;; 5958698f425bSmrg 5959698f425bSmrg *.$libext) 5960698f425bSmrg # An archive. 59619ef0b394Smrg func_append deplibs " $arg" 59629ef0b394Smrg func_append old_deplibs " $arg" 5963698f425bSmrg continue 5964698f425bSmrg ;; 5965698f425bSmrg 5966698f425bSmrg *.la) 5967698f425bSmrg # A libtool-controlled library. 5968698f425bSmrg 59699ef0b394Smrg func_resolve_sysroot "$arg" 5970698f425bSmrg if test "$prev" = dlfiles; then 5971698f425bSmrg # This library was specified with -dlopen. 59729ef0b394Smrg func_append dlfiles " $func_resolve_sysroot_result" 5973698f425bSmrg prev= 5974698f425bSmrg elif test "$prev" = dlprefiles; then 5975698f425bSmrg # The library was specified with -dlpreopen. 59769ef0b394Smrg func_append dlprefiles " $func_resolve_sysroot_result" 5977698f425bSmrg prev= 5978698f425bSmrg else 59799ef0b394Smrg func_append deplibs " $func_resolve_sysroot_result" 5980698f425bSmrg fi 5981698f425bSmrg continue 5982698f425bSmrg ;; 5983698f425bSmrg 5984698f425bSmrg # Some other compiler argument. 5985698f425bSmrg *) 5986698f425bSmrg # Unknown arguments in both finalize_command and compile_command need 5987698f425bSmrg # to be aesthetically quoted because they are evaled later. 5988698f425bSmrg func_quote_for_eval "$arg" 5989698f425bSmrg arg="$func_quote_for_eval_result" 5990698f425bSmrg ;; 5991698f425bSmrg esac # arg 5992698f425bSmrg 5993698f425bSmrg # Now actually substitute the argument into the commands. 5994698f425bSmrg if test -n "$arg"; then 5995698f425bSmrg func_append compile_command " $arg" 5996698f425bSmrg func_append finalize_command " $arg" 5997698f425bSmrg fi 5998698f425bSmrg done # argument parsing loop 5999698f425bSmrg 6000698f425bSmrg test -n "$prev" && \ 6001698f425bSmrg func_fatal_help "the \`$prevarg' option requires an argument" 6002698f425bSmrg 6003698f425bSmrg if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then 6004698f425bSmrg eval arg=\"$export_dynamic_flag_spec\" 6005698f425bSmrg func_append compile_command " $arg" 6006698f425bSmrg func_append finalize_command " $arg" 6007698f425bSmrg fi 6008698f425bSmrg 6009698f425bSmrg oldlibs= 6010698f425bSmrg # calculate the name of the file, without its directory 6011698f425bSmrg func_basename "$output" 6012698f425bSmrg outputname="$func_basename_result" 6013698f425bSmrg libobjs_save="$libobjs" 6014698f425bSmrg 6015698f425bSmrg if test -n "$shlibpath_var"; then 6016698f425bSmrg # get the directories listed in $shlibpath_var 60179ef0b394Smrg eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` 6018698f425bSmrg else 6019698f425bSmrg shlib_search_path= 6020698f425bSmrg fi 6021698f425bSmrg eval sys_lib_search_path=\"$sys_lib_search_path_spec\" 6022698f425bSmrg eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" 6023698f425bSmrg 6024698f425bSmrg func_dirname "$output" "/" "" 6025698f425bSmrg output_objdir="$func_dirname_result$objdir" 60269ef0b394Smrg func_to_tool_file "$output_objdir/" 60279ef0b394Smrg tool_output_objdir=$func_to_tool_file_result 6028698f425bSmrg # Create the object directory. 6029698f425bSmrg func_mkdir_p "$output_objdir" 6030698f425bSmrg 6031698f425bSmrg # Determine the type of output 6032698f425bSmrg case $output in 6033698f425bSmrg "") 6034698f425bSmrg func_fatal_help "you must specify an output file" 6035698f425bSmrg ;; 6036698f425bSmrg *.$libext) linkmode=oldlib ;; 6037698f425bSmrg *.lo | *.$objext) linkmode=obj ;; 6038698f425bSmrg *.la) linkmode=lib ;; 6039698f425bSmrg *) linkmode=prog ;; # Anything else should be a program. 6040698f425bSmrg esac 6041698f425bSmrg 6042698f425bSmrg specialdeplibs= 6043698f425bSmrg 6044698f425bSmrg libs= 6045698f425bSmrg # Find all interdependent deplibs by searching for libraries 6046698f425bSmrg # that are linked more than once (e.g. -la -lb -la) 6047698f425bSmrg for deplib in $deplibs; do 60489ef0b394Smrg if $opt_preserve_dup_deps ; then 6049698f425bSmrg case "$libs " in 60509ef0b394Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6051698f425bSmrg esac 6052698f425bSmrg fi 60539ef0b394Smrg func_append libs " $deplib" 6054698f425bSmrg done 6055698f425bSmrg 6056698f425bSmrg if test "$linkmode" = lib; then 6057698f425bSmrg libs="$predeps $libs $compiler_lib_search_path $postdeps" 6058698f425bSmrg 6059698f425bSmrg # Compute libraries that are listed more than once in $predeps 6060698f425bSmrg # $postdeps and mark them as special (i.e., whose duplicates are 6061698f425bSmrg # not to be eliminated). 6062698f425bSmrg pre_post_deps= 6063698f425bSmrg if $opt_duplicate_compiler_generated_deps; then 6064698f425bSmrg for pre_post_dep in $predeps $postdeps; do 6065698f425bSmrg case "$pre_post_deps " in 60669ef0b394Smrg *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; 6067698f425bSmrg esac 60689ef0b394Smrg func_append pre_post_deps " $pre_post_dep" 6069698f425bSmrg done 6070698f425bSmrg fi 6071698f425bSmrg pre_post_deps= 6072698f425bSmrg fi 6073698f425bSmrg 6074698f425bSmrg deplibs= 6075698f425bSmrg newdependency_libs= 6076698f425bSmrg newlib_search_path= 6077698f425bSmrg need_relink=no # whether we're linking any uninstalled libtool libraries 6078698f425bSmrg notinst_deplibs= # not-installed libtool libraries 6079698f425bSmrg notinst_path= # paths that contain not-installed libtool libraries 6080698f425bSmrg 6081698f425bSmrg case $linkmode in 6082698f425bSmrg lib) 6083698f425bSmrg passes="conv dlpreopen link" 6084698f425bSmrg for file in $dlfiles $dlprefiles; do 6085698f425bSmrg case $file in 6086698f425bSmrg *.la) ;; 6087698f425bSmrg *) 6088698f425bSmrg func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" 6089698f425bSmrg ;; 6090698f425bSmrg esac 6091698f425bSmrg done 6092698f425bSmrg ;; 6093698f425bSmrg prog) 6094698f425bSmrg compile_deplibs= 6095698f425bSmrg finalize_deplibs= 6096698f425bSmrg alldeplibs=no 6097698f425bSmrg newdlfiles= 6098698f425bSmrg newdlprefiles= 6099698f425bSmrg passes="conv scan dlopen dlpreopen link" 6100698f425bSmrg ;; 6101698f425bSmrg *) passes="conv" 6102698f425bSmrg ;; 6103698f425bSmrg esac 6104698f425bSmrg 6105698f425bSmrg for pass in $passes; do 6106698f425bSmrg # The preopen pass in lib mode reverses $deplibs; put it back here 6107698f425bSmrg # so that -L comes before libs that need it for instance... 6108698f425bSmrg if test "$linkmode,$pass" = "lib,link"; then 6109698f425bSmrg ## FIXME: Find the place where the list is rebuilt in the wrong 6110698f425bSmrg ## order, and fix it there properly 6111698f425bSmrg tmp_deplibs= 6112698f425bSmrg for deplib in $deplibs; do 6113698f425bSmrg tmp_deplibs="$deplib $tmp_deplibs" 6114698f425bSmrg done 6115698f425bSmrg deplibs="$tmp_deplibs" 6116698f425bSmrg fi 6117698f425bSmrg 6118698f425bSmrg if test "$linkmode,$pass" = "lib,link" || 6119698f425bSmrg test "$linkmode,$pass" = "prog,scan"; then 6120698f425bSmrg libs="$deplibs" 6121698f425bSmrg deplibs= 6122698f425bSmrg fi 6123698f425bSmrg if test "$linkmode" = prog; then 6124698f425bSmrg case $pass in 6125698f425bSmrg dlopen) libs="$dlfiles" ;; 6126698f425bSmrg dlpreopen) libs="$dlprefiles" ;; 6127698f425bSmrg link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; 6128698f425bSmrg esac 6129698f425bSmrg fi 6130698f425bSmrg if test "$linkmode,$pass" = "lib,dlpreopen"; then 6131698f425bSmrg # Collect and forward deplibs of preopened libtool libs 6132698f425bSmrg for lib in $dlprefiles; do 6133698f425bSmrg # Ignore non-libtool-libs 6134698f425bSmrg dependency_libs= 61359ef0b394Smrg func_resolve_sysroot "$lib" 6136698f425bSmrg case $lib in 61379ef0b394Smrg *.la) func_source "$func_resolve_sysroot_result" ;; 6138698f425bSmrg esac 6139698f425bSmrg 6140698f425bSmrg # Collect preopened libtool deplibs, except any this library 6141698f425bSmrg # has declared as weak libs 6142698f425bSmrg for deplib in $dependency_libs; do 61439ef0b394Smrg func_basename "$deplib" 61449ef0b394Smrg deplib_base=$func_basename_result 6145698f425bSmrg case " $weak_libs " in 6146698f425bSmrg *" $deplib_base "*) ;; 61479ef0b394Smrg *) func_append deplibs " $deplib" ;; 6148698f425bSmrg esac 6149698f425bSmrg done 6150698f425bSmrg done 6151698f425bSmrg libs="$dlprefiles" 6152698f425bSmrg fi 6153698f425bSmrg if test "$pass" = dlopen; then 6154698f425bSmrg # Collect dlpreopened libraries 6155698f425bSmrg save_deplibs="$deplibs" 6156698f425bSmrg deplibs= 6157698f425bSmrg fi 6158698f425bSmrg 6159698f425bSmrg for deplib in $libs; do 6160698f425bSmrg lib= 6161698f425bSmrg found=no 6162698f425bSmrg case $deplib in 6163fb5e8d76Smrg -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ 6164fb5e8d76Smrg |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) 6165698f425bSmrg if test "$linkmode,$pass" = "prog,link"; then 6166698f425bSmrg compile_deplibs="$deplib $compile_deplibs" 6167698f425bSmrg finalize_deplibs="$deplib $finalize_deplibs" 6168698f425bSmrg else 61699ef0b394Smrg func_append compiler_flags " $deplib" 6170698f425bSmrg if test "$linkmode" = lib ; then 6171698f425bSmrg case "$new_inherited_linker_flags " in 6172698f425bSmrg *" $deplib "*) ;; 61739ef0b394Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6174698f425bSmrg esac 6175698f425bSmrg fi 6176698f425bSmrg fi 6177698f425bSmrg continue 6178698f425bSmrg ;; 6179698f425bSmrg -l*) 6180698f425bSmrg if test "$linkmode" != lib && test "$linkmode" != prog; then 6181698f425bSmrg func_warning "\`-l' is ignored for archives/objects" 6182698f425bSmrg continue 6183698f425bSmrg fi 6184698f425bSmrg func_stripname '-l' '' "$deplib" 6185698f425bSmrg name=$func_stripname_result 6186698f425bSmrg if test "$linkmode" = lib; then 6187698f425bSmrg searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" 6188698f425bSmrg else 6189698f425bSmrg searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" 6190698f425bSmrg fi 6191698f425bSmrg for searchdir in $searchdirs; do 6192698f425bSmrg for search_ext in .la $std_shrext .so .a; do 6193698f425bSmrg # Search the libtool library 6194698f425bSmrg lib="$searchdir/lib${name}${search_ext}" 6195698f425bSmrg if test -f "$lib"; then 6196698f425bSmrg if test "$search_ext" = ".la"; then 6197698f425bSmrg found=yes 6198698f425bSmrg else 6199698f425bSmrg found=no 6200698f425bSmrg fi 6201698f425bSmrg break 2 6202698f425bSmrg fi 6203698f425bSmrg done 6204698f425bSmrg done 6205698f425bSmrg if test "$found" != yes; then 6206698f425bSmrg # deplib doesn't seem to be a libtool library 6207698f425bSmrg if test "$linkmode,$pass" = "prog,link"; then 6208698f425bSmrg compile_deplibs="$deplib $compile_deplibs" 6209698f425bSmrg finalize_deplibs="$deplib $finalize_deplibs" 6210698f425bSmrg else 6211698f425bSmrg deplibs="$deplib $deplibs" 6212698f425bSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6213698f425bSmrg fi 6214698f425bSmrg continue 6215698f425bSmrg else # deplib is a libtool library 6216698f425bSmrg # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, 6217698f425bSmrg # We need to do some special things here, and not later. 6218698f425bSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 6219698f425bSmrg case " $predeps $postdeps " in 6220698f425bSmrg *" $deplib "*) 6221698f425bSmrg if func_lalib_p "$lib"; then 6222698f425bSmrg library_names= 6223698f425bSmrg old_library= 6224698f425bSmrg func_source "$lib" 6225698f425bSmrg for l in $old_library $library_names; do 6226698f425bSmrg ll="$l" 6227698f425bSmrg done 6228698f425bSmrg if test "X$ll" = "X$old_library" ; then # only static version available 6229698f425bSmrg found=no 6230698f425bSmrg func_dirname "$lib" "" "." 6231698f425bSmrg ladir="$func_dirname_result" 6232698f425bSmrg lib=$ladir/$old_library 6233698f425bSmrg if test "$linkmode,$pass" = "prog,link"; then 6234698f425bSmrg compile_deplibs="$deplib $compile_deplibs" 6235698f425bSmrg finalize_deplibs="$deplib $finalize_deplibs" 6236698f425bSmrg else 6237698f425bSmrg deplibs="$deplib $deplibs" 6238698f425bSmrg test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" 6239698f425bSmrg fi 6240698f425bSmrg continue 6241698f425bSmrg fi 6242698f425bSmrg fi 6243698f425bSmrg ;; 6244698f425bSmrg *) ;; 6245698f425bSmrg esac 6246698f425bSmrg fi 6247698f425bSmrg fi 6248698f425bSmrg ;; # -l 6249698f425bSmrg *.ltframework) 6250698f425bSmrg if test "$linkmode,$pass" = "prog,link"; then 6251698f425bSmrg compile_deplibs="$deplib $compile_deplibs" 6252698f425bSmrg finalize_deplibs="$deplib $finalize_deplibs" 6253698f425bSmrg else 6254698f425bSmrg deplibs="$deplib $deplibs" 6255698f425bSmrg if test "$linkmode" = lib ; then 6256698f425bSmrg case "$new_inherited_linker_flags " in 6257698f425bSmrg *" $deplib "*) ;; 62589ef0b394Smrg * ) func_append new_inherited_linker_flags " $deplib" ;; 6259698f425bSmrg esac 6260698f425bSmrg fi 6261698f425bSmrg fi 6262698f425bSmrg continue 6263698f425bSmrg ;; 6264698f425bSmrg -L*) 6265698f425bSmrg case $linkmode in 6266698f425bSmrg lib) 6267698f425bSmrg deplibs="$deplib $deplibs" 6268698f425bSmrg test "$pass" = conv && continue 6269698f425bSmrg newdependency_libs="$deplib $newdependency_libs" 6270698f425bSmrg func_stripname '-L' '' "$deplib" 62719ef0b394Smrg func_resolve_sysroot "$func_stripname_result" 62729ef0b394Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 6273698f425bSmrg ;; 6274698f425bSmrg prog) 6275698f425bSmrg if test "$pass" = conv; then 6276698f425bSmrg deplibs="$deplib $deplibs" 6277698f425bSmrg continue 6278698f425bSmrg fi 6279698f425bSmrg if test "$pass" = scan; then 6280698f425bSmrg deplibs="$deplib $deplibs" 6281698f425bSmrg else 6282698f425bSmrg compile_deplibs="$deplib $compile_deplibs" 6283698f425bSmrg finalize_deplibs="$deplib $finalize_deplibs" 6284698f425bSmrg fi 6285698f425bSmrg func_stripname '-L' '' "$deplib" 62869ef0b394Smrg func_resolve_sysroot "$func_stripname_result" 62879ef0b394Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 6288698f425bSmrg ;; 6289698f425bSmrg *) 6290698f425bSmrg func_warning "\`-L' is ignored for archives/objects" 6291698f425bSmrg ;; 6292698f425bSmrg esac # linkmode 6293698f425bSmrg continue 6294698f425bSmrg ;; # -L 6295698f425bSmrg -R*) 6296698f425bSmrg if test "$pass" = link; then 6297698f425bSmrg func_stripname '-R' '' "$deplib" 62989ef0b394Smrg func_resolve_sysroot "$func_stripname_result" 62999ef0b394Smrg dir=$func_resolve_sysroot_result 6300698f425bSmrg # Make sure the xrpath contains only unique directories. 6301698f425bSmrg case "$xrpath " in 6302698f425bSmrg *" $dir "*) ;; 63039ef0b394Smrg *) func_append xrpath " $dir" ;; 6304698f425bSmrg esac 6305698f425bSmrg fi 6306698f425bSmrg deplibs="$deplib $deplibs" 6307698f425bSmrg continue 6308698f425bSmrg ;; 63099ef0b394Smrg *.la) 63109ef0b394Smrg func_resolve_sysroot "$deplib" 63119ef0b394Smrg lib=$func_resolve_sysroot_result 63129ef0b394Smrg ;; 6313698f425bSmrg *.$libext) 6314698f425bSmrg if test "$pass" = conv; then 6315698f425bSmrg deplibs="$deplib $deplibs" 6316698f425bSmrg continue 6317698f425bSmrg fi 6318698f425bSmrg case $linkmode in 6319698f425bSmrg lib) 6320698f425bSmrg # Linking convenience modules into shared libraries is allowed, 6321698f425bSmrg # but linking other static libraries is non-portable. 6322698f425bSmrg case " $dlpreconveniencelibs " in 6323698f425bSmrg *" $deplib "*) ;; 6324698f425bSmrg *) 6325698f425bSmrg valid_a_lib=no 6326698f425bSmrg case $deplibs_check_method in 6327698f425bSmrg match_pattern*) 6328698f425bSmrg set dummy $deplibs_check_method; shift 6329698f425bSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 63309ef0b394Smrg if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ 6331698f425bSmrg | $EGREP "$match_pattern_regex" > /dev/null; then 6332698f425bSmrg valid_a_lib=yes 6333698f425bSmrg fi 6334698f425bSmrg ;; 6335698f425bSmrg pass_all) 6336698f425bSmrg valid_a_lib=yes 6337698f425bSmrg ;; 6338698f425bSmrg esac 6339698f425bSmrg if test "$valid_a_lib" != yes; then 63409ef0b394Smrg echo 6341698f425bSmrg $ECHO "*** Warning: Trying to link with static lib archive $deplib." 63429ef0b394Smrg echo "*** I have the capability to make that library automatically link in when" 63439ef0b394Smrg echo "*** you link to this library. But I can only do this if you have a" 63449ef0b394Smrg echo "*** shared version of the library, which you do not appear to have" 63459ef0b394Smrg echo "*** because the file extensions .$libext of this argument makes me believe" 63469ef0b394Smrg echo "*** that it is just a static archive that I should not use here." 6347698f425bSmrg else 63489ef0b394Smrg echo 6349698f425bSmrg $ECHO "*** Warning: Linking the shared library $output against the" 6350698f425bSmrg $ECHO "*** static library $deplib is not portable!" 6351698f425bSmrg deplibs="$deplib $deplibs" 6352698f425bSmrg fi 6353698f425bSmrg ;; 6354698f425bSmrg esac 6355698f425bSmrg continue 6356698f425bSmrg ;; 6357698f425bSmrg prog) 6358698f425bSmrg if test "$pass" != link; then 6359698f425bSmrg deplibs="$deplib $deplibs" 6360698f425bSmrg else 6361698f425bSmrg compile_deplibs="$deplib $compile_deplibs" 6362698f425bSmrg finalize_deplibs="$deplib $finalize_deplibs" 6363698f425bSmrg fi 6364698f425bSmrg continue 6365698f425bSmrg ;; 6366698f425bSmrg esac # linkmode 6367698f425bSmrg ;; # *.$libext 6368698f425bSmrg *.lo | *.$objext) 6369698f425bSmrg if test "$pass" = conv; then 6370698f425bSmrg deplibs="$deplib $deplibs" 6371698f425bSmrg elif test "$linkmode" = prog; then 6372698f425bSmrg if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then 6373698f425bSmrg # If there is no dlopen support or we're linking statically, 6374698f425bSmrg # we need to preload. 63759ef0b394Smrg func_append newdlprefiles " $deplib" 6376698f425bSmrg compile_deplibs="$deplib $compile_deplibs" 6377698f425bSmrg finalize_deplibs="$deplib $finalize_deplibs" 6378698f425bSmrg else 63799ef0b394Smrg func_append newdlfiles " $deplib" 6380698f425bSmrg fi 6381698f425bSmrg fi 6382698f425bSmrg continue 6383698f425bSmrg ;; 6384698f425bSmrg %DEPLIBS%) 6385698f425bSmrg alldeplibs=yes 6386698f425bSmrg continue 6387698f425bSmrg ;; 6388698f425bSmrg esac # case $deplib 6389698f425bSmrg 6390698f425bSmrg if test "$found" = yes || test -f "$lib"; then : 6391698f425bSmrg else 6392698f425bSmrg func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" 6393698f425bSmrg fi 6394698f425bSmrg 6395698f425bSmrg # Check to see that this really is a libtool archive. 6396698f425bSmrg func_lalib_unsafe_p "$lib" \ 6397698f425bSmrg || func_fatal_error "\`$lib' is not a valid libtool archive" 6398698f425bSmrg 6399698f425bSmrg func_dirname "$lib" "" "." 6400698f425bSmrg ladir="$func_dirname_result" 6401698f425bSmrg 6402698f425bSmrg dlname= 6403698f425bSmrg dlopen= 6404698f425bSmrg dlpreopen= 6405698f425bSmrg libdir= 6406698f425bSmrg library_names= 6407698f425bSmrg old_library= 6408698f425bSmrg inherited_linker_flags= 6409698f425bSmrg # If the library was installed with an old release of libtool, 6410698f425bSmrg # it will not redefine variables installed, or shouldnotlink 6411698f425bSmrg installed=yes 6412698f425bSmrg shouldnotlink=no 6413698f425bSmrg avoidtemprpath= 6414698f425bSmrg 6415698f425bSmrg 6416698f425bSmrg # Read the .la file 6417698f425bSmrg func_source "$lib" 6418698f425bSmrg 6419698f425bSmrg # Convert "-framework foo" to "foo.ltframework" 6420698f425bSmrg if test -n "$inherited_linker_flags"; then 64219ef0b394Smrg tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` 6422698f425bSmrg for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do 6423698f425bSmrg case " $new_inherited_linker_flags " in 6424698f425bSmrg *" $tmp_inherited_linker_flag "*) ;; 64259ef0b394Smrg *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; 6426698f425bSmrg esac 6427698f425bSmrg done 6428698f425bSmrg fi 64299ef0b394Smrg dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 6430698f425bSmrg if test "$linkmode,$pass" = "lib,link" || 6431698f425bSmrg test "$linkmode,$pass" = "prog,scan" || 6432698f425bSmrg { test "$linkmode" != prog && test "$linkmode" != lib; }; then 64339ef0b394Smrg test -n "$dlopen" && func_append dlfiles " $dlopen" 64349ef0b394Smrg test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" 6435698f425bSmrg fi 6436698f425bSmrg 6437698f425bSmrg if test "$pass" = conv; then 6438698f425bSmrg # Only check for convenience libraries 6439698f425bSmrg deplibs="$lib $deplibs" 6440698f425bSmrg if test -z "$libdir"; then 6441698f425bSmrg if test -z "$old_library"; then 6442698f425bSmrg func_fatal_error "cannot find name of link library for \`$lib'" 6443698f425bSmrg fi 6444698f425bSmrg # It is a libtool convenience library, so add in its objects. 64459ef0b394Smrg func_append convenience " $ladir/$objdir/$old_library" 64469ef0b394Smrg func_append old_convenience " $ladir/$objdir/$old_library" 6447698f425bSmrg elif test "$linkmode" != prog && test "$linkmode" != lib; then 6448698f425bSmrg func_fatal_error "\`$lib' is not a convenience library" 6449698f425bSmrg fi 6450698f425bSmrg tmp_libs= 6451698f425bSmrg for deplib in $dependency_libs; do 6452698f425bSmrg deplibs="$deplib $deplibs" 64539ef0b394Smrg if $opt_preserve_dup_deps ; then 6454698f425bSmrg case "$tmp_libs " in 64559ef0b394Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6456698f425bSmrg esac 6457698f425bSmrg fi 64589ef0b394Smrg func_append tmp_libs " $deplib" 6459698f425bSmrg done 6460698f425bSmrg continue 6461698f425bSmrg fi # $pass = conv 6462698f425bSmrg 6463698f425bSmrg 6464698f425bSmrg # Get the name of the library we link against. 6465698f425bSmrg linklib= 64669ef0b394Smrg if test -n "$old_library" && 64679ef0b394Smrg { test "$prefer_static_libs" = yes || 64689ef0b394Smrg test "$prefer_static_libs,$installed" = "built,no"; }; then 64699ef0b394Smrg linklib=$old_library 64709ef0b394Smrg else 64719ef0b394Smrg for l in $old_library $library_names; do 64729ef0b394Smrg linklib="$l" 64739ef0b394Smrg done 64749ef0b394Smrg fi 6475698f425bSmrg if test -z "$linklib"; then 6476698f425bSmrg func_fatal_error "cannot find name of link library for \`$lib'" 6477698f425bSmrg fi 6478698f425bSmrg 6479698f425bSmrg # This library was specified with -dlopen. 6480698f425bSmrg if test "$pass" = dlopen; then 6481698f425bSmrg if test -z "$libdir"; then 6482698f425bSmrg func_fatal_error "cannot -dlopen a convenience library: \`$lib'" 6483698f425bSmrg fi 6484698f425bSmrg if test -z "$dlname" || 6485698f425bSmrg test "$dlopen_support" != yes || 6486698f425bSmrg test "$build_libtool_libs" = no; then 6487698f425bSmrg # If there is no dlname, no dlopen support or we're linking 6488698f425bSmrg # statically, we need to preload. We also need to preload any 6489698f425bSmrg # dependent libraries so libltdl's deplib preloader doesn't 6490698f425bSmrg # bomb out in the load deplibs phase. 64919ef0b394Smrg func_append dlprefiles " $lib $dependency_libs" 6492698f425bSmrg else 64939ef0b394Smrg func_append newdlfiles " $lib" 6494698f425bSmrg fi 6495698f425bSmrg continue 6496698f425bSmrg fi # $pass = dlopen 6497698f425bSmrg 6498698f425bSmrg # We need an absolute path. 6499698f425bSmrg case $ladir in 6500698f425bSmrg [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; 6501698f425bSmrg *) 6502698f425bSmrg abs_ladir=`cd "$ladir" && pwd` 6503698f425bSmrg if test -z "$abs_ladir"; then 6504698f425bSmrg func_warning "cannot determine absolute directory name of \`$ladir'" 6505698f425bSmrg func_warning "passing it literally to the linker, although it might fail" 6506698f425bSmrg abs_ladir="$ladir" 6507698f425bSmrg fi 6508698f425bSmrg ;; 6509698f425bSmrg esac 6510698f425bSmrg func_basename "$lib" 6511698f425bSmrg laname="$func_basename_result" 6512698f425bSmrg 6513698f425bSmrg # Find the relevant object directory and library name. 6514698f425bSmrg if test "X$installed" = Xyes; then 65159ef0b394Smrg if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6516698f425bSmrg func_warning "library \`$lib' was moved." 6517698f425bSmrg dir="$ladir" 6518698f425bSmrg absdir="$abs_ladir" 6519698f425bSmrg libdir="$abs_ladir" 6520698f425bSmrg else 65219ef0b394Smrg dir="$lt_sysroot$libdir" 65229ef0b394Smrg absdir="$lt_sysroot$libdir" 6523698f425bSmrg fi 6524698f425bSmrg test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes 6525698f425bSmrg else 6526698f425bSmrg if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then 6527698f425bSmrg dir="$ladir" 6528698f425bSmrg absdir="$abs_ladir" 6529698f425bSmrg # Remove this search path later 65309ef0b394Smrg func_append notinst_path " $abs_ladir" 6531698f425bSmrg else 6532698f425bSmrg dir="$ladir/$objdir" 6533698f425bSmrg absdir="$abs_ladir/$objdir" 6534698f425bSmrg # Remove this search path later 65359ef0b394Smrg func_append notinst_path " $abs_ladir" 6536698f425bSmrg fi 6537698f425bSmrg fi # $installed = yes 6538698f425bSmrg func_stripname 'lib' '.la' "$laname" 6539698f425bSmrg name=$func_stripname_result 6540698f425bSmrg 6541698f425bSmrg # This library was specified with -dlpreopen. 6542698f425bSmrg if test "$pass" = dlpreopen; then 6543698f425bSmrg if test -z "$libdir" && test "$linkmode" = prog; then 6544698f425bSmrg func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" 6545698f425bSmrg fi 65469ef0b394Smrg case "$host" in 65479ef0b394Smrg # special handling for platforms with PE-DLLs. 65489ef0b394Smrg *cygwin* | *mingw* | *cegcc* ) 65499ef0b394Smrg # Linker will automatically link against shared library if both 65509ef0b394Smrg # static and shared are present. Therefore, ensure we extract 65519ef0b394Smrg # symbols from the import library if a shared library is present 65529ef0b394Smrg # (otherwise, the dlopen module name will be incorrect). We do 65539ef0b394Smrg # this by putting the import library name into $newdlprefiles. 65549ef0b394Smrg # We recover the dlopen module name by 'saving' the la file 65559ef0b394Smrg # name in a special purpose variable, and (later) extracting the 65569ef0b394Smrg # dlname from the la file. 65579ef0b394Smrg if test -n "$dlname"; then 65589ef0b394Smrg func_tr_sh "$dir/$linklib" 65599ef0b394Smrg eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" 65609ef0b394Smrg func_append newdlprefiles " $dir/$linklib" 65619ef0b394Smrg else 65629ef0b394Smrg func_append newdlprefiles " $dir/$old_library" 65639ef0b394Smrg # Keep a list of preopened convenience libraries to check 65649ef0b394Smrg # that they are being used correctly in the link pass. 65659ef0b394Smrg test -z "$libdir" && \ 65669ef0b394Smrg func_append dlpreconveniencelibs " $dir/$old_library" 65679ef0b394Smrg fi 65689ef0b394Smrg ;; 65699ef0b394Smrg * ) 65709ef0b394Smrg # Prefer using a static library (so that no silly _DYNAMIC symbols 65719ef0b394Smrg # are required to link). 65729ef0b394Smrg if test -n "$old_library"; then 65739ef0b394Smrg func_append newdlprefiles " $dir/$old_library" 65749ef0b394Smrg # Keep a list of preopened convenience libraries to check 65759ef0b394Smrg # that they are being used correctly in the link pass. 65769ef0b394Smrg test -z "$libdir" && \ 65779ef0b394Smrg func_append dlpreconveniencelibs " $dir/$old_library" 65789ef0b394Smrg # Otherwise, use the dlname, so that lt_dlopen finds it. 65799ef0b394Smrg elif test -n "$dlname"; then 65809ef0b394Smrg func_append newdlprefiles " $dir/$dlname" 65819ef0b394Smrg else 65829ef0b394Smrg func_append newdlprefiles " $dir/$linklib" 65839ef0b394Smrg fi 65849ef0b394Smrg ;; 65859ef0b394Smrg esac 6586698f425bSmrg fi # $pass = dlpreopen 6587698f425bSmrg 6588698f425bSmrg if test -z "$libdir"; then 6589698f425bSmrg # Link the convenience library 6590698f425bSmrg if test "$linkmode" = lib; then 6591698f425bSmrg deplibs="$dir/$old_library $deplibs" 6592698f425bSmrg elif test "$linkmode,$pass" = "prog,link"; then 6593698f425bSmrg compile_deplibs="$dir/$old_library $compile_deplibs" 6594698f425bSmrg finalize_deplibs="$dir/$old_library $finalize_deplibs" 6595698f425bSmrg else 6596698f425bSmrg deplibs="$lib $deplibs" # used for prog,scan pass 6597698f425bSmrg fi 6598698f425bSmrg continue 6599698f425bSmrg fi 6600698f425bSmrg 6601698f425bSmrg 6602698f425bSmrg if test "$linkmode" = prog && test "$pass" != link; then 66039ef0b394Smrg func_append newlib_search_path " $ladir" 6604698f425bSmrg deplibs="$lib $deplibs" 6605698f425bSmrg 6606698f425bSmrg linkalldeplibs=no 6607698f425bSmrg if test "$link_all_deplibs" != no || test -z "$library_names" || 6608698f425bSmrg test "$build_libtool_libs" = no; then 6609698f425bSmrg linkalldeplibs=yes 6610698f425bSmrg fi 6611698f425bSmrg 6612698f425bSmrg tmp_libs= 6613698f425bSmrg for deplib in $dependency_libs; do 6614698f425bSmrg case $deplib in 6615698f425bSmrg -L*) func_stripname '-L' '' "$deplib" 66169ef0b394Smrg func_resolve_sysroot "$func_stripname_result" 66179ef0b394Smrg func_append newlib_search_path " $func_resolve_sysroot_result" 6618698f425bSmrg ;; 6619698f425bSmrg esac 6620698f425bSmrg # Need to link against all dependency_libs? 6621698f425bSmrg if test "$linkalldeplibs" = yes; then 6622698f425bSmrg deplibs="$deplib $deplibs" 6623698f425bSmrg else 6624698f425bSmrg # Need to hardcode shared library paths 6625698f425bSmrg # or/and link against static libraries 6626698f425bSmrg newdependency_libs="$deplib $newdependency_libs" 6627698f425bSmrg fi 66289ef0b394Smrg if $opt_preserve_dup_deps ; then 6629698f425bSmrg case "$tmp_libs " in 66309ef0b394Smrg *" $deplib "*) func_append specialdeplibs " $deplib" ;; 6631698f425bSmrg esac 6632698f425bSmrg fi 66339ef0b394Smrg func_append tmp_libs " $deplib" 6634698f425bSmrg done # for deplib 6635698f425bSmrg continue 6636698f425bSmrg fi # $linkmode = prog... 6637698f425bSmrg 6638698f425bSmrg if test "$linkmode,$pass" = "prog,link"; then 6639698f425bSmrg if test -n "$library_names" && 6640698f425bSmrg { { test "$prefer_static_libs" = no || 6641698f425bSmrg test "$prefer_static_libs,$installed" = "built,yes"; } || 6642698f425bSmrg test -z "$old_library"; }; then 6643698f425bSmrg # We need to hardcode the library path 6644698f425bSmrg if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then 6645698f425bSmrg # Make sure the rpath contains only unique directories. 6646698f425bSmrg case "$temp_rpath:" in 6647698f425bSmrg *"$absdir:"*) ;; 66489ef0b394Smrg *) func_append temp_rpath "$absdir:" ;; 6649698f425bSmrg esac 6650698f425bSmrg fi 6651698f425bSmrg 6652698f425bSmrg # Hardcode the library path. 6653698f425bSmrg # Skip directories that are in the system default run-time 6654698f425bSmrg # search path. 6655698f425bSmrg case " $sys_lib_dlsearch_path " in 6656698f425bSmrg *" $absdir "*) ;; 6657698f425bSmrg *) 6658698f425bSmrg case "$compile_rpath " in 6659698f425bSmrg *" $absdir "*) ;; 66609ef0b394Smrg *) func_append compile_rpath " $absdir" ;; 6661698f425bSmrg esac 6662698f425bSmrg ;; 6663698f425bSmrg esac 6664698f425bSmrg case " $sys_lib_dlsearch_path " in 6665698f425bSmrg *" $libdir "*) ;; 6666698f425bSmrg *) 6667698f425bSmrg case "$finalize_rpath " in 6668698f425bSmrg *" $libdir "*) ;; 66699ef0b394Smrg *) func_append finalize_rpath " $libdir" ;; 6670698f425bSmrg esac 6671698f425bSmrg ;; 6672698f425bSmrg esac 6673698f425bSmrg fi # $linkmode,$pass = prog,link... 6674698f425bSmrg 6675698f425bSmrg if test "$alldeplibs" = yes && 6676698f425bSmrg { test "$deplibs_check_method" = pass_all || 6677698f425bSmrg { test "$build_libtool_libs" = yes && 6678698f425bSmrg test -n "$library_names"; }; }; then 6679698f425bSmrg # We only need to search for static libraries 6680698f425bSmrg continue 6681698f425bSmrg fi 6682698f425bSmrg fi 6683698f425bSmrg 6684698f425bSmrg link_static=no # Whether the deplib will be linked statically 6685698f425bSmrg use_static_libs=$prefer_static_libs 6686698f425bSmrg if test "$use_static_libs" = built && test "$installed" = yes; then 6687698f425bSmrg use_static_libs=no 6688698f425bSmrg fi 6689698f425bSmrg if test -n "$library_names" && 6690698f425bSmrg { test "$use_static_libs" = no || test -z "$old_library"; }; then 6691698f425bSmrg case $host in 6692698f425bSmrg *cygwin* | *mingw* | *cegcc*) 6693698f425bSmrg # No point in relinking DLLs because paths are not encoded 66949ef0b394Smrg func_append notinst_deplibs " $lib" 6695698f425bSmrg need_relink=no 6696698f425bSmrg ;; 6697698f425bSmrg *) 6698698f425bSmrg if test "$installed" = no; then 66999ef0b394Smrg func_append notinst_deplibs " $lib" 6700698f425bSmrg need_relink=yes 6701698f425bSmrg fi 6702698f425bSmrg ;; 6703698f425bSmrg esac 6704698f425bSmrg # This is a shared library 6705698f425bSmrg 6706698f425bSmrg # Warn about portability, can't link against -module's on some 6707698f425bSmrg # systems (darwin). Don't bleat about dlopened modules though! 6708698f425bSmrg dlopenmodule="" 6709698f425bSmrg for dlpremoduletest in $dlprefiles; do 6710698f425bSmrg if test "X$dlpremoduletest" = "X$lib"; then 6711698f425bSmrg dlopenmodule="$dlpremoduletest" 6712698f425bSmrg break 6713698f425bSmrg fi 6714698f425bSmrg done 6715698f425bSmrg if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then 67169ef0b394Smrg echo 6717698f425bSmrg if test "$linkmode" = prog; then 6718698f425bSmrg $ECHO "*** Warning: Linking the executable $output against the loadable module" 6719698f425bSmrg else 6720698f425bSmrg $ECHO "*** Warning: Linking the shared library $output against the loadable module" 6721698f425bSmrg fi 6722698f425bSmrg $ECHO "*** $linklib is not portable!" 6723698f425bSmrg fi 6724698f425bSmrg if test "$linkmode" = lib && 6725698f425bSmrg test "$hardcode_into_libs" = yes; then 6726698f425bSmrg # Hardcode the library path. 6727698f425bSmrg # Skip directories that are in the system default run-time 6728698f425bSmrg # search path. 6729698f425bSmrg case " $sys_lib_dlsearch_path " in 6730698f425bSmrg *" $absdir "*) ;; 6731698f425bSmrg *) 6732698f425bSmrg case "$compile_rpath " in 6733698f425bSmrg *" $absdir "*) ;; 67349ef0b394Smrg *) func_append compile_rpath " $absdir" ;; 6735698f425bSmrg esac 6736698f425bSmrg ;; 6737698f425bSmrg esac 6738698f425bSmrg case " $sys_lib_dlsearch_path " in 6739698f425bSmrg *" $libdir "*) ;; 6740698f425bSmrg *) 6741698f425bSmrg case "$finalize_rpath " in 6742698f425bSmrg *" $libdir "*) ;; 67439ef0b394Smrg *) func_append finalize_rpath " $libdir" ;; 6744698f425bSmrg esac 6745698f425bSmrg ;; 6746698f425bSmrg esac 6747698f425bSmrg fi 6748698f425bSmrg 6749698f425bSmrg if test -n "$old_archive_from_expsyms_cmds"; then 6750698f425bSmrg # figure out the soname 6751698f425bSmrg set dummy $library_names 6752698f425bSmrg shift 6753698f425bSmrg realname="$1" 6754698f425bSmrg shift 6755698f425bSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 6756698f425bSmrg # use dlname if we got it. it's perfectly good, no? 6757698f425bSmrg if test -n "$dlname"; then 6758698f425bSmrg soname="$dlname" 6759698f425bSmrg elif test -n "$soname_spec"; then 6760698f425bSmrg # bleh windows 6761698f425bSmrg case $host in 6762698f425bSmrg *cygwin* | mingw* | *cegcc*) 6763698f425bSmrg func_arith $current - $age 6764698f425bSmrg major=$func_arith_result 6765698f425bSmrg versuffix="-$major" 6766698f425bSmrg ;; 6767698f425bSmrg esac 6768698f425bSmrg eval soname=\"$soname_spec\" 6769698f425bSmrg else 6770698f425bSmrg soname="$realname" 6771698f425bSmrg fi 6772698f425bSmrg 6773698f425bSmrg # Make a new name for the extract_expsyms_cmds to use 6774698f425bSmrg soroot="$soname" 6775698f425bSmrg func_basename "$soroot" 6776698f425bSmrg soname="$func_basename_result" 6777698f425bSmrg func_stripname 'lib' '.dll' "$soname" 6778698f425bSmrg newlib=libimp-$func_stripname_result.a 6779698f425bSmrg 6780698f425bSmrg # If the library has no export list, then create one now 6781698f425bSmrg if test -f "$output_objdir/$soname-def"; then : 6782698f425bSmrg else 6783698f425bSmrg func_verbose "extracting exported symbol list from \`$soname'" 6784698f425bSmrg func_execute_cmds "$extract_expsyms_cmds" 'exit $?' 6785698f425bSmrg fi 6786698f425bSmrg 6787698f425bSmrg # Create $newlib 6788698f425bSmrg if test -f "$output_objdir/$newlib"; then :; else 6789698f425bSmrg func_verbose "generating import library for \`$soname'" 6790698f425bSmrg func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' 6791698f425bSmrg fi 6792698f425bSmrg # make sure the library variables are pointing to the new library 6793698f425bSmrg dir=$output_objdir 6794698f425bSmrg linklib=$newlib 6795698f425bSmrg fi # test -n "$old_archive_from_expsyms_cmds" 6796698f425bSmrg 67979ef0b394Smrg if test "$linkmode" = prog || test "$opt_mode" != relink; then 6798698f425bSmrg add_shlibpath= 6799698f425bSmrg add_dir= 6800698f425bSmrg add= 6801698f425bSmrg lib_linked=yes 6802698f425bSmrg case $hardcode_action in 6803698f425bSmrg immediate | unsupported) 6804698f425bSmrg if test "$hardcode_direct" = no; then 6805698f425bSmrg add="$dir/$linklib" 6806698f425bSmrg case $host in 6807698f425bSmrg *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; 6808698f425bSmrg *-*-sysv4*uw2*) add_dir="-L$dir" ;; 6809698f425bSmrg *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ 6810698f425bSmrg *-*-unixware7*) add_dir="-L$dir" ;; 6811698f425bSmrg *-*-darwin* ) 6812698f425bSmrg # if the lib is a (non-dlopened) module then we can not 6813698f425bSmrg # link against it, someone is ignoring the earlier warnings 6814698f425bSmrg if /usr/bin/file -L $add 2> /dev/null | 6815698f425bSmrg $GREP ": [^:]* bundle" >/dev/null ; then 6816698f425bSmrg if test "X$dlopenmodule" != "X$lib"; then 6817698f425bSmrg $ECHO "*** Warning: lib $linklib is a module, not a shared library" 6818698f425bSmrg if test -z "$old_library" ; then 68199ef0b394Smrg echo 68209ef0b394Smrg echo "*** And there doesn't seem to be a static archive available" 68219ef0b394Smrg echo "*** The link will probably fail, sorry" 6822698f425bSmrg else 6823698f425bSmrg add="$dir/$old_library" 6824698f425bSmrg fi 6825698f425bSmrg elif test -n "$old_library"; then 6826698f425bSmrg add="$dir/$old_library" 6827698f425bSmrg fi 6828698f425bSmrg fi 6829698f425bSmrg esac 6830698f425bSmrg elif test "$hardcode_minus_L" = no; then 6831698f425bSmrg case $host in 6832698f425bSmrg *-*-sunos*) add_shlibpath="$dir" ;; 6833698f425bSmrg esac 6834698f425bSmrg add_dir="-L$dir" 6835698f425bSmrg add="-l$name" 6836698f425bSmrg elif test "$hardcode_shlibpath_var" = no; then 6837698f425bSmrg add_shlibpath="$dir" 6838698f425bSmrg add="-l$name" 6839698f425bSmrg else 6840698f425bSmrg lib_linked=no 6841698f425bSmrg fi 6842698f425bSmrg ;; 6843698f425bSmrg relink) 6844698f425bSmrg if test "$hardcode_direct" = yes && 6845698f425bSmrg test "$hardcode_direct_absolute" = no; then 6846698f425bSmrg add="$dir/$linklib" 6847698f425bSmrg elif test "$hardcode_minus_L" = yes; then 6848fb5e8d76Smrg add_dir="-L$absdir" 6849698f425bSmrg # Try looking first in the location we're being installed to. 6850698f425bSmrg if test -n "$inst_prefix_dir"; then 6851698f425bSmrg case $libdir in 6852698f425bSmrg [\\/]*) 68539ef0b394Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 6854698f425bSmrg ;; 6855698f425bSmrg esac 6856698f425bSmrg fi 6857698f425bSmrg add="-l$name" 6858698f425bSmrg elif test "$hardcode_shlibpath_var" = yes; then 6859698f425bSmrg add_shlibpath="$dir" 6860698f425bSmrg add="-l$name" 6861698f425bSmrg else 6862698f425bSmrg lib_linked=no 6863698f425bSmrg fi 6864698f425bSmrg ;; 6865698f425bSmrg *) lib_linked=no ;; 6866698f425bSmrg esac 6867698f425bSmrg 6868698f425bSmrg if test "$lib_linked" != yes; then 6869698f425bSmrg func_fatal_configuration "unsupported hardcode properties" 6870698f425bSmrg fi 6871698f425bSmrg 6872698f425bSmrg if test -n "$add_shlibpath"; then 6873698f425bSmrg case :$compile_shlibpath: in 6874698f425bSmrg *":$add_shlibpath:"*) ;; 68759ef0b394Smrg *) func_append compile_shlibpath "$add_shlibpath:" ;; 6876698f425bSmrg esac 6877698f425bSmrg fi 6878698f425bSmrg if test "$linkmode" = prog; then 6879698f425bSmrg test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" 6880698f425bSmrg test -n "$add" && compile_deplibs="$add $compile_deplibs" 6881698f425bSmrg else 6882698f425bSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6883698f425bSmrg test -n "$add" && deplibs="$add $deplibs" 6884698f425bSmrg if test "$hardcode_direct" != yes && 6885698f425bSmrg test "$hardcode_minus_L" != yes && 6886698f425bSmrg test "$hardcode_shlibpath_var" = yes; then 6887698f425bSmrg case :$finalize_shlibpath: in 6888698f425bSmrg *":$libdir:"*) ;; 68899ef0b394Smrg *) func_append finalize_shlibpath "$libdir:" ;; 6890698f425bSmrg esac 6891698f425bSmrg fi 6892698f425bSmrg fi 6893698f425bSmrg fi 6894698f425bSmrg 68959ef0b394Smrg if test "$linkmode" = prog || test "$opt_mode" = relink; then 6896698f425bSmrg add_shlibpath= 6897698f425bSmrg add_dir= 6898698f425bSmrg add= 6899698f425bSmrg # Finalize command for both is simple: just hardcode it. 6900698f425bSmrg if test "$hardcode_direct" = yes && 6901698f425bSmrg test "$hardcode_direct_absolute" = no; then 6902698f425bSmrg add="$libdir/$linklib" 6903698f425bSmrg elif test "$hardcode_minus_L" = yes; then 6904698f425bSmrg add_dir="-L$libdir" 6905698f425bSmrg add="-l$name" 6906698f425bSmrg elif test "$hardcode_shlibpath_var" = yes; then 6907698f425bSmrg case :$finalize_shlibpath: in 6908698f425bSmrg *":$libdir:"*) ;; 69099ef0b394Smrg *) func_append finalize_shlibpath "$libdir:" ;; 6910698f425bSmrg esac 6911698f425bSmrg add="-l$name" 6912698f425bSmrg elif test "$hardcode_automatic" = yes; then 6913698f425bSmrg if test -n "$inst_prefix_dir" && 6914698f425bSmrg test -f "$inst_prefix_dir$libdir/$linklib" ; then 6915698f425bSmrg add="$inst_prefix_dir$libdir/$linklib" 6916698f425bSmrg else 6917698f425bSmrg add="$libdir/$linklib" 6918698f425bSmrg fi 6919698f425bSmrg else 6920698f425bSmrg # We cannot seem to hardcode it, guess we'll fake it. 6921698f425bSmrg add_dir="-L$libdir" 6922698f425bSmrg # Try looking first in the location we're being installed to. 6923698f425bSmrg if test -n "$inst_prefix_dir"; then 6924698f425bSmrg case $libdir in 6925698f425bSmrg [\\/]*) 69269ef0b394Smrg func_append add_dir " -L$inst_prefix_dir$libdir" 6927698f425bSmrg ;; 6928698f425bSmrg esac 6929698f425bSmrg fi 6930698f425bSmrg add="-l$name" 6931698f425bSmrg fi 6932698f425bSmrg 6933698f425bSmrg if test "$linkmode" = prog; then 6934698f425bSmrg test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" 6935698f425bSmrg test -n "$add" && finalize_deplibs="$add $finalize_deplibs" 6936698f425bSmrg else 6937698f425bSmrg test -n "$add_dir" && deplibs="$add_dir $deplibs" 6938698f425bSmrg test -n "$add" && deplibs="$add $deplibs" 6939698f425bSmrg fi 6940698f425bSmrg fi 6941698f425bSmrg elif test "$linkmode" = prog; then 6942698f425bSmrg # Here we assume that one of hardcode_direct or hardcode_minus_L 6943698f425bSmrg # is not unsupported. This is valid on all known static and 6944698f425bSmrg # shared platforms. 6945698f425bSmrg if test "$hardcode_direct" != unsupported; then 6946698f425bSmrg test -n "$old_library" && linklib="$old_library" 6947698f425bSmrg compile_deplibs="$dir/$linklib $compile_deplibs" 6948698f425bSmrg finalize_deplibs="$dir/$linklib $finalize_deplibs" 6949698f425bSmrg else 6950698f425bSmrg compile_deplibs="-l$name -L$dir $compile_deplibs" 6951698f425bSmrg finalize_deplibs="-l$name -L$dir $finalize_deplibs" 6952698f425bSmrg fi 6953698f425bSmrg elif test "$build_libtool_libs" = yes; then 6954698f425bSmrg # Not a shared library 6955698f425bSmrg if test "$deplibs_check_method" != pass_all; then 6956698f425bSmrg # We're trying link a shared library against a static one 6957698f425bSmrg # but the system doesn't support it. 6958698f425bSmrg 6959698f425bSmrg # Just print a warning and add the library to dependency_libs so 6960698f425bSmrg # that the program can be linked against the static library. 69619ef0b394Smrg echo 6962698f425bSmrg $ECHO "*** Warning: This system can not link to static lib archive $lib." 69639ef0b394Smrg echo "*** I have the capability to make that library automatically link in when" 69649ef0b394Smrg echo "*** you link to this library. But I can only do this if you have a" 69659ef0b394Smrg echo "*** shared version of the library, which you do not appear to have." 6966698f425bSmrg if test "$module" = yes; then 69679ef0b394Smrg echo "*** But as you try to build a module library, libtool will still create " 69689ef0b394Smrg echo "*** a static module, that should work as long as the dlopening application" 69699ef0b394Smrg echo "*** is linked with the -dlopen flag to resolve symbols at runtime." 6970698f425bSmrg if test -z "$global_symbol_pipe"; then 69719ef0b394Smrg echo 69729ef0b394Smrg echo "*** However, this would only work if libtool was able to extract symbol" 69739ef0b394Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 69749ef0b394Smrg echo "*** not find such a program. So, this module is probably useless." 69759ef0b394Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 6976698f425bSmrg fi 6977698f425bSmrg if test "$build_old_libs" = no; then 6978698f425bSmrg build_libtool_libs=module 6979698f425bSmrg build_old_libs=yes 6980698f425bSmrg else 6981698f425bSmrg build_libtool_libs=no 6982698f425bSmrg fi 6983698f425bSmrg fi 6984698f425bSmrg else 6985698f425bSmrg deplibs="$dir/$old_library $deplibs" 6986698f425bSmrg link_static=yes 6987698f425bSmrg fi 6988698f425bSmrg fi # link shared/static library? 6989698f425bSmrg 6990698f425bSmrg if test "$linkmode" = lib; then 6991698f425bSmrg if test -n "$dependency_libs" && 6992698f425bSmrg { test "$hardcode_into_libs" != yes || 6993698f425bSmrg test "$build_old_libs" = yes || 6994698f425bSmrg test "$link_static" = yes; }; then 6995698f425bSmrg # Extract -R from dependency_libs 6996698f425bSmrg temp_deplibs= 6997698f425bSmrg for libdir in $dependency_libs; do 6998698f425bSmrg case $libdir in 6999698f425bSmrg -R*) func_stripname '-R' '' "$libdir" 7000698f425bSmrg temp_xrpath=$func_stripname_result 7001698f425bSmrg case " $xrpath " in 7002698f425bSmrg *" $temp_xrpath "*) ;; 70039ef0b394Smrg *) func_append xrpath " $temp_xrpath";; 7004698f425bSmrg esac;; 70059ef0b394Smrg *) func_append temp_deplibs " $libdir";; 7006698f425bSmrg esac 7007698f425bSmrg done 7008698f425bSmrg dependency_libs="$temp_deplibs" 7009698f425bSmrg fi 7010698f425bSmrg 70119ef0b394Smrg func_append newlib_search_path " $absdir" 7012698f425bSmrg # Link against this library 7013698f425bSmrg test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" 7014698f425bSmrg # ... and its dependency_libs 7015698f425bSmrg tmp_libs= 7016698f425bSmrg for deplib in $dependency_libs; do 7017698f425bSmrg newdependency_libs="$deplib $newdependency_libs" 70189ef0b394Smrg case $deplib in 70199ef0b394Smrg -L*) func_stripname '-L' '' "$deplib" 70209ef0b394Smrg func_resolve_sysroot "$func_stripname_result";; 70219ef0b394Smrg *) func_resolve_sysroot "$deplib" ;; 70229ef0b394Smrg esac 70239ef0b394Smrg if $opt_preserve_dup_deps ; then 7024698f425bSmrg case "$tmp_libs " in 70259ef0b394Smrg *" $func_resolve_sysroot_result "*) 70269ef0b394Smrg func_append specialdeplibs " $func_resolve_sysroot_result" ;; 7027698f425bSmrg esac 7028698f425bSmrg fi 70299ef0b394Smrg func_append tmp_libs " $func_resolve_sysroot_result" 7030698f425bSmrg done 7031698f425bSmrg 7032698f425bSmrg if test "$link_all_deplibs" != no; then 7033698f425bSmrg # Add the search paths of all dependency libraries 7034698f425bSmrg for deplib in $dependency_libs; do 70359ef0b394Smrg path= 7036698f425bSmrg case $deplib in 7037698f425bSmrg -L*) path="$deplib" ;; 7038698f425bSmrg *.la) 70399ef0b394Smrg func_resolve_sysroot "$deplib" 70409ef0b394Smrg deplib=$func_resolve_sysroot_result 7041698f425bSmrg func_dirname "$deplib" "" "." 70429ef0b394Smrg dir=$func_dirname_result 7043698f425bSmrg # We need an absolute path. 7044698f425bSmrg case $dir in 7045698f425bSmrg [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; 7046698f425bSmrg *) 7047698f425bSmrg absdir=`cd "$dir" && pwd` 7048698f425bSmrg if test -z "$absdir"; then 7049698f425bSmrg func_warning "cannot determine absolute directory name of \`$dir'" 7050698f425bSmrg absdir="$dir" 7051698f425bSmrg fi 7052698f425bSmrg ;; 7053698f425bSmrg esac 7054698f425bSmrg if $GREP "^installed=no" $deplib > /dev/null; then 7055698f425bSmrg case $host in 7056698f425bSmrg *-*-darwin*) 7057698f425bSmrg depdepl= 7058698f425bSmrg eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` 7059698f425bSmrg if test -n "$deplibrary_names" ; then 7060698f425bSmrg for tmp in $deplibrary_names ; do 7061698f425bSmrg depdepl=$tmp 7062698f425bSmrg done 7063698f425bSmrg if test -f "$absdir/$objdir/$depdepl" ; then 7064698f425bSmrg depdepl="$absdir/$objdir/$depdepl" 7065698f425bSmrg darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7066698f425bSmrg if test -z "$darwin_install_name"; then 7067698f425bSmrg darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` 7068698f425bSmrg fi 70699ef0b394Smrg func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" 70709ef0b394Smrg func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" 7071698f425bSmrg path= 7072698f425bSmrg fi 7073698f425bSmrg fi 7074698f425bSmrg ;; 7075698f425bSmrg *) 7076698f425bSmrg path="-L$absdir/$objdir" 7077698f425bSmrg ;; 7078698f425bSmrg esac 7079698f425bSmrg else 7080698f425bSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` 7081698f425bSmrg test -z "$libdir" && \ 7082698f425bSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 7083698f425bSmrg test "$absdir" != "$libdir" && \ 7084698f425bSmrg func_warning "\`$deplib' seems to be moved" 7085698f425bSmrg 7086698f425bSmrg path="-L$absdir" 7087698f425bSmrg fi 7088698f425bSmrg ;; 7089698f425bSmrg esac 7090698f425bSmrg case " $deplibs " in 7091698f425bSmrg *" $path "*) ;; 7092698f425bSmrg *) deplibs="$path $deplibs" ;; 7093698f425bSmrg esac 7094698f425bSmrg done 7095698f425bSmrg fi # link_all_deplibs != no 7096698f425bSmrg fi # linkmode = lib 7097698f425bSmrg done # for deplib in $libs 7098698f425bSmrg if test "$pass" = link; then 7099698f425bSmrg if test "$linkmode" = "prog"; then 7100698f425bSmrg compile_deplibs="$new_inherited_linker_flags $compile_deplibs" 7101698f425bSmrg finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" 7102698f425bSmrg else 71039ef0b394Smrg compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 7104698f425bSmrg fi 7105698f425bSmrg fi 7106698f425bSmrg dependency_libs="$newdependency_libs" 7107698f425bSmrg if test "$pass" = dlpreopen; then 7108698f425bSmrg # Link the dlpreopened libraries before other libraries 7109698f425bSmrg for deplib in $save_deplibs; do 7110698f425bSmrg deplibs="$deplib $deplibs" 7111698f425bSmrg done 7112698f425bSmrg fi 7113698f425bSmrg if test "$pass" != dlopen; then 7114698f425bSmrg if test "$pass" != conv; then 7115698f425bSmrg # Make sure lib_search_path contains only unique directories. 7116698f425bSmrg lib_search_path= 7117698f425bSmrg for dir in $newlib_search_path; do 7118698f425bSmrg case "$lib_search_path " in 7119698f425bSmrg *" $dir "*) ;; 71209ef0b394Smrg *) func_append lib_search_path " $dir" ;; 7121698f425bSmrg esac 7122698f425bSmrg done 7123698f425bSmrg newlib_search_path= 7124698f425bSmrg fi 7125698f425bSmrg 7126698f425bSmrg if test "$linkmode,$pass" != "prog,link"; then 7127698f425bSmrg vars="deplibs" 7128698f425bSmrg else 7129698f425bSmrg vars="compile_deplibs finalize_deplibs" 7130698f425bSmrg fi 7131698f425bSmrg for var in $vars dependency_libs; do 7132698f425bSmrg # Add libraries to $var in reverse order 7133698f425bSmrg eval tmp_libs=\"\$$var\" 7134698f425bSmrg new_libs= 7135698f425bSmrg for deplib in $tmp_libs; do 7136698f425bSmrg # FIXME: Pedantically, this is the right thing to do, so 7137698f425bSmrg # that some nasty dependency loop isn't accidentally 7138698f425bSmrg # broken: 7139698f425bSmrg #new_libs="$deplib $new_libs" 7140698f425bSmrg # Pragmatically, this seems to cause very few problems in 7141698f425bSmrg # practice: 7142698f425bSmrg case $deplib in 7143698f425bSmrg -L*) new_libs="$deplib $new_libs" ;; 7144698f425bSmrg -R*) ;; 7145698f425bSmrg *) 7146698f425bSmrg # And here is the reason: when a library appears more 7147698f425bSmrg # than once as an explicit dependence of a library, or 7148698f425bSmrg # is implicitly linked in more than once by the 7149698f425bSmrg # compiler, it is considered special, and multiple 7150698f425bSmrg # occurrences thereof are not removed. Compare this 7151698f425bSmrg # with having the same library being listed as a 7152698f425bSmrg # dependency of multiple other libraries: in this case, 7153698f425bSmrg # we know (pedantically, we assume) the library does not 7154698f425bSmrg # need to be listed more than once, so we keep only the 7155698f425bSmrg # last copy. This is not always right, but it is rare 7156698f425bSmrg # enough that we require users that really mean to play 7157698f425bSmrg # such unportable linking tricks to link the library 7158698f425bSmrg # using -Wl,-lname, so that libtool does not consider it 7159698f425bSmrg # for duplicate removal. 7160698f425bSmrg case " $specialdeplibs " in 7161698f425bSmrg *" $deplib "*) new_libs="$deplib $new_libs" ;; 7162698f425bSmrg *) 7163698f425bSmrg case " $new_libs " in 7164698f425bSmrg *" $deplib "*) ;; 7165698f425bSmrg *) new_libs="$deplib $new_libs" ;; 7166698f425bSmrg esac 7167698f425bSmrg ;; 7168698f425bSmrg esac 7169698f425bSmrg ;; 7170698f425bSmrg esac 7171698f425bSmrg done 7172698f425bSmrg tmp_libs= 7173698f425bSmrg for deplib in $new_libs; do 7174698f425bSmrg case $deplib in 7175698f425bSmrg -L*) 7176698f425bSmrg case " $tmp_libs " in 7177698f425bSmrg *" $deplib "*) ;; 71789ef0b394Smrg *) func_append tmp_libs " $deplib" ;; 7179698f425bSmrg esac 7180698f425bSmrg ;; 71819ef0b394Smrg *) func_append tmp_libs " $deplib" ;; 7182698f425bSmrg esac 7183698f425bSmrg done 7184698f425bSmrg eval $var=\"$tmp_libs\" 7185698f425bSmrg done # for var 7186698f425bSmrg fi 7187698f425bSmrg # Last step: remove runtime libs from dependency_libs 7188698f425bSmrg # (they stay in deplibs) 7189698f425bSmrg tmp_libs= 7190698f425bSmrg for i in $dependency_libs ; do 7191698f425bSmrg case " $predeps $postdeps $compiler_lib_search_path " in 7192698f425bSmrg *" $i "*) 7193698f425bSmrg i="" 7194698f425bSmrg ;; 7195698f425bSmrg esac 7196698f425bSmrg if test -n "$i" ; then 71979ef0b394Smrg func_append tmp_libs " $i" 7198698f425bSmrg fi 7199698f425bSmrg done 7200698f425bSmrg dependency_libs=$tmp_libs 7201698f425bSmrg done # for pass 7202698f425bSmrg if test "$linkmode" = prog; then 7203698f425bSmrg dlfiles="$newdlfiles" 7204698f425bSmrg fi 7205698f425bSmrg if test "$linkmode" = prog || test "$linkmode" = lib; then 7206698f425bSmrg dlprefiles="$newdlprefiles" 7207698f425bSmrg fi 7208698f425bSmrg 7209698f425bSmrg case $linkmode in 7210698f425bSmrg oldlib) 7211698f425bSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 7212698f425bSmrg func_warning "\`-dlopen' is ignored for archives" 7213698f425bSmrg fi 7214698f425bSmrg 7215698f425bSmrg case " $deplibs" in 7216698f425bSmrg *\ -l* | *\ -L*) 7217698f425bSmrg func_warning "\`-l' and \`-L' are ignored for archives" ;; 7218698f425bSmrg esac 7219698f425bSmrg 7220698f425bSmrg test -n "$rpath" && \ 7221698f425bSmrg func_warning "\`-rpath' is ignored for archives" 7222698f425bSmrg 7223698f425bSmrg test -n "$xrpath" && \ 7224698f425bSmrg func_warning "\`-R' is ignored for archives" 7225698f425bSmrg 7226698f425bSmrg test -n "$vinfo" && \ 7227698f425bSmrg func_warning "\`-version-info/-version-number' is ignored for archives" 7228698f425bSmrg 7229698f425bSmrg test -n "$release" && \ 7230698f425bSmrg func_warning "\`-release' is ignored for archives" 7231698f425bSmrg 7232698f425bSmrg test -n "$export_symbols$export_symbols_regex" && \ 7233698f425bSmrg func_warning "\`-export-symbols' is ignored for archives" 7234698f425bSmrg 7235698f425bSmrg # Now set the variables for building old libraries. 7236698f425bSmrg build_libtool_libs=no 7237698f425bSmrg oldlibs="$output" 72389ef0b394Smrg func_append objs "$old_deplibs" 7239698f425bSmrg ;; 7240698f425bSmrg 7241698f425bSmrg lib) 7242698f425bSmrg # Make sure we only generate libraries of the form `libNAME.la'. 7243698f425bSmrg case $outputname in 7244698f425bSmrg lib*) 7245698f425bSmrg func_stripname 'lib' '.la' "$outputname" 7246698f425bSmrg name=$func_stripname_result 7247698f425bSmrg eval shared_ext=\"$shrext_cmds\" 7248698f425bSmrg eval libname=\"$libname_spec\" 7249698f425bSmrg ;; 7250698f425bSmrg *) 7251698f425bSmrg test "$module" = no && \ 7252698f425bSmrg func_fatal_help "libtool library \`$output' must begin with \`lib'" 7253698f425bSmrg 7254698f425bSmrg if test "$need_lib_prefix" != no; then 7255698f425bSmrg # Add the "lib" prefix for modules if required 7256698f425bSmrg func_stripname '' '.la' "$outputname" 7257698f425bSmrg name=$func_stripname_result 7258698f425bSmrg eval shared_ext=\"$shrext_cmds\" 7259698f425bSmrg eval libname=\"$libname_spec\" 7260698f425bSmrg else 7261698f425bSmrg func_stripname '' '.la' "$outputname" 7262698f425bSmrg libname=$func_stripname_result 7263698f425bSmrg fi 7264698f425bSmrg ;; 7265698f425bSmrg esac 7266698f425bSmrg 7267698f425bSmrg if test -n "$objs"; then 7268698f425bSmrg if test "$deplibs_check_method" != pass_all; then 7269698f425bSmrg func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 7270698f425bSmrg else 72719ef0b394Smrg echo 7272698f425bSmrg $ECHO "*** Warning: Linking the shared library $output against the non-libtool" 7273698f425bSmrg $ECHO "*** objects $objs is not portable!" 72749ef0b394Smrg func_append libobjs " $objs" 7275698f425bSmrg fi 7276698f425bSmrg fi 7277698f425bSmrg 7278698f425bSmrg test "$dlself" != no && \ 7279698f425bSmrg func_warning "\`-dlopen self' is ignored for libtool libraries" 7280698f425bSmrg 7281698f425bSmrg set dummy $rpath 7282698f425bSmrg shift 7283698f425bSmrg test "$#" -gt 1 && \ 7284698f425bSmrg func_warning "ignoring multiple \`-rpath's for a libtool library" 7285698f425bSmrg 7286698f425bSmrg install_libdir="$1" 7287698f425bSmrg 7288698f425bSmrg oldlibs= 7289698f425bSmrg if test -z "$rpath"; then 7290698f425bSmrg if test "$build_libtool_libs" = yes; then 7291698f425bSmrg # Building a libtool convenience library. 7292698f425bSmrg # Some compilers have problems with a `.al' extension so 7293698f425bSmrg # convenience libraries should have the same extension an 7294698f425bSmrg # archive normally would. 7295698f425bSmrg oldlibs="$output_objdir/$libname.$libext $oldlibs" 7296698f425bSmrg build_libtool_libs=convenience 7297698f425bSmrg build_old_libs=yes 7298698f425bSmrg fi 7299698f425bSmrg 7300698f425bSmrg test -n "$vinfo" && \ 7301698f425bSmrg func_warning "\`-version-info/-version-number' is ignored for convenience libraries" 7302698f425bSmrg 7303698f425bSmrg test -n "$release" && \ 7304698f425bSmrg func_warning "\`-release' is ignored for convenience libraries" 7305698f425bSmrg else 7306698f425bSmrg 7307698f425bSmrg # Parse the version information argument. 7308698f425bSmrg save_ifs="$IFS"; IFS=':' 7309698f425bSmrg set dummy $vinfo 0 0 0 7310698f425bSmrg shift 7311698f425bSmrg IFS="$save_ifs" 7312698f425bSmrg 7313698f425bSmrg test -n "$7" && \ 7314698f425bSmrg func_fatal_help "too many parameters to \`-version-info'" 7315698f425bSmrg 7316698f425bSmrg # convert absolute version numbers to libtool ages 7317698f425bSmrg # this retains compatibility with .la files and attempts 7318698f425bSmrg # to make the code below a bit more comprehensible 7319698f425bSmrg 7320698f425bSmrg case $vinfo_number in 7321698f425bSmrg yes) 7322698f425bSmrg number_major="$1" 7323698f425bSmrg number_minor="$2" 7324698f425bSmrg number_revision="$3" 7325698f425bSmrg # 7326698f425bSmrg # There are really only two kinds -- those that 7327698f425bSmrg # use the current revision as the major version 7328698f425bSmrg # and those that subtract age and use age as 7329698f425bSmrg # a minor version. But, then there is irix 7330698f425bSmrg # which has an extra 1 added just for fun 7331698f425bSmrg # 7332698f425bSmrg case $version_type in 7333fb5e8d76Smrg # correct linux to gnu/linux during the next big refactor 7334698f425bSmrg darwin|linux|osf|windows|none) 7335698f425bSmrg func_arith $number_major + $number_minor 7336698f425bSmrg current=$func_arith_result 7337698f425bSmrg age="$number_minor" 7338698f425bSmrg revision="$number_revision" 7339698f425bSmrg ;; 73409ef0b394Smrg freebsd-aout|freebsd-elf|qnx|sunos) 7341698f425bSmrg current="$number_major" 7342698f425bSmrg revision="$number_minor" 7343698f425bSmrg age="0" 7344698f425bSmrg ;; 7345698f425bSmrg irix|nonstopux) 7346698f425bSmrg func_arith $number_major + $number_minor 7347698f425bSmrg current=$func_arith_result 7348698f425bSmrg age="$number_minor" 7349698f425bSmrg revision="$number_minor" 7350698f425bSmrg lt_irix_increment=no 7351698f425bSmrg ;; 7352698f425bSmrg esac 7353698f425bSmrg ;; 7354698f425bSmrg no) 7355698f425bSmrg current="$1" 7356698f425bSmrg revision="$2" 7357698f425bSmrg age="$3" 7358698f425bSmrg ;; 7359698f425bSmrg esac 7360698f425bSmrg 7361698f425bSmrg # Check that each of the things are valid numbers. 7362698f425bSmrg case $current in 7363698f425bSmrg 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]) ;; 7364698f425bSmrg *) 7365698f425bSmrg func_error "CURRENT \`$current' must be a nonnegative integer" 7366698f425bSmrg func_fatal_error "\`$vinfo' is not valid version information" 7367698f425bSmrg ;; 7368698f425bSmrg esac 7369698f425bSmrg 7370698f425bSmrg case $revision in 7371698f425bSmrg 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]) ;; 7372698f425bSmrg *) 7373698f425bSmrg func_error "REVISION \`$revision' must be a nonnegative integer" 7374698f425bSmrg func_fatal_error "\`$vinfo' is not valid version information" 7375698f425bSmrg ;; 7376698f425bSmrg esac 7377698f425bSmrg 7378698f425bSmrg case $age in 7379698f425bSmrg 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]) ;; 7380698f425bSmrg *) 7381698f425bSmrg func_error "AGE \`$age' must be a nonnegative integer" 7382698f425bSmrg func_fatal_error "\`$vinfo' is not valid version information" 7383698f425bSmrg ;; 7384698f425bSmrg esac 7385698f425bSmrg 7386698f425bSmrg if test "$age" -gt "$current"; then 7387698f425bSmrg func_error "AGE \`$age' is greater than the current interface number \`$current'" 7388698f425bSmrg func_fatal_error "\`$vinfo' is not valid version information" 7389698f425bSmrg fi 7390698f425bSmrg 7391698f425bSmrg # Calculate the version variables. 7392698f425bSmrg major= 7393698f425bSmrg versuffix= 7394698f425bSmrg verstring= 7395698f425bSmrg case $version_type in 7396698f425bSmrg none) ;; 7397698f425bSmrg 7398698f425bSmrg darwin) 7399698f425bSmrg # Like Linux, but with the current version available in 7400698f425bSmrg # verstring for coding it into the library header 7401698f425bSmrg func_arith $current - $age 7402698f425bSmrg major=.$func_arith_result 7403698f425bSmrg versuffix="$major.$age.$revision" 7404698f425bSmrg # Darwin ld doesn't like 0 for these options... 7405698f425bSmrg func_arith $current + 1 7406698f425bSmrg minor_current=$func_arith_result 7407698f425bSmrg xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" 7408698f425bSmrg verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" 7409698f425bSmrg ;; 7410698f425bSmrg 7411698f425bSmrg freebsd-aout) 7412698f425bSmrg major=".$current" 7413698f425bSmrg versuffix=".$current.$revision"; 7414698f425bSmrg ;; 7415698f425bSmrg 7416698f425bSmrg freebsd-elf) 7417698f425bSmrg major=".$current" 7418698f425bSmrg versuffix=".$current" 7419698f425bSmrg ;; 7420698f425bSmrg 7421698f425bSmrg irix | nonstopux) 7422698f425bSmrg if test "X$lt_irix_increment" = "Xno"; then 7423698f425bSmrg func_arith $current - $age 7424698f425bSmrg else 7425698f425bSmrg func_arith $current - $age + 1 7426698f425bSmrg fi 7427698f425bSmrg major=$func_arith_result 7428698f425bSmrg 7429698f425bSmrg case $version_type in 7430698f425bSmrg nonstopux) verstring_prefix=nonstopux ;; 7431698f425bSmrg *) verstring_prefix=sgi ;; 7432698f425bSmrg esac 7433698f425bSmrg verstring="$verstring_prefix$major.$revision" 7434698f425bSmrg 7435698f425bSmrg # Add in all the interfaces that we are compatible with. 7436698f425bSmrg loop=$revision 7437698f425bSmrg while test "$loop" -ne 0; do 7438698f425bSmrg func_arith $revision - $loop 7439698f425bSmrg iface=$func_arith_result 7440698f425bSmrg func_arith $loop - 1 7441698f425bSmrg loop=$func_arith_result 7442698f425bSmrg verstring="$verstring_prefix$major.$iface:$verstring" 7443698f425bSmrg done 7444698f425bSmrg 7445698f425bSmrg # Before this point, $major must not contain `.'. 7446698f425bSmrg major=.$major 7447698f425bSmrg versuffix="$major.$revision" 7448698f425bSmrg ;; 7449698f425bSmrg 7450fb5e8d76Smrg linux) # correct to gnu/linux during the next big refactor 7451698f425bSmrg func_arith $current - $age 7452698f425bSmrg major=.$func_arith_result 7453698f425bSmrg versuffix="$major.$age.$revision" 7454698f425bSmrg ;; 7455698f425bSmrg 7456698f425bSmrg osf) 7457698f425bSmrg func_arith $current - $age 7458698f425bSmrg major=.$func_arith_result 7459698f425bSmrg versuffix=".$current.$age.$revision" 7460698f425bSmrg verstring="$current.$age.$revision" 7461698f425bSmrg 7462698f425bSmrg # Add in all the interfaces that we are compatible with. 7463698f425bSmrg loop=$age 7464698f425bSmrg while test "$loop" -ne 0; do 7465698f425bSmrg func_arith $current - $loop 7466698f425bSmrg iface=$func_arith_result 7467698f425bSmrg func_arith $loop - 1 7468698f425bSmrg loop=$func_arith_result 7469698f425bSmrg verstring="$verstring:${iface}.0" 7470698f425bSmrg done 7471698f425bSmrg 7472698f425bSmrg # Make executables depend on our current version. 74739ef0b394Smrg func_append verstring ":${current}.0" 7474698f425bSmrg ;; 7475698f425bSmrg 7476698f425bSmrg qnx) 7477698f425bSmrg major=".$current" 7478698f425bSmrg versuffix=".$current" 7479698f425bSmrg ;; 7480698f425bSmrg 7481698f425bSmrg sunos) 7482698f425bSmrg major=".$current" 7483698f425bSmrg versuffix=".$current.$revision" 7484698f425bSmrg ;; 7485698f425bSmrg 7486698f425bSmrg windows) 7487698f425bSmrg # Use '-' rather than '.', since we only want one 7488698f425bSmrg # extension on DOS 8.3 filesystems. 7489698f425bSmrg func_arith $current - $age 7490698f425bSmrg major=$func_arith_result 7491698f425bSmrg versuffix="-$major" 7492698f425bSmrg ;; 7493698f425bSmrg 7494698f425bSmrg *) 7495698f425bSmrg func_fatal_configuration "unknown library version type \`$version_type'" 7496698f425bSmrg ;; 7497698f425bSmrg esac 7498698f425bSmrg 7499698f425bSmrg # Clear the version info if we defaulted, and they specified a release. 7500698f425bSmrg if test -z "$vinfo" && test -n "$release"; then 7501698f425bSmrg major= 7502698f425bSmrg case $version_type in 7503698f425bSmrg darwin) 7504698f425bSmrg # we can't check for "0.0" in archive_cmds due to quoting 7505698f425bSmrg # problems, so we reset it completely 7506698f425bSmrg verstring= 7507698f425bSmrg ;; 7508698f425bSmrg *) 7509698f425bSmrg verstring="0.0" 7510698f425bSmrg ;; 7511698f425bSmrg esac 7512698f425bSmrg if test "$need_version" = no; then 7513698f425bSmrg versuffix= 7514698f425bSmrg else 7515698f425bSmrg versuffix=".0.0" 7516698f425bSmrg fi 7517698f425bSmrg fi 7518698f425bSmrg 7519698f425bSmrg # Remove version info from name if versioning should be avoided 7520698f425bSmrg if test "$avoid_version" = yes && test "$need_version" = no; then 7521698f425bSmrg major= 7522698f425bSmrg versuffix= 7523698f425bSmrg verstring="" 7524698f425bSmrg fi 7525698f425bSmrg 7526698f425bSmrg # Check to see if the archive will have undefined symbols. 7527698f425bSmrg if test "$allow_undefined" = yes; then 7528698f425bSmrg if test "$allow_undefined_flag" = unsupported; then 7529698f425bSmrg func_warning "undefined symbols not allowed in $host shared libraries" 7530698f425bSmrg build_libtool_libs=no 7531698f425bSmrg build_old_libs=yes 7532698f425bSmrg fi 7533698f425bSmrg else 7534698f425bSmrg # Don't allow undefined symbols. 7535698f425bSmrg allow_undefined_flag="$no_undefined_flag" 7536698f425bSmrg fi 7537698f425bSmrg 7538698f425bSmrg fi 7539698f425bSmrg 7540698f425bSmrg func_generate_dlsyms "$libname" "$libname" "yes" 75419ef0b394Smrg func_append libobjs " $symfileobj" 7542698f425bSmrg test "X$libobjs" = "X " && libobjs= 7543698f425bSmrg 75449ef0b394Smrg if test "$opt_mode" != relink; then 7545698f425bSmrg # Remove our outputs, but don't remove object files since they 7546698f425bSmrg # may have been created when compiling PIC objects. 7547698f425bSmrg removelist= 7548698f425bSmrg tempremovelist=`$ECHO "$output_objdir/*"` 7549698f425bSmrg for p in $tempremovelist; do 7550698f425bSmrg case $p in 7551698f425bSmrg *.$objext | *.gcno) 7552698f425bSmrg ;; 7553698f425bSmrg $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) 7554698f425bSmrg if test "X$precious_files_regex" != "X"; then 7555698f425bSmrg if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 7556698f425bSmrg then 7557698f425bSmrg continue 7558698f425bSmrg fi 7559698f425bSmrg fi 75609ef0b394Smrg func_append removelist " $p" 7561698f425bSmrg ;; 7562698f425bSmrg *) ;; 7563698f425bSmrg esac 7564698f425bSmrg done 7565698f425bSmrg test -n "$removelist" && \ 7566698f425bSmrg func_show_eval "${RM}r \$removelist" 7567698f425bSmrg fi 7568698f425bSmrg 7569698f425bSmrg # Now set the variables for building old libraries. 7570698f425bSmrg if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then 75719ef0b394Smrg func_append oldlibs " $output_objdir/$libname.$libext" 7572698f425bSmrg 7573698f425bSmrg # Transform .lo files to .o files. 75749ef0b394Smrg oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` 7575698f425bSmrg fi 7576698f425bSmrg 7577698f425bSmrg # Eliminate all temporary directories. 7578698f425bSmrg #for path in $notinst_path; do 75799ef0b394Smrg # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` 75809ef0b394Smrg # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` 75819ef0b394Smrg # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` 7582698f425bSmrg #done 7583698f425bSmrg 7584698f425bSmrg if test -n "$xrpath"; then 7585698f425bSmrg # If the user specified any rpath flags, then add them. 7586698f425bSmrg temp_xrpath= 7587698f425bSmrg for libdir in $xrpath; do 75889ef0b394Smrg func_replace_sysroot "$libdir" 75899ef0b394Smrg func_append temp_xrpath " -R$func_replace_sysroot_result" 7590698f425bSmrg case "$finalize_rpath " in 7591698f425bSmrg *" $libdir "*) ;; 75929ef0b394Smrg *) func_append finalize_rpath " $libdir" ;; 7593698f425bSmrg esac 7594698f425bSmrg done 7595698f425bSmrg if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then 7596698f425bSmrg dependency_libs="$temp_xrpath $dependency_libs" 7597698f425bSmrg fi 7598698f425bSmrg fi 7599698f425bSmrg 7600698f425bSmrg # Make sure dlfiles contains only unique files that won't be dlpreopened 7601698f425bSmrg old_dlfiles="$dlfiles" 7602698f425bSmrg dlfiles= 7603698f425bSmrg for lib in $old_dlfiles; do 7604698f425bSmrg case " $dlprefiles $dlfiles " in 7605698f425bSmrg *" $lib "*) ;; 76069ef0b394Smrg *) func_append dlfiles " $lib" ;; 7607698f425bSmrg esac 7608698f425bSmrg done 7609698f425bSmrg 7610698f425bSmrg # Make sure dlprefiles contains only unique files 7611698f425bSmrg old_dlprefiles="$dlprefiles" 7612698f425bSmrg dlprefiles= 7613698f425bSmrg for lib in $old_dlprefiles; do 7614698f425bSmrg case "$dlprefiles " in 7615698f425bSmrg *" $lib "*) ;; 76169ef0b394Smrg *) func_append dlprefiles " $lib" ;; 7617698f425bSmrg esac 7618698f425bSmrg done 7619698f425bSmrg 7620698f425bSmrg if test "$build_libtool_libs" = yes; then 7621698f425bSmrg if test -n "$rpath"; then 7622698f425bSmrg case $host in 76239ef0b394Smrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) 7624698f425bSmrg # these systems don't actually have a c library (as such)! 7625698f425bSmrg ;; 7626698f425bSmrg *-*-rhapsody* | *-*-darwin1.[012]) 7627698f425bSmrg # Rhapsody C library is in the System framework 76289ef0b394Smrg func_append deplibs " System.ltframework" 7629698f425bSmrg ;; 7630698f425bSmrg *-*-netbsd*) 7631698f425bSmrg # Don't link with libc until the a.out ld.so is fixed. 7632698f425bSmrg ;; 7633698f425bSmrg *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) 7634698f425bSmrg # Do not include libc due to us having libc/libc_r. 7635698f425bSmrg ;; 7636698f425bSmrg *-*-sco3.2v5* | *-*-sco5v6*) 7637698f425bSmrg # Causes problems with __ctype 7638698f425bSmrg ;; 7639698f425bSmrg *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) 7640698f425bSmrg # Compiler inserts libc in the correct place for threads to work 7641698f425bSmrg ;; 7642698f425bSmrg *) 7643698f425bSmrg # Add libc to deplibs on all other systems if necessary. 7644698f425bSmrg if test "$build_libtool_need_lc" = "yes"; then 76459ef0b394Smrg func_append deplibs " -lc" 7646698f425bSmrg fi 7647698f425bSmrg ;; 7648698f425bSmrg esac 7649698f425bSmrg fi 7650698f425bSmrg 7651698f425bSmrg # Transform deplibs into only deplibs that can be linked in shared. 7652698f425bSmrg name_save=$name 7653698f425bSmrg libname_save=$libname 7654698f425bSmrg release_save=$release 7655698f425bSmrg versuffix_save=$versuffix 7656698f425bSmrg major_save=$major 7657698f425bSmrg # I'm not sure if I'm treating the release correctly. I think 7658698f425bSmrg # release should show up in the -l (ie -lgmp5) so we don't want to 7659698f425bSmrg # add it in twice. Is that correct? 7660698f425bSmrg release="" 7661698f425bSmrg versuffix="" 7662698f425bSmrg major="" 7663698f425bSmrg newdeplibs= 7664698f425bSmrg droppeddeps=no 7665698f425bSmrg case $deplibs_check_method in 7666698f425bSmrg pass_all) 7667698f425bSmrg # Don't check for shared/static. Everything works. 7668698f425bSmrg # This might be a little naive. We might want to check 7669698f425bSmrg # whether the library exists or not. But this is on 7670698f425bSmrg # osf3 & osf4 and I'm not really sure... Just 7671698f425bSmrg # implementing what was already the behavior. 7672698f425bSmrg newdeplibs=$deplibs 7673698f425bSmrg ;; 7674698f425bSmrg test_compile) 7675698f425bSmrg # This code stresses the "libraries are programs" paradigm to its 7676698f425bSmrg # limits. Maybe even breaks it. We compile a program, linking it 7677698f425bSmrg # against the deplibs as a proxy for the library. Then we can check 7678698f425bSmrg # whether they linked in statically or dynamically with ldd. 7679698f425bSmrg $opt_dry_run || $RM conftest.c 7680698f425bSmrg cat > conftest.c <<EOF 7681698f425bSmrg int main() { return 0; } 7682698f425bSmrgEOF 7683698f425bSmrg $opt_dry_run || $RM conftest 7684698f425bSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then 7685698f425bSmrg ldd_output=`ldd conftest` 7686698f425bSmrg for i in $deplibs; do 7687698f425bSmrg case $i in 7688698f425bSmrg -l*) 7689698f425bSmrg func_stripname -l '' "$i" 7690698f425bSmrg name=$func_stripname_result 7691698f425bSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7692698f425bSmrg case " $predeps $postdeps " in 7693698f425bSmrg *" $i "*) 76949ef0b394Smrg func_append newdeplibs " $i" 7695698f425bSmrg i="" 7696698f425bSmrg ;; 7697698f425bSmrg esac 7698698f425bSmrg fi 7699698f425bSmrg if test -n "$i" ; then 7700698f425bSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 7701698f425bSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7702698f425bSmrg set dummy $deplib_matches; shift 7703698f425bSmrg deplib_match=$1 7704698f425bSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 77059ef0b394Smrg func_append newdeplibs " $i" 7706698f425bSmrg else 7707698f425bSmrg droppeddeps=yes 77089ef0b394Smrg echo 7709698f425bSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 77109ef0b394Smrg echo "*** I have the capability to make that library automatically link in when" 77119ef0b394Smrg echo "*** you link to this library. But I can only do this if you have a" 77129ef0b394Smrg echo "*** shared version of the library, which I believe you do not have" 77139ef0b394Smrg echo "*** because a test_compile did reveal that the linker did not use it for" 77149ef0b394Smrg echo "*** its dynamic dependency list that programs get resolved with at runtime." 7715698f425bSmrg fi 7716698f425bSmrg fi 7717698f425bSmrg ;; 7718698f425bSmrg *) 77199ef0b394Smrg func_append newdeplibs " $i" 7720698f425bSmrg ;; 7721698f425bSmrg esac 7722698f425bSmrg done 7723698f425bSmrg else 7724698f425bSmrg # Error occurred in the first compile. Let's try to salvage 7725698f425bSmrg # the situation: Compile a separate program for each library. 7726698f425bSmrg for i in $deplibs; do 7727698f425bSmrg case $i in 7728698f425bSmrg -l*) 7729698f425bSmrg func_stripname -l '' "$i" 7730698f425bSmrg name=$func_stripname_result 7731698f425bSmrg $opt_dry_run || $RM conftest 7732698f425bSmrg if $LTCC $LTCFLAGS -o conftest conftest.c $i; then 7733698f425bSmrg ldd_output=`ldd conftest` 7734698f425bSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7735698f425bSmrg case " $predeps $postdeps " in 7736698f425bSmrg *" $i "*) 77379ef0b394Smrg func_append newdeplibs " $i" 7738698f425bSmrg i="" 7739698f425bSmrg ;; 7740698f425bSmrg esac 7741698f425bSmrg fi 7742698f425bSmrg if test -n "$i" ; then 7743698f425bSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 7744698f425bSmrg deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` 7745698f425bSmrg set dummy $deplib_matches; shift 7746698f425bSmrg deplib_match=$1 7747698f425bSmrg if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then 77489ef0b394Smrg func_append newdeplibs " $i" 7749698f425bSmrg else 7750698f425bSmrg droppeddeps=yes 77519ef0b394Smrg echo 7752698f425bSmrg $ECHO "*** Warning: dynamic linker does not accept needed library $i." 77539ef0b394Smrg echo "*** I have the capability to make that library automatically link in when" 77549ef0b394Smrg echo "*** you link to this library. But I can only do this if you have a" 77559ef0b394Smrg echo "*** shared version of the library, which you do not appear to have" 77569ef0b394Smrg echo "*** because a test_compile did reveal that the linker did not use this one" 77579ef0b394Smrg echo "*** as a dynamic dependency that programs can get resolved with at runtime." 7758698f425bSmrg fi 7759698f425bSmrg fi 7760698f425bSmrg else 7761698f425bSmrg droppeddeps=yes 77629ef0b394Smrg echo 7763698f425bSmrg $ECHO "*** Warning! Library $i is needed by this library but I was not able to" 77649ef0b394Smrg echo "*** make it link in! You will probably need to install it or some" 77659ef0b394Smrg echo "*** library that it depends on before this library will be fully" 77669ef0b394Smrg echo "*** functional. Installing it before continuing would be even better." 7767698f425bSmrg fi 7768698f425bSmrg ;; 7769698f425bSmrg *) 77709ef0b394Smrg func_append newdeplibs " $i" 7771698f425bSmrg ;; 7772698f425bSmrg esac 7773698f425bSmrg done 7774698f425bSmrg fi 7775698f425bSmrg ;; 7776698f425bSmrg file_magic*) 7777698f425bSmrg set dummy $deplibs_check_method; shift 7778698f425bSmrg file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7779698f425bSmrg for a_deplib in $deplibs; do 7780698f425bSmrg case $a_deplib in 7781698f425bSmrg -l*) 7782698f425bSmrg func_stripname -l '' "$a_deplib" 7783698f425bSmrg name=$func_stripname_result 7784698f425bSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7785698f425bSmrg case " $predeps $postdeps " in 7786698f425bSmrg *" $a_deplib "*) 77879ef0b394Smrg func_append newdeplibs " $a_deplib" 7788698f425bSmrg a_deplib="" 7789698f425bSmrg ;; 7790698f425bSmrg esac 7791698f425bSmrg fi 7792698f425bSmrg if test -n "$a_deplib" ; then 7793698f425bSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 77949ef0b394Smrg if test -n "$file_magic_glob"; then 77959ef0b394Smrg libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` 77969ef0b394Smrg else 77979ef0b394Smrg libnameglob=$libname 77989ef0b394Smrg fi 77999ef0b394Smrg test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` 7800698f425bSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 78019ef0b394Smrg if test "$want_nocaseglob" = yes; then 78029ef0b394Smrg shopt -s nocaseglob 78039ef0b394Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 78049ef0b394Smrg $nocaseglob 78059ef0b394Smrg else 78069ef0b394Smrg potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` 78079ef0b394Smrg fi 7808698f425bSmrg for potent_lib in $potential_libs; do 7809698f425bSmrg # Follow soft links. 7810698f425bSmrg if ls -lLd "$potent_lib" 2>/dev/null | 7811698f425bSmrg $GREP " -> " >/dev/null; then 7812698f425bSmrg continue 7813698f425bSmrg fi 7814698f425bSmrg # The statement above tries to avoid entering an 7815698f425bSmrg # endless loop below, in case of cyclic links. 7816698f425bSmrg # We might still enter an endless loop, since a link 7817698f425bSmrg # loop can be closed while we follow links, 7818698f425bSmrg # but so what? 7819698f425bSmrg potlib="$potent_lib" 7820698f425bSmrg while test -h "$potlib" 2>/dev/null; do 7821698f425bSmrg potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` 7822698f425bSmrg case $potliblink in 7823698f425bSmrg [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; 78249ef0b394Smrg *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; 7825698f425bSmrg esac 7826698f425bSmrg done 7827698f425bSmrg if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | 7828698f425bSmrg $SED -e 10q | 7829698f425bSmrg $EGREP "$file_magic_regex" > /dev/null; then 78309ef0b394Smrg func_append newdeplibs " $a_deplib" 7831698f425bSmrg a_deplib="" 7832698f425bSmrg break 2 7833698f425bSmrg fi 7834698f425bSmrg done 7835698f425bSmrg done 7836698f425bSmrg fi 7837698f425bSmrg if test -n "$a_deplib" ; then 7838698f425bSmrg droppeddeps=yes 78399ef0b394Smrg echo 7840698f425bSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 78419ef0b394Smrg echo "*** I have the capability to make that library automatically link in when" 78429ef0b394Smrg echo "*** you link to this library. But I can only do this if you have a" 78439ef0b394Smrg echo "*** shared version of the library, which you do not appear to have" 78449ef0b394Smrg echo "*** because I did check the linker path looking for a file starting" 7845698f425bSmrg if test -z "$potlib" ; then 7846698f425bSmrg $ECHO "*** with $libname but no candidates were found. (...for file magic test)" 7847698f425bSmrg else 7848698f425bSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7849698f425bSmrg $ECHO "*** using a file magic. Last file checked: $potlib" 7850698f425bSmrg fi 7851698f425bSmrg fi 7852698f425bSmrg ;; 7853698f425bSmrg *) 7854698f425bSmrg # Add a -L argument. 78559ef0b394Smrg func_append newdeplibs " $a_deplib" 7856698f425bSmrg ;; 7857698f425bSmrg esac 7858698f425bSmrg done # Gone through all deplibs. 7859698f425bSmrg ;; 7860698f425bSmrg match_pattern*) 7861698f425bSmrg set dummy $deplibs_check_method; shift 7862698f425bSmrg match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` 7863698f425bSmrg for a_deplib in $deplibs; do 7864698f425bSmrg case $a_deplib in 7865698f425bSmrg -l*) 7866698f425bSmrg func_stripname -l '' "$a_deplib" 7867698f425bSmrg name=$func_stripname_result 7868698f425bSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7869698f425bSmrg case " $predeps $postdeps " in 7870698f425bSmrg *" $a_deplib "*) 78719ef0b394Smrg func_append newdeplibs " $a_deplib" 7872698f425bSmrg a_deplib="" 7873698f425bSmrg ;; 7874698f425bSmrg esac 7875698f425bSmrg fi 7876698f425bSmrg if test -n "$a_deplib" ; then 7877698f425bSmrg libname=`eval "\\$ECHO \"$libname_spec\""` 7878698f425bSmrg for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do 7879698f425bSmrg potential_libs=`ls $i/$libname[.-]* 2>/dev/null` 7880698f425bSmrg for potent_lib in $potential_libs; do 7881698f425bSmrg potlib="$potent_lib" # see symlink-check above in file_magic test 78829ef0b394Smrg if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ 7883698f425bSmrg $EGREP "$match_pattern_regex" > /dev/null; then 78849ef0b394Smrg func_append newdeplibs " $a_deplib" 7885698f425bSmrg a_deplib="" 7886698f425bSmrg break 2 7887698f425bSmrg fi 7888698f425bSmrg done 7889698f425bSmrg done 7890698f425bSmrg fi 7891698f425bSmrg if test -n "$a_deplib" ; then 7892698f425bSmrg droppeddeps=yes 78939ef0b394Smrg echo 7894698f425bSmrg $ECHO "*** Warning: linker path does not have real file for library $a_deplib." 78959ef0b394Smrg echo "*** I have the capability to make that library automatically link in when" 78969ef0b394Smrg echo "*** you link to this library. But I can only do this if you have a" 78979ef0b394Smrg echo "*** shared version of the library, which you do not appear to have" 78989ef0b394Smrg echo "*** because I did check the linker path looking for a file starting" 7899698f425bSmrg if test -z "$potlib" ; then 7900698f425bSmrg $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" 7901698f425bSmrg else 7902698f425bSmrg $ECHO "*** with $libname and none of the candidates passed a file format test" 7903698f425bSmrg $ECHO "*** using a regex pattern. Last file checked: $potlib" 7904698f425bSmrg fi 7905698f425bSmrg fi 7906698f425bSmrg ;; 7907698f425bSmrg *) 7908698f425bSmrg # Add a -L argument. 79099ef0b394Smrg func_append newdeplibs " $a_deplib" 7910698f425bSmrg ;; 7911698f425bSmrg esac 7912698f425bSmrg done # Gone through all deplibs. 7913698f425bSmrg ;; 7914698f425bSmrg none | unknown | *) 7915698f425bSmrg newdeplibs="" 79169ef0b394Smrg tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` 7917698f425bSmrg if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then 7918698f425bSmrg for i in $predeps $postdeps ; do 7919698f425bSmrg # can't use Xsed below, because $i might contain '/' 79209ef0b394Smrg tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` 7921698f425bSmrg done 7922698f425bSmrg fi 79239ef0b394Smrg case $tmp_deplibs in 79249ef0b394Smrg *[!\ \ ]*) 79259ef0b394Smrg echo 7926698f425bSmrg if test "X$deplibs_check_method" = "Xnone"; then 79279ef0b394Smrg echo "*** Warning: inter-library dependencies are not supported in this platform." 7928698f425bSmrg else 79299ef0b394Smrg echo "*** Warning: inter-library dependencies are not known to be supported." 7930698f425bSmrg fi 79319ef0b394Smrg echo "*** All declared inter-library dependencies are being dropped." 7932698f425bSmrg droppeddeps=yes 79339ef0b394Smrg ;; 79349ef0b394Smrg esac 7935698f425bSmrg ;; 7936698f425bSmrg esac 7937698f425bSmrg versuffix=$versuffix_save 7938698f425bSmrg major=$major_save 7939698f425bSmrg release=$release_save 7940698f425bSmrg libname=$libname_save 7941698f425bSmrg name=$name_save 7942698f425bSmrg 7943698f425bSmrg case $host in 7944698f425bSmrg *-*-rhapsody* | *-*-darwin1.[012]) 7945698f425bSmrg # On Rhapsody replace the C library with the System framework 79469ef0b394Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` 7947698f425bSmrg ;; 7948698f425bSmrg esac 7949698f425bSmrg 7950698f425bSmrg if test "$droppeddeps" = yes; then 7951698f425bSmrg if test "$module" = yes; then 79529ef0b394Smrg echo 79539ef0b394Smrg echo "*** Warning: libtool could not satisfy all declared inter-library" 7954698f425bSmrg $ECHO "*** dependencies of module $libname. Therefore, libtool will create" 79559ef0b394Smrg echo "*** a static module, that should work as long as the dlopening" 79569ef0b394Smrg echo "*** application is linked with the -dlopen flag." 7957698f425bSmrg if test -z "$global_symbol_pipe"; then 79589ef0b394Smrg echo 79599ef0b394Smrg echo "*** However, this would only work if libtool was able to extract symbol" 79609ef0b394Smrg echo "*** lists from a program, using \`nm' or equivalent, but libtool could" 79619ef0b394Smrg echo "*** not find such a program. So, this module is probably useless." 79629ef0b394Smrg echo "*** \`nm' from GNU binutils and a full rebuild may help." 7963698f425bSmrg fi 7964698f425bSmrg if test "$build_old_libs" = no; then 7965698f425bSmrg oldlibs="$output_objdir/$libname.$libext" 7966698f425bSmrg build_libtool_libs=module 7967698f425bSmrg build_old_libs=yes 7968698f425bSmrg else 7969698f425bSmrg build_libtool_libs=no 7970698f425bSmrg fi 7971698f425bSmrg else 79729ef0b394Smrg echo "*** The inter-library dependencies that have been dropped here will be" 79739ef0b394Smrg echo "*** automatically added whenever a program is linked with this library" 79749ef0b394Smrg echo "*** or is declared to -dlopen it." 7975698f425bSmrg 7976698f425bSmrg if test "$allow_undefined" = no; then 79779ef0b394Smrg echo 79789ef0b394Smrg echo "*** Since this library must not contain undefined symbols," 79799ef0b394Smrg echo "*** because either the platform does not support them or" 79809ef0b394Smrg echo "*** it was explicitly requested with -no-undefined," 79819ef0b394Smrg echo "*** libtool will only create a static version of it." 7982698f425bSmrg if test "$build_old_libs" = no; then 7983698f425bSmrg oldlibs="$output_objdir/$libname.$libext" 7984698f425bSmrg build_libtool_libs=module 7985698f425bSmrg build_old_libs=yes 7986698f425bSmrg else 7987698f425bSmrg build_libtool_libs=no 7988698f425bSmrg fi 7989698f425bSmrg fi 7990698f425bSmrg fi 7991698f425bSmrg fi 7992698f425bSmrg # Done checking deplibs! 7993698f425bSmrg deplibs=$newdeplibs 7994698f425bSmrg fi 7995698f425bSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 7996698f425bSmrg case $host in 7997698f425bSmrg *-*-darwin*) 79989ef0b394Smrg newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 79999ef0b394Smrg new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 80009ef0b394Smrg deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8001698f425bSmrg ;; 8002698f425bSmrg esac 8003698f425bSmrg 8004698f425bSmrg # move library search paths that coincide with paths to not yet 8005698f425bSmrg # installed libraries to the beginning of the library search list 8006698f425bSmrg new_libs= 8007698f425bSmrg for path in $notinst_path; do 8008698f425bSmrg case " $new_libs " in 8009698f425bSmrg *" -L$path/$objdir "*) ;; 8010698f425bSmrg *) 8011698f425bSmrg case " $deplibs " in 8012698f425bSmrg *" -L$path/$objdir "*) 80139ef0b394Smrg func_append new_libs " -L$path/$objdir" ;; 8014698f425bSmrg esac 8015698f425bSmrg ;; 8016698f425bSmrg esac 8017698f425bSmrg done 8018698f425bSmrg for deplib in $deplibs; do 8019698f425bSmrg case $deplib in 8020698f425bSmrg -L*) 8021698f425bSmrg case " $new_libs " in 8022698f425bSmrg *" $deplib "*) ;; 80239ef0b394Smrg *) func_append new_libs " $deplib" ;; 8024698f425bSmrg esac 8025698f425bSmrg ;; 80269ef0b394Smrg *) func_append new_libs " $deplib" ;; 8027698f425bSmrg esac 8028698f425bSmrg done 8029698f425bSmrg deplibs="$new_libs" 8030698f425bSmrg 8031698f425bSmrg # All the library-specific variables (install_libdir is set above). 8032698f425bSmrg library_names= 8033698f425bSmrg old_library= 8034698f425bSmrg dlname= 8035698f425bSmrg 8036698f425bSmrg # Test again, we may have decided not to build it any more 8037698f425bSmrg if test "$build_libtool_libs" = yes; then 8038fb5e8d76Smrg # Remove ${wl} instances when linking with ld. 8039fb5e8d76Smrg # FIXME: should test the right _cmds variable. 8040fb5e8d76Smrg case $archive_cmds in 8041fb5e8d76Smrg *\$LD\ *) wl= ;; 8042fb5e8d76Smrg esac 8043698f425bSmrg if test "$hardcode_into_libs" = yes; then 8044698f425bSmrg # Hardcode the library paths 8045698f425bSmrg hardcode_libdirs= 8046698f425bSmrg dep_rpath= 8047698f425bSmrg rpath="$finalize_rpath" 80489ef0b394Smrg test "$opt_mode" != relink && rpath="$compile_rpath$rpath" 8049698f425bSmrg for libdir in $rpath; do 8050698f425bSmrg if test -n "$hardcode_libdir_flag_spec"; then 8051698f425bSmrg if test -n "$hardcode_libdir_separator"; then 80529ef0b394Smrg func_replace_sysroot "$libdir" 80539ef0b394Smrg libdir=$func_replace_sysroot_result 8054698f425bSmrg if test -z "$hardcode_libdirs"; then 8055698f425bSmrg hardcode_libdirs="$libdir" 8056698f425bSmrg else 8057698f425bSmrg # Just accumulate the unique libdirs. 8058698f425bSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8059698f425bSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8060698f425bSmrg ;; 8061698f425bSmrg *) 80629ef0b394Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8063698f425bSmrg ;; 8064698f425bSmrg esac 8065698f425bSmrg fi 8066698f425bSmrg else 8067698f425bSmrg eval flag=\"$hardcode_libdir_flag_spec\" 80689ef0b394Smrg func_append dep_rpath " $flag" 8069698f425bSmrg fi 8070698f425bSmrg elif test -n "$runpath_var"; then 8071698f425bSmrg case "$perm_rpath " in 8072698f425bSmrg *" $libdir "*) ;; 8073fb5e8d76Smrg *) func_append perm_rpath " $libdir" ;; 8074698f425bSmrg esac 8075698f425bSmrg fi 8076698f425bSmrg done 8077698f425bSmrg # Substitute the hardcoded libdirs into the rpath. 8078698f425bSmrg if test -n "$hardcode_libdir_separator" && 8079698f425bSmrg test -n "$hardcode_libdirs"; then 8080698f425bSmrg libdir="$hardcode_libdirs" 8081fb5e8d76Smrg eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" 8082698f425bSmrg fi 8083698f425bSmrg if test -n "$runpath_var" && test -n "$perm_rpath"; then 8084698f425bSmrg # We should set the runpath_var. 8085698f425bSmrg rpath= 8086698f425bSmrg for dir in $perm_rpath; do 80879ef0b394Smrg func_append rpath "$dir:" 8088698f425bSmrg done 8089698f425bSmrg eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" 8090698f425bSmrg fi 8091698f425bSmrg test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" 8092698f425bSmrg fi 8093266e564dSmrg 8094698f425bSmrg shlibpath="$finalize_shlibpath" 80959ef0b394Smrg test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" 8096698f425bSmrg if test -n "$shlibpath"; then 8097698f425bSmrg eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" 8098698f425bSmrg fi 8099266e564dSmrg 8100698f425bSmrg # Get the real and link names of the library. 8101698f425bSmrg eval shared_ext=\"$shrext_cmds\" 8102698f425bSmrg eval library_names=\"$library_names_spec\" 8103698f425bSmrg set dummy $library_names 8104698f425bSmrg shift 8105698f425bSmrg realname="$1" 8106698f425bSmrg shift 8107266e564dSmrg 8108698f425bSmrg if test -n "$soname_spec"; then 8109698f425bSmrg eval soname=\"$soname_spec\" 8110698f425bSmrg else 8111698f425bSmrg soname="$realname" 8112698f425bSmrg fi 8113698f425bSmrg if test -z "$dlname"; then 8114698f425bSmrg dlname=$soname 8115698f425bSmrg fi 8116266e564dSmrg 8117698f425bSmrg lib="$output_objdir/$realname" 8118698f425bSmrg linknames= 8119698f425bSmrg for link 8120698f425bSmrg do 81219ef0b394Smrg func_append linknames " $link" 8122698f425bSmrg done 8123266e564dSmrg 8124698f425bSmrg # Use standard objects if they are pic 81259ef0b394Smrg test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` 8126698f425bSmrg test "X$libobjs" = "X " && libobjs= 8127266e564dSmrg 8128698f425bSmrg delfiles= 8129698f425bSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8130698f425bSmrg $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" 8131698f425bSmrg export_symbols="$output_objdir/$libname.uexp" 81329ef0b394Smrg func_append delfiles " $export_symbols" 8133698f425bSmrg fi 8134266e564dSmrg 8135698f425bSmrg orig_export_symbols= 8136698f425bSmrg case $host_os in 8137698f425bSmrg cygwin* | mingw* | cegcc*) 8138698f425bSmrg if test -n "$export_symbols" && test -z "$export_symbols_regex"; then 8139698f425bSmrg # exporting using user supplied symfile 8140698f425bSmrg if test "x`$SED 1q $export_symbols`" != xEXPORTS; then 8141698f425bSmrg # and it's NOT already a .def file. Must figure out 8142698f425bSmrg # which of the given symbols are data symbols and tag 8143698f425bSmrg # them as such. So, trigger use of export_symbols_cmds. 8144698f425bSmrg # export_symbols gets reassigned inside the "prepare 8145698f425bSmrg # the list of exported symbols" if statement, so the 8146698f425bSmrg # include_expsyms logic still works. 8147698f425bSmrg orig_export_symbols="$export_symbols" 8148698f425bSmrg export_symbols= 8149698f425bSmrg always_export_symbols=yes 8150698f425bSmrg fi 8151698f425bSmrg fi 8152698f425bSmrg ;; 8153698f425bSmrg esac 8154266e564dSmrg 8155698f425bSmrg # Prepare the list of exported symbols 8156698f425bSmrg if test -z "$export_symbols"; then 8157698f425bSmrg if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then 8158698f425bSmrg func_verbose "generating symbol list for \`$libname.la'" 8159698f425bSmrg export_symbols="$output_objdir/$libname.exp" 8160698f425bSmrg $opt_dry_run || $RM $export_symbols 8161698f425bSmrg cmds=$export_symbols_cmds 8162698f425bSmrg save_ifs="$IFS"; IFS='~' 81639ef0b394Smrg for cmd1 in $cmds; do 8164698f425bSmrg IFS="$save_ifs" 81659ef0b394Smrg # Take the normal branch if the nm_file_list_spec branch 81669ef0b394Smrg # doesn't work or if tool conversion is not needed. 81679ef0b394Smrg case $nm_file_list_spec~$to_tool_file_cmd in 81689ef0b394Smrg *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) 81699ef0b394Smrg try_normal_branch=yes 81709ef0b394Smrg eval cmd=\"$cmd1\" 81719ef0b394Smrg func_len " $cmd" 81729ef0b394Smrg len=$func_len_result 81739ef0b394Smrg ;; 81749ef0b394Smrg *) 81759ef0b394Smrg try_normal_branch=no 81769ef0b394Smrg ;; 81779ef0b394Smrg esac 81789ef0b394Smrg if test "$try_normal_branch" = yes \ 81799ef0b394Smrg && { test "$len" -lt "$max_cmd_len" \ 81809ef0b394Smrg || test "$max_cmd_len" -le -1; } 81819ef0b394Smrg then 81829ef0b394Smrg func_show_eval "$cmd" 'exit $?' 81839ef0b394Smrg skipped_export=false 81849ef0b394Smrg elif test -n "$nm_file_list_spec"; then 81859ef0b394Smrg func_basename "$output" 81869ef0b394Smrg output_la=$func_basename_result 81879ef0b394Smrg save_libobjs=$libobjs 81889ef0b394Smrg save_output=$output 81899ef0b394Smrg output=${output_objdir}/${output_la}.nm 81909ef0b394Smrg func_to_tool_file "$output" 81919ef0b394Smrg libobjs=$nm_file_list_spec$func_to_tool_file_result 81929ef0b394Smrg func_append delfiles " $output" 81939ef0b394Smrg func_verbose "creating $NM input file list: $output" 81949ef0b394Smrg for obj in $save_libobjs; do 81959ef0b394Smrg func_to_tool_file "$obj" 81969ef0b394Smrg $ECHO "$func_to_tool_file_result" 81979ef0b394Smrg done > "$output" 81989ef0b394Smrg eval cmd=\"$cmd1\" 8199698f425bSmrg func_show_eval "$cmd" 'exit $?' 82009ef0b394Smrg output=$save_output 82019ef0b394Smrg libobjs=$save_libobjs 8202698f425bSmrg skipped_export=false 8203698f425bSmrg else 8204698f425bSmrg # The command line is too long to execute in one step. 8205698f425bSmrg func_verbose "using reloadable object file for export list..." 8206698f425bSmrg skipped_export=: 8207698f425bSmrg # Break out early, otherwise skipped_export may be 8208698f425bSmrg # set to false by a later but shorter cmd. 8209698f425bSmrg break 8210698f425bSmrg fi 8211698f425bSmrg done 8212698f425bSmrg IFS="$save_ifs" 8213698f425bSmrg if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then 8214698f425bSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8215698f425bSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8216698f425bSmrg fi 8217698f425bSmrg fi 8218266e564dSmrg fi 8219266e564dSmrg 8220698f425bSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8221698f425bSmrg tmp_export_symbols="$export_symbols" 8222698f425bSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 82239ef0b394Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8224698f425bSmrg fi 8225266e564dSmrg 8226698f425bSmrg if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then 8227698f425bSmrg # The given exports_symbols file has to be filtered, so filter it. 8228698f425bSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8229698f425bSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 8230698f425bSmrg # 's' commands which not all seds can handle. GNU sed should be fine 8231698f425bSmrg # though. Also, the filter scales superlinearly with the number of 8232698f425bSmrg # global variables. join(1) would be nice here, but unfortunately 8233698f425bSmrg # isn't a blessed tool. 8234698f425bSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 82359ef0b394Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8236698f425bSmrg export_symbols=$output_objdir/$libname.def 8237698f425bSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8238698f425bSmrg fi 8239266e564dSmrg 8240698f425bSmrg tmp_deplibs= 8241698f425bSmrg for test_deplib in $deplibs; do 8242698f425bSmrg case " $convenience " in 8243698f425bSmrg *" $test_deplib "*) ;; 8244698f425bSmrg *) 82459ef0b394Smrg func_append tmp_deplibs " $test_deplib" 8246698f425bSmrg ;; 8247698f425bSmrg esac 8248698f425bSmrg done 8249698f425bSmrg deplibs="$tmp_deplibs" 8250266e564dSmrg 8251698f425bSmrg if test -n "$convenience"; then 8252698f425bSmrg if test -n "$whole_archive_flag_spec" && 8253698f425bSmrg test "$compiler_needs_object" = yes && 8254698f425bSmrg test -z "$libobjs"; then 8255698f425bSmrg # extract the archives, so we have objects to list. 8256698f425bSmrg # TODO: could optimize this to just extract one archive. 8257698f425bSmrg whole_archive_flag_spec= 8258698f425bSmrg fi 8259698f425bSmrg if test -n "$whole_archive_flag_spec"; then 8260698f425bSmrg save_libobjs=$libobjs 8261698f425bSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8262698f425bSmrg test "X$libobjs" = "X " && libobjs= 8263698f425bSmrg else 8264698f425bSmrg gentop="$output_objdir/${outputname}x" 82659ef0b394Smrg func_append generated " $gentop" 8266266e564dSmrg 8267698f425bSmrg func_extract_archives $gentop $convenience 82689ef0b394Smrg func_append libobjs " $func_extract_archives_result" 8269698f425bSmrg test "X$libobjs" = "X " && libobjs= 8270698f425bSmrg fi 8271266e564dSmrg fi 8272266e564dSmrg 8273698f425bSmrg if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then 8274698f425bSmrg eval flag=\"$thread_safe_flag_spec\" 82759ef0b394Smrg func_append linker_flags " $flag" 8276266e564dSmrg fi 8277266e564dSmrg 8278698f425bSmrg # Make a backup of the uninstalled library when relinking 82799ef0b394Smrg if test "$opt_mode" = relink; then 8280698f425bSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? 8281698f425bSmrg fi 8282266e564dSmrg 8283698f425bSmrg # Do each of the archive commands. 8284698f425bSmrg if test "$module" = yes && test -n "$module_cmds" ; then 8285698f425bSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8286698f425bSmrg eval test_cmds=\"$module_expsym_cmds\" 8287698f425bSmrg cmds=$module_expsym_cmds 8288698f425bSmrg else 8289698f425bSmrg eval test_cmds=\"$module_cmds\" 8290698f425bSmrg cmds=$module_cmds 8291698f425bSmrg fi 8292266e564dSmrg else 8293698f425bSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8294698f425bSmrg eval test_cmds=\"$archive_expsym_cmds\" 8295698f425bSmrg cmds=$archive_expsym_cmds 8296698f425bSmrg else 8297698f425bSmrg eval test_cmds=\"$archive_cmds\" 8298698f425bSmrg cmds=$archive_cmds 8299698f425bSmrg fi 8300266e564dSmrg fi 8301266e564dSmrg 8302698f425bSmrg if test "X$skipped_export" != "X:" && 8303698f425bSmrg func_len " $test_cmds" && 8304698f425bSmrg len=$func_len_result && 8305698f425bSmrg test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 8306698f425bSmrg : 8307698f425bSmrg else 8308698f425bSmrg # The command line is too long to link in one step, link piecewise 8309698f425bSmrg # or, if using GNU ld and skipped_export is not :, use a linker 8310698f425bSmrg # script. 8311266e564dSmrg 8312698f425bSmrg # Save the value of $output and $libobjs because we want to 8313698f425bSmrg # use them later. If we have whole_archive_flag_spec, we 8314698f425bSmrg # want to use save_libobjs as it was before 8315698f425bSmrg # whole_archive_flag_spec was expanded, because we can't 8316698f425bSmrg # assume the linker understands whole_archive_flag_spec. 8317698f425bSmrg # This may have to be revisited, in case too many 8318698f425bSmrg # convenience libraries get linked in and end up exceeding 8319698f425bSmrg # the spec. 8320698f425bSmrg if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then 8321698f425bSmrg save_libobjs=$libobjs 8322698f425bSmrg fi 8323698f425bSmrg save_output=$output 83249ef0b394Smrg func_basename "$output" 83259ef0b394Smrg output_la=$func_basename_result 8326266e564dSmrg 8327698f425bSmrg # Clear the reloadable object creation command queue and 8328698f425bSmrg # initialize k to one. 8329698f425bSmrg test_cmds= 8330698f425bSmrg concat_cmds= 8331698f425bSmrg objlist= 8332698f425bSmrg last_robj= 8333698f425bSmrg k=1 8334698f425bSmrg 8335698f425bSmrg if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then 8336698f425bSmrg output=${output_objdir}/${output_la}.lnkscript 8337698f425bSmrg func_verbose "creating GNU ld script: $output" 83389ef0b394Smrg echo 'INPUT (' > $output 8339698f425bSmrg for obj in $save_libobjs 8340266e564dSmrg do 83419ef0b394Smrg func_to_tool_file "$obj" 83429ef0b394Smrg $ECHO "$func_to_tool_file_result" >> $output 8343698f425bSmrg done 83449ef0b394Smrg echo ')' >> $output 83459ef0b394Smrg func_append delfiles " $output" 83469ef0b394Smrg func_to_tool_file "$output" 83479ef0b394Smrg output=$func_to_tool_file_result 8348698f425bSmrg elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then 8349698f425bSmrg output=${output_objdir}/${output_la}.lnk 8350698f425bSmrg func_verbose "creating linker input file list: $output" 8351698f425bSmrg : > $output 8352698f425bSmrg set x $save_libobjs 8353698f425bSmrg shift 8354698f425bSmrg firstobj= 8355698f425bSmrg if test "$compiler_needs_object" = yes; then 8356698f425bSmrg firstobj="$1 " 8357698f425bSmrg shift 8358698f425bSmrg fi 8359698f425bSmrg for obj 8360698f425bSmrg do 83619ef0b394Smrg func_to_tool_file "$obj" 83629ef0b394Smrg $ECHO "$func_to_tool_file_result" >> $output 8363698f425bSmrg done 83649ef0b394Smrg func_append delfiles " $output" 83659ef0b394Smrg func_to_tool_file "$output" 83669ef0b394Smrg output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 8367698f425bSmrg else 8368698f425bSmrg if test -n "$save_libobjs"; then 8369698f425bSmrg func_verbose "creating reloadable object files..." 8370698f425bSmrg output=$output_objdir/$output_la-${k}.$objext 8371698f425bSmrg eval test_cmds=\"$reload_cmds\" 8372698f425bSmrg func_len " $test_cmds" 8373698f425bSmrg len0=$func_len_result 8374698f425bSmrg len=$len0 8375698f425bSmrg 8376698f425bSmrg # Loop over the list of objects to be linked. 8377698f425bSmrg for obj in $save_libobjs 8378698f425bSmrg do 8379698f425bSmrg func_len " $obj" 8380698f425bSmrg func_arith $len + $func_len_result 8381698f425bSmrg len=$func_arith_result 8382698f425bSmrg if test "X$objlist" = X || 8383698f425bSmrg test "$len" -lt "$max_cmd_len"; then 8384698f425bSmrg func_append objlist " $obj" 8385698f425bSmrg else 8386698f425bSmrg # The command $test_cmds is almost too long, add a 8387698f425bSmrg # command to the queue. 8388698f425bSmrg if test "$k" -eq 1 ; then 8389698f425bSmrg # The first file doesn't have a previous command to add. 83909ef0b394Smrg reload_objs=$objlist 83919ef0b394Smrg eval concat_cmds=\"$reload_cmds\" 8392698f425bSmrg else 8393698f425bSmrg # All subsequent reloadable object files will link in 8394698f425bSmrg # the last one created. 83959ef0b394Smrg reload_objs="$objlist $last_robj" 83969ef0b394Smrg eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" 8397698f425bSmrg fi 8398698f425bSmrg last_robj=$output_objdir/$output_la-${k}.$objext 8399698f425bSmrg func_arith $k + 1 8400698f425bSmrg k=$func_arith_result 8401698f425bSmrg output=$output_objdir/$output_la-${k}.$objext 84029ef0b394Smrg objlist=" $obj" 8403698f425bSmrg func_len " $last_robj" 8404698f425bSmrg func_arith $len0 + $func_len_result 8405698f425bSmrg len=$func_arith_result 8406698f425bSmrg fi 8407698f425bSmrg done 8408698f425bSmrg # Handle the remaining objects by creating one last 8409698f425bSmrg # reloadable object file. All subsequent reloadable object 8410698f425bSmrg # files will link in the last one created. 8411698f425bSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 84129ef0b394Smrg reload_objs="$objlist $last_robj" 84139ef0b394Smrg eval concat_cmds=\"\${concat_cmds}$reload_cmds\" 8414698f425bSmrg if test -n "$last_robj"; then 8415698f425bSmrg eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" 8416698f425bSmrg fi 84179ef0b394Smrg func_append delfiles " $output" 8418266e564dSmrg 8419698f425bSmrg else 8420698f425bSmrg output= 8421698f425bSmrg fi 8422266e564dSmrg 8423698f425bSmrg if ${skipped_export-false}; then 8424698f425bSmrg func_verbose "generating symbol list for \`$libname.la'" 8425698f425bSmrg export_symbols="$output_objdir/$libname.exp" 8426698f425bSmrg $opt_dry_run || $RM $export_symbols 8427698f425bSmrg libobjs=$output 8428698f425bSmrg # Append the command to create the export file. 8429698f425bSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 8430698f425bSmrg eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" 8431698f425bSmrg if test -n "$last_robj"; then 8432698f425bSmrg eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" 8433698f425bSmrg fi 8434266e564dSmrg fi 8435266e564dSmrg 8436698f425bSmrg test -n "$save_libobjs" && 8437698f425bSmrg func_verbose "creating a temporary reloadable object file: $output" 8438266e564dSmrg 8439698f425bSmrg # Loop through the commands generated above and execute them. 8440698f425bSmrg save_ifs="$IFS"; IFS='~' 8441698f425bSmrg for cmd in $concat_cmds; do 8442698f425bSmrg IFS="$save_ifs" 8443698f425bSmrg $opt_silent || { 8444698f425bSmrg func_quote_for_expand "$cmd" 8445698f425bSmrg eval "func_echo $func_quote_for_expand_result" 8446698f425bSmrg } 8447698f425bSmrg $opt_dry_run || eval "$cmd" || { 8448698f425bSmrg lt_exit=$? 8449698f425bSmrg 8450698f425bSmrg # Restore the uninstalled library and exit 84519ef0b394Smrg if test "$opt_mode" = relink; then 8452698f425bSmrg ( cd "$output_objdir" && \ 8453698f425bSmrg $RM "${realname}T" && \ 8454698f425bSmrg $MV "${realname}U" "$realname" ) 8455698f425bSmrg fi 8456266e564dSmrg 8457698f425bSmrg exit $lt_exit 8458698f425bSmrg } 8459698f425bSmrg done 8460698f425bSmrg IFS="$save_ifs" 8461266e564dSmrg 8462698f425bSmrg if test -n "$export_symbols_regex" && ${skipped_export-false}; then 8463698f425bSmrg func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' 8464698f425bSmrg func_show_eval '$MV "${export_symbols}T" "$export_symbols"' 8465266e564dSmrg fi 8466266e564dSmrg fi 8467266e564dSmrg 8468698f425bSmrg if ${skipped_export-false}; then 8469698f425bSmrg if test -n "$export_symbols" && test -n "$include_expsyms"; then 8470698f425bSmrg tmp_export_symbols="$export_symbols" 8471698f425bSmrg test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" 84729ef0b394Smrg $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' 8473698f425bSmrg fi 8474266e564dSmrg 8475698f425bSmrg if test -n "$orig_export_symbols"; then 8476698f425bSmrg # The given exports_symbols file has to be filtered, so filter it. 8477698f425bSmrg func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" 8478698f425bSmrg # FIXME: $output_objdir/$libname.filter potentially contains lots of 8479698f425bSmrg # 's' commands which not all seds can handle. GNU sed should be fine 8480698f425bSmrg # though. Also, the filter scales superlinearly with the number of 8481698f425bSmrg # global variables. join(1) would be nice here, but unfortunately 8482698f425bSmrg # isn't a blessed tool. 8483698f425bSmrg $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter 84849ef0b394Smrg func_append delfiles " $export_symbols $output_objdir/$libname.filter" 8485698f425bSmrg export_symbols=$output_objdir/$libname.def 8486698f425bSmrg $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols 8487698f425bSmrg fi 8488698f425bSmrg fi 8489266e564dSmrg 8490698f425bSmrg libobjs=$output 8491698f425bSmrg # Restore the value of output. 8492698f425bSmrg output=$save_output 8493266e564dSmrg 8494698f425bSmrg if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then 8495698f425bSmrg eval libobjs=\"\$libobjs $whole_archive_flag_spec\" 8496698f425bSmrg test "X$libobjs" = "X " && libobjs= 8497698f425bSmrg fi 8498698f425bSmrg # Expand the library linking commands again to reset the 8499698f425bSmrg # value of $libobjs for piecewise linking. 8500266e564dSmrg 8501698f425bSmrg # Do each of the archive commands. 8502698f425bSmrg if test "$module" = yes && test -n "$module_cmds" ; then 8503698f425bSmrg if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then 8504698f425bSmrg cmds=$module_expsym_cmds 8505698f425bSmrg else 8506698f425bSmrg cmds=$module_cmds 8507266e564dSmrg fi 8508266e564dSmrg else 8509698f425bSmrg if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then 8510698f425bSmrg cmds=$archive_expsym_cmds 8511698f425bSmrg else 8512698f425bSmrg cmds=$archive_cmds 8513698f425bSmrg fi 8514266e564dSmrg fi 8515698f425bSmrg fi 8516266e564dSmrg 8517698f425bSmrg if test -n "$delfiles"; then 8518698f425bSmrg # Append the command to remove temporary files to $cmds. 8519698f425bSmrg eval cmds=\"\$cmds~\$RM $delfiles\" 8520698f425bSmrg fi 8521266e564dSmrg 8522698f425bSmrg # Add any objects from preloaded convenience libraries 8523698f425bSmrg if test -n "$dlprefiles"; then 8524698f425bSmrg gentop="$output_objdir/${outputname}x" 85259ef0b394Smrg func_append generated " $gentop" 8526266e564dSmrg 8527698f425bSmrg func_extract_archives $gentop $dlprefiles 85289ef0b394Smrg func_append libobjs " $func_extract_archives_result" 8529698f425bSmrg test "X$libobjs" = "X " && libobjs= 8530698f425bSmrg fi 8531266e564dSmrg 8532698f425bSmrg save_ifs="$IFS"; IFS='~' 8533698f425bSmrg for cmd in $cmds; do 8534698f425bSmrg IFS="$save_ifs" 8535698f425bSmrg eval cmd=\"$cmd\" 8536698f425bSmrg $opt_silent || { 8537698f425bSmrg func_quote_for_expand "$cmd" 8538698f425bSmrg eval "func_echo $func_quote_for_expand_result" 8539698f425bSmrg } 8540698f425bSmrg $opt_dry_run || eval "$cmd" || { 8541698f425bSmrg lt_exit=$? 8542266e564dSmrg 8543698f425bSmrg # Restore the uninstalled library and exit 85449ef0b394Smrg if test "$opt_mode" = relink; then 8545698f425bSmrg ( cd "$output_objdir" && \ 8546698f425bSmrg $RM "${realname}T" && \ 8547698f425bSmrg $MV "${realname}U" "$realname" ) 8548698f425bSmrg fi 8549266e564dSmrg 8550698f425bSmrg exit $lt_exit 8551698f425bSmrg } 8552698f425bSmrg done 8553698f425bSmrg IFS="$save_ifs" 8554266e564dSmrg 8555698f425bSmrg # Restore the uninstalled library and exit 85569ef0b394Smrg if test "$opt_mode" = relink; then 8557698f425bSmrg $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? 8558266e564dSmrg 8559698f425bSmrg if test -n "$convenience"; then 8560698f425bSmrg if test -z "$whole_archive_flag_spec"; then 8561698f425bSmrg func_show_eval '${RM}r "$gentop"' 8562698f425bSmrg fi 8563698f425bSmrg fi 8564266e564dSmrg 8565698f425bSmrg exit $EXIT_SUCCESS 8566698f425bSmrg fi 8567698f425bSmrg 8568698f425bSmrg # Create links to the real library. 8569698f425bSmrg for linkname in $linknames; do 8570698f425bSmrg if test "$realname" != "$linkname"; then 8571698f425bSmrg func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' 8572266e564dSmrg fi 8573266e564dSmrg done 8574266e564dSmrg 8575698f425bSmrg # If -module or -export-dynamic was specified, set the dlname. 8576698f425bSmrg if test "$module" = yes || test "$export_dynamic" = yes; then 8577698f425bSmrg # On all known operating systems, these are identical. 8578698f425bSmrg dlname="$soname" 8579698f425bSmrg fi 8580698f425bSmrg fi 8581266e564dSmrg ;; 8582266e564dSmrg 8583698f425bSmrg obj) 8584698f425bSmrg if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then 8585698f425bSmrg func_warning "\`-dlopen' is ignored for objects" 8586698f425bSmrg fi 8587266e564dSmrg 8588698f425bSmrg case " $deplibs" in 8589698f425bSmrg *\ -l* | *\ -L*) 8590698f425bSmrg func_warning "\`-l' and \`-L' are ignored for objects" ;; 8591266e564dSmrg esac 8592266e564dSmrg 8593698f425bSmrg test -n "$rpath" && \ 8594698f425bSmrg func_warning "\`-rpath' is ignored for objects" 8595698f425bSmrg 8596698f425bSmrg test -n "$xrpath" && \ 8597698f425bSmrg func_warning "\`-R' is ignored for objects" 8598266e564dSmrg 8599698f425bSmrg test -n "$vinfo" && \ 8600698f425bSmrg func_warning "\`-version-info' is ignored for objects" 8601266e564dSmrg 8602698f425bSmrg test -n "$release" && \ 8603698f425bSmrg func_warning "\`-release' is ignored for objects" 8604698f425bSmrg 8605698f425bSmrg case $output in 8606698f425bSmrg *.lo) 8607698f425bSmrg test -n "$objs$old_deplibs" && \ 8608698f425bSmrg func_fatal_error "cannot build library object \`$output' from non-libtool objects" 8609698f425bSmrg 8610698f425bSmrg libobj=$output 8611698f425bSmrg func_lo2o "$libobj" 8612698f425bSmrg obj=$func_lo2o_result 8613266e564dSmrg ;; 8614266e564dSmrg *) 8615698f425bSmrg libobj= 8616698f425bSmrg obj="$output" 8617266e564dSmrg ;; 8618266e564dSmrg esac 8619266e564dSmrg 8620698f425bSmrg # Delete the old objects. 8621698f425bSmrg $opt_dry_run || $RM $obj $libobj 8622266e564dSmrg 8623698f425bSmrg # Objects from convenience libraries. This assumes 8624698f425bSmrg # single-version convenience libraries. Whenever we create 8625698f425bSmrg # different ones for PIC/non-PIC, this we'll have to duplicate 8626698f425bSmrg # the extraction. 8627698f425bSmrg reload_conv_objs= 8628698f425bSmrg gentop= 8629698f425bSmrg # reload_cmds runs $LD directly, so let us get rid of 8630698f425bSmrg # -Wl from whole_archive_flag_spec and hope we can get by with 8631698f425bSmrg # turning comma into space.. 8632698f425bSmrg wl= 8633266e564dSmrg 8634698f425bSmrg if test -n "$convenience"; then 8635698f425bSmrg if test -n "$whole_archive_flag_spec"; then 8636698f425bSmrg eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" 86379ef0b394Smrg reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` 8638698f425bSmrg else 8639698f425bSmrg gentop="$output_objdir/${obj}x" 86409ef0b394Smrg func_append generated " $gentop" 8641266e564dSmrg 8642698f425bSmrg func_extract_archives $gentop $convenience 8643698f425bSmrg reload_conv_objs="$reload_objs $func_extract_archives_result" 8644698f425bSmrg fi 8645266e564dSmrg fi 8646266e564dSmrg 86479ef0b394Smrg # If we're not building shared, we need to use non_pic_objs 86489ef0b394Smrg test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" 86499ef0b394Smrg 8650698f425bSmrg # Create the old-style object. 86519ef0b394Smrg reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test 8652266e564dSmrg 8653698f425bSmrg output="$obj" 8654698f425bSmrg func_execute_cmds "$reload_cmds" 'exit $?' 8655266e564dSmrg 8656698f425bSmrg # Exit if we aren't doing a library object file. 8657698f425bSmrg if test -z "$libobj"; then 8658698f425bSmrg if test -n "$gentop"; then 8659698f425bSmrg func_show_eval '${RM}r "$gentop"' 8660698f425bSmrg fi 8661698f425bSmrg 8662698f425bSmrg exit $EXIT_SUCCESS 8663266e564dSmrg fi 8664698f425bSmrg 8665698f425bSmrg if test "$build_libtool_libs" != yes; then 8666698f425bSmrg if test -n "$gentop"; then 8667698f425bSmrg func_show_eval '${RM}r "$gentop"' 8668698f425bSmrg fi 8669698f425bSmrg 8670698f425bSmrg # Create an invalid libtool object if no PIC, so that we don't 8671698f425bSmrg # accidentally link it into a program. 8672698f425bSmrg # $show "echo timestamp > $libobj" 8673698f425bSmrg # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? 8674698f425bSmrg exit $EXIT_SUCCESS 8675698f425bSmrg fi 8676698f425bSmrg 8677698f425bSmrg if test -n "$pic_flag" || test "$pic_mode" != default; then 8678698f425bSmrg # Only do commands if we really have different PIC objects. 8679698f425bSmrg reload_objs="$libobjs $reload_conv_objs" 8680698f425bSmrg output="$libobj" 8681698f425bSmrg func_execute_cmds "$reload_cmds" 'exit $?' 8682698f425bSmrg fi 8683698f425bSmrg 8684698f425bSmrg if test -n "$gentop"; then 8685698f425bSmrg func_show_eval '${RM}r "$gentop"' 8686698f425bSmrg fi 8687698f425bSmrg 8688698f425bSmrg exit $EXIT_SUCCESS 8689266e564dSmrg ;; 8690266e564dSmrg 8691698f425bSmrg prog) 8692698f425bSmrg case $host in 8693698f425bSmrg *cygwin*) func_stripname '' '.exe' "$output" 8694698f425bSmrg output=$func_stripname_result.exe;; 8695698f425bSmrg esac 8696698f425bSmrg test -n "$vinfo" && \ 8697698f425bSmrg func_warning "\`-version-info' is ignored for programs" 8698266e564dSmrg 8699698f425bSmrg test -n "$release" && \ 8700698f425bSmrg func_warning "\`-release' is ignored for programs" 8701266e564dSmrg 8702698f425bSmrg test "$preload" = yes \ 8703698f425bSmrg && test "$dlopen_support" = unknown \ 8704698f425bSmrg && test "$dlopen_self" = unknown \ 8705698f425bSmrg && test "$dlopen_self_static" = unknown && \ 8706698f425bSmrg func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." 8707698f425bSmrg 8708698f425bSmrg case $host in 8709698f425bSmrg *-*-rhapsody* | *-*-darwin1.[012]) 8710698f425bSmrg # On Rhapsody replace the C library is the System framework 87119ef0b394Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` 87129ef0b394Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` 8713266e564dSmrg ;; 8714698f425bSmrg esac 8715266e564dSmrg 8716698f425bSmrg case $host in 8717698f425bSmrg *-*-darwin*) 8718698f425bSmrg # Don't allow lazy linking, it breaks C++ global constructors 8719698f425bSmrg # But is supposedly fixed on 10.4 or later (yay!). 8720698f425bSmrg if test "$tagname" = CXX ; then 8721698f425bSmrg case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 8722698f425bSmrg 10.[0123]) 87239ef0b394Smrg func_append compile_command " ${wl}-bind_at_load" 87249ef0b394Smrg func_append finalize_command " ${wl}-bind_at_load" 8725698f425bSmrg ;; 8726698f425bSmrg esac 8727266e564dSmrg fi 8728698f425bSmrg # Time to change all our "foo.ltframework" stuff back to "-framework foo" 87299ef0b394Smrg compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 87309ef0b394Smrg finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` 8731698f425bSmrg ;; 8732698f425bSmrg esac 8733266e564dSmrg 8734266e564dSmrg 8735698f425bSmrg # move library search paths that coincide with paths to not yet 8736698f425bSmrg # installed libraries to the beginning of the library search list 8737698f425bSmrg new_libs= 8738698f425bSmrg for path in $notinst_path; do 8739698f425bSmrg case " $new_libs " in 8740698f425bSmrg *" -L$path/$objdir "*) ;; 8741698f425bSmrg *) 8742698f425bSmrg case " $compile_deplibs " in 8743698f425bSmrg *" -L$path/$objdir "*) 87449ef0b394Smrg func_append new_libs " -L$path/$objdir" ;; 8745266e564dSmrg esac 8746698f425bSmrg ;; 8747698f425bSmrg esac 8748698f425bSmrg done 8749698f425bSmrg for deplib in $compile_deplibs; do 8750698f425bSmrg case $deplib in 8751698f425bSmrg -L*) 8752698f425bSmrg case " $new_libs " in 8753698f425bSmrg *" $deplib "*) ;; 87549ef0b394Smrg *) func_append new_libs " $deplib" ;; 8755266e564dSmrg esac 8756698f425bSmrg ;; 87579ef0b394Smrg *) func_append new_libs " $deplib" ;; 8758698f425bSmrg esac 8759698f425bSmrg done 8760698f425bSmrg compile_deplibs="$new_libs" 8761266e564dSmrg 8762266e564dSmrg 87639ef0b394Smrg func_append compile_command " $compile_deplibs" 87649ef0b394Smrg func_append finalize_command " $finalize_deplibs" 8765266e564dSmrg 8766698f425bSmrg if test -n "$rpath$xrpath"; then 8767698f425bSmrg # If the user specified any rpath flags, then add them. 8768698f425bSmrg for libdir in $rpath $xrpath; do 8769698f425bSmrg # This is the magic to use -rpath. 8770698f425bSmrg case "$finalize_rpath " in 8771698f425bSmrg *" $libdir "*) ;; 87729ef0b394Smrg *) func_append finalize_rpath " $libdir" ;; 8773698f425bSmrg esac 8774698f425bSmrg done 8775698f425bSmrg fi 8776266e564dSmrg 8777698f425bSmrg # Now hardcode the library paths 8778698f425bSmrg rpath= 8779698f425bSmrg hardcode_libdirs= 8780698f425bSmrg for libdir in $compile_rpath $finalize_rpath; do 8781698f425bSmrg if test -n "$hardcode_libdir_flag_spec"; then 8782698f425bSmrg if test -n "$hardcode_libdir_separator"; then 8783698f425bSmrg if test -z "$hardcode_libdirs"; then 8784698f425bSmrg hardcode_libdirs="$libdir" 8785698f425bSmrg else 8786698f425bSmrg # Just accumulate the unique libdirs. 8787698f425bSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8788698f425bSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8789698f425bSmrg ;; 8790698f425bSmrg *) 87919ef0b394Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8792698f425bSmrg ;; 8793698f425bSmrg esac 8794698f425bSmrg fi 8795266e564dSmrg else 8796698f425bSmrg eval flag=\"$hardcode_libdir_flag_spec\" 87979ef0b394Smrg func_append rpath " $flag" 8798266e564dSmrg fi 8799698f425bSmrg elif test -n "$runpath_var"; then 8800698f425bSmrg case "$perm_rpath " in 8801698f425bSmrg *" $libdir "*) ;; 88029ef0b394Smrg *) func_append perm_rpath " $libdir" ;; 8803698f425bSmrg esac 8804698f425bSmrg fi 8805698f425bSmrg case $host in 8806698f425bSmrg *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) 8807698f425bSmrg testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` 8808698f425bSmrg case :$dllsearchpath: in 8809698f425bSmrg *":$libdir:"*) ;; 8810698f425bSmrg ::) dllsearchpath=$libdir;; 88119ef0b394Smrg *) func_append dllsearchpath ":$libdir";; 8812698f425bSmrg esac 8813698f425bSmrg case :$dllsearchpath: in 8814698f425bSmrg *":$testbindir:"*) ;; 8815698f425bSmrg ::) dllsearchpath=$testbindir;; 88169ef0b394Smrg *) func_append dllsearchpath ":$testbindir";; 8817698f425bSmrg esac 8818698f425bSmrg ;; 8819698f425bSmrg esac 8820698f425bSmrg done 8821698f425bSmrg # Substitute the hardcoded libdirs into the rpath. 8822698f425bSmrg if test -n "$hardcode_libdir_separator" && 8823698f425bSmrg test -n "$hardcode_libdirs"; then 8824698f425bSmrg libdir="$hardcode_libdirs" 8825698f425bSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 8826698f425bSmrg fi 8827698f425bSmrg compile_rpath="$rpath" 8828266e564dSmrg 8829698f425bSmrg rpath= 8830698f425bSmrg hardcode_libdirs= 8831698f425bSmrg for libdir in $finalize_rpath; do 8832698f425bSmrg if test -n "$hardcode_libdir_flag_spec"; then 8833698f425bSmrg if test -n "$hardcode_libdir_separator"; then 8834698f425bSmrg if test -z "$hardcode_libdirs"; then 8835698f425bSmrg hardcode_libdirs="$libdir" 8836698f425bSmrg else 8837698f425bSmrg # Just accumulate the unique libdirs. 8838698f425bSmrg case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in 8839698f425bSmrg *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) 8840698f425bSmrg ;; 8841698f425bSmrg *) 88429ef0b394Smrg func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" 8843698f425bSmrg ;; 8844698f425bSmrg esac 8845698f425bSmrg fi 8846266e564dSmrg else 8847698f425bSmrg eval flag=\"$hardcode_libdir_flag_spec\" 88489ef0b394Smrg func_append rpath " $flag" 8849266e564dSmrg fi 8850698f425bSmrg elif test -n "$runpath_var"; then 8851698f425bSmrg case "$finalize_perm_rpath " in 8852698f425bSmrg *" $libdir "*) ;; 88539ef0b394Smrg *) func_append finalize_perm_rpath " $libdir" ;; 8854698f425bSmrg esac 8855266e564dSmrg fi 8856698f425bSmrg done 8857698f425bSmrg # Substitute the hardcoded libdirs into the rpath. 8858698f425bSmrg if test -n "$hardcode_libdir_separator" && 8859698f425bSmrg test -n "$hardcode_libdirs"; then 8860698f425bSmrg libdir="$hardcode_libdirs" 8861698f425bSmrg eval rpath=\" $hardcode_libdir_flag_spec\" 8862698f425bSmrg fi 8863698f425bSmrg finalize_rpath="$rpath" 8864266e564dSmrg 8865698f425bSmrg if test -n "$libobjs" && test "$build_old_libs" = yes; then 8866698f425bSmrg # Transform all the library objects into standard objects. 88679ef0b394Smrg compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 88689ef0b394Smrg finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` 8869698f425bSmrg fi 8870266e564dSmrg 8871698f425bSmrg func_generate_dlsyms "$outputname" "@PROGRAM@" "no" 8872266e564dSmrg 8873698f425bSmrg # template prelinking step 8874698f425bSmrg if test -n "$prelink_cmds"; then 8875698f425bSmrg func_execute_cmds "$prelink_cmds" 'exit $?' 8876698f425bSmrg fi 8877266e564dSmrg 8878698f425bSmrg wrappers_required=yes 8879698f425bSmrg case $host in 88809ef0b394Smrg *cegcc* | *mingw32ce*) 88819ef0b394Smrg # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. 88829ef0b394Smrg wrappers_required=no 88839ef0b394Smrg ;; 8884698f425bSmrg *cygwin* | *mingw* ) 8885698f425bSmrg if test "$build_libtool_libs" != yes; then 8886698f425bSmrg wrappers_required=no 8887698f425bSmrg fi 8888698f425bSmrg ;; 8889698f425bSmrg *) 8890698f425bSmrg if test "$need_relink" = no || test "$build_libtool_libs" != yes; then 8891698f425bSmrg wrappers_required=no 8892698f425bSmrg fi 8893698f425bSmrg ;; 8894698f425bSmrg esac 8895698f425bSmrg if test "$wrappers_required" = no; then 8896698f425bSmrg # Replace the output file specification. 88979ef0b394Smrg compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8898698f425bSmrg link_command="$compile_command$compile_rpath" 8899266e564dSmrg 8900698f425bSmrg # We have no uninstalled library dependencies, so finalize right now. 8901698f425bSmrg exit_status=0 8902698f425bSmrg func_show_eval "$link_command" 'exit_status=$?' 8903266e564dSmrg 89049ef0b394Smrg if test -n "$postlink_cmds"; then 89059ef0b394Smrg func_to_tool_file "$output" 89069ef0b394Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 89079ef0b394Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 89089ef0b394Smrg fi 89099ef0b394Smrg 8910698f425bSmrg # Delete the generated files. 8911698f425bSmrg if test -f "$output_objdir/${outputname}S.${objext}"; then 8912698f425bSmrg func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' 8913266e564dSmrg fi 8914266e564dSmrg 8915698f425bSmrg exit $exit_status 8916698f425bSmrg fi 8917266e564dSmrg 8918698f425bSmrg if test -n "$compile_shlibpath$finalize_shlibpath"; then 8919698f425bSmrg compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" 8920698f425bSmrg fi 8921698f425bSmrg if test -n "$finalize_shlibpath"; then 8922698f425bSmrg finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" 8923698f425bSmrg fi 8924266e564dSmrg 8925698f425bSmrg compile_var= 8926698f425bSmrg finalize_var= 8927698f425bSmrg if test -n "$runpath_var"; then 8928698f425bSmrg if test -n "$perm_rpath"; then 8929698f425bSmrg # We should set the runpath_var. 8930698f425bSmrg rpath= 8931698f425bSmrg for dir in $perm_rpath; do 89329ef0b394Smrg func_append rpath "$dir:" 8933698f425bSmrg done 8934698f425bSmrg compile_var="$runpath_var=\"$rpath\$$runpath_var\" " 8935266e564dSmrg fi 8936698f425bSmrg if test -n "$finalize_perm_rpath"; then 8937698f425bSmrg # We should set the runpath_var. 8938698f425bSmrg rpath= 8939698f425bSmrg for dir in $finalize_perm_rpath; do 89409ef0b394Smrg func_append rpath "$dir:" 8941698f425bSmrg done 8942698f425bSmrg finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " 8943266e564dSmrg fi 8944698f425bSmrg fi 8945266e564dSmrg 8946698f425bSmrg if test "$no_install" = yes; then 8947698f425bSmrg # We don't need to create a wrapper script. 8948698f425bSmrg link_command="$compile_var$compile_command$compile_rpath" 8949698f425bSmrg # Replace the output file specification. 89509ef0b394Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` 8951698f425bSmrg # Delete the old output file. 8952698f425bSmrg $opt_dry_run || $RM $output 8953698f425bSmrg # Link the executable and exit 8954698f425bSmrg func_show_eval "$link_command" 'exit $?' 89559ef0b394Smrg 89569ef0b394Smrg if test -n "$postlink_cmds"; then 89579ef0b394Smrg func_to_tool_file "$output" 89589ef0b394Smrg postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` 89599ef0b394Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 89609ef0b394Smrg fi 89619ef0b394Smrg 8962266e564dSmrg exit $EXIT_SUCCESS 8963698f425bSmrg fi 8964266e564dSmrg 8965698f425bSmrg if test "$hardcode_action" = relink; then 8966698f425bSmrg # Fast installation is not supported 8967698f425bSmrg link_command="$compile_var$compile_command$compile_rpath" 8968698f425bSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8969698f425bSmrg 8970698f425bSmrg func_warning "this platform does not like uninstalled shared libraries" 8971698f425bSmrg func_warning "\`$output' will be relinked during installation" 8972698f425bSmrg else 8973698f425bSmrg if test "$fast_install" != no; then 8974698f425bSmrg link_command="$finalize_var$compile_command$finalize_rpath" 8975698f425bSmrg if test "$fast_install" = yes; then 89769ef0b394Smrg relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` 8977698f425bSmrg else 8978698f425bSmrg # fast_install is set to needless 8979698f425bSmrg relink_command= 8980698f425bSmrg fi 8981266e564dSmrg else 8982698f425bSmrg link_command="$compile_var$compile_command$compile_rpath" 8983698f425bSmrg relink_command="$finalize_var$finalize_command$finalize_rpath" 8984266e564dSmrg fi 8985698f425bSmrg fi 8986266e564dSmrg 8987698f425bSmrg # Replace the output file specification. 89889ef0b394Smrg link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` 8989266e564dSmrg 8990698f425bSmrg # Delete the old output files. 8991698f425bSmrg $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname 8992266e564dSmrg 8993698f425bSmrg func_show_eval "$link_command" 'exit $?' 8994266e564dSmrg 89959ef0b394Smrg if test -n "$postlink_cmds"; then 89969ef0b394Smrg func_to_tool_file "$output_objdir/$outputname" 89979ef0b394Smrg 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'` 89989ef0b394Smrg func_execute_cmds "$postlink_cmds" 'exit $?' 89999ef0b394Smrg fi 90009ef0b394Smrg 9001698f425bSmrg # Now create the wrapper script. 9002698f425bSmrg func_verbose "creating $output" 9003266e564dSmrg 9004698f425bSmrg # Quote the relink command for shipping. 9005698f425bSmrg if test -n "$relink_command"; then 9006698f425bSmrg # Preserve any variables that may affect compiler behavior 9007698f425bSmrg for var in $variables_saved_for_relink; do 9008698f425bSmrg if eval test -z \"\${$var+set}\"; then 9009698f425bSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9010698f425bSmrg elif eval var_value=\$$var; test -z "$var_value"; then 9011698f425bSmrg relink_command="$var=; export $var; $relink_command" 9012266e564dSmrg else 9013698f425bSmrg func_quote_for_eval "$var_value" 9014698f425bSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9015266e564dSmrg fi 9016698f425bSmrg done 9017698f425bSmrg relink_command="(cd `pwd`; $relink_command)" 90189ef0b394Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9019698f425bSmrg fi 9020698f425bSmrg 9021698f425bSmrg # Only actually do things if not in dry run mode. 9022698f425bSmrg $opt_dry_run || { 9023698f425bSmrg # win32 will think the script is a binary if it has 9024698f425bSmrg # a .exe suffix, so we strip it off here. 9025698f425bSmrg case $output in 9026698f425bSmrg *.exe) func_stripname '' '.exe' "$output" 9027698f425bSmrg output=$func_stripname_result ;; 9028698f425bSmrg esac 9029698f425bSmrg # test for cygwin because mv fails w/o .exe extensions 9030698f425bSmrg case $host in 9031698f425bSmrg *cygwin*) 9032698f425bSmrg exeext=.exe 9033698f425bSmrg func_stripname '' '.exe' "$outputname" 9034698f425bSmrg outputname=$func_stripname_result ;; 9035698f425bSmrg *) exeext= ;; 9036266e564dSmrg esac 9037698f425bSmrg case $host in 9038698f425bSmrg *cygwin* | *mingw* ) 9039698f425bSmrg func_dirname_and_basename "$output" "" "." 9040698f425bSmrg output_name=$func_basename_result 9041698f425bSmrg output_path=$func_dirname_result 9042698f425bSmrg cwrappersource="$output_path/$objdir/lt-$output_name.c" 9043698f425bSmrg cwrapper="$output_path/$output_name.exe" 9044698f425bSmrg $RM $cwrappersource $cwrapper 9045698f425bSmrg trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 9046698f425bSmrg 9047698f425bSmrg func_emit_cwrapperexe_src > $cwrappersource 9048698f425bSmrg 9049698f425bSmrg # The wrapper executable is built using the $host compiler, 9050698f425bSmrg # because it contains $host paths and files. If cross- 9051698f425bSmrg # compiling, it, like the target executable, must be 9052698f425bSmrg # executed on the $host or under an emulation environment. 9053698f425bSmrg $opt_dry_run || { 9054698f425bSmrg $LTCC $LTCFLAGS -o $cwrapper $cwrappersource 9055698f425bSmrg $STRIP $cwrapper 9056698f425bSmrg } 9057266e564dSmrg 9058698f425bSmrg # Now, create the wrapper script for func_source use: 9059698f425bSmrg func_ltwrapper_scriptname $cwrapper 9060698f425bSmrg $RM $func_ltwrapper_scriptname_result 9061698f425bSmrg trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 9062698f425bSmrg $opt_dry_run || { 9063698f425bSmrg # note: this script will not be executed, so do not chmod. 9064698f425bSmrg if test "x$build" = "x$host" ; then 9065698f425bSmrg $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result 9066698f425bSmrg else 9067698f425bSmrg func_emit_wrapper no > $func_ltwrapper_scriptname_result 9068698f425bSmrg fi 9069698f425bSmrg } 9070698f425bSmrg ;; 9071698f425bSmrg * ) 9072698f425bSmrg $RM $output 9073698f425bSmrg trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 9074266e564dSmrg 9075698f425bSmrg func_emit_wrapper no > $output 9076698f425bSmrg chmod +x $output 9077698f425bSmrg ;; 9078698f425bSmrg esac 9079698f425bSmrg } 9080698f425bSmrg exit $EXIT_SUCCESS 9081698f425bSmrg ;; 9082698f425bSmrg esac 9083266e564dSmrg 9084698f425bSmrg # See if we need to build an old-fashioned archive. 9085698f425bSmrg for oldlib in $oldlibs; do 9086266e564dSmrg 9087698f425bSmrg if test "$build_libtool_libs" = convenience; then 9088698f425bSmrg oldobjs="$libobjs_save $symfileobj" 9089698f425bSmrg addlibs="$convenience" 9090698f425bSmrg build_libtool_libs=no 9091698f425bSmrg else 9092698f425bSmrg if test "$build_libtool_libs" = module; then 9093698f425bSmrg oldobjs="$libobjs_save" 9094698f425bSmrg build_libtool_libs=no 9095698f425bSmrg else 9096698f425bSmrg oldobjs="$old_deplibs $non_pic_objects" 9097698f425bSmrg if test "$preload" = yes && test -f "$symfileobj"; then 90989ef0b394Smrg func_append oldobjs " $symfileobj" 9099698f425bSmrg fi 9100698f425bSmrg fi 9101698f425bSmrg addlibs="$old_convenience" 9102266e564dSmrg fi 9103266e564dSmrg 9104698f425bSmrg if test -n "$addlibs"; then 9105698f425bSmrg gentop="$output_objdir/${outputname}x" 91069ef0b394Smrg func_append generated " $gentop" 9107266e564dSmrg 9108698f425bSmrg func_extract_archives $gentop $addlibs 91099ef0b394Smrg func_append oldobjs " $func_extract_archives_result" 9110698f425bSmrg fi 9111266e564dSmrg 9112698f425bSmrg # Do each command in the archive commands. 9113698f425bSmrg if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then 9114698f425bSmrg cmds=$old_archive_from_new_cmds 9115698f425bSmrg else 9116266e564dSmrg 9117698f425bSmrg # Add any objects from preloaded convenience libraries 9118698f425bSmrg if test -n "$dlprefiles"; then 9119698f425bSmrg gentop="$output_objdir/${outputname}x" 91209ef0b394Smrg func_append generated " $gentop" 9121266e564dSmrg 9122698f425bSmrg func_extract_archives $gentop $dlprefiles 91239ef0b394Smrg func_append oldobjs " $func_extract_archives_result" 9124698f425bSmrg fi 9125266e564dSmrg 9126698f425bSmrg # POSIX demands no paths to be encoded in archives. We have 9127698f425bSmrg # to avoid creating archives with duplicate basenames if we 9128698f425bSmrg # might have to extract them afterwards, e.g., when creating a 9129698f425bSmrg # static archive out of a convenience library, or when linking 9130698f425bSmrg # the entirety of a libtool archive into another (currently 9131698f425bSmrg # not supported by libtool). 9132698f425bSmrg if (for obj in $oldobjs 9133698f425bSmrg do 9134698f425bSmrg func_basename "$obj" 9135698f425bSmrg $ECHO "$func_basename_result" 9136698f425bSmrg done | sort | sort -uc >/dev/null 2>&1); then 9137698f425bSmrg : 9138698f425bSmrg else 91399ef0b394Smrg echo "copying selected object files to avoid basename conflicts..." 9140698f425bSmrg gentop="$output_objdir/${outputname}x" 91419ef0b394Smrg func_append generated " $gentop" 9142698f425bSmrg func_mkdir_p "$gentop" 9143698f425bSmrg save_oldobjs=$oldobjs 9144698f425bSmrg oldobjs= 9145698f425bSmrg counter=1 9146698f425bSmrg for obj in $save_oldobjs 9147698f425bSmrg do 9148698f425bSmrg func_basename "$obj" 9149698f425bSmrg objbase="$func_basename_result" 9150698f425bSmrg case " $oldobjs " in 9151698f425bSmrg " ") oldobjs=$obj ;; 9152698f425bSmrg *[\ /]"$objbase "*) 9153698f425bSmrg while :; do 9154698f425bSmrg # Make sure we don't pick an alternate name that also 9155698f425bSmrg # overlaps. 9156698f425bSmrg newobj=lt$counter-$objbase 9157698f425bSmrg func_arith $counter + 1 9158698f425bSmrg counter=$func_arith_result 9159698f425bSmrg case " $oldobjs " in 9160698f425bSmrg *[\ /]"$newobj "*) ;; 9161698f425bSmrg *) if test ! -f "$gentop/$newobj"; then break; fi ;; 9162698f425bSmrg esac 9163698f425bSmrg done 9164698f425bSmrg func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" 91659ef0b394Smrg func_append oldobjs " $gentop/$newobj" 9166698f425bSmrg ;; 91679ef0b394Smrg *) func_append oldobjs " $obj" ;; 9168698f425bSmrg esac 9169266e564dSmrg done 9170266e564dSmrg fi 9171fb5e8d76Smrg func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 9172fb5e8d76Smrg tool_oldlib=$func_to_tool_file_result 9173698f425bSmrg eval cmds=\"$old_archive_cmds\" 9174266e564dSmrg 9175698f425bSmrg func_len " $cmds" 9176698f425bSmrg len=$func_len_result 9177698f425bSmrg if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then 9178698f425bSmrg cmds=$old_archive_cmds 91799ef0b394Smrg elif test -n "$archiver_list_spec"; then 91809ef0b394Smrg func_verbose "using command file archive linking..." 91819ef0b394Smrg for obj in $oldobjs 91829ef0b394Smrg do 91839ef0b394Smrg func_to_tool_file "$obj" 91849ef0b394Smrg $ECHO "$func_to_tool_file_result" 91859ef0b394Smrg done > $output_objdir/$libname.libcmd 91869ef0b394Smrg func_to_tool_file "$output_objdir/$libname.libcmd" 91879ef0b394Smrg oldobjs=" $archiver_list_spec$func_to_tool_file_result" 91889ef0b394Smrg cmds=$old_archive_cmds 9189698f425bSmrg else 9190698f425bSmrg # the command line is too long to link in one step, link in parts 9191698f425bSmrg func_verbose "using piecewise archive linking..." 9192698f425bSmrg save_RANLIB=$RANLIB 9193698f425bSmrg RANLIB=: 9194698f425bSmrg objlist= 9195698f425bSmrg concat_cmds= 9196698f425bSmrg save_oldobjs=$oldobjs 9197698f425bSmrg oldobjs= 9198698f425bSmrg # Is there a better way of finding the last object in the list? 9199698f425bSmrg for obj in $save_oldobjs 9200698f425bSmrg do 9201698f425bSmrg last_oldobj=$obj 9202698f425bSmrg done 9203698f425bSmrg eval test_cmds=\"$old_archive_cmds\" 9204698f425bSmrg func_len " $test_cmds" 9205698f425bSmrg len0=$func_len_result 9206698f425bSmrg len=$len0 9207698f425bSmrg for obj in $save_oldobjs 9208698f425bSmrg do 9209698f425bSmrg func_len " $obj" 9210698f425bSmrg func_arith $len + $func_len_result 9211698f425bSmrg len=$func_arith_result 9212698f425bSmrg func_append objlist " $obj" 9213698f425bSmrg if test "$len" -lt "$max_cmd_len"; then 9214698f425bSmrg : 9215698f425bSmrg else 9216698f425bSmrg # the above command should be used before it gets too long 9217698f425bSmrg oldobjs=$objlist 9218698f425bSmrg if test "$obj" = "$last_oldobj" ; then 9219698f425bSmrg RANLIB=$save_RANLIB 9220698f425bSmrg fi 9221698f425bSmrg test -z "$concat_cmds" || concat_cmds=$concat_cmds~ 9222698f425bSmrg eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" 9223698f425bSmrg objlist= 9224698f425bSmrg len=$len0 9225698f425bSmrg fi 9226698f425bSmrg done 9227698f425bSmrg RANLIB=$save_RANLIB 9228698f425bSmrg oldobjs=$objlist 9229698f425bSmrg if test "X$oldobjs" = "X" ; then 9230698f425bSmrg eval cmds=\"\$concat_cmds\" 9231698f425bSmrg else 9232698f425bSmrg eval cmds=\"\$concat_cmds~\$old_archive_cmds\" 9233698f425bSmrg fi 9234698f425bSmrg fi 9235698f425bSmrg fi 9236698f425bSmrg func_execute_cmds "$cmds" 'exit $?' 9237266e564dSmrg done 9238266e564dSmrg 9239698f425bSmrg test -n "$generated" && \ 9240698f425bSmrg func_show_eval "${RM}r$generated" 9241266e564dSmrg 9242698f425bSmrg # Now create the libtool archive. 9243698f425bSmrg case $output in 9244698f425bSmrg *.la) 9245698f425bSmrg old_library= 9246698f425bSmrg test "$build_old_libs" = yes && old_library="$libname.$libext" 9247698f425bSmrg func_verbose "creating $output" 9248266e564dSmrg 9249698f425bSmrg # Preserve any variables that may affect compiler behavior 9250698f425bSmrg for var in $variables_saved_for_relink; do 9251698f425bSmrg if eval test -z \"\${$var+set}\"; then 9252698f425bSmrg relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" 9253698f425bSmrg elif eval var_value=\$$var; test -z "$var_value"; then 9254698f425bSmrg relink_command="$var=; export $var; $relink_command" 9255266e564dSmrg else 9256698f425bSmrg func_quote_for_eval "$var_value" 9257698f425bSmrg relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" 9258266e564dSmrg fi 9259698f425bSmrg done 9260698f425bSmrg # Quote the link command for shipping. 9261698f425bSmrg relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" 92629ef0b394Smrg relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` 9263698f425bSmrg if test "$hardcode_automatic" = yes ; then 9264698f425bSmrg relink_command= 9265698f425bSmrg fi 9266266e564dSmrg 9267698f425bSmrg # Only create the output if not a dry run. 9268698f425bSmrg $opt_dry_run || { 9269698f425bSmrg for installed in no yes; do 9270698f425bSmrg if test "$installed" = yes; then 9271698f425bSmrg if test -z "$install_libdir"; then 9272698f425bSmrg break 9273698f425bSmrg fi 9274698f425bSmrg output="$output_objdir/$outputname"i 9275698f425bSmrg # Replace all uninstalled libtool libraries with the installed ones 9276698f425bSmrg newdependency_libs= 9277698f425bSmrg for deplib in $dependency_libs; do 9278698f425bSmrg case $deplib in 9279698f425bSmrg *.la) 9280698f425bSmrg func_basename "$deplib" 9281698f425bSmrg name="$func_basename_result" 9282fb5e8d76Smrg func_resolve_sysroot "$deplib" 9283fb5e8d76Smrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` 9284698f425bSmrg test -z "$libdir" && \ 9285698f425bSmrg func_fatal_error "\`$deplib' is not a valid libtool archive" 92869ef0b394Smrg func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" 92879ef0b394Smrg ;; 92889ef0b394Smrg -L*) 92899ef0b394Smrg func_stripname -L '' "$deplib" 92909ef0b394Smrg func_replace_sysroot "$func_stripname_result" 92919ef0b394Smrg func_append newdependency_libs " -L$func_replace_sysroot_result" 9292698f425bSmrg ;; 92939ef0b394Smrg -R*) 92949ef0b394Smrg func_stripname -R '' "$deplib" 92959ef0b394Smrg func_replace_sysroot "$func_stripname_result" 92969ef0b394Smrg func_append newdependency_libs " -R$func_replace_sysroot_result" 92979ef0b394Smrg ;; 92989ef0b394Smrg *) func_append newdependency_libs " $deplib" ;; 9299698f425bSmrg esac 9300698f425bSmrg done 9301698f425bSmrg dependency_libs="$newdependency_libs" 9302698f425bSmrg newdlfiles= 9303698f425bSmrg 9304698f425bSmrg for lib in $dlfiles; do 9305698f425bSmrg case $lib in 9306698f425bSmrg *.la) 9307698f425bSmrg func_basename "$lib" 9308698f425bSmrg name="$func_basename_result" 9309698f425bSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9310698f425bSmrg test -z "$libdir" && \ 9311698f425bSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 93129ef0b394Smrg func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" 9313698f425bSmrg ;; 93149ef0b394Smrg *) func_append newdlfiles " $lib" ;; 9315698f425bSmrg esac 9316698f425bSmrg done 9317698f425bSmrg dlfiles="$newdlfiles" 9318698f425bSmrg newdlprefiles= 9319698f425bSmrg for lib in $dlprefiles; do 9320698f425bSmrg case $lib in 9321698f425bSmrg *.la) 9322698f425bSmrg # Only pass preopened files to the pseudo-archive (for 9323698f425bSmrg # eventual linking with the app. that links it) if we 9324698f425bSmrg # didn't already link the preopened objects directly into 9325698f425bSmrg # the library: 9326698f425bSmrg func_basename "$lib" 9327698f425bSmrg name="$func_basename_result" 9328698f425bSmrg eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` 9329698f425bSmrg test -z "$libdir" && \ 9330698f425bSmrg func_fatal_error "\`$lib' is not a valid libtool archive" 93319ef0b394Smrg func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" 9332698f425bSmrg ;; 9333698f425bSmrg esac 9334698f425bSmrg done 9335698f425bSmrg dlprefiles="$newdlprefiles" 9336698f425bSmrg else 9337698f425bSmrg newdlfiles= 9338698f425bSmrg for lib in $dlfiles; do 9339698f425bSmrg case $lib in 9340698f425bSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9341698f425bSmrg *) abs=`pwd`"/$lib" ;; 9342698f425bSmrg esac 93439ef0b394Smrg func_append newdlfiles " $abs" 9344698f425bSmrg done 9345698f425bSmrg dlfiles="$newdlfiles" 9346698f425bSmrg newdlprefiles= 9347698f425bSmrg for lib in $dlprefiles; do 9348698f425bSmrg case $lib in 9349698f425bSmrg [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; 9350698f425bSmrg *) abs=`pwd`"/$lib" ;; 9351698f425bSmrg esac 93529ef0b394Smrg func_append newdlprefiles " $abs" 9353698f425bSmrg done 9354698f425bSmrg dlprefiles="$newdlprefiles" 9355698f425bSmrg fi 9356698f425bSmrg $RM $output 9357698f425bSmrg # place dlname in correct position for cygwin 93589ef0b394Smrg # In fact, it would be nice if we could use this code for all target 93599ef0b394Smrg # systems that can't hard-code library paths into their executables 93609ef0b394Smrg # and that have no shared library path variable independent of PATH, 93619ef0b394Smrg # but it turns out we can't easily determine that from inspecting 93629ef0b394Smrg # libtool variables, so we have to hard-code the OSs to which it 93639ef0b394Smrg # applies here; at the moment, that means platforms that use the PE 93649ef0b394Smrg # object format with DLL files. See the long comment at the top of 93659ef0b394Smrg # tests/bindir.at for full details. 9366698f425bSmrg tdlname=$dlname 9367698f425bSmrg case $host,$output,$installed,$module,$dlname in 93689ef0b394Smrg *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) 93699ef0b394Smrg # If a -bindir argument was supplied, place the dll there. 93709ef0b394Smrg if test "x$bindir" != x ; 93719ef0b394Smrg then 93729ef0b394Smrg func_relative_path "$install_libdir" "$bindir" 93739ef0b394Smrg tdlname=$func_relative_path_result$dlname 93749ef0b394Smrg else 93759ef0b394Smrg # Otherwise fall back on heuristic. 93769ef0b394Smrg tdlname=../bin/$dlname 93779ef0b394Smrg fi 93789ef0b394Smrg ;; 9379698f425bSmrg esac 9380698f425bSmrg $ECHO > $output "\ 9381698f425bSmrg# $outputname - a libtool library file 9382698f425bSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION 9383698f425bSmrg# 9384698f425bSmrg# Please DO NOT delete this file! 9385698f425bSmrg# It is necessary for linking the library. 9386266e564dSmrg 9387698f425bSmrg# The name that we can dlopen(3). 9388698f425bSmrgdlname='$tdlname' 9389266e564dSmrg 9390698f425bSmrg# Names of this library. 9391698f425bSmrglibrary_names='$library_names' 9392266e564dSmrg 9393698f425bSmrg# The name of the static archive. 9394698f425bSmrgold_library='$old_library' 9395266e564dSmrg 9396698f425bSmrg# Linker flags that can not go in dependency_libs. 9397698f425bSmrginherited_linker_flags='$new_inherited_linker_flags' 9398266e564dSmrg 9399698f425bSmrg# Libraries that this one depends upon. 9400698f425bSmrgdependency_libs='$dependency_libs' 9401266e564dSmrg 9402698f425bSmrg# Names of additional weak libraries provided by this library 9403698f425bSmrgweak_library_names='$weak_libs' 9404266e564dSmrg 9405698f425bSmrg# Version information for $libname. 9406698f425bSmrgcurrent=$current 9407698f425bSmrgage=$age 9408698f425bSmrgrevision=$revision 9409266e564dSmrg 9410698f425bSmrg# Is this an already installed library? 9411698f425bSmrginstalled=$installed 9412266e564dSmrg 9413698f425bSmrg# Should we warn about portability when linking against -modules? 9414698f425bSmrgshouldnotlink=$module 9415266e564dSmrg 9416698f425bSmrg# Files to dlopen/dlpreopen 9417698f425bSmrgdlopen='$dlfiles' 9418698f425bSmrgdlpreopen='$dlprefiles' 9419266e564dSmrg 9420698f425bSmrg# Directory that this library needs to be installed in: 9421698f425bSmrglibdir='$install_libdir'" 9422698f425bSmrg if test "$installed" = no && test "$need_relink" = yes; then 9423698f425bSmrg $ECHO >> $output "\ 9424698f425bSmrgrelink_command=\"$relink_command\"" 9425698f425bSmrg fi 9426698f425bSmrg done 9427698f425bSmrg } 9428266e564dSmrg 9429698f425bSmrg # Do a symbolic link so that the libtool archive can be found in 9430698f425bSmrg # LD_LIBRARY_PATH before the program is installed. 9431698f425bSmrg func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' 9432698f425bSmrg ;; 9433698f425bSmrg esac 9434698f425bSmrg exit $EXIT_SUCCESS 9435698f425bSmrg} 9436266e564dSmrg 94379ef0b394Smrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } && 9438698f425bSmrg func_mode_link ${1+"$@"} 9439266e564dSmrg 9440266e564dSmrg 9441698f425bSmrg# func_mode_uninstall arg... 9442698f425bSmrgfunc_mode_uninstall () 9443698f425bSmrg{ 9444698f425bSmrg $opt_debug 9445698f425bSmrg RM="$nonopt" 9446266e564dSmrg files= 9447266e564dSmrg rmforce= 9448266e564dSmrg exit_status=0 9449266e564dSmrg 9450266e564dSmrg # This variable tells wrapper scripts just to set variables rather 9451266e564dSmrg # than running their programs. 9452266e564dSmrg libtool_install_magic="$magic" 9453266e564dSmrg 9454266e564dSmrg for arg 9455266e564dSmrg do 9456266e564dSmrg case $arg in 94579ef0b394Smrg -f) func_append RM " $arg"; rmforce=yes ;; 94589ef0b394Smrg -*) func_append RM " $arg" ;; 94599ef0b394Smrg *) func_append files " $arg" ;; 9460266e564dSmrg esac 9461266e564dSmrg done 9462266e564dSmrg 9463698f425bSmrg test -z "$RM" && \ 9464698f425bSmrg func_fatal_help "you must specify an RM program" 9465266e564dSmrg 9466266e564dSmrg rmdirs= 9467266e564dSmrg 9468266e564dSmrg for file in $files; do 9469698f425bSmrg func_dirname "$file" "" "." 9470698f425bSmrg dir="$func_dirname_result" 9471698f425bSmrg if test "X$dir" = X.; then 94729ef0b394Smrg odir="$objdir" 9473266e564dSmrg else 94749ef0b394Smrg odir="$dir/$objdir" 9475266e564dSmrg fi 9476698f425bSmrg func_basename "$file" 9477698f425bSmrg name="$func_basename_result" 94789ef0b394Smrg test "$opt_mode" = uninstall && odir="$dir" 9479266e564dSmrg 94809ef0b394Smrg # Remember odir for removal later, being careful to avoid duplicates 94819ef0b394Smrg if test "$opt_mode" = clean; then 9482266e564dSmrg case " $rmdirs " in 94839ef0b394Smrg *" $odir "*) ;; 94849ef0b394Smrg *) func_append rmdirs " $odir" ;; 9485266e564dSmrg esac 9486266e564dSmrg fi 9487266e564dSmrg 9488266e564dSmrg # Don't error if the file doesn't exist and rm -f was used. 9489698f425bSmrg if { test -L "$file"; } >/dev/null 2>&1 || 9490698f425bSmrg { test -h "$file"; } >/dev/null 2>&1 || 9491698f425bSmrg test -f "$file"; then 9492266e564dSmrg : 9493266e564dSmrg elif test -d "$file"; then 9494266e564dSmrg exit_status=1 9495266e564dSmrg continue 9496266e564dSmrg elif test "$rmforce" = yes; then 9497266e564dSmrg continue 9498266e564dSmrg fi 9499266e564dSmrg 9500266e564dSmrg rmfiles="$file" 9501266e564dSmrg 9502266e564dSmrg case $name in 9503266e564dSmrg *.la) 9504266e564dSmrg # Possibly a libtool archive, so verify it. 9505698f425bSmrg if func_lalib_p "$file"; then 9506698f425bSmrg func_source $dir/$name 9507266e564dSmrg 9508266e564dSmrg # Delete the libtool libraries and symlinks. 9509266e564dSmrg for n in $library_names; do 95109ef0b394Smrg func_append rmfiles " $odir/$n" 9511266e564dSmrg done 95129ef0b394Smrg test -n "$old_library" && func_append rmfiles " $odir/$old_library" 9513266e564dSmrg 95149ef0b394Smrg case "$opt_mode" in 9515266e564dSmrg clean) 95169ef0b394Smrg case " $library_names " in 9517266e564dSmrg *" $dlname "*) ;; 95189ef0b394Smrg *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; 9519266e564dSmrg esac 95209ef0b394Smrg test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" 9521266e564dSmrg ;; 9522266e564dSmrg uninstall) 9523266e564dSmrg if test -n "$library_names"; then 9524266e564dSmrg # Do each command in the postuninstall commands. 9525698f425bSmrg func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9526266e564dSmrg fi 9527266e564dSmrg 9528266e564dSmrg if test -n "$old_library"; then 9529266e564dSmrg # Do each command in the old_postuninstall commands. 9530698f425bSmrg func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' 9531266e564dSmrg fi 9532266e564dSmrg # FIXME: should reinstall the best remaining shared library. 9533266e564dSmrg ;; 9534266e564dSmrg esac 9535266e564dSmrg fi 9536266e564dSmrg ;; 9537266e564dSmrg 9538266e564dSmrg *.lo) 9539266e564dSmrg # Possibly a libtool object, so verify it. 9540698f425bSmrg if func_lalib_p "$file"; then 9541266e564dSmrg 9542266e564dSmrg # Read the .lo file 9543698f425bSmrg func_source $dir/$name 9544266e564dSmrg 9545266e564dSmrg # Add PIC object to the list of files to remove. 9546698f425bSmrg if test -n "$pic_object" && 9547698f425bSmrg test "$pic_object" != none; then 95489ef0b394Smrg func_append rmfiles " $dir/$pic_object" 9549266e564dSmrg fi 9550266e564dSmrg 9551266e564dSmrg # Add non-PIC object to the list of files to remove. 9552698f425bSmrg if test -n "$non_pic_object" && 9553698f425bSmrg test "$non_pic_object" != none; then 95549ef0b394Smrg func_append rmfiles " $dir/$non_pic_object" 9555266e564dSmrg fi 9556266e564dSmrg fi 9557266e564dSmrg ;; 9558266e564dSmrg 9559266e564dSmrg *) 95609ef0b394Smrg if test "$opt_mode" = clean ; then 9561266e564dSmrg noexename=$name 9562266e564dSmrg case $file in 9563266e564dSmrg *.exe) 9564698f425bSmrg func_stripname '' '.exe' "$file" 9565698f425bSmrg file=$func_stripname_result 9566698f425bSmrg func_stripname '' '.exe' "$name" 9567698f425bSmrg noexename=$func_stripname_result 9568266e564dSmrg # $file with .exe has already been added to rmfiles, 9569266e564dSmrg # add $file without .exe 95709ef0b394Smrg func_append rmfiles " $file" 9571266e564dSmrg ;; 9572266e564dSmrg esac 9573266e564dSmrg # Do a test to see if this is a libtool program. 9574698f425bSmrg if func_ltwrapper_p "$file"; then 9575698f425bSmrg if func_ltwrapper_executable_p "$file"; then 9576698f425bSmrg func_ltwrapper_scriptname "$file" 9577698f425bSmrg relink_command= 9578698f425bSmrg func_source $func_ltwrapper_scriptname_result 95799ef0b394Smrg func_append rmfiles " $func_ltwrapper_scriptname_result" 9580698f425bSmrg else 9581698f425bSmrg relink_command= 9582698f425bSmrg func_source $dir/$noexename 9583698f425bSmrg fi 9584266e564dSmrg 9585266e564dSmrg # note $name still contains .exe if it was in $file originally 9586266e564dSmrg # as does the version of $file that was added into $rmfiles 95879ef0b394Smrg func_append rmfiles " $odir/$name $odir/${name}S.${objext}" 9588266e564dSmrg if test "$fast_install" = yes && test -n "$relink_command"; then 95899ef0b394Smrg func_append rmfiles " $odir/lt-$name" 9590266e564dSmrg fi 9591266e564dSmrg if test "X$noexename" != "X$name" ; then 95929ef0b394Smrg func_append rmfiles " $odir/lt-${noexename}.c" 9593266e564dSmrg fi 9594266e564dSmrg fi 9595266e564dSmrg fi 9596266e564dSmrg ;; 9597266e564dSmrg esac 9598698f425bSmrg func_show_eval "$RM $rmfiles" 'exit_status=1' 9599266e564dSmrg done 9600266e564dSmrg 9601266e564dSmrg # Try to remove the ${objdir}s in the directories where we deleted files 9602266e564dSmrg for dir in $rmdirs; do 9603266e564dSmrg if test -d "$dir"; then 9604698f425bSmrg func_show_eval "rmdir $dir >/dev/null 2>&1" 9605266e564dSmrg fi 9606266e564dSmrg done 9607266e564dSmrg 9608266e564dSmrg exit $exit_status 9609698f425bSmrg} 9610266e564dSmrg 96119ef0b394Smrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && 9612698f425bSmrg func_mode_uninstall ${1+"$@"} 9613266e564dSmrg 96149ef0b394Smrgtest -z "$opt_mode" && { 9615698f425bSmrg help="$generic_help" 9616698f425bSmrg func_fatal_help "you must specify a MODE" 9617698f425bSmrg} 9618698f425bSmrg 9619698f425bSmrgtest -z "$exec_cmd" && \ 96209ef0b394Smrg func_fatal_help "invalid operation mode \`$opt_mode'" 9621266e564dSmrg 9622266e564dSmrgif test -n "$exec_cmd"; then 9623698f425bSmrg eval exec "$exec_cmd" 9624266e564dSmrg exit $EXIT_FAILURE 9625266e564dSmrgfi 9626266e564dSmrg 9627698f425bSmrgexit $exit_status 9628266e564dSmrg 9629266e564dSmrg 9630266e564dSmrg# The TAGs below are defined such that we never get into a situation 9631266e564dSmrg# in which we disable both kinds of libraries. Given conflicting 9632266e564dSmrg# choices, we go for a static library, that is the most portable, 9633266e564dSmrg# since we can't tell whether shared libraries were disabled because 9634266e564dSmrg# the user asked for that or because the platform doesn't support 9635266e564dSmrg# them. This is particularly important on AIX, because we don't 9636266e564dSmrg# support having both static and shared libraries enabled at the same 9637266e564dSmrg# time on that platform, so we default to a shared-only configuration. 9638266e564dSmrg# If a disable-shared tag is given, we'll fallback to a static-only 9639266e564dSmrg# configuration. But we'll never go from static-only to shared-only. 9640266e564dSmrg 9641266e564dSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared 9642698f425bSmrgbuild_libtool_libs=no 9643698f425bSmrgbuild_old_libs=yes 9644266e564dSmrg# ### END LIBTOOL TAG CONFIG: disable-shared 9645266e564dSmrg 9646266e564dSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static 9647698f425bSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` 9648266e564dSmrg# ### END LIBTOOL TAG CONFIG: disable-static 9649266e564dSmrg 9650266e564dSmrg# Local Variables: 9651266e564dSmrg# mode:shell-script 9652266e564dSmrg# sh-indentation:2 9653266e564dSmrg# End: 9654698f425bSmrg# vi:sw=2 9655698f425bSmrg 9656